36 LogFunc evalLog = [](
const std::string&) {};
38 if (mTimeFrame->hasMCinformation() && mVertParams[0].useTruthSeeding) {
46 mTraits->updateVertexingParameters(mVertParams);
48 auto handleException = [&](
const auto& err) {
49 LOGP(error,
"Encountered critical error in step {}, stopping further processing of this TF: {}", StateNames[mCurStep], err.what());
50 if (!mVertParams[0].DropTFUponFailure) {
53 LOGP(error,
"Dropping this TF!");
57 float timeTracklet{0.f}, timeSelection{0.f}, timeVertexing{0.f}, timeInit{0.f};
58 bool completed =
false;
60 for (
int iteration = 0; iteration < (
int)mVertParams.size(); ++iteration) {
61 mMemoryPool->setMaxMemory(mVertParams[iteration].MaxMemory);
62 unsigned int nTracklets01{0}, nTracklets12{0};
63 logger(fmt::format(
"=== ITS {} Seeding vertexer iteration {} summary:", mTraits->getName(), iteration));
64 const auto& currentVtxPars = mTraits->getVertexingParameters()[iteration];
65 trkPars.
PhiBins = currentVtxPars.PhiBins;
66 trkPars.
ZBins = currentVtxPars.ZBins;
67 trkPars.
LayerZ = currentVtxPars.LayerZ;
68 trkPars.
LayerRadii = currentVtxPars.LayerRadii;
69 trkPars.
PassFlags = mVertParams[iteration].PassFlags;
72 auto timeTrackletIteration = evaluateTask(&
Vertexer::findTracklets, StateNames[mCurStep = Trackleting], iteration, evalLog, iteration);
73 nTracklets01 = mTimeFrame->getTotalTrackletsTF(0);
74 nTracklets12 = mTimeFrame->getTotalTrackletsTF(1);
75 auto timeSelectionIteration = evaluateTask(&
Vertexer::validateTracklets, StateNames[mCurStep = Selection], iteration, evalLog, iteration);
76 const auto nVerticesBefore = mTimeFrame->getPrimaryVertices().size();
77 auto timeVertexingIteration = evaluateTask(&
Vertexer::findVertices, StateNames[mCurStep = Finding], iteration, evalLog, iteration);
78 const auto nVerticesAfter = mTimeFrame->getPrimaryVertices().size();
79 printEpilog(logger, nTracklets01, nTracklets12, mTimeFrame->getNLinesTotal(), nVerticesAfter - nVerticesBefore, nVerticesAfter, timeInitIteration, timeTrackletIteration, timeSelectionIteration, timeVertexingIteration);
80 timeInit += timeInitIteration;
81 timeTracklet += timeTrackletIteration;
82 timeSelection += timeSelectionIteration;
83 timeVertexing += timeVertexingIteration;
91 }
catch (
const std::bad_alloc& err) {
94 LOGP(fatal,
"Uncaught exception!");
101 return timeInit + timeTracklet + timeSelection + timeVertexing;
107 auto& pvs = mTimeFrame->getPrimaryVertices();
112 const auto& a = pvs[i].getTimeStamp();
113 const auto& b = pvs[j].getTimeStamp();
114 const auto aLower = a.lower();
115 const auto bLower = b.lower();
116 if (aLower != bLower) {
117 return aLower < bLower;
119 return pvs[
i].getNContributors() > pvs[
j].getNContributors();
122 sortedVtx.reserve(pvs.size());
123 for (
const size_t idx :
indices) {
124 sortedVtx.push_back(pvs[idx]);
127 if (mTimeFrame->hasMCinformation()) {
128 auto& mc = mTimeFrame->getPrimaryVerticesLabels();
129 bounded_vector<VertexLabel> sortedMC(mMemoryPool.get());
130 for (
const size_t idx :
indices) {
131 sortedMC.push_back(mc[idx]);
136 mTimeFrame->updateROFVertexLookupTable();
175 unsigned int trackletN01,
unsigned int trackletN12,
176 unsigned selectedN,
unsigned int vertexN,
unsigned int totalVertexN,
177 float initT,
float trackletT,
float selecT,
float vertexT)
179 logger(fmt::format(
" - {}: completed in {:.2f} ms", StateNames[Init], initT));
180 logger(fmt::format(
" - {}: found {} | {} tracklets in {:.2f} ms", StateNames[Trackleting], trackletN01, trackletN12, trackletT));
181 logger(fmt::format(
" - {}: selected {} tracklets in {:.2f} ms", StateNames[Selection], selectedN, selecT));
182 logger(fmt::format(
" - {}: found {} vertices (total {}) in {:.2f} ms", StateNames[Finding], vertexN, totalVertexN, vertexT));