vivarium-ecoli¶

Wiring diagraph of the [Covert lab's Whole-Cell E. coli model][https://github.com/CovertLab/vivarium-ecoli]

In [1]:
import copy
from bigraph_viz import plot_bigraph

save_files = False

plot_settings = {
    'dpi': '70',
    'port_label_size': '12pt',
    'node_label_size': '20pt',
    'process_label_size': '20pt',
    'label_margin': '0.1',
    'undirected_edges': True,
}
if save_files:
    plot_settings['out_dir'] = 'out'
    plot_settings['file_format'] = 'pdf'
    plot_settings['dpi'] = '4000'

E. coli core model¶

In [2]:
ecoli = { 
    'bulk molecules': {},
    'environment': {},
    'chromosome structure': {
        '_type': 'process',
        'inputs': {
            'fragmentBases': ['bulk molecules',],
            'molecules': ['bulk molecules',],
            'active tfs': ['bulk molecules',],
            'subunits': ['bulk molecules',],
            'amino acids': ['bulk molecules',],
            'active replisomes': ['unique molecules', 'active replisome'],
            'oriCs': ['unique molecules', 'oriC'],
            'chromosome domains': ['unique molecules', 'chromosome domain'],
            'active RNAPs': ['unique molecules', 'active RNAP'],
            'RNAs': ['unique molecules', 'RNA'],
            'active ribosome': ['unique molecules', 'active ribosome'],
            'full chromosomes': ['unique molecules', 'full chromosome'],
            'promoters': ['unique molecules', 'promoter'],
            'DnaA boxes': ['unique molecules', 'DnaA box']
        }
    },
    'metabolism': {
        '_type': 'process',
        'inputs': {
            'metabolites': ['bulk molecules',],
            'catalysts': ['bulk molecules',],
            'kinetics enzymes': ['bulk molecules',],
            'kinetics substrates': ['bulk molecules',],
            'amino acids': ['bulk molecules',],
            'environment': ['environment',],
            # 'polypeptide elongation': ['process state', 'polypeptide elongation'],
            'amino acids total': ['bulk molecules',]
        }
    },
    'tf binding': {
         '_type': 'process',
        'inputs': {
            'promoters': ['unique molecules', 'promoter'],
            'active tfs': ['bulk molecules',],
            'active tfs total': ['bulk molecules',],
            'inactive tfs total': ['bulk molecules',],
        }
    },
    'transcript initiation': {
        '_type': 'process',
        'inputs': {
            'environment': ['environment',],
            'full chromosomes': ['unique molecules', 'full chromosome'],
            'RNAs': ['unique molecules', 'RNA'],
            'active RNAPs': ['unique molecules', 'active RNAP'],
            'promoters': ['unique molecules', 'promoter'],
            'molecules': ['bulk molecules',],
        }
    },
    'transcript elongation': {
        '_type': 'process',
        'inputs': {
            'environment': ['environment',],
            'RNAs': ['unique molecules', 'RNA'],
            'active RNAPs': ['unique molecules', 'active RNAP'],
            'molecules': ['bulk molecules',],
            'bulk RNAs': ['bulk molecules',],
            'ntps': ['bulk molecules',],
        }
    },
    'rna degradation': {
        '_type': 'process',
        'inputs': {
            'charged trna': ['bulk molecules',],
            'bulk RNAs': ['bulk molecules',],
            'nmps': ['bulk molecules',],
            'fragmentMetabolites': ['bulk molecules',],
            'fragmentBases': ['bulk molecules',],
            'endoRnases': ['bulk molecules',],
            'exoRnases': ['bulk molecules',],
            'subunits': ['bulk molecules',],
            'molecules': ['bulk molecules',],
            'RNAs': ['unique molecules', 'RNA'],
            'active ribosome': ['unique molecules', 'active ribosome'],
        }
    },
    'polypeptide initiation': {
        '_type': 'process',
        'inputs': {
            'environment': ['environment',],
            'active ribosome': ['unique molecules', 'active ribosome'],
            'RNA': ['unique molecules', 'RNA'],
            'subunits': ['bulk molecules',]
        }
    },
    'polypeptide elongation': {
        '_type': 'process',
        'inputs': {
            'environment': ['environment',],
            'active ribosome': ['unique molecules', 'active ribosome'],
            'molecules': ['bulk molecules',],
            'monomers': ['bulk molecules',],
            'amino acids': ['bulk molecules',],
            'ppgpp reaction metabolites': ['bulk molecules',],
            'uncharged trna': ['bulk molecules',],
            'charged trna': ['bulk molecules',],
            'charging molecules': ['bulk molecules',],
            'synthetases': ['bulk molecules',],
            'subunits': ['bulk molecules',],
            # 'polypeptide elongation': ['process state', 'polypeptide elongation'],
            'molecules total': ['bulk molecules',],
            'amino acids total': ['bulk molecules',],
            'charged trna total': ['bulk molecules',],
            'uncharged trna total': ['bulk molecules',]
        }
    },
    'complexation': {
        '_type': 'process',
        'inputs': {
            'molecules': ['bulk molecules',], 
        }
    },
    'two component system': {
        '_type': 'process',
        'inputs': {
            'molecules': ['bulk molecules',]
        }
    },
    'equilibrium': {
        '_type': 'process',
        'inputs': {
            'molecules': ['bulk molecules',]
        }
    },
    'protein degradation': {
        '_type': 'process',
        'inputs': {
            'metabolites': ['bulk molecules',],
            'proteins': ['bulk molecules',]
        }
    },
    'chromosome replication': {
        '_type': 'process',
        'inputs': {
            'replisome trimers': ['bulk molecules',],
            'replisome monomers': ['bulk molecules',],
            'dntps': ['bulk molecules',],
            'ppi': ['bulk molecules',],
            'active replisomes': ['unique molecules', 'active replisome'],
            'oriCs': ['unique molecules', 'oriC'],
            'chromosome domains': ['unique molecules', 'chromosome domain'],
            'full chromosomes': ['unique molecules', 'full chromosome'],
            'environment': ['environment',]
        }
    },
    'unique molecules': {
        'chromosome domain': {},
        'full chromosome': {},
        'oriC': {},
        'active replisome': {},
        'RNA': {},
        'active ribosome': {},
        'DnaA box': {},
        'promoter': {},
    },

}

E. coli wiring diagram¶

In [3]:
# del ecoli['metabolism']['inputs']['amino acids']
# del ecoli['metabolism']['inputs']['amino acids total']
# del ecoli['metabolism']['inputs']['kinetics enzymes']
# del ecoli['metabolism']['inputs']['kinetics substrates']

node_groups = [[
        # ['unique molecules',], ['bulk molecules',], ['environment',],
    ],
]
plot_settings2 = {
    'node_groups': node_groups,
    'remove_process_place_edges': True,
    'aspect_ratio': 'fill',
    'show_port_labels': False,
    # 'aspect_ratio': '0.25',
}
# plot_settings['dpi'] = '70'

fig = plot_bigraph(ecoli,
                   **plot_settings,
                   **plot_settings2,
                   size='10,3',
                   filename='ecoli'
                   )

fig2 = plot_bigraph(ecoli,
                    **plot_settings,
                    **plot_settings2,
                    size='5,10',
                    rankdir='RL',
                    filename='ecoliRL',
                    )
fig
Writing out/ecoli
Writing out/ecoliRL
Out[3]:
bigraph ('bulk molecules',) bulk molecules ('chromosome structure',) chromosome structure ('bulk molecules',)->('chromosome structure',) subunits ('bulk molecules',)->('chromosome structure',) molecules ('bulk molecules',)->('chromosome structure',) amino acids ('bulk molecules',)->('chromosome structure',) fragmentBases ('bulk molecules',)->('chromosome structure',) active tfs ('tf binding',) tf binding ('bulk molecules',)->('tf binding',) inactive tfs total ('bulk molecules',)->('tf binding',) active tfs total ('bulk molecules',)->('tf binding',) active tfs ('protein degradation',) protein degradation ('bulk molecules',)->('protein degradation',) proteins ('bulk molecules',)->('protein degradation',) metabolites ('equilibrium',) equilibrium ('bulk molecules',)->('equilibrium',) molecules ('two component system',) two component system ('bulk molecules',)->('two component system',) molecules ('complexation',) complexation ('bulk molecules',)->('complexation',) molecules ('transcript initiation',) transcript initiation ('bulk molecules',)->('transcript initiation',) molecules ('transcript elongation',) transcript elongation ('bulk molecules',)->('transcript elongation',) ntps ('bulk molecules',)->('transcript elongation',) molecules ('bulk molecules',)->('transcript elongation',) bulk RNAs ('metabolism',) metabolism ('bulk molecules',)->('metabolism',) amino acids total ('bulk molecules',)->('metabolism',) metabolites ('bulk molecules',)->('metabolism',) kinetics substrates ('bulk molecules',)->('metabolism',) kinetics enzymes ('bulk molecules',)->('metabolism',) amino acids ('bulk molecules',)->('metabolism',) catalysts ('rna degradation',) rna degradation ('bulk molecules',)->('rna degradation',) subunits ('bulk molecules',)->('rna degradation',) molecules ('bulk molecules',)->('rna degradation',) bulk RNAs ('bulk molecules',)->('rna degradation',) endoRnases ('bulk molecules',)->('rna degradation',) fragmentBases ('bulk molecules',)->('rna degradation',) fragmentMetabolites ('bulk molecules',)->('rna degradation',) nmps ('bulk molecules',)->('rna degradation',) charged trna ('bulk molecules',)->('rna degradation',) exoRnases ('polypeptide elongation',) polypeptide elongation ('bulk molecules',)->('polypeptide elongation',) subunits ('bulk molecules',)->('polypeptide elongation',) amino acids total ('bulk molecules',)->('polypeptide elongation',) molecules ('bulk molecules',)->('polypeptide elongation',) uncharged trna ('bulk molecules',)->('polypeptide elongation',) synthetases ('bulk molecules',)->('polypeptide elongation',) ppgpp reaction metabolites ('bulk molecules',)->('polypeptide elongation',) uncharged trna total ('bulk molecules',)->('polypeptide elongation',) monomers ('bulk molecules',)->('polypeptide elongation',) amino acids ('bulk molecules',)->('polypeptide elongation',) molecules total ('bulk molecules',)->('polypeptide elongation',) charged trna total ('bulk molecules',)->('polypeptide elongation',) charged trna ('bulk molecules',)->('polypeptide elongation',) charging molecules ('chromosome replication',) chromosome replication ('bulk molecules',)->('chromosome replication',) dntps ('bulk molecules',)->('chromosome replication',) replisome trimers ('bulk molecules',)->('chromosome replication',) replisome monomers ('bulk molecules',)->('chromosome replication',) ppi ('polypeptide initiation',) polypeptide initiation ('bulk molecules',)->('polypeptide initiation',) subunits ('unique molecules', 'active ribosome') active ribosome ('unique molecules', 'active ribosome')->('chromosome structure',) active ribosome ('unique molecules', 'active ribosome')->('rna degradation',) active ribosome ('unique molecules', 'active ribosome')->('polypeptide elongation',) active ribosome ('unique molecules', 'active ribosome')->('polypeptide initiation',) active ribosome ('unique molecules', 'promoter') promoter ('unique molecules', 'promoter')->('chromosome structure',) promoters ('unique molecules', 'promoter')->('tf binding',) promoters ('unique molecules', 'promoter')->('transcript initiation',) promoters ('unique molecules', 'oriC') oriC ('unique molecules', 'oriC')->('chromosome structure',) oriCs ('unique molecules', 'oriC')->('chromosome replication',) oriCs ('unique molecules', 'DnaA box') DnaA box ('unique molecules', 'DnaA box')->('chromosome structure',) DnaA boxes ('unique molecules', 'chromosome domain') chromosome domain ('unique molecules', 'chromosome domain')->('chromosome structure',) chromosome domains ('unique molecules', 'chromosome domain')->('chromosome replication',) chromosome domains ('unique molecules', 'active RNAP') active RNAP ('unique molecules', 'active RNAP')->('chromosome structure',) active RNAPs ('unique molecules', 'active RNAP')->('transcript initiation',) active RNAPs ('unique molecules', 'active RNAP')->('transcript elongation',) active RNAPs ('unique molecules', 'full chromosome') full chromosome ('unique molecules', 'full chromosome')->('chromosome structure',) full chromosomes ('unique molecules', 'full chromosome')->('transcript initiation',) full chromosomes ('unique molecules', 'full chromosome')->('chromosome replication',) full chromosomes ('unique molecules', 'active replisome') active replisome ('unique molecules', 'active replisome')->('chromosome structure',) active replisomes ('unique molecules', 'active replisome')->('chromosome replication',) active replisomes ('unique molecules', 'RNA') RNA ('unique molecules', 'RNA')->('chromosome structure',) RNAs ('unique molecules', 'RNA')->('transcript initiation',) RNAs ('unique molecules', 'RNA')->('transcript elongation',) RNAs ('unique molecules', 'RNA')->('rna degradation',) RNAs ('unique molecules', 'RNA')->('polypeptide initiation',) RNA ('unique molecules',) unique molecules ('unique molecules',)->('unique molecules', 'active ribosome') ('unique molecules',)->('unique molecules', 'promoter') ('unique molecules',)->('unique molecules', 'oriC') ('unique molecules',)->('unique molecules', 'DnaA box') ('unique molecules',)->('unique molecules', 'chromosome domain') ('unique molecules',)->('unique molecules', 'active RNAP') ('unique molecules',)->('unique molecules', 'full chromosome') ('unique molecules',)->('unique molecules', 'active replisome') ('unique molecules',)->('unique molecules', 'RNA') ('environment',) environment ('environment',)->('transcript initiation',) environment ('environment',)->('transcript elongation',) environment ('environment',)->('metabolism',) environment ('environment',)->('polypeptide elongation',) environment ('environment',)->('chromosome replication',) environment ('environment',)->('polypeptide initiation',) environment

E. coli subsets¶

In [4]:
ecoli_subset1 = {
    'chromosome structure': ecoli['chromosome structure'],
    # 'metabolism': ecoli['metabolism'],
    # 'tf binding': ecoli['tf binding'],
    'transcript initiation': ecoli['transcript initiation'],
}

# ecoli subset 2 pulls out only the processes that are connected to bulk, and not to unique
rna_deg = ecoli['rna degradation'].copy()
del rna_deg['inputs']['RNAs']
del rna_deg['inputs']['active ribosome']
ecoli_subset2 = {
    'metabolism': ecoli['metabolism'],
    'rna degradation': rna_deg,
    'protein degradation': ecoli['protein degradation'],
}

plot_settings3 = {
    'node_groups': node_groups,
    'remove_process_place_edges': True,
}
plot_bigraph(ecoli_subset1,
             **plot_settings,
             **plot_settings3,
             rankdir='RL',
             filename='ecoli_subset1')
plot_bigraph(ecoli_subset2,
             **plot_settings,
             **plot_settings3,
             rankdir='LR',
             filename='ecoli_subset2')
Writing out/ecoli_subset1
Writing out/ecoli_subset2
Out[4]:
bigraph ('bulk molecules',) bulk molecules ('protein degradation',) protein degradation ('bulk molecules',)->('protein degradation',) proteins ('bulk molecules',)->('protein degradation',) metabolites ('metabolism',) metabolism ('bulk molecules',)->('metabolism',) amino acids total ('bulk molecules',)->('metabolism',) metabolites ('bulk molecules',)->('metabolism',) kinetics substrates ('bulk molecules',)->('metabolism',) kinetics enzymes ('bulk molecules',)->('metabolism',) amino acids ('bulk molecules',)->('metabolism',) catalysts ('rna degradation',) rna degradation ('bulk molecules',)->('rna degradation',) subunits ('bulk molecules',)->('rna degradation',) molecules ('bulk molecules',)->('rna degradation',) bulk RNAs ('bulk molecules',)->('rna degradation',) endoRnases ('bulk molecules',)->('rna degradation',) fragmentBases ('bulk molecules',)->('rna degradation',) fragmentMetabolites ('bulk molecules',)->('rna degradation',) nmps ('bulk molecules',)->('rna degradation',) charged trna ('bulk molecules',)->('rna degradation',) exoRnases ('environment',) environment ('environment',)->('metabolism',) environment

E. coli use cases¶

In [5]:
import copy
ecolin = copy.deepcopy(ecoli)
In [6]:
ecolin.keys()
Out[6]:
dict_keys(['bulk molecules', 'environment', 'chromosome structure', 'metabolism', 'tf binding', 'transcript initiation', 'transcript elongation', 'rna degradation', 'polypeptide initiation', 'polypeptide elongation', 'complexation', 'two component system', 'equilibrium', 'protein degradation', 'chromosome replication', 'unique molecules'])
In [7]:
ecolin['transcript initiation']
Out[7]:
{'_type': 'process',
 'inputs': {'environment': ['environment'],
  'full chromosomes': ['unique molecules', 'full chromosome'],
  'RNAs': ['unique molecules', 'RNA'],
  'active RNAPs': ['unique molecules', 'active RNAP'],
  'promoters': ['unique molecules', 'promoter'],
  'molecules': ['bulk molecules']}}
In [8]:
ecolin['metabolism']['inputs']['environment']
Out[8]:
['environment']

reduced E. coli unknown mechanism¶

In [9]:
ecolin2 = copy.deepcopy(ecolin)
ecoli_subsetX = {
    'metabolism': ecolin2['metabolism'].copy(),
    'degradation': ecolin2['protein degradation'].copy(),
    # 'tf binding': ecolin2['tf binding'].copy(),
    'transcription': ecolin2['transcript initiation'].copy(),
    'translation': ecolin2['polypeptide initiation'].copy(),
    'chromosome replication': ecolin2['chromosome replication'].copy(),
    'complexation': ecolin2['complexation'].copy(),
}

# modify
# del ecoli_subsetX['metabolism']['inputs']['environment']
del ecoli_subsetX['metabolism']['inputs']['amino acids']
del ecoli_subsetX['metabolism']['inputs']['amino acids total']
del ecoli_subsetX['metabolism']['inputs']['kinetics enzymes']
del ecoli_subsetX['metabolism']['inputs']['kinetics substrates']
# del ecoli_subsetX['transcription']['inputs']['environment']
# del ecoli_subsetX['translation']['inputs']['environment']
del ecoli_subsetX['transcription']['inputs']['promoters']
del ecoli_subsetX['chromosome replication']['inputs']['full chromosomes']
del ecoli_subsetX['chromosome replication']['inputs']['oriCs']

# put environment up one level
ecoli_subsetX['metabolism']['inputs']['environment'] = ['..', 'environment']
ecoli_subsetX['transcription']['inputs']['environment'] = ['..', 'environment']
ecoli_subsetX['translation']['inputs']['environment'] = ['..', 'environment']
ecoli_subsetX['chromosome replication']['inputs']['environment'] = ['..', 'environment']

cell_id = 'microbe'
unknown_func = 'unknown function'

# add unknown mechanism
ecoli_subsetX[unknown_func] = {
    '_type': 'process',
    '_inputs': {
        'bulk': 'any',
        'unique': 'any',
        'environment': 'any',
        'cell': 'any',
    },
    'inputs': {
        'bulk': ['bulk molecules',],
        'unique': ['unique molecules',],
        'environment': ['..', 'environment',],
        'cell': ['..', cell_id,],
    }
}

# nest under 'cell_id'
ecoli_subsetX1 = {cell_id: ecoli_subsetX}

# settings
node_groupsX = [
    [[cell_id, unknown_func,],['environment',],[cell_id,],],
    [[cell_id, 'unique molecules',],[cell_id, 'bulk molecules',],],
    [[cell_id, 'metabolism',],[cell_id, 'transcription',],[cell_id, 'translation',],[cell_id, 'degradation',],],
]
node_border_colors = {
    (cell_id, unknown_func,): 'red',
}
plot_settingsX = {
    'node_groups': node_groupsX,
    'node_border_colors': node_border_colors,
    'remove_process_place_edges': True,
    'size': '10,10',
    'aspect_ratio': 'compress',
    # 'rankdir': 'LR',
}
# plot_settings['dpi'] = '500'
plot_bigraph(ecoli_subsetX1,
             **plot_settings,
             **plot_settingsX,
             filename='ecoli_subsetX')
Writing out/ecoli_subsetX
Out[9]:
bigraph ('microbe',) microbe ('microbe', 'bulk molecules') bulk molecules ('microbe',)->('microbe', 'bulk molecules') ('microbe', 'unique molecules') unique molecules ('microbe',)->('microbe', 'unique molecules') ('microbe', 'metabolism') metabolism ('microbe', 'degradation') degradation ('microbe', 'transcription') transcription ('microbe', 'translation') translation ('microbe', 'chromosome replication') chromosome replication ('microbe', 'complexation') complexation ('microbe', 'unknown function') unknown function ('microbe',)->('microbe', 'unknown function') cell ('environment',) environment ('environment',)->('microbe', 'metabolism') environment ('environment',)->('microbe', 'transcription') environment ('environment',)->('microbe', 'translation') environment ('environment',)->('microbe', 'chromosome replication') environment ('environment',)->('microbe', 'unknown function') environment ('microbe', 'bulk molecules')->('microbe', 'metabolism') metabolites ('microbe', 'bulk molecules')->('microbe', 'metabolism') catalysts ('microbe', 'bulk molecules')->('microbe', 'degradation') proteins ('microbe', 'bulk molecules')->('microbe', 'degradation') metabolites ('microbe', 'bulk molecules')->('microbe', 'transcription') molecules ('microbe', 'bulk molecules')->('microbe', 'translation') subunits ('microbe', 'bulk molecules')->('microbe', 'chromosome replication') replisome trimers ('microbe', 'bulk molecules')->('microbe', 'chromosome replication') replisome monomers ('microbe', 'bulk molecules')->('microbe', 'chromosome replication') dntps ('microbe', 'bulk molecules')->('microbe', 'chromosome replication') ppi ('microbe', 'bulk molecules')->('microbe', 'complexation') molecules ('microbe', 'bulk molecules')->('microbe', 'unknown function') bulk ('microbe', 'unique molecules', 'active RNAP') active RNAP ('microbe', 'unique molecules', 'active RNAP')->('microbe', 'transcription') active RNAPs ('microbe', 'unique molecules', 'full chromosome') full chromosome ('microbe', 'unique molecules', 'full chromosome')->('microbe', 'transcription') full chromosomes ('microbe', 'unique molecules', 'RNA') RNA ('microbe', 'unique molecules', 'RNA')->('microbe', 'transcription') RNAs ('microbe', 'unique molecules', 'RNA')->('microbe', 'translation') RNA ('microbe', 'unique molecules', 'active ribosome') active ribosome ('microbe', 'unique molecules', 'active ribosome')->('microbe', 'translation') active ribosome ('microbe', 'unique molecules', 'active replisome') active replisome ('microbe', 'unique molecules', 'active replisome')->('microbe', 'chromosome replication') active replisomes ('microbe', 'unique molecules', 'chromosome domain') chromosome domain ('microbe', 'unique molecules', 'chromosome domain')->('microbe', 'chromosome replication') chromosome domains ('microbe', 'unique molecules')->('microbe', 'unique molecules', 'active RNAP') ('microbe', 'unique molecules')->('microbe', 'unique molecules', 'full chromosome') ('microbe', 'unique molecules')->('microbe', 'unique molecules', 'RNA') ('microbe', 'unique molecules')->('microbe', 'unique molecules', 'active ribosome') ('microbe', 'unique molecules')->('microbe', 'unique molecules', 'active replisome') ('microbe', 'unique molecules')->('microbe', 'unique molecules', 'chromosome domain') ('microbe', 'unique molecules')->('microbe', 'unknown function') unique
In [10]:
ecoli1 = {
    'biomanufacturing ecoli': {
        '_type': 'process',
        '_inputs': {
            # For gene expression, protein interactions, and metabolite dynamics
            'gene expression': 'any',
            'protein interactions': 'any',
            'metabolite dynamics': 'any',
        },
        '_outputs': {
            #cellular composition, properties such as cell size and growth rate, and higher-order behavior
            'cell composition': 'any',
            'cell properties': 'any',
            'higher order behavior': 'any',

        }
    }
}
ecoli2 = {
    'antimicrobial efficacy ecoli': {
        '_type': 'process',
        '_inputs': {
            # For gene expression, protein interactions, and metabolite dynamics
            'gene expression': 'any',
            'protein interactions': 'any',
            'metabolite dynamics': 'any',
        },
        '_outputs': {
            #cellular composition, properties such as cell size and growth rate, and higher-order behavior
            'cell composition': 'any',
            'cell properties': 'any',
            'higher order behavior': 'any',
        }
    }
}


plot_settings2['dpi'] = '100'
plot_bigraph(ecoli1, **plot_settings2, filename='ecoli1')
plot_bigraph(ecoli2, **plot_settings2, filename='ecoli2')
Writing out/ecoli1
Writing out/ecoli2
Out[10]:
bigraph ('antimicrobial efficacy ecoli',) antimicrobial efficacy ecoli ('antimicrobial efficacy ecoli', 'm', 'e', 't', 'a', 'b', 'o', 'l', 'i', 't', 'e', ' ', 'd', 'y', 'n', 'a', 'm', 'i', 'c', 's')_input->('antimicrobial efficacy ecoli',) metabolite dynamics ('antimicrobial efficacy ecoli', 'p', 'r', 'o', 't', 'e', 'i', 'n', ' ', 'i', 'n', 't', 'e', 'r', 'a', 'c', 't', 'i', 'o', 'n', 's')_input->('antimicrobial efficacy ecoli',) protein interactions ('antimicrobial efficacy ecoli', 'g', 'e', 'n', 'e', ' ', 'e', 'x', 'p', 'r', 'e', 's', 's', 'i', 'o', 'n')_input->('antimicrobial efficacy ecoli',) gene expression ('antimicrobial efficacy ecoli', 'c', 'e', 'l', 'l', ' ', 'c', 'o', 'm', 'p', 'o', 's', 'i', 't', 'i', 'o', 'n')_output->('antimicrobial efficacy ecoli',) cell composition ('antimicrobial efficacy ecoli', 'h', 'i', 'g', 'h', 'e', 'r', ' ', 'o', 'r', 'd', 'e', 'r', ' ', 'b', 'e', 'h', 'a', 'v', 'i', 'o', 'r')_output->('antimicrobial efficacy ecoli',) higher order behavior ('antimicrobial efficacy ecoli', 'c', 'e', 'l', 'l', ' ', 'p', 'r', 'o', 'p', 'e', 'r', 't', 'i', 'e', 's')_output->('antimicrobial efficacy ecoli',) cell properties

Antibiotic E. coli COmposite¶

In [11]:
ecoli_antibiotics = {
    'antibiotic efficacy ecoli': {
        'replication': {
            '_type': 'process',
            'inputs': {
                'chromosomes': ['chromosomes'],
                'molecules': ['bulk molecules', 'AAs, NTPs, dNTPs',],
            }
        },
        'transcription': {
            '_type': 'process',
            'inputs': {
                'chromosomes': ['chromosomes'],
                'mRNAs': ['bulk molecules', 'mRNAs'],
                'molecules': ['bulk molecules', 'AAs, NTPs, dNTPs',],
            }
        },
        'degradation': {
            '_type': 'process',
            'inputs': {
                'molecules': ['bulk molecules', 'AAs, NTPs, dNTPs',],
                'metabolites': ['bulk molecules', 'metabolites'],
                'proteins': ['bulk molecules', 'proteins'],
            }
        },
        'translation': {
            '_type': 'process',
            'inputs': {
                'mRNAs': ['bulk molecules', 'mRNAs'],
                'proteins': ['bulk molecules', 'proteins'],
                'molecules': ['bulk molecules', 'AAs, NTPs, dNTPs',],
            }
        },
        'metabolism': {
            '_type': 'process',
            'inputs': {
                'proteins': ['bulk molecules', 'proteins'],
                'molecules': ['bulk molecules', 'AAs, NTPs, dNTPs',],
            }
        },
        'antibiotic transport': {
            '_type': 'process',
            'inputs': {
                'antibiotics': ['antibiotics', 'β-Lactams'],
                'molecules': ['bulk molecules', 'AAs, NTPs, dNTPs',],
            }
        },
        'antibiotic binding': {
            '_type': 'process',
            'inputs': {
                'antibiotics': ['antibiotics', 'β-Lactams'],
                'molecules': ['bulk molecules',],
            }
        },
        'cell wall growth': {
            '_type': 'process',
            'inputs': {
                'antibiotics': ['antibiotics', 'β-Lactams'],
                'wall': ['cell wall',],
            }
        },
        'lysis': {
            '_type': 'process',
            'inputs': {
                'wall': ['cell wall',],
            }
        },
    }
}
plot_settingsx = {
    'node_border_colors': {
        ('antibiotic efficacy ecoli', 'cell wall'): 'red',
        ('antibiotic efficacy ecoli', 'antibiotics'): 'red',
        ('antibiotic efficacy ecoli', 'antibiotics', 'β-Lactams'): 'red',
        ('antibiotic efficacy ecoli', 'antibiotic transport'): 'red',
        ('antibiotic efficacy ecoli', 'antibiotic binding'): 'red',
        ('antibiotic efficacy ecoli', 'cell wall growth'): 'red',
        ('antibiotic efficacy ecoli', 'lysis'): 'red',
    },
    'port_label_size': '12pt',
    'node_label_size': '16pt',
    'process_label_size': '20pt',
    'label_margin': '0.1',
    'undirected_edges': True,
    'remove_process_place_edges': True,
    # 'aspect_ratio': 'fill',
    'port_labels': False,
    'out_dir': 'out',
    'file_format': 'png',
    # 'dpi': '2000',
}
    # plot_settings['out_dir'] = 'out'
    # plot_settings['file_format'] = 'png'
    # plot_settings['dpi'] = '5000'
plot_bigraph(ecoli_antibiotics, **plot_settingsx, filename='ecoli_antibiotics')
Writing out/ecoli_antibiotics
Out[11]:
bigraph ('antibiotic efficacy ecoli',) antibiotic efficacy ecoli ('antibiotic efficacy ecoli', 'bulk molecules') bulk molecules ('antibiotic efficacy ecoli',)->('antibiotic efficacy ecoli', 'bulk molecules') ('antibiotic efficacy ecoli', 'cell wall') cell wall ('antibiotic efficacy ecoli',)->('antibiotic efficacy ecoli', 'cell wall') ('antibiotic efficacy ecoli', 'chromosomes') chromosomes ('antibiotic efficacy ecoli',)->('antibiotic efficacy ecoli', 'chromosomes') ('antibiotic efficacy ecoli', 'antibiotics') antibiotics ('antibiotic efficacy ecoli',)->('antibiotic efficacy ecoli', 'antibiotics') ('antibiotic efficacy ecoli', 'antibiotic transport') antibiotic transport ('antibiotic efficacy ecoli', 'antibiotic binding') antibiotic binding ('antibiotic efficacy ecoli', 'cell wall growth') cell wall growth ('antibiotic efficacy ecoli', 'metabolism') metabolism ('antibiotic efficacy ecoli', 'transcription') transcription ('antibiotic efficacy ecoli', 'lysis') lysis ('antibiotic efficacy ecoli', 'replication') replication ('antibiotic efficacy ecoli', 'translation') translation ('antibiotic efficacy ecoli', 'degradation') degradation ('antibiotic efficacy ecoli', 'antibiotics', 'β-Lactams') β-Lactams ('antibiotic efficacy ecoli', 'antibiotics', 'β-Lactams')->('antibiotic efficacy ecoli', 'antibiotic transport') ('antibiotic efficacy ecoli', 'antibiotics', 'β-Lactams')->('antibiotic efficacy ecoli', 'antibiotic binding') ('antibiotic efficacy ecoli', 'antibiotics', 'β-Lactams')->('antibiotic efficacy ecoli', 'cell wall growth') ('antibiotic efficacy ecoli', 'bulk molecules', 'AAs, NTPs, dNTPs') AAs, NTPs, dNTPs ('antibiotic efficacy ecoli', 'bulk molecules', 'AAs, NTPs, dNTPs')->('antibiotic efficacy ecoli', 'antibiotic transport') ('antibiotic efficacy ecoli', 'bulk molecules', 'AAs, NTPs, dNTPs')->('antibiotic efficacy ecoli', 'metabolism') ('antibiotic efficacy ecoli', 'bulk molecules', 'AAs, NTPs, dNTPs')->('antibiotic efficacy ecoli', 'transcription') ('antibiotic efficacy ecoli', 'bulk molecules', 'AAs, NTPs, dNTPs')->('antibiotic efficacy ecoli', 'replication') ('antibiotic efficacy ecoli', 'bulk molecules', 'AAs, NTPs, dNTPs')->('antibiotic efficacy ecoli', 'translation') ('antibiotic efficacy ecoli', 'bulk molecules', 'AAs, NTPs, dNTPs')->('antibiotic efficacy ecoli', 'degradation') ('antibiotic efficacy ecoli', 'bulk molecules')->('antibiotic efficacy ecoli', 'bulk molecules', 'AAs, NTPs, dNTPs') ('antibiotic efficacy ecoli', 'bulk molecules', 'proteins') proteins ('antibiotic efficacy ecoli', 'bulk molecules')->('antibiotic efficacy ecoli', 'bulk molecules', 'proteins') ('antibiotic efficacy ecoli', 'bulk molecules', 'mRNAs') mRNAs ('antibiotic efficacy ecoli', 'bulk molecules')->('antibiotic efficacy ecoli', 'bulk molecules', 'mRNAs') ('antibiotic efficacy ecoli', 'bulk molecules', 'metabolites') metabolites ('antibiotic efficacy ecoli', 'bulk molecules')->('antibiotic efficacy ecoli', 'bulk molecules', 'metabolites') ('antibiotic efficacy ecoli', 'bulk molecules')->('antibiotic efficacy ecoli', 'antibiotic binding') ('antibiotic efficacy ecoli', 'cell wall')->('antibiotic efficacy ecoli', 'cell wall growth') ('antibiotic efficacy ecoli', 'cell wall')->('antibiotic efficacy ecoli', 'lysis') ('antibiotic efficacy ecoli', 'bulk molecules', 'proteins')->('antibiotic efficacy ecoli', 'metabolism') ('antibiotic efficacy ecoli', 'bulk molecules', 'proteins')->('antibiotic efficacy ecoli', 'translation') ('antibiotic efficacy ecoli', 'bulk molecules', 'proteins')->('antibiotic efficacy ecoli', 'degradation') ('antibiotic efficacy ecoli', 'bulk molecules', 'mRNAs')->('antibiotic efficacy ecoli', 'transcription') ('antibiotic efficacy ecoli', 'bulk molecules', 'mRNAs')->('antibiotic efficacy ecoli', 'translation') ('antibiotic efficacy ecoli', 'chromosomes')->('antibiotic efficacy ecoli', 'transcription') ('antibiotic efficacy ecoli', 'chromosomes')->('antibiotic efficacy ecoli', 'replication') ('antibiotic efficacy ecoli', 'antibiotics')->('antibiotic efficacy ecoli', 'antibiotics', 'β-Lactams') ('antibiotic efficacy ecoli', 'bulk molecules', 'metabolites')->('antibiotic efficacy ecoli', 'degradation')

E. coli colony¶

E. coli colony¶

In [12]:
ecoli_schema = {
    '_type': 'process',
    'inputs': {'uptake': ['..', 'fields'],}}
n_ecoli = 6

ecoli_env = {
    # 'environment': {
        'cells': {
            f'ecoli{n}': ecoli_schema for n in range(1, n_ecoli)
        },
        'fields': {},
        'diffusion': {
            '_type': 'process',
            'inputs': {
                '': ['fields',]
            }
        },
        'mother machine': {
            '_type': 'process',
            'inputs': {
                '': ['cells',]
            }
        }
    # }
}

plot_settings3 = {
    'rankdir': 'TB',
    'port_labels': False,
    'size': '10,10',
    'node_groups': [
        [['diffusion',], ['mother machine',], ['cells',], ['fields',],],
        # [['environment', 'diffusion',], ['environment', 'mother machine',], ['environment', 'cells',], ['environment', 'fields',],],
    ],
}
plot_bigraph(ecoli_env,
             **plot_settings,
             **plot_settings3,
             filename='ecoli_colony')
Writing out/ecoli_colony
Out[12]:
bigraph ('fields',) fields ('diffusion',) diffusion ('fields',)->('diffusion',) ('cells',) cells ('mother machine',) mother machine ('cells',)->('mother machine',)

E. coli with ML components¶

In [13]:
hybrid_ecoli = {
    'ML_model': {
        '_type': 'process',
        'inputs': {
            'training_data': ['experimental_data'],  # Experimental or simulated data for training
            'model_checkpoint': ['model'],  # Saved model state for inference or fine-tuning
            'hyperparameters': ['parameters'],  # Learning rate, architecture, etc.
            'mechanistic_predictions': ['mechanistic_outputs'],  # Feedback from mechanistic model
        },
        'outputs': {
            'learned_parameters': ['parameters'],  # Tuned parameters for mechanistic model
            'predictions': ['ml_predictions'],  # Forecasted states or outputs
            # 'uncertainty_estimates': ['ml_uncertainty'],  # Confidence in predictions
        }
    },
    'core_mechanistic_model': {
        '_type': 'process',
        'inputs': {
            'model': ['model'],  # Saved model state for inference or fine-tuning
            'initial_conditions': ['initial_state'],  # Initial biochemical states
            'parameters': ['parameters'],  # Updated parameters from ML module
        },
        'outputs': {
            'simulation_results': ['mechanistic_outputs'],  # Time-series of biochemical states
        }
    },
    'data_integration': {
        '_type': 'process',
        'inputs': {
            'experimental_data': ['experimental_data'],  # Direct observations from experiments
            'simulation_results': ['mechanistic_outputs'],  # Mechanistic model outputs
            'ml_predictions': ['ml_predictions'],  # ML-generated outputs
        },
        'outputs': {
            'processed_data': ['processed_data'],  # Cleaned and formatted dataset
            # 'performance_metrics': ['evaluation'],  # Model performance comparison
        }
    }
}

composite_ecoli = {
    'ecoli': {
        '_type': 'composite',
        **hybrid_ecoli,
        'inputs': {
            'experimental_data': ['experimental_data'],
            'model': ['ecoli_model'],
            'parameters': ['EcoCyc'],
        },
        'outputs': {
            'predictions': ['predictions'],
        },
        'bridge': {
            'inputs': {
                'experimental_data': ['experimental_data'],
                'model': ['model'],
                'parameters': ['parameters'],
            },
            'outputs': {
                'predictions': ['processed_data'],
            }
        },
    }
}



plot_settings4 = {
    'rankdir': 'LR',
    'port_labels': False,
    'remove_process_place_edges': True,
}
plot_bigraph(composite_ecoli,
             # **plot_settings,
             **plot_settings4,
             filename='ml_ecoli')
Writing out/ml_ecoli
Out[13]:
bigraph ('EcoCyc',) EcoCyc ('ecoli',) ecoli ('EcoCyc',)->('ecoli',) ('ecoli_model',) ecoli_model ('ecoli_model',)->('ecoli',) ('experimental_data',) experimental_data ('experimental_data',)->('ecoli',) ('predictions',) predictions ('predictions',)->('ecoli',) ('ecoli', 'experimental_data') experimental_data ('ecoli', 'experimental_data')->('ecoli',) ('ecoli', 'ML_model') ML_model ('ecoli', 'experimental_data')->('ecoli', 'ML_model') ('ecoli', 'data_integration') data_integration ('ecoli', 'experimental_data')->('ecoli', 'data_integration') ('ecoli', 'parameters') parameters ('ecoli', 'parameters')->('ecoli',) ('ecoli', 'parameters')->('ecoli', 'ML_model') ('ecoli', 'parameters')->('ecoli', 'ML_model') ('ecoli', 'core_mechanistic_model') core_mechanistic_model ('ecoli', 'parameters')->('ecoli', 'core_mechanistic_model') ('ecoli', 'model') model ('ecoli', 'model')->('ecoli',) ('ecoli', 'model')->('ecoli', 'ML_model') ('ecoli', 'model')->('ecoli', 'core_mechanistic_model') ('ecoli', 'mechanistic_outputs') mechanistic_outputs ('ecoli', 'mechanistic_outputs')->('ecoli', 'ML_model') ('ecoli', 'mechanistic_outputs')->('ecoli', 'core_mechanistic_model') ('ecoli', 'mechanistic_outputs')->('ecoli', 'data_integration') ('ecoli', 'ml_predictions') ml_predictions ('ecoli', 'ml_predictions')->('ecoli', 'ML_model') ('ecoli', 'ml_predictions')->('ecoli', 'data_integration') ('ecoli', 'initial_state') initial_state ('ecoli', 'initial_state')->('ecoli', 'core_mechanistic_model') ('ecoli', 'processed_data') processed_data ('ecoli', 'processed_data')->('ecoli',) ('ecoli', 'processed_data')->('ecoli', 'data_integration') ('ecoli',)->('ecoli', 'experimental_data') ('ecoli',)->('ecoli', 'parameters') ('ecoli',)->('ecoli', 'model') ('ecoli',)->('ecoli', 'mechanistic_outputs') ('ecoli',)->('ecoli', 'ml_predictions') ('ecoli',)->('ecoli', 'initial_state') ('ecoli',)->('ecoli', 'processed_data')
In [14]:
comp = {
    'stochastic transcription': {
        '_type': 'process',
        'inputs': {
            'DNA': ['DNA [counts]'],
            'RNA': ['RNA [counts]'],
        }
    },
    'counts to mg/mL': {
        '_type': 'process',
        'inputs': {
            'RNA_counts': ['RNA [counts]'],
            'RNA_concs': ['RNA [mg/mL]'],
            'volume': ['volume'],
        }
    },
    'deterministic translation': {
        '_type': 'process',
        'inputs': {
            'RNA': ['RNA [mg/mL]'],
            'Protein': ['Protein [mg/mL]'],
        }
    },
    'DNA [counts]': {},
    'RNA [counts]': {},
    'RNA [mg/mL]': {},
    'Protein [mg/mL]': {},
    'volume': {},
}

plot_settings3 = {
    **plot_settings,
    'remove_process_place_edges': True,
    'rankdir': 'BT',
    'port_labels': False,
}
plot_bigraph(comp, **plot_settings3, filename='comp')
Writing out/comp
Out[14]:
bigraph ('volume',) volume ('counts to mg/mL',) counts to mg/mL ('volume',)->('counts to mg/mL',) ('RNA [counts]',) RNA [counts] ('RNA [counts]',)->('counts to mg/mL',) ('stochastic transcription',) stochastic transcription ('RNA [counts]',)->('stochastic transcription',) ('RNA [mg/mL]',) RNA [mg/mL] ('RNA [mg/mL]',)->('counts to mg/mL',) ('deterministic translation',) deterministic translation ('RNA [mg/mL]',)->('deterministic translation',) ('Protein [mg/mL]',) Protein [mg/mL] ('Protein [mg/mL]',)->('deterministic translation',) ('DNA [counts]',) DNA [counts] ('DNA [counts]',)->('stochastic transcription',)
In [15]:
comp_div = {
    'division': {
        '_type': 'process',
        'inputs': {
            'volume': ['volume'],
            'divide': ['..', '..', 'cells'],
        }
    },
    **comp
}

env = {
    'fields': {},
    'dimensions': {},
    'multibody': {
        '_type': 'process',
        'inputs': {
            'cells': ['cells']
        }
    },
    'diffusion': {
        '_type': 'process',
        'inputs': {
            'cells': ['cells'],
            'fields': ['fields'],
            'dimensions': ['dimensions']
        }
    }
}

comp_nested = {
    'cells': {
        '0': comp_div
    },
    **env
}
plot_settings3 = {
    **plot_settings,
    'remove_process_place_edges': True,
    'port_labels': False,
}
plot_bigraph(comp_nested, **plot_settings3, filename='comp_nested1')
Writing out/comp_nested1
Out[15]:
bigraph ('cells',) cells ('cells', '0') 0 ('cells',)->('cells', '0') ('multibody',) multibody ('cells',)->('multibody',) ('cells', '0', 'division') division ('cells',)->('cells', '0', 'division') ('diffusion',) diffusion ('cells',)->('diffusion',) ('cells', '0', 'volume') volume ('cells', '0')->('cells', '0', 'volume') ('cells', '0', 'RNA [counts]') RNA [counts] ('cells', '0')->('cells', '0', 'RNA [counts]') ('cells', '0', 'RNA [mg/mL]') RNA [mg/mL] ('cells', '0')->('cells', '0', 'RNA [mg/mL]') ('cells', '0', 'DNA [counts]') DNA [counts] ('cells', '0')->('cells', '0', 'DNA [counts]') ('cells', '0', 'Protein [mg/mL]') Protein [mg/mL] ('cells', '0')->('cells', '0', 'Protein [mg/mL]') ('cells', '0', 'counts to mg/mL') counts to mg/mL ('cells', '0', 'stochastic transcription') stochastic transcription ('cells', '0', 'deterministic translation') deterministic translation ('cells', '0', 'volume')->('cells', '0', 'counts to mg/mL') ('cells', '0', 'volume')->('cells', '0', 'division') ('cells', '0', 'RNA [counts]')->('cells', '0', 'counts to mg/mL') ('cells', '0', 'RNA [counts]')->('cells', '0', 'stochastic transcription') ('cells', '0', 'RNA [mg/mL]')->('cells', '0', 'counts to mg/mL') ('cells', '0', 'RNA [mg/mL]')->('cells', '0', 'deterministic translation') ('cells', '0', 'DNA [counts]')->('cells', '0', 'stochastic transcription') ('cells', '0', 'Protein [mg/mL]')->('cells', '0', 'deterministic translation') ('fields',) fields ('fields',)->('diffusion',) ('dimensions',) dimensions ('dimensions',)->('diffusion',)
In [16]:
comp_nested = {
    'cells': {
        '1': comp_div,
        '2': comp_div,
    },
    **env
}
plot_bigraph(comp_nested, **plot_settings3, filename='comp_nested2')
Writing out/comp_nested2
Out[16]:
bigraph ('cells',) cells ('cells', '2') 2 ('cells',)->('cells', '2') ('cells', '1') 1 ('cells',)->('cells', '1') ('multibody',) multibody ('cells',)->('multibody',) ('cells', '2', 'division') division ('cells',)->('cells', '2', 'division') ('cells', '1', 'division') division ('cells',)->('cells', '1', 'division') ('diffusion',) diffusion ('cells',)->('diffusion',) ('cells', '2', 'volume') volume ('cells', '2')->('cells', '2', 'volume') ('cells', '2', 'RNA [counts]') RNA [counts] ('cells', '2')->('cells', '2', 'RNA [counts]') ('cells', '2', 'RNA [mg/mL]') RNA [mg/mL] ('cells', '2')->('cells', '2', 'RNA [mg/mL]') ('cells', '2', 'DNA [counts]') DNA [counts] ('cells', '2')->('cells', '2', 'DNA [counts]') ('cells', '2', 'Protein [mg/mL]') Protein [mg/mL] ('cells', '2')->('cells', '2', 'Protein [mg/mL]') ('cells', '2', 'counts to mg/mL') counts to mg/mL ('cells', '2', 'stochastic transcription') stochastic transcription ('cells', '2', 'deterministic translation') deterministic translation ('cells', '2', 'volume')->('cells', '2', 'counts to mg/mL') ('cells', '2', 'volume')->('cells', '2', 'division') ('cells', '2', 'RNA [counts]')->('cells', '2', 'counts to mg/mL') ('cells', '2', 'RNA [counts]')->('cells', '2', 'stochastic transcription') ('cells', '2', 'RNA [mg/mL]')->('cells', '2', 'counts to mg/mL') ('cells', '2', 'RNA [mg/mL]')->('cells', '2', 'deterministic translation') ('cells', '2', 'DNA [counts]')->('cells', '2', 'stochastic transcription') ('cells', '2', 'Protein [mg/mL]')->('cells', '2', 'deterministic translation') ('cells', '1', 'volume') volume ('cells', '1')->('cells', '1', 'volume') ('cells', '1', 'RNA [counts]') RNA [counts] ('cells', '1')->('cells', '1', 'RNA [counts]') ('cells', '1', 'RNA [mg/mL]') RNA [mg/mL] ('cells', '1')->('cells', '1', 'RNA [mg/mL]') ('cells', '1', 'DNA [counts]') DNA [counts] ('cells', '1')->('cells', '1', 'DNA [counts]') ('cells', '1', 'Protein [mg/mL]') Protein [mg/mL] ('cells', '1')->('cells', '1', 'Protein [mg/mL]') ('cells', '1', 'counts to mg/mL') counts to mg/mL ('cells', '1', 'stochastic transcription') stochastic transcription ('cells', '1', 'deterministic translation') deterministic translation ('cells', '1', 'volume')->('cells', '1', 'counts to mg/mL') ('cells', '1', 'volume')->('cells', '1', 'division') ('cells', '1', 'RNA [counts]')->('cells', '1', 'counts to mg/mL') ('cells', '1', 'RNA [counts]')->('cells', '1', 'stochastic transcription') ('cells', '1', 'RNA [mg/mL]')->('cells', '1', 'counts to mg/mL') ('cells', '1', 'RNA [mg/mL]')->('cells', '1', 'deterministic translation') ('cells', '1', 'DNA [counts]')->('cells', '1', 'stochastic transcription') ('cells', '1', 'Protein [mg/mL]')->('cells', '1', 'deterministic translation') ('fields',) fields ('fields',)->('diffusion',) ('dimensions',) dimensions ('dimensions',)->('diffusion',)
In [17]:
# state
cell_struct_state = {
    'cell composite': {
        'membrane': {
            'lipids': {},
            'mechanistic transmembrane transport': {
                '_type': 'process',
                '_outputs': {
                    'external': 'array'
                },
                'outputs': {
                    'transporters': ['transporters'],
                    'internal': ['..', 'cytoplasm', 'metabolites']
                }
            }
        },
        'cytoplasm': {
            'mechanistic translation': {
                '_type': 'process',
                'outputs': {
                    'p1': ['ribosomal complexes'],
                    'p2': ['transcript regulation complex', 'transcripts']
                }
            }
        },
        'nucleoid': {
            'chromosome': {
                'genes': {}
            },
            'ML-based transcription': {
                '_type': 'process',
                'inputs': {
                    'genes': ['chromosome', 'genes']
                },
                'outputs': {
                    'transcripts': ['..', 'cytoplasm', 'transcript regulation complex', 'transcripts']
                }
            }
        }
    }
}
population = {
    'population': {
        **cell_struct_state,
        'cell2': {},
        'cell3': {},
        'cell4': {},
        '...': {},
    }
}

plot_bigraph(
    population,
    dpi='1000',
    size='5,4',
    aspect_ratio='fill',
    label_margin='0.02',
    node_border_colors={
        ('population', 'cell composite', 'membrane', 'mechanistic transmembrane transport'): 'blue',
        ('population','cell composite', 'cytoplasm', 'mechanistic translation'): 'blue',
        ('population','cell composite', 'nucleoid', 'ML-based transcription'): 'red',
    },
    # schema={'cell composite': 'cell'},
    # core=core,
    port_labels=False,
    remove_process_place_edges=True,
    out_dir='out',
    filename='cell_composite')
Writing out/cell_composite
Out[17]:
bigraph ('population',) population ('population', 'cell composite') cell composite ('population',)->('population', 'cell composite') ('population', 'cell composite', 'membrane') membrane ('population', 'cell composite')->('population', 'cell composite', 'membrane') ('population', 'cell composite', 'nucleoid') nucleoid ('population', 'cell composite')->('population', 'cell composite', 'nucleoid') ('population', 'cell composite', 'cytoplasm') cytoplasm ('population', 'cell composite')->('population', 'cell composite', 'cytoplasm') ('population', 'cell composite', 'membrane', 'transporters') transporters ('population', 'cell composite', 'membrane')->('population', 'cell composite', 'membrane', 'transporters') ('population', 'cell composite', 'membrane', 'mechanistic transmembrane transport') mechanistic transmembrane transport ('population', 'cell composite', 'membrane', 'transporters')->('population', 'cell composite', 'membrane', 'mechanistic transmembrane transport') ('population', 'cell composite', 'cytoplasm', 'metabolites') metabolites ('population', 'cell composite', 'cytoplasm', 'metabolites')->('population', 'cell composite', 'membrane', 'mechanistic transmembrane transport') ('population', 'cell composite', 'nucleoid', 'chromosome') chromosome ('population', 'cell composite', 'nucleoid')->('population', 'cell composite', 'nucleoid', 'chromosome') ('population', 'cell composite', 'nucleoid', 'ML-based transcription') ML-based transcription ('population', 'cell composite', 'nucleoid', 'chromosome', 'genes') genes ('population', 'cell composite', 'nucleoid', 'chromosome', 'genes')->('population', 'cell composite', 'nucleoid', 'ML-based transcription') ('population', 'cell composite', 'cytoplasm', 'transcript regulation complex', 'transcripts') transcripts ('population', 'cell composite', 'cytoplasm', 'transcript regulation complex', 'transcripts')->('population', 'cell composite', 'nucleoid', 'ML-based transcription') ('population', 'cell composite', 'cytoplasm', 'mechanistic translation') mechanistic translation ('population', 'cell composite', 'cytoplasm', 'transcript regulation complex', 'transcripts')->('population', 'cell composite', 'cytoplasm', 'mechanistic translation') ('population', 'cell composite', 'nucleoid', 'chromosome')->('population', 'cell composite', 'nucleoid', 'chromosome', 'genes') ('population', 'cell composite', 'cytoplasm')->('population', 'cell composite', 'cytoplasm', 'metabolites') ('population', 'cell composite', 'cytoplasm', 'ribosomal complexes') ribosomal complexes ('population', 'cell composite', 'cytoplasm')->('population', 'cell composite', 'cytoplasm', 'ribosomal complexes') ('population', 'cell composite', 'cytoplasm', 'transcript regulation complex') transcript regulation complex ('population', 'cell composite', 'cytoplasm')->('population', 'cell composite', 'cytoplasm', 'transcript regulation complex') ('population', 'cell composite', 'cytoplasm', 'ribosomal complexes')->('population', 'cell composite', 'cytoplasm', 'mechanistic translation') ('population', 'cell composite', 'cytoplasm', 'transcript regulation complex')->('population', 'cell composite', 'cytoplasm', 'transcript regulation complex', 'transcripts') ('population', 'cell composite', 'membrane', 'mechanistic transmembrane transport', 'e', 'x', 't', 'e', 'r', 'n', 'a', 'l')_output->('population', 'cell composite', 'membrane', 'mechanistic transmembrane transport')