Skip to content

Commit 1033bfe

Browse files
authored
Merge branch 'AliceO2Group:master' into NetChargeFluctuations3
2 parents 9a23fa8 + 685cf1f commit 1033bfe

27 files changed

Lines changed: 2142 additions & 512 deletions

Common/CCDB/ctpRateFetcher.cxx

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,7 @@ double ctpRateFetcher::pileUpCorrection(double triggerRate)
9595
if (mLHCIFdata == nullptr) {
9696
LOG(fatal) << "No filling" << std::endl;
9797
}
98-
auto bfilling = mLHCIFdata->getBunchFilling();
99-
std::vector<int> bcs = bfilling.getFilledBCs();
100-
double nbc = bcs.size();
98+
double nbc = mLHCIFdata->getBunchFilling().getPattern().count();
10199
double nTriggersPerFilledBC = triggerRate / nbc / constants::lhc::LHCRevFreq;
102100
double mu = -std::log(1 - nTriggersPerFilledBC);
103101
return mu * nbc * constants::lhc::LHCRevFreq;

Common/Tasks/centralityStudy.cxx

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ struct centralityStudy {
244244
histos.add("hNGlobalTracks", "hNGlobalTracks", kTH1D, {axisMultUltraFineGlobalTracks});
245245
histos.add("hNMFTTracks", "hNMFTTracks", kTH1D, {axisMultUltraFineMFTTracks});
246246
histos.add("hNPVContributors", "hNPVContributors", kTH1D, {axisMultUltraFinePVContributors});
247+
histos.add("hInteractionRate", "hInteractionRate", kTH1D, {axisInteractionRate});
247248

248249
histos.add("hFT0CvsPVz_Collisions", "hFT0CvsPVz_Collisions", kTProfile, {axisPVz});
249250
histos.add("hFT0AvsPVz_Collisions", "hFT0AvsPVz_Collisions", kTProfile, {axisPVz});
@@ -332,6 +333,8 @@ struct centralityStudy {
332333
histos.add("hFT0A_BCs", "hFT0A_BCs", kTH1D, {axisMultUltraFineFT0A});
333334
histos.add("hFT0M_BCs", "hFT0M_BCs", kTH1D, {axisMultUltraFineFT0M});
334335
histos.add("hFV0A_BCs", "hFV0A_BCs", kTH1D, {axisMultUltraFineFV0A});
336+
histos.add("hInteractionRate_BCs", "hInteractionRate_BCs", kTH1D, {axisInteractionRate});
337+
335338
histos.add("hFV0AT0C_BCs", "hFV0AT0C_BCs", kTH1D, {axisMultUltraFineFV0AT0C});
336339
histos.add("hScaledFT0M_BCs", "hScaledFT0M_BCs", kTH1D, {axisMultUltraFineScaledFT0M});
337340
histos.add("hScaledFV0AT0C_BCs", "hScaledFV0AT0C_BCs", kTH1D, {axisMultUltraFineScaledFV0AT0C});
@@ -494,6 +497,7 @@ struct centralityStudy {
494497
histPointers.insert({histPath + "hPVzProfileCoVsTime", histos.add((histPath + "hPVzProfileCoVsTime").c_str(), "hPVzProfileCoVsTime", {kTProfile, {{axisDeltaTimestamp}}})});
495498
histPointers.insert({histPath + "hPVzProfileBcVsTime", histos.add((histPath + "hPVzProfileBcVsTime").c_str(), "hPVzProfileBcVsTime", {kTProfile, {{axisDeltaTimestamp}}})});
496499
histPointers.insert({histPath + "hIRProfileVsTime", histos.add((histPath + "hIRProfileVsTime").c_str(), "hIRProfileVsTime", {kTProfile, {{axisDeltaTimestamp}}})});
500+
histPointers.insert({histPath + "hInteractionRate", histos.add((histPath + "hInteractionRate").c_str(), "hInteractionRate", {kTH1D, {{axisInteractionRate}}})});
497501
}
498502
}
499503

@@ -861,24 +865,26 @@ struct centralityStudy {
861865

862866
if constexpr (requires { collision.has_multBC(); }) {
863867
if (collision.has_multBC()) {
864-
initRun(collision);
865868
auto multbc = collision.template multBC_as<aod::MultBCs>();
866869
uint64_t bcTimestamp = multbc.timestamp();
867-
const float hoursAfterStartOfRun = static_cast<float>(bcTimestamp - startOfRunTimestamp) / 3600000.0;
868870
const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, irSource.value, irCrashOnNull) / 1000.; // kHz
869-
870-
if (studies.doTimeStudies && studies.doRunByRunHistograms) {
871-
getHist(TH2, histPath + "hFT0AVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0A());
872-
getHist(TH2, histPath + "hFT0CVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0C());
873-
getHist(TH2, histPath + "hFT0MVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0M());
874-
getHist(TH2, histPath + "hFV0AVsTime")->Fill(hoursAfterStartOfRun, collision.multFV0A());
875-
getHist(TH2, histPath + "hFV0AOuterVsTime")->Fill(hoursAfterStartOfRun, collision.multFV0AOuter());
876-
getHist(TH2, histPath + "hMFTTracksVsTime")->Fill(hoursAfterStartOfRun, collision.mftNtracks());
877-
getHist(TH2, histPath + "hNGlobalVsTime")->Fill(hoursAfterStartOfRun, collision.multNTracksGlobal());
878-
getHist(TH2, histPath + "hNTPVContributorsVsTime")->Fill(hoursAfterStartOfRun, collision.multPVTotalContributors());
879-
getHist(TProfile, histPath + "hPVzProfileCoVsTime")->Fill(hoursAfterStartOfRun, collision.multPVz());
880-
getHist(TProfile, histPath + "hPVzProfileBcVsTime")->Fill(hoursAfterStartOfRun, multbc.multFT0PosZ());
881-
getHist(TProfile, histPath + "hIRProfileVsTime")->Fill(hoursAfterStartOfRun, interactionRate);
871+
histos.fill(HIST("hInteractionRate"), interactionRate);
872+
if (studies.doRunByRunHistograms) {
873+
getHist(TH1, histPath + "hInteractionRate")->Fill(interactionRate);
874+
if (studies.doTimeStudies) {
875+
const float hoursAfterStartOfRun = static_cast<float>(bcTimestamp - startOfRunTimestamp) / 3600000.0;
876+
getHist(TH2, histPath + "hFT0AVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0A());
877+
getHist(TH2, histPath + "hFT0CVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0C());
878+
getHist(TH2, histPath + "hFT0MVsTime")->Fill(hoursAfterStartOfRun, collision.multFT0M());
879+
getHist(TH2, histPath + "hFV0AVsTime")->Fill(hoursAfterStartOfRun, collision.multFV0A());
880+
getHist(TH2, histPath + "hFV0AOuterVsTime")->Fill(hoursAfterStartOfRun, collision.multFV0AOuter());
881+
getHist(TH2, histPath + "hMFTTracksVsTime")->Fill(hoursAfterStartOfRun, collision.mftNtracks());
882+
getHist(TH2, histPath + "hNGlobalVsTime")->Fill(hoursAfterStartOfRun, collision.multNTracksGlobal());
883+
getHist(TH2, histPath + "hNTPVContributorsVsTime")->Fill(hoursAfterStartOfRun, collision.multPVTotalContributors());
884+
getHist(TProfile, histPath + "hPVzProfileCoVsTime")->Fill(hoursAfterStartOfRun, collision.multPVz());
885+
getHist(TProfile, histPath + "hPVzProfileBcVsTime")->Fill(hoursAfterStartOfRun, multbc.multFT0PosZ());
886+
getHist(TProfile, histPath + "hIRProfileVsTime")->Fill(hoursAfterStartOfRun, interactionRate);
887+
}
882888
}
883889
}
884890
}
@@ -1007,6 +1013,10 @@ struct centralityStudy {
10071013
histos.fill(HIST("hFV0A_BCs"), multbc.multFV0A() * scale.factorFV0A);
10081014
histos.fill(HIST("hFV0AT0C_BCs"), (multbc.multFV0A() + multbc.multFT0C()) * scale.factorFV0AT0C);
10091015

1016+
uint64_t bcTimestamp = multbc.timestamp();
1017+
const float interactionRate = mRateFetcher.fetch(ccdb.service, bcTimestamp, mRunNumber, irSource.value, irCrashOnNull) / 1000.; // kHz
1018+
histos.fill(HIST("hInteractionRate_BCs"), interactionRate);
1019+
10101020
if (studies.do2DPlots) {
10111021
histos.fill(HIST("hFT0AVsFT0C_BCs"), multbc.multFT0C() * scale.factorFT0C, multbc.multFT0A() * scale.factorFT0A);
10121022
histos.fill(HIST("hFV0AVsFT0C_BCs"), multbc.multFT0C() * scale.factorFT0C, multbc.multFV0A() * scale.factorFV0A);

PWGCF/Femto/Core/closeTripletRejection.h

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,21 @@ constexpr char PrefixTrack2V0Se[] = "CPR_Track2V0/SE/";
4646
constexpr char PrefixTrack1V0Me[] = "CPR_Track1V0/ME/";
4747
constexpr char PrefixTrack2V0Me[] = "CPR_Track2V0/ME/";
4848

49+
constexpr char PrefixTrack1CascadeSe[] = "CPR_Track1Cascade/SE/";
50+
constexpr char PrefixTrack2CascadeSe[] = "CPR_Track2Cascade/SE/";
51+
constexpr char PrefixTrack1CascadeMe[] = "CPR_Track1Cascade/ME/";
52+
constexpr char PrefixTrack2CascadeMe[] = "CPR_Track2Cascade/ME/";
53+
54+
constexpr char PrefixTrack1V0DaughterSe[] = "CPR_Track1V0Dau/SE/";
55+
constexpr char PrefixTrack2V0DaughterSe[] = "CPR_Track2V0Dau/SE/";
56+
constexpr char PrefixTrack1V0DaughterMe[] = "CPR_Track1V0Dau/ME/";
57+
constexpr char PrefixTrack2V0DaughterMe[] = "CPR_Track2V0Dau/ME/";
58+
59+
constexpr char PrefixTrack1CascadeBachelorSe[] = "CPR_Track1CascadeBachelor/SE/";
60+
constexpr char PrefixTrack2CascadeBachelorSe[] = "CPR_TrackCascadeBachelor/SE/";
61+
constexpr char PrefixTrack1CascadeBachelorMe[] = "CPR_TrackCascadeBachelor/ME/";
62+
constexpr char PrefixTrack2CascadeBachelorMe[] = "CPR_TrackCascadeBachelor/ME/";
63+
4964
template <const char* prefixTrack1Track2,
5065
const char* prefixTrack2Track3,
5166
const char* prefixTrack1Track3>
@@ -151,6 +166,64 @@ class CloseTripletRejectionTrackTrackV0
151166
closepairrejection::ClosePairRejectionTrackV0<prefixTrack2V0> mCtrTrack2V0;
152167
};
153168

169+
template <const char* prefixTrack1Track2,
170+
const char* prefixTrack1Bachelor,
171+
const char* prefixTrack1V0Daughter,
172+
const char* prefixTrack2Bachelor,
173+
const char* prefixTrack2V0Daughter>
174+
class CloseTripletRejectionTrackTrackCascade
175+
{
176+
public:
177+
CloseTripletRejectionTrackTrackCascade() = default;
178+
~CloseTripletRejectionTrackTrackCascade() = default;
179+
180+
template <typename T1, typename T2, typename T3>
181+
void init(o2::framework::HistogramRegistry* registry,
182+
std::map<closepairrejection::CprHist, std::vector<o2::framework::AxisSpec>> const& specs,
183+
std::map<closepairrejection::CprHist, std::vector<o2::framework::AxisSpec>> const& specsBachelor,
184+
std::map<closepairrejection::CprHist, std::vector<o2::framework::AxisSpec>> const& specsV0Daughter,
185+
T1 const& confCpr,
186+
T2 const& confCprBachelor,
187+
T3 const& confCprV0Daughter,
188+
int absChargeTrack1,
189+
int absChargeTrack2)
190+
{
191+
mCtrTrack12.init(registry, specs, confCpr, absChargeTrack1, absChargeTrack2);
192+
mCtrTrack1Cascade.init(registry, specsBachelor, specsV0Daughter, confCprBachelor, confCprV0Daughter, absChargeTrack1);
193+
mCtrTrack2Cascade.init(registry, specsBachelor, specsV0Daughter, confCprBachelor, confCprV0Daughter, absChargeTrack2);
194+
}
195+
196+
void setMagField(float magField)
197+
{
198+
mCtrTrack12.setMagField(magField);
199+
mCtrTrack1Cascade.setMagField(magField);
200+
mCtrTrack2Cascade.setMagField(magField);
201+
}
202+
template <typename T1, typename T2, typename T3, typename T4>
203+
void setTriplet(T1 const& track1, T2 const& track2, T3 const& cascade, T4 const& trackTable)
204+
{
205+
mCtrTrack12.setPair(track1, track2, trackTable);
206+
mCtrTrack1Cascade.setPair(track1, cascade, trackTable);
207+
mCtrTrack2Cascade.setPair(track2, cascade, trackTable);
208+
}
209+
bool isCloseTriplet() const
210+
{
211+
return mCtrTrack12.isClosePair() || mCtrTrack1Cascade.isClosePair() || mCtrTrack2Cascade.isClosePair();
212+
}
213+
214+
void fill(float q3)
215+
{
216+
mCtrTrack12.fill(q3);
217+
mCtrTrack1Cascade.fill(q3);
218+
mCtrTrack2Cascade.fill(q3);
219+
}
220+
221+
private:
222+
closepairrejection::ClosePairRejectionTrackTrack<prefixTrack1Track2> mCtrTrack12;
223+
closepairrejection::ClosePairRejectionTrackCascade<prefixTrack1Bachelor, prefixTrack1V0Daughter> mCtrTrack1Cascade;
224+
closepairrejection::ClosePairRejectionTrackCascade<prefixTrack2Bachelor, prefixTrack2V0Daughter> mCtrTrack2Cascade;
225+
};
226+
154227
}; // namespace closetripletrejection
155228
}; // namespace o2::analysis::femto
156229
#endif // PWGCF_FEMTO_CORE_CLOSETRIPLETREJECTION_H_

PWGCF/Femto/Core/pairHistManager.h

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#include <map>
4040
#include <string>
4141
#include <string_view>
42+
#include <tuple>
4243
#include <unordered_set>
4344
#include <vector>
4445

@@ -111,7 +112,11 @@ enum PairHist {
111112

112113
// angular
113114
kDeltaEtaDeltaPhi,
114-
115+
// Bertsch-Pratt 3D decomposition in LCMS
116+
kQout,
117+
kQside,
118+
kQlong,
119+
kQoutQsideQlong,
115120
kPairHistogramLast
116121
};
117122

@@ -174,6 +179,10 @@ struct ConfPairBinning : o2::framework::ConfigurableGroup {
174179
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)"};
175180
o2::framework::ConfigurableAxis binningDeltaEta{"binningDeltaEta", {{35, -1.6, 1.6}}, "Delta eta"};
176181
o2::framework::ConfigurableAxis binningDeltaPhi{"binningDeltaPhi", {{35, -o2::constants::math::PIHalf, 3 * o2::constants::math::PIHalf}}, "Delta phi"};
182+
o2::framework::Configurable<bool> plotBertschPratt{"plotBertschPratt", false, "Enable 1D projections and 3D (q_out, q_side, q_long) Bertsch-Pratt histograms in LCMS"};
183+
o2::framework::ConfigurableAxis qout{"qout", {{300, -1.5f, 1.5f}}, "q_{out} (GeV/c) in LCMS"};
184+
o2::framework::ConfigurableAxis qside{"qside", {{300, -1.5f, 1.5f}}, "q_{side} (GeV/c) in LCMS"};
185+
o2::framework::ConfigurableAxis qlong{"qlong", {{300, -1.5f, 1.5f}}, "q_{long} (GeV/c) in LCMS"};
177186
};
178187

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

255269
#define PAIR_HIST_ANALYSIS_MAP(confAnalysis, confMixing) \
@@ -294,7 +308,11 @@ constexpr std::array<histmanager::HistInfo<PairHist>, kPairHistogramLast>
294308
{kMeMixingWindowRaw, {confMixing.particleBinning}}, \
295309
{kMeMixingWindowEffective, {confMixing.particleBinning}}, \
296310
{kMeNpart1VsNpart2, {confMixing.particleBinning, confMixing.particleBinning}}, \
297-
{kMeVtz1VsMult1VsCent1VsVtz2VsMult2VsCent2, {confMixing.vtxBins, confMixing.multBins, confMixing.centBins, confMixing.vtxBins, confMixing.multBins, confMixing.centBins}},
311+
{kMeVtz1VsMult1VsCent1VsVtz2VsMult2VsCent2, {confMixing.vtxBins, confMixing.multBins, confMixing.centBins, confMixing.vtxBins, confMixing.multBins, confMixing.centBins}}, \
312+
{kQout, {confAnalysis.qout}}, \
313+
{kQside, {confAnalysis.qside}}, \
314+
{kQlong, {confAnalysis.qlong}}, \
315+
{kQoutQsideQlong, {confAnalysis.qout, confAnalysis.qside, confAnalysis.qlong}},
298316

299317
#define PAIR_HIST_MC_MAP(conf) \
300318
{kTrueKstarVsKstar, {conf.kstar, conf.kstar}}, \
@@ -388,6 +406,7 @@ class PairHistManager
388406

389407
mPlotDalitz = ConfPairBinning.plotDalitz.value;
390408
mPlotDeltaEtaDeltaPhi = ConfPairBinning.plotDeltaEtaDeltaPhi.value;
409+
mPlotBertschPratt = ConfPairBinning.plotBertschPratt.value;
391410

392411
// transverse mass type
393412
mMtType = static_cast<modes::TransverseMassType>(ConfPairBinning.transverseMassType.value);
@@ -488,6 +507,10 @@ class PairHistManager
488507
// set kstar
489508
mKstar = getKstar(mParticle1, mParticle2);
490509

510+
if (mPlotBertschPratt) {
511+
std::tie(mQout, mQside, mQlong) = computeBertschPrattLCMS(mParticle1, mParticle2);
512+
}
513+
491514
if (mPlotDeltaEtaDeltaPhi) {
492515
mDeltaEta = particle1.eta() - particle2.eta();
493516
mDeltaPhi = RecoDecay::constrainAngle(particle1.phi() - particle2.phi(), -o2::constants::math::PIHalf);
@@ -735,6 +758,12 @@ class PairHistManager
735758
if (mPlotDeltaEtaDeltaPhi) {
736759
mHistogramRegistry->add(analysisDir + getHistNameV2(kDeltaEtaDeltaPhi, HistTable), getHistDesc(kDeltaEtaDeltaPhi, HistTable), getHistType(kDeltaEtaDeltaPhi, HistTable), {Specs.at(kDeltaEtaDeltaPhi)});
737760
}
761+
if (mPlotBertschPratt) {
762+
mHistogramRegistry->add(analysisDir + getHistNameV2(kQout, HistTable), getHistDesc(kQout, HistTable), getHistType(kQout, HistTable), {Specs.at(kQout)});
763+
mHistogramRegistry->add(analysisDir + getHistNameV2(kQside, HistTable), getHistDesc(kQside, HistTable), getHistType(kQside, HistTable), {Specs.at(kQside)});
764+
mHistogramRegistry->add(analysisDir + getHistNameV2(kQlong, HistTable), getHistDesc(kQlong, HistTable), getHistType(kQlong, HistTable), {Specs.at(kQlong)});
765+
mHistogramRegistry->add(analysisDir + getHistNameV2(kQoutQsideQlong, HistTable), getHistDesc(kQoutQsideQlong, HistTable), getHistType(kQoutQsideQlong, HistTable), {Specs.at(kQoutQsideQlong)});
766+
}
738767
}
739768

740769
void initMc(std::map<PairHist, std::vector<o2::framework::AxisSpec>> const& Specs)
@@ -850,6 +879,12 @@ class PairHistManager
850879
if (mPlotDeltaEtaDeltaPhi) {
851880
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kDeltaEtaDeltaPhi, HistTable)), mDeltaPhi, mDeltaEta);
852881
}
882+
if (mPlotBertschPratt) {
883+
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kQout, HistTable)), mQout);
884+
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kQside, HistTable)), mQside);
885+
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kQlong, HistTable)), mQlong);
886+
mHistogramRegistry->fill(HIST(prefix) + HIST(AnalysisDir) + HIST(getHistName(kQoutQsideQlong, HistTable)), mQout, mQside, mQlong);
887+
}
853888
}
854889

