Skip to content

Commit ee9ae23

Browse files
authored
[PWGLF] Add event selection and new centrality estimator (#9617)
1 parent 5715930 commit ee9ae23

File tree

1 file changed

+73
-42
lines changed

1 file changed

+73
-42
lines changed

PWGMM/Mult/Tasks/heavy-ion-mult.cxx

Lines changed: 73 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,12 @@ using namespace o2::framework::expressions;
5353
using namespace o2::aod::track;
5454
using namespace o2::aod::evsel;
5555

56-
using CollisionDataTable = soa::Join<aod::Collisions, aod::CentFT0Cs, aod::EvSels, aod::Mults>;
56+
using CollisionDataTable = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs, aod::CentFT0CVariant1s, aod::CentFT0Ms>;
5757
using TrackDataTable = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::TrackSelection>;
5858
using FilTrackDataTable = soa::Filtered<TrackDataTable>;
5959
using CollisionMCTrueTable = aod::McCollisions;
6060
using TrackMCTrueTable = aod::McParticles;
61-
using CollisionMCRecTable = soa::SmallGroups<soa::Join<aod::McCollisionLabels, aod::Collisions, aod::CentFT0Cs, aod::EvSels, aod::Mults>>;
61+
using CollisionMCRecTable = soa::SmallGroups<soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs, aod::CentFT0CVariant1s, aod::CentFT0Ms>>;
6262
using TrackMCRecTable = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::McTrackLabels, aod::TrackSelection>;
6363
using FilTrackMCRecTable = soa::Filtered<TrackMCRecTable>;
6464
using v0trackcandidates = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::TrackSelection, aod::pidTPCFullPi, aod::pidTPCFullPr>;
@@ -104,7 +104,7 @@ static constexpr TrackSelectionFlags::flagtype trackSelectionDCA =
104104
static constexpr TrackSelectionFlags::flagtype trackSelectionDCAXYonly =
105105
TrackSelectionFlags::kDCAxy;
106106

107-
AxisSpec axisEvent{10, 0.5, 10.5, "#Event", "EventAxis"};
107+
AxisSpec axisEvent{12, 0.5, 12.5, "#Event", "EventAxis"};
108108
AxisSpec axisVtxZ{40, -20, 20, "Vertex Z", "VzAxis"};
109109
AxisSpec axisEta{40, -2, 2, "#eta", "EtaAxis"};
110110
AxisSpec axisPhi{{0, M_PI / 4, M_PI / 2, M_PI * 3. / 4, M_PI, M_PI * 5. / 4, M_PI * 3. / 2, M_PI * 7. / 4, 2 * M_PI}, "#phi", "PhiAxis"};
@@ -152,7 +152,12 @@ struct HeavyIonMultiplicity {
152152
Configurable<float> NPVtracksCut{"NPVtracksCut", 1.0f, "Apply extra NPVtracks cut"};
153153
Configurable<float> FT0CCut{"FT0CCut", 1.0f, "Apply extra FT0C cut"};
154154
Configurable<bool> IsApplyNoCollInTimeRangeStandard{"IsApplyNoCollInTimeRangeStandard", true, "Enable NoCollInTimeRangeStandard cut"};
155+
Configurable<bool> IsApplyNoCollInRofStandard{"IsApplyNoCollInRofStandard", true, "Enable NoCollInRofStandard cut"};
156+
Configurable<bool> IsApplyNoHighMultCollInPrevRof{"IsApplyNoHighMultCollInPrevRof", true, "Enable NoHighMultCollInPrevRof cut"};
155157
Configurable<bool> IsApplyFT0CbasedOccupancy{"IsApplyFT0CbasedOccupancy", true, "Enable FT0CbasedOccupancy cut"};
158+
Configurable<bool> IsApplyCentFT0C{"IsApplyCentFT0C", false, "Centrality based on FT0C"};
159+
Configurable<bool> IsApplyCentFT0CVariant1{"IsApplyCentFT0Cvariant1", false, "Centrality based on FT0C variant1"};
160+
Configurable<bool> IsApplyCentFT0M{"IsApplyCentFT0M", false, "Centrality based on FT0A + FT0C"};
156161

157162
void init(InitContext const&)
158163
{
@@ -180,6 +185,8 @@ struct HeavyIonMultiplicity {
180185
x->SetBinLabel(8, "Centrality");
181186
x->SetBinLabel(9, "ApplyExtraCorrCut");
182187
x->SetBinLabel(10, "ApplyNoCollInTimeRangeStandard");
188+
x->SetBinLabel(11, "ApplyNoCollInRofStandard");
189+
x->SetBinLabel(12, "ApplyNoHighMultCollInPrevRof");
183190

184191
if (doprocessData) {
185192
histos.add("CentPercentileHist", "CentPercentileHist", kTH1D, {axisCent}, false);
@@ -321,9 +328,33 @@ struct HeavyIonMultiplicity {
321328
return false;
322329
}
323330
histos.fill(HIST("EventHist"), 10);
331+
332+
if (IsApplyNoCollInRofStandard && !col.selection_bit(o2::aod::evsel::kNoCollInRofStandard)) {
333+
return false;
334+
}
335+
histos.fill(HIST("EventHist"), 11);
336+
337+
if (IsApplyNoHighMultCollInPrevRof && !col.selection_bit(o2::aod::evsel::kNoHighMultCollInPrevRof)) {
338+
return false;
339+
}
340+
histos.fill(HIST("EventHist"), 12);
324341
return true;
325342
}
326-
343+
template <typename CheckColCent>
344+
float SelectColCentrality(CheckColCent const& col)
345+
{
346+
auto cent = -1;
347+
if (IsApplyCentFT0C) {
348+
cent = col.centFT0C();
349+
}
350+
if (IsApplyCentFT0CVariant1) {
351+
cent = col.centFT0CVariant1();
352+
}
353+
if (IsApplyCentFT0M) {
354+
cent = col.centFT0M();
355+
}
356+
return cent;
357+
}
327358
expressions::Filter trackSelectionProperMixed = ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::ITS) &&
328359
ncheckbit(aod::track::trackCutFlag, trackSelectionITS) &&
329360
ifnode(ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::TPC),
@@ -337,9 +368,9 @@ struct HeavyIonMultiplicity {
337368
return;
338369
}
339370
histos.fill(HIST("VtxZHist"), collision.posZ());
340-
histos.fill(HIST("CentPercentileHist"), collision.centFT0C());
371+
histos.fill(HIST("CentPercentileHist"), SelectColCentrality(collision));
341372
auto OccupancyValue = IsApplyFT0CbasedOccupancy ? collision.ft0cOccupancyInTimeRange() : collision.trackOccupancyInTimeRange();
342-
histos.fill(HIST("hdatazvtxcent"), collision.posZ(), collision.centFT0C(), OccupancyValue);
373+
histos.fill(HIST("hdatazvtxcent"), collision.posZ(), SelectColCentrality(collision), OccupancyValue);
343374

344375
auto NchTracks = 0;
345376
for (auto& track : tracks) {
@@ -348,14 +379,14 @@ struct HeavyIonMultiplicity {
348379
}
349380
histos.fill(HIST("PhiVsEtaHist"), track.phi(), track.eta());
350381
NchTracks++;
351-
histos.fill(HIST("hdatadndeta"), collision.posZ(), collision.centFT0C(), OccupancyValue, track.eta(), track.phi(), kGlobalplusITS);
382+
histos.fill(HIST("hdatadndeta"), collision.posZ(), SelectColCentrality(collision), OccupancyValue, track.eta(), track.phi(), kGlobalplusITS);
352383
if (track.hasTPC()) {
353-
histos.fill(HIST("hdatadndeta"), collision.posZ(), collision.centFT0C(), OccupancyValue, track.eta(), track.phi(), kGlobalonly);
384+
histos.fill(HIST("hdatadndeta"), collision.posZ(), SelectColCentrality(collision), OccupancyValue, track.eta(), track.phi(), kGlobalonly);
354385
} else {
355-
histos.fill(HIST("hdatadndeta"), collision.posZ(), collision.centFT0C(), OccupancyValue, track.eta(), track.phi(), kITSonly);
386+
histos.fill(HIST("hdatadndeta"), collision.posZ(), SelectColCentrality(collision), OccupancyValue, track.eta(), track.phi(), kITSonly);
356387
}
357388
}
358-
histos.fill(HIST("hdatamult"), collision.posZ(), NchTracks, collision.centFT0C());
389+
histos.fill(HIST("hdatamult"), collision.posZ(), NchTracks, SelectColCentrality(collision));
359390
}
360391
PROCESS_SWITCH(HeavyIonMultiplicity, processData, "process data CentFT0C", false);
361392

@@ -391,30 +422,30 @@ struct HeavyIonMultiplicity {
391422
continue;
392423
}
393424
histos.fill(HIST("VtxZHist"), RecCollision.posZ());
394-
histos.fill(HIST("CentPercentileMCRecHist"), RecCollision.centFT0C());
425+
histos.fill(HIST("CentPercentileMCRecHist"), SelectColCentrality(RecCollision));
395426
auto OccupancyValue = IsApplyFT0CbasedOccupancy ? RecCollision.ft0cOccupancyInTimeRange() : RecCollision.trackOccupancyInTimeRange();
396-
histos.fill(HIST("hmczvtxcent"), RecCollision.posZ(), RecCollision.centFT0C(), OccupancyValue);
427+
histos.fill(HIST("hmczvtxcent"), RecCollision.posZ(), SelectColCentrality(RecCollision), OccupancyValue);
397428

398429
auto Rectrackspart = RecTracks.sliceBy(perCollision, RecCollision.globalIndex());
399430
for (auto& Rectrack : Rectrackspart) {
400431
if (!IsTrackSelected(Rectrack)) {
401432
continue;
402433
}
403434
histos.fill(HIST("MCrecPhiVsEtaHist"), Rectrack.phi(), Rectrack.eta());
404-
histos.fill(HIST("hmcrecdndeta"), RecCollision.posZ(), RecCollision.centFT0C(), OccupancyValue, Rectrack.eta(), Rectrack.phi());
435+
histos.fill(HIST("hmcrecdndeta"), RecCollision.posZ(), SelectColCentrality(RecCollision), OccupancyValue, Rectrack.eta(), Rectrack.phi());
405436
} // track (mcrec) loop
406437

407438
for (auto& particle : GenParticles) {
408439
if (!IsGenTrackSelected(particle)) {
409440
continue;
410441
}
411-
histos.fill(HIST("hmcgendndeta"), RecCollision.posZ(), RecCollision.centFT0C(), particle.eta(), particle.phi(), kNoGenpTVar);
442+
histos.fill(HIST("hmcgendndeta"), RecCollision.posZ(), SelectColCentrality(RecCollision), particle.eta(), particle.phi(), kNoGenpTVar);
412443
if (particle.pt() < 0.1) {
413-
histos.fill(HIST("hmcgendndeta"), RecCollision.posZ(), RecCollision.centFT0C(), particle.eta(), particle.phi(), kGenpTup, -10.0 * particle.pt() + 2);
414-
histos.fill(HIST("hmcgendndeta"), RecCollision.posZ(), RecCollision.centFT0C(), particle.eta(), particle.phi(), kGenpTdown, 5.0 * particle.pt() + 0.5);
444+
histos.fill(HIST("hmcgendndeta"), RecCollision.posZ(), SelectColCentrality(RecCollision), particle.eta(), particle.phi(), kGenpTup, -10.0 * particle.pt() + 2);
445+
histos.fill(HIST("hmcgendndeta"), RecCollision.posZ(), SelectColCentrality(RecCollision), particle.eta(), particle.phi(), kGenpTdown, 5.0 * particle.pt() + 0.5);
415446
} else {
416-
histos.fill(HIST("hmcgendndeta"), RecCollision.posZ(), RecCollision.centFT0C(), particle.eta(), particle.phi(), kGenpTup);
417-
histos.fill(HIST("hmcgendndeta"), RecCollision.posZ(), RecCollision.centFT0C(), particle.eta(), particle.phi(), kGenpTdown);
447+
histos.fill(HIST("hmcgendndeta"), RecCollision.posZ(), SelectColCentrality(RecCollision), particle.eta(), particle.phi(), kGenpTup);
448+
histos.fill(HIST("hmcgendndeta"), RecCollision.posZ(), SelectColCentrality(RecCollision), particle.eta(), particle.phi(), kGenpTdown);
418449
}
419450
} // track (mcgen) loop
420451
} // collision loop
@@ -431,9 +462,9 @@ struct HeavyIonMultiplicity {
431462
continue;
432463
}
433464
histos.fill(HIST("VtxZHist"), RecCollision.posZ());
434-
histos.fill(HIST("CentPercentileMCRecHist"), RecCollision.centFT0C());
465+
histos.fill(HIST("CentPercentileMCRecHist"), SelectColCentrality(RecCollision));
435466
auto OccupancyValue = IsApplyFT0CbasedOccupancy ? RecCollision.ft0cOccupancyInTimeRange() : RecCollision.trackOccupancyInTimeRange();
436-
histos.fill(HIST("hmczvtxcent"), RecCollision.posZ(), RecCollision.centFT0C(), OccupancyValue);
467+
histos.fill(HIST("hmczvtxcent"), RecCollision.posZ(), SelectColCentrality(RecCollision), OccupancyValue);
437468

438469
auto Rectrackspart = RecTracks.sliceBy(perCollision, RecCollision.globalIndex());
439470
for (auto& Rectrack : Rectrackspart) {
@@ -443,7 +474,7 @@ struct HeavyIonMultiplicity {
443474
if (Rectrack.has_mcParticle()) {
444475
auto mcpart = Rectrack.mcParticle();
445476
if (mcpart.isPhysicalPrimary()) {
446-
histos.fill(HIST("hmcrecdndpt"), RecCollision.centFT0C(), mcpart.pt());
477+
histos.fill(HIST("hmcrecdndpt"), SelectColCentrality(RecCollision), mcpart.pt());
447478
}
448479
}
449480
}
@@ -452,13 +483,13 @@ struct HeavyIonMultiplicity {
452483
if (!IsGenTrackSelected(particle)) {
453484
continue;
454485
}
455-
histos.fill(HIST("hmcgendndpt"), RecCollision.centFT0C(), particle.pt(), kNoGenpTVar);
486+
histos.fill(HIST("hmcgendndpt"), SelectColCentrality(RecCollision), particle.pt(), kNoGenpTVar);
456487
if (particle.pt() < 0.1) {
457-
histos.fill(HIST("hmcgendndpt"), RecCollision.centFT0C(), particle.pt(), kGenpTup, -10.0 * particle.pt() + 2);
458-
histos.fill(HIST("hmcgendndpt"), RecCollision.centFT0C(), particle.pt(), kGenpTdown, 5.0 * particle.pt() + 0.5);
488+
histos.fill(HIST("hmcgendndpt"), SelectColCentrality(RecCollision), particle.pt(), kGenpTup, -10.0 * particle.pt() + 2);
489+
histos.fill(HIST("hmcgendndpt"), SelectColCentrality(RecCollision), particle.pt(), kGenpTdown, 5.0 * particle.pt() + 0.5);
459490
} else {
460-
histos.fill(HIST("hmcgendndpt"), RecCollision.centFT0C(), particle.pt(), kGenpTup);
461-
histos.fill(HIST("hmcgendndpt"), RecCollision.centFT0C(), particle.pt(), kGenpTdown);
491+
histos.fill(HIST("hmcgendndpt"), SelectColCentrality(RecCollision), particle.pt(), kGenpTup);
492+
histos.fill(HIST("hmcgendndpt"), SelectColCentrality(RecCollision), particle.pt(), kGenpTdown);
462493
}
463494
}
464495
}
@@ -475,9 +506,9 @@ struct HeavyIonMultiplicity {
475506
continue;
476507
}
477508
histos.fill(HIST("VtxZHist"), RecCollision.posZ());
478-
histos.fill(HIST("CentPercentileMCRecHist"), RecCollision.centFT0C());
509+
histos.fill(HIST("CentPercentileMCRecHist"), SelectColCentrality(RecCollision));
479510
auto OccupancyValue = IsApplyFT0CbasedOccupancy ? RecCollision.ft0cOccupancyInTimeRange() : RecCollision.trackOccupancyInTimeRange();
480-
histos.fill(HIST("hmczvtxcent"), RecCollision.posZ(), RecCollision.centFT0C(), OccupancyValue);
511+
histos.fill(HIST("hmczvtxcent"), RecCollision.posZ(), SelectColCentrality(RecCollision), OccupancyValue);
481512

482513
auto Rectrackspart = RecTracks.sliceBy(perCollision, RecCollision.globalIndex());
483514
for (auto& Rectrack : Rectrackspart) {
@@ -487,19 +518,19 @@ struct HeavyIonMultiplicity {
487518
if (!Rectrack.hasTPC()) {
488519
continue;
489520
}
490-
histos.fill(HIST("hTracksCount"), RecCollision.centFT0C(), 1);
521+
histos.fill(HIST("hTracksCount"), SelectColCentrality(RecCollision), 1);
491522
bool IsFakeITStracks = false;
492523
for (int i = 0; i < 7; i++) {
493524
if (Rectrack.mcMask() & 1 << i) {
494525
IsFakeITStracks = true;
495-
histos.fill(HIST("hTracksCount"), RecCollision.centFT0C(), i + 3);
526+
histos.fill(HIST("hTracksCount"), SelectColCentrality(RecCollision), i + 3);
496527
break;
497528
}
498529
}
499530
if (IsFakeITStracks) {
500531
continue;
501532
}
502-
histos.fill(HIST("hTracksCount"), RecCollision.centFT0C(), 2);
533+
histos.fill(HIST("hTracksCount"), SelectColCentrality(RecCollision), 2);
503534
}
504535
}
505536
}
@@ -515,17 +546,17 @@ struct HeavyIonMultiplicity {
515546
continue;
516547
}
517548
histos.fill(HIST("VtxZHist"), RecCollision.posZ());
518-
histos.fill(HIST("CentPercentileMCRecHist"), RecCollision.centFT0C());
549+
histos.fill(HIST("CentPercentileMCRecHist"), SelectColCentrality(RecCollision));
519550
auto OccupancyValue = IsApplyFT0CbasedOccupancy ? RecCollision.ft0cOccupancyInTimeRange() : RecCollision.trackOccupancyInTimeRange();
520-
histos.fill(HIST("hmczvtxcent"), RecCollision.posZ(), RecCollision.centFT0C(), OccupancyValue);
551+
histos.fill(HIST("hmczvtxcent"), RecCollision.posZ(), SelectColCentrality(RecCollision), OccupancyValue);
521552

