Skip to content

Commit

Permalink
refs #8171. Add methods for overwriting the UB.
Browse files Browse the repository at this point in the history
Overwrite the UB. Internal checks to verify that the correct information is being provided. Unit tests supplied.
  • Loading branch information
OwenArnold committed Oct 22, 2013
1 parent 3a3a401 commit a6e17d8
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 6 deletions.
15 changes: 11 additions & 4 deletions Code/Mantid/scripts/Horace/MantidHorace/Command.py
Expand Up @@ -5,7 +5,14 @@
def __possible_emodes():
return ['Elastic', 'Direct', 'Indirect']

def __single_gen_sqw(input_workspace, emode):
def __single_gen_sqw(input_workspace, emode, alatt=[], angdeg=[], u=[], v=[]):

ub_params = [alatt, angdeg, u, v]
if any(ub_params) and not all(ub_params):
raise ValueError("Either specify all of alatt, angledeg, u, v or none of them")
elif all(ub_params):
SetUB(Workspace=input_workspace, a=alatt[0], b=alatt[1], c=alatt[2], alpha=angdeg[0], beta=angdeg[1], gamma=angdeg[2], u=u, v=v)

input_unit = input_workspace.getAxis(0).getUnit()
comparitor_unit = UnitFactory.create('DeltaE')
if comparitor_unit.unitID() != input_unit.unitID():
Expand All @@ -15,18 +22,18 @@ def __single_gen_sqw(input_workspace, emode):
out_ws = ConvertToMD(InputWorkspace=input_workspace, QDimensions='Q3D', QConversionScales='HKL',dEAnalysisMode=emode, MinValues=min, MaxValues=max)
return out_ws

def gen_sqw(input_workspaces, emode='Elastic', alatt=None, angledeg=None, u=None, v=None, psi=None, omega=None, dpsi=None, gl=None, gs=None):
def gen_sqw(input_workspaces, emode='Elastic', alatt=[], angdeg=[], u=[], v=[], psi=None, omega=None, dpsi=None, gl=None, gs=None):

if not emode in __possible_emodes():
raise ValueError("Unknown emode %s Allowed values are %s" % (emode, __possible_emodes()))

converted = list()
if isinstance(input_workspaces, list):
for ws in input_workspaces:
outws = __single_gen_sqw(input_workspace=ws, emode=emode)
outws = __single_gen_sqw(input_workspace=ws, emode=emode, alatt=alatt, angdeg=angdeg, u=u, v=v)
list.append(outws)
else:
outws = __single_gen_sqw(input_workspace=input_workspaces, emode=emode)
outws = __single_gen_sqw(input_workspace=input_workspaces, emode=emode, alatt=alatt, angdeg=angdeg, u=u, v=v)
return outws


Expand Down
36 changes: 34 additions & 2 deletions Code/Mantid/scripts/test/MantidHoraceCommandGenSQWTest.py
@@ -1,6 +1,7 @@
import unittest
from mantid.simpleapi import *
from mantid.api import IMDEventWorkspace
from mantid.kernel import V3D

class MantidHoraceCommandGenSQWTest(unittest.TestCase):

Expand Down Expand Up @@ -37,20 +38,51 @@ def test_single_workspace(self):
from MantidHorace.Command import gen_sqw

source_ws = Load(Filename='CNCS_7860_event')

source_ws = ConvertUnits(InputWorkspace=source_ws, Target='DeltaE', EMode='Direct', EFixed=3)
SetUB(Workspace=source_ws,a=1.4165,b=1.4165,c=1.4165,u=[1,0,0],v=[0,1,0])
AddSampleLog(Workspace=source_ws,LogName='Psi',LogText='0',LogType='Number Series')
SetGoniometer(Workspace=source_ws, Axis0='Psi,0,1,0,1')

out_ws = gen_sqw(input_workspaces=source_ws, emode='Direct')

print out_ws.getNEvents(), source_ws.getNEvents()
self.assertTrue(isinstance(out_ws, IMDEventWorkspace), "OutputWorkspace should be an MDEventWorkspace")
self.assertEqual(4, out_ws.getNumDims())
lattice = out_ws.getExperimentInfo(0).sample().getOrientedLattice()
self.assertAlmostEqual(1.4165, lattice.a())
self.assertAlmostEqual(90, lattice.alpha())

DeleteWorkspace(out_ws)
DeleteWorkspace(source_ws)

def test_overwrite_ub(self):
from MantidHorace.Command import gen_sqw

source_ws = Load(Filename='CNCS_7860_event')
source_ws = ConvertUnits(InputWorkspace=source_ws, Target='DeltaE', EMode='Direct', EFixed=3)
SetUB(Workspace=source_ws,a=1.4165,b=1.4165,c=1.4165,u=[1,0,0],v=[0,1,0])
AddSampleLog(Workspace=source_ws,LogName='Psi',LogText='0',LogType='Number Series')
SetGoniometer(Workspace=source_ws, Axis0='Psi,0,1,0,1')

out_ws = gen_sqw(input_workspaces=source_ws, emode='Direct', alatt=[9.218, 9.218, 9.197], angdeg=[90, 90, 120], u=[1,0,0], v=[0,1,0])

self.assertTrue(isinstance(out_ws, IMDEventWorkspace), "OutputWorkspace should be an MDEventWorkspace")
self.assertEqual(4, out_ws.getNumDims())
lattice = out_ws.getExperimentInfo(0).sample().getOrientedLattice()
self.assertAlmostEqual(9.218, lattice.a())
self.assertAlmostEqual(120, lattice.gamma())

DeleteWorkspace(out_ws)
DeleteWorkspace(source_ws)

def test_partial_ub_throws(self):
from MantidHorace.Command import gen_sqw
in_ws = CreateWorkspace(DataX=[1,2], DataY=[1],DataE=[1],UnitX='DeltaE')
try:
gen_sqw(input_workspaces=in_ws, emode='Direct', alatt=[1,1,1], angdeg=[90, 90, 90], u=[1,0,0]) # Note that no v parameter is given, so ub info is incomplete.
except ValueError:
pass
finally:
DeleteWorkspace(in_ws)



Expand Down

0 comments on commit a6e17d8

Please sign in to comment.