XanthoMoClo-plasmid-copy-number.pycontains analysis code to quantify plasmid copy numbers presented in Soltysiak, Ory et. al.src/PoissonJoint.pycontains the core logic of estimating the number of targets from a (noisy) serial dilution.
The objective of this tool is to estimate with high confidence the number of targets (viable cells/genomes/detectable targets) from a limiting serial dilution of this starting material. A serial dilution is said to be limiting if we fully dilute out the starting sample, that is, we expect to see empty wells at some point in the dilution.
Serial dilutions are modeled as a Poisson process. We use the fact that for an expected number of events x, the probability of failure to observe an event is given by
Poisson(0 events | x) = e^(-x)
In a serial diution starting from x cells, the Probability of seeing observing any target, i.e. >0 events can thus be written as
Poisson(>0 events | x) = 1- e^(-x)
If we are performing an f fold serial dilution, the process can be represented as
product_i=1^(i=k) (Poisson(growth observed well | x/f^k ) for k serial dilutions.
We construct the Likelihood function as follows
We find the number of cells x that maximizes the Log Likelihood.
Further, using the Cramer-Rao bound, we estimate the variance at the MLE to be
where
Finally, we compute the 95% CI as MLE
See ./test.py