Skip to content

Commit f54c181

Browse files
authored
[PWGDQ] Add and change the code for the energy correlator analysis (#14473)
1 parent b72aed1 commit f54c181

File tree

4 files changed

+100
-62
lines changed

4 files changed

+100
-62
lines changed

PWGDQ/Core/HistogramsLibrary.cxx

Lines changed: 8 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -980,26 +980,13 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
980980
}
981981

982982
if (!groupStr.CompareTo("energy-correlator-gen")) {
983-
hm->AddHistogram(histClass, "MCCostheta", "Cos#theta", false, 40, -1.0, 1.0, VarManager::kMCCosTheta, 0, 0, 0, -1, 0, 0, 0, -1, "", "", "", -1, VarManager::kMCWeight_before);
984-
hm->AddHistogram(histClass, "MCHadronPdgCode", "MCHadronPdgCode", false, 6000, -3000, 3000, VarManager::kMCHadronPdgCode);
985-
hm->AddHistogram(histClass, "MCMotherPdgCode", "MCMotherPdgCode", false, 6000, -3000, 3000, VarManager::kMCMotherPdgCode);
986-
hm->AddHistogram(histClass, "MCPdgCode", "MCPdgCode", false, 1000, -1000, 1000, VarManager::kMCPdgCode);
987-
hm->AddHistogram(histClass, "Coschi", "", false, 40, -1.0, 1.0, VarManager::kMCCosChi, 0, 0, 0, -1, 0, 0, 0, -1, "", "", "", -1, VarManager::kMCWeight);
988-
hm->AddHistogram(histClass, "Pt_Hadron", "", false, 120, 0.0, 30.0, VarManager::kMCHadronPt);
989-
hm->AddHistogram(histClass, "Eta_Hadron", "", false, 120, -2.0, 2.0, VarManager::kMCHadronEta);
990-
hm->AddHistogram(histClass, "Phi_Hadron", "", false, 120, -2.0, 2.0, VarManager::kMCHadronPhi);
991-
hm->AddHistogram(histClass, "DeltaEta", "", false, 20, -2.0, 2.0, VarManager::kMCdeltaeta);
992-
hm->AddHistogram(histClass, "DeltaPhi", "", false, 50, -8.0, 8.0, VarManager::kMCdeltaphi);
993-
hm->AddHistogram(histClass, "DeltaEta_DeltaPhi", "", false, 20, -2.0, 2.0, VarManager::kMCdeltaeta, 50, -8.0, 8.0, VarManager::kMCdeltaphi);
994-
// for bkg
995-
hm->AddHistogram(histClass, "DeltaPhi_randomPhi_trans", "", false, 50, -8.0, 8.0, VarManager::kMCdeltaphi_randomPhi_trans);
996-
hm->AddHistogram(histClass, "DeltaPhi_randomPhi_toward", "", false, 50, -8.0, 8.0, VarManager::kMCdeltaphi_randomPhi_toward);
997-
hm->AddHistogram(histClass, "DeltaPhi_randomPhi_away", "", false, 50, -8.0, 8.0, VarManager::kMCdeltaphi_randomPhi_away);
998-
999-
hm->AddHistogram(histClass, "Coschi_randomPhi_trans", "", false, 40, -1.0, 1.0, VarManager::kMCCosChi_randomPhi_trans, 0, 0, 0, -1, 0, 0, 0, -1, "", "", "", -1, VarManager::kMCWeight_randomPhi_trans);
1000-
hm->AddHistogram(histClass, "Coschi_randomPhi_toward", "", false, 40, -1.0, 1.0, VarManager::kMCCosChi_randomPhi_toward, 0, 0, 0, -1, 0, 0, 0, -1, "", "", "", -1, VarManager::kMCWeight_randomPhi_toward);
1001-
hm->AddHistogram(histClass, "Coschi_randomPhi_away", "", false, 40, -1.0, 1.0, VarManager::kMCCosChi_randomPhi_away, 0, 0, 0, -1, 0, 0, 0, -1, "", "", "", -1, VarManager::kMCWeight_randomPhi_away);
983+
double coschiBins[26];
984+
for (int i = 0; i < 26; i++) {
985+
coschiBins[i] = -1.0 + 2.0 * TMath::Power(0.04 * i, 2.0);
986+
}
987+
hm->AddHistogram(histClass, "Coschi", "", false, 25, coschiBins, VarManager::kMCCosChi, 0, nullptr, -1, 0, nullptr, -1, "", "", "", -1, VarManager::kMCWeight);
1002988
}
989+
1003990
if (!groupStr.CompareTo("polarization-pseudoproper-gen")) {
1004991
int varspTHE[3] = {VarManager::kMCPt, VarManager::kMCCosThetaHE, VarManager::kMCVertexingTauxyProjected};
1005992
int varspTCS[3] = {VarManager::kMCPt, VarManager::kMCCosThetaCS, VarManager::kMCVertexingTauxyProjected};
@@ -1948,29 +1935,9 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
19481935
coschiBins[i] = -1.0 + 2.0 * TMath::Power(0.04 * i, 2.0);
19491936
}
19501937

