CMS 3D CMS Logo

List of all members | Classes | Public Member Functions | Static Public Attributes | Private Member Functions | Private Attributes
HGCalTopology Class Reference

#include <HGCalTopology.h>

Inheritance diagram for HGCalTopology:
CaloSubdetectorTopology

Classes

struct  DecodedDetId
 

Public Member Functions

unsigned int allGeomModules () const
 
const HGCalDDDConstantsdddConstants () const
 
DecodedDetId decode (const DetId &id) const
 
DetId denseId2detId (uint32_t denseId) const override
 
DetId::Detector detector () const
 
bool detectorType () const
 
virtual uint32_t detId2denseGeomId (const DetId &id) const
 
uint32_t detId2denseId (const DetId &id) const override
 Dense indexing. More...
 
std::vector< DetIddown (const DetId &id) const override
 
std::vector< DetIdeast (const DetId &id) const override
 
DetId encode (const DecodedDetId &id_) const
 
DecodedDetId geomDenseId2decId (const uint32_t &hi) const
 
HGCalGeometryMode::GeometryMode geomMode () const
 Geometry mode. More...
 
DetId goEast (const DetId &id) const override
 move the Topology east (positive ix) More...
 
DetId goNorth (const DetId &id) const override
 move the Topology north (increment iy) More...
 
DetId goSouth (const DetId &id) const override
 move the Topology south (decrement iy) More...
 
DetId goWest (const DetId &id) const override
 move the Topology west (negative ix) More...
 
 HGCalTopology (const HGCalDDDConstants &hdcons, int subdet)
 create a new Topology More...
 
bool isHFNose () const
 
bool maskCell (const DetId &id, int corners=3) const
 
std::vector< DetIdneighbors (const DetId &id) const
 
std::vector< DetIdnorth (const DetId &id) const override
 
DetId offsetBy (const DetId startId, int nrStepsX, int nrStepsY) const
 
std::vector< DetIdsouth (const DetId &id) const override
 
ForwardSubdetector subDetector () const
 
DetId switchZSide (const DetId startId) const
 
bool tileTrapezoid () const
 
unsigned int totalGeomModules () const
 
unsigned int totalModules () const
 
std::vector< DetIdup (const DetId &id) const override
 
bool valid (const DetId &id) const override
 Is this a valid cell id. More...
 
bool valid (const DetId &id, int cornerMin) const
 
bool validHashIndex (uint32_t ix) const
 
bool validModule (const DetId &id, int cornerMin) const
 
bool waferHexagon6 () const
 
bool waferHexagon8 () const
 
std::vector< DetIdwest (const DetId &id) const override
 
 ~HGCalTopology () override=default
 virtual destructor More...
 
- Public Member Functions inherited from CaloSubdetectorTopology
 CaloSubdetectorTopology ()
 standard constructor More...
 
virtual DetId denseId2detId (unsigned int) const
 return a linear packed id More...
 
virtual bool denseIdConsistent (int topoVer) const
 return whether this topology is consistent with the numbering in the given topology More...
 
virtual std::vector< DetIdgetAllNeighbours (const DetId &id) const
 
virtual std::vector< DetIdgetNeighbours (const DetId &id, const CaloDirection &dir) const
 
virtual std::vector< DetIdgetWindow (const DetId &id, const int &northSouthSize, const int &eastWestSize) const
 
virtual DetId goDown (const DetId &id) const
 
virtual DetId goUp (const DetId &id) const
 
virtual unsigned int ncells () const
 return a count of valid cells (for dense indexing use) More...
 
virtual int topoVersion () const
 return a version which identifies the given topology More...
 
virtual ~CaloSubdetectorTopology ()
 virtual destructor More...
 

Static Public Attributes

static const int subSectors_ = 2
 Use subSector in square mode as wafer type in hexagon mode. More...
 

Private Member Functions

void addHGCSCintillatorId (std::vector< DetId > &ids, int zside, int type, int lay, int iradius, int iphi) const
 add DetId of Scintillator and Silicon type if valid More...
 
void addHGCSiliconId (std::vector< DetId > &ids, int det, int zside, int type, int lay, int waferU, int waferV, int cellU, int cellV) const
 
DetId changeXY (const DetId &id, int nrStepsX, int nrStepsY) const
 move the nagivator along x, y More...
 
DetId changeZ (const DetId &id, int nrStepsZ) const
 move the nagivator along z More...
 

Private Attributes

int cellMax_
 
int cells_
 
DetId::Detector det_
 
int firstLay_
 
const HGCalDDDConstantshdcons_
 
int kHGeomHalf_
 
int kHGhalf_
 
int kHGhalfType_
 
unsigned int kSizeForDenseIndexing
 
int layers_
 
HGCalGeometryMode::GeometryMode mode_
 
int sectors_
 
ForwardSubdetector subdet_
 
int types_
 
int waferMax_
 
int waferOff_
 

Additional Inherited Members

- Protected Types inherited from CaloSubdetectorTopology
typedef std::pair< int, int > Coordinate
 
- Protected Member Functions inherited from CaloSubdetectorTopology
Coordinate getNeighbourIndex (const Coordinate &coord, const CaloDirection &dir) const
 

Detailed Description

Definition at line 12 of file HGCalTopology.h.

Constructor & Destructor Documentation

◆ HGCalTopology()

HGCalTopology::HGCalTopology ( const HGCalDDDConstants hdcons,
int  subdet 
)

create a new Topology

Definition at line 14 of file HGCalTopology.cc.

References cellMax_, cells_, det_, firstLay_, HGCalDDDConstants::firstLayer(), DetId::Forward, ForwardEmpty, HGCalDDDConstants::geomMode(), hdcons_, HFNose, kHGeomHalf_, kHGhalf_, kHGhalfType_, kSizeForDenseIndexing, HGCalDDDConstants::layers(), layers_, HGCalDDDConstants::maxCells(), HGCalDDDConstants::maxCellUV(), mode_, HGCalDDDConstants::sectors(), sectors_, subdet_, tileTrapezoid(), types_, waferHexagon6(), waferMax_, waferOff_, and HGCalDDDConstants::waferUVMax().

14  : hdcons_(hdcons) {
16  layers_ = hdcons_.layers(true);
17  cells_ = hdcons_.maxCells(true);
21  waferMax_ = 2 * waferOff_ + 1;
24  if (waferHexagon6()) {
26  subdet_ = (ForwardSubdetector)(det);
28  types_ = 2;
29  } else if (det == static_cast<int>(DetId::Forward)) {
31  subdet_ = HFNose;
33  types_ = 3;
34  } else if (tileTrapezoid()) {
35  det_ = (DetId::Detector)(det);
38  types_ = 3;
39  } else {
40  det_ = (DetId::Detector)(det);
43  types_ = 3;
44  }
46  kSizeForDenseIndexing = static_cast<unsigned int>(2 * kHGhalf_);
47 #ifdef EDM_ML_DEBUG
48  edm::LogVerbatim("HGCalGeom") << "HGCalTopology initialized for detector " << det << ":" << det_ << ":" << subdet_
49  << " having " << sectors_ << " Sectors, " << layers_ << " Layers from " << firstLay_
50  << ", " << cells_ << " cells and total channels " << kSizeForDenseIndexing << ":"
51  << (2 * kHGeomHalf_);
52 #endif
53 }
Log< level::Info, true > LogVerbatim
HGCalGeometryMode::GeometryMode mode_
bool tileTrapezoid() const
bool waferHexagon6() const
int firstLayer() const
HGCalGeometryMode::GeometryMode geomMode() const
ForwardSubdetector
DetId::Detector det_
int maxCells(bool reco) const
unsigned int layers(bool reco) const
ForwardSubdetector subdet_
const HGCalDDDConstants & hdcons_
Detector
Definition: DetId.h:24
unsigned int kSizeForDenseIndexing

◆ ~HGCalTopology()

HGCalTopology::~HGCalTopology ( )
overridedefault

virtual destructor

Member Function Documentation

◆ addHGCSCintillatorId()

void HGCalTopology::addHGCSCintillatorId ( std::vector< DetId > &  ids,
int  zside,
int  type,
int  lay,
int  iradius,
int  iphi 
) const
private

add DetId of Scintillator and Silicon type if valid

Definition at line 566 of file HGCalTopology.cc.

References hdcons_, EcalPhiSymFlatTableProducers_cfi::id, hcalRecHitTable_cff::iphi, HGCalDDDConstants::isValidTrap(), and ecaldqm::zside().

Referenced by neighbors().

567  {
568 #ifdef EDM_ML_DEBUG
569  edm::LogVerbatim("HGCalGeom") << "addHGCSCintillatorId " << zside << ":" << type << ":" << lay << ":" << iradius
570  << ":" << iphi << " ==> Validity " << hdcons_.isValidTrap(zside, lay, iradius, iphi);
571 #endif
572  if (hdcons_.isValidTrap(zside, lay, iradius, iphi)) {
573  HGCScintillatorDetId id(type, lay, zside * iradius, iphi);
574  ids.emplace_back(DetId(id));
575  }
576 }
Log< level::Info, true > LogVerbatim
int zside(DetId const &)
bool isValidTrap(int zside, int lay, int ieta, int iphi) const
const HGCalDDDConstants & hdcons_
Definition: DetId.h:17

◆ addHGCSiliconId()

void HGCalTopology::addHGCSiliconId ( std::vector< DetId > &  ids,
int  det,
int  zside,
int  type,
int  lay,
int  waferU,
int  waferV,
int  cellU,
int  cellV 
) const
private

Definition at line 578 of file HGCalTopology.cc.

References DetId::Forward, hdcons_, HFNose, EcalPhiSymFlatTableProducers_cfi::id, HGCalDDDConstants::isValidHex8(), HGCalWaferIndex::waferU(), HGCalWaferIndex::waferV(), and ecaldqm::zside().

Referenced by neighbors().

579  {
580 #ifdef EDM_ML_DEBUG
581  edm::LogVerbatim("HGCalGeom") << "addHGCSiliconId " << det << ":" << zside << ":" << type << ":" << lay << ":"
582  << waferU << ":" << waferV << ":" << cellU << ":" << cellV << " ==> Validity "
583  << hdcons_.isValidHex8(lay, waferU, waferV, cellU, cellV, false);
584 #endif
585  if (hdcons_.isValidHex8(lay, waferU, waferV, cellU, cellV, false)) {
586  if (det == static_cast<int>(ForwardSubdetector::HFNose)) {
587  HFNoseDetId id(DetId::Forward, zside, type, lay, waferU, waferV, cellU, cellV);
588  ids.emplace_back(DetId(id));
589  } else {
590  HGCSiliconDetId id((DetId::Detector)(det), zside, type, lay, waferU, waferV, cellU, cellV);
591  ids.emplace_back(DetId(id));
592  }
593  }
594 }
Log< level::Info, true > LogVerbatim
int32_t waferU(const int32_t index)
int zside(DetId const &)
bool isValidHex8(int lay, int waferU, int waferV, bool fullAndPart) const
const HGCalDDDConstants & hdcons_
Definition: DetId.h:17
Detector
Definition: DetId.h:24
int32_t waferV(const int32_t index)

◆ allGeomModules()

unsigned int HGCalTopology::allGeomModules ( ) const

Definition at line 55 of file HGCalTopology.cc.

References hdcons_, HGCalDDDConstants::numberCells(), tileTrapezoid(), and HGCalDDDConstants::wafers().

55  {
56  return (tileTrapezoid() ? (unsigned int)(2 * hdcons_.numberCells(true)) : (unsigned int)(2 * hdcons_.wafers()));
57 }
bool tileTrapezoid() const
const HGCalDDDConstants & hdcons_
int numberCells(bool reco) const

◆ changeXY()

DetId HGCalTopology::changeXY ( const DetId id,
int  nrStepsX,
int  nrStepsY 
) const
private

move the nagivator along x, y

Definition at line 670 of file HGCalTopology.cc.

Referenced by goEast(), goNorth(), goSouth(), goWest(), and offsetBy().

670 { return DetId(); }
Definition: DetId.h:17

◆ changeZ()

DetId HGCalTopology::changeZ ( const DetId id,
int  nrStepsZ 
) const
private

move the nagivator along z

Definition at line 672 of file HGCalTopology.cc.

Referenced by down(), and up().

672 { return DetId(); }
Definition: DetId.h:17

◆ dddConstants()

const HGCalDDDConstants& HGCalTopology::dddConstants ( ) const
inline

◆ decode()

HGCalTopology::DecodedDetId HGCalTopology::decode ( const DetId id) const

Definition at line 596 of file HGCalTopology.cc.

References det_, DetId::Forward, HFNose, EcalPhiSymFlatTableProducers_cfi::id, heavyIonCSV_trainingSettings::idx, subdet_, tileTrapezoid(), and waferHexagon6().

Referenced by detId2denseGeomId(), detId2denseId(), HGCalGeometry::get8Corners(), HGCalGeometry::getClosestCell(), HGCalGeometry::getClosestCellHex(), HGCalGeometry::getCorners(), HGCalGeometry::getNewCorners(), HGCalGeometry::getPosition(), neighbors(), HGCalGeometry::neighborZ(), HGCalGeometry::newCell(), switchZSide(), valid(), and validModule().

596  {
598  if (waferHexagon6()) {
599  HGCalDetId id(startId);
600  idx.iCell1 = id.cell();
601  idx.iCell2 = 0;
602  idx.iLay = id.layer();
603  idx.iSec1 = id.wafer();
604  idx.iSec2 = 0;
605  idx.iType = id.waferType();
606  idx.zSide = id.zside();
607  idx.det = id.subdetId();
608  } else if (tileTrapezoid()) {
609  HGCScintillatorDetId id(startId);
610  idx.iCell1 = id.iphi();
611  idx.iCell2 = 0;
612  idx.iLay = id.layer();
613  idx.iSec1 = id.ietaAbs();
614  idx.iSec2 = 0;
615  idx.iType = id.type();
616  idx.zSide = id.zside();
617  idx.det = static_cast<int>(id.subdet());
619  HFNoseDetId id(startId);
620  idx.iCell1 = id.cellU();
621  idx.iCell2 = id.cellV();
622  idx.iLay = id.layer();
623  idx.iSec1 = id.waferU();
624  idx.iSec2 = id.waferV();
625  idx.iType = id.type();
626  idx.zSide = id.zside();
627  idx.det = static_cast<int>(id.subdet());
628  } else {
629  HGCSiliconDetId id(startId);
630  idx.iCell1 = id.cellU();
631  idx.iCell2 = id.cellV();
632  idx.iLay = id.layer();
633  idx.iSec1 = id.waferU();
634  idx.iSec2 = id.waferV();
635  idx.iType = id.type();
636  idx.zSide = id.zside();
637  idx.det = static_cast<int>(id.subdet());
638  }
639  return idx;
640 }
bool tileTrapezoid() const
bool waferHexagon6() const
DetId::Detector det_
ForwardSubdetector subdet_

◆ denseId2detId()

DetId HGCalTopology::denseId2detId ( uint32_t  denseId) const
override

Definition at line 390 of file HGCalTopology.cc.

References cellMax_, encode(), firstLay_, EcalPhiSymFlatTableProducers_cfi::id, kHGhalfType_, layers_, sectors_, tileTrapezoid(), types_, validHashIndex(), waferHexagon6(), waferMax_, and waferOff_.

390  {
392  if (validHashIndex(hi)) {
393  id.zSide = (static_cast<int>(hi) < kHGhalfType_ ? -1 : 1);
394  int di = (static_cast<int>(hi) % kHGhalfType_);
395  if (waferHexagon6()) {
396  int type = (di % types_);
397  id.iType = (type == 0 ? -1 : 1);
398  id.iSec1 = (((di - type) / types_) % sectors_);
399  id.iLay = (((((di - type) / types_) - id.iSec1 + 1) / sectors_) % layers_ + 1);
400  id.iCell1 = (((((di - type) / types_) - id.iSec1 + 1) / sectors_ - id.iLay + 1) / layers_ + 1);
401 #ifdef EDM_ML_DEBUG
402  edm::LogVerbatim("HGCalGeom") << "Input Hex " << hi << " o/p " << id.zSide << ":" << id.iLay << ":" << id.iType
403  << ":" << id.iSec1 << ":" << id.iCell1;
404 #endif
405  } else if (tileTrapezoid()) {
406  int type = (di % types_);
407  id.iType = type;
408  id.iSec1 = (((di - type) / types_) % sectors_) + 1;
409  id.iLay = (((((di - type) / types_) - id.iSec1 + 1) / sectors_) % layers_ + firstLay_);
410  id.iCell1 = (((((di - type) / types_) - id.iSec1 + 1) / sectors_ - id.iLay + firstLay_) / layers_ + 1);
411 #ifdef EDM_ML_DEBUG
412  edm::LogVerbatim("HGCalGeom") << "Input Trap " << hi << " o/p " << id.zSide << ":" << id.iLay << ":" << id.iType
413  << ":" << id.iSec1 << ":" << id.iCell1;
414 #endif
415  } else {
416  int type = (di % types_);
417  id.iType = type;
418  di = (di - type) / types_;
419  id.iSec2 = (di % waferMax_) - waferOff_;
420  di = (di - id.iSec2 - waferOff_) / waferMax_;
421  id.iSec1 = (di % waferMax_) - waferOff_;
422  di = (di - id.iSec1 - waferOff_) / waferMax_;
423  id.iLay = (di % layers_) + 1;
424  di = (di - id.iLay + 1) / layers_;
425  id.iCell2 = (di % cellMax_);
426  id.iCell1 = (di - id.iCell2) / cellMax_;
427 #ifdef EDM_ML_DEBUG
428  edm::LogVerbatim("HGCalGeom") << "Input Hex8 " << hi << " o/p " << id.zSide << ":" << id.iLay << ":" << id.iType
429  << ":" << id.iSec1 << ":" << id.iSec2 << ":" << id.iCell1 << ":" << id.iCell2;
430 #endif
431  }
432  }
433  return encode(id);
434 }
Log< level::Info, true > LogVerbatim
bool tileTrapezoid() const
bool waferHexagon6() const
Definition: EPCuts.h:4
bool validHashIndex(uint32_t ix) const
Definition: HGCalTopology.h:89
DetId encode(const DecodedDetId &id_) const

◆ detector()

DetId::Detector HGCalTopology::detector ( ) const
inline

Definition at line 117 of file HGCalTopology.h.

References det_.

Referenced by HGCalGeometry::getClosestCell(), and HGCalGeometry::getClosestCellHex().

117 { return det_; }
DetId::Detector det_

◆ detectorType()

bool HGCalTopology::detectorType ( ) const
inline

Definition at line 119 of file HGCalTopology.h.

119 { return false; }

◆ detId2denseGeomId()

uint32_t HGCalTopology::detId2denseGeomId ( const DetId id) const
virtual

Definition at line 436 of file HGCalTopology.cc.

References cellMax_, decode(), firstLay_, heavyIonCSV_trainingSettings::idx, kHGeomHalf_, layers_, sectors_, tileTrapezoid(), waferHexagon6(), waferMax_, and waferOff_.

Referenced by HGCalGeometry::getGeometry(), HGCalGeometry::getSummary(), HGCalGeometry::indexFor(), HGCalGeometry::newCell(), and HGCalGeometry::present().

436  {
438  uint32_t idx;
439  if (waferHexagon6()) {
440  idx = (uint32_t)(((id.zSide > 0) ? kHGeomHalf_ : 0) + (id.iLay - 1) * sectors_ + id.iSec1);
441 #ifdef EDM_ML_DEBUG
442  edm::LogVerbatim("HGCalGeom") << "Geom Hex I/P " << id.zSide << ":" << id.iLay << ":" << id.iSec1 << ":" << id.iType
443  << " Constants " << kHGeomHalf_ << ":" << layers_ << ":" << sectors_ << " o/p "
444  << idx;
445 #endif
446  } else if (tileTrapezoid()) {
447  idx = (uint32_t)(((id.zSide > 0) ? kHGeomHalf_ : 0) +
448  (((id.iLay - firstLay_) * sectors_ + id.iSec1 - 1) * cellMax_ + id.iCell1 - 1));
449 #ifdef EDM_ML_DEBUG
450  edm::LogVerbatim("HGCalGeom") << "Geom Trap I/P " << id.zSide << ":" << id.iLay << ":" << id.iSec1 << ":"
451  << id.iCell1 << ":" << id.iType << " Constants " << kHGeomHalf_ << ":" << layers_
452  << ":" << firstLay_ << ":" << sectors_ << ":" << cellMax_ << " o/p " << idx;
453 #endif
454  } else {
455  idx = (uint32_t)(((id.zSide > 0) ? kHGeomHalf_ : 0) +
456  (((id.iLay - 1) * waferMax_ + id.iSec1 + waferOff_) * waferMax_ + id.iSec2 + waferOff_));
457 #ifdef EDM_ML_DEBUG
458  edm::LogVerbatim("HGCalGeom") << "Geom Hex8 I/P " << id.zSide << ":" << id.iLay << ":" << id.iSec1 << ":"
459  << id.iSec2 << ":" << id.iType << " Constants " << kHGeomHalf_ << ":" << layers_
460  << ":" << waferMax_ << ":" << waferOff_ << " o/p " << idx;
461 #endif
462  }
463  return idx;
464 }
Log< level::Info, true > LogVerbatim
bool tileTrapezoid() const
bool waferHexagon6() const
DecodedDetId decode(const DetId &id) const

◆ detId2denseId()

uint32_t HGCalTopology::detId2denseId ( const DetId id) const
overridevirtual

Dense indexing.

Reimplemented from CaloSubdetectorTopology.

Definition at line 351 of file HGCalTopology.cc.

References cellMax_, decode(), firstLay_, heavyIonCSV_trainingSettings::idx, kHGeomHalf_, kHGhalfType_, layers_, sectors_, tileTrapezoid(), types_, waferHexagon6(), waferMax_, and waferOff_.

351  {
353  uint32_t idx;
354  if (waferHexagon6()) {
355  int type = (id.iType > 0) ? 1 : 0;
356  idx = (uint32_t)(((id.zSide > 0) ? kHGhalfType_ : 0) +
357  ((((id.iCell1 - 1) * layers_ + id.iLay - 1) * sectors_ + id.iSec1) * types_ + type));
358 #ifdef EDM_ML_DEBUG
359  edm::LogVerbatim("HGCalGeom") << "Input Hex " << id.zSide << ":" << id.iLay << ":" << id.iSec1 << ":" << id.iCell1
360  << ":" << id.iType << " Constants " << kHGeomHalf_ << ":" << layers_ << ":"
361  << sectors_ << ":" << types_ << " o/p " << idx;
362 #endif
363  } else if (tileTrapezoid()) {
364  idx =
365  (uint32_t)(((id.zSide > 0) ? kHGhalfType_ : 0) +
366  ((((id.iCell1 - 1) * layers_ + id.iLay - firstLay_) * sectors_ + id.iSec1 - 1) * types_ + id.iType));
367 #ifdef EDM_ML_DEBUG
368  edm::LogVerbatim("HGCalGeom") << "Input Trap " << id.zSide << ":" << id.iLay << ":" << id.iSec1 << ":" << id.iCell1
369  << ":" << id.iType << " Constants " << kHGeomHalf_ << ":" << layers_ << ":"
370  << sectors_ << ":" << types_ << " o/p " << idx;
371 #endif
372  } else {
373  idx =
374  (uint32_t)(((id.zSide > 0) ? kHGhalfType_ : 0) +
375  (((((id.iCell1 * cellMax_ + id.iCell2) * layers_ + id.iLay - 1) * waferMax_ + id.iSec1 + waferOff_) *
376  waferMax_ +
377  id.iSec2 + waferOff_) *
378  types_ +
379  id.iType));
380 #ifdef EDM_ML_DEBUG
381  edm::LogVerbatim("HGCalGeom") << "Input Hex8 " << id.zSide << ":" << id.iLay << ":" << id.iSec1 << ":" << id.iSec2
382  << ":" << id.iCell1 << ":" << id.iCell2 << ":" << id.iType << " Constants "
383  << kHGeomHalf_ << ":" << cellMax_ << ":" << layers_ << ":" << waferMax_ << ":"
384  << waferOff_ << ":" << types_ << " o/p " << idx;
385 #endif
386  }
387  return idx;
388 }
Log< level::Info, true > LogVerbatim
bool tileTrapezoid() const
bool waferHexagon6() const
DecodedDetId decode(const DetId &id) const

◆ down()

std::vector<DetId> HGCalTopology::down ( const DetId id) const
inlineoverridevirtual

Get the neighbors of the given cell in down direction (inward)

Implements CaloSubdetectorTopology.

Definition at line 68 of file HGCalTopology.h.

References changeZ().

68  {
69  DetId nextId = changeZ(id, -1);
70  std::vector<DetId> vNeighborsDetId;
71  if (!(nextId == DetId(0)))
72  vNeighborsDetId.emplace_back(nextId);
73  return vNeighborsDetId;
74  }
Definition: DetId.h:17
DetId changeZ(const DetId &id, int nrStepsZ) const
move the nagivator along z

