File indexing completed on 2022-07-12 02:58:07
0001 #ifndef DataFormats_BTLDetId_BTLDetId_h
0002 #define DataFormats_BTLDetId_BTLDetId_h
0003
0004 #include "DataFormats/ForwardDetId/interface/MTDDetId.h"
0005 #include <ostream>
0006 #include <array>
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018 class BTLDetId : public MTDDetId {
0019 public:
0020 static constexpr uint32_t kBTLmoduleOffset = 10;
0021 static constexpr uint32_t kBTLmoduleMask = 0x3F;
0022 static constexpr uint32_t kBTLmodTypeOffset = 8;
0023 static constexpr uint32_t kBTLmodTypeMask = 0x3;
0024 static constexpr uint32_t kBTLCrystalOffset = 0;
0025 static constexpr uint32_t kBTLCrystalMask = 0x3F;
0026
0027
0028 static constexpr uint32_t HALF_ROD = 36;
0029 static constexpr uint32_t kModulesPerRODBarPhiFlat = 48;
0030 static constexpr uint32_t kModulePerTypeBarPhiFlat = 48 / 3;
0031 static constexpr uint32_t kCrystalsPerModuleTdr = 16;
0032
0033
0034
0035
0036 static constexpr uint32_t kCrystalsBTL = kCrystalsPerModuleTdr * 24 * 6 * HALF_ROD * 2;
0037
0038 enum class CrysLayout { tile = 1, bar = 2, barzflat = 3, barphiflat = 4, tdr = 5 };
0039
0040
0041
0042
0043 BTLDetId() : MTDDetId(DetId::Forward, ForwardSubdetector::FastTime) {
0044 id_ |= (MTDType::BTL & kMTDsubdMask) << kMTDsubdOffset;
0045 }
0046
0047
0048 BTLDetId(const uint32_t& raw_id) : MTDDetId(raw_id) { ; }
0049
0050
0051 BTLDetId(const DetId& det_id) : MTDDetId(det_id.rawId()) { ; }
0052
0053
0054 BTLDetId(uint32_t zside, uint32_t rod, uint32_t module, uint32_t modtyp, uint32_t crystal)
0055 : MTDDetId(DetId::Forward, ForwardSubdetector::FastTime) {
0056 id_ |= (MTDType::BTL & kMTDsubdMask) << kMTDsubdOffset | (zside & kZsideMask) << kZsideOffset |
0057 (rod & kRodRingMask) << kRodRingOffset | (module & kBTLmoduleMask) << kBTLmoduleOffset |
0058 (modtyp & kBTLmodTypeMask) << kBTLmodTypeOffset | ((crystal - 1) & kBTLCrystalMask) << kBTLCrystalOffset;
0059 }
0060
0061
0062
0063
0064 inline int module() const { return (id_ >> kBTLmoduleOffset) & kBTLmoduleMask; }
0065
0066
0067 inline int modType() const { return (id_ >> kBTLmodTypeOffset) & kBTLmodTypeMask; }
0068
0069
0070 inline int crystal() const { return ((id_ >> kBTLCrystalOffset) & kBTLCrystalMask) + 1; }
0071
0072
0073 inline int row(unsigned nrows = kCrystalsPerModuleTdr) const {
0074 return (crystal() - 1) % nrows;
0075 }
0076
0077
0078 inline int column(unsigned nrows = kCrystalsPerModuleTdr) const { return (crystal() - 1) / nrows; }
0079
0080
0081 BTLDetId geographicalId(CrysLayout lay) const;
0082 };
0083
0084 std::ostream& operator<<(std::ostream&, const BTLDetId&);
0085
0086 #endif