$$\renewcommand\AA{\unicode{x212B}}$$

ReflectometryILLAutoProcess v1¶

Summary¶

Performs reduction of ILL reflectometry data, instruments D17 and FIGARO.

Properties¶

Name

Direction

Type

Default

Description

PolarizationOption

Input

string

NonPolarized

Indicate whether measurements are polarized. Allowed values: [‘NonPolarized’, ‘Polarized’]

Run

Input

list of str lists

A list of reflected run numbers/files. Allowed values: [‘nxs’]

Run00

Input

list of str lists

A list of reflected run numbers/files for 00 (or 0). Allowed values: [‘nxs’]

Run01

Input

list of str lists

A list of reflected run numbers/files for 01. Allowed values: [‘nxs’]

Run10

Input

list of str lists

A list of reflected run numbers/files for 10. Allowed values: [‘nxs’]

Run11

Input

list of str lists

A list of reflected run numbers/files for 11 (or 1). Allowed values: [‘nxs’]

PolarizationEfficiencyFile

Input

string

A file containing the polarization efficiency factors.

DirectRun

Input

list of str lists

Mandatory

A list of direct run numbers/files. Allowed values: [‘nxs’]

OutputWorkspace

Output

WorkspaceGroup

Mandatory

The output workspace group.

DirectFlatBackground

Input

string

Background Average

Flat background calculation method for background subtraction. Allowed values: [‘Background Average’, ‘Background Constant Fit’, ‘Background Linear Fit’, ‘Background OFF’]

ReflFlatBackground

Input

string

Background Average

Flat background calculation method for background subtraction. Allowed values: [‘Background Average’, ‘Background Constant Fit’, ‘Background Linear Fit’, ‘Background OFF’]

SubalgorithmLogging

Input

string

Logging OFF

Enable or disable child algorithm logging. Allowed values: [‘Logging OFF’, ‘Logging ON’]

Cleanup

Input

string

Cleanup ON

Enable or disable intermediate workspace cleanup. Allowed values: [‘Cleanup ON’, ‘Cleanup OFF’]

WaterWorkspace

Input

MatrixWorkspace

A (water) calibration workspace (unit TOF).

SlitNormalisation

Input

string

Slit Normalisation AUTO

Enable or disable slit normalisation. Allowed values: [‘Slit Normalisation AUTO’, ‘Slit Normalisation OFF’, ‘Slit Normalisation ON’]

FluxNormalisation

Input

string

Normalise To Time

Neutron flux normalisation method. Allowed values: [‘Normalise To Time’, ‘Normalise To Monitor’, ‘Normalisation OFF’]

GlobalScaleFactor

Input

number

1

Scale factor.

ManualScaleFactors

Input

dbl list

An optional list of manual scale factors for stitching (number of angle configurations minus 1)

CacheDirectBeam

Input

boolean

False

Cache the processed direct beam in ADS for ready use with further reflected beams;saves important execution time, however assumes that the direct beam processing configuration must be invariant for different reflected beams.

AngleOption

Input

str list

DetectorAngle

Angle option used for detector positioning

Theta

Input

dbl list

-1

A user-defined angle theta in degree

SummationType

Input

str list

Incoherent

Type of summation to perform

WavelengthLowerBound

Input

dbl list

2

The lower wavelength bound (Angstrom)

WavelengthUpperBound

Input

dbl list

30

The upper wavelength bound (Angstrom)

DeltaQFractionBinning

Input

dbl list

0.5

If set, group the output by steps of this fraction multiplied by Q resolution

DirectLowAngleFrgHalfWidth

Input

long list

2

Number of foreground pixels at lower angles from the centre pixel.

DirectLowAngleBkgOffset

Input

long list

5

Distance of flat background region towards smaller detector angles from the foreground centre, in pixels

DirectLowAngleBkgWidth

Input

long list

5

Width of flat background region towards smaller detector angles from the foreground centre, in pixels

DirectHighAngleFrgHalfWidth

Input

long list

2

Number of foreground pixels at higher angles from the centre pixel.

DirectHighAngleBkgOffset

Input

long list

5

Distance of flat background region towards larger detector angles from the foreground centre, in pixels

DirectHighAngleBkgWidth

Input

long list

5

