Main Convert method.
118 {
119
120
121 std::unordered_map<uint32_t, std::vector<std::bitset<256>>> allStripData;
122
123 for (const auto& rdo : vecRDOs) {
130
131 if (strip_max == 0xFFFF){
132
133 const Identifier rdoID{rdo->identify()};
135 continue;
136 }
137
139 if((barrelEC == 0 && eta_mod > 0) || barrelEC > 0)
sideAC = 1;
140
142
143 if (barrelEC == 0) {
144 if(disk < 2){
145 eta_group =
static_cast<uint8_t>(std::floor((std::abs(eta_mod)-1) / 4));
146 }else{
147 eta_group =
static_cast<uint8_t>(std::floor((std::abs(eta_mod)-1) / 2));
148 }
149 }else {
150 if(eta_mod>=0 && eta_mod<=9) eta_group =
static_cast<uint8_t>(std::floor(eta_mod / 4));
151 else if(eta_mod>=10 && eta_mod<=13) eta_group =
static_cast<uint8_t>(std::floor((eta_mod+2)/4));
152 else if(eta_mod>13) eta_group =
static_cast<uint8_t>(std::floor((eta_mod-6)/2));
153 }
154
155
156 uint8_t chips_per_module = (strip_max + 1) / 128;
157 uint32_t key = hccKey(barrelEC, side, disk, phi_mod, eta_mod, eta_group);
158
159 ATH_MSG_DEBUG(
"barrel: "<< barrelEC<<
" sideAC: " << (uint32_t)sideAC <<
" disk: "<<(uint32_t)disk <<
" side: " << (uint32_t)side <<
" phi_mod: "<<(uint32_t)phi_mod <<
" eta_mod: " << eta_mod <<
" eta group: "<<(uint32_t)eta_group <<
" chips per module: " << (uint32_t)chips_per_module);
160
162 auto& StripData = allStripData[
key];
163
164 if (StripData.empty()) {
165 StripData.resize(chips_per_module);
166 }
167
168
170 int chip =
static_cast<int>(std::floor(
strip / 128));
171 int strip_position =
strip % 128;
172 int strip_logical_channel = 2*strip_position + (eta_mod & 1);
173
174 ATH_MSG_DEBUG(
"strip N: "<<
strip <<
" chip n: " << chip <<
" Strip position: " << strip_position <<
" Strip position logical: " << strip_logical_channel);
175 StripData[chip].set(strip_logical_channel);
176 }
177
178 std::vector<uint8_t> vec8Data;
181
182 ATH_MSG_DEBUG(
"All strip data size: " << allStripData.size());
183
184
185 for (const auto& [key, StripData] : allStripData) {
186
189 int ptype = 1;
190 bool keyRecorded = false;
192
193 ATH_MSG_DEBUG(
"key is: " << std::bitset<32>(key) <<
" StripData size: " << StripData.size());
194
195 for (
size_t i = 0;
i < StripData.size(); ++
i) {
196
197 std::bitset<256>
hits = StripData[
i];
198
199 if(hits==0){
200 ++ichannel;
201 continue;
202 }
203
204
206
208 ++ichannel;
209 continue;
210 }
213 keyRecorded = true;
215 }
216 vec8Data.push_back(0xed);
217 vec8Data.push_back(0x6f);
218 ATH_MSG_DEBUG(
"Add 16-0s: " << size % 2 <<
" " << vec8Data.size());
219
220 if(size % 2 == 0){
221 vec8Data.push_back(0);
222 vec8Data.push_back(0);
223 }
224 uint32_t packetLenght = (vec8Data.size()-vectorSize)+4;
225 ATH_MSG_DEBUG(
"Packet Lenght: " << (uint32_t)packetLenght <<
" " << std::bitset<32>(packetLenght));
226
227 std::vector<uint8_t> pktlenght = split32bitWord(packetLenght);
228
229 ATH_MSG_DEBUG(
"PktLenght: " << pktlenght.size() <<
" vec8Data size: " << vec8Data.size());
230
232 vec8Data.insert(vec8Data.begin()+offset, pktlenght.begin(), pktlenght.end());
233 vectorSize = vec8Data.size();
234
235 ATH_MSG_DEBUG(
"vec8Data size: " << vec8Data.size() <<
" size: " << size-1);
236 }
237
238
241
243
245 for(auto &word: vec32Data){
247 }
248 return;
249}
#define ATH_MSG_WARNING(x)
const SCT_ID * m_itkStripsID
Identifier helper class for the ITkStrips subdetector that creates compact Identifier objects and Ide...
uint16_t getStripMax(const SCT_RDORawData *rdo) const
Get the maxumum strip value info from the RDO.
int getBarrelEC(const SCT_RDORawData *rdo) const
Get the barrel/endcape info from the RDO.
std::atomic< uint8_t > m_l0tag
int getEtaModule(const SCT_RDORawData *rdo) const
Get the eta value info from the RDO.
int getSide(const SCT_RDORawData *rdo) const
Get the side info from the RDO.
int getStrip(const SCT_RDORawData *rdo) const
Get the strip number info from the RDO.
std::vector< uint16_t > clusterFinder(const std::bitset< 256 > &inputData, const uint8_t maxCluster=63) const
@breif Method to set pairs of 8 bit words to a 32 bit word.
uint8_t getPhiModule(const SCT_RDORawData *rdo) const
Get the phi value info from the RDO.
uint8_t getDiskLayer(const SCT_RDORawData *rdo) const
Get disk/layer info from the RDO.
void encodeData(const std::vector< uint16_t > &clusters, const uint16_t ichannel, std::vector< uint8_t > &data_encode, int typ, uint8_t l0tag, uint8_t bc_count, uint32_t hccKey, uint16_t &size) const
void packFragments(std::vector< uint8_t > &vec8Words, std::vector< uint32_t > &vec32Words) const
Method to pack vector of 8 bit words intto a vector of 32 bit words.
std::atomic< uint8_t > m_bcid
Method to encode RDO data to vector of 16 bin words.