@@ -37,10 +37,15 @@ struct McOutlierRejectorTask {
3737
3838 Configurable<bool > checkmcCollisionForCollision{" checkmcCollisionForCollision" , true , " additionally reject collision based on mcCollision" };
3939 Configurable<float > ptHatMax{" ptHatMax" , 4.0 , " maximum factor of pt hat the leading jet in the event is allowed" };
40+ Configurable<float > ptTrackMaxMinBias{" ptTrackMaxMinBias" , 20.0 , " maximum pt for track originating from minimum bias event" };
41+ Configurable<bool > isSelectTracks{" isSelectTracks" , true , " select tracks when ID track-based outliers" };
42+ Configurable<std::string> trackSelections{" trackSelections" , " globalTracks" , " set track selections" };
4043
4144 std::vector<bool > collisionFlag;
4245 std::vector<bool > mcCollisionFlag;
4346
47+ int trackSelection = jetderiveddatautilities::initialiseTrackSelection(static_cast <std::string>(trackSelections));
48+
4449 void processSetupCollisionSelection (aod::JCollisions const & collisions)
4550 {
4651 collisionFlag.clear ();
@@ -59,34 +64,41 @@ struct McOutlierRejectorTask {
5964 void collisionSelection (int32_t collisionIndex, int32_t mcCollisionId, T const & selectionObjects, float ptHard, std::vector<bool >& flagArray, std::optional<std::reference_wrapper<const soa::Join<aod::JetMcCollisions, aod::JMcCollisionPIs>>> mcCollisionsOpt = std::nullopt )
6065 {
6166 if (selectionObjects.size () != 0 ) {
62- bool isTrueOutlier = true ;
63- float maxSelectionObjectPt = 0.0 ;
67+ float selectionObjectPt = 0.0 ;
6468 if constexpr (std::is_same_v<std::decay_t <T>, aod::JetTracksMCD> || std::is_same_v<std::decay_t <T>, aod::JetParticles>) {
6569 for (auto selectionObject : selectionObjects) {
66- if (selectionObject.pt () > maxSelectionObjectPt) {
67- maxSelectionObjectPt = selectionObject.pt ();
68- // may be slow - could save only MC particle then check difference only for tracks IDd as outliers?
69- if constexpr (std::is_same_v<std::decay_t <T>, aod::JetTracksMCD>) {
70- auto & mcCollisions = mcCollisionsOpt.value ().get ();
71- auto mcParticle = selectionObject.template mcParticle_as <soa::Join<aod::JetParticles, aod::JMcParticlePIs>>();
72- auto mcCollision = mcCollisions.sliceBy (perColParticle, mcParticle.mcCollisionId ());
73- int subGenID = mcCollision.begin ().subGeneratorId ();
74- int diffCollisionID = mcParticle.mcCollisionId () - mcCollisionId;
75- if (subGenID != jetderiveddatautilities::JCollisionSubGeneratorId::mbGap &&
76- diffCollisionID != 0 ) {
77- isTrueOutlier = true ;
78- } else {
79- isTrueOutlier = false ;
70+ selectionObjectPt = selectionObject.pt ();
71+ // may be slow - could save only MC particle then check difference only for tracks IDd as outliers?
72+ if constexpr (std::is_same_v<std::decay_t <T>, aod::JetTracksMCD>) { // tracks
73+ if (!jetderiveddatautilities::selectTrack (selectionObject, trackSelection)) {
74+ continue ;
75+ }
76+ auto & mcCollisions = mcCollisionsOpt.value ().get ();
77+ auto mcParticle = selectionObject.template mcParticle_as <soa::Join<aod::JetParticles, aod::JMcParticlePIs>>();
78+ auto mcCollision = mcCollisions.sliceBy (perColParticle, mcParticle.mcCollisionId ());
79+ int subGenID = mcCollision.begin ().subGeneratorId ();
80+ int diffCollisionID = mcParticle.mcCollisionId () - mcCollisionId;
81+ if (diffCollisionID != 0 &&
82+ selectionObjectPt > ptHatMax * ptHard) {
83+ if (subGenID != jetderiveddatautilities::JCollisionSubGeneratorId::mbGap && selectionObjectPt > ptHatMax * ptHard) {
84+ flagArray[collisionIndex] = true ;
8085 }
86+ if (subGenID == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap && selectionObjectPt > ptTrackMaxMinBias) {
87+ flagArray[collisionIndex] = true ;
88+ }
89+ }
90+ }
91+ else { // particles
92+ if (selectionObjectPt > ptHatMax * ptHard) {
93+ flagArray[collisionIndex] = true ;
8194 }
8295 }
8396 }
84- } else {
85- maxSelectionObjectPt = selectionObjects.iteratorAt (0 ).pt ();
86- }
87-
88- if (maxSelectionObjectPt > ptHatMax * ptHard && isTrueOutlier) {
89- flagArray[collisionIndex] = true ; // Currently if running multiple different jet finders, then a single type of jet can veto an event for others. Decide if this is the best way
97+ } else { // jets
98+ selectionObjectPt = selectionObjects.iteratorAt (0 ).pt ();
99+ if (selectionObjectPt > ptHatMax * ptHard) {
100+ flagArray[collisionIndex] = true ; // Currently if running multiple different jet finders, then a single type of jet can veto an event for others. Decide if this is the best way
101+ }
90102 }
91103 }
92104 }
0 commit comments