]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - MUON/AliMUONPayloadTrigger.cxx
Adding a GetObjectFast method (Laurent)
[u/mrichter/AliRoot.git] / MUON / AliMUONPayloadTrigger.cxx
index 2a871082cb7b05ac7b41b6dee8edfcc48a88b018..d55bf6a6553075c6efc6d334199a3bf963efd91b 100644 (file)
@@ -13,7 +13,9 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
+// $Id$
 
+//-----------------------------------------------------------------------------
 /// \class AliMUONPayloadTrigger
 /// Class Payload
 ///
 /// First version implement for Trigger
 ///
 /// \author Christian Finck
+//-----------------------------------------------------------------------------
 
 #include "AliMUONPayloadTrigger.h"
 
-#include "AliRawReader.h"
-#include "AliRawDataHeader.h"
-
-#ifndef DATE_SYS
-#include "AliLog.h"
-#endif
-
 #include "AliMUONDarcHeader.h"
 #include "AliMUONRegHeader.h"
 #include "AliMUONLocalStruct.h"
 #include "AliMUONDDLTrigger.h"
 
+#include "AliLog.h"
+
 /// \cond CLASSIMP
 ClassImp(AliMUONPayloadTrigger)
 /// \endcond
@@ -47,7 +45,11 @@ AliMUONPayloadTrigger::AliMUONPayloadTrigger()
     fMaxLoc(16),
     fDDLTrigger(new AliMUONDDLTrigger()),
     fRegHeader(new AliMUONRegHeader()), 
-    fLocalStruct(new AliMUONLocalStruct())
+    fLocalStruct(new AliMUONLocalStruct()),
+    fDarcEoWErrors(0),
+    fGlobalEoWErrors(0),
+    fRegEoWErrors(0),
+    fLocalEoWErrors(0)
 {
   ///
   /// create an object to read MUON raw digits
@@ -72,7 +74,7 @@ AliMUONPayloadTrigger::~AliMUONPayloadTrigger()
 Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer)
 {
   /// decode trigger DDL
-  /// store only non-empty structures (TrigY ==0)
+  /// store only notified cards
 
  // reading DDL for trigger
 
@@ -100,13 +102,12 @@ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer)
     index += darcHeader->GetDarcScalerLength();
   }
 
-  if (buffer[index++] != darcHeader->GetEndOfDarc())
-#ifndef DATE_SYS
-    AliWarning(Form("Wrong end of Darc word %x instead of %x\n",buffer[index-1], darcHeader->GetEndOfDarc()));
-#else 
-  printf("Wrong end of Darc word %x instead of %x\n",buffer[index-1], darcHeader->GetEndOfDarc());
-#endif
+  if (buffer[index++] != darcHeader->GetEndOfDarc()) {
 
+      AliWarning(Form("Wrong end of Darc word %x instead of %x\n",
+                   buffer[index-1], darcHeader->GetEndOfDarc()));
+      fDarcEoWErrors++;
+  }
   // 4 words of global board input + Global board output
   memcpy(darcHeader->GetGlobalInput(), &buffer[index], (kGlobalHeaderSize)*4); 
   index += kGlobalHeaderSize; 
@@ -117,13 +118,12 @@ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer)
     index += darcHeader->GetGlobalScalerLength();
   }
 
-  if (buffer[index++] != darcHeader->GetEndOfGlobal())
-#ifndef DATE_SYS
-    AliWarning(Form("Wrong end of Global word %x instead of %x\n",buffer[index-1], darcHeader->GetEndOfGlobal()));
-#else 
-  printf("Wrong end of Global word %x instead of %x\n",buffer[index-1], darcHeader->GetEndOfGlobal());
-#endif
+  if (buffer[index++] != darcHeader->GetEndOfGlobal()) {
+
+      AliWarning(Form("Wrong end of Global word %x instead of %x\n",
+                     buffer[index-1], darcHeader->GetEndOfGlobal()));
+      fGlobalEoWErrors++;
+  }
   // 8 regional boards
   for (Int_t iReg = 0; iReg < fMaxReg; iReg++) {           //loop over regeonal card
 
@@ -137,13 +137,12 @@ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer)
       index += fRegHeader->GetScalerLength();
     }
 
-    if (buffer[index++] != fRegHeader->GetEndOfReg())
-#ifndef DATE_SYS
-      AliWarning(Form("Wrong end of Reg word %x instead of %x\n",buffer[index-1], fRegHeader->GetEndOfReg()));
-#else
-      printf("Wrong end of Reg word %x instead of %x\n",buffer[index-1], fRegHeader->GetEndOfReg());
-#endif
+    if (buffer[index++] != fRegHeader->GetEndOfReg()) {
 
+      AliWarning(Form("Wrong end of Reg word %x instead of %x\n",
+                   buffer[index-1], fRegHeader->GetEndOfReg()));
+      fRegEoWErrors++;
+    }
     // 16 local cards per regional board
     for (Int_t iLoc = 0; iLoc < fMaxLoc; iLoc++) {         //loop over local card
          
@@ -159,13 +158,16 @@ Bool_t AliMUONPayloadTrigger::Decode(UInt_t *buffer)
        index += fLocalStruct->GetScalerLength();
       }
 
-      if (buffer[index++] != fLocalStruct->GetEndOfLocal())
-#ifndef DATE_SYS
-       AliWarning(Form("Wrong end of local word %x instead of %x\n",buffer[index-1], fLocalStruct->GetEndOfLocal()));
-#else
-      printf("Wrong end of local word %x instead of %x\n",buffer[index-1], fLocalStruct->GetEndOfLocal());
-#endif
-         
+      if (buffer[index++] != fLocalStruct->GetEndOfLocal()) {
+
+       AliWarning(Form("Wrong end of local word %x instead of %x\n",
+                       buffer[index-1], fLocalStruct->GetEndOfLocal()));
+       fLocalEoWErrors++;
+      }
+      // fill only if card notified
+      if (fLocalStruct->GetData(0) == fLocalStruct->GetDisableWord())
+         continue;
+
       fDDLTrigger->AddLocStruct(*fLocalStruct, iReg);
 
     } // local card loop
@@ -184,6 +186,10 @@ void AliMUONPayloadTrigger::ResetDDL()
   ///
   AliMUONDarcHeader* darcHeader = fDDLTrigger->GetDarcHeader();
   darcHeader->GetRegHeaderArray()->Delete();
+  fDarcEoWErrors   = 0;
+  fGlobalEoWErrors = 0;
+  fRegEoWErrors    = 0;
+  fLocalEoWErrors  = 0;
 }
 
 //______________________________________________________