00001
00002 '''
00003 Usage:
00004 '''
00005
00006 from UserTagging.UserTaggingAlg import UserTaggingAlg
00007 from GaudiPython import SUCCESS, FAILURE
00008 from GaudiPython import gbl
00009 import GaudiKernel.SystemOfUnits as units
00010 import PyCintex
00011
00012
00013 class SimData(UserTaggingAlg):
00014 '''Add MC Truth Info to UserData'''
00015
00016
00017 def initTagList(self):
00018
00019
00020
00021 self.addTag('Dummy', ''
00022 ).addData('SimData', '/Event/UserData/General/SimData'
00023 ).addInt('nSim'
00024 ).addIntArray('capTargetZ'
00025 ).addFloatArray('tCap', 'xCap', 'yCap', 'zCap'
00026 ).addFloatArray('QEInGdLS', 'QEInLS', 'QEInIAV', 'QEInOAV', 'QEInOIL', 'QESum')
00027
00028 self.target_de_name = '/dd/Structure/AD/db-ade1/db-sst1/db-oil1'
00029
00030
00031 def check(self, evt):
00032
00033 readoutHdr = evt['/Event/Readout/ReadoutHeader']
00034 if not readoutHdr:
00035 self.warning('cannot find readoutHdr')
00036 return
00037
00038 simHdrs = readoutHdr.findHeaders(gbl.DayaBay.SimHeader.classID())
00039 self.SaveSimData(simHdrs)
00040
00041 self.tagIt('Dummy')
00042
00043
00044 def SaveSimData(self, simHdrs):
00045
00046 myData = self.getTag('Dummy').getData('SimData')
00047
00048 de = self.getDet(self.target_de_name)
00049 if not de:
00050 self.info('Failed to get DE' + self.target_de_name)
00051 return FAILURE
00052 Gaudi = PyCintex.makeNamespace('Gaudi')
00053
00054 nSim = len(simHdrs)
00055
00056 for simHdr in simHdrs:
00057 uo_hdr = simHdr.unobservableStatistics()
00058 if not uo_hdr:
00059 self.info("no unobservableStatistics header in sim header")
00060 continue
00061 uo_stats = uo_hdr.stats()
00062 if not uo_stats:
00063 self.info("no unobservableStatistics in sim header")
00064 continue
00065 QEInGdLS = uo_stats["QEDepInGdLS"].sum()/units.MeV
00066 QEInLS = uo_stats["QEDepInLS"].sum()/units.MeV
00067 QEInIAV = uo_stats["QEDepInIAV"].sum()/units.MeV
00068 QEInOAV = uo_stats["QEDepInOAV"].sum()/units.MeV
00069 QEInOIL = uo_stats["QEDepInOIL"].sum()/units.MeV
00070 QESum = QEInGdLS+QEInLS+QEInIAV+QEInOAV+QEInOIL
00071 myData.append('QEInGdLS', QEInGdLS
00072 ).append('QEInLS' , QEInLS
00073 ).append('QEInIAV' , QEInIAV
00074 ).append('QEInOAV' , QEInOAV
00075 ).append('QEInOIL' , QEInOIL
00076 ).append('QESum' , QESum
00077
00078 ).append('capTargetZ', int(uo_stats["capTargetZ"].sum())
00079 ).append('tCap', uo_stats["tCap"].sum()/units.microsecond
00080 ).append('xCap', uo_stats["xCap"].sum()/units.mm
00081 ).append('yCap', uo_stats["yCap"].sum()/units.mm
00082 ).append('zCap', uo_stats["zCap"].sum()/units.mm)
00083
00084 myData.set("nSim", nSim)
00085
00086
00087
00088
00089 def configure(argv=[]):
00090 pass
00091
00092 def run(app):
00093 myAlg = SimData("UserData::SimData")
00094 app.addAlgorithm(myAlg)
00095 pass