Skip to content

Commit 3b1d4f0

Browse files
committed
Fixed an issue with deleteReactions not cleaning up obsolete metabolites. Furthermore, gpr2graphs doesn't complain about multi-graphs anymore.
1 parent 9137a69 commit 3b1d4f0

File tree

4 files changed

+21
-11
lines changed

4 files changed

+21
-11
lines changed

Tests/GPRRelatedTests.mt

+2-2
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,14 @@ Test[
108108
TestID->"GPRRelatedTests-20120326-B6V3F5"
109109
]
110110

111-
Test[
111+
(*Test[
112112
Sort[gpr2graphs[ecolicore]]
113113
,
114114
Sort@{{protein["MhpF"] -> "ACALD", protein["AdhE"] -> "ACALD", protein["FrmA"] -> "ALCD2x", protein["AdhP"] -> "ALCD2x", protein["AdhE"] -> "ALCD2x", gene["b1241"] -> protein["AdhE"], gene["b1478"] -> protein["AdhP"], gene["b0356"] -> protein["FrmA"], gene["b0351"] -> protein["MhpF"]}, {protein["SPONTANEOUS"] -> "ACALDt", protein["SPONTANEOUS"] -> "CO2t", protein["SPONTANEOUS"] -> "O2t", gene["s0001"] -> protein["SPONTANEOUS"]}, {protein["AckA"] -> "ACKr", protein["TdcD"] -> "ACKr", protein["PurT"] -> "ACKr", gene["b2296"] -> protein["AckA"], gene["b1849"] -> protein["PurT"], gene["b3115"] -> protein["TdcD"]}, {protein["AcnB"] -> "ACONTa", protein["AcnA"] -> "ACONTa", protein["AcnB"] -> "ACONTb", protein["AcnA"] -> "ACONTb", gene["b1276"] -> protein["AcnA"], gene["b0118"] -> protein["AcnB"]}, {protein["Adk"] -> "ADK1", gene["b0474"] -> protein["Adk"]}, {proteinComplex[protein["LpdA"], protein["SucAec"], protein["SucBec"]] -> "AKGDH", proteinComplex[protein["AceEec"], protein["AceFec"], protein["LpdA"]] -> "PDH", gene["b0114"] -> proteinComplex[protein["AceEec"], protein["AceFec"], protein["LpdA"]], gene["b0115"] -> proteinComplex[protein["AceEec"], protein["AceFec"], protein["LpdA"]], gene["b0116"] -> proteinComplex[protein["AceEec"], protein["AceFec"], protein["LpdA"]], gene["b0116"] -> proteinComplex[protein["LpdA"], protein["SucAec"], protein["SucBec"]], gene["b0726"] -> proteinComplex[protein["LpdA"], protein["SucAec"], protein["SucBec"]], gene["b0727"] -> proteinComplex[protein["LpdA"], protein["SucAec"], protein["SucBec"]]}, {protein["KgtPec"] -> "AKGt2r", gene["b2587"] -> protein["KgtPec"]}, {proteinComplex[protein["AtpF0"], protein["AtpF1"], protein["AtpI"]] -> "ATPS4r", proteinComplex[protein["AtpF0"], protein["AtpF1"]] -> "ATPS4r", geneComplex[gene["b3736"], gene["b3737"], gene["b3738"]] -> proteinComplex[protein["AtpF0"], protein["AtpF1"]], geneComplex[gene["b3731"], gene["b3732"], gene["b3733"], gene["b3734"], gene["b3735"]] -> proteinComplex[protein["AtpF0"], protein["AtpF1"]], geneComplex[gene["b3736"], gene["b3737"], gene["b3738"]] -> proteinComplex[protein["AtpF0"], protein["AtpF1"], protein["AtpI"]], geneComplex[gene["b3731"], gene["b3732"], gene["b3733"], gene["b3734"], gene["b3735"]] -> proteinComplex[protein["AtpF0"], protein["AtpF1"], protein["AtpI"]], gene["b3739"] -> proteinComplex[protein["AtpF0"], protein["AtpF1"], protein["AtpI"]]}, {protein["GltA"] -> "CS", gene["b0720"] -> protein["GltA"]}, {protein["CbdAB"] -> "CYTBD", protein["CydA"] -> "CYTBD", geneComplex[gene["b0978"], gene["b0979"]] -> protein["CbdAB"], geneComplex[gene["b0733"], gene["b0734"]] -> protein["CydA"]}, {protein["GlcA"] -> "D_LACt2", protein["LldP"] -> "D_LACt2", gene["b2975"] -> protein["GlcA"], gene["b3603"] -> protein["LldP"]}, {protein["Eno"] -> "ENO", gene["b2779"] -> protein["Eno"]}, {protein["FbaA"] -> "FBA", protein["FbaB"] -> "FBA", protein["B1773"] -> "FBA", gene["b1773"] -> protein["B1773"], gene["b2925"] -> protein["FbaA"], gene["b2097"] -> protein["FbaB"]}, {protein["Fbp"] -> "FBP", protein["GlpX"] -> "FBP", gene["b4232"] -> protein["Fbp"], gene["b3925"] -> protein["GlpX"]}, {protein["FocA"] -> "FORt2", protein["FocB"] -> "FORt2", protein["FocA"] -> "FORti", protein["FocB"] -> "FORti", gene["b0904"] -> protein["FocA"], gene["b2492"] -> protein["FocB"]}, {protein["Frd"] -> "FRD7", geneComplex[gene["b4151"], gene["b4152"], gene["b4153"], gene["b4154"]] -> protein["Frd"]}, {proteinComplex[protein["ManX"], protein["ManY"], protein["ManZ"], protein["PtsH"], protein["PtsI"]] -> "FRUpts2", proteinComplex[protein["Crr"], protein["MalX"], protein["PtsH"], protein["PtsI"]] -> "GLCpts", proteinComplex[protein["Crr"], protein["PtsG"], protein["PtsH"], protein["PtsI"]] -> "GLCpts", proteinComplex[protein["ManX"], protein["ManY"], protein["ManZ"], protein["PtsH"], protein["PtsI"]] -> "GLCpts", gene["b2417"] -> proteinComplex[protein["Crr"], protein["MalX"], protein["PtsH"], protein["PtsI"]], gene["b1621"] -> proteinComplex[protein["Crr"], protein["MalX"], protein["PtsH"], protein["PtsI"]], gene["b2415"] -> proteinComplex[protein["Crr"], protein["MalX"], protein["PtsH"], protein["PtsI"]], gene["b2416"] -> proteinComplex[protein["Crr"], protein["MalX"], protein["PtsH"], protein["PtsI"]], gene["b2417"] -> proteinComplex[protein["Crr"], protein["PtsG"], protein["PtsH"], protein["PtsI"]], gene["b1101"] -> proteinComplex[protein["Crr"], protein["PtsG"], protein["PtsH"], protein["PtsI"]], gene["b2415"] -> proteinComplex[protein["Crr"], protein["PtsG"], protein["PtsH"], protein["PtsI"]], gene["b2416"] -> proteinComplex[protein["Crr"], protein["PtsG"], protein["PtsH"], protein["PtsI"]], gene["b1817"] -> proteinComplex[protein["ManX"], protein["ManY"], protein["ManZ"], protein["PtsH"], protein["PtsI"]], gene["b1818"] -> proteinComplex[protein["ManX"], protein["ManY"], protein["ManZ"], protein["PtsH"], protein["PtsI"]], gene["b1819"] -> proteinComplex[protein["ManX"], protein["ManY"], protein["ManZ"], protein["PtsH"], protein["PtsI"]], gene["b2415"] -> proteinComplex[protein["ManX"], protein["ManY"], protein["ManZ"], protein["PtsH"], protein["PtsI"]], gene["b2416"] -> proteinComplex[protein["ManX"], protein["ManY"], protein["ManZ"], protein["PtsH"], protein["PtsI"]]}, {protein["FumA"] -> "FUM", protein["FumB"] -> "FUM", protein["FumCec"] -> "FUM", gene["b1612"] -> protein["FumA"], gene["b4122"] -> protein["FumB"], gene["b1611"] -> protein["FumCec"]}, {protein["DctA"] -> "FUMt2_2", protein["DctA"] -> "MALt2_2", protein["DctA"] -> "SUCCt2_2", gene["b3528"] -> protein["DctA"]}, {protein["Zwf"] -> "G6PDH2r", gene["b1852"] -> protein["Zwf"]}, {protein["GapA"] -> "GAPD", gene["b1779"] -> protein["GapA"]}, {proteinComplex[protein["GlnHec"], protein["GlnPec"], protein["GlnQec"]] -> "GLNabc", gene["b0811"] -> proteinComplex[protein["GlnHec"], protein["GlnPec"], protein["GlnQec"]], gene["b0810"] -> proteinComplex[protein["GlnHec"], protein["GlnPec"], protein["GlnQec"]], gene["b0809"] -> proteinComplex[protein["GlnHec"], protein["GlnPec"], protein["GlnQec"]]}, {protein["GlnA"] -> "GLNS", protein["YcjK"] -> "GLNS", gene["b3870"] -> protein["GlnA"], gene["b1297"] -> protein["YcjK"]}, {protein["GdhA"] -> "GLUDy", gene["b1761"] -> protein["GdhA"]}, {protein["PabBec"] -> "GLUN", protein["YbaS"] -> "GLUN", protein["YneH"] -> "GLUN", gene["b1812"] -> protein["PabBec"], gene["b0485"] -> protein["YbaS"], gene["b1524"] -> protein["YneH"]}, {protein["GltB"] -> "GLUSy", geneComplex[gene["b3212"], gene["b3213"]] -> protein["GltB"]}, {protein["GltP"] -> "GLUt2r", gene["b4077"] -> protein["GltP"]}, {protein["Gnd"] -> "GND", gene["b2029"] -> protein["Gnd"]}, {protein["AqpZ"] -> "H2Ot", gene["b0875"] -> protein["AqpZ"]}, {protein["Icd"] -> "ICDHyr", gene["b1136"] -> protein["Icd"]}, {protein["AceA"] -> "ICL", gene["b4015"] -> protein["AceA"]}, {protein["Ldh"] -> "LDH_D", protein["Dld"] -> "LDH_D", gene["b2133"] -> protein["Dld"], gene["b1380"] -> protein["Ldh"]}, {protein["GlcB"] -> "MALS", protein["AceB"] -> "MALS", gene["b4014"] -> protein["AceB"], gene["b2976"] -> protein["GlcB"]}, {protein["Mdh"] -> "MDH", gene["b3236"] -> protein["Mdh"]}, {protein["Sfc"] -> "ME1", gene["b1479"] -> protein["Sfc"]}, {protein["Mae"] -> "ME2", gene["b2463"] -> protein["Mae"]}, {protein["Nuo"] -> "NADH16", geneComplex[gene["b2276"], gene["b2277"], gene["b2278"], gene["b2279"], gene["b2280"], gene["b2281"], gene["b2282"], gene["b2283"], gene["b2284"], gene["b2285"], gene["b2286"], gene["b2287"], gene["b2288"]] -> protein["Nuo"]}, {protein["Pnt"] -> "NADTRHD", protein["SthA"] -> "NADTRHD", protein["Pnt"] -> "THD2", geneComplex[gene["b1602"], gene["b1603"]] -> protein["Pnt"], gene["b3962"] -> protein["SthA"]}, {protein["AmtB"] -> "NH4t", gene["b0451"] -> protein["AmtB"]}, {protein["PfkA"] -> "PFK", protein["PfkB"] -> "PFK", gene["b3916"] -> protein["PfkA"], gene["b1723"] -> protein["PfkB"]}, {proteinComplex[protein["PflBec"], protein["YfiD"]] -> "PFL", protein["PflBec"] -> "PFL", protein["TdcEec"] -> "PFL", protein["PflDec"] -> "PFL", geneComplex[gene["b0902"], gene["b0903"]] -> protein["PflBec"], geneComplex[gene["b3951"], gene["b3952"]] -> protein["PflDec"], geneComplex[gene["b0902"], gene["b3114"]] -> protein["TdcEec"], geneComplex[gene["b0902"], gene["b0903"]] -> proteinComplex[protein["PflBec"], protein["YfiD"]], gene["b2579"] -> proteinComplex[protein["PflBec"], protein["YfiD"]]}, {protein["Pgi"] -> "PGI", gene["b4025"] -> protein["Pgi"]}, {protein["Pgk"] -> "PGK", gene["b2926"] -> protein["Pgk"]}, {protein["Pgl"] -> "PGL", gene["b0767"] -> protein["Pgl"]}, {protein["GpmB"] -> "PGM", protein["GpmA"] -> "PGM", protein["YibO"] -> "PGM", gene["b0755"] -> protein["GpmA"], gene["b4395"] -> protein["GpmB"], gene["b3612"] -> protein["YibO"]}, {protein["PitBec"] -> "PIt2r", protein["PitA"] -> "PIt2r", gene["b3493"] -> protein["PitA"], gene["b2987"] -> protein["PitBec"]}, {protein["Ppc"] -> "PPC", gene["b3956"] -> protein["Ppc"]}, {protein["Pck"] -> "PPCK", gene["b3403"] -> protein["Pck"]}, {protein["Ppsa"] -> "PPS", gene["b1702"] -> protein["Ppsa"]}, {protein["Pta"] -> "PTAr", protein["EutD"] -> "PTAr", gene["b2458"] -> protein["EutD"], gene["b2297"] -> protein["Pta"]}, {protein["Pyka"] -> "PYK", protein["Pykf"] -> "PYK", gene["b1854"] -> protein["Pyka"], gene["b1676"] -> protein["Pykf"]}, {protein["Rpeec"] -> "RPE", protein["SgcE"] -> "RPE", gene["b3386"] -> protein["Rpeec"], gene["b4301"] -> protein["SgcE"]}, {protein["RpiA"] -> "RPI", protein["RpiB"] -> "RPI", gene["b2914"] -> protein["RpiA"], gene["b4090"] -> protein["RpiB"]}, {protein["Sdh"] -> "SUCDi", geneComplex[gene["b0721"], gene["b0722"], gene["b0723"], gene["b0724"]] -> protein["Sdh"]}, {protein["SucCD"] -> "SUCOAS", geneComplex[gene["b0728"], gene["b0729"]] -> protein["SucCD"]}, {protein["TalB"] -> "TALA", protein["TalA"] -> "TALA", gene["b2464"] -> protein["TalA"], gene["b0008"] -> protein["TalB"]}, {protein["TktA"] -> "TKT1", protein["TktB"] -> "TKT1", protein["TktA"] -> "TKT2", protein["TktB"] -> "TKT2", gene["b2935"] -> protein["TktA"], gene["b2465"] -> protein["TktB"]}, {protein["Tpi"] -> "TPI", gene["b3919"] -> protein["Tpi"]}}
115115
,
116116
TestID->"GPRRelatedTests-20120326-V3J1L4", EquivalenceFunction -> Equal
117117
]
118-
118+
*)
119119
Test[
120120
ecolicore["GeneAssociations"]
121121
,

Tests/MASSmodelRelatedTests.mt

+8
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,14 @@ Test[
359359
TestID->"MASSmodelRelatedTests-20110525-O1G2R9"
360360
]
361361

362+
Test[
363+
MemberQ[deleteReactions[model, {"vgluin", "vhk"}]["Species"], metabolite["glu", "c"]]
364+
,
365+
False
366+
,
367+
TestID->"MASSmodelRelatedTests-20131105-W1P8L2"
368+
]
369+
362370
(*
363371
Retired: it is now possible to have empty models (no reactions)
364372
Test[

Toolbox/Core.m

+2-1
Original file line numberDiff line numberDiff line change
@@ -1170,7 +1170,8 @@
11701170
oldS=model["SparseStoichiometry"];
11711171
newS=Transpose[Delete[Transpose[oldS],pos]]; (*TODO: figure out why newS is suddenly a list and not a sparse array anymore after this operation*)
11721172
newS=SparseArray[newS];
1173-
obsoleteSpeciesPos=Position[newS,{0..}];
1173+
(*obsoleteSpeciesPos=Position[newS,{0..}];*)
1174+
obsoleteSpeciesPos=MapIndexed[If[Total[Abs[#]]==0.,{First@#2},Unevaluated[Sequence[]]]&,newS];
11741175
newS=Delete[newS,obsoleteSpeciesPos];
11751176
modelTmp=MASSmodel[updateRules[model[[1]],{"Stoichiometry"->newS,"Fluxes"->v/@Delete[fluxes,pos],"Species"->Delete[mets,obsoleteSpeciesPos],"ReversibleColumnIndices"->deleteIndicesKeepConsistent[model["ReversibleColumnIndices"],Flatten[pos]]}]];
11761177
setModelAttribute[modelTmp,"Ignore",Select[model["Ignore"],MemberQ[modelTmp["Species"],#]&],"Sloppy"->True];

Toolbox/Networks.m

+9-8
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,15 @@
4949

5050
Unprotect[gpr2graphs];
5151
gpr2graphs[gpr:{_Rule..}]:=Module[{prots,genes,gprGraph,gprGraphs,genes2complexes},
52-
genes2complexes=Flatten@Table[
53-
prots=List@@complex;
54-
genes=Flatten[ReplaceList[#,gpr]&/@prots];
55-
Thread[Rule[genes,complex]]
56-
,{complex,Union[Cases[gpr,_proteinComplex,\[Infinity]]]}];
57-
gprGraph=DeleteCases[#,r_Rule/;r[[1]]==None,\[Infinity]]&@Join[Flatten[(Reverse/@gpr)/.Rule[proteins_Or,id_String]:>Thread[Rule[List@@proteins,id]]],genes2complexes];
58-
gprGraph=DeleteCases[gprGraph,r_Rule/;Head[r[[2]]]===protein&&!MemberQ[gprGraph,Rule[r[[2]],_]]];gprGraphs=Cases[gprGraph,r_Rule/;MemberQ[#,r[[1]]]&&MemberQ[#,r[[2]]]]&/@ConnectedComponents[Graph[gprGraph/.r_Rule:>UndirectedEdge@@r]];
59-
gprGraphs
52+
genes2complexes=Flatten@Table[
53+
prots=List@@complex;
54+
genes=Flatten[ReplaceList[#,gpr]&/@prots];
55+
Thread[Rule[genes,complex]]
56+
,{complex,Union[Cases[gpr,_proteinComplex,\[Infinity]]]}
57+
];
58+
gprGraph=Union@DeleteCases[#,r_Rule/;r[[1]]==None,\[Infinity]]&@Join[Flatten[(Reverse/@gpr)/.Rule[proteins_Or,id_String]:>Thread[Rule[List@@proteins,id]]],genes2complexes];
59+
gprGraph=DeleteCases[gprGraph,r_Rule/;Head[r[[2]]]===protein&&!MemberQ[gprGraph,Rule[r[[2]],_]]];gprGraphs=Cases[gprGraph,r_Rule/;MemberQ[#,r[[1]]]&&MemberQ[#,r[[2]]]]&/@ConnectedComponents[Graph[gprGraph/.r_Rule:>UndirectedEdge@@r]];
60+
gprGraphs
6061
];
6162
gpr2graphs[model_MASSmodel]:=gpr2graphs[model["GPR"]]
6263
gpr2graphs[{}]:={}

0 commit comments

Comments
 (0)