Definition at line 31 of file Tools.py.
def DataQuality::Tools::TesToTreeAlg::__init__ | ( | self, | ||
name | ||||
) |
Definition at line 33 of file Tools.py.
00033 : 00034 DybPythonAlg.__init__(self,name) 00035 # List of headers in output tree 00036 self.HeaderList = ["Gen","Sim","SimReadout","Readout","CalibReadout", 00037 "Rec"] 00038 self.ForceReconResults = ["AdSimple"] 00039 return 00040 def initialize(self):
def DataQuality::Tools::TesToTreeAlg::initialize | ( | self | ) |
Definition at line 41 of file Tools.py.
00041 : 00042 status = DybPythonAlg.initialize(self) 00043 if status.isFailure(): return status 00044 self.info("initialize") 00045 00046 self.firstEntry = True 00047 00048 self.tesTree= TTree("tesTree","TES converted to ROOT Tree") 00049 00050 if "Gen" in self.HeaderList: 00051 self.initGenHeader() 00052 if "Sim" in self.HeaderList: 00053 self.initSimHeader() 00054 if "SimReadout" in self.HeaderList: 00055 self.initSimReadoutHeader() 00056 if "Readout" in self.HeaderList: 00057 self.initReadoutHeader() 00058 if "CalibReadout" in self.HeaderList: 00059 self.initCalibReadoutHeader() 00060 if "Rec" in self.HeaderList: 00061 self.initRecHeader() 00062 00063 self.stats['/file0/tes/tesTree'] = self.tesTree 00064 return SUCCESS 00065 def initGenHeader(self):
def DataQuality::Tools::TesToTreeAlg::initGenHeader | ( | self | ) |
Definition at line 66 of file Tools.py.
00066 : 00067 # GenEvent Data 00068 self.hasGen = array('i',[0]) 00069 self.genTimeSec = array('i',[0]) 00070 self.genTimeNanoSec = array('i',[0]) 00071 self.nGenParticles = array('i',[0]) 00072 self.maxGenParticles = 256 00073 self.genPdgid = array('i',self.maxGenParticles*[0]) 00074 self.genStatus = array('i',self.maxGenParticles*[0]) 00075 self.genX = array('d',self.maxGenParticles*[0]) 00076 self.genY = array('d',self.maxGenParticles*[0]) 00077 self.genZ = array('d',self.maxGenParticles*[0]) 00078 self.genT = array('d',self.maxGenParticles*[0]) 00079 self.genE = array('d',self.maxGenParticles*[0]) 00080 00081 self.tesTree.Branch('hasGen',self.hasGen,'hasGen/I') 00082 self.tesTree.Branch('genTimeSec',self.genTimeSec,'genTimeSec/I') 00083 self.tesTree.Branch('genTimeNanoSec',self.genTimeNanoSec, 00084 'genTimeNanoSec/I') 00085 self.tesTree.Branch('nGenParticles',self.nGenParticles, 00086 'nGenParticles/I') 00087 self.tesTree.Branch('genPdgid',self.genPdgid, 00088 'genPdgid[nGenParticles]/I') 00089 self.tesTree.Branch('genStatus',self.genStatus, 00090 'genStatus[nGenParticles]/I') 00091 self.tesTree.Branch('genX',self.genX,'genX[nGenParticles]/D') 00092 self.tesTree.Branch('genY',self.genY,'genY[nGenParticles]/D') 00093 self.tesTree.Branch('genZ',self.genZ,'genZ[nGenParticles]/D') 00094 self.tesTree.Branch('genT',self.genT,'genT[nGenParticles]/D') 00095 self.tesTree.Branch('genE',self.genE,'genE[nGenParticles]/D') 00096 def initSimHeader(self):
def DataQuality::Tools::TesToTreeAlg::initSimHeader | ( | self | ) |
Definition at line 97 of file Tools.py.
00097 : 00098 # SimEvent Data 00099 self.hasSim = array('i',[0]) 00100 self.simTimeSec = array('i',[0]) 00101 self.simTimeNanoSec = array('i',[0]) 00102 self.nSimHits = array('i',[0]) 00103 self.maxSimHits = 4096 00104 self.simHitSite = array('i',self.maxSimHits*[0]) 00105 self.simHitDet = array('i',self.maxSimHits*[0]) 00106 self.simHitSensId = array('i',self.maxSimHits*[0]) 00107 self.simHitTime = array('d',self.maxSimHits*[0]) 00108 self.simHitWeight = array('d',self.maxSimHits*[0]) 00109 self.simHitX = array('d',self.maxSimHits*[0]) 00110 self.simHitY = array('d',self.maxSimHits*[0]) 00111 self.simHitZ = array('d',self.maxSimHits*[0]) 00112 self.simHitRing = array('i',self.maxSimHits*[0]) 00113 self.simHitColumn = array('i',self.maxSimHits*[0]) 00114 self.simHitWavelength = array('d',self.maxSimHits*[0]) 00115 self.simHitType = array('i',self.maxSimHits*[0]) 00116 self.simStat = {} 00117 00118 self.tesTree.Branch('hasSim',self.hasSim,'hasSim/I') 00119 self.tesTree.Branch('simTimeSec',self.simTimeSec,'simTimeSec/I') 00120 self.tesTree.Branch('simTimeNanoSec',self.simTimeNanoSec, 00121 'simTimeNanoSec/I') 00122 self.tesTree.Branch('nSimHits',self.nSimHits,'nSimHits/I') 00123 self.tesTree.Branch('simHitSite',self.simHitSite, 00124 'simHitSite[nSimHits]/I') 00125 self.tesTree.Branch('simHitDet',self.simHitDet,'simHitDet[nSimHits]/I') 00126 self.tesTree.Branch('simHitSensId',self.simHitSensId, 00127 'simHitSensId[nSimHits]/I') 00128 self.tesTree.Branch('simHitTime',self.simHitTime, 00129 'simHitTime[nSimHits]/D') 00130 self.tesTree.Branch('simHitWeight',self.simHitWeight, 00131 'simHitWeight[nSimHits]/D') 00132 self.tesTree.Branch('simHitX',self.simHitX,'simHitX[nSimHits]/D') 00133 self.tesTree.Branch('simHitY',self.simHitY,'simHitY[nSimHits]/D') 00134 self.tesTree.Branch('simHitZ',self.simHitZ,'simHitZ[nSimHits]/D') 00135 self.tesTree.Branch('simHitRing',self.simHitRing, 00136 'simHitRing[nSimHits]/I') 00137 self.tesTree.Branch('simHitColumn',self.simHitColumn, 00138 'simHitColumn[nSimHits]/I') 00139 self.tesTree.Branch('simHitWavelength',self.simHitWavelength, 00140 'simHitWavelength[nSimHits]/D') 00141 self.tesTree.Branch('simHitType',self.simHitType, 00142 'simHitType[nSimHits]/I') 00143 def initSimReadoutHeader(self):
def DataQuality::Tools::TesToTreeAlg::initSimReadoutHeader | ( | self | ) |
Definition at line 144 of file Tools.py.
00144 : 00145 # SimReadoutEvent Data 00146 self.hasSimRo = array('i',[0]) 00147 self.nSimRo = array('i',[0]) 00148 00149 self.tesTree.Branch('hasSimRo',self.hasSimRo,'hasSimRo/I') 00150 self.tesTree.Branch('nSimRo',self.nSimRo,'nSimRo/I') 00151 def initReadoutHeader(self):
def DataQuality::Tools::TesToTreeAlg::initReadoutHeader | ( | self | ) |
Definition at line 152 of file Tools.py.
00152 : 00153 # ReadoutEvent Data 00154 self.hasRo = array('i',[0]) 00155 self.roTimeSec = array('i',[0]) 00156 self.roTimeNanoSec = array('i',[0]) 00157 self.hasReadout = array('i',[0]) 00158 self.roSite = array('i',[0]) 00159 self.roDetector = array('i',[0]) 00160 self.roTriggerNumber = array('i',[0]) 00161 self.roTriggerTimeSec = array('i',[0]) 00162 self.roTriggerTimeNanoSec = array('i',[0]) 00163 self.nRoChannels = array('i',[0]) 00164 self.nRoTdcs = array('i',[0]) 00165 self.nRoAdcs = array('i',[0]) 00166 self.maxRoChannels = 512 00167 self.roChanId = array('i',self.maxRoChannels*[0]) 00168 self.roBoard = array('i',self.maxRoChannels*[0]) 00169 self.roConnector = array('i',self.maxRoChannels*[0]) 00170 self.nRoChanTdc = array('i',self.maxRoChannels*[0]) 00171 self.nRoChanAdc = array('i',self.maxRoChannels*[0]) 00172 self.roChanAdcGain = array('i',self.maxRoChannels*[0]) 00173 self.roChanFirstTdc = array('i',self.maxRoChannels*[0]) 00174 self.roChanPeakAdc = array('i',self.maxRoChannels*[0]) 00175 self.maxRoTdcs = 4096 00176 self.roTdc = array('i',self.maxRoTdcs*[0]) 00177 self.roTdcChanId = array('i',self.maxRoTdcs*[0]) 00178 self.maxRoAdcs = 4096 00179 self.roAdcClock = array('i',self.maxRoAdcs*[0]) 00180 self.roAdc = array('i',self.maxRoAdcs*[0]) 00181 self.roAdcChanId = array('i',self.maxRoAdcs*[0]) 00182 00183 self.tesTree.Branch('hasRo',self.hasRo,'hasRo/I') 00184 self.tesTree.Branch('roTimeSec',self.roTimeSec,'roTimeSec/I') 00185 self.tesTree.Branch('roTimeNanoSec',self.roTimeNanoSec, 00186 'roTimeNanoSec/I') 00187 self.tesTree.Branch('hasReadout',self.hasReadout,'hasReadout/I') 00188 self.tesTree.Branch('roSite',self.roSite,'roSite/I') 00189 self.tesTree.Branch('roDetector',self.roDetector,'roDetector/I') 00190 self.tesTree.Branch('roTriggerNumber',self.roTriggerNumber, 00191 'roTriggerNumber/I') 00192 self.tesTree.Branch('roTriggerTimeSec',self.roTriggerTimeSec, 00193 'roTriggerTimeSec/I') 00194 self.tesTree.Branch('roTriggerTimeNanoSec',self.roTriggerTimeNanoSec, 00195 'roTriggerTimeNanoSec/I') 00196 self.tesTree.Branch('nRoChannels',self.nRoChannels,'nRoChannels/I') 00197 self.tesTree.Branch('nRoTdcs',self.nRoTdcs,'nRoTdcs/I') 00198 self.tesTree.Branch('nRoAdcs',self.nRoAdcs,'nRoAdcs/I') 00199 self.tesTree.Branch('roChanId',self.roChanId,'roChanId[nRoChannels]/I') 00200 self.tesTree.Branch('roBoard',self.roBoard,'roBoard[nRoChannels]/I') 00201 self.tesTree.Branch('roConnector',self.roConnector, 00202 'roConnector[nRoChannels]/I') 00203 self.tesTree.Branch('nRoChanTdc',self.nRoChanTdc, 00204 'nRoChanTdc[nRoChannels]/I') 00205 self.tesTree.Branch('nRoChanAdc',self.nRoChanAdc, 00206 'nRoChanAdc[nRoChannels]/I') 00207 self.tesTree.Branch('roChanAdcGain',self.roChanAdcGain, 00208 'roChanAdcGain[nRoChannels]/I') 00209 self.tesTree.Branch('roChanFirstTdc',self.roChanFirstTdc, 00210 'roChanFirstTdc[nRoChannels]/I') 00211 self.tesTree.Branch('roChanPeakAdc',self.roChanPeakAdc, 00212 'roChanPeakAdc[nRoChannels]/I') 00213 self.tesTree.Branch('roTdc',self.roTdc,'roTdc[nRoTdcs]/I') 00214 self.tesTree.Branch('roTdcChanId',self.roTdcChanId, 00215 'roTdcChanId[nRoTdcs]/I') 00216 self.tesTree.Branch('roAdcClock',self.roAdcClock, 00217 'roAdcClock[nRoAdcs]/I') 00218 self.tesTree.Branch('roAdc',self.roAdc,'roAdc[nRoAdcs]/I') 00219 self.tesTree.Branch('roAdcChanId',self.roAdcChanId, 00220 'roAdcChanId[nRoAdcs]/I') 00221 def initCalibReadoutHeader(self):
def DataQuality::Tools::TesToTreeAlg::initCalibReadoutHeader | ( | self | ) |
Definition at line 222 of file Tools.py.
00222 : 00223 # CalibReadoutEvent Data 00224 self.hasCro = array('i',[0]) 00225 self.croTimeSec = array('i',[0]) 00226 self.croTimeNanoSec = array('i',[0]) 00227 self.hasCalibReadout = array('i',[0]) 00228 self.croSite = array('i',[0]) 00229 self.croDetector = array('i',[0]) 00230 self.croTriggerNumber = array('i',[0]) 00231 self.croTriggerTimeSec = array('i',[0]) 00232 self.croTriggerTimeNanoSec = array('i',[0]) 00233 self.nCroChannels = array('i',[0]) 00234 self.nCroTdcs = array('i',[0]) 00235 self.nCroAdcs = array('i',[0]) 00236 self.maxCroChannels = 512 00237 self.croChanId = array('i',self.maxCroChannels*[0]) 00238 self.croBoard = array('i',self.maxCroChannels*[0]) 00239 self.croConnector = array('i',self.maxCroChannels*[0]) 00240 self.nCroChanTdc = array('i',self.maxCroChannels*[0]) 00241 self.nCroChanAdc = array('i',self.maxCroChannels*[0]) 00242 self.croChanAdcGain = array('i',self.maxCroChannels*[0]) 00243 self.croChanFirstTdc = array('d',self.maxCroChannels*[0]) 00244 self.croChanPeakAdc = array('d',self.maxCroChannels*[0]) 00245 self.maxCroTdcs = 4096 00246 self.croTdc = array('d',self.maxCroTdcs*[0]) 00247 self.croTdcChanId = array('i',self.maxCroTdcs*[0]) 00248 self.maxCroAdcs = 4096 00249 self.croAdcClock = array('i',self.maxCroAdcs*[0]) 00250 self.croAdc = array('d',self.maxCroAdcs*[0]) 00251 self.croAdcChanId = array('i',self.maxCroAdcs*[0]) 00252 00253 self.tesTree.Branch('hasCro',self.hasCro,'hasCro/I') 00254 self.tesTree.Branch('croTimeSec',self.croTimeSec,'croTimeSec/I') 00255 self.tesTree.Branch('croTimeNanoSec',self.croTimeNanoSec, 00256 'croTimeNanoSec/I') 00257 self.tesTree.Branch('hasCalibReadout',self.hasCalibReadout, 00258 'hasCalibReadout/I') 00259 self.tesTree.Branch('croSite',self.croSite,'croSite/I') 00260 self.tesTree.Branch('croDetector',self.croDetector,'croDetector/I') 00261 self.tesTree.Branch('croTriggerNumber',self.croTriggerNumber, 00262 'croTriggerNumber/I') 00263 self.tesTree.Branch('croTriggerTimeSec',self.croTriggerTimeSec, 00264 'croTriggerTimeSec/I') 00265 self.tesTree.Branch('croTriggerTimeNanoSec',self.croTriggerTimeNanoSec, 00266 'croTriggerTimeNanoSec/I') 00267 self.tesTree.Branch('nCroChannels',self.nCroChannels,'nCroChannels/I') 00268 self.tesTree.Branch('nCroTdcs',self.nCroTdcs,'nCroTdcs/I') 00269 self.tesTree.Branch('nCroAdcs',self.nCroAdcs,'nCroAdcs/I') 00270 self.tesTree.Branch('croChanId',self.croChanId, 00271 'croChanId[nCroChannels]/I') 00272 self.tesTree.Branch('croBoard',self.croBoard,'croBoard[nCroChannels]/I') 00273 self.tesTree.Branch('croConnector',self.croConnector, 00274 'croConnector[nCroChannels]/I') 00275 self.tesTree.Branch('nCroChanTdc',self.nCroChanTdc, 00276 'nCroChanTdc[nCroChannels]/I') 00277 self.tesTree.Branch('nCroChanAdc',self.nCroChanAdc, 00278 'nCroChanAdc[nCroChannels]/I') 00279 self.tesTree.Branch('croChanAdcGain',self.croChanAdcGain, 00280 'croChanAdcGain[nCroChannels]/I') 00281 self.tesTree.Branch('croChanFirstTdc',self.croChanFirstTdc, 00282 'croChanFirstTdc[nCroChannels]/D') 00283 self.tesTree.Branch('croChanPeakAdc',self.croChanPeakAdc, 00284 'croChanPeakAdc[nCroChannels]/D') 00285 self.tesTree.Branch('croTdc',self.croTdc,'croTdc[nCroTdcs]/D') 00286 self.tesTree.Branch('croTdcChanId',self.croTdcChanId, 00287 'croTdcChanId[nCroTdcs]/I') 00288 self.tesTree.Branch('croAdcClock',self.croAdcClock, 00289 'croAdcClock[nCroAdcs]/I') 00290 self.tesTree.Branch('croAdc',self.croAdc,'croAdc[nCroAdcs]/D') 00291 self.tesTree.Branch('croAdcChanId',self.croAdcChanId, 00292 'croAdcChanId[nCroAdcs]/I') 00293 def initRecHeader(self):
def DataQuality::Tools::TesToTreeAlg::initRecHeader | ( | self | ) |
Definition at line 294 of file Tools.py.
00294 : 00295 # RecEvent Data 00296 self.hasRec = array('i',[0]) 00297 self.recTimeSec = array('i',[0]) 00298 self.recTimeNanoSec = array('i',[0]) 00299 self.hasRecTrigger = array('i',[0]) 00300 self.recResults = {} 00301 00302 self.tesTree.Branch('hasRec',self.hasRec,'hasRec/I') 00303 self.tesTree.Branch('recTimeSec',self.recTimeSec,'recTimeSec/I') 00304 self.tesTree.Branch('recTimeNanoSec',self.recTimeNanoSec, 00305 'recTimeNanoSec/I') 00306 self.tesTree.Branch('hasRecTrigger',self.hasRecTrigger, 00307 'hasRecTrigger/I') 00308 for recName in self.ForceReconResults: 00309 self.prepareRecResults(recName) 00310 def prepareRecResults(self, recName):
def DataQuality::Tools::TesToTreeAlg::prepareRecResults | ( | self, | ||
recName | ||||
) |
Definition at line 311 of file Tools.py.
00311 : 00312 # Prepare tree branches for a particular reconstruction type 00313 recSiteName = "rec_" + recName + "_site" 00314 recDetName = "rec_" + recName + "_det" 00315 recTrigNumName = "rec_" + recName + "_trigNum" 00316 recTrigTimeSecName = "rec_" + recName + "_trigTimeSec" 00317 recTrigTimeNanoSecName = "rec_" + recName + "_trigTimeNanoSec" 00318 recEnergyName = "rec_" + recName + "_energy" 00319 recPosName = "rec_" + recName + "_position" 00320 recDirName = "rec_" + recName + "_direction" 00321 recEnergyStatName = "rec_" + recName + "_energyStatus" 00322 recPosStatName = "rec_" + recName + "_positionStatus" 00323 recDirStatName = "rec_" + recName + "_directionStatus" 00324 recEnergyQualName = "rec_" + recName + "_energyQuality" 00325 recPosQualName = "rec_" + recName + "_positionQuality" 00326 recDirQualName = "rec_" + recName + "_directionQuality" 00327 if not self.recResults.has_key(recSiteName): 00328 self.recResults[recSiteName] = array('i',[0]) 00329 self.recResults[recDetName] = array('i',[0]) 00330 self.recResults[recTrigNumName] = array('i',[0]) 00331 self.recResults[recTrigTimeSecName] = array('i',[0]) 00332 self.recResults[recTrigTimeNanoSecName] = array('i',[0]) 00333 self.recResults[recEnergyName] = array('d',[0]) 00334 self.recResults[recPosName] = array('d',4*[0]) 00335 self.recResults[recDirName] = array('d',4*[0]) 00336 self.recResults[recEnergyStatName] = array('i',[0]) 00337 self.recResults[recPosStatName] = array('i',[0]) 00338 self.recResults[recDirStatName] = array('i',[0]) 00339 self.recResults[recEnergyQualName] = array('d',[0]) 00340 self.recResults[recPosQualName] = array('d',[0]) 00341 self.recResults[recDirQualName] = array('d',[0]) 00342 if self.firstEntry: 00343 self.info(" Adding reconstruction "+recName) 00344 self.tesTree.Branch(recSiteName, 00345 self.recResults[recSiteName], 00346 "%s/I" % recSiteName) 00347 self.tesTree.Branch(recDetName, 00348 self.recResults[recDetName], 00349 "%s/I" % recDetName) 00350 self.tesTree.Branch(recTrigNumName, 00351 self.recResults[recTrigNumName], 00352 "%s/I" % recTrigNumName) 00353 self.tesTree.Branch(recTrigTimeSecName, 00354 self.recResults[recTrigTimeSecName], 00355 "%s/I" % recTrigTimeSecName) 00356 self.tesTree.Branch(recTrigTimeNanoSecName, 00357 self.recResults[recTrigTimeNanoSecName], 00358 "%s/I" % recTrigTimeNanoSecName) 00359 self.tesTree.Branch(recEnergyName, 00360 self.recResults[recEnergyName], 00361 "%s/D" % recEnergyName) 00362 self.tesTree.Branch(recPosName, 00363 self.recResults[recPosName], 00364 "%s[4]/D" % recPosName) 00365 self.tesTree.Branch(recDirName, 00366 self.recResults[recDirName], 00367 "%s[4]/D" % recDirName) 00368 self.tesTree.Branch(recEnergyStatName, 00369 self.recResults[recEnergyStatName], 00370 "%s/I" % recEnergyStatName) 00371 self.tesTree.Branch(recPosStatName, 00372 self.recResults[recPosStatName], 00373 "%s/I" % recPosStatName) 00374 self.tesTree.Branch(recDirStatName, 00375 self.recResults[recDirStatName], 00376 "%s/I" % recDirStatName) 00377 self.tesTree.Branch(recEnergyQualName, 00378 self.recResults[recEnergyQualName], 00379 "%s/D" % recEnergyQualName) 00380 self.tesTree.Branch(recPosQualName, 00381 self.recResults[recPosQualName], 00382 "%s/D" % recPosQualName) 00383 self.tesTree.Branch(recDirQualName, 00384 self.recResults[recDirQualName], 00385 "%s/D" % recDirQualName) 00386 else: 00387 self.warning("Cannot add "+recName+" to tree after first entry") 00388 return 00389 def execute(self):
def DataQuality::Tools::TesToTreeAlg::execute | ( | self | ) |
Definition at line 390 of file Tools.py.
00390 : 00391 self.info("executing") 00392 00393 if "Gen" in self.HeaderList: 00394 self.writeGenHeader() 00395 if "Sim" in self.HeaderList: 00396 self.writeSimHeader() 00397 if "SimReadout" in self.HeaderList: 00398 self.writeSimReadoutHeader() 00399 if "Readout" in self.HeaderList: 00400 self.writeReadoutHeader() 00401 if "CalibReadout" in self.HeaderList: 00402 self.writeCalibReadoutHeader() 00403 if "Rec" in self.HeaderList: 00404 self.writeRecHeader() 00405 00406 self.tesTree.Fill() 00407 self.firstEntry = False 00408 return SUCCESS 00409 def writeGenHeader(self):
def DataQuality::Tools::TesToTreeAlg::writeGenHeader | ( | self | ) |
Definition at line 410 of file Tools.py.
00410 : 00411 # GenEvent Data 00412 self.hasGen[0] = 0 00413 self.genTimeSec[0] = 0 00414 self.genTimeNanoSec[0] = 0 00415 self.nGenParticles[0] = 0 00416 00417 evt = self.evtSvc() 00418 # GenEvent Data 00419 genHdr = evt["/Event/Gen/GenHeader"] 00420 if genHdr != None: 00421 self.genTimeSec[0] = genHdr.timeStamp().GetSec() 00422 self.genTimeNanoSec[0] = genHdr.timeStamp().GetNanoSec() 00423 genEvt = genHdr.event() 00424 if genEvt != None: 00425 self.hasGen[0] = 1 00426 nParticles = 0 00427 for vertex in irange(genEvt.vertices_begin(), 00428 genEvt.vertices_end()): 00429 pos = vertex.position() 00430 #localPos = self.localCoord(pos) 00431 for particle in irange(vertex.particles_out_const_begin(), 00432 vertex.particles_out_const_end()): 00433 if nParticles >= self.maxGenParticles: break 00434 self.genPdgid[nParticles] = particle.pdg_id() 00435 self.genStatus[nParticles] = particle.status() 00436 self.genX[nParticles] = pos.x() 00437 self.genY[nParticles] = pos.y() 00438 self.genZ[nParticles] = pos.z() 00439 self.genT[nParticles] = pos.t() 00440 self.genE[nParticles] = particle.momentum().e() 00441 nParticles += 1 00442 self.nGenParticles[0] = nParticles 00443 return 00444 def writeSimHeader(self):
def DataQuality::Tools::TesToTreeAlg::writeSimHeader | ( | self | ) |
Definition at line 445 of file Tools.py.
00445 : 00446 # SimEvent Data 00447 self.hasSim[0] = 0 00448 self.simTimeSec[0] = 0 00449 self.simTimeNanoSec[0] = 0 00450 self.nSimHits[0] = 0 00451 for name in self.simStat.keys(): 00452 self.simStat[name][0] = 0 00453 00454 evt = self.evtSvc() 00455 # SimEvent Data 00456 simHdr = evt["/Event/Sim/SimHeader"] 00457 if simHdr != None: 00458 self.hasSim[0] = 1 00459 self.simTimeSec[0] = simHdr.timeStamp().GetSec() 00460 self.simTimeNanoSec[0] = simHdr.timeStamp().GetNanoSec() 00461 shh = simHdr.hits() 00462 if shh != None: 00463 nHits = 0 00464 hitCollectionMap = shh.hitCollection() 00465 for shcPair in irange(hitCollectionMap.begin(), 00466 hitCollectionMap.end()): 00467 detectorInt = shcPair.first 00468 hitCollection = shcPair.second 00469 hits = hitCollection.collection() 00470 detId = Detector(detectorInt<<16) 00471 for hit in hits: 00472 self.simHitSite[nHits] = detId.site() 00473 self.simHitDet[nHits] = detId.detectorId() 00474 self.simHitSensId[nHits] = hit.sensDetId() 00475 self.simHitTime[nHits] = hit.hitTime() 00476 self.simHitWeight[nHits] = hit.weight() 00477 pos = hit.localPos() 00478 self.simHitX[nHits] = pos.x() 00479 self.simHitY[nHits] = pos.y() 00480 self.simHitZ[nHits] = pos.z() 00481 if (detId.detectorId() == DetectorId.kAD1 00482 or detId.detectorId() == DetectorId.kAD2 00483 or detId.detectorId() == DetectorId.kAD3 00484 or detId.detectorId() == DetectorId.kAD4): 00485 pmtId = AdPmtSensor(hit.sensDetId()) 00486 self.simHitRing[nHits] = pmtId.ring() 00487 self.simHitColumn[nHits] = pmtId.column() 00488 self.simHitWavelength[nHits] = hit.wavelength() 00489 self.simHitType[nHits] = hit.type() 00490 else: 00491 self.simHitRing[nHits] = 0 00492 self.simHitColumn[nHits] = 0 00493 self.simHitWavelength[nHits] = 0 00494 self.simHitType[nHits] = 0 00495 nHits += 1 00496 self.nSimHits[0] = nHits 00497 # Particle History 00498 particleHistory = simHdr.particleHistory() 00499 if particleHistory != None: 00500 # Currently doesn't copy particle history 00501 pass 00502 # Unobservable Statistics 00503 statsHdr = simHdr.unobservableStatistics() 00504 if statsHdr != None: 00505 stats = statsHdr.stats() 00506 if self.firstEntry: self.info("Adding unobservables to tree") 00507 for statPair in irange(stats.begin(),stats.end()): 00508 name = statPair.first 00509 stat = statPair.second 00510 countName = "simUnobs_"+name+"_count" 00511 sumName = "simUnobs_"+name+"_sum" 00512 sqSumName = "simUnobs_"+name+"_sqSum" 00513 if not self.simStat.has_key(countName): 00514 self.simStat[countName] = array('d',[0]) 00515 self.simStat[sumName] = array('d',[0]) 00516 self.simStat[sqSumName] = array('d',[0]) 00517 if self.firstEntry: 00518 self.info(" Adding "+name) 00519 self.tesTree.Branch(countName, 00520 self.simStat[countName], 00521 "%s/D" % countName) 00522 self.tesTree.Branch(sumName,self.simStat[sumName], 00523 "%s/D"%sumName) 00524 self.tesTree.Branch(sqSumName, 00525 self.simStat[sqSumName], 00526 "%s/D"%sqSumName) 00527 else: 00528 self.warning("Too late to add unobservable "+name) 00529 self.simStat[countName][0] = stat.count() 00530 self.simStat[sumName][0] = stat.sum() 00531 self.simStat[sqSumName][0] = stat.squaredsum() 00532 return 00533 def writeSimReadoutHeader(self):
def DataQuality::Tools::TesToTreeAlg::writeSimReadoutHeader | ( | self | ) |
Definition at line 534 of file Tools.py.
00534 : 00535 # SimReadoutEvent 00536 self.hasSimRo[0] = 0 00537 self.nSimRo[0] = 0 00538 00539 evt = self.evtSvc() 00540 # SimReadoutEvent Data 00541 simRoHdr = evt["/Event/Sim/SimReadoutHeader"] 00542 if simRoHdr != None: 00543 self.hasSimRo[0] = 1 00544 self.nSimRo[0] = simRoHdr.readouts().size() 00545 return 00546 00547 def writeReadoutHeader(self):
def DataQuality::Tools::TesToTreeAlg::writeReadoutHeader | ( | self | ) |
Definition at line 548 of file Tools.py.
00548 : 00549 # ReadoutEvent Data 00550 self.hasRo[0] = 0 00551 self.roTimeSec[0] = 0 00552 self.roTimeNanoSec[0] = 0 00553 self.hasReadout[0] = 0 00554 self.roSite[0] = 0 00555 self.roDetector[0] = 0 00556 self.roTriggerNumber[0] = 0 00557 self.roTriggerTimeSec[0] = 0 00558 self.roTriggerTimeNanoSec[0] = 0 00559 self.nRoChannels[0] = 0 00560 self.nRoTdcs[0] = 0 00561 self.nRoAdcs[0] = 0 00562 00563 evt = self.evtSvc() 00564 # ReadoutEvent Data 00565 roHdr = evt["/Event/Readout/ReadoutHeader"] 00566 if roHdr != None: 00567 self.hasRo[0] = 1 00568 self.roTimeSec[0] = roHdr.timeStamp().GetSec() 00569 self.roTimeNanoSec[0] = roHdr.timeStamp().GetNanoSec() 00570 readout = roHdr.readout() 00571 if readout != None: 00572 self.hasReadout[0] = 1 00573 self.roSite[0] = readout.detector().site() 00574 detId = readout.detector().detectorId() 00575 self.roDetector[0] = detId 00576 self.roTriggerNumber[0] = readout.triggerNumber() 00577 trigTime = readout.triggerTime() 00578 self.roTriggerTimeSec[0] = trigTime.GetSec() 00579 self.roTriggerTimeNanoSec[0] = trigTime.GetNanoSec() 00580 if (detId == DetectorId.kAD1 or 00581 detId == DetectorId.kAD2 or 00582 detId == DetectorId.kAD3 or 00583 detId == DetectorId.kAD4 or 00584 detId == DetectorId.kIWS or 00585 detId == DetectorId.kOWS or 00586 detId == DetectorId.kUnknown): # Catch unset detector 00587 nRoChannels = 0 00588 nRoTdcs = 0 00589 nRoAdcs = 0 00590 for channelPair in readout.channelReadout(): 00591 channel = channelPair.second 00592 chanId = channel.channelId() 00593 self.roChanId[nRoChannels] = chanId.fullPackedData() 00594 self.roBoard[nRoChannels] = chanId.board() 00595 self.roConnector[nRoChannels] = chanId.connector() 00596 self.nRoChanTdc[nRoChannels] = channel.tdc().size() 00597 self.nRoChanAdc[nRoChannels] = channel.adc().size() 00598 self.roChanAdcGain[nRoChannels] = channel.adcGain() 00599 firstTdc = 0 00600 for tdc in channel.tdc(): 00601 self.roTdc[nRoTdcs] = tdc 00602 self.roTdcChanId[nRoTdcs] = chanId.fullPackedData() 00603 firstTdc = max(firstTdc, tdc) 00604 nRoTdcs += 1 00605 peakAdc = 0 00606 for adcPair in irange(channel.adc().begin(), 00607 channel.adc().end()): 00608 adcClock = adcPair.first 00609 adc = adcPair.second 00610 self.roAdcClock[nRoAdcs] = adcClock 00611 self.roAdc[nRoAdcs] = adc 00612 self.roAdcChanId[nRoAdcs] = chanId.fullPackedData() 00613 peakAdc = max(peakAdc, adc) 00614 nRoAdcs += 1 00615 self.roChanFirstTdc[nRoChannels] = firstTdc 00616 self.roChanPeakAdc[nRoChannels] = peakAdc 00617 nRoChannels += 1 00618 self.nRoChannels[0] = nRoChannels 00619 self.nRoTdcs[0] = nRoTdcs 00620 self.nRoAdcs[0] = nRoAdcs 00621 return 00622 def writeCalibReadoutHeader(self):
def DataQuality::Tools::TesToTreeAlg::writeCalibReadoutHeader | ( | self | ) |
Definition at line 623 of file Tools.py.
00623 : 00624 # CalibReadoutEvent Data 00625 self.hasCro[0] = 0 00626 self.croTimeSec[0] = 0 00627 self.croTimeNanoSec[0] = 0 00628 self.hasCalibReadout[0] = 0 00629 self.croSite[0] = 0 00630 self.croDetector[0] = 0 00631 self.croTriggerNumber[0] = 0 00632 self.croTriggerTimeSec[0] = 0 00633 self.croTriggerTimeNanoSec[0] = 0 00634 self.nCroChannels[0] = 0 00635 self.nCroTdcs[0] = 0 00636 self.nCroAdcs[0] = 0 00637 00638 evt = self.evtSvc() 00639 # CalibReadoutEvent Data 00640 croHdr = evt["/Event/CalibReadout/CalibReadoutHeader"] 00641 if croHdr != None: 00642 self.hasCro[0] = 1 00643 self.croTimeSec[0] = croHdr.timeStamp().GetSec() 00644 self.croTimeNanoSec[0] = croHdr.timeStamp().GetNanoSec() 00645 readout = croHdr.calibReadout() 00646 if readout != None: 00647 self.hasCalibReadout[0] = 1 00648 self.croSite[0] = readout.detector().site() 00649 detId = readout.detector().detectorId() 00650 self.croDetector[0] = detId 00651 self.croTriggerNumber[0] = readout.triggerNumber() 00652 trigTime = readout.triggerTime() 00653 self.croTriggerTimeSec[0] = trigTime.GetSec() 00654 self.croTriggerTimeNanoSec[0] = trigTime.GetNanoSec() 00655 if (detId == DetectorId.kAD1 or 00656 detId == DetectorId.kAD2 or 00657 detId == DetectorId.kAD3 or 00658 detId == DetectorId.kAD4 or 00659 detId == DetectorId.kIWS or 00660 detId == DetectorId.kOWS): 00661 nCroChannels = 0 00662 nCroTdcs = 0 00663 nCroAdcs = 0 00664 for channelPair in readout.channelReadout(): 00665 channel = channelPair.second 00666 chanId = channel.channelId() 00667 self.croChanId[nCroChannels] = chanId.fullPackedData() 00668 self.croBoard[nCroChannels] = chanId.board() 00669 self.croConnector[nCroChannels] = chanId.connector() 00670 self.nCroChanTdc[nCroChannels] = channel.tdc().size() 00671 self.nCroChanAdc[nCroChannels] = channel.adc().size() 00672 self.croChanAdcGain[nCroChannels] = channel.adcGain() 00673 for tdc in channel.tdc(): 00674 self.croTdc[nCroTdcs] = tdc 00675 self.croTdcChanId[nCroTdcs]= chanId.fullPackedData() 00676 nCroTdcs += 1 00677 for adcPair in irange(channel.adc().begin(), 00678 channel.adc().end()): 00679 adcClock = adcPair.first 00680 adc = adcPair.second 00681 self.croAdcClock[nCroAdcs] = adcClock 00682 self.croAdc[nCroAdcs] = adc 00683 self.croAdcChanId[nCroAdcs]= chanId.fullPackedData() 00684 nCroAdcs += 1 00685 self.croChanFirstTdc[nCroChannels] = channel.firstTdc() 00686 self.croChanPeakAdc[nCroChannels] = channel.peakAdc() 00687 nCroChannels += 1 00688 self.nCroChannels[0] = nCroChannels 00689 self.nCroTdcs[0] = nCroTdcs 00690 self.nCroAdcs[0] = nCroAdcs 00691 return 00692 def writeRecHeader(self):
def DataQuality::Tools::TesToTreeAlg::writeRecHeader | ( | self | ) |
Definition at line 693 of file Tools.py.
00693 : 00694 # RecEvent Data 00695 self.hasRec[0] = 0 00696 self.recTimeSec[0] = 0 00697 self.recTimeNanoSec[0] = 0 00698 self.hasRecTrigger[0] = 0 00699 for name in self.recResults.keys(): 00700 for fieldIdx in range(len(self.recResults[name])): 00701 self.recResults[name][fieldIdx] = 0 00702 00703 evt = self.evtSvc() 00704 # RecEvent Data 00705 recHdr = evt["/Event/Rec/RecHeader"] 00706 if recHdr != None: 00707 self.hasRec[0] = 1 00708 self.recTimeSec[0] = recHdr.timeStamp().GetSec() 00709 self.recTimeNanoSec[0] = recHdr.timeStamp().GetNanoSec() 00710 for recPair in irange(recHdr.recResults().begin(), 00711 recHdr.recResults().end()): 00712 self.hasRecTrigger[0] = 1 00713 recTrigger = recPair.second 00714 recName = recTrigger.name() 00715 recSiteName = "rec_" + recName + "_site" 00716 recDetName = "rec_" + recName + "_det" 00717 recTrigNumName = "rec_" + recName + "_trigNum" 00718 recTrigTimeSecName = "rec_" + recName + "_trigTimeSec" 00719 recTrigTimeNanoSecName = "rec_" + recName + "_trigTimeNanoSec" 00720 recEnergyName = "rec_" + recName + "_energy" 00721 recPosName = "rec_" + recName + "_position" 00722 recDirName = "rec_" + recName + "_direction" 00723 recEnergyStatName = "rec_" + recName + "_energyStatus" 00724 recPosStatName = "rec_" + recName + "_positionStatus" 00725 recDirStatName = "rec_" + recName + "_directionStatus" 00726 recEnergyQualName = "rec_" + recName + "_energyQuality" 00727 recPosQualName = "rec_" + recName + "_positionQuality" 00728 recDirQualName = "rec_" + recName + "_directionQuality" 00729 if not self.recResults.has_key(recSiteName): 00730 self.prepareRecResults(recName) 00731 self.recResults[recSiteName][0] = recTrigger.detector().site() 00732 self.recResults[recDetName][0] = recTrigger.detector().detectorId() 00733 self.recResults[recTrigNumName][0] = recTrigger.triggerNumber() 00734 self.recResults[recTrigTimeSecName][0] = recTrigger.triggerTime().GetSec() 00735 self.recResults[recTrigTimeNanoSecName][0] = recTrigger.triggerTime().GetNanoSec() 00736 self.recResults[recEnergyName][0] = recTrigger.energy() 00737 self.recResults[recPosName][0] = recTrigger.position().x() 00738 self.recResults[recPosName][1] = recTrigger.position().y() 00739 self.recResults[recPosName][2] = recTrigger.position().z() 00740 self.recResults[recPosName][3] = recTrigger.position().t() 00741 self.recResults[recDirName][0] = recTrigger.direction().x() 00742 self.recResults[recDirName][1] = recTrigger.direction().y() 00743 self.recResults[recDirName][2] = recTrigger.direction().z() 00744 self.recResults[recDirName][3] = recTrigger.direction().t() 00745 self.recResults[recEnergyStatName][0] = recTrigger.energyStatus() 00746 self.recResults[recPosStatName][0] = recTrigger.positionStatus() 00747 self.recResults[recDirStatName][0]= recTrigger.directionStatus() 00748 self.recResults[recEnergyQualName][0]=recTrigger.energyQuality() 00749 self.recResults[recPosQualName][0]= recTrigger.positionQuality() 00750 self.recResults[recDirQualName][0]=recTrigger.directionQuality() 00751 return 00752 00753 def finalize(self):
def DataQuality::Tools::TesToTreeAlg::finalize | ( | self | ) |