Skip to content

Commit 14e3866

Browse files
authored
[PWGCF] Add dca cuts in twoParticleCorrelationsMpi.cxx (#18152)
1 parent 1d75cb0 commit 14e3866

1 file changed

Lines changed: 53 additions & 39 deletions

File tree

‎PWGCF/TwoParticleCorrelations/Tasks/twoParticleCorrelationsMpi.cxx‎

Lines changed: 53 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -116,20 +116,30 @@ struct TwoParticleCorrelationsMpi {
116116
Configurable<bool> cfgDropStepRECO{"cfgDropStepRECO", false, "choice to drop step RECO if efficiency correction is used"};
117117
Configurable<int> cfgCentBinsForMC{"cfgCentBinsForMC", 0, "0 = generated multiplicity; 1 = reconstructed multiplicity and all associated collisions"};
118118
} cfgGeneral;
119+
struct : ConfigurableGroup {
120+
Configurable<float> dcaxymax{"dcaxymax", 999.f, "maximum dcaxy of tracks"};
121+
Configurable<float> dcazmax{"dcazmax", 999.f, "maximum dcaz of tracks"};
122+
Configurable<bool> enablePtDepDCAxy{"enablePtDepDCAxy", false, "Enable pT-dependent DCAxy cut: |DCAxy| < a + b/pT"};
123+
Configurable<float> dcaXyConst{"dcaXyConst", 0.004f, "Constant term 'a' for pT-dependent DCAxy cut: |DCAxy| < a + b/pT (cm)"};
124+
Configurable<float> dcaXySlope{"dcaXySlope", 0.013f, "Slope term 'b' for pT-dependent DCAxy cut: |DCAxy| < a + b/pT (cm x GeV/c)"};
125+
} cfgDCA;
119126
Configurable<uint16_t> cfgTrackBitMask{"cfgTrackBitMask", 0, "BitMask for track selection systematics; refer to the enum TrackSelectionCuts in filtering task"};
120127
Configurable<uint16_t> cfgMultCorrelationsMask{"cfgMultCorrelationsMask", 0, "Selection bitmask for the multiplicity correlations. This should match the filter selection cfgEstimatorBitMask."};
121128
Configurable<std::string> cfgMultCutFormula{"cfgMultCutFormula", "", "Multiplicity correlations cut formula. A result greater than zero results in accepted event. Parameters: [cFT0C] FT0C centrality, [mFV0A] V0A multiplicity, [mGlob] global track multiplicity, [mPV] PV track multiplicity, [cFT0M] FT0M centrality"};
122129

123130
// Suggested values: Photon: 0.004; K0 and Lambda: 0.005
124131
Configurable<LabeledArray<float>> cfgPairCut{"cfgPairCut", {CfgPairCutDefaults.front().data(), 5, {"Photon", "K0", "Lambda", "Phi", "Rho"}}, "Pair cuts on various particles"};
125132

126-
Configurable<std::string> cfgEfficiencyTrigger{"cfgEfficiencyTrigger", "", "CCDB path to efficiency object for trigger particles"};
127-
Configurable<std::string> cfgEfficiencyAssociated{"cfgEfficiencyAssociated", "", "CCDB path to efficiency object for associated particles"};
128-
Configurable<std::string> cfgAcceptance{"cfgAcceptance", "", "CCDB path to the GFW acceptance object"};
129-
Configurable<bool> cfgFillAcceptanceWeights{"cfgFillAcceptanceWeights", false, "Fill acceptance maps instead of physics outputs"};
130-
Configurable<bool> cfgAcceptanceRunByRun{"cfgAcceptanceRunByRun", false, "Fill or load run-by-run acceptance weights"};
131-
Configurable<int> cfgAcceptancePhiBins{"cfgAcceptancePhiBins", int{DefaultAcceptancePhiBins}, "Number of phi bins in acceptance maps"};
132-
Configurable<int> cfgAcceptanceEtaBins{"cfgAcceptanceEtaBins", int{DefaultAcceptanceEtaBins}, "Number of eta bins in acceptance maps"};
133+
struct : ConfigurableGroup {
134+
Configurable<std::string> cfgEfficiencyTrigger{"cfgEfficiencyTrigger", "", "CCDB path to efficiency object for trigger particles"};
135+
Configurable<std::string> cfgEfficiencyAssociated{"cfgEfficiencyAssociated", "", "CCDB path to efficiency object for associated particles"};
136+
Configurable<std::string> cfgAcceptance{"cfgAcceptance", "", "CCDB path to the GFW acceptance object"};
137+
Configurable<bool> cfgFillAcceptanceWeights{"cfgFillAcceptanceWeights", false, "Fill acceptance maps instead of physics outputs"};
138+
Configurable<bool> cfgAcceptanceRunByRun{"cfgAcceptanceRunByRun", false, "Fill or load run-by-run acceptance weights"};
139+
Configurable<int> cfgAcceptancePhiBins{"cfgAcceptancePhiBins", int{DefaultAcceptancePhiBins}, "Number of phi bins in acceptance maps"};
140+
Configurable<int> cfgAcceptanceEtaBins{"cfgAcceptanceEtaBins", int{DefaultAcceptanceEtaBins}, "Number of eta bins in acceptance maps"};
141+
} cfgCorrections;
142+
133143
Configurable<std::string> cfgNuncSeedsTemplateFile{"cfgNuncSeedsTemplateFile", "", "Local ROOT file containing ensembleYieldTemplates"};
134144
Configurable<std::string> cfgNuncSeedsTemplate{"cfgNuncSeedsTemplate", "", "CCDB path to the ensemble-yield template ccdb_object"};
135145
Configurable<float> cfgMinPairAcceptance{"cfgMinPairAcceptance", 0.05f, "Minimum pair acceptance used by the event seed estimator"};
@@ -182,7 +192,11 @@ struct TwoParticleCorrelationsMpi {
182192
Filter collisionVertexTypeFilter = (aod::collision::flags & static_cast<uint16_t>(aod::collision::CollisionFlagsRun2::Run2VertexerTracks)) == static_cast<uint16_t>(aod::collision::CollisionFlagsRun2::Run2VertexerTracks);
183193

184194
// Track filters
185-
Filter trackFilter = (nabs(aod::track::eta) < cfgGeneral.cfgCutEta) && (aod::track::pt > cfgGeneral.cfgCutPt) && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t)true));
195+
Filter trackFilter = (nabs(aod::track::eta) < cfgGeneral.cfgCutEta) && (aod::track::pt > cfgGeneral.cfgCutPt) && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t)true)) &&
196+
(nabs(aod::track::dcaZ) < cfgDCA.dcazmax) &&
197+
ifnode(cfgDCA.enablePtDepDCAxy.node() == true,
198+
nabs(aod::track::dcaXY) < (cfgDCA.dcaXyConst + cfgDCA.dcaXySlope / aod::track::pt),
199+
nabs(aod::track::dcaXY) < cfgDCA.dcaxymax);
186200
Filter cfTrackFilter = (nabs(aod::cftrack::eta) < cfgGeneral.cfgCutEta) && (aod::cftrack::pt > cfgGeneral.cfgCutPt) && ncheckbit(aod::track::trackType, as<uint8_t>(cfgTrackBitMask));
187201

