ROOT logo
// Steer TRD QA train for Reconstruction (Clusterizer, Tracking and PID).
// 
// Usage:
//   AddTrainPerformanceTRD.C(MC, friends, tasks)
//   tasks : "ALL" or one/more of the following:
//     "EFF"  : TRD Tracking Efficiency 
//     "EFFC" : TRD Tracking Efficiency Combined (barrel + stand alone) - only in case of simulations
//     "MULT"  : TRD single track selection
//     "RES"  : TRD tracking Resolution
//     "CLRES": clusters Resolution
//     "CAL"  : TRD calibration
//     "ALGN" : TRD alignment
//     "PID"  : TRD PID - pion efficiency 
//     "PIDR" : TRD PID - reference data
//     "DET"  : Basic TRD Detector checks
//     "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
//
// 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("libPWGPP.so");
//
// Authors:
//   Alex Bercuci (A.Bercuci@gsi.de) 
//   Markus Fasel (m.Fasel@gsi.de) 

#if ! defined (__CINT__) || defined (__MAKECINT__)
//#ifndef __CINT__
#include <Riostream.h>

#include "TStopwatch.h"
#include "TMemStat.h"
#include "TMemStatViewerGUI.h"

#include "TROOT.h"
#include "TClass.h"
#include "TSystem.h"
#include "TString.h"
#include "TError.h"
#include "TChain.h"
#include "TGrid.h"
#include "TAlienCollection.h"
#include "TGridCollection.h"
#include "TGridResult.h"
#include "TGeoGlobalMagField.h"

#include "AliMagF.h"
#include "AliTracker.h"
#include "AliLog.h"
#include "AliCDBManager.h"
#include "AliGRPManager.h"
#include "AliGeomManager.h"
#include "AliAnalysisManager.h"
#include "AliAnalysisDataContainer.h"
#include "AliMCEventHandler.h"
#include "AliESDInputHandler.h"

#include "TRD/AliTRDtrackerV1.h"
#include "TRD/AliTRDcalibDB.h"

#include "PWGPP/TRD/macros/AddTRDcheckESD.C"
#include "PWGPP/TRD/macros/AddTRDinfoGen.C"
#include "PWGPP/TRD/macros/AddTRDcheckDET.C"
#include "PWGPP/TRD/macros/AddTRDefficiency.C"
#include "PWGPP/TRD/macros/AddTRDresolution.C"
#include "PWGPP/TRD/macros/AddTRDcheckPID.C"
#include "PWGPP/TRD/macros/AddTRDcheckTRK.C"
#include "PWGPP/TRD/macros/AddTRDv0Monitor.C"
#endif

