CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HcalGeometry.cc
Go to the documentation of this file.
4 #include <algorithm>
5 
6 #include <Math/Transform3D.h>
7 #include <Math/EulerAngles.h>
8 
13 
15  theTopology( topology ) {
16  init();
17 }
18 
20 
22  edm::LogInfo("HcalGeometry") << "HcalGeometry::init() "
23  << " HBSize " << theTopology.getHBSize()
24  << " HESize " << theTopology.getHESize()
25  << " HOSize " << theTopology.getHOSize()
26  << " HFSize " << theTopology.getHFSize();
27 
32 }
33 
35  if(!m_emptyIds.isSet()) {
36  std::unique_ptr<std::vector<DetId>> p_hbIds{new std::vector<DetId>};
37  std::unique_ptr<std::vector<DetId>> p_heIds{new std::vector<DetId>};
38  std::unique_ptr<std::vector<DetId>> p_hoIds{new std::vector<DetId>};
39  std::unique_ptr<std::vector<DetId>> p_hfIds{new std::vector<DetId>};
40  std::unique_ptr<std::vector<DetId>> p_emptyIds{new std::vector<DetId>};
41 
42  const std::vector<DetId>& baseIds (CaloSubdetectorGeometry::getValidDetIds());
43  for (unsigned int i ( 0 ) ; i != baseIds.size() ; ++i) {
44  const DetId id ( baseIds[i] );
45  if (id.subdetId() == HcalBarrel) {
46  p_hbIds->push_back( id ) ;
47  } else if (id.subdetId() == HcalEndcap) {
48  p_heIds->push_back( id ) ;
49  } else if (id.subdetId() == HcalOuter) {
50  p_hoIds->push_back( id ) ;
51  } else if (id.subdetId() == HcalForward) {
52  p_hfIds->push_back( id ) ;
53  }
54  }
55  std::sort( p_hbIds->begin(), p_hbIds->end() ) ;
56  std::sort( p_heIds->begin(), p_heIds->end() ) ;
57  std::sort( p_hoIds->begin(), p_hoIds->end() ) ;
58  std::sort( p_hfIds->begin(), p_hfIds->end() ) ;
59  p_emptyIds->resize( 0 ) ;
60 
61  m_hbIds.set(std::move(p_hbIds));
62  m_heIds.set(std::move(p_heIds));
63  m_hoIds.set(std::move(p_hoIds));
64  m_hfIds.set(std::move(p_hfIds));
65  m_emptyIds.set(std::move(p_emptyIds));
66  }
67 }
68 
69 const std::vector<DetId>&
71  int subdet ) const {
72  if( 0 != subdet && !m_hbIds.isSet() ) fillDetIds() ;
73  return ( 0 == subdet ? CaloSubdetectorGeometry::getValidDetIds() :
74  ( HcalBarrel == subdet ? *m_hbIds.load() :
75  ( HcalEndcap == subdet ? *m_heIds.load() :
76  ( HcalOuter == subdet ? *m_hoIds.load() :
77  ( HcalForward == subdet ? *m_hfIds.load() : *m_emptyIds.load() ) ) ) ) ) ;
78 }
79 
81 
82  // Now find the closest eta_bin, eta value of a bin i is average
83  // of eta[i] and eta[i-1]
84  static const double z_long=1100.0;
85  double abseta = fabs(r.eta());
86  double absz = fabs(r.z());
87 
88  // figure out subdetector, giving preference to HE in HE/HF overlap region
90  if (abseta <= theTopology.etaMax(HcalBarrel) ) {
91  bc = HcalBarrel;
92  } else if (absz >= z_long) {
93  bc = HcalForward;
94  } else if (theTopology.etaMax(HcalEndcap) ) {
95  bc = HcalEndcap;
96  } else {
97  bc = HcalForward;
98  }
99 
100  // find eta bin
101  int etaring = etaRing(bc, abseta);
102 
103  int phibin = phiBin(bc, etaring, r.phi());
104 
105  // add a sign to the etaring
106  int etabin = (r.z() > 0) ? etaring : -etaring;
107 
108  if (bc == HcalForward) {
109  static const double z_short=1137.0;
110  // Next line is premature depth 1 and 2 can coexist for large z-extent
111  // HcalDetId bestId(bc,etabin,phibin,((fabs(r.z())>=z_short)?(2):(1)));
112  // above line is no good with finite precision
113  HcalDetId bestId(bc,etabin,phibin,((fabs(r.z()) - z_short >-0.1)?(2):(1)));
114  return bestId;
115  } else {
116 
117  //Now do depth if required
118  int dbin = 1;
119  double pointrz=0, drz=99999.;
120  HcalDetId currentId(bc, etabin, phibin, dbin);
121  if (bc == HcalBarrel) pointrz = r.mag();
122  else pointrz = std::abs(r.z());
123  HcalDetId bestId;
124  for ( ; currentId != HcalDetId(); theTopology.incrementDepth(currentId)) {
125  const CaloCellGeometry * cell = getGeometry(currentId);
126  if (cell == 0) {
127  assert (bestId != HcalDetId());
128  break;
129  } else {
130  double rz;
131  if (bc == HcalEndcap) rz = std::abs(cell->getPosition().z());
132  else rz = cell->getPosition().mag();
133  if (std::abs(pointrz-rz)<drz) {
134  bestId = currentId;
135  drz = std::abs(pointrz-rz);
136  }
137  }
138  }
139 
140  return bestId;
141  }
142 }
143 
144 
145 int HcalGeometry::etaRing(HcalSubdetector bc, double abseta) const {
146  return theTopology.etaRing(bc, abseta);
147 }
148 
149 int HcalGeometry::phiBin(HcalSubdetector bc, int etaring, double phi) const {
150  return theTopology.phiBin(bc, etaring, phi);
151 }
152 
154  double dR ) const {
155  CaloSubdetectorGeometry::DetIdSet dis; // this is the return object
156 
157  if (0.000001 < dR) {
158  if (dR > M_PI/2.) {// this version needs "small" dR
159  dis = CaloSubdetectorGeometry::getCells(r, dR); // base class version
160  } else {
161  const double dR2 ( dR*dR ) ;
162  const double reta ( r.eta() ) ;
163  const double rphi ( r.phi() ) ;
164  const double lowEta ( reta - dR ) ;
165  const double highEta ( reta + dR ) ;
166  const double lowPhi ( rphi - dR ) ;
167  const double highPhi ( rphi + dR ) ;
168 
169  const double hfEtaHi (theTopology.etaMax(HcalForward));
170 
171  if (highEta > -hfEtaHi &&
172  lowEta < hfEtaHi ) { // in hcal
174 
175  for (unsigned int is ( 0 ) ; is != 4 ; ++is ) {
176  const int sign ( reta>0 ? 1 : -1 ) ;
177  const int ieta_center ( sign*etaRing( hs[is], fabs( reta ) ) ) ;
178  const int ieta_lo ( ( 0 < lowEta*sign ? sign : -sign )*etaRing( hs[is], fabs( lowEta ) ) ) ;
179  const int ieta_hi ( ( 0 < highEta*sign ? sign : -sign )*etaRing( hs[is], fabs( highEta ) ) ) ;
180  const int iphi_lo ( phiBin( hs[is], ieta_center, lowPhi ) ) ;
181  const int iphi_hi ( phiBin( hs[is], ieta_center, highPhi ) ) ;
182  const int jphi_lo ( iphi_lo>iphi_hi ? iphi_lo - 72 : iphi_lo ) ;
183  const int jphi_hi ( iphi_hi ) ;
184 
185  const int idep_lo ( 1 == is ? 4 : 1 ) ;
186  const int idep_hi ( theTopology.maxDepth(hs[is]) );
187  for (int ieta ( ieta_lo ) ; ieta <= ieta_hi ; ++ieta) {// over eta limits
188  if (ieta != 0) {
189  for (int jphi ( jphi_lo ) ; jphi <= jphi_hi ; ++jphi) { // over phi limits
190  const int iphi ( 1 > jphi ? jphi+72 : jphi ) ;
191  for (int idep ( idep_lo ) ; idep <= idep_hi ; ++idep ) {
192  const HcalDetId did ( hs[is], ieta, iphi, idep ) ;
193  if (theTopology.valid(did)) {
194  const CaloCellGeometry* cell ( getGeometry( did ) );
195  if (0 != cell ) {
196  const GlobalPoint& p ( cell->getPosition() ) ;
197  const double eta ( p.eta() ) ;
198  const double phi ( p.phi() ) ;
199  if (reco::deltaR2(eta, phi, reta, rphi ) < dR2) dis.insert( did ) ;
200  }
201  }
202  }
203  }
204  }
205  }
206  }
207  }
208  }
209  }
210  return dis;
211 }
212 
213 
214 
217  const int ieta ( i < numberOfBarrelAlignments()/2 ? -1 : 1 ) ;
218  const int iphi ( 1 + (4*i)%72 ) ;
219  return HcalDetId( HcalBarrel, ieta, iphi, 1 ) ;
220 }
221 
224  const int ieta ( i < numberOfEndcapAlignments()/2 ? -16 : 16 ) ;
225  const int iphi ( 1 + (4*i)%72 ) ;
226  return HcalDetId( HcalEndcap, ieta, iphi, 1 ) ;
227 }
228 
231  const int ieta ( i < numberOfForwardAlignments()/2 ? -29 : 29 ) ;
232  const int iphi ( 1 + (4*i)%72 ) ;
233  return HcalDetId( HcalForward, ieta, iphi, 1 ) ;
234 }
235 
238  const int ring ( i/12 ) ;
239  const int ieta ( 0 == ring ? -11 :
240  1 == ring ? -5 :
241  2 == ring ? 1 :
242  3 == ring ? 5 : 11 ) ;
243  const int iphi ( 1 + ( i - ring*12 )*6 ) ;
244  return HcalDetId( HcalOuter, ieta, iphi, 4 ) ;
245 }
246 
248  assert( i < numberOfAlignments() ) ;
249 
250  const unsigned int nB ( numberOfBarrelAlignments() ) ;
251  const unsigned int nE ( numberOfEndcapAlignments() ) ;
252  const unsigned int nF ( numberOfForwardAlignments() ) ;
253 // const unsigned int nO ( numberOfOuterAlignments() ) ;
254 
255  return ( i < nB ? detIdFromBarrelAlignmentIndex( i ) :
256  i < nB+nE ? detIdFromEndcapAlignmentIndex( i - nB ) :
257  i < nB+nE+nF ? detIdFromForwardAlignmentIndex( i - nB - nE ) :
258  detIdFromOuterAlignmentIndex( i - nB - nE - nF ) ) ;
259 }
260 
262  unsigned int nD) {
263  const HcalDetId hid ( id ) ;
264  const unsigned int iphi ( hid.iphi() ) ;
265  const int ieta ( hid.ieta() ) ;
266  const unsigned int index ( ( 0 < ieta ? nD/2 : 0 ) + ( iphi + 1 )%72/4 ) ;
267  assert( index < nD ) ;
268  return index ;
269 }
270 
273 }
274 
277 }
278 
281 }
282 
284  const HcalDetId hid ( id ) ;
285  const int ieta ( hid.ieta() ) ;
286  const int iphi ( hid.iphi() ) ;
287  const int ring ( ieta < -10 ? 0 :
288  ( ieta < -4 ? 1 :
289  ( ieta < 5 ? 2 :
290  ( ieta < 11 ? 3 : 4 ) ) ) ) ;
291 
292  const unsigned int index ( 12*ring + ( iphi - 1 )/6 ) ;
293  assert( index < numberOfOuterAlignments() ) ;
294  return index ;
295 }
296 
298  assert(id.det() == DetId::Hcal) ;
299 
300  const HcalDetId hid ( id ) ;
301  bool isHB = (hid.subdet() == HcalBarrel);
302  bool isHE = (hid.subdet() == HcalEndcap);
303  bool isHF = (hid.subdet() == HcalForward);
304  // bool isHO = (hid.subdet() == HcalOuter);
305 
306  const unsigned int nB ( numberOfBarrelAlignments() ) ;
307  const unsigned int nE ( numberOfEndcapAlignments() ) ;
308  const unsigned int nF ( numberOfForwardAlignments() ) ;
309  // const unsigned int nO ( numberOfOuterAlignments() ) ;
310 
311  const unsigned int index (isHB ? alignmentBarrelIndexLocal(id) :
312  isHE ? alignmentEndcapIndexLocal(id) + nB :
313  isHF ? alignmentForwardIndexLocal( id ) + nB + nE :
314  alignmentOuterIndexLocal(id) + nB + nE + nF
315  );
316 
317  assert( index < numberOfAlignments() ) ;
318  return index ;
319 }
320 
322  return (unsigned int)DetId::Hcal - 1 ;
323 }
324 
326  const CCGFloat* pv,
327  unsigned int i,
328  Pt3D& ref) {
330 
331  if (hid.subdet() == HcalForward ) {
332  IdealZPrism::localCorners( lc, pv, ref ) ;
333  } else {
334  IdealObliquePrism::localCorners( lc, pv, ref ) ;
335  }
336 }
337 
339  const GlobalPoint& f2 ,
340  const GlobalPoint& f3 ,
341  const CCGFloat* parm ,
342  const DetId& detId) {
343 
344  assert (detId.det()==DetId::Hcal);
345 
346  const HcalDetId hid ( detId ) ;
347  unsigned int din=theTopology.detId2denseId(detId);
348 
349  edm::LogInfo("HcalGeometry") << " newCell subdet "
350  << detId.subdetId() << ", raw ID "
351  << detId.rawId() << ", hid " << hid << ", din "
352  << din << ", index ";
353 
354  if (hid.subdet()==HcalBarrel) {
355  m_hbCellVec[ din ] = IdealObliquePrism( f1, cornersMgr(), parm ) ;
356  } else if (hid.subdet()==HcalEndcap) {
357  const unsigned int index ( din - m_hbCellVec.size() ) ;
358  m_heCellVec[ index ] = IdealObliquePrism( f1, cornersMgr(), parm ) ;
359  } else if (hid.subdet()==HcalOuter) {
360  const unsigned int index ( din
361  - m_hbCellVec.size()
362  - m_heCellVec.size() ) ;
363  m_hoCellVec[ index ] = IdealObliquePrism( f1, cornersMgr(), parm ) ;
364  } else {
365  const unsigned int index ( din
366  - m_hbCellVec.size()
367  - m_heCellVec.size()
368  - m_hoCellVec.size() ) ;
369  m_hfCellVec[ index ] = IdealZPrism( f1, cornersMgr(), parm ) ;
370  }
371 
372  addValidID( detId ) ;
373  m_dins.push_back( din );
374 }
375 
376 const CaloCellGeometry* HcalGeometry::cellGeomPtr( unsigned int din ) const {
377  const CaloCellGeometry* cell ( 0 ) ;
378  if( m_hbCellVec.size() > din ) {
379  cell = &m_hbCellVec[ din ] ;
380  } else {
381  if (m_hbCellVec.size() + m_heCellVec.size() > din) {
382  const unsigned int index (din - m_hbCellVec.size() ) ;
383  cell = &m_heCellVec[ index ] ;
384  } else if (m_hbCellVec.size()+m_heCellVec.size()+m_hoCellVec.size() > din) {
385  const unsigned int index (din - m_hbCellVec.size() - m_heCellVec.size());
386  cell = &m_hoCellVec[ index ] ;
387  } else if (m_hbCellVec.size() + m_heCellVec.size() + m_hoCellVec.size() +
388  m_hfCellVec.size() > din) {
389  const unsigned int index (din - m_hbCellVec.size() - m_heCellVec.size() -
390  m_hoCellVec.size() ) ;
391  cell = &m_hfCellVec[ index ] ;
392  }
393  }
394 
395  return (( 0 == cell || 0 == cell->param()) ? 0 : cell ) ;
396 }
397 
401  CaloSubdetectorGeometry::IVec& dinsVec ) const {
402  tVec.reserve(theTopology.ncells()*numberOfTransformParms() ) ;
403  iVec.reserve( numberOfShapes()==1 ? 1 : theTopology.ncells() ) ;
404  dVec.reserve( numberOfShapes()*numberOfParametersPerShape() ) ;
405  dinsVec.reserve(theTopology.ncells());
406 
407  for (ParVecVec::const_iterator ivv (parVecVec().begin()) ;
408  ivv != parVecVec().end() ; ++ivv) {
409  const ParVec& pv ( *ivv ) ;
410  for (ParVec::const_iterator iv ( pv.begin() ) ; iv != pv.end() ; ++iv) {
411  dVec.push_back( *iv ) ;
412  }
413  }
414 
415  for (unsigned int i ( 0 ) ; i < theTopology.ncells() ; ++i) {
416  Tr3D tr ;
417  const CaloCellGeometry* ptr ( cellGeomPtr( i ) ) ;
418 
419  if (0 != ptr) {
420  dinsVec.push_back( i );
421 
422  ptr->getTransform( tr, ( Pt3DVec* ) 0 ) ;
423 
424  if( Tr3D() == tr ) { // for preshower there is no rotation
425  const GlobalPoint& gp ( ptr->getPosition() ) ;
426  tr = HepGeom::Translate3D( gp.x(), gp.y(), gp.z() ) ;
427  }
428 
429  const CLHEP::Hep3Vector tt ( tr.getTranslation() ) ;
430  tVec.push_back( tt.x() ) ;
431  tVec.push_back( tt.y() ) ;
432  tVec.push_back( tt.z() ) ;
433  if (6 == numberOfTransformParms()) {
434  const CLHEP::HepRotation rr ( tr.getRotation() ) ;
435  const ROOT::Math::Transform3D rtr (rr.xx(), rr.xy(), rr.xz(), tt.x(),
436  rr.yx(), rr.yy(), rr.yz(), tt.y(),
437  rr.zx(), rr.zy(), rr.zz(), tt.z());
439  rtr.GetRotation( ea ) ;
440  tVec.push_back( ea.Phi() ) ;
441  tVec.push_back( ea.Theta() ) ;
442  tVec.push_back( ea.Psi() ) ;
443  }
444 
445  const CCGFloat* par ( ptr->param() ) ;
446 
447  unsigned int ishape ( 9999 ) ;
448  for( unsigned int ivv ( 0 ) ; ivv != parVecVec().size() ; ++ivv ) {
449  bool ok ( true ) ;
450  const CCGFloat* pv ( &(*parVecVec()[ivv].begin() ) ) ;
451  for( unsigned int k ( 0 ) ; k != numberOfParametersPerShape() ; ++k ) {
452  ok = ok && ( fabs( par[k] - pv[k] ) < 1.e-6 ) ;
453  }
454  if( ok ) {
455  ishape = ivv ;
456  break ;
457  }
458  }
459  assert( 9999 != ishape ) ;
460 
461  const unsigned int nn (( numberOfShapes()==1) ? (unsigned int)1 : m_dins.size() ) ;
462  if( iVec.size() < nn ) iVec.push_back( ishape ) ;
463  }
464  }
465 }
static unsigned int numberOfBarrelAlignments()
Definition: HcalGeometry.h:56
unsigned int getHFSize() const
Definition: HcalTopology.h:124
virtual void newCell(const GlobalPoint &f1, const GlobalPoint &f2, const GlobalPoint &f3, const CCGFloat *parm, const DetId &detId)
int i
Definition: DBlmapReader.cc:9
virtual DetId getClosestCell(const GlobalPoint &r) const
Definition: HcalGeometry.cc:80
static unsigned int alignmentTransformIndexLocal(const DetId &id)
virtual unsigned int detId2denseId(const DetId &id) const
return a linear packed id
std::vector< CCGFloat > DimVec
unsigned int getHOSize() const
Definition: HcalTopology.h:123
edm::AtomicPtrCache< std::vector< DetId > > m_heIds
Definition: HcalGeometry.h:127
static unsigned int alignmentEndcapIndexLocal(const DetId &id)
HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:45
int phiBin(HcalSubdetector subdet, int etaRing, double phi) const
virtual void getSummary(CaloSubdetectorGeometry::TrVec &trVector, CaloSubdetectorGeometry::IVec &iVector, CaloSubdetectorGeometry::DimVec &dimVector, CaloSubdetectorGeometry::IVec &dinsVector) const
CaloTopology const * topology(0)
static DetId detIdFromOuterAlignmentIndex(unsigned int i)
double sign(double x)
assert(m_qm.get())
Geom::Phi< T > phi() const
Definition: PV3DBase.h:69
std::vector< unsigned int > IVec
edm::AtomicPtrCache< std::vector< DetId > > m_emptyIds
Definition: HcalGeometry.h:130
std::vector< CCGFloat > TrVec
const_iterator begin() const
Definition: EZArrayFL.h:63
virtual const CaloCellGeometry * getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
Definition: HcalGeometry.h:99
HepGeom::Transform3D Tr3D
std::vector< IdealObliquePrism > HECellVec
Definition: HcalGeometry.h:19
std::vector< Pt3D > Pt3DVec
bool isHE(int etabin, int depth)
CaloCellGeometry::CCGFloat CCGFloat
bool isSet() const
virtual unsigned int numberOfParametersPerShape() const
Definition: HcalGeometry.h:38
virtual const std::vector< DetId > & getValidDetIds(DetId::Detector det=DetId::Detector(0), int subdet=0) const
Get a list of valid detector ids (for the given subdetector)
Definition: HcalGeometry.cc:70
virtual CaloSubdetectorGeometry::DetIdSet getCells(const GlobalPoint &r, double dR) const
Get a list of all cells within a dR of the given cell.
virtual const std::vector< DetId > & getValidDetIds(DetId::Detector det=DetId::Detector(0), int subdet=0) const
Get a list of valid detector ids (for the given subdetector)
const HcalTopology & theTopology
Definition: HcalGeometry.h:124
uint32_t rawId() const
get the raw id
Definition: DetId.h:43
CaloCellGeometry::Pt3DVec Pt3DVec
Definition: HcalGeometry.h:25
virtual DetIdSet getCells(const GlobalPoint &r, double dR) const
Get a list of all cells within a dR of the given cell.
const CCGFloat * param() const
T mag() const
Definition: PV3DBase.h:67
HBCellVec m_hbCellVec
Definition: HcalGeometry.h:133
HOCellVec m_hoCellVec
Definition: HcalGeometry.h:135
static void localCorners(Pt3DVec &vec, const CCGFloat *pv, Pt3D &ref)
HFCellVec m_hfCellVec
Definition: HcalGeometry.h:136
virtual void getTransform(Tr3D &tr, Pt3DVec *lptr) const
--------— only needed by specific utility; overloaded when needed -—
std::vector< IdealObliquePrism > HOCellVec
Definition: HcalGeometry.h:20
static unsigned int numberOfOuterAlignments()
Definition: HcalGeometry.h:62
int maxDepth(HcalSubdetector subdet) const
int etaRing(HcalSubdetector subdet, double eta) const
eta and phi index from eta, phi values
T z() const
Definition: PV3DBase.h:64
int ieta() const
get the cell ieta
Definition: HcalDetId.h:51
static DetId detIdFromForwardAlignmentIndex(unsigned int i)
static unsigned int alignmentTransformIndexGlobal(const DetId &id)
static unsigned int alignmentBarrelIndexLocal(const DetId &id)
HcalSubdetector
Definition: HcalAssistant.h:31
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
CaloCellGeometry::CCGFloat CCGFloat
static DetId detIdFromBarrelAlignmentIndex(unsigned int i)
double deltaR2(const T1 &t1, const T2 &t2)
Definition: deltaR.h:36
virtual DetId denseId2detId(unsigned int) const
return a linear packed id
int phiBin(HcalSubdetector bc, int etaring, double phi) const
bool isHB(int etabin, int depth)
static DetId detIdFromLocalAlignmentIndex(unsigned int i)
int etaRing(HcalSubdetector bc, double abseta) const
helper methods for getClosestCell
CaloSubdetectorGeometry::IVec m_dins
Definition: HcalGeometry.h:131
HcalGeometry(const HcalTopology &topology)
Definition: HcalGeometry.cc:14
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
#define M_PI
void localCorners(Pt3DVec &lc, const CCGFloat *pv, unsigned int i, Pt3D &ref)
static unsigned int alignmentOuterIndexLocal(const DetId &id)
CaloCellGeometry::Pt3D Pt3D
std::vector< IdealZPrism > HFCellVec
Definition: HcalGeometry.h:21
int iphi() const
get the cell iphi
Definition: HcalDetId.h:53
Definition: DetId.h:18
bool incrementDepth(HcalDetId &id) const
static unsigned int numberOfEndcapAlignments()
Definition: HcalGeometry.h:58
AlgebraicVector EulerAngles
Definition: Definitions.h:36
bool isHF(int etabin, int depth)
void addValidID(const DetId &id)
bool set(std::unique_ptr< T > iNewValue) const
virtual ~HcalGeometry()
The HcalGeometry will delete all its cell geometries at destruction time.
Definition: HcalGeometry.cc:19
CaloCellGeometry::CornersMgr * cornersMgr()
Detector
Definition: DetId.h:24
static void localCorners(Pt3DVec &vec, const CCGFloat *pv, Pt3D &ref)
Definition: IdealZPrism.cc:103
CaloCellGeometry::Pt3DVec Pt3DVec
HepGeom::Point3D< CCGFloat > Pt3D
virtual bool valid(const DetId &id) const
std::vector< IdealObliquePrism > HBCellVec
Definition: HcalGeometry.h:18
virtual const CaloCellGeometry * cellGeomPtr(unsigned int index) const
Geom::Phi< T > phi() const
unsigned int getHESize() const
Definition: HcalTopology.h:122
HECellVec m_heCellVec
Definition: HcalGeometry.h:134
CaloCellGeometry::Tr3D Tr3D
T eta() const
Definition: PV3DBase.h:76
MgrType::const_iterator const_iterator
Definition: EZArrayFL.h:27
virtual unsigned int numberOfShapes() const
Definition: HcalGeometry.h:37
edm::AtomicPtrCache< std::vector< DetId > > m_hfIds
Definition: HcalGeometry.h:129
#define begin
Definition: vmac.h:30
const_iterator end() const
Definition: EZArrayFL.h:64
void fillDetIds() const
Definition: HcalGeometry.cc:34
static unsigned int numberOfForwardAlignments()
Definition: HcalGeometry.h:60
static unsigned int alignmentForwardIndexLocal(const DetId &id)
static DetId detIdFromEndcapAlignmentIndex(unsigned int i)
static unsigned int alignmentBarEndForIndexLocal(const DetId &id, unsigned int nD)
virtual unsigned int numberOfTransformParms() const
edm::AtomicPtrCache< std::vector< DetId > > m_hoIds
Definition: HcalGeometry.h:128
CaloCellGeometry::Pt3D Pt3D
Definition: HcalGeometry.h:24
Detector det() const
get the detector field from this detid
Definition: DetId.h:35
unsigned int getHBSize() const
Definition: HcalTopology.h:121
const GlobalPoint & getPosition() const
Returns the position of reference for this cell.
T const * load() const
edm::AtomicPtrCache< std::vector< DetId > > m_hbIds
Definition: HcalGeometry.h:126
static unsigned int numberOfAlignments()
Definition: HcalGeometry.h:66
virtual unsigned int ncells() const
return a count of valid cells (for dense indexing use)
double etaMax(HcalSubdetector subdet) const