Skip to content

Commit 24544bf

Browse files
committed
Add latest addition integration
1 parent dc29ba7 commit 24544bf

4 files changed

Lines changed: 48 additions & 25 deletions

File tree

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,10 +67,10 @@ class Tracker
6767
void setParameters(const std::vector<TrackingParameters>&);
6868
void getGlobalConfiguration();
6969
void setBz(float);
70-
void setCorrType(const o2::base::PropagatorImpl<float>::MatCorrType& type);
70+
void setCorrType(const o2::base::PropagatorImpl<float>::MatCorrType type);
7171
bool isMatLUT() const;
7272
void setNThreads(int n);
73-
int getNThreads() const { return mNThreads; }
73+
int getNThreads() const;
7474

7575
private:
7676
void initialiseTimeFrame(int& iteration);
@@ -79,7 +79,7 @@ class Tracker
7979
void findCellsNeighbours(int& iteration);
8080
void findRoads(int& iteration);
8181
void findShortPrimaries();
82-
void findTracks(int& iteration);
82+
void findTracks();
8383
void extendTracks(int& iteration);
8484

8585
// MC interaction

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class TrackerTraits
5656
virtual void computeLayerCells(const int iteration);
5757
virtual void findCellsNeighbours(const int iteration);
5858
virtual void findRoads(const int iteration);
59-
virtual void findTracks(const int iteration);
59+
virtual void findTracks();
6060
virtual void extendTracks(const int iteration);
6161
virtual void findShortPrimaries();
6262
virtual void refitTracks(const int iteration, const std::vector<std::vector<TrackingFrameInfo>>&, std::vector<TrackITSExt>&);
@@ -67,7 +67,7 @@ class TrackerTraits
6767
void adoptTimeFrame(TimeFrame* tf) { mTimeFrame = tf; }
6868
void setBz(float bz);
6969
float getBz() const;
70-
void setCorrType(const o2::base::PropagatorImpl<float>::MatCorrType& type) { mCorrType = type; }
70+
void setCorrType(const o2::base::PropagatorImpl<float>::MatCorrType type) { mCorrType = type; }
7171
bool isMatLUT() const;
7272

7373
// Others
@@ -82,12 +82,15 @@ class TrackerTraits
8282
}
8383
void setSmoothing(bool v) { mApplySmoothing = v; }
8484
bool getSmoothing() const { return mApplySmoothing; }
85+
void setNThreads(int n);
86+
int getNThreads() const { return mNThreads; }
8587

8688
private:
8789
void traverseCellsTree(const int, const int);
8890
track::TrackParCov buildTrackSeed(const Cluster& cluster1, const Cluster& cluster2, const Cluster& cluster3, const TrackingFrameInfo& tf3, float resolution);
8991
bool fitTrack(TrackITSExt& track, int start, int end, int step, const float chi2cut = o2::constants::math::VeryBig, const float maxQoverPt = o2::constants::math::VeryBig);
9092

93+
int mNThreads = 1;
9194
bool mApplySmoothing = false;
9295
o2::base::PropagatorImpl<float>::MatCorrType mCorrType = o2::base::PropagatorImpl<float>::MatCorrType::USEMatCorrNONE;
9396
float mBz = 5.f;

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

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,6 @@
3131
#include <string>
3232
#include <climits>
3333

34-
#ifdef WITH_OPENMP
35-
#include <omp.h>
36-
#endif
37-
3834
namespace o2
3935
{
4036
namespace its
@@ -82,7 +78,7 @@ void Tracker::clustersToTracks(std::function<void(std::string s)> logger, std::f
8278
total += evaluateTask(&Tracker::findCellsNeighbours, "Neighbour finding", logger, iteration);
8379
total += evaluateTask(&Tracker::findRoads, "Road finding", logger, iteration);
8480
logger(fmt::format("\t- Number of Roads: {}", mTimeFrame->getRoads().size()));
85-
total += evaluateTask(&Tracker::findTracks, "Track finding", logger, iteration);
81+
total += evaluateTask(&Tracker::findTracks, "Track finding", logger);
8682
total += evaluateTask(&Tracker::extendTracks, "Extending tracks", logger, iteration);
8783
}
8884

@@ -92,7 +88,7 @@ void Tracker::clustersToTracks(std::function<void(std::string s)> logger, std::f
9288
std::stringstream sstream;
9389
if (constants::DoTimeBenchmarks) {
9490
sstream << std::setw(2) << " - "
95-
<< "Timeframe " << mTimeFrameCounter++ << " processing completed in: " << total << "ms using " << mNThreads << " threads.";
91+
<< "Timeframe " << mTimeFrameCounter++ << " processing completed in: " << total << "ms using " << mTraits->getNThreads() << " threads.";
9692
}
9793
logger(sstream.str());
9894

@@ -123,9 +119,9 @@ void Tracker::findRoads(int& iteration)
123119
mTraits->findRoads(iteration);
124120
}
125121

126-
void Tracker::findTracks(int& iteration)
122+
void Tracker::findTracks()
127123
{
128-
mTraits->findTracks(iteration);
124+
mTraits->findTracks();
129125
}
130126

131127
void Tracker::extendTracks(int& iteration)
@@ -370,7 +366,7 @@ void Tracker::setBz(float bz)
370366
mTraits->setBz(bz);
371367
}
372368

