1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
18 //------------------------------
19 // Analysis task for quality-assurance of central tarcking
20 // mainly based on fundamental symmetries
22 // contact eva.sicking@cern.ch
24 // Authors: Jan Fiete Grosse-Oetringhaus, Christian Klein-Boesing,
25 // Andreas Morsch, Eva Sicking
34 #include "TParticle.h"
35 #include "TParticlePDG.h"
40 #include "AliAnalysisTask.h"
41 #include "AliAnalysisManager.h"
43 #include "AliESDEvent.h"
45 #include "AliESDVertex.h"
46 #include "AliESDInputHandler.h"
47 #include "AliESDtrackCuts.h"
48 #include "AliMultiplicity.h"
51 #include "AliAnalysisTaskQASym.h"
52 #include "AliExternalTrackParam.h"
53 #include "AliTrackReference.h"
55 #include "AliHeader.h"
56 #include "AliGenEventHeader.h"
57 #include "AliGenDPMjetEventHeader.h"
59 ClassImp(AliAnalysisTaskQASym)
61 //________________________________________________________________________
62 AliAnalysisTaskQASym::AliAnalysisTaskQASym(const char *name)
63 : AliAnalysisTaskSE(name)
129 for(Int_t i = 0;i<18;++i){
130 fRecPtTpcSector[i] = 0;
131 fRecEtaTpcSector[i] = 0;
132 fSignedDcaTpcSector[i] = 0;
133 fRecQPtTpcSector[i] = 0;
134 fRecEtaPtTpcSector[i] = 0;
137 for(Int_t i = 0;i< 7;++i){
138 fRecPtPosLadder[i] = 0;
139 fRecPtNegLadder[i] = 0;
140 fRecPhiPosLadder[i] = 0;
141 fRecPhiNegLadder[i] = 0;
142 fRecEtaPosLadder[i] = 0;
143 fRecEtaNegLadder[i] = 0;
146 fSignDcaNegInv[i] = 0;
154 DefineOutput(1, TList::Class());
161 //________________________________________________________________________
162 void AliAnalysisTaskQASym::UserCreateOutputObjects()
170 fHists = new TList();
171 fHistRECpt = new TH1F("fHistRECpt",
174 fEta = new TH1F("fEta",
177 fEtaPhi = new TH2F("fEtaPhi",
179 200, -2., 2., 128, 0., 2. * TMath::Pi());
181 fThetaRec = new TH1F("fThetaRec",
183 180, 0., TMath::Pi());
184 fPhiRec = new TH1F("fPhiRec",
186 180, 0., 2*TMath::Pi());
187 fNumber = new TH1F("fNumber",
188 "number of tracks per event",
190 fVx = new TH1F("fVx",
193 fVy = new TH1F("fVy",
196 fVz = new TH1F("fVz",
200 fEtaPt = new TH1F("fEtaPt",
204 fQPt = new TH1F("fQPt",
208 fDca = new TH1F("fDca",
213 fqRec = new TH1F("fqRec",
214 " charge all reconstructed particle",
217 fsigmaPt = new TH1F("fsigmaPt",
218 "Log_{10}(#sigma_{p_{T}})",
225 for(Int_t ITSlayer_case=0;ITSlayer_case<7;ITSlayer_case++){
227 fSignDcaPos[ITSlayer_case] = new TH1F(Form("fSignDcaPos%d", ITSlayer_case),
230 fSignDcaPos[ITSlayer_case]->GetXaxis()->SetTitle("dca");
231 fSignDcaPos[ITSlayer_case]->GetYaxis()->SetTitle("");
234 fSignDcaNeg[ITSlayer_case] = new TH1F(Form("fSignDcaNeg%d", ITSlayer_case),
237 fSignDcaNeg[ITSlayer_case]->GetXaxis()->SetTitle("dca");
238 fSignDcaNeg[ITSlayer_case]->GetYaxis()->SetTitle("");
240 fSignDcaNegInv[ITSlayer_case] = new TH1F(Form("fSignDcaNegInv%d", ITSlayer_case),
241 " inverse Signed dca ",
243 fSignDcaNegInv[ITSlayer_case]->GetXaxis()->SetTitle("-dca");
244 fSignDcaNegInv[ITSlayer_case]->GetYaxis()->SetTitle("");
249 fPtSigmaPos[ITSlayer_case] = new TH1F(Form("fPtSigmaPos%d", ITSlayer_case),
252 fPtSigmaPos[ITSlayer_case]->GetXaxis()->SetTitle("Log_{10}(#sigma_{pT})");
253 fPtSigmaPos[ITSlayer_case]->GetYaxis()->SetTitle("");
256 fPtSigmaNeg[ITSlayer_case] = new TH1F(Form("fPtSigmaNeg%d",ITSlayer_case),
259 fPtSigmaNeg[ITSlayer_case]->GetXaxis()->SetTitle("Log_{10}(#sigma_{pT})");
260 fPtSigmaNeg[ITSlayer_case]->GetYaxis()->SetTitle("");
266 fqPtRec[ITSlayer_case] = new TH1F(Form("fqPtRec%d",ITSlayer_case),
269 fqPtRec[ITSlayer_case]->GetXaxis()->SetTitle("q_{tr}/p_{T, tr} (GeV/c)");
270 fqPtRec[ITSlayer_case]->GetYaxis()->SetTitle("");
276 fDcaSigmaPos[ITSlayer_case] = new TH2F(Form("fDcaSigmaPos%d", ITSlayer_case),
277 " p_{T} shift vs #sigma_{pT} ",
278 200, -range, range,200, -4., 4. );
279 fDcaSigmaPos[ITSlayer_case]->GetXaxis()->SetTitle("signed DCA)");
280 fDcaSigmaPos[ITSlayer_case]->GetYaxis()->SetTitle("log_{10}(#sigma_{pT})");
283 fDcaSigmaNeg[ITSlayer_case] = new TH2F(Form("fDcaSigmaNeg%d", ITSlayer_case),
284 " p_{T} shift vs #sigma_{pT} ",
285 200, -range, range,200, -4., 4. );
286 fDcaSigmaNeg[ITSlayer_case]->GetXaxis()->SetTitle("signed DCA");
287 fDcaSigmaNeg[ITSlayer_case]->GetYaxis()->SetTitle("log_{10}(#sigma_{pT})");
294 // YIELDs---------- positive and negative particles
296 fRecPtPos = new TH1F("fRecPtPos",
299 fRecPtPos->GetXaxis()->SetTitle("p_{T} (GeV/c)");
300 fRecPtNeg = new TH1F("fRecPtNeg",
303 fRecPtNeg->GetXaxis()->SetTitle("p_{T} (GeV/c)");
306 fRecPhiPos = new TH1F("fRecPhiPos",
309 fRecPhiPos->GetXaxis()->SetTitle("#phi (deg)");
311 fRecPhiNeg = new TH1F("fRecPhiNeg",
314 fRecPhiNeg->GetXaxis()->SetTitle("#phi (deg)");
316 fRecEtaPos = new TH1F("fRecEtaPos",
319 fRecEtaPos->GetXaxis()->SetTitle("#eta");
321 fRecEtaNeg = new TH1F("fRecEtaNeg",
324 fRecEtaNeg->GetXaxis()->SetTitle("#eta");
326 fRecEtaPtPos = new TH1F("fRecEtaPtPos",
329 fRecEtaPtPos->GetXaxis()->SetTitle("#eta/p_{T}");
331 fRecEtaPtNeg = new TH1F("fRecEtaPtNeg",
334 fRecEtaPtNeg->GetXaxis()->SetTitle("#eta/p_{T}");
336 fRecDcaPos = new TH1F("fRecDcaPos",
339 fRecDcaPos->GetXaxis()->SetTitle("dca (cm)");
340 fRecDcaNeg = new TH1F("fRecDcaNeg",
343 fRecDcaNeg->GetXaxis()->SetTitle("dca (cm)");
345 fRecDcaNegInv = new TH1F("fRecDcaNegInv",
348 fRecDcaNegInv->GetXaxis()->SetTitle("dca (cm)");
351 fRecDPos = new TH1F("fRecDPos",
354 fRecDPos->GetXaxis()->SetTitle("d (cm)");
355 fRecDNeg = new TH1F("fRecDNeg",
358 fRecDNeg->GetXaxis()->SetTitle("d (cm)");
361 // YIELDs ---------------- positive and negative eta
364 fRecQPtPosEta = new TH1F("fRecQPtPosEta",
367 fRecQPtPosEta->GetXaxis()->SetTitle("q/p_{T} ");
369 fRecQPtNegEta = new TH1F("fRecQPtNegEta",
372 fRecQPtNegEta->GetXaxis()->SetTitle("q/p_{T}");
374 fRecPtPosEta = new TH1F("fRecPtPosEta",
377 fRecPtPosEta->GetXaxis()->SetTitle("p_{T} (GeV/c)");
379 fRecPtNegEta = new TH1F("fRecPtNegEta",
382 fRecPtNegEta->GetXaxis()->SetTitle("p_{T} (GeV/c)");
384 fRecPhiPosEta = new TH1F("fRecPhiPosEta",
387 fRecPhiPosEta->GetXaxis()->SetTitle("#phi (deg)");
389 fRecPhiNegEta = new TH1F("fRecPhiNegEta",
392 fRecPhiNegEta->GetXaxis()->SetTitle("#phi (deg)");
394 fRecDcaPosEta = new TH1F("fRecDcaPosEta",
397 fRecDcaPosEta->GetXaxis()->SetTitle("dca (cm)");
398 fRecDcaNegEta = new TH1F("fRecDcaNegEta",
401 fRecDcaNegEta->GetXaxis()->SetTitle("dca (cm)");
403 fRecDPosEta = new TH1F("fRecDPosEta",
406 fRecDPosEta->GetXaxis()->SetTitle("d (cm)");
407 fRecDNegEta = new TH1F("fRecDNegEta",
410 fRecDNegEta->GetXaxis()->SetTitle("d (cm)");
414 // YIELDs ---------------- for TPC sectors
415 for(Int_t sector=0; sector<18;sector++){
418 fRecPtTpcSector[sector] = new TH1F(Form("fRecPtTpcSector%02d",sector),
419 Form("p_{T} distribution: TPC sector %d",
420 sector),100, 0., pt);
421 fRecPtTpcSector[sector]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
423 fRecEtaTpcSector[sector] = new TH1F(Form("fRecEtaTpcSector%02d",sector),
424 Form("#eta distribution: TPC sector %d",
425 sector),200, -2., 2.);
426 fRecEtaTpcSector[sector]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
429 fSignedDcaTpcSector[sector] = new TH1F(Form("fSignedDcaTpcSector%02d",sector),
430 Form("dca distribution: TPC sector %d",
431 sector),200, -range, range );
432 fSignedDcaTpcSector[sector]->GetXaxis()->SetTitle("dca");
434 fRecQPtTpcSector[sector] = new TH1F(Form("fRecQPtTpcSector%02d",sector),
435 Form("Q/ p_{T} distribution: TPC sector %d",
436 sector),100, -1., 1.);
437 fRecQPtTpcSector[sector]->GetXaxis()->SetTitle("Q/p_{T} (GeV/c)");
439 fRecEtaPtTpcSector[sector] = new TH1F(Form("fRecEtaPtTpcSector%02d",sector),
440 Form("#eta/ p_{T} distribution: TPC sector %d",
441 sector),100, -1., 1.);
442 fRecEtaPtTpcSector[sector]->GetXaxis()->SetTitle("#eta/p_{T} (GeV/c)");
446 for(Int_t i=0;i<7;i++){
447 fRecPtPosLadder[i] = new TH1F(Form("fRecPtPosLadder%d", i),
448 " p_{T} distribution",
450 fRecPtPosLadder[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
451 fRecPtNegLadder[i] = new TH1F(Form("fRecPtNegLadder%d",i),
452 " p_{T} distribution ",
454 fRecPtNegLadder[i]->GetXaxis()->SetTitle("p_{T} (GeV/c)");
457 fRecPhiPosLadder[i] = new TH1F(Form("fRecPhiPosLadder%d",i),
458 "#phi distribution: all pos eta",
460 fRecPhiPosLadder[i]->GetXaxis()->SetTitle("#phi (deg)");
462 fRecPhiNegLadder[i] = new TH1F(Form("fRecPhiNegLadder%d", i),
463 "#phi distribution: all neg eta",
465 fRecPhiNegLadder[i]->GetXaxis()->SetTitle("#phi (deg)");
469 fRecEtaPosLadder[i] = new TH1F(Form("fRecEtaPosLadder%d",i),
472 fRecEtaPosLadder[i]->GetXaxis()->SetTitle("#eta)");
474 fRecEtaNegLadder[i] = new TH1F(Form("fRecEtaNegLadder%d", i),
477 fRecEtaNegLadder[i]->GetXaxis()->SetTitle("#eta");
482 fRecPtPosVz = new TH2F("fRecPtPosVz",
483 "p_{T} distribution vs Vz()",
484 100, -1., 2., 200,-vzmax,vzmax);
485 fRecPtPosVz->GetXaxis()->SetTitle("log_{10}(p_{T})");
487 fRecPtNegVz = new TH2F("fRecPtNegVz",
488 "p_{T} distribution vs Vz()",
489 100, -1., 2.,200,-vzmax,vzmax);
490 fRecPtNegVz->GetXaxis()->SetTitle("Log_{10}(p_{T})");
493 fRecEtaPosVz= new TH2F("fRecEtaPosVz",
494 "#eta distribution vs Vz()",
495 100, -2., 2., 200,-vzmax,vzmax);
496 fRecEtaPosVz->GetXaxis()->SetTitle("#eta");
497 fRecEtaNegVz = new TH2F("fRecEtaNegVz",
498 "#eta distribution vs Vz()",
499 100, -2., 2.,200,-vzmax,vzmax);
500 fRecEtaNegVz->GetXaxis()->SetTitle("#eta");
502 fRecPhiPosVz= new TH2F("fRecPhiPosVz",
503 "#eta distribution vs Vz()",
504 361, 0., 360., 200,-vzmax,vzmax);
505 fRecPhiPosVz->GetXaxis()->SetTitle("#phi (deg)");
506 fRecPhiNegVz = new TH2F("fRecPhiNegVz",
508 361, 0., 360.,200,-vzmax,vzmax);
509 fRecPhiNegVz->GetXaxis()->SetTitle("#phi (deg)");
511 fSignedDcaPosVz= new TH2F("fSignedDcaPosVz",
512 "#eta distribution vs Vz()",
513 200, -range, range, 200,-vzmax,vzmax);
514 fSignedDcaPosVz->GetXaxis()->SetTitle("dca (cm)");
515 fSignedDcaNegVz = new TH2F("fSignedDcaNegVz",
517 200, -range, range,200,-vzmax,vzmax);
518 fSignedDcaNegVz->GetXaxis()->SetTitle("dca (cm)");
520 fRecQPtPosEtaVz= new TH2F("fRecQPtPosEtaVz",
521 " Q/p_{T} distribution vs Vz()",
522 100, -1., 1., 200,-vzmax,vzmax);
523 fRecQPtPosEtaVz->GetXaxis()->SetTitle("Q/p_{T}");
524 fRecQPtNegEtaVz = new TH2F("fRecQPtNegEtaVz",
525 " Q/p_{T} distribution vs Vz()",
526 100, -1., 1.,200,-vzmax,vzmax);
527 fRecQPtNegEtaVz->GetXaxis()->SetTitle("Q/p_{T}");
530 fRecEtaPtPosVz= new TH2F("fRecEtaPtPosVz",
531 " #eta/p_{T} distribution vs Vz()",
532 100, -1., 1., 200,-vzmax,vzmax);
533 fRecEtaPtPosVz->GetXaxis()->SetTitle("#eta/p_{T");
534 fRecEtaPtNegVz = new TH2F("fRecEtaPtNegVz",
535 " #eta/p_{T} distribution vs Vz()",
536 100, -1., 1.,200,-vzmax,vzmax);
537 fRecEtaPtNegVz->GetXaxis()->SetTitle("#eta/p_{T}");
540 fDeltaPhiAll = new TH1F("fDeltaPhiAll",
541 " #Delta #phi",200,-360,360);
542 fDeltaPhiAll->GetXaxis()->SetTitle("#Delta #phi");
545 fDeltaPhiLeading = new TH2F("fDeltaPhiLeading",
546 " #Delta #phi",361,-360,360, 361,0, 360);
547 fDeltaPhiLeading->GetXaxis()->SetTitle("#Delta #phi (deg.)");
548 fDeltaPhiLeading->GetYaxis()->SetTitle("#phi_{leading particle} (deg.)");
550 fDiffDcaD = new TH1F("fDiffDcaD",
558 fHists->Add(fHistRECpt);
560 fHists->Add(fEtaPhi);
561 fHists->Add(fThetaRec);
562 fHists->Add(fPhiRec);
563 fHists->Add(fNumber);
572 fHists->Add(fDeltaPhiAll);
573 fHists->Add(fDeltaPhiLeading);
574 fHists->Add(fDiffDcaD);
577 fHists->Add(fsigmaPt);
579 fHists->Add(fRecPtPos);
580 fHists->Add(fRecPtNeg);
581 fHists->Add(fRecPhiPos);
582 fHists->Add(fRecPhiNeg);
583 fHists->Add(fRecEtaPos);
584 fHists->Add(fRecEtaNeg);
585 fHists->Add(fRecEtaPtPos);
586 fHists->Add(fRecEtaPtNeg);
587 fHists->Add(fRecDcaPos);
588 fHists->Add(fRecDcaNeg);
589 fHists->Add(fRecDcaNegInv);
590 fHists->Add(fRecDPos);
591 fHists->Add(fRecDNeg);
594 fHists->Add(fRecQPtPosEta);
595 fHists->Add(fRecQPtNegEta);
596 fHists->Add(fRecPtPosEta);
597 fHists->Add(fRecPtNegEta);
598 fHists->Add(fRecPhiPosEta);
599 fHists->Add(fRecPhiNegEta);
600 fHists->Add(fRecDcaPosEta);
601 fHists->Add(fRecDcaNegEta);
602 fHists->Add(fRecDPosEta);
603 fHists->Add(fRecDNegEta);
606 for(Int_t i=0;i<18;i++){
607 fHists->Add(fRecPtTpcSector[i]);
608 fHists->Add(fRecEtaTpcSector[i]);
609 fHists->Add(fSignedDcaTpcSector[i]);
610 fHists->Add(fRecQPtTpcSector[i]);
611 fHists->Add(fRecEtaPtTpcSector[i]);
614 for(Int_t i=0;i<7;i++){
615 fHists->Add(fRecPtPosLadder[i]);
616 fHists->Add(fRecPtNegLadder[i]);
617 fHists->Add(fRecPhiPosLadder[i]);
618 fHists->Add(fRecPhiNegLadder[i]);
619 fHists->Add(fRecEtaPosLadder[i]);
620 fHists->Add(fRecEtaNegLadder[i]);
623 fHists->Add(fRecPtPosVz);
624 fHists->Add(fRecPtNegVz);
625 fHists->Add(fRecEtaPosVz);
626 fHists->Add(fRecEtaNegVz);
627 fHists->Add(fRecPhiPosVz);
628 fHists->Add(fRecPhiNegVz);
629 fHists->Add(fSignedDcaPosVz);
630 fHists->Add(fSignedDcaNegVz);
631 fHists->Add(fRecQPtPosEtaVz);
632 fHists->Add(fRecQPtNegEtaVz);
633 fHists->Add(fRecEtaPtPosVz);
634 fHists->Add(fRecEtaPtNegVz);
637 for(Int_t i=0;i<7;i++){
638 fHists->Add(fSignDcaPos[i]);
639 fHists->Add(fSignDcaNeg[i]);
640 fHists->Add(fSignDcaNegInv[i]);
642 fHists->Add(fPtSigmaPos[i]);
643 fHists->Add(fPtSigmaNeg[i]);
644 fHists->Add(fqPtRec[i]);
646 fHists->Add(fDcaSigmaPos[i]);
647 fHists->Add(fDcaSigmaNeg[i]);
654 for (Int_t i=0; i<fHists->GetEntries(); ++i) {
655 TH1 *h1 = dynamic_cast<TH1*>(fHists->At(i));
657 // Printf("%s ",h1->GetName());
666 //__________________________________________________________
668 void AliAnalysisTaskQASym::UserExec(Option_t *)
670 printf("I'm here \n");
671 AliVEvent *event = InputEvent();
673 Printf("ERROR: Could not retrieve event");
679 AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
681 Printf("We are reading from ESD");
686 Printf("There are %d tracks in this event", event->GetNumberOfTracks());
689 Int_t leadingTrack = 0;
690 Float_t leadingEnergy = -20.;
691 Float_t leadingPhi = 0;//TMath::Pi();
694 if(event->GetNumberOfTracks()!=0) fNumber->Fill(event->GetNumberOfTracks());
696 const AliVVertex* vertex = event->GetPrimaryVertex();
697 Float_t vz = vertex->GetZ();
698 if (TMath::Abs(vz) > 10.) return;
700 for (Int_t iTrack = 0; iTrack < event->GetNumberOfTracks(); iTrack++) {
703 AliVParticle *track = event->GetTrack(iTrack);
704 AliESDtrack *esdtrack = dynamic_cast<AliESDtrack*>(track);
706 Printf("ERROR: Could not receive track %d", iTrack);
710 //if (!fCuts->AcceptTrack(esdtrack)) continue;
711 const AliExternalTrackParam * tpcPSO = esdtrack->GetTPCInnerParam();
712 const AliExternalTrackParam * tpcP = esdtrack;
716 if (tpcP->Pt() > 50. && tpcPSO) {
717 printf("High Pt %5d %5d %13.3f %13.3f \n", event->GetPeriodNumber(), event->GetOrbitNumber(),
718 tpcPSO->Pt(), esdtrack->Pt());
722 // if (tpcPSO) fRecPt12->Fill(tpcPSO->Pt(), esdtrack->Pt());
724 if(tpcP->E()>leadingEnergy){
726 leadingEnergy=tpcP->E();
727 leadingPhi=tpcP->Phi();
734 esdtrack->PropagateToDCA(event->GetPrimaryVertex(),
735 event->GetMagneticField(), 10000.);
738 // if(tpcP->Pt()<2.)continue;
741 fqRec->Fill(tpcP->Charge());
744 Double_t sigmapt = tpcP->GetSigma1Pt2();
745 sigmapt= sqrt(sigmapt);
746 sigmapt= sigmapt *(tpcP->Pt()*tpcP->Pt());
748 if(sigmapt < 1.e-12) continue;
749 fsigmaPt->Fill(TMath::Log10(sigmapt));
754 if(esdtrack->HasPointOnITSLayer(0))
756 else if(!esdtrack->HasPointOnITSLayer(0)
757 && esdtrack->HasPointOnITSLayer(1))
759 else if(!esdtrack->HasPointOnITSLayer(0)
760 && !esdtrack->HasPointOnITSLayer(1)
761 && esdtrack->HasPointOnITSLayer(2))
763 else if(!esdtrack->HasPointOnITSLayer(0)
764 && !esdtrack->HasPointOnITSLayer(1)
765 && !esdtrack->HasPointOnITSLayer(2)
766 && esdtrack->HasPointOnITSLayer(3))
768 else if(!esdtrack->HasPointOnITSLayer(0)
769 && !esdtrack->HasPointOnITSLayer(1)
770 && !esdtrack->HasPointOnITSLayer(2)
771 && !esdtrack->HasPointOnITSLayer(3)
772 && esdtrack->HasPointOnITSLayer(4))
774 else if( !esdtrack->HasPointOnITSLayer(0)
775 && !esdtrack->HasPointOnITSLayer(1)
776 && !esdtrack->HasPointOnITSLayer(2)
777 && !esdtrack->HasPointOnITSLayer(3)
778 && !esdtrack->HasPointOnITSLayer(4)
779 && esdtrack->HasPointOnITSLayer(5))
786 //-------------------
788 Double_t sdcatr = (tpcP->Py()*tpcP->Xv()
789 - tpcP->Px()*tpcP->Yv())/tpcP->Pt();
793 fqPtRec[cas]->Fill(tpcP->Charge()/tpcP->Pt());
795 fHistRECpt->Fill(tpcP->Pt());
796 fEta->Fill(tpcP->Eta());
797 fThetaRec->Fill(tpcP->Theta());
798 fPhiRec->Fill(tpcP->Phi());
799 fVx->Fill(tpcP->Xv());
800 fVy->Fill(tpcP->Yv());
801 fVz->Fill(tpcP->Zv());
804 fEtaPt->Fill(tpcP->Eta()/tpcP->Pt());
805 fQPt->Fill(tpcP->Charge()/tpcP->Pt());
811 esdtrack->GetImpactParameters(xy,z);
812 fDiffDcaD->Fill(sdcatr+xy);
815 //for positive particles
817 if(tpcP->Charge()>0){
818 fRecPtPos->Fill(tpcP->Pt());
819 fRecPtPosLadder[cas]->Fill(tpcP->Pt());
820 fRecPtPosVz->Fill(TMath::Log10(tpcP->Pt()),tpcP->Zv());
821 fRecPhiPos->Fill(TMath::RadToDeg()*tpcP->Phi());
824 fRecPhiPosLadder[cas]->Fill(TMath::RadToDeg()*tpcP->Phi());
825 fRecPhiPosVz->Fill(TMath::RadToDeg()*tpcP->Phi(),tpcP->Zv());
826 fSignedDcaPosVz->Fill(sdcatr,tpcP->Zv());
828 fRecEtaPos->Fill(tpcP->Eta());
829 fRecEtaPosLadder[cas]->Fill(tpcP->Eta());
830 fRecEtaPtPos->Fill(tpcP->Eta()/tpcP->Pt());
831 fRecEtaPosVz->Fill(tpcP->Eta(),tpcP->Zv());
832 fRecEtaPtPosVz->Fill(tpcP->Eta()/tpcP->Pt(),tpcP->Zv());
834 fRecDcaPos->Fill(sdcatr);
836 fSignDcaPos[cas]->Fill(sdcatr);
839 fDcaSigmaPos[cas]->Fill(sdcatr, TMath::Log10(sigmapt));
841 fPtSigmaPos[cas]->Fill(TMath::Log10(sigmapt));
843 //and negative particles
845 fRecPtNeg->Fill(tpcP->Pt());
846 fRecPtNegLadder[cas]->Fill(tpcP->Pt());
847 fRecPtNegVz->Fill(TMath::Log10(tpcP->Pt()),tpcP->Zv());
849 fRecPhiNeg->Fill(TMath::RadToDeg()*tpcP->Phi());
850 fRecPhiNegLadder[cas]->Fill(TMath::RadToDeg()*tpcP->Phi());
851 fRecPhiNegVz->Fill(TMath::RadToDeg()*tpcP->Phi(),tpcP->Zv());
852 fSignedDcaNegVz->Fill(sdcatr,tpcP->Zv());
853 fRecEtaPtNegVz->Fill(tpcP->Eta()/tpcP->Pt(),tpcP->Zv());
855 fRecEtaNeg->Fill(tpcP->Eta());
856 fRecEtaNegLadder[cas]->Fill(tpcP->Eta());
857 fRecEtaPtNeg->Fill(tpcP->Eta()/tpcP->Pt());
858 fRecEtaNegVz->Fill(tpcP->Eta(),tpcP->Zv());
860 fRecDcaNeg->Fill(sdcatr);
861 fRecDcaNegInv->Fill(-sdcatr);
863 fSignDcaNeg[cas]->Fill(sdcatr);
864 fSignDcaNegInv[cas]->Fill(-sdcatr);
867 fDcaSigmaNeg[cas]->Fill(sdcatr,TMath::Log10(sigmapt));
869 fPtSigmaNeg[cas]->Fill(TMath::Log10(sigmapt));
874 //all particles with positive eta
876 fRecQPtPosEta->Fill(tpcP->Charge()/tpcP->Pt());
877 fRecPtPosEta->Fill(tpcP->Pt());
878 fRecPhiPosEta->Fill(TMath::RadToDeg()*tpcP->Phi());
879 fRecQPtPosEtaVz->Fill(tpcP->Charge()/tpcP->Pt(),tpcP->Zv());
880 fRecDcaPosEta->Fill(sdcatr);
881 fRecDPosEta->Fill(xy);
883 //all particles with negative eta (and eta==0)
885 fRecQPtNegEta->Fill(tpcP->Charge()/tpcP->Pt());
886 fRecPtNegEta->Fill(tpcP->Pt());
887 fRecPhiNegEta->Fill(TMath::RadToDeg()*tpcP->Phi());
888 fRecQPtNegEtaVz->Fill(tpcP->Charge()/tpcP->Pt(),tpcP->Zv());
889 fRecDcaNegEta->Fill(sdcatr);
890 fRecDNegEta->Fill(xy);
895 //spectren detected by TPC sectors
896 //pt cut on 1 GeV/c ?!
897 // if(tpcP->Pt()<1.) continue;
898 fRecPtTpcSector[Int_t(tpcP->Phi()*
899 TMath::RadToDeg()/20)]->Fill(tpcP->Pt());
900 fRecEtaTpcSector[Int_t(tpcP->Phi()*
901 TMath::RadToDeg()/20)]->Fill(tpcP->Eta());
902 fSignedDcaTpcSector[Int_t(tpcP->Phi()*
903 TMath::RadToDeg()/20)]->Fill(sdcatr);
904 fRecQPtTpcSector[Int_t(tpcP->Phi()*
905 TMath::RadToDeg()/20)]->Fill(tpcP->Charge()/tpcP->Pt());
906 fRecEtaPtTpcSector[Int_t(tpcP->Phi()*
907 TMath::RadToDeg()/20)]->Fill(tpcP->Eta()/tpcP->Pt());
914 // another track loop
915 for (Int_t iTrack2 = 0; iTrack2 < event->GetNumberOfTracks(); iTrack2++) {
917 if(leadingTrack==iTrack2) continue;
919 AliVParticle *track2 = event->GetTrack(iTrack2);
920 AliESDtrack* esdtrack2 = dynamic_cast<AliESDtrack*>(track2);
922 Printf("ERROR: Could not receive track %d", iTrack);
925 if (!fCuts->AcceptTrack(esdtrack2)) continue;
927 esdtrack2->PropagateToDCA(event->GetPrimaryVertex(),
928 event->GetMagneticField(), 10000.);
930 fDeltaPhiLeading->Fill((leadingPhi-esdtrack2->Phi())*TMath::RadToDeg(),
931 leadingPhi*TMath::RadToDeg() );
942 // PostData(1, fHistPt);
950 //________________________________________________________________________
951 void AliAnalysisTaskQASym::Terminate(Option_t *)