1 /****************************************************************************
3 * event.h: DATE event data format
6 * V01.00 RD PVV 09-Jan-97 Initial version
7 * V01.01 AV 24-Feb-97 Added START_OF_RUN_FILES and triggerNb
8 * V02.02 RD 13-Mar-97 Detector ID mask type added
9 * V02.03 PVV 20-Mar-97 Detector ID on 128 bits
10 * V02.03 RD PVV 20-Mar-97 Added EVENT_DATA_TRUNCATED
11 * V02.04 PVV 06-May-97 Added EVENT_TYPE_MASK
12 * V02.05 RD PVV 09-May-97 Increase EVENT_DATA_MAX_SIZE to 50 K
13 * V02.06 WB MG 22-May-97 Added END_OF_RUN_FILES
14 * V02.07 WB 23-May-97 Added errorCode, deadTime, deadTimeusec
15 * EVENT_DATA_MAX_SIZE set to 100 * 1024
16 * MAX_DETECTORS set to 126
17 * V02.08 PVV 02-Jun-97 Modify the encoding of types
18 * V02.09 WB RD PVV 28-Jul-98 Add fileSeqNb in the header.
19 * Reduce detector mask to 3 long
20 * V02.10 RD 31-Jul-98 (start|end)OfRunFiles added to eventType
21 * V02.11 PVV RD 02-Sep-98 Event type re-numbered
22 * Equipment bit added to event type
23 * V02.12 AV PVV RD 03-Sep-98 FileSeqNo moved before detectorId
24 * V02.13 RD 08-Oct-98 32 bits fields defined as long32
25 * V02.13 RD 19-Feb-99 Endianness/swap definitions added
26 * V02.14 WB PVV RD 21-Jun-99 typeAttribute added
27 * V02.15 RD 27-Jul-99 Macros for typeAttribute handling added
28 * V02.16 RD 19-Nov-99 Bug in Attributes test/set fixed
29 * V02.17 WB PVV RD 08-May-00 System attributes for SOR and EOR added
30 * V02.18 RD 18-May-00 EVENT_H_ID added
32 ***************************************************************************/
33 /* modified for root convention */
39 /* Unique version identifier */
40 #define EVENT_H_ID 0x00020018
42 /* Possible Values for type in eventHeaderStruct */
44 /* Mask to separate the event type from the event flags */
45 #define EVENT_TYPE_MASK ((UInt_t)0x0000FFFF)
46 #define EVENT_FLAGS_MASK ((UInt_t)~EVENT_TYPE_MASK)
48 /* Event error flags: */
49 #define EVENT_ERROR ((UInt_t)0x80000000)
50 #define EVENT_DATA_TRUNCATED ((UInt_t)0x40000000)
53 #define EVENT_EQUIPMENT ((UInt_t)0x00010000)
54 #define EVENT_SWAPPED ((UInt_t)0x00020000)
57 #define START_OF_RUN ((UInt_t)1)
58 #define END_OF_RUN ((UInt_t)2)
59 #define START_OF_RUN_FILES ((UInt_t)3)
60 #define END_OF_RUN_FILES ((UInt_t)4)
61 #define START_OF_BURST ((UInt_t)5)
62 #define END_OF_BURST ((UInt_t)6)
63 #define PHYSICS_EVENT ((UInt_t)7)
64 #define CALIBRATION_EVENT ((UInt_t)8)
65 #define END_OF_LINK ((UInt_t)9)
66 #define EVENT_FORMAT_ERROR ((UInt_t)10)
68 #define EVENT_TYPE_MIN 1
69 #define EVENT_TYPE_MAX 10
71 /* System attributes */
72 #define START_OF_RUN_START 0
73 #define START_OF_RUN_END 1
74 #define END_OF_RUN_START 0
75 #define END_OF_RUN_END 1
76 #define NO_EVENT_BUILDING 2
78 /* The following enumeration can be used once the EVENT_TYPE_MASK has been
79 * applied to the raw event type */
81 startOfRun = START_OF_RUN,
82 endOfRun = END_OF_RUN,
83 startOfRunFiles = START_OF_RUN_FILES,
84 endOfRunFiles = END_OF_RUN_FILES,
85 startOfBurst = START_OF_BURST,
86 endOfBurst = END_OF_BURST,
87 physicsEvent = PHYSICS_EVENT,
88 calibrationEvent = CALIBRATION_EVENT,
89 endOfLink = END_OF_LINK,
90 formatError = EVENT_FORMAT_ERROR
93 #define EVENT_MAGIC_NUMBER ((UInt_t)0xDA1E5AFE)
94 #define EVENT_MAGIC_NUMBER_SWAPPED ((UInt_t)0xFE5A1EDA)
96 #define HEADER_LENGTH sizeof( struct eventHeaderStruct )
98 /* Maximum size for any event (excluding the header) */
99 #define EVENT_DATA_MAX_SIZE ( 100 * 1024 )
101 /* Maximum size for any event (including the header) */
102 #define EVENT_MAX_SIZE ( HEADER_LENGTH + EVENT_DATA_MAX_SIZE )
104 /* The detectorId mask */
105 typedef UInt_t detectorIdType;
106 #define MAX_DETECTOR ((int)94)
107 #define SUPER_EVENT_MASK ((int)(1 << 31))
108 #define SUPER_EVENT_BIT ((int)(MAX_DETECTOR+1))
109 #define MASK_LENGTH ((int)(MAX_DETECTOR/32)+1)
111 /* The typeAttribute mask */
112 #define ATTRIBUTE_WORDS 2
113 #define ATTRIBUTE_BYTES ( ATTRIBUTE_WORDS * 4 )
114 #define ATTRIBUTE_BITS ( ATTRIBUTE_BYTES * 8 )
115 #define ATTRIBUTE_TO_NUM( bit ) (((bit)&0x20)>>5)
116 #define ATTRIBUTE_TO_BIT( bit ) (1<<((bit)&0x1f))
117 #define SET_ATTRIBUTE( mask, bit ) \
118 (mask)[ ATTRIBUTE_TO_NUM(bit) ] |= ATTRIBUTE_TO_BIT( bit )
119 #define CLEAR_ATTRIBUTE( mask, bit ) \
120 (mask)[ ATTRIBUTE_TO_NUM(bit) ] &= ~(ATTRIBUTE_TO_BIT( bit ))
121 #define TEST_ATTRIBUTE( mask, bit ) \
122 (((mask)[ ATTRIBUTE_TO_NUM(bit) ] & ATTRIBUTE_TO_BIT( bit )) != 0 )
124 struct eventHeaderStruct {
125 Int_t eventSize; /* size of event in Bytes */
126 UInt_t eventMagic; /* magic number used for consistency check */
127 UInt_t eventType; /* event type */
128 UInt_t eventHeadSize; /* size of header in bytes */
129 UInt_t eventRunNb; /* run number */
130 UInt_t burstNb; /* burst number */
131 UInt_t nbInRun; /* event number in run */
132 UInt_t nbInBurst; /* event number in burst */
133 UInt_t triggerNb; /* trigger number for this detector */
134 UInt_t fileSeqNb; /* file sequence number for multifiles run */
135 detectorIdType detectorId[MASK_LENGTH]; /* detector identification */
136 UInt_t time; /* time in seconds since 0.00 GMT 1.1.1970 */
137 UInt_t usec; /* microseconds */
141 UInt_t eventTypeAttribute[ATTRIBUTE_WORDS]; /* event type id mask */
145 struct eventHeaderStruct eventHeader;
146 unsigned short rawData[1];