- adapted to AliRoot logging system, messages printed out via AliRoot
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTSystem.h
1 // @(#) $Id$
2
3 #ifndef ALIHLTSYSTEM_H
4 #define ALIHLTSYSTEM_H
5 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
6  * See cxx source for full Copyright notice                               */
7
8 /** @file   AliHLTSystem.h
9     @author Matthias Richter
10     @date   
11     @brief  Global HLT module management and AliRoot integration.
12     @note   The class is used in Offline (AliRoot) context
13 */
14
15 /**
16  * @defgroup alihlt_system HLT integration into AliRoot
17  * This section describes the HLT integration into AliRoot.
18  */
19
20 #include "AliHLTLogging.h"
21 #include <TList.h>
22
23 class AliHLTComponentHandler;
24 class AliHLTConfiguration;
25 class AliHLTConfigurationHandler;
26 class AliHLTTask;
27
28 /**
29  * @class AliHLTSystem
30  * Main class for the HLT integration into AliRoot.
31  * The class handles a list of configurations. Configurations are translated
32  * into task lists which can be executed. 
33  *
34  * @note This class is only used for the @ref alihlt_system.
35  *
36  * @ingroup alihlt_system
37  */
38 class AliHLTSystem : public AliHLTLogging {
39  public:
40   /** default constructor */
41   AliHLTSystem();
42   /** not a valid copy constructor, defined according to effective C++ style */
43   AliHLTSystem(const AliHLTSystem&);
44   /** not a valid assignment op, but defined according to effective C++ style */
45   AliHLTSystem& operator=(const AliHLTSystem&);
46   /** destructor */
47   virtual ~AliHLTSystem();
48
49   /**
50    * Pointer to an instance of @ref AliHLTComponentHandler.
51    */
52   AliHLTComponentHandler* fpComponentHandler;                      //! transient
53
54   /**
55    * Pointer to an instance of @ref AliHLTConfigurationHandler.
56    */
57   AliHLTConfigurationHandler* fpConfigurationHandler;              //! transient
58
59   /**
60    * Add a configuration to the end of the list.
61    * @param pConf    pointer to configuration to add
62    */
63   int AddConfiguration(AliHLTConfiguration* pConf);
64
65   /**
66    * Insert a configuration to the end of the list after the specified
67    * configuration.
68    * @param pConf    pointer to configuration to insert
69    * @param pPrec    pointer to configuration to insert the new one after
70    */
71   int InsertConfiguration(AliHLTConfiguration* pConf, AliHLTConfiguration* pPrec);
72
73   /**
74    * Remove a configuration from the list.
75    * @param pConf    pointer to configuration to delete
76    */
77   int DeleteConfiguration(AliHLTConfiguration* pConf);
78
79   /**
80    * Build a task list from a configuration object.
81    * This method is used to build the tasks from the 'master' configuration
82    * objects which are added to the HLT system handler. This is an iterative
83    * process since the task might depend upon other configurations. For each
84    * configuration object which has not yet been converted into a task, the
85    * method will be called iteratively. Finally, after building all tasks which
86    * the current one depends on have been created, the task is inserted to the
87    * list of tasks with the InsertTask method.
88    * @param pConf    pointer to configuration to build the task list from
89    */
90   int BuildTaskList(AliHLTConfiguration* pConf);
91
92   /**
93    * Clean the list of tasks and delete all the task objects.
94    */
95   int CleanTaskList();
96
97   /**
98    * Insert a task to the task list.
99    * The method first checks whether all dependencies are resolved (i.e. exist 
100    * already in the task list). During this iteration the cross links between
101    * the tasks are set as well. If all dependencies are resolved, the task is
102    * added at the end of the list.
103    * @param pTask    pointer to task to add
104    */
105   int InsertTask(AliHLTTask* pTask);
106
107   /**
108    * Find a task with an id.
109    * @param id       CONFIGURATION id (not a COMPONENT id!)
110    */
111   AliHLTTask* FindTask(const char* id);
112
113   /**
114    * Print the task list.
115    */
116   void PrintTaskList();
117
118   /**
119    * Run the task list.
120    * The method checks whether the task list has already been build. If not,
121    * or the configuration list has been changed, the @ref BuildTaskList
122    * method is scalled
123    * All tasks of the list will be subsequently processed for each event.
124    * @param iNofEvents number of events
125    * @return neg error code if failed
126    */
127   int Run(Int_t iNofEvents=1);
128
129   /**
130    * Init all tasks from the list.
131    * The @ref AliHLTTask::Init method is called for each task, the components
132    * will be created.
133    * @return neg error code if failed
134    */
135   int InitTasks();
136
137   /**
138    * Start task list.
139    * The @ref AliHLTTask::StartRun method is called for each task, the
140    * components will be prepared for event processing.
141    * @return neg error code if failed
142    */
143   int StartTasks();
144
145   /**
146    * Process task list.
147    * The @ref AliHLTTask::ProcessTask method is called for each task.
148    * @return neg error code if failed
149    */
150   int ProcessTasks(Int_t eventNo);
151
152   /**
153    * Stop task list.
154    * The @ref AliHLTTask::EndRun method is called for each task, the components
155    * will be cleaned after event processing.
156    * @return neg error code if failed
157    */
158   int StopTasks();
159
160   /**
161    * De-init all tasks from the list.
162    * The @ref AliHLTTask::Deinit method is called for each task, the components
163    * will be deleted.
164    * @return neg error code if failed
165    */
166   int DeinitTasks();
167
168   /**
169    * The memory allocation function for components.
170    * This function is part of the running environment of the components.
171    */
172   static void* AllocMemory( void* param, unsigned long size );
173
174  protected:
175  
176  private:
177 /*   TList fConfList; */
178 /*   int fbListChanged; */
179
180   TList fTaskList;                                                 // see above
181
182   /** the number of instances of AliHLTSystem */
183   static int fgNofInstances;                                       // see above
184
185  private:
186   ClassDef(AliHLTSystem, 2);
187 };
188 #endif
189