File indexing completed on 2024-04-06 12:27:52
0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "RecoTauTag/RecoTau/interface/RecoTauBuilderPlugins.h"
0010 #include "DataFormats/TauReco/interface/PFTauDiscriminator.h"
0011 #include "RecoTauTag/RecoTau/interface/pfRecoTauChargedHadronAuxFunctions.h"
0012
0013 namespace reco {
0014 namespace tau {
0015
0016 class RecoTauSoftTwoProngTausCleanerPlugin : public RecoTauCleanerPlugin {
0017 public:
0018 RecoTauSoftTwoProngTausCleanerPlugin(const edm::ParameterSet& pset, edm::ConsumesCollector&& iC);
0019
0020
0021 double operator()(const reco::PFTauRef&) const override;
0022
0023 private:
0024 double minTrackPt_;
0025 };
0026
0027 RecoTauSoftTwoProngTausCleanerPlugin::RecoTauSoftTwoProngTausCleanerPlugin(const edm::ParameterSet& pset,
0028 edm::ConsumesCollector&& iC)
0029 : RecoTauCleanerPlugin(pset, std::move(iC)) {
0030 minTrackPt_ = pset.getParameter<double>("minTrackPt");
0031 }
0032
0033 double RecoTauSoftTwoProngTausCleanerPlugin::operator()(const reco::PFTauRef& tau) const {
0034 double result = 0.;
0035 const std::vector<PFRecoTauChargedHadron>& chargedHadrons = tau->signalTauChargedHadronCandidates();
0036 if (chargedHadrons.size() == 2) {
0037 for (std::vector<PFRecoTauChargedHadron>::const_iterator chargedHadron = chargedHadrons.begin();
0038 chargedHadron != chargedHadrons.end();
0039 ++chargedHadron) {
0040 const reco::Track* track = getTrackFromChargedHadron(*chargedHadron);
0041 if (!(track != nullptr && track->pt() > minTrackPt_))
0042 result += 1.e+3;
0043 }
0044 }
0045 return result;
0046 }
0047
0048 }
0049 }
0050
0051
0052 #include "FWCore/Framework/interface/MakerMacros.h"
0053 DEFINE_EDM_PLUGIN(RecoTauCleanerPluginFactory,
0054 reco::tau::RecoTauSoftTwoProngTausCleanerPlugin,
0055 "RecoTauSoftTwoProngTausCleanerPlugin");