File indexing completed on 2024-04-06 12:27:50
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include "RecoTauTag/RecoTau/interface/RecoTauBuilderPlugins.h"
0013 #include "DataFormats/TauReco/interface/PFTau.h"
0014 #include "DataFormats/TauReco/interface/PFTauFwd.h"
0015
0016 namespace reco {
0017 namespace tau {
0018
0019 class RecoTauChargeCleanerPlugin : public RecoTauCleanerPlugin {
0020 public:
0021 explicit RecoTauChargeCleanerPlugin(const edm::ParameterSet&, edm::ConsumesCollector&& iC);
0022 ~RecoTauChargeCleanerPlugin() override {}
0023 double operator()(const PFTauRef& tau) const override;
0024
0025 private:
0026 std::vector<unsigned> nprongs_;
0027 double failResult_;
0028 int charge_;
0029 };
0030
0031 RecoTauChargeCleanerPlugin::RecoTauChargeCleanerPlugin(const edm::ParameterSet& pset, edm::ConsumesCollector&& iC)
0032 : RecoTauCleanerPlugin(pset, std::move(iC)),
0033 nprongs_(pset.getParameter<std::vector<unsigned> >("nprongs")),
0034 failResult_(pset.getParameter<double>("selectionFailValue")),
0035 charge_(pset.getParameter<int>("passForCharge")) {}
0036
0037 double RecoTauChargeCleanerPlugin::operator()(const PFTauRef& cand) const {
0038 int charge = 0;
0039 unsigned nChargedPFCandidate(0), nTrack(0);
0040 for (auto const& tauCand : cand->signalTauChargedHadronCandidates()) {
0041 charge += tauCand.charge();
0042 if (tauCand.algoIs(reco::PFRecoTauChargedHadron::kChargedPFCandidate))
0043 nChargedPFCandidate++;
0044 else if (tauCand.algoIs(reco::PFRecoTauChargedHadron::kTrack))
0045 nTrack++;
0046 }
0047
0048 for (auto nprong : nprongs_) {
0049 if (nChargedPFCandidate + nTrack == nprong)
0050 return abs(charge) - charge_;
0051 }
0052
0053 return failResult_;
0054 }
0055
0056 }
0057 }
0058
0059 #include "FWCore/Framework/interface/MakerMacros.h"
0060
0061 DEFINE_EDM_PLUGIN(RecoTauCleanerPluginFactory, reco::tau::RecoTauChargeCleanerPlugin, "RecoTauChargeCleanerPlugin");