]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/lego_train/RunALICE.C
64bd7ca8d803fc99889eb9d3574803d2132ba36f
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / lego_train / RunALICE.C
1 #ifndef __CINT__
2 #include <TSystem.h>
3 #include <TROOT.h>
4 #include <Rtypes.h>
5 #include <TString.h>
6 #include <TNamed.h>
7 #include <TObjArray.h>
8 #include <TObjString.h>
9 #include <TList.h>
10 #include <TStopwatch.h>
11 #endif
12
13 Bool_t RunALICE(TString anSrc = "grid",
14                 TString anMode = "terminate",
15                 TString input="aod" /*or "esd"*/,
16                 TString inputMC="" /*or "mc"*/,
17                 Long64_t nEvents = 1e10,
18                 Long64_t nSkip = 0,
19                 TString dsName="",
20                 TString alirsnliteManagers ="AddAMRsn",
21                 Bool_t useMultiHandler=kTRUE,
22                 TString alirsnlitesrc ="$ALICE_ROOT",
23                 TString alirsnlitetasks =""
24                ) {
25
26    // some init work
27    anSrc.ToLower(); anMode.ToLower(); input.ToLower(); inputMC.ToLower();
28
29    // loads libs and setup include paths
30    if (LoadLibsBase(alirsnlitesrc)) return kFALSE;
31
32    // reset manager if already exists
33    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
34    if (mgr) delete mgr;
35    mgr = new AliAnalysisManager("AliRsnLiteAM","AliRsnLite Analysis Manager");
36
37    Bool_t useAODOut = kFALSE;
38    CreateInputHandlers(input,inputMC,useAODOut,useMultiHandler);
39
40    // add default grid handler
41    gROOT->LoadMacro("SetupAnalysisPlugin.C");
42    AliAnalysisGrid *analysisPlugin = SetupAnalysisPlugin(anMode.Data());
43    if (!analysisPlugin) { Printf("Error : analysisPlugin is null !!!"); return kFALSE; }
44    mgr->SetGridHandler(analysisPlugin);
45    if (!dsName.IsNull()) {
46       if (!anSrc.CompareTo("proof") && !anMode.CompareTo("full")) {
47          analysisPlugin->SetProofDataSet(dsName.Data());
48          Printf(Form("Using DataSet %s ...",dsName.Data()));
49       } else {
50          analysisPlugin->SetFileForTestMode(dsName.Data());
51          Printf(Form("Using Test file %s ...",dsName.Data()));
52       }
53    }
54
55    TList *listManagers = CreateListOfManagersFromDir(alirsnliteManagers,alirsnlitetasks);
56    if (!listManagers) { Printf("Error : CreateListOfManagersFromDir failed !!!"); return kFALSE;}
57
58    // adds all tasks
59    if (!AddAllManagers(listManagers, anSrc, anMode,input,inputMC)) { Printf("Error : AddAllManagers failed !!!"); return kFALSE;}
60
61    TStopwatch timer;
62    timer.Start();
63    // runs analysis
64    if (!RunAnalysisManager(anSrc, anMode.Data(), nEvents, nSkip)) { Printf("Error : RunAnalysisManager failed !!!"); return kFALSE;}
65
66    timer.Stop();
67    timer.Print();
68    Printf("Working directory is %s ...", gSystem->WorkingDirectory());
69    Printf("Done OK");
70    return kTRUE;
71
72 }
73
74 Int_t LoadLibsBase(TString alirsnlitesrc) {
75    Int_t num = 0;
76    if (gSystem->Load("libTree.so") < 0) {num++; return num;}
77    if (gSystem->Load("libGeom.so") < 0) {num++; return num;}
78    if (gSystem->Load("libVMC.so") < 0) {num++; return num;}
79    if (gSystem->Load("libMinuit.so") < 0) {num++; return num;}
80    if (gSystem->Load("libPhysics.so") < 0) {num++; return num;}
81    if (gSystem->Load("libSTEERBase.so") < 0) {num++; return num;}
82    if (gSystem->Load("libESD.so") < 0) {num++; return num;}
83    if (gSystem->Load("libAOD.so") < 0) {num++; return num;}
84    if (gSystem->Load("libANALYSIS.so") < 0) {num++; return num;}
85    if (gSystem->Load("libOADB.so") < 0) {num++; return num;}
86    if (gSystem->Load("libANALYSISalice.so") < 0) {num++; return num;}
87
88    gSystem->AddIncludePath(Form("-I\"%s/include\"", gSystem->ExpandPathName(alirsnlitesrc.Data())));
89    gROOT->ProcessLine(Form(".include %s/include", gSystem->ExpandPathName(alirsnlitesrc.Data())));
90
91    return 0;
92 }
93
94 Bool_t CreateInputHandlers(TString input,TString inputMC,Bool_t useAODOut=kFALSE,Bool_t useMultiHandler=kTRUE) {
95
96    Bool_t useMC = !inputMC.CompareTo("mc");
97
98    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
99    if (!mgr) { Printf("Error [CreateInputHandlers] : mgr is null !!!"); return kFALSE; }
100
101    if (useMultiHandler) {
102       AliMultiInputEventHandler *inputHandler = new AliMultiInputEventHandler();
103       if (!input.CompareTo("esd")) {
104          inputHandler->AddInputEventHandler(new AliESDInputHandler());
105          if (useMC) inputHandler->AddInputEventHandler(new AliMCEventHandler());
106       } else if (!input.CompareTo("aod")) {
107          inputHandler->AddInputEventHandler(new AliAODInputHandler());
108       }
109
110       mgr->SetInputEventHandler(inputHandler);
111    } else {
112       if (!input.CompareTo("esd")) {
113          mgr->SetInputEventHandler(new AliESDInputHandler());
114          if (useMC) mgr->SetMCtruthEventHandler(new AliMCEventHandler());
115       } else if (!input.CompareTo("aod")) {
116          mgr->SetInputEventHandler(new AliAODInputHandler());
117       }
118       mgr->SetInputEventHandler(inputHandler);
119    }
120
121    if (useAODOut) {
122       AliAODHandler *aodHandler   = new AliAODHandler();
123       aodHandler->SetOutputFileName("AliAOD.root");
124       mgr->SetOutputEventHandler(aodHandler);
125    }
126
127    return kTRUE;
128
129 }
130
131 TList *CreateListOfManagersFromDir(TString listManagersNames="",TString dir="") {
132
133    TList *listManagers = new TList;
134    TString dirsStr;
135    TObjArray *dirs=0;
136
137    if (listManagersNames.IsNull()) {
138       if (dir.IsNull() || gSystem->AccessPathName(gSystem->ExpandPathName(dir.Data()))) {
139          Printf("Error [CreateListOfManagersFromDir] : Dir '%s' doesn't exists !!!",dir.Data());
140          return 0;
141       }
142       dirsStr = gSystem->GetFromPipe(Form("ls %s",dir.Data()));
143       dirs = dirsStr.Tokenize("\n");
144    } else {
145       dirsStr = listManagersNames;
146       dirs = dirsStr.Tokenize(" ");
147    }
148
149    TIter next(dirs);
150    Int_t counter=0;
151    TObjString *str,*strtmp;
152    TObjArray *mydirstrTok;
153    TString mydirstr,main,prefix;
154    while ((str = (TObjString *)next.Next())) {
155       // TODO add direcotry
156       mydirstr = str->GetString();
157       if (mydirstr.IsNull()) continue;
158
159       Printf("Adding %s .,,",mydirstr.Data());
160       mydirstrTok = mydirstr.Tokenize("_");
161
162       main = ((TObjString *)mydirstrTok->At(0))->GetString();
163
164       strtmp = (TObjString *)mydirstrTok->At(1);
165       if (strtmp) prefix = strtmp->GetString(); else prefix="";
166
167       listManagers->Add(new TNamed(main,prefix));
168    }
169
170    return listManagers;
171 }
172
173 Bool_t AddAllManagers(TList *listManagers,TString anSrc, TString anMode,TString input,TString inputMC) {
174    TIter next(listManagers);
175    Int_t counter=0;
176    TNamed *name;
177    while ((name = (TNamed *)next.Next())) {
178       if (!AddAnalysisManager(name->GetName(), anSrc, anMode,input,inputMC,name->GetTitle(),Form("%d",counter++))) {
179          Printf("Error: Problem adding %s",name->GetName());
180          return kFALSE;
181       }
182    }
183
184    return kTRUE;
185 }
186
187 Bool_t AddAnalysisManager(TString managerMacro, TString anSrc, TString anMode,TString input,TString inputMC, TString postfix,TString idStr) {
188    gROOT->LoadMacro(Form("%s.C", managerMacro.Data()));
189    return gROOT->ProcessLine(Form("%s\(\"%s\",\"%s\",\"%s\"\,\"%s\",\"%s\",\"%s\"\);", managerMacro.Data(), anSrc.Data(), anMode.Data(),input.Data(),inputMC.Data(), postfix.Data(),idStr.Data()));
190 }
191
192 Bool_t RunAnalysisManager(TString anSrc = "proof", TString anMode = "test", Long64_t nEvents = 1e10, Long64_t nSkip = 0) {
193
194    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
195
196    if (!mgr) { Printf("Error [RunAnalysisManager] : mgr is null !!!"); return kFALSE; }
197
198    // Run analysis
199    mgr->InitAnalysis();
200    mgr->PrintStatus();
201
202    if ((!anSrc.CompareTo("proof")) || (!anSrc.CompareTo("local"))) {
203       mgr->StartAnalysis(anSrc.Data(), nEvents, nSkip);
204    } else {
205       mgr->StartAnalysis(anSrc.Data());
206    }
207
208    return kTRUE;
209 }