]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/JetTasks/AliPWG4HighPtQAMC.cxx
AliTPCtrackerMI.cxx
[u/mrichter/AliRoot.git] / PWG4 / JetTasks / AliPWG4HighPtQAMC.cxx
CommitLineData
fdceab34 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16//-----------------------------------------------------------------------
17// This class compares the global reconstruction with the MC information
18// Momentum resolution is stored as function of track cuts and pt.
19// Output: Histograms for different set of cuts
20//-----------------------------------------------------------------------
21// Author : Marta Verweij - UU
22//-----------------------------------------------------------------------
23
df943115 24#ifndef ALIPWG4HighPtQAMC_CXX
25#define ALIPWG4HighPtQAMC_CXX
26
fdceab34 27#include "AliPWG4HighPtQAMC.h"
28
29#include "TH1.h"
30#include "TH2.h"
31#include "TH3.h"
32#include "TList.h"
33#include "TChain.h"
34#include "TH3F.h"
35#include "AliAnalysisManager.h"
36#include "AliESDInputHandler.h"
37#include "AliMCEvent.h"
38#include "AliMCEventHandler.h"
39#include "AliStack.h"
40#include "AliESDtrack.h"
41#include "AliESDtrackCuts.h"
42#include "AliExternalTrackParam.h"
df943115 43#include "AliLog.h"
fdceab34 44
45using namespace std; //required for resolving the 'cout' symbol
46
47ClassImp(AliPWG4HighPtQAMC)
48
49AliPWG4HighPtQAMC::AliPWG4HighPtQAMC(): AliAnalysisTask("AliPWG4HighPtQAMC", ""),
50 fESD(0),
51 fTrackCuts(0),
52 fTrackCutsITS(0),
df943115 53 fNEvent(0),
54 fPtAll(0),
55 fPtSel(0),
fdceab34 56 fPtAllminPtMCvsPtAll(0),
57 fPtAllminPtMCvsPtAllNPointTPC(0),
58 fPtAllminPtMCvsPtAllDCAR(0),
59 fPtAllminPtMCvsPtAllDCAZ(0),
60 fPtAllminPtMCvsPtAllPhi(0),
61 fPtAllminPtMCvsPtAllNPointITS(0),
62 fPtAllminPtMCvsPtAllNSigmaToVertex(0),
63 fPtAllminPtMCvsPtAllChi2C(0),
64 fPtAllminPtMCvsPtAllRel1PtUncertainty(0),
65 fPtAllMC(0),
66 fPtSelMC(0),
67 fPtSelMCITS(0),
68 fHistList(0),
69 fPtSelITS(0),
70 fPtITSminPtMCvsPtITS(0),
71 fPtITSminPtMCvsPtITSNPointTPC(0),
72 fPtITSminPtMCvsPtITSDCAR(0),
73 fPtITSminPtMCvsPtITSDCAZ(0),
74 fPtITSminPtMCvsPtITSPhi(0),
75 fPtITSminPtMCvsPtITSNPointITS(0),
76 fPtITSminPtMCvsPtITSNSigmaToVertex(0),
77 fPtITSminPtMCvsPtITSChi2C(0),
78 fPtITSminPtMCvsPtITSRel1PtUncertainty(0),
79 fHistListITS(0)
80{
df943115 81
fdceab34 82}
83//________________________________________________________________________
84AliPWG4HighPtQAMC::AliPWG4HighPtQAMC(const char *name):
85 AliAnalysisTask(name, ""),
86 fESD(0),
87 fTrackCuts(),
88 fTrackCutsITS(),
df943115 89 fNEvent(0),
90 fPtAll(0),
91 fPtSel(0),
fdceab34 92 fPtAllminPtMCvsPtAll(0),
93 fPtAllminPtMCvsPtAllNPointTPC(0),
94 fPtAllminPtMCvsPtAllDCAR(0),
95 fPtAllminPtMCvsPtAllDCAZ(0),
96 fPtAllminPtMCvsPtAllPhi(0),
97 fPtAllminPtMCvsPtAllNPointITS(0),
98 fPtAllminPtMCvsPtAllNSigmaToVertex(0),
99 fPtAllminPtMCvsPtAllChi2C(0),
100 fPtAllminPtMCvsPtAllRel1PtUncertainty(0),
101 fPtAllMC(0),
102 fPtSelMC(0),
103 fPtSelMCITS(0),
104 fHistList(0),
105 fPtSelITS(0),
106 fPtITSminPtMCvsPtITS(0),
107 fPtITSminPtMCvsPtITSNPointTPC(0),
108 fPtITSminPtMCvsPtITSDCAR(0),
109 fPtITSminPtMCvsPtITSDCAZ(0),
110 fPtITSminPtMCvsPtITSPhi(0),
111 fPtITSminPtMCvsPtITSNPointITS(0),
112 fPtITSminPtMCvsPtITSNSigmaToVertex(0),
113 fPtITSminPtMCvsPtITSChi2C(0),
114 fPtITSminPtMCvsPtITSRel1PtUncertainty(0),
115 fHistListITS(0)
116{
117 //
118 // Constructor. Initialization of Inputs and Outputs
119 //
df943115 120 AliDebug(2,Form("AliPWG4HighPtQAMC","Calling Constructor"));
fdceab34 121 // Input slot #0 works with a TChain ESD
122 DefineInput(0, TChain::Class());
123 // Output slot #0 writes into a TList
124 DefineOutput(0, TList::Class());
125 // Output slot #1 writes into a TList
126 DefineOutput(1, TList::Class());
127 // Output slot #2 writes into a TList
128 DefineOutput(2, TList::Class());
df943115 129}
fdceab34 130
131//________________________________________________________________________
132void AliPWG4HighPtQAMC::ConnectInputData(Option_t *)
133{
134 // Connect ESD here
135 // Called once
df943115 136 AliDebug(2,Form(">> AliPWG4HighPtSpectra::ConnectInputData \n"));
fdceab34 137 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
138 if (!tree) {
df943115 139 AliDebug(2,Form("ERROR: Could not read chain from input slot 0"));
fdceab34 140 } else {
141
142 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
143
144 if (!esdH) {
df943115 145 AliDebug(2,Form("ERROR: Could not get ESDInputHandler"));
fdceab34 146 } else
147 fESD = esdH->GetEvent();
148 }
149}
150
fdceab34 151//________________________________________________________________________
152void AliPWG4HighPtQAMC::CreateOutputObjects() {
153 //Create output objects
df943115 154 AliDebug(2,Form(">> AliPWG4HighPtQATPConly::CreateOutputObjects \n"));
155
156 Bool_t oldStatus = TH1::AddDirectoryStatus();
157 TH1::AddDirectory(kFALSE);
158
fdceab34 159 OpenFile(0);
160 fHistList = new TList();
161 OpenFile(1);
162 fHistListITS = new TList();
163
164 Int_t fgkNPhiBins=18;
165 Float_t kMinPhi = 0.;
166 Float_t kMaxPhi = 2.*TMath::Pi();
167
168 Int_t fgkNPtBins=98;
169 Float_t fgkPtMin=2.;
170 Float_t fgkPtMax=100.;
171 Int_t fgkResPtBins=40;
172
173 fNEvent = new TH1F("fNEvent","NEvent",1,-0.5,0.5);
174 fHistList->Add(fNEvent);
175 fPtAll = new TH1F("fPtAll","PtAll",fgkNPtBins, fgkPtMin, fgkPtMax);
176 fHistList->Add(fPtAll);
177 fPtSel = new TH1F("fPtSel","PtSel",fgkNPtBins, fgkPtMin, fgkPtMax);
178 fHistList->Add(fPtSel);
179
180 fPtAllminPtMCvsPtAll = new TH2F("fPtAllminPtMCvsPtAll","PtAllminPtMCvsPtAll",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.);
181 fPtAllminPtMCvsPtAll->SetXTitle("p_{t}^{MC}");
182 fPtAllminPtMCvsPtAll->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
183 fHistList->Add(fPtAllminPtMCvsPtAll);
184
185 fPtAllminPtMCvsPtAllNPointTPC = new TH3F("fPtAllminPtMCvsPtAllNPointTPC","PtAllminPtMCvsPtAllNPointTPC",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,160,0.5,160.5);
186 fPtAllminPtMCvsPtAllNPointTPC->SetXTitle("p_{t}^{MC}");
187 fPtAllminPtMCvsPtAllNPointTPC->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
188 fPtAllminPtMCvsPtAllNPointTPC->SetZTitle("N_{point,TPC}");
189 fHistList->Add(fPtAllminPtMCvsPtAllNPointTPC);
190
191 fPtAllminPtMCvsPtAllDCAR = new TH3F("fPtAllminPtMCvsPtAllDCAR","PtAllminPtMCvsPtAllDCAR",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,20,-1.,1.);
192 fPtAllminPtMCvsPtAllDCAR->SetXTitle("p_{t}^{MC}");
193 fPtAllminPtMCvsPtAllDCAR->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
194 fPtAllminPtMCvsPtAllDCAR->SetZTitle("DCA_{R}");
195 fHistList->Add(fPtAllminPtMCvsPtAllDCAR);
196
197 fPtAllminPtMCvsPtAllDCAZ = new TH3F("fPtAllminPtMCvsPtAllDCAZ","PtAllminPtMCvsPtAllDCAZ",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,40,-2.,2.);
198 fPtAllminPtMCvsPtAllDCAZ->SetXTitle("p_{t}^{MC}");
199 fPtAllminPtMCvsPtAllDCAZ->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
200 fPtAllminPtMCvsPtAllDCAZ->SetZTitle("DCA_{Z}");
201 fHistList->Add(fPtAllminPtMCvsPtAllDCAZ);
202
203 fPtAllminPtMCvsPtAllPhi = new TH3F("fPtAllminPtMCvsPtAllPhi","PtAllminPtMCvsPtAllPhi",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,fgkNPhiBins,kMinPhi,kMaxPhi);
204 fPtAllminPtMCvsPtAllPhi->SetXTitle("p_{t}^{MC}");
205 fPtAllminPtMCvsPtAllPhi->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
206 fPtAllminPtMCvsPtAllPhi->SetZTitle("#phi");
207 fHistList->Add(fPtAllminPtMCvsPtAllPhi);
208
209 fPtAllminPtMCvsPtAllNPointITS = new TH3F("fPtAllminPtMCvsPtAllNPointITS","PtAllminPtMCvsPtAllNPointITS",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,9,-0.5,8.5);
210 fPtAllminPtMCvsPtAllNPointITS->SetXTitle("p_{t}^{MC}");
211 fPtAllminPtMCvsPtAllNPointITS->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
212 fPtAllminPtMCvsPtAllNPointITS->SetZTitle("N_{point,ITS}}");
213 fHistList->Add(fPtAllminPtMCvsPtAllNPointITS);
214
215 fPtAllminPtMCvsPtAllNSigmaToVertex = new TH3F("fPtAllminPtMCvsPtAllNSigmaToVertex","PtAllminPtMCvsPtAllNSigmaToVertex",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,40,0.,8.);
216 fPtAllminPtMCvsPtAllNSigmaToVertex->SetXTitle("p_{t}^{MC}");
217 fPtAllminPtMCvsPtAllNSigmaToVertex->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
218 fPtAllminPtMCvsPtAllNSigmaToVertex->SetZTitle("N#sigma to vertex");
219 fHistList->Add(fPtAllminPtMCvsPtAllNSigmaToVertex);
220
221 fPtAllminPtMCvsPtAllChi2C = new TH3F("fPtAllminPtMCvsPtAllChi2C","PtAllminPtMCvsPtAllChi2C",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,20,0.,10.);
222 fPtAllminPtMCvsPtAllChi2C->SetXTitle("p_{t}^{MC}");
223 fPtAllminPtMCvsPtAllChi2C->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
224 fPtAllminPtMCvsPtAllChi2C->SetZTitle("Constrained #chi^{2}");
225 fHistList->Add(fPtAllminPtMCvsPtAllChi2C);
226
227 fPtAllminPtMCvsPtAllRel1PtUncertainty = new TH3F("fPtAllminPtMCvsPtAllRel1PtUncertainty","PtAllminPtMCvsPtAllRel1PtUncertainty",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,30,0.,0.3);
228 fPtAllminPtMCvsPtAllRel1PtUncertainty->SetXTitle("p_{t}^{MC}");
229 fPtAllminPtMCvsPtAllRel1PtUncertainty->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
230 fPtAllminPtMCvsPtAllRel1PtUncertainty->SetZTitle("Rel1PtUncertainty");
231 fHistList->Add(fPtAllminPtMCvsPtAllRel1PtUncertainty);
232
233 //ITSrefit
234 fPtSelITS = new TH1F("fPtSelITSrefit","PtSel",fgkNPtBins, fgkPtMin, fgkPtMax);
235 fHistListITS->Add(fPtSelITS);
236
237 fPtITSminPtMCvsPtITS = new TH2F("fPtITSminPtMCvsPtITS","PtITSminPtMCvsPtITS",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.);
238 fPtITSminPtMCvsPtITS->SetXTitle("p_{t}^{MC}");
239 fPtITSminPtMCvsPtITS->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
240 fHistListITS->Add(fPtITSminPtMCvsPtITS);
241
242 fPtITSminPtMCvsPtITSNPointTPC = new TH3F("fPtITSminPtMCvsPtITSNPointTPC","PtITSminPtMCvsPtITSNPointTPC",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,160,0.5,160.5);
243 fPtITSminPtMCvsPtITSNPointTPC->SetXTitle("p_{t}^{MC}");
244 fPtITSminPtMCvsPtITSNPointTPC->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
245 fPtITSminPtMCvsPtITSNPointTPC->SetZTitle("N_{point,TPC}");
246 fHistListITS->Add(fPtITSminPtMCvsPtITSNPointTPC);
247
248 fPtITSminPtMCvsPtITSDCAR = new TH3F("fPtITSminPtMCvsPtITSDCAR","PtITSminPtMCvsPtITSDCAR",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,20,-1.,1.);
249 fPtITSminPtMCvsPtITSDCAR->SetXTitle("p_{t}^{MC}");
250 fPtITSminPtMCvsPtITSDCAR->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
251 fPtITSminPtMCvsPtITSDCAR->SetZTitle("DCA_{R}");
252 fHistListITS->Add(fPtITSminPtMCvsPtITSDCAR);
253
254 fPtITSminPtMCvsPtITSDCAZ = new TH3F("fPtITSminPtMCvsPtITSDCAZ","PtITSminPtMCvsPtITSDCAZ",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,40,-2.,2.);
255 fPtITSminPtMCvsPtITSDCAZ->SetXTitle("p_{t}^{MC}");
256 fPtITSminPtMCvsPtITSDCAZ->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
257 fPtITSminPtMCvsPtITSDCAZ->SetZTitle("DCA_{Z}");
258 fHistListITS->Add(fPtITSminPtMCvsPtITSDCAZ);
259
260 fPtITSminPtMCvsPtITSPhi = new TH3F("fPtITSminPtMCvsPtITSPhi","PtITSminPtMCvsPtITSPhi",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,fgkNPhiBins,kMinPhi,kMaxPhi);
261 fPtITSminPtMCvsPtITSPhi->SetXTitle("p_{t}^{MC}");
262 fPtITSminPtMCvsPtITSPhi->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
263 fPtITSminPtMCvsPtITSPhi->SetZTitle("#phi");
264 fHistListITS->Add(fPtITSminPtMCvsPtITSPhi);
265
266 fPtITSminPtMCvsPtITSNPointITS = new TH3F("fPtITSminPtMCvsPtITSNPointITS","PtITSminPtMCvsPtITSNPointITS",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,9,-0.5,8.5);
267 fPtITSminPtMCvsPtITSNPointITS->SetXTitle("p_{t}^{MC}");
268 fPtITSminPtMCvsPtITSNPointITS->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})}");
269 fPtITSminPtMCvsPtITSNPointITS->SetZTitle("N_{point,ITS}}");
270 fHistListITS->Add(fPtITSminPtMCvsPtITSNPointITS);
271
272 fPtITSminPtMCvsPtITSNSigmaToVertex = new TH3F("fPtITSminPtMCvsPtITSNSigmaToVertex","PtITSminPtMCvsPtITSNSigmaToVertex",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,40,0.,8.);
273 fPtITSminPtMCvsPtITSNSigmaToVertex->SetXTitle("p_{t}^{MC}");
274 fPtITSminPtMCvsPtITSNSigmaToVertex->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
275 fPtITSminPtMCvsPtITSNSigmaToVertex->SetZTitle("N#sigma to vertex");
276 fHistListITS->Add(fPtITSminPtMCvsPtITSNSigmaToVertex);
277
278 fPtITSminPtMCvsPtITSChi2C = new TH3F("fPtITSminPtMCvsPtITSChi2C","PtITSminPtMCvsPtITSChi2C",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,20,0.,10.);
279 fPtITSminPtMCvsPtITSChi2C->SetXTitle("p_{t}^{MC}");
280 fPtITSminPtMCvsPtITSChi2C->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
281 fPtITSminPtMCvsPtITSChi2C->SetZTitle("Constrained #chi^{2}");
282 fHistListITS->Add(fPtITSminPtMCvsPtITSChi2C);
283
284 fPtITSminPtMCvsPtITSRel1PtUncertainty = new TH3F("fPtITSminPtMCvsPtITSRel1PtUncertainty","PtITSminPtMCvsPtITSRel1PtUncertainty",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,30,0.,0.3);
285 fPtITSminPtMCvsPtITSRel1PtUncertainty->SetXTitle("p_{t}^{MC}");
286 fPtITSminPtMCvsPtITSRel1PtUncertainty->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
287 fPtITSminPtMCvsPtITSRel1PtUncertainty->SetZTitle("Rel1PtUncertainty");
288 fHistListITS->Add(fPtITSminPtMCvsPtITSRel1PtUncertainty);
289
290 fPtAllMC = new TH1F("fPtAllMC","PtAll",fgkNPtBins, fgkPtMin, fgkPtMax);
291 fHistList->Add(fPtAllMC);
292 fPtSelMC = new TH1F("fPtSelMC","PtSel",fgkNPtBins, fgkPtMin, fgkPtMax);
293 fHistList->Add(fPtSelMC);
294 fPtSelMCITS = new TH1F("fPtSelMCITS","PtSel",fgkNPtBins, fgkPtMin, fgkPtMax);
295 fHistList->Add(fPtSelMCITS);
296
df943115 297 TH1::AddDirectory(oldStatus);
298
fdceab34 299}
300//________________________________________________________________________
301void AliPWG4HighPtQAMC::Exec(Option_t *) {
302 // Main loop
303 // Called for each event
df943115 304 AliDebug(2,Form(">> AliPWG4HighPtQATPConly::Exec \n"));
fdceab34 305
306 if (!fESD) {
df943115 307 AliDebug(2,Form("ERROR: fESD not available"));
fdceab34 308 return;
309 }
310
311 AliMCEventHandler* eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
312 if (!eventHandler) {
df943115 313 AliDebug(2,Form("ERROR: Could not retrieve MC event handler"));
fdceab34 314 return;
315 }
316
317 AliMCEvent* mcEvent = eventHandler->MCEvent();
318 if (!mcEvent) {
df943115 319 AliDebug(2,Form("ERROR: Could not retrieve MC event"));
fdceab34 320 return;
321 }
322
df943115 323 AliDebug(2,Form("MC particles: %d", mcEvent->GetNumberOfTracks()));
fdceab34 324
325 if (!fESD) {
df943115 326 AliDebug(2,Form("ERROR: fESD not available"));
fdceab34 327 return;
328 }
329
330 AliStack* stack = mcEvent->Stack(); //Particles Stack
331
df943115 332 AliDebug(2,Form("MC particles stack: %d", stack->GetNtrack()));
fdceab34 333
334 const AliESDVertex *vtx = fESD->GetPrimaryVertex();
335
336 // Need vertex cut
337 if (vtx->GetNContributors() < 2)
338 return;
df943115 339
340 AliDebug(2,Form("Vertex title %s, status %d, nCont %d\n",vtx->GetTitle(), vtx->GetStatus(), vtx->GetNContributors()));
fdceab34 341
fdceab34 342 // Need to keep track of evts without vertex
343 fNEvent->Fill(0.);
344
345 if(!fESD->GetNumberOfTracks() || fESD->GetNumberOfTracks()<2) return;
346 Int_t nTracks = fESD->GetNumberOfTracks();
df943115 347 AliDebug(2,Form("nTracks %d", nTracks));
348
fdceab34 349 for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
350
351 AliESDtrack *track = fESD->GetTrack(iTrack);
352 if(!track) continue;
353 Int_t label = TMath::Abs(track->GetLabel());
354 TParticle *particle = stack->Particle(label) ;
355 if(!particle) continue;
356
357 Float_t pt = track->Pt();
358 Float_t ptMC = particle->Pt();
359 Float_t phi = track->Phi();
360 Float_t dca2D, dcaZ;
361 track->GetImpactParameters(dca2D,dcaZ);
362 UChar_t itsMap = track->GetITSClusterMap();
363 Int_t nPointITS = 0;
364 for (Int_t i=0; i < 6; i++) {
365 if (itsMap & (1 << i))
366 nPointITS ++;
367 }
368 Float_t nSigmaToVertex = fTrackCuts->GetSigmaToVertex(track);// Calculates the number of sigma to the vertex for a track.
369 Float_t chi2C = track->GetConstrainedChi2();
370 Float_t relUncertainty1Pt = TMath::Sqrt(track->GetSigma1Pt2())*pt;
371
372 fPtAll->Fill(pt);
373 fPtAllMC->Fill(ptMC);
374
375 if (fTrackCuts->AcceptTrack(track)) {
376
377 fPtSel->Fill(pt);
378
379 fPtSelMC->Fill(ptMC);
380 fPtAllminPtMCvsPtAll->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC) );
381 fPtAllminPtMCvsPtAllNPointTPC->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),track->GetTPCNcls());
382 fPtAllminPtMCvsPtAllDCAR->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),dca2D);
383 fPtAllminPtMCvsPtAllDCAZ->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),dcaZ);
384 fPtAllminPtMCvsPtAllPhi->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),phi);
385 fPtAllminPtMCvsPtAllNPointITS->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),nPointITS);
386 fPtAllminPtMCvsPtAllNSigmaToVertex->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),nSigmaToVertex);
387 fPtAllminPtMCvsPtAllChi2C->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),chi2C);
388 fPtAllminPtMCvsPtAllRel1PtUncertainty->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),relUncertainty1Pt);
389 }//fTrackCuts selection
390
391
392 //ITSrefit selection
393 if (fTrackCutsITS->AcceptTrack(track)) {
394
395 fPtSelITS->Fill(pt);
396 fPtSelMCITS->Fill(ptMC);
397 fPtITSminPtMCvsPtITS->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC) );
398 fPtITSminPtMCvsPtITSNPointTPC->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),track->GetTPCNcls());
399 fPtITSminPtMCvsPtITSDCAR->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),dca2D);
400 fPtITSminPtMCvsPtITSDCAZ->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),dcaZ);
401 fPtITSminPtMCvsPtITSPhi->Fill(ptMC,(pt-ptMC)/(pt),phi);
402 fPtITSminPtMCvsPtITSNPointITS->Fill(ptMC,(pt-ptMC)/(pt),nPointITS);
403 fPtITSminPtMCvsPtITSNSigmaToVertex->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),nSigmaToVertex);
404 fPtITSminPtMCvsPtITSChi2C->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),chi2C);
405 fPtITSminPtMCvsPtITSRel1PtUncertainty->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),relUncertainty1Pt);
406 }//fTrackCutsITS loop
407
408 }//ESD track loop
409
410 // Post output data
411 PostData(0, fHistList);
412 PostData(1, fHistListITS);
413
414}
415//________________________________________________________________________
416void AliPWG4HighPtQAMC::Terminate(Option_t *)
417{
df943115 418 // The Terminate() function is the last function to be called during
419 // a query. It always runs on the client, it can be used to present
420 // the results graphically or save the results to file.
fdceab34 421
fdceab34 422}
df943115 423
424#endif