◆ east()

std::vector<DetId> HGCalTopology::east ( const DetId id) const
inlineoverridevirtual

Get the neighbors of the given cell in east direction

Implements CaloSubdetectorTopology.

Definition at line 42 of file HGCalTopology.h.

References goEast().

42  {
43  DetId nextId = goEast(id);
44  std::vector<DetId> vNeighborsDetId;
45  if (!(nextId == DetId(0)))
46  vNeighborsDetId.emplace_back(nextId);
47  return vNeighborsDetId;
48  }
DetId goEast(const DetId &id) const override
move the Topology east (positive ix)
Definition: HGCalTopology.h:41
Definition: DetId.h:17

◆ encode()

DetId HGCalTopology::encode ( const DecodedDetId id_) const

Definition at line 642 of file HGCalTopology.cc.

References det_, DetId::Forward, hdcons_, HFNose, EcalPhiSymFlatTableProducers_cfi::id, heavyIonCSV_trainingSettings::idx, HGCScintillatorDetId::layer(), DetId::rawId(), HGCScintillatorDetId::ring(), HGCScintillatorDetId::setSiPM(), HGCScintillatorDetId::setType(), subdet_, tileTrapezoid(), HGCalDDDConstants::tileType(), and waferHexagon6().

Referenced by denseId2detId(), HGCalGeometry::getClosestCell(), HGCalGeometry::getClosestCellHex(), HGCalGeometry::newCell(), and switchZSide().

642  {
643  DetId id;
644 #ifdef EDM_ML_DEBUG
645  edm::LogVerbatim("HGCalGeomX") << "Encode " << idx.det << ":" << idx.zSide << ":" << idx.iType << ":" << idx.iLay
646  << ":" << idx.iSec1 << ":" << idx.iSec2 << ":" << idx.iCell1 << ":" << idx.iCell2;
647 #endif
648  if (waferHexagon6()) {
649  id =
650  HGCalDetId((ForwardSubdetector)(idx.det), idx.zSide, idx.iLay, ((idx.iType > 0) ? 1 : 0), idx.iSec1, idx.iCell1)
651  .rawId();
652  } else if (tileTrapezoid()) {
653  HGCScintillatorDetId hid(idx.iType, idx.iLay, idx.zSide * idx.iSec1, idx.iCell1);
654  std::pair<int, int> typm = hdcons_.tileType(hid.layer(), hid.ring(), 0);
655  if (typm.first >= 0) {
656  hid.setType(typm.first);
657  hid.setSiPM(typm.second);
658  }
659  id = hid.rawId();
661  id = HFNoseDetId(idx.zSide, idx.iType, idx.iLay, idx.iSec1, idx.iSec2, idx.iCell1, idx.iCell2).rawId();
662  } else {
663  id = HGCSiliconDetId(
664  (DetId::Detector)(idx.det), idx.zSide, idx.iType, idx.iLay, idx.iSec1, idx.iSec2, idx.iCell1, idx.iCell2)
665  .rawId();
666  }
667  return id;
668 }
Log< level::Info, true > LogVerbatim
bool tileTrapezoid() const
bool waferHexagon6() const
ForwardSubdetector
DetId::Detector det_
std::pair< int, int > tileType(int layer, int ring, int phi) const
ForwardSubdetector subdet_
const HGCalDDDConstants & hdcons_
Definition: DetId.h:17
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
Detector
Definition: DetId.h:24

◆ geomDenseId2decId()

HGCalTopology::DecodedDetId HGCalTopology::geomDenseId2decId ( const uint32_t &  hi) const

Definition at line 525 of file HGCalTopology.cc.

References cellMax_, firstLay_, EcalPhiSymFlatTableProducers_cfi::id, kHGeomHalf_, layers_, sectors_, tileTrapezoid(), totalGeomModules(), waferHexagon6(), waferMax_, and waferOff_.

525  {
527  if (hi < totalGeomModules()) {
528  id.zSide = (static_cast<int>(hi) < kHGeomHalf_ ? -1 : 1);
529  int di = (static_cast<int>(hi) % kHGeomHalf_);
530  if (waferHexagon6()) {
531  id.iSec1 = (di % sectors_);
532  di = (di - id.iSec1) / sectors_;
533  id.iLay = (di % layers_) + 1;
534  id.iType = ((di - id.iLay + 1) / layers_ == 0) ? -1 : 1;
535 #ifdef EDM_ML_DEBUG
536  edm::LogVerbatim("HGCalGeom") << "Geom Hex I/P " << hi << " O/P " << id.zSide << ":" << id.iType << ":" << id.iLay
537  << ":" << id.iSec1;
538 #endif
539  } else if (tileTrapezoid()) {
540  id.iCell1 = (di % cellMax_) + 1;
541  di = (di - id.iCell1 + 1) / cellMax_;
542  id.iSec1 = (di % sectors_) + 1;
543  di = (di - id.iSec1 + 1) / sectors_;
544  id.iLay = (di % layers_) + firstLay_;
545  id.iType = (di - id.iLay + firstLay_) / layers_;
546 #ifdef EDM_ML_DEBUG
547  edm::LogVerbatim("HGCalGeom") << "Geom Trap I/P " << hi << " O/P " << id.zSide << ":" << id.iType << ":"
548  << id.iLay << ":" << id.iSec1 << ":" << id.iCell1;
549 #endif
550  } else {
551  id.iSec2 = (di % waferMax_) - waferOff_;
552  di = (di - id.iSec2 - waferOff_) / waferMax_;
553  id.iSec1 = (di % waferMax_) - waferOff_;
554  di = (di - id.iSec1 - waferOff_) / waferMax_;
555  id.iLay = (di % layers_) + 1;
556  id.iType = (di - id.iLay + 1) / layers_;
557 #ifdef EDM_ML_DEBUG
558  edm::LogVerbatim("HGCalGeom") << "Geom Hex8 I/P " << hi << " O/P " << id.zSide << ":" << id.iType << ":"
559  << id.iLay << ":" << id.iSec1 << ":" << id.iSec2;
560 #endif
561  }
562  }
563  return id;
564 }
Log< level::Info, true > LogVerbatim
unsigned int totalGeomModules() const
Definition: HGCalTopology.h:93
bool tileTrapezoid() const
bool waferHexagon6() const
Definition: EPCuts.h:4

◆ geomMode()

HGCalGeometryMode::GeometryMode HGCalTopology::geomMode ( ) const
inline

Geometry mode.

Definition at line 79 of file HGCalTopology.h.

References mode_.

79 { return mode_; }
HGCalGeometryMode::GeometryMode mode_

◆ goEast()

DetId HGCalTopology::goEast ( const DetId id) const
inlineoverridevirtual

move the Topology east (positive ix)

Reimplemented from CaloSubdetectorTopology.

Definition at line 41 of file HGCalTopology.h.

References changeXY().

Referenced by east().

41 { return changeXY(id, +1, 0); }
DetId changeXY(const DetId &id, int nrStepsX, int nrStepsY) const
move the nagivator along x, y

◆ goNorth()

DetId HGCalTopology::goNorth ( const DetId id) const
inlineoverridevirtual

move the Topology north (increment iy)

Reimplemented from CaloSubdetectorTopology.

Definition at line 21 of file HGCalTopology.h.

References changeXY().

Referenced by north().

21 { return changeXY(id, 0, +1); }
DetId changeXY(const DetId &id, int nrStepsX, int nrStepsY) const
move the nagivator along x, y

◆ goSouth()

DetId HGCalTopology::goSouth ( const DetId id) const
inlineoverridevirtual

move the Topology south (decrement iy)

Reimplemented from CaloSubdetectorTopology.

Definition at line 31 of file HGCalTopology.h.

References changeXY().

Referenced by south().

31 { return changeXY(id, 0, -1); }
DetId changeXY(const DetId &id, int nrStepsX, int nrStepsY) const
move the nagivator along x, y

◆ goWest()

DetId HGCalTopology::goWest ( const DetId id) const
inlineoverridevirtual

move the Topology west (negative ix)

Reimplemented from CaloSubdetectorTopology.

Definition at line 51 of file HGCalTopology.h.

References changeXY().

Referenced by west().

51 { return changeXY(id, -1, 0); }
DetId changeXY(const DetId &id, int nrStepsX, int nrStepsY) const
move the nagivator along x, y

