![]() |
![]() |
00001 /* class PFRecoTauDiscriminationAgainstElectronMVA 00002 * created : Nov 23 2011, 00003 * revised : , 00004 * Authorss : Lorenzo Bianchini (LLR Ecole-Polytechnique) 00005 */ 00006 00007 #include "RecoTauTag/RecoTau/interface/TauDiscriminationProducerBase.h" 00008 #include "FWCore/ParameterSet/interface/FileInPath.h" 00009 #include "RecoTauTag/RecoTau/interface/AntiElectronIDMVA.h" 00010 00011 #include <string> 00012 00013 using namespace reco; 00014 00015 class PFRecoTauDiscriminationAgainstElectronMVA : public PFTauDiscriminationProducerBase { 00016 public: 00017 explicit PFRecoTauDiscriminationAgainstElectronMVA(const edm::ParameterSet& iConfig):PFTauDiscriminationProducerBase(iConfig) { 00018 00019 method_ = iConfig.getParameter<std::string>("method"); 00020 inputFileName1prongBL_ = iConfig.getParameter<edm::FileInPath>("inputFileName1prongBL"); 00021 inputFileName1prongStripsWgsfBL_ = iConfig.getParameter<edm::FileInPath>("inputFileName1prongStripsWgsfBL"); 00022 inputFileName1prongStripsWOgsfBL_ = iConfig.getParameter<edm::FileInPath>("inputFileName1prongStripsWOgsfBL"); 00023 inputFileName1prongEC_ = iConfig.getParameter<edm::FileInPath>("inputFileName1prongEC"); 00024 inputFileName1prongStripsWgsfEC_ = iConfig.getParameter<edm::FileInPath>("inputFileName1prongStripsWgsfEC"); 00025 inputFileName1prongStripsWOgsfEC_ = iConfig.getParameter<edm::FileInPath>("inputFileName1prongStripsWOgsfEC"); 00026 00027 returnMVA_ = iConfig.getParameter<bool>("returnMVA"); 00028 minMVA1prongBL_ = iConfig.getParameter<double>("minMVA1prongBL"); 00029 minMVA1prongStripsWgsfBL_ = iConfig.getParameter<double>("minMVA1prongStripsWgsfBL"); 00030 minMVA1prongStripsWOgsfBL_ = iConfig.getParameter<double>("minMVA1prongStripsWOgsfBL"); 00031 minMVA1prongEC_ = iConfig.getParameter<double>("minMVA1prongEC"); 00032 minMVA1prongStripsWgsfEC_ = iConfig.getParameter<double>("minMVA1prongStripsWgsfEC"); 00033 minMVA1prongStripsWOgsfEC_ = iConfig.getParameter<double>("minMVA1prongStripsWOgsfEC"); 00034 00035 mva_ = new AntiElectronIDMVA(); 00036 mva_->Initialize(method_, 00037 inputFileName1prongBL_.fullPath().data(), 00038 inputFileName1prongStripsWgsfBL_.fullPath().data(), 00039 inputFileName1prongStripsWOgsfBL_.fullPath().data(), 00040 inputFileName1prongEC_.fullPath().data(), 00041 inputFileName1prongStripsWgsfEC_.fullPath().data(), 00042 inputFileName1prongStripsWOgsfEC_.fullPath().data() 00043 ); 00044 00045 00046 } 00047 00048 double discriminate(const PFTauRef& thePFTauRef); 00049 00050 ~PFRecoTauDiscriminationAgainstElectronMVA() { delete mva_; } 00051 00052 private: 00053 00054 std::string method_ ; 00055 edm::FileInPath inputFileName1prongBL_; 00056 edm::FileInPath inputFileName1prongStripsWgsfBL_; 00057 edm::FileInPath inputFileName1prongStripsWOgsfBL_; 00058 edm::FileInPath inputFileName1prongEC_; 00059 edm::FileInPath inputFileName1prongStripsWgsfEC_; 00060 edm::FileInPath inputFileName1prongStripsWOgsfEC_; 00061 AntiElectronIDMVA* mva_; 00062 bool returnMVA_ ; 00063 double minMVA1prongBL_ ; 00064 double minMVA1prongStripsWgsfBL_ ; 00065 double minMVA1prongStripsWOgsfBL_ ; 00066 double minMVA1prongEC_ ; 00067 double minMVA1prongStripsWgsfEC_ ; 00068 double minMVA1prongStripsWOgsfEC_; 00069 }; 00070 00071 double PFRecoTauDiscriminationAgainstElectronMVA::discriminate(const PFTauRef& thePFTauRef) 00072 { 00073 double mva = -1.0; 00074 double workingPoint = 0.0; 00075 00076 if( (*thePFTauRef).leadPFChargedHadrCand().isNonnull() ) { 00077 00078 mva = mva_->MVAValue( thePFTauRef ); 00079 00080 workingPoint = 00081 ((*thePFTauRef).signalPFChargedHadrCands().size()==3 || 00082 (fabs((*thePFTauRef).eta())<1.5 && ((*thePFTauRef).signalPFGammaCands().size())<=0 && mva > minMVA1prongBL_) || 00083 (fabs((*thePFTauRef).eta())<1.5 && ((*thePFTauRef).signalPFGammaCands().size())>0 && (((*thePFTauRef).leadPFChargedHadrCand())->gsfTrackRef()).isNonnull()>0.5 && mva > minMVA1prongStripsWgsfBL_) || 00084 (fabs((*thePFTauRef).eta())<1.5 && ((*thePFTauRef).signalPFGammaCands().size())>0 && (((*thePFTauRef).leadPFChargedHadrCand())->gsfTrackRef()).isNonnull()<0.5 && mva > minMVA1prongStripsWOgsfBL_) || 00085 (fabs((*thePFTauRef).eta())>1.5 && ((*thePFTauRef).signalPFGammaCands().size())<=0 && mva > minMVA1prongEC_) || 00086 (fabs((*thePFTauRef).eta())>1.5 && ((*thePFTauRef).signalPFGammaCands().size())>0 && (((*thePFTauRef).leadPFChargedHadrCand())->gsfTrackRef()).isNonnull()>0.5 && mva > minMVA1prongStripsWgsfEC_) || 00087 (fabs((*thePFTauRef).eta())>1.5 && ((*thePFTauRef).signalPFGammaCands().size())>0 && (((*thePFTauRef).leadPFChargedHadrCand())->gsfTrackRef()).isNonnull()<0.5 && mva > minMVA1prongStripsWOgsfEC_)) ? 1.0 : 0.0; 00088 00089 } 00090 00091 return ( returnMVA_ ? mva : workingPoint); 00092 } 00093 00094 DEFINE_FWK_MODULE(PFRecoTauDiscriminationAgainstElectronMVA);