ATLAS Offline Software
xAODVBFForwardJetsFilter.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 #include "GaudiKernel/PhysicalConstants.h"
7 #include "xAODJet/JetContainer.h"
9 
10 // Pt High --> Low
12 {
13 public:
14  bool operator()(const xAOD::Jet *t1, const xAOD::Jet *t2) const
15  {
16  return (t1->pt() > t2->pt());
17  }
18 };
19 
20 xAODVBFForwardJetsFilter::xAODVBFForwardJetsFilter(const std::string &name, ISvcLocator *pSvcLocator)
21  : GenFilter(name, pSvcLocator)
22 {
23  declareProperty("JetMinPt", m_JetMinPt = 10. * Gaudi::Units::GeV);
24  declareProperty("JetMaxEta", m_JetMaxEta = 5.);
25  declareProperty("NJets", m_NJets = 2);
26  declareProperty("Jet1MinPt", m_Jet1MinPt = 20. * Gaudi::Units::GeV);
27  declareProperty("Jet1MaxEta", m_Jet1MaxEta = 5.);
28  declareProperty("Jet2MinPt", m_Jet2MinPt = 10. * Gaudi::Units::GeV);
29  declareProperty("Jet2MaxEta", m_Jet2MaxEta = 5.);
30  declareProperty("UseOppositeSignEtaJet1Jet2", m_UseOppositeSignEtaJet1Jet2 = false);
31  declareProperty("MassJJ", m_MassJJ = 300. * Gaudi::Units::GeV);
32  declareProperty("DeltaEtaJJ", m_DeltaEtaJJ = 2.0);
33  declareProperty("UseLeadingJJ", m_UseLeadingJJ = false);
34  declareProperty("TruthJetContainer", m_TruthJetContainerName = "AntiKt4TruthJets");
35  declareProperty("LGMinPt", m_LGMinPt = 10. * Gaudi::Units::GeV);
36  declareProperty("LGMaxEta", m_LGMaxEta = 2.5);
37  declareProperty("DeltaRJLG", m_DeltaRJLG = 0.05);
38  declareProperty("RatioPtJLG", m_RatioPtJLG = 0.3);
39 }
40 
42 {
43  ATH_MSG_INFO("*** Jet selection ***");
44  ATH_MSG_INFO("xAOD::JetContainer=" << m_TruthJetContainerName);
45  ATH_MSG_INFO("JetMinPt=" << m_JetMinPt);
46  ATH_MSG_INFO("JetMaxEta=" << m_JetMaxEta);
47  ATH_MSG_INFO("*** Apply number of jets(=Nj)? ***");
48  ATH_MSG_INFO("NJets=" << m_NJets);
49  ATH_MSG_INFO("*** Leading 1st jet (Nj>=1) ***");
50  ATH_MSG_INFO("Jet1MinPt=" << m_Jet1MinPt);
51  ATH_MSG_INFO("Jet1MaxEta=" << m_Jet1MaxEta);
52  ATH_MSG_INFO("*** Leading 2nd jet (Nj>=2) ***");
53  ATH_MSG_INFO("Jet2MinPt=" << m_Jet2MinPt);
54  ATH_MSG_INFO("Jet2MaxEta=" << m_Jet2MaxEta);
55  ATH_MSG_INFO("*** 1st and 2nd jets in opposite eta region (Nj>=2) ***");
56  ATH_MSG_INFO("UseOppositeSignEtaJet1Jet2=" << m_UseOppositeSignEtaJet1Jet2);
57  ATH_MSG_INFO("*** Mass of JJ (Nj>=2) ***");
58  ATH_MSG_INFO("MassJJ=" << m_MassJJ);
59  ATH_MSG_INFO("*** DeltaEta of JJ (Nj>=2) ***");
60  ATH_MSG_INFO("DeltaEtaJJ=" << m_DeltaEtaJJ);
61  ATH_MSG_INFO("*** Use only 1st and 2nd jets ***");
62  ATH_MSG_INFO("UseLeadingJJ=" << m_UseLeadingJJ);
63  ATH_MSG_INFO("*** e/gamma/tau/ matching ***");
64  ATH_MSG_INFO("LGMinPt=" << m_LGMinPt);
65  ATH_MSG_INFO("LGMaxEta=" << m_LGMaxEta);
66  ATH_MSG_INFO("DeltaRJLG=" << m_DeltaRJLG);
67  ATH_MSG_INFO("RatioPtJLG=" << m_RatioPtJLG);
68 
69  if (m_Jet1MinPt >= 0.)
70  {
72  {
73  ATH_MSG_ERROR("Inconsistent filter condition (Jet1)");
74  return StatusCode::FAILURE;
75  }
76  }
77 
78  if (m_Jet2MinPt >= 0.)
79  {
81  {
82  ATH_MSG_ERROR("Inconsistent filter condition (Jet2)");
83  return StatusCode::FAILURE;
84  }
85  }
86 
87  return StatusCode::SUCCESS;
88 }
89 
91 {
92  const xAOD::JetContainer *truthjetTES;
94  ATH_MSG_DEBUG("xAOD::JetContainer size = " << truthjetTES->size());
95 
96 // Retrieve TruthGen container from xAOD Gen slimmer, contains all particles witout barcode_zero and
97 // duplicated barcode ones
98  const xAOD::TruthParticleContainer* xTruthParticleContainer;
99  if (evtStore()->retrieve(xTruthParticleContainer, "TruthGen").isFailure()) {
100  ATH_MSG_ERROR("No TruthParticle collection with name " << "TruthGen" << " found in StoreGate!");
101  return StatusCode::FAILURE;
102  }
103 
104  // Get MCTruth Photon/Electon/Tau(HadronicDecay)
105  std::vector<const xAOD::TruthParticle *> MCTruthPhotonList;
106  std::vector<const xAOD::TruthParticle *> MCTruthElectronList;
107  std::vector<CLHEP::HepLorentzVector> MCTruthTauList;
108  // Loop over all particles in the event
109  unsigned int nPart = xTruthParticleContainer->size();
110  for (unsigned int iPart = 0; iPart < nPart; ++iPart) {
111  const xAOD::TruthParticle* pitr = (*xTruthParticleContainer)[iPart];
112  // photon
113  if (MC::isPhoton(pitr) && MC::isStable(pitr) &&
114  pitr->pt() >= m_LGMinPt && std::abs(pitr->eta()) <= m_LGMaxEta)
115  {
116  MCTruthPhotonList.push_back(pitr);
117  ATH_MSG_INFO("photon pt(Gaudi::Units::GeV) = " << pitr->pt() / Gaudi::Units::GeV << " eta = " << pitr->eta());
118  }
119  // electon
120  if (MC::isElectron(pitr) && MC::isStable(pitr) &&
121  pitr->pt() >= m_LGMinPt && std::abs(pitr->eta()) <= m_LGMaxEta)
122  {
123  MCTruthElectronList.push_back(pitr);
124  ATH_MSG_INFO("electron pt(Gaudi::Units::GeV) = " << pitr->pt() / Gaudi::Units::GeV << " eta = " << pitr->eta());
125  }
126  // tau
127  if (MC::isTau(pitr) && MC::isPhysical(pitr))
128  {
129  auto tau = pitr;
130  int leptonic = 0;
131  for (size_t thisChild_id = 0; thisChild_id < tau->decayVtx()->nOutgoingParticles(); thisChild_id++)
132  {
133  auto child = tau->decayVtx()->outgoingParticle(thisChild_id);
134  if (child->prodVtx() != tau->decayVtx())
135  continue;
136  if (std::abs(child->pdgId()) == 12)
137  leptonic = 1;
138  if (std::abs(child->pdgId()) == 14)
139  leptonic = 2;
140  if (std::abs(child->pdgId()) == 15)
141  leptonic = 11;
142  }
143 
144  if (leptonic == 0)
145  {
146  CLHEP::HepLorentzVector nutau = sumDaughterNeutrinos(tau);
147  CLHEP::HepLorentzVector tauvis = CLHEP::HepLorentzVector(tau->px() - nutau.px(),
148  tau->py() - nutau.py(),
149  tau->pz() - nutau.pz(),
150  tau->e() - nutau.e());
151  if (tauvis.vect().perp() >= m_LGMinPt && std::abs(tauvis.vect().pseudoRapidity()) <= m_LGMaxEta)
152  {
153  MCTruthTauList.push_back(tauvis);
154  ATH_MSG_INFO("had-tau pt(Gaudi::Units::GeV) = " << tauvis.vect().perp() / Gaudi::Units::GeV << " eta = " << tauvis.vect().pseudoRapidity());
155  }
156  }
157  }
158  } //TruthParticel loop
159 
160 
161  // Select TruthJets
162  std::vector<const xAOD::Jet *> jetList;
163  for (xAOD::JetContainer::const_iterator it_truth = truthjetTES->begin(); it_truth != truthjetTES->end(); ++it_truth)
164  {
165  if ((*it_truth)->pt() > m_JetMinPt && std::abs((*it_truth)->eta()) < m_JetMaxEta)
166  {
167  jetList.push_back(*it_truth);
168  ATH_MSG_INFO("jet pt(Gaudi::Units::GeV) = " << (*it_truth)->pt() / Gaudi::Units::GeV << " eta = " << (*it_truth)->eta());
169  }
170  }
171 
172  // Remove e/gamma/tau(had) from TruthJets
173  removePseudoJets(jetList, MCTruthPhotonList, MCTruthElectronList, MCTruthTauList);
174  ATH_MSG_INFO("# of jets = " << jetList.size());
175  std::sort(jetList.begin(), jetList.end(), High2LowByJetClassPt());
176 
177  // Number of Jets
178  int flagNJets = -1;
179  if (m_NJets >= 1)
180  flagNJets = int(jetList.size()) >= m_NJets ? 1 : 0;
181 
182  // Leading 1st jet
183  int flag1stJet = -1;
184  if (m_Jet1MinPt >= 0.)
185  {
186  flag1stJet = 0;
187  if (jetList.size() >= 1)
188  {
189  const xAOD::Jet *j1 = jetList[0];
190  if (j1->pt() > m_Jet1MinPt && std::abs(j1->eta()) < m_Jet1MaxEta)
191  {
192  flag1stJet = 1;
193  }
194  }
195  }
196 
197  // Leading 2nd jet
198  int flag2ndJet = -1;
199  if (m_Jet2MinPt >= 0.)
200  {
201  flag2ndJet = 0;
202  if (jetList.size() >= 2)
203  {
204  const xAOD::Jet *j2 = jetList[1];
205  if (j2->pt() > m_Jet2MinPt && std::abs(j2->eta()) < m_Jet2MaxEta)
206  {
207  flag2ndJet = 1;
208  }
209  }
210  }
211 
212  // Sign of Eta
213  int flagSign = -1;
215  {
216  flagSign = 0;
217  if (jetList.size() >= 2)
218  {
219  const xAOD::Jet *j1 = jetList[0];
220  const xAOD::Jet *j2 = jetList[1];
221  if (j1->eta() * j2->eta() < 0.)
222  flagSign = 1;
223  }
224  }
225 
226  // DeltaEta and Mass of JJ
227  int flagJJ = -1;
228  if (m_DeltaEtaJJ >= 0. || m_MassJJ >= 0.)
229  {
230  flagJJ = 0;
231  if (jetList.size() >= 2)
232  {
233  int okDeltaEtaJJ = m_DeltaEtaJJ >= 0. ? 0 : 1;
234  int okMassJJ = m_MassJJ >= 0. ? 0 : 1;
235  for (unsigned i = 0; i < jetList.size() - 1; ++i)
236  {
237  for (unsigned j = i + 1; j < jetList.size(); ++j)
238  {
239  double dEta = std::abs(jetList[i]->eta() - jetList[j]->eta());
240  double Mjj = (jetList[i]->p4() + jetList[j]->p4()).M();
241  ATH_MSG_INFO("DeltaEtaJJ = " << dEta << " MassJJ(Gaudi::Units::GeV) = " << Mjj / Gaudi::Units::GeV << " (" << i << ", " << j << ")");
242  if (okDeltaEtaJJ == 0 && dEta > m_DeltaEtaJJ)
243  okDeltaEtaJJ = 1;
244  if (okMassJJ == 0 && Mjj > m_MassJJ)
245  okMassJJ = 1;
246  if (okDeltaEtaJJ && okMassJJ)
247  {
248  flagJJ = 1;
249  break;
250  }
251  if (m_UseLeadingJJ)
252  break;
253  }
254  if (flagJJ == 1)
255  break;
256  if (m_UseLeadingJJ)
257  break;
258  }
259  }
260  }
261 
262  ATH_MSG_INFO("NJets OK? : " << flagNJets);
263  ATH_MSG_INFO("1stJet OK? : " << flag1stJet);
264  ATH_MSG_INFO("2ndJet OK? : " << flag2ndJet);
265  ATH_MSG_INFO("Sign OK? : " << flagSign);
266  // cppcheck-suppress shiftNegative
267  ATH_MSG_INFO("JJ OK? : " << flagJJ);
268 
269  setFilterPassed(flagNJets != 0 && flag1stJet != 0 && flag2ndJet != 0 && flagSign != 0 && flagJJ != 0);
270  return StatusCode::SUCCESS;
271 }
272 
274 {
275  CLHEP::HepLorentzVector nu(0, 0, 0, 0);
276 
277  if ((std::abs(part->pdgId()) == 12) || (std::abs(part->pdgId()) == 14) || (std::abs(part->pdgId()) == 16))
278  {
279  nu.setPx(part->px());
280  nu.setPy(part->py());
281  nu.setPz(part->pz());
282  nu.setE(part->e());
283  return nu;
284  }
285 
286  if (!part->decayVtx())
287  return nu;
288 
289  for (size_t thisChild_id = 0; thisChild_id < part->decayVtx()->nOutgoingParticles(); thisChild_id++)
290  {
291  auto daughterparticle = part->decayVtx()->outgoingParticle(thisChild_id);
292  nu += sumDaughterNeutrinos(daughterparticle);
293  }
294  return nu;
295 }
296 
297 double xAODVBFForwardJetsFilter::getMinDeltaR(const xAOD::Jet *jet, std::vector<const xAOD::TruthParticle *> &list)
298 {
299  double minDR = 999.;
300  for (unsigned i = 0; i < list.size(); ++i)
301  {
302  if (list[i]->pt() != 0.)
303  {
304  double dphi = jet->phi() - list[i]->phi();
305  double deta = jet->eta() - list[i]->eta();
306  if (dphi > M_PI)
307  {
308  dphi -= 2. * M_PI;
309  }
310  if (dphi < -M_PI)
311  {
312  dphi += 2. * M_PI;
313  }
314  double dr = std::sqrt(deta * deta + dphi * dphi);
315  double ratio_pt = std::abs((jet->pt() - list[i]->pt()) / list[i]->pt());
316  if (ratio_pt < m_RatioPtJLG && dr < minDR)
317  minDR = dr;
318  }
319  }
320  return minDR;
321 }
322 
323 double xAODVBFForwardJetsFilter::getMinDeltaR(const xAOD::Jet *jet, std::vector<CLHEP::HepLorentzVector> &list)
324 {
325  double minDR = 999.;
326  for (unsigned i = 0; i < list.size(); ++i)
327  {
328  if (list[i].vect().perp() != 0.)
329  {
330  double dphi = jet->phi() - list[i].phi();
331  double deta = jet->eta() - list[i].vect().pseudoRapidity();
332  if (dphi > M_PI)
333  {
334  dphi -= 2. * M_PI;
335  }
336  if (dphi < -M_PI)
337  {
338  dphi += 2. * M_PI;
339  }
340  double dr = std::sqrt(deta * deta + dphi * dphi);
341  double ratio_pt = std::abs((jet->pt() - list[i].vect().perp()) / list[i].vect().perp());
342  if (ratio_pt < m_RatioPtJLG && dr < minDR)
343  minDR = dr;
344  }
345  }
346  return minDR;
347 }
348 
349 void xAODVBFForwardJetsFilter::removePseudoJets(std::vector<const xAOD::Jet *> &jetList,
350  std::vector<const xAOD::TruthParticle *> &MCTruthPhotonList,
351  std::vector<const xAOD::TruthParticle *> &MCTruthElectronList,
352  std::vector<CLHEP::HepLorentzVector> &MCTruthTauList)
353 {
354  std::vector<const xAOD::Jet *> orgJetList = jetList;
355  jetList.clear();
356  for (unsigned i = 0; i < orgJetList.size(); ++i)
357  {
358  const xAOD::Jet *jet = orgJetList[i];
359  double dR1 = getMinDeltaR(jet, MCTruthPhotonList);
360  double dR2 = getMinDeltaR(jet, MCTruthElectronList);
361  double dR3 = getMinDeltaR(jet, MCTruthTauList);
362  if (dR1 > m_DeltaRJLG && dR2 > m_DeltaRJLG && dR3 > m_DeltaRJLG)
363  jetList.push_back(jet);
364  }
365 }
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
perp
Scalar perp() const
perp method - perpenticular length
Definition: AmgMatrixBasePlugin.h:35
xAODVBFForwardJetsFilter::m_UseLeadingJJ
bool m_UseLeadingJJ
Definition: xAODVBFForwardJetsFilter.h:38
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
xAODVBFForwardJetsFilter::filterEvent
virtual StatusCode filterEvent()
Definition: xAODVBFForwardJetsFilter.cxx:90
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
xAODVBFForwardJetsFilter::m_Jet2MaxEta
double m_Jet2MaxEta
Definition: xAODVBFForwardJetsFilter.h:34
xAODVBFForwardJetsFilter::m_DeltaRJLG
double m_DeltaRJLG
Definition: xAODVBFForwardJetsFilter.h:41
High2LowByJetClassPt::operator()
bool operator()(const xAOD::Jet *t1, const xAOD::Jet *t2) const
Definition: xAODVBFForwardJetsFilter.cxx:14
xAODVBFForwardJetsFilter::filterInitialize
virtual StatusCode filterInitialize()
Definition: xAODVBFForwardJetsFilter.cxx:41
ALFA_EventTPCnv_Dict::t1
std::vector< ALFA_RawDataCollection_p1 > t1
Definition: ALFA_EventTPCnvDict.h:43
xAODVBFForwardJetsFilter.h
test_pyathena.pt
pt
Definition: test_pyathena.py:11
M_PI
#define M_PI
Definition: ActiveFraction.h:11
xAODVBFForwardJetsFilter::m_Jet1MaxEta
double m_Jet1MaxEta
Definition: xAODVBFForwardJetsFilter.h:32
xAODVBFForwardJetsFilter::removePseudoJets
void removePseudoJets(std::vector< const xAOD::Jet * > &jetList, std::vector< const xAOD::TruthParticle * > &MCTruthPhotonList, std::vector< const xAOD::TruthParticle * > &MCTruthElectronList, std::vector< CLHEP::HepLorentzVector > &MCTruthTauList)
Definition: xAODVBFForwardJetsFilter.cxx:349
xAODVBFForwardJetsFilter::m_JetMinPt
double m_JetMinPt
Definition: xAODVBFForwardJetsFilter.h:28
xAODVBFForwardJetsFilter::xAODVBFForwardJetsFilter
xAODVBFForwardJetsFilter(const std::string &name, ISvcLocator *pSvcLocator)
Definition: xAODVBFForwardJetsFilter.cxx:20
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:112
xAODVBFForwardJetsFilter::sumDaughterNeutrinos
CLHEP::HepLorentzVector sumDaughterNeutrinos(const xAOD::TruthParticle *tau)
Definition: xAODVBFForwardJetsFilter.cxx:273
xAODVBFForwardJetsFilter::m_NJets
int m_NJets
Definition: xAODVBFForwardJetsFilter.h:30
xAODVBFForwardJetsFilter::m_LGMaxEta
double m_LGMaxEta
Definition: xAODVBFForwardJetsFilter.h:40
MC::isPhysical
bool isPhysical(const T &p)
Definition: HepMCHelpers.h:32
AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
xAODVBFForwardJetsFilter::m_JetMaxEta
double m_JetMaxEta
Definition: xAODVBFForwardJetsFilter.h:29
GenFilter
Base class for event generator filtering modules.
Definition: GenFilter.h:30
jet
Definition: JetCalibTools_PlotJESFactors.cxx:23
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
doubleTestComp.j1
j1
Definition: doubleTestComp.py:21
lumiFormat.i
int i
Definition: lumiFormat.py:92
xAODVBFForwardJetsFilter::m_Jet1MinPt
double m_Jet1MinPt
Definition: xAODVBFForwardJetsFilter.h:31
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
xAOD::EgammaHelpers::isElectron
bool isElectron(const xAOD::Egamma *eg)
is the object an electron (not Fwd)
Definition: EgammaxAODHelpers.cxx:12
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:41
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
xAODVBFForwardJetsFilter::getMinDeltaR
double getMinDeltaR(const xAOD::Jet *jet, std::vector< const xAOD::TruthParticle * > &list)
Definition: xAODVBFForwardJetsFilter.cxx:297
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
isTau
bool isTau(const T &p)
Definition: AtlasPID.h:148
xAOD::TruthParticle_v1::decayVtx
const TruthVertex_v1 * decayVtx() const
The decay vertex of this particle.
xAODVBFForwardJetsFilter::m_LGMinPt
double m_LGMinPt
Definition: xAODVBFForwardJetsFilter.h:39
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
xAOD::TruthParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: TruthParticle_v1.cxx:174
xAODVBFForwardJetsFilter::m_RatioPtJLG
double m_RatioPtJLG
Definition: xAODVBFForwardJetsFilter.h:42
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
ALFA_EventTPCnv_Dict::t2
std::vector< ALFA_RawDataContainer_p1 > t2
Definition: ALFA_EventTPCnvDict.h:44
xAODVBFForwardJetsFilter::m_Jet2MinPt
double m_Jet2MinPt
Definition: xAODVBFForwardJetsFilter.h:33
xAODVBFForwardJetsFilter::m_MassJJ
double m_MassJJ
Definition: xAODVBFForwardJetsFilter.h:37
High2LowByJetClassPt
Definition: VBFForwardJetsFilter.cxx:12
MC::isStable
bool isStable(const T &p)
Definition: HepMCHelpers.h:30
JetContainer.h
xAODVBFForwardJetsFilter::m_UseOppositeSignEtaJet1Jet2
bool m_UseOppositeSignEtaJet1Jet2
Definition: xAODVBFForwardJetsFilter.h:35
xAOD::EgammaHelpers::isPhoton
bool isPhoton(const xAOD::Egamma *eg)
is the object a photon
Definition: EgammaxAODHelpers.cxx:21
xAODVBFForwardJetsFilter::m_TruthJetContainerName
std::string m_TruthJetContainerName
Definition: xAODVBFForwardJetsFilter.h:44
xAOD::TruthParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TruthParticle_v1.cxx:166
TauGNNUtils::Variables::Track::dEta
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Definition: TauGNNUtils.cxx:525
xAODVBFForwardJetsFilter::m_DeltaEtaJJ
double m_DeltaEtaJJ
Definition: xAODVBFForwardJetsFilter.h:36
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
xAOD::TruthVertex_v1::outgoingParticle
const TruthParticle_v1 * outgoingParticle(size_t index) const
Get one of the outgoing particles.
Definition: TruthVertex_v1.cxx:121
doubleTestComp.j2
j2
Definition: doubleTestComp.py:22
HepMCHelpers.h
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.