8.3. DNA Assemblies, gene expression, transcription, and translation

The central Dogma - namely that DNA is transcribed to mRNA which is translated to proteins - is a key part of modeling many biochemical processes, especially in synthetic biology. Towards enabling easy modeling of transcription and translation in diverse context, BioCRNpyler has a number of Mixtures, Components and Mechanisms to produce models which include the central dogma.

Example 1: Creating a DNAassembly

DNAassembly is a Component consisting of 2 sub Components: Promoter and RBS (ribosome binding site). DNAassembly automatically produces transcription and translation reactions from simple specifications: a DNAassembly X will produce 3 species dna_X, rna_X, and protein_X. These species can also be renamed manually if desired.

[1]:
from biocrnpyler.core import Mixture
from biocrnpyler.components.dna import DNAassembly
from biocrnpyler.mechanisms import SimpleTranscription, SimpleTranslation

#promoter is the name of the promoter or a Promoter component
#RBS is the name of the RBS or an RBS Component
#   RBS = None means there will be no translation
#By default (if transcript and protein are None), the transcript and protein will have the same name as an assembly
#   Users can also assign Species or String names to transcript and protein
G = DNAassembly("X", promoter = "P", rbs = "RBS", transcript = None, protein = None)

#create a transcription and translation Mechanisms.
mech_tx = SimpleTranscription()
mech_tl = SimpleTranslation()

#place that mechanism in a dictionary: {"transcription":mech_tx, "translation":mech_tl}
default_mechanisms = {mech_tx.mechanism_type:mech_tx, mech_tl.mechanism_type:mech_tl}

#Use default parameters for convenience
default_parameters = {"kb":100, "ku":10, "ktx":.5, "ktl":2}
#Create a mixture.
M = Mixture("Catalysis Mixture", components = [G], parameters = default_parameters, mechanisms = default_mechanisms)

print("repr(Mixture) gives a printout of what is in a mixture and what it's Mechanisms are:\n", repr(M),"\n")

#Compile the CRN with Mixture.compile_crn
CRN = M.compile_crn()

print("Pretty_print representation of the CRN:\n",
      CRN.pretty_print(show_rates = True, show_attributes = True, show_materials = True))
repr(Mixture) gives a printout of what is in a mixture and what it's Mechanisms are:
 Mixture: Catalysis Mixture
Components = [
        DNAassembly: X ]
Mechanisms = {
        transcription:simple_transcription
        translation:simple_translation }

Pretty_print representation of the CRN:
 Species(N = 3) = {
    protein[X] (@ 0),
    rna[X] (@ 0),
    dna[X] (@ 0),
}

Reactions (2) = [
0. dna[X] --> dna[X]+rna[X]
 Kf=k_forward * dna_X
  k_forward=0.5
  found_key=(mech=None, partid=None, name=ktx).
  search_key=(mech=simple_transcription, partid=P, name=ktx).

1. rna[X] --> rna[X]+protein[X]
 Kf=k_forward * rna_X
  k_forward=2
  found_key=(mech=None, partid=None, name=ktl).
  search_key=(mech=simple_translation, partid=RBS, name=ktl).

]

Example 2: Placing a DNAassembly in different Cell-like Mixtures for Transcription and Translation

BioCRNpyler contains many pre-built Mixtures to model Transcription and Translation at different levels of detail in different contexts. Cell-like Mixtures are designed to more accurately model the internal environment of a cell.

Cell-Like Mixtures:

ExpressionDilutionMixture uses the Mechanisms: OneStepGeneExpression

  • Genes express in a single step \(G \to G + P_G\).

  • Proteins are degraded: \(P_G \to \emptyset\).

SimpleTxTlDilutionMixture uses the Mechanisms: SimpleTranscription, SimpleTranslation, and Dilution (A global Mechanisms)

  • Genes transcribe via simple catalysis \(G_X \to G_X + T_X\)

  • mRNAs translate via simple catalysis \(T_X \to T_X + P_X\).

  • Proteins and mRNA are degraded/diluted at different rates: \(T_X \to \emptyset\), \(P_X \to \emptyset\).

TxTlDilutionMixture uses the Mechanisms: Transcription_MM, Translation_MM, Degradation_mRNA_MM and Dilution (A global Mechanisms)

  • Genes transcribe via RNApolymerase (RNAP) \(G_X + RNAP \rightleftarrows G_X:RNAP \to G_X + RNAP + T_X\)

  • mRNAs translate via Ribosomes (Ribo) \(T_X + Ribo \rightleftarrows T_X:Ribo \to T_X + Ribo + P_X\)

  • mRNAs are degraded via endonucleases (Endo): \(T_X + Endo \rightleftarrows T_X:Endo \to Endo\)

  • Proteins & mRNA are Diluted: \(P_X \to \emptyset\), \(T_X \to \emptyset\)

  • A Background DNAassembly \(G_{\text{cellular\_processes}}\) puts loading on all the cellular resources.

In the following examples, the parameter file default_parameters.txt will be used to quickly produce more complex models with realistic parameters.

[2]:
from biocrnpyler.mixtures import ExpressionDilutionMixture, SimpleTxTlDilutionMixture, TxTlDilutionMixture
#Changing the promoter and RBS name will result in different parameters
#Here are some parameters loaded into default_parameters.txt
#Promoter Names: strong, medium, weak correspond to bicistronic RBSs: BCD2, BCD8 and BCD12
#RBS Names: strong, medium, Weak correspond to Anderson Promoters: J23100, J23106, and J23103
G = DNAassembly("X", promoter = "strong", rbs = "weak", transcript = None, protein = None)
#Also notice that the names of transcript and protein can be changed, or set to Species.

#Compare the Following Mixtures and Resulting CRNs
M1 = ExpressionDilutionMixture("ExpressionDilution", components = [G], parameter_file = "default_parameters.txt")
CRN1 = M1.compile_crn()
print(repr(M1),"\n", CRN1.pretty_print(show_attributes = True, show_material = True, show_rates = True),"\n\n")

#Components should be re-instantiated before passing them into a new Mixture
G = DNAassembly("X", promoter = "strong", rbs = "weak", transcript = None, protein = None)
M2 = SimpleTxTlDilutionMixture("SimpleTxTl", components = [G], parameter_file = "default_parameters.txt")
CRN2 = M2.compile_crn()
print(repr(M2),"\n", CRN2.pretty_print(show_attributes = True, show_material = True, show_rates = True),"\n\n")

