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

In This Package:

UserTagging::UserData::GenData::GenData Class Reference

Inheritance diagram for UserTagging::UserData::GenData::GenData:
[legend]
Collaboration diagram for UserTagging::UserData::GenData::GenData:
[legend]
List of all members.

Public Member Functions

def initTagList
def check
def SaveGenData
def __init__
def initialize
def addTag
def getTag
def tagIt
def reset
def config
def save
def execute
def finalPrint
def finalize

Public Attributes

 target_de_name
 genTypes

Detailed Description

Add Generator Info to UserData

Definition at line 17 of file GenData.py.


Member Function Documentation

def UserTagging::UserData::GenData::GenData::initTagList (   self  ) 

Child Class should overwrite this function.
Child Class should initialize UserTag and UserData here

example adding Tag:
self.addTag('AD' , '/Event/UserTag/Detector/AD')

or alternative (pythonic) syntax:
self.tagSet.AD  = Tag('/Event/UserTag/Detector/AD')

example adding a Dummy Tag and UserData:
self.addTag('Dummy', ''
    ).addData('ADReadoutData', '/Event/UserData/AD/ADReadoutData'
    ).addInt('nChannels', 'nHits'
    ).addFloat('chargeSum')

or alternative (pythonic) syntax:
self.tagSet.Dummy = Tag()
self.tagSet.Dummy.dataSet.ADReadoutData = Data('/Event/UserData/AD/ADReadoutData')
paraSet = self.tagSet.Dummy.dataSet.ADReadoutData.paraSet
paraSet.nChannels = Int()
paraSet.nHits = Int()
paraSet.chargeSum = Float()

Reimplemented from UserTagging::UserTaggingAlg::UserTaggingAlg.

Definition at line 21 of file GenData.py.

00021                          :
00022         # for details see doc-6020
00023         #
00024         # generator info, size of nGen
00025         # positon from first vtx
00026         # nVtx is the number of 'real primary' particles of each generator
00027         # IBD event has nVtx = 1 : nu_e_bar
00028         # Radioactive event nVtx > 1 for correlated decay events
00029         # Muon event nVtx = 1 : one out-going muon
00030         #
00031         # the first incoming particles of each vtx info, size of nVtxTotal, or 0 (muon)
00032         # for IBD, pid = [-12] for nu_e
00033         #          KE = KE for nu_e
00034         # for radioactive event, pid = [parent nuclei]
00035         # for radioactive event, t[j] - t[i] tells the correlation time
00036         # nOut[i] is the number of out-going particles at each primary vertex
00037         # nOut[i] == 2 for IBD 
00038         # nIn[i] should be 1, but 0 for muons
00039         #
00040         # outgoing particles info, size of nOutTotal
00041         # for IBD, out_pid = [-11, 2112]
00042         # for radioactive event, out_pid = [daughter nucliei+decay particles]
00043         self.addTag('Dummy', ''
00044             ).addData('GenData', '/Event/UserData/General/GenData'
00045             ).addInt('nGen', 'nVtxTotal', 'nOutTotal'
00046             ).addIntArray('genType', 'nVtx'
00047             ).addFloatArray('genX', 'genY', 'genZ'
00048             ).addIntArray('nIn', 'nOut', 'in_pid', 'out_pid'
00049             ).addFloatArray('in_x', 'in_y', 'in_z', 'in_t', 'in_KE', 'in_px', 'in_py', 'in_pz'
00050             ).addFloatArray('out_x', 'out_y', 'out_z', 'out_t', 'out_KE', 'out_px', 'out_py', 'out_pz')
00051                
00052         self.target_de_name = '/dd/Structure/AD/db-ade1/db-sst1/db-oil1'
00053         
00054         self.genTypes = {
00055             "IBD_gds":11, "IBD_lso":12, "IBD_oil":13, "IBD_acrylic":14,           
00056             "U238_gds":21, "U238_lso":22, "U238_PMT":23, "U238_sst":24,
00057             "Th232_gds":31, "Th232_lso":32, "Th232_PMT":33, "Th232_sst":34,
00058             "K40_gds":41, "K40_lso":42, "K40_PMT":43, "K40_sst":44,
00059             "Co60_sst":54,
00060         }
00061         
00062     # ----------------------------------------
    def check(self, evt):

