Line data Source code
1 : #ifndef ALIRAWDATAHEADER_H
2 : #define ALIRAWDATAHEADER_H
3 : /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 : * See cxx source for full Copyright notice */
5 :
6 : struct AliRawDataHeader {
7 : AliRawDataHeader() :
8 10 : fSize(0xFFFFFFFF),
9 5 : fWord2(2<<24),
10 5 : fEventID2(0),
11 5 : fAttributesSubDetectors(0),
12 5 : fStatusMiniEventID(0x10000), // status bit 4: no L1/L2 trigger information
13 5 : fTriggerClassLow(0),
14 5 : fROILowTriggerClassHigh(0),
15 5 : fROIHigh(0)
16 15 : {}
17 :
18 : // Adding virtual destructor breaks
19 : // C++ struct backward compatibility
20 : // Do not uncomment the line below!!!
21 : // virtual ~AliRawDataHeader() {}
22 :
23 : UShort_t GetEventID1() const
24 : {
25 0 : return (UShort_t)( fWord2 & 0xFFF );
26 : };
27 :
28 : UInt_t GetEventID2() const
29 : {
30 0 : return fEventID2;
31 : };
32 :
33 : UChar_t GetL1TriggerMessage() const
34 : {
35 0 : return (UChar_t)( (fWord2 >> 14) & 0xFF );
36 : };
37 :
38 : UChar_t GetVersion() const
39 : {
40 3882 : return (UChar_t)( (fWord2 >> 24) & 0xFF );
41 : };
42 :
43 : UChar_t GetAttributes() const
44 0 : {return (fAttributesSubDetectors >> 24) & 0xFF;};
45 : Bool_t TestAttribute(Int_t index) const
46 0 : {return (fAttributesSubDetectors >> (24 + index)) & 1;};
47 : void SetAttribute(Int_t index)
48 : {fAttributesSubDetectors |= (1 << (24 + index));};
49 : void ResetAttribute(Int_t index)
50 : {fAttributesSubDetectors &= (0xFFFFFFFF ^ (1 << (24 + index)));};
51 : UInt_t GetSubDetectors() const
52 : {return fAttributesSubDetectors & 0xFFFFFF;};
53 :
54 : UInt_t GetStatus() const
55 0 : {return (fStatusMiniEventID >> 12) & 0xFFFF;};
56 : UInt_t GetMiniEventID() const
57 0 : {return fStatusMiniEventID & 0xFFF;};
58 :
59 : ULong64_t GetTriggerClasses() const
60 0 : {return (((ULong64_t) (fROILowTriggerClassHigh & 0x3FFFF)) << 32) | fTriggerClassLow;}
61 : ULong64_t GetTriggerClassesNext50() const
62 0 : {return 0;}
63 : ULong64_t GetROI() const
64 : {return (((ULong64_t) fROIHigh) << 4) | ((fROILowTriggerClassHigh >> 28) & 0xF);}
65 :
66 : void SetTriggerClass(ULong64_t mask)
67 : {fTriggerClassLow = (UInt_t)(mask & 0xFFFFFFFF); // low bits of trigger class
68 : fROILowTriggerClassHigh = (UInt_t)((mask >> 32) & 0x3FFFF); // low bits of ROI data (bits 28-31) and high bits of trigger class (bits 0-17)
69 : };
70 :
71 : UInt_t fSize; // size of the raw data in bytes
72 : UInt_t fWord2; // bunch crossing, L1 trigger message and fomrat version
73 : UInt_t fEventID2; // orbit number
74 : UInt_t fAttributesSubDetectors; // block attributes (bits 24-31) and participating sub detectors
75 : UInt_t fStatusMiniEventID; // status & error bits (bits 12-27) and mini event ID (bits 0-11)
76 : UInt_t fTriggerClassLow; // low bits of trigger class
77 : UInt_t fROILowTriggerClassHigh; // low bits of ROI data (bits 28-31) and high bits of trigger class (bits 0-17)
78 : UInt_t fROIHigh; // high bits of ROI data
79 : };
80 :
81 : #endif
|