CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_4/src/RecoTauTag/RecoTau/plugins/RecoTauIsolationDiscriminantPlugins.cc

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 }} // end namespace reco::tau
00022 
00023 
00024 // Methods to get the right kind of canddiates
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");