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 |
Add Generator Info to UserData
Definition at line 17 of file GenData.py.
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.
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 52 of file GenData.py.
Definition at line 54 of file GenData.py.