Adding analysis for Flat ESD case
[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 "AliHLTGlobalFlatEsdConverterComponent.h"
35 #include "AliHLTGlobalEsdConverterComponent.h"
36 #include "AliHLTGlobalVertexerComponent.h"
37 #include "AliHLTGlobalOfflineVertexerComponent.h"
38 #include "AliHLTV0HistoComponent.h"
39 #include "AliHLTdNdPtAnalysisComponent.h"
40 #include "AliHLTdNdPtAnalysisMergerComponent.h"
41 #include "AliHLTGlobalVertexerHistoComponent.h"
42 #include "AliHLTGlobalHistoComponent.h"
43 #include "AliHLTGlobalHistoCollector.h"
44 #include "AliHLTGlobalDCSPublisherComponent.h"
45 #include "AliHLTMultiplicityCorrelationsComponent.h"
46 #include "AliHLTPrimaryVertexFinderComponent.h"
47 #include "AliHLTV0FinderComponent.h"
48 #include "AliHLTAnaManagerComponent.h"
49 #include "AliHLTFlatAnaManagerComponent.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 AliHLTGlobalFlatEsdTestComponent);
82   pHandler->AddComponent(new AliHLTGlobalTrackMergerComponent);
83   pHandler->AddComponent(new AliHLTGlobalFlatEsdConverterComponent);
84   pHandler->AddComponent(new AliHLTGlobalEsdConverterComponent);
85   pHandler->AddComponent(new AliHLTGlobalVertexerComponent);
86   pHandler->AddComponent(new AliHLTGlobalOfflineVertexerComponent);
87   pHandler->AddComponent(new AliHLTGlobalVertexerHistoComponent);
88   pHandler->AddComponent(new AliHLTGlobalHistoComponent);
89   pHandler->AddComponent(new AliHLTV0HistoComponent );
90   //pHandler->AddComponent(new AliHLTdNdPtAnalysisComponent );
91   //pHandler->AddComponent(new AliHLTdNdPtAnalysisMergerComponent );
92   pHandler->AddComponent(new AliHLTMultiplicityCorrelationsComponent );
93   pHandler->AddComponent(new AliHLTPrimaryVertexFinderComponent);
94   pHandler->AddComponent(new AliHLTV0FinderComponent);
95   pHandler->AddComponent(new AliHLTGlobalHistoCollector );
96   pHandler->AddComponent(new AliHLTGlobalDCSPublisherComponent );
97   pHandler->AddComponent(new AliHLTAnaManagerComponent);
98   pHandler->AddComponent(new AliHLTFlatAnaManagerComponent);
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
172   ///////////////////////////////////////////////////////////////////////////////////////////////////
173   //
174   // global histograms
175   //
176   TString vertexhistoInput="GLOBAL-vertexer ITS-SPD-vertexer";
177
178   // check for the availibility
179   pTokens=vertexhistoInput.Tokenize(" ");
180   vertexhistoInput="";
181   if (pTokens) {
182     for (int n=0; n<pTokens->GetEntriesFast(); n++) {
183       TString module=((TObjString*)pTokens->At(n))->GetString();
184       if (pHandler->FindConfiguration(module.Data())) {
185         vertexhistoInput+=module;
186         vertexhistoInput+=" ";
187       }
188     }
189     delete pTokens;
190     pTokens=NULL;
191   }
192
193   if (!vertexhistoInput.IsNull()) {
194     HLTInfo("Configuring inputs to global HLT Vertex histogram component: %s", vertexhistoInput.Data());
195     pHandler->CreateConfiguration("GLOBAL-vertexhisto","GlobalVertexerHisto", vertexhistoInput.Data(),"");
196   } else {
197     HLTWarning("No inputs to global HLT Vertex histogram component found");
198   }
199   
200   //pHandler->CreateConfiguration("GLOBAL-dNdPtAnalysis", "dNdPtAnalysis", "GLOBAL-esd-converter", "");
201  
202   pHandler->CreateConfiguration("GLOBAL-MultCorr", "MultiplicityCorrelations", "GLOBAL-esd-converter", "");
203
204   return 0;
205 }
206
207 const char* AliHLTGlobalAgent::GetReconstructionChains(AliRawReader* /*rawReader*/,
208                                                     AliRunLoader* runloader) const
209 {
210   // see header file for class documentation
211   if (runloader) {
212     // reconstruction chains for AliRoot simulation
213     // Note: run loader is only available while running embedded into
214     // AliRoot simulation
215     return "GLOBAL-esd-converter";    
216   }
217   return NULL;
218 }
219
220 const char* AliHLTGlobalAgent::GetRequiredComponentLibraries() const
221 {
222   // see header file for class documentation
223
224   return "";
225 }
226
227 int AliHLTGlobalAgent::GetHandlerDescription(AliHLTComponentDataType /*dt*/,
228                                              AliHLTUInt32_t /*spec*/,
229                                              AliHLTOUTHandlerDesc& /*desc*/) const
230 {
231   // see header file for class documentation
232
233   return 0;
234 }
235
236 AliHLTOUTHandler* AliHLTGlobalAgent::GetOutputHandler(AliHLTComponentDataType /*dt*/,
237                                                       AliHLTUInt32_t /*spec*/)
238 {
239   // see header file for class documentation
240
241   return NULL;
242 }
243
244 int AliHLTGlobalAgent::DeleteOutputHandler(AliHLTOUTHandler* pInstance)
245 {
246   // see header file for class documentation
247   if (pInstance==NULL) return -EINVAL;
248
249   return 0;
250 }
251
252 AliHLTModulePreprocessor* AliHLTGlobalAgent::GetPreprocessor()
253 {
254   // create the preprocessor plugin
255   return new AliHLTGlobalPreprocessor;
256 }