Skip to content

Commit 5221251

Browse files
committed
Various HF fixes for CF-correlations.cxx 2.
1 parent 369c4ea commit 5221251

1 file changed

Lines changed: 29 additions & 43 deletions

File tree

‎PWGCF/Tasks/correlations.cxx‎

Lines changed: 29 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ struct CorrelationTask {
105105
O2_DEFINE_CONFIGURABLE(cfgTwoTrackCut, float, -1, "Two track cut: -1 = off; >0 otherwise distance value (suggested: 0.02)");
106106
O2_DEFINE_CONFIGURABLE(cfgTwoTrackCutMinRadius, float, 0.8f, "Two track cut: radius in m from which two track cuts are applied");
107107
O2_DEFINE_CONFIGURABLE(cfgLocalEfficiency, int, 0, "0 = OFF and 1 = ON for local efficiency");
108+
O2_DEFINE_CONFIGURABLE(cfgDropStepRECO, bool, false, "choice to drop step RECO if efficiency correction is used");
108109
O2_DEFINE_CONFIGURABLE(cfgCentBinsForMC, int, 0, "0 = OFF and 1 = ON for data like multiplicity/centrality bins for MC steps");
109110
O2_DEFINE_CONFIGURABLE(cfgRequireRecoCollision, int, 1, "0 = all generated collisions; 1 = only generated collisions with exactly 1 reconstructed collision; 2 = select reconstructed collision with largest number of contributors per generated collision")
110111
O2_DEFINE_CONFIGURABLE(cfgTrackBitMask, uint16_t, 0, "BitMask for track selection systematics; refer to the enum TrackSelectionCuts in filtering task");
@@ -161,10 +162,7 @@ struct CorrelationTask {
161162

162163
// Track filters
163164
Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::pt > cfgCutPt) && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t)true));
164-
// Filter cfTrackFilter = (nabs(aod::cftrack::eta) < cfgCutEta) && (aod::cftrack::pt > cfgCutPt) && ((aod::track::trackType & static_cast<uint8_t>(cfgTrackBitMask)) == static_cast<uint8_t>(cfgTrackBitMask));
165165
Filter cfTrackFilter = (nabs(aod::cftrack::eta) < cfgCutEta) && (aod::cftrack::pt > cfgCutPt) && ncheckbit(aod::track::trackType, as<uint8_t>(cfgTrackBitMask));
166-
// Filter cfTrackFilter = (nabs(aod::cftrack::eta) < cfgCutEta) && (aod::cftrack::pt > cfgCutPt);
167-
// Filter cfTrackType = (aod::track::trackType & static_cast<uint8_t>(cfgTrackBitMask)) == static_cast<uint8_t>(cfgTrackBitMask);
168166

