CMS 3D CMS Logo

RecHitTools.cc
Go to the documentation of this file.
2 
12 
14 
17 
18 using namespace hgcal;
19 
20 namespace {
21  template <typename DDD>
22  inline void check_ddd(const DDD* ddd) {
23  if (nullptr == ddd) {
24  throw cms::Exception("hgcal::RecHitTools") << "DDDConstants not accessibl to hgcal::RecHitTools!";
25  }
26  }
27 
28  template <typename GEOM>
29  inline void check_geom(const GEOM* geom) {
30  if (nullptr == geom) {
31  throw cms::Exception("hgcal::RecHitTools") << "Geometry not provided yet to hgcal::RecHitTools!";
32  }
33  }
34 
35  inline const HGCalDDDConstants* get_ddd(const CaloSubdetectorGeometry* geom, const HGCalDetId& detid) {
36  const HGCalGeometry* hg = static_cast<const HGCalGeometry*>(geom);
37  const HGCalDDDConstants* ddd = &(hg->topology().dddConstants());
38  check_ddd(ddd);
39  return ddd;
40  }
41 
42  inline const HGCalDDDConstants* get_ddd(const CaloSubdetectorGeometry* geom, const HGCSiliconDetId& detid) {
43  const HGCalGeometry* hg = static_cast<const HGCalGeometry*>(geom);
44  const HGCalDDDConstants* ddd = &(hg->topology().dddConstants());
45  check_ddd(ddd);
46  return ddd;
47  }
48 
49  inline const HGCalDDDConstants* get_ddd(const CaloSubdetectorGeometry* geom, const HFNoseDetId& detid) {
50  const HGCalGeometry* hg = static_cast<const HGCalGeometry*>(geom);
51  const HGCalDDDConstants* ddd = &(hg->topology().dddConstants());
52  check_ddd(ddd);
53  return ddd;
54  }
55 
56  inline const HGCalDDDConstants* get_ddd(const CaloGeometry* geom, int type, int maxLayerEE, int layer) {
57  DetId::Detector det = ((type == 0) ? DetId::Forward : ((layer > maxLayerEE) ? DetId::HGCalHSi : DetId::HGCalEE));
58  int subdet = ((type != 0) ? ForwardSubdetector::ForwardEmpty
60  const HGCalGeometry* hg = static_cast<const HGCalGeometry*>(geom->getSubdetectorGeometry(det, subdet));
61  const HGCalDDDConstants* ddd = &(hg->topology().dddConstants());
62  check_ddd(ddd);
63  return ddd;
64  }
65 
66 } // namespace
67 
69  geom_ = &geom;
70  unsigned int wmaxEE(0), wmaxFH(0);
71  auto geomEE = static_cast<const HGCalGeometry*>(
73  //check if it's the new geometry
74  if (geomEE) {
75  geometryType_ = 1;
76  eeOffset_ = (geomEE->topology().dddConstants()).getLayerOffset();
77  wmaxEE = (geomEE->topology().dddConstants()).waferCount(0);
78  auto geomFH = static_cast<const HGCalGeometry*>(
80  fhOffset_ = (geomFH->topology().dddConstants()).getLayerOffset();
81  wmaxFH = (geomFH->topology().dddConstants()).waferCount(0);
82  fhLastLayer_ = fhOffset_ + (geomFH->topology().dddConstants()).lastLayer(true);
83  auto geomBH = static_cast<const HGCalGeometry*>(
85  bhOffset_ = (geomBH->topology().dddConstants()).getLayerOffset();
86  bhFirstLayer_ = bhOffset_ + (geomBH->topology().dddConstants()).firstLayer();
87  bhLastLayer_ = bhOffset_ + (geomBH->topology().dddConstants()).lastLayer(true);
88  bhMaxIphi_ = geomBH->topology().dddConstants().maxCells(true);
89  } else {
90  geometryType_ = 0;
91  geomEE =
93  eeOffset_ = (geomEE->topology().dddConstants()).getLayerOffset();
94  wmaxEE = 1 + (geomEE->topology().dddConstants()).waferMax();
95  auto geomFH =
97  fhOffset_ = (geomFH->topology().dddConstants()).getLayerOffset();
98  fhLastLayer_ = fhOffset_ + (geomFH->topology().dddConstants()).layers(true);
100  bhFirstLayer_ = bhOffset_ + 1;
101  wmaxFH = 1 + (geomFH->topology().dddConstants()).waferMax();
102  auto geomBH =
104  bhLastLayer_ = bhOffset_ + (geomBH->topology().dddConstants())->getMaxDepth(1);
105  }
106  maxNumberOfWafersPerLayer_ = std::max(wmaxEE, wmaxFH);
107  // For nose geometry
108  auto geomNose =
110  if (geomNose) {
111  maxNumberOfWafersNose_ = (geomNose->topology().dddConstants()).waferCount(0);
112  noseLastLayer_ = (geomNose->topology().dddConstants()).layers(true);
113  } else {
115  noseLastLayer_ = 0;
116  }
117 }
118 
120  DetId::Detector det = id.det();
121  int subdet = (det == DetId::HGCalEE || det == DetId::HGCalHSi || det == DetId::HGCalHSc)
123  : id.subdetId();
124  auto geom = geom_->getSubdetectorGeometry(det, subdet);
125  check_geom(geom);
126  return geom;
127 }
128 
130  auto geom = getSubdetectorGeometry(id);
132  if (id.det() == DetId::Hcal) {
133  position = geom->getGeometry(id)->getPosition();
134  } else {
135  auto hg = static_cast<const HGCalGeometry*>(geom);
136  position = hg->getPosition(id);
137  }
138  return position;
139 }
140 
142  unsigned int lay = std::abs(layer);
143  double z(0);
144  if (nose) {
145  auto geomNose =
147  if (geomNose) {
148  const HGCalDDDConstants* ddd = &(geomNose->topology().dddConstants());
149  if (ddd)
150  z = (layer > 0) ? ddd->waferZ(lay, true) : -ddd->waferZ(lay, true);
151  }
152  } else {
153  const HGCalDDDConstants* ddd = get_ddd(geom_, geometryType_, fhOffset_, lay);
154  if (geometryType_ == 1) {
155  if (lay > fhOffset_)
156  lay -= fhOffset_;
157  }
158  z = (layer > 0) ? ddd->waferZ(lay, true) : -ddd->waferZ(lay, true);
159  }
160  return GlobalPoint(0, 0, z);
161 }
162 
163 int RecHitTools::zside(const DetId& id) const {
164  int zside = 0;
165  if (id.det() == DetId::HGCalEE || id.det() == DetId::HGCalHSi) {
166  zside = HGCSiliconDetId(id).zside();
167  } else if (id.det() == DetId::HGCalHSc) {
169  } else if (id.det() == DetId::Forward && id.subdetId() == static_cast<int>(HFNose)) {
170  zside = HFNoseDetId(id).zside();
171  } else if (id.det() == DetId::Forward) {
172  zside = HGCalDetId(id).zside();
173  } else if (id.det() == DetId::Hcal && id.subdetId() == HcalEndcap) {
174  zside = HcalDetId(id).zside();
175  }
176  return zside;
177 }
178 
179 std::float_t RecHitTools::getSiThickness(const DetId& id) const {
180  auto geom = getSubdetectorGeometry(id);
181  std::float_t thick(0.37);
182  if (id.det() == DetId::HGCalEE || id.det() == DetId::HGCalHSi) {
183  const HGCSiliconDetId hid(id);
184  auto ddd = get_ddd(geom, hid);
185  thick = ddd->cellThickness(hid.layer(), hid.waferU(), hid.waferV());
186  } else if (id.det() == DetId::Forward && id.subdetId() == static_cast<int>(HFNose)) {
187  const HFNoseDetId hid(id);
188  auto ddd = get_ddd(geom, hid);
189  thick = ddd->cellThickness(hid.layer(), hid.waferU(), hid.waferV());
190  } else if (id.det() == DetId::Forward) {
191  const HGCalDetId hid(id);
192  auto ddd = get_ddd(geom, hid);
193  thick = ddd->cellThickness(hid.layer(), hid.wafer(), 0);
194  } else {
195  LogDebug("getSiThickness::InvalidSiliconDetid")
196  << "det id: " << std::hex << id.rawId() << std::dec << ":" << id.det() << " is not HGCal silicon!";
197  // It does not make any sense to return 0.37 as thickness for a detector
198  // that is not Silicon(does it?). Mark it as 0. to be able to distinguish
199  // the case.
200  thick = 0.f;
201  }
202  return thick;
203 }
204 
205 int RecHitTools::getSiThickIndex(const DetId& id) const {
206  int thickIndex = -1;
207  if (id.det() == DetId::HGCalEE || id.det() == DetId::HGCalHSi) {
208  thickIndex = HGCSiliconDetId(id).type();
209  } else if (id.det() == DetId::Forward && id.subdetId() == static_cast<int>(HFNose)) {
210  thickIndex = HFNoseDetId(id).type();
211  } else if (id.det() == DetId::Forward) {
212  float thickness = getSiThickness(id);
213  if (thickness > 99. && thickness < 121.)
214  thickIndex = 0;
215  else if (thickness > 199. && thickness < 201.)
216  thickIndex = 1;
217  else if (thickness > 299. && thickness < 301.)
218  thickIndex = 2;
219  else
220  assert(thickIndex > 0 && "ERROR - silicon thickness has a nonsensical value");
221  }
222  return thickIndex;
223 }
224 
225 std::pair<float, float> RecHitTools::getScintDEtaDPhi(const DetId& id) const {
226  if (!isScintillator(id)) {
227  LogDebug("getScintDEtaDPhi::InvalidScintDetid")
228  << "det id: " << std::hex << id.rawId() << std::dec << ":" << id.det() << " is not HGCal scintillator!";
229  return {0.f, 0.f};
230  }
231  auto cellGeom = getSubdetectorGeometry(id)->getGeometry(id);
232  return {cellGeom->etaSpan(), cellGeom->phiSpan()};
233 }
234 
235 std::float_t RecHitTools::getRadiusToSide(const DetId& id) const {
236  auto geom = getSubdetectorGeometry(id);
238  if (id.det() == DetId::HGCalEE || id.det() == DetId::HGCalHSi) {
239  const HGCSiliconDetId hid(id);
240  auto ddd = get_ddd(geom, hid);
241  size = ddd->cellSizeHex(hid.type());
242  } else if (id.det() == DetId::Forward && id.subdetId() == static_cast<int>(HFNose)) {
243  const HFNoseDetId hid(id);
244  auto ddd = get_ddd(geom, hid);
245  size = ddd->cellSizeHex(hid.type());
246  } else if (id.det() == DetId::Forward) {
247  const HGCalDetId hid(id);
248  auto ddd = get_ddd(geom, hid);
249  size = ddd->cellSizeHex(hid.waferType());
250  } else {
251  edm::LogError("getRadiusToSide::InvalidSiliconDetid")
252  << "det id: " << std::hex << id.rawId() << std::dec << ":" << id.det() << " is not HGCal silicon!";
253  }
254  return size;
255 }
256 
257 unsigned int RecHitTools::getLayer(const ForwardSubdetector type) const {
258  int layer(0);
259  switch (type) {
260  case (ForwardSubdetector::HGCEE): {
261  auto geomEE =
263  layer = (geomEE->topology().dddConstants()).layers(true);
264  break;
265  }
267  auto geomFH =
269  layer = (geomFH->topology().dddConstants()).layers(true);
270  break;
271  }
273  auto geomBH =
275  layer = (geomBH->topology().dddConstants())->getMaxDepth(1);
276  break;
277  }
279  auto geomEE =
281  layer = (geomEE->topology().dddConstants()).layers(true);
282  auto geomFH =
284  layer += (geomFH->topology().dddConstants()).layers(true);
285  auto geomBH =
287  if (geomBH)
288  layer += (geomBH->topology().dddConstants())->getMaxDepth(1);
289  auto geomBH2 =
291  if (geomBH2)
292  layer += (geomBH2->topology().dddConstants()).layers(true);
293  break;
294  }
296  auto geomHFN =
298  layer = (geomHFN->topology().dddConstants()).layers(true);
299  break;
300  }
301  default:
302  layer = 0;
303  }
304  return (unsigned int)(layer);
305 }
306 
307 unsigned int RecHitTools::getLayer(const DetId::Detector type, bool nose) const {
308  int layer;
309  switch (type) {
310  case (DetId::HGCalEE): {
311  auto geomEE =
313  layer = (geomEE->topology().dddConstants()).layers(true);
314  break;
315  }
316  case (DetId::HGCalHSi): {
317  auto geomFH =
319  layer = (geomFH->topology().dddConstants()).layers(true);
320  break;
321  }
322  case (DetId::HGCalHSc): {
323  auto geomBH =
325  layer = (geomBH->topology().dddConstants()).layers(true);
326  break;
327  }
328  case (DetId::Forward): {
329  if (nose) {
330  auto geomHFN = static_cast<const HGCalGeometry*>(
332  layer = (geomHFN->topology().dddConstants()).layers(true);
333  } else {
334  auto geomEE = static_cast<const HGCalGeometry*>(
336  layer = (geomEE->topology().dddConstants()).layers(true);
337  auto geomFH = static_cast<const HGCalGeometry*>(
339  layer += (geomFH->topology().dddConstants()).layers(true);
340  }
341  break;
342  }
343  default:
344  layer = 0;
345  }
346  return (unsigned int)(layer);
347 }
348 
349 unsigned int RecHitTools::getLayer(const DetId& id) const {
351  if (id.det() == DetId::HGCalEE || id.det() == DetId::HGCalHSi) {
352  layer = HGCSiliconDetId(id).layer();
353  } else if (id.det() == DetId::HGCalHSc) {
355  } else if (id.det() == DetId::Forward && id.subdetId() == static_cast<int>(HFNose)) {
356  layer = HFNoseDetId(id).layer();
357  } else if (id.det() == DetId::Forward) {
358  layer = HGCalDetId(id).layer();
359  } else if (id.det() == DetId::Hcal && id.subdetId() == HcalEndcap) {
360  layer = HcalDetId(id).depth();
361  }
362  return layer;
363 }
364 
365 unsigned int RecHitTools::getLayerWithOffset(const DetId& id) const {
366  unsigned int layer = getLayer(id);
367  if (id.det() == DetId::Forward && id.subdetId() == HGCHEF) {
368  layer += fhOffset_;
369  } else if (id.det() == DetId::HGCalHSi || id.det() == DetId::HGCalHSc) {
370  // DetId::HGCalHSc hits include the offset w.r.t. EE already
371  layer += fhOffset_;
372  } else if (id.det() == DetId::Hcal && id.subdetId() == HcalEndcap) {
373  layer += bhOffset_;
374  }
375  // no need to add offset for HFnose
376  return layer;
377 }
378 
379 std::pair<int, int> RecHitTools::getWafer(const DetId& id) const {
381  int waferV = 0;
382  if ((id.det() == DetId::HGCalEE) || (id.det() == DetId::HGCalHSi)) {
383  waferU = HGCSiliconDetId(id).waferU();
384  waferV = HGCSiliconDetId(id).waferV();
385  } else if (id.det() == DetId::Forward && id.subdetId() == static_cast<int>(HFNose)) {
386  waferU = HFNoseDetId(id).waferU();
387  waferV = HFNoseDetId(id).waferV();
388  } else if (id.det() == DetId::Forward) {
389  waferU = HGCalDetId(id).wafer();
390  } else {
391  edm::LogError("getWafer::InvalidSiliconDetid")
392  << "det id: " << std::hex << id.rawId() << std::dec << ":" << id.det() << " is not HGCal silicon!";
393  }
394  return std::pair<int, int>(waferU, waferV);
395 }
396 
397 std::pair<int, int> RecHitTools::getCell(const DetId& id) const {
398  int cellU = std::numeric_limits<int>::max();
399  int cellV = 0;
400  if ((id.det() == DetId::HGCalEE) || (id.det() == DetId::HGCalHSi)) {
401  cellU = HGCSiliconDetId(id).cellU();
402  cellV = HGCSiliconDetId(id).cellV();
403  } else if (id.det() == DetId::Forward && id.subdetId() == static_cast<int>(HFNose)) {
404  cellU = HFNoseDetId(id).cellU();
405  cellV = HFNoseDetId(id).cellV();
406  } else if (id.det() == DetId::Forward) {
407  cellU = HGCalDetId(id).cell();
408  } else {
409  edm::LogError("getCell::InvalidSiliconDetid")
410  << "det id: " << std::hex << id.rawId() << std::dec << ":" << id.det() << " is not HGCal silicon!";
411  }
412  return std::pair<int, int>(cellU, cellV);
413 }
414 
415 bool RecHitTools::isHalfCell(const DetId& id) const {
416  bool ishalf = false;
417  if (id.det() == DetId::Forward) {
418  HGCalDetId hid(id);
419  auto geom = getSubdetectorGeometry(hid);
420  auto ddd = get_ddd(geom, hid);
421  const int waferType = ddd->waferTypeT(hid.waferType());
422  return ddd->isHalfCell(waferType, hid.cell());
423  }
424  //new geometry is always false
425  return ishalf;
426 }
427 
428 bool RecHitTools::isSilicon(const DetId& id) const {
429  return (id.det() == DetId::HGCalEE || id.det() == DetId::HGCalHSi ||
430  (id.det() == DetId::Forward && id.subdetId() == static_cast<int>(HFNose)));
431 }
432 
433 bool RecHitTools::isScintillator(const DetId& id) const { return id.det() == DetId::HGCalHSc; }
434 
435 bool RecHitTools::isOnlySilicon(const unsigned int layer) const {
436  // HFnose TODO
437  bool isonlysilicon = (layer % bhLastLayer_) < bhOffset_;
438  return isonlysilicon;
439 }
440 
441 float RecHitTools::getEta(const GlobalPoint& position, const float& vertex_z) const {
442  GlobalPoint corrected_position = GlobalPoint(position.x(), position.y(), position.z() - vertex_z);
443  return corrected_position.eta();
444 }
445 
446 float RecHitTools::getEta(const DetId& id, const float& vertex_z) const {
448  float eta = getEta(position, vertex_z);
449  return eta;
450 }
451 
453  float phi = atan2(position.y(), position.x());
454  return phi;
455 }
456 
457 float RecHitTools::getPhi(const DetId& id) const {
459  float phi = atan2(position.y(), position.x());
460  return phi;
461 }
462 
463 float RecHitTools::getPt(const GlobalPoint& position, const float& hitEnergy, const float& vertex_z) const {
464  float eta = getEta(position, vertex_z);
465  float pt = hitEnergy / cosh(eta);
466  return pt;
467 }
468 
469 float RecHitTools::getPt(const DetId& id, const float& hitEnergy, const float& vertex_z) const {
471  float eta = getEta(position, vertex_z);
472  float pt = hitEnergy / cosh(eta);
473  return pt;
474 }
475 
476 std::pair<uint32_t, uint32_t> RecHitTools::firstAndLastLayer(DetId::Detector det, int subdet) const {
477  if ((det == DetId::HGCalEE) || ((det == DetId::Forward) && (subdet == HGCEE))) {
478  return std::make_pair(eeOffset_ + 1, fhOffset_);
479  } else if ((det == DetId::HGCalHSi) || ((det == DetId::Forward) && (subdet == HGCHEF))) {
480  return std::make_pair(fhOffset_ + 1, fhLastLayer_);
481  } else if ((det == DetId::Forward) && (subdet == HFNose)) {
482  return std::make_pair(1, noseLastLayer_);
483  } else {
484  return std::make_pair(bhFirstLayer_, bhLastLayer_);
485  }
486 }
487 
488 bool RecHitTools::maskCell(const DetId& id, int corners) const {
489  if (id.det() == DetId::Hcal) {
490  return false;
491  } else {
492  auto hg = static_cast<const HGCalGeometry*>(getSubdetectorGeometry(id));
493  return hg->topology().dddConstants().maskCell(id, corners);
494  }
495 }
bool maskCell(const DetId &id, int corners) const
size
Write out results.
bool isHalfCell(const DetId &) const
Definition: RecHitTools.cc:415
double waferZ(int layer, bool reco) const
std::pair< int, int > getWafer(const DetId &) const
Definition: RecHitTools.cc:379
unsigned int bhFirstLayer_
Definition: RecHitTools.h:90
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
Definition: RecHitTools.cc:119
int wafer() const
get the wafer #
Definition: HGCalDetId.h:40
unsigned int fhLastLayer_
Definition: RecHitTools.h:90
int waferType() const
get the wafer type
Definition: HGCalDetId.h:43
int layer() const
get the layer #
Definition: HFNoseDetId.h:56
unsigned int getLayer(DetId::Detector type, bool nose=false) const
Definition: RecHitTools.cc:307
constexpr int zside() const
get the z-side of the cell (1/-1)
Definition: HcalDetId.h:141
int32_t waferU(const int32_t index)
float getPhi(const GlobalPoint &position) const
Definition: RecHitTools.cc:452
unsigned int bhLastLayer_
Definition: RecHitTools.h:90
int waferU() const
Definition: HFNoseDetId.h:75
bool maskCell(const DetId &id, int corners=3) const
Definition: RecHitTools.cc:488
int cellU() const
get the cell #&#39;s in u,v or in x,y
T eta() const
Definition: PV3DBase.h:73
unsigned int maxNumberOfWafersNose_
Definition: RecHitTools.h:91
std::float_t getRadiusToSide(const DetId &) const
Definition: RecHitTools.cc:235
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
int waferTypeT(int wafer) const
unsigned int fhOffset_
Definition: RecHitTools.h:90
Log< level::Error, false > LogError
std::pair< float, float > getScintDEtaDPhi(const DetId &) const
Definition: RecHitTools.cc:225
unsigned int bhOffset_
Definition: RecHitTools.h:90
ForwardSubdetector
assert(be >=bs)
int zside(const DetId &id) const
Definition: RecHitTools.cc:163
constexpr std::array< uint8_t, layerIndexSize > layer
int layer() const
get the layer #
bool isHalfCell(int waferType, int cell) const
unsigned int maxNumberOfWafersPerLayer_
Definition: RecHitTools.h:91
GlobalPoint getPosition(const DetId &id) const
Definition: RecHitTools.cc:129
int layer() const
get the layer #
const CaloGeometry * geom_
Definition: RecHitTools.h:89
bool isSilicon(const DetId &) const
Definition: RecHitTools.cc:428
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
int zside() const
get the z-side of the cell (1/-1)
Definition: HGCalDetId.h:49
int waferU() const
int cellU() const
get the cell #&#39;s in u,v or in x,y
Definition: HFNoseDetId.h:59
int zside() const
get the z-side of the cell (1/-1)
bool isOnlySilicon(const unsigned int layer) const
Definition: RecHitTools.cc:435
int type() const
get the type
Definition: HFNoseDetId.h:50
const HGCalTopology & topology() const
int cell() const
get the absolute value of the cell #&#39;s in x and y
Definition: HGCalDetId.h:37
double cellSizeHex(int type) const
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
std::pair< uint32_t, uint32_t > firstAndLastLayer(DetId::Detector det, int subdet) const
Definition: RecHitTools.cc:476
Definition: DetId.h:17
unsigned int eeOffset_
Definition: RecHitTools.h:90
int waferV() const
int cellV() const
Definition: HFNoseDetId.h:60
Detector
Definition: DetId.h:24
int zside() const
get the z-side of the cell (1/-1)
std::pair< int, int > getCell(const DetId &) const
Definition: RecHitTools.cc:397
double cellThickness(int layer, int waferU, int waferV) const
int layer() const
get the layer #
Definition: HGCalDetId.h:46
float getEta(const GlobalPoint &position, const float &vertex_z=0.) const
Definition: RecHitTools.cc:441
GlobalPoint getPositionLayer(int layer, bool nose=false) const
Definition: RecHitTools.cc:141
int waferV() const
Definition: HFNoseDetId.h:78
int cellV() const
unsigned int noseLastLayer_
Definition: RecHitTools.h:90
void setGeometry(CaloGeometry const &)
Definition: RecHitTools.cc:68
bool isScintillator(const DetId &) const
Definition: RecHitTools.cc:433
GlobalPoint getPosition(const DetId &id, bool debug=false) const
static int position[264][3]
Definition: ReadPGInfo.cc:289
int32_t waferV(const int32_t index)
int type() const
get the type
int getSiThickIndex(const DetId &) const
Definition: RecHitTools.cc:205
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:34
float getPt(const GlobalPoint &position, const float &hitEnergy, const float &vertex_z=0.) const
Definition: RecHitTools.cc:463
const HGCalDDDConstants & dddConstants() const
Definition: HGCalTopology.h:98
std::float_t getSiThickness(const DetId &) const
Definition: RecHitTools.cc:179
int zside() const
get the z-side of the cell (1/-1)
Definition: HFNoseDetId.h:53
#define LogDebug(id)
unsigned int lastLayer(bool nose=false) const
Definition: RecHitTools.h:79
unsigned int getLayerWithOffset(const DetId &) const
Definition: RecHitTools.cc:365
constexpr int depth() const
get the tower depth
Definition: HcalDetId.h:164