27 #include "GaudiKernel/MsgStream.h"
64 return StatusCode::SUCCESS;
68 return StatusCode::SUCCESS;
84 const HepMC::GenEvent* genEvt = (*itr);
86 auto genEvt_particles_end =
HepMC::end(*genEvt);
87 for (
auto pitr1 = genEvt_particles_begin;
88 pitr1!=genEvt_particles_end; ++pitr1 ){
89 if( ( std::abs((*pitr1)->pdg_id()) != std::abs(
m_PartId1) && 99999 != std::abs(
m_PartId1) ) ||
91 (*pitr1)->momentum().perp() <
m_Ptmin1 ||
92 std::abs((*pitr1)->momentum().pseudoRapidity()) >
m_EtaRange1
97 auto pitr2 = genEvt_particles_begin;
103 for(; pitr2!=genEvt_particles_end; ++pitr2 ){
105 if( pitr1 == pitr2 )
continue;
107 if( ( std::abs((*pitr2)->pdg_id()) != std::abs(
m_PartId2) && 99999 != std::abs(
m_PartId2) ) ||
109 (*pitr2)->momentum().perp() <
m_Ptmin2 ||
110 std::abs((*pitr2)->momentum().pseudoRapidity()) >
m_EtaRange2
112 if( samePDGID12 && !samePDGID123 && (*pitr1)->pdg_id()==(*pitr2)->pdg_id())
continue;
116 auto pitr3 = genEvt_particles_begin;
122 for(; pitr3!=genEvt_particles_end; ++pitr3 ){
124 if( pitr1 == pitr3 || pitr2 == pitr3 )
continue;
126 if( ( std::abs((*pitr3)->pdg_id()) != std::abs(
m_PartId3) && 99999 != std::abs(
m_PartId3) ) ||
128 (*pitr3)->momentum().perp() <
m_Ptmin3 ||
129 std::abs((*pitr3)->momentum().pseudoRapidity()) >
m_EtaRange3
136 HepMC::FourVector
vec((*pitr1)->momentum().px() + (*pitr2)->momentum().px() + (*pitr3)->momentum().px(),
137 (*pitr1)->momentum().py() + (*pitr2)->momentum().py() + (*pitr3)->momentum().py(),
138 (*pitr1)->momentum().pz() + (*pitr2)->momentum().pz() + (*pitr3)->momentum().pz(),
139 (*pitr1)->momentum().e() + (*pitr2)->momentum().e() + (*pitr3)->momentum().e());
147 return StatusCode::SUCCESS;
156 ATH_MSG_INFO(
"TrimuMassRangeFilter not passed at all" );
159 setFilterPassed(
false);
160 return StatusCode::SUCCESS;