Chemical reaction network and systems biology interface for scientific machine learning (SciML). High performance, GPU-parallelized, and O(1) solvers in open source software
ReactionSystems can be used to generate ModelingToolkit-based models, allowing the easy simulation and parameter estimation of mass action ODE models, Chemical Langevin SDE models, stochastic chemical kinetics jump process models, and more. Generated models can be used with solvers throughout the broader SciML ecosystem, including higher level SciML packages (e.g. for sensitivity analysis, parameter estimation, machine learning applications, etc).
Breaking changes and new functionality are summarized in the HISTORY.md file.
A short 15 minute overview of Catalyst as of version 6 is available in the talk Modeling Biochemical Systems with Catalyst.jl.
ReactionSystems provide a symbolic representation of reaction networks, built on ModelingToolkit.jl and Symbolics.jl.
ReactionSystems generated by the DSL can be converted to a variety of
ModelingToolkit.AbstractSystems, including symbolic ODE, SDE, and jump process representations.
EnsembleProblems for carrying out parallelized parameter sweeps and statistical sampling. Plot recipes are available for visualizing the solutions.
Exprs can be obtained for all rate laws and functions determining the deterministic and stochastic terms within resulting ODE, SDE, or jump models.
ReactionSystems can be imported from SBML files via SBMLToolkit.jl, and from BioNetGen .net files and various matrix network representations using ReactionNetworkImporters.jl.
rs = @reaction_network begin c1, S + E --> SE c2, SE --> S + E c3, SE --> P + E end c1 c2 c3 p = (0.00166,0.0001,0.1) # [c1,c2,c3] tspan = (0., 100.) u0 = [301., 100., 0., 0.] # [S,E,SE,P]
dprob = DiscreteProblem(rs, species(rs) .=> u0, tspan, parameters(rs) .=> p) jprob = JumpProblem(rs, dprob, Direct()) jsol = solve(jprob, SSAStepper()) plot(jsol,lw=2,title="Gillespie: Michaelis-Menten Enzyme Kinetics")
using Catalyst, Plots, StochasticDiffEq, DiffEqJump rs = @reaction_network begin c1, X --> 2X c2, X --> 0 c3, 0 --> X end c1 c2 c3 p = (1.0,2.0,50.) # [c1,c2,c3] tspan = (0.,10.) u0 = [5.] # [X] sprob = SDEProblem(rs, species(rs) .=> u0, tspan, parameters(rs) .=> p) ssol = solve(sprob, LambaEM(), reltol=1e-3) plot(ssol,lw=2,title="Adaptive SDE: Birth-Death Process")