ROOT logo
runLRCAnalysis(const char* mode = "GRID", const char* inputName= "wn.xml",Bool_t LoadTaskLocal=kTRUE) {
// This macro runs AliAnalysisTaskLRC in three modes : "Local" , "Interactive", "PROOF", "GRID" 
// ESD-only
// inputName refers to :
// "Local" - file with plane-text list of filenames 
// "Intaractive","GRID" - XML collection name
// "PROOF" - dataset name 
//  ---------------------------------------------------------
// This macro needs AliRoot-v4-17 or later 
// and macro AddTaskLRC.C in workdir

// For PROOF run PARS(ANALYSISalice.par  ANALYSIS.par  AOD.par  ESD.par  PWGCFebye.par  
// STEERBase.par ) are to be in workdir.


// Author : Andrey Ivanov , St.Peterburg State University
// Email: Andrey.Ivanov@cern.ch

// Version line : 3.6
// Version 3.6.6


if(mode!="Local" && mode!="Interactive" && mode!="PROOF" && mode!="GRID")
{
cout<<" ! Mode must be : Local , Interactive, PROOF, GRID \n";
cout<<" ! Unknown mode :"<<mode<< " \n";
return;
}

if(mode=="Local")runLRCLocal(inputName,LoadTaskLocal);
if(mode=="PROOF")runLRCProof(inputName,LoadTaskLocal);
if(mode=="Interactive")runLRCInteractive(inputName,LoadTaskLocal);
if(mode=="GRID")runLRCInteractive(inputName,LoadTaskLocal);


}

void LoadAnalysisLibs(Bool_t LoadTaskLocal=kFALSE)
{
  cout<<"  # Loadnig libs...\n";
 

 gSystem->Load("libSTEERBase.so");
  gSystem->Load("libESD.so");
  gSystem->Load("libAOD.so");
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");
  if(!LoadTaskLocal){
	gSystem->Load("libEventMixing.so");
	gSystem->Load("libPWGCFebye.so");
  }
  
  //___________Compile analysis task using AClic____________//
 
  if(LoadTaskLocal){
  	gROOT->ProcessLine(".include $ALICE_ROOT/include");
	cout<<"  # Compiling AliLRCBase\n";
	gROOT->LoadMacro("AliLRCBase.cxx+g");	
	cout<<"  # Compiling AliLRCProcess\n";
	gROOT->LoadMacro("AliLRCProcess.cxx+g");
	gROOT->LoadMacro("AliRidgeAnalyser.cxx+g");
	cout<<"  # Compiling LRC analysis task\n";
  	gROOT->LoadMacro("AliAnalysisTaskLRC.cxx+g");
	}

}

Bool_t CreateLRCManager(char* name="LRCmanager",Bool_t runKine=kFALSE,Bool_t runAOD=kFALSE)
{
  //____________________________________________//
  // Make the analysis manager
  AliAnalysisManager *mgr = new AliAnalysisManager(name);
  AliESDInputHandler* esdH = new AliESDInputHandler();
  mgr->SetInputEventHandler(esdH);  
  if(runKine){
  	AliMCEventHandler* handler = new AliMCEventHandler;
  	mgr->SetMCtruthEventHandler(handler);
  }
  
  AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("cchain1",TChain::Class(),AliAnalysisManager::kInputContainer);
  
  mgr->SetCommonFileName("Test.LRC.root");
  
  

 return kTRUE;

}

void runLRCLocal(const char* inputName= "ESDs.lst",Bool_t LoadTaskLocal=kFALSE,Bool_t runKine=kFALSE,Bool_t runAOD=kFALSE) {
  printf("  ------------------------------------------\n");
  printf("  # LRC local run manager \n");
  cout<<"  # Task from :"<<gSystem->pwd()<<"\n";
  cout<<"  # Input list :"<<inputName<<"\n";
  
  
  TStopwatch timer;
  timer.Start();
  
  LoadAnalysisLibs(LoadTaskLocal);
 
  if (!CreateLRCManager("LocalLRCTest",runKine,runAOD)) return;
  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
  AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();

  gROOT->LoadMacro("AddTaskLRC.C");
  AddTaskLRC(runKine);
  
 
  
  gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C");
  TChain* chain = CreateESDChain(inputName);
  
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  
  if (!mgr->InitAnalysis()) return;
  mgr->PrintStatus();
  
  mgr->StartAnalysis("local",chain);

  timer.Stop();
  timer.Print();
}

