00001
00002 '''
00003 Usage:
00004 '''
00005
00006 from UserTagging.UserTaggingAlg import UserTaggingAlg
00007 from UserTagging.Models import Tag, Data, Int, Float
00008 from GaudiPython import SUCCESS, FAILURE
00009 from GaudiPython import gbl
00010
00011 class ADReadoutData(UserTaggingAlg):
00012 '''Add AD Readout (DaqFormat) Info to UserData'''
00013
00014
00015 def initTagList(self):
00016
00017
00018
00019
00020
00021 self.addTag('Dummy'
00022 ).addData('ADReadoutData', '/Event/UserData/AD/ADReadoutData'
00023 ).addInt('nChannels', 'nHits'
00024 ).addFloat('chargeSum')
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 self.cableSvc = self.svc('ICableSvc','StaticCableSvc')
00037 if self.cableSvc == None:
00038 self.error("Failed to get StaticCableSvc")
00039 return FAILURE
00040
00041
00042 def check(self, evt):
00043
00044
00045 ADTag = evt['/Event/UserTag/Detector/AD']
00046 if not ADTag:
00047 return False
00048
00049
00050 readoutHdr = evt['/Event/Readout/ReadoutHeader']
00051 if not readoutHdr:
00052 self.warning('cannot find readoutHdr')
00053 return
00054 self.SaveReadoutData(readoutHdr)
00055
00056
00057 self.tagIt('Dummy')
00058
00059
00060
00061
00062
00063 def SaveReadoutData(self, readoutHdr):
00064 '''Save Readout (DaqFormat) Info to UserData'''
00065
00066 nChannels = 0
00067 nHits = 0
00068 chargeSum = 0.
00069
00070
00071 svcMode = gbl.ServiceMode(readoutHdr.context(), 0)
00072 daqCrate = readoutHdr.daqCrate()
00073 pmtCrate = daqCrate.asPmtCrate()
00074
00075 for channel in pmtCrate.channelReadouts():
00076
00077 channelId = channel.channelId()
00078 board = channelId.board()
00079 connector = channelId.connector()
00080 pmtId = self.cableSvc.adPmtSensor(channelId, svcMode)
00081 ring = pmtId.ring()
00082 if ring == 0: continue
00083
00084 nChannels += 1
00085 nHits += channel.hitCount()
00086 for i in range(channel.hitCount()):
00087 adc = channel.adc(i)
00088 preAdc = channel.preAdcAvg(i)
00089
00090 if channel.isHighGainAdc(i):
00091 adc = adc - preAdc
00092 else:
00093 adc = (adc - preAdc) * 20
00094
00095 chargeSum += adc
00096
00097
00098
00099
00100 myData = self.getTag('Dummy').getData('ADReadoutData')
00101 myData.set("nChannels", nChannels
00102 ).set("nHits", nHits
00103 ).set("chargeSum", chargeSum)
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120 def configure(argv=[]):
00121 pass
00122
00123 def run(app):
00124 app.ExtSvc += ["StaticCableSvc"]
00125 myAlg = ADReadoutData("UserData::ADReadoutData")
00126 app.addAlgorithm(myAlg)
00127 pass
00128