\(\renewcommand\AA{\unicode{x212B}}\)
Table of Contents
Calculates anvred correction factors for attenuation due to absorption and scattering in a spherical sample
Name | Direction | Type | Default | Description |
---|---|---|---|---|
InputWorkspace | Input | MatrixWorkspace | Mandatory | The X values for the input workspace must be in units of wavelength or TOF |
OutputWorkspace | Output | MatrixWorkspace | Mandatory | Output workspace name |
LinearScatteringCoef | Input | number | Optional | Linear scattering coefficient in 1/cm. If not provided this will be calculated from the material cross-section if present (set with SetSampleMaterial) |
LinearAbsorptionCoef | Input | number | Optional | Linear absorption coefficient at 1.8 Angstroms in 1/cm. If not provided this will be calculated from the material cross-section if present (set with SetSampleMaterial) |
Radius | Input | number | Optional | Radius of the sample in centimeters. f not provided the radius will be taken from the sample shape if it is a sphere (set with SetSample). |
PreserveEvents | Input | boolean | True | Keep the output workspace as an EventWorkspace, if the input has events (default). If false, then the workspace gets converted to a Workspace2D histogram. |
OnlySphericalAbsorption | Input | boolean | False | All corrections done if false (default). If true, only the spherical absorption correction. |
ReturnTransmissionOnly | Input | boolean | False | Corrections applied to data if false (default). If true, only return the transmission coefficient. |
PowerLambda | Input | number | 4 | Power of lamda |
DetectorBankScaleFactors | Input | boolean | False | No scale factors if false (default). If true, use scale factors from instrument parameter map. |
Following A.J.Schultz’s anvred, the weight factors should be:
\(\text{sin}^2(theta) / (lambda^4 * spec * eff * trans)\)
where
The quantity: \(\text{sin}^2(theta) / eff\) depends only on the pixel and can be pre-calculated for each pixel. It could be saved in array pix_weight[].
For now, pix_weight[] is calculated by the method BuildPixWeights()
and just holds the \(\text{sin}^2(theta)\) values. The wavelength dependent portion
of the correction is saved in the array lamda_weight[].
The time-of-flight is converted to wave length by multiplying by tof_to_lamda[id], then (int)STEPS_PER_ANGSTROM * lamda gives an index into the table lamda_weight[]. The lamda_weight[] array contains values like: 1/(lamda^power * spec(lamda)) which are pre-calculated for each lamda. These values are saved in the array lamda_weight[]. The optimal value to use for the power should be determined when a good incident spectrum has been determined. Currently, power=3 when used with an incident spectrum and power=2.4 when used without an incident spectrum.
The pixel efficiency and incident spectrum correction are NOT CURRENTLY USED. The absorption correction, trans, depends on both lamda and the pixel, Which is a fairly expensive calculation when done for each event. The transmission is calculated for a spherical sample using the fits to the tabulated values of \(A^* = 1/\text{transmission}\) in [1] using the functional form set out in [2].
Also see LorentzCorrection v1
Example:
ws = CreateSampleWorkspace("Event",XMin=5000)
wsOut = AnvredCorrection(ws,LinearScatteringCoef=1.302,
LinearAbsorptionCoef=1.686,Radius=0.170,PowerLambda=3)
[1] | Weber, K. Acta Crystallographica Section B, 25.6 (1969): 1174-1178. doi: 10.1107/S0567740869003682 |
[2] | Dwiggins, C. W. Acta Crystallographica Section A 31.3 (1975): 395-396. doi: 10.1107/S0567739475000873 |
Categories: AlgorithmIndex | Crystal\Corrections | CorrectionFunctions\AbsorptionCorrections