Unfolder¶
-
class
ompy.
Unfolder
(num_iter=33, response=None)[source]¶ Bases:
object
Performs Guttormsen unfolding
The algorithm is roughly as follows:
Define matrix Rij as the response in channel i when the detector is hit by γ-rays with energy corresponding to channel j. Each response function is normalized by Σi Rij = 1. The folding is then:
f = Ru
where f is the folded spectrum and u the unfolded. If we obtain better and better trial spectra u, we can fold and compare them to the observed spectrum r.
As an initial guess, the trial function is u⁰ = r, and the subsequent being:
uⁱ = uⁱ⁻¹ + (r - fⁱ⁻¹)
until fⁱ≈r.
Note that no actions are performed on the matrices; they must already be cut into the desired size.
- Variables
num_iter (int, optional) – The number of iterations to perform. defaults to 33. The best iteration is then selected based on the score method
weight_fluctuation (float, optional) – A attempt to penalize fluctuations. Defaults to 0.2
minimum_iterations (int, optional) – Minimum number of iterations. Defaults to 3.
window_size (float or int?, optional) – window_size for fill negatives on output. Defaults to 10.
use_compton_subtraction (bool, optional) – Set usage of Compton subtraction method. Defaults to True.
response_tab (DataFrame, optional) – If use_compton_subtraction=True a table with information (‘E’, ‘eff_tot’, …) must be provided.
FWHM_tweak_multiplier (Dict, optional) –
See compton subtraction method Necessary keys: [“fe”, “se”, “de”, “511”]. Magne’s suggestion:
FWHM_tweak_multiplier = {"fe": 1., "se": 1.1, "de": 1.3, "511": 0.9}
iscores (np.ndarray, optional) – Selected iteration number in the unfolding. The unfolding and selection is performed independently for each Ex row, thus this is an array with len(raw.Ex).
Todo
- Unfolding for a single spectrum (currently needs to be mocked as a
Matrix).
Unfolds the gamma-detector response of a spectrum
- Parameters
num_iter (
int
) – see abovereponse – see above
Attributes Summary
- rtype
Methods Summary
__call__
(matrix)Wrapper for self.apply()
apply
(raw[, response])Run unfolding.
chi_square_red
(folded)Compute reduced Χ² of the folded spectrum
compton_subtraction
(unfolded)Compton Subtraction Method in Unfolding of Guttormsen et al (NIM 1996)
fluctuations
(counts[, sigma])Calculates fluctuations in each Ex bin gamma spectrum by summing the absolute diff between the spectrum and a smoothed version of it.
fold
(matrix)Folds a matrix with the loaded response
score
(chisquare, fluctuations)Calculates the score of each unfolding iteration for each Ex bin based on a weighting of chisquare and fluctuations.
step
(unfolded, folded, step)Perform a single step of Guttormsen unfolding
Verify internal consistency and set default values
Attributes Documentation
Methods Documentation
-
apply
(raw, response=None)[source]¶ Run unfolding.
Selected iteration for each Ex row can be obtained via self.iscores, see above.
- Parameters
- Returns
Unfolded matrix
- Return type
Todo
Use better criteria for terminating
-
chi_square_red
(folded)[source]¶ Compute reduced Χ² of the folded spectrum
Uses the familiar Χ² = Σᵢ (fᵢ-rᵢ)²/rᵢ
- Return type
-
compton_subtraction
(unfolded)[source]¶ Compton Subtraction Method in Unfolding of Guttormsen et al (NIM 1996)
- Parameters
unfolded (ndarray) – unfolded spectrum
- Return type
- Returns
unfolded spectrum, with compton subtraction applied
We follow the notation of Guttormsen et al (NIM 1996) in what follows. u0 is the unfolded spectrum from above, r is the raw spectrum, .. parsed-literal:
w = us + ud + ua is the folding contributions from everything except Compton, i.e. us = single escape, ua = double escape, ua = annihilation (511).
v = pf*u0 + w == uf + w is the estimated “raw minus Compton” spectrum c is the estimated Compton spectrum.
Note
The tweaking of the FWHM (“facFWHM” in Mama) has been delegated to the creation of the response matrix. If one wants to unfold with, say, 1/10 of the “real” FWHM, this this should be provided as input here already.
We apply smoothing to the different peak structures as described in the article. However, you may also “tweak” the FWHMs per peak for something Magne thinks is a better result.
Todo
When we unfolding with a reduced FWHM, should the compton method still work with the actual fhwm?
-
fluctuations
(counts, sigma=20)[source]¶ Calculates fluctuations in each Ex bin gamma spectrum by summing the absolute diff between the spectrum and a smoothed version of it.
- Parameters
counts (np.ndarray) – counts of spectrum to act on (calibration from self.raw).
sigma (float, optional) – width of the gaussian for the smoothing. Defaults to 20
- Returns
column vector of fluctuations in each Ex bin
- Return type
np.ndarray
-
score
(chisquare, fluctuations)[source]¶ Calculates the score of each unfolding iteration for each Ex bin based on a weighting of chisquare and fluctuations.
- Parameters
chisquare (np.ndarray) – chisquare between raw and unfolded
fluctuations (np.ndarray) – measure of fluctuations (to be penalized)
- Return type
- Returns
score (the lower the better)
-
step
(unfolded, folded, step)[source]¶ Perform a single step of Guttormsen unfolding
Performs the steps u = u + (r - f), for step > 0 f = uR
-
update_values
()[source]¶ Verify internal consistency and set default values
- Raises
ValueError – If the raw matrix and response matrix have different calibrations.
-
apply
(raw, response=None)[source] Run unfolding.
Selected iteration for each Ex row can be obtained via self.iscores, see above.
- Parameters
- Returns
Unfolded matrix
- Return type
Todo
Use better criteria for terminating
-
chi_square_red
(folded)[source] Compute reduced Χ² of the folded spectrum
Uses the familiar Χ² = Σᵢ (fᵢ-rᵢ)²/rᵢ
- Return type
-
compton_subtraction
(unfolded)[source] Compton Subtraction Method in Unfolding of Guttormsen et al (NIM 1996)
- Parameters
unfolded (ndarray) – unfolded spectrum
- Return type
- Returns
unfolded spectrum, with compton subtraction applied
We follow the notation of Guttormsen et al (NIM 1996) in what follows. u0 is the unfolded spectrum from above, r is the raw spectrum, .. parsed-literal:
w = us + ud + ua is the folding contributions from everything except Compton, i.e. us = single escape, ua = double escape, ua = annihilation (511).
v = pf*u0 + w == uf + w is the estimated “raw minus Compton” spectrum c is the estimated Compton spectrum.
Note
The tweaking of the FWHM (“facFWHM” in Mama) has been delegated to the creation of the response matrix. If one wants to unfold with, say, 1/10 of the “real” FWHM, this this should be provided as input here already.
We apply smoothing to the different peak structures as described in the article. However, you may also “tweak” the FWHMs per peak for something Magne thinks is a better result.
Todo
When we unfolding with a reduced FWHM, should the compton method still work with the actual fhwm?
-
fluctuations
(counts, sigma=20)[source] Calculates fluctuations in each Ex bin gamma spectrum by summing the absolute diff between the spectrum and a smoothed version of it.
- Parameters
counts (np.ndarray) – counts of spectrum to act on (calibration from self.raw).
sigma (float, optional) – width of the gaussian for the smoothing. Defaults to 20
- Returns
column vector of fluctuations in each Ex bin
- Return type
np.ndarray
-
fold
(matrix)[source] Folds a matrix with the loaded response
-
score
(chisquare, fluctuations)[source] Calculates the score of each unfolding iteration for each Ex bin based on a weighting of chisquare and fluctuations.
- Parameters
chisquare (np.ndarray) – chisquare between raw and unfolded
fluctuations (np.ndarray) – measure of fluctuations (to be penalized)
- Return type
- Returns
score (the lower the better)
-
step
(unfolded, folded, step)[source] Perform a single step of Guttormsen unfolding
Performs the steps u = u + (r - f), for step > 0 f = uR
-
update_values
()[source] Verify internal consistency and set default values
- Raises
ValueError – If the raw matrix and response matrix have different calibrations.