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