]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ANALYSIS/examples/EventMixing/RunALICE.C
Update master to aliroot
[u/mrichter/AliRoot.git] / ANALYSIS / examples / EventMixing / 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 ="AddAMEventMixingTest",
9                 Bool_t useMultiHandler=kTRUE,
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    Printf("Done OK");
59    return kTRUE;
60
61 }
62
63 Int_t LoadLibsBase(TString alirsnlitesrc) {
64    Int_t num = 0;
65    if (gSystem->Load("libTree") < 0) {num++; return num;}
66    if (gSystem->Load("libGeom") < 0) {num++; return num;}
67    if (gSystem->Load("libVMC") < 0) {num++; return num;}
68    if (gSystem->Load("libMinuit") < 0) {num++; return num;}
69    if (gSystem->Load("libPhysics") < 0) {num++; return num;}
70    if (gSystem->Load("libSTEERBase") < 0) {num++; return num;}
71    if (gSystem->Load("libESD") < 0) {num++; return num;}
72    if (gSystem->Load("libAOD") < 0) {num++; return num;}
73    if (gSystem->Load("libANALYSIS") < 0) {num++; return num;}
74    if (gSystem->Load("libOADB") < 0) {num++; return num;}
75    if (gSystem->Load("libANALYSISalice") < 0) {num++; return num;}
76
77    gSystem->AddIncludePath(Form("-I\"%s/include\"", gSystem->ExpandPathName(alirsnlitesrc.Data())));
78    gROOT->ProcessLine(Form(".include %s/include", gSystem->ExpandPathName(alirsnlitesrc.Data())));
79
80    return 0;
81 }
82
83 Bool_t CreateInputHandlers(TString input,TString inputMC,Bool_t useAODOut=kFALSE,Bool_t useMultiHandler=kTRUE) {
84
85    Bool_t useMC = !inputMC.CompareTo("mc");
86
87    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
88    if (!mgr) { Printf("Error [CreateInputHandlers] : mgr is null !!!"); return kFALSE; }
89
90    if (useMultiHandler) {
91       AliMultiInputEventHandler *inputHandler = new AliMultiInputEventHandler();
92       if (!input.CompareTo("esd")) {
93          inputHandler->AddInputEventHandler(new AliESDInputHandler());
94          if (useMC) inputHandler->AddInputEventHandler(new AliMCEventHandler());
95       } else if (!input.CompareTo("aod")) {
96          inputHandler->AddInputEventHandler(new AliAODInputHandler());
97       }
98
99       mgr->SetInputEventHandler(inputHandler);
100    } else {
101       if (!input.CompareTo("esd")) {
102          mgr->SetInputEventHandler(new AliESDInputHandler());
103          if (useMC) mgr->SetMCtruthEventHandler(new AliMCEventHandler());
104       } else if (!input.CompareTo("aod")) {
105          mgr->SetInputEventHandler(new AliAODInputHandler());
106       }
107    }
108
109    if (useAODOut) {
110       AliAODHandler *aodHandler   = new AliAODHandler();
111       aodHandler->SetOutputFileName("AliAOD.root");
112       mgr->SetOutputEventHandler(aodHandler);
113    }
114
115    return kTRUE;
116 }
117
118 TList *CreateListOfManagersFromDir(TString listManagersNames="",TString dir="") {
119
120    TList *listManagers = new TList;
121    TString dirsStr;
122    TObjArray *dirs=0;
123
124    if (listManagersNames.IsNull()) {
125       if (dir.IsNull() || gSystem->AccessPathName(gSystem->ExpandPathName(dir.Data()))) {
126          Printf("Error [CreateListOfManagersFromDir] : Dir '%s' doesn't exists !!!",dir.Data());
127          return 0;
128       }
129       dirsStr = gSystem->GetFromPipe(Form("ls %s",dir.Data()));
130       dirs = dirsStr.Tokenize("\n");
131    } else {
132       dirsStr = listManagersNames;
133       dirs = dirsStr.Tokenize(" ");
134    }
135
136    TIter next(dirs);
137    Int_t counter=0;
138    TObjString *str,*strtmp;
139    TObjArray *mydirstrTok;
140    TString mydirstr,main,prefix;
141    while ((str = (TObjString *)next.Next())) {
142       // TODO add direcotry
143       mydirstr = str->GetString();
144       if (mydirstr.IsNull()) continue;
145
146       Printf("Adding %s .,,",mydirstr.Data());
147       mydirstrTok = mydirstr.Tokenize("_");
148
149       main = ((TObjString *)mydirstrTok->At(0))->GetString();
150
151       strtmp = (TObjString *)mydirstrTok->At(1);
152       if (strtmp) prefix = strtmp->GetString(); else prefix="";
153
154       listManagers->Add(new TNamed(main,prefix));
155    }
156
157    return listManagers;
158 }
159
160 Bool_t AddAllManagers(TList *listManagers,TString anSrc, TString anMode,TString input,TString inputMC) {
161    TIter next(listManagers);
162    Int_t counter=0;
163    TNamed *name;
164    while ((name = (TNamed *)next.Next())) {
165       if (!AddAnalysisManager(name->GetName(), anSrc, anMode,input,inputMC,name->GetTitle(),Form("%d",counter++))) {
166          Printf("Error: Problem adding %s",name->GetName());
167          return kFALSE;
168       }
169    }
170
171    return kTRUE;
172 }
173
174 Bool_t AddAnalysisManager(TString managerMacro, TString anSrc, TString anMode,TString input,TString inputMC, TString postfix,TString idStr) {
175    gROOT->LoadMacro(Form("%s.C", managerMacro.Data()));
176    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()));
177 }
178
179 Bool_t RunAnalysisManager(TString anSrc = "proof", TString anMode = "test", Long64_t nEvents = 1e10, Long64_t nSkip = 0) {
180
181    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
182
183    if (!mgr) { Printf("Error [RunAnalysisManager] : mgr is null !!!"); return kFALSE; }
184
185    // Run analysis
186    mgr->InitAnalysis();
187    mgr->PrintStatus();
188
189    if ((!anSrc.CompareTo("proof")) || (!anSrc.CompareTo("local"))) {
190       mgr->StartAnalysis(anSrc.Data(), nEvents, nSkip);
191    } else {
192       mgr->StartAnalysis(anSrc.Data());
193    }
194
195    return kTRUE;
196 }