]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG1/PilotTrain/PilotAnalysis.C
fix compilation warning
[u/mrichter/AliRoot.git] / PWG1 / PilotTrain / PilotAnalysis.C
CommitLineData
fe0275ad 1#include "Riostream.h"
f59ecfbc 2void LoadLibraries();
3void AddAnalysisTasks();
4class AliAnalysisAlien;
5AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode);
6
7Bool_t doQAsym = 1; // output ok
8Bool_t doVZERO = 1; // output ok but there is a 2nd file
9Bool_t doVertex = 1; // output ok
10Bool_t doSPD = 1; // output ok, needs RP
11Bool_t doFMD = 1; // output ok
12Bool_t doTPC = 1; // output ok
13Bool_t doEventStat = 1; // output ok
14Bool_t doSDD = 1; // outout ok needs RP
8e52a034 15// new
16Bool_t doTRD = 1; // TRD
17Bool_t doITS = 1; // ITS
18Bool_t doCALO = 1; // Calorimeter
19Bool_t doMUONTrig = 1; // MUON trigger
20Bool_t doMUONEff = 0; // MUON efficiency NEEDS geometry
2efff183 21Bool_t doV0 = 0; // V0 recosntruction performance NEEDS MCtruth
f59ecfbc 22
fe0275ad 23TString train_name = "QA001_PASS4";
24TString job_tag = "QA001: PWG1 QA train";
25TString root_version = "v5-26-00b";
26TString aliroot_version = "v4-19-04-AN";
27TString grid_datadir = "/alice/data/2009/LHC09d";
28TString data_pattern = "*ESDs/pass4/*ESDs.root";
29//TString alien_outdir = "";
30TString alien_outdir = "/alice/data/2009/LHC09d/analysis/QA001_PASS4";
31
32Bool_t useProductionMode = kTRUE;
33
f59ecfbc 34void PilotAnalysis(const char *plugin_mode = "full")
35{
36 TGrid::Connect("alien://");
37 if (!gGrid || !gGrid->IsConnected()) {
38 ::Error("PilotAnalysis", "No grid connection");
39 return;
40 }
fe0275ad 41 // Write configuration
42 TString cdir = gSystem->WorkingDirectory();
43 gSystem->MakeDirectory(train_name);
44 gSystem->ChangeDirectory(train_name);
45 ofstream out;
46 out.open(Form("%sConfig.C",train_name.Data()), ios::out);
47 out << "{" << endl;
48 out << " train_name = " << "\"" << train_name.Data() << "\";" << endl;
49 out << " root_version = " << "\"" << root_version.Data() << "\";" << endl;
50 out << " aliroot_version = " << "\"" << aliroot_version.Data() << "\";" << endl;
51 out << " grid_datadir = " << "\"" << grid_datadir.Data() << "\";" << endl;
52 if (!alien_outdir.Length()) alien_outdir = Form("output_%s",train_name.Data());
53 out << " alien_outdir = " << "\"" << alien_outdir.Data() << "\";" << endl;
54 out << " doQAsim = " << doQAsym << ";" << endl;
55 out << " doVZERO = " << doVZERO << ";" << endl;
56 out << " doVertex = " << doVertex << ";" << endl;
57 out << " doSPD = " << doSPD << ";" << endl;
58 out << " doSDD = " << doSDD << ";" << endl;
59 out << " doFMD = " << doFMD << ";" << endl;
60 out << " doTPC = " << doTPC << ";" << endl;
61 out << " doEventStat = " << doEventStat << ";" << endl;
62 out << "}" << endl;
63 out.close();
64
f59ecfbc 65 // Load libraries
66 gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS");
67 LoadLibraries();
68 // Create manager
69 AliAnalysisManager *mgr = new AliAnalysisManager("PilotAnalysis", "Production train");
70 mgr->SetNSysInfo(1);
71 // Input handler
72 AliESDInputHandlerRP *esdHandler = new AliESDInputHandlerRP();
73 esdHandler->SetActiveBranches("ESDfriend");
74 mgr->SetInputEventHandler(esdHandler);
75
76 mgr->SetDebugLevel(3);
fe0275ad 77 mgr->SetSaveCanvases(kTRUE);
78
f59ecfbc 79 // AnalysisTasks
80 AddAnalysisTasks();
81 // Grid handler
fe0275ad 82 AliAnalysisAlien *alienHandler = CreateAlienHandler(plugin_mode);
f59ecfbc 83 mgr->SetGridHandler(alienHandler);
84 if (mgr->InitAnalysis()) {
85 mgr->PrintStatus();
86 mgr->StartAnalysis("grid");
fe0275ad 87 TString alien_workdir = gGrid->GetHomeDirectory();
88 alien_workdir += "analysisDATA";
89 TString configName = Form("%s/%sConfig.C", alien_workdir.Data(), train_name.Data());
90 if (strcmp(plugin_mode, "test")) {
91 printf("=== Registering configuration file <%s>===\n", configName.Data());
92 if (AliAnalysisAlien::FileExists(configName.Data())) gGrid->Rm(configName.Data());
93 TFile::Cp(Form("file:%sConfig.C",train_name.Data()), Form("alien://%s", configName.Data()));
94 }
f59ecfbc 95 }
96}
97
98void LoadLibraries()
99{
8e52a034 100gSystem->Load("libANALYSIS.so");
101 gSystem->Load("libANALYSISalice.so");
102 gSystem->Load("libTENDER.so");
103 gSystem->Load("libCORRFW.so");
f59ecfbc 104 gSystem->Load("libPWG0base.so");
105 gSystem->Load("libPWG0dep.so");
106 gSystem->Load("libPWG0selectors.so");
107 gSystem->Load("libPWG1.so");
108 gSystem->Load("libPWG2.so");
8e52a034 109 gSystem->Load("libPWG3muon.so");
110 gSystem->Load("libPWG3muondep.so");
f59ecfbc 111 gSystem->Load("libPWG2forward.so");
8e52a034 112 gSystem->Load("libPWG4PartCorrBase.so");
113 gSystem->Load("libPWG4PartCorrDep.so");
114
f59ecfbc 115 if (doSPD) {
fe0275ad 116 TFile::Cp(gSystem->ExpandPathName("$ALICE_ROOT/PWG1/ITS/AliAnalysisTaskSPD.cxx"), "AliAnalysisTaskSPD.cxx");
117 TFile::Cp(gSystem->ExpandPathName("$ALICE_ROOT/PWG1/ITS/AliAnalysisTaskSPD.h"), "AliAnalysisTaskSPD.h");
f59ecfbc 118 gROOT->LoadMacro("AliAnalysisTaskSPD.cxx++g");
119 }
120 if (doSDD) {
fe0275ad 121 TFile::Cp(gSystem->ExpandPathName("$ALICE_ROOT/PWG1/ITS/AliAnalysisTaskSDDRP.cxx"), "AliAnalysisTaskSDDRP.cxx");
122 TFile::Cp(gSystem->ExpandPathName("$ALICE_ROOT/PWG1/ITS/AliAnalysisTaskSDDRP.h"), "AliAnalysisTaskSDDRP.h");
123// gROOT->LoadMacro("AliAnalysisTaskSDDRP.cxx++g");
f59ecfbc 124 }
125}
126
127void AddAnalysisTasks()
128{
8e52a034 129 //
f59ecfbc 130 // Vertexing (A. Dainese)
131 //
8e52a034 132
f59ecfbc 133 if (doVertex) {
134 gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddTaskVertexESD.C");
135 AliAnalysisTaskVertexESD* taskvertexesd = AddTaskVertexESD();
136 taskvertexesd->SelectCollisionCandidates();
137 }
138
8e52a034 139 //
f59ecfbc 140 // TPC QA (E. Sicking)
141 //
8e52a034 142
f59ecfbc 143 if (doQAsym) {
144 gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskQAsym.C");
145 AliAnalysisTaskSE * taskqasim = AddTaskQAsym();
146 taskqasim->SelectCollisionCandidates();
147 }
8e52a034 148
149
f59ecfbc 150 //
151 // VZERO QA (C. Cheshkov)
152 //
8e52a034 153
f59ecfbc 154 if (doVZERO) {
155 gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskVZEROQA.C");
156 AliAnalysisTaskSE * taskv0qa = AddTaskVZEROQA(0);
f59ecfbc 157 }
8e52a034 158
159 //
f59ecfbc 160 // FMD (Hans Hjersing Dalsgaard)
161 //
8e52a034 162
f59ecfbc 163 if (doFMD) {
164 gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskFMD.C");
165 AliAnalysisTaskSE* taskfmd = AddTaskFMD();
166 taskfmd->SelectCollisionCandidates();
167 }
8e52a034 168
f59ecfbc 169 //
170 // TPC (Jacek Otwinowski)
171 //
8e52a034 172
f59ecfbc 173 if (doTPC) {
174 gROOT->LoadMacro("$(ALICE_ROOT)/PWG1/TPC/macros/AddTaskPerformanceTPCQA.C");
175 AliPerformanceTask *tpcQA = AddTaskPerformanceTPCQA(kFALSE, kTRUE);
176 }
8e52a034 177
178 //
179 // ITS
180 //
181 if (doITS) {
182 gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddTaskPerformanceITS.C");
183 AliAnalysisTaskITSTrackingCheck *itsQA = AddTaskPerformanceITS(kFALSE);
184 }
185
f59ecfbc 186 //
187 // SPD (A. Mastroserio)
188 //
8e52a034 189
f59ecfbc 190 if (doSPD) {
191 gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskSPDQA.C");
192 AliAnalysisTaskSE* taskspdqa = AddTaskSPDQA();
193 taskspdqa->SelectCollisionCandidates();
8e52a034 194 }
195
f59ecfbc 196 //
197 // SDD (F. Prino)
198 //
8e52a034 199
f59ecfbc 200 if (doSDD) {
201 gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddSDDPoints.C");
202 AliAnalysisTaskSE* tasksdd = AddSDDPoints();
203 tasksdd->SelectCollisionCandidates();
204 }
8e52a034 205
206
f59ecfbc 207 //
208 // Event Statistics (Jan Fiete)
209 //
210
211 if (doEventStat) {
212 gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskPhysicsSelection.C");
213 AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
214 AliPhysicsSelection* physSel = physSelTask->GetPhysicsSelection();
215 physSel->AddBackgroundIdentification(new AliBackgroundSelection());
fe0275ad 216 AliAnalysisManager::GetAnalysisManager()->RegisterExtraFile("event_stat.root");
8e52a034 217 }
218
219
220 //
221 // TRD (Alex Bercuci, M. Fasel)
222 //
223 if(doTRD) {
803ca16a 224 gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddTrainPerformanceTRD.C");
225 AddTrainPerformanceTRD("ALL");
8e52a034 226 }
227
228 //
229 // Calorimetry (Gustavo Conesa)
230 //
231
232 if(doCALO) {
233 gROOT->LoadMacro("$ALICE_ROOT/PWG4/macros/QA/AddTaskCalorimeterQA.C");
234 AliAnalysisTaskParticleCorrelation *taskCaloQA = AddTaskCalorimeterQA("ESD", kTRUE, kFALSE);
2efff183 235 taskCaloQA->SetDebugLevel(0);
8e52a034 236 }
237
238 //
239 // Muon Trigger
240 //
241
242 if(doMUONTrig) {
243 gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddTaskMTRchamberEfficiency.C");
244 AliAnalysisTaskTrigChEff *taskMuonTrig = AddTaskMTRchamberEfficiency();
245 }
246
247 //
248 // Muon Efficiency
249 //
250
251 if(doMUONEff) {
252 gROOT->LoadMacro("$ALICE_ROOT/PWG3/muondep/AddTaskMUONTrackingEfficiency.C");
253 AliAnalysisTaskMuonTrackingEff *taskMuonTrackEff = AddTaskMUONTrackingEfficiency();
254 }
255
256 //
257 // V0-Decay Reconstruction (Ana Marin)
258 //
259
260 if (doV0) {
261 gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddTaskV0QA.C");
262 AliAnalysisTaskV0QA *taskv0QA = AddTaskV0QA(kFALSE);
263 }
264
265
f59ecfbc 266}
267
268//______________________________________________________________________________
269AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode)
270{
271// Check if user has a valid token, otherwise make one. This has limitations.
272// One can always follow the standard procedure of calling alien-token-init then
273// source /tmp/gclient_env_$UID in the current shell.
274 if (!AliAnalysisGrid::CreateToken()) return NULL;
275 AliAnalysisAlien *plugin = new AliAnalysisAlien();
276// Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
277 plugin->SetRunMode(plugin_mode);
fe0275ad 278 if (useProductionMode) plugin->SetProductionMode();
279 plugin->SetJobTag(job_tag);
f59ecfbc 280 plugin->SetNtestFiles(1);
281// Set versions of used packages
f59ecfbc 282 plugin->SetAPIVersion("V1.1x");
fe0275ad 283 plugin->SetROOTVersion(root_version);
284 plugin->SetAliROOTVersion(aliroot_version);
f59ecfbc 285// Declare input data to be processed.
286// Method 1: Create automatically XML collections using alien 'find' command.
287// Define production directory LFN
fe0275ad 288 plugin->SetGridDataDir(grid_datadir);
f59ecfbc 289// Set data search pattern
fe0275ad 290 plugin->SetDataPattern(data_pattern);
f59ecfbc 291// ...then add run numbers to be considered
292// if (!iAODanalysis) plugin->SetRunRange(run_range[0], run_range[1]);
293 plugin->SetRunPrefix("000");
294 plugin->SetOutputSingleFolder("output");
295 plugin->SetOutputToRunNo();
296 Int_t run_numbers[30] = {104065, 104155, 104157, 104159, 104160, 104315, 104316, 104320, 104321, 104439,
297 104792, 104793, 104799, 104800, 104801, 104802, 104803, 104821, 104824, 104825,
298 104841, 104845, 104849, 104852, 104865, 104867, 104876, 104892, 105143, 105160};
299 for (Int_t i=0; i<30; i++) {
300 plugin->AddRunNumber(run_numbers[i]);
301 }
302// Define alien work directory where all files will be copied. Relative to alien $HOME.
303 plugin->SetGridWorkingDir("analysisDATA");
304// Declare alien output directory. Relative to working directory.
fe0275ad 305 if (alien_outdir.IsNull()) alien_outdir = Form("output_%s",train_name.Data());
306 plugin->SetGridOutputDir(alien_outdir);
f59ecfbc 307
308// plugin->EnablePackage("");
309
310// Declare the analysis source files names separated by blancs. To be compiled runtime
311// using ACLiC on the worker nodes.
312// Declare all libraries (other than the default ones for the framework. These will be
313// loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.
314 plugin->AddIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS");
315 plugin->SetAnalysisSource("AliAnalysisTaskSPD.cxx AliAnalysisTaskSDDRP.cxx");
316 plugin->SetAdditionalLibs("libTENDER.so libPWG0base.so libPWG0dep.so libPWG0selectors.so libPWG1.so libPWG2.so libPWG2forward.so AliAnalysisTaskSPD.h AliAnalysisTaskSPD.cxx AliAnalysisTaskSDDRP.h AliAnalysisTaskSDDRP.cxx");
317
318// Declare the output file names separated by blancs.
319// (can be like: file.root or file.root@ALICE::Niham::File)
320 plugin->SetDefaultOutputs();
321// plugin->SetMergeExcludes(mergeExclude);
322 plugin->SetMaxMergeFiles(100);
323 plugin->SetNrunsPerMaster(1);
324// Optionally define the files to be archived.
325// plugin->SetOutputArchive("log_archive.zip:stdout,stderr@ALICE::NIHAM::File root_archive.zip:AliAOD.root,AOD.tag.root@ALICE::NIHAM::File");
326
327 // Put default output files to archive
328 TString listhists = "";
329 TString listaods = "";
330 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
331 TIter next(mgr->GetOutputs());
332 AliAnalysisDataContainer *output;
333 while ((output=(AliAnalysisDataContainer*)next())) {
334 const char *filename = output->GetFileName();
335 if (!(strcmp(filename, "default"))) {
336 if (!mgr->GetOutputEventHandler()) continue;
337 filename = mgr->GetOutputEventHandler()->GetOutputFileName();
338 if (listaods.Length()) listaods += ",";
339 listaods += filename;
340 } else {
341 if (listhists.Contains(filename)) continue;
342 if (listhists.Length()) listhists += ",";
343 listhists += filename;
344 }
345 }
346 if (mgr->GetExtraFiles().Length()) {
fe0275ad 347 if (listhists.Length()) listhists += ",";
348 listhists += mgr->GetExtraFiles();
349 listhists.ReplaceAll(" ", ",");
f59ecfbc 350 }
351 if (listhists.Length()) listhists = Form("hist_archive.zip:%s", listhists.Data());
352 if (listaods.Length()) listaods = Form("aod_archive.zip:%s", listaods.Data());
353 if (!listhists.Length()) {
354 ::Fatal("AnalysisTrainNew", "No task output !");
355 }
fe0275ad 356 TString outputArchive = "log_archive.zip:stdout,stderr@disk=4";
f59ecfbc 357 if (listaods.Length()) {
358 outputArchive += " ";
359 outputArchive += listaods;
fe0275ad 360 outputArchive += "@disk=4";
f59ecfbc 361 }
362 if (listhists.Length()) {
363 outputArchive += " ";
364 outputArchive += listhists;
fe0275ad 365 outputArchive += "@disk=4";
f59ecfbc 366 }
367// Set friends
368// if (iAODanalysis && iPWG3d2h)
369// plugin->SetFriendChainName("AliAOD.VertexingHF.root");
370 plugin->SetOutputArchive(outputArchive);
371// Optionally set a name for the generated analysis macro (default MyAnalysis.C)
fe0275ad 372 plugin->SetAnalysisMacro(Form("%s.C", train_name.Data()));
f59ecfbc 373// Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
374 plugin->SetSplitMaxInputFileNumber(1000);
375// Optionally set number of failed jobs that will trigger killing waiting sub-jobs.
376// plugin->SetMaxInitFailed(5);
377// Optionally resubmit threshold.
378// plugin->SetMasterResubmitThreshold(90);
379// Optionally set time to live (default 30000 sec)
380 plugin->SetTTL(70000);
381// Optionally set input format (default xml-single)
382 plugin->SetInputFormat("xml-single");
383// Optionally modify the name of the generated JDL (default analysis.jdl)
fe0275ad 384 plugin->SetJDLName(Form("%s.jdl", train_name.Data()));
f59ecfbc 385// Optionally modify the executable name (default analysis.sh)
fe0275ad 386 plugin->SetExecutable(Form("%s.sh", train_name.Data()));
f59ecfbc 387// Optionally modify job price (default 1)
388 plugin->SetPrice(1);
389// Optionally modify split mode (default 'se')
390 plugin->SetSplitMode("se");
391 plugin->SetExecutableCommand("aliroot -b -q");
392 return plugin;
393}