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

PolarizationCorrectionWildes v1

Summary

Corrects a group of polarization analysis workspaces for polarizer and analyzer efficiencies.

See Also

PolarizationEfficiencyCor, PolarizationEfficienciesWildes

Properties

Name

Direction

Type

Default

Description

InputWorkspaces

Input

str list

Mandatory

A list of workspaces to be corrected corresponding to the flipper configurations.

OutputWorkspace

Output

WorkspaceGroup

Mandatory

A group of polarization efficiency corrected workspaces.

Flippers

Input

string

00, 01, 10, 11

Flipper configurations of the input workspaces.

SpinStates

Input

string

The order of the spin states in the output workspace.

Efficiencies

Input

MatrixWorkspace

Mandatory

A workspace containing the efficiency factors P1, P2, F1 and F2 as histograms

AddSpinStateToLog

Input

boolean

False

Whether to add the final spin state into the sample log of each child workspace in the output group.

Description

This algorithm corrects for non-ideal instrument component efficiencies in a polarization analysis experiment by following the procedure and conventions introduced by Wildes [1]. In the full polarization analysis case it solves the corrected count rates \(\Sigma^{++}\), \(\Sigma^{+-}\), \(\Sigma^{-+}\) and \(\Sigma^{--}\) from the equation

\[\begin{split}\begin{bmatrix} \Sigma^{++} \\ \Sigma^{+-} \\ \Sigma^{-+} \\ \Sigma^{--} \end{bmatrix} = \begin{bmatrix} M \end{bmatrix} \begin{bmatrix} I^{00} \\ I^{01} \\ I^{10} \\ I^{11} \end{bmatrix},\end{split}\]

where \(I^{jk}\) are the experimental count rates for flipper configuration \(jk\) and \(\begin{bmatrix}M\end{bmatrix}\) is the four-by-four correction matrix as defined by equations (4) in [1].

Flipper configurations

InputWorkspaces is a list containing one to four workspace names (X unit: wavelength) corresponding to the instrument configurations given as Flippers. Supported configurations are:

'00, 01, 10, 11'

Full polarization corrections: both flippers off, analyzer flipper on, polarizer flipper on, both flippers on. Four input workspaces are required. The flipper configuration can be provided in any order and should match the order of the workspaces in the input group.

'00, 01, 11' and '00, 10, 11'

Polarization corrections with the assumption that the corrected count rates \(\Sigma^{+-} = \Sigma^{-+}\). In this case the intensity of the missing flipper configuration (01 or 10) can be solved from the other intensities. The flipper configuration can be provided in any order and should match the order of the workspaces in the input group.

'00, 11'

Polarization corrections with the assumption that the corrected count rates \(\Sigma^{+-} = \Sigma^{-+} = 0\). In this case the intensities of the missing flipper configurations (01 and 10) can be solved from the other intensities. The flipper configuration can be provided in any order and should match the order of the workspaces in the input group.

'0, 1'

Polarization corrections when no analyzer has been used: polarizer flipper off, polarizer flipper on. The flipper configuration can be provided in any order and should match the order of the workspaces in the input group.

'0'

Polarization corrections for a direct beam measurement in a reflectometry experiment.

Spin States

The order of the workspaces in the output group workspace can be defined by setting the values in the SpinStates property. Supported configurations are:

''

Default behaviour. The output workspace group will be in the order '++, +-, -+, --' for all outputs. In instances where not all outputs are produced, the order is maintained with the missing workspaces omitted (e.g. '++, --').

'++, --, +-, --'

For polarization corrections where both an analyzer and polarizer are used. The order of the states in the string will be the same as the order of the workspaces in the OutputWorkspace group. Only allowed if flipper configuration accounts for both flippers (contains two digits).

'--, ++'

For polarization corrections when no analyzer has been used. Only allowed if the flipper configuration is also setup this way (e.g. '1, 0').

Note: Output order cannot be set for direct beam measurements as there is only a single workspace in the output.