def UserTagging::UserData::GenData::GenData::check (   self,
  evt 
)

Child Class should overwrie this function

Reimplemented from UserTagging::UserTaggingAlg::UserTaggingAlg.

Definition at line 63 of file GenData.py.

00063                         :
00064 
00065         readoutHdr = evt['/Event/Readout/ReadoutHeader']
00066         if not readoutHdr:
00067             self.warning('cannot find readoutHdr')
00068             return
00069         
00070         genHdrs = readoutHdr.findHeaders(gbl.DayaBay.GenHeader.classID())
00071         self.SaveGenData(genHdrs)
00072         
00073         self.tagIt('Dummy')
00074         
00075     # ----------------------------------------
    def SaveGenData(self, genHdrs):

def UserTagging::UserData::GenData::GenData::SaveGenData (   self,
  genHdrs 
)

Definition at line 76 of file GenData.py.

00076                                   :
00077 
00078         myData = self.getTag('Dummy').getData('GenData')
00079 
00080         de = self.getDet(self.target_de_name)
00081         if not de:
00082             self.info('Failed to get DE' + self.target_de_name)
00083             return FAILURE
00084         Gaudi = PyCintex.makeNamespace('Gaudi')
00085                                 
00086         # number of generators associated with this readout
00087         # nGen should be one except for pile-up events    
00088         nGen = len(genHdrs) 
00089         # total number of 'real primary' particles (vtx)
00090         nVtxTotal = 0
00091         # total number of outgoing particles
00092         nOutTotal = 0
00093  
00094         for genHdr in genHdrs:
00095             genName = genHdr.generatorName()
00096             self.debug("genName:" + genName)
00097             myData.append('genType', self.genTypes.get(genName, 0))
00098             
00099             nVtx = 0
00100             genEvt = genHdr.event()
00101             for vtx in irange(genEvt.vertices_begin(), genEvt.vertices_end()):
00102                 # do stuff with the vertex
00103                 nVtx += 1
00104                 nVtxTotal += 1
00105                 position = vtx.position()
00106                 genGlbPoint = Gaudi.XYZPoint(
00107                     position.x(), 
00108                     position.y(),
00109                     position.z()
00110                 )
00111                 genLclPoint = de.geometry().toLocal(genGlbPoint)
00112                 myData.append('in_x', genLclPoint.x()/units.mm)
00113                 myData.append('in_y', genLclPoint.y()/units.mm)
00114                 myData.append('in_z', genLclPoint.z()/units.mm)
00115                 myData.append('in_t', vtx.position().t()/units.microsecond)
00116                 
00117                 if nVtx == 1:
00118                     myData.append('genX', genLclPoint.x()/units.mm)
00119                     myData.append('genY', genLclPoint.y()/units.mm)
00120                     myData.append('genZ', genLclPoint.z()/units.mm)
00121                                 
00122                 nIn = 0    
00123                 for particle in irange(vtx.particles_in_const_begin(),
00124                                       vtx.particles_in_const_end()):
00125                     # do stuff with the incoming particles
00126                     nIn += 1
00127                     if nIn == 1:                  
00128                         myData.append('in_pid', particle.pdg_id())
00129                         momentum = particle.momentum()
00130                         myData.append('in_KE', (momentum.e() - momentum.m())/units.MeV)
00131                         myData.append('in_px', momentum.px()/units.MeV)
00132                         myData.append('in_py', momentum.py()/units.MeV)
00133                         myData.append('in_pz', momentum.pz()/units.MeV)
00134                 myData.append('nIn', nIn)
00135                 
00136                 nOut = 0
00137                 for particle in irange(vtx.particles_out_const_begin(),
00138                                        vtx.particles_out_const_end()):
00139                     # do stuff with the outgoing particles
00140                     nOut += 1
00141                     nOutTotal += 1
00142                     myData.append('out_pid', particle.pdg_id())
00143                     momentum = particle.momentum()
00144                     myData.append('out_KE', (momentum.e() - momentum.m())/units.MeV)
00145                     myData.append('out_px', momentum.px()/units.MeV)
00146                     myData.append('out_py', momentum.py()/units.MeV)
00147                     myData.append('out_pz', momentum.pz()/units.MeV)
00148                                  
00149                 myData.append('nOut', nOut)
00150                     
00151             myData.append('nVtx', nVtx)
00152 
00153         # set more user data
00154         myData.set("nGen", nGen
00155             ).set("nVtxTotal", nVtxTotal
00156             ).set("nOutTotal", nOutTotal)
00157         
00158         # print 'genX: ', myData.get('genX')
00159             
#####  Job Configuration for nuwa.py ########################################

