ROOT logo
// Usage:
//   makeCalibResults.C("task", "file_list", kGRID)
//   tasks : "one/more of the following separated by space:
//     "CAL"  : TRD calibration
//     "ALGN" : TRD alignment
//     "PIDR" : TRD PID - reference data
//     "CLRES": Cluster position and error parameterization
//     "NOFR" : Data set does not have AliESDfriends.root 
//     "NOMC" : Data set does not have Monte Carlo Informations (real data), so all tasks which rely
//              on MC information are switched off
//   file_list : is the list of the files to be processed. 
//     They should contain the full path. Here is an example:
// /lustre/alice/local/TRDdata/SIM/P-Flat/TRUNK/RUN0/TRD.CalibName.root
// or for GRID alien:///alice/cern.ch/user/m/mfasel/MinBiasProd/results/ppMinBias80000/1/TRD.Calib%.root
//   kGRID : specify if files are comming from a GRID collection [default kFALSE]
//
// HOW TO BUILD THE FILE LIST
//   1. locally
// ls -1 BaseDir/RUN*/TRD.Calib*.root > files.lst
// 
//   2. on Grid
// char *BaseDir="/alice/cern.ch/user/m/mfasel/MinBiasProd/results/ppMinBias80000/";
// TGrid::Connect("alien://");
// TGridResult *res = gGrid->Query(BaseDir, "%/TRD.Calib%.root");
// TGridCollection *col = gGrid->OpenCollectionQuery(res);
// col->Reset();
// TMap *map = 0x0;
// while(map = (TMap*)col->Next()){
//   TIter it((TCollection*)map);
//   TObjString *info = 0x0;
//   while(info=(TObjString*)it()){
//     printf("alien://%s\n", col->GetLFN(info->GetString().Data()));
//   }
// }
//
// The files which will be processed are the intersection between the
// condition on the tasks and the files in the file list.
//
// In compiled mode : 
// Don't forget to load first the libraries
// gSystem->Load("libMemStat.so")
// gSystem->Load("libMemStatGui.so")
// gSystem->Load("libANALYSIS.so")
// gSystem->Load("libANALYSISalice.so")
// gSystem->Load("libTENDER.so")
// gSystem->Load("libSTAT.so")
// gSystem->Load("libPWGPP.so");
// gSystem->Load("libNetx.so") ;
// gSystem->Load("libRAliEn.so");
//
// Authors:
//   Alex Bercuci (A.Bercuci@gsi.de) 
//   Markus Fasel (m.Fasel@gsi.de) 
//

#if ! defined (__CINT__) || defined (__MAKECINT__)

#include "AliLog.h"
#include "PWGPP/TRD/AliTRDrecoTask.h"
#include <fstream>
#include <TCanvas.h>
#include <TStyle.h>
#include <TGrid.h>
#include <TGridResult.h>
#include <TGridCollection.h>

#endif

Char_t const *libs[] = {"libProofPlayer.so", "libANALYSIS.so", "libANALYSISalice.so", "libTENDER.so", "libSTAT.so", "libPWGPP.so", "libPWGmuon.so"};

// define setup
TClass *ctask = new TClass;
TCanvas *c(NULL);
Bool_t fMC(kFALSE), fFriends(kFALSE);
Char_t const *fFiles(NULL);

void calibrateTRD(Int_t itask, Char_t const* ntask=NULL, Char_t const* nfile=NULL);
void makeCalibResults(Char_t *opt, Char_t const *files=NULL, Bool_t kGRID=kFALSE)
{
  if(kGRID){
    if(!gSystem->Getenv("GSHELL_ROOT")){
      Error("makeCalibResults.C", "AliEn not initialized.");
      return;
    }
    TGrid::Connect("alien://");
  }

	// Load Libraries in interactive mode
  Int_t nlibs = static_cast<Int_t>(sizeof(libs)/sizeof(Char_t *));
  for(Int_t ilib=0; ilib<nlibs; ilib++){
    if(gSystem->Load(libs[ilib]) >= 0) continue;
    Error("makeCalibResults.C", Form("Failed to load %s.", libs[ilib]));
    return;
  }

  fMC = HasReadMCData(opt);
  fFriends = HasReadFriendData(opt);
  fFiles = files;

  gStyle->SetOptStat(0);
  gStyle->SetOptFit(0);
  Int_t fSteerTask = ParseOptions(opt);

  if(!c) c=new TCanvas("c", "Calibration", 10, 10, 800, 500);

  for(Int_t itask = AliTRDpwgppHelper::kNTRDQATASKS; itask<AliTRDpwgppHelper::NTRDTASKS; itask++){
    if(!TESTBIT(fSteerTask, itask)) continue;
    switch(itask){
    case AliTRDpwgppHelper::kPIDRefMaker:
      calibrateTRD(itask, "AliTRDpidRefMakerLQ", "PIDrefMaker");
      //calibrateTRD(itask, "AliTRDpidRefMakerNN", "PIDrefMaker");
      break;
    default:
      calibrateTRD(itask);
      break;
    }
  }
  delete ctask;
  delete c;
}


//______________________________________________________
void calibrateTRD(Int_t itask, Char_t const* ntask, Char_t const* nfile)
{
  if(!ntask) ntask=AliTRDpwgppHelper::fgkTRDtaskClassName[itask];
  new(ctask) TClass(ntask);
  if(!ctask){
    Error("makeCalibResults.C", Form("Asking for wrong class name [%s].", ntask));
    return;
  }
  AliTRDrecoTask *task = static_cast<AliTRDrecoTask*>(ctask->New());
  if(!task){
    Error("makeCalibResults.C", Form("Class name [%s] does not inherit from AliTRDrecoTask.", ntask));
    return;
  }
  if(!nfile) nfile=Form("TRD.Calib%s.root", task->GetName());
  if(fFiles) mergeProd(Form("TRD.Calib%s.root", nfile), fFiles);
  task->SetDebugLevel(0);
  task->SetMCdata(fMC);
  task->SetFriends(fFriends);
  AliLog::SetClassDebugLevel(ntask, 3); 

  if(!task->Load(nfile)){
    Error("makeCalibResults.C", Form("Loading data container for task[%s] failed.", ntask));
    delete task;
    return;
  }
  if(!task->PostProcess()){
    Error("makeCalibResults.C", Form("Processing data container for task[%s] failed.", ntask));
    delete task;
    return;
  }
  for(Int_t ipic=0; ipic<task->GetNRefFigures(); ipic++){
    c->Clear();
    if(!task->GetRefFigure(ipic)) continue;
    c->SaveAs(Form("%s_Fig%02d.gif", task->GetName(), ipic));
  }
  delete task;
}

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