ATLAS Offline Software
Loading...
Searching...
No Matches
TileHid2RESrcID Class Reference

This class provides conversion between fragment ID and RESrcID. More...

#include <TileHid2RESrcID.h>

Collaboration diagram for TileHid2RESrcID:

Public Types

typedef int COLLECTION_ID

Public Member Functions

 TileHid2RESrcID (const TileHWID *tileHWID=0, uint32_t runnum=0)
 constrcutor
void setTileHWID (const TileHWID *tileHWID, uint32_t runnum=0)
void initialize (uint32_t runnum)
void initializeMuRcv (uint32_t runnum)
void initialize (const std::vector< std::vector< uint32_t > > &fullmap)
void setROD2ROBmap (const std::vector< std::string > &ROD2ROB, MsgStream &log)
void setROD2ROBmap (const eformat::FullEventFragment< const uint32_t * > *event, bool &of2Default, MsgStream &log)
void setBSfrag (int frag_id, uint32_t bs_frag)
void setDrawerType (int frag_id, uint32_t type)
void printSpecial (MsgStream &log)
uint32_t getRobFromFragID (int frag_id) const
 make a ROB SrcID for a fragment ID
uint32_t getRobFromTileMuRcvFragID (int frag_id) const
uint32_t getRodID (int frag_id) const
 make a ROD SrcID for a fragment ID
uint32_t getRodTileMuRcvID (int frag_id) const
uint32_t getRobID (uint32_t rod_id) const
 Make a ROB Source ID from a ROD source ID.
uint32_t getRobID_8 (uint32_t rod_id) const
uint32_t getRosID (uint32_t rob_id) const
 Make a ROS Source ID from a ROB source ID.
uint32_t getRosID_8 (uint32_t rob_id) const
uint32_t getDetID (uint32_t ros_id) const
 Make a SubDetector ID from ROS source ID.
uint32_t getRunNum ()
 Retrieve run number for which hash was initialized.
int getOfflineFragID (uint32_t bs_frag_id) const
 Retrieve extra info - ByteStream frag ID and drawer typefor a given transient fragment ID.
uint32_t getBSfragID (int frag_id) const
uint32_t getDrawerType (int frag_id) const
const std::vector< uint32_t > & getDrawerInfo (int frag_id) const

Private Types

typedef std::map< int, uint32_t > FRAGRODMAP
typedef std::map< uint32_t, int > BS2OFFLINEMAP
typedef std::map< int, std::vector< uint32_t > > FRAGFULLMAP

Private Member Functions

void updateBSmap ()

Private Attributes

const TileHWIDm_tileHWID
FRAGRODMAP m_TileMuRcvFrag2ROD
BS2OFFLINEMAP m_bs2offline
FRAGFULLMAP m_frag2ROD
uint32_t m_runnum
uint32_t m_TileMuRcvRunnum = 0U
std::vector< uint32_t > m_defaultDrawer

Detailed Description

This class provides conversion between fragment ID and RESrcID.

Author
Alexander Solodkov

Fragment ID is the unique ID for every super-drawer. RESrcID is used for identifying each ROD.

Definition at line 28 of file TileHid2RESrcID.h.

Member Typedef Documentation

◆ BS2OFFLINEMAP

typedef std::map<uint32_t, int> TileHid2RESrcID::BS2OFFLINEMAP
private

Definition at line 95 of file TileHid2RESrcID.h.

◆ COLLECTION_ID

Definition at line 32 of file TileHid2RESrcID.h.

◆ FRAGFULLMAP

typedef std::map<int, std::vector<uint32_t> > TileHid2RESrcID::FRAGFULLMAP
private

Definition at line 96 of file TileHid2RESrcID.h.

◆ FRAGRODMAP

typedef std::map<int, uint32_t> TileHid2RESrcID::FRAGRODMAP
private

Definition at line 94 of file TileHid2RESrcID.h.

Constructor & Destructor Documentation

◆ TileHid2RESrcID()

