Skip to content

Commit 205ebad

Browse files
committed
Improve jet matching
- add process switch - avoid binding to HF table for inclusive jets
1 parent abff4a6 commit 205ebad

File tree

2 files changed

+41
-37
lines changed

2 files changed

+41
-37
lines changed

PWGJE/TableProducer/jetmatching.cxx

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ using namespace o2::framework::expressions;
3535

3636
template <typename BaseJetCollection, typename TagJetCollection,
3737
typename BaseToTagMatchingTable, typename TagToBaseMatchingTable, typename HfCandidates>
38-
struct JetMatchingHF {
38+
struct JetMatching {
3939
Configurable<float> maxMatchingDistance{"maxMatchingDistance", 0.4f, "Max matching distance"};
4040

4141
Produces<BaseToTagMatchingTable> jetsBaseToTag;
@@ -51,7 +51,7 @@ struct JetMatchingHF {
5151
using Tracks = soa::Join<aod::Tracks, aod::McTrackLabels>;
5252
using McParticles = soa::Join<aod::McParticles, aod::HfCand2ProngMcGen>;
5353

54-
constexpr int8_t getHfFlag() const
54+
static constexpr int8_t getHfFlag()
5555
{
5656
if (std::is_same<BaseToTagMatchingTable, aod::D0ChargedMCDetectorLevelJetsMatchedToD0ChargedMCParticleLevelJets>::value &&
5757
std::is_same<TagToBaseMatchingTable, aod::D0ChargedMCParticleLevelJetsMatchedToD0ChargedMCDetectorLevelJets>::value)
@@ -75,10 +75,10 @@ struct JetMatchingHF {
7575
// for now:
7676
// BaseJetCollection must contain detector level jets
7777
// TagJetCollection must contain particle level jets
78-
void process(Collisions::iterator const& collision, aod::McCollisions const& mcCollisions,
79-
BaseJetCollection const& jetsBase, TagJetCollection const& jetsTag,
80-
Tracks const& tracks, McParticles const& particlesMC,
81-
HfCandidates const& hfcandidates)
78+
void processJets(Collisions::iterator const& collision, aod::McCollisions const& mcCollisions,
79+
BaseJetCollection const& jetsBase, TagJetCollection const& jetsTag,
80+
Tracks const& tracks, McParticles const& particlesMC,
81+
HfCandidates const& hfcandidates)
8282
{
8383
// TODO: check whether we need to handle jets in MC collisions without a reconstructed collision
8484

@@ -87,43 +87,45 @@ struct JetMatchingHF {
8787
const auto jetsBasePerColl = jetsBase;
8888
const auto jetsTagPerColl = jetsTag.sliceBy(tagJetsPerCollision, jetsTagIsMC ? collision.mcCollisionId() : collision.globalIndex());
8989

90-
const auto hf_flag = getHfFlag();
91-
9290
// geometric matching
9391
LOGF(info, "performing geometric matching for collision %d (%d / %d jets)",
9492
collision.globalIndex(), jetsBasePerColl.size(), jetsTagPerColl.size());
9593
std::vector<double> jetsBasePhi;
9694
std::vector<double> jetsBaseEta;
9795
for (const auto& jet : jetsBasePerColl) {
96+
LOGF(info, "base jet index: %d-%d (coll %d, pt %g, phi %g) with %d tracks, %d HF candidates",
97+
jet.index(), jet.globalIndex(), jet.collisionId(), jet.pt(), jet.phi(), jet.tracks().size(), jet.hfcandidates().size());
9898
jetsBasePhi.emplace_back(jet.phi());
9999
jetsBaseEta.emplace_back(jet.eta());
100100
}
101101
std::vector<double> jetsTagPhi;
102102
std::vector<double> jetsTagEta;
103103
for (const auto& jet : jetsTagPerColl) {
104+
LOGF(info, "tag jet index: %d-%d (coll %d, pt %g, phi %g) with %d tracks, %d HF candidates",
105+
jet.index(), jet.globalIndex(), jet.mcCollisionId(), jet.pt(), jet.phi(), jet.tracks().size(), jet.hfcandidates().size());
104106
jetsTagPhi.emplace_back(jet.phi());
105107
jetsTagEta.emplace_back(jet.eta());
106108
}
107109
auto&& [baseToTagGeo, tagToBaseGeo] = JetUtilities::MatchJetsGeometrically(jetsBasePhi, jetsBaseEta, jetsTagPhi, jetsTagEta, maxMatchingDistance);
108110
LOGF(debug, "geometric matching: %d - %d jets", baseToTagGeo.size(), tagToBaseGeo.size());
109-
for (int i = 0; i < baseToTagGeo.size(); ++i) {
111+
for (std::size_t i = 0; i < baseToTagGeo.size(); ++i) {
110112
LOGF(debug, "bjet %i -> %i", i, baseToTagGeo[i]);
111113
}
112-
for (int i = 0; i < tagToBaseGeo.size(); ++i) {
114+
for (std::size_t i = 0; i < tagToBaseGeo.size(); ++i) {
113115
LOGF(debug, "tjet %i -> %i", i, tagToBaseGeo[i]);
114116
}
115117

116118
// HF matching
117119
std::vector<int> baseToTagHF(jetsBasePerColl.size(), -1);
118120
std::vector<int> tagToBaseHF(jetsTagPerColl.size(), -1);
119-
if (hf_flag > 0) {
121+
if constexpr (getHfFlag() > 0) {
120122
LOGF(info, "performing HF matching for collision %d", collision.globalIndex());
121123
for (const auto& bjet : jetsBasePerColl) {
122124
LOGF(info, "jet index: %d (coll %d, pt %g, phi %g) with %d tracks, %d HF candidates",
123125
bjet.index(), bjet.collisionId(), bjet.pt(), bjet.phi(), bjet.tracks().size(), bjet.hfcandidates().size());
124126

125127
const auto hfcand = bjet.template hfcandidates_first_as<HfCandidates>();
126-
if (hfcand.flagMcMatchRec() & hf_flag) {
128+
if (hfcand.flagMcMatchRec() & getHfFlag()) {
127129
const auto hfCandMC = hfcand.template prong0_as<Tracks>().template mcParticle_as<McParticles>();
128130
const auto hfCandMcId = hfCandMC.template mothers_first_as<McParticles>().globalIndex();
129131
for (const auto& tjet : jetsTagPerColl) {
@@ -161,37 +163,38 @@ struct JetMatchingHF {
161163
jetsTagToBase(geojetid, tagToBaseHF[jet.index()]);
162164
}
163165
}
166+
PROCESS_SWITCH(JetMatching, processJets, "Perform jet matching", true);
164167
};
165168

166-
using ChargedJetMatching = JetMatchingHF<soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents>,
167-
soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents>,
168-
aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets,
169-
aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets,
169+
using ChargedJetMatching = JetMatching<soa::Join<aod::ChargedMCDetectorLevelJets, aod::ChargedMCDetectorLevelJetConstituents>,
170+
soa::Join<aod::ChargedMCParticleLevelJets, aod::ChargedMCParticleLevelJetConstituents>,
171+
aod::ChargedMCDetectorLevelJetsMatchedToChargedMCParticleLevelJets,
172+
aod::ChargedMCParticleLevelJetsMatchedToChargedMCDetectorLevelJets,
173+
aod::Tracks>;
174+
using D0ChargedJetMatching = JetMatching<soa::Join<aod::D0ChargedMCDetectorLevelJets, aod::D0ChargedMCDetectorLevelJetConstituents>,
175+
soa::Join<aod::D0ChargedMCParticleLevelJets, aod::D0ChargedMCParticleLevelJetConstituents>,
176+
aod::D0ChargedMCDetectorLevelJetsMatchedToD0ChargedMCParticleLevelJets,
177+
aod::D0ChargedMCParticleLevelJetsMatchedToD0ChargedMCDetectorLevelJets,
170178
soa::Join<aod::HfCand2Prong, aod::HfSelD0, aod::HfCand2ProngMcRec>>;
171-
using D0ChargedJetMatching = JetMatchingHF<soa::Join<aod::D0ChargedMCDetectorLevelJets, aod::D0ChargedMCDetectorLevelJetConstituents>,
172-
soa::Join<aod::D0ChargedMCParticleLevelJets, aod::D0ChargedMCParticleLevelJetConstituents>,
173-
aod::D0ChargedMCDetectorLevelJetsMatchedToD0ChargedMCParticleLevelJets,
174-
aod::D0ChargedMCParticleLevelJetsMatchedToD0ChargedMCDetectorLevelJets,
175-
soa::Join<aod::HfCand2Prong, aod::HfSelD0, aod::HfCand2ProngMcRec>>;
176-
using LcChargedJetMatching = JetMatchingHF<soa::Join<aod::LcChargedMCDetectorLevelJets, aod::LcChargedMCDetectorLevelJetConstituents>,
177-
soa::Join<aod::LcChargedMCParticleLevelJets, aod::LcChargedMCParticleLevelJetConstituents>,
178-
aod::LcChargedMCDetectorLevelJetsMatchedToLcChargedMCParticleLevelJets,
179-
aod::LcChargedMCParticleLevelJetsMatchedToLcChargedMCDetectorLevelJets,
180-
soa::Join<aod::HfCand3Prong, aod::HfSelLc, aod::HfCand3ProngMcRec>>;
181-
using BPlusChargedJetMatching = JetMatchingHF<soa::Join<aod::BPlusChargedMCDetectorLevelJets, aod::BPlusChargedMCDetectorLevelJetConstituents>,
182-
soa::Join<aod::BPlusChargedMCParticleLevelJets, aod::BPlusChargedMCParticleLevelJetConstituents>,
183-
aod::BPlusChargedMCDetectorLevelJetsMatchedToBPlusChargedMCParticleLevelJets,
184-
aod::BPlusChargedMCParticleLevelJetsMatchedToBPlusChargedMCDetectorLevelJets,
185-
soa::Join<aod::HfCandBplus, aod::HfSelBplusToD0Pi, aod::HfCandBplusMcRec>>;
179+
using LcChargedJetMatching = JetMatching<soa::Join<aod::LcChargedMCDetectorLevelJets, aod::LcChargedMCDetectorLevelJetConstituents>,
180+
soa::Join<aod::LcChargedMCParticleLevelJets, aod::LcChargedMCParticleLevelJetConstituents>,
181+
aod::LcChargedMCDetectorLevelJetsMatchedToLcChargedMCParticleLevelJets,
182+
aod::LcChargedMCParticleLevelJetsMatchedToLcChargedMCDetectorLevelJets,
183+
soa::Join<aod::HfCand3Prong, aod::HfSelLc, aod::HfCand3ProngMcRec>>;
184+
using BPlusChargedJetMatching = JetMatching<soa::Join<aod::BPlusChargedMCDetectorLevelJets, aod::BPlusChargedMCDetectorLevelJetConstituents>,
185+
soa::Join<aod::BPlusChargedMCParticleLevelJets, aod::BPlusChargedMCParticleLevelJetConstituents>,
186+
aod::BPlusChargedMCDetectorLevelJetsMatchedToBPlusChargedMCParticleLevelJets,
187+
aod::BPlusChargedMCParticleLevelJetsMatchedToBPlusChargedMCDetectorLevelJets,
188+
soa::Join<aod::HfCandBplus, aod::HfSelBplusToD0Pi, aod::HfCandBplusMcRec>>;
186189

187190
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
188191
{
189192
std::vector<o2::framework::DataProcessorSpec> tasks;
190193

191-
tasks.emplace_back(adaptAnalysisTask<ChargedJetMatching>(cfgc, TaskName{"jet-matching-ch"}));
192-
tasks.emplace_back(adaptAnalysisTask<D0ChargedJetMatching>(cfgc, TaskName{"jet-matching-d0-ch"}));
193-
tasks.emplace_back(adaptAnalysisTask<LcChargedJetMatching>(cfgc, TaskName{"jet-matching-lc-ch"}));
194-
tasks.emplace_back(adaptAnalysisTask<BPlusChargedJetMatching>(cfgc, TaskName{"jet-matching-bplus-ch"}));
194+
tasks.emplace_back(adaptAnalysisTask<ChargedJetMatching>(cfgc, SetDefaultProcesses{}, TaskName{"jet-matching-ch"}));
195+
tasks.emplace_back(adaptAnalysisTask<D0ChargedJetMatching>(cfgc, SetDefaultProcesses{}, TaskName{"jet-matching-d0-ch"}));
196+
tasks.emplace_back(adaptAnalysisTask<LcChargedJetMatching>(cfgc, SetDefaultProcesses{}, TaskName{"jet-matching-lc-ch"}));
197+
tasks.emplace_back(adaptAnalysisTask<BPlusChargedJetMatching>(cfgc, SetDefaultProcesses{}, TaskName{"jet-matching-bplus-ch"}));
195198

196199
return WorkflowSpec{tasks};
197200
}

PWGJE/Tasks/jetmatchingqa.cxx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ struct JetMatchingQA {
6262
hJetGenNTracks.setObject(new TH1F("h_jet_gen_ntracks", "jet N tracks ; N tracks", 150, -0.5, 99.5));
6363
}
6464

65-
void process(aod::Collisions::iterator const& collision,
66-
BaseJetCollection const& djets, TagJetCollection const& pjets)
65+
void processMCD(aod::Collisions::iterator const& collision,
66+
BaseJetCollection const& djets, TagJetCollection const& pjets)
6767
{
6868
for (const auto& djet : djets) {
6969
if (djet.has_matchedJetCand() || djet.has_matchedJetGeo()) {
@@ -91,6 +91,7 @@ struct JetMatchingQA {
9191
}
9292
}
9393
}
94+
PROCESS_SWITCH(JetMatchingQA, processMCD, "QA on detector-level jets", true);
9495

9596
void processMCP(aod::McCollision const& collision,
9697
TagJetCollection const& pjets, BaseJetCollection const& djets)

0 commit comments

Comments
 (0)