Skip to content

Commit

Permalink
refs #5532 Scale WS2 by default
Browse files Browse the repository at this point in the history
  • Loading branch information
OwenArnold committed Jun 29, 2012
1 parent 8641d7f commit 41b4cf0
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 29 deletions.
18 changes: 9 additions & 9 deletions Code/Mantid/Framework/PythonAPI/PythonAlgorithms/Stitch1D.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ def PyInit(self):
self.declareProperty(name="EndOverlap", defaultValue=0.1, validator=overlap_validator, doc="Fraction along axis to end overlap. 0 to 1.");
self.declareProperty(name="ExpectGroupWorkspaces", defaultValue=False, doc="True if the input workspaces expected to be group workspaces.")
self.declareProperty(name="GroupWorkspaceIndex", defaultValue=0, doc="Index of the workspace in the group workspaces")
self.declareProperty(name="ScaleWorkspace1", defaultValue=True, doc="Scaling either with respect to workspace 1 or workspace 2.")
self.declareProperty(name="ScaleWorkspace2", defaultValue=True, doc="Scaling either with respect to workspace 1 or workspace 2.")
self.declareProperty(name="UseManualScaleFactor", defaultValue=False, doc="True to use a provided value for the scale factor.")
self.declareProperty(name="ManualScaleFactor", defaultValue=1.0, doc="Provided value for the scale factor.")
self.declareProperty(name="OutScaleFactor", defaultValue=-2.0, direction = Direction.Output, doc="The actual used value for the scaling factor.");
Expand All @@ -157,7 +157,7 @@ def PyExec(self):
start_overlap = float(self.getPropertyValue("StartOverlap"))
end_overlap = float(self.getPropertyValue("EndOverlap"))
b_manual_scale_factor = self.getProperty("UseManualScaleFactor").value
b_scale_workspace1 = self.getProperty("ScaleWorkspace1").value
b_scale_workspace2 = self.getProperty("ScaleWorkspace2").value

if start_overlap >= end_overlap:
raise RuntimeError("StartOverlap must be < EndOverlap")
Expand All @@ -172,17 +172,17 @@ def PyExec(self):
scaled_workspace_2 = None
if b_manual_scale_factor == True:
scale_factor = self.getProperty("ManualScaleFactor").value
if b_scale_workspace1 == True:
scaled_workspace_1 = ws1_flattened * scale_factor
scaled_workspace_2 = ws2_flattened * 1
else:
if b_scale_workspace2 == True:
scaled_workspace_1 = ws1_flattened * 1
scaled_workspace_2 = ws2_flattened * scale_factor
else:
if b_scale_workspace1 == True:
scale_factor = (ws2_overlap / ws1_overlap)
else:
scaled_workspace_1 = ws1_flattened * scale_factor
scaled_workspace_2 = ws2_flattened * 1
else:
if b_scale_workspace2 == True:
scale_factor = (ws1_overlap / ws2_overlap)
else:
scale_factor = (ws2_overlap / ws1_overlap)
scaled_workspace_1 = ws1_flattened * 1
scaled_workspace_2 = ws2_flattened * 1
self.setProperty("OutScaleFactor", scale_factor)
Expand Down
28 changes: 8 additions & 20 deletions Code/Mantid/Framework/PythonInterface/test/python/Stitch1DTest.py
Original file line number Diff line number Diff line change
Expand Up @@ -222,20 +222,7 @@ def test_calculates_scaling_factor_correctly(self):

scale_factor = float(alg.getPropertyValue("OutScaleFactor"))

# 1 * ((2 + 3)/( 1 + 1)) = 2.5
self.assertEqual(2.5, scale_factor)

def test_calculates_scaling_factor_correctly_inverted(self):
# Signal = 1, 1, 1, but only the middle to the end of the range is marked as overlap, so only 1, 1 used.
alg_a = run_algorithm("CreateMDHistoWorkspace",SignalInput='1,1,1',ErrorInput='1,1,1',Dimensionality='2',Extents='-1,1,-1,1',NumberOfBins='3,1',Names='A,B',Units='U1,U2',OutputWorkspace='flat_signal')
# Signal = 1, 2, 3, but only the middle to the end of the range is marked as overlap, so only 2, 3 used.
alg_b = run_algorithm("CreateMDHistoWorkspace",SignalInput='1,2,3',ErrorInput='1,1,1',Dimensionality='2',Extents='-1,1,-1,1',NumberOfBins='3,1',Names='A,B',Units='U1,U2',OutputWorkspace='rising_signal')

alg = run_algorithm("Stitch1D", Workspace1='flat_signal', Workspace2='rising_signal',OutputWorkspace='converted',StartOverlap=0.5,EndOverlap=1,ScaleWorkspace1=False,rethrow=True)
self.assertTrue(alg.isExecuted())
scale_factor = float(alg.getPropertyValue("OutScaleFactor"))

# 1 * (( 1 + 1) / (2 + 3)) = 0.4
# 1 * (( 1 + 1) / (2 + 3)) = 0.4
self.assertEqual(0.4, scale_factor)

