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