void runLRCProof(const char* inputName= "/COMMON/COMMON/tutorial_small",Bool_t LoadTaskLocal=kFALSE,const char* proofLink="anivanov@alice-caf.cern.ch",Bool_t runKine=kFALSE,Bool_t runAOD=kFALSE)
{
  printf("  ------------------------------------------\n");
  printf(" # LRC PROOF run manager \n");
  cout<<"  # Task from :"<<gSystem->pwd()<<"\n";
  cout<<"  # Dataset :"<<inputName<<"\n";


	TProof::Open(proofLink);
	//TProof::Open("anivanov@localhost");.

	
  cout<<"  # Loadnig libs...\n";



gProof->EnablePackage("VO_ALICE@AliRoot::v4-20-13-AN");

  // Use AliRoot includes to compile our task
  if(LoadTaskLocal){
 //	gROOT->ProcessLine(".include $ALICE_ROOT/include");
	cout<<"  # Compiling AliLRCBase\n";
	gProof->Load("AliLRCBase.cxx+g");	
	cout<<"  # Compiling AliLRCProcess\n";
	gProof->Load("AliLRCProcess.cxx+g");
	gProof->Load("AliLRCAnalyser.cxx+g");
  	cout<<"  # Compiling analysis task\n";
  	gProof->Load("AliAnalysisTaskLRC.cxx+g");   
  }

  if (!CreateLRCManager("ProofLRCTest",runKine,runAOD)) return;
  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
  AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
   
  gROOT->LoadMacro("AddTaskLRC.C");
  AddTaskLRC(runKine);

  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr->InitAnalysis()) return;
  mgr->PrintStatus();
  mgr->StartAnalysis("proof", inputName);
};

void runLRCInteractive(const char* inputName= "wn.xml",Bool_t LoadTaskLocal=kFALSE,Bool_t runKine=kFALSE,Bool_t runAOD=kFALSE) {
  
  printf("  ------------------------------------------\n");
  printf(" # LRC local-interactive/GRID run manager \n");
  cout<<"  # Task from :"<<gSystem->pwd()<<"\n";
  cout<<"  # Collection :"<<inputName<<"\n";

  TStopwatch timer;
  timer.Start();
  
  cout<<"*** Connect to AliEn ***\n";
  TGrid::Connect("alien://","anivanov");

  LoadAnalysisLibs(LoadTaskLocal);
  
  if (!CreateLRCManager("IntLRCTest",runKine,runAOD)) return;
  gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
  AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection();
 
  
  gROOT->LoadMacro("AddTaskLRC.C");
  AddTaskLRC(runKine);

     TAlienCollection * myCollection = 
	new TAlienCollection("wn.xml",100000) ; 
    if (!myCollection) { 
	cout << "XML collection file: " << xmlFileName << " not found" << endl;
	return;
    }

    TChain* chain = new TChain("esdTree");
    
    cout << "Preparing the file list" << endl; 
    myCollection->Reset() ; 
    while ( myCollection->Next() ) {
	cout << "Adding ESD file: " << myCollection->GetTURL("") << endl; 
	chain->Add(myCollection->GetTURL("")) ; 
    }
    
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr->InitAnalysis()) return;
  mgr->PrintStatus();
  mgr->StartAnalysis("local",chain);

  timer.Stop();
  timer.Print();
}

