AddTimeStamp was always increasing track length but accounting
[u/mrichter/AliRoot.git] / ANALYSIS / AliAnalysisGoodies.cxx
CommitLineData
b86ddfbb 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15//_________________________________________________________________________
16// Various utilities usefull for analysis
17//
18//*-- Yves Schutz
19//////////////////////////////////////////////////////////////////////////////
20
21#include "AliAnalysisDataContainer.h"
22#include "AliTagAnalysis.h"
23#include "AliEventTagCuts.h"
24#include "AliRunTagCuts.h"
25#include "AliXMLCollection.h"
26#include "AliAnalysisGoodies.h"
27#include "AliAnalysisManager.h"
59d12c2b 28#include "AliAODHandler.h"
b86ddfbb 29#include "AliAnalysisTask.h"
b86ddfbb 30#include "AliLog.h"
31
32#include <Riostream.h>
9c0977a1 33#ifdef WITHALIEN
31829163 34#include <TGridResult.h>
d08133e6 35#include <TFileMerger.h>
a9f73563 36#include <TFile.h>
9c0977a1 37#endif
b86ddfbb 38#include <TChain.h>
b86ddfbb 39#include <TGrid.h>
40#include <TROOT.h>
41#include <TSystem.h>
d775a1d2 42#include <TEntryList.h>
b86ddfbb 43
44//______________________________________________________________________________
45AliAnalysisGoodies::AliAnalysisGoodies() :
91605856 46 TObject(),
47 fTimer(),
b86ddfbb 48 fESDTreeName("esdTree"),
59d12c2b 49 fAmgr(0)
b86ddfbb 50{
51 fTimer.Reset() ;
52
53 TString token = gSystem->Getenv("GRID_TOKEN") ;
54
55 if ( token == "OK" )
56 TGrid::Connect("alien://");
57 else
58 AliInfo("You are not connected to the GRID") ;
59d12c2b 59 // Make the analysis manager
60 fAmgr = new AliAnalysisManager("Goodies Manager", "Analysis manager created by AliAnalysisGoodies") ;
b86ddfbb 61}
62
63//______________________________________________________________________________
91605856 64AliAnalysisGoodies::AliAnalysisGoodies(const AliAnalysisGoodies& ag) :
65 TObject(),
66 fTimer(),
b7f18920 67 fESDTreeName(""),
68 fAmgr(0x0)
91605856 69{
70
71 fESDTreeName = ag.fESDTreeName ;
72 TString token = gSystem->Getenv("GRID_TOKEN") ;
73
74 if ( token == "OK" )
75 TGrid::Connect("alien://");
76 else
77 AliInfo("You are not connected to the GRID") ;
59d12c2b 78
79 // Make the analysis manager
80 fAmgr = new AliAnalysisManager("Goodies Manager", "Analysis manager created by AliAnalysisGoodies") ;
91605856 81}
82
83//______________________________________________________________________________
b7f18920 84AliAnalysisGoodies& AliAnalysisGoodies::operator=(const AliAnalysisGoodies& ag)
85{
86 // Assignment operator
87 if(this!=&ag) {
88 }
89
90 return *this;
91}
92
93//______________________________________________________________________________
b86ddfbb 94void AliAnalysisGoodies::Help() const
95{
96 AliInfo("Analysis utilities:\n") ;
003ca69e 97 printf(" *** Alien2Local : copy files ESD files listed in an xml collection from AliEn catalog to local storage and creates a local xml collection \n") ;
98 printf(" usage: Alien2Local(in, out)\n") ;
b86ddfbb 99 printf(" in: a xml esd collection file name \n") ;
100 printf(" ou: the local directory where to save the esd root files \n") ;
101 printf(" *** Make : makes esd collection from tags \n") ;
102 printf(" usage: Make(tags, esds)\n") ;
103 printf(" tags: is either a tag root file or an xml tag collection \n") ;
104 printf(" esds: is an esd collection \n") ;
105 printf(" *** Merge : merges files listed in a xml collection \n") ;
106 printf(" usage Merge(collection, outputDile)\n") ;
107 printf(" collection: is a xml collection \n") ;
108 printf(" *** Process : process the events with an Analysis Task \n") ;
109 printf(" usage: Process(esdFile, tagCuts) \n") ;
110 printf(" esdFile: can be a root file with the ESD Tree ( ex: esd?AliESDs.root) \n") ;
111 printf(" or a root file with the Tag Tree ( ex: tag?Run100.Event0_100.ESD.tag.root) \n") ;
112 printf(" or a local or alien xml file with the ESD collection ( ex: esd?esdCollection.xml) \n") ;
113 printf(" or a local or alien xml file with the TAG collection ( ex: tag?tagCollection.xml) \n") ;
114 printf(" or a TChain of esd TTrees \n") ;
115 printf(" tagCuts: is the AliEventTagCuts (needed only for tag? cases \n") ;
116 printf(" *** Register: register files already stored in a MSS into the AliEn catalog\n") ;
117 printf(" usage: Register(lfndir, pfndir, pfnFileName) \n") ;
118 printf(" lfndir : AliEn directory ( ex: /alice/data/2006/LHC06c/PHOS_TestBeam/\n") ;
119 printf(" pfndir : MSS directory ( ex: /castor/cern.ch/alice/testbeam/phos/2006 \n") ;
120 printf(" file : text file with a list of the file names to be registered\n ") ;
121
122}
123
124//______________________________________________________________________
c49bca36 125Bool_t AliAnalysisGoodies::Alien2Local(const TString collectionNameIn, const TString localDir)
b86ddfbb 126{
127 // copy files ESD files listed in an xml collection from AliEn catalog to local storage and creates a local xml collection
128 // usage: Alien2Local(in, out)
129 // in: a xml esd collection file name
130 // ou: the local directory where to save the esd root files
131
d08133e6 132#ifdef WITHALIEN
b86ddfbb 133 Bool_t rv = kTRUE ;
134
135 fTimer.Start() ;
136
137 AliXMLCollection * collectionIn = AliXMLCollection::Open(collectionNameIn) ;
138 collectionIn->Reset() ;
139
140 AliXMLCollection * collectionOu = new AliXMLCollection() ;
141 TString collectionNameOu(collectionIn->GetCollectionName()) ;
142 collectionNameOu.Append("Local") ;
143 collectionOu->SetCollectionName(collectionNameOu) ;
144 collectionOu->WriteHeader() ;
145
b86ddfbb 146 const char* ocwd = gSystem->WorkingDirectory();
147
c16bb9ed 148 Int_t counter = 1 ;
b86ddfbb 149 while ( collectionIn->Next() ) {
150 gSystem->ChangeDirectory(localDir) ;
151 TString fileTURL = collectionIn->GetTURL("") ;
152
153 TString tempo(fileTURL) ;
154 tempo.Remove(tempo.Last('/'), tempo.Length()) ;
155 TString evtsNumber = tempo(tempo.Last('/')+1, tempo.Length())+"/";
156 tempo.Remove(tempo.Last('/'), tempo.Length()) ;
157 TString runNumber = tempo(tempo.Last('/')+1, tempo.Length())+"/" ;
158 TString dir = localDir + runNumber ;
d775a1d2 159 dir += evtsNumber ;
160 char line[1024] ;
161 sprintf(line, ".! mkdir -p %s", dir.Data()) ;
162 gROOT->ProcessLine(line) ;
163 printf("***************************%s\n", line) ;
b86ddfbb 164 TEntryList * list = collectionIn->GetEventList("") ;
d775a1d2 165 if (!list)
166 list = new TEntryList() ;
d775a1d2 167 tempo = fileTURL ;
168 TString filename = tempo(tempo.Last('/')+1, tempo.Length()) ;
169 dir += filename ;
170 AliInfo(Form("Copying %s to %s\n", fileTURL.Data(), dir.Data())) ;
c16bb9ed 171 collectionOu->WriteBody(counter, collectionIn->GetGUID(""), collectionIn->GetLFN(""), dir, list) ;
172 counter++ ;
6675ae08 173 TFile::Cp(fileTURL, dir) ;
b86ddfbb 174 }
175 collectionOu->Export() ;
176 gSystem->ChangeDirectory(ocwd) ;
177
178 fTimer.Stop();
179 fTimer.Print();
180
d08133e6 181 return rv ;
182#else
183 return kFALSE;
184#endif
b86ddfbb 185}
186
187//______________________________________________________________________
59d12c2b 188AliAnalysisDataContainer * AliAnalysisGoodies::ConnectInput(AliAnalysisTask * task, TClass * classin, UShort_t index)
189{
190 // connect a task to the input
191
192 if ( ! fAmgr->GetTask(task->GetName()) )
193 fAmgr->AddTask(task) ;
194 else
195 AliFatal(Form("Task %s already exists", task->GetName())) ;
196
197 AliAnalysisDataContainer * taskInput = 0x0 ;
198 if ( fAmgr->GetInputs() )
199 taskInput = dynamic_cast<AliAnalysisDataContainer *>(fAmgr->GetInputs()->FindObject(Form("InputContainer_%s_%d", task->GetName(), index))) ;
200 if ( ! taskInput ) {
201 taskInput = fAmgr->CreateContainer(Form("InputContainer_%s_%d", task->GetName(), index), classin, AliAnalysisManager::kInputContainer) ;
202 fAmgr->ConnectInput (task, index, taskInput);
203 }
204 else
205 AliFatal(Form("Input %s already exists", taskInput->GetName())) ;
206
207 return taskInput ;
208}
209
210//______________________________________________________________________
211void AliAnalysisGoodies::ConnectInput(AliAnalysisTask * task, AliAnalysisDataContainer * taskInput, UShort_t index)
212{
213 // connect a task to the input
214
215 if ( ! fAmgr->GetTask(task->GetName()) )
216 fAmgr->AddTask(task) ;
217 else
218 AliFatal(Form("Task %s already exists", task->GetName())) ;
219
220 fAmgr->ConnectInput (task, index, taskInput);
221}
222
223//______________________________________________________________________
224AliAnalysisDataContainer * AliAnalysisGoodies::ConnectOuput(AliAnalysisTask * task, TClass * classou, UShort_t index, TString opt )
225{
226 // connect a task to the output
227
228 char filename[20] ;
229
230 if (opt == "AOD" ) {
1d20d945 231 if ( fAmgr->GetOutputEventHandler() == 0x0) {
59d12c2b 232 AliAODHandler * aodHandler = new AliAODHandler() ;
233 aodHandler->SetOutputFileName(Form("%s_0.root",task->GetName())) ;
1d20d945 234 fAmgr->SetOutputEventHandler(aodHandler) ;
59d12c2b 235 }
236 sprintf(filename, "default") ;
237 }
2acc7de8 238 else
59d12c2b 239 sprintf(filename, "%s_%d.root",task->GetName(), index) ;
59d12c2b 240
241 AliAnalysisDataContainer * taskOuput = 0x0 ;
242 if ( fAmgr->GetOutputs() )
243 taskOuput = dynamic_cast<AliAnalysisDataContainer *>(fAmgr->GetOutputs()->FindObject(Form("OutputContainer_%s_%d", task->GetName(), index))) ;
244 if ( ! taskOuput )
245 taskOuput = fAmgr->CreateContainer(Form("OutputContainer_%s_%d", task->GetName(), index), classou, AliAnalysisManager::kOutputContainer, filename) ;
246 fAmgr->ConnectOutput(task, index, taskOuput);
247
248 return taskOuput ;
249}
250
251//______________________________________________________________________
252void AliAnalysisGoodies::ConnectOuput(AliAnalysisTask * task, AliAnalysisDataContainer * taskOuput, UShort_t index)
253{
254 // connect a task to the output
255
256 fAmgr->ConnectInput (task, index, taskOuput);
257}
258
259//______________________________________________________________________
91605856 260Bool_t AliAnalysisGoodies::Make(AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const
b86ddfbb 261{
262 // makes esd collection from tags
263 // usage Make(tags, esds)
264 // tags: is either a tag root file or an xml tag collection
265 // esds: is an esd collection
266
267 Bool_t rv = kTRUE ;
268
269 if ( !evtCuts && !runCuts ) {
270 AliError("No Tag cuts provided") ;
271 return kFALSE ;
272 }
273
274 TString file(in) ;
275 if ( file.Contains(".root") )
91605856 276 rv = MakeEsdCollectionFromTagFile(runCuts, lhcCuts, detCuts, evtCuts, file.Data(), out) ;
b86ddfbb 277 else if ( file.Contains(".xml") )
91605856 278 rv = MakeEsdCollectionFromTagCollection(runCuts, lhcCuts, detCuts, evtCuts, file.Data(), out) ;
b86ddfbb 279 else {
280 AliError(Form("%s is not a valid file format", in)) ;
281 rv = kFALSE ;
282 }
283
284 return rv ;
285}
286
287//______________________________________________________________________
91605856 288Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagFile(AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const
b86ddfbb 289{
290 // Makes an esd collection from a root tag file
291 Bool_t rv = kTRUE ;
292 // Open the file collection
293 printf("*** Create Collection ***\n");
294 printf("*** Wk-Dir = |%s| \n",gSystem->WorkingDirectory());
295 printf("*** file = |%s| \n",in);
296
297 AliTagAnalysis * tagAna = new AliTagAnalysis();
298 rv = tagAna->AddTagsFile(in);
299 if ( ! rv )
300 return rv ;
301
91605856 302 tagAna->CreateXMLCollection(out, runCuts, lhcCuts, detCuts, evtCuts) ;
b86ddfbb 303
304 return rv ;
305
306}
307
308//______________________________________________________________________
91605856 309Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts *evtCuts, const char * in, const char * out) const
b86ddfbb 310{
311 // Makes an esd collection from a xml tag collection
312 Bool_t rv = kTRUE ;
313 // Open the file collection
314 printf("*** Create Collection ***\n");
315 printf("*** Wk-Dir = |%s| \n",gSystem->WorkingDirectory());
316 printf("*** Coll = |%s| \n",in);
9c0977a1 317
318#ifdef WITHALIEN
b86ddfbb 319
e9678f9b 320 TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",in));
321 TGridResult* result = collection->GetGridResult("", 0, 0);
b86ddfbb 322 AliTagAnalysis * tagAna = new AliTagAnalysis();
323 tagAna->ChainGridTags(result);
324
91605856 325 tagAna->CreateXMLCollection(out, runCuts, lhcCuts, detCuts, evtCuts) ;
b86ddfbb 326
9c0977a1 327#else
d775a1d2 328 rv = kFALSE;
9c0977a1 329#endif
d775a1d2 330 return rv ;
b86ddfbb 331}
332
333//______________________________________________________________________
91605856 334Bool_t AliAnalysisGoodies::MakeEsdCollectionFromTagCollection(const char * runCuts, const char *lhcCuts, const char *detCuts, const char * evtCuts, const char * in, const char * out) const
b86ddfbb 335{
336 // Makes an esd collection from a xml tag collection
337
338 Bool_t rv = kTRUE ;
339
340 // Open the file collection
341 printf("*** Create Collection ***\n");
342 printf("*** Wk-Dir = |%s| \n",gSystem->WorkingDirectory());
343 printf("*** Coll = |%s| \n",in);
344
9c0977a1 345#ifdef WITHALIEN
346
e9678f9b 347 TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",in));
348 TGridResult* result = collection->GetGridResult("", 0, 0);
b86ddfbb 349 AliTagAnalysis * tagAna = new AliTagAnalysis();
350 tagAna->ChainGridTags(result);
351
91605856 352 tagAna->CreateXMLCollection(out, runCuts, lhcCuts, detCuts, evtCuts) ;
b86ddfbb 353
9c0977a1 354#else
50026a5f 355 rv = kFALSE;
9c0977a1 356#endif
50026a5f 357 return rv ;
b86ddfbb 358}
359
360//______________________________________________________________________
c49bca36 361Bool_t AliAnalysisGoodies::Merge(const char * collectionFile, const char * subFile, const char * outFile)
b86ddfbb 362{
363 // merges files listed in a xml collection
364 // usage Merge(collection, outputFile))
365 // collection: is a xml collection
366
367 Bool_t rv = kFALSE ;
368
369 if ( strstr(collectionFile, ".xml") == 0 ) {
370 AliError("Input collection file must be an \".xml\" file\n") ;
371 return kFALSE ;
372 }
373
374 fTimer.Start() ;
375
376 // Open the file collection
377 printf("*** Create Collection ***\n");
378 printf("*** Wk-Dir = |%s| \n",gSystem->WorkingDirectory());
379 printf("*** Coll = |%s| \n",collectionFile);
380
9c0977a1 381#ifdef WITHALIEN
382
e9678f9b 383 TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",collectionFile));
384 TGridResult* result = collection->GetGridResult("", 0, 0);
b86ddfbb 385
386 Int_t index = 0 ;
387 const char * turl ;
388 TFileMerger merger ;
389 if (!outFile) {
390 TString tempo(collectionFile) ;
391 if ( subFile)
392 tempo.ReplaceAll(".xml", subFile) ;
393 else
394 tempo.ReplaceAll(".xml", "_Merged.root") ;
395 outFile = tempo.Data() ;
396 }
397 merger.OutputFile(outFile) ;
398
399 while ( (turl = result->GetKey(index, "turl")) ) {
400 char file[2048] ;
401 if ( subFile )
402 sprintf(file, "%s#%s", turl, subFile) ;
403 else
404 sprintf(file, "%s", turl) ;
405
406 printf("%s\n", file) ;
407 merger.AddFile(file) ;
408 index++ ;
409 }
410
411 if (index)
412 merger.Merge() ;
413
414 AliInfo(Form("Files merged into %s\n", outFile)) ;
415
416 fTimer.Stop();
417 fTimer.Print();
418
9c0977a1 419#else
50026a5f 420 rv = kFALSE;
9c0977a1 421#endif
50026a5f 422 return rv ;
b86ddfbb 423}
424
425//______________________________________________________________________
c49bca36 426Bool_t AliAnalysisGoodies::Process(TChain * chain)
b86ddfbb 427{
428 // process events starting from a chain of esd Trees
429 Bool_t rv = kFALSE ;
b86ddfbb 430 fTimer.Start() ;
431
432 rv = ProcessChain(chain) ;
433
434 fTimer.Stop();
435 fTimer.Print();
436
437 return rv ;
438}
439
440//______________________________________________________________________
c49bca36 441Bool_t AliAnalysisGoodies::Process(const char * inFile)
b86ddfbb 442{
443 // process the events with an Analysis Task
444 // usage Process(esdFile)
445 // esdFile: is of the form opt?file_lfn
446 Bool_t rv = kFALSE ;
91605856 447 AliRunTagCuts * runCuts = 0x0 ;
448 AliLHCTagCuts * lhcCuts = 0x0 ;
449 AliDetectorTagCuts * detCuts = 0x0 ;
450 AliEventTagCuts * evtCuts = 0x0 ;
b86ddfbb 451
91605856 452 rv = Process(inFile, runCuts, lhcCuts, detCuts, evtCuts) ;
b86ddfbb 453
454 return rv ;
455}
456
457//______________________________________________________________________
91605856 458Bool_t AliAnalysisGoodies::Process(const char * inFile, AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts * evtCuts )
b86ddfbb 459{
460 // process the events with an Analysis Task
461 // usage Process(esdFile, runtagCuts, evtTagCuts)
462 // esdFile: is of the form opt?file_lfn
463
464 Bool_t rv = kFALSE ;
465
466 fTimer.Start() ;
467
468 TString file(inFile) ;
469 if ( file.Contains("esd?") && file.Contains(".root") ) {
470 file.ReplaceAll("esd?", "") ;
471 rv = ProcessEsdFile(file.Data()) ;
472
473 } else if ( file.Contains("esd?") && file.Contains(".xml") ) {
474 file.ReplaceAll("esd?", "") ;
475 rv = ProcessEsdXmlCollection(file.Data()) ;
476
477 } else if (file.Contains("tag?") && file.Contains(".root") ) {
478 file.ReplaceAll("tag?", "") ;
91605856 479 rv = ProcessTagFile(file.Data(), runCuts, lhcCuts, detCuts, evtCuts) ;
b86ddfbb 480
481 } else if (file.Contains("tag?") && file.Contains(".xml") ) {
482 file.ReplaceAll("tag?", "") ;
91605856 483 rv = ProcessTagXmlCollection(file.Data(), runCuts, lhcCuts, detCuts, evtCuts) ;
b86ddfbb 484
485 } else {
486 AliError(Form("%s is not a valid file format", inFile)) ;
487 rv = kFALSE ;
488 }
489
490 fTimer.Stop();
491 fTimer.Print();
492
493 return rv ;
494}
495
496//______________________________________________________________________
91605856 497Bool_t AliAnalysisGoodies::Process(const char * inFile, const char * runCuts, const char * lhcCuts, const char * detCuts, const char * evtCuts)
b86ddfbb 498{
499 // process the events with an Analysis Task
500 // usage Process(esdFile, runtagCuts, evtTagCuts)
501 // esdFile: is of the form opt?file_lfn
502
503 Bool_t rv = kFALSE ;
504
505 fTimer.Start() ;
506
507 TString file(inFile) ;
508 if ( file.Contains("esd?") && file.Contains(".root") ) {
509 file.ReplaceAll("esd?", "") ;
510 rv = ProcessEsdFile(file.Data()) ;
511
512 } else if ( file.Contains("esd?") && file.Contains(".xml") ) {
513 file.ReplaceAll("esd?", "") ;
514 rv = ProcessEsdXmlCollection(file.Data()) ;
515
516 } else if (file.Contains("tag?") && file.Contains(".root") ) {
517 file.ReplaceAll("tag?", "") ;
91605856 518 rv = ProcessTagFile(file.Data(), runCuts, lhcCuts, detCuts, evtCuts) ;
b86ddfbb 519
520 } else if (file.Contains("tag?") && file.Contains(".xml") ) {
521 file.ReplaceAll("tag?", "") ;
91605856 522 rv = ProcessTagXmlCollection(file.Data(), runCuts, lhcCuts, detCuts, evtCuts) ;
b86ddfbb 523
524 } else {
525 AliError(Form("%s is not a valid file format", inFile)) ;
526 rv = kFALSE ;
527 }
528
529 fTimer.Stop();
530 fTimer.Print();
531
532 return rv ;
533}
534
535//______________________________________________________________________
c49bca36 536Bool_t AliAnalysisGoodies::ProcessChain(TChain * chain) const
b86ddfbb 537{
538 // Procees a TChain.
539
540 Bool_t rv = kTRUE ;
541
91605856 542 // start processing
59d12c2b 543 if (fAmgr->InitAnalysis()) {
544 fAmgr->PrintStatus();
545 fAmgr->StartAnalysis("local",chain);
b86ddfbb 546 } else
547 rv = kFALSE ;
548
549 return rv ;
550}
551
552//______________________________________________________________________
c49bca36 553Bool_t AliAnalysisGoodies::ProcessEsdFile(const char * esdFile) const
b86ddfbb 554{
555 // process the events in a single ESD file with an Analysis Task
556 // usage ProcessLocalEsdFile(esdFile)
557 // esdFile: is the root file (local or in alien) with the ESD Tree ( ex: AliESDs.root)
558
559 Bool_t rv = kTRUE ;
560
561 printf("*** Process ***\n");
562 printf("*** Wk-Dir = |%s| \n",gSystem->WorkingDirectory());
563 printf("*** Coll = |%s| \n",esdFile);
564
565 // Makes the ESD chain
566 printf("*** Getting the Chain ***\n");
567 TChain* analysisChain = new TChain(fESDTreeName) ;
568 analysisChain->AddFile(esdFile);
569
570 // Process the events
571 rv = ProcessChain(analysisChain) ;
572
573 return rv;
574}
575
576//______________________________________________________________________
91605856 577Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts *evtCuts) const
b86ddfbb 578{
579 // process the events in a single Tag file with an Analysis Task
580 // usage ProcessLocalEsdFile(tagFile)
581 // tagFile: is the root file (local or in alien) with the Tag Tree (ex: Run102.Event0_100.ESD.tag.root)
582
583 Bool_t rv = kTRUE ;
584
585 if ( !evtCuts && !runCuts ) {
586 AliError("No Tag cuts provided") ;
587 return kFALSE ;
588 }
589
590 printf("*** Process ***\n");
591 printf("*** Wk-Dir = |%s| \n",gSystem->WorkingDirectory());
592 printf("*** Coll = |%s| \n",tagFile);
593
594 AliTagAnalysis * tagAna = new AliTagAnalysis();
595 rv = tagAna->AddTagsFile(tagFile);
596 if ( ! rv )
597 return rv ;
598
599 // Query the tag file and make the analysis chain
600 TChain * analysisChain = new TChain(fESDTreeName) ;
91605856 601 analysisChain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evtCuts);
b86ddfbb 602
603 // Process the events
604 rv = ProcessChain(analysisChain) ;
605
606 return rv;
607}
608
609//______________________________________________________________________
91605856 610Bool_t AliAnalysisGoodies::ProcessTagFile(const char * tagFile, const char * runCuts, const char * lhcCuts, const char * detCuts, const char * evtCuts) const
b86ddfbb 611{
612 // process the events in a single Tag file with an Analysis Task
613 // usage ProcessLocalEsdFile(tagFile)
614 // tagFile: is the root file (local or in alien) with the Tag Tree (ex: Run102.Event0_100.ESD.tag.root)
615
616 Bool_t rv = kTRUE ;
617
618
619 if ( !evtCuts && !runCuts ) {
620 AliError("No Tag cuts provided") ;
621 return kFALSE ;
622 }
623
624 printf("*** Process ***\n");
625 printf("*** Wk-Dir = |%s| \n",gSystem->WorkingDirectory());
626 printf("*** Coll = |%s| \n",tagFile);
627
628 AliTagAnalysis * tagAna = new AliTagAnalysis();
629 rv = tagAna->AddTagsFile(tagFile);
630 if ( ! rv )
631 return rv ;
632
633 // Query the tag file and make the analysis chain
634 TChain * analysisChain = new TChain(fESDTreeName) ;
91605856 635 analysisChain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evtCuts);
b86ddfbb 636
637 // Process the events
638 rv = ProcessChain(analysisChain) ;
639
640 return rv;
641}
642
643//______________________________________________________________________
c49bca36 644Bool_t AliAnalysisGoodies::ProcessEsdXmlCollection(const char * xmlFile) const
b86ddfbb 645{
646 // process the events in a xml ESD collection with an Analysis Task
647 // usage ProcessLocalEsdFile(xmlFile)
648 // xmlFile: is the local xml file with the ESD collection ( ex: esdCollection.xml)
649
650 Bool_t rv = kTRUE ;
651
652 printf("*** Process ***\n");
653 printf("*** Wk-Dir = |%s| \n",gSystem->WorkingDirectory());
654 printf("*** Coll = |%s| \n",xmlFile);
655
9c0977a1 656#ifdef WITHALIEN
6797e4bc 657 //AliXMLCollection * collection = AliXMLCollection::Open(xmlFile,0) ;
e9678f9b 658 TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)", xmlFile));
b86ddfbb 659 if (! collection) {
660 AliError(Form("%s not found", xmlFile)) ;
661 return kFALSE ;
662 }
663
e9678f9b 664 TGridResult* result = collection->GetGridResult("",0 ,0);
b86ddfbb 665 TList* analysisfilelist = result->GetFileInfoList();
666
667 // Makes the ESD chain
668 printf("*** Getting the Chain ***\n");
669 TChain* analysisChain = new TChain(fESDTreeName);
670 analysisChain->AddFileInfoList(analysisfilelist);
6797e4bc 671
b86ddfbb 672 // Process the events
673 rv = ProcessChain(analysisChain) ;
674
9c0977a1 675#else
50026a5f 676 rv = kFALSE;
6797e4bc 677
9c0977a1 678#endif
6797e4bc 679
50026a5f 680 return rv ;
b86ddfbb 681}
682
683//______________________________________________________________________
91605856 684Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, AliRunTagCuts *runCuts, AliLHCTagCuts *lhcCuts, AliDetectorTagCuts *detCuts, AliEventTagCuts * evtCuts) const
b86ddfbb 685{
686 // process the events in a xml ESD collection with an Analysis Task
687 // usage ProcessLocalEsdFile(xmlFile)
688 // xmlFile: is the local xml file with the tag collection ( ex: tagCollection.xml)
689
690 Bool_t rv = kTRUE ;
691
692 if ( !evtCuts && !runCuts ) {
693 AliError("No Tag cuts provided") ;
694 return kFALSE ;
695 }
696
697 printf("*** Process ***\n");
698 printf("*** Wk-Dir = |%s| \n",gSystem->WorkingDirectory());
e9678f9b 699 printf("*** Coll = |%s| \n",xmlFile);
b86ddfbb 700
701 // check if file is local or alien
702 if ( gSystem->AccessPathName(xmlFile) )
703 TGrid::Connect("alien://");
704
9c0977a1 705#ifdef WITHALIEN
706
e9678f9b 707 TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",xmlFile));
b86ddfbb 708 if (! collection) {
709 AliError(Form("%s not found", xmlFile)) ;
710 return kFALSE ;
711 }
712
e9678f9b 713 TGridResult* result = collection->GetGridResult("", 0, 0);
b86ddfbb 714 AliTagAnalysis * tagAna = new AliTagAnalysis();
715 tagAna->ChainGridTags(result);
716
717 // Query the tag file and make the analysis chain
718 TChain * analysisChain = new TChain(fESDTreeName) ;
91605856 719 analysisChain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evtCuts);
b86ddfbb 720
721 // Process the events
722 rv = ProcessChain(analysisChain) ;
723
9c0977a1 724#else
50026a5f 725 rv = kFALSE;
9c0977a1 726#endif
50026a5f 727 return rv ;
b86ddfbb 728}
729
730//______________________________________________________________________
91605856 731Bool_t AliAnalysisGoodies::ProcessTagXmlCollection(const char * xmlFile, const char * runCuts, const char * lhcCuts, const char * detCuts, const char * evtCuts) const
b86ddfbb 732{
733 // process the events in a xml ESD collection with an Analysis Task
734 // usage ProcessLocalEsdFile(xmlFile)
735 // xmlFile: is the local xml file with the tag collection ( ex: tagCollection.xml)
736
737 Bool_t rv = kTRUE ;
738
739 if ( !evtCuts && !runCuts ) {
740 AliError("No Tag cuts provided") ;
741 return kFALSE ;
742 }
743
744 printf("*** Process ***\n");
745 printf("*** Wk-Dir = |%s| \n",gSystem->WorkingDirectory());
746 printf("*** Coll = |%s| \n",xmlFile);
747
9c0977a1 748#ifdef WITHALIEN
749
b86ddfbb 750 // check if file is local or alien
751 if ( gSystem->AccessPathName(xmlFile) )
752 TGrid::Connect("alien://");
753
e9678f9b 754 TGridCollection * collection = (TGridCollection*)gROOT->ProcessLine(Form("TAlienCollection::Open(\"%s\", 0)",xmlFile));
b86ddfbb 755 if (! collection) {
756 AliError(Form("%s not found", xmlFile)) ;
757 return kFALSE ;
758 }
759
e9678f9b 760 TGridResult* result = collection->GetGridResult("", 0, 0);
b86ddfbb 761 AliTagAnalysis * tagAna = new AliTagAnalysis();
762 tagAna->ChainGridTags(result);
763
764 // Query the tag file and make the analysis chain
765 TChain * analysisChain = new TChain(fESDTreeName) ;
91605856 766 analysisChain = tagAna->QueryTags(runCuts, lhcCuts, detCuts, evtCuts);
b86ddfbb 767
768 // Process the events
769 rv = ProcessChain(analysisChain) ;
770
9c0977a1 771#else
50026a5f 772 rv = kFALSE;
9c0977a1 773#endif
50026a5f 774 return rv ;
b86ddfbb 775}
776
777//______________________________________________________________________
c49bca36 778Bool_t AliAnalysisGoodies::Register( const char * lfndir, const char * pfndir, const char * file)
b86ddfbb 779{
780 // register files already stored in a MSS into the AliEn catalog
781 // usage: Register(lfndir, pfndir, pfnFileName)
782 // lfndir : AliEn directory ( ex: /alice/data/2006/LHC06c/PHOS_TestBeam/ )
783 // pfndir : MSS directory ( ex: /castor/cern.ch/alice/testbeam/phos/2006 )
784 // file : text file with a list of the file names to be registered
785
786 Bool_t rv = kTRUE ;
787 fTimer.Start() ;
788
789 ifstream in;
790 in.open(file);
791 if ( in.bad() ) {
792 AliError(Form("Cannot open file %s\n", file)) ;
793 return kFALSE ;
794 }
795
796 TGrid::Connect("alien://");
797
798 char fileName[1024] ;
799
800 while (1) {
801 in >> fileName ;
802 if (!in.good())
803 break;
804 char lfn[1024] ;
805
806 sprintf(lfn, "%s/%s", lfndir, fileName) ;
807
808 char pfn[1024] ;
809
810 sprintf(pfn, "castor://Alice::CERN::Castor2/%s/%s", pfndir, fileName) ;
811
812 printf("Register %s as %s\n", pfn, lfn) ;
813
814 gGrid->Register(lfn, pfn) ;
815 }
816
817 fTimer.Stop();
818 fTimer.Print();
819
820 return rv;
821}
822