automatically write MC info into the trees when MC available
[u/mrichter/AliRoot.git] / PWGPP / macros / AddTrainPerformanceTRD.C
1 // Steer TRD QA train for Reconstruction (Clusterizer, Tracking and PID).\r
2 // \r
3 // Usage:\r
4 //   AddTrainPerformanceTRD.C(MC, friends, tasks)\r
5 //   tasks : "ALL" or one/more of the following:\r
6 //     "EFF"  : TRD Tracking Efficiency \r
7 //     "EFFC" : TRD Tracking Efficiency Combined (barrel + stand alone) - only in case of simulations\r
8 //     "MULT"  : TRD single track selection\r
9 //     "RES"  : TRD tracking Resolution\r
10 //     "CLRES": clusters Resolution\r
11 //     "CAL"  : TRD calibration\r
12 //     "ALGN" : TRD alignment\r
13 //     "PID"  : TRD PID - pion efficiency \r
14 //     "PIDR" : TRD PID - reference data\r
15 //     "DET"  : Basic TRD Detector checks\r
16 //     "NOFR" : Data set does not have AliESDfriends.root \r
17 //     "NOMC" : Data set does not have Monte Carlo Informations (real data), so all tasks which rely\r
18 //              on MC information are switched off\r
19 //\r
20 // In compiled mode : \r
21 // Don't forget to load first the libraries\r
22 // gSystem->Load("libMemStat.so")\r
23 // gSystem->Load("libMemStatGui.so")\r
24 // gSystem->Load("libANALYSIS.so")\r
25 // gSystem->Load("libANALYSISalice.so")\r
26 // gSystem->Load("libPWGPP.so");\r
27 //\r
28 // Authors:\r
29 //   Alex Bercuci (A.Bercuci@gsi.de) \r
30 //   Markus Fasel (m.Fasel@gsi.de) \r
31 \r
32 #if ! defined (__CINT__) || defined (__MAKECINT__)\r
33 //#ifndef __CINT__\r
34 #include <Riostream.h>\r
35 \r
36 #include "TStopwatch.h"\r
37 #include "TMemStat.h"\r
38 #include "TMemStatViewerGUI.h"\r
39 \r
40 #include "TROOT.h"\r
41 #include "TClass.h"\r
42 #include "TSystem.h"\r
43 #include "TString.h"\r
44 #include "TError.h"\r
45 #include "TChain.h"\r
46 #include "TGrid.h"\r
47 #include "TAlienCollection.h"\r
48 #include "TGridCollection.h"\r
49 #include "TGridResult.h"\r
50 #include "TGeoGlobalMagField.h"\r
51 \r
52 #include "AliMagF.h"\r
53 #include "AliTracker.h"\r
54 #include "AliLog.h"\r
55 #include "AliCDBManager.h"\r
56 #include "AliGRPManager.h"\r
57 #include "AliGeomManager.h"\r
58 #include "AliAnalysisManager.h"\r
59 #include "AliAnalysisDataContainer.h"\r
60 #include "AliMCEventHandler.h"\r
61 #include "AliESDInputHandler.h"\r
62 \r
63 #include "TRD/AliTRDtrackerV1.h"\r
64 #include "TRD/AliTRDcalibDB.h"\r
65 \r
66 #include "PWGPP/TRD/macros/AddTRDcheckESD.C"\r
67 #include "PWGPP/TRD/macros/AddTRDinfoGen.C"\r
68 #include "PWGPP/TRD/macros/AddTRDcheckDET.C"\r
69 #include "PWGPP/TRD/macros/AddTRDefficiency.C"\r
70 #include "PWGPP/TRD/macros/AddTRDresolution.C"\r
71 #include "PWGPP/TRD/macros/AddTRDcheckPID.C"\r
72 #include "PWGPP/TRD/macros/AddTRDcheckTRK.C"\r
73 #include "PWGPP/TRD/macros/AddTRDv0Monitor.C"\r
74 #endif\r
75 \r
76 TString opt("");\r
77 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);\r
78 Bool_t AddTrainPerformanceTRD(Char_t *trd="ALL", const Char_t *addMacroPath = "$ALICE_ROOT/PWGPP/TRD/macros")\r
79 {\r
80   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
81   if(!mgr) { \r
82     Error("AddTrainPerformanceTRD", "AliAnalysisManager not set!");\r
83     return kFALSE;\r
84   }\r
85 \r
86   // TRD data containers\r
87   AliAnalysisDataContainer *ci[AliTRDpwgppHelper::kNOutSlots];\r
88   AliAnalysisDataContainer *ce[5];\r
89 \r
90   Info("AddTrainPerformanceTRD", Form("Add Macros taken from %s", addMacroPath));\r
91   Info("AddTrainPerformanceTRD", Form("TRD wagons \"%s\"", trd));\r
92   Int_t bitmap = AliTRDpwgppHelper::ParseOptions(trd);\r
93   for(Int_t it=0; it<AliTRDpwgppHelper::kNTRDQATASKS; it++){\r
94     if(gROOT->LoadMacro(Form("%s/Add%s.C+", addMacroPath, TString(AliTRDpwgppHelper::TaskClassName(it))(3,20).Data()))) {\r
95       Error("AddTrainPerformanceTRD()", Form("Error loading %s task.", AliTRDpwgppHelper::TaskClassName(it)));\r
96       return kFALSE;\r
97     } \r
98     if(!AliTRDpwgppHelper::DoTask(it, bitmap)) continue;\r
99 \r
100     switch(it){\r
101     case AliTRDpwgppHelper::kCheckESD:\r
102       AddTRDcheckESD(mgr); break;\r
103     case AliTRDpwgppHelper::kInfoGen:\r
104       AddTRDinfoGen(mgr, 0, NULL, ci); break;\r
105     case AliTRDpwgppHelper::kCheckDET:\r
106       // map slots\r
107       ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel];\r
108       ce[1]=ci[AliTRDpwgppHelper::kTracksSA];\r
109       ce[2]=ci[AliTRDpwgppHelper::kTracksKink];\r
110       ce[3]=ci[AliTRDpwgppHelper::kEventInfo];\r
111       ce[4]=ci[AliTRDpwgppHelper::kClusters];\r
112       AddTRDcheckDET(mgr, bitmap, ce);\r
113       break;\r
114     case AliTRDpwgppHelper::kEfficiency:\r
115       // map slots\r
116       ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel];\r
117       ce[1]=ci[AliTRDpwgppHelper::kTracksITS];\r
118       ce[2]=ci[AliTRDpwgppHelper::kTracksKink];\r
119       ce[3]=ci[AliTRDpwgppHelper::kEventInfo];\r
120       ce[4]=ci[AliTRDpwgppHelper::kClusters];\r
121       AddTRDefficiency(mgr, bitmap, ce);\r
122       break;\r
123     case AliTRDpwgppHelper::kResolution:\r
124       // map slots\r
125       ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel];\r
126       ce[1]=ci[AliTRDpwgppHelper::kTracksITS];\r
127       ce[2]=ci[AliTRDpwgppHelper::kTracksKink];\r
128       ce[3]=ci[AliTRDpwgppHelper::kEventInfo];\r
129       ce[4]=ci[AliTRDpwgppHelper::kClusters];\r
130       AddTRDresolution(mgr, bitmap, ce); \r
131       break;\r
132     case AliTRDpwgppHelper::kCheckPID:\r
133       // map slots\r
134       ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel];\r
135       ce[1]=ci[AliTRDpwgppHelper::kEventInfo];\r
136       ce[2]=ci[AliTRDpwgppHelper::kV0List];\r
137       AddTRDcheckPID(mgr, bitmap, ce, &ce[3]);\r
138       break;\r
139     case AliTRDpwgppHelper::kCheckTRK:\r
140       // map slots\r
141       ce[0]=ci[AliTRDpwgppHelper::kTracksBarrel];\r
142       ce[1]=ci[AliTRDpwgppHelper::kEventInfo];\r
143       ce[2]=ci[AliTRDpwgppHelper::kClusters];\r
144       AddTRDcheckTRK(mgr, 0, ce);\r
145       break;\r
146     case AliTRDpwgppHelper::kV0Monitor:\r
147       // slots already mapped by checkPID\r
148       AddTRDv0Monitor(mgr, 0, ce);\r
149       break;\r
150     default:\r
151       Warning("AddTrainPerformanceTRD()", Form("No performance task registered at slot %d.", it)); \r
152     }\r
153   }\r
154   return kTRUE;\r
155 }\r
156 \r
157 const Char_t* Translate(Bool_t doCheckESD, Bool_t doCheckDET, Bool_t doEffic, Bool_t doResolution, Bool_t doCheckPID, Bool_t doCheckV0)\r
158 {\r
159   opt.Clear();\r
160   if( doCheckESD==kTRUE &&\r
161       doCheckDET==kTRUE &&\r
162       doEffic==kTRUE &&\r
163       doResolution==kTRUE &&\r
164       doCheckPID==kTRUE &&\r
165       doCheckV0==kTRUE\r
166   ){\r
167     opt="ALL";\r
168   } else {\r
169     Bool_t kINDENT(kFALSE);\r
170     if(doCheckESD){ \r
171       opt.Append("ESD");\r
172       kINDENT=kTRUE;\r
173     }\r
174     if(doCheckDET){ \r
175       if(kINDENT) opt.Append(" ");\r
176       opt.Append("DET"); \r
177       kINDENT = kTRUE;\r
178     }\r
179     if(doEffic){ \r
180       if(kINDENT) opt.Append(" ");\r
181       opt.Append("EFF");\r
182       kINDENT=kTRUE;\r
183     }\r
184     if(doResolution){ \r
185       if(kINDENT) opt.Append(" ");\r
186       opt.Append("RES");\r
187       kINDENT=kTRUE;\r
188     }\r
189     if(doCheckPID){ \r
190       if(kINDENT) opt.Append(" ");\r
191       opt.Append("PID");\r
192       kINDENT=kTRUE;\r
193     }\r
194     if(doCheckV0){ \r
195       if(kINDENT) opt.Append(" ");\r
196       opt.Append("V0");\r
197       kINDENT=kTRUE;\r
198     }\r
199   }\r
200 \r
201   return (const Char_t*)opt.Data();\r
202 }\r
203 \r
204 \r