From bbd9783a74c80574bb3b53a84d750ffa107a65d0 Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Tue, 11 Jul 2023 16:30:10 +0200 Subject: [PATCH 01/21] HistogramsForSignalLossCorrection --- PWGLF/TableProducer/cascqaanalysis.cxx | 88 ++++++++++++++++++-------- PWGLF/Tasks/cascpostprocessing.cxx | 2 + 2 files changed, 64 insertions(+), 26 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index 42949feca98..e6bc9f01186 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -12,6 +12,8 @@ /// \brief QA task for Cascade analysis using derived data /// /// \author Francesca Ercolessi (francesca.ercolessi@cern.ch) +/// \modified by Roman Nepeivoda (roman.nepeivoda@cern.ch) +/// \since June 1, 2023 #include "Framework/runDataProcessing.h" #include "Framework/AnalysisTask.h" @@ -30,7 +32,7 @@ using namespace o2::framework; using namespace o2::framework::expressions; // using DauTracks = soa::Join; -using DauTracks = soa::Join; +using DauTracks = soa::Join; using LabeledCascades = soa::Join; struct cascqaanalysis { @@ -43,6 +45,36 @@ struct cascqaanalysis { AxisSpec ptAxis = {200, 0.0f, 10.0f, "#it{p}_{T} (GeV/#it{c})"}; AxisSpec rapidityAxis = {200, -2.0f, 2.0f, "y"}; + ConfigurableAxis axisMultNTracks{"axisMultNTracks", {500, 0, 500}, "N_{tracks}"}; + + AxisSpec centFT0MAxis = {1055, 0.f, 105.5f, "FT0M (%)"}; + ConfigurableAxis axisMultFT0{"axisMultFT0", {10000, 0, 40000}, "FT0 amplitude"}; + + // Event selection criteria + Configurable cutzvertex{"cutzvertex", 20.0f, "Accepted z-vertex range (cm)"}; + Configurable sel8{"sel8", 1, "Apply sel8 event selection"}; + + // Cascade selection criteria + Configurable scalefactor{"scalefactor", 1.0, "Scaling factor"}; + Configurable casccospa{"casccospa", 0.97, "Casc CosPA"}; + Configurable v0cospa{"v0cospa", 0.97, "V0 CosPA"}; + Configurable dcacascdau{"dcacascdau", 2.0, "DCA Casc Daughters"}; + Configurable dcav0dau{"dcav0dau", 2.0, "DCA V0 Daughters"}; + Configurable dcanegtopv{"dcanegtopv", 0.0, "DCA Neg To PV"}; + Configurable dcapostopv{"dcapostopv", 0.0, "DCA Pos To PV"}; + Configurable dcabachtopv{"dcabachtopv", 0.0, "DCA Bach To PV"}; + Configurable v0radius{"v0radius", 0.0, "V0 Radius"}; + Configurable cascradius{"cascradius", 0.0, "Casc Radius"}; + Configurable etadau{"etadau", 0.8, "Eta Daughters"}; + + Configurable isMC{"isMC", 0, "0 - data, 1 - MC"}; + + // Necessary for particle charges + Service pdgDB; + + SliceCache cache; + + TRandom* fRand = new TRandom(); void init(InitContext const&) { @@ -58,8 +90,17 @@ struct cascqaanalysis { registry.add("hNContributorsCorrelation", "hNContributorsCorrelation", {HistType::kTH2F, {{250, -0.5f, 249.5f, "Secondary Contributor"}, {250, -0.5f, 249.5f, "Main Contributor"}}}); registry.add("hZCollision", "hZCollision", {HistType::kTH1F, {{200, -20.f, 20.f}}}); registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1F, {{200, -20.f, 20.f}}}); - registry.add("hCentFT0M", "hCentFT0M", {HistType::kTH2F, {{1055, 0.f, 105.5f}, {3, -0.5f, 2.5f}}}); - registry.add("hCentFV0A", "hCentFV0A", {HistType::kTH2F, {{1055, 0.f, 105.5f}, {3, -0.5f, 2.5f}}}); + + if(isMC){ + registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {axisMultFT0, {3, -0.5f, 2.5f}, axisMultNTracks}}); + registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {axisMultFT0, {3, -0.5f, 2.5f}, axisMultNTracks}}); + } + else{ + registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {centFT0MAxis, {3, -0.5, 2.5}, axisMultNTracks}}); + registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, {3, -0.5, 2.5}, axisMultNTracks}}); + } + + registry.add("hCentFV0A", "hCentFV0A", {HistType::kTH2F, {{1055, 0.f, 105.5f}, {3, -0.5, 2.5}}}); registry.add("hNEventsMC", "hNEventsMC", {HistType::kTH1F, {{6, 0.0f, 6.0f}}}); for (Int_t n = 1; n <= registry.get(HIST("hNEventsMC"))->GetNbinsX(); n++) { @@ -75,28 +116,6 @@ struct cascqaanalysis { AxisSpec secondaryTracks = {2000, 0, 2000, "N_{secondary tracks}"}; } - // Event selection criteria - Configurable cutzvertex{"cutzvertex", 20.0f, "Accepted z-vertex range (cm)"}; - Configurable sel8{"sel8", 1, "Apply sel8 event selection"}; - - // Cascade selection criteria - Configurable scalefactor{"scalefactor", 1.0, "Scaling factor"}; - Configurable casccospa{"casccospa", 0.97, "Casc CosPA"}; - Configurable v0cospa{"v0cospa", 0.97, "V0 CosPA"}; - Configurable dcacascdau{"dcacascdau", 2.0, "DCA Casc Daughters"}; - Configurable dcav0dau{"dcav0dau", 2.0, "DCA V0 Daughters"}; - Configurable dcanegtopv{"dcanegtopv", 0.0, "DCA Neg To PV"}; - Configurable dcapostopv{"dcapostopv", 0.0, "DCA Pos To PV"}; - Configurable dcabachtopv{"dcabachtopv", 0.0, "DCA Bach To PV"}; - Configurable v0radius{"v0radius", 0.0, "V0 Radius"}; - Configurable cascradius{"cascradius", 0.0, "Casc Radius"}; - Configurable etadau{"etadau", 0.8, "Eta Daughters"}; - - // Necessary for particle charges - Service pdgDB; - - TRandom* fRand = new TRandom(); - Filter preFilter = (nabs(aod::cascdata::dcapostopv) > dcapostopv && nabs(aod::cascdata::dcanegtopv) > dcanegtopv && @@ -104,6 +123,9 @@ struct cascqaanalysis { aod::cascdata::dcaV0daughters < dcav0dau && aod::cascdata::dcacascdaughters < dcacascdau); + Partition pvContribTracksIUEta1 = (nabs(aod::track::eta) < 1.0f) && ((aod::track::flags & (uint32_t)o2::aod::track::PVContributor) == (uint32_t)o2::aod::track::PVContributor); + Partition globalTracksIUEta05 = (nabs(aod::track::eta) < 0.5f) && (requireGlobalTrackInFilter()); + template bool AcceptCascCandidate(TCascade const& cascCand, float const& pvx, float const& pvy, float const& pvz) { @@ -164,7 +186,21 @@ struct cascqaanalysis { if (isFillEventSelectionQA) { registry.fill(HIST("hZCollision"), collision.posZ()); - registry.fill(HIST("hCentFT0M"), collision.centFT0M(), evFlag); + + auto tracksGroupedGlobal = globalTracksIUEta05->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); + int ntracksGlobal = tracksGroupedGlobal.size(); + + auto tracksGroupedPVcontr = pvContribTracksIUEta1->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); + int ntracksPVcontr = tracksGroupedPVcontr.size(); + + if(isMC){ + registry.fill(HIST("hFT0MpvContr"), collision.multFT0A() + collision.multFT0C(), evFlag, ntracksPVcontr); + registry.fill(HIST("hFT0Mglobal"), collision.multFT0A() + collision.multFT0C(), evFlag, ntracksGlobal); + } + else{ + registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), evFlag, ntracksPVcontr); + registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), evFlag, ntracksGlobal); + } registry.fill(HIST("hCentFV0A"), collision.centFV0A(), evFlag); } return true; diff --git a/PWGLF/Tasks/cascpostprocessing.cxx b/PWGLF/Tasks/cascpostprocessing.cxx index 6391856e7dc..ca3a9e78131 100644 --- a/PWGLF/Tasks/cascpostprocessing.cxx +++ b/PWGLF/Tasks/cascpostprocessing.cxx @@ -13,6 +13,8 @@ /// \author Francesca Ercolessi (francesca.ercolessi@cern.ch) /// \modified by Chiara De Martin (chiara.de.martin@cern.ch) /// \since March 20, 2023 +/// \modified by Roman Nepeivoda (roman.nepeivoda@cern.ch) +/// \since June 1, 2023 #include "Framework/runDataProcessing.h" #include "Framework/AnalysisTask.h" From 3ec21a25bd5a37b9cf516c71547921a15c12dc33 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 11 Jul 2023 14:31:38 +0000 Subject: [PATCH 02/21] Please consider the following formatting changes --- PWGLF/TableProducer/cascqaanalysis.cxx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index e6bc9f01186..e240121a60a 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -91,11 +91,10 @@ struct cascqaanalysis { registry.add("hZCollision", "hZCollision", {HistType::kTH1F, {{200, -20.f, 20.f}}}); registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1F, {{200, -20.f, 20.f}}}); - if(isMC){ + if (isMC) { registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {axisMultFT0, {3, -0.5f, 2.5f}, axisMultNTracks}}); registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {axisMultFT0, {3, -0.5f, 2.5f}, axisMultNTracks}}); - } - else{ + } else { registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {centFT0MAxis, {3, -0.5, 2.5}, axisMultNTracks}}); registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, {3, -0.5, 2.5}, axisMultNTracks}}); } @@ -193,11 +192,10 @@ struct cascqaanalysis { auto tracksGroupedPVcontr = pvContribTracksIUEta1->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); int ntracksPVcontr = tracksGroupedPVcontr.size(); - if(isMC){ + if (isMC) { registry.fill(HIST("hFT0MpvContr"), collision.multFT0A() + collision.multFT0C(), evFlag, ntracksPVcontr); registry.fill(HIST("hFT0Mglobal"), collision.multFT0A() + collision.multFT0C(), evFlag, ntracksGlobal); - } - else{ + } else { registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), evFlag, ntracksPVcontr); registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), evFlag, ntracksGlobal); } From 3026eef3a76bf099d08574f1ba4f2c75b48833d3 Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Tue, 11 Jul 2023 16:37:03 +0200 Subject: [PATCH 03/21] swap axes --- PWGLF/TableProducer/cascqaanalysis.cxx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index e6bc9f01186..4b475b1938e 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -92,12 +92,12 @@ struct cascqaanalysis { registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1F, {{200, -20.f, 20.f}}}); if(isMC){ - registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {axisMultFT0, {3, -0.5f, 2.5f}, axisMultNTracks}}); - registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {axisMultFT0, {3, -0.5f, 2.5f}, axisMultNTracks}}); + registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {axisMultFT0, axisMultNTracks, {3, -0.5, 2.5}}}); + registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {axisMultFT0, axisMultNTracks, {3, -0.5, 2.5}}}); } else{ - registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {centFT0MAxis, {3, -0.5, 2.5}, axisMultNTracks}}); - registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, {3, -0.5, 2.5}, axisMultNTracks}}); + registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {centFT0MAxis, axisMultNTracks, {3, -0.5, 2.5}}}); + registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, axisMultNTracks, {3, -0.5, 2.5}}}); } registry.add("hCentFV0A", "hCentFV0A", {HistType::kTH2F, {{1055, 0.f, 105.5f}, {3, -0.5, 2.5}}}); @@ -194,12 +194,12 @@ struct cascqaanalysis { int ntracksPVcontr = tracksGroupedPVcontr.size(); if(isMC){ - registry.fill(HIST("hFT0MpvContr"), collision.multFT0A() + collision.multFT0C(), evFlag, ntracksPVcontr); - registry.fill(HIST("hFT0Mglobal"), collision.multFT0A() + collision.multFT0C(), evFlag, ntracksGlobal); + registry.fill(HIST("hFT0MpvContr"), collision.multFT0A() + collision.multFT0C(), ntracksPVcontr, evFlag); + registry.fill(HIST("hFT0Mglobal"), collision.multFT0A() + collision.multFT0C(), ntracksGlobal, evFlag); } else{ - registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), evFlag, ntracksPVcontr); - registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), evFlag, ntracksGlobal); + registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), ntracksPVcontr, evFlag); + registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), ntracksGlobal, evFlag); } registry.fill(HIST("hCentFV0A"), collision.centFV0A(), evFlag); } From 6c7ef7587ac7c6be92b8aabdb70c6337f77c5412 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 11 Jul 2023 14:38:44 +0000 Subject: [PATCH 04/21] Please consider the following formatting changes --- PWGLF/TableProducer/cascqaanalysis.cxx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index 4b475b1938e..00fbedb38b6 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -91,11 +91,10 @@ struct cascqaanalysis { registry.add("hZCollision", "hZCollision", {HistType::kTH1F, {{200, -20.f, 20.f}}}); registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1F, {{200, -20.f, 20.f}}}); - if(isMC){ + if (isMC) { registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {axisMultFT0, axisMultNTracks, {3, -0.5, 2.5}}}); registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {axisMultFT0, axisMultNTracks, {3, -0.5, 2.5}}}); - } - else{ + } else { registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {centFT0MAxis, axisMultNTracks, {3, -0.5, 2.5}}}); registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, axisMultNTracks, {3, -0.5, 2.5}}}); } @@ -193,11 +192,10 @@ struct cascqaanalysis { auto tracksGroupedPVcontr = pvContribTracksIUEta1->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); int ntracksPVcontr = tracksGroupedPVcontr.size(); - if(isMC){ + if (isMC) { registry.fill(HIST("hFT0MpvContr"), collision.multFT0A() + collision.multFT0C(), ntracksPVcontr, evFlag); registry.fill(HIST("hFT0Mglobal"), collision.multFT0A() + collision.multFT0C(), ntracksGlobal, evFlag); - } - else{ + } else { registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), ntracksPVcontr, evFlag); registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), ntracksGlobal, evFlag); } From 6c3cc3aa6cb2c993958b3e7cf4b0b7be003d478a Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Wed, 12 Jul 2023 12:36:18 +0200 Subject: [PATCH 05/21] Comments + Names changes --- PWGLF/TableProducer/cascqaanalysis.cxx | 63 +++++++++++++------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index 00fbedb38b6..11f3e3c8ff6 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -24,20 +24,20 @@ #include "Common/DataModel/Multiplicity.h" #include "Common/DataModel/Centrality.h" #include "PWGLF/DataModel/cascqaanalysis.h" -#include "TRandom.h" +#include "TRandom2.h" #include "Framework/O2DatabasePDGPlugin.h" using namespace o2; using namespace o2::framework; using namespace o2::framework::expressions; -// using DauTracks = soa::Join; +// using DauTracks = soa::Join; using DauTracks = soa::Join; using LabeledCascades = soa::Join; struct cascqaanalysis { - // Produces + // Tables to produce Produces mycascades; Produces myMCcascades; @@ -45,10 +45,11 @@ struct cascqaanalysis { AxisSpec ptAxis = {200, 0.0f, 10.0f, "#it{p}_{T} (GeV/#it{c})"}; AxisSpec rapidityAxis = {200, -2.0f, 2.0f, "y"}; - ConfigurableAxis axisMultNTracks{"axisMultNTracks", {500, 0, 500}, "N_{tracks}"}; - AxisSpec centFT0MAxis = {1055, 0.f, 105.5f, "FT0M (%)"}; - ConfigurableAxis axisMultFT0{"axisMultFT0", {10000, 0, 40000}, "FT0 amplitude"}; + AxisSpec eventTypeAxis = {9, -0.5f, 2.5f}; + + ConfigurableAxis multNTracksAxis{"multNTracksAxis", {500, 0, 500}, "N_{tracks}"}; + ConfigurableAxis multFT0Axis{"multFT0Axis", {10000, 0, 40000}, "FT0 amplitude"}; // Event selection criteria Configurable cutzvertex{"cutzvertex", 20.0f, "Accepted z-vertex range (cm)"}; @@ -67,6 +68,7 @@ struct cascqaanalysis { Configurable cascradius{"cascradius", 0.0, "Casc Radius"}; Configurable etadau{"etadau", 0.8, "Eta Daughters"}; + // Switch between Data/MC-dedicated FT0M X-axes Configurable isMC{"isMC", 0, "0 - data, 1 - MC"}; // Necessary for particle charges @@ -74,7 +76,8 @@ struct cascqaanalysis { SliceCache cache; - TRandom* fRand = new TRandom(); + // Random number generator for event scaling + TRandom2* fRand = new TRandom2(); void init(InitContext const&) { @@ -91,12 +94,13 @@ struct cascqaanalysis { registry.add("hZCollision", "hZCollision", {HistType::kTH1F, {{200, -20.f, 20.f}}}); registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1F, {{200, -20.f, 20.f}}}); - if (isMC) { - registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {axisMultFT0, axisMultNTracks, {3, -0.5, 2.5}}}); - registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {axisMultFT0, axisMultNTracks, {3, -0.5, 2.5}}}); - } else { - registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {centFT0MAxis, axisMultNTracks, {3, -0.5, 2.5}}}); - registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, axisMultNTracks, {3, -0.5, 2.5}}}); + if(isMC){ + registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {multFT0Axis, multNTracksAxis, eventTypeAxis}}); + registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {multFT0Axis, multNTracksAxis, eventTypeAxis}}); + } + else{ + registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); + registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); } registry.add("hCentFV0A", "hCentFV0A", {HistType::kTH2F, {{1055, 0.f, 105.5f}, {3, -0.5, 2.5}}}); @@ -110,9 +114,6 @@ struct cascqaanalysis { for (Int_t n = 1; n <= registry.get(HIST("hCandidateCounter"))->GetNbinsX(); n++) { registry.get(HIST("hCandidateCounter"))->GetXaxis()->SetBinLabel(n, hCandidateCounterLabels[n - 1]); } - - AxisSpec allTracks = {2000, 0, 2000, "N_{all tracks}"}; - AxisSpec secondaryTracks = {2000, 0, 2000, "N_{secondary tracks}"}; } Filter preFilter = @@ -186,18 +187,19 @@ struct cascqaanalysis { if (isFillEventSelectionQA) { registry.fill(HIST("hZCollision"), collision.posZ()); - auto tracksGroupedGlobal = globalTracksIUEta05->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); - int ntracksGlobal = tracksGroupedGlobal.size(); - auto tracksGroupedPVcontr = pvContribTracksIUEta1->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); - int ntracksPVcontr = tracksGroupedPVcontr.size(); + int nTracksPVcontr = tracksGroupedPVcontr.size(); - if (isMC) { - registry.fill(HIST("hFT0MpvContr"), collision.multFT0A() + collision.multFT0C(), ntracksPVcontr, evFlag); - registry.fill(HIST("hFT0Mglobal"), collision.multFT0A() + collision.multFT0C(), ntracksGlobal, evFlag); - } else { - registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), ntracksPVcontr, evFlag); - registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), ntracksGlobal, evFlag); + auto tracksGroupedGlobal = globalTracksIUEta05->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); + int nTracksGlobal = tracksGroupedGlobal.size(); + + if(isMC){ + registry.fill(HIST("hFT0MpvContr"), collision.multFT0A() + collision.multFT0C(), nTracksPVcontr, evFlag); + registry.fill(HIST("hFT0Mglobal"), collision.multFT0A() + collision.multFT0C(), nTracksGlobal, evFlag); + } + else{ + registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), nTracksPVcontr, evFlag); + registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), nTracksGlobal, evFlag); } registry.fill(HIST("hCentFV0A"), collision.centFV0A(), evFlag); } @@ -207,7 +209,7 @@ struct cascqaanalysis { template bool isINELgtNmc(TMcParticles particles, int nChToSatisfySelection) { - // INEL > 0 (at least 1 charged particle in |eta| < 1.0) + // INEL > N (at least N+1 charged particles in |eta| < 1.0) typedef struct EtaCharge { double eta; int charge; @@ -327,8 +329,6 @@ struct cascqaanalysis { } } - PROCESS_SWITCH(cascqaanalysis, processData, "Process Run 3 data", true); - void processMCrec(soa::Join::iterator const& collision, soa::Filtered const& Cascades, aod::V0sLinked const&, @@ -419,8 +419,6 @@ struct cascqaanalysis { } } - PROCESS_SWITCH(cascqaanalysis, processMCrec, "Process Run 3 mc, reconstructed", false); - void processMCgen(aod::McCollision const& mcCollision, aod::McParticles const& mcParticles, const soa::SmallGroups>& collisions, @@ -546,6 +544,9 @@ struct cascqaanalysis { flagsGen); } } + + PROCESS_SWITCH(cascqaanalysis, processData, "Process Run 3 data", true); + PROCESS_SWITCH(cascqaanalysis, processMCrec, "Process Run 3 mc, reconstructed", false); PROCESS_SWITCH(cascqaanalysis, processMCgen, "Process Run 3 mc, genereated", false); }; From 4bac51ecb017bf059f1a05a5f5ce91a3b1dc5927 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 12 Jul 2023 10:37:12 +0000 Subject: [PATCH 06/21] Please consider the following formatting changes --- PWGLF/TableProducer/cascqaanalysis.cxx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index 11f3e3c8ff6..e2cef6bc390 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -94,11 +94,10 @@ struct cascqaanalysis { registry.add("hZCollision", "hZCollision", {HistType::kTH1F, {{200, -20.f, 20.f}}}); registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1F, {{200, -20.f, 20.f}}}); - if(isMC){ + if (isMC) { registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {multFT0Axis, multNTracksAxis, eventTypeAxis}}); registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {multFT0Axis, multNTracksAxis, eventTypeAxis}}); - } - else{ + } else { registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); } @@ -193,11 +192,10 @@ struct cascqaanalysis { auto tracksGroupedGlobal = globalTracksIUEta05->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); int nTracksGlobal = tracksGroupedGlobal.size(); - if(isMC){ + if (isMC) { registry.fill(HIST("hFT0MpvContr"), collision.multFT0A() + collision.multFT0C(), nTracksPVcontr, evFlag); registry.fill(HIST("hFT0Mglobal"), collision.multFT0A() + collision.multFT0C(), nTracksGlobal, evFlag); - } - else{ + } else { registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), nTracksPVcontr, evFlag); registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), nTracksGlobal, evFlag); } From 2ad175b5b4f201467864825b555ec2f4c3be2d6a Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Thu, 13 Jul 2023 16:01:15 +0200 Subject: [PATCH 07/21] signal/event loss histograms --- PWGLF/TableProducer/cascqaanalysis.cxx | 185 +++++++++++++++---------- PWGLF/Tasks/cascpostprocessing.cxx | 39 +++--- 2 files changed, 130 insertions(+), 94 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index e2cef6bc390..473cd3222b2 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -43,14 +43,6 @@ struct cascqaanalysis { HistogramRegistry registry{"registry"}; - AxisSpec ptAxis = {200, 0.0f, 10.0f, "#it{p}_{T} (GeV/#it{c})"}; - AxisSpec rapidityAxis = {200, -2.0f, 2.0f, "y"}; - AxisSpec centFT0MAxis = {1055, 0.f, 105.5f, "FT0M (%)"}; - AxisSpec eventTypeAxis = {9, -0.5f, 2.5f}; - - ConfigurableAxis multNTracksAxis{"multNTracksAxis", {500, 0, 500}, "N_{tracks}"}; - ConfigurableAxis multFT0Axis{"multFT0Axis", {10000, 0, 40000}, "FT0 amplitude"}; - // Event selection criteria Configurable cutzvertex{"cutzvertex", 20.0f, "Accepted z-vertex range (cm)"}; Configurable sel8{"sel8", 1, "Apply sel8 event selection"}; @@ -81,6 +73,16 @@ struct cascqaanalysis { void init(InitContext const&) { + AxisSpec ptAxis = {200, 0.0f, 10.0f, "#it{p}_{T} (GeV/#it{c})"}; + AxisSpec rapidityAxis = {200, -2.0f, 2.0f, "y"}; + AxisSpec centFT0MAxis = {1055, 0.f, 105.5f, "FT0M (%)"}; + AxisSpec centFV0AAxis = {1055, 0.f, 105.5f, "FV0A (%)"}; + AxisSpec eventTypeAxis = {3, -0.5f, 2.5f, "Event Type"}; + AxisSpec nAssocCollAxis = {5, -0.5f, 4.5f, "N_{assoc.}"}; + AxisSpec nChargedGenAxis = {500, 0, 500, "N_{FT0M, gen.}"}; + AxisSpec multNTracksAxis = {500, 0, 500, "N_{tracks}"}; + AxisSpec multFT0Axis = {10000, 0, 40000, "FT0 amplitude"}; + TString hCandidateCounterLabels[5] = {"All candidates", "v0data exists", "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 hNEventsLabels[6] = {"All", "sel8", "z vrtx", "INEL", "INEL>0", "INEL>1"}; @@ -89,30 +91,31 @@ struct cascqaanalysis { for (Int_t n = 1; n <= registry.get(HIST("hNEvents"))->GetNbinsX(); n++) { registry.get(HIST("hNEvents"))->GetXaxis()->SetBinLabel(n, hNEventsLabels[n - 1]); } - registry.add("hNAssocMCCollisions", "hNAssocMCCollisions", {HistType::kTH1F, {{5, -0.5f, 4.5f}}}); - registry.add("hNContributorsCorrelation", "hNContributorsCorrelation", {HistType::kTH2F, {{250, -0.5f, 249.5f, "Secondary Contributor"}, {250, -0.5f, 249.5f, "Main Contributor"}}}); registry.add("hZCollision", "hZCollision", {HistType::kTH1F, {{200, -20.f, 20.f}}}); - registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1F, {{200, -20.f, 20.f}}}); + registry.add("hCandidateCounter", "hCandidateCounter", {HistType::kTH1F, {{5, 0.0f, 5.0f}}}); + for (Int_t n = 1; n <= registry.get(HIST("hCandidateCounter"))->GetNbinsX(); n++) { + registry.get(HIST("hCandidateCounter"))->GetXaxis()->SetBinLabel(n, hCandidateCounterLabels[n - 1]); + } if (isMC) { - registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {multFT0Axis, multNTracksAxis, eventTypeAxis}}); - registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {multFT0Axis, multNTracksAxis, eventTypeAxis}}); + // Rec. lvl + registry.add("hNchFT0MPVContr", "hNchFT0MPVContr", {HistType::kTH3F, {nChargedGenAxis, multNTracksAxis, eventTypeAxis}}); + registry.add("hNchFT0Mglobal", "hNchFT0Mglobal", {HistType::kTH3F, {nChargedGenAxis, multNTracksAxis, eventTypeAxis}}); + // Gen. lvl + registry.add("hNEventsMC", "hNEventsMC", {HistType::kTH1F, {{6, 0.0f, 6.0f}}}); + for (Int_t n = 1; n <= registry.get(HIST("hNEventsMC"))->GetNbinsX(); n++) { + registry.get(HIST("hNEventsMC"))->GetXaxis()->SetBinLabel(n, hNEventsMCLabels[n - 1]); + } + registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1F, {{200, -20.f, 20.f}}}); + registry.add("hNchFT0MNAssocMCCollisions", "hNchFT0MNAssocMCCollisions", {HistType::kTH2F, {nChargedGenAxis, nAssocCollAxis}}); + 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::kTH2F, {nChargedGenAxis, eventTypeAxis}}); } else { registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); } - registry.add("hCentFV0A", "hCentFV0A", {HistType::kTH2F, {{1055, 0.f, 105.5f}, {3, -0.5, 2.5}}}); - - registry.add("hNEventsMC", "hNEventsMC", {HistType::kTH1F, {{6, 0.0f, 6.0f}}}); - for (Int_t n = 1; n <= registry.get(HIST("hNEventsMC"))->GetNbinsX(); n++) { - registry.get(HIST("hNEventsMC"))->GetXaxis()->SetBinLabel(n, hNEventsMCLabels[n - 1]); - } - - registry.add("hCandidateCounter", "hCandidateCounter", {HistType::kTH1F, {{5, 0.0f, 5.0f}}}); - for (Int_t n = 1; n <= registry.get(HIST("hCandidateCounter"))->GetNbinsX(); n++) { - registry.get(HIST("hCandidateCounter"))->GetXaxis()->SetBinLabel(n, hCandidateCounterLabels[n - 1]); - } + registry.add("hCentFV0A", "hCentFV0A", {HistType::kTH1F, {centFV0AAxis}}); } Filter preFilter = @@ -149,6 +152,47 @@ struct cascqaanalysis { } } + template + uint16_t GetGenNchInFT0Mregion(TMcParticles particles) + { + // Particle counting in FITFT0: -3.3<η<-2.1; 3.5<η<4.9 + uint16_t nchFT0 = 0; + for (auto& mcParticle : particles) { + if (!mcParticle.isPhysicalPrimary()) { + continue; + } + const auto& pdgInfo = pdgDB->GetParticle(mcParticle.pdgCode()); + if (!pdgInfo) { + continue; + } + if (pdgInfo->Charge() == 0) { + continue; + } + if (mcParticle.eta() < -3.3 || mcParticle.eta() > 4.9 || (mcParticle.eta() > -2.1 && mcParticle.eta() < 3.5)) { + continue; // select on T0M Nch region + } + nchFT0++; // increment + } + return nchFT0; + } + + template + int GetEventTypeFlag(TCollision const& collision) + { + // 0 - INEL, 1 - INEL > 0, 2 - INEL>1 + int evFlag = 0; + registry.fill(HIST("hNEvents"), 3.5); // INEL + if (collision.multNTracksPVeta1() > 0) { + evFlag += 1; + registry.fill(HIST("hNEvents"), 4.5); // INEL>0 + } + if (collision.multNTracksPVeta1() > 1) { + evFlag += 1; + registry.fill(HIST("hNEvents"), 5.5); // INEL>1 + } + return evFlag; + } + template bool AcceptEvent(TCollision const& collision, TTracks const& tracks, bool isFillEventSelectionQA) { @@ -163,6 +207,7 @@ struct cascqaanalysis { registry.fill(HIST("hNEvents"), 1.5); } + // Z vertex selection if (TMath::Abs(collision.posZ()) > cutzvertex) { return false; } @@ -170,36 +215,9 @@ struct cascqaanalysis { registry.fill(HIST("hNEvents"), 2.5); } - int evFlag = 0; - if (isFillEventSelectionQA) { - registry.fill(HIST("hNEvents"), 3.5); - if (collision.multNTracksPVeta1() > 0) { - evFlag += 1; - registry.fill(HIST("hNEvents"), 4.5); - } - if (collision.multNTracksPVeta1() > 1) { - evFlag += 1; - registry.fill(HIST("hNEvents"), 5.5); - } - } - if (isFillEventSelectionQA) { registry.fill(HIST("hZCollision"), collision.posZ()); - - auto tracksGroupedPVcontr = pvContribTracksIUEta1->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); - int nTracksPVcontr = tracksGroupedPVcontr.size(); - - auto tracksGroupedGlobal = globalTracksIUEta05->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); - int nTracksGlobal = tracksGroupedGlobal.size(); - - if (isMC) { - registry.fill(HIST("hFT0MpvContr"), collision.multFT0A() + collision.multFT0C(), nTracksPVcontr, evFlag); - registry.fill(HIST("hFT0Mglobal"), collision.multFT0A() + collision.multFT0C(), nTracksGlobal, evFlag); - } else { - registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), nTracksPVcontr, evFlag); - registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), nTracksGlobal, evFlag); - } - registry.fill(HIST("hCentFV0A"), collision.centFV0A(), evFlag); + registry.fill(HIST("hCentFV0A"), collision.centFV0A()); } return true; } @@ -260,6 +278,17 @@ struct cascqaanalysis { return; } + int evType = GetEventTypeFlag(collision); + + auto tracksGroupedPVcontr = pvContribTracksIUEta1->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); + int nTracksPVcontr = tracksGroupedPVcontr.size(); + + auto tracksGroupedGlobal = globalTracksIUEta05->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); + int nTracksGlobal = tracksGroupedGlobal.size(); + + registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), nTracksPVcontr, evType); + registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), nTracksGlobal, evType); + float lEventScale = scalefactor; for (const auto& casc : Cascades) { // loop over Cascades @@ -327,16 +356,33 @@ struct cascqaanalysis { } } - void processMCrec(soa::Join::iterator const& collision, + Preslice perMcCollision = aod::mcparticle::mcCollisionId; + + void processMCrec(soa::Join::iterator const& collision, soa::Filtered const& Cascades, aod::V0sLinked const&, aod::V0Datas const&, DauTracks const& Tracks, - aod::McParticles const&) + aod::McCollisions const&, + aod::McParticles const& mcParticles) { if (!AcceptEvent(collision, Tracks, 1)) { return; } + int evType = GetEventTypeFlag(collision); + + auto tracksGroupedPVcontr = pvContribTracksIUEta1->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); + int nTracksPVcontr = tracksGroupedPVcontr.size(); + + auto tracksGroupedGlobal = globalTracksIUEta05->sliceByCached(aod::track::collisionId, collision.globalIndex(), cache); + int nTracksGlobal = tracksGroupedGlobal.size(); + + // N charged in FT0M region in corresponding gen. MC collision + auto mcPartSlice = mcParticles.sliceBy(perMcCollision, collision.mcCollision_as().globalIndex()); + uint16_t nchFT0 = GetGenNchInFT0Mregion(mcPartSlice); + + registry.fill(HIST("hNchFT0MPVContr"), nchFT0, nTracksPVcontr, evType); + registry.fill(HIST("hNchFT0Mglobal"), nchFT0, nTracksGlobal, evType); float lEventScale = scalefactor; @@ -401,7 +447,7 @@ struct cascqaanalysis { } // Fill table if (fRand->Rndm() < lEventScale) { - mycascades(casc.globalIndex(), collision.posZ(), collision.multFT0A() + collision.multFT0C(), collision.multFV0A(), casc.sign(), casc.pt(), casc.yXi(), casc.yOmega(), casc.eta(), + mycascades(casc.globalIndex(), collision.posZ(), nchFT0, collision.multFV0A(), casc.sign(), casc.pt(), casc.yXi(), casc.yOmega(), casc.eta(), casc.mXi(), casc.mOmega(), casc.mLambda(), casc.cascradius(), casc.v0radius(), casc.casccosPA(collision.posX(), collision.posY(), collision.posZ()), casc.v0cosPA(collision.posX(), collision.posY(), collision.posZ()), casc.dcapostopv(), casc.dcanegtopv(), casc.dcabachtopv(), casc.dcacascdaughters(), casc.dcaV0daughters(), casc.dcav0topv(collision.posX(), collision.posY(), collision.posZ()), @@ -433,20 +479,26 @@ struct cascqaanalysis { registry.fill(HIST("hNEventsMC"), 1.5); // Define the type of generated MC collision + int evType = 0; uint8_t flagsGen = 0; flagsGen |= o2::aod::myMCcascades::EvFlags::EvINEL; registry.fill(HIST("hNEventsMC"), 2.5); // Generated collision is INEL>=0 if (isINELgtNmc(mcParticles, 0)) { flagsGen |= o2::aod::myMCcascades::EvFlags::EvINELgt0; + evType++; registry.fill(HIST("hNEventsMC"), 3.5); } // Generated collision is INEL>=1 if (isINELgtNmc(mcParticles, 1)) { flagsGen |= o2::aod::myMCcascades::EvFlags::EvINELgt1; + evType++; registry.fill(HIST("hNEventsMC"), 4.5); } + uint16_t nchFT0 = GetGenNchInFT0Mregion(mcParticles); + registry.fill(HIST("hNchFT0MGenEvType"), nchFT0, evType); + typedef struct CollisionIndexAndType { int64_t index; uint8_t typeFlag; @@ -478,7 +530,9 @@ struct cascqaanalysis { } } SelectedEvents.resize(nevts); - registry.fill(HIST("hNAssocMCCollisions"), nAssocColl); + + registry.fill(HIST("hNchFT0MNAssocMCCollisions"), nchFT0, nAssocColl); + if (NumberOfContributors.size() == 2) { std::sort(NumberOfContributors.begin(), NumberOfContributors.end()); registry.fill(HIST("hNContributorsCorrelation"), NumberOfContributors[0], NumberOfContributors[1]); @@ -506,25 +560,6 @@ struct cascqaanalysis { flagsAssoc |= o2::aod::myMCcascades::EvFlags::EvINELgt1; } - // Particle counting in FITFT0: -3.3<η<-2.1; 3.5<η<4.9 - uint16_t nchFT0 = 0; - for (auto& mcParticle : mcParticles) { - if (!mcParticle.isPhysicalPrimary()) { - continue; - } - const auto& pdgInfo = pdgDB->GetParticle(mcParticle.pdgCode()); - if (!pdgInfo) { - continue; - } - if (pdgInfo->Charge() == 0) { - continue; - } - if (mcParticle.eta() < -3.3 || mcParticle.eta() > 4.9 || (mcParticle.eta() > -2.1 && mcParticle.eta() < 3.5)) { - continue; // select on T0M Nch region - } - nchFT0++; // increment - } - for (const auto& mcParticle : mcParticles) { float sign = 0; if (mcParticle.pdgCode() == -3312 || mcParticle.pdgCode() == -3334) { diff --git a/PWGLF/Tasks/cascpostprocessing.cxx b/PWGLF/Tasks/cascpostprocessing.cxx index ca3a9e78131..db542edb991 100644 --- a/PWGLF/Tasks/cascpostprocessing.cxx +++ b/PWGLF/Tasks/cascpostprocessing.cxx @@ -69,7 +69,7 @@ struct cascpostprocessing { Configurable bachBaryonCosPA{"bachBaryonCosPA", 0.9999, "Bachelor baryon CosPA"}; Configurable bachBaryonDCAxyToPV{"bachBaryonDCAxyToPV", 0.05, "DCA bachelor baryon to PV"}; - Configurable isFT0MforMC{"isFT0MforMC", 0, "Fill with FT0M information or 0s"}; + Configurable isMC{"isMC", 0, "0 - data, 1 - MC"}; Configurable evSelFlag{"evSelFlag", 2, "1 - INEL; 2 - INEL>0; 3 - INEL>1"}; @@ -87,6 +87,7 @@ struct cascpostprocessing { 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})"}; AxisSpec etaAxis = {200, -2.0f, 2.0f, "#eta"}; + ConfigurableAxis centFT0MAxis{"FT0M", {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}, "FT0M (%)"}; @@ -94,7 +95,7 @@ struct cascpostprocessing { {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}, "FV0A (%)"}; - AxisSpec nChargedAxis = {300, -0.5f, 299.5f, "N_{ch in FT0M}"}; + AxisSpec nChargedFT0MGenAxis = {500, 0, 500, "N_{FT0M, gen.}"}; AxisSpec rapidityAxis = {200, -2.0f, 2.0f, "y"}; AxisSpec phiAxis = {100, -TMath::Pi() / 2, 3. * TMath::Pi() / 2, "#varphi"}; @@ -146,8 +147,8 @@ struct cascpostprocessing { registry.add("hPt", "hPt", {HistType::kTH1F, {ptAxis}}); registry.add("hCascMinusInvMassvsPt", "hCascMinusInvMassvsPt", HistType::kTH2F, {ptAxis, massAxis}); registry.add("hCascPlusInvMassvsPt", "hCascPlusInvMassvsPt", HistType::kTH2F, {ptAxis, massAxis}); - registry.add("hCascMinusInvMassvsPt_FT0M", "hCascMinusInvMassvsPt_FT0M", HistType::kTH3F, {centFT0MAxis, ptAxis, massAxis}); - registry.add("hCascPlusInvMassvsPt_FT0M", "hCascPlusInvMassvsPt_FT0M", HistType::kTH3F, {centFT0MAxis, ptAxis, massAxis}); + registry.add("hCascMinusInvMassvsPt_FT0M", "hCascMinusInvMassvsPt_FT0M", HistType::kTH3F, {isMC ? nChargedFT0MGenAxis : centFT0MAxis, ptAxis, massAxis}); + registry.add("hCascPlusInvMassvsPt_FT0M", "hCascPlusInvMassvsPt_FT0M", HistType::kTH3F, {isMC ? nChargedFT0MGenAxis : centFT0MAxis, ptAxis, massAxis}); registry.add("hCascMinusInvMassvsPt_FV0A", "hCascMinusInvMassvsPt_FV0A", HistType::kTH3F, {centFV0AAxis, ptAxis, massAxis}); registry.add("hCascPlusInvMassvsPt_FV0A", "hCascPlusInvMassvsPt_FV0A", HistType::kTH3F, {centFV0AAxis, ptAxis, massAxis}); registry.add("hXiMinusInvMassvsPt_BefSels", "hXiMinusInvMassvsPt_BefSels", HistType::kTH2F, {ptAxis, ximassAxis}); @@ -201,17 +202,17 @@ struct cascpostprocessing { registry.add("hCascMinusEtaBach", "hCascMinusEtaBach", {HistType::kTH1F, {{100, -1.0f, 1.0f}}}); // Info for eff x acc from MC - registry.add("hPtCascPlusTrueRec", "hPtCascPlusTrueRec", {HistType::kTH3F, {ptAxis, rapidityAxis, centFT0MAxis}}); - registry.add("hPtCascMinusTrueRec", "hPtCascMinusTrueRec", {HistType::kTH3F, {ptAxis, rapidityAxis, centFT0MAxis}}); - - registry.add("hPtXiPlusTrue", "hPtXiPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedAxis}}); - registry.add("hPtXiMinusTrue", "hPtXiMinusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedAxis}}); - registry.add("hPtOmegaPlusTrue", "hPtOmegaPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedAxis}}); - registry.add("hPtOmegaMinusTrue", "hPtOmegaMinusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedAxis}}); - registry.add("hPtXiPlusTrueAssocWithSelColl", "hPtXiPlusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedAxis}}); - registry.add("hPtXiMinusTrueAssocWithSelColl", "hPtXiMinusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedAxis}}); - registry.add("hPtOmegaPlusTrueAssocWithSelColl", "hPtOmegaPlusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedAxis}}); - registry.add("hPtOmegaMinusTrueAssocWithSelColl", "hPtOmegaMinusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedAxis}}); + registry.add("hPtCascPlusTrueRec", "hPtCascPlusTrueRec", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtCascMinusTrueRec", "hPtCascMinusTrueRec", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + + registry.add("hPtXiPlusTrue", "hPtXiPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtXiMinusTrue", "hPtXiMinusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtOmegaPlusTrue", "hPtOmegaPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtOmegaMinusTrue", "hPtOmegaMinusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtXiPlusTrueAssocWithSelColl", "hPtXiPlusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtXiMinusTrueAssocWithSelColl", "hPtXiMinusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtOmegaPlusTrueAssocWithSelColl", "hPtOmegaPlusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtOmegaMinusTrueAssocWithSelColl", "hPtOmegaMinusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); } void processRec(aod::MyCascades const& mycascades) @@ -451,19 +452,19 @@ struct cascpostprocessing { if (candidate.sign() < 0) { if (isCorrectlyRec) { - registry.fill(HIST("hPtCascMinusTrueRec"), candidate.pt(), rapidity, (isFT0MforMC ? candidate.multFT0M() : 0)); + registry.fill(HIST("hPtCascMinusTrueRec"), candidate.pt(), rapidity, candidate.multFT0M()); // 3rd axis is N charged in FT0M region from gen. MC } registry.fill(HIST("hCascMinusInvMassvsPt"), candidate.pt(), invmass); registry.fill(HIST("hCascMinusInvMassvsPt_FT0M"), candidate.multFT0M(), candidate.pt(), invmass); - registry.fill(HIST("hCascMinusInvMassvsPt_FV0A"), candidate.multFV0A(), candidate.pt(), invmass); + registry.fill(HIST("hCascMinusInvMassvsPt_FV0A"), isMC ? 0 : candidate.multFV0A(), candidate.pt(), invmass); } if (candidate.sign() > 0) { if (isCorrectlyRec) { - registry.fill(HIST("hPtCascPlusTrueRec"), candidate.pt(), rapidity, (isFT0MforMC ? candidate.multFT0M() : 0)); + registry.fill(HIST("hPtCascPlusTrueRec"), candidate.pt(), rapidity, candidate.multFT0M()); // 3rd axis is N charged in FT0M region from gen. MC } registry.fill(HIST("hCascPlusInvMassvsPt"), candidate.pt(), invmass); registry.fill(HIST("hCascPlusInvMassvsPt_FT0M"), candidate.multFT0M(), candidate.pt(), invmass); - registry.fill(HIST("hCascPlusInvMassvsPt_FV0A"), candidate.multFV0A(), candidate.pt(), invmass); + registry.fill(HIST("hCascPlusInvMassvsPt_FV0A"), isMC ? 0 : candidate.multFV0A(), candidate.pt(), invmass); } } } From 27fa7a6a775b9f3d1b9540d06592e35ea4320684 Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Sun, 16 Jul 2023 15:47:29 +0200 Subject: [PATCH 08/21] finer FT0M binning --- PWGLF/TableProducer/cascqaanalysis.cxx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index 473cd3222b2..35af3e7c2ca 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -75,11 +75,11 @@ struct cascqaanalysis { { AxisSpec ptAxis = {200, 0.0f, 10.0f, "#it{p}_{T} (GeV/#it{c})"}; AxisSpec rapidityAxis = {200, -2.0f, 2.0f, "y"}; - AxisSpec centFT0MAxis = {1055, 0.f, 105.5f, "FT0M (%)"}; - AxisSpec centFV0AAxis = {1055, 0.f, 105.5f, "FV0A (%)"}; + AxisSpec centFT0MAxis = {10550, 0.f, 105.5f, "FT0M (%)"}; + AxisSpec centFV0AAxis = {10550, 0.f, 105.5f, "FV0A (%)"}; AxisSpec eventTypeAxis = {3, -0.5f, 2.5f, "Event Type"}; AxisSpec nAssocCollAxis = {5, -0.5f, 4.5f, "N_{assoc.}"}; - AxisSpec nChargedGenAxis = {500, 0, 500, "N_{FT0M, gen.}"}; + AxisSpec nChargedFT0MGenAxis = {500, 0, 500, "N_{FT0M, gen.}"}; AxisSpec multNTracksAxis = {500, 0, 500, "N_{tracks}"}; AxisSpec multFT0Axis = {10000, 0, 40000, "FT0 amplitude"}; @@ -99,17 +99,17 @@ struct cascqaanalysis { } if (isMC) { // Rec. lvl - registry.add("hNchFT0MPVContr", "hNchFT0MPVContr", {HistType::kTH3F, {nChargedGenAxis, multNTracksAxis, eventTypeAxis}}); - registry.add("hNchFT0Mglobal", "hNchFT0Mglobal", {HistType::kTH3F, {nChargedGenAxis, multNTracksAxis, eventTypeAxis}}); + registry.add("hNchFT0MPVContr", "hNchFT0MPVContr", {HistType::kTH3F, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}}); + registry.add("hNchFT0Mglobal", "hNchFT0Mglobal", {HistType::kTH3F, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}}); // Gen. lvl registry.add("hNEventsMC", "hNEventsMC", {HistType::kTH1F, {{6, 0.0f, 6.0f}}}); for (Int_t n = 1; n <= registry.get(HIST("hNEventsMC"))->GetNbinsX(); n++) { registry.get(HIST("hNEventsMC"))->GetXaxis()->SetBinLabel(n, hNEventsMCLabels[n - 1]); } registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1F, {{200, -20.f, 20.f}}}); - registry.add("hNchFT0MNAssocMCCollisions", "hNchFT0MNAssocMCCollisions", {HistType::kTH2F, {nChargedGenAxis, nAssocCollAxis}}); + registry.add("hNchFT0MNAssocMCCollisions", "hNchFT0MNAssocMCCollisions", {HistType::kTH2F, {nChargedFT0MGenAxis, nAssocCollAxis}}); 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::kTH2F, {nChargedGenAxis, eventTypeAxis}}); + registry.add("hNchFT0MGenEvType", "hNchFT0MGenEvType", {HistType::kTH2F, {nChargedFT0MGenAxis, eventTypeAxis}}); } else { registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); From 001e5bf85554f7c560819e65ce6204043246c5fe Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Mon, 24 Jul 2023 13:38:11 +0200 Subject: [PATCH 09/21] evType For Nassoc Histo --- PWGLF/TableProducer/cascqaanalysis.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index 4e1d2372439..0c1d09f9b1d 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -109,7 +109,7 @@ struct cascqaanalysis { registry.get(HIST("hNEventsMC"))->GetXaxis()->SetBinLabel(n, hNEventsMCLabels[n - 1]); } registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1F, {{200, -20.f, 20.f}}}); - registry.add("hNchFT0MNAssocMCCollisions", "hNchFT0MNAssocMCCollisions", {HistType::kTH2F, {nChargedFT0MGenAxis, nAssocCollAxis}}); + registry.add("hNchFT0MNAssocMCCollisions", "hNchFT0MNAssocMCCollisions", {HistType::kTH3F, {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::kTH2F, {nChargedFT0MGenAxis, eventTypeAxis}}); } else { @@ -533,7 +533,7 @@ struct cascqaanalysis { } SelectedEvents.resize(nevts); - registry.fill(HIST("hNchFT0MNAssocMCCollisions"), nchFT0, nAssocColl); + registry.fill(HIST("hNchFT0MNAssocMCCollisions"), nchFT0, nAssocColl, evType); if (NumberOfContributors.size() == 2) { std::sort(NumberOfContributors.begin(), NumberOfContributors.end()); From 523bbcbdf46be6c994768748b5501cc47745c054 Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Thu, 27 Jul 2023 14:30:36 +0200 Subject: [PATCH 10/21] cascqaanalysis update 1. Removal of index columns 2. Comments fix 3. Histogram for the number of assoc. events with the same coll. type (INEL/INEL>0/INEL>1) --- PWGLF/DataModel/cascqaanalysis.h | 7 ++--- PWGLF/TableProducer/cascqaanalysis.cxx | 42 ++++++++++++++++++-------- PWGLF/Tasks/cascpostprocessing.cxx | 2 +- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/PWGLF/DataModel/cascqaanalysis.h b/PWGLF/DataModel/cascqaanalysis.h index e2703885fb6..5fba8526a5d 100644 --- a/PWGLF/DataModel/cascqaanalysis.h +++ b/PWGLF/DataModel/cascqaanalysis.h @@ -42,7 +42,6 @@ enum EvFlags : uint8_t { EvINELgt1 = 0x4 // Event with at least 2 PV contributors from the |eta| < 1 }; -DECLARE_SOA_INDEX_COLUMN(Collision, collision); DECLARE_SOA_COLUMN(CollisionZ, zcoll, float); DECLARE_SOA_COLUMN(MultFT0M, multFT0M, float); DECLARE_SOA_COLUMN(MultFV0A, multFV0A, float); @@ -110,8 +109,8 @@ DECLARE_SOA_DYNAMIC_COLUMN(IsINELgt1, isINELgt1, //! True if the Event belongs t [](uint8_t flags) -> bool { return (flags & EvFlags::EvINELgt1) == EvFlags::EvINELgt1; }); } // namespace mycascades -DECLARE_SOA_TABLE(MyCascades, "AOD", "MYCASCADES", o2::soa::Index<>, - mycascades::CollisionId, mycascades::CollisionZ, mycascades::MultFT0M, mycascades::MultFV0A, mycascades::Sign, mycascades::Pt, mycascades::RapXi, mycascades::RapOmega, mycascades::Eta, mycascades::MassXi, mycascades::MassOmega, mycascades::MassLambdaDau, mycascades::CascRadius, mycascades::V0Radius, +DECLARE_SOA_TABLE(MyCascades, "AOD", "MYCASCADES", o2::soa::Index<>, + mycascades::CollisionZ, mycascades::MultFT0M, mycascades::MultFV0A, mycascades::Sign, mycascades::Pt, mycascades::RapXi, mycascades::RapOmega, mycascades::Eta, mycascades::MassXi, mycascades::MassOmega, mycascades::MassLambdaDau, mycascades::CascRadius, mycascades::V0Radius, mycascades::CascCosPA, mycascades::V0CosPA, mycascades::DCAPosToPV, mycascades::DCANegToPV, mycascades::DCABachToPV, mycascades::DCACascDaughters, mycascades::DCAV0Daughters, mycascades::DCAV0ToPV, mycascades::PosEta, mycascades::NegEta, mycascades::BachEta, mycascades::PosITSHits, mycascades::NegITSHits, mycascades::BachITSHits, @@ -139,7 +138,6 @@ enum EvFlags : uint8_t { EvINELgt1 = 0x4 // Event with at least 2 PV contributors from the |eta| < 1 }; -DECLARE_SOA_INDEX_COLUMN(McCollision, mcCollision); //! MC collision of this particle DECLARE_SOA_COLUMN(CollisionZ, zcoll, float); DECLARE_SOA_COLUMN(Sign, sign, float); DECLARE_SOA_COLUMN(PdgCode, pdgCode, int); @@ -169,7 +167,6 @@ DECLARE_SOA_DYNAMIC_COLUMN(IsINELgt1, isINELgt1, //! True if the Event belongs t } // namespace myMCcascades DECLARE_SOA_TABLE(MyMCCascades, "AOD", "MYMCCASCADES", o2::soa::Index<>, - myMCcascades::McCollisionId, myMCcascades::CollisionZ, myMCcascades::Sign, myMCcascades::PdgCode, myMCcascades::Y, myMCcascades::Eta, myMCcascades::Phi, myMCcascades::Pt, myMCcascades::IsPrimary, myMCcascades::NAssocColl, myMCcascades::NChInFT0M, diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index 0c1d09f9b1d..a1846ffe810 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -110,6 +110,7 @@ struct cascqaanalysis { } registry.add("hZCollisionGen", "hZCollisionGen", {HistType::kTH1F, {{200, -20.f, 20.f}}}); registry.add("hNchFT0MNAssocMCCollisions", "hNchFT0MNAssocMCCollisions", {HistType::kTH3F, {nChargedFT0MGenAxis, nAssocCollAxis, eventTypeAxis}}); + registry.add("hNchFT0MNAssocMCCollisionsSameType", "hNchFT0MNAssocMCCollisionsSameType", {HistType::kTH3F, {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::kTH2F, {nChargedFT0MGenAxis, eventTypeAxis}}); } else { @@ -342,7 +343,7 @@ struct cascqaanalysis { registry.fill(HIST("hCandidateCounter"), 2.5); // passed topo cuts // Fill table if (fRand->Rndm() < lEventScale) { - mycascades(casc.globalIndex(), collision.posZ(), collision.centFT0M(), collision.centFV0A(), casc.sign(), casc.pt(), casc.yXi(), casc.yOmega(), casc.eta(), + mycascades(collision.posZ(), collision.centFT0M(), collision.centFV0A(), casc.sign(), casc.pt(), casc.yXi(), casc.yOmega(), casc.eta(), casc.mXi(), casc.mOmega(), casc.mLambda(), casc.cascradius(), casc.v0radius(), casc.casccosPA(collision.posX(), collision.posY(), collision.posZ()), casc.v0cosPA(collision.posX(), collision.posY(), collision.posZ()), casc.dcapostopv(), casc.dcanegtopv(), casc.dcabachtopv(), casc.dcacascdaughters(), casc.dcaV0daughters(), casc.dcav0topv(collision.posX(), collision.posY(), collision.posZ()), @@ -449,7 +450,7 @@ struct cascqaanalysis { } // Fill table if (fRand->Rndm() < lEventScale) { - mycascades(casc.globalIndex(), collision.posZ(), nchFT0, collision.multFV0A(), casc.sign(), casc.pt(), casc.yXi(), casc.yOmega(), casc.eta(), + mycascades(collision.posZ(), nchFT0, collision.multFV0A(), casc.sign(), casc.pt(), casc.yXi(), casc.yOmega(), casc.eta(), casc.mXi(), casc.mOmega(), casc.mLambda(), casc.cascradius(), casc.v0radius(), casc.casccosPA(collision.posX(), collision.posY(), collision.posZ()), casc.v0cosPA(collision.posX(), collision.posY(), collision.posZ()), casc.dcapostopv(), casc.dcanegtopv(), casc.dcabachtopv(), casc.dcacascdaughters(), casc.dcaV0daughters(), casc.dcav0topv(collision.posX(), collision.posY(), collision.posZ()), @@ -485,13 +486,13 @@ struct cascqaanalysis { uint8_t flagsGen = 0; flagsGen |= o2::aod::myMCcascades::EvFlags::EvINEL; registry.fill(HIST("hNEventsMC"), 2.5); - // Generated collision is INEL>=0 + // Generated collision is INEL>0 if (isINELgtNmc(mcParticles, 0)) { flagsGen |= o2::aod::myMCcascades::EvFlags::EvINELgt0; evType++; registry.fill(HIST("hNEventsMC"), 3.5); } - // Generated collision is INEL>=1 + // Generated collision is INEL>1 if (isINELgtNmc(mcParticles, 1)) { flagsGen |= o2::aod::myMCcascades::EvFlags::EvINELgt1; evType++; @@ -543,12 +544,30 @@ struct cascqaanalysis { auto isAssocToINEL = [&mcCollision](CollisionIndexAndType i) { return (i.index == mcCollision.globalIndex()) && ((i.typeFlag & o2::aod::myMCcascades::EvFlags::EvINEL) == o2::aod::myMCcascades::EvFlags::EvINEL); }; auto isAssocToINELgt0 = [&mcCollision](CollisionIndexAndType i) { return (i.index == mcCollision.globalIndex()) && ((i.typeFlag & o2::aod::myMCcascades::EvFlags::EvINELgt0) == o2::aod::myMCcascades::EvFlags::EvINELgt0); }; auto isAssocToINELgt1 = [&mcCollision](CollisionIndexAndType i) { return (i.index == mcCollision.globalIndex()) && ((i.typeFlag & o2::aod::myMCcascades::EvFlags::EvINELgt1) == o2::aod::myMCcascades::EvFlags::EvINELgt1); }; - // at least 1 selected reconstructed INEL event has the same global index as mcCollision - const auto evtReconstructedAndINEL = std::find_if(SelectedEvents.begin(), SelectedEvents.end(), isAssocToINEL) != SelectedEvents.end(); - // at least 1 selected reconstructed INELgt0 event has the same global index as mcCollision - const auto evtReconstructedAndINELgt0 = std::find_if(SelectedEvents.begin(), SelectedEvents.end(), isAssocToINELgt0) != SelectedEvents.end(); - // at least 1 selected reconstructed INELgt1 event has the same global index as mcCollision - const auto evtReconstructedAndINELgt1 = std::find_if(SelectedEvents.begin(), SelectedEvents.end(), isAssocToINELgt1) != SelectedEvents.end(); + // number of reconstructed INEL events that have the same global index as mcCollision + const auto evtReconstructedAndINEL = std::count_if(SelectedEvents.begin(), SelectedEvents.end(), isAssocToINEL); + // number of reconstructed INEL > 0 events that have the same global index as mcCollision + const auto evtReconstructedAndINELgt0 = std::count_if(SelectedEvents.begin(), SelectedEvents.end(), isAssocToINELgt0); + // number of reconstructed INEL > 1 events that have the same global index as mcCollision + const auto evtReconstructedAndINELgt1 = std::count_if(SelectedEvents.begin(), SelectedEvents.end(), isAssocToINELgt1); + + switch (evType) { + case 0: { + registry.fill(HIST("hNchFT0MNAssocMCCollisionsSameType"), nchFT0, evtReconstructedAndINEL, evType); + break; + } + case 1: { + registry.fill(HIST("hNchFT0MNAssocMCCollisionsSameType"), nchFT0, evtReconstructedAndINELgt0, evType); + break; + } + case 2: { + registry.fill(HIST("hNchFT0MNAssocMCCollisionsSameType"), nchFT0, evtReconstructedAndINELgt1, evType); + break; + } + default: + LOGF(fatal, "incorrect evType in cascqaanalysis task"); + break; + } uint8_t flagsAssoc = 0; if (evtReconstructedAndINEL) { @@ -571,8 +590,7 @@ struct cascqaanalysis { } else { continue; } - myMCcascades(mcCollision.globalIndex(), - mcCollision.posZ(), sign, mcParticle.pdgCode(), + myMCcascades(mcCollision.posZ(), sign, mcParticle.pdgCode(), mcParticle.y(), mcParticle.eta(), mcParticle.phi(), mcParticle.pt(), mcParticle.isPhysicalPrimary(), nAssocColl, nchFT0, flagsAssoc, diff --git a/PWGLF/Tasks/cascpostprocessing.cxx b/PWGLF/Tasks/cascpostprocessing.cxx index 708e2f28c5e..cc4393664d6 100644 --- a/PWGLF/Tasks/cascpostprocessing.cxx +++ b/PWGLF/Tasks/cascpostprocessing.cxx @@ -104,7 +104,7 @@ struct cascpostprocessing { TString CutLabel[24] = {"All", "MassWin", "y", "EtaDau", "DCADauToPV", "CascCosPA", "V0CosPA", "DCACascDau", "DCAV0Dau", "rCasc", "rV0", "DCAV0ToPV", "LambdaMass", "TPCPr", "TPCPi", "TOFPr", "TOFPi", "TPCBach", "TOFBach", "ctau", "CompDecayMass", "Bach-baryon", "NTPCrows", "OOBRej"}; TString CutLabelSummary[27] = {"MassWin", "y", "EtaDau", "dcapostopv", "dcanegtopv", "dcabachtopv", "CascCosPA", "V0CosPA", "DCACascDau", "DCAV0Dau", "rCasc", "rV0", "DCAV0ToPV", "LambdaMass", "TPCPr", "TPCPi", "TOFPr", "TOFPi", "TPCBach", "TOFBach", "proplifetime", "rejcomp", "ptthrtof", "bachBaryonCosPA", "bachBaryonDCAxyToPV", "NTPCrows", "OOBRej"}; - registry.add("hCandidate", "hCandidate", HistType::kTH1F, {{25, -0.5, 24.5}}); + registry.add("hCandidate", "hCandidate", HistType::kTH1F, {{24, -0.5, 23.5}}); for (Int_t n = 1; n <= registry.get(HIST("hCandidate"))->GetNbinsX(); n++) { registry.get(HIST("hCandidate"))->GetXaxis()->SetBinLabel(n, CutLabel[n - 1]); } From f1cb4dcfcf52a5ec309bcfafd8fdcac94030f708 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Thu, 27 Jul 2023 12:34:08 +0000 Subject: [PATCH 11/21] Please consider the following formatting changes --- PWGLF/DataModel/cascqaanalysis.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/DataModel/cascqaanalysis.h b/PWGLF/DataModel/cascqaanalysis.h index 5fba8526a5d..c5377b201fa 100644 --- a/PWGLF/DataModel/cascqaanalysis.h +++ b/PWGLF/DataModel/cascqaanalysis.h @@ -109,7 +109,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(IsINELgt1, isINELgt1, //! True if the Event belongs t [](uint8_t flags) -> bool { return (flags & EvFlags::EvINELgt1) == EvFlags::EvINELgt1; }); } // namespace mycascades -DECLARE_SOA_TABLE(MyCascades, "AOD", "MYCASCADES", o2::soa::Index<>, +DECLARE_SOA_TABLE(MyCascades, "AOD", "MYCASCADES", o2::soa::Index<>, mycascades::CollisionZ, mycascades::MultFT0M, mycascades::MultFV0A, mycascades::Sign, mycascades::Pt, mycascades::RapXi, mycascades::RapOmega, mycascades::Eta, mycascades::MassXi, mycascades::MassOmega, mycascades::MassLambdaDau, mycascades::CascRadius, mycascades::V0Radius, mycascades::CascCosPA, mycascades::V0CosPA, mycascades::DCAPosToPV, mycascades::DCANegToPV, mycascades::DCABachToPV, mycascades::DCACascDaughters, mycascades::DCAV0Daughters, mycascades::DCAV0ToPV, mycascades::PosEta, mycascades::NegEta, From 41bbb1278c6e50086081661f1b5ef3344803d45f Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Thu, 27 Jul 2023 15:07:15 +0200 Subject: [PATCH 12/21] change number of bins --- PWGLF/Tasks/cascpostprocessing.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/Tasks/cascpostprocessing.cxx b/PWGLF/Tasks/cascpostprocessing.cxx index a0cab1eeb8f..427eaf36aab 100644 --- a/PWGLF/Tasks/cascpostprocessing.cxx +++ b/PWGLF/Tasks/cascpostprocessing.cxx @@ -106,7 +106,7 @@ struct cascpostprocessing { TString CutLabel[26] = {"All", "MassWin", "y", "EtaDau", "DCADauToPV", "CascCosPA", "V0CosPA", "DCACascDau", "DCAV0Dau", "rCasc", "rCascMax", "rV0", "rV0Max", "DCAV0ToPV", "LambdaMass", "TPCPr", "TPCPi", "TOFPr", "TOFPi", "TPCBach", "TOFBach", "ctau", "CompDecayMass", "Bach-baryon", "NTPCrows", "OOBRej"}; TString CutLabelSummary[29] = {"MassWin", "y", "EtaDau", "dcapostopv", "dcanegtopv", "dcabachtopv", "CascCosPA", "V0CosPA", "DCACascDau", "DCAV0Dau", "rCasc", "rV0", "DCAV0ToPV", "LambdaMass", "TPCPr", "TPCPi", "TOFPr", "TOFPi", "TPCBach", "TOFBach", "proplifetime", "rejcomp", "ptthrtof", "bachBaryonCosPA", "bachBaryonDCAxyToPV", "NTPCrows", "OOBRej", "rCascMax", "rV0Max"}; - registry.add("hCandidate", "hCandidate", HistType::kTH1F, {{24, -0.5, 23.5}}); + registry.add("hCandidate", "hCandidate", HistType::kTH1F, {{26, -0.5, 25.5}}); for (Int_t n = 1; n <= registry.get(HIST("hCandidate"))->GetNbinsX(); n++) { registry.get(HIST("hCandidate"))->GetXaxis()->SetBinLabel(n, CutLabel[n - 1]); } From 685c90ba95a3d347bee2e490e60223f6bb215eff Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Thu, 27 Jul 2023 15:10:16 +0200 Subject: [PATCH 13/21] CascadeSelectionSummary number of bins fix --- PWGLF/Tasks/cascpostprocessing.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/Tasks/cascpostprocessing.cxx b/PWGLF/Tasks/cascpostprocessing.cxx index 427eaf36aab..9479f843d4a 100644 --- a/PWGLF/Tasks/cascpostprocessing.cxx +++ b/PWGLF/Tasks/cascpostprocessing.cxx @@ -111,7 +111,7 @@ struct cascpostprocessing { registry.get(HIST("hCandidate"))->GetXaxis()->SetBinLabel(n, CutLabel[n - 1]); } - registry.add("CascadeSelectionSummary", "CascadeSelectionSummary", HistType::kTH1F, {{29, -0.5, 26.5}}); + registry.add("CascadeSelectionSummary", "CascadeSelectionSummary", HistType::kTH1F, {{29, -0.5, 28.5}}); for (Int_t n = 1; n <= registry.get(HIST("CascadeSelectionSummary"))->GetNbinsX(); n++) { registry.get(HIST("CascadeSelectionSummary"))->GetXaxis()->SetBinLabel(n, CutLabelSummary[n - 1]); } From 0556d5430eca41428aa627190955fbb3309500aa Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Wed, 2 Aug 2023 20:32:59 +0200 Subject: [PATCH 14/21] memory fix --- PWGLF/Tasks/cascpostprocessing.cxx | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/PWGLF/Tasks/cascpostprocessing.cxx b/PWGLF/Tasks/cascpostprocessing.cxx index 9479f843d4a..ef2d34de8c2 100644 --- a/PWGLF/Tasks/cascpostprocessing.cxx +++ b/PWGLF/Tasks/cascpostprocessing.cxx @@ -89,7 +89,7 @@ struct cascpostprocessing { AxisSpec ptAxis = {200, 0.0f, 10.0f, "#it{p}_{T} (GeV/#it{c})"}; 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})"}; - AxisSpec etaAxis = {200, -2.0f, 2.0f, "#eta"}; + ConfigurableAxis etaAxis{"etaAxis", {40, -2.0f, 2.0f}, "#eta"}; ConfigurableAxis centFT0MAxis{"FT0M", {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}, @@ -98,7 +98,7 @@ struct cascpostprocessing { {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}, "FV0A (%)"}; - AxisSpec nChargedFT0MGenAxis = {500, 0, 500, "N_{FT0M, gen.}"}; + ConfigurableAxis nChargedFT0MGenAxis{"nChargedFT0MGenAxis", {300, 0, 300}, "N_{FT0M, gen.}"}; AxisSpec rapidityAxis = {200, -2.0f, 2.0f, "y"}; AxisSpec phiAxis = {100, -TMath::Pi() / 2, 3. * TMath::Pi() / 2, "#varphi"}; @@ -211,15 +211,16 @@ struct cascpostprocessing { // Info for eff x acc from MC registry.add("hPtCascPlusTrueRec", "hPtCascPlusTrueRec", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); registry.add("hPtCascMinusTrueRec", "hPtCascMinusTrueRec", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); - - registry.add("hPtXiPlusTrue", "hPtXiPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); - registry.add("hPtXiMinusTrue", "hPtXiMinusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); - registry.add("hPtOmegaPlusTrue", "hPtOmegaPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); - registry.add("hPtOmegaMinusTrue", "hPtOmegaMinusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); - registry.add("hPtXiPlusTrueAssocWithSelColl", "hPtXiPlusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); - registry.add("hPtXiMinusTrueAssocWithSelColl", "hPtXiMinusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); - registry.add("hPtOmegaPlusTrueAssocWithSelColl", "hPtOmegaPlusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); - registry.add("hPtOmegaMinusTrueAssocWithSelColl", "hPtOmegaMinusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + if(isMC){ + registry.add("hPtXiPlusTrue", "hPtXiPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtXiMinusTrue", "hPtXiMinusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtOmegaPlusTrue", "hPtOmegaPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtOmegaMinusTrue", "hPtOmegaMinusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtXiPlusTrueAssocWithSelColl", "hPtXiPlusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtXiMinusTrueAssocWithSelColl", "hPtXiMinusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtOmegaPlusTrueAssocWithSelColl", "hPtOmegaPlusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + registry.add("hPtOmegaMinusTrueAssocWithSelColl", "hPtOmegaMinusTrueAssocWithSelColl", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); + } } void processRec(aod::MyCascades const& mycascades) From ba0135ded1be1fa1948947e79b16bf089f3e04e3 Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Wed, 2 Aug 2023 18:34:41 +0000 Subject: [PATCH 15/21] Please consider the following formatting changes --- PWGLF/Tasks/cascpostprocessing.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/Tasks/cascpostprocessing.cxx b/PWGLF/Tasks/cascpostprocessing.cxx index ef2d34de8c2..d039a212def 100644 --- a/PWGLF/Tasks/cascpostprocessing.cxx +++ b/PWGLF/Tasks/cascpostprocessing.cxx @@ -211,7 +211,7 @@ struct cascpostprocessing { // Info for eff x acc from MC registry.add("hPtCascPlusTrueRec", "hPtCascPlusTrueRec", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); registry.add("hPtCascMinusTrueRec", "hPtCascMinusTrueRec", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); - if(isMC){ + if (isMC) { registry.add("hPtXiPlusTrue", "hPtXiPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); registry.add("hPtXiMinusTrue", "hPtXiMinusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); registry.add("hPtOmegaPlusTrue", "hPtOmegaPlusTrue", {HistType::kTH3F, {ptAxis, rapidityAxis, nChargedFT0MGenAxis}}); From 354e7545fcea2214991a22a1aa5b37ccc18ddd00 Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Wed, 23 Aug 2023 19:04:40 +0200 Subject: [PATCH 16/21] FV0A hists and PDG mass --- PWGLF/TableProducer/cascqaanalysis.cxx | 48 ++++++++++++++++++++++---- PWGLF/Tasks/cascpostprocessing.cxx | 18 ++++++---- 2 files changed, 52 insertions(+), 14 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index a1846ffe810..6f4eab6f4bd 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -82,6 +82,7 @@ struct cascqaanalysis { AxisSpec eventTypeAxis = {3, -0.5f, 2.5f, "Event Type"}; AxisSpec nAssocCollAxis = {5, -0.5f, 4.5f, "N_{assoc.}"}; AxisSpec nChargedFT0MGenAxis = {500, 0, 500, "N_{FT0M, gen.}"}; + AxisSpec nChargedFV0AGenAxis = {500, 0, 500, "N_{FV0A, gen.}"}; AxisSpec multNTracksAxis = {500, 0, 500, "N_{tracks}"}; AxisSpec multFT0Axis = {10000, 0, 40000, "FT0 amplitude"}; @@ -103,6 +104,7 @@ struct cascqaanalysis { // Rec. lvl registry.add("hNchFT0MPVContr", "hNchFT0MPVContr", {HistType::kTH3F, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}}); registry.add("hNchFT0Mglobal", "hNchFT0Mglobal", {HistType::kTH3F, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}}); + registry.add("hNchFV0APVContr", "hNchFV0APVContr", {HistType::kTH3F, {nChargedFV0AGenAxis, multNTracksAxis, eventTypeAxis}}); // Gen. lvl registry.add("hNEventsMC", "hNEventsMC", {HistType::kTH1F, {{6, 0.0f, 6.0f}}}); for (Int_t n = 1; n <= registry.get(HIST("hNEventsMC"))->GetNbinsX(); n++) { @@ -113,12 +115,13 @@ struct cascqaanalysis { registry.add("hNchFT0MNAssocMCCollisionsSameType", "hNchFT0MNAssocMCCollisionsSameType", {HistType::kTH3F, {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::kTH2F, {nChargedFT0MGenAxis, eventTypeAxis}}); + registry.add("hNchFV0AGenEvType", "hNchFV0AGenEvType", {HistType::kTH2F, {nChargedFV0AGenAxis, eventTypeAxis}}); } else { registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); + registry.add("hFV0ApvContr", "hFV0ApvContr", {HistType::kTH3F, {centFV0AAxis, multNTracksAxis, eventTypeAxis}}); + registry.add("hFV0AFT0M", "hFV0AFT0M", {HistType::kTH3F, {centFV0AAxis, centFT0MAxis, eventTypeAxis}}); } - - registry.add("hCentFV0A", "hCentFV0A", {HistType::kTH1F, {centFV0AAxis}}); } Filter preFilter = @@ -179,6 +182,30 @@ struct cascqaanalysis { return nchFT0; } + template + uint16_t GetGenNchInFV0Aregion(TMcParticles particles) + { + // Particle counting in FV0A: 2.2<η<5.1 + uint16_t nchFV0A = 0; + for (auto& mcParticle : particles) { + if (!mcParticle.isPhysicalPrimary()) { + continue; + } + const auto& pdgInfo = pdgDB->GetParticle(mcParticle.pdgCode()); + if (!pdgInfo) { + continue; + } + if (pdgInfo->Charge() == 0) { + continue; + } + if (mcParticle.eta() < 2.2 || mcParticle.eta() > 5.1) { + continue; // select on V0A Nch region + } + nchFV0A++; // increment + } + return nchFV0A; + } + template int GetEventTypeFlag(TCollision const& collision) { @@ -220,7 +247,6 @@ struct cascqaanalysis { if (isFillEventSelectionQA) { registry.fill(HIST("hZCollision"), collision.posZ()); - registry.fill(HIST("hCentFV0A"), collision.centFV0A()); } return true; } @@ -291,6 +317,9 @@ struct cascqaanalysis { registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), nTracksPVcontr, evType); registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), nTracksGlobal, evType); + registry.fill(HIST("hFV0ApvContr"), collision.centFV0A(), nTracksPVcontr, evType); + + registry.fill(HIST("hFV0AFT0M"), collision.centFV0A(), collision.centFT0M(), evType); float lEventScale = scalefactor; @@ -336,8 +365,9 @@ struct cascqaanalysis { float cascpos = std::hypot(casc.x() - collision.posX(), casc.y() - collision.posY(), casc.z() - collision.posZ()); float cascptotmom = std::hypot(casc.px(), casc.py(), casc.pz()); // - float ctauXi = RecoDecay::getMassPDG(3312) * cascpos / (cascptotmom + 1e-13); - float ctauOmega = RecoDecay::getMassPDG(3334) * cascpos / (cascptotmom + 1e-13); + + float ctauXi = pdgDB->Mass(3312) * cascpos / (cascptotmom + 1e-13); + float ctauOmega = pdgDB->Mass(3334) * cascpos / (cascptotmom + 1e-13); if (AcceptCascCandidate(casc, collision.posX(), collision.posY(), collision.posZ())) { registry.fill(HIST("hCandidateCounter"), 2.5); // passed topo cuts @@ -383,9 +413,11 @@ struct cascqaanalysis { // N charged in FT0M region in corresponding gen. MC collision auto mcPartSlice = mcParticles.sliceBy(perMcCollision, collision.mcCollision_as().globalIndex()); uint16_t nchFT0 = GetGenNchInFT0Mregion(mcPartSlice); + uint16_t nchFV0 = GetGenNchInFV0Aregion(mcPartSlice); registry.fill(HIST("hNchFT0MPVContr"), nchFT0, nTracksPVcontr, evType); registry.fill(HIST("hNchFT0Mglobal"), nchFT0, nTracksGlobal, evType); + registry.fill(HIST("hNchFV0APVContr"), nchFV0, nTracksPVcontr, evType); float lEventScale = scalefactor; @@ -431,8 +463,8 @@ struct cascqaanalysis { float cascpos = std::hypot(casc.x() - collision.posX(), casc.y() - collision.posY(), casc.z() - collision.posZ()); float cascptotmom = std::hypot(casc.px(), casc.py(), casc.pz()); // - float ctauXi = RecoDecay::getMassPDG(3312) * cascpos / (cascptotmom + 1e-13); - float ctauOmega = RecoDecay::getMassPDG(3334) * cascpos / (cascptotmom + 1e-13); + float ctauXi = pdgDB->Mass(3312) * cascpos / (cascptotmom + 1e-13); + float ctauOmega = pdgDB->Mass(3334) * cascpos / (cascptotmom + 1e-13); if (AcceptCascCandidate(casc, collision.posX(), collision.posY(), collision.posZ())) { registry.fill(HIST("hCandidateCounter"), 2.5); // passed topo cuts @@ -500,7 +532,9 @@ struct cascqaanalysis { } uint16_t nchFT0 = GetGenNchInFT0Mregion(mcParticles); + uint16_t nchFV0 = GetGenNchInFV0Aregion(mcParticles); registry.fill(HIST("hNchFT0MGenEvType"), nchFT0, evType); + registry.fill(HIST("hNchFV0AGenEvType"), nchFV0, evType); typedef struct CollisionIndexAndType { int64_t index; diff --git a/PWGLF/Tasks/cascpostprocessing.cxx b/PWGLF/Tasks/cascpostprocessing.cxx index d039a212def..2b4bbf8f6b7 100644 --- a/PWGLF/Tasks/cascpostprocessing.cxx +++ b/PWGLF/Tasks/cascpostprocessing.cxx @@ -23,6 +23,7 @@ #include "Common/DataModel/EventSelection.h" #include "Common/DataModel/PIDResponse.h" #include "PWGLF/DataModel/cascqaanalysis.h" +#include "Framework/O2DatabasePDGPlugin.h" // constants const float ctauxiPDG = 4.91; // from PDG @@ -78,6 +79,9 @@ struct cascpostprocessing { HistogramRegistry registry{"registryts"}; + // Necessary for particle charges + Service pdgDB; + void init(InitContext const&) { @@ -269,14 +273,14 @@ struct cascpostprocessing { } if (isXi) { - if (TMath::Abs(candidate.massxi() - RecoDecay::getMassPDG(3312)) > masswin) + if (TMath::Abs(candidate.massxi() - pdgDB->Mass(3312)) > masswin) continue; registry.fill(HIST("hCandidate"), ++counter); if (TMath::Abs(candidate.rapxi()) > rap) continue; registry.fill(HIST("hCandidate"), ++counter); } else { - if (TMath::Abs(candidate.massomega() - RecoDecay::getMassPDG(3334)) > masswin) + if (TMath::Abs(candidate.massomega() - pdgDB->Mass(3334)) > masswin) continue; registry.fill(HIST("hCandidate"), ++counter); if (TMath::Abs(candidate.rapomega()) > rap) @@ -318,7 +322,7 @@ struct cascpostprocessing { if (TMath::Abs(candidate.dcav0topv()) < dcav0topv) continue; registry.fill(HIST("hCandidate"), ++counter); - if (TMath::Abs(candidate.masslambdadau() - RecoDecay::getMassPDG(3122)) > lambdamasswin) + if (TMath::Abs(candidate.masslambdadau() - pdgDB->Mass(3312)) > lambdamasswin) continue; registry.fill(HIST("hCandidate"), ++counter); if (candidate.sign() < 0) { @@ -366,7 +370,7 @@ struct cascpostprocessing { if (candidate.ctauxi() > proplifetime * ctauxiPDG) continue; registry.fill(HIST("hCandidate"), ++counter); - if (TMath::Abs(candidate.massomega() - RecoDecay::getMassPDG(3334)) < rejcomp) + if (TMath::Abs(candidate.massomega() - pdgDB->Mass(3334)) < rejcomp) continue; registry.fill(HIST("hCandidate"), ++counter); rapidity = candidate.rapxi(); @@ -382,7 +386,7 @@ struct cascpostprocessing { if (candidate.ctauomega() > proplifetime * ctauomegaPDG) continue; registry.fill(HIST("hCandidate"), ++counter); - if (TMath::Abs(candidate.massxi() - RecoDecay::getMassPDG(3312)) < rejcomp) + if (TMath::Abs(candidate.massxi() - pdgDB->Mass(3312)) < rejcomp) continue; registry.fill(HIST("hCandidate"), ++counter); rapidity = candidate.rapomega(); @@ -441,12 +445,12 @@ struct cascpostprocessing { if (isXi) { isCorrectlyRec = ((TMath::Abs(candidate.mcPdgCode()) == 3312) && (candidate.isPrimary() == 1)) ? 1 : 0; - if (TMath::Abs(candidate.massxi() - RecoDecay::getMassPDG(3312)) < masswintpc) { + if (TMath::Abs(candidate.massxi() - pdgDB->Mass(3312)) < masswintpc) { isCandidate = 1; } } else if (!isXi) { isCorrectlyRec = ((TMath::Abs(candidate.mcPdgCode()) == 3334) && (candidate.isPrimary() == 1)) ? 1 : 0; - if (TMath::Abs(candidate.massomega() - RecoDecay::getMassPDG(3334)) < masswintpc) { + if (TMath::Abs(candidate.massomega() - pdgDB->Mass(3334)) < masswintpc) { isCandidate = 1; } } From 0663d8b5ff6a2905514caa6f0c766259e547e3b2 Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Thu, 24 Aug 2023 16:27:04 +0200 Subject: [PATCH 17/21] multQA configurable: mult QA plots --- PWGLF/TableProducer/cascqaanalysis.cxx | 32 ++++++++++++++++++++------ 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index 6f4eab6f4bd..7645bc4a1dc 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -65,6 +65,9 @@ struct cascqaanalysis { // Switch between Data/MC-dedicated FT0M X-axes Configurable isMC{"isMC", 0, "0 - data, 1 - MC"}; + // QA histograms for the multiplicity estimation + Configurable multQA{"multQA", 0, "0 - not to do QA, 1 - do the QA"}; + // Necessary for particle charges Service pdgDB; @@ -84,7 +87,7 @@ struct cascqaanalysis { AxisSpec nChargedFT0MGenAxis = {500, 0, 500, "N_{FT0M, gen.}"}; AxisSpec nChargedFV0AGenAxis = {500, 0, 500, "N_{FV0A, gen.}"}; AxisSpec multNTracksAxis = {500, 0, 500, "N_{tracks}"}; - AxisSpec multFT0Axis = {10000, 0, 40000, "FT0 amplitude"}; + AxisSpec signalAxis = {20000, 0, 20000, "Amplitude"}; TString hCandidateCounterLabels[5] = {"All candidates", "v0data exists", "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"}; @@ -103,7 +106,6 @@ struct cascqaanalysis { if (isMC) { // Rec. lvl registry.add("hNchFT0MPVContr", "hNchFT0MPVContr", {HistType::kTH3F, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}}); - registry.add("hNchFT0Mglobal", "hNchFT0Mglobal", {HistType::kTH3F, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}}); registry.add("hNchFV0APVContr", "hNchFV0APVContr", {HistType::kTH3F, {nChargedFV0AGenAxis, multNTracksAxis, eventTypeAxis}}); // Gen. lvl registry.add("hNEventsMC", "hNEventsMC", {HistType::kTH1F, {{6, 0.0f, 6.0f}}}); @@ -118,9 +120,18 @@ struct cascqaanalysis { registry.add("hNchFV0AGenEvType", "hNchFV0AGenEvType", {HistType::kTH2F, {nChargedFV0AGenAxis, eventTypeAxis}}); } else { registry.add("hFT0MpvContr", "hFT0MpvContr", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); - registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); registry.add("hFV0ApvContr", "hFV0ApvContr", {HistType::kTH3F, {centFV0AAxis, multNTracksAxis, eventTypeAxis}}); - registry.add("hFV0AFT0M", "hFV0AFT0M", {HistType::kTH3F, {centFV0AAxis, centFT0MAxis, eventTypeAxis}}); + } + + if (multQA) { + if (isMC) { + // Rec. lvl + registry.add("hNchFT0Mglobal", "hNchFT0Mglobal", {HistType::kTH3F, {nChargedFT0MGenAxis, multNTracksAxis, eventTypeAxis}}); + } else { + registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); + registry.add("hFV0AFT0M", "hFV0AFT0M", {HistType::kTH3F, {centFV0AAxis, centFT0MAxis, eventTypeAxis}}); + } + registry.add("hFT0MFV0Asignal", "hFT0MFV0Asignal", {HistType::kTH2F, {signalAxis, signalAxis}}); } } @@ -316,10 +327,13 @@ struct cascqaanalysis { int nTracksGlobal = tracksGroupedGlobal.size(); registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), nTracksPVcontr, evType); - registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), nTracksGlobal, evType); registry.fill(HIST("hFV0ApvContr"), collision.centFV0A(), nTracksPVcontr, evType); - registry.fill(HIST("hFV0AFT0M"), collision.centFV0A(), collision.centFT0M(), evType); + if(multQA){ + registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), nTracksGlobal, evType); + registry.fill(HIST("hFV0AFT0M"), collision.centFV0A(), collision.centFT0M(), evType); + registry.fill(HIST("hFT0MFV0Asignal"), collision.multFT0A() + collision.multFT0C(), collision.multFV0A()); + } float lEventScale = scalefactor; @@ -416,9 +430,13 @@ struct cascqaanalysis { uint16_t nchFV0 = GetGenNchInFV0Aregion(mcPartSlice); registry.fill(HIST("hNchFT0MPVContr"), nchFT0, nTracksPVcontr, evType); - registry.fill(HIST("hNchFT0Mglobal"), nchFT0, nTracksGlobal, evType); registry.fill(HIST("hNchFV0APVContr"), nchFV0, nTracksPVcontr, evType); + if(multQA){ + registry.fill(HIST("hNchFT0Mglobal"), nchFT0, nTracksGlobal, evType); + registry.fill(HIST("hFT0MFV0Asignal"), collision.multFT0A() + collision.multFT0C(), collision.multFV0A()); + } + float lEventScale = scalefactor; for (const auto& casc : Cascades) { // loop over Cascades From 67b4b139ffc70964bb160189075c2cb4f5563e6c Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Thu, 24 Aug 2023 14:27:49 +0000 Subject: [PATCH 18/21] Please consider the following formatting changes --- PWGLF/TableProducer/cascqaanalysis.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index 7645bc4a1dc..3be9f0c82a3 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -329,7 +329,7 @@ struct cascqaanalysis { registry.fill(HIST("hFT0MpvContr"), collision.centFT0M(), nTracksPVcontr, evType); registry.fill(HIST("hFV0ApvContr"), collision.centFV0A(), nTracksPVcontr, evType); - if(multQA){ + if (multQA) { registry.fill(HIST("hFT0Mglobal"), collision.centFT0M(), nTracksGlobal, evType); registry.fill(HIST("hFV0AFT0M"), collision.centFV0A(), collision.centFT0M(), evType); registry.fill(HIST("hFT0MFV0Asignal"), collision.multFT0A() + collision.multFT0C(), collision.multFV0A()); @@ -432,7 +432,7 @@ struct cascqaanalysis { registry.fill(HIST("hNchFT0MPVContr"), nchFT0, nTracksPVcontr, evType); registry.fill(HIST("hNchFV0APVContr"), nchFV0, nTracksPVcontr, evType); - if(multQA){ + if (multQA) { registry.fill(HIST("hNchFT0Mglobal"), nchFT0, nTracksGlobal, evType); registry.fill(HIST("hFT0MFV0Asignal"), collision.multFT0A() + collision.multFT0C(), collision.multFV0A()); } From 513c0ff5c5d5ce2e3075114190c33220e6958e00 Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Thu, 24 Aug 2023 19:26:52 +0200 Subject: [PATCH 19/21] fix Lambda mass --- PWGLF/Tasks/cascpostprocessing.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PWGLF/Tasks/cascpostprocessing.cxx b/PWGLF/Tasks/cascpostprocessing.cxx index 2b4bbf8f6b7..c89a299b15c 100644 --- a/PWGLF/Tasks/cascpostprocessing.cxx +++ b/PWGLF/Tasks/cascpostprocessing.cxx @@ -322,7 +322,7 @@ struct cascpostprocessing { if (TMath::Abs(candidate.dcav0topv()) < dcav0topv) continue; registry.fill(HIST("hCandidate"), ++counter); - if (TMath::Abs(candidate.masslambdadau() - pdgDB->Mass(3312)) > lambdamasswin) + if (TMath::Abs(candidate.masslambdadau() - pdgDB->Mass(3122)) > lambdamasswin) continue; registry.fill(HIST("hCandidate"), ++counter); if (candidate.sign() < 0) { From 0d71c4a985c24b7a79bacdf7dbc707fd2df3ec2a Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Fri, 25 Aug 2023 00:50:12 +0200 Subject: [PATCH 20/21] change cent axes to reduce memory consumption --- PWGLF/TableProducer/cascqaanalysis.cxx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index 3be9f0c82a3..90f634493ac 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -80,14 +80,19 @@ struct cascqaanalysis { { AxisSpec ptAxis = {200, 0.0f, 10.0f, "#it{p}_{T} (GeV/#it{c})"}; AxisSpec rapidityAxis = {200, -2.0f, 2.0f, "y"}; - AxisSpec centFT0MAxis = {10550, 0.f, 105.5f, "FT0M (%)"}; - AxisSpec centFV0AAxis = {10550, 0.f, 105.5f, "FV0A (%)"}; + ConfigurableAxis centFT0MAxis{"FT0M", + {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}, + "FT0M (%)"}; + ConfigurableAxis centFV0AAxis{"FV0A", + {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}, + "FV0A (%)"}; AxisSpec eventTypeAxis = {3, -0.5f, 2.5f, "Event Type"}; AxisSpec nAssocCollAxis = {5, -0.5f, 4.5f, "N_{assoc.}"}; AxisSpec nChargedFT0MGenAxis = {500, 0, 500, "N_{FT0M, gen.}"}; AxisSpec nChargedFV0AGenAxis = {500, 0, 500, "N_{FV0A, gen.}"}; AxisSpec multNTracksAxis = {500, 0, 500, "N_{tracks}"}; - AxisSpec signalAxis = {20000, 0, 20000, "Amplitude"}; + AxisSpec signalFT0MAxis = {10000, 0, 40000, "FT0M amplitude"}; + AxisSpec signalFV0AAxis = {10000, 0, 40000, "FV0A amplitude"}; TString hCandidateCounterLabels[5] = {"All candidates", "v0data exists", "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"}; @@ -131,7 +136,7 @@ struct cascqaanalysis { registry.add("hFT0Mglobal", "hFT0Mglobal", {HistType::kTH3F, {centFT0MAxis, multNTracksAxis, eventTypeAxis}}); registry.add("hFV0AFT0M", "hFV0AFT0M", {HistType::kTH3F, {centFV0AAxis, centFT0MAxis, eventTypeAxis}}); } - registry.add("hFT0MFV0Asignal", "hFT0MFV0Asignal", {HistType::kTH2F, {signalAxis, signalAxis}}); + registry.add("hFT0MFV0Asignal", "hFT0MFV0Asignal", {HistType::kTH2F, {signalFT0MAxis, signalFV0AAxis}}); } } From 6b9b2272043ae47fbe7e849d48a115e9c2b19362 Mon Sep 17 00:00:00 2001 From: nepeivodaRS Date: Fri, 25 Aug 2023 17:44:12 +0200 Subject: [PATCH 21/21] centAxes: new binning in cascqa --- PWGLF/TableProducer/cascqaanalysis.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PWGLF/TableProducer/cascqaanalysis.cxx b/PWGLF/TableProducer/cascqaanalysis.cxx index 90f634493ac..7cc7850dc03 100644 --- a/PWGLF/TableProducer/cascqaanalysis.cxx +++ b/PWGLF/TableProducer/cascqaanalysis.cxx @@ -81,10 +81,10 @@ struct cascqaanalysis { AxisSpec ptAxis = {200, 0.0f, 10.0f, "#it{p}_{T} (GeV/#it{c})"}; AxisSpec rapidityAxis = {200, -2.0f, 2.0f, "y"}; ConfigurableAxis centFT0MAxis{"FT0M", - {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}, + {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}, "FT0M (%)"}; ConfigurableAxis centFV0AAxis{"FV0A", - {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}, + {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 (%)"}; AxisSpec eventTypeAxis = {3, -0.5f, 2.5f, "Event Type"}; AxisSpec nAssocCollAxis = {5, -0.5f, 4.5f, "N_{assoc.}"};