ROOT logo
/*
  Macros to run PWGPP train:
  
  void runPWGPPTrain(const char *macros = "AddTask*.C", const char *fname="AliESDs.root");
  //Parameters:
  //    macros: run the train for selected tasks
  //            tasks are expected to be in the working  directory
  //    fname : name of the input file or input list


  .L $ALICE_ROOT/PWGPP/PWGPPmacros/runPWGPPTrain.C


*/

void LoadTrainLibs(){
  //
  // load libraries needed for train
  //
  gSystem->SetIncludePath("-I$ROOTSYS/include -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT -I$ALICE_ROOT/TRD -I$ALICE_ROOT/PWGPP/TRD/macros/ ");
  gSystem->Load("libANALYSIS.so");
  gSystem->Load("libANALYSISalice.so");
  gSystem->Load("libTENDER.so");
  gSystem->Load("libCORRFW.so");
  gSystem->Load("libPWG0base.so");
  gSystem->Load("libPWG0dep.so");
  gSystem->Load("libPWG0selectors.so");
  gSystem->Load("libPWGPP.so");
  gSystem->Load("libPWG2.so");
  gSystem->Load("libPWGmuon.so");
  gSystem->Load("libPWGmuondep.so");
  gSystem->Load("libPWG2forward.so");
  gSystem->Load("libPWG4PartCorrBase.so");
  gSystem->Load("libPWG4PartCorrDep.so");
}

void TestConfig(){

}

void AddMacros(const char *addmacros){
  //
  // add tasks from selected macros - * convention can be used
  // Macro expected to be in the working directory
  // Macros has to be without arguments
  //
  //
  TString  macroList = gSystem->GetFromPipe(Form("cat ConfigTask.txt |grep  %s",addmacros));  
  TObjArray * array  = macroList.Tokenize("\n");

  if (!array) { printf("No task specified"); return;}
  if (array->GetEntries()==0) {
    printf("Empty list of tasks"); 
    return;
  }
  for (Int_t itask=0; itask<array->GetEntries(); itask++){
    gROOT->Macro(array->At(itask)->GetName());    
  }
}

void AddToChain(TChain * chain, TString inputList){
  //
  // add the files form inputList into chain
  //
  ifstream in;
  in.open(inputList.Data());
  Int_t counter=0; 
  TString currentFile;
  while(in.good()) {
    in >> currentFile;
    if (!currentFile.Contains(".root")) continue;
    chain->Add(currentFile.Data());
    printf("%d\t%s\n",counter,currentFile.Data()); 
    counter++;
  }
}

void PrintSysInfo(){
  //
  // print sysinfo
  //
  TF1 f1("f1","pol1");
  TTree * tree = AliSysInfo::MakeTree("syswatch.log");
  Int_t entries=0;
  TGraph *gr = 0;
  entries=tree->Draw("VM:id0","id0>10","goff");
  gr=new TGraph(entries, tree->GetV2(),tree->GetV1());
  gr->Fit(&f1);
  gr->Draw("alp");
  printf("SysInfoMem:\t%f\n",f1->GetParameter(1));
  //
  entries=tree->Draw("T:id0","id0>10","goff");
  gr=new TGraph(entries, tree->GetV2(),tree->GetV1());
  gr->Fit(&f1);
  gr->Draw("alp");
  printf("SysInfoTime:\t%f\n",f1->GetParameter(1));
}

