\(\renewcommand\AA{\unicode{x212B}}\)
MatchSpectra v1¶
Summary¶
Calculate factors to most closely match all spectra to reference spectrum
Properties¶
| Name | Direction | Type | Default | Description | 
|---|---|---|---|---|
| InputWorkspace | Input | Mandatory | Workspace to match the spectra between | |
| OutputWorkspace | Output | Mandatory | Workspace with the spectra matched | |
| ReferenceSpectrum | Input | long | 1 | Spectrum to match other spectra to | 
| CalculateOffset | Input | boolean | True | Calculate vertical shift | 
| CalculateScale | Input | boolean | True | Calculate scale factor | 
| Offset | Output | dbl list | Additive factor from matching | |
| Scale | Output | dbl list | Multiplicitive factor from matching | |
| ChiSq | Output | dbl list | Unweighted ChiSq between the spectrum and the reference. NaN means that the spectrum was not matched | 
Description¶
Calculate the factor(s) that best match the individual spectra to a reference spectrum using Gauss-Markov process. This is the same algorithm used by the “blend” step of PDFgetN. The data undergoes the linear transformation
such that the distance between \(y_{reference}\) and the transformed spectrum is minimized. Only the portions of the spectra where the spectra overlap with the same x-values and the uncertainties are greater than zero are considered.
Note
Gauss-Markov does not take into account varying uncertainties when
calculating the scale and offset.
Usage¶
import numpy as np
x = np.arange(100, dtype=float)
x = np.tile(x, 2)
y = np.arange(100, dtype=float)
y = np.tile(y, 2)
y[100:200] += 10
dy = np.zeros(y.size, dtype=float) + 1.
CreateWorkspace(OutputWorkspace='MatchSpectra_input',
                DataX=x,
                DataY=y,
                DataE=dy,
                NSpec=2)
_, offset, scale, chisq = MatchSpectra(InputWorkspace='MatchSpectra_input',
                                       OutputWorkspace='MatchSpectra_output',
                                       ReferenceSpectrum=2,
                                       CalculateOffset=True,
                                       CalculateScale=False)
for i in range(2):
    print('spectra {}: {:.1f} * y + {:.1f}, chisq={:.1f}'.format(i+1, scale[i], offset[i], chisq[i]))
Output:
spectra 1: 1.0 * y + 10.0, chisq=0.0
spectra 2: 1.0 * y + 0.0, chisq=0.0
Categories: AlgorithmIndex | Diffraction\Reduction
Source¶
Python: MatchSpectra.py