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"
23 #include "AliExternalTrackParam.h"
24 #include "AliTrackReference.h"
25 #include "AliHeader.h"
26 #include "AliGenEventHeader.h"
27 #include "AliGenDPMjetEventHeader.h"
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)
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());
224 Bool_t oldStatus = TH1::AddDirectoryStatus();
225 TH1::AddDirectory(kFALSE);
235 fEta =
new TH1F(
"fEta",
243 200, 0., 2*TMath::Pi());
256 200, 0, 2*TMath::Pi(),
260 100, -1., 1.,100,-5, 5);
267 8, -1.5, 6.5, 200, -2.,2.);
270 8, -1.5, 6.5, 200, 0,2*TMath::Pi());
273 200, -2., 2., 128, 0., 2. * TMath::Pi());
276 180, 0., TMath::Pi());
279 180, 0., 2*TMath::Pi());
281 "number of tracks per event",
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",
296 "Number of SPD vertices",
299 "Number of track vertices",
302 fEtaPt =
new TH1F(
"fEtaPt",
306 fQPt =
new TH1F(
"fQPt",
310 fDca =
new TH1F(
"fDca",
314 fDcaZ =
new TH1F(
"fDcaZ",
"fDcaZ ",200, -3, 3);
317 fqRec =
new TH1F(
"fqRec",
318 " charge all reconstructed particle",
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),
352 fSignDcaPos[ITSlayer_case]->GetXaxis()->SetTitle(
"dca");
353 fSignDcaPos[ITSlayer_case]->GetYaxis()->SetTitle(
"");
356 fSignDcaNeg[ITSlayer_case] =
new TH1F(Form(
"fSignDcaNeg%d", ITSlayer_case),
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 ",
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} ",
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} ",
408 fDcaSigmaNeg[ITSlayer_case]->GetXaxis()->SetTitle(
"signed DCA");
409 fDcaSigmaNeg[ITSlayer_case]->GetYaxis()->SetTitle(
"log_{10}(#sigma_{pT})");
421 fRecPtPos->GetXaxis()->SetTitle(
"p_{T} (GeV/c)");
425 fRecPtNeg->GetXaxis()->SetTitle(
"p_{T} (GeV/c)");
431 fRecPhiPos->GetXaxis()->SetTitle(
"#phi (deg)");
436 fRecPhiNeg->GetXaxis()->SetTitle(
"#phi (deg)");
476 fRecDPos->GetXaxis()->SetTitle(
"d (cm)");
480 fRecDNeg->GetXaxis()->SetTitle(
"d (cm)");
547 100, -2.5, 2., 180, 0, TMath::Pi()*2);
552 100,-2.5 , 2., 180, 0, TMath::Pi()*2);
558 100, -1.5, 1.5, 180, 0, TMath::Pi()*2);
563 100, -1.5, 1.5, 180, 0, TMath::Pi()*2);
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.)");
575 100, -5, 5., 180, 0, TMath::Pi()*2);
580 100,-5 , 5., 180, 0, TMath::Pi()*2);
601 100, -2.5, 2., 180, 0, TMath::Pi()*2);
606 100,-2.5 , 2., 180, 0, TMath::Pi()*2);
624 100, -2.5, 2., 180, 0, TMath::Pi()*2);
629 100,-2.5 , 2., 180, 0, TMath::Pi()*2);
661 for(
Int_t sector=0; sector<18;sector++){
665 Form(
"p_{T} distribution: TPC sector %d",
666 sector),100, 0., pt);
670 Form(
"#eta distribution: TPC sector %d",
671 sector),200, -2., 2.);
676 Form(
"dca distribution: TPC sector %d",
681 Form(
"Q/ p_{T} distribution: TPC sector %d",
682 sector),100, -1., 1.);
686 Form(
"#eta/ p_{T} distribution: TPC sector %d",
687 sector),100, -1., 1.);
692 for(
Int_t i=0;i<7;i++){
694 " p_{T} distribution",
698 " p_{T} distribution ",
704 "#phi distribution: all pos eta",
709 "#phi distribution: all neg eta",
729 "p_{T} distribution vs Vz()",
730 100, -1., 2., 200,-vzmax,vzmax);
731 fRecPtPosVz->GetXaxis()->SetTitle(
"log_{10}(p_{T})");
734 "p_{T} distribution vs Vz()",
735 100, -1., 2.,200,-vzmax,vzmax);
736 fRecPtNegVz->GetXaxis()->SetTitle(
"Log_{10}(p_{T})");
740 "#eta distribution vs Vz()",
741 100, -2., 2., 200,-vzmax,vzmax);
744 "#eta distribution vs Vz()",
745 100, -2., 2.,200,-vzmax,vzmax);
749 "#eta distribution vs Vz()",
750 361, 0., 360., 200,-vzmax,vzmax);
754 361, 0., 360.,200,-vzmax,vzmax);
758 "#eta distribution vs Vz()",
767 " Q/p_{T} distribution vs Vz()",
768 100, -1., 1., 200,-vzmax,vzmax);
771 " Q/p_{T} distribution vs Vz()",
772 100, -1., 1.,200,-vzmax,vzmax);
777 " #eta/p_{T} distribution vs Vz()",
778 100, -1., 1., 200,-vzmax,vzmax);
781 " #eta/p_{T} distribution vs Vz()",
782 100, -1., 1.,200,-vzmax,vzmax);
787 " #Delta #phi",200,-360,360);
792 " #Delta #phi",361,-360,360, 361,0, 360);
802 "p_{T} distribution",100,0,pt);
806 "p_{T} distribution",100,0,pt);
810 "p_{T} distribution",100,0,pt);
814 "p_{T} distribution",100,0,pt);
820 "1/p_{T} distribution",100,0,0.5);
824 "1/p_{T} distribution",100,0,0.5);
828 "1/p_{T} distribution",100,0,0.5);
832 "1/p_{T} distribution",100,0,0.5);
838 "#phi",180,0,2*TMath::Pi());
842 "#phi",180,0,2*TMath::Pi());
846 "#phi",180,0,2*TMath::Pi());
850 "#phi",180,0,2*TMath::Pi());
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()),
909 200, -2., 2., 200, 0.,2*TMath::Pi());
977 for(
Int_t i=0;i<4;i++){
982 for(
Int_t i=0;i<18;i++){
990 for(
Int_t i=0;i<7;i++){
1013 for(
Int_t i=0;i<7;i++){
1073 for(
Int_t i=0;i<3;i++){
1074 for(
Int_t j=0;j<2;j++){
1091 TH1::AddDirectory(oldStatus);
1103 AliVEvent *
event = InputEvent();
1105 Printf(
"ERROR: Could not retrieve 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;
1130 Int_t nPileSPDVertices=1+esd->GetNumberOfPileupVerticesSPD();
1131 Int_t nPileTrkVertices=esd->GetNumberOfPileupVerticesTracks();
1141 const AliVVertex* vertex =
event->GetPrimaryVertex();
1143 vx = vertex->GetX();
1144 vy = vertex->GetY();
1145 vz = vertex->GetZ();
1146 if(vertex->GetNContributors()>0){
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());
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();
1197 for (
Int_t i = 0; i <
event->GetNumberOfTracks(); i++) {
1203 acceptedArray[i]= kFALSE;
1209 for (
Int_t iTrack = 0; iTrack <
event->GetNumberOfTracks(); iTrack++) {
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);
1228 const AliExternalTrackParam *tpcPin = 0x0;
1234 if (!tpcP)
continue;
1235 if (!
fCuts->AcceptTrack(tpcP))
continue;
1236 phiIn = tpcP->Phi();
1241 phiIn = tpcP->Phi();
1242 if (!tpcP)
continue;
1243 if (!
fCuts->AcceptTrack(tpcP))
continue;
1245 if(!(tpcP->GetStatus()&AliESDtrack::kITSpureSA))
continue;
1248 if(tpcP->GetStatus()&AliESDtrack::kITSpureSA)
continue;
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;
1261 if(tpcP->GetConstrainedChi2TPC()<0)
continue;
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;
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))
1336 fXVertexCor = tpcP->Xv() - vertex->GetX();
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());
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);
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);
1373 for(
Int_t itsLayer=0;itsLayer<6;itsLayer++){
1374 if(tpcP->HasPointOnITSLayer(itsLayer)){
1384 if(tpcP->Charge()>0){
1387 fRecPtPosVz->Fill(TMath::Log10(tpcP->Pt()),tpcP->Zv());
1392 fRecPhiPosVz->Fill(TMath::RadToDeg()*phiIn,tpcP->Zv());
1410 fDcaSigmaPos[cas]->Fill(fSignedDca, TMath::Log10(fSigmaPt));
1439 fRecPtNegVz->Fill(TMath::Log10(tpcP->Pt()),tpcP->Zv());
1443 fRecPhiNegVz->Fill(TMath::RadToDeg()*phiIn,tpcP->Zv());
1463 fDcaSigmaNeg[cas]->Fill(fSignedDca,TMath::Log10(fSigmaPt));
1514 TMath::RadToDeg()/20)]->Fill(tpcP->Pt());
1516 TMath::RadToDeg()/20)]->Fill(tpcP->Eta());
1518 TMath::RadToDeg()/20)]->Fill(fSignedDca);
1520 TMath::RadToDeg()/20)]->Fill(tpcP->Charge()/tpcP->Pt());
1522 TMath::RadToDeg()/20)]->Fill(tpcP->Eta()/tpcP->Pt());
1557 for (
Int_t iT = 0; iT <
event->GetNumberOfTracks(); iT++) {
1558 if(acceptedArray[iT]){
1559 if(ptArray[iT]>0.2 && ptArray[iT]<1. ){
1565 else if(ptArray[iT]>1. && ptArray[iT]<5.){
1571 else if (ptArray[iT]>5.){
1578 if(fNTracksAccepted>=
fLow&&fNTracksAccepted<=
fHigh){
1615 delete[] chargeArray;
1620 delete[] acceptedArray;
TH1F * fRecPtTpcSector[18]
TH2F * fEtaPhiBinPt[3][2]
TH1F * fRecPhiPosLadder[7]
TH2F * fRecDcaPosPtEtaNeg
TH2F * fRecDcaNegPhiEtaNeg
TH1F * fRecQPtTpcSector[18]
TH2F * fRecDcaPosPhiEtaPos
TH2F * fRecPtPosPhiEtaNeg
TH2F * fRecPtNegPhiEtaNeg
TH2F * fRecPtPosPhiEtaPos
TH1F * fRecEtaPosLadder[7]
virtual void UserExec(Option_t *option)
TH1F * fSignedDcaTpcSector[18]
TH2F * fRecDcaPosPtEtaPos
TH1F * fRecEtaNegLadder[7]
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
TH2F * fRecPtNegPhiEtaPos
TH2F * fRecDcaPosPhiEtaNeg
TH1F * fRecPhiNegLadder[7]
TH1F * fRecPtNegLadder[7]
TH1F * fRecEtaTpcSector[18]
TH2F * fRecDcaNegPtEtaPos
TH1F * fRecPtPosLadder[7]
ClassImp(AliAnalysisTaskQASym) AliAnalysisTaskQASym
virtual void UserCreateOutputObjects()
virtual void Terminate(Option_t *)
TH2F * fRecDcaNegPtEtaNeg
TH1F * fRecEtaPtTpcSector[18]
TH2F * fRecDcaNegPhiEtaPos