00001 #ifndef RecoTauTag_RecoTau_RecoTauDiscriminantPlugins_h 00002 #define RecoTauTag_RecoTau_RecoTauDiscriminantPlugins_h 00003 00004 /* 00005 * Common base classes for the plugins used in the 00006 * that produce PFTau discriminants. A PFTauDiscriminant 00007 * (not discriminator) is a vector of doubles associated 00008 * to a given tau, and represent some observable(s) for that 00009 * tau. 00010 * 00011 * Author: Evan K. Friis, UC Davis 00012 * 00013 * $Id $ 00014 */ 00015 00016 #include "RecoTauTag/RecoTau/interface/RecoTauPluginsCommon.h" 00017 #include "DataFormats/TauReco/interface/PFTau.h" 00018 #include <vector> 00019 00020 namespace reco { namespace tau { 00021 00022 // Convert a MVA name (i.e. Pt, Eta) to the appropriate plugin name. 00023 // Example: discPluginName("Pt") -> "RecoTauDiscriminationPt" 00024 inline std::string discPluginName(const std::string& mvaName) { 00025 return "RecoTauDiscrimination" + mvaName; 00026 } 00027 00028 class RecoTauDiscriminantPlugin : public RecoTauEventHolderPlugin { 00029 public: 00030 explicit RecoTauDiscriminantPlugin(const edm::ParameterSet& pset): 00031 RecoTauEventHolderPlugin(pset){} 00032 virtual ~RecoTauDiscriminantPlugin() {} 00033 virtual void beginEvent() {} 00034 // Get an observable 00035 virtual std::vector<double> operator()(const reco::PFTauRef& pfTau) const=0; 00036 }; 00037 00038 // Build a discriminant using a unary PFTau function that returns a single value 00039 template<double Function(const reco::PFTau&)> 00040 class RecoTauDiscriminantFunctionPlugin : public RecoTauDiscriminantPlugin { 00041 public: 00042 explicit RecoTauDiscriminantFunctionPlugin(const edm::ParameterSet& pset): 00043 RecoTauDiscriminantPlugin(pset){} 00044 00045 virtual ~RecoTauDiscriminantFunctionPlugin(){} 00046 00047 virtual std::vector<double> operator()(const reco::PFTauRef& pfTau) const { 00048 std::vector<double> output(1, Function(*pfTau)); 00049 return output; 00050 } 00051 }; 00052 00053 // Build a discriminant using a unary PFTau function that returns a vector of values 00054 template<std::vector<double> Function(const reco::PFTau&)> 00055 class RecoTauDiscriminantVectorFunctionPlugin : 00056 public RecoTauDiscriminantPlugin { 00057 public: 00058 explicit RecoTauDiscriminantVectorFunctionPlugin(const edm::ParameterSet& pset): 00059 RecoTauDiscriminantPlugin(pset){} 00060 00061 virtual ~RecoTauDiscriminantVectorFunctionPlugin() {} 00062 00063 virtual std::vector<double> operator()(const reco::PFTauRef& pfTau) const { 00064 return Function(*pfTau); 00065 } 00066 }; 00067 } } // end reco::tau 00068 00069 #include "FWCore/PluginManager/interface/PluginFactory.h" 00070 typedef edmplugin::PluginFactory<reco::tau::RecoTauDiscriminantPlugin* (const edm::ParameterSet&)> RecoTauDiscriminantPluginFactory; 00071 #endif