Skip to content

Commit 5537e5c

Browse files
committed
Add option to smear and add charged hyperons to track table in otf tracker
1 parent 1284ea0 commit 5537e5c

1 file changed

Lines changed: 38 additions & 13 deletions

File tree

ALICE3/TableProducer/OTF/onTheFlyTracker.cxx

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ struct OnTheFlyTracker {
211211

212212
struct : ConfigurableGroup {
213213
std::string prefix = "fastPrimaryTrackerSettings";
214+
Configurable<bool> fastTrackShortLivedParticles{"fastTrackShortLivedParticles", false, "Use fasttracker for short lived tracks"};
214215
Configurable<bool> fastTrackPrimaries{"fastTrackPrimaries", false, "Use fasttracker for primary tracks. Enable with care"};
215216
Configurable<int> minSiliconHits{"minSiliconHits", 4, "minimum number of silicon hits to accept track"};
216217
Configurable<bool> applyZacceptance{"applyZacceptance", false, "apply z limits to detector layers or not"};
@@ -348,15 +349,20 @@ struct OnTheFlyTracker {
348349
v0candidate thisV0;
349350
// Constants
350351
static constexpr int kv0Prongs = 2;
351-
static constexpr std::array<int, 3> v0PDGs = {kK0Short,
352-
kLambda0,
353-
kLambda0Bar};
352+
static constexpr std::array<int, 3> v0PDGs = {PDG_t::kK0Short,
353+
PDG_t::kLambda0,
354+
PDG_t::kLambda0Bar};
354355

355-
static constexpr std::array<int, 5> longLivedHandledPDGs = {kElectron,
356-
kMuonMinus,
357-
kPiPlus,
358-
kKPlus,
359-
kProton};
356+
static constexpr std::array<int, 5> longLivedHandledPDGs = {PDG_t::kElectron,
357+
PDG_t::kMuonMinus,
358+
PDG_t::kPiPlus,
359+
PDG_t::kKPlus,
360+
PDG_t::kProton};
361+
362+
static constexpr std::array<int, 5> shortLivedHandledPDGs = {PDG_t::kSigmaPlus,
363+
PDG_t::kSigmaMinus,
364+
PDG_t::kXiMinus,
365+
PDG_t::kOmegaMinus};
360366

361367
static constexpr std::array<int, 4> nucleiPDGs = {o2::constants::physics::kDeuteron,
362368
o2::constants::physics::kTriton,
@@ -760,6 +766,10 @@ struct OnTheFlyTracker {
760766
return o2::track::PID::Proton;
761767
} else if (std::abs(pdgCode) == PDG_t::kLambda0) {
762768
return o2::track::PID::Lambda;
769+
} else if (std::abs(pdgCode) == PDG_t::kSigmaPlus) {
770+
return o2::track::PID::XiMinus; // Close enough
771+
} else if (std::abs(pdgCode) == PDG_t::kSigmaMinus) {
772+
return o2::track::PID::XiMinus; // Close enough
763773
} else if (std::abs(pdgCode) == PDG_t::kXiMinus) {
764774
return o2::track::PID::XiMinus;
765775
} else if (std::abs(pdgCode) == PDG_t::kOmegaMinus) {
@@ -1875,12 +1885,14 @@ struct OnTheFlyTracker {
18751885

18761886
const bool isCascadeToDecay = (mcParticle.pdgCode() == kXiMinus) && cascadeDecaySettings.decayXi;
18771887
const bool isV0ToDecay = std::find(v0PDGs.begin(), v0PDGs.end(), mcParticle.pdgCode()) != v0PDGs.end() && v0DecaySettings.decayV0;
1878-
18791888
const bool longLivedToBeHandled = std::find(longLivedHandledPDGs.begin(), longLivedHandledPDGs.end(), std::abs(mcParticle.pdgCode())) != longLivedHandledPDGs.end();
1889+
const bool shortLivedToBeHandled = std::find(shortLivedHandledPDGs.begin(), shortLivedHandledPDGs.end(), std::abs(mcParticle.pdgCode())) != shortLivedHandledPDGs.end();
18801890
const bool nucleiToBeHandled = std::find(nucleiPDGs.begin(), nucleiPDGs.end(), std::abs(mcParticle.pdgCode())) != nucleiPDGs.end();
18811891
const bool pdgsToBeHandled = longLivedToBeHandled ||
18821892
(enableNucleiSmearing && nucleiToBeHandled) ||
1883-
(isCascadeToDecay) || (isV0ToDecay);
1893+
(isCascadeToDecay) || (isV0ToDecay) ||
1894+
(shortLivedToBeHandled && fastPrimaryTrackerSettings.fastTrackShortLivedParticles);
1895+
18841896
if (!pdgsToBeHandled) {
18851897
continue;
18861898
}
@@ -1902,7 +1914,7 @@ struct OnTheFlyTracker {
19021914
bool reconstructed = true;
19031915
int nTrkHits = 0;
19041916
if (enablePrimarySmearing) {
1905-
if (fastPrimaryTrackerSettings.fastTrackPrimaries) {
1917+
if (fastPrimaryTrackerSettings.fastTrackPrimaries || fastPrimaryTrackerSettings.fastTrackShortLivedParticles) {
19061918
o2::track::TrackParCov perfectTrackParCov;
19071919
o2::upgrade::convertMCParticleToO2Track(mcParticle, perfectTrackParCov, pdgDB);
19081920
perfectTrackParCov.setPID(pdgCodeToPID(mcParticle.pdgCode()));
@@ -2052,8 +2064,10 @@ struct OnTheFlyTracker {
20522064
// Now that the multiplicity is known, we can process the particles to smear them
20532065
for (const auto& mcParticle : mcParticles) {
20542066
const bool longLivedToBeHandled = std::find(longLivedHandledPDGs.begin(), longLivedHandledPDGs.end(), std::abs(mcParticle.pdgCode())) != longLivedHandledPDGs.end();
2067+
const bool shortLivedToBeHandled = std::find(shortLivedHandledPDGs.begin(), shortLivedHandledPDGs.end(), std::abs(mcParticle.pdgCode())) != shortLivedHandledPDGs.end();
20552068
const bool nucleiToBeHandled = std::find(nucleiPDGs.begin(), nucleiPDGs.end(), std::abs(mcParticle.pdgCode())) != nucleiPDGs.end();
2056-
const bool pdgsToBeHandled = longLivedToBeHandled || (enableNucleiSmearing && nucleiToBeHandled);
2069+
const bool pdgsToBeHandled = longLivedToBeHandled || (enableNucleiSmearing && nucleiToBeHandled) ||
2070+
(shortLivedToBeHandled && fastPrimaryTrackerSettings.fastTrackShortLivedParticles);
20572071

20582072
o2::upgrade::OTFParticle otfParticle(mcParticle);
20592073
otfParticle.setBits(mcParticle.decayerBits_raw());
@@ -2099,10 +2113,21 @@ struct OnTheFlyTracker {
20992113
bool reconstructed = false;
21002114
int nTrkHits = 0;
21012115
const bool isSecondary = !otfParticle.isPrimary() && otfParticle.checkBit(o2::upgrade::DecayerBits::ProducedByDecayer) && otfParticle.isAlive();
2102-
if (enablePrimarySmearing && otfParticle.isPrimary()) {
2116+
if (enablePrimarySmearing && longLivedToBeHandled && otfParticle.isPrimary()) {
21032117
o2::upgrade::convertMCParticleToO2Track(mcParticle, trackParCov, pdgDB);
21042118
computeBremsstrahlungLoss(icfg, mcParticle, trackParCov);
21052119
reconstructed = mSmearer[icfg]->smearTrack(trackParCov, mcParticle.pdgCode(), dNdEta);
2120+
} else if (shortLivedToBeHandled && fastPrimaryTrackerSettings.fastTrackShortLivedParticles) {
2121+
o2::track::TrackParCov perfectTrackParCov;
2122+
o2::upgrade::convertMCParticleToO2Track(mcParticle, perfectTrackParCov, pdgDB);
2123+
perfectTrackParCov.setPID(pdgCodeToPID(mcParticle.pdgCode()));
2124+
computeBremsstrahlungLoss(icfg, mcParticle, perfectTrackParCov);
2125+
nTrkHits = fastTracker[icfg]->FastTrack(perfectTrackParCov, trackParCov, dNdEta);
2126+
if (nTrkHits < fastPrimaryTrackerSettings.minSiliconHits) {
2127+
reconstructed = false;
2128+
} else {
2129+
reconstructed = true;
2130+
}
21062131
} else if (enableSecondarySmearing && isSecondary) {
21072132
o2::track::TrackParCov perfectTrackParCov;
21082133
o2::upgrade::convertMCParticleToO2Track(mcParticle, perfectTrackParCov, pdgDB);

0 commit comments

Comments
 (0)