Skip to content

Commit 5ee7132

Browse files
authored
Updates related to secondary corrections
1 parent 716ee17 commit 5ee7132

File tree

1 file changed

+104
-78
lines changed

1 file changed

+104
-78
lines changed

PWGLF/Tasks/GlobalEventProperties/dndeta-mft-pp.cxx

Lines changed: 104 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -49,29 +49,29 @@ using namespace o2::framework::expressions;
4949
using namespace o2::aod::track;
5050

5151
AxisSpec PtAxis = {1001, -0.005, 10.005};
52-
AxisSpec DeltaZAxis = {61, -6.1, 6.1};
53-
AxisSpec ZAxis = {301, -30.1, 30.1};
54-
AxisSpec PhiAxis = {629, 0, o2::constants::math::TwoPI, "Rad", "phi axis"};
55-
// AxisSpec EtaAxis = {18, -4.6, -1.};
56-
AxisSpec DCAxyAxis = {5000, -1, 500};
57-
AxisSpec DCAzAxis = {5000, -251, 250};
58-
AxisSpec CentAxis = {{0, 10, 20, 30, 40, 50, 60, 70, 80, 100}};
59-
60-
static constexpr TrackSelectionFlags::flagtype trackSelectionITS =
52+
AxisSpec DeltaZAxis = {61, -6.1, 6.1};
53+
AxisSpec ZAxis = {301, -30.1, 30.1};
54+
AxisSpec PhiAxis = {629, 0, o2::constants::math::TwoPI, "Rad", "phi axis"};
55+
// AxisSpec EtaAxis = {18, -4.6, -1.};
56+
AxisSpec DCAxyAxis = {5000, -1, 500};
57+
AxisSpec DCAzAxis = {5000, -251, 250};
58+
AxisSpec CentAxis = {{0, 10, 20, 30, 40, 50, 60, 70, 80, 100}};
59+
60+
static constexpr TrackSelectionFlags::flagtype trackSelectionITS =
6161
TrackSelectionFlags::kITSNCls | TrackSelectionFlags::kITSChi2NDF |
6262
TrackSelectionFlags::kITSHits;
6363

64-
static constexpr TrackSelectionFlags::flagtype trackSelectionTPC =
64+
static constexpr TrackSelectionFlags::flagtype trackSelectionTPC =
6565
TrackSelectionFlags::kTPCNCls |
6666
TrackSelectionFlags::kTPCCrossedRowsOverNCls |
6767
TrackSelectionFlags::kTPCChi2NDF;
6868

69-
static constexpr TrackSelectionFlags::flagtype trackSelectionDCA =
69+
static constexpr TrackSelectionFlags::flagtype trackSelectionDCA =
7070
TrackSelectionFlags::kDCAz | TrackSelectionFlags::kDCAxy;
7171

72-
using MFTTracksLabeled = soa::Join<o2::aod::MFTTracks, aod::McMFTTrackLabels>;
72+
using MFTTracksLabeled = soa::Join<o2::aod::MFTTracks, aod::McMFTTrackLabels>;
7373

