Skip to content

Commit 4fed5d2

Browse files
committed
improvements to track outlier rejection
1 parent 4be7a41 commit 4fed5d2

File tree

1 file changed

+34
-22
lines changed

1 file changed

+34
-22
lines changed

PWGJE/TableProducer/mcOutlierRejector.cxx

Lines changed: 34 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)