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::classify( GsfElectron & electron ) 00017 { 00018 if ((!electron.isEB())&&(!electron.isEE())) 00019 { 00020 edm::LogWarning("") 00021 << "ElectronClassification::init(): Undefined electron, eta = " 00022 << electron.eta() << "!!!!" ; 00023 electron.setClassification(GsfElectron::UNKNOWN) ; 00024 return ; 00025 } 00026 00027 if ( electron.isEBEEGap() || electron.isEBEtaGap() || electron.isEERingGap() ) 00028 { 00029 electron.setClassification(GsfElectron::GAP) ; 00030 return ; 00031 } 00032 00033 //float pin = electron.trackMomentumAtVtx().R() ; 00034 float fbrem = electron.trackFbrem() ; 00035 int nbrem = electron.numberOfBrems() ; 00036 00037 if (nbrem == 0 && fbrem < 0.5) // part (pin - scEnergy)/pin < 0.1 removed - M.D. 00038 { electron.setClassification(GsfElectron::GOLDEN) ; } 00039 else if (nbrem == 0 && fbrem >= 0.5) // part (pin - scEnergy)/pin < 0.1 removed - M.D. 00040 { electron.setClassification(GsfElectron::BIGBREM) ; } 00041 else 00042 { electron.setClassification(GsfElectron::SHOWERING) ; } 00043 00044 } 00045 00046 void ElectronClassification::refineWithPflow( GsfElectron & electron ) 00047 { 00048 if ((!electron.isEB())&&(!electron.isEE())) 00049 { return ; } 00050 00051 if ( electron.isEBEEGap() || electron.isEBEtaGap() || electron.isEERingGap() ) 00052 { return ; } 00053 00054 if ((electron.pfSuperClusterFbrem()-electron.trackFbrem())>=0.15) 00055 { electron.setClassification(GsfElectron::BADTRACK) ; } 00056 } 00057