def test_calculates_scaling_factor_correctly_inverted(self):
Expand All @@ -244,20 +231,21 @@ def test_calculates_scaling_factor_correctly_inverted(self):
# Signal = 1, 2, 3, but only the middle to the end of the range is marked as overlap, so only 2, 3 used.
alg_b = run_algorithm("CreateMDHistoWorkspace",SignalInput='1,2,3',ErrorInput='1,1,1',Dimensionality='2',Extents='-1,1,-1,1',NumberOfBins='3,1',Names='A,B',Units='U1,U2',OutputWorkspace='rising_signal')

alg = run_algorithm("Stitch1D", Workspace1='flat_signal', Workspace2='rising_signal',OutputWorkspace='converted',StartOverlap=0.5,EndOverlap=1,ScaleWorkspace1=False,rethrow=True)
alg = run_algorithm("Stitch1D", Workspace1='flat_signal', Workspace2='rising_signal',OutputWorkspace='converted',StartOverlap=0.5,EndOverlap=1,ScaleWorkspace2=False,rethrow=True)
self.assertTrue(alg.isExecuted())
scale_factor = float(alg.getPropertyValue("OutScaleFactor"))

# 1 * (( 1 + 1) / (2 + 3)) = 0.4
self.assertEqual(0.4, scale_factor)
# 1 * ((2 + 3)/( 1 + 1)) = 2.5
self.assertEqual(2.5, scale_factor)


def test_manual_scaling_factor(self):
alg_a = run_algorithm("CreateMDHistoWorkspace",SignalInput='1',ErrorInput='1',Dimensionality='2',Extents='-1,1,-1,1',NumberOfBins='3,1',Names='A,B',Units='U1,U2',OutputWorkspace='flat_signal')
alg_b = run_algorithm("CreateMDHistoWorkspace",SignalInput='1',ErrorInput='1',Dimensionality='2',Extents='-1,1,-1,1',NumberOfBins='3,1',Names='A,B',Units='U1,U2',OutputWorkspace='rising_signal')

expected_manual_scale_factor = 2.2

alg = run_algorithm("Stitch1D", Workspace1='flat_signal', Workspace2='rising_signal',OutputWorkspace='converted',StartOverlap=0.5,EndOverlap=1,ScaleWorkspace1=False,UseManualScaleFactor=True,ManualScaleFactor=expected_manual_scale_factor,rethrow=True)
alg = run_algorithm("Stitch1D", Workspace1='flat_signal', Workspace2='rising_signal',OutputWorkspace='converted',StartOverlap=0.5,EndOverlap=1,ScaleWorkspace2=True,UseManualScaleFactor=True,ManualScaleFactor=expected_manual_scale_factor,rethrow=True)
self.assertTrue(alg.isExecuted())
scale_factor = float(alg.getPropertyValue("OutScaleFactor"))

Expand All @@ -272,7 +260,7 @@ def test_flat_offsetting_schenario(self):
alg_a = run_algorithm("CreateMDHistoWorkspace",SignalInput=s1,ErrorInput=errors,Dimensionality='2',Extents='-1,1,-1,1',NumberOfBins=[len(errors),1],Names='A,B',Units='U1,U2',OutputWorkspace='flat_signal_a',rethrow=True)
alg_b = run_algorithm("CreateMDHistoWorkspace",SignalInput=s2,ErrorInput=errors,Dimensionality='2',Extents='-1,1,-1,1',NumberOfBins=[len(errors),1],Names='A,B',Units='U1,U2',OutputWorkspace='flat_signal_b',rethrow=True)
# Specify that overlap goes from start to half way along workspace
alg = run_algorithm("Stitch1D", Workspace1='flat_signal_a', Workspace2='flat_signal_b',OutputWorkspace='converted',StartOverlap=0.0,EndOverlap=0.5,ScaleWorkspace1=False,rethrow=True)
alg = run_algorithm("Stitch1D", Workspace1='flat_signal_a', Workspace2='flat_signal_b',OutputWorkspace='converted',StartOverlap=0.0,EndOverlap=0.5,ScaleWorkspace2=True,rethrow=True)
# Verify the calculated output values.
ws = mtd.retrieve(alg.getPropertyValue("OutputWorkspace"))
for i in range(0, len(errors)):
Expand All @@ -283,7 +271,7 @@ def test_flat_offsetting_schenario_with_scaling(self):
errors = [1,1,1,1,1,1,1,1,1,1] # Errors for both input ws1 and ws2
s1 = [1,1,1,1,1,1,1,1,1,1] # Signal values for ws1
s2 = [3,3,3,3,3,3,3,3,3,3] # Signal values for ws2
expected_output_signal =[2.8,2.8,2.8,2.8,2.8,4,4,4,4,4]
expected_output_signal =[2,2,2,2,2,4,4,4,4,4]
expected_output_error_sq = [0.8, 0.8, 0.8, 0.8, 0.8, 2, 2, 2, 2, 2]
alg_a = run_algorithm("CreateMDHistoWorkspace",SignalInput=s1,ErrorInput=errors,Dimensionality='2',Extents='-1,1,-1,1',NumberOfBins=[len(errors),1],Names='A,B',Units='U1,U2',OutputWorkspace='flat_signal_a',rethrow=True)
alg_b = run_algorithm("CreateMDHistoWorkspace",SignalInput=s2,ErrorInput=errors,Dimensionality='2',Extents='-1,1,-1,1',NumberOfBins=[len(errors),1],Names='A,B',Units='U1,U2',OutputWorkspace='flat_signal_b',rethrow=True)
Expand Down

0 comments on commit 41b4cf0

Please sign in to comment.