An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          



Growth Balance Analysis for Python




 
PyPI version 
 



    

-----------------

```
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


image

```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()
```


image

```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()
```


image

### 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)

# 1) Installation

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.

### 1.2) Dependencies

#### • 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

### 1.3) Manual installation

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.

# 2) Tutorials


Tutorials coming soon ...

# 3) Documentation


Documentation coming soon ...

# 4) Contributing

If you wish to contribute, do not hesitate to reach the developer.

# 5) Copyright

Copyright © 2024-2026 Charles Rocabert, Furkan Mert.

# 6) License


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/.