new analysis classes, not yet in build system
[u/mrichter/AliRoot.git] / HLT / JET / analysis / AliHLTJETAnalysisComponent.cxx
1 //-*- Mode: C++ -*-
2 // $Id: AliHLTJETAnalysisComponent.cxx $
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: Jochen Thaeder <thaeder@kip.uni-heidelberg.de>        *
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   AliHLTJETAnalysisComponent.cxx
20     @author Jochen Thaeder <thaeder@kip.uni-heidelberg.de>
21     @date   
22     @brief   Component to run the ConeJet jetfinder
23 */
24
25 #if __GNUC__>= 3
26 using namespace std;
27 #endif
28
29 #include <cstdlib>
30 #include <cerrno>
31 #include <sys/time.h>
32
33 #include "TString.h"
34 #include "TObjString.h"
35 #include "TObjArray.h"
36
37 #include "AliHLTJETAnalysisComponent.h" 
38
39 /** ROOT macro for the implementation of ROOT specific class methods */
40 ClassImp(AliHLTJETAnalysisComponent)
41
42 /*
43  * ---------------------------------------------------------------------------------
44  *                            Constructor / Destructor
45  * ---------------------------------------------------------------------------------
46  */
47
48 // #################################################################################
49 AliHLTJETAnalysisComponent::AliHLTJETAnalysisComponent() :
50   fAnalysisJets(NULL) {
51   // see header file for class documentation
52   // or
53   // refer to README to build package
54   // or
55   // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
56
57 }
58
59 // #################################################################################
60 AliHLTJETAnalysisComponent::~AliHLTJETAnalysisComponent() {
61   // see header file for class documentation
62 }
63
64 /*
65  * ---------------------------------------------------------------------------------
66  * Public functions to implement AliHLTComponent's interface.
67  * These functions are required for the registration process
68  * ---------------------------------------------------------------------------------
69  */
70
71 // #################################################################################
72 const Char_t* AliHLTJETAnalysisComponent::GetComponentID() {
73   // see header file for class documentation
74   return "JETAnalysis";
75 }
76
77 // #################################################################################
78 void AliHLTJETAnalysisComponent::GetInputDataTypes( vector<AliHLTComponentDataType>& list) {
79   // see header file for class documentation
80   list.clear(); 
81   list.push_back( kAliHLTDataTypeJet|kAliHLTDataOriginHLT );
82   list.push_back( kAliHLTDataTypeJet|kAliHLTDataOriginOffline );
83   list.push_back( kAliHLTDataTypeMCObject|kAliHLTDataOriginOffline );
84   list.push_back( kAliHLTDataTypeMCObject|kAliHLTDataOriginHLT );
85 }
86
87 // #################################################################################
88 AliHLTComponentDataType AliHLTJETAnalysisComponent::GetOutputDataType() {
89   // see header file for class documentation
90   return (kAliHLTDataTypeESDObject|kAliHLTDataOriginHLT); // XXX To Be CHANGED
91 }
92
93 // #################################################################################
94 void AliHLTJETAnalysisComponent::GetOutputDataSize( ULong_t& constBase, Double_t& inputMultiplier ) {
95   // see header file for class documentation
96
97   constBase = 20000000;
98   inputMultiplier = 0.3;
99 }
100
101 // #################################################################################
102 AliHLTComponent* AliHLTJETAnalysisComponent::Spawn() {
103   // see header file for class documentation
104   return new AliHLTJETAnalysisComponent();
105 }
106
107 /*
108  * ---------------------------------------------------------------------------------
109  * Protected functions to implement AliHLTComponent's interface.
110  * These functions provide initialization as well as the actual processing
111  * capabilities of the component. 
112  * ---------------------------------------------------------------------------------
113  */
114
115 // #################################################################################
116 Int_t AliHLTJETAnalysisComponent::DoInit( Int_t argc, const Char_t** argv ) {
117   // see header file for class documentation
118
119   Int_t iResult = 0;
120
121   if ( fAnalysisJets )
122     return -EINPROGRESS;
123
124   Int_t bMissingParam=0;
125   TString argument="";
126
127   // -- Loop over all arguments
128   for ( Int_t iter = 0; iter<argc && iResult>=0; iter++) {
129     argument=argv[iter];
130
131     if (argument.IsNull()) 
132       continue;
133
134 #if 0
135     /*
136     // -- nEvents
137     if ( !argument.CompareTo("-nevents") ) {
138     if ((bMissingParam=(++iter>=argc))) break;
139     
140     TString parameter(argv[iter]);
141     parameter.Remove(TString::kLeading, ' ');
142     
143     if ( parameter.IsDigit() ) {
144     fNEventsMax = parameter.Atoi() - 1;
145     }
146     else {
147     HLTError("Wrong parameter %s for argument %s.", parameter.Data(), argument.Data());
148     iResult=-EINVAL;
149     }
150     } 
151     
152     // -- Argument not known
153     else {
154     HLTError("Unknown argument %s.", argument.Data());
155     iResult = -EINVAL;
156     }
157     */
158 #endif
159   } // for ( Int iter = 0; iter<argc && iResult>=0; iter++) {
160   
161   // -- Check if parameter is missing
162   if ( bMissingParam ) {
163     HLTError("Missing parameter for argument %s.", argument.Data());
164     iResult=-EINVAL;
165   }
166
167   if ( !iResult ) {
168     fAnalysisJets = new AliHLTJETAnalysisJets();
169     fAnalysisJets->Initialize();
170   }
171   
172   return iResult;
173 }
174
175 // #################################################################################
176 Int_t AliHLTJETAnalysisComponent::DoDeinit() {
177   // see header file for class documentation
178
179   if ( fAnalysisJets )
180     delete fAnalysisJets;
181   fAnalysisJets = NULL;
182
183   return 0;
184 }
185
186 // #################################################################################
187 Int_t AliHLTJETAnalysisComponent::DoEvent( const AliHLTComponentEventData& /*evtData*/,
188                                           AliHLTComponentTriggerData& /*trigData*/ ) {
189   // see header file for class documentation
190
191   Int_t iResult = 0;
192
193   const TObject* iter = NULL;
194
195   // ------------------------------------------------
196   // -- DATA Event 
197   // ------------------------------------------------
198   if ( IsDataEvent() ) {
199
200     fAnalysisJets->ResetEvent();
201     
202     // -- Loop over jet objects
203     // ------------------------------
204     for ( iter=GetFirstInputObject(kAliHLTDataTypeJet|kAliHLTDataOriginHLT); 
205           iter != NULL && !iResult; iter=GetNextInputObject() ) {
206       
207       fAnalysisJets->SetJets(reinterpret_cast<AliHLTJETJets*>(const_cast<TObject*>(iter)));
208     }
209     
210     // -- ADD MC Object -- On-line
211     // ------------------------------
212     for ( iter=GetFirstInputObject(kAliHLTDataTypeMCObject|kAliHLTDataOriginHLT); 
213           iter != NULL && !iResult; iter=GetNextInputObject() ) {
214       
215       fAnalysisJets->SetHLTMC(reinterpret_cast<AliHLTMCEvent*>(const_cast<TObject*>(iter)));
216     }
217         
218     // -- Process event
219     // ------------------
220     iResult = fAnalysisJets->Analyze();
221   }
222
223   // ------------------------------------------------
224   // -- DATA Event 
225   // ------------------------------------------------
226   else {
227     if ( GetFirstInputBlock(kAliHLTDataTypeEOR) ) {
228       PushBack(fAnalysisJets, kAliHLTDataTypeJet|kAliHLTDataOriginHLT, GetSpecification());
229     }
230   }
231    
232   return iResult;
233 }