Skip to content

All input files, results of the simulations, and scripts for the paper "Hoax or Real? On the Uniqueness of Nuclear Radiation Signatures"

Notifications You must be signed in to change notification settings

cfichtlscherer/Hoax_or_Real_Code

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Hoax or Real? — Code & Data

This repository accompanies the paper
“Hoax or Real? On the Uniqueness of Nuclear Radiation Signatures”
by Christopher Fichtlscherer and Moritz Kütt, published in Science & Global Security (2024).
It contains every input file, simulation result, and script required to reproduce the figures and tables in the article.

Repository layout

Folder What’s inside
unique/ Reusable library code – detector / geometry models, data I/O helpers, etc.
scripts/ One-off scripts that reproduce every figure and table.
data/ Experimental datasets and nuclear-data libraries used as inputs.
results/ Computed simulation outputs and rendered figures.

Quick start

git clone https://github.com/cfichtlscherer/Hoax_or_Real_Code.git cd Hoax_or_Real_Code pip install -e .

Reproduce a single figure, e.g. Figure 1

python scripts/plot_detector_response.py


unique/ - library code

Module Purpose
data.py Collects constants and tables: Spontaneous-fission Watt parameters, branching ratios, half-lives, neutron-multiplicities, plus the list of isotopes available from the DOE Isotope Program.
detector.py Detector utilities. Simulates the NaI(Tl) response in OpenMC, broadens pulse-height tallies, converts them to IBX II/TRIS formats, and evaluates the corresponding test statistics.
models.py OpenMC geometries for all theoretical weapon models: the FPS model, a bare plutonium pit, and the W78 / W87 designs (each with and without their re-entry vehicle).
nndc_decay.py Decays arbitrary material vectors and computes γ- and n-emission spectra using ENSDF data.
nndc_download.py Bulk-downloads the ENSDF decay database from NuDat 3.
nndc_extraction.py Cleans and restructures the raw ENSDF files into pandas-friendly tables.

scripts/ - producing figures & results

Generated figures are written to results/figures/ unless stated otherwise.

