Vivarium E. coli Processes

This notebook demonstrates how the processes work individually. For each process, we will:

  1. Load in the process and parameters

  2. Plot a toplogy diagram

    • The topology is a network that demonstrates how a process connects to its stores (which hold state variables).

  3. Display the ports schema

    • The port schema defines a systems ports (top-level keys), and the expected behavior of molecules under that port (its schema)

    • * is a wild card, specifies the schema of everything that can go into the port

  4. Simulate the process

  5. Demonstrate distinct features of that process

Miscellaneous notes/ideas: - consider adding interactive widgets (plotly) - users can click boxes to choose which molecules to plot

[1]:
# Make sure notebook runs out of vivarium-ecoli directory
import sys, os

# get the path to the notebook, and change working directory
notebook_path = sys.path[0][:sys.path[0].index('notebooks')]
sys.path.append(notebook_path)
os.chdir(sys.path[-1])
cwd = os.getcwd()

Load the required components

import modules

[2]:
from vivarium.core.process import Process
from vivarium.core.store import Store
from vivarium.core.engine import Engine, pp
from vivarium.core.composition import simulate_process, simulate_composite
from vivarium.plots.topology import plot_topology
from vivarium.plots.simulation_output import plot_variables
from ecoli.processes.registries import topology_registry
import ecoli
import copy

Load sim_data

This unpickles and sim_data object, which holds model parameters from wcEcoli. LoadSimData includes functions to retrieve individual processes’ parameters, which can be modified and passed into their respective process models.

[3]:
from ecoli.library.sim_data import LoadSimData

SIM_DATA_PATH = 'reconstruction/sim_data/kb/simData.cPickle'

load_sim_data = LoadSimData(
            sim_data_path=SIM_DATA_PATH,
            seed=0)

Get initial state snapshot

initial_state is a dict with the initial state of the system – a snapshot saved from wcEcoli.

[4]:
from ecoli.composites.ecoli_master import get_state_from_file

INITIAL_STATE_PATH = 'data/wcecoli_t1000.json'

initial_state = get_state_from_file(path=INITIAL_STATE_PATH)

Helper functions for executing the notebook

[5]:
schema_keys = Store.schema_keys

def make_port_printout(ports_schema, depth=0, schema_show=5, filler_size=5):
    print_dict = ''
    filler = filler_size * ' '
    for port, schema in ports_schema.items():
        if isinstance(schema, dict):
            schemavars = list(schema.keys())
            if any(var in schemavars for var in schema_keys):
                print_schema = ''
                for k, v in schema.items():
                    print_schema += f'{(depth+1) * filler} {k}: {v}\n'
                print_dict += f'{depth * filler}{port}:\n{print_schema}\n'
            else:
                schema_items = schema.items()
                first_schema = dict(list(schema_items)[:schema_show])
                next_print = make_port_printout(first_schema, depth+1)
                print_dict += f'{port}:\n{next_print}\n'
                if len(schema) > schema_show:
                    print_dict += f'{(depth+1) * filler}'
                    print_dict += f'... skipping {len(schema)-schema_show} schema entries ...'
                    print_dict += f'\n\n'
        else:
            print_dict += f'{filler}{schema}\n'
    return print_dict

def find_increasing(d):
    for key, value in d.items():
        if value[-1] > value[0]:
            return {key: value}

def find_decreasing(d):
    for key, value in d.items():
        if value[-1] < value[0]:
            return {key: value}

Complexation

Complexation Documentation

[6]:
from ecoli.processes.complexation import Complexation

# load in parameters
cplx_config = load_sim_data.get_complexation_config()
cplx_config['time_step'] = 0.01

# initialize process
complexation = Complexation(cplx_config)
[7]:
# plot topology
cplx_topology_plot_settings = {
    'buffer': 1,
    'node_labels': {
        'ecoli-complexation': 'ecoli\ncomplexation'
    },
    'show_ports': False,
    'node_size': 10000,
    'dashed_edges': True,
    'node_distance': 4,
}

