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

# SingleCrystalDiffuseReduction v1¶

## Summary¶

Single Crystal Diffuse Scattering Reduction, normalisation, symmetry and background substraction

## Properties¶

Name

Direction

Type

Default

Description

Filename

Input

list of str lists

Mandatory

Files to combine in reduction. Allowed extensions: [‘_event.nxs’, ‘.nxs.h5’, ‘.nxs’]

Background

Input

string

Background run. Allowed extensions: [‘_event.nxs’, ‘.nxs.h5’, ‘.nxs’]

BackgroundScale

Input

number

1

The background will be scaled by this number before being subtracted.

FilterByTofMin

Input

number

Optional

Optional: To exclude events that do not fall within a range of times-of-flight. This is the minimum accepted value in microseconds. Keep blank to load all events.

FilterByTofMax

Input

number

Optional

Optional: To exclude events that do not fall within a range of times-of-flight. This is the maximum accepted value in microseconds. Keep blank to load all events.

ReuseSAFlux

Input

boolean

True

If True then if a previous SolidAngle and Flux has been loaded it will be reused otherwise it will be loaded.

SolidAngle

Input

string

Mandatory

An input workspace containing momentum integrated vanadium (a measure of the solid angle). See MDNormSCDPreprocessIncoherent for details. Allowed extensions: [‘.nxs’]

Flux

Input

string

Mandatory

An input workspace containing momentum dependent flux. See MDnormSCD for details. Allowed extensions: [‘.nxs’]

MomentumMin

Input

number

Optional

Minimum value in momentum. The max of this value and the flux momentum minimum will be used.

MomentumMax

Input

number

Optional

Maximum value in momentum. The min of this value and the flux momentum maximum will be used.

UBMatrix

Input

list of str lists

Mandatory

Path to an ISAW-style UB matrix text file. See LoadIsawUB. Allowed extensions: [‘.mat’, ‘.ub’, ‘.txt’]

SetGoniometer

Input

boolean

False

Set which Goniometer to use. See SetGoniometer

Goniometers

Input

string

None, Specify Individually

Set the axes and motor names according to goniometers that we define in the code (Universal defined for SNS). Allowed values: [‘None, Specify Individually’, ‘Universal’]

Axis0

Input

string

Axis0: name, x,y,z, 1/-1 (1 for ccw, -1 for cw rotation). A number of degrees can be used instead of name. Leave blank for no axis

Axis1

Input

string

Axis1: name, x,y,z, 1/-1 (1 for ccw, -1 for cw rotation). A number of degrees can be used instead of name. Leave blank for no axis

Axis2

Input

string

Axis2: name, x,y,z, 1/-1 (1 for ccw, -1 for cw rotation). A number of degrees can be used instead of name. Leave blank for no axis

OmegaOffset

Input

dbl list

Offset to apply to the omega rotation of the Goniometer. Need to provide one value for every run.

Input

string

Load a different instrument IDF onto the data from a file. See LoadInstrument. Allowed extensions: [‘.xml’]

ApplyCalibration

Input

TableWorkspace

Calibration will be applied using this TableWorkspace using ApplyCalibration.

DetCal

Input

string

Load an ISAW DetCal calibration onto the data from a file. See LoadIsawDetCal. Allowed extensions: [‘.detcal’]

CopyInstrumentParameters

Input

MatrixWorkspace

The input workpsace from which CopyInstrumentParameters will copy parameters to data

Input

string

Masking file for masking. Supported file format is XML and ISIS ASCII. See LoadMask. Allowed extensions: [‘.xml’, ‘.msk’]

SymmetryOperations

Input

string

If specified the symmetry will be applied, can be space group name, point group name, or list individual symmetries.

QDimension0

Input

dbl list

1,0,0

The first Q projection axis

QDimension1

Input

dbl list

0,1,0

The second Q projection axis

QDimension2

Input

dbl list

0,0,1

The third Q projection axis

Dimension0Binning

Input

dbl list