G = DNAassembly("X", promoter = "strong", rbs = "weak", transcript = None, protein = None)
M3 = TxTlDilutionMixture("e coli", components = [G], parameter_file = "default_parameters.txt")

CRN3 = M3.compile_crn()
print(repr(M3),"\n", CRN3.pretty_print(show_attributes = True, show_material = True, show_rates = True),"\n\n")

ExpressionDilutionMixture: ExpressionDilution
Components = [
        DNAassembly: X ]
Mechanisms = {
        transcription:gene_expression
        translation:dummy_translation
        catalysis:basic_catalysis
        binding:one_step_binding }
Global Mechanisms = {
        dilution:dilution }
 Species(N = 2) = {
    protein[X] (@ 0),
    dna[X] (@ 0),
}

Reactions (2) = [
0. dna[X] --> dna[X]+protein[X]
 Kf=k_forward * dna_X
  k_forward=0.28125
  found_key=(mech=gene_expression, partid=None, name=kexpress).
  search_key=(mech=gene_expression, partid=strong, name=kexpress).

1. protein[X] -->
 Kf=k_forward * protein_X
  k_forward=0.001
  found_key=(mech=None, partid=None, name=kdil).
  search_key=(mech=dilution, partid=protein_X, name=kdil).

]


SimpleTxTlDilutionMixture: SimpleTxTl
Components = [
        DNAassembly: X ]
Mechanisms = {
        transcription:simple_transcription
        translation:simple_translation
        catalysis:basic_catalysis
        binding:one_step_binding }
Global Mechanisms = {
        dilution:global_degradation_via_dilution
        rna_degradation:rna_degradation }
 Species(N = 3) = {
    protein[X] (@ 0),
    rna[X] (@ 0),
    dna[X] (@ 0),
}

Reactions (5) = [
0. dna[X] --> dna[X]+rna[X]
 Kf=k_forward * dna_X
  k_forward=0.4775625
  found_key=(mech=simple_transcription, partid=strong, name=ktx).
  search_key=(mech=simple_transcription, partid=strong, name=ktx).

1. rna[X] --> rna[X]+protein[X]
 Kf=k_forward * rna_X
  k_forward=0.06
  found_key=(mech=simple_translation, partid=weak, name=ktl).
  search_key=(mech=simple_translation, partid=weak, name=ktl).

2. rna[X] -->
 Kf=k_forward * rna_X
  k_forward=0.001
  found_key=(mech=None, partid=None, name=kdil).
  search_key=(mech=global_degradation_via_dilution, partid=rna_X, name=kdil).

3. protein[X] -->
 Kf=k_forward * protein_X
  k_forward=0.001
  found_key=(mech=None, partid=None, name=kdil).
  search_key=(mech=global_degradation_via_dilution, partid=protein_X, name=kdil).

4. rna[X] -->
 Kf=k_forward * rna_X
  k_forward=0.001
  found_key=(mech=rna_degradation, partid=None, name=kdil).
  search_key=(mech=rna_degradation, partid=rna_X, name=kdil).

]


TxTlDilutionMixture: e coli
Components = [
        DNAassembly: X
        Protein: RNAP
        Protein: Ribo
        Protein: RNAase
        DNAassembly: cellular_processes ]
Mechanisms = {
        transcription:transcription_mm
        translation:translation_mm
        catalysis:michaelis_menten
        binding:one_step_binding }
Global Mechanisms = {
        rna_degradation:rna_degradation_mm
        dilution:global_degradation_via_dilution }
 Species(N = 17) = {
    protein[Ribo(machinery)] (@ 150.0),
    found_key=(mech=None, partid=e coli, name=Ribo).
    search_key=(mech=initial concentration, partid=e coli, name=Ribo).

    protein[RNAase(machinery)] (@ 45.0),
    found_key=(mech=None, partid=e coli, name=RNAase).
    search_key=(mech=initial concentration, partid=e coli, name=RNAase).

    protein[RNAP(machinery)] (@ 15.0),
    found_key=(mech=None, partid=e coli, name=RNAP).
    search_key=(mech=initial concentration, partid=e coli, name=RNAP).

    protein[cellular_processes] (@ 5.0),
    found_key=(mech=None, partid=e coli, name=cellular_processes).
    search_key=(mech=initial concentration, partid=e coli, name=cellular_processes).

    rna[cellular_processes] (@ 5.0),
    found_key=(mech=None, partid=e coli, name=cellular_processes).
    search_key=(mech=initial concentration, partid=e coli, name=cellular_processes).

    dna[cellular_processes] (@ 5.0),
    found_key=(mech=None, partid=e coli, name=cellular_processes).
    search_key=(mech=initial concentration, partid=e coli, name=cellular_processes).

    complex[protein[Ribo]:rna[cellular_processes]] (@ 0),
    complex[protein[Ribo]:rna[X]] (@ 0),
    complex[protein[RNAase]:rna[cellular_processes]] (@ 0),
    complex[protein[RNAase]:rna[X]] (@ 0),
    complex[dna[cellular_processes]:protein[RNAP]] (@ 0),
    complex[dna[X]:protein[RNAP]] (@ 0),
    complex[complex[protein[Ribo]:rna[cellular_processes]]:protein[RNAase]] (@ 0),
    complex[complex[protein[Ribo]:rna[X]]:protein[RNAase]] (@ 0),
    protein[X] (@ 0),
    rna[X] (@ 0),
    dna[X] (@ 0),
}

