Interface to the new class for storing and retrieving of the raw-data decoding errors...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 19 Jan 2007 15:52:16 +0000 (15:52 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 19 Jan 2007 15:52:16 +0000 (15:52 +0000)
RAW/AliRawReader.cxx
RAW/AliRawReader.h
RAW/AliRawReaderDate.cxx
RAW/AliRawReaderDateV3.cxx
RAW/AliRawReaderFile.cxx
RAW/AliRawReaderMemory.cxx
RAW/AliRawReaderRoot.cxx

index 95570b0..8294b3a 100644 (file)
@@ -39,6 +39,7 @@
 #include <Riostream.h>
 #include "AliRawReader.h"
 #include "AliDAQ.h"
+#include "AliLog.h"
 
 ClassImp(AliRawReader)
 
@@ -54,7 +55,9 @@ AliRawReader::AliRawReader() :
   fSelectMaxEquipmentId(-1),
   fSkipInvalid(kFALSE),
   fSelectEventType(-1),
-  fErrorCode(0)
+  fErrorCode(0),
+  fEventNumber(-1),
+  fErrorLogs("AliRawDataErrorLog",100)
 {
 // default constructor: initialize data members
 }
@@ -103,7 +106,9 @@ AliRawReader::AliRawReader(const AliRawReader& rawReader) :
   fSelectMaxEquipmentId(rawReader.fSelectMaxEquipmentId),
   fSkipInvalid(rawReader.fSkipInvalid),
   fSelectEventType(rawReader.fSelectEventType),
-  fErrorCode(0)
+  fErrorCode(0),
+  fEventNumber(-1),
+  fErrorLogs("AliRawDataErrorLog",100)
 {
 // copy constructor
 }
@@ -125,6 +130,9 @@ AliRawReader& AliRawReader::operator = (const AliRawReader& rawReader)
 
   fErrorCode = rawReader.fErrorCode;
 
+  fEventNumber = rawReader.fEventNumber;
+  fErrorLogs = *((TClonesArray*)rawReader.fErrorLogs.Clone());
+
   return *this;
 }
 
@@ -448,3 +456,25 @@ void AliRawReader::DumpData(Int_t limit)
           
   } while (ReadHeader());
 }
+
+void AliRawReader::AddErrorLog(AliRawDataErrorLog::ERawDataErrorType type,
+                              const char *message)
+{
+  // Add a raw data error message to the list
+  // of raw-data decoding errors
+  if (fEventNumber < 0) {
+    AliError("No events have read so far! Impossible to add a raw data error log!");
+    return;
+  }
+  Int_t ddlId = GetDDLID();
+  if (ddlId < 0) {
+    AliError("No ddl raw data have been read so far! Impossible to add a raw data error log!");
+    return;
+  }
+
+  new (fErrorLogs[fErrorLogs.GetEntriesFast()])
+    AliRawDataErrorLog(fEventNumber,
+                      ddlId,
+                      type,
+                      message);
+}
index daf5664..6072b7f 100644 (file)
@@ -13,6 +13,9 @@
 
 #include <TObject.h>
 #include <TArrayI.h>
+#include <TClonesArray.h>
+
+#include "AliRawDataErrorLog.h"
 #include "AliRawDataHeader.h"
 
 class AliRawEventHeaderBase;
@@ -106,6 +109,13 @@ class AliRawReader: public TObject {
 
     void             DumpData(Int_t limit = -1);
 
+    void             AddErrorLog(AliRawDataErrorLog::ERawDataErrorType type,
+                                const char *message = NULL);
+    Int_t            GetNumberOfErrorLogs() const { return fErrorLogs.GetEntriesFast(); }
+    AliRawDataErrorLog *GetErrorLog(Int_t i) const {
+      return (AliRawDataErrorLog *)fErrorLogs.UncheckedAt(i);
+    }
+
   protected :
     Bool_t           IsSelected() const;
     Bool_t           IsEventSelected() const;
@@ -126,6 +136,9 @@ class AliRawReader: public TObject {
 
     Int_t            fErrorCode;            // code of last error
 
+    Int_t            fEventNumber;          // current event number
+    TClonesArray     fErrorLogs;        // raw data decoding errors
+
     ClassDef(AliRawReader, 0) // base class for reading raw digits
 };
 
index cce49d5..89732d1 100644 (file)
@@ -523,6 +523,7 @@ Bool_t AliRawReaderDate::NextEvent()
       break;
     }
     fEvent = (eventHeaderStruct*) buffer;
+    fEventNumber++;
     return kTRUE;
   };
 
@@ -539,6 +540,7 @@ Bool_t AliRawReaderDate::RewindEvents()
   if (!fFile) return kFALSE;
 
   fseek(fFile, 0, SEEK_SET);
+  fEventNumber = -1;
   return Reset();
 }
 
index 3bc53c8..dcee6aa 100644 (file)
@@ -411,6 +411,7 @@ Bool_t AliRawReaderDateV3::NextEvent()
       break;
     }
     fEvent = (eventHeaderStruct*) buffer;
+    fEventNumber++;
     return kTRUE;
   };
 
@@ -425,6 +426,7 @@ Bool_t AliRawReaderDateV3::RewindEvents()
   if (!fFile) return kFALSE;
 
   fseek(fFile, 0, SEEK_SET);
+  fEventNumber = -1;
   return Reset();
 }
 
index ff8c530..fe33f77 100644 (file)
@@ -266,6 +266,8 @@ Bool_t AliRawReaderFile::NextEvent()
     Reset();
   } while (!IsEventSelected());
 
+  fEventNumber++;
+
   return kTRUE;
 }
 
@@ -274,5 +276,6 @@ Bool_t AliRawReaderFile::RewindEvents()
 // reset the event counter
 
   if (fEventIndex >= 0)  fEventIndex = -1;
+  fEventNumber = -1;
   return Reset();
 }
index c35df70..caa3660 100644 (file)
@@ -38,6 +38,8 @@ AliRawReaderMemory::AliRawReaderMemory() :
 // the given memory location
 
   fHeader = new AliRawDataHeader;
+
+  fEventNumber = 0;
 }
 
 AliRawReaderMemory::AliRawReaderMemory(UChar_t* memory, UInt_t size) :
@@ -49,6 +51,8 @@ AliRawReaderMemory::AliRawReaderMemory(UChar_t* memory, UInt_t size) :
 // create an object to read digits from the given memory
 
   fHeader = new AliRawDataHeader;
+
+  fEventNumber = 0;
 }
 
 AliRawReaderMemory::~AliRawReaderMemory()
index f2575dc..c1252ef 100644 (file)
@@ -477,6 +477,7 @@ Bool_t AliRawReaderRoot::NextEvent()
       return kFALSE;
     fEventIndex++;
   } while (!IsEventSelected());
+  fEventNumber++;
   return Reset();
 }
 
@@ -490,6 +491,7 @@ Bool_t AliRawReaderRoot::RewindEvents()
   delete fEvent;
   fEvent = new AliRawEvent;
   fBranch->SetAddress(&fEvent);
+  fEventNumber = -1;
   return Reset();
 }