188202
// MC filters
@@ -327,7 +341,7 @@ struct TwoParticleCorrelationsMpi {
327341
Service<o2::framework::O2DatabasePDG> pdg{};
328342

329343
using AodCollisions = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms>>;
330-
using AodTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection>>;
344+
using AodTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksDCA>>;
331345

332346
using DerivedCollisions = soa::Filtered<aod::CFCollisions>;
333347
using DerivedCollisionsCorrected = soa::Filtered<aod::CFCollisionsWithExtra>;
@@ -361,16 +375,16 @@ struct TwoParticleCorrelationsMpi {
361375
(!(doprocessSameGenMC || doprocessMCSameDerived) ||
362376
doprocessSameAOD || enabledDerivedSameProcesses > 0 ||
363377
doprocessMixedAOD || enabledDerivedMixedProcesses > 0 || doprocessMCMixedDerived ||
364-
cfgGeneral.cfgCentBinsForMC != 0 || cfgFillAcceptanceWeights)) {
378+
cfgGeneral.cfgCentBinsForMC != 0 || cfgCorrections.cfgFillAcceptanceWeights)) {
365379
LOGF(fatal, "cfgUserAxis=3 supports generated MC same events only: enable processSameGenMC or processMCSameDerived and disable all other same/mixed processes");
366380
}
367-
if (cfgFillAcceptanceWeights && !cfgAcceptance.value.empty()) {
381+
if (cfgCorrections.cfgFillAcceptanceWeights && !cfgCorrections.cfgAcceptance.value.empty()) {
368382
LOGF(fatal, "cfgFillAcceptanceWeights and cfgAcceptance are mutually exclusive: produce and apply acceptance weights in separate jobs");
369383
}
370-
if (cfgFillAcceptanceWeights && !(doprocessSameDerived || doprocessSameDerivedCorrected || doprocessSameDerivedMultSet || doprocessSameDerivedMultSetCorrected || doprocessMCSameDerived)) {
384+
if (cfgCorrections.cfgFillAcceptanceWeights && !(doprocessSameDerived || doprocessSameDerivedCorrected || doprocessSameDerivedMultSet || doprocessSameDerivedMultSetCorrected || doprocessMCSameDerived)) {
371385
LOGF(fatal, "cfgFillAcceptanceWeights requires a reconstructed derived same-event process");
372386
}
373-
if (cfgAcceptancePhiBins < 1 || cfgAcceptanceEtaBins < 1) {
387+
if (cfgCorrections.cfgAcceptancePhiBins < 1 || cfgCorrections.cfgAcceptanceEtaBins < 1) {
374388
LOGF(fatal, "Acceptance-map bin counts must be positive");
375389
}
376390
if (!cfgNuncSeedsTemplateFile.value.empty() && !cfgNuncSeedsTemplate.value.empty()) {
@@ -531,9 +545,9 @@ struct TwoParticleCorrelationsMpi {
531545
registry.add("eventcount_mixed", "bin", {HistType::kTH1F, {{maxMixBin + 2, -2.5, -0.5 + maxMixBin, "bin"}}});
532546
registry.add("trackcount_same", "bin", {HistType::kTH2F, {{maxMixBin + 2, -2.5, -0.5 + maxMixBin, "bin"}, {10, -0.5, 9.5}}});
533547
registry.add("trackcount_mixed", "bin", {HistType::kTH3F, {{maxMixBin + 2, -2.5, -0.5 + maxMixBin, "bin"}, {10, -0.5, 9.5}, {10, -0.5, 9.5}}});
534-
if (cfgFillAcceptanceWeights && !cfgAcceptanceRunByRun) {
535-
AxisSpec phiAxis{cfgAcceptancePhiBins, 0., o2::constants::math::TwoPI, "#varphi"};
536-
AxisSpec etaAxis{cfgAcceptanceEtaBins, -cfgGeneral.cfgCutEta.value, cfgGeneral.cfgCutEta.value, "#eta"};
548+
if (cfgCorrections.cfgFillAcceptanceWeights && !cfgCorrections.cfgAcceptanceRunByRun) {
549+
AxisSpec phiAxis{cfgCorrections.cfgAcceptancePhiBins, 0., o2::constants::math::TwoPI, "#varphi"};
550+
AxisSpec etaAxis{cfgCorrections.cfgAcceptanceEtaBins, -cfgGeneral.cfgCutEta.value, cfgGeneral.cfgCutEta.value, "#eta"};
537551
mAcceptanceWeights = registry.add<TH3>("phi_eta_vtxz_ref", "Reference-track acceptance;#varphi;#eta;z_{vtx} (cm)", {HistType::kTH3D, {phiAxis, etaAxis, axisVertex}});
538552
}
539553

@@ -606,7 +620,7 @@ struct TwoParticleCorrelationsMpi {
606620
same->setTrackEtaCut(cfgGeneral.cfgCutEta);
607621
mixed->setTrackEtaCut(cfgGeneral.cfgCutEta);
608622

609-
if (!cfgEfficiencyAssociated.value.empty()) {
623+
if (!cfgCorrections.cfgEfficiencyAssociated.value.empty()) {
610624
efficiencyAssociatedCache.reserve(512);
611625
}
612626

@@ -655,7 +669,7 @@ struct TwoParticleCorrelationsMpi {
655669
++nPtPtSubevents;
656670
}
657671

658-
if (!cfgFillAcceptanceWeights && (doprocessMCSameDerived || doprocessSameDerived || doprocessSameDerivedCorrected || doprocessSameDerivedMultSet || doprocessSameDerivedMultSetCorrected)) {
672+
if (!cfgCorrections.cfgFillAcceptanceWeights && (doprocessMCSameDerived || doprocessSameDerived || doprocessSameDerivedCorrected || doprocessSameDerivedMultSet || doprocessSameDerivedMultSetCorrected)) {
659673
auto recoProfiles = std::make_unique<TObjArray>();
660674
addConfigObjectsToObjArray(recoProfiles.get(), mCorrConfigs, cfgUserAxis == EventSeedAxis && eventClassifierPercentileAxisEnabled);
661675
fFC.setObject(new FlowContainer("FlowContainer"));
@@ -669,7 +683,7 @@ struct TwoParticleCorrelationsMpi {
669683
fFCpt->initialise(axisMultiplicity, MaxPtCorrelationOrder, cfgCorrConfig.value, FlowNBootstrap);
670684
fFCpt->initialiseSubevent(axisMultiplicity, MaxPtCorrelationOrder, nPtPtSubevents, FlowNBootstrap);
671685
}
672-
if (!cfgFillAcceptanceWeights && (doprocessMCSameDerived || doprocessSameGenMC)) {
686+
if (!cfgCorrections.cfgFillAcceptanceWeights && (doprocessMCSameDerived || doprocessSameGenMC)) {
673687
auto generatedProfiles = std::make_unique<TObjArray>();
674688
addConfigObjectsToObjArray(generatedProfiles.get(), mCorrConfigs, cfgUserAxis == NMPIAxis && eventClassifierPercentileAxisEnabled);
675689
fFCGen.setObject(new FlowContainer("FlowContainer_gen"));
@@ -862,8 +876,8 @@ struct TwoParticleCorrelationsMpi {
862876
return existing->second;
863877
}
864878

865-
AxisSpec phiAxis{cfgAcceptancePhiBins, 0., o2::constants::math::TwoPI, "#varphi"};
866-
AxisSpec etaAxis{cfgAcceptanceEtaBins, -cfgGeneral.cfgCutEta.value, cfgGeneral.cfgCutEta.value, "#eta"};
879+
AxisSpec phiAxis{cfgCorrections.cfgAcceptancePhiBins, 0., o2::constants::math::TwoPI, "#varphi"};
880+
AxisSpec etaAxis{cfgCorrections.cfgAcceptanceEtaBins, -cfgGeneral.cfgCutEta.value, cfgGeneral.cfgCutEta.value, "#eta"};
867881
const std::string histogramName = Form("%d/phi_eta_vtxz_ref", runNumber);
868882
const auto histogram = registry.add<TH3>(histogramName.c_str(), "Reference-track acceptance;#varphi;#eta;z_{vtx} (cm)", {HistType::kTH3D, {phiAxis, etaAxis, axisVertex}});
869883
mAcceptanceWeightsByRun.emplace(runNumber, histogram);
@@ -876,7 +890,7 @@ struct TwoParticleCorrelationsMpi {
876890
if (track.pt() <= fPtAxis->GetXmin() || track.pt() >= fPtAxis->GetXmax()) {
877891
return;
878892
}
879-
const auto histogram = cfgAcceptanceRunByRun ? getAcceptanceWeightsForRun(runNumber) : mAcceptanceWeights;
893+
const auto histogram = cfgCorrections.cfgAcceptanceRunByRun ? getAcceptanceWeightsForRun(runNumber) : mAcceptanceWeights;
880894
histogram->Fill(track.phi(), track.eta(), posZ);
881895
}
882896

@@ -1983,46 +1997,46 @@ struct TwoParticleCorrelationsMpi {
19831997
if (cfg.efficiencyLoaded) {
19841998
return;
19851999
}
1986-
if (!cfgEfficiencyTrigger.value.empty()) {
2000+
if (!cfgCorrections.cfgEfficiencyTrigger.value.empty()) {
19872001
if (cfgGeneral.cfgLocalEfficiency > 0) {
1988-
TFile* fEfficiencyTrigger = TFile::Open(cfgEfficiencyTrigger.value.c_str(), "READ");
2002+
TFile* fEfficiencyTrigger = TFile::Open(cfgCorrections.cfgEfficiencyTrigger.value.c_str(), "READ");
19892003
cfg.mEfficiencyTrigger = dynamic_cast<THn*>(fEfficiencyTrigger->Get("ccdb_object"));
19902004
} else {
1991-
cfg.mEfficiencyTrigger = ccdb->getForTimeStamp<THnT<float>>(cfgEfficiencyTrigger, timestamp);
2005+
cfg.mEfficiencyTrigger = ccdb->getForTimeStamp<THnT<float>>(cfgCorrections.cfgEfficiencyTrigger, timestamp);
19922006
}
19932007
if (cfg.mEfficiencyTrigger == nullptr) {
1994-
LOGF(fatal, "Could not load efficiency histogram for trigger particles from %s", cfgEfficiencyTrigger.value.c_str());
2008+
LOGF(fatal, "Could not load efficiency histogram for trigger particles from %s", cfgCorrections.cfgEfficiencyTrigger.value.c_str());
19952009
}
1996-
LOGF(info, "Loaded efficiency histogram for trigger particles from %s", cfgEfficiencyTrigger.value.c_str());
2010+
LOGF(info, "Loaded efficiency histogram for trigger particles from %s", cfgCorrections.cfgEfficiencyTrigger.value.c_str());
19972011
}
1998-
if (!cfgEfficiencyAssociated.value.empty()) {
2012+
if (!cfgCorrections.cfgEfficiencyAssociated.value.empty()) {
19992013
if (cfgGeneral.cfgLocalEfficiency > 0) {
2000-
TFile* fEfficiencyAssociated = TFile::Open(cfgEfficiencyAssociated.value.c_str(), "READ");
2014+
TFile* fEfficiencyAssociated = TFile::Open(cfgCorrections.cfgEfficiencyAssociated.value.c_str(), "READ");
20012015
cfg.mEfficiencyAssociated = dynamic_cast<THn*>(fEfficiencyAssociated->Get("ccdb_object"));
20022016
} else {
2003-
cfg.mEfficiencyAssociated = ccdb->getForTimeStamp<THnT<float>>(cfgEfficiencyAssociated, timestamp);
2017+
cfg.mEfficiencyAssociated = ccdb->getForTimeStamp<THnT<float>>(cfgCorrections.cfgEfficiencyAssociated, timestamp);
20042018
}
20052019
if (cfg.mEfficiencyAssociated == nullptr) {
2006-
LOGF(fatal, "Could not load efficiency histogram for associated particles from %s", cfgEfficiencyAssociated.value.c_str());
2020+
LOGF(fatal, "Could not load efficiency histogram for associated particles from %s", cfgCorrections.cfgEfficiencyAssociated.value.c_str());
20072021
}
2008-
LOGF(info, "Loaded efficiency histogram for associated particles from %s", cfgEfficiencyAssociated.value.c_str());
2022+
LOGF(info, "Loaded efficiency histogram for associated particles from %s", cfgCorrections.cfgEfficiencyAssociated.value.c_str());
20092023
}
20102024
cfg.efficiencyLoaded = true;
20112025
}
20122026

20132027
void loadAcceptance(const uint64_t timestamp, const int runNumber)
20142028
{
2015-
if (cfgFillAcceptanceWeights || cfgAcceptance.value.empty()) {
2029+
if (cfgCorrections.cfgFillAcceptanceWeights || cfgCorrections.cfgAcceptance.value.empty()) {
20162030
cfg.mAcceptance = nullptr;
20172031
cfg.acceptanceLoaded = true;
20182032
return;
20192033
}
2020-
if (cfg.acceptanceLoaded && (!cfgAcceptanceRunByRun || cfg.acceptanceRunNumber == runNumber)) {
2034+
if (cfg.acceptanceLoaded && (!cfgCorrections.cfgAcceptanceRunByRun || cfg.acceptanceRunNumber == runNumber)) {
20212035
return;
20222036
}
20232037

2024-
std::string path = cfgAcceptance.value;
2025-
if (cfgAcceptanceRunByRun) {
2038+
std::string path = cfgCorrections.cfgAcceptance.value;
2039+
if (cfgCorrections.cfgAcceptanceRunByRun) {
20262040
if (path.back() != '/') {
20272041
path += '/';
20282042
}
@@ -2099,7 +2113,7 @@ struct TwoParticleCorrelationsMpi {
20992113
soa::Filtered<aod::CFMcParticles> const& mcParticles,
21002114
soa::SmallGroups<aod::CFCollisionsWithLabel> const& collisions)
21012115
{
2102-
if (cfgFillAcceptanceWeights) {
2116+
if (cfgCorrections.cfgFillAcceptanceWeights) {
21032117
return;
21042118
}
21052119
if (cfgUserAxis == NMPIAxis && mcCollision.nMPI() < 0) {
@@ -2168,7 +2182,7 @@ struct TwoParticleCorrelationsMpi {
21682182
if (cfgVerbosity > 0) {
21692183
LOGF(info, "processSameDerivedT: Tracks for collision: %d/%d | Vertex: %.1f | Multiplicity/Centrality: %.1f", tracks1.size(), tracks2.size(), collision.posZ(), multiplicity);
21702184
}
2171-
if (cfgFillAcceptanceWeights) {
2185+
if (cfgCorrections.cfgFillAcceptanceWeights) {
21722186
for (const auto& track : tracks2) {
21732187
fillAcceptanceWeights(track, collision.posZ(), collision.runNumber());
21742188
}
@@ -2433,7 +2447,7 @@ struct TwoParticleCorrelationsMpi {
24332447
template <class McCollision, class Particles1, class Particles2>
24342448
void processMCSameDerivedT(McCollision const& mcCollision, Particles1 const& mcParticles1, Particles2 const& mcParticles2, soa::SmallGroups<aod::CFCollisionsWithLabel> const& collisions)
24352449
{
2436-
if (cfgFillAcceptanceWeights) {
2450+
if (cfgCorrections.cfgFillAcceptanceWeights) {
24372451
return;
24382452
}
24392453
if (cfgUserAxis == NMPIAxis && mcCollision.nMPI() < 0) {

0 commit comments

Comments
 (0)