]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONRawStreamTriggerHP.cxx
added proper handling of EMCAL calibration events
[u/mrichter/AliRoot.git] / MUON / AliMUONRawStreamTriggerHP.cxx
index 89b3b1191a12d488360a805432c7f5764e16ee12..aa9b12a2f460eecc31c570e3f1cf91dd6a7110f6 100644 (file)
@@ -57,6 +57,7 @@ ClassImp(AliMUONRawStreamTriggerHP)
 /// \endcond
 
 const Int_t AliMUONRawStreamTriggerHP::fgkMaxDDL = 2;
+bool AliMUONRawStreamTriggerHP::AliLocalStruct::fgOverrideId = true;
 
 const AliMUONRegionalHeaderStruct
 AliMUONRawStreamTriggerHP::AliDecoderEventHandler::fgkEmptyHeader = {
@@ -76,7 +77,11 @@ AliMUONRawStreamTriggerHP::AliMUONRawStreamTriggerHP() :
        fkCurrentLocalStruct(NULL),
        fHadError(kFALSE),
        fDone(kFALSE),
-       fDDLObject(NULL)
+       fDDLObject(NULL),
+       fTotalNumberOfDarcEoWErrors(0),
+       fTotalNumberOfGlobalEoWErrors(0),
+       fTotalNumberOfRegEoWErrors(0),
+       fTotalNumberOfLocalEoWErrors(0)
 {
        ///
        /// Default constructor.
@@ -102,7 +107,11 @@ AliMUONRawStreamTriggerHP::AliMUONRawStreamTriggerHP(AliRawReader* rawReader) :
        fkCurrentLocalStruct(NULL),
        fHadError(kFALSE),
        fDone(kFALSE),
-       fDDLObject(NULL)
+       fDDLObject(NULL),
+       fTotalNumberOfDarcEoWErrors(0),
+       fTotalNumberOfGlobalEoWErrors(0),
+       fTotalNumberOfRegEoWErrors(0),
+       fTotalNumberOfLocalEoWErrors(0)
 {
        ///
        /// Constructor with AliRawReader as argument.
@@ -146,6 +155,10 @@ void AliMUONRawStreamTriggerHP::First()
        fDDL = 0;
        fDone = kFALSE;
        NextDDL();
+       fTotalNumberOfDarcEoWErrors = 0;
+       fTotalNumberOfGlobalEoWErrors = 0;
+       fTotalNumberOfRegEoWErrors = 0;
+       fTotalNumberOfLocalEoWErrors = 0;
 }
 
 
@@ -224,6 +237,10 @@ Bool_t AliMUONRawStreamTriggerHP::NextDDL()
        Swap(reinterpret_cast<UInt_t*>(fBuffer), dataSize / sizeof(UInt_t)); // Swap needed for mac power pc.
 #endif
        
+       fDDL++; // Remember to increment index to next DDL before the calls to
+               // fDecoder.Decode since the callback methods of the decoder might
+               // use AliMUONRawStreamTriggerHP::GetDDL()
+       
        // Check if this is a scalar event.
        bool scalerEvent = (GetReader()->GetDataHeader()->GetL1TriggerMessage() & 0x1) == 0x1;
        
@@ -234,6 +251,10 @@ Bool_t AliMUONRawStreamTriggerHP::NextDDL()
                // handler we need to trap any memory allocation exception to be robust.
                result = fDecoder.Decode(fBuffer, dataSize, scalerEvent);
                fHadError = (result == true ? kFALSE : kTRUE);
+               fTotalNumberOfDarcEoWErrors += fDecoder.GetHandler().GetDarcEoWErrors();
+               fTotalNumberOfGlobalEoWErrors += fDecoder.GetHandler().GetGlobalEoWErrors();
+               fTotalNumberOfRegEoWErrors += fDecoder.GetHandler().GetRegEoWErrors();
+               fTotalNumberOfLocalEoWErrors += fDecoder.GetHandler().GetLocalEoWErrors();
        }
        catch (const std::bad_alloc&)
        {
@@ -244,7 +265,6 @@ Bool_t AliMUONRawStreamTriggerHP::NextDDL()
        // Update the current local structure pointer.
        fkCurrentLocalStruct = fDecoder.GetHandler().FirstLocalStruct();
 
-       fDDL++; // Remember to increment index to next DDL.
        return kTRUE;
 }
 
@@ -348,6 +368,15 @@ AliMUONDDLTrigger* AliMUONRawStreamTriggerHP::GetDDLTrigger() const
                        {
                                memcpy(localStruct.GetScalers(), lstruct->GetScalars(), sizeof(AliMUONLocalScalarsStruct));
                        }
+                       if (AliMUONRawStreamTriggerHP::AliLocalStruct::GetOverrideIdFlag() == true)
+                       {
+                               // Since the override ID flag is set, we need to replace the
+                               // ID in the structure with the calculated one returned by GetId().
+                               AliMUONLocalInfoStruct* strptr = reinterpret_cast<AliMUONLocalInfoStruct*>( localStruct.GetData() );
+                               UInt_t triggerBits = strptr->fTriggerBits;
+                               triggerBits &= ~(0xF << 19);
+                               strptr->fTriggerBits = triggerBits | ((lstruct->GetId() & 0xF) << 19);
+                       }
                        fDDLObject->AddLocStruct(localStruct, iReg);
                        lstruct = lstruct->Next();
                }
@@ -697,7 +726,7 @@ void AliMUONRawStreamTriggerHP::AliDecoderEventHandler::OnError(
                
        default:
                message = Form(
-                       "%s (At byte %d in DDL.)",
+                       "%s (At byte %lu in DDL.)",
                        ErrorCodeToMessage(error),
                        (unsigned long)location - (unsigned long)fBufferStart + sizeof(AliRawDataHeader)
                );