1717#include " PWGLF/DataModel/mcCentrality.h"
1818#include " PWGLF/Utils/inelGt.h"
1919
20+ #include " Common/Core/TableHelper.h"
2021#include " Common/Core/TrackSelection.h"
22+ #include " Common/Core/TrackSelectionDefaults.h"
2123#include " Common/Core/trackUtilities.h"
2224#include " Common/DataModel/Centrality.h"
2325#include " Common/DataModel/EventSelection.h"
@@ -224,8 +226,8 @@ struct Phik0shortanalysis {
224226
225227 // Configurables for dN/deta with phi computation
226228 Configurable<bool > furtherCheckonMcCollision{" furtherCheckonMcCollision" , true , " Further check on MC collisions" };
227- Configurable<bool > filterOnGenPhi{" filterOnGenPhi" , true , " Filter on MC Phi" };
228- Configurable<bool > filterOnRecoPhiWPDG{ " filterOnRecoPhiWPDG " , true , " Filter on Reco Phi with WPDG " };
229+ Configurable<int > filterOnGenPhi{" filterOnGenPhi" , 1 , " Filter on Gen Phi (0: K+K- pair like Phi, 1: proper Phi) " };
230+ Configurable<int > filterOnRecoPhi{ " filterOnRecoPhi " , 1 , " Filter on Reco Phi (0: without PDG, 1: with PDG) " };
229231 Configurable<bool > fillMcPartsForAllReco{" fillMcPartsForAllReco" , false , " Fill MC particles for all associated reco collisions" };
230232
231233 // Configurable for event mixing
@@ -307,6 +309,9 @@ struct Phik0shortanalysis {
307309 Partition<FullMCTracks> posMCTracks = aod::track::signed1Pt > trackConfigs.cfgCutCharge;
308310 Partition<FullMCTracks> negMCTracks = aod::track::signed1Pt < trackConfigs.cfgCutCharge;
309311
312+ Partition<FilteredMCTracks> posFiltMCTracks = aod::track::signed1Pt > trackConfigs.cfgCutCharge;
313+ Partition<FilteredMCTracks> negFiltMCTracks = aod::track::signed1Pt < trackConfigs.cfgCutCharge;
314+
310315 // Necessary to flag INEL>0 events in GenMC
311316 Service<o2::framework::O2DatabasePDG> pdgDB;
312317
@@ -1046,6 +1051,40 @@ struct Phik0shortanalysis {
10461051 return false ;
10471052 }
10481053
1054+ template <typename T>
1055+ bool eventHasGenKPair (const T& mcParticles)
1056+ {
1057+ int nKPair = 0 ;
1058+
1059+ for (const auto & mcParticle1 : mcParticles) {
1060+ if (!mcParticle1.isPhysicalPrimary () || std::abs (mcParticle1.eta ()) > trackConfigs.etaMax )
1061+ continue ;
1062+
1063+ for (const auto & mcParticle2 : mcParticles) {
1064+ if (!mcParticle2.isPhysicalPrimary () || std::abs (mcParticle2.eta ()) > trackConfigs.etaMax )
1065+ continue ;
1066+
1067+ if ((mcParticle1.pdgCode () != PDG_t::kKPlus || mcParticle2.pdgCode () != PDG_t::kKMinus ) &&
1068+ (mcParticle1.pdgCode () != PDG_t::kKMinus || mcParticle2.pdgCode () != PDG_t::kKPlus ))
1069+ continue ;
1070+
1071+ ROOT::Math::PxPyPzMVector genKPair = recMother (mcParticle1, mcParticle2, massKa, massKa);
1072+ if (genKPair.Pt () < phiConfigs.minPhiPt )
1073+ continue ;
1074+ if (genKPair.M () < phiConfigs.lowMPhi || genKPair.M () > phiConfigs.upMPhi )
1075+ continue ;
1076+ if (std::abs (genKPair.Rapidity ()) > deltaYConfigs.cfgYAcceptance )
1077+ continue ;
1078+
1079+ nKPair++;
1080+ }
1081+ }
1082+
1083+ if (nKPair > 0 )
1084+ return true ;
1085+ return false ;
1086+ }
1087+
10491088 template <typename T>
10501089 bool eventHasGenPhi (const T& mcParticles)
10511090 {
@@ -2673,8 +2712,18 @@ struct Phik0shortanalysis {
26732712
26742713 if (!pwglf::isINELgtNmc (mcParticlesThisMcColl, 0 , pdgDB))
26752714 continue ;
2676- if (filterOnGenPhi && !eventHasGenPhi (mcParticlesThisMcColl))
2677- continue ;
2715+ switch (filterOnGenPhi) {
2716+ case 0 :
2717+ if (!eventHasGenKPair (mcParticlesThisMcColl))
2718+ continue ;
2719+ break ;
2720+ case 1 :
2721+ if (!eventHasGenPhi (mcParticlesThisMcColl))
2722+ continue ;
2723+ break ;
2724+ default :
2725+ break ;
2726+ }
26782727
26792728 uint64_t numberAssocColl = 0 ;
26802729 std::vector<float > zVtxs;
@@ -2687,13 +2736,21 @@ struct Phik0shortanalysis {
26872736 if (acceptEventQA<true >(collision, false )) {
26882737 auto filteredMCTracksThisColl = filteredMCTracks.sliceBy (preslices.perColl , collision.globalIndex ());
26892738
2690- Partition<FilteredMCTracks> posFiltMCTracks = aod::track::signed1Pt > trackConfigs.cfgCutCharge ;
26912739 posFiltMCTracks.bindTable (filteredMCTracksThisColl);
2692- Partition<FilteredMCTracks> negFiltMCTracks = aod::track::signed1Pt < trackConfigs.cfgCutCharge ;
26932740 negFiltMCTracks.bindTable (filteredMCTracksThisColl);
26942741
2695- if (filterOnRecoPhiWPDG && !eventHasRecoPhiWPDG (posFiltMCTracks, negFiltMCTracks, mcParticles))
2696- continue ;
2742+ switch (filterOnRecoPhi) {
2743+ case 0 :
2744+ if (!eventHasRecoPhi (posFiltMCTracks, negFiltMCTracks))
2745+ continue ;
2746+ break ;
2747+ case 1 :
2748+ if (!eventHasRecoPhiWPDG (posFiltMCTracks, negFiltMCTracks, mcParticles))
2749+ continue ;
2750+ break ;
2751+ default :
2752+ break ;
2753+ }
26972754
26982755 mcEventHist.fill (HIST (" hGenMCRecoMultiplicityPercent" ), mcCollision.centFT0M ());
26992756 mcEventHist.fill (HIST (" h2GenMCRecoVertexZvsMult" ), collision.posZ (), mcCollision.centFT0M ());
0 commit comments