ATLAS Offline Software
ChargedTracksFilter.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
7 
8 
9 ChargedTracksFilter::ChargedTracksFilter(const std::string& name, ISvcLocator* pSvcLocator)
10  : GenFilter(name, pSvcLocator)
11 {
13  declareProperty("Ptcut", m_Ptmin = 50.0);
14  declareProperty("Etacut", m_EtaRange = 2.5);
15  declareProperty("NTracks", m_NTracks = 40);
16  declareProperty("NTracksMax", m_NTracksMax = -1);
17 
18 }
19 
20 
22  int nChargedTracks = 0;
23 
24  // Loop over all events in McEventCollection
25  for (McEventCollection::const_iterator itr = events()->begin(); itr != events()->end(); ++itr) {
26  const HepMC::GenEvent* genEvt = *itr;
27 
28  for (const auto& part: *genEvt){
29  // We only care about stable particles
30  if (!MC::isGenStable(part)) continue;
31 
32  // Particle's charge
33  int pID = part->pdg_id();
34  double pCharge = MC::charge(pID);
35 
36  // Count tracks in specified acceptance
37  const double pT = part->momentum().perp();
38  const double eta = part->momentum().pseudoRapidity();
39  if (pT >= m_Ptmin && std::abs(eta) <= m_EtaRange && pCharge != 0) {
40  ATH_MSG_DEBUG("Found particle, " <<
41  " pT = " << pT <<
42  " eta = " << eta <<
43  " pdg id = " << pID <<
44  " charge = " << pCharge << " in acceptance");
45  nChargedTracks += 1;
46  }
47  }
48  }
49 
50  // Summarise event
51  ATH_MSG_DEBUG("# of tracks " << nChargedTracks <<
52  " with pT >= " << m_Ptmin <<
53  " |eta| < " << m_EtaRange <<
54  " minNTracks = " << m_NTracks <<
55  " maxNTracks = " << m_NTracksMax);
56 
57  // Record passed status
58  setFilterPassed( ((m_NTracksMax == -1) || (nChargedTracks <= m_NTracksMax)) &&
59  ((m_NTracks == -1) || (nChargedTracks >= m_NTracks )) );
60 
61  return StatusCode::SUCCESS;
62 }
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
CalculateHighPtTerm.pT
pT
Definition: ICHEP2016/CalculateHighPtTerm.py:57
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
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
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
ChargedTracksFilter.h
ChargedTracksFilter::ChargedTracksFilter
ChargedTracksFilter(const std::string &name, ISvcLocator *pSvcLocator)
Definition: ChargedTracksFilter.cxx:9
python.DataFormatRates.events
events
Definition: DataFormatRates.py:105
MC::isGenStable
bool isGenStable(const T &p)
Determine if the particle is stable at the generator (not det-sim) level,.
Definition: HepMCHelpers.h:36
GenFilter
Base class for event generator filtering modules.
Definition: GenFilter.h:30
ChargedTracksFilter::filterEvent
StatusCode filterEvent()
Definition: ChargedTracksFilter.cxx:21
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::TauJetParameters::nChargedTracks
@ nChargedTracks
Definition: TauDefs.h:322
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
charge
double charge(const T &p)
Definition: AtlasPID.h:494
ChargedTracksFilter::m_NTracksMax
int m_NTracksMax
Definition: ChargedTracksFilter.h:29
ChargedTracksFilter::m_Ptmin
double m_Ptmin
Definition: ChargedTracksFilter.h:20
ChargedTracksFilter::m_EtaRange
double m_EtaRange
Definition: ChargedTracksFilter.h:23
ChargedTracksFilter::m_NTracks
int m_NTracks
Definition: ChargedTracksFilter.h:26
HepMCHelpers.h