ROOT logo
 /********************************************
   Macro to launch TOF QA task on ESDs data

Author: fbellini@cern.ch
Last update: 18 october 2012
*********************************************/
class AliAnalysisGrid;
TString analysisMode = "grid"; // "local" or "grid" - needs to be "grid" for plugin test mode
Bool_t useAlienPlugin=kTRUE; //use kFALSE for local analysis

//input dataset
Int_t runList[2]={186084,186162};
Int_t runNmin=0;
Int_t runNmax=2;
Int_t year = 2012;
TString prod = "LHC12d";
TString myRecPass="cpass1";
TString myQAfileSuffix="_Barrel";
Bool_t isMC = kFALSE;
TString gridUser="fbellini";
Int_t gridNtestFiles = 1;

TString prefix="_";

//do not change! to be set by SetupIO()
TString myGridDataDir="";
TString myDataPattern="";
TString myWorkDir;
TString myOutDir;
TString myJDLname;
TString myExecutableName;
TString myMacroName;

//----------------------------------------------------------------------
void SetupIO(TString filesPrefix = "")
{
  //Setup I/O paths and file names
  myGridDataDir = "/alice";

  myWorkDir = "QA_pp2012";
  myOutDir = Form("%s", prod.Data()) ;
  myJDLname = Form("job_Run%s", myWorkDir.Data());
  myExecutableName = Form("Run%s", myWorkDir.Data());
  myMacroName = Form("Run%s", myWorkDir.Data());

  if (isMC) myDataPattern="*AliESDs.root";
  else myDataPattern=Form("%s/*AliESDs%s.root",myRecPass.Data(),myQAfileSuffix.Data());
  myOutDir.Append(Form("_%s",myRecPass.Data()));
  myJDLname.Append(Form("_%s",myRecPass.Data()));
  myExecutableName.Append(Form("_%s",myRecPass.Data()));
  myMacroName.Append(Form("_%s",myRecPass.Data()));

  if (isMC) {
    myGridDataDir.Append("/sim");
    myWorkDir.Append("_MC");
    myJDLname.Append("_MC");
    myExecutableName.Append("_MC");
    myMacroName.Append("_MC");
  } else {
    myGridDataDir.Append(Form("/data/%i",year));
  }
  myGridDataDir.Append(Form("/%s",prod.Data()));
  myOutDir.Append(filesPrefix.Data());
  myExecutableName.Append(Form("%s.sh",filesPrefix.Data()));
  myMacroName.Append(Form("%s.C",filesPrefix.Data()));
  myJDLname.Append(Form("_run%i-%i%s.jdl",runNmin,runNmax,filesPrefix.Data()));
  
  Printf("=========================================  Setup I/O:");
  Printf("myGridDataDir = %s", myGridDataDir.Data());
  Printf("myDataPattern = %s", myDataPattern.Data());
  Printf("myWorkDir = %s", myWorkDir.Data());
  Printf("myOutDir = %s", myOutDir.Data());
  Printf("myJDLname = %s", myJDLname.Data());
  Printf("myExecutableName = %s", myExecutableName.Data());
  Printf("myMacroName = %s", myMacroName.Data());
  Printf("=======================================================\n");
}
//----------------------------------------------------------------------
void SetGridUser(TString username){
  if (username)
    gridUser = username.Data();
  return;
}
//----------------------------------------------------------------------
void SetGridNtestFiles(Int_t nfiles = 1){
  if (nfiles<1) gridNtestFiles=1;
  else gridNtestFiles = nfiles;
  return;
}
//----------------------------------------------------------------------
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("libCORRFW");
  gSystem->Load("libTENDER");
  gSystem->Load("libPWGPP.so");      
}
//----------------------------------------------------------------------
void RunAnalysisTOFqaGrid(TString pluginmode="test", Int_t ntestfiles = 10, TString filesPrefix = "", TString gridUser="fbellini") 
{
  LoadLibraries();  
  SetGridUser(gridUser.Data());
  SetGridNtestFiles(ntestfiles);
  SetupIO(filesPrefix.Data());
  if(analysisMode=="grid") {
    TGrid::Connect("alien://");
  } 

  Long64_t nentries=100000, firstentry=0;
  Bool_t readMC = kFALSE;
 
  if(useAlienPlugin) {  
    AliAnalysisGrid *alienHandler = CreateAlienHandler(pluginmode);
    if(!alienHandler) return;
  }
  
  // Prepare input chain
  TChain *chainESD = 0;
  if(!useAlienPlugin) {
    chainESD=new TChain("esdTree");
    chainESD->Add("AliESDs.root"); //used to test locally - modify with local path files
  }
  
  AliAnalysisManager *mgr  = new AliAnalysisManager("My Manager","My Manager");
  mgr->SetDebugLevel(1);
  if(useAlienPlugin) mgr->SetGridHandler(alienHandler);
  AliInputEventHandler *esdH = new AliESDInputHandler();
  mgr->SetInputEventHandler(esdH);

  //-------------------------------------------------------------------
  //-------------------------------------------------------------------
  // Analysis tasks (wagons of the train)   
  //
  TString taskName;
  
  //Wagon for physics event selection
  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
  AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
  AliPhysicsSelection* physSel = physSelTask->GetPhysicsSelection();
  if (isMC)physSelTask->GetPhysicsSelection()->SetAnalyzeMC();
  //physSel->AddBackgroundIdentification(new AliBackgroundSelection());
   
  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TOF/AddTaskTOFQA.C");
  AliAnalysisTaskTOFqa *TOFqa = (AliAnalysisTaskTOFqa*) AddTaskTOFQA(kTRUE);
  
  if(readMC) {
    AliMCEventHandler  *mcH = new AliMCEventHandler();
    mgr->SetMCtruthEventHandler(mcH); 
  }
  //
  // Run the analysis
  //    
  if(chainESD) printf("CHAIN HAS %d ENTRIES\n",(Int_t)chainESD->GetEntries());
  
  if(!mgr->InitAnalysis()) return;
  mgr->PrintStatus();
  if(analysisMode=="grid" && !useAlienPlugin) analysisMode="local";
  mgr->StartAnalysis(analysisMode.Data(),chainESD,nentries,firstentry);
  
  return;
}

//_____________________________________________________________________________
AliAnalysisGrid* CreateAlienHandler(TString pluginmode="full")
{

  AliAnalysisAlien *plugin = new AliAnalysisAlien();  
  // Set the run mode (can be "full", "test", "offline", "submit" or "terminate")
  plugin->SetRunMode(pluginmode.Data());
  plugin->SetUser(gridUser.Data()); //MODIFICA
  plugin->SetNtestFiles(gridNtestFiles);
  // Set versions of used packages
  plugin->SetAPIVersion("V1.1x");
  plugin->SetROOTVersion("v5-34-02"); //MODIFICA
  plugin->SetAliROOTVersion("v5-03-70-AN"); //MODIFICA
  //Set user grid output dir
  plugin->SetGridWorkingDir(myWorkDir.Data()); 
  plugin->SetGridOutputDir(myOutDir.Data()); 
  plugin->SetCheckCopy(kTRUE);
  plugin->SetGridDataDir(myGridDataDir.Data());
  plugin->SetDataPattern(myDataPattern.Data());
  if (!isMC) plugin->SetRunPrefix("000");
  for (Int_t irun=runNmin;irun<runNmax;irun++){
    plugin->AddRunNumber((Int_t )runList[irun]);
  }
  plugin->SetOutputToRunNo(1);
  plugin->SetNrunsPerMaster(1);
  plugin->SetExecutableCommand("aliroot -b -q");
  plugin->SetOutputToRunNo(1);
  plugin->SetNrunsPerMaster(1);

  plugin->AddIncludePath("-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");   
  plugin->SetAdditionalLibs("libANALYSIS.so libANALYSISalice.so libCORRFW.so libTENDER.so libPWGPP.so ");//libTRDbase.so libTRDrec.so
  plugin->SetDefaultOutputs(kTRUE);
  plugin->SetAnalysisMacro("AnalysisTOFqaSigned.C"); //MODIFICA se vuoi
  plugin->SetExecutable("analysisTOFqaSigned.sh"); //MODIFICA se vuoi
  plugin->SetSplitMaxInputFileNumber(50);
  plugin->SetMaxInitFailed(15);
  plugin->SetTTL(80000);
  plugin->SetInputFormat("xml-single");
  plugin->SetJDLName("TaskAnalysisTOFqaSigned.jdl"); //MODIFICA se vuoi
  plugin->SetSplitMode("se");
  return plugin;
}

