Skip to content
AvilaLabsPublic

About

Open, standalone activation and nuclide-inventory solver in Rust with a Python API and reproducible validation.

Topics

Resources

Contributing

Stars

3 stars

Watchers

1 watching

Forks

Latest commit

 

History

909 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ACTINV

CI PyPI crates.io License: MIT OR Apache-2.0

Open, reproducible activation and nuclide-inventory calculations with a native desktop, command line, and Python.

Get started

Download ACTINV Open in browser

Read the ACTINV Handbook

Download ACTINV selects the desktop installer for your computer when the browser can identify it. If it cannot, choose from the downloads shown. No Rust or Python is needed. Windows: open the installer, then launch ACTINV from Start. macOS: open the disk image and drag ACTINV to Applications. Linux: allow the AppImage to run in its file properties, then double-click it. Windows and Linux downloads are for x86_64 computers.

Desktop 0.5.0-preview.1 (solver 1.6.1) is unsigned. See first-launch help and installation details if your system shows a security notice, or for an optional Linux application-menu shortcut.

Open in browser lets you try the results tutorial, inspect and compare result files, and edit and download problem files. Your files stay on your device. Use the desktop app to run calculations and work with nuclear data. See the browser guide for details.

About ACTINV

ACTINV answers a practical question: what radioactive nuclides are created when a material is irradiated, and what happens to them afterward? Give it a material, particle-flux spectrum, irradiation and cooling schedule, and evaluated nuclear data. It returns inventories, activity, decay heat, photon sources, selected radiological responses, and an explicit record of anything the supplied data could not account for.

It is useful for activation studies, shutdown inventories, source-term preparation, and reproducible comparisons with other inventory codes. The numerical core is written in Rust and shared by the desktop, Python interface, and standalone command.

PyPI · crates.io · Desktop preview downloads — Windows, macOS, Linux · v1.6.1 software release · v1.1.0 nuclear-data release · Documentation

Explore the desktop interface ↓

ACTINV is research-grade software. Version 1.0 is a technically validated release, not an approval for licensing, safety, waste classification, or regulatory decisions. See Qualification boundary before using results in a formal analysis chain.

External review and integrations

ACTINV support was merged into JADE's developing branch on October 1, 2026. The reviewed integration runs ACTINV locally and compares the initial FNS iron five-minute decay-heat case at all 20 measured cooling times. The accompanying benchmark input and measurement package was accepted into the IAEA Nuclear Data Section's Open Benchmarks repository the same day.

See external review, integrations, and validation for the dated evidence and scope, and the JADE setup guide for the merged upstream workflow. These records document acceptance of the integration and benchmark package; scientific benchmark results remain in the validation documentation.

Quick start

1. Install ACTINV

For command-line and Python use, one command installs both the Python interface and the actinv terminal command on Python 3.9 or newer:

pip install actinv

Prebuilt wheels are available for supported systems, so this route does not require a Rust compiler. If you already use Rust and only want the command-line program, install it directly from crates.io:

cargo install --locked actinv-cli

Prebuilt standalone executables are also attached to the v1.6.1 GitHub Release.

Confirm the installation at any time with actinv --version or explore every command with actinv --help.

2. Fetch nuclear data

The software package stays small by keeping nuclear data in a separate, versioned release. Download the recommended neutron data in one command:

actinv data fetch

The command downloads about 79 MiB, verifies every file with SHA-256 before installing it under actinv-data/v1.1.0/, and prints the exact paths to paste into a problem. Nothing is silently updated: a later data release goes in a new version directory. See Data setup for the other particle and covariance bundles.

Problem files may also use portable symbolic references — "path": "catalog:tendl-2025-neutron-709g" resolves the installed artifact by ID and fills its declared hash from the embedded catalog. actinv new emits these by default; set ACTINV_DATA_DIR if your data lives somewhere other than ./actinv-data.

