feynlag.pheno.calculator.DecayCalculator

class feynlag.pheno.calculator.DecayCalculator(model, masses, boson_fields=(), fermion_sectors=(), conjugate_map=None, color_factors=None, parameters=None, simplifier=None, particle_map=None, particles=())[source]

Two-body decay widths and branching ratios for a built model.

Parameters:
  • model – a Model in its physical basis (tadpoles solved, rotations registered).

  • masses – {leg: mass}. Fermion legs are Indexed objects, so a mass may be keyed by the exact leg or by its IndexedBase — the base is the fallback.

  • boson_fields – physical boson symbols to extract vertices over.

  • fermion_sectors – Lagrangian sectors carrying fermion bilinears (e.g. ('gauge', 'yukawa')).

  • conjugate_map – passed through to the bosonic extractor.

  • color_factors – {leg: N_c}; anything absent defaults to 1.

  • parameters – optional ParameterSet for numeric().

  • simplifier – optional callable applied to bosonic couplings.

  • particle_map – {weyl_leg: physical_particle} identifying the two Weyl legs of one Dirac fermion, so its P_L and P_R currents merge into a single channel — see resolve_leg(). Omitting it for a Dirac fermion splits Z → e⁺e⁻ into two wrong half-channels.

  • particles – list of DiracParticle — the recommended way to declare physical fermions. Each bundles its two Weyl legs, mass and colour $N_c$, so the particle_map / masses / color_factors triple cannot fall out of sync. Colour is applied once per channel (no per-leg double count), and any extracted fermion vertex claimed by no declared particle is surfaced in unmatched_channels (with a warning) instead of silently vanishing. Merges with masses (bosons stay there) and with an explicit particle_map/color_factors if also given.

__init__(model, masses, boson_fields=(), fermion_sectors=(), conjugate_map=None, color_factors=None, parameters=None, simplifier=None, particle_map=None, particles=())[source]

Methods

__init__(model, masses[, boson_fields, ...])

branching_ratios(parent)

{(child1, child2): Γ_i/Γ_tot}.

channels(parent)

Every open two-body channel of parent.

loop_widths(m_h, m_t, m_W, m_Z, v, alpha, ...)

Loop-induced Higgs widths {('g','g'), ('γ','γ'), ('Z','γ')} (Tier 3).

mass_of(leg)

Mass of a leg, falling back to its IndexedBase.

numeric(expr[, extra])

Evaluate expr at the model's parameter point.

numeric_branching_ratios(parent[, extra])

{(child1, child2): BR} as floats, closed channels at 0.

numeric_partial_widths(parent[, extra])

{(child1, child2): Γ} as floats, with closed channels at 0.

numeric_total_width(parent[, extra])

Γ_tot as a float, counting only channels open at this point.

offshell_vv_width(parent, vector, m_parent, ...)

Off-shell parent → V (V^* → f f̄') width (Tier 2).

partial_widths(parent)

{(child1, child2): Γ} for every open channel.

total_width(parent)

Γ_tot = Σ Γ_i over open two-body channels.

vertices()

All three-leg vertices, extracted once and cached.

Attributes

unmatched_channels

Fermion channels dropped because a daughter had no declared mass.