CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ElectronHcalHelper.cc
Go to the documentation of this file.
1 
8 
9 using namespace reco ;
10 
12  : cfg_(cfg), caloGeomCacheId_(0), hbhe_(0), mhbhe_(0), hcalIso_(0), towersH_(0), towerIso1_(0), towerIso2_(0),hadTower_(0)
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_ = 0 ;
46  delete towerIso2_ ; towerIso2_ = 0 ;
47  delete towersH_ ; towersH_ = 0 ;
48 
51  { edm::LogError("ElectronHcalHelper::readEvent")<<"failed to get the hcal towers of label "<<cfg_.hcalTowers ; }
55  }
56  else
57  {
58  delete hcalIso_ ; hcalIso_ = 0 ;
59  delete mhbhe_ ; mhbhe_ = 0 ;
60  delete hbhe_ ; hbhe_ = 0 ;
61 
63  if (!evt.getByLabel(cfg_.hcalRecHits,*hbhe_))
64  { edm::LogError("ElectronHcalHelper::readEvent")<<"failed to get the rechits of label "<<cfg_.hcalRecHits ; }
67  }
68  }
69 
70 std::vector<CaloTowerDetId> ElectronHcalHelper::hcalTowersBehindClusters( const reco::SuperCluster & sc )
71  { return hadTower_->towersOf(sc) ; }
72 
73 double ElectronHcalHelper::hcalESumDepth1BehindClusters( const std::vector<CaloTowerDetId> & towers )
74  { return hadTower_->getDepth1HcalESum(towers) ; }
75 
76 double ElectronHcalHelper::hcalESumDepth2BehindClusters( const std::vector<CaloTowerDetId> & towers )
77  { return hadTower_->getDepth2HcalESum(towers) ; }
78 
79 double ElectronHcalHelper::hcalESum( const SuperCluster & sc, const std::vector<CaloTowerDetId > * excludeTowers )
80  {
81  if (cfg_.hOverEConeSize==0)
82  { return 0 ; }
83  if (cfg_.useTowers)
84  { return(hcalESumDepth1(sc,excludeTowers)+hcalESumDepth2(sc,excludeTowers)) ; }
85  else
86  { return hcalIso_->getHcalESum(&sc) ; }
87  }
88 
89 double ElectronHcalHelper::hcalESumDepth1( const SuperCluster & sc ,const std::vector<CaloTowerDetId > * excludeTowers )
90  {
91  if (cfg_.hOverEConeSize==0)
92  { return 0 ; }
93  if (cfg_.useTowers)
94  { return towerIso1_->getTowerESum(&sc, excludeTowers) ; }
95  else
96  { return hcalIso_->getHcalESumDepth1(&sc) ; }
97  }
98 
99 double ElectronHcalHelper::hcalESumDepth2( const SuperCluster & sc ,const std::vector<CaloTowerDetId > * excludeTowers )
100  {
101  if (cfg_.hOverEConeSize==0)
102  { return 0 ; }
103  if (cfg_.useTowers)
104  { return towerIso2_->getTowerESum(&sc, excludeTowers) ; }
105  else
106  { return hcalIso_->getHcalESumDepth2(&sc) ; }
107  }
108 
110  {
111  if (cfg_.hOverEConeSize==0)
112  { return ; }
113  if (cfg_.useTowers)
114  {
115  delete towerIso1_ ;
116  delete towerIso2_ ;
117  delete towersH_ ;
118  delete hadTower_;
119  }
120  else
121  {
122  delete hcalIso_ ;
123  delete mhbhe_ ;
124  delete hbhe_ ;
125  }
126  }
127 
128 
EgammaTowerIsolation * towerIso1_
double hcalESum(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0)
void readEvent(const edm::Event &)
edm::Handle< HBHERecHitCollection > * hbhe_
edm::Handle< CaloTowerCollection > * towersH_
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)
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)
double getHcalESumDepth2(const reco::Candidate *c) const
SimpleCaloRecHitMetaCollection< HBHERecHitCollection > HBHERecHitMetaCollection
unsigned long long caloGeomCacheId_
double getTowerESum(const reco::Candidate *cand, const std::vector< CaloTowerDetId > *detIdToExclude=0) const
bool getByLabel(InputTag const &tag, Handle< PROD > &result) const
Definition: Event.h:361
const T & get() const
Definition: EventSetup.h:55
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
HBHERecHitMetaCollection * mhbhe_
double hcalESumDepth1(const reco::SuperCluster &, const std::vector< CaloTowerDetId > *excludeTowers=0)
EgammaHadTower * hadTower_
double getHcalESumDepth1(const reco::Candidate *c) const
EgammaTowerIsolation * towerIso2_