8.12. The TX-TL Toolbox in BioCRNpyler
A recreation of the original MATLAB TxTl Toolbox, as seen in Singhal et al. 2020
This tutorial shows how to use the EnergyTxTlExtract Mixture with a parameter file derived from the paper above. This Mixture is a simplification of the models used in the original toolbox. Notable changes include:
Using only a single nucleotide species NTPs (instead of GTP, ATP, UTP, and CTP)
A slightly different NTP regeneration Mechanism which explicitly incorporates the amount of fuel, 3PGA, put into the extract and metabolic leak of the extract.
Degredation of RNA bound to ribosomes (which releases the ribosome).
A modification of the Energy consumption reactions for Transcription and Translation so that there is only a single binding reaction.
The CRN displayed below shows the energy utilization process model
[1]:
from biocrnpyler.mixtures import EnergyTxTlExtract
#A = DNAassembly("A", promoter = "P", rbs = "rbs")
E = EnergyTxTlExtract(parameter_file = "txtl_toolbox_parameters.txt")
CRN = E.compile_crn()
print(CRN.pretty_print())
try:
import numpy as np
maxtime = 30000
timepoints = np.arange(0, maxtime, 100)
R = CRN.simulate_with_bioscrape_via_sbml(timepoints)
if R is not None:
import pylab as plt
plt.plot(timepoints, R[str(E.ntps.get_species())], label = E.ntps.get_species())
plt.plot(timepoints, R[str(E.amino_acids.get_species())], label = E.amino_acids.get_species())
plt.plot(timepoints, R[str(E.fuel.get_species())], label = E.fuel.get_species())
plt.xticks(np.arange(0, maxtime, 3600), [str(i) for i in range(0, int(np.ceil(maxtime/3600)))])
plt.legend()
except ModuleNotFoundError:
print('please install the plotting libraries: pip install biocrnpyler[all]')
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/core/parameter.py:678: UserWarning: parameter file contains no unit column! Please add a column named ['unit', 'units'].
warn(
Species(N = 7) = {
metabolite[amino_acids] (@ 30.0),
found_key=(mech=initial concentration, partid=None, name=amino_acids).
search_key=(mech=initial concentration, partid=, name=amino_acids).
metabolite[Fuel_3PGA] (@ 30.0),
found_key=(mech=initial concentration, partid=None, name=Fuel_3PGA).
search_key=(mech=initial concentration, partid=, name=Fuel_3PGA).
protein[RNAase] (@ 20.2),
found_key=(mech=initial concentration, partid=None, name=RNAase).
search_key=(mech=initial concentration, partid=, name=RNAase).
metabolite[NTPs] (@ 5.0),
found_key=(mech=initial concentration, partid=None, name=NTPs).
search_key=(mech=initial concentration, partid=, name=NTPs).
protein[Ribo] (@ 0.0273),
found_key=(mech=initial concentration, partid=None, name=protein_Ribo).
search_key=(mech=initial concentration, partid=, name=protein_Ribo).
protein[RNAP] (@ 0.00933),
found_key=(mech=initial concentration, partid=None, name=RNAP).
search_key=(mech=initial concentration, partid=, name=RNAP).
metabolite[NDPs] (@ 0),
}
Reactions (2) = [
0. metabolite[Fuel_3PGA]+metabolite[NDPs] --> metabolite[NTPs]
Kf=k_forward * metabolite_Fuel_3PGA * metabolite_NDPs
k_forward=0.02
found_key=(mech=one_step_pathway, partid=NTPs_production, name=k).
search_key=(mech=one_step_pathway, partid=NTPs_production, name=k).
1. metabolite[NTPs] --> metabolite[NDPs]
Kf=k_forward * metabolite_NTPs
k_forward=1.77e-05
found_key=(mech=one_step_pathway, partid=NTPs_degradation, name=k).
search_key=(mech=one_step_pathway, partid=NTPs_degradation, name=k).
]
Adding a DNA assembly
This will produce protein expression, but for a limited time. The
[2]:
from biocrnpyler.components import DNAassembly
from biocrnpyler.mixtures import EnergyTxTlExtract
import numpy as np
import pylab as plt
A = DNAassembly("A", promoter = "P",
rbs = "rbs")
E = EnergyTxTlExtract(components = [A],
parameter_file = "txtl_toolbox_parameters.txt")
CRN = E.compile_crn()
print(CRN.pretty_print())
try:
maxtime = 30000
timepoints = np.arange(0, maxtime, 100)
# set mrna degradation resource
x0_dict = {E.rnaase.get_species(): 0, A.dna: 1e-6}
R = CRN.simulate_with_bioscrape_via_sbml(timepoints,
initial_condition_dict=x0_dict)
if R is not None:
plt.subplot(121)
plt.plot(timepoints, R[str(E.ntps.get_species())], label = E.ntps.get_species())
plt.plot(timepoints, R[str(E.amino_acids.get_species())], label = E.amino_acids.get_species())
plt.plot(timepoints, R[str(E.fuel.get_species())], label = E.fuel.get_species())
plt.xticks(np.arange(0, maxtime, 3600), [str(i) for i in range(0, int(np.ceil(maxtime/3600)))])
plt.legend()
plt.subplot(122)
plt.plot(timepoints, R[str(A.transcript)], label = A.transcript)
plt.plot(timepoints, R[str(A.protein)], label = A.protein)
plt.xticks(np.arange(0, maxtime, 3600), [str(i) for i in range(0, int(np.ceil(maxtime/3600)))])
plt.legend()
except ModuleNotFoundError:
print('please install the plotting libraries: pip install biocrnpyler[all]')
Species(N = 14) = {
metabolite[amino_acids] (@ 30.0),
found_key=(mech=initial concentration, partid=None, name=amino_acids).
search_key=(mech=initial concentration, partid=, name=amino_acids).
metabolite[Fuel_3PGA] (@ 30.0),
found_key=(mech=initial concentration, partid=None, name=Fuel_3PGA).
search_key=(mech=initial concentration, partid=, name=Fuel_3PGA).
protein[RNAase] (@ 20.2),
found_key=(mech=initial concentration, partid=None, name=RNAase).
search_key=(mech=initial concentration, partid=, name=RNAase).
metabolite[NTPs] (@ 5.0),
found_key=(mech=initial concentration, partid=None, name=NTPs).
search_key=(mech=initial concentration, partid=, name=NTPs).
protein[Ribo] (@ 0.0273),
found_key=(mech=initial concentration, partid=None, name=protein_Ribo).
search_key=(mech=initial concentration, partid=, name=protein_Ribo).
protein[RNAP] (@ 0.00933),
found_key=(mech=initial concentration, partid=None, name=RNAP).
search_key=(mech=initial concentration, partid=, name=RNAP).
complex[protein[Ribo]:rna[A]] (@ 0),
complex[protein[RNAase]:rna[A]] (@ 0),
complex[dna[A]:protein[RNAP]] (@ 0),
complex[complex[protein[Ribo]:rna[A]]:protein[RNAase]] (@ 0),
metabolite[NDPs] (@ 0),
protein[A] (@ 0),
rna[A] (@ 0),
dna[A] (@ 0),
}
Reactions (12) = [
0. dna[A]+protein[RNAP] <--> complex[dna[A]:protein[RNAP]]
Kf=k_forward * dna_A * protein_RNAP
Kr=k_reverse * complex_dna_A_protein_RNAP_
k_forward=4.48
found_key=(mech=energy_transcription_mm, partid=None, name=kb).
search_key=(mech=energy_transcription_mm, partid=P, name=kb).
k_reverse=2.48889e-06
found_key=(mech=energy_transcription_mm, partid=None, name=ku).
search_key=(mech=energy_transcription_mm, partid=P, name=ku).
1. metabolite[NTPs]+complex[dna[A]:protein[RNAP]] --> metabolite[NTPs]+dna[A]+protein[RNAP]+rna[A]
Kf=k_forward * metabolite_NTPs * complex_dna_A_protein_RNAP_
k_forward=0.010833333333333334
2. metabolite[NTPs]+complex[dna[A]:protein[RNAP]] --> complex[dna[A]:protein[RNAP]]
Kf=k_forward * metabolite_NTPs * complex_dna_A_protein_RNAP_
k_forward=3.25
found_key=(mech=energy_transcription_mm, partid=None, name=ktx).
search_key=(mech=energy_transcription_mm, partid=P, name=ktx).
3. rna[A]+protein[Ribo] <--> complex[protein[Ribo]:rna[A]]
Kf=k_forward * rna_A * protein_Ribo
Kr=k_reverse * complex_protein_Ribo_rna_A_
k_forward=0.819
found_key=(mech=energy_translation_mm, partid=None, name=kb).
search_key=(mech=energy_translation_mm, partid=rbs, name=kb).
k_reverse=0.002853659
found_key=(mech=energy_translation_mm, partid=None, name=ku).
search_key=(mech=energy_translation_mm, partid=rbs, name=ku).
4. 4metabolite[NTPs]+metabolite[amino_acids]+complex[protein[Ribo]:rna[A]] --> 4metabolite[NTPs]+metabolite[amino_acids]+rna[A]+protein[Ribo]+protein[A]
Kf=k_forward * metabolite_NTPs^4 * metabolite_amino_acids * complex_protein_Ribo_rna_A_
k_forward=0.192
5. 4metabolite[NTPs]+metabolite[amino_acids]+complex[protein[Ribo]:rna[A]] --> complex[protein[Ribo]:rna[A]]+4metabolite[NDPs]
Kf=k_forward * metabolite_NTPs^4 * metabolite_amino_acids * complex_protein_Ribo_rna_A_
k_forward=19.2
found_key=(mech=energy_translation_mm, partid=None, name=ktl).
search_key=(mech=energy_translation_mm, partid=rbs, name=ktl).
6. metabolite[Fuel_3PGA]+metabolite[NDPs] --> metabolite[NTPs]
Kf=k_forward * metabolite_Fuel_3PGA * metabolite_NDPs
k_forward=0.02
found_key=(mech=one_step_pathway, partid=NTPs_production, name=k).
search_key=(mech=one_step_pathway, partid=NTPs_production, name=k).
7. metabolite[NTPs] --> metabolite[NDPs]
Kf=k_forward * metabolite_NTPs
k_forward=1.77e-05
found_key=(mech=one_step_pathway, partid=NTPs_degradation, name=k).
search_key=(mech=one_step_pathway, partid=NTPs_degradation, name=k).
8. rna[A]+protein[RNAase] <--> complex[protein[RNAase]:rna[A]]
Kf=k_forward * rna_A * protein_RNAase
Kr=k_reverse * complex_protein_RNAase_rna_A_
k_forward=1.0
found_key=(mech=rna_degradation_mm, partid=None, name=kb).
search_key=(mech=rna_degradation_mm, partid=rna_A, name=kb).
k_reverse=1.26582e-06
found_key=(mech=rna_degradation_mm, partid=None, name=ku).
search_key=(mech=rna_degradation_mm, partid=rna_A, name=ku).
9. complex[protein[RNAase]:rna[A]] --> protein[RNAase]
Kf=k_forward * complex_protein_RNAase_rna_A_
k_forward=1.01
found_key=(mech=rna_degradation_mm, partid=None, name=kdeg).
search_key=(mech=rna_degradation_mm, partid=rna_A, name=kdeg).
10. complex[protein[Ribo]:rna[A]]+protein[RNAase] <--> complex[complex[protein[Ribo]:rna[A]]:protein[RNAase]]
Kf=k_forward * complex_protein_Ribo_rna_A_ * protein_RNAase
Kr=k_reverse * complex_complex_protein_Ribo_rna_A__protein_RNAase_
k_forward=1.0
found_key=(mech=rna_degradation_mm, partid=None, name=kb).
search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_rna_A_, name=kb).
k_reverse=1.26582e-06
found_key=(mech=rna_degradation_mm, partid=None, name=ku).
search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_rna_A_, name=ku).
11. complex[complex[protein[Ribo]:rna[A]]:protein[RNAase]] --> protein[Ribo]+protein[RNAase]
Kf=k_forward * complex_complex_protein_Ribo_rna_A__protein_RNAase_
k_forward=1.01
found_key=(mech=rna_degradation_mm, partid=None, name=kdeg).
search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_rna_A_, name=kdeg).
]
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/core/parameter.py:678: UserWarning: parameter file contains no unit column! Please add a column named ['unit', 'units'].
warn(
[3]:
type(A.dna)
[3]:
biocrnpyler.core.species.Species
[4]:
CRN.species
[4]:
[dna_A,
protein_RNAP,
rna_A,
metabolite_NTPs,
complex_dna_A_protein_RNAP_,
metabolite_amino_acids,
protein_Ribo,
protein_A,
complex_protein_Ribo_rna_A_,
protein_RNAase,
metabolite_Fuel_3PGA,
metabolite_NDPs,
complex_protein_RNAase_rna_A_,
complex_complex_protein_Ribo_rna_A__protein_RNAase_]
[5]:
# End