TString opt("");
const Char_t* Translate(Bool_t doCheckESD=kTRUE, Bool_t doCheckDET=kTRUE, Bool_t doEffic=kTRUE, Bool_t doResolution=kTRUE, Bool_t doCheckPID=kTRUE, Bool_t doV0Monitor=kTRUE);
Bool_t AddTrainPerformanceTRD(Char_t *trd="ALL", const Char_t *addMacroPath = "$ALICE_ROOT/PWGPP/TRD/macros")
{
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if(!mgr) { 
    Error("AddTrainPerformanceTRD", "AliAnalysisManager not set!");
    return kFALSE;
  }

  // TRD data containers
  AliAnalysisDataContainer *ci[AliTRDpwgppHelper::kNOutSlots];
  AliAnalysisDataContainer *ce[5];

  Info("AddTrainPerformanceTRD", Form("Add Macros taken from %s", addMacroPath));
  Info("AddTrainPerformanceTRD", Form("TRD wagons \"%s\"", trd));
  Int_t bitmap = AliTRDpwgppHelper::ParseOptions(trd);
  for(Int_t it=0; it<AliTRDpwgppHelper::kNTRDQATASKS; it++){
    if(gROOT->LoadMacro(Form("%s/Add%s.C+", addMacroPath, TString(AliTRDpwgppHelper::TaskClassName(it))(3,20).Data()))) {
      Error("AddTrainPerformanceTRD()", Form("Error loading %s task.", AliTRDpwgppHelper::TaskClassName(it)));
      return kFALSE;
    } 
    if(!AliTRDpwgppHelper::DoTask(it, bitmap)) continue;

    switch(it){
    case AliTRDpwgppHelper::kCheckESD:
      AddTRDcheckESD(mgr); break;
    case AliTRDpwgppHelper::kInfoGen:
      AddTRDinfoGen(mgr, 0, NULL, ci); break;
    case AliTRDpwgppHelper::kCheckDET:
      // map slots
      ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel];
      ce[1]=ci[AliTRDpwgppHelper::kTracksSA];
      ce[2]=ci[AliTRDpwgppHelper::kTracksKink];
      ce[3]=ci[AliTRDpwgppHelper::kEventInfo];
      ce[4]=ci[AliTRDpwgppHelper::kClusters];
      AddTRDcheckDET(mgr, bitmap, ce);
      break;
    case AliTRDpwgppHelper::kEfficiency:
      // map slots
      ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel];
      ce[1]=ci[AliTRDpwgppHelper::kTracksITS];
      ce[2]=ci[AliTRDpwgppHelper::kTracksKink];
      ce[3]=ci[AliTRDpwgppHelper::kEventInfo];
      ce[4]=ci[AliTRDpwgppHelper::kClusters];
      AddTRDefficiency(mgr, bitmap, ce);
      break;
    case AliTRDpwgppHelper::kResolution:
      // map slots
      ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel];
      ce[1]=ci[AliTRDpwgppHelper::kTracksITS];
      ce[2]=ci[AliTRDpwgppHelper::kTracksKink];
      ce[3]=ci[AliTRDpwgppHelper::kEventInfo];
      ce[4]=ci[AliTRDpwgppHelper::kClusters];
      AddTRDresolution(mgr, bitmap, ce); 
      break;
    case AliTRDpwgppHelper::kCheckPID:
      // map slots
      ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel];
      ce[1]=ci[AliTRDpwgppHelper::kEventInfo];
      ce[2]=ci[AliTRDpwgppHelper::kV0List];
      AddTRDcheckPID(mgr, bitmap, ce, &ce[3]);
      break;
    case AliTRDpwgppHelper::kCheckTRK:
      // map slots
      ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel];
      ce[1]=ci[AliTRDpwgppHelper::kEventInfo];
      ce[2]=ci[AliTRDpwgppHelper::kClusters];
      AddTRDcheckTRK(mgr, 0, ce);
      break;
    case AliTRDpwgppHelper::kV0Monitor:
      // slots already mapped by checkPID
      AddTRDv0Monitor(mgr, 0, ce);
      break;
    default:
      Warning("AddTrainPerformanceTRD()", Form("No performance task registered at slot %d.", it)); 
    }
  }
  return kTRUE;
}

