CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/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/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