]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/macros/AddPerformanceTask.C
dd42c9b1ff63f099b49371442d4b496c13513433
[u/mrichter/AliRoot.git] / PWG1 / macros / AddPerformanceTask.C
1 ///////////////////////////////////////////////////////////////////////////////
2 // Macro to setup AliPerformanceTask for 
3 // TPC performance to be run on QA train
4 // 24.04.2009 -  J.Otwinowski@gsi.de
5 ///////////////////////////////////////////////////////////////////////////////
6 #if ! defined (__CINT__) || defined (__MAKECINT__)
7 #include <Riostream.h>
8
9 #include "TROOT.h"
10 #include "TClass.h"
11 //#include "TSystem.h"
12 #include "TError.h"
13
14 #include "AliLog.h"
15 #include "AliAnalysisManager.h"
16 //#include "AliAnalysisDataContainer.h"
17 //#include "AliMCEventHandler.h"
18 //#include "AliESDInputHandler.h"
19
20 #include "PWG1/AliPerformanceTask.h"
21 #include "PWG1/AliPerformanceObject.h"
22 #include "PWG1/AliPerformanceEff.h"
23 #include "PWG1/AliPerformanceDEdx.h"
24 #include "PWG1/AliPerformanceTPC.h"
25 #include "PWG1/AliPerformanceDCA.h"
26 #include "PWG1/AliPerformanceRes.h"
27 #include "PWG1/AliMCInfoCuts.h"
28 #include "PWG1/AliRecInfoCuts.h"
29 #include "PWG1/macros/AddPerformanceTask.h"
30 #endif
31
32 Int_t ParseTPC(Char_t *tpc);
33
34 //____________________________________________
35 void AddPerformanceTask(AliAnalysisManager *mgr=0, Char_t *tpc="ALL")
36 {
37   if(!mgr) { 
38     Error("AddPerformanceTask","AliAnalysisManager not set!");
39     return;
40   }
41   // parse options
42   Int_t fSteerTPC = ParseTPC(tpc);
43
44   // Add task
45   AliPerformanceTask *task = new AliPerformanceTask("Performance","TPC Performance");
46   if (!task) return;
47   if ( mgr->GetMCtruthEventHandler() ) task->SetUseMCInfo(kTRUE);
48   mgr->AddTask(task);
49
50   // Create TPC-ESD track reconstruction cuts
51   AliRecInfoCuts *pRecInfoCuts = new AliRecInfoCuts(); 
52   if(pRecInfoCuts) {
53     pRecInfoCuts->SetMaxDCAToVertexXY(3.0);
54     pRecInfoCuts->SetMaxDCAToVertexZ(3.0);
55     pRecInfoCuts->SetMinNClustersTPC(50);
56     pRecInfoCuts->SetMinNClustersITS(2);
57     pRecInfoCuts->SetHistogramsOn(kFALSE); 
58   }
59   // Create TPC-MC track reconstruction cuts
60   AliMCInfoCuts  *pMCInfoCuts = new AliMCInfoCuts();
61   if(pMCInfoCuts) {
62     pMCInfoCuts->SetMinTrackLength(70);
63   }
64
65   //
66   // Create performance objects for TPC and set cuts 
67   //
68
69   // TPC at DCA
70   TClass ctask; AliPerformanceObject *perf = 0x0;
71   for(Int_t icomp=0; icomp<NTPCTASKS; icomp++) {
72     if(!(TSTTPCBIT(fSteerTPC, icomp))) continue;
73     TString  s(fgkTPCtaskClassName[icomp]);
74     if(s.CompareTo("AliPerformanceEff") == 0) {
75       task->AddPerformanceObject((perf = new AliPerformanceEff(fgkTPCtaskClassName[icomp],fgkTPCtaskClassName[icomp],kTPCMode,fHpt)));
76     } else if (s.CompareTo("AliPerformanceRes") == 0) {
77       task->AddPerformanceObject((perf = new AliPerformanceRes(fgkTPCtaskClassName[icomp],fgkTPCtaskClassName[icomp],kTPCMode,fHpt)));
78     } else if (s.CompareTo("AliPerformanceTPC") == 0) {
79       task->AddPerformanceObject((perf = new AliPerformanceTPC(fgkTPCtaskClassName[icomp],fgkTPCtaskClassName[icomp],kTPCMode,fHpt)));
80     } else if (s.CompareTo("AliPerformanceDCA") == 0) {
81       task->AddPerformanceObject((perf = new AliPerformanceDCA(fgkTPCtaskClassName[icomp],fgkTPCtaskClassName[icomp],kTPCMode,fHpt)));
82     } else {
83       Warning("No TPC at DCA mode for ",fgkTPCtaskClassName[icomp]);
84     }
85     perf->SetAliMCInfoCuts(pMCInfoCuts);
86     perf->SetAliRecInfoCuts(pRecInfoCuts);
87
88     /*
89     new(&ctask) TClass(fgkTPCtaskClassName[icomp]);
90     task->AddPerformanceObject((perf = (AliPerformanceObject*)ctask.New()));
91     perf->SetAnalysisMode(kTPCMode);
92     perf->SetHptGenerator(fHpt);
93     */
94   }
95
96   // TPC at inner wall
97   for(Int_t icomp=0; icomp<NTPCTASKS; icomp++) {
98     if(!(TSTTPCBIT(fSteerTPC, icomp))) continue;
99     TString  s(fgkTPCtaskClassName[icomp]);
100     if(s.CompareTo("AliPerformanceRes") == 0) {
101       task->AddPerformanceObject((perf = new AliPerformanceRes("AliPerformanceResTPCinner","AliPerformanceResTPCinner",kTPCInnerMode,fHpt)));
102     } else if (s.CompareTo("AliPerformanceDEdx") == 0) {
103       task->AddPerformanceObject((perf = new AliPerformanceDEdx("AliPerformanceDEdxTPCInner","AliPerformanceDEdxTPCInner",kTPCInnerMode,fHpt)));
104     } else {
105       Warning("No TPC at inner wall mode for ",fgkTPCtaskClassName[icomp]);
106     } 
107     perf->SetAliMCInfoCuts(pMCInfoCuts);
108     perf->SetAliRecInfoCuts(pRecInfoCuts);
109   }
110
111   // Create containers for input
112   AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
113   mgr->ConnectInput(task, 0, cinput);
114
115   // Create containers for output
116   AliAnalysisDataContainer *coutput = mgr->CreateContainer("coutput", TList::Class(), AliAnalysisManager::kOutputContainer, Form("TPC.%s.root", task->GetName()));
117   mgr->ConnectOutput(task, 0, coutput);
118
119   // Enable debug printouts
120   mgr->SetDebugLevel(0);
121 }
122
123 //____________________________________________
124 Int_t ParseTPC(Char_t *tpc)
125 {
126   Printf("---------------------------------------");
127   Printf("TPC Performance Task Configuration Options:");
128   Printf("---------------------------------------");
129   for(int i=0; i<NTPCTASKS+1; i++) {
130     Printf("%s",fgkTPCtaskOpt[i]);
131   } 
132   Printf("%s","HPT");
133   Printf("---------------------------------------");
134   Printf("Used Options:");
135   Printf("---------------------------------------");
136
137   Int_t fSteerTask = 0;
138   TObjArray *tasksArray = TString(tpc).Tokenize(" ");
139   for(Int_t isel = 0; isel < tasksArray->GetEntriesFast(); isel++){
140     TString s = (dynamic_cast<TObjString *>(tasksArray->UncheckedAt(isel)))->String();
141     if(s.CompareTo("ALL") == 0) {
142       Printf("%s","ALL");
143       for(Int_t itask = 0; itask < NTPCPERFORMANCE; itask++) SETTPCBIT(fSteerTask, itask);
144       continue;
145     }
146     else if(s.CompareTo("HPT") == 0) {
147       fHpt = kTRUE;
148       Printf("%s","HPT");
149     } else { 
150       Bool_t foundOpt = kFALSE;  
151       for(Int_t itask = 0; itask < NTPCTASKS; itask++) {
152         if(s.CompareTo(fgkTPCtaskOpt[itask]) != 0) continue;
153         SETTPCBIT(fSteerTask, itask); //SETTPCBIT(fSteerTask, 0);
154         foundOpt = kTRUE;
155         Printf("%s", fgkTPCtaskOpt[itask]);
156         break;
157       }
158       if(!foundOpt) Info("run.C", Form("TPC task %s not implemented (yet).", s.Data()));
159     }
160   }
161   Printf("---------------------------------------");
162   return fSteerTask;
163 }