74-
struct PseudorapidityDensityMFT {
74+
struct PseudorapidityDensityMFT {
7575
SliceCache cache;
7676
Preslice<aod::MFTTracks> perCol = o2::aod::fwdtrack::collisionId;
7777
Preslice<aod::McParticles> perMcCol = aod::mcparticle::mcCollisionId;
@@ -80,7 +80,7 @@ struct PseudorapidityDensityMFT {
8080
Service<o2::framework::O2DatabasePDG> pdg;
8181

8282
Configurable<float> estimatorEta{"estimatorEta", 1.0,
83-
"eta range for INEL>0 sample definition"};
83+
"eta range for INEL>0 sample definition"};
8484

8585
Configurable<bool> useEvSel{"useEvSel", true, "use event selection"};
8686
Configurable<bool> disableITSROFCut{"disableITSROFCut", false, "Disable ITS ROF cut for event selection"};
@@ -99,19 +99,19 @@ struct PseudorapidityDensityMFT {
9999
Configurable<float> cfgPhiCut{"cfgPhiCut", 0.1f,
100100
"Cut on azimuthal angle of MFT tracks"};
101101
Configurable<float> cfgPhiCut1{"cfgPhiCut1", 0.0f,
102-
"low Cut on azimuthal angle of MFT tracks"};
102+
"low Cut on azimuthal angle of MFT tracks"};
103103
Configurable<float> cfgPhiCut2{"cfgPhiCut2", 6.3f,
104-
"high Cut on azimuthal angle of MFT tracks"};
104+
"high Cut on azimuthal angle of MFT tracks"};
105105
Configurable<float> cfgVzCut1{"cfgVzCut1", -30.0f,
106106
"Cut1 on vertex position of MFT tracks"};
107107
Configurable<float> cfgVzCut2{"cfgVzCut2", 30.0f,
108108
"Cut2 on vertex position of MFT tracks"};
109109
Configurable<float> cfgnCluster{"cfgnCluster", 5.0f,
110110
"Cut on no of clusters per MFT track"};
111111
Configurable<float> cfgnEta1{"cfgnEta1", -4.5f,
112-
"Cut on eta1"};
112+
"Cut on eta1"};
113113
Configurable<float> cfgnEta2{"cfgnEta2", -1.0f,
114-
"Cut on eta1"};
114+
"Cut on eta1"};
115115
Configurable<float> cfgChi2NDFMax{"cfgChi2NDFMax", 2000.0f, "Max allowed chi2/NDF for MFT tracks"};
116116
Configurable<float> maxDCAxy{"maxDCAxy", 2.0f, "Cut on dcaXY"};
117117
Configurable<float> maxDCAz{"maxDCAz", 2.0f, "Cut on dcaZ"};
@@ -120,27 +120,43 @@ struct PseudorapidityDensityMFT {
120120
"registry",
121121
{
122122
{"TracksEtaZvtx",
123-
"; #eta; #it{z}_{vtx} (cm); tracks",
124-
{HistType::kTH2F, {EtaAxis, ZAxis}}}, //
123+
"; #eta; #it{z}_{vtx} (cm); tracks",
124+
{HistType::kTH2F, {EtaAxis, ZAxis}}}, //
125125
{"Tracks/EtaZvtx_gt0",
126-
"; #eta; #it{z}_{vtx} (cm); tracks",
127-
{HistType::kTH2F, {EtaAxis, ZAxis}}}, //
126+
"; #eta; #it{z}_{vtx} (cm); tracks",
127+
{HistType::kTH2F, {EtaAxis, ZAxis}}}, //
128128
{"TracksPhiEta",
129-
"; #varphi; #eta; tracks",
130-
{HistType::kTH2F, {PhiAxis, EtaAxis}}}, //
129+
"; #varphi; #eta; tracks",
130+
{HistType::kTH2F, {PhiAxis, EtaAxis}}}, //
131131
{"TracksPhiZvtx",
132-
"; #varphi; #it{z}_{vtx} (cm); tracks",
133-
{HistType::kTH2F, {PhiAxis, ZAxis}}}, //
132+
"; #varphi; #it{z}_{vtx} (cm); tracks",
133+
{HistType::kTH2F, {PhiAxis, ZAxis}}}, //
134134
{"TracksPtEta",
135-
" ; p_{T} (GeV/c); #eta",
136-
{HistType::kTH2F, {PtAxis, EtaAxis}}}, //
135+
" ; p_{T} (GeV/c); #eta",
136+
{HistType::kTH2F, {PtAxis, EtaAxis}}}, //
137137
{"EventSelection",
138-
";status;events",
139-
{HistType::kTH1F, {{15, 0.5, 15.5}}}},
138+
";status;events",
139+
{HistType::kTH1F, {{15, 0.5, 15.5}}}},
140140
{"EventCounts",
141-
";status;events",
142-
{HistType::kTH1F, {{2, 0.5, 2.5}}}},
141+
";status;events",
142+
{HistType::kTH1F, {{2, 0.5, 2.5}}}},
143143
{"Tracks/Control/TrackCount", ";status;Track counts", {HistType::kTH1F, {{15, 0.5, 15.5}}}}, // added
144+
// Purity-related histograms
145+
{"Purity/SelectedAfterDCAxy/All",
146+
";bin;counts",
147+
{HistType::kTH1F, {{1, 0.5, 1.5}}}},
148+
{"Purity/SelectedAfterDCAxy/AllEta",
149+
";#eta;counts",
150+
{HistType::kTH1F, {EtaAxis}}},
151+
{"Purity/Gen/PrimaryEta",
152+
";#eta;primaries",
153+
{HistType::kTH1F, {EtaAxis}}},
154+
{"Purity/Gen/All",
155+
";bin;counts",
156+
{HistType::kTH1F, {{1, 0.5, 1.5}}}},
157+
{"Purity/Gen/AllEta",
158+
";#eta;counts",
159+
{HistType::kTH1F, {EtaAxis}}}
144160
}};
145161