TileHid2RESrcID::TileHid2RESrcID ( const TileHWID * tileHWID = 0,
uint32_t runnum = 0 )

constrcutor

Definition at line 21 of file TileHid2RESrcID.cxx.

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}
void initializeMuRcv(uint32_t runnum)
const TileHWID * m_tileHWID
void initialize()

Member Function Documentation

◆ getBSfragID()

uint32_t TileHid2RESrcID::getBSfragID ( int frag_id) const

Definition at line 479 of file TileHid2RESrcID.cxx.

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}
static const unsigned int FELIX_FRAGID_OFFSET
Offset for frag ID used for FELIX in frag ID to ROB ID map.
FRAGFULLMAP m_frag2ROD

◆ getDetID()

uint32_t TileHid2RESrcID::getDetID ( uint32_t ros_id) const

Make a SubDetector ID from ROS source ID.

mapping SrcID from ROS to Det

Definition at line 569 of file TileHid2RESrcID.cxx.

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}
HWIdentifier id2

◆ getDrawerInfo()

const std::vector< uint32_t > & TileHid2RESrcID::getDrawerInfo ( int frag_id) const

Definition at line 509 of file TileHid2RESrcID.cxx.

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}
std::vector< uint32_t > m_defaultDrawer

◆ getDrawerType()

uint32_t TileHid2RESrcID::getDrawerType ( int frag_id) const

Definition at line 495 of file TileHid2RESrcID.cxx.

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}

◆ getOfflineFragID()

int TileHid2RESrcID::getOfflineFragID ( uint32_t bs_frag_id) const

Retrieve extra info - ByteStream frag ID and drawer typefor a given transient fragment ID.

Definition at line 523 of file TileHid2RESrcID.cxx.

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}
BS2OFFLINEMAP m_bs2offline

◆ getRobFromFragID()

uint32_t TileHid2RESrcID::getRobFromFragID ( int frag_id) const

make a ROB SrcID for a fragment ID

Definition at line 456 of file TileHid2RESrcID.cxx.

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}
uint32_t getRodID(int frag_id) const
make a ROD SrcID for a fragment ID

◆ getRobFromTileMuRcvFragID()

uint32_t TileHid2RESrcID::getRobFromTileMuRcvFragID ( int frag_id) const

Definition at line 578 of file TileHid2RESrcID.cxx.

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}
uint32_t getRodTileMuRcvID(int frag_id) const

◆ getRobID()

uint32_t TileHid2RESrcID::getRobID ( uint32_t rod_id) const

Make a ROB Source ID from a ROD source ID.

mapping SrcID from ROD to ROB

Definition at line 549 of file TileHid2RESrcID.cxx.

550{
551 // in eformat V3 ROB and ROD IDs are the same
552 return rod_id;
553}

◆ getRobID_8()

uint32_t TileHid2RESrcID::getRobID_8 ( uint32_t rod_id) const

◆ getRodID()

uint32_t TileHid2RESrcID::getRodID ( int frag_id) const

make a ROD SrcID for a fragment ID

Definition at line 463 of file TileHid2RESrcID.cxx.

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}

◆ getRodTileMuRcvID()

uint32_t TileHid2RESrcID::getRodTileMuRcvID ( int frag_id) const

Definition at line 585 of file TileHid2RESrcID.cxx.

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}
FRAGRODMAP m_TileMuRcvFrag2ROD

◆ getRosID()

uint32_t TileHid2RESrcID::getRosID ( uint32_t rob_id) const

Make a ROS Source ID from a ROB source ID.

mapping SrcID from ROB to ROS

Definition at line 557 of file TileHid2RESrcID.cxx.

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}

◆ getRosID_8()

uint32_t TileHid2RESrcID::getRosID_8 ( uint32_t rob_id) const

◆ getRunNum()

uint32_t TileHid2RESrcID::getRunNum ( )
inline

Retrieve run number for which hash was initialized.

