diff --git a/Detectors/ITSMFT/ITS/tracking/GPU/ITStrackingGPU/VertexerTraitsGPU.h b/Detectors/ITSMFT/ITS/tracking/GPU/ITStrackingGPU/VertexerTraitsGPU.h index 6b7e79a187745..eb4dc2179cdb4 100644 --- a/Detectors/ITSMFT/ITS/tracking/GPU/ITStrackingGPU/VertexerTraitsGPU.h +++ b/Detectors/ITSMFT/ITS/tracking/GPU/ITStrackingGPU/VertexerTraitsGPU.h @@ -41,21 +41,20 @@ class VertexerTraitsGPU : public VertexerTraits { public: VertexerTraitsGPU(); - ~VertexerTraitsGPU() override; + ~VertexerTraitsGPU() = default; void initialise(const TrackingParameters&, const int iteration = 0) override; void adoptTimeFrame(TimeFrame*) override; void computeTracklets(const int iteration = 0) override; void computeTrackletMatching(const int iteration = 0) override; void computeVertices(const int iteration = 0) override; + void updateVertexingParameters(const std::vector&, const TimeFrameGPUParameters&) override; // Hybrid - void initialiseHybrid(const TrackingParameters& pars) override { VertexerTraits::initialise(pars); } + void initialiseHybrid(const TrackingParameters& pars, const int iteration = 0) override { VertexerTraits::initialise(pars, iteration); } + void computeTrackletsHybrid(const int iteration = 0) override { VertexerTraits::computeTracklets(iteration); } + void computeTrackletMatchingHybrid(const int iteration = 0) override { VertexerTraits::computeTrackletMatching(iteration); } + void computeVerticesHybrid(const int iteration = 0) override { VertexerTraits::computeVertices(iteration); } void adoptTimeFrameHybrid(TimeFrame* tf) override { VertexerTraits::adoptTimeFrame(tf); } - void computeTrackletsHybrid() override { VertexerTraits::computeTracklets(); } - void computeTrackletMatchingHybrid() override { VertexerTraits::computeTrackletMatching(); } - void computeVerticesHybrid() override { VertexerTraits::computeVertices(); } - - void updateVertexingParameters(const std::vector&, const TimeFrameGPUParameters&) override; void computeVerticesHist(); diff --git a/Detectors/ITSMFT/ITS/tracking/GPU/cuda/VertexerTraitsGPU.cu b/Detectors/ITSMFT/ITS/tracking/GPU/cuda/VertexerTraitsGPU.cu index d18f9ecc0b7cb..12c743fc9ec03 100644 --- a/Detectors/ITSMFT/ITS/tracking/GPU/cuda/VertexerTraitsGPU.cu +++ b/Detectors/ITSMFT/ITS/tracking/GPU/cuda/VertexerTraitsGPU.cu @@ -91,10 +91,6 @@ VertexerTraitsGPU::VertexerTraitsGPU() setIsGPU(true); } -VertexerTraitsGPU::~VertexerTraitsGPU() -{ -} - void VertexerTraitsGPU::initialise(const TrackingParameters& trackingParams, const int iteration) { mTimeFrameGPU->initialise(0, trackingParams, 3, &mIndexTableUtils, &mTfGPUParams); diff --git a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/Vertexer.h b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/Vertexer.h index f9f817d3de220..f6be170c76255 100644 --- a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/Vertexer.h +++ b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/Vertexer.h @@ -72,10 +72,12 @@ class Vertexer void findTrivialMCTracklets(); template void validateTracklets(T&&... args); - void validateTrackletsHybrid(); + template + void validateTrackletsHybrid(T&&... args); template void findVertices(T&&... args); - void findVerticesHybrid(); + template + void findVerticesHybrid(T&&... args); void findHistVertices(); template @@ -153,14 +155,16 @@ void Vertexer::findTrackletsHybrid(T&&... args) mTraits->computeTrackletsHybrid(std::forward(args)...); } -inline void Vertexer::validateTrackletsHybrid() +template +inline void Vertexer::validateTrackletsHybrid(T&&... args) { - mTraits->computeTrackletMatchingHybrid(); + mTraits->computeTrackletMatchingHybrid(std::forward(args)...); } -inline void Vertexer::findVerticesHybrid() +template +inline void Vertexer::findVerticesHybrid(T&&... args) { - mTraits->computeVerticesHybrid(); + mTraits->computeVerticesHybrid(std::forward(args)...); } template diff --git a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/VertexerTraits.h b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/VertexerTraits.h index 2961488ab5dbf..4878c65d26e1b 100644 --- a/Detectors/ITSMFT/ITS/tracking/include/ITStracking/VertexerTraits.h +++ b/Detectors/ITSMFT/ITS/tracking/include/ITStracking/VertexerTraits.h @@ -69,10 +69,10 @@ class VertexerTraits virtual void adoptTimeFrame(TimeFrame* tf); virtual void updateVertexingParameters(const std::vector& vrtPar, const TimeFrameGPUParameters& gpuTfPar); // Hybrid - virtual void initialiseHybrid(const TrackingParameters& trackingParams) { initialise(trackingParams); }; - virtual void computeTrackletsHybrid() { computeTracklets(); }; - virtual void computeTrackletMatchingHybrid() { computeTrackletMatching(); }; - virtual void computeVerticesHybrid() { computeVertices(); }; + virtual void initialiseHybrid(const TrackingParameters& trackingParams, const int iteration = 0) { initialise(trackingParams, iteration); }; + virtual void computeTrackletsHybrid(const int iteration = 0) { computeTracklets(iteration); }; + virtual void computeTrackletMatchingHybrid(const int iteration = 0) { computeTrackletMatching(iteration); }; + virtual void computeVerticesHybrid(const int iteration = 0) { computeVertices(iteration); }; virtual void adoptTimeFrameHybrid(TimeFrame* tf) { adoptTimeFrame(tf); }; void computeVerticesInRof(int, diff --git a/Detectors/ITSMFT/ITS/tracking/src/Vertexer.cxx b/Detectors/ITSMFT/ITS/tracking/src/Vertexer.cxx index 8bfe04e87edaf..da593602d8fcc 100644 --- a/Detectors/ITSMFT/ITS/tracking/src/Vertexer.cxx +++ b/Detectors/ITSMFT/ITS/tracking/src/Vertexer.cxx @@ -60,12 +60,17 @@ float Vertexer::clustersToVerticesHybrid(std::function logg { float total{0.f}; TrackingParameters trkPars; - trkPars.PhiBins = mTraits->getVertexingParameters()[0].PhiBins; - trkPars.ZBins = mTraits->getVertexingParameters()[0].ZBins; - total += evaluateTask(&Vertexer::initialiseVertexerHybrid, "Hybrid Vertexer initialisation", logger, trkPars); - total += evaluateTask(&Vertexer::findTrackletsHybrid, "Hybrid Vertexer tracklet finding", logger); - total += evaluateTask(&Vertexer::validateTrackletsHybrid, "Hybrid Vertexer adjacent tracklets validation", logger); - total += evaluateTask(&Vertexer::findVerticesHybrid, "Hybrid Vertexer vertex finding", logger); + TimeFrameGPUParameters tfGPUpar; + mTraits->updateVertexingParameters(mVertParams, tfGPUpar); + for (int iteration = 0; iteration < std::min(mVertParams[0].nIterations, (int)mVertParams.size()); ++iteration) { + logger(fmt::format("ITS Hybrid seeding vertexer iteration {} summary:", iteration)); + trkPars.PhiBins = mTraits->getVertexingParameters()[0].PhiBins; + trkPars.ZBins = mTraits->getVertexingParameters()[0].ZBins; + total += evaluateTask(&Vertexer::initialiseVertexerHybrid, "Hybrid Vertexer initialisation", logger, trkPars, iteration); + total += evaluateTask(&Vertexer::findTrackletsHybrid, "Hybrid Vertexer tracklet finding", logger, iteration); + total += evaluateTask(&Vertexer::validateTrackletsHybrid, "Hybrid Vertexer adjacent tracklets validation", logger, iteration); + total += evaluateTask(&Vertexer::findVerticesHybrid, "Hybrid Vertexer vertex finding", logger, iteration); + } printEpilog(logger, total); return total; }