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

AlignAndFocusPowderSlim v1

Warning

This algorithm is currently for the VULCAN instrument testing purposes

Summary

VULCAN ONLY Algorithm to focus powder diffraction data into a number of histograms according to a grouping scheme defined in a CalFile.

See Also

AlignAndFocusPowderFromFiles

Properties

Name

Direction

Type

Default

Description

Filename

Input

string

Mandatory

The name of the Event NeXus file to read, including its full or relative path. The file name is typically of the form INST_####_event.nxs. Allowed extensions: [‘.nxs.h5’, ‘.nxs’, ‘_event.nxs’]

FilterByTimeStart

Input

number

Optional

To only include events after the provided start time, in seconds (relative to the start of the run).

FilterByTimeStop

Input

number

Optional

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

SplitterWorkspace

Input

Workspace

Input workspace specifying “splitters”, i.e. time intervals and targets for event filtering. Currently only a single output workspace is supported.

RelativeTime

Input

boolean

False

Flag indicating whether in SplitterWorkspace the times are absolute or relative. If true, they are relative to the run start time.

SplitterTarget

Input

number

0

The target workspace index for the splitter.

FilterBadPulses

Input

boolean

False

Filter bad pulses in the same way that FilterBadPulses v1 does.

BadPulsesLowerCutoff

Input

number

95

The percentage of the average to use as the lower bound when filtering bad pulses.

CalFileName

Input

string

The .cal file containing the position correction factors. Either this or OffsetsWorkspace needs to be specified. Allowed extensions: [‘.h5’, ‘.hd5’, ‘.hdf’, ‘.cal’]

XMin

Input

dbl list

0.1

Minimum x-value for the output binning

XDelta

Input

dbl list

0.0016

Bin size for output data

XMax

Input

dbl list

2

Minimum x-value for the output binning

BinningUnits

Input

string

dSpacing

The units of the input X min, max and delta values. Output will always be TOF. Allowed values: [‘dSpacing’, ‘TOF’, ‘MomentumTransfer’]

BinningMode

Input

string

Logarithmic

Specify binning behavior (‘Logarithmic’). Allowed values: [‘Logarithmic’, ‘Linear’]

OutputWorkspace

Output

MatrixWorkspace

Mandatory

An output workspace.

ReadSizeFromDisk

Input

number

100000000

Number of elements of time-of-flight or detector-id to read at a time. This is a maximum

EventsPerThread

Input

number

1000000

Number of events to read in a single thread. Higher means less threads are created.

Description

This is a simplified version of AlignAndFocusPowderFromFiles v1 which uses very few child algorithms. The main feature is that this reads the events, filters and adjusts their time-of-flight, then increments the correct bin in the output workspace. As a result, there is a significantly smaller memory usage and the processing is significantly faster.

Current limitations compared to AlignAndFocusPowderFromFiles

  • only supports the VULCAN instrument

  • hard coded for 6 particular groups

  • does not support copping data

  • does not support removing prompt pulse

Child algorithms used are

Usage

Example - event filtering

This algorithm accepts the same SplitterWorkspace inputs as FilterEvents and more information can be found on the Event Filtering page.

# create splitter table using relative time
splitter = CreateEmptyTableWorkspace()
splitter.addColumn('float', 'start')
splitter.addColumn('float', 'stop')
splitter.addColumn('str', 'target')

splitter.addRow((10,20, '0'))
splitter.addRow((200,210, '0'))
splitter.addRow((400,410, '0'))

# pass the splitter table to AlignAndFocusPowderSlim
ws = AlignAndFocusPowderSlim("VULCAN_218062.nxs.h5",
                             SplitterWorkspace=splitter, RelativeTime=True,
                             XMin=0, XMax=50000, XDelta=50000,
                             BinningMode="Linear",
                             BinningUnits="TOF")

# This is equivalent to using FilterEvents with the same splitter table.
# But note that this example doesn't align the data so put everything in 1 big bin to compare.
ws2 = LoadEventNexus("VULCAN_218062.nxs.h5", NumberOfBins=1)
grp = CreateGroupingWorkspace(ws2, GroupDetectorsBy='bank')
ws2 = GroupDetectors(ws2, CopyGroupingFromWorkspace="grp")

FilterEvents(ws2,
             SplitterWorkspace=splitter, RelativeTime=True,
             FilterByPulseTime=True,
             OutputWorkspaceBaseName="filtered")
out = Rebin("filtered_0", "0,50000,50000", PreserveEvents=False)

CompareWorkspaces(ws, out, CheckUncertainty=False, CheckSpectraMap=False, CheckInstrument=False)

Example - filter events based on log values

# Load only the log we need
cave_temperature = LoadEventNexus("VULCAN_218062.nxs.h5",
                                  MetaDataOnly=True,
                                  AllowList="CaveTemperature")

# Use GenerateEventsFilter to create a splitter table based on the log values
GenerateEventsFilter(cave_temperature,
                     OutputWorkspace='splitter',
                     InformationWorkspace='info',
                     LogName='CaveTemperature',
                     MinimumLogValue=70.10,
                     MaximumLogValue=70.15)

# Use the splitter table to filter the events during loading
ws = AlignAndFocusPowderSlim("VULCAN_218062.nxs.h5", SplitterWorkspace='splitter')

Example - filter bad pulses

ws = AlignAndFocusPowderSlim("VULCAN_218062.nxs.h5",
                             XMin=0, XMax=50000, XDelta=50000,
                             BinningMode="Linear",
                             BinningUnits="TOF",
                             FilterBadPulses=True)

# This is equivalent to using FilterBadPulses.
# But note that this example doesn't align the data so put everything in 1 big bin to compare.
ws2 = LoadEventNexus("VULCAN_218062.nxs.h5")
grp = CreateGroupingWorkspace(ws2, GroupDetectorsBy='bank')
ws2 = GroupDetectors(ws2, CopyGroupingFromWorkspace="grp")
ws2 = FilterBadPulses(ws2)
ws2 = Rebin(ws2, "0,50000,50000", PreserveEvents=False)

CompareWorkspaces(ws, ws2, CheckUncertainty=False, CheckSpectraMap=False, CheckInstrument=False)

Note

While we currently only support a single output workspace when filtering events from a splitter table but the output target can be selected with the SplitterTarget property and you can run the algorithm multiple times with different targets. We also can currently only filter based on the pulse time, not the event time-of-flight.

Categories: AlgorithmIndex | Workflow\Diffraction

Source

C++ header: AlignAndFocusPowderSlim.h

C++ source: AlignAndFocusPowderSlim.cpp