Skip to content

Commit 9647b51

Browse files
authored
[PWGCF] Added support for 2D acceptance corrections to improve sparse pair co… (#17560)
1 parent 60c4ef9 commit 9647b51

1 file changed

Lines changed: 53 additions & 25 deletions

File tree

PWGCF/TwoParticleCorrelations/Tasks/twoParticleCorrelationsMpi.cxx

Lines changed: 53 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
#include <TDirectory.h>
4646
#include <TFile.h>
4747
#include <TFormula.h>
48+
#include <TH2.h>
4849
#include <TH3.h>
4950
#include <THn.h>
5051
#include <TList.h>
@@ -238,6 +239,8 @@ struct TwoParticleCorrelationsMpi {
238239

239240
std::vector<YieldTemplate> yieldTemplates;
240241
std::vector<std::unique_ptr<TH3D>> pairAcceptanceMaps;
242+
std::vector<std::unique_ptr<TH2D>> pairAcceptanceEtaVertexMaps;
243+
int pairAcceptanceSchemaVersion = 0;
241244
const TList* loadedCcdbYieldTemplateObject = nullptr;
242245
bool eventSeedEstimatorEnabled = false;
243246

@@ -726,31 +729,46 @@ struct TwoParticleCorrelationsMpi {
726729
const auto* schemaVersion = dynamic_cast<const TNamed*>(findObject("pairAcceptanceSchemaVersion"));
727730
const auto* normalization = dynamic_cast<const TNamed*>(findObject("pairAcceptanceNormalization"));
728731
const auto* axes = dynamic_cast<const TNamed*>(findObject("pairAcceptanceAxes"));
729-
if (schemaVersion == nullptr || TString(schemaVersion->GetTitle()) != "2" || normalization == nullptr || axes == nullptr) {
730-
LOGF(fatal, "Unsupported or missing multiplicity-only pair-acceptance metadata in %s", source.c_str());
732+
const TString schema = schemaVersion != nullptr ? schemaVersion->GetTitle() : "";
733+
if (schemaVersion == nullptr || (schema != "2" && schema != "3") || normalization == nullptr || axes == nullptr) {
734+
LOGF(fatal, "Unsupported or missing pair-acceptance metadata in %s", source.c_str());
731735
return;
732736
}
733737

734738
const int nMultiplicityBins = AxisSpec(axisMultiplicity).getNbins();
735739
pairAcceptanceMaps.clear();
736-
pairAcceptanceMaps.resize(nMultiplicityBins);
740+
pairAcceptanceEtaVertexMaps.clear();
741+
pairAcceptanceSchemaVersion = schema.Atoi();
742+
int multiplicityDependentOnly = 2;
743+
if (pairAcceptanceSchemaVersion == multiplicityDependentOnly) {
744+
pairAcceptanceMaps.resize(nMultiplicityBins);
745+
} else {
746+
pairAcceptanceEtaVertexMaps.resize(nMultiplicityBins);
747+
}
737748
for (int multBin = 0; multBin < nMultiplicityBins; ++multBin) {
738-
auto* inputMap = dynamic_cast<TH3D*>(findObject(Form("pairAcceptance_mult_%d", multBin)));
739-
if (inputMap == nullptr) {
740-
LOGF(fatal, "Missing pairAcceptance_mult_%d in %s", multBin, source.c_str());
741-
pairAcceptanceMaps.clear();
742-
return;
743-
}
744-
auto* clone = dynamic_cast<TH3D*>(inputMap->Clone(Form("loadedPairAcceptance_mult_%d", multBin)));
745-
if (clone == nullptr) {
746-
LOGF(fatal, "Could not clone pairAcceptance_mult_%d from %s as TH3D", multBin, source.c_str());
747-
pairAcceptanceMaps.clear();
748-
return;
749+
if (pairAcceptanceSchemaVersion == multiplicityDependentOnly) {
750+
auto* inputMap = dynamic_cast<TH3D*>(findObject(Form("pairAcceptance_mult_%d", multBin)));
751+
auto* clone = inputMap != nullptr ? dynamic_cast<TH3D*>(inputMap->Clone(Form("loadedPairAcceptance_mult_%d", multBin))) : nullptr;
752+
if (clone == nullptr) {
753+
LOGF(fatal, "Missing or invalid pairAcceptance_mult_%d in %s", multBin, source.c_str());
754+
pairAcceptanceMaps.clear();
755+
return;
756+
}
757+
clone->SetDirectory(nullptr);
758+
pairAcceptanceMaps[multBin].reset(clone);
759+
} else {
760+
auto* inputMap = dynamic_cast<TH2D*>(findObject(Form("pairAcceptanceEtaVertex_mult_%d", multBin)));
761+
auto* clone = inputMap != nullptr ? dynamic_cast<TH2D*>(inputMap->Clone(Form("loadedPairAcceptanceEtaVertex_mult_%d", multBin))) : nullptr;
762+
if (clone == nullptr) {
763+
LOGF(fatal, "Missing or invalid pairAcceptanceEtaVertex_mult_%d in %s", multBin, source.c_str());
764+
pairAcceptanceEtaVertexMaps.clear();
765+
return;
766+
}
767+
clone->SetDirectory(nullptr);
768+
pairAcceptanceEtaVertexMaps[multBin].reset(clone);
749769
}
750-
clone->SetDirectory(nullptr);
751-
pairAcceptanceMaps[multBin].reset(clone);
752770
}
753-
LOGF(info, "Loaded %zu multiplicity-only pair-acceptance maps from %s", pairAcceptanceMaps.size(), source.c_str());
771+
LOGF(info, "Loaded %d schema-%d pair-acceptance maps from %s", nMultiplicityBins, pairAcceptanceSchemaVersion, source.c_str());
754772
}
755773

756774
void loadLocalYieldTemplates()
@@ -871,23 +889,33 @@ struct TwoParticleCorrelationsMpi {
871889
}
872890
}
873891

874-
const TH3D* findPairAcceptanceMap(double multiplicity) const
892+
int findPairAcceptanceMultiplicityBin(double multiplicity) const
875893
{
876894
const auto& edges = AxisSpec(axisMultiplicity).binEdges;
877895
const auto upper = std::upper_bound(edges.begin(), edges.end(), multiplicity);
878-
const int multBin = static_cast<int>(std::distance(edges.begin(), upper)) - 1;
879-
if (multBin < 0 || multBin >= static_cast<int>(pairAcceptanceMaps.size())) {
880-
return nullptr;
881-
}
882-
return pairAcceptanceMaps[multBin].get();
896+
return static_cast<int>(std::distance(edges.begin(), upper)) - 1;
883897
}
884898

885899
double getPairAcceptance(double multiplicity, double deltaPhi, double deltaEta, double posZ) const
886900
{
887-
const auto* map = findPairAcceptanceMap(multiplicity);
888-
if (!map) {
901+
const int multBin = findPairAcceptanceMultiplicityBin(multiplicity);
902+
int etaVertexMultiplicityDependentOnly = 3;
903+
if (pairAcceptanceSchemaVersion == etaVertexMultiplicityDependentOnly) {
904+
if (multBin < 0 || multBin >= static_cast<int>(pairAcceptanceEtaVertexMaps.size()) || pairAcceptanceEtaVertexMaps[multBin] == nullptr) {
905+
return 0.0;
906+
}
907+
const auto* map = pairAcceptanceEtaVertexMaps[multBin].get();
908+
const int etaBin = map->GetXaxis()->FindFixBin(deltaEta);
909+
const int vertexBin = map->GetYaxis()->FindFixBin(posZ);
910+
if (etaBin < 1 || etaBin > map->GetNbinsX() || vertexBin < 1 || vertexBin > map->GetNbinsY()) {
911+
return 0.0;
912+
}
913+
return map->GetBinContent(etaBin, vertexBin);
914+
}
915+
if (multBin < 0 || multBin >= static_cast<int>(pairAcceptanceMaps.size()) || pairAcceptanceMaps[multBin] == nullptr) {
889916
return 0.0;
890917
}
918+
const auto* map = pairAcceptanceMaps[multBin].get();
891919
const int phiBin = map->GetXaxis()->FindFixBin(deltaPhi);
892920
const int etaBin = map->GetYaxis()->FindFixBin(deltaEta);
893921
const int vertexBin = map->GetZaxis()->FindFixBin(posZ);

0 commit comments

Comments
 (0)