CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/RecoEgamma/EgammaElectronAlgos/src/ElectronClassification.cc

Go to the documentation of this file.
00001 #include "RecoEgamma/EgammaElectronAlgos/interface/ElectronClassification.h"
00002 
00003 #include "DataFormats/EgammaReco/interface/SuperCluster.h"
00004 
00005 
00006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00007 
00008 //===================================================================
00009 // Author: Federico Ferri - INFN Milano, Bicocca university
00010 // 12/2005
00011 // See GsfElectron::Classification
00012 //===================================================================
00013 
00014 using namespace reco;
00015 
00016 void ElectronClassification::correct(GsfElectron &electron) {
00017   classify(electron);
00018   //  electron.classifyElectron(this);
00019   electron.classifyElectron(electronClass_);
00020 }
00021 
00022 void ElectronClassification::classify(const GsfElectron &electron)
00023  {
00024   electronClass_ = GsfElectron::UNKNOWN ;
00025 
00026 
00027    reco::SuperClusterRef sclRef=electron.superCluster();
00028 
00029   // use supercluster energy including f(Ncry) correction
00030   float scEnergy=sclRef->energy();
00031 
00032   // first look whether it's in crack, barrel or endcap
00033   if ((!electron.isEB())&&(!electron.isEE()))
00034    {
00035     edm::LogWarning("") << "ElectronClassification::init(): Undefined electron, eta = " <<
00036       electron.eta() << "!!!!" ;
00037     return ;
00038    }
00039 
00040   if (electron.isEBEEGap() || electron.isEBEtaGap() || electron.isEERingGap())
00041    {
00042         electronClass_ = GsfElectron::GAP ;
00043         return ;
00044    }
00045 
00046   float pin  = electron.trackMomentumAtVtx().R() ;
00047   float fbrem = electron.fbrem() ;
00048   int nbrem = electron.numberOfBrems() ;
00049 
00050   // golden
00051   if (nbrem == 0 && (pin - scEnergy)/pin < 0.1 && fbrem < 0.5) {
00052           electronClass_ = GsfElectron::GOLDEN ;
00053   }
00054   
00055   // big brem
00056   else if (nbrem == 0 && (pin - scEnergy)/pin < 0.1 && fbrem > 0.5) {
00057           electronClass_ = GsfElectron::BIGBREM ;
00058   }
00059   
00060   // showering
00061   else 
00062           electronClass_ = GsfElectron::SHOWERING ;
00063 
00064 }
00065 
00066 /*
00067 bool ElectronClassification::isInCrack(float eta) const{
00068 
00069   return (eta>1.460 && eta<1.558);
00070 
00071 }
00072 
00073 bool ElectronClassification::isInEtaGaps(float eta) const{
00074 
00075   return (eta < 0.018 ||
00076           (eta>0.423 && eta<0.461) ||
00077           (eta>0.770 && eta<0.806) ||
00078           (eta>1.127 && eta<1.163));
00079 
00080 }
00081 
00082 bool ElectronClassification::isInPhiGaps(float phi) const{
00083 
00084   return false;
00085 
00086 }
00087 */