@@ -170,11 +170,15 @@ void Clusterer::ClustererThread::findClustersSingleHit(gsl::span<const Digit> di
170170 const ConstDigitTruth* labelsDigPtr,
171171 ClusterTruth* labelsClusPtr)
172172{
173+ const auto & digitizerParams = o2::iotof::DPLDigitizerParam::Instance ();
173174 const auto & digit = digits[digitIdx];
174175 const uint16_t chipID = digit.getChipIndex ();
175176 const uint16_t row = digit.getRow ();
176177 const uint16_t col = digit.getColumn ();
177- const time_t time = digit.getTime ();
178+ // const time_t time = digit.getTime();
179+ const uint64_t nbc = digit.getBc ();
180+ const float timeWrtBc = digit.getTdc () * digitizerParams.tdcBin ;
181+ const time_t time = timeWrtBc + nbc * o2::constants::lhc::LHCBunchSpacingNS;
178182
179183 if (labelsClusPtr) {
180184 int nStoredLabels = 0 ;
@@ -192,7 +196,7 @@ void Clusterer::ClustererThread::findClustersSingleHit(gsl::span<const Digit> di
192196 constexpr uint16_t firedDigitsMask = (1U << 0 ); // 0x0001 (1)
193197 mClsTopoClassifier .getTopology (firedDigitsMask, minRow, rowSpan, minCol, colSpan, clsTopology);
194198 // Bit 0 corresponds to (rowOffset=0, colOffset=0) in row-major order
195- Cluster cluster (row, col, rowSpan, colSpan, firedDigitsMask, clsTopology, chipID, time);
199+ Cluster cluster (row, col, rowSpan, colSpan, firedDigitsMask, clsTopology, chipID, time, nbc, timeWrtBc );
196200
197201 LOG (debug) << " Pushing back cluster with row: " << row << " , col: " << col
198202 << " , rowSpan: " << static_cast <int >(rowSpan) << " , colSpan: " << static_cast <int >(colSpan)
@@ -270,7 +274,10 @@ void Clusterer::ClustererThread::findClustersMultipleHits(gsl::span<const Digit>
270274 const auto & digit = digits[precluster[0 ]];
271275 const uint16_t row = digit.getRow ();
272276 const uint16_t col = digit.getColumn ();
273- const time_t time = digit.getTime ();
277+ // const time_t time = digit.getTime();
278+ const uint64_t nbc = digit.getBc ();
279+ const float timeWrtBc = digit.getTdc () * digitizerParams.tdcBin ;
280+ const time_t time = timeWrtBc + nbc * o2::constants::lhc::LHCBunchSpacingNS;
274281
275282 if (labelsClusPtr) {
276283 int nMcLabels = 0 ;
@@ -288,7 +295,7 @@ void Clusterer::ClustererThread::findClustersMultipleHits(gsl::span<const Digit>
288295 constexpr uint16_t firedDigitsMask = (1U << 0 ); // 0x0001 (1)
289296 mClsTopoClassifier .getTopology (firedDigitsMask, minRow, rowSpan, minCol, colSpan, clsTopology);
290297 // Bit 0 corresponds to (rowOffset=0, colOffset=0) in row-major order
291- Cluster cluster (minRow, minCol, rowSpan, colSpan, firedDigitsMask, clsTopology, chipID, time);
298+ Cluster cluster (minRow, minCol, rowSpan, colSpan, firedDigitsMask, clsTopology, chipID, time, nbc, timeWrtBc );
292299
293300 LOG (debug) << " Pushing back cluster with row: " << row << " , col: " << col
294301 << " , rowSpan: " << static_cast <int >(rowSpan) << " , colSpan: " << static_cast <int >(colSpan)
@@ -314,19 +321,23 @@ void Clusterer::ClustererThread::findClustersMultipleHits(gsl::span<const Digit>
314321 minCol = std::min (minCol, digit.getColumn ());
315322 maxRow = std::max (maxRow, digit.getRow ());
316323 maxCol = std::max (maxCol, digit.getColumn ());
317- clsTime += digit.getTime ();
324+ const time_t time = digit.getTdc () * digitizerParams.tdcBin + digit.getBc () * o2::constants::lhc::LHCBunchSpacingNS;
325+ clsTime += time;
318326 fetchMCLabels (idx, labelsDigPtr, nMcLabels);
319327 }
320328 clsTime /= precluster.size ();
321329 const uint8_t rowSpan = maxRow - minRow + 1 ;
322330 const uint8_t colSpan = maxCol - minCol + 1 ;
323331
332+ const uint64_t nbc = static_cast <uint64_t >(clsTime / o2::constants::lhc::LHCBunchSpacingNS);
333+ const float timeWrtBc = clsTime - nbc * o2::constants::lhc::LHCBunchSpacingNS;
334+
324335 // Fired digits bitmask packed into a single 16-bit pattern variable
325336 uint16_t firedDigitsMask = 0 ;
326337
327338 if (rowSpan * colSpan > maxFiredDigitsForCls) {
328339 // Overflow precluster: pass InvalidPatternID (or 0) and kHuge topology flag
329- Cluster cluster (minRow, minCol, rowSpan, colSpan, Cluster::InvalidPatternID, Topologies::kHuge , chipID, clsTime);
340+ Cluster cluster (minRow, minCol, rowSpan, colSpan, Cluster::InvalidPatternID, Topologies::kHuge , chipID, clsTime, nbc, timeWrtBc );
330341 mClusters .emplace_back (cluster);
331342 mPatterns .emplace_back (Cluster::InvalidPatternID);
332343 continue ;
@@ -354,7 +365,7 @@ void Clusterer::ClustererThread::findClustersMultipleHits(gsl::span<const Digit>
354365 for (int i = 0 ; i < nMcLabels; i++) {
355366 mLabels .addElement (nStoredCls, mLabelsBuff [i]);
356367 }
357- Cluster cluster (minRow, minCol, rowSpan, colSpan, firedDigitsMask, clsTopology, chipID, clsTime);
368+ Cluster cluster (minRow, minCol, rowSpan, colSpan, firedDigitsMask, clsTopology, chipID, clsTime, nbc, timeWrtBc );
358369 LOG (debug) << " Pushing back cluster with row: " << minRow << " , col: " << minCol
359370 << " , rowSpan: " << static_cast <int >(rowSpan) << " , colSpan: " << static_cast <int >(colSpan)
360371 << " , pattern: " << firedDigitsMask << " , topology: " << static_cast <int >(clsTopology)
0 commit comments