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

In This Package:

ADReadoutData.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
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         # 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('ADReadoutData', '/Event/UserData/AD/ADReadoutData'
00023             ).addInt('nChannels', 'nHits'
00024             ).addFloat('chargeSum')
00025         
00026         # or use Brett's preferred pythonic syntax:
00027         #
00028         # self.tagSet.Dummy = Tag()
00029         # self.tagSet.Dummy.dataSet.ADReadoutData = Data('/Event/UserData/AD/ADReadoutData')
00030         # paraSet = self.tagSet.Dummy.dataSet.ADReadoutData.paraSet
00031         # paraSet.nChannels = Int()
00032         # paraSet.nHits = Int()
00033         # paraSet.chargeSum = Float()
00034         
00035         # you can do other necessary initialization here
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         # check if this is an 'AD' event
00045         ADTag = evt['/Event/UserTag/Detector/AD']
00046         if not ADTag:
00047             return False
00048         
00049         # save some useful user data
00050         readoutHdr = evt['/Event/Readout/ReadoutHeader']
00051         if not readoutHdr:
00052             self.warning('cannot find readoutHdr')
00053             return
00054         self.SaveReadoutData(readoutHdr)            
00055         
00056         # tag the event so the user data can be saved
00057         self.tagIt('Dummy')
00058         
00059         # or use Brett's favorate syntax
00060         # self.tagSet.Dummy.tagIt()
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         # calculate the variables ...    
00071         svcMode = gbl.ServiceMode(readoutHdr.context(), 0)     
00072         daqCrate = readoutHdr.daqCrate()
00073         pmtCrate = daqCrate.asPmtCrate()
00074        
00075         for channel in pmtCrate.channelReadouts():
00076             # channel = channelPair.second
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   # exclude 2'' PMT
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         # save the variables to the User Data
00100         myData = self.getTag('Dummy').getData('ADReadoutData')
00101         myData.set("nChannels", nChannels       
00102             ).set("nHits", nHits
00103             ).set("chargeSum", chargeSum)
00104                     
00105         # or use Brett's preferred pythonic syntax
00106         #
00107         # myData = self.tagSet.Dummy.dataSet.ADReadoutData
00108         # paraSet = myData.paraSet
00109         # paraSet.nChannels = nChannels
00110         # paraSet.nHits = nHits
00111         # paraSet.chargeSum = chargeSum
00112         
00113         # you can print all branches of UserData
00114         # myData.dump()
00115         # or an individual branch
00116         # print 'nChannels', myData.get('nChannels')
00117                        
00118 #####  Job Configuration for nuwa.py ########################################
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             
| 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