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