| 1 | # $Id: runSequence.py,v 1.4 2004/06/09 15:04:36 daquinog Exp $
|
|---|
| 2 | # -------------------------------------------------------------------
|
|---|
| 3 | # GEANT4 tag $Name: $
|
|---|
| 4 | # -------------------------------------------------------------------
|
|---|
| 5 | #
|
|---|
| 6 | import Tiara
|
|---|
| 7 | import myUtils
|
|---|
| 8 | import shelve
|
|---|
| 9 | import os
|
|---|
| 10 | import string
|
|---|
| 11 |
|
|---|
| 12 | class RunConfig(object):
|
|---|
| 13 | def __init__(self):
|
|---|
| 14 | self.basePath = ""
|
|---|
| 15 | self.tApp = ""
|
|---|
| 16 | self.tiaraSpecs = ""
|
|---|
| 17 | self.impGeo = ""
|
|---|
| 18 | self.impScorer = ""
|
|---|
| 19 | self.totalTime = ""
|
|---|
| 20 | self.comment = ""
|
|---|
| 21 | def getConfInfo(self):
|
|---|
| 22 | return myUtils.\
|
|---|
| 23 | getConfigurationInfo(self.impGeo,
|
|---|
| 24 | self.tiaraSpecs.experiment,
|
|---|
| 25 | self.tApp.physicsList,
|
|---|
| 26 | self.totalTime,
|
|---|
| 27 | self.comment)
|
|---|
| 28 |
|
|---|
| 29 |
|
|---|
| 30 |
|
|---|
| 31 |
|
|---|
| 32 | class RunSequence(object):
|
|---|
| 33 | # methods to be used public
|
|---|
| 34 | def __init__(self, runConfig, usePI = True):
|
|---|
| 35 | self.rc = runConfig
|
|---|
| 36 | self.usePI = usePI
|
|---|
| 37 | self.runNum = -1
|
|---|
| 38 | self.confInfo = self.rc.getConfInfo()
|
|---|
| 39 | self.storeName = myUtils.getStoreName()
|
|---|
| 40 | self.xmlStore = ""
|
|---|
| 41 | self.pathXMLName = ""
|
|---|
| 42 | self.shelveName = ""
|
|---|
| 43 | self.pathShelveName = ""
|
|---|
| 44 | self.randomNumberFileName = ""
|
|---|
| 45 | self.path = self.mkPath()
|
|---|
| 46 |
|
|---|
| 47 | def runNevents(self, events):
|
|---|
| 48 | self.runNum += 1
|
|---|
| 49 | self.mkNames()
|
|---|
| 50 | self.mkShelve()
|
|---|
| 51 | self.report()
|
|---|
| 52 | self.rc.tApp.tiaraSim.BeamOn (events)
|
|---|
| 53 | Tiara.saveRandomStatus(self.randomNumberFileName)
|
|---|
| 54 | myUtils.saveResults(self.rc.tApp,
|
|---|
| 55 | self.path,
|
|---|
| 56 | self.shelveName,
|
|---|
| 57 | self.rc.impScorer,
|
|---|
| 58 | self.rc.impGeo)
|
|---|
| 59 |
|
|---|
| 60 | def runLoop(self):
|
|---|
| 61 | while ( not \
|
|---|
| 62 | (self.rc.tApp.eventAction.\
|
|---|
| 63 | GetTotalProcessedTime() > self.rc.totalTime)):
|
|---|
| 64 | self.runNevents(10000000) # dummy num. events
|
|---|
| 65 |
|
|---|
| 66 |
|
|---|
| 67 |
|
|---|
| 68 |
|
|---|
| 69 |
|
|---|
| 70 |
|
|---|
| 71 |
|
|---|
| 72 | # methods used privately
|
|---|
| 73 |
|
|---|
| 74 | def report(self):
|
|---|
| 75 | print "\n\nRunSequence.report:"
|
|---|
| 76 | print self.confInfo
|
|---|
| 77 | if self.usePI:
|
|---|
| 78 | print "the xml store will be named: "
|
|---|
| 79 | print " ", self.pathXMLName
|
|---|
| 80 | print "the shelve name: "
|
|---|
| 81 | print " ", self.pathShelveName
|
|---|
| 82 | print "\n\n"
|
|---|
| 83 |
|
|---|
| 84 |
|
|---|
| 85 |
|
|---|
| 86 | def mkPath(self):
|
|---|
| 87 | if not os.path.exists(self.rc.basePath):
|
|---|
| 88 | os.mkdir(self.rc.basePath)
|
|---|
| 89 | path = self.rc.basePath + "/" + self.storeName
|
|---|
| 90 | if not os.path.exists(path):
|
|---|
| 91 | os.mkdir(path)
|
|---|
| 92 | return path
|
|---|
| 93 |
|
|---|
| 94 | def mkNames(self):
|
|---|
| 95 | rn = self.runNum
|
|---|
| 96 | rns = "%(rn)d" % vars()
|
|---|
| 97 | rns = string.rjust(rns, 5)
|
|---|
| 98 | rns = string.replace(rns,' ','0')
|
|---|
| 99 | rId = "_run" + rns
|
|---|
| 100 | if self.usePI:
|
|---|
| 101 | self.xmlStore = self.storeName + rId + ".xml"
|
|---|
| 102 | self.pathXMLName = self.path + "/" + self.xmlStore
|
|---|
| 103 |
|
|---|
| 104 | self.shelveName = self.storeName + rId + ".shelve"
|
|---|
| 105 | self.pathShelveName = self.path + "/" + self.shelveName
|
|---|
| 106 | self.randomNumberFileName = self.path + "/randomNumberFile" + rId
|
|---|
| 107 |
|
|---|
| 108 |
|
|---|
| 109 | def mkShelve(self):
|
|---|
| 110 | myShelve = shelve.open(self.pathShelveName)
|
|---|
| 111 | if self.usePI:
|
|---|
| 112 | myShelve["xmlStoreName"] = self.xmlStore
|
|---|
| 113 | for info in self.confInfo:
|
|---|
| 114 | myShelve[info] = self.confInfo[info]
|
|---|
| 115 | myShelve.close()
|
|---|
| 116 |
|
|---|
| 117 |
|
|---|
| 118 | # end of RunSeuence
|
|---|
| 119 |
|
|---|