From f02fe250f67faa08eb1161bc9b605487e7562877 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Tue, 15 Jul 2025 10:16:40 +0200 Subject: [PATCH 1/8] Update aQCMFTTracks.cxx --- DPG/Tasks/MFT/aQCMFTTracks.cxx | 101 ++++++++++++++++++++++++++++++--- 1 file changed, 92 insertions(+), 9 deletions(-) diff --git a/DPG/Tasks/MFT/aQCMFTTracks.cxx b/DPG/Tasks/MFT/aQCMFTTracks.cxx index 8b264102150..b81c507cb5f 100644 --- a/DPG/Tasks/MFT/aQCMFTTracks.cxx +++ b/DPG/Tasks/MFT/aQCMFTTracks.cxx @@ -16,19 +16,19 @@ /// \author David Grund /// \since +#include "Common/DataModel/Centrality.h" +#include "Common/DataModel/EventSelection.h" +#include "Common/DataModel/Multiplicity.h" + #include "CCDB/BasicCCDBManager.h" -#include "Framework/runDataProcessing.h" -#include "Framework/AnalysisTask.h" -#include "Framework/AnalysisDataModel.h" +#include "CommonConstants/LHCConstants.h" +#include "DataFormatsITSMFT/ROFRecord.h" #include "Framework/ASoAHelpers.h" - +#include "Framework/AnalysisDataModel.h" +#include "Framework/AnalysisTask.h" #include "Framework/DataTypes.h" -#include "Common/DataModel/Multiplicity.h" -#include "Common/DataModel/EventSelection.h" -#include "Common/DataModel/Centrality.h" -#include "CommonConstants/LHCConstants.h" #include "Framework/TimingInfo.h" -#include "DataFormatsITSMFT/ROFRecord.h" +#include "Framework/runDataProcessing.h" #include #include @@ -52,7 +52,19 @@ struct CheckMFT { {"mMFTTrackPhi", "Track #phi; #phi; # entries", {HistType::kTH1F, {{100, -3.2, 3.2}}}}, {"mMFTTrackTanl", "Track tan #lambda; tan #lambda; # entries", {HistType::kTH1F, {{100, -25, 0}}}}, {"mMFTTrackInvQPt", "Track q/p_{T}; q/p_{T} [1/GeV]; # entries", {HistType::kTH1F, {{250, -10, 10}}}}}}; + Configurable avClsPlots{"avClsPlots", false, "Enable average cluster plots"}; + void init(o2::framework::InitContext&) + { + if (avClsPlots) { + registry.add("mMFTTrackAvgClusters", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}}); + registry.add("mMFTTrackAvgClustersTru", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}}); + if (doprocessMC) { + registry.add("mMFTTrackAvgClustersHe", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}}); + registry.add("mMFTTrackAvgClustersTruHe", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}}); + } + } + } void process(aod::MFTTracks const& mfttracks) { for (auto& track : mfttracks) { @@ -74,6 +86,35 @@ struct CheckMFT { } } } + if (avClsPlots) { + std::array clsSize; + for (unsigned int layer = 0; layer < 10; layer++) { + clsSize[layer] = (track.mftClusterSizesAndTrackFlags() >> (layer * 6)) & 0x3f; + // LOG(info) << "Layer " << layer << ": " << clsSize[layer]; + } + float avgCls = 0; + for (unsigned int layer = 0; layer < 10; layer++) { + avgCls += clsSize[layer]; + } + avgCls /= track.nClusters(); + + std::sort(clsSize.begin(), clsSize.end()); + float truncatedAvgCls = 0; + int ncls = 0; + for (unsigned int layer = 0; layer < 10; layer++) { + if (clsSize[layer] > 0) { + truncatedAvgCls += clsSize[layer]; + ncls++; + if (ncls >= 3) { + break; // we take the average of the first 5 non-zero clusters + } + } + } + truncatedAvgCls /= ncls; + + registry.fill(HIST("mMFTTrackAvgClusters"), track.p(), avgCls); + registry.fill(HIST("mMFTTrackAvgClustersTru"), track.p(), truncatedAvgCls); + } // 1d histograms registry.fill(HIST("mMFTTrackEta"), eta); registry.fill(HIST("mMFTTrackNumberOfClusters"), nCls); @@ -82,6 +123,48 @@ struct CheckMFT { registry.fill(HIST("mMFTTrackInvQPt"), track.signed1Pt()); } } + + void processMC(soa::Join const& mfttracks, + aod::McParticles const&) + { + for (auto& track : mfttracks) { + if (avClsPlots) { + std::array clsSize; + for (unsigned int layer = 0; layer < 10; layer++) { + clsSize[layer] = (track.mftClusterSizesAndTrackFlags() >> (layer * 6)) & 0x3f; + // LOG(info) << "Layer " << layer << ": " << clsSize[layer]; + } + float avgCls = 0; + for (unsigned int layer = 0; layer < 10; layer++) { + avgCls += clsSize[layer]; + } + avgCls /= track.nClusters(); + + std::sort(clsSize.begin(), clsSize.end()); + float truncatedAvgCls = 0; + int ncls = 0; + for (unsigned int layer = 0; layer < 10; layer++) { + if (clsSize[layer] > 0) { + truncatedAvgCls += clsSize[layer]; + ncls++; + if (ncls >= 3) { + break; // we take the average of the first 5 non-zero clusters + } + } + } + truncatedAvgCls /= ncls; + + if (track.has_mcParticle()) { + const auto& mcParticle = track.mcParticle(); + if (std::abs(mcParticle.pdgCode()) == 1000020040) { // He4 + registry.fill(HIST("mMFTTrackAvgClustersHe"), track.p(), avgCls); + registry.fill(HIST("mMFTTrackAvgClustersTruHe"), track.p(), truncatedAvgCls); + } + } + } + } + } + PROCESS_SWITCH(CheckMFT, processMC, "Process MC", false); }; WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) From f87d5ff3c10a1d1524af52f36f36ca793d66eafd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Tue, 15 Jul 2025 12:03:42 +0200 Subject: [PATCH 2/8] Update aQCMFTTracks.cxx --- DPG/Tasks/MFT/aQCMFTTracks.cxx | 46 ++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 16 deletions(-) diff --git a/DPG/Tasks/MFT/aQCMFTTracks.cxx b/DPG/Tasks/MFT/aQCMFTTracks.cxx index b81c507cb5f..ffe79931b41 100644 --- a/DPG/Tasks/MFT/aQCMFTTracks.cxx +++ b/DPG/Tasks/MFT/aQCMFTTracks.cxx @@ -38,24 +38,37 @@ using namespace o2::framework; using namespace o2::aod; struct CheckMFT { - HistogramRegistry registry{"registry", - {// 2d histograms - {"mMFTTrackEtaPhi_5_MinClusters", "Track #eta , #phi (NCls >= 5); #eta; #phi", {HistType::kTH2F, {{50, -4, -2}, {100, -3.2, 3.2}}}}, - {"mMFTTrackXY_5_MinClusters", "Track Position (NCls >= 5); x; y", {HistType::kTH2F, {{320, -16, 16}, {320, -16, 16}}}}, - {"mMFTTrackEtaPhi_7_MinClusters", "Track #eta , #phi (NCls >= 7); #eta; #phi", {HistType::kTH2F, {{50, -4, -2}, {100, -3.2, 3.2}}}}, - {"mMFTTrackXY_7_MinClusters", "Track Position (NCls >= 7); x; y", {HistType::kTH2F, {{320, -16, 16}, {320, -16, 16}}}}, - {"mMFTTrackEtaPhi_8_MinClusters", "Track #eta , #phi (NCls >= 8); #eta; #phi", {HistType::kTH2F, {{50, -4, -2}, {100, -3.2, 3.2}}}}, - {"mMFTTrackXY_8_MinClusters", "Track Position (NCls >= 8); x; y", {HistType::kTH2F, {{320, -16, 16}, {320, -16, 16}}}}, - // 1d histograms - {"mMFTTrackEta", "Track #eta; #eta; # entries", {HistType::kTH1F, {{50, -4, -2}}}}, - {"mMFTTrackNumberOfClusters", "Number Of Clusters Per Track; # clusters; # entries", {HistType::kTH1F, {{10, 0.5, 10.5}}}}, - {"mMFTTrackPhi", "Track #phi; #phi; # entries", {HistType::kTH1F, {{100, -3.2, 3.2}}}}, - {"mMFTTrackTanl", "Track tan #lambda; tan #lambda; # entries", {HistType::kTH1F, {{100, -25, 0}}}}, - {"mMFTTrackInvQPt", "Track q/p_{T}; q/p_{T} [1/GeV]; # entries", {HistType::kTH1F, {{250, -10, 10}}}}}}; + HistogramRegistry registry{"registry"}; Configurable avClsPlots{"avClsPlots", false, "Enable average cluster plots"}; void init(o2::framework::InitContext&) { + + const AxisSpec etaAxis{50, -4, -2, "eta"}; + const AxisSpec phiAxis{320, -16, 16, "phi"}; + const AxisSpec xAxis{320, -16, 16, "x"}; + const AxisSpec clsAxis{10, 0.5, 10.5, "# clusters"}; + const AxisSpec yAxis{320, -16, 16, "y"}; + const AxisSpec tanLamAxis{100, -25, 0, "tan #lambda"}; + const AxisSpec invQPtAxis{250, -10, 10, "q/p_{T} [1/GeV]"}; + + registry.add("mMFTTrackPhi", "Track #phi", {HistType::kTH1F, {phiAxis}}); + registry.add("mMFTTrackTanl", "Track tan #lambda", {HistType::kTH1F, {tanLamAxis}}); + registry.add("mMFTTrackInvQPt", "Track q/p_{T}", {HistType::kTH1F, {invQPtAxis}}); + registry.add("mMFTTrackEta", "Track #eta", {HistType::kTH1F, {etaAxis}}); + + registry.add("mMFTTrackEtaPhi_5_MinClusters", "Track Position (NCls >= 5)", {HistType::kTH2F, {etaAxis, phiAxis}}); + registry.add("mMFTTrackEtaPhi_6_MinClusters", "Track Position (NCls >= 6)", {HistType::kTH2F, {etaAxis, phiAxis}}); + registry.add("mMFTTrackEtaPhi_7_MinClusters", "Track Position (NCls >= 7)", {HistType::kTH2F, {etaAxis, phiAxis}}); + registry.add("mMFTTrackEtaPhi_8_MinClusters", "Track Position (NCls >= 8)", {HistType::kTH2F, {etaAxis, phiAxis}}); + + registry.add("mMFTTrackXY_5_MinClusters", "Track Position (NCls >= 5)", {HistType::kTH2F, {xAxis, yAxis}}); + registry.add("mMFTTrackXY_6_MinClusters", "Track Position (NCls >= 6)", {HistType::kTH2F, {xAxis, yAxis}}); + registry.add("mMFTTrackXY_7_MinClusters", "Track Position (NCls >= 7)", {HistType::kTH2F, {xAxis, yAxis}}); + registry.add("mMFTTrackXY_8_MinClusters", "Track Position (NCls >= 8)", {HistType::kTH2F, {xAxis, yAxis}}); + + registry.add("mMFTTrackNumberOfClusters", "Number Of Clusters Per Track", {HistType::kTH1F, {clsAxis}}); + if (avClsPlots) { registry.add("mMFTTrackAvgClusters", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}}); registry.add("mMFTTrackAvgClustersTru", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}}); @@ -67,7 +80,7 @@ struct CheckMFT { } void process(aod::MFTTracks const& mfttracks) { - for (auto& track : mfttracks) { + for (const auto& track : mfttracks) { // 2d histograms float x = track.x(); float y = track.y(); @@ -127,8 +140,9 @@ struct CheckMFT { void processMC(soa::Join const& mfttracks, aod::McParticles const&) { - for (auto& track : mfttracks) { + for (const auto& track : mfttracks) { if (avClsPlots) { + static constexpr int kNcls = 10; std::array clsSize; for (unsigned int layer = 0; layer < 10; layer++) { clsSize[layer] = (track.mftClusterSizesAndTrackFlags() >> (layer * 6)) & 0x3f; From e0134ec581f8973113f319fa98e1b704b2ccaa03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Tue, 15 Jul 2025 14:58:12 +0200 Subject: [PATCH 3/8] Update aQCMFTTracks.cxx --- DPG/Tasks/MFT/aQCMFTTracks.cxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/DPG/Tasks/MFT/aQCMFTTracks.cxx b/DPG/Tasks/MFT/aQCMFTTracks.cxx index ffe79931b41..8ac00f7b030 100644 --- a/DPG/Tasks/MFT/aQCMFTTracks.cxx +++ b/DPG/Tasks/MFT/aQCMFTTracks.cxx @@ -140,16 +140,16 @@ struct CheckMFT { void processMC(soa::Join const& mfttracks, aod::McParticles const&) { + static constexpr int kNcls = 10; for (const auto& track : mfttracks) { if (avClsPlots) { - static constexpr int kNcls = 10; - std::array clsSize; - for (unsigned int layer = 0; layer < 10; layer++) { + std::array clsSize; + for (unsigned int layer = 0; layer < kNcls; layer++) { clsSize[layer] = (track.mftClusterSizesAndTrackFlags() >> (layer * 6)) & 0x3f; // LOG(info) << "Layer " << layer << ": " << clsSize[layer]; } float avgCls = 0; - for (unsigned int layer = 0; layer < 10; layer++) { + for (unsigned int layer = 0; layer < kNcls; layer++) { avgCls += clsSize[layer]; } avgCls /= track.nClusters(); @@ -157,7 +157,7 @@ struct CheckMFT { std::sort(clsSize.begin(), clsSize.end()); float truncatedAvgCls = 0; int ncls = 0; - for (unsigned int layer = 0; layer < 10; layer++) { + for (unsigned int layer = 0; layer < kNcls; layer++) { if (clsSize[layer] > 0) { truncatedAvgCls += clsSize[layer]; ncls++; From 5d7f1da5f148e341458d86a245f0778543f035b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Tue, 15 Jul 2025 16:12:23 +0200 Subject: [PATCH 4/8] Update aQCMFTTracks.cxx --- DPG/Tasks/MFT/aQCMFTTracks.cxx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/DPG/Tasks/MFT/aQCMFTTracks.cxx b/DPG/Tasks/MFT/aQCMFTTracks.cxx index 8ac00f7b030..047908e0035 100644 --- a/DPG/Tasks/MFT/aQCMFTTracks.cxx +++ b/DPG/Tasks/MFT/aQCMFTTracks.cxx @@ -30,6 +30,7 @@ #include "Framework/TimingInfo.h" #include "Framework/runDataProcessing.h" +#include #include #include @@ -44,8 +45,8 @@ struct CheckMFT { void init(o2::framework::InitContext&) { - const AxisSpec etaAxis{50, -4, -2, "eta"}; - const AxisSpec phiAxis{320, -16, 16, "phi"}; + const AxisSpec etaAxis{50, -4, -2, "#eta"}; + const AxisSpec phiAxis{100, -3.2, 3.2, "#phi"}; const AxisSpec xAxis{320, -16, 16, "x"}; const AxisSpec clsAxis{10, 0.5, 10.5, "# clusters"}; const AxisSpec yAxis{320, -16, 16, "y"}; From bdf9dc3527159d1cc7a00e83111a442d7470bb2f Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 15 Jul 2025 14:12:55 +0000 Subject: [PATCH 5/8] Please consider the following formatting changes --- DPG/Tasks/MFT/aQCMFTTracks.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DPG/Tasks/MFT/aQCMFTTracks.cxx b/DPG/Tasks/MFT/aQCMFTTracks.cxx index 047908e0035..e41a25e6c54 100644 --- a/DPG/Tasks/MFT/aQCMFTTracks.cxx +++ b/DPG/Tasks/MFT/aQCMFTTracks.cxx @@ -30,10 +30,11 @@ #include "Framework/TimingInfo.h" #include "Framework/runDataProcessing.h" -#include #include #include +#include + using namespace o2; using namespace o2::framework; using namespace o2::aod; From 0c2e3cdd9d0d11ef51eb643f07b584894a0c23cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Tue, 15 Jul 2025 16:15:15 +0200 Subject: [PATCH 6/8] Update aQCMFTTracks.cxx --- DPG/Tasks/MFT/aQCMFTTracks.cxx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/DPG/Tasks/MFT/aQCMFTTracks.cxx b/DPG/Tasks/MFT/aQCMFTTracks.cxx index 047908e0035..b0c3b510d21 100644 --- a/DPG/Tasks/MFT/aQCMFTTracks.cxx +++ b/DPG/Tasks/MFT/aQCMFTTracks.cxx @@ -91,7 +91,10 @@ struct CheckMFT { if (nCls >= 5) { registry.fill(HIST("mMFTTrackXY_5_MinClusters"), x, y); registry.fill(HIST("mMFTTrackEtaPhi_5_MinClusters"), eta, phi); - if (nCls >= 7) { + if (nCls >= 6) { + registry.fill(HIST("mMFTTrackXY_6_MinClusters"), x, y); + registry.fill(HIST("mMFTTrackEtaPhi_6_MinClusters"), eta, phi); +} if (nCls >= 7) { registry.fill(HIST("mMFTTrackXY_7_MinClusters"), x, y); registry.fill(HIST("mMFTTrackEtaPhi_7_MinClusters"), eta, phi); if (nCls >= 8) { @@ -101,13 +104,14 @@ struct CheckMFT { } } if (avClsPlots) { - std::array clsSize; - for (unsigned int layer = 0; layer < 10; layer++) { + static constexpr int kNcls = 10; + std::array clsSize; + for (unsigned int layer = 0; layer < kNcls; layer++) { clsSize[layer] = (track.mftClusterSizesAndTrackFlags() >> (layer * 6)) & 0x3f; // LOG(info) << "Layer " << layer << ": " << clsSize[layer]; } float avgCls = 0; - for (unsigned int layer = 0; layer < 10; layer++) { + for (unsigned int layer = 0; layer < kNcls; layer++) { avgCls += clsSize[layer]; } avgCls /= track.nClusters(); @@ -115,7 +119,7 @@ struct CheckMFT { std::sort(clsSize.begin(), clsSize.end()); float truncatedAvgCls = 0; int ncls = 0; - for (unsigned int layer = 0; layer < 10; layer++) { + for (unsigned int layer = 0; layer < kNcls; layer++) { if (clsSize[layer] > 0) { truncatedAvgCls += clsSize[layer]; ncls++; From 4e7309a3e89d36486abab29d36cc3835c7161bab Mon Sep 17 00:00:00 2001 From: ALICE Action Bot Date: Tue, 15 Jul 2025 14:15:51 +0000 Subject: [PATCH 7/8] Please consider the following formatting changes --- DPG/Tasks/MFT/aQCMFTTracks.cxx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/DPG/Tasks/MFT/aQCMFTTracks.cxx b/DPG/Tasks/MFT/aQCMFTTracks.cxx index b0c3b510d21..77f5b8ad790 100644 --- a/DPG/Tasks/MFT/aQCMFTTracks.cxx +++ b/DPG/Tasks/MFT/aQCMFTTracks.cxx @@ -30,10 +30,11 @@ #include "Framework/TimingInfo.h" #include "Framework/runDataProcessing.h" -#include #include #include +#include + using namespace o2; using namespace o2::framework; using namespace o2::aod; @@ -91,10 +92,11 @@ struct CheckMFT { if (nCls >= 5) { registry.fill(HIST("mMFTTrackXY_5_MinClusters"), x, y); registry.fill(HIST("mMFTTrackEtaPhi_5_MinClusters"), eta, phi); - if (nCls >= 6) { - registry.fill(HIST("mMFTTrackXY_6_MinClusters"), x, y); - registry.fill(HIST("mMFTTrackEtaPhi_6_MinClusters"), eta, phi); -} if (nCls >= 7) { + if (nCls >= 6) { + registry.fill(HIST("mMFTTrackXY_6_MinClusters"), x, y); + registry.fill(HIST("mMFTTrackEtaPhi_6_MinClusters"), eta, phi); + } + if (nCls >= 7) { registry.fill(HIST("mMFTTrackXY_7_MinClusters"), x, y); registry.fill(HIST("mMFTTrackEtaPhi_7_MinClusters"), eta, phi); if (nCls >= 8) { From d7f821f262e2c43588848dcc81eb3e81b9dea73b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Jacazio?= Date: Tue, 15 Jul 2025 16:17:34 +0200 Subject: [PATCH 8/8] Update aQCMFTTracks.cxx --- DPG/Tasks/MFT/aQCMFTTracks.cxx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/DPG/Tasks/MFT/aQCMFTTracks.cxx b/DPG/Tasks/MFT/aQCMFTTracks.cxx index 77f5b8ad790..5b5f4a71aa4 100644 --- a/DPG/Tasks/MFT/aQCMFTTracks.cxx +++ b/DPG/Tasks/MFT/aQCMFTTracks.cxx @@ -95,13 +95,13 @@ struct CheckMFT { if (nCls >= 6) { registry.fill(HIST("mMFTTrackXY_6_MinClusters"), x, y); registry.fill(HIST("mMFTTrackEtaPhi_6_MinClusters"), eta, phi); - } - if (nCls >= 7) { - registry.fill(HIST("mMFTTrackXY_7_MinClusters"), x, y); - registry.fill(HIST("mMFTTrackEtaPhi_7_MinClusters"), eta, phi); - if (nCls >= 8) { - registry.fill(HIST("mMFTTrackXY_8_MinClusters"), x, y); - registry.fill(HIST("mMFTTrackEtaPhi_8_MinClusters"), eta, phi); + if (nCls >= 7) { + registry.fill(HIST("mMFTTrackXY_7_MinClusters"), x, y); + registry.fill(HIST("mMFTTrackEtaPhi_7_MinClusters"), eta, phi); + if (nCls >= 8) { + registry.fill(HIST("mMFTTrackXY_8_MinClusters"), x, y); + registry.fill(HIST("mMFTTrackEtaPhi_8_MinClusters"), eta, phi); + } } } }