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 = 'mixtures/extract_parameters.tsv')
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]')
Species(N = 8) = {
metabolite[amino_acids] (@ 30000.0),
found_key=(mech=initial concentration, partid=None, name=amino_acids).
search_key=(mech=initial concentration, partid=, name=amino_acids).
metabolite[Fuel_3PGA] (@ 30000.0),
found_key=(mech=initial concentration, partid=None, name=Fuel_3PGA).
search_key=(mech=initial concentration, partid=, name=Fuel_3PGA).
metabolite[NTPs] (@ 5000.0),
found_key=(mech=initial concentration, partid=None, name=NTPs).
search_key=(mech=initial concentration, partid=, name=NTPs).
metabolite[ATP] (@ 5000.0),
found_key=(mech=initial concentration, partid=None, name=ATP).
search_key=(mech=initial concentration, partid=, name=ATP).
protein[Ribo] (@ 10.0),
found_key=(mech=initial concentration, partid=None, name=Ribo).
search_key=(mech=initial concentration, partid=, name=Ribo).
protein[RNAP] (@ 0.5),
found_key=(mech=initial concentration, partid=None, name=RNAP).
search_key=(mech=initial concentration, partid=, name=RNAP).
protein[RNase] (@ 0.25),
found_key=(mech=initial concentration, partid=None, name=RNase).
search_key=(mech=initial concentration, partid=, name=RNase).
metabolite[ADP] (@ 0),
}
Reactions (2) = [
0. metabolite[Fuel_3PGA]+metabolite[ADP] --> metabolite[ATP]
Kf=k_forward * metabolite_Fuel_3PGA * metabolite_ADP
k_forward=0.02
found_key=(mech=one_step_pathway, partid=ATP_production, name=k).
search_key=(mech=one_step_pathway, partid=ATP_production, name=k).
1. metabolite[ATP] --> metabolite[ADP]
Kf=k_forward * metabolite_ATP
k_forward=1.77e-05
found_key=(mech=one_step_pathway, partid=ATP_degradation, name=k).
search_key=(mech=one_step_pathway, partid=ATP_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 = 'mixtures/extract_parameters.tsv')
CRN = E.compile_crn()
print(CRN.pretty_print())
try:
maxtime = 30000
timepoints = np.arange(0, maxtime, 100)
# set mrna degradation resource
x0_dict = {E.rnase.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 = 15) = {
metabolite[amino_acids] (@ 30000.0),
found_key=(mech=initial concentration, partid=None, name=amino_acids).
search_key=(mech=initial concentration, partid=, name=amino_acids).
metabolite[Fuel_3PGA] (@ 30000.0),
found_key=(mech=initial concentration, partid=None, name=Fuel_3PGA).
search_key=(mech=initial concentration, partid=, name=Fuel_3PGA).
metabolite[NTPs] (@ 5000.0),
found_key=(mech=initial concentration, partid=None, name=NTPs).
search_key=(mech=initial concentration, partid=, name=NTPs).
metabolite[ATP] (@ 5000.0),
found_key=(mech=initial concentration, partid=None, name=ATP).
search_key=(mech=initial concentration, partid=, name=ATP).
protein[Ribo] (@ 10.0),
found_key=(mech=initial concentration, partid=None, name=Ribo).
search_key=(mech=initial concentration, partid=, name=Ribo).
protein[RNAP] (@ 0.5),
found_key=(mech=initial concentration, partid=None, name=RNAP).
search_key=(mech=initial concentration, partid=, name=RNAP).
protein[RNase] (@ 0.25),
found_key=(mech=initial concentration, partid=None, name=RNase).
search_key=(mech=initial concentration, partid=, name=RNase).
complex[protein[Ribo]:rna[A]] (@ 0),
complex[protein[RNase]:rna[A]] (@ 0),
complex[dna[A]:protein[RNAP]] (@ 0),
complex[complex[protein[Ribo]:rna[A]]:protein[RNase]] (@ 0),
metabolite[ADP] (@ 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.5e-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=5e-05
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=0.05
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.003
found_key=(mech=energy_translation_mm, partid=None, name=ku).
search_key=(mech=energy_translation_mm, partid=rbs, name=ku).
4. 4metabolite[ATP]+metabolite[amino_acids]+complex[protein[Ribo]:rna[A]] --> 4metabolite[ATP]+metabolite[amino_acids]+rna[A]+protein[Ribo]+protein[A]
Kf=k_forward * metabolite_ATP^4 * metabolite_amino_acids * complex_protein_Ribo_rna_A_
k_forward=0.0001666666666666667
5. 4metabolite[ATP]+metabolite[amino_acids]+complex[protein[Ribo]:rna[A]] --> complex[protein[Ribo]:rna[A]]+4metabolite[ADP]
Kf=k_forward * metabolite_ATP^4 * metabolite_amino_acids * complex_protein_Ribo_rna_A_
k_forward=0.05
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[ADP] --> metabolite[ATP]
Kf=k_forward * metabolite_Fuel_3PGA * metabolite_ADP
k_forward=0.02
found_key=(mech=one_step_pathway, partid=ATP_production, name=k).
search_key=(mech=one_step_pathway, partid=ATP_production, name=k).
7. metabolite[ATP] --> metabolite[ADP]
Kf=k_forward * metabolite_ATP
k_forward=1.77e-05
found_key=(mech=one_step_pathway, partid=ATP_degradation, name=k).
search_key=(mech=one_step_pathway, partid=ATP_degradation, name=k).
8. complex[protein[Ribo]:rna[A]]+protein[RNase] <--> complex[complex[protein[Ribo]:rna[A]]:protein[RNase]]
Kf=k_forward * complex_protein_Ribo_rna_A_ * protein_RNase
Kr=k_reverse * complex_complex_protein_Ribo_rna_A__protein_RNase_
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.25e-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).
9. complex[complex[protein[Ribo]:rna[A]]:protein[RNase]] --> protein[Ribo]+protein[RNase]
Kf=k_forward * complex_complex_protein_Ribo_rna_A__protein_RNase_
k_forward=0.00013
found_key=(mech=rna_degradation_mm, partid=None, name=kdeg).
search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_rna_A_, name=kdeg).
10. rna[A]+protein[RNase] <--> complex[protein[RNase]:rna[A]]
Kf=k_forward * rna_A * protein_RNase
Kr=k_reverse * complex_protein_RNase_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.25e-06
found_key=(mech=rna_degradation_mm, partid=None, name=ku).
search_key=(mech=rna_degradation_mm, partid=rna_A, name=ku).
11. complex[protein[RNase]:rna[A]] --> protein[RNase]
Kf=k_forward * complex_protein_RNase_rna_A_
k_forward=0.00013
found_key=(mech=rna_degradation_mm, partid=None, name=kdeg).
search_key=(mech=rna_degradation_mm, partid=rna_A, name=kdeg).
]
[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_ATP,
metabolite_amino_acids,
protein_Ribo,
protein_A,
complex_protein_Ribo_rna_A_,
protein_RNase,
metabolite_Fuel_3PGA,
metabolite_ADP,
complex_complex_protein_Ribo_rna_A__protein_RNase_,
complex_protein_RNase_rna_A_]
[5]:
# End