@@ -35,7 +35,7 @@ using namespace o2::framework::expressions;
3535
3636template <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
187190WorkflowSpec 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}
0 commit comments