If you are working from the source checkout, the included iron example already uses those default paths:

actinv validate examples/fns_fe_5min.json
actinv run examples/fns_fe_5min.json fns_fe_5min_result.json

3. Run a calculation

An ACTINV problem is a JSON file containing the data paths printed by actinv data fetch, a material composition, a group flux spectrum, and an irradiation/cooling schedule. Validate it first, then run it:

actinv new problem.json
actinv validate problem.json
actinv run problem.json result.json

actinv new creates the complete FNS iron example, including its spectrum, without overwriting an existing file. Use --data-dir /path/to/actinv-data if you installed data elsewhere. Edit its material and history for your study. validate checks the specification; symbolic catalog references must resolve to installed artifacts. Add --files to check readable inputs (including library indexes), or --hashes to also check declared hashes. Evaluated-data compatibility is checked during a run. Use actinv doctor problem.json to diagnose setup and actinv COMMAND --help for command help.

The same calculation from Python is:

from pathlib import Path
import json
import actinv

problem = Path("problem.json").read_text(encoding="utf-8")
print(actinv.validate(problem))

result = json.loads(actinv.run(problem))
last_step = result["steps"][-1]
print("decay heat (W/g):", last_step["heat_W_per_g"]["total"])
print("activity (Bq/g):", sum(last_step["activity_Bq_per_g"].values()))
print("unaccounted inputs:", result["ledger"])

On the first run for a library and flux spectrum, ACTINV prepares a verified local calculation cache. That setup is automatic; later runs reuse the compact data and need much less memory. The original nuclear-data files and their SHA-256 hashes remain the recorded inputs—cache files never replace them in the result certificate.

Deleting the cache is always safe and changes only how long the next preparation takes. ACTINV normally uses your platform's standard cache directory. Set ACTINV_CACHE_DIR to an absolute path if you want the disposable cache on a larger or faster disk, for example ACTINV_CACHE_DIR=/data/actinv-cache actinv run problem.json result.json.

Start with the specification guide, which explains every field and includes complete examples. Unknown fields are rejected, so misspelled options do not silently change a calculation. At any time, verify the installed data without downloading it again:

actinv data verify

Desktop interface

The optional native egui desktop supports problem editing, verified data downloads, background calculations, interactive results and comparisons, photon spectra, production pathways, and JSON/CSV export. The Help button provides guided walkthroughs that dim the workspace and highlight the relevant controls.

From a source checkout with Rust installed:

cargo run --release -p actinv-gui

This launches a native application window. After building, the executable is target/release/actinv-gui (actinv-gui.exe on Windows). Desktop builds are checked on Windows, macOS Apple Silicon, and Linux; desktop preview installers and application bundles are prepared separately from the published v1.6.1 release. PyPI and cargo install actinv-cli install the command-line interface, not the desktop.

Download the unsigned desktop preview for Windows, macOS, and Linux. The desktop installation guide covers first-launch notices, data setup, and verification.

Build an irradiation and cooling schedule

Edit durations with familiar units, reorder segments, and inspect their relative lengths in the timeline.

ACTINV schedule editor with irradiation and cooling rows and a proportional timeline

Explore results through linked plots and tables

Select a time and nuclide, switch between activity, heat, and inventory, add a comparison, and export JSON or CSV. This capture uses the small synthetic P11 control fixture to demonstrate the interface.

ACTINV results page showing activity over time, a computed-step selector, and a nuclide inventory table

Learn in place with guided Help

The walkthrough highlights the actual controls, dims the surrounding workspace, and explains each step. Use Back, Next, or Exit tour at any point; F1 opens Help and Escape closes the walkthrough.

ACTINV Help walkthrough highlighting the schedule editor with a step-by-step explanation

See Desktop guide for setup, walkthroughs, and verification. The desktop uses the same solver as the CLI and Python API, with Avila Labs branding and the full result ledger and certificate.

Preparing an activation library

