]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ANALYSIS/macros/QAtrain_duo.C
Added possibilit to revertex before refiltering
[u/mrichter/AliRoot.git] / ANALYSIS / macros / QAtrain_duo.C
index b17fc68bf695e0c3345f421a90eccfc8966d03eb..e97092b61040e6fd9b2dc8e3953312f5e504858d 100644 (file)
 //      -> event_stat_outer.root trending_outer.root 145230_145230_0_132897.stat
 #include "Riostream.h"
 void LoadLibraries();
-void AddAnalysisTasks(const char *); 
+void AddAnalysisTasks(const char *, const char *); 
 void QAmerge(const char *,const char *, Int_t);
 
 Int_t iCollisionType = 0; // 0=pp, 1=PbPb
 // Trigger mask.
 
 UInt_t kTriggerInt = AliVEvent::kAnyINT;
-UInt_t kTriggerMuonBarell = AliVEvent::kMUU7;
-UInt_t kTriggerEMC   = AliVEvent::kEMC7 | AliVEvent::kEMCEJE | AliVEvent::kEMCEGA;
+UInt_t kTriggerMuonBarrel = AliVEvent::kMUU7 | AliVEvent::kMuonUnlikeLowPt8 | AliVEvent::kMuonUnlikeLowPt0;
+UInt_t kTriggerEMC   = AliVEvent::kEMC7 | AliVEvent::kEMC8 | AliVEvent::kEMCEJE | AliVEvent::kEMCEGA;
 UInt_t kTriggerHM   = AliVEvent::kHighMult;
 // Main trigger mask used:
 UInt_t kTriggerMask = kTriggerInt;
@@ -44,7 +44,7 @@ Int_t runNumbers[5] = {158626};
 
 Bool_t doCDBconnect   = 1;
 Bool_t doEventStat    = 1;
-Bool_t doCentrality   = 1;
+Bool_t doCentrality   = 0;
 Bool_t doQAsym        = 1;
 Bool_t doVZERO        = 1;   // there is a 2nd file
 Bool_t doVZEROPbPb    = 1; 
