@@ -63,6 +63,7 @@ struct FilterCF {
6363 O2_DEFINE_CONFIGURABLE (cfgCollisionFlags, uint16_t , aod::collision::CollisionFlagsRun2::Run2VertexerTracks, " Request collision flags if non-zero (0 = off, 1 = Run2VertexerTracks)" )
6464 O2_DEFINE_CONFIGURABLE (cfgTransientTables, bool , false , " Output transient tables for collision and track IDs" )
6565 O2_DEFINE_CONFIGURABLE (cfgTrackSelection, int , 0 , " Type of track selection (0 = Run 2/3 without systematics | 1 = Run 3 with systematics)" )
66+ O2_DEFINE_CONFIGURABLE (cfgMinMultiplicity, float , -1 , " Minimum multiplicity considered for filtering (if value positive)" )
6667
6768 // Filters and input definitions
6869 Filter collisionZVtxFilter = nabs(aod::collision::posZ) < cfgCutVertex;
@@ -92,22 +93,26 @@ struct FilterCF {
9293 template <typename TCollision>
9394 bool keepCollision (TCollision& collision)
9495 {
96+ bool isMultSelected = false ;
97+ if (collision.multiplicity () >= cfgMinMultiplicity)
98+ isMultSelected = true ;
99+
95100 if (cfgTrigger == 0 ) {
96101 return true ;
97102 } else if (cfgTrigger == 7 ) {
98- return collision.alias_bit (kINT7 ) && collision.sel7 ();
103+ return isMultSelected && collision.alias_bit (kINT7 ) && collision.sel7 ();
99104 } else if (cfgTrigger == 8 ) {
100- return collision.sel8 ();
105+ return isMultSelected && collision.sel8 ();
101106 } else if (cfgTrigger == 9 ) { // relevant only for Pb-Pb
102- return collision.sel8 () && collision.selection_bit (aod::evsel::kNoSameBunchPileup ) && collision.selection_bit (aod::evsel::kIsGoodZvtxFT0vsPV );
107+ return isMultSelected && collision.sel8 () && collision.selection_bit (aod::evsel::kNoSameBunchPileup ) && collision.selection_bit (aod::evsel::kIsGoodZvtxFT0vsPV );
103108 } else if (cfgTrigger == 10 ) { // TVX trigger only (sel8 selection before April, 2024)
104- return collision.selection_bit (aod::evsel::kIsTriggerTVX );
109+ return isMultSelected && collision.selection_bit (aod::evsel::kIsTriggerTVX );
105110 } else if (cfgTrigger == 11 ) { // sel8 selection for MC
106- return collision.selection_bit (aod::evsel::kIsTriggerTVX ) && collision.selection_bit (aod::evsel::kNoTimeFrameBorder );
111+ return isMultSelected && collision.selection_bit (aod::evsel::kIsTriggerTVX ) && collision.selection_bit (aod::evsel::kNoTimeFrameBorder );
107112 } else if (cfgTrigger == 12 ) { // relevant only for Pb-Pb with occupancy cuts and rejection of the collisions which have other events nearby
108113 int occupancy = collision.trackOccupancyInTimeRange ();
109114 if (occupancy >= 0 && occupancy < 500 )
110- return collision.sel8 () && collision.selection_bit (aod::evsel::kNoSameBunchPileup ) && collision.selection_bit (aod::evsel::kIsGoodZvtxFT0vsPV ) && collision.selection_bit (aod::evsel::kNoCollInTimeRangeStandard );
115+ return isMultSelected && collision.sel8 () && collision.selection_bit (aod::evsel::kNoSameBunchPileup ) && collision.selection_bit (aod::evsel::kIsGoodZvtxFT0vsPV ) && collision.selection_bit (aod::evsel::kNoCollInTimeRangeStandard );
111116 else
112117 return false ;
113118 }
0 commit comments