Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
#include "EventFilter/Utilities/interface/GlobalEventNumber.icc"

namespace evf {
  namespace evtn {

    bool daq_board_sense(const unsigned char *p) {
      return (*(unsigned int *)(p + FEDHeader::length + DAQ_BOARDID_OFFSET * SLINK_WORD_SIZE / 2) >>
              DAQ_BOARDID_SHIFT) == DAQ_BOARDID_VALUE;
    }

    bool gtpe_board_sense(const unsigned char *p) {
      return (*(unsigned int *)(p + GTPE_BOARDID_OFFSET * SLINK_WORD_SIZE / 2) >> GTPE_BOARDID_SHIFT) != 0;
    }

    bool evm_board_sense(const unsigned char *p, size_t size) {
      switch (size) {
        case BST32_3BX:
          EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0000;
          EVM_FDL_NOBX = 3;
          break;
        case BST32_5BX:
          EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0000;
          EVM_FDL_NOBX = 5;
          break;
        case BST52_3BX:
          EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0011;
          EVM_FDL_NOBX = 3;
          break;
        case BST52_5BX:
          EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0011;
          EVM_FDL_NOBX = 5;
          break;
        default:
          EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0000;
          EVM_FDL_NOBX = 3;
      }
      return (*(const unsigned int *)(p + FEDHeader::length + EVM_BOARDID_OFFSET * SLINK_WORD_SIZE / 2) >>
              EVM_BOARDID_SHIFT) == EVM_BOARDID_VALUE;
    }

    bool evm_tcs_board_sense(const unsigned char *p) {
      return (*(const unsigned int *)(p + FEDHeader::length +
                                      (EVM_GTFE_BLOCK * 2 + EVM_TCS_BOARDID_OFFSET) * SLINK_WORD_SIZE / 2) >>
              EVM_TCS_BOARDID_SHIFT) == EVM_TCS_BOARDID_VALUE;
    }

    void evm_board_setformat(size_t size) {
      switch (size) {
        case BST32_3BX:
          EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0000;
          EVM_FDL_NOBX = 3;
          break;
        case BST32_5BX:
          EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0000;
          EVM_FDL_NOBX = 5;
          break;
        case BST52_3BX:
          EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0011;
          EVM_FDL_NOBX = 3;
          break;
        case BST52_5BX:
          EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0011;
          EVM_FDL_NOBX = 5;
          break;
        default:
          EVM_GTFE_BLOCK = EVM_GTFE_BLOCK_V0000;
          EVM_FDL_NOBX = 3;
      }
    }

