Skip to content

Commit 2a2c91b

Browse files
authored
PWGJE: Update jet matching and QA (AliceO2Group#2482)
1 parent e6ddd56 commit 2a2c91b

3 files changed

Lines changed: 40 additions & 30 deletions

File tree

PWGJE/TableProducer/jetmatching.cxx

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ struct JetMatchingHF {
4242
Produces<TagToBaseMatchingTable> jetsTagToBase;
4343

4444
// preslicing jet collections, only for MC-based collection
45-
46-
Preslice<BaseJetCollection> baseJetsPerCollision = o2::soa::relatedByIndex<aod::McCollisions, BaseJetCollection>() ? aod::jet::mcCollisionId : aod::jet::collisionId;
47-
// Preslice<TagJetCollection> tagJetsPerCollision = []{ if constexpr (o2::soa::relatedByIndex<aod::McCollisions, TagJetCollection>()) return aod::jet::mcCollisionId; else return aod::jet::collisionId; }();
48-
Preslice<TagJetCollection> tagJetsPerCollision = o2::soa::relatedByIndex<aod::McCollisions, TagJetCollection>() ? aod::jet::mcCollisionId : aod::jet::collisionId;
45+
static constexpr bool jetsBaseIsMC = o2::soa::relatedByIndex<aod::McCollisions, BaseJetCollection>();
46+
static constexpr bool jetsTagIsMC = o2::soa::relatedByIndex<aod::McCollisions, TagJetCollection>();
47+
Preslice<BaseJetCollection> baseJetsPerCollision = jetsBaseIsMC ? aod::jet::mcCollisionId : aod::jet::collisionId;
48+
Preslice<TagJetCollection> tagJetsPerCollision = jetsTagIsMC ? aod::jet::mcCollisionId : aod::jet::collisionId;
4949

5050
using Collisions = soa::Join<aod::Collisions, aod::McCollisionLabels>;
5151
using Tracks = soa::Join<aod::Tracks, aod::McTrackLabels>;
@@ -60,29 +60,19 @@ struct JetMatchingHF {
6060
Tracks const& tracks, McParticles const& particlesMC,
6161
HfCandidates const& hfcandidates)
6262
{
63-
constexpr bool jetsBaseIsMC = o2::soa::relatedByIndex<aod::McCollisions, BaseJetCollection>();
64-
constexpr bool jetsTagIsMC = o2::soa::relatedByIndex<aod::McCollisions, TagJetCollection>();
65-
66-
// slicing jets if MC collection
67-
// decltype(jetsTag.sliceBy(tagJetsPerCollision, collision.mcCollisionId())) jetsTagPerColl;
68-
// std::remove_const<TagJetCollection>::type jetsTagPerColl;
69-
// const auto jetsTagPerColl = jetsTag;
70-
// auto jetsTagPerColl = [&] -> TagJetCollection const& { if (jetsTagIsMC) return jetsTag.sliceBy(tagJetsPerCollision, collision.mcCollisionId()); else return jetsTag; }();
71-
// if (jetsTagIsMC) jetsTagPerColl = jetsTag.sliceBy(tagJetsPerCollision, collision.mcCollisionId());
72-
// const auto jetsTagPerColl = jetsTagIsMC ? const jetsTag.sliceBy(tagJetsPerCollision, collision.mcCollisionId()) : jetsTag;
73-
74-
const auto jetsBasePerColl = jetsBase.sliceBy(baseJetsPerCollision, jetsBaseIsMC ? collision.mcCollisionId() : collision.globalIndex());
63+
// const auto jetsBasePerColl = jetsBase.sliceBy(baseJetsPerCollision, jetsBaseIsMC ? collision.mcCollisionId() : collision.globalIndex());
64+
const auto jetsBasePerColl = jetsBase;
7565
const auto jetsTagPerColl = jetsTag.sliceBy(tagJetsPerCollision, jetsTagIsMC ? collision.mcCollisionId() : collision.globalIndex());
7666

7767
// geometric matching
78-
std::vector<double> jetsBasePhi(jetsBase.size());
79-
std::vector<double> jetsBaseEta(jetsBase.size());
68+
std::vector<double> jetsBasePhi(jetsBasePerColl.size());
69+
std::vector<double> jetsBaseEta(jetsBasePerColl.size());
8070
for (auto jet : jetsBasePerColl) {
8171
jetsBasePhi.emplace_back(jet.phi());
8272
jetsBaseEta.emplace_back(jet.eta());
8373
}
84-
std::vector<double> jetsTagPhi(jetsTag.size());
85-
std::vector<double> jetsTagEta(jetsTag.size());
74+
std::vector<double> jetsTagPhi(jetsTagPerColl.size());
75+
std::vector<double> jetsTagEta(jetsTagPerColl.size());
8676
for (auto& jet : jetsTagPerColl) {
8777
jetsTagPhi.emplace_back(jet.phi());
8878
jetsTagEta.emplace_back(jet.eta());
@@ -125,7 +115,7 @@ struct JetMatchingHF {
125115
}
126116
}
127117
}
128-
jetsBaseToTag(matchedIdx, baseToTagIndexMap[jet.index()]); // TODO: check usage of index
118+
jetsBaseToTag(matchedIdx, baseToTagIndexMap[jet.index()]);
129119
}
130120

131121
// backward matching
@@ -171,7 +161,7 @@ struct JetMatchingHF {
171161
}
172162
}
173163
}
174-
jetsTagToBase(matchedIdx, tagToBaseIndexMap[jet.index()]); // TODO: check usage of index
164+
jetsTagToBase(matchedIdx, tagToBaseIndexMap[jet.index()]);
175165
}
176166
}
177167
};

