added this pointer to special constructor, first version of esd to flat conversion...
[u/mrichter/AliRoot.git] / HLT / global / AliHLTGlobalAgent.cxx
1 // $Id$
2
3 //**************************************************************************
4 //* This file is property of and copyright by the ALICE HLT Project        * 
5 //* ALICE Experiment at CERN, All rights reserved.                         *
6 //*                                                                        *
7 //* Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
8 //*                  for The ALICE HLT Project.                            *
9 //*                                                                        *
10 //* Permission to use, copy, modify and distribute this software and its   *
11 //* documentation strictly for non-commercial purposes is hereby granted   *
12 //* without fee, provided that the above copyright notice appears in all   *
13 //* copies and that both the copyright notice and this permission notice   *
14 //* appear in the supporting documentation. The authors make no claims     *
15 //* about the suitability of this software for any purpose. It is          *
16 //* provided "as is" without express or implied warranty.                  *
17 //**************************************************************************
18
19 /** @file   AliHLTGlobalAgent.cxx
20     @author Matthias Richter
21     @date   
22     @brief  Agent of the libAliHLTGlobal library
23 */
24
25 #include <cassert>
26 #include "AliHLTGlobalAgent.h"
27 #include "AliHLTConfigurationHandler.h"
28 #include "TObjString.h"
29 #include "TObjArray.h"
30 #include "AliHLTGlobalFlatEsdTestComponent.h"
31
32 // header files of library components
33 #include "AliHLTGlobalTrackMergerComponent.h"
34 //#include "AliHLTGlobalEsdToFlatConverterComponent.h"
35 #include "AliHLTGlobalFlatEsdConverterComponent.h"
36 #include "AliHLTGlobalEsdConverterComponent.h"
37 #include "AliHLTGlobalVertexerComponent.h"
38 #include "AliHLTGlobalOfflineVertexerComponent.h"
39 #include "AliHLTV0HistoComponent.h"
40 #include "AliHLTdNdPtAnalysisComponent.h"
41 #include "AliHLTdNdPtAnalysisMergerComponent.h"
42 #include "AliHLTGlobalVertexerHistoComponent.h"
43 #include "AliHLTGlobalHistoComponent.h"
44 #include "AliHLTGlobalHistoCollector.h"
45 #include "AliHLTGlobalDCSPublisherComponent.h"
46 #include "AliHLTMultiplicityCorrelationsComponent.h"
47 #include "AliHLTPrimaryVertexFinderComponent.h"
48 #include "AliHLTV0FinderComponent.h"
49 #include "AliHLTAnaManagerComponent.h"
50
51 // header file for preprocessor plugin
52 #include "AliHLTGlobalPreprocessor.h"
53
54 /** global instance for agent registration */
55 AliHLTGlobalAgent gAliHLTGlobalAgent;
56
57 /** ROOT macro for the implementation of ROOT specific class methods */
58 ClassImp(AliHLTGlobalAgent)
59
60 AliHLTGlobalAgent::AliHLTGlobalAgent()
61   :
62   AliHLTModuleAgent("Global")
63 {
64   // see header file for class documentation
65   // or
66   // refer to README to build package
67   // or
68   // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
69 }
70
71 AliHLTGlobalAgent::~AliHLTGlobalAgent()
72 {
73   // see header file for class documentation
74 }
75
76 int AliHLTGlobalAgent::RegisterComponents(AliHLTComponentHandler* pHandler) const
77 {
78   // see header file for class documentation
79   assert(pHandler);
80   if (!pHandler) return -EINVAL;
81   //pHandler->AddComponent(new AliHLTGlobalEsdToFlatConverterComponent);
82   pHandler->AddComponent(new AliHLTGlobalFlatEsdTestComponent);
83   pHandler->AddComponent(new AliHLTGlobalTrackMergerComponent);
84   pHandler->AddComponent(new AliHLTGlobalFlatEsdConverterComponent);
85   pHandler->AddComponent(new AliHLTGlobalEsdConverterComponent);
86   pHandler->AddComponent(new AliHLTGlobalVertexerComponent);
87   pHandler->AddComponent(new AliHLTGlobalOfflineVertexerComponent);
88   pHandler->AddComponent(new AliHLTGlobalVertexerHistoComponent);
89   pHandler->AddComponent(new AliHLTGlobalHistoComponent);
90   pHandler->AddComponent(new AliHLTV0HistoComponent );
91   //pHandler->AddComponent(new AliHLTdNdPtAnalysisComponent );
92   //pHandler->AddComponent(new AliHLTdNdPtAnalysisMergerComponent );
93   pHandler->AddComponent(new AliHLTMultiplicityCorrelationsComponent );
94   pHandler->AddComponent(new AliHLTPrimaryVertexFinderComponent);
95   pHandler->AddComponent(new AliHLTV0FinderComponent);
96   pHandler->AddComponent(new AliHLTGlobalHistoCollector );
97   pHandler->AddComponent(new AliHLTGlobalDCSPublisherComponent );
98   pHandler->AddComponent(new AliHLTAnaManagerComponent);
99   return 0;
100 }
101
102 int AliHLTGlobalAgent::CreateConfigurations(AliHLTConfigurationHandler* pHandler,
103                                             AliRawReader* /*rawReader*/,
104                                             AliRunLoader* /*runloader*/) const
105 {
106   // see header file for class documentation
107   if (!pHandler) return -EINVAL;
108   TObjArray* pTokens=NULL;
109
110   ///////////////////////////////////////////////////////////////////////////////////////////////////
111   //
112   // global vertexer component
113   //
114   // define the inputs 
115   TString vertexerInputs="TPC-globalmerger ITS-tracker";
116
117   // check for the availibility
118   pTokens=vertexerInputs.Tokenize(" ");
119   vertexerInputs="";
120   if (pTokens) {
121     for (int n=0; n<pTokens->GetEntriesFast(); n++) {
122       TString module=((TObjString*)pTokens->At(n))->GetString();
123       if (pHandler->FindConfiguration(module.Data())) {
124         vertexerInputs+=module;
125         vertexerInputs+=" ";
126       }
127     }
128     delete pTokens;
129     pTokens=NULL;
130   }
131   cout<<endl<<"\n\nConfiguring inputs to global HLT Vertexer: %s\n\n"<<vertexerInputs.Data()<<endl<<endl;
132   if (!vertexerInputs.IsNull()) {
133     HLTInfo("\n\nConfiguring inputs to global HLT Vertexer: %s\n\n", vertexerInputs.Data());
134     pHandler->CreateConfiguration("GLOBAL-vertexer","GlobalVertexer",vertexerInputs,"");
135   } else {
136     HLTWarning("\n\nNo inputs to global HLT Vertexer found\n\n");
137   }
138
139   /////////////////////////////////////////////////////////////////////////////////////
140   //
141   // assembly of the global ESD
142
143   // define the inputs to the global ESD
144   TString esdInputs="TPC-globalmerger TPC-mcTrackMarker ITS-tracker TPC-ClusterTransformation GLOBAL-vertexer ITS-SPD-vertexer TPC-dEdx VZERO-RECO";
145
146   // check for the availibility
147   pTokens=esdInputs.Tokenize(" ");
148   esdInputs="";
149   if (pTokens) {
150     for (int n=0; n<pTokens->GetEntriesFast(); n++) {
151       TString module=((TObjString*)pTokens->At(n))->GetString();
152       if (pHandler->FindConfiguration(module.Data())) {
153         esdInputs+=module;
154         esdInputs+=" ";
155       }
156     }
157     delete pTokens;
158     pTokens=NULL;
159   }
160
161   if (esdInputs.Length()>0) {
162     esdInputs+=" TPC-ClusterTransformation";
163     HLTInfo("Configuring inputs to global HLT ESD: %s", esdInputs.Data());
164   } else {
165     HLTWarning("No inputs to global HLT ESD found");
166   }
167   
168   pHandler->CreateConfiguration("GLOBAL-flat-esd-converter", "GlobalFlatEsdConverter", esdInputs.Data(), "");
169   pHandler->CreateConfiguration("GLOBAL-esd-converter", "GlobalEsdConverter", esdInputs.Data(), "");
170   pHandler->CreateConfiguration("GLOBAL-flat-esd-test", "GlobalFlatEsdTest", "GLOBAL-esd-converter GLOBAL-flat-esd-converter", "");
171   //pHandler->CreateConfiguration("esd-to-flat-conversion", "GlobalEsdToFlatConverter", "GLOBAL-esd-converter", "");
172
173   ///////////////////////////////////////////////////////////////////////////////////////////////////
174   //
175   // global histograms
176   //
177   TString vertexhistoInput="GLOBAL-vertexer ITS-SPD-vertexer";
178
179   // check for the availibility
180   pTokens=vertexhistoInput.Tokenize(" ");
181   vertexhistoInput="";
182   if (pTokens) {
183     for (int n=0; n<pTokens->GetEntriesFast(); n++) {
184       TString module=((TObjString*)pTokens->At(n))->GetString();
185       if (pHandler->FindConfiguration(module.Data())) {
186         vertexhistoInput+=module;
187         vertexhistoInput+=" ";
188       }
189     }
190     delete pTokens;
191     pTokens=NULL;
192   }
193
194   if (!vertexhistoInput.IsNull()) {
195     HLTInfo("Configuring inputs to global HLT Vertex histogram component: %s", vertexhistoInput.Data());
196     pHandler->CreateConfiguration("GLOBAL-vertexhisto","GlobalVertexerHisto", vertexhistoInput.Data(),"");
197   } else {
198     HLTWarning("No inputs to global HLT Vertex histogram component found");
199   }
200   
201   //pHandler->CreateConfiguration("GLOBAL-dNdPtAnalysis", "dNdPtAnalysis", "GLOBAL-esd-converter", "");
202  
203   pHandler->CreateConfiguration("GLOBAL-MultCorr", "MultiplicityCorrelations", "GLOBAL-esd-converter", "");
204
205   return 0;
206 }
207
208 const char* AliHLTGlobalAgent::GetReconstructionChains(AliRawReader* /*rawReader*/,
209                                                     AliRunLoader* runloader) const
210 {
211   // see header file for class documentation
212   if (runloader) {
213     // reconstruction chains for AliRoot simulation
214     // Note: run loader is only available while running embedded into
215     // AliRoot simulation
216     return "GLOBAL-esd-converter";    
217   }
218   return NULL;
219 }
220
221 const char* AliHLTGlobalAgent::GetRequiredComponentLibraries() const
222 {
223   // see header file for class documentation
224
225   return "";
226 }
227
228 int AliHLTGlobalAgent::GetHandlerDescription(AliHLTComponentDataType /*dt*/,
229                                              AliHLTUInt32_t /*spec*/,
230                                              AliHLTOUTHandlerDesc& /*desc*/) const
231 {
232   // see header file for class documentation
233
234   return 0;
235 }
236
237 AliHLTOUTHandler* AliHLTGlobalAgent::GetOutputHandler(AliHLTComponentDataType /*dt*/,
238                                                       AliHLTUInt32_t /*spec*/)
239 {
240   // see header file for class documentation
241
242   return NULL;
243 }
244
245 int AliHLTGlobalAgent::DeleteOutputHandler(AliHLTOUTHandler* pInstance)
246 {
247   // see header file for class documentation
248   if (pInstance==NULL) return -EINVAL;
249
250   return 0;
251 }
252
253 AliHLTModulePreprocessor* AliHLTGlobalAgent::GetPreprocessor()
254 {
255   // create the preprocessor plugin
256   return new AliHLTGlobalPreprocessor;
257 }