1951-
double deltaetaBins[21];
1952-
for (int i = 0; i < 21; i++) {
1953-
deltaetaBins[i] = -2.0 + 0.2 * i;
1954-
}
1955-
1956-
hm->AddHistogram(histClass, "dileptonmass", "", false, 125, 2.5, 3.5, VarManager::kdileptonmass);
1938+
hm->AddHistogram(histClass, "Coschi_unfolding", "", false, 25, coschiBins, VarManager::kMCCosChi_rec, 25, coschiBins, VarManager::kMCCosChi_gen);
19571939
hm->AddHistogram(histClass, "Coschi", "", false, 25, coschiBins, VarManager::kCosChi, 0, nullptr, -1, 0, nullptr, -1, "", "", "", -1, VarManager::kECWeight);
1958-
hm->AddHistogram(histClass, "Pt_Hadron", ";P_{T}", false, 120, 0.0, 30.0, VarManager::kPtDau);
1959-
hm->AddHistogram(histClass, "Coschi_wo", "", false, 25, coschiBins, VarManager::kCosChi);
1960-
hm->AddHistogram(histClass, "Eta_Hadron", ";#eta", false, 120, -2.0, 2.0, VarManager::kEtaDau);
1961-
hm->AddHistogram(histClass, "Phi_Hadron", ";#phi", false, 120, -8, 8, VarManager::kPhiDau);
1962-
hm->AddHistogram(histClass, "DeltaEta_DeltaPhi_weight", "", false, 20, -2.0, 2.0, VarManager::kDeltaEta, 50, -2.0, 6.0, VarManager::kDeltaPhi, 0, 0, 0, -1, "", "", "", -1, VarManager::kEWeight_before);
1963-
hm->AddHistogram(histClass, "DeltaEta_DeltaPhi", "", false, 20, -2.0, 2.0, VarManager::kDeltaEta, 50, -2.0, 6.0, VarManager::kDeltaPhi);
1964-
hm->AddHistogram(histClass, "Coschi_DeltaEta", "", false, 25, coschiBins, VarManager::kCosChi, 20, deltaetaBins, VarManager::kDeltaEta, 0, nullptr, -1, "", "", "", -1, VarManager::kECWeight);
1965-
hm->AddHistogram(histClass, "Coschi_wo_DeltaEta", "", false, 25, coschiBins, VarManager::kCosChi, 20, deltaetaBins, VarManager::kDeltaEta);
1966-
// for bkg
1967-
hm->AddHistogram(histClass, "Coschi_randomPhi_trans", "", false, 25, coschiBins, VarManager::kCosChi_randomPhi_trans, 0, nullptr, -1, 0, nullptr, -1, "", "", "", -1, VarManager::kWeight_randomPhi_trans);
1968-
hm->AddHistogram(histClass, "Coschi_randomPhi_toward", "", false, 25, coschiBins, VarManager::kCosChi_randomPhi_toward, 0, nullptr, -1, 0, nullptr, -1, "", "", "", -1, VarManager::kWeight_randomPhi_toward);
1969-
hm->AddHistogram(histClass, "Coschi_randomPhi_away", "", false, 25, coschiBins, VarManager::kCosChi_randomPhi_away, 0, nullptr, -1, 0, nullptr, -1, "", "", "", -1, VarManager::kWeight_randomPhi_away);
1970-
1971-
hm->AddHistogram(histClass, "Coschi_wo_randomPhi_trans", "", false, 25, coschiBins, VarManager::kCosChi_randomPhi_trans);
1972-
hm->AddHistogram(histClass, "Coschi_wo_randomPhi_toward", "", false, 25, coschiBins, VarManager::kCosChi_randomPhi_toward);
1973-
hm->AddHistogram(histClass, "Coschi_wo_randomPhi_away", "", false, 25, coschiBins, VarManager::kCosChi_randomPhi_away);
1940+
hm->AddHistogram(histClass, "DeltaEta_DeltaPhi_weight", "", false, 20, -2.0, 2.0, VarManager::kDeltaEta, 50, -2.0, 6.0, VarManager::kDeltaPhi, 0, 0, 0, -1, "", "", "", -1, VarManager::kPtDau);
19741941
}
19751942
}
19761943

PWGDQ/Core/VarManager.cxx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1824,7 +1824,29 @@ void VarManager::SetDefaultVarNames()
18241824
fgVarNamesMap["kMCCosChi"] = kMCCosChi;
18251825
fgVarNamesMap["kMCHadronPt"] = kMCHadronPt;
18261826
fgVarNamesMap["kMCWeight_before"] = kMCWeight_before;
1827+
fgVarNamesMap["kMCdeltaeta"] = kMCdeltaeta;
1828+
fgVarNamesMap["kMCHadronPt"] = kMCHadronPt;
1829+
fgVarNamesMap["kMCHadronEta"] = kMCHadronEta;
1830+
fgVarNamesMap["kMCHadronPhi"] = kMCHadronPhi;
1831+
fgVarNamesMap["kMCWeight"] = kMCWeight;
1832+
fgVarNamesMap["kMCCosChi_randomPhi_toward"] = kMCCosChi_randomPhi_toward;
1833+
fgVarNamesMap["kMCWeight_randomPhi_toward"] = kMCWeight_randomPhi_toward;
1834+
fgVarNamesMap["kMCCosChi_randomPhi_away"] = kMCCosChi_randomPhi_away;
1835+
fgVarNamesMap["kMCWeight_randomPhi_away"] = kMCWeight_randomPhi_away;
1836+
fgVarNamesMap["kMCCosChi_randomPhi_trans"] = kMCCosChi_randomPhi_trans;
1837+
fgVarNamesMap["kMCWeight_randomPhi_trans"] = kMCWeight_randomPhi_trans;
1838+
fgVarNamesMap["kMCdeltaphi_randomPhi_toward"] = kMCdeltaphi_randomPhi_toward;
1839+
fgVarNamesMap["kMCdeltaphi_randomPhi_away"] = kMCdeltaphi_randomPhi_away;
1840+
fgVarNamesMap["kMCdeltaphi_randomPhi_trans"] = kMCdeltaphi_randomPhi_trans;
1841+
fgVarNamesMap["kMCCosChi_gen"] = kMCCosChi_gen;
1842+
fgVarNamesMap["kMCWeight_gen"] = kMCWeight_gen;
1843+
fgVarNamesMap["kMCdeltaeta_gen"] = kMCdeltaeta_gen;
1844+
fgVarNamesMap["kMCCosChi_rec"] = kMCCosChi_rec;
1845+
fgVarNamesMap["kMCWeight_rec"] = kMCWeight_rec;
1846+
fgVarNamesMap["kMCdeltaeta_rec"] = kMCdeltaeta_rec;
18271847
fgVarNamesMap["kMCParticleWeight"] = kMCParticleWeight;
1848+
fgVarNamesMap["kMCCosTheta"] = kMCCosTheta;
1849+
fgVarNamesMap["kMCJpsiPt"] = kMCJpsiPt;
18281850
fgVarNamesMap["kMCPx"] = kMCPx;
18291851
fgVarNamesMap["kMCPy"] = kMCPy;
18301852
fgVarNamesMap["kMCPz"] = kMCPz;
@@ -2045,6 +2067,16 @@ void VarManager::SetDefaultVarNames()
20452067
fgVarNamesMap["kPtDau"] = kPtDau;
20462068
fgVarNamesMap["kEtaDau"] = kEtaDau;
20472069
fgVarNamesMap["kPhiDau"] = kPhiDau;
2070+
fgVarNamesMap["kCosChi_randomPhi_trans"] = kCosChi_randomPhi_trans;
2071+
fgVarNamesMap["kCosChi_randomPhi_toward"] = kCosChi_randomPhi_toward;
2072+
fgVarNamesMap["kCosChi_randomPhi_away"] = kCosChi_randomPhi_away;
2073+
fgVarNamesMap["kWeight_randomPhi_trans"] = kWeight_randomPhi_trans;
2074+
fgVarNamesMap["kWeight_randomPhi_toward"] = kWeight_randomPhi_toward;
2075+
fgVarNamesMap["kWeight_randomPhi_away"] = kWeight_randomPhi_away;
2076+
fgVarNamesMap["kdeltaphi_randomPhi_trans"] = kdeltaphi_randomPhi_trans;
2077+
fgVarNamesMap["kdeltaphi_randomPhi_toward"] = kdeltaphi_randomPhi_toward;
2078+
fgVarNamesMap["kdeltaphi_randomPhi_away"] = kdeltaphi_randomPhi_away;
2079+
fgVarNamesMap["kdileptonmass"] = kdileptonmass;
20482080
fgVarNamesMap["kNCorrelationVariables"] = kNCorrelationVariables;
20492081
fgVarNamesMap["kQuadMass"] = kQuadMass;
20502082
fgVarNamesMap["kQuadDefaultDileptonMass"] = kQuadDefaultDileptonMass;

