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:

  1. Using only a single nucleotide species NTPs (instead of GTP, ATP, UTP, and CTP)

  2. A slightly different NTP regeneration Mechanism which explicitly incorporates the amount of fuel, 3PGA, put into the extract and metabolic leak of the extract.

  3. Degredation of RNA bound to ribosomes (which releases the ribosome).

  4. 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).

]
../_images/examples_5._TX-TL_Toolbox_1_2.png

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(
../_images/examples_5._TX-TL_Toolbox_3_2.png
[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