522553
auto Rectrackspart = RecTracks.sliceBy(perCollision, RecCollision.globalIndex());
523554
std::vector<Int_t> mclabels;
524555
for (auto& Rectrack : Rectrackspart) {
525556
if (!IsTrackSelected(Rectrack)) {
526557
continue;
527558
}
528-
histos.fill(HIST("FillMCrecSpecies"), RecCollision.centFT0C(), OccupancyValue, Rectrack.eta(), Double_t(kSpAll));
559+
histos.fill(HIST("FillMCrecSpecies"), SelectColCentrality(RecCollision), OccupancyValue, Rectrack.eta(), Double_t(kSpAll));
529560
if (Rectrack.has_mcParticle()) {
530561
Int_t pid = kBkg;
531562
auto mcpart = Rectrack.template mcParticle_as<aod::McParticles>();
@@ -557,17 +588,17 @@ struct HeavyIonMultiplicity {
557588
pid = kBkg;
558589
}
559590
mclabels.push_back(Rectrack.mcParticleId());
560-
histos.fill(HIST("FillMCrecSpecies"), RecCollision.centFT0C(), OccupancyValue, Rectrack.eta(), Double_t(pid));
591+
histos.fill(HIST("FillMCrecSpecies"), SelectColCentrality(RecCollision), OccupancyValue, Rectrack.eta(), Double_t(pid));
561592
} else {
562-
histos.fill(HIST("FillMCrecSpecies"), RecCollision.centFT0C(), OccupancyValue, Rectrack.eta(), Double_t(kBkg));
593+
histos.fill(HIST("FillMCrecSpecies"), SelectColCentrality(RecCollision), OccupancyValue, Rectrack.eta(), Double_t(kBkg));
563594
}
564595
} // rec track loop
565596