Reactions (20) = [
0. dna[X]+protein[RNAP(machinery)] <--> complex[dna[X]:protein[RNAP]]
 Kf=k_forward * dna_X * protein_RNAP_machinery
 Kr=k_reverse * complex_dna_X_protein_RNAP_machinery_
  k_forward=100.0
  found_key=(mech=None, partid=None, name=kb).
  search_key=(mech=transcription_mm, partid=strong, name=kb).
  k_reverse=0.5
  found_key=(mech=None, partid=strong, name=ku).
  search_key=(mech=transcription_mm, partid=strong, name=ku).

1. complex[dna[X]:protein[RNAP]] --> dna[X]+rna[X]+protein[RNAP(machinery)]
 Kf=k_forward * complex_dna_X_protein_RNAP_machinery_
  k_forward=3.926187672
  found_key=(mech=None, partid=strong, name=ktx).
  search_key=(mech=transcription_mm, partid=strong, name=ktx).

2. rna[X]+protein[Ribo(machinery)] <--> complex[protein[Ribo]:rna[X]]
 Kf=k_forward * rna_X * protein_Ribo_machinery
 Kr=k_reverse * complex_protein_Ribo_machinery_rna_X_
  k_forward=100.0
  found_key=(mech=None, partid=None, name=kb).
  search_key=(mech=translation_mm, partid=weak, name=kb).
  k_reverse=5.0
  found_key=(mech=None, partid=weak, name=ku).
  search_key=(mech=translation_mm, partid=weak, name=ku).

3. complex[protein[Ribo]:rna[X]] --> rna[X]+protein[X]+protein[Ribo(machinery)]
 Kf=k_forward * complex_protein_Ribo_machinery_rna_X_
  k_forward=0.05
  found_key=(mech=None, partid=None, name=ktl).
  search_key=(mech=translation_mm, partid=weak, name=ktl).

4. dna[cellular_processes]+protein[RNAP(machinery)] <--> complex[dna[cellular_processes]:protein[RNAP]]
 Kf=k_forward * dna_cellular_processes * protein_RNAP_machinery
 Kr=k_reverse * complex_dna_cellular_processes_protein_RNAP_machinery_
  k_forward=500
  found_key=(mech=transcription, partid=None, name=kb).
  search_key=(mech=transcription_mm, partid=average_promoter, name=kb).
  k_reverse=50
  found_key=(mech=transcription, partid=None, name=ku).
  search_key=(mech=transcription_mm, partid=average_promoter, name=ku).

5. complex[dna[cellular_processes]:protein[RNAP]] --> dna[cellular_processes]+rna[cellular_processes]+protein[RNAP(machinery)]
 Kf=k_forward * complex_dna_cellular_processes_protein_RNAP_machinery_
  k_forward=0.1
  found_key=(mech=transcription, partid=None, name=ktx).
  search_key=(mech=transcription_mm, partid=average_promoter, name=ktx).

6. rna[cellular_processes]+protein[Ribo(machinery)] <--> complex[protein[Ribo]:rna[cellular_processes]]
 Kf=k_forward * rna_cellular_processes * protein_Ribo_machinery
 Kr=k_reverse * complex_protein_Ribo_machinery_rna_cellular_processes_
  k_forward=500
  found_key=(mech=translation, partid=None, name=kb).
  search_key=(mech=translation_mm, partid=average_rbs, name=kb).
  k_reverse=5
  found_key=(mech=translation, partid=None, name=ku).
  search_key=(mech=translation_mm, partid=average_rbs, name=ku).

7. complex[protein[Ribo]:rna[cellular_processes]] --> rna[cellular_processes]+protein[cellular_processes]+protein[Ribo(machinery)]
 Kf=k_forward * complex_protein_Ribo_machinery_rna_cellular_processes_
  k_forward=0.1
  found_key=(mech=translation, partid=None, name=ktl).
  search_key=(mech=translation_mm, partid=average_rbs, name=ktl).

8. complex[protein[Ribo]:rna[X]]+protein[RNAase(machinery)] <--> complex[complex[protein[Ribo]:rna[X]]:protein[RNAase]]
 Kf=k_forward * complex_protein_Ribo_machinery_rna_X_ * protein_RNAase_machinery
 Kr=k_reverse * complex_complex_protein_Ribo_machinery_rna_X__protein_RNAase_machinery_
  k_forward=100.0
  found_key=(mech=None, partid=None, name=kb).
  search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_machinery_rna_X_, name=kb).
  k_reverse=10.0
  found_key=(mech=None, partid=None, name=ku).
  search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_machinery_rna_X_, name=ku).

9. complex[complex[protein[Ribo]:rna[X]]:protein[RNAase]] --> protein[Ribo(machinery)]+protein[RNAase(machinery)]
 Kf=k_forward * complex_complex_protein_Ribo_machinery_rna_X__protein_RNAase_machinery_
  k_forward=0.001
  found_key=(mech=rna_degradation_mm, partid=None, name=kdeg).
  search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_machinery_rna_X_, name=kdeg).

10. rna[cellular_processes]+protein[RNAase(machinery)] <--> complex[protein[RNAase]:rna[cellular_processes]]
 Kf=k_forward * rna_cellular_processes * protein_RNAase_machinery
 Kr=k_reverse * complex_protein_RNAase_machinery_rna_cellular_processes_
  k_forward=100.0
  found_key=(mech=None, partid=None, name=kb).
  search_key=(mech=rna_degradation_mm, partid=rna_cellular_processes, name=kb).
  k_reverse=10.0
  found_key=(mech=None, partid=None, name=ku).
  search_key=(mech=rna_degradation_mm, partid=rna_cellular_processes, name=ku).

11. complex[protein[RNAase]:rna[cellular_processes]] --> protein[RNAase(machinery)]
 Kf=k_forward * complex_protein_RNAase_machinery_rna_cellular_processes_
  k_forward=0.001
  found_key=(mech=rna_degradation_mm, partid=None, name=kdeg).
  search_key=(mech=rna_degradation_mm, partid=rna_cellular_processes, name=kdeg).

12. rna[X]+protein[RNAase(machinery)] <--> complex[protein[RNAase]:rna[X]]
 Kf=k_forward * rna_X * protein_RNAase_machinery
 Kr=k_reverse * complex_protein_RNAase_machinery_rna_X_
  k_forward=100.0
  found_key=(mech=None, partid=None, name=kb).
  search_key=(mech=rna_degradation_mm, partid=rna_X, name=kb).
  k_reverse=10.0
  found_key=(mech=None, partid=None, name=ku).
  search_key=(mech=rna_degradation_mm, partid=rna_X, name=ku).

13. complex[protein[RNAase]:rna[X]] --> protein[RNAase(machinery)]
 Kf=k_forward * complex_protein_RNAase_machinery_rna_X_
  k_forward=0.001
  found_key=(mech=rna_degradation_mm, partid=None, name=kdeg).
  search_key=(mech=rna_degradation_mm, partid=rna_X, name=kdeg).

