1 ///////////////////////////////////////////////////////////////////////////////
2 // Macro to setup AliPerformanceTask for
3 // TPC performance to be run on QA train
5 // By default 6 performance components are added to
7 // 1. AliPerformanceRes (TPC track resolution at DCA)
8 // 2. AliPerformanceResTPCInner (TPC track resolution at inner TPC wall)
9 // 3. AliPerformanceEff (TPC track reconstruction efficieny)
10 // 4. AliPerformanceDEdxTPCInner (TPC dEdx response - track parameters at TPC inner wall)
11 // 5. AliPerformanceDCA (TPC impact parameter resolution at DCA)
12 // 6. AliPerformanceTPC (TPC cluster and track information)
15 // To use these components one needs to have access to ESD and MC events
16 // and track references.
18 // Usage on the analysis train:
19 // #include "AddPerformanceTask.h"
20 // #include "PWG1/macros/AddPerformanceTask.C"
22 // gSystem->Load("libPWG1.so");
24 // AliAnalysisManager *mgr = new AliAnalysisManager("Post Reconstruction QA");
25 // gROOT->LoadMacro("$ALICE_ROOT/PWG1/macros/AddPerformanceTask.C")
26 // AddPerformanceTask(mgr,"ALL");
30 // TPC.PerformanceTask.root file with performance components is created.
32 // Each of the components contains THnSparse generic histograms which
33 // have to be analysed by using Analyse() function. Each component contains such function.
35 //24.04.2009 - J.Otwinowski@gsi.de
36 ///////////////////////////////////////////////////////////////////////////////
38 #if ! defined (__CINT__) || defined (__MAKECINT__)
39 #include <Riostream.h>
46 #include "AliAnalysisManager.h"
47 #include "PWG1/AliPerformanceTask.h"
48 #include "PWG1/AliPerformanceObject.h"
49 #include "PWG1/AliPerformanceEff.h"
50 #include "PWG1/AliPerformanceDEdx.h"
51 #include "PWG1/AliPerformanceTPC.h"
52 #include "PWG1/AliPerformanceDCA.h"
53 #include "PWG1/AliPerformanceRes.h"
54 #include "PWG1/AliMCInfoCuts.h"
55 #include "PWG1/AliRecInfoCuts.h"
56 #include "PWG1/macros/AddPerformanceTask.h"
59 Int_t ParseTPC(Char_t *tpc);
61 //____________________________________________
62 void AddPerformanceTask(AliAnalysisManager *mgr=0, Char_t *tpc="ALL")
65 Error("AddPerformanceTask","AliAnalysisManager not set!");
69 Int_t fSteerTPC = ParseTPC(tpc);
72 AliPerformanceTask *task = new AliPerformanceTask("Performance","TPC Performance");
74 if ( mgr->GetMCtruthEventHandler() ) task->SetUseMCInfo(kTRUE);
77 // Create TPC-ESD track reconstruction cuts
78 AliRecInfoCuts *pRecInfoCuts = new AliRecInfoCuts();
80 pRecInfoCuts->SetMaxDCAToVertexXY(3.0);
81 pRecInfoCuts->SetMaxDCAToVertexZ(3.0);
82 pRecInfoCuts->SetMinNClustersTPC(50);
83 pRecInfoCuts->SetMinNClustersITS(2);
84 pRecInfoCuts->SetHistogramsOn(kFALSE);
86 // Create TPC-MC track reconstruction cuts
87 AliMCInfoCuts *pMCInfoCuts = new AliMCInfoCuts();
89 pMCInfoCuts->SetMinTrackLength(50);
93 // Create performance objects for TPC and set cuts
97 TClass ctask; AliPerformanceObject *perf = 0x0;
98 for(Int_t icomp=0; icomp<NTPCTASKS; icomp++) {
99 if(!(TSTTPCBIT(fSteerTPC, icomp))) continue;
100 TString s(fgkTPCtaskClassName[icomp]);
101 if(s.CompareTo("AliPerformanceEff") == 0) {
102 task->AddPerformanceObject((perf = new AliPerformanceEff(fgkTPCtaskClassName[icomp],fgkTPCtaskClassName[icomp],kTPCMode,fHpt)));
103 } else if (s.CompareTo("AliPerformanceRes") == 0) {
104 task->AddPerformanceObject((perf = new AliPerformanceRes(fgkTPCtaskClassName[icomp],fgkTPCtaskClassName[icomp],kTPCMode,fHpt)));
105 } else if (s.CompareTo("AliPerformanceTPC") == 0) {
106 task->AddPerformanceObject((perf = new AliPerformanceTPC(fgkTPCtaskClassName[icomp],fgkTPCtaskClassName[icomp],kTPCMode,fHpt)));
107 } else if (s.CompareTo("AliPerformanceDCA") == 0) {
108 task->AddPerformanceObject((perf = new AliPerformanceDCA(fgkTPCtaskClassName[icomp],fgkTPCtaskClassName[icomp],kTPCMode,fHpt)));
110 Warning("No TPC at DCA mode for ",fgkTPCtaskClassName[icomp]);
112 perf->SetAliMCInfoCuts(pMCInfoCuts);
113 perf->SetAliRecInfoCuts(pRecInfoCuts);
117 for(Int_t icomp=0; icomp<NTPCTASKS; icomp++) {
118 if(!(TSTTPCBIT(fSteerTPC, icomp))) continue;
119 TString s(fgkTPCtaskClassName[icomp]);
120 if(s.CompareTo("AliPerformanceRes") == 0) {
121 task->AddPerformanceObject((perf = new AliPerformanceRes("AliPerformanceResTPCInner","AliPerformanceResTPCInner",kTPCInnerMode,fHpt)));
122 } else if (s.CompareTo("AliPerformanceDEdx") == 0) {
123 task->AddPerformanceObject((perf = new AliPerformanceDEdx("AliPerformanceDEdxTPCInner","AliPerformanceDEdxTPCInner",kTPCInnerMode,fHpt)));
125 Warning("No TPC at inner wall mode for ",fgkTPCtaskClassName[icomp]);
127 perf->SetAliMCInfoCuts(pMCInfoCuts);
128 perf->SetAliRecInfoCuts(pRecInfoCuts);
131 // Create containers for input
132 AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
133 mgr->ConnectInput(task, 0, cinput);
135 // Create containers for output
136 AliAnalysisDataContainer *coutput = mgr->CreateContainer("coutput", TList::Class(), AliAnalysisManager::kOutputContainer, Form("TPC.%s.root", task->GetName()));
137 mgr->ConnectOutput(task, 0, coutput);
139 // Enable debug printouts
140 mgr->SetDebugLevel(0);
143 //____________________________________________
144 Int_t ParseTPC(Char_t *tpc)
146 Printf("---------------------------------------");
147 Printf("TPC Performance Task Configuration Options:");
148 Printf("---------------------------------------");
149 for(int i=0; i<NTPCTASKS+1; i++) {
150 Printf("%s",fgkTPCtaskOpt[i]);
153 Printf("---------------------------------------");
154 Printf("Used Options:");
155 Printf("---------------------------------------");
157 Int_t fSteerTask = 0;
158 TObjArray *tasksArray = TString(tpc).Tokenize(" ");
159 for(Int_t isel = 0; isel < tasksArray->GetEntriesFast(); isel++){
160 TString s = (dynamic_cast<TObjString *>(tasksArray->UncheckedAt(isel)))->String();
161 if(s.CompareTo("ALL") == 0) {
163 for(Int_t itask = 0; itask < NTPCPERFORMANCE; itask++) SETTPCBIT(fSteerTask, itask);
166 else if(s.CompareTo("HPT") == 0) {
170 Bool_t foundOpt = kFALSE;
171 for(Int_t itask = 0; itask < NTPCTASKS; itask++) {
172 if(s.CompareTo(fgkTPCtaskOpt[itask]) != 0) continue;
173 SETTPCBIT(fSteerTask, itask); //SETTPCBIT(fSteerTask, 0);
175 Printf("%s", fgkTPCtaskOpt[itask]);
178 if(!foundOpt) Info("run.C", Form("TPC task %s not implemented (yet).", s.Data()));
181 Printf("---------------------------------------");