ATLAS Offline Software
HECNoiseD3PDMaker.py
Go to the documentation of this file.
1 # Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
2 
3 #
4 # D3PDMaker
5 #
6 # Author: Sven Menke
7 #
8 # this python alg creates a D3PD and fills it
9 #
10 import AthenaPython.PyAthena as PyAthena
11 import ROOT
12 from array import array
13 
15  def __init__ ( self, name, **kw ) :
16  PyAthena.Alg.__init__(self,name)
17  self.name = name
18  self.det = None
19  self.cond = None
20 
21 
22  self.MinDigitADC = kw.get('MinDigitADC', 20)
23  self.MaxDeltaT = kw.get('MaxDeltaT', 5)
24  self.NtupleFileName = kw.get('NtupleFileName', 'HECNoiseD3PD.root')
25  self.RequireTrigger = kw.get('RequireTrigger', False)
26  self.TriggerLines = kw.get('TriggerLines', ['HLT_noalg_L1EM20A',
27  'HLT_noalg_L1EM20C',
28  'L1_J12',
29  'L1_J30',
30  'L1_TAU5',
31  'L1_TAU8',
32  'L1_J5_EMPTY',
33  'L1_J10_EMPTY',
34  'L1_J12_EMPTY',
35  'L1_J30_EMPTY',
36  'L1_TAU5_EMPTY',
37  'L1_TAU8_EMPTY',
38  'L1_J5_FIRSTEMPTY',
39  'L1_J10_FIRSTEMPTY',
40  'L1_J12_FIRSTEMPTY',
41  'L1_J30_FIRSTEMPTY',
42  'L1_TAU5_FIRSTEMPTY',
43  'L1_TAU8_FIRSTEMPTY'])
44 
45  def initialize(self):
46  print ("==> initializing ", self.name)
47  print ("MinDigitADC: ", self.MinDigitADC)
48  print ("MaxDeltaT: ", self.MaxDeltaT)
49  print ("NtupleFileName: ", self.NtupleFileName)
50  print ("RequireTrigger: ", self.RequireTrigger)
51  print ("TriggerLines: ", self.TriggerLines)
52  #
53  self.sg = PyAthena.py_svc("StoreGateSvc")
54  self.cond = PyAthena.py_svc('StoreGateSvc/ConditionStore')
55  self.det = PyAthena.py_svc("StoreGateSve/DetectorStore")
56  self.LArOID = self.det.retrieve("LArOnlineID","LArOnlineID")
57  self.cid = self.det.retrieve("CaloCell_ID","CaloCell_ID")
58  self.tdt = PyAthena.py_tool('Trig::TrigDecisionTool/TrigDecisionTool')
59  self.ntfile = ROOT.TFile(self.NtupleFileName,"RECREATE")
60  self.hectree = ROOT.TTree("HECNoise","HECNoise")
61  self.iRun = array('i',[0])
62  self.iEvent = array('L',[0])
63  self.iEventCount = array('i',[0])
64  self.fPrescale = {}
65  self.iTrigger = {}
66  for tl in self.TriggerLines:
67  self.fPrescale[tl] = array('f',[0.0])
68  self.iTrigger[tl] = array('i',[0])
69  pass
70  self.iTime = array('i',[0])
71  self.iLB = array('i',[0])
72  self.iBCID = array('i',[0])
73  self.avgMu = array('f',[0.0])
74  self.actMu = array('f',[0.0])
75  self.iGain = array('i',[0])
76  self.iOID = array('L',[0])
77  self.iSide = array('i',[0])
78  self.iSamp = array('i',[0])
79  self.iReg = array('i',[0])
80  self.iEta = array('i',[0])
81  self.iPhi = array('i',[0])
82  self.iQuality = array('i',[0])
83  self.e = array('f',[0.0])
84  self.t = array('f',[0.0])
85  self.eta = array('f',[0.0])
86  self.phi = array('f',[0.0])
87  self.z = array('f',[0.0])
88  self.r = array('f',[0.0])
89  self.Ped = array('f',[0.0])
90  self.PedRMS = array('f',[0.0])
91  self.iDigi = array('i',32*[0])
92  self.iMax = array('i',[0])
93  self.iMin = array('i',[0])
94  #
95  self.hectree.Branch("iRun",self.iRun,"iRun/I")
96  self.hectree.Branch("iEvent",self.iEvent,"iEvent/I")
97  self.hectree.Branch("iEventCount",self.iEventCount,"iEventCount/I")
98 
99  for tl in self.TriggerLines:
100  self.hectree.Branch(tl+"_Prescale",self.fPrescale[tl],tl+"_Prescale/F")
101  self.hectree.Branch(tl+"_Trigger",self.iTrigger[tl],tl+"_Trigger/I")
102  pass
103  self.hectree.Branch("iTime",self.iTime,"iTime/I")
104  self.hectree.Branch("iLB",self.iLB,"iLB/I")
105  self.hectree.Branch("iBCID",self.iBCID,"iBCID/I")
106  self.hectree.Branch("avgMu",self.avgMu,"avgMu/F")
107  self.hectree.Branch("actMu",self.actMu,"actMu/F")
108  self.hectree.Branch("iGain",self.iGain,"iGain/I")
109  self.hectree.Branch("iOID",self.iOID,"iOID/l")
110  self.hectree.Branch("iSide",self.iSide,"iSide/I")
111  self.hectree.Branch("iSamp",self.iSamp,"iSamp/I")
112  self.hectree.Branch("iReg",self.iReg,"iReg/I")
113  self.hectree.Branch("iEta",self.iEta,"iEta/I")
114  self.hectree.Branch("iPhi",self.iPhi,"iPhi/I")
115  self.hectree.Branch("iQuality",self.iQuality,"iQuality/I")
116  self.hectree.Branch("e",self.e,"e/F")
117  self.hectree.Branch("t",self.t,"t/F")
118  self.hectree.Branch("eta",self.eta,"eta/F")
119  self.hectree.Branch("phi",self.phi,"phi/F")
120  self.hectree.Branch("z",self.z,"z/F")
121  self.hectree.Branch("r",self.r,"r/F")
122  self.hectree.Branch("Ped",self.Ped,"Ped/F")
123  self.hectree.Branch("PedRMS",self.PedRMS,"PedRMS/F")
124  self.hectree.Branch("iDigi",self.iDigi,"iDigi[32]/I")
125  self.hectree.Branch("iMax",self.iMax,"iMax/I")
126  self.hectree.Branch("iMin",self.iMin,"iMin/I")
127  #
128  return True
129 
130  def execute(self):
131  eid=ROOT.Gaudi.Hive.currentContext().eventID()
132  lcsCont = self.cond.retrieve("CondCont<LArOnOffIdMapping>","LArOnOffIdMap")
133  lcs=lcsCont.find(eid)
134  pedCont = self.cond.retrieve("CondCont<ILArPedestal>","LArPedestal")
135  ped=pedCont.find(eid)
136  cddCont = self.cond.retrieve("CondCont<CaloDetDescrManager>","CaloDetDescrManager")
137  cdd=cddCont.find(eid)
138  # filter low gain cells
139  passedTrigger = False
140  foundLowCell = False
141  for tl in self.TriggerLines:
142  self.fPrescale[tl][0] = self.tdt.getPrescale(tl)
143  if self.tdt.isPassed(tl):
144  passedTrigger = True
145  self.iTrigger[tl][0] = 1
146  pass
147  else:
148  self.iTrigger[tl][0] = 0
149  pass
150  pass
151  if passedTrigger or not self.RequireTrigger: # take only triggered events or all if RequireTrigger is False (default)
152  self.iEventCount[0] = 0
153  ldc = self.sg.retrieve("LArDigitContainer","LArDigitContainer_Thinned")
154  for ld in ldc:
155  hid = ld.hardwareID()
156  if self.LArOID.isHECchannel(hid):# and ld.gain() == 2:
157  sigmax=0
158  sigmin=0
159  imax=0
160  imin=0
161  isamp=0
162  samp0= ld.samples()[0]
163  for samp in ld.samples():
164  if isamp < 32:
165  self.iDigi[isamp] = samp
166  pass
167  if samp-samp0 > sigmax:
168  sigmax = samp-samp0
169  imax=isamp
170  pass
171  if samp-samp0 < sigmin:
172  sigmin = samp-samp0
173  imin=isamp
174  pass
175  isamp = isamp+1
176  pass
177  if sigmax > self.MinDigitADC and sigmin < -self.MinDigitADC and ( (imin-imax) < self.MaxDeltaT or imin < imax):
178  foundLowCell = True
179  ei = self.sg.retrieve("xAOD::EventInfo","EventInfo")
180  cc = self.sg.retrieve("CaloCellContainer","AllCalo")
181  self.iRun[0] = ei.runNumber()
182  self.iEvent[0] = ei.eventNumber()
183  self.iEventCount[0] = self.iEventCount[0]+1
184  self.iTime[0] = ei.timeStamp()
185  self.iLB[0] = ei.lumiBlock()
186  self.iBCID[0] = ei.bcid()
187  self.avgMu[0] = ei.averageInteractionsPerCrossing()
188  self.actMu[0] = ei.actualInteractionsPerCrossing()
189  self.iGain[0] = ld.gain()
190  oid = lcs.cnvToIdentifier(hid)
191  self.iOID[0] = ld.channelID().get_compact()
192  self.Ped[0] = ped.pedestal(ld.channelID(),ld.gain())
193  self.PedRMS[0] = ped.pedestalRMS(ld.channelID(),ld.gain())
194  self.iSide[0] = self.cid.pos_neg(oid)
195  self.iSamp[0] = self.cid.sampling(oid)
196  self.iReg[0] = self.cid.region(oid)
197  self.iEta[0] = self.cid.eta(oid)
198  self.iPhi[0] = self.cid.phi(oid)
199  self.iMax[0] = imax
200  self.iMin[0] = imin
201  ihash = self.cid.calo_cell_hash(oid)
202  rcell = cc.findCell(ihash)
203  self.e[0] = 0.0
204  self.t[0] = 0.0
205  self.iQuality[0] = 0
206  if rcell.ID() != oid:
207  print ("Cell iHash does not match ...")
208  pass
209  else:
210  self.e[0] = rcell.e()
211  self.t[0] = rcell.time()
212  self.iQuality[0] = rcell.quality()
213  pass
214  cdde = cdd.get_element(oid)
215  self.eta[0] = cdde.eta()
216  self.phi[0] = cdde.phi()
217  self.z[0] = cdde.z()
218  self.r[0] = cdde.r()
219  self.hectree.Fill()
220  self.setFilterPassed(True)
221  pass
222  pass
223  pass
224  if foundLowCell:
225  print ('Event passed HECNoise Filter')
226  return True
227  pass
228  print ('Event failed HECNoise Filter')
229  self.setFilterPassed(False)
230  return True
231 
232  def finalize(self):
233  self.ntfile.Write()
234  self.ntfile.Close()
235  return True
236 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iMax
iMax
Definition: HECNoiseD3PDMaker.py:92
HECNoiseD3PDMaker.HECNoiseD3PDMaker.PedRMS
PedRMS
Definition: HECNoiseD3PDMaker.py:90
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iRun
iRun
Definition: HECNoiseD3PDMaker.py:61
HECNoiseD3PDMaker.HECNoiseD3PDMaker.Ped
Ped
Definition: HECNoiseD3PDMaker.py:89
PyAthena::Alg::initialize
virtual StatusCode initialize() override
Definition: PyAthenaAlg.cxx:60
PyAthena::Alg::execute
virtual StatusCode execute() override
Definition: PyAthenaAlg.cxx:93
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iQuality
iQuality
Definition: HECNoiseD3PDMaker.py:82
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iEventCount
iEventCount
Definition: HECNoiseD3PDMaker.py:63
HECNoiseD3PDMaker.HECNoiseD3PDMaker.z
z
Definition: HECNoiseD3PDMaker.py:87
HECNoiseD3PDMaker.HECNoiseD3PDMaker.name
name
Definition: HECNoiseD3PDMaker.py:17
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iEta
iEta
Definition: HECNoiseD3PDMaker.py:80
HECNoiseD3PDMaker.HECNoiseD3PDMaker.r
r
Definition: HECNoiseD3PDMaker.py:88
HECNoiseD3PDMaker.HECNoiseD3PDMaker
Definition: HECNoiseD3PDMaker.py:14
PyAthena::Alg::finalize
virtual StatusCode finalize() override
Definition: PyAthenaAlg.cxx:86
HECNoiseD3PDMaker.HECNoiseD3PDMaker.det
det
Definition: HECNoiseD3PDMaker.py:18
HECNoiseD3PDMaker.HECNoiseD3PDMaker.LArOID
LArOID
Definition: HECNoiseD3PDMaker.py:56
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iPhi
iPhi
Definition: HECNoiseD3PDMaker.py:81
HECNoiseD3PDMaker.HECNoiseD3PDMaker.phi
phi
Definition: HECNoiseD3PDMaker.py:86
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iTime
iTime
Definition: HECNoiseD3PDMaker.py:70
HECNoiseD3PDMaker.HECNoiseD3PDMaker.t
t
Definition: HECNoiseD3PDMaker.py:84
HECNoiseD3PDMaker.HECNoiseD3PDMaker.hectree
hectree
Definition: HECNoiseD3PDMaker.py:60
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iSide
iSide
Definition: HECNoiseD3PDMaker.py:77
HECNoiseD3PDMaker.HECNoiseD3PDMaker.RequireTrigger
RequireTrigger
Definition: HECNoiseD3PDMaker.py:25
HECNoiseD3PDMaker.HECNoiseD3PDMaker.sg
sg
Definition: HECNoiseD3PDMaker.py:53
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iDigi
iDigi
Definition: HECNoiseD3PDMaker.py:91
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iOID
iOID
Definition: HECNoiseD3PDMaker.py:76
HECNoiseD3PDMaker.HECNoiseD3PDMaker.MaxDeltaT
MaxDeltaT
Definition: HECNoiseD3PDMaker.py:23
HECNoiseD3PDMaker.HECNoiseD3PDMaker.actMu
actMu
Definition: HECNoiseD3PDMaker.py:74
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iReg
iReg
Definition: HECNoiseD3PDMaker.py:79
HECNoiseD3PDMaker.HECNoiseD3PDMaker.e
e
Definition: HECNoiseD3PDMaker.py:83
HECNoiseD3PDMaker.HECNoiseD3PDMaker.fPrescale
fPrescale
Definition: HECNoiseD3PDMaker.py:64
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iMin
iMin
Definition: HECNoiseD3PDMaker.py:93
array
HECNoiseD3PDMaker.HECNoiseD3PDMaker.MinDigitADC
MinDigitADC
cell cuts
Definition: HECNoiseD3PDMaker.py:22
HECNoiseD3PDMaker.HECNoiseD3PDMaker.TriggerLines
TriggerLines
Definition: HECNoiseD3PDMaker.py:26
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iEvent
iEvent
Definition: HECNoiseD3PDMaker.py:62
HECNoiseD3PDMaker.HECNoiseD3PDMaker.cond
cond
Definition: HECNoiseD3PDMaker.py:19
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iSamp
iSamp
Definition: HECNoiseD3PDMaker.py:78
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iGain
iGain
Definition: HECNoiseD3PDMaker.py:75
HECNoiseD3PDMaker.HECNoiseD3PDMaker.tdt
tdt
Definition: HECNoiseD3PDMaker.py:58
HECNoiseD3PDMaker.HECNoiseD3PDMaker.ntfile
ntfile
Definition: HECNoiseD3PDMaker.py:59
HECNoiseD3PDMaker.HECNoiseD3PDMaker.avgMu
avgMu
Definition: HECNoiseD3PDMaker.py:73
HECNoiseD3PDMaker.HECNoiseD3PDMaker.cid
cid
Definition: HECNoiseD3PDMaker.py:57
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iTrigger
iTrigger
Definition: HECNoiseD3PDMaker.py:65
PyAthena::Alg
Definition: PyAthenaAlg.h:33
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iBCID
iBCID
Definition: HECNoiseD3PDMaker.py:72
HECNoiseD3PDMaker.HECNoiseD3PDMaker.iLB
iLB
Definition: HECNoiseD3PDMaker.py:71
HECNoiseD3PDMaker.HECNoiseD3PDMaker.__init__
def __init__(self, name, **kw)
Definition: HECNoiseD3PDMaker.py:15
HECNoiseD3PDMaker.HECNoiseD3PDMaker.eta
eta
Definition: HECNoiseD3PDMaker.py:85
HECNoiseD3PDMaker.HECNoiseD3PDMaker.NtupleFileName
NtupleFileName
Definition: HECNoiseD3PDMaker.py:24