9 #include "TParticlePDG.h"
12 #include "AliAnalysisTask.h"
13 #include "AliAnalysisManager.h"
15 #include "AliESDEvent.h"
17 #include "AliESDVertex.h"
18 #include "AliESDInputHandler.h"
19 #include "AliESDtrackCuts.h"
20 #include "AliMultiplicity.h"
22 #include "AliAnalysisTaskQASym.h"
23 #include "AliExternalTrackParam.h"
24 #include "AliTrackReference.h"
25 #include "AliHeader.h"
26 #include "AliGenEventHeader.h"
27 #include "AliGenDPMjetEventHeader.h"
29 // Analysis Task for basic QA on the ESD
31 // Authors: Jan Fiete Grosse-Oetringhaus, Christian Klein-Boesing,
32 // Andreas Morsch, Eva Sicking
34 ClassImp(AliAnalysisTaskQASym)
36 //________________________________________________________________________
37 AliAnalysisTaskQASym::AliAnalysisTaskQASym(const char *name)
38 : AliAnalysisTaskSE(name)
137 ,fRecDcaPosPhiEtaPos(0)
138 ,fRecDcaNegPhiEtaPos(0)
139 ,fRecDcaPosPhiEtaNeg(0)
140 ,fRecDcaNegPhiEtaNeg(0)
142 ,fRecDcaPosPtEtaPos(0)
143 ,fRecDcaNegPtEtaPos(0)
144 ,fRecDcaPosPtEtaNeg(0)
145 ,fRecDcaNegPtEtaNeg(0)
147 ,fRecPtPosPhiEtaPos(0)
148 ,fRecPtNegPhiEtaPos(0)
149 ,fRecPtPosPhiEtaNeg(0)
150 ,fRecPtNegPhiEtaNeg(0)
153 // ,fRecDcaPhiPtPosEtaPos(0)
154 // ,fRecDcaPhiPtNegEtaPos(0)
155 // ,fRecDcaPhiPtPosEtaNeg(0)
156 // ,fRecDcaPhiPtNegEtaNeg(0)
171 for(Int_t i = 0;i<4;++i){
177 for(Int_t i = 0;i<18;++i){
178 fRecPtTpcSector[i] = 0;
179 fRecEtaTpcSector[i] = 0;
180 fSignedDcaTpcSector[i] = 0;
181 fRecQPtTpcSector[i] = 0;
182 fRecEtaPtTpcSector[i] = 0;
185 for(Int_t i = 0;i< 7;++i){
186 fRecPtPosLadder[i] = 0;
187 fRecPtNegLadder[i] = 0;
188 fRecPhiPosLadder[i] = 0;
189 fRecPhiNegLadder[i] = 0;
190 fRecEtaPosLadder[i] = 0;
191 fRecEtaNegLadder[i] = 0;
194 fSignDcaNegInv[i] = 0;
202 for(Int_t i = 0;i< 3;i++){
203 for(Int_t j = 0;j< 2;j++){
207 fEtaPhiBinPt[i][j]=0;
211 DefineOutput(1, TList::Class());
218 //________________________________________________________________________
219 void AliAnalysisTaskQASym::UserCreateOutputObjects()
224 Bool_t oldStatus = TH1::AddDirectoryStatus();
225 TH1::AddDirectory(kFALSE);
227 Double_t range = 0.3;
230 fHists = new TList();
232 fHistRECpt = new TH1F("fHistRECpt",
235 fEta = new TH1F("fEta",
238 fEtaWidth = new TH1F("fEtaWidth",
241 fPhiWidth = new TH1F("fPhiWidth",
243 200, 0., 2*TMath::Pi());
244 fDcaWidth = new TH1F("fDcaWidth",
246 200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
247 fPtWidth = new TH1F("fPtWidth",
250 fEtavPt = new TH2F("fEtavPt",
254 fPhivPt = new TH2F("fPhivPt",
256 200, 0, 2*TMath::Pi(),
258 fCompareTPCparam = new TH2F("fCompareTPCparam",
260 100, -1., 1.,100,-5, 5);
262 fITSlayer = new TH1F("fITSlayer",
265 fITSlayerEta = new TH2F("fITSlayerEta",
267 8, -1.5, 6.5, 200, -2.,2.);
268 fITSlayerPhi = new TH2F("fITSlayerPhi",
270 8, -1.5, 6.5, 200, 0,2*TMath::Pi());
271 fEtaPhi = new TH2F("fEtaPhi",
273 200, -2., 2., 128, 0., 2. * TMath::Pi());
274 fThetaRec = new TH1F("fThetaRec",
276 180, 0., TMath::Pi());
277 fPhiRec = new TH1F("fPhiRec",
279 180, 0., 2*TMath::Pi());
280 fNumber = new TH1F("fNumber",
281 "number of tracks per event",
283 fNumberAfterCut = new TH1F("fNumberAfterCut",
284 "number of tracks per event after cuts",
286 fVx = new TH1F("fVx",
287 "X of first track point",
289 fVy = new TH1F("fVy",
290 "Y of first track point",
292 fVz = new TH1F("fVz",
293 "Z of first track point",
295 fNVertexSPD = new TH1F("fNVertexSPD",
296 "Number of SPD vertices",
298 fNVertexTracks = new TH1F("fNVertexTracks",
299 "Number of track vertices",
302 fEtaPt = new TH1F("fEtaPt",
306 fQPt = new TH1F("fQPt",
310 fDca = new TH1F("fDca",
312 200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
314 fDcaZ = new TH1F("fDcaZ", "fDcaZ ",200, -3, 3);// limits fitting those of track cuts
317 fqRec = new TH1F("fqRec",
318 " charge all reconstructed particle",
321 fSigmaPtHist = new TH1F("fSigmaPtHist",
322 "Log_{10}(#sigma_{p_{T}})",
326 TString lable[4]={"", "SPD", "Track", "TPC"};
327 for(Int_t i=0;i<4;i++){
328 fVertexX[i] = new TH1F(Form("fVertexX%s",lable[i].Data()),
329 Form("fVertexX%s",lable[i].Data()),
331 fVertexY[i] = new TH1F(Form("fVertexY%s",lable[i].Data()),
332 Form("fVertexY%s",lable[i].Data()),
335 fVertexZ[i] = new TH1F(Form("fVertexZ%s",lable[i].Data()),
336 Form("fVertexZ%s",lable[i].Data()),
340 fVertexZ[i] = new TH1F(Form("fVertexZ%s",lable[i].Data()),
341 Form("fVertexZ%s",lable[i].Data()),
347 for(Int_t ITSlayer_case=0;ITSlayer_case<7;ITSlayer_case++){
349 fSignDcaPos[ITSlayer_case] = new TH1F(Form("fSignDcaPos%d", ITSlayer_case),
351 200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
352 fSignDcaPos[ITSlayer_case]->GetXaxis()->SetTitle("dca");
353 fSignDcaPos[ITSlayer_case]->GetYaxis()->SetTitle("");
356 fSignDcaNeg[ITSlayer_case] = new TH1F(Form("fSignDcaNeg%d", ITSlayer_case),
358 200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
359 fSignDcaNeg[ITSlayer_case]->GetXaxis()->SetTitle("dca");
360 fSignDcaNeg[ITSlayer_case]->GetYaxis()->SetTitle("");
362 fSignDcaNegInv[ITSlayer_case] = new TH1F(Form("fSignDcaNegInv%d", ITSlayer_case),
363 " inverse Signed dca ",
364 200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
365 fSignDcaNegInv[ITSlayer_case]->GetXaxis()->SetTitle("-dca");
366 fSignDcaNegInv[ITSlayer_case]->GetYaxis()->SetTitle("");
371 fPtSigmaPos[ITSlayer_case] = new TH1F(Form("fPtSigmaPos%d", ITSlayer_case),
374 fPtSigmaPos[ITSlayer_case]->GetXaxis()->SetTitle("Log_{10}(#sigma_{pT})");
375 fPtSigmaPos[ITSlayer_case]->GetYaxis()->SetTitle("");
378 fPtSigmaNeg[ITSlayer_case] = new TH1F(Form("fPtSigmaNeg%d",ITSlayer_case),
381 fPtSigmaNeg[ITSlayer_case]->GetXaxis()->SetTitle("Log_{10}(#sigma_{pT})");
382 fPtSigmaNeg[ITSlayer_case]->GetYaxis()->SetTitle("");
388 fqPtRec[ITSlayer_case] = new TH1F(Form("fqPtRec%d",ITSlayer_case),
391 fqPtRec[ITSlayer_case]->GetXaxis()->SetTitle("q_{tr}/p_{T, tr} (GeV/c)");
392 fqPtRec[ITSlayer_case]->GetYaxis()->SetTitle("");
398 fDcaSigmaPos[ITSlayer_case] = new TH2F(Form("fDcaSigmaPos%d", ITSlayer_case),
399 " p_{T} shift vs #sigma_{pT} ",
400 200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9),200, -4., 4. );
401 fDcaSigmaPos[ITSlayer_case]->GetXaxis()->SetTitle("signed DCA)");
402 fDcaSigmaPos[ITSlayer_case]->GetYaxis()->SetTitle("log_{10}(#sigma_{pT})");
405 fDcaSigmaNeg[ITSlayer_case] = new TH2F(Form("fDcaSigmaNeg%d", ITSlayer_case),
406 " p_{T} shift vs #sigma_{pT} ",
407 200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9),200, -4., 4. );
408 fDcaSigmaNeg[ITSlayer_case]->GetXaxis()->SetTitle("signed DCA");
409 fDcaSigmaNeg[ITSlayer_case]->GetYaxis()->SetTitle("log_{10}(#sigma_{pT})");
416 // YIELDs---------- positive and negative particles
418 fRecPtPos = new TH1F("fRecPtPos",
421 fRecPtPos->GetXaxis()->SetTitle("p_{T} (GeV/c)");
422 fRecPtNeg = new TH1F("fRecPtNeg",
425 fRecPtNeg->GetXaxis()->SetTitle("p_{T} (GeV/c)");
428 fRecPhiPos = new TH1F("fRecPhiPos",
431 fRecPhiPos->GetXaxis()->SetTitle("#phi (deg)");
433 fRecPhiNeg = new TH1F("fRecPhiNeg",
436 fRecPhiNeg->GetXaxis()->SetTitle("#phi (deg)");
438 fRecEtaPos = new TH1F("fRecEtaPos",
441 fRecEtaPos->GetXaxis()->SetTitle("#eta");
443 fRecEtaNeg = new TH1F("fRecEtaNeg",
446 fRecEtaNeg->GetXaxis()->SetTitle("#eta");
448 fRecEtaPtPos = new TH1F("fRecEtaPtPos",
451 fRecEtaPtPos->GetXaxis()->SetTitle("#eta/p_{T}");
453 fRecEtaPtNeg = new TH1F("fRecEtaPtNeg",
456 fRecEtaPtNeg->GetXaxis()->SetTitle("#eta/p_{T}");
458 fRecDcaPos = new TH1F("fRecDcaPos",
460 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
461 fRecDcaPos->GetXaxis()->SetTitle("dca (cm)");
462 fRecDcaNeg = new TH1F("fRecDcaNeg",
464 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
465 fRecDcaNeg->GetXaxis()->SetTitle("dca (cm)");
467 fRecDcaNegInv = new TH1F("fRecDcaNegInv",
469 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
470 fRecDcaNegInv->GetXaxis()->SetTitle("dca (cm)");
473 fRecDPos = new TH1F("fRecDPos",
475 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
476 fRecDPos->GetXaxis()->SetTitle("d (cm)");
477 fRecDNeg = new TH1F("fRecDNeg",
479 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
480 fRecDNeg->GetXaxis()->SetTitle("d (cm)");
483 // YIELDs ---------------- positive and negative eta
486 fRecQPtPosEta = new TH1F("fRecQPtPosEta",
489 fRecQPtPosEta->GetXaxis()->SetTitle("q/p_{T} ");
491 fRecQPtNegEta = new TH1F("fRecQPtNegEta",
494 fRecQPtNegEta->GetXaxis()->SetTitle("q/p_{T}");
496 fRecPtPosEta = new TH1F("fRecPtPosEta",
499 fRecPtPosEta->GetXaxis()->SetTitle("p_{T} (GeV/c)");
501 fRecPtNegEta = new TH1F("fRecPtNegEta",
504 fRecPtNegEta->GetXaxis()->SetTitle("p_{T} (GeV/c)");
506 fRecPhiPosEta = new TH1F("fRecPhiPosEta",
509 fRecPhiPosEta->GetXaxis()->SetTitle("#phi (deg)");
511 fRecPhiNegEta = new TH1F("fRecPhiNegEta",
514 fRecPhiNegEta->GetXaxis()->SetTitle("#phi (deg)");
516 fRecDcaPosEta = new TH1F("fRecDcaPosEta",
518 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
519 fRecDcaPosEta->GetXaxis()->SetTitle("dca (cm)");
520 fRecDcaNegEta = new TH1F("fRecDcaNegEta",
522 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
523 fRecDcaNegEta->GetXaxis()->SetTitle("dca (cm)");
525 fRecDPosEta = new TH1F("fRecDPosEta",
527 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
528 fRecDPosEta->GetXaxis()->SetTitle("d (cm)");
529 fRecDNegEta = new TH1F("fRecDNegEta",
532 fRecDNegEta->GetXaxis()->SetTitle("d (cm)");
534 fRecDcaPosPhi = new TH2F("fRecDcaPosPhi",
536 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 180, 0, TMath::Pi()*2);
537 fRecDcaPosPhi->GetXaxis()->SetTitle("dca (cm)");
538 fRecDcaPosPhi->GetYaxis()->SetTitle("#phi (rad.)");
539 fRecDcaNegPhi = new TH2F("fRecDcaNegPhi",
541 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 180, 0, TMath::Pi()*2);
542 fRecDcaNegPhi->GetXaxis()->SetTitle("dca (cm)");
543 fRecDcaNegPhi->GetYaxis()->SetTitle("#phi (rad.)");
545 fRecPtPosPhi = new TH2F("fRecPtPosPhi",
547 100, -2.5, 2., 180, 0, TMath::Pi()*2);
548 fRecPtPosPhi->GetXaxis()->SetTitle("log_{10}(p_{T})");
549 fRecPtPosPhi->GetYaxis()->SetTitle("#phi (rad.)");
550 fRecPtNegPhi = new TH2F("fRecPtNegPhi",
552 100,-2.5 , 2., 180, 0, TMath::Pi()*2);
553 fRecPtNegPhi->GetXaxis()->SetTitle("log_{10}(p_{T})");
554 fRecPtNegPhi->GetYaxis()->SetTitle("#phi (rad.)");
556 fRecEtaPosPhi = new TH2F("fRecEtaPosPhi",
558 100, -1.5, 1.5, 180, 0, TMath::Pi()*2);
559 fRecEtaPosPhi->GetXaxis()->SetTitle("#eta");
560 fRecEtaPosPhi->GetYaxis()->SetTitle("#phi (rad.)");
561 fRecEtaNegPhi = new TH2F("fRecEtaNegPhi",
563 100, -1.5, 1.5, 180, 0, TMath::Pi()*2);
564 fRecEtaNegPhi->GetXaxis()->SetTitle("#eta");
565 fRecEtaNegPhi->GetYaxis()->SetTitle("#phi (rad.)");
567 fRecQPtPhi = new TH2F("fRecQPtPhi",
568 " charge/p_T vs. phi",
569 100,-1. , 1., 180, 0, TMath::Pi()*2);
570 fRecQPtPhi->GetXaxis()->SetTitle("charge/p_{T}");
571 fRecQPtPhi->GetYaxis()->SetTitle("#phi (rad.)");
573 fRecEtaPtPosPhi = new TH2F("fRecEtaPtPosPhi",
575 100, -5, 5., 180, 0, TMath::Pi()*2);
576 fRecEtaPtPosPhi->GetXaxis()->SetTitle("#eta/p_{T}");
577 fRecEtaPtPosPhi->GetYaxis()->SetTitle("#phi (rad.)");
578 fRecEtaPtNegPhi = new TH2F("fRecEtaPtNegPhi",
580 100,-5 , 5., 180, 0, TMath::Pi()*2);
581 fRecEtaPtNegPhi->GetXaxis()->SetTitle("#eta/p_{T}");
582 fRecEtaPtNegPhi->GetYaxis()->SetTitle("#phi (rad.)");
588 fRecDcaPosPhiEtaPos = new TH2F("fRecDcaPosPhiEtaPos",
590 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 180, 0, TMath::Pi()*2);
591 fRecDcaPosPhiEtaPos->GetXaxis()->SetTitle("dca (cm)");
592 fRecDcaPosPhiEtaPos->GetYaxis()->SetTitle("#phi (rad.)");
593 fRecDcaNegPhiEtaPos = new TH2F("fRecDcaNegPhiEtaPos",
595 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 180, 0, TMath::Pi()*2);
596 fRecDcaNegPhiEtaPos->GetXaxis()->SetTitle("dca (cm)");
597 fRecDcaNegPhiEtaPos->GetYaxis()->SetTitle("#phi (rad.)");
599 fRecPtPosPhiEtaPos = new TH2F("fRecPtPosPhiEtaPos",
601 100, -2.5, 2., 180, 0, TMath::Pi()*2);
602 fRecPtPosPhiEtaPos->GetXaxis()->SetTitle("log_{10}(p_{T})");
603 fRecPtPosPhiEtaPos->GetYaxis()->SetTitle("#phi (rad.)");
604 fRecPtNegPhiEtaPos = new TH2F("fRecPtNegPhiEtaPos",
606 100,-2.5 , 2., 180, 0, TMath::Pi()*2);
607 fRecPtNegPhiEtaPos->GetXaxis()->SetTitle("log_{10}(p_{T})");
608 fRecPtNegPhiEtaPos->GetYaxis()->SetTitle("#phi (rad.)");
611 fRecDcaPosPhiEtaNeg = new TH2F("fRecDcaPosPhiEtaNeg",
613 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 180, 0, TMath::Pi()*2);
614 fRecDcaPosPhiEtaNeg->GetXaxis()->SetTitle("dca (cm)");
615 fRecDcaPosPhiEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
616 fRecDcaNegPhiEtaNeg = new TH2F("fRecDcaNegPhiEtaNeg",
618 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 180, 0, TMath::Pi()*2);
619 fRecDcaNegPhiEtaNeg->GetXaxis()->SetTitle("dca (cm)");
620 fRecDcaNegPhiEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
622 fRecPtPosPhiEtaNeg = new TH2F("fRecPtPosPhiEtaNeg",
624 100, -2.5, 2., 180, 0, TMath::Pi()*2);
625 fRecPtPosPhiEtaNeg->GetXaxis()->SetTitle("log_{10}(p_{T})");
626 fRecPtPosPhiEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
627 fRecPtNegPhiEtaNeg = new TH2F("fRecPtNegPhiEtaNeg",
629 100,-2.5 , 2., 180, 0, TMath::Pi()*2);
630 fRecPtNegPhiEtaNeg->GetXaxis()->SetTitle("log_{10}(p_{T})");
631 fRecPtNegPhiEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
634 fRecDcaPosPtEtaPos = new TH2F("fRecDcaPosPtEtaPos",
636 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200, -2, 2);
637 fRecDcaPosPtEtaPos->GetXaxis()->SetTitle("dca (cm)");
638 fRecDcaPosPtEtaPos->GetYaxis()->SetTitle("log_{10}(p_{T})");
640 fRecDcaPosPtEtaNeg = new TH2F("fRecDcaPosPtEtaNeg",
642 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200, -2, 2);
643 fRecDcaPosPtEtaNeg->GetXaxis()->SetTitle("dca (cm)");
644 fRecDcaPosPtEtaNeg->GetYaxis()->SetTitle("log_{10}(p_{T})");
646 fRecDcaNegPtEtaPos = new TH2F("fRecDcaNegPtEtaPos",
648 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200, -2, 2);
649 fRecDcaNegPtEtaPos->GetXaxis()->SetTitle("dca (cm)");
650 fRecDcaNegPtEtaPos->GetYaxis()->SetTitle("log_{10}(p_{T})");
652 fRecDcaNegPtEtaNeg = new TH2F("fRecDcaNegPtEtaNeg",
654 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200, -2, 2);
655 fRecDcaNegPtEtaNeg->GetXaxis()->SetTitle("dca (cm)");
656 fRecDcaNegPtEtaNeg->GetYaxis()->SetTitle("log_{10}(p_{T})");
660 // YIELDs ---------------- for TPC sectors
661 for(Int_t sector=0; sector<18;sector++){
664 fRecPtTpcSector[sector] = new TH1F(Form("fRecPtTpcSector%02d",sector),
665 Form("p_{T} distribution: TPC sector %d",
666 sector),100, 0., pt);
667 fRecPtTpcSector[sector]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
669 fRecEtaTpcSector[sector] = new TH1F(Form("fRecEtaTpcSector%02d",sector),
670 Form("#eta distribution: TPC sector %d",
671 sector),200, -2., 2.);
672 fRecEtaTpcSector[sector]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
675 fSignedDcaTpcSector[sector] = new TH1F(Form("fSignedDcaTpcSector%02d",sector),
676 Form("dca distribution: TPC sector %d",
677 sector),200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9) );
678 fSignedDcaTpcSector[sector]->GetXaxis()->SetTitle("dca");
680 fRecQPtTpcSector[sector] = new TH1F(Form("fRecQPtTpcSector%02d",sector),
681 Form("Q/ p_{T} distribution: TPC sector %d",
682 sector),100, -1., 1.);
683 fRecQPtTpcSector[sector]->GetXaxis()->SetTitle("Q/p_{T} (GeV/c)");
685 fRecEtaPtTpcSector[sector] = new TH1F(Form("fRecEtaPtTpcSector%02d",sector),
686 Form("#eta/ p_{T} distribution: TPC sector %d",
687 sector),100, -1., 1.);
688 fRecEtaPtTpcSector[sector]->GetXaxis()->SetTitle("#eta/p_{T} (GeV/c)");
692 for(Int_t i=0;i<7;i++){
693 fRecPtPosLadder[i] = new TH1F(Form("fRecPtPosLadder%d", i),
694 " p_{T} distribution",
696 fRecPtPosLadder[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
697 fRecPtNegLadder[i] = new TH1F(Form("fRecPtNegLadder%d",i),
698 " p_{T} distribution ",
700 fRecPtNegLadder[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
703 fRecPhiPosLadder[i] = new TH1F(Form("fRecPhiPosLadder%d",i),
704 "#phi distribution: all pos eta",
706 fRecPhiPosLadder[i]->GetXaxis()->SetTitle("#phi (deg)");
708 fRecPhiNegLadder[i] = new TH1F(Form("fRecPhiNegLadder%d", i),
709 "#phi distribution: all neg eta",
711 fRecPhiNegLadder[i]->GetXaxis()->SetTitle("#phi (deg)");
715 fRecEtaPosLadder[i] = new TH1F(Form("fRecEtaPosLadder%d",i),
718 fRecEtaPosLadder[i]->GetXaxis()->SetTitle("#eta)");
720 fRecEtaNegLadder[i] = new TH1F(Form("fRecEtaNegLadder%d", i),
723 fRecEtaNegLadder[i]->GetXaxis()->SetTitle("#eta");
726 Double_t vzmax = 15.;
728 fRecPtPosVz = new TH2F("fRecPtPosVz",
729 "p_{T} distribution vs Vz()",
730 100, -1., 2., 200,-vzmax,vzmax);
731 fRecPtPosVz->GetXaxis()->SetTitle("log_{10}(p_{T})");
733 fRecPtNegVz = new TH2F("fRecPtNegVz",
734 "p_{T} distribution vs Vz()",
735 100, -1., 2.,200,-vzmax,vzmax);
736 fRecPtNegVz->GetXaxis()->SetTitle("Log_{10}(p_{T})");
739 fRecEtaPosVz= new TH2F("fRecEtaPosVz",
740 "#eta distribution vs Vz()",
741 100, -2., 2., 200,-vzmax,vzmax);
742 fRecEtaPosVz->GetXaxis()->SetTitle("#eta");
743 fRecEtaNegVz = new TH2F("fRecEtaNegVz",
744 "#eta distribution vs Vz()",
745 100, -2., 2.,200,-vzmax,vzmax);
746 fRecEtaNegVz->GetXaxis()->SetTitle("#eta");
748 fRecPhiPosVz= new TH2F("fRecPhiPosVz",
749 "#eta distribution vs Vz()",
750 361, 0., 360., 200,-vzmax,vzmax);
751 fRecPhiPosVz->GetXaxis()->SetTitle("#phi (deg)");
752 fRecPhiNegVz = new TH2F("fRecPhiNegVz",
754 361, 0., 360.,200,-vzmax,vzmax);
755 fRecPhiNegVz->GetXaxis()->SetTitle("#phi (deg)");
757 fSignedDcaPosVz= new TH2F("fSignedDcaPosVz",
758 "#eta distribution vs Vz()",
759 200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200,-vzmax,vzmax);
760 fSignedDcaPosVz->GetXaxis()->SetTitle("dca (cm)");
761 fSignedDcaNegVz = new TH2F("fSignedDcaNegVz",
763 200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9),200,-vzmax,vzmax);
764 fSignedDcaNegVz->GetXaxis()->SetTitle("dca (cm)");
766 fRecQPtPosEtaVz= new TH2F("fRecQPtPosEtaVz",
767 " Q/p_{T} distribution vs Vz()",
768 100, -1., 1., 200,-vzmax,vzmax);
769 fRecQPtPosEtaVz->GetXaxis()->SetTitle("Q/p_{T}");
770 fRecQPtNegEtaVz = new TH2F("fRecQPtNegEtaVz",
771 " Q/p_{T} distribution vs Vz()",
772 100, -1., 1.,200,-vzmax,vzmax);
773 fRecQPtNegEtaVz->GetXaxis()->SetTitle("Q/p_{T}");
776 fRecEtaPtPosVz= new TH2F("fRecEtaPtPosVz",
777 " #eta/p_{T} distribution vs Vz()",
778 100, -1., 1., 200,-vzmax,vzmax);
779 fRecEtaPtPosVz->GetXaxis()->SetTitle("#eta/p_{T");
780 fRecEtaPtNegVz = new TH2F("fRecEtaPtNegVz",
781 " #eta/p_{T} distribution vs Vz()",
782 100, -1., 1.,200,-vzmax,vzmax);
783 fRecEtaPtNegVz->GetXaxis()->SetTitle("#eta/p_{T}");
786 fDeltaPhiAll = new TH1F("fDeltaPhiAll",
787 " #Delta #phi",200,-360,360);
788 fDeltaPhiAll->GetXaxis()->SetTitle("#Delta #phi");
791 fDeltaPhiLeading = new TH2F("fDeltaPhiLeading",
792 " #Delta #phi",361,-360,360, 361,0, 360);
793 fDeltaPhiLeading->GetXaxis()->SetTitle("#Delta #phi (deg.)");
794 fDeltaPhiLeading->GetYaxis()->SetTitle("#phi_{leading particle} (deg.)");
796 fDiffDcaD = new TH1F("fDiffDcaD",
801 fRecPtPosEtaPos = new TH1F("fRecPtPosEtaPos",
802 "p_{T} distribution",100,0,pt);
803 fRecPtPosEtaPos->GetXaxis()->SetTitle("p_{T} (GeV/c)");
805 fRecPtNegEtaPos = new TH1F("fRecPtNegEtaPos",
806 "p_{T} distribution",100,0,pt);
807 fRecPtNegEtaPos->GetXaxis()->SetTitle("p_{T} (GeV/c)");
809 fRecPtPosEtaNeg = new TH1F("fRecPtPosEtaNeg",
810 "p_{T} distribution",100,0,pt);
811 fRecPtPosEtaNeg->GetXaxis()->SetTitle("p_{T} (GeV/c)");
813 fRecPtNegEtaNeg = new TH1F("fRecPtNegEtaNeg",
814 "p_{T} distribution",100,0,pt);
815 fRecPtNegEtaNeg->GetXaxis()->SetTitle("p_{T} (GeV/c)");
819 fRec1PtPosEtaPos = new TH1F("fRec1PtPosEtaPos",
820 "1/p_{T} distribution",100,0,0.5);
821 fRec1PtPosEtaPos->GetXaxis()->SetTitle("p_{T} (c/GeV)");
823 fRec1PtNegEtaPos = new TH1F("fRec1PtNegEtaPos",
824 "1/p_{T} distribution",100,0,0.5);
825 fRec1PtNegEtaPos->GetXaxis()->SetTitle("p_{T} (c/GeV)");
827 fRec1PtPosEtaNeg = new TH1F("fRec1PtPosEtaNeg",
828 "1/p_{T} distribution",100,0,0.5);
829 fRec1PtPosEtaNeg->GetXaxis()->SetTitle("p_{T} (c/GeV)");
831 fRec1PtNegEtaNeg = new TH1F("fRec1PtNegEtaNeg",
832 "1/p_{T} distribution",100,0,0.5);
833 fRec1PtNegEtaNeg->GetXaxis()->SetTitle("1/p_{T} (c/GeV)");
837 fRecPhiPosEtaPos = new TH1F("fRecPhiPosEtaPos",
838 "#phi",180,0,2*TMath::Pi());
839 fRecPhiPosEtaPos->GetXaxis()->SetTitle("#phi (rad.)");
841 fRecPhiNegEtaPos = new TH1F("fRecPhiNegEtaPos",
842 "#phi",180,0,2*TMath::Pi());
843 fRecPhiNegEtaPos->GetXaxis()->SetTitle("#phi (rad.)");
845 fRecPhiPosEtaNeg = new TH1F("fRecPhiPosEtaNeg",
846 "#phi",180,0,2*TMath::Pi());
847 fRecPhiPosEtaNeg->GetXaxis()->SetTitle("#phi (rad.)");
849 fRecPhiNegEtaNeg = new TH1F("fRecPhiNegEtaNeg",
850 "#phi",180,0,2*TMath::Pi());
851 fRecPhiNegEtaNeg->GetXaxis()->SetTitle("#phi (rad.)");
855 // fRecDcaPhiPtPosEtaPos = new TH3F("fRecDcaPhiPtPosEtaPos",
856 // "#phi- p_{T} - DCA",
857 // 180,0,2*TMath::Pi(),
859 // 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
860 // fRecDcaPhiPtPosEtaPos->GetXaxis()->SetTitle("#phi (rad.)");
861 // fRecDcaPhiPtPosEtaPos->GetYaxis()->SetTitle("p_{T} (GeV/c)");
862 // fRecDcaPhiPtPosEtaPos->GetZaxis()->SetTitle("dca (cm)");
864 // fRecDcaPhiPtPosEtaNeg = new TH3F("fRecDcaPhiPtPosEtaNeg",
865 // "#phi- p_{T} - DCA",
866 // 180,0,2*TMath::Pi(),
868 // 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
869 // fRecDcaPhiPtPosEtaNeg->GetZaxis()->SetTitle("dca (cm)");
870 // fRecDcaPhiPtPosEtaNeg->GetXaxis()->SetTitle("#phi (rad.)");
871 // fRecDcaPhiPtPosEtaNeg->GetYaxis()->SetTitle("p_{T} (GeV/c)");
873 // fRecDcaPhiPtNegEtaPos = new TH3F("fRecDcaPhiPtNegEtaPos",
874 // "#phi- p_{T} - DCA",
875 // 180,0,2*TMath::Pi(),
877 // 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
878 // fRecDcaPhiPtNegEtaPos->GetZaxis()->SetTitle("dca (cm)");
879 // fRecDcaPhiPtNegEtaPos->GetXaxis()->SetTitle("#phi (rad.)");
880 // fRecDcaPhiPtNegEtaPos->GetYaxis()->SetTitle("p_{T} (GeV/c)");
882 // fRecDcaPhiPtNegEtaNeg = new TH3F("fRecDcaPhiPtNegEtaNeg",
883 // "#phi- p_{T} - DCA",
884 // 180,0,2*TMath::Pi(),
886 // 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
887 // fRecDcaPhiPtNegEtaNeg->GetZaxis()->SetTitle("dca (cm)");
888 // fRecDcaPhiPtNegEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
889 // fRecDcaPhiPtNegEtaNeg->GetXaxis()->SetTitle("p_{T} (GeV/c)");
895 for(Int_t i=0;i<3;i++){
896 for(Int_t j=0;j<2;j++){
897 fEtaBinPt[i][j] = new TH1F(Form("fEtaBinPt%d%s", i, charge[j].Data()),
900 fPhiBinPt[i][j] = new TH1F(Form("fPhiBinPt%d%s", i,charge[j].Data() ),
902 181, 0, 2*TMath::Pi());
903 fDcaBinPt[i][j] = new TH1F(Form("fDcaBinPt%d%s", i, charge[j].Data()),
905 200,-range*(1+Int_t(fTrackType/2)*9),
906 range*(1+Int_t(fTrackType/2)*9) );
907 fEtaPhiBinPt[i][j]= new TH2F(Form("fEtaPhiBinPt%d%s", i, charge[j].Data()),
909 200, -2., 2., 200, 0.,2*TMath::Pi());
916 fHists->Add(fHistRECpt);
918 fHists->Add(fEtaWidth);
919 fHists->Add(fPhiWidth);
920 fHists->Add(fDcaWidth);
921 fHists->Add(fPtWidth);
922 fHists->Add(fEtavPt);
923 fHists->Add(fPhivPt);
924 fHists->Add(fCompareTPCparam);
925 fHists->Add(fITSlayer);
926 fHists->Add(fITSlayerEta);
927 fHists->Add(fITSlayerPhi);
928 fHists->Add(fEtaPhi);
929 fHists->Add(fThetaRec);
930 fHists->Add(fPhiRec);
931 fHists->Add(fNumber);
932 fHists->Add(fNumberAfterCut);
936 fHists->Add(fNVertexSPD);
937 fHists->Add(fNVertexTracks);
944 fHists->Add(fDeltaPhiAll);
945 fHists->Add(fDeltaPhiLeading);
946 fHists->Add(fDiffDcaD);
949 fHists->Add(fSigmaPtHist);
951 fHists->Add(fRecPtPos);
952 fHists->Add(fRecPtNeg);
953 fHists->Add(fRecPhiPos);
954 fHists->Add(fRecPhiNeg);
955 fHists->Add(fRecEtaPos);
956 fHists->Add(fRecEtaNeg);
957 fHists->Add(fRecEtaPtPos);
958 fHists->Add(fRecEtaPtNeg);
959 fHists->Add(fRecDcaPos);
960 fHists->Add(fRecDcaNeg);
961 fHists->Add(fRecDcaNegInv);
962 fHists->Add(fRecDPos);
963 fHists->Add(fRecDNeg);
966 fHists->Add(fRecQPtPosEta);
967 fHists->Add(fRecQPtNegEta);
968 fHists->Add(fRecPtPosEta);
969 fHists->Add(fRecPtNegEta);
970 fHists->Add(fRecPhiPosEta);
971 fHists->Add(fRecPhiNegEta);
972 fHists->Add(fRecDcaPosEta);
973 fHists->Add(fRecDcaNegEta);
974 fHists->Add(fRecDPosEta);
975 fHists->Add(fRecDNegEta);
977 for(Int_t i=0;i<4;i++){
978 fHists->Add(fVertexX[i]);
979 fHists->Add(fVertexY[i]);
980 fHists->Add(fVertexZ[i]);
982 for(Int_t i=0;i<18;i++){
983 fHists->Add(fRecPtTpcSector[i]);
984 fHists->Add(fRecEtaTpcSector[i]);
985 fHists->Add(fSignedDcaTpcSector[i]);
986 fHists->Add(fRecQPtTpcSector[i]);
987 fHists->Add(fRecEtaPtTpcSector[i]);
990 for(Int_t i=0;i<7;i++){
991 fHists->Add(fRecPtPosLadder[i]);
992 fHists->Add(fRecPtNegLadder[i]);
993 fHists->Add(fRecPhiPosLadder[i]);
994 fHists->Add(fRecPhiNegLadder[i]);
995 fHists->Add(fRecEtaPosLadder[i]);
996 fHists->Add(fRecEtaNegLadder[i]);
999 fHists->Add(fRecPtPosVz);
1000 fHists->Add(fRecPtNegVz);
1001 fHists->Add(fRecEtaPosVz);
1002 fHists->Add(fRecEtaNegVz);
1003 fHists->Add(fRecPhiPosVz);
1004 fHists->Add(fRecPhiNegVz);
1005 fHists->Add(fSignedDcaPosVz);
1006 fHists->Add(fSignedDcaNegVz);
1007 fHists->Add(fRecQPtPosEtaVz);
1008 fHists->Add(fRecQPtNegEtaVz);
1009 fHists->Add(fRecEtaPtPosVz);
1010 fHists->Add(fRecEtaPtNegVz);
1013 for(Int_t i=0;i<7;i++){
1014 fHists->Add(fSignDcaPos[i]);
1015 fHists->Add(fSignDcaNeg[i]);
1016 fHists->Add(fSignDcaNegInv[i]);
1018 fHists->Add(fPtSigmaPos[i]);
1019 fHists->Add(fPtSigmaNeg[i]);
1020 fHists->Add(fqPtRec[i]);
1022 fHists->Add(fDcaSigmaPos[i]);
1023 fHists->Add(fDcaSigmaNeg[i]);
1028 fHists->Add(fRecDcaPosPhi);
1029 fHists->Add(fRecDcaNegPhi);
1030 fHists->Add(fRecPtPosPhi);
1031 fHists->Add(fRecPtNegPhi);
1032 fHists->Add(fRecEtaPosPhi);
1033 fHists->Add(fRecEtaNegPhi);
1034 fHists->Add(fRecQPtPhi);
1035 fHists->Add(fRecEtaPtPosPhi);
1036 fHists->Add(fRecEtaPtNegPhi);
1038 fHists->Add(fRecPtPosEtaPos);
1039 fHists->Add(fRecPtNegEtaPos);
1040 fHists->Add(fRecPtPosEtaNeg);
1041 fHists->Add(fRecPtNegEtaNeg);
1043 fHists->Add(fRec1PtPosEtaPos);
1044 fHists->Add(fRec1PtNegEtaPos);
1045 fHists->Add(fRec1PtPosEtaNeg);
1046 fHists->Add(fRec1PtNegEtaNeg);
1049 fHists->Add(fRecPhiPosEtaPos);
1050 fHists->Add(fRecPhiNegEtaPos);
1051 fHists->Add(fRecPhiPosEtaNeg);
1052 fHists->Add(fRecPhiNegEtaNeg);
1054 fHists->Add(fRecDcaPosPhiEtaPos);
1055 fHists->Add(fRecDcaNegPhiEtaPos);
1056 fHists->Add(fRecPtPosPhiEtaPos);
1057 fHists->Add(fRecPtNegPhiEtaPos);
1058 fHists->Add(fRecDcaPosPhiEtaNeg);
1059 fHists->Add(fRecDcaNegPhiEtaNeg);
1060 fHists->Add(fRecPtPosPhiEtaNeg);
1061 fHists->Add(fRecPtNegPhiEtaNeg);
1063 fHists->Add(fRecDcaPosPtEtaPos);
1064 fHists->Add(fRecDcaNegPtEtaPos);
1065 fHists->Add(fRecDcaPosPtEtaNeg);
1066 fHists->Add(fRecDcaNegPtEtaNeg);
1068 // fHists->Add(fRecDcaPhiPtPosEtaPos);
1069 // fHists->Add(fRecDcaPhiPtPosEtaNeg);
1070 // fHists->Add(fRecDcaPhiPtNegEtaPos);
1071 // fHists->Add(fRecDcaPhiPtNegEtaNeg);
1073 for(Int_t i=0;i<3;i++){
1074 for(Int_t j=0;j<2;j++){
1075 fHists->Add(fEtaBinPt[i][j]);
1076 fHists->Add(fPhiBinPt[i][j]);
1077 fHists->Add(fDcaBinPt[i][j]);
1078 fHists->Add(fEtaPhiBinPt[i][j]);
1083 // for (Int_t i=0; i<fHists->GetEntries(); ++i) {
1084 // TH1 *h1 = dynamic_cast<TH1*>(fHists->At(i));
1086 // // Printf("%s ",h1->GetName());
1091 TH1::AddDirectory(oldStatus);
1092 PostData(1, fHists);
1096 //__________________________________________________________
1098 void AliAnalysisTaskQASym::UserExec(Option_t *)
1100 // QA of global, TPC, ITS and ITS stand alone tracks
1101 // exploiting basic symmetries
1103 AliVEvent *event = InputEvent();
1105 Printf("ERROR: Could not retrieve event");
1111 AliESDEvent* esd = static_cast<AliESDEvent*>(event);
1113 Printf("We are reading from ESD");
1120 if(fDebug>1)Printf("There are %d tracks in this event", event->GetNumberOfTracks());
1123 Int_t leadingTrack = 0;
1124 Float_t leadingEnergy = -20.;
1125 Float_t leadingPhi = 0;//TMath::Pi();
1129 AliESDEvent* esd = static_cast<AliESDEvent*>(event);
1130 Int_t nPileSPDVertices=1+esd->GetNumberOfPileupVerticesSPD(); // also SPD main vertex
1131 Int_t nPileTrkVertices=esd->GetNumberOfPileupVerticesTracks();
1132 fNVertexSPD->Fill(nPileSPDVertices);
1133 fNVertexTracks->Fill(nPileTrkVertices);
1135 //check primary vertex
1140 //primary vertex: contribution from different vertexers
1141 const AliVVertex* vertex = event->GetPrimaryVertex();
1143 vx = vertex->GetX();
1144 vy = vertex->GetY();
1145 vz = vertex->GetZ();
1146 if(vertex->GetNContributors()>0){
1147 fVertexX[0]->Fill(vx);
1148 fVertexY[0]->Fill(vy);
1149 fVertexZ[0]->Fill(vz);
1154 const AliVVertex* vertexSPD = esd->GetPrimaryVertexSPD();
1156 if(vertexSPD->GetNContributors()>0){
1157 fVertexX[1]->Fill(vertexSPD->GetX());
1158 fVertexY[1]->Fill(vertexSPD->GetY());
1159 fVertexZ[1]->Fill(vertexSPD->GetZ());
1163 const AliVVertex* vertexTrack = esd->GetPrimaryVertexTracks();
1165 if(vertexTrack->GetNContributors()>0){
1166 fVertexX[2]->Fill(vertexTrack->GetX());
1167 fVertexY[2]->Fill(vertexTrack->GetY());
1168 fVertexZ[2]->Fill(vertexTrack->GetZ());
1172 const AliVVertex* vertexTPC = esd->GetPrimaryVertexTPC();
1174 if(vertexTPC->GetNContributors()>0){
1175 fVertexX[3]->Fill(vertexTPC->GetX());
1176 fVertexY[3]->Fill(vertexTPC->GetY());
1177 fVertexZ[3]->Fill(vertexTPC->GetZ());
1181 //cuts on general vertex
1182 if(vertex->GetNContributors()<1) return;
1183 if (TMath::Abs(vz) > 10.) return;
1185 fNumber->Fill(event->GetNumberOfTracks());
1187 AliESDtrack *tpcP = 0x0;
1188 Int_t fNTracksAccepted=0;
1189 const Int_t arrSize = event->GetNumberOfTracks();
1190 Float_t * phiArray = new Float_t[arrSize];
1191 Float_t * etaArray = new Float_t[arrSize];
1192 Float_t * ptArray = new Float_t[arrSize];
1193 Float_t * dcaArray = new Float_t[arrSize];
1194 Int_t * chargeArray = new Int_t [arrSize];
1195 Bool_t * acceptedArray = new Bool_t [arrSize];
1197 for (Int_t i = 0; i < event->GetNumberOfTracks(); i++) {
1203 acceptedArray[i]= kFALSE;
1209 for (Int_t iTrack = 0; iTrack < event->GetNumberOfTracks(); iTrack++) {
1211 //prevent mem leak for TPConly track
1212 if(fTrackType==2&&tpcP){
1217 AliVParticle *track = event->GetTrack(iTrack);
1218 AliESDtrack *esdtrack = static_cast<AliESDtrack*>(track);
1219 esdtrack->PropagateToDCA(event->GetPrimaryVertex(),
1220 event->GetMagneticField(), 10000.);
1223 Printf("ERROR: Could not receive track %d", iTrack);
1227 // run Task for global tracks or ITS tracks or TPC tracks
1228 const AliExternalTrackParam *tpcPin = 0x0;
1232 //Fill all histograms with global tracks
1234 if (!tpcP) continue;
1235 if (!fCuts->AcceptTrack(tpcP)) continue;
1236 phiIn = tpcP->Phi();
1238 else if(fTrackType==1){
1239 //Fill all histograms with ITS tracks
1241 phiIn = tpcP->Phi();
1242 if (!tpcP) continue;
1243 if (!fCuts->AcceptTrack(tpcP)) continue;
1244 if(fStandAlone==kTRUE) {
1245 if(!(tpcP->GetStatus()&AliESDtrack::kITSpureSA))continue;
1247 else if(fStandAlone==kFALSE){
1248 if(tpcP->GetStatus()&AliESDtrack::kITSpureSA)continue;
1251 else if(fTrackType==2){
1252 //Fill all histograms with TPC track information
1253 tpcPin = esdtrack->GetInnerParam();
1254 if (!tpcPin) continue;
1255 phiIn=tpcPin->Phi();
1257 tpcP = AliESDtrackCuts::GetTPCOnlyTrack(static_cast<AliESDEvent*>(event),esdtrack->GetID());
1258 if (!tpcP) continue;
1259 if (!fCuts->AcceptTrack(tpcP)) continue;
1260 if(tpcP->GetNcls(1)>160)continue;//jacek's track cut
1261 if(tpcP->GetConstrainedChi2TPC()<0)continue; // jacek's track cut
1264 Printf("ERROR: wrong track type \n");
1272 phiArray[iTrack] = phiIn;
1273 etaArray[iTrack] = tpcP->Eta();
1274 ptArray[iTrack] = tpcP->Pt();
1275 chargeArray[iTrack] = tpcP->Charge();
1276 acceptedArray[iTrack]= kTRUE;
1279 if(tpcP->E()>leadingEnergy){
1280 leadingTrack=iTrack;
1281 leadingEnergy=tpcP->E();
1286 fqRec->Fill(tpcP->Charge());
1289 Double_t fSigmaPt = tpcP->GetSigma1Pt2();
1290 fSigmaPt= sqrt(fSigmaPt);
1291 fSigmaPt= fSigmaPt *(tpcP->Pt()*tpcP->Pt());
1293 if(TMath::Abs(fSigmaPt) < 1.e-10) continue;
1295 fSigmaPtHist->Fill(TMath::Log10(fSigmaPt));
1298 // hits in ITS layer
1300 if(tpcP->HasPointOnITSLayer(0))
1302 else if(!tpcP->HasPointOnITSLayer(0)
1303 && tpcP->HasPointOnITSLayer(1))
1305 else if(!tpcP->HasPointOnITSLayer(0)
1306 && !tpcP->HasPointOnITSLayer(1)
1307 && tpcP->HasPointOnITSLayer(2))
1309 else if(!tpcP->HasPointOnITSLayer(0)
1310 && !tpcP->HasPointOnITSLayer(1)
1311 && !tpcP->HasPointOnITSLayer(2)
1312 && tpcP->HasPointOnITSLayer(3))
1314 else if(!tpcP->HasPointOnITSLayer(0)
1315 && !tpcP->HasPointOnITSLayer(1)
1316 && !tpcP->HasPointOnITSLayer(2)
1317 && !tpcP->HasPointOnITSLayer(3)
1318 && tpcP->HasPointOnITSLayer(4))
1320 else if( !tpcP->HasPointOnITSLayer(0)
1321 && !tpcP->HasPointOnITSLayer(1)
1322 && !tpcP->HasPointOnITSLayer(2)
1323 && !tpcP->HasPointOnITSLayer(3)
1324 && !tpcP->HasPointOnITSLayer(4)
1325 && tpcP->HasPointOnITSLayer(5))
1332 //-------------------
1333 Float_t fXVertexCor = 0.;
1334 Float_t fYVertexCor = 0.;
1336 fXVertexCor = tpcP->Xv() - vertex->GetX(); // coordinate corrected for vertex position
1337 fYVertexCor = tpcP->Yv() - vertex->GetY(); // "
1338 Double_t fSignedDca = (tpcP->Py()*fXVertexCor - tpcP->Px()*fYVertexCor)/tpcP->Pt();
1341 fqPtRec[cas]->Fill(tpcP->Charge()/tpcP->Pt());
1345 fHistRECpt->Fill(tpcP->Pt());
1346 fEta->Fill(tpcP->Eta());
1347 fEtavPt->Fill(tpcP->Eta(), TMath::Log(tpcP->Pt()));
1348 fPhivPt->Fill(phiIn, TMath::Log(tpcP->Pt()));
1349 fEtaPhi->Fill(tpcP->Eta(), phiIn);
1350 fThetaRec->Fill(tpcP->Theta());
1351 fPhiRec->Fill(phiIn);
1352 fVx->Fill(tpcP->Xv());
1353 fVy->Fill(tpcP->Yv());
1354 fVz->Fill(tpcP->Zv());
1357 fEtaPt->Fill(tpcP->Eta()/tpcP->Pt());
1358 fQPt->Fill(tpcP->Charge()/tpcP->Pt());
1359 fDca->Fill(fSignedDca);
1360 dcaArray[iTrack]=fSignedDca;
1361 fRecQPtPhi->Fill(tpcP->Charge()/tpcP->Pt(), phiIn);
1366 tpcP->GetImpactParameters(fXY,fZ);
1367 fDiffDcaD->Fill(fSignedDca+fXY);
1370 if(fTrackType==2) fCompareTPCparam->Fill(fZ,tpcPin->GetTgl());
1372 if(fTrackType!=2){//for global and ITS tracks
1373 for(Int_t itsLayer=0;itsLayer<6;itsLayer++){
1374 if(tpcP->HasPointOnITSLayer(itsLayer)){
1375 fITSlayer->Fill(itsLayer);
1376 fITSlayerEta->Fill(itsLayer, tpcP->Eta());
1377 fITSlayerPhi->Fill(itsLayer, tpcP->Phi());
1382 //for positive particles
1384 if(tpcP->Charge()>0){
1385 fRecPtPos->Fill(tpcP->Pt());
1386 fRecPtPosLadder[cas]->Fill(tpcP->Pt());
1387 fRecPtPosVz->Fill(TMath::Log10(tpcP->Pt()),tpcP->Zv());
1388 fRecPhiPos->Fill(TMath::RadToDeg()*phiIn);
1391 fRecPhiPosLadder[cas]->Fill(TMath::RadToDeg()*phiIn);
1392 fRecPhiPosVz->Fill(TMath::RadToDeg()*phiIn,tpcP->Zv());
1393 fSignedDcaPosVz->Fill(fSignedDca,tpcP->Zv());
1395 fRecEtaPos->Fill(tpcP->Eta());
1396 fRecEtaPosLadder[cas]->Fill(tpcP->Eta());
1397 fRecEtaPtPos->Fill(tpcP->Eta()/tpcP->Pt());
1398 fRecEtaPosVz->Fill(tpcP->Eta(),tpcP->Zv());
1399 fRecEtaPtPosVz->Fill(tpcP->Eta()/tpcP->Pt(),tpcP->Zv());
1401 fRecDcaPos->Fill(fSignedDca);
1402 fRecDcaPosPhi->Fill(fSignedDca, phiIn);
1403 fRecPtPosPhi->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1404 fRecEtaPtPosPhi->Fill(tpcP->Eta()/tpcP->Pt(), phiIn);
1405 fRecEtaPosPhi->Fill(tpcP->Eta(), phiIn);
1406 fRecDPos->Fill(fXY);
1407 fSignDcaPos[cas]->Fill(fSignedDca);
1410 fDcaSigmaPos[cas]->Fill(fSignedDca, TMath::Log10(fSigmaPt));
1412 fPtSigmaPos[cas]->Fill(TMath::Log10(fSigmaPt));
1415 fRecPtPosEtaPos->Fill(tpcP->Pt());
1416 fRec1PtPosEtaPos->Fill(1/tpcP->Pt());
1417 fRecPhiPosEtaPos->Fill(phiIn);
1418 fRecDcaPosPhiEtaPos->Fill(fSignedDca, phiIn);
1419 fRecDcaPosPtEtaPos->Fill(fSignedDca, TMath::Log10(tpcP->Pt()));
1420 fRecPtPosPhiEtaPos->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1421 //fRecDcaPhiPtPosEtaPos->Fill(phiIn, tpcP->Pt(), fSignedDca);
1425 fRecPtPosEtaNeg->Fill(tpcP->Pt());
1426 fRec1PtPosEtaNeg->Fill(1/tpcP->Pt());
1427 fRecPhiPosEtaNeg->Fill(phiIn);
1428 fRecDcaPosPhiEtaNeg->Fill(fSignedDca, phiIn);
1429 fRecDcaPosPtEtaNeg->Fill(fSignedDca, TMath::Log10(tpcP->Pt()));
1430 fRecPtPosPhiEtaNeg->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1431 //fRecDcaPhiPtPosEtaNeg->Fill(phiIn, tpcP->Pt(), fSignedDca);
1435 //and negative particles
1437 fRecPtNeg->Fill(tpcP->Pt());
1438 fRecPtNegLadder[cas]->Fill(tpcP->Pt());
1439 fRecPtNegVz->Fill(TMath::Log10(tpcP->Pt()),tpcP->Zv());
1441 fRecPhiNeg->Fill(TMath::RadToDeg()*phiIn);
1442 fRecPhiNegLadder[cas]->Fill(TMath::RadToDeg()*phiIn);
1443 fRecPhiNegVz->Fill(TMath::RadToDeg()*phiIn,tpcP->Zv());
1444 fSignedDcaNegVz->Fill(fSignedDca,tpcP->Zv());
1445 fRecEtaPtNegVz->Fill(tpcP->Eta()/tpcP->Pt(),tpcP->Zv());
1447 fRecEtaNeg->Fill(tpcP->Eta());
1448 fRecEtaNegLadder[cas]->Fill(tpcP->Eta());
1449 fRecEtaPtNeg->Fill(tpcP->Eta()/tpcP->Pt());
1450 fRecEtaNegVz->Fill(tpcP->Eta(),tpcP->Zv());
1452 fRecDcaNeg->Fill(fSignedDca);
1453 fRecDcaNegInv->Fill(-fSignedDca);
1454 fRecDcaNegPhi->Fill(fSignedDca, phiIn);
1455 fRecPtNegPhi->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1456 fRecEtaNegPhi->Fill(tpcP->Eta(), phiIn);
1457 fRecEtaPtNegPhi->Fill(tpcP->Eta()/tpcP->Pt(), phiIn);
1458 fRecDNeg->Fill(fXY);
1459 fSignDcaNeg[cas]->Fill(fSignedDca);
1460 fSignDcaNegInv[cas]->Fill(-fSignedDca);
1463 fDcaSigmaNeg[cas]->Fill(fSignedDca,TMath::Log10(fSigmaPt));
1465 fPtSigmaNeg[cas]->Fill(TMath::Log10(fSigmaPt));
1469 fRecPtNegEtaPos->Fill(tpcP->Pt());
1470 fRec1PtNegEtaPos->Fill(1/tpcP->Pt());
1471 fRecPhiNegEtaPos->Fill(phiIn);
1472 fRecDcaNegPhiEtaPos->Fill(fSignedDca, phiIn);
1473 fRecDcaNegPtEtaPos->Fill(fSignedDca, TMath::Log10(tpcP->Pt()));
1474 fRecPtNegPhiEtaPos->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1475 //fRecDcaPhiPtNegEtaPos->Fill(phiIn, tpcP->Pt(), fSignedDca);
1479 fRecPtNegEtaNeg->Fill(tpcP->Pt());
1480 fRec1PtNegEtaNeg->Fill(1/tpcP->Pt());
1481 fRecPhiNegEtaNeg->Fill(phiIn);
1482 fRecDcaNegPhiEtaNeg->Fill(fSignedDca, phiIn);
1483 fRecDcaNegPtEtaNeg->Fill(fSignedDca, TMath::Log10(tpcP->Pt()));
1484 fRecPtNegPhiEtaNeg->Fill(TMath::Log10(tpcP->Pt()), phiIn);
1485 //fRecDcaPhiPtNegEtaNeg->Fill(phiIn, tpcP->Pt(), fSignedDca);
1492 //all particles with positive eta
1494 fRecQPtPosEta->Fill(tpcP->Charge()/tpcP->Pt());
1495 fRecPtPosEta->Fill(tpcP->Pt());
1496 fRecPhiPosEta->Fill(TMath::RadToDeg()*phiIn);
1497 fRecQPtPosEtaVz->Fill(tpcP->Charge()/tpcP->Pt(),tpcP->Zv());
1498 fRecDcaPosEta->Fill(fSignedDca);
1499 fRecDPosEta->Fill(fXY);
1501 //all particles with negative eta (and eta==0)
1503 fRecQPtNegEta->Fill(tpcP->Charge()/tpcP->Pt());
1504 fRecPtNegEta->Fill(tpcP->Pt());
1505 fRecPhiNegEta->Fill(TMath::RadToDeg()*phiIn);
1506 fRecQPtNegEtaVz->Fill(tpcP->Charge()/tpcP->Pt(),tpcP->Zv());
1507 fRecDcaNegEta->Fill(fSignedDca);
1508 fRecDNegEta->Fill(fXY);
1513 fRecPtTpcSector[Int_t(phiIn*
1514 TMath::RadToDeg()/20)]->Fill(tpcP->Pt());
1515 fRecEtaTpcSector[Int_t(phiIn*
1516 TMath::RadToDeg()/20)]->Fill(tpcP->Eta());
1517 fSignedDcaTpcSector[Int_t(phiIn*
1518 TMath::RadToDeg()/20)]->Fill(fSignedDca);
1519 fRecQPtTpcSector[Int_t(phiIn*
1520 TMath::RadToDeg()/20)]->Fill(tpcP->Charge()/tpcP->Pt());
1521 fRecEtaPtTpcSector[Int_t(phiIn*
1522 TMath::RadToDeg()/20)]->Fill(tpcP->Eta()/tpcP->Pt());
1526 // // another track loop
1527 // for (Int_t iTrack2 = 0; iTrack2 < event->GetNumberOfTracks(); iTrack2++) {
1529 // if(LeadingTrack==iTrack2) continue;
1531 // AliVParticle *track2 = event->GetTrack(iTrack2);
1532 // AliESDtrack* esdtrack2 = static_cast<AliESDtrack*>(track2);
1534 // Printf("ERROR: Could not receive track %d", iTrack);
1537 // if (!fCuts->AcceptTrack(esdtrack2)) continue;
1538 // //propagate to dca
1539 // esdtrack2->PropagateToDCA(event->GetPrimaryVertex(),
1540 // event->GetMagneticField(), 10000.);
1542 // fDeltaPhiLeading->Fill((LeadingPhi-esdtrack2->Phi())*TMath::RadToDeg(),
1543 // LeadingPhi*TMath::RadToDeg() );
1547 // }//second track loop
1549 // if(fTrackType==2) delete tpcP; // delete in case of TPCOnlyTrack
1553 fNumberAfterCut->Fill(fNTracksAccepted);
1557 for (Int_t iT = 0; iT < event->GetNumberOfTracks(); iT++) {
1558 if(acceptedArray[iT]){
1559 if(ptArray[iT]>0.2 && ptArray[iT]<1. ){
1560 fEtaBinPt[0][Bool_t(chargeArray[iT]>0)]->Fill(etaArray[iT]);
1561 fDcaBinPt[0][Bool_t(chargeArray[iT]>0)]->Fill(dcaArray[iT]);
1562 fPhiBinPt[0][Bool_t(chargeArray[iT]>0)]->Fill(phiArray[iT]);
1563 fEtaPhiBinPt[0][Bool_t(chargeArray[iT]>0)]->Fill(etaArray[iT], phiArray[iT]);
1565 else if(ptArray[iT]>1. && ptArray[iT]<5.){
1566 fEtaBinPt[1][Bool_t(chargeArray[iT]>0)]->Fill(etaArray[iT]);
1567 fDcaBinPt[1][Bool_t(chargeArray[iT]>0)]->Fill(dcaArray[iT]);
1568 fPhiBinPt[1][Bool_t(chargeArray[iT]>0)]->Fill(phiArray[iT]);
1569 fEtaPhiBinPt[1][Bool_t(chargeArray[iT]>0)]->Fill(etaArray[iT], phiArray[iT]);
1571 else if (ptArray[iT]>5.){
1572 fEtaBinPt[2][Bool_t(chargeArray[iT]>0)]->Fill(etaArray[iT]);
1573 fDcaBinPt[2][Bool_t(chargeArray[iT]>0)]->Fill(dcaArray[iT]);
1574 fPhiBinPt[2][Bool_t(chargeArray[iT]>0)]->Fill(phiArray[iT]);
1575 fEtaPhiBinPt[2][Bool_t(chargeArray[iT]>0)]->Fill(etaArray[iT], phiArray[iT]);
1578 if(fNTracksAccepted>=fLow&&fNTracksAccepted<=fHigh){
1579 fEtaWidth->Fill(etaArray[iT]);
1580 fPhiWidth->Fill(phiArray[iT]);
1581 fDcaWidth->Fill(dcaArray[iT]);
1582 fPtWidth->Fill(ptArray[iT]);
1588 //prevent mem leak for TPConly track
1589 if(fTrackType==2&&tpcP){
1615 delete[] chargeArray;
1620 delete[] acceptedArray;
1624 // Post output data.
1625 // PostData(1, fHistPt);
1626 PostData(1, fHists);
1633 //________________________________________________________________________
1634 void AliAnalysisTaskQASym::Terminate(Option_t *)