5c661749df6957293e185d8bf1fee81118fa5d64
[u/mrichter/AliRoot.git] / HLT / sim / AliHLTSimulation.h
1 //-*- Mode: C++ -*-
2 // @(#) $Id$
3
4 #ifndef ALIHLTSIMULATION_H
5 #define ALIHLTSIMULATION_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   AliHLTSimulation.h
11     @author Matthias Richter
12     @date   
13     @brief  Binding class for HLT simulation in AliRoot
14
15 // see below for class documentation
16 // or
17 // refer to README to build package
18 // or
19 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
20                                                                           */
21 /**
22  * @defgroup alihlt_simulation HLT simulation in AliRoot
23  * This section describes the the simulation of the HLT in AliRoot.
24  */
25
26 #include "TObject.h"
27 #include "TString.h"
28 class AliRunLoader;
29 class AliHLTSystem;
30 class AliRawReader;
31
32 /**
33  * @class AliHLTSimulation
34  * Plugin for HLT reconstruction embedded into <tt>AliSimulation</tt>.
35  *
36  * HLT has a special role in the normal data flow  of simulation and
37  * reconstruction. Since the HLT reconstruction and analysis runs on-line
38  * on the HLT farm, the raw data produced by HLT as a detector contains
39  * already reconstructed events. Consequently, the HLT response has to be
40  * simulated as well as the data of all other detectors. Since the detector
41  * data is needed, the HLT simulation is run at the end of AliSimulation.
42  * As a matter of fact, HLT always reconstructs data, <em><b>HLT simulation
43  * </b></em> means <em><b>HLT reconstruction embedded into AliRoot</b></em>.
44  *
45  * The AliHLTSimulation class is the steering class called from AliSimulation.
46  * An instance of AliHLTSystem is used to run the chains defined by the
47  * available libraries or a configuration macro.
48  *
49  * The libraries to be loaded can be specified as an option to AliSimulation.
50  * <pre>
51  * AliSimulation sim;
52  * sim.SetRunHLT("libAliHLTSample.so");
53  * </pre>
54  * will only load <tt>libAliHLTSample.so</tt>
55  *
56  * Other available options:
57  * \li loglevel=<i>level</i>                                            <br>
58  *     logging level for this processing, default level is 0x79 filtering
59  *     out everything below level 'warning'. 0x7c allows info messages as
60  *     well, 0x3f is the highest loglevel.
61  * \li alilog=off                                                       <br>
62  *     disable redirection of log messages to AliLog class
63  * \li config=<i>macro</i>                                              <br>
64  *     configuration macro: normal ROOT macro defining HLT component
65  *     configurations by means of AliHLTConfiguration.
66  * \li chains=<i>configuration</i>                                      <br>
67  *     comma separated list of configurations to be run during simulation
68  *
69  */
70 class AliHLTSimulation : public TObject {
71  public:
72   /** create an instance of the class */
73   static AliHLTSimulation* CreateInstance();
74
75   /** delete an instance */
76   static int DeleteInstance(AliHLTSimulation* pSim);
77
78   /** init simulation */
79   int Init(AliRunLoader* pRunLoader, const char* options);
80
81   /** run simulation with an instance of the run loader */
82   int Run(AliRunLoader* pRunLoader);
83
84  private:
85   /** standard constructor */
86   AliHLTSimulation();
87   /** copy constructor prohibited */
88   AliHLTSimulation(const AliHLTSimulation&);
89   /** assignment operator prohibited */
90   AliHLTSimulation& operator=(const AliHLTSimulation&);
91   /** standard destructor */
92   ~AliHLTSimulation();
93
94   /* current options */
95   TString fOptions;                                                   //!transient
96
97   /* HLT steering object */
98   AliHLTSystem* fpSystem;                                             //!transient
99
100   /* RAW reader instance for chains which need RAW data as input */
101   AliRawReader* fpRawReader;                                            //!transient
102
103   ClassDef(AliHLTSimulation, 1)
104 };
105
106 #define ALIHLTSIMULATION_LIBRARY             "libHLTsim.so"
107 #define ALIHLTSIMULATION_LIBRARY_VERSION     0
108 #define ALIHLTSIMULATION_CREATE_INSTANCE     "AliHLTSimulationCreateInstance"
109 #define ALIHLTSIMULATION_DELETE_INSTANCE     "AliHLTSimulationDeleteInstance"
110 #define ALIHLTSIMULATION_INIT                "AliHLTSimulationInit"
111 #define ALIHLTSIMULATION_RUN                 "AliHLTSimulationRun"
112 #define ALIHLTSIMULATION_GET_LIBRARY_VERSION "AliHLTSimulationGetLibraryVersion"
113
114 #ifdef __cplusplus
115 extern "C" {
116 #endif
117   typedef AliHLTSimulation* (*AliHLTSimulationCreateInstance_t)();
118   typedef int (*AliHLTSimulationDeleteInstance_t)(AliHLTSimulation* pSim);
119   typedef int (*AliHLTSimulationInit_t)(AliHLTSimulation* pSim, AliRunLoader* pRunLoader, const char* options);
120   typedef int (*AliHLTSimulationRun_t)(AliHLTSimulation* pSim, AliRunLoader* pRunLoader);
121   typedef int (*AliHLTSimulationGetLibraryVersion_t)();
122
123   /**
124    * Create an instance of the AliHLTSimulation class
125    */
126   AliHLTSimulation* AliHLTSimulationCreateInstance();
127   /**
128    * Delete an instance of the AliHLTSimulation class
129    */
130   int AliHLTSimulationDeleteInstance(AliHLTSimulation* pSim);
131   /**
132    * Set options for an instance
133    */
134   int AliHLTSimulationInit(AliHLTSimulation* pSim, AliRunLoader* pRunLoader, const char* options);
135   /**
136    * Run simulation for an instance and run loader
137    */
138   int AliHLTSimulationRun(AliHLTSimulation* pSim, AliRunLoader* pRunLoader);
139   /**
140    * Get version no of the library/class interface
141    */
142   int AliHLTSimulationGetLibraryVersion();
143 #ifdef __cplusplus
144 }
145 #endif
146
147 #endif