diff --git a/RecoBTag/SecondaryVertex/plugins/BoostedDoubleSVProducer.cc b/RecoBTag/SecondaryVertex/plugins/BoostedDoubleSVProducer.cc index afc35fcdae141..da6bae7f7058e 100644 --- a/RecoBTag/SecondaryVertex/plugins/BoostedDoubleSVProducer.cc +++ b/RecoBTag/SecondaryVertex/plugins/BoostedDoubleSVProducer.cc @@ -661,9 +661,8 @@ void BoostedDoubleSVProducer::calcNsubjettiness(const reco::JetBaseRef& jet, // loop over subjet constituents and push them in the vector of FastJet constituents for (size_t i = 0; i < daughter->numberOfDaughters(); ++i) { const reco::CandidatePtr& constit = subjet->daughterPtr(i); - - if (constit.isNonnull()) { - // Check if any values were nan or inf + if (constit.isNonnull() && constit->pt() > std::numeric_limits::epsilon() ) { + // Check if any values were nan or inf float valcheck = constit->px() + constit->py() + constit->pz() + constit->energy(); if (edm::isNotFinite(valcheck)) { edm::LogWarning("FaultyJetConstituent") @@ -679,10 +678,12 @@ void BoostedDoubleSVProducer::calcNsubjettiness(const reco::JetBaseRef& jet, << "BoostedDoubleSVProducer: No weights (e.g. PUPPI) given for weighted jet collection" << std::endl; } - fjParticles.push_back( - fastjet::PseudoJet(constit->px() * w, constit->py() * w, constit->pz() * w, constit->energy() * w)); - } else - fjParticles.push_back(fastjet::PseudoJet(constit->px(), constit->py(), constit->pz(), constit->energy())); + if ( w > 0 ) { + fjParticles.push_back(fastjet::PseudoJet(constit->px() * w, constit->py() * w, constit->pz() * w, constit->energy() * w)); + } + } else { + fjParticles.push_back(fastjet::PseudoJet(constit->px(), constit->py(), constit->pz(), constit->energy())); + } } else edm::LogWarning("MissingJetConstituent") << "Jet constituent required for N-subjettiness computation is missing!"; @@ -703,10 +704,12 @@ void BoostedDoubleSVProducer::calcNsubjettiness(const reco::JetBaseRef& jet, throw cms::Exception("MissingConstituentWeight") << "BoostedDoubleSVProducer: No weights (e.g. PUPPI) given for weighted jet collection" << std::endl; } - fjParticles.push_back( - fastjet::PseudoJet(daughter->px() * w, daughter->py() * w, daughter->pz() * w, daughter->energy() * w)); - } else + if ( w > 0 && daughter->pt() > std::numeric_limits::epsilon() ) { + fjParticles.push_back(fastjet::PseudoJet(daughter->px() * w, daughter->py() * w, daughter->pz() * w, daughter->energy() * w)); + } + } else { fjParticles.push_back(fastjet::PseudoJet(daughter->px(), daughter->py(), daughter->pz(), daughter->energy())); + } } } else edm::LogWarning("MissingJetConstituent") << "Jet constituent required for N-subjettiness computation is missing!";