]>
Commit | Line | Data |
---|---|---|
f2dc6b20 | 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 | ||
7da191b6 | 15 | #include <TObject.h> |
f2dc6b20 | 16 | |
17 | class AliRawEventHeaderBase : public TObject { | |
18 | ||
19 | public: | |
f3c1e83c | 20 | AliRawEventHeaderBase(); |
f2dc6b20 | 21 | virtual ~AliRawEventHeaderBase() { if (fExtendedData) delete [] fExtendedData; } |
22 | ||
33314186 | 23 | void *HeaderBaseBegin() const { return (void *) &fSize; } |
f2dc6b20 | 24 | Int_t HeaderBaseSize() const { return (Long_t) &fVersion - (Long_t) &fSize + sizeof(fVersion); } |
33314186 | 25 | void *HeaderBegin() const; |
f2dc6b20 | 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(); | |
e653e3e1 | 31 | UInt_t SwapWord(UInt_t x) const; |
32 | void SwapData(const void* data, const void* buf, UInt_t size); | |
f2dc6b20 | 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; } | |
f2dc6b20 | 43 | |
12e921cc | 44 | const char * GetTypeName() const; |
ec835ab5 | 45 | static const char * GetTypeName(UInt_t eventType); |
f2dc6b20 | 46 | static AliRawEventHeaderBase* Create(char*& data); |
33778962 | 47 | void AllocateExtendedData(Int_t extsize); |
f2dc6b20 | 48 | Int_t ReadHeader(char*& data); |
33778962 | 49 | Int_t ReadExtendedData(char*& data); |
11d31ad9 | 50 | UInt_t Get(const char *datamember) const; |
51 | const UInt_t* GetP(const char *datamember) const; | |
f2dc6b20 | 52 | |
12e921cc | 53 | void Print( const Option_t* opt ="" ) const; |
54 | ||
33314186 | 55 | Int_t GetFirstEqIndex() const { return fFirstEqIndex; } |
56 | Int_t GetLastEqIndex() const { return fLastEqIndex; } | |
57 | void AddEqIndex(Int_t index); | |
58 | void Reset(); | |
59 | ||
f2dc6b20 | 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 | |
9c8e7883 | 71 | kFormatError = 9, // EVENT_FORMAT_ERROR |
cce65444 | 72 | kStartOfData = 10, // START_OF_DATA |
9c8e7883 | 73 | kEndOfData = 11, // END_OF_DATA |
74 | kSystemSoftwareTriggerEvent = 12, // SYSTEM_SOFTWARE_TRIGGER_EVENT | |
1a0cb373 | 75 | kDetectorSoftwareTriggerEvent = 13, // DETECTOR_SOFTWARE_TRIGGER_EVENT |
76 | kSyncEvent = 14 // SYNC_EVENT | |
f2dc6b20 | 77 | }; |
78 | ||
79 | private: | |
f3c1e83c | 80 | AliRawEventHeaderBase(const AliRawEventHeaderBase&); |
81 | AliRawEventHeaderBase& operator=(const AliRawEventHeaderBase&); | |
82 | ||
f2dc6b20 | 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 | |
33778962 | 89 | UInt_t fExtendedAllocSize;//! size of allocated memory for header extension data |
f2dc6b20 | 90 | char *fExtendedData; //[fExtendedDataSize] pointer to header extension data |
91 | ||
92 | Bool_t fIsSwapped; // is data swapped | |
936875a4 | 93 | Int_t fHeaderSize; //! cache for the header size estimate |
33314186 | 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 | |
f2dc6b20 | 98 | |
99 | static const UInt_t fgkEventMagicNumber = 0xDA1E5AFE; // magic word | |
100 | static const UInt_t fgkEventMagicNumberSwapped = 0xFE5A1EDA; // swapped magic word | |
101 | ||
33314186 | 102 | ClassDef(AliRawEventHeaderBase,4) // Alice raw event header base class |
f2dc6b20 | 103 | }; |
104 | ||
3a27fc42 | 105 | #define EVENT_HEADER_VERSION(AA,BB) AliRawEventHeaderV##AA##_##BB |
e258f0d3 | 106 | #define INIT_HEADER_VARS |
3a27fc42 | 107 | |
f2dc6b20 | 108 | #define START_EVENT_HEADER(AA,BB) \ |
3a27fc42 | 109 | class AliRawEventHeaderV##AA##_##BB:public AliRawEventHeaderBase { \ |
f2dc6b20 | 110 | public: \ |
d21b17d7 | 111 | AliRawEventHeaderV##AA##_##BB():AliRawEventHeaderBase(), \ |
e258f0d3 | 112 | INIT_HEADER_VARS {}; \ |
3a27fc42 | 113 | virtual ~AliRawEventHeaderV##AA##_##BB() {}; \ |
f2dc6b20 | 114 | private: |
115 | ||
116 | #define END_EVENT_HEADER(AA,BB) \ | |
3a27fc42 | 117 | ClassDef(AliRawEventHeaderV##AA##_##BB,1) \ |
42905d16 | 118 | }; |
f2dc6b20 | 119 | |
120 | #endif |