]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLTANALYSIS/JET/fastjet/AliHLTJETFastJetComponent.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / HLTANALYSIS / JET / fastjet / AliHLTJETFastJetComponent.cxx
CommitLineData
1f9fec4a 1//-*- Mode: C++ -*-
2// $Id: $
3
4//**************************************************************************
5//* This file is property of and copyright by the ALICE HLT Project *
6//* ALICE Experiment at CERN, All rights reserved. *
7//* *
438118d4 8//* Primary Authors: Jochen Thaeder <jochen@thaeder.de> *
1f9fec4a 9//* for The ALICE HLT Project. *
10//* *
11//* Permission to use, copy, modify and distribute this software and its *
12//* documentation strictly for non-commercial purposes is hereby granted *
13//* without fee, provided that the above copyright notice appears in all *
14//* copies and that both the copyright notice and this permission notice *
15//* appear in the supporting documentation. The authors make no claims *
16//* about the suitability of this software for any purpose. It is *
17//* provided "as is" without express or implied warranty. *
18//**************************************************************************
19
20/** @file AliHLTJETFastJetComponent.cxx
438118d4 21 @author Jochen Thaeder <jochen@thaeder.de>
22 @brief Component to run the FastJet jetfinder
1f9fec4a 23*/
24
1f9fec4a 25#include <cstdlib>
26#include <cerrno>
27#include <sys/time.h>
28
29#include "AliHLTJETFastJetComponent.h"
30
31#include "TString.h"
32#include "TObjString.h"
33
a7f38894 34using namespace std;
35
1f9fec4a 36/** ROOT macro for the implementation of ROOT specific class methods */
37ClassImp(AliHLTJETFastJetComponent)
38
39/*
40 * ---------------------------------------------------------------------------------
41 * Constructor / Destructor
42 * ---------------------------------------------------------------------------------
43 */
44
45// #################################################################################
46AliHLTJETFastJetComponent::AliHLTJETFastJetComponent()
47 :
48 fJetFinder(NULL),
49 fJetHeader(NULL),
50 fJetReader(NULL),
51 fJetReaderHeader(NULL),
52 fTrackCuts(NULL),
53 fJetCuts(NULL),
54 fJets(NULL) {
55 // see header file for class documentation
56 // or
57 // refer to README to build package
58 // or
59 // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
60}
61
62// #################################################################################
63AliHLTJETFastJetComponent::~AliHLTJETFastJetComponent() {
64 // see header file for class documentation
65
66}
67
68/*
69 * ---------------------------------------------------------------------------------
70 * Public functions to implement AliHLTComponent's interface.
71 * These functions are required for the registration process
72 * ---------------------------------------------------------------------------------
73 */
74
75// #################################################################################
76const Char_t* AliHLTJETFastJetComponent::GetComponentID() {
77 // see header file for class documentation
78 return "JETFastJetFinder";
79}
80
81// #################################################################################
82void AliHLTJETFastJetComponent::GetInputDataTypes( vector<AliHLTComponentDataType>& list) {
83 // see header file for class documentation
84 list.clear();
85 list.push_back( kAliHLTDataTypeMCObject|kAliHLTDataOriginHLT );
86 list.push_back( kAliHLTDataTypeESDObject|kAliHLTDataOriginOffline );
87 list.push_back( kAliHLTDataTypeESDObject|kAliHLTDataOriginHLT );
88}
89
90// #################################################################################
91AliHLTComponentDataType AliHLTJETFastJetComponent::GetOutputDataType() {
92 // see header file for class documentation
93 return (kAliHLTDataTypeJet|kAliHLTDataOriginHLT);
94}
95
96// #################################################################################
97void AliHLTJETFastJetComponent::GetOutputDataSize( ULong_t& constBase, Double_t& inputMultiplier ) {
98 // see header file for class documentation
99
100 constBase = 1000;
101 inputMultiplier = 0.3;
102}
103
104// #################################################################################
105AliHLTComponent* AliHLTJETFastJetComponent::Spawn() {
106 // see header file for class documentation
107 return new AliHLTJETFastJetComponent();
108}
109
110/*
111 * ---------------------------------------------------------------------------------
112 * Protected functions to implement AliHLTComponent's interface.
113 * These functions provide initialization as well as the actual processing
114 * capabilities of the component.
115 * ---------------------------------------------------------------------------------
116 */
117
118// #################################################################################
119Int_t AliHLTJETFastJetComponent::DoInit( Int_t argc, const Char_t** argv ) {
120 // see header file for class documentation
121
122 if ( fJetFinder || fJetHeader || fJetReader || fJetReaderHeader ||
123 fTrackCuts || fJetCuts || fJets )
124 return -EINPROGRESS;
125
126 // ---------------------------------------------------------------------
127 // -- Defaults
128 // ---------------------------------------------------------------------
129
130 TString comment = "HLT FastJet interface";
131
132 AliHLTJETBase::JetAlgorithmType_t algorithm = AliHLTJETBase::kKt;
133 Float_t coneRadius = 0.4;
134 Float_t trackCutMinPt = 1.0;
135 Float_t jetCutMinEt = 15.0;
136
137 // ---------------------------------------------------------------------
138 // -- Get Arguments
139 // ---------------------------------------------------------------------
140
141 Int_t iResult = 0;
142 Int_t bMissingParam=0;
143
144 TString argument="";
145
146 // -- Loop over all arguments
147 for ( Int_t iter = 0; iter<argc && iResult>=0; iter++) {
148 argument=argv[iter];
149
150 if (argument.IsNull())
151 continue;
152
153 // -- algorithm
154 if ( !argument.CompareTo("-algorithm") ) {
155 if ((bMissingParam=(++iter>=argc))) break;
156
157 TString parameter(argv[iter]);
158 parameter.Remove(TString::kLeading, ' ');
159
160 if ( !parameter.CompareTo("Kt") ) {
161 algorithm = AliHLTJETBase::kKt;
162 comment += argument;
163 comment += " ";
164 comment += parameter;
165 comment += ' ';
166 }
167 else if ( !parameter.CompareTo("AntiKt") ) {
168 algorithm = AliHLTJETBase::kAntiKt;
169 comment += argument;
170 comment += " ";
171 comment += parameter;
172 comment += ' ';
173 }
174 else {
175 HLTError("Wrong parameter %s for argument %s.", parameter.Data(), argument.Data());
176 iResult=-EINVAL;
177 }
178 }
179
180 // -- coneRadius
181 else if ( !argument.CompareTo("-coneRadius") ) {
182 if ((bMissingParam=(++iter>=argc))) break;
183
184 TString parameter(argv[iter]);
185 parameter.Remove(TString::kLeading, ' ');
186
187 if ( parameter.IsFloat() ) {
188 coneRadius = parameter.Atof();
189 comment += argument;
190 comment += " ";
191 comment += parameter;
192 comment += ' ';
193 }
194 else {
195 HLTError("Wrong parameter %s for argument %s.", parameter.Data(), argument.Data());
196 iResult=-EINVAL;
197 }
198 }
199
200 // -- trackCutMinPt
201 else if ( !argument.CompareTo("-trackCutMinPt") ) {
202 if ((bMissingParam=(++iter>=argc))) break;
203
204 TString parameter(argv[iter]);
205 parameter.Remove(TString::kLeading, ' ');
206
207 if ( parameter.IsFloat() ) {
208 trackCutMinPt = parameter.Atof();
209 comment += argument;
210 comment += " ";
211 comment += parameter;
212 comment += ' ';
213 }
214 else {
215 HLTError("Wrong parameter %s for argument %s.", parameter.Data(), argument.Data());
216 iResult=-EINVAL;
217 }
218 }
219
220 // -- jetCutMinEt
221 else if ( !argument.CompareTo("-jetCutMinEt") ) {
222 if ((bMissingParam=(++iter>=argc))) break;
223
224 TString parameter(argv[iter]);
225 parameter.Remove(TString::kLeading, ' ');
226
227 if ( parameter.IsFloat() ) {
228 jetCutMinEt = parameter.Atof();
229 comment += argument;
230 comment += " ";
231 comment += parameter;
232 comment += ' ';
233 }
234 else {
235 HLTError("Wrong parameter %s for argument %s.", parameter.Data(), argument.Data());
236 iResult=-EINVAL;
237 }
238 }
239
240 // -- Argument not known
241 else {
242 HLTError("Unknown argument %s.", argument.Data());
243 iResult = -EINVAL;
244 }
245 } // for ( Int iter = 0; iter<argc && iResult>=0; iter++) {
246
247 // -- Check if parameter is missing
248 if ( bMissingParam ) {
249 HLTError("Missing parameter for argument %s.", argument.Data());
250 iResult=-EINVAL;
251 }
252
253 if (iResult)
254 return iResult;
255
256 // ---------------------------------------------------------------------
257 // -- Jet Track Cuts
258 // ---------------------------------------------------------------------
259 if ( ! (fTrackCuts = new AliHLTJETTrackCuts()) ) {
260 HLTError("Error instantiating track cuts");
261 return -EINPROGRESS;
262 }
263
264 fTrackCuts->SetChargedOnly( kTRUE );
265 fTrackCuts->SetMinPt( trackCutMinPt );
266
267 // ---------------------------------------------------------------------
268 // -- Jet Jet Cuts
269 // ---------------------------------------------------------------------
270 if ( ! (fJetCuts = new AliHLTJETJetCuts()) ) {
271 HLTError("Error instantiating jet cuts");
272 return -EINPROGRESS;
273 }
274
275 fJetCuts->SetMinEt( jetCutMinEt );
276
277 // ---------------------------------------------------------------------
278 // -- Jet Reader Header
279 // ---------------------------------------------------------------------
280 if ( ! (fJetReaderHeader = new AliHLTJETReaderHeader()) ) {
281 HLTError("Error instantiating jet reader header");
282 return -EINPROGRESS;
283 }
284
285 // Set Algorithm
286 fJetReaderHeader->SetJetAlgorithm( algorithm );
287
288 // Set prt to track cuts
289 fJetReaderHeader->SetTrackCuts( fTrackCuts );
290
291 // Set Eta min/max and Phi min/max
292 fJetReaderHeader->SetFiducialEta( -0.9, 0.9) ;
293 fJetReaderHeader->SetFiducialPhi( 0.0, TMath::TwoPi() ) ;
294
295 // Set cone radius
296 fJetReaderHeader->SetConeRadius(coneRadius);
297
298 // ---------------------------------------------------------------------
299 // -- Jet Reader
300 // ---------------------------------------------------------------------
301 if ( ! (fJetReader = new AliHLTJETReader()) ) {
302 HLTError("Error instantiating jet reader");
303 return -EINPROGRESS;
304 }
305
306 fJetReader->SetReaderHeader(fJetReaderHeader);
307
308 // ---------------------------------------------------------------------
309 // -- Jet Container
310 // ---------------------------------------------------------------------
311 if ( ! (fJets = new AliHLTJets()) ) {
312 HLTError("Error instantiating jet container");
313 return -EINPROGRESS;
314 }
315
316 fJets->SetComment(comment);
317
318 // ---------------------------------------------------------------------
319 // -- Jet Header
320 // ---------------------------------------------------------------------
321 if ( ! (fJetHeader = new AliHLTJETFastJetHeader()) ) {
322 HLTError("Error instantiating fastjet header");
323 return -EINPROGRESS;
324 }
325
326 fJetHeader->SetReaderHeader(fJetReaderHeader);
327 fJetHeader->SetJetCuts(fJetCuts);
328
329 // ---------------------------------------------------------------------
330 // -- Jet Finder
331 // ---------------------------------------------------------------------
332 if ( ! (fJetFinder = new AliHLTJETFastJetFinder()) ) {
333 HLTError("Error instantiating fastjet finder");
334 return -EINPROGRESS;
335 }
336
337 fJetFinder->SetJetHeader(fJetHeader);
338 fJetFinder->SetJetReader(fJetReader);
339 fJetFinder->SetOutputJets(fJets);
340
341 // ---------------------------------------------------------------------
342 // -- Initialize Jet Finder
343 // ---------------------------------------------------------------------
344 if ( (fJetFinder->Initialize()) ) {
345 HLTError("Error initializing fastjet finder");
346 return -EINPROGRESS;
347 }
348
349 return 0;
350}
351
352// #################################################################################
353Int_t AliHLTJETFastJetComponent::DoDeinit() {
354 // see header file for class documentation
355
356 if ( fJetFinder )
357 delete fJetFinder;
358 fJetFinder = NULL;
359
360 if ( fJetHeader )
361 delete fJetHeader;
362 fJetHeader = NULL;
363
364 if ( fJetReader )
365 delete fJetReader;
366 fJetReader = NULL;
367
368 if ( fJetReaderHeader )
369 delete fJetReaderHeader;
370 fJetReaderHeader = NULL;
371
372 if ( fJetCuts )
373 delete fJetCuts;
374 fJetCuts = NULL;
375
376 if ( fJets )
377 delete fJets;
378 fJets = NULL;
379
380 return 0;
381}
382
383// #################################################################################
384Int_t AliHLTJETFastJetComponent::DoEvent( const AliHLTComponentEventData& /*evtData*/,
385 AliHLTComponentTriggerData& /*trigData*/ ) {
386 // see header file for class documentation
387
388 Int_t iResult = 0;
389
390 const TObject* iter = NULL;
391
392 // -- Start-Of-Run
393 // -----------------
394 if ( GetFirstInputObject(kAliHLTDataTypeSOR) && !iResult ) {
395 HLTInfo("On-line SOR Event");
396 }
397
398 // -- ADD MC Object -- On-line
399 // ------------------------------
400 for ( iter=GetFirstInputObject(kAliHLTDataTypeMCObject|kAliHLTDataOriginHLT);
401 iter != NULL && !iResult; iter=GetNextInputObject() ) {
402
403 // -- Set automatic MC usage, --> needed in off-line
404 fJetReaderHeader->SetUseMC(kTRUE);
405
406 // -- Set input event
407 fJetReader->SetInputEvent( NULL, NULL, const_cast<TObject*>(iter) );
408
409 // -- Fill vector with MC
410 if ( ! fJetReader->FillVectorHLTMC() ) {
411 HLTError("Error filling vector.");
412 iResult = -EINPROGRESS;
413 }
414
415 // -- Find jets
416 if ( !iResult) {
417 if ( ! fJetFinder->ProcessHLTEvent() ) {
418 HLTError("Error processing fastjet event.");
419 iResult = -EINPROGRESS;
420 }
421 }
422
423 // -- PushBack
424 if ( !iResult) {
425 PushBack(fJets, kAliHLTDataTypeJet|kAliHLTDataOriginHLT, GetSpecification());
426 }
427 }
428
429 // -- ADD ESD Object -- Off-line
430 // -------------------------------
431 for ( iter=GetFirstInputObject(kAliHLTDataTypeESDObject|kAliHLTDataOriginOffline);
432 iter != NULL && !iResult; iter=GetNextInputObject() ) {
433
434 // -- Set automatic MC usage, --> needed in off-line
435 fJetReaderHeader->SetUseMC(kFALSE);
436
437 // -- Set input event
438 fJetReader->SetInputEvent( const_cast<TObject*>(iter), NULL, NULL );
439
440 // -- Fill vector with ESD
441 if ( ! fJetReader->FillVectorESD() ) {
442 HLTError("Error filling vector.");
443 iResult = -1;
444 }
445
446 // -- Find jets
447 if ( !iResult) {
448 if ( ! fJetFinder->ProcessHLTEvent() ) {
449 HLTError("Error processing fastjet event.");
450 iResult = -EINPROGRESS;
451 }
452 }
453
454 // -- PushBack
455 if ( !iResult) {
456 PushBack(fJets, kAliHLTDataTypeJet|kAliHLTDataOriginHLT, GetSpecification());
457 }
458 }
459
460 // -- ADD ESD Object -- On-line
461 // ------------------------------
462 for ( iter=GetFirstInputObject(kAliHLTDataTypeESDObject|kAliHLTDataOriginHLT);
463 iter != NULL && !iResult; iter=GetNextInputObject() ) {
464
465 // -- Set automatic MC usage, --> needed in off-line
466 fJetReaderHeader->SetUseMC(kFALSE);
467
468 // -- Set input event
469 fJetReader->SetInputEvent( const_cast<TObject*>(iter), NULL, NULL );
470
471 // -- Fill vector with ESD
472 if ( ! fJetReader->FillVectorESD() ) {
473 HLTError("Error filling vector.");
474 iResult = -1;
475 }
476
477 // -- Find jets
478 if ( !iResult) {
479 if ( ! fJetFinder->ProcessHLTEvent() ) {
480 HLTError("Error processing fastjet event.");
481 iResult = -EINPROGRESS;
482 }
483 }
484
485 // -- PushBack
486 if ( !iResult) {
487 PushBack(fJets, kAliHLTDataTypeJet|kAliHLTDataOriginHLT, GetSpecification());
488 }
489 }
490
491 return iResult;
492}