Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "cells": [
- {
- "metadata": {},
- "cell_type": "markdown",
- "source": "# SBML to Boltzmann"
- },
- {
- "metadata": {
- "collapsed": true,
- "trusted": true
- },
- "cell_type": "code",
- "source": "import re\nclass sbml2boltzmann:\n def __init__( self, sbml, deltag ):\n self.sbml = sbml\n self.deltag = deltag\n self.ordRE = re.compile('__([0-9]+)__')\n def repl( self, matchobj ):\n return chr(int(matchobj.group(1)))\n \n def unmunge( self, sbmlid, prefix='M_' ):\n return self.ordRE.sub( self.repl, sbmlid[len(prefix):])\n \n def get_met_comp( self, speciesId ):\n s = self.sbml.getSpecies(speciesId)\n if s.getCompartment() == 'CCO__45__CYTOSOL':\n return self.unmunge( s.getId() + ':' + s.getCompartment() )\n else:\n return self.unmunge( s.getId()).replace('[',':').rstrip(']')\n \n def write_compartment( self, filename ):\n with open(filename, 'w') as out:\n i = 1\n for comp in self.sbml.getListOfCompartments():\n out.write('{}\\t{}\\tliters\\t0\\tV\\n'.format(self.unmunge(comp.getId()), float(i)))\n i +=1\n def write_concentrations( self, filename, volume=1.0e-15, conc_units=1.0e-9, default_conc=1.1111111e-01):\n with open(filename, 'w') as out:\n out.write('VOLUME\\t{}\\n'.format(volume))\n out.write('CONC_UNITS\\t{}\\n'.format(conc_units))\n for species in self.sbml.getListOfSpecies():\n if species.getBoundaryCondition():\n boundary = 'F'\n else:\n boundary = 'V'\n out.write('{}\\t{}\\t{}\\n'.format(self.get_met_comp(species.getId()), default_conc, boundary))\n \n def getDeltaG( self, rxnName ):\n if rxnName in self.deltag:\n return self.deltag[rxnName]\n else:\n return 0.0\n def write_reactions( self, filename):\n with open(filename, 'w') as out:\n for rxn in self.sbml.getListOfReactions():\n out.write('REACTION\\t{}\\n'.format(rxn.getName()))\n out.write('LEFT\\t{}\\n'.format(' + '.join([self.get_met_comp(sr.getSpecies()) \n for sr in rxn.getListOfReactants()])))\n out.write('RIGHT\\t{}\\n'.format(' + '.join([self.get_met_comp(sr.getSpecies()) \n for sr in rxn.getListOfProducts()])))\n out.write('DGZERO\\t{}\\n'.format(self.getDeltaG(rxn.getName())))\n out.write('DGZERO_UNITS\\t{}\\n'.format('KCAL/MOL'))\n out.write('//\\n')\n \ns2b = sbml2boltzmann(m, deltag['DeltaG(pH7.3)'].to_dict())\ns2b.get_met_comp('M_CPD__45__548')\ns2b.write_compartment('nc12.cmpts')\ns2b.write_concentrations('nc12.concs.in')\ns2b.write_reactions('nc12.rxns.dat')",
- "execution_count": null,
- "outputs": []
- },
- {
- "metadata": {},
- "cell_type": "markdown",
- "source": "# Boltzmann to COBRA"
- },
- {
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-01-03T20:39:33.081966Z",
- "start_time": "2018-01-03T20:39:32.857510Z"
- },
- "trusted": true,
- "collapsed": true
- },
- "cell_type": "code",
- "source": "import cobra, os,re\nfrom fractions import Fraction\ndef char2ord( matchobj ):\n return '__{}__'.format( ord(matchobj.group(0)) )\nclass boltzmann2cobra:\n def __init__( self ):\n self.model = cobra.Model()\n self.metabolites = set()\n \n \n def munge( self, Id, prefix='M_', regexp=r'[^A-Za-z0-9_]' ):\n return prefix + re.sub(regexp, char2ord, Id )\n \n def dat2model( self, datfile ):\n attributes = ['REACTION','LEFT','RIGHT','LEFT_COMPARTMENT','RIGHT_COMPARTMENT','ENZYME_LEVEL','NREGULATION','COMMENT', 'COMMENTS','PATHWAY']\n with open(datfile) as dat:\n modelname = os.path.splitext(os.path.basename(datfile))[0]\n self.model.id = self.munge(modelname)\n self.model.name = modelname\n rxns = []\n rxn = {}\n for line in dat:\n if line.strip() != '//' and line[0] != '#':\n cols = line.strip().split('\\t')\n if len(cols) >= 2:\n attribute, value = cols[0].strip(), cols[1].strip()\n if attribute in attributes:\n if attribute in rxn:\n rxn[attribute] += value\n else:\n rxn[attribute] = value\n elif cols[0] == 'COMMENT':\n pass\n else:\n print(line)\n print(rxn)\n elif line.strip() == '//':\n if 'REACTION' not in rxn:\n print(rxn)\n reaction = self.create_reaction( rxn )\n rxns.append(reaction)\n rxn = {}\n return self.model\n def parse_mixture( self, rxn ):\n pattern = re.compile(r'([0-9./]+\\s+)?(.*)')\n parts = {}\n for side in ['LEFT','RIGHT']:\n compartment = rxn['{}_COMPARTMENT'.format( side )]\n for part in rxn[side].split(' + '):\n m = pattern.search(part.strip())\n if m:\n if not m.group(1) or m.group(1) == '':\n stoichiometry = 1\n elif '.' in m.group(1):\n stoichiometry = float(m.group(1).strip())\n else:\n stoichiometry = int(m.group(1).strip())\n if side=='LEFT':\n stoichiometry = -stoichiometry\n species = m.group(2).strip()\n met = cobra.Metabolite(\"{}:{}\".format(species, compartment),name=species, compartment=compartment)\n if met not in self.model.metabolites:\n self.model.add_metabolites( [met] )\n parts[met] = stoichiometry\n return parts\n\n def create_reaction( self, rxn, prefix='', regexp='~'):\n reaction = cobra.Reaction()\n reaction.id = self.munge(rxn['REACTION'], 'R_')\n reaction.name = rxn['REACTION'] \n self.model.add_reactions([reaction])\n reaction.add_metabolites( self.parse_mixture( rxn ))\n return reaction\n",
- "execution_count": 100,
- "outputs": []
- },
- {
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-01-03T21:07:26.572784Z",
- "start_time": "2018-01-03T21:07:26.506942Z"
- },
- "scrolled": false,
- "trusted": true,
- "collapsed": true
- },
- "cell_type": "code",
- "source": "b2c = boltzmann2cobra()\nmodel = b2c.dat2model('neurospora_pentose_phos.glycolysis.tca.2.dat')\ncobra.io.save_json_model(model, 'neurospora_pentose_phos.glycolysis.tca.2.json',sort=True,pretty=True)",
- "execution_count": 102,
- "outputs": []
- },
- {
- "metadata": {
- "ExecuteTime": {
- "end_time": "2018-01-03T01:02:46.237996Z",
- "start_time": "2018-01-03T01:02:46.078149Z"
- },
- "trusted": true
- },
- "cell_type": "code",
- "source": "!head neurospora_pentose_phos.glycolysis.tca.2.dat",
- "execution_count": 9,
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": "REACTION ME1m\r\nLEFT\t(S)-MALATE + NAD+ \r\nRIGHT\tpyruvate + NADH + CO2\r\nLEFT_COMPARTMENT MITOCHONDRIA\r\nRIGHT_COMPARTMENT MITOCHONDRIA\r\nENZYME_LEVEL\t0.0\r\n//\r\nREACTION ME2m\r\nLEFT (S)-MALATE + NADP+\r\nRIGHT PYRUVATE + NADPH + CO2\r\n"
- }
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "name": "python3",
- "display_name": "Python 3",
- "language": "python"
- },
- "language_info": {
- "name": "python",
- "version": "3.6.1",
- "mimetype": "text/x-python",
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "pygments_lexer": "ipython3",
- "nbconvert_exporter": "python",
- "file_extension": ".py"
- },
- "toc": {
- "threshold": 4,
- "number_sections": true,
- "toc_cell": false,
- "toc_window_display": false,
- "toc_section_display": "block",
- "sideBar": true,
- "navigate_menu": true,
- "moveMenuLeft": true,
- "widenNotebook": false,
- "colors": {
- "hover_highlight": "#DAA520",
- "selected_highlight": "#FFD700",
- "running_highlight": "#FF0000",
- "wrapper_background": "#FFFFFF",
- "sidebar_border": "#EEEEEE",
- "navigate_text": "#333333",
- "navigate_num": "#000000"
- },
- "nav_menu": {
- "height": "30px",
- "width": "252px"
- }
- },
- "varInspector": {
- "window_display": false,
- "cols": {
- "lenName": 16,
- "lenType": 16,
- "lenVar": 40
- },
- "kernels_config": {
- "python": {
- "library": "var_list.py",
- "delete_cmd_prefix": "del ",
- "delete_cmd_postfix": "",
- "varRefreshCmd": "print(var_dic_list())"
- },
- "r": {
- "library": "var_list.r",
- "delete_cmd_prefix": "rm(",
- "delete_cmd_postfix": ") ",
- "varRefreshCmd": "cat(var_dic_list()) "
- }
- },
- "types_to_exclude": [
- "module",
- "function",
- "builtin_function_or_method",
- "instance",
- "_Feature"
- ]
- },
- "gist": {
- "id": "",
- "data": {
- "description": "Neurospora/neurospora_no_regulation/MENTOS_comparison_with_boltzmann_on_neurospora.ipynb",
- "public": true
- }
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
- }
Add Comment
Please, Sign In to add comment