Export AliDAQ header file into include
[u/mrichter/AliRoot.git] / RAW / AliRawReaderRoot.cxx
index b458c75..71aabc0 100644 (file)
@@ -32,7 +32,7 @@
 #include <TTree.h>
 #include "AliRawReaderRoot.h"
 #include "AliRawEvent.h"
-#include "AliRawEventHeader.h"
+#include "AliRawEventHeaderBase.h"
 #include "AliRawEquipment.h"
 #include "AliRawEquipmentHeader.h"
 #include "AliRawData.h"
@@ -192,7 +192,7 @@ UInt_t AliRawReaderRoot::GetType() const
 // get the type from the event header
 
   if (!fEvent) return 0;
-  return fEvent->GetHeader()->GetType();
+  return fEvent->GetHeader()->Get("Type");
 }
 
 UInt_t AliRawReaderRoot::GetRunNumber() const
@@ -200,7 +200,7 @@ UInt_t AliRawReaderRoot::GetRunNumber() const
 // get the run number from the event header
 
   if (!fEvent) return 0;
-  return fEvent->GetHeader()->GetRunNumber();
+  return fEvent->GetHeader()->Get("RunNb");
 }
 
 const UInt_t* AliRawReaderRoot::GetEventId() const
@@ -208,7 +208,7 @@ const UInt_t* AliRawReaderRoot::GetEventId() const
 // get the event id from the event header
 
   if (!fEvent) return NULL;
-  return fEvent->GetHeader()->GetId();
+  return fEvent->GetHeader()->GetP("Id");
 }
 
 const UInt_t* AliRawReaderRoot::GetTriggerPattern() const
@@ -216,7 +216,7 @@ const UInt_t* AliRawReaderRoot::GetTriggerPattern() const
 // get the trigger pattern from the event header
 
   if (!fEvent) return NULL;
-  return fEvent->GetHeader()->GetTriggerPattern();
+  return fEvent->GetHeader()->GetP("TriggerPattern");
 }
 
 const UInt_t* AliRawReaderRoot::GetDetectorPattern() const
@@ -224,7 +224,7 @@ const UInt_t* AliRawReaderRoot::GetDetectorPattern() const
 // get the detector pattern from the event header
 
   if (!fEvent) return NULL;
-  return fEvent->GetHeader()->GetDetectorPattern();
+  return fEvent->GetHeader()->GetP("DetectorPattern");
 }
 
 const UInt_t* AliRawReaderRoot::GetAttributes() const
@@ -232,7 +232,15 @@ const UInt_t* AliRawReaderRoot::GetAttributes() const
 // get the type attributes from the event header
 
   if (!fEvent) return NULL;
-  return fEvent->GetHeader()->GetTypeAttribute();
+  return fEvent->GetHeader()->GetP("TypeAttribute");
+}
+
+const UInt_t* AliRawReaderRoot::GetSubEventAttributes() const
+{
+// get the type attributes from the sub event header
+
+  if (!fSubEvent) return NULL;
+  return fSubEvent->GetHeader()->GetP("TypeAttribute");
 }
 
 UInt_t AliRawReaderRoot::GetLDCId() const
@@ -240,7 +248,7 @@ UInt_t AliRawReaderRoot::GetLDCId() const
 // get the LDC Id from the event header
 
   if (!fEvent || !fSubEvent) return 0;
-  return fSubEvent->GetHeader()->GetLDCId();
+  return fSubEvent->GetHeader()->Get("LdcId");
 }
 
 UInt_t AliRawReaderRoot::GetGDCId() const
@@ -248,7 +256,7 @@ UInt_t AliRawReaderRoot::GetGDCId() const
 // get the GDC Id from the event header
 
   if (!fEvent) return 0;
-  return fEvent->GetHeader()->GetGDCId();
+  return fEvent->GetHeader()->Get("GdcId");
 }
 
 
@@ -292,6 +300,14 @@ Int_t AliRawReaderRoot::GetEquipmentElementSize() const
   return fEquipment->GetEquipmentHeader()->GetBasicSizeType();
 }
 
