]>
Commit | Line | Data |
---|---|---|
9d9ffd37 | 1 | //-*- Mode: C++ -*- |
2 | #ifndef ALIHLTCALIBRATIONPROCESSOR_H | |
3 | #define ALIHLTCALIBRATIONPROCESSOR_H | |
4 | /* This file is property of and copyright by the ALICE HLT Project * | |
5 | * ALICE Experiment at CERN, All rights reserved. * | |
6 | * See cxx source for full Copyright notice */ | |
7 | ||
9d9ffd37 | 8 | /** |
9 | * Class takes care of handling and shipping of freshly produced calibration | |
10 | * data. this data will be shipped to the FXS of the HLT | |
11 | * | |
12 | * @file AliHLTCalibrationProcessor.h | |
13 | * @author Jochen Thaeder, Sebastian Bablok | |
14 | * @date | |
15 | * @brief Base class of HLT calibration components. | |
16 | */ | |
17 | ||
18 | #include "AliHLTProcessor.h" | |
19 | #include "AliHLTMessage.h" | |
20 | #include "AliHLTDataTypes.h" | |
21 | ||
22 | /** | |
23 | * @class AliHLTCalibrationProcessor | |
24 | * Base class of HLT calibration components. | |
25 | * The class provides a common interface for the implementation of HLT | |
26 | * calibration components. It takes care of handling and shipping of | |
27 | * produced calibration data to the FXS of the HLT. The child class must | |
28 | * implement the functions: | |
29 | * - @ref InitCalibration (optional) | |
30 | * - @ref ScanArgument (optional) | |
31 | * - @ref DeinitCalibration (optional) | |
32 | * - @ref ProcessCalibration | |
33 | * - @ref ShipDataToFXS | |
34 | * - @ref GetComponentID | |
35 | * - @ref GetInputDataTypes | |
36 | * - @ref GetOutputDataType | |
37 | * - @ref GetOutputDataSize | |
38 | * - @ref Spawn | |
39 | ||
40 | * @ingroup alihlt_component | |
41 | */ | |
42 | class AliHLTCalibrationProcessor : public AliHLTProcessor { | |
43 | ||
44 | public: | |
45 | /** standard constructor */ | |
46 | AliHLTCalibrationProcessor(); | |
47 | ||
48 | /** standard destructor */ | |
49 | virtual ~AliHLTCalibrationProcessor(); | |
50 | ||
9d9ffd37 | 51 | protected: |
52 | ||
53 | /* | |
54 | * ######################## PushToFXS ##################### | |
55 | */ | |
56 | ||
57 | /** | |
58 | * Insert an object into the output. FXS header will be inserted before the root object. | |
59 | * @param pObject pointer to root object | |
60 | * @param pDetector 4 byte Detector identifier | |
61 | * @param pFileID name of the file to which the data shall be stored | |
ed504011 | 62 | * @param pDDLList pointer to ReadoutList ( struct @ref AliHLTEventDDL) of |
e962f438 | 63 | * participating DDLs. Have to be set or unset with @ref |
64 | * AliHLTComponent::EnableDDLBit() and @ref AliHLTComponent::DisableDDLBit(). | |
ed504011 | 65 | * Will be filled automatically if not supplied by the component. |
9d9ffd37 | 66 | * @return neg. error code if failed |
67 | */ | |
ed504011 | 68 | Int_t PushToFXS(TObject* pObject, const char* pDetector, const char* pFileID, AliHLTEventDDL* pDDLList = NULL); |
9d9ffd37 | 69 | |
70 | /** | |
71 | * Insert an object into the output. FXS header will be inserted before the root object. | |
72 | * @param pBuffer pointer to buffer | |
73 | * @param iSize size of the buffer | |
74 | * @param pDetector 4 byte Detector identifier | |
75 | * @param pFileID name of the file to which the data shall be stored | |
ed504011 | 76 | * @param pDDLList pointer to ReadoutList ( struct @ref AliHLTEventDDL) of |
e962f438 | 77 | * participating DDLs. Have to be set or unset with @ref |
78 | * AliHLTComponent::EnableDDLBit() and @ref AliHLTComponent::DisableDDLBit(). | |
ed504011 | 79 | * Will be filled automatically if not supplied by the component. |
9d9ffd37 | 80 | * @return neg. error code if failed |
81 | */ | |
ed504011 | 82 | Int_t PushToFXS(void* pBuffer, int iSize, const char* pDetector, const char* pFileID, AliHLTEventDDL* pDDLList = NULL); |
9d9ffd37 | 83 | |
3a7c0444 | 84 | /** Constants */ |
85 | static const AliHLTUInt32_t fgkFXSProtocolHeaderSize; | |
86 | static const AliHLTUInt32_t fgkFXSProtocolHeaderVersion; | |
87 | ||
e4efa587 | 88 | /* |
89 | * ######################## ProcessCalibaration ##################### | |
90 | */ | |
91 | ||
92 | /** | |
93 | * The low-level data processing method for the component, | |
94 | * called for every data event. This is the custom processing | |
95 | * method and can be overloaded by the component. | |
96 | * @param evtData event data structure | |
97 | * @param blocks input data block descriptors | |
98 | * @param trigData trigger data structure | |
99 | * @param outputPtr pointer to target buffer | |
100 | * @param size <i>input</i>: size of target buffer | |
101 | * <i>output</i>:size of produced data | |
102 | * @param outputBlocks list to receive output block descriptors | |
103 | * @return neg. error code if failed | |
104 | */ | |
105 | virtual Int_t ProcessCalibration(const AliHLTComponent_EventData& evtData, | |
106 | const AliHLTComponent_BlockData* blocks, | |
107 | AliHLTComponent_TriggerData& trigData, AliHLTUInt8_t* outputPtr, | |
108 | AliHLTUInt32_t& size, | |
109 | vector<AliHLTComponent_BlockData>& outputBlocks); | |
110 | ||
111 | /** | |
112 | * The high-level data processing method for the component, | |
113 | * called for every data event. This is the custom processing | |
114 | * method and can be overloaded by the component. | |
115 | * This is the default processing method; the method is called | |
116 | * if no low level @ref ProcessCalibration method is overloaded by the component. | |
117 | * @param evtData event data structure | |
118 | * @param trigData trigger data structure | |
119 | * @return neg. error code if failed | |
120 | */ | |
121 | virtual Int_t ProcessCalibration( const AliHLTComponentEventData& evtData, AliHLTComponentTriggerData& trigData); | |
122 | ||
2cf5780e | 123 | /* |
124 | * ######################## ShipDataToFXS ##################### | |
125 | */ | |
126 | ||
127 | /** | |
128 | * The low-level data processing method for the component, | |
129 | * called for the END_OF_RUN event. This is the custom processing | |
130 | * method and can be overloaded by the component. | |
131 | * @param evtData event data structure | |
132 | * @param blocks input data block descriptors | |
133 | * @param trigData trigger data structure | |
134 | * @param outputPtr pointer to target buffer | |
135 | * @param size <i>input</i>: size of target buffer | |
136 | * <i>output</i>:size of produced data | |
137 | * @param outputBlocks list to receive output block descriptors | |
138 | * @return neg. error code if failed | |
139 | */ | |
140 | virtual Int_t ShipDataToFXS(const AliHLTComponent_EventData& evtData, | |
141 | const AliHLTComponent_BlockData* blocks, | |
142 | AliHLTComponent_TriggerData& trigData, AliHLTUInt8_t* outputPtr, | |
143 | AliHLTUInt32_t& size, | |
144 | vector<AliHLTComponent_BlockData>& outputBlocks); | |
145 | ||
146 | /** | |
147 | * The high-level data processing method for the component, | |
148 | * called for the END_OF_RUN event. This is the custom processing | |
149 | * method and can be overloaded by the component. | |
150 | * This is the default processing method; the method is called | |
151 | * if no low level @ref ShipDataToFXS method is overloaded by the component. | |
152 | * @param evtData event data structure | |
153 | * @param trigData trigger data structure | |
154 | * @return neg. error code if failed | |
155 | */ | |
156 | virtual Int_t ShipDataToFXS( const AliHLTComponentEventData& evtData, AliHLTComponentTriggerData& trigData); | |
157 | ||
9d9ffd37 | 158 | private: |
159 | ||
160 | /* | |
161 | * ######################## InitCalibration ##################### | |
162 | */ | |
163 | ||
164 | /** | |
165 | * Internal initialization method, which is not available for child classes. InitCalibration is the | |
166 | * corresponding function for classes derived from AliHLTCalibrationProcessor. | |
167 | */ | |
168 | Int_t DoInit( int argc, const char** argv ); | |
169 | ||
170 | /** | |
171 | * Default method for the internal initialization. | |
172 | * The method is called by @ref DoInit. | |
173 | * This class can be overridden by the child class. | |
174 | */ | |
175 | virtual Int_t InitCalibration(); | |
176 | ||
177 | /** | |
178 | * Scan one argument and adjacent parameters. | |
179 | * Can be overloaded by child classes in order to add additional arguments | |
180 | * beyond the standard arguments of the calibration processor. The method is called | |
181 | * whenever a non-standard argument is recognized. Make sure to return | |
182 | * <tt> -EPROTO </tt> if the argument is not recognized be the child. | |
183 | * @param argc size of the argument array | |
184 | * @param argv agument array for component initialization | |
185 | * @return number of processed members of the argv <br> | |
186 | * -EINVAL unknown argument <br> | |
187 | * -EPROTO parameter for argument missing <br> | |
188 | */ | |
7c4091c1 | 189 | virtual Int_t ScanArgument(int argc, const char** argv); |
9d9ffd37 | 190 | |
9d9ffd37 | 191 | /* |
192 | * ######################## DeinitCalibration ##################### | |
193 | */ | |
194 | ||
195 | /** | |
196 | * Internal deinitialization method, which is not available for child classes. DeinitCalibration is the | |
197 | * corresponding function for classes derived from AliHLTCalibrationProcessor. | |
198 | */ | |
199 | Int_t DoDeinit(); | |
200 | ||
201 | /** | |
202 | * Default method for the internal clean-up. | |
203 | * The method is called by @ref DoDeinit. | |
204 | * This class can be overridden by the child class. | |
205 | */ | |
206 | virtual Int_t DeinitCalibration(); | |
207 | ||
208 | /* | |
209 | * ######################## DoEvent ##################### | |
210 | */ | |
211 | ||
212 | /** | |
213 | * The low-level data processing method for the component. | |
214 | * It decides wether to call @ref ProcessCalibration or @ref ShipDataToFXS | |
215 | * according to the event type - END_OF_RUN / DATA / CALIBRATION | |
216 | * If commandline paramater "-eventmodulo x"is given and x > 0, data will | |
217 | * be also shipped to the FXS with this modulo. | |
218 | * @param evtData event data structure | |
219 | * @param blocks input data block descriptors | |
220 | * @param trigData trigger data structure | |
221 | * @param outputPtr pointer to target buffer | |
222 | * @param size <i>input</i>: size of target buffer | |
223 | * <i>output</i>:size of produced data | |
224 | * @param outputBlocks list to receive output block descriptors | |
225 | * @return neg. error code if failed | |
226 | */ | |
227 | Int_t DoEvent( const AliHLTComponentEventData& evtData, | |
228 | const AliHLTComponentBlockData* blocks, | |
229 | AliHLTComponentTriggerData& trigData, | |
230 | AliHLTUInt8_t* outputPtr, | |
231 | AliHLTUInt32_t& size, | |
232 | vector<AliHLTComponentBlockData>& outputBlocks ); | |
233 | ||
2cf5780e | 234 | using AliHLTProcessor::DoEvent; |
9d9ffd37 | 235 | |
236 | /* | |
237 | * ######################## CreateFXSHeader ##################### | |
238 | */ | |
239 | ||
240 | /** | |
241 | * Insert an object into the output. FXS header will be inserted before the root object. | |
242 | * @param pHeader pointer to AliHLTFXSHeader | |
243 | * @param pDetector 4 byte Detector identifier | |
244 | * @param pFileID name of the file to which the data shall be stored | |
ed504011 | 245 | * @param pDDLList pointer to ReadoutList ( struct @ref AliHLTEventDDL) of |
246 | * participating DDLs. Will be filled automatically if not | |
247 | * supplied by the component. | |
9d9ffd37 | 248 | * @return neg. error code if failed |
249 | */ | |
ed504011 | 250 | Int_t CreateFXSHeader( AliHLTFXSHeader &pHeader, const char* pDetector, const char* pFileID, AliHLTEventDDL* pDDLList ); |
9d9ffd37 | 251 | |
252 | /* | |
253 | * ######################## Members ##################### | |
254 | */ | |
255 | ||
256 | /** | |
257 | * Event modulo, when Data should shipped to FXS additionally. | |
258 | * Default is 0, eventmodulo is deactivated. | |
259 | */ | |
260 | Int_t fEventModulo; // see above | |
261 | ||
262 | /** | |
263 | * if kTrue corrupt events will be passed through, | |
264 | * if kFalse (default) they will be filtered | |
265 | */ | |
266 | Bool_t fUseCorruptEvents; // see above | |
267 | ||
268 | /** Event counter */ | |
269 | Int_t fEventCounter; // see above | |
270 | ||
271 | /** | |
272 | * Bit Array of participating DDL Numbers. | |
ed504011 | 273 | * Scheme: every 4 Bits of each Byte convert digit |
274 | * (0 - F), before writing to FXS Header | |
9d9ffd37 | 275 | */ |
ed504011 | 276 | //Char_t fDDLNumber[gkAliHLTFXSHeaderfDDLNumberSize];// see above |
277 | Char_t fDDLNumber[64]; // see above | |
9d9ffd37 | 278 | |
279 | /** Dummy in order to cope with RC 11 */ | |
280 | Int_t fDummy; // see above | |
281 | ||
282 | ClassDef(AliHLTCalibrationProcessor, 0) | |
283 | ||
284 | }; | |
285 | ||
286 | #endif // ALIHLTCALIBRATIONPROCESSOR_H |