1 /////////////////////////////////////////////////////////////
5 // Author: N. van der Kolk
7 /////////////////////////////////////////////////////////////
9 // Description: ROOT macro to perform Flow analysis on AliFlowEvents with the Lee Yang Zeros method
11 /////////////////////////////////////////////////////////////
13 // from CreateESDChain.C - instead of #include "CreateESDChain.C"
14 TChain* CreateESDChain(const char* aDataDir = "ESDfiles.txt", Int_t aRuns = 20, Int_t offset = 0) ;
15 void LookupWrite(TChain* chain, const char* target) ;
21 #include "TObjArray.h"
25 //class AliFlowSelection;
26 //class AliFlowConstants;
28 using namespace std; //required for resolving the 'cout' symbol
31 void makeTaskNMLYZ(const Char_t* dataDir="/data/alice1/simili/lcgHijing/4", Int_t nRuns =-1, Int_t offset = 0)
33 cout<<"---New Method for Lee Yang Zeros Flow Analysis with Task Framework---"<<endl;
36 // include path (to find the .h files when compiling)
37 gSystem->AddIncludePath("-I$ALICE_ROOT/include") ;
38 gSystem->AddIncludePath("-I$ROOTSYS/include") ;
39 gSystem->AddIncludePath("-I$ALICE_ROOT/PWG2/FLOW") ;
41 // load needed libraries
42 gSystem->Load("libESD");
43 cerr<<"libESD loaded..."<<endl;
44 gSystem->Load("libANALYSIS.so");
45 cerr<<"libANALYSIS.so loaded..."<<endl;
46 gSystem->Load("libANALYSISRL.so");
47 cerr<<"libANALYSISRL.so loaded..."<<endl;
50 gSystem->Load("libPWG2flow.so");
51 cerr<<"libPWG2flow.so loaded..."<<endl;
52 gROOT->LoadMacro("AliFlowLYZConstants.cxx+");
54 gROOT->LoadMacro("AliAnalysisTaskRLLYZNewMethod.cxx+");
57 cout<<"---loaded libraries!---"<<endl;
59 // create the TChain. CreateESDChain() is defined in CreateESDChain.C
60 TChain* chain = CreateESDChain(dataDir, nRuns, offset);
61 cout<<"chain ("<<chain<<")"<<endl;
62 //cout << " * " << chain->GetEntriesFast() << "*" << endl;
63 //cout << " * " << chain->GetEntries() << " * " << endl ;
67 TString firstRunFileName = "testTaskLYZ_firstrun.root" ;
68 TString secondRunFileName = "testTaskLYZ_secondrun.root" ;
69 TFile* fFirstRunFile = new TFile(firstRunFileName.Data(),"READ");
70 if(!fFirstRunFile || fFirstRunFile->IsZombie()) { cerr << " ERROR: NO first Run file... " << endl ; }
71 TFile* fSecondRunFile = new TFile(secondRunFileName.Data(),"READ");
72 if(!fSecondRunFile || fSecondRunFile->IsZombie()) { cerr << " ERROR: NO first Run file... " << endl ; }
75 //____________________________________________//
76 // Make the analysis manager
77 AliAnalysisManager *mgr = new AliAnalysisManager("TestLYZNMManager");
78 cout<<"---defined the manager---"<<endl;
79 //____________________________________________//
81 AliAnalysisTaskRLLYZNewMethod *task1 = new AliAnalysisTaskRLLYZNewMethod("LYZtest");
83 //add tasks to manager
85 cout<<"---task1 added---"<<endl;
87 // Create containers for input/output
88 AliAnalysisDataContainer *cinput1 =
89 mgr->CreateContainer("cchain1",TChain::Class(),AliAnalysisManager::kInputContainer);
90 cout<<"---created input container---"<<endl;
92 AliAnalysisDataContainer *cinput2 =
93 mgr->CreateContainer("cobj2",TList::Class(),AliAnalysisManager::kInputContainer);
94 cout<<"---created input container2---"<<endl;
96 AliAnalysisDataContainer *cinput3 =
97 mgr->CreateContainer("cobj3",TList::Class(),AliAnalysisManager::kInputContainer);
98 cout<<"---created input container3---"<<endl;
100 AliAnalysisDataContainer *coutput1 =
101 mgr->CreateContainer("cobj1", TList::Class());
104 //____________________________________________//
105 mgr->ConnectInput(task1,0,cinput1);
106 cout<<"---ConnectInput(task1,0,cinput1)---"<<endl;
107 mgr->ConnectInput(task1,1,cinput2);
108 cout<<"---ConnectInput(task1,1,cinput2)---"<<endl;
109 mgr->ConnectInput(task1,2,cinput3);
110 cout<<"---ConnectInput(task1,1,cinput3)---"<<endl;
111 mgr->ConnectOutput(task1,0,coutput1);
112 cout<<"---ConnectOutput(task1,0,coutput1)---"<<endl;
114 cerr<<"chain ("<<chain<<")"<<endl;
115 cinput1->SetData(chain);
116 cinput2->SetData(fFirstRunFile);
117 cinput3->SetData(fSecondRunFile);
119 if(mgr->InitAnalysis()) {
121 mgr->StartAnalysis("local",chain);
126 // Helper macros for creating chains
127 // from: CreateESDChain.C,v 1.10 jgrosseo Exp
129 TChain* CreateESDChain(const char* aDataDir, Int_t aRuns, Int_t offset)
131 // creates chain of files in a given directory or file containing a list.
132 // In case of directory the structure is expected as:
133 // <aDataDir>/<dir0>/AliESDs.root
134 // <aDataDir>/<dir1>/AliESDs.root
140 Long_t id, size, flags, modtime;
141 if (gSystem->GetPathInfo(aDataDir, &id, &size, &flags, &modtime))
143 printf("%s not found.\n", aDataDir);
147 TChain* chain = new TChain("esdTree");
148 TChain* chaingAlice = 0;
152 TString execDir(gSystem->pwd());
153 TSystemDirectory* baseDir = new TSystemDirectory(".", aDataDir);
154 TList* dirList = baseDir->GetListOfFiles();
155 Int_t nDirs = dirList->GetEntries();
156 gSystem->cd(execDir);
160 for (Int_t iDir=0; iDir<nDirs; ++iDir)
162 TSystemFile* presentDir = (TSystemFile*) dirList->At(iDir);
163 if (!presentDir || !presentDir->IsDirectory() || strcmp(presentDir->GetName(), ".") == 0 || strcmp(presentDir->GetName(), "..") == 0)
172 if (count++ == aRuns)
175 TString presentDirName(aDataDir);
176 presentDirName += "/";
177 presentDirName += presentDir->GetName();
178 chain->Add(presentDirName + "/AliESDs.root/esdTree");
179 cerr<<presentDirName<<endl;
185 // Open the input stream
191 // Read the input list of files and add them to the chain
195 if (!esdfile.Contains("root")) continue; // protection
203 if (count++ == aRuns)
216 void LookupWrite(TChain* chain, const char* target)
218 // looks up the chain and writes the remaining files to the text file target
222 TObjArray* list = chain->GetListOfFiles();
223 TIterator* iter = list->MakeIterator();
227 outfile.open(target);
229 while ((obj = iter->Next()))
230 outfile << obj->GetTitle() << "#AliESDs.root" << endl;