From fa2bb15be93fc3b476d00a7fa6df0a4acd4d5ed7 Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Mon, 11 May 2026 22:34:41 +0200 Subject: [PATCH 1/4] cascades in pp upd Use reconstructed event type for MC. Add QA hists, and label event-type axes --- .../Strangeness/cascqaanalysis.cxx | 62 ++++++++++++++----- 1 file changed, 45 insertions(+), 17 deletions(-) diff --git a/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx b/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx index 452d1c45e92..eb98cae85bc 100644 --- a/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx @@ -44,6 +44,8 @@ #include #include +#include +#include #include #include #include @@ -194,6 +196,15 @@ struct Cascqaanalysis { o2::constants::physics::MassOmegaMinus * decayLength * invMomentum}; } + template + static void setEventTypeAxisLabels(TAxisType* axis) + { + const char* labels[3] = {"INEL", "INEL>0", "INEL>1"}; + for (int i = 0; i < 3; ++i) { + axis->SetBinLabel(i + 1, labels[i]); + } + } + void init(InitContext const&) { TString hCandidateCounterLabels[4] = {"All candidates", "passed topo cuts", "has associated MC particle", "associated with Xi(Omega)"}; @@ -220,15 +231,25 @@ struct Cascqaanalysis { registry.get(HIST("hNEventsMC"))->GetXaxis()->SetBinLabel(n, hNEventsMCLabels[n - 1]); } registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1D, {{200, -20.f, 20.f}}}); + registry.add("hZCollisionRecVsGen", "hZCollisionRecVsGen", {HistType::kTH2D, {{100, -10.f, 10.f, "z_{vtx}^{rec} (cm)"}, {100, -10.f, 10.f, "z_{vtx}^{gen} (cm)"}}}); + registry.add("hEventTypeRecVsGen", "hEventTypeRecVsGen", {HistType::kTH2D, {eventTypeAxis, eventTypeAxis}}); registry.add("hNchFT0MNAssocMCCollisions", "hNchFT0MNAssocMCCollisions", {HistType::kTH3D, {nChargedFT0MGenAxis, nAssocCollAxis, eventTypeAxis}}); registry.add("hNchFT0MNAssocMCCollisionsSameType", "hNchFT0MNAssocMCCollisionsSameType", {HistType::kTH3D, {nChargedFT0MGenAxis, nAssocCollAxis, eventTypeAxis}}); registry.add("hNContributorsCorrelation", "hNContributorsCorrelation", {HistType::kTH2F, {{250, -0.5f, 249.5f, "Secondary Contributor"}, {250, -0.5f, 249.5f, "Main Contributor"}}}); registry.add("hNchFT0MGenEvType", "hNchFT0MGenEvType", {HistType::kTH2D, {nChargedFT0MGenAxis, eventTypeAxis}}); registry.add("hNchFV0AGenEvType", "hNchFV0AGenEvType", {HistType::kTH2D, {nChargedFV0AGenAxis, eventTypeAxis}}); registry.add("hCentFT0M_genMC", "hCentFT0M_genMC", {HistType::kTH2D, {centFT0MAxis, eventTypeAxis}}); + setEventTypeAxisLabels(registry.get(HIST("hEventTypeRecVsGen"))->GetXaxis()); + setEventTypeAxisLabels(registry.get(HIST("hEventTypeRecVsGen"))->GetYaxis()); + setEventTypeAxisLabels(registry.get(HIST("hNchFT0MNAssocMCCollisions"))->GetZaxis()); + setEventTypeAxisLabels(registry.get(HIST("hNchFT0MNAssocMCCollisionsSameType"))->GetZaxis()); + setEventTypeAxisLabels(registry.get(HIST("hNchFT0MGenEvType"))->GetYaxis()); + setEventTypeAxisLabels(registry.get(HIST("hNchFV0AGenEvType"))->GetYaxis()); + setEventTypeAxisLabels(registry.get(HIST("hCentFT0M_genMC"))->GetYaxis()); } registry.add("hCentFT0M_rec", "hCentFT0M_rec", {HistType::kTH2D, {centFT0MAxis, eventTypeAxis}}); + setEventTypeAxisLabels(registry.get(HIST("hCentFT0M_rec"))->GetYaxis()); if (candidateQA) { registry.add("hNcandidates", "hNcandidates", {HistType::kTH3D, {nCandidates, centFT0MAxis, {2, -0.5f, 1.5f}}}); @@ -242,6 +263,9 @@ struct Cascqaanalysis { registry.add("hNchFT0Mglobal", "hNchFT0Mglobal", {HistType::kTH3D, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}}); registry.add("hNchFT0MPVContr", "hNchFT0MPVContr", {HistType::kTH3D, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}}); registry.add("hNchFV0APVContr", "hNchFV0APVContr", {HistType::kTH3D, {nChargedFV0AGenAxis, multNTracksAxis, eventTypeAxis}}); + setEventTypeAxisLabels(registry.get(HIST("hNchFT0Mglobal"))->GetZaxis()); + setEventTypeAxisLabels(registry.get(HIST("hNchFT0MPVContr"))->GetZaxis()); + setEventTypeAxisLabels(registry.get(HIST("hNchFV0APVContr"))->GetZaxis()); } registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3D, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); registry.add("hFV0ApvContr", "hFV0ApvContr", {HistType::kTH3D, {centFV0AAxis, multNTracksAxis, eventTypeAxis}}); @@ -249,6 +273,11 @@ struct Cascqaanalysis { registry.add("hFV0AFT0M", "hFV0AFT0M", {HistType::kTH3D, {centFV0AAxis, centFT0MAxis, eventTypeAxis}}); registry.add("hFT0MFV0Asignal", "hFT0MFV0Asignal", {HistType::kTH2D, {signalFT0MAxis, signalFV0AAxis}}); registry.add("hFT0MsignalPVContr", "hFT0MsignalPVContr", {HistType::kTH3D, {signalFT0MAxis, multNTracksAxis, eventTypeAxis}}); + setEventTypeAxisLabels(registry.get(HIST("hFT0MpvContr"))->GetZaxis()); + setEventTypeAxisLabels(registry.get(HIST("hFV0ApvContr"))->GetZaxis()); + setEventTypeAxisLabels(registry.get(HIST("hFT0Mglobal"))->GetZaxis()); + setEventTypeAxisLabels(registry.get(HIST("hFV0AFT0M"))->GetZaxis()); + setEventTypeAxisLabels(registry.get(HIST("hFT0MsignalPVContr"))->GetZaxis()); } rctChecker.init(cfgEvtRCTFlagCheckerLabel, cfgEvtRCTFlagCheckerZDCCheck, cfgEvtRCTFlagCheckerLimitAcceptAsBad); @@ -549,31 +578,30 @@ struct Cascqaanalysis { uint16_t nchFT0 = getGenNchInFT0Mregion(mcPartSlice); uint16_t nchFV0 = getGenNchInFV0Aregion(mcPartSlice); - int evType = 0; - registry.fill(HIST("hNEvents"), 11.5); // INEL - // Rec. collision associated with INEL>0 gen. one + int genEvType = 0; if (pwglf::isINELgtNmc(mcPartSlice, 0, pdgDB)) { - registry.fill(HIST("hNEvents"), 12.5); // INEL - evType++; + genEvType++; } - // Rec. collision associated with INEL>1 gen. one if (pwglf::isINELgtNmc(mcPartSlice, 1, pdgDB)) { - registry.fill(HIST("hNEvents"), 13.5); // INEL - evType++; + genEvType++; } - registry.fill(HIST("hCentFT0M_rec"), mcCollision.centFT0M(), evType); + const int recoEvType = getEventTypeFlag(collision); + + registry.fill(HIST("hCentFT0M_rec"), mcCollision.centFT0M(), recoEvType); + registry.fill(HIST("hZCollisionRecVsGen"), collision.posZ(), mcCollision.posZ()); + registry.fill(HIST("hEventTypeRecVsGen"), recoEvType, genEvType); if (multQA) { - registry.fill(HIST("hNchFT0MPVContr"), nchFT0, nTracksPVcontr, evType); - registry.fill(HIST("hNchFV0APVContr"), nchFV0, nTracksPVcontr, evType); - registry.fill(HIST("hFT0MpvContr"), mcCollision.centFT0M(), nTracksPVcontr, evType); - registry.fill(HIST("hFV0ApvContr"), 0, nTracksPVcontr, evType); // mcCollision.centFV0A() to be added - registry.fill(HIST("hFT0Mglobal"), mcCollision.centFT0M(), nTracksGlobal, evType); - registry.fill(HIST("hFV0AFT0M"), 0, mcCollision.centFT0M(), evType); // mcCollision.centFV0A() to be added - registry.fill(HIST("hNchFT0Mglobal"), nchFT0, nTracksGlobal, evType); + registry.fill(HIST("hNchFT0MPVContr"), nchFT0, nTracksPVcontr, recoEvType); + registry.fill(HIST("hNchFV0APVContr"), nchFV0, nTracksPVcontr, recoEvType); + registry.fill(HIST("hFT0MpvContr"), mcCollision.centFT0M(), nTracksPVcontr, recoEvType); + registry.fill(HIST("hFV0ApvContr"), 0, nTracksPVcontr, recoEvType); // mcCollision.centFV0A() to be added + registry.fill(HIST("hFT0Mglobal"), mcCollision.centFT0M(), nTracksGlobal, recoEvType); + registry.fill(HIST("hFV0AFT0M"), 0, mcCollision.centFT0M(), recoEvType); // mcCollision.centFV0A() to be added + registry.fill(HIST("hNchFT0Mglobal"), nchFT0, nTracksGlobal, recoEvType); registry.fill(HIST("hFT0MFV0Asignal"), collision.multFT0A() + collision.multFT0C(), collision.multFV0A()); - registry.fill(HIST("hFT0MsignalPVContr"), collision.multFT0A() + collision.multFT0C(), nTracksPVcontr, evType); + registry.fill(HIST("hFT0MsignalPVContr"), collision.multFT0A() + collision.multFT0C(), nTracksPVcontr, recoEvType); } float lEventScale = scalefactor; From 73f1d5bfc298d4e63ea07a802c906ea36ffe45cb Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Mon, 11 May 2026 23:11:15 +0200 Subject: [PATCH 2/4] o2linter fix --- PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx b/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx index eb98cae85bc..6941a62ad03 100644 --- a/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx @@ -199,8 +199,8 @@ struct Cascqaanalysis { template static void setEventTypeAxisLabels(TAxisType* axis) { - const char* labels[3] = {"INEL", "INEL>0", "INEL>1"}; - for (int i = 0; i < 3; ++i) { + const char* labels[] = {"INEL", "INEL>0", "INEL>1"}; + for (int i = 0; i < static_cast(sizeof(labels) / sizeof(labels[0])); ++i) { axis->SetBinLabel(i + 1, labels[i]); } } From 7689f52f1bb4d6eb1719710f1970e6dbcaf65ee6 Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Tue, 12 May 2026 15:58:33 +0200 Subject: [PATCH 3/4] Enum for eventType bins --- .../Strangeness/cascqaanalysis.cxx | 54 +++++++++++-------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx b/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx index 6941a62ad03..6ca9c40082b 100644 --- a/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx @@ -51,6 +51,7 @@ #include #include +#include #include #include #include @@ -76,6 +77,19 @@ struct Cascqaanalysis { HistogramRegistry registry{"registry"}; + enum EventTypeBin { + kINEL = 0, + kINELgt0, + kINELgt1, + kNEventTypeBins + }; + + static constexpr std::array, kNEventTypeBins> EventTypeBinLabels{{ + {kINEL, "INEL"}, + {kINELgt0, "INEL>0"}, + {kINELgt1, "INEL>1"}, + }}; + // Axes ConfigurableAxis ptAxis{"ptAxis", {200, 0.0f, 10.0f}, "#it{p}_{T} (GeV/#it{c})"}; ConfigurableAxis rapidityAxis{"rapidityAxis", {200, -2.0f, 2.0f}, "y"}; @@ -85,7 +99,7 @@ struct Cascqaanalysis { ConfigurableAxis centFV0AAxis{"centFV0AAxis", {VARIABLE_WIDTH, 0., 0.01, 0.05, 0.1, 0.5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 105.5}, "FV0A (%)"}; - ConfigurableAxis eventTypeAxis{"eventTypeAxis", {3, -0.5f, 2.5f}, "Event Type"}; + ConfigurableAxis eventTypeAxis{"eventTypeAxis", {kNEventTypeBins, -0.5f, static_cast(kNEventTypeBins) - 0.5f}, "Event Type"}; ConfigurableAxis nAssocCollAxis{"nAssocCollAxis", {5, -0.5f, 4.5f}, "N_{assoc.}"}; ConfigurableAxis nChargedFT0MGenAxis{"nChargedFT0MGenAxis", {300, 0, 300}, "N_{FT0M, gen.}"}; @@ -199,9 +213,8 @@ struct Cascqaanalysis { template static void setEventTypeAxisLabels(TAxisType* axis) { - const char* labels[] = {"INEL", "INEL>0", "INEL>1"}; - for (int i = 0; i < static_cast(sizeof(labels) / sizeof(labels[0])); ++i) { - axis->SetBinLabel(i + 1, labels[i]); + for (const auto& [bin, label] : EventTypeBinLabels) { + axis->SetBinLabel(static_cast(bin) + 1, label); } } @@ -363,20 +376,19 @@ struct Cascqaanalysis { } template - int getEventTypeFlag(TCollision const& collision) + EventTypeBin getEventTypeBin(TCollision const& collision) { - // 0 - INEL, 1 - INEL>0, 2 - INEL>1 - int evFlag = 0; + EventTypeBin evTypeBin = kINEL; registry.fill(HIST("hNEvents"), 11.5); // INEL if (collision.isInelGt0()) { - evFlag += 1; + evTypeBin = kINELgt0; registry.fill(HIST("hNEvents"), 12.5); // INEL>0 } if (collision.isInelGt1()) { - evFlag += 1; + evTypeBin = kINELgt1; registry.fill(HIST("hNEvents"), 13.5); // INEL>1 } - return evFlag; + return evTypeBin; } template @@ -480,7 +492,7 @@ struct Cascqaanalysis { return; } - int evType = getEventTypeFlag(collision); + EventTypeBin evType = getEventTypeBin(collision); auto tracksGroupedPVcontr = pvContribTracksIUEta1->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); int nTracksPVcontr = tracksGroupedPVcontr.size(); @@ -578,15 +590,15 @@ struct Cascqaanalysis { uint16_t nchFT0 = getGenNchInFT0Mregion(mcPartSlice); uint16_t nchFV0 = getGenNchInFV0Aregion(mcPartSlice); - int genEvType = 0; + EventTypeBin genEvType = kINEL; if (pwglf::isINELgtNmc(mcPartSlice, 0, pdgDB)) { - genEvType++; + genEvType = kINELgt0; } if (pwglf::isINELgtNmc(mcPartSlice, 1, pdgDB)) { - genEvType++; + genEvType = kINELgt1; } - const int recoEvType = getEventTypeFlag(collision); + const EventTypeBin recoEvType = getEventTypeBin(collision); registry.fill(HIST("hCentFT0M_rec"), mcCollision.centFT0M(), recoEvType); registry.fill(HIST("hZCollisionRecVsGen"), collision.posZ(), mcCollision.posZ()); @@ -682,20 +694,20 @@ struct Cascqaanalysis { registry.fill(HIST("hNEventsMC"), 1.5); // Define the type of generated MC collision - int evType = 0; + EventTypeBin evType = kINEL; uint8_t flagsGen = 0; flagsGen |= o2::aod::myMCcascades::EvFlags::EvINEL; registry.fill(HIST("hNEventsMC"), 2.5); // Generated collision is INEL>0 if (pwglf::isINELgtNmc(mcParticles, 0, pdgDB)) { flagsGen |= o2::aod::myMCcascades::EvFlags::EvINELgt0; - evType++; + evType = kINELgt0; registry.fill(HIST("hNEventsMC"), 3.5); } // Generated collision is INEL>1 if (pwglf::isINELgtNmc(mcParticles, 1, pdgDB)) { flagsGen |= o2::aod::myMCcascades::EvFlags::EvINELgt1; - evType++; + evType = kINELgt1; registry.fill(HIST("hNEventsMC"), 4.5); } @@ -751,15 +763,15 @@ struct Cascqaanalysis { const auto evtReconstructedAndINELgt1 = std::count_if(selectedEvents.begin(), selectedEvents.end(), isAssocToINELgt1); switch (evType) { - case 0: { + case kINEL: { registry.fill(HIST("hNchFT0MNAssocMCCollisionsSameType"), nchFT0, evtReconstructedAndINEL, evType); break; } - case 1: { + case kINELgt0: { registry.fill(HIST("hNchFT0MNAssocMCCollisionsSameType"), nchFT0, evtReconstructedAndINELgt0, evType); break; } - case 2: { + case kINELgt1: { registry.fill(HIST("hNchFT0MNAssocMCCollisionsSameType"), nchFT0, evtReconstructedAndINELgt1, evType); break; } From 69be7a3d0ed59487fdb15077f1d78cb6c931b40e Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Tue, 19 May 2026 20:05:27 +0200 Subject: [PATCH 4/4] border cut for gen. events and pdg codes --- PWGLF/DataModel/cascqaanalysis.h | 2 +- .../Strangeness/cascqaanalysis.cxx | 44 ++++++++++++++----- .../Tasks/Strangeness/cascpostprocessing.cxx | 13 ++++++ 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/PWGLF/DataModel/cascqaanalysis.h b/PWGLF/DataModel/cascqaanalysis.h index 93081d09fca..3442c074305 100644 --- a/PWGLF/DataModel/cascqaanalysis.h +++ b/PWGLF/DataModel/cascqaanalysis.h @@ -87,7 +87,7 @@ DECLARE_SOA_COLUMN(BachHasTOF, bachhastof, int); DECLARE_SOA_COLUMN(PosPt, pospt, float); DECLARE_SOA_COLUMN(NegPt, negpt, float); DECLARE_SOA_COLUMN(BachPt, bachpt, float); -DECLARE_SOA_COLUMN(McPdgCode, mcPdgCode, int); //! -1 unknown +DECLARE_SOA_COLUMN(McPdgCode, mcPdgCode, int); //! 0 unknown/no MC association DECLARE_SOA_COLUMN(IsPrimary, isPrimary, int); //! -1 unknown, 0 not primary, 1 primary DECLARE_SOA_COLUMN(BachBaryonCosPA, bachBaryonCosPA, float); //! avoid bach-baryon correlated inv mass structure in analysis DECLARE_SOA_COLUMN(BachBaryonDCAxyToPV, bachBaryonDCAxyToPV, float); //! avoid bach-baryon correlated inv mass structure in analysis diff --git a/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx b/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx index 6ca9c40082b..8ec9142efc3 100644 --- a/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/Strangeness/cascqaanalysis.cxx @@ -68,6 +68,7 @@ using namespace o2::aod::rctsel; using TrkPidInfo = soa::Join; using DauTracks = soa::Join; using LabeledCascades = soa::Join; +using BCsWithBcSels = soa::Join; struct Cascqaanalysis { @@ -119,6 +120,7 @@ struct Cascqaanalysis { Configurable isTriggerTVX{"isTriggerTVX", 1, "TVX trigger"}; Configurable isNoTimeFrameBorder{"isNoTimeFrameBorder", 1, "TF border cut"}; Configurable isNoITSROFrameBorder{"isNoITSROFrameBorder", 1, "ITS ROF border cut"}; + Configurable applyBcBorderCutsOnGen{"applyBcBorderCutsOnGen", false, "Apply enabled BC-level TF and ITS ROF border cuts on generated-level MC collisions"}; Configurable isNoCollInTimeRangeNarrow{"isNoCollInTimeRangeNarrow", 1, "No collisions in +-2us window"}; Configurable requireRCTFlagChecker{"requireRCTFlagChecker", true, "Check event quality in run condition table"}; @@ -221,7 +223,7 @@ struct Cascqaanalysis { void init(InitContext const&) { TString hCandidateCounterLabels[4] = {"All candidates", "passed topo cuts", "has associated MC particle", "associated with Xi(Omega)"}; - TString hNEventsMCLabels[6] = {"All", "z vrtx", "INEL", "INEL>0", "INEL>1", "Associated with rec. collision"}; + TString hNEventsMCLabels[7] = {"All", "z vrtx", "BC TF/ITS ROF border", "INEL", "INEL>0", "INEL>1", "Associated with rec. collision"}; TString hNEventsLabels[14] = {"All", "kIsTriggerTVX", "kNoTimeFrameBorder", "kNoITSROFrameBorder", "kIsVertexITSTPC", "kNoSameBunchPileup", "kIsGoodZvtxFT0vsPV", "isVertexTOFmatched", "kNoCollInTimeRangeNarrow", "z vrtx", "RCTFlagsChecker", "INEL", "INEL>0", "INEL>1"}; registry.add("hNEvents", "hNEvents", {HistType::kTH1D, {{14, 0.f, 14.f}}}); @@ -239,7 +241,7 @@ struct Cascqaanalysis { // Rec. lvl registry.add("fakeEvents", "fakeEvents", {HistType::kTH1F, {{1, -0.5f, 0.5f}}}); // Gen. lvl - registry.add("hNEventsMC", "hNEventsMC", {HistType::kTH1D, {{6, 0.0f, 6.0f}}}); + registry.add("hNEventsMC", "hNEventsMC", {HistType::kTH1D, {{7, 0.0f, 7.0f}}}); for (int n = 1; n <= registry.get(HIST("hNEventsMC"))->GetNbinsX(); n++) { registry.get(HIST("hNEventsMC"))->GetXaxis()->SetBinLabel(n, hNEventsMCLabels[n - 1]); } @@ -481,6 +483,21 @@ struct Cascqaanalysis { return true; } + template + bool acceptGeneratedEventBcBorderCuts(TBC const& bc) + { + if (!applyBcBorderCutsOnGen) { + return true; + } + if (isNoTimeFrameBorder && !bc.selection_bit(aod::evsel::kNoTimeFrameBorder)) { + return false; + } + if (isNoITSROFrameBorder && !bc.selection_bit(aod::evsel::kNoITSROFrameBorder)) { + return false; + } + return true; + } + void processData(soa::Join::iterator const& collision, @@ -546,7 +563,7 @@ struct Cascqaanalysis { posdau.tpcNClsFound(), negdau.tpcNClsFound(), bachelor.tpcNClsFound(), posdau.tpcNClsCrossedRows(), negdau.tpcNClsCrossedRows(), bachelor.tpcNClsCrossedRows(), posdau.hasTOF(), negdau.hasTOF(), bachelor.hasTOF(), - posdau.pt(), negdau.pt(), bachelor.pt(), -1, -1, casc.bachBaryonCosPA(), casc.bachBaryonDCAxyToPV(), evFlag, 1e3, 1e3); + posdau.pt(), negdau.pt(), bachelor.pt(), 0, -1, casc.bachBaryonCosPA(), casc.bachBaryonDCAxyToPV(), evFlag, 1e3, 1e3); } } } @@ -627,16 +644,16 @@ struct Cascqaanalysis { registry.fill(HIST("hCandidateCounter"), 1.5); // passed topo cuts nCandSel++; // Check mc association - float lPDG = 1e3; + int mcPdgCode = 0; float genPt = 1e3; float genY = 1e3; float isPrimary = -1; if (casc.has_mcParticle()) { registry.fill(HIST("hCandidateCounter"), 2.5); // has associated MC particle auto cascmc = casc.mcParticle(); + mcPdgCode = cascmc.pdgCode(); if (std::abs(cascmc.pdgCode()) == PDG_t::kXiMinus || std::abs(cascmc.pdgCode()) == PDG_t::kOmegaMinus) { registry.fill(HIST("hCandidateCounter"), 3.5); // associated with Xi or Omega - lPDG = cascmc.pdgCode(); isPrimary = cascmc.isPhysicalPrimary() ? 1 : 0; genPt = cascmc.pt(); genY = cascmc.y(); @@ -667,7 +684,7 @@ struct Cascqaanalysis { posdau.tpcNClsFound(), negdau.tpcNClsFound(), bachelor.tpcNClsFound(), posdau.tpcNClsCrossedRows(), negdau.tpcNClsCrossedRows(), bachelor.tpcNClsCrossedRows(), posdau.hasTOF(), negdau.hasTOF(), bachelor.hasTOF(), - posdau.pt(), negdau.pt(), bachelor.pt(), lPDG, isPrimary, casc.bachBaryonCosPA(), casc.bachBaryonDCAxyToPV(), evFlag, genPt, genY); + posdau.pt(), negdau.pt(), bachelor.pt(), mcPdgCode, isPrimary, casc.bachBaryonCosPA(), casc.bachBaryonDCAxyToPV(), evFlag, genPt, genY); } } } @@ -681,6 +698,7 @@ struct Cascqaanalysis { void processMCgen(soa::Join::iterator const& mcCollision, // mcCollision.centFV0A() to be added aod::McParticles const& mcParticles, const soa::SmallGroups>& collisions, + BCsWithBcSels const&, DauTracks const&) { // All generated collisions @@ -690,25 +708,29 @@ struct Cascqaanalysis { if (std::fabs(mcCollision.posZ()) > cutzvertex) { return; } - registry.fill(HIST("hZCollisionGen"), mcCollision.posZ()); registry.fill(HIST("hNEventsMC"), 1.5); + if (!acceptGeneratedEventBcBorderCuts(mcCollision.bc_as())) { + return; + } + registry.fill(HIST("hZCollisionGen"), mcCollision.posZ()); + registry.fill(HIST("hNEventsMC"), 2.5); // Define the type of generated MC collision EventTypeBin evType = kINEL; uint8_t flagsGen = 0; flagsGen |= o2::aod::myMCcascades::EvFlags::EvINEL; - registry.fill(HIST("hNEventsMC"), 2.5); + registry.fill(HIST("hNEventsMC"), 3.5); // Generated collision is INEL>0 if (pwglf::isINELgtNmc(mcParticles, 0, pdgDB)) { flagsGen |= o2::aod::myMCcascades::EvFlags::EvINELgt0; evType = kINELgt0; - registry.fill(HIST("hNEventsMC"), 3.5); + registry.fill(HIST("hNEventsMC"), 4.5); } // Generated collision is INEL>1 if (pwglf::isINELgtNmc(mcParticles, 1, pdgDB)) { flagsGen |= o2::aod::myMCcascades::EvFlags::EvINELgt1; evType = kINELgt1; - registry.fill(HIST("hNEventsMC"), 4.5); + registry.fill(HIST("hNEventsMC"), 5.5); } registry.fill(HIST("hCentFT0M_genMC"), mcCollision.centFT0M(), evType); @@ -783,7 +805,7 @@ struct Cascqaanalysis { uint8_t flagsAssoc = 0; if (evtReconstructedAndINEL) { flagsAssoc |= o2::aod::myMCcascades::EvFlags::EvINEL; - registry.fill(HIST("hNEventsMC"), 5.5); + registry.fill(HIST("hNEventsMC"), 6.5); } if (evtReconstructedAndINELgt0) { flagsAssoc |= o2::aod::myMCcascades::EvFlags::EvINELgt0; diff --git a/PWGLF/Tasks/Strangeness/cascpostprocessing.cxx b/PWGLF/Tasks/Strangeness/cascpostprocessing.cxx index 94dafc57939..29ac791051d 100644 --- a/PWGLF/Tasks/Strangeness/cascpostprocessing.cxx +++ b/PWGLF/Tasks/Strangeness/cascpostprocessing.cxx @@ -106,6 +106,7 @@ struct LfCascpostprocessing { AxisSpec ptAxisTopoVar = {50, 0.0f, 10.0f, "#it{p}_{T} (GeV/#it{c})"}; AxisSpec ptAxisPID = {50, 0.0f, 10.0f, "#it{p}_{T} (GeV/#it{c})"}; ConfigurableAxis etaAxis{"etaAxis", {40, -2.0f, 2.0f}, "#eta"}; + AxisSpec pdgCodeAxis = {10001, -5000.5f, 5000.5f, "MC PDG code (0 = no MC assoc.)"}; ConfigurableAxis centFT0MAxis{"centFT0MAxis", {VARIABLE_WIDTH, 0., 0.01, 0.05, 0.1, 0.5, 1, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 101, 105.5}, @@ -238,6 +239,9 @@ struct LfCascpostprocessing { registry.add("hCascPlusMassvsPtBG", "hCascPlusMassvsPtBG", {HistType::kTH2F, {ptAxis, massAxis}}); registry.add("hCascMinusMassvsPtBG_FT0M", "hCascMinusMassvsPtBG_FT0M", {HistType::kTH3F, {ptAxis, massAxis, centFT0MAxis}}); registry.add("hCascPlusMassvsPtBG_FT0M", "hCascPlusMassvsPtBG_FT0M", {HistType::kTH3F, {ptAxis, massAxis, centFT0MAxis}}); + registry.add("hMisidentifiedCascPdgCode", "hMisidentifiedCascPdgCode", {HistType::kTH1F, {pdgCodeAxis}}); + registry.add("hMisidentifiedCascMinusPdgCode", "hMisidentifiedCascMinusPdgCode", {HistType::kTH1F, {pdgCodeAxis}}); + registry.add("hMisidentifiedCascPlusPdgCode", "hMisidentifiedCascPlusPdgCode", {HistType::kTH1F, {pdgCodeAxis}}); registry.add("hPtXiPlusTrue", "hPtXiPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, centFT0MAxis}}); registry.add("hPtXiMinusTrue", "hPtXiMinusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, centFT0MAxis}}); registry.add("hPtOmegaPlusTrue", "hPtOmegaPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, centFT0MAxis}}); @@ -514,6 +518,15 @@ struct LfCascpostprocessing { // registry.fill(HIST("hNegITSHits"), candidate.negitshits()); // registry.fill(HIST("hBachITSHits"), candidate.bachitshits()); + if (isMC && !isCorrectlyRec) { + registry.fill(HIST("hMisidentifiedCascPdgCode"), candidate.mcPdgCode()); + if (candidate.sign() < 0) { + registry.fill(HIST("hMisidentifiedCascMinusPdgCode"), candidate.mcPdgCode()); + } else if (candidate.sign() > 0) { + registry.fill(HIST("hMisidentifiedCascPlusPdgCode"), candidate.mcPdgCode()); + } + } + if (candidate.sign() < 0) { if (isMC) { if (isCorrectlyRec) {