PWGDQ/Core/VarManager.h

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -655,6 +655,12 @@ class VarManager : public TObject
655655
kMCdeltaphi_randomPhi_away,
656656
kMCdeltaphi_randomPhi_trans,
657657
kMCWeight_before,
658+
kMCCosChi_gen,
659+
kMCWeight_gen,
660+
kMCdeltaeta_gen,
661+
kMCCosChi_rec,
662+
kMCWeight_rec,
663+
kMCdeltaeta_rec,
658664

659665
// MC mother particle variables
660666
kMCMotherPdgCode,
@@ -1208,6 +1214,8 @@ class VarManager : public TObject
12081214
static void FillTrackMC(const U& mcStack, T const& track, float* values = nullptr);
12091215
template <int pairType, typename T, typename T1>
12101216
static void FillEnergyCorrelatorsMC(T const& track, T1 const& t1, float* values = nullptr);
1217+
template <int pairType, typename T1, typename T2, typename T, typename T3>
1218+
static void FillEnergyCorrelatorsMCUnfolding(T1 const& dilepton, T2 const& hadron, T const& track, T3 const& t1, float* values = nullptr);
12111219
template <uint32_t fillMap, typename T1, typename T2, typename C>
12121220
static void FillPairPropagateMuon(T1 const& muon1, T2 const& muon2, const C& collision, float* values = nullptr);
12131221
template <uint32_t fillMap, typename T1, typename T2, typename C>
@@ -3004,6 +3012,35 @@ void VarManager::FillEnergyCorrelatorsMC(T const& track, T1 const& t1, float* va
30043012
}
30053013
}
30063014

