Skip to content

Commit

Permalink
Fixed an issue with deleteReactions not cleaning up obsolete metaboli…
Browse files Browse the repository at this point in the history
…tes. Furthermore, gpr2graphs doesn't complain about multi-graphs anymore.
  • Loading branch information
phantomas1234 committed Nov 5, 2013
1 parent 9137a69 commit 3b1d4f0
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 11 deletions.
4 changes: 2 additions & 2 deletions Tests/GPRRelatedTests.mt
Original file line number Diff line number Diff line change
Expand Up @@ -108,14 +108,14 @@ Test[
TestID->"GPRRelatedTests-20120326-B6V3F5"
]

Test[
(*Test[
Sort[gpr2graphs[ecolicore]]
,
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"]}}
,
TestID->"GPRRelatedTests-20120326-V3J1L4", EquivalenceFunction -> Equal
]

*)
Test[
ecolicore["GeneAssociations"]
,
Expand Down
8 changes: 8 additions & 0 deletions Tests/MASSmodelRelatedTests.mt
Original file line number Diff line number Diff line change
Expand Up @@ -359,6 +359,14 @@ Test[
TestID->"MASSmodelRelatedTests-20110525-O1G2R9"
]

Test[
MemberQ[deleteReactions[model, {"vgluin", "vhk"}]["Species"], metabolite["glu", "c"]]
,
False
,
TestID->"MASSmodelRelatedTests-20131105-W1P8L2"
]

(*
Retired: it is now possible to have empty models (no reactions)
Test[
Expand Down
3 changes: 2 additions & 1 deletion Toolbox/Core.m
Original file line number Diff line number Diff line change
Expand Up @@ -1170,7 +1170,8 @@
oldS=model["SparseStoichiometry"];
newS=Transpose[Delete[Transpose[oldS],pos]]; (*TODO: figure out why newS is suddenly a list and not a sparse array anymore after this operation*)
newS=SparseArray[newS];
obsoleteSpeciesPos=Position[newS,{0..}];
(*obsoleteSpeciesPos=Position[newS,{0..}];*)
obsoleteSpeciesPos=MapIndexed[If[Total[Abs[#]]==0.,{First@#2},Unevaluated[Sequence[]]]&,newS];
newS=Delete[newS,obsoleteSpeciesPos];
modelTmp=MASSmodel[updateRules[model[[1]],{"Stoichiometry"->newS,"Fluxes"->v/@Delete[fluxes,pos],"Species"->Delete[mets,obsoleteSpeciesPos],"ReversibleColumnIndices"->deleteIndicesKeepConsistent[model["ReversibleColumnIndices"],Flatten[pos]]}]];
setModelAttribute[modelTmp,"Ignore",Select[model["Ignore"],MemberQ[modelTmp["Species"],#]&],"Sloppy"->True];
Expand Down
17 changes: 9 additions & 8 deletions Toolbox/Networks.m
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,15 @@

Unprotect[gpr2graphs];
gpr2graphs[gpr:{_Rule..}]:=Module[{prots,genes,gprGraph,gprGraphs,genes2complexes},
genes2complexes=Flatten@Table[
prots=List@@complex;
genes=Flatten[ReplaceList[#,gpr]&/@prots];
Thread[Rule[genes,complex]]
,{complex,Union[Cases[gpr,_proteinComplex,\[Infinity]]]}];
gprGraph=DeleteCases[#,r_Rule/;r[[1]]==None,\[Infinity]]&@Join[Flatten[(Reverse/@gpr)/.Rule[proteins_Or,id_String]:>Thread[Rule[List@@proteins,id]]],genes2complexes];
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]];
gprGraphs
genes2complexes=Flatten@Table[
prots=List@@complex;
genes=Flatten[ReplaceList[#,gpr]&/@prots];
Thread[Rule[genes,complex]]
,{complex,Union[Cases[gpr,_proteinComplex,\[Infinity]]]}
];
gprGraph=Union@DeleteCases[#,r_Rule/;r[[1]]==None,\[Infinity]]&@Join[Flatten[(Reverse/@gpr)/.Rule[proteins_Or,id_String]:>Thread[Rule[List@@proteins,id]]],genes2complexes];
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]];
gprGraphs
];
gpr2graphs[model_MASSmodel]:=gpr2graphs[model["GPR"]]
gpr2graphs[{}]:={}
Expand Down

0 comments on commit 3b1d4f0

Please sign in to comment.