A package for fitting and analyzing microbial growth curves.
Project description
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 | models.mech_logistic_model |
mu, K, N0, y0 |
| Mech. Gompertz | models.mech_gompertz_model |
mu, K, N0, y0 |
| Mech. Richards | models.mech_richards_model |
mu, K, N0, beta, y0 |
| Mech. Baranyi | models.mech_baranyi_model |
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 | models.phenom_logistic_model |
A, mu_max, lam, N0 |
| Phenom. Gompertz | models.phenom_gompertz_model |
A, mu_max, lam, N0 |
| Phenom. Gompertz* | models.phenom_gompertz_modified_model |
A, mu_max, lam, alpha, t_shift, N0 |
| Phenom. Richards | models.phenom_richards_model |
A, mu_max, lam, nu, N0 |
Phenomenological models are fitted directly to ln(OD/OD0) data.
Non-parametric methods
| Method | Function | Key parameters |
|---|---|---|
| Spline | non_parametric.fit_non_parametric |
smooth, use_weights |
| Sliding window | non_parametric.fit_non_parametric |
window_points |
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_spline - Calculate specific growth rate: $\mu(t) = \frac{d,s(t)}{dt}$
- Find maximum growth rate: $\mu_{\max} = \max_{t} \mu(t)$
| Parameter | Meaning |
|---|---|
smooth |
"fast", "slow", or manual float lambda value |
use_weights |
Apply OD-dependent weighting (default: True) |
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file growthcurves-0.8.1.tar.gz.
File metadata
- Download URL: growthcurves-0.8.1.tar.gz
- Upload date:
- Size: 184.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f727790049dd3eb390a5cb46e6868c6fde8cf0e42137917760deab84102dfc2c
|
|
| MD5 |
965823e8a781c0d68b4346a78501d3b3
|
|
| BLAKE2b-256 |
38022afd89e00f8f85b7823793d53d2374c5b7ea1a5be8f1d180eb3c31d53591
|
Provenance
The following attestation bundles were made for growthcurves-0.8.1.tar.gz:
Publisher:
cicd.yml on biosustain/growthcurves
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
growthcurves-0.8.1.tar.gz -
Subject digest:
f727790049dd3eb390a5cb46e6868c6fde8cf0e42137917760deab84102dfc2c - Sigstore transparency entry: 1029657907
- Sigstore integration time:
-
Permalink:
biosustain/growthcurves@e0cd2844632c639604a277224e887faac2989462 -
Branch / Tag:
refs/tags/v0.8.1 - Owner: https://github.com/biosustain
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
cicd.yml@e0cd2844632c639604a277224e887faac2989462 -
Trigger Event:
release
-
Statement type: