ROOT logo
// Macro to run TPC MC performance
//
// The basic tracking functionality is tested 
// by using MC track references (exact points). 
// 
// Track references are propagate in B-field and
// material by using:
//   
// AliTracker::PropagateTrackToBxByBz()
// AliExternalTrackParam::PropagateToBxByBz()
//
// 
// Available test components:
//
// AliPerformanceRes (propagation TPCin(ref) -> DCA(particle) by using AliTracker::PropagateTrackToBxByBz() and comparison at DCA)
// AliPerformanceResTCPInner (propagation TPCout(ref) -> TPCin(ref) and comparison at TPCin)
// AliPerformanceResTPCOuter (propagation TPCin(ref) -> TPCout(ref) by using AliExternalTrackParam::PropagateToBxByBz() and comparison at TPCout) 
//

/*
  //1. Run locally e.g.

  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/LoadMyLibs.C");

  gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C");
  TChain* chain = CreateESDChain("list_flatP_JB.txt", 500, 0);
  chain->Lookup();

  // Geometry (need for the track propagation through material)
  //AliGeomManager::LoadGeometry("/lustre/alice/jacek/sim/HEADJB/flatPt_uniB/0/geometry.root");

  // set magnetic field
  TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", 1., 1., AliMagF::k5kG));

  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/RunPerformanceTaskMC.C");
  RunPerformanceTaskMC(chain, kTRUE, kFALSE, kFALSE, 0);

  //2. Run on PROOF Lite e.g.

  TProof::Open(""); 

  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/ProofEnableAliRoot.C");
  ProofEnableAliRoot("/d/alice11/jacek/alice/x86_64/AliRoot/trunkJB");

  gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C");
  TChain* chain = CreateESDChain("list_flatP_JB.txt", 400, 0);
  chain->Lookup();

  // set magnetic field
  // the best is to create macro MagField.C with the line: 
  // TGeoGlobalMagField::Instance()->SetField(new AliMagF("Maps","Maps", 1., 1., AliMagF::k5kG));
  gProof->Exec("gROOT->Macro(\"MagField.C\")");

  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/RunPerformanceTaskMC.C");
  RunPerformanceTaskMC(chain, kTRUE, kTRUE, kTRUE,0);

  //3. Run only on static PROOF at GSI e.g.

  TProof::Reset("jacek@lxgrid5.gsi.de");
  TProofMgr * proofmgr = TProof::Mgr("jacek@lxgrid5.gsi.de");
  //proofmgr->SetROOTVersion("523-04");
  TProof * proof = proofmgr->CreateSession();
  proof->SetParameter("PROOF_MaxSlavesPerNode", (Long_t)10000);

  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/macros/ProofEnableAliRoot.C");
  ProofEnableAliRoot("/u/jacek/alice/AliRoot/HEADJB/");

  gROOT->LoadMacro("$ALICE_ROOT/PWG0/CreateESDChain.C");
  TChain* chain = CreateESDChain("flat_JB.txt", 50, 0);
  chain->Lookup();

  // Geometry (need for the track propagation through material)
  //AliGeomManager::LoadGeometry("/lustre/alice/local/TRDdata/SIM/P-Flat/TRUNK/test/RUN0/geometry.root");

  // set magnetic field
  gProof->Exec("gROOT->ProcessLine(\"TGeoGlobalMagField::Instance()->SetField(new AliMagF(\"Maps\",\"Maps\", 1., 1., AliMagF::k5kG))\")");

  gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/RunPerformanceTaskMC.C");
  RunPerformanceTaskMC(chain, kTRUE, kTRUE, kTRUE);

  //4. Make final spectra and store them in the
  // output folder and generate control pictures e.g.

  TFile f("TPC.Performance.root");
  AliPerformanceRes * compObjRes = (AliPerformanceRes*)coutput->FindObject("AliPerformanceResTPCInner");
  compObjRes->Analyse();
  compObjRes->GetAnalysisFolder()->ls("*");
  compObjRes->PrintHisto(kTRUE,"PerformanceResTPCInnerQA.ps");
  TFile fout("AnalysedResTPCInner.root","recreate");
  compObjRes->GetAnalysisFolder()->Write();
  fout.Close();
  f.Close();


*/

