@@ -59,6 +59,7 @@ struct JetSubstructureMatchingSub {
5959 Configurable<bool > doMatchingHf{" doMatchingHf" , false , " Enable HF matching" };
6060 Configurable<float > maxMatchingDistance{" maxMatchingDistance" , 0 .24f , " Max matching distance" };
6161 Configurable<float > minPtFraction{" minPtFraction" , 0 .5f , " Minimum pt fraction for pt matching" };
62+ Configurable<bool > requireGeoMatchedJets{" requireGeoMatchedJets" , false , " require jets are geo matched as well" };
6263 Configurable<bool > requirePtMatchedJets{" requirePtMatchedJets" , false , " require jets are pT matched as well" };
6364 Configurable<bool > requireHFMatchedJets{" requireHFMatchedJets" , false , " require jets are HF matched as well" };
6465
@@ -108,6 +109,16 @@ struct JetSubstructureMatchingSub {
108109 }
109110 }
110111
112+ template <typename T>
113+ auto defaultMatchedJets (T const & jetTag)
114+ {
115+ if constexpr (jetcandidateutilities::isCandidateTable<Candidates>()) {
116+ return jetTag.template matchedJetCand_as <JetsBase>();
117+ } else {
118+ return jetTag.template matchedJetGeo_as <JetsBase>();
119+ }
120+ }
121+
111122 void processData (JetsTag const & jetsTag,
112123 JetsBase const &,
113124 SplittingsBase const & jetsBaseSplittings,
@@ -145,7 +156,13 @@ struct JetSubstructureMatchingSub {
145156 jetBasePairsMap.resize (jetsBasePairs.size (), -1 );
146157
147158 for (auto jetTag : jetsTag) {
148- if (jetTag.has_matchedJetGeo ()) {
159+ bool hasMatchedJet = false ;
160+ if constexpr (jetcandidateutilities::isCandidateTable<Candidates>()) {
161+ hasMatchedJet = jetTag.has_matchedJetCand ();
162+ } else {
163+ hasMatchedJet = jetTag.has_matchedJetGeo ();
164+ }
165+ if (hasMatchedJet) {
149166 // auto const& jetTagSplittings = jetsTagSplittings.sliceBy(TagSplittingsPerTagJet, jetTag.globalIndex());
150167 auto const & jetTagSplittings = slicedPerJetForMatching<Candidates>(jetsTagSplittings, jetTag, TagSplittingsPerTagJetInclusive, TagSplittingsPerTagJetD0, TagSplittingsPerTagJetDplus, TagSplittingsPerTagJetLc, TagSplittingsPerTagJetBplus, TagSplittingsPerTagJetDielectron);
151168 int tagSplittingIndex = 0 ;
@@ -160,7 +177,18 @@ struct JetSubstructureMatchingSub {
160177 jetTagPairsMap[jetTagPair.globalIndex ()] = tagPairIndex;
161178 tagPairIndex++;
162179 }
163- for (auto & jetBase : jetTag.template matchedJetGeo_as <JetsBase>()) {
180+ for (auto & jetBase : defaultMatchedJets (jetTag)) {
181+ if (requireGeoMatchedJets) {
182+ bool jetsMatchedWithGeo = false ;
183+ for (auto & jetBaseForMatchGeo : jetTag.template matchedJetGeo_as <JetsBase>()) {
184+ if (jetBaseForMatchGeo.globalIndex () == jetBase.globalIndex ()) {
185+ jetsMatchedWithGeo = true ;
186+ }
187+ }
188+ if (!jetsMatchedWithGeo) {
189+ continue ;
190+ }
191+ }
164192 if (requirePtMatchedJets) {
165193 bool jetsMatchedWithPt = false ;
166194 for (auto & jetBaseForMatchPt : jetTag.template matchedJetPt_as <JetsBase>()) {
0 commit comments