\(\renewcommand\AA{\unicode{x212B}}\)
DgsScatteredTransmissionCorrectionMD v1¶
Summary¶
Isotropic scattering transmission correction for Inelastic data
Properties¶
| Name | Direction | Type | Default | Description | 
|---|---|---|---|---|
| InputWorkspace | Input | Mandatory | Input MDEventWorkspace. Either QSample (or QLab) frame plus DeltaE, or just Qmod plus DeltaE | |
| ExponentFactor | Input | number | Optional | Depletion rate exponent | 
| OutputWorkspace | Output | Mandatory | The output MDEventWorkspace with the correction applied | 
Description¶
In instruments where there is a polarization analysis stage in the scattered beam, neutron intensity is reduced by an absorption factor [1]. This has an exponential dependence on the scattered energy. To correct for this, the detected intensity \(I\) of every event collected is corrected by:
\(E_f = E_i-\Delta E\)
\(I' = I e^{c E_f}\)
\(\delta I' = \delta I e^{c E_f}\)
[1] Andrei T. Savici et al, 2017, J. Phys.: Conf. Ser. 862 012023
Usage¶
Example - Run Transmission Correction
we1 = CreateSampleWorkspace(WorkspaceType='Event',
                            Function='Flat background',
                            BankPixelWidth=1,
                            XUnit='DeltaE',
                            XMin=-10,
                            XMax=19,
                            BinWidth=0.5)
AddSampleLog(Workspace=we1,LogName='deltaE-mode', LogText='Direct', LogType='String')
AddSampleLog(Workspace=we1,LogName='Ei', LogText='20.', LogType='Number')
MoveInstrumentComponent(Workspace=we1, ComponentName='bank1', X=3, Z=3, RelativePosition=False)
MoveInstrumentComponent(Workspace=we1, ComponentName='bank2', X=-3, Z=-3, RelativePosition=False)
SetGoniometer(Workspace=we1, Axis0='0,0,1,0,1')
c = 1. / 11  # the exponential factor for the correction
# old way
we1s = ScaleX(InputWorkspace=we1, Factor=-20., Operation='Add') # deltaE - Ei becomes -Ef
we1s = ScaleX(InputWorkspace=we1s, Factor=-1.0, Operation='Multiply') # the X-axis becomes Ef
# The ExponentialCorrection algorithm multiplies signal by C0*exp(-C1*x), where x is Ef
we1s = ExponentialCorrection(Operation="Multiply", InputWorkspace=we1s, C0=1., C1=-c)
we1s = ScaleX(InputWorkspace=we1s, Factor=-1.0, Operation='Multiply') # the X-axis becomes -Ef
we1s = ScaleX(InputWorkspace=we1s, Factor=20., Operation='Add') # Ei - Ef converts back to DeltaE
md1_old = ConvertToMD(InputWorkspace=we1s, QDimensions='Q3D')
# use algorithm DgsScatteredTransmissionCorrectionMD
md1 = ConvertToMD(InputWorkspace=we1, QDimensions='Q3D')
md1_new = DgsScatteredTransmissionCorrectionMD(md1, ExponentFactor=c)
r = CompareMDWorkspaces(md1_old, md1_new, CheckEvents=True, Tolerance=0.00001)
print('Number of MDEvents: {} == {}'.format(md1_old.getNEvents(), md1_new.getNEvents()))
print('md1_old and md1_new being equal is {}'.format(r.Equals))
Output:
Number of MDEvents: 1972 == 1972
md1_old and md1_new being equal is True
Categories: AlgorithmIndex | MDAlgorithms
Source¶
C++ header: DgsScatteredTransmissionCorrectionMD.h
C++ source: DgsScatteredTransmissionCorrectionMD.cpp