2 void AddAnalysisTasks();
3 class AliAnalysisAlien;
4 AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode);
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
15 void PilotAnalysis(const char *plugin_mode = "full")
17 TGrid::Connect("alien://");
18 if (!gGrid || !gGrid->IsConnected()) {
19 ::Error("PilotAnalysis", "No grid connection");
23 gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS");
26 AliAnalysisManager *mgr = new AliAnalysisManager("PilotAnalysis", "Production train");
29 AliESDInputHandlerRP *esdHandler = new AliESDInputHandlerRP();
30 esdHandler->SetActiveBranches("ESDfriend");
31 mgr->SetInputEventHandler(esdHandler);
33 mgr->SetDebugLevel(3);
38 AliAnalysisGrid *alienHandler = CreateAlienHandler(plugin_mode);
39 mgr->SetGridHandler(alienHandler);
40 if (mgr->InitAnalysis()) {
42 mgr->StartAnalysis("grid");
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");
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");
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");
70 void AddAnalysisTasks()
72 // Vertexing (A. Dainese)
75 gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddTaskVertexESD.C");
76 AliAnalysisTaskVertexESD* taskvertexesd = AddTaskVertexESD();
77 taskvertexesd->SelectCollisionCandidates();
80 // TPC QA (E. Sicking)
83 gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskQAsym.C");
84 AliAnalysisTaskSE * taskqasim = AddTaskQAsym();
85 taskqasim->SelectCollisionCandidates();
88 // VZERO QA (C. Cheshkov)
91 gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskVZEROQA.C");
92 AliAnalysisTaskSE * taskv0qa = AddTaskVZEROQA(0);
93 // taskv0qa->SelectCollisionCandidates();
95 // FMD (Hans Hjersing Dalsgaard)
98 gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskFMD.C");
99 AliAnalysisTaskSE* taskfmd = AddTaskFMD();
100 taskfmd->SelectCollisionCandidates();
103 // TPC (Jacek Otwinowski)
106 gROOT->LoadMacro("$(ALICE_ROOT)/PWG1/TPC/macros/AddTaskPerformanceTPCQA.C");
107 AliPerformanceTask *tpcQA = AddTaskPerformanceTPCQA(kFALSE, kTRUE);
110 // SPD (A. Mastroserio)
113 gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskSPDQA.C");
114 AliAnalysisTaskSE* taskspdqa = AddTaskSPDQA();
115 taskspdqa->SelectCollisionCandidates();
121 gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddSDDPoints.C");
122 AliAnalysisTaskSE* tasksdd = AddSDDPoints();
123 tasksdd->SelectCollisionCandidates();
126 // Event Statistics (Jan Fiete)
130 gROOT->LoadMacro("$ALICE_ROOT/PWG1/PilotTrain/AddTaskPhysicsSelection.C");
131 AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
132 AliPhysicsSelection* physSel = physSelTask->GetPhysicsSelection();
133 physSel->AddBackgroundIdentification(new AliBackgroundSelection());
137 //______________________________________________________________________________
138 AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode)
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]);
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");
177 // plugin->EnablePackage("");
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");
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");
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;
210 if (listhists.Contains(filename)) continue;
211 if (listhists.Length()) listhists += ",";
212 listhists += filename;
215 if (mgr->GetExtraFiles().Length()) {
216 if (listaods.Length()) listaods += ",";
217 listaods += mgr->GetExtraFiles();
218 listaods.ReplaceAll(" ", ",");
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 !");
225 TString outputArchive = "log_archive.zip:stdout,stderr";
226 if (listaods.Length()) {
227 outputArchive += " ";
228 outputArchive += listaods;
230 if (listhists.Length()) {
231 outputArchive += " ";
232 outputArchive += listhists;
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)
256 // Optionally modify split mode (default 'se')
257 plugin->SetSplitMode("se");
258 plugin->SetExecutableCommand("aliroot -b -q");