00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 from DybPython.DybPythonAlg import DybPythonAlg
00014 from GaudiPython import SUCCESS, FAILURE
00015 from GaudiPython import gbl
00016 from DybPython.Util import irange
00017 import GaudiKernel.SystemOfUnits as units
00018
00019
00020 TH1F = gbl.TH1F
00021 TimeStamp = gbl.TimeStamp
00022 FeeChannelId = gbl.DayaBay.FeeChannelId
00023 Detector = gbl.DayaBay.Detector
00024
00025
00026 gbl.gStyle.SetHistLineColor(4)
00027 gbl.gStyle.SetHistLineWidth(2)
00028 gbl.gStyle.SetMarkerColor(4)
00029 gbl.gStyle.SetMarkerStyle(8)
00030 gbl.gStyle.SetPalette(1)
00031
00032
00033 class PrintRawDataAlg(DybPythonAlg):
00034 "Print Raw Data Example Algorithm"
00035 def __init__(self,name):
00036 DybPythonAlg.__init__(self,name)
00037 return
00038
00039 def initialize(self):
00040 status = DybPythonAlg.initialize(self)
00041 if status.isFailure(): return status
00042 self.info("initializing")
00043
00044
00045 self.stats["/file1/myhists/adcSum"] = TH1F("adcSum",
00046 "Sum of raw ADC values for each trigger",
00047 2000,0,20000)
00048 return SUCCESS
00049
00050 def execute(self):
00051 self.info("executing")
00052
00053 evt = self.evtSvc()
00054
00055
00056 readoutHdr = evt["/Event/Readout/ReadoutHeader"]
00057 if readoutHdr == None:
00058 self.error("Failed to get current readout header")
00059 return FAILURE
00060
00061
00062 readout = readoutHdr.daqCrate().asPmtCrate()
00063 if readout == None:
00064 self.info("No readout this cycle")
00065 return SUCCESS
00066
00067
00068 detector = readout.detector()
00069 self.info("Detector Name: "+detector.detName())
00070
00071
00072 self.info("Trigger Type: "+str( readout.triggerType() ))
00073
00074 self.info("Event Number: "+str( readout.eventNumber() ))
00075
00076
00077 triggerTime = readout.triggerTime()
00078
00079 self.info("Trigger Time [Seconds part]: "
00080 +str( triggerTime.GetSec() ))
00081
00082 self.info("Trigger Time [Nanoseconds part]: "
00083 +str( triggerTime.GetNanoSec() ))
00084
00085
00086 self.info("Full Trigger Time: "
00087 +str( triggerTime.GetSec()
00088 +triggerTime.GetNanoSec()*1.0e-9 ))
00089
00090
00091 adcSum = 0
00092 for channel in readout.channelReadouts():
00093 channelId = channel.channelId()
00094
00095
00096
00097 self.info("Channel ID:"
00098 +" detector="
00099 +channelId.detName()
00100 +" board="
00101 +str(channelId.board())
00102 +" connector="
00103 +str(channelId.connector()))
00104
00105
00106 for hitIdx in range( channel.hitCount() ):
00107
00108
00109
00110
00111
00112
00113
00114 tdc = channel.tdc( hitIdx )
00115 self.info("TDC value: "+str( tdc ))
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140 adc = channel.adc( hitIdx )
00141 preAdc = channel.preAdcAvg( hitIdx )
00142 peakCycle = channel.peakCycle( hitIdx )
00143 isHighGain = channel.isHighGainAdc( hitIdx )
00144 self.info("ADC value: "+str(adc)
00145 + " (preAdc: "+str( preAdc )+","
00146 + " peak cycle: "+str( peakCycle )+","
00147 + " isHighGain?: "+str( isHighGain )+")")
00148
00149 if isHighGain == 1:
00150 adcSum += (adc-preAdc)
00151 else:
00152
00153 adcSum += (adc-preAdc) * 19
00154
00155
00156 self.stats["/file1/myhists/adcSum"].Fill( adcSum )
00157 return SUCCESS
00158
00159 def finalize(self):
00160 self.info("finalizing")
00161 status = DybPythonAlg.finalize(self)
00162 return status
00163
00164
00165
00166 def configure( argv=[] ):
00167 """ Example of processing raw data """
00168
00169
00170 from StatisticsSvc.StatisticsSvcConf import StatisticsSvc
00171 statsSvc = StatisticsSvc()
00172 statsSvc.Output = {"file1":"rawDataResult.root"}
00173 return
00174
00175 def run(app):
00176 '''
00177 Configure and add the algorithm to job
00178 '''
00179 app.ExtSvc += ["StatisticsSvc"]
00180 myAlg = PrintRawDataAlg("MyPrintRawDataAlg")
00181 app.addAlgorithm(myAlg)
00182 pass
00183