◆ isHFNose()

bool HGCalTopology::isHFNose ( ) const
inline

Definition at line 120 of file HGCalTopology.h.

References det_, DetId::Forward, HFNose, and subdet_.

Referenced by HGCalGeometry::getGeometryDetId(), HGCalGeometry::getSummary(), and HGCalGeometry::newCell().

120  {
121  return (((det_ == DetId::Forward) && (subdet_ == ForwardSubdetector::HFNose)) ? true : false);
122  }
DetId::Detector det_
ForwardSubdetector subdet_

◆ maskCell()

bool HGCalTopology::maskCell ( const DetId id,
int  corners = 3 
) const
inline

Definition at line 96 of file HGCalTopology.h.

References dddConstants(), and HGCalDDDConstants::maskCell().

96 { return dddConstants().maskCell(id, corners); }
bool maskCell(const DetId &id, int corners) const
const HGCalDDDConstants & dddConstants() const
Definition: HGCalTopology.h:98

◆ neighbors()

std::vector< DetId > HGCalTopology::neighbors ( const DetId id) const

Definition at line 59 of file HGCalTopology.cc.

References addHGCSCintillatorId(), addHGCSiliconId(), HGCalCell::bottomCorner, HGCalCell::bottomLeftCorner, HGCalCell::bottomLeftEdge, HGCalCell::bottomRightCorner, HGCalCell::bottomRightEdge, HGCalDDDConstants::cellType(), HGCalCell::centralCell, decode(), HGCalDDDConstants::getTypeHex(), HGCalDDDConstants::getUVMax(), hdcons_, HGCalCell::leftEdge, HGCalDDDConstants::modifyUV(), N, HGCalCell::rightEdge, RandomServiceHelper::t1, RandomServiceHelper::t2, tileTrapezoid(), HGCalCell::topCorner, HGCalCell::topLeftCorner, HGCalCell::topLeftEdge, HGCalCell::topRightCorner, HGCalCell::topRightEdge, testProducerWithPsetDescEmpty_cfi::u1, MetAnalyzer::u2, and waferHexagon8().

