@@ -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
179187struct 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