Skip to content

Commit e0de17b

Browse files
authored
[PWGDQ] Add and change the code for the energy correlator analysis (#14325)
1 parent 5dba9eb commit e0de17b

File tree

3 files changed

+81
-35
lines changed

3 files changed

+81
-35
lines changed

PWGDQ/Core/HistogramsLibrary.cxx

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1943,23 +1943,34 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
19431943
hm->AddHistogram(histClass, "Delta_Mass_DstarD0region", "", false, 50, 0.14, 0.16, VarManager::kDeltaMass);
19441944
}
19451945
if (subGroupStr.Contains("energy-correlator")) {
1946-
hm->AddHistogram(histClass, "Coschi", "", false, 40, -1.0, 1.0, VarManager::kCosChi, 0, 0, 0, -1, 0, 0, 0, -1, "", "", "", -1, VarManager::kECWeight);
1947-
hm->AddHistogram(histClass, "CosTheta_woweight", "", false, 40, -1.0, 1.0, VarManager::kCosTheta);
1948-
hm->AddHistogram(histClass, "CosTheta", "", false, 40, -1.0, 1.0, VarManager::kCosTheta, 0, 0, 0, -1, 0, 0, 0, -1, "", "", "", -1, VarManager::kEWeight_before);
1946+
double coschiBins[26];
1947+
for (int i = 0; i < 26; i++) {
1948+
coschiBins[i] = -1.0 + 2.0 * TMath::Power(0.04 * i, 2.0);
1949+
}
1950+
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);
1957+
hm->AddHistogram(histClass, "Coschi", "", false, 25, coschiBins, VarManager::kCosChi, 0, nullptr, -1, 0, nullptr, -1, "", "", "", -1, VarManager::kECWeight);
19491958
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);
19501960
hm->AddHistogram(histClass, "Eta_Hadron", ";#eta", false, 120, -2.0, 2.0, VarManager::kEtaDau);
19511961
hm->AddHistogram(histClass, "Phi_Hadron", ";#phi", false, 120, -8, 8, VarManager::kPhiDau);
1952-
hm->AddHistogram(histClass, "DeltaEta_DeltaPhi", "", false, 20, -2.0, 2.0, VarManager::kDeltaEta, 50, -8.0, 8.0, VarManager::kDeltaPhi);
1953-
hm->AddHistogram(histClass, "DeltaEta", "", false, 20, -2.0, 2.0, VarManager::kDeltaEta);
1954-
hm->AddHistogram(histClass, "DeltaPhi", "", false, 50, -8.0, 8.0, VarManager::kDeltaPhi);
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);
19551966
// for bkg
1956-
hm->AddHistogram(histClass, "DeltaPhi_randomPhi_trans", "", false, 50, -8.0, 8.0, VarManager::kdeltaphi_randomPhi_trans);
1957-
hm->AddHistogram(histClass, "DeltaPhi_randomPhi_toward", "", false, 50, -8.0, 8.0, VarManager::kdeltaphi_randomPhi_toward);
1958-
hm->AddHistogram(histClass, "DeltaPhi_randomPhi_away", "", false, 50, -8.0, 8.0, VarManager::kdeltaphi_randomPhi_away);
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);
19591970

1960-
hm->AddHistogram(histClass, "Coschi_randomPhi_trans", "", false, 40, -1.0, 1.0, VarManager::kCosChi_randomPhi_trans, 0, 0, 0, -1, 0, 0, 0, -1, "", "", "", -1, VarManager::kWeight_randomPhi_trans);
1961-
hm->AddHistogram(histClass, "Coschi_randomPhi_toward", "", false, 40, -1.0, 1.0, VarManager::kCosChi_randomPhi_toward, 0, 0, 0, -1, 0, 0, 0, -1, "", "", "", -1, VarManager::kWeight_randomPhi_toward);
1962-
hm->AddHistogram(histClass, "Coschi_randomPhi_away", "", false, 40, -1.0, 1.0, VarManager::kCosChi_randomPhi_away, 0, 0, 0, -1, 0, 0, 0, -1, "", "", "", -1, VarManager::kWeight_randomPhi_away);
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);
19631974
}
19641975
}
19651976

PWGDQ/Core/VarManager.h

Lines changed: 39 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,7 @@ class VarManager : public TObject
894894
kdeltaphi_randomPhi_trans,
895895
kdeltaphi_randomPhi_toward,
896896
kdeltaphi_randomPhi_away,
897+
kdileptonmass,
897898

