]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG1/ITS/AliAnalysisTaskITSTrackingCheck.cxx
New task and container for dimuon pairs (Livio, Enrico, Roberta)
[u/mrichter/AliRoot.git] / PWG1 / ITS / AliAnalysisTaskITSTrackingCheck.cxx
CommitLineData
8d63376d 1/**************************************************************************
2 * Copyright(c) 1998-2009, 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//
18// AliAnalysisTask to extract from ESD tracks the information
19// on ITS tracking efficiency and resolutions.
20//
21// Author: A.Dainese, andrea.dainese@pd.infn.it
22/////////////////////////////////////////////////////////////
23
c2893e82 24#include <TStyle.h>
8d63376d 25#include <TChain.h>
26#include <TTree.h>
27#include <TNtuple.h>
28#include <TBranch.h>
29#include <TClonesArray.h>
30#include <TObjArray.h>
31#include <TH1F.h>
32#include <TH2F.h>
33#include <TCanvas.h>
34#include <TParticle.h>
35
36#include "AliAnalysisTask.h"
37#include "AliAnalysisManager.h"
38
39#include "AliMultiplicity.h"
40#include "AliVertexerTracks.h"
41#include "AliESDtrack.h"
42#include "AliExternalTrackParam.h"
43#include "AliESDVertex.h"
44#include "AliESDEvent.h"
45#include "AliESDfriend.h"
46#include "AliESDInputHandler.h"
47#include "AliESDInputHandlerRP.h"
f8777463 48#include "AliESDtrackCuts.h"
8d63376d 49#include "AliTrackPointArray.h"
2308c814 50#include "../ITS/AliITSRecPoint.h"
8d63376d 51
f8777463 52#include "AliInputEventHandler.h"
8d63376d 53#include "AliMCEventHandler.h"
54#include "AliMCEvent.h"
55#include "AliStack.h"
56#include "AliLog.h"
57
58#include "AliGenEventHeader.h"
59#include "AliAnalysisTaskITSTrackingCheck.h"
60
61
62ClassImp(AliAnalysisTaskITSTrackingCheck)
d98a315a 63AliAnalysisTaskITSTrackingCheck::AliAnalysisTaskITSTrackingCheck() :
64AliAnalysisTaskSE(),
65fReadMC(kFALSE),
66fReadRPLabels(kFALSE),
67fFillNtuples(kFALSE),
68fUseITSSAforNtuples(kFALSE),
69fESD(0),
70fOutput(0),
71fHistNtracks(0),
72fHistNclsITSMI(0),
73fHistNclsITSSA(0),
74fHistNclsITSSAInAcc(0),
75fHistClusterMapITSMI(0),
76fHistClusterMapITSMIok(0),
77fHistClusterMapITSMIbad(0),
78fHistClusterMapITSMIskipped(0),
79fHistClusterMapITSMIoutinz(0),
80fHistClusterMapITSMInorefit(0),
81fHistClusterMapITSMInocls(0),
82fHistClusterMapITSMIokoutinzbad(0),
83fHistClusterMapITSSA(0),
84fHistClusterMapITSSAok(0),
85fHistClusterMapITSSAbad(0),
86fHistClusterMapITSSAskipped(0),
87fHistClusterMapITSSAoutinz(0),
88fHistClusterMapITSSAnorefit(0),
89fHistClusterMapITSSAnocls(0),
90fHistClusterMapITSSAokoutinzbad(0),
91fHistClusterMapITSSAInAcc(0),
92fHistClusterMapITSSAokInAcc(0),
93fHistClusterMapITSSAbadInAcc(0),
94fHistClusterMapITSSAskippedInAcc(0),
95fHistClusterMapITSSAoutinzInAcc(0),
96fHistClusterMapITSSAnorefitInAcc(0),
97fHistClusterMapITSSAnoclsInAcc(0),
98fHistClusterMapITSSAokoutinzbadInAcc(0),
99fHistClusterMapModuleITSSAokInAcc(0),
100fHistClusterMapModuleITSSAbadInAcc(0),
101fHistClusterMapModuleITSSAnoclsInAcc(0),
102fHistPhiTPCInAcc(0),
103fHistPtTPC(0),
104fHistPtTPCInAcc(0),
105fHistPtITSMI2(0),
106fHistPtITSMI3(0),
107fHistPtITSMI4(0),
108fHistPtITSMI5(0),
109fHistPtITSMI6(0),
110fHistPtITSMISPD(0),
111fHistPtITSMIoneSPD(0),
112fHistPtITSMI2InAcc(0),
113fHistPtITSMI3InAcc(0),
114fHistPtITSMI4InAcc(0),
115fHistPtITSMI5InAcc(0),
116fHistPtITSMI6InAcc(0),
117fHistPtITSMISPDInAcc(0),
118fHistPtITSMIoneSPDInAcc(0),
119fHistPtITSMIokbadoutinz6(0),
120fHistPtITSMIokbadoutinz4InAcc(0),
121fHistPtITSMIokbadoutinz5InAcc(0),
122fHistPtITSMIokbadoutinz6InAcc(0),
123fHistPhiITSMIokbadoutinz6InAcc(0),
124fNtupleESDTracks(0),
125fNtupleITSAlignExtra(0),
126fNtupleITSAlignSPDTracklets(0)
127{
128 // Constructor
129}
8d63376d 130
131//________________________________________________________________________
132AliAnalysisTaskITSTrackingCheck::AliAnalysisTaskITSTrackingCheck(const char *name) :
d98a315a 133AliAnalysisTaskSE(name),
2308c814 134fReadMC(kFALSE),
8d63376d 135fReadRPLabels(kFALSE),
2308c814 136fFillNtuples(kFALSE),
3f18d0a6 137fUseITSSAforNtuples(kFALSE),
f8777463 138fUsePhysSel(kFALSE),
8d63376d 139fESD(0),
8d63376d 140fOutput(0),
f8777463 141fHistNEvents(0),
142fHistNEventsFrac(0),
8d63376d 143fHistNtracks(0),
144fHistNclsITSMI(0),
145fHistNclsITSSA(0),
2308c814 146fHistNclsITSSAInAcc(0),
8d63376d 147fHistClusterMapITSMI(0),
148fHistClusterMapITSMIok(0),
149fHistClusterMapITSMIbad(0),
150fHistClusterMapITSMIskipped(0),
151fHistClusterMapITSMIoutinz(0),
152fHistClusterMapITSMInorefit(0),
153fHistClusterMapITSMInocls(0),
2308c814 154fHistClusterMapITSMIokoutinzbad(0),
8d63376d 155fHistClusterMapITSSA(0),
156fHistClusterMapITSSAok(0),
157fHistClusterMapITSSAbad(0),
158fHistClusterMapITSSAskipped(0),
159fHistClusterMapITSSAoutinz(0),
160fHistClusterMapITSSAnorefit(0),
161fHistClusterMapITSSAnocls(0),
2308c814 162fHistClusterMapITSSAokoutinzbad(0),
163fHistClusterMapITSSAInAcc(0),
164fHistClusterMapITSSAokInAcc(0),
165fHistClusterMapITSSAbadInAcc(0),
166fHistClusterMapITSSAskippedInAcc(0),
167fHistClusterMapITSSAoutinzInAcc(0),
168fHistClusterMapITSSAnorefitInAcc(0),
169fHistClusterMapITSSAnoclsInAcc(0),
170fHistClusterMapITSSAokoutinzbadInAcc(0),
171fHistClusterMapModuleITSSAokInAcc(0),
172fHistClusterMapModuleITSSAbadInAcc(0),
173fHistClusterMapModuleITSSAnoclsInAcc(0),
f8777463 174fHistClusterMapModuleITSMIokInAcc(0),
175fHistClusterMapModuleITSMIbadInAcc(0),
176fHistClusterMapModuleITSMInoclsInAcc(0),
177fHistxlocSDDok(0),
178fHistzlocSDDok(0),
179fHistxlocVSmodSDDok(0),
180fHistxlocSDDall(0),
181fHistzlocSDDall(0),
3f18d0a6 182fHistPhiTPCInAcc(0),
8d63376d 183fHistPtTPC(0),
3f18d0a6 184fHistPtTPCInAcc(0),
f8777463 185fHistdEdxVSPtTPCInAcc(0),
186fHistdEdxVSPtITSTPCsel(0),
187fHistPtVSphiTPCInAcc(0),
188fHistPtTPCInAccNoTRDout(0),
189fHistPtTPCInAccNoTOFout(0),
190fHistPtTPCInAccWithPtTPCAtInnerWall(0),
191fHistPtTPCInAccWithPtTPCAtVtx(0),
192fHistDeltaPtTPC(0),
193fHistPtTPCInAccP(0),
194fHistPtTPCInAccS(0),
195fHistPtTPCInAccPfromStrange(0),
196fHistPtTPCInAccSfromStrange(0),
197fHistPtTPCInAccSfromMat(0),
8d63376d 198fHistPtITSMI2(0),
199fHistPtITSMI3(0),
200fHistPtITSMI4(0),
201fHistPtITSMI5(0),
202fHistPtITSMI6(0),
203fHistPtITSMISPD(0),
7b4d74b2 204fHistPtITSMIoneSPD(0),
3f18d0a6 205fHistPtITSMI2InAcc(0),
206fHistPtITSMI3InAcc(0),
207fHistPtITSMI4InAcc(0),
208fHistPtITSMI5InAcc(0),
209fHistPtITSMI6InAcc(0),
210fHistPtITSMISPDInAcc(0),
7b4d74b2 211fHistPtITSMIoneSPDInAcc(0),
f8777463 212fHistPtITSTPCsel(0),
213fHistPtITSTPCselP(0),
214fHistPtITSTPCselS(0),
215fHistPtITSTPCselPfromStrange(0),
216fHistPtITSTPCselSfromStrange(0),
217fHistPtITSTPCselSfromMat(0),
218fHistPtITSMI2InAccP(0),
219fHistPtITSMI3InAccP(0),
220fHistPtITSMI4InAccP(0),
221fHistPtITSMI5InAccP(0),
222fHistPtITSMI6InAccP(0),
223fHistPtITSMISPDInAccP(0),
224fHistPtITSMIoneSPDInAccP(0),
225fHistPtITSMI2InAccS(0),
226fHistPtITSMI3InAccS(0),
227fHistPtITSMI4InAccS(0),
228fHistPtITSMI5InAccS(0),
229fHistPtITSMI6InAccS(0),
230fHistPtITSMISPDInAccS(0),
231fHistPtITSMIoneSPDInAccS(0),
3f18d0a6 232fHistPtITSMIokbadoutinz6(0),
c2893e82 233fHistPtITSMIokbadoutinz4InAcc(0),
234fHistPtITSMIokbadoutinz5InAcc(0),
3f18d0a6 235fHistPtITSMIokbadoutinz6InAcc(0),
236fHistPhiITSMIokbadoutinz6InAcc(0),
f8777463 237fHistRProdVtxInAccP(0),
238fHistRProdVtxInAccS(0),
239fHistd0rphiTPCInAccP150200(0),
240fHistd0rphiTPCInAccP500700(0),
241fHistd0rphiTPCInAccP10001500(0),
242fHistd0rphiTPCInAccS150200(0),
243fHistd0rphiTPCInAccS500700(0),
244fHistd0rphiTPCInAccS10001500(0),
245fHistd0rphiITSMISPDInAccP150200(0),
246fHistd0rphiITSMISPDInAccP500700(0),
247fHistd0rphiITSMISPDInAccP10001500(0),
248fHistd0rphiITSMISPDInAccS150200(0),
249fHistd0rphiITSMISPDInAccS500700(0),
250fHistd0rphiITSMISPDInAccS10001500(0),
251fHistd0rphiITSMIoneSPDInAccP150200(0),
252fHistd0rphiITSMIoneSPDInAccP500700(0),
253fHistd0rphiITSMIoneSPDInAccP10001500(0),
254fHistd0zITSMIoneSPDInAccP150200(0),
255fHistd0zITSMIoneSPDInAccP500700(0),
256fHistd0zITSMIoneSPDInAccP10001500(0),
257fHistd0rphiVSphiITSMIoneSPDInAccP10001500(0),
258fHistd0rphiVSetaITSMIoneSPDInAccP10001500(0),
259fHistd0rphiITSMIoneSPDInAccS150200(0),
260fHistd0rphiITSMIoneSPDInAccS500700(0),
261fHistd0rphiITSMIoneSPDInAccS500700from22(0),
262fHistd0rphiITSMIoneSPDInAccS500700from211(0),
263fHistd0rphiITSMIoneSPDInAccS500700from310(0),
264fHistd0rphiITSMIoneSPDInAccS500700from321(0),
265fHistd0rphiITSMIoneSPDInAccS10001500(0),
266fHistd0zITSMIoneSPDInAccS150200(0),
267fHistd0zITSMIoneSPDInAccS500700(0),
268fHistd0zITSMIoneSPDInAccS10001500(0),
269fHistPDGMoth(0),
270fHistPDGMoth150200(0),
271fHistPDGMoth500700(0),
272fHistPDGMoth10001500(0),
273fHistPDGTrk(0),
8d63376d 274fNtupleESDTracks(0),
275fNtupleITSAlignExtra(0),
f8777463 276fNtupleITSAlignSPDTracklets(0),
277fESDtrackCutsTPC(0),
278fESDtrackCutsITSTPC(0)
8d63376d 279{
280 // Constructor
281
f8777463 282 for(Int_t i=0; i<11; i++) fCountsPerPtBin[i]=0;
8d63376d 283
284 // Define input and output slots here
8d63376d 285 // Output slot #0 writes into a TList container
d98a315a 286 DefineOutput(1, TList::Class()); //My private output
8d63376d 287}
288//________________________________________________________________________
289AliAnalysisTaskITSTrackingCheck::~AliAnalysisTaskITSTrackingCheck()
290{
291 // Destructor
292
293 // histograms are in the output list and deleted when the output
294 // list is deleted by the TSelector dtor
295
296 if (fOutput) {
297 delete fOutput;
298 fOutput = 0;
299 }
300}
301
302//________________________________________________________________________
8d63376d 303//________________________________________________________________________
d98a315a 304void AliAnalysisTaskITSTrackingCheck::UserCreateOutputObjects()
8d63376d 305{
306 // Create histograms
307 // Called once
308
c2893e82 309 gStyle->SetHistLineWidth(2);
310
f8777463 311 Int_t nPtBins=34;
312 Float_t xPtBins[35]={0,0.025,0.05,0.075,0.1,0.125,0.15,0.175,0.2,0.225,0.25,0.275,0.3,0.325,0.35,0.375,0.4,0.5,0.6,0.7,0.8,1.0,1.5,2.,2.5,3,4,5,6,8,10,15,20,25,30};
3f18d0a6 313
f8777463 314 for(Int_t i=0; i<11; i++) fCountsPerPtBin[i]=0;
8d63376d 315
316 // Several histograms are more conveniently managed in a TList
317 fOutput = new TList;
318 fOutput->SetOwner();
319
f8777463 320 fHistPDGMoth = new TH1F("fHistPDGMoth","",4000,0,4000);
321 fOutput->Add(fHistPDGMoth);
322 fHistPDGMoth150200 = new TH1F("fHistPDGMoth150200","",4000,0,4000);
323 fOutput->Add(fHistPDGMoth150200);
324 fHistPDGMoth500700 = new TH1F("fHistPDGMoth500700","",4000,0,4000);
325 fOutput->Add(fHistPDGMoth500700);
326 fHistPDGMoth10001500 = new TH1F("fHistPDGMoth10001500","",4000,0,4000);
327 fOutput->Add(fHistPDGMoth10001500);
328 fHistPDGTrk = new TH1F("fHistPDGTrk","",4000,0,4000);
329 fOutput->Add(fHistPDGTrk);
330
331 fHistNEvents = new TH1F("fHistNEvents", "Events: -1 tot, 0 sel, 1 vSPD3D, 2 vSPDZ, 3 vSPD, 4 vTRK; Type; N Events",12, -1.5, 10.5);
332 fHistNEvents->SetMinimum(0);
333 fOutput->Add(fHistNEvents);
334
335 fHistNEventsFrac = (TH1F*)fHistNEvents->Clone("fHistNEventsFrac");
336 fOutput->Add(fHistNEventsFrac);
337
8d63376d 338 fHistNtracks = new TH1F("fHistNtracks", "N ESD tracks; N tracks; Events",5000, -0.5, 4999.5);
339 fHistNtracks->Sumw2();
340 fHistNtracks->SetMinimum(0);
341 fOutput->Add(fHistNtracks);
342
343 fHistNclsITSMI = new TH1F("fHistNclsITSMI", "N ITS clusters per track (MI); N clusters; Counts",7, -0.5, 6.5);
344 fHistNclsITSMI->Sumw2();
345 fHistNclsITSMI->SetMinimum(0);
346 fOutput->Add(fHistNclsITSMI);
347
2308c814 348 fHistNclsITSSAInAcc = new TH1F("fHistNclsITSSAInAcc", "N ITS clusters per track (SA); N clusters; Counts",7, -0.5, 6.5);
349 fHistNclsITSSAInAcc->Sumw2();
350 fHistNclsITSSAInAcc->SetMinimum(0);
351 fOutput->Add(fHistNclsITSSAInAcc);
352
8d63376d 353 fHistNclsITSSA = new TH1F("fHistNclsITSSA", "N ITS clusters per track (SA); N clusters; Counts",7, -0.5, 6.5);
354 fHistNclsITSSA->Sumw2();
355 fHistNclsITSSA->SetMinimum(0);
356 fOutput->Add(fHistNclsITSSA);
357
358 fHistClusterMapITSMI = new TH1F("fHistClusterMapITSMI", "N tracks with point on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
359 fHistClusterMapITSMI->Sumw2();
360 fHistClusterMapITSMI->SetMinimum(0);
361 fOutput->Add(fHistClusterMapITSMI);
362
363 fHistClusterMapITSSA = new TH1F("fHistClusterMapITSSA", "N tracks with point on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
364 fHistClusterMapITSSA->Sumw2();
365 fHistClusterMapITSSA->SetMinimum(0);
366 fOutput->Add(fHistClusterMapITSSA);
367
2308c814 368 fHistClusterMapITSSAInAcc = new TH1F("fHistClusterMapITSSAInAcc", "N tracks with point on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
369 fHistClusterMapITSSAInAcc->Sumw2();
370 fHistClusterMapITSSAInAcc->SetMinimum(0);
371 fOutput->Add(fHistClusterMapITSSAInAcc);
372
8d63376d 373 fHistClusterMapITSMIok = new TH1F("fHistClusterMapITSMIok", "N tracks with ok on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
374 fHistClusterMapITSMIok->Sumw2();
375 fHistClusterMapITSMIok->SetMinimum(0);
376 fOutput->Add(fHistClusterMapITSMIok);
377
2308c814 378 fHistClusterMapITSSAokInAcc = new TH1F("fHistClusterMapITSSAokInAcc", "N tracks with ok on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
379 fHistClusterMapITSSAokInAcc->Sumw2();
380 fHistClusterMapITSSAokInAcc->SetMinimum(0);
381 fOutput->Add(fHistClusterMapITSSAokInAcc);
382
383 fHistClusterMapModuleITSSAokInAcc = new TH1F("fHistClusterMapModuleITSSAokInAcc", "N tracks with ok on Module (SA); Module; N tracks",2198, -0.5, 2197.5);
384 fHistClusterMapModuleITSSAokInAcc->SetMinimum(0);
385 fOutput->Add(fHistClusterMapModuleITSSAokInAcc);
386
f8777463 387 fHistClusterMapModuleITSMIokInAcc = new TH1F("fHistClusterMapModuleITSMIokInAcc", "N tracks with ok on Module (MI); Module; N tracks",2198, -0.5, 2197.5);
388 fHistClusterMapModuleITSMIokInAcc->SetMinimum(0);
389 fOutput->Add(fHistClusterMapModuleITSMIokInAcc);
390
8d63376d 391 fHistClusterMapITSSAok = new TH1F("fHistClusterMapITSSAok", "N tracks with ok on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
392 fHistClusterMapITSSAok->Sumw2();
393 fHistClusterMapITSSAok->SetMinimum(0);
394 fOutput->Add(fHistClusterMapITSSAok);
395
396 fHistClusterMapITSMIbad = new TH1F("fHistClusterMapITSMIbad", "N tracks with bad on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
397 fHistClusterMapITSMIbad->Sumw2();
398 fHistClusterMapITSMIbad->SetMinimum(0);
399 fOutput->Add(fHistClusterMapITSMIbad);
400
2308c814 401 fHistClusterMapITSSAbadInAcc = new TH1F("fHistClusterMapITSSAbadInAcc", "N tracks with bad on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
402 fHistClusterMapITSSAbadInAcc->Sumw2();
403 fHistClusterMapITSSAbadInAcc->SetMinimum(0);
404 fOutput->Add(fHistClusterMapITSSAbadInAcc);
405
406 fHistClusterMapModuleITSSAbadInAcc = new TH1F("fHistClusterMapModuleITSSAbadInAcc", "N tracks with bad on Module (SA); Module; N tracks",2198, -0.5, 2197.5);
407 fHistClusterMapModuleITSSAbadInAcc->SetMinimum(0);
408 fOutput->Add(fHistClusterMapModuleITSSAbadInAcc);
409
f8777463 410 fHistClusterMapModuleITSMIbadInAcc = new TH1F("fHistClusterMapModuleITSMIbadInAcc", "N tracks with bad on Module (MI); Module; N tracks",2198, -0.5, 2197.5);
411 fHistClusterMapModuleITSMIbadInAcc->SetMinimum(0);
412 fOutput->Add(fHistClusterMapModuleITSMIbadInAcc);
413
8d63376d 414 fHistClusterMapITSSAbad = new TH1F("fHistClusterMapITSSAbad", "N tracks with bad on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
415 fHistClusterMapITSSAbad->Sumw2();
416 fHistClusterMapITSSAbad->SetMinimum(0);
417 fOutput->Add(fHistClusterMapITSSAbad);
418
419 fHistClusterMapITSMIskipped = new TH1F("fHistClusterMapITSMIskipped", "N tracks with skip on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
420 fHistClusterMapITSMIskipped->Sumw2();
421 fHistClusterMapITSMIskipped->SetMinimum(0);
422 fOutput->Add(fHistClusterMapITSMIskipped);
423
2308c814 424 fHistClusterMapITSSAskippedInAcc = new TH1F("fHistClusterMapITSSAskippedInAcc", "N tracks with skip on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
425 fHistClusterMapITSSAskippedInAcc->Sumw2();
426 fHistClusterMapITSSAskippedInAcc->SetMinimum(0);
427 fOutput->Add(fHistClusterMapITSSAskippedInAcc);
428
8d63376d 429 fHistClusterMapITSSAskipped = new TH1F("fHistClusterMapITSSAskipped", "N tracks with skip on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
430 fHistClusterMapITSSAskipped->Sumw2();
431 fHistClusterMapITSSAskipped->SetMinimum(0);
432 fOutput->Add(fHistClusterMapITSSAskipped);
433
434 fHistClusterMapITSMIoutinz = new TH1F("fHistClusterMapITSMIoutinz", "N tracks out in z on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
435 fHistClusterMapITSMIoutinz->Sumw2();
436 fHistClusterMapITSMIoutinz->SetMinimum(0);
437 fOutput->Add(fHistClusterMapITSMIoutinz);
438
2308c814 439 fHistClusterMapITSSAoutinzInAcc = new TH1F("fHistClusterMapITSSAoutinzInAcc", "N tracks with out in z on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
440 fHistClusterMapITSSAoutinzInAcc->Sumw2();
441 fHistClusterMapITSSAoutinzInAcc->SetMinimum(0);
442 fOutput->Add(fHistClusterMapITSSAoutinzInAcc);
443
8d63376d 444 fHistClusterMapITSSAoutinz = new TH1F("fHistClusterMapITSSAoutinz", "N tracks with out in z on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
445 fHistClusterMapITSSAoutinz->Sumw2();
446 fHistClusterMapITSSAoutinz->SetMinimum(0);
447 fOutput->Add(fHistClusterMapITSSAoutinz);
448
2308c814 449 fHistClusterMapITSSAokoutinzbad = new TH1F("fHistClusterMapITSSAokoutinzbad", "N tracks with cluster or bad zone or out in z (SA); Layer; N tracks",6, -0.5, 5.5);
450 fHistClusterMapITSSAokoutinzbad->Sumw2();
451 fHistClusterMapITSSAokoutinzbad->SetMinimum(0);
452 fOutput->Add(fHistClusterMapITSSAokoutinzbad);
453
454 fHistClusterMapITSMIokoutinzbad = new TH1F("fHistClusterMapITSMIokoutinzbad", "N tracks with cluster or bad zone or out in z (MI); Layer; N tracks",6, -0.5, 5.5);
455 fHistClusterMapITSMIokoutinzbad->Sumw2();
456 fHistClusterMapITSMIokoutinzbad->SetMinimum(0);
457 fOutput->Add(fHistClusterMapITSMIokoutinzbad);
458
459 fHistClusterMapITSSAokoutinzbadInAcc = new TH1F("fHistClusterMapITSSAokoutinzbadInAcc", "N tracks with cluster or bad zone or out in z (SA); Layer; N tracks",6, -0.5, 5.5);
460 fHistClusterMapITSSAokoutinzbadInAcc->Sumw2();
461 fHistClusterMapITSSAokoutinzbadInAcc->SetMinimum(0);
462 fOutput->Add(fHistClusterMapITSSAokoutinzbadInAcc);
463
8d63376d 464 fHistClusterMapITSMInorefit = new TH1F("fHistClusterMapITSMInorefit", "N tracks with norefit on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
465 fHistClusterMapITSMInorefit->Sumw2();
466 fHistClusterMapITSMInorefit->SetMinimum(0);
467 fOutput->Add(fHistClusterMapITSMInorefit);
468
2308c814 469 fHistClusterMapITSSAnorefitInAcc = new TH1F("fHistClusterMapITSSAnorefitInAcc", "N tracks with norefit on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
470 fHistClusterMapITSSAnorefitInAcc->Sumw2();
471 fHistClusterMapITSSAnorefitInAcc->SetMinimum(0);
472 fOutput->Add(fHistClusterMapITSSAnorefitInAcc);
473
8d63376d 474 fHistClusterMapITSSAnorefit = new TH1F("fHistClusterMapITSSAnorefit", "N tracks with norefit on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
475 fHistClusterMapITSSAnorefit->Sumw2();
476 fHistClusterMapITSSAnorefit->SetMinimum(0);
477 fOutput->Add(fHistClusterMapITSSAnorefit);
478
479 fHistClusterMapITSMInocls = new TH1F("fHistClusterMapITSMInocls", "N tracks with nocls on Layer (MI); Layer; N tracks",6, -0.5, 5.5);
480 fHistClusterMapITSMInocls->Sumw2();
481 fHistClusterMapITSMInocls->SetMinimum(0);
482 fOutput->Add(fHistClusterMapITSMInocls);
483
2308c814 484 fHistClusterMapITSSAnoclsInAcc = new TH1F("fHistClusterMapITSSAnoclsInAcc", "N tracks with nocls on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
485 fHistClusterMapITSSAnoclsInAcc->Sumw2();
486 fHistClusterMapITSSAnoclsInAcc->SetMinimum(0);
487 fOutput->Add(fHistClusterMapITSSAnoclsInAcc);
488
489 fHistClusterMapModuleITSSAnoclsInAcc = new TH1F("fHistClusterMapModuleITSSAnoclsInAcc", "N tracks with nocls on Module (SA); Module; N tracks",2198, -0.5, 2197.5);
490 fHistClusterMapModuleITSSAnoclsInAcc->SetMinimum(0);
491 fOutput->Add(fHistClusterMapModuleITSSAnoclsInAcc);
492
f8777463 493 fHistClusterMapModuleITSMInoclsInAcc = new TH1F("fHistClusterMapModuleITSMInoclsInAcc", "N tracks with nocls on Module (MI); Module; N tracks",2198, -0.5, 2197.5);
494 fHistClusterMapModuleITSMInoclsInAcc->SetMinimum(0);
495 fOutput->Add(fHistClusterMapModuleITSMInoclsInAcc);
496
8d63376d 497 fHistClusterMapITSSAnocls = new TH1F("fHistClusterMapITSSAnocls", "N tracks with nocls on Layer (SA); Layer; N tracks",6, -0.5, 5.5);
498 fHistClusterMapITSSAnocls->Sumw2();
499 fHistClusterMapITSSAnocls->SetMinimum(0);
500 fOutput->Add(fHistClusterMapITSSAnocls);
501
f8777463 502 fHistxlocSDDok = new TH1F("fHistxlocSDDok", "SDD points; xloc [cm]; N tracks",75, -3.75, 3.75);
503 fHistxlocSDDok->Sumw2();
504 fHistxlocSDDok->SetMinimum(0);
505 fOutput->Add(fHistxlocSDDok);
506
507 fHistxlocVSmodSDDok = new TH2F("fHistxlocVSmodSDDok", "SDD points; module; xloc [cm]",260,239.5,499.5,25, -3.75, 3.75);
508 fOutput->Add(fHistxlocVSmodSDDok);
509
510 fHistzlocSDDok = new TH1F("fHistzlocSDDok", "SDD points; zloc [cm]; N tracks",77, -3.85, 3.85);
511 fHistzlocSDDok->Sumw2();
512 fHistzlocSDDok->SetMinimum(0);
513 fOutput->Add(fHistzlocSDDok);
514
515 fHistxlocSDDall = new TH1F("fHistxlocSDDall", "SDD points; xloc [cm]; N tracks",75, -3.75, 3.75);
516 fHistxlocSDDall->Sumw2();
517 fHistxlocSDDall->SetMinimum(0);
518 fOutput->Add(fHistxlocSDDall);
519
520 fHistzlocSDDall = new TH1F("fHistzlocSDDall", "SDD points; zloc [cm]; N tracks",77, -3.85, 3.85);
521 fHistzlocSDDall->Sumw2();
522 fHistzlocSDDall->SetMinimum(0);
523 fOutput->Add(fHistzlocSDDall);
524
525
3f18d0a6 526 fHistPhiTPCInAcc = new TH1F("fHistPhiTPCInAcc","Azimuthal distribution of TPC tracks; #phi; N tracks",100, 0, 2.*3.1415);
527 fHistPhiTPCInAcc->Sumw2();
528 fHistPhiTPCInAcc->SetMinimum(0);
529 fOutput->Add(fHistPhiTPCInAcc);
530
531 fHistPhiITSMIokbadoutinz6InAcc = new TH1F("fHistPhiITSMIokbadoutinz6InAcc","Azimuthal distribution of ITSMI tracks with 6 layers OK; #phi; N tracks",100,0,2.*3.1415);
532 fHistPhiITSMIokbadoutinz6InAcc->Sumw2();
533 fHistPhiITSMIokbadoutinz6InAcc->SetMinimum(0);
534 fOutput->Add(fHistPhiITSMIokbadoutinz6InAcc);
8d63376d 535
3f18d0a6 536 fHistPtTPC = new TH1F("fHistPtTPC","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
8d63376d 537 fHistPtTPC->Sumw2();
538 fHistPtTPC->SetMinimum(0);
539 fOutput->Add(fHistPtTPC);
540
3f18d0a6 541 fHistPtITSMI6 = new TH1F("fHistPtITSMI6","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
8d63376d 542 fHistPtITSMI6->Sumw2();
543 fHistPtITSMI6->SetMinimum(0);
544 fOutput->Add(fHistPtITSMI6);
545
3f18d0a6 546 fHistPtITSMI5 = new TH1F("fHistPtITSMI5","pt distribution of ITSMI5 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
8d63376d 547 fHistPtITSMI5->Sumw2();
548 fHistPtITSMI5->SetMinimum(0);
549 fOutput->Add(fHistPtITSMI5);
550
3f18d0a6 551 fHistPtITSMI4 = new TH1F("fHistPtITSMI4","pt distribution of ITSMI4 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
8d63376d 552 fHistPtITSMI4->Sumw2();
553 fHistPtITSMI4->SetMinimum(0);
554 fOutput->Add(fHistPtITSMI4);
555
3f18d0a6 556 fHistPtITSMI3 = new TH1F("fHistPtITSMI3","pt distribution of ITSMI3 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
8d63376d 557 fHistPtITSMI3->Sumw2();
558 fHistPtITSMI3->SetMinimum(0);
559 fOutput->Add(fHistPtITSMI3);
560
3f18d0a6 561 fHistPtITSMI2 = new TH1F("fHistPtITSMI2","pt distribution of ITSMI2 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
8d63376d 562 fHistPtITSMI2->Sumw2();
563 fHistPtITSMI2->SetMinimum(0);
564 fOutput->Add(fHistPtITSMI2);
565
3f18d0a6 566 fHistPtITSMISPD = new TH1F("fHistPtITSMISPD","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
8d63376d 567 fHistPtITSMISPD->Sumw2();
568 fHistPtITSMISPD->SetMinimum(0);
569 fOutput->Add(fHistPtITSMISPD);
3f18d0a6 570
7b4d74b2 571 fHistPtITSMIoneSPD = new TH1F("fHistPtITSMIoneSPD","pt distribution of ITSMIoneSPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
572 fHistPtITSMIoneSPD->Sumw2();
573 fHistPtITSMIoneSPD->SetMinimum(0);
574 fOutput->Add(fHistPtITSMIoneSPD);
575
3f18d0a6 576 fHistPtTPCInAcc = new TH1F("fHistPtTPCInAcc","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
577 fHistPtTPCInAcc->Sumw2();
578 fHistPtTPCInAcc->SetMinimum(0);
579 fOutput->Add(fHistPtTPCInAcc);
580
f8777463 581 fHistdEdxVSPtTPCInAcc = new TH2F("fHistdEdxVSPtTPCInAcc","dE/dx distribution of TPC tracks; p_{t} [GeV/c]; TPC dE/dx",100,0,1,50,0,500);
582 fOutput->Add(fHistdEdxVSPtTPCInAcc);
583
584 fHistdEdxVSPtITSTPCsel = new TH2F("fHistdEdxVSPtITSTPCsel","dE/dx distribution of TPC tracks; p_{t} [GeV/c]; ITS dE/dx",100,0,1,50,0,500);
585 fOutput->Add(fHistdEdxVSPtITSTPCsel);
586
587 fHistPtVSphiTPCInAcc = new TH2F("fHistPtVSphiTPCInAcc","pt distribution of TPC tracks; phi; p_{t} [GeV/c]",18,0,6.28,20,0,0.5);
588 fHistPtVSphiTPCInAcc->SetMinimum(0);
589 fOutput->Add(fHistPtVSphiTPCInAcc);
590
591 fHistPtTPCInAccNoTRDout = new TH1F("fHistPtTPCInAccNoTRDout","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
592 fHistPtTPCInAccNoTRDout->Sumw2();
593 fHistPtTPCInAccNoTRDout->SetMinimum(0);
594 fOutput->Add(fHistPtTPCInAccNoTRDout);
595
596 fHistPtTPCInAccNoTOFout = new TH1F("fHistPtTPCInAccNoTOFout","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
597 fHistPtTPCInAccNoTOFout->Sumw2();
598 fHistPtTPCInAccNoTOFout->SetMinimum(0);
599 fOutput->Add(fHistPtTPCInAccNoTOFout);
600
601 fHistPtTPCInAccWithPtTPCAtVtx = new TH1F("fHistPtTPCInAccWithPtTPCAtVtx","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
602 fHistPtTPCInAccWithPtTPCAtVtx->Sumw2();
603 fHistPtTPCInAccWithPtTPCAtVtx->SetMinimum(0);
604 fOutput->Add(fHistPtTPCInAccWithPtTPCAtVtx);
605
606 fHistPtTPCInAccWithPtTPCAtInnerWall = new TH1F("fHistPtTPCInAccWithPtTPCAtInnerWall","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
607 fHistPtTPCInAccWithPtTPCAtInnerWall->Sumw2();
608 fHistPtTPCInAccWithPtTPCAtInnerWall->SetMinimum(0);
609 fOutput->Add(fHistPtTPCInAccWithPtTPCAtInnerWall);
610
611 fHistDeltaPtTPC = new TH2F("fHistDeltaPtTPC","pt distribution of TPC tracks; p_{t} [GeV/c]; p_{t} TPC at vtx - p_{t} at inner wall [GeV/c]",10,0,1,50,-1,1);
612 fHistDeltaPtTPC->SetMinimum(0);
613 fOutput->Add(fHistDeltaPtTPC);
614
3f18d0a6 615 fHistPtITSMI6InAcc = new TH1F("fHistPtITSMI6InAcc","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
616 fHistPtITSMI6InAcc->Sumw2();
617 fHistPtITSMI6InAcc->SetMinimum(0);
618 fOutput->Add(fHistPtITSMI6InAcc);
619
620 fHistPtITSMI5InAcc = new TH1F("fHistPtITSMI5InAcc","pt distribution of ITSMI5 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
621 fHistPtITSMI5InAcc->Sumw2();
622 fHistPtITSMI5InAcc->SetMinimum(0);
623 fOutput->Add(fHistPtITSMI5InAcc);
624
625 fHistPtITSMI4InAcc = new TH1F("fHistPtITSMI4InAcc","pt distribution of ITSMI4 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
626 fHistPtITSMI4InAcc->Sumw2();
627 fHistPtITSMI4InAcc->SetMinimum(0);
628 fOutput->Add(fHistPtITSMI4InAcc);
8d63376d 629
3f18d0a6 630 fHistPtITSMI3InAcc = new TH1F("fHistPtITSMI3InAcc","pt distribution of ITSMI3 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
631 fHistPtITSMI3InAcc->Sumw2();
632 fHistPtITSMI3InAcc->SetMinimum(0);
633 fOutput->Add(fHistPtITSMI3InAcc);
634
635 fHistPtITSMI2InAcc = new TH1F("fHistPtITSMI2InAcc","pt distribution of ITSMI2 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
636 fHistPtITSMI2InAcc->Sumw2();
637 fHistPtITSMI2InAcc->SetMinimum(0);
638 fOutput->Add(fHistPtITSMI2InAcc);
639
640 fHistPtITSMISPDInAcc = new TH1F("fHistPtITSMISPDInAcc","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
641 fHistPtITSMISPDInAcc->Sumw2();
642 fHistPtITSMISPDInAcc->SetMinimum(0);
643 fOutput->Add(fHistPtITSMISPDInAcc);
644
7b4d74b2 645 fHistPtITSMIoneSPDInAcc = new TH1F("fHistPtITSMIoneSPDInAcc","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
646 fHistPtITSMIoneSPDInAcc->Sumw2();
647 fHistPtITSMIoneSPDInAcc->SetMinimum(0);
648 fOutput->Add(fHistPtITSMIoneSPDInAcc);
f8777463 649
650 fHistPtITSTPCsel = new TH1F("fHistPtITSTPCsel","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
651 fHistPtITSTPCsel->Sumw2();
652 fHistPtITSTPCsel->SetMinimum(0);
653 fOutput->Add(fHistPtITSTPCsel);
654
655 fHistPtITSTPCselP = new TH1F("fHistPtITSTPCselP","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
656 fHistPtITSTPCselP->Sumw2();
657 fHistPtITSTPCselP->SetMinimum(0);
658 fOutput->Add(fHistPtITSTPCselP);
659
660 fHistPtITSTPCselS = new TH1F("fHistPtITSTPCselS","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
661 fHistPtITSTPCselS->Sumw2();
662 fHistPtITSTPCselS->SetMinimum(0);
663 fOutput->Add(fHistPtITSTPCselS);
664
665 fHistPtITSTPCselSfromStrange = new TH1F("fHistPtITSTPCselSfromStrange","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
666 fHistPtITSTPCselSfromStrange->Sumw2();
667 fHistPtITSTPCselSfromStrange->SetMinimum(0);
668 fOutput->Add(fHistPtITSTPCselSfromStrange);
669
670 fHistPtITSTPCselPfromStrange = new TH1F("fHistPtITSTPCselPfromStrange","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
671 fHistPtITSTPCselPfromStrange->Sumw2();
672 fHistPtITSTPCselPfromStrange->SetMinimum(0);
673 fOutput->Add(fHistPtITSTPCselPfromStrange);
674
675 fHistPtITSTPCselSfromMat = new TH1F("fHistPtITSTPCselSfromMat","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
676 fHistPtITSTPCselSfromMat->Sumw2();
677 fHistPtITSTPCselSfromMat->SetMinimum(0);
678 fOutput->Add(fHistPtITSTPCselSfromMat);
679
680 fHistPtTPCInAccP = new TH1F("fHistPtTPCInAccP","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
681 fHistPtTPCInAccP->Sumw2();
682 fHistPtTPCInAccP->SetMinimum(0);
683 fOutput->Add(fHistPtTPCInAccP);
684
685 fHistPtTPCInAccPfromStrange = new TH1F("fHistPtTPCInAccPfromStrange","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
686 fHistPtTPCInAccPfromStrange->Sumw2();
687 fHistPtTPCInAccPfromStrange->SetMinimum(0);
688 fOutput->Add(fHistPtTPCInAccPfromStrange);
689
690 fHistPtITSMI6InAccP = new TH1F("fHistPtITSMI6InAccP","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
691 fHistPtITSMI6InAccP->Sumw2();
692 fHistPtITSMI6InAccP->SetMinimum(0);
693 fOutput->Add(fHistPtITSMI6InAccP);
694
695 fHistPtITSMI5InAccP = new TH1F("fHistPtITSMI5InAccP","pt distribution of ITSMI5 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
696 fHistPtITSMI5InAccP->Sumw2();
697 fHistPtITSMI5InAccP->SetMinimum(0);
698 fOutput->Add(fHistPtITSMI5InAccP);
699
700 fHistPtITSMI4InAccP = new TH1F("fHistPtITSMI4InAccP","pt distribution of ITSMI4 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
701 fHistPtITSMI4InAccP->Sumw2();
702 fHistPtITSMI4InAccP->SetMinimum(0);
703 fOutput->Add(fHistPtITSMI4InAccP);
704
705 fHistPtITSMI3InAccP = new TH1F("fHistPtITSMI3InAccP","pt distribution of ITSMI3 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
706 fHistPtITSMI3InAccP->Sumw2();
707 fHistPtITSMI3InAccP->SetMinimum(0);
708 fOutput->Add(fHistPtITSMI3InAccP);
709
710 fHistPtITSMI2InAccP = new TH1F("fHistPtITSMI2InAccP","pt distribution of ITSMI2 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
711 fHistPtITSMI2InAccP->Sumw2();
712 fHistPtITSMI2InAccP->SetMinimum(0);
713 fOutput->Add(fHistPtITSMI2InAccP);
714
715 fHistPtITSMISPDInAccP = new TH1F("fHistPtITSMISPDInAccP","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
716 fHistPtITSMISPDInAccP->Sumw2();
717 fHistPtITSMISPDInAccP->SetMinimum(0);
718 fOutput->Add(fHistPtITSMISPDInAccP);
719
720 fHistPtITSMIoneSPDInAccP = new TH1F("fHistPtITSMIoneSPDInAccP","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
721 fHistPtITSMIoneSPDInAccP->Sumw2();
722 fHistPtITSMIoneSPDInAccP->SetMinimum(0);
723 fOutput->Add(fHistPtITSMIoneSPDInAccP);
724
725 fHistPtTPCInAccS = new TH1F("fHistPtTPCInAccS","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
726 fHistPtTPCInAccS->Sumw2();
727 fHistPtTPCInAccS->SetMinimum(0);
728 fOutput->Add(fHistPtTPCInAccS);
729
730 fHistPtTPCInAccSfromStrange = new TH1F("fHistPtTPCInAccSfromStrange","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
731 fHistPtTPCInAccSfromStrange->Sumw2();
732 fHistPtTPCInAccSfromStrange->SetMinimum(0);
733 fOutput->Add(fHistPtTPCInAccSfromStrange);
734
735 fHistPtTPCInAccSfromMat = new TH1F("fHistPtTPCInAccSfromMat","pt distribution of TPC tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
736 fHistPtTPCInAccSfromMat->Sumw2();
737 fHistPtTPCInAccSfromMat->SetMinimum(0);
738 fOutput->Add(fHistPtTPCInAccSfromMat);
739
740 fHistPtITSMI6InAccS = new TH1F("fHistPtITSMI6InAccS","pt distribution of ITSMI6 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
741 fHistPtITSMI6InAccS->Sumw2();
742 fHistPtITSMI6InAccS->SetMinimum(0);
743 fOutput->Add(fHistPtITSMI6InAccS);
744
745 fHistPtITSMI5InAccS = new TH1F("fHistPtITSMI5InAccS","pt distribution of ITSMI5 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
746 fHistPtITSMI5InAccS->Sumw2();
747 fHistPtITSMI5InAccS->SetMinimum(0);
748 fOutput->Add(fHistPtITSMI5InAccS);
749
750 fHistPtITSMI4InAccS = new TH1F("fHistPtITSMI4InAccS","pt distribution of ITSMI4 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
751 fHistPtITSMI4InAccS->Sumw2();
752 fHistPtITSMI4InAccS->SetMinimum(0);
753 fOutput->Add(fHistPtITSMI4InAccS);
754
755 fHistPtITSMI3InAccS = new TH1F("fHistPtITSMI3InAccS","pt distribution of ITSMI3 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
756 fHistPtITSMI3InAccS->Sumw2();
757 fHistPtITSMI3InAccS->SetMinimum(0);
758 fOutput->Add(fHistPtITSMI3InAccS);
759
760 fHistPtITSMI2InAccS = new TH1F("fHistPtITSMI2InAccS","pt distribution of ITSMI2 tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
761 fHistPtITSMI2InAccS->Sumw2();
762 fHistPtITSMI2InAccS->SetMinimum(0);
763 fOutput->Add(fHistPtITSMI2InAccS);
764
765 fHistPtITSMISPDInAccS = new TH1F("fHistPtITSMISPDInAccS","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
766 fHistPtITSMISPDInAccS->Sumw2();
767 fHistPtITSMISPDInAccS->SetMinimum(0);
768 fOutput->Add(fHistPtITSMISPDInAccS);
769
770 fHistPtITSMIoneSPDInAccS = new TH1F("fHistPtITSMIoneSPDInAccS","pt distribution of ITSMISPD tracks; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
771 fHistPtITSMIoneSPDInAccS->Sumw2();
772 fHistPtITSMIoneSPDInAccS->SetMinimum(0);
773 fOutput->Add(fHistPtITSMIoneSPDInAccS);
7b4d74b2 774
3f18d0a6 775 fHistPtITSMIokbadoutinz6 = new TH1F("fHistPtITSMIokbadoutinz6","pt distribution of ITSMI tracks with 6 layers OK; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
776 fHistPtITSMIokbadoutinz6->Sumw2();
777 fHistPtITSMIokbadoutinz6->SetMinimum(0);
778 fOutput->Add(fHistPtITSMIokbadoutinz6);
8d63376d 779
c2893e82 780 fHistPtITSMIokbadoutinz4InAcc = new TH1F("fHistPtITSMIokbadoutinz4InAcc","pt distribution of ITSMI tracks with 4 layers OK; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
781 fHistPtITSMIokbadoutinz4InAcc->Sumw2();
782 fHistPtITSMIokbadoutinz4InAcc->SetMinimum(0);
783 fOutput->Add(fHistPtITSMIokbadoutinz4InAcc);
784
785 fHistPtITSMIokbadoutinz5InAcc = new TH1F("fHistPtITSMIokbadoutinz5InAcc","pt distribution of ITSMI tracks with 5 layers OK; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
786 fHistPtITSMIokbadoutinz5InAcc->Sumw2();
787 fHistPtITSMIokbadoutinz5InAcc->SetMinimum(0);
788 fOutput->Add(fHistPtITSMIokbadoutinz5InAcc);
789
3f18d0a6 790 fHistPtITSMIokbadoutinz6InAcc = new TH1F("fHistPtITSMIokbadoutinz6InAcc","pt distribution of ITSMI tracks with 6 layers OK; p_{t} [GeV/c]; N tracks",nPtBins,xPtBins);
791 fHistPtITSMIokbadoutinz6InAcc->Sumw2();
792 fHistPtITSMIokbadoutinz6InAcc->SetMinimum(0);
793 fOutput->Add(fHistPtITSMIokbadoutinz6InAcc);
8d63376d 794
f8777463 795 fHistRProdVtxInAccP = new TH1F("fHistRProdVtxInAccP","Radius of production vertex for primaries; r [cm]; N tracks",100,0,10);
796 fHistRProdVtxInAccP->Sumw2();
797 fHistRProdVtxInAccP->SetMinimum(0);
798 fOutput->Add(fHistRProdVtxInAccP);
799
800 fHistRProdVtxInAccS = new TH1F("fHistRProdVtxInAccS","Radius of production vertex for secondaries; r [cm]; N tracks",100,0,10);
801 fHistRProdVtxInAccS->Sumw2();
802 fHistRProdVtxInAccS->SetMinimum(0);
803 fOutput->Add(fHistRProdVtxInAccS);
804
805 fHistd0rphiTPCInAccP150200 = new TH1F("fHistd0rphiTPCInAccP150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
806 fHistd0rphiTPCInAccP150200->Sumw2();
807 fHistd0rphiTPCInAccP150200->SetMinimum(0);
808 fOutput->Add(fHistd0rphiTPCInAccP150200);
809
810 fHistd0rphiTPCInAccP500700 = new TH1F("fHistd0rphiTPCInAccP500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
811 fHistd0rphiTPCInAccP500700->Sumw2();
812 fHistd0rphiTPCInAccP500700->SetMinimum(0);
813 fOutput->Add(fHistd0rphiTPCInAccP500700);
814
815 fHistd0rphiTPCInAccP10001500 = new TH1F("fHistd0rphiTPCInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
816 fHistd0rphiTPCInAccP10001500->Sumw2();
817 fHistd0rphiTPCInAccP10001500->SetMinimum(0);
818 fOutput->Add(fHistd0rphiTPCInAccP10001500);
819
820 fHistd0rphiTPCInAccS150200 = new TH1F("fHistd0rphiTPCInAccS150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
821 fHistd0rphiTPCInAccS150200->Sumw2();
822 fHistd0rphiTPCInAccS150200->SetMinimum(0);
823 fOutput->Add(fHistd0rphiTPCInAccS150200);
824
825 fHistd0rphiTPCInAccS500700 = new TH1F("fHistd0rphiTPCInAccS500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
826 fHistd0rphiTPCInAccS500700->Sumw2();
827 fHistd0rphiTPCInAccS500700->SetMinimum(0);
828 fOutput->Add(fHistd0rphiTPCInAccS500700);
829
830 fHistd0rphiTPCInAccS10001500 = new TH1F("fHistd0rphiTPCInAccS10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-5,5);
831 fHistd0rphiTPCInAccS10001500->Sumw2();
832 fHistd0rphiTPCInAccS10001500->SetMinimum(0);
833 fOutput->Add(fHistd0rphiTPCInAccS10001500);
834
835 fHistd0rphiITSMISPDInAccP150200 = new TH1F("fHistd0rphiITSMISPDInAccP150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
836 fHistd0rphiITSMISPDInAccP150200->Sumw2();
837 fHistd0rphiITSMISPDInAccP150200->SetMinimum(0);
838 fOutput->Add(fHistd0rphiITSMISPDInAccP150200);
839
840 fHistd0rphiITSMISPDInAccP500700 = new TH1F("fHistd0rphiITSMISPDInAccP500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
841 fHistd0rphiITSMISPDInAccP500700->Sumw2();
842 fHistd0rphiITSMISPDInAccP500700->SetMinimum(0);
843 fOutput->Add(fHistd0rphiITSMISPDInAccP500700);
844
845 fHistd0rphiITSMISPDInAccP10001500 = new TH1F("fHistd0rphiITSMISPDInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
846 fHistd0rphiITSMISPDInAccP10001500->Sumw2();
847 fHistd0rphiITSMISPDInAccP10001500->SetMinimum(0);
848 fOutput->Add(fHistd0rphiITSMISPDInAccP10001500);
849
850 fHistd0rphiITSMISPDInAccS150200 = new TH1F("fHistd0rphiITSMISPDInAccS150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
851 fHistd0rphiITSMISPDInAccS150200->Sumw2();
852 fHistd0rphiITSMISPDInAccS150200->SetMinimum(0);
853 fOutput->Add(fHistd0rphiITSMISPDInAccS150200);
854
855 fHistd0rphiITSMISPDInAccS500700 = new TH1F("fHistd0rphiITSMISPDInAccS500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
856 fHistd0rphiITSMISPDInAccS500700->Sumw2();
857 fHistd0rphiITSMISPDInAccS500700->SetMinimum(0);
858 fOutput->Add(fHistd0rphiITSMISPDInAccS500700);
859
860 fHistd0rphiITSMISPDInAccS10001500 = new TH1F("fHistd0rphiITSMISPDInAccS10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
861 fHistd0rphiITSMISPDInAccS10001500->Sumw2();
862 fHistd0rphiITSMISPDInAccS10001500->SetMinimum(0);
863 fOutput->Add(fHistd0rphiITSMISPDInAccS10001500);
864
865 fHistd0rphiITSMIoneSPDInAccP150200 = new TH1F("fHistd0rphiITSMIoneSPDInAccP150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
866 fHistd0rphiITSMIoneSPDInAccP150200->Sumw2();
867 fHistd0rphiITSMIoneSPDInAccP150200->SetMinimum(0);
868 fOutput->Add(fHistd0rphiITSMIoneSPDInAccP150200);
869
870 fHistd0rphiITSMIoneSPDInAccP500700 = new TH1F("fHistd0rphiITSMIoneSPDInAccP500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
871 fHistd0rphiITSMIoneSPDInAccP500700->Sumw2();
872 fHistd0rphiITSMIoneSPDInAccP500700->SetMinimum(0);
873 fOutput->Add(fHistd0rphiITSMIoneSPDInAccP500700);
874
875 fHistd0rphiITSMIoneSPDInAccP10001500 = new TH1F("fHistd0rphiITSMIoneSPDInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
876 fHistd0rphiITSMIoneSPDInAccP10001500->Sumw2();
877 fHistd0rphiITSMIoneSPDInAccP10001500->SetMinimum(0);
878 fOutput->Add(fHistd0rphiITSMIoneSPDInAccP10001500);
879
880 fHistd0zITSMIoneSPDInAccP150200 = new TH1F("fHistd0zITSMIoneSPDInAccP150200","Longitudinal imp. par. to VertexTracks for primaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
881 fHistd0zITSMIoneSPDInAccP150200->Sumw2();
882 fHistd0zITSMIoneSPDInAccP150200->SetMinimum(0);
883 fOutput->Add(fHistd0zITSMIoneSPDInAccP150200);
884
885 fHistd0zITSMIoneSPDInAccP500700 = new TH1F("fHistd0zITSMIoneSPDInAccP500700","Longitudinal imp. par. to VertexTracks for primaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
886 fHistd0zITSMIoneSPDInAccP500700->Sumw2();
887 fHistd0zITSMIoneSPDInAccP500700->SetMinimum(0);
888 fOutput->Add(fHistd0zITSMIoneSPDInAccP500700);
889
890 fHistd0zITSMIoneSPDInAccP10001500 = new TH1F("fHistd0zITSMIoneSPDInAccP10001500","Longitudinal imp. par. to VertexTracks for primaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
891 fHistd0zITSMIoneSPDInAccP10001500->Sumw2();
892 fHistd0zITSMIoneSPDInAccP10001500->SetMinimum(0);
893 fOutput->Add(fHistd0zITSMIoneSPDInAccP10001500);
894
895 fHistd0rphiVSphiITSMIoneSPDInAccP10001500 = new TH2F("fHistd0rphiVSphiITSMIoneSPDInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; phi",30,-0.3,0.3,40,0,2*3.1415);
896 fOutput->Add(fHistd0rphiVSphiITSMIoneSPDInAccP10001500);
897
898 fHistd0rphiVSetaITSMIoneSPDInAccP10001500 = new TH2F("fHistd0rphiVSetaITSMIoneSPDInAccP10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; eta",30,-0.3,0.3,10,-1,1);
899 fOutput->Add(fHistd0rphiVSetaITSMIoneSPDInAccP10001500);
900
901 fHistd0rphiITSMIoneSPDInAccS150200 = new TH1F("fHistd0rphiITSMIoneSPDInAccS150200","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
902 fHistd0rphiITSMIoneSPDInAccS150200->Sumw2();
903 fHistd0rphiITSMIoneSPDInAccS150200->SetMinimum(0);
904 fOutput->Add(fHistd0rphiITSMIoneSPDInAccS150200);
905
906 fHistd0rphiITSMIoneSPDInAccS500700 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
907 fHistd0rphiITSMIoneSPDInAccS500700->Sumw2();
908 fHistd0rphiITSMIoneSPDInAccS500700->SetMinimum(0);
909 fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700);
910
911 fHistd0rphiITSMIoneSPDInAccS500700from22 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from22","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
912 fHistd0rphiITSMIoneSPDInAccS500700from22->Sumw2();
913 fHistd0rphiITSMIoneSPDInAccS500700from22->SetMinimum(0);
914 fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from22);
915
916 fHistd0rphiITSMIoneSPDInAccS500700from211 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from211","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
917 fHistd0rphiITSMIoneSPDInAccS500700from211->Sumw2();
918 fHistd0rphiITSMIoneSPDInAccS500700from211->SetMinimum(0);
919 fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from211);
920
921 fHistd0rphiITSMIoneSPDInAccS500700from310 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from310","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
922 fHistd0rphiITSMIoneSPDInAccS500700from310->Sumw2();
923 fHistd0rphiITSMIoneSPDInAccS500700from310->SetMinimum(0);
924 fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from310);
925
926 fHistd0rphiITSMIoneSPDInAccS500700from321 = new TH1F("fHistd0rphiITSMIoneSPDInAccS500700from321","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
927 fHistd0rphiITSMIoneSPDInAccS500700from321->Sumw2();
928 fHistd0rphiITSMIoneSPDInAccS500700from321->SetMinimum(0);
929 fOutput->Add(fHistd0rphiITSMIoneSPDInAccS500700from321);
930
931 fHistd0rphiITSMIoneSPDInAccS10001500 = new TH1F("fHistd0rphiITSMIoneSPDInAccS10001500","Transverse imp. par. to VertexTracks for primaries; d_{0} rphi [cm]; N tracks",300,-1.5,1.5);
932 fHistd0rphiITSMIoneSPDInAccS10001500->Sumw2();
933 fHistd0rphiITSMIoneSPDInAccS10001500->SetMinimum(0);
934 fOutput->Add(fHistd0rphiITSMIoneSPDInAccS10001500);
935
936 fHistd0zITSMIoneSPDInAccS150200 = new TH1F("fHistd0zITSMIoneSPDInAccS150200","Longitudinal imp. par. to VertexTracks for secondaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
937 fHistd0zITSMIoneSPDInAccS150200->Sumw2();
938 fHistd0zITSMIoneSPDInAccS150200->SetMinimum(0);
939 fOutput->Add(fHistd0zITSMIoneSPDInAccS150200);
940
941 fHistd0zITSMIoneSPDInAccS500700 = new TH1F("fHistd0zITSMIoneSPDInAccS500700","Longitudinal imp. par. to VertexTracks for secondaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
942 fHistd0zITSMIoneSPDInAccS500700->Sumw2();
943 fHistd0zITSMIoneSPDInAccS500700->SetMinimum(0);
944 fOutput->Add(fHistd0zITSMIoneSPDInAccS500700);
945
946 fHistd0zITSMIoneSPDInAccS10001500 = new TH1F("fHistd0zITSMIoneSPDInAccS10001500","Longitudinal imp. par. to VertexTracks for secondaries; d_{0} z [cm]; N tracks",300,-1.5,1.5);
947 fHistd0zITSMIoneSPDInAccS10001500->Sumw2();
948 fHistd0zITSMIoneSPDInAccS10001500->SetMinimum(0);
949 fOutput->Add(fHistd0zITSMIoneSPDInAccS10001500);
950
951
8d63376d 952 // ntuples
953 //
f8777463 954 fNtupleESDTracks = new TNtuple("fNtupleESDTracks","tracks","pt:eta:phi:d0:z0:sigmad0:sigmaz0:ptMC:pdgMC:d0MC:d0MCv:z0MCv:sigmad0MCv:sigmaz0MCv:ITSflag:isPrimary:isTPCSel");
8d63376d 955 fOutput->Add(fNtupleESDTracks);
956
c2893e82 957 fNtupleITSAlignExtra = new TNtuple("fNtupleITSAlignExtra","ITS alignment checks: extra clusters","layer:x:y:z:dxy:dz:xloc:zloc:npoints:pt");
8d63376d 958 fOutput->Add(fNtupleITSAlignExtra);
959
c2893e82 960 fNtupleITSAlignSPDTracklets = new TNtuple("fNtupleITSAlignSPDTracklets","ITS alignment checks: SPD tracklets wrt SPD vertex","phi:theta:z:dxy:dz:pt");
8d63376d 961 fOutput->Add(fNtupleITSAlignSPDTracklets);
962
963 return;
964}
965
966//________________________________________________________________________
d98a315a 967void AliAnalysisTaskITSTrackingCheck::UserExec(Option_t *)
8d63376d 968{
969 // Main loop
970 // Called for each event
d98a315a 971 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
972
973 if (!fESD) {
974 Printf("ERROR: fESD not available");
975 return;
976 }
977
f8777463 978
979 fHistNEvents->Fill(-1);
980
981 Bool_t isSelected = kTRUE;
982 if(fUsePhysSel) {
983 isSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
984 }
985 if(!isSelected) return;
986
d98a315a 987
2308c814 988 //if(fESD->GetEventType()!=7) return;
8d63376d 989
8d63376d 990 // *********** MC info ***************
991 TArrayF mcVertex(3);
992 mcVertex[0]=9999.; mcVertex[1]=9999.; mcVertex[2]=9999.;
993 Float_t dNchdy=-999.;
994
995 TParticle *part=0;
996 AliESDVertex *vertexMC=0;
997 AliStack *stack=0;
998 if (fReadMC) {
999 AliMCEventHandler *eventHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
1000 if (!eventHandler) {
1001 Printf("ERROR: Could not retrieve MC event handler");
1002 return;
1003 }
1004
1005 AliMCEvent* mcEvent = eventHandler->MCEvent();
1006 if (!mcEvent) {
1007 Printf("ERROR: Could not retrieve MC event");
1008 return;
1009 }
1010
1011 stack = mcEvent->Stack();
1012 if (!stack) {
1013 AliDebug(AliLog::kError, "Stack not available");
1014 return;
1015 }
1016
1017 AliHeader* header = mcEvent->Header();
1018 if (!header) {
1019 AliDebug(AliLog::kError, "Header not available");
1020 return;
1021 }
1022 AliGenEventHeader* genHeader = header->GenEventHeader();
1023 genHeader->PrimaryVertex(mcVertex);
1024
1025
1026 Int_t ngenpart = (Int_t)stack->GetNtrack();
1027 //printf("# generated particles = %d\n",ngenpart);
1028 dNchdy=0;
1029 for(Int_t ip=0; ip<ngenpart; ip++) {
1030 part = (TParticle*)stack->Particle(ip);
1031 // keep only electrons, muons, pions, kaons and protons
1032 Int_t apdg = TMath::Abs(part->GetPdgCode());
1033 if(apdg!=11 && apdg!=13 && apdg!=211 && apdg!=321 && apdg!=2212) continue;
1034 // reject secondaries
1035 if(TMath::Sqrt((part->Vx()-mcVertex[0])*(part->Vx()-mcVertex[0])+(part->Vy()-mcVertex[1])*(part->Vy()-mcVertex[1]))>0.0010) continue;
1036 // reject incoming protons
1037 Double_t energy = part->Energy();
1038 if(energy>900.) continue;
1039 Double_t pz = part->Pz();
1040 Double_t y = 0.5*TMath::Log((energy+pz+1.e-13)/(energy-pz+1.e-13));
1041 if(TMath::Abs(y)<1.0) dNchdy += 0.5; // count 1/2 of particles in |y|<1
1042 }
1043 //printf("# primary particles = %7.1f\n",dNchdy);
1044 }
1045 // *********** MC info ***************
1046 Double_t mcVtxPos[3]={mcVertex[0],mcVertex[1],mcVertex[2]},mcVtxSigma[3]={0,0,0};
1047 vertexMC = new AliESDVertex(mcVtxPos,mcVtxSigma);
1048
8d63376d 1049 // *********** ESD friends ***********
8d63376d 1050 if(!fESDfriend) printf("no ESD friend\n");
1051
f8777463 1052
1053 //------- event selection --------
1054 Int_t mincontrSPDvtx=1;
1055 Double_t maxzSPDvtx=20.;
1056 Double_t maxrSPDvtx=1.;
1057 //------- TPC track selection --------
1058 Int_t minclsTPC=90;
1059 Double_t maxchi2perTPCcl=4.;
1060 Double_t minEtaInAcc=-0.8; // -0.8
1061 Double_t maxEtaInAcc=0.8; // 0.8
1062 Double_t maxdcaxy=1e6;//2.4;
1063 Double_t maxdcaz=1e6;//3.2;
1064 AliESDtrackCuts* esdtrackCutsTPC = new AliESDtrackCuts("esdtrackCutsTPC");
1065 esdtrackCutsTPC->SetMaxDCAToVertexXY(maxdcaxy);
1066 esdtrackCutsTPC->SetMaxDCAToVertexZ(maxdcaz);
1067 esdtrackCutsTPC->SetDCAToVertex2D(kTRUE);
1068 esdtrackCutsTPC->SetRequireSigmaToVertex(kFALSE);
1069 esdtrackCutsTPC->SetRequireTPCRefit(kFALSE);// cannot do it because status not copied in AliESDtrack::FillTPCOnlyTrack
1070 esdtrackCutsTPC->SetAcceptKinkDaughters(kFALSE);
1071 esdtrackCutsTPC->SetMinNClustersTPC(minclsTPC);
1072 esdtrackCutsTPC->SetMaxChi2PerClusterTPC(maxchi2perTPCcl);
1073 esdtrackCutsTPC->SetEtaRange(minEtaInAcc,maxEtaInAcc);
1074 SetESDtrackCutsTPC(esdtrackCutsTPC);
1075 //------- ITS+TPC track selection --------
1076 Double_t maxdcaxyITSTPC=0.2;
1077 Double_t maxdcazITSTPC=1.e6;
1078 AliESDtrackCuts* esdtrackCutsITSTPC = new AliESDtrackCuts("esdtrackCutsITSTPC");
1079 esdtrackCutsITSTPC->SetMaxDCAToVertexXY(maxdcaxyITSTPC);
1080 esdtrackCutsITSTPC->SetMaxDCAToVertexZ(maxdcazITSTPC);
1081 esdtrackCutsITSTPC->SetDCAToVertex2D(kFALSE);
1082 esdtrackCutsITSTPC->SetRequireSigmaToVertex(kFALSE);
1083 esdtrackCutsITSTPC->SetRequireITSRefit(kTRUE);
1084 esdtrackCutsITSTPC->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
1085 AliESDtrackCuts::kAny);
1086 esdtrackCutsITSTPC->SetAcceptKinkDaughters(kFALSE);
1087 esdtrackCutsITSTPC->SetMinNClustersTPC(minclsTPC);
1088 esdtrackCutsITSTPC->SetMaxChi2PerClusterTPC(maxchi2perTPCcl);
1089 esdtrackCutsITSTPC->SetEtaRange(minEtaInAcc,maxEtaInAcc);
1090 SetESDtrackCutsITSTPC(esdtrackCutsITSTPC);
1091 //---------------------------------------
1092
1093
8d63376d 1094 //
2308c814 1095
1096 /*
8d63376d 1097 // ********** Trigger *****************
1098 ULong64_t triggerMask;
1099 ULong64_t spdFO = (1 << 14);
1100 ULong64_t v0left = (1 << 11);
1101 ULong64_t v0right = (1 << 12);
1102
1103 triggerMask=fESD->GetTriggerMask();
1104 // MB1: SPDFO || V0L || V0R
1105 Bool_t eventTriggered = (triggerMask & spdFO || ((triggerMask & v0left) || (triggerMask & v0right)));
1106 //MB2: GFO && V0R
1107 //triggerMask & spdFO && ((triggerMask&v0left) || (triggerMask&v0right))
1108 // ************ Trigger ******************
1109 if(!eventTriggered) return;
2308c814 1110 */
8d63376d 1111
f8777463 1112
1113 fHistNEvents->Fill(0);
1114
8d63376d 1115 // SPD vertex
1116 const AliESDVertex *spdv=fESD->GetPrimaryVertexSPD();
f8777463 1117 // Select good SPD vertices
1118 TString spdvtitle=spdv->GetTitle();
1119 //if(!spdvtitle.Contains("3D")) return;
1120 if(spdv->GetNContributors()<mincontrSPDvtx ||
1121 TMath::Abs(spdv->GetZv())>maxzSPDvtx ||
1122 spdv->GetXv()*spdv->GetXv()+spdv->GetYv()*spdv->GetYv()>maxrSPDvtx) {
1123 delete esdtrackCutsTPC; esdtrackCutsTPC=0;
1124 delete esdtrackCutsITSTPC; esdtrackCutsITSTPC=0;
1125 return;
1126 }
1127
1128 //
1129 // Tracks vertex
1130 const AliESDVertex *vertexESD = fESD->GetPrimaryVertexTracks();
1131
1132
1133 if(spdvtitle.Contains("3D")) {
1134 fHistNEvents->Fill(1);
1135 fHistNEvents->Fill(3);
1136 } else {
1137 fHistNEvents->Fill(2);
1138 fHistNEvents->Fill(3);
1139 }
1140 if(vertexESD) {
1141 if(vertexESD->GetStatus()) fHistNEvents->Fill(4);
1142 }
1143
8d63376d 1144 Int_t ntracks = fESD->GetNumberOfTracks();
7b4d74b2 1145 printf("Tracks # = %d\n",fESD->GetNumberOfTracks());
8d63376d 1146
1147 fHistNtracks->Fill(ntracks);
1148 // Post the data already here
d98a315a 1149 PostData(1, fOutput);
8d63376d 1150
1151 Int_t idet,status; Float_t xloc,zloc;
3f18d0a6 1152 Double_t rSPDouter=7.6,rSDDouter=23.9,rSSDouter=43.1;
1153 Double_t zSPDouter=14.1,zSDDouter=29.7,zSSDouter=48.9;
1154
8d63376d 1155 // loop on tracks
1156 for(Int_t itr=0; itr<ntracks; itr++) {
1157 AliESDtrack *track = fESD->GetTrack(itr);
2308c814 1158 // remove kink daughters
8d63376d 1159 if(track->GetKinkIndex(0)>0) continue;
1160
3f18d0a6 1161 // remove tracks not reco in ITS or TPC
1162 if (!(track->GetStatus() & AliESDtrack::kITSin) &&
1163 !(track->GetStatus() & AliESDtrack::kTPCin)) continue;
8d63376d 1164
f8777463 1165 Bool_t isPrimary=kTRUE,isFromMat=kFALSE,isFromStrange=kFALSE;
1166 Double_t rProdVtx=0,zProdVtx=0;
1167 Int_t pdgTrk=0,pdgMoth=0;
1168
1169 Int_t trkLabel = TMath::Abs(track->GetLabel());
1170 // check if it is primary
1171 if(fReadMC && stack) {
1172 isPrimary = stack->IsPhysicalPrimary(trkLabel);
1173 part = (TParticle*)stack->Particle(trkLabel);
1174 rProdVtx = TMath::Sqrt((part->Vx()-mcVertex[0])*(part->Vx()-mcVertex[0])+(part->Vy()-mcVertex[1])*(part->Vy()-mcVertex[1]));
1175 zProdVtx = TMath::Abs(part->Vz()-mcVertex[2]);
1176 //if(rProdVtx<2.8) isPrimary=kTRUE; // this could be tried
1177 pdgTrk = TMath::Abs(part->GetPdgCode());
1178 if(part->GetFirstMother()>=0) {
1179 TParticle* mm=stack->Particle(part->GetFirstMother());
1180 if(mm) pdgMoth = TMath::Abs(mm->GetPdgCode());
1181 }
1182 if(pdgMoth==310 || pdgMoth==321 || pdgMoth==3122) isFromStrange=kTRUE;
1183 if(pdgMoth==211 || pdgMoth==22 || pdgMoth==2112 || pdgMoth==2212) isFromMat=kTRUE;
1184 }
1185
1186 Bool_t itsrefit=kFALSE,tpcrefit=kFALSE,itsfindable=kFALSE,itsfindableAcc=kFALSE;
8d63376d 1187 if ((track->GetStatus() & AliESDtrack::kITSrefit)) itsrefit=kTRUE;
f8777463 1188 if ((track->GetStatus() & AliESDtrack::kTPCrefit)) tpcrefit=kTRUE;
1189 //if ((track->GetStatus() & AliESDtrack::kTPCin)) tpcrefit=kTRUE;
8d63376d 1190
f8777463 1191 // remove tracks with kTPCin and not kTPCrefit
1192 if ((track->GetStatus() & AliESDtrack::kTPCin) && !tpcrefit) continue;
8d63376d 1193
f8777463 1194 AliESDtrack *trackTPC = 0;
1195 if(tpcrefit) trackTPC = AliESDtrackCuts::GetTPCOnlyTrack(fESD,itr);
1196 if(trackTPC) trackTPC->RelateToVertex(spdv,fESD->GetMagneticField(),100.); // relate it to the SPD vertex
1197
2308c814 1198
2308c814 1199 Int_t nclsITS = track->GetNcls(0);
3f18d0a6 1200 Int_t nclsokbadoutinzITS = 0;
2308c814 1201 Bool_t outInZ=kFALSE;
f8777463 1202 Bool_t skipTrack=kFALSE;
8d63376d 1203
1204 for(Int_t layer=0; layer<6; layer++) {
8d63376d 1205 track->GetITSModuleIndexInfo(layer,idet,status,xloc,zloc);
f8777463 1206 if(status<0) continue;
2308c814 1207 if(layer>=2) idet+=240; // add n SPD modules
f8777463 1208 if(layer>=4) idet+=260; // add n SDD modules
2308c814 1209 if(status==4) outInZ=kTRUE;
f8777463 1210 if(tpcrefit) {
8d63376d 1211 if(status==1) fHistClusterMapITSMIok->Fill(layer);
1212 if(status==2) fHistClusterMapITSMIbad->Fill(layer);
1213 if(status==3) fHistClusterMapITSMIskipped->Fill(layer);
1214 if(status==4) fHistClusterMapITSMIoutinz->Fill(layer);
1215 if(status==5) fHistClusterMapITSMInocls->Fill(layer);
1216 if(status==6) fHistClusterMapITSMInorefit->Fill(layer);
f8777463 1217 if(status==1 && !outInZ) fHistClusterMapModuleITSMIokInAcc->Fill(idet);
1218 if(status==2 && !outInZ) fHistClusterMapModuleITSMIbadInAcc->Fill(idet);
1219 if(status==5 && !outInZ) fHistClusterMapModuleITSMInoclsInAcc->Fill(idet);
3f18d0a6 1220 if(status==1 || status==2 || status==4) {
1221 fHistClusterMapITSMIokoutinzbad->Fill(layer);
1222 nclsokbadoutinzITS++;
1223 }
f8777463 1224 if((layer==2 || layer==3) && status!=2 && status!=4 && TMath::Abs(zloc)<2) {
1225 Float_t xlocCls;
1226 Int_t nClsInMod = NumberOfITSClusters(idet,xlocCls);
1227 fHistxlocSDDall->Fill(xloc);
1228 fHistzlocSDDall->Fill(zloc);
1229 if(/*status==1*/ nClsInMod>0) {
1230 fHistxlocSDDok->Fill(xloc);
1231 fHistxlocVSmodSDDok->Fill(idet,xloc);
1232 fHistzlocSDDok->Fill(zloc);
1233 }else if(TMath::Abs(xloc)<1) printf("EVENT %d PHI %f LAYER %d\n",fESD->GetEventNumberInFile(),track->Phi(),layer);
1234 }
8d63376d 1235 } else {
1236 if(status==1) fHistClusterMapITSSAok->Fill(layer);
1237 if(status==2) fHistClusterMapITSSAbad->Fill(layer);
1238 if(status==3) fHistClusterMapITSSAskipped->Fill(layer);
1239 if(status==4) fHistClusterMapITSSAoutinz->Fill(layer);
1240 if(status==5) fHistClusterMapITSSAnocls->Fill(layer);
1241 if(status==6) fHistClusterMapITSSAnorefit->Fill(layer);
2308c814 1242 if(status==1 || status==2 || status==4) fHistClusterMapITSSAokoutinzbad->Fill(layer);
1243 if(status==1 && !outInZ) {fHistClusterMapITSSAokInAcc->Fill(layer);fHistClusterMapModuleITSSAokInAcc->Fill(idet);}
1244 if(status==2 && !outInZ) {fHistClusterMapITSSAbadInAcc->Fill(layer);fHistClusterMapModuleITSSAbadInAcc->Fill(idet);}
1245 if(status==3 && !outInZ) fHistClusterMapITSSAskippedInAcc->Fill(layer);
1246 if(status==4 && !outInZ) fHistClusterMapITSSAoutinzInAcc->Fill(layer);
1247 if(status==5 && !outInZ) {fHistClusterMapITSSAnoclsInAcc->Fill(layer);fHistClusterMapModuleITSSAnoclsInAcc->Fill(idet);}
1248 if(status==6 && !outInZ) fHistClusterMapITSSAnorefitInAcc->Fill(layer);
1249 if((status==1 || status==2 || status==4) && !outInZ) fHistClusterMapITSSAokoutinzbadInAcc->Fill(layer);
1250 }
1251 if(TESTBIT(track->GetITSClusterMap(),layer)) {
f8777463 1252 if(tpcrefit) {
2308c814 1253 fHistClusterMapITSMI->Fill(layer);
1254 } else {
1255 fHistClusterMapITSSA->Fill(layer);
1256 if(!outInZ) fHistClusterMapITSSAInAcc->Fill(layer);
1257 }
8d63376d 1258 }
f8777463 1259 //if(idet>=238 && idet<=239) skipTrack=kTRUE;
8d63376d 1260 }
f8777463 1261 if(skipTrack) continue;
8d63376d 1262
3f18d0a6 1263 // TPC track findable in ITS
f8777463 1264 if(tpcrefit && trackTPC) {
1265 if(fESDtrackCutsTPC->AcceptTrack(trackTPC)) {
1266 itsfindable=kTRUE;
1267 Double_t zAtSSDouter=100,zAtSDDouter=100,zAtSPDouter=100;
1268 track->GetZAt(rSSDouter,fESD->GetMagneticField(),zAtSSDouter);
1269 track->GetZAt(rSDDouter,fESD->GetMagneticField(),zAtSDDouter);
1270 track->GetZAt(rSPDouter,fESD->GetMagneticField(),zAtSPDouter);
1271 fHistPtTPC->Fill(track->Pt());
1272 if(TMath::Abs(zAtSSDouter)<100.*zSSDouter &&
1273 TMath::Abs(zAtSDDouter)<100.*zSDDouter &&
1274 TMath::Abs(zAtSPDouter)<100.*zSPDouter) {
1275 itsfindableAcc=kTRUE;
1276 fHistdEdxVSPtTPCInAcc->Fill(track->Pt(),track->GetTPCsignal());
1277 fHistPtTPCInAcc->Fill(track->Pt());
1278 fHistPtVSphiTPCInAcc->Fill(track->Phi(),track->Pt());
1279 if(!(track->GetStatus()&AliESDtrack::kTRDout)) fHistPtTPCInAccNoTRDout->Fill(track->Pt());
1280 if(!(track->GetStatus()&AliESDtrack::kTOFout)) fHistPtTPCInAccNoTOFout->Fill(track->Pt());
1281 fHistPtTPCInAccWithPtTPCAtVtx->Fill(trackTPC->Pt());
1282 Double_t pTPCinnerwall[3];
1283 track->GetInnerPxPyPz(pTPCinnerwall);
1284 Double_t ptTPCinnerwall=TMath::Sqrt(pTPCinnerwall[0]*pTPCinnerwall[0]+pTPCinnerwall[1]*pTPCinnerwall[1]);
1285 fHistPtTPCInAccWithPtTPCAtInnerWall->Fill(ptTPCinnerwall);
1286 fHistDeltaPtTPC->Fill(ptTPCinnerwall,ptTPCinnerwall-trackTPC->Pt());
1287 fHistPhiTPCInAcc->Fill(track->Phi());
1288 if(isPrimary) {
1289 fHistPtTPCInAccP->Fill(track->Pt());
1290 if(pdgTrk==321) fHistPtTPCInAccPfromStrange->Fill(track->Pt());
1291 } else {
1292 fHistPtTPCInAccS->Fill(track->Pt());
1293 if(isFromMat) fHistPtTPCInAccSfromMat->Fill(track->Pt());
1294 if(isFromStrange) fHistPtTPCInAccSfromStrange->Fill(track->Pt());
1295 }
1296 //if(isPrimary) {fHistRProdVtxInAccP->Fill(rProdVtx);} else {fHistRProdVtxInAccS->Fill(rProdVtx);}
1297 }
3f18d0a6 1298 }
2308c814 1299 }
8d63376d 1300
f8777463 1301 // track prolonged in ITS with different conditions
1302 if(itsrefit) {
1303 if(itsfindable) {
1304 if(nclsITS==6) fHistPtITSMI6->Fill(track->Pt());
1305 if(nclsITS==5) fHistPtITSMI5->Fill(track->Pt());
1306 if(nclsITS==4) fHistPtITSMI4->Fill(track->Pt());
1307 if(nclsITS==3) fHistPtITSMI3->Fill(track->Pt());
1308 if(nclsITS==2) fHistPtITSMI2->Fill(track->Pt());
1309 if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1))
1310 fHistPtITSMISPD->Fill(track->Pt());
1311 if(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1))
1312 fHistPtITSMIoneSPD->Fill(track->Pt());
1313 if(nclsokbadoutinzITS==6) fHistPtITSMIokbadoutinz6->Fill(track->Pt());
1314 }
1315 if(itsfindableAcc) {
1316 if(nclsITS==6) {
1317 fHistPtITSMI6InAcc->Fill(track->Pt());
1318 if(isPrimary) {fHistPtITSMI6InAccP->Fill(track->Pt());} else {fHistPtITSMI6InAccS->Fill(track->Pt());}
1319 }
1320 if(nclsITS==5) {
1321 fHistPtITSMI5InAcc->Fill(track->Pt());
1322 if(isPrimary) {fHistPtITSMI5InAccP->Fill(track->Pt());} else {fHistPtITSMI5InAccS->Fill(track->Pt());}
1323 }
1324 if(nclsITS==4) {
1325 fHistPtITSMI4InAcc->Fill(track->Pt());
1326 if(isPrimary) {fHistPtITSMI4InAccP->Fill(track->Pt());} else {fHistPtITSMI4InAccS->Fill(track->Pt());}
1327 }
1328 if(nclsITS==3) {
1329 fHistPtITSMI3InAcc->Fill(track->Pt());
1330 if(isPrimary) {fHistPtITSMI3InAccP->Fill(track->Pt());} else {fHistPtITSMI3InAccS->Fill(track->Pt());}
1331 }
1332 if(nclsITS==2) {
1333 fHistPtITSMI2InAcc->Fill(track->Pt());
1334 if(isPrimary) {fHistPtITSMI2InAccP->Fill(track->Pt());} else {fHistPtITSMI2InAccS->Fill(track->Pt());}
1335 }
1336 if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1)) {
1337 fHistPtITSMISPDInAcc->Fill(track->Pt());
1338 if(isPrimary) {fHistPtITSMISPDInAccP->Fill(track->Pt());} else {fHistPtITSMISPDInAccS->Fill(track->Pt());}
1339 }
1340 if(track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) {
1341 fHistPtITSMIoneSPDInAcc->Fill(track->Pt());
1342 if(isPrimary) {fHistPtITSMIoneSPDInAccP->Fill(track->Pt());} else {fHistPtITSMIoneSPDInAccS->Fill(track->Pt());}
1343 }
1344 if(nclsokbadoutinzITS==6) fHistPtITSMIokbadoutinz6InAcc->Fill(track->Pt());
1345 if(nclsokbadoutinzITS==5) fHistPtITSMIokbadoutinz5InAcc->Fill(track->Pt());
1346 if(nclsokbadoutinzITS==4) fHistPtITSMIokbadoutinz4InAcc->Fill(track->Pt());
1347 if(nclsokbadoutinzITS==6) fHistPhiITSMIokbadoutinz6InAcc->Fill(track->Phi());
1348 }
1349 }
8d63376d 1350
f8777463 1351 if(tpcrefit) {
2308c814 1352 fHistNclsITSMI->Fill(nclsITS);
1353 } else {
1354 fHistNclsITSSA->Fill(nclsITS);
1355 if(!outInZ) fHistNclsITSSAInAcc->Fill(nclsITS);
1356 }
1357
f8777463 1358
1359 if(tpcrefit && fUseITSSAforNtuples) continue; // only ITS-SA for ntuples
1360 if(!tpcrefit && !fUseITSSAforNtuples) continue; // only ITS-TPC for ntuples
8d63376d 1361
f8777463 1362 // we need the vertex to compute the impact parameters
1363 //if(!vertexESD) continue;
1364 //if(!(vertexESD->GetStatus())) continue;
8d63376d 1365
f8777463 1366 // impact parameter to VertexTracks
1367 Float_t d0z0[2],covd0z0[3];
1368 Double_t d0z0TPC[2],covd0z0TPC[3];
1369 if(!track->RelateToVertex(spdv,fESD->GetMagneticField(),kVeryBig)) continue;
1370 track->GetImpactParameters(d0z0,covd0z0);
1371 if(trackTPC) trackTPC->PropagateToDCA(spdv,fESD->GetMagneticField(),kVeryBig,d0z0TPC,covd0z0TPC);
1372 if(covd0z0[0]<0. || covd0z0[2]<0.) continue;
1373 if(covd0z0TPC[0]<0. || covd0z0TPC[2]<0.) continue;
1374
1375 // track that passes final ITS+TPC cuts
1376 if(itsfindableAcc && fESDtrackCutsITSTPC->AcceptTrack(track)) {
1377 fHistPtITSTPCsel->Fill(track->Pt());
1378 fHistdEdxVSPtITSTPCsel->Fill(track->Pt(),track->GetITSsignal());
1379 if(isPrimary) {
1380 fHistPtITSTPCselP->Fill(track->Pt());
1381 if(pdgTrk==321) fHistPtITSTPCselPfromStrange->Fill(track->Pt());
1382 } else {
1383 fHistPtITSTPCselS->Fill(track->Pt());
1384 if(isFromMat) fHistPtITSTPCselSfromMat->Fill(track->Pt());
1385 if(isFromStrange) fHistPtITSTPCselSfromStrange->Fill(track->Pt());
1386 }
1387 }
1388
1389
1390 // fill d0 histos
1391 if((!fUseITSSAforNtuples&&itsfindableAcc) || fUseITSSAforNtuples) {
1392 if(track->Pt()>0.150 && track->Pt()<0.200) {
1393 if(isPrimary) {
1394 fHistd0rphiTPCInAccP150200->Fill(d0z0TPC[0]);
1395 if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
1396 fHistd0rphiITSMISPDInAccP150200->Fill(d0z0[0]);
1397 if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1398 if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP150200->Fill(d0z0[0]);
1399 if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccP150200->Fill(d0z0[1]);
1400 }
1401 } else {
1402 fHistd0rphiTPCInAccS150200->Fill(d0z0TPC[0]);
1403 if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
1404 fHistd0rphiITSMISPDInAccS150200->Fill(d0z0[0]);
1405 if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1406 if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccS150200->Fill(d0z0[0]);
1407 if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccS150200->Fill(d0z0[1]);
1408 if(TMath::Abs(d0z0[0])<0.1) fHistPDGMoth150200->Fill(pdgMoth);
1409 }
1410 }
1411 }
1412 if(track->Pt()>0.500 && track->Pt()<0.700) {
1413 if(isPrimary) {
1414 fHistd0rphiTPCInAccP500700->Fill(d0z0TPC[0]);
1415 if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
1416 fHistd0rphiITSMISPDInAccP500700->Fill(d0z0[0]);
1417 if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1418 if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP500700->Fill(d0z0[0]);
1419 if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccP500700->Fill(d0z0[1]);
1420 }
1421 } else {
1422 fHistd0rphiTPCInAccS500700->Fill(d0z0TPC[0]);
1423 if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
1424 fHistd0rphiITSMISPDInAccS500700->Fill(d0z0[0]);
1425 if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1426 fHistPDGTrk->Fill(pdgTrk);
1427 fHistPDGMoth->Fill(pdgMoth);
1428 if(TMath::Abs(d0z0[0])<0.1) fHistPDGMoth500700->Fill(pdgMoth);
1429 if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccS500700->Fill(d0z0[0]);
1430 if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccS500700->Fill(d0z0[1]);
1431 if(pdgMoth==310) fHistd0rphiITSMIoneSPDInAccS500700from310->Fill(d0z0[0]);
1432 if(pdgMoth==321) fHistd0rphiITSMIoneSPDInAccS500700from321->Fill(d0z0[0]);
1433 if(pdgMoth==211) fHistd0rphiITSMIoneSPDInAccS500700from211->Fill(d0z0[0]);
1434 if(pdgMoth==22) fHistd0rphiITSMIoneSPDInAccS500700from22->Fill(d0z0[0]);
1435 if(pdgMoth!=310 && pdgMoth!=321 && pdgMoth<3000) fHistRProdVtxInAccS->Fill(rProdVtx);
1436 }
1437 }
1438 }
1439 if(track->Pt()>1.000 && track->Pt()<1.500) {
1440 if(isPrimary) {
1441 fHistd0rphiTPCInAccP10001500->Fill(d0z0TPC[0]);
1442 if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
1443 fHistd0rphiITSMISPDInAccP10001500->Fill(d0z0[0]);
1444 if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1445 if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccP10001500->Fill(d0z0[0]);
1446 if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccP10001500->Fill(d0z0[1]);
1447 fHistd0rphiVSphiITSMIoneSPDInAccP10001500->Fill(d0z0[0],track->Phi());
1448 fHistd0rphiVSetaITSMIoneSPDInAccP10001500->Fill(d0z0[0],track->Eta());
1449 }
1450 } else {
1451 fHistd0rphiTPCInAccS10001500->Fill(d0z0TPC[0]);
1452 if(track->HasPointOnITSLayer(0) && track->HasPointOnITSLayer(1) && itsrefit)
1453 fHistd0rphiITSMISPDInAccS10001500->Fill(d0z0[0]);
1454 if((track->HasPointOnITSLayer(0) || track->HasPointOnITSLayer(1)) && itsrefit) {
1455 if(TMath::Abs(d0z0[1])<maxdcazITSTPC) fHistd0rphiITSMIoneSPDInAccS10001500->Fill(d0z0[0]);
1456 if(TMath::Abs(d0z0[0])<maxdcaxyITSTPC) fHistd0zITSMIoneSPDInAccS10001500->Fill(d0z0[1]);
1457 if(TMath::Abs(d0z0[0])<0.1) fHistPDGMoth10001500->Fill(pdgMoth);
1458 }
1459 }
1460 }
8d63376d 1461 }
1462
2308c814 1463
f8777463 1464 // encode ITS cluster map, including MC info
1465 Int_t iITSflag=MakeITSflag(track);
8d63376d 1466
1467 // if MC info is available: get particle properties
1468 Float_t ptMC=-999.,pdgMC=-999.,d0MC=-999.;
1469 Double_t d0z0MCv[2]={-999.,-999.},covd0z0MCv[3]={1.,1.,1.};
1470 if(fReadMC) {
1471 part = (TParticle*)stack->Particle(trkLabel);
1472 ptMC=part->Pt();
1473 pdgMC=part->GetPdgCode();
1474 d0MC=ParticleImpParMC(part,vertexMC,0.1*fESD->GetMagneticField());
1475 track->PropagateToDCA(vertexMC,fESD->GetMagneticField(),100.,d0z0MCv,covd0z0MCv);
1476 if(covd0z0MCv[0]<0. || covd0z0MCv[2]<0.) continue;
8d63376d 1477 }
1478
ab846928 1479 Double_t sigmad0MCv=TMath::Sqrt(covd0z0MCv[0]);
1480 if(!itsrefit) sigmad0MCv *= -1.;
f8777463 1481 Float_t isPrimaryFl = (isPrimary ? 1. : 0.);
1482 Float_t isTPCSelFl = (itsfindableAcc ? 1. : 0.);
ab846928 1483
8d63376d 1484 // fill ntuple with track properties
2308c814 1485 if(fFillNtuples && SelectPt(track->Pt())) {
f8777463 1486 Float_t fillArray[21]={track->Pt(),track->Eta(),track->Phi(),d0z0[0],d0z0[1],TMath::Sqrt(covd0z0[0]),TMath::Sqrt(covd0z0[2]),ptMC,pdgMC,d0MC,d0z0MCv[0],d0z0MCv[1],sigmad0MCv,TMath::Sqrt(covd0z0MCv[2]),(Float_t)iITSflag,isPrimaryFl,isTPCSelFl};
8d63376d 1487 fNtupleESDTracks->Fill(fillArray);
1488 }
1489
1490 //---------------------------------------------
1491 // AliTrackPoints: alignment checks
1492 //
2308c814 1493 if(!fFillNtuples) continue;
ab846928 1494 if(!fESDfriend) continue;
1495
8d63376d 1496 const AliTrackPointArray *array = track->GetTrackPointArray();
2308c814 1497 if(!array) continue;
8d63376d 1498 AliTrackPoint point;
1499 Int_t pointOnLayer[6]={0,0,0,0,0,0};
1500 Int_t indexAssociated[6]={-1,-1,-1,-1,-1,-1},indexExtra=-1;
1501 Bool_t extra=kFALSE;
1502 Int_t layerId,layerExtra=-1;
1503 for(Int_t ipt=0; ipt<array->GetNPoints(); ipt++) {
1504 array->GetPoint(point,ipt);
1505 Float_t r = TMath::Sqrt(point.GetX()*point.GetX()+point.GetY()*point.GetY());
1506
1507 if(r>3 && r<6) {
1508 layerId = 0;
1509 } else if(r>6 && r<8) {
1510 layerId = 1;
1511 } else if(r>8 && r<18) {
1512 layerId = 2;
3f18d0a6 1513 } else if(r>18 && r<30) {
8d63376d 1514 layerId = 3;
3f18d0a6 1515 } else if(r>30 && r<40) {
8d63376d 1516 layerId = 4;
3f18d0a6 1517 } else if(r>40 && r<50) {
8d63376d 1518 layerId = 5;
1519 } else {
1520 layerId=100;
1521 }
1522
1523 // only ITS points
1524 if(layerId>5) continue;
1525
1526 if(!point.IsExtra()) {
1527 pointOnLayer[layerId]++;
1528 indexAssociated[layerId]=ipt;
1529 } else {
1530 // this is an extra cluster
1531 extra=kTRUE;
1532 layerExtra=layerId;
1533 indexExtra=ipt;
1534 }
1535 } // end loop on AliTrackPoints
1536
1537 TString vtitle = spdv->GetTitle();
1538 if(!vtitle.Contains("3D")) continue;
1539
1540 // SPD tracklet
1541 if(indexAssociated[0]>=0 && indexAssociated[1]>=0) {
1542 AliTrackPoint pointSPD1,pointSPD2;
1543 array->GetPoint(pointSPD1,indexAssociated[0]);
1544 array->GetPoint(pointSPD2,indexAssociated[1]);
1545 Float_t phi=TMath::ATan2(pointSPD2.GetY()-pointSPD1.GetY(),pointSPD2.GetX()-pointSPD1.GetX());
1546 Float_t lambda=TMath::ATan((pointSPD2.GetZ()-pointSPD1.GetZ())/TMath::Sqrt((pointSPD2.GetX()-pointSPD1.GetX())*(pointSPD2.GetX()-pointSPD1.GetX())+(pointSPD2.GetY()-pointSPD1.GetY())*(pointSPD2.GetY()-pointSPD1.GetY())));
1547 Float_t theta=0.5*TMath::Pi()-lambda;
1548 TParticle particle(211,0,0,0,0,0,TMath::Cos(phi),TMath::Sin(phi),TMath::Tan(lambda),10.,pointSPD1.GetX(),pointSPD1.GetY(),pointSPD1.GetZ(),0);
1549 AliESDtrack tracklet(&particle);
1550 Float_t dz[2];
1551 // distance to primary SPD (only if 3D and high multiplicity)
1552 if(spdv->GetNContributors()>10) {
3f18d0a6 1553 tracklet.GetDZ(spdv->GetXv(),spdv->GetYv(),spdv->GetZv(),0,dz);
1554 //tracklet.GetDZ(-0.07,0.25,spdv->GetZv(),0,dz);
c2893e82 1555 fNtupleITSAlignSPDTracklets->Fill(phi,theta,0.5*(pointSPD1.GetZ()+pointSPD2.GetZ()),dz[0],dz[1],track->Pt());
8d63376d 1556 }
1557 }
1558
1559 // distance to extra
3f18d0a6 1560 if(extra && spdv->GetNContributors()>4 && indexAssociated[layerExtra]>-1) {
8d63376d 1561 AliTrackPoint pointExtra,pointAssociated;
1562 array->GetPoint(pointAssociated,indexAssociated[layerExtra]);
1563 array->GetPoint(pointExtra,indexExtra);
1564 Float_t phiExtra = TMath::ATan2(pointExtra.GetY()-spdv->GetYv(),pointExtra.GetX()-spdv->GetXv());
1565 Float_t phiAssociated = TMath::ATan2(pointAssociated.GetY()-spdv->GetYv(),pointAssociated.GetX()-spdv->GetXv());
1566 Float_t rExtra = TMath::Sqrt((pointExtra.GetX()-spdv->GetXv())*(pointExtra.GetX()-spdv->GetXv())+(pointExtra.GetY()-spdv->GetYv())*(pointExtra.GetY()-spdv->GetYv()));
1567 Float_t rAssociated = TMath::Sqrt((pointAssociated.GetX()-spdv->GetXv())*(pointAssociated.GetX()-spdv->GetXv())+(pointAssociated.GetY()-spdv->GetYv())*(pointAssociated.GetY()-spdv->GetYv()));
1568 Float_t dzExtra[2];
1569 dzExtra[0] = (phiExtra-phiAssociated)*0.5*(rExtra+rAssociated);
1570 dzExtra[1] = pointExtra.GetZ()-pointAssociated.GetZ()-(rExtra-rAssociated)*(pointAssociated.GetZ()-spdv->GetZv())/rAssociated;
1571 Float_t xlocExtra=-100.,zlocExtra=-100.;
c2893e82 1572 fNtupleITSAlignExtra->Fill(layerExtra,pointExtra.GetX(),pointExtra.GetY(),pointExtra.GetZ(),dzExtra[0],dzExtra[1],xlocExtra,zlocExtra,nclsITS,track->Pt());
8d63376d 1573 }
1574
f8777463 1575 if(trackTPC) { delete trackTPC; trackTPC=0; }
8d63376d 1576 } // end loop on tracks
1577
1578 if(vertexMC) { delete vertexMC; vertexMC=0; }
1579
f8777463 1580 delete esdtrackCutsTPC; esdtrackCutsTPC=0;
1581 delete esdtrackCutsITSTPC; esdtrackCutsITSTPC=0;
1582
8d63376d 1583 return;
1584}
1585
1586//________________________________________________________________________
1587void AliAnalysisTaskITSTrackingCheck::Terminate(Option_t *)
1588{
1589 // Draw result to the screen
1590 // Called once at the end of the query
2efff183 1591 fOutput = dynamic_cast<TList*> (GetOutputData(1));
8d63376d 1592 if (!fOutput) {
1593 Printf("ERROR: fOutput not available");
1594 return;
1595 }
f8777463 1596 fHistNEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEvents"));
1597 fHistNEventsFrac = dynamic_cast<TH1F*>(fOutput->FindObject("fHistNEventsFrac"));
1598 if(fHistNEvents && fHistNEventsFrac) {
1599 for(Int_t ibin=2; ibin<=fHistNEvents->GetNbinsX(); ibin++) {
1600 if(fHistNEvents->GetBinContent(2)) fHistNEventsFrac->SetBinContent(ibin,fHistNEvents->GetBinContent(ibin)/fHistNEvents->GetBinContent(2));
1601 }
1602 }
8d63376d 1603
1604 return;
1605}
1606//---------------------------------------------------------------------------
1607Int_t AliAnalysisTaskITSTrackingCheck::NumberOfITSClustersMC(Int_t label) const
1608{
1609 //
1610 // Return number of ITS clusters produced by MC particle with given label
1611 //
2308c814 1612
8d63376d 1613 AliESDInputHandlerRP *esdHRP = dynamic_cast<AliESDInputHandlerRP*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
1614 if(!esdHRP) return -1;
1615 TTree *cTree = (TTree*)esdHRP->GetTreeR("ITS");
1616 if(!cTree) return -1;
1617 TClonesArray *clusters=0; // new TClonesArray("AliITSRecPoint",10000);
1618 cTree->SetBranchAddress("ITSRecPoints",&clusters);
1619 if(!clusters) return -1;
1620
1621 AliITSRecPoint *c=0;
1622 Int_t i,n,icl,lay,ilab;
1623 Int_t ncls[6]={0,0,0,0,0,0};
1624 Int_t nclstot=0;
1625
1626 for(i=0; i<2198; i++) {
1627 cTree->GetEvent(i);
1628 n=clusters->GetEntriesFast();
1629 for (icl=0; icl<n; icl++) {
1630 c=(AliITSRecPoint*)clusters->UncheckedAt(icl);
1631 lay=c->GetLayer();
1632 for(ilab=0;ilab<3;ilab++) {
1633 if(c->GetLabel(ilab)==label) ncls[lay]++;
1634 }
1635 }
1636 }
1637 for(i=0;i<6;i++) { if(ncls[i]) nclstot++; }
1638
1639 return nclstot;
2308c814 1640 //return label*0;
8d63376d 1641}
1642//---------------------------------------------------------------------------
f8777463 1643Int_t AliAnalysisTaskITSTrackingCheck::NumberOfITSClusters(Int_t idet,Float_t &xloc) const
1644{
1645 //
1646 // Return number of ITS clusters produced by MC particle with given label
1647 //
1648
1649 AliESDInputHandlerRP *esdHRP = dynamic_cast<AliESDInputHandlerRP*> (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
1650 if(!esdHRP) return -1;
1651 TTree *cTree = (TTree*)esdHRP->GetTreeR("ITS");
1652 if(!cTree) return -1;
1653 TClonesArray *clusters=0; // new TClonesArray("AliITSRecPoint",10000);
1654 cTree->SetBranchAddress("ITSRecPoints",&clusters);
1655 if(!clusters) return -1;
1656
1657 AliITSRecPoint *c=0;
1658 Int_t n,icl;
1659
1660 cTree->GetEvent(idet);
1661 n=clusters->GetEntriesFast();
1662
1663 if(n==1) {
1664 for (icl=0; icl<n; icl++) {
1665 c=(AliITSRecPoint*)clusters->UncheckedAt(icl);
1666 xloc = c->GetDetLocalX();
1667 }
1668 }
1669 return n;
1670}
1671//---------------------------------------------------------------------------
8d63376d 1672Double_t AliAnalysisTaskITSTrackingCheck::ParticleImpParMC(TParticle *part,
1673 AliESDVertex *vert,
1674 Double_t bzT) const
1675{
1676 //
1677 // Return the MC value of the impact parameter
1678 //
1679
1680 Double_t vx=part->Vx()-vert->GetX();
1681 Double_t vy=part->Vy()-vert->GetY();
1682
1683 Double_t pt=part->Pt();
1684 Double_t px=part->Px();
1685 Double_t py=part->Py();
1686 Double_t charge = (part->GetPdgCode()>0. ? 1. : -1.);
1687 if(TMath::Abs(part->GetPdgCode())<100) charge*=-1.;
1688
1689 if(px<0.000001) px=0.000001;
f8777463 1690 Double_t rAnd=((10./2.99792458)*pt/bzT)*100.;
8d63376d 1691 Double_t center[3],d0;
1692 center[0]=vx-(1./charge)*rAnd*(py/pt);
1693 center[1]=vy+(1./charge)*rAnd*(px/pt);
1694 center[2]=TMath::Sqrt(center[0]*center[0]+center[1]*center[1]);
1695 d0 = -center[2]+rAnd;
1696
1697 return d0;
1698}
1699//---------------------------------------------------------------------------
1700Bool_t AliAnalysisTaskITSTrackingCheck::SelectPt(Double_t pt)
1701{
1702 //
1703 // Keep only tracks in given pt bins
1704 //
f8777463 1705 Double_t ptlower[11]={0.15,0.29,0.49,0.75,0.9,1.9,3.5,6.5, 9.,19.,27.};
1706 Double_t ptupper[11]={0.16,0.31,0.51,0.85,1.1,2.1,4.5,7.5,11.,21.,33.};
8d63376d 1707
f8777463 1708 for(Int_t i=0; i<11; i++) {
ab846928 1709 if(pt>ptlower[i] && pt<ptupper[i]) {
8d63376d 1710 fCountsPerPtBin[i]++;
1711 return kTRUE;
1712 }
1713 }
1714 return kFALSE;
2308c814 1715 //return kTRUE;
8d63376d 1716}
f8777463 1717//---------------------------------------------------------------------------
1718Int_t AliAnalysisTaskITSTrackingCheck::MakeITSflag(AliESDtrack *track) const {
1719 //
1720 // ITSflag takes the value 0 if the track has no cluster assigned in the SPDs,
1721 // 1 (2) if one cluster is assigned in SPD1(2), 3 if two clusters are present.
1722 // Then the same adding 10,20 or 30 for SDD and 100,200 or 300 for SSD
1723 //
1724 Int_t iITSflag=0;
1725 if(track->HasPointOnITSLayer(0)) iITSflag+=1;
1726 if(track->HasPointOnITSLayer(1)) iITSflag+=2;
1727 if(track->HasPointOnITSLayer(2)) iITSflag+=10;
1728 if(track->HasPointOnITSLayer(3)) iITSflag+=20;
1729 if(track->HasPointOnITSLayer(4)) iITSflag+=100;
1730 if(track->HasPointOnITSLayer(5)) iITSflag+=200;
1731
1732 if(iITSflag==333 && track->GetNcls(0)<6)
1733 printf(" ERROR %d %d\n",track->GetNcls(0),track->GetLabel());
1734
1735 // number of associated ITS clusters
1736 iITSflag += 1000*track->GetNcls(0);
1737
1738 // number of associated TPC clusters
1739 iITSflag += 100000*track->GetNcls(1);
1740
1741 // if MC info and is available
1742 // write the number of ITS clusters produced by this track
1743 Int_t nITSclsMC=0;
1744 if(fReadMC && fReadRPLabels) {
1745 nITSclsMC = NumberOfITSClustersMC(TMath::Abs(track->GetLabel()));
1746 if(nITSclsMC>=0) iITSflag += 10000*nITSclsMC;
1747 // flag fake tracks
1748 if(track->GetLabel()<0) iITSflag *= -1;
1749 }
8d63376d 1750
f8777463 1751 return iITSflag;
1752}
8d63376d 1753
1754
1755