146162
void init(InitContext&)
@@ -151,9 +167,9 @@ struct PseudorapidityDensityMFT {
151167
static_cast<int>(doprocessCountingCentrality) >
152168
1) {
153169
LOGP(fatal,
154-
"Exactly one process function between processMult, "
155-
"processMultReassoc, processMultReassoc3d and processCountingCentrality should be "
156-
"enabled!");
170+
"Exactly one process function between processMult, "
171+
"processMultReassoc, processMultReassoc3d and processCountingCentrality should be "
172+
"enabled!");
157173
}
158174
AxisSpec MultAxis = {multBinning, "N_{trk}"};
159175
auto hstat = registry.get<TH1>(HIST("EventSelection"));
@@ -463,7 +479,7 @@ struct PseudorapidityDensityMFT {
463479
x->SetBinLabel(2, "Selected");
464480

465481
registry.add("Events/Centrality/CentPercentileMCGen",
466-
"CentPercentileMCGen", kTH1D, {CentAxis}, false);
482+
"CentPercentileMCGen", kTH1D, {CentAxis}, false);
467483
registry.add({"Events/Centrality/NtrkZvtxGen",
468484
"; N_{trk}; Z_{vtx} (cm); centrality",
469485
{HistType::kTH3F, {MultAxis, ZAxis, CentAxis}}});
@@ -491,7 +507,7 @@ struct PseudorapidityDensityMFT {
491507
for (const auto& bc : bcs) {
492508
if (!useEvSel ||
493509
(useEvSel && ((bc.selection_bit(aod::evsel::kIsBBT0A) &&
494-
bc.selection_bit(aod::evsel::kIsBBT0C)) != 0))) {
510+
bc.selection_bit(aod::evsel::kIsBBT0C)) != 0))) {
495511
registry.fill(HIST("EventSelection"), 8); // added 5->12
496512
cols.clear();
497513
for (const auto& collision : collisions) {
@@ -515,7 +531,7 @@ struct PseudorapidityDensityMFT {
515531
}
516532

517533
PROCESS_SWITCH(PseudorapidityDensityMFT, processTagging,
518-
"Collect event sample stats", true);
534+
"Collect event sample stats", true);
519535

520536
Partition<aod::MFTTracks> sample =
521537
(aod::fwdtrack::eta < -2.8f) && (aod::fwdtrack::eta > -3.2f);
@@ -531,10 +547,10 @@ struct PseudorapidityDensityMFT {
531547
expressions::Filter trackSelectionCentral =
532548
((aod::track::trackCutFlag & trackSelectionITS) == trackSelectionITS) &&
533549
ifnode((aod::track::v001::detectorMap & (uint8_t)o2::aod::track::TPC) ==
534-
(uint8_t)o2::aod::track::TPC,
535-
(aod::track::trackCutFlag & trackSelectionTPC) ==
536-
trackSelectionTPC,
537-
true) &&
550+
(uint8_t)o2::aod::track::TPC,
551+
(aod::track::trackCutFlag & trackSelectionTPC) ==
552+
trackSelectionTPC,
553+
true) &&
538554
((aod::track::trackCutFlag & trackSelectionDCA) == trackSelectionDCA) &&
539555
(nabs(aod::track::eta) < estimatorEta);
540556

@@ -543,8 +559,8 @@ struct PseudorapidityDensityMFT {
543559
aod::TracksDCA>>; // central tracks for INEL>0
544560

545561
void processMult(CollwEv::iterator const& collision,
546-
aod::MFTTracks const& tracks,
547-
FiCentralTracks const& midtracks, aod::Tracks const&)
562+
aod::MFTTracks const& tracks,
563+
FiCentralTracks const& midtracks, aod::Tracks const&)
548564
{
549565

550566
registry.fill(HIST("EventSelection"), 1.);
@@ -574,7 +590,7 @@ struct PseudorapidityDensityMFT {
574590
((phi > o2::constants::math::PI - cfgPhiCut) && (phi < o2::constants::math::PI + cfgPhiCut)) ||
575591
(phi > o2::constants::math::TwoPI - cfgPhiCut) ||
576592
((phi > ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) - cfgPhiCut) &&
577-
(phi < ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) + cfgPhiCut)))
593+
(phi < ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) + cfgPhiCut)))
578594
continue;
579595
}
580596

