Skip to content

Commit 360661e

Browse files
[PWGCF,PWGHF] Refactor and complete the charm femtoscopy framework (#14187)
1 parent 753f62e commit 360661e

File tree

9 files changed

+1716
-885
lines changed

9 files changed

+1716
-885
lines changed

PWGCF/DataModel/FemtoDerived.h

Lines changed: 171 additions & 10 deletions
Large diffs are not rendered by default.

PWGCF/FemtoDream/Core/femtoDreamContainer.h

Lines changed: 14 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,12 @@ class FemtoDreamContainer
7272
/// \param kTAxis axis object for the kT axis
7373
/// \param mTAxis axis object for the mT axis
7474

75-
template <bool isHF = false, typename T>
75+
template <typename T>
7676
void init_base(std::string folderName, std::string femtoObs,
7777
T& femtoObsAxis, T& pTAxis, T& kTAxis, T& mTAxis, T& multAxis, T& multPercentileAxis,
7878
T& /*kstarAxis4D*/, T& mTAxis4D, T& multAxis4D, T& multPercentileAxis4D,
7979
bool use4dplots, bool extendedplots, T& mP2Axis)
8080
{
81-
82-
if constexpr (isHF) {
83-
mHistogramRegistry->add((folderName + "/relPairkstarmP2").c_str(), ("; " + femtoObs + "; Mass (GeV)").c_str(), kTH2F, {femtoObsAxis, mP2Axis});
84-
}
85-
8681
mHistogramRegistry->add((folderName + "/relPairDist").c_str(), ("; " + femtoObs + "; Entries").c_str(), kTH1F, {femtoObsAxis});
8782
mHistogramRegistry->add((folderName + "/relPairkT").c_str(), "; #it{k}_{T} (GeV/#it{c}); Entries", kTH1F, {kTAxis});
8883
mHistogramRegistry->add((folderName + "/relPairkstarkT").c_str(), ("; " + femtoObs + "; #it{k}_{T} (GeV/#it{c})").c_str(), kTH2F, {femtoObsAxis, kTAxis});
@@ -138,7 +133,7 @@ class FemtoDreamContainer
138133
/// \param kTBins kT binning for the histograms
139134
/// \param mTBins mT binning for the histograms
140135
/// \param isMC add Monte Carlo truth histograms to the output file
141-
template <bool isHF = false, typename T>
136+
template <typename T>
142137
void init(HistogramRegistry* registry,
143138
T& kstarBins, T& pTBins, T& kTBins, T& mTBins, T& multBins, T& /*multPercentileBins*/,
144139
T& kstarBins4D, T& mTBins4D, T& multBins4D, T& multPercentileBins4D,
@@ -168,17 +163,17 @@ class FemtoDreamContainer
168163

169164
std::string folderName = static_cast<std::string>(mFolderSuffix[mEventType]) + static_cast<std::string>(o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kRecon]);
170165

171-
init_base<isHF>(folderName, femtoObs,
172-
femtoObsAxis, pTAxis, kTAxis, mTAxis, multAxis, multPercentileAxis,
173-
kstarAxis4D, mTAxis4D, multAxis4D, multPercentileAxis4D,
174-
use4dplots, extendedplots, mP2Axis);
166+
init_base(folderName, femtoObs,
167+
femtoObsAxis, pTAxis, kTAxis, mTAxis, multAxis, multPercentileAxis,
168+
kstarAxis4D, mTAxis4D, multAxis4D, multPercentileAxis4D,
169+
use4dplots, extendedplots, mP2Axis);
175170

176171
if (isMC) {
177172
folderName = static_cast<std::string>(mFolderSuffix[mEventType]) + static_cast<std::string>(o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kTruth]);
178-
init_base<isHF>(folderName, femtoObs,
179-
femtoObsAxis, pTAxis, kTAxis, mTAxis, multAxis, multPercentileAxis,
180-
kstarAxis4D, mTAxis4D, multAxis4D, multPercentileAxis4D,
181-
use4dplots, extendedplots, mP2Axis);
173+
init_base(folderName, femtoObs,
174+
femtoObsAxis, pTAxis, kTAxis, mTAxis, multAxis, multPercentileAxis,
175+
kstarAxis4D, mTAxis4D, multAxis4D, multPercentileAxis4D,
176+
use4dplots, extendedplots, mP2Axis);
182177
init_MC(folderName, femtoObs, femtoObsAxis, multAxis, mTAxis, smearingByOrigin);
183178
}
184179
}
@@ -276,21 +271,10 @@ class FemtoDreamContainer
276271
/// \param part1 Particle one
277272
/// \param part2 Particle two
278273
/// \param mult Multiplicity of the event
279-
template <o2::aod::femtodreamMCparticle::MCType mc, bool isHF = false, typename T1, typename T2>
274+
template <o2::aod::femtodreamMCparticle::MCType mc, typename T1, typename T2>
280275
void setPair_base(const float femtoObs, const float mT, T1 const& part1, T2 const& part2, const int mult, const float multPercentile, bool use4dplots, bool extendedplots)
281276
{
282277
const float kT = FemtoDreamMath::getkT(part1, mMassOne, part2, mMassTwo);
283-
if constexpr (isHF) {
284-
float mP2 = 0.0;
285-
if (part2.candidateSelFlag() == o2::aod::fdhf::dplusToPiKPi) {
286-
mP2 = part2.m(std::array{o2::constants::physics::MassPiPlus, o2::constants::physics::MassKPlus, o2::constants::physics::MassPiPlus});
287-
} else if (part2.candidateSelFlag() == o2::aod::fdhf::lcToPKPi) {
288-
mP2 = part2.m(std::array{o2::constants::physics::MassProton, o2::constants::physics::MassKPlus, o2::constants::physics::MassPiPlus});
289-
} else if (part2.candidateSelFlag() == o2::aod::fdhf::lcToPiKP) {
290-
mP2 = part2.m(std::array{o2::constants::physics::MassPiPlus, o2::constants::physics::MassKPlus, o2::constants::physics::MassProton});
291-
}
292-
mHistogramRegistry->fill(HIST(mFolderSuffix[mEventType]) + HIST(o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST("/relPairkstarmP2"), femtoObs, mP2);
293-
}
294278
mHistogramRegistry->fill(HIST(mFolderSuffix[mEventType]) + HIST(o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST("/relPairDist"), femtoObs);
295279
mHistogramRegistry->fill(HIST(mFolderSuffix[mEventType]) + HIST(o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST("/relPairkT"), kT);
296280
mHistogramRegistry->fill(HIST(mFolderSuffix[mEventType]) + HIST(o2::aod::femtodreamMCparticle::MCTypeName[mc]) + HIST("/relPairkstarkT"), femtoObs, kT);
@@ -361,7 +345,7 @@ class FemtoDreamContainer
361345
const float mT = FemtoDreamMath::getmT(part1, mMassOne, part2, mMassTwo);
362346

363347
if (mHistogramRegistry) {
364-
setPair_base<o2::aod::femtodreamMCparticle::MCType::kRecon, isHF>(femtoObs, mT, part1, part2, mult, multPercentile, use4dplots, extendedplots);
348+
setPair_base<o2::aod::femtodreamMCparticle::MCType::kRecon>(femtoObs, mT, part1, part2, mult, multPercentile, use4dplots, extendedplots);
365349

366350
if constexpr (isMC) {
367351
if constexpr (isHF) {
@@ -372,7 +356,7 @@ class FemtoDreamContainer
372356
const float mTMC = FemtoDreamMath::getmT(part1.fdMCParticle(), mMassOne, part2, mMassTwo);
373357

374358
if (std::abs(part1.fdMCParticle().pdgMCTruth()) == mPDGOne) { // Note: all pair-histogramms are filled with MC truth information ONLY in case of non-fake candidates
375-
setPair_base<o2::aod::femtodreamMCparticle::MCType::kTruth, isHF>(femtoObsMC, mTMC, part1.fdMCParticle(), part2, mult, multPercentile, use4dplots, extendedplots);
359+
setPair_base<o2::aod::femtodreamMCparticle::MCType::kTruth>(femtoObsMC, mTMC, part1.fdMCParticle(), part2, mult, multPercentile, use4dplots, extendedplots);
376360
setPair_MC(femtoObsMC, femtoObs, mT, mult, part1.fdMCParticle().partOriginMCTruth(), part2.flagMc(), smearingByOrigin);
377361
} else {
378362
mHistogramRegistry->fill(HIST(mFolderSuffix[mEventType]) + HIST(o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kTruth]) + HIST("/hFakePairsCounter"), 0);
@@ -386,7 +370,7 @@ class FemtoDreamContainer
386370
const float mTMC = FemtoDreamMath::getmT(part1.fdMCParticle(), mMassOne, part2.fdMCParticle(), mMassTwo);
387371

388372
if (std::abs(part1.fdMCParticle().pdgMCTruth()) == mPDGOne && std::abs(part2.fdMCParticle().pdgMCTruth()) == mPDGTwo) { // Note: all pair-histogramms are filled with MC truth information ONLY in case of non-fake candidates
389-
setPair_base<o2::aod::femtodreamMCparticle::MCType::kTruth, isHF>(femtoObsMC, mTMC, part1.fdMCParticle(), part2.fdMCParticle(), mult, multPercentile, use4dplots, extendedplots);
373+
setPair_base<o2::aod::femtodreamMCparticle::MCType::kTruth>(femtoObsMC, mTMC, part1.fdMCParticle(), part2.fdMCParticle(), mult, multPercentile, use4dplots, extendedplots);
390374
setPair_MC(femtoObsMC, femtoObs, mT, mult, part1.fdMCParticle().partOriginMCTruth(), part2.fdMCParticle().partOriginMCTruth(), smearingByOrigin);
391375
} else {
392376
mHistogramRegistry->fill(HIST(mFolderSuffix[mEventType]) + HIST(o2::aod::femtodreamMCparticle::MCTypeName[o2::aod::femtodreamMCparticle::MCType::kTruth]) + HIST("/hFakePairsCounter"), 0);

PWGCF/FemtoDream/Core/femtoDreamDetaDphiStar.h

Lines changed: 141 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,6 @@ namespace femtoDream
3737
/// \tparam partOne Type of particle 1 (Track/V0/Cascade/...)
3838
/// \tparam partTwo Type of particle 2 (Track/V0/Cascade/...)
3939

40-
enum ProngCharmHadron {
41-
Prong0 = 0,
42-
Prong1 = 1,
43-
Prong2 = 2,
44-
Nprongs = 3
45-
};
46-
4740
template <o2::aod::femtodreamparticle::ParticleType partOne, o2::aod::femtodreamparticle::ParticleType partTwo>
4841
class FemtoDreamDetaDphiStar
4942
{
@@ -118,8 +111,14 @@ class FemtoDreamDetaDphiStar
118111
}
119112
}
120113
}
121-
if constexpr (mPartOneType == o2::aod::femtodreamparticle::ParticleType::kTrack && mPartTwoType == o2::aod::femtodreamparticle::ParticleType::kCharmHadron) {
122-
for (int i = 0; i < Nprongs; i++) {
114+
if constexpr (mPartOneType == o2::aod::femtodreamparticle::ParticleType::kTrack && (mPartTwoType == o2::aod::femtodreamparticle::ParticleType::kCharmHadron3Prong || mPartTwoType == o2::aod::femtodreamparticle::ParticleType::kCharmHadron2Prong)) {
115+
int nProng = 0;
116+
if (mPartTwoType == o2::aod::femtodreamparticle::ParticleType::kCharmHadron3Prong)
117+
nProng = 3;
118+
if (mPartTwoType == o2::aod::femtodreamparticle::ParticleType::kCharmHadron2Prong)
119+
nProng = 2;
120+
121+
for (int i = 0; i < nProng; i++) {
123122
std::string dirName = static_cast<std::string>(dirNames[2]);
124123
histdetadpi[i][0] = mHistogramRegistry->add<TH2>((dirName + static_cast<std::string>(histNames[0][i]) + static_cast<std::string>(histNameSEorME[meORse])).c_str(), "; #Delta #eta; #Delta #phi^{*}", kTH2F, {{100, -0.15, 0.15}, {100, -0.15, 0.15}});
125124
histdetadpi[i][1] = mHistogramRegistry->add<TH2>((dirName + static_cast<std::string>(histNames[1][i]) + static_cast<std::string>(histNameSEorME[meORse])).c_str(), "; #Delta #eta; #Delta #phi^{*}", kTH2F, {{100, -0.15, 0.15}, {100, -0.15, 0.15}});
@@ -500,50 +499,102 @@ class FemtoDreamDetaDphiStar
500499
}
501500

502501
return pass;
503-
} else if constexpr (mPartOneType == o2::aod::femtodreamparticle::ParticleType::kTrack && mPartTwoType == o2::aod::femtodreamparticle::ParticleType::kCharmHadron) {
502+
} else if constexpr (mPartOneType == o2::aod::femtodreamparticle::ParticleType::kTrack && (mPartTwoType == o2::aod::femtodreamparticle::ParticleType::kCharmHadron3Prong || mPartTwoType == o2::aod::femtodreamparticle::ParticleType::kCharmHadronDstar)) { // to be fixed for Dstar
504503
// check if provided particles are in agreement with the class instantiation
505-
if (part2.candidateSelFlag() < o2::aod::fdhf::lcToPKPi) {
504+
if (!part2.candidateSelFlag()) {
506505
LOG(fatal) << "FemtoDreamDetaDphiStar: passed arguments don't agree with FemtoDreamDetaDphiStar instantiation! Please provide Charm Hadron candidates.";
507506
return false;
508507
}
509508

510509
bool pass = false;
511510

512-
for (int i = 0; i < Nprongs; ++i) {
511+
for (int i = 0; i < 3; ++i) {
513512
double deta, dphiAvg, dphi_AT_PV, dphi_AT_SpecificRadii, daughterEta, daughterPhi;
514513
bool sameCharge = false;
515-
daughterEta = -999.;
516-
daughterPhi = -999.;
517-
518-
switch (i) {
519-
case Prong0:
520-
daughterEta = part2.prong0Eta();
521-
daughterPhi = part2.prong0Phi();
522-
deta = part1.eta() - daughterEta;
523-
dphi_AT_PV = part1.phi() - daughterPhi;
524-
dphi_AT_SpecificRadii = PhiAtSpecificRadiiTPC(part1, radiiTPC) - PhiAtSpecificRadiiTPC<true, 0>(part2, radiiTPC);
525-
dphiAvg = AveragePhiStar<true>(part1, part2, 0, &sameCharge);
526-
// histdetadpi[0][0]->Fill(deta, dphiAvg);
527-
break;
528-
case Prong1:
529-
daughterEta = part2.prong1Eta();
530-
daughterPhi = part2.prong1Phi();
531-
deta = part1.eta() - daughterEta;
532-
dphi_AT_PV = part1.phi() - daughterPhi;
533-
dphi_AT_SpecificRadii = PhiAtSpecificRadiiTPC(part1, radiiTPC) - PhiAtSpecificRadiiTPC<true, 1>(part2, radiiTPC);
534-
dphiAvg = AveragePhiStar<true>(part1, part2, 1, &sameCharge);
535-
// histdetadpi[1][0]->Fill(deta, dphiAvg);
536-
break;
537-
case Prong2:
538-
daughterEta = part2.prong2Eta();
539-
daughterPhi = part2.prong2Phi();
540-
deta = part1.eta() - daughterEta;
541-
dphi_AT_PV = part1.phi() - daughterPhi;
542-
dphi_AT_SpecificRadii = PhiAtSpecificRadiiTPC(part1, radiiTPC) - PhiAtSpecificRadiiTPC<true, 2>(part2, radiiTPC);
543-
dphiAvg = AveragePhiStar<true>(part1, part2, 2, &sameCharge);
544-
// histdetadpi[2][0]->Fill(deta, dphiAvg);
545-
break;
514+
daughterEta = part2.prong2Eta();
515+
daughterPhi = part2.prong2Phi();
516+
deta = part1.eta() - daughterEta;
517+
dphi_AT_PV = part1.phi() - daughterPhi;
518+
dphi_AT_SpecificRadii = PhiAtSpecificRadiiTPC(part1, radiiTPC) - PhiAtSpecificRadiiTPC<true, 2>(part2, radiiTPC);
519+
dphiAvg = AveragePhiStar<true>(part1, part2, 2, &sameCharge);
520+
521+
if (Q3 == 999) {
522+
histdetadpi[i][0]->Fill(deta, dphiAvg);
523+
histdetadpi[i][2]->Fill(deta, dphi_AT_PV);
524+
if (fillQA) {
525+
histdetadpi_eta[i]->Fill(deta, dphiAvg, part1.eta(), daughterEta);
526+
histdetadpi_phi[i]->Fill(deta, dphiAvg, part1.phi(), daughterPhi);
527+
}
528+
} else if (Q3 < upperQ3LimitForPlotting) {
529+
histdetadpi[i][0]->Fill(deta, dphiAvg);
530+
histdetadpi[i][2]->Fill(deta, dphi_AT_PV);
531+
if (fillQA) {
532+
histdetadpi_eta[i]->Fill(deta, dphiAvg, part1.eta(), daughterEta);
533+
histdetadpi_phi[i]->Fill(deta, dphiAvg, part1.phi(), daughterPhi);
534+
}
546535
}
536+
537+
if (atWhichRadiiToSelect == 1) {
538+
if (std::pow(dphiAvg, 2) / std::pow(deltaPhiMax, 2) + std::pow(deta, 2) / std::pow(deltaEtaMax, 2) < 1.) {
539+
pass = true;
540+
} else {
541+
if (Q3 == 999) {
542+
histdetadpi[i][1]->Fill(deta, dphiAvg);
543+
histdetadpi[i][3]->Fill(deta, dphi_AT_PV);
544+
} else if (Q3 < upperQ3LimitForPlotting) {
545+
histdetadpi[i][1]->Fill(deta, dphiAvg);
546+
histdetadpi[i][3]->Fill(deta, dphi_AT_PV);
547+
}
548+
}
549+
} else if (atWhichRadiiToSelect == 0) {
550+
if (std::pow(dphi_AT_PV, 2) / std::pow(deltaPhiMax, 2) + std::pow(deta, 2) / std::pow(deltaEtaMax, 2) < 1.) {
551+
pass = true;
552+
} else {
553+
if (Q3 == 999) {
554+
histdetadpi[i][1]->Fill(deta, dphiAvg);
555+
histdetadpi[i][3]->Fill(deta, dphi_AT_PV);
556+
} else if (Q3 < upperQ3LimitForPlotting) {
557+
histdetadpi[i][1]->Fill(deta, dphiAvg);
558+
histdetadpi[i][3]->Fill(deta, dphi_AT_PV);
559+
}
560+
}
561+
} else if (atWhichRadiiToSelect == 2) {
562+
if (std::pow(dphi_AT_SpecificRadii, 2) / std::pow(deltaPhiMax, 2) + std::pow(deta, 2) / std::pow(deltaEtaMax, 2) < 1.) {
563+
pass = true;
564+
} else {
565+
if (Q3 == 999) {
566+
histdetadpi[i][1]->Fill(deta, dphiAvg);
567+
histdetadpi[i][3]->Fill(deta, dphi_AT_PV);
568+
} else if (Q3 < upperQ3LimitForPlotting) {
569+
histdetadpi[i][1]->Fill(deta, dphiAvg);
570+
histdetadpi[i][3]->Fill(deta, dphi_AT_PV);
571+
}
572+
}
573+
}
574+
}
575+
576+
return pass;
577+
578+
} else if constexpr (mPartOneType == o2::aod::femtodreamparticle::ParticleType::kTrack && mPartTwoType == o2::aod::femtodreamparticle::ParticleType::kCharmHadron2Prong) {
579+
// check if provided particles are in agreement with the class instantiation
580+
if (!part2.candidateSelFlag()) {
581+
LOG(fatal) << "FemtoDreamDetaDphiStar: passed arguments don't agree with FemtoDreamDetaDphiStar instantiation! Please provide Charm Hadron candidates.";
582+
return false;
583+
}
584+
585+
bool pass = false;
586+
587+
for (int i = 0; i < 2; ++i) {
588+
double deta, dphiAvg, dphi_AT_PV, dphi_AT_SpecificRadii, daughterEta, daughterPhi;
589+
bool sameCharge = false;
590+
daughterEta = part2.prong1Eta();
591+
daughterPhi = part2.prong1Phi();
592+
deta = part1.eta() - daughterEta;
593+
dphi_AT_PV = part1.phi() - daughterPhi;
594+
dphi_AT_SpecificRadii = PhiAtSpecificRadiiTPC(part1, radiiTPC) - PhiAtSpecificRadiiTPC<true, 1>(part2, radiiTPC);
595+
dphiAvg = AveragePhiStar<true>(part1, part2, 1, &sameCharge);
596+
// histdetadpi[1][0]->Fill(deta, dphiAvg);
597+
547598
if (Q3 == 999) {
548599
histdetadpi[i][0]->Fill(deta, dphiAvg);
549600
histdetadpi[i][2]->Fill(deta, dphi_AT_PV);
@@ -780,27 +831,25 @@ class FemtoDreamDetaDphiStar
780831
float PhiAtSpecificRadiiTPC(const T& part, float radii)
781832
{
782833
int charge = 0;
783-
float phi0, pt;
834+
float phi0 = 0.f;
835+
float pt = 0.f;
836+
784837
if constexpr (isHF) {
785-
switch (prong) {
786-
case Prong0:
787-
charge = part.charge(); // charge calculation according to 3-prong decay, Lc^+ --> P^+ + K^- + pi^+
788-
phi0 = part.prong0Phi();
789-
pt = part.prong0Pt();
790-
break;
791-
case Prong1:
792-
charge = -part.charge();
793-
phi0 = part.prong1Phi();
794-
pt = part.prong1Pt();
795-
break;
796-
case Prong2:
797-
charge = part.charge();
798-
phi0 = part.prong2Phi();
799-
pt = part.prong2Pt();
800-
break;
801-
default:
802-
// Handle invalid prong value if necessary
803-
break;
838+
static_assert(prong == 0 || prong == 1 || prong == 2,
839+
"PhiAtSpecificRadiiTPC: invalid prong index for HF");
840+
841+
if constexpr (prong == 0) {
842+
charge = part.charge();
843+
phi0 = part.prong0Phi();
844+
pt = part.prong0Pt();
845+
} else if constexpr (prong == 1) {
846+
charge = -part.charge();
847+
phi0 = part.prong1Phi();
848+
pt = part.prong1Pt();
849+
} else if constexpr (prong == 2) {
850+
charge = part.charge();
851+
phi0 = part.prong2Phi();
852+
pt = part.prong2Pt();
804853
}
805854
} else {
806855
phi0 = part.phi();
@@ -838,42 +887,42 @@ class FemtoDreamDetaDphiStar
838887
int PhiAtRadiiTPCForHF(const T& part, std::vector<float>& tmpVec, int prong)
839888
{
840889
int charge = 0;
841-
float pt = -999.;
842-
float phi0 = -999.;
843-
switch (prong) {
844-
case Prong0:
845-
pt = part.prong0Pt();
846-
phi0 = part.prong0Phi();
890+
if constexpr (mPartTwoType == o2::aod::femtodreamparticle::kCharmHadron3Prong) {
891+
if (prong == 0 || prong == 2) {
847892
charge = part.charge();
848-
break;
849-
case Prong1:
850-
pt = part.prong1Pt();
851-
phi0 = part.prong1Phi();
893+
} else if (prong == 1) {
852894
charge = -part.charge();
853-
break;
854-
case Prong2:
855-
pt = part.prong2Pt();
856-
phi0 = part.prong2Phi();
895+
} else {
896+
return 0;
897+
}
898+
for (size_t i = 0; i < 9; ++i) {
899+
if (prong == 0) {
900+
tmpVec.push_back(PhiAtSpecificRadiiTPC<true, 0>(part, tmpRadiiTPC[i]));
901+
} else if (prong == 1) {
902+
tmpVec.push_back(PhiAtSpecificRadiiTPC<true, 1>(part, tmpRadiiTPC[i]));
903+
} else { // prong == 2
904+
tmpVec.push_back(PhiAtSpecificRadiiTPC<true, 2>(part, tmpRadiiTPC[i]));
905+
}
906+
}
907+
908+
} else {
909+
if (prong == 0) {
857910
charge = part.charge();
858-
break;
859-
default:
860-
// Handle invalid prong value
861-
break;
862-
}
863-
for (size_t i = 0; i < 9; i++) {
864-
if (runOldVersion) {
865-
tmpVec.push_back(phi0 - std::asin(0.3 * charge * 0.1 * magfield * tmpRadiiTPC[i] * 0.01 / (2. * pt)));
911+
} else if (prong == 1) {
912+
charge = -part.charge();
913+
} else {
914+
return 0;
866915
}
867-
if (!runOldVersion) {
868-
auto arg = 0.3 * charge * magfield * tmpRadiiTPC[i] * 0.01 / (2. * pt);
869-
// for very low pT particles, this value goes outside of range -1 to 1 at at large tpc radius; asin fails
870-
if (std::fabs(arg) < 1) {
871-
tmpVec.push_back(phi0 - std::asin(0.3 * charge * magfield * tmpRadiiTPC[i] * 0.01 / (2. * pt)));
872-
} else {
873-
tmpVec.push_back(999);
916+
917+
for (size_t i = 0; i < 9; ++i) {
918+
if (prong == 0) {
919+
tmpVec.push_back(PhiAtSpecificRadiiTPC<true, 0>(part, tmpRadiiTPC[i]));
920+
} else { // prong == 1
921+
tmpVec.push_back(PhiAtSpecificRadiiTPC<true, 1>(part, tmpRadiiTPC[i]));
874922
}
875923
}
876924
}
925+
877926
return charge;
878927
}
879928

0 commit comments

Comments
 (0)