Skip to content

Commit f02fe25

Browse files
committed
Update aQCMFTTracks.cxx
1 parent 04cbec3 commit f02fe25

File tree

1 file changed

+92
-9
lines changed

1 file changed

+92
-9
lines changed

DPG/Tasks/MFT/aQCMFTTracks.cxx

Lines changed: 92 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,19 @@
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>
@@ -52,7 +52,19 @@ struct CheckMFT {
5252
{"mMFTTrackPhi", "Track #phi; #phi; # entries", {HistType::kTH1F, {{100, -3.2, 3.2}}}},
5353
{"mMFTTrackTanl", "Track tan #lambda; tan #lambda; # entries", {HistType::kTH1F, {{100, -25, 0}}}},
5454
{"mMFTTrackInvQPt", "Track q/p_{T}; q/p_{T} [1/GeV]; # entries", {HistType::kTH1F, {{250, -10, 10}}}}}};
55+
Configurable<bool> avClsPlots{"avClsPlots", false, "Enable average cluster plots"};
5556

57+
void init(o2::framework::InitContext&)
58+
{
59+
if (avClsPlots) {
60+
registry.add("mMFTTrackAvgClusters", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}});
61+
registry.add("mMFTTrackAvgClustersTru", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}});
62+
if (doprocessMC) {
63+
registry.add("mMFTTrackAvgClustersHe", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}});
64+
registry.add("mMFTTrackAvgClustersTruHe", "Average number of clusters per track; p;# clusters; # entries", {HistType::kTH2F, {{100, 0, 100}, {100, 0, 100}}});
65+
}
66+
}
67+
}
5668
void process(aod::MFTTracks const& mfttracks)
5769
{
5870
for (auto& track : mfttracks) {
@@ -74,6 +86,35 @@ struct CheckMFT {
7486
}
7587
}
7688
}
89+
if (avClsPlots) {
90+
std::array<float, 10> clsSize;
91+
for (unsigned int layer = 0; layer < 10; layer++) {
92+
clsSize[layer] = (track.mftClusterSizesAndTrackFlags() >> (layer * 6)) & 0x3f;
93+
// LOG(info) << "Layer " << layer << ": " << clsSize[layer];
94+
}
95+
float avgCls = 0;
96+
for (unsigned int layer = 0; layer < 10; layer++) {
97+
avgCls += clsSize[layer];
98+
}
99+
avgCls /= track.nClusters();
100+
101+
std::sort(clsSize.begin(), clsSize.end());
102+
float truncatedAvgCls = 0;
103+
int ncls = 0;
104+
for (unsigned int layer = 0; layer < 10; layer++) {
105+
if (clsSize[layer] > 0) {
106+
truncatedAvgCls += clsSize[layer];
107+
ncls++;
108+
if (ncls >= 3) {
109+
break; // we take the average of the first 5 non-zero clusters
110+
}
111+
}
112+
}
113+
truncatedAvgCls /= ncls;
114+
115+
registry.fill(HIST("mMFTTrackAvgClusters"), track.p(), avgCls);
116+
registry.fill(HIST("mMFTTrackAvgClustersTru"), track.p(), truncatedAvgCls);
117+
}
77118
// 1d histograms
78119
registry.fill(HIST("mMFTTrackEta"), eta);
79120
registry.fill(HIST("mMFTTrackNumberOfClusters"), nCls);
@@ -82,6 +123,48 @@ struct CheckMFT {
82123
registry.fill(HIST("mMFTTrackInvQPt"), track.signed1Pt());
83124
}
84125
}
126+
127+
void processMC(soa::Join<aod::MFTTracks, aod::McMFTTrackLabels> const& mfttracks,
128+
aod::McParticles const&)
129+
{
130+
for (auto& track : mfttracks) {
131+
if (avClsPlots) {
132+
std::array<float, 10> clsSize;
133+
for (unsigned int layer = 0; layer < 10; layer++) {
134+
clsSize[layer] = (track.mftClusterSizesAndTrackFlags() >> (layer * 6)) & 0x3f;
135+
// LOG(info) << "Layer " << layer << ": " << clsSize[layer];
136+
}
137+
float avgCls = 0;
138+
for (unsigned int layer = 0; layer < 10; layer++) {
139+
avgCls += clsSize[layer];
140+
}
141+
avgCls /= track.nClusters();
142+
143+
std::sort(clsSize.begin(), clsSize.end());
144+
float truncatedAvgCls = 0;
145+
int ncls = 0;
146+
for (unsigned int layer = 0; layer < 10; layer++) {
147+
if (clsSize[layer] > 0) {
148+
truncatedAvgCls += clsSize[layer];
149+
ncls++;
150+
if (ncls >= 3) {
151+
break; // we take the average of the first 5 non-zero clusters
152+
}
153+
}
154+
}
155+
truncatedAvgCls /= ncls;
156+
157+
if (track.has_mcParticle()) {
158+
const auto& mcParticle = track.mcParticle();
159+
if (std::abs(mcParticle.pdgCode()) == 1000020040) { // He4
160+
registry.fill(HIST("mMFTTrackAvgClustersHe"), track.p(), avgCls);
161+
registry.fill(HIST("mMFTTrackAvgClustersTruHe"), track.p(), truncatedAvgCls);
162+
}
163+
}
164+
}
165+
}
166+
}
167+
PROCESS_SWITCH(CheckMFT, processMC, "Process MC", false);
85168
};
86169

87170
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)