ATLAS Offline Software
Loading...
Searching...
No Matches
Muon::TGC_RodDecoderRawdata Class Reference

A tool to decode a TGC ROB fragment written in the raw data format into TGC RDO. More...

#include <TGC_RodDecoderRawdata.h>

Inheritance diagram for Muon::TGC_RodDecoderRawdata:
Collaboration diagram for Muon::TGC_RodDecoderRawdata:

Public Member Functions

 TGC_RodDecoderRawdata (const std::string &t, const std::string &n, const IInterface *p)
 Default constructor.
virtual ~TGC_RodDecoderRawdata ()
 Default destructor.
virtual StatusCode initialize () override
 Standard AlgTool method.
virtual StatusCode finalize () override
 Standard AlgTool method.
virtual StatusCode fillCollection (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, TgcRdoContainer &rdoIdc) const override
 Convert ROBFragment to RDO.

Private Member Functions

TgcRdogetCollection (const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, TgcRdoContainer &rdoIdc) const
 Retrieve header of ROBFragment.
void byteStream2Rdo (OFFLINE_FRAGMENTS_NAMESPACE::PointerType bs, TgcRdo &rdo, uint32_t source_id) const
 Convert data contents of ROBFragment to RDO The same byteStream2Rdo method in TGC_RodDecoderReadout is used for checking conversion validation.
void showStatusWords (const uint32_t source_id, const uint16_t rdoId, const int idHash, const uint32_t nstatus, const uint32_t *status) const
 Show status words.

Private Attributes

bool m_readSlbHeaderId
 Switch for reading IDs in SLB Header or ROD Header.
bool m_checkRawData
 Switch for checking rawdata format with readout format.
TgcRODReadOutm_tgcRODReadOut
 RawData format converter.
bool m_showStatusWords
 Flag for showStatusWords.
ServiceHandle< MuonTGC_CablingSvcm_cablingSvc {this, "TGCCablingSvc", "MuonTGC_CablingSvc", ""}

Detailed Description

A tool to decode a TGC ROB fragment written in the raw data format into TGC RDO.

Author
Susumu Oda Susum.nosp@m.u.Od.nosp@m.a@cer.nosp@m.n.ch
Hisaya Kurashige

This class was originally developed by Tadashi Maeno based on RpcROD_Decoder written by Ketevi A. Assamagan. Hisaya Kurashige removed TGC ROD Encoder from this and updated decodeRodToRdo in January 2008. Takashi Kubota migrated to MuonTGC_CnvTools package in July 2008. The previous class name was TgcROD_Decoder.

Definition at line 31 of file TGC_RodDecoderRawdata.h.

Constructor & Destructor Documentation

◆ TGC_RodDecoderRawdata()

Muon::TGC_RodDecoderRawdata::TGC_RodDecoderRawdata ( const std::string & t,
const std::string & n,
const IInterface * p )

Default constructor.

Definition at line 21 of file TGC_RodDecoderRawdata.cxx.

23 :
24 base_class(t, n, p),
25 m_tgcRODReadOut(nullptr)
26{
27 declareProperty("ReadSlbHeaderId", m_readSlbHeaderId=false);
28 declareProperty("CheckRawData", m_checkRawData=false);
29 declareProperty("ShowStatusWords", m_showStatusWords=false);
30}
bool m_showStatusWords
Flag for showStatusWords.
bool m_checkRawData
Switch for checking rawdata format with readout format.
TgcRODReadOut * m_tgcRODReadOut
RawData format converter.
bool m_readSlbHeaderId
Switch for reading IDs in SLB Header or ROD Header.

◆ ~TGC_RodDecoderRawdata()

Muon::TGC_RodDecoderRawdata::~TGC_RodDecoderRawdata ( )
virtualdefault

Default destructor.

Member Function Documentation

◆ byteStream2Rdo()

void Muon::TGC_RodDecoderRawdata::byteStream2Rdo ( OFFLINE_FRAGMENTS_NAMESPACE::PointerType bs,
TgcRdo & rdo,
uint32_t source_id ) const
private

Convert data contents of ROBFragment to RDO The same byteStream2Rdo method in TGC_RodDecoderReadout is used for checking conversion validation.

Definition at line 159 of file TGC_RodDecoderRawdata.cxx.

162{
163 ATH_MSG_DEBUG( "Muon::TGC_RodDecoder::byteStream2Rdo" );
164
165 // Check that we are filling the right collection
166 TGC_BYTESTREAM_SOURCEID sid;
167 fromBS32(source_id, sid);
168
169 if(rdo.identify() != TgcRdo::calculateOnlineId(sid.side, sid.rodid))
170 {
171 ATH_MSG_DEBUG( "Error: input TgcRdo id does not match bytestream id" );
172 return;
173 }
174
175 //rdo.setOnlineId(sid.side, sid.rodid); // Standard data
176
177 TGC_BYTESTREAM_FRAGMENTCOUNT counters[7] = {
178 {0, 1}, {0, 2}, {0, 3}, {0, 4}, {0, 5}, {0, 8}, {0, 9}
179 };
180 TGC_BYTESTREAM_FRAGMENTCOUNT counter{};
181
182 int iBs = 0;
183 for(int iCnt = 0; iCnt < 7; iCnt++)
184 {
185 fromBS32(bs[iBs], counter);
186 if(counter.id == counters[iCnt].id)
187 {
188 counters[iCnt].count = counter.count;
189 iBs++;
190 }
191 }
192
193 //iBs--;
194 for(int iCnt = 0; iCnt < 7; iCnt++)
195 {
196 if(counters[iCnt].count == 0)
197 continue;
198 switch(counters[iCnt].id)
199 {
200 case 1: // Raw data format (SSW format)
201 {
202 ATH_MSG_VERBOSE( "fragment" << counters[iCnt].id <<
203 " " << counters[iCnt].count << "words" );
204 for(unsigned iFrag = 0; iFrag < counters[iCnt].count; iFrag++)
205 {
206 ATH_MSG_VERBOSE( "WORD" << iFrag << ":" << MSG::hex << bs[iBs] );
207 iBs++;
208 }
209 break;
210 }
211 case 2: // TgcRawData::TYPE_HIT
212 {
213 ATH_MSG_VERBOSE( "fragment" << counters[iCnt].id <<
214 " " << counters[iCnt].count << "words" );
215
216 TGC_BYTESTREAM_READOUTHIT roh;
217 for(unsigned iFrag = 0; iFrag < counters[iCnt].count; iFrag++)
218 {
219 ATH_MSG_VERBOSE( "WORD" << iFrag << ":" << MSG::hex << bs[iBs] );
220 fromBS32(bs[iBs++], roh);
221
222 ATH_MSG_VERBOSE( " rdo.subDetectorId():" << rdo.subDetectorId()
223 << " rdo.rodId():" <<rdo.rodId()
224 << " roh.ldbId:" <<roh.ldbId
225 << " roh.sbId:" <<roh.sbId
226 << " rdo.l1Id():"<<rdo.l1Id()
227 << " rdo.bcId():"<<rdo.bcId() );
228
229 uint16_t slbId = roh.sbId;
230 // SBLOCs for EIFI are different in online (ByteStream) and offline (RDO).
231 // bug #57051: Wrong numbering of SBLOC for Inner Stations (EI/FI) in 12-fold TGC cablings
232 // ByteStream : slbId = SBLOC + ip*2 (ip=0, 1, 2), SBLOC = 8 or 9 (EI), 0 or 1 (FI)
233 // slbId = 8, 10, 12, 9, 11, 13, 0, 2, 4, 1, 3, 5
234 // RDO : slbId = SBLOC + ip*4 (ip=0, 1, 2), SBLOC = 1 or 3 (EI), 0 or 2 (FI)
235 // slbId = 1, 5, 9, 3, 7, 11, 0, 4, 8, 2, 6, 10
238 if(roh.sbId<8) slbId = roh.sbId *2;
239 else slbId = (roh.sbId-8)*2+1;
240 }
241
242 TgcRawData* raw = new TgcRawData(bcTag(roh.bcBitmap),
243 rdo.subDetectorId(),
244 rdo.rodId(),
245 roh.ldbId,
246 slbId,
247 rdo.l1Id(),
248 rdo.bcId(),
249 // http://cern.ch/atlas-tgc/doc/ROBformat.pdf
250 // Table 7 : SB type, bits 15..13
251 // 0,1: doublet wire, strip
252 // 2,3: triplet wire, strip triplet;
253 // 4 : inner wire and strip
254 // TgcRawData::SlbType is defined in TgcRawData.h
255 // 0: SLB_TYPE_DOUBLET_WIRE,
256 // 1: SLB_TYPE_DOUBLET_STRIP,
257 // 2: SLB_TYPE_TRIPLET_WIRE,
258 // 3: SLB_TYPE_TRIPLET_STRIP,
259 // 4: SLB_TYPE_INNER_WIRE,
260 // 5: SLB_TYPE_INNER_STRIP,
261 // 6: SLB_TYPE_UNKNOWN
263 (bool)roh.adj,
264 roh.tracklet,
265 roh.channel+40);
266 rdo.push_back(raw);
267 }
268 break;
269 }
270 case 3: // TgcRawData::TYPE_TRACKLET
271 {
272 ATH_MSG_VERBOSE( "fragment" << counters[iCnt].id <<
273 " " << counters[iCnt].count << "words" );
274 TGC_BYTESTREAM_READOUTTRIPLETSTRIP rostrip;
275 TGC_BYTESTREAM_READOUTTRACKLET rotrk;
276 for(unsigned iFrag = 0; iFrag < counters[iCnt].count; iFrag++)
277 {
278 ATH_MSG_VERBOSE( "WORD" << iFrag << ":" << MSG::hex << bs[iBs] );
279 fromBS32(bs[iBs], rostrip);
280
282 {
283 TgcRawData* raw = new TgcRawData(bcTag(rostrip.bcBitmap),
284 rdo.subDetectorId(),
285 rdo.rodId(),
286 rostrip.ldbId,
287 rostrip.sbId,
288 rdo.l1Id(),
289 rdo.bcId(),
291 0,
292 rostrip.seg,
293 rostrip.subc,
294 rostrip.phi);
295 rdo.push_back(raw);
296 }
297 else
298 {
299 fromBS32(bs[iBs], rotrk);
300 TgcRawData* raw = new TgcRawData(bcTag(rotrk.bcBitmap),
301 rdo.subDetectorId(),
302 rdo.rodId(),
303 rotrk.ldbId,
304 rotrk.sbId,
305 rdo.l1Id(),
306 rdo.bcId(),
307 // http://cern.ch/atlas-tgc/doc/ROBformat.pdf
308 // Table 8 : Slave Board type, bits 30..28
309 // 0,1: doublet wire, strip
310 // 2,3: triplet wire, strip triplet;
311 // 4,5: inner wire, strip
312 // TgcRawData::SlbType is defined in TgcRawData.h
313 // 0: SLB_TYPE_DOUBLET_WIRE,
314 // 1: SLB_TYPE_DOUBLET_STRIP,
315 // 2: SLB_TYPE_TRIPLET_WIRE,
316 // 3: SLB_TYPE_TRIPLET_STRIP,
317 // 4: SLB_TYPE_INNER_WIRE,
318 // 5: SLB_TYPE_INNER_STRIP,
319 // 6: SLB_TYPE_UNKNOWN
321 rotrk.delta,
322 rotrk.seg,
323 rotrk.subm,
324 rotrk.rphi);
325 rdo.push_back(raw);
326 }
327 iBs++;
328 }
329 break;
330 }
331 case 8: // TgcRawData::TYPE_HIPT
332 {
333 ATH_MSG_VERBOSE( "fragment" << counters[iCnt].id <<
334 " " << counters[iCnt].count << "words" );
335 TGC_BYTESTREAM_HIPT hpt;
336 TGC_BYTESTREAM_HIPT_INNER hptinner;
337 for(unsigned iFrag = 0; iFrag < counters[iCnt].count; iFrag++)
338 {
339 ATH_MSG_VERBOSE( "WORD" << iFrag << ":" << MSG::hex << bs[iBs] );
340 fromBS32(bs[iBs], hptinner);
341
342 if(hptinner.sector & 4){
343 TgcRawData* raw = new TgcRawData(bcTag(hptinner.bcBitmap),
344 rdo.subDetectorId(),
345 rdo.rodId(),
346 rdo.l1Id(),
347 rdo.bcId(),
348 hptinner.strip,
349 0,
350 hptinner.sector,
351 0,
352 0,
353 0,
354 0,
355 0,
356 0,
357 hptinner.inner);
358 rdo.push_back(raw);
359 }else{
360 fromBS32(bs[iBs], hpt);
361 TgcRawData* raw = new TgcRawData(bcTag(hpt.bcBitmap),
362 rdo.subDetectorId(),
363 rdo.rodId(),
364 rdo.l1Id(),
365 rdo.bcId(),
366 hpt.strip,
367 hpt.fwd,
368 hpt.sector,
369 hpt.chip,
370 hpt.cand,
371 hpt.hipt,
372 hpt.hitId,
373 hpt.sub,
374 hpt.delta,
375 0);
376 rdo.push_back(raw);
377 }
378 iBs++;
379 }
380 break;
381 }
382 case 9: // TgcRawData::TYPE_SL
383 {
384 ATH_MSG_VERBOSE( "fragment" << counters[iCnt].id <<
385 " " << counters[iCnt].count << "words" );
386 TGC_BYTESTREAM_SL sl;
387 for(unsigned iFrag = 0; iFrag < counters[iCnt].count; iFrag++)
388 {
389 ATH_MSG_VERBOSE( "WORD" << iFrag << ":" << MSG::hex << bs[iBs] );
390 fromBS32(bs[iBs++], sl);
391
392 TgcRawData* raw = new TgcRawData(bcTag(sl.bcBitmap),
393 rdo.subDetectorId(),
394 rdo.rodId(),
395 rdo.l1Id(),
396 rdo.bcId(),
397 sl.cand2plus,
398 static_cast<bool>(sl.fwd),
399 sl.sector,
400 sl.cand,
401 sl.sign,
402 sl.threshold,
403 sl.overlap,
404 sl.veto,
405 sl.roi);
406 rdo.push_back(raw);
407 }
408 break;
409 }
410 default:
411 ATH_MSG_VERBOSE( "Error: Muon::TGC_RodDecoder::byteStream2Rdo Unsupported fragment type "
412 << counters[iCnt].id);
413 break;
414 }
415 }
416
417 ATH_MSG_VERBOSE( "Decoded " << MSG::dec << rdo.size() << " elements" );
418 ATH_MSG_VERBOSE( "Muon::TGC_RodDecoder::byteStream2Rdo done" );
419}
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current TgcRawData
void fromBS32(uint32_t data, T &s)
unsigned bcTag(unsigned bcBitMap)
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
@ SLB_TYPE_INNER_WIRE
Definition TgcRawData.h:36
@ SLB_TYPE_TRIPLET_STRIP
Definition TgcRawData.h:35
@ SLB_TYPE_INNER_STRIP
Definition TgcRawData.h:37
uint16_t rodId() const
Definition TgcRdo.h:138
uint16_t l1Id() const
Definition TgcRdo.h:150
uint16_t subDetectorId() const
Definition TgcRdo.h:134
static uint16_t calculateOnlineId(uint16_t subDetectorId, uint16_t rodId)
Definition TgcRdo.cxx:60
uint16_t identify() const
Definition TgcRdo.h:107
uint16_t bcId() const
Definition TgcRdo.h:146
int count(std::string s, const std::string &regx)
count how many occurances of a regx are in a string
Definition hcg.cxx:146
setWord1 uint16_t

