]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TRD/qaRec/run.C
remove warnings during reloading the TRD track list in the prompt
[u/mrichter/AliRoot.git] / TRD / qaRec / run.C
CommitLineData
77203477 1// Steer TRD QA train for Reconstruction (Clusterizer, Tracking and PID).
2//
3// Usage:
4// run.C(tasks, files, entries)
5// tasks : "ALL" or one/more of the following:
6// "EFF" : TRD Tracking Efficiency
7// "EFFC" : TRD Tracking Efficiency Combined (barrel + stand alone) - only in case of simulations
8// "RES" : TRD tracking Resolution
5198d8c6 9// "CLRES": clusters Resolution
ba2773d0 10// "CAL" : TRD calibration
56bb0e8e 11// "ALGN" : TRD alignment
77203477 12// "PID" : TRD PID - pion efficiency
13// "PIDR" : TRD PID - reference data
2b468513 14// "DET" : Basic TRD Detector checks
28efdace 15// "NOFR" : Data set does not have AliESDfriends.root
4b8f8a35 16// "NOMC" : Data set does not have Monte Carlo Informations (real data), so all tasks which rely
17// on MC information are switched off
2c0cf367 18//
19// In compiled mode :
20// Don't forget to load first the libraries
21// gSystem->Load("libMemStat.so")
22// gSystem->Load("libMemStatGui.so")
23// gSystem->Load("libANALYSIS.so")
24// gSystem->Load("libTRDqaRec.so")
25//
77203477 26// Authors:
27// Alex Bercuci (A.Bercuci@gsi.de)
28// Markus Fasel (m.Fasel@gsi.de)
29
819f5b0f 30#ifndef __CINT__
8cc0ed91 31#include <Riostream.h>
32
819f5b0f 33#include "TStopwatch.h"
34#include "TMemStat.h"
35#include "TMemStatViewerGUI.h"
36
37#include "TROOT.h"
38#include "TSystem.h"
8cc0ed91 39#include "TError.h"
819f5b0f 40#include "TChain.h"
41
8cc0ed91 42#include "AliMagFMaps.h"
43#include "AliTracker.h"
819f5b0f 44#include "AliLog.h"
45#include "AliCDBManager.h"
46#include "AliAnalysisManager.h"
47#include "AliAnalysisDataContainer.h"
8cc0ed91 48#include "AliMCEventHandler.h"
49#include "AliESDInputHandler.h"
819f5b0f 50
8cc0ed91 51#include "TRD/AliTRDtrackerV1.h"
52#include "TRD/AliTRDcalibDB.h"
4c0f3c82 53#include "TRD/qaRec/AliTRDtrackInfo/AliTRDeventInfo.h"
819f5b0f 54#include "TRD/qaRec/AliTRDtrackInfoGen.h"
8cc0ed91 55#include "TRD/qaRec/AliTRDtrackingEfficiency.h"
56#include "TRD/qaRec/AliTRDtrackingEfficiencyCombined.h"
57#include "TRD/qaRec/AliTRDtrackingResolution.h"
58#include "TRD/qaRec/AliTRDcalibration.h"
3d86166d 59#include "TRD/qaRec/AliTRDpidChecker.h"
28efdace 60#include "TRD/qaRec/AliTRDpidRefMaker.h"
2b468513 61#include "TRD/qaRec/AliTRDcheckDetector.h"
5198d8c6 62#include "TRD/qaRec/AliTRDclusterResolution.h"
819f5b0f 63#endif
64
3d86166d 65#include "run.h"
66
819f5b0f 67Bool_t MEM = kFALSE;
8cc0ed91 68
69TChain* CreateESDChain(const char* filename = 0x0, Int_t nfiles=-1 );
0ddce9c3 70void run(Char_t *tasks="ALL", const Char_t *files=0x0, Int_t nmax=-1)
77203477 71{
819f5b0f 72 TMemStat *mem = 0x0;
8cc0ed91 73 if(MEM){
74 gSystem->Load("libMemStat.so");
75 gSystem->Load("libMemStatGui.so");
76 mem = new TMemStat("new, gnubuildin");
77 mem->AddStamp("Start");
78 }
77203477 79
814ecea4 80 TStopwatch timer;
81 timer.Start();
814ecea4 82
107fde80 83 if(gSystem->Load("libANALYSIS.so")<0) return;
84 if(gSystem->Load("libTRDqaRec.so")<0) return;
77203477 85
d2381af5 86 Bool_t fHasMCdata = kTRUE;
28efdace 87 Bool_t fHasFriends = kTRUE;
773d3f8c 88 TObjArray *tasksArray = TString(tasks).Tokenize(" ");
28efdace 89
90 Int_t fSteerTask = 0; SETBIT(fSteerTask, kInfoGen);
773d3f8c 91 for(Int_t isel = 0; isel < tasksArray->GetEntriesFast(); isel++){
92 TString s = (dynamic_cast<TObjString *>(tasksArray->UncheckedAt(isel)))->String();
77203477 93 if(s.CompareTo("ALL") == 0){
dec291b0 94 for(Int_t itask = 1; itask <= NTRDTASKS; itask++) SETBIT(fSteerTask, itask);
77203477 95 continue;
28efdace 96 } else if(s.CompareTo("NOFR") == 0){
97 fHasFriends = kFALSE;
98 } else if(s.CompareTo("NOMC") == 0){
d2381af5 99 fHasMCdata = kFALSE;
28efdace 100 } else {
101 Bool_t foundOpt = kFALSE;
5198d8c6 102 for(Int_t itask = 1; itask <= NTRDTASKS; itask++){
4c0f3c82 103 if(s.CompareTo(fgkTRDtaskOpt[itask]) != 0) continue;
28efdace 104 SETBIT(fSteerTask, itask);
105 foundOpt = kTRUE;
106 break;
107 }
108 if(!foundOpt) Info("run.C", Form("Task %s not implemented (yet).", s.Data()));
77203477 109 }
110 }
5198d8c6 111 // extra rules for calibration tasks
112 if(TSTBIT(fSteerTask, kClusterErrorParam)) SETBIT(fSteerTask, kTrackingResolution);
113
8cc0ed91 114 // define task list pointers;
107fde80 115 AliTRDrecoTask *taskPtr[NTRDTASKS], *task = 0x0;
116 memset(taskPtr, 0, NTRDTASKS*sizeof(AliAnalysisTask*));
8cc0ed91 117
814ecea4 118 //____________________________________________//
8cc0ed91 119 //gROOT->LoadMacro(Form("%s/TRD/qaRec/CreateESDChain.C", gSystem->ExpandPathName("$ALICE_ROOT")));
77203477 120 TChain *chain = CreateESDChain(files, nmax);
814ecea4 121 //chain->SetBranchStatus("*", 0);
122 chain->SetBranchStatus("*FMD*",0);
123 chain->SetBranchStatus("*Calo*",0);
124 chain->SetBranchStatus("Tracks", 1);
125 chain->SetBranchStatus("ESDfriend*",1);
126 chain->Lookup();
127 chain->GetListOfFiles()->Print();
128 printf("\n ----> CHAIN HAS %d ENTRIES <----\n\n", (Int_t)chain->GetEntries());
129
130 AliLog::SetGlobalLogLevel(AliLog::kError);
131
132 //____________________________________________
133 // Make the analysis manager
3d86166d 134 AliAnalysisManager *mgr = new AliAnalysisManager("TRD QA Reconstruction Manager");
814ecea4 135 //mgr->SetSpecialOutputLocation(source); // To Be Changed
8cc0ed91 136 AliVEventHandler *esdH = 0x0, *mcH = 0x0;
137 mgr->SetInputEventHandler(esdH = new AliESDInputHandler);
138 if(fHasMCdata) mgr->SetMCtruthEventHandler(mcH = new AliMCEventHandler());
814ecea4 139 //mgr->SetDebugLevel(10);
140
141 //____________________________________________
142 // TRD track summary generator
773d3f8c 143 mgr->AddTask(task = new AliTRDtrackInfoGen());
3d86166d 144 taskPtr[(Int_t)kInfoGen] = task;
b718144c 145 task->SetDebugLevel(1);
3d86166d 146 task->SetMCdata(fHasMCdata);
814ecea4 147 // Create containers for input/output
148 AliAnalysisDataContainer *cinput1 = mgr->CreateContainer("data", TChain::Class(), AliAnalysisManager::kInputContainer);
421fb961 149 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer("trackInfo", TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
150 AliAnalysisDataContainer *coutput1a = mgr->CreateContainer("eventInfo", AliTRDeventInfo::Class(), AliAnalysisManager::kExchangeContainer);
773d3f8c 151 mgr->ConnectInput( task, 0, cinput1);
152 mgr->ConnectOutput(task, 0, coutput1);
421fb961 153 mgr->ConnectOutput(task, 1, coutput1a);
814ecea4 154
28efdace 155 //____________________________________________
156 // TRD detector checker
10557e39 157 if(TSTBIT(fSteerTask, kCheckDetector)){
28efdace 158 mgr->AddTask(task = new AliTRDcheckDetector());
159 taskPtr[(Int_t)kCheckDetector] = task;
9e548ae7 160 task->SetDebugLevel(4);
28efdace 161 task->SetMCdata(fHasMCdata);
162
163 // Create containers for input/output
164 mgr->ConnectInput( task, 0, coutput1);
421fb961 165 mgr->ConnectInput( task, 1, coutput1a);
28efdace 166 mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName())));
167 }
168
814ecea4 169 //____________________________________________
170 // TRD barrel tracking efficiency
10557e39 171 if(fHasMCdata && TSTBIT(fSteerTask, kTrackingEfficiency)){
773d3f8c 172 mgr->AddTask(task = new AliTRDtrackingEfficiency());
3d86166d 173 taskPtr[(Int_t)kTrackingEfficiency] = task;
174 task->SetDebugLevel(0);
175
77203477 176 //Create containers for input/output
773d3f8c 177 mgr->ConnectInput( task, 0, coutput1);
28efdace 178 mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName())));
77203477 179 }
814ecea4 180
181 //____________________________________________
182 // TRD combined tracking efficiency
10557e39 183 if(fHasMCdata && TSTBIT(fSteerTask, kTrackingCombinedEfficiency)){
773d3f8c 184 mgr->AddTask(task = new AliTRDtrackingEfficiencyCombined());
3d86166d 185 taskPtr[(Int_t)kTrackingCombinedEfficiency] = task;
186 task->SetDebugLevel(0);
773d3f8c 187
77203477 188 // Create containers for input/output
773d3f8c 189 mgr->ConnectInput( task, 0, coutput1);
28efdace 190 mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName())));
77203477 191 }
814ecea4 192
77203477 193 //____________________________________________
e26505aa 194 // TRD tracking resolution
10557e39 195 if(TSTBIT(fSteerTask, kTrackingResolution)){
773d3f8c 196 mgr->AddTask(task = new AliTRDtrackingResolution());
3d86166d 197 taskPtr[(Int_t)kTrackingResolution] = task;
198 task->SetMCdata(fHasMCdata);
2b468513 199 task->SetPostProcess(kFALSE);
b718144c 200 task->SetDebugLevel(1);
3d86166d 201
77203477 202 // Create containers for input/output
773d3f8c 203 mgr->ConnectInput( task, 0, coutput1);
28efdace 204 mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName())));
b2dc316d 205
5198d8c6 206 // Create output containers for calibration tasks
dec291b0 207 const Int_t nc = 5;
208 const Char_t *cn[nc] = {"ClRez", "TrkltRez", "TrkltPhiRez", "ClRes", "TrkltRes"};
5198d8c6 209 AliAnalysisDataContainer *co[nc];
210 for(Int_t ic = 0; ic<nc; ic++){
211 co[ic] = mgr->CreateContainer(Form("%s%s", task->GetName(), cn[ic]), TObjArray::Class(), AliAnalysisManager::kExchangeContainer);
212 mgr->ConnectOutput(task, 1+ic, co[ic]);
213 }
b2dc316d 214
215 // test reconstruction calibration plugin
5198d8c6 216 if(TSTBIT(fSteerTask, kClusterErrorParam)){
217 mgr->AddTask(task = new AliTRDclusterResolution());
218 taskPtr[(Int_t)kClusterErrorParam] = task;
219 mgr->ConnectInput(task, 0, co[0]);
220 mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName())));
221
222 mgr->AddTask(task = new AliTRDclusterResolution());
223 mgr->ConnectInput(task, 0, co[1]);
224 mgr->ConnectOutput(task, 0, mgr->CreateContainer(Form("%sMC", task->GetName()), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%sMC.root", task->GetName())));
225 }
77203477 226 }
814ecea4 227
ba2773d0 228 //____________________________________________
229 // TRD calibration
10557e39 230 if(TSTBIT(fSteerTask, kCalibration)){
773d3f8c 231 mgr->AddTask(task = new AliTRDcalibration());
3d86166d 232 taskPtr[(Int_t)kCalibration] = task;
773d3f8c 233 ((AliTRDcalibration*)task)->SetLow(0);
234 ((AliTRDcalibration*)task)->SetHigh(30);
773d3f8c 235 ((AliTRDcalibration*)task)->SetFillZero(kFALSE);
3d86166d 236 task->SetDebugLevel(0);
237
ba2773d0 238 // Create containers for input/output
773d3f8c 239 mgr->ConnectInput(task, 0, coutput1);
28efdace 240 mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName())));
ba2773d0 241 }
242
56bb0e8e 243 //____________________________________________
244 // TRD alignment
245 if(TSTBIT(fSteerTask, kAlignment)){
246 mgr->AddTask(task = new AliTRDalignmentTask());
247 taskPtr[(Int_t)kAlignment] = task;
248 task->SetDebugLevel(0);
249
250 // Create containers for input/output
251 mgr->ConnectInput(task, 0, coutput1);
252 mgr->ConnectOutput(task, 0, mgr->CreateContainer(Form("h%s", task->GetName()), TObjArray::Class(), AliAnalysisManager::kExchangeContainer));
253
254 mgr->ConnectOutput(task, 1, mgr->CreateContainer(task->GetName(), TTree::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName())));
255 }
256
773d3f8c 257 //____________________________________________
258 // TRD pid checker
10557e39 259 if(TSTBIT(fSteerTask, kPIDChecker)){
773d3f8c 260 mgr->AddTask(task = new AliTRDpidChecker());
3d86166d 261 taskPtr[(Int_t)kPIDChecker] = task;
262 task->SetDebugLevel(0);
c7cf2032 263 task->SetMCdata(fHasMCdata);
3d86166d 264
773d3f8c 265 // Create containers for input/output
773d3f8c 266 mgr->ConnectInput( task, 0, coutput1);
28efdace 267 mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName())));
773d3f8c 268 }
269
28efdace 270
2b468513 271 //____________________________________________
93e41bce 272 // TRD pid reference
10557e39 273 if(TSTBIT(fSteerTask, kPIDRefMaker)){
28efdace 274 mgr->AddTask(task = new AliTRDpidRefMaker());
275 taskPtr[(Int_t)kPIDRefMaker] = task;
2b468513 276 task->SetDebugLevel(0);
d85cd79c 277 task->SetMCdata(fHasMCdata);
2b468513 278
279 // Create containers for input/output
2b468513 280 mgr->ConnectInput( task, 0, coutput1);
28efdace 281 mgr->ConnectOutput(task, 0, mgr->CreateContainer(task->GetName(), TObjArray::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%s.root", task->GetName())));
93e41bce 282 mgr->ConnectOutput(task, 1, mgr->CreateContainer(Form("%sNN", task->GetName()), TTree::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%sNN.root", task->GetName())));
283 mgr->ConnectOutput(task, 2, mgr->CreateContainer(Form("%sLQ", task->GetName()), TTree::Class(), AliAnalysisManager::kOutputContainer, Form("TRD.Task%sLQ.root", task->GetName())));
2b468513 284 }
285
28efdace 286
814ecea4 287 if (!mgr->InitAnalysis()) return;
3d86166d 288 printf("\n\tRUNNING TRAIN FOR TASKS:\n");
5198d8c6 289 for(Int_t itask = 1; itask <= NTRDTASKS; itask++){
10557e39 290 if(TSTBIT(fSteerTask, itask)) printf("\t %s [%s]\n", taskPtr[itask]->GetTitle(), taskPtr[itask]->GetName());
3d86166d 291 }
292 printf("\n\n");
d85cd79c 293 //mgr->PrintStatus();
819f5b0f 294
295
296 AliCDBManager *cdbManager = AliCDBManager::Instance();
297 cdbManager->SetDefaultStorage("local://$ALICE_ROOT");
298 //cdbManager->SetSpecificStorage("TRD/Calib/FEE","local:///u/bailhach/aliroot/database30head/database");
299 cdbManager->SetRun(0);
2c0cf367 300 cdbManager->SetCacheFlag(kFALSE);
819f5b0f 301
d2381af5 302 // initialize TRD settings
8cc0ed91 303 AliMagFMaps *field = new AliMagFMaps("Maps","Maps", 2, 1., 10., AliMagFMaps::k5kG);
304 AliTracker::SetFieldMap(field, kTRUE);
2c0cf367 305 AliTRDcalibDB *cal = AliTRDcalibDB::Instance();
306 AliTRDtrackerV1::SetNTimeBins(cal->GetNumberOfTimeBins());
7dc3c50c 307 AliGeomManager::LoadGeometry();
8cc0ed91 308
309
814ecea4 310 mgr->StartAnalysis("local",chain);
311
312 timer.Stop();
819f5b0f 313 timer.Print();
314
2c0cf367 315 cal->Terminate();
8cc0ed91 316 delete field;
317 delete cdbManager;
107fde80 318 for(Int_t it=NTRDTASKS-1; it>=0; it--) if(taskPtr[it]) delete taskPtr[it];
8cc0ed91 319 if(mcH) delete mcH;
320 delete esdH;
321 delete mgr;
322 delete chain;
819f5b0f 323 if(MEM) delete mem;
324 if(MEM) TMemStatViewerGUI::ShowGUI();
814ecea4 325}
8cc0ed91 326
327
328TChain* CreateESDChain(const char* filename, Int_t nfiles)
329{
330 // Create the chain
331 TChain* chain = new TChain("esdTree");
332
333 if(!filename){
334 chain->Add(Form("%s/AliESDs.root", gSystem->pwd()));
335 return chain;
336 }
337
338
339 // read ESD files from the input list.
340 ifstream in;
341 in.open(filename);
342 TString esdfile;
343 while(in.good() && (nfiles--) ) {
344 in >> esdfile;
345 if (!esdfile.Contains("root")) continue; // protection
346 chain->Add(esdfile.Data());
347 }
348
349 in.close();
350
351 return chain;
352}