ROOT logo
#include "Riostream.h"
void LoadLibraries();
void AddAnalysisTasks(); 
void QAmerge(const char *, Int_t);

Int_t iCollisionType = ; // 0=pp, 1=PbPb
// Trigger mask.

UInt_t kTriggerInt = AliVEvent::kAnyINT;
UInt_t kTriggerMuonAll = AliVEvent::kMUL7 | AliVEvent::kMUSH7 | AliVEvent::kMUU7 | AliVEvent::kMUS7
                       | AliVEvent::kMUSPB | AliVEvent::kMUSHPB | AliVEvent::kMuonLikePB | AliVEvent::kMuonUnlikePB;
UInt_t kTriggerMuonBarell = AliVEvent::kMUU7;
UInt_t kTriggerEMC   = AliVEvent::kEMC7 | AliVEvent::kEMC8 | AliVEvent::kEMCEJE | AliVEvent::kEMCEGA;
UInt_t kTriggerHM   = AliVEvent::kHighMult;
// Main trigger mask used:
UInt_t kTriggerMask = kTriggerInt;

Int_t runNumbers[5] = {158626};

Bool_t doCDBconnect   = 1;
Bool_t doEventStat    = 1;
Bool_t doCentrality   = 0;
Bool_t doQAsym        = 0;
Bool_t doVZERO        = 1;   // there is a 2nd file
Bool_t doVZEROPbPb    = 1; 
Bool_t doVertex       = 1;
Bool_t doSPD          = 1;   // needs RP   
Bool_t doTPC          = 1;
Bool_t doHLT          = 1;
Bool_t doSDD          = 1;   // needs RP
Bool_t doSSDdEdx      = 1;

Bool_t doTRD          = 1;
Bool_t doITS          = 1;
Bool_t doITSsaTracks  = 1; 
Bool_t doITSalign     = 1;  
Bool_t doCALO         = 1;

Bool_t doMUONTrig     = 1;
Bool_t doImpParRes    = 1;
Bool_t doMUON         = 1;
Bool_t doTOF          = 1;
Bool_t doHMPID        = 1;
Bool_t doT0           = 1;
Bool_t doZDC          = 1;
Bool_t doPIDResponse  = 1;
Bool_t doPIDqa        = 1; //new
Bool_t doFMD          = 1; // new
Bool_t doPHOS         = 1; // new
Bool_t doPHOSTrig     = 1; // new
Bool_t doEMCAL        = 0;
Bool_t doFBFqa        = 1; // new - not ported yet to revision

Bool_t doMUONEff      = 0;   // NEEDS geometry
Bool_t doV0           = 0;   // NEEDS MCtruth 

               // Debug level
Int_t       debug_level        = 1;        // Debugging
Int_t       run_number = 0;

void QAtrainsim(Int_t run = 0, 
             const char *xmlfile   = "wn.xml",
             Int_t  stage          = 0, /*0 = QA train, 1...n - merging stage*/
             const char *cdb     = "raw://")
{
  run_number = run;
  TString cdbString(cdb);
  if (cdbString.Contains("raw://"))
 {
  TGrid::Connect("alien://");
  if (!gGrid || !gGrid->IsConnected()) {
    ::Error("QAtrain", "No grid connection");
    return;
  }  
  
}  
  // Set temporary merging directory to current one
  gSystem->Setenv("TMPDIR", gSystem->pwd());
  // Set temporary compilation directory to current one
  gSystem->SetBuildDir(gSystem->pwd(), kTRUE);
  // Load libraries
  LoadLibraries();
  printf("Include path: %s\n", gSystem->GetIncludePath());
  // Create manager
  AliAnalysisManager *mgr  = new AliAnalysisManager("PilotAnalysis_sim", "Production train");
  mgr->SetRunFromPath(run_number);
  // Input handler
  AliESDInputHandlerRP *esdHandler = new AliESDInputHandlerRP();
  esdHandler->SetReadFriends(kTRUE);
  esdHandler->SetActiveBranches("ESDfriend");
  mgr->SetInputEventHandler(esdHandler);
  mgr->SetDebugLevel(debug_level);
  
  // Monte Carlo handler
  AliMCEventHandler* mcHandler = new AliMCEventHandler();
  mgr->SetMCtruthEventHandler(mcHandler);
  mcHandler->SetPreReadMode(1);
  mcHandler->SetReadTR(kTRUE); 

  // AnalysisTasks
//  mgr->Lock();
  mgr->SetFileInfoLog("fileinfo.log"); 
  AddAnalysisTasks(cdb);
//  mgr->UnLock();
//  mcHandler = (AliMCEventHandler*)mgr->GetMCtruthEventHandler(); 
//  mcHandler->SetReadTR(kTRUE); 
//  mcHandler->SetPreReadMode(1);
  if (stage>0) {
    QAmerge(xmlfile, stage);
    return;
  }   
  // Input chain
  TChain *chain = new TChain("esdTree");
  chain->Add("AliESDs.root");
  TStopwatch timer;
  timer.Start();
  if (mgr->InitAnalysis()) {                                                                                                              
    mgr->PrintStatus(); 
    mgr->SetSkipTerminate(kTRUE);
    mgr->SetNSysInfo(1);
    mgr->StartAnalysis("localfile", chain);
  }
  timer.Print();
}

