ATLAS Offline Software
Loading...
Searching...
No Matches
TileHid2RESrcID.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include <iostream>
6#include <cassert>
7
12
13#include "GaudiKernel/MsgStream.h"
14
15#include "eformat/SourceIdentifier.h"
16using eformat::helper::SourceIdentifier;
17
18// implementation of Tile Frag ID to RESrcID conversion.
19//
20
21TileHid2RESrcID::TileHid2RESrcID(const TileHWID* tileHWID, uint32_t runnum)
22 : m_runnum(0)
23{
24 m_tileHWID = tileHWID;
25 if (m_tileHWID) {
26 // make internal maps
27 initialize(runnum);
28 initializeMuRcv(runnum);
29 }
30}
31
32void TileHid2RESrcID::setTileHWID(const TileHWID* tileHWID, uint32_t runnum)
33{
34 if ( m_tileHWID != tileHWID || m_runnum != runnum) {
35 m_tileHWID = tileHWID;
36 if (m_tileHWID) {
37 // make internal maps
38 initialize(runnum);
39 }
40 }
41}
42
43void TileHid2RESrcID::initialize(const std::vector<std::vector<uint32_t> > & allmap)
44{
45 for (const std::vector<uint32_t>& v : allmap) {
46 if (v.size()>0) {
47 int id = v[0];
48 if (v.size()>1) {
49 m_frag2ROD[id].assign(v.begin()+1,v.end());
50 } else if ( m_frag2ROD.find(id) != m_frag2ROD.end() ) {
51 m_frag2ROD.erase(id);
52 }
53 }
54 }
56}
57
58
59void TileHid2RESrcID::initialize(uint32_t runnum)
60{
61 m_runnum = runnum;
62 eformat::SubDetector detid[6];
63
64 detid[0] = eformat::TILECAL_LASER_CRATE; // 0x50 - beam crate
65 detid[1] = eformat::TILECAL_BARREL_A_SIDE; // 0x51 - barrel positive
66 detid[2] = eformat::TILECAL_BARREL_C_SIDE; // 0x52 - barrel negative
67 detid[3] = eformat::TILECAL_EXT_A_SIDE; // 0x53 - ext.bar positive
68 detid[4] = eformat::TILECAL_EXT_C_SIDE; // 0x54 - ext.bar negative
69 detid[5] = eformat::TDAQ_BEAM_CRATE; // 0x70 - common beam crate
70
72 std::vector<HWIdentifier>::const_iterator first = m_tileHWID->drawer_begin();
73 std::vector<HWIdentifier>::const_iterator last = m_tileHWID->drawer_end();
74
75 for ( ; first!=last; ++first) {
76 int ros = m_tileHWID->ros(*first);
77 int drawer = m_tileHWID->drawer(*first);
78 uint32_t frag = m_tileHWID->frag(*first);
79
80 uint32_t id = 0; // id is always 0 for Beam ROD (ros=0)
81 if (ros > 0) {
82 if (runnum>318000) {
83 // new frag->ROB mapping since March 2017
84 // put 4 drawers in two subsequent RODs
85 // odd drawers in odd ROD, even drawers in even ROD
86 id = ((drawer & 0xFC) >> 1) | (drawer & 0x1) ;
87 } else {
88 // old mapping
89 // (put 4 drawers in one ROD - remove last 2 bits)
90 id = (drawer >> 2);
91 }
92 } else if (drawer>0x7 && drawer < 0xFF) {
93 ros = 5; // frags from common beam crate
94 }
95
96 // build ROD id
97 SourceIdentifier sid = SourceIdentifier(detid[ros],id);
98 uint32_t rod_id = sid.code();
99
100 // add ROD id to the map
101 m_frag2ROD[frag] = {rod_id,frag};
102 }
103
104 if (runnum>=400000) {
105 // LBA14 is demonstrator in RUN3 - add special flag
106 m_frag2ROD[0x10d].push_back(1);
107
108 // fragments for EBA61 and EBA63 were swapped in 2021-2023
109 if (runnum<463700) {
110 m_frag2ROD[0x33c][1] = 0x33e;
111 m_frag2ROD[0x33e][1] = 0x33c;
112 }
113 }
114
115 // laser fragments in specific ROB
116 if (runnum>318000) {
117 // new frag->ROB mapping since March 2017
118 m_frag2ROD[0x16] = {0x520020,0x16};
119 m_frag2ROD[0xff] = {0x520020,0xff};
120 } else {
121 m_frag2ROD[0x16] = {0x520010,0x16};
122 m_frag2ROD[0xff] = {0x520010,0xff};
123 }
124 m_frag2ROD[0x17] = {0,0x17};
125
126 updateBSmap();
127}
128
130{
131 m_TileMuRcvRunnum = runnum;
132 eformat::SubDetector detid[6];
133
134 detid[0] = eformat::TILECAL_LASER_CRATE; // 0x50 - beam crate
135 detid[1] = eformat::TILECAL_BARREL_A_SIDE; // 0x51 - barrel positive
136 detid[2] = eformat::TILECAL_BARREL_C_SIDE; // 0x52 - barrel negative
137 detid[3] = eformat::TILECAL_EXT_A_SIDE; // 0x53 - ext.bar positive
138 detid[4] = eformat::TILECAL_EXT_C_SIDE; // 0x54 - ext.bar negative
139 detid[5] = eformat::TDAQ_BEAM_CRATE; // 0x70 - common beam crate
140
141 // iterator over all drawer Identifiers
142 std::vector<HWIdentifier>::const_iterator first = m_tileHWID->drawer_begin();
143 std::vector<HWIdentifier>::const_iterator last = m_tileHWID->drawer_end();
144
145 for ( ; first!=last; ++first) {
146 int ros = m_tileHWID->ros(*first);
147 int drawer = m_tileHWID->drawer(*first);
148 int frag = m_tileHWID->frag(*first);
149 uint32_t id = 0;
150
151 //std::cout << "TileHid2RESrcID::setTileMuRcvHWID ros:" << ros << " drawer: " << std::hex << drawer << " frag: " << frag << std::dec << std::endl;
152
153 if (ros>2){
154 // Extended Barrel
155 // (put 8 drawers in one ROD - remove last 3 bits)
156 id = (drawer >> 3) + 0x100;
157 } else {
158 // Long Barrel
159 // (put 4 drawers in one ROD - remove last 2 bits)
160 id = (drawer >> 2) + 0x100;
161 }
162 // build ROD id
163 SourceIdentifier sid = SourceIdentifier(detid[ros],id);
164 uint32_t rod_id = sid.code();
165
166 // add ROD id to the map
167 m_TileMuRcvFrag2ROD[frag] = rod_id;
168 }
169}
170
171void TileHid2RESrcID::setROD2ROBmap(const std::vector<std::string> & ROD2ROB,
172 MsgStream & log)
173{
174 // overwrite ROD IDs for some frags if they are set in jobOptions
175 // vector ROB2ROD contains (frag,ROB) pairs (note in eformat V3 ROD == ROB ! )
176 int size=ROD2ROB.size();
177 int fragCount = 0;
178 for (int i=1; i<size; i+=2) {
179 uint32_t frag = strtol(ROD2ROB[i-1].data(),NULL,0);
180 uint32_t rob = strtol(ROD2ROB[i].data(),NULL,0) & 0xFFFFFF;
181 if ( frag < 0x2000 ) {
182 // this is actually remapping for fragments inside ROB, bypassing ROD ID
183 int frag_id = this->getOfflineFragID(frag);
184 if (frag_id < 0) {
185 m_frag2ROD[frag] = {rob, frag%0x1000};
186 } else {
187 m_frag2ROD[frag_id][0] = rob;
188 }
189 log << MSG::INFO << "TileHid2RESrcID:: mapping frag 0x"<< MSG::hex
190 << frag << " to ROB 0x" << rob << MSG::dec << endmsg;
191 ++fragCount;
192 } else {
193 log << MSG::ERROR << "You are using obsolete ROD to ROB mapping" << endmsg;
194 log << MSG::ERROR << "Please, replace it by frag -> ROB mapping" << endmsg;
195 assert(0);
196 }
197 }
198 if (fragCount > 0)
199 log << MSG::INFO << "TileHid2RESrcID:: " << fragCount
200 << " frag to ROD remappings set via jobOptions" << endmsg;
201
202 if (m_frag2ROD[0x17][0] != 0) m_frag2ROD[0x16] = {m_frag2ROD[0x17][0], 0x16};
203 else if (m_frag2ROD.find(0x16) != m_frag2ROD.end()) m_frag2ROD[0x17][0] = m_frag2ROD[0x16][0];
204}
205
206void TileHid2RESrcID::setROD2ROBmap (const eformat::FullEventFragment<const uint32_t*> * event,
207 bool& of2Default,
208 MsgStream & log)
209{
210
211 uint32_t runnum = event->run_no();
212 if ( ( (runnum>318000 && m_runnum<=318000) || (runnum<=318000 && m_runnum>318000) ) ) {
213 log << MSG::INFO << "Reinitializing TileHid2RESrcID for run " << runnum << endmsg;
214 initialize(runnum);
215 }
216
217 uint32_t nBeamFrag=0, nRODfrag=0, nDataFrag[10]={0,0,0,0,0,0,0,0,0,0}, flags=0xFFFF, flags5=0xFFFF;
218 std::map<int,int> fragMap;
219 std::map<int,int> beamMap;
220 std::vector<int> fragIDs;
221
222 bool cisparFound = false;
223 uint32_t lascisROB = 0;
224
225 uint32_t ndet = event->nchildren();
226 for (size_t idet=0; idet<ndet; ++idet) {
227 const uint32_t* fpdet;
228 event->child(fpdet, idet);
230
231 uint32_t ROBid = robf.source_id();
232
233 const auto ROBSubDetID = eformat::helper::SourceIdentifier(ROBid).subdetector_id();
234 const auto ROBSubDetGroup = eformat::helper::SourceIdentifier(ROBid).subdetector_group();
235 if (ROBSubDetGroup == eformat::SubDetectorGroup::TILECAL ||
236 ROBSubDetID == eformat::SubDetector::TDAQ_BEAM_CRATE || ROBSubDetID == 0) { // SubDetID=00 used in testbeam
237
238 unsigned int source_id = robf.rod_source_id();
239 eformat::helper::SourceIdentifier id = eformat::helper::SourceIdentifier(source_id);
240 unsigned int subdet_id = id.subdetector_id();
241
242 unsigned int size = robf.rod_ndata();
243 unsigned int max_allowed_size = robf.rod_fragment_size_word();
244 unsigned int delta = robf.rod_header_size_word() + robf.rod_trailer_size_word();
245 if (max_allowed_size > delta) max_allowed_size-=delta; else max_allowed_size=0;
246 if (size > max_allowed_size) size = max_allowed_size;
247 if ( size > 0 ) {
248
249 const uint32_t * data;
250 if (robf.rod_status_position()==0 &&
251 robf.rod_nstatus() + robf.rod_header_size_word() + robf.rod_trailer_size_word() >= robf.rod_fragment_size_word()) {
252 robf.rod_status(data);
253 } else {
254 robf.rod_data(data);
255 }
256
257 switch ( subdet_id ) {
258 case TILE_BEAM_ID: // TILE BEAM ROD
259 case COMMON_BEAM_ID: // COMMON BEAM ROD
260 case TILE_POS_ID: // POSITIVE ROD
261 case TILE_NEG_ID: // NEGATIVE ROD
262 case TILE_EBPOS_ID: // POSITIVE EB ROD
263 case TILE_EBNEG_ID: // NEGATIVE EB ROD
264 {
265
266 unsigned int offset = 0, sizePos = 1, idPos = 2;
267 if ( *(data) != 0xff1234ff ) { // appeared since Sep 2005
268 --sizePos;
269 --idPos;
270 }
271
272 while ( offset+idPos < size ) {
273
274 uint32_t fragsize = *(data + offset + sizePos);
275 uint32_t fragid = ( *(data + offset + idPos) ) & 0xFFFF;
276 uint32_t upperhalf = ( *(data + offset + idPos) ) >> 16;
277 offset += fragsize;
278
279 if ( fragsize <= idPos || fragsize > size) break; // too small or too big frag - ignore and exit
280
281 int fragtype = upperhalf & 0xFF;
282
283 if (fragtype >= 0x40 && fragtype < 0x50) { // TMDB fragments
284
285 int ros = subdet_id&0xF;
286 if (ros>0 && ros<=4) {
287 uint32_t vers = fragid;
288 int nmod = (ros>2)?8:4; // we have 8 modules per fragment in ext.barrel, 4 modules in barrel
289 fragid = (ros<<8) | (source_id&0xF)*nmod;
290
291 FRAGRODMAP::const_iterator it = m_TileMuRcvFrag2ROD.find(fragid);
292 if(it == m_TileMuRcvFrag2ROD.end()){
293 log << MSG::INFO << "New TMDB frag 0x" << MSG::hex << fragid
294 << " type 0x" << fragtype << " vers 0x"<< vers
295 << " in ROB 0x" << ROBid << MSG::dec << endmsg;
296 } else {
297 if ( (*it).second != ROBid ) {
298 log << MSG::INFO << "TMDB frag 0x" << MSG::hex << fragid
299 << " type 0x" << fragtype << " vers 0x"<< vers
300 << " remapping from ROB 0x" << (*it).second
301 << " to 0x" << ROBid << MSG::dec << endmsg;
302 } else {
303 log << MSG::DEBUG << "TMDB frag 0x" << MSG::hex << fragid
304 << " type 0x" << fragtype << " vers 0x"<< vers
305 << " found in ROB 0x" << (*it).second
306 << " as expected" << MSG::dec << endmsg;
307 }
308 }
309 for (int nf=0; nf<nmod; ++nf) {
310 m_TileMuRcvFrag2ROD[fragid] = ROBid;
311 ++fragid;
312 }
313 }
314 break;
315 }
316
317 if (fragtype == 6) {
318 fragid += TileCalibUtils::FELIX_FRAGID_OFFSET; // FELIX fragment
319 }
320
321 FRAGFULLMAP::const_iterator it = m_frag2ROD.find(fragid);
322 if(it == m_frag2ROD.end()){
323 log << MSG::INFO << "New frag 0x" << MSG::hex << fragid
324 << " in ROB 0x" << ROBid << MSG::dec << endmsg;
325 } else {
326 if ( (*it).second[0] != ROBid ) {
327 log << MSG::INFO << "Frag 0x" << MSG::hex << fragid
328 <<" remapping from ROB 0x" << (*it).second[0]
329 << " to 0x" << ROBid << MSG::dec << endmsg;
330 } else {
331 log << MSG::DEBUG << "Frag 0x" << MSG::hex << fragid
332 <<" found in ROB 0x" << (*it).second
333 << " as expected" << MSG::dec << endmsg;
334 }
335 }
336
337 if (fragid < 0xff) { // all testbeam frags and laser frag
338 ++nBeamFrag;
339 m_frag2ROD[fragid] = {ROBid,fragid};
340 ++beamMap[fragtype];
341 } else if (fragid < 0x100) { // CIS par which can come from two sources
342 ++nBeamFrag;
343 ++beamMap[fragtype];
344 if (fragtype == 0x30) { // CIS par in LAST ROD
345 lascisROB = ROBid;
346 } else {
347 m_frag2ROD[fragid] = {ROBid,fragid}; // separate CIS par in every partition
348 cisparFound = true;
349 }
350 } else if (fragid < 0x500 || fragtype == 6) { // normal drawers
351 ++nRODfrag;
352 int frag_id = this->getOfflineFragID(fragid);
353 if (frag_id < 0) {
354 m_frag2ROD[fragid] = {ROBid,fragid};
355 } else {
356 m_frag2ROD[frag_id][0] = ROBid;
357 }
358 ++fragMap[fragtype];
359 if (fragtype == 4) flags = upperhalf;
360 else if (fragtype == 5) {
361 flags5 = upperhalf;
362 fragIDs.push_back((int)fragid);
363 }
364 }
365 }
366 break;
367 }
368 default:
369 break;
370 }
371 }
372 }
373 }
374 if (!cisparFound) {
375 if (lascisROB) {
376 m_frag2ROD[0xff] = {lascisROB,0xff};
377 log << MSG::INFO << "TileHid2RESrcID: Attention! Taking CISpar from lastROD 0x" << MSG::hex << lascisROB << MSG::dec << endmsg;
378 } else {
379 log << MSG::INFO << "TileHid2RESrcID: no CISpar in the data" << endmsg;
380 }
381 }
382 log << MSG::INFO << "TileHid2RESrcID: " << nBeamFrag << " beam sub-frags (";
383 std::map<int,int>::const_iterator itr=beamMap.begin();
384 std::map<int,int>::const_iterator end=beamMap.end();
385 for (; itr!=end; ++itr) {
386 log << " type=0x" << MSG::hex << itr->first << MSG::dec << " nf="<<itr->second;
387 }
388 log << MSG::INFO << " ) and " << nRODfrag << " ROD sub-frags (";
389 itr=fragMap.begin();
390 end=fragMap.end();
391 for (; itr!=end; ++itr) {
392 log << " type=0x" << MSG::hex << itr->first << MSG::dec << " nf="<<itr->second;
393 if (itr->first < 10) nDataFrag[itr->first]+=itr->second; // id=0 - all digits, id=1 - digits above threshold
394 // id=2,3,4,5 - reco frags
395 }
396 log << " ) was found in the data" << endmsg;
397
398 if (m_frag2ROD[0x17][0] != 0) m_frag2ROD[0x16] = {m_frag2ROD[0x17][0], 0x16};
399 else if (m_frag2ROD.find(0x16) != m_frag2ROD.end()) m_frag2ROD[0x17][0] = m_frag2ROD[0x16][0];
400
401 bool of2=true; // default for RUN1 data
402 if (nDataFrag[4]!=0) {
403 if ((flags & 0x3000) < 0x3000) // real data
404 of2 = ((flags & 0x400) != 0);
405 } else if (nDataFrag[5]!=0) {
406 if ((flags5 & 0x3000) < 0x3000) // real data
407 of2 = ((flags5 & 0x400) != 0);
408 }
409 log << MSG::DEBUG << "OF2 flag in data is " << ((of2)?"True":"False") << endmsg;
410
411 if (of2 != of2Default) {
412 log << MSG::INFO << "Setting OF2 flag in in TileROD_Decoder to " << ((of2) ? "True" : "False")
413 << " instead of " << ((of2Default) ? "True" : "False") << endmsg;
414 of2Default = of2;
415 }
416
417 updateBSmap();
418}
419
420void TileHid2RESrcID::setBSfrag(int frag_id, uint32_t bs_frag)
421{
422 FRAGFULLMAP::iterator it = m_frag2ROD.find(frag_id);
423 if(it == m_frag2ROD.end()){
424 std::cout <<" TileHid2RESrcID invalid FRAG ID 0x"<<std::hex<<frag_id<<std::dec<<std::endl;
425 assert(0);
426 return;
427 }
428
429 if (it->second.size() < 2) {
430 it->second.resize(2);
431 }
432 it->second[1] = bs_frag;
433 m_bs2offline[bs_frag] = frag_id;
434}
435
436void TileHid2RESrcID::setDrawerType(int frag_id, uint32_t type)
437{
438 FRAGFULLMAP::iterator it = m_frag2ROD.find(frag_id);
439 if(it == m_frag2ROD.end()){
440 std::cout <<" TileHid2RESrcID invalid FRAG ID 0x"<<std::hex<<frag_id<<std::dec<<std::endl;
441 assert(0);
442 return;
443 }
444
445 size_t siz = it->second.size();
446 if (siz < 3) {
447 it->second.resize(3);
448 if (siz < 2) {
449 it->second[1] = frag_id;
450 m_bs2offline[frag_id] = frag_id;
451 }
452 }
453 it->second[2] = type;
454}
455
456uint32_t TileHid2RESrcID::getRobFromFragID(int frag_id) const
457{
458 // this method returns a RESrcID of the ROB, for a given fragment ID
459 // in eformat V3 ROB and ROD IDs are the same
460 return getRodID(frag_id);
461}
462
463uint32_t TileHid2RESrcID::getRodID(int frag_id) const
464{
465 // this method returns a RESrcID for the ROD, for a given fragment ID
466
467 FRAGFULLMAP::const_iterator it = m_frag2ROD.find(frag_id);
468 if(it == m_frag2ROD.end()){
469 if (frag_id < static_cast<int>(TileCalibUtils::FELIX_FRAGID_OFFSET)) {
470 std::cout <<" TileHid2RESrcID invalid FRAG ID 0x"<<std::hex<<frag_id<<std::dec<<std::endl;
471 assert(0);
472 }
473 return 0;
474 }
475
476 return ( (*it).second[0] ) ;
477}
478
479uint32_t TileHid2RESrcID::getBSfragID(int frag_id) const
480{
481 // this method returns fragment ID in bytestream for a given transient fragment ID
482
483 FRAGFULLMAP::const_iterator it = m_frag2ROD.find(frag_id);
484 if(it == m_frag2ROD.end()){
485 if (frag_id < static_cast<int>(TileCalibUtils::FELIX_FRAGID_OFFSET)) {
486 std::cout <<" TileHid2RESrcID invalid FRAG ID 0x"<<std::hex<<frag_id<<std::dec<<std::endl;
487 assert(0);
488 }
489 return 0;
490 }
491
492 return ((((*it).second.size()>1) ? (*it).second[1] : frag_id) ) ;
493}
494
495uint32_t TileHid2RESrcID::getDrawerType(int frag_id) const
496{
497 // this method returns drawer type (legacy/demonstrator/...) for a given transient fragment ID
498
499 FRAGFULLMAP::const_iterator it = m_frag2ROD.find(frag_id);
500 if(it == m_frag2ROD.end()){
501 std::cout <<" TileHid2RESrcID invalid FRAG ID 0x"<<std::hex<<frag_id<<std::dec<<std::endl;
502 assert(0);
503 return 0;
504 }
505
506 return (((*it).second.size()>2) ? (*it).second[2] : 0);
507}
508
509const std::vector<uint32_t> & TileHid2RESrcID::getDrawerInfo(int frag_id) const
510{
511 // this method returns drawer type (legacy/demonstrator/...) for a given transient fragment ID
512
513 FRAGFULLMAP::const_iterator it = m_frag2ROD.find(frag_id);
514 if(it == m_frag2ROD.end()){
515 std::cout <<" TileHid2RESrcID invalid FRAG ID 0x"<<std::hex<<frag_id<<std::dec<<std::endl;
516 assert(0);
517 return m_defaultDrawer;
518 }
519
520 return (*it).second;
521}
522
523int TileHid2RESrcID::getOfflineFragID(uint32_t bs_frag_id) const
524{
525 // this method returns offine ID for given bytestream ID
526
527 BS2OFFLINEMAP::const_iterator it = m_bs2offline.find(bs_frag_id);
528 if(it == m_bs2offline.end()){
529 return -1;
530 }
531
532 return (*it).second;
533}
534
536{
537 m_bs2offline.clear();
538 for (auto v : m_frag2ROD) {
539 if (v.second.size()>1) {
540 m_bs2offline[v.second[1]] = v.first;
541 } else {
542 m_bs2offline[v.first] = v.first;
543 }
544 }
545}
546
549uint32_t TileHid2RESrcID::getRobID( uint32_t rod_id) const
550{
551 // in eformat V3 ROB and ROD IDs are the same
552 return rod_id;
553}
554
557uint32_t TileHid2RESrcID::getRosID( uint32_t rob_id) const
558{
559// Change Module Type to ROS, moduleid = 0
560
561 SourceIdentifier id = SourceIdentifier(rob_id);
562 SourceIdentifier id2 = SourceIdentifier(id.subdetector_id(),0);
563 return id2.code();
564
565}
566
569uint32_t TileHid2RESrcID::getDetID ( uint32_t ros_id) const
570{
571// ROS to DET
572
573 SourceIdentifier id = SourceIdentifier(ros_id);
574 SourceIdentifier id2 = SourceIdentifier(id.subdetector_id(),0);
575 return id2.code();
576}
577
579{
580 // this method returns a RESrcID of the ROB, for a given fragment ID
581 // in eformat V3 ROB and ROD IDs are the same
582 return getRodTileMuRcvID(frag_id);
583}
584
585uint32_t TileHid2RESrcID::getRodTileMuRcvID(int frag_id) const
586{
587 // this method returns a RESrcID for the ROD, for a given fragment ID
588
589 FRAGRODMAP::const_iterator it = m_TileMuRcvFrag2ROD.find(frag_id);
590 if(it == m_TileMuRcvFrag2ROD.end()){
591 std::cout <<" TileHid2RESrcID invalid FRAG ID 0x"<<std::hex<<frag_id<<std::dec<<std::endl;
592 assert(0);
593 return 0;
594 }
595
596 return ( (*it).second ) ;
597}
598
599void TileHid2RESrcID::printSpecial (MsgStream & log)
600{
601 const char * names[] = {"Legacy", "Demo", "DemoEB", "Unknown"};
602 for (const auto& it : m_frag2ROD) {
603 const std::vector<uint32_t> & v = it.second;
604 if (v.size()>1) {
605 if (it.first != static_cast<int>(v[1])) {
606 log << MSG::INFO << "Frag 0x" << std::hex << it.first << " is taken from bytestream frag 0x" << v[1] << std::dec << endmsg;
607 }
608 if (v.size()>2) {
609 log << MSG::INFO << "Frag 0x" << std::hex << it.first << " fragment type is "
610 << std::dec << v[2] << " - " << names[std::min(3U,v[2])] << endmsg;
611 }
612 }
613 }
614
615}
#define endmsg
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
HWIdentifier id2
#define TILE_NEG_ID
Definition TileTBFrag.h:16
#define TILE_EBNEG_ID
Definition TileTBFrag.h:18
#define COMMON_BEAM_ID
Definition TileTBFrag.h:19
#define TILE_BEAM_ID
definition of various fragments expected in BS files from testbeam
Definition TileTBFrag.h:14
#define TILE_EBPOS_ID
Definition TileTBFrag.h:17
#define TILE_POS_ID
Definition TileTBFrag.h:15
static const unsigned int FELIX_FRAGID_OFFSET
Offset for frag ID used for FELIX in frag ID to ROB ID map.
Helper class for TileCal online (hardware) identifiers.
Definition TileHWID.h:49
FRAGFULLMAP m_frag2ROD
void initialize(uint32_t runnum)
void setBSfrag(int frag_id, uint32_t bs_frag)
std::vector< uint32_t > m_defaultDrawer
uint32_t getRodID(int frag_id) const
make a ROD SrcID for a fragment ID
uint32_t getRosID(uint32_t rob_id) const
Make a ROS Source ID from a ROB source ID.
uint32_t getRobID(uint32_t rod_id) const
Make a ROB Source ID from a ROD source ID.
uint32_t getBSfragID(int frag_id) const
uint32_t m_TileMuRcvRunnum
void initializeMuRcv(uint32_t runnum)
uint32_t getDetID(uint32_t ros_id) const
Make a SubDetector ID from ROS source ID.
uint32_t getRobFromFragID(int frag_id) const
make a ROB SrcID for a fragment ID
uint32_t getRobFromTileMuRcvFragID(int frag_id) const
FRAGRODMAP m_TileMuRcvFrag2ROD
const TileHWID * m_tileHWID
const std::vector< uint32_t > & getDrawerInfo(int frag_id) const
void setROD2ROBmap(const std::vector< std::string > &ROD2ROB, MsgStream &log)
TileHid2RESrcID(const TileHWID *tileHWID=0, uint32_t runnum=0)
constrcutor
uint32_t getDrawerType(int frag_id) const
void setTileHWID(const TileHWID *tileHWID, uint32_t runnum=0)
void printSpecial(MsgStream &log)
uint32_t getRodTileMuRcvID(int frag_id) const
BS2OFFLINEMAP m_bs2offline
void setDrawerType(int frag_id, uint32_t type)
int getOfflineFragID(uint32_t bs_frag_id) const
Retrieve extra info - ByteStream frag ID and drawer typefor a given transient fragment ID.
void initialize()