]>
Commit | Line | Data |
---|---|---|
221dc8d3 | 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", | |
51a8daf6 | 9 | Bool_t useMultiHandler=kFALSE, |
221dc8d3 | 10 | TString alirsnlitesrc ="$ALICE_ROOT", |
11 | TString alirsnlitetasks ="" | |
680e4375 | 12 | ) { |
221dc8d3 | 13 | |
14 | // some init work | |
15 | anSrc.ToLower(); anMode.ToLower(); input.ToLower(); inputMC.ToLower(); | |
16 | ||
51a8daf6 | 17 | // TGrid::Connect("alien://"); |
221dc8d3 | 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 | ||
221dc8d3 | 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()); | |
51a8daf6 | 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()); | |
221dc8d3 | 63 | Printf("Done OK"); |
64 | return kTRUE; | |
65 | ||
66 | } | |
67 | ||
68 | Int_t LoadLibsBase(TString alirsnlitesrc) { | |
69 | Int_t num = 0; | |
b0635849 | 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;} | |
221dc8d3 | 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 | ||
680e4375 | 90 | input.ToLower(); |
91 | inputMC.ToLower(); | |
51a8daf6 | 92 | |
221dc8d3 | 93 | Bool_t useMC = !inputMC.CompareTo("mc"); |
94 | ||
51a8daf6 | 95 | |
221dc8d3 | 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")) { | |
680e4375 | 102 | Printf("Adding ESD Input Handler ..."); |
221dc8d3 | 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 | } | |
221dc8d3 | 117 | } |
118 | ||
119 | if (useAODOut) { | |
120 | AliAODHandler *aodHandler = new AliAODHandler(); | |
121 | aodHandler->SetOutputFileName("AliAOD.root"); | |
122 | mgr->SetOutputEventHandler(aodHandler); | |
123 | } | |
124 | ||
125 | return kTRUE; | |
221dc8d3 | 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 | } |