\(\renewcommand\AA{\unicode{x212B}}\)

CalculatePlaczek v1

Summary

Calculate 1st or 2nd order Placzek correction factors using given workspace and incident spectrums.

See Also

CalculatePlaczekSelfScattering, He3TubeEfficiency

Properties

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.

Description

This algorithm can calculate the 1st and 2nd order Placzek inelastic scattering correction [1] [2] . For this particular algorithm:

  • The input workspace must

    • contain a sample with proper chemical formula as the correction calculation relies on it.

    • have a valid instrument geometry attached to it as the correction factors are calculated on a per spectrum (i.e. detector) basis.

  • A workspace containing the incident spectrum extracted from the monitor is needed.

    • For the first order correction, only the incident spectrum and its first order derivative is needed.

    • For the second order correction, the incident spectrum along with its first and second derivate are needed.

    • It is implicitly assumed that

      • IncidentSpectra.readY(0) returns the incident spectrum.

      • IncidentSpectra.readY(1) returns the first order derivative.

      • IncidentSpectra.readY(2) returns the second order derivative.

  • The algorithm will try to extract temperature from the sample log if it is not provided. However, this will be a simple average without any additional consideration about outliers or bad reading. Therefore, it is recommended to provide a sample temperature in Kelvin explicitly.

  • The Placzek correction calculation requires a detector efficiency curve and its derivatives. This algorithm will prioritize the use of input EfficiencySpectra. However, when EfficiencySpectra is not provided:

    • The algorithm will can generate a theoretical detector efficiency curve (see He3TubeEfficiency for details) using the input Parameter LambdaD.

    • When no LambdaD is provided, the default value 1.44 will be used, which is also the implicit value used in the original CalculatePlaczekSelfScattering.

    • Generally speaking it is better to measure the detector efficiency instead of relying on a theoretical one.

  • The calculated Placzek correction factor will be scaled by the packing fraction if ScaleByPackingFraction=True (default).

(1)\[P_\text{scaled} = (1 + P) * p_\text{packingFraction}\]

where \(P\) is the Placzek correction factor, and \(p\) is the packing fraction.

Physics

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:

(2)\[P_1 = 2 \sin^2(\dfrac{\theta}{2}) \left[ (f-1)\phi_1 - f \epsilon_1 + f - 3 \right] \sum_\alpha c_\alpha \bar{b_\alpha^2} \dfrac{m}{M_\alpha}\]

where

  • \(\theta\) is the scattering angle.

  • \(f = \frac{L_1}{L_1+L_2}\) with \(L_1\) being the distance between moderator and the sample and \(L_2\) being the distance between the sample and the detector.

  • \(\phi_1\) is the first order incident flux coefficient.

  • \(\epsilon_1\) is the first order detector efficiency coefficient.

  • \(c_\alpha\) is the number proportion of species \(\alpha\).

  • \(b_\alpha\) is the total scattering length of species \(\alpha\).

  • \(m\) is the mass of neutron.

  • \(M_\alpha\) refers to the atomic mass of species \(\alpha\).

When the incident flux \(\phi\) is available from monitor, the first order incident flux coefficient, \(\phi_1\) can be calculated with

(3)\[\phi_1 = \lambda_i \dfrac{\phi'(\lambda_i)}{\phi(\lambda_i)}\]

where \(\phi'(\lambda)\) is defined as

(4)\[\phi'(\lambda) = \dfrac{\ln(\phi(\lambda))}{\ln(\lambda)}\]

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

(5)\[\epsilon_1 = k_i \dfrac{\epsilon'(k_i)}{\epsilon(k_i)}\]

However, if the detector efficiency is never measured, one can still use an approximated detector efficiency curve

(6)\[\epsilon(k) \approx 1 - \exp(\dfrac{-\lambda}{\lambda_d})\]

where \(\lambda_d\) is the reference wavelength for the detector. Therefore, the approximate first order detector efficiency coefficient, \(\epsilon_1\) simplified to

(7)\[\epsilon_1 = \dfrac{x e^x}{1 - e^x}\]

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

\[\epsilon' = \dfrac{\ln(\epsilon(k))}{\ln(k)}\]

The detailed explanation can be found in [2] .

(Source code, png, hires.png, pdf)

../_images/CalculatePlaczekPlotP1.png

The second order Placzek correction, \(P_2\) is similar to the first order, just with some new components

\[\begin{split}P_2 &= \sum_\alpha c_\alpha \bar{b_\alpha^2} \dfrac{m}{M_\alpha} \{\dfrac{k_B T}{2E} + \dfrac{k_B T}{E} \sin^2(\dfrac{\theta}{2}) \left[ (8f - 9)(f-1)\phi_1 -3f(2f-3)\epsilon_1 +2f(1-f)\phi_1\epsilon_1 +(1-f)^2\phi_2 +f^2\epsilon_2 +3(4f-5)(f-1) \right] \} \\ &+ 2 \sin^2(\dfrac{\theta}{2}) \sum_\alpha c_\alpha \bar{b_\alpha^2} (\dfrac{m}{M_\alpha})^2 \{ 1 + \sin^2(\dfrac{\theta}{2}) \left[(4f-7)(f-1)\phi_1 +f(7-2f)\epsilon_1 +2f(1-f)\phi_1\epsilon_1 +(1-f)^2\phi_2 +f^2\epsilon_2 +(2f^2 -7f +8) \right] \}\end{split}\]

where

  • \(k_B\) is the Boltzmann constant.

  • \(T\) is the temperature in Kelvin.

  • \(E\) is the energy of the incident neutron as \(E = h^2/(2m\lambda^2_i)\).

  • \(\phi_2\) is the second order incident flux coefficient.

  • \(\epsilon_2\) is the second order detector efficiency coefficient.

Similar to \(\phi_1\), \(\phi_2\) can be calculated when incident flux is measured by the monitor,

(8)\[\phi_2 = \lambda_i \dfrac{\phi''(\lambda_i)}{\phi(\lambda_i)}\]

and \(\epsilon_2\) can be calculated directly from measured detector efficiency,

(9)\[\epsilon_2 = k_i \dfrac{\epsilon''(k_i)}{\epsilon(k_i)}\]

If no detector efficiency is measured, \(\epsilon_2\) can also be approximated with the theoretical detector efficiency formula, namely

(10)\[\epsilon_2 = \dfrac{-x (x+2) e^x}{1 - e^x} = -(x+2)\epsilon_1\]

where \(x = -\lambda / \lambda_d\).

(Source code, png, hires.png, pdf)

../_images/CalculatePlaczekPlotP2.png

Usage

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",
)

References

Categories: AlgorithmIndex | CorrectionFunctions

Source

C++ header: CalculatePlaczek.h

C++ source: CalculatePlaczek.cpp