nook.decay

Decay datasets: parent, normalisation and feeding records.

Kept out of LevelScheme on purpose – a feeding intensity belongs to a decay, and the same level carries different feedings depending on which parent populated it.

Normalization is the part that matters. ENSDF intensities are relative to whatever the evaluator called 100 within one dataset, and only become comparable across datasets once scaled by NR * BR or NB * BR.

class nook.decay.Parent(nuclide=None, energy=<factory>, spin_parity=<factory>, half_life=<factory>, q_value=<factory>, ionisation=None, raw=<factory>)[source]

Bases: object

The decaying state, from a P record.

nuclide: Nuclide | None = None
energy: Uncertain
spin_parity: SpinParity
half_life: HalfLife
q_value: Uncertain
ionisation: str | None = None
raw: Mapping[str, Any]
class nook.decay.Normalization(photon=None, transition=None, branching=None, feeding=None, delayed=None, raw=<factory>)[source]

Bases: object

An N record: multipliers onto an absolute per-decay scale.

photon: Uncertain | None = None
transition: Uncertain | None = None
branching: Uncertain | None = None
feeding: Uncertain | None = None
delayed: Uncertain | None = None
raw: Mapping[str, Any]
factor_for(kind='photon')[source]

The multiplier taking kind onto a per-parent-decay scale.

"photon" gives NR * BR, "feeding" gives NB * BR. "delayed" gives NP alone – it is already defined against total parent decays, so applying BR again would double-count the branch. That last one is inferred from a single dataset; see docs/limitations.md.

per_100_decays(intensity, kind='photon')[source]

Convert a relative intensity to one per 100 parent decays.

A missing multiplier gives back a value of None rather than silently assuming unity.

class nook.decay.Feeding(kind, level_index=None, energy=<factory>, intensity=<factory>, ec_intensity=None, total_intensity=None, log_ft=None, hindrance_factor=None, forbiddenness=None, particle=None, intermediate_energy=None, width=None, transfer_l=(), questionable=False, properties=<factory>, raw=<factory>)[source]

Bases: object

A B, E, A or D record feeding one daughter level.

Which fields carry information depends on kind:

"B"

beta-minus: intensity (IB), log_ft, forbiddenness

"E"

EC/beta-plus: intensity (IB, positron branch), ec_intensity (IE), total_intensity, log_ft

"A"

alpha: energy, intensity (IA), hindrance_factor

"D"

delayed particle: particle, energy, intensity

kind: str
level_index: int | None = None
energy: Uncertain
intensity: Uncertain
ec_intensity: Uncertain | None = None
total_intensity: Uncertain | None = None
log_ft: Uncertain | None = None
hindrance_factor: Uncertain | None = None
forbiddenness: str | None = None
particle: str | None = None
intermediate_energy: Uncertain | None = None

D records only: the emitting level in the intermediate nuclide (EI).

width: Uncertain | None = None

D records only: width of the particle-emitting transition.

transfer_l: tuple[int, ...] = ()

D records only: angular momentum carried off by the particle.

questionable: bool = False
properties: Mapping[str, str]
raw: Mapping[str, Any]
property label: str
class nook.decay.DecayScheme(nuclide, dsid, levels, parents=(), normalization=None, feedings=(), metadata=<factory>)[source]

Bases: object

One decay dataset: parents, normalisation, feedings and the daughter.

nuclide: Nuclide
dsid: str
levels: LevelScheme
parents: tuple[Parent, ...] = ()
normalization: Normalization | None = None
feedings: tuple[Feeding, ...] = ()
metadata: dict[str, Any]
property parent: Parent | None
feeding_of(level)[source]

Every feeding record pointing at the level with this index.

absolute_feedings()[source]

Each feeding paired with its intensity per 100 parent decays.

total_feeding(kind=None)[source]

Summed feeding per 100 parent decays, correlations handled.

Every feeding shares the same NB * BR, so quadrature over the scaled values would understate the total. Summing first and scaling once is exact and needs no correlation tracking.

total_photon_intensity()[source]

Summed gamma intensity per 100 parent decays, correlations handled.

Same argument as total_feeding(): NR * BR is common to every gamma in the dataset, so it is applied once to the summed relative intensities rather than to each term.

absolute_photon_intensity(gamma)[source]

A gamma’s RI expressed per 100 parent decays.