]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ANALYSIS/macros/QAtrain_duo.C
Update pA run OADB configuration
[u/mrichter/AliRoot.git] / ANALYSIS / macros / QAtrain_duo.C
CommitLineData
c53f5f63 1// QAtrain_duo - assumes having 2 sets of input data files using 2 suffixes:
2// AliESDs_barrel.root AliESDfriends_barrel.root ... suffix = _barrel
3// AliESDs_outer.root AliESDfriends_outer.root ... suffix = _outer
4// HOW TO RUN (for run_no=158285):
5// QA job: should call:
6// ln -fs AliESDs_barrel.root AliESDs.root
7// ln -fs AliESDfriends_barrel.root AliESDfriends.root
8// ... same for all specific reco files
9// aliroot -b -q QAtrain_duo.C\(\"_barrel\"\,158285\) producing:
10// -> EventStat_temp_barrel.root QAresults_barrel.root 400_400_0_350.stat
11//
12// ln -fs AliESDs_outer.root AliESDs.root
13// ln -fs AliESDfriends_outer.root AliESDfriends.root
14// ... same for all specific reco files
15// aliroot QAtrain_duo.C\(\"_outer\"\,158285\) producing:
16// -> EventStat_temp_outer.root QAresults_outer.root 400_400_0_380.stat
17//
18// Each merging job:
19// for stages i < 5
20// aliroot -b -q QAtrain_duo.C\(\"_barrel\"\,158285\,\"wn.xml\"\,i\)
21// aliroot -b -q QAtrain_duo.C\(\"_outer\"\,158285\,\"wn.xml\"\,i\)
22// -> same output files as the QA jobs (except .stat)
23// for stage 5
24// aliroot -b -q QAtrain_duo.C\(\"_barrel\"\,158285\,\"Stage_5.xml\"\,5\)
25// -> event_stat_barrel.root trending_barrel.root 145230_145230_0_120345.stat
26// aliroot -b -q QAtrain_duo.C\(\"_outer\"\,158285\,\"Stage_5.xml\"\,5\)
27// -> event_stat_outer.root trending_outer.root 145230_145230_0_132897.stat
28#include "Riostream.h"
29void LoadLibraries();
69df31bd 30void AddAnalysisTasks(const char *, const char *);
c53f5f63 31void QAmerge(const char *,const char *, Int_t);
32
33Int_t iCollisionType = 0; // 0=pp, 1=PbPb
34// Trigger mask.
35
36UInt_t kTriggerInt = AliVEvent::kAnyINT;
05ce1e04 37UInt_t kTriggerMuonBarrel = AliVEvent::kMUU7 | AliVEvent::kMuonUnlikeLowPt8 | AliVEvent::kMuonUnlikeLowPt0;
69df31bd 38UInt_t kTriggerEMC = AliVEvent::kEMC7 | AliVEvent::kEMC8 | AliVEvent::kEMCEJE | AliVEvent::kEMCEGA;
c53f5f63 39UInt_t kTriggerHM = AliVEvent::kHighMult;
40// Main trigger mask used:
41UInt_t kTriggerMask = kTriggerInt;
42
43Int_t runNumbers[5] = {158626};
44
45Bool_t doCDBconnect = 1;
46Bool_t doEventStat = 1;
69df31bd 47Bool_t doCentrality = 0;
c53f5f63 48Bool_t doQAsym = 1;
49Bool_t doVZERO = 1; // there is a 2nd file
50Bool_t doVZEROPbPb = 1;
51Bool_t doVertex = 1;
52Bool_t doSPD = 1; // needs RP
53Bool_t doTPC = 1;
54Bool_t doHLT = 1;
55Bool_t doSDD = 1; // needs RP
56Bool_t doSSDdEdx = 1;
57
58Bool_t doTRD = 1;
59Bool_t doITS = 1;
60Bool_t doITSsaTracks = 1;
61Bool_t doITSalign = 1;
62Bool_t doCALO = 1;
63Bool_t doMUONTrig = 1;
64Bool_t doImpParRes = 1;
65Bool_t doMUON = 1;
66Bool_t doTOF = 1;
67Bool_t doHMPID = 1;
68Bool_t doT0 = 1;
69Bool_t doZDC = 1;
70Bool_t doPIDResponse = 1;
71Bool_t doPIDqa = 1; //new
72Bool_t doFMD = 1; // new
73Bool_t doPHOS = 1; // new
74Bool_t doPHOSTrig = 1; // new
75Bool_t doEMCAL = 1;
76Bool_t doFBFqa = 1; // new - not ported yet to revision
77
78 // Debug level
79Int_t debug_level = 1; // Debugging
80Int_t run_number = 0;
81
05ce1e04 82void QAtrain_duo(const char *suffix="", Int_t run = 0,
83 const char *xmlfile = "wn.xml",
84 Int_t stage = 0, /*0 = QA train, 1...n - merging stage*/
85 const char *cdb = "raw://")
c53f5f63 86{
87 run_number = run;
69df31bd 88 TString ss(suffix);
89 ss.ToLower();
90 Bool_t ibarrel = (ss.Contains("barrel"))?kTRUE:kFALSE;
c53f5f63 91
05ce1e04 92 TString cdbString(cdb);
93 if (cdbString.Contains("raw://"))
94 {
95 TGrid::Connect("alien://");
96 if (!gGrid || !gGrid->IsConnected()) {
97 ::Error("QAtrain", "No grid connection");
98 return;
99 }
100 }
c53f5f63 101 // Set temporary merging directory to current one
102 gSystem->Setenv("TMPDIR", gSystem->pwd());
103 // Set temporary compilation directory to current one
104 gSystem->SetBuildDir(gSystem->pwd(), kTRUE);
105 // Load libraries
106 LoadLibraries();
107 printf("Include path: %s\n", gSystem->GetIncludePath());
108 // Create manager
109 AliAnalysisManager *mgr = new AliAnalysisManager("PilotAnalysis", "Production train");
110 mgr->SetRunFromPath(run_number);
111 // Input handler
112 AliESDInputHandlerRP *esdHandler = new AliESDInputHandlerRP();
69df31bd 113 if (ibarrel) {
114 esdHandler->SetReadFriends(kTRUE);
115 esdHandler->SetActiveBranches("ESDfriend");
116 }
c53f5f63 117 mgr->SetInputEventHandler(esdHandler);
118 mgr->SetDebugLevel(debug_level);
69df31bd 119 mgr->SetFileInfoLog("fileinfo.log");
c53f5f63 120
121 // AnalysisTasks
69df31bd 122 AddAnalysisTasks(suffix, cdb);
c53f5f63 123 if (stage>0) {
124 QAmerge(suffix, xmlfile, stage);
125 return;
126 }
127 // Input chain
128 TChain *chain = new TChain("esdTree");
129 chain->Add("AliESDs.root");
130 TStopwatch timer;
131 timer.Start();
132 if (mgr->InitAnalysis()) {
133 mgr->PrintStatus();
134 mgr->SetSkipTerminate(kTRUE);
135// mgr->SetNSysInfo(1);
136 mgr->StartAnalysis("local", chain);
137 }
138 timer.Print();
139}
140
141void LoadLibraries()
142{
143 gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TRD -I$ALICE_ROOT/PWGPP -I$ALICE_ROOT/PWGPP/TRD");
144 gSystem->Load("libANALYSIS");
145 gSystem->Load("libANALYSISalice");
146 gSystem->Load("libCORRFW");
147 gSystem->Load("libTENDER");
148 gSystem->Load("libPWGPP.so");
149 gSystem->Load("libAliHLTTrigger.so");
150
151 if (doEMCAL || doPHOS || doCALO) {
152 gSystem->Load("libEMCALUtils");
153 gSystem->Load("libPHOSUtils");
154 gSystem->Load("libPWGCaloTrackCorrBase");
155 gSystem->Load("libPWGGACaloTrackCorrelations");
156 gSystem->Load("libPWGGACaloTasks");
157 gSystem->Load("libPWGGAPHOSTasks");
05ce1e04 158 gSystem->Load("libPWGEMCAL");
c53f5f63 159 gSystem->Load("libPWGGAEMCALTasks");
160 }
161 if(doMUON || doMUONTrig) {
162 gSystem->Load("libPWGmuon");
163 gSystem->Load("libPWGPPMUONlite");
164 gSystem->Load("libPWGmuondep");
165 }
166 if (doFMD) {
167 gSystem->Load("libPWGLFforward2");
168 }
169}
170
69df31bd 171void AddAnalysisTasks(const char *suffix, const char *cdb_location)
c53f5f63 172{
173 TString ss(suffix);
174 ss.ToLower();
175 Bool_t ibarrel = (ss.Contains("barrel"))?kTRUE:kFALSE;
69df31bd 176 Bool_t iall = ss.IsNull();
c53f5f63 177 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
178 mgr->SetCommonFileName(Form("QAresults%s.root",suffix));
179 // Statistics task
180 mgr->AddStatisticsTask(kTriggerMask);
181 //
182 // CDB connection
183 //
184 if (doCDBconnect) {
185 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskCDBconnect.C");
186 AliTaskCDBconnect *taskCDB = AddTaskCDBconnect();
187 if (!taskCDB) return;
188 AliCDBManager *cdb = AliCDBManager::Instance();
69df31bd 189 cdb->SetDefaultStorage(cdb_location);
c53f5f63 190 taskCDB->SetRunNumber(run_number);
191 }
192
193 //
194 // Event Statistics (Jan Fiete)
195 //
196 if (doEventStat) {
197 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
198 AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(kFALSE /*MC*/);
199 AliAnalysisDataContainer *cstatsout = (AliAnalysisDataContainer*)mgr->GetOutputs()->FindObject("cstatsout");
200 cstatsout->SetFileName(Form("EventStat_temp%s.root", suffix));
201 }
202
203 //
204 // Centrality (A. Toia)
205 //
206 if (doCentrality) {
69df31bd 207// if (!iCollisionType) {
208// printf("Disabling centrality task for p-p\n");
209// doCentrality = kFALSE;
210// } else {
c53f5f63 211 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
212 AliCentralitySelectionTask *taskCentrality = AddTaskCentrality();
69df31bd 213 AliAnalysisDataContainer *centralityout = (AliAnalysisDataContainer*)mgr->GetOutputs()->FindObject("CentralityStat");
214 centralityout->SetFileName(Form("EventStat_temp%s.root", suffix));
215// }
c53f5f63 216 }
217
218 // Vertexing (A. Dainese)
219 //
69df31bd 220 if (doVertex && (ibarrel || iall)) {
c53f5f63 221 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskVertexESD.C");
222 AliAnalysisTaskVertexESD* taskvertexesd = AddTaskVertexESD(kFALSE, kTriggerMask);
223 taskvertexesd->SelectCollisionCandidates(kTriggerMask);
224 }
225
226 // TPC QA (E. Sicking)
227 //
69df31bd 228 if (doQAsym && (ibarrel || iall)) {
c53f5f63 229 // offline trigger in AddTask
230 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskQAsym.C");
69df31bd 231 AliAnalysisTaskSE * taskqasim = AddTaskQAsym(0, kTriggerMask, kTriggerHM, kTriggerEMC, kTriggerMuonBarrel);
c53f5f63 232 }
233 //
234 // VZERO QA (C. Cheshkov)
235 //
69df31bd 236 if (doVZERO && (ibarrel || iall)) {
c53f5f63 237 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskVZEROQA.C");
238 AliAnalysisTaskSE * taskv0qa = AddTaskVZEROQA(0);
239// taskv0qa->SelectCollisionCandidates();
05ce1e04 240 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskVZEROQATrig.C");
241 AliAnaVZEROQA *taskv0qatrig = AddTaskVZEROQATrig(0);
242 taskv0qatrig->SelectCollisionCandidates(AliVEvent::kINT8);
243
c53f5f63 244 }
245 if (doVZEROPbPb && iCollisionType==1) {
246 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/VZERO/AddTaskVZEROPbPb.C");
247 AliAnaVZEROPbPb* taskV0PbPb = (AliAnaVZEROPbPb*)AddTaskVZEROPbPb(0);
248// taskV0PbPb->SetClassesNames("CTRUE-,C0HWU-,CPBI2WU_B1-,CPBI2_B1-,CPBI1WU-,CPBI1-,CVHNWU-,CVHN-,CVLNWU-,CVLN-");
249// taskV0PbPb->SetClassesNames("CTRUE-,C0HWU-,CPBI2WU,CPBI2,CPBI1WU-,CPBI1-,CVHNWU,CVHN,CVLNWU,CVLN");
250// taskV0PbPb->SetClassesNames("CTRUE-,C0HWU-,CPBI2WU-,CPBI2-,CPBI2WU_B1-,CPBI2_B1-,CPBI1WU-,CPBI1-,CVHNWU-,CVHN-,CVHN_R2-,CVHNWU_R2-,CVLNWU-,CVLN-,CVLN_B2-,CVLNWU_B2-");
251// taskV0PbPb->SetClassesNames("CTRUE-,C0HWU-,CPBI2WU-,CPBI2-,CPBI2WU_B1-,CPBI2_B1-,CPBI1WU-,CPBI1-,CVHNWU-,CVHN-,CVHN_R2-,CVHNWU_R2-,CVLNWU-,CVLN-,CVLN_R1-,CVLN_B2-,CVLNWU_R1-,CVLNWU_B2-");
252 taskV0PbPb->SetClassesNames("CTRUE-,C0HWU-,CPBI2WU-,CPBI2-,CPBI2WU_B1-,CPBI2_B1-,CPBI1WU-,CPBI1-,CVHNWU-,CVHN-,CVHN_R2-,CVHNWU_R2-,CVLNWU-,CVLN-,CVLN_R1-,CVLN_B2-,CVLNWU_R1-,CVLNWU_B2-,CSEMI_R1-,CSEMIWU_R1-,CCENT_R2-,CCENTWU_R2-");
253 }
254 //
255 // TPC (Jacek Otwinowski & Michael Knichel)
256 //
257 //
258 // Optionally MC information can be used by setting the 1st argument to true
259 // Optionally friends information can be switched off by setting the 2st argument
260 // to false
261 // Optionally highMult axis can be used by setting the 3st argument to true (for PbPb)
69df31bd 262 if (doTPC && (ibarrel || iall)) {
c53f5f63 263 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
264 AliPerformanceTask *tpcQA = 0;
265 if (iCollisionType) {
266 // High multiplicity Pb-Pb
267 tpcQA = AddTaskPerformanceTPCdEdxQA(kFALSE, kTRUE, kTRUE);
268 } else {
269 // Low multiplicity (pp)
270 tpcQA = AddTaskPerformanceTPCdEdxQA(kFALSE, kTRUE, kFALSE);
271 }
272 tpcQA->SelectCollisionCandidates(kTriggerMask);
273 }
274
275 // HLT (Alberica Toia)
69df31bd 276 if (doHLT && (ibarrel || iall)) {
c53f5f63 277 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
278 AliPerformanceTask *hltQA = AddTaskPerformanceTPCdEdxQA(kFALSE, kTRUE, kFALSE,0,kTRUE);
279 hltQA->SelectCollisionCandidates(kTriggerMask);
280 }
281 //
282 // SPD (A. Mastroserio)
283 //
69df31bd 284 if (doSPD && (ibarrel || iall)) {
c53f5f63 285 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskSPDQA.C");
286 AliAnalysisTaskSPD* taskspdqa = (AliAnalysisTaskSPD*)AddTaskSPDQA();
287 // Request from Annalisa
288 if (iCollisionType) taskspdqa->SetHeavyIonMode();
289 taskspdqa->SelectCollisionCandidates(kTriggerMask);
69df31bd 290 taskspdqa->SetOCDBInfo(run_number, cdb_location);
c53f5f63 291 }
292 //
293 // SDD (F. Prino)
294 //
69df31bd 295 if (doSDD && (ibarrel || iall)) {
c53f5f63 296 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddSDDPoints.C");
297 AliAnalysisTaskSE* tasksdd = AddSDDPoints();
298 tasksdd->SelectCollisionCandidates(kTriggerMask);
299 }
300 //
301 // SSD dEdx (Marek Chojnacki)
302 //
69df31bd 303 if (doSSDdEdx && (ibarrel || iall)) {
c53f5f63 304 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskdEdxSSDQA.C");
305 AliAnalysisTaskSE* taskssddedx = AddTaskdEdxSSDQA();
306 taskssddedx->SelectCollisionCandidates(kTriggerMask);
307 }
308
309 //
310 // ITS
311 //
69df31bd 312 if (doITS && (ibarrel || iall)) {
c53f5f63 313 // hardcoded non-zero trigger mask
314 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskPerformanceITS.C");
315 AliAnalysisTaskITSTrackingCheck *itsQA = 0;
316 AliAnalysisTaskITSTrackingCheck *itsQACent0010 = 0;
317 AliAnalysisTaskITSTrackingCheck *itsQACent3050 = 0;
318 AliAnalysisTaskITSTrackingCheck *itsQACent6080 = 0;
319 if(iCollisionType==0) {
320 itsQA = AddTaskPerformanceITS(kFALSE);
321 } else {
322 itsQA = AddTaskPerformanceITS(kFALSE);
323 itsQACent0010 = AddTaskPerformanceITS(kFALSE,kFALSE,kFALSE,3500,10000);
324 itsQACent3050 = AddTaskPerformanceITS(kFALSE,kFALSE,kFALSE,590,1570);
325 itsQACent6080 = AddTaskPerformanceITS(kFALSE,kFALSE,kFALSE,70,310);
326 }
327 }
328 //
329 // ITS saTracks, align (F.Prino)
330 //
69df31bd 331 if (doITSsaTracks && (ibarrel || iall)) {
c53f5f63 332 // offline trigger in AddTask
333 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskITSsaTracks.C");
334 AliAnalysisTaskITSsaTracks *itssaTracks = AddTaskITSsaTracks(kFALSE,kFALSE);
335 itssaTracks->SelectCollisionCandidates(kTriggerMask);
336 }
69df31bd 337 if (doITSalign && (ibarrel || iall)) {
c53f5f63 338 // no offline trigger selection
339 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskITSAlign.C");
69df31bd 340 AliAnalysisTaskITSAlignQA *itsAlign = AddTaskITSAlign(0,2012);
c53f5f63 341 }
342 //
343 // TRD (Alex Bercuci, M. Fasel)
344 //
69df31bd 345 if(doTRD && (ibarrel || iall)) {
c53f5f63 346 // no offline trigger selection
347 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTrainPerformanceTRD.C");
348 // steer individual TRD tasks
349 Bool_t
350 doCheckESD(kTRUE), // AliTRDcheckESD
351 doCheckDET(kTRUE), // AliTRDcheckDET
352 doEffic(kTRUE), // AliTRDefficiency
353 doResolution(kTRUE),// AliTRDresolution
354 doCheckPID(kTRUE), // AliTRDcheckPID
355 doV0Monitor(kFALSE);// AliTRDv0Monitor
356 AddTrainPerformanceTRD(Translate(doCheckESD, doCheckDET, doEffic, doResolution, doCheckPID, doV0Monitor));
357 }
358
359 //
360 // ZDC (Chiara Oppedisano)
361 //
69df31bd 362 if(doZDC && (ibarrel || iall)) {
c53f5f63 363 // hardcoded kMB trigger mask
364 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/ZDC/AddTaskZDCQA.C");
365 AliAnalysisTaskSE *taskZDC = AddTaskZDCQA();
366 taskZDC->SelectCollisionCandidates(kTriggerMask);
367 }
368 //
369 // Calorimetry (Gustavo Conesa)
370 //
371
372 if(doCALO) {
05ce1e04 373 // - In case of MC analysis, it skips the triggered events wagon (given that
374 //the normal wagon is always suffixed as "default")
375 //- No need to pass the type of data
376 //- No need to specify the year. In principle the year is only needed when
377 //setting the size of some histograms (change in number of SM along the years),
378 //I do not know how to access automatically the run number when the histograms
379 // are created in the UserCreateOutput. By default I set them to the maximum
380 //expected size, but I still let the possibility to check the year.
381
382 //So the way to initialize the task in trunk is now
383
384 //AddTaskCalorimeterQA(Bool_t kSimulation = kFALSE,
385 // const char *suffix="default",
386 // TString outputFile = "",
387 // Int_t year = 2012,
388 // Bool_t kPrintSettings = kFALSE)
389
390 //So, in principle only the first 2 need to be specified.
391
392
c53f5f63 393 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/CaloTrackCorrelations/macros/QA/AddTaskCalorimeterQA.C");
05ce1e04 394 AliAnalysisTaskCaloTrackCorrelation *taskCaloQA = AddTaskCalorimeterQA(kFALSE, "default");
c53f5f63 395 taskCaloQA->SetDebugLevel(0);
396 // offline mask set in AddTask to kMB
397 taskCaloQA->SelectCollisionCandidates(kTriggerMask);
398 // Add a new calo task with EMC1 trigger only
05ce1e04 399 taskCaloQA = AddTaskCalorimeterQA(kFALSE, "trigEMC");
c53f5f63 400 taskCaloQA->SetDebugLevel(0);
401 taskCaloQA->SelectCollisionCandidates(kTriggerEMC);
402 }
403
404 //
405 // Muon Trigger
406 //
407
408 if(doMUONTrig) {
409 // no offline trigger selection
410 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskMTRchamberEfficiency.C");
411 AliAnalysisTaskTrigChEff *taskMuonTrig = AddTaskMTRchamberEfficiency();
f9cd4014 412 taskMuonTrig->GetMuonTrackCuts()->SetCustomParamFromRun(160000,2);
c53f5f63 413 }
414
415 //
416 // Impact parameter resolution (xianbao.yuan@pd.infn.it, andrea.dainese@pd.infn.it)
417 //
69df31bd 418 if (doImpParRes && (ibarrel || iall)) {
c53f5f63 419 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskImpParRes.C");
420 AliAnalysisTaskSE* taskimpparres=0;
421 if(iCollisionType==0) {
422 taskimpparres= AddTaskImpParRes();
423 } else {
424 taskimpparres= AddTaskImpParRes(kFALSE,-1,kFALSE,kFALSE);
425 }
426 taskimpparres->SelectCollisionCandidates(kTriggerMask);
427 }
428 //
429 // MUON QA (Philippe Pillot)
430 //
431 if (doMUON) {
432 // trigger analysis internal
433 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskMuonQA.C");
f9cd4014 434 AliAnalysisTaskMuonQA* taskmuonqa= AddTaskMuonQA();
435 taskmuonqa->GetTrackCuts()->SetCustomParamFromRun(160000,2);
c53f5f63 436 }
437 //
438 // TOF (Francesca Bellini)
439 //
69df31bd 440 if (doTOF && (ibarrel || iall)) {
c53f5f63 441 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TOF/AddTaskTOFQA.C");
442 AliAnalysisTaskTOFqa *tofQA = AddTaskTOFQA();
443 tofQA->SelectCollisionCandidates(kTriggerMask);
444 }
445 //
446 // PIDResponse(JENS)
447 //
69df31bd 448 if (doPIDResponse && (ibarrel || iall)) {
c53f5f63 449 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
450 AliAnalysisTaskPIDResponse *PIDResponse = AddTaskPIDResponse();
451 PIDResponse->SelectCollisionCandidates(kTriggerMask);
452 }
453
454 //
455 // PIDqa(JENS)
456 //
69df31bd 457 if (doPIDqa && (ibarrel || iall)) {
c53f5f63 458 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDqa.C");
459 AliAnalysisTaskPIDqa *PIDQA = AddTaskPIDqa();
460 PIDQA->SelectCollisionCandidates(kTriggerMask);
461 }
462
463 //
464 // HMPID QA (Giacomo Volpe)
465 //
69df31bd 466 if (doHMPID && (ibarrel || iall)) {
c53f5f63 467 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/HMPID/AddTaskHmpidQA.C");
468 AliAnalysisTaskSE* taskhmpidqa= AddTaskHmpidQA(kFALSE);
469 // offline mask set in AddTask to kMB
470 taskhmpidqa->SelectCollisionCandidates(kTriggerMask);
471 }
472
473
474 // T0 QA (Alla Mayevskaya)
69df31bd 475 if (doT0 && (ibarrel || iall)) {
c53f5f63 476 // no offline trigger selection
477 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/T0/AddTaskT0QA.C");
478 AliT0AnalysisTaskQA* taskt0qa= AddTaskT0QA();
479 taskt0qa->SelectCollisionCandidates(kTriggerMask);
480 }
481 // FMD QA (Christian Holm Christiansen)
69df31bd 482 if (doFMD && (ibarrel || iall)) {
c53f5f63 483 gROOT->LoadMacro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/AddTaskForwardQA.C");
484 // Parameters: usemc, usecentrality
69df31bd 485 AliForwardQATask *forwardQA = (AliAnalysisTaskSE *)AddTaskForwardQA(kFALSE, kFALSE);
486 forwardQA->SetDebug(0);
c53f5f63 487 // No offline trigger config. needed (see #84077)
488 }
489 //
490 // PHOS QA (Boris Polishchuk)
491 //
492 if (doPHOS) {
493 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/PHOSTasks/CaloCellQA/macros/AddTaskCaloCellsQA.C");
494 AliAnalysisTaskCaloCellsQA *taskPHOSCellQA1 = AddTaskCaloCellsQA(4, 1, NULL,"PHOSCellsQA_AnyInt");
495 taskPHOSCellQA1->SelectCollisionCandidates(kTriggerMask);
496 taskPHOSCellQA1->GetCaloCellsQA()->SetClusterEnergyCuts(0.3,0.3,1.0);
497 AliAnalysisTaskCaloCellsQA *taskPHOSCellQA2 = AddTaskCaloCellsQA(4, 1, NULL,"PHOSCellsQA_PHI7");
498 taskPHOSCellQA2->SelectCollisionCandidates(AliVEvent::kPHI7);
499 taskPHOSCellQA2->GetCaloCellsQA()->SetClusterEnergyCuts(0.3,0.3,1.0);
500 // Pi0 QA fo PbPb
501 if (iCollisionType) {
502 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/PHOSTasks/PHOS_PbPbQA/macros/AddTaskPHOSPbPb.C");
503 AliAnalysisTaskPHOSPbPbQA* phosPbPb = AddTaskPHOSPbPbQA(0);
504 }
505 }
506 if (doPHOSTrig) {
507 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/PHOSTasks/PHOS_TriggerQA/macros/AddTaskPHOSTriggerQA.C");
508 AliAnalysisTaskPHOSTriggerQA *taskPHOSTrig = AddTaskPHOSTriggerQA(NULL);
509 }
510 //
511 // EMCAL QA (Gustavo Conesa)
512 //
513 if (doEMCAL) {
514 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/EMCALTasks/macros/AddTaskEMCALTriggerQA.C");
515 AliAnalysisTaskEMCALTriggerQA *emctrig = AddTaskEMCALTriggerQA();
69df31bd 516// emctrig->GetRecoUtils()->SwitchOffBadChannelsRemoval();
c53f5f63 517 }
518 //
519 // FLOW and BF QA (C.Perez && A.Rodriguez)
520 //
69df31bd 521 if (doFBFqa && (ibarrel || iall)) {
c53f5f63 522 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskFBFqa.C");
523 AliAnalysisTaskSE *qaFBFMB = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFmb",kFALSE);
524 qaFBFMB->SelectCollisionCandidates(AliVEvent::kMB);
525 AliAnalysisTaskSE *qaFBFSC = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFsc",kFALSE);
526 qaFBFSC->SelectCollisionCandidates(AliVEvent::kSemiCentral);
527 AliAnalysisTaskSE *qaFBFCE = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFce",kFALSE);
528 qaFBFCE->SelectCollisionCandidates(AliVEvent::kCentral);
529 }
530}
531
532void QAmerge(const char *suffix, const char *dir, Int_t stage)
533{
534// Merging method
535 TStopwatch timer;
536 timer.Start();
537 TString outputDir = dir;
538 TString outputFiles = Form("QAresults%s.root,EventStat_temp%s.root,RecoQAresults%s.root",suffix,suffix,suffix);
539 TString mergeExcludes = "";
540 TObjArray *list = outputFiles.Tokenize(",");
541 TIter *iter = new TIter(list);
542 TObjString *str;
543 TString outputFile;
544 Bool_t merged = kTRUE;
545 while((str=(TObjString*)iter->Next())) {
546 outputFile = str->GetString();
547 // Skip already merged outputs
548 if (!gSystem->AccessPathName(outputFile)) {
549 printf("Output file <%s> found. Not merging again.",outputFile.Data());
550 continue;
551 }
552 if (mergeExcludes.Contains(outputFile.Data())) continue;
553 merged = AliAnalysisAlien::MergeOutput(outputFile, outputDir, 10, stage);
554 if (!merged && !outputFile.Contains("RecoQAresults")) {
555 printf("ERROR: Cannot merge %s\n", outputFile.Data());
69df31bd 556 continue;
c53f5f63 557 }
558 }
559 // read the analysis manager from file
69df31bd 560 TString infolog = "fileinfo.log";
561 AliAnalysisAlien::MergeInfo(infolog, dir);
c53f5f63 562 if (!outputDir.Contains("Stage")) {
563 ofstream out;
564 out.open("outputs_valid", ios::out);
565 out.close();
566 return;
567 }
568 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
569 mgr->SetRunFromPath(mgr->GetRunFromAlienPath(dir));
570 mgr->SetSkipTerminate(kFALSE);
571 if (!mgr->InitAnalysis()) return;
572 mgr->PrintStatus();
573 AliLog::SetGlobalLogLevel(AliLog::kError);
574 TTree *tree = NULL;
69df31bd 575 gROOT->cd();
c53f5f63 576 mgr->StartAnalysis("gridterminate", tree);
577 if (strlen(suffix)) {
578 if (gSystem->Exec(Form("mv trending.root trending%s.root", suffix)))
579 ::Error("QAmerge", "File trending.root was not produced");
580 if (gSystem->Exec(Form("mv event_stat.root event_stat%s.root", suffix)))
581 ::Error("QAmerge", "File trending.root was not produced");
582 }
583 ofstream out;
584 out.open("outputs_valid", ios::out);
585 out.close();
586 timer.Print();
587}