本文整理汇总了Python中EnggUtils.convert_to_d_spacing方法的典型用法代码示例。如果您正苦于以下问题:Python EnggUtils.convert_to_d_spacing方法的具体用法?Python EnggUtils.convert_to_d_spacing怎么用?Python EnggUtils.convert_to_d_spacing使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类EnggUtils
的用法示例。
在下文中一共展示了EnggUtils.convert_to_d_spacing方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: PyExec
# 需要导入模块: import EnggUtils [as 别名]
# 或者: from EnggUtils import convert_to_d_spacing [as 别名]
def PyExec(self):
# Get the run workspace
input_ws = self.getProperty('InputWorkspace').value
# Get spectra indices either from bank or direct list of indices, checking for errors
bank = self.getProperty('Bank').value
spectra = self.getProperty(self.INDICES_PROP_NAME).value
indices = EnggUtils.get_ws_indices_from_input_properties(input_ws, bank, spectra)
detector_positions = self.getProperty("DetectorPositions").value
n_reports = 8
prog = Progress(self, start=0, end=1, nreports=n_reports)
# Leave only the data for the bank/spectra list requested
prog.report('Selecting spectra from input workspace')
input_ws = EnggUtils.crop_data(self, input_ws, indices)
prog.report('Masking some bins if requested')
self._mask_bins(input_ws, self.getProperty('MaskBinsXMins').value, self.getProperty('MaskBinsXMaxs').value)
prog.report('Applying vanadium corrections')
# Leave data for the same bank in the vanadium workspace too
vanadium_ws = self.getProperty('VanadiumWorkspace').value
van_integration_ws = self.getProperty('VanIntegrationWorkspace').value
van_curves_ws = self.getProperty('VanCurvesWorkspace').value
EnggUtils.apply_vanadium_corrections(parent=self, ws=input_ws, indices=indices, vanadium_ws=vanadium_ws,
van_integration_ws=van_integration_ws, van_curves_ws=van_curves_ws,
progress_range=(0.65, 0.8))
prog.report("Applying calibration if requested")
# Apply calibration
if detector_positions:
self._apply_calibration(input_ws, detector_positions)
# Convert to dSpacing
prog.report("Converting to d")
input_ws = EnggUtils.convert_to_d_spacing(self, input_ws)
prog.report('Summing spectra')
# Sum the values across spectra
input_ws = EnggUtils.sum_spectra(self, input_ws)
prog.report('Preparing output workspace')
# Convert back to time of flight
input_ws = EnggUtils.convert_to_TOF(self, input_ws)
prog.report('Normalizing input workspace if needed')
if self.getProperty('NormaliseByCurrent').value:
self._normalize_by_current(input_ws)
# OpenGenie displays distributions instead of pure counts (this is done implicitly when
# converting units), so I guess that's what users will expect
self._convert_to_distribution(input_ws)
if bank:
self._add_bank_number(input_ws, bank)
self.setProperty("OutputWorkspace", input_ws)
示例2: _divide_by_curves
# 需要导入模块: import EnggUtils [as 别名]
# 或者: from EnggUtils import convert_to_d_spacing [as 别名]
def _divide_by_curves(self, ws, curves):
"""
Expects a workspace in ToF units. All operations are done in-place (the workspace is
input/output). For every bank-curve pair, divides the corresponding spectra in the
workspace by the (simulated) fitted curve. The division is done in d-spacing (the
input workspace is converted to d-spacing inside this method, but results are converted
back to ToF before returning from this method). The curves workspace is expected in
d-spacing units (since it comes from fitting a sum of spectra for a bank or group of
detectors).
This method is capable of dealing with workspaces with range and bin size different from
the range and bin size of the curves. It will rebin the curves workspace to match the
input 'ws' workspace (using the algorithm RebinToWorkspace).
@param ws :: workspace with (sample) spectra to divide by curves fitted to Vanadium spectra
@param curves :: dictionary of fitting workspaces (in d-spacing), one per bank. The keys are
the bank identifier and the values are their fitting workspaces. The fitting workspaces are
expected as returned by the algorithm 'Fit': 3 spectra: original data, simulated data with fit,
difference between original and simulated data.
"""
# Note that this division could use the algorithm 'Divide'
# This is simple and more efficient than using divide workspace, which requires
# cropping separate workspaces, dividing them separately, then appending them
# with AppendSpectra, etc.
ws = EnggUtils.convert_to_d_spacing(self, ws)
for b in curves:
# process all the spectra (indices) in one bank
fitted_curve = curves[b]
idxs = EnggUtils.get_ws_indices_for_bank(ws, b)
if not idxs:
pass
# This RebinToWorkspace is required here: normal runs will have narrower range of X values,
# and possibly different bin size, as compared to (long) Vanadium runs. Same applies to short
# Ceria runs (for Calibrate -non-full) and even long Ceria runs (for Calibrate-Full).
rebinned_fit_curve = mantid.RebinToWorkspace(WorkspaceToRebin=fitted_curve, WorkspaceToMatch=ws,
StoreInADS=False)
for i in idxs:
# take values of the second spectrum of the workspace (fit simulation - fitted curve)
ws.setY(i, np.divide(ws.dataY(i), rebinned_fit_curve.readY(1)))
# finally, convert back to ToF
EnggUtils.convert_to_TOF(self, ws)
示例3: _fit_curves_per_bank
# 需要导入模块: import EnggUtils [as 别名]
# 或者: from EnggUtils import convert_to_d_spacing [as 别名]
def _fit_curves_per_bank(self, vanadium_ws, banks, spline_breaks, prog):
"""
Fits one curve to every bank (where for every bank the data fitted is the result of
summing up all the spectra of the bank). The fitting is done in d-spacing.
@param vanadium_ws :: Vanadium run workspace to fit, expected in TOF units as they are archived
@param banks :: list of banks to consider which is normally all the banks of the instrument
@param spline_breaks :: number of break points when fitting spline functions
@param prog :: progress reporter
@returns a workspace with fitting results for all banks (3 spectra per bank). The spectra
are in dSpacing units.
"""
curves = {}
for bank_number, bank in enumerate(banks):
prog.report("Fitting bank {} of {}".format(bank_number + 1, len(banks)))
indices = EnggUtils.get_ws_indices_for_bank(vanadium_ws, bank)
if not indices:
# no indices at all for this bank, not interested in it, don't add it to the dictionary
# (as when doing Calibrate (not-full)) which does CropData() the original workspace
continue
prog.report("Cropping")
ws_to_fit = EnggUtils.crop_data(self, vanadium_ws, indices)
prog.report("Converting to d-spacing")
ws_to_fit = EnggUtils.convert_to_d_spacing(self, ws_to_fit)
prog.report("Summing spectra")
ws_to_fit = EnggUtils.sum_spectra(self, ws_to_fit)
prog.report("Fitting bank {} to curve".format(bank_number))
fit_ws = self._fit_bank_curve(ws_to_fit, bank, spline_breaks, prog)
curves.update({bank: fit_ws})
curves_ws = self._prepare_curves_ws(curves)
return curves_ws