CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/src/EgammaAnalysis/ElectronTools/interface/EGammaCutBasedEleId.h

Go to the documentation of this file.
00001 
00002 //
00003 // to use this code outside of CMSSW
00004 // set this definition
00005 //
00006 
00007 //#define STANDALONEID
00008 #ifndef STANDALONEID
00009 #include "DataFormats/EgammaCandidates/interface/GsfElectron.h"
00010 #include "DataFormats/EgammaCandidates/interface/ConversionFwd.h"
00011 #include "DataFormats/EgammaCandidates/interface/Conversion.h"
00012 #include "DataFormats/Common/interface/ValueMap.h"
00013 #include "DataFormats/RecoCandidate/interface/IsoDeposit.h"
00014 #include "DataFormats/VertexReco/interface/Vertex.h"
00015 #include "DataFormats/VertexReco/interface/VertexFwd.h"
00016 #endif
00017 
00018 #include <vector>
00019 
00020 namespace EgammaCutBasedEleId {
00021 
00022 //
00023 // typedefs
00024 //
00025 
00026 typedef std::vector< edm::Handle< edm::ValueMap<reco::IsoDeposit> > >   IsoDepositMaps;
00027 typedef std::vector< edm::Handle< edm::ValueMap<double> > >             IsoDepositVals;
00028 
00029 //
00030 // defined ID working points
00031 //
00032 
00033 enum WorkingPoint {
00034     VETO,
00035     LOOSE,
00036     MEDIUM,
00037     TIGHT
00038 };
00039 
00040 enum TriggerWorkingPoint {
00041     TRIGGERTIGHT,
00042     TRIGGERWP70
00043 };
00044 
00045 //
00046 // cuts used within working points
00047 //
00048 
00049 enum CutType {
00050     DETAIN          = (1<<0),
00051     DPHIIN          = (1<<1),
00052     SIGMAIETAIETA   = (1<<2),
00053     HOE             = (1<<3),
00054     OOEMOOP         = (1<<4),
00055     D0VTX           = (1<<5),
00056     DZVTX           = (1<<6),
00057     ISO             = (1<<7),
00058     VTXFIT          = (1<<8),
00059     MHITS           = (1<<9)
00060 };
00061 
00062 //
00063 // all possible cuts pass
00064 //
00065 
00066 static const unsigned int PassAll         = DETAIN | DPHIIN | SIGMAIETAIETA | HOE | OOEMOOP | D0VTX | DZVTX | ISO | VTXFIT | MHITS;
00067 
00068 //
00069 // CMSSW interface
00070 //
00071 
00072 #ifndef STANDALONEID
00073 
00074 bool PassWP(const WorkingPoint workingPoint,
00075     const reco::GsfElectronRef &ele,
00076     const edm::Handle<reco::ConversionCollection> &conversions,
00077     const reco::BeamSpot &beamspot,
00078     const edm::Handle<reco::VertexCollection> &vtxs,
00079     const double &iso_ch,
00080     const double &iso_em,
00081     const double &iso_nh,
00082     const double &rho);
00083 
00084 
00085 bool PassWP(const WorkingPoint workingPoint,
00086     const reco::GsfElectron &ele,
00087     const edm::Handle<reco::ConversionCollection> &conversions,
00088     const reco::BeamSpot &beamspot,
00089     const edm::Handle<reco::VertexCollection> &vtxs,
00090     const double &iso_ch,
00091     const double &iso_em,
00092     const double &iso_nh,
00093     const double &rho);
00094 
00095 
00096 bool PassTriggerCuts(const TriggerWorkingPoint triggerWorkingPoint, const reco::GsfElectronRef &ele);
00097 
00098 bool PassTriggerCuts(const TriggerWorkingPoint triggerWorkingPoint, const reco::GsfElectron &ele);
00099 
00100 bool PassEoverPCuts(const reco::GsfElectronRef &ele);
00101 
00102 bool PassEoverPCuts(const reco::GsfElectron &ele);
00103 
00104 unsigned int TestWP(const WorkingPoint workingPoint,
00105     const reco::GsfElectronRef &ele,
00106     const edm::Handle<reco::ConversionCollection> &conversions,
00107     const reco::BeamSpot &beamspot,
00108     const edm::Handle<reco::VertexCollection> &vtxs,
00109     const double &iso_ch,
00110     const double &iso_em,
00111     const double &iso_nh,
00112     const double &rho);
00113 
00114 unsigned int TestWP(const WorkingPoint workingPoint,
00115     const reco::GsfElectron &ele,
00116     const edm::Handle<reco::ConversionCollection> &conversions,
00117     const reco::BeamSpot &beamspot,
00118     const edm::Handle<reco::VertexCollection> &vtxs,
00119     const double &iso_ch,
00120     const double &iso_em,
00121     const double &iso_nh,
00122     const double &rho);
00123 
00124 #endif
00125 
00126 //
00127 // implementation of working points
00128 // used by CMSSW interface, does not 
00129 // itself depend on CMSSW code
00130 //
00131 
00132 bool PassWP(WorkingPoint workingPoint, const bool isEB, const float pt, const float eta,
00133     const float dEtaIn, const float dPhiIn, const float sigmaIEtaIEta, const float hoe,
00134     const float ooemoop, const float d0vtx, const float dzvtx, const float iso_ch, const float iso_em, const float iso_nh, 
00135     const bool vtxFitConversion, const unsigned int mHits, const double rho);
00136 
00137 bool PassTriggerCuts(const TriggerWorkingPoint triggerWorkingPoint, const bool isEB, const float pt, 
00138     const float dEtaIn, const float dPhiIn, const float sigmaIEtaIEta, const float hoe,
00139     const float trackIso, const float ecalIso, const float hcalIso);
00140 
00141 bool PassEoverPCuts(const float eta, const float eopin, const float fbrem);
00142 
00143 unsigned int TestWP(WorkingPoint workingPoint, const bool isEB, const float pt, const float eta,
00144     const float dEtaIn, const float dPhiIn, const float sigmaIEtaIEta, const float hoe,
00145     const float ooemoop, const float d0vtx, const float dzvtx, const float iso_ch, const float iso_em, const float iso_nh, 
00146     const bool vtxFitConversion, const unsigned int mHits, const double rho);
00147 
00148 // print the bit mask
00149 void PrintDebug(unsigned int mask);
00150 
00151 }
00152