Skip to content

Commit f97585c

Browse files
authored
[DPG] Update aQCMFTTracks.cxx (#12056)
1 parent e1e724d commit f97585c

File tree

1 file changed

+134
-30
lines changed

1 file changed

+134
-30
lines changed

DPG/Tasks/MFT/aQCMFTTracks.cxx

Lines changed: 134 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,46 +16,73 @@
1616
/// \author David Grund
1717
/// \since
1818

19+
#include "Common/DataModel/Centrality.h"
20+
#include "Common/DataModel/EventSelection.h"
21+
#include "Common/DataModel/Multiplicity.h"
22+
1923
#include "CCDB/BasicCCDBManager.h"
20-
#include "Framework/runDataProcessing.h"
21-
#include "Framework/AnalysisTask.h"
22-
#include "Framework/AnalysisDataModel.h"
24+
#include "CommonConstants/LHCConstants.h"
25+
#include "DataFormatsITSMFT/ROFRecord.h"
2326
#include "Framework/ASoAHelpers.h"
24-
27+
#include "Framework/AnalysisDataModel.h"
28+
#include "Framework/AnalysisTask.h"
2529
#include "Framework/DataTypes.h"
26-
#include "Common/DataModel/Multiplicity.h"
27-
#include "Common/DataModel/EventSelection.h"
28-
#include "Common/DataModel/Centrality.h"
29-
#include "CommonConstants/LHCConstants.h"
3030
#include "Framework/TimingInfo.h"
31-
#include "DataFormatsITSMFT/ROFRecord.h"
31+
#include "Framework/runDataProcessing.h"
3232

3333
#include <TH1F.h>
3434
#include <TH2F.h>
3535

36+
#include <algorithm>
37+
3638
using namespace o2;
3739
using namespace o2::framework;
3840
using namespace o2::aod;
3941

4042
struct CheckMFT {
41-
HistogramRegistry registry{"registry",
42-
{// 2d histograms
43-
{"mMFTTrackEtaPhi_5_MinClusters", "Track #eta , #phi (NCls >= 5); #eta; #phi", {HistType::kTH2F, {{50, -4, -2}, {100, -3.2, 3.2}}}},
44-
{"mMFTTrackXY_5_MinClusters", "Track Position (NCls >= 5); x; y", {HistType::kTH2F, {{320, -16, 16}, {320, -16, 16}}}},
45-
{"mMFTTrackEtaPhi_7_MinClusters", "Track #eta , #phi (NCls >= 7); #eta; #phi", {HistType::kTH2F, {{50, -4, -2}, {100, -3.2, 3.2}}}},
46-
{"mMFTTrackXY_7_MinClusters", "Track Position (NCls >= 7); x; y", {HistType::kTH2F, {{320, -16, 16}, {320, -16, 16}}}},
47-
{"mMFTTrackEtaPhi_8_MinClusters", "Track #eta , #phi (NCls >= 8); #eta; #phi", {HistType::kTH2F, {{50, -4, -2}, {100, -3.2, 3.2}}}},
48-
{"mMFTTrackXY_8_MinClusters", "Track Position (NCls >= 8); x; y", {HistType::kTH2F, {{320, -16, 16}, {320, -16, 16}}}},
49-
// 1d histograms
50-
{"mMFTTrackEta", "Track #eta; #eta; # entries", {HistType::kTH1F, {{50, -4, -2}}}},
51-
{"mMFTTrackNumberOfClusters", "Number Of Clusters Per Track; # clusters; # entries", {HistType::kTH1F, {{10, 0.5, 10.5}}}},
52-
{"mMFTTrackPhi", "Track #phi; #phi; # entries", {HistType::kTH1F, {{100, -3.2, 3.2}}}},
53-
{"mMFTTrackTanl", "Track tan #lambda; tan #lambda; # entries", {HistType::kTH1F, {{100, -25, 0}}}},
54-
{"mMFTTrackInvQPt", "Track q/p_{T}; q/p_{T} [1/GeV]; # entries", {HistType::kTH1F, {{250, -10, 10}}}}}};
43+
HistogramRegistry registry{"registry"};
44+
Configurable<bool> avClsPlots{"avClsPlots", false, "Enable average cluster plots"};
45+
46+
void init(o2::framework::InitContext&)
47+
{
48+
49+
const AxisSpec etaAxis{50, -4, -2, "#eta"};
50+
const AxisSpec phiAxis{100, -3.2, 3.2, "#phi"};
51+
const AxisSpec xAxis{320, -16, 16, "x"};
52+
const AxisSpec clsAxis{10, 0.5, 10.5, "# clusters"};
53+
const AxisSpec yAxis{320, -16, 16, "y"};
54+
const AxisSpec tanLamAxis{100, -25, 0, "tan #lambda"};
55+
const AxisSpec invQPtAxis{250, -10, 10, "q/p_{T} [1/GeV]"};
56+
57+
registry.add("mMFTTrackPhi", "Track #phi", {HistType::kTH1F, {phiAxis}});
58+
registry.add("mMFTTrackTanl", "Track tan #lambda", {HistType::kTH1F, {tanLamAxis}});
59+
registry.add("mMFTTrackInvQPt", "Track q/p_{T}", {HistType::kTH1F, {invQPtAxis}});
60+
registry.add("mMFTTrackEta", "Track #eta", {HistType::kTH1F, {etaAxis}});
61+
62+
registry.add("mMFTTrackEtaPhi_5_MinClusters", "Track Position (NCls >= 5)", {HistType::kTH2F, {etaAxis, phiAxis}});
63+
registry.add("mMFTTrackEtaPhi_6_MinClusters", "Track Position (NCls >= 6)", {HistType::kTH2F, {etaAxis, phiAxis}});
64+
registry.add("mMFTTrackEtaPhi_7_MinClusters", "Track Position (NCls >= 7)", {HistType::kTH2F, {etaAxis, phiAxis}});
65+
registry.add("mMFTTrackEtaPhi_8_MinClusters", "Track Position (NCls >= 8)", {HistType::kTH2F, {etaAxis, phiAxis}});
66+
67+
registry.add("mMFTTrackXY_5_MinClusters", "Track Position (NCls >= 5)", {HistType::kTH2F, {xAxis, yAxis}});
68+
registry.add("mMFTTrackXY_6_MinClusters", "Track Position (NCls >= 6)", {HistType::kTH2F, {xAxis, yAxis}});
69+
registry.add("mMFTTrackXY_7_MinClusters", "Track Position (NCls >= 7)", {HistType::kTH2F, {xAxis, yAxis}});
70+
registry.add("mMFTTrackXY_8_MinClusters", "Track Position (NCls >= 8)", {HistType::kTH2F, {xAxis, yAxis}});
5571

72+
registry.add("mMFTTrackNumberOfClusters", "Number Of Clusters Per Track", {HistType::kTH1F, {clsAxis}});
73+
74+
if (avClsPlots) {
75+
registry.add("mMFTTrackAvgClusters", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}});
76+
registry.add("mMFTTrackAvgClustersTru", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}});
77+
if (doprocessMC) {
78+
registry.add("mMFTTrackAvgClustersHe", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}});
79+
registry.add("mMFTTrackAvgClustersTruHe", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}});
80+
}
81+
}
82+
}
5683
void process(aod::MFTTracks const& mfttracks)
5784
{
58-
for (auto& track : mfttracks) {
85+
for (const auto& track : mfttracks) {
5986
// 2d histograms
6087
float x = track.x();
6188
float y = track.y();
@@ -65,14 +92,48 @@ struct CheckMFT {
6592
if (nCls >= 5) {
6693
registry.fill(HIST("mMFTTrackXY_5_MinClusters"), x, y);
6794
registry.fill(HIST("mMFTTrackEtaPhi_5_MinClusters"), eta, phi);
68-
if (nCls >= 7) {
69-
registry.fill(HIST("mMFTTrackXY_7_MinClusters"), x, y);
70-
registry.fill(HIST("mMFTTrackEtaPhi_7_MinClusters"), eta, phi);
71-
if (nCls >= 8) {
72-
registry.fill(HIST("mMFTTrackXY_8_MinClusters"), x, y);
73-
registry.fill(HIST("mMFTTrackEtaPhi_8_MinClusters"), eta, phi);
95+
if (nCls >= 6) {
96+
registry.fill(HIST("mMFTTrackXY_6_MinClusters"), x, y);
97+
registry.fill(HIST("mMFTTrackEtaPhi_6_MinClusters"), eta, phi);
98+
if (nCls >= 7) {
99+
registry.fill(HIST("mMFTTrackXY_7_MinClusters"), x, y);
100+
registry.fill(HIST("mMFTTrackEtaPhi_7_MinClusters"), eta, phi);
101+
if (nCls >= 8) {
102+
registry.fill(HIST("mMFTTrackXY_8_MinClusters"), x, y);
103+
registry.fill(HIST("mMFTTrackEtaPhi_8_MinClusters"), eta, phi);
104+
}
105+
}
106+
}
107+
}
108+
if (avClsPlots) {
109+
static constexpr int kNcls = 10;
110+
std::array<float, kNcls> clsSize;
111+
for (unsigned int layer = 0; layer < kNcls; layer++) {
112+
clsSize[layer] = (track.mftClusterSizesAndTrackFlags() >> (layer * 6)) & 0x3f;
113+
// LOG(info) << "Layer " << layer << ": " << clsSize[layer];
114+
}
115+
float avgCls = 0;
116+
for (unsigned int layer = 0; layer < kNcls; layer++) {
117+
avgCls += clsSize[layer];
118+
}
119+
avgCls /= track.nClusters();
120+
121+
std::sort(clsSize.begin(), clsSize.end());
122+
float truncatedAvgCls = 0;
123+
int ncls = 0;
124+
for (unsigned int layer = 0; layer < kNcls; layer++) {
125+
if (clsSize[layer] > 0) {
126+
truncatedAvgCls += clsSize[layer];
127+
ncls++;
128+
if (ncls >= 3) {
129+
break; // we take the average of the first 5 non-zero clusters
130+
}
74131
}
75132
}
133+
truncatedAvgCls /= ncls;
134+
135+
registry.fill(HIST("mMFTTrackAvgClusters"), track.p(), avgCls);
136+
registry.fill(HIST("mMFTTrackAvgClustersTru"), track.p(), truncatedAvgCls);
76137
}
77138
// 1d histograms
78139
registry.fill(HIST("mMFTTrackEta"), eta);
@@ -82,6 +143,49 @@ struct CheckMFT {
82143
registry.fill(HIST("mMFTTrackInvQPt"), track.signed1Pt());
83144
}
84145
}
146+
147+
void processMC(soa::Join<aod::MFTTracks, aod::McMFTTrackLabels> const& mfttracks,
148+
aod::McParticles const&)
149+
{
150+
static constexpr int kNcls = 10;
151+
for (const auto& track : mfttracks) {
152+
if (avClsPlots) {
153+
std::array<float, kNcls> clsSize;
154+
for (unsigned int layer = 0; layer < kNcls; layer++) {
155+
clsSize[layer] = (track.mftClusterSizesAndTrackFlags() >> (layer * 6)) & 0x3f;
156+
// LOG(info) << "Layer " << layer << ": " << clsSize[layer];
157+
}
158+
float avgCls = 0;
159+
for (unsigned int layer = 0; layer < kNcls; layer++) {
160+
avgCls += clsSize[layer];
161+
}
162+
avgCls /= track.nClusters();
163+
164+
std::sort(clsSize.begin(), clsSize.end());
165+
float truncatedAvgCls = 0;
166+
int ncls = 0;
167+
for (unsigned int layer = 0; layer < kNcls; layer++) {
168+
if (clsSize[layer] > 0) {
169+
truncatedAvgCls += clsSize[layer];
170+
ncls++;
171+
if (ncls >= 3) {
172+
break; // we take the average of the first 5 non-zero clusters
173+
}
174+
}
175+
}
176+
truncatedAvgCls /= ncls;
177+
178+
if (track.has_mcParticle()) {
179+
const auto& mcParticle = track.mcParticle();
180+
if (std::abs(mcParticle.pdgCode()) == 1000020040) { // He4
181+
registry.fill(HIST("mMFTTrackAvgClustersHe"), track.p(), avgCls);
182+
registry.fill(HIST("mMFTTrackAvgClustersTruHe"), track.p(), truncatedAvgCls);
183+
}
184+
}
185+
}
186+
}
187+
}
188+
PROCESS_SWITCH(CheckMFT, processMC, "Process MC", false);
85189
};
86190

87191
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)