◆ fillCollection()

StatusCode Muon::TGC_RodDecoderRawdata::fillCollection ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment & robFrag,
TgcRdoContainer & rdoIdc ) const
overridevirtual

Convert ROBFragment to RDO.

Definition at line 62 of file TGC_RodDecoderRawdata.cxx.

63{
64 try
65 {
66 robFrag.check();
67 } catch (eformat::Issue &ex) {// error in fragment
68 ATH_MSG_WARNING(ex.what());
69 return StatusCode::SUCCESS;
70 }
71
72 uint32_t source_id = robFrag.rod_source_id();
73 SourceIdentifier sid(robFrag.rod_source_id());
74
75 // do not convert if the TGC collection is already in the converter
76 uint16_t rdoId = TgcRdo::calculateOnlineId(sid.subdetector_id(), sid.module_id());
77 TgcRdoIdHash rdoIdHash;
78 int idHash = rdoIdHash(rdoId);
79
80 if(rdoIdc.indexFindPtr(idHash) == nullptr)
81 {
83 robFrag.rod_data(bs);
84 TgcRdo* rdo = getCollection(robFrag, rdoIdc);
85
86 if(!rdo) {
87 ATH_MSG_WARNING( "Pointer of RDO is NULL. Skip decoding of this ROD in this event..." );
88 return StatusCode::SUCCESS;
89 }
90
92 byteStream2Rdo(bs, *rdo, robFrag.rod_source_id());
93 if( !m_tgcRODReadOut->check(bs, *rdo, robFrag.rod_source_id())){
94 ATH_MSG_WARNING( " Can't Check the contents of TgcRdo: Skip decoding of remaining hits of this event..." );
95 return StatusCode::SUCCESS;
96 }
97 } else {
98 if( !m_tgcRODReadOut->byteStream2Rdo(bs, *rdo, robFrag.rod_source_id())){
99 ATH_MSG_WARNING( " Can't Convert the TGC BS to Rdo: Skip decoding of remaining hits of this event..." );
100 return StatusCode::SUCCESS;
101 }
102 }
103 }
104 else
105 {
106 ATH_MSG_DEBUG( " Collection ID = " << source_id
107 << "already found into the container; do not convert" );
108 }
109
110 return StatusCode::SUCCESS;
111}
#define ATH_MSG_WARNING(x)
Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Current Athena::TPCnvVers::Old Athena::TPCnvVers::Old TgcRdo
virtual const T * indexFindPtr(IdentifierHash hashId) const override final
return pointer on the found entry or null if out of range using hashed index - fast version,...
TgcRdo * getCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, TgcRdoContainer &rdoIdc) const
Retrieve header of ROBFragment.
void byteStream2Rdo(OFFLINE_FRAGMENTS_NAMESPACE::PointerType bs, TgcRdo &rdo, uint32_t source_id) const
Convert data contents of ROBFragment to RDO The same byteStream2Rdo method in TGC_RodDecoderReadout i...
const DataType * PointerType
Definition RawEvent.h:25
setEventNumber uint32_t

