![]() |
![]() |
00001 #ifndef PhotonIsolationCalculator_H 00002 #define PhotonIsolationCalculator_H 00003 00004 #include "FWCore/Framework/interface/Event.h" 00005 #include "FWCore/Framework/interface/EventSetup.h" 00006 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00007 #include "DataFormats/EgammaCandidates/interface/Photon.h" 00008 00009 #include "CondFormats/EcalObjects/interface/EcalChannelStatus.h" 00010 #include "RecoLocalCalo/EcalRecAlgos/interface/EcalSeverityLevelAlgo.h" 00011 00012 #include <string> 00013 00014 #include "FWCore/Utilities/interface/GCC11Compatibility.h" 00015 00016 00017 class PhotonIsolationCalculator { 00018 00019 public: 00020 00021 PhotonIsolationCalculator(){} 00022 00023 ~PhotonIsolationCalculator(){} 00024 00025 void setup(const edm::ParameterSet& conf, 00026 std::vector<int> const & flagsEB_, 00027 std::vector<int> const & flagsEE_, 00028 std::vector<int> const & severitiesEB_, 00029 std::vector<int> const & severitiesEE_); 00030 00031 void calculate(const reco::Photon*, 00032 const edm::Event&, const edm::EventSetup& es, 00033 reco::Photon::FiducialFlags& phofid, 00034 reco::Photon::IsolationVariables& phoisolR03, 00035 reco::Photon::IsolationVariables& phoisolR04 ) const; 00036 00037 00038 00039 private: 00040 00041 static void classify(const reco::Photon* photon, 00042 bool &isEBPho, 00043 bool &isEEPho, 00044 bool &isEBEtaGap, 00045 bool &isEBPhiGap, 00046 bool &isEERingGap, 00047 bool &isEEDeeGap, 00048 bool &isEBEEGap) dso_internal; 00049 00050 00051 00052 void calculateTrackIso(const reco::Photon* photon, 00053 const edm::Event &e, 00054 double &trkCone, 00055 int &ntrkCone, 00056 double pTThresh=0, 00057 double RCone=.4, 00058 double RinnerCone=.1, 00059 double etaSlice=0.015, 00060 double lip=0.2, 00061 double d0=0.1) const dso_internal; 00062 00063 00064 00065 double calculateEcalRecHitIso(const reco::Photon* photon, 00066 const edm::Event& iEvent, 00067 const edm::EventSetup& iSetup, 00068 double RCone, 00069 double RConeInner, 00070 double etaSlice, 00071 double eMin, 00072 double etMin, 00073 bool vetoClusteredHits, 00074 bool useNumCrystals) const dso_internal; 00075 00076 double calculateHcalTowerIso(const reco::Photon* photon, 00077 const edm::Event& iEvent, 00078 const edm::EventSetup& iSetup, 00079 double RCone, 00080 double RConeInner, 00081 double eMin, 00082 signed int depth) const dso_internal; 00083 00084 00085 double calculateHcalTowerIso(const reco::Photon* photon, 00086 const edm::Event& iEvent, 00087 const edm::EventSetup& iSetup, 00088 double RCone, 00089 double eMin, 00090 signed int depth) const dso_internal; 00091 00092 00093 00094 00095 private: 00096 00097 edm::InputTag barrelecalCollection_; 00098 edm::InputTag endcapecalCollection_; 00099 edm::InputTag hcalCollection_; 00100 00101 edm::InputTag trackInputTag_; 00102 edm::InputTag beamSpotProducerTag_; 00103 double modulePhiBoundary_; 00104 std::vector<double> moduleEtaBoundary_; 00105 bool vetoClusteredEcalHits_; 00106 bool useNumCrystals_; 00107 00108 double trkIsoBarrelRadiusA_[6]; 00109 double ecalIsoBarrelRadiusA_[5]; 00110 double hcalIsoBarrelRadiusA_[9]; 00111 double trkIsoBarrelRadiusB_[6]; 00112 double ecalIsoBarrelRadiusB_[5]; 00113 double hcalIsoBarrelRadiusB_[9]; 00114 00115 double trkIsoEndcapRadiusA_[6]; 00116 double ecalIsoEndcapRadiusA_[5]; 00117 double hcalIsoEndcapRadiusA_[9]; 00118 double trkIsoEndcapRadiusB_[6]; 00119 double ecalIsoEndcapRadiusB_[5]; 00120 double hcalIsoEndcapRadiusB_[9]; 00121 00122 00123 std::vector<int> flagsEB_; 00124 std::vector<int> flagsEE_; 00125 std::vector<int> severityExclEB_; 00126 std::vector<int> severityExclEE_; 00127 00128 00129 }; 00130 00131 #endif // PhotonIsolationCalculator_H