adding modifiactions for running with fastJet locally
[u/mrichter/AliRoot.git] / PWG4 / macros / AnalysisTrainCAF.C
1 //______________________________________________________________________________\r
2 void AnalysisTrainCAF(Int_t nEvents = 10000, Int_t nOffset = 0, char *ds = "/PWG4/kleinb/LHC09a1_test500")\r
3 {\r
4   // Example of running analysis train in CAF. To run in debug mode:\r
5   //  - export ROOTSYS=debug  on your local client\r
6   //  - un-comment gProof->ClearPackages()\r
7   //  - un-comment lines with debugging info\r
8 \r
9 \r
10   Bool_t debug         = kTRUE;\r
11   Bool_t useMC         = kFALSE;\r
12   Bool_t readTR        = kFALSE;\r
13   Bool_t bPROOF        = kFALSE;\r
14   Bool_t bLOCALPAR     = kFALSE;  // flag that swtiches on loading of local par files insead of loading libs, needed for grid and local testing\r
15 \r
16     \r
17   Int_t iAODanalysis   = 1;\r
18   Int_t iAODhandler    = 1;\r
19   Int_t iESDfilter     = 1;  // Only active if iAODanalysis=0\r
20   Int_t iJETAN         = 1;\r
21   Int_t iJETANESD      = 0;\r
22   Int_t iJETANMC       = 1;\r
23   Int_t iJETANMC2       = 1;\r
24   Int_t iFASTJET     = 0;\r
25   Int_t iDIJETAN       = 0;\r
26   Int_t iPWG4SPECTRUM  = 0;\r
27   Int_t iPWG4JFSYSTEMATICS  = 0;\r
28   Int_t iPWG4JETCORRECTION  = 0;\r
29   Int_t iPWG4THREEJETS  = 0;\r
30   Int_t iPWG4UE        = 0;\r
31   Int_t iPWG4PID        = 0;\r
32 \r
33   if (iAODanalysis) {\r
34     useMC = kFALSE;\r
35     readTR = kFALSE;\r
36     iESDfilter = 0;\r
37   }    \r
38   if (iJETAN) iESDfilter=1;\r
39   if (iESDfilter) iAODhandler=1;\r
40   \r
41   // Dataset from CAF\r
42   TString dataset(ds);\r
43   TChain *chain = 0;\r
44   // CKB quick hack for local analysis\r
45   gROOT->LoadMacro("CreateESDChain.C");\r
46   TChain *chain = CreateChain("aodTree","AOD_LHC09a1.txt",100);\r
47   //  chain = new TChain("aodTree");\r
48   //  chain->Add("/Users/kleinb/bigdisk/1/LHC09a3/001/AliAOD.root");\r
49 \r
50  \r
51   printf("==================================================================\n");\r
52   printf("===========    RUNNING ANALYSIS TRAIN IN CAF MODE    =============\n");\r
53   printf("==================================================================\n");\r
54   if (iAODanalysis) printf("=  AOD analysis on dataset: %s\n", dataset.Data());\r
55   else              printf("=  ESD analysis on dataset: %s\n", dataset.Data());\r
56   if (iESDfilter)   printf("=  ESD filter                                                     =\n");\r
57   if (iJETAN)       printf("=  Jet analysis from AOD                                         =\n");\r
58   if (iJETANESD)    printf("=  Jet analysis from ESD                                         =\n");\r
59   if (iJETANMC)     printf("=  Jet analysis from Kinematics                                  =\n");\r
60   if (iJETANMC2)     printf("=  Jet analysis 2 from Kinematics                               =\n");\r
61   if (iFASTJET)     printf("=  Loading FastJet                               =\n");\r
62   if (iDIJETAN)     printf("=  DiJet analysis                                                 =\n");\r
63   if (iPWG4SPECTRUM)printf("=  PWG4 Jet spectrum analysis                                    =\n");\r
64   if (iPWG4JFSYSTEMATICS)printf("=  PWG4 Jet Finder systematics                                   =\n");\r
65   if (iPWG4JETCORRECTION)printf("=  PWG4 Jet Correction                                   =\n");\r
66   if (iPWG4THREEJETS)printf("=  PWG4 Three Jets                                   =\n");\r
67 \r
68   if (iPWG4UE)      printf("=  PWG4 UE                                                        =\n");\r
69   printf("==================================================================\n");\r
70   if (useMC) printf(":: use MC    TRUE\n");\r
71   else       printf(":: use MC    FALSE\n");\r
72   if (readTR) printf(":: read TR   TRUE\n");\r
73   else        printf(":: read TR   FALSE\n");\r
74   if (debug) printf(":: debugging TRUE\n");\r
75   else       printf(":: debugging FALSE\n");\r
76     \r
77   // Load common libraries\r
78   gSystem->Load("libTree.so");\r
79   gSystem->Load("libGeom.so");\r
80   gSystem->Load("libVMC.so");\r
81   gSystem->Load("libPhysics.so");\r
82   if(iFASTJET){\r
83     gSystem->Load("libCGAL.so");\r
84     gSystem->Load("libfastjet.so");\r
85     gSystem->Load("libSISConePlugin.so");  \r
86   }\r
87 \r
88 \r
89   // Reset user processes if CAF if not responding anymore\r
90   // TProof::Reset("alicecaf"); \r
91   // One may enable a different ROOT version on CAF\r
92   \r
93   //  const char* proofNode = "localhost";\r
94   const char* proofNode = "alicecaf";\r
95   \r
96   // Connect to proof\r
97   if(bPROOF){\r
98     TProof::Mgr(proofNode)->ShowROOTVersions();\r
99     // TProof::Mgr(proofNode)->SetROOTVersion("v5-21-01-alice_dbg");\r
100     TProof::Open(proofNode); \r
101     \r
102     // Clear packages if changing ROOT version on CAF or local\r
103      gProof->ClearPackages();\r
104     // Enable proof debugging if needed\r
105     //    gProof->SetLogLevel(5);\r
106     // To debug the train in PROOF mode, type in a root session:\r
107     // root[0] TProof::Mgr("lxb6064")->GetSessionLogs()->Display("*",0,10000);\r
108     // Common packages\r
109     // --- Enable the STEERBase Package\r
110     gProof->UploadPackage("STEERBase.par");\r
111     gProof->EnablePackage("STEERBase");    \r
112     // --- Enable the ESD Package          \r
113     gProof->UploadPackage("ESD.par");      \r
114     gProof->EnablePackage("ESD");          \r
115     // --- Enable the AOD Package          \r
116     gProof->UploadPackage("AOD.par");      \r
117     gProof->EnablePackage("AOD");          \r
118     // --- Enable the ANALYSIS Package     \r
119     gProof->UploadPackage("ANALYSIS.par"); \r
120     gProof->EnablePackage("ANALYSIS");     \r
121     // --- Enable the ANALYSISalice Package\r
122     gProof->UploadPackage("ANALYSISalice.par");\r
123     gProof->EnablePackage("ANALYSISalice");\r
124     \r
125       \r
126     // --- Enable the JETAN Package\r
127     if (iJETAN||iJETANESD||iJETANMC||iJETANMC2) {\r
128       gProof->UploadPackage("JETAN.par");\r
129       gProof->EnablePackage("JETAN");\r
130       if(iFASTJET){\r
131         gProof->UploadPackage("FASTJETAN.par");\r
132         gProof->EnablePackage("FASTJETAN"); \r
133       }\r
134     }   \r
135     // --- Enable particle correlation analysis\r
136     if (iPWG4UE||iPWG4SPECTRUM||iPWG4JFSYSTEMATICS||iPWG4JETCORRECTION||iPWG4THREEJETS) {\r
137       gProof->UploadPackage("PWG4JetTasks.par");\r
138       gProof->EnablePackage("PWG4JetTasks");\r
139     }   \r
140     \r
141   }\r
142   else{\r
143 \r
144     //  \r
145     // We are local or on grid\r
146     // access remote files in lcoal case as well so open alien conection\r
147 \r
148     /*\r
149     printf("*** Connect to AliEn ***\n");\r
150     TGrid::Connect("alien://");\r
151 \r
152     chain = CreateChainFromCollection("wn.xml","esdTree",2); \r
153     */\r
154 \r
155     if(bLOCALPAR){\r
156       SetupPar("STEERBase");\r
157       SetupPar("ESD");   \r
158       SetupPar("AOD");     \r
159       SetupPar("ANALYSIS"); \r
160       SetupPar("ANALYSISalice");\r
161       if (iJETAN||iJETANESD||iJETANMC||iJETANMC2){\r
162         SetupPar("JETAN");         \r
163         if(iFASTJET)    SetupPar("FASTJETAN");     \r
164       }\r
165       if (iPWG4UE||iPWG4SPECTRUM||iPWG4JFSYSTEMATICS)SetupPar("PWG4JetTasks");\r
166     }\r
167     else{\r
168       Printf("Loading Local libs");\r
169       gSystem->Load("libSTEERBase");\r
170       gSystem->Load("libESD");\r
171       gSystem->Load("libAOD");\r
172       gSystem->Load("libANALYSIS");\r
173       gSystem->Load("libANALYSISalice");  \r
174       // --- Enable the JETAN Package\r
175       if (iJETAN||iJETANESD||iJETANMC||iJETANMC2){\r
176         gSystem->Load("libJETAN");\r
177         gSystem->Load("libFASTJETAN");\r
178       }\r
179       // --- Enable particle correlation analysis\r
180       if (iPWG4UE||iPWG4SPECTRUM||iPWG4JFSYSTEMATICS||iPWG4THREEJETS)gSystem->Load("libPWG4JetTasks"); \r
181     }\r
182 \r
183   }\r
184 \r
185 \r
186     // Make the analysis manager\r
187     AliAnalysisManager *mgr  = new AliAnalysisManager("Analysis Train", "A test setup for the analysis train");\r
188     if (iAODanalysis) {\r
189     // AOD input handler\r
190        AliAODInputHandler *aodH = new AliAODInputHandler();\r
191        mgr->SetInputEventHandler(aodH);\r
192     } else {   \r
193     // ESD input handler\r
194        AliESDInputHandler *esdHandler = new AliESDInputHandler();\r
195        mgr->SetInputEventHandler(esdHandler);\r
196 //       esdHandler->SetInactiveBranches("FMD CaloCluster");\r
197     }\r
198     // Monte Carlo handler\r
199     if (useMC && !iAODanalysis) {\r
200        AliMCEventHandler* mcHandler = new AliMCEventHandler();\r
201        mgr->SetMCtruthEventHandler(mcHandler);\r
202        mcHandler->SetReadTR(readTR); \r
203     }   \r
204     // Top container for input \r
205     AliAnalysisDataContainer *cinput = 0;\r
206     \r
207     cinput = mgr->GetCommonInputContainer();\r
208 \r
209     // This container is managed by the AOD handler\r
210     AliAnalysisDataContainer *cout_aod = 0;\r
211     if (iAODhandler) {\r
212        // AOD output handler\r
213        AliAODHandler* aodHandler   = new AliAODHandler();\r
214        //      aodHandler->SetFillAOD(kFALSE);\r
215        mgr->SetOutputEventHandler(aodHandler);       \r
216        aodHandler->SetOutputFileName(Form("AliAODs_pwg4_%07d-%07d.root",nOffset,nOffset+nEvents));\r
217        cout_aod = mgr->GetCommonOutputContainer();\r
218        cout_aod->SetSpecialOutput();\r
219     }   \r
220 \r
221     // Debugging if needed\r
222     if (debug) mgr->SetDebugLevel(0);\r
223     //    AliLog::EnableDebug(kTRUE);\r
224     AliLog::SetGlobalLogLevel(0);\r
225 \r
226 \r
227     if (iESDfilter && !iAODanalysis) {\r
228       gROOT->LoadMacro("AddTaskESDfilter.C");\r
229       AliAnalysisTaskESDfilter *esdfilter = AddTaskESDfilter();\r
230     }   \r
231     // Jet analysis from the AOD\r
232     if (iJETAN) {\r
233       gROOT->LoadMacro("AddTaskJets.C");\r
234       AliAnalysisTaskJets *jetanaAOD  = AddTaskJets("AOD","UA1",0.4);\r
235       jetanaAOD->SetNonStdBranch("jetsAOD");    \r
236     }   \r
237     // JETANALYSIS from the ESD\r
238     if (iJETANESD && !iAODanalysis) {\r
239       gROOT->LoadMacro("AddTaskJets.C");\r
240       AliAnalysisTaskJets *jetanaESD = AddTaskJets("ESD","UA1");\r
241       jetanaESD->SetDebugLevel(0);\r
242       jetanaESD->SetNonStdBranch("jetsESD");    \r
243     }   \r
244     // Jet analysisMC\r
245     if (iJETANMC ){ \r
246       gROOT->LoadMacro("AddTaskJets.C");\r
247       AliAnalysisTaskJets *jetanaMC =  AddTaskJets("AODMC","UA1",0.4);\r
248       jetanaMC->SetDebugLevel(0);\r
249       jetanaMC->SetNonStdBranch("jetsMC");\r
250     }   \r
251     if (iJETANMC2 ){ \r
252       gROOT->LoadMacro("AddTaskJets.C");\r
253       AliAnalysisTaskJets *jetanaMC2 = AddTaskJets("AODMC2","UA1",0.4);\r
254       jetanaMC2->SetDebugLevel(0);\r
255       jetanaMC2->SetNonStdBranch("jetsMC2");\r
256     }   \r
257     // Dijet analysis\r
258     if(iDIJETAN){\r
259       gROOT->LoadMacro("AddTaskDiJets.C");\r
260       AliAnalysisTaskDiJets *dijetana  = AddTaskDiJets();\r
261     }\r
262     if (iPWG4SPECTRUM) {\r
263       gROOT->LoadMacro("AddTaskJetSpectrum.C");\r
264       AliAnalysisTaskJetSpectrum* pwg4spec = AddTaskJetSpectrum();\r
265       pwg4spec->SetAnalysisType(0);\r
266       pwg4spec->SetDebugLevel(0);\r
267     }   \r
268     if (iPWG4JFSYSTEMATICS) {\r
269       gROOT->LoadMacro("AddTaskJFSystematics.C");\r
270       AliAnalysisTaskJFSystematics* pwg4jfs = AddTaskJFSystematics("jetsAOD","jetsMC");\r
271       pwg4jfs->SetDebugLevel(0);\r
272     }   \r
273     if (iPWG4JETCORRECTION) {\r
274       gROOT->LoadMacro("AddTaskJetCorrections.C");\r
275       AliAnalysisTaskJetCorrections* pwg4jc = AddTaskJetCorrections();\r
276       pwg4jc->SetDebugLevel(11);\r
277     }   \r
278     if (iPWG4THREEJETS) {\r
279       gROOT->LoadMacro("AddTaskThreeJets.C");\r
280       AliAnalysisTaskThreeJets* pwg4jjj = AddTaskThreeJets();\r
281       pwg4jjj->SetDebugLevel(11);\r
282     }   \r
283     if (iPWG4UE) {\r
284       gROOT->LoadMacro("AddTaskUE.C");\r
285       AliAnalysisTaskUE* ueana = AddTaskUE();\r
286     }   \r
287     if(iPWG4PID){\r
288       gROOT->LoadMacro("AddTaskPWG4PidDetEx.C");\r
289       AliAnalysisTaskPWG4PidDetEx *taskPid = AddTaskPWG4PidDetEx();\r
290       taskPid->SetDebugLevel(0);\r
291   }\r
292     // Run the analysis\r
293     //    \r
294     if (mgr->InitAnalysis()) {\r
295        mgr->PrintStatus();\r
296        if(bPROOF)mgr->StartAnalysis("proof",dataset.Data(), nEvents,nOffset);\r
297        else mgr->StartAnalysis("local",chain,100);\r
298     }   \r
299 }\r
300 TChain *CreateChainFromCollection(const char* xmlfile, const char *treeName="esdTree",Int_t nFiles = 0)\r
301 {\r
302 // Create a chain from an alien collection.                                                                          \r
303    TAlienCollection * myCollection  = TAlienCollection::Open(xmlfile);\r
304 \r
305    if (!myCollection) {\r
306       ::Error("CreateChainSingle", "Cannot create an AliEn collection from %s", xmlfile) ;\r
307      return NULL ;\r
308    }\r
309 \r
310   TChain* chain = new TChain(treeName);\r
311   myCollection->Reset() ;\r
312   Int_t iCount = 0;\r
313   while ( myCollection->Next() ){\r
314     if(nFiles!=0)iCount++;\r
315     if(iCount > nFiles)break;\r
316     chain->Add(myCollection->GetTURL("")) ;\r
317     Printf("Adding %s",myCollection->GetTURL(""));\r
318   }\r
319   chain->ls();\r
320   return chain;\r
321 }\r
322 \r
323 \r
324 void SetupPar(char* pararchivename)\r
325 {\r
326   //Load par files, create analysis libraries                                                         \r
327   //For testing, if par file already decompressed and modified                                        \r
328   //classes then do not decompress.                                                                   \r
329 \r
330   TString cdir(Form("%s", gSystem->WorkingDirectory() )) ;\r
331   TString parpar(Form("%s.par", pararchivename)) ;\r
332   /*\r
333   if ( gSystem->AccessPathName(parpar.Data()) ) {\r
334     gSystem->ChangeDirectory(gSystem->Getenv("ALICE_ROOT")) ;\r
335     TString processline(Form(".! make %s", parpar.Data())) ;\r
336     gROOT->ProcessLine(processline.Data()) ;\r
337     gSystem->ChangeDirectory(cdir) ;\r
338     processline = Form(".! mv /tmp/%s .", parpar.Data()) ;\r
339     gROOT->ProcessLine(processline.Data()) ;\r
340   }\r
341   */\r
342 \r
343   if (!gSystem->AccessPathName(pararchivename) ) {\r
344     TString processline = Form(".! tar xvzf %s",parpar.Data()) ;\r
345     gROOT->ProcessLine(processline.Data());\r
346   }\r
347 \r
348   TString ocwd = gSystem->WorkingDirectory();\r
349   gSystem->ChangeDirectory(pararchivename);\r
350 \r
351   // check for BUILD.sh and execute                                                                   \r
352   if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {\r
353     printf("*******************************\n");\r
354     printf("*** Building PAR archive    ***\n");\r
355     cout<<pararchivename<<endl;\r
356     printf("*******************************\n");\r
357 \r
358     if (gSystem->Exec("PROOF-INF/BUILD.sh")) {\r
359       Error("runProcess","Cannot Build the PAR Archive! - Abort!");\r
360       return -1;\r
361     }\r
362   }\r
363   // check for SETUP.C and execute                                                                    \r
364   if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {\r
365     printf("*******************************\n");\r
366     printf("*** Setup PAR archive       ***\n");\r
367     cout<<pararchivename<<endl;\r
368     printf("*******************************\n");\r
369     gROOT->Macro("PROOF-INF/SETUP.C");\r
370   }\r
371 \r
372   gSystem->ChangeDirectory(ocwd.Data());\r
373   printf("Current dir: %s\n", ocwd.Data());\r
374 }\r