void LoadLibraries()
{
  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");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libESDfilter.so");
  gSystem->Load("libCORRFW");
  gSystem->Load("libTENDER");
  gSystem->Load("libPWGPP.so");
  gSystem->Load("libAliHLTTrigger.so");

  if (doEMCAL || doPHOS || doCALO) {
     gSystem->Load("libEMCALUtils");
     gSystem->Load("libPHOSUtils");
     gSystem->Load("libPWGCaloTrackCorrBase");
     gSystem->Load("libPWGGACaloTrackCorrelations");
     gSystem->Load("libPWGGACaloTasks");
     gSystem->Load("libPWGGAPHOSTasks");
     gSystem->Load("libPWGTools");
     gSystem->Load("libPWGEMCAL");
     gSystem->Load("libPWGGAEMCALTasks");
  }  
  if(doMUON || doMUONTrig) {
     gSystem->Load("libPWGmuon");
     gSystem->Load("libPWGPPMUONlite");
     gSystem->Load("libPWGmuondep");
  }
  if (doFMD) {
     gSystem->Load("libPWGLFforward2");
  }      
}
 

void AddAnalysisTasks(const char *cdb_location)
{
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  mgr->SetCommonFileName("QAresults.root");
  // Statistics task
  mgr->AddStatisticsTask(kTriggerMask);
  //
  // CDB connection
  //
  if (doCDBconnect) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskCDBconnect.C");
    AliTaskCDBconnect *taskCDB = AddTaskCDBconnect(cdb_location, run_number);
    if (!taskCDB) return;
  }    
  
  //
  // Event Statistics (Jan Fiete)
  //
  if (doEventStat) {
      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
      AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(kTRUE /*MC*/);
  }
  
  //
  // Centrality (A. Toia)
  //
  if (doCentrality) {
//     if (!iCollisionType) {
//        printf("Disabling centrality task for p-p\n");
//        doCentrality = kFALSE;
//     } else {           
        gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
        AliCentralitySelectionTask *taskCentrality = AddTaskCentrality();
        taskCentrality->SetMCInput();        
//     }   
  }   
  
  // Vertexing (A. Dainese)
  // 
  if (doVertex) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskVertexESD.C");
    // Specific setting for MC
    AliAnalysisTaskVertexESD* taskvertexesd =  AddTaskVertexESD(kTRUE, kTriggerMask);
    taskvertexesd->SelectCollisionCandidates(kTriggerMask);
  }  

  // TPC QA (E. Sicking)
  //
  if (doQAsym) {
  // offline trigger in AddTask
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskQAsym.C");
    AliAnalysisTaskSE * taskqasim = AddTaskQAsym(0, kTriggerMask, kTriggerHM, kTriggerEMC, kTriggerMuonBarell);
  }  
  //
  // VZERO QA  (C. Cheshkov)
  //
  if (doVZERO) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskVZEROQA.C");
    AliAnalysisTaskSE * taskv0qa = AddTaskVZEROQA(0);
//  taskv0qa->SelectCollisionCandidates();
  }
  if (doVZEROPbPb) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/VZERO/AddTaskVZEROPbPb.C");
    AliAnaVZEROPbPb* taskV0PbPb = (AliAnaVZEROPbPb*)AddTaskVZEROPbPb(run_number);