59  {
60  std::vector<DetId> ids;
62  if (waferHexagon8()) {
63  int celltype = hdcons_.cellType(
64  id.iType, id.iCell1, id.iCell2, id.zSide, 1, -1); // Temporary fix - later for v17 define fwd back and orient
65 #ifdef EDM_ML_DEBUG
66  edm::LogVerbatim("HGCalGeom") << "Type:WaferU:WaferV " << id.iType << ":" << id.iCell1 << ":" << id.iCell2
67  << " CellType " << celltype;
68 #endif
69  switch (celltype) {
70  case (HGCalCell::centralCell): {
71  // cell within the wafer
72 #ifdef EDM_ML_DEBUG
73  edm::LogVerbatim("HGCalGeom") << "Cell Type 0";
74 #endif
75  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2);
76  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 - 1);
77  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2 - 1);
78  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2);
79  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 + 1);
80  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2 + 1);
81  break;
82  }
84  // bottom left edge
85  int wu1(id.iSec1), wv1(id.iSec2 - 1);
86  int t1 = hdcons_.getTypeHex(id.iLay, wu1, wv1);
87  int N1 = hdcons_.getUVMax(t1);
88  int v1 = hdcons_.modifyUV(id.iCell2, id.iType, t1);
89 #ifdef EDM_ML_DEBUG
90  edm::LogVerbatim("HGCalGeom") << "Cell Type 1 "
91  << ":" << wu1 << ":" << wv1 << ":" << t1 << ":" << N1 << ":" << v1;
92 #endif
93  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2);
94  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 - 1);
95  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, 2 * N1 - 1, v1 + N1 - 1);
96  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, 2 * N1 - 1, v1 + N1);
97  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 + 1);
98  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2 + 1);
99  break;
100  }
101  case (HGCalCell::leftEdge): {
102  // left edege
103  int wu1(id.iSec1 + 1), wv1(id.iSec2);
104  int t1 = hdcons_.getTypeHex(id.iLay, wu1, wv1);
105  int N1 = hdcons_.getUVMax(t1);
106  int u1 = hdcons_.modifyUV(id.iCell1, id.iType, t1);
107 #ifdef EDM_ML_DEBUG
108  edm::LogVerbatim("HGCalGeom") << "Cell Type 2 "
109  << ":" << wu1 << ":" << wv1 << ":" << t1 << ":" << N1 << ":" << u1;
110 #endif
111  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2);
112  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, u1 + N1, 2 * N1 - 1);
113  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, u1 + N1 - 1, 2 * N1 - 1);
114  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2);
115  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 + 1);
116  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2 + 1);
117  break;
118  }
119  case (HGCalCell::topLeftEdge): {
120  // top left edge
121  int wu1(id.iSec1 + 1), wv1(id.iSec2 + 1);
122  int t1 = hdcons_.getTypeHex(id.iLay, wu1, wv1);
123  int N1 = hdcons_.getUVMax(t1);
124  int v1 = hdcons_.modifyUV(id.iCell2, id.iType, t1);
125 #ifdef EDM_ML_DEBUG
126  edm::LogVerbatim("HGCalGeom") << "Cell Type 3 "
127  << ":" << wu1 << ":" << wv1 << ":" << t1 << ":" << N1 << ":" << v1;
128 #endif
129  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, v1 + 1, v1 + N1);
130  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, v1, v1 + N1 - 1);
131  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2 - 1);
132  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2);
133  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 + 1);
134  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2 + 1);
135  break;
136  }
137  case (HGCalCell::topRightEdge): {
138  // top right edge
139  int wu1(id.iSec1), wv1(id.iSec2 + 1);
140  int t1 = hdcons_.getTypeHex(id.iLay, wu1, wv1);
141  int N1 = hdcons_.getUVMax(t1);
142  int v1 = hdcons_.modifyUV(id.iCell2, id.iType, t1);
143 #ifdef EDM_ML_DEBUG
144  edm::LogVerbatim("HGCalGeom") << "Cell Type 4 "
145  << ":" << wu1 << ":" << wv1 << ":" << t1 << ":" << N1 << ":" << v1;
146 #endif
147  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, 0, v1 - N1);
148  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 - 1);
149  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2 - 1);
150  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2);
151  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 + 1);
152  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, 0, v1 - N1 + 1);
153  break;
154  }
155  case (HGCalCell::rightEdge): {
156  // right edge
157  int wu1(id.iSec1 - 1), wv1(id.iSec2);
158  int t1 = hdcons_.getTypeHex(id.iLay, wu1, wv1);
159  int N1 = hdcons_.getUVMax(t1);
160  int u1 = hdcons_.modifyUV(id.iCell1, id.iType, t1);
161 #ifdef EDM_ML_DEBUG
162  edm::LogVerbatim("HGCalGeom") << "Cell Type 5 "
163  << ":" << wu1 << ":" << wv1 << ":" << t1 << ":" << N1 << ":" << u1;
164 #endif
165  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2);
166  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 - 1);
167  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2 - 1);
168  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2);
169  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, u1 - N1, 0);
170  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, u1 - N1 + 1, 0);
171  break;
172  }
174  // bottom right edge
175  int wu1(id.iSec1 - 1), wv1(id.iSec2 - 1);
176  int t1 = hdcons_.getTypeHex(id.iLay, wu1, wv1);
177  int N1 = hdcons_.getUVMax(t1);
178  int u1 = hdcons_.modifyUV(id.iCell1, id.iType, t1);
179 #ifdef EDM_ML_DEBUG
180  edm::LogVerbatim("HGCalGeom") << "Cell Type 6 "
181  << ":" << wu1 << ":" << wv1 << ":" << t1 << ":" << N1 << ":" << u1;
182 #endif
183  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2);
184  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 - 1);
185  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2 - 1);
186  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, u1 + N1 - 1, u1 - 1);
187  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, u1 + N1, u1);
188  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2 + 1);
189  break;
190  }
191  case (HGCalCell::bottomCorner): {
192  // bottom corner
193  int wu1(id.iSec1), wv1(id.iSec2 - 1);
194  int t1 = hdcons_.getTypeHex(id.iLay, wu1, wv1);
195  int N1 = hdcons_.getUVMax(t1);
196  int v1 = hdcons_.modifyUV(id.iCell2, id.iType, t1);
197  int wu2(id.iSec1 - 1), wv2(id.iSec2 - 1);
198  int t2 = hdcons_.getTypeHex(id.iLay, wu2, wv2);
199  int N2 = hdcons_.getUVMax(t2);
200  int u2 = hdcons_.modifyUV(id.iCell1, id.iType, t2);
201 #ifdef EDM_ML_DEBUG
202  edm::LogVerbatim("HGCalGeom") << "Cell Type 11 "
203  << ":" << wu1 << ":" << wv1 << ":" << t1 << ":" << N1 << ":" << v1 << ":" << t2
204  << ":" << N2 << ":" << u2;
205 #endif
206  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2);
207  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 - 1);
208  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, 2 * N1 - 1, v1 + N1 - 1);
209  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, 2 * N1 - 1, v1 + N1);
210  addHGCSiliconId(ids, id.det, id.zSide, t2, id.iLay, wu2, wv2, u2 + N2, u2);
211  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2 + 1);
212  break;
213  }
215  // bottom left corner
216  int wu1(id.iSec1 + 1), wv1(id.iSec2);
217  int t1 = hdcons_.getTypeHex(id.iLay, wu1, wv1);
218  int N1 = hdcons_.getUVMax(t1);
219  int u1 = hdcons_.modifyUV(id.iCell1, id.iType, t1);
220  int wu2(id.iSec1), wv2(id.iSec2 - 1);
221  int t2 = hdcons_.getTypeHex(id.iLay, wu2, wv2);
222  int N2 = hdcons_.getUVMax(t2);
223  int v2 = hdcons_.modifyUV(id.iCell2, id.iType, t2);
224 #ifdef EDM_ML_DEBUG
225  edm::LogVerbatim("HGCalGeom") << "Cell Type 12 "
226  << ":" << wu1 << ":" << wv1 << ":" << t1 << ":" << N1 << ":" << u1 << ":" << t2
227  << ":" << N2 << ":" << v2;
228 #endif
229  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2);
230  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, u1 + N1, 2 * N1 - 1);
231  addHGCSiliconId(ids, id.det, id.zSide, t2, id.iLay, wu2, wv2, 2 * N2 - 1, v2 + N2 - 1);
232  addHGCSiliconId(ids, id.det, id.zSide, t2, id.iLay, wu2, wv2, 2 * N2 - 1, v2 + N2);
233  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 + 1);
234  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2 + 1);
235  break;
236  }
237  case (HGCalCell::topLeftCorner): {
238  // top left corner
239  int wu1(id.iSec1 + 1), wv1(id.iSec2 + 1);
240  int t1 = hdcons_.getTypeHex(id.iLay, wu1, wv1);
241  int N1 = hdcons_.getUVMax(t1);
242  int v1 = hdcons_.modifyUV(id.iCell2, id.iType, t1);
243  int wu2(id.iSec1 + 1), wv2(id.iSec2);
244  int t2 = hdcons_.getTypeHex(id.iLay, wu2, wv2);
245  int N2 = hdcons_.getUVMax(t2);
246  int u2 = hdcons_.modifyUV(id.iCell1, id.iType, t2);
247 #ifdef EDM_ML_DEBUG
248  edm::LogVerbatim("HGCalGeom") << "Cell Type 13 "
249  << ":" << wu1 << ":" << wv1 << ":" << t1 << ":" << N1 << ":" << v1 << ":" << t2
250  << ":" << N2 << ":" << u2;
251 #endif
252  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, v1 + 1, N1 + v1);
253  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, v1, N1 + v1 - 1);
254  addHGCSiliconId(ids, id.det, id.zSide, t2, id.iLay, wu2, wv2, u2 + N2 - 1, 2 * N2 - 1);
255  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2);
256  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 + 1);
257  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2 + 1);
258  break;
259  }
260  case (HGCalCell::topCorner): {
261  // top corner
262  int wu1(id.iSec1 + 1), wv1(id.iSec2 + 1);
263  int t1 = hdcons_.getTypeHex(id.iLay, wu1, wv1);
264  int N1 = hdcons_.getUVMax(t1);
265  int v1 = hdcons_.modifyUV(id.iCell2, id.iType, t1);
266  int wu2(id.iSec1), wv2(id.iSec2 + 1);
267  int t2 = hdcons_.getTypeHex(id.iLay, wu2, wv2);
268  int N2 = hdcons_.getUVMax(t2);
269  int v2 = hdcons_.modifyUV(id.iCell2, id.iType, t2);
270 #ifdef EDM_ML_DEBUG
271  edm::LogVerbatim("HGCalGeom") << "Cell Type 14 "
272  << ":" << wu1 << ":" << wv1 << ":" << t1 << ":" << N1 << ":" << v1 << ":" << t2
273  << ":" << N2 << ":" << v2;
274 #endif
275  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, v1 + 1, v1 + N1);
276  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, v1, v1 + N1 - 1);
277  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2 - 1);
278  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2);
279  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 + 1);
280  addHGCSiliconId(ids, id.det, id.zSide, t2, id.iLay, wu2, wv2, 0, v2 - N2 + 1);
281  break;
282  }
283  case (HGCalCell::topRightCorner): {
284  // top right corner
285  int wu1(id.iSec1), wv1(id.iSec2 + 1);
286  int t1 = hdcons_.getTypeHex(id.iLay, wu1, wv1);
287  int N1 = hdcons_.getUVMax(t1);
288  int v1 = hdcons_.modifyUV(id.iCell2, id.iType, t1);
289  int wu2(id.iSec1 - 1), wv2(id.iSec2);
290  int t2 = hdcons_.getTypeHex(id.iLay, wu2, wv2);
291  int N2 = hdcons_.getUVMax(t2);
292  int u2 = hdcons_.modifyUV(id.iCell1, id.iType, t2);
293 #ifdef EDM_ML_DEBUG
294  edm::LogVerbatim("HGCalGeom") << "Cell Type 15 "
295  << ":" << wu1 << ":" << wv1 << ":" << t1 << ":" << N1 << ":" << v1 << ":" << t2
296  << ":" << N2 << ":" << u2;
297 #endif
298  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, 0, v1 - N1);
299  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 - 1);
300  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2 - 1);
301  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2);
302  addHGCSiliconId(ids, id.det, id.zSide, t2, id.iLay, wu2, wv2, u2 - N2, 0);
303  addHGCSiliconId(ids, id.det, id.zSide, t2, id.iLay, wu2, wv2, u2 - N2 + 1, 0);
304  break;
305  }
307  // bottom right corner
308  int wu1(id.iSec1 - 1), wv1(id.iSec2 - 1);
309  int t1 = hdcons_.getTypeHex(id.iLay, wu1, wv1);
310  int N1 = hdcons_.getUVMax(t1);
311  int u1 = hdcons_.modifyUV(id.iCell1, id.iType, t1);
312  int wu2(id.iSec1 - 1), wv2(id.iSec2);
313  int t2 = hdcons_.getTypeHex(id.iLay, wu2, wv2);
314  int N2 = hdcons_.getUVMax(t2);
315  int u2 = hdcons_.modifyUV(id.iCell1, id.iType, t2);
316 #ifdef EDM_ML_DEBUG
317  edm::LogVerbatim("HGCalGeom") << "Cell Type 16 "
318  << ":" << wu1 << ":" << wv1 << ":" << t1 << ":" << N1 << ":" << u1 << ":" << t2
319  << ":" << N2 << ":" << u2;
320 #endif
321  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 + 1, id.iCell2);
322  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2 - 1);
323  addHGCSiliconId(ids, id.det, id.zSide, id.iType, id.iLay, id.iSec1, id.iSec2, id.iCell1 - 1, id.iCell2 - 1);
324  addHGCSiliconId(ids, id.det, id.zSide, t1, id.iLay, wu1, wv1, u1 + N1 - 1, u1 - 1);
325  addHGCSiliconId(ids, id.det, id.zSide, t2, id.iLay, wu2, wv2, u2 - N2, 0);
326  addHGCSiliconId(ids, id.det, id.zSide, t2, id.iLay, wu2, wv2, u2 - N2 + 1, 0);
327  break;
328  }
329  default:
330  // Not valid u, v
331  int N = hdcons_.getUVMax(id.iType);
332  edm::LogWarning("HGCalGeom") << "u:v " << id.iCell1 << ":" << id.iCell2 << " Tests " << (id.iCell1 > 2 * N - 1)
333  << ":" << (id.iCell2 > 2 * N - 1) << ":" << (id.iCell2 >= (id.iCell1 + N)) << ":"
334  << (id.iCell1 > (id.iCell2 + N)) << " ERROR";
335  }
336  } else if (tileTrapezoid()) {
337  int iphi1 = (id.iCell1 > 1) ? id.iCell1 - 1 : hdcons_.getUVMax(id.iType);
338  int iphi2 = (id.iCell1 < hdcons_.getUVMax(id.iType)) ? id.iCell1 + 1 : 1;
339  addHGCSCintillatorId(ids, id.zSide, id.iType, id.iLay, id.iSec1 - 1, id.iCell1);
340  addHGCSCintillatorId(ids, id.zSide, id.iType, id.iLay, id.iSec1 - 1, iphi1);
341  addHGCSCintillatorId(ids, id.zSide, id.iType, id.iLay, id.iSec1, iphi1);
342  addHGCSCintillatorId(ids, id.zSide, id.iType, id.iLay, id.iSec1 + 1, iphi1);
343  addHGCSCintillatorId(ids, id.zSide, id.iType, id.iLay, id.iSec1 + 1, id.iCell1);
344  addHGCSCintillatorId(ids, id.zSide, id.iType, id.iLay, id.iSec1 + 1, iphi2);
345  addHGCSCintillatorId(ids, id.zSide, id.iType, id.iLay, id.iSec1, iphi2);
346  addHGCSCintillatorId(ids, id.zSide, id.iType, id.iLay, id.iSec1 - 1, iphi2);
347  }
348  return ids;
349 }
Log< level::Info, true > LogVerbatim
static constexpr int32_t topCorner
Definition: HGCalCell.h:62
bool tileTrapezoid() const
static constexpr int32_t leftEdge
Definition: HGCalCell.h:54
int32_t cellType(int type, int waferU, int waferV, int iz, int fwdBack, int orient) const
static constexpr int32_t topLeftCorner
Definition: HGCalCell.h:61
int getTypeHex(int layer, int waferU, int waferV) const
static constexpr int32_t bottomLeftCorner
Definition: HGCalCell.h:60
int getUVMax(int type) const
DecodedDetId decode(const DetId &id) const
static constexpr int32_t topRightCorner
Definition: HGCalCell.h:63
static constexpr int32_t bottomRightEdge
Definition: HGCalCell.h:58
const HGCalDDDConstants & hdcons_
static constexpr int32_t bottomLeftEdge
Definition: HGCalCell.h:53
void addHGCSCintillatorId(std::vector< DetId > &ids, int zside, int type, int lay, int iradius, int iphi) const
add DetId of Scintillator and Silicon type if valid
static constexpr int32_t bottomRightCorner
Definition: HGCalCell.h:64
#define N
Definition: blowfish.cc:9
static constexpr int32_t centralCell
Definition: HGCalCell.h:52
static constexpr int32_t topRightEdge
Definition: HGCalCell.h:56
bool waferHexagon8() const
void addHGCSiliconId(std::vector< DetId > &ids, int det, int zside, int type, int lay, int waferU, int waferV, int cellU, int cellV) const
static constexpr int32_t rightEdge
Definition: HGCalCell.h:57
static constexpr int32_t bottomCorner
Definition: HGCalCell.h:59
int modifyUV(int uv, int type1, int type2) const
Log< level::Warning, false > LogWarning
static constexpr int32_t topLeftEdge
Definition: HGCalCell.h:55

