]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/BASE/AliHLTConfiguration.h
added new helper components to libAliHLTUtil (EsdCollector and AliHLTOUTPublisher...
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTConfiguration.h
1 //-*- Mode: C++ -*-
2 // @(#) $Id$
3
4 #ifndef ALIHLTCONFIGURATION_H
5 #define ALIHLTCONFIGURATION_H
6 /* This file is property of and copyright by the ALICE HLT Project        * 
7  * ALICE Experiment at CERN, All rights reserved.                         *
8  * See cxx source for full Copyright notice                               */
9
10 /** @file   AliHLTConfiguration.h
11     @author Matthias Richter
12     @date   
13     @brief  Base class and handling of HLT configurations.
14     @note   The class is used in Offline (AliRoot) context
15 */
16
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
23 #include <vector>
24 #include <TObject.h>
25 #include <TList.h>
26 #include "AliHLTDataTypes.h"
27 #include "AliHLTLogging.h"
28 #include "AliHLTDataBuffer.h"
29
30 class AliHLTConfigurationHandler;
31
32 /**
33  * @class AliHLTConfiguration
34  * @brief Description of HLT processing chains.
35  *
36  * This class describes a certain configuration af an HLT processing step
37  * by the following parameters:
38  * - a unique id string/name
39  * - the id of the component
40  * - the ids of the configurations it requires input from
41  * - the arguments, which are passed to the component when it is initialized
42  *
43  * The setup of a configuration requires simply the creation of a global object
44  * of @ref AliHLTConfiguration. The Configuration is automatically registered
45  * in the list of available configurations maintained by the @ref
46  * AliHLTConfigurationHandler. The list is used by to resolve the dependencies
47  * on other configurations. Hierarchies can be built up in an easy way.
48  *
49  * A configuration is interpreted by the @ref AliHLTConfigurationHandler and
50  * transformed into a Task List.
51  *
52  * @note This class is only used for the @ref alihlt_system.
53  *
54  * @ingroup alihlt_system
55  */
56 class AliHLTConfiguration : public TObject, public AliHLTLogging {
57  public:
58   /**
59    * standard constructor. The configuration is automatically registered in the
60    * global configuration manager
61    */
62   AliHLTConfiguration();
63   /**
64    * constructor. The configuration is automatically registered in the
65    * global configuration manager
66    * @param id         unique id of the configuration
67    * @param component  component id
68    * @param sources    blank separated list of source configuration ids
69    * @param arguments  argument string passed to the component at initialization
70    * @param bufsize    size of the output buffer in byte, the string can contain a
71    *                   number prepended by a unit, e.g. 1M, allowed units 'k' and 'M'
72    */
73   AliHLTConfiguration(const char* id, const char* component,
74                       const char* sources, const char* arguments,
75                       const char* bufsize=NULL);
76   /** copy constructor */
77   AliHLTConfiguration(const AliHLTConfiguration& src);
78   /** assignment op */
79   AliHLTConfiguration& operator=(const AliHLTConfiguration& src);
80   /** destructor */
81   virtual ~AliHLTConfiguration();
82
83   /*****************************************************************************
84    * global initialization
85    */
86
87   /**
88    * Global initialization of the configuration handler.
89    */
90   static int GlobalInit(AliHLTConfigurationHandler* pHandler);
91
92   /**
93    * Global de-init and cleanup of the global configuration handler
94    */
95   static int GlobalDeinit(AliHLTConfigurationHandler* pHandler);
96
97   /*****************************************************************************
98    * properties of the configuration
99    */
100
101   /**
102    * Get configuration id, a unique name
103    * This is an overridden TObject function in order to return the configuration
104    * name instead of the class name. Enables use of TList standard functions.
105    * @return configuration id
106    */
107   const char *GetName() const;
108
109   /**
110    * Get id of the component.
111    * The id is a unique string.
112    * @return id of the component
113    */
114   const char* GetComponentID() const {return fComponent;}
115
116   /**
117    * Print status info.
118    * Short summary on id, component, sources and unresolved sources.
119    */
120   void PrintStatus();
121
122   /**
123    * Get a certain source.
124    * @param  id of the source configuration
125    * @result pointer to the corresponding configuration descriptor
126    */
127   AliHLTConfiguration* GetSource(const char* id);
128
129   /**
130    * Try to find a dependency recursively in the list of sources.
131    * @param id       the source to search for
132    * @param pTgtList (optional) target list to receive the dependency tree
133    * @return
134    *   0 if not found
135    *   n found in the n-th level
136    *   dependency list in the target list  
137    */
138   int FollowDependency(const char* id, TList* pTgtList=NULL);
139
140   /**
141    * Get the number of resolved sources.
142    * @return number of resolved sources
143    */
144   int GetNofSources() {return fListSources.size();}
145
146   /**
147    * Check resolving status.
148    * @param bAuto resolve if ==1 
149    * @return 1 if all sources resolved
150    */
151   int SourcesResolved(int bAuto=0);
152
153   /**
154    * Start iteration and get the first source.
155    * @result pointer to the first configuration descriptor
156    */
157   AliHLTConfiguration* GetFirstSource();
158
159   /**
160    * Continue iteration and get the next source.
161    * @result pointer to the next configuration descriptor in the list
162    */
163   AliHLTConfiguration* GetNextSource();
164
165   /**
166    * Invalidate a dependency and mark the configuration to be re-evaluted. 
167    * @param pConf pointer to configuration descriptor
168    */
169   int InvalidateSource(AliHLTConfiguration* pConf);
170
171   /**
172    * Mark the configuration to be re-evaluted.
173    */
174   int InvalidateSources() {fNofSources=-1; return 0;}
175
176   /**
177    * Get the arguments array.
178    * @param pArgv   pointer to receive argument array pointer
179    * @return argc if succeeded, neg. error code if failed
180    */
181   int GetArguments(const char*** pArgv);
182
183   /**
184    * Get output buffer size.
185    * @return size in byte or -1 if not specified
186    */
187   int GetOutputBufferSize() const {return fBufferSize;}
188  protected:
189   
190
191  private:
192   /* extract the source configurations from the sources string
193    */
194   int ExtractSources();
195
196   /* extract arguments from the argument string
197    */
198   int ExtractArguments();
199
200   /**
201    * Helper function to build a vector from an argument string
202    * @param arg       pointer to argument string
203    * @param argList   target to receive the argument list
204    */
205   int InterpreteString(const char* arg, vector<char*>& argList) const;
206
207   /**
208    * Convert buffer size string to number
209    */
210   int ConvertSizeString(const char* strSize) const;
211
212   /** id of this configuration */
213   TString fID;                                                     // see above
214   /** component id of this configuration */
215   TString fComponent;                                              // see above
216
217   /** the <i>sources</i> string as passed to the constructor */
218   TString fStringSources;                                          // see above
219   /** number of resolved sources, -1 indicates re-evaluation */
220   int fNofSources;                                                 // see above
221   /** list of sources */
222   vector<AliHLTConfiguration*> fListSources;                       // see above
223   /** iterator for the above list */
224   vector<AliHLTConfiguration*>::iterator fListSrcElement;          // see above
225
226   /**
227    * The argument string as passed to the constructor.
228    * Specifies the arguments for the Analysys component. The string will
229    * be parsed and the separated arguments stored in the @ref fArgv array
230    * and @ref fArgc member.
231    */
232   TString fArguments;                                              // see above
233   /** number of arguments */
234   int fArgc;                                                       // see above
235   /** argument array */
236   char** fArgv;                                                    // see above
237
238   /** size of the output buffer */
239   int fBufferSize;                                                 // see above
240
241   /** the instance of the global configuration handler */
242   static AliHLTConfigurationHandler* fgConfigurationHandler;       //! transient
243
244   ClassDef(AliHLTConfiguration, 0);
245 };
246
247 #endif