Implemented parity check method CheckDataParity()
authorivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 20 Jun 2006 09:02:56 +0000 (09:02 +0000)
committerivana <ivana@f7af4fe6-9843-0410-8265-dc069ae4e863>
Tue, 20 Jun 2006 09:02:56 +0000 (09:02 +0000)
(Christian)

MUON/AliMUONPayloadTracker.cxx
MUON/AliMUONPayloadTracker.h

index 8b3a40f..34b871d 100644 (file)
@@ -239,3 +239,35 @@ void AliMUONPayloadTracker::SetMaxBlock(Int_t blk)
   if (blk > 2) blk = 2;
   fMaxBlock = blk;
 }
+
+Bool_t AliMUONPayloadTracker::CheckDataParity()
+{
+  // parity check
+  // taken from MuTrkBusPatch.cxx (sotfware test for CROCUS)
+  // A. Baldisseri
+
+  Int_t  parity, bit;
+  UInt_t data;
+  
+  Int_t dataSize = fBusStruct->GetLength();
+  for (int idata = 0; idata < dataSize; idata++) {
+
+    data  = fBusStruct->GetData(idata);
+    // Compute the parity for each data word
+    parity = data & 0x1;
+
+    for (Int_t i = 1; i <= 30; i++) {
+      bit = ((data >> i) & 0x1);
+      parity = (parity || bit) && (!(parity && bit));
+    } 
+
+    // Check
+    if (parity != fBusStruct->GetParity(idata)) {
+      AliWarning(Form("Parity error in word %d for manuId %d and channel %d\n", 
+                     idata, fBusStruct->GetManuId(idata), fBusStruct->GetChannelId(idata)));
+      return kFALSE;
+                    
+    }
+  }
+  return kTRUE;
+}
index f58ee6d..619dbde 100644 (file)
@@ -67,6 +67,8 @@ class AliMUONPayloadTracker: public TObject {
     AliMUONBlockHeader*     fBlockHeader;     //!< pointer for block structure 
     AliMUONDspHeader*       fDspHeader;       //!< pointer for dsp structure 
 
+    Bool_t CheckDataParity();
+
     ClassDef(AliMUONPayloadTracker, 1)    // base class for reading MUON raw digits
 };