373-
void Tracker::setCorrType(const o2::base::PropagatorImpl<float>::MatCorrType& type)
369+
void Tracker::setCorrType(const o2::base::PropagatorImpl<float>::MatCorrType type)
374370
{
375371
mTraits->setCorrType(type);
376372
}
@@ -382,12 +378,12 @@ bool Tracker::isMatLUT() const
382378

383379
void Tracker::setNThreads(int n)
384380
{
385-
#ifdef WITH_OPENMP
386-
mNThreads = n > 0 ? n : 1;
387-
#else
388-
mNThreads = 1;
389-
#endif
381+
mTraits->setNThreads(n);
390382
}
391383

384+
int Tracker::getNThreads() const
385+
{
386+
return mTraits->getNThreads();
387+
}
392388
} // namespace its
393389
} // namespace o2

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

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@
2929
#include "ITStracking/Tracklet.h"
3030
#include "ReconstructionDataFormats/Track.h"
3131

32+
#ifdef WITH_OPENMP
33+
#include <omp.h>
34+
#endif
35+
3236
using o2::base::PropagatorF;
3337

3438
namespace
@@ -442,11 +446,14 @@ void TrackerTraits::findRoads(const int iteration)
442446
}
443447
}
444448

445-
void TrackerTraits::findTracks(const int iteration)
449+
void TrackerTraits::findTracks()
446450
{
447-
std::vector<TrackITSExt> tracks;
448-
tracks.reserve(mTimeFrame->getRoads().size());
451+
std::vector<std::vector<TrackITSExt>> tracks(mNThreads);
452+
for (auto& tracksV : tracks) {
453+
tracksV.reserve(mTimeFrame->getRoads().size() / mNThreads);
454+
}
449455

456+
#pragma omp parallel for num_threads(mNThreads)
450457
for (auto& road : mTimeFrame->getRoads()) {
451458
std::vector<int> clusters(mTrkParams[0].NLayers, constants::its::UnusedIndex);
452459
int lastCellLevel = constants::its::UnusedIndex;
@@ -537,16 +544,25 @@ void TrackerTraits::findTracks(const int iteration)
537544
continue;
538545
}
539546
// temporaryTrack.setROFrame(rof);
540-
tracks.emplace_back(temporaryTrack);
547+
#ifdef WITH_OPENMP
548+
int iThread = omp_get_thread_num();
549+
#else
550+
int iThread = 0;
551+
#endif
552+
tracks[iThread].emplace_back(temporaryTrack);
553+
}
554+
555+
for (int iV{1}; iV < mNThreads; ++iV) {
556+
tracks[0].insert(tracks[0].end(), tracks[iV].begin(), tracks[iV].end());
541557
}
542558

543559
if (mApplySmoothing) {
544560
// Smoothing tracks
545561
}
546-
std::sort(tracks.begin(), tracks.end(),
562+
std::sort(tracks[0].begin(), tracks[0].end(),
547563
[](TrackITSExt& track1, TrackITSExt& track2) { return track1.isBetter(track2, 1.e6f); });
548564

549-
for (auto& track : tracks) {
565+
for (auto& track : tracks[0]) {
550566
int nShared = 0;
551567
for (int iLayer{0}; iLayer < mTrkParams[0].NLayers; ++iLayer) {
552568
if (track.getClusterIndex(iLayer) == constants::its::UnusedIndex) {
@@ -972,5 +988,13 @@ void TrackerTraits::setBz(float bz)
972988

973989
bool TrackerTraits::isMatLUT() const { return o2::base::Propagator::Instance()->getMatLUT() && (mCorrType == o2::base::PropagatorImpl<float>::MatCorrType::USEMatCorrLUT); }
974990

991+
void TrackerTraits::setNThreads(int n)
992+
{
993+
#ifdef WITH_OPENMP
994+
mNThreads = n > 0 ? n : 1;
995+
#else
996+
mNThreads = 1;
997+
#endif
998+
}
975999
} // namespace its
9761000
} // namespace o2

0 commit comments

Comments
 (0)