ATLAS Offline Software
TTbarWithJpsimumuFilter.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
5 
6 #include "GaudiKernel/MsgStream.h"
8 
9 //--------------------------------------------------------------------------
11  ISvcLocator* pSvcLocator)
12  : GenFilter(fname,pSvcLocator)
13 
14 {
15  declareProperty("SelectJpsi",m_selectJpsi=true);
16  declareProperty("JpsipTMinCut",m_JpsiPtMinCut=0.);
17  declareProperty("JpsietaMaxCut",m_JpsiEtaMaxCut=5.);
18 }
19 
20 //--------------------------------------------------------------------------
23 }
24 
25 //---------------------------------------------------------------------------
27  ATH_MSG_INFO("Initialized");
28  return StatusCode::SUCCESS;
29 }
30 
31 //---------------------------------------------------------------------------
33  ATH_MSG_INFO(" Events out of " << m_nPass+m_nFail << " passed the filter");
34  return StatusCode::SUCCESS;
35 }
36 
37 
38 //---------------------------------------------------------------------------
40  //---------------------------------------------------------------------------
41 
42  bool pass = false;
43  bool isjpsi = false;
44 
45  for (const HepMC::GenEvent* genEvt : *events_const()) {
46 
47  // Loop over all truth particles in the event
48  // ===========================================
49  for(const auto& part: *genEvt) {
50  if (std::abs(part->pdg_id())!=443) continue;
51  if (HepMC::is_simulation_particle(part)) continue;
52  if(!isLeptonDecay(part,13)) continue;
53  if ( !passJpsiSelection(part) ) continue;
54  isjpsi=true;
55  }
56 
57  } // loop on events (only one at evgen - no PU)
58 
59  if (m_selectJpsi && isjpsi) pass = true;
60 
61  setFilterPassed(pass);
62  return StatusCode::SUCCESS;
63 }
64 
65 // ========================================================
67  auto end = part->end_vertex();
68  if(!end) return true;
69 #ifdef HEPMC3
70  for (const auto& p: end->particles_out()) {
71  if (std::abs(p->pdg_id()) != type ) return false;
72  }
73 #else
74  HepMC::GenVertex::particle_iterator firstChild = end->particles_begin(HepMC::children);
75  HepMC::GenVertex::particle_iterator endChild = end->particles_end(HepMC::children);
76  for(; firstChild!=endChild; ++firstChild) {
77  int childtype = std::abs((*firstChild)->pdg_id());
78  if( childtype != type ) {
79  return false;
80  }
81  }
82 #endif
83  return true;
84 }
85 
86 // ========================================================
88 
89  const HepMC::FourVector& p4 = part->momentum();
90  double pt = p4.perp();
91  double eta = std::abs(p4.eta());
92 
93  if (pt < m_JpsiPtMinCut) return false;
94  if (eta > m_JpsiEtaMaxCut) return false;
95 
96  return true;
97 
98 }
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
GenBase::events_const
const McEventCollection * events_const() const
Access the current event's McEventCollection (const)
Definition: GenBase.h:96
AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
TTbarWithJpsimumuFilter::~TTbarWithJpsimumuFilter
virtual ~TTbarWithJpsimumuFilter()
Definition: TTbarWithJpsimumuFilter.cxx:21
test_pyathena.pt
pt
Definition: test_pyathena.py:11
TTbarWithJpsimumuFilter::m_JpsiEtaMaxCut
double m_JpsiEtaMaxCut
Definition: TTbarWithJpsimumuFilter.h:33
TTbarWithJpsimumuFilter::isLeptonDecay
bool isLeptonDecay(const HepMC::ConstGenParticlePtr &part, int type) const
Definition: TTbarWithJpsimumuFilter.cxx:66
TTbarWithJpsimumuFilter.h
filter to select ttbar with Jpsi->mumu events
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
GenFilter
Base class for event generator filtering modules.
Definition: GenFilter.h:30
TTbarWithJpsimumuFilter::filterEvent
virtual StatusCode filterEvent()
Definition: TTbarWithJpsimumuFilter.cxx:39
HepMC::is_simulation_particle
bool is_simulation_particle(const T &p)
Method to establish if a particle (or barcode) was created during the simulation (TODO update to be s...
Definition: MagicNumbers.h:299
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
HepMC::ConstGenParticlePtr
const GenParticle * ConstGenParticlePtr
Definition: GenParticle.h:38
TTbarWithJpsimumuFilter::m_selectJpsi
bool m_selectJpsi
properties
Definition: TTbarWithJpsimumuFilter.h:29
MagicNumbers.h
GenFilter::m_nPass
int m_nPass
Definition: GenFilter.h:65
TTbarWithJpsimumuFilter::m_JpsiPtMinCut
double m_JpsiPtMinCut
Definition: TTbarWithJpsimumuFilter.h:32
python.AthDsoLogger.fname
string fname
Definition: AthDsoLogger.py:67
TTbarWithJpsimumuFilter::filterFinalize
virtual StatusCode filterFinalize()
Definition: TTbarWithJpsimumuFilter.cxx:32
TTbarWithJpsimumuFilter::filterInitialize
virtual StatusCode filterInitialize()
Definition: TTbarWithJpsimumuFilter.cxx:26
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
python.DecayParser.children
children
Definition: DecayParser.py:32
GenFilter::m_nFail
int m_nFail
Definition: GenFilter.h:66
TTbarWithJpsimumuFilter::TTbarWithJpsimumuFilter
TTbarWithJpsimumuFilter(const std::string &fname, ISvcLocator *pSvcLocator)
Definition: TTbarWithJpsimumuFilter.cxx:10
TTbarWithJpsimumuFilter::passJpsiSelection
bool passJpsiSelection(const HepMC::ConstGenParticlePtr &part) const
Definition: TTbarWithJpsimumuFilter.cxx:87