Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:18:09

0001 #include "MvtxDefs.h"
0002 
0003 namespace
0004 {
0005   // hitsetkey layout:
0006   //  Mvtx specific lower 16 bits
0007   //   24 - 31  tracker id  // 8 bits
0008   //   16 - 23  layer   // 8 bits
0009   //     9 - 15  stave id // 7 bits
0010   //     5 - 8     chip  id // 4 bits
0011   //     0-4   strobe  id // 5 bits
0012 
0013   static constexpr unsigned int kBitShiftStaveIdOffset = 9;
0014   static constexpr unsigned int kBitShiftStaveIdWidth = 7;
0015   static constexpr unsigned int kBitShiftChipIdOffset = 5;
0016   static constexpr unsigned int kBitShiftChipIdWidth = 4;
0017   static constexpr unsigned int kBitShiftStrobeIdOffset = 0;
0018   static constexpr unsigned int kBitShiftStrobeIdWidth = 5;
0019   static constexpr int strobeOffset = 16;
0020 
0021   // bit shift for hitkey
0022   static const unsigned int kBitShiftCol __attribute__((unused)) = 16;
0023   static const unsigned int kBitShiftRow __attribute__((unused)) = 0;
0024 }
0025 
0026 uint8_t
0027 MvtxDefs::getStaveId(TrkrDefs::hitsetkey key)
0028 {
0029   TrkrDefs::hitsetkey tmp = (key >> kBitShiftStaveIdOffset);
0030   // zero the bits not in the stave id field
0031   uint8_t tmp1 = tmp;
0032   tmp1 = (tmp1 << (8 - kBitShiftStaveIdWidth));
0033   tmp1 = (tmp1 >> (8 - kBitShiftStaveIdWidth));
0034   return tmp1;
0035 }
0036 
0037 uint8_t
0038 MvtxDefs::getStaveId(TrkrDefs::cluskey key)
0039 {
0040   const TrkrDefs::hitsetkey tmp = TrkrDefs::getHitSetKeyFromClusKey(key);
0041   return getStaveId(tmp);
0042 }
0043 
0044 uint8_t
0045 MvtxDefs::getChipId(TrkrDefs::hitsetkey key)
0046 {
0047   TrkrDefs::hitsetkey tmp = (key >> kBitShiftChipIdOffset);
0048   uint8_t tmp1 = tmp;
0049   tmp1 = (tmp1 << (8 - kBitShiftChipIdWidth));
0050   tmp1 = (tmp1 >> (8 - kBitShiftChipIdWidth));
0051   return tmp1;
0052 }
0053 
0054 uint8_t
0055 MvtxDefs::getChipId(TrkrDefs::cluskey key)
0056 {
0057   const TrkrDefs::hitsetkey tmp = TrkrDefs::getHitSetKeyFromClusKey(key);
0058   return getChipId(tmp);
0059 }
0060 
0061 int MvtxDefs::getStrobeId(TrkrDefs::hitsetkey key)
0062 {
0063   TrkrDefs::hitsetkey tmp = (key >> kBitShiftStrobeIdOffset);
0064   uint8_t tmp1 = tmp;
0065   tmp1 = (tmp1 << (8 - kBitShiftStrobeIdWidth));
0066   tmp1 = (tmp1 >> (8 - kBitShiftStrobeIdWidth));
0067 
0068   int tmp2 = (int) tmp1 - strobeOffset;  // get back to the signed strobe
0069 
0070   return tmp2;
0071 }
0072 
0073 int MvtxDefs::getStrobeId(TrkrDefs::cluskey key)
0074 {
0075   const TrkrDefs::hitsetkey tmp = TrkrDefs::getHitSetKeyFromClusKey(key);
0076   return getStrobeId(tmp);
0077 }
0078 
0079 uint16_t
0080 MvtxDefs::getCol(TrkrDefs::hitkey key)
0081 {
0082   TrkrDefs::hitkey tmp = (key >> kBitShiftCol);
0083   return tmp;
0084 }
0085 
0086 uint16_t
0087 MvtxDefs::getRow(TrkrDefs::hitkey key)
0088 {
0089   TrkrDefs::hitkey tmp = (key >> kBitShiftRow);
0090   return tmp;
0091 }
0092 
0093 TrkrDefs::hitkey
0094 MvtxDefs::genHitKey(const uint16_t col, const uint16_t row)
0095 {
0096   TrkrDefs::hitkey key = (col << kBitShiftCol);
0097   TrkrDefs::hitkey tmp = (row << kBitShiftRow);
0098   key |= tmp;
0099   return key;
0100 }
0101 
0102 TrkrDefs::hitsetkey
0103 MvtxDefs::genHitSetKey(const uint8_t lyr, const uint8_t stave, const uint8_t chip, const int strobe_in)
0104 {
0105   TrkrDefs::hitsetkey key = TrkrDefs::genHitSetKey(TrkrDefs::TrkrId::mvtxId, lyr);
0106 
0107   // offset strobe to make it positive, fit inside 5 bits
0108   int strobe = strobe_in + strobeOffset;
0109   if (strobe < 0)
0110   {
0111     strobe = 0;
0112   }
0113   if (strobe > 31)
0114   {
0115     strobe = 31;
0116   }
0117   unsigned int ustrobe = (unsigned int) strobe;
0118 
0119   TrkrDefs::hitsetkey tmp = stave;
0120   key |= (tmp << kBitShiftStaveIdOffset);
0121   tmp = chip;
0122   key |= (tmp << kBitShiftChipIdOffset);
0123   tmp = ustrobe;
0124   key |= (tmp << kBitShiftStrobeIdOffset);
0125   return key;
0126 }
0127 
0128 TrkrDefs::cluskey
0129 MvtxDefs::genClusKey(const uint8_t lyr, const uint8_t stave, const uint8_t chip, const int strobe, const uint32_t clusid)
0130 {
0131   TrkrDefs::hitsetkey key = genHitSetKey(lyr, stave, chip, strobe);
0132   return TrkrDefs::genClusKey(key, clusid);
0133 }
0134 
0135 TrkrDefs::hitsetkey
0136 MvtxDefs::resetStrobe(const TrkrDefs::hitsetkey hitsetkey)
0137 {
0138   // Note: this method uses the fact that the crossing is in the first 5 bits
0139   TrkrDefs::hitsetkey tmp = hitsetkey;
0140   // zero the crossing bits by shifting them out of the word, then shift back
0141   tmp = (tmp >> kBitShiftStrobeIdWidth);
0142   tmp = (tmp << kBitShiftStrobeIdWidth);
0143   unsigned int zero_strobe = strobeOffset;
0144   tmp |= (zero_strobe << kBitShiftStrobeIdOffset);
0145 
0146   return tmp;
0147 }
0148 
0149 TrkrDefs::cluskey
0150 MvtxDefs::resetStrobe(const TrkrDefs::cluskey key)
0151 {
0152   TrkrDefs::hitsetkey tmp =  TrkrDefs::getHitSetKeyFromClusKey(key);
0153   return TrkrDefs::genClusKey(resetStrobe(tmp), key);
0154 }