Skip to content

Commit e7539ef

Browse files
committed
[PWGCF] Add Bertsch-Pratt LCMS decomposition for femto pairs
1 parent 224139f commit e7539ef

1 file changed

Lines changed: 79 additions & 2 deletions

File tree

PWGCF/Femto/Core/pairHistManager.h

Lines changed: 79 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,11 @@ enum PairHist {
111111

112112
// angular
113113
kDeltaEtaDeltaPhi,
114-
114+
// Bertsch-Pratt 3D decomposition in LCMS
115+
kQout,
116+
kQside,
117+
kQlong,
118+
kQoutQsideQlong,
115119
kPairHistogramLast
116120
};
117121

@@ -174,6 +178,10 @@ struct ConfPairBinning : o2::framework::ConfigurableGroup {
174178
o2::framework::Configurable<int> transverseMassType{"transverseMassType", static_cast<int>(modes::TransverseMassType::kAveragePdgMass), "Type of transverse mass (0-> Average Pdg Mass, 1-> Reduced Pdg Mass, 2-> Mt from combined 4 vector)"};
175179
o2::framework::ConfigurableAxis binningDeltaEta{"binningDeltaEta", {{35, -1.6, 1.6}}, "Delta eta"};
176180
o2::framework::ConfigurableAxis binningDeltaPhi{"binningDeltaPhi", {{35, -o2::constants::math::PIHalf, 3 * o2::constants::math::PIHalf}}, "Delta phi"};
181+
o2::framework::Configurable<bool> plotBertschPratt{"plotBertschPratt", false, "Enable 1D projections and 3D (q_out, q_side, q_long) Bertsch-Pratt histograms in LCMS"};
182+
o2::framework::ConfigurableAxis qout{"qout", {{300, -1.5f, 1.5f}}, "q_{out} (GeV/c) in LCMS"};
183+
o2::framework::ConfigurableAxis qside{"qside", {{300, -1.5f, 1.5f}}, "q_{side} (GeV/c) in LCMS"};
184+
o2::framework::ConfigurableAxis qlong{"qlong", {{300, -1.5f, 1.5f}}, "q_{long} (GeV/c) in LCMS"};
177185
};
178186

179187
struct ConfPairCuts : o2::framework::ConfigurableGroup {
@@ -250,6 +258,11 @@ constexpr std::array<histmanager::HistInfo<PairHist>, kPairHistogramLast>
250258
{kMeVtz1VsMult1VsCent1VsVtz2VsMult2VsCent2, o2::framework::HistType::kTHnSparseF, "hVtz1VsMult1VsCent1VsVtz2VsMult2VsCent2", "Mixing bins; V_{z,1} (cm); multiplicity_{1}; centrality_{1} (%); V_{z,2} (cm); multiplicity_{2}; centrality_{2} (%)"},
251259
// angular
252260
{kDeltaEtaDeltaPhi, o2::framework::HistType::kTH2F, "hDeltaEtaDeltaPhi", "#Delta#phi vs #Delta#eta; #Delta#phi; #Delta#eta"},
261+
// Bertsch-Pratt 3D decomposition in LCMS
262+
{kQout, o2::framework::HistType::kTH1F, "hQout", "q_{out} in LCMS; q_{out} (GeV/#it{c}); Entries"},
263+
{kQside, o2::framework::HistType::kTH1F, "hQside", "q_{side} in LCMS; q_{side} (GeV/#it{c}); Entries"},
264+
{kQlong, o2::framework::HistType::kTH1F, "hQlong", "q_{long} in LCMS; q_{long} (GeV/#it{c}); Entries"},
265+
{kQoutQsideQlong, o2::framework::HistType::kTH3F, "hQoutQsideQlong", "Bertsch-Pratt 3D; q_{out} (GeV/#it{c}); q_{side} (GeV/#it{c}); q_{long} (GeV/#it{c})"},
253266
}};
254267

255268
#define PAIR_HIST_ANALYSIS_MAP(confAnalysis, confMixing) \
@@ -294,7 +307,11 @@ constexpr std::array<histmanager::HistInfo<PairHist>, kPairHistogramLast>
294307
{kMeMixingWindowRaw, {confMixing.particleBinning}}, \
295308
{kMeMixingWindowEffective, {confMixing.particleBinning}}, \
296309
{kMeNpart1VsNpart2, {confMixing.particleBinning, confMixing.particleBinning}}, \
297-
{kMeVtz1VsMult1VsCent1VsVtz2VsMult2VsCent2, {confMixing.vtxBins, confMixing.multBins, confMixing.centBins, confMixing.vtxBins, confMixing.multBins, confMixing.centBins}},
310+
{kMeVtz1VsMult1VsCent1VsVtz2VsMult2VsCent2, {confMixing.vtxBins, confMixing.multBins, confMixing.centBins, confMixing.vtxBins, confMixing.multBins, confMixing.centBins}}, \
311+
{kQout, {confAnalysis.qout}}, \
312+
{kQside, {confAnalysis.qside}}, \
313+
{kQlong, {confAnalysis.qlong}}, \
314+
{kQoutQsideQlong, {confAnalysis.qout, confAnalysis.qside, confAnalysis.qlong}},
298315

299316
#define PAIR_HIST_MC_MAP(conf) \
300317
{kTrueKstarVsKstar, {conf.kstar, conf.kstar}}, \
@@ -388,6 +405,7 @@ class PairHistManager
388405

389406
mPlotDalitz = ConfPairBinning.plotDalitz.value;
390407
mPlotDeltaEtaDeltaPhi = ConfPairBinning.plotDeltaEtaDeltaPhi.value;
408+
mPlotBertschPratt = ConfPairBinning.plotBertschPratt.value;
391409

