1 ///////////////////////////////////////////////////////////////////////////////
2 // Macro to setup AliPerformanceTask for
3 // TPC performance QA to run on PWGPP QA train.
5 // Input: ESDs, ESDfriends (optional), Kinematics (optional), TrackRefs (optional)
6 // ESD and MC input handlers must be attached to AliAnalysisManager
7 // to run default configuration.
9 // By default 1 performance components are added to
11 // 0. AliPerformanceTPC (TPC cluster and track and event information)
12 // 1. AliPerformanceMatch (TPC and ITS/TRD matching and TPC eff w.r.t ITS)
13 // 2. AliPerformanceMatch (TPC and ITS/TRD matching and TPC eff w.r.t TPC)
14 // 3. AliPerformancedEdx (TPC dEdx information)
15 // 4. AliPerformanceRes (TPC track resolution w.r.t MC at DCA)
16 // 5. AliPerformanceEff (TPC track reconstruction efficiency, MC primaries)
17 // 6. AliPerformanceMatch (Comparison of TPC constrain and global tracking)
19 // Usage on the analysis train (default configuration):
20 // gSystem->Load("libANALYSIS");
21 // gSystem->Load("libANALYSISalice");
22 // gSystem->Load("libTPCcalib");
23 // gSystem->Load("libTender");
24 // gSystem->Load("libPWGPP");
26 // gROOT->LoadMacro("$ALICE_ROOT/PWGPP/TPC/macros/AddTaskPerformanceTPCdEdxQA.C");
27 // AliPerformanceTask *tpcQA = AddTaskPerformanceTPCdEdxQA("kFALSE","kTRUE","kFALSE","triggerClass",kFALSE);
30 // TPC.Performance.root file with TPC performance components is created.
32 // Each of the components contains THnSparse generic histograms which
33 // have to be analysed (post-analysis) by using Analyse() function.
34 // Each component contains such function.
36 //30.09.2010 - J.Otwinowski@gsi.de
37 //22.09.2011 - jochen@thaeder.de - Updated
38 ///////////////////////////////////////////////////////////////////////////////
40 //____________________________________________
41 AliPerformanceTask* AddTaskPerformanceTPCdEdxQA(Bool_t bUseMCInfo=kFALSE, Bool_t bUseESDfriend=kTRUE,
42 Bool_t highMult = kFALSE, const char *triggerClass=0,
43 Bool_t bUseHLT = kFALSE, Bool_t bUseTOF = kFALSE, Bool_t bTPCOnly = kFALSE,
44 Bool_t bDoEffTpcSec = kFALSE)
46 Char_t *taskName[] = {"TPC", "HLT"};
51 // Add AliPerformanceTask with TPC performance components
53 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
55 Error("AddTaskPerformanceTPCdEdxQA","AliAnalysisManager not set!");
59 TString type = mgr->GetInputEventHandler()->GetDataType();
60 if (!type.Contains("ESD")) {
61 Error("AddTaskPerformanceTPCdEdxQA", "ESD input handler needed!");
65 AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
66 if (!mcH && bUseMCInfo) {
67 Error("AddTaskPerformanceTPCdEdxQA", "MC input handler needed!");
75 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*>(mgr->GetInputEventHandler());
82 AliPerformanceTask *task = new AliPerformanceTask("PerformanceQA",Form("%s Performance",taskName[idx]));
84 Error("AddTaskPerformanceTPCdEdxQA", Form("%s performance task cannot be created!",taskName[idx]));
87 task->SetUseMCInfo(bUseMCInfo);
88 task->SetUseESDfriend(bUseESDfriend);
89 // task->SetUseTerminate(kFALSE);
90 task->SetUseHLT(bUseHLT);
93 // Add task to analysis manager
98 // Create TPC-ESD track reconstruction cuts
101 AliRecInfoCuts *pRecInfoCutsTPC = new AliRecInfoCuts();
102 if(pRecInfoCutsTPC) {
103 pRecInfoCutsTPC->SetMaxDCAToVertexXY(3.0);
104 pRecInfoCutsTPC->SetMaxDCAToVertexZ(3.0);
105 pRecInfoCutsTPC->SetRequireSigmaToVertex(kFALSE);
106 pRecInfoCutsTPC->SetRequireTPCRefit(kFALSE);
107 pRecInfoCutsTPC->SetAcceptKinkDaughters(kFALSE);
108 pRecInfoCutsTPC->SetMinNClustersTPC(70);
109 pRecInfoCutsTPC->SetMaxChi2PerClusterTPC(4.);
110 pRecInfoCutsTPC->SetDCAToVertex2D(kTRUE);
112 pRecInfoCutsTPC->SetHistogramsOn(kFALSE);
115 Error("AddTaskPerformanceTPCdEdxQA", "AliRecInfoCutsTPC cannot be created!");
120 // Create TPC-MC track reconstruction cuts
122 AliMCInfoCuts *pMCInfoCuts = new AliMCInfoCuts();
124 pMCInfoCuts->SetMinTrackLength(70);
127 Error("AddTaskPerformanceTPCdEdxQA", "AliMCInfoCuts cannot be created!");
132 // Create performance objects for TPC and set cuts
134 enum { kTPC = 0, kTPCITS, kConstrained, kTPCInner, kTPCOuter, kTPCSec };
139 AliPerformanceTPC *pCompTPC0 = new AliPerformanceTPC("AliPerformanceTPC","AliPerformanceTPC",kTPC,kFALSE,-1,highMult);
141 Error("AddTaskPerformanceTPCdEdxQA", "Cannot create AliPerformanceTPC");
143 pCompTPC0->SetAliRecInfoCuts(pRecInfoCutsTPC);
144 pCompTPC0->SetAliMCInfoCuts(pMCInfoCuts);
145 // pCompTPC0->SetUseTrackVertex(kFALSE);
146 pCompTPC0->SetUseTrackVertex(kTRUE);
147 pCompTPC0->SetUseHLT(bUseHLT);
148 pCompTPC0->SetUseTOFBunchCrossing(bUseTOF);
153 AliPerformanceMatch *pCompMatch1 = new AliPerformanceMatch("AliPerformanceMatchTPCITS","AliPerformanceMatchTPCITS",0,kFALSE);
155 Error("AddTaskPerformanceTPCdEdxQA", "Cannot create AliPerformanceMatchTPCITS");
157 pCompMatch1->SetAliRecInfoCuts(pRecInfoCutsTPC);
158 pCompMatch1->SetAliMCInfoCuts(pMCInfoCuts);
159 pCompMatch1->SetUseTOFBunchCrossing(bUseTOF);
165 AliPerformanceMatch *pCompMatch2 = new AliPerformanceMatch("AliPerformanceMatchITSTPC","AliPerformanceMatchITSTPC",1,kFALSE);
167 Error("AddTaskPerformanceTPCdEdxQA", "Cannot create AliPerformanceMatchITSTPC"); }
168 pCompMatch2->SetAliRecInfoCuts(pRecInfoCutsTPC);
169 pCompMatch2->SetAliMCInfoCuts(pMCInfoCuts);
170 pCompMatch2->SetUseTOFBunchCrossing(bUseTOF);
175 AliPerformanceDEdx *pCompDEdx3 = new AliPerformanceDEdx("AliPerformanceDEdxTPCInner","AliPerformanceDEdxTPCInner",kTPCInner,kFALSE);
177 Error("AddTaskPerformanceTPCdEdxQA", "Cannot create AliPerformanceDEdxTPCInner");
179 pCompDEdx3->SetAliRecInfoCuts(pRecInfoCutsTPC);
180 pCompDEdx3->SetAliMCInfoCuts(pMCInfoCuts);
181 //pCompDEdx3->SetUseTrackVertex(kFALSE);
182 pCompDEdx3->SetUseTrackVertex(kTRUE);
185 // Resolution ------------------------------------------------------------------------------------
188 AliPerformanceRes *pCompRes4 = new AliPerformanceRes("AliPerformanceRes",
189 "AliPerformanceRes", bTPCOnly == kTRUE ? kTPCInner : kTPC,kFALSE);
191 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceRes");
195 pCompRes4->SetAliRecInfoCuts(pRecInfoCutsTPC);
196 pCompRes4->SetAliMCInfoCuts(pMCInfoCuts);
197 pCompRes4->SetUseTrackVertex(bTPCOnly == kTRUE ? kFALSE : kTRUE);
200 // Efficiency ------------------------------------------------------------------------------------
203 AliPerformanceEff *pCompEff5 = new AliPerformanceEff("AliPerformanceEff",
204 "AliPerformanceEff",kTPC,kFALSE);
206 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceEff");
209 pCompEff5->SetAliRecInfoCuts(pRecInfoCutsTPC);
210 pCompEff5->SetAliMCInfoCuts(pMCInfoCuts);
211 pCompEff5->SetUseTrackVertex(bTPCOnly == kTRUE ? kFALSE : kTRUE);
213 AliPerformanceEff *pCompEff5Sec;
216 pCompEff5Sec = new AliPerformanceEff("AliPerformanceEffSec",
217 "AliPerformanceEffSec",kTPCSec,kFALSE);
219 Error("AddTaskPerformanceTPC", "Cannot create AliPerformanceEff");
222 pCompEff5Sec->SetAliRecInfoCuts(pRecInfoCutsTPC);
223 pCompEff5Sec->SetAliMCInfoCuts(pMCInfoCuts);
224 pCompEff5Sec->SetUseTrackVertex(bTPCOnly == kTRUE ? kFALSE : kTRUE);
228 // TPC Constrain to vertex
230 AliPerformanceMatch *pCompConstrain6 = new AliPerformanceMatch("AliPerformanceMatchTPCConstrain","AliPerformanceMatchTPCConstrain",2,kFALSE);
231 if(!pCompConstrain6) {
232 Error("AddTaskPerformanceTPCdEdxQA", "Cannot create AliPerformanceMatchTPCConstrain"); }
233 pCompConstrain6->SetAliRecInfoCuts(pRecInfoCutsTPC);
234 pCompConstrain6->SetAliMCInfoCuts(pMCInfoCuts);
235 pCompConstrain6->SetUseTOFBunchCrossing(bUseTOF);
240 // Add components to the performance task
243 pCompTPC0->SetTriggerClass(triggerClass);
244 pCompMatch1->SetTriggerClass(triggerClass);
245 pCompMatch2->SetTriggerClass(triggerClass);
246 pCompDEdx3->SetTriggerClass(triggerClass);
247 pCompConstrain6->SetTriggerClass(triggerClass);
249 task->AddPerformanceObject( pCompTPC0 );
250 task->AddPerformanceObject( pCompMatch1 );
251 task->AddPerformanceObject( pCompMatch2 );
252 task->AddPerformanceObject( pCompDEdx3 );
253 task->AddPerformanceObject( pCompConstrain6 );
255 task->AddPerformanceObject( pCompRes4 );
256 task->AddPerformanceObject( pCompEff5 );
257 if (bDoEffTpcSec) task->AddPerformanceObject( pCompEff5Sec );
261 // Create containers for input
263 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
266 // Create containers for output
269 AliAnalysisDataContainer *coutput = mgr->CreateContainer(Form("%sQA", taskName[idx]), TList::Class(),
270 AliAnalysisManager::kOutputContainer,
271 Form("%s:%s_%s", mgr->GetCommonFileName(), taskName[idx],task->GetName()));
274 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(Form("%sQASummary", taskName[idx]), TTree::Class(),
275 AliAnalysisManager::kParamContainer,
276 Form("trending.root:Summary%sQA", taskName[idx]));
278 mgr->ConnectOutput(task, 1, coutput);
279 mgr->ConnectOutput(task, 0, coutput2);