8.14. Transport models in BioCRNpyler
Integration of membrane protein, transport of substrates, and two-component sensing using BioCRNpyler membrane components and mechanism
Consider the following substrate transport steps:
Expression of membrane protein: G + EnergyTXTL \(\rightarrow\) membrane_protein (MP)
Integration of membrane protein in membrane: MP \(\rightarrow\) integral_membrane_protein (IMP)
Diffusion, transport across membrane, or a memebrane sensor
Types of membrane transport mechanisms: To create these models, we need to express the membrane protein. Next, we need to identify the membrane protein monomer, indicate the membrane transport mechanism, and its transport direction. If the protein functions as part of a two-component sensor (TCS), no transport activity will occur but the membrane sensor will auto-phosphorylate and subsequently phosphorylation the response protein.
Packages
[1]:
from biocrnpyler import *
# import bioscrape
import numpy as np
%matplotlib inline
import bokeh.io
import bokeh.plotting
bokeh.io.output_notebook()
from bokeh.themes import Theme
from bokeh.layouts import row
# Modules needed from Bokeh.
from bokeh.io import output_file, show
from bokeh.plotting import gridplot,figure
from bokeh.models import LinearAxis, Range1d
color=bokeh.palettes.Accent[6]
from bokeh.io import export_png
[2]:
# Function with some standard Bokeh plot settings
def create_custom_plot(title_text, x_max=8,y_max=2, yname=None):
custom_plot = figure(
toolbar_location='right',
outline_line_color=None,
min_border_right=10,
height=400,
width=400,
)
custom_plot.title.text = title_text
custom_plot.xaxis.axis_label = 'Time (hours)'
custom_plot.yaxis.axis_label = yname
custom_plot.y_range = Range1d(0, y_max)
custom_plot.x_range = Range1d(0, x_max)
custom_plot.outline_line_color = None
# custom_plot.yaxis
custom_plot.ygrid.visible = False
custom_plot.yaxis.axis_label_text_font_size = '15pt'
custom_plot.yaxis.major_label_text_font_size = '15pt'
custom_plot.yaxis.major_label_text_font = 'Work Sans'
custom_plot.yaxis.axis_label_standoff = 15
custom_plot.yaxis.axis_label_text_font_style = 'normal'
# custom_plot.xaxis
custom_plot.xgrid.visible = False
custom_plot.xaxis.axis_label_text_font_size = '15pt'
custom_plot.xaxis.major_label_text_font_size = '15pt'
custom_plot.xaxis.major_label_text_font = 'Work Sans'
custom_plot.xaxis.axis_label_standoff = 15
custom_plot.xaxis.axis_label_text_font_style = 'normal'
# custom_plot.title
custom_plot.title.text_font_size = '18pt'
custom_plot.title.align = 'left'
custom_plot.title.offset = -50.0
return custom_plot
Example 0: Simple diffusion thorugh membrane (membrane permeable)
Consider the following diffusion step:
Diffusion of small molecules (i.e. Nitrate):
\[\begin{aligned} NO3_\text{internal} \rightleftharpoons NO3_\text{external} \end{aligned}\]
Define diffusible molecule
[3]:
from biocrnpyler.components import DiffusibleMolecule
from biocrnpyler.mechanisms import Simple_Diffusion
NO3 = DiffusibleMolecule('NO3')
# Mechanisms
mech_tra = Simple_Diffusion()
tra_mechanisms = {mech_tra.mechanism_type:mech_tra}
# Create mixture
M0= Mixture("Default Param Pathway", components = [NO3],
parameter_file = "membrane_toolbox_parameters.txt",
mechanisms = tra_mechanisms)
# Compile the CRN with Mixture.compile_crn
CRN0 = M0.compile_crn()
# print(CRN0.pretty_print(show_rates = True, show_attributes = True, show_materials = True, show_keys = False))
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/core/parameter.py:1550: UserWarning: parameter file contains no unit column! Please add a column named ['unit', 'units'].
warn(
[4]:
# Simulate CRN
try:
import bioscrape
import bokeh
except ModuleNotFoundError:
print('please install the plotting libraries: pip install biocrnpyler[all]')
else:
import numpy as np
import pandas as pd
maxtime = 300000
timepoints = np.arange(0, maxtime, 100)
#Inital conditions
x0_dict= {'NO3_Internal':2}
#Run Simulation
R = CRN0.simulate_with_bioscrape_via_sbml(timepoints = timepoints, initial_condition_dict = x0_dict)
#Plot NO3 diffusion
p2 = create_custom_plot("NO3 Diffusion", x_max=8,y_max= 2, yname='NO3 (uM)')
p2.line(timepoints/3600, R['NO3_Internal'], line_width = 3, color=color[0], legend_label='Internal')
p2.line(timepoints/3600, R['NO3_External'], line_width = 3, color=color[2],legend_label='External',line_dash = 'dashed')
# Display the layout
show(p2)
Example 1: Integration of membrane protein (monomer) and simple transport by a membrane channel (ex. IPTG and \(\alpha\)-hemolysin)
Consider the following substrate transport steps:
Expression of \(\alpha\)HL protein (monomer):
\[\begin{aligned} \text{DNA}_{\alpha HL} + \text{TXTL}_{Energy} \rightarrow \text{$\alpha$HL}_\text{monomer} \end{aligned}\]Assemble into a homoheptamer:
\[\begin{aligned} 7 \text{$\alpha$HL}_\text{monomer} \rightarrow \text{$\alpha$HL}_\text{homoheptamer} \end{aligned}\]Integration of membrane protein in membrane:
\[\begin{aligned} \text{$\alpha$HL}_\text{homoheptamer} \rightarrow \text{$\alpha$HL}_\text{channel} \end{aligned}\]Diffusion of small molecules (i.e. ATP) across membrane:
\[\begin{aligned} \text{ATP}_\text{internal} + \text{$\alpha$HL}_\text{channel} \rightleftharpoons \text{ATP}_\text{external} + \text{$\alpha$HL}_\text{channel} \end{aligned}\]
Identify the membrane protein monomer
[5]:
from biocrnpyler import *
alphaHL_monomer = IntegralMembraneProtein('alphaHL_monomer', product='alphaHL', size=7)
#Mechanisms
mech_int = Membrane_Protein_Integration()
int_mechanisms = {mech_int.mechanism_type:mech_int}
#Create mixture
M1 = Mixture("Default Param Pathway", components = [alphaHL_monomer],
parameter_file = "membrane_toolbox_parameters.txt",
mechanisms = int_mechanisms)
# Compile the CRN with Mixture.compile_crn
CRN1 = M1.compile_crn()
print(CRN1.pretty_print(show_rates = True,
show_attributes = True,
show_materials = True,
show_keys = False))
Species(N = 3) = {
complex[7x_protein[alphaHL_monomer]] (@ 0),
protein[alphaHL_monomer] (@ 0),
protein[alphaHL(Passive)] (@ 0),
}
Reactions (2) = [
0. 7protein[alphaHL_monomer] <--> complex[7x_protein[alphaHL_monomer]]
Kf=k_forward * protein_alphaHL_monomer_Internal^7
Kr=k_reverse * complex_protein_alphaHL_monomer_7x_Internal_
k_forward=0.002
k_reverse=2e-10
1. complex[7x_protein[alphaHL_monomer]] --> protein[alphaHL(Passive)]
Kf = k complex[7x_protein[alphaHL_monomer]] / ( 1 + (protein[alphaHL(Passive)]/K)^4 )
k=10.0
K=0.5
n=4
]
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/core/parameter.py:1550: UserWarning: parameter file contains no unit column! Please add a column named ['unit', 'units'].
warn(
Define membrane channel and transport mechanism
Internal and external fractions of the substrate are created
[6]:
alphaHL_channel = MembraneChannel(alphaHL_monomer.product, substrate='ATP')
#Mechanisms
mech_tra = Simple_Transport()
tra_mechanisms = {mech_tra.mechanism_type:mech_tra}
# Create mixture
M2 = Mixture("Default Param Pathway", components = [alphaHL_channel],
parameter_file = "membrane_toolbox_parameters.txt", mechanisms = tra_mechanisms)
# Compile the CRN with Mixture.compile_crn
CRN2 = M2.compile_crn()
print(CRN2.pretty_print(show_rates = True, show_attributes = True,
show_materials = True, show_keys = False))
Species(N = 3) = {
protein[alphaHL(Passive)] (@ 0),
ATP (@ 0),
ATP (@ 0),
}
Reactions (1) = [
0. ATP+protein[alphaHL(Passive)] <--> ATP+protein[alphaHL(Passive)]
Kf=k_forward * ATP_Internal * protein_alphaHL_Passive_Membrane
Kr=k_reverse * ATP_External * protein_alphaHL_Passive_Membrane
k_forward=0.1
k_reverse=0.1
]
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/core/parameter.py:1550: UserWarning: parameter file contains no unit column! Please add a column named ['unit', 'units'].
warn(
[7]:
display(CRN2)
Species = protein_alphaHL_Passive_Membrane, ATP_Internal, ATP_External
Reactions = [
ATP+protein[alphaHL(Passive)] <--> ATP+protein[alphaHL(Passive)]
]
Activatable expression of \(\alpha\)HL protein (monomer)
[8]:
compartment_internal = alphaHL_monomer.get_species().compartment
activator = Species("T7RNAP", compartment=compartment_internal)
#Create a custom set of parameters
hill_parameters = {"k":1.0, "n":4, "K":20, "kleak":0.0001}
P_activatable = ActivatablePromoter("P_activtable", activator = activator, leak = False,
parameters = hill_parameters)
#Create a DNA assembly "reporter" with P_activatable for its promoter
activatable_assembly = DNAassembly("activatable_assembly",
promoter = P_activatable,
rbs = "rbs",
initial_concentration = 1*10**-3,
protein= alphaHL_monomer.membrane_protein,
compartment=compartment_internal)
all_mechanisms = {mech_tra.mechanism_type:mech_tra, mech_int.mechanism_type:mech_int}
E = EnergyTxTlExtract(components=[activatable_assembly, alphaHL_monomer, alphaHL_channel],
mechanisms = all_mechanisms,
parameter_file = "all_parameters.txt",
compartment=compartment_internal)
CRN = E.compile_crn()
print(CRN.pretty_print(show_rates = True, show_attributes = True,
show_materials = True, show_keys = False))
CRN.write_sbml_file('alphaHL_transport_model.xml')
Species(N = 18) = {
metabolite[amino_acids] (@ 30.0),
metabolite[Fuel_3PGA] (@ 30.0),
protein[RNAase] (@ 20.2),
metabolite[NTPs] (@ 5.0),
protein[Ribo] (@ 0.0273),
protein[RNAP] (@ 0.00933),
rna[activatable_assembly] (@ 0.001),
dna[activatable_assembly] (@ 0.001),
complex[7x_protein[alphaHL_monomer]] (@ 0),
complex[protein[Ribo]:rna[activatable_assembly]] (@ 0),
complex[protein[RNAase]:rna[activatable_assembly]] (@ 0),
complex[complex[protein[Ribo]:rna[activatable_assembly]]:protein[RNAase]] (@ 0),
protein[alphaHL_monomer] (@ 0),
protein[alphaHL(Passive)] (@ 0),
T7RNAP (@ 0),
metabolite[NDPs] (@ 0),
ATP (@ 0),
ATP (@ 0),
}
Reactions (13) = [
0. dna[activatable_assembly] --> dna[activatable_assembly]+rna[activatable_assembly]
Kf = k dna[activatable_assembly] T7RNAP^n / ( K^n + T7RNAP^n )
k=1.0
K=20
n=4
1. rna[activatable_assembly]+protein[Ribo] <--> complex[protein[Ribo]:rna[activatable_assembly]]
Kf=k_forward * rna_activatable_assembly_Internal * protein_Ribo_Internal
Kr=k_reverse * complex_protein_Ribo_rna_activatable_assembly_Internal_
k_forward=0.819
k_reverse=0.002853659
2. 4metabolite[NTPs]+metabolite[amino_acids]+complex[protein[Ribo]:rna[activatable_assembly]] --> 4metabolite[NTPs]+metabolite[amino_acids]+rna[activatable_assembly]+protein[Ribo]+protein[alphaHL_monomer]
Kf=k_forward * metabolite_NTPs_Internal^4 * metabolite_amino_acids_Internal * complex_protein_Ribo_rna_activatable_assembly_Internal_
k_forward=0.192
3. 4metabolite[NTPs]+metabolite[amino_acids]+complex[protein[Ribo]:rna[activatable_assembly]] --> complex[protein[Ribo]:rna[activatable_assembly]]+4metabolite[NDPs]
Kf=k_forward * metabolite_NTPs_Internal^4 * metabolite_amino_acids_Internal * complex_protein_Ribo_rna_activatable_assembly_Internal_
k_forward=19.2
4. 7protein[alphaHL_monomer] <--> complex[7x_protein[alphaHL_monomer]]
Kf=k_forward * protein_alphaHL_monomer_Internal^7
Kr=k_reverse * complex_protein_alphaHL_monomer_7x_Internal_
k_forward=0.002
k_reverse=2e-10
5. complex[7x_protein[alphaHL_monomer]] --> protein[alphaHL(Passive)]
Kf = k complex[7x_protein[alphaHL_monomer]] / ( 1 + (protein[alphaHL(Passive)]/K)^4 )
k=10.0
K=0.5
n=4
6. ATP+protein[alphaHL(Passive)] <--> ATP+protein[alphaHL(Passive)]
Kf=k_forward * ATP_Internal * protein_alphaHL_Passive_Membrane
Kr=k_reverse * ATP_External * protein_alphaHL_Passive_Membrane
k_forward=0.1
k_reverse=0.1
7. metabolite[Fuel_3PGA]+metabolite[NDPs] --> metabolite[NTPs]
Kf=k_forward * metabolite_Fuel_3PGA_Internal * metabolite_NDPs_Internal
k_forward=0.02
8. metabolite[NTPs] --> metabolite[NDPs]
Kf=k_forward * metabolite_NTPs_Internal
k_forward=1.77e-05
9. rna[activatable_assembly]+protein[RNAase] <--> complex[protein[RNAase]:rna[activatable_assembly]]
Kf=k_forward * rna_activatable_assembly_Internal * protein_RNAase_Internal
Kr=k_reverse * complex_protein_RNAase_rna_activatable_assembly_Internal_
k_forward=1.0
k_reverse=1.26582e-06
10. complex[protein[RNAase]:rna[activatable_assembly]] --> protein[RNAase]
Kf=k_forward * complex_protein_RNAase_rna_activatable_assembly_Internal_
k_forward=1.01
11. complex[protein[Ribo]:rna[activatable_assembly]]+protein[RNAase] <--> complex[complex[protein[Ribo]:rna[activatable_assembly]]:protein[RNAase]]
Kf=k_forward * complex_protein_Ribo_rna_activatable_assembly_Internal_ * protein_RNAase_Internal
Kr=k_reverse * complex_complex_protein_Ribo_rna_activatable_assembly__protein_RNAase_Internal_
k_forward=1.0
k_reverse=1.26582e-06
12. complex[complex[protein[Ribo]:rna[activatable_assembly]]:protein[RNAase]] --> protein[Ribo]+protein[RNAase]
Kf=k_forward * complex_complex_protein_Ribo_rna_activatable_assembly__protein_RNAase_Internal_
k_forward=1.01
]
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/utils/units.py:151: UserWarning: The string identifier for the unit None is not supported by BioCRNpyler. Add this to the dictionary in biocrnpyler/units.py if you want this unit.
warnings.warn(
[8]:
True
[9]:
display(CRN)
Species = dna_activatable_assembly_Internal, T7RNAP_Internal, rna_activatable_assembly_Internal, protein_alphaHL_monomer_Internal, metabolite_NTPs_Internal, metabolite_amino_acids_Internal, protein_Ribo_Internal, complex_protein_Ribo_rna_activatable_assembly_Internal_, protein_alphaHL_Passive_Membrane, complex_protein_alphaHL_monomer_7x_Internal_, ATP_Internal, ATP_External, protein_RNAP_Internal, protein_RNAase_Internal, metabolite_Fuel_3PGA_Internal, metabolite_NDPs_Internal, complex_protein_RNAase_rna_activatable_assembly_Internal_, complex_complex_protein_Ribo_rna_activatable_assembly__protein_RNAase_Internal_
Reactions = [
dna[activatable_assembly] --> dna[activatable_assembly]+rna[activatable_assembly]
rna[activatable_assembly]+protein[Ribo] <--> complex[protein[Ribo]:rna[activatable_assembly]]
4metabolite[NTPs]+metabolite[amino_acids]+complex[protein[Ribo]:rna[activatable_assembly]] --> 4metabolite[NTPs]+metabolite[amino_acids]+rna[activatable_assembly]+protein[Ribo]+protein[alphaHL_monomer]
4metabolite[NTPs]+metabolite[amino_acids]+complex[protein[Ribo]:rna[activatable_assembly]] --> complex[protein[Ribo]:rna[activatable_assembly]]+4metabolite[NDPs]
7protein[alphaHL_monomer] <--> complex[7x_protein[alphaHL_monomer]]
complex[7x_protein[alphaHL_monomer]] --> protein[alphaHL(Passive)]
ATP+protein[alphaHL(Passive)] <--> ATP+protein[alphaHL(Passive)]
metabolite[Fuel_3PGA]+metabolite[NDPs] --> metabolite[NTPs]
metabolite[NTPs] --> metabolite[NDPs]
rna[activatable_assembly]+protein[RNAase] <--> complex[protein[RNAase]:rna[activatable_assembly]]
complex[protein[RNAase]:rna[activatable_assembly]] --> protein[RNAase]
complex[protein[Ribo]:rna[activatable_assembly]]+protein[RNAase] <--> complex[complex[protein[Ribo]:rna[activatable_assembly]]:protein[RNAase]]
complex[complex[protein[Ribo]:rna[activatable_assembly]]:protein[RNAase]] --> protein[Ribo]+protein[RNAase]
]
[10]:
# Simulate CRN
try:
import bioscrape
import bokeh
except ModuleNotFoundError:
print('please install the plotting libraries: pip install biocrnpyler[all]')
else:
from biocrnpyler import *
import numpy as np
import pandas as pd
maxtime = 300000
timepoints = np.arange(0, maxtime, 100)
#Inital conditions
# x0_dict= {'small_molecule_T7RNAP':120, alphaHL_channel.product:5,}
x0_dict= {'T7RNAP_Internal':120, 'ATP_External':4.5,
'ATP_Internal':0.5}
#Run Simulation
R = CRN.simulate_with_bioscrape_via_sbml(timepoints = timepoints,
initial_condition_dict = x0_dict)
#Plot alpha-hemolysin protien and the multiple configurations
p2 = create_custom_plot("alpha-hemolysin Expression", x_max=8,y_max= .014, yname='monomer (uM)')
p2.line(timepoints/3600, R['protein_alphaHL_monomer_Internal'], line_width = 3, line_alpha=.5, color=color[1], legend_label='monomer')
p2.line(timepoints/3600, R['complex_protein_alphaHL_monomer_7x_Internal_'], line_width = 3, line_alpha=.5, color=color[4], legend_label='polymer')
p2.line(timepoints/3600, R['protein_alphaHL_Passive_Membrane'], line_width = 3, line_alpha=.5, color=color[5], legend_label='channel')
#Plot the transport of substrate ATP
p3 = create_custom_plot("Passive Transport of ATP", x_max=18,y_max= 5, yname='ATP (uM)')
p3.line(timepoints/3600, R['ATP_Internal'], line_width = 3, legend_label = "Internal", color=color[0])
p3.line(timepoints/3600, R['ATP_External'], line_width = 3, legend_label = "External", color=color[2], line_dash = 'dashed')
# Arrange the plots in a row layout
layout = row(p2, p3)
# Display the layout
show(layout) # Display the layout
Example 2: Integration of membrane protein (homdimer) and facilitated transport by a membrane carrier (ex. glucose and GLUT1)
GLUT1: A Facilitated Passive Diffusion Protein modeled as a monomer (though can form dimers and tetrameter)
Consider the following substrate transport steps:
Expression of GLUT1 protein (monomer):
\[\begin{aligned} \text{DNA}_\text{GLUT1} + \text{TXTL}_\text{Energy} \rightarrow \text{GLUT1}_\text{monomer} \end{aligned}\]Integration of membrane protein in membrane:
\[\begin{aligned} \text{GLUT1}_\text{monomer} \rightarrow \text{GLUT1}_\text{channel} \end{aligned}\]Binding and transport of glucose across membrane:
\[\begin{aligned} \text{glucose}_\text{external} + \text{GLUT1}_\text{channel} \rightarrow \text{glucose}_\text{external}:\text{GLUT1}_\text{channel} \rightarrow \text{glucose}_\text{internal}:\text{GLUT1}_{channel} \end{aligned}\]Unbinding glucose from transporter:
\[\begin{aligned} \text{glucose}_\text{internal}:\text{GLUT1}_\text{channel} \rightarrow \text{glucose}_\text{internal} + \text{GLUT1}_\text{channel} \end{aligned}\]
Identify the membrane protein monomer
[11]:
glut1 = IntegralMembraneProtein('glut1', product='glut1_channel',
direction='Importer', size= 1)
#Mechanisms
mech_int = Membrane_Protein_Integration()
int_mechanisms = {mech_int.mechanism_type:mech_int}
#Create mixture
M1= Mixture("Default Param Pathway", components = [glut1],
mechanisms = int_mechanisms,
parameter_file = "membrane_toolbox_parameters.txt")
#Compile the CRN with Mixture.compile_crn
CRN1 = M1.compile_crn()
print(CRN1.pretty_print(show_rates = True, show_attributes = True, show_materials = True, show_keys = False))
Species(N = 2) = {
protein[glut1_channel(Importer)] (@ 0),
protein[glut1] (@ 0),
}
Reactions (1) = [
0. protein[glut1] --> protein[glut1_channel(Importer)]
Kf = k protein[glut1] / ( 1 + (protein[glut1_channel(Importer)]/K)^4 )
k=10.0
K=0.5
n=4
]
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/core/parameter.py:1550: UserWarning: parameter file contains no unit column! Please add a column named ['unit', 'units'].
warn(
Define membrane channel and transport mechanism
Internal and external fractions of the substrate are created
[12]:
glut1_channel = MembraneChannel(glut1.product, substrate='glucose')
#Mechanisms
mech_tra = Facilitated_Transport_MM()
tra_mechanisms = {mech_tra.mechanism_type:mech_tra}
#Create mixture
M2 = Mixture("Default Param Pathway",
components = [glut1_channel],
mechanisms = tra_mechanisms,
parameter_file = "membrane_toolbox_parameters.txt")
# print("repr(Mixture) gives a printout of what is in a mixture and what it's Mechanisms are:\n", repr(M2),"\n")
# #Compile the CRN with Mixture.compile_crn
CRN2 = M2.compile_crn()
print(CRN2.pretty_print(show_rates = True,
show_attributes = True,
show_materials = True,
show_keys = False))
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/core/parameter.py:1550: UserWarning: parameter file contains no unit column! Please add a column named ['unit', 'units'].
warn(
Species(N = 5) = {
protein[glut1_channel(Importer)] (@ 0),
complex[glucose:protein[glut1_channel]] (@ 0),
complex[glucose:protein[glut1_channel]] (@ 0),
glucose (@ 0),
glucose (@ 0),
}
Reactions (4) = [
0. glucose+protein[glut1_channel(Importer)] --> complex[glucose:protein[glut1_channel]]
kb_subMC * glucose_External * protein_glut1_channel_Importer_Membrane * Heaviside(glucose_External-glucose_Internal) - kb_subMC * glucose_Internal * protein_glut1_channel_Importer_Membrane * Heaviside(glucose_External-glucose_Internal)
kb_subMC=0.1
1. complex[glucose:protein[glut1_channel]] --> protein[glut1_channel(Importer)]+glucose
Kf=k_forward * complex_glucose_External_protein_glut1_channel_Importer_Membrane_
k_forward=0.1
2. complex[glucose:protein[glut1_channel]] --> complex[glucose:protein[glut1_channel]]
Kf=k_forward * complex_glucose_External_protein_glut1_channel_Importer_Membrane_
k_forward=0.01
3. complex[glucose:protein[glut1_channel]] --> glucose+protein[glut1_channel(Importer)]
Kf=k_forward * complex_glucose_Internal_protein_glut1_channel_Importer_Membrane_
k_forward=0.1
]
Activatable expression of GLUT1 protein (monomer)
[13]:
compartment_internal = glut1.get_species().compartment
#ActivatedPromoter
activator = Species("T7RNAP", compartment=compartment_internal)
#Create a custom set of parameters
hill_parameters = {"k":1.0, "n":4, "K":20, "kleak":0.0001}
P_activatable = ActivatablePromoter("P_activtable", activator = activator,
leak = False, parameters = hill_parameters)
#Create a DNA assembly "reporter" with P_activatable for its promoter
activatable_assembly = DNAassembly("activatable_assembly", promoter = P_activatable,
rbs = "rbs", initial_concentration = 1*10**-3,
protein= glut1.membrane_protein,
compartment=compartment_internal)
all_mechanisms = {mech_tra.mechanism_type:mech_tra, mech_int.mechanism_type:mech_int}
E = EnergyTxTlExtract(components=[activatable_assembly, glut1, glut1_channel],
mechanisms = all_mechanisms,
parameter_file = "all_parameters.txt",
compartment=compartment_internal)
CRN = E.compile_crn()
CRN.write_sbml_file('glut1_transport_model.xml')
print(CRN2.pretty_print(show_rates = True, show_attributes = True,
show_materials = True, show_keys = False))
Species(N = 5) = {
protein[glut1_channel(Importer)] (@ 0),
complex[glucose:protein[glut1_channel]] (@ 0),
complex[glucose:protein[glut1_channel]] (@ 0),
glucose (@ 0),
glucose (@ 0),
}
Reactions (4) = [
0. glucose+protein[glut1_channel(Importer)] --> complex[glucose:protein[glut1_channel]]
kb_subMC * glucose_External * protein_glut1_channel_Importer_Membrane * Heaviside(glucose_External-glucose_Internal) - kb_subMC * glucose_Internal * protein_glut1_channel_Importer_Membrane * Heaviside(glucose_External-glucose_Internal)
kb_subMC=0.1
1. complex[glucose:protein[glut1_channel]] --> protein[glut1_channel(Importer)]+glucose
Kf=k_forward * complex_glucose_External_protein_glut1_channel_Importer_Membrane_
k_forward=0.1
2. complex[glucose:protein[glut1_channel]] --> complex[glucose:protein[glut1_channel]]
Kf=k_forward * complex_glucose_External_protein_glut1_channel_Importer_Membrane_
k_forward=0.01
3. complex[glucose:protein[glut1_channel]] --> glucose+protein[glut1_channel(Importer)]
Kf=k_forward * complex_glucose_Internal_protein_glut1_channel_Importer_Membrane_
k_forward=0.1
]
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/utils/units.py:151: UserWarning: The string identifier for the unit None is not supported by BioCRNpyler. Add this to the dictionary in biocrnpyler/units.py if you want this unit.
warnings.warn(
[14]:
# Simulate CRN
try:
import bioscrape
import bokeh
except ModuleNotFoundError:
print('please install the plotting libraries: pip install biocrnpyler[all]')
else:
from biocrnpyler import *
import numpy as np
import pandas as pd
maxtime = 300000
timepoints = np.arange(0, maxtime, 100)
#Inital conditions
# x0_dict= {'small_molecule_T7RNAP':1.2,'glucose_External':0,'glucose_Internal':5}
# x0_dict= {'small_molecule_T7RNAP':1.2,'glucose_External':8,'glucose_Internal':5}
x0_dict= {'T7RNAP_Internal':120,
'glucose_External':5,
'glucose_Internal':0}
#Run Simulation
R = CRN.simulate_with_bioscrape_via_sbml(timepoints = timepoints, initial_condition_dict = x0_dict)
#Plot GLUT1 protein and the multiple configurations
p2 =create_custom_plot("glut1 Expression", x_max=8,y_max= .1, yname='monomer (uM)')
p2.line(timepoints/3600, R['protein_glut1_Internal'], line_width = 3, line_alpha=.5, color=color[1], legend_label='monomer')
p2.line(timepoints/3600, R['protein_glut1_channel_Importer_Membrane'], line_width = 3, line_alpha=.5,color=color[4],legend_label='channel')
#Plot the transport of substrate Glucose
p3 =create_custom_plot("Facilitated Transport of Glucose", x_max=18,y_max= 5, yname='Glucose (uM)')
p3.line(timepoints/3600, R['glucose_Internal'], line_width = 3, legend_label = "Internal", color=color[0])
p3.line(timepoints/3600, R['glucose_External'], line_width = 3, legend_label = "External", color=color[2], line_dash = 'dashed')
# Arrange the plots in a row layout
layout = row(p2, p3)
# Display the layout
show(layout) # Display the layout
Example 3: Integration of membrane protein (homodimer) and active transport by a membrane pump (ex. antibiotic and MsbA)
Consider the following substrate transport steps:
Expression of MsbA protein (monomer):
\[\begin{aligned} \text{DNA}_\text{MsbA} + \text{TXTL}_\text{Energy} \rightarrow \text{MsbA}_\text{monomer} \end{aligned}\]Assemble into a homodimer:
\[\begin{aligned} 2 \text{MsbA}_\text{monomer} \rightarrow \text{MsbA}_\text{homodimer} \end{aligned}\]Integration of membrane protein in membrane:
\[\begin{aligned} \text{MsbA}_\text{homodimer} \rightarrow \text{MsbA}_\text{exporter} \end{aligned}\]Binding of antibiotic (Abx) substrate (i.e. erythromycin) to MsbA transporter:
\[\begin{aligned} \text{Abx}_\text{internal}+ \text{MsbA}_\text{exporter} \rightleftharpoons \text{Abx}_\text{internal}:\text{MsbA}_\text{exporter} \end{aligned}\]Binding of ATP to complex of erythromycin with MsbA:
\[\begin{aligned} 2 \text{ATP}_\text{internal} + \text{Abx}_\text{internal}:\text{MsbA}_\text{exporter} \rightleftharpoons 2 \text{ATP}_\text{internal}:\text{Abx}_\text{internal}: \text{MsbA}_\text{exporter} \end{aligned}\]Export of erythromycin lipid from inner membrane to outer membrane:
\[\begin{aligned} 2 \text{ATP}_\text{internal}:\text{Abx}_\text{internal}:\text{MsbA}_\text{exporter} \rightarrow 2 \text{ATP}_\text{internal}:\text{Abx}_\text{external}:\text{MsbA}_\text{transporter} \end{aligned}\]Unbinding of erythromycin:
\[\begin{aligned} 2 \text{ATP}_\text{internal}:\text{Abx}_\text{external}:\text{MsbA}_\text{exporter} \rightarrow 2 \text{ADP}_\text{internal}:\text{MsbA}_\text{exporter} + \text{Abx}_\text{external} \end{aligned}\]Unbinding of ADP with MsbA:
\[\begin{aligned} 2 \text{ADP}_\text{internal}:\text{MsbA}_\text{exporter} \rightarrow 2 \text{ADP}_\text{internal}:\text{MsbA}_\text{exporter} \end{aligned}\]
Identify the membrane protein monomer
[15]:
MsbA_monomer = IntegralMembraneProtein('MsbA_monomer',
product='MsbA_pump', size=2,
direction='Exporter')
#Mechanisms
mech_int = Membrane_Protein_Integration() #cant be 0
int_mechanisms = {mech_int.mechanism_type:mech_int}
#Create mixture
M1= Mixture("Default Param Pathway", components = [MsbA_monomer],
parameter_file = "membrane_toolbox_parameters.txt",
mechanisms = int_mechanisms)
#Compile the CRN with Mixture.compile_crn
CRN1 = M1.compile_crn()
print(CRN1.pretty_print(show_rates = True, show_attributes = True,
show_materials = True, show_keys = False))
Species(N = 3) = {
complex[2x_protein[MsbA_monomer]] (@ 0),
protein[MsbA_pump(Exporter)] (@ 0),
protein[MsbA_monomer] (@ 0),
}
Reactions (2) = [
0. 2protein[MsbA_monomer] <--> complex[2x_protein[MsbA_monomer]]
Kf=k_forward * protein_MsbA_monomer_Internal^2
Kr=k_reverse * complex_protein_MsbA_monomer_2x_Internal_
k_forward=0.002
k_reverse=2e-10
1. complex[2x_protein[MsbA_monomer]] --> protein[MsbA_pump(Exporter)]
Kf = k complex[2x_protein[MsbA_monomer]] / ( 1 + (protein[MsbA_pump(Exporter)]/K)^4 )
k=10.0
K=0.5
n=4
]
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/core/parameter.py:1550: UserWarning: parameter file contains no unit column! Please add a column named ['unit', 'units'].
warn(
Define membrane channel and transport mechanism
Internal and external fractions of the substrate are created
[16]:
MsbA_pump=MembranePump(MsbA_monomer.product, substrate='Abx', ATP=2)
#Mechanisms
mech_tra = Primary_Active_Transport_MM()
tra_mechanisms = {mech_tra.mechanism_type:mech_tra}
#Create mixture
M2= Mixture("Default Param Pathway", components = [MsbA_pump],
mechanisms = tra_mechanisms,
parameter_file = "membrane_toolbox_parameters.txt")
#Compile the CRN with Mixture.compile_crn
CRN2 = M2.compile_crn()
print(CRN2.pretty_print(show_rates = True, show_attributes = True,
show_materials = True, show_keys = False))
Species(N = 9) = {
complex[protein[MsbA_pump]:2x_small_molecule[ADP]] (@ 0),
complex[complex[Abx:protein[MsbA_pump]]:2x_small_molecule[ATP]] (@ 0),
protein[MsbA_pump(Exporter)] (@ 0),
complex[Abx:protein[MsbA_pump]] (@ 0),
complex[Abx:protein[MsbA_pump]:2x_small_molecule[ATP]] (@ 0),
Abx (@ 0),
Abx (@ 0),
small_molecule[ATP] (@ 0),
small_molecule[ADP] (@ 0),
}
Reactions (7) = [
0. Abx+protein[MsbA_pump(Exporter)] --> complex[Abx:protein[MsbA_pump]]
kb_subMP * Abx_Internal * protein_MsbA_pump_Exporter_Membrane * Heaviside(protein_MsbA_pump_Exporter_Membrane)
kb_subMP=0.1
1. complex[Abx:protein[MsbA_pump]] --> Abx+protein[MsbA_pump(Exporter)]
Kf=k_forward * complex_Abx_Internal_protein_MsbA_pump_Exporter_Membrane_
k_forward=0.1
2. complex[Abx:protein[MsbA_pump]]+2small_molecule[ATP] --> complex[complex[Abx:protein[MsbA_pump]]:2x_small_molecule[ATP]]
kb_subMPnATP*complex_Abx_Internal_protein_MsbA_pump_Exporter_Membrane_*small_molecule_ATP_Internal*Heaviside(complex_Abx_Internal_protein_MsbA_pump_Exporter_Membrane_)
kb_subMPnATP=0.1
3. complex[complex[Abx:protein[MsbA_pump]]:2x_small_molecule[ATP]] --> complex[Abx:protein[MsbA_pump]]+2small_molecule[ATP]
Kf=k_forward * complex_complex_Abx_Internal_protein_MsbA_pump_Exporter__small_molecule_ATP_Internal_2x_Membrane_
k_forward=0.01
4. complex[complex[Abx:protein[MsbA_pump]]:2x_small_molecule[ATP]] --> complex[Abx:protein[MsbA_pump]:2x_small_molecule[ATP]]
Kf=k_forward * complex_complex_Abx_Internal_protein_MsbA_pump_Exporter__small_molecule_ATP_Internal_2x_Membrane_
k_forward=0.01
5. complex[Abx:protein[MsbA_pump]:2x_small_molecule[ATP]] --> complex[protein[MsbA_pump]:2x_small_molecule[ADP]]+Abx
Kf=k_forward * complex_Abx_External_protein_MsbA_pump_Exporter_small_molecule_ATP_Internal_2x_Membrane_
k_forward=0.1
6. complex[protein[MsbA_pump]:2x_small_molecule[ADP]] --> 2small_molecule[ADP]+protein[MsbA_pump(Exporter)]
Kf=k_forward * complex_protein_MsbA_pump_Exporter_small_molecule_ADP_Internal_2x_Membrane_
k_forward=0.1
]
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/core/parameter.py:1550: UserWarning: parameter file contains no unit column! Please add a column named ['unit', 'units'].
warn(
Activatable expression of MsbA protein (monomer)
[17]:
compartment_internal = MsbA_monomer.get_species().compartment
#ActivatedPromoter
activator = Species("T7RNAP", compartment=compartment_internal)
#Create a custom set of parameters
hill_parameters = {"k":1.0, "n":4, "K":20, "kleak":0.0001}
P_activatable = ActivatablePromoter("P_activtable",
activator = activator,
leak = False,
parameters = hill_parameters)
#Create a DNA assembly "reporter" with P_activatable for its promoter
activatable_assembly = DNAassembly("activatable_assembly",
promoter = P_activatable,
rbs = "rbs", initial_concentration = 1*10**-3,
protein= MsbA_monomer.membrane_protein,
compartment=compartment_internal)
# print(CRN.pretty_print())
all_mechanisms = {mech_tra.mechanism_type:mech_tra, mech_int.mechanism_type:mech_int}
E = EnergyTxTlExtract(components=[activatable_assembly, MsbA_monomer, MsbA_pump],
mechanisms = all_mechanisms,
parameter_file = "all_parameters.txt",
compartment=compartment_internal)
CRN = E.compile_crn()
print(CRN.pretty_print(show_rates = True, show_attributes = True,
show_materials = True, show_keys = False))
CRN.write_sbml_file('MsbA_transport_model.xml')
Species(N = 24) = {
metabolite[amino_acids] (@ 30.0),
metabolite[Fuel_3PGA] (@ 30.0),
protein[RNAase] (@ 20.2),
metabolite[NTPs] (@ 5.0),
protein[Ribo] (@ 0.0273),
protein[RNAP] (@ 0.00933),
rna[activatable_assembly] (@ 0.001),
dna[activatable_assembly] (@ 0.001),
complex[protein[Ribo]:rna[activatable_assembly]] (@ 0),
complex[protein[RNAase]:rna[activatable_assembly]] (@ 0),
complex[protein[MsbA_pump]:2x_small_molecule[ADP]] (@ 0),
complex[2x_protein[MsbA_monomer]] (@ 0),
complex[complex[protein[Ribo]:rna[activatable_assembly]]:protein[RNAase]] (@ 0),
complex[complex[Abx:protein[MsbA_pump]]:2x_small_molecule[ATP]] (@ 0),
T7RNAP (@ 0),
metabolite[NDPs] (@ 0),
protein[MsbA_pump(Exporter)] (@ 0),
protein[MsbA_monomer] (@ 0),
complex[Abx:protein[MsbA_pump]] (@ 0),
complex[Abx:protein[MsbA_pump]:2x_small_molecule[ATP]] (@ 0),
Abx (@ 0),
Abx (@ 0),
small_molecule[ATP] (@ 0),
small_molecule[ADP] (@ 0),
}
Reactions (19) = [
0. dna[activatable_assembly] --> dna[activatable_assembly]+rna[activatable_assembly]
Kf = k dna[activatable_assembly] T7RNAP^n / ( K^n + T7RNAP^n )
k=1.0
K=20
n=4
1. rna[activatable_assembly]+protein[Ribo] <--> complex[protein[Ribo]:rna[activatable_assembly]]
Kf=k_forward * rna_activatable_assembly_Internal * protein_Ribo_Internal
Kr=k_reverse * complex_protein_Ribo_rna_activatable_assembly_Internal_
k_forward=0.819
k_reverse=0.002853659
2. 4metabolite[NTPs]+metabolite[amino_acids]+complex[protein[Ribo]:rna[activatable_assembly]] --> 4metabolite[NTPs]+metabolite[amino_acids]+rna[activatable_assembly]+protein[Ribo]+protein[MsbA_monomer]
Kf=k_forward * metabolite_NTPs_Internal^4 * metabolite_amino_acids_Internal * complex_protein_Ribo_rna_activatable_assembly_Internal_
k_forward=0.192
3. 4metabolite[NTPs]+metabolite[amino_acids]+complex[protein[Ribo]:rna[activatable_assembly]] --> complex[protein[Ribo]:rna[activatable_assembly]]+4metabolite[NDPs]
Kf=k_forward * metabolite_NTPs_Internal^4 * metabolite_amino_acids_Internal * complex_protein_Ribo_rna_activatable_assembly_Internal_
k_forward=19.2
4. 2protein[MsbA_monomer] <--> complex[2x_protein[MsbA_monomer]]
Kf=k_forward * protein_MsbA_monomer_Internal^2
Kr=k_reverse * complex_protein_MsbA_monomer_2x_Internal_
k_forward=0.002
k_reverse=2e-10
5. complex[2x_protein[MsbA_monomer]] --> protein[MsbA_pump(Exporter)]
Kf = k complex[2x_protein[MsbA_monomer]] / ( 1 + (protein[MsbA_pump(Exporter)]/K)^4 )
k=10.0
K=0.5
n=4
6. Abx+protein[MsbA_pump(Exporter)] --> complex[Abx:protein[MsbA_pump]]
kb_subMP * Abx_Internal * protein_MsbA_pump_Exporter_Membrane * Heaviside(protein_MsbA_pump_Exporter_Membrane)
kb_subMP=0.1
7. complex[Abx:protein[MsbA_pump]] --> Abx+protein[MsbA_pump(Exporter)]
Kf=k_forward * complex_Abx_Internal_protein_MsbA_pump_Exporter_Membrane_
k_forward=0.1
8. complex[Abx:protein[MsbA_pump]]+2small_molecule[ATP] --> complex[complex[Abx:protein[MsbA_pump]]:2x_small_molecule[ATP]]
kb_subMPnATP*complex_Abx_Internal_protein_MsbA_pump_Exporter_Membrane_*small_molecule_ATP_Internal*Heaviside(complex_Abx_Internal_protein_MsbA_pump_Exporter_Membrane_)
kb_subMPnATP=0.1
9. complex[complex[Abx:protein[MsbA_pump]]:2x_small_molecule[ATP]] --> complex[Abx:protein[MsbA_pump]]+2small_molecule[ATP]
Kf=k_forward * complex_complex_Abx_Internal_protein_MsbA_pump_Exporter__small_molecule_ATP_Internal_2x_Membrane_
k_forward=0.01
10. complex[complex[Abx:protein[MsbA_pump]]:2x_small_molecule[ATP]] --> complex[Abx:protein[MsbA_pump]:2x_small_molecule[ATP]]
Kf=k_forward * complex_complex_Abx_Internal_protein_MsbA_pump_Exporter__small_molecule_ATP_Internal_2x_Membrane_
k_forward=0.01
11. complex[Abx:protein[MsbA_pump]:2x_small_molecule[ATP]] --> complex[protein[MsbA_pump]:2x_small_molecule[ADP]]+Abx
Kf=k_forward * complex_Abx_External_protein_MsbA_pump_Exporter_small_molecule_ATP_Internal_2x_Membrane_
k_forward=0.1
12. complex[protein[MsbA_pump]:2x_small_molecule[ADP]] --> 2small_molecule[ADP]+protein[MsbA_pump(Exporter)]
Kf=k_forward * complex_protein_MsbA_pump_Exporter_small_molecule_ADP_Internal_2x_Membrane_
k_forward=0.1
13. metabolite[Fuel_3PGA]+metabolite[NDPs] --> metabolite[NTPs]
Kf=k_forward * metabolite_Fuel_3PGA_Internal * metabolite_NDPs_Internal
k_forward=0.02
14. metabolite[NTPs] --> metabolite[NDPs]
Kf=k_forward * metabolite_NTPs_Internal
k_forward=1.77e-05
15. complex[protein[Ribo]:rna[activatable_assembly]]+protein[RNAase] <--> complex[complex[protein[Ribo]:rna[activatable_assembly]]:protein[RNAase]]
Kf=k_forward * complex_protein_Ribo_rna_activatable_assembly_Internal_ * protein_RNAase_Internal
Kr=k_reverse * complex_complex_protein_Ribo_rna_activatable_assembly__protein_RNAase_Internal_
k_forward=1.0
k_reverse=1.26582e-06
16. complex[complex[protein[Ribo]:rna[activatable_assembly]]:protein[RNAase]] --> protein[Ribo]+protein[RNAase]
Kf=k_forward * complex_complex_protein_Ribo_rna_activatable_assembly__protein_RNAase_Internal_
k_forward=1.01
17. rna[activatable_assembly]+protein[RNAase] <--> complex[protein[RNAase]:rna[activatable_assembly]]
Kf=k_forward * rna_activatable_assembly_Internal * protein_RNAase_Internal
Kr=k_reverse * complex_protein_RNAase_rna_activatable_assembly_Internal_
k_forward=1.0
k_reverse=1.26582e-06
18. complex[protein[RNAase]:rna[activatable_assembly]] --> protein[RNAase]
Kf=k_forward * complex_protein_RNAase_rna_activatable_assembly_Internal_
k_forward=1.01
]
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/utils/units.py:151: UserWarning: The string identifier for the unit None is not supported by BioCRNpyler. Add this to the dictionary in biocrnpyler/units.py if you want this unit.
warnings.warn(
[17]:
True
[18]:
# Simulate CRN
try:
import bioscrape
import bokeh
except ModuleNotFoundError:
print('please install the plotting libraries: pip install biocrnpyler[all]')
else:
from biocrnpyler import *
import numpy as np
import pandas as pd
maxtime = 300000
timepoints = np.arange(0, maxtime, 100)
#Inital conditions
x0_dict= {'T7RNAP_Internal':120,
'Abx_Internal':1,'Abx_External':1,
'small_molecule_ATP_Internal':100,}
#Run Simulation
R = CRN.simulate_with_bioscrape_via_sbml(timepoints = timepoints,
initial_condition_dict = x0_dict)
#Plot MsbA protien and the multiple configurations
p2 =create_custom_plot("MsbA Expression", x_max=20,y_max= .04, yname='Protein (uM)')
p2.line(timepoints/3600, R['protein_MsbA_monomer_Internal'], line_width = 3, line_alpha=.5, color=color[1], legend_label='monomer')
p2.line(timepoints/3600, R['complex_protein_MsbA_monomer_2x_Internal_'], line_width = 3, line_alpha=.5,color=color[4], legend_label='dimer')
p2.line(timepoints/3600, R['protein_MsbA_pump_Exporter_Membrane'], line_width = 3, line_alpha=.5,color=color[5], legend_label='channel')
#Plot the transport of substrate Abx
p3 =create_custom_plot("Active Transport of Abx", x_max=18,y_max= 2.1, yname='Abx (uM)')
p3.line(timepoints/3600, R['Abx_Internal'], line_width = 3, legend_label = "Internal", color=color[0])
p3.line(timepoints/3600, R['Abx_External'], line_width = 3, legend_label = "External",color=color[2],line_dash = 'dashed')
# Arrange the plots in a row layout
layout = row(p2, p3)
# Display the layout
show(layout) # Display the layout
Example 4: Integration of membrane protein (homodimer) and two-component regulatory system (NarX/NarL).
Consider the following signal transduction pathways:
Expression of NarX protein (monomer):
\[\begin{aligned} \text{DNA}_\text{NarX} + \text{TXTL}_\text{Energy} \rightarrow \text{NarX}_\text{monomer} \end{aligned}\]Assemble into a homodimer:
\[\begin{aligned} 2 \text{NarX}_\text{monomer} \rightarrow \text{NarX}_\text{homodimer} \end{aligned}\]Integration of membrane protein in membrane:
\[\begin{aligned} \text{NarX}_\text{homodimer} \rightarrow \text{NarX}_\text{sensor} \end{aligned}\]Detecting and binding to nitrate (NO3):
\[\begin{aligned} \text{NarX}_\text{sensor} + \text{NO}_3 \rightleftharpoons \text{NarX}_\text{sensor}:\text{NO}_3 \equiv \text{NarX}^*_\text{sensor} \end{aligned}\]Auto-phosphorylation membrane sensor (NarX):
\[\begin{aligned} \text{NarX}^*_\text{sensor} + 2 \text{ATP}_\text{internal} \rightleftharpoons \text{NarX}^*_\text{sensor}:2 \text{ATP}_\text{internal} \rightarrow \text{NarX}^{*2 P_\text{i}}_\text{sensor}:2 \text{ADP}_\text{internal}\rightarrow \text{NarX}^{*2 P_\text{i}}_\text{sensor} + 2 \text{ADP}_\text{internal} \end{aligned}\]Phosphorylation of response protein (NarL):
\[\begin{aligned} \text{NarX}^{*2 P_\text{i}}_\text{sensor} + \text{NarL} \rightleftharpoons \text{NarX}^{*2 P_\text{i}}_\text{sensor}:\text{NarL} \rightarrow \text{NarX}^{*}_\text{sensor}:\text{NarL}^{*} \rightarrow \text{NarX}^{*}_\text{sensor} + \text{NarL}^{*} \end{aligned}\]Dephosphorylation of phosphoryled response protein (NarL*):
\[\begin{aligned} \text{NarL}^{*} \rightarrow \text{NarL} + P_\text{i} \end{aligned}\]
Identify the membrane protein monomer
[19]:
NarX_monomer = IntegralMembraneProtein('NarX_monomer', product='NarX', size=2)
#Mechanisms
mech_int = Membrane_Protein_Integration()
int_mechanisms = {mech_int.mechanism_type:mech_int}
#Create mixture
M1= Mixture("Default Param Pathway", components = [NarX_monomer],
parameter_file = "membrane_toolbox_parameters.txt",
mechanisms = int_mechanisms)
#Compile the CRN with Mixture.compile_crn
CRN1 = M1.compile_crn()
print(CRN1.pretty_print(show_rates = True, show_attributes = True,
show_materials = True, show_keys = False))
Species(N = 3) = {
complex[2x_protein[NarX_monomer]] (@ 0),
protein[NarX_monomer] (@ 0),
protein[NarX(Passive)] (@ 0),
}
Reactions (2) = [
0. 2protein[NarX_monomer] <--> complex[2x_protein[NarX_monomer]]
Kf=k_forward * protein_NarX_monomer_Internal^2
Kr=k_reverse * complex_protein_NarX_monomer_2x_Internal_
k_forward=0.002
k_reverse=2e-10
1. complex[2x_protein[NarX_monomer]] --> protein[NarX(Passive)]
Kf = k complex[2x_protein[NarX_monomer]] / ( 1 + (protein[NarX(Passive)]/K)^4 )
k=10.0
K=0.5
n=4
]
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/core/parameter.py:1550: UserWarning: parameter file contains no unit column! Please add a column named ['unit', 'units'].
warn(
Define membrane sensor and sensing mechanism
[20]:
NarX_sensor=MembraneSensor(NarX_monomer.product, response_protein= 'NarL',
assigned_substrate='P', signal_substrate='NO3',ATP=2)
#Mechanisms
mech_tra = Membrane_Signaling_Pathway_MM()
tra_mechanisms = {mech_tra.mechanism_type:mech_tra}
#Create mixture
M2 = Mixture("Default Param Pathway", components = [NarX_sensor],
mechanisms = tra_mechanisms,
parameter_file = "membrane_toolbox_parameters.txt")
#Compile the CRN with Mixture.compile_crn
CRN2 = M2.compile_crn()
print(CRN2.pretty_print(show_rates = True, show_attributes = True,
show_materials = True, show_keys = False))
Species(N = 13) = {
complex[complex[NO3:protein[NarX]]:2x_small_molecule[ATP]] (@ 0),
complex[P:complex[NO3:protein[NarX]]:2x_small_molecule[ADP]] (@ 0),
complex[P:complex[NO3:protein[NarX]]] (@ 0),
P (@ 0),
protein[NarX(Passive)] (@ 0),
NarLactive (@ 0),
complex[NarL:complex[P:complex[NO3:protein[NarX]]]] (@ 0),
complex[NarL:P:complex[NO3:protein[NarX]]] (@ 0),
NarL (@ 0),
complex[NO3:protein[NarX]] (@ 0),
NO3 (@ 0),
small_molecule[ATP] (@ 0),
small_molecule[ADP] (@ 0),
}
Reactions (8) = [
0. NO3+protein[NarX(Passive)] <--> complex[NO3:protein[NarX]]
Kf=k_forward * NO3_Internal * protein_NarX_Passive_Membrane
Kr=k_reverse * complex_NO3_Internal_protein_NarX_Passive_Membrane_
k_forward=0.002
k_reverse=2e-10
1. complex[NO3:protein[NarX]]+2small_molecule[ATP] <--> complex[complex[NO3:protein[NarX]]:2x_small_molecule[ATP]]
Kf=k_forward * complex_NO3_Internal_protein_NarX_Passive_Membrane_ * small_molecule_ATP_Internal^2
Kr=k_reverse * complex_complex_NO3_Internal_protein_NarX_Passive__small_molecule_ATP_Internal_2x_Membrane_
k_forward=0.002
k_reverse=2e-10
2. complex[complex[NO3:protein[NarX]]:2x_small_molecule[ATP]] --> complex[P:complex[NO3:protein[NarX]]:2x_small_molecule[ADP]]
Kf=k_forward * complex_complex_NO3_Internal_protein_NarX_Passive__small_molecule_ATP_Internal_2x_Membrane_
k_forward=0.1
3. complex[P:complex[NO3:protein[NarX]]:2x_small_molecule[ADP]] --> complex[P:complex[NO3:protein[NarX]]]+2small_molecule[ADP]
Kf=k_forward * complex_P_Internal_complex_NO3_Internal_protein_NarX_Passive__small_molecule_ADP_Internal_2x_Membrane_
k_forward=0.8
4. complex[P:complex[NO3:protein[NarX]]]+NarL <--> complex[NarL:complex[P:complex[NO3:protein[NarX]]]]
Kf=k_forward * complex_P_Internal_complex_NO3_Internal_protein_NarX_Passive__Membrane_ * NarL_Internal
Kr=k_reverse * complex_NarL_Internal_complex_P_Internal_complex_NO3_Internal_protein_NarX_Passive___Membrane_
k_forward=0.002
k_reverse=1e-10
5. complex[NarL:complex[P:complex[NO3:protein[NarX]]]] --> complex[NarL:P:complex[NO3:protein[NarX]]]
Kf=k_forward * complex_NarL_Internal_complex_P_Internal_complex_NO3_Internal_protein_NarX_Passive___Membrane_
k_forward=0.1
6. complex[NarL:P:complex[NO3:protein[NarX]]] --> NarLactive+complex[NO3:protein[NarX]]
Kf=k_forward * complex_NarL_Internal_P_Internal_complex_NO3_Internal_protein_NarX_Passive__Membrane_
k_forward=0.2
7. NarLactive --> NarL+P
Kf=k_forward * NarLactive_Internal
k_forward=2e-10
]
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/core/parameter.py:1550: UserWarning: parameter file contains no unit column! Please add a column named ['unit', 'units'].
warn(
Activatable expression of NarX protein (monomer)
[21]:
compartment_internal = NarX_monomer.get_species().compartment
#ActivatedPromoter
activator = Species("T7RNAP", compartment=compartment_internal)
#Create a custom set of parameters
hill_parameters = {"k":1.0, "n":4, "K":20, "kleak":0.0001}
P_activatable = ActivatablePromoter("P_activatable",
activator = activator,
leak = False, parameters = hill_parameters)
#Create a DNA assembly "reporter" with P_activatable for its promoter
activatable_assembly = DNAassembly("activatable_assembly",
promoter = P_activatable,
rbs = "rbs",
initial_concentration = 1*10**-3,
protein= NarX_monomer.membrane_protein,
compartment=compartment_internal)
all_mechanisms = {mech_tra.mechanism_type:mech_tra, mech_int.mechanism_type:mech_int}
E = EnergyTxTlExtract(components=[activatable_assembly, NarX_monomer, NarX_sensor],
mechanisms = all_mechanisms,
parameter_file = "all_parameters.txt", compartment=compartment_internal)
CRN = E.compile_crn()
print(CRN.pretty_print())
CRN.write_sbml_file('NarX_transport_model.xml')
Species(N = 28) = {
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=Ribo).
search_key=(mech=initial concentration, partid=, name=Ribo).
protein[RNAP] (@ 0.00933),
found_key=(mech=initial concentration, partid=None, name=RNAP).
search_key=(mech=initial concentration, partid=, name=RNAP).
rna[activatable_assembly] (@ 0.001),
found_key=(mech=initial concentration, partid=None, name=activatable_assembly).
search_key=(mech=initial concentration, partid=, name=activatable_assembly).
dna[activatable_assembly] (@ 0.001),
found_key=(mech=initial concentration, partid=None, name=activatable_assembly).
search_key=(mech=initial concentration, partid=, name=activatable_assembly).
complex[protein[Ribo]:rna[activatable_assembly]] (@ 0),
complex[protein[RNAase]:rna[activatable_assembly]] (@ 0),
complex[2x_protein[NarX_monomer]] (@ 0),
complex[complex[protein[Ribo]:rna[activatable_assembly]]:protein[RNAase]] (@ 0),
complex[complex[NO3:protein[NarX]]:2x_small_molecule[ATP]] (@ 0),
T7RNAP (@ 0),
complex[P:complex[NO3:protein[NarX]]:2x_small_molecule[ADP]] (@ 0),
complex[P:complex[NO3:protein[NarX]]] (@ 0),
P (@ 0),
protein[NarX_monomer] (@ 0),
protein[NarX(Passive)] (@ 0),
NarLactive (@ 0),
complex[NarL:complex[P:complex[NO3:protein[NarX]]]] (@ 0),
complex[NarL:P:complex[NO3:protein[NarX]]] (@ 0),
NarL (@ 0),
complex[NO3:protein[NarX]] (@ 0),
NO3 (@ 0),
metabolite[NDPs] (@ 0),
small_molecule[ATP] (@ 0),
small_molecule[ADP] (@ 0),
}
Reactions (20) = [
0. dna[activatable_assembly] --> dna[activatable_assembly]+rna[activatable_assembly]
Kf = k dna[activatable_assembly] T7RNAP^n / ( K^n + T7RNAP^n )
k=1.0
found_key=(mech=None, partid=None, name=k).
search_key=(mech=positivehill_transcription, partid=P_activatable_T7RNAP, name=k).
K=20
found_key=(mech=None, partid=None, name=K).
search_key=(mech=positivehill_transcription, partid=P_activatable_T7RNAP, name=K).
n=4
found_key=(mech=None, partid=None, name=n).
search_key=(mech=positivehill_transcription, partid=P_activatable_T7RNAP, name=n).
1. rna[activatable_assembly]+protein[Ribo] <--> complex[protein[Ribo]:rna[activatable_assembly]]
Kf=k_forward * rna_activatable_assembly_Internal * protein_Ribo_Internal
Kr=k_reverse * complex_protein_Ribo_rna_activatable_assembly_Internal_
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).
2. 4metabolite[NTPs]+metabolite[amino_acids]+complex[protein[Ribo]:rna[activatable_assembly]] --> 4metabolite[NTPs]+metabolite[amino_acids]+rna[activatable_assembly]+protein[Ribo]+protein[NarX_monomer]
Kf=k_forward * metabolite_NTPs_Internal^4 * metabolite_amino_acids_Internal * complex_protein_Ribo_rna_activatable_assembly_Internal_
k_forward=0.192
3. 4metabolite[NTPs]+metabolite[amino_acids]+complex[protein[Ribo]:rna[activatable_assembly]] --> complex[protein[Ribo]:rna[activatable_assembly]]+4metabolite[NDPs]
Kf=k_forward * metabolite_NTPs_Internal^4 * metabolite_amino_acids_Internal * complex_protein_Ribo_rna_activatable_assembly_Internal_
k_forward=19.2
found_key=(mech=energy_translation_mm, partid=None, name=ktl).
search_key=(mech=energy_translation_mm, partid=rbs, name=ktl).
4. 2protein[NarX_monomer] <--> complex[2x_protein[NarX_monomer]]
Kf=k_forward * protein_NarX_monomer_Internal^2
Kr=k_reverse * complex_protein_NarX_monomer_2x_Internal_
k_forward=0.002
found_key=(mech=membrane_protein_integration, partid=None, name=kb_oligomer).
search_key=(mech=membrane_protein_integration, partid=NarX_monomer_Internal, name=kb_oligomer).
k_reverse=2e-10
found_key=(mech=membrane_protein_integration, partid=None, name=ku_oligomer).
search_key=(mech=membrane_protein_integration, partid=NarX_monomer_Internal, name=ku_oligomer).
5. complex[2x_protein[NarX_monomer]] --> protein[NarX(Passive)]
Kf = k complex[2x_protein[NarX_monomer]] / ( 1 + (protein[NarX(Passive)]/K)^4 )
k=10.0
found_key=(mech=membrane_protein_integration, partid=None, name=kex).
search_key=(mech=membrane_protein_integration, partid=NarX_monomer_Internal, name=kex).
K=0.5
found_key=(mech=membrane_protein_integration, partid=None, name=kcat).
search_key=(mech=membrane_protein_integration, partid=NarX_monomer_Internal, name=kcat).
n=4
6. NO3+protein[NarX(Passive)] <--> complex[NO3:protein[NarX]]
Kf=k_forward * NO3_Internal * protein_NarX_Passive_Membrane
Kr=k_reverse * complex_NO3_Internal_protein_NarX_Passive_Membrane_
k_forward=0.002
found_key=(mech=two_component_membrane_signaling, partid=None, name=kb_sigMS).
search_key=(mech=two_component_membrane_signaling, partid=NarX_Membrane, name=kb_sigMS).
k_reverse=2e-10
found_key=(mech=two_component_membrane_signaling, partid=None, name=ku_sigMS).
search_key=(mech=two_component_membrane_signaling, partid=NarX_Membrane, name=ku_sigMS).
7. complex[NO3:protein[NarX]]+2small_molecule[ATP] <--> complex[complex[NO3:protein[NarX]]:2x_small_molecule[ATP]]
Kf=k_forward * complex_NO3_Internal_protein_NarX_Passive_Membrane_ * small_molecule_ATP_Internal^2
Kr=k_reverse * complex_complex_NO3_Internal_protein_NarX_Passive__small_molecule_ATP_Internal_2x_Membrane_
k_forward=0.002
found_key=(mech=two_component_membrane_signaling, partid=None, name=kb_autoPhos).
search_key=(mech=two_component_membrane_signaling, partid=NarX_Membrane, name=kb_autoPhos).
k_reverse=2e-10
found_key=(mech=two_component_membrane_signaling, partid=None, name=ku_autoPhos).
search_key=(mech=two_component_membrane_signaling, partid=NarX_Membrane, name=ku_autoPhos).
8. complex[complex[NO3:protein[NarX]]:2x_small_molecule[ATP]] --> complex[P:complex[NO3:protein[NarX]]:2x_small_molecule[ADP]]
Kf=k_forward * complex_complex_NO3_Internal_protein_NarX_Passive__small_molecule_ATP_Internal_2x_Membrane_
k_forward=0.1
found_key=(mech=two_component_membrane_signaling, partid=None, name=k_hydro).
search_key=(mech=two_component_membrane_signaling, partid=NarX_Membrane, name=k_hydro).
9. complex[P:complex[NO3:protein[NarX]]:2x_small_molecule[ADP]] --> complex[P:complex[NO3:protein[NarX]]]+2small_molecule[ADP]
Kf=k_forward * complex_P_Internal_complex_NO3_Internal_protein_NarX_Passive__small_molecule_ADP_Internal_2x_Membrane_
k_forward=0.8
found_key=(mech=two_component_membrane_signaling, partid=None, name=ku_waste).
search_key=(mech=two_component_membrane_signaling, partid=NarX_Membrane, name=ku_waste).
10. complex[P:complex[NO3:protein[NarX]]]+NarL <--> complex[NarL:complex[P:complex[NO3:protein[NarX]]]]
Kf=k_forward * complex_P_Internal_complex_NO3_Internal_protein_NarX_Passive__Membrane_ * NarL_Internal
Kr=k_reverse * complex_NarL_Internal_complex_P_Internal_complex_NO3_Internal_protein_NarX_Passive___Membrane_
k_forward=0.002
found_key=(mech=two_component_membrane_signaling, partid=None, name=kb_phosRP).
search_key=(mech=two_component_membrane_signaling, partid=NarX_Membrane, name=kb_phosRP).
k_reverse=1e-10
found_key=(mech=two_component_membrane_signaling, partid=None, name=ku_phosRP).
search_key=(mech=two_component_membrane_signaling, partid=NarX_Membrane, name=ku_phosRP).
11. complex[NarL:complex[P:complex[NO3:protein[NarX]]]] --> complex[NarL:P:complex[NO3:protein[NarX]]]
Kf=k_forward * complex_NarL_Internal_complex_P_Internal_complex_NO3_Internal_protein_NarX_Passive___Membrane_
k_forward=0.1
found_key=(mech=two_component_membrane_signaling, partid=None, name=k_phosph).
search_key=(mech=two_component_membrane_signaling, partid=NarX_Membrane, name=k_phosph).
12. complex[NarL:P:complex[NO3:protein[NarX]]] --> NarLactive+complex[NO3:protein[NarX]]
Kf=k_forward * complex_NarL_Internal_P_Internal_complex_NO3_Internal_protein_NarX_Passive__Membrane_
k_forward=0.2
found_key=(mech=two_component_membrane_signaling, partid=None, name=ku_activeRP).
search_key=(mech=two_component_membrane_signaling, partid=NarX_Membrane, name=ku_activeRP).
13. NarLactive --> NarL+P
Kf=k_forward * NarLactive_Internal
k_forward=2e-10
found_key=(mech=two_component_membrane_signaling, partid=None, name=ku_dephos).
search_key=(mech=two_component_membrane_signaling, partid=NarX_Membrane, name=ku_dephos).
14. metabolite[Fuel_3PGA]+metabolite[NDPs] --> metabolite[NTPs]
Kf=k_forward * metabolite_Fuel_3PGA_Internal * metabolite_NDPs_Internal
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).
15. metabolite[NTPs] --> metabolite[NDPs]
Kf=k_forward * metabolite_NTPs_Internal
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).
16. complex[protein[Ribo]:rna[activatable_assembly]]+protein[RNAase] <--> complex[complex[protein[Ribo]:rna[activatable_assembly]]:protein[RNAase]]
Kf=k_forward * complex_protein_Ribo_rna_activatable_assembly_Internal_ * protein_RNAase_Internal
Kr=k_reverse * complex_complex_protein_Ribo_rna_activatable_assembly__protein_RNAase_Internal_
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_activatable_assembly_Internal_, 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_activatable_assembly_Internal_, name=ku).
17. complex[complex[protein[Ribo]:rna[activatable_assembly]]:protein[RNAase]] --> protein[Ribo]+protein[RNAase]
Kf=k_forward * complex_complex_protein_Ribo_rna_activatable_assembly__protein_RNAase_Internal_
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_activatable_assembly_Internal_, name=kdeg).
18. rna[activatable_assembly]+protein[RNAase] <--> complex[protein[RNAase]:rna[activatable_assembly]]
Kf=k_forward * rna_activatable_assembly_Internal * protein_RNAase_Internal
Kr=k_reverse * complex_protein_RNAase_rna_activatable_assembly_Internal_
k_forward=1.0
found_key=(mech=rna_degradation_mm, partid=None, name=kb).
search_key=(mech=rna_degradation_mm, partid=rna_activatable_assembly_Internal, 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_activatable_assembly_Internal, name=ku).
19. complex[protein[RNAase]:rna[activatable_assembly]] --> protein[RNAase]
Kf=k_forward * complex_protein_RNAase_rna_activatable_assembly_Internal_
k_forward=1.01
found_key=(mech=rna_degradation_mm, partid=None, name=kdeg).
search_key=(mech=rna_degradation_mm, partid=rna_activatable_assembly_Internal, name=kdeg).
]
/Users/murray/Library/CloudStorage/Dropbox/macosx/src/biocrnpyler/biocrnpyler/utils/units.py:151: UserWarning: The string identifier for the unit None is not supported by BioCRNpyler. Add this to the dictionary in biocrnpyler/units.py if you want this unit.
warnings.warn(
[21]:
True
Simulate the model
[22]:
# Simulate CRN
try:
import bioscrape
import bokeh
except ModuleNotFoundError:
print('please install the plotting libraries: pip install biocrnpyler[all]')
else:
from biocrnpyler import *
import numpy as np
import pandas as pd
maxtime = 300000
timepoints = np.arange(0, maxtime, 100)
#Inital conditions
x0_dict= {'T7RNAP_Internal':500,
'NO3_Internal':0.02,
'NarL_Internal':.04,
'small_molecule_ATP_Internal':3}
#Run Simulation
R = CRN.simulate_with_bioscrape_via_sbml(timepoints = timepoints, initial_condition_dict = x0_dict)
#Plot NarX protien and the multiple configurations
p2 =create_custom_plot("NarX phosphorylation of NarL", x_max=20,y_max= .04, yname='protein (uM)')
p2.line(timepoints/3600, R['protein_NarX_Passive_Membrane'], line_width = 3, line_alpha=.5, color=color[1], legend_label='NarX')
p2.line(timepoints/3600, R['complex_NO3_Internal_protein_NarX_Passive_Membrane_'], line_width = 3, line_alpha=.5, color=color[4], legend_label='NarX*')
p2.line(timepoints/3600, R['complex_P_Internal_complex_NO3_Internal_protein_NarX_Passive__Membrane_'], line_width = 3, line_alpha=.5, color=color[5],legend_label='NarX*:2P')
p2.legend.click_policy="hide"
#Plot of the activation of NarL
p3 =create_custom_plot("Activation of NarL", x_max=20,y_max= .04, yname='NarL (uM)')
p3.line(timepoints/3600, R['NarLactive_Internal'], line_width = 3, color=color[0],legend_label='NarL')
# p3.line(timepoints/3600, R['complex_NarL_Internal_P_Internal_'], line_width = 3, color=color[2],legend_label='NarL*')
p3.legend.click_policy="hide"
# Arrange the plots in a row layout
layout = row(p2, p3)
# Display the layout
show(layout) # Display the layout
[23]:
# End