566597
for (auto& particle : GenParticles) {
567598
if (!IsGenTrackSelected(particle)) {
568599
continue;
569600
}
570-
histos.fill(HIST("FillMCgenSpecies"), RecCollision.centFT0C(), particle.eta(), Double_t(kSpAll));
601+
histos.fill(HIST("FillMCgenSpecies"), SelectColCentrality(RecCollision), particle.eta(), Double_t(kSpAll));
571602
Int_t pid = 0;
572603
switch (std::abs(particle.pdgCode())) {
573604
case 211:
@@ -583,7 +614,7 @@ struct HeavyIonMultiplicity {
583614
pid = kSpOther;
584615
break;
585616
}
586-
histos.fill(HIST("FillMCgenSpecies"), RecCollision.centFT0C(), particle.eta(), Double_t(pid));
617+
histos.fill(HIST("FillMCgenSpecies"), SelectColCentrality(RecCollision), particle.eta(), Double_t(pid));
587618
} // gen track loop
588619
} // collision loop
589620
}
@@ -597,7 +628,7 @@ struct HeavyIonMultiplicity {
597628
if (std::abs(collision.posZ()) >= VtxRange) {
598629
return;
599630
}
600-
histos.fill(HIST("hzvtxcent"), collision.posZ(), collision.centFT0C());
631+
histos.fill(HIST("hzvtxcent"), collision.posZ(), SelectColCentrality(collision));
601632
for (auto& v0track : v0data) {
602633
auto v0pTrack = v0track.template posTrack_as<v0trackcandidates>();
603634
auto v0nTrack = v0track.template negTrack_as<v0trackcandidates>();
@@ -625,9 +656,9 @@ struct HeavyIonMultiplicity {
625656
if (std::abs(v0track.dcapostopv()) < dcapostopvCut || std::abs(v0track.dcanegtopv()) < dcanegtopvCut || v0track.v0radius() < v0radiusCut || v0track.v0cosPA() < v0cospaCut || std::abs(v0track.dcaV0daughters()) > dcav0daughtercut) {
626657
continue;
627658
}
628-
histos.fill(HIST("K0sCentEtaMass"), collision.centFT0C(), v0track.eta(), v0track.mK0Short());
629-
histos.fill(HIST("LambdaCentEtaMass"), collision.centFT0C(), v0track.eta(), v0track.mLambda());
630-
histos.fill(HIST("AntiLambdaCentEtaMass"), collision.centFT0C(), v0track.eta(), v0track.mAntiLambda());
659+
histos.fill(HIST("K0sCentEtaMass"), SelectColCentrality(collision), v0track.eta(), v0track.mK0Short());
660+
histos.fill(HIST("LambdaCentEtaMass"), SelectColCentrality(collision), v0track.eta(), v0track.mLambda());
661+
histos.fill(HIST("AntiLambdaCentEtaMass"), SelectColCentrality(collision), v0track.eta(), v0track.mAntiLambda());
631662
}
632663
}
633664
PROCESS_SWITCH(HeavyIonMultiplicity, processStrangeYield, "Strange particle yield", false);

0 commit comments

Comments
 (0)