392410
// transverse mass type
393411
mMtType = static_cast<modes::TransverseMassType>(ConfPairBinning.transverseMassType.value);
@@ -488,6 +506,10 @@ class PairHistManager
488506
// set kstar
489507
mKstar = getKstar(mParticle1, mParticle2);
490508

509+
if (mPlotBertschPratt) {
510+
computeBertschPrattLCMS();
511+
}
512+
491513
if (mPlotDeltaEtaDeltaPhi) {
492514
mDeltaEta = particle1.eta() - particle2.eta();
493515
mDeltaPhi = RecoDecay::constrainAngle(particle1.phi() - particle2.phi(), -o2::constants::math::PIHalf);
@@ -735,6 +757,12 @@ class PairHistManager
735757
if (mPlotDeltaEtaDeltaPhi) {
736758
mHistogramRegistry->add(analysisDir + getHistNameV2(kDeltaEtaDeltaPhi, HistTable), getHistDesc(kDeltaEtaDeltaPhi, HistTable), getHistType(kDeltaEtaDeltaPhi, HistTable), {Specs.at(kDeltaEtaDeltaPhi)});
737759
}
760+
if (mPlotBertschPratt) {
761+
mHistogramRegistry->add(analysisDir + getHistNameV2(kQout, HistTable), getHistDesc(kQout, HistTable), getHistType(kQout, HistTable), {Specs.at(kQout)});
762+
mHistogramRegistry->add(analysisDir + getHistNameV2(kQside, HistTable), getHistDesc(kQside, HistTable), getHistType(kQside, HistTable), {Specs.at(kQside)});
763+
mHistogramRegistry->add(analysisDir + getHistNameV2(kQlong, HistTable), getHistDesc(kQlong, HistTable), getHistType(kQlong, HistTable), {Specs.at(kQlong)});
764+
mHistogramRegistry->add(analysisDir + getHistNameV2(kQoutQsideQlong, HistTable), getHistDesc(kQoutQsideQlong, HistTable), getHistType(kQoutQsideQlong, HistTable), {Specs.at(kQoutQsideQlong)});
765+
}
738766
}
739767

740768
void initMc(std::map<PairHist, std::vector<o2::framework::AxisSpec>> const& Specs)
@@ -850,6 +878,12 @@ class PairHistManager
850878
if (mPlotDeltaEtaDeltaPhi) {
851879
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kDeltaEtaDeltaPhi, HistTable)), mDeltaPhi, mDeltaEta);
852880
}
881+
if (mPlotBertschPratt) {
882+
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kQout, HistTable)), mQout);
883+
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kQside, HistTable)), mQside);
884+
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kQlong, HistTable)), mQlong);
885+
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kQoutQsideQlong, HistTable)), mQout, mQside, mQlong);
886+
}
853887
}
854888

855889
void fillMc()
@@ -920,6 +954,43 @@ class PairHistManager
920954
return static_cast<float>(0.5 * std::sqrt(std::max(0.0, kallen) / s));
921955
}
922956

957+
// have to check for prf k* = 1/2 q and
958+
959+
void computeBertschPrattLCMS()
960+
{
961+
const ROOT::Math::PxPyPzEVector p1(mParticle1);
962+
const ROOT::Math::PxPyPzEVector p2(mParticle2);
963+
const ROOT::Math::PxPyPzEVector pSum = p1 + p2;
964+
965+
const double tPx = pSum.Px();
966+
const double tPy = pSum.Py();
967+
const double tPz = pSum.Pz();
968+
const double tE = pSum.E();
969+
970+
const double tPt = std::sqrt(tPx * tPx + tPy * tPy);
971+
const double tMt = std::sqrt(tE * tE - tPz * tPz);
972+
973+
if (tPt < 1e-9 || tMt < 1e-9) {
974+
mQout = mQside = mQlong = 0.f;
975+
return;
976+
}
977+
978+
const double betaL = tPz / tE;
979+
const double gammaL = tE / tMt;
980+
981+
const double kout1 = (p1.Px() * tPx + p1.Py() * tPy) / tPt;
982+
const double kside1 = (-p1.Px() * tPy + p1.Py() * tPx) / tPt;
983+
const double klong1 = gammaL * (p1.Pz() - betaL * p1.E());
984+
985+
const double kout2 = (p2.Px() * tPx + p2.Py() * tPy) / tPt;
986+
const double kside2 = (p2.Py() * tPx - p2.Px() * tPy) / tPt;
987+
const double klong2 = gammaL * (p2.Pz() - betaL * p2.E());
988+
989+
mQout = static_cast<float>(kout1 - kout2);
990+
mQside = static_cast<float>(kside1 - kside2);
991+
mQlong = static_cast<float>(klong1 - klong2);
992+
}
993+
923994
o2::framework::HistogramRegistry* mHistogramRegistry = nullptr;
924995
bool mUsePdgMass = true;
925996
double mPdgMass1 = 0.;
@@ -995,6 +1066,12 @@ class PairHistManager
9951066
bool mPlotDalitz = false;
9961067
bool mPlotDeltaEtaDeltaPhi = false;
9971068

1069+
bool mPlotBertschPratt = false;
1070+
1071+
float mQout = 0.f;
1072+
float mQside = 0.f;
1073+
float mQlong = 0.f;
1074+
9981075
float mDeltaEta = 0.f;
9991076
float mDeltaPhi = 0.f;
10001077

0 commit comments

Comments
 (0)