diff --git a/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByHPSSelection.cc b/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByHPSSelection.cc index 7b147717f4d67..eed957de77242 100644 --- a/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByHPSSelection.cc +++ b/RecoTauTag/RecoTau/plugins/PFRecoTauDiscriminationByHPSSelection.cc @@ -54,6 +54,8 @@ class PFRecoTauDiscriminationByHPSSelection : public PFTauDiscriminationProducer bool requireTauChargedHadronsToBeChargedPFCands_; + int minPixelHits_; + int verbosity_; }; @@ -103,6 +105,7 @@ PFRecoTauDiscriminationByHPSSelection::PFRecoTauDiscriminationByHPSSelection(con )); } requireTauChargedHadronsToBeChargedPFCands_ = pset.getParameter("requireTauChargedHadronsToBeChargedPFCands"); + minPixelHits_ = pset.getParameter("minPixelHits"); verbosity_ = pset.exists("verbosity") ? pset.getParameter("verbosity") : 0; } @@ -284,6 +287,26 @@ PFRecoTauDiscriminationByHPSSelection::discriminate(const reco::PFTauRef& tau) c } } } + + if ( minPixelHits_ > 0 ) { + int numPixelHits = 0; + const std::vector& chargedHadrCands = tau->signalPFChargedHadrCands(); + for ( std::vector::const_iterator chargedHadrCand = chargedHadrCands.begin(); + chargedHadrCand != chargedHadrCands.end(); ++chargedHadrCand ) { + const reco::Track* track = 0; + if ( (*chargedHadrCand)->trackRef().isNonnull() ) track = (*chargedHadrCand)->trackRef().get(); + else if ( (*chargedHadrCand)->gsfTrackRef().isNonnull() ) track = (*chargedHadrCand)->gsfTrackRef().get(); + if ( track ) { + numPixelHits += track->hitPattern().numberOfValidPixelHits(); + } + } + if ( !(numPixelHits >= minPixelHits_) ) { + if ( verbosity_ ) { + edm::LogPrint("PFTauByHPSSelect") << " fails cut on sum of pixel hits." ; + } + return 0.0; + } + } // Otherwise, we pass! if ( verbosity_ ) { diff --git a/RecoTauTag/RecoTau/python/PFRecoTauDiscriminationByHPSSelection_cfi.py b/RecoTauTag/RecoTau/python/PFRecoTauDiscriminationByHPSSelection_cfi.py index ee0b64a68ec57..b696df359b875 100644 --- a/RecoTauTag/RecoTau/python/PFRecoTauDiscriminationByHPSSelection_cfi.py +++ b/RecoTauTag/RecoTau/python/PFRecoTauDiscriminationByHPSSelection_cfi.py @@ -75,7 +75,9 @@ decayMode_2Prong1Pi0, decayMode_3Prong0Pi0 ), - requireTauChargedHadronsToBeChargedPFCands = cms.bool(False) + requireTauChargedHadronsToBeChargedPFCands = cms.bool(False), + # CV: require at least one pixel hit for the sum of all tracks + minPixelHits = cms.int32(1) )