//    taskV0PbPb->SetClassesNames("CTRUE-,C0HWU-,CPBI2WU_B1-,CPBI2_B1-,CPBI1WU-,CPBI1-,CVHNWU-,CVHN-,CVLNWU-,CVLN-");
//    taskV0PbPb->SetClassesNames("CTRUE-,C0HWU-,CPBI2WU,CPBI2,CPBI1WU-,CPBI1-,CVHNWU,CVHN,CVLNWU,CVLN");
//    taskV0PbPb->SetClassesNames("CTRUE-,C0HWU-,CPBI2WU-,CPBI2-,CPBI2WU_B1-,CPBI2_B1-,CPBI1WU-,CPBI1-,CVHNWU-,CVHN-,CVHN_R2-,CVHNWU_R2-,CVLNWU-,CVLN-,CVLN_B2-,CVLNWU_B2-");
//    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-");
//    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-");
  }
  //
  // TPC (Jacek Otwinowski & Michael Knichel)
  //
  //
  // Optionally MC information can be used by setting the 1st argument to true
  // Optionally friends information can be switched off by setting the 2st argument 
  // to false
  // Optionally highMult axis can be used by setting the 3st argument to true (for PbPb)
  if (doTPC) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
    AliPerformanceTask *tpcQA = 0;
    if (iCollisionType) {
       // High multiplicity Pb-Pb
       tpcQA = AddTaskPerformanceTPCdEdxQA(kTRUE, kTRUE, kTRUE);
    } else {
      // Low multiplicity (pp)
       tpcQA = AddTaskPerformanceTPCdEdxQA(kTRUE, kTRUE, kFALSE);
    }
    tpcQA->SelectCollisionCandidates(kTriggerMask);
    AliPerformanceRes::SetMergeEntriesCut(5000000); 
  }  

  // HLT (Alberica Toia)
  if (doHLT) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
    AliPerformanceTask *hltQA = AddTaskPerformanceTPCdEdxQA(kTRUE, kTRUE, kFALSE,0,kTRUE);
    hltQA->SelectCollisionCandidates(kTriggerMask);
  }  
  //
  // SPD (A. Mastroserio)
  //
  if (doSPD) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskSPDQA.C");
    AliAnalysisTaskSPD* taskspdqa = (AliAnalysisTaskSPD*)AddTaskSPDQA();
    // Request from Annalisa
    if (iCollisionType) taskspdqa->SetHeavyIonMode();
    taskspdqa->SelectCollisionCandidates(kTriggerMask);
    taskspdqa->SetOCDBInfo(run_number, "raw://");
  }  
  //
  // SDD (F. Prino)
  //
  if (doSDD) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddSDDPoints.C");
    AliAnalysisTaskSE* tasksdd = AddSDDPoints();
    tasksdd->SelectCollisionCandidates(kTriggerMask);
  }
  //
  // SSD dEdx (Marek Chojnacki)
  //
  if (doSSDdEdx) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskdEdxSSDQA.C");
    AliAnalysisTaskSE* taskssddedx = AddTaskdEdxSSDQA();
    taskssddedx->SelectCollisionCandidates(kTriggerMask);
  }

  //
  // ITS
  //
  if (doITS) {
  // hardcoded non-zero trigger mask
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskPerformanceITS.C");
      AliAnalysisTaskITSTrackingCheck *itsQA = 0;
      AliAnalysisTaskITSTrackingCheck *itsQACent0010 = 0;
      AliAnalysisTaskITSTrackingCheck *itsQACent3050 = 0;
      AliAnalysisTaskITSTrackingCheck *itsQACent6080 = 0;
      if(iCollisionType==0) {
        itsQA = AddTaskPerformanceITS(kTRUE);
      } else {
        itsQA = AddTaskPerformanceITS(kTRUE);
        itsQACent0010 = AddTaskPerformanceITS(kTRUE,kFALSE,kFALSE,3500,10000);
        itsQACent3050 = AddTaskPerformanceITS(kTRUE,kFALSE,kFALSE,590,1570);
        itsQACent6080 = AddTaskPerformanceITS(kTRUE,kFALSE,kFALSE,70,310);
      }
  }
  //
  // ITS saTracks, align (F.Prino)
  //
  if (doITSsaTracks) {
  // offline trigger in AddTask
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskITSsaTracks.C");
     AliAnalysisTaskITSsaTracks *itssaTracks = AddTaskITSsaTracks(kTRUE,kFALSE);
     itssaTracks->SelectCollisionCandidates(kTriggerMask);
  }   
  if (doITSalign) {
  // no offline trigger selection
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskITSAlign.C");
     AliAnalysisTaskITSAlignQA *itsAlign = AddTaskITSAlign(0,2011);
  }   
  //
  // TRD (Alex Bercuci, M. Fasel) 
  //
  if(doTRD) {
  // no offline trigger selection
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTrainPerformanceTRD.C");
      // steer individual TRD tasks
      Bool_t 
      doCheckESD(kTRUE),  // AliTRDcheckESD
      doCheckDET(kTRUE),  // AliTRDcheckDET
      doEffic(kTRUE),     // AliTRDefficiency
      doResolution(kTRUE),// AliTRDresolution
      doCheckPID(kTRUE),  // AliTRDcheckPID
      doV0Monitor(kFALSE);// AliTRDv0Monitor
      AddTrainPerformanceTRD(Translate(doCheckESD, doCheckDET, doEffic, doResolution, doCheckPID, doV0Monitor));
  }

  //
  // ZDC (Chiara Oppedisano) 
  //
  if(doZDC) {
  // hardcoded kMB trigger mask
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/ZDC/AddTaskZDCQA.C");
     AliAnalysisTaskSE *taskZDC = AddTaskZDCQA();
     taskZDC->SelectCollisionCandidates(kTriggerMask);
  }   
  //
  // Calorimetry (Gustavo Conesa)
  //

  if(doCALO) {
        
      gROOT->LoadMacro("$ALICE_ROOT/PWGGA/CaloTrackCorrelations/macros/QA/AddTaskCalorimeterQA.C");
      AliAnalysisTaskCaloTrackCorrelation *taskCaloQA = AddTaskCalorimeterQA("default");
      taskCaloQA->SetDebugLevel(0);
      // offline mask set in AddTask to kMB
      taskCaloQA->SelectCollisionCandidates(kTriggerMask);
      // Add a new calo task with EMC1 trigger only
      taskCaloQA = AddTaskCalorimeterQA("trigEMC");
      taskCaloQA->SetDebugLevel(0);
      taskCaloQA->SelectCollisionCandidates(kTriggerEMC);
     
//      gROOT->LoadMacro("$ALICE_ROOT/PWGGA/CaloTrackCorrelations/macros/QA/AddTaskCalorimeterQA.C");
//      AliAnalysisTaskCaloTrackCorrelation*taskCaloQA=  AddTaskCalorimeterQA("ESD",  2012,  kFALSE,  kTRUE);
//      taskCaloQA->SetDebugLevel(0);
      // offline mask set in AddTask to kMB
//      taskCaloQA->SelectCollisionCandidates(kTriggerMask);
      // Add a new calo task with EMC1 trigger only
//      taskCaloQA=  AddTaskCalorimeterQA("ESD",  2012,  kFALSE,  kTRUE,  "",  "EMC7");
//      taskCaloQA->SetDebugLevel(0);
//      taskCaloQA->SelectCollisionCandidates(kTriggerEMC);

  
//      gROOT->LoadMacro("$ALICE_ROOT/PWGGA/CaloTrackCorrelations/macros/QA/AddTaskCalorimeterQA.C");
//       AliAnalysisTaskCaloTrackCorrelation *taskCaloQA = AddTaskCalorimeterQA("ESD", 2011, kFALSE, kTRUE);
//      taskCaloQA->SetDebugLevel(0);
      // offline mask set in AddTask to kMB
//      taskCaloQA->SelectCollisionCandidates(kTriggerMask);
      // Add a new calo task with EMC1 trigger only
//      taskCaloQA = AddTaskCalorimeterQA("ESD", 2011, kFALSE, kTRUE, "", "EMC7");
//      taskCaloQA->SetDebugLevel(0);
//      taskCaloQA->SelectCollisionCandidates(kTriggerEMC);
  }

  //
  // Muon Trigger
  //
  
  if(doMUONTrig) {
  // no offline trigger selection
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskMTRchamberEfficiency.C");
      AliAnalysisTaskTrigChEff *taskMuonTrig = AddTaskMTRchamberEfficiency();
  }

  //
  // Muon Efficiency (not used)
  //

  if(doMUONEff) {
      gROOT->LoadMacro("$ALICE_ROOT/PWG3/muondep/AddTaskMUONTrackingEfficiency.C");
      AliAnalysisTaskMuonTrackingEff *taskMuonTrackEff = AddTaskMUONTrackingEfficiency();
  }
  
  //
  // V0-Decay Reconstruction (Ana Marin) (not used)
  // 

  if (doV0) {
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskV0QA.C");
      AliAnalysisTaskV0QA *taskv0QA = AddTaskV0QA(kTRUE);
  }
  //
  // Impact parameter resolution (xianbao.yuan@pd.infn.it, andrea.dainese@pd.infn.it)
  //
  if (doImpParRes) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskImpParRes.C");
    AliAnalysisTaskSE* taskimpparres=0;
    // Specific setting for MC
    if(iCollisionType==0) {
       taskimpparres= AddTaskImpParRes(kTRUE);
    } else {
       taskimpparres= AddTaskImpParRes(kTRUE,-1,kTRUE,kFALSE);
    }
    taskimpparres->SelectCollisionCandidates(kTriggerMask);
  }  
  //
  // MUON QA (Philippe Pillot)
  //
  if (doMUON) {
  // trigger analysis internal
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskMuonQA.C");
    AliAnalysisTaskSE* taskmuonqa= AddTaskMuonQA();
  }  
  //
  // TOF (Francesca Bellini)
  //
  if (doTOF) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TOF/AddTaskTOFQA.C");
    AliAnalysisTaskTOFqa *tofQA = AddTaskTOFQA(kFALSE);
    tofQA->SelectCollisionCandidates(kTriggerMask);
  } 
   //
  // PIDResponse(JENS)
  //
  if (doPIDResponse) {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C"); 
    AliAnalysisTaskPIDResponse *PIDResponse = AddTaskPIDResponse(kTRUE);
    PIDResponse->SelectCollisionCandidates(kTriggerMask);
  }  

  //
  // PIDqa(JENS)
  //
  if (doPIDqa) {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDqa.C");
    AliAnalysisTaskPIDqa *PIDQA = AddTaskPIDqa();
    PIDQA->SelectCollisionCandidates(kTriggerMask);
  }  
 
  //
  // HMPID QA (Giacomo Volpe)
  //
  if (doHMPID) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/HMPID/AddTaskHmpidQA.C");
    AliAnalysisTaskSE* taskhmpidqa= AddTaskHmpidQA(kTRUE);
      // offline mask set in AddTask to kMB
    taskhmpidqa->SelectCollisionCandidates(kTriggerMask);
  }      
  // T0 QA (Alla Mayevskaya)
  if (doT0) {
  // no offline trigger selection
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/T0/AddTaskT0QA.C");
    AliT0AnalysisTaskQA* taskt0qa= AddTaskT0QA();
    taskt0qa->SelectCollisionCandidates(kTriggerMask);
  }      
  // FMD QA (Christian Holm Christiansen)
  if (doFMD) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/AddTaskForwardQA.C");
    // Parameters: usemc, usecentrality
    AliAnalysisTaskSE *forwardQA = (AliAnalysisTaskSE *)AddTaskForwardQA(kTRUE, (Bool_t)doCentrality);
    // No offline trigger config. needed (see #84077)
  }
   //     
  // PHOS QA (Boris Polishchuk)
  //
  if (doPHOS) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGGA/PHOSTasks/CaloCellQA/macros/AddTaskCaloCellsQA.C");
    AliAnalysisTaskCaloCellsQA *taskPHOSCellQA1 = AddTaskCaloCellsQA(4, 1, NULL,"PHOSCellsQA_AnyInt"); 
    taskPHOSCellQA1->SelectCollisionCandidates(kTriggerMask);
    taskPHOSCellQA1->GetCaloCellsQA()->SetClusterEnergyCuts(0.3,0.3,1.0);
    AliAnalysisTaskCaloCellsQA *taskPHOSCellQA2 = AddTaskCaloCellsQA(4, 1, NULL,"PHOSCellsQA_PHI7"); 
    taskPHOSCellQA2->SelectCollisionCandidates(AliVEvent::kPHI7);
    taskPHOSCellQA2->GetCaloCellsQA()->SetClusterEnergyCuts(0.3,0.3,1.0);
    // Pi0 QA fo PbPb
    if (iCollisionType == 1) {
      gROOT->LoadMacro("$ALICE_ROOT/PWGGA/PHOSTasks/PHOS_PbPbQA/macros/AddTaskPHOSPbPb.C");
      AliAnalysisTaskPHOSPbPbQA* phosPbPb = AddTaskPHOSPbPbQA(0);
    }
  } 
   if (doPHOSTrig) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGGA/PHOSTasks/PHOS_TriggerQA/macros/AddTaskPHOSTriggerQA.C");
     AliAnalysisTaskPHOSTriggerQA *taskPHOSTrig = AddTaskPHOSTriggerQA(NULL);
  }   
  //
  // EMCAL QA (Gustavo Conesa)
  //
  if (doEMCAL) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGGA/EMCALTasks/macros/AddTaskEMCALTriggerQA.C");
     AliAnalysisTaskEMCALTriggerQA *emctrig = AddTaskEMCALTriggerQA();
  }   
  //     
  // FLOW and BF QA (C.Perez && A.Rodriguez)
  //
  if (doFBFqa) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskFBFqa.C");
    AliAnalysisTaskSE *qaFBFMB = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFmb",kFALSE);
    qaFBFMB->SelectCollisionCandidates(AliVEvent::kMB);
    AliAnalysisTaskSE *qaFBFSC = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFsc",kFALSE);
    qaFBFSC->SelectCollisionCandidates(AliVEvent::kSemiCentral);
    AliAnalysisTaskSE *qaFBFCE = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFce",kFALSE);
    qaFBFCE->SelectCollisionCandidates(AliVEvent::kCentral);
  }
}