@@ -597,7 +613,7 @@ struct PseudorapidityDensityMFT {
597613
}
598614

599615
PROCESS_SWITCH(PseudorapidityDensityMFT, processMult,
600-
"Process reco or data info", true);
616+
"Process reco or data info", true);
601617
// Common implementation for both BestCollisionsFwd and BestCollisionsFwd3d
602618
template <typename RetracksT>
603619
void processMultReassocCommon(CollwEv::iterator const& collision,
@@ -709,23 +725,26 @@ struct PseudorapidityDensityMFT {
709725
float dcaxy_cut = retrack.bestDCAXY();
710726
o2::math_utils::bringTo02Pi(phi);
711727
// Declare dcaz_cut only if needed below.
712-
if ((cfgnEta1 < track.eta()) && (track.eta() < cfgnEta2) && track.nClusters() >= cfgnCluster && chi2ndf < cfgChi2NDFMax && (phi > cfgPhiCut1 && phi < cfgPhiCut2)) {
713-
if (usePhiCut) {
714-
if ((phi <= 0.02) || ((phi >= 3.10) && (phi <= 3.23)) || (phi >= 6.21))
715-
continue;
716-
}
717-
if (useDCAxyCut) {
718-
if (dcaxy_cut > maxDCAxy)
728+
if ((cfgnEta1 < track.eta()) && (track.eta() < cfgnEta2) && track.nClusters() >= cfgnCluster && chi2ndf < cfgChi2NDFMax && (phi > cfgPhiCut1 && phi < cfgPhiCut2)) {
729+
if (usePhiCut) {
730+
if ((phi <= 0.02) || ((phi >= 3.10) && (phi <= 3.23)) || (phi >= 6.21))
731+
continue;
732+
}
733+
if (useDCAxyCut) {
734+
if (dcaxy_cut > maxDCAxy)
735+
continue;
736+
}
737+
if constexpr (std::is_same_v<RetracksT, soa::SmallGroups<aod::BestCollisionsFwd3d>>) {
738+
float dcaz_cut = retrack.bestDCAZ();
739+
if (useDCAzCut) {
740+
if (dcaz_cut > maxDCAz)
719741
continue;
720742
}
721-
if constexpr (std::is_same_v<RetracksT, soa::SmallGroups<aod::BestCollisionsFwd3d>>) {
722-
float dcaz_cut = retrack.bestDCAZ();
723-
if (useDCAzCut) {
724-
if (dcaz_cut > maxDCAz)
725-
continue;
726-
}
727-
}
728-
registry.fill(HIST("TracksEtaZvtx"), track.eta(), z);
743+
}
744+
// Purity denominator: all tracks that pass the DCA selection and other quality cuts
745+
registry.fill(HIST("Purity/SelectedAfterDCAxy/All"), 1.);
746+
registry.fill(HIST("Purity/SelectedAfterDCAxy/AllEta"), track.eta());
747+
registry.fill(HIST("TracksEtaZvtx"), track.eta(), z);
729748
if (midtracks.size() > 0 && retrack.ambDegree() > 0) {
730749
registry.fill(HIST("Tracks/EtaZvtx_gt0"), track.eta(), z);
731750
registry.fill(HIST("Tracks/2Danalysis/EtaZvtx_sel8_inelfwdgt0"), track.eta(), z);
@@ -879,15 +898,15 @@ struct PseudorapidityDensityMFT {
879898
processMultReassocCommon(collision, mft, retracks, midtracks, trk);
880899
}
881900
PROCESS_SWITCH(PseudorapidityDensityMFT, processMultReassoc,
882-
"Process reco or data info", false);
901+
"Process reco or data info", false);
883902

884903
PROCESS_SWITCH(PseudorapidityDensityMFT, processMultReassoc3d,
885-
"Process reco or data info (3d)", false);
904+
"Process reco or data info (3d)", false);
886905

887906
using ExColsCent = soa::Join<aod::Collisions, aod::CentFT0Cs, aod::EvSels>;
888907

889908
void processCountingCentrality(ExColsCent::iterator const& collision,
890-
aod::MFTTracks const& tracks)
909+
aod::MFTTracks const& tracks)
891910
{
892911
auto c = collision.centFT0C();
893912
registry.fill(HIST("Events/Centrality/Selection"), 1., c);
@@ -911,7 +930,7 @@ struct PseudorapidityDensityMFT {
911930
((phi > o2::constants::math::PI - cfgPhiCut) && (phi < o2::constants::math::PI + cfgPhiCut)) ||
912931
(phi > o2::constants::math::TwoPI - cfgPhiCut) ||
913932
((phi > ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) - cfgPhiCut) &&
914-
(phi < ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) + cfgPhiCut)))
933+
(phi < ((o2::constants::math::PIHalf - 0.1) * o2::constants::math::PI) + cfgPhiCut)))
915934
continue;
916935
}
917936

