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

In This Package:

ADChannelData.py

Go to the documentation of this file.
00001 #!/usr/bin/env python
00002 '''
00003 Usage:
00004 '''
00005 
00006 from UserTagging.UserTaggingAlg import UserTaggingAlg
00007 from UserTagging.Models import Tag, Data, Int, Float, IntArray, FloatArray
00008 from GaudiPython import SUCCESS, FAILURE
00009 from GaudiPython import gbl
00010 
00011 class ADChannelData(UserTaggingAlg):
00012     '''Add AD Channel Stats to UserData'''
00013     
00014     # ----------------------------------------    
00015     def initTagList(self):
00016         
00017         # Chao recommends method chaning since it's less typing and he is lazy.
00018         # A tag with no path (default to '') means no tag HeaderObject will be created
00019         # but this dummy tag is still need in order to manage the UserData 
00020         #
00021         self.addTag('Dummy', ''
00022             ).addData('ADChannelData', '/Event/UserData/AD/ADChannelData'
00023             ).addIntArray('board', 'connector', 'ring', 'column', 'hitCount'
00024             ).addFloatArray('adc0', 'preAdc0', 'charge0', 'tdc0', 'adcMax', 'charge')
00025 
00026         # or use Brett's preferred pythonic syntax:
00027         #
00028         # dummyTag = self.tagSet.Dummy = Tag()
00029         # myData = dummyTag.dataSet.ADChannelData = Data('/Event/UserData/AD/ADChannelData')
00030         #        
00031         # myData.paraSet.board     = IntArray()
00032         # myData.paraSet.connector = IntArray()
00033         # myData.paraSet.ring      = IntArray()
00034         # myData.paraSet.column    = IntArray()
00035         # myData.paraSet.hitCount  = IntArray()
00036         # 
00037         # myData.paraSet.adc0    = FloatArray()
00038         # myData.paraSet.preAdc0 = FloatArray()
00039         # myData.paraSet.charge0 = FloatArray()
00040         # myData.paraSet.tdc0    = FloatArray()
00041         # myData.paraSet.adcMax  = FloatArray()
00042         # myData.paraSet.charge  = FloatArray()
00043                 
00044         self.cableSvc = self.svc('ICableSvc','StaticCableSvc')
00045         if self.cableSvc == None:
00046             self.error("Failed to get StaticCableSvc")
00047             return FAILURE    
00048 
00049 
00050     # ----------------------------------------
00051     def check(self, evt):
00052         ADTag = evt['/Event/UserTag/Detector/AD']
00053         if not ADTag:
00054             return
00055         
00056         readoutHdr = evt['/Event/Readout/ReadoutHeader']
00057         if not readoutHdr:
00058             self.warning('cannot find readoutHdr')
00059             return
00060         self.SaveReadoutData(readoutHdr)        
00061         
00062         self.tagIt('Dummy')
00063                     
00064     # ----------------------------------------
00065     def SaveReadoutData(self, readoutHdr):
00066         
00067         myData = self.getTag('Dummy').getData('ADChannelData')
00068                 
00069         svcMode = gbl.ServiceMode(readoutHdr.context(), 0)     
00070         daqCrate = readoutHdr.daqCrate()
00071         pmtCrate = daqCrate.asPmtCrate();
00072                 
00073         nChannels = 0
00074         for channel in pmtCrate.channelReadouts():
00075             nChannels += 1
00076             channelId = channel.channelId()
00077             board     = channelId.board()
00078             connector = channelId.connector()
00079             pmtId     = self.cableSvc.adPmtSensor(channelId, svcMode)
00080             ring      = pmtId.ring()
00081             column    = pmtId.column()
00082             
00083             myData.append('board', board
00084                 ).append('connector', connector
00085                 ).append('ring', ring
00086                 ).append('column', column
00087                 ).append('hitCount', channel.hitCount())
00088                 
00089             # or use Brett's preferred pythonic syntax:
00090             # myData.paraSet.board.append(board)
00091             # myData.paraSet.connector.append(connector)
00092             # myData.paraSet.ring.append(ring)
00093             # myData.paraSet.column.append(column)
00094             # myData.paraSet.hitCount.append(channel.hitCount())
00095                 
00096             adc0 = channel.adc(0)
00097             preAdc0 = channel.preAdcAvg(0)
00098             if channel.isHighGainAdc(0):
00099                 charge0 = adc0 - preAdc0
00100             else:
00101                 charge0 = (adc0 - preAdc0) * 20
00102             tdc0 = channel.tdc(0)
00103             
00104             myData.append('adc0', adc0
00105                 ).append('preAdc0', preAdc0
00106                 ).append('charge0', charge0
00107                 ).append('tdc0', tdc0)
00108                      
00109             adcMax = adc0
00110             charge = charge0
00111             for i in range(1, channel.hitCount()):
00112                 adc = channel.adc(i)
00113                 preAdc = channel.preAdcAvg(i)
00114 
00115                 if channel.isHighGainAdc(i):
00116                     if (adc > adcMax): adcMax = adc 
00117                     charge += (adc - preAdc)
00118                 else:
00119                     if (adc*20 > adcMax): adcMax = adc*20
00120                     charge += (adc - preAdc) * 20
00121                     
00122             myData.append('adcMax', adcMax
00123                 ).append('charge', charge)
00124         
00125         # you can print all branches of UserData    
00126         # myData.dump()
00127         # or an individual branch
00128         # print 'charge: ', myData.get('charge')
00129             
00130                 
00131 #####  Job Configuration for nuwa.py ########################################
00132 
00133 def configure(argv=[]):
00134     pass
00135 
00136 def run(app):
00137     app.ExtSvc += ["StaticCableSvc"]
00138     myAlg = ADChannelData("UserData::ADChannelData")
00139     app.addAlgorithm(myAlg)
00140     pass
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:10:48 2011 for UserTagging by doxygen 1.4.7