ATLAS Offline Software
Loading...
Searching...
No Matches
TGC_RodDecoderRawdata.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
6
7#include "TgcByteStreamData.h"
8#include "TgcRODReadOut.h"
9#include "MuonRDO/TgcRdo.h"
11
12#include "Identifier/Identifier.h"
13#include "eformat/Issue.h"
14#include "eformat/SourceIdentifier.h"
15
16using eformat::helper::SourceIdentifier;
18
19//================ Constructor =================================================
20
22 const std::string& n,
23 const IInterface* p) :
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}
31
32//================ Destructor =================================================
33
35= default;
36
37//================ Initialisation =================================================
38
40{
41 ATH_CHECK( AthAlgTool::initialize() );
42
43 ATH_CHECK( m_cablingSvc.retrieve() );
45
46 ATH_MSG_INFO( "initialize() successful in " << name() );
47 return StatusCode::SUCCESS;
48}
49
50//================ Finalisation =================================================
51
53{
54 delete m_tgcRODReadOut; m_tgcRODReadOut=nullptr;
55
56 StatusCode sc = AthAlgTool::finalize();
57 return sc;
58}
59
60//================ fillCollection ===============================================
61
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}
112
113//================ getCollection ===============================================
114
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}
156
157//================ byteStream2Rdo ===============================================
158
160 TgcRdo& rdo,
161 uint32_t source_id) const
162{
163 ATH_MSG_DEBUG( "Muon::TGC_RodDecoder::byteStream2Rdo" );
164
165 // Check that we are filling the right collection
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 };
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
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" );
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" );
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" );
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}
420
421void Muon::TGC_RodDecoderRawdata::showStatusWords(const uint32_t source_id, const uint16_t rdoId, const int idHash,
422 const uint32_t nstatus, const uint32_t* status) const {
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}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
static Double_t sc
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
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
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.
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,...
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,...
TGC_RodDecoderRawdata(const std::string &t, const std::string &n, const IInterface *p)
Default constructor.
virtual StatusCode fillCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, TgcRdoContainer &rdoIdc) const override
Convert ROBFragment to RDO.
ServiceHandle< MuonTGC_CablingSvc > m_cablingSvc
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.
virtual StatusCode initialize() override
Standard AlgTool method.
bool m_showStatusWords
Flag for showStatusWords.
virtual StatusCode finalize() override
Standard AlgTool method.
bool m_checkRawData
Switch for checking rawdata format with readout format.
TgcRdo * getCollection(const OFFLINE_FRAGMENTS_NAMESPACE::ROBFragment &robFrag, TgcRdoContainer &rdoIdc) const
Retrieve header of ROBFragment.
virtual ~TGC_RodDecoderRawdata()
Default destructor.
TgcRODReadOut * m_tgcRODReadOut
RawData format converter.
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...
bool m_readSlbHeaderId
Switch for reading IDs in SLB Header or ROD Header.
TGC ROD decoder for conversion from ROB fragment to TgcRDO.
An unit object of TGC ROD output.
Definition TgcRawData.h:23
@ SLB_TYPE_INNER_WIRE
Definition TgcRawData.h:36
@ SLB_TYPE_TRIPLET_STRIP
Definition TgcRawData.h:35
@ SLB_TYPE_INNER_STRIP
Definition TgcRawData.h:37
void setLocalStatus(uint32_t data)
Definition TgcRdo.h:194
uint16_t rodId() const
Definition TgcRdo.h:138
void setTriggerType(uint16_t v)
Definition TgcRdo.h:127
uint16_t l1Id() const
Definition TgcRdo.h:150
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
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
void setBcId(uint16_t v)
Definition TgcRdo.h:123
int count(std::string s, const std::string &regx)
count how many occurances of a regx are in a string
Definition hcg.cxx:146
const DataType * PointerType
Definition RawEvent.h:25
eformat::ROBFragment< PointerType > ROBFragment
Definition RawEvent.h:27
The struct for fragment count in ByteStream.
The struct for Inner trigger bits in ByteStream.
The struct for HiPt in ByteStream.
The struct for hit in ByteStream.
The struct for tracklet in ByteStream.
The struct for triplet strip in ByteStream.
The struct for SL in ByteStream.
The struct for source ID in ByteStream.