thegrowthanalysisapp.streamlit.app
TheGrowthAnalysisApp is a Streamlit-based application for analyzing microbial growth curves from plate reader time-series data. Users upload raw optical density measurements and a plate map, configure analysis parameters, and the app computes baseline-corrected growth statistics including maximum OD, maximum specific growth rate (μ_max), lag time, and exponential phase boundaries across all wells.
The app supports multiple analysis methods:
- Non-parametric methods: Sliding Window and Spline fitting for data-driven analysis
- Parametric models: Logistic, Gompertz, Richards, and Baranyi-Roberts models for theory-driven fitting
Key features include:
- Configurable phase boundary detection with adjustable μ_max thresholds (default 50%)
- Interactive quality control with lasso selection for manual data point selection
- Automatic replicate detection and averaging
- Comprehensive visualization options (OD curves, 1st derivative, specific growth rate μ)
- Bulk export of curated results and publication-ready plots
- Anaconda or Miniconda installed on your system (recommended)
- OR Python 3.9+ with pip
- Git (optional, for cloning the repository)
-
Clone or download the repository
git clone https://github.com/yourusername/TheGrowthAnalysisApp.git cd TheGrowthAnalysisApp -
Create the conda environment
Use the provided
environment.yamlfile to create a conda environment with all required dependencies:conda env create -f environment.yaml
-
Activate the environment
conda activate growth_curves_app_env
-
Clone or download the repository
git clone https://github.com/yourusername/TheGrowthAnalysisApp.git cd TheGrowthAnalysisApp -
Create a virtual environment (optional but recommended)
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies
pip install -r requirements.txt
Launch the Streamlit app:
streamlit run app.pyThe app will automatically open in your default web browser at http://localhost:8501.
- Ensure you're in the project directory when running
streamlit run app.py
- Plate reader data: A time-series table with time in the first column and OD measurements for each well in subsequent columns
- Plate map: A table that maps wells to sample metadata (strain, condition, replicate, etc.)
Sample files are included in the repo:
example_data.xlsxexample_plate_map.xls
Plate reader data (first column must be Time, remaining columns must be wells like A1...H12):
Time | A1 | A2 | A3 | ... | H12
0 | 0.05 | 0.06 | 0.05 | ... | 0.04
12 | 0.08 | 0.09 | 0.07 | ... | 0.06
Plate map (first column must be rows, remaining columns must be numeric 1...12):
rows | 1 | 2 | 3 | ... | 12
A | Sample1_Cond1 | Sample1_Cond2 | BLANK | ... |
B | Sample2_Cond1 | Sample2_Cond2 | | ... |
- Samples with the same name will be treated as replicates
- Use 'BLANK' for blank wells (used for baseline correction)
- Leave cells empty for wells to ignore
- The first '_' is used to split strain and condition labels for visualization
-
Upload files
- Upload your plate reader data file (Excel format)
- Upload your plate map (Excel format)
- Click "Load plate" to validate and store the data
-
Configure preprocessing parameters
- Time unit: Select the unit used in your data file (seconds, minutes, or hours)
- Pathlength: Set the optical pathlength of your plate reader (default: 0.42 cm)
- Time range: Clip the time series to focus on relevant growth phases
- Blank subtraction: Enable to subtract the mean of BLANK wells
- Exclude wells: Manually exclude contaminated or problematic wells
-
Select analysis method
- Sliding Window (non-parametric): Uses a sliding window of data points to calculate growth rate
- Spline (non-parametric): Fits a smoothing spline to the data for flexible curve fitting
- Parametric models: Logistic, Gompertz, Richards, or Baranyi-Roberts models
-
Configure phase boundary detection
- Lag phase cutoff: Fraction of μ_max used to define lag phase end (default: 0.5)
- Exponential phase cutoff: Fraction of μ_max used to define exponential phase end (default: 0.5)
- Higher values = more conservative phase detection
-
Set 'No Growth' thresholds
- Minimum data points required
- Minimum signal-to-noise ratio
- Minimum growth rate threshold
-
Click "Update parameters and analyse selected plate"
- View individual well growth curves with fitted parameters
- Toggle log scale to view exponential growth more clearly
- Toggle annotations to show/hide phase boundaries and growth metrics
- Interactive lasso selection: Click and drag on the plot to select specific data points for re-analysis
- Adjust phase boundaries using sliders
- Set maximum OD manually if needed
- Mark wells as "No Growth" to exclude from analysis
- Re-analyse individual wells with current settings
- Exclude wells from the analysis entirely
- Navigate between wells using arrow buttons or keyboard shortcuts (Left/Right arrows)
The page displays three plots:
- Main growth curve with annotations (OD vs Time)
- 1st derivative (dOD/dt vs Time)
- Specific growth rate (μ vs Time)
Plate Overviews
- View all wells in a 96-well plate layout
- Color-coded by growth metrics or sample groups
Create Visualizations
- Generate publication-ready plots
- Compare replicates and conditions
- Customize plot appearance
Export options include:
Tabulated Data
- Baseline-corrected time series (CSV)
- Growth statistics per well (CSV)
- Growth statistics averaged per sample (CSV)
- Analysis parameters used (CSV)
Global Plots
- Baseline plot (blank well measurements)
- Plate view (96-well overview)
- Replicates plot (grouped by sample name)
Well Level Plots
- OD growth curves with annotations
- 1st Derivative (dOD/dt)
- Specific growth rate (μ)
Annotation Options
- Phase boundaries
- Time at μ_max
- OD at μ_max
- Maximum OD
- μ_max point
- Fitted model curve
All exports are packaged in a single ZIP file for easy download.
Sliding Window
- Slides a fixed-size window across the growth curve
- Fits a linear regression to log-transformed OD at each position
- Maximum slope = μ_max
Spline
- Fits a smoothing spline to log-transformed OD
- Derivative of spline gives growth rate at each time point
- More flexible and smoother than sliding window
Logistic
- Classic S-shaped curve with symmetric inflection point
- Most commonly used for microbial growth
Gompertz
- Asymmetric S-curve
- Often fits bacterial growth better than logistic
Richards
- Generalized logistic with shape parameter
- Most flexible, use when other models don't fit well
Baranyi-Roberts
- Mechanistic model with physiological lag parameter
- Accounts for cell adaptation during lag phase
All methods use the same approach:
- Lag phase end: First time point where μ exceeds the threshold (default: 50% of μ_max)
- Exponential phase end: First time point after μ_max where μ drops below threshold (default: 50% of μ_max)
The threshold is configurable and affects how conservatively phase transitions are detected.
- Start with the example files to validate the workflow before using your own data
- If uploads fail, confirm your files are Excel-compatible and have consistent well names
- Use the "Check Growth Fits" page to quality-control your results before export
- Higher phase boundary thresholds (closer to 0.5) give more conservative phase detection
- Lower phase boundary thresholds (closer to 0.1) detect transitions earlier
- The lasso selection tool is useful for excluding outliers or focusing on specific growth phases
- Python 3.9+
- streamlit
- pandas
- numpy
- scipy
- plotly
- openpyxl (for Excel file handling)
- xlrd (for .xls file support)
- growthcurves (core analysis package)
- streamlit_sortables
- streamlit-aggrid
See requirements.txt or environment.yaml for specific versions.
MIT
t.b.d
For issues, questions, or feature requests, please open an issue on the GitHub repository.