Width of flat background region towards larger detector angles from the foreground centre, in pixels

DirectFitStartWorkspaceIndex

Input

long list

0

Start histogram index used for peak fitting

DirectFitEndWorkspaceIndex

Input

long list

255

Last histogram index used for peak fitting

DirectFitWavelengthLowerBound

Input

number

-1

Minimum x value (unit wavelength) used for peak fitting.

DirectFitWavelengthUpperBound

Input

number

-1

Maximum x value (unit wavelength) used for peak fitting.

ReflLowAngleFrgHalfWidth

Input

long list

2

Number of foreground pixels at lower angles from the centre pixel.

ReflLowAngleBkgOffset

Input

long list

5

Distance of flat background region towards smaller detector angles from the foreground centre, in pixels.

ReflLowAngleBkgWidth

Input

long list

5

Width of flat background region towards smaller detector angles from the foreground centre, in pixels

ReflHighAngleFrgHalfWidth

Input

long list

2

Number of foreground pixels at higher angles from the centre pixel.

ReflHighAngleBkgOffset

Input

long list

5

Distance of flat background region towards larger detector angles from the foreground centre, in pixels

ReflHighAngleBkgWidth

Input

long list

5

Width of flat background region towards larger detector angles from the foreground centre, in pixels.

ReflFitStartWorkspaceIndex

Input

long list

0

Start histogram index used for peak fitting

ReflFitEndWorkspaceIndex

Input

long list

255

Last histogram index used for peak fitting

ReflFitWavelengthLowerBound

Input

dbl list

-1

Minimum x value (unit wavelength) used for peak fitting

ReflFitWavelengthUpperBound

Input

dbl list

-1

Maximum x value (unit wavelength) used for peak fitting

SaveReductionParams

Input

boolean

True

Whether to save reduction parameters in an ASCII file.

CorrectGravity

Input

boolean

False

Whether to correct for gravity effects (FIGARO only).

LogsToReplace

Input

Dictionary

null

Sample logs to be overwritten.

Description¶

This algorithm executes the full data reduction for ILL reflectometers D17 and FIGARO in TOF mode (specular reflection) following [1].

Input¶

The mandatory inputs are comma separated list of nexus files for direct and reflected beam measurements. , stands as the separator of different angle configurations. + (sum) or - (range sum) operations can be used to sum different files at the same instrument configuration. When summing the metadata (e.g. acquisition time) will also be summed, so that the subsequent normalisation is handled correctly. There must be the same number of angle configurations both for direct and reflected beam inputs.

Output¶

The output is a workspace group that contains the calculated reflectivity curves as a function of the momentum transfer. The output is point data and has the calculated Q resolution attributed to it. There is a separate output for each angle configuration. An automatically stitched result is also produced. Stitch in this case just takes the union of all the initial points without merging or removal, only scaling can be applied. The outputs can be readily saved by SaveReflectometryAscii algorithm for further analysis.

Bragg Angle¶

If user specified $$\theta$$ angles are provided, they will be used. Otherwise SampleAngle or DetectorAngle (default) option is executed.

Summation Type¶

The default summation type is incoherent (sum along constant $$\lambda$$), where the reflectivity curve is calculated by dividing the summed foreground of the reflected beam by the summed foreground of the direct beam. For coherent summing, first the reflected beam data is divided by the direct beam data in 2D, then the ratio is summed along the lines of the constant $$Q_{z}$$.

Options¶

Many options can be specified as a single value, which will be applied to all the angle configurations, or as a list of values. In the case of the latter, the list must be of the same size, as many different angle configurations there are.

Direct Beam Caching¶

The processed direct beam runs can be cached in Analysis Data Service in order to save significant time when multiple samples correspond to the same direct beam with the same processing configurations. The name for the cached direct beam runs are derived from the run numbers; it is the run number if there is only one numor, or the first run number if there are several numors summed. Both the processed direct beam, and its summed foreground are cached. Care must be taken when enabling the caching, since if the same direct beam must be used with different options (e.g. different wavelength ranges) for different reflected beams, the caching will result in an error in subsequent reduction steps due to incompatibility of the workspaces. In such case the caching must be disabled, or one has to clean the cache manually by deleting the corresponding workspaces.

Gravity correction¶

Gravity correction is relevant for data reduction at FIGARO. Its execution is steered by a switch: CorrectGravity. The correction follows the algorithm described in Ref. [1], and the application to data is split in two separate steps. The first step corrects the wavelength axis of both direct and reflected beams, and takes place in ReflectometryILLPreprocess, where also the corrected by gravity reflection angle is calculated. The second and final step corrects the reflection angle, and is applied to data in ReflectometryILLConvertToQ.

Replacing sample logs¶

It is possible to replace any sample log of the loaded data, or add a new log, using the LogsToReplace property. The key-value pairs must be provided as JSON-compatible strings or Python dictionaries. For an example, see LoadILLReflectometry usage.

Usage¶

Note

Example - Single Angle

ws = ReflectometryILLAutoProcess(
Run='317370',
DirectRun='317369',
WavelengthLowerBound=3.5,
WavelengthUpperBound=24.5,
DeltaQFractionBinning=0.1
)
print('The R(Q) workspace has {0} points'.format(ws.getItem(0).blocksize()))

The R(Q) workspace has 672 points


Example - Multiple Angles

ws = ReflectometryILLAutoProcess(
Run='541853,541854',
DirectRun='541838,541839',
WavelengthLowerBound=[3.5,3.5],
WavelengthUpperBound=[25.,22.],
GlobalScaleFactor=0.13,
DeltaQFractionBinning=0.5
)
print('The R(Q) workspace at first angle has {0} points'.format(ws.getItem(0).blocksize()))
print('The R(Q) workspace at second angle has {0} points'.format(ws.getItem(1).blocksize()))
print('The R(Q) workspace at second angle has {0} points'.format(ws.getItem(2).blocksize()))

The R(Q) workspace at first angle has 186 points
The R(Q) workspace at second angle has 94 points
The R(Q) workspace at second angle has 280 points


Example - Full treatment with 3 angles and multiple numors summed

from mantid.simpleapi import *
config['default.facility'] = 'ILL'
config['default.instrument'] = 'D17'
config.appendDataSearchSubDir('ILL/D17/')
name = 'Thick_HR_5'
directBeams = '397812,397806,397808'
reflectedBeams = '397826+397827,397828,397829+397830+397831+397832'
foregroundWidth = [4,5,8]
wavelengthLower = [3., 1.6, 2.]
wavelengthUpper = [27., 25., 25.]
angleOffset = 2
angleWidth = 10
ReflectometryILLAutoProcess(
Run=reflectedBeams,
DirectRun=directBeams,
OutputWorkspace=name,
SummationType='Incoherent',
AngleOption='SampleAngle',
DirectLowAngleFrgHalfWidth=foregroundWidth,
DirectHighAngleFrgHalfWidth=foregroundWidth,
DirectLowAngleBkgOffset=angleOffset,
DirectLowAngleBkgWidth=angleWidth,
DirectHighAngleBkgOffset=angleOffset,
DirectHighAngleBkgWidth=angleWidth,
ReflLowAngleFrgHalfWidth=foregroundWidth,
ReflHighAngleFrgHalfWidth=foregroundWidth,
ReflLowAngleBkgOffset=angleOffset,
ReflLowAngleBkgWidth=angleWidth,
ReflHighAngleBkgOffset=angleOffset,
ReflHighAngleBkgWidth=angleWidth,
WavelengthLowerBound=wavelengthLower,
WavelengthUpperBound=wavelengthUpper,
DeltaQFractionBinning=0.5
)
import matplotlib.pyplot as plt
from mantid import plots
plt.style.use('classic')
plt.rcParams['figure.figsize'] = (12, 7)
plt.rcParams['font.size'] = 18
wsMantid = mtd['Thick_HR_5_stitched']
fig, ax = plt.subplots(subplot_kw={'projection':'mantid'})
ax.plot(wsMantid, 'b', label="RoundRobin")
ax.errorbar(wsMantid,'rs', 'b', markersize=0.1, label=None)
ax.set_xlim(0.01, 0.2)
ax.set_ylim(0.000001, 2.)
ax.set_yscale("log")
ax.set_xscale("log")
ax.set_xlabel('Q [$\AA^{-1}$]')
ax.set_ylabel('R')
ax.legend()
fig.show()