| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

RawEventTree.py

Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 #
00003 # Example script to make a ROOT tree containing raw ADC/TDC PMT data.
00004 #
00005 # Usage:
00006 #  nuwa.py -A None -n -1 -m"Quickstart.RawEventTree" daq.NoTag.....data
00007 # 
00008 
00009 # Load GaudiPython
00010 from DybPython.DybPythonAlg import DybPythonAlg
00011 from GaudiPython import SUCCESS, FAILURE
00012 from GaudiPython import gbl, loaddict
00013 from DybPython.Util import irange
00014 
00015 # Make shortcuts to ROOT classes
00016 TTree = gbl.TTree
00017 
00018 Detector = gbl.DayaBay.Detector
00019 Site = gbl.Site
00020 DetectorId = gbl.DetectorId
00021 ServiceMode = gbl.ServiceMode
00022 AdPmtSensor = gbl.DayaBay.AdPmtSensor
00023 
00024 from array import array
00025 import math
00026 
00027 class TesToTreeAlg(DybPythonAlg):
00028     "Dump TES contents to ROOT tree"
00029     def __init__(self,name):
00030         DybPythonAlg.__init__(self,name)
00031         # List of headers in output tree
00032         self.HeaderList = ["Readout"]
00033         return
00034 
00035     def initialize(self):
00036         status = DybPythonAlg.initialize(self)
00037         if status.isFailure(): return status
00038         self.info("initialize")
00039 
00040         # Cable Service: This service provides a mapping between
00041         # electronics channels and pmts in the detector.
00042         self.cableSvc = self.svc('ICableSvc','StaticCableSvc')
00043         if self.cableSvc == None:
00044             self.error("Failed to get StaticCableSvc")
00045             return FAILURE
00046         
00047         self.firstEntry = True
00048         
00049         self.tesTree= TTree("eventTree","Event data converted to ROOT Tree")
00050 
00051         self.initReadoutHeader()
00052 
00053         self.stats['/file0/event/eventTree'] = self.tesTree
00054         return SUCCESS
00055 
00056     def initReadoutHeader(self):
00057         # ReadoutEvent Data
00058         self.hasRo = array('i',[0])
00059         self.roTimeSec = array('i',[0])
00060         self.roTimeNanoSec = array('i',[0])
00061         self.hasReadout = array('i',[0])
00062         self.roSite = array('i',[0])
00063         self.roDetector = array('i',[0])
00064         self.roTriggerNumber = array('i',[0])
00065         self.roTriggerTimeSec = array('i',[0])
00066         self.roTriggerTimeNanoSec = array('i',[0])
00067         self.nRoChannels = array('i',[0])
00068         self.nRoTdcs = array('i',[0])
00069         self.nRoAdcs = array('i',[0])
00070         self.maxRoTdcs = 4096
00071         self.roBoard = array('i',self.maxRoTdcs*[0])
00072         self.roConnector = array('i',self.maxRoTdcs*[0])
00073         self.roTdc = array('i',self.maxRoTdcs*[0])
00074         self.maxRoAdcs = 4096
00075         self.roAdcClock = array('i',self.maxRoAdcs*[0])
00076         self.roAdc = array('i',self.maxRoAdcs*[0])
00077         self.roPed = array('i',self.maxRoAdcs*[0])
00078         self.roAdcGain = array('i',self.maxRoAdcs*[0])
00079         self.roRing = array('i',self.maxRoTdcs*[0])
00080         self.roColumn = array('i',self.maxRoTdcs*[0])
00081         
00082         self.tesTree.Branch('hasReadoutHeader',self.hasRo,'hasReadoutHeader/I')
00083         self.tesTree.Branch('roTimeSec',self.roTimeSec,'roTimeSec/I')
00084         self.tesTree.Branch('roTimeNanoSec',self.roTimeNanoSec,
00085                             'roTimeNanoSec/I')
00086         self.tesTree.Branch('hasReadout',self.hasReadout,'hasReadout/I')
00087         self.tesTree.Branch('site',self.roSite,'site/I')
00088         self.tesTree.Branch('detector',self.roDetector,'detector/I')
00089         self.tesTree.Branch('triggerNumber',self.roTriggerNumber,
00090                             'triggerNumber/I')
00091         self.tesTree.Branch('triggerTimeSec',self.roTriggerTimeSec,
00092                             'triggerTimeSec/I')
00093         self.tesTree.Branch('triggerTimeNanoSec',self.roTriggerTimeNanoSec,
00094                             'triggerTimeNanoSec/I')
00095         self.tesTree.Branch('nChannels',self.nRoChannels,'nChannels/I')
00096         self.tesTree.Branch('nTdcs',self.nRoTdcs,'nTdcs/I')
00097         self.tesTree.Branch('nAdcs',self.nRoAdcs,'nAdcs/I')
00098         self.tesTree.Branch('board',self.roBoard,'board[nTdcs]/I')
00099         self.tesTree.Branch('connector',self.roConnector,
00100                             'connector[nTdcs]/I')
00101         self.tesTree.Branch('tdc',self.roTdc,'tdc[nTdcs]/I')
00102         self.tesTree.Branch('adcClock',self.roAdcClock,
00103                             'adcClock[nAdcs]/I')
00104         self.tesTree.Branch('adcGain',self.roAdcGain,
00105                             'adcGain[nAdcs]/I')
00106         self.tesTree.Branch('adc',self.roAdc,'adc[nAdcs]/I')
00107         self.tesTree.Branch('ped',self.roPed,'ped[nAdcs]/I')
00108         self.tesTree.Branch('ring',self.roRing,'ring[nTdcs]/I')
00109         self.tesTree.Branch('column',self.roColumn,
00110                             'column[nTdcs]/I')
00111 
00112     def execute(self):
00113         self.info("executing")
00114 
00115         self.writeReadoutHeader()
00116 
00117         self.tesTree.Fill()
00118         self.firstEntry = False
00119         return SUCCESS
00120 
00121     def writeReadoutHeader(self):
00122         # ReadoutEvent Data
00123         self.hasRo[0] = 0
00124         self.roTimeSec[0] = 0
00125         self.roTimeNanoSec[0] = 0
00126         self.hasReadout[0] = 0
00127         self.roSite[0] = 0
00128         self.roDetector[0] = 0
00129         self.roTriggerNumber[0] = 0
00130         self.roTriggerTimeSec[0] = 0
00131         self.roTriggerTimeNanoSec[0] = 0
00132         self.nRoChannels[0] = 0
00133         self.nRoTdcs[0] = 0
00134         self.nRoAdcs[0] = 0
00135 
00136         evt = self.evtSvc()
00137         # ReadoutEvent Data
00138         roHdr = evt["/Event/Readout/ReadoutHeader"]
00139         if roHdr != None:
00140             self.hasRo[0] = 1
00141             self.roTimeSec[0] = roHdr.timeStamp().GetSec()
00142             self.roTimeNanoSec[0] = roHdr.timeStamp().GetNanoSec()
00143             svcMode = ServiceMode( roHdr.context(), 0 )
00144             readout = roHdr.readout()
00145             if readout != None:
00146                 self.hasReadout[0] = 1
00147                 self.roSite[0] = readout.detector().site()
00148                 detId = readout.detector().detectorId()
00149                 self.roDetector[0] = detId
00150                 self.roTriggerNumber[0] = readout.triggerNumber()
00151                 trigTime = readout.triggerTime()
00152                 self.roTriggerTimeSec[0] = trigTime.GetSec()
00153                 self.roTriggerTimeNanoSec[0] = trigTime.GetNanoSec()
00154                 if (detId == DetectorId.kAD1 or
00155                     detId == DetectorId.kAD2 or
00156                     detId == DetectorId.kAD3 or
00157                     detId == DetectorId.kAD4):
00158                     nRoChannels = 0
00159                     nRoTdcs = 0
00160                     nRoAdcs = 0
00161                     for channelPair in readout.channelReadout():
00162                         channel = channelPair.second
00163                         chanId = channel.channelId()
00164                         for tdcIdx in range( channel.size() ):
00165                             self.roBoard[nRoTdcs] = chanId.board()
00166                             self.roConnector[nRoTdcs] = chanId.connector()
00167                             self.roTdc[nRoTdcs] = channel.tdc( tdcIdx )
00168                             self.roAdc[nRoAdcs] = channel.adc( tdcIdx )
00169                             self.roPed[nRoAdcs] = channel.pedestal( tdcIdx )
00170                             self.roAdcGain[nRoAdcs] = channel.adcRange( tdcIdx )
00171                             self.roAdcClock[nRoAdcs] = channel.adcCycle( tdcIdx )
00172                             # PMT Ring and Column
00173                             pmtId = self.cableSvc.adPmtSensor(chanId, svcMode)
00174                             self.roRing[nRoTdcs] = pmtId.ring()
00175                             self.roColumn[nRoTdcs] = pmtId.column()
00176                             nRoTdcs += 1
00177                             nRoAdcs += 1
00178                         nRoChannels += 1
00179                     self.nRoChannels[0] = nRoChannels
00180                     self.nRoTdcs[0] = nRoTdcs
00181                     self.nRoAdcs[0] = nRoAdcs
00182         return
00183         
00184     def finalize(self):        
00185         self.info("finalizing")
00186         status = DybPythonAlg.finalize(self)
00187         return status
00188 
00189 ###############################################################################
00190 
00191 def configure(argv = []):
00192     # Process module options
00193     import sys, getopt
00194     opts,args = getopt.getopt(argv,"o:")
00195     statsOutput = "eventTree.root"
00196     initializeDataSvc = True
00197     for opt,arg in opts:
00198         if opt == "-o":
00199             statsOutput = arg
00200     if statsOutput != "None":
00201         from StatisticsSvc.StatisticsSvcConf import StatisticsSvc
00202         statsSvc = StatisticsSvc()
00203         statsSvc.Output = {"file0":statsOutput}
00204     return
00205 
00206 def run(app):
00207     '''
00208     Configure and add an algorithm to job
00209     '''
00210     app.ExtSvc += ["StatisticsSvc","StaticCableSvc"]
00211     tesToTreeAlg = TesToTreeAlg("TesToTreeAlg")
00212     app.addAlgorithm(tesToTreeAlg)
00213     pass
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:11:13 2011 for Quickstart by doxygen 1.4.7