def UserTagging::UserTaggingAlg::UserTaggingAlg::__init__ (   self,
  name 
) [inherited]

Definition at line 13 of file UserTaggingAlg.py.

00014                                                          :
00015     
00016                                 UserTaggingAlg
00017                                       |
00018                                       |
00019                                ----------------
00020                                |              |
00021                                |              |
00022                              tagSet      'other members ...'
                               |

def UserTagging::UserTaggingAlg::UserTaggingAlg::initialize (   self  )  [inherited]

User need not implement, but if so, you must call this method on the
super-class

Definition at line 23 of file UserTaggingAlg.py.

00055                            :
        DybPythonAlg.__init__(self,name)

def UserTagging::UserTaggingAlg::UserTaggingAlg::addTag (   self,
  name,
  path = '' 
) [inherited]

Add one UserTag by name, provide a path to cause the tag
object to be sent through I/O.

Can also do:

  self.tagSet.<name> = Models.Tag([path])

Definition at line 72 of file UserTaggingAlg.py.

00072                              : return status
00073                 
00074         # self.tagSet = {}
00075         self.tagSet = TagSet()
00076         
00077         status = self.initTagList()
00078         if status == FAILURE: 
00079             self.error('error in initTagList() function')
00080             return FAILURE
00081         
00082         self.execNumber = 1
00083         

def UserTagging::UserTaggingAlg::UserTaggingAlg::getTag (   self,
  name 
) [inherited]

Look the UserTagHeader a tag by name.

Can also do:

  mytag = self.tagSet.<name>

Definition at line 84 of file UserTaggingAlg.py.