Definition at line 82 of file TileHid2RESrcID.h.

82{ return m_runnum; };

◆ initialize() [1/2]

void TileHid2RESrcID::initialize ( const std::vector< std::vector< uint32_t > > & fullmap)

Definition at line 43 of file TileHid2RESrcID.cxx.

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}

◆ initialize() [2/2]

void TileHid2RESrcID::initialize ( uint32_t runnum)

iterator over all drawer Identifiers

Definition at line 59 of file TileHid2RESrcID.cxx.

60{
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}
bool first
Definition DeMoScan.py:534
setEventNumber uint32_t

◆ initializeMuRcv()

void TileHid2RESrcID::initializeMuRcv ( uint32_t runnum)

Definition at line 129 of file TileHid2RESrcID.cxx.

130{
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}
uint32_t m_TileMuRcvRunnum

◆ printSpecial()

void TileHid2RESrcID::printSpecial ( MsgStream & log)

Definition at line 599 of file TileHid2RESrcID.cxx.

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

◆ setBSfrag()

void TileHid2RESrcID::setBSfrag ( int frag_id,
uint32_t bs_frag )

Definition at line 420 of file TileHid2RESrcID.cxx.

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}

◆ setDrawerType()

void TileHid2RESrcID::setDrawerType ( int frag_id,
uint32_t type )

Definition at line 436 of file TileHid2RESrcID.cxx.

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}

◆ setROD2ROBmap() [1/2]

void TileHid2RESrcID::setROD2ROBmap ( const eformat::FullEventFragment< const uint32_t * > * event,
bool & of2Default,
MsgStream & log )

Definition at line 206 of file TileHid2RESrcID.cxx.

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);
229 const eformat::ROBFragment<const uint32_t*> robf(fpdet);
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}
char data[hepevt_bytes_allocation_ATLAS]
Definition HepEvt.cxx:11
#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
int getOfflineFragID(uint32_t bs_frag_id) const
Retrieve extra info - ByteStream frag ID and drawer typefor a given transient fragment ID.

◆ setROD2ROBmap() [2/2]

void TileHid2RESrcID::setROD2ROBmap ( const std::vector< std::string > & ROD2ROB,
MsgStream & log )

Definition at line 171 of file TileHid2RESrcID.cxx.

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}

◆ setTileHWID()

void TileHid2RESrcID::setTileHWID ( const TileHWID * tileHWID,
uint32_t runnum = 0 )

Definition at line 32 of file TileHid2RESrcID.cxx.

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}

◆ updateBSmap()

void TileHid2RESrcID::updateBSmap ( )
private

Definition at line 535 of file TileHid2RESrcID.cxx.

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}

Member Data Documentation

◆ m_bs2offline

BS2OFFLINEMAP TileHid2RESrcID::m_bs2offline
private

Definition at line 98 of file TileHid2RESrcID.h.

◆ m_defaultDrawer

std::vector<uint32_t> TileHid2RESrcID::m_defaultDrawer
private

Definition at line 101 of file TileHid2RESrcID.h.

◆ m_frag2ROD

FRAGFULLMAP TileHid2RESrcID::m_frag2ROD
private

Definition at line 99 of file TileHid2RESrcID.h.

◆ m_runnum

uint32_t TileHid2RESrcID::m_runnum
private

Definition at line 100 of file TileHid2RESrcID.h.

◆ m_tileHWID

const TileHWID* TileHid2RESrcID::m_tileHWID
private

Definition at line 93 of file TileHid2RESrcID.h.

◆ m_TileMuRcvFrag2ROD

FRAGRODMAP TileHid2RESrcID::m_TileMuRcvFrag2ROD
private

Definition at line 97 of file TileHid2RESrcID.h.

◆ m_TileMuRcvRunnum

uint32_t TileHid2RESrcID::m_TileMuRcvRunnum = 0U
private

Definition at line 100 of file TileHid2RESrcID.h.


The documentation for this class was generated from the following files: