Table of Contents
Filter events from an EventWorkspace to one or multiple EventWorkspaces according to a series of splitters.
Name | Direction | Type | Default | Description |
---|---|---|---|---|
InputWorkspace | Input | EventWorkspace | Mandatory | An input event workspace |
SplitterWorkspace | Input | Workspace | Mandatory | An input SpilltersWorskpace for filtering |
OutputWorkspaceBaseName | Input | string | OutputWorkspace | The base name to use for the output workspace |
InformationWorkspace | Input | TableWorkspace | Optional output for the information of each splitter workspace index. | |
OutputTOFCorrectionWorkspace | Output | MatrixWorkspace | TOFCorrectWS | Name of output workspace for TOF correction factor. |
FilterByPulseTime | Input | boolean | False | Filter the event by its pulse time only for slow sample environment log. This option can make execution of algorithm faster. But it lowers precision. |
GroupWorkspaces | Input | boolean | False | Option to group all the output workspaces. Group name will be OutputWorkspaceBaseName. |
OutputWorkspaceIndexedFrom1 | Input | boolean | False | If selected, the minimum output workspace is indexed from 1 and continuous. |
CorrectionToSample | Input | string | None | Type of correction on neutron events to sample time from detector time. Allowed values: [‘None’, ‘Customized’, ‘Direct’, ‘Elastic’, ‘Indirect’] |
DetectorTOFCorrectionWorkspace | Input | TableWorkspace | Name of table workspace containing the log time correction factor for each detector. | |
IncidentEnergy | Input | number | Optional | Value of incident energy (Ei) in meV in direct mode. |
SpectrumWithoutDetector | Input | string | Skip | Approach to deal with spectrum without detectors. Allowed values: [‘Skip’, ‘Skip only if TOF correction’] |
SplitSampleLogs | Input | boolean | True | If selected, all sample logs will be splitted by the event splitters. It is not recommended for fast event log splitters. |
NumberOutputWS | Output | number | Number of output output workspace splitted. | |
DBSpectrum | Input | number | Optional | Spectrum (workspace index) for debug purpose. |
OutputWorkspaceNames | Output | str list | List of output workspaces names |
This algorithm filters events from an EventWorkspace to one or multiple EventWorkspaces according to an input SplittersWorkspace containing a series of splitters (i.e., SplittingIntervals).
The output will be one or multiple workspaces according to the number of index in splitters. The output workspace name is the combination of parameter OutputWorkspaceBaseName and the index in splitter.
The calibration, or say correction, from the detector to sample must be consider in fast log. Thus a calibration file is required. The math is
TOF_calibrated = TOF_raw * correction(detector ID).
The calibration is in column data format.
A reasonable approximation of the correction is
correction(detector_ID) = L1/(L1+L2(detector_ID))
Some events are not inside any splitters. They are put to a workspace name ended with ‘_unfiltered’.
If input property ‘OutputWorkspaceIndexedFrom1’ is set to True, then this workspace shall not be outputed.
In FilterByLogValue(), EventList.splitByTime() is used.
In FilterEvents(), if FilterByPulse is selected true, EventList.SplitByTime is called; otherwise, EventList.SplitByFullTime() is called instead.
The difference between splitByTime and splitByFullTime is that splitByTime filters events by pulse time, and splitByFullTime considers both pulse time and TOF.
Therefore, FilterByLogValue is not suitable for fast log filtering.
Wiki page EventFiltering has a detailed introduction on event filtering in MantidPlot.
Example - Filtering event without correction on TOF
ws = Load(Filename='CNCS_7860_event.nxs')
splitws, infows = GenerateEventsFilter(InputWorkspace=ws, UnitOfTime='Nanoseconds', LogName='SampleTemp',
MinimumLogValue=279.9, MaximumLogValue=279.98, LogValueInterval=0.01)
FilterEvents(InputWorkspace=ws, SplitterWorkspace=splitws, InformationWorkspace=infows,
OutputWorkspaceBaseName='tempsplitws', GroupWorkspaces=True,
FilterByPulseTime = False, OutputWorkspaceIndexedFrom1 = False,
CorrectionToSample = "None", SpectrumWithoutDetector = "Skip", SplitSampleLogs = False,
OutputTOFCorrectionWorkspace='mock')
# Print result
wsgroup = mtd["tempsplitws"]
wsnames = wsgroup.getNames()
for name in sorted(wsnames):
tmpws = mtd[name]
print "workspace %s has %d events" % (name, tmpws.getNumberEvents())
Output:
workspace tempsplitws_0 has 124 events
workspace tempsplitws_1 has 16915 events
workspace tempsplitws_2 has 10009 events
workspace tempsplitws_3 has 6962 events
workspace tempsplitws_4 has 22520 events
workspace tempsplitws_5 has 5133 events
workspace tempsplitws_unfiltered has 50603 events
Example - Filtering event by pulse time
ws = Load(Filename='CNCS_7860_event.nxs')
splitws, infows = GenerateEventsFilter(InputWorkspace=ws, UnitOfTime='Nanoseconds', LogName='SampleTemp',
MinimumLogValue=279.9, MaximumLogValue=279.98, LogValueInterval=0.01)
FilterEvents(InputWorkspace=ws,
SplitterWorkspace=splitws,
InformationWorkspace=infows,
OutputWorkspaceBaseName='tempsplitws',
GroupWorkspaces=True,
FilterByPulseTime = True,
OutputWorkspaceIndexedFrom1 = True,
CorrectionToSample = "None",
SpectrumWithoutDetector = "Skip",
SplitSampleLogs = False,
OutputTOFCorrectionWorkspace='mock')
# Print result
wsgroup = mtd["tempsplitws"]
wsnames = wsgroup.getNames()
for name in sorted(wsnames):
tmpws = mtd[name]
print "workspace %s has %d events" % (name, tmpws.getNumberEvents())
Output:
workspace tempsplitws_1 has 123 events
workspace tempsplitws_2 has 16951 events
workspace tempsplitws_3 has 9972 events
workspace tempsplitws_4 has 7019 events
workspace tempsplitws_5 has 22529 events
workspace tempsplitws_6 has 5067 events
Example - Filtering event with correction on TOF
ws = Load(Filename='CNCS_7860_event.nxs')
splitws, infows = GenerateEventsFilter(InputWorkspace=ws, UnitOfTime='Nanoseconds', LogName='SampleTemp',
MinimumLogValue=279.9, MaximumLogValue=279.98, LogValueInterval=0.01)
FilterEvents(InputWorkspace=ws, SplitterWorkspace=splitws, InformationWorkspace=infows,
OutputWorkspaceBaseName='tempsplitws',
GroupWorkspaces=True,
FilterByPulseTime = False,
OutputWorkspaceIndexedFrom1 = False,
CorrectionToSample = "Direct",
IncidentEnergy=3,
SpectrumWithoutDetector = "Skip",
SplitSampleLogs = False,
OutputTOFCorrectionWorkspace='mock')
# Print result
wsgroup = mtd["tempsplitws"]
wsnames = wsgroup.getNames()
for name in sorted(wsnames):
tmpws = mtd[name]
print "workspace %s has %d events" % (name, tmpws.getNumberEvents())
Output:
workspace tempsplitws_0 has 123 events
workspace tempsplitws_1 has 16951 events
workspace tempsplitws_2 has 9972 events
workspace tempsplitws_3 has 7019 events
workspace tempsplitws_4 has 22514 events
workspace tempsplitws_5 has 5082 events
workspace tempsplitws_unfiltered has 50605 events
Categories: Algorithms | Events | EventFiltering