3 * @author Christian Holm Christensen <cholm@nbi.dk>
4 * @date Wed Sep 24 15:04:38 2014
6 * @brief Master script for QA train
8 * @note Do not modify this script.
11 * This script reads in two other scripts
13 * - GRP.C to load the global run parameters for the selected run,
14 * such as collision system, energy, etc.
16 * - AODConfig.C which defines a number of functions that return
17 * either true or false. The tasks added depends on these functions
21 UInt_t kTriggerInt = AliVEvent::kAnyINT;
22 UInt_t kTriggerMuonAll = (AliVEvent::kMUL7 |
28 AliVEvent::kMuonLikePB |
29 AliVEvent::kMuonUnlikePB);
30 UInt_t kTriggerMuonBarell = AliVEvent::kMUU7;
31 UInt_t kTriggerEMC = (AliVEvent::kEMC7 |
35 UInt_t kTriggerHM = AliVEvent::kHighMult;
36 UInt_t kTriggerMask = kTriggerInt;
39 * Interface (pure virtual) that all configuration classes must
45 virtual Bool_t DoCDBconnect() const = 0;
47 virtual Bool_t DoEventStat() const = 0;
49 virtual Bool_t DoCentrality() const = 0;
51 virtual Bool_t DoQAsym() const = 0;
52 /** @return there is a 2nd file */
53 virtual Bool_t DoVZERO() const = 0;
55 virtual Bool_t DoVZEROPbPb() const = 0;
57 virtual Bool_t DoVertex() const = 0;
58 /** @return needs RP */
59 virtual Bool_t DoSPD() const = 0;
61 virtual Bool_t DoTPC() const = 0;
63 virtual Bool_t DoHLT() const = 0;
64 /** @return needs RP */
65 virtual Bool_t DoSDD() const = 0;
67 virtual Bool_t DoSSDdEdx() const = 0;
69 virtual Bool_t DoTRD() const = 0;
71 virtual Bool_t DoITS() const = 0;
73 virtual Bool_t DoITSsaTracks() const = 0;
75 virtual Bool_t DoITSalign() const = 0;
77 virtual Bool_t DoCALO() const = 0;
79 virtual Bool_t DoMUONTrig() const = 0;
81 virtual Bool_t DoImpParRes() const = 0;
83 virtual Bool_t DoMUON() const = 0;
85 virtual Bool_t DoTOF() const = 0;
87 virtual Bool_t DoHMPID() const = 0;
89 virtual Bool_t DoT0() const = 0;
91 virtual Bool_t DoZDC() const = 0;
93 virtual Bool_t DoPIDResponse() const = 0;
95 virtual Bool_t DoPIDqa() const = 0;
97 virtual Bool_t DoFWD() const = 0;
99 virtual Bool_t DoPHOS() const = 0;
101 virtual Bool_t DoPHOSTrig() const = 0;
103 virtual Bool_t DoEMCAL() const = 0;
105 virtual Bool_t DoFBFqa() const = 0;
106 /** @return NEEDS geometry */
107 virtual Bool_t DoMUONEff() const = 0;
108 /** @return NEEDS MCtruth */
109 virtual Bool_t DoV0() const = 0;
110 /** @return Get Debug level */
111 virtual Int_t DebugLevel() const = 0;
113 VirtualQACfg* qaCfg = 0;
115 //====================================================================
117 * Load the needed libraries
122 Bool_t is10h = grp->period.EqualTo("LHC10h",TString::kIgnoreCase);
123 gSystem->SetIncludePath("-I. "
124 "-I$ROOTSYS/include "
125 "-I$ALICE_ROOT/include "
129 "-I$ALICE_ROOT/PWGPP "
130 "-I$ALICE_ROOT/PWGPP/TRD");
131 gSystem->Load("libANALYSIS");
132 gSystem->Load("libANALYSISalice");
133 gSystem->Load("libOADB");
134 gSystem->Load("libESDfilter.so");
135 gSystem->Load("libCORRFW");
136 gSystem->Load("libTENDER");
137 gSystem->Load("libPWGPP.so");
138 gSystem->Load("libAliHLTTrigger.so");
140 if (qaCfg->DoEMCAL() || qaCfg->DoPHOS() ||
141 (qaCfg->DoCALO() && !is10h)) {
142 gSystem->Load("libEMCALUtils");
143 gSystem->Load("libPHOSUtils");
144 gSystem->Load("libPWGCaloTrackCorrBase");
145 gSystem->Load("libPWGGACaloTrackCorrelations");
146 gSystem->Load("libPWGGACaloTasks");
147 gSystem->Load("libPWGGAPHOSTasks");
148 gSystem->Load("libPWGTools");
149 gSystem->Load("libPWGEMCAL");
150 gSystem->Load("libPWGGAEMCALTasks");
152 if(qaCfg->DoMUON() || qaCfg->DoMUONTrig()) {
153 gSystem->Load("libPWGmuon");
154 gSystem->Load("libPWGPPMUONlite");
155 gSystem->Load("libPWGmuondep");
157 if (qaCfg->DoFWD()) {
158 gSystem->Load("libPWGLFforward2");
162 //====================================================================
164 * Add the analysis tasks
166 * @param cdb_location
168 void AddAnalysisTasks(const char *cdb_location)
170 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
171 mgr->SetCommonFileName("QAresults.root");
173 Bool_t is10h = grp->period.EqualTo("LHC10h",TString::kIgnoreCase);
174 // --- Some short-hands --------------------------------------------
175 TString ali = "$ALICE_ROOT";
176 TString ana = ali + "/ANALYSIS";
177 TString pwghf = ali + "/PWGHF";
178 TString pwglf = ali + "/PWGLF";
179 TString pwgje = ali + "/PWGJE";
180 TString pwgdq = ali + "/PWGDQ";
181 TString pwgpp = ali + "/PWGPP";
182 TString pwgga = ali + "/PWGGA";
184 // --- Statistics task ---------------------------------------------
185 mgr->AddStatisticsTask(kTriggerMask);
187 // --- CDB connection ----------------------------------------------
188 if (qaCfg->DoCDBconnect()) {
189 gROOT->LoadMacro(pwgpp+"/PilotTrain/AddTaskCDBconnect.C");
190 AliTaskCDBconnect *taskCDB = AddTaskCDBconnect(cdb_location, grp->run);
191 if (!taskCDB) return;
194 // --- Event Statistics (Jan Fiete) --------------------------------
195 if (qaCfg->DoEventStat()) {
196 gROOT->LoadMacro(ana+"/macros/AddTaskPhysicsSelection.C");
197 AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(kTRUE/*MC*/);
198 // Hack by Alexander for LHC10h
199 // gROOT->LoadMacro("LHC10hPS.C");
200 // AliOADBPhysicsSelection* ops = LHC10hPS(grp->period, grp->run);
202 // physSelTask->GetPhysicsSelection()->SetCustomOADBObjects(ops,0);
204 // --- PIDResponse(JENS) -------------------------------------------
205 if (qaCfg->DoPIDResponse() && !is10h) {
206 gROOT->LoadMacro(ana+"/macros/AddTaskPIDResponse.C");
207 AliAnalysisTaskPIDResponse *PIDResponse = AddTaskPIDResponse(kTRUE);
208 PIDResponse->SelectCollisionCandidates(kTriggerMask);
210 // --- Centrality (A. Toia) ----------------------------------------
211 if (qaCfg->DoCentrality()) {
212 gROOT->LoadMacro(ana+"/macros/AddTaskCentrality.C");
213 AliCentralitySelectionTask *taskCentrality = AddTaskCentrality();
214 taskCentrality->SetMCInput();
217 // --- Vertexing (A. Dainese) --------------------------------------
218 if (qaCfg->DoVertex()) {
219 gROOT->LoadMacro(pwgpp+"/macros/AddTaskVertexESD.C");
220 // Specific setting for MC
221 AliAnalysisTaskVertexESD* taskvertexesd =
222 AddTaskVertexESD(kTRUE, kTriggerMask);
223 taskvertexesd->SelectCollisionCandidates(kTriggerMask);
226 // --- TPC QA (E. Sicking) -----------------------------------------
227 if (qaCfg->DoQAsym()) {
228 // offline trigger in AddTask
229 gROOT->LoadMacro(pwgpp+"/PilotTrain/AddTaskQAsym.C");
230 AliAnalysisTaskSE * taskqasim = AddTaskQAsym(0,
236 // --- VZERO QA (C. Cheshkov) -------------------------------------
237 if (qaCfg->DoVZERO()) {
238 gROOT->LoadMacro(pwgpp+"/PilotTrain/AddTaskVZEROQA.C");
239 AliAnalysisTaskSE * taskv0qa = AddTaskVZEROQA(0);
241 if (qaCfg->DoVZEROPbPb() && grp->IsAA()) {
242 gROOT->LoadMacro(pwgpp+"/VZERO/AddTaskVZEROPbPb.C");
243 AliAnaVZEROPbPb* taskV0PbPb =
244 (AliAnaVZEROPbPb*)AddTaskVZEROPbPb(Int_t(grp->run));
246 // --- TPC (Jacek Otwinowski & Michael Knichel) --------------------
249 // - Optionally MC information can be used by setting the 1st
251 // - Optionally friends information can be switched off by setting
252 // the 2st argument to false
253 // - Optionally highMult axis can be used by setting the 3st
254 // argument to true (for PbPb)
255 if (qaCfg->DoTPC()) {
256 gROOT->LoadMacro(pwgpp+"/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
257 AliPerformanceTask *tpcQA = 0;
259 // High multiplicity Pb-Pb
260 tpcQA = AddTaskPerformanceTPCdEdxQA(kTRUE, kTRUE, kTRUE);
262 // Low multiplicity (pp)
263 tpcQA = AddTaskPerformanceTPCdEdxQA(kTRUE, kTRUE, kFALSE);
265 tpcQA->SelectCollisionCandidates(kTriggerMask);
266 AliPerformanceRes::SetMergeEntriesCut(5000000);
269 // --- HLT (Alberica Toia) -----------------------------------------
270 if (qaCfg->DoHLT()) {
271 gROOT->LoadMacro(pwgpp+"/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
272 AliPerformanceTask *hltQA = AddTaskPerformanceTPCdEdxQA(kTRUE, kTRUE, kFALSE,0,kTRUE);
273 hltQA->SelectCollisionCandidates(kTriggerMask);
275 // --- SPD (A. Mastroserio) ----------------------------------------
276 if (qaCfg->DoSPD()) {
277 gROOT->LoadMacro(pwgpp+"/PilotTrain/AddTaskSPDQA.C");
278 AliAnalysisTaskSPD* taskspdqa = (AliAnalysisTaskSPD*)AddTaskSPDQA();
279 // Request from Annalisa
280 if (grp->IsAA()) taskspdqa->SetHeavyIonMode();
281 taskspdqa->SelectCollisionCandidates(kTriggerMask);
282 taskspdqa->SetOCDBInfo(grp->run, "raw://");
284 // --- SDD (F. Prino) ----------------------------------------------
285 if (qaCfg->DoSDD()) {
286 gROOT->LoadMacro(pwgpp+"/PilotTrain/AddSDDPoints.C");
287 AliAnalysisTaskSE* tasksdd = AddSDDPoints();
288 tasksdd->SelectCollisionCandidates(kTriggerMask);
290 // --- SSD dEdx (Marek Chojnacki) ----------------------------------
291 if (qaCfg->DoSSDdEdx()) {
292 gROOT->LoadMacro(pwgpp+"/PilotTrain/AddTaskdEdxSSDQA.C");
293 AliAnalysisTaskSE* taskssddedx = AddTaskdEdxSSDQA();
294 taskssddedx->SelectCollisionCandidates(kTriggerMask);
297 // --- ITS ---------------------------------------------------------
298 if (qaCfg->DoITS()) {
299 // hardcoded non-zero trigger mask
300 gROOT->LoadMacro(pwgpp+"/macros/AddTaskPerformanceITS.C");
301 AliAnalysisTaskITSTrackingCheck *itsQA = 0;
302 AliAnalysisTaskITSTrackingCheck *itsQACent0010 = 0;
303 AliAnalysisTaskITSTrackingCheck *itsQACent3050 = 0;
304 AliAnalysisTaskITSTrackingCheck *itsQACent6080 = 0;
306 itsQA = AddTaskPerformanceITS(kTRUE);
308 itsQA = AddTaskPerformanceITS(kTRUE);
309 itsQACent0010 = AddTaskPerformanceITS(kTRUE,kFALSE,kFALSE,3500,10000);
310 itsQACent3050 = AddTaskPerformanceITS(kTRUE,kFALSE,kFALSE,590,1570);
311 itsQACent6080 = AddTaskPerformanceITS(kTRUE,kFALSE,kFALSE,70,310);
314 // --- ITS saTracks, align (F.Prino) -------------------------------
315 if (qaCfg->DoITSsaTracks()) {
316 // offline trigger in AddTask
317 gROOT->LoadMacro(pwgpp+"/macros/AddTaskITSsaTracks.C");
318 AliAnalysisTaskITSsaTracks *itssaTracks = AddTaskITSsaTracks(kTRUE,kFALSE);
319 itssaTracks->SelectCollisionCandidates(kTriggerMask);
321 if (qaCfg->DoITSalign()) {
322 // no offline trigger selection
323 gROOT->LoadMacro(pwgpp+"/macros/AddTaskITSAlign.C");
324 AliAnalysisTaskITSAlignQA *itsAlign = AddTaskITSAlign(0,2011);
327 // --- TRD (Alex Bercuci, M. Fasel) --------------------------------
329 // no offline trigger selection
330 gROOT->LoadMacro(pwgpp+"/macros/AddTrainPerformanceTRD.C");
331 // steer individual TRD tasks
333 doCheckESD(kTRUE), // AliTRDcheckESD
334 doCheckDET(kTRUE), // AliTRDcheckDET
335 doEffic(kTRUE), // AliTRDefficiency
336 doResolution(kTRUE),// AliTRDresolution
337 doCheckPID(kTRUE), // AliTRDcheckPID
338 doV0Monitor(kFALSE);// AliTRDv0Monitor
339 AddTrainPerformanceTRD(Translate(doCheckESD, doCheckDET, doEffic,
340 doResolution, doCheckPID, doV0Monitor));
343 // --- ZDC (Chiara Oppedisano) -------------------------------------
345 // hardcoded kMB trigger mask
346 gROOT->LoadMacro(pwgpp+"/ZDC/AddTaskZDCQA.C");
347 AliAnalysisTaskSE *taskZDC = AddTaskZDCQA();
348 taskZDC->SelectCollisionCandidates(kTriggerMask);
351 // --- Calorimetry (Gustavo Conesa) --------------------------------
352 if(qaCfg->DoCALO() && !is10h) {
353 gROOT->LoadMacro(pwgga+
354 "/CaloTrackCorrelations/macros/QA/AddTaskCalorimeterQA.C");
355 AliAnalysisTaskCaloTrackCorrelation *taskCaloQA =
356 AddTaskCalorimeterQA("default");
357 taskCaloQA->SetDebugLevel(0);
358 // offline mask set in AddTask to kMB
359 taskCaloQA->SelectCollisionCandidates(kTriggerMask);
360 // Add a new calo task with EMC1 trigger only
362 taskCaloQA = AddTaskCalorimeterQA("trigEMC");
363 taskCaloQA->SetDebugLevel(0);
364 taskCaloQA->SelectCollisionCandidates(kTriggerEMC);
368 // --- Muon Trigger ------------------------------------------------
369 if(qaCfg->DoMUONTrig()) {
370 // no offline trigger selection
371 gROOT->LoadMacro(pwgpp+"/macros/AddTaskMTRchamberEfficiency.C");
372 AliAnalysisTaskTrigChEff *taskMuonTrig = AddTaskMTRchamberEfficiency();
375 // --- Muon Efficiency (not used) ----------------------------------
376 if(qaCfg->DoMUONEff()) {
377 gROOT->LoadMacro(ali+"/PWG3/muondep/AddTaskMUONTrackingEfficiency.C");
378 AliAnalysisTaskMuonTrackingEff *taskMuonTrackEff =
379 AddTaskMUONTrackingEfficiency();
382 // --- V0-Decay Reconstruction (Ana Marin) (not used) --------------
384 gROOT->LoadMacro(pwgpp+"/macros/AddTaskV0QA.C");
385 AliAnalysisTaskV0QA *taskv0QA = AddTaskV0QA(kTRUE);
388 // -- Impact parameter resolution ----------------------------------
389 // (xianbao.yuan@pd.infn.it, andrea.dainese@pd.infn.it)
390 if (qaCfg->DoImpParRes()) {
391 gROOT->LoadMacro(pwgpp+"/macros/AddTaskImpParRes.C");
392 AliAnalysisTaskSE* taskimpparres=0;
393 // Specific setting for MC
395 taskimpparres= AddTaskImpParRes(kTRUE);
397 taskimpparres= AddTaskImpParRes(kTRUE,-1,kTRUE,kFALSE);
399 taskimpparres->SelectCollisionCandidates(kTriggerMask);
402 // --- MUON QA (Philippe Pillot) -----------------------------------
403 if (qaCfg->DoMUON()) {
404 // trigger analysis internal
405 gROOT->LoadMacro(pwgpp+"/PilotTrain/AddTaskMuonQA.C");
406 AliAnalysisTaskSE* taskmuonqa= AddTaskMuonQA();
409 // --- TOF (Francesca Bellini) -------------------------------------
410 if (qaCfg->DoTOF()) {
411 gROOT->LoadMacro(pwgpp+"/TOF/AddTaskTOFQA.C");
412 AliAnalysisTaskTOFqa *tofQA = AddTaskTOFQA(kFALSE);
413 tofQA->SelectCollisionCandidates(kTriggerMask);
416 // --- PIDqa(JENS) -------------------------------------------------
417 if (qaCfg->DoPIDqa() && !is10h) {
418 gROOT->LoadMacro(ana+"/macros/AddTaskPIDqa.C");
419 AliAnalysisTaskPIDqa *PIDQA = AddTaskPIDqa();
420 PIDQA->SelectCollisionCandidates(kTriggerMask);
423 // --- HMPID QA (Giacomo Volpe) ------------------------------------
425 if (qaCfg->DoHMPID()) {
426 gROOT->LoadMacro(pwgpp+"/HMPID/AddTaskHmpidQA.C");
427 AliAnalysisTaskSE* taskhmpidqa= AddTaskHmpidQA(kTRUE);
428 // offline mask set in AddTask to kMB
429 taskhmpidqa->SelectCollisionCandidates(kTriggerMask);
432 // --- T0 QA (Alla Mayevskaya) -------------------------------------
434 // no offline trigger selection
435 gROOT->LoadMacro(pwgpp+"/T0/AddTaskT0QA.C");
436 AliT0AnalysisTaskQA* taskt0qa= AddTaskT0QA();
437 taskt0qa->SelectCollisionCandidates(kTriggerMask);
440 // ---- FMD QA (Christian Holm Christiansen) -----------------------
441 if (qaCfg->DoFWD()) {
442 gROOT->LoadMacro(pwglf+"/FORWARD/analysis2/AddTaskForwardQA.C");
443 // Parameters: usemc, usecentrality
444 // AliAnalysisTaskSE *forwardQA = (AliAnalysisTaskSE *)
445 AddTaskForwardQA(kTRUE, qaCfg->DoCentrality());
446 // HACK: to read corrections from current directory
447 const char* hack="AliForwardCorrectionManager::Instance().SetPrefix(\".\")";
448 gROOT->ProcessLine(hack);
449 const char* hack2="AliForwardCorrectionManager::Instance().Print(\"R\")";
450 gROOT->ProcessLine(hack2);
451 // No offline trigger config. needed (see #84077)
454 // --- PHOS QA (Boris Polishchuk) ----------------------------------
455 if (qaCfg->DoPHOS()) {
456 gROOT->LoadMacro(pwgga+"/PHOSTasks/CaloCellQA/macros/AddTaskCaloCellsQA.C");
457 AliAnalysisTaskCaloCellsQA *taskPHOSCellQA1 =
458 AddTaskCaloCellsQA(4, 1, NULL,"PHOSCellsQA_AnyInt");
459 taskPHOSCellQA1->SelectCollisionCandidates(kTriggerMask);
460 taskPHOSCellQA1->GetCaloCellsQA()->SetClusterEnergyCuts(0.3,0.3,1.0);
462 AliAnalysisTaskCaloCellsQA *taskPHOSCellQA2 =
463 AddTaskCaloCellsQA(4, 1, NULL,"PHOSCellsQA_PHI7");
464 taskPHOSCellQA2->SelectCollisionCandidates(AliVEvent::kPHI7);
465 taskPHOSCellQA2->GetCaloCellsQA()->SetClusterEnergyCuts(0.3,0.3,1.0);
469 gROOT->LoadMacro(pwgga+"/PHOSTasks/PHOS_PbPbQA/macros/AddTaskPHOSPbPb.C");
470 AliAnalysisTaskPHOSPbPbQA* phosPbPb = AddTaskPHOSPbPbQA(0);
473 if (qaCfg->DoPHOSTrig()) {
474 gROOT->LoadMacro(pwgga+
475 "/PHOSTasks/PHOS_TriggerQA/macros/AddTaskPHOSTriggerQA.C");
476 AliAnalysisTaskPHOSTriggerQA *taskPHOSTrig = AddTaskPHOSTriggerQA(0,0);
479 // --- EMCAL QA (Gustavo Conesa) -----------------------------------
480 if (qaCfg->DoEMCAL()) {
481 gROOT->LoadMacro(pwgga+"/EMCALTasks/macros/AddTaskEMCALTriggerQA.C");
482 AliAnalysisTaskEMCALTriggerQA *emctrig = AddTaskEMCALTriggerQA();
485 // --- FLOW and BF QA (C.Perez && A.Rodriguez) ---------------------
486 if (qaCfg->DoFBFqa()) {
487 gROOT->LoadMacro(pwgpp+"/macros/AddTaskFBFqa.C");
488 AliAnalysisTaskSE *qaFBFMB = (AliAnalysisTaskSE*)AddTaskFBFqa("qaFBFmb",
490 qaFBFMB->SelectCollisionCandidates(AliVEvent::kMB);
491 AliAnalysisTaskSE *qaFBFSC = (AliAnalysisTaskSE*)AddTaskFBFqa("qaFBFsc",
493 qaFBFSC->SelectCollisionCandidates(AliVEvent::kSemiCentral);
494 AliAnalysisTaskSE *qaFBFCE = (AliAnalysisTaskSE*)AddTaskFBFqa("qaFBFce",
496 qaFBFCE->SelectCollisionCandidates(AliVEvent::kCentral);
500 //====================================================================
504 * @param dir directory
507 void QAMerge(const char *dir, Int_t stage)
510 TStopwatch timer; timer.Start();
511 TString outputDir = dir;
512 TString outputFiles = "QAresults.root,EventStat_temp.root";
513 TString mergeExcludes = "";
514 TObjArray* tokens = outputFiles.Tokenize(",");
518 Bool_t merged = kTRUE;
519 while((str = static_cast<TObjString*>(iter()))) {
520 outputFile = str->GetString();
521 // Skip already merged outputs
522 if (!gSystem->AccessPathName(outputFile)) {
523 printf("Output file <%s> found. Not merging again.",
527 if (mergeExcludes.Contains(outputFile.Data())) continue;
528 merged = AliAnalysisAlien::MergeOutput(outputFile,
533 printf("ERROR: Cannot merge %s\n", outputFile.Data());
537 TString infolog = "fileinfo.log";
538 AliAnalysisAlien::MergeInfo(infolog, dir);
540 if (!outputDir.Contains("Stage")) {
542 out.open("outputs_valid", ios::out);
546 // --- Set up to run terminate -------------------------------------
547 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
548 mgr->SetRunFromPath(mgr->GetRunFromAlienPath(dir));
549 mgr->SetSkipTerminate(kFALSE);
550 if (!mgr->InitAnalysis()) return;
552 AliLog::SetGlobalLogLevel(AliLog::kError);
555 mgr->StartAnalysis("gridterminate", tree);
557 out.open("outputs_valid", ios::out);
562 //====================================================================
566 * @param run Run number
567 * @param xmlfile Collection file
570 * @param cdb CDB location
573 const char* xmlfile = "wn.xml",
574 Int_t stage = 0, /*0 = QA train, 1...n - merging stage*/
575 const char* cdb = "raw://")
577 // -----------------------------------------------------------------
579 // Get GRP parameters. Defines global "grp" as a pointer to GRPData
581 gROOT->Macro(Form("GRP.C(%d)", run));
582 gROOT->Macro("QAConfig.C");
583 Int_t debug_level = qaCfg->DebugLevel(); // Debugging
584 TString cdbString(cdb);
585 if (cdbString.Contains("raw://")) {
586 TGrid::Connect("alien://");
587 if (!gGrid || !gGrid->IsConnected()) {
588 ::Error("QAtrain", "No grid connection");
593 // --- Some settings -----------------------------------------------
594 // Set temporary merging directory to current one
595 gSystem->Setenv("TMPDIR", gSystem->pwd());
596 // Set temporary compilation directory to current one
597 gSystem->SetBuildDir(gSystem->pwd(), kTRUE);
598 // Load common libraries and set include path
600 printf("Include path: %s\n", gSystem->GetIncludePath());
602 // === Make the analysis manager and connect event handlers ========
604 // --- Analysis manager and load libraries -------------------------
605 AliAnalysisManager *mgr = new AliAnalysisManager("QA", "Production train");
606 mgr->SetRunFromPath(grp->run);
608 // --- Create ESD input handler ------------------------------------
609 AliESDInputHandlerRP *esdHandler = new AliESDInputHandlerRP();
610 esdHandler->SetReadFriends(kTRUE);
611 esdHandler->SetActiveBranches("ESDfriend");
612 mgr->SetInputEventHandler(esdHandler);
614 // --- Monte Carlo handler -----------------------------------------
616 AliMCEventHandler* mcHandler = new AliMCEventHandler();
617 mgr->SetMCtruthEventHandler(mcHandler);
618 mcHandler->SetPreReadMode(1);
619 mcHandler->SetReadTR(true);
622 // === Set up tasks ================================================
624 // --- Create tasks ------------------------------------------------
625 AddAnalysisTasks(cdb);
627 // --- Debugging if needed -----------------------------------------
628 if (debug_level > 0) mgr->SetDebugLevel(debug_level);
630 // --- If merging, do so here and exit -----------------------------
632 QAMerge(xmlfile, stage);
636 // === Run the analysis ============================================
638 // --- Make our chain ----------------------------------------------
639 TChain *chain = new TChain("esdTree");
640 chain->Add("AliESDs.root");
642 // --- Run the thing -----------------------------------------------
645 if (mgr->InitAnalysis()) {
647 mgr->SetSkipTerminate(kTRUE);
649 mgr->StartAnalysis("local", chain);