ROOT logo
#include "Riostream.h"
void LoadLibraries();
void AddAnalysisTasks(); 
class AliAnalysisAlien;                                                                                                                    
AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode);

// Collision type: 0 = p-p   1 = Pb-Pb
Int_t  iCollisionType = 0;
// Trigger mask.
// Still need to change:
UInt_t kTriggerInt = AliVEvent::kAnyINT;
UInt_t kTriggerMuonAll = AliVEvent::kMUL7 | AliVEvent::kMUSH7 | AliVEvent::kMUU7 | AliVEvent::kMUS7;
UInt_t kTriggerMuonBarell = AliVEvent::kMUU7;
UInt_t kTriggerEMC   = AliVEvent::kEMC7;
UInt_t kTriggerHM   = AliVEvent::kHighMult;
// Main trigger mask used:
UInt_t kTriggerMask = kTriggerInt;

Int_t runNumbers[5] = {154780};

Bool_t doCDBconnect   = 1;
Bool_t doEventStat    = 1;
Bool_t doCentrality   = 0;
Bool_t doQAsym        = 1;
Bool_t doVZERO        = 1;   // there is a 2nd file
Bool_t doVertex       = 1;
Bool_t doSPD          = 1;   // needs RP   
Bool_t doTPC          = 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 doMUONEff      = 0;   // NEEDS geometry
Bool_t doV0           = 0;   // NEEDS MCtruth 

TString     train_name         = "QA";      // QA local folder name
TString     train_tag          = (iCollisionType)?"_Pb-Pb":"_p-p";        // Train special tag appended to 
                                            // visible name. ("sim", "pp", ...)
               // Name in train page (DON'T CHANGE)
TString     visible_name       = Form("QA$2_$3%s", train_tag.Data()); //# FIXED #
TString     job_comment        = "PWGPP QA kAnyInt, QAsym(add kMUU7 and kEMC7) CALO (add kEMC7)  triggers"; // Can add observations here
               // Job tag (DON'T CHANGE)
TString     job_tag            = Form("%s: %s", visible_name.Data(), job_comment.Data());
               // Package versions - Modify as needed
TString     root_version       = "v5-28-00e-1";
TString     aliroot_version    = "v4-21-29-AN";
               // Production directory - change as needed for test mode
TString     grid_datadir       = "/alice/data/2011/LHC11c";
               // Work directory in GRID (DON'T CHANGE)
TString     grid_workdir       = "/alice/cern.ch/user/a/alidaq/QA/QA$2";
               // Job splitting
Int_t       grid_split         = 20;       // Splitting
               // Debug level
Int_t       debug_level        = 1;        // Debugging
               // File merging
Int_t       maxMergeFiles      = 10;       // Max files to merge in a chunk
               // Data pattern - change as needed for test mode
TString     data_pattern       = "*ESDs/pass1/*ESDs.root";
               // Output directory (DON'T CHANGE)
TString     alien_outdir       = "$1/QA$2";
               // Input collection (production mode)
TString     data_collection    = "$1/qa1.xml";
TString     mergeExcludes      = ""; // Files to be excluded for merging
TString     mergeDirName       = "QA$2";
TString     terminateFiles     = "trending.root"; // Files produced during Terminate

Bool_t useProductionMode       = kTRUE;
Bool_t useMergeViaJDL          = kTRUE;
Bool_t useFastReadOption       = kFALSE;
Bool_t useOverwriteMode        = kTRUE;
Bool_t useDevelopmentVersion   = kFALSE;

void PilotAnalysis(const char *plugin_mode = "full")
{
  TString smode(plugin_mode);
  smode.ToLower();
  if (smode == "test") useProductionMode = kFALSE;
  if (!useProductionMode) {
     TGrid::Connect("alien://");
     if (!gGrid || !gGrid->IsConnected()) {
       ::Error("PilotAnalysis", "No grid connection");
       return;
     }
  }   
  // Write configuration
  TString cdir = gSystem->WorkingDirectory();
  gSystem->MakeDirectory(train_name);
  gSystem->ChangeDirectory(train_name);
  ofstream out;
  out.open(Form("%sConfig.C",train_name.Data()), ios::out);
  out << "{" << endl;
  out << "   train_name      = " << "\"" << train_name.Data() << "\";" << endl;
  out << "   root_version    = " << "\"" << root_version.Data() << "\";" << endl;
  out << "   aliroot_version = " << "\"" << aliroot_version.Data() << "\";" << endl;
  out << "   grid_datadir   = " << "\"" << grid_datadir.Data() << "\";" << endl;
  if (!alien_outdir.Length()) alien_outdir = Form("output_%s",train_name.Data());
  out << "   alien_outdir    = " << "\"" << alien_outdir.Data() << "\";" << endl;
  out << "   doQAsim         = " << doQAsym << ";" << endl;
  out << "   doVZERO         = " << doVZERO << ";" << endl;
  out << "   doVertex        = " << doVertex << ";" << endl;
  out << "   doSPD           = " << doSPD << ";" << endl;
  out << "   doSDD           = " << doSDD << ";" << endl;
  out << "   doSSDdEdx       = " << doSSDdEdx << ";" << endl;
  out << "   doTPC           = " << doTPC << ";" << endl;
  out << "   doTRD           = " << doTRD << ";" << endl;
  out << "   doITS           = " << doITS << ";" << endl;
  out << "   doITSsaTracks   = " << doITSsaTracks << ";" << endl;
  out << "   doITSalign      = " << doITSalign << ";" << endl;
  out << "   doZDC           = " << doZDC << ";" << endl;
  out << "   doImpParRes     = " << doImpParRes << ";" << endl;
  out << "   doMUON          = " << doMUON << ";" << endl;
  out << "   doTOF           = " << doTOF << ";" << endl;
  out << "   doHMPID         = " << doHMPID << ";" << endl;
  out << "   doZDC           = " << doZDC << ";" << endl;
  out << "   doT0            = " << doT0 << ";" << endl;
  out << "   doPIDResponse   = " << doPIDResponse << ";" << endl;
  out << "   doPIDqa         = " << doPIDqa << ";" << endl;
  out << "   doFMD           = " << doFMD << ";" << endl;
  out << "   doEventStat     = " << doEventStat << ";" << endl;
  if (iCollisionType) out << "   doCentrality    = " << doCentrality << ";" << endl;
  out << "}" << endl;
  out.close();
  
  // Load libraries
  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");
  LoadLibraries();
  // Create manager
  AliAnalysisManager *mgr  = new AliAnalysisManager("PilotAnalysis", "Production train");
  if (!strcmp(plugin_mode,"test")) mgr->SetNSysInfo(100);
  // Input handler
  AliESDInputHandlerRP *esdHandler = new AliESDInputHandlerRP();
  esdHandler->SetReadFriends(kTRUE);
  esdHandler->SetActiveBranches("ESDfriend");
  mgr->SetInputEventHandler(esdHandler);
  mgr->SetDebugLevel(debug_level);
  
  // AnalysisTasks
  AddAnalysisTasks();
  // Grid handler
  AliAnalysisAlien *alienHandler = CreateAlienHandler(plugin_mode);
  mgr->SetGridHandler(alienHandler);
  if (mgr->InitAnalysis()) {                                                                                                              
    mgr->PrintStatus(); 
    if (!strcmp(plugin_mode, "local")) mgr->StartAnalysis("local");
    else mgr->StartAnalysis("grid");
  }
}

void LoadLibraries()
{
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libCORRFW");
  gSystem->Load("libTENDER");
  gSystem->Load("libPWG0base.so");
  gSystem->Load("libPWG0dep.so");
  gSystem->Load("libPWG0selectors.so");
  gSystem->Load("libPWGPP.so");

  if (doCALO) {
     gSystem->Load("libEMCALUtils");
     gSystem->Load("libPHOSUtils");
     gSystem->Load("libPWG4PartCorrBase");
     gSystem->Load("libPWG4PartCorrDep");
  }  
  if(doMUON || doMUONTrig) {
     gSystem->Load("libPWGHFbase");
     gSystem->Load("libPWGmuon");
     gSystem->Load("libPWGmuondep");
  }
  if (doFMD) {
     gSystem->Load("libPWG2forward2");
  }      
}

void AddAnalysisTasks()
{
  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();
    if (!taskCDB) return;
    taskCDB->SetRunNumber(runNumbers[0]);
  }    
  
  //
  // Event Statistics (Jan Fiete)
  //
  if (doEventStat) {
      gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
      AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(kFALSE /*MC*/);
//      mgr->RegisterExtraFile("event_stat.root");
      if (!terminateFiles.IsNull()) terminateFiles += ",";
      terminateFiles += "event_stat.root";
  }
  
  //
  // 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();
     }   
  }   
  
  // Vertexing (A. Dainese)
  // 
  if (doVertex) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/AddTaskVertexESD.C");
    AliAnalysisTaskVertexESD* taskvertexesd =  AddTaskVertexESD(kFALSE, 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);
    // taskqasim->SelectCollisionCandidates(); // Set by AddTask
  }  
  //
  // VZERO QA  (C. Cheshkov)
  //
  if (doVZERO) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskVZEROQA.C");
    AliAnalysisTaskSE * taskv0qa = AddTaskVZEROQA(0);
//  taskv0qa->SelectCollisionCandidates();
  }
  //
  // TPC (Jacek Otwinowski & Michael Knichel & Weilin Yu)
  //
  //
  // 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");
    // low multiplicity (pp) 
    //AliPerformanceTask *tpcQA = AddTaskPerformanceTPCdEdxQA(kFALSE, kTRUE, kFALSE);
    // high multiplicity (Pb-Pb)
    AliPerformanceTask *tpcQA = AddTaskPerformanceTPCdEdxQA(kFALSE, kTRUE, kTRUE);
    tpcQA->SelectCollisionCandidates(kTriggerMask);
  }  
  //
  // SPD (A. Mastroserio)
  //
  if (doSPD) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/PilotTrain/AddTaskSPDQA.C");
    AliAnalysisTaskSE* taskspdqa = AddTaskSPDQA();
    taskspdqa->SelectCollisionCandidates(kTriggerMask);
  }  
  //
  // 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(kFALSE);
      } else {
        itsQA = AddTaskPerformanceITS(kFALSE);
        itsQACent0010 = AddTaskPerformanceITS(kFALSE,kFALSE,kFALSE,3500,10000);
        itsQACent3050 = AddTaskPerformanceITS(kFALSE,kFALSE,kFALSE,590,1570);
        itsQACent6080 = AddTaskPerformanceITS(kFALSE,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(kFALSE,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/PWG4/macros/QA/AddTaskCalorimeterQA.C");
      AliAnalysisTaskParticleCorrelation *taskCaloQA = AddTaskCalorimeterQA("ESD", 2011, kFALSE, kFALSE);
      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->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(kFALSE);
  }
  //
  // 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;
    if(iCollisionType==0) {
       taskimpparres= AddTaskImpParRes();
    } else {
       taskimpparres= AddTaskImpParRes(kFALSE,-1,kFALSE,kFALSE);
    }
    taskimpparres->SelectCollisionCandidates(kTriggerMask);
  }  
  //
  // MUON QA (Philippe Pillot)
  //
  if (doMUON) {
  // trigger analysis internal
    gROOT->LoadMacro("$ALICE_ROOT/PWG3/muon/AddTaskMuonQA.C");
    AliAnalysisTaskSE* taskmuonqa= AddTaskMuonQA();
  }  
  //
  // TOF (Francesca Bellini)
  //
  if (doTOF) {
    gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TOF/AddTaskTOFQA.C");
    AliAnalysisTaskTOFqa *tofQA = AddTaskTOFQA();
    tofQA->SelectCollisionCandidates(kTriggerMask);
  } 
   //
  // PIDResponse(JENS)
  //
  if (doPIDqa) {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C"); 
    AliAnalysisTaskPIDResponse *PIDResponse = AddTaskPIDResponse();
    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(kFALSE);
      // 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/PWG2/FORWARD/analysis2/AddTaskForwardQA.C");
    // Parameters: usemc, usecentrality
    AliAnalysisTaskSE *forwardQA = (AliAnalysisTaskSE *)AddTaskForwardQA(kFALSE, kFALSE);
    // No offline trigger config. needed (see #84077)
  }
}

//______________________________________________________________________________
AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode)
{
// Check if user has a valid token, otherwise make one. This has limitations.
// One can always follow the standard procedure of calling alien-token-init then
//   source /tmp/gclient_env_$UID in the current shell.
   AliAnalysisAlien *plugin = new AliAnalysisAlien();
// Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
   plugin->SetRunMode(plugin_mode);
   if (useProductionMode) {
      plugin->SetProductionMode();
      plugin->AddDataFile(data_collection);
   }   
   plugin->SetJobTag(job_tag);
   plugin->SetNtestFiles(2);
   plugin->SetCheckCopy(kFALSE);
   plugin->SetMergeDirName(mergeDirName);
// Set versions of used packages
   plugin->SetAPIVersion("V1.1x");
   plugin->SetROOTVersion(root_version);
   plugin->SetAliROOTVersion(aliroot_version);
// Declare input data to be processed.
// Method 1: Create automatically XML collections using alien 'find' command.
// Define production directory LFN
   plugin->SetGridDataDir(grid_datadir);
// Set data search pattern
   plugin->SetDataPattern(data_pattern);
// ...then add run numbers to be considered
//   if (!iAODanalysis) plugin->SetRunRange(run_range[0], run_range[1]);
//   plugin->SetOutputSingleFolder("outpu$ALICE_ROOT/PWGPP/T0/Addt");
   if (!useProductionMode) {
      plugin->SetRunPrefix("000");
      plugin->SetOutputToRunNo();
      for (Int_t i=0; i<2; i++) {
         if (!runNumbers[i]) break;
         plugin->AddRunNumber(runNumbers[i]);
      }   
   }
// Define alien work directory where all files will be copied. Relative to alien $HOME.
   plugin->SetGridWorkingDir(grid_workdir);
// Declare alien output directory. Relative to working directory.
   if (alien_outdir.IsNull()) alien_outdir = Form("output_%s",train_name.Data());
   plugin->SetGridOutputDir(alien_outdir);

   if (useDevelopmentVersion) {
     plugin->EnablePackage("STEERBase");
     plugin->EnablePackage("ESD");
     plugin->EnablePackage("AOD");
     plugin->EnablePackage("ANALYSIS");
     plugin->EnablePackage("ANALYSISalice");
   }

// Declare the analysis source files names separated by blancs. To be compiled runtime
// using ACLiC on the worker nodes.
// Declare all libraries (other than the default ones for the framework. These will be
// loaded by the generated analysis macro. Add all extra files (task .cxx/.h) here.
   plugin->AddIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TRD");
   
   plugin->SetAdditionalLibs("libCORRFW.so libTENDER.so libPWG0base.so libPWG0dep.so libPWG0selectors.so libPWGPP.so \
                              libEMCALUtils.so libPHOSUtils.so libPWG4PartCorrBase.so libPWG4PartCorrDep.so \
                              libPWGHFbase.so libPWGmuon.so libPWGmuondep.so libPWG2forward2.so");
     
// Declare the output file names separated by blancs.
   plugin->SetDefaultOutputs();
   plugin->SetMaxMergeFiles(maxMergeFiles);
   plugin->SetNrunsPerMaster(1);
   
   // Put default output files to archive
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
   TIter next(mgr->GetOutputs());
   AliAnalysisDataContainer *output;
   if (!mergeExcludes.IsNull()) plugin->SetMergeExcludes(mergeExcludes);
   if (!terminateFiles.IsNull()) plugin->SetTerminateFiles(terminateFiles);
// Set friends
// Optionally set a name for the generated analysis macro (default MyAnalysis.C)
   plugin->SetAnalysisMacro(Form("%s.C", train_name.Data()));
// Optionally set a name for the generated validation script
   plugin->SetValidationScript("validation.sh");
// Optionally set maximum number of input files/subjob (default 100, put 0 to ignore)
   plugin->SetSplitMaxInputFileNumber(grid_split);
// Optionally set number of failed jobs that will trigger killing waiting sub-jobs.
//   plugin->SetMaxInitFailed(5);
// Optionally modify the number of replicas
   plugin->SetNumberOfReplicas(5);
// Optionally resubmit threshold.
//   plugin->SetMasterResubmitThreshold(90);
// Optionally set time to live (default 30000 sec)
   plugin->SetTTL(70000);
// Optionally set input format (default xml-single)
   plugin->SetInputFormat("xml-single");
// Optionally modify the name of the generated JDL (default analysis.jdl)
   plugin->SetJDLName(Form("%s.jdl", train_name.Data()));
// Optionally modify the executable name (default analysis.sh)
   plugin->SetExecutable(Form("%s.sh", train_name.Data()));
// Optionally modify job price (default 1)
   plugin->SetPrice(1);      
// Optionally modify split mode (default 'se')    
   plugin->SetSplitMode("se");
   plugin->SetExecutableCommand("aliroot -b -q");
// Merge via JDL
   plugin->SetMergeViaJDL(useMergeViaJDL);
// Use fastread option
   plugin->SetFastReadOption(useFastReadOption);
// UseOverwrite mode
   plugin->SetOverwriteMode(useOverwriteMode);   
/*********************************************************
 ***     PROOF MODE SPECIFIC SETTINGS         ************
 *********************************************************/
// Proof cluster
//   plugin->SetProofCluster("alice-caf");
   plugin->SetProofCluster("skaf.saske.sk");
// Dataset to be used   
   plugin->SetProofDataSet("/alice/data/LHC10e_000128175_p1#esdTree");
// May need to reset proof. Supported modes: 0-no reset, 1-soft, 2-hard
   plugin->SetProofReset(0);
// May limit number of workers
   plugin->SetNproofWorkers(1);   
// May use a specific version of root installed in proof
   plugin->SetRootVersionForProof("current_dbg");
// May set the aliroot mode. Check http://aaf.cern.ch/node/83 
   plugin->SetAliRootMode("ALIROOT"); // Loads AF libs by default
// May request ClearPackages (individual ClearPackage not supported)
   plugin->SetClearPackages(kFALSE);
// Plugin test mode works only providing a file containing test file locations
   plugin->SetFileForTestMode(gSystem->ExpandPathName("$ALICE_ROOT/PWGPP/PilotTrain/files.txt"));
   return plugin;
}
 PilotAnalysis.C:1
 PilotAnalysis.C:2
 PilotAnalysis.C:3
 PilotAnalysis.C:4
 PilotAnalysis.C:5
 PilotAnalysis.C:6
 PilotAnalysis.C:7
 PilotAnalysis.C:8
 PilotAnalysis.C:9
 PilotAnalysis.C:10
 PilotAnalysis.C:11
 PilotAnalysis.C:12
 PilotAnalysis.C:13
 PilotAnalysis.C:14
 PilotAnalysis.C:15
 PilotAnalysis.C:16
 PilotAnalysis.C:17
 PilotAnalysis.C:18
 PilotAnalysis.C:19
 PilotAnalysis.C:20
 PilotAnalysis.C:21
 PilotAnalysis.C:22
 PilotAnalysis.C:23
 PilotAnalysis.C:24
 PilotAnalysis.C:25
 PilotAnalysis.C:26
 PilotAnalysis.C:27
 PilotAnalysis.C:28
 PilotAnalysis.C:29
 PilotAnalysis.C:30
 PilotAnalysis.C:31
 PilotAnalysis.C:32
 PilotAnalysis.C:33
 PilotAnalysis.C:34
 PilotAnalysis.C:35
 PilotAnalysis.C:36
 PilotAnalysis.C:37
 PilotAnalysis.C:38
 PilotAnalysis.C:39
 PilotAnalysis.C:40
 PilotAnalysis.C:41
 PilotAnalysis.C:42
 PilotAnalysis.C:43
 PilotAnalysis.C:44
 PilotAnalysis.C:45
 PilotAnalysis.C:46
 PilotAnalysis.C:47
 PilotAnalysis.C:48
 PilotAnalysis.C:49
 PilotAnalysis.C:50
 PilotAnalysis.C:51
 PilotAnalysis.C:52
 PilotAnalysis.C:53
 PilotAnalysis.C:54
 PilotAnalysis.C:55
 PilotAnalysis.C:56
 PilotAnalysis.C:57
 PilotAnalysis.C:58
 PilotAnalysis.C:59
 PilotAnalysis.C:60
 PilotAnalysis.C:61
 PilotAnalysis.C:62
 PilotAnalysis.C:63
 PilotAnalysis.C:64
 PilotAnalysis.C:65
 PilotAnalysis.C:66
 PilotAnalysis.C:67
 PilotAnalysis.C:68
 PilotAnalysis.C:69
 PilotAnalysis.C:70
 PilotAnalysis.C:71
 PilotAnalysis.C:72
 PilotAnalysis.C:73
 PilotAnalysis.C:74
 PilotAnalysis.C:75
 PilotAnalysis.C:76
 PilotAnalysis.C:77
 PilotAnalysis.C:78
 PilotAnalysis.C:79
 PilotAnalysis.C:80
 PilotAnalysis.C:81
 PilotAnalysis.C:82
 PilotAnalysis.C:83
 PilotAnalysis.C:84
 PilotAnalysis.C:85
 PilotAnalysis.C:86
 PilotAnalysis.C:87
 PilotAnalysis.C:88
 PilotAnalysis.C:89
 PilotAnalysis.C:90
 PilotAnalysis.C:91
 PilotAnalysis.C:92
 PilotAnalysis.C:93
 PilotAnalysis.C:94
 PilotAnalysis.C:95
 PilotAnalysis.C:96
 PilotAnalysis.C:97
 PilotAnalysis.C:98
 PilotAnalysis.C:99
 PilotAnalysis.C:100
 PilotAnalysis.C:101
 PilotAnalysis.C:102
 PilotAnalysis.C:103
 PilotAnalysis.C:104
 PilotAnalysis.C:105
 PilotAnalysis.C:106
 PilotAnalysis.C:107
 PilotAnalysis.C:108
 PilotAnalysis.C:109
 PilotAnalysis.C:110
 PilotAnalysis.C:111
 PilotAnalysis.C:112
 PilotAnalysis.C:113
 PilotAnalysis.C:114
 PilotAnalysis.C:115
 PilotAnalysis.C:116
 PilotAnalysis.C:117
 PilotAnalysis.C:118
 PilotAnalysis.C:119
 PilotAnalysis.C:120
 PilotAnalysis.C:121
 PilotAnalysis.C:122
 PilotAnalysis.C:123
 PilotAnalysis.C:124
 PilotAnalysis.C:125
 PilotAnalysis.C:126
 PilotAnalysis.C:127
 PilotAnalysis.C:128
 PilotAnalysis.C:129
 PilotAnalysis.C:130
 PilotAnalysis.C:131
 PilotAnalysis.C:132
 PilotAnalysis.C:133
 PilotAnalysis.C:134
 PilotAnalysis.C:135
 PilotAnalysis.C:136
 PilotAnalysis.C:137
 PilotAnalysis.C:138
 PilotAnalysis.C:139
 PilotAnalysis.C:140
 PilotAnalysis.C:141
 PilotAnalysis.C:142
 PilotAnalysis.C:143
 PilotAnalysis.C:144
 PilotAnalysis.C:145
 PilotAnalysis.C:146
 PilotAnalysis.C:147
 PilotAnalysis.C:148
 PilotAnalysis.C:149
 PilotAnalysis.C:150
 PilotAnalysis.C:151
 PilotAnalysis.C:152
 PilotAnalysis.C:153
 PilotAnalysis.C:154
 PilotAnalysis.C:155
 PilotAnalysis.C:156
 PilotAnalysis.C:157
 PilotAnalysis.C:158
 PilotAnalysis.C:159
 PilotAnalysis.C:160
 PilotAnalysis.C:161
 PilotAnalysis.C:162
 PilotAnalysis.C:163
 PilotAnalysis.C:164
 PilotAnalysis.C:165
 PilotAnalysis.C:166
 PilotAnalysis.C:167
 PilotAnalysis.C:168
 PilotAnalysis.C:169
 PilotAnalysis.C:170
 PilotAnalysis.C:171
 PilotAnalysis.C:172
 PilotAnalysis.C:173
 PilotAnalysis.C:174
 PilotAnalysis.C:175
 PilotAnalysis.C:176
 PilotAnalysis.C:177
 PilotAnalysis.C:178
 PilotAnalysis.C:179
 PilotAnalysis.C:180
 PilotAnalysis.C:181
 PilotAnalysis.C:182
 PilotAnalysis.C:183
 PilotAnalysis.C:184
 PilotAnalysis.C:185
 PilotAnalysis.C:186
 PilotAnalysis.C:187
 PilotAnalysis.C:188
 PilotAnalysis.C:189
 PilotAnalysis.C:190
 PilotAnalysis.C:191
 PilotAnalysis.C:192
 PilotAnalysis.C:193
 PilotAnalysis.C:194
 PilotAnalysis.C:195
 PilotAnalysis.C:196
 PilotAnalysis.C:197
 PilotAnalysis.C:198
 PilotAnalysis.C:199
 PilotAnalysis.C:200
 PilotAnalysis.C:201
 PilotAnalysis.C:202
 PilotAnalysis.C:203
 PilotAnalysis.C:204
 PilotAnalysis.C:205
 PilotAnalysis.C:206
 PilotAnalysis.C:207
 PilotAnalysis.C:208
 PilotAnalysis.C:209
 PilotAnalysis.C:210
 PilotAnalysis.C:211
 PilotAnalysis.C:212
 PilotAnalysis.C:213
 PilotAnalysis.C:214
 PilotAnalysis.C:215
 PilotAnalysis.C:216
 PilotAnalysis.C:217
 PilotAnalysis.C:218
 PilotAnalysis.C:219
 PilotAnalysis.C:220
 PilotAnalysis.C:221
 PilotAnalysis.C:222
 PilotAnalysis.C:223
 PilotAnalysis.C:224
 PilotAnalysis.C:225
 PilotAnalysis.C:226
 PilotAnalysis.C:227
 PilotAnalysis.C:228
 PilotAnalysis.C:229
 PilotAnalysis.C:230
 PilotAnalysis.C:231
 PilotAnalysis.C:232
 PilotAnalysis.C:233
 PilotAnalysis.C:234
 PilotAnalysis.C:235
 PilotAnalysis.C:236
 PilotAnalysis.C:237
 PilotAnalysis.C:238
 PilotAnalysis.C:239
 PilotAnalysis.C:240
 PilotAnalysis.C:241
 PilotAnalysis.C:242
 PilotAnalysis.C:243
 PilotAnalysis.C:244
 PilotAnalysis.C:245
 PilotAnalysis.C:246
 PilotAnalysis.C:247
 PilotAnalysis.C:248
 PilotAnalysis.C:249
 PilotAnalysis.C:250
 PilotAnalysis.C:251
 PilotAnalysis.C:252
 PilotAnalysis.C:253
 PilotAnalysis.C:254
 PilotAnalysis.C:255
 PilotAnalysis.C:256
 PilotAnalysis.C:257
 PilotAnalysis.C:258
 PilotAnalysis.C:259
 PilotAnalysis.C:260
 PilotAnalysis.C:261
 PilotAnalysis.C:262
 PilotAnalysis.C:263
 PilotAnalysis.C:264
 PilotAnalysis.C:265
 PilotAnalysis.C:266
 PilotAnalysis.C:267
 PilotAnalysis.C:268
 PilotAnalysis.C:269
 PilotAnalysis.C:270
 PilotAnalysis.C:271
 PilotAnalysis.C:272
 PilotAnalysis.C:273
 PilotAnalysis.C:274
 PilotAnalysis.C:275
 PilotAnalysis.C:276
 PilotAnalysis.C:277
 PilotAnalysis.C:278
 PilotAnalysis.C:279
 PilotAnalysis.C:280
 PilotAnalysis.C:281
 PilotAnalysis.C:282
 PilotAnalysis.C:283
 PilotAnalysis.C:284
 PilotAnalysis.C:285
 PilotAnalysis.C:286
 PilotAnalysis.C:287
 PilotAnalysis.C:288
 PilotAnalysis.C:289
 PilotAnalysis.C:290
 PilotAnalysis.C:291
 PilotAnalysis.C:292
 PilotAnalysis.C:293
 PilotAnalysis.C:294
 PilotAnalysis.C:295
 PilotAnalysis.C:296
 PilotAnalysis.C:297
 PilotAnalysis.C:298
 PilotAnalysis.C:299
 PilotAnalysis.C:300
 PilotAnalysis.C:301
 PilotAnalysis.C:302
 PilotAnalysis.C:303
 PilotAnalysis.C:304
 PilotAnalysis.C:305
 PilotAnalysis.C:306
 PilotAnalysis.C:307
 PilotAnalysis.C:308
 PilotAnalysis.C:309
 PilotAnalysis.C:310
 PilotAnalysis.C:311
 PilotAnalysis.C:312
 PilotAnalysis.C:313
 PilotAnalysis.C:314
 PilotAnalysis.C:315
 PilotAnalysis.C:316
 PilotAnalysis.C:317
 PilotAnalysis.C:318
 PilotAnalysis.C:319
 PilotAnalysis.C:320
 PilotAnalysis.C:321
 PilotAnalysis.C:322
 PilotAnalysis.C:323
 PilotAnalysis.C:324
 PilotAnalysis.C:325
 PilotAnalysis.C:326
 PilotAnalysis.C:327
 PilotAnalysis.C:328
 PilotAnalysis.C:329
 PilotAnalysis.C:330
 PilotAnalysis.C:331
 PilotAnalysis.C:332
 PilotAnalysis.C:333
 PilotAnalysis.C:334
 PilotAnalysis.C:335
 PilotAnalysis.C:336
 PilotAnalysis.C:337
 PilotAnalysis.C:338
 PilotAnalysis.C:339
 PilotAnalysis.C:340
 PilotAnalysis.C:341
 PilotAnalysis.C:342
 PilotAnalysis.C:343
 PilotAnalysis.C:344
 PilotAnalysis.C:345
 PilotAnalysis.C:346
 PilotAnalysis.C:347
 PilotAnalysis.C:348
 PilotAnalysis.C:349
 PilotAnalysis.C:350
 PilotAnalysis.C:351
 PilotAnalysis.C:352
 PilotAnalysis.C:353
 PilotAnalysis.C:354
 PilotAnalysis.C:355
 PilotAnalysis.C:356
 PilotAnalysis.C:357
 PilotAnalysis.C:358
 PilotAnalysis.C:359
 PilotAnalysis.C:360
 PilotAnalysis.C:361
 PilotAnalysis.C:362
 PilotAnalysis.C:363
 PilotAnalysis.C:364
 PilotAnalysis.C:365
 PilotAnalysis.C:366
 PilotAnalysis.C:367
 PilotAnalysis.C:368
 PilotAnalysis.C:369
 PilotAnalysis.C:370
 PilotAnalysis.C:371
 PilotAnalysis.C:372
 PilotAnalysis.C:373
 PilotAnalysis.C:374
 PilotAnalysis.C:375
 PilotAnalysis.C:376
 PilotAnalysis.C:377
 PilotAnalysis.C:378
 PilotAnalysis.C:379
 PilotAnalysis.C:380
 PilotAnalysis.C:381
 PilotAnalysis.C:382
 PilotAnalysis.C:383
 PilotAnalysis.C:384
 PilotAnalysis.C:385
 PilotAnalysis.C:386
 PilotAnalysis.C:387
 PilotAnalysis.C:388
 PilotAnalysis.C:389
 PilotAnalysis.C:390
 PilotAnalysis.C:391
 PilotAnalysis.C:392
 PilotAnalysis.C:393
 PilotAnalysis.C:394
 PilotAnalysis.C:395
 PilotAnalysis.C:396
 PilotAnalysis.C:397
 PilotAnalysis.C:398
 PilotAnalysis.C:399
 PilotAnalysis.C:400
 PilotAnalysis.C:401
 PilotAnalysis.C:402
 PilotAnalysis.C:403
 PilotAnalysis.C:404
 PilotAnalysis.C:405
 PilotAnalysis.C:406
 PilotAnalysis.C:407
 PilotAnalysis.C:408
 PilotAnalysis.C:409
 PilotAnalysis.C:410
 PilotAnalysis.C:411
 PilotAnalysis.C:412
 PilotAnalysis.C:413
 PilotAnalysis.C:414
 PilotAnalysis.C:415
 PilotAnalysis.C:416
 PilotAnalysis.C:417
 PilotAnalysis.C:418
 PilotAnalysis.C:419
 PilotAnalysis.C:420
 PilotAnalysis.C:421
 PilotAnalysis.C:422
 PilotAnalysis.C:423
 PilotAnalysis.C:424
 PilotAnalysis.C:425
 PilotAnalysis.C:426
 PilotAnalysis.C:427
 PilotAnalysis.C:428
 PilotAnalysis.C:429
 PilotAnalysis.C:430
 PilotAnalysis.C:431
 PilotAnalysis.C:432
 PilotAnalysis.C:433
 PilotAnalysis.C:434
 PilotAnalysis.C:435
 PilotAnalysis.C:436
 PilotAnalysis.C:437
 PilotAnalysis.C:438
 PilotAnalysis.C:439
 PilotAnalysis.C:440
 PilotAnalysis.C:441
 PilotAnalysis.C:442
 PilotAnalysis.C:443
 PilotAnalysis.C:444
 PilotAnalysis.C:445
 PilotAnalysis.C:446
 PilotAnalysis.C:447
 PilotAnalysis.C:448
 PilotAnalysis.C:449
 PilotAnalysis.C:450
 PilotAnalysis.C:451
 PilotAnalysis.C:452
 PilotAnalysis.C:453
 PilotAnalysis.C:454
 PilotAnalysis.C:455
 PilotAnalysis.C:456
 PilotAnalysis.C:457
 PilotAnalysis.C:458
 PilotAnalysis.C:459
 PilotAnalysis.C:460
 PilotAnalysis.C:461
 PilotAnalysis.C:462
 PilotAnalysis.C:463
 PilotAnalysis.C:464
 PilotAnalysis.C:465
 PilotAnalysis.C:466
 PilotAnalysis.C:467
 PilotAnalysis.C:468
 PilotAnalysis.C:469
 PilotAnalysis.C:470
 PilotAnalysis.C:471
 PilotAnalysis.C:472
 PilotAnalysis.C:473
 PilotAnalysis.C:474
 PilotAnalysis.C:475
 PilotAnalysis.C:476
 PilotAnalysis.C:477
 PilotAnalysis.C:478
 PilotAnalysis.C:479
 PilotAnalysis.C:480
 PilotAnalysis.C:481
 PilotAnalysis.C:482
 PilotAnalysis.C:483
 PilotAnalysis.C:484
 PilotAnalysis.C:485
 PilotAnalysis.C:486
 PilotAnalysis.C:487
 PilotAnalysis.C:488
 PilotAnalysis.C:489
 PilotAnalysis.C:490
 PilotAnalysis.C:491
 PilotAnalysis.C:492
 PilotAnalysis.C:493
 PilotAnalysis.C:494
 PilotAnalysis.C:495
 PilotAnalysis.C:496
 PilotAnalysis.C:497
 PilotAnalysis.C:498
 PilotAnalysis.C:499
 PilotAnalysis.C:500
 PilotAnalysis.C:501
 PilotAnalysis.C:502
 PilotAnalysis.C:503
 PilotAnalysis.C:504
 PilotAnalysis.C:505
 PilotAnalysis.C:506
 PilotAnalysis.C:507
 PilotAnalysis.C:508
 PilotAnalysis.C:509
 PilotAnalysis.C:510
 PilotAnalysis.C:511
 PilotAnalysis.C:512
 PilotAnalysis.C:513
 PilotAnalysis.C:514
 PilotAnalysis.C:515
 PilotAnalysis.C:516
 PilotAnalysis.C:517
 PilotAnalysis.C:518
 PilotAnalysis.C:519
 PilotAnalysis.C:520
 PilotAnalysis.C:521
 PilotAnalysis.C:522
 PilotAnalysis.C:523
 PilotAnalysis.C:524
 PilotAnalysis.C:525
 PilotAnalysis.C:526
 PilotAnalysis.C:527
 PilotAnalysis.C:528
 PilotAnalysis.C:529
 PilotAnalysis.C:530
 PilotAnalysis.C:531
 PilotAnalysis.C:532
 PilotAnalysis.C:533
 PilotAnalysis.C:534
 PilotAnalysis.C:535
 PilotAnalysis.C:536
 PilotAnalysis.C:537
 PilotAnalysis.C:538
 PilotAnalysis.C:539
 PilotAnalysis.C:540
 PilotAnalysis.C:541
 PilotAnalysis.C:542
 PilotAnalysis.C:543
 PilotAnalysis.C:544
 PilotAnalysis.C:545
 PilotAnalysis.C:546
 PilotAnalysis.C:547
 PilotAnalysis.C:548
 PilotAnalysis.C:549
 PilotAnalysis.C:550
 PilotAnalysis.C:551
 PilotAnalysis.C:552
 PilotAnalysis.C:553
 PilotAnalysis.C:554
 PilotAnalysis.C:555
 PilotAnalysis.C:556
 PilotAnalysis.C:557
 PilotAnalysis.C:558
 PilotAnalysis.C:559
 PilotAnalysis.C:560
 PilotAnalysis.C:561
 PilotAnalysis.C:562
 PilotAnalysis.C:563
 PilotAnalysis.C:564
 PilotAnalysis.C:565
 PilotAnalysis.C:566
 PilotAnalysis.C:567
 PilotAnalysis.C:568
 PilotAnalysis.C:569
 PilotAnalysis.C:570
 PilotAnalysis.C:571
 PilotAnalysis.C:572
 PilotAnalysis.C:573
 PilotAnalysis.C:574
 PilotAnalysis.C:575
 PilotAnalysis.C:576
 PilotAnalysis.C:577
 PilotAnalysis.C:578
 PilotAnalysis.C:579
 PilotAnalysis.C:580
 PilotAnalysis.C:581
 PilotAnalysis.C:582
 PilotAnalysis.C:583
 PilotAnalysis.C:584
 PilotAnalysis.C:585
 PilotAnalysis.C:586
 PilotAnalysis.C:587
 PilotAnalysis.C:588
 PilotAnalysis.C:589
 PilotAnalysis.C:590
 PilotAnalysis.C:591
 PilotAnalysis.C:592
 PilotAnalysis.C:593
 PilotAnalysis.C:594
 PilotAnalysis.C:595
 PilotAnalysis.C:596
 PilotAnalysis.C:597