Skip to content

Commit cb96d32

Browse files
committed
Merge branch 'main' of github.com:ModelSEED/ModelSEEDpy into main
2 parents 7f2f341 + 154b0e0 commit cb96d32

File tree

8 files changed

+211
-5
lines changed

8 files changed

+211
-5
lines changed

examples/MetaboFBAExample.ipynb

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "code",
5+
"execution_count": 1,
6+
"metadata": {},
7+
"outputs": [
8+
{
9+
"name": "stdout",
10+
"output_type": "stream",
11+
"text": [
12+
"cobrakbase 0.2.7\n"
13+
]
14+
}
15+
],
16+
"source": [
17+
"import sys\n",
18+
"import cobra\n",
19+
"import cplex\n",
20+
"import cobrakbase\n",
21+
"#Put the path to ModelSEEDpy on your machine here\n",
22+
"sys.path.append(\"/Users/chenry/code/ModelSEEDpy\")\n",
23+
"#import modelseedpy.fbapkg\n",
24+
"from modelseedpy import GapfillingPkg, KBaseMediaPkg, MetaboFBAPkg\n",
25+
"from modelseedpy import FBAHelper\n"
26+
]
27+
},
28+
{
29+
"cell_type": "code",
30+
"execution_count": 1,
31+
"metadata": {},
32+
"outputs": [
33+
{
34+
"ename": "SyntaxError",
35+
"evalue": "invalid syntax (<ipython-input-1-9c96e9aed238>, line 18)",
36+
"output_type": "error",
37+
"traceback": [
38+
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-1-9c96e9aed238>\"\u001b[0;36m, line \u001b[0;32m18\u001b[0m\n\u001b[0;31m mfp.build_package({\"peaks\":[{\"id\":\"peak.1\",\"inchi\":,\"set_objective\":1})\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
39+
]
40+
}
41+
],
42+
"source": [
43+
"kbase_api = cobrakbase.KBaseAPI()\n",
44+
"model = kbase_api.get_from_ws(\"test_model\",18528)\n",
45+
"pickaxe_model = kbase_api.get_from_ws(\"MMSyn3Expansion\",29280)\n",
46+
"model.solver = 'optlang-cplex'\n",
47+
"template = kbase_api.get_from_ws(\"GramNegModelTemplateV3\",\"NewKBaseModelTemplates\")\n",
48+
"media = kbase_api.get_from_ws(\"Carbon-D-Glucose\",\"KBaseMedia\")\n",
49+
"metabolome = kbase_api.get_from_ws(\"JCVI_Syn3_metabolomics\",29280)\n",
50+
"FBAHelper.set_objective_from_target_reaction(model,\"bio1\")\n",
51+
"copy_model = cobra.io.json.from_json(cobra.io.json.to_json(model))\n",
52+
"gfp = GapfillingPkg(copy_model)\n",
53+
"gfp.build_package({\n",
54+
" \"default_gapfill_models\":[pickaxe_model]\n",
55+
" \"default_gapfill_templates\":[template],\n",
56+
" \"gapfill_all_indecies_with_default_templates\":1,\n",
57+
" \"minimum_obj\":0.01,\n",
58+
" \"set_objective\":0\n",
59+
"})\n",
60+
"kmp = KBaseMediaPkg(copy_model)\n",
61+
"kmp.build_package(media)\n",
62+
"mfp = MetaboFBAPkg(copy_model)\n",
63+
"mfp.build_package({\"peaks\":metabolome.build_peaks_data(),\"set_objective\":1})\n",
64+
"sol=model.optimize()\n",
65+
"with open('MetaboFBA.lp', 'w') as out:\n",
66+
" out.write(str(model.solver))\n",
67+
"#Next minimize active reactions\n",
68+
"model.summary()\n",
69+
"\n",
70+
"cobra.io.save_json_model(model,filename)"
71+
]
72+
},
73+
{
74+
"cell_type": "code",
75+
"execution_count": null,
76+
"metadata": {},
77+
"outputs": [],
78+
"source": []
79+
}
80+
],
81+
"metadata": {
82+
"kernelspec": {
83+
"display_name": "Python 3",
84+
"language": "python",
85+
"name": "python3"
86+
},
87+
"language_info": {
88+
"codemirror_mode": {
89+
"name": "ipython",
90+
"version": 3
91+
},
92+
"file_extension": ".py",
93+
"mimetype": "text/x-python",
94+
"name": "python",
95+
"nbconvert_exporter": "python",
96+
"pygments_lexer": "ipython3",
97+
"version": "3.7.6"
98+
}
99+
},
100+
"nbformat": 4,
101+
"nbformat_minor": 4
102+
}

modelseedpy/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ def _warn_format(message, category, filename, lineno, file=None, line=None):
3434

3535
import modelseedpy
3636
from modelseedpy.core import (
37-
RastClient, MSGenome, MSBuilder, FBAHelper,MSEditorAPI
37+
RastClient, MSGenome, MSBuilder, FBAHelper, MSEditorAPI
3838
)
3939
from modelseedpy.fbapkg import (
4040
BaseFBAPkg,RevBinPkg,ReactionUsePkg,SimpleThermoPkg,TotalFluxPkg,ElementUptakePkg,BilevelPkg,
41-
CommKineticPkg,KBaseMediaPkg,FluxFittingPkg,ProteomeFittingPkg,GapfillingPkg
41+
CommKineticPkg,KBaseMediaPkg,FluxFittingPkg,ProteomeFittingPkg,GapfillingPkg,MetaboFBAPkg
4242
)
4343

4444
#If there are parallel modules these should be imported in parallel as shown here:

modelseedpy/core/mseditorapi.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class MSEditorAPI:
1717

1818
@staticmethod
1919
def remove_reactions(model,rxn_id_list = []):
20+
for rxnid in rxn_id_list:
21+
pass
2022
pass
2123

2224
@staticmethod
@@ -28,6 +30,7 @@ def edit_biomass_compound(model,biomass_id,cpd_id,new_coef,rescale = 1):
2830
pass
2931

3032
@staticmethod
33+
3134
def add_custom_reaction(model,rxn_id,MSEquation,gpr = None,genome = None):
3235
pass
3336

modelseedpy/fbapkg/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@
1313
from modelseedpy.fbapkg.kbasemediapkg import KBaseMediaPkg
1414
from modelseedpy.fbapkg.proteomefittingpkg import ProteomeFittingPkg
1515
from modelseedpy.fbapkg.fluxfittingpkg import FluxFittingPkg
16-
from modelseedpy.fbapkg.gapfillingpkg import GapfillingPkg
16+
from modelseedpy.fbapkg.gapfillingpkg import GapfillingPkg
17+
from modelseedpy.fbapkg.metabofbapkg import MetaboFBAPkg

modelseedpy/fbapkg/fullthermopkg.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# -*- coding: utf-8 -*-
2+
3+
from __future__ import absolute_import
4+
5+
import logging
6+
from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg
7+
from modelseedpy.fbapkg.revbinpkg import RevBinPkg
8+
9+
#Base class for FBA packages
10+
class FullThermoPkg(BaseFBAPkg):
11+
def __init__(self,model):
12+
BaseFBAPkg.__init__(self,model,"full thermo",{"logconc":"metabolite"},{"potentialc":"metabolite"})
13+
self.childpkgs["simple thermo"] = SimpleThermoPkg(model)
14+
15+
def build_package(self,parameters):
16+
self.validate_parameters(parameters,[],{
17+
"default_max_conc":20,#mM
18+
"default_min_conc":0.001,#mM
19+
"custom_concentration_constraints":{"cpd000027_e0":["10","10"]},
20+
"compartment_potential":{"c0":,}
21+
})
22+
#Extend the custom concentration for H+, CO2, O2
23+
self.childpkgs["simple thermo"].build_package(filter)
24+
for metabolite in self.model.metabolites:
25+
#Build concentration variable
26+
self.build_variable(metabolite)
27+
#Build the potential constraint
28+
self.build_constraint(reaction)
29+
30+
def build_variable(self,object):
31+
lb = self.parameters["default_max_conc"]
32+
if object.id in self.parameters["custom_concentration_constraints"]:
33+
lb = self.parameters["custom_concentration_constraints"][object.id]
34+
ub = ?
35+
return BaseFBAPkg.build_variable(self,"logconc",lb,ub,"continuous",object)
36+
37+
def build_constraint(self,object):
38+
#potential(i) (KJ/mol) = deltaG(i) (KJ/mol) + R * T(K) * lnconc(i) + charge(i) * compartment_potentil
39+
constant = ?
40+
coef = {?}
41+
return BaseFBAPkg.build_constraint(self,"thermo",constant,constant,coef,object)

modelseedpy/fbapkg/metabofbapkg.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# -*- coding: utf-8 -*-
2+
3+
from __future__ import absolute_import
4+
5+
import logging
6+
from modelseedpy.fbapkg.basefbapkg import BaseFBAPkg
7+
from modelseedpy.fbapkg.simplethermopkg import SimpleThermoPkg
8+
9+
#Base class for FBA packages
10+
class MetaboFBAPkg(BaseFBAPkg):
11+
def __init__(self,model):
12+
BaseFBAPkg.__init__(self,model,"metabo fba",{"met":"metabolite","pk":"string"},{"metc":"metabolite","pkc":"string"})
13+
self.childpkgs["simple thermo"] = SimpleThermoPkg(model)
14+
15+
def build_package(self,parameters):
16+
self.validate_parameters(parameters,["peaks"],{
17+
"set_objective":1,
18+
})
19+
self.childpkgs["simple thermo"].build_package()
20+
peak_hash = {}
21+
for peak_data in peaks:
22+
peak_hash[peak_data["id"]] = peak_data
23+
self.find_metabolites_matching_peak(peak_data)
24+
self.build_variable(peak_data,"pk")
25+
for met in peak_data["metabolites"]:
26+
self.build_variable(met,"met")
27+
self.build_constraint(met,"metc")
28+
self.build_constraint(peak_data,"pkc")
29+
if parameters["set_objective"] == 1:
30+
metabolite_objective = self.model.problem.Objective(
31+
Zero,
32+
direction="max")
33+
obj_coef = dict()
34+
for peak_id in self.variables["pk"]:
35+
if "wieght" in peak_hash[peak_id]:
36+
obj_coef[self.variables["pk"][peak_id]] = peak_hash[peak_id]["wieght"]
37+
else:
38+
obj_coef[self.variables["pk"][peak_id]] = 1
39+
self.model.objective = metabolite_objective
40+
metabolite_objective.set_linear_coefficients(obj_coef)
41+
42+
def build_variable(self,object,type):
43+
if type == "met":
44+
return BaseFBAPkg.build_variable(self,type,0,1,"continuous",object)
45+
elif type == "pk":
46+
return BaseFBAPkg.build_variable(self,type,0,1,"continuous",object["id"])
47+
48+
def build_constraint(self,object,type):
49+
#TODO: need to determine coefficients
50+
if type == "metc":
51+
return BaseFBAPkg.build_constraint(self,"metc",0,0,coef,object)
52+
elif type == "pkc":
53+
return BaseFBAPkg.build_constraint(self,"pkc",0,0,coef,object["id"])
54+
55+
def find_metabolites_matching_peak(self,data):
56+
#TODO: need to write this function

modelseedpy/fbapkg/revbinpkg.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,7 @@ def build_variable(self,object):
2121
return BaseFBAPkg.build_variable(self,"revbin",0,1,"binary",object)
2222

2323
def build_constraint(self,object):
24+
#-1000 * revbin(i) + forv(i) <= 0
2425
BaseFBAPkg.build_constraint(self,"revbinF",None,0,{self.variables["revbin"][object.id]:-1000,object.forward_variable:1},object)
26+
#1000 * revbin(i) + revv(i) <= 1000
2527
return BaseFBAPkg.build_constraint(self,"revbinR",None,1000,{self.variables["revbin"][object.id]:1000,object.reverse_variable:1},object)

modelseedpy/fbapkg/simplethermopkg.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,9 @@ def build_package(self,filter = None):
2323

2424
def build_variable(self,object):
2525
return BaseFBAPkg.build_variable(self,"potential",0,1000,"continuous",object)
26-
27-
def build_constraint(self,object):
26+
27+
def build_constraint(self,object):#Gibbs: dg = Sum(st(i,j)*p(j))
28+
#0 <= 1000*revbin(i) + Sum(st(i,j)*p(j)) <= 1000
2829
coef = {self.childpkgs["reversible binary"].variables["revbin"][object.id] : 1000}
2930
for metabolite in object.metabolites:
3031
coef[self.variables["potential"][metabolite.id]] = object.metabolites[metabolite]

0 commit comments

Comments
 (0)