CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Classes | Public Member Functions | Public Attributes | Static Public Attributes
EgammaTowerIsolationNew< NC > Class Template Reference

#include <EgammaTowerIsolation.h>

Classes

struct  Sum
 

Public Member Functions

void compute (bool et, Sum &sum, reco::Candidate const &cand, CaloTowerDetId const *first, CaloTowerDetId const *last) const
 
void compute (bool et, Sum &sum, reco::SuperCluster const &sc, CaloTowerDetId const *first, CaloTowerDetId const *last) const
 
 EgammaTowerIsolationNew ()
 
 EgammaTowerIsolationNew (float extRadius[NC], float intRadius[NC], CaloTowerCollection const &towers)
 
void initSoa ()
 
void setRadius (float const extRadius[NC], float const intRadius[NC])
 
 ~EgammaTowerIsolationNew ()
 

Public Attributes

float * eta
 
float extRadius2_ [NCuts]
 
float * h2
 
float * he
 
uint32_t * id
 
float intRadius2_ [NCuts]
 
float maxEta
 
uint32_t * mem = 0
 
const uint32_t nt
 
float * phi
 
float * st
 

Static Public Attributes

static unsigned int NCuts = NC
 

Detailed Description

template<unsigned int NC>
class EgammaTowerIsolationNew< NC >

Definition at line 40 of file EgammaTowerIsolation.h.

Constructor & Destructor Documentation

template<unsigned int NC>
EgammaTowerIsolationNew< NC >::EgammaTowerIsolationNew ( )
inline

Definition at line 57 of file EgammaTowerIsolation.h.

57 : nt(0){}
template<unsigned int NC>
EgammaTowerIsolationNew< NC >::EgammaTowerIsolationNew ( float  extRadius[NC],
float  intRadius[NC],
CaloTowerCollection const &  towers 
)
inline

Definition at line 120 of file EgammaTowerIsolation.h.

References prof2calltree::count, alignCSCRings::e, EgammaTowerIsolationNew< NC >::eta, EgammaTowerIsolationNew< NC >::extRadius2_, EgammaTowerIsolationNew< NC >::h2, EgammaTowerIsolationNew< NC >::he, i, cmsHarvester::index, EgammaTowerIsolationNew< NC >::initSoa(), EgammaTowerIsolationNew< NC >::intRadius2_, j, gen::k, EgammaTowerIsolationNew< NC >::NCuts, EgammaTowerIsolationNew< NC >::nt, EgammaTowerIsolationNew< NC >::phi, and EgammaTowerIsolationNew< NC >::st.

122  :
123  maxEta(*std::max_element(extRadius,extRadius+NC)),
124  nt(towers.size()) {
125  if (nt==0) return;
126  initSoa();
127 
128 #ifdef ETISTATDEBUG
129  etiStat::Count::count.create++;
130 #endif
131 
132  for (std::size_t i=0; i!=NCuts; ++i) {
133  extRadius2_[i]=extRadius[i]*extRadius[i];
134  intRadius2_[i]=intRadius[i]*intRadius[i];
135  }
136 
137  // sort in eta (kd-tree anoverkill,does not vectorize...)
138  uint32_t index[nt];
139  float e[nt];
140  for (std::size_t k=0; k!=nt; ++k) {
141  e[k]=towers[k].eta();
142  index[k]=k;
143  std::push_heap(index,index+k+1,[&e](uint32_t i, uint32_t j){ return e[i]<e[j];});
144  }
145  std::sort_heap(index,index+nt,[&e](uint32_t i, uint32_t j){ return e[i]<e[j];});
146 
147 
148  for (std::size_t i=0;i!=nt; ++i) {
149  auto j = index[i];
150  eta[i]=towers[j].eta();
151  phi[i]=towers[j].phi();
152  id[i]=towers[j].id();
153  st[i] = 1.f/std::cosh(eta[i]); // std::sin(towers[j].theta()); //;
154  he[i] = towers[j].hadEnergy();
155  h2[i] = towers[j].hadEnergyHeOuterLayer();
156  }
157 }
int i
Definition: DBlmapReader.cc:9
int j
Definition: DBlmapReader.cc:9
static unsigned int NCuts
int k[5][pyjets_maxn]
template<unsigned int NC>
EgammaTowerIsolationNew< NC >::~EgammaTowerIsolationNew ( )
inline

Definition at line 63 of file EgammaTowerIsolation.h.

63 { delete[] mem;}

Member Function Documentation

template<unsigned int NC>
void EgammaTowerIsolationNew< NC >::compute ( bool  et,
Sum sum,
reco::Candidate const &  cand,
CaloTowerDetId const *  first,
CaloTowerDetId const *  last 
) const
inline

Definition at line 65 of file EgammaTowerIsolation.h.

Referenced by EgammaTowerIsolationNew< 1 >::compute(), and EgammaTowerIsolation::getSum().

65  {
66  reco::SuperCluster const & sc = *cand.get<reco::SuperClusterRef>().get();
67  return compute(et,sum,sc,first,last);
68  }
bool first
Definition: L1TdeRCT.cc:75
void compute(bool et, Sum &sum, reco::Candidate const &cand, CaloTowerDetId const *first, CaloTowerDetId const *last) const
template<unsigned int NC>
void EgammaTowerIsolationNew< NC >::compute ( bool  et,
Sum sum,
reco::SuperCluster const &  sc,
CaloTowerDetId const *  first,
CaloTowerDetId const *  last 
) const
inline

