https://github.com/charlesrocabert/gbapy
Growth Balance Analysis for Python
https://github.com/charlesrocabert/gbapy
constraint-based-modeling growth-balance-analysis metabolic-models non-linear-optimization systems-biology
Last synced: 3 months ago
JSON representation
Growth Balance Analysis for Python
- Host: GitHub
- URL: https://github.com/charlesrocabert/gbapy
- Owner: charlesrocabert
- License: gpl-3.0
- Created: 2024-06-24T13:04:27.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2026-02-26T16:56:01.000Z (4 months ago)
- Last Synced: 2026-02-26T22:55:10.878Z (4 months ago)
- Topics: constraint-based-modeling, growth-balance-analysis, metabolic-models, non-linear-optimization, systems-biology
- Language: Python
- Homepage: https://pypi.org/project/gba/
- Size: 169 MB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
README

Growth Balance Analysis for Python
-----------------
```
pip install gba
```
gbapy is a Python package that provides tools for building and analyzing self-replicating cell (SRC) models based on the growth balance analysis (GBA) mathematical formalism (Dourado et al. 2023).
### Features
The module offers two core components:
- :wrench: A builder class, to construct SRC models of any size from first principles,
- :chart_with_upwards_trend: A model class, to manipulate and optimize models once they are built.
# Typical workflow
```python
from gba import Builder, Model, Protein, Metabolite, Reaction
from gba import SpeciesLocation, ReactionType, ReactionDirection
builder = Builder(name="toy")
### Add model information (ODS sheet 'Info')
builder.add_info(category="General", key="Name", content="toy")
builder.add_info(category="General", key="Description", content="Toy model")
### Create and add proteins (one protein per enzyme per reaction)
### - Masses in Da.
p1 = Protein(id="p1", mass=1000000.0)
p2 = Protein(id="p2", mass=1000000.0)
builder.add_proteins([p1, p2])
### Create and add metabolites:
### - External and internal glucose
### - One generic Protein product
### - Masses in Da.
x_G = Metabolite(id="x_G", species_location=SpeciesLocation.EXTERNAL, mass=180.0)
G = Metabolite(id="G", species_location=SpeciesLocation.INTERNAL, mass=180.0)
Protein = Metabolite(id="Protein", species_location=SpeciesLocation.INTERNAL,mass=180.0)
builder.add_metabolites([x_G, G, Protein])
### Create and add transporter to import glucose:
### - Enzyme is composed of one protein p1
### - Reaction is irreversible
### - kcat values in 1/h
### - KM values in g/L
rxn1 = Reaction(id="rxn1", lb=0.0, ub=1000.0,
reaction_type=ReactionType.TRANSPORT,
metabolites={"x_G":-1.0, "G": 1.0},
proteins={"p1": 1.0})
rxn1.add_kcat_value(direction=ReactionDirection.FORWARD, kcat_value=45000.0)
rxn1.add_km_value(metabolite_id="x_G", km_value=0.00013)
rxn1.complete(kcat_value=0.0, km_value=0.0)
builder.add_reaction(rxn1)
### Create and add ribosome reaction to produce proteins:
### - Enzyme is composed of one protein p2
### - Reaction is irreversible
ribosome = Reaction(id="Ribosome", lb=0.0, ub=1000.0,
reaction_type=ReactionType.METABOLIC,
metabolites={"G":-1.0, "Protein": 1.0},
proteins={"p2": 1.0})
ribosome.add_kcat_value(direction=ReactionDirection.FORWARD, kcat_value=45000.0)
ribosome.add_km_value(metabolite_id="G", km_value=0.00013)
ribosome.complete(kcat_value=0.0, km_value=0.0)
builder.add_reaction(ribosome)
### Convert the model to GBA formalism (cf. Dourado et al. 2023)
builder.convert(ribosome_mass_kcat=4.55, ribosome_mass_km=8.3)
builder.build_GBA_model()
### Set cell's total density (g/L)
builder.set_rho(340.0)
### Create external conditions (in g/L)
x_G_conc = 1.0
for i in range(25):
builder.add_condition(condition_id=str(i+1), metabolites={"x_G": x_G_conc})
x_G_conc *= 2/3
### Save the model to an ODS file
builder.export_to_ods()
```
```python
from gba import read_ods_model
### Load the ODS model
model = read_ods_model(name="toy")
### Find a valid initial solution
model.find_initial_solution()
### Optimize the model for all conditions
model.find_optimum_by_condition()
### Make a plot
model.plot(x="x_G", y="mu", title="Growth rate", logx=True)
### Export optimization data in CSV
model.export_optimization_data()
```
### Reference files
- 🔗 Toy model tutorial,
- 🔗 ODS file,
- 🔗 CSV optimization data.
# Table of contents
- [1) Installation](#installation)
- [1.1) Supported platforms](#supported_platforms)
- [1.2) Dependencies](#dependencies)
- [1.3) Manual installation](#manual_installation)
- [2) Tutorials](#tutorials)
- [3) Documentation](#documentation)
- [4) Contributing](#contributing)
- [5) Copyright](#copyright)
- [6) License](#license)
The easiest way to install gbapy is from PyPI:
```
pip install gba
```
> [!IMPORTANT]
gbacpp software is required to run optimization tasks.
### 1.1) Supported platforms
gbapy has been primilary developed for Unix/Linux and macOS systems.
#### • Software
* gbacpp is required to run optimization tasks.
#### • Licensed Python modules
* The Python API of GUROBI optimizer must be installed and requires a user license (free for academics).
#### • Other Python modules
* NumPy
* pandas
* IPython
* plotly
* cobrapy
* molmass
* Biopython
If you want to install gbapy manually, download the latest release, and save it to a directory of your choice. Open a terminal and use the cd command to navigate to this directory. Then follow the steps below to compile and build the executables.
```
sh install.sh
```
> [!TIP]
> You can later uninstall the module using sh uninstall.sh.
Tutorials coming soon ...
Documentation coming soon ...
If you wish to contribute, do not hesitate to reach the developer.
Copyright © 2024-2026 Charles Rocabert, Furkan Mert.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.