Skip to content

Commit 6e272c5

Browse files
authored
[PWGLF] Different implementations of MC filter (#12739)
1 parent 3f0f1ec commit 6e272c5

File tree

1 file changed

+65
-8
lines changed

1 file changed

+65
-8
lines changed

PWGLF/Tasks/Strangeness/phik0shortanalysis.cxx

Lines changed: 65 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
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

Comments
 (0)