ATLAS Offline Software
GenParticleInteractingFilter.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // GenParticleInteractingFilter.cxx, (c) ATLAS Detector software
8 
9 // class header include
11 
12 // HepMC includes
13 #include "AtlasHepMC/GenParticle.h"
14 #include "AtlasHepMC/Flow.h"
15 
16 // Helper function
18 
21  const std::string& n,
22  const IInterface* p )
23  : base_class(t,n,p)
24 {
25  declareProperty("AdditionalInteractingParticleTypes", m_additionalInteractingParticleTypes);
26  declareProperty("AdditionalNonInteractingParticleTypes", m_additionalNonInteractingParticleTypes);
27 }
28 
30 {
31  if(m_additionalInteractingParticleTypes.empty()) {
32  ATH_MSG_DEBUG("No additional particle types will be classified as interacting.");
33  }
34  else {
35  ATH_MSG_DEBUG("Will classify particles with the following additional PDG codes as interacting:");
36  for(const auto& pdg_id : m_additionalInteractingParticleTypes) {
37  ATH_MSG_DEBUG(" " << pdg_id);
38  }
39  }
40  if(m_additionalNonInteractingParticleTypes.empty()) {
41  ATH_MSG_DEBUG("No additional particle types will be classified as non-interacting.");
42  }
43  else {
44  ATH_MSG_DEBUG("Will classify particles with the following additional PDG codes as non-interacting:");
45  for(const auto& pdg_id : m_additionalNonInteractingParticleTypes) {
46  ATH_MSG_DEBUG(" " << pdg_id);
47  }
48  }
49  if (!m_additionalInteractingParticleTypes.empty() && !m_additionalNonInteractingParticleTypes.empty()) {
50  //Insanity check
51  bool clash(false);
52  for (const auto& pdg_id : m_additionalInteractingParticleTypes) {
53  if (find(m_additionalNonInteractingParticleTypes.begin(),
54  m_additionalNonInteractingParticleTypes.end(),
55  pdg_id) != m_additionalNonInteractingParticleTypes.end())
56  {
57  ATH_MSG_ERROR("Particle with PDG code " << pdg_id << " requested to be classified as both interacting and non-interacting.");
58  clash=true;
59  }
60  }
61  if (clash) {
62  ATH_MSG_ERROR("Please check your configuration!");
63  return StatusCode::FAILURE;
64  }
65  }
66 
67  return StatusCode::SUCCESS;
68 }
69 
71 #ifdef HEPMC3
73  const int pdg_id = particle->pdg_id();
74 #else
76  const int pdg_id = particle.pdg_id();
77 #endif
78  const bool isInteracting = find(m_additionalInteractingParticleTypes.begin(),
79  m_additionalInteractingParticleTypes.end(),
80  pdg_id) != m_additionalInteractingParticleTypes.end();
81  const bool isNonInteracting = find(m_additionalNonInteractingParticleTypes.begin(),
82  m_additionalNonInteractingParticleTypes.end(),
83  pdg_id) != m_additionalNonInteractingParticleTypes.end();
84  return !( !MC::isInteracting( pdg_id ) || isNonInteracting) || isInteracting;
85 }
86 
Flow.h
Trk::ParticleSwitcher::particle
constexpr ParticleHypothesis particle[PARTICLEHYPOTHESES]
the array of masses
Definition: ParticleHypothesis.h:76
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
ISF::GenParticleInteractingFilter::pass
virtual bool pass(const HepMC::GenParticle &particle) const override
passes through to the private version
Definition: GenParticleInteractingFilter.cxx:75
ISF::GenParticleInteractingFilter::m_additionalNonInteractingParticleTypes
std::vector< int > m_additionalNonInteractingParticleTypes
Additional PDG codes to classify as non-interacting.
Definition: GenParticleInteractingFilter.h:57
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
GenParticle.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ISF::GenParticleInteractingFilter::m_additionalInteractingParticleTypes
std::vector< int > m_additionalInteractingParticleTypes
Additional PDG codes to classify as interacting.
Definition: GenParticleInteractingFilter.h:54
beamspotman.n
n
Definition: beamspotman.py:731
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
ISF::GenParticleInteractingFilter::GenParticleInteractingFilter
GenParticleInteractingFilter(const std::string &t, const std::string &n, const IInterface *p)
Constructor.
Definition: GenParticleInteractingFilter.cxx:20
ISF::GenParticleInteractingFilter::initialize
virtual StatusCode initialize() override
Framework methods.
Definition: GenParticleInteractingFilter.cxx:29
HepMC::ConstGenParticlePtr
const GenParticle * ConstGenParticlePtr
Definition: GenParticle.h:38
GenParticleInteractingFilter.h
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
MC::isInteracting
bool isInteracting(const T &p)
Identify if the particle with given PDG ID would not interact with the detector, i....
Definition: HepMCHelpers.h:23
HepMCHelpers.h
GenParticle
@ GenParticle
Definition: TruthClasses.h:30