#include "TParticle.h"
#include "TParticlePDG.h"
#include "TProfile.h"
-#include "TNtuple.h"
-#include "TFile.h"
#include "AliAnalysisTask.h"
#include "AliAnalysisManager.h"
AliAnalysisTaskQASym::AliAnalysisTaskQASym(const char *name)
: AliAnalysisTaskSE(name)
,fTrackType(0)
+ ,fStandAlone(0)
+ ,fLow(0)
+ ,fHigh(100)
,fFieldOn(kTRUE)
-
,fHists(0)
-
,fHistRECpt(0)
,fEta(0)
+ ,fEtaWidth(0)
+ ,fPhiWidth(0)
+ ,fDcaWidth(0)
+ ,fPtWidth(0)
,fEtaPhi(0)
,fEtaPt(0)
,fQPt(0)
,fDca(0)
+ ,fDcaZ(0)
,fqRec(0)
- ,fsigmaPt(0)
-
+ ,fSigmaPtHist(0)
+
,fRecPtPos(0)
,fRecPtNeg(0)
,fRecPhiPos(0)
,fRecDcaNegInv(0)
,fRecDPos(0)
,fRecDNeg(0)
-
-
+
+
,fRecQPtPosEta(0)
,fRecQPtNegEta(0)
,fRecPtPosEta(0)
,fRecDcaNegEta(0)
,fRecDPosEta(0)
,fRecDNegEta(0)
-
+
,fRecPtPosVz(0)
,fRecPtNegVz(0)
,fRecEtaPosVz(0)
,fRecQPtNegEtaVz(0)
,fRecEtaPtPosVz(0)
,fRecEtaPtNegVz(0)
-
-
+
+
,fDeltaPhiAll(0)
,fDeltaPhiLeading(0)
,fDiffDcaD(0)
-
+
,fPhiRec(0)
,fThetaRec(0)
,fNumber(0)
+ ,fNumberAfterCut(0)
,fVx(0)
,fVy(0)
,fVz(0)
- ,test(0)
-
+ ,fNVertexSPD(0)
+ ,fNVertexTracks(0)
,fRecDcaPosPhi(0)
,fRecDcaNegPhi(0)
,fRecPtPosPhi(0)
,fRecDcaNegPhiEtaPos(0)
,fRecDcaPosPhiEtaNeg(0)
,fRecDcaNegPhiEtaNeg(0)
+
+ ,fRecDcaPosPtEtaPos(0)
+ ,fRecDcaNegPtEtaPos(0)
+ ,fRecDcaPosPtEtaNeg(0)
+ ,fRecDcaNegPtEtaNeg(0)
+
,fRecPtPosPhiEtaPos(0)
,fRecPtNegPhiEtaPos(0)
,fRecPtPosPhiEtaNeg(0)
,fRecPtNegPhiEtaNeg(0)
- ,fRecDcaPhiPtPosEtaPos(0)
- ,fRecDcaPhiPtNegEtaPos(0)
- ,fRecDcaPhiPtPosEtaNeg(0)
- ,fRecDcaPhiPtNegEtaNeg(0)
+// ,fRecDcaPhiPtPosEtaPos(0)
+// ,fRecDcaPhiPtNegEtaPos(0)
+// ,fRecDcaPhiPtPosEtaNeg(0)
+// ,fRecDcaPhiPtNegEtaNeg(0)
+
,fEtavPt(0)
+ ,fPhivPt(0)
+
+ ,fCompareTPCparam(0)
+ ,fITSlayer(0)
+ ,fITSlayerEta(0)
+ ,fITSlayerPhi(0)
-
- ,sdca(0)
- ,xy(0)
- ,z(0)
- ,xvertexcor(0)
- ,yvertexcor(0)
-
,fCuts(0)
{
// Constructor
+ for(Int_t i = 0;i<4;++i){
+ fVertexX[i]=0;
+ fVertexY[i]=0;
+ fVertexZ[i]=0;
+ }
+
for(Int_t i = 0;i<18;++i){
fRecPtTpcSector[i] = 0;
fRecEtaTpcSector[i] = 0;
fDcaSigmaNeg[i] =0;
}
+ for(Int_t i = 0;i< 3;i++){
+ for(Int_t j = 0;j< 2;j++){
+ fEtaBinPt[i][j]=0;
+ fPhiBinPt[i][j]=0;
+ fDcaBinPt[i][j]=0;
+ fEtaPhiBinPt[i][j]=0;
+ }
+ }
+
DefineOutput(1, TList::Class());
Bool_t oldStatus = TH1::AddDirectoryStatus();
TH1::AddDirectory(kFALSE);
- Double_t range = 0.2;
+ Double_t range = 0.3;
Double_t pt = 20.;
fHists = new TList();
- // test = new TNtuple("test","test",
- // "pt:phi:theta:x:y:z:charge");
+
fHistRECpt = new TH1F("fHistRECpt",
" p_{T}",
- 100, 0., 0.6);
+ 200, 0., pt);
fEta = new TH1F("fEta",
" #eta",
200, -2., 2.);
- fEtavPt = new TH2F("fEtavPt",
- " #eta -p_{T}",
- 200, -2., 2.,
- 100, 0, 1.5);
+ fEtaWidth = new TH1F("fEtaWidth",
+ " #eta",
+ 200, -2., 2.);
+ fPhiWidth = new TH1F("fPhiWidth",
+ " #phi",
+ 200, 0., 2*TMath::Pi());
+ fDcaWidth = new TH1F("fDcaWidth",
+ "dca",
+ 200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
+ fPtWidth = new TH1F("fPtWidth",
+ "p_{T}",
+ 200, 0., pt);
+ fEtavPt = new TH2F("fEtavPt",
+ " #eta -p_{T}",
+ 200, -2., 2.,
+ 100, -3, 4);
+ fPhivPt = new TH2F("fPhivPt",
+ " #phi -p_{T}",
+ 200, 0, 2*TMath::Pi(),
+ 100, -3, 5);
+ fCompareTPCparam = new TH2F("fCompareTPCparam",
+ "fCompareTPCparam",
+ 100, -1., 1.,100,-5, 5);
+
+ fITSlayer = new TH1F("fITSlayer",
+ "fITSlayer",
+ 8, -1.5, 6.5);
+ fITSlayerEta = new TH2F("fITSlayerEta",
+ "fITSlayerEta",
+ 8, -1.5, 6.5, 200, -2.,2.);
+ fITSlayerPhi = new TH2F("fITSlayerPhi",
+ "fITSlayerPhi",
+ 8, -1.5, 6.5, 200, 0,2*TMath::Pi());
fEtaPhi = new TH2F("fEtaPhi",
" #eta - #phi",
200, -2., 2., 128, 0., 2. * TMath::Pi());
-
fThetaRec = new TH1F("fThetaRec",
" #theta",
180, 0., TMath::Pi());
180, 0., 2*TMath::Pi());
fNumber = new TH1F("fNumber",
"number of tracks per event",
- 50, 0.5, 49.5);
+ 500, -5, 4995);
+ fNumberAfterCut = new TH1F("fNumberAfterCut",
+ "number of tracks per event after cuts",
+ 500, -5, 4995);
fVx = new TH1F("fVx",
- "X of vertex",
+ "X of first track point",
100, -1., 1.);
fVy = new TH1F("fVy",
- "Y of vertex",
+ "Y of first track point",
100, -1., 1.);
fVz = new TH1F("fVz",
- "Z of vertex",
+ "Z of first track point",
200, -50., 50.);
-
+ fNVertexSPD = new TH1F("fNVertexSPD",
+ "Number of SPD vertices",
+ 10, -0.5, 9.5);
+ fNVertexTracks = new TH1F("fNVertexTracks",
+ "Number of track vertices",
+ 10, -0.5, 9.5);
+
fEtaPt = new TH1F("fEtaPt",
" #eta/p_{T} ",
100, -1., 1.);
" dca ",
200, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
+ fDcaZ = new TH1F("fDcaZ", "fDcaZ ",200, -3, 3);// limits fitting those of track cuts
+
fqRec = new TH1F("fqRec",
" charge all reconstructed particle",
21, -9.5, 10.5);
- fsigmaPt = new TH1F("fsigmaPt",
+ fSigmaPtHist = new TH1F("fSigmaPtHist",
"Log_{10}(#sigma_{p_{T}})",
200, -4., 8.);
-
+ TString lable[4]={"", "SPD", "Track", "TPC"};
+ for(Int_t i=0;i<4;i++){
+ fVertexX[i] = new TH1F(Form("fVertexX%s",lable[i].Data()),
+ Form("fVertexX%s",lable[i].Data()),
+ 100, -1., 1.);
+ fVertexY[i] = new TH1F(Form("fVertexY%s",lable[i].Data()),
+ Form("fVertexY%s",lable[i].Data()),
+ 100, -1., 1.);
+ if(i==1 || i==2){
+ fVertexZ[i] = new TH1F(Form("fVertexZ%s",lable[i].Data()),
+ Form("fVertexZ%s",lable[i].Data()),
+ 200, -5., 5.);
+ }
+ else{
+ fVertexZ[i] = new TH1F(Form("fVertexZ%s",lable[i].Data()),
+ Form("fVertexZ%s",lable[i].Data()),
+ 200, -50., 50.);
+ }
+ }
//------------
for(Int_t ITSlayer_case=0;ITSlayer_case<7;ITSlayer_case++){
100,-2.5 , 2., 180, 0, TMath::Pi()*2);
fRecPtNegPhiEtaNeg->GetXaxis()->SetTitle("log_{10}(p_{T})");
fRecPtNegPhiEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
+
+ //new
+ fRecDcaPosPtEtaPos = new TH2F("fRecDcaPosPtEtaPos",
+ " dca vs. pt",
+ 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200, -2, 2);
+ fRecDcaPosPtEtaPos->GetXaxis()->SetTitle("dca (cm)");
+ fRecDcaPosPtEtaPos->GetYaxis()->SetTitle("log_{10}(p_{T})");
+
+ fRecDcaPosPtEtaNeg = new TH2F("fRecDcaPosPtEtaNeg",
+ " dca vs. pt",
+ 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200, -2, 2);
+ fRecDcaPosPtEtaNeg->GetXaxis()->SetTitle("dca (cm)");
+ fRecDcaPosPtEtaNeg->GetYaxis()->SetTitle("log_{10}(p_{T})");
+
+ fRecDcaNegPtEtaPos = new TH2F("fRecDcaNegPtEtaPos",
+ " dca vs. pt",
+ 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200, -2, 2);
+ fRecDcaNegPtEtaPos->GetXaxis()->SetTitle("dca (cm)");
+ fRecDcaNegPtEtaPos->GetYaxis()->SetTitle("log_{10}(p_{T})");
+
+ fRecDcaNegPtEtaNeg = new TH2F("fRecDcaNegPtEtaNeg",
+ " dca vs. pt",
+ 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9), 200, -2, 2);
+ fRecDcaNegPtEtaNeg->GetXaxis()->SetTitle("dca (cm)");
+ fRecDcaNegPtEtaNeg->GetYaxis()->SetTitle("log_{10}(p_{T})");
+
-
-
// YIELDs ---------------- for TPC sectors
for(Int_t sector=0; sector<18;sector++){
fRecEtaNegLadder[i]->GetXaxis()->SetTitle("#eta");
}
- Double_t vzmax = 15;
+ Double_t vzmax = 15.;
fRecPtPosVz = new TH2F("fRecPtPosVz",
"p_{T} distribution vs Vz()",
- fRecDcaPhiPtPosEtaPos = new TH3F("fRecDcaPhiPtPosEtaPos",
- "#phi- p_{T} - DCA",
- 180,0,2*TMath::Pi(),
- 100,0,pt,
- 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
- fRecDcaPhiPtPosEtaPos->GetXaxis()->SetTitle("#phi (rad.)");
- fRecDcaPhiPtPosEtaPos->GetYaxis()->SetTitle("p_{T} (GeV/c)");
- fRecDcaPhiPtPosEtaPos->GetZaxis()->SetTitle("dca (cm)");
-
- fRecDcaPhiPtPosEtaNeg = new TH3F("fRecDcaPhiPtPosEtaNeg",
- "#phi- p_{T} - DCA",
- 180,0,2*TMath::Pi(),
- 100,0,pt,
- 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
- fRecDcaPhiPtPosEtaNeg->GetZaxis()->SetTitle("dca (cm)");
- fRecDcaPhiPtPosEtaNeg->GetXaxis()->SetTitle("#phi (rad.)");
- fRecDcaPhiPtPosEtaNeg->GetYaxis()->SetTitle("p_{T} (GeV/c)");
-
- fRecDcaPhiPtNegEtaPos = new TH3F("fRecDcaPhiPtNegEtaPos",
- "#phi- p_{T} - DCA",
- 180,0,2*TMath::Pi(),
- 100,0,pt,
- 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
- fRecDcaPhiPtNegEtaPos->GetZaxis()->SetTitle("dca (cm)");
- fRecDcaPhiPtNegEtaPos->GetXaxis()->SetTitle("#phi (rad.)");
- fRecDcaPhiPtNegEtaPos->GetYaxis()->SetTitle("p_{T} (GeV/c)");
-
- fRecDcaPhiPtNegEtaNeg = new TH3F("fRecDcaPhiPtNegEtaNeg",
- "#phi- p_{T} - DCA",
- 180,0,2*TMath::Pi(),
- 100,0,pt,
- 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
- fRecDcaPhiPtNegEtaNeg->GetZaxis()->SetTitle("dca (cm)");
- fRecDcaPhiPtNegEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
- fRecDcaPhiPtNegEtaNeg->GetXaxis()->SetTitle("p_{T} (GeV/c)");
-
-
+// fRecDcaPhiPtPosEtaPos = new TH3F("fRecDcaPhiPtPosEtaPos",
+// "#phi- p_{T} - DCA",
+// 180,0,2*TMath::Pi(),
+// 100,0,pt,
+// 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
+// fRecDcaPhiPtPosEtaPos->GetXaxis()->SetTitle("#phi (rad.)");
+// fRecDcaPhiPtPosEtaPos->GetYaxis()->SetTitle("p_{T} (GeV/c)");
+// fRecDcaPhiPtPosEtaPos->GetZaxis()->SetTitle("dca (cm)");
+
+// fRecDcaPhiPtPosEtaNeg = new TH3F("fRecDcaPhiPtPosEtaNeg",
+// "#phi- p_{T} - DCA",
+// 180,0,2*TMath::Pi(),
+// 100,0,pt,
+// 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
+// fRecDcaPhiPtPosEtaNeg->GetZaxis()->SetTitle("dca (cm)");
+// fRecDcaPhiPtPosEtaNeg->GetXaxis()->SetTitle("#phi (rad.)");
+// fRecDcaPhiPtPosEtaNeg->GetYaxis()->SetTitle("p_{T} (GeV/c)");
+
+// fRecDcaPhiPtNegEtaPos = new TH3F("fRecDcaPhiPtNegEtaPos",
+// "#phi- p_{T} - DCA",
+// 180,0,2*TMath::Pi(),
+// 100,0,pt,
+// 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
+// fRecDcaPhiPtNegEtaPos->GetZaxis()->SetTitle("dca (cm)");
+// fRecDcaPhiPtNegEtaPos->GetXaxis()->SetTitle("#phi (rad.)");
+// fRecDcaPhiPtNegEtaPos->GetYaxis()->SetTitle("p_{T} (GeV/c)");
+
+// fRecDcaPhiPtNegEtaNeg = new TH3F("fRecDcaPhiPtNegEtaNeg",
+// "#phi- p_{T} - DCA",
+// 180,0,2*TMath::Pi(),
+// 100,0,pt,
+// 100, -range*(1+Int_t(fTrackType/2)*9), range*(1+Int_t(fTrackType/2)*9));
+// fRecDcaPhiPtNegEtaNeg->GetZaxis()->SetTitle("dca (cm)");
+// fRecDcaPhiPtNegEtaNeg->GetYaxis()->SetTitle("#phi (rad.)");
+// fRecDcaPhiPtNegEtaNeg->GetXaxis()->SetTitle("p_{T} (GeV/c)");
+
+ TString charge[2];
+ charge[0]="Pos";
+ charge[1]="Neg";
+
+ for(Int_t i=0;i<3;i++){
+ for(Int_t j=0;j<2;j++){
+ fEtaBinPt[i][j] = new TH1F(Form("fEtaBinPt%d%s", i, charge[j].Data()),
+ "eta",
+ 200, -2., 2.);
+ fPhiBinPt[i][j] = new TH1F(Form("fPhiBinPt%d%s", i,charge[j].Data() ),
+ "phi",
+ 181, 0, 2*TMath::Pi());
+ fDcaBinPt[i][j] = new TH1F(Form("fDcaBinPt%d%s", i, charge[j].Data()),
+ "DCA",
+ 200,-range*(1+Int_t(fTrackType/2)*9),
+ range*(1+Int_t(fTrackType/2)*9) );
+ fEtaPhiBinPt[i][j]= new TH2F(Form("fEtaPhiBinPt%d%s", i, charge[j].Data()),
+ "eta-phi",
+ 200, -2., 2., 200, 0.,2*TMath::Pi());
+ }
+ }
fHists->SetOwner();
fHists->Add(fHistRECpt);
fHists->Add(fEta);
+ fHists->Add(fEtaWidth);
+ fHists->Add(fPhiWidth);
+ fHists->Add(fDcaWidth);
+ fHists->Add(fPtWidth);
fHists->Add(fEtavPt);
+ fHists->Add(fPhivPt);
+ fHists->Add(fCompareTPCparam);
+ fHists->Add(fITSlayer);
+ fHists->Add(fITSlayerEta);
+ fHists->Add(fITSlayerPhi);
fHists->Add(fEtaPhi);
fHists->Add(fThetaRec);
fHists->Add(fPhiRec);
fHists->Add(fNumber);
+ fHists->Add(fNumberAfterCut);
fHists->Add(fVx);
fHists->Add(fVy);
fHists->Add(fVz);
+ fHists->Add(fNVertexSPD);
+ fHists->Add(fNVertexTracks);
fHists->Add(fEtaPt);
fHists->Add(fQPt);
fHists->Add(fDca);
+ fHists->Add(fDcaZ);
fHists->Add(fDeltaPhiAll);
fHists->Add(fDeltaPhiLeading);
fHists->Add(fDiffDcaD);
fHists->Add(fqRec);
- fHists->Add(fsigmaPt);
+ fHists->Add(fSigmaPtHist);
fHists->Add(fRecPtPos);
fHists->Add(fRecPtNeg);
fHists->Add(fRecDPosEta);
fHists->Add(fRecDNegEta);
-
+ for(Int_t i=0;i<4;i++){
+ fHists->Add(fVertexX[i]);
+ fHists->Add(fVertexY[i]);
+ fHists->Add(fVertexZ[i]);
+ }
for(Int_t i=0;i<18;i++){
fHists->Add(fRecPtTpcSector[i]);
fHists->Add(fRecEtaTpcSector[i]);
fHists->Add(fRecPtPosPhiEtaNeg);
fHists->Add(fRecPtNegPhiEtaNeg);
- fHists->Add(fRecDcaPhiPtPosEtaPos);
- fHists->Add(fRecDcaPhiPtPosEtaNeg);
- fHists->Add(fRecDcaPhiPtNegEtaPos);
- fHists->Add(fRecDcaPhiPtNegEtaNeg);
-
-
-
+ fHists->Add(fRecDcaPosPtEtaPos);
+ fHists->Add(fRecDcaNegPtEtaPos);
+ fHists->Add(fRecDcaPosPtEtaNeg);
+ fHists->Add(fRecDcaNegPtEtaNeg);
+
+ // fHists->Add(fRecDcaPhiPtPosEtaPos);
+ // fHists->Add(fRecDcaPhiPtPosEtaNeg);
+ // fHists->Add(fRecDcaPhiPtNegEtaPos);
+ // fHists->Add(fRecDcaPhiPtNegEtaNeg);
+
+ for(Int_t i=0;i<3;i++){
+ for(Int_t j=0;j<2;j++){
+ fHists->Add(fEtaBinPt[i][j]);
+ fHists->Add(fPhiBinPt[i][j]);
+ fHists->Add(fDcaBinPt[i][j]);
+ fHists->Add(fEtaPhiBinPt[i][j]);
+ }
+ }
// for (Int_t i=0; i<fHists->GetEntries(); ++i) {
// h1->Sumw2();
// }
// }
- // BKC
TH1::AddDirectory(oldStatus);
+ PostData(1, fHists);
+
}
//__________________________________________________________
void AliAnalysisTaskQASym::UserExec(Option_t *)
{
+ // QA of global, TPC, ITS and ITS stand alone tracks
+ // exploiting basic symmetries
+
AliVEvent *event = InputEvent();
if (!event) {
Printf("ERROR: Could not retrieve event");
if(Entry()==0){
- AliESDEvent* esd = dynamic_cast<AliESDEvent*>(event);
+ AliESDEvent* esd = static_cast<AliESDEvent*>(event);
if(esd){
Printf("We are reading from ESD");
}
Float_t leadingPhi = 0;//TMath::Pi();
- if(event->GetNumberOfTracks()!=0) fNumber->Fill(event->GetNumberOfTracks());
+ //check vertices
+ AliESDEvent* esd = static_cast<AliESDEvent*>(event);
+ Int_t nPileSPDVertices=1+esd->GetNumberOfPileupVerticesSPD(); // also SPD main vertex
+ Int_t nPileTrkVertices=esd->GetNumberOfPileupVerticesTracks();
+ fNVertexSPD->Fill(nPileSPDVertices);
+ fNVertexTracks->Fill(nPileTrkVertices);
+
+ //check primary vertex
+ Float_t vx = 0;
+ Float_t vy = 0;
+ Float_t vz = 0;
+ //primary vertex: contribution from different vertexers
const AliVVertex* vertex = event->GetPrimaryVertex();
- Float_t vz = vertex->GetZ();
+ if(!vertex) return;
+ vx = vertex->GetX();
+ vy = vertex->GetY();
+ vz = vertex->GetZ();
+ if(vertex->GetNContributors()>0){
+ fVertexX[0]->Fill(vx);
+ fVertexY[0]->Fill(vy);
+ fVertexZ[0]->Fill(vz);
+ }
+
+
+
+ const AliVVertex* vertexSPD = esd->GetPrimaryVertexSPD();
+ if(vertexSPD){
+ if(vertexSPD->GetNContributors()>0){
+ fVertexX[1]->Fill(vertexSPD->GetX());
+ fVertexY[1]->Fill(vertexSPD->GetX());
+ fVertexZ[1]->Fill(vertexSPD->GetX());
+ }
+ }
+
+ const AliVVertex* vertexTrack = esd->GetPrimaryVertexTracks();
+ if(vertexTrack){
+ if(vertexTrack->GetNContributors()>0){
+ fVertexX[2]->Fill(vertexTrack->GetX());
+ fVertexY[2]->Fill(vertexTrack->GetX());
+ fVertexZ[2]->Fill(vertexTrack->GetX());
+ }
+ }
+
+ const AliVVertex* vertexTPC = esd->GetPrimaryVertexTPC();
+ if(vertexTPC){
+ if(vertexTPC->GetNContributors()>0){
+ fVertexX[3]->Fill(vertexTPC->GetX());
+ fVertexY[3]->Fill(vertexTPC->GetX());
+ fVertexZ[3]->Fill(vertexTPC->GetX());
+ }
+ }
+
+ //cuts on general vertex
+ if(vertex->GetNContributors()<1) return;
if (TMath::Abs(vz) > 10.) return;
+ fNumber->Fill(event->GetNumberOfTracks());
+
+ AliESDtrack *tpcP = 0x0;
+ Int_t fNTracksAccepted=0;
+ const Int_t arrSize = event->GetNumberOfTracks();
+ Float_t * phiArray = new Float_t[arrSize];
+ Float_t * etaArray = new Float_t[arrSize];
+ Float_t * ptArray = new Float_t[arrSize];
+ Float_t * dcaArray = new Float_t[arrSize];
+ Int_t * chargeArray = new Int_t [arrSize];
+ Bool_t * acceptedArray = new Bool_t [arrSize];
+
+ for (Int_t i = 0; i < event->GetNumberOfTracks(); i++) {
+ phiArray[i] = 0.;
+ etaArray[i] = 0.;
+ ptArray[i] = 0.;
+ dcaArray[i] = 0.;
+ chargeArray[i] = 0;
+ acceptedArray[i]= kFALSE;
+
+ }
+
+
+
for (Int_t iTrack = 0; iTrack < event->GetNumberOfTracks(); iTrack++) {
+ //prevent mem leak for TPConly track
+ if(fTrackType==2&&tpcP){
+ delete tpcP;
+ tpcP = 0;
+ }
AliVParticle *track = event->GetTrack(iTrack);
- AliESDtrack *esdtrack = dynamic_cast<AliESDtrack*>(track);
+ AliESDtrack *esdtrack = static_cast<AliESDtrack*>(track);
esdtrack->PropagateToDCA(event->GetPrimaryVertex(),
event->GetMagneticField(), 10000.);
}
//__________
// run Task for global tracks or ITS tracks or TPC tracks
- AliESDtrack *tpcP = 0x0;
const AliExternalTrackParam *tpcPin = 0x0;
- Double_t phiIn=0;
+ Double_t phiIn=0.;
+
if(fTrackType==0){
//Fill all histograms with global tracks
tpcP = esdtrack;
- phiIn = tpcP->Phi();
if (!tpcP) continue;
if (!fCuts->AcceptTrack(tpcP)) continue;
+ phiIn = tpcP->Phi();
}
else if(fTrackType==1){
//Fill all histograms with ITS tracks
phiIn = tpcP->Phi();
if (!tpcP) continue;
if (!fCuts->AcceptTrack(tpcP)) continue;
+ if(fStandAlone==kTRUE) {
+ if(!(tpcP->GetStatus()&AliESDtrack::kITSpureSA))continue;
+ }
+ else if(fStandAlone==kFALSE){
+ if(tpcP->GetStatus()&AliESDtrack::kITSpureSA)continue;
+ }
}
else if(fTrackType==2){
//Fill all histograms with TPC track information
if (!tpcPin) continue;
phiIn=tpcPin->Phi();
- tpcP = AliESDtrackCuts::GetTPCOnlyTrack(dynamic_cast<AliESDEvent*>(event),esdtrack->GetID());
+ tpcP = AliESDtrackCuts::GetTPCOnlyTrack(static_cast<AliESDEvent*>(event),esdtrack->GetID());
if (!tpcP) continue;
if (!fCuts->AcceptTrack(tpcP)) continue;
if(tpcP->GetNcls(1)>160)continue;//jacek's track cut
//___________
//
+
+ fNTracksAccepted++;
+ phiArray[iTrack] = phiIn;
+ etaArray[iTrack] = tpcP->Eta();
+ ptArray[iTrack] = tpcP->Pt();
+ chargeArray[iTrack] = tpcP->Charge();
+ acceptedArray[iTrack]= kTRUE;
+
if(tpcP->E()>leadingEnergy){
leadingTrack=iTrack;
leadingPhi=phiIn;
}
-
+
fqRec->Fill(tpcP->Charge());
- Double_t sigmapt = tpcP->GetSigma1Pt2();
- sigmapt= sqrt(sigmapt);
- sigmapt= sigmapt *(tpcP->Pt()*tpcP->Pt());
+ Double_t fSigmaPt = tpcP->GetSigma1Pt2();
+ fSigmaPt= sqrt(fSigmaPt);
+ fSigmaPt= fSigmaPt *(tpcP->Pt()*tpcP->Pt());
- if(sigmapt == 0.)continue;
- fsigmaPt->Fill(TMath::Log10(sigmapt));
+ if(TMath::Abs(fSigmaPt) < 1.e-10) continue;
+
+ fSigmaPtHist->Fill(TMath::Log10(fSigmaPt));
// hits in ITS layer
//-------------------
+ Float_t fXVertexCor = 0.;
+ Float_t fYVertexCor = 0.;
- xvertexcor = tpcP->Xv() - vertex->GetX(); // coordinate corrected for vertex position
- yvertexcor = tpcP->Yv() - vertex->GetY(); // "
- sdca = (tpcP->Py()*xvertexcor - tpcP->Px()*yvertexcor)/tpcP->Pt();
+ fXVertexCor = tpcP->Xv() - vertex->GetX(); // coordinate corrected for vertex position
+ fYVertexCor = tpcP->Yv() - vertex->GetY(); // "
+ Double_t fSignedDca = (tpcP->Py()*fXVertexCor - tpcP->Px()*fYVertexCor)/tpcP->Pt();
fqPtRec[cas]->Fill(tpcP->Charge()/tpcP->Pt());
fHistRECpt->Fill(tpcP->Pt());
fEta->Fill(tpcP->Eta());
- fEtavPt->Fill(tpcP->Eta(), tpcP->Pt());
+ fEtavPt->Fill(tpcP->Eta(), TMath::Log(tpcP->Pt()));
+ fPhivPt->Fill(phiIn, TMath::Log(tpcP->Pt()));
fEtaPhi->Fill(tpcP->Eta(), phiIn);
fThetaRec->Fill(tpcP->Theta());
fPhiRec->Fill(phiIn);
fEtaPt->Fill(tpcP->Eta()/tpcP->Pt());
fQPt->Fill(tpcP->Charge()/tpcP->Pt());
- fDca->Fill(sdca);
+ fDca->Fill(fSignedDca);
+ dcaArray[iTrack]=fSignedDca;
fRecQPtPhi->Fill(tpcP->Charge()/tpcP->Pt(), phiIn);
+ Float_t fXY = 0.;
+ Float_t fZ = 0.;
- tpcP->GetImpactParameters(xy,z);
- fDiffDcaD->Fill(sdca+xy);
-
-
+ tpcP->GetImpactParameters(fXY,fZ);
+ fDiffDcaD->Fill(fSignedDca+fXY);
+ fDcaZ->Fill(fZ);
- //for positive particles
+ if(fTrackType==2) fCompareTPCparam->Fill(fZ,tpcPin->GetTgl());
+
+ if(fTrackType!=2){//for global and ITS tracks
+ for(Int_t itsLayer=0;itsLayer<6;itsLayer++){
+ if(tpcP->HasPointOnITSLayer(itsLayer)){
+ fITSlayer->Fill(itsLayer);
+ fITSlayerEta->Fill(itsLayer, tpcP->Eta());
+ fITSlayerPhi->Fill(itsLayer, tpcP->Phi());
+ }
+ }
+ }
+ //for positive particles
+
if(tpcP->Charge()>0){
fRecPtPos->Fill(tpcP->Pt());
fRecPtPosLadder[cas]->Fill(tpcP->Pt());
fRecPtPosVz->Fill(TMath::Log10(tpcP->Pt()),tpcP->Zv());
fRecPhiPos->Fill(TMath::RadToDeg()*phiIn);
-
-
+
+
fRecPhiPosLadder[cas]->Fill(TMath::RadToDeg()*phiIn);
fRecPhiPosVz->Fill(TMath::RadToDeg()*phiIn,tpcP->Zv());
- fSignedDcaPosVz->Fill(sdca,tpcP->Zv());
+ fSignedDcaPosVz->Fill(fSignedDca,tpcP->Zv());
fRecEtaPos->Fill(tpcP->Eta());
fRecEtaPosLadder[cas]->Fill(tpcP->Eta());
fRecEtaPosVz->Fill(tpcP->Eta(),tpcP->Zv());
fRecEtaPtPosVz->Fill(tpcP->Eta()/tpcP->Pt(),tpcP->Zv());
- fRecDcaPos->Fill(sdca);
- fRecDcaPosPhi->Fill(sdca, phiIn);
+ fRecDcaPos->Fill(fSignedDca);
+ fRecDcaPosPhi->Fill(fSignedDca, phiIn);
fRecPtPosPhi->Fill(TMath::Log10(tpcP->Pt()), phiIn);
fRecEtaPtPosPhi->Fill(tpcP->Eta()/tpcP->Pt(), phiIn);
fRecEtaPosPhi->Fill(tpcP->Eta(), phiIn);
- fRecDPos->Fill(xy);
- fSignDcaPos[cas]->Fill(sdca);
+ fRecDPos->Fill(fXY);
+ fSignDcaPos[cas]->Fill(fSignedDca);
- fDcaSigmaPos[cas]->Fill(sdca, TMath::Log10(sigmapt));
+ fDcaSigmaPos[cas]->Fill(fSignedDca, TMath::Log10(fSigmaPt));
- fPtSigmaPos[cas]->Fill(TMath::Log10(sigmapt));
+ fPtSigmaPos[cas]->Fill(TMath::Log10(fSigmaPt));
//pos eta
if(tpcP->Eta()>0){
fRecPtPosEtaPos->Fill(tpcP->Pt());
fRec1PtPosEtaPos->Fill(1/tpcP->Pt());
fRecPhiPosEtaPos->Fill(phiIn);
- fRecDcaPosPhiEtaPos->Fill(sdca, phiIn);
+ fRecDcaPosPhiEtaPos->Fill(fSignedDca, phiIn);
+ fRecDcaPosPtEtaPos->Fill(fSignedDca, TMath::Log10(tpcP->Pt()));
fRecPtPosPhiEtaPos->Fill(TMath::Log10(tpcP->Pt()), phiIn);
- fRecDcaPhiPtPosEtaPos->Fill(phiIn, tpcP->Pt(), sdca);
+ //fRecDcaPhiPtPosEtaPos->Fill(phiIn, tpcP->Pt(), fSignedDca);
}
//neg eta
else{
fRecPtPosEtaNeg->Fill(tpcP->Pt());
fRec1PtPosEtaNeg->Fill(1/tpcP->Pt());
fRecPhiPosEtaNeg->Fill(phiIn);
- fRecDcaPosPhiEtaNeg->Fill(sdca, phiIn);
+ fRecDcaPosPhiEtaNeg->Fill(fSignedDca, phiIn);
+ fRecDcaPosPtEtaNeg->Fill(fSignedDca, TMath::Log10(tpcP->Pt()));
fRecPtPosPhiEtaNeg->Fill(TMath::Log10(tpcP->Pt()), phiIn);
- fRecDcaPhiPtPosEtaNeg->Fill(phiIn, tpcP->Pt(), sdca);
+ //fRecDcaPhiPtPosEtaNeg->Fill(phiIn, tpcP->Pt(), fSignedDca);
}
}
fRecPhiNeg->Fill(TMath::RadToDeg()*phiIn);
fRecPhiNegLadder[cas]->Fill(TMath::RadToDeg()*phiIn);
fRecPhiNegVz->Fill(TMath::RadToDeg()*phiIn,tpcP->Zv());
- fSignedDcaNegVz->Fill(sdca,tpcP->Zv());
+ fSignedDcaNegVz->Fill(fSignedDca,tpcP->Zv());
fRecEtaPtNegVz->Fill(tpcP->Eta()/tpcP->Pt(),tpcP->Zv());
fRecEtaNeg->Fill(tpcP->Eta());
fRecEtaPtNeg->Fill(tpcP->Eta()/tpcP->Pt());
fRecEtaNegVz->Fill(tpcP->Eta(),tpcP->Zv());
- fRecDcaNeg->Fill(sdca);
- fRecDcaNegInv->Fill(-sdca);
- fRecDcaNegPhi->Fill(sdca, phiIn);
+ fRecDcaNeg->Fill(fSignedDca);
+ fRecDcaNegInv->Fill(-fSignedDca);
+ fRecDcaNegPhi->Fill(fSignedDca, phiIn);
fRecPtNegPhi->Fill(TMath::Log10(tpcP->Pt()), phiIn);
fRecEtaNegPhi->Fill(tpcP->Eta(), phiIn);
fRecEtaPtNegPhi->Fill(tpcP->Eta()/tpcP->Pt(), phiIn);
- fRecDNeg->Fill(xy);
- fSignDcaNeg[cas]->Fill(sdca);
- fSignDcaNegInv[cas]->Fill(-sdca);
+ fRecDNeg->Fill(fXY);
+ fSignDcaNeg[cas]->Fill(fSignedDca);
+ fSignDcaNegInv[cas]->Fill(-fSignedDca);
- fDcaSigmaNeg[cas]->Fill(sdca,TMath::Log10(sigmapt));
+ fDcaSigmaNeg[cas]->Fill(fSignedDca,TMath::Log10(fSigmaPt));
- fPtSigmaNeg[cas]->Fill(TMath::Log10(sigmapt));
+ fPtSigmaNeg[cas]->Fill(TMath::Log10(fSigmaPt));
//pos eta
if(tpcP->Eta()>0){
fRecPtNegEtaPos->Fill(tpcP->Pt());
fRec1PtNegEtaPos->Fill(1/tpcP->Pt());
fRecPhiNegEtaPos->Fill(phiIn);
- fRecDcaNegPhiEtaPos->Fill(sdca, phiIn);
+ fRecDcaNegPhiEtaPos->Fill(fSignedDca, phiIn);
+ fRecDcaNegPtEtaPos->Fill(fSignedDca, TMath::Log10(tpcP->Pt()));
fRecPtNegPhiEtaPos->Fill(TMath::Log10(tpcP->Pt()), phiIn);
- fRecDcaPhiPtNegEtaPos->Fill(phiIn, tpcP->Pt(), sdca);
+ //fRecDcaPhiPtNegEtaPos->Fill(phiIn, tpcP->Pt(), fSignedDca);
}
//neg eta
else{
fRecPtNegEtaNeg->Fill(tpcP->Pt());
fRec1PtNegEtaNeg->Fill(1/tpcP->Pt());
fRecPhiNegEtaNeg->Fill(phiIn);
- fRecDcaNegPhiEtaNeg->Fill(sdca, phiIn);
+ fRecDcaNegPhiEtaNeg->Fill(fSignedDca, phiIn);
+ fRecDcaNegPtEtaNeg->Fill(fSignedDca, TMath::Log10(tpcP->Pt()));
fRecPtNegPhiEtaNeg->Fill(TMath::Log10(tpcP->Pt()), phiIn);
- fRecDcaPhiPtNegEtaNeg->Fill(phiIn, tpcP->Pt(), sdca);
+ //fRecDcaPhiPtNegEtaNeg->Fill(phiIn, tpcP->Pt(), fSignedDca);
}
}
fRecPtPosEta->Fill(tpcP->Pt());
fRecPhiPosEta->Fill(TMath::RadToDeg()*phiIn);
fRecQPtPosEtaVz->Fill(tpcP->Charge()/tpcP->Pt(),tpcP->Zv());
- fRecDcaPosEta->Fill(sdca);
- fRecDPosEta->Fill(xy);
+ fRecDcaPosEta->Fill(fSignedDca);
+ fRecDPosEta->Fill(fXY);
}
//all particles with negative eta (and eta==0)
else{
fRecPtNegEta->Fill(tpcP->Pt());
fRecPhiNegEta->Fill(TMath::RadToDeg()*phiIn);
fRecQPtNegEtaVz->Fill(tpcP->Charge()/tpcP->Pt(),tpcP->Zv());
- fRecDcaNegEta->Fill(sdca);
- fRecDNegEta->Fill(xy);
+ fRecDcaNegEta->Fill(fSignedDca);
+ fRecDNegEta->Fill(fXY);
}
fRecEtaTpcSector[Int_t(phiIn*
TMath::RadToDeg()/20)]->Fill(tpcP->Eta());
fSignedDcaTpcSector[Int_t(phiIn*
- TMath::RadToDeg()/20)]->Fill(sdca);
+ TMath::RadToDeg()/20)]->Fill(fSignedDca);
fRecQPtTpcSector[Int_t(phiIn*
TMath::RadToDeg()/20)]->Fill(tpcP->Charge()/tpcP->Pt());
fRecEtaPtTpcSector[Int_t(phiIn*
// if(LeadingTrack==iTrack2) continue;
// AliVParticle *track2 = event->GetTrack(iTrack2);
-// AliESDtrack* esdtrack2 = dynamic_cast<AliESDtrack*>(track2);
+// AliESDtrack* esdtrack2 = static_cast<AliESDtrack*>(track2);
// if (!track2) {
// Printf("ERROR: Could not receive track %d", iTrack);
// continue;
// }//second track loop
+
+ // if(fTrackType==2) delete tpcP; // delete in case of TPCOnlyTrack
+
}//first track loop
+ fNumberAfterCut->Fill(fNTracksAccepted);
+ //second track loop
+ for (Int_t iT = 0; iT < event->GetNumberOfTracks(); iT++) {
+ if(acceptedArray[iT]){
+ if(ptArray[iT]>0.2 && ptArray[iT]<1. ){
+ fEtaBinPt[0][Bool_t(chargeArray[iT]>0)]->Fill(etaArray[iT]);
+ fDcaBinPt[0][Bool_t(chargeArray[iT]>0)]->Fill(dcaArray[iT]);
+ fPhiBinPt[0][Bool_t(chargeArray[iT]>0)]->Fill(phiArray[iT]);
+ fEtaPhiBinPt[0][Bool_t(chargeArray[iT]>0)]->Fill(etaArray[iT], phiArray[iT]);
+ }
+ else if(ptArray[iT]>1. && ptArray[iT]<5.){
+ fEtaBinPt[1][Bool_t(chargeArray[iT]>0)]->Fill(etaArray[iT]);
+ fDcaBinPt[1][Bool_t(chargeArray[iT]>0)]->Fill(dcaArray[iT]);
+ fPhiBinPt[1][Bool_t(chargeArray[iT]>0)]->Fill(phiArray[iT]);
+ fEtaPhiBinPt[1][Bool_t(chargeArray[iT]>0)]->Fill(etaArray[iT], phiArray[iT]);
+ }
+ else if (ptArray[iT]>5.){
+ fEtaBinPt[2][Bool_t(chargeArray[iT]>0)]->Fill(etaArray[iT]);
+ fDcaBinPt[2][Bool_t(chargeArray[iT]>0)]->Fill(dcaArray[iT]);
+ fPhiBinPt[2][Bool_t(chargeArray[iT]>0)]->Fill(phiArray[iT]);
+ fEtaPhiBinPt[2][Bool_t(chargeArray[iT]>0)]->Fill(etaArray[iT], phiArray[iT]);
+ }
+
+ if(fNTracksAccepted>=fLow&&fNTracksAccepted<=fHigh){
+ fEtaWidth->Fill(etaArray[iT]);
+ fPhiWidth->Fill(phiArray[iT]);
+ fDcaWidth->Fill(dcaArray[iT]);
+ fPtWidth->Fill(ptArray[iT]);
+ }
+ }
+ }
+
+ //prevent mem leak for TPConly track
+ if(fTrackType==2&&tpcP){
+ delete tpcP;
+ tpcP = 0;
+ }
+
+ if(phiArray){
+ delete[] phiArray;
+ phiArray=0;
+ }
+
+ if(etaArray){
+ delete[] etaArray;
+ etaArray=0;
+ }
+
+ if(dcaArray){
+ delete[] dcaArray;
+ dcaArray=0;
+ }
+
+ if(ptArray){
+ delete[] ptArray;
+ ptArray=0;
+ }
+
+ if(chargeArray){
+ delete[] chargeArray;
+ chargeArray=0;
+ }
+
+ if(acceptedArray){
+ delete[] acceptedArray;
+ acceptedArray=0;
+ }
+
// Post output data.
// PostData(1, fHistPt);
PostData(1, fHists);