File indexing completed on 2024-04-06 12:27:49
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0016
0017 #include "RecoTauTag/RecoTau/interface/RecoTauBuilderPlugins.h"
0018 #include "DataFormats/TauReco/interface/PFTau.h"
0019 #include "DataFormats/TauReco/interface/PFRecoTauChargedHadron.h"
0020 #include "DataFormats/TauReco/interface/PFRecoTauChargedHadronFwd.h"
0021
0022 namespace reco {
0023 namespace tau {
0024
0025 class PFRecoTauLostTrackPlugin : public RecoTauModifierPlugin {
0026 public:
0027 explicit PFRecoTauLostTrackPlugin(const edm::ParameterSet&, edm::ConsumesCollector&& iC);
0028 ~PFRecoTauLostTrackPlugin() override = default;
0029 void operator()(PFTau&) const override;
0030 void beginEvent() override;
0031 void endEvent() override;
0032
0033 private:
0034 edm::Handle<reco::TrackCollection> tracks_;
0035 const edm::EDGetTokenT<reco::TrackCollection> track_token_;
0036 const int verbosity_;
0037 };
0038
0039 PFRecoTauLostTrackPlugin::PFRecoTauLostTrackPlugin(const edm::ParameterSet& cfg, edm::ConsumesCollector&& iC)
0040 : RecoTauModifierPlugin(cfg, std::move(iC)),
0041 track_token_(iC.consumes(cfg.getParameter<edm::InputTag>("trackSrc"))),
0042 verbosity_(cfg.getParameter<int>("verbosity")) {}
0043
0044 void PFRecoTauLostTrackPlugin::beginEvent() { evt()->getByToken(track_token_, tracks_); }
0045
0046 void PFRecoTauLostTrackPlugin::operator()(PFTau& tau) const {
0047 if (!tracks_.isValid()) {
0048 if (verbosity_) {
0049 edm::LogPrint("<PFRecoTauLostTrackPlugin::operator()>:")
0050 << " Track collection " << tracks_.provenance() << " is not valid."
0051 << " No tracks will be added to tau.";
0052 }
0053 return;
0054 }
0055 reco::TrackRefVector lostTracks;
0056 const PFRecoTauChargedHadronCollection& chargedHadrons = tau.signalTauChargedHadronCandidates();
0057 for (const auto& chargedHadron : chargedHadrons) {
0058 if (chargedHadron.algoIs(PFRecoTauChargedHadron::kTrack) && chargedHadron.getTrack().isNonnull()) {
0059 reco::TrackRef trackRef(tracks_, chargedHadron.getTrack().key());
0060 lostTracks.push_back(trackRef);
0061 }
0062 }
0063 if (verbosity_) {
0064 edm::LogPrint("<PFRecoTauLostTrackPlugin::operator()>:")
0065 << " tau: Pt = " << tau.pt() << ", eta = " << tau.eta() << ", phi = " << tau.phi()
0066 << ", mass = " << tau.mass() << " (decayMode = " << tau.decayMode() << ")"
0067 << ", nChHadrs = " << chargedHadrons.size() << ", nLostTracks = " << lostTracks.size();
0068 }
0069 if (!lostTracks.empty())
0070 tau.setsignalTracks(lostTracks);
0071 }
0072
0073 void PFRecoTauLostTrackPlugin::endEvent() {}
0074
0075 }
0076 }
0077
0078 #include "FWCore/Framework/interface/MakerMacros.h"
0079
0080 DEFINE_EDM_PLUGIN(RecoTauModifierPluginFactory, reco::tau::PFRecoTauLostTrackPlugin, "PFRecoTauLostTrackPlugin");