00001 #ifndef SimpleCutsIsolator_H 00002 #define SimpleCutsIsolator_H 00003 00004 #include "RecoMuon/MuonIsolation/interface/MuIsoBaseIsolator.h" 00005 #include "RecoMuon/MuonIsolation/interface/Cuts.h" 00006 00007 00008 class SimpleCutsIsolator : public muonisolation::MuIsoBaseIsolator { 00009 public: 00010 SimpleCutsIsolator(const edm::ParameterSet & par): 00011 theCuts(par.getParameter<std::vector<double> > ("EtaBounds"), 00012 par.getParameter<std::vector<double> > ("ConeSizes"), 00013 par.getParameter<std::vector<double> > ("Thresholds")) 00014 { 00015 } 00016 00017 virtual ResultType resultType() const {return ISOL_BOOL_TYPE;} 00018 00019 virtual Result result(const DepositContainer& deposits, const edm::Event* = 0) const { 00020 Result answer(ISOL_BOOL_TYPE); 00021 answer.valBool = false; 00022 // fail miserably... 00023 return answer; 00024 } 00025 00026 virtual Result result(const DepositContainer& deposits, const reco::Track& tk, const edm::Event* = 0) const { 00027 Result answer(ISOL_BOOL_TYPE); 00028 00029 muonisolation::Cuts::CutSpec cuts_here = theCuts(tk.eta()); 00030 00031 double conesize = cuts_here.conesize; 00032 double dephlt = 0; 00033 unsigned int nDeps = deposits.size(); 00034 for(unsigned int iDep = 0; iDep < nDeps; ++iDep ){ 00035 dephlt += deposits[iDep].dep->depositWithin(conesize); 00036 } 00037 answer.valFloat = dephlt; 00038 if (dephlt<cuts_here.threshold) { 00039 answer.valBool = true; 00040 } else { 00041 answer.valBool = false; 00042 } 00043 return answer; 00044 } 00045 00046 private: 00047 00048 // Isolation cuts 00049 muonisolation::Cuts theCuts; 00050 00051 00052 }; 00053 00054 #endif