ATLAS Offline Software
Loading...
Searching...
No Matches
SectorLogicRXReadOutStructure.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2018 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7#include <fstream>
8#include <iostream>
9#include <string>
10
11//----------------------------------------------------------------------------//
13 //
14 // Constructor used by the simulation program
15 //
16 setInit();
17}
18//----------------------------------------------------------------------------//
20 //
21 // Constructor used by the simulation program
22 //
23 decodeFragment(inputData, m_field);
24}
25//----------------------------------------------------------------------------//
27//----------------------------------------------------------------------------//
28
30 m_word = set16Bits(s_headerNum, s_headerPos.data(), inputData); // theHeader);
31 return m_word;
32}
33//----------------------------------------------------------------------------//
38//----------------------------------------------------------------------------//
40 // bool last=false;
41 // Remove errorCode because it is not used
42 // ubit16 errorCode=0;
43 setInit();
44 m_word = inputWord;
45 // errorCode=0;
46 if (isHeader()) {
47 m_field = 'H';
48 m_fel1id = get16Bits(inputWord, s_headerPos[2], s_headerLen[2]);
49 m_slid = get16Bits(inputWord, s_headerPos[1], s_headerLen[1]);
50 } else if (isFooter()) {
51 m_field = 'F';
52 m_status = get16Bits(inputWord, s_footerPos[1], s_footerLen[1]);
53 m_crc = get16Bits(inputWord, s_footerPos[2], s_footerLen[2]);
54 } else if (isSubHeader()) {
55 m_field = 'S';
57 } else if (isInputHeader()) {
58 m_field = 'I';
61 } else if (isInputBody()) {
62 m_field = 'B';
69
70 } else if (isOutputHeader()) {
71 m_field = 'O';
73 ubit16 outTrigger = get16Bits(inputWord, s_outputHeaderPos[2], s_outputHeaderLen[2]);
74 m_outTriggerWord.clear();
75 m_outTriggerWord.push_back(outTrigger);
76 } else if (isOutputBody()) {
77 m_field = 'M';
78 ubit16 outTrigger = get16Bits(inputWord, s_outputBodyPos[1], s_outputBodyLen[1]);
79 m_outTriggerWord.push_back(outTrigger);
80 if (m_outTriggerWord.size() == 3) {
81 uint32_t muctpiWord =
82 ((m_outTriggerWord[0] & 0x00ff) << 24) | ((m_outTriggerWord[1] & 0x0fff) << 12) | ((m_outTriggerWord[2] & 0x0fff));
83
84 m_moreThan2TriggerCand = (muctpiWord & 0x1);
85 m_outputTriggerBcid = (muctpiWord >> 27) & 0x7;
87 int iTriggerCand = 0;
88 if (((muctpiWord >> 19) & 0x7) != 0x7) {
90 iTriggerCand = m_nTriggerCand - 1;
91 m_outputThreshold[iTriggerCand] = (muctpiWord >> 19) & 0x7;
92 m_outputRoi[iTriggerCand] = (muctpiWord >> 1) & 0x1f;
93 m_outputOverlap[iTriggerCand] = (muctpiWord >> 8) & 0x3;
94 }
95 if (((muctpiWord >> 22) & 0x7) != 0x7) {
97 iTriggerCand = m_nTriggerCand - 1;
98 m_outputThreshold[iTriggerCand] = (muctpiWord >> 22) & 0x7;
99 m_outputRoi[iTriggerCand] = (muctpiWord >> 10) & 0x1f;
100 m_outputOverlap[iTriggerCand] = (muctpiWord >> 17) & 0x3;
101 }
102 }
103 }
104
105 field = m_field;
106 return 0; // temporary: force return to 0
107}
108
109//----------------------------------------------------------------------------//
111 bool status = false;
112 ubit16 theHeader[s_headerNum] = {s_headerVal};
113 if ((m_word & s_last4bitsON) == set16Bits(1, s_headerPos.data(), theHeader)) status = true;
114 return status;
115}
116//----------------------------------------------------------------------------//
118 bool status = false;
119 ubit16 theSubHeader[s_subHeaderNum] = {s_subHeaderVal};
120 if ((m_word & s_last4bitsON) == set16Bits(1, s_subHeaderPos.data(), theSubHeader)) status = true;
121 return status;
122}
123//----------------------------------------------------------------------------//
125 bool status = false;
126 ubit16 theInputHeader[s_inputHeaderNum] = {s_inputHeaderVal};
127 if ((m_word & s_last4bitsON) == set16Bits(1, s_inputHeaderPos.data(), theInputHeader)) status = true;
128 return status;
129}
130//----------------------------------------------------------------------------//
132 bool status = false;
133 ubit16 theOutputHeader[s_outputHeaderNum] = {s_outputHeaderVal};
134 if ((m_word & s_last4bitsON) == set16Bits(1, s_outputHeaderPos.data(), theOutputHeader)) status = true;
135 return status;
136}
137//----------------------------------------------------------------------------//
139 bool status = false;
140 ubit16 theInputBody[s_inputBodyNum] = {s_inputBodyVal};
141 if ((m_word & s_last4bitsON) == set16Bits(1, s_inputBodyPos.data(), theInputBody)) status = true;
142 return status;
143}
144
145//----------------------------------------------------------------------------//
147 bool status = false;
148 ubit16 theOutputBody[s_outputBodyNum] = {s_outputBodyVal};
149 if ((m_word & s_last4bitsON) == set16Bits(1, s_outputBodyPos.data(), theOutputBody)) status = true;
150 return status;
151}
152
153//-----------------------------------------------------------------------//
155 bool status = false;
156 ubit16 theFooter[s_footerNum] = {s_footerVal};
157 if ((m_word & s_last4bitsON) == set16Bits(1, s_footerPos.data(), theFooter)) status = true;
158 return status;
159}
unsigned short int ubit16
static constexpr ubit16 s_last4bitsON
Definition RPCReadOut.h:56
char field() const
Definition RPCReadOut.h:19
ubit16 get16Bits(const ubit16 input, const ubit16 position, const ubit16 length) const
Definition RPCReadOut.h:47
ubit16 set16Bits(const ubit16 n, const ubit16 *pos, const ubit16 *val) const
Definition RPCReadOut.h:30
ubit16 m_word
Definition RPCReadOut.h:27
char m_field
Definition RPCReadOut.h:28
static constexpr std::array< ubit16, s_subHeaderNum > s_subHeaderPos
ubit16 decodeFragment(ubit16 inputWord, char &field)
static constexpr std::array< ubit16, s_inputHeaderNum > s_inputHeaderPos
static constexpr std::array< ubit16, s_headerNum > s_headerLen
static constexpr std::array< ubit16, s_footerNum > s_footerPos
static constexpr std::array< ubit16, s_footerNum > s_footerLen
static constexpr std::array< ubit16, s_inputBodyNum > s_inputBodyPos
static constexpr std::array< ubit16, s_outputBodyNum > s_outputBodyPos
static constexpr std::array< ubit16, s_inputHeaderNum > s_inputHeaderLen
static constexpr std::array< ubit16, s_outputBodyNum > s_outputBodyLen
static constexpr std::array< ubit16, s_headerNum > s_headerPos
static constexpr std::array< ubit16, s_outputHeaderNum > s_outputHeaderPos
static constexpr std::array< ubit16, s_outputHeaderNum > s_outputHeaderLen
static constexpr std::array< ubit16, s_subHeaderNum > s_subHeaderLen
static constexpr std::array< ubit16, s_inputBodyNum > s_inputBodyLen