Skip to content

Commit b0daaf2

Browse files
committed
improvements to track outlier rejection
1 parent f28f5c4 commit b0daaf2

File tree

1 file changed

+32
-22
lines changed

1 file changed

+32
-22
lines changed

PWGJE/TableProducer/mcOutlierRejector.cxx

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

Comments
 (0)