@@ -410,42 +410,80 @@ struct EventSelectionTask {
410410 void processRun3 (aod::Collision const & col, BCsWithBcSels const & bcs)
411411 {
412412 auto bc = col.bc_as <BCsWithBcSels>();
413- uint64_t apprBC = bc.globalBC ();
414- int64_t meanBC = apprBC - std::lround (col.collisionTime () / o2::constants::lhc::LHCBunchSpacingNS);
413+ int64_t shift = 0 ;
414+
415+ // temporary workaround for apass1. Might be included in CCDB in the future
416+ if (bc.runNumber () > 520143 ) {
417+ shift = col.collisionTimeRes () < 12 ? -2 : -15 ;
418+ } else if (bc.runNumber () >= 523141 ) {
419+ shift = col.collisionTimeRes () < 12 ? -2 : 0 ;
420+ }
421+
422+ int64_t meanBC = bc.globalBC () + shift;
415423 int64_t deltaBC = std::ceil (col.collisionTimeRes () / o2::constants::lhc::LHCBunchSpacingNS * 4 );
424+
416425 // use custom delta
417426 if (customDeltaBC > 0 ) {
418427 deltaBC = customDeltaBC;
419428 }
420429
421- if (!bc.has_foundFT0 ()) { // search in +/-4 sigma around meanBC
422- // search forward
423- int forwardMoveCount = 0 ;
424- int64_t forwardBcDist = deltaBC + 1 ;
425- for (; bc != bcs.end () && int64_t (bc.globalBC ()) <= meanBC + deltaBC; ++bc, ++forwardMoveCount) {
426- if (bc.has_foundFT0 ()) {
427- forwardBcDist = bc.globalBC () - meanBC;
428- break ;
429- }
430+ uint64_t minBC = meanBC - deltaBC;
431+ uint64_t maxBC = meanBC + deltaBC;
432+
433+ // temporary workaround for apass1. Might be included in CCDB in the future
434+ if (bc.runNumber () >= 520143 && col.collisionTimeRes () < 12 ) { // collisions with TOF-matched tracks
435+ minBC = meanBC - 13 ;
436+ maxBC = meanBC;
437+ } else if (bc.runNumber () >= 523141 && col.collisionTimeRes () < 12 ) { // collisions with TOF-matched tracks
438+ minBC = meanBC - 2 ;
439+ maxBC = meanBC + 4 ;
440+ }
441+ if (bc.runNumber () == 505600 ) { // pilot run without TOF - using custom delta bc to improve matching
442+ minBC = meanBC - 400 ;
443+ maxBC = meanBC + 400 ;
444+ }
445+
446+ int forwardMoveCount = 0 , backwardMoveCount = 0 ;
447+ uint64_t backwardBC = minBC - 1 ;
448+ uint64_t forwardBC = maxBC + 1 ;
449+ // search in forward direction starting from the current bc
450+ while (bc != bcs.end () && bc.globalBC () <= maxBC && bc.globalBC () >= minBC) {
451+ if (bc.selection ()[kIsBBT0A ] || bc.selection ()[kIsBBT0C ]) {
452+ forwardBC = bc.globalBC ();
453+ break ;
430454 }
431- bc.moveByIndex (-forwardMoveCount);
432- // search backward
433- int backwardMoveCount = 0 ;
434- int64_t backwardBcDist = deltaBC + 1 ;
435- for (; int64_t (bc.globalBC ()) >= meanBC - deltaBC; --bc, ++backwardMoveCount) {
436- if (bc.has_foundFT0 ()) {
437- backwardBcDist = meanBC - bc.globalBC ();
438- break ;
439- }
440- if (bc == bcs.begin ()) {
441- break ;
442- }
455+ bc++;
456+ forwardMoveCount++;
457+ }
458+ bc.moveByIndex (-forwardMoveCount);
459+
460+ // search in backward direction
461+ while (bc.globalIndex () > 0 && bc.globalBC () >= minBC) {
462+ bc--;
463+ backwardMoveCount--;
464+ if (bc.globalBC () > maxBC || bc.globalBC () < minBC) {
465+ continue ;
466+ }
467+ if (bc.selection ()[kIsBBT0A ] || bc.selection ()[kIsBBT0C ]) {
468+ backwardBC = bc.globalBC ();
469+ break ;
443470 }
444- if (forwardBcDist > deltaBC && backwardBcDist > deltaBC) {
445- bc.moveByIndex (backwardMoveCount); // return to nominal bc if neighbouring ft0 is not found
446- } else if (forwardBcDist < backwardBcDist) {
447- bc.moveByIndex (backwardMoveCount + forwardMoveCount); // move forward
448- } // else keep backward bc
471+ }
472+ bc.moveByIndex (-backwardMoveCount);
473+
474+ if (forwardBC <= maxBC && backwardBC >= minBC) {
475+ // if FT0 is found on both sides from meanBC, move to closest one
476+ if (labs (int64_t (forwardBC) - meanBC) < labs (int64_t (backwardBC) - meanBC)) {
477+ bc.moveByIndex (forwardMoveCount);
478+ } else {
479+ bc.moveByIndex (backwardMoveCount);
480+ }
481+ } else if (forwardBC <= maxBC) {
482+ // if FT0 is found only in forward, move forward
483+ bc.moveByIndex (forwardMoveCount);
484+ } else if (backwardBC >= minBC) {
485+ // if FT0 is found only in backward, move backward
486+ bc.moveByIndex (backwardMoveCount);
449487 }
450488
451489 int32_t foundBC = bc.globalIndex ();
0 commit comments