growthcurves#
A Python package for fitting and analyzing microbial growth curves.
Supports logistic, Gompertz, and Richards parametric models with automatic growth statistics extraction (specific growth rate, doubling time, phase boundaries) and non-parametric methods (spline fitting and sliding window).
Installation#
pip install growthcurves
For development:
pip install -e ".[dev]"
Quick start#
import growthcurves as gc
import numpy as np
# Example time series (hours) and OD measurements
t = np.linspace(0, 24, 100)
N = 0.01 + 1.5 / (1 + np.exp(-0.5 * (t - 10))) # synthetic logistic data
# Fit a parametric model and extract growth statistics
fit_result = gc.parametric.fit_parametric(t, N, method="mech_logistic")
stats = gc.inference.extract_stats(fit_result, t, N)
print(f"Max OD: {stats['max_od']:.3f}")
print(f"Specific growth rate: {stats['mu_max']:.4f} h⁻¹")
print(f"Doubling time: {stats['doubling_time']:.2f} h")
# Or use a non-parametric spline fit
# smooth: "fast" (auto-default), "slow" (GCV), or a float (manual lambda)
spline_fit = gc.non_parametric.fit_non_parametric(
t, N, method="spline", smooth="fast"
)
spline_stats = gc.inference.extract_stats(spline_fit, t, N)
print(f"\nSpline fit results:")
print(f"Specific growth rate: {spline_stats['mu_max']:.4f} h⁻¹")
print(f"Doubling time: {spline_stats['doubling_time']:.2f} h")
Available models#
Parametric models#
Mechanistic models (ODE-based)#
Model |
Function |
Parameters |
|---|---|---|
Mech. Logistic |
|
mu, K, N0, y0 |
Mech. Gompertz |
|
mu, K, N0, y0 |
Mech. Richards |
|
mu, K, N0, beta, y0 |
Mech. Baranyi |
|
mu, K, N0, h0, y0 |
Mechanistic models are defined as ordinary differential equations (ODEs) and fitted using numerical integration.
Phenomenological models (ln-space)#
Model |
Function |
Parameters |
|---|---|---|
Phenom. Logistic |
|
A, mu_max, lam, N0 |
Phenom. Gompertz |
|
A, mu_max, lam, N0 |
Phenom. Gompertz* |
|
A, mu_max, lam, alpha, t_shift, N0 |
Phenom. Richards |
|
A, mu_max, lam, nu, N0 |
Phenomenological models are fitted directly to ln(OD/OD0) data.
Non-parametric methods#
Method |
Function |
Key parameters |
|---|---|---|
Spline |
|
|
Sliding window |
|
|
The spline method fits a smoothing spline to log-transformed OD data and calculates growth rate from the spline’s derivative. Smoothing is controlled by smooth:
"fast": automatic default lambda rule (fast)"slow": weighted GCV selection (slower)float: manual lambda value
The sliding window method estimates growth rate by fitting a linear regression to log-transformed data within a moving window, identifying the window with maximum slope.
Spline fitting (non-parametric)#
The spline method provides a model-free approach to growth curve analysis by fitting a smoothing spline to log-transformed OD data:
Transform OD data: \(y_{\text{log}} = \ln(N)\)
Fit a cubic smoothing spline \(s(t)\) to \((t, y_{\text{log}})\) using
scipy.interpolate.make_smoothing_splineCalculate specific growth rate: \(\mu(t) = \frac{d\,s(t)}{dt}\)
Find maximum growth rate: \(\mu_{\max} = \max_{t} \mu(t)\)
Parameter |
Meaning |
|---|---|
|
|
|
Apply OD-dependent weighting (default: |
When smooth is a float, higher values produce smoother curves and lower values follow the data more tightly.
Derived growth statistics#
Statistic |
Formula |
|---|---|
Specific growth rate |
\(\mu = \dfrac{1}{N}\dfrac{dN}{dt}\) |
Doubling time |
\(t_d = \dfrac{\ln 2}{\mu_{\max}}\) |
Key features#
Parametric fitting — fit logistic, Gompertz, or Richards models with automatic parameter estimation
Non-parametric methods — model-free growth rate estimation using:
Spline fitting — smoothing splines on log-transformed data with derivative-based growth rate calculation
Sliding window — moving window linear fits to log-transformed data
Growth statistics — automatic extraction of max OD, specific growth rate (µ_max), doubling time, and exponential-phase boundaries
Derivative analysis — first and second derivatives with Savitzky-Golay smoothing
No-growth detection — automatic identification of non-growing samples
Model comparison — RMSE fit-quality metric for comparing fits
Documentation and tutorial#
An interactive tutorial notebook is available at docs/tutorial/analysis.ipynb. It covers model fitting, derivative analysis, parameter extraction, and cross-model comparison using a realistic microbial growth dataset.
Citation#
If you use this package, please cite it as described in CITATION.cff.
License#
GPL-3.0-or-later. See LICENSE.