CMS 3D CMS Logo

HGCalTopology.h
Go to the documentation of this file.
1 #ifndef Geometry_CaloTopology_HGCalTopology_h
2 #define Geometry_CaloTopology_HGCalTopology_h 1
3 
9 #include <vector>
10 #include <iostream>
11 
13 public:
15  HGCalTopology(const HGCalDDDConstants& hdcons, int subdet);
16 
18  ~HGCalTopology() override = default;
19 
21  DetId goNorth(const DetId& id) const override { return changeXY(id, 0, +1); }
22  std::vector<DetId> north(const DetId& id) const override {
23  DetId nextId = goNorth(id);
24  std::vector<DetId> vNeighborsDetId;
25  if (!(nextId == DetId(0)))
26  vNeighborsDetId.emplace_back(nextId);
27  return vNeighborsDetId;
28  }
29 
31  DetId goSouth(const DetId& id) const override { return changeXY(id, 0, -1); }
32  std::vector<DetId> south(const DetId& id) const override {
33  DetId nextId = goSouth(id);
34  std::vector<DetId> vNeighborsDetId;
35  if (!(nextId == DetId(0)))
36  vNeighborsDetId.emplace_back(nextId);
37  return vNeighborsDetId;
38  }
39 
41  DetId goEast(const DetId& id) const override { return changeXY(id, +1, 0); }
42  std::vector<DetId> east(const DetId& id) const override {
43  DetId nextId = goEast(id);
44  std::vector<DetId> vNeighborsDetId;
45  if (!(nextId == DetId(0)))
46  vNeighborsDetId.emplace_back(nextId);
47  return vNeighborsDetId;
48  }
49 
51  DetId goWest(const DetId& id) const override { return changeXY(id, -1, 0); }
52  std::vector<DetId> west(const DetId& id) const override {
53  DetId nextId = goWest(id);
54  std::vector<DetId> vNeighborsDetId;
55  if (!(nextId == DetId(0)))
56  vNeighborsDetId.emplace_back(nextId);
57  return vNeighborsDetId;
58  }
59 
60  std::vector<DetId> up(const DetId& id) const override {
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  }
67 
68  std::vector<DetId> down(const DetId& id) const override {
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  }
75 
76  std::vector<DetId> neighbors(const DetId& id) const;
77 
80 
82  uint32_t detId2denseId(const DetId& id) const override;
83  DetId denseId2detId(uint32_t denseId) const override;
84  virtual uint32_t detId2denseGeomId(const DetId& id) const;
85 
87  bool valid(const DetId& id) const override;
88  bool valid(const DetId& id, int cornerMin) const;
89  bool validHashIndex(uint32_t ix) const { return (ix < kSizeForDenseIndexing); }
90  bool validModule(const DetId& id, int cornerMin) const;
91 
92  unsigned int totalModules() const { return kSizeForDenseIndexing; }
93  unsigned int totalGeomModules() const { return (unsigned int)(2 * kHGeomHalf_); }
94  unsigned int allGeomModules() const;
95 
96  bool maskCell(const DetId& id, int corners = 3) const { return dddConstants().maskCell(id, corners); }
97 
98  const HGCalDDDConstants& dddConstants() const { return hdcons_; }
99 
102  DetId offsetBy(const DetId startId, int nrStepsX, int nrStepsY) const;
103  DetId switchZSide(const DetId startId) const;
104 
106  static const int subSectors_ = 2;
107 
108  struct DecodedDetId {
109  DecodedDetId() : iCell1(0), iCell2(0), iLay(0), iSec1(0), iSec2(0), iType(0), zSide(0), det(0) {}
111  };
112 
113  DecodedDetId geomDenseId2decId(const uint32_t& hi) const;
114  DecodedDetId decode(const DetId& id) const;
115  DetId encode(const DecodedDetId& id_) const;
116 
117  DetId::Detector detector() const { return det_; }
119  bool detectorType() const { return false; }
120  bool isHFNose() const {
121  return (((det_ == DetId::Forward) && (subdet_ == ForwardSubdetector::HFNose)) ? true : false);
122  }
123 
124  bool tileTrapezoid() const { return hdcons_.tileTrapezoid(); }
125  bool waferHexagon6() const { return hdcons_.waferHexagon6(); }
126  bool waferHexagon8() const { return hdcons_.waferHexagon8(); }
127 
128 private:
130  void addHGCSCintillatorId(std::vector<DetId>& ids, int zside, int type, int lay, int iradius, int iphi) const;
131  void addHGCSiliconId(
132  std::vector<DetId>& ids, int det, int zside, int type, int lay, int waferU, int waferV, int cellU, int cellV)
133  const;
134 
136  DetId changeXY(const DetId& id, int nrStepsX, int nrStepsY) const;
137 
139  DetId changeZ(const DetId& id, int nrStepsZ) const;
140 
143 
149  unsigned int kSizeForDenseIndexing;
150 };
151 
152 #endif
bool maskCell(const DetId &id, int corners) const
std::vector< DetId > east(const DetId &id) const override
Definition: HGCalTopology.h:42
std::vector< DetId > down(const DetId &id) const override
Definition: HGCalTopology.h:68
unsigned int totalGeomModules() const
Definition: HGCalTopology.h:93
DetId::Detector detector() const
HGCalGeometryMode::GeometryMode mode_
bool tileTrapezoid() const
int32_t waferU(const int32_t index)
DetId changeXY(const DetId &id, int nrStepsX, int nrStepsY) const
move the nagivator along x, y
bool detectorType() const
bool valid(const DetId &id) const override
Is this a valid cell id.
std::vector< DetId > up(const DetId &id) const override
Definition: HGCalTopology.h:60
unsigned int totalModules() const
Definition: HGCalTopology.h:92
bool waferHexagon6() const
std::vector< DetId > north(const DetId &id) const override
Definition: HGCalTopology.h:22
HGCalGeometryMode::GeometryMode geomMode() const
Geometry mode.
Definition: HGCalTopology.h:79
bool waferHexagon8() const
int zside(DetId const &)
DetId goEast(const DetId &id) const override
move the Topology east (positive ix)
Definition: HGCalTopology.h:41
ForwardSubdetector
bool waferHexagon6() const
DetId::Detector det_
std::vector< DetId > south(const DetId &id) const override
Definition: HGCalTopology.h:32
ForwardSubdetector subDetector() const
Definition: EPCuts.h:4
bool validHashIndex(uint32_t ix) const
Definition: HGCalTopology.h:89
virtual uint32_t detId2denseGeomId(const DetId &id) const
DetId goNorth(const DetId &id) const override
move the Topology north (increment iy)
Definition: HGCalTopology.h:21
DecodedDetId decode(const DetId &id) const
static const int subSectors_
Use subSector in square mode as wafer type in hexagon mode.
bool validModule(const DetId &id, int cornerMin) const
uint32_t detId2denseId(const DetId &id) const override
Dense indexing.
bool tileTrapezoid() const
ForwardSubdetector subdet_
const HGCalDDDConstants & hdcons_
bool maskCell(const DetId &id, int corners=3) const
Definition: HGCalTopology.h:96
bool isHFNose() const
DetId offsetBy(const DetId startId, int nrStepsX, int nrStepsY) const
std::vector< DetId > west(const DetId &id) const override
Definition: HGCalTopology.h:52
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
ALPAKA_FN_ACC ALPAKA_FN_INLINE uint32_t ix(uint32_t id)
Definition: DetId.h:17
DetId goWest(const DetId &id) const override
move the Topology west (negative ix)
Definition: HGCalTopology.h:51
DetId switchZSide(const DetId startId) const
DetId encode(const DecodedDetId &id_) const
Detector
Definition: DetId.h:24
DetId changeZ(const DetId &id, int nrStepsZ) const
move the nagivator along z
std::vector< DetId > neighbors(const DetId &id) const
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
int32_t waferV(const int32_t index)
unsigned int kSizeForDenseIndexing
DetId goSouth(const DetId &id) const override
move the Topology south (decrement iy)
Definition: HGCalTopology.h:31
DetId denseId2detId(uint32_t denseId) const override
unsigned int allGeomModules() const
HGCalTopology(const HGCalDDDConstants &hdcons, int subdet)
create a new Topology
DecodedDetId geomDenseId2decId(const uint32_t &hi) const
const HGCalDDDConstants & dddConstants() const
Definition: HGCalTopology.h:98
~HGCalTopology() override=default
virtual destructor