Dual Energy Decomposition
- xrayphysics.xrayPhysics.setDEDlookupTable(self, spectralResponse_L, spectralResponse_H, gammas, basisFunction_1, basisFunction_2, referenceEnergies=None, T_atten=0.0, N_atten=0)
Calculate a dual energy decomposition transfer function
This function calculates a look up table to perform dual energy decomposition. The decomposed data are virtual monochromatic attenuation values where the monochromatic energies are given by the referenceEnergies input argument. We describe how to get the basis coefficients instead of monochromatic attenuation values below.
This function solves the following
\[\begin{split}\begin{eqnarray*} \widehat{a}_L, \widehat{a}_H &:=& \text{argmin} \left[ p_L + \log\left( \int \widehat{s}_L(\gamma) e^{-b_L(\gamma)a_L - b_H(\gamma)a_H} \, d\gamma \right) \right]^2 \\ &+& \left[ p_H + \log\left( \int \widehat{s}_H(\gamma) e^{-b_L(\gamma)a_L - b_H(\gamma)a_H} \, d\gamma \right) \right]^2 \end{eqnarray*}\end{split}\]where \(p_L\) and \(p_H\) are the measured low and high energy attenuation data, \(\widehat{a}_L\) and \(\widehat{a}_H\) are the low and high virtual monochromatic attenuation data, \(s_L\) and \(s_H\) are the low and high energy spectra, and \(\gamma_L\) and \(\gamma_H\) are the low and high virtual energies (keV). The basis functions are given by
\[\begin{split}\begin{eqnarray*} \begin{bmatrix} b_L(\gamma) \\ b_H(\gamma) \end{bmatrix} &:=& \begin{bmatrix} b_1(\gamma_L) & b_1(\gamma_H) \\ b_2(\gamma_L) & b_2(\gamma_H) \end{bmatrix}^{-1} \begin{bmatrix} b_1(\gamma) \\ b_2(\gamma) \end{bmatrix} \end{eqnarray*}\end{split}\]where \(b_1\) and \(b_2\) are the given basis functions (e.g., compton/ photoelectric, LAC of two materials, PCA basis, etc.)
Note that the normalized spectra are defined by
\[\begin{split}\begin{eqnarray*} \widehat{s}_L(\gamma) &:=& \frac{s_L(\gamma)}{\int s_L(\gamma') \, d\gamma'} \\ \widehat{s}_H(\gamma) &:=& \frac{s_H(\gamma)}{\int s_H(\gamma') \, d\gamma'} \end{eqnarray*}\end{split}\]If one wishes to get the basis coefficients then just apply the following transformation
\[\begin{split}\begin{eqnarray*} \begin{bmatrix} a_1 \\ a_2 \end{bmatrix} &:=& \begin{bmatrix} b_1(\gamma_L) & b_2(\gamma_L) \\ b_1(\gamma_H) & b_2(\gamma_H) \end{bmatrix}^{-1} \begin{bmatrix} a_L \\ a_H \end{bmatrix} \end{eqnarray*}\end{split}\]A full description of this algorithm is provided in the following reference:
Champley, Kyle M., Stephen G. Azevedo, Isaac M. Seetho, Steven M. Glenn, Larry D. McMichael, Jerel A. Smith, Jeffrey S. Kallman, William D. Brown, and Harry E. Martz. “Method to extract system-independent material properties from dual-energy X-ray CT.” IEEE Transactions on Nuclear Science 66, no. 3 (2019): 674-686.
- Parameters:
spectralResponse_L (numpy array) – low energy spectra model
spectralResponse_H (numpy array) – high energy spectra model
gammas (numpy array) – energies at which both the spectra models are defined
basisFunction_1 (numpy array) – first basis function
basisFunction_2 (numpy array) – second basis function
referenceEnergies (2-element numpy array) – the low and high energy (keV) energies of the synthesized monochromatic attenuation
T_atten (scalar) – the sampling rate of the polychromatic attenuation (if unspecified, uses default values)
N_atten (int) – the number of samples of the polychromatic attenuation (if unspecified, uses default values)
- Returns:
A 2D numpy array that maps the low and high polychromatic attenuation to the low and high (at referenceEnergies) monochromatic attenuation
- xrayphysics.xrayPhysics.PhotoelectricBasis(self, gammas)
Returns the photoelectric basis function
- xrayphysics.xrayPhysics.ComptonBasis(self, gammas)
Returns the Compton basis function
- xrayphysics.xrayPhysics.PCAbases(self, listOfMaterials, gammas)
Returns the two basis functions derived from the PCA of several material cross sections