00087                          :
00088         '''
00089         Child Class should overwrite this function.
00090         Child Class should initialize UserTag and UserData here
00091         
00092         example adding Tag:
00093         self.addTag('AD' , '/Event/UserTag/Detector/AD')
00094         
        or alternative (pythonic) syntax:

def UserTagging::UserTaggingAlg::UserTaggingAlg::tagIt (   self,
  name 
) [inherited]

Tag the named UserTag.

Can also do:

  self.tagSet.<name>.tagIt()

Definition at line 95 of file UserTaggingAlg.py.

00095                                         :
00096         self.tagSet.AD  = Tag('/Event/UserTag/Detector/AD')
00097         
00098         example adding a Dummy Tag and UserData:
00099         self.addTag('Dummy', ''
00100             ).addData('ADReadoutData', '/Event/UserData/AD/ADReadoutData'
00101             ).addInt('nChannels', 'nHits'
00102             ).addFloat('chargeSum')
00103         
00104         or alternative (pythonic) syntax:
00105         self.tagSet.Dummy = Tag()
        self.tagSet.Dummy.dataSet.ADReadoutData = Data('/Event/UserData/AD/ADReadoutData')

def UserTagging::UserTaggingAlg::UserTaggingAlg::reset (   self  )  [inherited]

Reset the Tag States

Definition at line 106 of file UserTaggingAlg.py.

00114                                    :
00115         """
00116         Add one UserTag by name, provide a path to cause the tag
00117         object to be sent through I/O.
00118 
00119         Can also do:

def UserTagging::UserTaggingAlg::UserTaggingAlg::config (   self,
  evt 
) [inherited]

Configure the UserTagHeader and UserDataHeader object
Child class can overwrite depends on the situation.

The "evt" is the transient event store object.

Definition at line 136 of file UserTaggingAlg.py.

00137                          :
00138         """
00139         Tag the named UserTag.
00140 
00141         Can also do:
00142         
00143           self.tagSet.<name>.tagIt()
00144         """
00145         return self.tagSet.get(name).tagIt()
00146             
00147     # --------------------------------------
00148     def reset(self):
00149         '''Reset the Tag States'''
00150         
00151         for tag in self.tagSet.all():
00152             if tag.isTagged:
00153                 if tag.path:
00154                     tag.header = gbl.DayaBay.HeaderObject()
00155                     ROOT.SetOwnership(tag.header,False)
00156                 for data in tag.dataSet.all():
00157                     data.header = gbl.DayaBay.UserDataHeader()
00158                     ROOT.SetOwnership(data.header,False)
00159                 tag.isTagged = False
00160                     
00161     # --------------------------------------
00162     def check(self, evt):
00163         '''Child Class should overwrie this function'''
00164         # all the real logics/algorithms happen here:
        # - check the properties of the event headers, run some algorithms.

def UserTagging::UserTaggingAlg::UserTaggingAlg::save (   self,
  evt 
) [inherited]

Save the UserTag and UserData objects

Most subclass should not override.

Definition at line 165 of file UserTaggingAlg.py.

00178                          :
00179         '''
00180         Configure the UserTagHeader and UserDataHeader object
00181         Child class can overwrite depends on the situation.
00182 
00183         The "evt" is the transient event store object.
        '''

def UserTagging::UserTaggingAlg::UserTaggingAlg::execute (   self  )  [inherited]

Definition at line 184 of file UserTaggingAlg.py.

00186                                     :
00187             if tag.isTagged:
00188                 baseHeader = evt[tag.baseHeader]
00189                 if not baseHeader:
00190                     self.error(tag.baseHeader + ' does not exist')
00191                     return FAILURE
00192                 if tag.path:
00193                     tagHeader = tag.header    
00194                     tagHeader.setExecNumber(baseHeader.execNumber())
00195                     tagHeader.setContext(baseHeader.context())
00196                     tagHeader.setEarliest(baseHeader.earliest())
00197                     tagHeader.setLatest(baseHeader.latest())
00198                     
00199                 for data in tag.dataSet.all():
00200                     dataHeader = data.header
00201                     dataHeader.setExecNumber(baseHeader.execNumber())
00202                     dataHeader.setContext(baseHeader.context())
00203                     dataHeader.setEarliest(baseHeader.earliest())
00204                     dataHeader.setLatest(baseHeader.latest())
00205 
00206     # --------------------------------------
00207     def save(self, evt):
00208         '''
00209         Save the UserTag and UserData objects
00210 
00211         Most subclass should not override.
00212         '''
        

def UserTagging::UserTaggingAlg::UserTaggingAlg::finalPrint (   self  )  [inherited]

Print how many tagged events

Definition at line 213 of file UserTaggingAlg.py.

00214                                     :
00215             if tag.isTagged:
00216                 tag.nTagged += 1
00217                 if tag.path:
00218                     evt[tag.path] = tag.header
00219                     del tag.header
00220                 for data in tag.dataSet.all():
00221                     data.save()
                    evt[data.path] = data.header

def UserTagging::UserTaggingAlg::UserTaggingAlg::finalize (   self  )  [inherited]

Definition at line 222 of file UserTaggingAlg.py.

00226                      :
00227         'Subclass should not override'
00228                     
00229         evt = self.evtSvc()
        


Member Data Documentation

UserTagging::UserData::GenData::GenData::target_de_name

Definition at line 52 of file GenData.py.

UserTagging::UserData::GenData::GenData::genTypes

Definition at line 54 of file GenData.py.


The documentation for this class was generated from the following file:
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

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