Skip to content

Commit 3dad489

Browse files
authored
[PWGJE] include origin of track in outlier ID (#13929)
1 parent 814cc6d commit 3dad489

File tree

2 files changed

+47
-14
lines changed

2 files changed

+47
-14
lines changed

PWGJE/TableProducer/mcOutlierRejector.cxx

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ using namespace o2::framework::expressions;
3333
struct McOutlierRejectorTask {
3434
Produces<aod::JCollisionOutliers> collisionOutliers;
3535
Produces<aod::JMcCollisionOutliers> mcCollisionOutliers;
36+
Preslice<soa::Join<aod::JetMcCollisions, aod::JMcCollisionPIs>> perColParticle = aod::jmccollision::mcCollisionId;
3637

3738
Configurable<bool> checkmcCollisionForCollision{"checkmcCollisionForCollision", true, "additionally reject collision based on mcCollision"};
3839
Configurable<float> ptHatMax{"ptHatMax", 4.0, "maximum factor of pt hat the leading jet in the event is allowed"};
@@ -55,22 +56,36 @@ struct McOutlierRejectorTask {
5556
PROCESS_SWITCH(McOutlierRejectorTask, processSetupMcCollisionSelection, "Setup MC Collision processing", true);
5657

5758
template <typename T>
58-
void collisionSelection(int32_t collisionIndex, T const& selectionObjects, float ptHard, std::vector<bool>& flagArray)
59+
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)
5960
{
60-
6161
if (selectionObjects.size() != 0) {
62+
bool isTrueOutlier = true;
6263
float maxSelectionObjectPt = 0.0;
63-
if constexpr (std::is_same_v<std::decay_t<T>, aod::JetTracks> || std::is_same_v<std::decay_t<T>, aod::JetParticles>) {
64+
if constexpr (std::is_same_v<std::decay_t<T>, aod::JetTracksMCD> || std::is_same_v<std::decay_t<T>, aod::JetParticles>) {
6465
for (auto selectionObject : selectionObjects) {
6566
if (selectionObject.pt() > maxSelectionObjectPt) {
6667
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;
80+
}
81+
}
6782
}
6883
}
6984
} else {
7085
maxSelectionObjectPt = selectionObjects.iteratorAt(0).pt();
7186
}
7287

73-
if (maxSelectionObjectPt > ptHatMax * ptHard) {
88+
if (maxSelectionObjectPt > ptHatMax * ptHard && isTrueOutlier) {
7489
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
7590
}
7691
}
@@ -80,13 +95,20 @@ struct McOutlierRejectorTask {
8095
void processSelectionObjects(aod::JetCollisionMCD const& collision, T const& selectionObjects, aod::JetMcCollisions const&)
8196
{
8297
auto mcCollision = collision.mcCollision_as<aod::JetMcCollisions>();
83-
collisionSelection(collision.globalIndex(), selectionObjects, mcCollision.ptHard(), collisionFlag);
98+
collisionSelection(collision.globalIndex(), 1., selectionObjects, mcCollision.ptHard(), collisionFlag);
99+
}
100+
101+
template <typename T>
102+
void processSelectionObjectsTracks(aod::JetCollisionMCD const& collision, T const& selectionObjects, soa::Join<aod::JetMcCollisions, aod::JMcCollisionPIs> const& mcCollisions, soa::Join<aod::JetParticles, aod::JMcParticlePIs> const&)
103+
{
104+
auto mcCollision = collision.mcCollision_as<soa::Join<aod::JetMcCollisions, aod::JMcCollisionPIs>>();
105+
collisionSelection(collision.globalIndex(), collision.mcCollisionId(), selectionObjects, mcCollision.ptHard(), collisionFlag, mcCollisions);
84106
}
85107

86108
template <typename T>
87109
void processSelectionMcObjects(aod::JetMcCollision const& mcCollision, T const& selectionMcObjects)
88110
{
89-
collisionSelection(mcCollision.globalIndex(), selectionMcObjects, mcCollision.ptHard(), mcCollisionFlag);
111+
collisionSelection(mcCollision.globalIndex(), 1., selectionMcObjects, mcCollision.ptHard(), mcCollisionFlag);
90112
}
91113

92114
PROCESS_SWITCH_FULL(McOutlierRejectorTask, processSelectionObjects<aod::ChargedMCDetectorLevelJets>, processSelectingChargedMCDetectorLevelJets, "process mc detector level charged jets", true);
@@ -101,7 +123,7 @@ struct McOutlierRejectorTask {
101123
PROCESS_SWITCH_FULL(McOutlierRejectorTask, processSelectionObjects<aod::BplusChargedMCDetectorLevelJets>, processSelectingBplusChargedMCDetectorLevelJets, "process mc detector level Bplus charged jets", false);
102124
PROCESS_SWITCH_FULL(McOutlierRejectorTask, processSelectionObjects<aod::XicToXiPiPiChargedMCDetectorLevelJets>, processSelectingXicToXiPiPiChargedMCDetectorLevelJets, "process mc detector level XicToXiPiPi charged jets", false);
103125
PROCESS_SWITCH_FULL(McOutlierRejectorTask, processSelectionObjects<aod::DielectronChargedMCDetectorLevelJets>, processSelectingDielectronChargedMCDetectorLevelJets, "process mc detector level Dielectron charged jets", false);
104-
PROCESS_SWITCH_FULL(McOutlierRejectorTask, processSelectionObjects<aod::JetTracks>, processSelectingTracks, "process tracks", false);
126+
PROCESS_SWITCH_FULL(McOutlierRejectorTask, processSelectionObjectsTracks<aod::JetTracksMCD>, processSelectingTracks, "process tracks", false);
105127
PROCESS_SWITCH_FULL(McOutlierRejectorTask, processSelectionMcObjects<aod::ChargedMCParticleLevelJets>, processSelectingChargedMCParticleLevelJets, "process mc particle level charged jets", true);
106128
PROCESS_SWITCH_FULL(McOutlierRejectorTask, processSelectionMcObjects<aod::NeutralMCParticleLevelJets>, processSelectingNeutralMCParticleLevelJets, "process mc particle level neutral jets", false);
107129
PROCESS_SWITCH_FULL(McOutlierRejectorTask, processSelectionMcObjects<aod::FullMCParticleLevelJets>, processSelectingFullMCParticleLevelJets, "process mc particle level full jets", false);

PWGJE/Tasks/jetFinderQA.cxx

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -329,14 +329,14 @@ struct JetFinderQATask {
329329
}
330330

331331
if (doprocessTracks || doprocessTracksWeighted) {
332-
registry.add("h_collisions", "event status;event status;entries", {HistType::kTH1F, {{4, 0.0, 4.0}}});
332+
registry.add("h_collisions", "event status;event status;entries", {HistType::kTH1F, {{5, 0.0, 5.0}}});
333333
registry.add("h2_centrality_collisions", "centrality vs collisions; centrality; collisions", {HistType::kTH2F, {{1200, -10.0, 110.0}, {4, 0.0, 4.0}}});
334334
registry.add("h3_centrality_track_pt_track_phi", "centrality vs track pT vs track #varphi; centrality; #it{p}_{T,track} (GeV/#it{c}); #varphi_{track}", {HistType::kTH3F, {{1200, -10.0, 110.0}, {200, 0., 200.}, {160, -1.0, 7.}}});
335335
registry.add("h3_centrality_track_pt_track_eta", "centrality vs track pT vs track #eta; centrality; #it{p}_{T,track} (GeV/#it{c}); #eta_{track}", {HistType::kTH3F, {{1200, -10.0, 110.0}, {200, 0., 200.}, trackEtaAxis}});
336336
registry.add("h3_centrality_track_pt_track_dcaxy", "centrality vs track pT vs track DCA_{xy}; centrality; #it{p}_{T,track} (GeV/#it{c}); track DCA_{xy}", {HistType::kTH3F, {{120, -10.0, 110.0}, {20, 0., 100.}, {200, -0.15, 0.15}}});
337337
registry.add("h3_track_pt_track_eta_track_phi", "track pT vs track #eta vs track #varphi; #it{p}_{T,track} (GeV/#it{c}); #eta_{track}; #varphi_{track}", {HistType::kTH3F, {{200, 0., 200.}, trackEtaAxis, {160, -1.0, 7.}}});
338338
if (doprocessTracksWeighted) {
339-
registry.add("h_collisions_weighted", "event status;event status;entries", {HistType::kTH1F, {{4, 0.0, 4.0}}});
339+
registry.add("h_collisions_weighted", "event status;event status;entries", {HistType::kTH1F, {{5, 0.0, 5.0}}});
340340
}
341341
}
342342
if (doprocessTracksSub) {
@@ -904,11 +904,14 @@ struct JetFinderQATask {
904904
}
905905
PROCESS_SWITCH(JetFinderQATask, processJetsMCD, "jet finder QA mcd", false);
906906

907-
void processJetsMCDWeighted(soa::Filtered<aod::JetCollisions>::iterator const& collision, soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents, aod::ChargedMCDetectorLevelJetEventWeights> const& jets, aod::JetTracks const&)
907+
void processJetsMCDWeighted(soa::Filtered<soa::Join<aod::JetCollisions, aod::JCollisionOutliers>>::iterator const& collision, soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents, aod::ChargedMCDetectorLevelJetEventWeights> const& jets, aod::JetTracks const&)
908908
{
909909
if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) {
910910
return;
911911
}
912+
if (collision.isOutlier()) {
913+
return;
914+
}
912915
for (auto const& jet : jets) {
913916
if (!jetfindingutilities::isInEtaAcceptance(jet, jetEtaMin, jetEtaMax, trackEtaMin, trackEtaMax)) {
914917
continue;
@@ -946,7 +949,7 @@ struct JetFinderQATask {
946949
}
947950
PROCESS_SWITCH(JetFinderQATask, processJetsMCP, "jet finder QA mcp", false);
948951

949-
void processJetsMCPWeighted(soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetEventWeights>::iterator const& jet, aod::JetParticles const&, aod::JetMcCollisions const&, soa::Filtered<aod::JetCollisionsMCD> const& collisions)
952+
void processJetsMCPWeighted(soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetEventWeights>::iterator const& jet, aod::JetParticles const&, aod::JetMcCollisions const&, soa::Filtered<soa::Join<aod::JetCollisionsMCD, aod::JCollisionOutliers>> const& collisions)
950953
{
951954
if (!jetfindingutilities::isInEtaAcceptance(jet, jetEtaMin, jetEtaMax, trackEtaMin, trackEtaMax)) {
952955
return;
@@ -962,7 +965,7 @@ struct JetFinderQATask {
962965
}
963966
if (checkMcCollisionIsMatched) {
964967
auto collisionspermcpjet = collisions.sliceBy(CollisionsPerMCPCollision, jet.mcCollisionId());
965-
if (collisionspermcpjet.size() >= 1 && jetderiveddatautilities::selectCollision(collisionspermcpjet.begin(), eventSelectionBits)) {
968+
if (collisionspermcpjet.size() >= 1 && jetderiveddatautilities::selectCollision(collisionspermcpjet.begin(), eventSelectionBits) && !collisionspermcpjet.begin().isOutlier()) {
966969
fillMCPHistograms(jet, jet.eventWeight());
967970
}
968971
} else {
@@ -997,14 +1000,17 @@ struct JetFinderQATask {
9971000
}
9981001
PROCESS_SWITCH(JetFinderQATask, processJetsMCPMCDMatched, "jet finder QA matched mcp and mcd", false);
9991002

1000-
void processJetsMCPMCDMatchedWeighted(soa::Filtered<aod::JetCollisions>::iterator const& collision,
1003+
void processJetsMCPMCDMatchedWeighted(soa::Filtered<soa::Join<aod::JetCollisions, aod::JCollisionOutliers>>::iterator const& collision,
10011004
soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents, aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets, aod::ChargedMCDetectorLevelJetEventWeights> const& mcdjets,
10021005
soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets, aod::ChargedMCParticleLevelJetEventWeights> const&,
10031006
aod::JetTracks const&, aod::JetParticles const&)
10041007
{
10051008
if (collision.trackOccupancyInTimeRange() < trackOccupancyInTimeRangeMin || trackOccupancyInTimeRangeMax < collision.trackOccupancyInTimeRange()) {
10061009
return;
10071010
}
1011+
if (collision.isOutlier()) {
1012+
return;
1013+
}
10081014
for (const auto& mcdjet : mcdjets) {
10091015
if (!jetfindingutilities::isInEtaAcceptance(mcdjet, jetEtaMin, jetEtaMax, trackEtaMin, trackEtaMax)) {
10101016
continue;
@@ -1188,7 +1194,7 @@ struct JetFinderQATask {
11881194
}
11891195
PROCESS_SWITCH(JetFinderQATask, processTracks, "QA for charged tracks", false);
11901196

1191-
void processTracksWeighted(soa::Join<aod::JetCollisions, aod::JMcCollisionLbs>::iterator const& collision,
1197+
void processTracksWeighted(soa::Join<aod::JetCollisions, aod::JMcCollisionLbs, aod::JCollisionOutliers>::iterator const& collision,
11921198
aod::JetMcCollisions const&,
11931199
soa::Filtered<soa::Join<aod::JetTracks, aod::JTrackExtras>> const& tracks)
11941200
{
@@ -1208,6 +1214,11 @@ struct JetFinderQATask {
12081214
}
12091215
registry.fill(HIST("h_collisions"), 2.5);
12101216
registry.fill(HIST("h_collisions_weighted"), 2.5, eventWeight);
1217+
if (collision.isOutlier()) {
1218+
return;
1219+
}
1220+
registry.fill(HIST("h_collisions"), 3.5);
1221+
registry.fill(HIST("h_collisions_weighted"), 3.5, eventWeight);
12111222
fillTrackHistograms(collision, tracks, eventWeight);
12121223
}
12131224
PROCESS_SWITCH(JetFinderQATask, processTracksWeighted, "QA for charged tracks weighted", false);

0 commit comments

Comments
 (0)