\(\renewcommand\AA{\unicode{x212B}}\)
Units are a set of small classes in Mantid that define a unit of measure, and the conversions between various units.
The Unit Factory is a Dynamic Factory that creates and hands out instances of Mantid Unit objects.
The following units are available in the default Mantid distribution. These units are TOF convertible.
Name | ID (as known by Unit Factory) | Unit | Relevant equation |
---|---|---|---|
Time of flight | TOF | \(\mu s\) | TOF |
Wavelength | Wavelength | \(\mathrm{\AA}\) | \(\lambda = \frac{h}{p} = \frac{h \times \mathrm{tof}}{m_N \times L_{tot}}\) (see below) |
Energy | Energy | \(meV\) | \(E = \frac{1}{2} mv^2 = \frac{m_N}{2} \left ( \frac{L_{tot}}{\mathrm{tof}} \right )^2\) |
Energy in wavenumber | Energy_inWavenumber | \(cm^{-1}\) | \(8.06554465 \times E\) |
Momentum (k) | Momentum | \(\mathrm{\AA}^{-1}\) | \(k = \frac{2 \pi }{\lambda}=\frac{2 \pi \times m_N \times L_{tot}}{h \times \mathrm{tof}}\) |
d-spacing | dSpacing | \(\mathrm{\AA}\) | \(TOF = DIFA \, d^2 + DIFC d + TZERO\) (see below) |
Momentum transfer (Q) | MomentumTransfer | \(\mathrm{\AA}^{-1}\) | \(Q = 2 \, k \, sin \, \theta = \frac{4 \pi sin \theta}{\lambda}\) |
Momentum transfer squared (\(Q^2\)) | QSquared | \(\mathrm{\AA}^{-2}\) | \(Q^2 \frac{}{}\) |
Energy transfer | DeltaE | \(meV\) | \(\Delta E = E_{i}-\frac{1}{2}m_N \left ( \frac{L_2}{\mathrm{tof}-L_1\sqrt{\frac{m_N}{2E_i}}} \right )^2\) |
Energy transfer in wavenumber | DeltaE_inWavenumber | \(cm^{-1}\) | \(8.06554465 \times \Delta E\) |
Spin Echo Length | SpinEchoLength | \(nm\) | \(constant \times \lambda^2\)
The constant is supplied in eFixed
|
Spin Echo Time | SpinEchoTime | \(ns\) | \(constant \times \lambda^3\)
The constant is supplied in eFixed
|
d-spacingPerpendicular | dSpacingPerpendicular | \(\mathrm{\AA}\) | \(d_{\perp} = \sqrt{\lambda^2 - 2\log\cos\theta}\) |
Where \(L_1\) and \(L_2\) are sample to the source and sample to detector distances respectively, \(L_{tot} = L_1+L_2\) and \(E_i\) is the energy of neutrons leaving the source. \(\theta\) here is the Bragg scattering angle (e.g. half of the \(\theta\)-angle used in spherical coordinate system directed along Mantid z-axis)
Note on Wavelength: If the emode property in ConvertUnits is specified as inelastic Direct/Indirect (inelastic) then the conversion to wavelength will take into account the fixed initial/final energy respectively. Units conversion into elastic momentum transfer (MomentumTransfer) will throw in elastic mode (emode=0) on inelastic workspace (when energy transfer is specified along x-axis)
Note on d-spacing: The coefficients DIFA, DIFC and TZERO may be obtained via calibration of a TOF diffraction instrument. In the absence of a calibration, DIFA=TZERO=0 and the default value of DIFC is:
\(DIFC = 10^{-4} \frac{m_N}{h} (L_1 + L_2) 2 \sin(\theta)\)
where the scaling factor adjusts for the fact that DIFC is required in units of \(\mu s\) per \(\mathrm{\AA}\).
d-spacingPerpendicular is a unit invented in J. Appl. Cryst. (2015) 48, pp. 1627–1636 for 2D Rietveld refinement of angular and wavelength-dispersive neutron time-of-flight powder diffraction data. Together with the d-Spacing \(d\), d-SpacingPerpendicular \(d_{\perp}\) forms a new orthogonal coordinate system.
The following units are available in the default Mantid distribution. These units cannot be converted to or from TOF.
Name | ID (as known by Unit Factory) | Unit | Description |
---|---|---|---|
Empty | No unit | An empty label | |
t | Time | \(s\) | An independent unit of time not related to energy or TOF |
Scattering angle | Degrees | \(degrees\) | Degrees is a measurement of angular position |
Temperature | Temperature | \(K\) | Temperature in Kelvin |
Units on MatrixWorkspaces are accessed via the Axis.
ws = CreateSampleWorkspace()
for i in range(ws.axes()):
axis = ws.getAxis(i)
print("Axis {0} is a {1}{2}{3}".format(i,
"Spectrum Axis" if axis.isSpectra() else "",
"Text Axis" if axis.isText() else "",
"Numeric Axis" if axis.isNumeric() else ""))
unit = axis.getUnit()
print("\t caption:{0}".format(unit.caption()))
print("\t symbol:{0}".format(unit.symbol()))
Output:
Axis 0 is a Numeric Axis
caption:Time-of-flight
symbol:microsecond
Axis 1 is a Spectrum Axis
caption:Spectrum
symbol:
ws = CreateSampleWorkspace()
axis = ws.getAxis(1)
# Create a new axis
axis.setUnit("Label").setLabel('Temperature', 'K')
unit = axis.getUnit()
print("New caption:{0}".format(unit.caption()))
print("New symbol:{0}".format(unit.symbol()))
Output:
New caption:Temperature
New symbol:K
Writing and adding a new unit is relatively straightforward. Instructions will appear here in due course. In the meantime if a unit that you require is missing, then please contact the development team and we will add it to the default Mantid library.
Category: Concepts