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