Files
geant4/examples/advanced/Tiara/source/py_modules/runSequence.py
T
2016-06-09 10:56:29 +02:00

120 lines
3.4 KiB
Python

# $Id: runSequence.py,v 1.4 2004/06/09 15:04:36 daquinog Exp $
# -------------------------------------------------------------------
# GEANT4 tag $Name: geant4-06-02 $
# -------------------------------------------------------------------
#
import Tiara
import myUtils
import shelve
import os
import string
class RunConfig(object):
def __init__(self):
self.basePath = ""
self.tApp = ""
self.tiaraSpecs = ""
self.impGeo = ""
self.impScorer = ""
self.totalTime = ""
self.comment = ""
def getConfInfo(self):
return myUtils.\
getConfigurationInfo(self.impGeo,
self.tiaraSpecs.experiment,
self.tApp.physicsList,
self.totalTime,
self.comment)
class RunSequence(object):
# methods to be used public
def __init__(self, runConfig, usePI = True):
self.rc = runConfig
self.usePI = usePI
self.runNum = -1
self.confInfo = self.rc.getConfInfo()
self.storeName = myUtils.getStoreName()
self.xmlStore = ""
self.pathXMLName = ""
self.shelveName = ""
self.pathShelveName = ""
self.randomNumberFileName = ""
self.path = self.mkPath()
def runNevents(self, events):
self.runNum += 1
self.mkNames()
self.mkShelve()
self.report()
self.rc.tApp.tiaraSim.BeamOn (events)
Tiara.saveRandomStatus(self.randomNumberFileName)
myUtils.saveResults(self.rc.tApp,
self.path,
self.shelveName,
self.rc.impScorer,
self.rc.impGeo)
def runLoop(self):
while ( not \
(self.rc.tApp.eventAction.\
GetTotalProcessedTime() > self.rc.totalTime)):
self.runNevents(10000000) # dummy num. events
# methods used privately
def report(self):
print "\n\nRunSequence.report:"
print self.confInfo
if self.usePI:
print "the xml store will be named: "
print " ", self.pathXMLName
print "the shelve name: "
print " ", self.pathShelveName
print "\n\n"
def mkPath(self):
if not os.path.exists(self.rc.basePath):
os.mkdir(self.rc.basePath)
path = self.rc.basePath + "/" + self.storeName
if not os.path.exists(path):
os.mkdir(path)
return path
def mkNames(self):
rn = self.runNum
rns = "%(rn)d" % vars()
rns = string.rjust(rns, 5)
rns = string.replace(rns,' ','0')
rId = "_run" + rns
if self.usePI:
self.xmlStore = self.storeName + rId + ".xml"
self.pathXMLName = self.path + "/" + self.xmlStore
self.shelveName = self.storeName + rId + ".shelve"
self.pathShelveName = self.path + "/" + self.shelveName
self.randomNumberFileName = self.path + "/randomNumberFile" + rId
def mkShelve(self):
myShelve = shelve.open(self.pathShelveName)
if self.usePI:
myShelve["xmlStoreName"] = self.xmlStore
for info in self.confInfo:
myShelve[info] = self.confInfo[info]
myShelve.close()
# end of RunSeuence