//_____________________________________________________________________________
void RunPerformanceTaskMC(TChain *chain, Bool_t bUseMCInfo=kTRUE, Bool_t bUseESDfriend=kTRUE,  Bool_t bProof=kTRUE, Int_t debugStreamLevel=0)
{
  if(!chain) 
  {
    AliDebug(AliLog::kError, "ERROR: No input chain available");
    return;
  }

  //
  // Create global cuts objects 
  //

  // Create ESD track reconstruction cuts
  AliRecInfoCuts *pRecInfoCuts = new AliRecInfoCuts(); 
  if(pRecInfoCuts) {
    pRecInfoCuts->SetMaxDCAToVertexXY(3.0);
    pRecInfoCuts->SetMaxDCAToVertexZ(3.0);
    pRecInfoCuts->SetMinNClustersTPC(50);
    pRecInfoCuts->SetMinNClustersITS(2);
    pRecInfoCuts->SetPtRange(0.15,1.e10);
    pRecInfoCuts->SetHistogramsOn(kFALSE); 
  } else {
    AliDebug(AliLog::kError, "ERROR: Cannot create AliRecInfoCuts object");
  }

  // Create MC track reconstruction cuts
  AliMCInfoCuts  *pMCInfoCuts = new AliMCInfoCuts();
  if(pMCInfoCuts) {
    pMCInfoCuts->SetMinTrackLength(70);
  } else {
    AliDebug(AliLog::kError, "ERROR: Cannot AliMCInfoCuts object");
  }

  //
  // Create performance objects and set cuts 
  //
  const Int_t kTPC = 0; const Int_t kTPCITS = 1; const Int_t kConstrained = 2; const Int_t kTPCInner = 3; const Int_t kTPCOuter = 4;

  //
  // MC 
  //
  AliPerformanceMC *pCompMC0 = new AliPerformanceMC("AliPerformanceMC","AliPerformanceMC",kTPC,kFALSE); 
  if(!pCompMC0) {
    AliDebug(AliLog::kError, "ERROR: Cannot create AliPerformanceMC object");
  }
  pCompMC0->SetAliRecInfoCuts(pRecInfoCuts);
  pCompMC0->SetAliMCInfoCuts(pMCInfoCuts);
  //pCompMC0->SetStreamLevel(debugStreamLevel);

  AliPerformanceMC *pCompMC3 = new AliPerformanceMC("AliPerformanceMCTPCInner","AliPerformanceMCTPCInner",kTPCInner,kFALSE); 
  if(!pCompMC3) {
    AliDebug(AliLog::kError, "ERROR: Cannot create AliPerformanceMCInnerTPC object");
  }
  pCompMC3->SetAliRecInfoCuts(pRecInfoCuts);
  pCompMC3->SetAliMCInfoCuts(pMCInfoCuts);
  //pCompMC3->SetStreamLevel(debugStreamLevel);

  AliPerformanceMC *pCompMC4 = new AliPerformanceMC("AliPerformanceMCTPCOuter","AliPerformanceMCTPCOuter",kTPCOuter,kFALSE); 
  if(!pCompMC4) {
    AliDebug(AliLog::kError, "ERROR: Cannot create AliPerformanceMCTPCOuter object");
  }
  pCompMC4->SetAliRecInfoCuts(pRecInfoCuts);
  pCompMC4->SetAliMCInfoCuts(pMCInfoCuts);
  //pCompMC4->SetStreamLevel(debugStreamLevel);


  // Swtich off all AliInfo (too much output!!!)
  AliLog::SetGlobalLogLevel(AliLog::kError);

  // Create the analysis manager
  AliAnalysisManager *mgr = new AliAnalysisManager;

  // Create task
  AliPerformanceTask *task = new AliPerformanceTask("PerformanceMC","TPC Performance");
  task->SetUseMCInfo(bUseMCInfo);
  task->SetUseESDfriend(bUseESDfriend);
  task->AddPerformanceObject( pCompMC0 );
  task->AddPerformanceObject( pCompMC3 );
  task->AddPerformanceObject( pCompMC4 );

  // Add task
  mgr->AddTask(task);

  // Add ESD handler
  AliESDInputHandler* esdH = new AliESDInputHandler;
  if(bUseESDfriend) esdH->SetActiveBranches("ESDfriend");
  mgr->SetInputEventHandler(esdH);

  if(bUseMCInfo) {
  // Enable MC event handler
    AliMCEventHandler* handler = new AliMCEventHandler;
    handler->SetReadTR(kTRUE);
    mgr->SetMCtruthEventHandler(handler);
  }

  // Create containers for input
  //AliAnalysisDataContainer *cinput = mgr->CreateContainer("cchain", TChain::Class(), AliAnalysisManager::kInputContainer);
  AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
  mgr->ConnectInput(task, 0, cinput);

  // Create containers for output
  AliAnalysisDataContainer *coutput = mgr->CreateContainer("coutput", TList::Class(), AliAnalysisManager::kOutputContainer, Form("TPC.%s.root", task->GetName()));
  mgr->ConnectOutput(task, 0, coutput);

  // Enable debug printouts
  mgr->SetDebugLevel(0);

  if (!mgr->InitAnalysis())
    return;

  mgr->PrintStatus();

  if(bProof) mgr->StartAnalysis("proof",chain);
  else mgr->StartAnalysis("local",chain);
}

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