void QAmerge(const char *dir, Int_t stage)
{
// Merging method
  TStopwatch timer;
  timer.Start();
  TString outputDir = dir;
  TString outputFiles = "QAresults.root,EventStat_temp.root";
  TString mergeExcludes = "";
  TObjArray *list = outputFiles.Tokenize(",");
  TIter *iter = new TIter(list);
  TObjString *str;
  TString outputFile;
  Bool_t merged = kTRUE;
  while((str=(TObjString*)iter->Next())) {
    outputFile = str->GetString();
    // Skip already merged outputs
    if (!gSystem->AccessPathName(outputFile)) {
       printf("Output file <%s> found. Not merging again.",outputFile.Data());
       continue;
    }
    if (mergeExcludes.Contains(outputFile.Data())) continue;
    merged = AliAnalysisAlien::MergeOutput(outputFile, outputDir, 10, stage);
    if (!merged) {
       printf("ERROR: Cannot merge %s\n", outputFile.Data());
       continue;
    }
  }
  TString infolog = "fileinfo.log";
  AliAnalysisAlien::MergeInfo(infolog, dir); 
  // read the analysis manager from file
  if (!outputDir.Contains("Stage")) {
    ofstream out;
    out.open("outputs_valid", ios::out);
    out.close();    
    return;
  }
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  mgr->SetRunFromPath(mgr->GetRunFromAlienPath(dir));
  mgr->SetSkipTerminate(kFALSE);
  if (!mgr->InitAnalysis()) return;
  mgr->PrintStatus();
  AliLog::SetGlobalLogLevel(AliLog::kError);
  TTree *tree = NULL;
  gROOT->cd();
  mgr->StartAnalysis("gridterminate", tree);
  ofstream out;
  out.open("outputs_valid", ios::out);
  out.close();
  timer.Print();
}
 QAtrainsim.C:1
 QAtrainsim.C:2
 QAtrainsim.C:3
 QAtrainsim.C:4
 QAtrainsim.C:5
 QAtrainsim.C:6
 QAtrainsim.C:7
 QAtrainsim.C:8
 QAtrainsim.C:9
 QAtrainsim.C:10
 QAtrainsim.C:11
 QAtrainsim.C:12
 QAtrainsim.C:13
 QAtrainsim.C:14
 QAtrainsim.C:15
 QAtrainsim.C:16
 QAtrainsim.C:17
 QAtrainsim.C:18
 QAtrainsim.C:19
 QAtrainsim.C:20
 QAtrainsim.C:21
 QAtrainsim.C:22
 QAtrainsim.C:23
 QAtrainsim.C:24
 QAtrainsim.C:25
 QAtrainsim.C:26
 QAtrainsim.C:27
 QAtrainsim.C:28
 QAtrainsim.C:29
 QAtrainsim.C:30
 QAtrainsim.C:31
 QAtrainsim.C:32
 QAtrainsim.C:33
 QAtrainsim.C:34
 QAtrainsim.C:35
 QAtrainsim.C:36
 QAtrainsim.C:37
 QAtrainsim.C:38
 QAtrainsim.C:39
 QAtrainsim.C:40
 QAtrainsim.C:41
 QAtrainsim.C:42
 QAtrainsim.C:43
 QAtrainsim.C:44
 QAtrainsim.C:45
 QAtrainsim.C:46
 QAtrainsim.C:47
 QAtrainsim.C:48
 QAtrainsim.C:49
 QAtrainsim.C:50
 QAtrainsim.C:51
 QAtrainsim.C:52
 QAtrainsim.C:53
 QAtrainsim.C:54
 QAtrainsim.C:55
 QAtrainsim.C:56
 QAtrainsim.C:57
 QAtrainsim.C:58
 QAtrainsim.C:59
 QAtrainsim.C:60
 QAtrainsim.C:61
 QAtrainsim.C:62
 QAtrainsim.C:63
 QAtrainsim.C:64
 QAtrainsim.C:65
 QAtrainsim.C:66
 QAtrainsim.C:67
 QAtrainsim.C:68
 QAtrainsim.C:69
 QAtrainsim.C:70
 QAtrainsim.C:71
 QAtrainsim.C:72
 QAtrainsim.C:73
 QAtrainsim.C:74
 QAtrainsim.C:75
 QAtrainsim.C:76
 QAtrainsim.C:77
 QAtrainsim.C:78
 QAtrainsim.C:79
 QAtrainsim.C:80
 QAtrainsim.C:81
 QAtrainsim.C:82
 QAtrainsim.C:83
 QAtrainsim.C:84
 QAtrainsim.C:85
 QAtrainsim.C:86
 QAtrainsim.C:87
 QAtrainsim.C:88
 QAtrainsim.C:89
 QAtrainsim.C:90
 QAtrainsim.C:91
 QAtrainsim.C:92
 QAtrainsim.C:93
 QAtrainsim.C:94
 QAtrainsim.C:95
 QAtrainsim.C:96
 QAtrainsim.C:97
 QAtrainsim.C:98
 QAtrainsim.C:99
 QAtrainsim.C:100
 QAtrainsim.C:101
 QAtrainsim.C:102
 QAtrainsim.C:103
 QAtrainsim.C:104
 QAtrainsim.C:105
 QAtrainsim.C:106
 QAtrainsim.C:107
 QAtrainsim.C:108
 QAtrainsim.C:109
 QAtrainsim.C:110
 QAtrainsim.C:111
 QAtrainsim.C:112
 QAtrainsim.C:113
 QAtrainsim.C:114
 QAtrainsim.C:115
 QAtrainsim.C:116
 QAtrainsim.C:117
 QAtrainsim.C:118
 QAtrainsim.C:119
 QAtrainsim.C:120
 QAtrainsim.C:121
 QAtrainsim.C:122
 QAtrainsim.C:123
 QAtrainsim.C:124
 QAtrainsim.C:125
 QAtrainsim.C:126
 QAtrainsim.C:127
 QAtrainsim.C:128
 QAtrainsim.C:129
 QAtrainsim.C:130
 QAtrainsim.C:131
 QAtrainsim.C:132
 QAtrainsim.C:133
 QAtrainsim.C:134
 QAtrainsim.C:135
 QAtrainsim.C:136
 QAtrainsim.C:137
 QAtrainsim.C:138
 QAtrainsim.C:139
 QAtrainsim.C:140
 QAtrainsim.C:141
 QAtrainsim.C:142
 QAtrainsim.C:143
 QAtrainsim.C:144
 QAtrainsim.C:145
 QAtrainsim.C:146
 QAtrainsim.C:147
 QAtrainsim.C:148
 QAtrainsim.C:149
 QAtrainsim.C:150
 QAtrainsim.C:151
 QAtrainsim.C:152
 QAtrainsim.C:153
 QAtrainsim.C:154
 QAtrainsim.C:155
 QAtrainsim.C:156
 QAtrainsim.C:157
 QAtrainsim.C:158
 QAtrainsim.C:159
 QAtrainsim.C:160
 QAtrainsim.C:161
 QAtrainsim.C:162
 QAtrainsim.C:163
 QAtrainsim.C:164
 QAtrainsim.C:165
 QAtrainsim.C:166
 QAtrainsim.C:167
 QAtrainsim.C:168
 QAtrainsim.C:169
 QAtrainsim.C:170
 QAtrainsim.C:171
 QAtrainsim.C:172
 QAtrainsim.C:173
 QAtrainsim.C:174
 QAtrainsim.C:175
 QAtrainsim.C:176
 QAtrainsim.C:177
 QAtrainsim.C:178
 QAtrainsim.C:179
 QAtrainsim.C:180
 QAtrainsim.C:181
 QAtrainsim.C:182
 QAtrainsim.C:183
 QAtrainsim.C:184
 QAtrainsim.C:185
 QAtrainsim.C:186
 QAtrainsim.C:187
 QAtrainsim.C:188
 QAtrainsim.C:189
 QAtrainsim.C:190
 QAtrainsim.C:191
 QAtrainsim.C:192
 QAtrainsim.C:193
 QAtrainsim.C:194
 QAtrainsim.C:195
 QAtrainsim.C:196
 QAtrainsim.C:197
 QAtrainsim.C:198
 QAtrainsim.C:199
 QAtrainsim.C:200
 QAtrainsim.C:201
 QAtrainsim.C:202
 QAtrainsim.C:203
 QAtrainsim.C:204
 QAtrainsim.C:205
 QAtrainsim.C:206
 QAtrainsim.C:207
 QAtrainsim.C:208
 QAtrainsim.C:209
 QAtrainsim.C:210
 QAtrainsim.C:211
 QAtrainsim.C:212
 QAtrainsim.C:213
 QAtrainsim.C:214
 QAtrainsim.C:215
 QAtrainsim.C:216
 QAtrainsim.C:217
 QAtrainsim.C:218
 QAtrainsim.C:219
 QAtrainsim.C:220
 QAtrainsim.C:221
 QAtrainsim.C:222
 QAtrainsim.C:223
 QAtrainsim.C:224
 QAtrainsim.C:225
 QAtrainsim.C:226
 QAtrainsim.C:227
 QAtrainsim.C:228
 QAtrainsim.C:229
 QAtrainsim.C:230
 QAtrainsim.C:231
 QAtrainsim.C:232
 QAtrainsim.C:233
 QAtrainsim.C:234
 QAtrainsim.C:235
 QAtrainsim.C:236
 QAtrainsim.C:237
 QAtrainsim.C:238
 QAtrainsim.C:239
 QAtrainsim.C:240
 QAtrainsim.C:241
 QAtrainsim.C:242
 QAtrainsim.C:243
 QAtrainsim.C:244
 QAtrainsim.C:245
 QAtrainsim.C:246
 QAtrainsim.C:247
 QAtrainsim.C:248
 QAtrainsim.C:249
 QAtrainsim.C:250
 QAtrainsim.C:251
 QAtrainsim.C:252
 QAtrainsim.C:253
 QAtrainsim.C:254
 QAtrainsim.C:255
 QAtrainsim.C:256
 QAtrainsim.C:257
 QAtrainsim.C:258
 QAtrainsim.C:259
 QAtrainsim.C:260
 QAtrainsim.C:261
 QAtrainsim.C:262
 QAtrainsim.C:263
 QAtrainsim.C:264
 QAtrainsim.C:265
 QAtrainsim.C:266
 QAtrainsim.C:267
 QAtrainsim.C:268
 QAtrainsim.C:269
 QAtrainsim.C:270
 QAtrainsim.C:271
 QAtrainsim.C:272
 QAtrainsim.C:273
 QAtrainsim.C:274
 QAtrainsim.C:275
 QAtrainsim.C:276
 QAtrainsim.C:277
 QAtrainsim.C:278
 QAtrainsim.C:279
 QAtrainsim.C:280
 QAtrainsim.C:281
 QAtrainsim.C:282
 QAtrainsim.C:283
 QAtrainsim.C:284
 QAtrainsim.C:285
 QAtrainsim.C:286
 QAtrainsim.C:287
 QAtrainsim.C:288
 QAtrainsim.C:289
 QAtrainsim.C:290
 QAtrainsim.C:291
 QAtrainsim.C:292
 QAtrainsim.C:293
 QAtrainsim.C:294
 QAtrainsim.C:295
 QAtrainsim.C:296
 QAtrainsim.C:297
 QAtrainsim.C:298
 QAtrainsim.C:299
 QAtrainsim.C:300
 QAtrainsim.C:301
 QAtrainsim.C:302
 QAtrainsim.C:303
 QAtrainsim.C:304
 QAtrainsim.C:305
 QAtrainsim.C:306
 QAtrainsim.C:307
 QAtrainsim.C:308
 QAtrainsim.C:309
 QAtrainsim.C:310
 QAtrainsim.C:311
 QAtrainsim.C:312
 QAtrainsim.C:313
 QAtrainsim.C:314
 QAtrainsim.C:315
 QAtrainsim.C:316
 QAtrainsim.C:317
 QAtrainsim.C:318
 QAtrainsim.C:319
 QAtrainsim.C:320
 QAtrainsim.C:321
 QAtrainsim.C:322
 QAtrainsim.C:323
 QAtrainsim.C:324
 QAtrainsim.C:325
 QAtrainsim.C:326
 QAtrainsim.C:327
 QAtrainsim.C:328
 QAtrainsim.C:329
 QAtrainsim.C:330
 QAtrainsim.C:331
 QAtrainsim.C:332
 QAtrainsim.C:333
 QAtrainsim.C:334
 QAtrainsim.C:335
 QAtrainsim.C:336
 QAtrainsim.C:337
 QAtrainsim.C:338
 QAtrainsim.C:339
 QAtrainsim.C:340
 QAtrainsim.C:341
 QAtrainsim.C:342
 QAtrainsim.C:343
 QAtrainsim.C:344
 QAtrainsim.C:345
 QAtrainsim.C:346
 QAtrainsim.C:347
 QAtrainsim.C:348
 QAtrainsim.C:349
 QAtrainsim.C:350
 QAtrainsim.C:351
 QAtrainsim.C:352
 QAtrainsim.C:353
 QAtrainsim.C:354
 QAtrainsim.C:355
 QAtrainsim.C:356
 QAtrainsim.C:357
 QAtrainsim.C:358
 QAtrainsim.C:359
 QAtrainsim.C:360
 QAtrainsim.C:361
 QAtrainsim.C:362
 QAtrainsim.C:363
 QAtrainsim.C:364
 QAtrainsim.C:365
 QAtrainsim.C:366
 QAtrainsim.C:367
 QAtrainsim.C:368
 QAtrainsim.C:369
 QAtrainsim.C:370
 QAtrainsim.C:371
 QAtrainsim.C:372
 QAtrainsim.C:373
 QAtrainsim.C:374
 QAtrainsim.C:375
 QAtrainsim.C:376
 QAtrainsim.C:377
 QAtrainsim.C:378
 QAtrainsim.C:379
 QAtrainsim.C:380
 QAtrainsim.C:381
 QAtrainsim.C:382
 QAtrainsim.C:383
 QAtrainsim.C:384
 QAtrainsim.C:385
 QAtrainsim.C:386
 QAtrainsim.C:387
 QAtrainsim.C:388
 QAtrainsim.C:389
 QAtrainsim.C:390
 QAtrainsim.C:391
 QAtrainsim.C:392
 QAtrainsim.C:393
 QAtrainsim.C:394
 QAtrainsim.C:395
 QAtrainsim.C:396
 QAtrainsim.C:397
 QAtrainsim.C:398
 QAtrainsim.C:399
 QAtrainsim.C:400
 QAtrainsim.C:401
 QAtrainsim.C:402
 QAtrainsim.C:403
 QAtrainsim.C:404
 QAtrainsim.C:405
 QAtrainsim.C:406
 QAtrainsim.C:407
 QAtrainsim.C:408
 QAtrainsim.C:409
 QAtrainsim.C:410
 QAtrainsim.C:411
 QAtrainsim.C:412
 QAtrainsim.C:413
 QAtrainsim.C:414
 QAtrainsim.C:415
 QAtrainsim.C:416
 QAtrainsim.C:417
 QAtrainsim.C:418
 QAtrainsim.C:419
 QAtrainsim.C:420
 QAtrainsim.C:421
 QAtrainsim.C:422
 QAtrainsim.C:423
 QAtrainsim.C:424
 QAtrainsim.C:425
 QAtrainsim.C:426
 QAtrainsim.C:427
 QAtrainsim.C:428
 QAtrainsim.C:429
 QAtrainsim.C:430
 QAtrainsim.C:431
 QAtrainsim.C:432
 QAtrainsim.C:433
 QAtrainsim.C:434
 QAtrainsim.C:435
 QAtrainsim.C:436
 QAtrainsim.C:437
 QAtrainsim.C:438
 QAtrainsim.C:439
 QAtrainsim.C:440
 QAtrainsim.C:441
 QAtrainsim.C:442
 QAtrainsim.C:443
 QAtrainsim.C:444
 QAtrainsim.C:445
 QAtrainsim.C:446
 QAtrainsim.C:447
 QAtrainsim.C:448
 QAtrainsim.C:449
 QAtrainsim.C:450
 QAtrainsim.C:451
 QAtrainsim.C:452
 QAtrainsim.C:453
 QAtrainsim.C:454
 QAtrainsim.C:455
 QAtrainsim.C:456
 QAtrainsim.C:457
 QAtrainsim.C:458
 QAtrainsim.C:459
 QAtrainsim.C:460
 QAtrainsim.C:461
 QAtrainsim.C:462
 QAtrainsim.C:463
 QAtrainsim.C:464
 QAtrainsim.C:465
 QAtrainsim.C:466
 QAtrainsim.C:467
 QAtrainsim.C:468
 QAtrainsim.C:469
 QAtrainsim.C:470
 QAtrainsim.C:471
 QAtrainsim.C:472
 QAtrainsim.C:473
 QAtrainsim.C:474
 QAtrainsim.C:475
 QAtrainsim.C:476
 QAtrainsim.C:477
 QAtrainsim.C:478
 QAtrainsim.C:479
 QAtrainsim.C:480
 QAtrainsim.C:481
 QAtrainsim.C:482
 QAtrainsim.C:483
 QAtrainsim.C:484
 QAtrainsim.C:485
 QAtrainsim.C:486
 QAtrainsim.C:487
 QAtrainsim.C:488
 QAtrainsim.C:489
 QAtrainsim.C:490
 QAtrainsim.C:491
 QAtrainsim.C:492
 QAtrainsim.C:493
 QAtrainsim.C:494
 QAtrainsim.C:495
 QAtrainsim.C:496
 QAtrainsim.C:497
 QAtrainsim.C:498
 QAtrainsim.C:499
 QAtrainsim.C:500
 QAtrainsim.C:501
 QAtrainsim.C:502
 QAtrainsim.C:503
 QAtrainsim.C:504
 QAtrainsim.C:505
 QAtrainsim.C:506
 QAtrainsim.C:507
 QAtrainsim.C:508
 QAtrainsim.C:509
 QAtrainsim.C:510
 QAtrainsim.C:511
 QAtrainsim.C:512
 QAtrainsim.C:513
 QAtrainsim.C:514
 QAtrainsim.C:515
 QAtrainsim.C:516
 QAtrainsim.C:517
 QAtrainsim.C:518
 QAtrainsim.C:519
 QAtrainsim.C:520
 QAtrainsim.C:521
 QAtrainsim.C:522
 QAtrainsim.C:523
 QAtrainsim.C:524
 QAtrainsim.C:525
 QAtrainsim.C:526
 QAtrainsim.C:527
 QAtrainsim.C:528
 QAtrainsim.C:529
 QAtrainsim.C:530
 QAtrainsim.C:531
 QAtrainsim.C:532
 QAtrainsim.C:533
 QAtrainsim.C:534
 QAtrainsim.C:535
 QAtrainsim.C:536
 QAtrainsim.C:537
 QAtrainsim.C:538
 QAtrainsim.C:539
 QAtrainsim.C:540
 QAtrainsim.C:541
 QAtrainsim.C:542
 QAtrainsim.C:543
 QAtrainsim.C:544
 QAtrainsim.C:545
 QAtrainsim.C:546
 QAtrainsim.C:547
 QAtrainsim.C:548
 QAtrainsim.C:549
 QAtrainsim.C:550
 QAtrainsim.C:551
 QAtrainsim.C:552
 QAtrainsim.C:553
 QAtrainsim.C:554
 QAtrainsim.C:555
 QAtrainsim.C:556
 QAtrainsim.C:557
 QAtrainsim.C:558
 QAtrainsim.C:559
 QAtrainsim.C:560
 QAtrainsim.C:561
 QAtrainsim.C:562
 QAtrainsim.C:563
 QAtrainsim.C:564
 QAtrainsim.C:565
 QAtrainsim.C:566
 QAtrainsim.C:567
 QAtrainsim.C:568
 QAtrainsim.C:569
 QAtrainsim.C:570
 QAtrainsim.C:571
 QAtrainsim.C:572