\(\renewcommand\AA{\unicode{x212B}}\)
Table of Contents
Calculate 1st or 2nd order Placzek correction factors using given workspace and incident spectrums.
Name | Direction | Type | Default | Description |
---|---|---|---|---|
InputWorkspace | Input | MatrixWorkspace | Mandatory | Raw diffraction data workspace for associated correction to be calculated for. Workspace must have instrument and sample data. |
IncidentSpectra | Input | MatrixWorkspace | Mandatory | Workspace of fitted incident spectrum with its derivatives (1st &| 2nd). |
EfficiencySpectra | Input | MatrixWorkspace | Workspace of efficiency spectrum with its derivatives (1st &| 2nd).Default (not specified) will use LambdaD to calculate the efficiency spectrum. | |
LambdaD | Input | number | 1.44 | Reference wavelength in Angstrom, related to detector efficient coefficient alpha.The coefficient used to generate a generic detector efficiency curve,eps = 1 - exp(1 - alpha*lambda), where alpha is 1/LambdaD.Default is set to 1.44 for ISIS 3He detectors and 1/0.83 for ISIS:LAD circa 1990 scintillator detectors. |
CrystalDensity | Input | number | Optional | The crystalographic density of the sample material. |
Order | Input | number | 1 | Placzek correction order (1 or 2), default to 1 (self scattering). |
SampleTemperature | Input | number | Optional | Sample temperature in Kelvin.The input property is prioritized over the temperature recorded in the sample log.The temperature is necessary for computing second order correction. |
ScaleByPackingFraction | Input | boolean | True | Scale the correction value by packing fraction. |
OutputWorkspace | Output | MatrixWorkspace | Mandatory | Workspace with the Placzek scattering correction factors. |
This algorithm can calculate the 1st and 2nd order Placzek inelastic scattering correction [1] [2] . For this particular algorithm:
IncidentSpectra.readY(0)
returns the incident spectrum.IncidentSpectra.readY(1)
returns the first order derivative.IncidentSpectra.readY(2)
returns the second order derivative.EfficiencySpectra
. However, when EfficiencySpectra
is not provided:LambdaD
.LambdaD
is provided, the default value 1.44 will be used, which is also the implicit value used in the original CalculatePlaczekSelfScattering.ScaleByPackingFraction=True
(default).where \(P\) is the Placzek correction factor, and \(p\) is the packing fraction.
This section provides a brief description of the formula used to calculate the Placzek correction. In the original work [1] , the formula to compute the first order Placzek correction, \(P_1\) is given as:
where
When the incident flux \(\phi\) is available from monitor, the first order incident flux coefficient, \(\phi_1\) can be calculated with
where \(\phi'(\lambda)\) is defined as
When the detector efficiency \(\epsilon\) is measured as a function of wave vector \(k = 2\pi / \lambda\), the first order detector efficiency coefficient, \(\epsilon_1\) can be calculated with
However, if the detector efficiency is never measured, one can still use an approximated detector efficiency curve
where \(\lambda_d\) is the reference wavelength for the detector. Therefore, the approximate first order detector efficiency coefficient, \(\epsilon_1\) simplified to
where \(x = -\lambda / \lambda_d\). It is worth points out that the derivative of the detector efficiency is computed with respect to \(\ln(k)\), namely
The detailed explanation can be found in [2] .
(Source code, png, hires.png, pdf)
The second order Placzek correction, \(P_2\) is similar to the first order, just with some new components
where
Similar to \(\phi_1\), \(\phi_2\) can be calculated when incident flux is measured by the monitor,
and \(\epsilon_2\) can be calculated directly from measured detector efficiency,
If no detector efficiency is measured, \(\epsilon_2\) can also be approximated with the theoretical detector efficiency formula, namely
where \(x = -\lambda / \lambda_d\).
(Source code, png, hires.png, pdf)
Example - CalculatePlaczek
The data files used in the following example code are available as part of the Mantid testing data.
# Load the incident flux from file
Load(
Filename='fluxSmoothedNOM161959.nxs',
OutputWorkspace='influx',
)
# Load the input workspace
# - must have instrument
# - must have sample with valid chemical formula
Load(Filename='inputwsNOM_164109.nxs', OutputWorkspace='NOM_164109')
# Calculate first order
# NOTE: temperature is not needed for first order calculation
CalculatePlaczek(
InputWorkspace="NOM_164109",
IncidentSpectra="influx",
LambdaD=1.44,
Order=1,
ScaleByPackingFraction=False,
CrystalDensity=0.01,
OutputWorkspace="NOM_P1",
)
# Calculate first and second order
CalculatePlaczek(
InputWorkspace="NOM_164109",
IncidentSpectra="influx",
LambdaD=1.44,
Order=2,
SampleTemperature=943.15, # in Kelvin
ScaleByPackingFraction=False,
CrystalDensity=0.01,
OutputWorkspace="NOM_P2",
)
[1] | (1, 2) Howe, McGreevy, and Howells, J., (1989), The analysis of liquid structure data from time-of-flight neutron diffractometry, Journal of Physics: Condensed Matter, Volume 1, Issue 22, pp. 3433-3451, doi: 10.1088/0953-8984/1/22/005 |
[2] | (1, 2) Howells, W.S. 1984. On the Choice of Moderator for a Liquids Diffractometer on a Pulsed Neutron Source., Nuclear Instruments and Methods in Physics Research 223 (1): 141–46. doi: 10.1016/0167-5087(84)90256-4 |
Categories: AlgorithmIndex | CorrectionFunctions
C++ header: CalculatePlaczek.h (last modified: 2021-08-27)
C++ source: CalculatePlaczek.cpp (last modified: 2021-08-30)