]>
Commit | Line | Data |
---|---|---|
a655eae3 | 1 | //-*- Mode: C++ -*- |
421b7534 | 2 | // @(#) $Id$ |
3 | ||
4 | #ifndef ALIHLTDATASOURCE_H | |
5 | #define ALIHLTDATASOURCE_H | |
b6800be0 | 6 | /* This file is property of and copyright by the ALICE HLT Project * |
7 | * ALICE Experiment at CERN, All rights reserved. * | |
421b7534 | 8 | * See cxx source for full Copyright notice */ |
9 | ||
10 | /** @file AliHLTDataSource.h | |
11 | @author Matthias Richter | |
12 | @date | |
b22e91eb | 13 | @brief Base class declaration for HLT data source components. |
14 | @note The class is used in Offline (AliRoot) context | |
15 | */ | |
421b7534 | 16 | |
30338a30 | 17 | // see below for class documentation |
18 | // or | |
19 | // refer to README to build package | |
20 | // or | |
21 | // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt | |
22 | ||
421b7534 | 23 | #include "AliHLTComponent.h" |
24 | ||
25 | /** | |
26 | * @class AliHLTDataSource | |
27 | * Base class of HLT data source components. | |
28 | * The class provides a common interface for the implementation of HLT data | |
29 | * source components. The child class must implement the functions: | |
b22e91eb | 30 | * - @ref DoInit (optional) |
31 | * - @ref DoDeinit (optional) | |
32 | * - @ref GetEvent | |
33 | * - @ref GetComponentID | |
b22e91eb | 34 | * - @ref GetOutputDataType |
35 | * - @ref GetOutputDataSize | |
36 | * - @ref Spawn | |
421b7534 | 37 | * |
b22e91eb | 38 | * @ingroup alihlt_component |
421b7534 | 39 | */ |
40 | class AliHLTDataSource : public AliHLTComponent { | |
41 | public: | |
42 | /** standard constructor */ | |
43 | AliHLTDataSource(); | |
44 | /** standard destructor */ | |
45 | virtual ~AliHLTDataSource(); | |
46 | ||
47 | /** | |
48 | * Event processing function. | |
49 | * The method is called by the framework to process one event. After | |
50 | * preparation of data structures. The call is redirected to GetEvent. | |
b6800be0 | 51 | * @return neg. error code if failed <br> |
52 | * -ENOSPC output buffer too small | |
421b7534 | 53 | */ |
3cde846d | 54 | int DoProcessing( const AliHLTComponentEventData& evtData, |
8ede8717 | 55 | const AliHLTComponentBlockData* blocks, |
56 | AliHLTComponentTriggerData& trigData, | |
421b7534 | 57 | AliHLTUInt8_t* outputPtr, |
58 | AliHLTUInt32_t& size, | |
a655eae3 | 59 | vector<AliHLTComponentBlockData>& outputBlocks, |
8ede8717 | 60 | AliHLTComponentEventDoneData*& edd ); |
421b7534 | 61 | |
62 | // Information member functions for registration. | |
63 | ||
64 | /** | |
65 | * Return @ref AliHLTComponent::kSource type as component type. | |
66 | * @return component type id | |
67 | */ | |
68 | TComponentType GetComponentType() { return AliHLTComponent::kSource;} | |
69 | ||
2d7ff710 | 70 | /** |
71 | * Default implementation for all data sources. | |
72 | * There are no input data types. | |
73 | */ | |
21745ddc | 74 | void GetInputDataTypes( vector<AliHLTComponentDataType>& list); |
2d7ff710 | 75 | |
457ec821 | 76 | /** |
77 | * @class AliSpecialEventGuard | |
78 | * Guard structure to set the data sources into 'special event publishing' | |
79 | * mode. The SOR and EOR events are generated by all the data sources and | |
80 | * perculated through the chain as normal events. The AliSpecialEventGuard | |
81 | * is a back-door mechansim to trigger publishing of the special event | |
82 | * described by the run descriptor instead of the publishing of real data. | |
83 | * | |
84 | * The descriptor has to be valid throughout the lifetime of the guard. | |
85 | */ | |
86 | class AliSpecialEventGuard { | |
87 | public: | |
88 | /** constructor, set run descriptor */ | |
89 | AliSpecialEventGuard(AliHLTRunDesc* pDesc, AliHLTComponentDataType dt, AliHLTUInt32_t spec); | |
90 | /** destructor, reset run descriptor */ | |
91 | ~AliSpecialEventGuard(); | |
92 | }; | |
93 | ||
94 | protected: | |
a655eae3 | 95 | |
421b7534 | 96 | /** |
a655eae3 | 97 | * The low-level data processing method for the component. |
98 | * This is the custom processing method and can be overloaded by | |
99 | * the component. | |
421b7534 | 100 | * @param evtData event data structure |
101 | * @param trigData trigger data structure | |
102 | * @param outputPtr pointer to target buffer | |
103 | * @param size <i>input</i>: size of target buffer | |
104 | * <i>output</i>:size of produced data | |
105 | * @param outputBlocks list to receive output block descriptors | |
a655eae3 | 106 | * @return neg. error code if failed |
421b7534 | 107 | */ |
8ede8717 | 108 | virtual int GetEvent( const AliHLTComponentEventData& evtData, |
a655eae3 | 109 | AliHLTComponentTriggerData& trigData, |
110 | AliHLTUInt8_t* outputPtr, | |
111 | AliHLTUInt32_t& size, | |
112 | vector<AliHLTComponentBlockData>& outputBlocks ); | |
113 | ||
114 | /** | |
115 | * The high-level data processing method. | |
116 | * This is the default processing method; the method is called | |
117 | * if no low level @ref GetEvent method is overloaded by the component. | |
118 | * @param evtData event data structure | |
119 | * @param trigData trigger data structure | |
120 | * @return neg. error code if failed | |
121 | */ | |
122 | virtual int GetEvent( const AliHLTComponentEventData& evtData, AliHLTComponentTriggerData& trigData); | |
421b7534 | 123 | |
457ec821 | 124 | private: |
125 | /** pointer to the special event going to be published */ | |
126 | static void* fgpSpecialEvent; //! transient | |
127 | /** data size of the special event going to be published */ | |
128 | static int fgSpecialEventSize; //! transient | |
129 | /** data type of the special event going to be published */ | |
130 | static AliHLTComponentDataType fgSpecialEventDataType; //! transient | |
131 | /** data specification of the special event going to be published */ | |
132 | static AliHLTUInt32_t fgSpecialEventSpecification; //! transient | |
133 | ||
134 | ClassDef(AliHLTDataSource, 2) | |
421b7534 | 135 | }; |
136 | #endif |