Definition at line 163 of file EgammaTowerIsolation.h.

References prof2calltree::count, reco::deltaR2(), reco::CaloCluster::eta(), eta(), spr::find(), EgammaTowerIsolationNew< NC >::Sum::h2, EgammaTowerIsolationNew< NC >::Sum::h2BC, EgammaTowerIsolationNew< NC >::Sum::he, EgammaTowerIsolationNew< NC >::Sum::heBC, i, j, prof2calltree::last, maxEta, min(), nt, convertSQLiteXML::ok, phi, reco::CaloCluster::phi(), and groupFilesInBlocks::tt.

163  {
164  if (nt==0) return;
165 
166 #ifdef ETISTATDEBUG
167  etiStat::Count::count.comp++;
168 #endif
169 
170  float candEta = sc.eta();
171  float candPhi = sc.phi();
172 
173 
174  auto lb = std::lower_bound(eta,eta+nt,candEta-maxEta);
175  auto ub = std::upper_bound(lb,eta+nt,candEta+maxEta);
176  uint32_t il = lb-eta;
177  uint32_t iu = std::min(nt,uint32_t(ub-eta+1));
178 
179 #ifdef ETISTATDEBUG
180  etiStat::Count::count.span += (iu-il);
181 #endif
182 
183  bool ok[iu-il];
184  for (std::size_t i=il;i!=iu; ++i)
185  ok[i-il] = (std::find(first,last,id[i])==last);
186 
187 
188 
189  // should be restricted in eta....
190  for (std::size_t i=il;i!=iu; ++i) {
191  float dr2 = reco::deltaR2(candEta,candPhi,eta[i], phi[i]);
192  float tt = et ? st[i] : 1.f;
193  for (std::size_t j=0; j!=NCuts; ++j) {
194  if (dr2<extRadius2_[j]) {
195  if (dr2>=intRadius2_[j]) {
196  sum.he[j] +=he[i]*tt;
197  sum.h2[j] +=h2[i]*tt;
198  }
199  if(ok[i-il]) {
200  sum.heBC[j] +=he[i]*tt;
201  sum.h2BC[j] +=h2[i]*tt;
202  }
203  }
204  }
205  }
206 }
int i
Definition: DBlmapReader.cc:9
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
Definition: FindCaloHit.cc:7
int j
Definition: DBlmapReader.cc:9
double deltaR2(const T1 &t1, const T2 &t2)
Definition: deltaR.h:36
static unsigned int NCuts
T min(T a, T b)
Definition: MathUtil.h:58
bool first
Definition: L1TdeRCT.cc:75
template<unsigned int NC>
void EgammaTowerIsolationNew< NC >::initSoa ( )
inline

Definition at line 94 of file EgammaTowerIsolation.h.

Referenced by EgammaTowerIsolationNew< NC >::EgammaTowerIsolationNew().

94  {
95  mem = new uint32_t[nt*6];
96  eta = (float*)(mem); phi = eta+nt; he = phi+nt; h2 = he+nt; st = h2+nt;
97  id = (uint32_t*)(st) + nt;
98  }
template<unsigned int NC>
void EgammaTowerIsolationNew< NC >::setRadius ( float const  extRadius[NC],
float const  intRadius[NC] 
)
inline

Definition at line 71 of file EgammaTowerIsolation.h.

Referenced by EgammaTowerIsolation::getSum().

71  {
72  for (std::size_t i=0; i!=NCuts; ++i) {
73  extRadius2_[i]=extRadius[i]*extRadius[i];
74  intRadius2_[i]=intRadius[i]*intRadius[i];
75  }
76  maxEta = *std::max_element(extRadius,extRadius+NC);
77  }
int i
Definition: DBlmapReader.cc:9
static unsigned int NCuts

Member Data Documentation

template<unsigned int NC>
float* EgammaTowerIsolationNew< NC >::eta
template<unsigned int NC>
float EgammaTowerIsolationNew< NC >::extRadius2_[NCuts]
template<unsigned int NC>
float* EgammaTowerIsolationNew< NC >::h2
template<unsigned int NC>
float* EgammaTowerIsolationNew< NC >::he
template<unsigned int NC>
uint32_t* EgammaTowerIsolationNew< NC >::id

Definition at line 92 of file EgammaTowerIsolation.h.

template<unsigned int NC>
float EgammaTowerIsolationNew< NC >::intRadius2_[NCuts]
template<unsigned int NC>
float EgammaTowerIsolationNew< NC >::maxEta

Definition at line 84 of file EgammaTowerIsolation.h.

Referenced by EgammaTowerIsolationNew< 1 >::setRadius().

template<unsigned int NC>
uint32_t* EgammaTowerIsolationNew< NC >::mem = 0
template<unsigned int NC>
unsigned int EgammaTowerIsolationNew< NC >::NCuts = NC
static
template<unsigned int NC>
const uint32_t EgammaTowerIsolationNew< NC >::nt
template<unsigned int NC>
float* EgammaTowerIsolationNew< NC >::phi
template<unsigned int NC>
float* EgammaTowerIsolationNew< NC >::st