855890
void fillMc()
@@ -920,6 +955,43 @@ class PairHistManager
920955
return static_cast<float>(0.5 * std::sqrt(std::max(0.0, kallen) / s));
921956
}
922957

958+
std::tuple<float, float, float> computeBertschPrattLCMS(ROOT::Math::PtEtaPhiMVector const& part1, ROOT::Math::PtEtaPhiMVector const& part2)
959+
{
960+
const ROOT::Math::PxPyPzEVector p1(part1);
961+
const ROOT::Math::PxPyPzEVector p2(part2);
962+
const ROOT::Math::PxPyPzEVector pSum = p1 + p2;
963+
964+
const double tPx = pSum.Px();
965+
const double tPy = pSum.Py();
966+
const double tPz = pSum.Pz();
967+
const double tE = pSum.E();
968+
969+
const double tPt = std::sqrt(tPx * tPx + tPy * tPy);
970+
const double tMt = std::sqrt(tE * tE - tPz * tPz);
971+
972+
static constexpr double kMinTransverseMomentum = 1e-9;
973+
if (tPt < kMinTransverseMomentum || tMt < kMinTransverseMomentum) {
974+
return {0.0, 0.0, 0.0};
975+
}
976+
977+
const double betaL = tPz / tE;
978+
const double gammaL = tE / tMt;
979+
980+
const double kout1 = (p1.Px() * tPx + p1.Py() * tPy) / tPt;
981+
const double kside1 = (-p1.Px() * tPy + p1.Py() * tPx) / tPt;
982+
const double klong1 = gammaL * (p1.Pz() - betaL * p1.E());
983+
984+
const double kout2 = (p2.Px() * tPx + p2.Py() * tPy) / tPt;
985+
const double kside2 = (p2.Py() * tPx - p2.Px() * tPy) / tPt;
986+
const double klong2 = gammaL * (p2.Pz() - betaL * p2.E());
987+
988+
float qOut = static_cast<float>(kout1 - kout2);
989+
float qSide = static_cast<float>(kside1 - kside2);
990+
float qLong = static_cast<float>(klong1 - klong2);
991+
992+
return {qOut, qSide, qLong};
993+
}
994+
923995
o2::framework::HistogramRegistry* mHistogramRegistry = nullptr;
924996
bool mUsePdgMass = true;
925997
double mPdgMass1 = 0.;
@@ -995,6 +1067,12 @@ class PairHistManager
9951067
bool mPlotDalitz = false;
9961068
bool mPlotDeltaEtaDeltaPhi = false;
9971069

1070+
bool mPlotBertschPratt = false;
1071+
1072+
float mQout = 0.f;
1073+
float mQside = 0.f;
1074+
float mQlong = 0.f;
1075+
9981076
float mDeltaEta = 0.f;
9991077
float mDeltaPhi = 0.f;
10001078

0 commit comments

Comments
 (0)