1 /**************************************************************************
2 * This file is property of and copyright by the ALICE HLT Project *
3 * All rights reserved. *
6 * Artur Szostak <artursz@iafrica.com> *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
19 /// \class AliMUONRawStreamTriggerHP
21 /// Implementation of a streamer interface to the high performance trigger decoder.
22 /// This is the raw stream class which interfaces between the high performance
23 /// core decoder for MUON trigger chambers and the AliRawReader class.
24 /// To gain the most out of the decoder, the Next() method should be used,
27 /// AliMUONRawStreamTriggerHP* rawStream; // assume initialised
28 /// const AliMUONRawStreamTriggerHP::AliLocalStruct* localStruct;
29 /// while ((localStruct = rawStream->Next()) != NULL)
31 /// // Do something with localStruct here.
35 /// This decoder tries to implement as similar an interface as possible to
36 /// AliMUONRawStreamTrigger where possible. However certain constructs which
37 /// would slow us down too much are avoided.
39 /// \author Artur Szostak <artursz@iafrica.com>
41 #include "AliMUONRawStreamTriggerHP.h"
42 #include "AliMUONDarcHeader.h"
43 #include "AliMUONRegHeader.h"
44 #include "AliMUONLocalStruct.h"
45 #include "AliMUONDDLTrigger.h"
46 #include "AliRawReader.h"
56 ClassImp(AliMUONRawStreamTriggerHP)
59 const Int_t AliMUONRawStreamTriggerHP::fgkMaxDDL = 2;
60 bool AliMUONRawStreamTriggerHP::AliLocalStruct::fgOverrideId = true;
62 const AliMUONRegionalHeaderStruct
63 AliMUONRawStreamTriggerHP::AliDecoderEventHandler::fgkEmptyHeader = {
64 AliMUONTriggerDDLDecoder<AliDecoderEventHandler>::RegionalErrorWord(),
71 AliMUONRawStreamTriggerHP::AliMUONRawStreamTriggerHP() :
72 AliMUONVRawStreamTrigger(),
76 fBuffer(new UChar_t[8192]),
77 fkCurrentLocalStruct(NULL),
81 fTotalNumberOfDarcEoWErrors(0),
82 fTotalNumberOfGlobalEoWErrors(0),
83 fTotalNumberOfRegEoWErrors(0),
84 fTotalNumberOfLocalEoWErrors(0)
87 /// Default constructor.
90 fDecoder.ExitOnError(false);
92 fDecoder.GetHandler().SetMaxStructs(
93 fDecoder.MaxRegionals(),
97 fDecoder.GetHandler().SetRawStream(this);
101 AliMUONRawStreamTriggerHP::AliMUONRawStreamTriggerHP(AliRawReader* rawReader) :
102 AliMUONVRawStreamTrigger(rawReader),
106 fBuffer(new UChar_t[8192]),
107 fkCurrentLocalStruct(NULL),
111 fTotalNumberOfDarcEoWErrors(0),
112 fTotalNumberOfGlobalEoWErrors(0),
113 fTotalNumberOfRegEoWErrors(0),
114 fTotalNumberOfLocalEoWErrors(0)
117 /// Constructor with AliRawReader as argument.
120 fDecoder.ExitOnError(false);
122 fDecoder.GetHandler().SetMaxStructs(
123 fDecoder.MaxRegionals(),
127 fDecoder.GetHandler().SetRawStream(this);
131 AliMUONRawStreamTriggerHP::~AliMUONRawStreamTriggerHP()
134 /// Default destructor which cleans up the memory allocated.
141 if (fDDLObject != NULL)
148 void AliMUONRawStreamTriggerHP::First()
150 /// Initialise or reset the iterator.
151 /// The first DDL will be found and decoded.
153 assert( GetReader() != NULL );
158 fTotalNumberOfDarcEoWErrors = 0;
159 fTotalNumberOfGlobalEoWErrors = 0;
160 fTotalNumberOfRegEoWErrors = 0;
161 fTotalNumberOfLocalEoWErrors = 0;
165 Bool_t AliMUONRawStreamTriggerHP::NextDDL()
167 /// Read in the next trigger DDL and decode the payload with the
168 /// high performance decoder.
169 /// \return kTRUE if the next DDL was successfully read and kFALSE
172 assert( GetReader() != NULL );
174 // The temporary object if generated in GetDDLTracker, is now stale,
176 if (fDDLObject != NULL)
182 fkCurrentLocalStruct = NULL;
184 while (fDDL < GetMaxDDL())
186 GetReader()->Reset();
187 GetReader()->Select("MUONTRG", fDDL, fDDL); // Select the DDL file to be read.
188 if (GetReader()->ReadHeader()) break;
189 AliDebug(3, Form("Skipping DDL %d which does not seem to be there", fDDL+1));
193 // If we reach the end of the DDL list for this event then reset the
194 // DDL counter, mark the iteration as done and exit.
195 if (fDDL >= GetMaxDDL())
206 AliDebug(3, Form("DDL Number %d\n", fDDL));
208 Int_t dataSize = GetReader()->GetDataSize(); // in bytes
209 // Check if we have enough buffer space already in fBuffer. If we do then
210 // just continue reading otherwise we need to resize the buffer.
211 if (fBufferSize < dataSize)
221 fBuffer = new UChar_t[dataSize];
222 fBufferSize = dataSize;
224 catch (const std::bad_alloc&)
226 AliError("Could not allocate more buffer space. Cannot decode DDL.");
231 if (not GetReader()->ReadNext(fBuffer, dataSize))
237 Swap(reinterpret_cast<UInt_t*>(fBuffer), dataSize / sizeof(UInt_t)); // Swap needed for mac power pc.
240 fDDL++; // Remember to increment index to next DDL before the calls to
241 // fDecoder.Decode since the callback methods of the decoder might
242 // use AliMUONRawStreamTriggerHP::GetDDL()
244 // Check if this is a scalar event.
245 AliRawReader * reader = GetReader();
246 if (!reader) return kFALSE;
248 const AliRawDataHeader * cdh = reader->GetDataHeader();
249 const AliRawDataHeaderV3 * cdh3 = reader->GetDataHeaderV3();
251 if (!cdh && !cdh3) return kFALSE;
253 bool scalerEvent = ((cdh ? cdh->GetL1TriggerMessage() : cdh3->GetL1TriggerMessage()) & 0x1) == 0x1;
258 // Since we might allocate memory inside OnNewBuffer in the event
259 // handler we need to trap any memory allocation exception to be robust.
260 result = fDecoder.Decode(fBuffer, dataSize, scalerEvent);
261 fHadError = (result == true ? kFALSE : kTRUE);
262 fTotalNumberOfDarcEoWErrors += fDecoder.GetHandler().GetDarcEoWErrors();
263 fTotalNumberOfGlobalEoWErrors += fDecoder.GetHandler().GetGlobalEoWErrors();
264 fTotalNumberOfRegEoWErrors += fDecoder.GetHandler().GetRegEoWErrors();
265 fTotalNumberOfLocalEoWErrors += fDecoder.GetHandler().GetLocalEoWErrors();
267 catch (const std::bad_alloc&)
269 AliError("Could not allocate more buffer space. Cannot decode DDL.");
273 // Update the current local structure pointer.
274 fkCurrentLocalStruct = fDecoder.GetHandler().FirstLocalStruct();
280 Bool_t AliMUONRawStreamTriggerHP::IsDone() const
282 /// Indicates whether the iteration is finished or not.
283 /// \return kTRUE if we already read all the digits and kFALSE if not.
289 Bool_t AliMUONRawStreamTriggerHP::Next(
290 UChar_t& id, UChar_t& dec, Bool_t& trigY,
291 UChar_t& yPos, UChar_t& sXDev, UChar_t& xDev,
292 UChar_t& xPos, Bool_t& triggerY, Bool_t& triggerX,
293 TArrayS& xPattern, TArrayS& yPattern
296 /// Advance one step in the iteration. Returns kFALSE if finished.
297 /// If kTRUE is returned then the output parameters are filled with
298 /// the values found in the next local trigger circuit structure.
300 const AliLocalStruct* localStruct = Next();
301 if (localStruct == NULL) return kFALSE;
303 id = localStruct->GetId();
304 dec = localStruct->GetDec();
305 trigY = localStruct->GetTrigY();
306 yPos = localStruct->GetYPos();
307 sXDev = localStruct->GetSXDev();
308 xDev = localStruct->GetXDev();
309 xPos = localStruct->GetXPos();
311 triggerX = localStruct->GetTriggerX();
312 triggerY = localStruct->GetTriggerY();
314 localStruct->GetXPattern(xPattern);
315 localStruct->GetYPattern(yPattern);
321 AliMUONDDLTrigger* AliMUONRawStreamTriggerHP::GetDDLTrigger() const
323 /// Construct and return a pointer to the DDL payload object.
324 /// \return Pointer to internally constructed AliMUONDDLTrigger object.
325 /// The object is owned by this class and should not be deleted
328 /// \note This method should not be used just to gain access to the DDL
329 /// payload, unless there is a good reason to have the AliMUONDDLTrigger
330 /// object. For example, if you want to modify the data and then save it
331 /// to another DDL stream. Otherwise it can be an order of magnitude
332 /// faster to access the DDL headers and data with the GetHeaders,
333 /// GetRegionalHeader and GetLocalStruct methods for example.
334 /// Refer to the MUONRawStreamTrigger.C macro to see how to use the fast
335 /// decoder interface optimally.
337 if (fDDLObject != NULL) return fDDLObject;
339 fDDLObject = new AliMUONDDLTrigger;
341 // Copy over all DARC, global headers and scalars.
342 AliMUONDarcHeader* darcHeader = fDDLObject->GetDarcHeader();
343 const AliHeader* hdr = GetHeaders();
344 UInt_t word = hdr->GetDarcHeader();
345 memcpy(darcHeader->GetHeader(), &word, sizeof(word));
346 if (hdr->GetDarcScalars() != NULL)
348 memcpy(darcHeader->GetDarcScalers(), hdr->GetDarcScalars(), sizeof(AliMUONDarcScalarsStruct));
350 memcpy(darcHeader->GetGlobalInput(), hdr->GetGlobalHeader(), sizeof(AliMUONGlobalHeaderStruct));
351 if (hdr->GetGlobalScalars() != NULL)
353 memcpy(darcHeader->GetGlobalScalers(), hdr->GetGlobalScalars(), sizeof(AliMUONGlobalScalarsStruct));
356 for (Int_t iReg = 0; iReg < (Int_t)GetRegionalHeaderCount(); iReg++)
358 AliMUONRegHeader regHeader;
359 AliMUONLocalStruct localStruct;
361 const AliRegionalHeader* rh = GetRegionalHeader(iReg);
362 // Copy local structure and scalars and add everything into DDL object.
363 memcpy(regHeader.GetHeader(), rh->GetHeader(), sizeof(AliMUONRegionalHeaderStruct));
364 if (rh->GetScalars() != NULL)
366 memcpy(regHeader.GetScalers(), rh->GetScalars(), sizeof(AliMUONRegionalScalarsStruct));
368 fDDLObject->AddRegHeader(regHeader);
370 const AliLocalStruct* lstruct = rh->GetFirstLocalStruct();
371 while (lstruct != NULL)
373 // Copy local structure and scalars and add everything into DDL object.
374 memcpy(localStruct.GetData(), lstruct->GetData(), sizeof(AliMUONLocalInfoStruct));
375 if (lstruct->GetScalars() != NULL)
377 memcpy(localStruct.GetScalers(), lstruct->GetScalars(), sizeof(AliMUONLocalScalarsStruct));
379 if (AliMUONRawStreamTriggerHP::AliLocalStruct::GetOverrideIdFlag() == true)
381 // Since the override ID flag is set, we need to replace the
382 // ID in the structure with the calculated one returned by GetId().
383 AliMUONLocalInfoStruct* strptr = reinterpret_cast<AliMUONLocalInfoStruct*>( localStruct.GetData() );
384 UInt_t triggerBits = strptr->fTriggerBits;
385 triggerBits &= ~(0xF << 19);
386 strptr->fTriggerBits = triggerBits | ((lstruct->GetId() & 0xF) << 19);
388 fDDLObject->AddLocStruct(localStruct, iReg);
389 lstruct = lstruct->Next();
397 void AliMUONRawStreamTriggerHP::SetMaxReg(Int_t reg)
399 /// Set the maximum allowed number of regional cards in the DDL.
401 fDecoder.MaxRegionals( (UInt_t) reg );
403 fDecoder.GetHandler().SetMaxStructs(
404 fDecoder.MaxRegionals(),
410 void AliMUONRawStreamTriggerHP::SetMaxLoc(Int_t loc)
412 /// Sets the maximum number of local cards in the DDL.
414 fDecoder.MaxLocals( (UInt_t) loc );
416 fDecoder.GetHandler().SetMaxStructs(
417 fDecoder.MaxRegionals(),
422 ///////////////////////////////////////////////////////////////////////////////
424 void AliMUONRawStreamTriggerHP::AliHeader::Print() const
426 /// Print DARC header, global header and global scalars to screen.
428 cout << "===== DARC info =====" << endl;
429 cout << "Header bits : 0x" << hex << fDarcHeader << dec << endl;
430 if (fDarcScalars != NULL)
432 cout << "L0R : " << fDarcScalars->fL0R << " (0x"
433 << hex << fDarcScalars->fL0R << dec << ")" << endl;
434 cout << "L1P : " << fDarcScalars->fL1P << " (0x"
435 << hex << fDarcScalars->fL1P << dec << ")" << endl;
436 cout << "L1S : " << fDarcScalars->fL1S << " (0x"
437 << hex << fDarcScalars->fL1S << dec << ")" << endl;
438 cout << "L2A : " << fDarcScalars->fL2A << " (0x"
439 << hex << fDarcScalars->fL2A << dec << ")" << endl;
440 cout << "L2R : " << fDarcScalars->fL2R << " (0x"
441 << hex << fDarcScalars->fL2R << dec << ")" << endl;
442 cout << "Clock : " << fDarcScalars->fClk << " (0x"
443 << hex << fDarcScalars->fClk << dec << ")" << endl;
444 cout << "Hold : " << fDarcScalars->fHold << " (0x"
445 << hex << fDarcScalars->fHold << dec << ")" << endl;
446 cout << "Spare : " << fDarcScalars->fSpare << " (0x"
447 << hex << fDarcScalars->fSpare << dec << ")" << endl;
451 cout << "Scalars == NULL" << endl;
454 cout << "===== Global info =====" << endl;
455 for (int i = 0; i < 4; i++)
457 cout << "Input[" << i << "] : " << fGlobalHeader->fInput[i] << " (0x"
458 << hex << fGlobalHeader->fInput[i] << dec << ")" << endl;
460 cout << "Output : " << fGlobalHeader->fOutput << " (0x"
461 << hex << fGlobalHeader->fOutput << dec << ")" << endl;
462 if (fGlobalScalars != NULL)
464 cout << "L0 : " << fGlobalScalars->fL0 << " (0x"
465 << hex << fGlobalScalars->fL0 << dec << ")" << endl;
466 cout << "Clock : " << fGlobalScalars->fClk << " (0x"
467 << hex << fGlobalScalars->fClk << dec << ")" << endl;
468 for (int j = 0; j < 4; j++)
470 cout << "Scaler[" << j << "] : " << fGlobalScalars->fScaler[j] << " (0x"
471 << hex << fGlobalScalars->fScaler[j] << dec << ")" << endl;
473 cout << "Hold : " << fGlobalScalars->fHold << " (0x"
474 << hex << fGlobalScalars->fHold << dec << ")" << endl;
475 cout << "Spare : " << fGlobalScalars->fSpare << " (0x"
476 << hex << fGlobalScalars->fSpare << dec << ")" << endl;
480 cout << "Scalars == NULL" << endl;
484 void AliMUONRawStreamTriggerHP::AliRegionalHeader::Print() const
486 /// Print the regional header and scalars to screen.
488 cout << "===== Regional card info =====" << endl;
489 cout << "DarcWord : " << fHeader->fDarcWord << " (0x"
490 << hex << fHeader->fDarcWord << dec << ")" << endl;
491 cout << "Word : " << fHeader->fWord << " (0x"
492 << hex << fHeader->fWord << dec << ")" << endl;
493 cout << "Input[0] : " << fHeader->fInput[0] << " (0x"
494 << hex << fHeader->fInput[0] << dec << ")" << endl;
495 cout << "Input[1] : " << fHeader->fInput[1] << " (0x"
496 << hex << fHeader->fInput[1] << dec << ")" << endl;
497 cout << "L0/Mask : " << fHeader->fL0CountAndMask << " (0x"
498 << hex << fHeader->fL0CountAndMask << dec << ")" << endl;
499 if (fScalars != NULL)
501 cout << "Clock : " << fScalars->fClk << " (0x"
502 << hex << fScalars->fClk << dec << ")" << endl;
503 for (int i = 0; i < 8; i++)
505 cout << "Scaler[" << i << "] : " << fScalars->fScaler[i] << " (0x"
506 << hex << fScalars->fScaler[i] << dec << ")" << endl;
508 cout << "Hold : " << fScalars->fHold << " (0x"
509 << hex << fScalars->fHold << dec << ")" << endl;
513 cout << "Scalars == NULL" << endl;
517 void AliMUONRawStreamTriggerHP::AliLocalStruct::Print() const
519 /// Print local trigger structure and scalars to screen.
521 cout << "===== Local card info =====" << endl;
522 cout << "X2X1 : " << fLocalStruct->fX2X1 << " (0x"
523 << hex << fLocalStruct->fX2X1 << dec << ")" << endl;
524 cout << "X4X3 : " << fLocalStruct->fX4X3 << " (0x"
525 << hex << fLocalStruct->fX4X3 << dec << ")" << endl;
526 cout << "Y2Y1 : " << fLocalStruct->fY2Y1 << " (0x"
527 << hex << fLocalStruct->fY2Y1 << dec << ")" << endl;
528 cout << "Y4Y3 : " << fLocalStruct->fY4Y3 << " (0x"
529 << hex << fLocalStruct->fY4Y3 << dec << ")" << endl;
530 cout << "Trigger bits : " << fLocalStruct->fTriggerBits << " (0x"
531 << hex << fLocalStruct->fTriggerBits << dec << ")" << endl;
532 if (fScalars != NULL)
534 cout << "L0 : " << fScalars->fL0 << " (0x"
535 << hex << fScalars->fL0 << dec << ")" << endl;
536 cout << "Hold : " << fScalars->fHold << " (0x"
537 << hex << fScalars->fHold << dec << ")" << endl;
538 cout << "Clock : " << fScalars->fClk << " (0x"
539 << hex << fScalars->fClk << dec << ")" << endl;
540 cout << "LPtNTrig : " << fScalars->fLPtNTrig << " (0x"
541 << hex << fScalars->fLPtNTrig << dec << ")" << endl;
542 cout << "HPtNTrig : " << fScalars->fHPtNTrig << " (0x"
543 << hex << fScalars->fHPtNTrig << dec << ")" << endl;
544 cout << "LPtRTrig : " << fScalars->fLPtRTrig << " (0x"
545 << hex << fScalars->fLPtRTrig << dec << ")" << endl;
546 cout << "HPtRTrig : " << fScalars->fHPtRTrig << " (0x"
547 << hex << fScalars->fHPtRTrig << dec << ")" << endl;
548 cout << "LPtLTrig : " << fScalars->fLPtLTrig << " (0x"
549 << hex << fScalars->fLPtLTrig << dec << ")" << endl;
550 cout << "HPtLTrig : " << fScalars->fHPtLTrig << " (0x"
551 << hex << fScalars->fHPtLTrig << dec << ")" << endl;
552 cout << "LPtSTrig : " << fScalars->fLPtSTrig << " (0x"
553 << hex << fScalars->fLPtSTrig << dec << ")" << endl;
554 cout << "HPtSTrig : " << fScalars->fHPtSTrig << " (0x"
555 << hex << fScalars->fHPtSTrig << dec << ")" << endl;
556 for (int i = 0; i < 8*4; i++)
558 cout << "Scaler[" << i << "] : " << fScalars->fScaler[i] << " (0x"
559 << hex << fScalars->fScaler[i] << dec << ")" << endl;
561 cout << "EOS : " << fScalars->fEOS << " (0x"
562 << hex << fScalars->fEOS << dec << ")" << endl;
563 cout << "Reset : " << fScalars->fReset << " (0x"
564 << hex << fScalars->fReset << dec << ")" << endl;
568 cout << "Scalars == NULL" << endl;
572 ///////////////////////////////////////////////////////////////////////////////
574 AliMUONRawStreamTriggerHP::AliDecoderEventHandler::AliDecoderEventHandler() :
584 fCurrentRegional(NULL),
592 /// Default constructor
596 AliMUONRawStreamTriggerHP::AliDecoderEventHandler::~AliDecoderEventHandler()
598 /// Default destructor cleans up the allocated memory.
600 if (fRegionals != NULL) delete [] fRegionals;
601 if (fLocals != NULL) delete [] fLocals;
605 void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::SetMaxStructs(
606 UInt_t maxRegionals, UInt_t maxLocals
609 /// Sets the maximum number of structures allowed.
611 // Start by clearing the current arrays.
612 if (fRegionals != NULL)
614 delete [] fRegionals;
623 fCurrentRegional = NULL;
624 fCurrentLocal = NULL;
626 // Allocate new memory.
627 fRegionals = new AliRegionalHeader[maxRegionals];
628 fLocals = new AliLocalStruct[maxRegionals*maxLocals];
629 fEndOfLocals = fLocals;
631 fRegionalsCount = maxRegionals;
635 void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnNewBuffer(
636 const void* buffer, UInt_t /*bufferSize*/
639 /// This is called by the high performance decoder when a new DDL payload
640 /// is about to be decoded.
642 assert( fRawStream != NULL );
644 // remember the start of the buffer to be used in OnError.
645 fBufferStart = buffer;
647 // Reset error counters.
649 fGlobalEoWErrors = 0;
653 // Reset the current local structure pointer which will be used to track
654 // where we need to fill fLocals. We have to subtract one space because we
655 // will increment the pointer the first time in the OnLocalStruct method.
656 fCurrentLocal = fLocals-1;
658 fCurrentRegional = NULL;
660 // Reset and link up all the regional structures together.
661 for (UInt_t i = 0; i+1 < fRegionalsCount; i++)
663 fRegionals[i] = AliRegionalHeader(fLocals, &fgkEmptyHeader, NULL);
664 fRegionals[i].SetNext(&fRegionals[i+1]);
666 // Reset the last structure.
667 fRegionals[fRegionalsCount-1] = AliRegionalHeader(fLocals, &fgkEmptyHeader, NULL);
671 void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnError(
672 ErrorCode error, const void* location
675 /// This is called by the high performance decoder when a error occurs
676 /// when trying to decode the DDL payload. This indicates corruption in
677 /// the data. This method converts the error code to a descriptive message
678 /// and logs this with the raw reader.
679 /// \param error The error code indicating the problem.
680 /// \param location A pointer to the location within the DDL payload buffer
681 /// being decoded where the problem with the data was found.
683 assert( fRawStream != NULL );
684 assert( fRawStream->GetReader() != NULL );
686 Char_t* message = NULL;
691 case kWrongEventType:
692 message = Form("Wrong event type obtained from the Darc header, take the one of CDH");
698 "Wrong end of Darc word %x instead of %x\n",
699 *reinterpret_cast<const UInt_t*>(location),
700 AliMUONTriggerDDLDecoder<AliMUONTriggerDDLDecoderEventHandler>::EndOfDarcWord()
702 fRawStream->GetReader()->AddMajorErrorLog(kDarcEoWErr, message);
705 case kBadEndOfGlobal:
708 "Wrong end of Global word %x instead of %x\n",
709 *reinterpret_cast<const UInt_t*>(location),
710 AliMUONTriggerDDLDecoder<AliMUONTriggerDDLDecoderEventHandler>::EndOfGlobalWord()
712 fRawStream->GetReader()->AddMajorErrorLog(kGlobalEoWErr, message);
715 case kBadEndOfRegional:
718 "Wrong end of Regional word %x instead of %x\n",
719 *reinterpret_cast<const UInt_t*>(location),
720 AliMUONTriggerDDLDecoder<AliMUONTriggerDDLDecoderEventHandler>::EndOfRegionalWord()
722 fRawStream->GetReader()->AddMajorErrorLog(kRegEoWErr, message);
728 "Wrong end of Local word %x instead of %x\n",
729 *reinterpret_cast<const UInt_t*>(location),
730 AliMUONTriggerDDLDecoder<AliMUONTriggerDDLDecoderEventHandler>::EndOfLocalWord()
732 fRawStream->GetReader()->AddMajorErrorLog(kLocalEoWErr, message);
737 "%s (At byte %lu in DDL.)",
738 ErrorCodeToMessage(error),
739 (unsigned long)location - (unsigned long)fBufferStart + sizeof(AliRawDataHeaderV3)
741 fRawStream->GetReader()->AddMajorErrorLog(error, message);
748 "AliMUONRawStreamTriggerHP::AliDecoderEventHandler",