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

ConvertMultipleRunsToSingleCrystalMD v1

../_images/ImageNotFound.png

Enable screenshots using DOCS_SCREENSHOTS in CMake

Summary

Convert multiple runs to one Single Crystal MDEventWorkspace

See Also

ConvertToDiffractionMDWorkspace, ConvertToMD

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’]

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.

FilterByTimeStop

Input

number

Optional

Optional: To only include events before the provided stop time, in seconds (relative to the start of the run).

MomentumMin

Input

number

Optional

Minimum value in momentum. This should match the Flux momentum if the output is to be used with MDNorm

MomentumMax

Input

number

Optional

Maximum value in momentum. This should match the Fluxmomentum if the output is to be used with MDNorm

UBMatrix

Input

string

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

LoadInstrument

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

MaskFile

Input

string

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

OutputWorkspace

Output

Workspace

Mandatory

Output Workspace

QFrame

Input

string

Q_sample

Selects Q-dimensions of the output workspace. Q (sample frame): Wave-vector converted into the frame of the sample (taking out the goniometer rotation). HKL: Use the sample’s UB matrix to convert Wave-vector to crystal’s HKL indices. Allowed values: [‘Q_sample’, ‘HKL’]

Uproj

Input

dbl list

Defines the first projection vector of the target Q coordinate system in Q3D mode - Default (1,0,0)

Vproj

Input

dbl list

Defines the second projection vector of the target Q coordinate system in Q3D mode - Default (0,1,0).

Wproj

Input

dbl list

Defines the third projection vector of the target Q coordinate system in Q3D mode. - Default (0,0,1)

MinValues

Input

dbl list

It has to be N comma separated values, where N is the number of dimensions of the target workspace. Values smaller then specified here will not be added to workspace. Number N is defined by properties 4,6 and 7 and described on MD Transformation factory page. See also ConvertToMDMinMaxLocal v1

MaxValues

Input

dbl list

A list of the same size and the same units as MinValues list. Values higher or equal to the specified by this list will be ignored

SplitInto

Input

int list

5

A comma separated list of into how many sub-grid elements each dimension should split; or just one to split into the same number for all dimensions. Default 5.

SplitThreshold

Input

number

1000

How many events in a box before it should be split. Default 1000.

MaxRecursionDepth

Input

number

20

How many levels of box splitting recursion are allowed. The smallest box will have each side length \(l = (extents) / (SplitInto^{MaxRecursionDepth}).\) Default 20.

OverwriteExisting

Input

boolean

True

By default (“1”), existing Output Workspace will be replaced. Select false (“0”) if you want to add new events to the workspace, which already exist. Choosing “0” can be very inefficient for file-based workspaces

Description

This workflow algorithm loads, converts to MDWorkspace and combines a series of runs. The resulting workspace is a MDWorkspace containing a volume of scattering events. If a UB matrix is provided and QFrame=’HKL’, then the MD workspace will be in HKL otherwise it will be in Q_sample.

This is not a correctly normalized workspace, for that look at SingleCrystalDiffuseReduction. The output workspace can be used with FindPeaksMD and from that determine the UB matrix. The output workspace (if in Q sample) can then be used with MDNorm to correctly bin and normalise the data.

The input filename follows the syntax from MultipleFileProperty

You should refer to ConvertToMD for all its options. If MinValues and MaxValues are not provided then limits will be calculated with ConvertToMDMinMaxGlobal

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

Masking

The workspace will be masked by the provided masking file. A masking file can be created my masking a data file then saving it using SaveMask.

Usage

Single file Q-sample

ConvertMultipleRunsToSingleCrystalMD(Filename='CNCS_7860',
                                     MinValues=[-2,-2,-2],
                                     MaxValues=[2,2,2],
                                     OutputWorkspace='output',
                                     SetGoniometer=True,
                                     Axis0="huber,0,1,0,1")
ws=mtd['output']
print("The workspace is in {}".format(ws.getSpecialCoordinateSystem()))
print("There are {} experiment runs in the workspace".format(ws.getNumExperimentInfo()))
print("Number of Events = {}".format(ws.getNEvents()))
print("There are {} dimensions with names: {} {} {}".format(ws.getNumDims(), ws.getDimension(0).name, ws.getDimension(1).name, ws.getDimension(2).name))

Output:

The workspace is in QSample
There are 1 experiment runs in the workspace
Number of Events = 100210
There are 3 dimensions with names: Q_sample_x Q_sample_y Q_sample_z

Multiple files Q-sample

ConvertMultipleRunsToSingleCrystalMD(Filename='CORELLI_29782:29817:10',
                                     FilterByTofMin=1000,
                                     FilterByTofMax=16666,
                                     OutputWorkspace='output',
                                     SetGoniometer=True,
                                     Axis0="BL9:Mot:Sample:Axis1,0,1,0,1")
ws=mtd['output']
print("The workspace is in {}".format(ws.getSpecialCoordinateSystem()))
print("There are {} experiment runs in the workspace".format(ws.getNumExperimentInfo()))
print("Number of Events = {}".format(ws.getNEvents()))
print("There are {} dimensions with names: {} {} {}".format(ws.getNumDims(), ws.getDimension(0).name, ws.getDimension(1).name, ws.getDimension(2).name))

Output:

The workspace is in QSample
There are 4 experiment runs in the workspace
Number of Events = 47223197
There are 3 dimensions with names: Q_sample_x Q_sample_y Q_sample_z

Single file HKL

# Create a ISAW UB file for the test
import mantid
UBfilename=mantid.config.getString("defaultsave.directory")+"ConvertMultipleRunsToSingleCrystalMDTest.mat"
with open(UBfilename,'w') as f:
    f.write("0.0  0.5  0.0  \n")
    f.write("0.0  0.0  0.25  \n")
    f.write("0.2  0.0  0.0  \n")
    f.write("2.0  4.0  5.0  90  90  90  40  \n")
    f.write("0.0  0.0  0.0   0   0   0   0  \n")
    f.write("\n\nsome text about IPNS convention")

ConvertMultipleRunsToSingleCrystalMD(Filename='CNCS_7860',
                                     MinValues=[-2,-2,-2],
                                     MaxValues=[2,2,2],
                                     OutputWorkspace='output',
                                     SetGoniometer=True,
                                     Axis0="huber,0,1,0,1",
                                     UBMatrix=UBfilename,
                                     QFrame='HKL')
ws=mtd['output']
print("The workspace is in {}".format(ws.getSpecialCoordinateSystem()))
print("There are {} experiment runs in the workspace".format(ws.getNumExperimentInfo()))
print("Number of Events = {}".format(ws.getNEvents()))
print("There are {} dimensions with names: {} {} {}".format(ws.getNumDims(), ws.getDimension(0).name, ws.getDimension(1).name, ws.getDimension(2).name))

Output:

The workspace is in HKL
There are 1 experiment runs in the workspace
Number of Events = 112266
There are 3 dimensions with names: [H,0,0] [0,K,0] [0,0,L]

Multiple files HKL

ConvertMultipleRunsToSingleCrystalMD(Filename='CORELLI_29782:29817:10',
                                     FilterByTofMin=1000,
                                     FilterByTofMax=16666,
                                     OutputWorkspace='output',
                                     SetGoniometer=True,
                                     Axis0="BL9:Mot:Sample:Axis1,0,1,0,1",
                                     UBMatrix="/SNS/CORELLI/IPTS-15526/shared/benzil_Hexagonal.mat",
                                     QFrame='HKL')
ws=mtd['output']
print("The workspace is in {}".format(ws.getSpecialCoordinateSystem()))
print("There are {} experiment runs in the workspace".format(ws.getNumExperimentInfo()))
print("Number of Events = {}".format(ws.getNEvents()))
print("There are {} dimensions with names: {} {} {}".format(ws.getNumDims(), ws.getDimension(0).name, ws.getDimension(1).name, ws.getDimension(2).name))

Output:

The workspace is in HKL
There are 4 experiment runs in the workspace
Number of Events = 47223200
There are 3 dimensions with names: [H,0,0] [0,K,0] [0,0,L]

Source

Python: ConvertMultipleRunsToSingleCrystalMD.py