Skip to content

Commit 15b0f6a

Browse files
author
Henrik Fribert
committed
Tracker PID initial implementation
1 parent a01e2e9 commit 15b0f6a

File tree

3 files changed

+568
-130
lines changed

3 files changed

+568
-130
lines changed

ALICE3/DataModel/OTFPIDTrk.h

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
///
1313
/// \file OTFPIDTrk.h
14-
/// \author Berkin Ulukutlu TUM
1514
/// \author Henrik Fribert TUM
1615
/// \author Nicolò Jacazio Università del Piemonte Orientale
1716
/// \since May 22, 2025
@@ -29,23 +28,29 @@ namespace o2::aod
2928
namespace upgrade::trk
3029
{
3130

32-
DECLARE_SOA_COLUMN(TimeOverThresholdBarrel, timeOverThresholdBarrel, float); //! Time over threshold for the barrel layers
33-
DECLARE_SOA_COLUMN(ClusterSizeBarrel, clusterSizeBarrel, float); //! Cluster size for the barrel layers
31+
DECLARE_SOA_COLUMN(TimeOverThresholdBarrel, timeOverThresholdBarrel, float); //! Time over threshold for the Barrel layers
3432
DECLARE_SOA_COLUMN(TimeOverThresholdForward, timeOverThresholdForward, float); //! Time over threshold for the Forward layers
35-
DECLARE_SOA_COLUMN(ClusterSizeForward, clusterSizeForward, float); //! Cluster size for the barrel layers
3633

3734
DECLARE_SOA_COLUMN(NSigmaTrkEl, nSigmaEl, float); //! NSigma electron from the tracker layers
3835
DECLARE_SOA_COLUMN(NSigmaTrkMu, nSigmaMu, float); //! NSigma muon from the tracker layers
3936
DECLARE_SOA_COLUMN(NSigmaTrkPi, nSigmaPi, float); //! NSigma pion from the tracker layers
4037
DECLARE_SOA_COLUMN(NSigmaTrkKa, nSigmaKa, float); //! NSigma kaon from the tracker layers
4138
DECLARE_SOA_COLUMN(NSigmaTrkPr, nSigmaPr, float); //! NSigma proton from the tracker layers
39+
DECLARE_SOA_COLUMN(NSigmaTrkDe, nSigmaDe, float); //! NSigma deuteron from the tracker layers
40+
DECLARE_SOA_COLUMN(NSigmaTrkTr, nSigmaTr, float); //! NSigma triton from the tracker layers
41+
DECLARE_SOA_COLUMN(NSigmaTrkHe, nSigmaHe, float); //! NSigma helium-3 from the tracker layers
42+
DECLARE_SOA_COLUMN(NSigmaTrkAl, nSigmaAl, float); //! NSigma alpha from the tracker layers
4243

4344
DECLARE_SOA_DYNAMIC_COLUMN(NSigmaTrk, nSigmaTrk, //! General function to get the nSigma for the tracker layers
4445
[](const float el,
4546
const float mu,
4647
const float pi,
4748
const float ka,
4849
const float pr,
50+
const float de,
51+
const float tr,
52+
const float he,
53+
const float al,
4954
const int id) -> float {
5055
switch (std::abs(id)) {
5156
case 0:
@@ -58,29 +63,47 @@ DECLARE_SOA_DYNAMIC_COLUMN(NSigmaTrk, nSigmaTrk, //! General function to get the
5863
return ka;
5964
case 4:
6065
return pr;
66+
case 5:
67+
return de;
68+
case 6:
69+
return tr;
70+
case 7:
71+
return he;
72+
case 8:
73+
return al;
6174
default:
62-
LOG(fatal) << "Unrecognized PDG code for InnerTOF";
75+
LOG(fatal) << "Unrecognized PDG code";
6376
return 999.f;
6477
}
6578
});
6679

6780
} // namespace upgrade::trk
6881

6982
DECLARE_SOA_TABLE(UpgradeTrkPidSignals, "AOD", "UPGRADETRKSIG",
70-
upgrade::trk::TimeOverThresholdBarrel,
71-
upgrade::trk::ClusterSizeBarrel);
83+
o2::soa::Index<>,
84+
upgrade::trk::TimeOverThresholdBarrel);
7285

7386
DECLARE_SOA_TABLE(UpgradeTrkPids, "AOD", "UPGRADETRKPID",
87+
o2::soa::Index<>,
7488
upgrade::trk::NSigmaTrkEl,
7589
upgrade::trk::NSigmaTrkMu,
7690
upgrade::trk::NSigmaTrkPi,
7791
upgrade::trk::NSigmaTrkKa,
7892
upgrade::trk::NSigmaTrkPr,
93+
upgrade::trk::NSigmaTrkDe,
94+
upgrade::trk::NSigmaTrkTr,
95+
upgrade::trk::NSigmaTrkHe,
96+
upgrade::trk::NSigmaTrkAl,
7997
upgrade::trk::NSigmaTrk<upgrade::trk::NSigmaTrkEl,
8098
upgrade::trk::NSigmaTrkMu,
8199
upgrade::trk::NSigmaTrkPi,
82100
upgrade::trk::NSigmaTrkKa,
83-
upgrade::trk::NSigmaTrkPr>);
101+
upgrade::trk::NSigmaTrkPr,
102+
upgrade::trk::NSigmaTrkDe,
103+
upgrade::trk::NSigmaTrkTr,
104+
upgrade::trk::NSigmaTrkHe,
105+
upgrade::trk::NSigmaTrkAl
106+
>);
84107