//-----------------------------------------------------------------------------
TChain *CreateESDChain(TString esdpath=".",Int_t ifirst=-1,Int_t ilast=-1) 
{
  TChain *chainESD = new TChain("esdTree");
  if(ifirst<0) {
    chainESD->Add("AliESDs.root");
  } else {
    for(Int_t i=ifirst; i<=ilast; i++) {
      TString esdfile=esdpath; esdfile+=i; esdfile.Append("/AliESDs.root");
      chainESD->Add(esdfile.Data());
    }
  }
  
  return chainESD;
}
 RunAnalysisTOFqaGrid.C:1
 RunAnalysisTOFqaGrid.C:2
 RunAnalysisTOFqaGrid.C:3
 RunAnalysisTOFqaGrid.C:4
 RunAnalysisTOFqaGrid.C:5
 RunAnalysisTOFqaGrid.C:6
 RunAnalysisTOFqaGrid.C:7
 RunAnalysisTOFqaGrid.C:8
 RunAnalysisTOFqaGrid.C:9
 RunAnalysisTOFqaGrid.C:10
 RunAnalysisTOFqaGrid.C:11
 RunAnalysisTOFqaGrid.C:12
 RunAnalysisTOFqaGrid.C:13
 RunAnalysisTOFqaGrid.C:14
 RunAnalysisTOFqaGrid.C:15
 RunAnalysisTOFqaGrid.C:16
 RunAnalysisTOFqaGrid.C:17
 RunAnalysisTOFqaGrid.C:18
 RunAnalysisTOFqaGrid.C:19
 RunAnalysisTOFqaGrid.C:20
 RunAnalysisTOFqaGrid.C:21
 RunAnalysisTOFqaGrid.C:22
 RunAnalysisTOFqaGrid.C:23
 RunAnalysisTOFqaGrid.C:24
 RunAnalysisTOFqaGrid.C:25
 RunAnalysisTOFqaGrid.C:26
 RunAnalysisTOFqaGrid.C:27
 RunAnalysisTOFqaGrid.C:28
 RunAnalysisTOFqaGrid.C:29
 RunAnalysisTOFqaGrid.C:30
 RunAnalysisTOFqaGrid.C:31
 RunAnalysisTOFqaGrid.C:32
 RunAnalysisTOFqaGrid.C:33
 RunAnalysisTOFqaGrid.C:34
 RunAnalysisTOFqaGrid.C:35
 RunAnalysisTOFqaGrid.C:36
 RunAnalysisTOFqaGrid.C:37
 RunAnalysisTOFqaGrid.C:38
 RunAnalysisTOFqaGrid.C:39
 RunAnalysisTOFqaGrid.C:40
 RunAnalysisTOFqaGrid.C:41
 RunAnalysisTOFqaGrid.C:42
 RunAnalysisTOFqaGrid.C:43
 RunAnalysisTOFqaGrid.C:44
 RunAnalysisTOFqaGrid.C:45
 RunAnalysisTOFqaGrid.C:46
 RunAnalysisTOFqaGrid.C:47
 RunAnalysisTOFqaGrid.C:48
 RunAnalysisTOFqaGrid.C:49
 RunAnalysisTOFqaGrid.C:50
 RunAnalysisTOFqaGrid.C:51
 RunAnalysisTOFqaGrid.C:52
 RunAnalysisTOFqaGrid.C:53
 RunAnalysisTOFqaGrid.C:54
 RunAnalysisTOFqaGrid.C:55
 RunAnalysisTOFqaGrid.C:56
 RunAnalysisTOFqaGrid.C:57
 RunAnalysisTOFqaGrid.C:58
 RunAnalysisTOFqaGrid.C:59
 RunAnalysisTOFqaGrid.C:60
 RunAnalysisTOFqaGrid.C:61
 RunAnalysisTOFqaGrid.C:62
 RunAnalysisTOFqaGrid.C:63
 RunAnalysisTOFqaGrid.C:64
 RunAnalysisTOFqaGrid.C:65
 RunAnalysisTOFqaGrid.C:66
 RunAnalysisTOFqaGrid.C:67
 RunAnalysisTOFqaGrid.C:68
 RunAnalysisTOFqaGrid.C:69
 RunAnalysisTOFqaGrid.C:70
 RunAnalysisTOFqaGrid.C:71
 RunAnalysisTOFqaGrid.C:72
 RunAnalysisTOFqaGrid.C:73
 RunAnalysisTOFqaGrid.C:74
 RunAnalysisTOFqaGrid.C:75
 RunAnalysisTOFqaGrid.C:76
 RunAnalysisTOFqaGrid.C:77
 RunAnalysisTOFqaGrid.C:78
 RunAnalysisTOFqaGrid.C:79
 RunAnalysisTOFqaGrid.C:80
 RunAnalysisTOFqaGrid.C:81
 RunAnalysisTOFqaGrid.C:82
 RunAnalysisTOFqaGrid.C:83
 RunAnalysisTOFqaGrid.C:84
 RunAnalysisTOFqaGrid.C:85
 RunAnalysisTOFqaGrid.C:86
 RunAnalysisTOFqaGrid.C:87
 RunAnalysisTOFqaGrid.C:88
 RunAnalysisTOFqaGrid.C:89
 RunAnalysisTOFqaGrid.C:90
 RunAnalysisTOFqaGrid.C:91
 RunAnalysisTOFqaGrid.C:92
 RunAnalysisTOFqaGrid.C:93
 RunAnalysisTOFqaGrid.C:94
 RunAnalysisTOFqaGrid.C:95
 RunAnalysisTOFqaGrid.C:96
 RunAnalysisTOFqaGrid.C:97
 RunAnalysisTOFqaGrid.C:98
 RunAnalysisTOFqaGrid.C:99
 RunAnalysisTOFqaGrid.C:100
 RunAnalysisTOFqaGrid.C:101
 RunAnalysisTOFqaGrid.C:102
 RunAnalysisTOFqaGrid.C:103
 RunAnalysisTOFqaGrid.C:104
 RunAnalysisTOFqaGrid.C:105
 RunAnalysisTOFqaGrid.C:106
 RunAnalysisTOFqaGrid.C:107
 RunAnalysisTOFqaGrid.C:108
 RunAnalysisTOFqaGrid.C:109
 RunAnalysisTOFqaGrid.C:110
 RunAnalysisTOFqaGrid.C:111
 RunAnalysisTOFqaGrid.C:112
 RunAnalysisTOFqaGrid.C:113
 RunAnalysisTOFqaGrid.C:114
 RunAnalysisTOFqaGrid.C:115
 RunAnalysisTOFqaGrid.C:116
 RunAnalysisTOFqaGrid.C:117
 RunAnalysisTOFqaGrid.C:118
 RunAnalysisTOFqaGrid.C:119
 RunAnalysisTOFqaGrid.C:120
 RunAnalysisTOFqaGrid.C:121
 RunAnalysisTOFqaGrid.C:122
 RunAnalysisTOFqaGrid.C:123
 RunAnalysisTOFqaGrid.C:124
 RunAnalysisTOFqaGrid.C:125
 RunAnalysisTOFqaGrid.C:126
 RunAnalysisTOFqaGrid.C:127
 RunAnalysisTOFqaGrid.C:128
 RunAnalysisTOFqaGrid.C:129
 RunAnalysisTOFqaGrid.C:130
 RunAnalysisTOFqaGrid.C:131
 RunAnalysisTOFqaGrid.C:132
 RunAnalysisTOFqaGrid.C:133
 RunAnalysisTOFqaGrid.C:134
 RunAnalysisTOFqaGrid.C:135
 RunAnalysisTOFqaGrid.C:136
 RunAnalysisTOFqaGrid.C:137
 RunAnalysisTOFqaGrid.C:138
 RunAnalysisTOFqaGrid.C:139
 RunAnalysisTOFqaGrid.C:140
 RunAnalysisTOFqaGrid.C:141
 RunAnalysisTOFqaGrid.C:142
 RunAnalysisTOFqaGrid.C:143
 RunAnalysisTOFqaGrid.C:144
 RunAnalysisTOFqaGrid.C:145
 RunAnalysisTOFqaGrid.C:146
 RunAnalysisTOFqaGrid.C:147
 RunAnalysisTOFqaGrid.C:148
 RunAnalysisTOFqaGrid.C:149
 RunAnalysisTOFqaGrid.C:150
 RunAnalysisTOFqaGrid.C:151
 RunAnalysisTOFqaGrid.C:152
 RunAnalysisTOFqaGrid.C:153
 RunAnalysisTOFqaGrid.C:154
 RunAnalysisTOFqaGrid.C:155
 RunAnalysisTOFqaGrid.C:156
 RunAnalysisTOFqaGrid.C:157
 RunAnalysisTOFqaGrid.C:158
 RunAnalysisTOFqaGrid.C:159
 RunAnalysisTOFqaGrid.C:160
 RunAnalysisTOFqaGrid.C:161
 RunAnalysisTOFqaGrid.C:162
 RunAnalysisTOFqaGrid.C:163
 RunAnalysisTOFqaGrid.C:164
 RunAnalysisTOFqaGrid.C:165
 RunAnalysisTOFqaGrid.C:166
 RunAnalysisTOFqaGrid.C:167
 RunAnalysisTOFqaGrid.C:168
 RunAnalysisTOFqaGrid.C:169
 RunAnalysisTOFqaGrid.C:170
 RunAnalysisTOFqaGrid.C:171
 RunAnalysisTOFqaGrid.C:172
 RunAnalysisTOFqaGrid.C:173
 RunAnalysisTOFqaGrid.C:174
 RunAnalysisTOFqaGrid.C:175
 RunAnalysisTOFqaGrid.C:176
 RunAnalysisTOFqaGrid.C:177
 RunAnalysisTOFqaGrid.C:178
 RunAnalysisTOFqaGrid.C:179
 RunAnalysisTOFqaGrid.C:180
 RunAnalysisTOFqaGrid.C:181
 RunAnalysisTOFqaGrid.C:182
 RunAnalysisTOFqaGrid.C:183
 RunAnalysisTOFqaGrid.C:184
 RunAnalysisTOFqaGrid.C:185
 RunAnalysisTOFqaGrid.C:186
 RunAnalysisTOFqaGrid.C:187
 RunAnalysisTOFqaGrid.C:188
 RunAnalysisTOFqaGrid.C:189
 RunAnalysisTOFqaGrid.C:190
 RunAnalysisTOFqaGrid.C:191
 RunAnalysisTOFqaGrid.C:192
 RunAnalysisTOFqaGrid.C:193
 RunAnalysisTOFqaGrid.C:194
 RunAnalysisTOFqaGrid.C:195
 RunAnalysisTOFqaGrid.C:196
 RunAnalysisTOFqaGrid.C:197
 RunAnalysisTOFqaGrid.C:198
 RunAnalysisTOFqaGrid.C:199
 RunAnalysisTOFqaGrid.C:200
 RunAnalysisTOFqaGrid.C:201
 RunAnalysisTOFqaGrid.C:202
 RunAnalysisTOFqaGrid.C:203
 RunAnalysisTOFqaGrid.C:204
 RunAnalysisTOFqaGrid.C:205
 RunAnalysisTOFqaGrid.C:206
 RunAnalysisTOFqaGrid.C:207
 RunAnalysisTOFqaGrid.C:208
 RunAnalysisTOFqaGrid.C:209
 RunAnalysisTOFqaGrid.C:210
 RunAnalysisTOFqaGrid.C:211
 RunAnalysisTOFqaGrid.C:212
 RunAnalysisTOFqaGrid.C:213
 RunAnalysisTOFqaGrid.C:214
 RunAnalysisTOFqaGrid.C:215
 RunAnalysisTOFqaGrid.C:216
 RunAnalysisTOFqaGrid.C:217
 RunAnalysisTOFqaGrid.C:218
 RunAnalysisTOFqaGrid.C:219
 RunAnalysisTOFqaGrid.C:220
 RunAnalysisTOFqaGrid.C:221
 RunAnalysisTOFqaGrid.C:222
 RunAnalysisTOFqaGrid.C:223