32 return StatusCode::SUCCESS;
40 const HepMC::GenEvent* genEvt = *itr;
42 auto genEvt_particles_end =
HepMC::end(*genEvt);
43 for (
auto pitr1 = genEvt_particles_begin; pitr1 != genEvt_particles_end; ++pitr1) {
47 int pdgId1((*pitr1)->pdg_id());
49 if (!(std::abs(pdgId1) == 11 || std::abs(pdgId1) == 13))
continue;
51 if (!((*pitr1)->momentum().perp() >=
m_minPt && std::abs((*pitr1)->momentum().pseudoRapidity()) <=
m_maxEta))
continue;
59 for (; pitr2 != genEvt_particles_end; ++pitr2) {
62 int pdgId2((*pitr2)->pdg_id());
63 if (!(std::abs(pdgId2) == 11 || abs(pdgId2) == 13))
continue;
64 if (!((*pitr2)->momentum().perp() >=
m_minPt && std::abs((*pitr2)->momentum().pseudoRapidity()) <=
m_maxEta))
continue;
70 for (; pitr3 != genEvt_particles_end; ++pitr3) {
71 if (!
MC::isStable(*pitr3) || pitr1 == pitr3 || pitr2 == pitr3 )
continue;
74 int pdgId3((*pitr3)->pdg_id());
75 if (!(std::abs(pdgId3) == 11 || std::abs(pdgId3) == 13))
continue;
76 if (!((*pitr3)->momentum().perp() >=
m_minPt && std::abs((*pitr3)->momentum().pseudoRapidity()) <=
m_maxEta))
continue;
82 for (; pitr4 != genEvt_particles_end; ++pitr4) {
83 if (!
MC::isStable(*pitr4) || pitr1 == pitr4 || pitr2 == pitr4 || pitr3 == pitr4)
continue;
86 int pdgId4((*pitr4)->pdg_id());
87 if (!(std::abs(pdgId4) == 11 || abs(pdgId4) == 13))
continue;
88 if (!((*pitr4)->momentum().perp() >=
m_minPt && std::abs((*pitr4)->momentum().pseudoRapidity()) <=
m_maxEta))
continue;
90 decltype(pitr1) apitr[4] = {pitr1,pitr2,pitr3,pitr4};
91 int pdgIds[4]={pdgId1,pdgId2,pdgId3,pdgId4};
92 for (
int ii = 0; ii < 4; ii++) {
93 for (
int jj = 0; jj < 4; jj++) {
94 if (jj == ii)
continue;
95 for (
int kk = 0;
kk < 4;
kk++) {
96 if (
kk == jj ||
kk == ii)
continue;
97 for (
int ll = 0;
ll < 4;
ll++) {
98 if (
ll ==
kk ||
ll == jj||
ll == ii)
continue;
99 if (!
m_allowElecMu && (std::abs(pdgIds[ii])!=abs(pdgIds[jj]) || abs(pdgIds[
kk])!=abs(pdgIds[
ll])))
continue;
107 double invMass1 =
vec.m();
108 if (invMass1 < m_minMass1 || invMass1 >
m_maxMass1)
continue;
116 double invMass2 =
vec2.m();
117 if (invMass2 < m_minMass2 || invMass2 >
m_maxMass2)
continue;
120 return StatusCode::SUCCESS;
130 setFilterPassed(
false);
131 return StatusCode::SUCCESS;