fix coding convention errors
[u/mrichter/AliRoot.git] / TRD / qaRec / run.C
1 // Steer TRD QA train for Reconstruction (Clusterizer, Tracking and PID).
2 // 
3 // Usage:
4 //   run.C(tasks, files)
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 //     "MULT"  : TRD single track selection
9 //     "RES"  : TRD tracking Resolution
10 //     "CLRES": clusters Resolution
11 //     "CAL"  : TRD calibration
12 //     "ALGN" : TRD alignment
13 //     "PID"  : TRD PID - pion efficiency 
14 //     "PIDR" : TRD PID - reference data
15 //     "DET"  : Basic TRD Detector checks
16 //     "NOFR" : Data set does not have AliESDfriends.root 
17 //     "NOMC" : Data set does not have Monte Carlo Informations (real data), so all tasks which rely
18 //              on MC information are switched off
19 //
20 // In compiled mode : 
21 // Don't forget to load first the libraries
22 // gSystem->Load("libMemStat.so")
23 // gSystem->Load("libMemStatGui.so")
24 // gSystem->Load("libANALYSIS.so")
25 // gSystem->Load("libANALYSISalice.so")
26 // gSystem->Load("libTRDqaRec.so")
27 // gSystem->Load("libPWG1.so");
28 // gSystem->Load("libNetx.so") ;
29 // gSystem->Load("libRAliEn.so");
30 //
31 // Authors:
32 //   Alex Bercuci (A.Bercuci@gsi.de) 
33 //   Markus Fasel (m.Fasel@gsi.de) 
34
35 #if ! defined (__CINT__) || defined (__MAKECINT__)
36 //#ifndef __CINT__
37 #include <Riostream.h>
38
39 #include "TStopwatch.h"
40 #include "TMemStat.h"
41 #include "TMemStatViewerGUI.h"
42
43 #include "TROOT.h"
44 #include "TClass.h"
45 #include "TSystem.h"
46 #include "TError.h"
47 #include "TChain.h"
48 #include "TGrid.h"
49 #include "TAlienCollection.h"
50 #include "TGridCollection.h"
51 #include "TGridResult.h"
52 #include "TGeoGlobalMagField.h"
53
54 #include "AliMagF.h"
55 #include "AliTracker.h"
56 #include "AliLog.h"
57 #include "AliCDBManager.h"
58 #include "AliGRPManager.h"
59 #include "AliGeomManager.h"
60 #include "AliAnalysisManager.h"
61 #include "AliAnalysisDataContainer.h"
62 #include "AliMCEventHandler.h"
63 #include "AliESDInputHandler.h"
64
65 #include "TRD/AliTRDtrackerV1.h"
66 #include "TRD/AliTRDcalibDB.h"
67
68 #include "TRD/qaRec/macros/AliTRDperformanceTrain.h"
69 #include "TRD/qaRec/macros/AddTRDcheckESD.C"
70 #include "TRD/qaRec/macros/AddTRDinfoGen.C"
71 #include "TRD/qaRec/macros/AddTRDcheckDET.C"
72 #include "TRD/qaRec/macros/AddTRDefficiency.C"
73 #include "TRD/qaRec/macros/AddTRDresolution.C"
74 #include "TRD/qaRec/macros/AddTRDcheckPID.C"
75
76 #include "PWG1/macros/AddPerformanceTask.C"
77 #endif
78
79 //#include "PWG1/macros/AddPerformanceTask.h"
80
81
82 Bool_t MEM = kFALSE;
83
84 TChain* MakeChainLST(const char* filename = 0x0);
85 TChain* MakeChainXML(const char* filename = 0x0);
86 void run(Char_t *trd="ALL", Char_t *tpc="ALL", const Char_t *files=0x0, Long64_t nev=1234567890, Long64_t first = 0)
87 {
88   TMemStat *mem = 0x0;
89   if(MEM){ 
90     gSystem->Load("libMemStat.so");
91     gSystem->Load("libMemStatGui.so");
92     mem = new TMemStat("new, gnubuildin");
93     mem->AddStamp("Start");
94   }
95   TStopwatch timer;
96   timer.Start();
97
98
99
100   // VERY GENERAL SETTINGS
101   AliLog::SetGlobalLogLevel(AliLog::kError);
102   if(gSystem->Load("libANALYSIS.so")<0) return;
103   if(gSystem->Load("libANALYSISalice.so")<0) return;
104
105   Bool_t fHasMCdata = HasReadMCData(trd);
106   //Bool_t fHasFriends = HasReadFriendData(trd);
107   
108   // INITIALIZATION OF RUNNING ENVIRONMENT
109   //TODO We should use the GRP if available similar to AliReconstruction::InitGRP()!
110   // initialize OCDB manager
111   AliCDBManager *cdbManager = AliCDBManager::Instance();
112   cdbManager->SetDefaultStorage("local://$ALICE_ROOT/OCDB");
113   cdbManager->SetSpecificStorage("GRP/GRP/Data", Form("local://%s",gSystem->pwd()));
114   cdbManager->SetRun(0);
115   cdbManager->SetCacheFlag(kFALSE);
116   // initialize magnetic field from the GRP manager.
117   AliGRPManager grpMan;
118   grpMan.ReadGRPEntry();
119   grpMan.SetMagField();
120   //AliRunInfo *runInfo = grpMan.GetRunInfo();
121   AliGeomManager::LoadGeometry();
122
123
124   // DEFINE DATA CHAIN
125   TChain *chain = 0x0;
126   if(!files) chain = MakeChainLST();
127   else{
128     TString fn(files);
129     if(fn.EndsWith("xml")) chain = MakeChainXML(files);
130     else chain = MakeChainLST(files);
131   }
132   if(!chain) return;
133   chain->SetBranchStatus("*FMD*",0);
134   chain->SetBranchStatus("*Calo*",0);
135   chain->SetBranchStatus("Tracks", 1);
136   chain->SetBranchStatus("ESDfriend*",1);
137   chain->Lookup();
138   chain->GetListOfFiles()->Print();
139   printf("\n ----> CHAIN HAS %d ENTRIES <----\n\n", (Int_t)chain->GetEntries());
140
141
142   // BUILD ANALYSIS MANAGER
143   AliAnalysisManager *mgr = new AliAnalysisManager("Post Reconstruction Calibration/QA");
144   AliVEventHandler *esdH = 0x0, *mcH = 0x0;
145   mgr->SetInputEventHandler(esdH = new AliESDInputHandler);
146   if(fHasMCdata) mgr->SetMCtruthEventHandler(mcH = new AliMCEventHandler());
147   //mgr->SetDebugLevel(10);
148
149
150
151 ///////////////////////////////////////////////////////////
152 ///////////////         TRD                     ///////////
153 ///////////////////////////////////////////////////////////
154   // TRD specific library
155   if(gSystem->Load("libTRDqaRec.so")<0) return;
156   // TRD data containers
157   AliAnalysisDataContainer *ci[] = {0x0, 0x0, 0x0};
158
159
160   // initialize TRD settings
161   AliTRDcalibDB *cal = AliTRDcalibDB::Instance();
162   AliTRDtrackerV1::SetNTimeBins(cal->GetNumberOfTimeBins());
163
164   // plug (set of) TRD wagons in the train
165   if(trd){
166     for(Int_t it=0; it<NTRDQATASKS; it++){
167       if(gROOT->LoadMacro(Form("$ALICE_ROOT/TRD/qaRec/macros/Add%s.C+", TString(fgkTRDtaskClassName[it])(3,20).Data()))) {
168         Error("run.C", Form("Error loading %s task.", fgkTRDtaskClassName[it]));
169         return;
170       } 
171   
172       switch(it){
173       case kCheckESD:
174         AddTRDcheckESD(mgr); break;
175       case kInfoGen:
176         AddTRDinfoGen(mgr, trd, 0x0, ci); break;
177       case kCheckDET:
178         AddTRDcheckDET(mgr, trd, ci); break;
179       case kEfficiency:
180         AddTRDefficiency(mgr, trd, ci); break;
181       case kResolution:
182         AddTRDresolution(mgr, trd, ci); break;
183       case kCheckPID:
184         AddTRDcheckPID(mgr, trd, ci); break;
185       default:
186         Warning("run.C", Form("No performance task registered at slot %d.", it)); 
187       }
188     }
189   }
190
191 ///////////////////////////////////////////////////////////
192 ///////////////         TPC                     ///////////
193 ///////////////////////////////////////////////////////////
194   if(gSystem->Load("libPWG1.so")<0) return;
195   
196   // BUILD STEERING TASK FOR TPC
197   if(tpc){
198     if(gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddPerformanceTask.C+")) {
199       Error("run.C", "Error loading AliPerformanceTask task.");
200       return;
201     } 
202     AddPerformanceTask(mgr, tpc);
203   }
204
205   if (!mgr->InitAnalysis()) return;
206   // verbosity
207   printf("\n\tRUNNING TRAIN FOR TASKS:\n");
208   mgr->GetTasks()->ls();
209   //mgr->PrintStatus();
210
211   mgr->StartAnalysis("local", chain, nev, first);
212
213   timer.Stop();
214   timer.Print();  
215
216   cal->Terminate();
217   TGeoGlobalMagField::Instance()->SetField(NULL);
218   delete cdbManager;
219
220   // verbosity
221   printf("\n\tCLEANING UP TRAIN:\n");
222   mgr->GetTasks()->Delete();
223
224   if(mcH) delete mcH;
225   delete esdH;
226   delete mgr;
227   delete chain;
228   if(MEM) delete mem;
229   if(MEM) TMemStatViewerGUI::ShowGUI();
230 }
231
232 //____________________________________________
233 TChain* MakeChainLST(const char* filename)
234 {
235   // Create the chain
236   TChain* chain = new TChain("esdTree");
237
238   if(!filename){
239     chain->Add(Form("%s/AliESDs.root", gSystem->pwd()));
240     return chain;
241   }
242
243
244   // read ESD files from the input list.
245   ifstream in;
246   in.open(filename);
247   TString esdfile;
248   while(in.good()) {
249     in >> esdfile;
250     if (!esdfile.Contains("root")) continue; // protection
251     chain->Add(esdfile.Data());
252   }
253
254   in.close();
255
256   return chain;
257 }
258
259 //____________________________________________
260 TChain* MakeChainXML(const char* xmlfile)
261 {
262   if (!TFile::Open(xmlfile)) {
263     Error("MakeChainXML", Form("No file %s was found", xmlfile));
264     return 0x0;
265   }
266
267   if(gSystem->Load("libNetx.so")<0) return 0x0;
268   if(gSystem->Load("libRAliEn.so")<0) return 0x0;
269   TGrid::Connect("alien://") ;
270
271   TGridCollection *collection = (TGridCollection*) TAlienCollection::Open(xmlfile);
272   if (!collection) {
273     Error("MakeChainXML", Form("No collection found in %s", xmlfile)) ; 
274     return 0x0; 
275   }
276   //collection->CheckIfOnline();
277
278   TGridResult* result = collection->GetGridResult("",0 ,0);
279   if(!result->GetEntries()){
280     Error("MakeChainXML", Form("No entries found in %s", xmlfile)) ; 
281     return 0x0; 
282   }
283   // Makes the ESD chain 
284   TChain* chain = new TChain("esdTree");
285   for (Int_t idx = 0; idx < result->GetEntries(); idx++) {
286     chain->Add(result->GetKey(idx, "turl")); 
287   }
288   return chain;
289 }