forked from AmbaPant/mantid
-
Notifications
You must be signed in to change notification settings - Fork 1
/
HFIRSANS2Wavelength.py
73 lines (61 loc) · 3.21 KB
/
HFIRSANS2Wavelength.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# Mantid Repository : https://github.com/mantidproject/mantid
#
# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI,
# NScD Oak Ridge National Laboratory, European Spallation Source,
# Institut Laue - Langevin & CSNS, Institute of High Energy Physics, CAS
# SPDX - License - Identifier: GPL - 3.0 +
from mantid.api import (PythonAlgorithm, AlgorithmFactory, MatrixWorkspaceProperty, PropertyMode, Progress)
from mantid.kernel import (Direction)
class HFIRSANS2Wavelength(PythonAlgorithm):
def category(self):
return 'SANS\\Wavelength'
def summary(self):
return 'Convert the fake time of flight event workspace into a Workspace2D with units of wavelength'
def PyInit(self):
# Workspace which is to be masked
self.declareProperty(MatrixWorkspaceProperty("InputWorkspace", '',
optional=PropertyMode.Mandatory, direction=Direction.Input),
doc='The workspace which is to be converted to wavelength')
self.declareProperty(MatrixWorkspaceProperty('OutputWorkspace', '',
optional=PropertyMode.Mandatory, direction=Direction.Output),
doc='The output workspace.')
def PyExec(self):
inWS = self.getProperty("InputWorkspace").value
runObj = inWS.getRun()
try:
wavelength = runObj['wavelength'].getStatistics().mean
wavelength_spread = runObj['wavelength_spread'].getStatistics().mean
wavelength_spread *= wavelength
except:
raise ValueError("Could not read wavelength and wavelength_spread logs from the workspace")
progress = Progress(self, 0.0, 1.0, 4)
# rebin into a single bin
progress.report('Rebin')
rebin_alg = self.createChildAlgorithm("Rebin", enableLogging=False)
rebin_alg.setProperty('InputWorkspace', inWS)
rebin_alg.setProperty('Params', '-20000,40000,20000')
rebin_alg.setProperty('PreserveEvents', False)
rebin_alg.execute()
outWS = rebin_alg.getProperty("OutputWorkspace").value
# scale to wavelength spread
progress.report('Scale to spread')
scale_alg = self.createChildAlgorithm("ScaleX", enableLogging=False)
scale_alg.setProperty('InputWorkspace', outWS)
scale_alg.setProperty('OutputWorkspace', outWS)
scale_alg.setProperty('Factor', wavelength_spread / 40000.)
scale_alg.execute()
outWS = scale_alg.getProperty("OutputWorkspace").value
# shift to wavelength center
progress.report('Shift to wavelength center')
scale_alg = self.createChildAlgorithm("ScaleX", enableLogging=False)
scale_alg.setProperty('InputWorkspace', outWS)
scale_alg.setProperty('OutputWorkspace', outWS)
scale_alg.setProperty('Factor', wavelength)
scale_alg.setProperty('Operation', 'Add')
scale_alg.execute()
outWS = scale_alg.getProperty("OutputWorkspace").value
# change units
progress.report('Set units')
outWS.getAxis(0).setUnit('Wavelength')
self.setProperty("OutputWorkspace", outWS)
AlgorithmFactory.subscribe(HFIRSANS2Wavelength)