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 { }
14 
16  {
17 
18  if (cfg_.hOverEConeSize==0)
19  { return ; }
20 
21  if (cfg_.useTowers)
22  {
23  delete hadTower_ ;
24  hadTower_ = new EgammaHadTower(es) ;
25  }
26  else
27  {
28  unsigned long long newCaloGeomCacheId_
29  = es.get<CaloGeometryRecord>().cacheIdentifier() ;
30  if (caloGeomCacheId_!=newCaloGeomCacheId_)
31  {
32  caloGeomCacheId_ = newCaloGeomCacheId_ ;
33  es.get<CaloGeometryRecord>().get(caloGeom_) ;
34  }
35  }
36  }
37 
39  {
40  if (cfg_.hOverEConeSize==0)
41  { return ; }
42 
43  if (cfg_.useTowers)
44  {
45  delete towerIso1_ ; towerIso1_ = nullptr ;
46  delete towerIso2_ ; towerIso2_ = nullptr ;
47 
49  if (!evt.getByToken(cfg_.hcalTowers,towersH_)){
50  edm::LogError("ElectronHcalHelper::readEvent")
51  <<"failed to get the hcal towers";
52  }
56  }
57  else
58  {
59  delete hcalIso_ ; hcalIso_ = nullptr ;
60 
62  if (!evt.getByToken(cfg_.hcalRecHits,hbhe_)) {
63  edm::LogError("ElectronHcalHelper::readEvent")
64  <<"failed to get the rechits";
65  }
66 
68  }
69  }
70 
72  { return hadTower_->towersOf(sc) ; }
73 
74 double ElectronHcalHelper::hcalESumDepth1BehindClusters( const std::vector<CaloTowerDetId> & towers )
75  { return hadTower_->getDepth1HcalESum(towers) ; }
76 
77 double ElectronHcalHelper::hcalESumDepth2BehindClusters( const std::vector<CaloTowerDetId> & towers )
78  { return hadTower_->getDepth2HcalESum(towers) ; }
79 
80 double ElectronHcalHelper::hcalESum( const SuperCluster & sc, const std::vector<CaloTowerDetId > * excludeTowers )
81  {
82  if (cfg_.hOverEConeSize==0)
83  { return 0 ; }
84  if (cfg_.useTowers)
85  { return(hcalESumDepth1(sc,excludeTowers)+hcalESumDepth2(sc,excludeTowers)) ; }
86  else
87  { return hcalIso_->getHcalESum(&sc) ; }
88  }
89 
90 double ElectronHcalHelper::hcalESumDepth1( const SuperCluster & sc ,const std::vector<CaloTowerDetId > * excludeTowers )
91  {
92  if (cfg_.hOverEConeSize==0)
93  { return 0 ; }
94  if (cfg_.useTowers)
95  { return towerIso1_->getTowerESum(&sc, excludeTowers) ; }
96  else
97  { return hcalIso_->getHcalESumDepth1(&sc) ; }
98  }
99 
100 double ElectronHcalHelper::hcalESumDepth2( const SuperCluster & sc ,const std::vector<CaloTowerDetId > * excludeTowers )
101  {
102  if (cfg_.hOverEConeSize==0)
103  { return 0 ; }
104  if (cfg_.useTowers)
105  { return towerIso2_->getTowerESum(&sc, excludeTowers) ; }
106  else
107  { return hcalIso_->getHcalESumDepth2(&sc) ; }
108  }
109 
111  {
113  return hadTower_->hasActiveHcal( sc );
114  } else {
115  return true;
116  }
117  }
118 
119 
121  {
122  if (cfg_.hOverEConeSize==0)
123  { return ; }
124  if (cfg_.useTowers)
125  {
126  delete towerIso1_ ;
127  delete towerIso2_ ;
128  delete hadTower_;
129  }
130  else
131  {
132  delete hcalIso_ ;
133  }
134  }
135 
136 
EgammaTowerIsolation * towerIso1_
double hcalESum(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0)
void readEvent(const edm::Event &)
bool hasActiveHcal(const reco::SuperCluster &sc)
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:579
double hcalESumDepth2BehindClusters(const std::vector< CaloTowerDetId > &towers)
std::vector< CaloTowerDetId > hcalTowersBehindClusters(const reco::SuperCluster &sc)
void checkSetup(const edm::EventSetup &)
const Configuration cfg_
double hcalESumDepth1BehindClusters(const std::vector< CaloTowerDetId > &towers)
#define nullptr
bool hasActiveHcal(const reco::SuperCluster &sc) const
return((rh^lh)&mask)
void setTowerCollection(const CaloTowerCollection *towercollection)
ElectronHcalHelper(const Configuration &)
double getDepth1HcalESum(const reco::SuperCluster &sc) const
edm::ESHandle< CaloGeometry > caloGeom_
double hcalESumDepth2(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0)
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
T const * product() const
Definition: Handle.h:81
EgammaHcalIsolation * hcalIso_
double getHcalESum(const reco::Candidate *c) 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:63
double hcalESumDepth1(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0)
EgammaHadTower * hadTower_
edm::EDGetTokenT< CaloTowerCollection > hcalTowers
double getHcalESumDepth1(const reco::Candidate *c) const
EgammaTowerIsolation * towerIso2_