Category Script / folder Purpose
Detector-response simulation simulate_detector_response/ Monte-Carlo simulation of the Mirion 802 NaI(Tl) 2×2″ detector using the pulse-height tally.
unique/detector.py – detector geometry & materials
run.py – runs 15 mono-energetic γ simulations
slurm.sh – SLURM batch template for one job
multi_starter.sh – submits ≈800 jobs in parallel
run_broadening.py – converts raw spectra (XXX.0_detector_sharp.npy) with the fitted resolution, producing XXX.0_detector_broad.npy (stored in results/detector_response/). Raw spectra are not included in the repository to keep its size reasonable.
Emission-source simulation simulate_pit_emissions/
simulate_fps_emissions/
simulate_w78_emissions/
simulate_w87_emissions/
OpenMC source-term simulations for the plutonium pit, the FPS, W78 and W87 weapon models, respectively. Each folder contains a run.py, slurm.sh, and multi_starter.sh. The pit geometry is defined in unique/models.py. Results reside in results/<model>_emissions/.
Radioactive decay utilities decay_all_isotopes.py Decays every isotope with t½ > 7 days and stores the activities in all_decay_results_7hl_decay_3d.pickle and all_decay_results.pickle.
decay_weapon_material.py Performs the decay calculation for different plutonium and uranium compositions used in nuclear weapons.
Spectrum / system-signal generation detector_and_system_signals_from_objects_and_isotopes.py Generates detector count spectra and confirmation-system signals from the simulated object emissions.
Detector-resolution fit fit_detector_resolution.py Derives the NaI detector resolution parameters (a, b, c) from the experimental dataset osprey-35mm-na-cs (copied from sgs-lab/ibxII-measurements).
Plotting & figure generation plot_detector_response.py Creates Figure 1 (simulated detector response).
plot_pit_emissions.py Combines pit emission spectra for different ages and plots Figure 2 (0-year vs 50-year). Stores merged spectra in results/object_emission_spectra/pit_<age>_emissions.npy.
plot_models_ray_tracing.py Produces Figure 3 (ray-tracing views of the weapon models). Requires OpenMC PR #2655 “Raytrace plots”.
plot_fps_emissions.py Generates Figure 4 (FPS emissions).
plot_total_emissions_thermo_nuclear_weapon_model.py Generates Figures 5 & 6 (thermonuclear-weapon model emissions).
plot_heatmap.py Generates Figure 7.
plot_emissions_PGPU_hoax.py Produces Figure 8 (top & bottom).
plot_halflife_vs_activity.py Generates Figure 9 (half-life vs activity of γ-emitters in NNDC).
determine_and_plot_hoaxes.py Creates Figures 10 & 11 and the appendix examples.
plot_alphan_energy_spectrum.py Generates Figure 12 – (α,n) neutron-energy spectrum from Sources4C.
find_and_plot_number_bins.py Computes test results for different bin numbers (stored in results/test_results_number_of_bins.pickle) and plots Figure 13.
Hoax-search utilities greedy_minimize.py Iteratively removes isotopes and searches the remaining subset for minimal-isotope hoaxes for finding isotopes using only a very small number of isotopes.
Tables & printed outputs print_pu3013_vector_and_U_emissions.py Reads results/nndc_data_processed/* and prints the Pu-3013 vector plus uranium emissions (Tables 2 & 3 of the paper).

data/  – input datasets and reference files

Item Description Origin / Notes
IBX_II_measurement_data/ Experimental NaI(Tl) pulse‑height spectra used to fit the detector resolution. Copied from the ibxII‑measurements repository.
Q_values.csv Nuclear Q‑values (MeV) for all relevant decay modes. Downloaded directly from NuDat 3.
nuclear_walled_decay_data.csv Needed for (i) stable nuclides and (ii) spontaneous‑fission branching ratios. https://www.nndc.bnl.gov/walletcards/.
pyne_nuclide_names.txt Canonical nuclide names. Taken from PyNE.
PoBe_equal_atom_fraction.npy Neutron‑energy spectrum of a PoBe (α,n) source with equal atom fraction. Calculated by M. Kütt using SOURCES‑4C on a local workstation.

results/ – simulation outputs & figures

Path Description
detector_response/ NaI(Tl) response functions for mono-energetic γ-rays from 0 keV to 12,029 keV (already Gaussian-broadened).
- 30,000 channels (0.1 keV each) per spectrum
- Filenames: XXX.0_detector_broad.npy
figures/ All PDF figures cited in the paper (Figure 1 – 13).
isotope_emission_spectra/ Photon-emission and detector-signal libraries for every nuclide considered in the hoax search.
For each isotope you will find:
*_emissions.npy – differential γ-emission rate (1 keV bins, units = γ s⁻¹ mol⁻¹)
*_detector.npy – 30 000-channel detector spectrum (0.1 keV bins)
*_ibx.npy – 12-channel IBX-II signature
*_tris.npy – 14-channel TRIS signature.
object_emission_spectra/ Combined emission spectra and detector signals for the theoretical weapon models (pit, FPS, W78, W87, …). Range: 0–12 MeV in 1 keV steps.
test_results_number_of_bins.pickle Simulation results from find_and_plot_number_bins.py used in Figure 13.
nndc_data_processed/ Processed ENSDF decay data and derived material vectors:
big_df_all_nuclide_data.pickle – master dataframe containing all NNDC decay information(~200 k rows)
all_gamma_intensities.pickle – γ-intensity per isotope (1 mol s⁻¹)
all_equilibria.pickle / all_decay_results_7hl.pickle – equilibria / decaying all isotopes in which the parent has the longest half-live for 7hl of the parent
all_decay_results.pickle – composition of 3-day decay of all t½ > 7d nuclides
all_decay_results_7hl_3d.pickleall_equilibria plus 3 days extra decay
• Additional pickles with the compositions & emissions of WGPu, LEU, etc.

About

All input files, results of the simulations, and scripts for the paper "Hoax or Real? On the Uniqueness of Nuclear Radiation Signatures"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published