An explorable explanation of the INCOGNITA reaction engine

Inside a Nuclear Reaction

One neutron. One nucleus. Many ways for it to end.

or click anywhere on the picture

The INCOGNITA engine is a port of TALYS-2 (A. J. Koning, S. Hilaire, S. Goriely) and uses the TALYS nuclear-structure database. What INCOGNITA adds is listed, switch by switch, at the end of this page.

Scroll to begin ↓

Fire a neutron at an atomic nucleus and something comes back out. It might be the neutron itself, bounced off. It might be a proton, an alpha particle (a tight cluster of 2 protons and 2 neutrons), or a burst of light. A heavy nucleus might even split in two.

Which one happens, and how often? This page walks through how our software answers that question, one step at a time. Scroll down, and try the controls along the way. The pictures follow the same physics as the engine; the numbers in them are illustrative.

Who it is for: anyone curious. No physics needed for the first chapters; later ones go to research level. Each chapter carries a tag: Intro, Intermediate or Advanced. Teaching with it? See the guide for instructors.

More ways in

ExploreEvery nuclidePredicted cross sections for 6,168 nuclides beside every curated measurement. Search any isotope, see every dataset.Open the data → CompareScoreboardHow the engine and its data product compare with other reaction codes and libraries, judged against measurements, losses first.See the scores → RunThe codeEverything here is open. Clone the repository, look up any curve, or run the engine yourself.GitHub →

Or keep scrolling: the physics starts here ↓

Where this lives in the code

Each stage above is a package in physics/hf, and the engine calls them in the order you just read. The engine is a port of TALYS-2.x, the established reaction code. What it adds sits behind named switches inside the same packages: most are off by default, a few corrections are on, and each one can be switched back to plain TALYS on its own.

ChapterWhat it doesCode
1Masses, levels, deformation, resonance datastructure/
2Optical model, transmission coefficients (how easily particles get in and out)omp/
3Coupled channels, DWBA, giant resonances, direct capture (optional)ecis/, direct/
4Pre-equilibrium: exciton model, pickup and knockout, multiple emissionpreeq/, density/particle_hole.py
5Level densities (states per MeV), spin distributiondensity/
6Choosing an exit (Hauser–Feshbach), width fluctuationscompound/
7Photon strength and γ transmission; discrete levels and isomersgamma/
structure/levels.py
8The cascade of particle and γ emissions, exclusive channels, residualsemission/
9Fission barriers and transmissionfission/
11Emission spectra, angular distributions and double-differential cross sections (optional, output only)specout.py
specang.py
11Capture on thermally excited targets and stellar rates (optional)astro/stellar.py
11Uncertainty by many random variants (Total Monte Carlo)tmc.py
The driver that runs the stages in order, and optional C kernels for speedengine.py
engine_c.py, native/
Every default and option, read once at the start; also TENDL's per-nuclide fitted parameters, applied as TALYS applies them (optional)input/

Added beyond TALYS

Rows marked On run by default, so a default run no longer matches TALYS exactly; each can be switched back with one keyword or environment variable. The rest stay off unless set.

ChapterWhat it changesCode
8On. Flux bookkeeping closed: residuals kept down to 10⁻⁹ mb (TALYS: 10⁻³ mb), residuals one step past TALYS's cascade window kept, up to 8 of each ejectile in exclusive channels, a level's repeated decay branches all countedemission/fluxclose.py
emission/channels.py
kevleak2.py
6On. The top bin of the first compound nucleus is filled as primary photons fill it (weighted by Eγ³), not evenlycompound/nnleak.py
6On. No averaged compound elastic below the first resonances (under 1 keV), where elastic is potential scatteringlowepot.py
6On. Deformed targets without fission: neutron exits to levels outside the coupled band use the coupled-channel transmissioncompound/ccexitnb.py
2On. Alpha emission sees a potential that depends on the residual's temperature; alpha projectiles enter through alpha model 6; triton and helion potentials include the projectile's sizeomp/alphatemp.py
alphaentr.py
omp/tfold.py
9On. Exact one-dimensional transmission through each barrier humpfission/wkb.py
7On. Per-nucleus E1/M1 strength factors, where a run supplies them, replaced by one global function of deformationgamma/ftglobal.py
5On. Targets with no measured resonance spacing D₀ of their own: the target's continuum level density above max(Ecut + 2, Sn − 6) MeV is raised by a factor from one global rule of parity, shell and deformation features. Added to turn the (n,p)-near-threshold loss against TALYS-2's default input into a tie; it makes a few capture, (n,2n) and (n,α) views slightly worse, a harm accepted and recordeddensity/npwindow.py
7A stronger scissors mode in deformed nuclei, from newer systematics that match Oslo measurements (about 4–5× in actinides); or a variant that scales its energy and strength with deformationgamma/scissors.py
7Photon strength rescaled so each nucleus matches its measured radiative strength ⟨Γγ⟩/D₀, for every nucleus in the cascade, not only the firstgamma/ggnorm.py
7Stronger scissors and ⟨Γγ⟩ normalisation for the heaviest nuclei (Z ≥ 88) only, aimed at capture at keV energiesgamma/actphys.py
7Our own E1-width constant in place of TALYS's TENDL-derived table (the shipped no-data recipe sets it)gamma/e1_width.py
7Collective E2 strength of rotational bands in the quasi-continuumgamma/isoe2.py
2A regional adjustment of the optical well for deformed rare-earth targets, fitted to measured S₀ and S₁ with no capture dataomp/regional.py
2Measured neutron strength functions S₀, S₁ set the low-energy neutron transmissionomp/sfunc.py
3Direct capture into bound orbits, with an upstream fix: in stock TALYS it returns zero unless every optical-model output is also requesteddirect/racapcalc.py
3The target's coupling scheme (rotor, vibrator, spherical) chosen from its measured levelsstructure/collrule.py
1The continuum starts where the measured level scheme stops being completestructure/levcomplete.py
1A level whose listed spin is impossible for its nucleus (integer in odd-A) is treated as a level of unknown spinstructure/levjpar.py
5Constant-temperature level density anchored on the complete part of the discrete levelsdensity/ctwindow2.py
9Rotational bands of transition states at the fission saddlesfission/barriers.py
10Capture where only a few resonances fall in the stellar window: the typical value of one resonance ladder instead of the averagefewres.py
Four guards far from stability: direct flux capped by unitarity, a limit on the Fermi energy, no default collectivity for odd-odd nuclei, pre-equilibrium spin spread normalisedengphys.py

Outside the engine

Some parts of the story run beside the engine rather than inside it. The statistical resonance ladders of Chapter 10 live in physics/resonance/. The Maxwellian averages (MACS) of Chapter 11 are folded from the engine's capture curves after the run, in validation/differential/core.py; capture on thermally excited targets and the stellar rate, by contrast, come from the engine itself (astro/stellar.py, optional). The anchoring layer of Chapter 12 lives in incognita/terra/.

The code, the library and the curated measurements are open: seth-michael-weaver/incognita on GitHub. You can look up any prediction yourself on the Every nuclide page, or clone the repository and run it.