CMS 3D CMS Logo

GEMDetId.h
Go to the documentation of this file.
1 #ifndef DataFormats_MuonDetId_GEMDetId_h
2 #define DataFormats_MuonDetId_GEMDetId_h
3 
14 
15 #include <iosfwd>
16 #include <iostream>
17 
18 class GEMDetId : public DetId {
19 public:
20  static constexpr int32_t minRegionId = -1;
21  static constexpr int32_t maxRegionId = 1;
22  static constexpr int32_t minRingId = 1;
23  static constexpr int32_t maxRingId = 3;
24  static constexpr int32_t minStationId0 = 0;
25  static constexpr int32_t minStationId = 1;
26  // in the detId there is space to go up to 5 stations. Only 3 implemented now (0,1,2)
27  static constexpr int32_t maxStationId = 2;
28  static constexpr int32_t minChamberId = 0;
29  static constexpr int32_t maxChamberId = 36;
30  static constexpr int32_t minLayerId = 0; // LayerId = 0 is superChamber
31  static constexpr int32_t maxLayerId0 = 6;
32  static constexpr int32_t maxLayerId = 2; // GE1/GE2 has 2 layers
33  static constexpr int32_t minRollId = 0;
34  static constexpr int32_t maxRollId = 16;
35 
36 private:
37  static constexpr uint32_t RegionNumBits = 2;
38  static constexpr uint32_t RegionStartBit = 0;
39  static constexpr uint32_t RegionMask = 0x3;
40  static constexpr uint32_t RingNumBits = 3;
41  static constexpr uint32_t RingStartBit = RegionStartBit + RegionNumBits;
42  static constexpr uint32_t RingMask = 0x7;
43  static constexpr uint32_t StationNumBits = 3;
44  static constexpr uint32_t StationStartBit = RingStartBit + RingNumBits;
45  static constexpr uint32_t StationMask = 0x7;
46  static constexpr uint32_t ChamberNumBits = 6;
47  static constexpr uint32_t ChamberStartBit = StationStartBit + StationNumBits;
48  static constexpr uint32_t ChamberStartBitM = RegionStartBit + RegionNumBits;
49  static constexpr uint32_t ChamberMask = 0x3F;
50  static constexpr uint32_t LayerNumBits = 5;
51  static constexpr uint32_t LayerNumBitsP = 2;
52  static constexpr uint32_t LayerStartBit = ChamberStartBit + ChamberNumBits;
53  static constexpr uint32_t LayerStartBitM = ChamberStartBitM + ChamberNumBits;
54  static constexpr uint32_t LayerMask = 0x1F;
55  static constexpr uint32_t LayerMaskP = 0x3;
56  static constexpr uint32_t RollNumBits = 5;
57  static constexpr uint32_t RollStartBit = LayerStartBit + LayerNumBits;
58  static constexpr uint32_t RollStartBitP = LayerStartBit + LayerNumBitsP;
59  static constexpr uint32_t RollStartBitM = LayerStartBitM + LayerNumBits;
60  static constexpr uint32_t RollMask = 0x1F;
61  static constexpr uint32_t FormatNumBits = 1;
62  static constexpr uint32_t FormatStartBit = RollStartBit + RollNumBits;
63  static constexpr uint32_t FormatMask = 0x1;
64  static constexpr uint32_t kGEMIdFormat = 0x1000000;
65  static constexpr uint32_t kMuonIdMask = 0xF0000000;
66 
67 public:
68  static constexpr uint32_t chamberIdMask = ~(RollMask << RollStartBit);
69  static constexpr uint32_t superChamberIdMask = chamberIdMask + ~(LayerMask << LayerStartBit);
70 
71 public:
73  constexpr GEMDetId() : DetId(DetId::Muon, MuonSubdetId::GEM) {}
76  constexpr GEMDetId(uint32_t id) : DetId(id) {
78  throw cms::Exception("InvalidDetId")
79  << "GEMDetId ctor: det: " << det() << " subdet: " << subdetId() << " is not a valid GEM id\n";
80 
81  if (v11Format())
82  id_ = v12Form(id);
83  }
85  constexpr GEMDetId(DetId id) : DetId(id) {
87  throw cms::Exception("InvalidDetId")
88  << "GEMDetId ctor: det: " << det() << " subdet: " << subdetId() << " is not a valid GEM id\n";
89  if (v11Format())
90  id_ = v12Form(id.rawId());
91  }
93  constexpr GEMDetId(int region, int ring, int station, int layer, int chamber, int roll)
95  if (region < minRegionId || region > maxRegionId || ring < minRingId || ring > maxRingId ||
96  station < minStationId0 || station > maxStationId || layer < minLayerId || layer > maxLayerId0 ||
97  chamber < minChamberId || chamber > maxChamberId || roll < minRollId || roll > maxRollId)
98  throw cms::Exception("InvalidDetId")
99  << "GEMDetId ctor: Invalid parameters: region " << region << " ring " << ring << " station " << station
100  << " layer " << layer << " chamber " << chamber << " roll " << roll << std::endl;
101 
102  int regionInBits = region - minRegionId;
103  int ringInBits = ring - minRingId;
104  int stationInBits = station - minStationId0;
105  int layerInBits = layer - minLayerId;
106  int chamberInBits = chamber - (minChamberId + 1);
107  int rollInBits = roll;
108 
109  id_ |= ((regionInBits & RegionMask) << RegionStartBit | (ringInBits & RingMask) << RingStartBit |
110  (stationInBits & StationMask) << StationStartBit | (layerInBits & LayerMask) << LayerStartBit |
111  (chamberInBits & ChamberMask) << ChamberStartBit | (rollInBits & RollMask) << RollStartBit | kGEMIdFormat);
112  }
113 
115  constexpr GEMDetId& operator=(const DetId& gen) {
116  if (!gen.null()) {
117  int subdet = gen.subdetId();
118  if (gen.det() != Muon || (subdet != MuonSubdetId::GEM && subdet != MuonSubdetId::ME0))
119  throw cms::Exception("InvalidDetId")
120  << "GEMDetId ctor: Cannot assign GEMDetID from " << std::hex << gen.rawId() << std::dec;
121  if (v11Format())
122  id_ = v12Form(gen.rawId());
123  else
124  id_ = gen.rawId();
125  } else {
126  id_ = gen.rawId();
127  }
128  return (*this);
129  }
130 
132  constexpr bool operator==(const GEMDetId& gen) const {
133  uint32_t rawid = gen.rawId();
134  if (rawid == id_)
135  return true;
136  int reg(0), ri(0), stn(-1), lay(0), chamb(0), rol(0);
137  unpackId(rawid, reg, ri, stn, lay, chamb, rol);
138  return (((id_ & kMuonIdMask) == (rawid & kMuonIdMask)) && (reg == region()) && (ri == ring()) &&
139  (stn == station()) && (lay == layer()) && (chamb == chamber()) && (rol == roll()));
140  }
141  constexpr bool operator!=(const GEMDetId& gen) const {
142  uint32_t rawid = gen.rawId();
143  if (rawid == id_)
144  return false;
145  int reg(0), ri(0), stn(-1), lay(0), chamb(0), rol(0);
146  unpackId(rawid, reg, ri, stn, lay, chamb, rol);
147  return (((id_ & kMuonIdMask) != (rawid & kMuonIdMask)) || (reg != region()) || (ri != ring()) ||
148  (stn != station()) || (lay != layer()) || (chamb != chamber()) || (rol != roll()));
149  }
150 
152  constexpr bool operator<(const GEMDetId& r) const {
153  if (r.station() == this->station()) {
154  if (this->layer() == r.layer()) {
155  return this->rawId() < r.rawId();
156  } else {
157  return (this->layer() < r.layer());
158  }
159  } else {
160  return this->station() < r.station();
161  }
162  }
163 
165  constexpr bool v11Format() const { return ((id_ & kGEMIdFormat) == 0); }
166 
168  constexpr int region() const { return (static_cast<int>((id_ >> RegionStartBit) & RegionMask) + minRegionId); }
169 
173  constexpr int ring() const { return (static_cast<int>((id_ >> RingStartBit) & RingMask) + minRingId); }
174 
176  constexpr int station() const { return (static_cast<int>((id_ >> StationStartBit) & StationMask) + minStationId0); }
177 
180  constexpr int chamber() const {
181  return (static_cast<int>((id_ >> ChamberStartBit) & ChamberMask) + (minChamberId + 1));
182  }
183 
187  constexpr int layer() const { return (static_cast<int>((id_ >> LayerStartBit) & LayerMask) + minLayerId); }
188 
191  constexpr int roll() const {
192  return (static_cast<int>((id_ >> RollStartBit) & RollMask)); // value 0 is used as wild card
193  }
194 
196  constexpr GEMDetId chamberId() const { return GEMDetId(id_ & chamberIdMask); }
197 
199  constexpr GEMDetId superChamberId() const { return GEMDetId(id_ & superChamberIdMask); }
200 
202  constexpr GEMDetId layerId() const { return GEMDetId(id_ & chamberIdMask); }
203 
205  constexpr int nlayers() const {
206  return ((station() == 0) ? maxLayerId0 : ((station() > maxStationId) ? 0 : maxLayerId));
207  }
208 
209  constexpr uint32_t v12Form() const { return v12Form(id_); }
210 
211  constexpr static uint32_t v12Form(const uint32_t& inpid) {
212  uint32_t rawid(inpid);
213  if ((rawid & kGEMIdFormat) == 0) {
214  int region(0), ring(0), station(-1), layer(0), chamber(0), roll(0);
216  int regionInBits = region - minRegionId;
217  int ringInBits = ring - minRingId;
218  int stationInBits = station - minStationId0;
219  int layerInBits = layer - minLayerId;
220  int chamberInBits = chamber - (minChamberId + 1);
221  int rollInBits = roll;
222  rawid = (((DetId::Muon & DetId::kDetMask) << DetId::kDetOffset) |
224  ((regionInBits & RegionMask) << RegionStartBit) | ((ringInBits & RingMask) << RingStartBit) |
225  ((stationInBits & StationMask) << StationStartBit) | ((layerInBits & LayerMask) << LayerStartBit) |
226  ((chamberInBits & ChamberMask) << ChamberStartBit) | ((rollInBits & RollMask) << RollStartBit) |
227  kGEMIdFormat);
228  }
229  return rawid;
230  }
231 
232  // subsystem
234  bool isGE11() const;
235  bool isGE21() const;
236  bool isME0() const;
237 
238 private:
239  constexpr void v12FromV11(const uint32_t& rawid) { id_ = v12Form(rawid); }
240 
241  constexpr static void unpackId(
242  const uint32_t& rawid, int& region, int& ring, int& station, int& layer, int& chamber, int& roll) {
243  if (((rawid >> DetId::kDetOffset) & DetId::kDetMask) == DetId::Muon) {
244  int subdet = ((rawid >> DetId::kSubdetOffset) & DetId::kSubdetMask);
245  if (subdet == MuonSubdetId::GEM) {
246  region = static_cast<int>(((rawid >> RegionStartBit) & RegionMask) + minRegionId);
247  ring = (static_cast<int>((rawid >> RingStartBit) & RingMask) + minRingId);
248  chamber = (static_cast<int>((rawid >> ChamberStartBit) & ChamberMask) + (minChamberId + 1));
249  if ((rawid & kGEMIdFormat) == 0) {
250  station = (static_cast<int>((rawid >> StationStartBit) & StationMask) + minStationId);
251  layer = (static_cast<int>((rawid >> LayerStartBit) & LayerMaskP) + minLayerId);
252  roll = (static_cast<int>((rawid >> RollStartBitP) & RollMask));
253  } else {
254  station = (static_cast<int>((rawid >> StationStartBit) & StationMask) + minStationId0);
255  layer = (static_cast<int>((rawid >> LayerStartBit) & LayerMask) + minLayerId);
256  roll = (static_cast<int>((rawid >> RollStartBit) & RollMask));
257  }
258  } else if (subdet == MuonSubdetId::ME0) {
259  region = static_cast<int>(((rawid >> RegionStartBit) & RegionMask) + minRegionId);
260  ring = 1;
261  station = 0;
262  chamber = (static_cast<int>((rawid >> ChamberStartBitM) & ChamberMask) + (minChamberId));
263  layer = (static_cast<int>((rawid >> LayerStartBitM) & LayerMask) + minLayerId);
264  roll = (static_cast<int>((rawid >> RollStartBitM) & RollMask));
265  }
266  }
267  }
268 
269 }; // GEMDetId
270 
271 std::ostream& operator<<(std::ostream& os, const GEMDetId& id);
272 
273 #endif
MuonSubdetId::GEM
static constexpr int GEM
Definition: MuonSubdetId.h:14
GEMDetId::RegionStartBit
static constexpr uint32_t RegionStartBit
Definition: GEMDetId.h:38
GEMDetId::v11Format
constexpr bool v11Format() const
Definition: GEMDetId.h:165
RollMask
std::bitset< maskSIZE > RollMask
Definition: RPCRollMask.h:7
GEMDetId::operator==
constexpr bool operator==(const GEMDetId &gen) const
Definition: GEMDetId.h:132
GEMDetId::isGE21
bool isGE21() const
Definition: GEMDetId.cc:11
GEMDetId::ring
constexpr int ring() const
Definition: GEMDetId.h:173
GEMDetId::layer
constexpr int layer() const
Definition: GEMDetId.h:187
GEMDetId::RingMask
static constexpr uint32_t RingMask
Definition: GEMDetId.h:42
GEMDetId::region
constexpr int region() const
Definition: GEMDetId.h:168
GEMDetId::subsystem
GEMSubDetId::Station subsystem() const
Definition: GEMDetId.cc:7
DetId::det
constexpr Detector det() const
get the detector field from this detid
Definition: DetId.h:46
operator<<
std::ostream & operator<<(std::ostream &os, const GEMDetId &id)
Definition: GEMDetId.cc:15
GEMDetId::LayerMask
static constexpr uint32_t LayerMask
Definition: GEMDetId.h:54
GEMDetId::superChamberId
constexpr GEMDetId superChamberId() const
Definition: GEMDetId.h:199
GEMDetId::maxStationId
static constexpr int32_t maxStationId
Definition: GEMDetId.h:27
GEMDetId::ChamberMask
static constexpr uint32_t ChamberMask
Definition: GEMDetId.h:49
GEMDetId::minChamberId
static constexpr int32_t minChamberId
Definition: GEMDetId.h:28
GEMDetId::StationStartBit
static constexpr uint32_t StationStartBit
Definition: GEMDetId.h:44
GEMDetId::LayerNumBits
static constexpr uint32_t LayerNumBits
Definition: GEMDetId.h:50
GEMDetId::RegionMask
static constexpr uint32_t RegionMask
Definition: GEMDetId.h:39
GEMDetId::minLayerId
static constexpr int32_t minLayerId
Definition: GEMDetId.h:30
GEMDetId::RollStartBitM
static constexpr uint32_t RollStartBitM
Definition: GEMDetId.h:59
GEMDetId::FormatNumBits
static constexpr uint32_t FormatNumBits
Definition: GEMDetId.h:61
GEMDetId::operator<
constexpr bool operator<(const GEMDetId &r) const
Definition: GEMDetId.h:152
GEMDetId::nlayers
constexpr int nlayers() const
Definition: GEMDetId.h:205
DetId::kSubdetMask
static const int kSubdetMask
Definition: DetId.h:20
GEMDetId::GEMDetId
constexpr GEMDetId(DetId id)
Definition: GEMDetId.h:85
Muon
Definition: Muon.py:1
GEMDetId::v12FromV11
constexpr void v12FromV11(const uint32_t &rawid)
Definition: GEMDetId.h:239
GEMDetId::v12Form
constexpr uint32_t v12Form() const
Definition: GEMDetId.h:209
GEMDetId::FormatMask
static constexpr uint32_t FormatMask
Definition: GEMDetId.h:63
GEMDetId::RingStartBit
static constexpr uint32_t RingStartBit
Definition: GEMDetId.h:41
GEMDetId::maxRollId
static constexpr int32_t maxRollId
Definition: GEMDetId.h:34
GEMDetId::LayerStartBit
static constexpr uint32_t LayerStartBit
Definition: GEMDetId.h:52
DetId::kSubdetOffset
static const int kSubdetOffset
Definition: DetId.h:22
DetId
Definition: DetId.h:17
GEMDetId::layerId
constexpr GEMDetId layerId() const
Definition: GEMDetId.h:202
GEMDetId::StationNumBits
static constexpr uint32_t StationNumBits
Definition: GEMDetId.h:43
GEMSubDetId.h
GEMDetId::GEMDetId
constexpr GEMDetId()
Definition: GEMDetId.h:73
GEMDetId::ChamberNumBits
static constexpr uint32_t ChamberNumBits
Definition: GEMDetId.h:46
GEMDetId::minStationId0
static constexpr int32_t minStationId0
Definition: GEMDetId.h:24
GEMDetId::maxRingId
static constexpr int32_t maxRingId
Definition: GEMDetId.h:23
GEMDetId::maxChamberId
static constexpr int32_t maxChamberId
Definition: GEMDetId.h:29
GEMDetId::minRingId
static constexpr int32_t minRingId
Definition: GEMDetId.h:22
GEMDetId::isME0
bool isME0() const
Definition: GEMDetId.cc:13
GEMDetId::RegionNumBits
static constexpr uint32_t RegionNumBits
Definition: GEMDetId.h:37
gen
Definition: PythiaDecays.h:13
GEMDetId::GEMDetId
constexpr GEMDetId(int region, int ring, int station, int layer, int chamber, int roll)
Construct from fully qualified identifier.
Definition: GEMDetId.h:93
DetId::subdetId
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector's numbering enum)
Definition: DetId.h:48
GEMDetId::RollStartBitP
static constexpr uint32_t RollStartBitP
Definition: GEMDetId.h:58
GEMDetId::chamberIdMask
static constexpr uint32_t chamberIdMask
Definition: GEMDetId.h:68
GEMSubDetId::Station
Station
Definition: GEMSubDetId.h:12
GEMDetId::chamber
constexpr int chamber() const
Definition: GEMDetId.h:180
l1t::mtf7::GEM
GEM Data Record : block->header().getID() = 7.
Definition: Block.h:21
GEMDetId::maxLayerId0
static constexpr int32_t maxLayerId0
Definition: GEMDetId.h:31
DetId::kDetMask
static const int kDetMask
Definition: DetId.h:19
GEMDetId::kMuonIdMask
static constexpr uint32_t kMuonIdMask
Definition: GEMDetId.h:65
DetId::id_
uint32_t id_
Definition: DetId.h:69
GEMDetId::roll
constexpr int roll() const
Definition: GEMDetId.h:191
GEMDetId
Definition: GEMDetId.h:18
GEMDetId::LayerMaskP
static constexpr uint32_t LayerMaskP
Definition: GEMDetId.h:55
GEMDetId::superChamberIdMask
static constexpr uint32_t superChamberIdMask
Definition: GEMDetId.h:69
GEMDetId::ChamberStartBit
static constexpr uint32_t ChamberStartBit
Definition: GEMDetId.h:47
GEMDetId::minRegionId
static constexpr int32_t minRegionId
Definition: GEMDetId.h:20
GEMDetId::LayerStartBitM
static constexpr uint32_t LayerStartBitM
Definition: GEMDetId.h:53
MuonSubdetId::ME0
static constexpr int ME0
Definition: MuonSubdetId.h:15
GEMDetId::RollNumBits
static constexpr uint32_t RollNumBits
Definition: GEMDetId.h:56
GEMDetId::unpackId
constexpr static void unpackId(const uint32_t &rawid, int &region, int &ring, int &station, int &layer, int &chamber, int &roll)
Definition: GEMDetId.h:241
MuonSubdetId.h
GEMDetId::maxRegionId
static constexpr int32_t maxRegionId
Definition: GEMDetId.h:21
alignCSCRings.r
r
Definition: alignCSCRings.py:93
GEMDetId::FormatStartBit
static constexpr uint32_t FormatStartBit
Definition: GEMDetId.h:62
DetId::kDetOffset
static const int kDetOffset
Definition: DetId.h:21
DetId::rawId
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
DetId.h
GEMDetId::RollMask
static constexpr uint32_t RollMask
Definition: GEMDetId.h:60
triggerObjects_cff.id
id
Definition: triggerObjects_cff.py:31
GEMDetId::ChamberStartBitM
static constexpr uint32_t ChamberStartBitM
Definition: GEMDetId.h:48
GEMDetId::maxLayerId
static constexpr int32_t maxLayerId
Definition: GEMDetId.h:32
GEMDetId::chamberId
constexpr GEMDetId chamberId() const
Definition: GEMDetId.h:196
Exception
Definition: hltDiff.cc:246
GEMDetId::StationMask
static constexpr uint32_t StationMask
Definition: GEMDetId.h:45
GEMDetId::v12Form
constexpr static uint32_t v12Form(const uint32_t &inpid)
Definition: GEMDetId.h:211
GEMDetId::RollStartBit
static constexpr uint32_t RollStartBit
Definition: GEMDetId.h:57
GEMDetId::isGE11
bool isGE11() const
Definition: GEMDetId.cc:9
GEMDetId::operator=
constexpr GEMDetId & operator=(const DetId &gen)
Definition: GEMDetId.h:115
GEMDetId::kGEMIdFormat
static constexpr uint32_t kGEMIdFormat
Definition: GEMDetId.h:64
GEMDetId::minRollId
static constexpr int32_t minRollId
Definition: GEMDetId.h:33
Exception.h
GEMDetId::RingNumBits
static constexpr uint32_t RingNumBits
Definition: GEMDetId.h:40
GEMDetId::LayerNumBitsP
static constexpr uint32_t LayerNumBitsP
Definition: GEMDetId.h:51
GEMDetId::station
constexpr int station() const
Definition: GEMDetId.h:176
GEMDetId::minStationId
static constexpr int32_t minStationId
Definition: GEMDetId.h:25
DetId::Muon
Definition: DetId.h:26
GEMDetId::GEMDetId
constexpr GEMDetId(uint32_t id)
Definition: GEMDetId.h:76
MuonSubdetId
Definition: MuonSubdetId.h:9
TauDecayModes.dec
dec
Definition: TauDecayModes.py:143
GEMDetId::operator!=
constexpr bool operator!=(const GEMDetId &gen) const
Definition: GEMDetId.h:141