Bug fix: AliHLTComponent::ConfigureFromArgumentString
[u/mrichter/AliRoot.git] / RAW / AliRawEventHeaderBase.h
1 #ifndef ALIRAWEVENTHEADERBASE_H
2 #define ALIRAWEVENTHEADERBASE_H
3
4 // Author: Cvetan Cheshkov  10/10/2005
5
6 /* Copyright(c) 1998-2005, ALICE Experiment at CERN, All rights reserved. *
7  * See cxx source for full Copyright notice                               */
8
9 //////////////////////////////////////////////////////////////////////////
10 //                                                                      //
11 // AliRawEventHeaderBase                                                //
12 //                                                                      //
13 //////////////////////////////////////////////////////////////////////////
14
15 #include <TObject.h>
16
17 class AliRawEventHeaderBase : public TObject {
18
19 public:
20    AliRawEventHeaderBase();
21    virtual ~AliRawEventHeaderBase() { if (fExtendedData) delete [] fExtendedData; }
22
23    void         *HeaderBaseBegin() const { return (void *) &fSize; }
24    Int_t         HeaderBaseSize() const { return (Long_t) &fVersion - (Long_t) &fSize + sizeof(fVersion); }
25    void         *HeaderBegin() const;
26    Int_t         HeaderSize() const;
27    Bool_t        DataIsSwapped() const { return fIsSwapped; }
28    Bool_t        IsSwapped() const { return (fMagic == fgkEventMagicNumberSwapped) ? kTRUE : kFALSE; }
29    Bool_t        IsValid() const { return IsSwapped() ? kTRUE : ((fMagic == fgkEventMagicNumber) ? kTRUE : kFALSE); }
30    void          Swap();
31    UInt_t        SwapWord(UInt_t x) const;
32    void          SwapData(const void* data, const void* buf, UInt_t size);
33
34    UInt_t        GetEventSize() const { return fSize; }
35    UInt_t        GetMagic() const { return fMagic; }
36    UInt_t        GetHeadSize() const { return fHeadSize; }
37    UInt_t        GetVersion() const { return fVersion; }
38    UInt_t        GetMajorVersion() const { return ((fVersion>>16)&0x0000ffff); }
39    UInt_t        GetMinorVersion() const { return (fVersion&0x0000ffff); }
40
41    UInt_t        GetExtendedDataSize() const { return fExtendedDataSize; }
42    char*         GetExtendedData() const { return fExtendedData; }
43
44    const char *  GetTypeName() const;
45    static const char *  GetTypeName(UInt_t eventType);
46    static AliRawEventHeaderBase* Create(char*& data);
47    void          AllocateExtendedData(Int_t extsize);
48    Int_t         ReadHeader(char*& data);
49    Int_t         ReadExtendedData(char*& data);
50    UInt_t        Get(const char *datamember) const;
51    const UInt_t* GetP(const char *datamember) const;
52
53    void          Print( const Option_t* opt ="" ) const;
54
55    Int_t         GetFirstEqIndex() const { return fFirstEqIndex; }
56    Int_t         GetLastEqIndex() const { return fLastEqIndex; }
57    void          AddEqIndex(Int_t index);
58    void          Reset();
59
60    // The following enumeration can be used once the kEventTypeMask has been
61    // applied to the raw event type
62    enum EAliRawEventType {
63      kStartOfRun =       1,    // START_OF_RUN
64      kEndOfRun =         2,    // END_OF_RUN
65      kStartOfRunFiles =  3,    // START_OF_RUN_FILES
66      kEndOfRunFiles =    4,    // END_OF_RUN_FILES
67      kStartOfBurst =     5,    // START_OF_BURST
68      kEndOfBurst =       6,    // END_OF_BURST
69      kPhysicsEvent =     7,    // PHYSICS_EVENT
70      kCalibrationEvent = 8,    // CALIBRATION_EVENT
71      kFormatError =      9,    // EVENT_FORMAT_ERROR
72      kStartOfData =      10,   // START_OF_DATA
73      kEndOfData =        11,   // END_OF_DATA
74      kSystemSoftwareTriggerEvent   = 12, // SYSTEM_SOFTWARE_TRIGGER_EVENT
75      kDetectorSoftwareTriggerEvent = 13, // DETECTOR_SOFTWARE_TRIGGER_EVENT
76      kSyncEvent = 14  // SYNC_EVENT
77    };
78
79 private:
80    AliRawEventHeaderBase(const AliRawEventHeaderBase&);
81    AliRawEventHeaderBase& operator=(const AliRawEventHeaderBase&);
82
83    UInt_t fSize;          // size of event in bytes
84    UInt_t fMagic;         // magic number used for consistency check
85    UInt_t fHeadSize;      // size of header in bytes
86    UInt_t fVersion;       // unique version identifier
87
88    UInt_t fExtendedDataSize; // size of header extension data
89    UInt_t fExtendedAllocSize;//! size of allocated memory for header extension data
90    char  *fExtendedData;  //[fExtendedDataSize] pointer to header extension data 
91
92    Bool_t fIsSwapped;     // is data swapped
93    Int_t  fHeaderSize;    //! cache for the header size estimate
94    void  *fHeaderBegin;   //! cache for the header begin pointer
95
96    Int_t  fFirstEqIndex;  // index of the first equipment
97    Int_t  fLastEqIndex;   // index of the last equipment
98
99    static const UInt_t fgkEventMagicNumber        = 0xDA1E5AFE; // magic word
100    static const UInt_t fgkEventMagicNumberSwapped = 0xFE5A1EDA; // swapped magic word
101
102    ClassDef(AliRawEventHeaderBase,4)  // Alice raw event header base class
103 };
104
105 #define EVENT_HEADER_VERSION(AA,BB) AliRawEventHeaderV##AA##_##BB
106 #define INIT_HEADER_VARS
107
108 #define START_EVENT_HEADER(AA,BB) \
109 class AliRawEventHeaderV##AA##_##BB:public AliRawEventHeaderBase { \
110 public: \
111  AliRawEventHeaderV##AA##_##BB():AliRawEventHeaderBase(),               \
112    INIT_HEADER_VARS {}; \
113    virtual ~AliRawEventHeaderV##AA##_##BB() {}; \
114 private:
115
116 #define END_EVENT_HEADER(AA,BB) \
117 ClassDef(AliRawEventHeaderV##AA##_##BB,1) \
118 };
119
120 #endif