Chemostats.jl Documentation

Introduction

Chemostats.jl is a package to simulate branching populations in Julia, with a focus on cells and bacteria. It implements state-of-the-art algorithms to efficiently estimate population dynamics at sub-exponential cost.

Features:

This package is experimental - any feedback is appreciated (either by email or by opening an issue on GitHub).

Example

using Catalyst
using Chemostats
using JumpProcesses
using CairoMakie

# Define a reaction network in which ribosomes are produced in a volume-dependent manner
# Time is measured in units
rn = @reaction_network begin
    @species R(t) = 0.
    @variables V(t) = V_d / 2
    @parameters σ = 10. λ = 1. V_d = 2.

    σ * V(t), 0 --> R

    @equations begin
        D(V) ~ λ * R
    end
end 

# A cell divides once it doubles its initial volume. Implemented with a callback.
cb_div = Chemostats.DivideCallback(rn, rn.V ~ rn.V_d)

# This function determines what offspring a dividing cell produces.
function divide(int)
    rand() < 0.1 && return nothing      # Die with probability 1/10

    # Create two cells with half the volume and (roughly) half the ribosomes
    # The model parameters are inherited from the parent cell
    cell_1 = (u0 = (V = int[:V] / 2, R = rand(Binomial(Int(int[:R]), 0.5))), p=nothing)
    cell_2 = (u0 = (V = int[:V] / 2, R = int[:R] - cell_1.u0.R), p=nothing)
    
    cell_1, cell_2
end

prob = ODEProblem(rn, [], (0., 1.); callbacks=cb_div) # tspan here does not matter
cells = DECell[ DECell(prob, divide) ]
chem = Chemostat(cells)

# Simulate population for a day
Chemostats.simulate!(chem, 24 * 60, Chemostats.Strict(10); saveat=0:10:100.)

# The full population would require simulating a lot of cells!
est_Λ(chem)

plot(chem)

See also

Chemostats.jl is designed for efficient estimation of growth rates in cell population models. If simple population simulations are required (corresponding to the Direct algorithm), the following packages may be relevant:

References

  • Giardinà, Kurchan, Peliti. "Direct evaluation of large-deviation functions," Phys. Rev. Lett. 96(12), 2006
  • Lecomte & Tailleur. "A numerical approach to large deviations in continuous time," J. Stat. Mech.: Theory Exp. 2007(3), 2007

Acknowledgments