From 38cf12f36447209b467f01fdaf1b40e0b75686c6 Mon Sep 17 00:00:00 2001 From: cvetan Date: Fri, 19 Jan 2007 15:52:16 +0000 Subject: [PATCH] Interface to the new class for storing and retrieving of the raw-data decoding errors. AliRawReader class now contains a TClonesArray of ALiRawDataErrorLog objectss. The provided interface should replace all AliError and AliFatal inside the detector-specific raw-data decoding classes. Further, the raw-data errors will be stored inside the ESD. --- RAW/AliRawReader.cxx | 34 ++++++++++++++++++++++++++++++++-- RAW/AliRawReader.h | 13 +++++++++++++ RAW/AliRawReaderDate.cxx | 2 ++ RAW/AliRawReaderDateV3.cxx | 2 ++ RAW/AliRawReaderFile.cxx | 3 +++ RAW/AliRawReaderMemory.cxx | 4 ++++ RAW/AliRawReaderRoot.cxx | 2 ++ 7 files changed, 58 insertions(+), 2 deletions(-) diff --git a/RAW/AliRawReader.cxx b/RAW/AliRawReader.cxx index 95570b08b46..8294b3a1fb6 100644 --- a/RAW/AliRawReader.cxx +++ b/RAW/AliRawReader.cxx @@ -39,6 +39,7 @@ #include #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); +} diff --git a/RAW/AliRawReader.h b/RAW/AliRawReader.h index daf56642212..6072b7f2694 100644 --- a/RAW/AliRawReader.h +++ b/RAW/AliRawReader.h @@ -13,6 +13,9 @@ #include #include +#include + +#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 }; diff --git a/RAW/AliRawReaderDate.cxx b/RAW/AliRawReaderDate.cxx index cce49d515c0..89732d1fe8c 100644 --- a/RAW/AliRawReaderDate.cxx +++ b/RAW/AliRawReaderDate.cxx @@ -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(); } diff --git a/RAW/AliRawReaderDateV3.cxx b/RAW/AliRawReaderDateV3.cxx index 3bc53c85607..dcee6aab1bf 100644 --- a/RAW/AliRawReaderDateV3.cxx +++ b/RAW/AliRawReaderDateV3.cxx @@ -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(); } diff --git a/RAW/AliRawReaderFile.cxx b/RAW/AliRawReaderFile.cxx index ff8c5301c5a..fe33f776157 100644 --- a/RAW/AliRawReaderFile.cxx +++ b/RAW/AliRawReaderFile.cxx @@ -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(); } diff --git a/RAW/AliRawReaderMemory.cxx b/RAW/AliRawReaderMemory.cxx index c35df703fd5..caa36603c02 100644 --- a/RAW/AliRawReaderMemory.cxx +++ b/RAW/AliRawReaderMemory.cxx @@ -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() diff --git a/RAW/AliRawReaderRoot.cxx b/RAW/AliRawReaderRoot.cxx index f2575dc7c3c..c1252ef0550 100644 --- a/RAW/AliRawReaderRoot.cxx +++ b/RAW/AliRawReaderRoot.cxx @@ -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(); } -- 2.43.0