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