◆ north()

std::vector<DetId> HGCalTopology::north ( const DetId id) const
inlineoverridevirtual

Get the neighbors of the given cell in north direction

Implements CaloSubdetectorTopology.

Definition at line 22 of file HGCalTopology.h.

References goNorth().

22  {
23  DetId nextId = goNorth(id);
24  std::vector<DetId> vNeighborsDetId;
25  if (!(nextId == DetId(0)))
26  vNeighborsDetId.emplace_back(nextId);
27  return vNeighborsDetId;
28  }
DetId goNorth(const DetId &id) const override
move the Topology north (increment iy)
Definition: HGCalTopology.h:21
Definition: DetId.h:17

◆ offsetBy()

DetId HGCalTopology::offsetBy ( const DetId  startId,
int  nrStepsX,
int  nrStepsY 
) const

returns a new DetId offset by nrStepsX and nrStepsY (can be negative), returns DetId(0) if invalid

Definition at line 506 of file HGCalTopology.cc.

References changeXY(), DetId::det(), DetId::Forward, EcalPhiSymFlatTableProducers_cfi::id, subdet_, DetId::subdetId(), and valid().

506  {
507  if (startId.det() == DetId::Forward && startId.subdetId() == static_cast<int>(subdet_)) {
508  DetId id = changeXY(startId, nrStepsX, nrStepsY);
509  if (valid(id))
510  return id;
511  }
512  return DetId(0);
513 }
DetId changeXY(const DetId &id, int nrStepsX, int nrStepsY) const
move the nagivator along x, y
bool valid(const DetId &id) const override
Is this a valid cell id.
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
ForwardSubdetector subdet_
Definition: DetId.h:17

◆ south()

std::vector<DetId> HGCalTopology::south ( const DetId id) const
inlineoverridevirtual

Get the neighbors of the given cell in south direction

Implements CaloSubdetectorTopology.

Definition at line 32 of file HGCalTopology.h.

References goSouth().

32  {
33  DetId nextId = goSouth(id);
34  std::vector<DetId> vNeighborsDetId;
35  if (!(nextId == DetId(0)))
36  vNeighborsDetId.emplace_back(nextId);
37  return vNeighborsDetId;
38  }
Definition: DetId.h:17
DetId goSouth(const DetId &id) const override
move the Topology south (decrement iy)
Definition: HGCalTopology.h:31

◆ subDetector()

ForwardSubdetector HGCalTopology::subDetector ( ) const
inline

Definition at line 118 of file HGCalTopology.h.

References subdet_.

118 { return subdet_; }
ForwardSubdetector subdet_

◆ switchZSide()

DetId HGCalTopology::switchZSide ( const DetId  startId) const

Definition at line 515 of file HGCalTopology.cc.

References decode(), encode(), EcalPhiSymFlatTableProducers_cfi::id, valid(), and HGCalTopology::DecodedDetId::zSide.

515  {
516  HGCalTopology::DecodedDetId id_ = decode(startId);
517  id_.zSide = -id_.zSide;
518  DetId id = encode(id_);
519  if (valid(id))
520  return id;
521  else
522  return DetId(0);
523 }
bool valid(const DetId &id) const override
Is this a valid cell id.
DecodedDetId decode(const DetId &id) const
Definition: DetId.h:17
DetId encode(const DecodedDetId &id_) const

◆ tileTrapezoid()

bool HGCalTopology::tileTrapezoid ( ) const
inline

◆ totalGeomModules()

unsigned int HGCalTopology::totalGeomModules ( ) const
inline

Definition at line 93 of file HGCalTopology.h.

References kHGeomHalf_.

Referenced by geomDenseId2decId(), HGCalGeometry::getSummary(), HGCalGeometry::HGCalGeometry(), and HGCalGeometry::sizeForDenseIndex().

93 { return (unsigned int)(2 * kHGeomHalf_); }

◆ totalModules()

unsigned int HGCalTopology::totalModules ( ) const
inline

Definition at line 92 of file HGCalTopology.h.

References kSizeForDenseIndexing.

Referenced by HGCalGeometry::HGCalGeometry().

92 { return kSizeForDenseIndexing; }
unsigned int kSizeForDenseIndexing

◆ up()

std::vector<DetId> HGCalTopology::up ( const DetId id) const
inlineoverridevirtual

Get the neighbors of the given cell in up direction (outward)

Implements CaloSubdetectorTopology.

Definition at line 60 of file HGCalTopology.h.

References changeZ().

60  {
61  DetId nextId = changeZ(id, +1);
62  std::vector<DetId> vNeighborsDetId;
63  if (!(nextId == DetId(0)))
64  vNeighborsDetId.emplace_back(nextId);
65  return vNeighborsDetId;
66  }
Definition: DetId.h:17
DetId changeZ(const DetId &id, int nrStepsZ) const
move the nagivator along z

◆ valid() [1/2]

bool HGCalTopology::valid ( const DetId id) const
overridevirtual

Is this a valid cell id.

Reimplemented from CaloSubdetectorTopology.

Definition at line 466 of file HGCalTopology.cc.