Binning for the 0th dimension. - Leave blank for complete integration - One value is interpreted as step - Two values are interpreted integration interval - Three values are interpreted as min, step, max

Dimension1Binning

Input

dbl list

Binning for the 1th dimension. - Leave blank for complete integration - One value is interpreted as step - Two values are interpreted integration interval - Three values are interpreted as min, step, max

Dimension2Binning

Input

dbl list

Binning for the 2th dimension. - Leave blank for complete integration - One value is interpreted as step - Two values are interpreted integration interval - Three values are interpreted as min, step, max

KeepTemporaryWorkspaces

Input

boolean

False

If True the normalization and data workspaces in addition to the normalized data will be outputted

OutputWorkspace

Output

Workspace

Mandatory

Output Workspace. If background is subtracted _data and _background workspaces will also be made.

## Description¶

Developed for CORELLI but should work on any instrument. This workflow algorithm loops over a series of runs combining them with correct normalisation, subtract the background and apply symmetry. The resulting workspace is a MDHistoWorkspace containing a volume of scattering.

The input filename follows the syntax from MultipleFileProperty

This workflow makes use of ConvertToMD and MDNorm so these should be reviewed to better understand all the options. An example of creating the Solid Angle and Flux workspaces are included in MDNormSCD. MDNormSCDPreprocessIncoherent can be used to process Vanadium data for the Solid Angle and Flux workspaces.

The resulting workspaces can be saved and loaded with SaveMD and LoadMD respectively.

The mask from the solid angle workspace is copied to the data. Additional masking is provided by a masking file. A masking file can be created my masking a data file then saving it using SaveMask.

### Background¶

The background is processed the same as the data except that the Goniometer is copied from the data before setting the UB matrix. If a background is included three workspaces are create. If “OutputWorkspace” is set to “ws” you will get the following.

“ws_normalizedBackground” containing the normalised background.

“ws_normalizedData” containing the normalised data.

And “ws” where

$ws = ws\_normalizedData - ws\_normalizedBackground * BackgroundScale$

Should the background scale not be correct this allows you to redo the background subtraction without rerunning the reduction.

If no background is used then the “ws” is just the normalised data.

### Symmetries¶

The SymmetryOperations parameters can either be defined as a point or space group were all the symmetries for that group is applied, or you can specify individual symmetries to apply.

For example setting SymmetryOperations to space group “P 31 2 1”, point group “321” or “x,y,z; -y,x-y,z; -x+y,-x,z; y,x,-z; x-y,-y,-z; -x,-x+y,-z” are equivalent. Note these symmetries are on the real lattice not reciprocal.

### Temporary Workspaces¶

If the KeepTemporaryWorkspaces option is True the data and the normalization in addition to the nomalized data will be outputted. This allows you to run separate instances of SingleCrystalDiffuseReduction and combine the results. They will have names “ws_data” and “ws_normalization” respectively.

Where

$ws\_normalizedData = \frac{ws\_data}{ws\_normalization}$

If background is subtracted there will be similar “ws_background_data” and “ws_background_normalization” for the background.

Where

$ws\_normalizedBackground = \frac{ws\_background\_data}{ws\_backgournd\_normalization}$

## Usage¶

Single file

SingleCrystalDiffuseReduction(Filename='CORELLI_29782',
UBMatrix="/SNS/CORELLI/IPTS-15526/shared/benzil_Hexagonal.mat",
OutputWorkspace='output',
SetGoniometer=True,
Axis0="BL9:Mot:Sample:Axis1,0,1,0,1",
Dimension0Binning='-10.05,0.1,10.05',
Dimension1Binning='-10.05,0.1,10.05',
Dimension2Binning='-0.1,0.1')


Multiple files

SingleCrystalDiffuseReduction(Filename='CORELLI_29782:29817:10',
UBMatrix="/SNS/CORELLI/IPTS-15526/shared/benzil_Hexagonal.mat",
OutputWorkspace='output',
SetGoniometer=True,
Axis0="BL9:Mot:Sample:Axis1,0,1,0,1",
Dimension0Binning='-10.05,0.1,10.05',
Dimension1Binning='-10.05,0.1,10.05',
Dimension2Binning='-0.1,0.1')


Single file with symmetry

SingleCrystalDiffuseReduction(Filename='CORELLI_29782',
UBMatrix="/SNS/CORELLI/IPTS-15526/shared/benzil_Hexagonal.mat",
OutputWorkspace='output',
SetGoniometer=True,
Axis0="BL9:Mot:Sample:Axis1,0,1,0,1",
Dimension0Binning='-10.05,0.1,10.05',
Dimension1Binning='-10.05,0.1,10.05',
Dimension2Binning='-0.1,0.1',
SymmetryOperations="P 31 2 1")


Multiple files with symmetry

SingleCrystalDiffuseReduction(Filename='CORELLI_29782:29817:10',
UBMatrix="/SNS/CORELLI/IPTS-15526/shared/benzil_Hexagonal.mat",
OutputWorkspace='output',
SetGoniometer=True,
Axis0="BL9:Mot:Sample:Axis1,0,1,0,1",
Dimension0Binning='-10.05,0.1,10.05',
Dimension1Binning='-10.05,0.1,10.05',
Dimension2Binning='-0.1,0.1',
SymmetryOperations="P 31 2 1")


Multiple files with symmetry and background substraction

SingleCrystalDiffuseReduction(Filename='CORELLI_29782:29817:10',
Background='CORELLI_28124',
BackgroundScale=0.95,
UBMatrix="/SNS/CORELLI/IPTS-15526/shared/benzil_Hexagonal.mat",
OutputWorkspace='output',
SetGoniometer=True,
Axis0="BL9:Mot:Sample:Axis1,0,1,0,1",
Dimension0Binning='-10.05,0.1,10.05',
Dimension1Binning='-10.05,0.1,10.05',
Dimension2Binning='-0.1,0.1',
SymmetryOperations="P 31 2 1")


Reading in elastic Corelli autoreduced data

SingleCrystalDiffuseReduction(Filename=','.join('/SNS/CORELLI/IPTS-15526/shared/autoreduce/CORELLI_'+str(run)+'_elastic.nxs' for run in range(29782,29818,10)),
Background='/SNS/CORELLI/IPTS-15796/shared/autoreduce/CORELLI_28124_elastic.nxs',
BackgroundScale=0.95,
UBMatrix="/SNS/CORELLI/IPTS-15526/shared/benzil_Hexagonal.mat",
OutputWorkspace='output',
SetGoniometer=True,
Axis0="BL9:Mot:Sample:Axis1,0,1,0,1",
Dimension0Binning='-10.05,10.05,0.1',
Dimension1Binning='-10.05,10.05,0.1',
Dimension2Binning='-0.1,0.1',
SymmetryOperations="P 31 2 1")


Defining the axis to be [H,H,0], [H,-H,0], [0,0,L]

SingleCrystalDiffuseReduction(Filename='CORELLI_29782:29817:10',
Background='CORELLI_28124',
BackgroundScale=0.95,
UBMatrix="/SNS/CORELLI/IPTS-15526/shared/benzil_Hexagonal.mat",
OutputWorkspace='output',
SetGoniometer=True,
Axis0="BL9:Mot:Sample:Axis1,0,1,0,1",
QDimension0='1,1,0',
QDimension1='1,-1,0',
QDimension2='0,0,1',
Dimension0Binning='-7.5375,0.075,7.5375',
Dimension1Binning='-13.165625,0.13100125,13.165625',
Dimension2Binning='-0.1,0.1',
SymmetryOperations="P 31 2 1")

import matplotlib.pyplot as plt
from mantid import plots
fig, ax = plt.subplots(subplot_kw={'projection':'mantid'})
c = ax.pcolormesh(mtd['output'],vmin=0, vmax=1e-5)
fig.colorbar(c)
plt.show()