3015+
template <int pairType, typename T1, typename T2, typename T, typename T3>
3016+
void VarManager::FillEnergyCorrelatorsMCUnfolding(T1 const& dilepton, T2 const& hadron, T const& track, T3 const& t1, float* values)
3017+
{
3018+
if (fgUsedVars[kMCCosChi_gen] || fgUsedVars[kMCWeight_gen] || fgUsedVars[kMCdeltaeta_gen] || fgUsedVars[kMCCosChi_rec] || fgUsedVars[kMCWeight_rec] || fgUsedVars[kMCdeltaeta_rec]) {
3019+
// energy correlators
3020+
float MassHadron;
3021+
if constexpr (pairType == kJpsiHadronMass) {
3022+
MassHadron = TMath::Sqrt(t1.e() * t1.e() - t1.p() * t1.p());
3023+
}
3024+
if constexpr (pairType == kJpsiPionMass) {
3025+
MassHadron = o2::constants::physics::MassPionCharged;
3026+
}
3027+
ROOT::Math::PtEtaPhiMVector v1_gen(track.pt(), track.eta(), track.phi(), o2::constants::physics::MassJPsi);
3028+
ROOT::Math::PtEtaPhiMVector v2_gen(t1.pt(), t1.eta(), t1.phi(), MassHadron);
3029+
float E_boost_gen = LorentzTransformJpsihadroncosChi("weight_boost", v1_gen, v2_gen);
3030+
float CosChi_gen = LorentzTransformJpsihadroncosChi("coschi", v1_gen, v2_gen);
3031+
values[kMCCosChi_gen] = CosChi_gen;
3032+
values[kMCWeight_gen] = E_boost_gen / o2::constants::physics::MassJPsi;
3033+
values[kMCdeltaeta_gen] = track.eta() - t1.eta();
3034+
3035+
ROOT::Math::PtEtaPhiMVector v1_rec(dilepton.pt(), dilepton.eta(), dilepton.phi(), dilepton.mass());
3036+
ROOT::Math::PtEtaPhiMVector v2_rec(hadron.pt(), hadron.eta(), hadron.phi(), o2::constants::physics::MassPionCharged);
3037+
values[kMCCosChi_rec] = LorentzTransformJpsihadroncosChi("coschi", v1_rec, v2_rec);
3038+
float E_boost_rec = LorentzTransformJpsihadroncosChi("weight_boost", v1_rec, v2_rec);
3039+
values[kMCWeight_rec] = E_boost_rec / v1_rec.M();
3040+
values[kMCdeltaeta_rec] = dilepton.eta() - hadron.eta();
3041+
}
3042+
}
3043+
30073044
template <uint32_t fillMap, typename T1, typename T2, typename C>
30083045
void VarManager::FillPairPropagateMuon(T1 const& muon1, T2 const& muon2, const C& collision, float* values)
30093046
{

PWGDQ/Tasks/dqEfficiency_withAssoc_direct.cxx

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2065,6 +2065,7 @@ struct AnalysisDileptonTrack {
20652065
Configurable<std::string> fConfigAddJSONHistograms{"cfgAddJSONHistograms", "", "Histograms in JSON format"};
20662066
Configurable<int> fConfigMixingDepth{"cfgMixingDepth", 5, "Event mixing pool depth"};
20672067
Configurable<bool> fConfigPublishTripletTable{"cfgPublishTripletTable", false, "Publish the triplet tables, BmesonCandidates"};
2068+
Configurable<bool> fConfigApplyMassEC{"cfgApplyMassEC", false, "Apply fit mass for sideband for the energy correlator study"};
20682069
} fConfigOptions;
20692070

20702071
struct : ConfigurableGroup {
@@ -2580,11 +2581,14 @@ struct AnalysisDileptonTrack {
25802581
// compute needed quantities
25812582
VarManager::FillDileptonHadron(dilepton, track, fValuesHadron);
25822583
VarManager::FillDileptonTrackVertexing<TCandidateType, TEventFillMap, TTrackFillMap>(event, lepton1, lepton2, track, fValuesHadron);
2583-
25842584
if (!track.has_mcParticle()) {
25852585
continue;
25862586
}
25872587
auto trackMC = track.mcParticle();
2588+
// for the energy correlator analysis
2589+
auto motherParticle = lepton1MC.template mothers_first_as<McParticles>();
2590+
VarManager::FillEnergyCorrelator(dilepton, track, fValuesHadron, fConfigOptions.fConfigApplyMassEC);
2591+
VarManager::FillEnergyCorrelatorsMCUnfolding<VarManager::kJpsiHadronMass>(dilepton, track, motherParticle, trackMC, fValuesHadron);
25882592
mcDecision = 0;
25892593
isig = 0;
25902594
for (auto sig = fRecMCSignals.begin(); sig != fRecMCSignals.end(); sig++, isig++) {
@@ -2938,29 +2942,28 @@ struct AnalysisDileptonTrack {
29382942
{
29392943
auto groupedMCTracks = mcTracks.sliceBy(perReducedMcEvent, event.mcCollisionId());
29402944
groupedMCTracks.bindInternalIndicesTo(&mcTracks);
2941-
for (auto& [t1, t2] : combinations(groupedMCTracks, groupedMCTracks)) {
2945+
for (auto& t1 : groupedMCTracks) {
29422946
auto t1_raw = mcTracks.rawIteratorAt(t1.globalIndex());
29432947
// apply kinematic cuts for signal
2944-
if ((t1_raw.pt() < fConfigOptions.fConfigDileptonLowpTCut || t1_raw.pt() > fConfigOptions.fConfigDileptonHighpTCut)) {
2945-
continue;
2946-
}
2947-
if (abs(t1_raw.y()) > fConfigOptions.fConfigDileptonRapCutAbs) {
2948+
if ((t1_raw.pt() < fConfigOptions.fConfigDileptonLowpTCut || t1_raw.pt() > fConfigOptions.fConfigDileptonHighpTCut))
29482949
continue;
2949-
}
2950-
auto t2_raw = mcTracks.rawIteratorAt(t2.globalIndex());
2951-
if (TMath::Abs(t2_raw.pdgCode()) == 443 || TMath::Abs(t2_raw.pdgCode()) == 11 || TMath::Abs(t2_raw.pdgCode()) == 22) {
2950+
if (abs(t1_raw.y()) > fConfigOptions.fConfigDileptonRapCutAbs)
29522951
continue;
2953-
}
2954-
if (t2_raw.pt() < fConfigMCOptions.fConfigMCGenHadronPtMin.value || std::abs(t2_raw.eta()) > fConfigMCOptions.fConfigMCGenHadronEtaAbs.value) {
2955-
continue;
2956-
}
2957-
if (t2_raw.getGenStatusCode() <= 0) {
2958-
continue;
2959-
}
2960-
for (auto& sig : fGenMCSignals) {
2961-
if (sig->CheckSignal(true, t1_raw)) {
2962-
VarManager::FillEnergyCorrelatorsMC<THadronMassType>(t1_raw, t2_raw, VarManager::fgValues);
2963-
fHistMan->FillHistClass(Form("MCTruthEenergyCorrelators_%s", sig->GetName()), VarManager::fgValues);
2952+
// for the energy correlators
2953+
for (auto& t2 : groupedMCTracks) {
2954+
auto t2_raw = groupedMCTracks.rawIteratorAt(t2.globalIndex());
2955+
if (TMath::Abs(t2_raw.pdgCode()) == 443 || TMath::Abs(t2_raw.pdgCode()) == 11 || TMath::Abs(t2_raw.pdgCode()) == 22)
2956+
continue;
2957+
if (t2_raw.pt() < fConfigMCOptions.fConfigMCGenHadronPtMin.value || std::abs(t2_raw.eta()) > fConfigMCOptions.fConfigMCGenHadronEtaAbs.value) {
2958+
continue;
2959+
}
2960+
if (t2_raw.getGenStatusCode() <= 0)
2961+
continue;
2962+
VarManager::FillEnergyCorrelatorsMC<THadronMassType>(t1_raw, t2_raw, VarManager::fgValues);
2963+
for (auto& sig : fGenMCSignals) {
2964+
if (sig->CheckSignal(true, t1_raw)) {
2965+
fHistMan->FillHistClass(Form("MCTruthEenergyCorrelators_%s", sig->GetName()), VarManager::fgValues);
2966+
}
29642967
}
29652968
}
29662969
}
@@ -3205,6 +3208,5 @@ void DefineHistograms(HistogramManager* histMan, TString histClasses, const char
32053208
if (classStr.Contains("MCTruthEenergyCorrelators")) {
32063209
dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "energy-correlator-gen");
32073210
}
3208-
32093211
} // end loop over histogram classes
32103212
}

0 commit comments

Comments
 (0)