@@ -37,10 +37,14 @@ 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<std::string> trackSelections{" trackSelections" , " globalTracks" , " set track selections" };
4042
4143 std::vector<bool > collisionFlag;
4244 std::vector<bool > mcCollisionFlag;
4345
46+ int trackSelection = jetderiveddatautilities::initialiseTrackSelection(static_cast <std::string>(trackSelections));
47+
4448 void processSetupCollisionSelection (aod::JCollisions const & collisions)
4549 {
4650 collisionFlag.clear ();
@@ -59,34 +63,40 @@ struct McOutlierRejectorTask {
5963 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 )
6064 {
6165 if (selectionObjects.size () != 0 ) {
62- bool isTrueOutlier = true ;
63- float maxSelectionObjectPt = 0.0 ;
66+ float selectionObjectPt = 0.0 ;
6467 if constexpr (std::is_same_v<std::decay_t <T>, aod::JetTracksMCD> || std::is_same_v<std::decay_t <T>, aod::JetParticles>) {
6568 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 ;
69+ selectionObjectPt = selectionObject.pt ();
70+ // may be slow - could save only MC particle then check difference only for tracks IDd as outliers?
71+ if constexpr (std::is_same_v<std::decay_t <T>, aod::JetTracksMCD>) { // tracks
72+ if (!jetderiveddatautilities::selectTrack (selectionObject, trackSelection)) {
73+ continue ;
74+ }
75+ auto & mcCollisions = mcCollisionsOpt.value ().get ();
76+ auto mcParticle = selectionObject.template mcParticle_as <soa::Join<aod::JetParticles, aod::JMcParticlePIs>>();
77+ auto mcCollision = mcCollisions.sliceBy (perColParticle, mcParticle.mcCollisionId ());
78+ int subGenID = mcCollision.begin ().subGeneratorId ();
79+ int diffCollisionID = mcParticle.mcCollisionId () - mcCollisionId;
80+ if (diffCollisionID != 0 &&
81+ selectionObjectPt > ptHatMax * ptHard) {
82+ if (subGenID != jetderiveddatautilities::JCollisionSubGeneratorId::mbGap && selectionObjectPt > ptHatMax * ptHard) {
83+ flagArray[collisionIndex] = true ;
8084 }
85+ if (subGenID == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap && selectionObjectPt > ptTrackMaxMinBias) {
86+ flagArray[collisionIndex] = true ;
87+ }
88+ }
89+ } else { // particles
90+ if (selectionObjectPt > ptHatMax * ptHard) {
91+ flagArray[collisionIndex] = true ;
8192 }
8293 }
8394 }
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
95+ } else { // jets
96+ selectionObjectPt = selectionObjects.iteratorAt (0 ).pt ();
97+ if (selectionObjectPt > ptHatMax * ptHard) {
98+ 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
99+ }
90100 }
91101 }
92102 }
0 commit comments