const Char_t* Translate(Bool_t doCheckESD, Bool_t doCheckDET, Bool_t doEffic, Bool_t doResolution, Bool_t doCheckPID, Bool_t doCheckV0)
{
  opt.Clear();
  if( doCheckESD==kTRUE &&
      doCheckDET==kTRUE &&
      doEffic==kTRUE &&
      doResolution==kTRUE &&
      doCheckPID==kTRUE &&
      doCheckV0==kTRUE
  ){
    opt="ALL";
  } else {
    Bool_t kINDENT(kFALSE);
    if(doCheckESD){ 
      opt.Append("ESD");
      kINDENT=kTRUE;
    }
    if(doCheckDET){ 
      if(kINDENT) opt.Append(" ");
      opt.Append("DET"); 
      kINDENT = kTRUE;
    }
    if(doEffic){ 
      if(kINDENT) opt.Append(" ");
      opt.Append("EFF");
      kINDENT=kTRUE;
    }
    if(doResolution){ 
      if(kINDENT) opt.Append(" ");
      opt.Append("RES");
      kINDENT=kTRUE;
    }
    if(doCheckPID){ 
      if(kINDENT) opt.Append(" ");
      opt.Append("PID");
      kINDENT=kTRUE;
    }
    if(doCheckV0){ 
      if(kINDENT) opt.Append(" ");
      opt.Append("V0");
      kINDENT=kTRUE;
    }
  }

  return (const Char_t*)opt.Data();
}


 AddTrainPerformanceTRD.C:1
 AddTrainPerformanceTRD.C:2
 AddTrainPerformanceTRD.C:3
 AddTrainPerformanceTRD.C:4
 AddTrainPerformanceTRD.C:5
 AddTrainPerformanceTRD.C:6
 AddTrainPerformanceTRD.C:7
 AddTrainPerformanceTRD.C:8
 AddTrainPerformanceTRD.C:9
 AddTrainPerformanceTRD.C:10
 AddTrainPerformanceTRD.C:11
 AddTrainPerformanceTRD.C:12
 AddTrainPerformanceTRD.C:13
 AddTrainPerformanceTRD.C:14
 AddTrainPerformanceTRD.C:15
 AddTrainPerformanceTRD.C:16
 AddTrainPerformanceTRD.C:17
 AddTrainPerformanceTRD.C:18
 AddTrainPerformanceTRD.C:19
 AddTrainPerformanceTRD.C:20
 AddTrainPerformanceTRD.C:21
 AddTrainPerformanceTRD.C:22
 AddTrainPerformanceTRD.C:23
 AddTrainPerformanceTRD.C:24
 AddTrainPerformanceTRD.C:25
 AddTrainPerformanceTRD.C:26
 AddTrainPerformanceTRD.C:27
 AddTrainPerformanceTRD.C:28
 AddTrainPerformanceTRD.C:29
 AddTrainPerformanceTRD.C:30
 AddTrainPerformanceTRD.C:31
 AddTrainPerformanceTRD.C:32
 AddTrainPerformanceTRD.C:33
 AddTrainPerformanceTRD.C:34
 AddTrainPerformanceTRD.C:35
 AddTrainPerformanceTRD.C:36
 AddTrainPerformanceTRD.C:37
 AddTrainPerformanceTRD.C:38
 AddTrainPerformanceTRD.C:39
 AddTrainPerformanceTRD.C:40
 AddTrainPerformanceTRD.C:41
 AddTrainPerformanceTRD.C:42
 AddTrainPerformanceTRD.C:43
 AddTrainPerformanceTRD.C:44
 AddTrainPerformanceTRD.C:45
 AddTrainPerformanceTRD.C:46
 AddTrainPerformanceTRD.C:47
 AddTrainPerformanceTRD.C:48
 AddTrainPerformanceTRD.C:49
 AddTrainPerformanceTRD.C:50
 AddTrainPerformanceTRD.C:51
 AddTrainPerformanceTRD.C:52
 AddTrainPerformanceTRD.C:53
 AddTrainPerformanceTRD.C:54
 AddTrainPerformanceTRD.C:55
 AddTrainPerformanceTRD.C:56
 AddTrainPerformanceTRD.C:57
 AddTrainPerformanceTRD.C:58
 AddTrainPerformanceTRD.C:59
 AddTrainPerformanceTRD.C:60
 AddTrainPerformanceTRD.C:61
 AddTrainPerformanceTRD.C:62
 AddTrainPerformanceTRD.C:63
 AddTrainPerformanceTRD.C:64
 AddTrainPerformanceTRD.C:65
 AddTrainPerformanceTRD.C:66
 AddTrainPerformanceTRD.C:67
 AddTrainPerformanceTRD.C:68
 AddTrainPerformanceTRD.C:69
 AddTrainPerformanceTRD.C:70
 AddTrainPerformanceTRD.C:71
 AddTrainPerformanceTRD.C:72
 AddTrainPerformanceTRD.C:73
 AddTrainPerformanceTRD.C:74
 AddTrainPerformanceTRD.C:75
 AddTrainPerformanceTRD.C:76
 AddTrainPerformanceTRD.C:77
 AddTrainPerformanceTRD.C:78
 AddTrainPerformanceTRD.C:79
 AddTrainPerformanceTRD.C:80
 AddTrainPerformanceTRD.C:81
 AddTrainPerformanceTRD.C:82
 AddTrainPerformanceTRD.C:83
 AddTrainPerformanceTRD.C:84
 AddTrainPerformanceTRD.C:85
 AddTrainPerformanceTRD.C:86
 AddTrainPerformanceTRD.C:87
 AddTrainPerformanceTRD.C:88
 AddTrainPerformanceTRD.C:89
 AddTrainPerformanceTRD.C:90
 AddTrainPerformanceTRD.C:91
 AddTrainPerformanceTRD.C:92
 AddTrainPerformanceTRD.C:93
 AddTrainPerformanceTRD.C:94
 AddTrainPerformanceTRD.C:95
 AddTrainPerformanceTRD.C:96
 AddTrainPerformanceTRD.C:97
 AddTrainPerformanceTRD.C:98
 AddTrainPerformanceTRD.C:99
 AddTrainPerformanceTRD.C:100
 AddTrainPerformanceTRD.C:101
 AddTrainPerformanceTRD.C:102
 AddTrainPerformanceTRD.C:103
 AddTrainPerformanceTRD.C:104
 AddTrainPerformanceTRD.C:105
 AddTrainPerformanceTRD.C:106
 AddTrainPerformanceTRD.C:107
 AddTrainPerformanceTRD.C:108
 AddTrainPerformanceTRD.C:109
 AddTrainPerformanceTRD.C:110
 AddTrainPerformanceTRD.C:111
 AddTrainPerformanceTRD.C:112
 AddTrainPerformanceTRD.C:113
 AddTrainPerformanceTRD.C:114
 AddTrainPerformanceTRD.C:115
 AddTrainPerformanceTRD.C:116
 AddTrainPerformanceTRD.C:117
 AddTrainPerformanceTRD.C:118
 AddTrainPerformanceTRD.C:119
 AddTrainPerformanceTRD.C:120
 AddTrainPerformanceTRD.C:121
 AddTrainPerformanceTRD.C:122
 AddTrainPerformanceTRD.C:123
 AddTrainPerformanceTRD.C:124
 AddTrainPerformanceTRD.C:125
 AddTrainPerformanceTRD.C:126
 AddTrainPerformanceTRD.C:127
 AddTrainPerformanceTRD.C:128
 AddTrainPerformanceTRD.C:129
 AddTrainPerformanceTRD.C:130
 AddTrainPerformanceTRD.C:131
 AddTrainPerformanceTRD.C:132
 AddTrainPerformanceTRD.C:133
 AddTrainPerformanceTRD.C:134
 AddTrainPerformanceTRD.C:135
 AddTrainPerformanceTRD.C:136
 AddTrainPerformanceTRD.C:137
 AddTrainPerformanceTRD.C:138
 AddTrainPerformanceTRD.C:139
 AddTrainPerformanceTRD.C:140
 AddTrainPerformanceTRD.C:141
 AddTrainPerformanceTRD.C:142
 AddTrainPerformanceTRD.C:143
 AddTrainPerformanceTRD.C:144
 AddTrainPerformanceTRD.C:145
 AddTrainPerformanceTRD.C:146
 AddTrainPerformanceTRD.C:147
 AddTrainPerformanceTRD.C:148
 AddTrainPerformanceTRD.C:149
 AddTrainPerformanceTRD.C:150
 AddTrainPerformanceTRD.C:151
 AddTrainPerformanceTRD.C:152
 AddTrainPerformanceTRD.C:153
 AddTrainPerformanceTRD.C:154
 AddTrainPerformanceTRD.C:155
 AddTrainPerformanceTRD.C:156
 AddTrainPerformanceTRD.C:157
 AddTrainPerformanceTRD.C:158
 AddTrainPerformanceTRD.C:159
 AddTrainPerformanceTRD.C:160
 AddTrainPerformanceTRD.C:161
 AddTrainPerformanceTRD.C:162
 AddTrainPerformanceTRD.C:163
 AddTrainPerformanceTRD.C:164
 AddTrainPerformanceTRD.C:165
 AddTrainPerformanceTRD.C:166
 AddTrainPerformanceTRD.C:167
 AddTrainPerformanceTRD.C:168
 AddTrainPerformanceTRD.C:169
 AddTrainPerformanceTRD.C:170
 AddTrainPerformanceTRD.C:171
 AddTrainPerformanceTRD.C:172
 AddTrainPerformanceTRD.C:173
 AddTrainPerformanceTRD.C:174
 AddTrainPerformanceTRD.C:175
 AddTrainPerformanceTRD.C:176
 AddTrainPerformanceTRD.C:177
 AddTrainPerformanceTRD.C:178
 AddTrainPerformanceTRD.C:179
 AddTrainPerformanceTRD.C:180
 AddTrainPerformanceTRD.C:181
 AddTrainPerformanceTRD.C:182
 AddTrainPerformanceTRD.C:183
 AddTrainPerformanceTRD.C:184
 AddTrainPerformanceTRD.C:185
 AddTrainPerformanceTRD.C:186
 AddTrainPerformanceTRD.C:187
 AddTrainPerformanceTRD.C:188
 AddTrainPerformanceTRD.C:189
 AddTrainPerformanceTRD.C:190
 AddTrainPerformanceTRD.C:191
 AddTrainPerformanceTRD.C:192
 AddTrainPerformanceTRD.C:193
 AddTrainPerformanceTRD.C:194
 AddTrainPerformanceTRD.C:195
 AddTrainPerformanceTRD.C:196
 AddTrainPerformanceTRD.C:197
 AddTrainPerformanceTRD.C:198
 AddTrainPerformanceTRD.C:199
 AddTrainPerformanceTRD.C:200
 AddTrainPerformanceTRD.C:201
 AddTrainPerformanceTRD.C:202
 AddTrainPerformanceTRD.C:203
 AddTrainPerformanceTRD.C:204
 AddTrainPerformanceTRD.C:205