+Int_t AliRawReaderRoot::GetEquipmentHeaderSize() const
+{
+// get the size of the equipment header (28 bytes by default)
+
+  if (!fEvent || !fEquipment || !fEquipment->GetEquipmentHeader()) return 0;
+  return fEquipment->GetEquipmentHeader()->HeaderSize();
+}
+
 
 Bool_t AliRawReaderRoot::ReadHeader()
 {
@@ -344,37 +360,47 @@ Bool_t AliRawReaderRoot::ReadHeader()
     // continue with the next equipment if no data left in the payload
     if (fPosition >= fEnd) continue;
 
-    // check that there are enough bytes left for the data header
-    if (fPosition + sizeof(AliRawDataHeader) > fEnd) {
-      Error("ReadHeader", "could not read data header!");
-      Warning("ReadHeader", "skipping %d bytes", fEnd - fPosition);
-      fEquipment->GetEquipmentHeader()->Dump();
-      fCount = 0;
-      fPosition = fEnd;
-      fErrorCode = kErrNoDataHeader;
-      continue;
+    if (fRequireHeader) {
+      // check that there are enough bytes left for the data header
+      if (fPosition + sizeof(AliRawDataHeader) > fEnd) {
+       Error("ReadHeader", "could not read data header!");
+       Warning("ReadHeader", "skipping %d bytes", fEnd - fPosition);
+       fEquipment->GetEquipmentHeader()->Dump();
+       fCount = 0;
+       fPosition = fEnd;
+       fErrorCode = kErrNoDataHeader;
+       continue;
+      }
+
+      // "read" the data header
+      fHeader = (AliRawDataHeader*) fPosition;
+      if ((fPosition + fHeader->fSize) != fEnd) {
+       Warning("ReadHeader",
+               "raw data size found in the header is wrong (%d != %d)! Using the equipment size instead !",
+               fHeader->fSize, fEnd - fPosition);
+       fHeader->fSize = fEnd - fPosition;
+      }
+      fPosition += sizeof(AliRawDataHeader);
     }
 
-    // "read" the data header
-    fHeader = (AliRawDataHeader*) fPosition;
-    fPosition += sizeof(AliRawDataHeader);
-    if (fHeader->fSize != 0xFFFFFFFF) {
+    if (fHeader && (fHeader->fSize != 0xFFFFFFFF)) {
       fCount = fHeader->fSize - sizeof(AliRawDataHeader);
+
+      // check consistency of data size in the header and in the sub event
+      if (fPosition + fCount > fEnd) {  
+       Error("ReadHeader", "size in data header exceeds event size!");
+       Warning("ReadHeader", "skipping %d bytes", fEnd - fPosition);
+       fEquipment->GetEquipmentHeader()->Dump();
+       fCount = 0;
+       fPosition = fEnd;
+       fErrorCode = kErrSize;
+       continue;
+      }
+
     } else {
       fCount = fEnd - fPosition;
     }
 
-    // check consistency of data size in the header and in the sub event
-    if (fPosition + fCount > fEnd) {  
-      Error("ReadHeader", "size in data header exceeds event size!");
-      Warning("ReadHeader", "skipping %d bytes", fEnd - fPosition);
-      fEquipment->GetEquipmentHeader()->Dump();
-      fCount = 0;
-      fPosition = fEnd;
-      fErrorCode = kErrSize;
-      continue;
-    }
-
   } while (!IsSelected());
 
   return kTRUE;
@@ -437,12 +463,11 @@ Bool_t AliRawReaderRoot::NextEvent()
   if (!fFile) return kFALSE;
 
   do {
-    if (fBranch->GetEntry(fEventIndex+1) <= 0) {
-      delete fEvent;
-      fEvent = new AliRawEvent;
-      fBranch->SetAddress(&fEvent);
+    delete fEvent;
+    fEvent = new AliRawEvent;
+    fBranch->SetAddress(&fEvent);
+    if (fBranch->GetEntry(fEventIndex+1) <= 0)
       return kFALSE;
-    }
     fEventIndex++;
   } while (!IsEventSelected());
   return Reset();
@@ -504,19 +529,24 @@ Int_t AliRawReaderRoot::CheckData() const
     // continue with the next sub event if no data left in the payload
     if (position >= end) continue;
 
+    if (fRequireHeader) {
     // check that there are enough bytes left for the data header
-    if (position + sizeof(AliRawDataHeader) > end) {
-      result |= kErrNoDataHeader;
-      continue;
-    }
+      if (position + sizeof(AliRawDataHeader) > end) {
+       result |= kErrNoDataHeader;
+       continue;
+      }
 
-    // check consistency of data size in the header and in the equipment
-    AliRawDataHeader* header = (AliRawDataHeader*) position;
-    if (header->fSize != 0xFFFFFFFF) {
-      if (position + header->fSize > end) {
+      // check consistency of data size in the header and in the equipment
+      AliRawDataHeader* header = (AliRawDataHeader*) position;
+      if ((position + header->fSize) != end) {
+       Warning("ReadHeader",
+               "raw data size found in the header is wrong (%d != %d)! Using the equipment size instead !",
+               header->fSize, end - position);
+       header->fSize = end - position;
        result |= kErrSize;
       }
     }
+    position = end;
   };
 
   return result;