14. complex[protein[Ribo]:rna[cellular_processes]]+protein[RNAase(machinery)] <--> complex[complex[protein[Ribo]:rna[cellular_processes]]:protein[RNAase]]
 Kf=k_forward * complex_protein_Ribo_machinery_rna_cellular_processes_ * protein_RNAase_machinery
 Kr=k_reverse * complex_complex_protein_Ribo_machinery_rna_cellular_processes__protein_RNAase_machinery_
  k_forward=100.0
  found_key=(mech=None, partid=None, name=kb).
  search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_machinery_rna_cellular_processes_, name=kb).
  k_reverse=10.0
  found_key=(mech=None, partid=None, name=ku).
  search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_machinery_rna_cellular_processes_, name=ku).

15. complex[complex[protein[Ribo]:rna[cellular_processes]]:protein[RNAase]] --> protein[Ribo(machinery)]+protein[RNAase(machinery)]
 Kf=k_forward * complex_complex_protein_Ribo_machinery_rna_cellular_processes__protein_RNAase_machinery_
  k_forward=0.001
  found_key=(mech=rna_degradation_mm, partid=None, name=kdeg).
  search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_machinery_rna_cellular_processes_, name=kdeg).

16. protein[cellular_processes] -->
 Kf=k_forward * protein_cellular_processes
  k_forward=0.001
  found_key=(mech=None, partid=None, name=kdil).
  search_key=(mech=global_degradation_via_dilution, partid=protein_cellular_processes, name=kdil).

17. protein[X] -->
 Kf=k_forward * protein_X
  k_forward=0.001
  found_key=(mech=None, partid=None, name=kdil).
  search_key=(mech=global_degradation_via_dilution, partid=protein_X, name=kdil).

18. rna[cellular_processes] -->
 Kf=k_forward * rna_cellular_processes
  k_forward=0.001
  found_key=(mech=None, partid=None, name=kdil).
  search_key=(mech=global_degradation_via_dilution, partid=rna_cellular_processes, name=kdil).

19. rna[X] -->
 Kf=k_forward * rna_X
  k_forward=0.001
  found_key=(mech=None, partid=None, name=kdil).
  search_key=(mech=global_degradation_via_dilution, partid=rna_X, name=kdil).

]


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

Example 3: Placing a DNAassembly in different Extract-like Mixtures for Transcription and Translation

BioCRNpyler contains many pre-built Mixtures to model Transcription and Translation at different levels of detail in different contexts. Cell-like Mixtures are designed to more accurately model the internal environment of a cell.

Extract-Like Mixtures:

ExpressionDilutionMixture uses the Mechanisms: OneStepGeneExpression

  • Genes express in a single step \(G \to G + P_G\). SimpleTxTlExtract uses the Mechanisms: SimpleTranscription, SimpleTranslation, and Dilution (A global Mechanisms)

  • Genes transcribe via simple catalysis \(G_X \to G_X + T_X\)

  • mRNAs translate via simple catalysis \(T_X \to T_X + P_X\).

  • mRNA are degraded: \(T_X \to \emptyset\)

TxTlExtract uses the Mechanisms: Transcription_MM, Translation_MM, Degradation_mRNA_MM and Dilution (A global Mechanisms)

  • Genes transcribe via RNApolymerase (RNAP) \(G_X + RNAP \rightleftarrows G_X:RNAP \to G_X + RNAP + T_X\)

  • mRNAs translate via Ribosomes (Ribo) \(T_X + Ribo \rightleftarrows T_X:Ribo \to T_X + Ribo + P_X\)

  • mRNAs are degraded via endonucleases (Endo): \(T_X + Endo \rightleftarrows T_X:Endo \to Endo\)

In the following examples, the parameter file default_parameters.txt will be used to quickly produce more complex models with realistic parameters.

[3]:
from biocrnpyler.mixtures import ExpressionExtract, SimpleTxTlExtract, TxTlExtract
#Compare the Following Mixtures and Resulting CRNs

#Components should be re-instantiated before passing them into a new Mixture
G = DNAassembly("X", promoter = "strong", rbs = "weak", transcript = None, protein = None)
M1 = ExpressionExtract("ExpressionExtract", components = [G], parameter_file = "default_parameters.txt")
CRN1 = M1.compile_crn()
print(repr(M1),"\n", CRN1.pretty_print(show_attributes = True, show_material = True, show_rates = True),"\n\n")

G = DNAassembly("X", promoter = "strong", rbs = "weak", transcript = None, protein = None)
M2 = SimpleTxTlExtract("SimpleTxTlExtract", components = [G], parameter_file = "default_parameters.txt")
CRN2 = M2.compile_crn()
print(repr(M2),"\n", CRN2.pretty_print(show_attributes = True, show_material = True, show_rates = True),"\n\n")

G = DNAassembly("X", promoter = "strong", rbs = "weak", transcript = None, protein = None)
M3 = TxTlExtract("e coli extract", components = [G], parameter_file = "default_parameters.txt")
CRN3 = M3.compile_crn()
print(repr(M3),"\n", CRN3.pretty_print(show_attributes = True, show_material = True, show_rates = True),"\n\n")

ExpressionExtract: ExpressionExtract
Components = [
        DNAassembly: X ]
Mechanisms = {
        transcription:gene_expression
        translation:dummy_translation
        catalysis:basic_catalysis
        binding:one_step_binding }
 Species(N = 2) = {
    protein[X] (@ 0),
    dna[X] (@ 0),
}

Reactions (1) = [
0. dna[X] --> dna[X]+protein[X]
 Kf=k_forward * dna_X
  k_forward=0.28125
  found_key=(mech=gene_expression, partid=None, name=kexpress).
  search_key=(mech=gene_expression, partid=strong, name=kexpress).

]


SimpleTxTlExtract: SimpleTxTlExtract
Components = [
        DNAassembly: X ]
Mechanisms = {
        transcription:simple_transcription
        translation:simple_translation
        catalysis:basic_catalysis
        binding:one_step_binding }
Global Mechanisms = {
        rna_degradation:rna_degradation }
 Species(N = 3) = {
    protein[X] (@ 0),
    rna[X] (@ 0),
    dna[X] (@ 0),
}