Int_t SetupPar(const char* pararchivename) {
  ///////////////////
  // Setup PAR File//
  ///////////////////
  if (pararchivename) {
    char processline[1024];
    TString base = gSystem->BaseName(pararchivename);
    TString dir  = gSystem->DirName(pararchivename);
    TString ocwd = gSystem->WorkingDirectory();
    // Move to dir where the par files are and unpack
    gSystem->ChangeDirectory(dir.Data());
    sprintf(processline,".! tar xvzf %s.par",base.Data());
    gROOT->ProcessLine(processline);
    // Move to par folder
    gSystem->ChangeDirectory(base.Data());
                                                                                                                                               
    // check for BUILD.sh and execute
    if (!gSystem->AccessPathName("PROOF-INF/BUILD.sh")) {
      printf("*******************************\n");
      printf("*** Building PAR archive    ***\n");
      printf("*******************************\n");
                                                                                                                                               
      if (gSystem->Exec("PROOF-INF/BUILD.sh")) {
        Error("runAnalysis","Cannot Build the PAR Archive! - Abort!");
        return -1;
      }
    }
    // check for SETUP.C and execute
    if (!gSystem->AccessPathName("PROOF-INF/SETUP.C")) {
      printf("*******************************\n");
      printf("*** Setup PAR archive       ***\n");
      printf("*******************************\n");
      // If dir not empty, set the full include path
      if (dir.Length()) {
         sprintf(processline, ".include %s", pararchivename);
         gROOT->ProcessLine(processline); 
      }   
      gROOT->Macro("PROOF-INF/SETUP.C");
    }
                                                                                                                                               
    gSystem->ChangeDirectory(ocwd.Data());
  }                                                                                                                                               
  return 1;
}
 runLRCAnalysis.C:1
 runLRCAnalysis.C:2
 runLRCAnalysis.C:3
 runLRCAnalysis.C:4
 runLRCAnalysis.C:5
 runLRCAnalysis.C:6
 runLRCAnalysis.C:7
 runLRCAnalysis.C:8
 runLRCAnalysis.C:9
 runLRCAnalysis.C:10
 runLRCAnalysis.C:11
 runLRCAnalysis.C:12
 runLRCAnalysis.C:13
 runLRCAnalysis.C:14
 runLRCAnalysis.C:15
 runLRCAnalysis.C:16
 runLRCAnalysis.C:17
 runLRCAnalysis.C:18
 runLRCAnalysis.C:19
 runLRCAnalysis.C:20
 runLRCAnalysis.C:21
 runLRCAnalysis.C:22
 runLRCAnalysis.C:23
 runLRCAnalysis.C:24
 runLRCAnalysis.C:25
 runLRCAnalysis.C:26
 runLRCAnalysis.C:27
 runLRCAnalysis.C:28
 runLRCAnalysis.C:29
 runLRCAnalysis.C:30
 runLRCAnalysis.C:31
 runLRCAnalysis.C:32
 runLRCAnalysis.C:33
 runLRCAnalysis.C:34
 runLRCAnalysis.C:35
 runLRCAnalysis.C:36
 runLRCAnalysis.C:37
 runLRCAnalysis.C:38
 runLRCAnalysis.C:39
 runLRCAnalysis.C:40
 runLRCAnalysis.C:41
 runLRCAnalysis.C:42
 runLRCAnalysis.C:43
 runLRCAnalysis.C:44
 runLRCAnalysis.C:45
 runLRCAnalysis.C:46
 runLRCAnalysis.C:47
 runLRCAnalysis.C:48
 runLRCAnalysis.C:49
 runLRCAnalysis.C:50
 runLRCAnalysis.C:51
 runLRCAnalysis.C:52
 runLRCAnalysis.C:53
 runLRCAnalysis.C:54
 runLRCAnalysis.C:55
 runLRCAnalysis.C:56
 runLRCAnalysis.C:57
 runLRCAnalysis.C:58
 runLRCAnalysis.C:59
 runLRCAnalysis.C:60
 runLRCAnalysis.C:61
 runLRCAnalysis.C:62
 runLRCAnalysis.C:63
 runLRCAnalysis.C:64
 runLRCAnalysis.C:65
 runLRCAnalysis.C:66
 runLRCAnalysis.C:67
 runLRCAnalysis.C:68
 runLRCAnalysis.C:69
 runLRCAnalysis.C:70
 runLRCAnalysis.C:71
 runLRCAnalysis.C:72
 runLRCAnalysis.C:73
 runLRCAnalysis.C:74
 runLRCAnalysis.C:75
 runLRCAnalysis.C:76
 runLRCAnalysis.C:77
 runLRCAnalysis.C:78
 runLRCAnalysis.C:79
 runLRCAnalysis.C:80
 runLRCAnalysis.C:81
 runLRCAnalysis.C:82
 runLRCAnalysis.C:83
 runLRCAnalysis.C:84
 runLRCAnalysis.C:85
 runLRCAnalysis.C:86
 runLRCAnalysis.C:87
 runLRCAnalysis.C:88
 runLRCAnalysis.C:89
 runLRCAnalysis.C:90
 runLRCAnalysis.C:91
 runLRCAnalysis.C:92
 runLRCAnalysis.C:93
 runLRCAnalysis.C:94
 runLRCAnalysis.C:95
 runLRCAnalysis.C:96
 runLRCAnalysis.C:97
 runLRCAnalysis.C:98
 runLRCAnalysis.C:99
 runLRCAnalysis.C:100
 runLRCAnalysis.C:101
 runLRCAnalysis.C:102
 runLRCAnalysis.C:103
 runLRCAnalysis.C:104
 runLRCAnalysis.C:105
 runLRCAnalysis.C:106
 runLRCAnalysis.C:107
 runLRCAnalysis.C:108
 runLRCAnalysis.C:109
 runLRCAnalysis.C:110
 runLRCAnalysis.C:111
 runLRCAnalysis.C:112
 runLRCAnalysis.C:113
 runLRCAnalysis.C:114
 runLRCAnalysis.C:115
 runLRCAnalysis.C:116
 runLRCAnalysis.C:117
 runLRCAnalysis.C:118
 runLRCAnalysis.C:119
 runLRCAnalysis.C:120
 runLRCAnalysis.C:121
 runLRCAnalysis.C:122
 runLRCAnalysis.C:123
 runLRCAnalysis.C:124
 runLRCAnalysis.C:125
 runLRCAnalysis.C:126
 runLRCAnalysis.C:127
 runLRCAnalysis.C:128
 runLRCAnalysis.C:129
 runLRCAnalysis.C:130
 runLRCAnalysis.C:131
 runLRCAnalysis.C:132
 runLRCAnalysis.C:133
 runLRCAnalysis.C:134
 runLRCAnalysis.C:135
 runLRCAnalysis.C:136
 runLRCAnalysis.C:137
 runLRCAnalysis.C:138
 runLRCAnalysis.C:139
 runLRCAnalysis.C:140
 runLRCAnalysis.C:141
 runLRCAnalysis.C:142
 runLRCAnalysis.C:143
 runLRCAnalysis.C:144
 runLRCAnalysis.C:145
 runLRCAnalysis.C:146
 runLRCAnalysis.C:147
 runLRCAnalysis.C:148
 runLRCAnalysis.C:149
 runLRCAnalysis.C:150
 runLRCAnalysis.C:151
 runLRCAnalysis.C:152
 runLRCAnalysis.C:153
 runLRCAnalysis.C:154
 runLRCAnalysis.C:155
 runLRCAnalysis.C:156
 runLRCAnalysis.C:157
 runLRCAnalysis.C:158
 runLRCAnalysis.C:159
 runLRCAnalysis.C:160
 runLRCAnalysis.C:161
 runLRCAnalysis.C:162
 runLRCAnalysis.C:163
 runLRCAnalysis.C:164
 runLRCAnalysis.C:165
 runLRCAnalysis.C:166
 runLRCAnalysis.C:167
 runLRCAnalysis.C:168
 runLRCAnalysis.C:169
 runLRCAnalysis.C:170
 runLRCAnalysis.C:171
 runLRCAnalysis.C:172
 runLRCAnalysis.C:173
 runLRCAnalysis.C:174
 runLRCAnalysis.C:175
 runLRCAnalysis.C:176
 runLRCAnalysis.C:177
 runLRCAnalysis.C:178
 runLRCAnalysis.C:179
 runLRCAnalysis.C:180
 runLRCAnalysis.C:181
 runLRCAnalysis.C:182
 runLRCAnalysis.C:183
 runLRCAnalysis.C:184
 runLRCAnalysis.C:185
 runLRCAnalysis.C:186
 runLRCAnalysis.C:187
 runLRCAnalysis.C:188
 runLRCAnalysis.C:189
 runLRCAnalysis.C:190
 runLRCAnalysis.C:191
 runLRCAnalysis.C:192
 runLRCAnalysis.C:193
 runLRCAnalysis.C:194
 runLRCAnalysis.C:195
 runLRCAnalysis.C:196
 runLRCAnalysis.C:197
 runLRCAnalysis.C:198
 runLRCAnalysis.C:199
 runLRCAnalysis.C:200
 runLRCAnalysis.C:201
 runLRCAnalysis.C:202
 runLRCAnalysis.C:203
 runLRCAnalysis.C:204
 runLRCAnalysis.C:205
 runLRCAnalysis.C:206
 runLRCAnalysis.C:207
 runLRCAnalysis.C:208
 runLRCAnalysis.C:209
 runLRCAnalysis.C:210
 runLRCAnalysis.C:211
 runLRCAnalysis.C:212
 runLRCAnalysis.C:213
 runLRCAnalysis.C:214
 runLRCAnalysis.C:215
 runLRCAnalysis.C:216
 runLRCAnalysis.C:217
 runLRCAnalysis.C:218
 runLRCAnalysis.C:219
 runLRCAnalysis.C:220
 runLRCAnalysis.C:221
 runLRCAnalysis.C:222
 runLRCAnalysis.C:223
 runLRCAnalysis.C:224
 runLRCAnalysis.C:225
 runLRCAnalysis.C:226
 runLRCAnalysis.C:227
 runLRCAnalysis.C:228
 runLRCAnalysis.C:229
 runLRCAnalysis.C:230
 runLRCAnalysis.C:231
 runLRCAnalysis.C:232
 runLRCAnalysis.C:233
 runLRCAnalysis.C:234
 runLRCAnalysis.C:235
 runLRCAnalysis.C:236
 runLRCAnalysis.C:237
 runLRCAnalysis.C:238
 runLRCAnalysis.C:239
 runLRCAnalysis.C:240
 runLRCAnalysis.C:241
 runLRCAnalysis.C:242
 runLRCAnalysis.C:243
 runLRCAnalysis.C:244
 runLRCAnalysis.C:245
 runLRCAnalysis.C:246
 runLRCAnalysis.C:247
 runLRCAnalysis.C:248
 runLRCAnalysis.C:249
 runLRCAnalysis.C:250
 runLRCAnalysis.C:251
 runLRCAnalysis.C:252
 runLRCAnalysis.C:253
 runLRCAnalysis.C:254
 runLRCAnalysis.C:255
 runLRCAnalysis.C:256
 runLRCAnalysis.C:257
 runLRCAnalysis.C:258
 runLRCAnalysis.C:259
 runLRCAnalysis.C:260