Go to the documentation of this file.00001 #include <boost/foreach.hpp>
00002 #include "RecoTauTag/RecoTau/interface/RecoTauBinnedIsolationPlugin.h"
00003 #include "RecoTauTag/RecoTau/interface/RecoTauIsolationMasking.h"
00004
00005 namespace reco { namespace tau {
00006
00007 template<class Extractor>
00008 class RecoTauDiscriminationBinnedIsolationImpl
00009 : public RecoTauDiscriminationBinnedIsolation {
00010 public:
00011 RecoTauDiscriminationBinnedIsolationImpl(const edm::ParameterSet& pset)
00012 :RecoTauDiscriminationBinnedIsolation(pset),extractor_(pset) {}
00013 reco::PFCandidateRefVector extractIsoObjects(
00014 const reco::PFTauRef& tau) const {
00015 return extractor_(tau);
00016 }
00017 private:
00018 Extractor extractor_;
00019 };
00020
00021 }}
00022
00023
00024
00025 namespace {
00026
00027 class TrackExtractor {
00028 public:
00029 TrackExtractor(const edm::ParameterSet& pset){};
00030 reco::PFCandidateRefVector operator()(const reco::PFTauRef& tau) const {
00031 return tau->isolationPFChargedHadrCands();
00032 }
00033 };
00034
00035 class ECALExtractor {
00036 public:
00037 ECALExtractor(const edm::ParameterSet& pset){};
00038 reco::PFCandidateRefVector operator()(const reco::PFTauRef& tau) const {
00039 return tau->isolationPFGammaCands();
00040 }
00041 };
00042
00043 class MaskedECALExtractor {
00044 public:
00045 MaskedECALExtractor(const edm::ParameterSet& pset)
00046 :mask_(pset.getParameter<edm::ParameterSet>("mask")){};
00047 reco::PFCandidateRefVector operator()(const reco::PFTauRef& tau) const {
00048 reco::PFCandidateRefVector output;
00049 reco::tau::RecoTauIsolationMasking::IsoMaskResult
00050 result = mask_.mask(*tau);
00051 output.reserve(result.gammas.size());
00052 BOOST_FOREACH(const reco::PFCandidateRef gamma, result.gammas) {
00053 output.push_back(gamma);
00054 }
00055 return output;
00056 }
00057 private:
00058 reco::tau::RecoTauIsolationMasking mask_;
00059 };
00060
00061 class HCALExtractor {
00062 public:
00063 HCALExtractor(const edm::ParameterSet& pset){};
00064 reco::PFCandidateRefVector operator()(const reco::PFTauRef& tau) const {
00065 return tau->isolationPFNeutrHadrCands();
00066 }
00067 };
00068
00069 class MaskedHCALExtractor {
00070 public:
00071 MaskedHCALExtractor(const edm::ParameterSet& pset)
00072 :mask_(pset.getParameter<edm::ParameterSet>("mask")){};
00073 reco::PFCandidateRefVector operator()(const reco::PFTauRef& tau) const {
00074 reco::PFCandidateRefVector output;
00075 reco::tau::RecoTauIsolationMasking::IsoMaskResult
00076 result = mask_.mask(*tau);
00077 output.reserve(result.h0s.size());
00078 BOOST_FOREACH(const reco::PFCandidateRef h0, result.h0s) {
00079 output.push_back(h0);
00080 }
00081 return output;
00082 }
00083 private:
00084 reco::tau::RecoTauIsolationMasking mask_;
00085 };
00086 }
00087
00088 #include "FWCore/Framework/interface/MakerMacros.h"
00089 DEFINE_EDM_PLUGIN(RecoTauDiscriminantPluginFactory,
00090 reco::tau::RecoTauDiscriminationBinnedIsolationImpl<TrackExtractor>,
00091 "RecoTauDiscriminationBinnedTrackIsolation");
00092 DEFINE_EDM_PLUGIN(RecoTauDiscriminantPluginFactory,
00093 reco::tau::RecoTauDiscriminationBinnedIsolationImpl<ECALExtractor>,
00094 "RecoTauDiscriminationBinnedECALIsolation");
00095 DEFINE_EDM_PLUGIN(RecoTauDiscriminantPluginFactory,
00096 reco::tau::RecoTauDiscriminationBinnedIsolationImpl<MaskedECALExtractor>,
00097 "RecoTauDiscriminationBinnedMaskedECALIsolation");
00098 DEFINE_EDM_PLUGIN(RecoTauDiscriminantPluginFactory,
00099 reco::tau::RecoTauDiscriminationBinnedIsolationImpl<HCALExtractor>,
00100 "RecoTauDiscriminationBinnedHCALIsolation");
00101 DEFINE_EDM_PLUGIN(RecoTauDiscriminantPluginFactory,
00102 reco::tau::RecoTauDiscriminationBinnedIsolationImpl<MaskedHCALExtractor>,
00103 "RecoTauDiscriminationBinnedMaskedHCALIsolation");