15 return t1->momentum().perp2() >
t2->momentum().perp2();
39 ATH_MSG_INFO(
"At least two photons must be in an event.");
50 ATH_MSG_INFO(
" negative value on MassCut(min,max) -> no limit in the cut");
52 return StatusCode::SUCCESS;
64 std::vector<HepMC::ConstGenParticlePtr> MCTruthPhotonList;
68 const HepMC::GenEvent* genEvt = (*itr);
69 for (
const auto&
part: *genEvt) {
72 MCTruthPhotonList.push_back(
part);
83 ATH_MSG_DEBUG(
"# of truth photons = " << MCTruthPhotonList.size());
84 if (MCTruthPhotonList.size() < 2) {
87 std::vector<HepMC::ConstGenParticlePtr> MCTruthPhotonList2;
89 for (
size_t i = 0;
i < MCTruthPhotonList.size(); ++
i) {
93 if (MCTruthPhotonList2.size() == 0) {
96 }
else if (MCTruthPhotonList2.size() == 1) {
101 std::abs(MCTruthPhotonList[
i]->
momentum().pseudoRapidity()) <= etamax) {
102 MCTruthPhotonList2.push_back(MCTruthPhotonList[
i]);
105 ATH_MSG_DEBUG(
"# of truth photons after pT and eta cut = " << MCTruthPhotonList2.size());
107 if (MCTruthPhotonList2.size() < 2) {
112 double sumPx = MCTruthPhotonList2[0]->momentum().px()+MCTruthPhotonList2[1]->momentum().px();
113 double sumPy = MCTruthPhotonList2[0]->momentum().py()+MCTruthPhotonList2[1]->momentum().py();
114 double sumPz = MCTruthPhotonList2[0]->momentum().pz()+MCTruthPhotonList2[1]->momentum().pz();
115 double sumE = MCTruthPhotonList2[0]->momentum().e() +MCTruthPhotonList2[1]->momentum().e();
116 double m2 = sumE*sumE-(sumPx*sumPx+sumPy*sumPy+sumPz*sumPz);
117 double mGamGam =
m2 >= 0. ? std::sqrt(
m2) : -std::sqrt(-
m2);
118 ATH_MSG_DEBUG(
"mass(gamgam) = " << mGamGam <<
" (CLHEP::MeV)");
119 double deltaEta = MCTruthPhotonList2[0]->momentum().pseudoRapidity() - MCTruthPhotonList2[1]->momentum().pseudoRapidity();
120 double deltaPhi = MCTruthPhotonList2[0]->momentum().phi() - MCTruthPhotonList2[1]->momentum().phi();
123 int testMassDeltaRCuts = 0;
129 }
else if (m_diphoton_massmin < 0. && m_diphoton_massmax >= 0.) {
132 ++testMassDeltaRCuts;
139 }
else if (m_diphoton_deltaRmin < 0. && m_diphoton_deltaRmax >= 0.) {
142 ++testMassDeltaRCuts;
145 if (testMassDeltaRCuts == 2) ++
nGood;
147 for (
size_t i=0;
i<MCTruthPhotonList2.size()-1;++
i) {
148 for (
size_t j=
i+1;j<MCTruthPhotonList2.size();++j) {
149 double sumPx = MCTruthPhotonList2[
i]->momentum().px()+MCTruthPhotonList2[j]->momentum().px();
150 double sumPy = MCTruthPhotonList2[
i]->momentum().py()+MCTruthPhotonList2[j]->momentum().py();
151 double sumPz = MCTruthPhotonList2[
i]->momentum().pz()+MCTruthPhotonList2[j]->momentum().pz();
152 double sumE = MCTruthPhotonList2[
i]->momentum().e() +MCTruthPhotonList2[j]->momentum().e();
153 double m2 = sumE*sumE-(sumPx*sumPx+sumPy*sumPy+sumPz*sumPz);
154 double mGamGam =
m2 >= 0. ? std::sqrt(
m2) : -std::sqrt(-
m2);
155 ATH_MSG_DEBUG(
"mass(gamgam) = " << mGamGam <<
" (CLHEP::MeV)");
156 double deltaEta = MCTruthPhotonList2[
i]->momentum().pseudoRapidity() - MCTruthPhotonList2[j]->momentum().pseudoRapidity();
157 double deltaPhi = MCTruthPhotonList2[
i]->momentum().phi() - MCTruthPhotonList2[j]->momentum().phi();
160 int testMassDeltaRCuts = 0;
166 }
else if (m_diphoton_massmin < 0. && m_diphoton_massmax >= 0.) {
169 ++testMassDeltaRCuts;
176 }
else if (m_diphoton_deltaRmin < 0. && m_diphoton_deltaRmax >= 0.) {
179 ++testMassDeltaRCuts;
182 if (testMassDeltaRCuts == 2) ++
nGood;
188 if (
nGood == 0) isOK =
false;
193 setFilterPassed(isOK);
194 return StatusCode::SUCCESS;