169167
// MC filters
170168
Filter cfMCCollisionFilter = nabs(aod::mccollision::posZ) < cfgCutVertex;
@@ -217,12 +215,15 @@ struct CorrelationTask {
217215
LOGF(fatal, "Unsupported cfgRequireRecoCollision=%d; use 0 (no reco. collision required), 1 (exactly one reco. collision required), 2 (at least one. reco, and best reco. collision selected)", cfgRequireRecoCollision.value);
218216
}
219217
if (doprocessSame2ProngDerivedML || doprocessSame2Prong2ProngML || doprocessMixed2ProngDerivedML || doprocessMixed2Prong2ProngML || doprocessMCEfficiency2ProngML || doprocessMCReflection2ProngML) {
220-
if (cfgPtDepMLbkg->empty() || cfgPtCentDepMLbkgSel->empty())
218+
if (cfgPtDepMLbkg->empty() || cfgPtCentDepMLbkgSel->empty()) {
221219
LOGF(fatal, "cfgPtDepMLbkg or cfgPtCentDepMLbkgSel can not be empty when ML 2-prong selections are used.");
222-
if (cfgPtDepMLbkg->size() != cfgPtCentDepMLbkgSel->size())
220+
}
221+
if (cfgPtDepMLbkg->size() != cfgPtCentDepMLbkgSel->size()) {
223222
LOGF(fatal, "cfgPtDepMLbkg and cfgPtCentDepMLbkgSel must be same size.");
224-
if (!cfgPtCentDepMLpromptSel->empty() && cfgPtCentDepMLpromptSel->size() != cfgPtDepMLbkg->size())
223+
}
224+
if (!cfgPtCentDepMLpromptSel->empty() && cfgPtCentDepMLpromptSel->size() != cfgPtDepMLbkg->size()) {
225225
LOGF(fatal, "cfgPtDepMLbkg and cfgPtCentDepMLpromptSel must be same size.");
226+
}
226227
if (!cfgPtCentDepMLnonpromptSel->empty() && cfgPtCentDepMLnonpromptSel->size() != cfgPtDepMLbkg->size())
227228
LOGF(fatal, "cfgPtDepMLbkg and cfgPtCentDepMLnonpromptSel must be same size.");
228229
if (cfgPtCentDepMLpromptSel->size() > 0)
@@ -276,9 +277,6 @@ struct CorrelationTask {
276277
registry.add("multCorrelations", "Multiplicity correlations", {HistType::kTHnSparseF, multAxes});
277278
}
278279
registry.add("multiplicity", "event multiplicity", {HistType::kTH1F, {{1000, 0, 100, "/multiplicity/centrality"}}});
279-
// One-off QA: number of accepted tracks per event, before and after efficiency correction
280-
registry.add("trackMultiplicity", "number of accepted tracks per event (before efficiency correction)", {HistType::kTH2F, {{1000, 0, 100, "/multiplicity/centrality"}, {200, 0, 200, "N_{tracks}"}}});
281-
registry.add("trackMultiplicityCorrected", "number of accepted tracks per event (after efficiency correction)", {HistType::kTH2F, {{1000, 0, 100, "/multiplicity/centrality"}, {200, 0, 200, "N_{tracks} (efficiency weighted)"}}});
282280
registry.add("yvspt", "y vs pT", {HistType::kTH2F, {{100, -1, 1, "y"}, {100, 0, 20, "p_{T}"}}}); // y vs pT for all tracks (control histogram)
283281

284282
const int maxMixBin = AxisSpec(axisMultiplicity).getNbins() * AxisSpec(axisVertex).getNbins();
@@ -470,7 +468,7 @@ struct CorrelationTask {
470468
if (cfg.mEfficiencyTrigger) {
471469
triggerWeight *= getEfficiencyCorrection(cfg.mEfficiencyTrigger, track1.eta(), track1.pt(), multiplicity, collision.posZ());
472470
}
473-
registry.fill(HIST("invMass"), track1.invMass(), track1.pt(), multiplicity, posZ); //, triggerWeight);
471+
registry.fill(HIST("invMass"), track1.invMass(), track1.pt(), multiplicity, posZ);
474472
registry.fill(HIST("invMassCorrected"), track1.invMass(), track1.pt(), multiplicity, posZ, triggerWeight);
475473
for (const auto& track2 : tracks2) {
476474
if constexpr (std::experimental::is_detected<HasInvMass, typename TTracks2::iterator>::value && std::experimental::is_detected<HasDecay, typename TTracks2::iterator>::value) {
@@ -536,22 +534,6 @@ struct CorrelationTask {
536534
fillQA(collision, multiplicity, tracks2);
537535
}
538536

539-
// One-off QA: multiplicity (number of accepted tracks) before and after efficiency correction
540-
// The corrected version sums the per-track efficiency (used as fill weight) and fills once per event.
541-
template <typename TCollision, typename TTracks>
542-
void fillTrackMultiplicity(const TCollision& collision, const TTracks& tracks, float multiplicity)
543-
{
544-
registry.fill(HIST("trackMultiplicity"), multiplicity, float(tracks.size()));
545-
THn* eff = cfg.mEfficiencyAssociated ? cfg.mEfficiencyAssociated : cfg.mEfficiencyTrigger;
546-
if (eff) {
547-
float correctedMult = 0.0f;
548-
for (const auto& track : tracks) {
549-
correctedMult += getEfficiencyCorrection(eff, track.eta(), track.pt(), multiplicity, collision.posZ());
550-
}
551-
registry.fill(HIST("trackMultiplicityCorrected"), multiplicity, correctedMult);
552-
}
553-
}
554-
555537
template <typename TTarget, typename TCollision>
556538
bool fillCollisionAOD(TTarget target, const TCollision& collision, float multiplicity)
557539
{
@@ -677,12 +659,6 @@ struct CorrelationTask {
677659
duplicates.clear();
678660

679661
for (const auto& track1 : tracks1) {
680-
/*if constexpr (std::experimental::is_detected<HasTrackType, typename TTracks1::iterator>::value) {
681-
//registry.fill(HIST("sameDerivedTrackType"), track1.trackType());
682-
683-
//if((track1.trackType() & cfgTrackBitMask) == cfgTrackBitMask)
684-
LOGF(info, "Track %f | %f | %f %d", track1.eta(), track1.phi(), track1.pt(), track1.trackType());
685-
}*/
686662
// LOGF(info, "Track %f | %f | %f %d %d", track1.eta(), track1.phi(), track1.pt(), track1.isGlobalTrack(), track1.isGlobalTrackSDD());
687663

688664
if constexpr (step <= CorrelationContainer::kCFStepTracked && !std::experimental::is_detected<HasDecay, typename TTracks1::iterator>::value) {
@@ -999,7 +975,6 @@ struct CorrelationTask {
999975
if (cfgMultWeight.value.empty() == false) {
1000976
TFile* pf = TFile::Open(cfgMultWeight.value.c_str(), "READ");
1001977
cfg.mMultWeight = reinterpret_cast<TH1*>(pf->Get("hWeight"));
1002-
//
1003978
LOGF(info, "Loaded multiplicity weight histogram for associated particles from %s (%p)", cfgMultWeight.value.c_str(), (void*)cfg.mMultWeight);
1004979
}
1005980
cfg.efficiencyLoaded = true;
@@ -1035,7 +1010,6 @@ struct CorrelationTask {
10351010
}
10361011
registry.fill(HIST("eventcount_same"), -2);
10371012
fillQA(collision, multiplicity, tracks);
1038-
fillTrackMultiplicity(collision, tracks, multiplicity);
10391013
fillCorrelations<CorrelationContainer::kCFStepReconstructed>(same, tracks, tracks, multiplicity, collision.posZ(), getMagneticField(bc.runNumber(), bc.timestamp()), 1.0f);
10401014
}
10411015
PROCESS_SWITCH(CorrelationTask, processSameAOD, "Process same event on AOD", true);
@@ -1064,12 +1038,16 @@ struct CorrelationTask {
10641038
} else {
10651039
fillQA(collision, multiplicity, tracks1);
10661040
}
1067-
fillTrackMultiplicity(collision, tracks2, multiplicity);
10681041

1069-
same->fillEvent(multiplicity, CorrelationContainer::kCFStepReconstructed);
1070-
fillCorrelations<CorrelationContainer::kCFStepReconstructed>(same, tracks1, tracks2, multiplicity, collision.posZ(), field, 1.0f);
1042+
const bool hasEfficiency = (cfg.mEfficiencyAssociated != nullptr || cfg.mEfficiencyTrigger != nullptr);
1043+
const bool fillReco = !(cfgDropStepRECO && hasEfficiency);
1044+
1045+
if (fillReco) {
1046+
same->fillEvent(multiplicity, CorrelationContainer::kCFStepReconstructed);
1047+
fillCorrelations<CorrelationContainer::kCFStepReconstructed>(same, tracks1, tracks2, multiplicity, collision.posZ(), field, 1.0f);
1048+
}
10711049

1072-
if (cfg.mEfficiencyAssociated || cfg.mEfficiencyTrigger) {
1050+
if (hasEfficiency) {
10731051
same->fillEvent(multiplicity, CorrelationContainer::kCFStepCorrected);
10741052
fillCorrelations<CorrelationContainer::kCFStepCorrected>(same, tracks1, tracks2, multiplicity, collision.posZ(), field, 1.0f);
10751053
}
@@ -1194,19 +1172,28 @@ struct CorrelationTask {
11941172
LOGF(info, "processMixedDerived: Mixed collisions bin: %d pair: [%d, %d] %d (%.3f, %.3f), %d (%.3f, %.3f)", bin, it.isNewWindow(), it.currentWindowNeighbours(), collision1.globalIndex(), collision1.posZ(), collision1.multiplicity(), collision2.globalIndex(), collision2.posZ(), collision2.multiplicity());
11951173
}
11961174

1175+
bool hasEfficiencyMixed = (cfg.mEfficiencyAssociated != nullptr || cfg.mEfficiencyTrigger != nullptr);
1176+
bool fillRecoMixed = !(cfgDropStepRECO && hasEfficiencyMixed);
1177+
11971178
if (it.isNewWindow()) {
11981179
loadEfficiency(collision1.timestamp());
1180+
hasEfficiencyMixed = (cfg.mEfficiencyAssociated != nullptr || cfg.mEfficiencyTrigger != nullptr);
1181+
fillRecoMixed = !(cfgDropStepRECO && hasEfficiencyMixed);
11991182

1200-
mixed->fillEvent(collision1.multiplicity(), CorrelationContainer::kCFStepReconstructed);
1183+
if (fillRecoMixed) {
1184+
mixed->fillEvent(collision1.multiplicity(), CorrelationContainer::kCFStepReconstructed);
1185+
}
12011186
}
12021187

12031188
// LOGF(info, "Tracks: %d and %d entries", tracks1.size(), tracks2.size());
12041189

12051190
registry.fill(HIST("eventcount_mixed"), bin);
12061191
registry.fill(HIST("trackcount_mixed"), bin, tracks1.size(), tracks2.size());
1207-
fillCorrelations<CorrelationContainer::kCFStepReconstructed>(mixed, tracks1, tracks2, collision1.multiplicity(), collision1.posZ(), field, eventWeight);
1192+
if (fillRecoMixed) {
1193+
fillCorrelations<CorrelationContainer::kCFStepReconstructed>(mixed, tracks1, tracks2, collision1.multiplicity(), collision1.posZ(), field, eventWeight);
1194+
}
12081195

1209-
if (cfg.mEfficiencyAssociated || cfg.mEfficiencyTrigger) {
1196+
if (hasEfficiencyMixed) {
12101197
if (it.isNewWindow()) {
12111198
mixed->fillEvent(collision1.multiplicity(), CorrelationContainer::kCFStepCorrected);
12121199
}
@@ -1519,8 +1506,7 @@ struct CorrelationTask {
15191506
}
15201507
}
15211508

1522-
Preslice<aod::CF2ProngTracks>
1523-
perCollision2Prong = aod::cftrack::cfCollisionId;
1509+
Preslice<aod::CF2ProngTracks> perCollision2Prong = aod::cftrack::cfCollisionId;
15241510
void processMCEfficiency2Prong(soa::Filtered<aod::CFMcCollisions>::iterator const& mcCollision, soa::Join<aod::CFMcParticles, aod::CF2ProngMcParts> const& mcParticles, soa::SmallGroups<aod::CFCollisionsWithLabel> const& collisions, aod::CFTracksWithLabel const& tracks, aod::CF2ProngTracks const& p2tracks)
15251511
{
15261512
processMCEfficiency2ProngT<false>(mcCollision, mcParticles, collisions, tracks, p2tracks, perCollision2Prong);

0 commit comments

Comments
 (0)