Reactions (3) = [
0. dna[X] --> dna[X]+rna[X]
 Kf=k_forward * dna_X
  k_forward=0.4775625
  found_key=(mech=simple_transcription, partid=strong, name=ktx).
  search_key=(mech=simple_transcription, partid=strong, name=ktx).

1. rna[X] --> rna[X]+protein[X]
 Kf=k_forward * rna_X
  k_forward=0.06
  found_key=(mech=simple_translation, partid=weak, name=ktl).
  search_key=(mech=simple_translation, partid=weak, name=ktl).

2. rna[X] -->
 Kf=k_forward * rna_X
  k_forward=0.001
  found_key=(mech=rna_degradation, partid=None, name=kdil).
  search_key=(mech=rna_degradation, partid=rna_X, name=kdil).

]


TxTlExtract: e coli extract
Components = [
        DNAassembly: X
        Protein: RNAP
        Protein: Ribo
        Protein: RNAase ]
Mechanisms = {
        transcription:transcription_mm
        translation:translation_mm
        catalysis:michaelis_menten
        binding:one_step_binding }
Global Mechanisms = {
        rna_degradation:rna_degradation_mm }
 Species(N = 10) = {
    protein[Ribo] (@ 24.0),
    found_key=(mech=None, partid=e coli extract, name=protein_Ribo).
    search_key=(mech=initial concentration, partid=e coli extract, name=protein_Ribo).

    protein[RNAase] (@ 6.0),
    found_key=(mech=None, partid=e coli extract, name=protein_RNAase).
    search_key=(mech=initial concentration, partid=e coli extract, name=protein_RNAase).

    protein[RNAP] (@ 3.0),
    found_key=(mech=None, partid=e coli extract, name=protein_RNAP).
    search_key=(mech=initial concentration, partid=e coli extract, name=protein_RNAP).

    complex[protein[Ribo]:rna[X]] (@ 0),
    complex[protein[RNAase]:rna[X]] (@ 0),
    complex[dna[X]:protein[RNAP]] (@ 0),
    complex[complex[protein[Ribo]:rna[X]]:protein[RNAase]] (@ 0),
    protein[X] (@ 0),
    rna[X] (@ 0),
    dna[X] (@ 0),
}

Reactions (8) = [
0. dna[X]+protein[RNAP] <--> complex[dna[X]:protein[RNAP]]
 Kf=k_forward * dna_X * protein_RNAP
 Kr=k_reverse * complex_dna_X_protein_RNAP_
  k_forward=100.0
  found_key=(mech=None, partid=None, name=kb).
  search_key=(mech=transcription_mm, partid=strong, name=kb).
  k_reverse=0.5
  found_key=(mech=None, partid=strong, name=ku).
  search_key=(mech=transcription_mm, partid=strong, name=ku).

1. complex[dna[X]:protein[RNAP]] --> dna[X]+rna[X]+protein[RNAP]
 Kf=k_forward * complex_dna_X_protein_RNAP_
  k_forward=3.926187672
  found_key=(mech=None, partid=strong, name=ktx).
  search_key=(mech=transcription_mm, partid=strong, name=ktx).

2. rna[X]+protein[Ribo] <--> complex[protein[Ribo]:rna[X]]
 Kf=k_forward * rna_X * protein_Ribo
 Kr=k_reverse * complex_protein_Ribo_rna_X_
  k_forward=100.0
  found_key=(mech=None, partid=None, name=kb).
  search_key=(mech=translation_mm, partid=weak, name=kb).
  k_reverse=5.0
  found_key=(mech=None, partid=weak, name=ku).
  search_key=(mech=translation_mm, partid=weak, name=ku).

3. complex[protein[Ribo]:rna[X]] --> rna[X]+protein[X]+protein[Ribo]
 Kf=k_forward * complex_protein_Ribo_rna_X_
  k_forward=0.05
  found_key=(mech=None, partid=None, name=ktl).
  search_key=(mech=translation_mm, partid=weak, name=ktl).

4. rna[X]+protein[RNAase] <--> complex[protein[RNAase]:rna[X]]
 Kf=k_forward * rna_X * protein_RNAase
 Kr=k_reverse * complex_protein_RNAase_rna_X_
  k_forward=100.0
  found_key=(mech=None, partid=None, name=kb).
  search_key=(mech=rna_degradation_mm, partid=rna_X, name=kb).
  k_reverse=10.0
  found_key=(mech=None, partid=None, name=ku).
  search_key=(mech=rna_degradation_mm, partid=rna_X, name=ku).

5. complex[protein[RNAase]:rna[X]] --> protein[RNAase]
 Kf=k_forward * complex_protein_RNAase_rna_X_
  k_forward=0.001
  found_key=(mech=rna_degradation_mm, partid=None, name=kdeg).
  search_key=(mech=rna_degradation_mm, partid=rna_X, name=kdeg).

6. complex[protein[Ribo]:rna[X]]+protein[RNAase] <--> complex[complex[protein[Ribo]:rna[X]]:protein[RNAase]]
 Kf=k_forward * complex_protein_Ribo_rna_X_ * protein_RNAase
 Kr=k_reverse * complex_complex_protein_Ribo_rna_X__protein_RNAase_
  k_forward=100.0
  found_key=(mech=None, partid=None, name=kb).
  search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_rna_X_, name=kb).
  k_reverse=10.0
  found_key=(mech=None, partid=None, name=ku).
  search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_rna_X_, name=ku).

