41 LogFunc evalLog = [](
const std::string&) {};
43 if (mTimeFrame->hasMCinformation() && mVertParams[0].useTruthSeeding) {
50 mTraits->updateVertexingParameters(mVertParams);
52 auto handleException = [&](
const auto& err) {
53 LOGP(error,
"Encountered critical error in step {}, stopping further processing of this TF: {}", StateNames[mCurState], err.what());
54 if (!mVertParams[0].DropTFUponFailure) {
57 LOGP(error,
"Dropping this TF!");
61 float timeTracklet{0.f}, timeSelection{0.f}, timeVertexing{0.f}, timeInit{0.f};
63 for (
int iteration = 0; iteration < (
int)mVertParams.size(); ++iteration) {
64 mMemoryPool->setMaxMemory(mVertParams[iteration].MaxMemory);
65 unsigned int nTracklets01{0}, nTracklets12{0};
66 logger(fmt::format(
"=== ITS {} Seeding vertexer iteration {} summary:", mTraits->getName(), iteration));
67 trkPars.
PhiBins = mTraits->getVertexingParameters()[0].PhiBins;
68 trkPars.
ZBins = mTraits->getVertexingParameters()[0].ZBins;
69 auto timeInitIteration = evaluateTask(&
Vertexer::initialiseVertexer, StateNames[mCurState = Init], iteration, evalLog, trkPars, iteration);
70 auto timeTrackletIteration = evaluateTask(&
Vertexer::findTracklets, StateNames[mCurState = Trackleting], iteration, evalLog, iteration);
71 nTracklets01 = mTimeFrame->getTotalTrackletsTF(0);
72 nTracklets12 = mTimeFrame->getTotalTrackletsTF(1);
73 auto timeSelectionIteration = evaluateTask(&
Vertexer::validateTracklets, StateNames[mCurState = Validating], iteration, evalLog, iteration);
74 const auto nVerticesBefore = mTimeFrame->getPrimaryVertices().size();
75 auto timeVertexingIteration = evaluateTask(&
Vertexer::findVertices, StateNames[mCurState = Finding], iteration, evalLog, iteration);
76 const auto nVerticesAfter = mTimeFrame->getPrimaryVertices().size();
77 printEpilog(logger, nTracklets01, nTracklets12, mTimeFrame->getNLinesTotal(), nVerticesAfter - nVerticesBefore, nVerticesAfter, timeTrackletIteration, timeSelectionIteration, timeVertexingIteration);
78 timeInit += timeInitIteration;
79 timeTracklet += timeTrackletIteration;
80 timeSelection += timeSelectionIteration;
81 timeVertexing += timeVertexingIteration;
85 mTimeFrame->updateROFVertexLookupTable();
89 }
catch (
const std::bad_alloc& err) {
92 LOGP(fatal,
"Uncaught exception!");
95 return timeInit + timeTracklet + timeSelection + timeVertexing;
101 auto& pvs = mTimeFrame->getPrimaryVertices();
106 const auto& a = pvs[i].getTimeStamp();
107 const auto& b = pvs[j].getTimeStamp();
108 const auto aLower = a.lower();
109 const auto bLower = b.lower();
110 if (aLower != bLower) {
111 return aLower < bLower;
113 return pvs[
i].getNContributors() > pvs[
j].getNContributors();
116 sortedVtx.reserve(pvs.size());
117 for (
const size_t idx :
indices) {
118 sortedVtx.push_back(pvs[idx]);
121 if (mTimeFrame->hasMCinformation()) {
122 auto& mc = mTimeFrame->getPrimaryVerticesLabels();
123 bounded_vector<VertexLabel> sortedMC(mMemoryPool.get());
124 for (
const size_t idx :
indices) {
125 sortedMC.push_back(mc[idx]);
140 const unsigned int trackletN01,
const unsigned int trackletN12,
141 const unsigned selectedN,
const unsigned int vertexN,
const unsigned int totalVertexN,
142 const float trackletT,
const float selecT,
const float vertexT)
144 logger(fmt::format(
" - {} Vertexer: found {} | {} tracklets in: {:.2f} ms", mTraits->getName(), trackletN01, trackletN12, trackletT));
145 logger(fmt::format(
" - {} Vertexer: selected {} tracklets in: {:.2f} ms", mTraits->getName(), selectedN, selecT));
146 logger(fmt::format(
" - {} Vertexer: found {} vertices (total: {}) in: {:.2f} ms", mTraits->getName(), vertexN, totalVertexN, vertexT));