2020#include " IOTOFSimulation/DPLDigitizerParam.h"
2121#include " DetectorsRaw/HBFUtils.h"
2222#include " CCDB/BasicCCDBManager.h"
23+ #include " CommonConstants/MathConstants.h"
2324
2425#include < TCollection.h>
2526#include < TFile.h>
@@ -63,8 +64,14 @@ void Digitizer::init()
6364 // initialize the vector of TDC states
6465 mChips [i].resizeTDCStates (nReadOutCols);
6566 for (auto & tdcStates : mChips [i].getTDCStates ()) {
66- tdcStates[0 ] = -999 .f ;
67- tdcStates[1 ] = -999 .f ;
67+ for (int iT = 0 ; iT < 4 ; ++iT) {
68+ tdcStates[iT] = -o2::constants::math::VeryBig;
69+ }
70+ }
71+ // initialize the vector of mask states
72+ mChips [i].resizeMaskStates (nReadOutCols);
73+ for (auto & maskStates : mChips [i].getMaskStates ()) {
74+ maskStates = -o2::constants::math::VeryBig;
6875 }
6976 }
7077
@@ -426,6 +433,7 @@ void Digitizer::fillOutputContainer()
426433
427434 auto & chipDigits = chip.getDigits ();
428435 auto & tdcStates = chip.getTDCStates ();
436+ auto & maskStates = chip.getMaskStates ();
429437
430438 for (const auto & [key, digit] : chipDigits) {
431439
@@ -435,15 +443,26 @@ void Digitizer::fillOutputContainer()
435443
436444 const int colInGroup = digit.getColumn () / digitizerParams.nColsPerGroup ;
437445 const double digitTime = digit.getTime ();
438- if (digitTime - tdcStates[colInGroup][0 ] < digitizerParams.tdcBusyTime && digitTime - tdcStates[colInGroup][1 ] < digitizerParams.tdcBusyTime ) {
439- // TODO: improve labels treatment if multiple hits cross the same pixel during
440- continue ; // both tdc pairs are busy
441- } else if (digitTime - tdcStates[colInGroup][0 ] > digitizerParams.tdcBusyTime ) {
442- tdcStates[colInGroup][0 ] = digitTime;
443- } else if (digitTime - tdcStates[colInGroup][1 ] > digitizerParams.tdcBusyTime ) {
444- tdcStates[colInGroup][1 ] = digitTime;
446+
447+ if (digitTime - maskStates[colInGroup] < digitizerParams.maskWindow ) {
448+ continue ; // the RO column is still masked
445449 }
446450
451+ int available = -1 ;
452+ for (int iT = 0 ; iT < 4 ; ++iT) {
453+ if (digitTime - tdcStates[colInGroup][iT] > digitizerParams.tdcBusyTime ) {
454+ available = iT;
455+ break ;
456+ }
457+ }
458+
459+ if (available == -1 ) {
460+ continue ; // all tdc pairs are busy
461+ }
462+
463+ tdcStates[colInGroup][available] = digitTime;
464+ maskStates[colInGroup] = digitTime;
465+
447466 int digitID = mDigits ->size ();
448467 mDigits ->emplace_back (digit.getChipIndex (), digit.getRow (), digit.getColumn (), digit.getCharge (), digit.getTime (), digit.getBc (), digit.getTdc ());
449468 if (mMCLabels ) {
0 commit comments