3 #ifndef ALIHLTDATATYPES_H
4 #define ALIHLTDATATYPES_H
5 /* This file is property of and copyright by the ALICE HLT Project *
6 * ALICE Experiment at CERN, All rights reserved. *
7 * See cxx source for full Copyright notice */
9 /** @file AliHLTDataTypes.h
10 @author Matthias Richter, Timm Steinbeck, Jochen Thaeder
12 @brief Data type declaration for the HLT module.
15 //////////////////////////////////////////////////////////////////////////
17 // version no of HLT data types
19 //////////////////////////////////////////////////////////////////////////
21 /* Version Description
22 * 1 first version until June 07; implicite, not tagged
23 * 2 introduced June 07, enhanced/cleaned/arranged structure
25 #define ALIHLT_DATA_TYPES_VERSION 2
27 //////////////////////////////////////////////////////////////////////////
29 // HLT data origin defines
31 //////////////////////////////////////////////////////////////////////////
33 /** field size of datat type origin */
34 const int kAliHLTComponentDataTypefOriginSize=4;
37 /** invalid data origin */
38 # define kAliHLTVoidDataOrigin "\0\0\0"
40 /** special id for any data type origin */
41 # define kAliHLTAnyDataOrigin "***"
44 # define kAliHLTDataOriginOut {'H','L','T',' '}
46 /** HLT/PubSub private internal */
47 # define kAliHLTDataOriginPrivate {'P','R','I','V'}
50 # define kAliHLTDataOriginTPC {'T','P','C',' '}
53 # define kAliHLTDataOriginPHOS {'P','H','O','S'}
56 # define kAliHLTDataOriginMUON {'M','U','O','N'}
59 # define kAliHLTDataOriginTRD {'T','R','D',' '}
62 # define kAliHLTDataOriginITS {'I','T','S',' '}
64 //////////////////////////////////////////////////////////////////////////
66 // HLT common data type defines
68 //////////////////////////////////////////////////////////////////////////
70 /** field size of data type id */
71 const int kAliHLTComponentDataTypefIDsize=8;
74 /** invalid data type id */
75 # define kAliHLTVoidDataTypeID "\0\0\0\0\0\0\0"
77 /** special id for any data type id */
78 # define kAliHLTAnyDataTypeID "*******"
80 /** calibration data for file exchange subscriber */
81 # define kAliHLTFXSCalibDataTypeID {'F','X','S','_','C','A','L',' '}
83 /** start of run (SOR) event
86 # define kAliHLTSORDataTypeID {'S','T','A','R','T','O','F','R'}
88 /** end of run (EOR) event
91 # define kAliHLTEORDataTypeID {'E','N','D','O','F','R','U','N'}
96 # define kAliHLTDDLDataTypeID {'D','D','L','L','I','S','T',' '}
99 * - empty payload, specification gives eventType
101 # define kAliHLTEventDataTypeID {'E','V','E','N','T','T','Y','P'}
106 //////////////////////////////////////////////////////////////////////////
108 // Basic HLT data types
110 //////////////////////////////////////////////////////////////////////////
112 typedef unsigned char AliHLTUInt8_t;
114 typedef unsigned short AliHLTUInt16_t;
116 typedef unsigned int AliHLTUInt32_t;
118 typedef unsigned long long AliHLTUInt64_t;
120 typedef AliHLTUInt64_t AliHLTEventID_t;
122 //////////////////////////////////////////////////////////////////////////
124 // HLT logging levels
126 //////////////////////////////////////////////////////////////////////////
128 enum AliHLTComponentLogSeverity {
130 kHLTLogBenchmark = 0x1,
133 kHLTLogWarning = 0x8,
137 kHLTLogDefault = 0x3d
140 //////////////////////////////////////////////////////////////////////////
142 // HLT data structures for data exchange and external interface
144 //////////////////////////////////////////////////////////////////////////
147 * @struct AliHLTComponentEventData
150 struct AliHLTComponentEventData
152 AliHLTUInt32_t fStructSize;
153 AliHLTEventID_t fEventID;
154 AliHLTUInt32_t fEventCreation_s;
155 AliHLTUInt32_t fEventCreation_us;
156 AliHLTUInt32_t fBlockCnt;
160 * @struct AliHLTComponentShmData
161 * Shared memory descriptor.
162 * Irrelevant for analysis components.
164 struct AliHLTComponentShmData
166 AliHLTUInt32_t fStructSize;
167 AliHLTUInt32_t fShmType;
168 AliHLTUInt64_t fShmID;
172 * @struct AliHLTComponentDataType
173 * Data type descriptor for data blocks transferred through the processing
176 struct AliHLTComponentDataType
178 AliHLTUInt32_t fStructSize;
179 char fID[kAliHLTComponentDataTypefIDsize]; //!
180 char fOrigin[kAliHLTComponentDataTypefOriginSize]; //!
184 * @struct AliHLTComponentBlockData
185 * This is the decription of data blocks exchanged between components.
186 * \b IMPORTANT: The validity of fPtr and fOffset is different for input and
188 * - input blocks: The \em fPtr member always points to the beginning of the data
189 * of size \em fSize. fOffset is ignored and should be in most
191 * - output blocks: The \em fPtr member is ignored by the framework. \em fOffset
192 * must specify the start of the data relative to the output
193 * buffer. The data block has size \em fSize.
195 struct AliHLTComponentBlockData
197 /* size and version of the struct */
198 AliHLTUInt32_t fStructSize;
199 /* shared memory key, ignored by processing components */
200 AliHLTComponentShmData fShmKey;
201 /* offset of output data relative to the output buffer */
202 AliHLTUInt32_t fOffset;
203 /* start of the data for input data blocks, fOffset to be ignored*/
205 /* size of the data block */
206 AliHLTUInt32_t fSize;
207 /* data type of the data block */
208 AliHLTComponentDataType fDataType;
209 /* data specification of the data block */
210 AliHLTUInt32_t fSpecification;
214 * @struct AliHLTComponentTriggerData
215 * Trigger data, not yet defined
217 struct AliHLTComponentTriggerData
219 AliHLTUInt32_t fStructSize;
220 AliHLTUInt32_t fDataSize;
225 * @struct AliHLTComponentEventDoneData
228 struct AliHLTComponentEventDoneData
230 AliHLTUInt32_t fStructSize;
231 AliHLTUInt32_t fDataSize;
236 * @struct AliHLTRunDesc
238 * The struct is send with the SOR and EOR events.
242 AliHLTUInt32_t fStructSize;
243 AliHLTUInt32_t fRunNo;
244 AliHLTUInt32_t fRunType;
247 /** size of the DDL list */
248 static const int gkAliHLTDDLListSize = 29;
251 * @struct AliHLTEventDDL
253 * The struct is send with the DDLLIST event.
255 struct AliHLTEventDDL
257 AliHLTUInt32_t fCount;
258 AliHLTUInt32_t fList[gkAliHLTDDLListSize];
261 //////////////////////////////////////////////////////////////////////////
263 // HLT Event Type Specification
265 //////////////////////////////////////////////////////////////////////////
267 /** Unknown eventType specification */
268 static const AliHLTUInt32_t gkAliEventTypeUnknown = ~(AliHLTUInt32_t)0;
269 /** SOR eventType specification */
270 static const AliHLTUInt32_t gkAliEventTypeStartOfRun=1;
271 /** Data eventType specification */
272 static const AliHLTUInt32_t gkAliEventTypeData=2;
273 /** EOR eventType specification */
274 static const AliHLTUInt32_t gkAliEventTypeEndOfRun=4;
275 /** Corrupt eventType specification */
276 static const AliHLTUInt32_t gkAliEventTypeCorruptID=8;
277 /** Calibration eventType specification */
278 static const AliHLTUInt32_t gkAliEventTypeCalibration=16;
279 /** DataReplay eventType specification */
280 static const AliHLTUInt32_t gkAliEventTypeDataReplay=32;
281 /** Tick eventType specification */
282 static const AliHLTUInt32_t gkAliEventTypeTick=64;
283 /** Max eventType specification */
284 static const AliHLTUInt32_t gkAliEventTypeMax=64;
286 //////////////////////////////////////////////////////////////////////////
288 // HLT defines and defaults
290 //////////////////////////////////////////////////////////////////////////
292 /** invalid event id */
293 const AliHLTEventID_t kAliHLTVoidEventID=~(AliHLTEventID_t)0;
295 /** invalid data specification */
296 const AliHLTUInt32_t kAliHLTVoidDataSpec = ~(AliHLTUInt32_t)0;
298 /** invalid shared memory type */
299 const AliHLTUInt32_t gkAliHLTComponentInvalidShmType = 0;
301 /** invalid shared memory id */
302 const AliHLTUInt64_t gkAliHLTComponentInvalidShmID = ~(AliHLTUInt64_t)0;
304 /** invalid data type */
305 const AliHLTComponentDataType kAliHLTVoidDataType = {
306 sizeof(AliHLTComponentDataType),
307 kAliHLTVoidDataTypeID,
308 kAliHLTVoidDataOrigin
311 // there is currently a problem with rootcint if the predefined ids
312 // (commented below) are used. rootcint does not find the id if they
313 // are char arrays defined with {} and individual chars. If strings
314 // are used it works fine
316 const AliHLTComponentDataType kAliHLTAnyDataType = {
317 sizeof(AliHLTComponentDataType),
318 kAliHLTAnyDataTypeID,
322 /** multiple output data types */
323 extern const AliHLTComponentDataType kAliHLTMultipleDataType;
325 /** data to file exchange subscriber */
326 extern const AliHLTComponentDataType kAliHLTDataTypeFXSCalib;
328 /** DDL list data type */
329 extern const AliHLTComponentDataType kAliHLTDataTypeDDL;
332 extern const AliHLTComponentDataType kAliHLTDataTypeSOR;
335 extern const AliHLTComponentDataType kAliHLTDataTypeEOR;
337 /** Event type specification */
338 extern const AliHLTComponentDataType kAliHLTDataTypeEvent;
340 //////////////////////////////////////////////////////////////////////////
342 // FXS subscriber meta information
344 //////////////////////////////////////////////////////////////////////////
346 static const int gkAliHLTFXSHeaderfOriginSize = 4;
347 static const int gkAliHLTFXSHeaderfFileIDSize = 128;
348 static const int gkAliHLTFXSHeaderfDDLNumberSize = 64;
350 /** Header in front of the data payload, in order to sent data to the FXS. */
351 struct AliHLTFXSHeader
353 AliHLTUInt32_t fHeaderVersion;
354 AliHLTUInt32_t fRunNumber;
355 char fOrigin[gkAliHLTFXSHeaderfOriginSize];
356 char fFileID[gkAliHLTFXSHeaderfFileIDSize];
357 char fDDLNumber[gkAliHLTFXSHeaderfDDLNumberSize];
360 //////////////////////////////////////////////////////////////////////////
362 // Component running environment
364 //////////////////////////////////////////////////////////////////////////
366 /** logging function */
367 typedef int (*AliHLTfctLogging)( void* param,
368 AliHLTComponentLogSeverity severity,
371 const char* message);
374 * @struct AliHLTComponentEnvironment
375 * Running environment for analysis components.
376 * The struct describes function callbacks for
378 struct AliHLTComponentEnvironment
380 AliHLTUInt32_t fStructSize;
382 void* (*fAllocMemoryFunc)( void* param, unsigned long size );
384 // future addition already foreseen/envisioned
385 // IMPORTANT: don not just remove the defines as this breaks the binary
387 int (*fAllocShmMemoryFunc)( void* param, unsigned long size, AliHLTComponentBlockData* blockLocation );
389 int (*fGetEventDoneDataFunc)( void* param, AliHLTEventID_t eventID, unsigned long size, AliHLTComponentEventDoneData** edd );
390 AliHLTfctLogging fLoggingFunc;
394 //////////////////////////////////////////////////////////////////////////
396 // Data type helper functions
398 //////////////////////////////////////////////////////////////////////////
400 inline bool operator==( const AliHLTComponentDataType& dt1, const AliHLTComponentDataType& dt2 )
402 for ( int i = 0; i < kAliHLTComponentDataTypefIDsize; i++ )
403 if ( dt1.fID[i] != dt2.fID[i] )
405 for ( int i = 0; i < kAliHLTComponentDataTypefOriginSize; i++ )
406 if ( dt1.fOrigin[i] != dt2.fOrigin[i] )
411 inline bool operator!=( const AliHLTComponentDataType& dt1, const AliHLTComponentDataType& dt2 )
413 for ( int i = 0; i < kAliHLTComponentDataTypefIDsize; i++ )
414 if ( dt1.fID[i] != dt2.fID[i] )
416 for ( int i = 0; i < kAliHLTComponentDataTypefOriginSize; i++ )
417 if ( dt1.fOrigin[i] != dt2.fOrigin[i] )