@@ -926,12 +945,12 @@ struct PseudorapidityDensityMFT {
926945
}
927946

928947
PROCESS_SWITCH(PseudorapidityDensityMFT, processCountingCentrality,
929-
"Count tracks in centrality bins", false);
948+
"Count tracks in centrality bins", false);
930949

931950
using Particles = soa::Filtered<aod::McParticles>;
932951
expressions::Filter primaries =
933952
(aod::mcparticle::flags &
934-
(uint8_t)o2::aod::mcparticle::enums::PhysicalPrimary) ==
953+
(uint8_t)o2::aod::mcparticle::enums::PhysicalPrimary) ==
935954
(uint8_t)o2::aod::mcparticle::enums::PhysicalPrimary;
936955
Partition<Particles> mcSample = nabs(aod::mcparticle::eta) < 1.1f;
937956
Partition<Particles> mcSampleCentral =
@@ -940,7 +959,7 @@ struct PseudorapidityDensityMFT {
940959
void processGen(
941960
aod::McCollisions::iterator const& mcCollision,
942961
o2::soa::SmallGroups<soa::Join<aod::Collisions, aod::EvSels,
943-
aod::McCollisionLabels>> const& collisions,
962+
aod::McCollisionLabels>> const& collisions,
944963
Particles const& particles, aod::MFTTracks const& /*tracks*/,
945964
FiCentralTracks const& midtracks)
946965
{
@@ -990,7 +1009,7 @@ struct PseudorapidityDensityMFT {
9901009
int moreThanOne = 0;
9911010

9921011
LOGP(debug, "MC col {} has {} reco cols", mcCollision.globalIndex(),
993-
collisions.size());
1012+
collisions.size());
9941013
for (const auto& collision : collisions) {
9951014
registry.fill(HIST("EventEfficiency"), 3.);
9961015
if (!disableITSROFCut && !collision.selection_bit(aod::evsel::kNoITSROFrameBorder)) {
@@ -1049,6 +1068,13 @@ struct PseudorapidityDensityMFT {
10491068
continue;
10501069
}
10511070
if (cfgnEta1 < particle.eta() && particle.eta() < cfgnEta2 && (phi > cfgPhiCut1 && phi < cfgPhiCut2)) {
1071+
// Purity numerator reference at generator level: physical primaries in the same eta window
1072+
if (particle.isPhysicalPrimary()) {
1073+
registry.fill(HIST("Purity/Gen/PrimaryEta"), particle.eta());
1074+
// Truth-side total counters for primaries in acceptance (for purity calculations)
1075+
registry.fill(HIST("Purity/Gen/All"), 1.);
1076+
registry.fill(HIST("Purity/Gen/AllEta"), particle.eta());
1077+
}
10521078
registry.fill(HIST("TracksEtaZvtxGen_t"), particle.eta(),
10531079
mcCollision.posZ());
10541080
if (perCollisionMCSampleCentral.size() > 0) {
@@ -1077,11 +1103,11 @@ struct PseudorapidityDensityMFT {
10771103
}
10781104

10791105
PROCESS_SWITCH(PseudorapidityDensityMFT, processGen,
1080-
"Process generator-level info", false);
1106+
"Process generator-level info", false);
10811107

10821108
using ExColsGenCent =
10831109
soa::SmallGroups<soa::Join<aod::McCollisionLabels, aod::Collisions,
1084-
aod::CentFT0Cs, aod::EvSels>>;
1110+
aod::CentFT0Cs, aod::EvSels>>;
10851111

10861112
void processGenCent(aod::McCollisions::iterator const& mcCollision,
10871113
ExColsGenCent const& collisions,
@@ -1090,7 +1116,7 @@ struct PseudorapidityDensityMFT {
10901116
{
10911117

10921118
LOGP(debug, "MC col {} has {} reco cols", mcCollision.globalIndex(),
1093-
collisions.size());
1119+
collisions.size());
10941120

10951121
float c_gen = -1;
10961122
bool atLeastOne = false;
@@ -1169,7 +1195,7 @@ struct PseudorapidityDensityMFT {
11691195
}
11701196

11711197
PROCESS_SWITCH(PseudorapidityDensityMFT, processGenCent,
1172-
"Process generator-level info in centrality bins", false);
1198+
"Process generator-level info in centrality bins", false);
11731199

11741200
void processGenPt(
11751201
soa::Join<aod::Collisions, aod::EvSels>::iterator const& collision,
@@ -1190,10 +1216,10 @@ struct PseudorapidityDensityMFT {
11901216
}
11911217

11921218
PROCESS_SWITCH(PseudorapidityDensityMFT, processGenPt,
1193-
"Process particle-level info of pt", false);
1194-
};
1219+
"Process particle-level info of pt", false);
1220+
};
11951221

1196-
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
1197-
{
1222+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
1223+
{
11981224
return WorkflowSpec{adaptAnalysisTask<PseudorapidityDensityMFT>(cfgc)};
1199-
}
1225+
}

0 commit comments

Comments
 (0)