CMS 3D CMS Logo

ElectronHcalHelper.cc
Go to the documentation of this file.
1 
8 
9 using namespace reco;
10 
12  : cfg_(cfg), caloGeomCacheId_(0), hcalIso_(nullptr), towerIso1_(nullptr), towerIso2_(nullptr), hadTower_(nullptr) {}
13 
15  if (cfg_.hOverEConeSize == 0) {
16  return;
17  }
18 
19  if (cfg_.useTowers) {
20  delete hadTower_;
21  hadTower_ = new EgammaHadTower(es);
22  } else {
23  unsigned long long newCaloGeomCacheId_ = es.get<CaloGeometryRecord>().cacheIdentifier();
24  if (caloGeomCacheId_ != newCaloGeomCacheId_) {
25  caloGeomCacheId_ = newCaloGeomCacheId_;
26  es.get<CaloGeometryRecord>().get(caloGeom_);
27  }
28  }
29 }
30 
32  if (cfg_.hOverEConeSize == 0) {
33  return;
34  }
35 
36  if (cfg_.useTowers) {
37  delete towerIso1_;
38  towerIso1_ = nullptr;
39  delete towerIso2_;
40  towerIso2_ = nullptr;
41 
43  if (!evt.getByToken(cfg_.hcalTowers, towersH_)) {
44  edm::LogError("ElectronHcalHelper::readEvent") << "failed to get the hcal towers";
45  }
49  } else {
50  delete hcalIso_;
51  hcalIso_ = nullptr;
52 
54  if (!evt.getByToken(cfg_.hcalRecHits, hbhe_)) {
55  edm::LogError("ElectronHcalHelper::readEvent") << "failed to get the rechits";
56  }
57 
60  }
61 }
62 
63 std::vector<CaloTowerDetId> ElectronHcalHelper::hcalTowersBehindClusters(const reco::SuperCluster& sc) const {
64  return hadTower_->towersOf(sc);
65 }
66 
67 double ElectronHcalHelper::hcalESumDepth1BehindClusters(const std::vector<CaloTowerDetId>& towers) const {
68  return hadTower_->getDepth1HcalESum(towers);
69 }
70 
71 double ElectronHcalHelper::hcalESumDepth2BehindClusters(const std::vector<CaloTowerDetId>& towers) const {
72  return hadTower_->getDepth2HcalESum(towers);
73 }
74 
75 double ElectronHcalHelper::hcalESum(const SuperCluster& sc, const std::vector<CaloTowerDetId>* excludeTowers) const {
76  if (cfg_.hOverEConeSize == 0) {
77  return 0;
78  }
79  if (cfg_.useTowers) {
80  return (hcalESumDepth1(sc, excludeTowers) + hcalESumDepth2(sc, excludeTowers));
81  } else {
82  return hcalIso_->getHcalESum(&sc);
83  }
84 }
85 
87  const std::vector<CaloTowerDetId>* excludeTowers) const {
88  if (cfg_.hOverEConeSize == 0) {
89  return 0;
90  }
91  if (cfg_.useTowers) {
92  return towerIso1_->getTowerESum(&sc, excludeTowers);
93  } else {
94  return hcalIso_->getHcalESumDepth1(&sc);
95  }
96 }
97 
99  const std::vector<CaloTowerDetId>* excludeTowers) const {
100  if (cfg_.hOverEConeSize == 0) {
101  return 0;
102  }
103  if (cfg_.useTowers) {
104  return towerIso2_->getTowerESum(&sc, excludeTowers);
105  } else {
106  return hcalIso_->getHcalESumDepth2(&sc);
107  }
108 }
109 
112  return hadTower_->hasActiveHcal(sc);
113  } else {
114  return true;
115  }
116 }
117 
119  if (cfg_.hOverEConeSize == 0) {
120  return;
121  }
122  if (cfg_.useTowers) {
123  delete towerIso1_;
124  delete towerIso2_;
125  delete hadTower_;
126  } else {
127  delete hcalIso_;
128  }
129 }
EgammaTowerIsolation * towerIso1_
void readEvent(const edm::Event &)
double hcalESum(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
#define nullptr
void checkSetup(const edm::EventSetup &)
const Configuration cfg_
double hcalESumDepth1(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0) const
bool hasActiveHcal(const reco::SuperCluster &sc) const
void setTowerCollection(const CaloTowerCollection *towercollection)
ElectronHcalHelper(const Configuration &)
double getDepth1HcalESum(const reco::SuperCluster &sc) const
edm::ESHandle< CaloGeometry > caloGeom_
edm::EDGetTokenT< HBHERecHitCollection > hcalRecHits
double getHcalESumDepth2(const reco::Candidate *c) const
unsigned long long caloGeomCacheId_
double getTowerESum(const reco::Candidate *cand, const std::vector< CaloTowerDetId > *detIdToExclude=0) const
double hcalESumDepth2(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0) const
T const * product() const
Definition: Handle.h:69
bool hasActiveHcal(const reco::SuperCluster &sc) const
EgammaHcalIsolation * hcalIso_
double getHcalESum(const reco::Candidate *c) const
double hcalESumDepth2BehindClusters(const std::vector< CaloTowerDetId > &towers) const
std::vector< CaloTowerDetId > towersOf(const reco::SuperCluster &sc) const
double getDepth2HcalESum(const reco::SuperCluster &sc) const
fixed size matrix
T get() const
Definition: EventSetup.h:73
std::vector< CaloTowerDetId > hcalTowersBehindClusters(const reco::SuperCluster &sc) const
EgammaHadTower * hadTower_
edm::EDGetTokenT< CaloTowerCollection > hcalTowers
double getHcalESumDepth1(const reco::Candidate *c) const
EgammaTowerIsolation * towerIso2_
double hcalESumDepth1BehindClusters(const std::vector< CaloTowerDetId > &towers) const