void runPWGPPTrain(const char *macros = "AddTask*.C", TString inputList ="esd.list", Int_t debugLevel=0) {
  //Parameters:
  //    macros: run the train for selected tasks
  //            tasks are expected to be in the working  directory
  //    fname : name of the input file or input list
  TStopwatch timer;
  timer.Start();
  LoadTrainLibs();

  //____________________________________________
  // Make the analysis manager
  //
  AliAnalysisManager *mgr = new AliAnalysisManager("TestManager");
  mgr->SetDebugLevel(debugLevel);
  
  AliInputEventHandler* esdH = new AliESDInputHandlerRP();
  esdH->SetActiveBranches("ESDfriend");
  mgr->SetInputEventHandler(esdH);  
  //
  // make chain
  //
  TChain* chain = new TChain("esdTree");
  if (inputList.Contains(".root")){
    chain->AddFile(inputList);
  }
  if (inputList.Contains(".list")){
    AddToChain(chain, inputList);
  }
  chain->Lookup();
  //
  //
  // Init
  AddMacros(macros);
  mgr->SetNSysInfo(1000);
  if (!mgr->InitAnalysis()) 
    mgr->PrintStatus();
  mgr->PrintStatus();
  // Run on dataset
  //
  mgr->StartAnalysis("local", chain);
  PrintSysInfo();

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

 runPWGPPTrain.C:1
 runPWGPPTrain.C:2
 runPWGPPTrain.C:3
 runPWGPPTrain.C:4
 runPWGPPTrain.C:5
 runPWGPPTrain.C:6
 runPWGPPTrain.C:7
 runPWGPPTrain.C:8
 runPWGPPTrain.C:9
 runPWGPPTrain.C:10
 runPWGPPTrain.C:11
 runPWGPPTrain.C:12
 runPWGPPTrain.C:13
 runPWGPPTrain.C:14
 runPWGPPTrain.C:15
 runPWGPPTrain.C:16
 runPWGPPTrain.C:17
 runPWGPPTrain.C:18
 runPWGPPTrain.C:19
 runPWGPPTrain.C:20
 runPWGPPTrain.C:21
 runPWGPPTrain.C:22
 runPWGPPTrain.C:23
 runPWGPPTrain.C:24
 runPWGPPTrain.C:25
 runPWGPPTrain.C:26
 runPWGPPTrain.C:27
 runPWGPPTrain.C:28
 runPWGPPTrain.C:29
 runPWGPPTrain.C:30
 runPWGPPTrain.C:31
 runPWGPPTrain.C:32
 runPWGPPTrain.C:33
 runPWGPPTrain.C:34
 runPWGPPTrain.C:35
 runPWGPPTrain.C:36
 runPWGPPTrain.C:37
 runPWGPPTrain.C:38
 runPWGPPTrain.C:39
 runPWGPPTrain.C:40
 runPWGPPTrain.C:41
 runPWGPPTrain.C:42
 runPWGPPTrain.C:43
 runPWGPPTrain.C:44
 runPWGPPTrain.C:45
 runPWGPPTrain.C:46
 runPWGPPTrain.C:47
 runPWGPPTrain.C:48
 runPWGPPTrain.C:49
 runPWGPPTrain.C:50
 runPWGPPTrain.C:51
 runPWGPPTrain.C:52
 runPWGPPTrain.C:53
 runPWGPPTrain.C:54
 runPWGPPTrain.C:55
 runPWGPPTrain.C:56
 runPWGPPTrain.C:57
 runPWGPPTrain.C:58
 runPWGPPTrain.C:59
 runPWGPPTrain.C:60
 runPWGPPTrain.C:61
 runPWGPPTrain.C:62
 runPWGPPTrain.C:63
 runPWGPPTrain.C:64
 runPWGPPTrain.C:65
 runPWGPPTrain.C:66
 runPWGPPTrain.C:67
 runPWGPPTrain.C:68
 runPWGPPTrain.C:69
 runPWGPPTrain.C:70
 runPWGPPTrain.C:71
 runPWGPPTrain.C:72
 runPWGPPTrain.C:73
 runPWGPPTrain.C:74
 runPWGPPTrain.C:75
 runPWGPPTrain.C:76
 runPWGPPTrain.C:77
 runPWGPPTrain.C:78
 runPWGPPTrain.C:79
 runPWGPPTrain.C:80
 runPWGPPTrain.C:81
 runPWGPPTrain.C:82
 runPWGPPTrain.C:83
 runPWGPPTrain.C:84
 runPWGPPTrain.C:85
 runPWGPPTrain.C:86
 runPWGPPTrain.C:87
 runPWGPPTrain.C:88
 runPWGPPTrain.C:89
 runPWGPPTrain.C:90
 runPWGPPTrain.C:91
 runPWGPPTrain.C:92
 runPWGPPTrain.C:93
 runPWGPPTrain.C:94
 runPWGPPTrain.C:95
 runPWGPPTrain.C:96
 runPWGPPTrain.C:97
 runPWGPPTrain.C:98
 runPWGPPTrain.C:99
 runPWGPPTrain.C:100
 runPWGPPTrain.C:101
 runPWGPPTrain.C:102
 runPWGPPTrain.C:103
 runPWGPPTrain.C:104
 runPWGPPTrain.C:105
 runPWGPPTrain.C:106
 runPWGPPTrain.C:107
 runPWGPPTrain.C:108
 runPWGPPTrain.C:109
 runPWGPPTrain.C:110
 runPWGPPTrain.C:111
 runPWGPPTrain.C:112
 runPWGPPTrain.C:113
 runPWGPPTrain.C:114
 runPWGPPTrain.C:115
 runPWGPPTrain.C:116
 runPWGPPTrain.C:117
 runPWGPPTrain.C:118
 runPWGPPTrain.C:119
 runPWGPPTrain.C:120
 runPWGPPTrain.C:121
 runPWGPPTrain.C:122
 runPWGPPTrain.C:123
 runPWGPPTrain.C:124
 runPWGPPTrain.C:125
 runPWGPPTrain.C:126
 runPWGPPTrain.C:127
 runPWGPPTrain.C:128
 runPWGPPTrain.C:129
 runPWGPPTrain.C:130
 runPWGPPTrain.C:131
 runPWGPPTrain.C:132
 runPWGPPTrain.C:133
 runPWGPPTrain.C:134
 runPWGPPTrain.C:135
 runPWGPPTrain.C:136
 runPWGPPTrain.C:137
 runPWGPPTrain.C:138
 runPWGPPTrain.C:139
 runPWGPPTrain.C:140
 runPWGPPTrain.C:141
 runPWGPPTrain.C:142
 runPWGPPTrain.C:143
 runPWGPPTrain.C:144
 runPWGPPTrain.C:145