ATLAS Offline Software
Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
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 More...
 
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 More...
 
uint32_t getRobFromTileMuRcvFragID (int frag_id) const
 
uint32_t getRodID (int frag_id) const
 make a ROD SrcID for a fragment ID More...
 
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. More...
 
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. More...
 
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. More...
 
uint32_t getRunNum ()
 Retrieve run number for which hash was initialized. More...
 
int getOfflineFragID (uint32_t bs_frag_id) const
 Retrieve extra info - ByteStream frag ID and drawer typefor a given transient fragment ID. More...
 
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
29  }
30 }

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 }

◆ 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 }

◆ 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 }

◆ 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 }

◆ 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 }

◆ 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 }

◆ 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 }

◆ 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  }
55  updateBSmap();
56 }

◆ initialize() [2/2]

void TileHid2RESrcID::initialize ( uint32_t  runnum)

iterator over all drawer Identifiers

Definition at line 59 of file TileHid2RESrcID.cxx.

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 }

◆ 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 }

◆ 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 }

◆ 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;
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 }

◆ 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
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:
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
TileHid2RESrcID::initialize
void initialize(uint32_t runnum)
Definition: TileHid2RESrcID.cxx:59
python.utils.AtlRunQueryDQUtils.runnum
runnum
Definition: AtlRunQueryDQUtils.py:213
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
TileHid2RESrcID::getRodTileMuRcvID
uint32_t getRodTileMuRcvID(int frag_id) const
Definition: TileHid2RESrcID.cxx:585
TileHWID::drawer_end
std::vector< HWIdentifier >::const_iterator drawer_end() const
end iterator for drawer Identifiers
Definition: TileHWID.h:294
TileHid2RESrcID::getOfflineFragID
int getOfflineFragID(uint32_t bs_frag_id) const
Retrieve extra info - ByteStream frag ID and drawer typefor a given transient fragment ID.
Definition: TileHid2RESrcID.cxx:523
TILE_NEG_ID
#define TILE_NEG_ID
Definition: TileTBFrag.h:16
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
TileHid2RESrcID::m_TileMuRcvRunnum
uint32_t m_TileMuRcvRunnum
Definition: TileHid2RESrcID.h:100
AthenaPoolTestRead.flags
flags
Definition: AthenaPoolTestRead.py:8
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
skel.it
it
Definition: skel.GENtoEVGEN.py:407
ReadBchFromCrest.nmod
nmod
Definition: ReadBchFromCrest.py:286
TileHid2RESrcID::updateBSmap
void updateBSmap()
Definition: TileHid2RESrcID.cxx:535
python.LArRecUtilsConfig.flags5
flags5
Definition: LArRecUtilsConfig.py:201
TileHWID::frag
int frag(const HWIdentifier &id) const
extract frag field from HW identifier
Definition: TileHWID.h:181
ReadBchFromCrest.ros
ros
Definition: ReadBchFromCrest.py:73
Example_ReadSampleNoise.drawer
drawer
Definition: Example_ReadSampleNoise.py:39
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:92
TileHWID::ros
int ros(const HWIdentifier &id) const
extract ros field from HW identifier
Definition: TileHWID.h:167
TILE_EBPOS_ID
#define TILE_EBPOS_ID
Definition: TileTBFrag.h:17
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
TileHid2RESrcID::m_defaultDrawer
std::vector< uint32_t > m_defaultDrawer
Definition: TileHid2RESrcID.h:101
TileHid2RESrcID::getRodID
uint32_t getRodID(int frag_id) const
make a ROD SrcID for a fragment ID
Definition: TileHid2RESrcID.cxx:463
id2
HWIdentifier id2
Definition: LArRodBlockPhysicsV0.cxx:562
eformat::ROBFragment< const uint32_t * >
lumiFormat.i
int i
Definition: lumiFormat.py:85
TILE_EBNEG_ID
#define TILE_EBNEG_ID
Definition: TileTBFrag.h:18
TileHid2RESrcID::m_bs2offline
BS2OFFLINEMAP m_bs2offline
Definition: TileHid2RESrcID.h:98
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
python.subdetectors.mmg.names
names
Definition: mmg.py:8
TileHid2RESrcID::initializeMuRcv
void initializeMuRcv(uint32_t runnum)
Definition: TileHid2RESrcID.cxx:129
TileHid2RESrcID::m_tileHWID
const TileHWID * m_tileHWID
Definition: TileHid2RESrcID.h:93
TILE_BEAM_ID
#define TILE_BEAM_ID
definition of various fragments expected in BS files from testbeam
Definition: TileTBFrag.h:14
TileCalibUtils::FELIX_FRAGID_OFFSET
static const unsigned int FELIX_FRAGID_OFFSET
Offset for frag ID used for FELIX in frag ID to ROB ID map.
Definition: TileCalibUtils.h:157
id
SG::auxid_t id
Definition: Control/AthContainers/Root/debug.cxx:239
TILE_POS_ID
#define TILE_POS_ID
Definition: TileTBFrag.h:15
python.PyAthena.v
v
Definition: PyAthena.py:154
TileHid2RESrcID::m_TileMuRcvFrag2ROD
FRAGRODMAP m_TileMuRcvFrag2ROD
Definition: TileHid2RESrcID.h:97
RunTileTBMonitoring.fragIDs
fragIDs
Definition: RunTileTBMonitoring.py:212
TileHWID::drawer_begin
std::vector< HWIdentifier >::const_iterator drawer_begin() const
begin iterator for drawer Identifiers
Definition: TileHWID.h:290
TileHWID::drawer
int drawer(const HWIdentifier &id) const
extract drawer field from HW identifier
Definition: TileHWID.h:171
TileHid2RESrcID::m_frag2ROD
FRAGFULLMAP m_frag2ROD
Definition: TileHid2RESrcID.h:99
python.Constants.INFO
int INFO
Definition: Control/AthenaCommon/python/Constants.py:15
DeMoScan.first
bool first
Definition: DeMoScan.py:534
DEBUG
#define DEBUG
Definition: page_access.h:11
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
convertTimingResiduals.offset
offset
Definition: convertTimingResiduals.py:71
COMMON_BEAM_ID
#define COMMON_BEAM_ID
Definition: TileTBFrag.h:19
TileHid2RESrcID::m_runnum
uint32_t m_runnum
Definition: TileHid2RESrcID.h:100