]>
Commit | Line | Data |
---|---|---|
58c79e79 | 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; | |
b0635849 | 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;} | |
58c79e79 | 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 | } |