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.
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.
Or keep scrolling: the physics starts here ↓
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.
| Chapter | What it does | Code |
|---|---|---|
| 1 | Masses, levels, deformation, resonance data | structure/ |
| 2 | Optical model, transmission coefficients (how easily particles get in and out) | omp/ |
| 3 | Coupled channels, DWBA, giant resonances, direct capture (optional) | ecis/, direct/ |
| 4 | Pre-equilibrium: exciton model, pickup and knockout, multiple emission | preeq/, density/particle_hole.py |
| 5 | Level densities (states per MeV), spin distribution | density/ |
| 6 | Choosing an exit (Hauser–Feshbach), width fluctuations | compound/ |
| 7 | Photon strength and γ transmission; discrete levels and isomers | gamma/structure/levels.py |
| 8 | The cascade of particle and γ emissions, exclusive channels, residuals | emission/ |
| 9 | Fission barriers and transmission | fission/ |
| 11 | Emission spectra, angular distributions and double-differential cross sections (optional, output only) | specout.pyspecang.py |
| 11 | Capture on thermally excited targets and stellar rates (optional) | astro/stellar.py |
| 11 | Uncertainty by many random variants (Total Monte Carlo) | tmc.py |
| The driver that runs the stages in order, and optional C kernels for speed | engine.pyengine_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/ |
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.
| Chapter | What it changes | Code |
|---|---|---|
| 8 | On. 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 counted | emission/fluxclose.pyemission/channels.pykevleak2.py |
| 6 | On. The top bin of the first compound nucleus is filled as primary photons fill it (weighted by Eγ³), not evenly | compound/nnleak.py |
| 6 | On. No averaged compound elastic below the first resonances (under 1 keV), where elastic is potential scattering | lowepot.py |
| 6 | On. Deformed targets without fission: neutron exits to levels outside the coupled band use the coupled-channel transmission | compound/ccexitnb.py |
| 2 | On. 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 size | omp/alphatemp.pyalphaentr.pyomp/tfold.py |
| 9 | On. Exact one-dimensional transmission through each barrier hump | fission/wkb.py |
| 7 | On. Per-nucleus E1/M1 strength factors, where a run supplies them, replaced by one global function of deformation | gamma/ftglobal.py |
| 5 | On. 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 recorded | density/npwindow.py |
| 7 | A 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 deformation | gamma/scissors.py |
| 7 | Photon strength rescaled so each nucleus matches its measured radiative strength ⟨Γγ⟩/D₀, for every nucleus in the cascade, not only the first | gamma/ggnorm.py |
| 7 | Stronger scissors and ⟨Γγ⟩ normalisation for the heaviest nuclei (Z ≥ 88) only, aimed at capture at keV energies | gamma/actphys.py |
| 7 | Our own E1-width constant in place of TALYS's TENDL-derived table (the shipped no-data recipe sets it) | gamma/e1_width.py |
| 7 | Collective E2 strength of rotational bands in the quasi-continuum | gamma/isoe2.py |
| 2 | A regional adjustment of the optical well for deformed rare-earth targets, fitted to measured S₀ and S₁ with no capture data | omp/regional.py |
| 2 | Measured neutron strength functions S₀, S₁ set the low-energy neutron transmission | omp/sfunc.py |
| 3 | Direct capture into bound orbits, with an upstream fix: in stock TALYS it returns zero unless every optical-model output is also requested | direct/racapcalc.py |
| 3 | The target's coupling scheme (rotor, vibrator, spherical) chosen from its measured levels | structure/collrule.py |
| 1 | The continuum starts where the measured level scheme stops being complete | structure/levcomplete.py |
| 1 | A level whose listed spin is impossible for its nucleus (integer in odd-A) is treated as a level of unknown spin | structure/levjpar.py |
| 5 | Constant-temperature level density anchored on the complete part of the discrete levels | density/ctwindow2.py |
| 9 | Rotational bands of transition states at the fission saddles | fission/barriers.py |
| 10 | Capture where only a few resonances fall in the stellar window: the typical value of one resonance ladder instead of the average | fewres.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 normalised | engphys.py |
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.