1313** copyright (C) 2003-2017 Upinder S. Bhalla. and NCBS
1414Created : Thu May 13 10:19:00 2016(+0530)
1515Version
16- Last-Updated: Mon Nov 19 15:45 :00 2018(+0530)
16+ Last-Updated: Fri Nov 30 17:30 :00 2018(+0530)
1717 By:HarshaRani
1818**********************************************************************/
19192018
20+ Nov 30: - groups and subgroups are read from xml to moose
2021Nov 19: - reading and creating CylMesh and EndoMesh if specified in the Annotation field in compartment
2122 definition, also checking if EndoMesh missing/wrong surround compartment
2223Oct 26: - validator can be switchedoff by passing validate="off" while readSBML files
@@ -200,7 +201,7 @@ def mooseReadSBML(filepath, loadpath, solver="ee",validate="on"):
200201 moose .delete (basePath )
201202 loadpath = moose .Shell ('/' )
202203 #return basePath, ""
203- loaderror = msgCmpt + msgRule + msgReac + noRE
204+ loaderror = msgCmpt + str ( msgRule ) + msgReac + noRE
204205 if loaderror != "" :
205206 loaderror = loaderror
206207 return moose .element (loadpath ), loaderror
@@ -226,6 +227,7 @@ def checkFuncDef(model):
226227 if foundbvar and foundfuncMathML :
227228 funcDef [f .getName ()] = {'bvar' :bvar , "MathML" : fmath .getRightChild ()}
228229 return funcDef
230+
229231def checkGroup (basePath ,model ):
230232 groupInfo = {}
231233 modelAnnotaInfo = {}
@@ -238,26 +240,36 @@ def checkGroup(basePath,model):
238240 groupAnnoInfo = getObjAnnotation (p , modelAnnotaInfo )
239241 if groupAnnoInfo != {}:
240242 if moose .exists (basePath .path + '/' + groupAnnoInfo ["Compartment" ]):
241- if not moose .exists (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + p .getId ()):
242- moosegrp = moose .Neutral (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + p .getId ())
243+ if "Group" in groupAnnoInfo :
244+ if moose .exists (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + groupAnnoInfo ["Group" ]):
245+ if moose .exists (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + groupAnnoInfo ["Group" ]+ '/' + p .getName ()):
246+ moosegrp = moose .element (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + groupAnnoInfo ["Group" ]+ '/' + p .getName ())
247+ else :
248+ moosegrp = moose .Neutral (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + groupAnnoInfo ["Group" ]+ '/' + p .getName ())
249+ else :
250+ moose .Neutral (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + groupAnnoInfo ["Group" ])
251+ if moose .exists (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + groupAnnoInfo ["Group" ]+ '/' + p .getName ()):
252+ moosegrp = moose .element (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + groupAnnoInfo ["Group" ]+ '/' + p .getName ())
253+ else :
254+ moosegrp = moose .Neutral (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + groupAnnoInfo ["Group" ]+ '/' + p .getName ())
243255 else :
244- moosegrp = moose .element (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + p .getId ())
256+ if not moose .exists (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + p .getName ()):
257+ moosegrp = moose .Neutral (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + p .getName ())
258+ else :
259+ moosegrp = moose .element (basePath .path + '/' + groupAnnoInfo ["Compartment" ]+ '/' + p .getName ())
245260 moosegrpinfo = moose .Annotator (moosegrp .path + '/info' )
246261 moosegrpinfo .color = groupAnnoInfo ["bgColor" ]
247- else :
248- print ("Compartment not found" )
249-
262+ else :
263+ print ("Compartment not found" )
250264 if p .getKind () == 2 :
251265 if p .getId () not in groupInfo :
252- #groupInfo[p.getId() ]
266+ memlists = [ ]
253267 for gmemIndex in range (0 ,p .getNumMembers ()):
254268 mem = p .getMember (gmemIndex )
255-
256- if p .getId () in groupInfo :
257- groupInfo [p .getId ()].append (mem .getIdRef ())
258- else :
259- groupInfo [p .getId ()] = [mem .getIdRef ()]
269+ memlists .append (mem .getIdRef ())
270+ groupInfo [p .getId ()] = {"mpath" :moosegrp , "splist" :memlists }
260271 return groupInfo
272+
261273def setupEnzymaticReaction (enz , groupName , enzName ,
262274 specInfoMap , modelAnnotaInfo ,deletcplxMol ):
263275 enzPool = (modelAnnotaInfo [groupName ]["enzyme" ])
@@ -605,9 +617,13 @@ def createReaction(model, specInfoMap, modelAnnotaInfo, globparameterIdValue,fun
605617
606618 if (reac .isSetId ()):
607619 rId = reac .getId ()
608- groups = [k for k , v in groupInfo .items () if rId in v ]
609- if groups :
610- group = groups [0 ]
620+ #groups = [k for k, v in groupInfo.items() if rId in v]
621+ for k ,v in groupInfo .items ():
622+ if rId in v ["splist" ]:
623+ group = v ["mpath" ]
624+
625+ # if groups:
626+ # group = groups[0]
611627 if (reac .isSetName ()):
612628 rName = reac .getName ()
613629 rName = rName .replace (" " , "_space_" )
@@ -681,12 +697,12 @@ def createReaction(model, specInfoMap, modelAnnotaInfo, globparameterIdValue,fun
681697 sp = react .getSpecies ()
682698 sp = str (idBeginWith (sp ))
683699 speCompt = specInfoMap [sp ]["comptId" ].path
684-
685700 if group :
686- if moose .exists (speCompt + '/' + group ):
687- speCompt = speCompt + '/' + group
688- else :
689- speCompt = (moose .Neutral (speCompt + '/' + group )).path
701+ speCompt = group .path
702+ # if moose.exists(speCompt+'/'+group):
703+ # speCompt = speCompt+'/'+group
704+ # else:
705+ # speCompt = (moose.Neutral(speCompt+'/'+group)).path
690706 if moose .exists (speCompt + '/' + rName ):
691707 rName = rId
692708 reaction_ = moose .Reac (speCompt + '/' + rName )
@@ -1125,7 +1141,6 @@ def pullnotes(sbmlId, mooseId):
11251141 objInfo = moose .element (mooseId .path + '/info' )
11261142 objInfo .notes = notes
11271143
1128-
11291144def createSpecies (basePath , model , comptSbmlidMooseIdMap ,
11301145 specInfoMap , modelAnnotaInfo ,groupInfo ):
11311146 # ToDo:
@@ -1145,10 +1160,13 @@ def createSpecies(basePath, model, comptSbmlidMooseIdMap,
11451160
11461161 sName = None
11471162 sId = spe .getId ()
1148-
1149- groups = [k for k , v in groupInfo .items () if sId in v ]
1150- if groups :
1151- group = groups [0 ]
1163+ group = ""
1164+ #groups = [k for k, v in groupInfo.items() if sId in v]
1165+ for k ,v in groupInfo .items ():
1166+ if sId in v ["splist" ]:
1167+ group = v ["mpath" ]
1168+ # if groups:
1169+ # group = groups[0]
11521170 if spe .isSetName ():
11531171 sName = spe .getName ()
11541172 sName = sName .replace (" " , "_space_" )
@@ -1166,10 +1184,11 @@ def createSpecies(basePath, model, comptSbmlidMooseIdMap,
11661184 # "false": is {unit of amount}/{unit of size} (i.e., concentration or density).
11671185 # "true": then the value is interpreted as having a unit of amount only.
11681186 if group :
1169- if moose .exists (comptEl + '/' + group ):
1170- comptEl = comptEl + '/' + group
1171- else :
1172- comptEl = (moose .Neutral (comptEl + '/' + group )).path
1187+ comptEl = group .path
1188+ # if moose.exists(comptEl+'/'+group):
1189+ # comptEl = comptEl+'/'+group
1190+ # else:
1191+ # comptEl = (moose.Neutral(comptEl+'/'+group)).path
11731192 if (boundaryCondition ):
11741193 poolId = moose .BufPool (comptEl + '/' + sName )
11751194 else :
@@ -1253,7 +1272,6 @@ def createSpecies(basePath, model, comptSbmlidMooseIdMap,
12531272
12541273 return (True ," " )
12551274
1256-
12571275def transformUnit (unitForObject , hasonlySubUnit = False ):
12581276 # print "unit
12591277 # ",UnitDefinition.printUnits(unitForObject.getDerivedUnitDefinition())
0 commit comments