diff --git a/Framework/Beamline/inc/MantidBeamline/DetectorInfo.h b/Framework/Beamline/inc/MantidBeamline/DetectorInfo.h index 195c63623f08b4c5f39307310a091357bb4b020b..cc83265ab5dab7a246b249db9378277f9ddf6d29 100644 --- a/Framework/Beamline/inc/MantidBeamline/DetectorInfo.h +++ b/Framework/Beamline/inc/MantidBeamline/DetectorInfo.h @@ -67,6 +67,7 @@ public: bool isMasked(const std::pair<size_t, size_t> &index) const; void setMasked(const size_t index, bool masked); void setMasked(const std::pair<size_t, size_t> &index, bool masked); + bool hasMaskedDetectors() const; Eigen::Vector3d position(const size_t index) const; Eigen::Vector3d position(const std::pair<size_t, size_t> &index) const; Eigen::Quaterniond rotation(const size_t index) const; @@ -211,6 +212,12 @@ DetectorInfo::linearIndex(const std::pair<size_t, size_t> &index) const { return index.first + size() * index.second; } +/// Returns if there are masked detectors +inline bool DetectorInfo::hasMaskedDetectors() const { + return std::any_of(m_isMasked->cbegin(), m_isMasked->cend(), + [](const auto flag) { return flag; }); +} + } // namespace Beamline } // namespace Mantid diff --git a/Framework/DataHandling/src/LoadILLSANS.cpp b/Framework/DataHandling/src/LoadILLSANS.cpp index c5fba0cf62b9836f65c46b69e0fad25bfafb4a79..f5af0252b8bbbf53b914ea9e0db52833b75464b1 100644 --- a/Framework/DataHandling/src/LoadILLSANS.cpp +++ b/Framework/DataHandling/src/LoadILLSANS.cpp @@ -604,6 +604,8 @@ void LoadILLSANS::loadMetaData(const NeXus::NXEntry &entry, double wavelength = entry.getFloat(instrumentNamePath + "/selector/wavelength"); g_log.debug() << "Wavelength found in the nexus file: " << wavelength << '\n'; + // round the wavelength to avoid unnecessary rebinning during merge runs + wavelength = std::round(wavelength * 100) / 100.; if (wavelength <= 0) { g_log.debug() << "Mode = " << entry.getFloat("mode") << '\n'; @@ -625,6 +627,9 @@ void LoadILLSANS::loadMetaData(const NeXus::NXEntry &entry, g_log.warning("Could not find wavelength resolution, assuming 10%"); } } + // round also the wavelength res to avoid unnecessary rebinning during merge + // runs + wavelengthRes = std::round(wavelengthRes * 100) / 100.; runDetails.addProperty<double>("wavelength", wavelength); double ei = m_loader.calculateEnergy(wavelength); runDetails.addProperty<double>("Ei", ei, true); diff --git a/Framework/DataHandling/test/LoadILLSANSTest.h b/Framework/DataHandling/test/LoadILLSANSTest.h index 9a1ac3be4e06773f722eca6b5cdd0aa7b017b2a8..18245958d944a1457f127489e2c3522c414c8e20 100644 --- a/Framework/DataHandling/test/LoadILLSANSTest.h +++ b/Framework/DataHandling/test/LoadILLSANSTest.h @@ -87,8 +87,8 @@ public: const auto &spec6 = outputWS->y(6).rawData(); const auto &err6 = outputWS->e(6).rawData(); TS_ASSERT_EQUALS(xAxis.size(), 2) - TS_ASSERT_DELTA(xAxis[0], 5.72778, 1E-5) - TS_ASSERT_DELTA(xAxis[1], 6.26757, 1E-5) + TS_ASSERT_DELTA(xAxis[0], 5.73, 1E-5) + TS_ASSERT_DELTA(xAxis[1], 6.27, 1E-5) TS_ASSERT_EQUALS(spec6[0], 20) TS_ASSERT_DELTA(err6[0], sqrt(20), 1E-5) const auto unit = outputWS->getAxis(0)->unit()->unitID(); @@ -122,8 +122,8 @@ public: const auto &spec6 = outputWS->y(6).rawData(); const auto &err6 = outputWS->e(6).rawData(); TS_ASSERT_EQUALS(xAxis.size(), 2) - TS_ASSERT_DELTA(xAxis[0], 4.75015, 1E-5) - TS_ASSERT_DELTA(xAxis[1], 5.25016, 1E-5) + TS_ASSERT_DELTA(xAxis[0], 4.75, 1E-5) + TS_ASSERT_DELTA(xAxis[1], 5.25, 1E-5) TS_ASSERT_EQUALS(spec6[0], 45) TS_ASSERT_DELTA(err6[0], sqrt(45), 1E-5) const auto unit = outputWS->getAxis(0)->unit()->unitID(); diff --git a/Framework/Geometry/inc/MantidGeometry/Instrument/DetectorInfo.h b/Framework/Geometry/inc/MantidGeometry/Instrument/DetectorInfo.h index 42fd010d5a4bea049e31f2bc136d0d45be7205a2..d4ed8d5001e68e8c94e2db602876fc5642c52956 100644 --- a/Framework/Geometry/inc/MantidGeometry/Instrument/DetectorInfo.h +++ b/Framework/Geometry/inc/MantidGeometry/Instrument/DetectorInfo.h @@ -68,6 +68,7 @@ public: bool isMonitor(const std::pair<size_t, size_t> &index) const; bool isMasked(const size_t index) const; bool isMasked(const std::pair<size_t, size_t> &index) const; + bool hasMaskedDetectors() const; double l2(const size_t index) const; double l2(const std::pair<size_t, size_t> &index) const; double twoTheta(const size_t index) const; diff --git a/Framework/Geometry/src/Instrument/DetectorInfo.cpp b/Framework/Geometry/src/Instrument/DetectorInfo.cpp index b830abdb47a21bf75c9d5bafbe8a64ff9ece359e..82310bcef19ef256cf0c4d9cf77a37bcad23759f 100644 --- a/Framework/Geometry/src/Instrument/DetectorInfo.cpp +++ b/Framework/Geometry/src/Instrument/DetectorInfo.cpp @@ -111,6 +111,11 @@ bool DetectorInfo::isMasked(const std::pair<size_t, size_t> &index) const { return m_detectorInfo->isMasked(index); } +/// Returns true if there are masked detectors +bool DetectorInfo::hasMaskedDetectors() const { + return m_detectorInfo->hasMaskedDetectors(); +} + /** Returns L2 (distance from sample to spectrum). * * For monitors this is defined such that L1+L2 = source-detector distance, diff --git a/Framework/PythonInterface/mantid/geometry/src/Exports/DetectorInfo.cpp b/Framework/PythonInterface/mantid/geometry/src/Exports/DetectorInfo.cpp index 24511cce6d875bd35c3a02e15b352b2ca8d146c3..15279d5e9e01903927d69be9c0e89bee32038c1e 100644 --- a/Framework/PythonInterface/mantid/geometry/src/Exports/DetectorInfo.cpp +++ b/Framework/PythonInterface/mantid/geometry/src/Exports/DetectorInfo.cpp @@ -119,5 +119,7 @@ void export_DetectorInfo() { .def("l2", l2, (arg("self"), arg("index")), "Returns the l2 scattering distance") .def("l1", &DetectorInfo::l1, arg("self"), - "Returns the l1 scattering distance"); + "Returns the l1 scattering distance") + .def("hasMaskedDetectors", &DetectorInfo::hasMaskedDetectors, arg("self"), + "Returns if there are masked detectors"); } diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSILLAutoProcess.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSILLAutoProcess.py new file mode 100644 index 0000000000000000000000000000000000000000..6c0987da7eb0ab3198febb800e551ab785885961 --- /dev/null +++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSILLAutoProcess.py @@ -0,0 +1,484 @@ +# Mantid Repository : https://github.com/mantidproject/mantid +# +# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, +# NScD Oak Ridge National Laboratory, European Spallation Source +# & Institut Laue - Langevin +# SPDX - License - Identifier: GPL - 3.0 + +from __future__ import (absolute_import, division, print_function) + +from mantid.api import * +from mantid.kernel import * +from mantid.simpleapi import * +from os import path + + +EMPTY_TOKEN = '000000' + + +def needs_loading(property_value, loading_reduction_type): + """ + Checks whether a given unary input needs loading or is already loaded in ADS. + @param property_value : the string value of the corresponding FileProperty + @param loading_reduction_type : the reduction_type of input to load + """ + loading = False + ws_name = '' + if property_value: + ws_name = path.splitext(path.basename(property_value))[0] + if mtd.doesExist(ws_name): + logger.notice('Reusing {0} workspace: {1}'.format(loading_reduction_type, ws_name)) + else: + loading = True + return [loading, ws_name] + + +def get_run_number(value): + """ + Extracts the run number from the first run out of the string value of a multiple file property of numors + """ + return path.splitext(path.basename(value.split(',')[0].split('+')[0]))[0] + + +def needs_processing(property_value, process_reduction_type): + """ + Checks whether a given unary reduction needs processing or is already cached in ADS with expected name. + @param property_value : the string value of the corresponding MultipleFile input property + @param process_reduction_type : the reduction_type of process + """ + do_process = False + ws_name = '' + if property_value: + run_number = get_run_number(property_value) + ws_name = run_number + '_' + process_reduction_type + if mtd.doesExist(ws_name): + run = mtd[ws_name].getRun() + if run.hasProperty('ProcessedAs'): + process = run.getLogData('ProcessedAs').value + if process == process_reduction_type: + logger.notice('Reusing {0} workspace: {1}'.format(process_reduction_type, ws_name)) + else: + logger.warning( + '{0} workspace found, but processed differently: {1}'.format(process_reduction_type, ws_name)) + do_process = True + else: + logger.warning( + '{0} workspace found, but missing the ProcessedAs flag: {1}'.format(process_reduction_type, ws_name)) + do_process = True + else: + do_process = True + return [do_process, ws_name] + + +class SANSILLAutoProcess(DataProcessorAlgorithm): + """ + Performs complete treatment of ILL SANS data; instruments D11, D22, D33. + """ + progress = None + reduction_type = None + sample = None + absorber = None + beam = None + container = None + stransmission = None + ctransmission = None + btransmission = None + atransmission = None + sensitivity = None + mask = None + flux = None + default_mask = None + output = None + output_sens = None + dimensionality = None + reference = None + normalise = None + radius = None + thickness = None + + def category(self): + return 'ILL\\SANS;ILL\\Auto' + + def summary(self): + return 'Performs complete SANS data reduction at the ILL.' + + def seeAlso(self): + return ['SANSILLReduction', 'SANSILLIntegration',] + + def name(self): + return 'SANSILLAutoProcess' + + def validateInputs(self): + result = dict() + message = 'Wrong number of {0} runs: {1}. Provide one or as many as sample runs: {2}.' + tr_message = 'Wrong number of {0} runs: {1}. Provide one or multiple runs summed with +.' + sample_dim = self.getPropertyValue('SampleRuns').count(',') + abs_dim = self.getPropertyValue('AbsorberRuns').count(',') + beam_dim = self.getPropertyValue('BeamRuns').count(',') + flux_dim = self.getPropertyValue('FluxRuns').count(',') + can_dim = self.getPropertyValue('ContainerRuns').count(',') + str_dim = self.getPropertyValue('SampleTransmissionRuns').count(',') + ctr_dim = self.getPropertyValue('ContainerTransmissionRuns').count(',') + btr_dim = self.getPropertyValue('TransmissionBeamRuns').count(',') + atr_dim = self.getPropertyValue('TransmissionAbsorberRuns').count(',') + mask_dim = self.getPropertyValue('MaskFiles').count(',') + sens_dim = self.getPropertyValue('SensitivityMaps').count(',') + ref_dim = self.getPropertyValue('ReferenceFiles').count(',') + if self.getPropertyValue('SampleRuns') == '': + result['SampleRuns'] = 'Please provide at least one sample run.' + if abs_dim != sample_dim and abs_dim != 0: + result['AbsorberRuns'] = message.format('Absorber', abs_dim, sample_dim) + if beam_dim != sample_dim and beam_dim != 0: + result['BeamRuns'] = message.format('Beam', beam_dim, sample_dim) + if can_dim != sample_dim and can_dim != 0: + result['ContainerRuns'] = message.format('Container', can_dim, sample_dim) + if str_dim != 0: + issues['SampleTransmissionRuns'] = tr_message.format('SampleTransmission', str_dim) + if ctr_dim != 0: + issues['ContainerTransmissionRuns'] = tr_message.format('ContainerTransmission', ctr_dim) + if btr_dim != 0: + issues['TransmissionBeamRuns'] = tr_message.format('TransmissionBeam', btr_dim) + if atr_dim != 0: + issues['TransmissionAbsorberRuns'] = tr_message.format('TransmissionAbsorber', atr_dim) + if mask_dim != sample_dim and mask_dim != 0: + result['MaskFiles'] = message.format('Mask', mask_dim, sample_dim) + if ref_dim != sample_dim and ref_dim != 0: + result['ReferenceFiles'] = message.format('Reference', ref_dim, sample_dim) + if sens_dim != sample_dim and sens_dim != 0: + result['SensitivityMaps'] = message.format('Sensitivity', sens_dim, sample_dim) + if flux_dim != flux_dim and flux_dim != 0: + result['FluxRuns'] = message.format('Flux') + + return result + + def setUp(self): + self.sample = self.getPropertyValue('SampleRuns').split(',') + self.absorber = self.getPropertyValue('AbsorberRuns').split(',') + self.beam = self.getPropertyValue('BeamRuns').split(',') + self.flux = self.getPropertyValue('FluxRuns').split(',') + self.container = self.getPropertyValue('ContainerRuns').split(',') + self.stransmission = self.getPropertyValue('SampleTransmissionRuns') + self.ctransmission = self.getPropertyValue('ContainerTransmissionRuns') + self.btransmission = self.getPropertyValue('TransmissionBeamRuns') + self.atransmission = self.getPropertyValue('TransmissionAbsorberRuns') + self.sensitivity = self.getPropertyValue('SensitivityMaps').split(',') + self.default_mask = self.getPropertyValue('DefaultMaskFile') + self.mask = self.getPropertyValue('MaskFiles').split(',') + self.reference = self.getPropertyValue('ReferenceFiles').split(',') + self.output = self.getPropertyValue('OutputWorkspace') + self.output_sens = self.getPropertyValue('SensitivityOutputWorkspace') + self.reduction_type = self.getPropertyValue('ReductionType') + self.normalise = self.getPropertyValue('NormaliseBy') + self.radius = self.getProperty('BeamRadius').value + self.dimensionality = len(self.sample) + self.progress = Progress(self, start=0.0, end=1.0, nreports=10 * self.dimensionality) + + def PyInit(self): + + self.declareProperty('ReductionType', defaultValue='ReduceSample', + validator=StringListValidator(['ReduceSample', 'ReduceWater']), + doc='Choose whether to treat a sample or a water run to calculate sensitivity.') + + self.declareProperty(WorkspaceGroupProperty('OutputWorkspace', '', + direction=Direction.Output), + doc='The output workspace group containing reduced data.') + + self.declareProperty(MultipleFileProperty('SampleRuns', + action=FileAction.OptionalLoad, + extensions=['nxs'], + allow_empty=True), + doc='Sample run(s).') + + self.declareProperty(MultipleFileProperty('AbsorberRuns', + action=FileAction.OptionalLoad, + extensions=['nxs']), + doc='Absorber (Cd/B4C) run(s).') + + self.declareProperty(MultipleFileProperty('BeamRuns', + action=FileAction.OptionalLoad, + extensions=['nxs']), + doc='Empty beam run(s).') + + self.declareProperty(MultipleFileProperty('FluxRuns', + action=FileAction.OptionalLoad, + extensions=['nxs']), + doc='Empty beam run(s) for flux calculation only; ' + 'if left blank flux will be calculated from BeamRuns.') + + self.declareProperty(MultipleFileProperty('ContainerRuns', + action=FileAction.OptionalLoad, + extensions=['nxs']), + doc='Empty container run(s).') + + self.setPropertyGroup('SampleRuns', 'Numors') + self.setPropertyGroup('AbsorberRuns', 'Numors') + self.setPropertyGroup('BeamRuns', 'Numors') + self.setPropertyGroup('FluxRuns', 'Numors') + self.setPropertyGroup('ContainerRuns', 'Numors') + + self.declareProperty(MultipleFileProperty('SampleTransmissionRuns', + action=FileAction.OptionalLoad, + extensions=['nxs']), + doc='Sample transmission run(s).') + + self.declareProperty(MultipleFileProperty('ContainerTransmissionRuns', + action=FileAction.OptionalLoad, + extensions=['nxs']), + doc='Container transmission run(s).') + + self.declareProperty(MultipleFileProperty('TransmissionBeamRuns', + action=FileAction.OptionalLoad, + extensions=['nxs']), + doc='Empty beam run(s) for transmission.') + + self.declareProperty(MultipleFileProperty('TransmissionAbsorberRuns', + action=FileAction.OptionalLoad, + extensions=['nxs']), + doc='Absorber (Cd/B4C) run(s) for transmission.') + + self.setPropertyGroup('SampleTransmissionRuns', 'Transmissions') + self.setPropertyGroup('ContainerTransmissionRuns', 'Transmissions') + self.setPropertyGroup('TransmissionBeamRuns', 'Transmissions') + self.setPropertyGroup('TransmissionAbsorberRuns', 'Transmissions') + + self.declareProperty(MultipleFileProperty('SensitivityMaps', + action=FileAction.OptionalLoad, + extensions=['nxs']), + doc='File(s) containing the map of relative detector efficiencies.') + + self.declareProperty(FileProperty('DefaultMaskFile', '', action=FileAction.OptionalLoad, extensions=['nxs']), + doc='File containing the default mask to be applied to all the detector configurations.') + + self.declareProperty(MultipleFileProperty('MaskFiles', + action=FileAction.OptionalLoad, + extensions=['nxs']), + doc='File(s) containing the beam stop and other detector mask.') + + self.declareProperty(MultipleFileProperty('ReferenceFiles', + action=FileAction.OptionalLoad, + extensions=['nxs']), + doc='File(s) containing the corrected water data for absolute normalisation.') + + self.declareProperty(MatrixWorkspaceProperty('SensitivityOutputWorkspace', '', + direction=Direction.Output, + optional=PropertyMode.Optional), + doc='The output sensitivity map workspace.') + + self.copyProperties('SANSILLReduction', + ['NormaliseBy']) + + self.declareProperty('SampleThickness', 0.1, validator=FloatBoundedValidator(lower=0.), + doc='Sample thickness [cm]') + + self.declareProperty('BeamRadius', 0.05, validator=FloatBoundedValidator(lower=0.), + doc='Beam raduis [m]; used for beam center finding, transmission and flux calculations.') + + self.declareProperty('WaterCrossSection', 1., doc='Provide water cross-section; ' + 'used only if the absolute scale is done by dividing to water.') + + self.setPropertyGroup('SensitivityMaps', 'Options') + self.setPropertyGroup('DefaultMaskFile', 'Options') + self.setPropertyGroup('MaskFiles', 'Options') + self.setPropertyGroup('ReferenceFiles', 'Options') + self.setPropertyGroup('SensitivityOutputWorkspace', 'Options') + self.setPropertyGroup('NormaliseBy', 'Options') + self.setPropertyGroup('SampleThickness', 'Options') + self.setPropertyGroup('BeamRadius', 'Options') + self.setPropertyGroup('WaterCrossSection', 'Options') + + self.copyProperties('SANSILLIntegration', + ['OutputType', 'CalculateResolution', 'DefaultQBinning', 'BinningFactor', 'OutputBinning', + 'NPixelDivision', 'NumberOfWedges', 'WedgeWorkspace', 'WedgeAngle', 'WedgeOffset', + 'AsymmetricWedges', 'MaxQxy', 'DeltaQ', 'IQxQyLogBinning']) + + self.setPropertyGroup('OutputType', 'Integration Options') + self.setPropertyGroup('CalculateResolution', 'Integration Options') + + def PyExec(self): + + self.setUp() + outputs = [] + for i in range(self.dimensionality): + if self.sample[i] != EMPTY_TOKEN: + self.reduce(i) + outputs.append(self.output+'_'+str(i+1)) + else: + self.log().information('Skipping empty token run.') + + GroupWorkspaces(InputWorkspaces=outputs, OutputWorkspace=self.output) + self.setProperty('OutputWorkspace', mtd[self.output]) + if self.reduction_type == 'ReduceWater': + self.setProperty('SensitivityOutputWorkspace', mtd[self.output_sens]) + + def reduce(self, i): + + [process_transmission_absorber, transmission_absorber_name] = needs_processing(self.atransmission, 'Absorber') + self.progress.report('Processing transmission absorber') + if process_transmission_absorber: + SANSILLReduction(Run=self.atransmission, + ProcessAs='Absorber', + NormaliseBy=self.normalise, + OutputWorkspace=transmission_absorber_name) + + [process_transmission_beam, transmission_beam_name] = needs_processing(self.btransmission, 'Beam') + self.progress.report('Processing transmission beam') + flux_name = transmission_beam_name + '_Flux' + if process_transmission_beam: + SANSILLReduction(Run=self.btransmission, + ProcessAs='Beam', + NormaliseBy=self.normalise, + OutputWorkspace=transmission_beam_name, + BeamRadius=self.radius, + FluxOutputWorkspace=flux_name, + AbsorberInputWorkspace=transmission_absorber_name) + + [process_container_transmission, container_transmission_name] = needs_processing(self.ctransmission, 'Transmission') + self.progress.report('Processing container transmission') + if process_container_transmission: + SANSILLReduction(Run=self.ctransmission, + ProcessAs='Transmission', + OutputWorkspace=container_transmission_name, + AbsorberInputWorkspace=transmission_absorber_name, + BeamInputWorkspace=transmission_beam_name, + NormaliseBy=self.normalise, + BeamRadius=self.radius) + + [process_sample_transmission, sample_transmission_name] = needs_processing(self.stransmission, 'Transmission') + self.progress.report('Processing sample transmission') + if process_sample_transmission: + SANSILLReduction(Run=self.stransmission, + ProcessAs='Transmission', + OutputWorkspace=sample_transmission_name, + AbsorberInputWorkspace=transmission_absorber_name, + BeamInputWorkspace=transmission_beam_name, + NormaliseBy=self.normalise, + BeamRadius=self.radius) + + absorber = self.absorber[i] if len(self.absorber) == self.dimensionality else self.absorber[0] + [process_absorber, absorber_name] = needs_processing(absorber, 'Absorber') + self.progress.report('Processing absorber') + if process_absorber: + SANSILLReduction(Run=absorber, + ProcessAs='Absorber', + NormaliseBy=self.normalise, + OutputWorkspace=absorber_name) + + beam = self.beam[i] if len(self.beam) == self.dimensionality else self.beam[0] + [process_beam, beam_name] = needs_processing(beam, 'Beam') + flux_name = beam_name + '_Flux' if not self.flux[0] else '' + self.progress.report('Processing beam') + if process_beam: + SANSILLReduction(Run=beam, + ProcessAs='Beam', + OutputWorkspace=beam_name, + NormaliseBy=self.normalise, + BeamRadius=self.radius, + AbsorberInputWorkspace=absorber_name, + FluxOutputWorkspace=flux_name) + + if self.flux[0]: + flux = self.flux[i] if len(self.flux) == self.dimensionality else self.flux[0] + [process_flux, flux_name] = needs_processing(flux, 'Flux') + self.progress.report('Processing flux') + if process_flux: + SANSILLReduction(Run=flux, + ProcessAs='Beam', + OutputWorkspace=flux_name.replace('Flux', 'Beam'), + NormaliseBy=self.normalise, + BeamRadius=self.radius, + AbsorberInputWorkspace=absorber_name, + FluxOutputWorkspace=flux_name) + + container = self.container[i] if len(self.container) == self.dimensionality else self.container[0] + [process_container, container_name] = needs_processing(container, 'Container') + self.progress.report('Processing container') + if process_container: + SANSILLReduction(Run=container, + ProcessAs='Container', + OutputWorkspace=container_name, + AbsorberInputWorkspace=absorber_name, + BeamInputWorkspace=beam_name, + CacheSolidAngle=True, + TransmissionInputWorkspace=container_transmission_name, + NormaliseBy=self.normalise) + + # this is the default mask, the same for all the distance configurations + [load_default_mask, default_mask_name] = needs_loading(self.default_mask, 'DefaultMask') + self.progress.report('Loading default mask') + if load_default_mask: + LoadNexusProcessed(Filename=self.default_mask, OutputWorkspace=default_mask_name) + + # this is the beam stop mask, potentially different at each distance configuration + mask = self.mask[i] if len(self.mask) == self.dimensionality else self.mask[0] + [load_mask, mask_name] = needs_loading(mask, 'Mask') + self.progress.report('Loading mask') + if load_mask: + LoadNexusProcessed(Filename=mask, OutputWorkspace=mask_name) + + sens_input = '' + ref_input = '' + flux_input = '' + if not self.reference[0]: + flux_input = flux_name + if self.sensitivity: + sens = self.sensitivity[i] if len(self.sensitivity) == self.dimensionality else self.sensitivity[0] + [load_sensitivity, sensitivity_name] = needs_loading(sens, 'Sensitivity') + sens_input = sensitivity_name + self.progress.report('Loading sensitivity') + if load_sensitivity: + LoadNexusProcessed(Filename=sens, OutputWorkspace=sensitivity_name) + else: + reference = self.reference[i] if len(self.reference) == self.dimensionality else self.reference[0] + [load_reference, reference_name] = needs_loading(reference, 'Reference') + ref_input = reference_name + self.progress.report('Loading reference') + if load_reference: + LoadNexusProcessed(Filename=reference, OutputWorkspace=reference_name) + + output = self.output + '_' + str(i + 1) + [_, sample_name] = needs_processing(self.sample[i], 'Sample') + self.progress.report('Processing sample at detector configuration '+str(i+1)) + if self.reduction_type == 'ReduceSample': + SANSILLReduction(Run=self.sample[i], + ProcessAs='Sample', + OutputWorkspace=sample_name, + ReferenceInputWorkspace=ref_input, + AbsorberInputWorkspace=absorber_name, + BeamInputWorkspace=beam_name, + CacheSolidAngle=True, + ContainerInputWorkspace=container_name, + TransmissionInputWorkspace=sample_transmission_name, + MaskedInputWorkspace=mask_name, + DefaultMaskedInputWorkspace=default_mask_name, + SensitivityInputWorkspace=sens_input, + FluxInputWorkspace=flux_input, + NormaliseBy=self.normalise, + SampleThickness=self.getProperty('SampleThickness').value, + WaterCrossSection=self.getProperty('WaterCrossSection').value) + SANSILLIntegration(InputWorkspace=sample_name, + OutputWorkspace=output, + OutputType=self.getPropertyValue('OutputType'), + CalculateResolution=self.getPropertyValue('CalculateResolution'), + DefaultQBinning=self.getPropertyValue('DefaultQBinning'), + BinningFactor=self.getProperty('BinningFactor').value, + OutputBinning=self.getPropertyValue('OutputBinning'), + NPixelDivision=self.getProperty('NPixelDivision').value, + NumberOfWedges=self.getProperty('NumberOfWedges').value, + WedgeAngle=self.getProperty('WedgeAngle').value, + WedgeOffset=self.getProperty('WedgeOffset').value, + AsymmetricWedges=self.getProperty('AsymmetricWedges').value) + elif self.reduction_type == 'ReduceWater': + SANSILLReduction(Run=self.sample[i], + ProcessAs='Reference', + OutputWorkspace=output, + AbsorberInputWorkspace=absorber_name, + BeamInputWorkspace=beam_name, + CacheSolidAngle=True, + ContainerInputWorkspace=container_name, + NormaliseBy=self.normalise, + TransmissionInputWorkspace=sample_transmission_name, + SensitivityOutputWorkspace=self.output_sens, + MaskedInputWorkspace=mask_name, + DefaultMaskedInputWorkspace=default_mask_name, + SampleThickness=self.getProperty('SampleThickness').value) + +AlgorithmFactory.subscribe(SANSILLAutoProcess) diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSILLIntegration.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSILLIntegration.py index 170825a74f9ba7b8760f8bccc614c85c6608d5bb..29de77aaec46311b8d99392f48c46c74246cab25 100644 --- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSILLIntegration.py +++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSILLIntegration.py @@ -283,9 +283,11 @@ class SANSILLIntegration(PythonAlgorithm): else: self._deltaQ = MonochromaticScalarQCartesian(wavelength, delta_wavelength, x1, y1, x2, y2, x3, y3, l1, l2) else: - pos1 = source_aperture.find('(') + 1 - pos3 = source_aperture.find(')') - r1 = float(source_aperture[pos1:pos3]) * to_meter + if '(' in source_aperture: + pos1 = source_aperture.find('(') + 1 + pos3 = source_aperture.find(')') + source_aperture = source_aperture[pos1:pos3] + r1 = float(source_aperture) * to_meter r2 = run.getLogData('Beam.sample_ap_x_or_diam').value * to_meter if is_tof: raise RuntimeError('TOF resolution is not supported yet') diff --git a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSILLReduction.py b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSILLReduction.py index 02b0d8f0980de50dec0ab5a06ee728cc9799f613..01773721d0300e4d844063d6b46e70b51334706c 100644 --- a/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSILLReduction.py +++ b/Framework/PythonInterface/plugins/algorithms/WorkflowAlgorithms/SANSILLReduction.py @@ -6,7 +6,7 @@ # SPDX - License - Identifier: GPL - 3.0 + from __future__ import (absolute_import, division, print_function) -from mantid.api import PythonAlgorithm, MatrixWorkspaceProperty, MultipleFileProperty, PropertyMode, Progress +from mantid.api import PythonAlgorithm, MatrixWorkspaceProperty, MultipleFileProperty, PropertyMode, Progress, WorkspaceGroup from mantid.kernel import Direction, EnabledWhenProperty, FloatBoundedValidator, LogicOperator, PropertyCriterion, StringListValidator from mantid.simpleapi import * from math import fabs @@ -37,18 +37,31 @@ class SANSILLReduction(PythonAlgorithm): issues['BeamInputWorkspace'] = 'Beam input workspace is mandatory for transmission calculation.' return issues + @staticmethod + def _get_solid_angle_method(instrument): + if instrument in ['D11', 'D11lr']: + return 'Rectangle' + else: + return 'GenericShape' + + @staticmethod + def _make_solid_angle_name(ws): + return mtd[ws].getInstrument().getName()+'_'+str(int(mtd[ws].getRun().getLogData('L2').value))+'m_SolidAngle' + @staticmethod def _check_distances_match(ws1, ws2): """ Checks if the detector distance between two workspaces are close enough @param ws1 : workspace 1 @param ws2 : workspace 2 - @return true if the detector distance difference is less than 1 cm """ tolerance = 0.01 #m l2_1 = ws1.getRun().getLogData('L2').value l2_2 = ws2.getRun().getLogData('L2').value - return fabs(l2_1 - l2_2) < tolerance + r1 = ws1.getRunNumber() + r2 = ws2.getRunNumber() + if fabs(l2_1 - l2_2) > tolerance: + logger.warning('Different distances detected! {0}: {1}, {2}: {3}'.format(r1, l2_1, r2, l2_2)) @staticmethod def _check_processed_flag(ws, value): @@ -64,6 +77,11 @@ class SANSILLReduction(PythonAlgorithm): return '<infinite-cylinder id="flux"><centre x="0.0" y="0.0" z="0.0"/><axis x="0.0" y="0.0" z="1.0"/>' \ '<radius val="{0}"/></infinite-cylinder>'.format(radius) + @staticmethod + def _mask(ws, masked_ws): + if masked_ws.detectorInfo().hasMaskedDetectors(): + MaskDetectors(Workspace=ws, MaskedWorkspace=masked_ws) + def PyInit(self): self.declareProperty(MultipleFileProperty('Run', extensions=['nxs']), @@ -100,7 +118,7 @@ class SANSILLReduction(PythonAlgorithm): doc='Choose the normalisation type.') self.declareProperty('BeamRadius', 0.05, validator=FloatBoundedValidator(lower=0.), - doc='Beam raduis [m]; used for beam center finding and transmission calculations.') + doc='Beam raduis [m]; used for beam center finding, transmission and flux calculations.') self.setPropertySettings('BeamRadius', EnabledWhenProperty(beam, transmission, LogicOperator.Or)) @@ -193,17 +211,27 @@ class SANSILLReduction(PythonAlgorithm): self.setPropertySettings('FluxOutputWorkspace', beam) + self.declareProperty('CacheSolidAngle', False, doc='Whether or not to cache the solid angle workspace.') + + self.declareProperty('WaterCrossSection', 1., doc='Provide water cross-section; ' + 'used only if the absolute scale is done by dividing to water.') + + self.declareProperty(MatrixWorkspaceProperty('DefaultMaskedInputWorkspace', '', + direction=Direction.Input, + optional=PropertyMode.Optional), + doc='Workspace to copy the mask from; for example, the bad detector edges.') + + self.setPropertySettings('DefaultMaskedInputWorkspace', EnabledWhenProperty(sample, reference, LogicOperator.Or)) + def _normalise(self, ws): """ Normalizes the workspace by time (SampleLog Timer) or Monitor (ID=100000) @param ws : the input workspace """ normalise_by = self.getPropertyValue('NormaliseBy') + monID = 100000 if self._instrument != 'D33' else 500000 if normalise_by == 'Monitor': mon = ws + '_mon' - monID = 100000 - if mtd[ws].getInstrument().getName() == 'D33': - monID = 500000 ExtractSpectra(InputWorkspace=ws, DetectorList=monID, OutputWorkspace=mon) if mtd[mon].readY(0)[0] == 0: raise RuntimeError('Normalise to monitor requested, but monitor has 0 counts.') @@ -220,6 +248,9 @@ class SANSILLReduction(PythonAlgorithm): raise RuntimeError('Unable to normalise to time; duration found is 0 seconds.') else: raise RuntimeError('Normalise to timer requested, but timer information is not available.') + # regardless on normalisation, mask out the monitors, but do not extract them, since extracting is slow + # masking however is needed to get more reasonable scales in the instrument view + MaskDetectors(Workspace=ws, DetectorList=[monID, monID+1]) def _process_beam(self, ws): """ @@ -275,8 +306,7 @@ class SANSILLReduction(PythonAlgorithm): @param ws: input workspace name @param beam_ws: empty beam workspace """ - if not self._check_distances_match(mtd[ws], beam_ws): - self.log().warning('Different detector distances found for empty beam and transmission runs!') + self._check_distances_match(mtd[ws], beam_ws) RebinToWorkspace(WorkspaceToRebin=ws, WorkspaceToMatch=beam_ws, OutputWorkspace=ws) radius = self.getProperty('BeamRadius').value shapeXML = self._cylinder(radius) @@ -312,28 +342,29 @@ class SANSILLReduction(PythonAlgorithm): if reference_ws: if not self._check_processed_flag(reference_ws, 'Reference'): self.log().warning('Reference input workspace is not processed as reference.') - Divide(LHSWorkspace=ws, RHSWorkspace=reference_ws, OutputWorkspace=ws) + Divide(LHSWorkspace=ws, RHSWorkspace=reference_ws, OutputWorkspace=ws, WarnOnZeroDivide=False) + Scale(InputWorkspace=ws, Factor=self.getProperty('WaterCrossSection').value, OutputWorkspace=ws) + self._mask(ws, reference_ws) coll_ws = reference_ws else: sensitivity_in = self.getProperty('SensitivityInputWorkspace').value if sensitivity_in: if not self._check_processed_flag(sensitivity_in, 'Sensitivity'): self.log().warning('Sensitivity input workspace is not processed as sensitivity.') - Divide(LHSWorkspace=ws, RHSWorkspace=sensitivity_in, OutputWorkspace=ws) + Divide(LHSWorkspace=ws, RHSWorkspace=sensitivity_in, OutputWorkspace=ws, WarnOnZeroDivide=False) + self._mask(ws, sensitivity_in) flux_in = self.getProperty('FluxInputWorkspace').value if flux_in: coll_ws = flux_in flux_ws = ws + '_flux' if self._mode == 'TOF': RebinToWorkspace(WorkspaceToRebin=flux_in, WorkspaceToMatch=ws, OutputWorkspace=flux_ws) - Divide(LHSWorkspace=ws, RHSWorkspace=flux_ws, OutputWorkspace=ws) + Divide(LHSWorkspace=ws, RHSWorkspace=flux_ws, OutputWorkspace=ws, WarnOnZeroDivide=False) DeleteWorkspace(flux_ws) else: - Divide(LHSWorkspace=ws, RHSWorkspace=flux_in, OutputWorkspace=ws) + Divide(LHSWorkspace=ws, RHSWorkspace=flux_in, OutputWorkspace=ws, WarnOnZeroDivide=False) if coll_ws: - if not self._check_distances_match(mtd[ws], coll_ws): - self.log().warning( - 'Different detector distances found for the reference/flux and sample runs!') + self._check_distances_match(mtd[ws], coll_ws) sample_coll = mtd[ws].getRun().getLogData('collimation.actual_position').value ref_coll = coll_ws.getRun().getLogData('collimation.actual_position').value flux_factor = (sample_coll ** 2) / (ref_coll ** 2) @@ -366,8 +397,7 @@ class SANSILLReduction(PythonAlgorithm): AddSampleLog(Workspace=ws, LogName='BeamCenterX', LogText=str(beam_x), LogType='Number') AddSampleLog(Workspace=ws, LogName='BeamCenterY', LogText=str(beam_y), LogType='Number') MoveInstrumentComponent(Workspace=ws, X=-beam_x, Y=-beam_y, ComponentName='detector') - if not self._check_distances_match(mtd[ws], beam_ws): - self.log().warning('Different detector distances found for empty beam and sample runs!') + self._check_distances_match(mtd[ws], beam_ws) def _apply_transmission(self, ws, transmission_ws): """ @@ -400,24 +430,14 @@ class SANSILLReduction(PythonAlgorithm): """ if not self._check_processed_flag(container_ws, 'Container'): self.log().warning('Container input workspace is not processed as container.') - if not self._check_distances_match(mtd[ws], container_ws): - self.log().warning( - 'Different detector distances found for container and sample runs!') + self._check_distances_match(mtd[ws], container_ws) Minus(LHSWorkspace=ws, RHSWorkspace=container_ws, OutputWorkspace=ws) - def _apply_mask(self, ws, mask_ws): + def _apply_parallax(self, ws): """ - Applies the mask - @param ws: input workspace - @param mask_ws: input masked workspace + Applies the parallax correction + @param ws : the input workspace """ - masked_ws = ws + '_mask' - CloneWorkspace(InputWorkspace=mask_ws, OutputWorkspace=masked_ws) - ExtractMonitors(InputWorkspace=masked_ws, DetectorWorkspace=masked_ws) - MaskDetectors(Workspace=ws, MaskedWorkspace=masked_ws) - DeleteWorkspace(masked_ws) - - def _apply_parallax(self, ws): self.log().information('Performing parallax correction') if self._instrument == 'D33': components = ['back_detector', 'front_detector_top', 'front_detector_bottom', @@ -444,14 +464,40 @@ class SANSILLReduction(PythonAlgorithm): else: self.log().information('No tau available in IPF, skipping dead time correction.') + def _finalize(self, ws, process): + if process != 'Transmission': + if self._instrument == 'D33': + CalculateDynamicRange(Workspace=ws, ComponentNames=['back_detector', 'front_detector']) + else: + CalculateDynamicRange(Workspace=ws) + mtd[ws].getRun().addProperty('ProcessedAs', process, True) + RenameWorkspace(InputWorkspace=ws, OutputWorkspace=ws[2:]) + self.setProperty('OutputWorkspace', mtd[ws[2:]]) + + def _apply_masks(self, ws): + # apply the default mask, e.g. the bad detector edges + default_mask_ws = self.getProperty('DefaultMaskedInputWorkspace').value + if default_mask_ws: + self._mask(ws, default_mask_ws) + # apply the beam stop mask + mask_ws = self.getProperty('MaskedInputWorkspace').value + if mask_ws: + self._mask(ws, mask_ws) + def PyExec(self): process = self.getPropertyValue('ProcessAs') processes = ['Absorber', 'Beam', 'Transmission', 'Container', 'Reference', 'Sample'] progress = Progress(self, start=0.0, end=1.0, nreports=processes.index(process) + 1) ws = '__' + self.getPropertyValue('OutputWorkspace') - LoadAndMerge(Filename=self.getPropertyValue('Run').replace(',','+'), LoaderName='LoadILLSANS', OutputWorkspace=ws) + # we do not want the summing done by LoadAndMerge since it will be pair-wise and slow + # instead we load and list, and merge once with merge runs + LoadAndMerge(Filename=self.getPropertyValue('Run').replace('+',','), LoaderName='LoadILLSANS', OutputWorkspace=ws) + if isinstance(mtd[ws], WorkspaceGroup): + tmp = '__tmp'+ws + MergeRuns(InputWorkspaces=ws, OutputWorkspace=tmp) + DeleteWorkspaces(ws) + RenameWorkspace(InputWorkspace=tmp, OutputWorkspace=ws) self._normalise(ws) - ExtractMonitors(InputWorkspace=ws, DetectorWorkspace=ws) self._instrument = mtd[ws].getInstrument().getName() run = mtd[ws].getRun() if run.hasProperty('tof_mode'): @@ -476,18 +522,23 @@ class SANSILLReduction(PythonAlgorithm): transmission_ws = self.getProperty('TransmissionInputWorkspace').value if transmission_ws: self._apply_transmission(ws, transmission_ws) - solid_angle = ws + '_sa' - SolidAngle(InputWorkspace=ws, OutputWorkspace=solid_angle) - Divide(LHSWorkspace=ws, RHSWorkspace=solid_angle, OutputWorkspace=ws) - DeleteWorkspace(solid_angle) + solid_angle = self._make_solid_angle_name(ws) + cache = self.getProperty('CacheSolidAngle').value + if cache: + if not mtd.doesExist(solid_angle): + SolidAngle(InputWorkspace=ws, OutputWorkspace=solid_angle, + Method=self._get_solid_angle_method(self._instrument)) + else: + SolidAngle(InputWorkspace=ws, OutputWorkspace=solid_angle) + Divide(LHSWorkspace=ws, RHSWorkspace=solid_angle, OutputWorkspace=ws, WarnOnZeroDivide=False) + if not cache: + DeleteWorkspace(solid_angle) progress.report() if process in ['Reference', 'Sample']: container_ws = self.getProperty('ContainerInputWorkspace').value if container_ws: self._apply_container(ws, container_ws) - mask_ws = self.getProperty('MaskedInputWorkspace').value - if mask_ws: - self._apply_mask(ws, mask_ws) + self._apply_masks(ws) thickness = self.getProperty('SampleThickness').value NormaliseByThickness(InputWorkspace=ws, OutputWorkspace=ws, SampleThickness=thickness) # parallax (gondola) effect @@ -501,14 +552,7 @@ class SANSILLReduction(PythonAlgorithm): elif process == 'Sample': self._process_sample(ws) progress.report() - if process != 'Transmission': - if self._instrument == 'D33': - CalculateDynamicRange(Workspace=ws, ComponentNames=['back_detector', 'front_detector']) - else: - CalculateDynamicRange(Workspace=ws) - mtd[ws].getRun().addProperty('ProcessedAs', process, True) - RenameWorkspace(InputWorkspace=ws, OutputWorkspace=ws[2:]) - self.setProperty('OutputWorkspace', mtd[ws[2:]]) + self._finalize(ws, process) # Register algorithm with Mantid AlgorithmFactory.subscribe(SANSILLReduction) diff --git a/Framework/PythonInterface/test/python/plugins/algorithms/WorkflowAlgorithms/SANSILLReductionTest.py b/Framework/PythonInterface/test/python/plugins/algorithms/WorkflowAlgorithms/SANSILLReductionTest.py index a27ce13af21656b4897a746007b87d47d38e94dc..e780119ca950e82d66cb82d824a69707f6a5fe93 100644 --- a/Framework/PythonInterface/test/python/plugins/algorithms/WorkflowAlgorithms/SANSILLReductionTest.py +++ b/Framework/PythonInterface/test/python/plugins/algorithms/WorkflowAlgorithms/SANSILLReductionTest.py @@ -36,17 +36,17 @@ class SANSILLReductionTest(unittest.TestCase): def test_absorber(self): SANSILLReduction(Run='010462', ProcessAs='Absorber', OutputWorkspace='Cd') - self._check_output(mtd['Cd'], True, 1, 128*128) + self._check_output(mtd['Cd'], True, 1, 128*128+2) self._check_process_flag(mtd['Cd'], 'Absorber') def test_beam(self): SANSILLReduction(Run='010414', ProcessAs='Beam', OutputWorkspace='Db', FluxOutputWorkspace='Fl') - self._check_output(mtd['Db'], True, 1, 128*128) + self._check_output(mtd['Db'], True, 1, 128*128+2) self._check_process_flag(mtd['Db'], 'Beam') run = mtd['Db'].getRun() - self.assertAlmostEqual(run.getLogData('BeamCenterX').value, -0.0048, delta=1e-4) + self.assertAlmostEqual(run.getLogData('BeamCenterX').value, 0.0048, delta=1e-4) self.assertAlmostEqual(run.getLogData('BeamCenterY').value, -0.0027, delta=1e-4) - self._check_output(mtd['Fl'], False, 1, 128*128) + self._check_output(mtd['Fl'], False, 1, 128*128+2) self._check_process_flag(mtd['Fl'], 'Beam') self.assertAlmostEqual(mtd['Fl'].readY(0)[0], 6628249, delta=1) self.assertAlmostEqual(mtd['Fl'].readE(0)[0], 8566, delta=1) @@ -54,62 +54,62 @@ class SANSILLReductionTest(unittest.TestCase): def test_transmission(self): SANSILLReduction(Run='010414', ProcessAs='Beam', OutputWorkspace='Db') SANSILLReduction(Run='010585', ProcessAs='Transmission', BeamInputWorkspace='Db', OutputWorkspace='Tr') - self.assertAlmostEqual(mtd['Tr'].readY(0)[0], 0.640, delta=1e-3) + self.assertAlmostEqual(mtd['Tr'].readY(0)[0], 0.642, delta=1e-3) self.assertAlmostEqual(mtd['Tr'].readE(0)[0], 0.0019, delta=1e-4) self._check_process_flag(mtd['Tr'], 'Transmission') def test_container(self): SANSILLReduction(Run='010460', ProcessAs='Container', OutputWorkspace='can') - self._check_output(mtd['can'], True, 1, 128*128) + self._check_output(mtd['can'], True, 1, 128*128+2) self._check_process_flag(mtd['can'], 'Container') def test_reference(self): SANSILLReduction(Run='010453', ProcessAs='Reference', SensitivityOutputWorkspace='sens', OutputWorkspace='water') - self._check_output(mtd['water'], True, 1, 128*128) - self._check_output(mtd['sens'], False, 1, 128*128) + self._check_output(mtd['water'], True, 1, 128*128+2) + self._check_output(mtd['sens'], False, 1, 128*128+2) self._check_process_flag(mtd['water'], 'Reference') self._check_process_flag(mtd['sens'], 'Sensitivity') def test_sample(self): SANSILLReduction(Run='010569', ProcessAs='Sample', OutputWorkspace='sample') - self._check_output(mtd['sample'], True, 1, 128*128) + self._check_output(mtd['sample'], True, 1, 128*128+2) self._check_process_flag(mtd['sample'], 'Sample') def test_absorber_tof(self): # D33 VTOF # actually this is a container run, not an absorber, but is fine for this test SANSILLReduction(Run='093409', ProcessAs='Absorber', OutputWorkspace='absorber') - self._check_output(mtd['absorber'], True, 30, 256*256) + self._check_output(mtd['absorber'], True, 30, 256*256+2) self._check_process_flag(mtd['absorber'], 'Absorber') def test_beam_tof(self): # D33 VTOF SANSILLReduction(Run='093406', ProcessAs='Beam', OutputWorkspace='beam', FluxOutputWorkspace='flux') - self._check_output(mtd['beam'], True, 30, 256*256) + self._check_output(mtd['beam'], True, 30, 256*256+2) self._check_process_flag(mtd['beam'], 'Beam') run = mtd['beam'].getRun() self.assertAlmostEqual(run.getLogData('BeamCenterX').value, -0.0025, delta=1e-4) self.assertAlmostEqual(run.getLogData('BeamCenterY').value, 0.0009, delta=1e-4) - self._check_output(mtd['flux'], False, 30, 256*256) + self._check_output(mtd['flux'], False, 30, 256*256+2) self._check_process_flag(mtd['flux'], 'Beam') def test_transmission_tof(self): # D33 VTOF SANSILLReduction(Run='093406', ProcessAs='Beam', OutputWorkspace='beam') SANSILLReduction(Run='093407', ProcessAs='Transmission', BeamInputWorkspace='beam', OutputWorkspace='ctr') - self._check_output(mtd['ctr'], False, 75, 1) + self._check_output(mtd['ctr'], False, 97, 1) def test_reference_tof(self): # D33 VTOF # this is actually a sample run, not water, but is fine for this test SANSILLReduction(Run='093410', ProcessAs='Reference', OutputWorkspace='ref') - self._check_output(mtd['ref'], True, 30, 256*256) + self._check_output(mtd['ref'], True, 30, 256*256+2) self._check_process_flag(mtd['ref'], 'Reference') def test_sample_tof(self): # D33 VTOF, Pluronic F127 SANSILLReduction(Run='093410', ProcessAs='Sample', OutputWorkspace='sample') - self._check_output(mtd['sample'], True, 30, 256*256) + self._check_output(mtd['sample'], True, 30, 256*256+2) self._check_process_flag(mtd['sample'], 'Sample') def _check_process_flag(self, ws, value): diff --git a/Testing/Data/DocTest/ILL/D11/002866.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002866.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..36728eeb8138e38a3e499f126e13f0cccce68574 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002866.nxs.md5 @@ -0,0 +1 @@ +ea0980e2c34784d06f23506358d48162 diff --git a/Testing/Data/DocTest/ILL/D11/002867.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002867.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..ec41a57079c9634955eef73b442c6d183eb41713 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002867.nxs.md5 @@ -0,0 +1 @@ +70372eb2b5dd013159b4d236a3fe96f9 diff --git a/Testing/Data/DocTest/ILL/D11/002868.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002868.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..3bdcc9a30eb1ea8842c4e2200c735fadc033769d --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002868.nxs.md5 @@ -0,0 +1 @@ +0c6f6b328d6c24219ffc312b98e52595 diff --git a/Testing/Data/DocTest/ILL/D11/002869.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002869.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..dd350d2ea7d355ed8ccf1f78956344549b948ef5 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002869.nxs.md5 @@ -0,0 +1 @@ +8c988d99461a7f36de37dfe2d6b5973c diff --git a/Testing/Data/DocTest/ILL/D11/002870.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002870.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..23c0142df9002895e316c47ae2199dace6dee29f --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002870.nxs.md5 @@ -0,0 +1 @@ +81b06aae8be76a1d76c943456e78e989 diff --git a/Testing/Data/DocTest/ILL/D11/002871.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002871.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..34e4cac3aac7d7414d17cb5a55f5a28e6e460f64 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002871.nxs.md5 @@ -0,0 +1 @@ +4816c2d31b75a552d903885e01498385 diff --git a/Testing/Data/DocTest/ILL/D11/002878.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002878.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..9f3bbcfed330b023495229c58dc236c1041e073c --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002878.nxs.md5 @@ -0,0 +1 @@ +57be2fd2dd38dc99a0e5f64d4d0519e3 diff --git a/Testing/Data/DocTest/ILL/D11/002879.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002879.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..04c26db748a83e1536d544ed0a8711bb09f69319 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002879.nxs.md5 @@ -0,0 +1 @@ +ee48c20d4ae3129ef42a8d8fd305a43c diff --git a/Testing/Data/DocTest/ILL/D11/002880.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002880.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..fccd296bdee6a3b1fe08407d180bd18f4f2a44c8 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002880.nxs.md5 @@ -0,0 +1 @@ +d9df0abe4211e0ab2d6a663bc4110089 diff --git a/Testing/Data/DocTest/ILL/D11/002881.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002881.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..ddc3bebf2854957a894e905e8211e5bcea31705f --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002881.nxs.md5 @@ -0,0 +1 @@ +6fc09449a006f6fbf9b844077bd24e35 diff --git a/Testing/Data/DocTest/ILL/D11/002883.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002883.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..d07bd34c48682332939e1f74238ea4f776a0eba5 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002883.nxs.md5 @@ -0,0 +1 @@ +96da95f0de38b148f032f68c0336ef62 diff --git a/Testing/Data/DocTest/ILL/D11/002884.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002884.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..f6acc0b48706c1a94a819564de479b8dd55360f4 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002884.nxs.md5 @@ -0,0 +1 @@ +4bac48284459100fb122328f240ca84f diff --git a/Testing/Data/DocTest/ILL/D11/002885.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002885.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..42f7d7582e4b6bdce9d90c17ec69475b76a06b26 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002885.nxs.md5 @@ -0,0 +1 @@ +06dbd4beede52c8504bc8b95eb7f0dca diff --git a/Testing/Data/DocTest/ILL/D11/002887.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002887.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..0ae40d1692162ad0297b6c920efd44fa908111fd --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002887.nxs.md5 @@ -0,0 +1 @@ +4c0820b0e1f2b1de761d0b2f914cfa98 diff --git a/Testing/Data/DocTest/ILL/D11/002888.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002888.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..5d34e6f5a2321bd649cc43ec14a49bf6cf568e3e --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002888.nxs.md5 @@ -0,0 +1 @@ +0b19befd46943b9d68b29f9681c360ad diff --git a/Testing/Data/DocTest/ILL/D11/002889.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002889.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..98799d8d13a4e85248872b7681cda04a265f4bb1 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002889.nxs.md5 @@ -0,0 +1 @@ +c7100ee0208167bc7c10e4d9ab015d36 diff --git a/Testing/Data/DocTest/ILL/D11/002949.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002949.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..236cf416f94bc34b8d194361bd7ac7f08c93fc72 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002949.nxs.md5 @@ -0,0 +1 @@ +9689ff35560d3277fcc87386bd37b760 diff --git a/Testing/Data/DocTest/ILL/D11/002954.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002954.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..d0c0cb011dda635134e81748515394749f94dea9 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002954.nxs.md5 @@ -0,0 +1 @@ +9f14dcd99b0c5c7ae4b7effc6f2b3a2f diff --git a/Testing/Data/DocTest/ILL/D11/002960.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002960.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..4185b53d09aa7e4f511e65768a89a3bd1168fe59 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002960.nxs.md5 @@ -0,0 +1 @@ +149c701e402554f666ef1b243e0cd7e2 diff --git a/Testing/Data/DocTest/ILL/D11/002971.nxs.md5 b/Testing/Data/DocTest/ILL/D11/002971.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..de7230e199d23b2878ee675869abda9420405bb9 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/002971.nxs.md5 @@ -0,0 +1 @@ +b8a1fecf78285426989303488d4d1bb8 diff --git a/Testing/Data/DocTest/ILL/D11/003167.nxs.md5 b/Testing/Data/DocTest/ILL/D11/003167.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..4e9fd11faa58b20f6725c9cedb6c2d97a60fc40e --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/003167.nxs.md5 @@ -0,0 +1 @@ +9bb3a7d7630cf015431fa2d7ecbdba08 diff --git a/Testing/Data/DocTest/ILL/D11/003172.nxs.md5 b/Testing/Data/DocTest/ILL/D11/003172.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..b0f0302d5f580839e860d7f6a86f60e841792943 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/003172.nxs.md5 @@ -0,0 +1 @@ +06f3e3fd8394a682aeb8b1be51c998cb diff --git a/Testing/Data/DocTest/ILL/D11/003177.nxs.md5 b/Testing/Data/DocTest/ILL/D11/003177.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..77d0ff6339f989797485709a08e0b1600488abac --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/003177.nxs.md5 @@ -0,0 +1 @@ +979dcc91a0a0cf543e0ea7ee9ddea52d diff --git a/Testing/Data/DocTest/ILL/D11/003187.nxs.md5 b/Testing/Data/DocTest/ILL/D11/003187.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..6c787b0e71d32419d47251130dc408e83ee78cb1 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/003187.nxs.md5 @@ -0,0 +1 @@ +839daf35d5f82e7131d296d8d4d71cc9 diff --git a/Testing/Data/DocTest/ILL/D11/mask1.nxs.md5 b/Testing/Data/DocTest/ILL/D11/mask1.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..d5173eaf008d3431b22418b67bee1312e0bc0afa --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/mask1.nxs.md5 @@ -0,0 +1 @@ +0df395d5e81fd49e470342a1e8dd18c1 diff --git a/Testing/Data/DocTest/ILL/D11/mask2.nxs.md5 b/Testing/Data/DocTest/ILL/D11/mask2.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..9f79a5c4a214fbc5b95bd7b726724214870ab389 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/mask2.nxs.md5 @@ -0,0 +1 @@ +66c16fe62d3a1282956c5c438f28d557 diff --git a/Testing/Data/DocTest/ILL/D11/mask3.nxs.md5 b/Testing/Data/DocTest/ILL/D11/mask3.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..6a5a533f76f793e15480a2274581ff5b8c32a56f --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/mask3.nxs.md5 @@ -0,0 +1 @@ +b3f5134ace660b3ff88361927fd08480 diff --git a/Testing/Data/DocTest/ILL/D11/sens-lamp.nxs.md5 b/Testing/Data/DocTest/ILL/D11/sens-lamp.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..fc0d40ef75aadaee5072272875b8658900db0296 --- /dev/null +++ b/Testing/Data/DocTest/ILL/D11/sens-lamp.nxs.md5 @@ -0,0 +1 @@ +e830eedaa1fbfb93dd90579d0f98dd1e diff --git a/Testing/Data/SystemTest/ILL/D11/002866.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002866.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..36728eeb8138e38a3e499f126e13f0cccce68574 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002866.nxs.md5 @@ -0,0 +1 @@ +ea0980e2c34784d06f23506358d48162 diff --git a/Testing/Data/SystemTest/ILL/D11/002867.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002867.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..ec41a57079c9634955eef73b442c6d183eb41713 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002867.nxs.md5 @@ -0,0 +1 @@ +70372eb2b5dd013159b4d236a3fe96f9 diff --git a/Testing/Data/SystemTest/ILL/D11/002868.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002868.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..3bdcc9a30eb1ea8842c4e2200c735fadc033769d --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002868.nxs.md5 @@ -0,0 +1 @@ +0c6f6b328d6c24219ffc312b98e52595 diff --git a/Testing/Data/SystemTest/ILL/D11/002869.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002869.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..dd350d2ea7d355ed8ccf1f78956344549b948ef5 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002869.nxs.md5 @@ -0,0 +1 @@ +8c988d99461a7f36de37dfe2d6b5973c diff --git a/Testing/Data/SystemTest/ILL/D11/002870.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002870.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..23c0142df9002895e316c47ae2199dace6dee29f --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002870.nxs.md5 @@ -0,0 +1 @@ +81b06aae8be76a1d76c943456e78e989 diff --git a/Testing/Data/SystemTest/ILL/D11/002871.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002871.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..34e4cac3aac7d7414d17cb5a55f5a28e6e460f64 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002871.nxs.md5 @@ -0,0 +1 @@ +4816c2d31b75a552d903885e01498385 diff --git a/Testing/Data/SystemTest/ILL/D11/002878.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002878.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..9f3bbcfed330b023495229c58dc236c1041e073c --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002878.nxs.md5 @@ -0,0 +1 @@ +57be2fd2dd38dc99a0e5f64d4d0519e3 diff --git a/Testing/Data/SystemTest/ILL/D11/002879.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002879.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..04c26db748a83e1536d544ed0a8711bb09f69319 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002879.nxs.md5 @@ -0,0 +1 @@ +ee48c20d4ae3129ef42a8d8fd305a43c diff --git a/Testing/Data/SystemTest/ILL/D11/002880.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002880.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..fccd296bdee6a3b1fe08407d180bd18f4f2a44c8 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002880.nxs.md5 @@ -0,0 +1 @@ +d9df0abe4211e0ab2d6a663bc4110089 diff --git a/Testing/Data/SystemTest/ILL/D11/002881.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002881.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..ddc3bebf2854957a894e905e8211e5bcea31705f --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002881.nxs.md5 @@ -0,0 +1 @@ +6fc09449a006f6fbf9b844077bd24e35 diff --git a/Testing/Data/SystemTest/ILL/D11/002883.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002883.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..d07bd34c48682332939e1f74238ea4f776a0eba5 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002883.nxs.md5 @@ -0,0 +1 @@ +96da95f0de38b148f032f68c0336ef62 diff --git a/Testing/Data/SystemTest/ILL/D11/002884.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002884.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..f6acc0b48706c1a94a819564de479b8dd55360f4 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002884.nxs.md5 @@ -0,0 +1 @@ +4bac48284459100fb122328f240ca84f diff --git a/Testing/Data/SystemTest/ILL/D11/002885.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002885.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..42f7d7582e4b6bdce9d90c17ec69475b76a06b26 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002885.nxs.md5 @@ -0,0 +1 @@ +06dbd4beede52c8504bc8b95eb7f0dca diff --git a/Testing/Data/SystemTest/ILL/D11/002887.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002887.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..0ae40d1692162ad0297b6c920efd44fa908111fd --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002887.nxs.md5 @@ -0,0 +1 @@ +4c0820b0e1f2b1de761d0b2f914cfa98 diff --git a/Testing/Data/SystemTest/ILL/D11/002888.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002888.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..5d34e6f5a2321bd649cc43ec14a49bf6cf568e3e --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002888.nxs.md5 @@ -0,0 +1 @@ +0b19befd46943b9d68b29f9681c360ad diff --git a/Testing/Data/SystemTest/ILL/D11/002889.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002889.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..98799d8d13a4e85248872b7681cda04a265f4bb1 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002889.nxs.md5 @@ -0,0 +1 @@ +c7100ee0208167bc7c10e4d9ab015d36 diff --git a/Testing/Data/SystemTest/ILL/D11/002949.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002949.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..236cf416f94bc34b8d194361bd7ac7f08c93fc72 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002949.nxs.md5 @@ -0,0 +1 @@ +9689ff35560d3277fcc87386bd37b760 diff --git a/Testing/Data/SystemTest/ILL/D11/002954.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002954.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..d0c0cb011dda635134e81748515394749f94dea9 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002954.nxs.md5 @@ -0,0 +1 @@ +9f14dcd99b0c5c7ae4b7effc6f2b3a2f diff --git a/Testing/Data/SystemTest/ILL/D11/002960.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002960.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..4185b53d09aa7e4f511e65768a89a3bd1168fe59 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002960.nxs.md5 @@ -0,0 +1 @@ +149c701e402554f666ef1b243e0cd7e2 diff --git a/Testing/Data/SystemTest/ILL/D11/002971.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/002971.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..de7230e199d23b2878ee675869abda9420405bb9 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/002971.nxs.md5 @@ -0,0 +1 @@ +b8a1fecf78285426989303488d4d1bb8 diff --git a/Testing/Data/SystemTest/ILL/D11/003167.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/003167.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..4e9fd11faa58b20f6725c9cedb6c2d97a60fc40e --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/003167.nxs.md5 @@ -0,0 +1 @@ +9bb3a7d7630cf015431fa2d7ecbdba08 diff --git a/Testing/Data/SystemTest/ILL/D11/003172.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/003172.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..b0f0302d5f580839e860d7f6a86f60e841792943 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/003172.nxs.md5 @@ -0,0 +1 @@ +06f3e3fd8394a682aeb8b1be51c998cb diff --git a/Testing/Data/SystemTest/ILL/D11/003177.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/003177.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..77d0ff6339f989797485709a08e0b1600488abac --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/003177.nxs.md5 @@ -0,0 +1 @@ +979dcc91a0a0cf543e0ea7ee9ddea52d diff --git a/Testing/Data/SystemTest/ILL/D11/003187.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/003187.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..6c787b0e71d32419d47251130dc408e83ee78cb1 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/003187.nxs.md5 @@ -0,0 +1 @@ +839daf35d5f82e7131d296d8d4d71cc9 diff --git a/Testing/Data/SystemTest/ILL/D11/mask1.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/mask1.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..d5173eaf008d3431b22418b67bee1312e0bc0afa --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/mask1.nxs.md5 @@ -0,0 +1 @@ +0df395d5e81fd49e470342a1e8dd18c1 diff --git a/Testing/Data/SystemTest/ILL/D11/mask2.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/mask2.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..9f79a5c4a214fbc5b95bd7b726724214870ab389 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/mask2.nxs.md5 @@ -0,0 +1 @@ +66c16fe62d3a1282956c5c438f28d557 diff --git a/Testing/Data/SystemTest/ILL/D11/mask3.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/mask3.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..6a5a533f76f793e15480a2274581ff5b8c32a56f --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/mask3.nxs.md5 @@ -0,0 +1 @@ +b3f5134ace660b3ff88361927fd08480 diff --git a/Testing/Data/SystemTest/ILL/D11/sens-lamp.nxs.md5 b/Testing/Data/SystemTest/ILL/D11/sens-lamp.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..fc0d40ef75aadaee5072272875b8658900db0296 --- /dev/null +++ b/Testing/Data/SystemTest/ILL/D11/sens-lamp.nxs.md5 @@ -0,0 +1 @@ +e830eedaa1fbfb93dd90579d0f98dd1e diff --git a/Testing/SystemTests/tests/analysis/SANSILLAutoProcessTest.py b/Testing/SystemTests/tests/analysis/SANSILLAutoProcessTest.py new file mode 100644 index 0000000000000000000000000000000000000000..712b336efd46c9bcf90bcbb510ee79ecb6ed9a37 --- /dev/null +++ b/Testing/SystemTests/tests/analysis/SANSILLAutoProcessTest.py @@ -0,0 +1,60 @@ +# Mantid Repository : https://github.com/mantidproject/mantid +# +# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, +# NScD Oak Ridge National Laboratory, European Spallation Source +# & Institut Laue - Langevin +# SPDX - License - Identifier: GPL - 3.0 + +from __future__ import (absolute_import, division, print_function) + +import systemtesting +from mantid.simpleapi import SANSILLAutoProcess, config, mtd, GroupWorkspaces + + +class D11_AutoProcess_Test(systemtesting.MantidSystemTest): + + def __init__(self): + super(D11_AutoProcess_Test, self).__init__() + self.setUp() + + def setUp(self): + config['default.facility'] = 'ILL' + config['default.instrument'] = 'D11' + config['logging.loggers.root.level'] = 'Warning' + config.appendDataSearchSubDir('ILL/D11/') + + def tearDown(self): + mtd.clear() + + def validate(self): + self.tolerance = 1e-3 + self.tolerance_is_rel_err = True + return ['out', 'D11_AutoProcess_Reference.nxs'] + + def runTest(self): + + beams = '2866,2867+2868,2878' + containers = '2888+2971,2884+2960,2880+2949' + container_tr = '2870+2954' + beam_tr = '2867+2868' + samples = ['2889,2885,2881', + '2887,2883,2879', + '3187,3177,3167'] + sample_tr = ['2871', '2869', '3172'] + thick = [0.1, 0.2, 0.2] + + # reduce samples + for i in range(len(samples)): + SANSILLAutoProcess( + SampleRuns=samples[i], + BeamRuns=beams, + ContainerRuns=containers, + MaskFiles='mask1.nxs,mask2.nxs,mask3.nxs', + SensitivityMaps='sens-lamp.nxs', + SampleTransmissionRuns=sample_tr[i], + ContainerTransmissionRuns=container_tr, + TransmissionBeamRuns=beam_tr, + SampleThickness=thick[i], + OutputWorkspace='iq_s' + str(i + 1) + ) + + GroupWorkspaces(InputWorkspaces=['iq_s1', 'iq_s2', 'iq_s3'], OutputWorkspace='out') diff --git a/Testing/SystemTests/tests/analysis/reference/D11_AutoProcess_Reference.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/D11_AutoProcess_Reference.nxs.md5 new file mode 100644 index 0000000000000000000000000000000000000000..94fafb8890760da8d5717bbd3706a551c797c5a5 --- /dev/null +++ b/Testing/SystemTests/tests/analysis/reference/D11_AutoProcess_Reference.nxs.md5 @@ -0,0 +1 @@ +ccb02399a764204a59f770319e0659b9 diff --git a/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D11_IQ.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D11_IQ.nxs.md5 index 0a81887138a9c9312ed7badbd747c469c815b50c..9a3ec18ef1eeb1504e22cdb0569e489d3922ceb2 100644 --- a/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D11_IQ.nxs.md5 +++ b/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D11_IQ.nxs.md5 @@ -1 +1 @@ -8f0d48c0b8c47e8f30b57db49839ed25 +43028d0558d7a557013eb1e3045ab39b diff --git a/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D22_IQ.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D22_IQ.nxs.md5 index b884a082db4930729f8e83b6a10039edbfe480cd..92016d08b04ec268cf8e46bc3cab8416880ede7e 100644 --- a/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D22_IQ.nxs.md5 +++ b/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D22_IQ.nxs.md5 @@ -1 +1 @@ -4bef18303917b5f1eeadeea9c4ad7769 +22b6add1080501cc99d689031ee43f41 diff --git a/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D33_IQ.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D33_IQ.nxs.md5 index ffa8a018ad3a22e854e2806d0750ba1a6767963f..7339a581de67da6e601c4dc074153deda011975e 100644 --- a/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D33_IQ.nxs.md5 +++ b/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D33_IQ.nxs.md5 @@ -1 +1 @@ -9036b5a4bfc971f214f6e9f2bfbcf28d +b295d56a6a50850780571e013de71363 diff --git a/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D33_LTOF_IQ.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D33_LTOF_IQ.nxs.md5 index fa8ef5d53cca356f77fcedec380003bfd3cb26f3..2522e7d4d2399e9c34c1d3b02b5e28b8f88723a8 100644 --- a/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D33_LTOF_IQ.nxs.md5 +++ b/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D33_LTOF_IQ.nxs.md5 @@ -1 +1 @@ -32b3e360ed4f51761dd9a23c9f71ea9e +c5806ff289823dbf00599957cd1a6010 diff --git a/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D33_VTOF_IQ.nxs.md5 b/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D33_VTOF_IQ.nxs.md5 index ca2cbe32d4a12800da9be44fb6f8f03c01bb2566..dacef36e1d88d7cb11b53b0c6be96cd8ccce40f0 100644 --- a/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D33_VTOF_IQ.nxs.md5 +++ b/Testing/SystemTests/tests/analysis/reference/ILL_SANS_D33_VTOF_IQ.nxs.md5 @@ -1 +1 @@ -2cc812503f5c3b4f8cbb8c1f70101722 +2bd81479a7dc78e2872d562c1392fe03 diff --git a/docs/source/algorithms/SANSILLAutoProcess-v1.rst b/docs/source/algorithms/SANSILLAutoProcess-v1.rst new file mode 100644 index 0000000000000000000000000000000000000000..a2929d0e15b87e95c6b7735bdb67cb5714bf8236 --- /dev/null +++ b/docs/source/algorithms/SANSILLAutoProcess-v1.rst @@ -0,0 +1,92 @@ +.. algorithm:: + +.. summary:: + +.. relatedalgorithms:: + +.. properties:: + +Description +----------- + +This algorithms performs complete treatment of SANS data recorded with the ILL instruments D11, D22 and D33. +This high level algorithm steers the reduction and performs the full set of corrections for a given sample run; measured with one or more detector distances. +It has two operation modes: *ReduceSample* (default) and *ReduceWater* as follows: + +ReduceSample +------------ + +This mode is used to correct the sample measurement and convert it to Q-space, producing by default the azimuthal average curve :math:`I(Q)`. + +ReduceWater +----------- + +This mode should be used to process water reference measurement in order to derive the relative inter-pixel sensitivity map of the detector. +This mode will produce two outputs; the regular output will contain fully corrected water run, and there will be an additional output containing the sensitivity map itself. +The sensitivity map can be saved out to a file and used for sample reductions. + +Caching with ADS +---------------- + +This algorithm **does not** clean-up the intermediate workspaces after execution. This is done intentionally for performance reasons. +For example, once the transmission of a sample is calculated, it will be reused for further iterations of processing of the same sample at different detector distances. +As other example, once the container is processed at a certain distance, it will be reused for all the subsequent samples measured at the same distance, if the container run is the same. +The same caching is done for absorber, empty beam, container, sensitivity and mask workspaces. +The caching relies on Analysis Data Service (ADS) through naming convention by appending the relevant process name to the run number. +When multiple runs are summed, the run number of the first run is attributed to the summed workspace name. + +.. include:: ../usagedata-note.txt + +**Example - full treatment of 3 samples at 3 different distances** + +.. testsetup:: ExSANSILLAutoProcess + + config['default.facility'] = 'ILL' + config.appendDataSearchSubDir('ILL/D11/') + +.. testcode:: ExSANSILLAutoProcess + + beams = '2866,2867+2868,2878' + containers = '2888+2971,2884+2960,2880+2949' + container_tr = '2870+2954' + beam_tr = '2867+2868' + samples = ['2889,2885,2881', + '2887,2883,2879', + '3187,3177,3167'] + sample_tr = ['2871', '2869', '3172'] + thick = [0.1, 0.2, 0.2] + + # reduce samples + for i in range(len(samples)): + SANSILLAutoProcess( + SampleRuns=samples[i], + BeamRuns=beams, + ContainerRuns=containers, + MaskFiles='mask1.nxs,mask2.nxs,mask3.nxs', + SensitivityMaps='sens-lamp.nxs', + SampleTransmissionRuns=sample_tr[i], + ContainerTransmissionRuns=container_tr, + TransmissionBeamRuns=beam_tr, + SampleThickness=thick[i], + OutputWorkspace='iq_s' + str(i + 1) + ) + + print('Distance 1 Q-range:{0:4f}-{1:4f} AA'.format(mtd['iq_s1_1'].readX(0)[0], mtd['iq_s1_1'].readX(0)[-1])) + print('Distance 2 Q-range:{0:4f}-{1:4f} AA'.format(mtd['iq_s1_2'].readX(0)[0], mtd['iq_s1_2'].readX(0)[-1])) + print('Distance 3 Q-range:{0:4f}-{1:4f} AA'.format(mtd['iq_s1_3'].readX(0)[0], mtd['iq_s1_3'].readX(0)[-1])) + +Output: + +.. testoutput:: ExSANSILLAutoProcess + + Distance 1 Q-range:0.001386-0.020065 AA + Distance 2 Q-range:0.007000-0.091962 AA + Distance 3 Q-range:0.032726-0.343775 AA + +.. testcleanup:: ExSANSILLAutoProcess + + mtd.clear() + +.. categories:: + +.. sourcelink:: diff --git a/docs/source/algorithms/SANSILLReduction-v1.rst b/docs/source/algorithms/SANSILLReduction-v1.rst index 54bb6565bad1a9ed5d5c57d8af75c62de5959893..17b15429791435d3d45c662bcbd75ae728fd22cc 100644 --- a/docs/source/algorithms/SANSILLReduction-v1.rst +++ b/docs/source/algorithms/SANSILLReduction-v1.rst @@ -190,10 +190,10 @@ Output: .. testoutput:: ExSANSILLReduction - Water container transmission is 0.945 - Water transmission is 0.500 - Sample container transmission is 0.665 - Sample transmission is 0.640 + Water container transmission is 0.946 + Water transmission is 0.501 + Sample container transmission is 0.667 + Sample transmission is 0.642 .. testcleanup:: ExSANSILLReduction diff --git a/docs/source/release/v4.1.0/sans.rst b/docs/source/release/v4.1.0/sans.rst index 719875afbeafde5ebcee4de703671f0569fcbbe7..8c47a9ebb65e91aee2d4a239885e41a9d5baede6 100644 --- a/docs/source/release/v4.1.0/sans.rst +++ b/docs/source/release/v4.1.0/sans.rst @@ -57,6 +57,7 @@ New - New IDF for ``EQ-SANS`` - New algorithm :ref:`LoadHFIRSANS <algm-LoadHFIRSANS>` and speed improvements to :ref:`LoadSpice2D <algm-LoadSpice2D>` - New version of algorithm :ref:`CalculateEfficiency <algm-CalculateEfficiency-v2>` +- New algorithm :ref:`SANSILLAutoProcess <algm-SANSILLAutoProcess>` will perform the full SANS treatment for ILL instruments. Improved ######## diff --git a/instrument/D11_Definition.xml b/instrument/D11_Definition.xml index 417408aff6568d0c4e671831f1a58ef6d993cc0b..ec5d63164a67a8f23d18a613609fa9ec991da205 100644 --- a/instrument/D11_Definition.xml +++ b/instrument/D11_Definition.xml @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='ASCII'?> -<instrument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mantidproject.org/IDF/1.0" last-modified="2018-04-26 11:25:14.536260" name="D11" valid-from="2017-10-01 23:59:59" valid-to="2100-01-31 23:59:59" xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"> +<instrument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mantidproject.org/IDF/1.0" last-modified="2019-07-11 10:44:30.057138" name="D11" valid-from="2017-10-01 23:59:59" valid-to="2100-01-31 23:59:59" xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"> <!-- This is the instrument definition file of the D11 Lowest momentum transfer & lowest background small-angle neutron scattering instrument at the ILL. Generated file, PLEASE DO NOT EDIT THIS FILE! @@ -48,6 +48,7 @@ <pointing-up axis="y"/> <handedness val="right"/> </reference-frame> + <default-view axis-view="z-" view="3D"/> </defaults> <!--SOURCE--> <component type="moderator"> @@ -89,16 +90,15 @@ <component idfillbyfirst="y" idstart="0" idstepbyrow="256" type="detector"> <location x="0.0" y="0.0" z="1.2"/> </component> - <type is="rectangular_detector" name="detector" type="pixel" xpixels="256" xstart="-0.47812499999999997" xstep="0.00375" ypixels="256" ystart="-0.47812499999999997" ystep="0.00375"/> + <type is="rectangular_detector" name="detector" type="pixel" xpixels="256" xstart="0.47812499999999997" xstep="-0.00375" ypixels="256" ystart="-0.47812499999999997" ystep="0.00375"/> <!--PIXEL, EACH PIXEL IS A DETECTOR--> <type is="detector" name="pixel"> <cuboid id="pixel-shape"> - <left-front-bottom-point x="-0.001875" y="-0.001875" z="0.0"/> - <left-front-top-point x="0.001875" y="0.001875" z="0.0"/> - <left-back-bottom-point x="-0.001875" y="-0.001875" z="-0.0001"/> - <right-front-bottom-point x="0.001875" y="-0.001875" z="0.0"/> + <left-front-bottom-point x="-0.001875" y="-0.001875" z="5e-05"/> + <left-front-top-point x="-0.001875" y="0.001875" z="5e-05"/> + <left-back-bottom-point x="-0.001875" y="-0.001875" z="-5e-05"/> + <right-front-bottom-point x="0.001875" y="-0.001875" z="5e-05"/> </cuboid> <algebra val="pixel-shape"/> </type> </instrument> - diff --git a/instrument/D11_Parameters.xml b/instrument/D11_Parameters.xml index 216520412d3191dcfa2b877e8784aea7daa24e14..e170b34c96dd6012b77375ba85d5ce333b0056da 100644 --- a/instrument/D11_Parameters.xml +++ b/instrument/D11_Parameters.xml @@ -14,6 +14,13 @@ <parameter name="grouping" type="string"> <value val="0-65535"/> </parameter> + <!-- The pixel sizes used by SolidAngle --> + <parameter name="x-pixel-size" type="number"> + <value val="3.75"/> + </parameter> + <parameter name="y-pixel-size" type="number"> + <value val="3.75"/> + </parameter> </component-link> </parameter-file> diff --git a/instrument/D11lr_Definition.xml b/instrument/D11lr_Definition.xml index cfb10c0357fbc6852fe91776fb219cf0c08c2b20..6b676a866fb196a057bc4c02f2bf2e79b0a5a122 100644 --- a/instrument/D11lr_Definition.xml +++ b/instrument/D11lr_Definition.xml @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='ASCII'?> -<instrument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mantidproject.org/IDF/1.0" last-modified="2018-04-26 11:25:32.985566" name="D11lr" valid-from="2017-10-01 23:59:59" valid-to="2100-01-31 23:59:59" xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"> +<instrument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mantidproject.org/IDF/1.0" last-modified="2019-07-11 10:45:12.505447" name="D11lr" valid-from="2017-10-01 23:59:59" valid-to="2100-01-31 23:59:59" xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"> <!-- This is the instrument definition file of the D11 Lowest momentum transfer & lowest background small-angle neutron scattering instrument at the ILL. Generated file, PLEASE DO NOT EDIT THIS FILE! @@ -48,6 +48,7 @@ <pointing-up axis="y"/> <handedness val="right"/> </reference-frame> + <default-view axis-view="z-" view="3D"/> </defaults> <!--SOURCE--> <component type="moderator"> @@ -89,16 +90,15 @@ <component idfillbyfirst="y" idstart="0" idstepbyrow="128" type="detector"> <location x="0.0" y="0.0" z="1.2"/> </component> - <type is="rectangular_detector" name="detector" type="pixel" xpixels="128" xstart="-0.47625" xstep="0.0075" ypixels="128" ystart="-0.47625" ystep="0.0075"/> + <type is="rectangular_detector" name="detector" type="pixel" xpixels="128" xstart="0.47625" xstep="-0.0075" ypixels="128" ystart="-0.47625" ystep="0.0075"/> <!--PIXEL, EACH PIXEL IS A DETECTOR--> <type is="detector" name="pixel"> <cuboid id="pixel-shape"> - <left-front-bottom-point x="-0.00375" y="-0.00375" z="0.0"/> - <left-front-top-point x="0.00375" y="0.00375" z="0.0"/> - <left-back-bottom-point x="-0.00375" y="-0.00375" z="-0.0001"/> - <right-front-bottom-point x="0.00375" y="-0.00375" z="0.0"/> + <left-front-bottom-point x="-0.00375" y="-0.00375" z="5e-05"/> + <left-front-top-point x="-0.00375" y="0.00375" z="5e-05"/> + <left-back-bottom-point x="-0.00375" y="-0.00375" z="-5e-05"/> + <right-front-bottom-point x="0.00375" y="-0.00375" z="5e-05"/> </cuboid> <algebra val="pixel-shape"/> </type> </instrument> - diff --git a/instrument/D11lr_Parameters.xml b/instrument/D11lr_Parameters.xml index ef72c4458735850984cc65bbd28fc2d7fadd388b..02d096058046b661a658df964e5fdad1bda5725a 100644 --- a/instrument/D11lr_Parameters.xml +++ b/instrument/D11lr_Parameters.xml @@ -14,6 +14,13 @@ <parameter name="grouping" type="string"> <value val="0-16383"/> </parameter> + <!-- The pixel sizes used by SolidAngle --> + <parameter name="x-pixel-size" type="number"> + <value val="7.5"/> + </parameter> + <parameter name="y-pixel-size" type="number"> + <value val="7.5"/> + </parameter> </component-link> </parameter-file> diff --git a/instrument/D22_Definition.xml b/instrument/D22_Definition.xml index bfd1aa865f3b9cbdd66b1066f4ded9c908033e47..905ec4ea7ea8b7141c83724fba022e20f62d5043 100644 --- a/instrument/D22_Definition.xml +++ b/instrument/D22_Definition.xml @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='ASCII'?> -<instrument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mantidproject.org/IDF/1.0" last-modified="2018-04-26 11:23:20.975212" name="D22" valid-from="2017-10-01 23:59:59" valid-to="2100-01-31 23:59:59" xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"> +<instrument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mantidproject.org/IDF/1.0" last-modified="2019-07-11 10:49:44.830663" name="D22" valid-from="2017-10-01 23:59:59" valid-to="2100-01-31 23:59:59" xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"> <!-- This is the instrument definition file of the D22 Large dynamic range small-angle diffractometer at the ILL. Generated file, PLEASE DO NOT EDIT THIS FILE! @@ -43,6 +43,7 @@ <pointing-up axis="y"/> <handedness val="right"/> </reference-frame> + <default-view axis-view="z-" view="3D"/> </defaults> <!--SOURCE--> <component type="moderator"> @@ -88,12 +89,11 @@ <!--PIXEL, EACH PIXEL IS A DETECTOR--> <type is="detector" name="pixel"> <cuboid id="pixel-shape"> - <left-front-bottom-point x="-0.004" y="-0.002" z="0.0"/> - <left-front-top-point x="0.004" y="0.002" z="0.0"/> - <left-back-bottom-point x="-0.004" y="-0.002" z="-0.0001"/> - <right-front-bottom-point x="0.004" y="-0.002" z="0.0"/> + <left-front-bottom-point x="-0.004" y="-0.002" z="5e-05"/> + <left-front-top-point x="-0.004" y="0.002" z="5e-05"/> + <left-back-bottom-point x="-0.004" y="-0.002" z="-5e-05"/> + <right-front-bottom-point x="0.004" y="-0.002" z="5e-05"/> </cuboid> <algebra val="pixel-shape"/> </type> </instrument> - diff --git a/instrument/D22lr_Definition.xml b/instrument/D22lr_Definition.xml index 4c7d901bc53a7404031411398b367141e90b2b14..efdc35a33180e6766a103435bd46b2e19d7a3bdb 100644 --- a/instrument/D22lr_Definition.xml +++ b/instrument/D22lr_Definition.xml @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='ASCII'?> -<instrument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mantidproject.org/IDF/1.0" last-modified="2018-04-26 11:23:43.832671" name="D22lr" valid-from="2017-10-01 23:59:59" valid-to="2100-01-31 23:59:59" xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"> +<instrument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mantidproject.org/IDF/1.0" last-modified="2019-07-11 10:49:33.026308" name="D22lr" valid-from="2017-10-01 23:59:59" valid-to="2100-01-31 23:59:59" xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"> <!-- This is the instrument definition file of the D22 Large dynamic range small-angle diffractometer at the ILL. Generated file, PLEASE DO NOT EDIT THIS FILE! @@ -43,6 +43,7 @@ <pointing-up axis="y"/> <handedness val="right"/> </reference-frame> + <default-view axis-view="z-" view="3D"/> </defaults> <!--SOURCE--> <component type="moderator"> @@ -88,12 +89,11 @@ <!--PIXEL, EACH PIXEL IS A DETECTOR--> <type is="detector" name="pixel"> <cuboid id="pixel-shape"> - <left-front-bottom-point x="-0.004" y="-0.004" z="0.0"/> - <left-front-top-point x="0.004" y="0.004" z="0.0"/> - <left-back-bottom-point x="-0.004" y="-0.004" z="-0.0001"/> - <right-front-bottom-point x="0.004" y="-0.004" z="0.0"/> + <left-front-bottom-point x="-0.004" y="-0.004" z="5e-05"/> + <left-front-top-point x="-0.004" y="0.004" z="5e-05"/> + <left-back-bottom-point x="-0.004" y="-0.004" z="-5e-05"/> + <right-front-bottom-point x="0.004" y="-0.004" z="5e-05"/> </cuboid> <algebra val="pixel-shape"/> </type> </instrument> - diff --git a/instrument/D33_Definition.xml b/instrument/D33_Definition.xml index 2ec53db882636da0e3351ca2de56a45f70fdd68e..7a3dd9043c312e4aed9f8235ce6e2fd061c9bb50 100644 --- a/instrument/D33_Definition.xml +++ b/instrument/D33_Definition.xml @@ -1,5 +1,5 @@ <?xml version='1.0' encoding='ASCII'?> -<instrument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mantidproject.org/IDF/1.0" last-modified="2018-09-25 11:00:25.729603" name="D33" valid-from="2017-10-01 23:59:59" valid-to="2100-01-31 23:59:59" xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"> +<instrument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.mantidproject.org/IDF/1.0" last-modified="2019-07-11 10:50:50.653599" name="D33" valid-from="2017-10-01 23:59:59" valid-to="2100-01-31 23:59:59" xsi:schemaLocation="http://www.mantidproject.org/IDF/1.0 http://schema.mantidproject.org/IDF/1.0/IDFSchema.xsd"> <!-- This is the instrument definition file of the D33 Massive dynamic q-range small-angle diffractometer at the ILL. Generated file, PLEASE DO NOT EDIT THIS FILE! @@ -51,6 +51,7 @@ <pointing-up axis="y"/> <handedness val="right"/> </reference-frame> + <default-view axis-view="z-" view="3D"/> </defaults> <!--SOURCE--> <component type="moderator"> @@ -136,10 +137,10 @@ <!--PIXEL, EACH PIXEL IS A DETECTOR--> <type is="detector" name="pixel"> <cuboid id="pixel-shape"> - <left-front-bottom-point x="-0.00125" y="-0.0025" z="0.0"/> - <left-front-top-point x="0.00125" y="0.0025" z="0.0"/> - <left-back-bottom-point x="-0.00125" y="-0.0025" z="-0.0001"/> - <right-front-bottom-point x="0.00125" y="-0.0025" z="0.0"/> + <left-front-bottom-point x="-0.00125" y="-0.0025" z="5e-05"/> + <left-front-top-point x="-0.00125" y="0.0025" z="5e-05"/> + <left-back-bottom-point x="-0.00125" y="-0.0025" z="-5e-05"/> + <right-front-bottom-point x="0.00125" y="-0.0025" z="-5e-05"/> </cuboid> <algebra val="pixel-shape"/> </type>