ROOT logo
#ifndef ALIRAWEVENTHEADERBASE_H
#define ALIRAWEVENTHEADERBASE_H

// Author: Cvetan Cheshkov  10/10/2005

/* Copyright(c) 1998-2005, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// AliRawEventHeaderBase                                                //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include <TObject.h>

class AliRawEventHeaderBase : public TObject {

public:
   AliRawEventHeaderBase();
   virtual ~AliRawEventHeaderBase() { if (fExtendedData) delete [] fExtendedData; }

   void         *HeaderBaseBegin() const { return (void *) &fSize; }
   Int_t         HeaderBaseSize() const { return (Long_t) &fVersion - (Long_t) &fSize + sizeof(fVersion); }
   void         *HeaderBegin() const;
   Int_t         HeaderSize() const;
   Bool_t        DataIsSwapped() const { return fIsSwapped; }
   Bool_t        IsSwapped() const { return (fMagic == fgkEventMagicNumberSwapped) ? kTRUE : kFALSE; }
   Bool_t        IsValid() const { return IsSwapped() ? kTRUE : ((fMagic == fgkEventMagicNumber) ? kTRUE : kFALSE); }
   void          Swap();
   UInt_t        SwapWord(UInt_t x) const;
   void          SwapData(const void* data, const void* buf, UInt_t size);

   UInt_t        GetEventSize() const { return fSize; }
   UInt_t        GetMagic() const { return fMagic; }
   UInt_t        GetHeadSize() const { return fHeadSize; }
   UInt_t        GetVersion() const { return fVersion; }
   UInt_t        GetMajorVersion() const { return ((fVersion>>16)&0x0000ffff); }
   UInt_t        GetMinorVersion() const { return (fVersion&0x0000ffff); }

   UInt_t        GetExtendedDataSize() const { return fExtendedDataSize; }
   char*         GetExtendedData() const { return fExtendedData; }

   const char *  GetTypeName() const;
   static const char *  GetTypeName(UInt_t eventType);
   static AliRawEventHeaderBase* Create(char*& data);
   void          AllocateExtendedData(Int_t extsize);
   Int_t         ReadHeader(char*& data);
   Int_t         ReadExtendedData(char*& data);
   UInt_t        Get(const char *datamember) const;
   const UInt_t* GetP(const char *datamember) const;

   void          Print( const Option_t* opt ="" ) const;

   Int_t         GetFirstEqIndex() const { return fFirstEqIndex; }
   Int_t         GetLastEqIndex() const { return fLastEqIndex; }
   void          AddEqIndex(Int_t index);
   void          Reset();

   // The following enumeration can be used once the kEventTypeMask has been
   // applied to the raw event type
   enum EAliRawEventType {
     kStartOfRun =       1,    // START_OF_RUN
     kEndOfRun =         2,    // END_OF_RUN
     kStartOfRunFiles =  3,    // START_OF_RUN_FILES
     kEndOfRunFiles =    4,    // END_OF_RUN_FILES
     kStartOfBurst =     5,    // START_OF_BURST
     kEndOfBurst =       6,    // END_OF_BURST
     kPhysicsEvent =     7,    // PHYSICS_EVENT
     kCalibrationEvent = 8,    // CALIBRATION_EVENT
     kFormatError =      9,    // EVENT_FORMAT_ERROR
     kStartOfData =      10,   // START_OF_DATA
     kEndOfData =        11,   // END_OF_DATA
     kSystemSoftwareTriggerEvent   = 12, // SYSTEM_SOFTWARE_TRIGGER_EVENT
     kDetectorSoftwareTriggerEvent = 13, // DETECTOR_SOFTWARE_TRIGGER_EVENT
     kSyncEvent = 14  // SYNC_EVENT
   };

private:
   AliRawEventHeaderBase(const AliRawEventHeaderBase&);
   AliRawEventHeaderBase& operator=(const AliRawEventHeaderBase&);

   UInt_t fSize;          // size of event in bytes
   UInt_t fMagic;         // magic number used for consistency check
   UInt_t fHeadSize;      // size of header in bytes
   UInt_t fVersion;       // unique version identifier

   UInt_t fExtendedDataSize; // size of header extension data
   UInt_t fExtendedAllocSize;//! size of allocated memory for header extension data
   char  *fExtendedData;  //[fExtendedDataSize] pointer to header extension data 

   Bool_t fIsSwapped;     // is data swapped
   Int_t  fHeaderSize;    //! cache for the header size estimate
   void  *fHeaderBegin;   //! cache for the header begin pointer

   Int_t  fFirstEqIndex;  // index of the first equipment
   Int_t  fLastEqIndex;   // index of the last equipment

   static const UInt_t fgkEventMagicNumber        = 0xDA1E5AFE; // magic word
   static const UInt_t fgkEventMagicNumberSwapped = 0xFE5A1EDA; // swapped magic word

   ClassDef(AliRawEventHeaderBase,4)  // Alice raw event header base class
};

#define EVENT_HEADER_VERSION(AA,BB) AliRawEventHeaderV##AA##_##BB
#define INIT_HEADER_VARS

#define START_EVENT_HEADER(AA,BB) \
class AliRawEventHeaderV##AA##_##BB:public AliRawEventHeaderBase { \
public: \
 AliRawEventHeaderV##AA##_##BB():AliRawEventHeaderBase(),		\
   INIT_HEADER_VARS {};	\
   virtual ~AliRawEventHeaderV##AA##_##BB() {}; \
private:

#define END_EVENT_HEADER(AA,BB) \
ClassDef(AliRawEventHeaderV##AA##_##BB,1) \
};

#endif
 AliRawEventHeaderBase.h:1
 AliRawEventHeaderBase.h:2
 AliRawEventHeaderBase.h:3
 AliRawEventHeaderBase.h:4
 AliRawEventHeaderBase.h:5
 AliRawEventHeaderBase.h:6
 AliRawEventHeaderBase.h:7
 AliRawEventHeaderBase.h:8
 AliRawEventHeaderBase.h:9
 AliRawEventHeaderBase.h:10
 AliRawEventHeaderBase.h:11
 AliRawEventHeaderBase.h:12
 AliRawEventHeaderBase.h:13
 AliRawEventHeaderBase.h:14
 AliRawEventHeaderBase.h:15
 AliRawEventHeaderBase.h:16
 AliRawEventHeaderBase.h:17
 AliRawEventHeaderBase.h:18
 AliRawEventHeaderBase.h:19
 AliRawEventHeaderBase.h:20
 AliRawEventHeaderBase.h:21
 AliRawEventHeaderBase.h:22
 AliRawEventHeaderBase.h:23
 AliRawEventHeaderBase.h:24
 AliRawEventHeaderBase.h:25
 AliRawEventHeaderBase.h:26
 AliRawEventHeaderBase.h:27
 AliRawEventHeaderBase.h:28
 AliRawEventHeaderBase.h:29
 AliRawEventHeaderBase.h:30
 AliRawEventHeaderBase.h:31
 AliRawEventHeaderBase.h:32
 AliRawEventHeaderBase.h:33
 AliRawEventHeaderBase.h:34
 AliRawEventHeaderBase.h:35
 AliRawEventHeaderBase.h:36
 AliRawEventHeaderBase.h:37
 AliRawEventHeaderBase.h:38
 AliRawEventHeaderBase.h:39
 AliRawEventHeaderBase.h:40
 AliRawEventHeaderBase.h:41
 AliRawEventHeaderBase.h:42
 AliRawEventHeaderBase.h:43
 AliRawEventHeaderBase.h:44
 AliRawEventHeaderBase.h:45
 AliRawEventHeaderBase.h:46
 AliRawEventHeaderBase.h:47
 AliRawEventHeaderBase.h:48
 AliRawEventHeaderBase.h:49
 AliRawEventHeaderBase.h:50
 AliRawEventHeaderBase.h:51
 AliRawEventHeaderBase.h:52
 AliRawEventHeaderBase.h:53
 AliRawEventHeaderBase.h:54
 AliRawEventHeaderBase.h:55
 AliRawEventHeaderBase.h:56
 AliRawEventHeaderBase.h:57
 AliRawEventHeaderBase.h:58
 AliRawEventHeaderBase.h:59
 AliRawEventHeaderBase.h:60
 AliRawEventHeaderBase.h:61
 AliRawEventHeaderBase.h:62
 AliRawEventHeaderBase.h:63
 AliRawEventHeaderBase.h:64
 AliRawEventHeaderBase.h:65
 AliRawEventHeaderBase.h:66
 AliRawEventHeaderBase.h:67
 AliRawEventHeaderBase.h:68
 AliRawEventHeaderBase.h:69
 AliRawEventHeaderBase.h:70
 AliRawEventHeaderBase.h:71
 AliRawEventHeaderBase.h:72
 AliRawEventHeaderBase.h:73
 AliRawEventHeaderBase.h:74
 AliRawEventHeaderBase.h:75
 AliRawEventHeaderBase.h:76
 AliRawEventHeaderBase.h:77
 AliRawEventHeaderBase.h:78
 AliRawEventHeaderBase.h:79
 AliRawEventHeaderBase.h:80
 AliRawEventHeaderBase.h:81
 AliRawEventHeaderBase.h:82
 AliRawEventHeaderBase.h:83
 AliRawEventHeaderBase.h:84
 AliRawEventHeaderBase.h:85
 AliRawEventHeaderBase.h:86
 AliRawEventHeaderBase.h:87
 AliRawEventHeaderBase.h:88
 AliRawEventHeaderBase.h:89
 AliRawEventHeaderBase.h:90
 AliRawEventHeaderBase.h:91
 AliRawEventHeaderBase.h:92
 AliRawEventHeaderBase.h:93
 AliRawEventHeaderBase.h:94
 AliRawEventHeaderBase.h:95
 AliRawEventHeaderBase.h:96
 AliRawEventHeaderBase.h:97
 AliRawEventHeaderBase.h:98
 AliRawEventHeaderBase.h:99
 AliRawEventHeaderBase.h:100
 AliRawEventHeaderBase.h:101
 AliRawEventHeaderBase.h:102
 AliRawEventHeaderBase.h:103
 AliRawEventHeaderBase.h:104
 AliRawEventHeaderBase.h:105
 AliRawEventHeaderBase.h:106
 AliRawEventHeaderBase.h:107
 AliRawEventHeaderBase.h:108
 AliRawEventHeaderBase.h:109
 AliRawEventHeaderBase.h:110
 AliRawEventHeaderBase.h:111
 AliRawEventHeaderBase.h:112
 AliRawEventHeaderBase.h:113
 AliRawEventHeaderBase.h:114
 AliRawEventHeaderBase.h:115
 AliRawEventHeaderBase.h:116
 AliRawEventHeaderBase.h:117
 AliRawEventHeaderBase.h:118
 AliRawEventHeaderBase.h:119
 AliRawEventHeaderBase.h:120