1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
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 //-----------------------------------------------------------------------
24 #ifndef ALIPWG4HighPtQAMC_CXX
25 #define ALIPWG4HighPtQAMC_CXX
27 #include "AliPWG4HighPtQAMC.h"
35 #include "AliAnalysisManager.h"
36 #include "AliESDInputHandler.h"
37 #include "AliMCEvent.h"
38 #include "AliMCEventHandler.h"
40 #include "AliESDtrack.h"
41 #include "AliESDtrackCuts.h"
42 #include "AliExternalTrackParam.h"
45 using namespace std; //required for resolving the 'cout' symbol
47 ClassImp(AliPWG4HighPtQAMC)
49 AliPWG4HighPtQAMC::AliPWG4HighPtQAMC(): AliAnalysisTask("AliPWG4HighPtQAMC", ""),
59 fPtAllminPtMCvsPtAll(0),
60 fPtAllminPtMCvsPtAllNPointTPC(0),
61 fPtAllminPtMCvsPtAllDCAR(0),
62 fPtAllminPtMCvsPtAllDCAZ(0),
63 fPtAllminPtMCvsPtAllPhi(0),
64 fPtAllminPtMCvsPtAllNPointITS(0),
65 fPtAllminPtMCvsPtAllNSigmaToVertex(0),
66 fPtAllminPtMCvsPtAllChi2C(0),
67 fPtAllminPtMCvsPtAllRel1PtUncertainty(0),
73 fPtITSminPtMCvsPtITS(0),
74 fPtITSminPtMCvsPtITSNPointTPC(0),
75 fPtITSminPtMCvsPtITSDCAR(0),
76 fPtITSminPtMCvsPtITSDCAZ(0),
77 fPtITSminPtMCvsPtITSPhi(0),
78 fPtITSminPtMCvsPtITSNPointITS(0),
79 fPtITSminPtMCvsPtITSNSigmaToVertex(0),
80 fPtITSminPtMCvsPtITSChi2C(0),
81 fPtITSminPtMCvsPtITSRel1PtUncertainty(0),
86 //________________________________________________________________________
87 AliPWG4HighPtQAMC::AliPWG4HighPtQAMC(const char *name):
88 AliAnalysisTask(name, ""),
98 fPtAllminPtMCvsPtAll(0),
99 fPtAllminPtMCvsPtAllNPointTPC(0),
100 fPtAllminPtMCvsPtAllDCAR(0),
101 fPtAllminPtMCvsPtAllDCAZ(0),
102 fPtAllminPtMCvsPtAllPhi(0),
103 fPtAllminPtMCvsPtAllNPointITS(0),
104 fPtAllminPtMCvsPtAllNSigmaToVertex(0),
105 fPtAllminPtMCvsPtAllChi2C(0),
106 fPtAllminPtMCvsPtAllRel1PtUncertainty(0),
112 fPtITSminPtMCvsPtITS(0),
113 fPtITSminPtMCvsPtITSNPointTPC(0),
114 fPtITSminPtMCvsPtITSDCAR(0),
115 fPtITSminPtMCvsPtITSDCAZ(0),
116 fPtITSminPtMCvsPtITSPhi(0),
117 fPtITSminPtMCvsPtITSNPointITS(0),
118 fPtITSminPtMCvsPtITSNSigmaToVertex(0),
119 fPtITSminPtMCvsPtITSChi2C(0),
120 fPtITSminPtMCvsPtITSRel1PtUncertainty(0),
124 // Constructor. Initialization of Inputs and Outputs
126 AliDebug(2,Form("AliPWG4HighPtQAMC Calling Constructor"));
127 // Input slot #0 works with a TChain ESD
128 DefineInput(0, TChain::Class());
129 // Output slot #0 writes into a TList
130 DefineOutput(0, TList::Class());
131 // Output slot #1 writes into a TList
132 DefineOutput(1, TList::Class());
133 // Output slot #2 writes into a TList
134 DefineOutput(2, TList::Class());
137 //________________________________________________________________________
138 void AliPWG4HighPtQAMC::ConnectInputData(Option_t *)
140 // Connect ESD and MC event handler here
142 AliDebug(2,Form(">> AliPWG4HighPtSpectra::ConnectInputData \n"));
143 TTree* tree = dynamic_cast<TTree*> (GetInputData(0));
145 AliDebug(2,Form( "ERROR: Could not read chain from input slot 0 \n"));
149 AliESDInputHandler *esdH = dynamic_cast<AliESDInputHandler*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
152 AliDebug(2,Form("ERROR: Could not get ESDInputHandler"));
155 fESD = esdH->GetEvent();
157 AliMCEventHandler *eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
159 AliDebug(2,Form( "ERROR: Could not retrieve MC event handler \n"));
162 fMC = eventHandler->MCEvent();
166 //________________________________________________________________________
167 void AliPWG4HighPtQAMC::CreateOutputObjects() {
168 //Create output objects
169 AliDebug(2,Form(">> AliPWG4HighPtQATPConly::CreateOutputObjects \n"));
171 Bool_t oldStatus = TH1::AddDirectoryStatus();
172 TH1::AddDirectory(kFALSE);
175 fHistList = new TList();
177 fHistListITS = new TList();
179 Int_t fgkNPhiBins=18;
180 Float_t kMinPhi = 0.;
181 Float_t kMaxPhi = 2.*TMath::Pi();
185 Float_t fgkPtMax=fPtMax;
186 Int_t fgkResPtBins=80;
188 fNEventAll = new TH1F("fNEventAll","NEventAll",1,-0.5,0.5);
189 fHistList->Add(fNEventAll);
190 fNEventSel = new TH1F("fNEventSel","NEvent Selected for analysis",1,-0.5,0.5);
191 fHistList->Add(fNEventSel);
192 fPtAll = new TH1F("fPtAll","PtAll",fgkNPtBins, fgkPtMin, fgkPtMax);
193 fHistList->Add(fPtAll);
194 fPtSel = new TH1F("fPtSel","PtSel",fgkNPtBins, fgkPtMin, fgkPtMax);
195 fHistList->Add(fPtSel);
197 fPtAllminPtMCvsPtAll = new TH2F("fPtAllminPtMCvsPtAll","PtAllminPtMCvsPtAll",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.);
198 fPtAllminPtMCvsPtAll->SetXTitle("p_{t}^{MC}");
199 fPtAllminPtMCvsPtAll->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
200 fHistList->Add(fPtAllminPtMCvsPtAll);
202 fPtAllminPtMCvsPtAllNPointTPC = new TH3F("fPtAllminPtMCvsPtAllNPointTPC","PtAllminPtMCvsPtAllNPointTPC",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,160,0.5,160.5);
203 fPtAllminPtMCvsPtAllNPointTPC->SetXTitle("p_{t}^{MC}");
204 fPtAllminPtMCvsPtAllNPointTPC->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
205 fPtAllminPtMCvsPtAllNPointTPC->SetZTitle("N_{point,TPC}");
206 fHistList->Add(fPtAllminPtMCvsPtAllNPointTPC);
208 fPtAllminPtMCvsPtAllDCAR = new TH3F("fPtAllminPtMCvsPtAllDCAR","PtAllminPtMCvsPtAllDCAR",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,80,-0.2,0.2);
209 fPtAllminPtMCvsPtAllDCAR->SetXTitle("p_{t}^{MC}");
210 fPtAllminPtMCvsPtAllDCAR->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
211 fPtAllminPtMCvsPtAllDCAR->SetZTitle("DCA_{R}");
212 fHistList->Add(fPtAllminPtMCvsPtAllDCAR);
214 fPtAllminPtMCvsPtAllDCAZ = new TH3F("fPtAllminPtMCvsPtAllDCAZ","PtAllminPtMCvsPtAllDCAZ",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,80,-2.,2.);
215 fPtAllminPtMCvsPtAllDCAZ->SetXTitle("p_{t}^{MC}");
216 fPtAllminPtMCvsPtAllDCAZ->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
217 fPtAllminPtMCvsPtAllDCAZ->SetZTitle("DCA_{Z}");
218 fHistList->Add(fPtAllminPtMCvsPtAllDCAZ);
220 fPtAllminPtMCvsPtAllPhi = new TH3F("fPtAllminPtMCvsPtAllPhi","PtAllminPtMCvsPtAllPhi",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,fgkNPhiBins,kMinPhi,kMaxPhi);
221 fPtAllminPtMCvsPtAllPhi->SetXTitle("p_{t}^{MC}");
222 fPtAllminPtMCvsPtAllPhi->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
223 fPtAllminPtMCvsPtAllPhi->SetZTitle("#phi");
224 fHistList->Add(fPtAllminPtMCvsPtAllPhi);
226 fPtAllminPtMCvsPtAllNPointITS = new TH3F("fPtAllminPtMCvsPtAllNPointITS","PtAllminPtMCvsPtAllNPointITS",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,9,-0.5,8.5);
227 fPtAllminPtMCvsPtAllNPointITS->SetXTitle("p_{t}^{MC}");
228 fPtAllminPtMCvsPtAllNPointITS->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
229 fPtAllminPtMCvsPtAllNPointITS->SetZTitle("N_{point,ITS}}");
230 fHistList->Add(fPtAllminPtMCvsPtAllNPointITS);
232 fPtAllminPtMCvsPtAllNSigmaToVertex = new TH3F("fPtAllminPtMCvsPtAllNSigmaToVertex","PtAllminPtMCvsPtAllNSigmaToVertex",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,40,0.,8.);
233 fPtAllminPtMCvsPtAllNSigmaToVertex->SetXTitle("p_{t}^{MC}");
234 fPtAllminPtMCvsPtAllNSigmaToVertex->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
235 fPtAllminPtMCvsPtAllNSigmaToVertex->SetZTitle("N#sigma to vertex");
236 fHistList->Add(fPtAllminPtMCvsPtAllNSigmaToVertex);
238 fPtAllminPtMCvsPtAllChi2C = new TH3F("fPtAllminPtMCvsPtAllChi2C","PtAllminPtMCvsPtAllChi2C",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,20,0.,10.);
239 fPtAllminPtMCvsPtAllChi2C->SetXTitle("p_{t}^{MC}");
240 fPtAllminPtMCvsPtAllChi2C->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
241 fPtAllminPtMCvsPtAllChi2C->SetZTitle("Constrained #chi^{2}");
242 fHistList->Add(fPtAllminPtMCvsPtAllChi2C);
244 fPtAllminPtMCvsPtAllRel1PtUncertainty = new TH3F("fPtAllminPtMCvsPtAllRel1PtUncertainty","PtAllminPtMCvsPtAllRel1PtUncertainty",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,30,0.,0.3);
245 fPtAllminPtMCvsPtAllRel1PtUncertainty->SetXTitle("p_{t}^{MC}");
246 fPtAllminPtMCvsPtAllRel1PtUncertainty->SetYTitle("(1/p_{t}^{All}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
247 fPtAllminPtMCvsPtAllRel1PtUncertainty->SetZTitle("Rel1PtUncertainty");
248 fHistList->Add(fPtAllminPtMCvsPtAllRel1PtUncertainty);
251 fPtSelITS = new TH1F("fPtSelITSrefit","PtSel",fgkNPtBins, fgkPtMin, fgkPtMax);
252 fHistListITS->Add(fPtSelITS);
254 fPtITSminPtMCvsPtITS = new TH2F("fPtITSminPtMCvsPtITS","PtITSminPtMCvsPtITS",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.);
255 fPtITSminPtMCvsPtITS->SetXTitle("p_{t}^{MC}");
256 fPtITSminPtMCvsPtITS->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
257 fHistListITS->Add(fPtITSminPtMCvsPtITS);
259 fPtITSminPtMCvsPtITSNPointTPC = new TH3F("fPtITSminPtMCvsPtITSNPointTPC","PtITSminPtMCvsPtITSNPointTPC",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,160,0.5,160.5);
260 fPtITSminPtMCvsPtITSNPointTPC->SetXTitle("p_{t}^{MC}");
261 fPtITSminPtMCvsPtITSNPointTPC->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
262 fPtITSminPtMCvsPtITSNPointTPC->SetZTitle("N_{point,TPC}");
263 fHistListITS->Add(fPtITSminPtMCvsPtITSNPointTPC);
265 fPtITSminPtMCvsPtITSDCAR = new TH3F("fPtITSminPtMCvsPtITSDCAR","PtITSminPtMCvsPtITSDCAR",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,80,-0.2,0.2);
266 fPtITSminPtMCvsPtITSDCAR->SetXTitle("p_{t}^{MC}");
267 fPtITSminPtMCvsPtITSDCAR->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
268 fPtITSminPtMCvsPtITSDCAR->SetZTitle("DCA_{R}");
269 fHistListITS->Add(fPtITSminPtMCvsPtITSDCAR);
271 fPtITSminPtMCvsPtITSDCAZ = new TH3F("fPtITSminPtMCvsPtITSDCAZ","PtITSminPtMCvsPtITSDCAZ",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,80,-2.,2.);
272 fPtITSminPtMCvsPtITSDCAZ->SetXTitle("p_{t}^{MC}");
273 fPtITSminPtMCvsPtITSDCAZ->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
274 fPtITSminPtMCvsPtITSDCAZ->SetZTitle("DCA_{Z}");
275 fHistListITS->Add(fPtITSminPtMCvsPtITSDCAZ);
277 fPtITSminPtMCvsPtITSPhi = new TH3F("fPtITSminPtMCvsPtITSPhi","PtITSminPtMCvsPtITSPhi",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,fgkNPhiBins,kMinPhi,kMaxPhi);
278 fPtITSminPtMCvsPtITSPhi->SetXTitle("p_{t}^{MC}");
279 fPtITSminPtMCvsPtITSPhi->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
280 fPtITSminPtMCvsPtITSPhi->SetZTitle("#phi");
281 fHistListITS->Add(fPtITSminPtMCvsPtITSPhi);
283 fPtITSminPtMCvsPtITSNPointITS = new TH3F("fPtITSminPtMCvsPtITSNPointITS","PtITSminPtMCvsPtITSNPointITS",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,9,-0.5,8.5);
284 fPtITSminPtMCvsPtITSNPointITS->SetXTitle("p_{t}^{MC}");
285 fPtITSminPtMCvsPtITSNPointITS->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})}");
286 fPtITSminPtMCvsPtITSNPointITS->SetZTitle("N_{point,ITS}}");
287 fHistListITS->Add(fPtITSminPtMCvsPtITSNPointITS);
289 fPtITSminPtMCvsPtITSNSigmaToVertex = new TH3F("fPtITSminPtMCvsPtITSNSigmaToVertex","PtITSminPtMCvsPtITSNSigmaToVertex",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,40,0.,8.);
290 fPtITSminPtMCvsPtITSNSigmaToVertex->SetXTitle("p_{t}^{MC}");
291 fPtITSminPtMCvsPtITSNSigmaToVertex->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
292 fPtITSminPtMCvsPtITSNSigmaToVertex->SetZTitle("N#sigma to vertex");
293 fHistListITS->Add(fPtITSminPtMCvsPtITSNSigmaToVertex);
295 fPtITSminPtMCvsPtITSChi2C = new TH3F("fPtITSminPtMCvsPtITSChi2C","PtITSminPtMCvsPtITSChi2C",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,20,0.,10.);
296 fPtITSminPtMCvsPtITSChi2C->SetXTitle("p_{t}^{MC}");
297 fPtITSminPtMCvsPtITSChi2C->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
298 fPtITSminPtMCvsPtITSChi2C->SetZTitle("Constrained #chi^{2}");
299 fHistListITS->Add(fPtITSminPtMCvsPtITSChi2C);
301 fPtITSminPtMCvsPtITSRel1PtUncertainty = new TH3F("fPtITSminPtMCvsPtITSRel1PtUncertainty","PtITSminPtMCvsPtITSRel1PtUncertainty",fgkNPtBins, fgkPtMin,fgkPtMax,fgkResPtBins,-1.,1.,30,0.,0.3);
302 fPtITSminPtMCvsPtITSRel1PtUncertainty->SetXTitle("p_{t}^{MC}");
303 fPtITSminPtMCvsPtITSRel1PtUncertainty->SetYTitle("(1/p_{t}^{ITS}-1/p_{t}^{MC})/(1/p_{t}^{MC})");
304 fPtITSminPtMCvsPtITSRel1PtUncertainty->SetZTitle("Rel1PtUncertainty");
305 fHistListITS->Add(fPtITSminPtMCvsPtITSRel1PtUncertainty);
307 fPtAllMC = new TH1F("fPtAllMC","PtAll",fgkNPtBins, fgkPtMin, fgkPtMax);
308 fHistList->Add(fPtAllMC);
309 fPtSelMC = new TH1F("fPtSelMC","PtSel",fgkNPtBins, fgkPtMin, fgkPtMax);
310 fHistList->Add(fPtSelMC);
311 fPtSelMCITS = new TH1F("fPtSelMCITS","PtSel",fgkNPtBins, fgkPtMin, fgkPtMax);
312 fHistList->Add(fPtSelMCITS);
314 TH1::AddDirectory(oldStatus);
317 //________________________________________________________________________
318 void AliPWG4HighPtQAMC::Exec(Option_t *) {
320 // Called for each event
321 AliDebug(2,Form(">> AliPWG4HighPtQATPConly::Exec \n"));
322 // All events without selection
323 fNEventAll->Fill(0.);
326 AliDebug(2,Form("ERROR: fESD not available\n"));
327 PostData(0, fHistList);
328 PostData(1, fHistListITS);
332 UInt_t isSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
333 if(!(isSelected&AliVEvent::kMB)) { //Select collison candidates
334 AliDebug(2,Form(" Trigger Selection: event REJECTED ... "));
336 PostData(0, fHistList);
337 PostData(1, fHistListITS);
341 AliStack* stack = 0x0;
344 AliDebug(2,Form("MC particles: %d", fMC->GetNumberOfTracks()));
345 stack = fMC->Stack(); //Particles Stack
346 AliDebug(2,Form("MC particles stack: %d", stack->GetNtrack()));
348 AliDebug(2,Form("ERROR: Could not retrieve MC eventHandler"));
349 PostData(0, fHistList);
350 PostData(1, fHistListITS);
354 const AliESDVertex *vtx = fESD->GetPrimaryVertex();
356 TString vtxName(vtx->GetName());
357 if(vtx->GetNContributors() < 2 || (vtxName.Contains("TPCVertex")) ) {
359 vtx = fESD->GetPrimaryVertexSPD();
360 if(vtx->GetNContributors()<2) {
363 PostData(0, fHistList);
364 PostData(1, fHistListITS);
370 vtx->GetXYZ(primVtx);
371 if(TMath::Sqrt(primVtx[0]*primVtx[0] + primVtx[1]*primVtx[1])>1. || TMath::Abs(primVtx[2]>10.)){
373 PostData(0, fHistList);
374 PostData(1, fHistListITS);
378 AliDebug(2,Form("Vertex title %s, status %d, nCont %d\n",vtx->GetTitle(), vtx->GetStatus(), vtx->GetNContributors()));
380 // Need to keep track of evts without vertex
381 fNEventSel->Fill(0.);
383 if(!fESD->GetNumberOfTracks() || fESD->GetNumberOfTracks()<2) {
384 PostData(0, fHistList);
385 PostData(1, fHistListITS);
389 Int_t nTracks = fESD->GetNumberOfTracks();
390 AliDebug(2,Form("nTracks ESD%d", nTracks));
392 int nMCtracks = stack->GetNtrack();
394 for (Int_t iTrack = 0; iTrack < nTracks; iTrack++) {
396 AliESDtrack *track = fESD->GetTrack(iTrack);
398 Int_t label = TMath::Abs(track->GetLabel());
399 if(label>=nMCtracks)continue;
400 TParticle *particle = stack->Particle(label) ;
401 if(!particle) continue;
403 Float_t pt = track->Pt();
404 Float_t ptMC = particle->Pt();
405 Float_t phi = track->Phi();
407 track->GetImpactParameters(dca2D,dcaZ);
408 UChar_t itsMap = track->GetITSClusterMap();
410 for (Int_t i=0; i < 6; i++) {
411 if (itsMap & (1 << i))
414 Float_t nSigmaToVertex = fTrackCuts->GetSigmaToVertex(track);// Calculates the number of sigma to the vertex for a track.
415 Float_t chi2C = track->GetConstrainedChi2();
416 Float_t relUncertainty1Pt = TMath::Sqrt(track->GetSigma1Pt2())*pt;
419 fPtAllMC->Fill(ptMC);
421 if (fTrackCuts->AcceptTrack(track)) {
425 fPtSelMC->Fill(ptMC);
426 fPtAllminPtMCvsPtAll->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC) );
427 fPtAllminPtMCvsPtAllNPointTPC->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),track->GetTPCNcls());
428 fPtAllminPtMCvsPtAllDCAR->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),dca2D);
429 fPtAllminPtMCvsPtAllDCAZ->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),dcaZ);
430 fPtAllminPtMCvsPtAllPhi->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),phi);
431 fPtAllminPtMCvsPtAllNPointITS->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),nPointITS);
432 fPtAllminPtMCvsPtAllNSigmaToVertex->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),nSigmaToVertex);
433 fPtAllminPtMCvsPtAllChi2C->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),chi2C);
434 fPtAllminPtMCvsPtAllRel1PtUncertainty->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),relUncertainty1Pt);
435 }//fTrackCuts selection
439 if (fTrackCutsITS->AcceptTrack(track)) {
442 fPtSelMCITS->Fill(ptMC);
443 fPtITSminPtMCvsPtITS->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC) );
444 fPtITSminPtMCvsPtITSNPointTPC->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),track->GetTPCNcls());
445 fPtITSminPtMCvsPtITSDCAR->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),dca2D);
446 fPtITSminPtMCvsPtITSDCAZ->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),dcaZ);
447 fPtITSminPtMCvsPtITSPhi->Fill(ptMC,(pt-ptMC)/(pt),phi);
448 fPtITSminPtMCvsPtITSNPointITS->Fill(ptMC,(pt-ptMC)/(pt),nPointITS);
449 fPtITSminPtMCvsPtITSNSigmaToVertex->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),nSigmaToVertex);
450 fPtITSminPtMCvsPtITSChi2C->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),chi2C);
451 fPtITSminPtMCvsPtITSRel1PtUncertainty->Fill(ptMC,(1./pt-1./ptMC)/(1./ptMC),relUncertainty1Pt);
452 }//fTrackCutsITS loop
457 PostData(0, fHistList);
458 PostData(1, fHistListITS);
461 //________________________________________________________________________
462 void AliPWG4HighPtQAMC::Terminate(Option_t *)
464 // The Terminate() function is the last function to be called during
465 // a query. It always runs on the client, it can be used to present
466 // the results graphically or save the results to file.