A mechanistic simulator of cultured cells under drug, with its errors measured.
Each simulated cell runs a cell-cycle oscillator, the ATM/p53/MDM2 damage response and the intrinsic apoptotic cascade, driven by the drug concentration inside it. Run them well-mixed and a dose-response curve is one simulation; run them on a lattice and a spheroid grows a hypoxic rim and a necrotic core.
Walk into the lab →
A biology lab you explore in first person. Prepare onion, cheek and
pondweed slides and focus the microscope on them, or treat living cancer cells
with a drug, incubate them and compare them with an untreated dish. Those cells
are simulated by this engine, in your browser. Use a computer with a keyboard and
mouse; the first culture dish takes about half a minute to start the engine.
These runs are simulated fresh each time the site is deployed, so they show what the current code produces — not a recording.
The cell simulator needs only NumPy and SciPy:
pip install cellsim
cellsim cell-sim --line A549 --drug cisplatin --hours 72
cellsim dish --line DLD-1 --geometry spheroid --hours 120 \
--cells 3000 --grid 48 --every 8 --out spheroid.jsonl
Then open spheroid.jsonl with the viewer's “Open .jsonl” button.
In a notebook:
from cellsim.api import curve, exposure, washout, spheroid
exposure("A549", "paclitaxel") # concentration needed for half kill
# at each exposure time
It answers questions within a cell line, where the mechanism carries the weight: whether to pulse a drug or hold it, how long a culture takes to recover after wash-out, whether two drugs antagonise, what a schedule selects for, how deep a drug reaches into an aggregate.
It does not predict which cell line is more sensitive. That was measured to be unreachable from the available markers — eleven of them, fitted optimally across 156–683 cell lines, explain 9–20 % of the difference between lines — so it is stated as out of scope rather than attempted.
Every fitted quantity is named and counted: one potency constant per drug, one spatial constant for the dish. Everything else is a literature input cited where it is used. Predictions are compared against public measurements, and the misses are published beside the passes — including two results withdrawn during development when re-measuring showed one rested on a single surviving lineage and the other on one random seed.