Summary
The current 2D imaging pipeline requires users to specify the isotopes, energy axis, and material properties upfront. When these are wrong (e.g., assuming Ta-181 instead of the actual Pu-241), SAMMY still converges but produces physically meaningless results — high chi-squared, abundances > 1.0, and incorrect spatial maps. There is no feedback to the user that the isotope hypothesis is wrong.
An automated isotope identification capability would match observed resonance dip positions against known ENDF resonance energies to identify which isotopes are present and (optionally) calibrate the energy axis.
Motivation
During development of the 2D imaging pipeline (#181), we initially assumed the LANL-ORNL test data contained Ta-181 + U-235 at 13–343 eV. SAMMY fitted this without complaint, producing chi2 ~13,400 and U-235 abundance of 1.52. Only after receiving metadata from collaborators did we learn the actual composition was U-235 + Pu-241 at 1–50 eV. With the correct metadata, chi2 dropped to ~5,700 and abundances became physically reasonable.
This experience highlights the need for automated resonance fingerprinting so users can:
- Identify unknown isotopes from transmission spectra
- Validate their isotope hypotheses before committing to expensive batch SAMMY fitting
- Calibrate or verify the energy axis
Proposed Approach
Phase 1: Resonance dip detection
- Extract transmission dip positions from a representative spectrum (or mean spectrum)
- Use
scipy.signal.find_peaks on inverted transmission to locate resonance centers
- Characterize each dip by position, depth, and width
Phase 2: Database matching
- Build a lookup table of known resonance energies from ENDF for common isotopes (actinides, structural metals, etc.)
- Score each candidate isotope by how many of its known resonances match observed dips (within tolerance)
- Rank candidates by match rate and present top-N suggestions with confidence scores
Phase 3: Energy axis calibration (if unknown)
- Given a candidate isotope with strong, well-separated resonances, use the known resonance energies and observed bin positions to fit a linear (or polynomial) energy-vs-bin mapping
- Cross-validate by checking whether additional isotope resonances align under the calibrated axis
Phase 4: Integration with imaging pipeline
- Add an
identify_isotopes() function that takes a HyperspectralData object and returns ranked isotope candidates
- Optionally integrate as a pre-check in
analyze_imaging() to warn users if their specified isotopes don't match the observed resonance pattern
Verification approach from Issue #181
During the metadata verification for the 2D imaging notebook, we demonstrated the feasibility of this approach:
- With the correct energy axis (1–50 eV), 94% of known U-235 resonances and 70% of known Pu-241 resonances matched observed dips in the TIFF data
- This was done with a simple
find_peaks + distance-matching script in ~30 lines of code
- A production implementation would need better peak characterization, multi-isotope deconvolution, and confidence scoring
Acceptance Criteria
Related Issues
Summary
The current 2D imaging pipeline requires users to specify the isotopes, energy axis, and material properties upfront. When these are wrong (e.g., assuming Ta-181 instead of the actual Pu-241), SAMMY still converges but produces physically meaningless results — high chi-squared, abundances > 1.0, and incorrect spatial maps. There is no feedback to the user that the isotope hypothesis is wrong.
An automated isotope identification capability would match observed resonance dip positions against known ENDF resonance energies to identify which isotopes are present and (optionally) calibrate the energy axis.
Motivation
During development of the 2D imaging pipeline (#181), we initially assumed the LANL-ORNL test data contained Ta-181 + U-235 at 13–343 eV. SAMMY fitted this without complaint, producing chi2 ~13,400 and U-235 abundance of 1.52. Only after receiving metadata from collaborators did we learn the actual composition was U-235 + Pu-241 at 1–50 eV. With the correct metadata, chi2 dropped to ~5,700 and abundances became physically reasonable.
This experience highlights the need for automated resonance fingerprinting so users can:
Proposed Approach
Phase 1: Resonance dip detection
scipy.signal.find_peakson inverted transmission to locate resonance centersPhase 2: Database matching
Phase 3: Energy axis calibration (if unknown)
Phase 4: Integration with imaging pipeline
identify_isotopes()function that takes aHyperspectralDataobject and returns ranked isotope candidatesanalyze_imaging()to warn users if their specified isotopes don't match the observed resonance patternVerification approach from Issue #181
During the metadata verification for the 2D imaging notebook, we demonstrated the feasibility of this approach:
find_peaks+ distance-matching script in ~30 lines of codeAcceptance Criteria
HyperspectralDataand the imaging pipelineRelated Issues