Skip to content

Commit 3542563

Browse files
authored
[PWGJE] additional outlier checks on tracks (#13747)
1 parent 7a6c1c2 commit 3542563

File tree

1 file changed

+46
-17
lines changed

1 file changed

+46
-17
lines changed

PWGJE/Tasks/jetOutlierQA.cxx

Lines changed: 46 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ struct JetOutlierQATask {
8484
Configurable<unsigned int> splitCollisionsDeltaBC{"splitCollisionsDeltaBC", 5, "threshold in BC to assign as split collision"};
8585
Configurable<int> mergeCollisionsDeltaMin{"mergeCollisionsDeltaMin", -10, "number of prior collisions to search for close Z position"};
8686
Configurable<int> mergeCollisionsDeltaMax{"mergeCollisionsDeltaMax", 10, "number of following collisions to search for close Z position"};
87+
Configurable<int> maxNTracksJJdifferent{"maxNTracksJJdifferent", 10, "maximum number of tracks from different JJ collision to be considered for track rejection"};
8788

8889
std::map<uint64_t, std::vector<int64_t>> fBCCollMap; // key: global BC, value: vector of reduced event global indices
8990

@@ -233,6 +234,15 @@ struct JetOutlierQATask {
233234
registry.add("h2_outlier_collision_ID_difference", "difference in collision ID between outlier collision and analysed collision", {HistType::kTH2F, {{600, 0, 600}, {200, -100, 100}}});
234235
registry.add("h_DeltaZ_Outlier", "Delta Z between outlier collision and analysed collision", {HistType::kTH1F, {{1200, -30, 30}}});
235236
registry.add("h2_DeltaZ_Outlier_difference", "Delta Z between outlier collision and analysed collision vs difference in collision ID", {HistType::kTH2F, {{1200, -30, 30}, {200, -100, 100}}});
237+
238+
registry.add("h_track_pt_same_collision", "track pt from same collision or different MB collision;p_{T,track} (GeV/#it{c});entries", {HistType::kTH1F, {{200, 0, 200}}});
239+
registry.add("h_track_pt_eta_same_collision", "track pt vs eta from same collision or different MB collision;p_{T,track} (GeV/#it{c});#eta_{track};entries", {HistType::kTH2F, {{200, 0, 200}, {100, -5, 5}}});
240+
registry.add("h_track_pt_phi_same_collision", "track pt vs phi from same collision or different MB collision;p_{T,track} (GeV/#it{c});#varphi_{track} (rad);entries", {HistType::kTH2F, {{200, 0, 200}, {160, -1.0, 7.0}}});
241+
registry.add("h2_collision_ID_difference_same_collision", "difference in collision ID between outlier collision and analysed collision", {HistType::kTH2F, {{600, 0, 600}, {200, -100, 100}}});
242+
registry.add("h_track_pt_no_JJ_different", "track pt from same collision or different MB collision;p_{T,track} (GeV/#it{c});entries", {HistType::kTH1F, {{200, 0, 200}}});
243+
registry.add("h_track_pt_eta_no_JJ_different", "track pt vs eta from same collision or different MB collision;p_{T,track} (GeV/#it{c});#eta_{track};entries", {HistType::kTH2F, {{200, 0, 200}, {100, -5, 5}}});
244+
registry.add("h_track_pt_phi_no_JJ_different", "track pt vs phi from same collision or different MB collision;p_{T,track} (GeV/#it{c});#varphi_{track} (rad);entries", {HistType::kTH2F, {{200, 0, 200}, {160, -1.0, 7.0}}});
245+
registry.add("h2_collision_ID_difference_no_JJ_different", "difference in collision ID between outlier collision and analysed collision", {HistType::kTH2F, {{600, 0, 600}, {200, -100, 100}}});
236246
}
237247
}
238248

@@ -567,6 +577,25 @@ struct JetOutlierQATask {
567577
}
568578
// check outlier tracks and neighbouring collisions
569579
registry.fill(HIST("h2_pt_hat_track_pt"), pTHat, track.pt());
580+
// get MC info about track and collision
581+
auto mcParticleOutlier = track.mcParticle_as<JetParticlesWithOriginal>();
582+
auto collisionMCOutlier = collisionsMC.sliceBy(perColParticle, mcParticleOutlier.mcCollisionId());
583+
if (collisionMCOutlier.size() != 1) {
584+
LOG(info) << "size of collision outlier not expected";
585+
return;
586+
}
587+
int mcCollisionIDcoll = collision.mcCollisionId(); // Get the corresponding MC collision ID from the reco collision
588+
int mcCollisionIDOutlier = mcParticleOutlier.mcCollisionId();
589+
int subGenIDOutlier = collisionMCOutlier.begin().subGeneratorId();
590+
int outlierCollisionIDDifference = mcCollisionIDOutlier - mcCollisionIDcoll;
591+
592+
int nMBdifferent = 0;
593+
int nMBdifferentSelected = 0;
594+
int nJJdifferent = 0;
595+
int nJJdifferentSelected = 0;
596+
int nJJsame = 0;
597+
int nJJsameSelected = 0;
598+
// ID outlier based on track pT relative to pTHat
570599
if (track.pt() > pTHatMaxMCDOutlier * pTHat) { // high weight outlier track
571600
registry.fill(HIST("h_track_pt_outlier"), track.pt());
572601
registry.fill(HIST("h2_pt_hat_track_pt_outlier"), pTHat, track.pt());
@@ -581,13 +610,6 @@ struct JetOutlierQATask {
581610
}
582611
// now match tracks to their MC particle, check the MC collision ID of this particle, and
583612
// check what fraction of tracks in this event are associated to this MC collision
584-
int nMBdifferent = 0;
585-
int nMBdifferentSelected = 0;
586-
int nJJdifferent = 0;
587-
int nJJdifferentSelected = 0;
588-
int nJJsame = 0;
589-
int nJJsameSelected = 0;
590-
int mcCollisionIDcoll = collision.mcCollisionId(); // Get the corresponding MC collision ID from the reco collision
591613
// LOG(info) << "--- Loop over tracks in outlier event with pT/pThat = " << track.pt() / pTHat << "---";
592614
// LOG(info) << "N tracks in outlier event = " << tracksColl.size() << " pTHat = " << pTHat << " collisionID = " << collision.globalIndex() << " mcCollisionID = " << collision.mcCollisionId();
593615
for (auto const& trackOutlier : tracksColl) {
@@ -639,15 +661,6 @@ struct JetOutlierQATask {
639661
registry.fill(HIST("h2_outlier_event_tracks_frac_different_selected_JJ"), pTHat, float(nJJdifferentSelected) / float(nJJdifferentSelected + nJJsameSelected + nMBdifferentSelected));
640662
registry.fill(HIST("h2_outlier_event_tracks_frac_different_selected_MB"), pTHat, float(nMBdifferentSelected) / float(nJJdifferentSelected + nJJsameSelected + nMBdifferentSelected));
641663
// now check where outlier comes from
642-
auto mcParticleOutlier = track.mcParticle_as<JetParticlesWithOriginal>();
643-
auto collisionMCOutlier = collisionsMC.sliceBy(perColParticle, mcParticleOutlier.mcCollisionId());
644-
if (collisionMCOutlier.size() != 1) {
645-
LOG(info) << "size of collision outlier not expected";
646-
return;
647-
}
648-
int mcCollisionIDOutlier = mcParticleOutlier.mcCollisionId();
649-
int subGenIDOutlier = collisionMCOutlier.begin().subGeneratorId();
650-
int outlierCollisionIDDifference = mcCollisionIDOutlier - mcCollisionIDcoll;
651664
// LOG(info) <<"outlier comes from " << (mcCollisionIDOutlier == mcCollisionIDcoll ? "same" : "different") << " event which is a " << (subGenIDOutlier == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap ? " MB-gap" : " jet-jet") << " collision with mcCollisionID = " << mcCollisionIDOutlier;
652665
registry.fill(HIST("h2_outlier_collision_ID_difference"), pTHat, float(outlierCollisionIDDifference));
653666
// if outlier comes from different collision, check which type and set flags
@@ -660,7 +673,23 @@ struct JetOutlierQATask {
660673
isOutlierEventDifferentMBCollision = true;
661674
}
662675
}
663-
// all
676+
// fill for tracks from same collision or different MB collision in collisions that likely aren't fully merged
677+
if (nJJdifferentSelected < maxNTracksJJdifferent &&
678+
(subGenIDOutlier == jetderiveddatautilities::JCollisionSubGeneratorId::mbGap ||
679+
mcCollisionIDOutlier == mcCollisionIDcoll)) {
680+
registry.fill(HIST("h_track_pt_same_collision"), track.pt(), weight);
681+
registry.fill(HIST("h_track_pt_eta_same_collision"), track.pt(), track.eta(), weight);
682+
registry.fill(HIST("h_track_pt_phi_same_collision"), track.pt(), track.phi(), weight);
683+
registry.fill(HIST("h2_collision_ID_difference_same_collision"), pTHat, float(outlierCollisionIDDifference));
684+
}
685+
// fill tracks for events which have no JJ outlier tracks from different events
686+
if (nJJdifferentSelected == 0) {
687+
registry.fill(HIST("h_track_pt_no_JJ_different"), track.pt(), weight);
688+
registry.fill(HIST("h_track_pt_eta_no_JJ_different"), track.pt(), track.eta(), weight);
689+
registry.fill(HIST("h_track_pt_phi_no_JJ_different"), track.pt(), track.phi(), weight);
690+
registry.fill(HIST("h2_collision_ID_difference_no_JJ_different"), pTHat, float(outlierCollisionIDDifference));
691+
}
692+
// collision checks for all tracks
664693
for (auto const& collisionOutlier : collisions) { // find collisions closeby
665694
float eventWeightOutlier = collisionOutlier.mcCollision().weight();
666695
double pTHatOutlier = collisionOutlier.mcCollision().ptHard();

0 commit comments

Comments
 (0)