Skip to content

Commit 6ecabda

Browse files
authored
[PWGLF] Added QA histos for track selection (#12464)
1 parent 48f93c9 commit 6ecabda

File tree

1 file changed

+61
-30
lines changed

1 file changed

+61
-30
lines changed

PWGMM/Mult/Tasks/dndetaMFTPbPb.cxx

Lines changed: 61 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,17 @@ AxisSpec phiAxis = {629, 0, TwoPI, "Rad", "#phi"};
6666
AxisSpec etaAxis = {20, -4., -2.};
6767
AxisSpec centAxis{100, 0, 100, "centrality"};
6868
AxisSpec chiSqAxis = {100, 0., 1000.};
69+
AxisSpec nclsAxis{10, 0.5, 10.5, "# clusters"};
70+
71+
enum TrkSel {
72+
trkSelNCls,
73+
trkSelChi2Ncl,
74+
trkSelEta,
75+
trkSelPhiCut,
76+
trkSelPt,
77+
trkSelCA,
78+
nTrkSel
79+
};
6980

7081
struct DndetaMFTPbPb {
7182
SliceCache cache;
@@ -101,27 +112,29 @@ struct DndetaMFTPbPb {
101112
"minimum number of MFT clusters"};
102113
Configurable<bool> useChi2Cut{"useChi2Cut", false, "use track chi2 cut"};
103114
Configurable<float> maxChi2NCl{"maxChi2NCl", 1000.f, "maximum chi2 per MFT clusters"};
115+
Configurable<bool> usePtCut{"usePtCut", false, "use track pT cut"};
104116
Configurable<double> minPt{"minPt", 0., "minimum pT of the MFT tracks"};
105117
Configurable<bool> requireCA{
106118
"requireCA", false, "Use Cellular Automaton track-finding algorithm"};
107119
Configurable<float> maxDCAxy{"maxDCAxy", 2.0f, "Cut on dcaXY"};
108120
} trackCuts;
109121

110122
struct : ConfigurableGroup {
111-
Configurable<float> maxZvtx{"maxZvtx", 10.0f, "Cut on z-vtx"};
123+
Configurable<float> maxZvtx{"maxZvtx", 10.0f, "maximum cut on z-vtx (cm)"};
124+
Configurable<float> minZvtx{"minZvtx", -10.0f, "minimum cut on z-vtx (cm)"};
112125
Configurable<bool> useZDiffCut{"useZDiffCut", false,
113126
"use Zvtx reco-mc diff. cut"};
114127
Configurable<float> maxZvtxDiff{
115128
"maxZvtxDiff", 1.0f,
116129
"max allowed Z vtx difference for reconstruced collisions (cm)"};
117130
Configurable<bool> requireIsGoodZvtxFT0VsPV{"requireIsGoodZvtxFT0VsPV", true, "require events with PV position along z consistent (within 1 cm) between PV reconstructed using tracks and PV using FT0 A-C time difference"};
118131
Configurable<bool> requireRejectSameBunchPileup{"requireRejectSameBunchPileup", true, "reject collisions in case of pileup with another collision in the same foundBC"};
119-
Configurable<bool> requireNoCollInTimeRangeStrict{"requireNoCollInTimeRangeStrict", true, " requireNoCollInTimeRangeStrict"};
120-
Configurable<bool> requireNoCollInRofStrict{"requireNoCollInRofStrict", true, "requireNoCollInRofStrict"};
132+
Configurable<bool> requireNoCollInTimeRangeStrict{"requireNoCollInTimeRangeStrict", false, " requireNoCollInTimeRangeStrict"};
133+
Configurable<bool> requireNoCollInRofStrict{"requireNoCollInRofStrict", false, "requireNoCollInRofStrict"};
121134
Configurable<bool> requireNoCollInRofStandard{"requireNoCollInRofStandard", false, "requireNoCollInRofStandard"};
122-
Configurable<bool> requireNoHighMultCollInPrevRof{"requireNoHighMultCollInPrevRof", true, "requireNoHighMultCollInPrevRof"};
135+
Configurable<bool> requireNoHighMultCollInPrevRof{"requireNoHighMultCollInPrevRof", false, "requireNoHighMultCollInPrevRof"};
123136
Configurable<bool> requireNoCollInTimeRangeStd{
124-
"requireNoCollInTimeRangeStd", false,
137+
"requireNoCollInTimeRangeStd", true,
125138
"reject collisions corrupted by the cannibalism, with other collisions "
126139
"within +/- 10 microseconds"};
127140
Configurable<bool> requireNoCollInTimeRangeNarrow{
@@ -234,7 +247,7 @@ struct DndetaMFTPbPb {
234247
"be enabled!");
235248
}
236249

237-
auto hev = registry.add<TH1>("hEvtSel", "hEvtSel", HistType::kTH1F,
250+
auto hev = registry.add<TH1>("Events/hEvtSel", "hEvtSel", HistType::kTH1F,
238251
{{14, -0.5f, +13.5f}});
239252
hev->GetXaxis()->SetBinLabel(1, "All collisions");
240253
hev->GetXaxis()->SetBinLabel(2, "Ev. sel.");
@@ -250,6 +263,14 @@ struct DndetaMFTPbPb {
250263
hev->GetXaxis()->SetBinLabel(12, "Below min occup.");
251264
hev->GetXaxis()->SetBinLabel(13, "Above max occup.");
252265

266+
registry.add("Tracks/hTrkSel", "Number of tracks; Cut; #Tracks Passed Cut", {HistType::kTH1D, {{nTrkSel, 0, nTrkSel}}});
267+
registry.get<TH1>(HIST("Tracks/hTrkSel"))->GetXaxis()->SetBinLabel(trkSelNCls + 1, "Ncl cut");
268+
registry.get<TH1>(HIST("Tracks/hTrkSel"))->GetXaxis()->SetBinLabel(trkSelChi2Ncl + 1, "#chi^{2}/Ncl cut");
269+
registry.get<TH1>(HIST("Tracks/hTrkSel"))->GetXaxis()->SetBinLabel(trkSelEta + 1, "#eta cut");
270+
registry.get<TH1>(HIST("Tracks/hTrkSel"))->GetXaxis()->SetBinLabel(trkSelPhiCut + 1, "#varphi cut");
271+
registry.get<TH1>(HIST("Tracks/hTrkSel"))->GetXaxis()->SetBinLabel(trkSelPt + 1, "#it{p}_{T} cut");
272+
registry.get<TH1>(HIST("Tracks/hTrkSel"))->GetXaxis()->SetBinLabel(trkSelCA + 1, "Tracking algorithm (CA)");
273+
253274
auto hBcSel = registry.add<TH1>("hBcSel", "hBcSel", HistType::kTH1F,
254275
{{3, -0.5f, +2.5f}});
255276
hBcSel->GetXaxis()->SetBinLabel(1, "Good BCs");
@@ -290,7 +311,7 @@ struct DndetaMFTPbPb {
290311
qaregistry.add(
291312
{"Tracks/NclustersEta",
292313
"; nClusters; #eta; occupancy",
293-
{HistType::kTHnSparseF, {{7, 4, 10}, etaAxis, occupancyAxis}}});
314+
{HistType::kTHnSparseF, {nclsAxis, etaAxis, occupancyAxis}}});
294315
qaregistry.add({"Tracks/NchSel",
295316
"; N_{ch}; occupancy",
296317
{HistType::kTH2F, {multAxis, occupancyAxis}}});
@@ -311,7 +332,7 @@ struct DndetaMFTPbPb {
311332
qaregistry.add(
312333
{"Tracks/NclustersEtaBest",
313334
"; nClusters; #eta; occupancy",
314-
{HistType::kTHnSparseF, {{7, 4, 10}, etaAxis, occupancyAxis}}});
335+
{HistType::kTHnSparseF, {nclsAxis, etaAxis, occupancyAxis}}});
315336
qaregistry.add(
316337
{"Tracks/DCAXYPt",
317338
"; p_{T} (GeV/c) ; DCA_{XY} (cm); occupancy",
@@ -389,7 +410,7 @@ struct DndetaMFTPbPb {
389410
qaregistry.add({"Tracks/Centrality/NclustersEta",
390411
"; nClusters; #eta; centrality; occupancy",
391412
{HistType::kTHnSparseF,
392-
{{7, 4, 10}, etaAxis, centralityAxis, occupancyAxis}}});
413+
{nclsAxis, etaAxis, centralityAxis, occupancyAxis}}});
393414

394415
if (doprocessDatawBestTracksCentFT0C ||
395416
doprocessDatawBestTracksCentFT0CVariant1 ||
@@ -412,7 +433,7 @@ struct DndetaMFTPbPb {
412433
{"Tracks/Centrality/NclustersEtaBest",
413434
"; nClusters; #eta; centrality; occupancy",
414435
{HistType::kTHnSparseF,
415-
{{7, 4, 10}, etaAxis, centralityAxis, occupancyAxis}}});
436+
{nclsAxis, etaAxis, centralityAxis, occupancyAxis}}});
416437
qaregistry.add({"Tracks/Centrality/TrackAmbDegree",
417438
"; N_{coll}^{comp}; centrality; occupancy",
418439
{HistType::kTHnSparseF,
@@ -744,20 +765,21 @@ struct DndetaMFTPbPb {
744765
template <typename T>
745766
bool isTrackSelected(const T& track)
746767
{
747-
if (track.eta() < trackCuts.minEta || track.eta() > trackCuts.maxEta)
768+
if (track.nClusters() < trackCuts.minNclusterMft) {
748769
return false;
770+
}
771+
registry.fill(HIST("Tracks/hTrkSel"), trkSelNCls);
749772
if (trackCuts.useChi2Cut) {
750773
float nclMft = std::max(2.0f * track.nClusters() - 5.0f, 1.0f);
751774
float mftChi2NCl = track.chi2() / nclMft;
752775
if (mftChi2NCl > trackCuts.maxChi2NCl)
753776
return false;
754777
}
755-
if (trackCuts.requireCA && !track.isCA())
756-
return false;
757-
if (track.nClusters() < trackCuts.minNclusterMft)
758-
return false;
759-
if (track.pt() < trackCuts.minPt)
778+
registry.fill(HIST("Tracks/hTrkSel"), trkSelChi2Ncl);
779+
if (track.eta() < trackCuts.minEta || track.eta() > trackCuts.maxEta) {
760780
return false;
781+
}
782+
registry.fill(HIST("Tracks/hTrkSel"), trkSelEta);
761783
if (trackCuts.usephiCut) {
762784
float phi = track.phi();
763785
o2::math_utils::bringTo02Pi(phi);
@@ -771,6 +793,15 @@ struct DndetaMFTPbPb {
771793
(phi < ((PIHalf - 0.1) * PI) + trackCuts.phiCut)))
772794
return false;
773795
}
796+
registry.fill(HIST("Tracks/hTrkSel"), trkSelPhiCut);
797+
if (trackCuts.usePtCut && track.pt() < trackCuts.minPt) {
798+
return false;
799+
}
800+
registry.fill(HIST("Tracks/hTrkSel"), trkSelPt);
801+
if (trackCuts.requireCA && !track.isCA()) {
802+
return false;
803+
}
804+
registry.fill(HIST("Tracks/hTrkSel"), trkSelCA);
774805
return true;
775806
}
776807

@@ -938,85 +969,85 @@ struct DndetaMFTPbPb {
938969
bool isGoodEvent(C const& collision)
939970
{
940971
if constexpr (fillHis) {
941-
registry.fill(HIST("hEvtSel"), 0);
972+
registry.fill(HIST("Events/hEvtSel"), 0);
942973
}
943974
if (!collision.sel8()) {
944975
return false;
945976
}
946977
if constexpr (fillHis) {
947-
registry.fill(HIST("hEvtSel"), 1);
978+
registry.fill(HIST("Events/hEvtSel"), 1);
948979
}
949980
if (eventCuts.requireIsGoodZvtxFT0VsPV && !collision.selection_bit(aod::evsel::kIsGoodZvtxFT0vsPV)) {
950981
return false;
951982
}
952983
if constexpr (fillHis) {
953-
registry.fill(HIST("hEvtSel"), 2);
984+
registry.fill(HIST("Events/hEvtSel"), 2);
954985
}
955986
if (eventCuts.requireRejectSameBunchPileup && !collision.selection_bit(aod::evsel::kNoSameBunchPileup)) {
956987
return false;
957988
}
958989
if constexpr (fillHis) {
959-
registry.fill(HIST("hEvtSel"), 3);
990+
registry.fill(HIST("Events/hEvtSel"), 3);
960991
}
961-
if (std::abs(collision.posZ()) >= eventCuts.maxZvtx) {
992+
if (collision.posZ() <= eventCuts.minZvtx || collision.posZ() >= eventCuts.maxZvtx) {
962993
return false;
963994
}
964995
if constexpr (fillHis) {
965-
registry.fill(HIST("hEvtSel"), 4);
996+
registry.fill(HIST("Events/hEvtSel"), 4);
966997
}
967998
if (eventCuts.requireNoCollInTimeRangeStd &&
968999
!collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
9691000
return false;
9701001
}
9711002
if constexpr (fillHis) {
972-
registry.fill(HIST("hEvtSel"), 5);
1003+
registry.fill(HIST("Events/hEvtSel"), 5);
9731004
}
9741005
if (eventCuts.requireNoCollInTimeRangeNarrow &&
9751006
!collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeNarrow)) {
9761007
return false;
9771008
}
9781009
if constexpr (fillHis) {
979-
registry.fill(HIST("hEvtSel"), 6);
1010+
registry.fill(HIST("Events/hEvtSel"), 6);
9801011
}
9811012
if (eventCuts.requireNoCollInTimeRangeStrict && !collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStrict)) {
9821013
return false;
9831014
}
9841015
if constexpr (fillHis) {
985-
registry.fill(HIST("hEvtSel"), 7);
1016+
registry.fill(HIST("Events/hEvtSel"), 7);
9861017
}
9871018
if (eventCuts.requireNoCollInRofStrict && !collision.selection_bit(o2::aod::evsel::kNoCollInRofStrict)) {
9881019
return false;
9891020
}
9901021
if constexpr (fillHis) {
991-
registry.fill(HIST("hEvtSel"), 8);
1022+
registry.fill(HIST("Events/hEvtSel"), 8);
9921023
}
9931024
if (eventCuts.requireNoCollInRofStandard && !collision.selection_bit(o2::aod::evsel::kNoCollInRofStandard)) {
9941025
return false;
9951026
}
9961027
if constexpr (fillHis) {
997-
registry.fill(HIST("hEvtSel"), 9);
1028+
registry.fill(HIST("Events/hEvtSel"), 9);
9981029
}
9991030
if (eventCuts.requireNoHighMultCollInPrevRof && !collision.selection_bit(o2::aod::evsel::kNoHighMultCollInPrevRof)) {
10001031
return false;
10011032
}
10021033
if constexpr (fillHis) {
1003-
registry.fill(HIST("hEvtSel"), 10);
1034+
registry.fill(HIST("Events/hEvtSel"), 10);
10041035
}
10051036
if (eventCuts.minOccupancy >= 0 &&
10061037
getOccupancy(collision, eventCuts.occupancyEstimator) <
10071038
eventCuts.minOccupancy) {
10081039
return false;
10091040
}
10101041
if constexpr (fillHis) {
1011-
registry.fill(HIST("hEvtSel"), 11);
1042+
registry.fill(HIST("Events/hEvtSel"), 11);
10121043
}
10131044
if (eventCuts.maxOccupancy >= 0 &&
10141045
getOccupancy(collision, eventCuts.occupancyEstimator) >
10151046
eventCuts.maxOccupancy) {
10161047
return false;
10171048
}
10181049
if constexpr (fillHis) {
1019-
registry.fill(HIST("hEvtSel"), 12);
1050+
registry.fill(HIST("Events/hEvtSel"), 12);
10201051
}
10211052
return true;
10221053
}

0 commit comments

Comments
 (0)