Skip to content

Commit bd793a5

Browse files
authored
[PWGCF] try to fix on-the-fly process (#11508)
1 parent 3413b02 commit bd793a5

File tree

1 file changed

+76
-38
lines changed

1 file changed

+76
-38
lines changed

PWGCF/TwoParticleCorrelations/Tasks/diHadronCor.cxx

Lines changed: 76 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,7 @@ struct DiHadronCor {
7676
O2_DEFINE_CONFIGURABLE(cfgRadiusHigh, float, 2.5, "High radius for merging cut")
7777
O2_DEFINE_CONFIGURABLE(cfgSampleSize, double, 10, "Sample size for mixed event")
7878
O2_DEFINE_CONFIGURABLE(cfgCentEstimator, int, 0, "0:FT0C; 1:FT0CVariant1; 2:FT0M; 3:FT0A")
79-
O2_DEFINE_CONFIGURABLE(cfgCentFT0CMin, float, 0.0f, "Minimum centrality (FT0C) to cut events in filter")
80-
O2_DEFINE_CONFIGURABLE(cfgCentFT0CMax, float, 100.0f, "Maximum centrality (FT0C) to cut events in filter")
79+
O2_DEFINE_CONFIGURABLE(cfgCentTableUnavailable, bool, false, "if a dataset does not provide centrality information")
8180
O2_DEFINE_CONFIGURABLE(cfgUseAdditionalEventCut, bool, false, "Use additional event cut on mult correlations")
8281
O2_DEFINE_CONFIGURABLE(cfgUseTentativeEventCounter, bool, false, "After sel8(), count events regardless of real event selection")
8382
O2_DEFINE_CONFIGURABLE(cfgEvSelkNoSameBunchPileup, bool, false, "rejects collisions which are associated with the same found-by-T0 bunch crossing")
@@ -98,23 +97,23 @@ struct DiHadronCor {
9897
SliceCache cache;
9998

10099
ConfigurableAxis axisVertex{"axisVertex", {10, -10, 10}, "vertex axis for histograms"};
101-
ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0, 5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300}, "multiplicity axis for histograms"};
102-
ConfigurableAxis axisCentrality{"axisCentrality", {VARIABLE_WIDTH, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100}, "centrality axis for histograms"};
103-
ConfigurableAxis axisPt{"axisPt", {VARIABLE_WIDTH, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2, 2.5, 3, 4, 5, 6, 8, 10}, "pt axis for histograms"};
100+
ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0, 10, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260}, "multiplicity axis for histograms"};
101+
ConfigurableAxis axisCentrality{"axisCentrality", {VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100}, "centrality axis for histograms"};
102+
ConfigurableAxis axisPt{"axisPt", {VARIABLE_WIDTH, 0.2, 0.5, 1, 1.5, 2, 3, 4, 6, 10}, "pt axis for histograms"};
104103
ConfigurableAxis axisDeltaPhi{"axisDeltaPhi", {72, -PIHalf, PIHalf * 3}, "delta phi axis for histograms"};
105104
ConfigurableAxis axisDeltaEta{"axisDeltaEta", {48, -2.4, 2.4}, "delta eta axis for histograms"};
106-
ConfigurableAxis axisPtTrigger{"axisPtTrigger", {VARIABLE_WIDTH, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2, 2.5, 3, 4, 5, 6, 8, 10}, "pt trigger axis for histograms"};
107-
ConfigurableAxis axisPtAssoc{"axisPtAssoc", {VARIABLE_WIDTH, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2, 2.5, 3, 4, 5, 6, 8, 10}, "pt associated axis for histograms"};
105+
ConfigurableAxis axisPtTrigger{"axisPtTrigger", {VARIABLE_WIDTH, 0.2, 0.5, 1, 1.5, 2, 3, 4, 6, 10}, "pt trigger axis for histograms"};
106+
ConfigurableAxis axisPtAssoc{"axisPtAssoc", {VARIABLE_WIDTH, 0.2, 0.5, 1, 1.5, 2, 3, 4, 6, 10}, "pt associated axis for histograms"};
108107
ConfigurableAxis axisVtxMix{"axisVtxMix", {VARIABLE_WIDTH, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, "vertex axis for mixed event histograms"};
109-
ConfigurableAxis axisMultMix{"axisMultMix", {VARIABLE_WIDTH, 0, 5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260, 280, 300}, "multiplicity / centrality axis for mixed event histograms"};
108+
ConfigurableAxis axisMultMix{"axisMultMix", {VARIABLE_WIDTH, 0, 10, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 220, 240, 260}, "multiplicity / centrality axis for mixed event histograms"};
110109
ConfigurableAxis axisSample{"axisSample", {cfgSampleSize, 0, cfgSampleSize}, "sample axis for histograms"};
111110

112111
ConfigurableAxis axisVertexEfficiency{"axisVertexEfficiency", {10, -10, 10}, "vertex axis for efficiency histograms"};
113112
ConfigurableAxis axisEtaEfficiency{"axisEtaEfficiency", {20, -1.0, 1.0}, "eta axis for efficiency histograms"};
114-
ConfigurableAxis axisPtEfficiency{"axisPtEfficiency", {VARIABLE_WIDTH, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.2, 1.4, 1.6, 1.8, 2, 2.5, 3, 4, 5, 6, 8, 10}, "pt axis for efficiency histograms"};
113+
ConfigurableAxis axisPtEfficiency{"axisPtEfficiency", {VARIABLE_WIDTH, 0.2, 0.5, 1, 1.5, 2, 3, 4, 6, 10}, "pt axis for efficiency histograms"};
115114

116115
// make the filters and cuts.
117-
Filter collisionFilter = (nabs(aod::collision::posZ) < cfgCutVtxZ) && (aod::evsel::sel8) == true && (aod::cent::centFT0C > cfgCentFT0CMin) && (aod::cent::centFT0C < cfgCentFT0CMax);
116+
Filter collisionFilter = (nabs(aod::collision::posZ) < cfgCutVtxZ);
118117
Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::pt > cfgCutPtMin) && (aod::track::pt < cfgCutPtMax) && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t) true)) && (aod::track::tpcChi2NCl < cfgCutChi2prTPCcls) && (nabs(aod::track::dcaZ) < cfgCutDCAz);
119118
using FilteredCollisions = soa::Filtered<soa::Join<aod::Collisions, aod::EvSel, aod::CentFT0Cs, aod::CentFT0CVariant1s, aod::CentFT0Ms, aod::CentFV0As, aod::Mults>>;
120119
using FilteredTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksExtra, aod::TracksDCA>>;
@@ -128,7 +127,7 @@ struct DiHadronCor {
128127
Filter mccollisionFilter = nabs(aod::mccollision::posZ) < cfgCutVtxZ;
129128
using FilteredMcCollisions = soa::Filtered<aod::McCollisions>;
130129

131-
using FilteredSmallGroupMcCollisions = soa::SmallGroups<soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSel, aod::CentFT0Cs, aod::CentFT0CVariant1s, aod::CentFT0Ms, aod::CentFV0As, aod::Mults>>;
130+
using SmallGroupMcCollisions = soa::SmallGroups<soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSel, aod::CentFT0Cs, aod::CentFT0CVariant1s, aod::CentFT0Ms, aod::CentFV0As, aod::Mults>>;
132131

133132
Preslice<aod::Tracks> perCollision = aod::track::collisionId;
134133
PresliceUnsorted<aod::McCollisionLabels> collisionPerMCCollision = aod::mccollisionlabel::mcCollisionId;
@@ -171,13 +170,14 @@ struct DiHadronCor {
171170

172171
void init(InitContext&)
173172
{
173+
if (cfgCentTableUnavailable && !cfgSelCollByNch) {
174+
LOGF(fatal, "Centrality table is unavailable, cannot select collisions by centrality");
175+
}
174176
const AxisSpec axisPhi{72, 0.0, constants::math::TwoPI, "#varphi"};
175177
const AxisSpec axisEta{40, -1., 1., "#eta"};
176178

177179
ccdb->setURL("http://alice-ccdb.cern.ch");
178180
ccdb->setCaching(true);
179-
ccdb->setLocalObjectValidityChecking();
180-
181181
auto now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
182182
ccdb->setCreatedNotAfter(now);
183183

@@ -325,6 +325,24 @@ struct DiHadronCor {
325325
return ((track.tpcNClsFound() >= cfgCutTPCclu) && (track.itsNCls() >= cfgCutITSclu));
326326
}
327327

328+
template <typename TTrack>
329+
bool genTrackSelected(TTrack track)
330+
{
331+
if (!track.isPhysicalPrimary()) {
332+
return false;
333+
}
334+
if (!track.producedByGenerator()) {
335+
return false;
336+
}
337+
if (std::abs(track.eta()) > cfgCutEta) {
338+
return false;
339+
}
340+
if (std::abs(track.pt()) < cfgCutPtMin || std::abs(track.pt()) > cfgCutPtMax) {
341+
return false;
342+
}
343+
return true;
344+
}
345+
328346
void loadEfficiency(uint64_t timestamp)
329347
{
330348
if (correctionsLoaded) {
@@ -420,7 +438,8 @@ struct DiHadronCor {
420438
}
421439

422440
if (system == SameEvent) {
423-
registry.fill(HIST("Centrality_used"), cent);
441+
if (!cfgCentTableUnavailable)
442+
registry.fill(HIST("Centrality_used"), cent);
424443
registry.fill(HIST("Nch_used"), tracks1.size());
425444
}
426445

@@ -499,14 +518,18 @@ struct DiHadronCor {
499518
for (auto const& track1 : tracks1) {
500519
if (step >= CorrelationContainer::kCFStepTrackedOnlyPrim && !track1.isPhysicalPrimary())
501520
continue;
521+
if (doprocessOntheflySame && !genTrackSelected(track1))
522+
continue;
502523

503-
if (system == SameEvent && doprocessMCSame)
524+
if (system == SameEvent && (doprocessMCSame || doprocessOntheflySame))
504525
registry.fill(HIST("MCTrue/MCTrig_hist"), fSampleIndex, posZ, track1.pt(), triggerWeight);
505526

506527
for (auto const& track2 : tracks2) {
507528

508529
if (step >= CorrelationContainer::kCFStepTrackedOnlyPrim && !track2.isPhysicalPrimary())
509530
continue;
531+
if (doprocessOntheflyMixed && !genTrackSelected(track2))
532+
continue;
510533

511534
if (track1.pt() <= track2.pt())
512535
continue; // skip if the trigger pt is less than the associate pt
@@ -517,11 +540,11 @@ struct DiHadronCor {
517540
// fill the right sparse and histograms
518541
if (system == SameEvent) {
519542
same->getPairHist()->Fill(step, fSampleIndex, posZ, track1.pt(), track2.pt(), deltaPhi, deltaEta, triggerWeight * associatedWeight);
520-
if (doprocessMCSame)
543+
if (doprocessMCSame || doprocessOntheflySame)
521544
registry.fill(HIST("MCTrue/MCdeltaEta_deltaPhi_same"), deltaPhi, deltaEta, triggerWeight * associatedWeight);
522545
} else if (system == MixedEvent) {
523546
mixed->getPairHist()->Fill(step, fSampleIndex, posZ, track1.pt(), track2.pt(), deltaPhi, deltaEta, triggerWeight * associatedWeight);
524-
if (doprocessMCMixed)
547+
if (doprocessMCMixed || doprocessOntheflyMixed)
525548
registry.fill(HIST("MCTrue/MCdeltaEta_deltaPhi_mixed"), deltaPhi, deltaEta, triggerWeight * associatedWeight);
526549
}
527550
}
@@ -603,20 +626,24 @@ struct DiHadronCor {
603626

604627
void processSame(FilteredCollisions::iterator const& collision, FilteredTracks const& tracks, aod::BCsWithTimestamps const&)
605628
{
606-
629+
if (!collision.sel8())
630+
return;
607631
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
608-
float cent = getCentrality(collision);
632+
float cent = -1.;
633+
if (!cfgCentTableUnavailable)
634+
cent = getCentrality(collision);
609635
if (cfgUseAdditionalEventCut && !eventSelected(collision, tracks.size(), cent, true))
610636
return;
611637

612-
registry.fill(HIST("Centrality"), cent);
638+
if (!cfgCentTableUnavailable)
639+
registry.fill(HIST("Centrality"), cent);
613640
registry.fill(HIST("Nch"), tracks.size());
614641
registry.fill(HIST("zVtx"), collision.posZ());
615642

616643
if (cfgSelCollByNch && (tracks.size() < cfgCutMultMin || tracks.size() >= cfgCutMultMax)) {
617644
return;
618645
}
619-
if (!cfgSelCollByNch && (cent < cfgCutCentMin || cent >= cfgCutCentMax)) {
646+
if (!cfgSelCollByNch && !cfgCentTableUnavailable && (cent < cfgCutCentMin || cent >= cfgCutCentMax)) {
620647
return;
621648
}
622649

@@ -646,24 +673,30 @@ struct DiHadronCor {
646673
auto tracksTuple = std::make_tuple(tracks, tracks);
647674
Pair<FilteredCollisions, FilteredTracks, FilteredTracks, MixedBinning> pair{binningOnVtxAndMult, cfgMixEventNumMin, -1, collisions, tracksTuple, &cache}; // -1 is the number of the bin to skip
648675
for (auto const& [collision1, tracks1, collision2, tracks2] : pair) {
676+
if (!collision1.sel8() || !collision2.sel8())
677+
continue;
649678

650679
if (cfgSelCollByNch && (tracks1.size() < cfgCutMultMin || tracks1.size() >= cfgCutMultMax))
651680
continue;
652681

653682
if (cfgSelCollByNch && (tracks2.size() < cfgCutMultMin || tracks2.size() >= cfgCutMultMax))
654683
continue;
655684

656-
float cent1 = getCentrality(collision1);
657-
float cent2 = getCentrality(collision2);
685+
float cent1 = -1;
686+
float cent2 = -1;
687+
if (!cfgCentTableUnavailable) {
688+
cent1 = getCentrality(collision1);
689+
cent2 = getCentrality(collision2);
690+
}
658691
if (cfgUseAdditionalEventCut && !eventSelected(collision1, tracks1.size(), cent1, false))
659692
continue;
660693
if (cfgUseAdditionalEventCut && !eventSelected(collision2, tracks2.size(), cent2, false))
661694
continue;
662695

663-
if (!cfgSelCollByNch && (cent1 < cfgCutCentMin || cent1 >= cfgCutCentMax))
696+
if (!cfgSelCollByNch && !cfgCentTableUnavailable && (cent1 < cfgCutCentMin || cent1 >= cfgCutCentMax))
664697
continue;
665698

666-
if (!cfgSelCollByNch && (cent2 < cfgCutCentMin || cent2 >= cfgCutCentMax))
699+
if (!cfgSelCollByNch && !cfgCentTableUnavailable && (cent2 < cfgCutCentMin || cent2 >= cfgCutCentMax))
667700
continue;
668701

669702
registry.fill(HIST("eventcount"), MixedEvent); // fill the mixed event in the 3 bin
@@ -724,26 +757,29 @@ struct DiHadronCor {
724757
}
725758
PROCESS_SWITCH(DiHadronCor, processMCEfficiency, "MC: Extract efficiencies", false);
726759

727-
void processMCSame(FilteredMcCollisions::iterator const& mcCollision, FilteredMcParticles const& mcParticles, FilteredSmallGroupMcCollisions const& collisions)
760+
void processMCSame(FilteredMcCollisions::iterator const& mcCollision, FilteredMcParticles const& mcParticles, SmallGroupMcCollisions const& collisions)
728761
{
729762
if (cfgVerbosity) {
730763
LOGF(info, "processMCSame. MC collision: %d, particles: %d, collisions: %d", mcCollision.globalIndex(), mcParticles.size(), collisions.size());
731764
}
732765

733766
float cent = -1;
734-
for (const auto& collision : collisions) {
735-
cent = getCentrality(collision);
767+
if (!cfgCentTableUnavailable) {
768+
for (const auto& collision : collisions) {
769+
cent = getCentrality(collision);
770+
}
736771
}
737772

738773
if (cfgSelCollByNch && (mcParticles.size() < cfgCutMultMin || mcParticles.size() >= cfgCutMultMax)) {
739774
return;
740775
}
741-
if (!cfgSelCollByNch && (cent < cfgCutCentMin || cent >= cfgCutCentMax)) {
776+
if (!cfgSelCollByNch && !cfgCentTableUnavailable && (cent < cfgCutCentMin || cent >= cfgCutCentMax)) {
742777
return;
743778
}
744779

745780
registry.fill(HIST("MCTrue/MCeventcount"), SameEvent); // because its same event i put it in the 1 bin
746-
registry.fill(HIST("MCTrue/MCCentrality"), cent);
781+
if (!cfgCentTableUnavailable)
782+
registry.fill(HIST("MCTrue/MCCentrality"), cent);
747783
registry.fill(HIST("MCTrue/MCNch"), mcParticles.size());
748784
registry.fill(HIST("MCTrue/MCzVtx"), mcCollision.posZ());
749785
for (const auto& mcParticle : mcParticles) {
@@ -766,7 +802,7 @@ struct DiHadronCor {
766802
}
767803
PROCESS_SWITCH(DiHadronCor, processMCSame, "Process MC same event", false);
768804

769-
void processMCMixed(FilteredMcCollisions const& mcCollisions, FilteredMcParticles const& mcParticles, FilteredSmallGroupMcCollisions const& collisions)
805+
void processMCMixed(FilteredMcCollisions const& mcCollisions, FilteredMcParticles const& mcParticles, SmallGroupMcCollisions const& collisions)
770806
{
771807
auto getTracksSize = [&mcParticles, this](FilteredMcCollisions::iterator const& mcCollision) {
772808
auto associatedTracks = mcParticles.sliceByCached(o2::aod::mcparticle::mcCollisionId, mcCollision.globalIndex(), this->cache);
@@ -793,11 +829,13 @@ struct DiHadronCor {
793829
LOGF(info, "Found %d related collisions", groupedCollisions.size());
794830
}
795831
float cent = -1;
796-
for (const auto& collision : groupedCollisions) {
797-
cent = getCentrality(collision);
832+
if (!cfgCentTableUnavailable) {
833+
for (const auto& collision : groupedCollisions) {
834+
cent = getCentrality(collision);
835+
}
798836
}
799837

800-
if (!cfgSelCollByNch && groupedCollisions.size() != 0 && (cent < cfgCutCentMin || cent >= cfgCutCentMax))
838+
if (!cfgSelCollByNch && !cfgCentTableUnavailable && groupedCollisions.size() != 0 && (cent < cfgCutCentMin || cent >= cfgCutCentMax))
801839
continue;
802840

803841
registry.fill(HIST("MCTrue/MCeventcount"), MixedEvent); // fill the mixed event in the 3 bin
@@ -813,7 +851,7 @@ struct DiHadronCor {
813851
}
814852
PROCESS_SWITCH(DiHadronCor, processMCMixed, "Process MC mixed events", false);
815853

816-
void processOntheflySame(FilteredMcCollisions::iterator const& mcCollision, FilteredMcParticles const& mcParticles)
854+
void processOntheflySame(aod::McCollisions::iterator const& mcCollision, aod::McParticles const& mcParticles)
817855
{
818856
if (cfgVerbosity) {
819857
LOGF(info, "processOntheflySame. MC collision: %d, particles: %d", mcCollision.globalIndex(), mcParticles.size());
@@ -842,9 +880,9 @@ struct DiHadronCor {
842880
}
843881
PROCESS_SWITCH(DiHadronCor, processOntheflySame, "Process on-the-fly same event", false);
844882

845-
void processOntheflyMixed(FilteredMcCollisions const& mcCollisions, FilteredMcParticles const& mcParticles)
883+
void processOntheflyMixed(aod::McCollisions const& mcCollisions, aod::McParticles const& mcParticles)
846884
{
847-
auto getTracksSize = [&mcParticles, this](FilteredMcCollisions::iterator const& mcCollision) {
885+
auto getTracksSize = [&mcParticles, this](aod::McCollisions::iterator const& mcCollision) {
848886
auto associatedTracks = mcParticles.sliceByCached(o2::aod::mcparticle::mcCollisionId, mcCollision.globalIndex(), this->cache);
849887
auto mult = associatedTracks.size();
850888
return mult;
@@ -855,7 +893,7 @@ struct DiHadronCor {
855893
MixedBinning binningOnVtxAndMult{{getTracksSize}, {axisVtxMix, axisMultMix}, true};
856894

857895
auto tracksTuple = std::make_tuple(mcParticles, mcParticles);
858-
Pair<FilteredMcCollisions, FilteredMcParticles, FilteredMcParticles, MixedBinning> pair{binningOnVtxAndMult, cfgMixEventNumMin, -1, mcCollisions, tracksTuple, &cache}; // -1 is the number of the bin to skip
896+
Pair<aod::McCollisions, aod::McParticles, aod::McParticles, MixedBinning> pair{binningOnVtxAndMult, cfgMixEventNumMin, -1, mcCollisions, tracksTuple, &cache}; // -1 is the number of the bin to skip
859897
for (auto const& [collision1, tracks1, collision2, tracks2] : pair) {
860898

861899
if (cfgSelCollByNch && (tracks1.size() < cfgCutMultMin || tracks1.size() >= cfgCutMultMax))

0 commit comments

Comments
 (0)