CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/RecoTauTag/RecoTau/interface/RecoTauDiscriminantPlugins.h

Go to the documentation of this file.
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