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/PFTauFwd.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") -> "RecoTauDiscriminat 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 00033 virtual ~RecoTauDiscriminantPlugin() {} 00034 00035 // Get an observable 00036 virtual std::vector<double> operator()(const reco::PFTauRef& pfTau) const=0; 00037 }; 00038 00039 // Build a discriminant using a unary PFTau function that returns a single value 00040 template<double Function(const reco::PFTau&)> 00041 class RecoTauDiscriminantFunctionPlugin : public RecoTauDiscriminantPlugin { 00042 public: 00043 explicit RecoTauDiscriminantFunctionPlugin(const edm::ParameterSet& pset): 00044 RecoTauDiscriminantPlugin(pset){} 00045 00046 virtual ~RecoTauDiscriminantFunctionPlugin(){} 00047 00048 virtual std::vector<double> operator()(const reco::PFTauRef& pfTau) const { 00049 std::vector<double> output(1, Function(*pfTau)); 00050 return output; 00051 } 00052 }; 00053 00054 // Build a discriminant using a unary PFTau function that returns a vector of values 00055 template<std::vector<double> Function(const reco::PFTau&)> 00056 class RecoTauDiscriminantVectorFunctionPlugin : 00057 public RecoTauDiscriminantPlugin { 00058 public: 00059 explicit RecoTauDiscriminantVectorFunctionPlugin(const edm::ParameterSet& pset): 00060 RecoTauDiscriminantPlugin(pset){} 00061 00062 virtual ~RecoTauDiscriminantVectorFunctionPlugin() {} 00063 00064 virtual std::vector<double> operator()(const reco::PFTauRef& pfTau) const { 00065 return Function(*pfTau); 00066 } 00067 }; 00068 } } // end reco::tau 00069 00070 #include "FWCore/PluginManager/interface/PluginFactory.h" 00071 typedef edmplugin::PluginFactory<reco::tau::RecoTauDiscriminantPlugin* (const edm::ParameterSet&)> RecoTauDiscriminantPluginFactory; 00072 #endif