7. complex[complex[protein[Ribo]:rna[X]]:protein[RNAase]] --> protein[Ribo]+protein[RNAase]
 Kf=k_forward * complex_complex_protein_Ribo_rna_X__protein_RNAase_
  k_forward=0.001
  found_key=(mech=rna_degradation_mm, partid=None, name=kdeg).
  search_key=(mech=rna_degradation_mm, partid=complex_protein_Ribo_rna_X_, 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(
/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(
/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(

Example 4: Retroactivity and Loading Using a Custom Promoter Object

Most of the default Mixtures in BioCRNpyler include transcription, translation, and degradation machinery such as RNAP (RNA Polymerase), Ribosomes, and RNAases. In the following example, we will illustrate loading effects due to competition over this machinery. For this example, we will use the following model of constitutive transcription and translation:

\(G_i + \textrm{RNAP} \leftrightarrow G_i:\textrm{RNAP} \rightarrow G_i + \textrm{RNAP} + T_i\)

\(T_i + \textrm{Ribosome} \leftrightarrow T_i:\textrm{Ribosome} \rightarrow T_i + \textrm{Ribosome} + P_i\)

\(T_i + \textrm{RNAase} \leftrightarrow T_i:\textrm{RNAase} \rightarrow \textrm{RNAase}\)

Here \(G_i\), \(T_i\) and \(P_i\) are gene, transcript, and protein \(i\), respectively. In the example that follows, we will allow different RNA polymerases for different genes. Also, some genes may not be translated at all. By using orthogonal polymerases and/or loads without translation, we will see different kinds of loading effects.

We will create 4 different DNA assemblies. The reference assembly, “ref”, will have a RNAP promoter and an RBS. We will examine the output of this reporter as a function of the amount of various load assemblies.

  • The “Load” assembly will be identical to the “ref” assembly; this assembly will put load on all parts of transcription, RNA degradation, and translation for the ref assembly.

  • The “TxLoad” assembly will have an RNAP promoter, but no RBS, ensuring that only RNAP and RNAases experience loading, not ribosomes.

  • The “T7Load” assembly will have a T7 promoter and an RBS so there will be no loading on polymerases.

  • The “T7TxLoad” assembly will have a T7 promoter and no RBS, so there will only be load on the RNAases.

The creation of these assemblies highlights the flexible, object oriented nature of bioCRNpyler.

[4]:
from biocrnpyler.components import Protein, Promoter
from biocrnpyler.mechanisms import Transcription_MM
#Because we are lazy, all parameters will use the default "param_name"-->value key mapping.
#Parameter warnings will be later suppressed in the Mixture constructor
#For details on how parameter loading and defaulting works, see the Parameter notebook.
kb, ku, ktx, ktl, kdeg = 100, 10, 3.0, 5.0, 2
parameters = {"kb":kb, "ku":ku, "ktx":ktx, "ktl":ktl, "kdeg":kdeg}

#A constituitively expressed reporter
#By default the promoter 'P' will use the polymerase 'rnap'
reference_assembly = DNAassembly(name = "ref", promoter = "P", rbs = "BCD")
#A constiuitively expressed load (RNA and Protein)
full_load_assembly = DNAassembly(name = "Load", promoter = "P", rbs = "BCD")
#A constiutively transcribed (but not translated) load
#By putting rbs = None, DNAassembly automatically knows not to include translation
RNA_load_assembly = DNAassembly(name = "TxLoad", promoter = "P", rbs = None)

#Load genes on orthogonal polymerases
T7 = Protein("T7") #Create a new protein (polymerase) called 'T7'

#Create a custom promoter with a custom mechanism that uses T7 instead of RNAP
#instantiate a new mechanism Transcription_MM with its own name and overwrote the default parameter rnap
mechanism_txt7 = Transcription_MM(name = "T7_transcription_mm", rnap=T7.get_species())
#Create an instance of a promoter with this mechanism for transcription
T7P = Promoter("T7P", mechanisms={"transcription":mechanism_txt7})
#Create A load assembly with the custom T7 promoter
T7_load_assembly = DNAassembly(name = "T7Load", promoter = T7P, rbs = "BCD")

#Each new assembly requires its own promoter instance - so here I create another here
T7P = Promoter("T7P", mechanisms={
    "transcription":Transcription_MM(name = "T7_transcription_mm", rnap=T7.get_species())})
#A load assembly with the custom T7 promoter and no RBS
T7RNA_load_assembly = DNAassembly(name = "T7TxLoad", promoter = T7P, rbs = None)

#Add all the assemblies to a mixture
components = [reference_assembly, full_load_assembly, T7_load_assembly, T7, RNA_load_assembly, T7RNA_load_assembly]
myMixture = TxTlExtract(name = "txtl", parameters = parameters, components = components)

#Print the CRN
myCRN = myMixture.compile_crn()

#The Species, Reaction, and CRN pretty_print functions return text which has been formated with a number of formatting options
print("\npretty_print gives a nicely formatted repesentation of the CRNS, reactions, and species. The names of species are formatted for clarity, but are not the actual species representations. Additionally a number of printing options are available.",
      "\n", myCRN.pretty_print(show_material = True, show_rates = True, show_attributes = True, show_keys = False))

#Simulate with BioSCRAPE if installed

print("Simulating")
try:
    %matplotlib inline
    import numpy as np
    import pylab as plt
    timepoints = np.arange(0, 3, .01)
    stochastic = False #Whether to use ODE models or Stochastic SSA models
    plt.figure(figsize = (16, 8))
    plt.subplot(221)
    plt.title("Load on a RNAP Promoter")
    loads = [0, 1.0, 5., 10., 50, 100, 500, 1000]
    for dna_Load in loads:
        #print("Simulating for dna_Load=", dna_Load)
        x0_dict = {"protein_T7": 10., "protein_RNAP":10., "protein_RNAase":5.0, "protein_Ribo":50.,
                   'dna_ref':5., 'dna_Load':dna_Load}

        results = myCRN.simulate_with_bioscrape_via_sbml(timepoints, initial_condition_dict = x0_dict, stochastic = stochastic)
        if results is not None:
            plt.plot(timepoints, results["protein_ref"], label = "Load = "+str(dna_Load))

    plt.xlim(0, 5)
    #plt.xlabel("time")
    plt.ylabel("Reference Protein")
    plt.legend()

    plt.subplot(222)
    plt.title("Load on a T7 Promotoer")
    for dna_Load in loads:
        #print("Simulating for dna_T7Load=", dna_Load)
        x0_dict = {"protein_T7": 10., "protein_RNAP":10., "protein_RNAase":5.0, "protein_Ribo":50.,
                   'dna_ref':5., 'dna_T7Load':dna_Load}
        results = myCRN.simulate_with_bioscrape_via_sbml(timepoints, initial_condition_dict = x0_dict, stochastic = stochastic)
        if results is not None:
            plt.plot(timepoints, results["protein_ref"], label="Load = " + str(dna_Load))
    plt.xlim(0, 5)
    #plt.xlabel("time")
    plt.ylabel("Reference Protein")
    plt.legend()

    plt.subplot(223)
    plt.title("Load on a RNAP Promotoer, No RBS")
    for dna_Load in loads:
        #print("Simulating for dna_TxLoad=", dna_Load)
        x0_dict = {"protein_T7": 10., "protein_RNAP":10., "protein_RNAase":5.0, "protein_Ribo":50.,
                   'dna_ref':5., 'dna_TxLoad':dna_Load}
        results = myCRN.simulate_with_bioscrape_via_sbml(timepoints, initial_condition_dict = x0_dict, stochastic = stochastic)
        if results is not None:
            plt.plot(timepoints, results["protein_ref"], label="Load = " + str(dna_Load))
    plt.xlim(0, 5)
    plt.xlabel("time")
    plt.ylabel("Reference Protein")
    plt.legend()

    plt.subplot(224)
    plt.title("Load on a T7 Promotoer, No RBS")
    for dna_Load in loads:
        #print("Simulating for dna_T7TxLoad=", dna_Load)
        x0_dict = {"protein_T7": 10., "protein_RNAP":10., "protein_RNAase":5.0, "protein_Ribo":50.,
                   'dna_ref':5., 'dna_T7TxLoad':dna_Load}
        results = myCRN.simulate_with_bioscrape_via_sbml(timepoints, initial_condition_dict = x0_dict, stochastic = stochastic)
        if results is not None:
            plt.plot(timepoints, results["protein_ref"], label="Load = " + str(dna_Load))
    plt.xlim(0, 5)
    plt.xlabel("time")
    plt.ylabel("Reference Protein")
    plt.legend()
    plt.show()
except ModuleNotFoundError:
    print('please install the plotting libraries: pip install biocrnpyler[all]')


pretty_print gives a nicely formatted repesentation of the CRNS, reactions, and species. The names of species are formatted for clarity, but are not the actual species representations. Additionally a number of printing options are available.
 Species(N = 33) = {
    protein[ref] (@ 0),
    rna[ref] (@ 0),
    dna[ref] (@ 0),
    complex[protein[Ribo]:rna[ref]] (@ 0),
    complex[protein[Ribo]:rna[T7Load]] (@ 0),
    complex[protein[Ribo]:rna[Load]] (@ 0),
    complex[protein[RNAase]:rna[ref]] (@ 0),
    complex[protein[RNAase]:rna[TxLoad]] (@ 0),
    complex[protein[RNAase]:rna[T7TxLoad]] (@ 0),
    complex[protein[RNAase]:rna[T7Load]] (@ 0),
    complex[protein[RNAase]:rna[Load]] (@ 0),
    complex[dna[ref]:protein[RNAP]] (@ 0),
    complex[dna[TxLoad]:protein[RNAP]] (@ 0),
    complex[dna[T7TxLoad]:protein[T7]] (@ 0),
    complex[dna[T7Load]:protein[T7]] (@ 0),
    complex[dna[Load]:protein[RNAP]] (@ 0),
    complex[complex[protein[Ribo]:rna[ref]]:protein[RNAase]] (@ 0),
    complex[complex[protein[Ribo]:rna[T7Load]]:protein[RNAase]] (@ 0),
    complex[complex[protein[Ribo]:rna[Load]]:protein[RNAase]] (@ 0),
    rna[TxLoad] (@ 0),
    dna[TxLoad] (@ 0),
    rna[T7TxLoad] (@ 0),
    dna[T7TxLoad] (@ 0),
    protein[T7Load] (@ 0),
    rna[T7Load] (@ 0),
    dna[T7Load] (@ 0),
    protein[T7] (@ 0),
    protein[Ribo] (@ 0),
    protein[RNAase] (@ 0),
    protein[RNAP] (@ 0),
    protein[Load] (@ 0),
    rna[Load] (@ 0),
    dna[Load] (@ 0),
}

Reactions (32) = [
0. dna[ref]+protein[RNAP] <--> complex[dna[ref]:protein[RNAP]]
 Kf=k_forward * dna_ref * protein_RNAP
 Kr=k_reverse * complex_dna_ref_protein_RNAP_
  k_forward=100
  k_reverse=10

1. complex[dna[ref]:protein[RNAP]] --> dna[ref]+rna[ref]+protein[RNAP]
 Kf=k_forward * complex_dna_ref_protein_RNAP_
  k_forward=3.0

2. rna[ref]+protein[Ribo] <--> complex[protein[Ribo]:rna[ref]]
 Kf=k_forward * rna_ref * protein_Ribo
 Kr=k_reverse * complex_protein_Ribo_rna_ref_
  k_forward=100
  k_reverse=10

3. complex[protein[Ribo]:rna[ref]] --> rna[ref]+protein[ref]+protein[Ribo]
 Kf=k_forward * complex_protein_Ribo_rna_ref_
  k_forward=5.0

4. dna[Load]+protein[RNAP] <--> complex[dna[Load]:protein[RNAP]]
 Kf=k_forward * dna_Load * protein_RNAP
 Kr=k_reverse * complex_dna_Load_protein_RNAP_
  k_forward=100
  k_reverse=10

5. complex[dna[Load]:protein[RNAP]] --> dna[Load]+rna[Load]+protein[RNAP]
 Kf=k_forward * complex_dna_Load_protein_RNAP_
  k_forward=3.0

6. rna[Load]+protein[Ribo] <--> complex[protein[Ribo]:rna[Load]]
 Kf=k_forward * rna_Load * protein_Ribo
 Kr=k_reverse * complex_protein_Ribo_rna_Load_
  k_forward=100
  k_reverse=10

7. complex[protein[Ribo]:rna[Load]] --> rna[Load]+protein[Load]+protein[Ribo]
 Kf=k_forward * complex_protein_Ribo_rna_Load_
  k_forward=5.0

8. dna[T7Load]+protein[T7] <--> complex[dna[T7Load]:protein[T7]]
 Kf=k_forward * dna_T7Load * protein_T7
 Kr=k_reverse * complex_dna_T7Load_protein_T7_
  k_forward=100
  k_reverse=10

9. complex[dna[T7Load]:protein[T7]] --> dna[T7Load]+rna[T7Load]+protein[T7]
 Kf=k_forward * complex_dna_T7Load_protein_T7_
  k_forward=3.0

10. rna[T7Load]+protein[Ribo] <--> complex[protein[Ribo]:rna[T7Load]]
 Kf=k_forward * rna_T7Load * protein_Ribo
 Kr=k_reverse * complex_protein_Ribo_rna_T7Load_
  k_forward=100
  k_reverse=10

11. complex[protein[Ribo]:rna[T7Load]] --> rna[T7Load]+protein[T7Load]+protein[Ribo]
 Kf=k_forward * complex_protein_Ribo_rna_T7Load_
  k_forward=5.0

12. dna[TxLoad]+protein[RNAP] <--> complex[dna[TxLoad]:protein[RNAP]]
 Kf=k_forward * dna_TxLoad * protein_RNAP
 Kr=k_reverse * complex_dna_TxLoad_protein_RNAP_
  k_forward=100
  k_reverse=10

13. complex[dna[TxLoad]:protein[RNAP]] --> dna[TxLoad]+rna[TxLoad]+protein[RNAP]
 Kf=k_forward * complex_dna_TxLoad_protein_RNAP_
  k_forward=3.0

14. dna[T7TxLoad]+protein[T7] <--> complex[dna[T7TxLoad]:protein[T7]]
 Kf=k_forward * dna_T7TxLoad * protein_T7
 Kr=k_reverse * complex_dna_T7TxLoad_protein_T7_
  k_forward=100
  k_reverse=10

15. complex[dna[T7TxLoad]:protein[T7]] --> dna[T7TxLoad]+rna[T7TxLoad]+protein[T7]
 Kf=k_forward * complex_dna_T7TxLoad_protein_T7_
  k_forward=3.0

16. complex[protein[Ribo]:rna[T7Load]]+protein[RNAase] <--> complex[complex[protein[Ribo]:rna[T7Load]]:protein[RNAase]]
 Kf=k_forward * complex_protein_Ribo_rna_T7Load_ * protein_RNAase
 Kr=k_reverse * complex_complex_protein_Ribo_rna_T7Load__protein_RNAase_
  k_forward=100
  k_reverse=10

17. complex[complex[protein[Ribo]:rna[T7Load]]:protein[RNAase]] --> protein[Ribo]+protein[RNAase]
 Kf=k_forward * complex_complex_protein_Ribo_rna_T7Load__protein_RNAase_
  k_forward=2

18. rna[TxLoad]+protein[RNAase] <--> complex[protein[RNAase]:rna[TxLoad]]
 Kf=k_forward * rna_TxLoad * protein_RNAase
 Kr=k_reverse * complex_protein_RNAase_rna_TxLoad_
  k_forward=100
  k_reverse=10

19. complex[protein[RNAase]:rna[TxLoad]] --> protein[RNAase]
 Kf=k_forward * complex_protein_RNAase_rna_TxLoad_
  k_forward=2

20. rna[T7Load]+protein[RNAase] <--> complex[protein[RNAase]:rna[T7Load]]
 Kf=k_forward * rna_T7Load * protein_RNAase
 Kr=k_reverse * complex_protein_RNAase_rna_T7Load_
  k_forward=100
  k_reverse=10

21. complex[protein[RNAase]:rna[T7Load]] --> protein[RNAase]
 Kf=k_forward * complex_protein_RNAase_rna_T7Load_
  k_forward=2

22. rna[T7TxLoad]+protein[RNAase] <--> complex[protein[RNAase]:rna[T7TxLoad]]
 Kf=k_forward * rna_T7TxLoad * protein_RNAase
 Kr=k_reverse * complex_protein_RNAase_rna_T7TxLoad_
  k_forward=100
  k_reverse=10

23. complex[protein[RNAase]:rna[T7TxLoad]] --> protein[RNAase]
 Kf=k_forward * complex_protein_RNAase_rna_T7TxLoad_
  k_forward=2

24. complex[protein[Ribo]:rna[Load]]+protein[RNAase] <--> complex[complex[protein[Ribo]:rna[Load]]:protein[RNAase]]
 Kf=k_forward * complex_protein_Ribo_rna_Load_ * protein_RNAase
 Kr=k_reverse * complex_complex_protein_Ribo_rna_Load__protein_RNAase_
  k_forward=100
  k_reverse=10

25. complex[complex[protein[Ribo]:rna[Load]]:protein[RNAase]] --> protein[Ribo]+protein[RNAase]
 Kf=k_forward * complex_complex_protein_Ribo_rna_Load__protein_RNAase_
  k_forward=2

26. rna[ref]+protein[RNAase] <--> complex[protein[RNAase]:rna[ref]]
 Kf=k_forward * rna_ref * protein_RNAase
 Kr=k_reverse * complex_protein_RNAase_rna_ref_
  k_forward=100
  k_reverse=10

27. complex[protein[RNAase]:rna[ref]] --> protein[RNAase]
 Kf=k_forward * complex_protein_RNAase_rna_ref_
  k_forward=2

28. rna[Load]+protein[RNAase] <--> complex[protein[RNAase]:rna[Load]]
 Kf=k_forward * rna_Load * protein_RNAase
 Kr=k_reverse * complex_protein_RNAase_rna_Load_
  k_forward=100
  k_reverse=10

29. complex[protein[RNAase]:rna[Load]] --> protein[RNAase]
 Kf=k_forward * complex_protein_RNAase_rna_Load_
  k_forward=2

30. complex[protein[Ribo]:rna[ref]]+protein[RNAase] <--> complex[complex[protein[Ribo]:rna[ref]]:protein[RNAase]]
 Kf=k_forward * complex_protein_Ribo_rna_ref_ * protein_RNAase
 Kr=k_reverse * complex_complex_protein_Ribo_rna_ref__protein_RNAase_
  k_forward=100
  k_reverse=10

31. complex[complex[protein[Ribo]:rna[ref]]:protein[RNAase]] --> protein[Ribo]+protein[RNAase]
 Kf=k_forward * complex_complex_protein_Ribo_rna_ref__protein_RNAase_
  k_forward=2

]
Simulating
../_images/examples_3._DNA_Assemblies_gene_expression_transcription_and_translation_8_1.png
[5]:
# End