19
19
import re
20
20
import libsedml # C:\WinPython-32bit-2.7.5.3\python-2.7.5\Lib\site-packages\libsedml\libsedml.py
21
21
import zipfile
22
+ #import string
22
23
from collections import namedtuple
23
24
24
25
MatchingSetsOfVariableIDs = namedtuple ("MatchingSetsOfVariableIDs" , "datagenID, taskReference, sedmlID, sbmlID" )
@@ -63,23 +64,25 @@ def write(self, obj):
63
64
original = sys .stdout
64
65
#sys.stdout = Tee(sys.stdout, f) # output to console and file
65
66
sys .stdout = Tee (f ) # output to file only
66
-
67
+
68
+ print "# Translated SED-ML"
67
69
print "# Beginning of generated script"
68
70
print "import roadrunner"
69
71
print ""
70
72
for i in range (0 , sedmlDoc .getNumModels ()):
71
73
currentModel = sedmlDoc .getModel (i )
72
- print "# Execute the tasks of model " + currentModel .getName ()
73
- rrName = "rr" + str (i )
74
+ print "# Execute the tasks of model: " + currentModel .getId ()
75
+ rrName = currentModel .getId ()
76
+ #rrName = "rr" + str(i)
74
77
print rrName + " = roadrunner.RoadRunner()"
75
78
generateTasks (rrName , sedmlDoc , currentModel , path )
76
79
print ""
77
- print "# The Data Generators"
80
+ print "# List of Data Generators"
78
81
dataGeneratorsList = []
79
82
for i in range (0 , sedmlDoc .getNumModels ()):
80
83
currentModel = sedmlDoc .getModel (i )
81
84
generateData (sedmlDoc , currentModel , dataGeneratorsList )
82
- print "# The Plots"
85
+ print "# List of Plots"
83
86
generatePlots (sedmlDoc , dataGeneratorsList )
84
87
print "# End of generated script\n "
85
88
@@ -89,7 +92,6 @@ def write(self, obj):
89
92
return contents
90
93
91
94
def generateTasks (rrName , sedmlDoc , currentModel , path ):
92
-
93
95
listOfChanges = []
94
96
loadModel (rrName , sedmlDoc , currentModel , path )
95
97
#print(rrName + ".simulateOptions.structuredResult = False")
@@ -117,7 +119,7 @@ def generateTasks(rrName, sedmlDoc, currentModel, path):
117
119
aStr = "# Unsupported change " + aChange .getElementName () + " for model " + currentModel .getId ()
118
120
print aStr
119
121
return
120
-
122
+
121
123
# The 'selections' are a list of all the 'variable' elements from the dataGenerators
122
124
# we first deal with normal tasks, if any
123
125
for e in range (0 ,sedmlDoc .getNumTasks ()):
@@ -203,8 +205,11 @@ def loadModel(rrName, sedmlDoc, currentModel, path):
203
205
if isId (string ): # it's the Id of a model
204
206
originalModel = sedmlDoc .getModel (string )
205
207
string = originalModel .getSource () # !!! for now, we reuse the original model to which the current model is referring to
206
- if string .startswith ("../" ): # relative location, we trust it but need it trimmed
207
- string = string [3 :]
208
+ if string .startswith ("." ): # relative location, we trust it but need it trimmed
209
+ if string .startswith ("../" ):
210
+ string = string [3 :]
211
+ elif string .startswith ("./" ):
212
+ string = string [2 :]
208
213
print rrName + ".load('" + path .replace ("\\ " ,"/" ) + string + "')" # SBML model name recovered from "source" attr
209
214
#from os.path import expanduser
210
215
#path = expanduser("~")
@@ -288,6 +293,7 @@ def generateSimulation(rrName, sedmlDoc, currentModel, task1, variablesList, var
288
293
taskId = task1 .getId ()
289
294
else :
290
295
taskId = repeatedTask .getId () + "_" + str (repeatedTaskIndex )
296
+ taskId = taskId .replace ('repeatedTask' , 'rT' )
291
297
string = taskId + " = " + rrName + ".simulate("
292
298
tc = currentSimulation
293
299
totNumPoints = tc .getOutputEndTime () * tc .getNumberOfPoints () / (tc .getOutputEndTime () - tc .getOutputStartTime ())
@@ -410,6 +416,7 @@ def generateDataLoop(sedmlDoc, currentModel, task1, variablesList, variablesDict
410
416
dataGeneratorsList [position ] = rtdg
411
417
412
418
dataGeneratorOutput = '\n ' .join (dataGeneratorOutputList )
419
+ dataGeneratorOutput = dataGeneratorOutput .replace ('repeatedTask' , 'rT' )
413
420
print dataGeneratorOutput
414
421
415
422
def generatePlots (sedmlDoc , dataGeneratorsList ):
@@ -443,6 +450,8 @@ def generatePlots(sedmlDoc, dataGeneratorsList):
443
450
curve = output .getCurve (k )
444
451
xDataReference = curve .getXDataReference ()
445
452
yDataReference = curve .getYDataReference ()
453
+ xDataReference = xDataReference .replace ('repeatedTask' , 'rT' )
454
+ yDataReference = yDataReference .replace ('repeatedTask' , 'rT' )
446
455
if not len (dataGeneratorsList ) == 0 :
447
456
allX += xDataReference + "_" + str (l ) + ","
448
457
allY += yDataReference + "_" + str (l ) + ","
@@ -455,7 +464,7 @@ def generatePlots(sedmlDoc, dataGeneratorsList):
455
464
print allY
456
465
print "plt.plot(allX_" + str (l ) + ", allY_" + str (l ) + ")\n "
457
466
elif "repeatedTask" not in checklist : #There is no repeated tasks
458
- if output .getNumCurves () > 1 :
467
+ if output .getNumCurves () > 0 :
459
468
allX = "allX_" + str (i ) + " = numpy.array(["
460
469
allY = "allY_" + str (i ) + " = numpy.array(["
461
470
for k in range (0 , output .getNumCurves ()):
0 commit comments