CMS 3D CMS Logo

BTLDetId.h
Go to the documentation of this file.
1 #ifndef DataFormats_BTLDetId_BTLDetId_h
2 #define DataFormats_BTLDetId_BTLDetId_h
3 
5 #include <ostream>
6 #include <array>
7 
18 class BTLDetId : public MTDDetId {
19 public:
20  static constexpr uint32_t kBTLmoduleOffset = 10;
21  static constexpr uint32_t kBTLmoduleMask = 0x3F;
22  static constexpr uint32_t kBTLmodTypeOffset = 8;
23  static constexpr uint32_t kBTLmodTypeMask = 0x3;
24  static constexpr uint32_t kBTLCrystalOffset = 0;
25  static constexpr uint32_t kBTLCrystalMask = 0x3F;
26 
28  static constexpr uint32_t HALF_ROD = 36;
29  static constexpr uint32_t kModulesPerRODBarPhiFlat = 48;
30  static constexpr uint32_t kModulePerTypeBarPhiFlat = 48 / 3;
31  static constexpr uint32_t kCrystalsPerModuleTdr = 16;
32 
33  // Number of crystals in BTL according to TDR design, valid also for barphiflat scenario:
34  // 16 crystals x 24 modules x 6 readout units x 36 rods/side x 2 sides
35  //
36  static constexpr uint32_t kCrystalsBTL = kCrystalsPerModuleTdr * 24 * 6 * HALF_ROD * 2;
37 
38  enum class CrysLayout { tile = 1, bar = 2, barzflat = 3, barphiflat = 4, tdr = 5 };
39 
40  // ---------- Constructors, enumerated types ----------
41 
44  id_ |= (MTDType::BTL & kMTDsubdMask) << kMTDsubdOffset;
45  }
46 
48  BTLDetId(const uint32_t& raw_id) : MTDDetId(raw_id) { ; }
49 
51  BTLDetId(const DetId& det_id) : MTDDetId(det_id.rawId()) { ; }
52 
54  BTLDetId(uint32_t zside, uint32_t rod, uint32_t module, uint32_t modtyp, uint32_t crystal)
56  id_ |= (MTDType::BTL & kMTDsubdMask) << kMTDsubdOffset | (zside & kZsideMask) << kZsideOffset |
59  }
60 
61  // ---------- Common methods ----------
62 
64  inline int module() const { return (id_ >> kBTLmoduleOffset) & kBTLmoduleMask; }
65 
67  inline int modType() const { return (id_ >> kBTLmodTypeOffset) & kBTLmodTypeMask; }
68 
70  inline int crystal() const { return ((id_ >> kBTLCrystalOffset) & kBTLCrystalMask) + 1; }
71 
73  inline int row(unsigned nrows = kCrystalsPerModuleTdr) const {
74  return (crystal() - 1) % nrows; // anything else for now
75  }
76 
78  inline int column(unsigned nrows = kCrystalsPerModuleTdr) const { return (crystal() - 1) / nrows; }
79 
82 };
83 
84 std::ostream& operator<<(std::ostream&, const BTLDetId&);
85 
86 #endif // DataFormats_BTLDetId_BTLDetId_h
static constexpr uint32_t kCrystalsBTL
Definition: BTLDetId.h:36
static constexpr uint32_t kModulePerTypeBarPhiFlat
Definition: BTLDetId.h:30
static const uint32_t kRodRingOffset
Definition: MTDDetId.h:33
CrysLayout
Definition: BTLDetId.h:38
static constexpr uint32_t kBTLmodTypeOffset
Definition: BTLDetId.h:22
int row(unsigned nrows=kCrystalsPerModuleTdr) const
Definition: BTLDetId.h:73
static constexpr uint32_t kBTLmodTypeMask
Definition: BTLDetId.h:23
int modType() const
Definition: BTLDetId.h:67
ForwardSubdetector
static const uint32_t kZsideOffset
Definition: MTDDetId.h:31
static const uint32_t kMTDsubdOffset
Definition: MTDDetId.h:29
static constexpr uint32_t kCrystalsPerModuleTdr
Definition: BTLDetId.h:31
Detector identifier base class for the MIP Timing Layer.
Definition: MTDDetId.h:21
BTLDetId()
Definition: BTLDetId.h:43
static const uint32_t kRodRingMask
Definition: MTDDetId.h:34
static constexpr uint32_t HALF_ROD
range constants, need two sets for the time being (one for tiles and one for bars) ...
Definition: BTLDetId.h:28
static constexpr uint32_t kModulesPerRODBarPhiFlat
Definition: BTLDetId.h:29
static constexpr uint32_t kBTLmoduleOffset
Definition: BTLDetId.h:20
static const uint32_t kMTDsubdMask
Definition: MTDDetId.h:30
static const uint32_t kZsideMask
Definition: MTDDetId.h:32
int module() const
Definition: BTLDetId.h:64
BTLDetId(const DetId &det_id)
Definition: BTLDetId.h:51
BTLDetId(uint32_t zside, uint32_t rod, uint32_t module, uint32_t modtyp, uint32_t crystal)
Definition: BTLDetId.h:54
Definition: DetId.h:17
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
uint32_t id_
Definition: DetId.h:69
int zside() const
Definition: MTDDetId.h:61
int column(unsigned nrows=kCrystalsPerModuleTdr) const
Definition: BTLDetId.h:78
std::ostream & operator<<(std::ostream &, const BTLDetId &)
Definition: BTLDetId.cc:18
Detector identifier class for the Barrel Timing Layer. The crystal count must start from 0...
Definition: BTLDetId.h:18
BTLDetId(const uint32_t &raw_id)
Definition: BTLDetId.h:48
static constexpr uint32_t kBTLCrystalOffset
Definition: BTLDetId.h:24
BTLDetId geographicalId(CrysLayout lay) const
Definition: BTLDetId.cc:3
static constexpr uint32_t kBTLmoduleMask
Definition: BTLDetId.h:21
int crystal() const
Definition: BTLDetId.h:70
static constexpr uint32_t kBTLCrystalMask
Definition: BTLDetId.h:25