Main Convert method.
122 {
123
124
125 std::unordered_map<uint32_t, std::vector<std::bitset<256>>> allStripData;
126 std::unordered_map<uint32_t, IdentifierHash> keyToHash;
127
128 IdentifierHash offlineHash = 0;
129
130 for (const auto& rdo : vecRDOs) {
137
138 if (strip_max == 0xFFFF){
139
140 const Identifier rdoID{rdo->identify()};
142 continue;
143 }
144
146 if((barrelEC == 0 && eta_mod > 0) || barrelEC > 0)
sideAC = 1;
147
149
150 if (barrelEC == 0) {
151 if(disk < 2){
152 eta_group =
static_cast<uint8_t>(std::floor((std::abs(eta_mod)-1) / 4));
153 }else{
154 eta_group =
static_cast<uint8_t>(std::floor((std::abs(eta_mod)-1) / 2));
155 }
156 }else {
157 if(eta_mod>=0 && eta_mod<=9) eta_group =
static_cast<uint8_t>(std::floor(eta_mod / 4));
158 else if(eta_mod>=10 && eta_mod<=13) eta_group =
static_cast<uint8_t>(std::floor((eta_mod+2)/4));
159 else if(eta_mod>13) eta_group =
static_cast<uint8_t>(std::floor((eta_mod-6)/2));
160 }
161
162 uint8_t chips_per_module = (strip_max + 1) / 128;
163 uint32_t key = hccKey(barrelEC, side, disk, phi_mod, eta_mod, eta_group);
164
166 keyToHash.insert({
key,offlineHash});
167
168 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 <<
" " << (uint32_t)robID <<
" " << (uint32_t)
m_itkStripsID->wafer_hash(
offlineID(rdo)));
169
171 auto& StripData = allStripData[
key];
172
173 if (StripData.empty()) {
174 StripData.resize(chips_per_module);
175 }
176
177
179 int chip =
static_cast<int>(std::floor(
strip / 128));
180 int strip_position =
strip % 128;
181 int strip_logical_channel = 2*strip_position + (eta_mod & 1);
182
183 ATH_MSG_DEBUG(
"strip N: "<<
strip <<
" chip n: " << chip <<
" Strip position: " << strip_position <<
" Strip position logical: " << strip_logical_channel);
184 StripData[chip].set(strip_logical_channel);
185 }
186
187 std::vector<uint8_t> vec8Data;
190
191 ATH_MSG_DEBUG(
"All strip data size: " << allStripData.size());
192
193
194 for (const auto& [key, StripData] : allStripData) {
195
198 int ptype = 1;
199 bool keyRecorded = false;
201
202 ATH_MSG_DEBUG(
"key is: " << std::bitset<32>(key) <<
" StripData size: " << StripData.size());
203
204 for (
size_t i = 0;
i < StripData.size(); ++
i) {
205
206 std::bitset<256>
hits = StripData[
i];
207
208 if(hits==0){
209 ++ichannel;
210 continue;
211 }
212
213
215
217 ++ichannel;
218 continue;
219 }
222 keyRecorded = true;
224 }
225 vec8Data.push_back(0xed);
226 vec8Data.push_back(0x6f);
228
230 vec8Data.push_back(0);
231 vec8Data.push_back(0);
232 }
233 uint32_t packetLenght = (vec8Data.size()-vectorSize)+4;
234 ATH_MSG_DEBUG(
"Packet Lenght: " << (uint32_t)packetLenght <<
" " << std::bitset<32>(packetLenght));
235
236 std::vector<uint8_t> pktlenght = split32bitWord(packetLenght);
237
238 ATH_MSG_DEBUG(
"PktLenght: " << pktlenght.size() <<
" vec8Data size: " << vec8Data.size());
239
241 vec8Data.insert(vec8Data.begin()+offset, pktlenght.begin(), pktlenght.end());
242 vectorSize = vec8Data.size();
243
248 }
249 vec32Data.clear();
250 }
251
252
255
257
259
260 for(auto &word: vec32Data){
262 }
263 return;
264}
#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.
Identifier offlineID(const SCT_RDORawData *rdo) const
Get the offline Identifier 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
ToolHandle< ITkStripDataRateMonTool > m_dataRateMonTool
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.