@@ -81,15 +81,24 @@ Int_t       run_number = 0;
 
 void QAtrain_duo(const char *suffix="", Int_t run = 0, 
              const char *xmlfile   = "wn.xml",
-             Int_t  stage          = 0) /*0 = QA train, 1...n - merging stage*/
+             Int_t  stage          = 0, /*0 = QA train, 1...n - merging stage*/
+             const char *cdb     = "raw://")
+//             const char *cdb     = "local://$ALICE_ROOT/OCDB")
 {
   run_number = run;
+  TString ss(suffix);
+  ss.ToLower();
+  Bool_t ibarrel = (ss.Contains("barrel"))?kTRUE:kFALSE;
 
-  TGrid::Connect("alien://");
-  if (!gGrid || !gGrid->IsConnected()) {
-    ::Error("QAtrain", "No grid connection");
-    return;
-  }   
+  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
@@ -102,13 +111,16 @@ void QAtrain_duo(const char *suffix="", Int_t run = 0,
   mgr->SetRunFromPath(run_number);
   // Input handler
   AliESDInputHandlerRP *esdHandler = new AliESDInputHandlerRP();
-  esdHandler->SetReadFriends(kTRUE);
-  esdHandler->SetActiveBranches("ESDfriend");
+  if (ibarrel) {
+    esdHandler->SetReadFriends(kTRUE);
+    esdHandler->SetActiveBranches("ESDfriend");
+  }
   mgr->SetInputEventHandler(esdHandler);
   mgr->SetDebugLevel(debug_level);
+  mgr->SetFileInfoLog("fileinfo.log"); 
   
   // AnalysisTasks
-  AddAnalysisTasks(suffix);
+  AddAnalysisTasks(suffix, cdb);
   if (stage>0) {
     QAmerge(suffix, xmlfile, stage);
     return;
@@ -144,6 +156,8 @@ void LoadLibraries()
      gSystem->Load("libPWGGACaloTrackCorrelations");
      gSystem->Load("libPWGGACaloTasks");
      gSystem->Load("libPWGGAPHOSTasks");
+     gSystem->Load("libPWGTools");
+     gSystem->Load("libPWGEMCAL");
      gSystem->Load("libPWGGAEMCALTasks");
   }  
   if(doMUON || doMUONTrig) {
@@ -156,11 +170,12 @@ void LoadLibraries()
   }      
 }
 
-void AddAnalysisTasks(const char *suffix)
+void AddAnalysisTasks(const char *suffix, const char *cdb_location)
 {
   TString ss(suffix);
   ss.ToLower();
   Bool_t ibarrel = (ss.Contains("barrel"))?kTRUE:kFALSE;
+  Bool_t iall = ss.IsNull();
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   mgr->SetCommonFileName(Form("QAresults%s.root",suffix));
   // Statistics task
@@ -170,11 +185,12 @@ void AddAnalysisTasks(const char *suffix)
   //
   if (doCDBconnect) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskCDBconnect.C");
-    AliTaskCDBconnect *taskCDB = AddTaskCDBconnect();
+    AliTaskCDBconnect *taskCDB = AddTaskCDBconnect(cdb_location, run_number);    
+//    AliTaskCDBconnect *taskCDB = AddTaskCDBconnect();
     if (!taskCDB) return;
     AliCDBManager *cdb = AliCDBManager::Instance();
-    cdb->SetDefaultStorage("raw://");
-    taskCDB->SetRunNumber(run_number);
+    cdb->SetDefaultStorage(cdb_location);
+//    taskCDB->SetRunNumber(run_number);
   }    
   
   //
@@ -191,18 +207,20 @@ void AddAnalysisTasks(const char *suffix)
   // Centrality (A. Toia)
   //
   if (doCentrality) {
-     if (!iCollisionType) {
-        printf("Disabling centrality task for p-p\n");
-        doCentrality = kFALSE;
-     } else {           
+//     if (!iCollisionType) {
+//        printf("Disabling centrality task for p-p\n");
+//        doCentrality = kFALSE;
+//     } else {           
         gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
         AliCentralitySelectionTask *taskCentrality = AddTaskCentrality();
-     }   
+      AliAnalysisDataContainer *centralityout = (AliAnalysisDataContainer*)mgr->GetOutputs()->FindObject("CentralityStat");
+      centralityout->SetFileName(Form("EventStat_temp%s.root", suffix));
+//     }   
   }   
   
   // Vertexing (A. Dainese)
   // 
-  if (doVertex) {
+  if (doVertex && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskVertexESD.C");
     AliAnalysisTaskVertexESD* taskvertexesd =  AddTaskVertexESD(kFALSE, kTriggerMask);
     taskvertexesd->SelectCollisionCandidates(kTriggerMask);
@@ -210,27 +228,31 @@ void AddAnalysisTasks(const char *suffix)
 
   // TPC QA (E. Sicking)
   //
-  if (doQAsym) {
+  if (doQAsym && (ibarrel || iall)) {
   // offline trigger in AddTask
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskQAsym.C");
-    AliAnalysisTaskSE * taskqasim = AddTaskQAsym(0, kTriggerMask, kTriggerHM, kTriggerEMC, kTriggerMuonBarell);
+    AliAnalysisTaskSE * taskqasim = AddTaskQAsym(0, kTriggerMask, kTriggerHM, kTriggerEMC, kTriggerMuonBarrel);
   }  
   //
   // VZERO QA  (C. Cheshkov)
   //
-  if (doVZERO && ibarrel) {
+  if (doVZERO && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskVZEROQA.C");
     AliAnalysisTaskSE * taskv0qa = AddTaskVZEROQA(0);
 //  taskv0qa->SelectCollisionCandidates();
+    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskVZEROQATrig.C");
+    AliAnaVZEROQA *taskv0qatrig = AddTaskVZEROQATrig(0);
+    taskv0qatrig->SelectCollisionCandidates(AliVEvent::kINT8);
+
   }
-  if (doVZEROPbPb && iCollisionType==1) {
+  if (doVZEROPbPb && iCollisionType==0) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/VZERO/AddTaskVZEROPbPb.C");
-    AliAnaVZEROPbPb* taskV0PbPb = (AliAnaVZEROPbPb*)AddTaskVZEROPbPb(0);
+    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-");
+//    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)
@@ -240,7 +262,7 @@ void AddAnalysisTasks(const char *suffix)
   // 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 && ibarrel) {
+  if (doTPC && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
     AliPerformanceTask *tpcQA = 0;
     if (iCollisionType) {
@@ -254,7 +276,7 @@ void AddAnalysisTasks(const char *suffix)
   }  
 
   // HLT (Alberica Toia)
-  if (doHLT && ibarrel) {
+  if (doHLT && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
     AliPerformanceTask *hltQA = AddTaskPerformanceTPCdEdxQA(kFALSE, kTRUE, kFALSE,0,kTRUE);
     hltQA->SelectCollisionCandidates(kTriggerMask);
@@ -262,18 +284,18 @@ void AddAnalysisTasks(const char *suffix)
   //
   // SPD (A. Mastroserio)
   //
-  if (doSPD) {
+  if (doSPD && (ibarrel || iall)) {
     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://");
+    taskspdqa->SetOCDBInfo(run_number, cdb_location);
   }  
   //
   // SDD (F. Prino)
   //
-  if (doSDD) {
+  if (doSDD && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddSDDPoints.C");
     AliAnalysisTaskSE* tasksdd = AddSDDPoints();
     tasksdd->SelectCollisionCandidates(kTriggerMask);
@@ -281,7 +303,7 @@ void AddAnalysisTasks(const char *suffix)
   //
   // SSD dEdx (Marek Chojnacki)
   //
-  if (doSSDdEdx) {
+  if (doSSDdEdx && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskdEdxSSDQA.C");
     AliAnalysisTaskSE* taskssddedx = AddTaskdEdxSSDQA();
     taskssddedx->SelectCollisionCandidates(kTriggerMask);
@@ -290,7 +312,7 @@ void AddAnalysisTasks(const char *suffix)
   //
   // ITS
   //
-  if (doITS) {
+  if (doITS && (ibarrel || iall)) {
   // hardcoded non-zero trigger mask
       gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskPerformanceITS.C");
       AliAnalysisTaskITSTrackingCheck *itsQA = 0;
@@ -309,21 +331,21 @@ void AddAnalysisTasks(const char *suffix)
   //
   // ITS saTracks, align (F.Prino)
   //
-  if (doITSsaTracks) {
+  if (doITSsaTracks && (ibarrel || iall)) {
   // offline trigger in AddTask
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskITSsaTracks.C");
      AliAnalysisTaskITSsaTracks *itssaTracks = AddTaskITSsaTracks(kFALSE,kFALSE);
      itssaTracks->SelectCollisionCandidates(kTriggerMask);
   }   
-  if (doITSalign) {
+  if (doITSalign && (ibarrel || iall)) {
   // no offline trigger selection
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskITSAlign.C");
-     AliAnalysisTaskITSAlignQA *itsAlign = AddTaskITSAlign(0,2011);
+     AliAnalysisTaskITSAlignQA *itsAlign = AddTaskITSAlign(0,2012);
   }   
   //
   // TRD (Alex Bercuci, M. Fasel) 
   //
-  if(doTRD && ibarrel) {
+  if(doTRD && (ibarrel || iall)) {
   // no offline trigger selection
       gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTrainPerformanceTRD.C");
       // steer individual TRD tasks
@@ -340,7 +362,7 @@ void AddAnalysisTasks(const char *suffix)
   //
   // ZDC (Chiara Oppedisano) 
   //
-  if(doZDC && ibarrel) {
+  if(doZDC && (ibarrel || iall)) {
   // hardcoded kMB trigger mask
      gROOT->LoadMacro("$ALICE_ROOT/PWGPP/ZDC/AddTaskZDCQA.C");
      AliAnalysisTaskSE *taskZDC = AddTaskZDCQA();
@@ -351,13 +373,33 @@ void AddAnalysisTasks(const char *suffix)
   //
 
   if(doCALO) {
+  // - In case of MC analysis, it skips the triggered events wagon (given that
+  //the normal wagon is always suffixed as "default")
+  //- No need to pass the type of data
+  //- No need to specify the year. In principle the year is only needed when
+  //setting the size of some histograms (change in number of SM along the years),
+  //I do not know how to access automatically the run number when the histograms
+  // are created in the UserCreateOutput. By default I set them to the maximum
+  //expected size, but I still let the possibility to check the year.
+
+  //So the way to initialize the task in trunk is now
+
+  //AddTaskCalorimeterQA(Bool_t kSimulation = kFALSE,
+                                   //  const char *suffix="default",
+                                   // TString outputFile = "", 
+                                   //  Int_t year = 2012, 
+                                   //  Bool_t kPrintSettings = kFALSE)
+
+  //So, in principle only the first 2 need to be specified.
+
+  
       gROOT->LoadMacro("$ALICE_ROOT/PWGGA/CaloTrackCorrelations/macros/QA/AddTaskCalorimeterQA.C");
-      AliAnalysisTaskCaloTrackCorrelation *taskCaloQA = AddTaskCalorimeterQA("ESD", 2011, kFALSE, kFALSE);
+      AliAnalysisTaskCaloTrackCorrelation *taskCaloQA = AddTaskCalorimeterQA(kFALSE, "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("ESD", 2011, kFALSE, kFALSE, "", "EMC7");
+      taskCaloQA = AddTaskCalorimeterQA(kFALSE, "trigEMC");
       taskCaloQA->SetDebugLevel(0);
       taskCaloQA->SelectCollisionCandidates(kTriggerEMC);
   }
@@ -370,12 +412,13 @@ void AddAnalysisTasks(const char *suffix)
   // no offline trigger selection
       gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskMTRchamberEfficiency.C");
       AliAnalysisTaskTrigChEff *taskMuonTrig = AddTaskMTRchamberEfficiency();
+//      taskMuonTrig->GetMuonTrackCuts()->SetCustomParamFromRun(160000,2);       
   }
 
   //
   // Impact parameter resolution (xianbao.yuan@pd.infn.it, andrea.dainese@pd.infn.it)
   //
-  if (doImpParRes && ibarrel) {
+  if (doImpParRes && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskImpParRes.C");
     AliAnalysisTaskSE* taskimpparres=0;
     if(iCollisionType==0) {
@@ -391,20 +434,21 @@ void AddAnalysisTasks(const char *suffix)
   if (doMUON) {
   // trigger analysis internal
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskMuonQA.C");
-    AliAnalysisTaskSE* taskmuonqa= AddTaskMuonQA();
+    AliAnalysisTaskMuonQA* taskmuonqa= AddTaskMuonQA();
+//    taskmuonqa->GetTrackCuts()->SetCustomParamFromRun(160000,2);
   }  
   //
   // TOF (Francesca Bellini)
   //
-  if (doTOF && ibarrel) {
+  if (doTOF && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TOF/AddTaskTOFQA.C");
-    AliAnalysisTaskTOFqa *tofQA = AddTaskTOFQA();
+    AliAnalysisTaskTOFqa *tofQA = AddTaskTOFQA(kTRUE);
     tofQA->SelectCollisionCandidates(kTriggerMask);
   } 
    //
   // PIDResponse(JENS)
   //
-  if (doPIDResponse && ibarrel) {
+  if (doPIDResponse && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C"); 
     AliAnalysisTaskPIDResponse *PIDResponse = AddTaskPIDResponse();
     PIDResponse->SelectCollisionCandidates(kTriggerMask);
@@ -413,7 +457,7 @@ void AddAnalysisTasks(const char *suffix)
   //
   // PIDqa(JENS)
   //
-  if (doPIDqa && ibarrel) {
+  if (doPIDqa && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDqa.C");
     AliAnalysisTaskPIDqa *PIDQA = AddTaskPIDqa();
     PIDQA->SelectCollisionCandidates(kTriggerMask);
@@ -422,7 +466,7 @@ void AddAnalysisTasks(const char *suffix)
   //
   // HMPID QA (Giacomo Volpe)
   //
-  if (doHMPID && ibarrel) {
+  if (doHMPID && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/HMPID/AddTaskHmpidQA.C");
     AliAnalysisTaskSE* taskhmpidqa= AddTaskHmpidQA(kFALSE);
       // offline mask set in AddTask to kMB
@@ -431,17 +475,18 @@ void AddAnalysisTasks(const char *suffix)
   
   
   // T0 QA (Alla Mayevskaya)
-  if (doT0 && ibarrel) {
+  if (doT0 && (ibarrel || iall)) {
   // 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 && ibarrel) {
+  if (doFMD && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/AddTaskForwardQA.C");
     // Parameters: usemc, usecentrality
-    AliAnalysisTaskSE *forwardQA = (AliAnalysisTaskSE *)AddTaskForwardQA(kFALSE, kFALSE);
+    AliForwardQATask *forwardQA = (AliAnalysisTaskSE *)AddTaskForwardQA(kFALSE, kFALSE);
+    forwardQA->SetDebug(0);
     // No offline trigger config. needed (see #84077)
   }
    //     
@@ -456,7 +501,7 @@ void AddAnalysisTasks(const char *suffix)
     taskPHOSCellQA2->SelectCollisionCandidates(AliVEvent::kPHI7);
     taskPHOSCellQA2->GetCaloCellsQA()->SetClusterEnergyCuts(0.3,0.3,1.0);
     // Pi0 QA fo PbPb
-    if (iCollisionType) {
+    if (iCollisionType == 0) {
       gROOT->LoadMacro("$ALICE_ROOT/PWGGA/PHOSTasks/PHOS_PbPbQA/macros/AddTaskPHOSPbPb.C");
       AliAnalysisTaskPHOSPbPbQA* phosPbPb = AddTaskPHOSPbPbQA(0);
     }
@@ -471,11 +516,12 @@ void AddAnalysisTasks(const char *suffix)
   if (doEMCAL) {
      gROOT->LoadMacro("$ALICE_ROOT/PWGGA/EMCALTasks/macros/AddTaskEMCALTriggerQA.C");
      AliAnalysisTaskEMCALTriggerQA *emctrig = AddTaskEMCALTriggerQA();
+//     emctrig->GetRecoUtils()->SwitchOffBadChannelsRemoval();
   }   
   //     
   // FLOW and BF QA (C.Perez && A.Rodriguez)
   //
-  if (doFBFqa && ibarrel) {
+  if (doFBFqa && (ibarrel || iall)) {
     gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskFBFqa.C");
     AliAnalysisTaskSE *qaFBFMB = (AliAnalysisTaskSE*) AddTaskFBFqa("qaFBFmb",kFALSE);
     qaFBFMB->SelectCollisionCandidates(AliVEvent::kMB);
@@ -510,10 +556,12 @@ void QAmerge(const char *suffix, const char *dir, Int_t stage)
     merged = AliAnalysisAlien::MergeOutput(outputFile, outputDir, 10, stage);
     if (!merged && !outputFile.Contains("RecoQAresults")) {
        printf("ERROR: Cannot merge %s\n", outputFile.Data());
-       return;
+       continue;
     }
   }
   // read the analysis manager from file
+  TString infolog = "fileinfo.log";
+  AliAnalysisAlien::MergeInfo(infolog, dir); 
   if (!outputDir.Contains("Stage")) {
     ofstream out;
     out.open("outputs_valid", ios::out);
@@ -527,6 +575,7 @@ void QAmerge(const char *suffix, const char *dir, Int_t stage)
   mgr->PrintStatus();
   AliLog::SetGlobalLogLevel(AliLog::kError);
   TTree *tree = NULL;
+  gROOT->cd();
   mgr->StartAnalysis("gridterminate", tree);
   if (strlen(suffix)) {
      if (gSystem->Exec(Form("mv trending.root trending%s.root", suffix)))