17def xAODDigest(evt, counter=False, extravars=False):
18 result = list()
19
20 for i in range(0, evt.getEntries()):
21 if (counter and (i % 100) == 0):
22 print(
"Processing event %s" % i)
23
24 evt.getEntry(i)
25 ei = evt.retrieve("xAOD::EventInfo", "EventInfo")
26 runnbr = ei.runNumber()
27 evtnbr = ei.eventNumber()
28
29 clusters = safeRetrieve(
30 evt, "xAOD::CaloClusterContainer", "CaloCalTopoClusters")
31 nclus = len(clusters)
32
33 idTracks = safeRetrieve(evt,
34 "xAOD::TrackParticleContainer", "InDetTrackParticles")
35 nIdTracks = len(idTracks)
36
37 tautracks = safeRetrieve(evt, "xAOD::TauTrackContainer", "TauTracks")
38 nTauTracks = len(tautracks)
39 taus = safeRetrieve(evt, "xAOD::TauJetContainer", "TauJets")
40 nTaus = len(taus)
41 if taus:
42 tau1pt = taus[0].pt()
43 tau1eta = taus[0].
eta()
44 tau1phi = taus[0].
phi()
45 else:
46 tau1pt = tau1eta = tau1phi = 0
47
48 muons = safeRetrieve(evt, "xAOD::MuonContainer", "Muons")
49 nMuons = len(muons)
50 if muons:
51 muon1pt = muons[0].pt()
52 muon1eta = muons[0].
eta()
53 muon1phi = muons[0].
phi()
54 else:
55 muon1pt = muon1eta = muon1phi = 0
56
57 electrons = safeRetrieve(evt, "xAOD::ElectronContainer", "Electrons")
58 nElec = len(electrons)
59 if electrons:
60 elec1pt = electrons[0].pt()
61 elec1eta = electrons[0].
eta()
62 elec1phi = electrons[0].
phi()
63 else:
64 elec1pt = elec1eta = elec1phi = 0
65
66 photons = safeRetrieve(evt, "xAOD::PhotonContainer", "Photons")
67 nPhot = len(photons)
68 if photons:
69 phot1pt = photons[0].pt()
70 phot1eta = photons[0].
eta()
71 phot1phi = photons[0].
phi()
72 else:
73 phot1pt = phot1eta = phot1phi = 0
74
75 if extravars:
76 jets = safeRetrieve(evt,"xAOD::JetContainer", "AntiKt4EMPFlowJets")
77 nJet = len(jets)
78 if jets:
79 jet1pt = jets[0].pt()
80 jet1eta = jets[0].
eta()
81 jet1phi = jets[0].
phi()
82 else:
83 jet1pt = jet1eta = jet1phi = 0
84
85 met = safeRetrieve(evt,"xAOD::MissingETContainer", "MET_Reference_AntiKt4EMPFlow")
86 nmet = len(met)
87 if met:
88 metx = met[nmet-1].mpx()
89 mety = met[nmet-1].mpy()
90 sumet = met[nmet-1].sumet()
91 else:
92 metx = mety = sumet = 0
93
94 nTrueElectrons = 0
95 nTruePhotons = 0
96 acc = ROOT.SG.ConstAccessor(
97 'ElementLink< xAOD::TruthParticleContainer>')('truthParticleLink')
98
99 if nElec > 0 and acc.isAvailable(electrons.at(0)):
100 for i in range(nElec):
101 truthLink = acc(electrons.at(i))
102 if(truthLink.isValid()):
103 pdgId = truthLink.pdgId()
104 if abs(pdgId) == 11:
105 nTrueElectrons += 1
106
107 if nPhot > 0 and acc.isAvailable(photons.at(0)):
108 for i in range(nPhot):
109 truthLink = acc(photons.at(i))
110 if(truthLink.isValid()):
111 pdgId = truthLink.pdgId()
112 if (pdgId == 22):
113 nTruePhotons += 1
114
115 nFakeElectrons = nElec - nTrueElectrons
116 nFakePhotons = nPhot - nTruePhotons
117
118 if extravars:
119 result.append((runnbr, evtnbr, nclus, nIdTracks,
120 nTauTracks, nTaus, tau1pt, tau1eta, tau1phi,
121 nMuons, muon1pt, muon1eta, muon1phi,
122 nElec, elec1pt, elec1eta, elec1phi, nTrueElectrons, nFakeElectrons,
123 nPhot, phot1pt, phot1eta, phot1phi ,nTruePhotons, nFakePhotons,
124 nJet, jet1pt, jet1eta, jet1phi, nmet, metx, mety, sumet))
125 else:
126 result.append((runnbr, evtnbr, nclus, nIdTracks, nTauTracks, nTaus, nMuons,
127 nElec, nTrueElectrons, nFakeElectrons,
128 nPhot, nTruePhotons, nFakePhotons))
129
130 pass
131
132
133 result.sort(key=lambda er: er[0] << 32 | er[1])
134 return result
135
136
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method