85108
using UpgradeTrkPidSignal = UpgradeTrkPidSignals::iterator;
86109
using UpgradeTrkPid = UpgradeTrkPids::iterator;

ALICE3/TableProducer/OTF/onTheFlyTracker.cxx

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ struct OnTheFlyTracker {
113113
Configurable<std::string> lutDe{"lutDe", "lutCovm.de.dat", "LUT for deuterons"};
114114
Configurable<std::string> lutTr{"lutTr", "lutCovm.tr.dat", "LUT for tritons"};
115115
Configurable<std::string> lutHe3{"lutHe3", "lutCovm.he3.dat", "LUT for Helium-3"};
116+
Configurable<std::string> lutAl{"lutAl", "lutCovm.he3.dat", "LUT for Alphas"}; // To be created, for now propagating as He-3
116117

117118
struct : ConfigurableGroup {
118119
ConfigurableAxis axisMomentum{"axisMomentum", {VARIABLE_WIDTH, 0.0f, 0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f, 0.9f, 1.0f, 1.1f, 1.2f, 1.3f, 1.4f, 1.5f, 1.6f, 1.7f, 1.8f, 1.9f, 2.0f, 2.2f, 2.4f, 2.6f, 2.8f, 3.0f, 3.2f, 3.4f, 3.6f, 3.8f, 4.0f, 4.4f, 4.8f, 5.2f, 5.6f, 6.0f, 6.5f, 7.0f, 7.5f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 17.0f, 19.0f, 21.0f, 23.0f, 25.0f, 30.0f, 35.0f, 40.0f, 50.0f}, "#it{p} (GeV/#it{c})"};
@@ -138,12 +139,11 @@ struct OnTheFlyTracker {
138139
Configurable<int> minSiliconHits{"minSiliconHits", 6, "minimum number of silicon hits to accept track"};
139140
Configurable<int> minSiliconHitsIfTPCUsed{"minSiliconHitsIfTPCUsed", 2, "minimum number of silicon hits to accept track in case TPC info is present"};
140141
Configurable<int> minTPCClusters{"minTPCClusters", 70, "minimum number of TPC hits necessary to consider minSiliconHitsIfTPCUsed"};
141-
Configurable<int> alice3detector{"alice3detector", 2, "0: ALICE 3 v1, 1: ALICE 3 v4, 2: ALICE 3 Sep 2025"};
142+
Configurable<int> alice3detector{"alice3detector", 0, "0: ALICE 3 v1, 1: ALICE 3 v4"};
142143
Configurable<bool> applyZacceptance{"applyZacceptance", false, "apply z limits to detector layers or not"};
143144
Configurable<bool> applyMSCorrection{"applyMSCorrection", true, "apply ms corrections for secondaries or not"};
144145
Configurable<bool> applyElossCorrection{"applyElossCorrection", true, "apply eloss corrections for secondaries or not"};
145146
Configurable<bool> applyEffCorrection{"applyEffCorrection", true, "apply efficiency correction or not"};
146-
Configurable<int> scaleVD{"scaleVD", 1, "scale x0 and xrho in VD layers"};
147147
Configurable<std::vector<float>> pixelRes{"pixelRes", {0.00025, 0.00025, 0.001, 0.001}, "RPhiIT, ZIT, RPhiOT, ZOT"};
148148
} fastTrackerSettings; // allows for gap between peak and bg in case someone wants to
149149

@@ -240,32 +240,44 @@ struct OnTheFlyTracker {
240240

241241
// For TGenPhaseSpace seed
242242
TRandom3 rand;
243-
Service<o2::ccdb::BasicCCDBManager> ccdb;
244243

245244
void init(o2::framework::InitContext&)
246245
{
247-
248-
ccdb->setURL("http://alice-ccdb.cern.ch");
249-
ccdb->setTimestamp(-1);
250-
251246
if (enableLUT) {
252-
mSmearer.setCcdbManager(ccdb.operator->());
253-
254-
auto loadLUT = [&](int pdg, const std::string& lutFile) {
255-
bool success = mSmearer.loadTable(pdg, lutFile.c_str());
256-
if (!success && !lutFile.empty()) {
257-
LOG(fatal) << "Having issue with loading the LUT " << pdg << " " << lutFile;
247+
std::map<int, const char*> mapPdgLut;
248+
const char* lutElChar = lutEl->c_str();
249+
const char* lutMuChar = lutMu->c_str();
250+
const char* lutPiChar = lutPi->c_str();
251+
const char* lutKaChar = lutKa->c_str();
252+
const char* lutPrChar = lutPr->c_str();
253+
254+
LOGF(info, "Will load electron lut file ..: %s", lutElChar);
255+
LOGF(info, "Will load muon lut file ......: %s", lutMuChar);
256+
LOGF(info, "Will load pion lut file ......: %s", lutPiChar);
257+
LOGF(info, "Will load kaon lut file ......: %s", lutKaChar);
258+
LOGF(info, "Will load proton lut file ....: %s", lutPrChar);
259+
260+
mapPdgLut.insert(std::make_pair(11, lutElChar));
261+
mapPdgLut.insert(std::make_pair(13, lutMuChar));
262+
mapPdgLut.insert(std::make_pair(211, lutPiChar));
263+
mapPdgLut.insert(std::make_pair(321, lutKaChar));
264+
mapPdgLut.insert(std::make_pair(2212, lutPrChar));
265+
266+
if (enableNucleiSmearing) {
267+
const char* lutDeChar = lutDe->c_str();
268+
const char* lutTrChar = lutTr->c_str();
269+
const char* lutHe3Char = lutHe3->c_str();
270+
const char* lutAlChar = lutAl->c_str();
271+
mapPdgLut.insert(std::make_pair(1000010020, lutDeChar));
272+
mapPdgLut.insert(std::make_pair(1000010030, lutTrChar));
273+
mapPdgLut.insert(std::make_pair(1000020030, lutHe3Char));
274+
mapPdgLut.insert(std::make_pair(1000020030, lutAlChar));
275+
}
276+
for (const auto& e : mapPdgLut) {
277+
if (!mSmearer.loadTable(e.first, e.second)) {
278+
LOG(fatal) << "Having issue with loading the LUT " << e.first << " " << e.second;
258279
}
259-
};
260-
loadLUT(11, lutEl.value);
261-
loadLUT(13, lutMu.value);
262-
loadLUT(211, lutPi.value);
263-
loadLUT(321, lutKa.value);
264-
loadLUT(2212, lutPr.value);
265-
loadLUT(1000010020, lutDe.value);
266-
loadLUT(1000010030, lutTr.value);
267-
loadLUT(1000020030, lutHe3.value);
268-
280+
}
269281
// interpolate efficiencies if requested to do so
270282
mSmearer.interpolateEfficiency(static_cast<bool>(interpolateLutEfficiencyVsNch));
271283

@@ -413,22 +425,12 @@ struct OnTheFlyTracker {
413425
fastTracker.SetApplyMSCorrection(fastTrackerSettings.applyMSCorrection);
414426
fastTracker.SetApplyElossCorrection(fastTrackerSettings.applyElossCorrection);
415427

416-
switch (fastTrackerSettings.alice3detector) {
417-
case 0:
418-
fastTracker.AddSiliconALICE3v2(fastTrackerSettings.pixelRes);
419-
break;
420-
421-
case 1:
422-
fastTracker.AddSiliconALICE3v4(fastTrackerSettings.pixelRes);
423-
fastTracker.AddTPC(0.1, 0.1);
424-
break;
425-
426-
case 2:
427-
fastTracker.AddSiliconALICE3(fastTrackerSettings.scaleVD, fastTrackerSettings.pixelRes);
428-
break;
429-
430-
default:
431-
break;
428+
if (fastTrackerSettings.alice3detector == 0) {
429+
fastTracker.AddSiliconALICE3v2(fastTrackerSettings.pixelRes);
430+
}
431+
if (fastTrackerSettings.alice3detector == 1) {
432+
fastTracker.AddSiliconALICE3v4(fastTrackerSettings.pixelRes);
433+
fastTracker.AddTPC(0.1, 0.1);
432434
}
433435

434436
// print fastTracker settings
@@ -516,7 +518,8 @@ struct OnTheFlyTracker {
516518
continue;
517519
}
518520
const auto pdg = std::abs(mcParticle.pdgCode());
519-
if (pdg != kElectron && pdg != kMuonMinus && pdg != kPiPlus && pdg != kKPlus && pdg != kProton) {
521+
if (pdg != kElectron && pdg != kMuonMinus && pdg != kPiPlus && pdg != kKPlus && pdg != kProton
522+
&& pdg != 1000010020 && pdg != 1000010030 && pdg != 1000020030 && pdg != 1000020040) {
520523
if (!cascadeDecaySettings.decayXi) {
521524
continue;
522525
} else if (pdg != 3312) {
@@ -563,7 +566,8 @@ struct OnTheFlyTracker {
563566
continue;
564567
}
565568
}
566-
if (pdg != kElectron && pdg != kMuonMinus && pdg != kPiPlus && pdg != kKPlus && pdg != kProton) {
569+
if (pdg != kElectron && pdg != kMuonMinus && pdg != kPiPlus && pdg != kKPlus && pdg != kProton
570+
&& pdg != 1000010020 && pdg != 1000010030 && pdg != 1000020030 && pdg != 1000020040) {
567571
if (!cascadeDecaySettings.decayXi) {
568572
continue;
569573
} else if (pdg != 3312) {

0 commit comments

Comments
 (0)