CMS 3D CMS Logo

HGCScintillatorDetId.h
Go to the documentation of this file.
1 #ifndef DataFormats_ForwardDetId_HGCScintillatorDetId_H
2 #define DataFormats_ForwardDetId_HGCScintillatorDetId_H 1
3 
4 #include <iosfwd>
5 #include <vector>
8 
9 /* \brief description of the bit assigment
10  [0:8] iphi index wrt x-axis on +z side
11  [9:16] |radius| index (starting from a minimum radius depending on type)
12  [17:21] Layer #
13  [22] Trigger(1)/Detector(0) cell
14  [23:24] Reserved for future extension
15  [25:25] z-side (0 for +z; 1 for -z)
16  [26:27] Type (0 fine divisions of scintillators;
17  1 coarse divisions of scintillators)
18  [28:31] Detector type (HGCalHSc)
19 */
20 
21 class HGCScintillatorDetId : public DetId {
22 public:
26  HGCScintillatorDetId(uint32_t rawid);
28  HGCScintillatorDetId(int type, int layer, int iradius, int iphi, bool trigger = false);
30  HGCScintillatorDetId(const DetId& id);
33 
36 
38  DetId::Detector subdet() const { return det(); }
39 
41  int type() const { return (id_ >> kHGCalTypeOffset) & kHGCalTypeMask; }
42 
44  int zside() const { return (((id_ >> kHGCalZsideOffset) & kHGCalZsideMask) ? -1 : 1); }
45 
47  int layer() const { return (id_ >> kHGCalLayerOffset) & kHGCalLayerMask; }
48 
50  int iradiusAbs() const;
51  int iradius() const { return zside() * iradiusAbs(); }
52  int ietaAbs() const { return iradiusAbs(); }
53  int ieta() const { return zside() * ietaAbs(); }
54 
56  int iphi() const;
57  std::pair<int, int> ietaphi() const { return std::pair<int, int>(ieta(), iphi()); }
58  std::pair<int, int> iradiusphi() const { return std::pair<int, int>(iradius(), iphi()); }
59 
61  std::vector<HGCScintillatorDetId> detectorCells() const;
62  bool trigger() const { return (((id_ >> kHGCalTriggerOffset) & kHGCalTriggerMask) == 1); }
64 
66  bool isEE() const { return false; }
67  bool isHE() const { return true; }
68  bool isForward() const { return true; }
69 
71 
72 public:
73  static const int kHGCalPhiOffset = 0;
74  static const int kHGCalPhiMask = 0x1FF;
75  static const int kHGCalRadiusOffset = 9;
76  static const int kHGCalRadiusMask = 0xFF;
77  static const int kHGCalLayerOffset = 17;
78  static const int kHGCalLayerMask = 0x1F;
79  static const int kHGCalTriggerOffset = 22;
80  static const int kHGCalTriggerMask = 0x1;
81  static const int kHGCalZsideOffset = 25;
82  static const int kHGCalZsideMask = 0x1;
83  static const int kHGCalTypeOffset = 26;
84  static const int kHGCalTypeMask = 0x3;
85 
86  int iradiusTriggerAbs() const;
87  int iradiusTrigger() const { return zside() * iradiusTriggerAbs(); }
88  int iphiTrigger() const;
89 };
90 
91 std::ostream& operator<<(std::ostream&, const HGCScintillatorDetId& id);
92 
93 #endif
type
Definition: HCALResponse.h:21
static const int kHGCalTriggerOffset
std::pair< int, int > iradiusphi() const
int iradiusAbs() const
get the eta index
static const int kHGCalTypeOffset
int type() const
get the type
DetId::Detector subdet() const
get the subdetector
std::pair< int, int > ietaphi() const
HGCScintillatorDetId & operator=(const DetId &id)
static const int kHGCalLayerMask
static const int kHGCalRadiusOffset
int iphi() const
get the phi index
static const int kHGCalTriggerMask
HGCScintillatorDetId geometryCell() const
std::vector< HGCScintillatorDetId > detectorCells() const
trigger or detector cell
static const HGCScintillatorDetId Undefined
Definition: DetId.h:17
static const int kHGCalRadiusMask
std::ostream & operator<<(std::ostream &, const HGCScintillatorDetId &id)
Detector
Definition: DetId.h:24
uint32_t id_
Definition: DetId.h:69
bool isEE() const
consistency check : no bits left => no overhead
static const int kHGCalPhiMask
int layer() const
get the layer #
int zside() const
get the z-side of the cell (1/-1)
static const int kHGCalZsideMask
static const int kHGCalZsideOffset
static const int kHGCalLayerOffset
static const int kHGCalTypeMask
static const int kHGCalPhiOffset
HGCScintillatorDetId triggerCell() const
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46