◆ finalize()

StatusCode Muon::TGC_RodDecoderRawdata::finalize ( )
overridevirtual

Standard AlgTool method.

Definition at line 52 of file TGC_RodDecoderRawdata.cxx.

53{
54 delete m_tgcRODReadOut; m_tgcRODReadOut=nullptr;
55
56 StatusCode sc = AthAlgTool::finalize();
57 return sc;
58}
static Double_t sc
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ getCollection()

TgcRdo * Muon::TGC_RodDecoderRawdata::getCollection ( const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment & robFrag,
TgcRdoContainer & rdoIdc ) const
private

Retrieve header of ROBFragment.

Definition at line 115 of file TGC_RodDecoderRawdata.cxx.

116{
117 TgcRdo* theColl = nullptr;
118
119 uint32_t source_id = robFrag.rod_source_id();
120 SourceIdentifier sid(source_id);
121
122 uint16_t rdoId = TgcRdo::calculateOnlineId(sid.subdetector_id(), sid.module_id());
123 TgcRdoIdHash rdoIdHash;
124 int idHash = rdoIdHash(rdoId);
125
126 ATH_MSG_DEBUG( " Created new Collection ID = " << sid.human() << " Hash = " << idHash );
127
128 // create new collection
129 theColl = new TgcRdo(rdoId, idHash);
130 // add collection into IDC
131 if(rdoIdc.addCollection(theColl, idHash).isFailure())
132 {
133 ATH_MSG_WARNING( "Failed to add TGC RDO collection to container" );
134 delete theColl; theColl = nullptr;
135 return nullptr;
136 }
137 theColl->setL1Id(robFrag.rod_lvl1_id());
138 theColl->setBcId(robFrag.rod_bc_id());
139 theColl->setTriggerType(robFrag.rod_lvl1_trigger_type());
140 theColl->setOnlineId(sid.subdetector_id(), sid.module_id());
141
142 uint32_t nstatus = robFrag.rod_nstatus();
143 const uint32_t* status;
144 robFrag.rod_status(status);
145 theColl->setErrors(nstatus > 0 ? status[0] : 0);
146 theColl->setRodStatus(nstatus > 1 ? status[1] : 0);
147 theColl->setLocalStatus(nstatus > 3 ? status[3] : 0);
148 theColl->setOrbit(nstatus > 4 ? status[4] : 0);
149
151 showStatusWords(source_id, rdoId, idHash, nstatus, status);
152 }
153
154 return theColl;
155}
virtual StatusCode addCollection(const T *coll, IdentifierHash hashId) override final
insert collection into container with id hash if IDC should not take ownership of collection,...
void showStatusWords(const uint32_t source_id, const uint16_t rdoId, const int idHash, const uint32_t nstatus, const uint32_t *status) const
Show status words.
void setLocalStatus(uint32_t data)
Definition TgcRdo.h:194
void setTriggerType(uint16_t v)
Definition TgcRdo.h:127
void setRodStatus(uint32_t data)
Definition TgcRdo.h:178
void setL1Id(uint32_t v)
Definition TgcRdo.h:119
void setOnlineId(uint16_t subDetectorId, uint16_t rodId)
Definition TgcRdo.cxx:37
void setOrbit(uint32_t orbit)
Definition TgcRdo.h:210
void setErrors(uint16_t data)
Definition TgcRdo.h:162
void setBcId(uint16_t v)
Definition TgcRdo.h:123
status
Definition merge.py:16

