|
51 | 51 | #include <Framework/StaticFor.h> |
52 | 52 | #include <Framework/runDataProcessing.h> |
53 | 53 | #include <ReconstructionDataFormats/DCA.h> |
| 54 | +#include <ReconstructionDataFormats/PID.h> |
54 | 55 | #include <SimulationDataFormat/InteractionSampler.h> |
55 | 56 |
|
56 | 57 | #include <TGenPhaseSpace.h> |
@@ -597,6 +598,31 @@ struct OnTheFlyTracker { |
597 | 598 | gRandom->SetSeed(seed); |
598 | 599 | } |
599 | 600 |
|
| 601 | + /// Function to get the internal PID for a given pdgCode |
| 602 | + /// \param pdgCode pdg code for a common particle (particle handled by the tracker) |
| 603 | + int pdgCodeToPID(int pdgCode) const |
| 604 | + { |
| 605 | + if (std::abs(pdgCode) == PDG_t::kElectron) { |
| 606 | + return o2::track::PID::Electron; |
| 607 | + } else if (std::abs(pdgCode) == PDG_t::kMuonMinus) { |
| 608 | + return o2::track::PID::Muon; |
| 609 | + } else if (std::abs(pdgCode) == PDG_t::kPiPlus) { |
| 610 | + return o2::track::PID::Pion; |
| 611 | + } else if (std::abs(pdgCode) == PDG_t::kKPlus) { |
| 612 | + return o2::track::PID::Kaon; |
| 613 | + } else if (std::abs(pdgCode) == PDG_t::kProton) { |
| 614 | + return o2::track::PID::Proton; |
| 615 | + } else if (std::abs(pdgCode) == PDG_t::kLambda0) { |
| 616 | + return o2::track::PID::Lambda; |
| 617 | + } else if (std::abs(pdgCode) == PDG_t::kXiMinus) { |
| 618 | + return o2::track::PID::XiMinus; |
| 619 | + } else if (std::abs(pdgCode) == PDG_t::kOmegaMinus) { |
| 620 | + return o2::track::PID::OmegaMinus; |
| 621 | + } else { |
| 622 | + return o2::track::PID::Pion; // Default trackParCov assumption |
| 623 | + } |
| 624 | + } |
| 625 | + |
600 | 626 | /// Function to decay the xi |
601 | 627 | /// \param particle the particle to decay |
602 | 628 | /// \param track track of particle to decay |
@@ -705,7 +731,7 @@ struct OnTheFlyTracker { |
705 | 731 |
|
706 | 732 | float dNdEta = 0.f; // Charged particle multiplicity to use in the efficiency evaluation |
707 | 733 | std::pair<float, float> vertexReconstructionEfficiencyCounters = {0, 0}; // {nVerticesWithMoreThan2Contributors, nVerticesReconstructed} |
708 | | - void processWithLUTs(aod::McCollision const& mcCollision, aod::McParticles const& mcParticles, int const& icfg) |
| 734 | + void processWithLUTs(aod::McCollision const& mcCollision, aod::McParticles const& mcParticles, const int icfg) |
709 | 735 | { |
710 | 736 | vertexReconstructionEfficiencyCounters.first += 1; |
711 | 737 | const int lastTrackIndex = tableStoredTracksCov.lastIndex() + 1; // bookkeep the last added track |
@@ -878,9 +904,12 @@ struct OnTheFlyTracker { |
878 | 904 | getHist(TH1, histPath + "hXiBuilding")->Fill(0.0f); |
879 | 905 | } |
880 | 906 |
|
881 | | - o2::upgrade::convertTLorentzVectorToO2Track(kPiMinus, cascadeDecayProducts[0], xiDecayVertex, xiDaughterTrackParCovsPerfect[0], pdgDB); |
882 | | - o2::upgrade::convertTLorentzVectorToO2Track(kPiMinus, cascadeDecayProducts[1], laDecayVertex, xiDaughterTrackParCovsPerfect[1], pdgDB); |
883 | | - o2::upgrade::convertTLorentzVectorToO2Track(kProton, cascadeDecayProducts[2], laDecayVertex, xiDaughterTrackParCovsPerfect[2], pdgDB); |
| 907 | + o2::upgrade::convertTLorentzVectorToO2Track(PDG_t::kPiMinus, cascadeDecayProducts[0], xiDecayVertex, xiDaughterTrackParCovsPerfect[0], pdgDB); |
| 908 | + xiDaughterTrackParCovsPerfect[0].setPID(pdgCodeToPID(PDG_t::kPiMinus)); |
| 909 | + o2::upgrade::convertTLorentzVectorToO2Track(PDG_t::kPiMinus, cascadeDecayProducts[1], laDecayVertex, xiDaughterTrackParCovsPerfect[1], pdgDB); |
| 910 | + xiDaughterTrackParCovsPerfect[1].setPID(pdgCodeToPID(PDG_t::kPiMinus)); |
| 911 | + o2::upgrade::convertTLorentzVectorToO2Track(PDG_t::kProton, cascadeDecayProducts[2], laDecayVertex, xiDaughterTrackParCovsPerfect[2], pdgDB); |
| 912 | + xiDaughterTrackParCovsPerfect[2].setPID(pdgCodeToPID(PDG_t::kProton)); |
884 | 913 |
|
885 | 914 | for (int i = 0; i < kCascProngs; i++) { |
886 | 915 | isReco[i] = false; |
@@ -1001,7 +1030,7 @@ struct OnTheFlyTracker { |
1001 | 1030 | {posP[0] + negP[0], posP[1] + negP[1], posP[2] + negP[2]}, |
1002 | 1031 | covV, 0, true); |
1003 | 1032 | v0Track.setAbsCharge(0); |
1004 | | - v0Track.setPID(o2::track::PID::Lambda); |
| 1033 | + v0Track.setPID(pdgCodeToPID(PDG_t::kLambda0)); |
1005 | 1034 |
|
1006 | 1035 | // dca fitter step |
1007 | 1036 | nCand = 0; |
@@ -1040,8 +1069,8 @@ struct OnTheFlyTracker { |
1040 | 1069 |
|
1041 | 1070 | // initialize cascade track |
1042 | 1071 | o2::track::TrackParCov cascadeTrack = fitter.createParentTrackParCov(); |
1043 | | - cascadeTrack.setAbsCharge(-1); // may require more adjustments |
1044 | | - cascadeTrack.setPID(o2::track::PID::XiMinus); // FIXME: not OK for omegas |
| 1072 | + cascadeTrack.setAbsCharge(-1); // may require more adjustments |
| 1073 | + cascadeTrack.setPID(pdgCodeToPID(PDG_t::kXiMinus)); // FIXME: not OK for omegas |
1045 | 1074 |
|
1046 | 1075 | thisCascade.cascradiusMC = xiDecayRadius2D; |
1047 | 1076 | thisCascade.pt = cascadeTrack.getPt(); |
@@ -1131,6 +1160,7 @@ struct OnTheFlyTracker { |
1131 | 1160 | o2::upgrade::convertMCParticleToO2Track(mcParticle, prefectCascadeTrack, pdgDB); |
1132 | 1161 |
|
1133 | 1162 | // back track is already smeared |
| 1163 | + prefectCascadeTrack.setPID(pdgCodeToPID(PDG_t::kXiMinus)); // FIXME: not OK for omegas |
1134 | 1164 | int nCascHits = fastTracker[icfg]->FastTrack(prefectCascadeTrack, trackedCasc, dNdEta); |
1135 | 1165 | reconstructedCascade = (fastTrackerSettings.minSiliconHitsForKinkReco < nCascHits) ? false : true; |
1136 | 1166 |
|
@@ -1201,6 +1231,7 @@ struct OnTheFlyTracker { |
1201 | 1231 | std::array{pV0[0], pV0[1], pV0[2]}}, |
1202 | 1232 | std::array{o2::constants::physics::MassPionCharged, o2::constants::physics::MassLambda}); |
1203 | 1233 |
|
| 1234 | + newCascadeTrack.setPID(pdgCodeToPID(PDG_t::kXiMinus)); // FIXME: not OK for omegas |
1204 | 1235 | tracksAlice3.push_back(TrackAlice3{newCascadeTrack, mcParticle.globalIndex(), time, timeResolutionUs, false, false, 1, thisCascade.foundClusters}); |
1205 | 1236 |
|
1206 | 1237 | // add this cascade to vector (will fill cursor later with collision ID) |
@@ -1436,6 +1467,7 @@ struct OnTheFlyTracker { |
1436 | 1467 | } else if (fastPrimaryTrackerSettings.fastTrackPrimaries) { |
1437 | 1468 | o2::track::TrackParCov o2Track; |
1438 | 1469 | o2::upgrade::convertMCParticleToO2Track(mcParticle, o2Track, pdgDB); |
| 1470 | + o2Track.setPID(pdgCodeToPID(mcParticle.pdgCode())); |
1439 | 1471 | const int nHits = fastTracker[icfg]->FastTrack(o2Track, trackParCov, dNdEta); |
1440 | 1472 | if (nHits < fastPrimaryTrackerSettings.minSiliconHits) { |
1441 | 1473 | reconstructed = false; |
@@ -1736,7 +1768,7 @@ struct OnTheFlyTracker { |
1736 | 1768 | } |
1737 | 1769 | } |
1738 | 1770 |
|
1739 | | - void processConfigurationDev(aod::McCollision const& mcCollision, aod::McParticlesWithDau const& mcParticles, int const& icfg) |
| 1771 | + void processConfigurationDev(aod::McCollision const& mcCollision, aod::McPartsWithDau const& mcParticles, const int icfg) |
1740 | 1772 | { |
1741 | 1773 | // const int lastTrackIndex = tableStoredTracksCov.lastIndex() + 1; // bookkeep the last added track |
1742 | 1774 | const std::string histPath = "Configuration_" + std::to_string(icfg) + "/"; |
@@ -1838,6 +1870,7 @@ struct OnTheFlyTracker { |
1838 | 1870 | } else if (enableSecondarySmearing) { |
1839 | 1871 | o2::track::TrackParCov perfectTrackParCov; |
1840 | 1872 | o2::upgrade::convertMCParticleToO2Track(mcParticle, perfectTrackParCov, pdgDB); |
| 1873 | + perfectTrackParCov.setPID(pdgCodeToPID(mcParticle.pdgCode())); |
1841 | 1874 | const int nHits = fastTracker[icfg]->FastTrack(perfectTrackParCov, trackParCov, dNdEta); |
1842 | 1875 | if (nHits < fastTrackerSettings.minSiliconHits) { |
1843 | 1876 | reconstructed = false; |
@@ -1991,7 +2024,7 @@ struct OnTheFlyTracker { |
1991 | 2024 | } |
1992 | 2025 | } |
1993 | 2026 |
|
1994 | | - void processDecayer(aod::McCollision const& mcCollision, aod::McParticlesWithDau const& mcParticles) |
| 2027 | + void processDecayer(aod::McCollision const& mcCollision, aod::McPartsWithDau const& mcParticles) |
1995 | 2028 | { |
1996 | 2029 | for (size_t icfg = 0; icfg < mSmearer.size(); ++icfg) { |
1997 | 2030 | processConfigurationDev(mcCollision, mcParticles, static_cast<int>(icfg)); |
|
0 commit comments