@@ -63,8 +63,14 @@ void Digitizer::init()
6363 // initialize the vector of TDC states
6464 mChips [i].resizeTDCStates (nReadOutCols);
6565 for (auto & tdcStates : mChips [i].getTDCStates ()) {
66- tdcStates[0 ] = -999 .f ;
67- tdcStates[1 ] = -999 .f ;
66+ for (int iT{0 }; iT < 4 ; ++iT) {
67+ tdcStates[iT] = -999 .f ;
68+ }
69+ }
70+ // initialize the vector of mask states
71+ mChips [i].resizeMaskStates (nReadOutCols);
72+ for (auto & maskStates: mChips [i].getMaskStates ()) {
73+ maskStates = -999 .f ;
6874 }
6975 }
7076
@@ -497,6 +503,7 @@ void Digitizer::fillOutputContainer()
497503
498504 auto & chipDigits = chip.getDigits ();
499505 auto & tdcStates = chip.getTDCStates ();
506+ auto & maskStates = chip.getMaskStates ();
500507
501508 for (const auto & [key, digit] : chipDigits) {
502509
@@ -506,15 +513,26 @@ void Digitizer::fillOutputContainer()
506513
507514 const int colInGroup = digit.getColumn () / digitizerParams.nColsPerGroup ;
508515 const double digitTime = digit.getTime ();
509- if (digitTime - tdcStates[colInGroup][0 ] < digitizerParams.tdcBusyTime && digitTime - tdcStates[colInGroup][1 ] < digitizerParams.tdcBusyTime ) {
510- // TODO: improve labels treatment if multiple hits cross the same pixel during
511- continue ; // both tdc pairs are busy
512- } else if (digitTime - tdcStates[colInGroup][0 ] > digitizerParams.tdcBusyTime ) {
513- tdcStates[colInGroup][0 ] = digitTime;
514- } else if (digitTime - tdcStates[colInGroup][1 ] > digitizerParams.tdcBusyTime ) {
515- tdcStates[colInGroup][1 ] = digitTime;
516+
517+ if (digitTime - maskStates[colInGroup] < digitizerParams.maskWindow ) {
518+ continue ; // the RO column is still masked
516519 }
517520
521+ int available = -1 ;
522+ for (int iT{0 }; iT < 4 ; ++iT) {
523+ if (digitTime - tdcStates[colInGroup][iT] > digitizerParams.tdcBusyTime ) {
524+ available = iT;
525+ break ;
526+ }
527+ }
528+
529+ if (available == -1 ) {
530+ continue ; // all tdc pairs are busy
531+ }
532+
533+ tdcStates[colInGroup][available] = digitTime;
534+ maskStates[colInGroup] = digitTime;
535+
518536 int digitID = mDigits ->size ();
519537 mDigits ->emplace_back (digit.getChipIndex (), digit.getRow (), digit.getColumn (), digit.getCharge (), digit.getTime (), digit.getBc (), digit.getTdc ());
520538 if (mMCLabels ) {
0 commit comments