├── d3flux ├── core │ ├── __init__.py │ ├── display_tools.py │ └── flux_layouts.py ├── templates │ ├── __init__.py │ ├── output_template.html │ └── network_style.css ├── __init__.py ├── test │ ├── create_test_html.py │ ├── test_flux_map.py │ ├── simple_model_no_layout.json │ └── simple_model.json └── examples │ └── asuc │ ├── asuc_v1.json │ └── full-map-render.svg ├── setup.cfg ├── MANIFEST.in ├── requirements.txt ├── .gitignore ├── setup.py ├── README.md ├── .travis.yml └── LICENSE /d3flux/core/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /d3flux/templates/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [metadata] 2 | description-file = README.md 3 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include LICENSE 2 | 3 | recursive-include d3flux/templates * 4 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pandas 2 | cobra>=0.6.0 3 | jinja2 4 | ipython 5 | csscompressor 6 | pytest 7 | -------------------------------------------------------------------------------- /d3flux/__init__.py: -------------------------------------------------------------------------------- 1 | from d3flux.core.flux_layouts import flux_map 2 | from d3flux.core.display_tools import * 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.DS_Store 2 | *.sw[op] 3 | .ipynb_checkpoints 4 | build 5 | 6 | *.py[co] 7 | __pycache__ 8 | ~$* 9 | .cache 10 | 11 | # Setuptools distribution folder. 12 | /dist/ 13 | 14 | # Python egg metadata, regenerated from source files by setuptools. 15 | /*.egg-info 16 | -------------------------------------------------------------------------------- /d3flux/templates/output_template.html: -------------------------------------------------------------------------------- 1 |
2 | {{ background_svg }} 3 |
4 |
5 | 6 | 7 | 8 |
9 | 12 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup, find_packages 2 | 3 | setup(name='d3flux', 4 | version='0.2.7', 5 | description='A d3.js-based metabolic visualization tool for cobrapy', 6 | url='https://github.com/pstjohn/d3flux', 7 | download_url='https://github.com/pstjohn/d3flux', 8 | author='Peter St. John', 9 | author_email='peter.stjohn@nrel.gov', 10 | license='MIT', 11 | packages=find_packages(), 12 | install_requires=['pandas', 'cobra', 'jinja2', 'ipython', 'csscompressor'], 13 | package_data={'d3flux': ['templates/*']}, 14 | ) 15 | -------------------------------------------------------------------------------- /d3flux/templates/network_style.css: -------------------------------------------------------------------------------- 1 | .node.rxn { 2 | fill: #FFA319; 3 | } 4 | 5 | .node.rxn.hidden { 6 | fill: none; 7 | stroke: none; 8 | stroke-width: 0; 9 | } 10 | 11 | .link { 12 | fill: none; 13 | stroke-linecap: round; 14 | } 15 | 16 | text.nodelabel { 17 | font-size: {{ fontsize }}pt; 18 | fill: #555; 19 | font-family: Arial; 20 | } 21 | 22 | text.nodelabel.cofactor { 23 | font-size: {{ cf_fontsize }}pt; 24 | fill: #778899; 25 | } 26 | 27 | text.nodelabel.rxn { 28 | fill: #A9A9A9; 29 | font-size: {{ cf_fontsize }}pt; 30 | font-style: italic; 31 | } 32 | 33 | marker.inactive, .node.inactive, text.inactive { 34 | fill-opacity: {{ inactive_alpha }}; 35 | } 36 | 37 | .link.inactive { 38 | stroke-opacity: {{ inactive_alpha }}; 39 | } 40 | 41 | 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # D3flux 2 | 3 | [![Build Status](https://travis-ci.org/pstjohn/d3flux.svg?branch=master)](https://travis-ci.org/pstjohn/d3flux) 4 | [![PyPI version](https://badge.fury.io/py/d3flux.svg)](https://badge.fury.io/py/d3flux) 5 | 6 | This package implements a d3.js based visualization tool for cobrapy models. 7 | 8 | ![](https://cloud.githubusercontent.com/assets/2576846/23142805/09426396-f77b-11e6-9c63-028a6c16a367.png) 9 | 10 | *Note*: This is still very much alpha software. Many things won't work :) 11 | 12 | 13 | ## Install 14 | Install via pip: 15 | ``` 16 | pip install d3flux 17 | ``` 18 | 19 | Or, setup a development version by cloning the repo 20 | 21 | ``` 22 | git clone git@github.com:pstjohn/d3flux.git 23 | cd d3flux 24 | python setup.py develop 25 | ``` 26 | 27 | ## Documentation 28 | [https://pstjohn.github.io/d3flux/](https://pstjohn.github.io/d3flux/) 29 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | cache: pip 3 | python: 4 | - '2.7' 5 | - '3.6' 6 | install: 7 | - pip install -r requirements.txt 8 | - pip install -e . 9 | script: 10 | - pytest 11 | deploy: 12 | provider: pypi 13 | user: pstjohn 14 | password: 15 | secure: Lh352v9p09v4B2mANvcOnIrjO/lFZby4AleLzo8XTcI/LRX2qkZwAx1qXfYKzrSFWJGw8jJB2wtnWDWZpLKqWN8rCWm/teqCNjFEcFzppbpRKELrYU60GCg+8m9Hibf5CErsID3yFqpgtMGls0c1zK/v7W4p4LetO9ae6zfjE9vcWcO/7ux7TposK/8A9n5vcRhJdiIlQgzrBr9Ll1bQD4ng37LR7MSFzjMdmif0UwpcTt7AEojAY9n+jN9noX24TSsBrR5gcPp2mHXQMZ9flcJu9wFxFOsRRbhag73Fn0Y3RPEGdCBpleZRfeEUP5BkCn9vFjrQ1jjkMg1fxfDPhGabV1/PjKSqdXQ7tbb+km1UeV6DnnL4WgH9h/dY2+31saJsIWUkcrqkVERkP0v4/dC28soBWG0TIIEGahNTpua5gz4F9zlVWXa/gDbo4Wtcv0M8PJmUPkp978tOgMcoIuko65UcL9BKBDSMIuTp9x0/6/O2BRtMg7r6MYwxkdXKwkKot+ISMaC2f6JPwUnamUh4ipCKVuCx94xpoUbxz2x5i3cpBoFapmWkWoA0QYBx1WUHApa3YQkPpfXzWAgZUHzVzw0eE0RxeNJiygLQKeK9rN+hm3pmoCk7eyOeRJOcElcHQfn1w5wxHzgovOftLsijfv1cTO0UEksHFdmJDrY= 16 | on: 17 | tags: true 18 | condition: $TRAVIS_PYTHON_VERSION = 3* 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Peter St. John 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /d3flux/test/create_test_html.py: -------------------------------------------------------------------------------- 1 | from cobra.io import load_json_model 2 | from d3flux import flux_map 3 | 4 | new_model = load_json_model('simple_model_no_layout.json') 5 | 6 | new_model.objective = new_model.reactions.R4 7 | # new_model.reactions.R8.knock_out() 8 | new_model.reactions.R6.knock_out() 9 | new_model.optimize() 10 | 11 | new_model.metabolites.B.notes['map_info']['align'] = 'left' 12 | new_model.metabolites.P.notes['map_info']['align'] = 'lower center' 13 | new_model.metabolites.C.notes['map_info']['align'] = 'upper right' 14 | 15 | new_model.reactions.R5.bounds = (-1000, 1000) 16 | 17 | html = flux_map(new_model, figsize=(900,250), inactive_alpha=0.5) 18 | with open('test.html', 'w') as f: 19 | f.write(' Test d3flux page ') 20 | f.write(html.data) 21 | f.write(' ') 22 | -------------------------------------------------------------------------------- /d3flux/test/test_flux_map.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from cobra.core import Metabolite, Reaction, Model 3 | from d3flux import flux_map 4 | 5 | @pytest.fixture() 6 | def simple_model(): 7 | 8 | model = Model('simple_model') 9 | 10 | A = Metabolite('A') 11 | B = Metabolite('B') 12 | C = Metabolite('C') 13 | D = Metabolite('D') 14 | E = Metabolite('E') 15 | P = Metabolite('P') 16 | 17 | R1 = Reaction('R1') 18 | R2 = Reaction('R2') 19 | R3 = Reaction('R3') 20 | R4 = Reaction('R4') 21 | R5 = Reaction('R5') 22 | R6 = Reaction('R6') 23 | R7 = Reaction('R7') 24 | R8 = Reaction('R8') 25 | R9 = Reaction('R9') 26 | R10 = Reaction('R10') 27 | 28 | model.add_metabolites([A, B, C, D, E, P]) 29 | model.add_reactions([R1, R2, R3, R4, R5, R6, R7, R8, R9, R10]) 30 | 31 | model.reactions.R1.build_reaction_from_string('--> A') 32 | model.reactions.R2.build_reaction_from_string('<--> B') 33 | model.reactions.R3.build_reaction_from_string('P -->') 34 | model.reactions.R4.build_reaction_from_string('E -->') 35 | model.reactions.R5.build_reaction_from_string('A --> B') 36 | model.reactions.R6.build_reaction_from_string('A --> C') 37 | model.reactions.R7.build_reaction_from_string('A --> D') 38 | model.reactions.R8.build_reaction_from_string('B <--> C') 39 | model.reactions.R9.build_reaction_from_string('B --> P') 40 | model.reactions.R10.build_reaction_from_string('C + D --> E + P') 41 | 42 | return model 43 | 44 | 45 | def test_flux_map(simple_model): 46 | svg = flux_map(simple_model, display_name_format=lambda x: str(x.id), 47 | figsize=(300,250), flux_dict={rxn.id: None for rxn in 48 | simple_model.reactions}) 49 | 50 | assert svg is not None 51 | 52 | 53 | def test_flux_map_optimize(simple_model): 54 | simple_model.objective = simple_model.reactions.R4 55 | simple_model.optimize() 56 | svg = flux_map(simple_model, figsize=(300,250)) 57 | 58 | assert svg is not None 59 | 60 | def test_flux_map_knockout(simple_model): 61 | simple_model.objective = simple_model.reactions.R4 62 | simple_model.reactions.R8.knock_out() 63 | simple_model.optimize() 64 | svg = flux_map(simple_model, figsize=(300,250)) 65 | 66 | assert svg is not None 67 | 68 | -------------------------------------------------------------------------------- /d3flux/core/display_tools.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | from functools import reduce 3 | # TODO: write docstrings 4 | 5 | def metabolite_summary(met): 6 | return pd.Series({r.id : (r.x * r.metabolites[met]) 7 | for r in met.reactions}, name='flux') 8 | 9 | common_ox_cofactors = ['nad_c', 'nadp_c', 'q8_c'] 10 | 11 | def redox_summary(cobra_model, tol=1E-8, ox_cofactors=None): 12 | 13 | if ox_cofactors == None: ox_cofactors = common_ox_cofactors 14 | elif not ox_cofactors: return pd.Series(), pd.Series() 15 | 16 | redox_series = reduce(lambda x, y: x.add(y, fill_value=0), ( 17 | metabolite_summary(cobra_model.metabolites.get_by_id(cofactor)) 18 | for cofactor in ox_cofactors)) 19 | oxidizing = redox_series[redox_series > tol] 20 | reducing = redox_series[redox_series < -tol] 21 | return oxidizing, reducing 22 | 23 | def color_redox_rxns(cobra_model, reset_groups=True, color_knockouts=True, 24 | starting_group=1, **kwargs): 25 | """Add group info to the cobra_model according to the results of 26 | `redox_summary`. 27 | 28 | cobra_model: a cobra.Model object 29 | 30 | reset_groups: bool 31 | whether or not to delete group info from model reactions prior to 32 | assigning new groups. 33 | 34 | color_knockouts: bool 35 | whether or not to conditionally format reactions which are currently 36 | knocked out. (i.e., rxn.bounds = (0,0)) 37 | 38 | starting_group: int 39 | To use different colors, start from a group other than 1. (Highest 40 | color is 8) 41 | 42 | Additional kwargs are passed directly to the `redox_summary` function call: 43 | 44 | tol: int, default 1E-8 45 | flux tolerance above which to include the reaction 46 | 47 | ox_cofactors: list, default is common_ox_cofactors 48 | Cofactors which are produced or consumed in several reactions to use as 49 | the basis for coloring the flux model. 50 | 51 | """ 52 | # Pop existing group info 53 | if reset_groups: 54 | for rxn in cobra_model.reactions: 55 | try: del rxn.notes['map_info']['group'] 56 | except KeyError: pass 57 | 58 | # Assign group for knocked out reactions 59 | if color_knockouts: 60 | for rxn in cobra_model.reactions.query( 61 | lambda r: r.bounds == (0, 0), None): 62 | rxn.notes['map_info']['group'] = 'ko' 63 | 64 | # Assign new group info based on redox balance 65 | oxidizing, reducing = redox_summary(cobra_model, **kwargs) 66 | for rxn, flux in oxidizing.items(): 67 | cobra_model.reactions.get_by_id( 68 | rxn).notes['map_info']['group'] = starting_group 69 | for rxn, flux in reducing.items(): 70 | cobra_model.reactions.get_by_id( 71 | rxn).notes['map_info']['group'] = starting_group + 1 72 | 73 | return cobra_model 74 | 75 | 76 | def update_cofactors(cobra_model, cofactor_list): 77 | """ Given a model and list of cofactors to display, update the map_info 78 | field of each reaction containing the given cofactors. Updates the model 79 | inplace. 80 | 81 | cobra_model : a cobra.Model object 82 | cofactor_list : a list of strings indicating the desired cofactor IDs to show. 83 | 84 | """ 85 | 86 | def rxn_cofactor_update(rxn, cofactor): 87 | 88 | if 'map_info' not in rxn.notes: 89 | rxn.notes['map_info'] = {} 90 | 91 | try: 92 | if cofactor in rxn.notes['map_info']['cofactors']: return 93 | rxn.notes['map_info']['cofactors'].update({cofactor: {}}) 94 | except KeyError: 95 | rxn.notes['map_info']['cofactors'] = {cofactor: {}} 96 | 97 | for met_id in cofactor_list: 98 | this_met = cobra_model.metabolites.get_by_id(met_id) 99 | for rxn in this_met.reactions: rxn_cofactor_update(rxn, met_id) 100 | 101 | common_cofactors = ['coa', 'nadh', 'nad', 'nadph', 'nadp', 'atp', 'adp', 'amp', 102 | 'q8', 'q8h2', 'pi', 'co2', 'h2o', 'h', 'o2', 'h2', 'nh4'] 103 | 104 | -------------------------------------------------------------------------------- /d3flux/test/simple_model_no_layout.json: -------------------------------------------------------------------------------- 1 | { 2 | "genes": [], 3 | "id": "simple_model", 4 | "metabolites": [ 5 | { 6 | "compartment": "", 7 | "formula": "", 8 | "id": "A", 9 | "name": "", 10 | "notes": { 11 | "map_info": { 12 | "display_name": "A" 13 | } 14 | } 15 | }, 16 | { 17 | "compartment": "", 18 | "formula": "", 19 | "id": "B", 20 | "name": "", 21 | "notes": { 22 | "map_info": { 23 | "display_name": "B" 24 | } 25 | } 26 | }, 27 | { 28 | "compartment": "", 29 | "formula": "", 30 | "id": "C", 31 | "name": "", 32 | "notes": { 33 | "map_info": { 34 | "display_name": "C" 35 | } 36 | } 37 | }, 38 | { 39 | "compartment": "", 40 | "formula": "", 41 | "id": "D", 42 | "name": "", 43 | "notes": { 44 | "map_info": { 45 | "display_name": "D" 46 | } 47 | } 48 | }, 49 | { 50 | "compartment": "", 51 | "formula": "", 52 | "id": "E", 53 | "name": "", 54 | "notes": { 55 | "map_info": { 56 | "display_name": "E" 57 | } 58 | } 59 | }, 60 | { 61 | "compartment": "", 62 | "formula": "", 63 | "id": "P", 64 | "name": "", 65 | "notes": { 66 | "map_info": { 67 | "display_name": "P" 68 | } 69 | } 70 | } 71 | ], 72 | "notes": { 73 | "map_info": {} 74 | }, 75 | "pathways": [], 76 | "reactions": [ 77 | { 78 | "gene_reaction_rule": "", 79 | "id": "R1", 80 | "lower_bound": 0, 81 | "metabolites": { 82 | "A": 1 83 | }, 84 | "name": "", 85 | "notes": { 86 | "map_info": { 87 | "hidden": true, 88 | "reversibility": false 89 | } 90 | }, 91 | "upper_bound": 1000 92 | }, 93 | { 94 | "gene_reaction_rule": "", 95 | "id": "R2", 96 | "lower_bound": -1000, 97 | "metabolites": { 98 | "B": 1 99 | }, 100 | "name": "", 101 | "notes": { 102 | "map_info": { 103 | "hidden": true, 104 | "reversibility": true 105 | } 106 | }, 107 | "upper_bound": 1000 108 | }, 109 | { 110 | "gene_reaction_rule": "", 111 | "id": "R3", 112 | "lower_bound": 0, 113 | "metabolites": { 114 | "P": -1 115 | }, 116 | "name": "", 117 | "notes": { 118 | "map_info": { 119 | "hidden": true, 120 | "reversibility": false 121 | } 122 | }, 123 | "upper_bound": 1000 124 | }, 125 | { 126 | "gene_reaction_rule": "", 127 | "id": "R4", 128 | "lower_bound": 0, 129 | "metabolites": { 130 | "E": -1 131 | }, 132 | "name": "", 133 | "notes": { 134 | "map_info": { 135 | "hidden": true, 136 | "reversibility": false 137 | } 138 | }, 139 | "upper_bound": 1000 140 | }, 141 | { 142 | "gene_reaction_rule": "", 143 | "id": "R5", 144 | "lower_bound": 0, 145 | "metabolites": { 146 | "A": -1, 147 | "B": 1 148 | }, 149 | "name": "", 150 | "notes": { 151 | "map_info": { 152 | "reversibility": false, 153 | "display_name": "R5\ntest" 154 | } 155 | }, 156 | "upper_bound": 1000 157 | }, 158 | { 159 | "gene_reaction_rule": "", 160 | "id": "R6", 161 | "lower_bound": 0, 162 | "metabolites": { 163 | "A": -1, 164 | "C": 1 165 | }, 166 | "name": "", 167 | "notes": { 168 | "map_info": { 169 | "reversibility": false 170 | } 171 | }, 172 | "upper_bound": 1000 173 | }, 174 | { 175 | "gene_reaction_rule": "", 176 | "id": "R7", 177 | "lower_bound": 0, 178 | "metabolites": { 179 | "A": -1, 180 | "D": 1 181 | }, 182 | "name": "", 183 | "notes": { 184 | "map_info": { 185 | "reversibility": false 186 | } 187 | }, 188 | "upper_bound": 1000 189 | }, 190 | { 191 | "gene_reaction_rule": "", 192 | "id": "R8", 193 | "lower_bound": -1000, 194 | "metabolites": { 195 | "B": -1, 196 | "C": 1 197 | }, 198 | "name": "", 199 | "notes": { 200 | "map_info": { 201 | "reversibility": true 202 | } 203 | }, 204 | "upper_bound": 1000 205 | }, 206 | { 207 | "gene_reaction_rule": "", 208 | "id": "R9", 209 | "lower_bound": 0, 210 | "metabolites": { 211 | "B": -1, 212 | "P": 1 213 | }, 214 | "name": "", 215 | "notes": { 216 | "map_info": { 217 | "reversibility": false 218 | } 219 | }, 220 | "upper_bound": 1000 221 | }, 222 | { 223 | "gene_reaction_rule": "", 224 | "id": "R10", 225 | "lower_bound": 0, 226 | "metabolites": { 227 | "C": -1, 228 | "D": -1, 229 | "E": 1, 230 | "P": 1 231 | }, 232 | "name": "", 233 | "notes": { 234 | "map_info": { 235 | "reversibility": false 236 | } 237 | }, 238 | "upper_bound": 1000 239 | } 240 | ], 241 | "version": 1 242 | } 243 | -------------------------------------------------------------------------------- /d3flux/test/simple_model.json: -------------------------------------------------------------------------------- 1 | { 2 | "genes": [], 3 | "id": "simple_model", 4 | "metabolites": [ 5 | { 6 | "compartment": "", 7 | "formula": "", 8 | "id": "A", 9 | "name": "", 10 | "notes": { 11 | "map_info": { 12 | "display_name": "A", 13 | "x": 150, 14 | "y": 50 15 | } 16 | } 17 | }, 18 | { 19 | "compartment": "", 20 | "formula": "", 21 | "id": "B", 22 | "name": "", 23 | "notes": { 24 | "map_info": { 25 | "display_name": "B", 26 | "x": 80, 27 | "y": 130 28 | } 29 | } 30 | }, 31 | { 32 | "compartment": "", 33 | "formula": "", 34 | "id": "C", 35 | "name": "", 36 | "notes": { 37 | "map_info": { 38 | "display_name": "C", 39 | "x": 150, 40 | "y": 130 41 | } 42 | } 43 | }, 44 | { 45 | "compartment": "", 46 | "formula": "", 47 | "id": "D", 48 | "name": "", 49 | "notes": { 50 | "map_info": { 51 | "display_name": "D", 52 | "x": 220, 53 | "y": 130 54 | } 55 | } 56 | }, 57 | { 58 | "compartment": "", 59 | "formula": "", 60 | "id": "E", 61 | "name": "", 62 | "notes": { 63 | "map_info": { 64 | "display_name": "E", 65 | "x": 220, 66 | "y": 200 67 | } 68 | } 69 | }, 70 | { 71 | "compartment": "", 72 | "formula": "", 73 | "id": "P", 74 | "name": "", 75 | "notes": { 76 | "map_info": { 77 | "display_name": "P", 78 | "x": 150, 79 | "y": 200 80 | } 81 | } 82 | } 83 | ], 84 | "notes": { 85 | "map_info": {} 86 | }, 87 | "pathways": [], 88 | "reactions": [ 89 | { 90 | "gene_reaction_rule": "", 91 | "id": "R1", 92 | "lower_bound": 0, 93 | "metabolites": { 94 | "A": 1 95 | }, 96 | "name": "", 97 | "notes": { 98 | "map_info": { 99 | "hidden": true, 100 | "reversibility": false 101 | } 102 | }, 103 | "upper_bound": 1000 104 | }, 105 | { 106 | "gene_reaction_rule": "", 107 | "id": "R2", 108 | "lower_bound": -1000, 109 | "metabolites": { 110 | "B": 1 111 | }, 112 | "name": "", 113 | "notes": { 114 | "map_info": { 115 | "hidden": true, 116 | "reversibility": true 117 | } 118 | }, 119 | "upper_bound": 1000 120 | }, 121 | { 122 | "gene_reaction_rule": "", 123 | "id": "R3", 124 | "lower_bound": 0, 125 | "metabolites": { 126 | "P": -1 127 | }, 128 | "name": "", 129 | "notes": { 130 | "map_info": { 131 | "hidden": true, 132 | "reversibility": false 133 | } 134 | }, 135 | "upper_bound": 1000 136 | }, 137 | { 138 | "gene_reaction_rule": "", 139 | "id": "R4", 140 | "lower_bound": 0, 141 | "metabolites": { 142 | "E": -1 143 | }, 144 | "name": "", 145 | "notes": { 146 | "map_info": { 147 | "hidden": true, 148 | "reversibility": false 149 | } 150 | }, 151 | "upper_bound": 1000 152 | }, 153 | { 154 | "gene_reaction_rule": "", 155 | "id": "R5", 156 | "lower_bound": 0, 157 | "metabolites": { 158 | "A": -1, 159 | "B": 1 160 | }, 161 | "name": "", 162 | "notes": { 163 | "map_info": { 164 | "reversibility": false 165 | } 166 | }, 167 | "upper_bound": 1000 168 | }, 169 | { 170 | "gene_reaction_rule": "", 171 | "id": "R6", 172 | "lower_bound": 0, 173 | "metabolites": { 174 | "A": -1, 175 | "C": 1 176 | }, 177 | "name": "", 178 | "notes": { 179 | "map_info": { 180 | "reversibility": false 181 | } 182 | }, 183 | "upper_bound": 1000 184 | }, 185 | { 186 | "gene_reaction_rule": "", 187 | "id": "R7", 188 | "lower_bound": 0, 189 | "metabolites": { 190 | "A": -1, 191 | "D": 1 192 | }, 193 | "name": "", 194 | "notes": { 195 | "map_info": { 196 | "reversibility": false 197 | } 198 | }, 199 | "upper_bound": 1000 200 | }, 201 | { 202 | "gene_reaction_rule": "", 203 | "id": "R8", 204 | "lower_bound": -1000, 205 | "metabolites": { 206 | "B": -1, 207 | "C": 1 208 | }, 209 | "name": "", 210 | "notes": { 211 | "map_info": { 212 | "reversibility": true 213 | } 214 | }, 215 | "upper_bound": 1000 216 | }, 217 | { 218 | "gene_reaction_rule": "", 219 | "id": "R9", 220 | "lower_bound": 0, 221 | "metabolites": { 222 | "B": -1, 223 | "P": 1 224 | }, 225 | "name": "", 226 | "notes": { 227 | "map_info": { 228 | "reversibility": false 229 | } 230 | }, 231 | "upper_bound": 1000 232 | }, 233 | { 234 | "gene_reaction_rule": "", 235 | "id": "R10", 236 | "lower_bound": 0, 237 | "metabolites": { 238 | "C": -1, 239 | "D": -1, 240 | "E": 1, 241 | "P": 1 242 | }, 243 | "name": "", 244 | "notes": { 245 | "map_info": { 246 | "reversibility": false 247 | } 248 | }, 249 | "upper_bound": 1000 250 | } 251 | ], 252 | "version": 1 253 | } 254 | -------------------------------------------------------------------------------- /d3flux/core/flux_layouts.py: -------------------------------------------------------------------------------- 1 | """ 2 | A D3-based network layout engine for plotting model solutions in the jupyter 3 | window 4 | """ 5 | 6 | import os 7 | import json 8 | import itertools 9 | import re 10 | 11 | from jinja2 import Environment, FileSystemLoader 12 | from IPython.display import HTML 13 | from csscompressor import compress 14 | 15 | from cobra.io.json import model_to_dict 16 | from cobra.exceptions import OptimizationError 17 | 18 | import d3flux 19 | 20 | def flux_map(cobra_model, 21 | excluded_metabolites=None, excluded_reactions=None, 22 | excluded_compartments=None, display_name_format=True, 23 | overwrite_reversibility=True, **kwargs): 24 | """Create a flux map representation of the cobra.Model, including or 25 | excluding the given metabolites, reactions, and/or compartments. 26 | 27 | excluded_metabolites: 28 | A list of metabolites to not include. Probably better to simply set 29 | met.notes['map_info']['hidden'] = True 30 | 31 | excluded_reactions: 32 | A list of reactions not to display. 33 | 34 | excluded_compartment: 35 | Hide metabolites not in a compartment 36 | 37 | diplay_name_format: Bool or function 38 | How to format the metabolite names in map.display_name. 39 | 40 | Additional kwargs are passed directly to `render_model`: 41 | 42 | background_template: 43 | filename for an SVG to render behind the flux figure. Useful for 44 | compartments or layout guides. 45 | 46 | custom_css: 47 | Additional CSS to embed in the figure. Use HTML inspector to show 48 | labels and classes applied to reactions and metabolites. 49 | 50 | figure_id: 51 | Each figure in the page requires a unique ID, which can be passed or 52 | generated automatically. 53 | 54 | hide_unused: 55 | whether or not to show metabolites and reactions with zero flux. 56 | 57 | hide_unused_cofactors: 58 | similar to hide_unused, but only hide cofactor nodes for reactions with 59 | 0 flux. 60 | 61 | overwrite_reversibility: 62 | whether or not to overwrite the `reversibility` attribute in map_info. 63 | Useful in ensuring reversible, knocked-out reactions are rendered 64 | appropriately. Defaults to True. 65 | 66 | figsize: 67 | size, in pixels, of the generated SVG window. Defaults to 1024x768. 68 | 69 | fontsize: 70 | text size, in pt. Defaults to 12 71 | 72 | default_flux_width: 73 | If reaction fluxes are missing, the default thickness to use for 74 | connecting arrows. 75 | 76 | flux_dict: 77 | A dictionary-like object containing the desired fluxes for each 78 | reaction in the model 79 | 80 | metabolite_dict: 81 | A dictionary-like object containing the desired carried fluxes for each 82 | metabolite in the model 83 | 84 | flowLayout: 85 | whether or not to use the webcola's flow layout to force a heirarchical 86 | diagram 87 | 88 | """ 89 | 90 | # Initialize empty map_info field in object notes 91 | for obj in itertools.chain([cobra_model], cobra_model.metabolites, 92 | cobra_model.reactions): 93 | if 'map_info' not in obj.notes: 94 | obj.notes['map_info'] = {} 95 | 96 | # build cofactor metabolites from strings 97 | cobra_metabolites = [] 98 | if excluded_metabolites: 99 | compartments = set((m.compartment for m in cobra_model.metabolites)) 100 | metabolite_list = [ 101 | cf + '_' + co for cf, co in itertools.product( 102 | excluded_metabolites, compartments)] + excluded_metabolites 103 | for cofactor in metabolite_list: 104 | try: 105 | cobra_metabolites += [ 106 | cobra_model.metabolites.get_by_id(cofactor)] 107 | except KeyError: 108 | pass 109 | # what if its already a cobra metabolite? 110 | 111 | cobra_rxns = [] 112 | if excluded_reactions: 113 | for rxnid in excluded_reactions: 114 | try: 115 | cobra_rxns += [ 116 | cobra_model.reactions.get_by_id(rxnid)] 117 | except KeyError: 118 | pass 119 | 120 | # Exclude metabolites and reactions in the given comparment 121 | excluded_metabolites = set(cobra_metabolites) 122 | excluded_reactions = set(cobra_rxns) 123 | 124 | if excluded_compartments: 125 | met_compartments = set((m for m in cobra_model.metabolites.query( 126 | lambda x: set(x.compartment).intersection( 127 | set(excluded_compartments)), None))) 128 | excluded_metabolites |= met_compartments 129 | 130 | # Do I want to redo this not to include excluded metabolites? 131 | # rxn_compartments = set((r for r in cobra_model.reactions.query( 132 | # lambda x: set(x.compartments).intersection( 133 | # set(excluded_compartments)), None))) 134 | # excluded_reactions |= rxn_compartments 135 | 136 | # for reaction in excluded_reactions: 137 | # reaction.notes['map_info'] = {'hidden': True} 138 | 139 | for metabolite in excluded_metabolites: 140 | metabolite.notes['map_info'] = {'hidden': True} 141 | 142 | def is_hidden(obj): 143 | try: 144 | return bool(obj.notes['map_info']['hidden']) 145 | except KeyError: 146 | return False 147 | 148 | for reaction in cobra_model.reactions: 149 | 150 | if overwrite_reversibility: 151 | reaction.notes['map_info']['reversibility'] = \ 152 | bool(reaction.reversibility) 153 | 154 | # Unless 'hidden' specifically set to False, hide the reaction if all 155 | # the reactants or products are hidden (excluding cofactors) 156 | if ('hidden' not in reaction.notes['map_info']) & ~is_hidden(reaction): 157 | 158 | # Hide reactions if all of their products or reactants are hidden. 159 | # Don't include cofactor metabolites in this calculation. 160 | if 'cofactors' in reaction.notes['map_info']: 161 | cofactors = reaction.notes['map_info']['cofactors'].keys() 162 | else: 163 | cofactors = {} 164 | 165 | if (all([is_hidden(met) for met in reaction.reactants 166 | if met.id not in cofactors]) or 167 | all([is_hidden(met) for met in reaction.products 168 | if met.id not in cofactors])): 169 | 170 | reaction.notes['map_info']['hidden'] = True 171 | 172 | # Add diplay names to the cobra metabolites accoring to the 173 | # display_name_format function 174 | if display_name_format: 175 | 176 | # Handle the case for a default display name formatter. This is 177 | # optimized for models using the typical bigg_id naming convention, 178 | # ending with 'ID_c' compartment identifier. 179 | if display_name_format is True: 180 | display_name_format = ( 181 | lambda met: re.sub('__[D,L]', '', met.id[:-2].upper())) 182 | 183 | for met in cobra_model.metabolites: 184 | 185 | # Don't overwrite existing display names 186 | if 'display_name' not in met.notes['map_info']: 187 | met.notes['map_info']['display_name'] = ( 188 | display_name_format(met)) 189 | 190 | # Append model's map_info kwargs 191 | render_kwargs = dict(cobra_model.notes['map_info']) 192 | render_kwargs.update(kwargs) 193 | 194 | return render_model(cobra_model, **render_kwargs) 195 | 196 | 197 | def create_model_json(cobra_model, flux_dict=None, metabolite_dict=None): 198 | """ Convert a cobra.Model object to a json string for d3. Adds flux 199 | information if the model has been solved 200 | 201 | flux_dict: dict-like 202 | Contains an external setting of the flux solution that should be 203 | plotted. 204 | 205 | metabolite_dict: 206 | A dictionary-like object containing the desired carried fluxes for each 207 | metabolite in the model 208 | 209 | """ 210 | def get_flux(reaction): 211 | if flux_dict is not None: 212 | return flux_dict[reaction.id] 213 | else: 214 | 215 | try: 216 | return reaction.flux 217 | 218 | except OptimizationError: 219 | # The model hasn't been solved, so we just throw in a None 220 | return None 221 | 222 | 223 | # Add flux info 224 | for reaction in cobra_model.reactions: 225 | 226 | # If I'm styling reaction knockouts, don't set the flux for a 227 | # knocked out reaction 228 | if reaction.lower_bound == reaction.upper_bound == 0: 229 | reaction.notes['map_info']['group'] = 'ko' 230 | 231 | # Delete the flux key, if it exists 232 | try: 233 | del reaction.notes['map_info']['flux'] 234 | except KeyError: 235 | pass 236 | 237 | else: 238 | try: 239 | if abs(get_flux(reaction)) < 1E-8: 240 | reaction.notes['map_info']['flux'] = 0. 241 | else: 242 | reaction.notes['map_info']['flux'] = get_flux(reaction) 243 | except (KeyError, TypeError): 244 | if 'flux' in reaction.notes['map_info']: 245 | del reaction.notes['map_info']['flux'] 246 | 247 | # cobrapy doesn't track contexted changes to the notes field. So if 248 | # a reaction is set to the 'ko' group, reset it if it doens't match 249 | # the bounds requirements 250 | if 'group' in reaction.notes['map_info']: 251 | if reaction.notes['map_info']['group'] == 'ko': 252 | del reaction.notes['map_info']['group'] 253 | 254 | def get_met_flux(metabolite): 255 | if metabolite_dict is not None: 256 | return metabolite_dict[metabolite.id] 257 | else: 258 | return sum([abs(get_flux(r) * r.metabolites[metabolite]) for r in 259 | metabolite.reactions]) / 2 260 | 261 | for metabolite in cobra_model.metabolites: 262 | 263 | try: 264 | del metabolite.notes['map_info']['flux'] 265 | 266 | except KeyError: 267 | pass 268 | 269 | try: 270 | carried_flux = get_met_flux(metabolite) 271 | if carried_flux > 1E-8: 272 | metabolite.notes['map_info']['flux'] = carried_flux 273 | else: 274 | metabolite.notes['map_info']['flux'] = 0. 275 | 276 | except Exception: 277 | pass 278 | 279 | return json.dumps(model_to_dict(cobra_model), allow_nan=False) 280 | 281 | 282 | def render_model(cobra_model, background_template=None, custom_css=None, 283 | figure_id=None, hide_unused=None, hide_unused_cofactors=None, 284 | inactive_alpha=1., figsize=None, label=None, fontsize=None, 285 | default_flux_width=2.5, flux_dict=None, metabolite_dict=None, 286 | svg_scale=100, flowLayout=False): 287 | """ Render a cobra.Model object in the current window 288 | 289 | Parameters: 290 | 291 | background_template: 292 | filename for an SVG to render behind the flux figure. Useful for 293 | compartments or layout guides. 294 | 295 | custom_css: 296 | Additional CSS to embed in the figure. Use HTML inspector to show 297 | labels and classes applied to reactions and metabolites. 298 | 299 | figure_id: 300 | Each figure in the page requires a unique ID, which can be passed or 301 | generated automatically. 302 | 303 | hide_unused: 304 | whether or not to show metabolites and reactions with zero flux. 305 | 306 | hide_unused_cofactors: 307 | similar to hide_unused, but only hide cofactor nodes for reactions with 308 | 0 flux. 309 | 310 | inactive_alpha: 311 | Alpha value with which to color reactions and nodes without any carried 312 | flux. Defaults to 1. 313 | 314 | figsize: 315 | size, in pixels, of the generated SVG window. Defaults to 1024x768. 316 | 317 | fontsize: 318 | text size, in pt. Defaults to 12 319 | 320 | default_flux_width: 321 | If reaction fluxes are missing, the default thickness to use for 322 | connecting arrows. 323 | 324 | flux_dict: 325 | A dictionary-like object containing the desired fluxes for each 326 | reaction in the model 327 | 328 | metabolite_dict: 329 | A dictionary-like object containing the desired carried fluxes for each 330 | metabolite in the model 331 | 332 | """ 333 | 334 | # Increment figure counter 335 | 336 | # Get figure name and JSON string for the cobra model 337 | if not figure_id: 338 | render_model._fignum += 1 339 | figure_id = 'd3flux{:0>3d}'.format(render_model._fignum) 340 | 341 | if not figsize: 342 | figsize = (1028, 768) 343 | 344 | modeljson = create_model_json(cobra_model, flux_dict, metabolite_dict) 345 | 346 | if not hide_unused: 347 | hide_unused = "false" 348 | else: 349 | hide_unused = "true" 350 | 351 | if not hide_unused_cofactors: 352 | hide_unused_cofactors = "false" 353 | else: 354 | hide_unused_cofactors = "true" 355 | 356 | # Handle custom CSS 357 | if not custom_css: 358 | custom_css = '' 359 | 360 | if not fontsize: 361 | fontsize = 12 362 | 363 | # Handle background template 364 | if not background_template: 365 | background_svg = '' 366 | no_background = "true" 367 | else: 368 | from IPython.display import SVG 369 | background_svg = SVG(background_template).data 370 | no_background = "false" 371 | 372 | # Initialize the jinja templates 373 | env = Environment(loader=FileSystemLoader( 374 | os.path.join(os.path.dirname(d3flux.__file__), 'templates'))) 375 | 376 | template_css = env.get_template('network_style.css') 377 | template_html = env.get_template('output_template.html') 378 | template_js = env.get_template('d3flux.js') 379 | 380 | # Render the jinja templates with the given variables 381 | css = template_css.render(inactive_alpha=inactive_alpha, 382 | fontsize=fontsize, cf_fontsize=0.8 * fontsize) 383 | 384 | js = template_js.render(figure_id=figure_id, modeljson=modeljson, 385 | no_background=no_background, 386 | hide_unused=hide_unused, 387 | hide_unused_cofactors=hide_unused_cofactors, 388 | figwidth=figsize[0], figheight=figsize[1], 389 | css=compress(css + custom_css), 390 | default_flux_width=default_flux_width, 391 | svg_scale=svg_scale, flowLayout=flowLayout) 392 | 393 | html = template_html.render(figure_id=figure_id, 394 | background_svg=background_svg, 395 | javascript_source=js) 396 | 397 | # compile and return HTML 398 | return HTML(html) 399 | 400 | 401 | # Initialize figure counter 402 | render_model._fignum = 0 403 | -------------------------------------------------------------------------------- /d3flux/examples/asuc/asuc_v1.json: -------------------------------------------------------------------------------- 1 | {"reactions":[{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0591","name":"acetaldehyde dehydrogenase (acetylating)","id":"ACALD","upper_bound":1000,"notes":{"MetaCyc":"ACETALD-DEHYDROG-RXN","Enzymes":["1.2.1.10"],"original_bigg_id":"ACALD","map_info":{"x":382.64525895293133,"reversibility":true,"y":560.8483113179269,"cofactors":{"nadh_c":{"x":393.63231629605326,"y":535.5403540860555}}},"KEGG":"R00228"},"metabolites":{"acald_c":-1,"h_c":1,"nad_c":-1,"nadh_c":1,"accoa_c":1,"coa_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"R_acetaldehyde_reversible_transport","id":"ACALDt","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"ACALDt"},"metabolites":{"acald_c":1,"acald_e":-1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_1661","name":"acetate kinase","id":"ACKr","upper_bound":1000,"notes":{"MetaCyc":"ACETATEKIN-RXN","Enzymes":["2.7.2.1","2.7.2.15"],"original_bigg_id":"ACKr","map_info":{"x":303.0931379450599,"reversibility":true,"y":610.9159748329513,"cofactors":{"atp_c":{"x":266.7300153137178,"y":610.8281666525227}},"group":"ko"},"KEGG":"R00315"},"metabolites":{"ac_c":-1,"atp_c":-1,"actp_c":1,"adp_c":1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"R_acetate_reversible_transport_via_proton_symport","id":"ACt2r","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"ACt2r"},"metabolites":{"ac_e":-1,"ac_c":1,"h_c":1,"h_e":-1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0403","name":"alcohol dehydrogenase (ethanol)","id":"ALCD2x","upper_bound":1000,"notes":{"MetaCyc":"ALCOHOL-DEHYDROG-RXN","Enzymes":["1.1.1.1","1.1.1.71"],"original_bigg_id":"ALCD2x","map_info":{"x":419.00015582585576,"reversibility":true,"y":624.4703227914397,"cofactors":{"nadh_c":{"x":433.1132679242588,"y":602.7038041865424}}},"KEGG":"R00754"},"metabolites":{"acald_c":1,"etoh_c":-1,"nadh_c":1,"h_c":1,"nad_c":-1}},{"lower_bound":4.701484070350633,"gene_reaction_rule":"","name":"ATP maintenance requirement","id":"ATPM","upper_bound":1000,"notes":{"Enzymes":["3.6.1.3","3.6.1.15","3.6.4.6"],"original_bigg_id":"ATPM","map_info":{"hidden":true,"reversibility":false,"cofactors":{"atp_c":{}}}},"metabolites":{"atpm":1,"atp_c":-1,"h_c":1,"pi_c":1,"h2o_c":-1,"adp_c":1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0326 or Asuc_0328","name":"ATP synthase (four protons for one ATP)","id":"ATPS4r","upper_bound":1000,"notes":{"Enzymes":["3.6.3.14"],"original_bigg_id":"ATPS4r","map_info":{"hidden":true,"reversibility":true,"cofactors":{"atp_c":{}}}},"metabolites":{"atp_c":1,"h_e":-4,"h_c":3,"pi_c":-1,"h2o_c":1,"adp_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"R_CO2_transporter_via_diffusion","id":"CO2t","upper_bound":1000,"notes":{"map_info":{"hidden":true,"reversibility":true,"cofactors":{"co2_c":{}}},"original_bigg_id":"CO2t"},"metabolites":{"co2_c":1,"co2_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"cytochrome oxidase bd (ubiquinol-8: 2 protons)","id":"CYTBD","upper_bound":1000,"notes":{"map_info":{"hidden":true,"reversibility":false,"cofactors":{"q8_c":{},"q8h2_c":{}}},"original_bigg_id":"CYTBD"},"metabolites":{"h2o_c":1,"h_e":2,"h_c":-2,"q8_c":1,"o2_c":-0.5,"q8h2_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_2051","name":"enolase","id":"ENO","upper_bound":1000,"notes":{"MetaCyc":"2PGADEHYDRAT-RXN","Enzymes":["4.2.1.11"],"original_bigg_id":"ENO","map_info":{"x":291.7908162239458,"reversibility":true,"y":359.025665205511},"KEGG":"R00658"},"metabolites":{"h2o_c":1,"pep_c":1,"2pg_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"ETOHt2r","id":"ETOHt2r","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"ETOHt2r"},"metabolites":{"etoh_c":1,"etoh_e":-1,"h_e":-1,"h_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"Acetate exchange","id":"EX_ac_e","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"EX_ac_e"},"metabolites":{"ac_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"Acetaldehyde exchange","id":"EX_acald_e","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"EX_acald_e"},"metabolites":{"acald_e":-1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"CO2 exchange","id":"EX_co2_e","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"EX_co2_e"},"metabolites":{"co2_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"Ethanol exchange","id":"EX_etoh_e","upper_bound":0,"notes":{"map_info":{"group":"ko","reversibility":false,"hidden":true},"original_bigg_id":"EX_etoh_e"},"metabolites":{"etoh_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"Formate exchange","id":"EX_for_e","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"EX_for_e"},"metabolites":{"for_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"D-Fructose exchange","id":"EX_fru_e","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"EX_fru_e"},"metabolites":{"fru_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"Fumarate exchange","id":"EX_fum_e","upper_bound":0,"notes":{"map_info":{"group":"ko","reversibility":false,"hidden":true},"original_bigg_id":"EX_fum_e"},"metabolites":{"fum_e":-1}},{"lower_bound":-1,"gene_reaction_rule":"","name":"D-Glucose exchange","id":"EX_glc_e","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"EX_glc_e"},"metabolites":{"glc__D_e":-1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"H+ exchange","id":"EX_h_e","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"EX_h_e"},"metabolites":{"h_e":-1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"H2O exchange","id":"EX_h2o_e","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"EX_h2o_e"},"metabolites":{"h2o_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"L-Malate exchange","id":"EX_mal__L_e","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"EX_mal_L_e"},"metabolites":{"mal__L_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"O2 exchange","id":"EX_o2_e","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"EX_o2_e"},"metabolites":{"o2_e":-1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"Phosphate exchange","id":"EX_pi_e","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"EX_pi_e"},"metabolites":{"pi_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"Pyruvate exchange","id":"EX_pyr_e","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"EX_pyr_e"},"metabolites":{"pyr_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"Succinate exchange","id":"EX_succ_e","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"EX_succ_e"},"metabolites":{"succ_e":-1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0536","name":"fructose-bisphosphate aldolase","id":"FBA","upper_bound":1000,"notes":{"MetaCyc":"F16ALDOLASE-RXN","Enzymes":["4.1.2.13"],"original_bigg_id":"FBA","map_info":{"x":224.1583165935302,"reversibility":true,"y":244.87862920130573},"KEGG":"R01068"},"metabolites":{"dhap_c":1,"fdp_c":-1,"g3p_c":1}},{"lower_bound":0,"gene_reaction_rule":"Asuc_0394 or Asuc_1073","name":"fructose-bisphosphatase","id":"FBP","upper_bound":1000,"notes":{"MetaCyc":"F16BDEPHOS-RXN","Enzymes":["3.1.3.11"],"original_bigg_id":"FBP","map_info":{"x":142.3640880339957,"reversibility":false,"y":205.18000736770938},"KEGG":"R00762"},"metabolites":{"h2o_c":-1,"f6p_c":1,"fdp_c":-1,"pi_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"formate transport in via proton symport","id":"FORt2","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"FORt2"},"metabolites":{"for_c":1,"for_e":-1,"h_e":-1,"h_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"formate transport via diffusion","id":"FORti","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"FORti"},"metabolites":{"for_c":-1,"for_e":1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_1813 or Asuc_1814","name":"fumarate reductase","id":"FRD7","upper_bound":1000,"notes":{"MetaCyc":"SUCCINATE-DEHYDROGENASE-UBIQUINONE-RXN","Enzymes":["1.3.5.1","1.3.5.4"],"original_bigg_id":"FRD7","map_info":{"x":91.85808723484153,"reversibility":true,"y":617.1681673337579,"cofactors":{"q8_c":{"x":118.69275404506878,"y":624.3914968332098},"q8h2_c":{"x":119.2533052823336,"y":608.0773561013383}}},"KEGG":"R02164"},"metabolites":{"q8_c":1,"fum_c":-1,"succ_c":1,"q8h2_c":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"R_Fructose_transport_via_PEPPyr_PTS__f6p_generating","id":"FRUpts2","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"FRUpts2"},"metabolites":{"pyr_c":1,"f6p_c":1,"fru_e":-1,"pep_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0956","name":"fumarase","id":"FUM","upper_bound":1000,"notes":{"MetaCyc":"FUMHYDR-RXN","Enzymes":["4.2.1.2"],"original_bigg_id":"FUM","map_info":{"x":128.7879223563044,"reversibility":true,"y":552.1226480673281,"group":2},"KEGG":"R01082"},"metabolites":{"h2o_c":-1,"fum_c":-1,"mal__L_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"R_Fumarate_transport_via_proton_symport__2_H","id":"FUMt2_2","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"FUMt2_2"},"metabolites":{"fum_c":1,"h_e":-2,"h_c":2,"fum_e":-1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_1027","name":"glyceraldehyde-3-phosphate dehydrogenase","id":"GAPD","upper_bound":1000,"notes":{"MetaCyc":"GAPOXNPHOSPHN-RXN","Enzymes":["1.2.1.12","1.2.1.59"],"original_bigg_id":"GAPD","map_info":{"x":347.3582370890107,"reversibility":true,"y":211.28467493652442,"cofactors":{"nadh_c":{"x":380.0553232949826,"y":196.7216203331348}}},"KEGG":"R01061"},"metabolites":{"h_c":1,"pi_c":-1,"13dpg_c":1,"nadh_c":1,"g3p_c":-1,"nad_c":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"D-glucose transport via PEP:Pyr PTS","id":"GLCpts","upper_bound":1000,"notes":{"map_info":{"x":74.07382680101327,"reversibility":false,"y":47.09257932828508,"cofactors":{"pyr_c":{"x":58.002541538494754,"y":78.79946293784405},"pep_c":{"x":31.480504681410935,"y":60.264936292496046}}},"original_bigg_id":"GLCpts"},"metabolites":{"pyr_c":1,"glc__D_e":-1,"pep_c":-1,"g6p_c":1}},{"lower_bound":0,"gene_reaction_rule":"Asuc_0232","name":"phosphogluconate dehydrogenase","id":"GND","upper_bound":1000,"notes":{"MetaCyc":"RXN-9952","Enzymes":["1.1.1.44","1.1.1.351"],"original_bigg_id":"GND","map_info":{"x":264.4839278394269,"reversibility":false,"y":19.07008358081694,"cofactors":{"nadph_c":{"x":321.66670403486387,"y":30.554305302939596},"co2_c":{"x":316.74655609093656,"y":15.396386542933953}}},"KEGG":"R01528"},"metabolites":{"nadph_c":1,"co2_c":1,"6pgc_c":-1,"nadp_c":-1,"ru5p__D_c":1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"R_H2O_transport_via_diffusion","id":"H2Ot","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"H2Ot"},"metabolites":{"h2o_c":1,"h2o_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"R_Malate_transport_via_proton_symport__2_H","id":"MALt2_2","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"MALt2_2"},"metabolites":{"mal__L_e":-1,"h_e":-2,"mal__L_c":1,"h_c":2}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_1612","name":"malate dehydrogenase","id":"MDH","upper_bound":1000,"notes":{"MetaCyc":"MALATE-DEH-RXN","Enzymes":["1.1.1.37","1.1.1.299"],"original_bigg_id":"MDH","map_info":{"x":168.8757596691594,"reversibility":true,"y":483.36967508245345,"cofactors":{"nadh_c":{"x":137.77353012291036,"y":432.74976774451216}},"group":2},"KEGG":"R00342"},"metabolites":{"oaa_c":1,"nadh_c":1,"mal__L_c":-1,"h_c":1,"nad_c":-1}},{"lower_bound":0,"gene_reaction_rule":"Asuc_0669","name":"malic enzyme (NADP)","id":"ME2","upper_bound":1000,"notes":{"MetaCyc":"MALIC-NADP-RXN","Enzymes":["1.1.1.40"],"original_bigg_id":"ME2","map_info":{"x":205.61003807650025,"reversibility":false,"y":491.3126487628525,"cofactors":{"nadph_c":{"x":218.02399667262947,"y":536.0931373872677},"co2_c":{"x":235.94197276702695,"y":520.8345509714555}}},"KEGG":"R00216"},"metabolites":{"nadph_c":1,"co2_c":1,"pyr_c":1,"mal__L_c":-1,"nadp_c":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"NADH dehydrogenase (ubiquinone-8 & 3 protons)","id":"NADH16","upper_bound":1000,"notes":{"map_info":{"hidden":true,"reversibility":false,"cofactors":{"q8_c":{},"nadh_c":{},"q8h2_c":{}}},"original_bigg_id":"NADH16"},"metabolites":{"h_e":3,"h_c":-4,"q8_c":-1,"nadh_c":-1,"q8h2_c":1,"nad_c":1}},{"lower_bound":0,"gene_reaction_rule":"Asuc_1021 or Asuc_1022","name":"NAD transhydrogenase","id":"NADTRHD","upper_bound":1000,"notes":{"MetaCyc":"PYRNUTRANSHYDROGEN-RXN","Enzymes":["1.6.1.1","1.6.1.2","1.6.1.3"],"original_bigg_id":"NADTRHD","map_info":{"hidden":true,"reversibility":false,"cofactors":{"nadph_c":{},"nadh_c":{}}},"KEGG":"R00112"},"metabolites":{"nadph_c":-1,"nadh_c":1,"nadp_c":1,"nad_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"R_o2_transport__diffusion","id":"O2t","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"O2t"},"metabolites":{"o2_e":-1,"o2_c":1}},{"lower_bound":0,"gene_reaction_rule":"Asuc_0942 or Asuc_0944 or Asuc_0943","name":"pyruvate dehydrogenase","id":"PDH","upper_bound":1000,"notes":{"MetaCyc":"PYRUVDEH-RXN","Enzymes":["1.2.4.1","1.8.1.4","2.3.1.12"],"original_bigg_id":"PDH","map_info":{"x":316.9307329456555,"reversibility":false,"y":466.0116167359042,"cofactors":{"co2_c":{"x":300.80184508575394,"y":520.1979178366431},"nadh_c":{"x":280.4304995293506,"y":502.42259256641546}}},"KEGG":"R00209"},"metabolites":{"co2_c":1,"coa_c":-1,"pyr_c":-1,"nadh_c":1,"accoa_c":1,"nad_c":-1}},{"lower_bound":0,"gene_reaction_rule":"Asuc_0687","name":"phosphofructokinase","id":"PFK","upper_bound":1000,"notes":{"MetaCyc":"6PFRUCTPHOS-RXN","Enzymes":["2.7.1.11"],"original_bigg_id":"PFK","map_info":{"x":133.80538618985943,"reversibility":false,"y":216.73428030936736,"cofactors":{"atp_c":{"x":79.98019294099704,"y":218.81350203548726}}},"KEGG":"R00756"},"metabolites":{"f6p_c":-1,"atp_c":-1,"fdp_c":1,"h_c":1,"adp_c":1}},{"lower_bound":0,"gene_reaction_rule":"Asuc_0207","name":"pyruvate formate lyase","id":"PFL","upper_bound":1000,"notes":{"MetaCyc":"PYRUVFORMLY-RXN","Enzymes":["2.3.1.54"],"original_bigg_id":"PFL","map_info":{"x":345.3829389128512,"reversibility":false,"y":467.39393224318394,"group":"ko"},"KEGG":"R00212"},"metabolites":{"pyr_c":-1,"for_c":1,"coa_c":-1,"accoa_c":1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_1425","name":"glucose-6-phosphate isomerase","id":"PGI","upper_bound":1000,"notes":{"MetaCyc":"PGLUCISOM-RXN","Enzymes":["5.3.1.9"],"original_bigg_id":"PGI","map_info":{"x":91.98307808744356,"reversibility":true,"y":115.95617458755262},"KEGG":"R00771"},"metabolites":{"f6p_c":1,"g6p_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0535","name":"phosphoglycerate kinase","id":"PGK","upper_bound":1000,"notes":{"MetaCyc":"PHOSGLYPHOS-RXN","Enzymes":["2.7.2.3"],"original_bigg_id":"PGK","map_info":{"x":389.9618138227907,"reversibility":true,"y":258.5231106462878,"cofactors":{"atp_c":{"x":420.31493574154047,"y":278.9922657220668}}},"KEGG":"R01512"},"metabolites":{"atp_c":-1,"3pg_c":-1,"adp_c":1,"13dpg_c":1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0572 or Asuc_1383","name":"phosphoglycerate mutase","id":"PGM","upper_bound":1000,"notes":{"MetaCyc":"3PGAREARR-RXN","Enzymes":["5.4.2.11","5.4.2.12"],"original_bigg_id":"PGM","map_info":{"x":367.8069554754235,"reversibility":true,"y":341.2765723756918},"KEGG":"R01518"},"metabolites":{"3pg_c":1,"2pg_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"R_phosphate_reversible_transport_via_symport","id":"PIt2r","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"PIt2r"},"metabolites":{"h_e":-1,"pi_e":-1,"pi_c":1,"h_c":1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0221","name":"phosphoenolpyruvate carboxykinase","id":"PPCK","upper_bound":1000,"notes":{"MetaCyc":"PEPCARBOXYKIN-RXN","Enzymes":["4.1.1.49"],"original_bigg_id":"PPCK","map_info":{"x":225.14157388231007,"reversibility":true,"y":384.6537560731797,"cofactors":{"co2_c":{"x":195.29336942169803,"y":342.9377798390681},"atp_c":{"x":172.8741869016683,"y":380.0570124689461}},"group":2},"KEGG":"R00341"},"metabolites":{"co2_c":1,"atp_c":-1,"pep_c":1,"adp_c":1,"oaa_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_1662","name":"phosphotransacetylase","id":"PTAr","upper_bound":1000,"notes":{"MetaCyc":"PHOSACETYLTRANS-RXN","Enzymes":["2.3.1.8"],"original_bigg_id":"PTAr","map_info":{"x":337.56678237297814,"reversibility":true,"y":551.3180861798992},"KEGG":"R00230"},"metabolites":{"pi_c":-1,"actp_c":1,"coa_c":1,"accoa_c":-1}},{"lower_bound":0,"gene_reaction_rule":"Asuc_1171","name":"pyruvate kinase","id":"PYK","upper_bound":1000,"notes":{"MetaCyc":"PEPDEPHOS-RXN","Enzymes":["2.7.1.40"],"original_bigg_id":"PYK","map_info":{"x":275.7553622814589,"reversibility":false,"y":374.0973638547674,"cofactors":{"atp_c":{"x":310.9807956946766,"y":386.16479587096}}},"KEGG":"R00200"},"metabolites":{"pyr_c":1,"atp_c":1,"pep_c":-1,"adp_c":-1,"h_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"R_pyruvate_transport_in_via_proton_symport","id":"PYRt2","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"PYRt2r"},"metabolites":{"pyr_c":1,"h_e":-1,"h_c":1,"pyr_e":-1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0218","name":"ribulose 5-phosphate 3-epimerase","id":"RPE","upper_bound":1000,"notes":{"MetaCyc":"RIBULP3EPIM-RXN","Enzymes":["5.1.3.1"],"original_bigg_id":"RPE","map_info":{"x":325.8088418501407,"reversibility":true,"y":97.32403922907261},"KEGG":"R01529"},"metabolites":{"xu5p__D_c":1,"ru5p__D_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_1580 or Asuc_1597 or Asuc_1870","name":"ribose-5-phosphate isomerase","id":"RPI","upper_bound":1000,"notes":{"MetaCyc":"RIB5PISOM-RXN","Enzymes":["5.3.1.6"],"original_bigg_id":"RPI","map_info":{"x":283.881107839456,"reversibility":true,"y":67.29564196697308},"KEGG":"R01056"},"metabolites":{"ru5p__D_c":1,"r5p_c":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"R_succinate_transport_via_proton_symport__2_H","id":"SUCCt2_2","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"SUCCt2_2"},"metabolites":{"h_e":-2,"h_c":2,"succ_e":-1,"succ_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"succinate transport out via proton antiport","id":"SUCCt3","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"SUCCt3"},"metabolites":{"h_e":-1,"h_c":1,"succ_e":1,"succ_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0582","name":"transaldolase","id":"TALA","upper_bound":1000,"notes":{"MetaCyc":"TRANSALDOL-RXN","Enzymes":["2.2.1.2"],"original_bigg_id":"TALA","map_info":{"x":180.55593569906966,"reversibility":true,"y":166.4198058730998},"KEGG":"R08575"},"metabolites":{"f6p_c":1,"e4p_c":1,"s7p_c":-1,"g3p_c":-1}},{"lower_bound":0,"gene_reaction_rule":"Asuc_1021 or Asuc_1022","name":"R_NAD_P__transhydrogenase","id":"THD2","upper_bound":1000,"notes":{"Enzymes":["1.6.1.2"],"original_bigg_id":"THD2","map_info":{"hidden":true,"reversibility":false,"cofactors":{"nadph_c":{},"nadh_c":{}}}},"metabolites":{"nadph_c":1,"h_e":-2,"h_c":2,"nad_c":1,"nadh_c":-1,"nadp_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0170 or Asuc_0171 or Asuc_0265","name":"transketolase","id":"TKT1","upper_bound":1000,"notes":{"MetaCyc":"1TRANSKETO-RXN","Enzymes":["2.2.1.1"],"original_bigg_id":"TKT1","map_info":{"x":274.51468969512905,"reversibility":true,"y":156.8092631665833},"KEGG":"R01641"},"metabolites":{"xu5p__D_c":-1,"s7p_c":1,"r5p_c":-1,"g3p_c":1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0170 or Asuc_0171 or Asuc_0265","name":"transketolase","id":"TKT2","upper_bound":1000,"notes":{"MetaCyc":"2TRANSKETO-RXN","Enzymes":["2.2.1.1"],"original_bigg_id":"TKT2","map_info":{"x":231.48068334636415,"reversibility":true,"y":136.77351849450065},"KEGG":"R01067"},"metabolites":{"xu5p__D_c":-1,"e4p_c":-1,"g3p_c":1,"f6p_c":1}},{"lower_bound":-1000,"gene_reaction_rule":"Asuc_0677 or Asuc_1575 or Asuc_1601","name":"triose-phosphate isomerase","id":"TPI","upper_bound":1000,"notes":{"MetaCyc":"TRIOSEPISOMERIZATION-RXN","Enzymes":["5.3.1.1"],"original_bigg_id":"TPI","map_info":{"x":297.1596302668127,"reversibility":true,"y":237.50395472210562},"KEGG":"R01015"},"metabolites":{"dhap_c":-1,"g3p_c":1}},{"lower_bound":0,"gene_reaction_rule":"Asuc_0301 or Asuc_0302 or Asuc_0303","name":"OXALODECARB-RXN","id":"OAADC","upper_bound":1000,"subsystem":"PWY-6339, METHYLGALLATE-DEGRADATION-PWY, P184-PWY","notes":{"RHEA":["15641"],"Enzymes":["1.1.1.38","4.1.1.3"],"map_info":{"x":248.3832451334038,"reversibility":false,"y":438.2336301142614,"cofactors":{"co2_c":{"x":253.12970865514836,"y":411.3388431800438}}},"orig_id":"OXALODECARB-RXN","BIOCYC":["OXALODECARB-RXN"],"CONFIDENCE LEVEL":["4"],"KEGG":["R00217"]},"metabolites":{"pyr_c":1,"co2_c":1,"h_c":-1,"oaa_c":-1}},{"lower_bound":0,"gene_reaction_rule":"Asuc_1264 or Asuc_1265 or Asuc_1704","name":"1.2.1.2-RXN","id":"FDH","upper_bound":1000,"subsystem":"PWY-1881, PWY-5497, P164-PWY, PWY-6696","notes":{"RHEA":["15985"],"Enzymes":["1.2.1.2"],"map_info":{"x":423.4407901556308,"reversibility":false,"hidden":false,"cofactors":{"nadh_c":{"x":463.5330220895758,"y":493.4239508909179}},"y":496.2018904466845},"orig_id":"_1.2.1.2-RXN","BIOCYC":["1.2.1.2-RXN"],"CONFIDENCE LEVEL":["2"],"KEGG":["R00519"]},"metabolites":{"for_c":-1,"nadh_c":1,"nad_c":-1,"co2_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"H2RED","id":"H2RED","upper_bound":1000,"notes":{"map_info":{"hidden":true,"reversibility":false,"cofactors":{"q8_c":{},"q8h2_c":{}}}},"metabolites":{"q8_c":-1,"h2_e":-1,"h_e":2,"h_c":-2,"q8h2_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"EX_h2_e","id":"EX_h2_e","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true}},"metabolites":{"h2_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"GLCabc","id":"GLCabc","upper_bound":1000,"notes":{"map_info":{"hidden":true,"reversibility":false,"cofactors":{"atp_c":{}}}},"metabolites":{"glc__D_c":1,"atp_c":-1,"h_c":1,"pi_c":1,"h2o_c":-1,"glc__D_e":-1,"adp_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"Glucokinase","id":"GLK","upper_bound":1000,"notes":{"map_info":{"hidden":true,"reversibility":false,"cofactors":{"atp_c":{}}}},"metabolites":{"glc__D_c":-1,"atp_c":-1,"h_c":1,"adp_c":1,"g6p_c":1}},{"lower_bound":-6,"gene_reaction_rule":"","name":"EX_xyl_e","id":"EX_xyl_e","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true}},"metabolites":{"xyl__D_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"XYLT","id":"XYLT","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true}},"metabolites":{"xyl__D_e":-1,"h_e":-1,"h_c":1,"xyl__D_c":1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"xylose isomerase","id":"XYLI","upper_bound":1000,"notes":{"map_info":{"x":409.74618702609604,"reversibility":true,"y":101.00702504959148}},"metabolites":{"xyl__D_c":-1,"xylu__D_c":1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"xylulokinase","id":"XYLK","upper_bound":1000,"notes":{"map_info":{"x":355.274637558575,"reversibility":true,"y":134.06484742133145,"cofactors":{"atp_c":{"x":391.9735184439857,"y":141.7113484973318}}}},"metabolites":{"xu5p__D_c":1,"atp_c":-1,"h_c":1,"adp_c":1,"xylu__D_c":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"EX_arab_e","id":"EX_arab_e","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true}},"metabolites":{"arab__D_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"ARABT","id":"ARABT","upper_bound":1000,"notes":{"map_info":{"hidden":true,"reversibility":false,"cofactors":{"atp_c":{}}}},"metabolites":{"atp_c":-1,"arab__D_c":1,"h_c":1,"pi_c":1,"h2o_c":-1,"arab__D_e":-1,"adp_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"AKI","id":"AKI","upper_bound":1000,"notes":{"map_info":{"x":412.8530223543729,"reversibility":false,"y":-12.086736195040189,"hidden":true}},"metabolites":{"rbl__D_c":1,"arab__D_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"arab_ptrans","id":"arab_ptrans","upper_bound":1000,"notes":{"map_info":{"x":367.9683175146411,"reversibility":true,"hidden":true,"cofactors":{"atp_c":{}},"y":11.104788301272038}},"metabolites":{"rbl__D_c":-1,"atp_c":-1,"h_c":1,"adp_c":1,"ru5p__D_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"EX_galac_e","id":"EX_galac_e","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true}},"metabolites":{"gal_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"GALACT","id":"GALACT","upper_bound":1000,"notes":{"map_info":{"hidden":true,"reversibility":false,"cofactors":{"atp_c":{}}}},"metabolites":{"atp_c":-1,"gal_e":-1,"h_c":1,"pi_c":1,"h2o_c":-1,"gal_c":1,"adp_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"GALACP","id":"GALACP","upper_bound":1000,"notes":{"map_info":{"x":4.867197102182892,"reversibility":false,"hidden":true,"cofactors":{"atp_c":{}},"y":64.34888023257503}},"metabolites":{"gal1p_c":1,"gal_c":-1,"atp_c":-1,"h_c":1,"adp_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"GALUTRANS","id":"GALUTRANS","upper_bound":1000,"notes":{"map_info":{"x":22.99337196476698,"reversibility":false,"y":24.975832474358228,"hidden":true}},"metabolites":{"gal1p_c":-1,"udpg_c":-1,"g1p_c":1,"udpgal_c":1}},{"lower_bound":-1000,"gene_reaction_rule":"","name":"UDP_RECYC","id":"UDP_RECYC","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true}},"metabolites":{"udpg_c":-1,"udpgal_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"G1PPI","id":"G1PPI","upper_bound":1000,"notes":{"map_info":{"x":68.14513967049888,"reversibility":false,"y":6.471010071849321,"hidden":true}},"metabolites":{"g1p_c":-1,"g6p_c":1}},{"lower_bound":0,"gene_reaction_rule":"","name":"","id":"EX_biomass","upper_bound":1000,"objective_coefficient":1,"notes":{"map_info":{"reversibility":false,"hidden":true}},"metabolites":{"biomass":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"A. succinogenes 130z biomass formation","id":"biomass","upper_bound":1000,"notes":{"map_info":{"hidden":true,"reversibility":false,"cofactors":{"nadph_c":{},"co2_c":{},"atp_c":{},"nadh_c":{}}}},"metabolites":{"atp_c":-26,"nadp_c":13.0279,"f6p_c":-0.07387568057546033,"3pg_c":-1.5587872798432814,"nadh_c":3.547,"adp_c":26,"nadph_c":-13.0279,"co2_c":13.753651140545564,"g6p_c":-0.2136038719036582,"h2o_c":-31.587866869298622,"g3p_c":-0.1344141437832776,"accoa_c":-3.9050955664416107,"coa_c":3.9050955664416107,"r5p_c":-0.9353765649166534,"pi_c":29.833095432058474,"h_c":35.4809,"pep_c":-0.5408866824643365,"nad_c":-3.547,"oaa_c":-1.8616879899037369,"pyr_c":-2.9516929186765024,"biomass":1,"e4p_c":-0.37615120857180784}},{"lower_bound":0,"gene_reaction_rule":"","name":"","id":"EX_atpm","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true}},"metabolites":{"atpm":-1}},{"lower_bound":-1000,"gene_reaction_rule":"(b2133 or b1380)","name":"D-lactate dehydrogenase","id":"LDH_D","upper_bound":1000,"notes":{"MetaCyc":"DLACTDEHYDROGNAD-RXN","Enzymes":["1.1.1.28"],"original_bigg_id":"LDH_D","map_info":{"x":394.36957371174753,"reversibility":true,"y":396.6707449188173,"cofactors":{"nadh_c":{"x":375.7087967758144,"y":430.8530168183352}}},"KEGG":"R00704"},"metabolites":{"pyr_c":1,"nadh_c":1,"lac__D_c":-1,"h_c":1,"nad_c":-1}},{"lower_bound":-1000,"gene_reaction_rule":"( b2975 or b3603 )","name":"R_D_lactate_transport_via_proton_symport","id":"D_LACt2","upper_bound":1000,"notes":{"map_info":{"reversibility":true,"hidden":true},"original_bigg_id":"D_LACt2"},"metabolites":{"lac__D_c":1,"h_e":-1,"h_c":1,"lac__D_e":-1}},{"lower_bound":0,"gene_reaction_rule":"","name":"D-lactate exchange","id":"EX_lac__D_e","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"hidden":true},"original_bigg_id":"EX_lac_D_e"},"metabolites":{"lac__D_e":-1}},{"lower_bound":-1000,"gene_reaction_rule":"(Asuc_0227) and (Asuc_0228)","name":"glucose 6-phosphate dehydrogenase","id":"G6PDH2r","upper_bound":1000,"notes":{"MetaCyc":"GLU6PDEHYDROG-RXN","Enzymes":["1.1.1.49","1.1.1.363"],"original_bigg_id":"G6PDH2r","map_info":{"x":147.73235676719128,"reversibility":true,"y":24.99947127525205,"cofactors":{"nadph_c":{"x":180.3723335905413,"y":34.60991459649382}}},"KEGG":"R00835"},"metabolites":{"nadph_c":1,"6pgc_c":1,"h_c":2,"g6p_c":-1,"h2o_c":-1,"nadp_c":-1}},{"lower_bound":0,"gene_reaction_rule":"b1300","name":"aldehyde dehydrogenase (acetaldehyde, NAD)","id":"ALDD2x","upper_bound":1000,"notes":{"map_info":{"reversibility":false,"cofactors":{"nadh_c":{"x":349.85825961700823,"y":640.8539741979195}},"x":351.1322090979263,"y":609.5077876523435}},"metabolites":{"h2o_c":-1,"nad_c":-1,"acald_c":-1,"ac_c":1,"h_c":2,"nadh_c":1}}],"metabolites":[{"name":"3-Phospho-D-glyceroyl phosphate","id":"13dpg_c","compartment":"c","charge":-4,"formula":"C3H4O10P2","notes":{"SEED":["cpd00203"],"MetaCyc":"DPG","PUBCHEM ID":["3535"],"ChEBI":["16001","1658","20189","57604","11881"],"Reactome":["29800"],"UPA":["UPC00236"],"BRENDA":["BG18032","BG87317"],"map_info":{"x":373.043223866228,"display_name":"13DPG","y":237.3584107009283},"BioPath":["1,3-Diphospho-D-glycerate"],"HMDB":["HMDB01270"],"KEGG":"C00236"}},{"name":"D-Glycerate 2-phosphate","id":"2pg_c","compartment":"c","charge":-3,"formula":"C3H4O7P","notes":{"SEED":["cpd00482"],"MetaCyc":"2-PG","PUBCHEM ID":["3904"],"ChEBI":["1267","58289","17835","21028","11651","12986","24344","39868"],"Reactome":["30485"],"UPA":["UPC00631"],"BRENDA":["BG17976","BG17975"],"map_info":{"x":324.1399811479195,"display_name":"2PG","y":361.40399959209265},"BioPath":["2-Phospho-D-glycerate"],"HMDB":["HMDB03391","HMDB00362"],"KEGG":"C00631"}},{"name":"3-Phospho-D-glycerate","id":"3pg_c","compartment":"c","charge":-3,"formula":"C3H4O7P","notes":{"SEED":["cpd00169"],"MetaCyc":"G3P","PUBCHEM ID":["3497"],"ChEBI":["40016","58272","57998","11879","1657","1659","17050","21029","11882","11880","12987","17794","24345"],"Reactome":["29728"],"UPA":["UPC00597","UPC00197"],"BRENDA":["BG17981","BG17979"],"map_info":{"x":386.81349679838365,"display_name":"3PG","y":307.835730848789},"BioPath":["3-Phospho-D-glycerate"],"HMDB":["HMDB00807"],"KEGG":"C00197"}},{"name":"6-Phospho-D-gluconate","id":"6pgc_c","compartment":"c","charge":-3,"formula":"C6H10O10P","notes":{"SEED":["cpd00284"],"MetaCyc":"CPD-2961","PUBCHEM ID":["3638"],"ChEBI":["2231","12232","48928","16863","58759","40282","33851"],"Reactome":["29996"],"UPA":["UPC00345"],"BRENDA":["BG22563"],"map_info":{"x":198.1801574871815,"display_name":"6PGC","y":8.920309065114125},"BioPath":["6-Phospho-D-gluconate"],"HMDB":["HMDB01316"],"KEGG":"C00345"}},{"name":"Acetate","id":"ac_c","compartment":"c","charge":-1,"formula":"C2H3O2","notes":{"MetaCyc":"ACET","ChEBI":["62947","62964","32029","22165","3310","2387","62984","63879","32138","15366","13704","63078","30089","40480","22169","40486","59199","63045","32954"],"Reactome":["113539","2022890","29416","1524044","390305"],"CASID":["71-50-1"],"HMDB":["HMDB00042"],"SEED":["cpd00029"],"CAS":["71-50-1"],"PUBCHEM ID":["3335"],"UPA":["UPC00033"],"BRENDA":["BG15447"],"map_info":{"x":282.34262460899663,"display_name":"AC","y":648.5447410537606},"BioPath":["Acetate"],"LIPIDMAPS":["LMFA01010000","LMFA01010002"],"KEGG":"C00033"}},{"name":"Acetate","id":"ac_e","compartment":"e","charge":-1,"formula":"C2H3O2","notes":{"MetaCyc":"ACET","ChEBI":["62947","62964","32029","22165","3310","2387","62984","63879","32138","15366","13704","63078","30089","40480","22169","40486","59199","63045","32954"],"Reactome":["113539","2022890","29416","1524044","390305"],"CASID":["71-50-1"],"HMDB":["HMDB00042"],"SEED":["cpd00029"],"CAS":["71-50-1"],"PUBCHEM ID":["3335"],"UPA":["UPC00033"],"BRENDA":["BG15447"],"map_info":{"display_name":"AC","hidden":true},"BioPath":["Acetate"],"LIPIDMAPS":["LMFA01010000","LMFA01010002"],"KEGG":"C00033"}},{"name":"Acetaldehyde","id":"acald_c","compartment":"c","charge":0,"formula":"C2H4O","notes":{"MetaCyc":"ACETALD","ChEBI":["13703","2383","15343","22158","40533"],"Reactome":["113532","29510","113681","113745"],"CASID":["75-07-0"],"HMDB":["HMDB00990"],"SEED":["cpd00071"],"CAS":["75-07-0"],"PUBCHEM ID":["3384"],"UPA":["UPC00084"],"BRENDA":["BG89392","BG15435"],"map_info":{"x":396.5187869869987,"display_name":"ACALD","y":583.8260177198886},"BioPath":["Acetaldehyde"],"KEGG":"C00084"}},{"name":"Acetaldehyde","id":"acald_e","compartment":"e","charge":0,"formula":"C2H4O","notes":{"MetaCyc":"ACETALD","ChEBI":["13703","2383","15343","22158","40533"],"Reactome":["113532","29510","113681","113745"],"CASID":["75-07-0"],"HMDB":["HMDB00990"],"SEED":["cpd00071"],"CAS":["75-07-0"],"PUBCHEM ID":["3384"],"UPA":["UPC00084"],"BRENDA":["BG89392","BG15435"],"map_info":{"display_name":"ACALD","hidden":true},"BioPath":["Acetaldehyde"],"KEGG":"C00084"}},{"name":"Acetyl-CoA","id":"accoa_c","compartment":"c","charge":-4,"formula":"C23H34N7O17P3S","notes":{"MetaCyc":"ACETYL-COA","ChEBI":["13712","22192","40470","2408","57288","15351"],"Reactome":["113559","727753","113560","353123","76183"],"CASID":["72-89-9"],"HMDB":["HMDB01206"],"SEED":["cpd00022"],"CAS":["72-89-9"],"PUBCHEM ID":["3326"],"UPA":["UPC00024"],"BRENDA":["BG36329"],"map_info":{"x":356.5408460563843,"display_name":"ACCOA","y":517.5604880189204},"BioPath":["Acetyl-CoA"],"LIPIDMAPS":["LMFA07050029","LMFA07050000"],"KEGG":"C00024"}},{"name":"Acetyl phosphate","id":"actp_c","compartment":"c","charge":-2,"formula":"C2H3O5P","notes":{"MetaCyc":"ACETYL-P","ChEBI":["13711","2407","22191","46262","15350"],"CAS":["19926-71-7"],"CASID":["19926-71-7"],"HMDB":["HMDB01494"],"SEED":["cpd00196"],"PUBCHEM ID":["3527"],"UPA":["UPC00227"],"BRENDA":["BG15501"],"map_info":{"x":319.1394521829853,"display_name":"ACTP","y":582.8240702520674},"BioPath":["Acetyl_phosphate"],"KEGG":"C00227"}},{"name":"ADP","id":"adp_c","compartment":"c","charge":-3,"formula":"C10H12N5O10P2","notes":{"MetaCyc":"ADP","ChEBI":["13222","16761","2342","22244","40553","456216"],"Reactome":["190072","481002","211606","429160","29370","196180","113581","113582","114564","114565","429153"],"CASID":["58-64-0"],"HMDB":["HMDB01341"],"SEED":["cpd00008"],"CAS":["58-64-0"],"PUBCHEM ID":["3310"],"UPA":["UPC00008"],"BRENDA":["BG1228"],"map_info":{"display_name":"ADP","hidden":true},"BioPath":["Adenosine-5-prime-diphosphate"],"KEGG":"C00008"}},{"name":"ATP","id":"atp_c","compartment":"c","charge":-4,"formula":"C10H12N5O13P3","notes":{"MetaCyc":"ATP","ChEBI":["40938","15422","57299","13236","10789","30616","22249","10841","2359"],"Reactome":["190078","113592","113593","114570","29358","389573","139836","211579"],"CASID":["56-65-5"],"HMDB":["HMDB00538"],"SEED":["cpd00002"],"CAS":["56-65-5"],"PUBCHEM ID":["3304"],"UPA":["UPC00002"],"BRENDA":["BG1395"],"map_info":{"color":"#ffbb78","display_name":"ATP","hidden":true},"BioPath":["Adenosine-5-prime-triphosphate"],"KEGG":"C00002"}},{"name":"CO2","id":"co2_c","compartment":"c","charge":0,"formula":"CO2","notes":{"MetaCyc":"CARBON-DIOXIDE","ChEBI":["48829","16526","13284","13285","13282","13283","23011","3283"],"Reactome":["159751","159942","1237009","29376","113528","389536","189480"],"CASID":["124-38-9"],"HMDB":["HMDB01967"],"SEED":["cpd00011"],"CAS":["124-38-9"],"PUBCHEM ID":["3313"],"UPA":["UPC00011"],"BRENDA":["BG28651"],"map_info":{"x":457.4357200364724,"color":"#aec7e8","display_name":"CO2","y":516.2417657229903,"hidden":false},"BioPath":["Carbon_dioxide"],"KEGG":"C00011"}},{"name":"CO2","id":"co2_e","compartment":"e","charge":0,"formula":"CO2","notes":{"MetaCyc":"CARBON-DIOXIDE","ChEBI":["48829","16526","13284","13285","13282","13283","23011","3283"],"Reactome":["159751","159942","1237009","29376","113528","389536","189480"],"CASID":["124-38-9"],"HMDB":["HMDB01967"],"SEED":["cpd00011"],"CAS":["124-38-9"],"PUBCHEM ID":["3313"],"UPA":["UPC00011"],"BRENDA":["BG28651"],"map_info":{"display_name":"CO2","hidden":true},"BioPath":["Carbon_dioxide"],"KEGG":"C00011"}},{"name":"Coenzyme A","id":"coa_c","compartment":"c","charge":-4,"formula":"C21H32N7O16P3S","notes":{"MetaCyc":"CO-A","ChEBI":["57287","13295","13294","13298","41631","41597","741566","15346","23355","3771"],"Reactome":["76194","193514","29374","2485002","162743"],"CASID":["85-61-0"],"HMDB":["HMDB01423"],"SEED":["cpd00010"],"CAS":["85-61-0"],"PUBCHEM ID":["3312"],"UPA":["UPC00010"],"BRENDA":["BG11741"],"map_info":{"display_name":"COA","hidden":true},"BioPath":["CoA-SH"],"KEGG":"C00010"}},{"name":"Dihydroxyacetone phosphate","id":"dhap_c","compartment":"c","charge":-2,"formula":"C3H5O6P","notes":{"MetaCyc":"DIHYDROXY-ACETONE-PHOSPHATE","ChEBI":["14341","57642","14342","16108","5454","24355","39571"],"Reactome":["188451","75970","390404"],"CASID":["57-04-5"],"HMDB":["HMDB01473","HMDB11735"],"SEED":["cpd00095"],"CAS":["57-04-5"],"PUBCHEM ID":["3411"],"UPA":["UPC00111"],"BRENDA":["BG89172"],"map_info":{"x":288.1821461789964,"display_name":"DHAP","y":259.62935854085896},"BioPath":["2-Glycerone_phosphate"],"KEGG":"C00111"}},{"name":"D-Erythrose 4-phosphate","id":"e4p_c","compartment":"c","charge":-2,"formula":"C4H7O7P","notes":{"MetaCyc":"ERYTHROSE-4P","ChEBI":["42349","48153","4256","20927","12921","21109","27508","4114","16897"],"Reactome":["29878"],"CASID":["585-18-2"],"HMDB":["HMDB01321"],"SEED":["cpd01994","cpd00236"],"CAS":["585-18-2"],"PUBCHEM ID":["3574"],"UPA":["UPC00279"],"BRENDA":["BG59851","BG91980"],"map_info":{"x":177.79008346463644,"display_name":"E4P","y":62.84947822464068},"BioPath":["D-Erythrose_4-phosphate"],"KEGG":"C00279"}},{"name":"Ethanol","id":"etoh_c","compartment":"c","charge":0,"formula":"C2H6O","notes":{"MetaCyc":"ETOH","ChEBI":["4879","30880","16236","30878","52092","14222","52096","23978","44594","42377"],"Reactome":["30203","113748"],"CASID":["64-17-5"],"HMDB":["HMDB00108"],"SEED":["cpd00363"],"CAS":["64-17-5"],"PUBCHEM ID":["3752"],"UPA":["UPC00469"],"BRENDA":["BG15529"],"map_info":{"x":428.49577610988814,"display_name":"ETOH","y":642.6537303483125},"BioPath":["Ethanol"],"KEGG":"C00469"}},{"name":"Ethanol","id":"etoh_e","compartment":"e","charge":0,"formula":"C2H6O","notes":{"MetaCyc":"ETOH","ChEBI":["4879","30880","16236","30878","52092","14222","52096","23978","44594","42377"],"Reactome":["30203","113748"],"CASID":["64-17-5"],"HMDB":["HMDB00108"],"SEED":["cpd00363"],"CAS":["64-17-5"],"PUBCHEM ID":["3752"],"UPA":["UPC00469"],"BRENDA":["BG15529"],"map_info":{"display_name":"ETOH","hidden":true},"BioPath":["Ethanol"],"KEGG":"C00469"}},{"name":"D-Fructose 6-phosphate","id":"f6p_c","compartment":"c","charge":-2,"formula":"C6H11O9P","notes":{"MetaCyc":"FRUCTOSE-6P","ChEBI":["57634","12352","45804","61527","61553","10375","16084","42378","22768"],"CAS":["643-13-0"],"CASID":["643-13-0"],"HMDB":["HMDB03971"],"SEED":["cpd00072"],"PUBCHEM ID":["3385"],"UPA":["UPC05345","UPC00085"],"BRENDA":["BG56501","BG22637"],"map_info":{"x":101.26331523486641,"display_name":"F6P","y":177.34727315441216},"BioPath":["beta-D-Fructose_6-phosphate"],"KEGG":"C00085"}},{"name":"D-Fructose 1,6-bisphosphate","id":"fdp_c","compartment":"c","charge":-4,"formula":"C6H10O12P2","notes":{"SEED":["cpd00290"],"MetaCyc":"FRUCTOSE-16-DIPHOSPHATE","PUBCHEM ID":["3647"],"map_info":{"x":180.377220566232,"display_name":"FDP","y":240.75502501147935},"ChEBI":["32968","49299","42553","32966","37736","28013","32967","41014","22767","10374","40595","40591"],"CAS":["488-69-7"],"UPA":["UPC00354"],"BRENDA":["BG22767"],"KEGG":"C00354","BioPath":["beta-D-Fructose_1,6-bisphosphate"],"CASID":["488-69-7"]}},{"name":"Formate","id":"for_c","compartment":"c","charge":-1,"formula":"CH1O2","notes":{"MetaCyc":"FORMATE","ChEBI":["42460","14276","63050","5145","24082","24081","30751","63880","15740","52343"],"Reactome":["389585","29460"],"CASID":["64-18-6"],"HMDB":["HMDB00142"],"SEED":["cpd00047"],"CAS":["64-18-6"],"PUBCHEM ID":["3358"],"UPA":["UPC00058"],"BRENDA":["BG28488"],"map_info":{"x":397.42101960996047,"display_name":"FOR","y":484.62092175127543},"BioPath":["Formate"],"LIPIDMAPS":["LMFA01010040"],"KEGG":"C00058"}},{"name":"Formate","id":"for_e","compartment":"e","charge":-1,"formula":"CH1O2","notes":{"MetaCyc":"FORMATE","ChEBI":["42460","14276","63050","5145","24082","24081","30751","63880","15740","52343"],"Reactome":["389585","29460"],"CASID":["64-18-6"],"HMDB":["HMDB00142"],"SEED":["cpd00047"],"CAS":["64-18-6"],"PUBCHEM ID":["3358"],"UPA":["UPC00058"],"BRENDA":["BG28488"],"map_info":{"display_name":"FOR","hidden":true},"BioPath":["Formate"],"LIPIDMAPS":["LMFA01010040"],"KEGG":"C00058"}},{"name":"D-Fructose","id":"fru_e","compartment":"e","charge":0,"formula":"C6H12O6","notes":{"MetaCyc":"CPD-10723","ChEBI":["5172","10373","37721","37720","28757","48673","24104","49089","22766","42560","24110","28645"],"CAS":["57-48-7"],"CASID":["57-48-7"],"HMDB":["HMDB00660"],"SEED":["cpd00082"],"PUBCHEM ID":["3395"],"UPA":["UPC00095"],"BRENDA":["BG22357","BG22370"],"map_info":{"display_name":"FRU","hidden":true},"BioPath":["beta-D-Fructofuranose"],"KEGG":"C00095"}},{"name":"Fumarate","id":"fum_c","compartment":"c","charge":-2,"formula":"C4H2O4","notes":{"MetaCyc":"FUM","ChEBI":["42743","18012","5190","22958","24122","24124","22956","22957","37154","37155","42511","29806","36180","14284"],"Reactome":["29586","113588"],"CASID":["110-17-8"],"HMDB":["HMDB00134"],"SEED":["cpd00106"],"CAS":["110-17-8"],"PUBCHEM ID":["3422"],"UPA":["UPC00122"],"BRENDA":["BG19266"],"map_info":{"x":110.73854035372122,"display_name":"FUM","y":585.6323318434088},"BioPath":["Fumarate"],"KEGG":"C00122"}},{"name":"Fumarate","id":"fum_e","compartment":"e","charge":-2,"formula":"C4H2O4","notes":{"MetaCyc":"FUM","ChEBI":["42743","18012","5190","22958","24122","24124","22956","22957","37154","37155","42511","29806","36180","14284"],"Reactome":["29586","113588"],"CASID":["110-17-8"],"HMDB":["HMDB00134"],"SEED":["cpd00106"],"CAS":["110-17-8"],"PUBCHEM ID":["3422"],"UPA":["UPC00122"],"BRENDA":["BG19266"],"map_info":{"display_name":"FUM","hidden":true},"BioPath":["Fumarate"],"KEGG":"C00122"}},{"name":"Glyceraldehyde 3-phosphate","id":"g3p_c","compartment":"c","charge":-2,"formula":"C3H5O6P","notes":{"SEED":["cpd00102"],"MetaCyc":"GAP","PUBCHEM ID":["3930"],"ChEBI":["17138","14333","5446","58027"],"CAS":["142-10-9"],"UPA":["UPC00661","UPC00118"],"BRENDA":["BG17970"],"map_info":{"x":306.2673827992605,"display_name":"G3P","y":207.3921752993234},"CASID":["142-10-9"],"HMDB":["HMDB01112"],"KEGG":"C00118"}},{"name":"D-Glucose 6-phosphate","id":"g6p_c","compartment":"c","charge":-2,"formula":"C6H11O9P","notes":{"MetaCyc":"GLC-6-P","ChEBI":["10399","22797","41041","17719","4170","61548","58247","12375"],"Reactome":["1629756"],"HMDB":["HMDB03498","HMDB06793","HMDB01401","HMDB01549"],"SEED":["cpd00079"],"CAS":["56-73-5"],"PUBCHEM ID":["3392"],"UPA":["UPC00092"],"BRENDA":["BG22626","BG22646"],"map_info":{"x":112.52666232322949,"display_name":"G6P","y":60.75748557678827},"CASID":["56-73-5"],"KEGG":"C00092"}},{"name":"D-Glucose","id":"glc__D_e","compartment":"e","charge":0,"formula":"C6H12O6","notes":{"MetaCyc":"ALPHA-GLUCOSE","PUBCHEM ID":["3333"],"CAS":["50-99-7"],"CASID":["50-99-7"],"map_info":{"x":34.37107051776515,"display_name":"GLC","y":32.477984768907746},"KEGG":"C00031"}},{"name":"H2O","id":"h2o_c","compartment":"c","charge":0,"formula":"H2O","notes":{"MetaCyc":"WATER","ChEBI":["15377","13365","41979","16234","36385","42857","27313","44819","29373","10743","5594","29356","53442","29375","29374","13419","43228","44292","13352","41981","29412","42043","33811","33813","35511","5585","44641","44701"],"Reactome":["947593","189422","141343","113518","1605715","109276","113521","113519","2022884","351603","29356"],"CASID":["7732-18-5"],"HMDB":["HMDB01039","HMDB02111"],"SEED":["cpd15275","cpd00001"],"CAS":["7732-18-5"],"PUBCHEM ID":["3303"],"UPA":["UPC00001","UPC01328"],"BRENDA":["BG92137","BG89181","BG92081","BG92002"],"map_info":{"display_name":"H2O","hidden":true},"BioPath":["OH-","Water","Oxygen_atom"],"KEGG":"C00001"}},{"name":"H2O","id":"h2o_e","compartment":"e","charge":0,"formula":"H2O","notes":{"MetaCyc":"WATER","ChEBI":["15377","13365","41979","16234","36385","42857","27313","44819","29373","10743","5594","29356","53442","29375","29374","13419","43228","44292","13352","41981","29412","42043","33811","33813","35511","5585","44641","44701"],"Reactome":["947593","189422","141343","113518","1605715","109276","113521","113519","2022884","351603","29356"],"CASID":["7732-18-5"],"HMDB":["HMDB01039","HMDB02111"],"SEED":["cpd15275","cpd00001"],"CAS":["7732-18-5"],"PUBCHEM ID":["3303"],"UPA":["UPC00001","UPC01328"],"BRENDA":["BG92137","BG89181","BG92081","BG92002"],"map_info":{"display_name":"H2O","hidden":true},"BioPath":["OH-","Water","Oxygen_atom"],"KEGG":"C00001"}},{"name":"H+","id":"h_c","compartment":"c","charge":1,"formula":"H","notes":{"MetaCyc":"PROTON","ChEBI":["24636","15378","10744","13357","5584"],"Reactome":["194688","425978","193465","374900","74722","425999","428040","163953","372511","2000349","70106","1470067","113529","425969","428548","156540","1614597","351626","427899"],"CASID":["12408-02-5"],"SEED":["cpd00067"],"CAS":["12408-02-5"],"PUBCHEM ID":["3380"],"UPA":["UPC00080"],"BRENDA":["BG79440"],"map_info":{"display_name":"H","hidden":true},"BioPath":["Proton"],"KEGG":"C00080"}},{"name":"H+","id":"h_e","compartment":"e","charge":1,"formula":"H","notes":{"MetaCyc":"PROTON","ChEBI":["24636","15378","10744","13357","5584"],"Reactome":["194688","425978","193465","374900","74722","425999","428040","163953","372511","2000349","70106","1470067","113529","425969","428548","156540","1614597","351626","427899"],"CASID":["12408-02-5"],"SEED":["cpd00067"],"CAS":["12408-02-5"],"PUBCHEM ID":["3380"],"UPA":["UPC00080"],"BRENDA":["BG79440"],"map_info":{"display_name":"H","hidden":true},"BioPath":["Proton"],"KEGG":"C00080"}},{"name":"L-Malate","id":"mal__L_c","compartment":"c","charge":-2,"formula":"C4H4O5","notes":{"MetaCyc":"MAL","PUBCHEM ID":["3449"],"CAS":["97-67-6"],"CASID":["97-67-6"],"map_info":{"x":147.25266608917624,"display_name":"MAL","y":521.7750406278898},"KEGG":"C00149"}},{"name":"L-Malate","id":"mal__L_e","compartment":"e","charge":-2,"formula":"C4H4O5","notes":{"MetaCyc":"MAL","PUBCHEM ID":["3449"],"CAS":["97-67-6"],"CASID":["97-67-6"],"map_info":{"display_name":"MAL","hidden":true},"KEGG":"C00149"}},{"name":"Nicotinamide adenine dinucleotide","id":"nad_c","compartment":"c","charge":-1,"formula":"C21H26N7O14P2","notes":{"MetaCyc":"NAD","ChEBI":["21901","7422","44214","15846","13394","13393","44215","13389","57540","44281"],"Reactome":["192307","29360","427523","194653","113526"],"CASID":["53-84-9"],"HMDB":["HMDB00902"],"SEED":["cpd00003"],"CAS":["53-84-9"],"PUBCHEM ID":["3305"],"UPA":["UPC00003"],"BRENDA":["BG11259"],"map_info":{"display_name":"NAD","hidden":true},"BioPath":["NAD"],"KEGG":"C00003"}},{"name":"Nicotinamide adenine dinucleotide - reduced","id":"nadh_c","compartment":"c","charge":-2,"formula":"C21H27N7O14P2","notes":{"MetaCyc":"NADH","ChEBI":["13395","21902","16908","7423","44216","57945","13396"],"Reactome":["192305","73473","194697","29362"],"CASID":["58-68-4"],"HMDB":["HMDB01487"],"SEED":["cpd00004"],"CAS":["58-68-4"],"PUBCHEM ID":["3306"],"UPA":["UPC00004"],"BRENDA":["BG11384"],"map_info":{"color":"#b5cf6b","display_name":"NADH","hidden":true},"BioPath":["NADH"],"KEGG":"C00004"}},{"name":"Nicotinamide adenine dinucleotide phosphate","id":"nadp_c","compartment":"c","charge":-3,"formula":"C21H25N7O17P3","notes":{"MetaCyc":"NADP","ChEBI":["7424","13398","13397","13390","25524","25523","44405","44409","18009","58349","21903"],"Reactome":["29366","2000348","113563","113564","389556","428218","351628","194668","517495"],"CASID":["53-59-8"],"HMDB":["HMDB00217"],"SEED":["cpd00006"],"CAS":["53-59-8"],"PUBCHEM ID":["3308"],"UPA":["UPC00006"],"BRENDA":["BG48210"],"map_info":{"display_name":"NADP","hidden":true},"BioPath":["NADP"],"KEGG":"C00006"}},{"name":"Nicotinamide adenine dinucleotide phosphate - reduced","id":"nadph_c","compartment":"c","charge":-4,"formula":"C21H26N7O17P3","notes":{"MetaCyc":"NADPH","ChEBI":["13400","16474","7425","13399","13392","57783","21904","44286"],"Reactome":["2000347","29364","428206","113602","113600","113601","194725","517496","351627"],"CASID":["2646-71-1"],"HMDB":["HMDB00799","HMDB06341","HMDB00221"],"SEED":["cpd00005"],"CAS":["2646-71-1"],"PUBCHEM ID":["3307"],"UPA":["UPC00005"],"BRENDA":["BG48213"],"map_info":{"color":"#8ca252","display_name":"NADPH","hidden":true},"BioPath":["NADPH"],"KEGG":"C00005"}},{"name":"O2","id":"o2_c","compartment":"c","charge":0,"formula":"O2","notes":{"MetaCyc":"OXYGEN-MOLECULE","ChEBI":["44742","27140","15379","25366","26689","30491","13416","29793","23833","7860","10745"],"Reactome":["113534","29368","113535","1236709","113533","189461","113685","352327","351593"],"CASID":["7782-44-7"],"HMDB":["HMDB01377"],"SEED":["cpd00532"],"CAS":["7782-44-7"],"PUBCHEM ID":["3309"],"UPA":["UPC00007"],"BRENDA":["BG36249"],"map_info":{"display_name":"O2","hidden":true},"BioPath":["Oxygen"],"KEGG":"C00007"}},{"name":"O2","id":"o2_e","compartment":"e","charge":0,"formula":"O2","notes":{"MetaCyc":"OXYGEN-MOLECULE","ChEBI":["44742","27140","15379","25366","26689","30491","13416","29793","23833","7860","10745"],"Reactome":["113534","29368","113535","1236709","113533","189461","113685","352327","351593"],"CASID":["7782-44-7"],"HMDB":["HMDB01377"],"SEED":["cpd00532"],"CAS":["7782-44-7"],"PUBCHEM ID":["3309"],"UPA":["UPC00007"],"BRENDA":["BG36249"],"map_info":{"display_name":"O2","hidden":true},"BioPath":["Oxygen"],"KEGG":"C00007"}},{"name":"Oxaloacetate","id":"oaa_c","compartment":"c","charge":-2,"formula":"C4H2O5","notes":{"MetaCyc":"OXALACETIC_ACID","ChEBI":["23911","23910","12810","10547","16452","17479","30744","7812","19638","25734","25731","12820","1158","14703","28394","24958","24959"],"Reactome":["76213","113587"],"CASID":["328-42-7"],"HMDB":["HMDB00223"],"SEED":["cpd00032"],"CAS":["328-42-7"],"PUBCHEM ID":["3338"],"UPA":["UPC00036"],"BRENDA":["BG19269","BG19271"],"map_info":{"x":194.71811459453318,"display_name":"OAA","y":440.88467502945394},"BioPath":["Oxaloacetate"],"LIPIDMAPS":["LMFA01170061","LMFA01170120"],"KEGG":"C00036"}},{"name":"Phosphoenolpyruvate","id":"pep_c","compartment":"c","charge":-3,"formula":"C3H2O6P","notes":{"MetaCyc":"PHOSPHO-ENOL-PYRUVATE","ChEBI":["44897","44894","14812","8147","26055","26054","58702","18021"],"Reactome":["29492","372364"],"CASID":["138-08-9"],"HMDB":["HMDB00263"],"SEED":["cpd00061"],"CAS":["138-08-9"],"PUBCHEM ID":["3374"],"UPA":["UPC00074"],"BRENDA":["BG17779"],"map_info":{"x":251.87819507727542,"display_name":"PEP","y":338.4645607084292},"BioPath":["Phosphoenolpyruvate"],"KEGG":"PHOSPHO-ENOL-PYRUVATE"}},{"name":"Phosphate","id":"pi_c","compartment":"c","charge":-2,"formula":"HO4P","notes":{"MetaCyc":"Pi","ChEBI":["37583","7793","37585","34683","14791","34855","29137","29139","63036","26020","39739","32597","32596","43474","63051","43470","9679","35433","4496","45024","18367","26078","39745","24838"],"Reactome":["947590","109277","113548","2255331","29372","113550","113551"],"CASID":["14265-44-2"],"HMDB":["HMDB02142"],"SEED":["cpd09464","cpd09463","cpd00009"],"CAS":["14265-44-2"],"PUBCHEM ID":["3311"],"UPA":["UPC00009"],"BRENDA":["BG92038"],"map_info":{"display_name":"PI","hidden":true},"BioPath":["Phosphate","Phosphate_(protonated)"],"KEGG":"C00009"}},{"name":"Phosphate","id":"pi_e","compartment":"e","charge":-2,"formula":"HO4P","notes":{"MetaCyc":"Pi","ChEBI":["37583","7793","37585","34683","14791","34855","29137","29139","63036","26020","39739","32597","32596","43474","63051","43470","9679","35433","4496","45024","18367","26078","39745","24838"],"Reactome":["947590","109277","113548","2255331","29372","113550","113551"],"CASID":["14265-44-2"],"HMDB":["HMDB02142"],"SEED":["cpd09464","cpd09463","cpd00009"],"CAS":["14265-44-2"],"PUBCHEM ID":["3311"],"UPA":["UPC00009"],"BRENDA":["BG92038"],"map_info":{"display_name":"PI","hidden":true},"BioPath":["Phosphate","Phosphate_(protonated)"],"KEGG":"C00009"}},{"name":"Pyruvate","id":"pyr_c","compartment":"c","charge":-1,"formula":"C3H3O3","notes":{"MetaCyc":"PYRUVATE","ChEBI":["15361","14987","8685","32816","45253","26466","26462"],"Reactome":["113557","389680","29398"],"CASID":["127-17-3"],"HMDB":["HMDB00243"],"SEED":["cpd00020"],"CAS":["127-17-3"],"PUBCHEM ID":["3324"],"UPA":["UPC00022"],"BRENDA":["BG17694"],"map_info":{"x":312.26594527039765,"display_name":"PYR","y":436.20477823325166},"BioPath":["Pyruvate"],"LIPIDMAPS":["LMFA01060077"],"KEGG":"C00022"}},{"name":"Pyruvate","id":"pyr_e","compartment":"e","charge":-1,"formula":"C3H3O3","notes":{"MetaCyc":"PYRUVATE","ChEBI":["15361","14987","8685","32816","45253","26466","26462"],"Reactome":["113557","389680","29398"],"CASID":["127-17-3"],"HMDB":["HMDB00243"],"SEED":["cpd00020"],"CAS":["127-17-3"],"PUBCHEM ID":["3324"],"UPA":["UPC00022"],"BRENDA":["BG17694"],"map_info":{"display_name":"PYR","hidden":true},"BioPath":["Pyruvate"],"LIPIDMAPS":["LMFA01060077"],"KEGG":"C00022"}},{"name":"Ubiquinone-8","id":"q8_c","compartment":"c","charge":0,"formula":"C49H74O4","notes":{"SEED":["cpd15560"],"MetaCyc":"UBIQUINONE-8","PUBCHEM ID":["3689"],"ChEBI":["61683"],"CAS":["1339-63-5"],"BRENDA":["BG18990"],"map_info":{"color":"#b5cf6b","display_name":"Q8","hidden":true},"CASID":["1339-63-5"],"LIPIDMAPS":["LMPR02010005"],"KEGG":"C00399"}},{"name":"Ubiquinol-8","id":"q8h2_c","compartment":"c","charge":0,"formula":"C49H76O4","notes":{"SEED":["cpd15561"],"MetaCyc":"CPD-9956","PUBCHEM ID":["3680"],"ChEBI":["61682"],"BRENDA":["BG79801"],"map_info":{"color":"#b5cf6b","display_name":"Q8H2","hidden":true},"KEGG":"C00390"}},{"name":"Alpha-D-Ribose 5-phosphate","id":"r5p_c","compartment":"c","charge":-2,"formula":"C5H9O8P","notes":{"MetaCyc":"RIBOSE-5P","ChEBI":["12331","52742","10270","22413","18189"],"CAS":["4300-28-1"],"CASID":["4300-28-1"],"HMDB":["HMDB00618","HMDB01548","HMDB02033","HMDB02694"],"SEED":["cpd00101"],"PUBCHEM ID":["3417"],"UPA":["UPC00117"],"BRENDA":["BG81798","BG34575"],"map_info":{"x":252.27219055767722,"display_name":"R5P","y":84.61556835464663},"BioPath":["alpha-D-Ribose_5-phosphate"],"KEGG":"C00117"}},{"name":"D-Ribulose 5-phosphate","id":"ru5p__D_c","compartment":"c","charge":-2,"formula":"C5H9O8P","notes":{"MetaCyc":"RIBULOSE-5P","PUBCHEM ID":["3499"],"CAS":["4151-19-3"],"CASID":["4151-19-3"],"map_info":{"x":306.9904123614967,"display_name":"RU5P","y":53.89042223441865},"KEGG":"C00199"}},{"name":"Sedoheptulose 7-phosphate","id":"s7p_c","compartment":"c","charge":-2,"formula":"C7H13O10P","notes":{"SEED":["cpd00238"],"Reactome":["29882"],"MetaCyc":"D-SEDOHEPTULOSE-7-P","PUBCHEM ID":["3576"],"ChEBI":["26621","57483","9083","15721","4244","15074","15073"],"BioPath":["D-Sedoheptulose_7-phosphate"],"UPA":["UPC05382"],"CASID":["583-08-4"],"map_info":{"x":197.90319841866625,"display_name":"S7P","y":216.66892207293898},"BRENDA":["BG24563"],"KEGG":"C05382"}},{"name":"Succinate","id":"succ_c","compartment":"c","charge":-2,"formula":"C4H4O4","notes":{"MetaCyc":"SUC","ChEBI":["22941","22943","26807","26803","30031","9304","15125","45639","15741","30779"],"Reactome":["113536","433123","29434","389583","1650769","159939"],"CASID":["110-15-6"],"HMDB":["HMDB00254"],"SEED":["cpd00036"],"CAS":["110-15-6"],"PUBCHEM ID":["3344"],"UPA":["UPC00042"],"BRENDA":["BG19270"],"map_info":{"x":76.0034965285222,"display_name":"SUCC","y":646.9972070225022},"BioPath":["Succinate"],"LIPIDMAPS":["LMFA01170043"],"KEGG":"C00042"}},{"name":"Succinate","id":"succ_e","compartment":"e","charge":-2,"formula":"C4H4O4","notes":{"MetaCyc":"SUC","ChEBI":["22941","22943","26807","26803","30031","9304","15125","45639","15741","30779"],"Reactome":["113536","433123","29434","389583","1650769","159939"],"CASID":["110-15-6"],"HMDB":["HMDB00254"],"SEED":["cpd00036"],"CAS":["110-15-6"],"PUBCHEM ID":["3344"],"UPA":["UPC00042"],"BRENDA":["BG19270"],"map_info":{"display_name":"SUCC","hidden":true},"BioPath":["Succinate"],"LIPIDMAPS":["LMFA01170043"],"KEGG":"C00042"}},{"name":"D-Xylulose 5-phosphate","id":"xu5p__D_c","compartment":"c","charge":-2,"formula":"C5H9O8P","notes":{"MetaCyc":"XYLULOSE-5-PHOSPHATE","PUBCHEM ID":["3530"],"map_info":{"x":328.8045419120096,"display_name":"XU5P","y":149.42807376203066},"KEGG":"C00231"}},{"name":"H2","id":"h2_e","compartment":"e","charge":0,"formula":"H2","notes":{"map_info":{"display_name":"H2","hidden":true}}},{"name":"D-Glucose","id":"glc__D_c","compartment":"c","charge":0,"formula":"C6H12O6","notes":{"map_info":{"display_name":"GLC","hidden":true}}},{"name":"D-Xylose","id":"xyl__D_e","compartment":"e","charge":0,"formula":"C5H10O5","notes":{"map_info":{"display_name":"XYL","hidden":true}}},{"name":"D-Xylose","id":"xyl__D_c","compartment":"c","charge":0,"formula":"C5H10O5","notes":{"map_info":{"x":430.8162518021068,"display_name":"XYL","y":86.69573824181867}}},{"name":"D-Xylulose","id":"xylu__D_c","compartment":"c","charge":0,"formula":"C5H10O5","notes":{"map_info":{"x":385.69889867167296,"display_name":"XU","y":115.60941469730261}}},{"name":"D Arabinose C5H10O5","id":"arab__D_e","compartment":"e","charge":0,"formula":"C5H10O5","notes":{"map_info":{"display_name":"ARAB","hidden":true}}},{"name":"D Arabinose C5H10O5","id":"arab__D_c","compartment":"c","charge":0,"formula":"C5H10O5","notes":{"map_info":{"x":431.41646996280593,"display_name":"ARAB","y":-23.905634013546177,"hidden":true}}},{"name":"D-Ribulose","id":"rbl__D_c","compartment":"c","charge":0,"formula":"C5H10O5","notes":{"map_info":{"x":387.07235689544444,"display_name":"RIB","y":-1.7130130677534225,"hidden":true}}},{"name":"D-Galactose","id":"gal_e","compartment":"e","charge":0,"formula":"C6H12O6","notes":{"map_info":{"display_name":"GAL","hidden":true}}},{"name":"D-Galactose","id":"gal_c","compartment":"c","charge":0,"formula":"C6H12O6","notes":{"map_info":{"x":5.135350485571223,"display_name":"GAL","y":79.88406774077112,"hidden":true}}},{"name":"Alpha-D-Galactose 1-phosphate","id":"gal1p_c","compartment":"c","charge":-2,"formula":"C6H11O9P","notes":{"map_info":{"x":10.916224067944043,"display_name":"GAL1P","y":41.453644652449725,"hidden":true}}},{"name":"UDPglucose","id":"udpg_c","compartment":"c","charge":-2,"formula":"C15H22N2O17P2","notes":{"map_info":{"display_name":"UDP_GLUCOSE","hidden":true}}},{"name":"UDPgalactose","id":"udpgal_c","compartment":"c","charge":-2,"formula":"C15H22N2O17P2","notes":{"map_info":{"display_name":"UDP_GALACTOSE","hidden":true}}},{"name":"D-Glucose 1-phosphate","id":"g1p_c","compartment":"c","charge":-2,"formula":"C6H11O9P","notes":{"map_info":{"x":44.48121996313575,"display_name":"G1P","y":11.753846178531717,"hidden":true}}},{"name":"","id":"biomass","compartment":"e","formula":"C24.967H49.934O12.4835","notes":{"map_info":{"display_name":"BIOMA","hidden":true}}},{"name":"atp maintenance","id":"atpm","compartment":"","formula":"","notes":{"map_info":{"display_name":"AT","hidden":true}}},{"name":"D-Lactate","id":"lac__D_c","compartment":"c","charge":-1,"formula":"C3H5O3","notes":{"MetaCyc":"D-LACTATE","PUBCHEM ID":["3555"],"CAS":["10326-41-7"],"CASID":["10326-41-7"],"map_info":{"x":424.23354197668004,"display_name":"LAC","y":381.0789779306125},"KEGG":"C00256"}},{"name":"D-Lactate","id":"lac__D_e","compartment":"e","charge":-1,"formula":"C3H5O3","notes":{"MetaCyc":"D-LACTATE","PUBCHEM ID":["3555"],"CAS":["10326-41-7"],"CASID":["10326-41-7"],"map_info":{"display_name":"LAC","hidden":true},"KEGG":"C00256"}}],"genes":[{"name":"Asuc_0591","id":"Asuc_0591","notes":{"map_info":{}}},{"name":"Asuc_1661","id":"Asuc_1661","notes":{"map_info":{}}},{"name":"Asuc_0185","id":"Asuc_0185","notes":{"map_info":{}}},{"name":"fabG","id":"Asuc_1819","notes":{"map_info":{}}},{"name":"Asuc_0403","id":"Asuc_0403","notes":{"map_info":{}}},{"name":"Asuc_0326","id":"Asuc_0326","notes":{"map_info":{}}},{"name":"Asuc_0328","id":"Asuc_0328","notes":{"map_info":{}}},{"name":"fabG","id":"Asuc_2051","notes":{"map_info":{}}},{"name":"Asuc_0536","id":"Asuc_0536","notes":{"map_info":{}}},{"name":"fabG","id":"Asuc_0394","notes":{"map_info":{}}},{"name":"Asuc_1073","id":"Asuc_1073","notes":{"map_info":{}}},{"name":"Asuc_1813","id":"Asuc_1813","notes":{"map_info":{}}},{"name":"Asuc_1814","id":"Asuc_1814","notes":{"map_info":{}}},{"name":"fabG","id":"Asuc_0956","notes":{"map_info":{}}},{"name":"Asuc_0227","id":"Asuc_0227","notes":{"map_info":{}}},{"name":"Asuc_1027","id":"Asuc_1027","notes":{"map_info":{}}},{"name":"Asuc_0232","id":"Asuc_0232","notes":{"map_info":{}}},{"name":"Asuc_1612","id":"Asuc_1612","notes":{"map_info":{}}},{"name":"Asuc_0669","id":"Asuc_0669","notes":{"map_info":{}}},{"name":"fabG","id":"Asuc_1021","notes":{"map_info":{}}},{"name":"fabG","id":"Asuc_1022","notes":{"map_info":{}}},{"name":"fabG","id":"Asuc_0942","notes":{"map_info":{}}},{"name":"Asuc_0944","id":"Asuc_0944","notes":{"map_info":{}}},{"name":"fabG","id":"Asuc_0943","notes":{"map_info":{}}},{"name":"Asuc_0687","id":"Asuc_0687","notes":{"map_info":{}}},{"name":"Asuc_0207","id":"Asuc_0207","notes":{"map_info":{}}},{"name":"fabG","id":"Asuc_1425","notes":{"map_info":{}}},{"name":"fabG","id":"Asuc_0535","notes":{"map_info":{}}},{"name":"Asuc_0228","id":"Asuc_0228","notes":{"map_info":{}}},{"name":"fabG","id":"Asuc_0572","notes":{"map_info":{}}},{"name":"Asuc_1383","id":"Asuc_1383","notes":{"map_info":{}}},{"name":"Asuc_0221","id":"Asuc_0221","notes":{"map_info":{}}},{"name":"Asuc_1662","id":"Asuc_1662","notes":{"map_info":{}}},{"name":"Asuc_1171","id":"Asuc_1171","notes":{"map_info":{}}},{"name":"Asuc_0218","id":"Asuc_0218","notes":{"map_info":{}}},{"name":"Asuc_1580","id":"Asuc_1580","notes":{"map_info":{}}},{"name":"Asuc_1597","id":"Asuc_1597","notes":{"map_info":{}}},{"name":"Asuc_1870","id":"Asuc_1870","notes":{"map_info":{}}},{"name":"Asuc_0582","id":"Asuc_0582","notes":{"map_info":{}}},{"name":"Asuc_0170","id":"Asuc_0170","notes":{"map_info":{}}},{"name":"Asuc_0171","id":"Asuc_0171","notes":{"map_info":{}}},{"name":"Asuc_0265","id":"Asuc_0265","notes":{"map_info":{}}},{"name":"fabG","id":"Asuc_0677","notes":{"map_info":{}}},{"name":"Asuc_1575","id":"Asuc_1575","notes":{"map_info":{}}},{"name":"Asuc_1601","id":"Asuc_1601","notes":{"map_info":{}}},{"name":"Asuc_0301","id":"Asuc_0301","notes":{"map_info":{}}},{"name":"Asuc_0302","id":"Asuc_0302","notes":{"map_info":{}}},{"name":"Asuc_0303","id":"Asuc_0303","notes":{"map_info":{}}},{"name":"Asuc_1264","id":"Asuc_1264","notes":{"map_info":{}}},{"name":"Asuc_1265","id":"Asuc_1265","notes":{"map_info":{}}},{"name":"Asuc_1704","id":"Asuc_1704","notes":{"map_info":{}}},{"name":"ldhA","id":"b1380","notes":{"map_info":{}}},{"name":"dld","id":"b2133","notes":{"map_info":{}}},{"name":"lldP","id":"b3603","notes":{"map_info":{}}},{"name":"glcA","id":"b2975","notes":{"map_info":{}}},{"name":"b1300","id":"b1300"}],"id":"asuc_v1","name":"A. Succinogenes CCM Model","compartments":{},"notes":{"map_info":{}},"version":1} -------------------------------------------------------------------------------- /d3flux/examples/asuc/full-map-render.svg: -------------------------------------------------------------------------------- 1 | 13DPG2PG3PG6PGCACACALDACCOAACTPCO2DHAPE4PETOHF6PFDPFORFUMG3PG6PGLCMALOAAPEPPYRR5PRU5PS7PSUCCXU5PXYLXULACNADHATPNADHQ8Q8H2NADHPYRPEPNADPHCO2NADHNADPHCO2CO2NADHATPATPCO2ATPATPCO2NADHATPNADHNADPHNADH --------------------------------------------------------------------------------