The standalone command builds deterministic libraries from supported ENDF-6 evaluations. For example:

actinv build-library /data/TENDL-2025/n /data/tendl2025-n.npz \
  --format tendl --projectile neutron --groups fispact-709 \
  --temperature-K 293.6 --workers 4 --cache /data/actinv-cache

For MF=33 cross-section uncertainty information:

actinv build-covariance /data/TENDL-2025/n /data/tendl2025-n.npz \
  /data/tendl2025-n.cov.npz --workers 4 --cache /data/actinv-cov-cache

For damage-energy (dpa) tables from ENDF-6 evaluations carrying MF=3/MT=444:

actinv build-damage /data/damage-evaluations /data/damage-709g.json \
  --projectile neutron --groups fispact-709 --cache /data/actinv-damage-cache

Every input file is SHA-256 hashed in the result certificate. Generated bulk libraries and raw nuclear-data inputs are not stored in this repository.

Transport-code workflows

ACTINV accepts a spectrum from any source. It also has strict importers for documented subsets of OpenMC statepoints, MCNP MESHTAL/MCTAL files, and FISPACT flux files. Normalization must always be stated explicitly:

actinv import-flux openmc statepoint.h5 flux.ndjson \
  --tally 7 --source-rate 1.0e15 --energy-floor-eV 1.0e-5
actinv mesh mesh.json mesh-result.ndjson

Selected decay-photon steps can be exported as OpenMC or MCNP source fragments:

actinv export-openmc result.json 2 source.py
actinv export-mcnp result.json 2 source.sdef

Mesh cells are solved independently. ACTINV does not perform particle transport, spatial coupling, criticality, or thermal-hydraulic feedback. The mesh spec (docs/SPEC.md) supports group_workloads (identical rebinned spectra share one solve, recorded as cells_served_from_reuse), cell_result_fields (selectable per-cell output), memory_limit_bytes (a post-hoc peak-RSS guard), and resume (the output file is its own checkpoint; an interrupted run resumes after its last complete cell record byte-identically). The executed scale evidence is a 20,000-cell run on the pinned TENDL-2025 library, recorded in results/g3_p21_executed.json.

What the result tells you

Depending on the requested outputs, each time step can contain:

  • nuclide atoms and activity;
  • total and alpha/beta/gamma decay heat;
  • evaluated decay-photon lines or multigroup sources;
  • ranked production pathways;
  • user-selected clearance, waste, ingestion, or inhalation responses;
  • NRT damage observables (damage-energy rate, per-element and aggregate dpa) from a hash-pinned actinv-damage-table-1 produced by actinv build-damage;
  • an MF=33 cross-section uncertainty band and numerical-method comparison; and
  • a ledger for missing decay/yield/response/damage data, pruned populations, balance terms, and method resolution.

Schedule steps may also declare continuous feed (atoms s⁻¹ g⁻¹ per nuclide) and first-order removal (s⁻¹ per nuclide or element) — for flowing systems, coolant purification, or irradiated-target feed — with removed atoms accounted in a dedicated sink.

actinv reverse inverts a schedule against measured activities: scalar mode recovers a common flux multiplier by weighted least squares; --segments recovers per-irradiation-step multipliers by non-negative least squares. Both are linear-regime methods with named refusals outside it:

actinv reverse problem.json measurements.json estimate.json
actinv reverse problem.json measurements.json estimate.json --segments

actinv reverse-qualified is the banded counterpart: it propagates MF=33 nuclear-data covariance into the measurement covariance (C = C_meas + C_model, with C_model[i,j] = G_iᵀΣG_j evaluated at a first-pass estimate), then re-solves by generalized least squares. The emitted actinv-reverse-qualified-1 document carries the posterior covariance and correlation between segments, per-segment identifiability flags, chi-square pulls, and which measurements dominate each estimate — the forward problem's uncertainty block must declare banded activity:<nuclide> responses for every measured nuclide:

actinv reverse-qualified problem.json measurements.json qualified.ndjson

actinv optimize searches a declared design box — composition fractions, flux scale, schedule step durations — with a seeded, derivative-free optimizer. Every candidate is solved through the identical solver path and ledgered; objectives and constraints can evaluate on propagated MF=33 band edges, so a nominally acceptable design can be rejected for failing at its 95th-percentile uncertainty edge:

actinv optimize examples/optimize_ra_steel/opt.json out/

See OPTIMIZE.md for the optspec schema. Band-propagated candidates cost minutes each — this is a batch tool, not an interactive one.

Radiological coefficients are user-supplied, hash-pinned tables. ACTINV does not choose a jurisdiction, regulation, chemical form, aerosol class, or safety margin for you.

Benchmarks

On identical TENDL-2017 data ACTINV leads FISPACT-II on the FNS 132-experiment decay-heat corpus — median |log C/E| 0.103 vs 0.105, experiments within 30% 71 vs 69 — and on identical ENDF-8 data it beats OpenMC's depletion path on every pooled metric (median |ln C/E| 0.131 vs 0.181; p90 0.970 vs 1.640). On the decay-aware TENDL-2023 rebuild the pooled geometric-mean C/E is 1.097 vs the frozen FISPACT-T17 reference's 1.244. ACTINV also emits what the compared codes do not: propagated covariance bands on every response, band-certified optimization, and a certified-screening fast tier. Full numbers and methods: competitive benchmark.

Validation in brief

For a complete measured-data example, see the FNS iron decay-heat case: download verified inputs, run the CLI, and compare all twenty experimental measurements with a table and plot.

The repository carries executable controls and compact evidence for every release phase. Highlights include:

  • 132 IAEA FNS decay-heat experiments across 73 materials;
  • independent decay-photon, transport-import, fission-yield, pulse-history, and mesh checks;
  • complete deterministic TENDL-2025 neutron/proton/deuteron/alpha and EAF-2010 library builds;
  • independent CRAM, sensitivity, MF=33 covariance, and uncertainty-propagation checks;
  • a fixed one-million-case reliability check across all supported public input readers; and
  • an independently reproduced FNG/ITER cell-620 activation history at all 170 time points.

Validation establishes behavior for the recorded models, inputs, and acceptance bounds. It does not establish that a particular user's material, spectrum, nuclear-data choice, radiological table, or regulatory scenario is suitable. The shipped TENDL-2025 evaluations carry documented upstream defects affecting 17 IRDFF-II benchmark targets — see known data limitations. See the competitive benchmark, Validation, P17 held-out validation, v1.0 release notes, and the qualification boundary for the evidence and complete limitations.

Design principles

  • Inputs stay attributable. Nuclear data are distributed separately under their own terms, verified before use, and recorded by hash in every calculation.
  • Incomplete information stays visible. Missing data and approximations appear in the ledger.
  • Interfaces share one solver. CLI, Python, prepared, and mesh paths are checked for scientific identity.
  • Evidence is reproducible. Protocols are frozen before results; repair records are append-only.

Documentation

Read the ACTINV Handbook for installation, a first calculation, results, data setup, troubleshooting, benchmark interpretation, and CLI/Python reference. You can also browse its Markdown source in this repository.

Start a calculation · Problem specification · Data setup · Competitive benchmark explained · Scope and qualification

Technical evidence and contributor material remain in the repository: benchmark report, validation records, external evidence, data-source record, and maintainer documentation.

Contributing and licence

ACTINV is dual-licensed under MIT or Apache-2.0. Contributions use the Developer Certificate of Origin. Physics or data-handling changes need a regression control and an append-only evidence record; see CONTRIBUTING.md.

About

Open, standalone activation and nuclide-inventory solver in Rust with a Python API and reproducible validation.

Topics

Resources

Contributing

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages