@@ -65,6 +65,7 @@ struct AssociateMCInfoPhoton {
6565 Configurable<float > margin_z_gen{" margin_z_gen" , 15 .f , " margin for Z of true photon conversion point to store generated information" };
6666 Configurable<float > max_rxy_gen{" max_rxy_gen" , 100 , " max rxy to store generated information" };
6767 Configurable<bool > requireGammaGammaDecay{" requireGammaGammaDecay" , false , " require gamma gamma decay for generated pi0 and eta meson" };
68+ Configurable<float > cfg_max_eta_photon{" cfg_max_eta_gamma" , 0.8 , " max eta for photons at PV" };
6869
6970 HistogramRegistry registry{" EMMCEvent" };
7071
@@ -98,6 +99,7 @@ struct AssociateMCInfoPhoton {
9899
99100 for (uint i = 0 ; i < NParticleNames; i++) {
100101 registry.add <TH2>(Form (" Generated/h2PtY_%s" , ParticleNames[i].data ()), Form (" Generated %s" , ParticleNames[i].data ()), kTH2F , {axisPt, axisRapidity}, true );
102+ registry.add <TH2>(Form (" Generated/h2PtY_Accepted_%s" , ParticleNames[i].data ()), Form (" Generated %s" , ParticleNames[i].data ()), kTH2F , {axisPt, axisRapidity}, true );
101103 }
102104
103105 // reserve space for generated vectors if that process enabled
@@ -170,6 +172,15 @@ struct AssociateMCInfoPhoton {
170172 for (const auto & mcParticle : groupedMcParticles) { // store necessary information for denominator of efficiency
171173 if ((mcParticle.isPhysicalPrimary () || mcParticle.producedByGenerator ()) && std::fabs (mcParticle.y ()) < 0 .9f && mcParticle.pt () < 20 .f ) {
172174 auto binNumber = hBinFinder->FindBin (mcParticle.pt (), std::fabs (mcParticle.y ())); // caution: pack
175+
176+ bool isMesonAccepted = false ;
177+ if (mcParticle.has_daughters ()) {
178+ auto lDaughters = mcParticle.daughters_as <aod::McParticles>();
179+
180+ if (areTwoPhotonDaughtersAccepted (lDaughters, cfg_max_eta_photon)) {
181+ isMesonAccepted = true ;
182+ }
183+ }
173184 switch (std::abs (mcParticle.pdgCode ())) {
174185 case PDG_t::kGamma :
175186 registry.fill (HIST (" Generated/h2PtY_Gamma" ), mcParticle.pt (), std::fabs (mcParticle.y ()));
@@ -180,12 +191,18 @@ struct AssociateMCInfoPhoton {
180191 continue ;
181192 registry.fill (HIST (" Generated/h2PtY_Pi0" ), mcParticle.pt (), std::fabs (mcParticle.y ()));
182193 genPi0[binNumber]++;
194+ if (isMesonAccepted) {
195+ registry.fill (HIST (" Generated/h2PtY_Accepted_Pi0" ), mcParticle.pt (), std::fabs (mcParticle.y ()));
196+ }
183197 break ;
184198 case Pdg::kEta :
185199 if (requireGammaGammaDecay && !isGammaGammaDecay (mcParticle, mcParticles))
186200 continue ;
187201 registry.fill (HIST (" Generated/h2PtY_Eta" ), mcParticle.pt (), std::fabs (mcParticle.y ()));
188202 genEta[binNumber]++;
203+ if (isMesonAccepted) {
204+ registry.fill (HIST (" Generated/h2PtY_Accepted_Eta" ), mcParticle.pt (), std::fabs (mcParticle.y ()));
205+ }
189206 break ;
190207 default :
191208 break ;
@@ -492,6 +509,21 @@ struct AssociateMCInfoPhoton {
492509 fCounters [1 ] = 0 ;
493510 } // end of skimmingMC
494511
512+ template <typename Daughters>
513+ inline bool areTwoPhotonDaughtersAccepted (const Daughters& lDaughters, float maxEta)
514+ {
515+ if (lDaughters.size () != 2 ) {
516+ return false ;
517+ }
518+
519+ auto it0 = lDaughters.begin ();
520+ auto it1 = it0;
521+ ++it1;
522+
523+ return (std::fabs (it0.eta ()) < maxEta &&
524+ std::fabs (it1.eta ()) < maxEta);
525+ }
526+
495527 void processMC_PCM (MyCollisionsMC const & collisions, aod::BCs const & bcs, aod::McCollisions const & mccollisions, aod::McParticles const & mcParticles, TracksMC const & o2tracks, aod::V0PhotonsKF const & v0photons, aod::V0Legs const & v0legs)
496528 {
497529 skimmingMC<kPCM >(collisions, bcs, mccollisions, mcParticles, o2tracks, nullptr , v0photons, v0legs, nullptr , nullptr , nullptr );
0 commit comments