◆ initialize()

StatusCode Muon::TGC_RodDecoderRawdata::initialize ( )
overridevirtual

Standard AlgTool method.

Definition at line 39 of file TGC_RodDecoderRawdata.cxx.

40{
41 ATH_CHECK( AthAlgTool::initialize() );
42
43 ATH_CHECK( m_cablingSvc.retrieve() );
44 m_tgcRODReadOut = new TgcRODReadOut(*(m_cablingSvc.get()));
45
46 ATH_MSG_INFO( "initialize() successful in " << name() );
47 return StatusCode::SUCCESS;
48}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
ServiceHandle< MuonTGC_CablingSvc > m_cablingSvc

◆ showStatusWords()

void Muon::TGC_RodDecoderRawdata::showStatusWords ( const uint32_t source_id,
const uint16_t rdoId,
const int idHash,
const uint32_t nstatus,
const uint32_t * status ) const
private

Show status words.

Definition at line 421 of file TGC_RodDecoderRawdata.cxx.

422 {
423 static const unsigned int maxNStatus = 5;
424 static const std::string statusDataWord[maxNStatus] = {
425 "First status word specific|generic:", // 0
426 "TGC ROD event status :", // 1
427 "ROD VME fileter bits | SSW timeout:", // 2
428 "Local status word | presence :", // 3
429 "orbit count :" // 4
430 };
431
432 static const unsigned int maxFirstStatus = 5;
433 static const std::string firstStatus[maxFirstStatus] = {
434 "incorrect BCID", // 0
435 "incorrect L1AID", // 1
436 "Timeout occurred in at least one of the FE links. Fragment is incomplete.", // 2
437 "Data may be incorrect, see TGC ROD event status word", // 3
438 "An overflow in one of the ROD internal buffers has occurred. The fragment is incomplete." // 4
439 };
440
441 static const unsigned int maxTgcRodEventStatus = 31;
442 static const std::string tgcRodEventStatus[maxTgcRodEventStatus] = {
443 "EC_RXsend : Error in request to send an event via RXlink", // 0
444 "EC_FELdown : A Front End link has gone down - abandoned", // 1
445 "EC_frame : Invalid FE link framing words", // 2
446 "EC_Glnk : Front End link G-link error", // 3
447 "EC_xor : Invalid XOR event checksum", // 4
448 "EC_ovfl : Input FE event is too long or FE FIFO overflow", // 5
449 "EC_timeout : Timeout expired for at least one FE link", // 6
450 "EC_xormezz : Bad XOR checksum from mezz board", // 7
451 "EC_wc0 : Event has WC=0 or WX>max WC", // 8
452 "EC_L1ID : L1ID mismatch (TTC EVID FIFO vs local).", // 9
453 "EC_nohdr : First word is not header", // 10
454 "EC_rectype : Unrecognized record type", // 11
455 "EC_null : Unexpected nulls in FE input", // 12
456 "EC_order : Word is out of order", // 13
457 "EC_LDB : Invalid or unexpected Star Switch ID", // 14
458 "EC_RXovfl : RXfifo has overflowed", // 15
459 "EC_SSWerr : SSW reports T1C, NRC, T2C, or GlinkNoLock error", // 16
460 "EC_sbid : SBid does not match SBinfo table", // 17
461 "EC_SBtype : SBtype does not match SBinfo table", // 18
462 "EC_duprx : RX ID is duplicated in the event", // 19
463 "EC_ec4 : Unexpected SB L1 Event ID(lo 4)", // 20
464 "EC_bc : Unexpected SB BCID", // 21
465 "EC_celladr : Invalid cell address", // 22
466 "EC_hitovfl : Too many hits in event", // 23
467 "EC_trgbit : Unexpected trigger bits", // 24
468 "EC_badEoE : Bad End-of-event marker received, not 0xFCA", // 25
469 "EC_endWCnot0 : WC not 0 after End-of-event marker", // 26
470 "EC_noEoE : No End-of-event marker received", // 27
471 "EC_SLGlink : Sector Logic reports G-Link error", // 28
472 "EC_SLbc : Sector Logic BCID[2:0] does not match its SB BCID", // 29
473 "EC_unxrxid : Data from disabled SSW RX ID" // 30
474 };
475
476 static const unsigned int maxSSWs = 12;
477
478 static const unsigned int maxPresence = 10;
479 static const std::string presence[maxPresence] = {
480 "", // 0
481 "raw data", // 1
482 "hits in readout fmt", // 2
483 "tracklets in readout fmt", // 3
484 "hits in chamber fmt", // 4
485 "tracklets in chamber fmt", // 5
486 "", // 6
487 "", // 7
488 "HipT output", // 8
489 "Sector Logic" // 9
490 };
491
492 static const unsigned int maxLocalStatus = 16;
493 static const std::string localStatus[maxLocalStatus] = {
494 "hit BCs are merged", // 0
495 "tracklet BCs are merged", // 1
496 "hits are sorted", // 2
497 "tracklets are sorted", // 3
498 "", // 4
499 "", // 5
500 "", // 6
501 "", // 7
502 "", // 8
503 "", // 9
504 "", // 10
505 "", // 11
506 "", // 12
507 "", // 13
508 "ROI in this fragment", // 14
509 "no L1AID, BCID check wrt ROD" // 15
510 };
511
512 ATH_MSG_INFO("***** TGC ROD STATUS WORDS for "
513 << "source_id=0x" << source_id << ", "
514 << "rdoId=0x" << rdoId << (rdoId<16 ? " , " : ", ")
515 << "idHash=0x" << idHash << (idHash<16 ? " , " : ", ")
516 << (idHash<12 ? "A" : "C") << (idHash%12+1<10 ? "0" : "") << std::dec << idHash%12+1
517 << " ******");
518 ATH_MSG_INFO("***** Based on http://cern.ch/atlas-tgc/doc/ROBformat.pdf ****************************");
519
520 for(uint32_t i=0; i<nstatus && i<maxNStatus; i++) {
521 ATH_MSG_INFO(statusDataWord[i] << " status[" << i << "]=0x" << std::hex << status[i]);
522
523 if(i==0) {
524 // Table 2 ATLAS standard, first status word, all zero means no known errors
525 for(unsigned int j=0; j<maxFirstStatus; j++) {
526 if((status[i] >> j) & 0x1) {
527 ATH_MSG_INFO(std::dec << std::setw(3) << j << " : " << firstStatus[j]);
528 }
529 }
530 } else if(i==1) {
531 // Table 3 TGC ROD event status word
532 for(unsigned int j=0; j<maxTgcRodEventStatus; j++) {
533 if((status[i] >> j) & 0x1) {
534 ATH_MSG_INFO(std::dec << std::setw(3) << j << " : " << tgcRodEventStatus[j]);
535 }
536 }
537 } else if(i==2) {
538 // Table 4 Star switch time-out status and ROD VME filter bits
539 for(unsigned int j=0; j<maxSSWs; j++) {
540 if((status[i] >> j) & 0x1) {
541 ATH_MSG_INFO(std::dec << std::setw(3) << j << " : " << "time-out for SSW" << j);
542 }
543 }
544 for(unsigned int j=0+16; j<=maxSSWs+16; j++) {
545 if((status[i] >> j) & 0x1) {
546 ATH_MSG_INFO(std::dec << std::setw(3) << j << " : " << "data from SSW" << j-16 << " gave filter \"accept\"");
547 }
548 }
549 } else if(i==3) {
550 // Table 6 Presence bits
551 for(unsigned int j=0; j<maxPresence; j++) {
552 if(j==0 || j==6 || j==7) continue;
553 if((status[i] >> j) & 0x1) {
554 ATH_MSG_INFO(std::dec << std::setw(3) << j << " : " << presence[j]);
555 }
556 }
557
558 // Table 5 Local status word
559 for(unsigned int j=0+16; j<maxLocalStatus+16; j++) {
560 if((j>=4+16 && j<=13+16)) continue;
561 if((status[i] >> j) & 0x1) {
562 ATH_MSG_INFO(std::dec << std::setw(3) << j << " : " << localStatus[j-16]);
563 }
564 }
565 }
566 }
567
568 ATH_MSG_INFO("**************************************************************************************");
569}

