]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/PilotTrain/PilotAnalysis.C
Pilot analysis using the plugin. (M. Gheata)
[u/mrichter/AliRoot.git] / PWG1 / PilotTrain / PilotAnalysis.C
1 void LoadLibraries();
2 void AddAnalysisTasks(); 
3 class AliAnalysisAlien;                                                                                                                    
4 AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode);
5
6 Bool_t doQAsym        = 1;   // output ok
7 Bool_t doVZERO        = 1;   // output ok but there is a 2nd file
8 Bool_t doVertex       = 1;   // output ok
9 Bool_t doSPD          = 1;   // output ok, needs RP   
10 Bool_t doFMD          = 1;   // output ok
11 Bool_t doTPC          = 1;   // output ok
12 Bool_t doEventStat    = 1;   // output ok
13 Bool_t doSDD          = 1;   // outout ok needs RP
14
15 void PilotAnalysis(const char *plugin_mode = "full")
16 {
17   TGrid::Connect("alien://");
18   if (!gGrid || !gGrid->IsConnected()) {
19     ::Error("PilotAnalysis", "No grid connection");
20     return;
21   }
22   // Load libraries
23   gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS");
24   LoadLibraries();
25   // Create manager
26   AliAnalysisManager *mgr  = new AliAnalysisManager("PilotAnalysis", "Production train");
27   mgr->SetNSysInfo(1);
28   // Input handler
29   AliESDInputHandlerRP *esdHandler = new AliESDInputHandlerRP();
30   esdHandler->SetActiveBranches("ESDfriend");
31   mgr->SetInputEventHandler(esdHandler);
32
33   mgr->SetDebugLevel(3);
34
35   // AnalysisTasks
36   AddAnalysisTasks();
37   // Grid handler
38   AliAnalysisGrid *alienHandler = CreateAlienHandler(plugin_mode);
39   mgr->SetGridHandler(alienHandler);
40   if (mgr->InitAnalysis()) {                                                                                                              
41     mgr->PrintStatus(); 
42     mgr->StartAnalysis("grid");
43   }
44 }
45
46 void LoadLibraries()
47 {
48   gSystem->Load("libANALYSIS");
49   gSystem->Load("libANALYSISalice");
50   gSystem->Load("libTENDER");
51   gSystem->Load("libPWG0base.so");
52   gSystem->Load("libPWG0dep.so");
53   gSystem->Load("libPWG0selectors.so");
54   gSystem->Load("libPWG1.so");
55   gSystem->Load("libPWG2.so");
56   gSystem->Load("libPWG2forward.so");
57
58   if (doSPD) {   
59     TFile::Cp(gSystem->ExpandPathName("$ALICE_ROOT/PWG1/PilotTrain/AliAnalysisTaskSPD.cxx"), "AliAnalysisTaskSPD.cxx");
60     TFile::Cp(gSystem->ExpandPathName("$ALICE_ROOT/PWG1/PilotTrain/AliAnalysisTaskSPD.h"), "AliAnalysisTaskSPD.h");
61     gROOT->LoadMacro("AliAnalysisTaskSPD.cxx++g");
62   }
63   if (doSDD) {  
64     TFile::Cp(gSystem->ExpandPathName("$ALICE_ROOT/PWG1/PilotTrain/AliAnalysisTaskSDDRP.cxx"), "AliAnalysisTaskSDDRP.cxx");
65     TFile::Cp(gSystem->ExpandPathName("$ALICE_ROOT/PWG1/PilotTrain/AliAnalysisTaskSDDRP.h"), "AliAnalysisTaskSDDRP.h");
66     gROOT->LoadMacro("AliAnalysisTaskSDDRP.cxx++g");
67   }  
68 }
69
70 void AddAnalysisTasks()
71 {
72   // Vertexing (A. Dainese)
73   // 
74   if (doVertex) {
75     gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddTaskVertexESD.C");
76     AliAnalysisTaskVertexESD* taskvertexesd =  AddTaskVertexESD();
77     taskvertexesd->SelectCollisionCandidates();
78   }  
79
80   // TPC QA (E. Sicking)
81   //
82   if (doQAsym) {
83     gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskQAsym.C");
84     AliAnalysisTaskSE * taskqasim = AddTaskQAsym();
85     taskqasim->SelectCollisionCandidates();
86   }  
87   //
88   // VZERO QA  (C. Cheshkov)
89   //
90   if (doVZERO) {
91     gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskVZEROQA.C");
92     AliAnalysisTaskSE * taskv0qa = AddTaskVZEROQA(0);
93 //  taskv0qa->SelectCollisionCandidates();
94   }
95   // FMD (Hans Hjersing Dalsgaard)
96   //
97   if (doFMD) {
98     gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskFMD.C");
99     AliAnalysisTaskSE* taskfmd = AddTaskFMD();
100     taskfmd->SelectCollisionCandidates();
101   }  
102   //
103   // TPC (Jacek Otwinowski)
104   //
105   if (doTPC) {
106     gROOT->LoadMacro("$(ALICE_ROOT)/PWG1/TPC/macros/AddTaskPerformanceTPCQA.C");
107     AliPerformanceTask *tpcQA = AddTaskPerformanceTPCQA(kFALSE, kTRUE);
108   }  
109   //
110   // SPD (A. Mastroserio)
111   //
112   if (doSPD) {
113     gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskSPDQA.C");
114     AliAnalysisTaskSE* taskspdqa = AddTaskSPDQA();
115     taskspdqa->SelectCollisionCandidates();
116   }  
117   //
118   // SDD (F. Prino)
119   //
120   if (doSDD) {
121     gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddSDDPoints.C");
122     AliAnalysisTaskSE* tasksdd = AddSDDPoints();
123     tasksdd->SelectCollisionCandidates();
124   }
125   //
126   // Event Statistics (Jan Fiete)
127   //
128
129   if (doEventStat) {
130       gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskPhysicsSelection.C");
131       AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
132       AliPhysicsSelection* physSel = physSelTask->GetPhysicsSelection();
133       physSel->AddBackgroundIdentification(new AliBackgroundSelection());
134   }    
135 }
136
137 //______________________________________________________________________________
138 AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode)
139 {
140 // Check if user has a valid token, otherwise make one. This has limitations.
141 // One can always follow the standard procedure of calling alien-token-init then
142 //   source /tmp/gclient_env_$UID in the current shell.
143    if (!AliAnalysisGrid::CreateToken()) return NULL;
144    AliAnalysisAlien *plugin = new AliAnalysisAlien();
145 // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
146    plugin->SetRunMode(plugin_mode);
147 //   if (useProductionMode) plugin->SetProductionMode();
148    plugin->SetJobTag("Pilot analysis train");
149    plugin->SetNtestFiles(1);
150 // Set versions of used packages
151 //   plugin->SetAPIVersion("V2.4");
152    plugin->SetAPIVersion("V1.1x");
153    plugin->SetROOTVersion("v5-25-04-3");
154    plugin->SetAliROOTVersion("v4-18-14-AN-1");
155 // Declare input data to be processed.
156 // Method 1: Create automatically XML collections using alien 'find' command.
157 // Define production directory LFN
158    plugin->SetGridDataDir("/alice/data/2009/LHC09d");
159 // Set data search pattern
160    plugin->SetDataPattern("*ESD.tag.root");
161 // ...then add run numbers to be considered
162 //   if (!iAODanalysis) plugin->SetRunRange(run_range[0], run_range[1]);
163    plugin->SetRunPrefix("000");
164    plugin->SetOutputSingleFolder("output");
165    plugin->SetOutputToRunNo();
166    Int_t run_numbers[30] = {104065, 104155, 104157, 104159, 104160, 104315, 104316, 104320, 104321, 104439, 
167                             104792, 104793, 104799, 104800, 104801, 104802, 104803, 104821, 104824, 104825,
168                             104841, 104845, 104849, 104852, 104865, 104867, 104876, 104892, 105143, 105160};
169    for (Int_t i=0; i<30; i++) {
170       plugin->AddRunNumber(run_numbers[i]);
171    }   
172 // Define alien work directory where all files will be copied. Relative to alien $HOME.
173    plugin->SetGridWorkingDir("analysisDATA");
174 // Declare alien output directory. Relative to working directory.
175    plugin->SetGridOutputDir("pilotAnalysis2");
176
177 //   plugin->EnablePackage("");
178
179 // Declare the analysis source files names separated by blancs. To be compiled runtime
180 // using ACLiC on the worker nodes.
181 // Declare all libraries (other than the default ones for the framework. These will be
182 // loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.
183    plugin->AddIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include  -I$ALICE_ROOT/ITS");
184    plugin->SetAnalysisSource("AliAnalysisTaskSPD.cxx AliAnalysisTaskSDDRP.cxx");
185    plugin->SetAdditionalLibs("libTENDER.so libPWG0base.so libPWG0dep.so libPWG0selectors.so libPWG1.so libPWG2.so libPWG2forward.so AliAnalysisTaskSPD.h AliAnalysisTaskSPD.cxx AliAnalysisTaskSDDRP.h AliAnalysisTaskSDDRP.cxx");
186      
187 // Declare the output file names separated by blancs.
188 // (can be like: file.root or file.root@ALICE::Niham::File)
189    plugin->SetDefaultOutputs();
190 //   plugin->SetMergeExcludes(mergeExclude);
191    plugin->SetMaxMergeFiles(100);
192    plugin->SetNrunsPerMaster(1);
193 // Optionally define the files to be archived.
194 //   plugin->SetOutputArchive("log_archive.zip:stdout,stderr@ALICE::NIHAM::File root_archive.zip:AliAOD.root,AOD.tag.root@ALICE::NIHAM::File");
195    
196    // Put default output files to archive
197    TString listhists = "";
198    TString listaods  = "";
199    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
200    TIter next(mgr->GetOutputs());
201    AliAnalysisDataContainer *output;
202    while ((output=(AliAnalysisDataContainer*)next())) {
203       const char *filename = output->GetFileName();
204       if (!(strcmp(filename, "default"))) {
205          if (!mgr->GetOutputEventHandler()) continue;
206          filename = mgr->GetOutputEventHandler()->GetOutputFileName();
207          if (listaods.Length()) listaods += ",";
208          listaods += filename;
209       } else {   
210          if (listhists.Contains(filename)) continue;
211          if (listhists.Length()) listhists += ",";
212          listhists += filename;
213       }   
214    }
215    if (mgr->GetExtraFiles().Length()) {
216       if (listaods.Length()) listaods += ",";
217       listaods += mgr->GetExtraFiles();
218       listaods.ReplaceAll(" ", ",");
219    }
220    if (listhists.Length()) listhists = Form("hist_archive.zip:%s", listhists.Data());
221    if (listaods.Length())  listaods  = Form("aod_archive.zip:%s", listaods.Data());
222    if (!listhists.Length()) {
223       ::Fatal("AnalysisTrainNew", "No task output !");
224    }
225    TString outputArchive = "log_archive.zip:stdout,stderr";
226    if (listaods.Length()) {
227       outputArchive += " ";
228       outputArchive += listaods;
229    }   
230    if (listhists.Length()) {
231       outputArchive += " ";
232       outputArchive += listhists;
233    }   
234 // Set friends
235 //   if (iAODanalysis && iPWG3d2h) 
236 //      plugin->SetFriendChainName("AliAOD.VertexingHF.root");
237    plugin->SetOutputArchive(outputArchive);
238 // Optionally set a name for the generated analysis macro (default MyAnalysis.C)
239    plugin->SetAnalysisMacro("pilotAnalysis002.C");
240 // Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
241    plugin->SetSplitMaxInputFileNumber(1000);
242 // Optionally set number of failed jobs that will trigger killing waiting sub-jobs.
243 //   plugin->SetMaxInitFailed(5);
244 // Optionally resubmit threshold.
245 //   plugin->SetMasterResubmitThreshold(90);
246 // Optionally set time to live (default 30000 sec)
247    plugin->SetTTL(70000);
248 // Optionally set input format (default xml-single)
249    plugin->SetInputFormat("xml-single");
250 // Optionally modify the name of the generated JDL (default analysis.jdl)
251    plugin->SetJDLName("pilotAnalysis002.jdl");
252 // Optionally modify the executable name (default analysis.sh)
253    plugin->SetExecutable("pilotAnalysis002.sh");
254 // Optionally modify job price (default 1)
255    plugin->SetPrice(1);      
256 // Optionally modify split mode (default 'se')    
257    plugin->SetSplitMode("se");
258    plugin->SetExecutableCommand("aliroot -b -q");
259    return plugin;
260 }