ATLAS Offline Software
Loading...
Searching...
No Matches
MdtHptdcReadOut.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "MdtHptdcReadOut.h"
6
8 m_dataWord(0),
10 m_tdcId(0),
11 m_ecnt(0),
12 m_bcId(0),
13 m_wcnt(0),
14 m_channel(0),
15 m_coarse(0),
16 m_fine(0),
17 m_width(0),
18 m_errflag(0),
19 m_leading(false) {}
20
21void MdtHptdcReadOut::decodeWord(uint32_t dataWord) {
22 // Zero all the decoded quantities
23 setZero();
24 m_dataWord = dataWord;
25 m_word = dataWord;
26 m_wordHeader = (dataWord >> HEADERPOS) & HEADERBITS;
27
28 if (is_TSM()) // TDC single measurement
29 {
30 m_leading = !((bool)getBits(getBitsWord(28, 28)));
31 m_tdcId = getBits(getBitsWord(27, 24));
32 m_channel = getBits(getBitsWord(23, 19));
34 m_fine = getBits(getBitsWord(4, 0));
35 } else if (is_TCM()) // TDC combined measurement
36 {
37 m_tdcId = getBits(getBitsWord(27, 24));
38 m_channel = getBits(getBitsWord(23, 19));
39 m_width = getBits(getBitsWord(18, 12));
41 m_fine = getBits(getBitsWord(4, 0));
42 } else if (is_BOT()) // Beginning of TDC
43 {
44 // One header bit is used for TDC numbers > 15
45 m_tdcId = getBits(getBitsWord(28, 24));
46 m_ecnt = getBits(getBitsWord(23, 12));
47 m_bcId = getBits(getBitsWord(11, 0));
48 } else if (is_EOT()) // End of TDC
49 {
50 m_tdcId = getBits(getBitsWord(27, 24));
51 m_ecnt = getBits(getBitsWord(23, 12));
52 m_wcnt = getBits(getBitsWord(11, 0));
53 } else if (is_TES()) // TDC error status
54 {
55 m_tdcId = getBits(getBitsWord(27, 24));
57 }
58}
59
61 m_tdcId = 0;
62 m_ecnt = 0;
63 m_bcId = 0;
64 m_wcnt = 0;
65 m_channel = 0;
66 m_coarse = 0;
67 m_fine = 0;
68 m_width = 0;
69 m_errflag = 0;
70 m_leading = false;
71}
72
73// Encoding methods
74// Beginning of TDC
75uint32_t MdtHptdcReadOut::makeBOT(uint16_t tdcId, uint16_t ecnt, uint16_t bcid) {
76 uint16_t inputData[4];
77 constexpr uint16_t inputPos[4] = {HEADERPOS, 24, 12, 0};
78 uint16_t nData = 4;
79
80 if (tdcId < 16) {
81 inputData[0] = BOTVALUE1;
82 } else {
83 inputData[0] = BOTVALUE2;
84 tdcId -= 16;
85 }
86
87 inputData[1] = tdcId;
88 inputData[2] = ecnt;
89 inputData[3] = bcid;
90
91 return setBits(nData, inputData, inputPos);
92}
93
94// End of TDC
95uint32_t MdtHptdcReadOut::makeEOT(uint16_t tdcId, uint16_t ecnt, uint16_t wcnt) {
96 uint16_t inputData[4] = {EOTVALUE, tdcId, ecnt, wcnt};
97 constexpr uint16_t inputPos[4] = {HEADERPOS, 24, 12, 0};
98 uint16_t nData = 4;
99
100 return setBits(nData, inputData, inputPos);
101}
102
103// Make a TDC single measurement word
104uint32_t MdtHptdcReadOut::makeTSM(uint16_t tdcId, uint16_t channel, bool leading, uint16_t coarse, uint16_t /*fine*/) {
105 uint16_t TSMvalue = leading ? TSMVALUE_LEAD : TSMVALUE_TAIL;
106
107 uint16_t inputData[4] = {TSMvalue, static_cast<uint16_t>(tdcId & 0xf), static_cast<uint16_t>(channel & 0x1f),
108 static_cast<uint16_t>(coarse & 0x7ffff)};
109 constexpr uint16_t inputPos[4] = {HEADERPOS, 24, 19, 0};
110 uint16_t nData = 4;
111
112 return setBits(nData, inputData, inputPos);
113}
114
115// Make a TDC combined measurement word
116uint32_t MdtHptdcReadOut::makeTCM(uint16_t tdcId, uint16_t channel, uint16_t width, uint16_t coarse, uint16_t /*fine*/) {
117 uint16_t inputData[5] = {TCMVALUE, static_cast<uint16_t>(tdcId & 0xf), static_cast<uint16_t>(channel & 0x1f),
118 static_cast<uint16_t>(width & 0x7f), static_cast<uint16_t>(coarse & 0xfff)};
119 constexpr uint16_t inputPos[5] = {HEADERPOS, 24, 19, 12, 0};
120 uint16_t nData = 5;
121
122 return setBits(nData, inputData, inputPos);
123}
uint32_t makeTSM(uint16_t tdcId, uint16_t channel, bool leading, uint16_t coarse, uint16_t fine)
static constexpr uint16_t BOTVALUE1
uint16_t coarse() const
static constexpr uint16_t TSMVALUE_TAIL
uint16_t width() const
bool is_TCM() const
uint16_t tdcId() const
static constexpr uint16_t HEADERBITS
uint32_t makeBOT(uint16_t tdcId, uint16_t ecnt, uint16_t bcid)
static constexpr uint16_t BOTVALUE2
bool is_TSM() const
bool is_BOT() const
static constexpr uint16_t EOTVALUE
bool is_TES() const
static constexpr uint16_t TSMVALUE_LEAD
uint16_t channel() const
uint32_t makeEOT(uint16_t tdcId, uint16_t ecnt, uint16_t wcnt)
void decodeWord(uint32_t dataWord)
uint16_t ecnt() const
static constexpr uint16_t TCMVALUE
uint32_t makeTCM(uint16_t tdcId, uint16_t channel, uint16_t width, uint16_t coarse, uint16_t fine)
static constexpr uint16_t HEADERPOS
bool is_EOT() const
uint32_t getBits(std::pair< uint32_t, uint16_t > wordbstop) const
Definition MdtReadOut.h:27
static uint32_t setBits(uint16_t nData, const uint16_t *inputData, const uint16_t *inputPos)
uint32_t m_word
Definition MdtReadOut.h:38
constexpr std::pair< uint32_t, uint16_t > getBitsWord(const uint16_t bstart, const uint16_t bstop)
Definition MdtReadOut.h:20