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__)
11 //#include "TSystem.h"
15 #include "AliAnalysisManager.h"
16 //#include "AliAnalysisDataContainer.h"
17 //#include "AliMCEventHandler.h"
18 //#include "AliESDInputHandler.h"
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"
32 Int_t ParseTPC(Char_t *tpc);
34 //____________________________________________
35 void AddPerformanceTask(AliAnalysisManager *mgr=0, Char_t *tpc="ALL")
38 Error("AddPerformanceTask","AliAnalysisManager not set!");
42 Int_t fSteerTPC = ParseTPC(tpc);
45 AliPerformanceTask *task = new AliPerformanceTask("Performance","TPC Performance");
47 if ( mgr->GetMCtruthEventHandler() ) task->SetUseMCInfo(kTRUE);
50 // Create TPC-ESD track reconstruction cuts
51 AliRecInfoCuts *pRecInfoCuts = new AliRecInfoCuts();
53 pRecInfoCuts->SetMaxDCAToVertexXY(3.0);
54 pRecInfoCuts->SetMaxDCAToVertexZ(3.0);
55 pRecInfoCuts->SetMinNClustersTPC(50);
56 pRecInfoCuts->SetMinNClustersITS(2);
57 pRecInfoCuts->SetHistogramsOn(kFALSE);
59 // Create TPC-MC track reconstruction cuts
60 AliMCInfoCuts *pMCInfoCuts = new AliMCInfoCuts();
62 pMCInfoCuts->SetMinTrackLength(70);
66 // Create performance objects for TPC and set cuts
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)));
83 Warning("No TPC at DCA mode for ",fgkTPCtaskClassName[icomp]);
85 perf->SetAliMCInfoCuts(pMCInfoCuts);
86 perf->SetAliRecInfoCuts(pRecInfoCuts);
89 new(&ctask) TClass(fgkTPCtaskClassName[icomp]);
90 task->AddPerformanceObject((perf = (AliPerformanceObject*)ctask.New()));
91 perf->SetAnalysisMode(kTPCMode);
92 perf->SetHptGenerator(fHpt);
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)));
105 Warning("No TPC at inner wall mode for ",fgkTPCtaskClassName[icomp]);
107 perf->SetAliMCInfoCuts(pMCInfoCuts);
108 perf->SetAliRecInfoCuts(pRecInfoCuts);
111 // Create containers for input
112 AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
113 mgr->ConnectInput(task, 0, cinput);
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);
119 // Enable debug printouts
120 mgr->SetDebugLevel(0);
123 //____________________________________________
124 Int_t ParseTPC(Char_t *tpc)
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]);
133 Printf("---------------------------------------");
134 Printf("Used Options:");
135 Printf("---------------------------------------");
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) {
143 for(Int_t itask = 0; itask < NTPCPERFORMANCE; itask++) SETTPCBIT(fSteerTask, itask);
146 else if(s.CompareTo("HPT") == 0) {
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);
155 Printf("%s", fgkTPCtaskOpt[itask]);
158 if(!foundOpt) Info("run.C", Form("TPC task %s not implemented (yet).", s.Data()));
161 Printf("---------------------------------------");