cplx_topology_fig = plot_topology(complexation, cplx_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_13_0.png
[8]:
# display ports schema
cplx_ports = complexation.ports_schema()
cplx_printout = make_port_printout(cplx_ports)
print(cplx_printout)
molecules:
     1-PFK[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     1-PFK-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2OXOGLUTARATEDEH-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     E1O[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     E2O[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 2569 schema entries ...

listeners:
     complexation_events:
           _default: []
           _updater: set
           _emit: True



[9]:
# tweak initial state
cplx_initial_state = copy.deepcopy(initial_state)
cplx_initial_state['bulk']['6PGLUCONDEHYDROG-MONOMER[c]'] = 1000

# run simulation and retrieve final data
cplx_settings = {
    'total_time': 0.1,
    'initial_state': cplx_initial_state,
    'topology': complexation.topology}

cplx_data = simulate_process(complexation, cplx_settings)

Simulation ID: a7b0130c-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:04
Completed in 0.178275 seconds

For complexation, let’s look at the 6PGLUCONDEHYDROG-MONOMER[c] monomer as it transitions to the 6PGLUCONDEHYDROG-CPLX[c] complex:

[10]:
# plot output
cplx_fig = plot_variables(
    cplx_data,
    variables=[
        ('bulk', '6PGLUCONDEHYDROG-MONOMER[c]'),
        ('bulk', '6PGLUCONDEHYDROG-CPLX[c]'),
    ],
    column_width=10, row_height=3, row_padding=0.5)
../_images/notebooks_Vivarium_ecoli_processes_17_0.png

Here we see 6PGLUCONDEHYDROG-MONOMER[c] getting complexed. This a relatively fast process and consumes all the monomers in a single time step.

Transcript Initiation

Transcript Initiation Documentation

[11]:
from ecoli.processes.transcript_initiation import TranscriptInitiation

# load in parameters
ti_params = load_sim_data.get_transcript_initiation_config()

# initialize process and topology
transcript_initiation = TranscriptInitiation(ti_params)
[12]:
# plot topology
ti_topology_plot_settings = {
    'node_labels': {
        'ecoli-transcript-initiation': 'ecoli\ntranscript\ninitiation',
        'full_chromosomes': 'full\nchromosomes',
        'listeners\nrna_synth_prob': 'listeners\nrna_synth_\nprob',
        'listeners\nribosome_data': 'listeners\nribosome_\ndata',
    },
    'show_ports': False,
    'node_size': 17000,
    'node_distance': 3.3,
    'dashed_edges': True,
    'font_size': 18,
    'graph_format': 'hierarchy',
    'coordinates': {'ecoli-transcript-initiation': (4, 2)}
}

ti_topology_fig = plot_topology(transcript_initiation, ti_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_21_0.png
[13]:
# display ports schema
ti_ports = transcript_initiation.ports_schema()
ti_printout = make_port_printout(ti_ports)
print(ti_printout)
environment:
     media_id:
           _default:
           _updater: set


molecules:
     APORNAP-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     GUANOSINE-5DP-3DP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


full_chromosomes:
*:
          unique_index:
                _default: 0



promoters:
*:
          TU_index:
                _default: 0

          coordinates:
                _default: 0

          domain_index:
                _default: 0

          bound_TF:
                _default: 0



RNAs:
*:
          unique_index:
                _default: 0
                _updater: set

          TU_index:
                _default: 0
                _updater: set

          transcript_length:
                _default: 0
                _updater: set
                _emit: True

          is_mRNA:
                _default: 0
                _updater: set

          is_full_transcript:
                _default: 0
                _updater: set


          ... skipping 2 schema entries ...


active_RNAPs:
*:
          unique_index:
                _default: 0
                _updater: set

          domain_index:
                _default: 0
                _updater: set

          coordinates:
                _default: 0
                _updater: set
                _emit: True

          direction:
                _default: 0
                _updater: set



listeners:
mass:
          cell_mass:
                _default: 0.0

          dry_mass:
                _default: 0.0


rna_synth_prob:
          rna_synth_prob:
                _default: 0.0
                _updater: set
                _emit: True


ribosome_data:
          rrn16S_produced:
                _default: 0
                _updater: set
                _emit: True

          rrn23S_produced:
                _default: 0
                _updater: set
                _emit: True

          rrn5S_produced:
                _default: 0
                _updater: set
                _emit: True

          rrn16S_init_prob:
                _default: 0
                _updater: set
                _emit: True

          rrn23S_init_prob:
                _default: 0
                _updater: set
                _emit: True


          ... skipping 2 schema entries ...

rnap_data:
          didInitialize:
                _default: 0
                _updater: set
                _emit: True

          rnaInitEvent:
                _default: 0
                _updater: set
                _emit: True




[14]:
# run simulation and retrieve final data
ti_settings = {
    'total_time': 10,
    'initial_state': initial_state,
    'topology': transcript_initiation.topology}

ti_data = simulate_process(transcript_initiation, ti_settings)

Simulation ID: a81ba680-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:05
Completed in 1.46 seconds

For Transcript Initiation, we can see from the cell above that each active RNA polymerase molecule is represented by an ID number. Let’s analyze how one of these active RNA polymerase molecules functions within this process:

[15]:
# plot output
RNAP_ID = list(ti_data['unique']['active_RNAP'].keys())[0]

ti_fig = plot_variables(
    ti_data,
    variables=[
        ('unique', 'active_RNAP', RNAP_ID, 'coordinates'),
        ('bulk', 'APORNAP-CPLX[c]')
        ],
    column_width=10, row_height=3, row_padding=0.5)
../_images/notebooks_Vivarium_ecoli_processes_25_0.png

Here we can see that the coordinates for one RNA polymerase molecule is initialized at time=0 and remains the same throughout the simulation as elongation is not a function of this process. Additionally, we can see that the RNA polymerase molecules (given by APORNAP-CPLX[c]) are getting deleted from the bulk molecules count as they bind to the DNA sequence and are initialized for transcription.

Transcript Elongation

Transcript Elongation Documentation

[16]:
from ecoli.processes.transcript_elongation import TranscriptElongation

# load in parameters
te_params = load_sim_data.get_transcript_elongation_config()

# initialize process and topology
transcript_elongation = TranscriptElongation(te_params)
[17]:
# plot topology
te_topology_plot_settings = {
    'node_labels': {
        'ecoli-transcript-elongation': 'ecoli\ntranscript\nelongation',
        'listeners\ntranscript_elongation_listener': '\nlisteners\ntranscript_\nelongation_\nlistener'
    },
    'show_ports': False,
    'node_size': 17000,
    'node_distance': 3.3,
    'dashed_edges': True,
    'font_size': 18,
    'graph_format': 'hierarchy',
    'coordinates': {'ecoli-transcript-elongation': (4, 2)}
}

te_topology_fig = plot_topology(transcript_elongation, te_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_29_0.png
[18]:
# display ports schema
te_ports = transcript_elongation.ports_schema()
te_printout = make_port_printout(te_ports)
print(te_printout)
environment:
     media_id:
           _default:


RNAs:
_divider:
     <function divide_RNAs_by_domain at 0x12dcc89d0>
topology:
     ('..', 'active_RNAP')


*:
          unique_index:
                _default: 0
                _updater: set

          TU_index:
                _default: 0
                _updater: set

          transcript_length:
                _default: 0
                _updater: set
                _emit: True

          is_mRNA:
                _default: False
                _updater: set

          is_full_transcript:
                _default: False
                _updater: set


          ... skipping 3 schema entries ...


active_RNAPs:
_divider:
     <function divide_active_RNAPs_by_domain at 0x12dcc88b0>

*:
          unique_index:
                _default: 0
                _updater: set

          domain_index:
                _default: 0
                _updater: set

          coordinates:
                _default: 0
                _updater: set
                _emit: True

          direction:
                _default: 0
                _updater: set



bulk_RNAs:
     EG10001_RNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG10002_RNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG10003_RNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG10004_RNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG10006_RNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 4682 schema entries ...

ntps:
     ATP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     GTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     UTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


molecules:
     PPI[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     APORNAP-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


listeners:
mass:
          cell_mass:
                _default: 0.0


transcript_elongation_listener:
          countNTPsUsed:
                _default: 0
                _updater: set
                _emit: True

          countRnaSynthesized:
                _default: [0. 0. 0. ... 0. 0. 0.]
                _updater: set
                _emit: True

          attenuation_probability:
                _updater: set
                _emit: True

          counts_attenuated:
                _updater: set
                _emit: True


growth_limits:
          ntpUsed:
                _default: [0. 0. 0. 0.]
                _updater: set
                _emit: True


rnap_data:
          actualElongations:
                _default: 0
                _updater: set
                _emit: True

          didTerminate:
                _default: 0
                _updater: set
                _emit: True

          terminationLoss:
                _default: 0
                _updater: set
                _emit: True

          didStall:
                _updater: set
                _emit: True




[19]:
# run simulation and retrieve final data
te_settings = {
    'total_time': 10,
    'initial_state': initial_state,
    'topology': transcript_elongation.topology}

te_data = simulate_process(transcript_elongation, te_settings)

Simulation ID: aa11a2fa-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:09
Completed in 2.21 seconds

For Transcript Elongation, we can see from the cell above that each active RNA Polymerase molecule is represented by an ID number. Let’s analyze how a few of these active RNA Polymerase molecules function within this process:

[20]:
# plot output
te_fig = plot_variables(
    te_data,
    variables=[
        ('unique', 'active_RNAP', '1266660', 'coordinates'),
        ('unique', 'active_RNAP', '1293463', 'coordinates'),
        ('unique', 'active_RNAP', '1293466', 'coordinates')
        ],
    column_width=10, row_height=3, row_padding=0.5)
../_images/notebooks_Vivarium_ecoli_processes_33_0.png

Here we can see that the coordinates for these RNA Polymerase molecules are initialized at time=0 but change throughout the simulation. Some polymerase coordinates incease, indicating elongation in one direction, and others decrease, indicating elongation in the opposite direction along the DNA sequence.

Funadamentally, these changes represent the process of polymerization: as the RNA polymerase molecules travel across the DNA, RNA molecucles are assembled.

Transcription Factor Binding

TF Binding Documentation

[21]:
from ecoli.processes.tf_binding import TfBinding

# load in parameters
tfb_params = load_sim_data.get_tf_config()

# initialize process and topology
tf_binding = TfBinding(tfb_params)
[22]:
# plot topology
tfb_topology_plot_settings = {
    'node_labels': {
        'ecoli-tf-binding': 'ecoli\ntf binding',
        'listeners\nrna_synth_prob': 'listeners\nrna_synth_\nprob',
        'active_tfs_total': 'active_tfs_\ntotal',
        'inactive_tfs_total': 'inactive_tfs_\ntotal'
    },
    'show_ports': False,
    'node_size': 16000,
    'node_distance': 3.5,
    'dashed_edges': True,
    'font_size': 18,
    'graph_format': 'hierarchy',
    'coordinates': {'ecoli-tf-binding': (2, 2)}
}

tfb_topology_fig = plot_topology(tf_binding, tfb_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_37_0.png
[23]:
# display ports schema
tfb_ports = tf_binding.ports_schema()
tfb_printout = make_port_printout(tfb_ports)
print(tfb_printout)
promoters:
*:
          TU_index:
                _default: 0
                _updater: set
                _emit: True

          bound_TF:
                _default: 0
                _updater: set
                _emit: True

          submass:
                _default: [0. 0. 0. 0. 0. 0. 0. 0. 0.]
                _emit: True



active_tfs:
     CPLX-125[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX-172[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX0-226[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX0-228[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX0-7669[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 19 schema entries ...

active_tfs_total:
     CPLX-125[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     CPLX-172[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     CPLX0-226[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     CPLX0-228[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     CPLX0-7669[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True


     ... skipping 19 schema entries ...

inactive_tfs_total:
     PC00007[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     PC00003[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     PC00004[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     PC00005[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     CPLX0-7670[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True


     ... skipping 12 schema entries ...

listeners:
rna_synth_prob:
          pPromoterBound:
                _default: 0
                _updater: set
                _emit: True

          nPromoterBound:
                _default: 0
                _updater: set
                _emit: True

          nActualBound:
                _default: 0
                _updater: set
                _emit: True

          n_available_promoters:
                _default: 0
                _updater: set
                _emit: True

          n_bound_TF_per_TU:
                _default: 0
                _updater: set
                _emit: True


          ... skipping 1 schema entries ...



[24]:
# run simulation and retrieve final data
tfb_settings = {
    'total_time': 10,
    'initial_state': initial_state,
    'topology': tf_binding.topology}

tfb_data = simulate_process(tf_binding, tfb_settings)

Simulation ID: acb463e4-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:12
Completed in 2.07 seconds
[25]:
# plot output
tfb_fig_active = plot_variables(
    tfb_data,
    variables=[
        ('bulk', 'CPLX-125[c]'),
        ('bulk', 'CPLX0-226[c]'),
        ('bulk', 'MONOMER0-162[c]')
        ],
    column_width=10, row_height=3, row_padding=0.5)
../_images/notebooks_Vivarium_ecoli_processes_40_0.png

Chromosome Replication

Chromosome Replication Documentation

[26]:
from ecoli.processes.chromosome_replication import ChromosomeReplication

# load in parameters
cr_params = load_sim_data.get_chromosome_replication_config()

# initialize process and topology
chromosome_replication = ChromosomeReplication(cr_params)
[27]:
# plot topology
cr_topology_plot_settings = {
    'node_labels': {
        'ecoli-chromosome-replication': 'ecoli\nchromosome\nreplication',
        'replisome_trimers': 'replisome\ntrimers',
        'replisome_monomers': 'replisome\nmonomers',
        'active_replisomes': 'active\nreplisomes',
        'full_chromosomes': 'full\nchromosomes',
        'chromosome_domains': 'chromosome\ndomains',
        'listeners\nreplication_data': 'listeners\nreplication_\ndata'
    },
    'show_ports': False,
    'node_size': 17000,
    'node_distance': 3.5,
    'dashed_edges': True,
    'font_size': 18,
    'graph_format': 'hierarchy',
    'coordinates': {'ecoli-chromosome-replication': (3, 2)}
}

cr_topology_fig = plot_topology(chromosome_replication, cr_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_43_0.png
[28]:
# display ports schema
cr_ports = chromosome_replication.ports_schema()
cr_printout = make_port_printout(cr_ports)
print(cr_printout)
replisome_trimers:
     CPLX0-2361[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX0-3761[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


replisome_monomers:
     CPLX0-3621[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG10239-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG11500-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG11412-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


dntps:
     DATP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     DCTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     DGTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     TTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


ppi:
     PPI[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


listeners:
mass:
          cell_mass:
                _default: 0.0
                _emit: True


replication_data:
          criticalInitiationMass:
                _default: 0.0

          criticalMassPerOriC:
                _default: 0.0



environment:
     media_id:
           _default:
           _updater: set


active_replisomes:
*:
          domain_index:
                _default: 0
                _updater: set
                _emit: True

          right_replichore:
                _default: 0
                _updater: set
                _emit: True

          coordinates:
                _default: 0
                _updater: set
                _emit: True

          submass:
                _default: [0. 0. 0. 0. 0. 0. 0. 0. 0.]
                _emit: True



oriCs:
*:
          domain_index:
                _default: 0
                _updater: set
                _emit: True



chromosome_domains:
*:
          domain_index:
                _default: 0
                _updater: set
                _emit: True

          child_domains:
                _default: 0
                _updater: set
                _emit: True



full_chromosomes:
*:
          domain_index:
                _default: 0
                _updater: set
                _emit: True

          division_time:
                _default: 0
                _updater: set
                _emit: True

          has_triggered_division:
                _default: False
                _updater: set




[29]:
# tweak initial state to trigger replication
cr_initial_state = copy.deepcopy(initial_state)
cr_initial_state['listeners']['mass']['cell_mass'] = 2000.0

# run simulation and retrieve final data
cr_settings = {
    'total_time': 100,
    'initial_state': cr_initial_state,
    'topology': chromosome_replication.topology,
    'emit_step': 10,
    'return_raw_data': True}

cr_data = simulate_process(chromosome_replication, cr_settings)

Simulation ID: afd58b16-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:17
Completed in 0.349993 seconds
[30]:
cr_data[0.0]['unique']['oriC']
[30]:
{'1': {'domain_index': 1}, '2': {'domain_index': 2}}
[31]:
cr_data[10.0]['unique']['oriC']
[31]:
{'afed02fa-2025-11ec-8f9d-8c85908ac627': {'domain_index': 19},
 'afed0390-2025-11ec-8f9d-8c85908ac627': {'domain_index': 20}}

Here a new origin of replication (oriC) has formed between time 0 and 10. This indicates the beginning of the chromosome replication process.

Chromosome Structure

Chromosome Structure Documentation

[32]:
from ecoli.processes.chromosome_structure import ChromosomeStructure

# load in parameters
cs_params = load_sim_data.get_chromosome_structure_config()

# initialize process and topology
chromosome_structure = ChromosomeStructure(cs_params)
[33]:
# plot topology
cs_topology_plot_settings = {
    'node_labels': {
        'ecoli-chromosome-structure': 'ecoli\nchromosome\nstructure',
        'full_chromosomes': 'full\nchromosomes',
        'active_ribosome': 'active\nribosome',
        'chromosome_domains': 'chromosome\ndomains',
        'active_replisomes': 'active\nreplisomes',
        'active_RNAPs': 'active\nRNAPs',
    },
    'show_ports': False,
    'node_size': 17000,
    'node_distance': 3.5,
    'dashed_edges': True,
    'font_size': 20,
    'graph_format': 'hierarchy',
    'coordinates': {'ecoli-chromosome-structure': (6, 2)}
}

cs_topology_fig = plot_topology(chromosome_structure, cs_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_51_0.png
[34]:
# display ports schema
cs_ports = chromosome_structure.ports_schema()
cs_printout = make_port_printout(cs_ports)
print(cs_printout)
listeners:
RnapData:
          n_total_collisions:
                _default: 0
                _updater: set
                _emit: True

          n_headon_collisions:
                _default: 0
                _updater: set
                _emit: True

          n_codirectional_collisions:
                _default: 0
                _updater: set
                _emit: True

          headon_collision_coordinates:
                _default: 0
                _updater: set
                _emit: True

          codirectional_collision_coordinates:
                _default: 0
                _updater: set
                _emit: True


          ... skipping 1 schema entries ...


fragmentBases:
     polymerized_ATP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     polymerized_CTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     polymerized_GTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     polymerized_UTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


molecules:
     PPI[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     WATER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     APORNAP-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


active_tfs:
     CPLX-125[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX-172[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX0-226[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX0-228[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX0-7669[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 19 schema entries ...

subunits:
     CPLX0-3953[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX0-3962[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


amino_acids:
     L-ALPHA-ALANINE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ARG[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ASN[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     L-ASPARTATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CYS[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 16 schema entries ...

active_replisomes:
*:
          domain_index:
                _default: 0
                _updater: set
                _emit: True

          coordinates:
                _default: 0
                _updater: set
                _emit: True

          unique_index:
                _default: 0
                _updater: set
                _emit: True



oriCs:
*:
          domain_index:
                _default: 0
                _updater: set
                _emit: True



chromosome_domains:
*:
          domain_index:
                _default: 0
                _updater: set
                _emit: True

          child_domains:
                _default: 0
                _updater: set
                _emit: True



active_RNAPs:
_divider:
     <function divide_active_RNAPs_by_domain at 0x12dcc88b0>

*:
          unique_index:
                _default: 0
                _updater: set

          domain_index:
                _default: 0
                _updater: set

          coordinates:
                _default: 0
                _updater: set

          direction:
                _default: 0
                _updater: set



RNAs:
*:
          unique_index:
                _default: 0
                _updater: set

          TU_index:
                _default: 0
                _updater: set

          transcript_length:
                _default: 0
                _updater: set

          RNAP_index:
                _default: 0
                _updater: set



active_ribosome:
*:
          protein_index:
                _default: 0

          peptide_length:
                _default: 0

          mRNA_index:
                _default: 0



full_chromosomes:
*:
          domain_index:
                _default: 0
                _updater: set
                _emit: True



promoters:
*:
          TU_index:
                _default: 0

          coordinates:
                _default: 0

          domain_index:
                _default: 0

          bound_TF:
                _default: 0



DnaA_boxes:
*:
          domain_index:
                _default: 0

          coordinates:
                _default: 0

          DnaA_bound:
                _default: 0




[35]:
cs_initial_state = copy.deepcopy(initial_state)

# run simulation and retrieve final data
cs_settings = {
    'total_time': 10,
    'initial_state': cs_initial_state,
    'topology': chromosome_structure.topology,
    'emit_step': 10,
    'return_raw_data': True}

cs_data = simulate_process(chromosome_structure, cs_settings)

Simulation ID: b0a8560e-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:20
Completed in 2.53 seconds

Polypeptide Initiation

Polypeptide Initiation Documentation

[36]:
from ecoli.processes.polypeptide_initiation import PolypeptideInitiation

# load in parameters
pi_params = load_sim_data.get_polypeptide_initiation_config()

# initialize process and topology
polypeptide_initiation = PolypeptideInitiation(pi_params)
[37]:
# plot topology
pi_topology_plot_settings = {
    'node_labels': {
        'ecoli-polypeptide-initiation': 'ecoli\npolypeptide\ninitiation',
        'active_ribosome': 'active\nribosome'
    },
    'show_ports': False,
    'node_size': 17000,
    'node_distance': 3.5,
    'dashed_edges': True,
    'font_size': 17,
    'graph_format': 'hierarchy',
    'coordinates': {'ecoli-polypeptide-initiation': (3, 2)}
}

pi_topology_fig = plot_topology(polypeptide_initiation, pi_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_56_0.png
[38]:
# display ports schema
pi_ports = polypeptide_initiation.ports_schema()
pi_printout = make_port_printout(pi_ports)
print(pi_printout)
environment:
     media_id:
           _default:
           _updater: set


listeners:
ribosome_data:
          ribosomes_initialized:
                _default: 0
                _updater: set
                _emit: True

          prob_translation_per_transcript:
                _default: []
                _updater: set
                _emit: True

          effective_elongation_rate:
                _default: 0.0
                _updater: set
                _emit: True



active_ribosome:
*:
          unique_index:
                _default: 0

          protein_index:
                _default: 0

          peptide_length:
                _default: 0
                _emit: True

          mRNA_index:
                _default: 0

          pos_on_mRNA:
                _default: 0
                _emit: True



RNA:
*:
          TU_index:
                _default: 0

          can_translate:
                _default: False

          unique_index:
                _default: 0



subunits:
     CPLX0-3953[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX0-3962[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}



[39]:
# run simulation and retrieve final data
pi_settings = {
    'total_time': 10,
    'initial_state': initial_state,
    'topology': polypeptide_initiation.topology}

pi_data = simulate_process(polypeptide_initiation, pi_settings)

Simulation ID: b33343ac-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:24
Completed in 2.11 seconds

We can observe the 30S ribosomal subunit (‘CPLX0-3953[c]’) and 50S ribosomal subunit (CPLX0-3962[c]) molecule counts:

[40]:
# plot output
pi_fig = plot_variables(
    pi_data,
    variables=[
        ('bulk', 'CPLX0-3953[c]'),
        ('bulk', 'CPLX0-3962[c]')
        ],
    column_width=10, row_height=3, row_padding=0.5)

pi_fig.savefig('notebooks/pi_fig.png')
pi_fig.show()
/var/folders/t4/q28s90qs5r755xvnzjg6vkc40000gn/T/ipykernel_14901/3946241941.py:11: UserWarning: Matplotlib is currently using module://matplotlib_inline.backend_inline, which is a non-GUI backend, so cannot show the figure.
  pi_fig.show()
../_images/notebooks_Vivarium_ecoli_processes_60_1.png

The decrease within the first time step of the simulation demonstrates how active 70S ribosomes are rapidly formed from free 30S and 50S subunits. We can also see how the 30S ribosome subunit (CPLX0-3953[c]) is limiting.

Polypeptide Elongation

Polypeptide Elongation Documentation

[41]:
from ecoli.processes.polypeptide_elongation import PolypeptideElongation

# load in parameters
pe_params = load_sim_data.get_polypeptide_elongation_config()

# initialize process and topology
polypeptide_elongation = PolypeptideElongation(pe_params)
[42]:
# plot topology
pe_topology_plot_settings = {
    'node_labels': {
        'ecoli-polypeptide-elongation': 'ecoli\npolypeptide\nelongation',
        'uncharged_trna': 'uncharged_\ntrna',
        'uncharged_trna_total': 'uncharged_\ntrna_total',
        'charged_trna_total': 'charged_\ntrna_total',
        'charging_molecules': 'charging_\nmolecules',
        'active_ribosome': 'active_\nribosome',
        'polypeptide_elongation': 'polypeptide\nelongation',
        'ppgpp_reaction_metabolites': 'ppgpp\nreaction\nmetabolites',
        'chromosome_domains': 'chromosome\ndomains',
        'listeners\nreplication_data': 'listeners\nreplication_\ndata',
        'amino_acids_total': 'amino_acids_\ntotal'
    },
    'show_ports': False,
    'node_size': 17000,
    'node_distance': 3.3,
    'dashed_edges': True,
    'font_size': 17,
    'graph_format': 'hierarchy',
    'coordinates': {'ecoli-polypeptide-elongation': (7, 1.75)}
}

pe_topology_fig = plot_topology(polypeptide_elongation, pe_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_64_0.png
[43]:
# display ports schema
pe_ports = polypeptide_elongation.ports_schema()
pe_printout = make_port_printout(pe_ports)
print(pe_printout)
environment:
     media_id:
           _default:
           _updater: set

amino_acids:
          L-ALPHA-ALANINE:
                _default: 0
                _divider: binomial_ecoli
                _emit: True
                _properties: {'bulk': True}

          ARG:
                _default: 0
                _divider: binomial_ecoli
                _emit: True
                _properties: {'bulk': True}

          ASN:
                _default: 0
                _divider: binomial_ecoli
                _emit: True
                _properties: {'bulk': True}

          L-ASPARTATE:
                _default: 0
                _divider: binomial_ecoli
                _emit: True
                _properties: {'bulk': True}

          CYS:
                _default: 0
                _divider: binomial_ecoli
                _emit: True
                _properties: {'bulk': True}


          ... skipping 16 schema entries ...


listeners:
mass:
          cell_mass:
                _default: 0.0

          dry_mass:
                _default: 0.0


growth_limits:
          fraction_trna_charged:
                _default: 0
                _updater: set
                _emit: True

          aa_pool_size:
                _default: 0
                _updater: set
                _emit: True

          aa_request_size:
                _default: 0
                _updater: set
                _emit: True

          active_ribosomes_allocated:
                _default: 0
                _updater: set
                _emit: True

          net_charged:
                _default: []
                _updater: set
                _emit: True


          ... skipping 5 schema entries ...

ribosome_data:
          translation_supply:
                _default: 0
                _updater: set
                _emit: True

          effective_elongation_rate:
                _default: 0
                _updater: set
                _emit: True

          aaCountInSequence:
                _default: 0
                _updater: set
                _emit: True

          aaCounts:
                _default: 0
                _updater: set
                _emit: True

          actualElongations:
                _default: 0
                _updater: set
                _emit: True


          ... skipping 6 schema entries ...


molecules:
     PROTON[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     WATER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     RELA-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     SPOT-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     GUANOSINE-5DP-3DP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


molecules_total:
     PROTON[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     WATER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     RELA-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     SPOT-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     GUANOSINE-5DP-3DP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True


monomers:
     1-ACYLGLYCEROL-3-P-ACYLTRANSFER-MONOMER[i]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     1-PFK-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2-DEHYDROPANTOATE-REDUCT-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2-ISOPROPYLMALATESYN-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2-OCTAPRENYL-METHOXY-BENZOQ-METH-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 4291 schema entries ...

amino_acids:
     L-ALPHA-ALANINE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ARG[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ASN[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     L-ASPARTATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CYS[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 16 schema entries ...

aa_enzymes:
     2-ISOPROPYLMALATESYN-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ACETOLACTSYNI-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ANTHRANSYN-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ASNSYNA-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ASPAMINOTRANS-DIMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 21 schema entries ...

ppgpp_reaction_metabolites:
     ATP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     GDP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     AMP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     GUANOSINE-5DP-3DP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     PROTON[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 2 schema entries ...

uncharged_trna:
     alaT-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     alaU-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     alaV-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     alaW-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     alaX-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 81 schema entries ...

charged_trna:
     charged-alaT-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     charged-alaU-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     charged-alaV-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     charged-alaW-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     charged-alaX-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 81 schema entries ...

charging_molecules:
     L-ALPHA-ALANINE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ATP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     alaT-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     PPI[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     AMP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 190 schema entries ...

synthetases:
     ALAS-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ARGS-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ASNS-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ASPS-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CYSS-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 16 schema entries ...

amino_acids_total:
     L-ALPHA-ALANINE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     ARG[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     ASN[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     L-ASPARTATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     CYS[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True


     ... skipping 16 schema entries ...

uncharged_trna_total:
     alaT-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     alaU-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     alaV-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     alaW-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     alaX-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True


     ... skipping 81 schema entries ...

charged_trna_total:
     charged-alaT-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     charged-alaU-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     charged-alaV-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     charged-alaW-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     charged-alaX-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True


     ... skipping 81 schema entries ...

active_ribosome:
*:
          unique_index:
                _default: 0
                _updater: set

          protein_index:
                _default: 0
                _updater: set

          peptide_length:
                _default: 0
                _updater: set
                _emit: True

          pos_on_mRNA:
                _default: 0
                _updater: set
                _emit: True

          submass:
                _default: [0. 0. 0. 0. 0. 0. 0. 0. 0.]
                _emit: True



subunits:
     CPLX0-3953[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX0-3962[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


polypeptide_elongation:
     aa_count_diff:
           _default: {}
           _updater: set
           _emit: True

     gtp_to_hydrolyze:
           _default: 0
           _updater: set
           _emit: True



[44]:
# run simulation and retrieve final data
pe_settings = {
    'total_time': 10,
    'initial_state': initial_state,
    'topology': polypeptide_elongation.topology}

pe_data = simulate_process(polypeptide_elongation, pe_settings)

Simulation ID: b61fa8a8-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:29
Completed in 3.24 seconds

We can see from the cell above that each active ribosome molecule is represented by an ID number. Let’s analyze the polypeptide length and the ribosome’s position on mRNA of one active ribosome within this process:

[45]:
# plot output
RIBOSOME_ID = '1246839'

pe_fig = plot_variables(
    pe_data,
    variables=[
        ('unique', 'active_ribosome', RIBOSOME_ID, 'pos_on_mRNA'),
        ('unique', 'active_ribosome', RIBOSOME_ID, 'peptide_length')
        ],
    column_width=10, row_height=3, row_padding=0.5)
../_images/notebooks_Vivarium_ecoli_processes_68_0.png

Here we can see that as the simulation progresses, the ribosome travels along the mRNA strand (as shown by the increasing pos_on_mRNA variable) and polymerization of amino acids into a polypeptide occurs (as shown by the increasing peptide_length variable).

After elongation terminates, we can see an increase in protein counts:

[46]:
pe_fig1 = plot_variables(
    pe_data,
    variables=[
        ('bulk', '6PGLUCONDEHYDROG-MONOMER[c]')
    ],
    column_width=10, row_height=3, row_padding=0.5)
../_images/notebooks_Vivarium_ecoli_processes_71_0.png

Protein Degradation

Polypeptide Degradation Documentation

[47]:
from ecoli.processes.protein_degradation import ProteinDegradation

# load in parameters
pd_params = load_sim_data.get_protein_degradation_config()

# initialize process and topology
protein_degradation = ProteinDegradation(pd_params)
[48]:
# plot topology
pd_topology_plot_settings = {
    'buffer': 1,
    'node_labels': {
        'ecoli-protein-degradation': 'ecoli\nprotein\ndegradation'
    },
    'node_distance': 5,
    'show_ports': False,
    'node_size': 10000,
    'dashed_edges': True,
    'coordinates': {'ecoli-protein-degradation': (1.5, 0.5)}
}

pd_topology_fig = plot_topology(protein_degradation, pd_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_74_0.png
[49]:
# display ports schema
pd_ports = protein_degradation.ports_schema()
pd_printout = make_port_printout(pd_ports)
print(pd_printout)
metabolites:
     L-ALPHA-ALANINE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ARG[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ASN[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     L-ASPARTATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CYS[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 17 schema entries ...

proteins:
     1-ACYLGLYCEROL-3-P-ACYLTRANSFER-MONOMER[i]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     1-PFK-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2-DEHYDROPANTOATE-REDUCT-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2-ISOPROPYLMALATESYN-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2-OCTAPRENYL-METHOXY-BENZOQ-METH-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 4291 schema entries ...


[50]:
# run simulation and retrieve final data
pd_settings = {
    'total_time': 600,
    'initial_state': initial_state,
    'topology': protein_degradation.topology,
    'emit_step': 10}

pd_data = simulate_process(protein_degradation, pd_settings)

Simulation ID: ba09488e-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:34
Completed in 5.69 seconds

For protein degradation, let’s look at the ARTJ-MONOMER[p] monomer, a protein selected for degradation at this time point, as it degrades into its subcomponents:

[51]:
# plot output
pd_fig = plot_variables(
    pd_data,
    variables=[
        ('bulk', 'ARTJ-MONOMER[p]'),
        ('bulk', 'ASN[c]'),
        ('bulk', 'WATER[c]')
        ],
    column_width=10, row_height=3, row_padding=0.5)
../_images/notebooks_Vivarium_ecoli_processes_78_0.png

We can see here that as the ARTJ-MONOMER[p] protein degrades, the count for the amino acid asparagine increases and water is consumed.

RNA Degradation

RNA Degradation Documentation

[52]:
from ecoli.processes.rna_degradation import RnaDegradation

# load in parameters
rd_params = load_sim_data.get_rna_degradation_config()

# initialize process and topology
rna_degradation = RnaDegradation(rd_params)
[53]:
# plot topology
rd_topology_plot_settings = {
    'node_labels': {
        'ecoli-rna-degradation': 'ecoli\nrna\ndegradation',
        'fragmentMetabolites': 'fragment\nMetabolites',
        'listeners\nrna_degradation_listener': '\nlisteners\nrna_\ndegradation_\nlistener',
        'active_ribosome': 'active_\nribosome'
    },
    'show_ports': False,
    'node_size': 17000,
    'node_distance': 3.3,
    'dashed_edges': True,
    'font_size': 17,
    'graph_format': 'hierarchy',
    'coordinates': {'ecoli-rna-degradation': (7, 1.75)}
}

rd_topology_fig = plot_topology(rna_degradation, rd_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_82_0.png
[54]:
# display ports schema
rd_ports = rna_degradation.ports_schema()
rd_printout = make_port_printout(rd_ports)
print(rd_printout)
charged_trna:
     charged-alaT-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     charged-alaU-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     charged-alaV-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     charged-alaW-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     charged-alaX-tRNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 81 schema entries ...

bulk_RNAs:
     EG10001_RNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}
           _updater: nonnegative_accumulate

     EG10002_RNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}
           _updater: nonnegative_accumulate

     EG10003_RNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}
           _updater: nonnegative_accumulate

     EG10004_RNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}
           _updater: nonnegative_accumulate

     EG10006_RNA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}
           _updater: nonnegative_accumulate


     ... skipping 4682 schema entries ...

nmps:
     AMP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CMP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     GMP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     UMP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


fragmentMetabolites:
     polymerized_ATP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     polymerized_CTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     polymerized_GTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     polymerized_UTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     WATER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 2 schema entries ...

fragmentBases:
     polymerized_ATP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     polymerized_CTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     polymerized_GTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     polymerized_UTP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


endoRnases:
     EG10856-MONOMER[p]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG10857-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG10859-MONOMER[i]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG10860-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG10861-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 4 schema entries ...

exoRnases:
     EG11620-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     G7175-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG10858-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG10863-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     EG11259-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 4 schema entries ...

subunits:
     CPLX0-3953[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX0-3962[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


molecules:
     WATER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     PROTON[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


active_ribosome:
*:
          unique_index:
                _default: 0



RNAs:
*:
          unique_index:
                _default: 0
                _updater: set

          TU_index:
                _default: 0
                _updater: set

          is_full_transcript:
                _default: 0
                _updater: set

          can_translate:
                _default: 0
                _updater: set



listeners:
mass:
          cell_mass:
                _default: 0.0

          dry_mass:
                _default: 0.0


rna_degradation_listener:
          fraction_active_endo_rnases:
                _default: 0
                _updater: set
                _emit: True

          diff_relative_first_order_decay:
                _default: 0
                _updater: set
                _emit: True

          fract_endo_rrna_counts:
                _default: 0
                _updater: set
                _emit: True

          count_rna_degraded:
                _default: 0
                _updater: set
                _emit: True

          nucleotides_from_degradation:
                _default: 0
                _updater: set
                _emit: True


          ... skipping 1 schema entries ...



[55]:
# run simulation and retrieve final data
rd_settings = {
    'total_time': 100,
    'initial_state': initial_state,
    'topology': rna_degradation.topology}

rd_data = simulate_process(rna_degradation, rd_settings)

Simulation ID: bdf352a0-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:42
Completed in 10.27 seconds

For RNA degradation, let’s look at a few RNA molecules as the simulation runs:

[56]:
# plot output
rd_fig = plot_variables(
    rd_data,
    variables=[
        ('bulk', 'RNA0-300[c]'),
        ('bulk', 'RNA0-301[c]'),
        ('bulk', 'WATER[c]')
        ],
    column_width=10, row_height=3, row_padding=0.5)
../_images/notebooks_Vivarium_ecoli_processes_86_0.png

RNAs are selected and degraded by endoRNases, and non-functional RNA fragments are digested through exoRNases. During the process water is consumed, and nucleotides, pyrophosphate and protons are released.

Two Component System

Two Component System Documentation

[57]:
from ecoli.processes.two_component_system import TwoComponentSystem

# load in parameters
tcs_params = load_sim_data.get_two_component_system_config()

# initialize process and topology
two_component_system = TwoComponentSystem(tcs_params)
[58]:
# plot topology
tcs_topology_plot_settings = {
    'node_labels': {
        'ecoli-two-component-system': 'ecoli two\ncomponent\nsystem'
    },
    'show_ports': False,
    'node_size': 16000,
    'node_distance': 5.0,
    'dashed_edges': True,
    'font_size': 18,
    'graph_format': 'hierarchy',
    'coordinates': {'ecoli-two-component-system': (1.35, 1)}
}

tcs_topology_fig = plot_topology(two_component_system, tcs_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_90_0.png
[59]:
# display ports schema
tcs_ports = two_component_system.ports_schema()
tcs_printout = make_port_printout(tcs_ports)
print(tcs_printout)
molecules:
     PHOSPHO-ARCB-CPLX[i]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ADP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     PROTON[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ARCB-CPLX[i]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ATP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 36 schema entries ...

listeners:
mass:
          cell_mass:
                _default: 0




[60]:
# tweak initial state??
tcs_initial_state = copy.deepcopy(initial_state)

# run simulation and retrieve final data
tcs_settings = {
    'total_time': 10,
    'initial_state': initial_state,
    'topology': two_component_system.topology}

tcs_data = simulate_process(two_component_system, tcs_settings)

Simulation ID: c62fb3f0-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:55
Completed in 0.038426 seconds
[61]:
tcs_data
[61]:
{'bulk': {'PHOSPHO-ARCB-CPLX[i]': [0, 0, 0, 0, 0, 0],
  'ADP[c]': [404873, 404873, 404873, 404873, 404873, 404873],
  'PROTON[c]': [52, 52, 52, 52, 52, 52],
  'ARCB-CPLX[i]': [0, 0, 0, 0, 0, 0],
  'ATP[c]': [7866030, 7866030, 7866030, 7866030, 7866030, 7866030],
  'PHOSPHO-ARCA[c]': [0, 0, 0, 0, 0, 0],
  'ARCA-MONOMER[c]': [2769, 2769, 2769, 2769, 2769, 2769],
  'Pi[c]': [408412, 408412, 408412, 408412, 408412, 408412],
  'WATER[c]': [34912886892,
   34912886892,
   34912886892,
   34912886892,
   34912886892,
   34912886892],
  'PHOSPHO-BAES-INDOLE-CPLX[i]': [0, 0, 0, 0, 0, 0],
  'BAES-INDOLE-CPLX[i]': [0, 0, 0, 0, 0, 0],
  'PHOSPHO-BAER[c]': [0, 0, 0, 0, 0, 0],
  'BAER-MONOMER[c]': [200, 200, 200, 200, 200, 200],
  'PHOSPHO-BAES[i]': [0, 0, 0, 0, 0, 0],
  'BAES-MONOMER[i]': [19, 19, 19, 19, 19, 19],
  'PHOSPHO-BASS-FE+3-CPLX[i]': [0, 0, 0, 0, 0, 0],
  'BASS-FE+3-CPLX[i]': [0, 0, 0, 0, 0, 0],
  'PHOSPHO-BASR[c]': [0, 0, 0, 0, 0, 0],
  'BASR-MONOMER[c]': [180, 180, 180, 180, 180, 180],
  'PHOSPHO-BASS[i]': [0, 0, 0, 0, 0, 0],
  'BASS-MONOMER[i]': [46, 46, 46, 46, 46, 46],
  'PHOSPHO-DCUS-SUC-CPLX[i]': [0, 0, 0, 0, 0, 0],
  'DCUS-SUC-CPLX[p]': [0, 0, 0, 0, 0, 0],
  'PHOSPHO-DCUR[c]': [0, 0, 0, 0, 0, 0],
  'DCUR-MONOMER[c]': [80, 80, 80, 80, 80, 80],
  'PHOSPHO-DCUS[i]': [0, 0, 0, 0, 0, 0],
  'DCUS-MONOMER[p]': [12, 12, 12, 12, 12, 12],
  'PHOSPHO-NARX-NITRATE-CPLX[i]': [0, 0, 0, 0, 0, 0],
  'NARX-NITRATE-CPLX[i]': [0, 0, 0, 0, 0, 0],
  'PHOSPHO-NARL[c]': [0, 0, 0, 0, 0, 0],
  'NARL-MONOMER[c]': [679, 679, 679, 679, 679, 679],
  'PHOSPHO-NARX[i]': [0, 0, 0, 0, 0, 0],
  'NARX-CPLX[i]': [17, 17, 17, 17, 17, 17],
  'PHOSPHO-PHOQ[i]': [1, 1, 1, 1, 1, 1],
  'CPLX0-8168[i]': [13, 13, 13, 13, 13, 13],
  'PHOSPHO-PHOP[c]': [148, 148, 148, 148, 148, 148],
  'PHOP-MONOMER[c]': [855, 855, 855, 855, 855, 855],
  'PHOSPHO-PHOR[i]': [0, 0, 0, 0, 0, 0],
  'PHOR-CPLX[c]': [0, 0, 0, 0, 0, 0],
  'PHOSPHO-PHOB[c]': [0, 0, 0, 0, 0, 0],
  'PHOB-MONOMER[c]': [88, 88, 88, 88, 88, 88]},
 'listeners': {'mass': {}},
 'time': [0.0, 2.0, 4.0, 6.0, 8.0, 10.0]}

Phosphate groups are transferred from histidine kinases to response regulators and back in response to counts of ligand stimulants

[62]:
# # plot output
# tcs_fig = plot_variables(
#     tcs_data,
#     variables=[
#         ],
#     column_width=10, row_height=3, row_padding=0.5)

Equilibrium

Equilibrium Documentation

[63]:
from ecoli.processes.equilibrium import Equilibrium

# load in parameters
eq_params = load_sim_data.get_equilibrium_config()

# initialize process and topology
equilibrium = Equilibrium(eq_params)
[64]:
# plot topology
eq_topology_plot_settings = {
    'node_labels': {
        'ecoli-equilibrium': 'ecoli\nequilibrium',
        'listeners\nequilibrium_listener': '\nlisteners\nequilibrium\nlistener'
    },
    'show_ports': False,
    'node_size': 14000,
    'node_distance': 5.0,
    'dashed_edges': True,
    'font_size': 18,
    'graph_format': 'hierarchy',
    'coordinates': {'ecoli-equilibrium': (1.5, 1.25)}
}

eq_topology_fig = plot_topology(equilibrium, eq_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_98_0.png
[65]:
# display ports schema
eq_ports = equilibrium.ports_schema()
eq_printout = make_port_printout(eq_ports)
print(eq_printout)
molecules:
     CPLX-123[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     PC00033[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     HYPOXANTHINE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CPLX-125[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     TRP[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 93 schema entries ...

listeners:
mass:
          cell_mass:
                _default: 0


equilibrium_listener:
          reaction_rates:
                _default: []
                _updater: set
                _emit: True




[66]:
# run simulation and retrieve final data
eq_settings = {
    'total_time': 10,
    'initial_state': initial_state,
    'topology': equilibrium.topology}

eq_data = simulate_process(equilibrium, eq_settings)

Simulation ID: c64fab9c-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:55
Completed in 0.182374 seconds
[67]:
# # plot output
# eq_fig = plot_variables(
#     eq_data,
#     variables=[
#         ],
#     column_width=10, row_height=3, row_padding=0.5)

Metabolism

Metabolism Documentation

[68]:
from ecoli.processes.metabolism import Metabolism

# load in parameters
meta_params = load_sim_data.get_metabolism_config()

# initialize process and topology
metabolism = Metabolism(meta_params)
[69]:
# plot topology
meta_topology_plot_settings = {
    'node_labels': {
        'ecoli-metabolism': 'ecoli\nmetabolism',
        'kinetics_enzymes': 'kinetics\nenzymes',
        'kinetics_substrates': 'kinetics\nsubstrates',
        'environment\nexchange_data': '\nenvironment\nexchange_\ndata',
        'listeners\nenzyme_kinetics': '\nlisteners\nenzyme_\nkinetics',
        'polypeptide_elongation': 'polypeptide_\nelongation'
    },
    'show_ports': False,
    'node_size': 15000,
    'node_distance': 3.2,
    'dashed_edges': True,
    'font_size': 17,
    'graph_format': 'hierarchy',
    'coordinates': {'ecoli-metabolism': (4.5, 2)}
}

meta_topology_fig = plot_topology(metabolism, meta_topology_plot_settings)
../_images/notebooks_Vivarium_ecoli_processes_104_0.png
[70]:
# display ports schema
meta_ports = metabolism.ports_schema()
meta_printout = make_port_printout(meta_ports)
print(meta_printout)
metabolites:
     2-3-DIHYDROXYBENZOATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2-KETOGLUTARATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2-PG[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2K-4CH3-PENTANOATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     4-AMINO-BUTYRATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 167 schema entries ...

catalysts:
     1-ACYLGLYCEROL-3-P-ACYLTRANSFER-MONOMER[i]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     1-PFK[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2-DEHYDROPANTOATE-REDUCT-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2-ISOPROPYLMALATESYN-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2-OCTAPRENYL-METHOXY-BENZOQ-METH-MONOMER[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 1472 schema entries ...

kinetics_enzymes:
     3-ISOPROPYLMALDEHYDROG-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     6PFK-1-CPX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     6PFK-2-CPX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     7-ALPHA-HYDROXYSTEROID-DEH-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     7KAPSYN-CPLX[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 307 schema entries ...

kinetics_substrates:
     2-3-DIHYDROXYBENZOATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     2-KETOGLUTARATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     4-AMINO-BUTYRATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     4-hydroxybenzoate[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ACETYL-COA[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 86 schema entries ...

amino_acids:
     L-ALPHA-ALANINE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ARG[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     ASN[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     L-ASPARTATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}

     CYS[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True
           _properties: {'bulk': True}


     ... skipping 16 schema entries ...

amino_acids_total:
     L-ALPHA-ALANINE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     ARG[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     ASN[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     L-ASPARTATE[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True

     CYS[c]:
           _default: 0
           _divider: binomial_ecoli
           _emit: True


     ... skipping 16 schema entries ...

environment:
     media_id:
           _default:
           _updater: set

exchange:
          ACET[p]:
                _default: 0

          AMMONIUM[c]:
                _default: 0

          BETAINE[p]:
                _default: 0

          BUTANAL[c]:
                _default: 0

          CA+2[p]:
                _default: 0


          ... skipping 46 schema entries ...

exchange_data:
          unconstrained:
                _default: []

          constrained:
                _default: []



listeners:
mass:
          cell_mass:
                _default: 0.0

          dry_mass:
                _default: 0.0


fba_results:
          media_id:
                _default:
                _updater: set

          conc_updates:
                _default: []
                _updater: set

          catalyst_counts:
                _default: 0
                _updater: set

          translation_gtp:
                _default: 0
                _updater: set

          coefficient:
                _default: 0.0
                _updater: set


          ... skipping 12 schema entries ...

enzyme_kinetics:
          metaboliteCountsInit:
                _default: 0
                _updater: set

          metaboliteCountsFinal:
                _default: 0
                _updater: set

          enzymeCountsInit:
                _default: 0
                _updater: set

          countsToMolar:
                _default: 1.0
                _updater: set

          actualFluxes:
                _default: []
                _updater: set


          ... skipping 3 schema entries ...


polypeptide_elongation:
     aa_count_diff:
           _default: {}
           _emit: True

     gtp_to_hydrolyze:
           _default: 0
           _emit: True



[71]:
# run simulation and retrieve final data
meta_settings = {
    'total_time': 10,
    'initial_state': initial_state,
    'topology': metabolism.topology}

meta_data = simulate_process(metabolism, meta_settings)

Simulation ID: c73b86d4-2025-11ec-8f9d-8c85908ac627
Created: 09/27/2021 at 23:31:57
Completed in 1.80 seconds
[72]:
reaction_fluxes = meta_data['listeners']['fba_results']['reactionFluxes']
del reaction_fluxes[0]
[73]:
# generate time series
reaction_fluxes_time_series = {}

for fluxes in reaction_fluxes:
    for reaction_id, flux in enumerate(fluxes):
        if reaction_id not in reaction_fluxes_time_series:
            reaction_fluxes_time_series[reaction_id] = []
        reaction_fluxes_time_series[reaction_id].append(flux)
[74]:
# plot figure
import matplotlib.pyplot as plt

fig = plt.figure()

for reaction_id, time_series in reaction_fluxes_time_series.items():
    plt.plot(time_series)

plt.title('Reaction Fluxes')
[74]:
Text(0.5, 1.0, 'Reaction Fluxes')
../_images/notebooks_Vivarium_ecoli_processes_109_1.png