@@ -207,13 +207,14 @@ struct BcSelectionTask {
207207 selection[kNoPileupFromSPD ] = (eventCuts & 1 << aod::kIsPileupFromSPD ) == 0 ;
208208 selection[kNoV0PFPileup ] = (eventCuts & 1 << aod::kIsV0PFPileup ) == 0 ;
209209
210- int64_t foundFT0 = bc.has_ft0 () ? bc.ft0 ().globalIndex () : -1 ;
210+ int32_t foundFT0 = bc.has_ft0 () ? bc.ft0 ().globalIndex () : -1 ;
211+ int32_t foundFV0 = bc.has_fv0a () ? bc.fv0a ().globalIndex () : -1 ;
211212
212213 // Fill bc selection columns
213214 bcsel (alias, selection,
214215 bbV0A, bbV0C, bgV0A, bgV0C,
215216 bbFDA, bbFDC, bgFDA, bgFDC,
216- multRingV0A, multRingV0C, spdClusters, foundFT0);
217+ multRingV0A, multRingV0C, spdClusters, foundFT0, foundFV0 );
217218 }
218219 }
219220 PROCESS_SWITCH (BcSelectionTask, processRun2, " Process Run2 event selection" , true );
@@ -275,13 +276,14 @@ struct BcSelectionTask {
275276
276277 uint32_t spdClusters = 0 ;
277278
278- int64_t foundFT0 = bc.has_ft0 () ? bc.ft0 ().globalIndex () : -1 ;
279+ int32_t foundFT0 = bc.has_ft0 () ? bc.ft0 ().globalIndex () : -1 ;
280+ int32_t foundFV0 = bc.has_fv0a () ? bc.fv0a ().globalIndex () : -1 ;
279281 LOGP (debug, " foundFT0={}\n " , foundFT0);
280282 // Fill bc selection columns
281283 bcsel (alias, selection,
282284 bbV0A, bbV0C, bgV0A, bgV0C,
283285 bbFDA, bbFDC, bgFDA, bgFDC,
284- multRingV0A, multRingV0C, spdClusters, foundFT0);
286+ multRingV0A, multRingV0C, spdClusters, foundFT0, foundFV0 );
285287 }
286288 }
287289 PROCESS_SWITCH (BcSelectionTask, processRun3, " Process Run3 event selection" , false );
@@ -291,6 +293,7 @@ struct EventSelectionTask {
291293 Produces<aod::EvSels> evsel;
292294 Configurable<std::string> syst{" syst" , " PbPb" , " pp, pPb, Pbp, PbPb, XeXe" }; // TODO determine from AOD metadata or from CCDB
293295 Configurable<int > muonSelection{" muonSelection" , 0 , " 0 - barrel, 1 - muon selection with pileup cuts, 2 - muon selection without pileup cuts" };
296+ Configurable<int > customDeltaBC{" customDeltaBC" , 300 , " custom BC delta for FIT-collision matching" };
294297 Configurable<bool > isMC{" isMC" , 0 , " 0 - data, 1 - MC" };
295298 Partition<aod::Tracks> tracklets = (aod::track::trackType == static_cast <uint8_t >(o2::aod::track::TrackTypeEnum::Run2Tracklet));
296299 EvSelParameters par;
@@ -365,7 +368,8 @@ struct EventSelectionTask {
365368 void processRun2 (aod::Collision const & col, BCsWithBcSels const & bcs, aod::Tracks const & tracks)
366369 {
367370 auto bc = col.bc_as <BCsWithBcSels>();
368- int64_t foundFT0 = bc.foundFT0 ();
371+ int32_t foundFT0 = bc.foundFT0 ();
372+ int32_t foundFV0 = bc.foundFV0 ();
369373
370374 // copy alias decisions from bcsel table
371375 int32_t alias[kNaliases ];
@@ -421,45 +425,55 @@ struct EventSelectionTask {
421425 bbV0A, bbV0C, bgV0A, bgV0C,
422426 bbFDA, bbFDC, bgFDA, bgFDC,
423427 multRingV0A, multRingV0C, spdClusters, nTkl, sel7, sel8,
424- foundFT0);
428+ foundFT0, foundFV0 );
425429 }
426430 PROCESS_SWITCH (EventSelectionTask, processRun2, " Process Run2 event selection" , true );
427431
428432 void processRun3 (aod::Collision const & col, BCsWithBcSels const & bcs)
429433 {
430434 auto bc = col.bc_as <BCsWithBcSels>();
431- int64_t foundFT0 = bc.foundFT0 ();
435+ uint64_t apprBC = bc.globalBC ();
436+ int64_t meanBC = apprBC - std::lround (col.collisionTime () / o2::constants::lhc::LHCBunchSpacingNS);
437+ int64_t deltaBC = std::ceil (col.collisionTimeRes () / o2::constants::lhc::LHCBunchSpacingNS * 4 );
438+ // use custom delta
439+ if (customDeltaBC > 0 ) {
440+ deltaBC = customDeltaBC;
441+ }
432442
443+ int32_t foundFT0 = bc.foundFT0 ();
433444 if (foundFT0 < 0 ) { // search in +/-4 sigma around meanBC
434- int64_t apprBC = bc.globalBC ();
435- int64_t meanBC = apprBC - std::lround (col.collisionTime () / o2::constants::lhc::LHCBunchSpacingNS);
436- int64_t deltaBC = std::ceil (col.collisionTimeRes () / o2::constants::lhc::LHCBunchSpacingNS * 4 );
437445 // search forward
438446 int forwardMoveCount = 0 ;
439447 int64_t forwardBcDist = deltaBC + 1 ;
440- for (; bc != bcs.end () && apprBC - meanBC <= deltaBC; ++bc, ++forwardMoveCount) {
448+ for (; bc != bcs.end () && int64_t (bc. globalBC ()) <= meanBC + deltaBC; ++bc, ++forwardMoveCount) {
441449 if (bc.foundFT0 () >= 0 ) {
442- forwardBcDist = apprBC - meanBC;
450+ forwardBcDist = bc. globalBC () - meanBC;
443451 break ;
444452 }
445453 }
446454 bc.moveByIndex (-forwardMoveCount);
447455 // search backward
448456 int backwardMoveCount = 0 ;
449457 int64_t backwardBcDist = deltaBC + 1 ;
450- for (; bc != bcs. begin () && apprBC - meanBC >= - deltaBC; --bc, -- backwardMoveCount) {
458+ for (; int64_t (bc. globalBC ()) >= meanBC - deltaBC; --bc, ++ backwardMoveCount) {
451459 if (bc.foundFT0 () >= 0 ) {
452- backwardBcDist = meanBC - apprBC;
460+ backwardBcDist = meanBC - bc.globalBC ();
461+ break ;
462+ }
463+ if (bc == bcs.begin ()) {
453464 break ;
454465 }
455466 }
456467 if (forwardBcDist > deltaBC && backwardBcDist > deltaBC) {
457- bc.moveByIndex (- backwardMoveCount); // return to nominal bc if neighbouring ft0 is not found
468+ bc.moveByIndex (backwardMoveCount); // return to nominal bc if neighbouring ft0 is not found
458469 } else if (forwardBcDist < backwardBcDist) {
459- bc.moveByIndex (- backwardMoveCount + forwardMoveCount); // move forward
460- }
470+ bc.moveByIndex (backwardMoveCount + forwardMoveCount); // move forward
471+ } // else keep backward bc
461472 }
462- LOGP (debug, " {}" , bc.foundFT0 ());
473+ foundFT0 = bc.foundFT0 ();
474+
475+ int32_t foundFV0 = bc.foundFV0 ();
476+ LOGP (debug, " foundFT0 = {}" , foundFT0);
463477
464478 // copy alias decisions from bcsel table
465479 int32_t alias[kNaliases ];
@@ -508,7 +522,7 @@ struct EventSelectionTask {
508522 bbV0A, bbV0C, bgV0A, bgV0C,
509523 bbFDA, bbFDC, bgFDA, bgFDC,
510524 multRingV0A, multRingV0C, spdClusters, nTkl, sel7, sel8,
511- foundFT0);
525+ foundFT0, foundFV0 );
512526 }
513527 PROCESS_SWITCH (EventSelectionTask, processRun3, " Process Run3 event selection" , false );
514528};
0 commit comments