@@ -494,6 +494,10 @@ struct AnalysisEventSelection {
494494 // create the mixing hash and publish it into the hash table
495495 if (fMixHandler != nullptr ) {
496496 int hh = fMixHandler ->FindEventCategory (dqtablereader_helpers::varValues ());
497+ // events outside the mixing limits (-1) get a distinct negative hash so that they are not mixed with each other
498+ if (hh < 0 ) {
499+ hh = -1 - static_cast <int >(event.globalIndex ());
500+ }
497501 hash (hh);
498502 }
499503 }
@@ -1714,6 +1718,9 @@ struct AnalysisSameEventPairing {
17141718 }
17151719
17161720 if (fConfigRunMixingAcrossTFs ) {
1721+ if (fNCutsBarrel > MixingHandler::NMaxCuts) {
1722+ LOGF (fatal, " Across-TF mixing supports at most %d barrel track-cut bits, got %d" , MixingHandler::NMaxCuts, fNCutsBarrel );
1723+ }
17171724 TString mixVarsString = fConfigMixingVariables .value ;
17181725 TString mixVarsJsonString = fConfigMixingVariablesJson .value ;
17191726 std::unique_ptr<TObjArray> objArray (mixVarsString.Tokenize (" ," ));
@@ -1899,6 +1906,10 @@ struct AnalysisSameEventPairing {
18991906 {
19001907 if (events.size () > 0 ) { // Additional protection to avoid crashing of events.begin().runNumber()
19011908 if (fCurrentRun != events.begin ().runNumber ()) {
1909+ if (fConfigRunMixingAcrossTFs ) {
1910+ // do not mix events from different runs
1911+ fMixingHandler .ClearPools ();
1912+ }
19021913 initParamsFromCCDB (events.begin ().timestamp (), events.begin ().runNumber (), TTwoProngFitter);
19031914 fCurrentRun = events.begin ().runNumber ();
19041915 }
@@ -2006,6 +2017,10 @@ struct AnalysisSameEventPairing {
20062017 }
20072018 VarManager::FillEventFlowResoFactor (ResoFlowSP, ResoFlowEP);
20082019 }
2020+ int mixingCategory = -1 ;
2021+ if (fConfigRunMixingAcrossTFs ) {
2022+ mixingCategory = fMixingHandler .FindEventCategory (dqtablereader_helpers::varValues ());
2023+ }
20092024
20102025 bool isFirst = true ;
20112026 for (auto const & [a1, a2] : o2::soa::combinations (groupedAssocs, groupedAssocs)) {
@@ -2478,6 +2493,9 @@ struct AnalysisSameEventPairing {
24782493
24792494 if (fConfigRunMixingAcrossTFs ) {
24802495 // run event mixing across TFs
2496+ if (mixingCategory < 0 ) {
2497+ continue ;
2498+ }
24812499 // 1) create a MixingEvent and fill it with the relevant tracks
24822500 MixingHandler::MixingEvent mixingEvent;
24832501 uint32_t trackFilterForMixing = 0 ;
@@ -2496,8 +2514,11 @@ struct AnalysisSameEventPairing {
24962514 }
24972515 }
24982516 }
2517+ if (mixingEvent.tracks1 .empty () && mixingEvent.tracks2 .empty ()) {
2518+ continue ;
2519+ }
24992520 // 2) run the mixing with the events in the pool corresponding to this event
2500- auto & pool = fMixingHandler .GetPool (fMixingHandler . FindEventCategory ( dqtablereader_helpers::varValues ()) );
2521+ auto & pool = fMixingHandler .GetPool (mixingCategory );
25012522 for (auto const & poolEvent : pool.GetEvents ()) {
25022523 for (auto const & t1 : mixingEvent.tracks1 ) {
25032524 // run +- pairing
@@ -2561,7 +2582,7 @@ struct AnalysisSameEventPairing {
25612582 }
25622583 }
25632584 // 3) add the current event to the pool
2564- pool.UpdatePool (mixingEvent, fMixingHandler .GetPoolDepth ());
2585+ pool.UpdatePool (mixingEvent, fMixingHandler .GetPoolDepth (), mixingEvent. filteringMask );
25652586 // pool.Print();
25662587 }
25672588 } // end loop over events
0 commit comments