Skip to content

Commit 45d6ec9

Browse files
committed
ITS: template Tracker
Signed-off-by: Felix Schlepper <felix.schlepper@cern.ch>
1 parent 0364324 commit 45d6ec9

File tree

4 files changed

+33
-24
lines changed

4 files changed

+33
-24
lines changed

Detectors/ITSMFT/ITS/tracking/include/ITStracking/Tracker.h

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,15 @@ class GPUChainITS;
5151
namespace its
5252
{
5353

54+
template <int nLayers>
5455
class Tracker
5556
{
56-
static constexpr int NLayers{7};
57-
using TrackerTraits7 = TrackerTraits<NLayers>;
58-
using TimeFrame7 = TimeFrame<NLayers>;
5957
using LogFunc = std::function<void(const std::string& s)>;
6058

6159
public:
62-
Tracker(TrackerTraits<NLayers>* traits);
60+
Tracker(TrackerTraits<nLayers>* traits);
6361

64-
void adoptTimeFrame(TimeFrame<NLayers>& tf);
62+
void adoptTimeFrame(TimeFrame<nLayers>& tf);
6563

6664
void clustersToTracks(
6765
const LogFunc& = [](const std::string& s) { std::cout << s << '\n'; },
@@ -92,8 +90,8 @@ class Tracker
9290
template <typename... T, typename... F>
9391
float evaluateTask(void (Tracker::*task)(T...), std::string_view taskName, int iteration, LogFunc logger, F&&... args);
9492

95-
TrackerTraits7* mTraits = nullptr; /// Observer pointer, not owned by this class
96-
TimeFrame7* mTimeFrame = nullptr; /// Observer pointer, not owned by this class
93+
TrackerTraits<nLayers>* mTraits = nullptr; /// Observer pointer, not owned by this class
94+
TimeFrame<nLayers>* mTimeFrame = nullptr; /// Observer pointer, not owned by this class
9795

9896
std::vector<TrackingParameters> mTrkParams;
9997
o2::gpu::GPUChainITS* mRecoChain = nullptr;
@@ -115,8 +113,9 @@ class Tracker
115113
static constexpr std::array<const char*, NStates> StateNames{"TimeFrame initialisation", "Tracklet finding", "Cell finding", "Neighbour finding", "Road finding"};
116114
};
117115

116+
template <int nLayers>
118117
template <typename... T, typename... F>
119-
float Tracker::evaluateTask(void (Tracker::*task)(T...), std::string_view taskName, int iteration, LogFunc logger, F&&... args)
118+
float Tracker<nLayers>::evaluateTask(void (Tracker<nLayers>::*task)(T...), std::string_view taskName, int iteration, LogFunc logger, F&&... args)
120119
{
121120
float diff{0.f};
122121

Detectors/ITSMFT/ITS/tracking/include/ITStracking/TrackingInterface.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ namespace o2::its
3535
class ITSTrackingInterface
3636
{
3737
static constexpr int NLayers{7};
38-
using TrackerTraits7 = TrackerTraits<NLayers>;
39-
using TimeFrame7 = TimeFrame<NLayers>;
38+
using TrackerN = Tracker<NLayers>;
39+
using TrackerTraitsN = TrackerTraits<NLayers>;
40+
using TimeFrameN = TimeFrame<NLayers>;
4041

4142
public:
4243
ITSTrackingInterface(bool isMC,
@@ -66,13 +67,13 @@ class ITSTrackingInterface
6667
virtual void finaliseCCDB(framework::ConcreteDataMatcher& matcher, void* obj);
6768

6869
// Custom
69-
void setTraitsFromProvider(VertexerTraits*, TrackerTraits7*, TimeFrame7*);
70+
void setTraitsFromProvider(VertexerTraits*, TrackerTraitsN*, TimeFrameN*);
7071
void setTrackingMode(TrackingMode::Type mode = TrackingMode::Unset) { mMode = mode; }
7172

7273
auto getTracker() const { return mTracker.get(); }
7374
auto getVertexer() const { return mVertexer.get(); }
7475

75-
TimeFrame7* mTimeFrame = nullptr;
76+
TimeFrameN* mTimeFrame = nullptr;
7677

7778
protected:
7879
virtual void loadROF(gsl::span<itsmft::ROFRecord>& trackROFspan,
@@ -88,7 +89,7 @@ class ITSTrackingInterface
8889
TrackingMode::Type mMode = TrackingMode::Unset;
8990
bool mOverrideBeamEstimation = false;
9091
const o2::itsmft::TopologyDictionary* mDict = nullptr;
91-
std::unique_ptr<Tracker> mTracker = nullptr;
92+
std::unique_ptr<TrackerN> mTracker = nullptr;
9293
std::unique_ptr<Vertexer> mVertexer = nullptr;
9394
const o2::dataformats::MeanVertexObject* mMeanVertex;
9495
std::shared_ptr<BoundedMemoryResource> mMemoryPool;

Detectors/ITSMFT/ITS/tracking/src/Tracker.cxx

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ namespace o2::its
3434
{
3535
using o2::its::constants::GB;
3636

37-
Tracker::Tracker(TrackerTraits7* traits) : mTraits(traits)
37+
template <int nLayers>
38+
Tracker<nLayers>::Tracker(TrackerTraits<nLayers>* traits) : mTraits(traits)
3839
{
3940
/// Initialise standard configuration with 1 iteration
4041
mTrkParams.resize(1);
@@ -44,7 +45,8 @@ Tracker::Tracker(TrackerTraits7* traits) : mTraits(traits)
4445
}
4546
}
4647

47-
void Tracker::clustersToTracks(const LogFunc& logger, const LogFunc& error)
48+
template <int nLayers>
49+
void Tracker<nLayers>::clustersToTracks(const LogFunc& logger, const LogFunc& error)
4850
{
4951
LogFunc evalLog = [](const std::string&) {};
5052

@@ -158,7 +160,8 @@ void Tracker::clustersToTracks(const LogFunc& logger, const LogFunc& error)
158160
}
159161
}
160162

161-
void Tracker::computeRoadsMClabels()
163+
template <int nLayers>
164+
void Tracker<nLayers>::computeRoadsMClabels()
162165
{
163166
/// Moore's Voting Algorithm
164167
if (!mTimeFrame->hasMCinformation()) {
@@ -171,7 +174,7 @@ void Tracker::computeRoadsMClabels()
171174

172175
for (int iRoad{0}; iRoad < roadsNum; ++iRoad) {
173176

174-
Road<5>& currentRoad{mTimeFrame->getRoads()[iRoad]};
177+
auto& currentRoad{mTimeFrame->getRoads()[iRoad]};
175178
std::vector<std::pair<MCCompLabel, size_t>> occurrences;
176179
bool isFakeRoad{false};
177180
bool isFirstRoadCell{true};
@@ -262,7 +265,8 @@ void Tracker::computeRoadsMClabels()
262265
}
263266
}
264267

265-
void Tracker::computeTracksMClabels()
268+
template <int nLayers>
269+
void Tracker<nLayers>::computeTracksMClabels()
266270
{
267271
for (int iROF{0}; iROF < mTimeFrame->getNrof(); ++iROF) {
268272
for (auto& track : mTimeFrame->getTracks(iROF)) {
@@ -320,7 +324,8 @@ void Tracker::computeTracksMClabels()
320324
}
321325
}
322326

323-
void Tracker::rectifyClusterIndices()
327+
template <int nLayers>
328+
void Tracker<nLayers>::rectifyClusterIndices()
324329
{
325330
for (int iROF{0}; iROF < mTimeFrame->getNrof(); ++iROF) {
326331
for (auto& track : mTimeFrame->getTracks(iROF)) {
@@ -334,17 +339,21 @@ void Tracker::rectifyClusterIndices()
334339
}
335340
}
336341

337-
void Tracker::adoptTimeFrame(TimeFrame7& tf)
342+
template <int nLayers>
343+
void Tracker<nLayers>::adoptTimeFrame(TimeFrame<nLayers>& tf)
338344
{
339345
mTimeFrame = &tf;
340346
mTraits->adoptTimeFrame(&tf);
341347
}
342348

343-
void Tracker::printSummary() const
349+
template <int nLayers>
350+
void Tracker<nLayers>::printSummary() const
344351
{
345352
auto avgTF = mTotalTime * 1.e-3 / ((mTimeFrameCounter > 0) ? (double)mTimeFrameCounter : -1.0);
346353
auto avgTFwithDropped = mTotalTime * 1.e-3 / (((mTimeFrameCounter + mNumberOfDroppedTFs) > 0) ? (double)(mTimeFrameCounter + mNumberOfDroppedTFs) : -1.0);
347354
LOGP(info, "Tracker summary: Processed {} TFs (dropped {}) in TOT={:.2f} s, AVG/TF={:.2f} ({:.2f}) s", mTimeFrameCounter, mNumberOfDroppedTFs, mTotalTime * 1.e-3, avgTF, avgTFwithDropped);
348355
}
349356

357+
template class Tracker<7>;
358+
350359
} // namespace o2::its

Detectors/ITSMFT/ITS/tracking/src/TrackingInterface.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -383,11 +383,11 @@ void ITSTrackingInterface::printSummary() const
383383
}
384384

385385
void ITSTrackingInterface::setTraitsFromProvider(VertexerTraits* vertexerTraits,
386-
TrackerTraits7* trackerTraits,
387-
TimeFrame7* frame)
386+
TrackerTraitsN* trackerTraits,
387+
TimeFrameN* frame)
388388
{
389389
mVertexer = std::make_unique<Vertexer>(vertexerTraits);
390-
mTracker = std::make_unique<Tracker>(trackerTraits);
390+
mTracker = std::make_unique<TrackerN>(trackerTraits);
391391
mTimeFrame = frame;
392392
mVertexer->adoptTimeFrame(*mTimeFrame);
393393
mTracker->adoptTimeFrame(*mTimeFrame);

0 commit comments

Comments
 (0)