References decode(), DetId::det(), det_, RemoveAddSevLevel::flag, hdcons_, HGCalDDDConstants::isValidHex(), HGCalDDDConstants::isValidHex8(), HGCalDDDConstants::isValidTrap(), sectors_, subdet_, DetId::subdetId(), tileTrapezoid(), and waferHexagon6().

Referenced by HGCDigitizer::checkPosition(), HGCalGeometry::newCell(), offsetBy(), switchZSide(), valid(), HGCalTriggerGeometryV9Imp2::validCell(), HGCalTriggerGeometryV9Imp3::validCell(), HGCalTriggerGeometryV9Imp2::validCellId(), HGCalTriggerGeometryV9Imp3::validCellId(), and validModule().

466  {
468  bool flag;
469  if (waferHexagon6()) {
470  flag = (idin.det() == det_ && idin.subdetId() == static_cast<int>(subdet_) && id.iCell1 >= 0 &&
471  id.iCell1 < cells_ && id.iLay > 0 && id.iLay <= layers_ && id.iSec1 >= 0 && id.iSec1 <= sectors_);
472  if (flag)
473  flag = hdcons_.isValidHex(id.iLay, id.iSec1, id.iCell1, true);
474  } else if (tileTrapezoid()) {
475  flag = ((idin.det() == det_) && hdcons_.isValidTrap(id.zSide, id.iLay, id.iSec1, id.iCell1));
476  } else {
477  flag = ((idin.det() == det_) && hdcons_.isValidHex8(id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2, false));
478  }
479  return flag;
480 }
bool tileTrapezoid() const
bool isValidHex(int lay, int mod, int cell, bool reco) const
bool waferHexagon6() const
bool isValidHex8(int lay, int waferU, int waferV, bool fullAndPart) const
DetId::Detector det_
DecodedDetId decode(const DetId &id) const
bool isValidTrap(int zside, int lay, int ieta, int iphi) const
ForwardSubdetector subdet_
const HGCalDDDConstants & hdcons_

◆ valid() [2/2]

bool HGCalTopology::valid ( const DetId id,
int  cornerMin 
) const

Definition at line 482 of file HGCalTopology.cc.

References decode(), DetId::det(), det_, RemoveAddSevLevel::flag, hdcons_, HGCalDDDConstants::isValidHex8(), ALPAKA_ACCELERATOR_NAMESPACE::pixelClustering::pixelStatus::mask, HGCalDDDConstants::maskCell(), valid(), HGCalTypes::WaferCornerMin, and waferHexagon8().

482  {
483  if (waferHexagon8()) {
485  bool mask = (cornerMin < HGCalTypes::WaferCornerMin) ? false : hdcons_.maskCell(idin, cornerMin);
486  bool flag = ((idin.det() == det_) &&
488  id.iLay, id.iSec1, id.iSec2, id.iCell1, id.iCell2, (cornerMin >= HGCalTypes::WaferCornerMin)));
489  return (flag && (!mask));
490  } else {
491  return valid(idin);
492  }
493 }
bool maskCell(const DetId &id, int corners) const
bool valid(const DetId &id) const override
Is this a valid cell id.
bool isValidHex8(int lay, int waferU, int waferV, bool fullAndPart) const
DetId::Detector det_
DecodedDetId decode(const DetId &id) const
const HGCalDDDConstants & hdcons_
bool waferHexagon8() const
static constexpr int32_t WaferCornerMin
Definition: HGCalTypes.h:76

◆ validHashIndex()

bool HGCalTopology::validHashIndex ( uint32_t  ix) const
inline

Definition at line 89 of file HGCalTopology.h.

References ALPAKA_ACCELERATOR_NAMESPACE::ecal::reconstruction::internal::endcap::ix(), and kSizeForDenseIndexing.

Referenced by denseId2detId().

89 { return (ix < kSizeForDenseIndexing); }
ALPAKA_FN_ACC ALPAKA_FN_INLINE uint32_t ix(uint32_t id)
unsigned int kSizeForDenseIndexing

◆ validModule()

bool HGCalTopology::validModule ( const DetId id,
int  cornerMin 
) const

Definition at line 495 of file HGCalTopology.cc.

References decode(), DetId::det(), det_, hdcons_, DetId::HGCalEE, DetId::HGCalHSi, HGCalDDDConstants::isValidHex8(), valid(), and HGCalTypes::WaferCornerMin.

495  {
496  if (idin.det() != det_) {
497  return false;
498  } else if ((idin.det() == DetId::HGCalEE) || (idin.det() == DetId::HGCalHSi)) {
500  return hdcons_.isValidHex8(id.iLay, id.iSec1, id.iSec2, (cornerMin >= HGCalTypes::WaferCornerMin));
501  } else {
502  return valid(idin);
503  }
504 }
bool valid(const DetId &id) const override
Is this a valid cell id.
bool isValidHex8(int lay, int waferU, int waferV, bool fullAndPart) const
DetId::Detector det_
DecodedDetId decode(const DetId &id) const
const HGCalDDDConstants & hdcons_
static constexpr int32_t WaferCornerMin
Definition: HGCalTypes.h:76

◆ waferHexagon6()

bool HGCalTopology::waferHexagon6 ( ) const
inline

◆ waferHexagon8()

bool HGCalTopology::waferHexagon8 ( ) const
inline

Definition at line 126 of file HGCalTopology.h.

References hdcons_, and HGCalDDDConstants::waferHexagon8().

Referenced by HGCalGeometry::getClosestCellHex(), neighbors(), and valid().

126 { return hdcons_.waferHexagon8(); }
bool waferHexagon8() const
const HGCalDDDConstants & hdcons_

◆ west()

std::vector<DetId> HGCalTopology::west ( const DetId id) const
inlineoverridevirtual

Get the neighbors of the given cell in west direction

Implements CaloSubdetectorTopology.

Definition at line 52 of file HGCalTopology.h.

References goWest().

52  {
53  DetId nextId = goWest(id);
54  std::vector<DetId> vNeighborsDetId;
55  if (!(nextId == DetId(0)))
56  vNeighborsDetId.emplace_back(nextId);
57  return vNeighborsDetId;
58  }
Definition: DetId.h:17
DetId goWest(const DetId &id) const override
move the Topology west (negative ix)
Definition: HGCalTopology.h:51

Member Data Documentation

◆ cellMax_

int HGCalTopology::cellMax_
private

◆ cells_

int HGCalTopology::cells_
private

Definition at line 146 of file HGCalTopology.h.

Referenced by HGCalTopology().

◆ det_

DetId::Detector HGCalTopology::det_
private

Definition at line 144 of file HGCalTopology.h.

Referenced by decode(), detector(), encode(), HGCalTopology(), isHFNose(), valid(), and validModule().

◆ firstLay_

int HGCalTopology::firstLay_
private

◆ hdcons_

const HGCalDDDConstants& HGCalTopology::hdcons_
private

◆ kHGeomHalf_

int HGCalTopology::kHGeomHalf_
private

◆ kHGhalf_

int HGCalTopology::kHGhalf_
private

Definition at line 148 of file HGCalTopology.h.

Referenced by HGCalTopology().

◆ kHGhalfType_

int HGCalTopology::kHGhalfType_
private

Definition at line 148 of file HGCalTopology.h.

Referenced by denseId2detId(), detId2denseId(), and HGCalTopology().

◆ kSizeForDenseIndexing

unsigned int HGCalTopology::kSizeForDenseIndexing
private

Definition at line 149 of file HGCalTopology.h.

Referenced by HGCalTopology(), totalModules(), and validHashIndex().

◆ layers_

int HGCalTopology::layers_
private

◆ mode_

HGCalGeometryMode::GeometryMode HGCalTopology::mode_
private

Definition at line 142 of file HGCalTopology.h.

Referenced by geomMode(), and HGCalTopology().

◆ sectors_

int HGCalTopology::sectors_
private

◆ subdet_

ForwardSubdetector HGCalTopology::subdet_
private

Definition at line 145 of file HGCalTopology.h.

Referenced by decode(), encode(), HGCalTopology(), isHFNose(), offsetBy(), subDetector(), and valid().

◆ subSectors_

const int HGCalTopology::subSectors_ = 2
static

Use subSector in square mode as wafer type in hexagon mode.

Definition at line 106 of file HGCalTopology.h.

◆ types_

int HGCalTopology::types_
private

Definition at line 146 of file HGCalTopology.h.

Referenced by denseId2detId(), detId2denseId(), and HGCalTopology().

◆ waferMax_

int HGCalTopology::waferMax_
private

◆ waferOff_

int HGCalTopology::waferOff_
private