diff --git a/Code/Mantid/scripts/Inelastic/Direct/dgreduce.py b/Code/Mantid/scripts/Inelastic/Direct/dgreduce.py index fd1318c9e6707dcb75146325f1518f75a441f079..0e261a7d34558240e0b0a1d8a04049259056691a 100644 --- a/Code/Mantid/scripts/Inelastic/Direct/dgreduce.py +++ b/Code/Mantid/scripts/Inelastic/Direct/dgreduce.py @@ -3,7 +3,7 @@ import Direct.DirectEnergyConversion as DRC from mantid.simpleapi import * from mantid.kernel import funcreturns - +from mantid import api # the class which is responsible for data reduction global Reducer @@ -134,6 +134,7 @@ def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=No # -------------------------------------------------------------------------------------------------------- if sample_run: Reducer.sample_run = sample_run + sample_run = None try: n,r=funcreturns.lhs_info('both') wksp_out=r[0] @@ -149,7 +150,37 @@ def arb_units(wb_run,sample_run,ei_guess,rebin,map_file='default',monovan_run=No return res - +def runs_are_equal(ws1,ws2): + """Compare two run numbers, provided either as run numbers, + or as workspaces or as ws names""" + if ws1 == ws2: + return True + #----------------------------------------------- + def get_run_num(name_or_ws): + err = None + try: + if isinstance(name_or_ws,api.MatrixWorkspace): + run_num = name_or_ws.getRunNumber() + elif name_or_ws in mtd: # this is also throw Boost.Python.ArgumentError error if mtd not accepts it + ws = mtd[name_or_ws] + run_num = ws.getRunNumber() + else: + raise AttributeError + except Exception as err: + pass + if not err is None: + raise AttributeError("Input parameter is neither workspace nor ws name") + return run_num + #----------------------------------------------- + try: + run_num1 = get_run_num(ws1) + except AttributeError: + return False + try: + run_num2 = get_run_num(ws2) + except AttributeError: + return False + return run_num1==run_num2 def abs_units(wb_for_run,sample_run,monovan_run,wb_for_monovanadium,samp_rmm,samp_mass,ei_guess,rebin,map_file='default',monovan_mapfile='default',**kwargs): """ @@ -240,13 +271,14 @@ def abs_units(wb_for_run,sample_run,monovan_run,wb_for_monovanadium,samp_rmm,sam if sample_run: Reducer.sample_run = sample_run + sample_run = None try: n,r=funcreturns.lhs_info('both') results_name=r[0] except: results_name = Reducer.prop_man.get_sample_ws_name() - if wb_for_run == wb_for_monovanadium: # wb_for_monovanadium property does not accept duplicated workspace + if runs_are_equal(wb_for_run,wb_for_monovanadium):# wb_for_monovanadium property does not accept duplicated workspace wb_for_monovanadium = None # if this value is none, it is constructed to be equal to wb_for_run wksp_out = arb_units(wb_for_run,sample_run,ei_guess,rebin,map_file,monovan_run,wb_for_monovanadium,**kwargs) diff --git a/Code/Mantid/scripts/test/DirectEnergyConversionTest.py b/Code/Mantid/scripts/test/DirectEnergyConversionTest.py index 9c8e3439a26d91c9d6b32940c8c18e0b1a7810b5..0b295c6293fba87977b75302c868818fa15fa996 100644 --- a/Code/Mantid/scripts/test/DirectEnergyConversionTest.py +++ b/Code/Mantid/scripts/test/DirectEnergyConversionTest.py @@ -183,8 +183,10 @@ class DirectEnergyConversionTest(unittest.TestCase): """ Test for old interface """ run_ws = CreateSampleWorkspace( Function='Multiple Peaks', NumBanks=1, BankPixelWidth=4, NumEvents=10000) LoadInstrument(run_ws,InstrumentName='MARI') + #mono_ws = CloneWorkspace(run_ws) wb_ws = CloneWorkspace(run_ws) + AddSampleLog(wb_ws,LogName='run_number',LogText='300',LogType='Number') #wb_ws=CreateSampleWorkspace( Function='Multiple Peaks', NumBanks=1, BankPixelWidth=4, NumEvents=10000) dgreduce.setup('MAR') @@ -199,6 +201,30 @@ class DirectEnergyConversionTest(unittest.TestCase): ws = dgreduce.abs_units(wb_ws,run_ws,None,wb_ws,10,100,8.8,[-10,0.1,7],None,None,**par) self.assertTrue(isinstance(ws,api.MatrixWorkspace)) + def test_dgreduce_works_with_name(self): + """ Test for old interface """ + run_ws = CreateSampleWorkspace( Function='Multiple Peaks', NumBanks=1, BankPixelWidth=4, NumEvents=10000) + LoadInstrument(run_ws,InstrumentName='MARI') + AddSampleLog(run_ws,LogName='run_number',LogText='200',LogType='Number') + #mono_ws = CloneWorkspace(run_ws) + wb_ws = CloneWorkspace(run_ws) + AddSampleLog(wb_ws,LogName='run_number',LogText='100',LogType='Number') + #wb_ws=CreateSampleWorkspace( Function='Multiple Peaks', NumBanks=1, BankPixelWidth=4, NumEvents=10000) + + dgreduce.setup('MAR') + par = {} + par['ei_mon_spectra']=[4,5] + par['abs_units_van_range']=[-4000,8000] + # overwrite parameters, which are necessary from command line, but we want them to have test values + dgreduce.getReducer().map_file=None + dgreduce.getReducer().monovan_mapfile=None + dgreduce.getReducer().mono_correction_factor = 1 + #abs_units(wb_for_run,sample_run,monovan_run,wb_for_monovanadium,samp_rmm,samp_mass,ei_guess,rebin,map_file='default',monovan_mapfile='default',**kwargs): + ws = dgreduce.abs_units('wb_ws','run_ws',None,wb_ws,10,100,8.8,[-10,0.1,7],None,None,**par) + self.assertTrue(isinstance(ws,api.MatrixWorkspace)) + + + ## tReducet.di def test_energy_to_TOF_range(self):