Member Data Documentation

◆ m_cablingSvc

ServiceHandle<MuonTGC_CablingSvc> Muon::TGC_RodDecoderRawdata::m_cablingSvc {this, "TGCCablingSvc", "MuonTGC_CablingSvc", ""}
private

Definition at line 64 of file TGC_RodDecoderRawdata.h.

64{this, "TGCCablingSvc", "MuonTGC_CablingSvc", ""};

◆ m_checkRawData

bool Muon::TGC_RodDecoderRawdata::m_checkRawData
private

Switch for checking rawdata format with readout format.

Definition at line 58 of file TGC_RodDecoderRawdata.h.

◆ m_readSlbHeaderId

bool Muon::TGC_RodDecoderRawdata::m_readSlbHeaderId
private

Switch for reading IDs in SLB Header or ROD Header.

Definition at line 56 of file TGC_RodDecoderRawdata.h.

◆ m_showStatusWords

bool Muon::TGC_RodDecoderRawdata::m_showStatusWords
private

Flag for showStatusWords.

Definition at line 62 of file TGC_RodDecoderRawdata.h.

◆ m_tgcRODReadOut

TgcRODReadOut* Muon::TGC_RodDecoderRawdata::m_tgcRODReadOut
private

RawData format converter.

Definition at line 60 of file TGC_RodDecoderRawdata.h.


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