Table of Contents
Name | Direction | Type | Default | Description |
---|---|---|---|---|
InputWorkspace | Input | MDEventWorkspace | Mandatory | An input MDWorkspace. |
AlignedDim0 | Input | string | Binning parameters for the 0th dimension. Enter it as a comma-separated list of values with the format: ‘name,minimum,maximum,number_of_bins’. Leave blank for NONE. | |
AlignedDim1 | Input | string | Binning parameters for the 1th dimension. Enter it as a comma-separated list of values with the format: ‘name,minimum,maximum,number_of_bins’. Leave blank for NONE. | |
AlignedDim2 | Input | string | Binning parameters for the 2th dimension. Enter it as a comma-separated list of values with the format: ‘name,minimum,maximum,number_of_bins’. Leave blank for NONE. | |
AlignedDim3 | Input | string | Binning parameters for the 3th dimension. Enter it as a comma-separated list of values with the format: ‘name,minimum,maximum,number_of_bins’. Leave blank for NONE. | |
AlignedDim4 | Input | string | Binning parameters for the 4th dimension. Enter it as a comma-separated list of values with the format: ‘name,minimum,maximum,number_of_bins’. Leave blank for NONE. | |
AlignedDim5 | Input | string | Binning parameters for the 5th dimension. Enter it as a comma-separated list of values with the format: ‘name,minimum,maximum,number_of_bins’. Leave blank for NONE. | |
FluxWorkspace | Input | MatrixWorkspace | Mandatory | An input workspace containing momentum dependent flux. |
SolidAngleWorkspace | Input | MatrixWorkspace | Mandatory | An input workspace containing momentum integrated vanadium (a measure of the solid angle). |
SkipSafetyCheck | Input | boolean | False | If set to true, the algorithm does not check history if the workspace was modified since theConvertToMD algorithm was run, and assume that the elastic mode is used. |
TemporaryNormalizationWorkspace | Input | IMDHistoWorkspace | An input MDHistoWorkspace used to accumulate normalization from multiple MDEventWorkspaces. If unspecified a blank MDHistoWorkspace will be created. | |
TemporaryDataWorkspace | Input | IMDHistoWorkspace | An input MDHistoWorkspace used to accumulate data from multiple MDEventWorkspaces. If unspecified a blank MDHistoWorkspace will be created. | |
OutputWorkspace | Output | Workspace | Mandatory | A name for the output data MDHistoWorkspace. |
OutputNormalizationWorkspace | Output | Workspace | Mandatory | A name for the output normalization MDHistoWorkspace. |
The algorithm calculates a normalization MD workspace for single crystal diffraction experiments. Trajectories of each detector in reciprocal space are calculated, and the flux is integrated between intersections with each MDBox. A brief introduction to the multi-dimensional data normalization can be found here.
The algorithm MDNormSCDPreprocessIncoherent can be used to process Vanadium data for the Solid Angle and Flux workspaces.
Example - MDNormSCD
try:
# Setting up the workspaces containing information about the flux and the solid angle (from a vanadium run)
rawVan=Load(Filename=r'TOPAZ_7892_event.nxs')
rawVan=ConvertUnits(InputWorkspace=rawVan,Target='Momentum')
MaskBTP(Workspace=rawVan,Bank="10-16,19-21,23-25,29-35,40-46,49-57,59")
MaskBTP(Workspace=rawVan,Pixel="0-9,246-255")
MaskBTP(Workspace=rawVan,Tube="0-9,246-255")
rawVan=CropWorkspace(InputWorkspace=rawVan,XMin='1.85',XMax='10')
#Solid angle
sa=Rebin(InputWorkspace=rawVan,Params='1.85,10,10',PreserveEvents='0')
SaveNexus(InputWorkspace=sa, Filename="/home/3y9/Desktop/TOPAZ/solidAngle.nxs")
#flux
flux=GroupDetectors(InputWorkspace=rawVan,MapFile=r'/home/3y9/Desktop/TOPAZ/grouping.xml')
DeleteWorkspace(rawVan)
flux=CompressEvents(InputWorkspace=flux,Tolerance=1e-4)
flux=Rebin(InputWorkspace=flux,Params='1.85,10,10')
for i in range(flux.getNumberHistograms()):
el=flux.getSpectrum(i)
el.divide(flux.readY(i)[0],0)
flux=Rebin(InputWorkspace=flux,Params='1.85,10,10')
flux=IntegrateFlux(flux)
SaveNexus(InputWorkspace=flux, Filename="/home/3y9/Desktop/TOPAZ/spectra.nxs")
#data
#If you have multiple workspaces, add separately the output workspaces, and separately the
#output normalization workspaces, then divide the two sums
runs = range(7985,7995,1)
mdout = None
mdnorm = None
for run in runs:
try:
MDdata = LoadMD(Filename="/home/3y9/Desktop/TOPAZ/MDdata_"+str(run)+".nxs")
except:
data=Load(Filename='TOPAZ_'+str(run)+'_event.nxs')
data=ConvertUnits(InputWorkspace=data,Target='Momentum')
MaskBTP(Workspace=data,Bank="10-16,19-21,23-25,29-35,40-46,49-57,59")
MaskBTP(Workspace=data,Pixel="0-9,246-255")
MaskBTP(Workspace=data,Tube="0-9,246-255")
data=CropWorkspace(InputWorkspace=data,XMin='1.85',XMax='10')
data=Rebin(InputWorkspace=data,Params='1.85,10,10')
LoadIsawUB(InputWorkspace=data,Filename=r'7995.mat')
MDdata=ConvertToMD(InputWorkspace=data,QDimensions="Q3D",dEAnalysisMode="Elastic",
Q3DFrames="HKL",QConversionScales="HKL",
MinValues="-10,-10,-10",Maxvalues="10,10,10")
SaveMD(InputWorkspace=MDdata, Filename="/home/3y9/Desktop/TOPAZ/MDdata_"+str(run)+".nxs")
#running the algorithm
mdout, mdnorm = MDNormSCD(InputWorkspace='MDdata',
AlignedDim0='[H,0,0],-8,8,100',
AlignedDim1='[0,K,0],-8,8,100',
AlignedDim2='[0,0,L],-8,8,100',
FluxWorkspace=flux,
SolidAngleWorkspace=sa,
TemporaryDataWorkspace=mdout,
TemporaryNormalizationWorkspace=mdnorm)
normalized=DivideMD('mdout','mdnorm')
except:
pass
The source for how this calculation is done is
Categories: Algorithms | MDAlgorithms\Normalisation
C++ source: MDNormSCD.cpp (last modified: 2017-09-19)
C++ header: MDNormSCD.h (last modified: 2017-05-17)