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
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
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)
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"
30 void AddAnalysisTasks(const char *);
31 void QAmerge(const char *,const char *, Int_t);
33 Int_t iCollisionType = 0; // 0=pp, 1=PbPb
36 UInt_t kTriggerInt = AliVEvent::kAnyINT;
37 UInt_t kTriggerMuonBarell = AliVEvent::kMUU7;
38 UInt_t kTriggerEMC = AliVEvent::kEMC7 | AliVEvent::kEMCEJE | AliVEvent::kEMCEGA;
39 UInt_t kTriggerHM = AliVEvent::kHighMult;
40 // Main trigger mask used:
41 UInt_t kTriggerMask = kTriggerInt;
43 Int_t runNumbers[5] = {158626};
45 Bool_t doCDBconnect = 1;
46 Bool_t doEventStat = 1;
47 Bool_t doCentrality = 1;
49 Bool_t doVZERO = 1; // there is a 2nd file
50 Bool_t doVZEROPbPb = 1;
52 Bool_t doSPD = 1; // needs RP
55 Bool_t doSDD = 1; // needs RP
60 Bool_t doITSsaTracks = 1;
61 Bool_t doITSalign = 1;
63 Bool_t doMUONTrig = 1;
64 Bool_t doImpParRes = 1;
70 Bool_t doPIDResponse = 1;
71 Bool_t doPIDqa = 1; //new
72 Bool_t doFMD = 1; // new
73 Bool_t doPHOS = 1; // new
74 Bool_t doPHOSTrig = 1; // new
76 Bool_t doFBFqa = 1; // new - not ported yet to revision
79 Int_t debug_level = 1; // Debugging
82 void 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*/
88 TGrid::Connect("alien://");
89 if (!gGrid || !gGrid->IsConnected()) {
90 ::Error("QAtrain", "No grid connection");
93 // Set temporary merging directory to current one
94 gSystem->Setenv("TMPDIR", gSystem->pwd());
95 // Set temporary compilation directory to current one
96 gSystem->SetBuildDir(gSystem->pwd(), kTRUE);
99 printf("Include path: %s\n", gSystem->GetIncludePath());
101 AliAnalysisManager *mgr = new AliAnalysisManager("PilotAnalysis", "Production train");
102 mgr->SetRunFromPath(run_number);
104 AliESDInputHandlerRP *esdHandler = new AliESDInputHandlerRP();
105 esdHandler->SetReadFriends(kTRUE);
106 esdHandler->SetActiveBranches("ESDfriend");
107 mgr->SetInputEventHandler(esdHandler);
108 mgr->SetDebugLevel(debug_level);
111 AddAnalysisTasks(suffix);
113 QAmerge(suffix, xmlfile, stage);
117 TChain *chain = new TChain("esdTree");
118 chain->Add("AliESDs.root");
121 if (mgr->InitAnalysis()) {
123 mgr->SetSkipTerminate(kTRUE);
124 // mgr->SetNSysInfo(1);
125 mgr->StartAnalysis("local", chain);
132 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");
133 gSystem->Load("libANALYSIS");
134 gSystem->Load("libANALYSISalice");
135 gSystem->Load("libCORRFW");
136 gSystem->Load("libTENDER");
137 gSystem->Load("libPWGPP.so");
138 gSystem->Load("libAliHLTTrigger.so");
140 if (doEMCAL || doPHOS || doCALO) {
141 gSystem->Load("libEMCALUtils");
142 gSystem->Load("libPHOSUtils");
143 gSystem->Load("libPWGCaloTrackCorrBase");
144 gSystem->Load("libPWGGACaloTrackCorrelations");
145 gSystem->Load("libPWGGACaloTasks");
146 gSystem->Load("libPWGGAPHOSTasks");
147 gSystem->Load("libPWGGAEMCALTasks");
149 if(doMUON || doMUONTrig) {
150 gSystem->Load("libPWGmuon");
151 gSystem->Load("libPWGPPMUONlite");
152 gSystem->Load("libPWGmuondep");
155 gSystem->Load("libPWGLFforward2");
159 void AddAnalysisTasks(const char *suffix)
163 Bool_t ibarrel = (ss.Contains("barrel"))?kTRUE:kFALSE;
164 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
165 mgr->SetCommonFileName(Form("QAresults%s.root",suffix));
167 mgr->AddStatisticsTask(kTriggerMask);
172 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskCDBconnect.C");
173 AliTaskCDBconnect *taskCDB = AddTaskCDBconnect();
174 if (!taskCDB) return;
175 AliCDBManager *cdb = AliCDBManager::Instance();
176 cdb->SetDefaultStorage("raw://");
177 taskCDB->SetRunNumber(run_number);
181 // Event Statistics (Jan Fiete)
184 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
185 AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(kFALSE /*MC*/);
186 AliAnalysisDataContainer *cstatsout = (AliAnalysisDataContainer*)mgr->GetOutputs()->FindObject("cstatsout");
187 cstatsout->SetFileName(Form("EventStat_temp%s.root", suffix));
191 // Centrality (A. Toia)
194 if (!iCollisionType) {
195 printf("Disabling centrality task for p-p\n");
196 doCentrality = kFALSE;
198 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
199 AliCentralitySelectionTask *taskCentrality = AddTaskCentrality();
203 // Vertexing (A. Dainese)
206 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskVertexESD.C");
207 AliAnalysisTaskVertexESD* taskvertexesd = AddTaskVertexESD(kFALSE, kTriggerMask);
208 taskvertexesd->SelectCollisionCandidates(kTriggerMask);
211 // TPC QA (E. Sicking)
214 // offline trigger in AddTask
215 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskQAsym.C");
216 AliAnalysisTaskSE * taskqasim = AddTaskQAsym(0, kTriggerMask, kTriggerHM, kTriggerEMC, kTriggerMuonBarell);
219 // VZERO QA (C. Cheshkov)
221 if (doVZERO && ibarrel) {
222 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskVZEROQA.C");
223 AliAnalysisTaskSE * taskv0qa = AddTaskVZEROQA(0);
224 // taskv0qa->SelectCollisionCandidates();
226 if (doVZEROPbPb && iCollisionType==1) {
227 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/VZERO/AddTaskVZEROPbPb.C");
228 AliAnaVZEROPbPb* taskV0PbPb = (AliAnaVZEROPbPb*)AddTaskVZEROPbPb(0);
229 // taskV0PbPb->SetClassesNames("CTRUE-,C0HWU-,CPBI2WU_B1-,CPBI2_B1-,CPBI1WU-,CPBI1-,CVHNWU-,CVHN-,CVLNWU-,CVLN-");
230 // taskV0PbPb->SetClassesNames("CTRUE-,C0HWU-,CPBI2WU,CPBI2,CPBI1WU-,CPBI1-,CVHNWU,CVHN,CVLNWU,CVLN");
231 // taskV0PbPb->SetClassesNames("CTRUE-,C0HWU-,CPBI2WU-,CPBI2-,CPBI2WU_B1-,CPBI2_B1-,CPBI1WU-,CPBI1-,CVHNWU-,CVHN-,CVHN_R2-,CVHNWU_R2-,CVLNWU-,CVLN-,CVLN_B2-,CVLNWU_B2-");
232 // 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-");
233 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-");
236 // TPC (Jacek Otwinowski & Michael Knichel)
239 // Optionally MC information can be used by setting the 1st argument to true
240 // Optionally friends information can be switched off by setting the 2st argument
242 // Optionally highMult axis can be used by setting the 3st argument to true (for PbPb)
243 if (doTPC && ibarrel) {
244 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
245 AliPerformanceTask *tpcQA = 0;
246 if (iCollisionType) {
247 // High multiplicity Pb-Pb
248 tpcQA = AddTaskPerformanceTPCdEdxQA(kFALSE, kTRUE, kTRUE);
250 // Low multiplicity (pp)
251 tpcQA = AddTaskPerformanceTPCdEdxQA(kFALSE, kTRUE, kFALSE);
253 tpcQA->SelectCollisionCandidates(kTriggerMask);
256 // HLT (Alberica Toia)
257 if (doHLT && ibarrel) {
258 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
259 AliPerformanceTask *hltQA = AddTaskPerformanceTPCdEdxQA(kFALSE, kTRUE, kFALSE,0,kTRUE);
260 hltQA->SelectCollisionCandidates(kTriggerMask);
263 // SPD (A. Mastroserio)
266 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskSPDQA.C");
267 AliAnalysisTaskSPD* taskspdqa = (AliAnalysisTaskSPD*)AddTaskSPDQA();
268 // Request from Annalisa
269 if (iCollisionType) taskspdqa->SetHeavyIonMode();
270 taskspdqa->SelectCollisionCandidates(kTriggerMask);
271 taskspdqa->SetOCDBInfo(run_number, "raw://");
277 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddSDDPoints.C");
278 AliAnalysisTaskSE* tasksdd = AddSDDPoints();
279 tasksdd->SelectCollisionCandidates(kTriggerMask);
282 // SSD dEdx (Marek Chojnacki)
285 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskdEdxSSDQA.C");
286 AliAnalysisTaskSE* taskssddedx = AddTaskdEdxSSDQA();
287 taskssddedx->SelectCollisionCandidates(kTriggerMask);
294 // hardcoded non-zero trigger mask
295 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskPerformanceITS.C");
296 AliAnalysisTaskITSTrackingCheck *itsQA = 0;
297 AliAnalysisTaskITSTrackingCheck *itsQACent0010 = 0;
298 AliAnalysisTaskITSTrackingCheck *itsQACent3050 = 0;
299 AliAnalysisTaskITSTrackingCheck *itsQACent6080 = 0;
300 if(iCollisionType==0) {
301 itsQA = AddTaskPerformanceITS(kFALSE);
303 itsQA = AddTaskPerformanceITS(kFALSE);
304 itsQACent0010 = AddTaskPerformanceITS(kFALSE,kFALSE,kFALSE,3500,10000);
305 itsQACent3050 = AddTaskPerformanceITS(kFALSE,kFALSE,kFALSE,590,1570);
306 itsQACent6080 = AddTaskPerformanceITS(kFALSE,kFALSE,kFALSE,70,310);
310 // ITS saTracks, align (F.Prino)
313 // offline trigger in AddTask
314 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskITSsaTracks.C");
315 AliAnalysisTaskITSsaTracks *itssaTracks = AddTaskITSsaTracks(kFALSE,kFALSE);
316 itssaTracks->SelectCollisionCandidates(kTriggerMask);
319 // no offline trigger selection
320 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskITSAlign.C");
321 AliAnalysisTaskITSAlignQA *itsAlign = AddTaskITSAlign(0,2011);
324 // TRD (Alex Bercuci, M. Fasel)
326 if(doTRD && ibarrel) {
327 // no offline trigger selection
328 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTrainPerformanceTRD.C");
329 // steer individual TRD tasks
331 doCheckESD(kTRUE), // AliTRDcheckESD
332 doCheckDET(kTRUE), // AliTRDcheckDET
333 doEffic(kTRUE), // AliTRDefficiency
334 doResolution(kTRUE),// AliTRDresolution
335 doCheckPID(kTRUE), // AliTRDcheckPID
336 doV0Monitor(kFALSE);// AliTRDv0Monitor
337 AddTrainPerformanceTRD(Translate(doCheckESD, doCheckDET, doEffic, doResolution, doCheckPID, doV0Monitor));
341 // ZDC (Chiara Oppedisano)
343 if(doZDC && ibarrel) {
344 // hardcoded kMB trigger mask
345 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/ZDC/AddTaskZDCQA.C");
346 AliAnalysisTaskSE *taskZDC = AddTaskZDCQA();
347 taskZDC->SelectCollisionCandidates(kTriggerMask);
350 // Calorimetry (Gustavo Conesa)
354 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/CaloTrackCorrelations/macros/QA/AddTaskCalorimeterQA.C");
355 AliAnalysisTaskCaloTrackCorrelation *taskCaloQA = AddTaskCalorimeterQA("ESD", 2011, kFALSE, kFALSE);
356 taskCaloQA->SetDebugLevel(0);
357 // offline mask set in AddTask to kMB
358 taskCaloQA->SelectCollisionCandidates(kTriggerMask);
359 // Add a new calo task with EMC1 trigger only
360 taskCaloQA = AddTaskCalorimeterQA("ESD", 2011, kFALSE, kFALSE, "", "EMC7");
361 taskCaloQA->SetDebugLevel(0);
362 taskCaloQA->SelectCollisionCandidates(kTriggerEMC);
370 // no offline trigger selection
371 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskMTRchamberEfficiency.C");
372 AliAnalysisTaskTrigChEff *taskMuonTrig = AddTaskMTRchamberEfficiency();
376 // Impact parameter resolution (xianbao.yuan@pd.infn.it, andrea.dainese@pd.infn.it)
378 if (doImpParRes && ibarrel) {
379 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskImpParRes.C");
380 AliAnalysisTaskSE* taskimpparres=0;
381 if(iCollisionType==0) {
382 taskimpparres= AddTaskImpParRes();
384 taskimpparres= AddTaskImpParRes(kFALSE,-1,kFALSE,kFALSE);
386 taskimpparres->SelectCollisionCandidates(kTriggerMask);
389 // MUON QA (Philippe Pillot)
392 // trigger analysis internal
393 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskMuonQA.C");
394 AliAnalysisTaskSE* taskmuonqa= AddTaskMuonQA();
397 // TOF (Francesca Bellini)
399 if (doTOF && ibarrel) {
400 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TOF/AddTaskTOFQA.C");
401 AliAnalysisTaskTOFqa *tofQA = AddTaskTOFQA();
402 tofQA->SelectCollisionCandidates(kTriggerMask);
407 if (doPIDResponse && ibarrel) {
408 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
409 AliAnalysisTaskPIDResponse *PIDResponse = AddTaskPIDResponse();
410 PIDResponse->SelectCollisionCandidates(kTriggerMask);
416 if (doPIDqa && ibarrel) {
417 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDqa.C");
418 AliAnalysisTaskPIDqa *PIDQA = AddTaskPIDqa();
419 PIDQA->SelectCollisionCandidates(kTriggerMask);
423 // HMPID QA (Giacomo Volpe)
425 if (doHMPID && ibarrel) {
426 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/HMPID/AddTaskHmpidQA.C");
427 AliAnalysisTaskSE* taskhmpidqa= AddTaskHmpidQA(kFALSE);
428 // offline mask set in AddTask to kMB
429 taskhmpidqa->SelectCollisionCandidates(kTriggerMask);
433 // T0 QA (Alla Mayevskaya)
434 if (doT0 && ibarrel) {
435 // no offline trigger selection
436 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/T0/AddTaskT0QA.C");
437 AliT0AnalysisTaskQA* taskt0qa= AddTaskT0QA();
438 taskt0qa->SelectCollisionCandidates(kTriggerMask);
440 // FMD QA (Christian Holm Christiansen)
441 if (doFMD && ibarrel) {
442 gROOT->LoadMacro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/AddTaskForwardQA.C");
443 // Parameters: usemc, usecentrality
444 AliAnalysisTaskSE *forwardQA = (AliAnalysisTaskSE *)AddTaskForwardQA(kFALSE, kFALSE);
445 // No offline trigger config. needed (see #84077)
448 // PHOS QA (Boris Polishchuk)
451 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/PHOSTasks/CaloCellQA/macros/AddTaskCaloCellsQA.C");
452 AliAnalysisTaskCaloCellsQA *taskPHOSCellQA1 = AddTaskCaloCellsQA(4, 1, NULL,"PHOSCellsQA_AnyInt");
453 taskPHOSCellQA1->SelectCollisionCandidates(kTriggerMask);
454 taskPHOSCellQA1->GetCaloCellsQA()->SetClusterEnergyCuts(0.3,0.3,1.0);
455 AliAnalysisTaskCaloCellsQA *taskPHOSCellQA2 = AddTaskCaloCellsQA(4, 1, NULL,"PHOSCellsQA_PHI7");
456 taskPHOSCellQA2->SelectCollisionCandidates(AliVEvent::kPHI7);
457 taskPHOSCellQA2->GetCaloCellsQA()->SetClusterEnergyCuts(0.3,0.3,1.0);
459 if (iCollisionType) {
460 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/PHOSTasks/PHOS_PbPbQA/macros/AddTaskPHOSPbPb.C");
461 AliAnalysisTaskPHOSPbPbQA* phosPbPb = AddTaskPHOSPbPbQA(0);
465 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/PHOSTasks/PHOS_TriggerQA/macros/AddTaskPHOSTriggerQA.C");
466 AliAnalysisTaskPHOSTriggerQA *taskPHOSTrig = AddTaskPHOSTriggerQA(NULL);
469 // EMCAL QA (Gustavo Conesa)
472 gROOT->LoadMacro("$ALICE_ROOT/PWGGA/EMCALTasks/macros/AddTaskEMCALTriggerQA.C");
473 AliAnalysisTaskEMCALTriggerQA *emctrig = AddTaskEMCALTriggerQA();
476 // FLOW and BF QA (C.Perez && A.Rodriguez)
478 if (doFBFqa && ibarrel) {
479 gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskFBFqa.C");
480 AliAnalysisTaskSE *qaFBFMB = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFmb",kFALSE);
481 qaFBFMB->SelectCollisionCandidates(AliVEvent::kMB);
482 AliAnalysisTaskSE *qaFBFSC = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFsc",kFALSE);
483 qaFBFSC->SelectCollisionCandidates(AliVEvent::kSemiCentral);
484 AliAnalysisTaskSE *qaFBFCE = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFce",kFALSE);
485 qaFBFCE->SelectCollisionCandidates(AliVEvent::kCentral);
489 void QAmerge(const char *suffix, const char *dir, Int_t stage)
494 TString outputDir = dir;
495 TString outputFiles = Form("QAresults%s.root,EventStat_temp%s.root,RecoQAresults%s.root",suffix,suffix,suffix);
496 TString mergeExcludes = "";
497 TObjArray *list = outputFiles.Tokenize(",");
498 TIter *iter = new TIter(list);
501 Bool_t merged = kTRUE;
502 while((str=(TObjString*)iter->Next())) {
503 outputFile = str->GetString();
504 // Skip already merged outputs
505 if (!gSystem->AccessPathName(outputFile)) {
506 printf("Output file <%s> found. Not merging again.",outputFile.Data());
509 if (mergeExcludes.Contains(outputFile.Data())) continue;
510 merged = AliAnalysisAlien::MergeOutput(outputFile, outputDir, 10, stage);
511 if (!merged && !outputFile.Contains("RecoQAresults")) {
512 printf("ERROR: Cannot merge %s\n", outputFile.Data());
516 // read the analysis manager from file
517 if (!outputDir.Contains("Stage")) {
519 out.open("outputs_valid", ios::out);
523 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
524 mgr->SetRunFromPath(mgr->GetRunFromAlienPath(dir));
525 mgr->SetSkipTerminate(kFALSE);
526 if (!mgr->InitAnalysis()) return;
528 AliLog::SetGlobalLogLevel(AliLog::kError);
530 mgr->StartAnalysis("gridterminate", tree);
531 if (strlen(suffix)) {
532 if (gSystem->Exec(Form("mv trending.root trending%s.root", suffix)))
533 ::Error("QAmerge", "File trending.root was not produced");
534 if (gSystem->Exec(Form("mv event_stat.root event_stat%s.root", suffix)))
535 ::Error("QAmerge", "File trending.root was not produced");
538 out.open("outputs_valid", ios::out);