Skip to content

Commit f48a522

Browse files
author
Changhwan Choi
committed
GNN b-jet MCP jet spectrum and response matrix revised, track DCA study updated
1 parent fe7988c commit f48a522

1 file changed

Lines changed: 61 additions & 36 deletions

File tree

PWGJE/Tasks/bjetTaggingGnn.cxx

Lines changed: 61 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ struct BjetTaggingGnn {
282282
registry.add("h_trackphi", "", {HistType::kTH1F, {{100, 0.0, 2.0 * M_PI, "#it{#phi}"}}}, callSumw2);
283283
registry.add("h_dcaXY", "", {HistType::kTH1F, {{200, 0., 4., "|DCA_{#it{xy}}| (cm)"}}}, callSumw2);
284284
registry.add("h_dcaZ", "", {HistType::kTH1F, {{200, 0., 4., "|DCA_{#it{z}}| (cm)"}}}, callSumw2);
285+
registry.add("h3_dca_pt", "", {HistType::kTH3F, {{1000, 0., 100., "#it{p}_{T} (GeV/#it{c})"}, {200, 0., 4., "|DCA_{#it{z}}| (cm)"}, {200, 0., 4., "|DCA_{#it{xy}}| (cm)"}}}, callSumw2);
285286
}
286287

287288
if (doprocessMCDTracks) {
@@ -308,6 +309,15 @@ struct BjetTaggingGnn {
308309
registry.add("h_dcaZ_coll_mismatched", "", {HistType::kTH1F, {{200, 0., 4., "|DCA_{#it{z}}| (cm)"}}}, callSumw2);
309310
registry.add("h_dcaZ_npp", "", {HistType::kTH1F, {{200, 0., 4., "|DCA_{#it{z}}| (cm)"}}}, callSumw2);
310311
registry.add("h_dcaZ_npp_mismatched", "", {HistType::kTH1F, {{200, 0., 4., "|DCA_{#it{z}}| (cm)"}}}, callSumw2);
312+
registry.add("h3_dca_pt_coll_fake", "", {HistType::kTH3F, {{1000, 0., 100., "#it{p}_{T} (GeV/#it{c})"}, {200, 0., 4., "|DCA_{#it{z}}| (cm)"}, {200, 0., 4., "|DCA_{#it{xy}}| (cm)"}}}, callSumw2);
313+
registry.add("h3_dca_pt_fake", "", {HistType::kTH3F, {{1000, 0., 100., "#it{p}_{T} (GeV/#it{c})"}, {200, 0., 4., "|DCA_{#it{z}}| (cm)"}, {200, 0., 4., "|DCA_{#it{xy}}| (cm)"}}}, callSumw2);
314+
registry.add("h3_dca_pt_coll_matched", "", {HistType::kTH3F, {{1000, 0., 100., "#it{p}_{T} (GeV/#it{c})"}, {200, 0., 4., "|DCA_{#it{z}}| (cm)"}, {200, 0., 4., "|DCA_{#it{xy}}| (cm)"}}}, callSumw2);
315+
registry.add("h3_dca_pt_coll_matched_b", "", {HistType::kTH3F, {{1000, 0., 100., "#it{p}_{T} (GeV/#it{c})"}, {200, 0., 4., "|DCA_{#it{z}}| (cm)"}, {200, 0., 4., "|DCA_{#it{xy}}| (cm)"}}}, callSumw2);
316+
registry.add("h3_dca_pt_coll_matched_c", "", {HistType::kTH3F, {{1000, 0., 100., "#it{p}_{T} (GeV/#it{c})"}, {200, 0., 4., "|DCA_{#it{z}}| (cm)"}, {200, 0., 4., "|DCA_{#it{xy}}| (cm)"}}}, callSumw2);
317+
registry.add("h3_dca_pt_coll_matched_lf", "", {HistType::kTH3F, {{1000, 0., 100., "#it{p}_{T} (GeV/#it{c})"}, {200, 0., 4., "|DCA_{#it{z}}| (cm)"}, {200, 0., 4., "|DCA_{#it{xy}}| (cm)"}}}, callSumw2);
318+
registry.add("h3_dca_pt_coll_mismatched", "", {HistType::kTH3F, {{1000, 0., 100., "#it{p}_{T} (GeV/#it{c})"}, {200, 0., 4., "|DCA_{#it{z}}| (cm)"}, {200, 0., 4., "|DCA_{#it{xy}}| (cm)"}}}, callSumw2);
319+
registry.add("h3_dca_pt_npp", "", {HistType::kTH3F, {{1000, 0., 100., "#it{p}_{T} (GeV/#it{c})"}, {200, 0., 4., "|DCA_{#it{z}}| (cm)"}, {200, 0., 4., "|DCA_{#it{xy}}| (cm)"}}}, callSumw2);
320+
registry.add("h3_dca_pt_npp_mismatched", "", {HistType::kTH3F, {{1000, 0., 100., "#it{p}_{T} (GeV/#it{c})"}, {200, 0., 4., "|DCA_{#it{z}}| (cm)"}, {200, 0., 4., "|DCA_{#it{xy}}| (cm)"}}}, callSumw2);
311321
}
312322

313323
if (doprocessDataJetsSel || doprocessMCDJetsSel) {
@@ -466,9 +476,7 @@ struct BjetTaggingGnn {
466476
using AnalysisCollisionsMCD = soa::Join<aod::JetCollisionsMCD, aod::JCollisionPIs, aod::JCollisionOutliers>;
467477
using FilteredCollisionsMCD = soa::Filtered<AnalysisCollisionsMCD>;
468478

469-
Filter mccollisionFilter = nabs(aod::jmccollision::posZ) < vertexZCut;
470479
using AnalysisCollisionsMCP = soa::Join<aod::JetMcCollisions, aod::JMcCollisionPIs, aod::JMcCollisionOutliers>;
471-
using FilteredCollisionsMCP = soa::Filtered<AnalysisCollisionsMCP>;
472480
using MCPJets = soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents, aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets, aod::ChargedMCParticleLevelJetFlavourDef>;
473481
using FilteredMCPJets = soa::Filtered<MCPJets>;
474482

@@ -841,12 +849,15 @@ struct BjetTaggingGnn {
841849
if (track.pt() >= trackPtMin) {
842850
registry.fill(HIST("h_dcaXY"), std::fabs(track.dcaXY()));
843851
registry.fill(HIST("h_dcaZ"), std::fabs(track.dcaZ()));
852+
registry.fill(HIST("h3_dca_pt"), track.pt(), std::fabs(track.dcaZ()), std::fabs(track.dcaXY()));
844853
}
845854
}
846855
}
847856
PROCESS_SWITCH(BjetTaggingGnn, processDataTracks, "track information in Data", false);
848857

849-
void processMCDJets(FilteredCollisionsMCD::iterator const& collision, FilteredMCDJets const& MCDjets, FilteredTracksMCD const& allTracks, FilteredMCPJets const& /*MCPjets*/, aod::JetParticles const& /*mcParticles*/, FilteredCollisionsMCP const& /*mcCollisions*/)
858+
Preslice<FilteredMCPJets> mcpjetsPerMCPCollision = aod::jet::mcCollisionId;
859+
860+
void processMCDJets(FilteredCollisionsMCD::iterator const& collision, FilteredMCDJets const& MCDjets, FilteredTracksMCD const& allTracks, FilteredMCPJets const& MCPjets, aod::JetParticles const& /*mcParticles*/, AnalysisCollisionsMCP const& /*mcCollisions*/)
850861
{
851862
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) {
852863
return;
@@ -855,7 +866,8 @@ struct BjetTaggingGnn {
855866
if (collision.isOutlier()) {
856867
return;
857868
}
858-
if (collision.has_mcCollision() && collision.template mcCollision_as<FilteredCollisionsMCP>().isOutlier()) {
869+
bool matchedMcColl = collision.has_mcCollision();
870+
if (matchedMcColl && collision.template mcCollision_as<AnalysisCollisionsMCP>().isOutlier()) {
859871
return;
860872
}
861873
// Uses only collisionId % trainingDatasetRaioParam != 0 for evaluation dataset
@@ -864,7 +876,6 @@ struct BjetTaggingGnn {
864876
}
865877

866878
float weightEvt = useEventWeight ? collision.weight() : 1.f;
867-
bool matchedMcColl = collision.has_mcCollision() && std::fabs(collision.template mcCollision_as<FilteredCollisionsMCP>().posZ()) < vertexZCut;
868879

869880
registry.fill(HIST("h_event_counter"), 0.0, weightEvt);
870881

@@ -881,6 +892,10 @@ struct BjetTaggingGnn {
881892
continue;
882893
}
883894
for (const auto& mcpjet : analysisJet.template matchedJetGeo_as<FilteredMCPJets>()) {
895+
// matchedJetGeo_as is not Filtered.
896+
if (mcpjet.pt() < jetPtMin || mcpjet.pt() >= jetPtMax || mcpjet.eta() >= jetEtaMax - mcpjet.r() / 100.f || mcpjet.eta() <= jetEtaMin + mcpjet.r() / 100.f) {
897+
continue;
898+
}
884899
registry.fill(HIST("h2_Response_DetjetpT_PartjetpT"), analysisJet.pt(), mcpjet.pt(), weightEvt);
885900
registry.fill(HIST("h_jetpT_matched"), analysisJet.pt(), weightEvt);
886901
registry.fill(HIST("h_jetpT_particle_matched"), mcpjet.pt(), weightEvt);
@@ -895,16 +910,36 @@ struct BjetTaggingGnn {
895910
}
896911
}
897912
}
913+
914+
if (!matchedMcColl) {
915+
return;
916+
}
917+
918+
// Fill histograms for jets matched to the analysis event selection
919+
auto mcpjetspermcpcollision = MCPjets.sliceBy(mcpjetsPerMCPCollision, collision.mcCollisionId());
920+
for (const auto& mcpjet : mcpjetspermcpcollision) {
921+
registry.fill(HIST("h_jetpT_particle"), mcpjet.pt(), weightEvt);
922+
923+
int8_t jetFlavor = mcpjet.origin();
924+
925+
if (jetFlavor == JetTaggingSpecies::beauty) {
926+
registry.fill(HIST("h_jetpT_particle_b"), mcpjet.pt(), weightEvt);
927+
} else if (jetFlavor == JetTaggingSpecies::charm) {
928+
registry.fill(HIST("h_jetpT_particle_c"), mcpjet.pt(), weightEvt);
929+
} else {
930+
registry.fill(HIST("h_jetpT_particle_lf"), mcpjet.pt(), weightEvt);
931+
}
932+
}
898933
}
899934
PROCESS_SWITCH(BjetTaggingGnn, processMCDJets, "jet information in MC", false);
900935

901-
void processMCDJetsSel(AnalysisCollisionsMCD::iterator const& collision, FilteredMCDJets const& MCDjets, FilteredTracksMCD const& /*allTracks*/, FilteredMCPJets const& /*MCPjets*/, FilteredCollisionsMCP const& /*mcCollisions*/)
936+
void processMCDJetsSel(AnalysisCollisionsMCD::iterator const& collision, FilteredMCDJets const& MCDjets, FilteredTracksMCD const& /*allTracks*/, FilteredMCPJets const& /*MCPjets*/, AnalysisCollisionsMCP const& /*mcCollisions*/)
902937
{
903938
// Reject outlier MC collisions
904939
if (collision.isOutlier()) {
905940
return;
906941
}
907-
if (collision.has_mcCollision() && collision.template mcCollision_as<FilteredCollisionsMCP>().isOutlier()) {
942+
if (collision.has_mcCollision() && collision.template mcCollision_as<AnalysisCollisionsMCP>().isOutlier()) {
908943
return;
909944
}
910945

@@ -941,7 +976,6 @@ struct BjetTaggingGnn {
941976
PROCESS_SWITCH(BjetTaggingGnn, processMCDJetsSel, "jet information in MC (event selection)", false);
942977

943978
PresliceUnsorted<AnalysisCollisionsMCD> collisionsPerMCPCollision = aod::jmccollisionlb::mcCollisionId;
944-
Preslice<FilteredMCPJets> mcpjetsPerMCPCollision = aod::jet::mcCollisionId;
945979

946980
void processMCPJets(AnalysisCollisionsMCP const& mcCollisions, FilteredMCPJets const& mcpjets, AnalysisCollisionsMCD const& collisions, aod::JetParticles const& mcParticles)
947981
{
@@ -950,8 +984,13 @@ struct BjetTaggingGnn {
950984
if (mcCollision.isOutlier()) {
951985
continue;
952986
}
953-
float weightEvt = useEventWeight ? mcCollision.weight() : 1.f;
954987
auto matchedCollisions = collisions.sliceBy(collisionsPerMCPCollision, mcCollision.mcCollisionId());
988+
if (matchedCollisions.size() >= 1) {
989+
if (matchedCollisions.begin().isOutlier()) {
990+
continue;
991+
}
992+
}
993+
float weightEvt = useEventWeight ? mcCollision.weight() : 1.f;
955994

956995
EvtSelFlag evtselCode = EvtSelFlag::INEL;
957996
registry.fill(HIST("hMcCollCounter"), static_cast<int>(EvtSel::INEL), weightEvt); // INEL
@@ -1014,17 +1053,6 @@ struct BjetTaggingGnn {
10141053

10151054
auto mcpjetspermcpcollision = mcpjets.sliceBy(mcpjetsPerMCPCollision, mcCollision.mcCollisionId());
10161055
for (const auto& mcpjet : mcpjetspermcpcollision) {
1017-
bool jetIncluded = false;
1018-
for (const auto& jetR : jetRadiiValues) {
1019-
if (mcpjet.r() == static_cast<int>(jetR * 100)) {
1020-
jetIncluded = true;
1021-
break;
1022-
}
1023-
}
1024-
1025-
if (!jetIncluded) {
1026-
continue;
1027-
}
10281056

10291057
int8_t jetFlavor = mcpjet.origin();
10301058

@@ -1064,27 +1092,14 @@ struct BjetTaggingGnn {
10641092
registry.fill(HIST("h_jetpT_particle_c_sel8_zvtx"), mcpjet.pt(), hasAll(evtselCode, EvtSelFlag::Sel8Zvtx) ? weightEvt : 0.0);
10651093
registry.fill(HIST("h_jetpT_particle_c_inelgt0"), mcpjet.pt(), hasAll(evtselCode, EvtSelFlag::INELgt0) ? weightEvt : 0.0);
10661094
}
1067-
1068-
// Fill histograms for jets matched to the analysis event selection
1069-
if (isMatchedToAnalysisSelection) {
1070-
registry.fill(HIST("h_jetpT_particle"), mcpjet.pt(), weightEvt);
1071-
1072-
if (jetFlavor == JetTaggingSpecies::beauty) {
1073-
registry.fill(HIST("h_jetpT_particle_b"), mcpjet.pt(), weightEvt);
1074-
} else if (jetFlavor == JetTaggingSpecies::charm) {
1075-
registry.fill(HIST("h_jetpT_particle_c"), mcpjet.pt(), weightEvt);
1076-
} else {
1077-
registry.fill(HIST("h_jetpT_particle_lf"), mcpjet.pt(), weightEvt);
1078-
}
1079-
}
10801095
}
10811096
}
10821097
}
10831098
PROCESS_SWITCH(BjetTaggingGnn, processMCPJets, "mc collision information", false);
10841099

10851100
Preslice<aod::JetParticles> mcparticlesPerMCPCollision = aod::jmcparticle::mcCollisionId;
10861101

1087-
void processMCDTracks(FilteredCollisionsMCD::iterator const& collision, AnalysisTracksMCD const& tracks, FilteredCollisionsMCP const& /*mcCollisions*/, aod::JetParticles const& allParticles)
1102+
void processMCDTracks(FilteredCollisionsMCD::iterator const& collision, AnalysisTracksMCD const& tracks, AnalysisCollisionsMCP const& /*mcCollisions*/, aod::JetParticles const& allParticles)
10881103
{
10891104
if (!jetderiveddatautilities::selectCollision(collision, eventSelectionBits)) {
10901105
return;
@@ -1093,7 +1108,8 @@ struct BjetTaggingGnn {
10931108
if (collision.isOutlier()) {
10941109
return;
10951110
}
1096-
if (collision.has_mcCollision() && collision.template mcCollision_as<FilteredCollisionsMCP>().isOutlier()) {
1111+
bool matchedMcColl = collision.has_mcCollision();
1112+
if (matchedMcColl && collision.template mcCollision_as<AnalysisCollisionsMCP>().isOutlier()) {
10971113
return;
10981114
}
10991115
// Uses only collisionId % trainingDatasetRaioParam != 0 for evaluation dataset
@@ -1102,7 +1118,6 @@ struct BjetTaggingGnn {
11021118
}
11031119

11041120
float weightEvt = useEventWeight ? collision.weight() : 1.f;
1105-
bool matchedMcColl = collision.has_mcCollision() && std::fabs(collision.template mcCollision_as<FilteredCollisionsMCP>().posZ()) < vertexZCut;
11061121

11071122
for (const auto& track : tracks) {
11081123
if (!jetderiveddatautilities::selectTrack(track, trackSelectionBits) || track.eta() <= trackEtaMin || track.eta() >= trackEtaMax) {
@@ -1114,19 +1129,22 @@ struct BjetTaggingGnn {
11141129
if (track.pt() >= trackPtMin) {
11151130
registry.fill(HIST("h_dcaXY"), std::fabs(track.dcaXY()), weightEvt);
11161131
registry.fill(HIST("h_dcaZ"), std::fabs(track.dcaZ()), weightEvt);
1132+
registry.fill(HIST("h3_dca_pt"), track.pt(), std::fabs(track.dcaZ()), std::fabs(track.dcaXY()), weightEvt);
11171133
}
11181134

11191135
if (!matchedMcColl) {
11201136
if (track.pt() >= trackPtMin) {
11211137
registry.fill(HIST("h_dcaXY_coll_fake"), std::fabs(track.dcaXY()), weightEvt);
11221138
registry.fill(HIST("h_dcaZ_coll_fake"), std::fabs(track.dcaZ()), weightEvt);
1139+
registry.fill(HIST("h3_dca_pt_coll_fake"), track.pt(), std::fabs(track.dcaZ()), std::fabs(track.dcaXY()), weightEvt);
11231140
}
11241141
continue;
11251142
}
11261143
if (!track.has_mcParticle()) {
11271144
if (track.pt() >= trackPtMin) {
11281145
registry.fill(HIST("h_dcaXY_fake"), std::fabs(track.dcaXY()), weightEvt);
11291146
registry.fill(HIST("h_dcaZ_fake"), std::fabs(track.dcaZ()), weightEvt);
1147+
registry.fill(HIST("h3_dca_pt_fake"), track.pt(), std::fabs(track.dcaZ()), std::fabs(track.dcaXY()), weightEvt);
11301148
}
11311149
continue;
11321150
}
@@ -1142,28 +1160,35 @@ struct BjetTaggingGnn {
11421160
if (particle.mcCollisionId() == collision.mcCollisionId()) {
11431161
registry.fill(HIST("h_dcaXY_coll_matched"), std::fabs(track.dcaXY()), weightEvt); // Matched to particle from the same MC collision
11441162
registry.fill(HIST("h_dcaZ_coll_matched"), std::fabs(track.dcaZ()), weightEvt);
1163+
registry.fill(HIST("h3_dca_pt_coll_matched"), track.pt(), std::fabs(track.dcaZ()), std::fabs(track.dcaXY()), weightEvt);
11451164
int origin = RecoDecay::getParticleOrigin(allParticles, particle, false);
11461165
if (origin == RecoDecay::OriginType::NonPrompt) {
11471166
registry.fill(HIST("h_dcaXY_coll_matched_b"), std::fabs(track.dcaXY()), weightEvt);
11481167
registry.fill(HIST("h_dcaZ_coll_matched_b"), std::fabs(track.dcaZ()), weightEvt);
1168+
registry.fill(HIST("h3_dca_pt_coll_matched_b"), track.pt(), std::fabs(track.dcaZ()), std::fabs(track.dcaXY()), weightEvt);
11491169
} else if (origin == RecoDecay::OriginType::Prompt) {
11501170
registry.fill(HIST("h_dcaXY_coll_matched_c"), std::fabs(track.dcaXY()), weightEvt);
11511171
registry.fill(HIST("h_dcaZ_coll_matched_c"), std::fabs(track.dcaZ()), weightEvt);
1172+
registry.fill(HIST("h3_dca_pt_coll_matched_c"), track.pt(), std::fabs(track.dcaZ()), std::fabs(track.dcaXY()), weightEvt);
11521173
} else {
11531174
registry.fill(HIST("h_dcaXY_coll_matched_lf"), std::fabs(track.dcaXY()), weightEvt);
11541175
registry.fill(HIST("h_dcaZ_coll_matched_lf"), std::fabs(track.dcaZ()), weightEvt);
1176+
registry.fill(HIST("h3_dca_pt_coll_matched_lf"), track.pt(), std::fabs(track.dcaZ()), std::fabs(track.dcaXY()), weightEvt);
11551177
}
11561178
} else {
11571179
registry.fill(HIST("h_dcaXY_coll_mismatched"), std::fabs(track.dcaXY()), weightEvt); // Matched to particle from a different MC collision
11581180
registry.fill(HIST("h_dcaZ_coll_mismatched"), std::fabs(track.dcaZ()), weightEvt);
1181+
registry.fill(HIST("h3_dca_pt_coll_mismatched"), track.pt(), std::fabs(track.dcaZ()), std::fabs(track.dcaXY()), weightEvt);
11591182
}
11601183
} else {
11611184
if (particle.mcCollisionId() == collision.mcCollisionId()) {
11621185
registry.fill(HIST("h_dcaXY_npp"), std::fabs(track.dcaXY()), weightEvt);
11631186
registry.fill(HIST("h_dcaZ_npp"), std::fabs(track.dcaZ()), weightEvt);
1187+
registry.fill(HIST("h3_dca_pt_npp"), track.pt(), std::fabs(track.dcaZ()), std::fabs(track.dcaXY()), weightEvt);
11641188
} else {
11651189
registry.fill(HIST("h_dcaXY_npp_mismatched"), std::fabs(track.dcaXY()), weightEvt);
11661190
registry.fill(HIST("h_dcaZ_npp_mismatched"), std::fabs(track.dcaZ()), weightEvt);
1191+
registry.fill(HIST("h3_dca_pt_npp_mismatched"), track.pt(), std::fabs(track.dcaZ()), std::fabs(track.dcaXY()), weightEvt);
11671192
}
11681193
}
11691194
}

0 commit comments

Comments
 (0)