Populating a fake event header in case of readinf of raw data from DDL files. Some...
authorcvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 28 Jul 2008 10:05:40 +0000 (10:05 +0000)
committercvetan <cvetan@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 28 Jul 2008 10:05:40 +0000 (10:05 +0000)
RAW/AliRawReaderFile.cxx
RAW/AliRawReaderFile.h

index 2a7dfbf..bc72982 100644 (file)
@@ -50,7 +50,11 @@ AliRawReaderFile::AliRawReaderFile(Int_t eventNumber) :
   fBufferSize(0),
   fEquipmentSize(0),
   fDDLIndex(NULL),
-  fDDLCurrent(-1)
+  fDDLCurrent(-1),
+  fType(7),
+  fRunNb(0),
+  fDetectorPattern(0),
+  fTimestamp(0)
 {
 // create an object to read digits from the given event
 // in the current directory
@@ -58,6 +62,9 @@ AliRawReaderFile::AliRawReaderFile(Int_t eventNumber) :
   fDirectory = OpenDirectory();
   OpenNextFile();
   fHeader = new AliRawDataHeader;
+
+  fId[0] = fId[1] = 0;
+  fTriggerPattern[0] = fTriggerPattern[1] = 0;
 }
 
 AliRawReaderFile::AliRawReaderFile(const char* dirName, Int_t eventNumber) :
@@ -70,13 +77,20 @@ AliRawReaderFile::AliRawReaderFile(const char* dirName, Int_t eventNumber) :
   fBufferSize(0),
   fEquipmentSize(0),
   fDDLIndex(NULL),
-  fDDLCurrent(-1)
+  fDDLCurrent(-1),
+  fType(7),
+  fRunNb(0),
+  fDetectorPattern(0),
+  fTimestamp(0)
 {
 // create an object to read digits from the given directory
 
   fDirectory = OpenDirectory();
   OpenNextFile();
   fHeader = new AliRawDataHeader;
+
+  fId[0] = fId[1] = 0;
+  fTriggerPattern[0] = fTriggerPattern[1] = 0;
 }
 
 AliRawReaderFile::~AliRawReaderFile()
@@ -197,6 +211,11 @@ Bool_t AliRawReaderFile::OpenNextFile()
     entry.Form("%s_%d.ddl", AliDAQ::DetectorNameFromDdlID(fDDLCurrent, dummy), fDDLCurrent);
     char* fileName = gSystem->ConcatFileName(GetDirName(), entry);
     if (!fileName) continue;
+    // read the timestamp
+    FileStat_t buf;
+    if (gSystem->GetPathInfo(fileName,buf) == 0) {
+      fTimestamp = buf.fMtime;
+    }
 #ifndef __DECCXX 
     fStream = new fstream(fileName, ios::binary|ios::in);
 #else
@@ -341,6 +360,19 @@ Bool_t AliRawReaderFile::NextEvent()
     Reset();
   } while (!IsEventSelected());
 
+  // Read the header of the first payload
+  // in order to fill the 'fake' event header
+  if (ReadHeader() && fHeader) {
+    fId[0] = ((fHeader->GetEventID2() >> 20) & 0xf);
+    fId[1] = (fHeader->GetEventID1() & 0xfff) | ((fHeader->GetEventID2() & 0xfffff) << 12);
+    fTriggerPattern[0] = (fHeader->GetTriggerClasses() & 0xffffffff);
+    fTriggerPattern[1] = ((fHeader->GetTriggerClasses() >> 32) & 0x3ffff);
+  }
+  else {
+    Warning("AliRawReaderFile","Can not read CDH header! The event header fields will be empty!");
+  }
+  Reset();
+
   fEventNumber++;
 
   return kTRUE;
index 307cc30..7a4ef27 100644 (file)
@@ -29,16 +29,16 @@ class AliRawReaderFile: public AliRawReader {
 
     virtual void     RequireHeader(Bool_t required);
 
-    virtual UInt_t   GetType() const {return 0;};
-    virtual UInt_t   GetRunNumber() const {return 0;};
-    virtual const UInt_t* GetEventId() const {return 0;};
-    virtual const UInt_t* GetTriggerPattern() const {return 0;};
-    virtual const UInt_t* GetDetectorPattern() const {return 0;};
+    virtual UInt_t   GetType() const {return fType;};
+    virtual UInt_t   GetRunNumber() const {return fRunNb;};
+    virtual const UInt_t* GetEventId() const {return fId;};
+    virtual const UInt_t* GetTriggerPattern() const {return fTriggerPattern;};
+    virtual const UInt_t* GetDetectorPattern() const {return &fDetectorPattern;};
     virtual const UInt_t* GetAttributes() const {return 0;};
     virtual const UInt_t* GetSubEventAttributes() const {return 0;};
     virtual UInt_t   GetLDCId() const {return 0;};
     virtual UInt_t   GetGDCId() const {return 0;};
-    virtual UInt_t   GetTimestamp() const {return 0;};
+    virtual UInt_t   GetTimestamp() const {return fTimestamp;};
 
     virtual Int_t    GetEquipmentSize() const {return fEquipmentSize;};
     virtual Int_t    GetEquipmentType() const {return 0;};
@@ -56,6 +56,10 @@ class AliRawReaderFile: public AliRawReader {
     virtual Bool_t   NextEvent();
     virtual Bool_t   RewindEvents();
 
+    void             SetEventType(UInt_t type) { fType = type; }
+    void             SetRunNb(UInt_t run) { fRunNb = run; }
+    void             SetDetectorPattern(UInt_t pattern) { fDetectorPattern = pattern; }
   protected :
     TString          GetDirName() const;
     void*            OpenDirectory();
@@ -73,6 +77,13 @@ class AliRawReaderFile: public AliRawReader {
     TArrayC*         fDDLIndex;    //! the index of DDL files
     Int_t            fDDLCurrent;  //! the index of DDL files
 
+    UInt_t           fType;        // event type (no idea from where to get it - put physics_event)
+    UInt_t           fRunNb;       // run number (no idea from where to get it - put 0)
+    UInt_t           fId[2];       // id field (read from the first CDH found, period is not filled)
+    UInt_t           fTriggerPattern[2]; // the trigger class pattern (read from the first CDH found)
+    UInt_t           fDetectorPattern;   // the detector pattern (no idea from where to read it)
+    UInt_t           fTimestamp;   // event timestamp (read from the DDL file creation time)
+
   private :
     AliRawReaderFile(const AliRawReaderFile& rawReader);
     AliRawReaderFile& operator = (const AliRawReaderFile& rawReader);