1 enum anaModes {mLocal,mLocalPAR,mPROOF,mGRID};
2 //mLocal: Analyze locally files in your computer using aliroot
3 //mLocalPAR: Analyze locally files in your computer using root + PAR files
4 //mPROOF: Analyze CAF files with PROOF
8 // Flow analysis method can be:(set to kTRUE or kFALSE)
10 Bool_t LYZ1SUM = kTRUE;
11 Bool_t LYZ1PROD = kTRUE;
12 Bool_t LYZ2SUM = kFALSE;
13 Bool_t LYZ2PROD = kFALSE;
14 Bool_t LYZEP = kFALSE;
18 Bool_t MCEP = kTRUE; //not for pp
20 Bool_t METHODS[] = {SP,LYZ1SUM,LYZ1PROD,LYZ2SUM,LYZ2PROD,LYZEP,GFC,QC,FQD,MCEP};
22 // Analysis type can be ESD, AOD, MC, ESDMC0, ESDMC1
23 const TString type = "ESD";
25 // Boolean to fill/not fill the QA histograms
28 // Boolean to use/not use weights for the Q vector
29 Bool_t WEIGHTS[] = {kFALSE,kFALSE,kFALSE}; //Phi, v'(pt), v'(eta)
32 //void runFlowTask(Int_t mode=mLocal, Int_t nRuns = 100,
33 //const Char_t* dataDir="/data/alice2/kolk/PP/LHC09a4/81119", Int_t offset = 0)
34 //const Char_t* dataDir="/data/alice2/kolk/Therminator_midcentral", Int_t offset = 0)
35 //const Char_t* dataDir="/Users/snelling/alice_data/Therminator_midcentral", Int_t offset = 0)
36 void runFlowTask(Int_t mode=mPROOF, Int_t nRuns = 1000000,
37 const Char_t* dataDir="/COMMON/COMMON/LHC09a14_0.9TeV_0.5T", Int_t offset = 0)
38 //const Char_t* dataDir="/PWG2/akisiel/Therminator_midcentral_ESD", Int_t offset=0)
45 if (mode==mLocal || mode == mLocalPAR || mode == mGRID) {
46 if (type!="AOD") { TChain* chain = CreateESDChain(dataDir, nRuns, offset);}
47 else { TChain* chain = CreateAODChain(dataDir, nRuns, offset);}
49 //____________________________________________//
50 // Make the analysis manager
51 AliAnalysisManager *mgr = new AliAnalysisManager("FlowAnalysisManager");
54 AliVEventHandler* esdH = new AliESDInputHandler;
55 mgr->SetInputEventHandler(esdH);
57 AliMCEventHandler *mc = new AliMCEventHandler();
58 mgr->SetMCtruthEventHandler(mc);
62 AliVEventHandler* aodH = new AliAODInputHandler;
63 mgr->SetInputEventHandler(aodH);
65 AliMCEventHandler *mc = new AliMCEventHandler();
66 mgr->SetMCtruthEventHandler(mc);
69 if (type == "MC" || type == "ESDMC0" || type == "ESDMC1"){
70 AliVEventHandler* esdH = new AliESDInputHandler;
71 mgr->SetInputEventHandler(esdH);
73 AliMCEventHandler *mc = new AliMCEventHandler();
74 mgr->SetMCtruthEventHandler(mc);
78 //____________________________________________//
80 gROOT->LoadMacro("AddTaskFlow.C");
81 AliAnalysisTaskFlowEvent* taskFE = AddTaskFlow(type,METHODS,QA,WEIGHTS);
83 //____________________________________________//
85 if (!mgr->InitAnalysis()) return;
88 if (mode==mLocal || mode == mLocalPAR) {
89 mgr->StartAnalysis("local",chain);
91 else if (mode==mPROOF) {
92 mgr->StartAnalysis("proof",dataDir,nRuns,offset);
94 else if (mode==mGRID) {
95 mgr->StartAnalysis("local",chain);
104 void LoadLibraries(const anaModes mode) {
106 //--------------------------------------
107 // Load the needed libraries most of them already loaded by aliroot
108 //--------------------------------------
109 gSystem->Load("libTree.so");
110 gSystem->Load("libGeom.so");
111 gSystem->Load("libVMC.so");
112 gSystem->Load("libXMLIO.so");
113 gSystem->Load("libPhysics.so");
115 //----------------------------------------------------------
116 // >>>>>>>>>>> Local mode <<<<<<<<<<<<<<
117 //----------------------------------------------------------
119 //--------------------------------------------------------
120 // If you want to use already compiled libraries
121 // in the aliroot distribution
122 //--------------------------------------------------------
123 gSystem->Load("libSTEERBase");
124 gSystem->Load("libESD");
125 gSystem->Load("libAOD");
126 gSystem->Load("libANALYSIS");
127 gSystem->Load("libANALYSISalice");
128 gSystem->Load("libCORRFW.so");
129 cerr<<"libCORRFW.so loaded..."<<endl;
130 gSystem->Load("libPWG2flowCommon.so");
131 cerr<<"libPWG2flowCommon.so loaded..."<<endl;
132 gSystem->Load("libPWG2flowTasks.so");
133 cerr<<"libPWG2flowTasks.so loaded..."<<endl;
136 else if (mode == mLocalPAR || mode == mGRID) {
137 //--------------------------------------------------------
138 //If you want to use root and par files from aliroot
139 //--------------------------------------------------------
140 SetupPar("STEERBase");
143 SetupPar("ANALYSIS");
144 SetupPar("ANALYSISalice");
147 SetupPar("PWG2flowCommon");
148 cerr<<"PWG2flowCommon.par loaded..."<<endl;
149 SetupPar("PWG2flowTasks");
150 cerr<<"PWG2flowTasks.par loaded..."<<endl;
153 //---------------------------------------------------------
154 // <<<<<<<<<< PROOF mode >>>>>>>>>>>>
155 //---------------------------------------------------------
156 else if (mode==mPROOF) {
159 // set to debug root versus if needed
160 //TProof::Mgr("alicecaf")->SetROOTVersion("v5-24-00a_dbg");
161 TProof::Mgr("alicecaf")->SetROOTVersion("v5-24-00a");
165 // Put appropriate username here
166 // TProof::Reset("proof://snelling@alicecaf.cern.ch");
167 printf("*** Connect to PROOF ***\n");
168 // TProof::Open("abilandz@alicecaf.cern.ch");
169 // TProof::Open("nkolk@alicecaf.cern.ch");
170 TProof::Open("snelling@localhost");
172 // Enable the STEERBase Package
173 // gProof->ClearPackage("STEERBase.par");
174 gProof->UploadPackage("STEERBase.par");
175 gProof->EnablePackage("STEERBase");
176 // Enable the ESD Package
177 // gProof->ClearPackage("ESD.par");
178 gProof->UploadPackage("ESD.par");
179 gProof->EnablePackage("ESD");
180 // Enable the AOD Package
181 // gProof->ClearPackage("AOD.par");
182 gProof->UploadPackage("AOD.par");
183 gProof->EnablePackage("AOD");
184 // Enable the Analysis Package
185 // gProof->ClearPackage("ANALYSIS.par");
186 gProof->UploadPackage("ANALYSIS.par");
187 gProof->EnablePackage("ANALYSIS");
188 // Enable the Analysis Package alice
189 // gProof->ClearPackage("ANALYSISalice.par");
190 gProof->UploadPackage("ANALYSISalice.par");
191 gProof->EnablePackage("ANALYSISalice");
193 // gProof->ClearPackage("PWG2AOD.par");
194 gProof->UploadPackage("PWG2AOD.par");
195 gProof->EnablePackage("PWG2AOD");
196 // Enable the Correction Framework
197 // gProof->ClearPackage("CORRFW.par");
198 gProof->UploadPackage("CORRFW.par");
199 gProof->EnablePackage("CORRFW");
200 // Enable Flow Analysis
201 gProof->ClearPackage("PWG2flowCommon");
202 gProof->UploadPackage("PWG2flowCommon.par");
203 gProof->EnablePackage("PWG2flowCommon");
204 gProof->ClearPackage("PWG2flowTasks");
205 gProof->UploadPackage("PWG2flowTasks.par");
206 gProof->EnablePackage("PWG2flowTasks");
208 gProof->ShowEnabledPackages();
213 void SetupPar(char* pararchivename) {
214 //Load par files, create analysis libraries
215 //For testing, if par file already decompressed and modified
216 //classes then do not decompress.
218 TString cdir(Form("%s", gSystem->WorkingDirectory() )) ;
219 TString parpar(Form("%s.par", pararchivename)) ;
220 if ( gSystem->AccessPathName(parpar.Data()) ) {
221 gSystem->ChangeDirectory(gSystem->Getenv("ALICE_ROOT")) ;
222 TString processline(Form(".! make %s", parpar.Data())) ;
223 gROOT->ProcessLine(processline.Data()) ;
224 gSystem->ChangeDirectory(cdir) ;
225 processline = Form(".! mv /tmp/%s .", parpar.Data()) ;
226 gROOT->ProcessLine(processline.Data()) ;
228 if ( gSystem->AccessPathName(pararchivename) ) {
229 TString processline = Form(".! tar xvzf %s",parpar.Data()) ;
230 gROOT->ProcessLine(processline.Data());
233 TString ocwd = gSystem->WorkingDirectory();
234 gSystem->ChangeDirectory(pararchivename);
236 // check for BUILD.sh and execute
237 if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
238 printf("*******************************\n");
239 printf("*** Building PAR archive ***\n");
240 cout<<pararchivename<<endl;
241 printf("*******************************\n");
242 if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
243 Error("runProcess","Cannot Build the PAR Archive! - Abort!");
247 // check for SETUP.C and execute
248 if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
249 printf("*******************************\n");
250 printf("*** Setup PAR archive ***\n");
251 cout<<pararchivename<<endl;
252 printf("*******************************\n");
253 gROOT->Macro("PROOF-INF/SETUP.C");
256 gSystem->ChangeDirectory(ocwd.Data());
257 printf("Current dir: %s\n", ocwd.Data());
261 // Helper macros for creating chains
262 // from: CreateESDChain.C,v 1.10 jgrosseo Exp
264 TChain* CreateESDChain(const char* aDataDir, Int_t aRuns, Int_t offset)
266 // creates chain of files in a given directory or file containing a list.
267 // In case of directory the structure is expected as:
268 // <aDataDir>/<dir0>/AliESDs.root
269 // <aDataDir>/<dir1>/AliESDs.root
275 Long_t id, size, flags, modtime;
276 if (gSystem->GetPathInfo(aDataDir, &id, &size, &flags, &modtime))
278 printf("%s not found.\n", aDataDir);
282 TChain* chain = new TChain("esdTree");
283 TChain* chaingAlice = 0;
287 TString execDir(gSystem->pwd());
288 TSystemDirectory* baseDir = new TSystemDirectory(".", aDataDir);
289 TList* dirList = baseDir->GetListOfFiles();
290 Int_t nDirs = dirList->GetEntries();
291 gSystem->cd(execDir);
295 for (Int_t iDir=0; iDir<nDirs; ++iDir)
297 TSystemFile* presentDir = (TSystemFile*) dirList->At(iDir);
298 if (!presentDir || !presentDir->IsDirectory() || strcmp(presentDir->GetName(), ".") == 0 || strcmp(presentDir->GetName(), "..") == 0)
307 if (count++ == aRuns)
310 TString presentDirName(aDataDir);
311 presentDirName += "/";
312 presentDirName += presentDir->GetName();
313 chain->Add(presentDirName + "/AliESDs.root/esdTree");
314 // cerr<<presentDirName<<endl;
320 // Open the input stream
326 // Read the input list of files and add them to the chain
330 if (!esdfile.Contains("root")) continue; // protection
338 if (count++ == aRuns)
352 // Helper macros for creating chains
353 // from: CreateESDChain.C,v 1.10 jgrosseo Exp
355 TChain* CreateAODChain(const char* aDataDir, Int_t aRuns, Int_t offset)
357 // creates chain of files in a given directory or file containing a list.
358 // In case of directory the structure is expected as:
359 // <aDataDir>/<dir0>/AliAOD.root
360 // <aDataDir>/<dir1>/AliAOD.root
366 Long_t id, size, flags, modtime;
367 if (gSystem->GetPathInfo(aDataDir, &id, &size, &flags, &modtime))
369 printf("%s not found.\n", aDataDir);
373 TChain* chain = new TChain("aodTree");
374 TChain* chaingAlice = 0;
378 TString execDir(gSystem->pwd());
379 TSystemDirectory* baseDir = new TSystemDirectory(".", aDataDir);
380 TList* dirList = baseDir->GetListOfFiles();
381 Int_t nDirs = dirList->GetEntries();
382 gSystem->cd(execDir);
386 for (Int_t iDir=0; iDir<nDirs; ++iDir)
388 TSystemFile* presentDir = (TSystemFile*) dirList->At(iDir);
389 if (!presentDir || !presentDir->IsDirectory() || strcmp(presentDir->GetName(), ".") == 0 || strcmp(presentDir->GetName(), "..") == 0)
398 if (count++ == aRuns)
401 TString presentDirName(aDataDir);
402 presentDirName += "/";
403 presentDirName += presentDir->GetName();
404 chain->Add(presentDirName + "/AliAOD.root/aodTree");
405 // cerr<<presentDirName<<endl;
411 // Open the input stream
417 // Read the input list of files and add them to the chain
421 if (!aodfile.Contains("root")) continue; // protection
429 if (count++ == aRuns)