DNA replication · 3 processes
ChromosomeReplication
Chromosome Replication — initiate, elongate, and terminate replication forks.
1. Initiation: fire when M_cell / n_oriC ≥ M_critical(τ); +2 replisomes·oriC, +2 domains. 2. Elongation: seqs = buildSequences(template, pos, ν·dt); polymerize(seqs, dNTPs, limit);
Δm_DNA = ∑ᵢ (elongated_ntᵢ · weightᵢ); PPi released = dNTP polymerized.
3. Termination: fork ends when |coordinate| = L_replichore; domain splits, subunits recycled.
M_cell: cell mass (fg); n_oriC: oriC count; M_critical(τ): mass/oriC threshold at doubling time τ; ν: stochastic elongation rate (nt/s); dt: timestep; L_replichore: replichore length (nt).
ChromosomeStructure
Chromosome Structure — resolve fork collisions, replicate promoters, repartition segments.
1. Collision: fork passing a bound molecule either removes it (fork wins) or stalls (molecule wins). 2. Promoter replication: duplicate promoter when pos_prev < c ≤ pos_new (TF state + mass preserved). 3. Segment supercoiling: linking number Lk = Tw + Wr; on split, Lk partitioned ∝ new segment lengths. 4. Recycling: collided RNAPs/ribosomes removed; RNA transcripts + subunits returned to bulk (mass conserved).
c: promoter coordinate; pos_prev/pos_new: fork position before/after step; Tw: twist; Wr: writhe.
DnaABinder
DnaA Binder — DnaA-ATP occupancy of oriC gating replication initiation.
free_DnaA evolves under binding/unbinding rates (k_on, k_off); oriC_state: 'free' → 'bound' once DnaA occupancy ≥ threshold.
free_DnaA: free DnaA-ATP level; k_on/k_off: binding/unbinding rate constants. (Skeleton: update currently returns a no-op placeholder; kinetics TBD.)
Transcription · 2 processes
TranscriptElongation
Transcript Elongation — RNAPs extend transcripts by NTP polymerization.
seqs = buildSequences(rnaSeqs, RNAP_pos, ν·dt); Δlen = polymerize(seqs, NTP, limit) NTP → NMP_incorporated + PPi; Δmass = ∑ᵢ Δntᵢ·wᵢ [fg]
Termination: transcript len = TU_len → full transcript; RNAP recycled. tRNA attenuation (optional): p_stop = f([charged_tRNA]/[total_tRNA]),
early-terminated RNAPs recycled and partial transcripts discarded.
ν = elongation rate (nt/s); dt = timestep; wᵢ = nucleotide weights.
TranscriptInitiation
TranscriptInitiation — distributes activated RNAPs across TUs by weighted multinomial sampling.
n_to_activate = round(f_active · n_total_RNAP) - n_active p_i = max(0, basal_prob_i + ∑_j delta_prob[i,j] · bound_TF_j) initiations ~ Multinomial(n_to_activate, p_i / ∑_i p_i)
with p_i ← 0 for TUs that are footprint-crowded (~24 nt) or lack a chromosomal promoter. f_active: media-dependent active RNAP fraction; delta_prob: sparse (COO→CSR) TF effect matrix. ppGpp (optional) modulates basal_prob and f_active via fitted functions.
RNA metabolism · 2 processes
RnaDegradation
RNA Degradation — endo cleavage (competitive Michaelis–Menten) then exo digestion.
fᵢ = ([rᵢ]/Kmᵢ) / (1 + ∑ⱼ [rⱼ]/Kmⱼ); νᵢ = kcat_endo · [EndoRNase] · fᵢ
per class c: n_deg_c = Draw(∑_{i∈c} νᵢ · dt · V · N_A), multinomial∝fᵢ, ≤ supply
Δfragments = S_endo · n_deg; exo: C_exo = ∑n_exo · kcat_exo · dt
FragmentBase + H2O → NMP + H⁺ (full digest if C_exo ≥ Σbases, else multinomial)
[rᵢ]: RNA conc (mol/L); Kmᵢ: MM constant; νᵢ: endo flux; S_endo: cleavage stoich (NMP+PPi).
RnaMaturation
RNA Maturation — stoichiometric processing of unprocessed tRNA/rRNA into mature forms.
reaction_off = (E · enzyme_present) < n_required; n_unproc[off] = 0 n_mature = S · n_unproc; ppi = ppi_per_rxn · n_unproc rRNA variant consolidation: Δnts = Δnt_countsᵀ · n_variant; NMP +Δ, H2O −Σ, H⁺ +Σ
S: stoich (mature × unprocessed, CSR); E: enzyme-requirement (rxns × enzymes); Δnt_counts: NMP difference variant vs canonical 16S/23S/5S.
Translation · 7 processes
BasePolypeptideElongation
Polypeptide Elongation — ribosomes extend polypeptides by amino-acid polymerization.
seqs = buildSequences(protSeqs, ribo_pos, ν·dt); Δlen = polymerize(seqs, aa, limit) GTP_consumed = n_elongations · gtpPerElongation (≈4.2 GTP/aa, EF-Tu/EF-G)
ppGpp regulation (optional): ν = f_ppgpp([ppGpp]) [aa/s], with
d[ppGpp]/dt = RelA synth([uncharged_tRNA]) − SpoT deg([ppGpp]) + SpoT basal synth.
ν = elongation rate (aa/s); dt = timestep.
PolypeptideInitiation
Polypeptide Initiation — assembles 30S+50S → 70S ribosomes on mRNAs.
n_activate = round(f·n_total) − n_active; n_total = n_70S + min(n_30S, n_50S) p_k = ηₖ·n_copiesₖ / ∑ⱼ ηⱼ·n_copiesⱼ (per-mRNA initiation prob) overcrowded ⟺ mRNA_len/(n_ribos+1) < footprint (≈24 nt) → p_k := 0 n_new ~ Multinomial(n_activate, p); each consumes one 30S + one 50S.
f = media-dependent active fraction; ηₖ = translation efficiency.
ProteinDegradation
Protein Degradation — first-order Poisson hydrolysis of protein monomers.
nᵢ_deg ~ min(Poisson(kᵢ · dt · nᵢ), nᵢ) Δmetabolites = S · n_deg Proteinᵢ + (Lᵢ−1) H2O → ∑ⱼ aᵢⱼ · AAⱼ
kᵢ: first-order degradation rate (1/s); nᵢ: copies of protein i; aᵢⱼ: count of AA j per protein i; Lᵢ = ∑ⱼ aᵢⱼ (residues); S: stoichiometry (metabolites × proteins), +AA release, −(Lᵢ−1) H2O.
RibosomeData
Derives per-tick translation readouts from the active-ribosome pool: effective elongation rate, actual elongations and termination events, rRNA initiation by class, and ribosomes-per-transcript / polysome occupancy.
SteadyStatePolypeptideElongation
Steady-State Polypeptide Elongation — elongation rate emerges from tRNA charging.
f_charged_a = [charged_tRNA_a] / ([charged_tRNA_a] + [uncharged_tRNA_a]) ν_eff ∝ min_a f_charged_a (Michaelis–Menten competitive inhibition)
Charging (aminoacyl-tRNA synthetase): aa + ATP + tRNA → charged_tRNA + AMP + PPi. Composes tRNA charging + ppGpp (RelA/SpoT) + amino-acid supply (synth/import/export). ν_eff = effective elongation rate (aa/s); a indexes amino-acid species.
TranslationDeriver
Derives per-tick translation readouts from the active-ribosome pool: effective elongation rate, actual elongations and termination events, rRNA initiation by class, and ribosomes-per-transcript / polysome occupancy.
TranslationSupplyPolypeptideElongation
Polypeptide Elongation — ribosomes extend polypeptides by amino-acid polymerization.
seqs = buildSequences(protSeqs, ribo_pos, ν·dt); Δlen = polymerize(seqs, aa, limit) GTP_consumed = n_elongations · gtpPerElongation (≈4.2 GTP/aa, EF-Tu/EF-G)
ppGpp regulation (optional): ν = f_ppgpp([ppGpp]) [aa/s], with
d[ppGpp]/dt = RelA synth([uncharged_tRNA]) − SpoT deg([ppGpp]) + SpoT basal synth.
ν = elongation rate (aa/s); dt = timestep.
Regulation (TFs, ppGpp) · 2 processes
TfBinding
TfBinding — stochastic occupancy of promoter sites by transcription factors.
p_bound_j = p_promoter_bound_tf(n_active_j, n_inactive_j) (1.0 for 0CS TFs) n_to_bind_j = min(∑ StochasticRound(p_bound_j, N_j), n_available_TF_j)
then n_to_bind_j promoter sites are chosen uniformly at random and bound.
Δmass_i = ∑_j ΔTF[i,j] · m_j (mass moved bulk → promoter submass)
N_j: available promoter sites for TF j; m_j: mass (fg) of active TF j. MarA (PD00365): n_active = 34 · [marR-tet]/([marR]+[marR-tet]).
TfUnbinding
TfUnbinding — deterministic release of all DNA-bound TFs to the free active pool.
n_released_j = ∑_i bound_TF[i,j] (sum over promoters i) bound_TF ← 0 (reset promoter occupancy matrix) Δmass_i = -∑_j bound_TF[i,j] · m_j (mass moved promoter submass → bulk)
bound_TF: promoters × TF species; m_j: mass (fg) of active TF j.
Signaling / equilibrium · 3 processes
Complexation
Complexation — spontaneous monomer→complex assembly (Gillespie SSA).
Continuous-time Markov chain over reactions (stoichiometry S, rates k):
x(t+dt) = StochasticSystem.evolve(dt, x(t), k)
propensity a_j = k_j · ∏_i C(x_i, |S_ij|); Δx = S·occurrences.
Reactants are complex-specific (no shared-resource competition).
Equilibrium
Equilibrium — ligand–TF binding driven to steady state.
1. ODE solve for integer reaction fluxes ν: x_ss, ν = fluxesAndMoleculesToSS(x, V, N_A). 2. Greedy correction under allocation: while any(S·ν + x_alloc < 0),
decrement offending forward/reverse fluxes (clamp ≥ 0).
Δx = S·ν; S = stoichiometry matrix (molecules × reactions).
TwoComponentSystem
TwoComponentSystem — phosphotransfer signaling kinetics (ODE integration).
Solve molecule-count ODEs over the timestep:
dx/dt = f(x); integrate t: 0→dt (scipy solve_ivp, BDF); Δx = x(dt) − x(0).
Under-allocation: re-solve to long-horizon steady state (10000 s), extract this timestep's Δx to stay physically consistent with reduced counts. x: counts of histidine kinases, response regulators, and their phospho-forms.
Metabolism (FBA) · 2 processes
Metabolism
Metabolism — flux-balance analysis (FBA).
Each timestep solve for the reaction flux vector v:
max cᵀv s.t. S·v = 0, v_lb ≤ v ≤ v_ub S: stoichiometry (metabolites×reactions); c: biomass objective; bounds from nutrient uptake, enzyme kcat capacity, NGAM maintenance.
Flux→counts: Δn = stochasticRound(v · m_dry · dt / (MW · κ)). Optional ppGpp growth coupling and kinetic (kcat) flux constraints.
SimplifiedMetabolism
Simplified metabolism — homeostatic FBA via scipy linprog (HiGHS).
Each timestep solve for flux v and slacks s⁺,s⁻:
min Σ(sᵢ⁺ + sᵢ⁻)
s.t. S·v = 0, M·v + s⁺ − s⁻ = target/κ,
v_lb ≤ v ≤ v_ub, s⁺,s⁻ ≥ 0
S: stoichiometry; M: tracked-output rows; target: homeostatic
concentration targets (mM); κ: conversion factor (g·s/L).
bounds from nutrient exchange, enzyme presence, NGAM maintenance.
Flux→counts: Δn = stochasticRound(Δconc / counts_to_molar).
Derived properties · 3 processes
CountsDeriver
Tallies molecule counts for downstream readouts: mRNA/rRNA transcription-unit and cistron counts (partial + full transcripts), protein monomer counts (including monomers sequestered in complexes and in active ribosomes/RNAPs/replisomes), and per-type active unique-molecule totals. Consolidates the former RNACounts, MonomerCounts, and UniqueMoleculeCounts listeners into one step.
MassDeriver
Aggregates total cell mass and submasses (protein, RNA by class, DNA, small molecules, water) from bulk and unique molecule counts. Derives cell volume, plus growth rate and mass fold-changes over the cell cycle.
PostDivisionMassDeriver
Aggregates total cell mass and submasses (protein, RNA by class, DNA, small molecules, water) from bulk and unique molecule counts. Derives cell volume, plus growth rate and mass fold-changes over the cell cycle.
Per-tick execution flow · 22 ordered layers
Steps in the same layer see the same starting state (per-layer
atomicity); each layer's writes are reconciled before the next fires.
unique_update flush barriers are omitted for legibility.
Partition → allocate → evolve · 3 partitioned processes
These processes compete for shared bulk molecules. Each is split
into a Requester (computes demand from bulk_total), an
Allocator (partitions the shared pool by priority), and an
Evolver (acts on its allocated share):
ecoli-polypeptide-elongationecoli-rna-degradationecoli-transcript-elongation