PWGJE/Tasks/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ if(FastJet_FOUND)
4040
SOURCES FullJetTriggerQATask.cxx
4141
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::PWGJECore O2Physics::AnalysisCore
4242
COMPONENT_NAME Analysis)
43-
o2physics_add_dpl_workflow(jet-matching-hf-qa
44-
SOURCES jetmatchinghfqa.cxx
43+
o2physics_add_dpl_workflow(jet-matching-qa
44+
SOURCES jetmatchingqa.cxx
4545
PUBLIC_LINK_LIBRARIES O2::Framework O2Physics::PWGJECore O2Physics::AnalysisCore
4646
COMPONENT_NAME Analysis)
4747
o2physics_add_dpl_workflow(jet-substructure-hf
Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,14 @@ using namespace o2;
2626
using namespace o2::framework;
2727
using namespace o2::framework::expressions;
2828

29-
struct JetMatchingHFQA {
29+
struct JetMatchingQA {
3030
using DetectorLevelJets = soa::Join<aod::D0ChargedMCDetectorLevelJets, aod::D0ChargedMCDetectorLevelJetConstituents, aod::D0ChargedMCDetectorLevelJetsMatchedToD0ChargedMCParticleLevelJets>;
3131
using ParticleLevelJets = soa::Join<aod::D0ChargedMCParticleLevelJets, aod::D0ChargedMCParticleLevelJetConstituents, aod::D0ChargedMCParticleLevelJetsMatchedToD0ChargedMCDetectorLevelJets>;
3232

3333
OutputObj<TH2F> hJetPt{"h_jet_pt"};
3434
OutputObj<TH2F> hJetDetaDphi{"h_jet_deta_dphi"};
35+
OutputObj<TH2F> hJetGeoPt{"h_jet_geo_pt"};
36+
OutputObj<TH2F> hJetGeoDetaDphi{"h_jet_geo_deta_dphi"};
3537
OutputObj<TH1F> hJetDetPt{"h_jet_det_pt"};
3638
OutputObj<TH1F> hJetGenPt{"h_jet_gen_pt"};
3739
OutputObj<TH1F> hJetDetPhi{"h_jet_det_phi"};
@@ -45,10 +47,14 @@ struct JetMatchingHFQA {
4547
{
4648
hJetPt.setObject(new TH2F("h_jet_pt", "HF-matched jets;jet p_{T}^{gen} (GeV/#it{c});jet p_{T}^{det} (GeV/#it{c})",
4749
100, 0., 100., 100, 0., 100.));
48-
hJetDetaDphi.setObject(new TH2F("h_jet_deta_dphi", "HF-matched jets;jet #Delta#phi;#Delta#eta",
50+
hJetDetaDphi.setObject(new TH2F("h_jet_deta_dphi", "HFg-matched jets;jet #Delta#phi;#Delta#eta",
4951
100, -2. * TMath::Pi(), 2. * TMath::Pi(), 100, -2., 2.));
50-
hJetDetPt.setObject(new TH1F("h_jet_det_pt", "HF-matched jets;jet p_{T}^{det} (GeV/#it{c})", 100, 0., 100.));
51-
hJetGenPt.setObject(new TH1F("h_jet_gen_pt", "HF-matched jets;jet p_{T}^{gen} (GeV/#it{c})", 100, 0., 100.));
52+
hJetGeoPt.setObject(new TH2F("h_jet_geo_pt", "geo-matched jets;jet p_{T}^{gen} (GeV/#it{c});jet p_{T}^{det} (GeV/#it{c})",
53+
100, 0., 100., 100, 0., 100.));
54+
hJetGeoDetaDphi.setObject(new TH2F("h_jet_geo_deta_dphi", "geo-matched jets;jet #Delta#phi;#Delta#eta",
55+
100, -2. * TMath::Pi(), 2. * TMath::Pi(), 100, -2., 2.));
56+
hJetDetPt.setObject(new TH1F("h_jet_det_pt", "detector level jets;jet p_{T}^{det} (GeV/#it{c})", 100, 0., 100.));
57+
hJetGenPt.setObject(new TH1F("h_jet_gen_pt", "particle level jets;jet p_{T}^{gen} (GeV/#it{c})", 100, 0., 100.));
5258
hJetDetPhi.setObject(new TH1F("h_jet_det_phi", "jet #phi; #phi", 140, -7.0, 7.0));
5359
hJetGenPhi.setObject(new TH1F("h_jet_gen_phi", "jet #phi; #phi", 140, -7.0, 7.0));
5460
hJetDetEta.setObject(new TH1F("h_jet_det_eta", "jet #eta; #eta", 30, -1.5, 1.5));
@@ -73,6 +79,14 @@ struct JetMatchingHFQA {
7379
const auto dphi = -TMath::Pi() + fmod(2 * TMath::Pi() + fmod(djet.phi() - pjet.phi() + TMath::Pi(), 2 * TMath::Pi()), 2 * TMath::Pi());
7480
hJetDetaDphi->Fill(dphi, djet.eta() - pjet.eta());
7581
}
82+
83+
if (djet.has_matchedJetGeo()) {
84+
const auto& pjet = djet.matchedJetGeo_as<ParticleLevelJets>();
85+
LOGF(info, "djet %d (pt of %g GeV/c) is geo-matched to %d (pt of %g GeV/c)",
86+
djet.globalIndex(), djet.pt(), djet.matchedJetGeoId(), pjet.pt());
87+
const auto dphi = -TMath::Pi() + fmod(2 * TMath::Pi() + fmod(djet.phi() - pjet.phi() + TMath::Pi(), 2 * TMath::Pi()), 2 * TMath::Pi());
88+
hJetGeoDetaDphi->Fill(dphi, djet.eta() - pjet.eta());
89+
}
7690
}
7791
}
7892

@@ -90,13 +104,19 @@ struct JetMatchingHFQA {
90104
hJetGenEta->Fill(pjet.eta());
91105
hJetGenNTracks->Fill(pjet.tracksIds().size() + 1); // adding HF candidate
92106
}
107+
108+
if (pjet.has_matchedJetGeo()) {
109+
const auto& djet = pjet.matchedJetGeo_as<DetectorLevelJets>();
110+
LOGF(info, "pjet %d (pt of %g GeV/c) is geo-matched to %d (pt of %g GeV/c)",
111+
pjet.globalIndex(), pjet.pt(), pjet.matchedJetGeoId(), djet.pt());
112+
}
93113
}
94114
}
95-
PROCESS_SWITCH(JetMatchingHFQA, processMCP, "QA on generator-level jets", true);
115+
PROCESS_SWITCH(JetMatchingQA, processMCP, "QA on generator-level jets", true);
96116
};
97117

98118
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
99119
{
100120
return WorkflowSpec{
101-
adaptAnalysisTask<JetMatchingHFQA>(cfgc, TaskName{"jet-matching-hf-qa"})};
121+
adaptAnalysisTask<JetMatchingQA>(cfgc, TaskName{"jet-matching-qa"})};
102122
}

0 commit comments

Comments
 (0)