898899
// Dilepton-track-track variables
899900
kQuadMass,
@@ -1238,6 +1239,8 @@ class VarManager : public TObject
12381239
template <typename T1, typename T2>
12391240
static void FillDileptonHadron(T1 const& dilepton, T2 const& hadron, float* values = nullptr, float hadronMass = 0.0f);
12401241
template <typename T1, typename T2>
1242+
static void FillEnergyCorrelator(T1 const& dilepton, T2 const& hadron, float* values = nullptr, bool applyFitMass = false, float sidebandMass = 0.0f);
1243+
template <typename T1, typename T2>
12411244
static void FillDileptonPhoton(T1 const& dilepton, T2 const& photon, float* values = nullptr);
12421245
template <typename T>
12431246
static void FillHadron(T const& hadron, float* values = nullptr, float hadronMass = 0.0f);
@@ -5329,8 +5332,43 @@ void VarManager::FillDileptonHadron(T1 const& dilepton, T2 const& hadron, float*
53295332
double Q1 = (dilepton.mass() * dilepton.mass() - hadronMass * hadronMass) / Pinv;
53305333
values[kDileptonHadronKstar] = sqrt(Q1 * Q1 - v12_Qvect.M2()) / 2.0;
53315334
}
5335+
5336+
if (fgUsedVars[kDeltaPhi]) {
5337+
double delta = dilepton.phi() - hadron.phi();
5338+
if (delta > 3.0 / 2.0 * M_PI) {
5339+
delta -= 2.0 * M_PI;
5340+
}
5341+
if (delta < -0.5 * M_PI) {
5342+
delta += 2.0 * M_PI;
5343+
}
5344+
values[kDeltaPhi] = delta;
5345+
}
5346+
if (fgUsedVars[kDeltaPhiSym]) {
5347+
double delta = std::abs(dilepton.phi() - hadron.phi());
5348+
if (delta > M_PI) {
5349+
delta = 2 * M_PI - delta;
5350+
}
5351+
values[kDeltaPhiSym] = delta;
5352+
}
5353+
if (fgUsedVars[kDeltaEta]) {
5354+
values[kDeltaEta] = dilepton.eta() - hadron.eta();
5355+
}
5356+
}
5357+
5358+
template <typename T1, typename T2>
5359+
void VarManager::FillEnergyCorrelator(T1 const& dilepton, T2 const& hadron, float* values, bool applyFitMass, float sidebandMass)
5360+
{
5361+
float dileptonmass = o2::constants::physics::MassJPsi;
5362+
if (applyFitMass) {
5363+
dileptonmass = dilepton.mass();
5364+
}
5365+
if (applyFitMass && sidebandMass > 0) {
5366+
dileptonmass = sidebandMass;
5367+
}
5368+
53325369
if (fgUsedVars[kCosChi] || fgUsedVars[kECWeight] || fgUsedVars[kCosTheta] || fgUsedVars[kEWeight_before] || fgUsedVars[kPtDau] || fgUsedVars[kEtaDau] || fgUsedVars[kPhiDau] || fgUsedVars[kCosChi_randomPhi_trans] || fgUsedVars[kCosChi_randomPhi_toward] || fgUsedVars[kCosChi_randomPhi_away]) {
5333-
ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), dilepton.phi(), dilepton.mass());
5370+
values[kdileptonmass] = dileptonmass;
5371+
ROOT::Math::PtEtaPhiMVector v1(dilepton.pt(), dilepton.eta(), dilepton.phi(), dileptonmass);
53345372
ROOT::Math::PtEtaPhiMVector v2(hadron.pt(), hadron.eta(), hadron.phi(), o2::constants::physics::MassPionCharged);
53355373
values[kCosChi] = LorentzTransformJpsihadroncosChi("coschi", v1, v2);
53365374
float E_boost = LorentzTransformJpsihadroncosChi("weight_boost", v1, v2);
@@ -5376,29 +5414,7 @@ void VarManager::FillDileptonHadron(T1 const& dilepton, T2 const& hadron, float*
53765414
values[kdeltaphi_randomPhi_away] = RecoDecay::constrainAngle(v1.phi() - randomPhi_away, -o2::constants::math::PIHalf);
53775415
}
53785416
}
5379-
5380-
if (fgUsedVars[kDeltaPhi]) {
5381-
double delta = dilepton.phi() - hadron.phi();
5382-
if (delta > 3.0 / 2.0 * M_PI) {
5383-
delta -= 2.0 * M_PI;
5384-
}
5385-
if (delta < -0.5 * M_PI) {
5386-
delta += 2.0 * M_PI;
5387-
}
5388-
values[kDeltaPhi] = delta;
5389-
}
5390-
if (fgUsedVars[kDeltaPhiSym]) {
5391-
double delta = std::abs(dilepton.phi() - hadron.phi());
5392-
if (delta > M_PI) {
5393-
delta = 2 * M_PI - delta;
5394-
}
5395-
values[kDeltaPhiSym] = delta;
5396-
}
5397-
if (fgUsedVars[kDeltaEta]) {
5398-
values[kDeltaEta] = dilepton.eta() - hadron.eta();
5399-
}
54005417
}
5401-
54025418
template <typename T1, typename T2>
54035419
void VarManager::FillDileptonPhoton(T1 const& dilepton, T2 const& photon, float* values)
54045420
{

PWGDQ/Tasks/tableReader_withAssoc.cxx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,13 @@
4242
#include "ITSMFTBase/DPLAlpideParam.h"
4343

4444
#include "TGeoGlobalMagField.h"
45+
#include <TF1.h>
4546
#include <TH1F.h>
4647
#include <TH3F.h>
4748
#include <THashList.h>
4849
#include <TList.h>
4950
#include <TObjString.h>
51+
#include <TRandom.h>
5052
#include <TString.h>
5153

5254
#include <algorithm>
@@ -3133,6 +3135,8 @@ struct AnalysisDileptonTrack {
31333135
Configurable<std::string> fConfigGeoPath{"geoPath", "GLO/Config/GeometryAligned", "Path of the geometry file"};
31343136
Configurable<bool> fConfigUseRapcut{"cfgUseMCRapcut", false, "Use Rap cut for dileptons used in the triplet vertexing"};
31353137
Configurable<bool> fConfigEnergycorrelator{"cfgEnergycorrelator", false, "Add some hist for energy correlator study"};
3138+
Configurable<bool> fConfigApplyMassEC{"cfgApplyMassEC", false, "Apply fit mass for sideband for the energy correlator study"};
3139+
Configurable<std::vector<float>> fConfigFitmassEC{"cfgTFitmassEC", std::vector<float>{-0.541438, 2.8, 3.2}, "parameter from the fit fuction and fit range"};
31363140

31373141
int fCurrentRun; // needed to detect if the run changed and trigger update of calibrations etc.
31383142
int fNCuts; // number of dilepton leg cuts
@@ -3165,6 +3169,8 @@ struct AnalysisDileptonTrack {
31653169

31663170
NoBinningPolicy<aod::dqanalysisflags::MixingHash> fHashBin;
31673171

3172+
TF1* fMassBkg = nullptr;
3173+
31683174
void init(o2::framework::InitContext& context)
31693175
{
31703176
bool isBarrel = context.mOptions.get<bool>("processBarrelSkimmed");
@@ -3389,6 +3395,12 @@ struct AnalysisDileptonTrack {
33893395
LOG(info) << "Loading geometry from CCDB in dilepton-track task";
33903396
fCCDB->get<TGeoManager>(fConfigGeoPath);
33913397
}
3398+
3399+
// the background mass distribution in signal region
3400+
std::vector<float> fMassBkgpar = fConfigFitmassEC;
3401+
fMassBkg = new TF1("fMassBkg", " exp([0]*x)", fMassBkgpar[1], fMassBkgpar[2]);
3402+
fMassBkg->SetParameters(fMassBkgpar[0]);
3403+
fMassBkg->SetNpx(1000);
33923404
}
33933405

33943406
// init parameters from CCDB
@@ -3490,6 +3502,10 @@ struct AnalysisDileptonTrack {
34903502
// compute needed quantities
34913503
VarManager::FillDileptonHadron(dilepton, track, fValuesHadron);
34923504
VarManager::FillDileptonTrackVertexing<TCandidateType, TEventFillMap, TTrackFillMap>(event, lepton1, lepton2, track, fValuesHadron);
3505+
3506+
// for the energy correlator analysis
3507+
VarManager::FillEnergyCorrelator(dilepton, track, fValuesHadron, fConfigApplyMassEC, fMassBkg->GetRandom());
3508+
34933509
// table to be written out for ML analysis
34943510
BmesonsTable(event.runNumber(), event.globalIndex(), event.timestamp(), fValuesHadron[VarManager::kPairMass], dilepton.mass(), fValuesHadron[VarManager::kDeltaMass], fValuesHadron[VarManager::kPairPt], fValuesHadron[VarManager::kPairEta], fValuesHadron[VarManager::kPairPhi], fValuesHadron[VarManager::kPairRap],
34953511
fValuesHadron[VarManager::kVertexingLxy], fValuesHadron[VarManager::kVertexingLxyz], fValuesHadron[VarManager::kVertexingLz],
@@ -3685,6 +3701,9 @@ struct AnalysisDileptonTrack {
36853701
// compute dilepton - track quantities
36863702
VarManager::FillDileptonHadron(dilepton, track, VarManager::fgValues);
36873703

3704+
// for the energy correlator analysis
3705+
VarManager::FillEnergyCorrelator(dilepton, track, VarManager::fgValues, fConfigApplyMassEC, fMassBkg->GetRandom());
3706+
36883707
// loop over dilepton leg cuts and track cuts and fill histograms separately for each combination
36893708
for (int icut = 0; icut < fNCuts; icut++) {
36903709
if (!dilepton.filterMap_bit(icut)) {

0 commit comments

Comments
 (0)