def _waterCalibration(self, ws): """Divide ws by a (water) reference workspace.""" if self.getProperty(Prop.WATER_REFERENCE).isDefault: return ws waterWS = self.getProperty(Prop.WATER_REFERENCE).value detWSName = self._names.withSuffix('water_detectors') waterWS = ExtractMonitors(InputWorkspace=waterWS, DetectorWorkspace=detWSName, EnableLogging=self._subalgLogging) if mtd.doesExist(detWSName) is None: raise RuntimeError('No detectors in the water reference data.') if waterWS.getNumberHistograms() != ws.getNumberHistograms(): self.log().error( 'Water workspace and run do not have the same number of histograms.' ) rebinnedWaterWSName = self._names.withSuffix('water_rebinned') rebinnedWaterWS = RebinToWorkspace(WorkspaceToRebin=waterWS, WorkspaceToMatch=ws, OutputWorkspace=rebinnedWaterWSName, EnableLogging=self._subalgLogging) calibratedWSName = self._names.withSuffix('water_calibrated') calibratedWS = Divide(LHSWorkspace=ws, RHSWorkspace=rebinnedWaterWS, OutputWorkspace=calibratedWSName, EnableLogging=self._subalgLogging) self._cleanup.cleanup(waterWS) self._cleanup.cleanup(rebinnedWaterWS) self._cleanup.cleanup(ws) return calibratedWS
def _waterCalibration(self, ws): """Divide ws by a (water) reference workspace.""" if self.getProperty(Prop.WATER_REFERENCE).isDefault: return ws waterWS = self.getProperty(Prop.WATER_REFERENCE).value detWSName = self._names.withSuffix('water_detectors') waterWS = ExtractMonitors( InputWorkspace=waterWS, DetectorWorkspace=detWSName, EnableLogging=self._subalgLogging ) if mtd.doesExist(detWSName) is None: raise RuntimeError('No detectors in the water reference data.') if waterWS.getNumberHistograms() != ws.getNumberHistograms(): self.log().error('Water workspace and run do not have the same number of histograms.') rebinnedWaterWSName = self._names.withSuffix('water_rebinned') rebinnedWaterWS = RebinToWorkspace( WorkspaceToRebin=waterWS, WorkspaceToMatch=ws, OutputWorkspace=rebinnedWaterWSName, EnableLogging=self._subalgLogging ) calibratedWSName = self._names.withSuffix('water_calibrated') calibratedWS = Divide( LHSWorkspace=ws, RHSWorkspace=rebinnedWaterWS, OutputWorkspace=calibratedWSName, EnableLogging=self._subalgLogging ) self._cleanup.cleanup(waterWS) self._cleanup.cleanup(rebinnedWaterWS) self._cleanup.cleanup(ws) return calibratedWS
def _get_instrument_structure(ws): """Returns the number of detectors and the number of detectors per tube in the currently processed instrument.""" instrument = ws.getInstrument().getName() if instrument in ['IN4', 'IN6']: self.log.warning( "Grouping pattern cannot be provided for IN4 and IN6.") return "" tmp_inst = '{}_tmp'.format(instrument) LoadEmptyInstrument(InstrumentName=instrument, OutputWorkspace=tmp_inst) tmp_mon_inst = 'mon_{}'.format(tmp_inst) ExtractMonitors(InputWorkspace=tmp_inst, DetectorWorkspace=tmp_inst, MonitorWorkspace=tmp_mon_inst) n_monitors = mtd[tmp_mon_inst].getNumberHistograms() n_tubes = 0 for comp in mtd[tmp_inst].componentInfo(): if len(comp.detectorsInSubtree) > 1 and comp.hasParent: n_tubes += 1 n_tubes -= n_monitors if instrument == 'IN5': # there is an extra bank that contains all of the tubes n_tubes -= 1 n_pixels = mtd[tmp_inst].getNumberHistograms() n_pixels_per_tube = int(n_pixels / n_tubes) DeleteWorkspace(Workspace=tmp_inst) DeleteWorkspace(Workspace=tmp_mon_inst) return n_pixels, n_pixels_per_tube
def _separateMons(self, mainWS): """Extract monitors to a separate workspace.""" detWSName = self._names.withSuffix('extracted_detectors') monWSName = self._names.withSuffix('extracted_monitors') detWS, monWS = ExtractMonitors(InputWorkspace=mainWS, DetectorWorkspace=detWSName, MonitorWorkspace=monWSName, EnableLogging=self._subalgLogging) self._cleanup.cleanup(mainWS) return detWS, monWS
def _extractMonitors(self, ws): """Extract monitor spectra from ws to another workspace.""" detWSName = self._names.withSuffix('detectors') monWSName = self._names.withSuffix('monitors') ExtractMonitors(InputWorkspace=ws, DetectorWorkspace=detWSName, MonitorWorkspace=monWSName, EnableLogging=self._subalgLogging) if mtd.doesExist(detWSName) is None: raise RuntimeError('No detectors in the input data.') detWS = mtd[detWSName] monWS = mtd[monWSName] if mtd.doesExist(monWSName) else None self._cleanup.cleanup(ws) return detWS, monWS