]> git.uio.no Git - u/mrichter/AliRoot.git/blame - RAW/dateStream/event.h
Default DATE datatypes
[u/mrichter/AliRoot.git] / RAW / dateStream / event.h
CommitLineData
f3a800f8 1/****************************************************************************
2 *
3 * event.h: DATE event data format
4 *
5 * Revision History:
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
31 * V02.19 RD 10-Aug-00 Macros for detectorId handling added
32 * V03.00 RD 23-Nov-00 Version for DATE V4
33 * V03.01 AV KS 05-Apr-02 Introduction of eventLocationDescriptorStruct
34 * V03.02 KS 10-May-02 Added ATTR_KEEP_PAGES for COLE
35 * RD 30-Apr-04 Added definitions for the Common Data Header
36 * RD 24-Jun-04 Added definitions for HLT DECISION
37 * RD 13-Jul-04 Added macros to OR attributes
38 * V03.03 RD 25-May-05 Added eventTimestamp
39 * V03.04 RD 17-Aug-05 Added VANGUARD and REARGUARD events
40 * V03.05 RD 05-Sep-05 Added SYSTEM and DETECTOR software tri evts
41 * V03.06 RD 14-Sep-05 VANGUARD/REARGUARD changed into START_OF_DATA
42 * and END_OF_DATA
07afbf5b 43 * V03.07 RD 26-Jul-06 Modifications for CDH version 2
44 * KS 20-Dec-06 Corrected CDH layout for MBZ[22-23] and
45 * L1 trigger message [14-21]
46 * V03.08 RD 17-Jan-07 Added "BY DETECTOR" event system attribute
47 * V03.09 RD 08-Feb-07 Moved trigger and detector masks down 1 bit
480f0332 48 * KS 14-May-08 Define trigger error bits 13+14 for the CDH
49 * V03.10 RD 10-Nov-09 Define ATTR_EMPTY_EVENT attribute (removed)
50 * V03.11 RD 01-Dec-10 Timestamp sec + usec
51 * V03.12 RD 13-Sep-11 Added ATTR_ORIGINAL_EVENT and CDH_ORIGINAL_EVENT
52 * V03.13 RD 15-Feb-12 Added SYNC event
53 * RD 15-Jan-14 Added FLUSHED_EVENT and INCOMPLETE_EVENT
54 * V03.14 RD 12-Feb-14 Changes for increased number of trigger classes
55 * (old:50, new:100) and for CDH V3
b2e69add 56 * Added the possibility to compile with extra symbols
f3a800f8 57 *
58 * Preprocessor definitions:
59 * NDEBUG Define BEFORE including this file to disable run-time checks on
480f0332 60 * various parameters made via assert()
f3a800f8 61 *
62 * Related facilities:
63 * validateEvent.c Validation program, should be run after EACH change to
64 * the definitions given here below
65 ***************************************************************************/
66#ifndef __event_h__
67#define __event_h__
68
480f0332 69#define EVENT_MAJOR_VERSION_NUMBER 3
70#define EVENT_MINOR_VERSION_NUMBER 14
f3a800f8 71
72/* ========== System includes ========= */
73#include <string.h> /* Needed by: memset, memcpy */
74#include <assert.h> /* Needed by: assert */
75
b2e69add 76/* ========== Data types ========= */
77/* These data types can be overridden via compile-time symbols */
78#ifndef long32
79# define long32 int
80#endif
81#ifndef long64
82# define long64 long long
83#endif
84#ifndef datePointer
85# define datePointer long
86#endif
87
f3a800f8 88/* ========== Definitions for the event header ========== */
89
480f0332 90/* ------------------------- Header base size ------------------------- */
91/* This value must be updated for each change in the eventHeaderStruct */
92/* This has not been made automatic as we want to keep this value under */
93/* strict control... */
94#define EVENT_HEAD_BASE_SIZE 80
f3a800f8 95
e6069091 96// DATE datatypes
97#ifndef long32
98#define long32 int
99#endif
100
101#ifndef long64
102#define long64 long long
103#endif
104
105#ifndef datePointer
106#define datePointer long
107#endif
108
109
f3a800f8 110/* ---------- Event size ---------- */
111typedef unsigned long32 eventSizeType;
112
480f0332 113/* ----------- Magic signature and its byte-swapped version ----------- */
f3a800f8 114typedef unsigned long32 eventMagicType;
115#define EVENT_MAGIC_NUMBER ((eventMagicType)0xDA1E5AFE)
116#define EVENT_MAGIC_NUMBER_SWAPPED ((eventMagicType)0xFE5A1EDA)
117
118/* ---------- Header size ---------- */
119typedef unsigned long32 eventHeadSizeType;
120
121/* ---------- Unique version identifier ---------- */
122#define EVENT_CURRENT_VERSION \
123 (((EVENT_MAJOR_VERSION_NUMBER<<16)&0xffff0000)|\
124 (EVENT_MINOR_VERSION_NUMBER&0x0000ffff))
125typedef unsigned long32 eventVersionType;
126
127/* ---------- Event type ---------- */
128typedef unsigned long32 eventTypeType;
129#define START_OF_RUN ((eventTypeType) 1)
130#define END_OF_RUN ((eventTypeType) 2)
131#define START_OF_RUN_FILES ((eventTypeType) 3)
132#define END_OF_RUN_FILES ((eventTypeType) 4)
133#define START_OF_BURST ((eventTypeType) 5)
134#define END_OF_BURST ((eventTypeType) 6)
135#define PHYSICS_EVENT ((eventTypeType) 7)
136#define CALIBRATION_EVENT ((eventTypeType) 8)
137#define EVENT_FORMAT_ERROR ((eventTypeType) 9)
138#define START_OF_DATA ((eventTypeType)10)
139#define END_OF_DATA ((eventTypeType)11)
140#define SYSTEM_SOFTWARE_TRIGGER_EVENT ((eventTypeType)12)
141#define DETECTOR_SOFTWARE_TRIGGER_EVENT ((eventTypeType)13)
480f0332 142#define SYNC_EVENT ((eventTypeType)14)
f3a800f8 143#define EVENT_TYPE_MIN 1
480f0332 144#define EVENT_TYPE_MAX 14
f3a800f8 145enum eventTypeEnum {
146 startOfRun = START_OF_RUN,
147 endOfRun = END_OF_RUN,
148 startOfRunFiles = START_OF_RUN_FILES,
149 endOfRunFiles = END_OF_RUN_FILES,
150 startOfBurst = START_OF_BURST,
151 endOfBurst = END_OF_BURST,
152 physicsEvent = PHYSICS_EVENT,
153 calibrationEvent = CALIBRATION_EVENT,
154 formatError = EVENT_FORMAT_ERROR,
155 startOfData = START_OF_DATA,
156 endOfData = END_OF_DATA,
157 systemSoftwareTriggerEvent = SYSTEM_SOFTWARE_TRIGGER_EVENT,
480f0332 158 detectorSoftwareTriggerEvent = DETECTOR_SOFTWARE_TRIGGER_EVENT,
159 syncEvent = SYNC_EVENT
f3a800f8 160};
161#define EVENT_TYPE_OK(t) (((t) >= EVENT_TYPE_MIN) && (((t) <= EVENT_TYPE_MAX)))
162
163/* ---------- Run number ---------- */
164typedef unsigned long32 eventRunNbType;
165
166/* ---------- The eventId field ---------- */
167#define EVENT_ID_BYTES 8
168#define EVENT_ID_WORDS ((EVENT_ID_BYTES) >> 2)
169typedef unsigned long32 eventIdType[EVENT_ID_WORDS];
170
171 /* PERIOD - ORBIT - BUNCH crossing type events */
172#define EVENT_ID_MAX_PERIOD 0x0fffffff
173#define EVENT_ID_MAX_ORBIT 0x00ffffff
174#define EVENT_ID_MAX_BUNCH_CROSSING 0x00000fff
175#define LOAD_EVENT_ID(id,s,o,bc) \
176 (EVENT_ID_SET_PERIOD(id,s), \
177 EVENT_ID_SET_ORBIT(id,o), \
178 EVENT_ID_SET_BUNCH_CROSSING(id,bc))
179#define EVENT_ID_GET_BUNCH_CROSSING(id) ((id)[1]&0x00000fff)
180#define EVENT_ID_GET_ORBIT(id) \
181 ((((id)[0]<<20)&0xf00000)|(((id)[1]>>12)&0xfffff))
182#define EVENT_ID_GET_PERIOD(id) (((id)[0]>>4)&0x0fffffff)
183
184#define EVENT_ID_SET_BUNCH_CROSSING(id,v) \
185 (assert(((v)>=0)&&((v)<=EVENT_ID_MAX_BUNCH_CROSSING)), \
186 (id)[1]=((id)[1]&0xfffff000)|((v)&0xfff))
187#define EVENT_ID_SET_ORBIT(id,v) \
188 (assert(((v)>=0)&&((v)<=EVENT_ID_MAX_ORBIT)), \
189 (id)[0]=(((id)[0])&0xfffffff0)|(((v)&0x00f00000)>>20), \
190 (id)[1]=(((id)[1])&0x00000fff)|(((v)&0x000fffff)<<12))
191#define EVENT_ID_SET_PERIOD(id,v) \
192 (assert(((v)>=0)&&((v)<=EVENT_ID_MAX_PERIOD)), \
193 (id)[0]=(((id)[0])&0x0000000f)|(((v)&0x0fffffff)<<4))
194
195 /* RAW type event */
196#define EVENT_ID_MAX_NB_IN_RUN 0xffffffff
197#define EVENT_ID_MAX_BURST_NB 0x00000fff
198#define EVENT_ID_MAX_NB_IN_BURST 0x000fffff
199#define LOAD_RAW_EVENT_ID(id,nir,bn,nib) \
200 (assert(((bn)>=0) && ((bn)<=EVENT_ID_MAX_BURST_NB) && \
201 ((nib)>=0) && ((nib)<=EVENT_ID_MAX_NB_IN_BURST)), \
202 (id)[0]=nir, \
203 (id)[1]=((bn<<20)&0xfff00000)|(nib&0x000fffff))
204#define EVENT_ID_SET_NB_IN_RUN(id,nir) \
205 (assert(((nir)>=0)&&((nir)<=EVENT_ID_MAX_NB_IN_RUN)), \
206 (id)[0]=(nir))
207#define EVENT_ID_SET_BURST_NB(id,bn) \
208 (assert(((bn)>=0)&&((bn)<=EVENT_ID_MAX_BURST_NB)), \
209 (id)[1]=((id)[1]&0x000fffff)|(((bn)<<20)&0xfff00000))
210#define EVENT_ID_SET_NB_IN_BURST(id,nib) \
211 (assert(((nib)>=0)&&((nib)<=EVENT_ID_MAX_NB_IN_BURST)), \
212 (id)[1]=((id)[1]&0xfff00000)|((nib)&0x000fffff))
213#define EVENT_ID_GET_NB_IN_RUN(id) ((id)[0])
214#define EVENT_ID_GET_BURST_NB(id) (((id)[1]>>20)&0x00000fff)
215#define EVENT_ID_GET_NB_IN_BURST(id) ((id)[1]&0x000fffff)
216
217 /* All events */
218#define EQ_EVENT_ID(a,b) ((((a)[0])==((b)[0]))&&(((a)[1])==((b)[1])))
219#define GT_EVENT_ID(a,b) \
220 (((((a)[0])>((b)[0])))||((((a)[0])==((b)[0]))&&(((a)[1])>((b)[1]))))
221#define LT_EVENT_ID(a,b) \
222 ((((a)[0])<((b)[0])) || ((((a)[0])==((b)[0]))&&(((a)[1])<((b)[1]))))
223#define GE_EVENT_ID(a,b) (!LT_EVENT_ID(a,b))
224#define LE_EVENT_ID(a,b) (!GT_EVENT_ID(a,b))
225#define COPY_EVENT_ID(from,to) \
226 memcpy((void*)to,(const void*)from,EVENT_ID_BYTES)
227#define ADD_EVENT_ID(a,b) ((a)[1]+=(b)[1],(a)[0]+=(b)[0])
228#define SUB_EVENT_ID(a,b) ((a)[1]-=(b)[1],(a)[0]-=(b)[0])
480f0332 229#define ZERO_EVENT_ID(id) memset((void *)(id),0,EVENT_ID_BYTES)
f3a800f8 230
231/* ---------- Trigger pattern (and relative masks) ---------- */
480f0332 232// The top bit of the trigger pattern is reserved for the validity flag
233#define EVENT_TRIGGER_PATTERN_BYTES 16
f3a800f8 234#define EVENT_TRIGGER_PATTERN_WORDS ((EVENT_TRIGGER_PATTERN_BYTES)>>2)
235typedef unsigned long32 eventTriggerPatternType[EVENT_TRIGGER_PATTERN_WORDS];
07afbf5b 236#define EVENT_TRIGGER_ID_MIN 0
480f0332 237#define EVENT_TRIGGER_ID_MAX 99
f3a800f8 238#define CHECK_TRIGGER(t) (assert(((t)>=EVENT_TRIGGER_ID_MIN) && \
239 ((t)<=EVENT_TRIGGER_ID_MAX)))
240#define TRIGGER_TO_BIT(t) (1<<((t)&0x1f))
241#define TRIGGER_TO_WORD(t) (CHECK_TRIGGER(t), (t)>>5)
480f0332 242#define ZERO_TRIGGER_PATTERN(p) memset( (void *)(p), 0, EVENT_TRIGGER_PATTERN_BYTES )
f3a800f8 243#define SET_TRIGGER_IN_PATTERN(p,id) (p)[TRIGGER_TO_WORD(id)] |= \
244 TRIGGER_TO_BIT(id)
245#define CLEAR_TRIGGER_IN_PATTERN(p,id) (p)[TRIGGER_TO_WORD(id)] &= \
246 ~(TRIGGER_TO_BIT(id))
247#define FLIP_TRIGGER_IN_PATTERN(p,id) (p)[TRIGGER_TO_WORD(id)] ^= \
248 TRIGGER_TO_BIT(id)
249#define TEST_TRIGGER_IN_PATTERN(p,id) (((p)[TRIGGER_TO_WORD(id)] & \
250 TRIGGER_TO_BIT(id)) != 0)
480f0332 251#define TRIGGER_PATTERN_INVALID(p) (((p)[EVENT_TRIGGER_PATTERN_WORDS-1] & 0x80000000) == 0)
252#define TRIGGER_PATTERN_VALID(p) (((p)[EVENT_TRIGGER_PATTERN_WORDS-1] & 0x80000000) != 0)
253#define VALIDATE_TRIGGER_PATTERN(p) ((p)[EVENT_TRIGGER_PATTERN_WORDS-1] |= 0x80000000)
254#define INVALIDATE_TRIGGER_PATTERN(p) ((p)[EVENT_TRIGGER_PATTERN_WORDS-1] &= 0x7fffffff)
255#define COPY_TRIGGER_PATTERN(f,t) memcpy( (void *)(t), (void *)(f), EVENT_TRIGGER_PATTERN_BYTES )
256#define TRIGGER_PATTERN_OK(p) (((p)[EVENT_TRIGGER_PATTERN_WORDS-1] & 0x7ffffff0) == 0)
f3a800f8 257
258/* ---------- Detectors cluster (and relative masks) ---------- */
259#define EVENT_DETECTOR_PATTERN_BYTES 4
260#define EVENT_DETECTOR_PATTERN_WORDS (EVENT_DETECTOR_PATTERN_BYTES>>2)
261typedef unsigned long32 eventDetectorPatternType[EVENT_DETECTOR_PATTERN_WORDS];
07afbf5b 262#define EVENT_DETECTOR_ID_MIN 0
07afbf5b 263#define EVENT_DETECTOR_ID_MAX 30
f3a800f8 264#define CHECK_DETECTOR(d) (assert(((d) >= EVENT_DETECTOR_ID_MIN) &&\
265 ((d) <= EVENT_DETECTOR_ID_MAX)))
266#define DETECTOR_TO_BIT(d) (CHECK_DETECTOR(d), 1<<(d))
267#define ZERO_DETECTOR_PATTERN(p) ((p)[0] = 0)
268#define SET_DETECTOR_IN_PATTERN(p,d) ((p)[0] |= DETECTOR_TO_BIT(d))
269#define CLEAR_DETECTOR_IN_PATTERN(p,d) ((p)[0] &= ~(DETECTOR_TO_BIT(d)))
270#define FLIP_DETECTOR_IN_PATTERN(p,d) ((p)[0] ^= DETECTOR_TO_BIT(d))
271#define TEST_DETECTOR_IN_PATTERN(p,d) (((p)[0] & DETECTOR_TO_BIT(d))!=0)
07afbf5b 272#define DETECTOR_PATTERN_INVALID(p) (((p)[0] & 0x80000000) == 0)
273#define DETECTOR_PATTERN_VALID(p) (((p)[0] & 0x80000000) != 0)
274#define VALIDATE_DETECTOR_PATTERN(p) ((p)[0] |= 0x80000000)
275#define INVALIDATE_DETECTOR_PATTERN(p) ((p)[0] &= 0x7fffffff)
f3a800f8 276#define COPY_DETECTOR_PATTERN(f,t) ((t)[0] = (f)[0])
480f0332 277#define DETECTOR_PATTERN_OK(p) (((p)[0] & 0x1f000000) == 0)
278
f3a800f8 279
280/* ---------- The sizes and positions of the typeAttribute field ---------- */
281#define ALL_ATTRIBUTE_WORDS 3
282#define ALL_ATTRIBUTE_BYTES (ALL_ATTRIBUTE_WORDS * 4)
283#define ALL_ATTRIBUTE_BITS (ALL_ATTRIBUTE_BYTES * 8)
284#define USER_ATTRIBUTE_WORDS 2
285#define USER_ATTRIBUTE_BYTES (USER_ATTRIBUTE_WORDS * 4)
286#define USER_ATTRIBUTE_BITS (USER_ATTRIBUTE_BYTES * 8)
287#define FIRST_USER_ATTRIBUTE 0
288#define LAST_USER_ATTRIBUTE (USER_ATTRIBUTE_BITS - 1)
289#define SYSTEM_ATTRIBUTE_WORDS 1
290#define SYSTEM_ATTRIBUTE_BYTES (SYSTEM_ATTRIBUTE_WORDS * 4)
291#define SYSTEM_ATTRIBUTE_BITS (SYSTEM_ATTRIBUTE_BYTES * 8)
292#define FIRST_SYSTEM_ATTRIBUTE USER_ATTRIBUTE_BITS
293#define LAST_SYSTEM_ATTRIBUTE (USER_ATTRIBUTE_BITS + \
294 SYSTEM_ATTRIBUTE_BITS - 1)
295typedef unsigned long32 eventTypeAttributeType[ALL_ATTRIBUTE_WORDS];
296
297 /* Word and bit definitions */
298#define SYS_ATTR_2_W(b) (assert(((b)>=64)&&((b)<=95)),2)
299#define USR_ATTR_2_W(b) (assert(((b)>= 0)&&((b)<=63)),(b)>>5)
300#define ATTR_2_W(b) (assert(((b)>= 0)&&((b)<=95)),(b)>>5)
301#define ATTR_2_B(b) (1<<((b)&0x1f))
302
303 /* Macros to handle all attributes without distinction */
304#define RESET_ATTRIBUTES(m) ((m)[2] = (m)[1] = (m)[0] = 0)
305#define SET_ANY_ATTRIBUTE(m,b) (m)[ATTR_2_W(b)] |= ATTR_2_B(b)
306#define CLEAR_ANY_ATTRIBUTE(m,b) (m)[ATTR_2_W(b)] &= ~(ATTR_2_B(b))
307#define FLIP_ANY_ATTRIBUTE(m,b) (m)[ATTR_2_W(b)] ^= ATTR_2_B(b)
308#define TEST_ANY_ATTRIBUTE(m,b) (((m)[ATTR_2_W(b)] & ATTR_2_B(b))!= 0)
309#define COPY_ALL_ATTRIBUTES( from, to ) \
310 memcpy((void *)&to[0], (const void *)&from[0], ALL_ATTRIBUTE_BYTES)
311#define OR_ALL_ATTRIBUTES( from, to ) \
312 ((to)[2] |= (from)[2], (to)[1] |= (from)[1], (to)[0] |= (from)[0])
313
314 /* Macros to handle SYSTEM attributes */
315#define RESET_SYSTEM_ATTRIBUTES(m) ((m)[2] = 0)
316#define SET_SYSTEM_ATTRIBUTE(m,b) (m)[SYS_ATTR_2_W(b)] |= ATTR_2_B(b)
317#define CLEAR_SYSTEM_ATTRIBUTE(m,b) (m)[SYS_ATTR_2_W(b)] &= ~(ATTR_2_B(b))
318#define FLIP_SYSTEM_ATTRIBUTE(m,b) (m)[SYS_ATTR_2_W(b)] ^= ATTR_2_B(b)
319#define TEST_SYSTEM_ATTRIBUTE(m,b) (((m)[SYS_ATTR_2_W(b)] & ATTR_2_B(b)) != 0)
320#define COPY_SYSTEM_ATTRIBUTES( from, to ) \
321 memcpy((void *)&to[2], (const void *)&from[2], SYSTEM_ATTRIBUTE_BYTES)
322#define OR_SYSTEM_ATTRIBUTES( from, to ) ((to)[2] |= (from)[2])
323
324 /* Macros to handle USER attributes */
325#define RESET_USER_ATTRIBUTES(m) ((m)[0] = (m)[1] = 0)
326#define SET_USER_ATTRIBUTE(m,b) (m)[USR_ATTR_2_W(b)] |= ATTR_2_B(b)
327#define CLEAR_USER_ATTRIBUTE(m,b) (m)[USR_ATTR_2_W(b)] &= ~(ATTR_2_B(b))
328#define FLIP_USER_ATTRIBUTE(m,b) (m)[USR_ATTR_2_W(b)] ^= ATTR_2_B(b)
329#define TEST_USER_ATTRIBUTE(m,b) (((m)[USR_ATTR_2_W(b)] & ATTR_2_B(b)) != 0)
330#define COPY_USER_ATTRIBUTES( from, to ) \
331 memcpy((void *)&to[0], (const void *)&from[0], USER_ATTRIBUTE_BYTES)
332#define OR_USER_ATTRIBUTES( from, to ) \
333 ((to)[1] |= (from)[1], (to)[0] |= (from)[0])
334
335 /* System attributes assignment */
336#define ATTR_P_START 64 /* Start of a phase */
337#define ATTR_P_END 65 /* End of a phase */
338#define ATTR_START_OF_RUN_START ATTR_P_START/* Start of SOR phase */
339#define ATTR_START_OF_RUN_END ATTR_P_END /* End of SOR phase */
340#define ATTR_END_OF_RUN_START ATTR_P_START/* Start of EOR phase */
341#define ATTR_END_OF_RUN_END ATTR_P_END /* End of SOR phase */
342#define ATTR_EVENT_SWAPPED 66 /* Swapped event header */
343#define ATTR_EVENT_PAGED 67 /* Paged event */
344#define ATTR_SUPER_EVENT 68 /* Super event */
345#define ATTR_ORBIT_BC 69 /* Orbit/bunch crossing in ID*/
346#define ATTR_KEEP_PAGES 70 /* Do not deallocate pages */
347#define ATTR_HLT_DECISION 71 /* Event contains HLT decis. */
07afbf5b 348#define ATTR_BY_DETECTOR_EVENT 72 /* Event created by "by det."*/
480f0332 349#define ATTR_ORIGINAL_EVENT 73 /* All original payloads */
f3a800f8 350
480f0332 351#define ATTR_FLUSHED_EVENT 92 /* Flushed event */
352#define ATTR_INCOMPLETE_EVENT 93 /* Incomplete event */
f3a800f8 353#define ATTR_EVENT_DATA_TRUNCATED 94 /* Truncated payload */
354#define ATTR_EVENT_ERROR 95 /* Invalid event content */
355
356#define SYSTEM_ATTRIBUTES_OK(m) \
357 ((((m)[2]) & ~(ATTR_2_B(ATTR_P_START) | \
358 ATTR_2_B(ATTR_P_END) | \
359 ATTR_2_B(ATTR_EVENT_SWAPPED) | \
360 ATTR_2_B(ATTR_EVENT_PAGED) | \
361 ATTR_2_B(ATTR_SUPER_EVENT) | \
362 ATTR_2_B(ATTR_ORBIT_BC) | \
363 ATTR_2_B(ATTR_KEEP_PAGES) | \
364 ATTR_2_B(ATTR_HLT_DECISION) | \
07afbf5b 365 ATTR_2_B(ATTR_BY_DETECTOR_EVENT) | \
480f0332 366 ATTR_2_B(ATTR_ORIGINAL_EVENT) | \
367 ATTR_2_B(ATTR_INCOMPLETE_EVENT) | \
368 ATTR_2_B(ATTR_FLUSHED_EVENT) | \
f3a800f8 369 ATTR_2_B(ATTR_EVENT_DATA_TRUNCATED) | \
370 ATTR_2_B(ATTR_EVENT_ERROR))) == 0)
371
372/* ---------- LDC and GDC identifier ---------- */
373typedef unsigned long32 eventHostIdType;
374typedef eventHostIdType eventLdcIdType;
375typedef eventHostIdType eventGdcIdType;
376#define HOST_ID_MIN ((eventHostIdType)0) /* The minimum allowed ID */
377#define HOST_ID_MAX ((eventHostIdType)511) /* The maximum allowed ID */
378#define VOID_ID ((eventHostIdType)-1) /* Unloaded ID */
379
480f0332 380/* ---------- Timestamps ----------
381
382 The timestamp of the event is associated to:
383
384 - Trigger arrived on the LDC
385 - First sub-event arrived on the GDC
386 - Event ready when monitoring by detector
387
388 The timestamp is split into seconds and microseconds.
389
390 Please note that the typical accuracy of the Unix clock is on
391 the order of the millisecond.
392
393 For more details on the subject, see the man page for gettimeofday
394 and the description of the Unix standard type struct timeval
395*/
396
397/* ---------- Seconds timestamp ----------
398
399 The following definition is in common for 32 and 64 bit machines.
f3a800f8 400 In both architectures, the field must be loaded into a time_t
401 variable before being used. Failure to do so may cause undefined
402 results up to the early termination of the process.
403
404 The recommended procedure to use this field is the following:
405
406 #include <time.h>
407
408 time_t t;
409
480f0332 410 t = eventHeaderStruct.eventTimestampSec;
f3a800f8 411 cTime( &t ); (or whatever else can be done with a time_t)
412
413 Please note that the available timestamp will wrap sometime
414 around Jan 18, 19:14:07, 2038...
415*/
480f0332 416typedef unsigned long32 eventTimestampSecType;
417
418/* Microseconds: range [0..999999]
419 */
420typedef unsigned long32 eventTimestampUsecType;
f3a800f8 421
422/* ---------- The event header structure (with + without data) ---------- */
423struct eventHeaderStruct {
424 eventSizeType eventSize;
425 eventMagicType eventMagic;
426 eventHeadSizeType eventHeadSize;
427 eventVersionType eventVersion;
428 eventTypeType eventType;
429 eventRunNbType eventRunNb;
430 eventIdType eventId;
431 eventTriggerPatternType eventTriggerPattern;
432 eventDetectorPatternType eventDetectorPattern;
433 eventTypeAttributeType eventTypeAttribute;
434 eventLdcIdType eventLdcId;
435 eventGdcIdType eventGdcId;
480f0332 436 union {
437 eventTimestampSecType eventTimestampSec;
438 /* This definition is only for backward compatibility with event.h < 3.11 */
439 eventTimestampSecType eventTimestamp;
440 };
441 eventTimestampUsecType eventTimestampUsec;
f3a800f8 442};
443
444struct eventStruct {
445 struct eventHeaderStruct eventHeader;
446 unsigned short eventRawData[1];
447};
448
449/* ========== Definitions for the Vector ========== */
480f0332 450typedef short eventVectorBankIdType;
451typedef datePointer eventVectorSizeType;
452typedef datePointer eventVectorOffsetType;
f3a800f8 453
454struct eventVectorStruct {
455 eventVectorBankIdType eventVectorBankId;
456 unsigned eventVectorPointsToVector : 1;
457 eventVectorSizeType eventVectorSize;
458 eventVectorOffsetType eventVectorStartOffset;
459};
460
461/* ========== Definitions for the payload descriptor ========== */
462typedef unsigned long32 eventNumEquipmentsType;
463typedef struct eventVectorStruct eventExtensionVectorType;
464
465struct vectorPayloadDescriptorStruct {
466 eventNumEquipmentsType eventNumEquipments;
467 eventExtensionVectorType eventExtensionVector;
468};
469
470/* ========== Definitions for the equipment header ========== */
471typedef long32 equipmentSizeType;
472typedef long32 equipmentTypeType;
473typedef long32 equipmentIdType;
474typedef eventTypeAttributeType equipmentTypeAttributeType;
475typedef long32 equipmentBasicElementSizeType;
476
477struct equipmentHeaderStruct {
478 equipmentSizeType equipmentSize;
479 equipmentTypeType equipmentType;
480 equipmentIdType equipmentId;
481 equipmentTypeAttributeType equipmentTypeAttribute;
482 equipmentBasicElementSizeType equipmentBasicElementSize;
483};
484
485struct equipmentDescriptorStruct {
486 struct equipmentHeaderStruct equipmentHeader;
487 struct eventVectorStruct equipmentVector;
480f0332 488}
489#ifdef __GNUC__
490 __attribute__((__packed__));
491#else
492 // Find whatever method for your compiler to pack the above structure without paddings
493 ;
494#endif
f3a800f8 495
496struct equipmentStruct {
497 struct equipmentHeaderStruct equipmentHeader;
498 unsigned short equipmentRawData[1];
499};
500
501/* ========== Definition of the event location for the simpleFifo ========== */
502struct eventLocationDescriptorStruct {
503 eventVectorBankIdType eventBankId;
504 eventVectorOffsetType eventOffset;
505};
506
507/* ========== Global macros ========== */
508
509/* The macro PAGED_EVENT_SIZE receives in input the ADDRESS of a paged
510 event and returns the size (in bytes) of the first page of the
511 event */
512#define PAGED_EVENT_SIZE( event ) \
513 (EVENT_HEAD_BASE_SIZE +sizeof( struct vectorPayloadDescriptorStruct ) + \
514 ((*(eventNumEquipmentsType *)((void*)event+EVENT_HEAD_BASE_SIZE))* \
515 (sizeof( struct equipmentDescriptorStruct ))))
516
517/* ========== Common data header ========== */
480f0332 518#define CDH_SIZE (4* 10)
519#define CDH_VERSION 3
520
521#define CDH_TRIGGER_OVERLAP_ERROR_BIT 0
522#define CDH_TRIGGER_MISSING_ERROR_BIT 1
523#define CDH_DATA_PARITY_ERROR_BIT 2
524#define CDH_CONTROL_PARITY_ERROR_BIT 3
525#define CDH_TRIGGER_INFORMATION_UNAVAILABLE_BIT 4
526#define CDH_FEE_ERROR_BIT 5
527#define CDH_HLT_DECISION_BIT 6
528#define CDH_HLT_PAYLOAD_BIT 7
529#define CDH_DDG_PAYLOAD_BIT 8
530#define CDH_TRIGGER_L1_TIME_VIOLATION_ERROR_BIT 9
531#define CDH_TRIGGER_L2_TIME_VIOLATION_ERROR_BIT 10
532#define CDH_TRIGGER_PREPULSE_ERROR_BIT 11
533#define CDH_TRIGGER_ERROR_BIT 12
534#define CDH_TRIGGER_L1_MISSING_L2_RECEIVED_BIT 13
535#define CDH_TRIGGER_MULTI_EVENT_BUFFER_ERROR_BIT 14
536#define CDH_ORIGINAL_EVENT_BIT 15
537
538/* Macro to load the trigger classes of an event header
539 using the cdhTriggerClasses* fields */
540#define CDH_LOAD_EVENT_TRIGGER_PATTERN( etp, l, ml, mh, h ) \
b2e69add 541 ( etp[0] = ((unsigned long32)(l)), \
542 etp[1] = ((unsigned long32)(ml)), \
543 etp[2] = ((unsigned long32)(mh)), \
544 etp[3] = ((unsigned long32)(h) & 0xf) )
f3a800f8 545
546/* Please note how the above data structure has been
547 defined for LE systems. Code running on BE systems
548 must have all fields reverted to work correctly! */
549struct commonDataHeaderStruct {
550 unsigned cdhBlockLength : 32;
551 /* ------------------------------------- */
552 unsigned cdhEventId1 : 12;
480f0332 553 unsigned cdhMBZ1 : 2;
554 unsigned cdhL1TriggerMessage : 8;
555 unsigned cdhMBZ0 : 2;
556 unsigned cdhVersion : 8;
557 /* ------------------------------------- */
558 unsigned cdhEventId2 : 24;
559 unsigned cdhParRequests : 8;
560 /* ------------------------------------- */
561 unsigned cdhParticipatingSubDetectors : 24;
562 unsigned cdhBlockAttributes : 8;
563 /* ------------------------------------- */
564 unsigned cdhMiniEventId : 12;
565 unsigned cdhStatusErrorBits : 20;
566 /* ------------------------------------- */
567 unsigned cdhTriggerClassesLow : 32; // Goes into eventTriggerPattern[0]
568 /* ------------------------------------- */
b2e69add 569 unsigned cdhTriggerClassesMiddleLow : 32; // Goes into eventTriggerPattern[1]
480f0332 570 /* ------------------------------------- */
b2e69add 571 unsigned cdhTriggerClassesMiddleHigh : 32; // Goes into eventTriggerPattern[2]
480f0332 572 /* ------------------------------------- */
b2e69add 573 unsigned cdhTriggerClassesHigh : 4; // Goes into eventTriggerPattern[3] (zero-filled)
574 unsigned cdhMBZ4 : 24;
480f0332 575 unsigned cdhRoiLow : 4;
576 /* ------------------------------------- */
577 unsigned cdhRoiHigh : 32;
578};
579
580/* Old (V2) structure, defined for backward
581 compatibility.
582
583 MAY DISAPPEAR IN FUTURE VERSIONS OF DATE!
584*/
585struct commonDataHeaderV2Struct {
586 unsigned cdhBlockLength : 32;
587 /* ------------------------------------- */
588 unsigned cdhEventId1 : 12;
07afbf5b 589 unsigned cdhMBZ1 : 2;
590 unsigned cdhL1TriggerMessage : 8;
f3a800f8 591 unsigned cdhMBZ0 : 2;
f3a800f8 592 unsigned cdhVersion : 8;
593 /* ------------------------------------- */
594 unsigned cdhEventId2 : 24;
07afbf5b 595 unsigned cdhMBZ2 : 8;
f3a800f8 596 /* ------------------------------------- */
597 unsigned cdhParticipatingSubDetectors : 24;
598 unsigned cdhBlockAttributes : 8;
599 /* ------------------------------------- */
600 unsigned cdhMiniEventId : 12;
601 unsigned cdhStatusErrorBits : 16;
07afbf5b 602 unsigned cdhMBZ3 : 4;
f3a800f8 603 /* ------------------------------------- */
604 unsigned cdhTriggerClassesLow : 32;
605 /* ------------------------------------- */
606 unsigned cdhTriggerClassesHigh : 18;
07afbf5b 607 unsigned cdhMBZ4 : 10;
f3a800f8 608 unsigned cdhRoiLow : 4;
609 /* ------------------------------------- */
610 unsigned cdhRoiHigh : 32;
611};
612
613#endif