    unsigned int offset(bool evm) {
      if (evm)
        return FEDHeader::length + (EVM_GTFE_BLOCK * 2 + EVM_TCS_TRIGNR_OFFSET) * SLINK_WORD_SIZE / 2;
      else
        return FEDHeader::length + DAQ_TOTTRG_OFFSET * SLINK_WORD_SIZE / 2;
    }
    unsigned int get(const unsigned char *p, bool evm) {
      if (evm && evm_tcs_board_sense(p))
        return *(const unsigned int *)(p + offset(true));
      else
        return *(const unsigned int *)(p + offset(false));  // cover case of evm but invalid tcs info
    }
    unsigned int gtpe_get(const unsigned char *p) {
      return *(const unsigned int *)(p + GTPE_TRIGNR_OFFSET * SLINK_HALFWORD_SIZE);
    }
    unsigned int getlbn(const unsigned char *p) {
      return (*(const unsigned int *)(p + FEDHeader::length +
                                      (EVM_GTFE_BLOCK * 2 + EVM_TCS_LSBLNR_OFFSET) * SLINK_WORD_SIZE / 2)) &
             EVM_TCS_LSBLNR_MASK;
    }
    unsigned int gtpe_getlbn(const unsigned char *p) { return gtpe_getorbit(p) / 0x00100000; }
    unsigned int getgpslow(const unsigned char *p) {
      return (*(const unsigned int *)(p + FEDHeader::length + EVM_GTFE_BSTGPS_OFFSET * SLINK_WORD_SIZE / 2));
    }
    unsigned int getgpshigh(const unsigned char *p) {
      return (*(const unsigned int *)(p + FEDHeader::length + EVM_GTFE_BSTGPS_OFFSET * SLINK_WORD_SIZE / 2 +
                                      SLINK_HALFWORD_SIZE));
    }
    unsigned int getorbit(const unsigned char *p) {
      return (*(const unsigned int *)(p + FEDHeader::length +
                                      (EVM_GTFE_BLOCK * 2 + EVM_TCS_ORBTNR_OFFSET) * SLINK_WORD_SIZE / 2));
    }
    unsigned int getevtyp(const unsigned char *p) {
      return (((*(const unsigned int *)(p + FEDHeader::length +
                                        (EVM_GTFE_BLOCK * 2 + EVM_TCS_LSBLNR_OFFSET) * SLINK_WORD_SIZE / 2)) &
               EVM_TCS_EVNTYP_MASK) >>
              EVM_TCS_EVNTYP_SHIFT);
    }
    unsigned int gtpe_getorbit(const unsigned char *p) {
      return (*(const unsigned int *)(p + GTPE_ORBTNR_OFFSET * SLINK_HALFWORD_SIZE));
    }
    unsigned int getfdlbx(const unsigned char *p) {
      return (*(const unsigned int *)(p + FEDHeader::length +
                                      (EVM_GTFE_BLOCK + EVM_TCS_BLOCK + EVM_FDL_BLOCK * (EVM_FDL_NOBX / 2)) *
                                          SLINK_WORD_SIZE +
                                      EVM_FDL_BCNRIN_OFFSET * SLINK_HALFWORD_SIZE)) &
             EVM_TCS_BCNRIN_MASK;
    }
    unsigned int gtpe_getbx(const unsigned char *p) {
      return (*(const unsigned int *)(p + GTPE_BCNRIN_OFFSET * SLINK_HALFWORD_SIZE)) & GTPE_BCNRIN_MASK;
    }
    unsigned int getfdlpsc(const unsigned char *p) {
      return (*(const unsigned int *)(p + FEDHeader::length +
                                      (EVM_GTFE_BLOCK + EVM_TCS_BLOCK + EVM_FDL_BLOCK * (EVM_FDL_NOBX / 2)) *
                                          SLINK_WORD_SIZE +
                                      EVM_FDL_PSCVSN_OFFSET * SLINK_HALFWORD_SIZE));
    }
    unsigned long long getfdlttr(const unsigned char *p) {
      return (*(const unsigned long long *)(p + FEDHeader::length +
                                            (EVM_GTFE_BLOCK + EVM_TCS_BLOCK + EVM_FDL_BLOCK * (EVM_FDL_NOBX / 2)) *
                                                SLINK_WORD_SIZE +
                                            EVM_FDL_TECTRG_OFFSET * SLINK_HALFWORD_SIZE));
    }
    unsigned long long getfdlta1(const unsigned char *p) {
      return (*(const unsigned long long *)(p + FEDHeader::length +
                                            (EVM_GTFE_BLOCK + EVM_TCS_BLOCK + EVM_FDL_BLOCK * (EVM_FDL_NOBX / 2)) *
                                                SLINK_WORD_SIZE +
                                            EVM_FDL_ALGOB1_OFFSET * SLINK_HALFWORD_SIZE));
    }
    unsigned long long getfdlta2(const unsigned char *p) {
      return (*(const unsigned long long *)(p + FEDHeader::length +
                                            (EVM_GTFE_BLOCK + EVM_TCS_BLOCK + EVM_FDL_BLOCK * (EVM_FDL_NOBX / 2)) *
                                                SLINK_WORD_SIZE +
                                            EVM_FDL_ALGOB2_OFFSET * SLINK_HALFWORD_SIZE));
    }
  }  // namespace evtn
}  // namespace evf