ATLAS Offline Software
xAODVBFMjjIntervalFilter.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Header for this module
7 
9 #include "CLHEP/Random/RandomEngine.h"
10 #include "GaudiKernel/PhysicalConstants.h"
12 
13 // Pt High --> Low
15 {
16 public:
17  bool operator()(const xAOD::Jet *t1, const xAOD::Jet *t2) const
18  {
19  return (t1->pt() > t2->pt());
20  }
21 };
22 
23 xAODVBFMjjIntervalFilter::xAODVBFMjjIntervalFilter(const std::string &name, ISvcLocator *pSvcLocator)
24  : GenFilter(name, pSvcLocator),
25  m_norm(1.) //< @todo Scalefactor always set to 1.0! Remove?
26 {
27  declareProperty("RapidityAcceptance", m_yMax = 5.0);
28  declareProperty("MinSecondJetPT", m_pTavgMin = 15.0 * Gaudi::Units::GeV);
29  declareProperty("MinOverlapPT", m_olapPt = 15.0 * Gaudi::Units::GeV);
30  declareProperty("TruthJetContainerName", m_TruthJetContainerName = "AntiKt4TruthJets");
31  // declareProperty("DoShape", m_doShape = true);
32  declareProperty("NoJetProbability", m_prob0 = 0.0002);
33  declareProperty("OneJetProbability", m_prob1 = 0.001);
34  declareProperty("LowMjjProbability", m_prob2low = 0.005);
35  declareProperty("HighMjjProbability", m_prob2high = 1.0);
36  declareProperty("LowMjj", m_mjjlow = 100.0 * Gaudi::Units::GeV);
37  declareProperty("TruncateAtLowMjj", m_truncatelowmjj = false);
38  declareProperty("HighMjj", m_mjjhigh = 800.0 * Gaudi::Units::GeV);
39  declareProperty("TruncateAtHighMjj", m_truncatehighmjj = false);
40  declareProperty("PhotonJetOverlapRemoval", m_photonjetoverlap = false);
41  declareProperty("ElectronJetOverlapRemoval", m_electronjetoverlap = true);
42  declareProperty("TauJetOverlapRemoval", m_taujetoverlap = false);
44  declareProperty("ApplyNjet", m_ApplyNjet = false);
45  declareProperty("Njets", m_NJetsMin = 2);
46  declareProperty("NjetsMax", m_NJetsMax = -1);
47  declareProperty("ApplyWeighting", m_ApplyWeighting = true);
48  declareProperty("ApplyDphi", m_applyDphi = false);
49  declareProperty("dphijjMax", m_dphijj = 2.5);
50 }
51 
53 {
54  ATH_MSG_INFO("Configured for jets in " << m_TruthJetContainerName << " inside |y|<" << m_yMax);
55 
56  CHECK(m_rndmSvc.retrieve());
57 
59  ATH_MSG_INFO("m_alpha set to" << m_alpha);
60  return StatusCode::SUCCESS;
61 }
62 
64 {
65  // Get random number engine
66  const EventContext& ctx = Gaudi::Hive::currentContext();
67  CLHEP::HepRandomEngine* rndm = this->getRandomEngine(name(), ctx);
68  if (!rndm)
69  {
70  ATH_MSG_ERROR("Failed to retrieve random number engine xAODVBFMjjIntervalFilter");
71  setFilterPassed(false);
72  return StatusCode::SUCCESS;
73  }
74 
75  // Retrieve jet container
76  const xAOD::JetContainer* truthJetCollection = 0;
77  if (!evtStore()->contains<xAOD::JetContainer>(m_TruthJetContainerName) ||
78  evtStore()->retrieve(truthJetCollection, m_TruthJetContainerName).isFailure() ||
79  !truthJetCollection)
80  {
81  ATH_MSG_ERROR("No xAOD::JetContainer found in StoreGate with key " << m_TruthJetContainerName);
82  setFilterPassed(false);
83  return StatusCode::SUCCESS;
84  }
85 
86 // Retrieve TruthGen container from xAOD Gen slimmer, contains all particles witout barcode_zero and
87 // duplicated barcode ones
88  const xAOD::TruthParticleContainer* xTruthParticleContainer;
89  if (evtStore()->retrieve(xTruthParticleContainer, "TruthGen").isFailure()) {
90  ATH_MSG_ERROR("No TruthParticle collection with name " << "TruthGen" << " found in StoreGate!");
91  return StatusCode::FAILURE;
92  }
93 
94 
95  // Find overlap objects
96  std::vector<const xAOD::TruthParticle *> MCTruthPhotonList;
97  std::vector<const xAOD::TruthParticle *> MCTruthElectronList;
98  std::vector<TLorentzVector> MCTruthTauList;
99 
100  // Loop over all particles in the event
101  unsigned int nPart = xTruthParticleContainer->size();
102  for (unsigned int iPart = 0; iPart < nPart; ++iPart) {
103  const xAOD::TruthParticle* pitr = (*xTruthParticleContainer)[iPart];
104 
105  if (m_photonjetoverlap == true)
106  {
107  // photon - copied from VBFForwardJetsFilter.cxx
108  if (MC::isPhoton(pitr) && MC::isStable(pitr) &&
109  pitr->pt() >= m_olapPt &&
110  std::abs(pitr->eta()) <= m_yMax)
111  {
112  MCTruthPhotonList.push_back(pitr);
113  }
114  }
115  if (m_electronjetoverlap == true)
116  {
117  // electron
118  if (MC::isElectron(pitr) && MC::isStable(pitr) &&
119  pitr->pt() >= m_olapPt &&
120  std::abs(pitr->eta()) <= m_yMax)
121  {
122  MCTruthElectronList.push_back(pitr);
123  }
124  }
125  if (m_taujetoverlap == true)
126  {
127  // tau - copied from VBFForwardJetsFilter.cxx
128  if (MC::isTau(pitr) && MC::isPhysical(pitr))
129  {
130  auto tau = pitr;
131  int leptonic = 0;
132  for (size_t thisChild_id = 0; thisChild_id < tau->decayVtx()->nOutgoingParticles(); thisChild_id++)
133  {
134  auto child = tau->decayVtx()->outgoingParticle(thisChild_id);
135  if (child->prodVtx() != tau->decayVtx())
136  continue;
137  if (std::abs(child->pdgId()) == 12)
138  leptonic = 1;
139  if (std::abs(child->pdgId()) == 14)
140  leptonic = 2;
141  if (std::abs(child->pdgId()) == 15)
142  leptonic = 11;
143  }
144 
145  if (leptonic == 0)
146  {
147  TLorentzVector nutau = sumDaughterNeutrinos(tau);
148  TLorentzVector tauvis = TLorentzVector(tau->px() - nutau.Px(),
149  tau->py() - nutau.Py(),
150  tau->pz() - nutau.Pz(),
151  tau->e() - nutau.E());
152  if (tauvis.Vect().Perp() >= m_olapPt && std::abs(tauvis.Vect().PseudoRapidity()) <= m_yMax)
153  {
154  MCTruthTauList.push_back(tauvis);
155  }
156  }
157  }
158  }
159  } //loop over truth particles
160 
161 
162  // Filter based on rapidity acceptance and sort
164  for (xAOD::JetContainer::const_iterator jitr = truthJetCollection->begin(); jitr != truthJetCollection->end(); ++jitr)
165  {
166  if (std::abs((*jitr)->rapidity()) < m_yMax && (*jitr)->pt() >= m_olapPt)
167  {
168  bool JetOverlapsWithPhoton = false;
169  bool JetOverlapsWithElectron = false;
170  bool JetOverlapsWithTau = false;
171 
172  if (m_photonjetoverlap == true)
173  {
174  JetOverlapsWithPhoton = checkOverlap((*jitr)->rapidity(), (*jitr)->phi(), MCTruthPhotonList);
175  }
176  if (m_electronjetoverlap == true)
177  {
178  JetOverlapsWithElectron = checkOverlap((*jitr)->rapidity(), (*jitr)->phi(), MCTruthElectronList);
179  }
180  if (m_taujetoverlap == true)
181  {
182  JetOverlapsWithTau = checkOverlap((*jitr)->rapidity(), (*jitr)->phi(), MCTruthTauList);
183  }
184 
185  if (!JetOverlapsWithPhoton && !JetOverlapsWithElectron && !JetOverlapsWithTau)
186  {
187  filteredJets.push_back(*jitr);
188  }
189  }
190  }
191  filteredJets.sort(High2LowByJetClassPt());
192 
193  if (m_ApplyWeighting)
194  {
195 
196  double eventWeight = 1.0;
197  eventWeight = getEventWeight(&filteredJets);
198  double rnd = rndm->flat();
199  if (1.0 / eventWeight < rnd)
200  {
201  setFilterPassed(false);
202  ATH_MSG_DEBUG("Event failed weighting. Weight is " << eventWeight);
203  return StatusCode::SUCCESS;
204  }
205 
206  // Get MC event collection for setting weight
207  const McEventCollection* mecc = 0;
208  if (evtStore()->retrieve(mecc).isFailure() || !mecc)
209  {
210  setFilterPassed(false);
211  ATH_MSG_ERROR("Could not retrieve MC Event Collection - weight might not work");
212  return StatusCode::SUCCESS;
213  }
214 
215  ATH_MSG_INFO("Event passed. Will weight events " << eventWeight * m_norm);
216  McEventCollection *mec = const_cast<McEventCollection *>(&(*mecc));
217  for (unsigned int i = 0; i < mec->size(); ++i)
218  {
219  if (!(*mec)[i])
220  continue;
221  double existingWeight = (*mec)[i]->weights().size() > 0 ? (*mec)[i]->weights()[0] : 1.;
222  if ((*mec)[i]->weights().size() > 0)
223  {
224  for (unsigned int iw = 0; iw < (*mec)[i]->weights().size(); ++iw) {
225  double existWeight = (*mec)[i]->weights()[iw];
226  (*mec)[i]->weights()[iw] = existWeight * eventWeight * m_norm;
227  }
228 //
229 // (*mec)[i]->weights()[0] = existingWeight * eventWeight * m_norm;
230  }
231  else
232  {
233  (*mec)[i]->weights().push_back(eventWeight * m_norm * existingWeight);
234  }
235 
236 #ifdef HEPMC3
237  (*mec)[i]->add_attribute("filterWeight", std::make_shared<HepMC3::DoubleAttribute>(eventWeight*m_norm));
238 #endif
239 
240  }
241  } // Apply weighting
242  else
243  {
244  // just compute mjj, dphi etc
245  bool pass = ApplyMassDphi(&filteredJets);
246  if (!pass)
247  {
248  setFilterPassed(false);
249  ATH_MSG_DEBUG("Event failed filter");
250  return StatusCode::SUCCESS;
251  }
252  if (m_ApplyNjet)
253  {
254  if (filteredJets.size() < m_NJetsMin)
255  {
256  setFilterPassed(false);
257  return StatusCode::SUCCESS;
258  }
259  if (m_NJetsMax > 0)
260  {
261  if (filteredJets.size() > m_NJetsMax)
262  {
263  setFilterPassed(false);
264  return StatusCode::SUCCESS;
265  }
266  } // Njets <
267  } // Apply Njets filter
268  }
269  // Made it to the end - success!
270  setFilterPassed(true);
271  return StatusCode::SUCCESS;
272 }
273 
274 bool xAODVBFMjjIntervalFilter::checkOverlap(double eta, double phi, const std::vector<const xAOD::TruthParticle *> &list)
275 {
276  for (size_t i = 0; i < list.size(); ++i)
277  {
278  double pt = list[i]->pt();
279  if (pt > m_olapPt)
280  {
282  double dphi = phi - list[i]->phi();
283  double deta = eta - list[i]->eta();
284  if (dphi > M_PI)
285  {
286  dphi -= 2. * M_PI;
287  }
288  if (dphi < -M_PI)
289  {
290  dphi += 2. * M_PI;
291  }
292  double dr = std::sqrt(deta * deta + dphi * dphi);
293  if (dr < 0.3)
294  return true;
295  }
296  }
297  return false;
298 }
299 
300 bool xAODVBFMjjIntervalFilter::checkOverlap(double eta, double phi, const std::vector<TLorentzVector> &list)
301 {
302  for (size_t i = 0; i < list.size(); ++i)
303  {
304  double pt = list[i].Vect().Perp();
305  if (pt > m_olapPt)
306  {
308  double dphi = phi - list[i].Phi();
309  double deta = eta - list[i].Vect().PseudoRapidity();
310  if (dphi > M_PI)
311  {
312  dphi -= 2. * M_PI;
313  }
314  if (dphi < -M_PI)
315  {
316  dphi += 2. * M_PI;
317  }
318  double dr = std::sqrt(deta * deta + dphi * dphi);
319  if (dr < 0.3)
320  return true;
321  }
322  }
323  return false;
324 }
325 
327 {
328  if (jets->size() < 2)
329  return false;
330  double mjj = (jets->at(0)->p4() + jets->at(1)->p4()).M();
331  double dphi = std::abs(jets->at(0)->p4().DeltaPhi(jets->at(1)->p4()));
332  ATH_MSG_INFO("mjj " << mjj << " dphi " << dphi);
333  bool pass = true;
334  if (mjj < m_mjjlow)
335  pass = false;
336  if (mjj > m_mjjhigh)
337  pass = false;
338  if (m_applyDphi && dphi > m_dphijj)
339  pass = false;
340 
341  return pass;
342 }
343 
345 {
346  double weight = 1.0;
347  if (jets->size() == 0)
348  {
349  weight /= m_prob0;
350  ATH_MSG_DEBUG("Event in 0-jet weighting. Weight is " << weight);
351  }
352  else if (jets->size() == 1)
353  {
354  weight /= m_prob1;
355  ATH_MSG_DEBUG("Event in 1-jet weighting. Weight is " << weight);
356  }
357  else
358  {
359  double mjj = (jets->at(0)->p4() + jets->at(1)->p4()).M();
360  if (mjj < m_mjjlow)
361  {
362  if (m_truncatelowmjj == false)
363  {
364  weight /= m_prob2low;
365  }
366  else
367  {
368  weight = -1.0;
369  }
370  }
371  else if (mjj > m_mjjhigh)
372  {
373  if (m_truncatehighmjj == false)
374  {
375  weight /= m_prob2high;
376  }
377  else
378  {
379  weight = -1.0;
380  }
381  }
382  else
383  {
385  ATH_MSG_DEBUG("WEIGHTING:: " << mjj << "\t" << weight);
386  }
387  }
388  return weight;
389 }
390 
392 {
393  TLorentzVector nu(0, 0, 0, 0);
394 
395  if ((std::abs(part->pdgId()) == 12) || (std::abs(part->pdgId()) == 14) || (std::abs(part->pdgId()) == 16))
396  {
397  nu.SetPx(part->px());
398  nu.SetPy(part->py());
399  nu.SetPz(part->pz());
400  nu.SetE(part->e());
401  return nu;
402  }
403 
404  if (!part->decayVtx())
405  return nu;
406 
407  for (size_t thisChild_id = 0; thisChild_id < part->decayVtx()->nOutgoingParticles(); thisChild_id++)
408  {
409  auto daughterparticle = part->decayVtx()->outgoingParticle(thisChild_id);
410  nu += sumDaughterNeutrinos(daughterparticle);
411  }
412  return nu;
413 }
414 
415 
416 CLHEP::HepRandomEngine* xAODVBFMjjIntervalFilter::getRandomEngine(const std::string& streamName,
417  const EventContext& ctx) const
418 {
419  ATHRNG::RNGWrapper* rngWrapper = m_rndmSvc->getEngine(this, streamName);
420  std::string rngName = name()+streamName;
421  rngWrapper->setSeed( rngName, ctx );
422  return rngWrapper->getEngine(ctx);
423 }
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
ATHRNG::RNGWrapper::setSeed
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
Definition: RNGWrapper.h:169
xAODVBFMjjIntervalFilter::m_rndmSvc
ServiceHandle< IAthRNGSvc > m_rndmSvc
Definition: xAODVBFMjjIntervalFilter.h:34
xAODVBFMjjIntervalFilter::getEventWeight
double getEventWeight(ConstDataVector< xAOD::JetContainer > *jets) const
Definition: xAODVBFMjjIntervalFilter.cxx:344
xAODVBFMjjIntervalFilter::m_NJetsMin
unsigned int m_NJetsMin
Definition: xAODVBFMjjIntervalFilter.h:61
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
xAODVBFMjjIntervalFilter::m_ApplyWeighting
bool m_ApplyWeighting
Definition: xAODVBFMjjIntervalFilter.h:63
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
High2LowByJetClassPt::operator()
bool operator()(const xAOD::Jet *t1, const xAOD::Jet *t2) const
Definition: xAODVBFMjjIntervalFilter.cxx:17
ALFA_EventTPCnv_Dict::t1
std::vector< ALFA_RawDataCollection_p1 > t1
Definition: ALFA_EventTPCnvDict.h:43
test_pyathena.pt
pt
Definition: test_pyathena.py:11
M_PI
#define M_PI
Definition: ActiveFraction.h:11
xAODVBFMjjIntervalFilter::m_yMax
double m_yMax
Definition: xAODVBFMjjIntervalFilter.h:37
python.TurnDataReader.dr
dr
Definition: TurnDataReader.py:112
xAODVBFMjjIntervalFilter::xAODVBFMjjIntervalFilter
xAODVBFMjjIntervalFilter(const std::string &name, ISvcLocator *pSvcLocator)
Definition: xAODVBFMjjIntervalFilter.cxx:23
xAODVBFMjjIntervalFilter::m_photonjetoverlap
bool m_photonjetoverlap
Definition: xAODVBFMjjIntervalFilter.h:56
xAODVBFMjjIntervalFilter::m_mjjhigh
double m_mjjhigh
Definition: xAODVBFMjjIntervalFilter.h:54
xAODVBFMjjIntervalFilter::m_norm
double m_norm
Definition: xAODVBFMjjIntervalFilter.h:45
xAODVBFMjjIntervalFilter::m_TruthJetContainerName
std::string m_TruthJetContainerName
Definition: xAODVBFMjjIntervalFilter.h:39
dqt_zlumi_pandas.weight
int weight
Definition: dqt_zlumi_pandas.py:200
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
GenFilter
Base class for event generator filtering modules.
Definition: GenFilter.h:30
xAODVBFMjjIntervalFilter::filterEvent
virtual StatusCode filterEvent()
Definition: xAODVBFMjjIntervalFilter.cxx:63
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
xAODVBFMjjIntervalFilter::m_dphijj
double m_dphijj
Definition: xAODVBFMjjIntervalFilter.h:65
xAODVBFMjjIntervalFilter::sumDaughterNeutrinos
TLorentzVector sumDaughterNeutrinos(const xAOD::TruthParticle *)
Definition: xAODVBFMjjIntervalFilter.cxx:391
lumiFormat.i
int i
Definition: lumiFormat.py:92
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
xAODVBFMjjIntervalFilter::getRandomEngine
CLHEP::HepRandomEngine * getRandomEngine(const std::string &streamName, const EventContext &ctx) const
Definition: xAODVBFMjjIntervalFilter.cxx:416
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:41
xAODVBFMjjIntervalFilter::m_prob2high
double m_prob2high
Definition: xAODVBFMjjIntervalFilter.h:51
xAODVBFMjjIntervalFilter::m_prob0
double m_prob0
Definition: xAODVBFMjjIntervalFilter.h:48
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
McEventCollection
This defines the McEventCollection, which is really just an ObjectVector of McEvent objects.
Definition: McEventCollection.h:33
xAODVBFMjjIntervalFilter.h
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
xAODVBFMjjIntervalFilter::m_truncatehighmjj
bool m_truncatehighmjj
Definition: xAODVBFMjjIntervalFilter.h:55
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.
xAODVBFMjjIntervalFilter::m_electronjetoverlap
bool m_electronjetoverlap
Definition: xAODVBFMjjIntervalFilter.h:57
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
ATHRNG::RNGWrapper
A wrapper class for event-slot-local random engines.
Definition: RNGWrapper.h:56
xAODVBFMjjIntervalFilter::m_ApplyNjet
bool m_ApplyNjet
Definition: xAODVBFMjjIntervalFilter.h:60
ConstDataVector::push_back
value_type push_back(value_type pElem)
Add an element to the end of the collection.
xAOD::TruthParticle_v1::eta
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
Definition: TruthParticle_v1.cxx:174
xAODVBFMjjIntervalFilter::m_olapPt
double m_olapPt
Definition: xAODVBFMjjIntervalFilter.h:36
ATHRNG::RNGWrapper::getEngine
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Definition: RNGWrapper.h:134
RNGWrapper.h
xAODVBFMjjIntervalFilter::m_pTavgMin
double m_pTavgMin
Definition: xAODVBFMjjIntervalFilter.h:38
xAODVBFMjjIntervalFilter::m_alpha
double m_alpha
Definition: xAODVBFMjjIntervalFilter.h:59
xAODVBFMjjIntervalFilter::ApplyMassDphi
bool ApplyMassDphi(ConstDataVector< xAOD::JetContainer > *jets)
Definition: xAODVBFMjjIntervalFilter.cxx:326
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
High2LowByJetClassPt
Definition: VBFForwardJetsFilter.cxx:12
AthenaPoolExample_Copy.streamName
string streamName
Definition: AthenaPoolExample_Copy.py:39
MC::isStable
bool isStable(const T &p)
Definition: HepMCHelpers.h:30
ConstDataVector
DataVector adapter that acts like it holds const pointers.
Definition: ConstDataVector.h:76
xAOD::EgammaHelpers::isPhoton
bool isPhoton(const xAOD::Egamma *eg)
is the object a photon
Definition: EgammaxAODHelpers.cxx:21
xAODVBFMjjIntervalFilter::m_truncatelowmjj
bool m_truncatelowmjj
Definition: xAODVBFMjjIntervalFilter.h:53
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
xAOD::TruthParticle_v1::pt
virtual double pt() const override final
The transverse momentum ( ) of the particle.
Definition: TruthParticle_v1.cxx:166
defineDB.jets
list jets
Definition: JetTagCalibration/share/defineDB.py:24
xAODVBFMjjIntervalFilter::m_taujetoverlap
bool m_taujetoverlap
Definition: xAODVBFMjjIntervalFilter.h:58
xAODVBFMjjIntervalFilter::m_prob2low
double m_prob2low
Definition: xAODVBFMjjIntervalFilter.h:50
xAODVBFMjjIntervalFilter::m_prob1
double m_prob1
Definition: xAODVBFMjjIntervalFilter.h:49
xAODVBFMjjIntervalFilter::checkOverlap
bool checkOverlap(double, double, const std::vector< const xAOD::TruthParticle * > &)
Definition: xAODVBFMjjIntervalFilter.cxx:274
xAODVBFMjjIntervalFilter::m_mjjlow
double m_mjjlow
Definition: xAODVBFMjjIntervalFilter.h:52
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
xAODVBFMjjIntervalFilter::m_applyDphi
bool m_applyDphi
Definition: xAODVBFMjjIntervalFilter.h:64
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
xAODVBFMjjIntervalFilter::m_NJetsMax
unsigned int m_NJetsMax
Definition: xAODVBFMjjIntervalFilter.h:62
HepMCHelpers.h
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
xAODVBFMjjIntervalFilter::filterInitialize
virtual StatusCode filterInitialize()
Definition: xAODVBFMjjIntervalFilter.cxx:52