Output

The algorithm’s output is a group workspace containing the corrected workspaces. The names of each corrected workspace is suffixed by _++, _+-, _-+ or _-- depending on which \(\Sigma^{mn}\) they correspond to.

If the AddSpinStateToLog property has been set to True then a sample log entry called spin_state_ORSO is added to each output child workspace. This log entry specifies the spin state of the data using the notation from the Reflectometry ORSO data standard [2].

Efficiency factors

The Efficiencies input property expects to get a workspace with the following properties:

  • Contains four histograms, each labeled by their vertical axis as P1, P2, F1, F2. Other histograms (if present) are ignored.

  • The Y values of each histogram should be the corresponding efficiencies as functions of wavelength as defined in [1].

  • The wavelength values (X values) should be the same is in the input workspaces.

Note

Users at ILL can load a conforming efficiency workspace from disk by LoadILLPolarizationFactors v1.

Error propagation

Note

Errors are calculated as per Wildes [1], except for the numerically solved intensity in '00, 01, 11' and '00, 10, 11' flipper configurations in which case the uncertainties of \(\Sigma^{+-}\) or \(\Sigma^{-+}\) are set to zero.

Usage

Note

To run these usage examples please first download the usage data, and add these to your path. In Mantid this is done using Manage User Directories.

Example - PolarizationEfficiencyCor

LoadILLReflectometry(
    Filename='ILL/D17/317370.nxs',
    OutputWorkspace='direct_beam',
    XUnit='TimeOfFlight')
LoadILLReflectometry(
    Filename='ILL/D17/317370.nxs',
    OutputWorkspace='reflected_beam',
    Measurement='ReflectedBeam',
    BraggAngle=0.8,
    XUnit='TimeOfFlight')
# Sum pixels containing the reflected intensity
GroupDetectors(
    InputWorkspace='reflected_beam',
    OutputWorkspace='reflected_beam',
    WorkspaceIndexList=[199, 200, 201, 202, 203, 204, 205])
ConvertUnits(
    InputWorkspace='reflected_beam',
    OutputWorkspace='reflected_beam',
    Target='Wavelength',
    EMode='Elastic')
# There are some unphysical wavelengths
CropWorkspace(
    InputWorkspace='reflected_beam',
    OutputWorkspace='reflected_beam',
    XMin=0.)
# Fake two flipper configurations
RenameWorkspace(
    InputWorkspace='reflected_beam',
    OutputWorkspace='up'
)
CloneWorkspace(
    InputWorkspace='up',
    OutputWorkspace='down'
)
Scale(
    InputWorkspace='down',
    OutputWorkspace='down',
    Factor=0.1
)
LoadILLPolarizationFactors(
    Filename='ILL/D17/PolarizationFactors.txt',
    OutputWorkspace='efficiencies',
    WavelengthReference='up')
PolarizationEfficiencyCor(
    InputWorkspaces='up, down',
    OutputWorkspace='corrected',
    Efficiencies='efficiencies',
    Flippers='00, 11')

orig = mtd['up']
corr = mtd['corrected_++']
index = orig.yIndexOfX(15.)
ratio_up = corr.readY(0)[index] / orig.readY(0)[index]
print("Ratio of corrected and original 'up' intensity at 15A: {:.4}".format(ratio_up))
orig = mtd['down']
corr = mtd['corrected_--']
index = orig.yIndexOfX(15.)
ratio_down = corr.readY(0)[index] / orig.readY(0)[index]
print("Ratio of corrected and original 'down' intensity at 15A: {:.4}".format(ratio_down))

Output:

Ratio of corrected and original 'up' intensity at 15A: 0.1062
Ratio of corrected and original 'down' intensity at 15A: 10.38

References

Categories: AlgorithmIndex | Reflectometry

Source

C++ header: PolarizationCorrectionWildes.h

C++ source: PolarizationCorrectionWildes.cpp