]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/macros/runEMCalJetAnalysis.C
repair example macros
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / macros / runEMCalJetAnalysis.C
CommitLineData
8628b70c 1// runEMCalJetAnalysis.C
2// =====================
3// This macro can be used to run a jet analysis within the EMCal Jet Framework.
4//
5// Examples:
6// -> Analyze ESDs from the pA pilot run on the AliEn grid with your task in AnaClass.cxx/.h
7// dataType = "ESD", useGrid = kTRUE, pattern = "*ESDs/pass2/*ESDs.root", addCXXs = "AnaClass.cxx",
8// addHs = "AnaClass.h", gridDir = "/alice/data/2012/LHC12g", gridMode = "full", runNumbers = "188359 188362"
9//
10// -> Analyze AODs (up to 96 files) locally given in files_aod.txt
11// dataType = "AOD", useGrid = kFALSE, numLocalFiles = 96
12//
13// MERGING ON ALIEN
14// ++++++++++++++++
15// If you run on the grid, you can monitor the jobs with alimonitor.cern.ch. When enough of them are in DONE state,
16// you have to merge the output. This can be done automatically, if you just change the gridMode to "terminate" and
17// give the EXACT name of the task whose output should be merged in uniqueName.
18//
19//
20// Authors: R. Haake, S. Aiola
21
22#include <ctime>
23#include "TGrid.h"
24
25AliAnalysisGrid* CreateAlienHandler(const char* uniqueName, const char* gridDir, const char* gridMode, const char* runNumbers,
26 const char* pattern, TString additionalCode, TString additionalHeaders, Int_t maxFilesPerWorker,
27 Int_t workerTTL, Bool_t isMC);
28
29//______________________________________________________________________________
30void runEMCalJetAnalysis(
31 const char* dataType = "ESD", // set the analysis type, AOD, ESD or sESD
32 Bool_t useGrid = kFALSE, // local or grid
33 const char* gridMode = "test", // set the grid run mode (can be "full", "test", "offline", "submit" or "terminate")
34 const char* pattern = "*ESDs/pass2/*ESDs.root", // file pattern (here one can specify subdirs like passX etc.) (used on grid)
35 const char* gridDir = "/alice/data/2012/LHC12g", // dir on alien, where the files live (used on grid)
36 const char* runNumbers = "188359 188362", // considered run numbers (used on grid)
37 UInt_t numLocalFiles = 50, // number of files analyzed locally
38 const char* runPeriod = "LHC12g", // set the run period (used on grid)
39 const char* uniqueName = "EMCalJF_LEGOTrainTest", // sets base string for the name of the task on the grid
40 UInt_t pSel = AliVEvent::kAny, // used event selection for every task except for the analysis tasks
41 Bool_t useTender = kFALSE, // trigger, if tender task should be used
95449deb 42 Bool_t isMC = kFALSE, // trigger, if MC handler should be used
8628b70c 43
44 // Here you have to specify additional code files you want to use but that are not in aliroot
45 const char* addCXXs = "",
46 const char* addHs = "",
47
48 // These two settings depend on the dataset and your quotas on the AliEN services
49 Int_t maxFilesPerWorker = 4,
50 Int_t workerTTL = 7200
51
52 )
53{
54
55 // Some pre-settings and constants
56
57 enum AlgoType {kKT, kANTIKT};
58 enum JetType {kFULLJETS, kCHARGEDJETS, kNEUTRALJETS};
59 gSystem->SetFPEMask();
60 gSystem->Setenv("ETRAIN_ROOT", ".");
61 gSystem->Setenv("ETRAIN_PERIOD", runPeriod);
62 // change this objects to strings
63 TString usedData(dataType);
64 TString additionalCXXs(addCXXs);
65 TString additionalHs(addHs);
66 cout << dataType << " analysis chosen" << endl;
67 if (useGrid)
68 {
69 cout << "-- using AliEn grid.\n";
70 if (usedData == "sESD")
71 {
72 cout << "Skimmed ESD analysis not available on the grid!" << endl;
73 return;
74 }
75 }
76 else
77 cout << "-- using local analysis.\n";
78
79
80 // Load necessary libraries
81 LoadLibs();
82
83 // Create analysis manager
84 AliAnalysisManager* mgr = new AliAnalysisManager(uniqueName);
85
86 // Check type of input and create handler for it
87 TString localFiles("-1");
88 if(usedData == "AOD")
89 {
90 localFiles = "files_aod.txt";
91 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/train/AddAODHandler.C");
92 AliAODInputHandler* aodH = AddAODHandler();
93 }
94 else if((usedData == "ESD") || (usedData == "sESD"))
95 {
96 if (usedData == "ESD")
97 localFiles = "files_esd.txt";
98 else
99 localFiles = "files_sesd.txt";
100
101 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/train/AddESDHandler.C");
102 AliESDInputHandler* esdH = AddESDHandler();
103 }
104 else
105 {
106 cout << "Data type not recognized! You have to specify ESD, AOD, or sESD!\n";
107 }
108
109 if(!useGrid)
110 cout << "Using " << localFiles.Data() << " as input file list.\n";
111
112 // Create MC handler, if MC is demanded
12eb4ac1 113 if (isMC && (usedData != "AOD"))
8628b70c 114 {
115 AliMCEventHandler* mcH = new AliMCEventHandler();
116 mcH->SetPreReadMode(AliMCEventHandler::kLmPreRead);
117 mcH->SetReadTR(kTRUE);
118 mgr->SetMCtruthEventHandler(mcH);
119 }
120
121 // ################# Now: Add some basic tasks
122
123 // Physics selection task
124 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPhysicsSelection.C");
125 AliPhysicsSelectionTask *physSelTask = AddTaskEmcalPhysicsSelection(kTRUE, kTRUE, pSel, 5, 5, 10, kTRUE, -1, -1, -1, -1);
126
127 if (!physSelTask)
128 {
129 cout << "no physSelTask";
130 return;
131 }
132
133 // Centrality task
134 if (usedData == "ESD") {
135 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
136 AliCentralitySelectionTask *centralityTask = AddTaskCentrality(kTRUE);
137 }
138
139 // Compatibility task, only needed for skimmed ESD
140 if (usedData == "sESD") {
141 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalCompat.C");
142 AliEmcalCompatTask *comptask = AddTaskEmcalCompat();
143 }
144
145 // Setup task
146 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalSetup.C");
147 AliEmcalSetupTask *setupTask = AddTaskEmcalSetup();
7030f36f 148 setupTask->SetGeoPath("$ALICE_ROOT/OADB/EMCAL");
8628b70c 149
8628b70c 150 // Tender Supplies
151 if (useTender)
152 {
153 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEMCALTender.C");
8612dfc8 154 AliAnalysisTaskSE *tender = AddTaskEMCALTender(runPeriod, kTRUE, kTRUE, kTRUE, kTRUE, kTRUE, kFALSE, kTRUE, kTRUE, kTRUE,
155 AliEMCALRecoUtils::kBeamTestCorrected,kTRUE,0.1,0.05,AliEMCALRecParam::kClusterizerv2,
156 kFALSE,kFALSE,-1,1e6,1e6);
8628b70c 157 if (usedData != "AOD" && !useGrid) {
158 AliTender *alitender = dynamic_cast<AliTender*>(tender);
7030f36f 159 alitender->SetDefaultCDBStorage("local://$ALICE_ROOT/OCDB");
8628b70c 160 }
161 }
162
163 // ################# Now: Call jet preparation macro (picotracks, hadronic corrected caloclusters, ...)
164
165 // Jet preparation
166 gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskJetPreparation.C");
167 AddTaskJetPreparation(dataType);
168
169 // ################# Now: Add jet finders+analyzers
170
171 gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJet.C");
172 AliEmcalJetTask* jetFinderTask = AddTaskEmcalJet("PicoTracks", "CaloClustersCorr", kANTIKT, 0.2, kCHARGEDJETS, 0.150, 0.300);
173
174 // Here you can put in your AddTaskMacro for your task
175 gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJetSample.C");
95449deb 176 AliAnalysisTaskEmcalJetSample* anaTask = AddTaskEmcalJetSample("PicoTracks", "CaloClustersCorr", jetFinderTask->GetName(), "");
8628b70c 177
178
179 // Set the physics selection for all given tasks
180 TObjArray *toptasks = mgr->GetTasks();
181 for (Int_t i=0; i<toptasks->GetEntries(); ++i)
182 {
183 AliAnalysisTaskSE *task = dynamic_cast<AliAnalysisTaskSE*>(toptasks->At(i));
184 if (!task)
185 continue;
186 if (task->InheritsFrom("AliPhysicsSelectionTask"))
187 continue;
188 ::Info("setPSel", "Set physics selection for %s (%s)", task->GetName(), task->ClassName());
189 task->SelectCollisionCandidates(pSel);
190 }
191
192 mgr->SetUseProgressBar(1, 25);
193
194 if (!mgr->InitAnalysis())
195 return;
196 mgr->PrintStatus();
197
198 if (useGrid)
199 { // GRID CALCULATION
200
201 AliAnalysisGrid *plugin = CreateAlienHandler(uniqueName, gridDir, gridMode, runNumbers, pattern, additionalCXXs, additionalHs, maxFilesPerWorker, workerTTL, isMC);
202 mgr->SetGridHandler(plugin);
203
204 // start analysis
205 cout << "Starting GRID Analysis...";
206 mgr->SetDebugLevel(0);
207 mgr->StartAnalysis("grid");
208 }
209 else
210 { // LOCAL CALCULATION
211
212 TChain* chain = 0;
213 if (usedData == "AOD")
214 {
215 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/CreateAODChain.C");
216 chain = CreateAODChain(localFiles.Data(), numLocalFiles);
217 }
218 else
219 { // ESD or skimmed ESD
220 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/CreateESDChain.C");
221 chain = CreateESDChain(localFiles.Data(), numLocalFiles);
222 }
223
224 // start analysis
225 cout << "Starting LOCAL Analysis...";
226 mgr->SetDebugLevel(2);
227 mgr->StartAnalysis("local", chain);
228 }
229}
230
231//______________________________________________________________________________
232void LoadLibs()
233{
234 // Load common libraries (better too many than too few)
235 gSystem->Load("libTree");
236 gSystem->Load("libVMC");
237 gSystem->Load("libGeom");
238 gSystem->Load("libGui");
239 gSystem->Load("libXMLParser");
240 gSystem->Load("libMinuit");
241 gSystem->Load("libMinuit2");
242 gSystem->Load("libProof");
243 gSystem->Load("libPhysics");
244 gSystem->Load("libSTEERBase");
245 gSystem->Load("libESD");
246 gSystem->Load("libAOD");
247 gSystem->Load("libOADB");
248 gSystem->Load("libANALYSIS");
249 gSystem->Load("libCDB");
250 gSystem->Load("libRAWDatabase");
251 gSystem->Load("libSTEER");
252 gSystem->Load("libEVGEN");
253 gSystem->Load("libANALYSISalice");
254 gSystem->Load("libCORRFW");
255 gSystem->Load("libTOFbase");
256 //gSystem->Load("libTOFrec");
257 gSystem->Load("libRAWDatabase.so");
258 gSystem->Load("libRAWDatarec.so");
259 gSystem->Load("libTPCbase.so");
260 gSystem->Load("libTPCrec.so");
261 gSystem->Load("libITSbase.so");
262 gSystem->Load("libITSrec.so");
263 gSystem->Load("libTRDbase.so");
264 gSystem->Load("libTENDER.so");
265 gSystem->Load("libSTAT.so");
266 gSystem->Load("libTRDrec.so");
267 gSystem->Load("libHMPIDbase.so");
268 gSystem->Load("libPWGPP.so");
269 gSystem->Load("libPWGHFbase");
270 gSystem->Load("libPWGDQdielectron");
271 gSystem->Load("libPWGHFhfe");
272 gSystem->Load("libEMCALUtils");
273 gSystem->Load("libPHOSUtils");
274 gSystem->Load("libPWGCaloTrackCorrBase");
275 gSystem->Load("libEMCALraw");
276 gSystem->Load("libEMCALbase");
277 gSystem->Load("libEMCALrec");
278 gSystem->Load("libTRDbase");
279 gSystem->Load("libVZERObase");
280 gSystem->Load("libVZEROrec");
281 gSystem->Load("libTENDER");
282 gSystem->Load("libTENDERSupplies");
0764884d 283 gSystem->Load("libPWGTools");
8628b70c 284 gSystem->Load("libPWGEMCAL");
3c91145c 285 gSystem->Load("libESDfilter");
8628b70c 286 gSystem->Load("libPWGGAEMCALTasks");
8628b70c 287 gSystem->Load("libPWGCFCorrelationsBase");
288 gSystem->Load("libPWGCFCorrelationsDPhi");
289
290 //load CGAL, Fastjet and SISCone
291 gSystem->Load("libCGAL");
292 gSystem->Load("libfastjet");
0764884d 293 //For FastJet 3.x use siscon*,fastjetplugins for 2.x use SISConePlugin
8628b70c 294 gSystem->Load("libSISConePlugin");
0764884d
RR
295 // gSystem->Load("libsiscone");
296 // gSystem->Load("libsiscone_spherical");
297 // gSystem->Load("libfastjetplugins");
8628b70c 298 gSystem->Load("libJETAN");
299 gSystem->Load("libFASTJETAN");
300 gSystem->Load("libPWGJEEMCALJetTasks");
301
302
303 // include paths
304 gSystem->AddIncludePath("-Wno-deprecated");
305 gSystem->AddIncludePath("-I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/EMCAL");
306 gSystem->AddIncludePath("-I$ALICE_ROOT/PWGDQ/dielectron -I$ALICE_ROOT/PWGHF/hfe");
307 gSystem->AddIncludePath("-I$ALICE_ROOT/JETAN -I$ALICE_ROOT/JETAN/fastjet");
308}
309
310AliAnalysisGrid* CreateAlienHandler(const char* uniqueName, const char* gridDir, const char* gridMode, const char* runNumbers,
311 const char* pattern, TString additionalCode, TString additionalHeaders, Int_t maxFilesPerWorker,
312 Int_t workerTTL, Bool_t isMC)
313{
314 TDatime currentTime;
315 TString tmpName(uniqueName);
316
317 // Only add current date and time when not in terminate mode! In this case the exact name has to be supplied by the user
318 if(strcmp(gridMode, "terminate"))
319 {
320 tmpName += "_";
321 tmpName += currentTime.GetDate();
322 tmpName += "_";
323 tmpName += currentTime.GetTime();
324 }
325
326 TString tmpAdditionalLibs("");
327 tmpAdditionalLibs = Form("libTree.so libVMC.so libGeom.so libGui.so libXMLParser.so libMinuit.so libMinuit2.so libProof.so libPhysics.so libSTEERBase.so libESD.so libAOD.so libOADB.so libANALYSIS.so libCDB.so libRAWDatabase.so libSTEER.so libANALYSISalice.so libCORRFW.so libTOFbase.so libRAWDatabase.so libRAWDatarec.so libTPCbase.so libTPCrec.so libITSbase.so libITSrec.so libTRDbase.so libTENDER.so libSTAT.so libTRDrec.so libHMPIDbase.so libPWGPP.so libPWGHFbase.so libPWGDQdielectron.so libPWGHFhfe.so libEMCALUtils.so libPHOSUtils.so libPWGCaloTrackCorrBase.so libEMCALraw.so libEMCALbase.so libEMCALrec.so libTRDbase.so libVZERObase.so libVZEROrec.so libTENDER.so libTENDERSupplies.so libPWGEMCAL.so libPWGGAEMCALTasks.so libPWGTools.so libPWGCFCorrelationsBase.so libPWGCFCorrelationsDPhi.so libCGAL.so libJETAN.so libfastjet.so libSISConePlugin.so libFASTJETAN.so libPWGJE.so libPWGmuon.so libPWGJEEMCALJetTasks.so %s %s",additionalCode.Data(),additionalHeaders.Data());
328
329
330 TString macroName("");
331 TString execName("");
332 TString jdlName("");
333 macroName = Form("%s.C", tmpName.Data());
334 execName = Form("%s.sh", tmpName.Data());
335 jdlName = Form("%s.jdl", tmpName.Data());
336
337 AliAnalysisAlien *plugin = new AliAnalysisAlien();
338 plugin->SetOverwriteMode();
339 plugin->SetRunMode(gridMode);
340
341 // Here you can set the (Ali)ROOT version you want to use
342 plugin->SetAPIVersion("V1.1x");
343 plugin->SetROOTVersion("v5-34-02-1");
344 plugin->SetAliROOTVersion("v5-04-21-AN-1");
345
346 plugin->SetGridDataDir(gridDir); // e.g. "/alice/sim/LHC10a6"
347 plugin->SetDataPattern(pattern); //dir structure in run directory
348 if (!isMC)
349 plugin->SetRunPrefix("000");
350
351 plugin->AddRunList(runNumbers);
352
353 plugin->SetGridWorkingDir(Form("work/%s",tmpName.Data()));
354 plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output
355
356 plugin->SetAnalysisSource(additionalCode.Data());
357 plugin->SetAdditionalLibs(tmpAdditionalLibs.Data());
358 plugin->AddExternalPackage("boost::v1_43_0");
359 plugin->AddExternalPackage("cgal::v3.6");
360 plugin->AddExternalPackage("fastjet::v2.4.2");
361
362 plugin->SetDefaultOutputs(kTRUE);
363 //plugin->SetMergeExcludes("");
364 plugin->SetAnalysisMacro(macroName.Data());
365 plugin->SetSplitMaxInputFileNumber(maxFilesPerWorker);
366 plugin->SetExecutable(execName.Data());
367 plugin->SetTTL(workerTTL);
368 plugin->SetInputFormat("xml-single");
369 plugin->SetJDLName(jdlName.Data());
370 plugin->SetPrice(1);
371 plugin->SetSplitMode("se");
372
373 return plugin;
374}