]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/SPECTRA/Kinks/AliAnalysisPionKinksESD.cxx
Bug fix , problem was with pile-up tagging
[u/mrichter/AliRoot.git] / PWGLF / SPECTRA / Kinks / AliAnalysisPionKinksESD.cxx
CommitLineData
414d35d7 1#include "TCanvas.h"
2#include "TVector3.h"
3#include "TLorentzVector.h"
4#include "TMath.h"
5#include "TF1.h"
6#include "TH1.h"
7#include "TH2.h"
8#include "TH3.h"
9#include "TList.h"
10#include "TParticle.h"
11
12#include "AliVParticle.h"
13#include "AliESDEvent.h"
14#include "AliESDkink.h"
15#include "AliESDpid.h"
16#include "AliPID.h"
17#include "AliStack.h"
18
19#include "AliAnalysisTask.h"
20#include "AliInputEventHandler.h"
21#include "AliESDInputHandler.h"
22#include "AliPIDResponse.h"
23#include "AliAnalysisManager.h"
24#include "AliESDtrackCuts.h"
25
26#include "AliAnalysisPionKinksESD.h"
27
28ClassImp(AliAnalysisPionKinksESD)
29
30//________________________________________________________________________
31AliAnalysisPionKinksESD::AliAnalysisPionKinksESD(const char *name)
32:AliAnalysisTaskSE(name),
33fMaxKinkAngKmu(0),
34fMaxKinkAngPimu(0), //functions
35
36hMult(0),
37hAcceptedMult(0),
38hMultPS(0),
39hvtx(0),
40hvtxy(0),
41hvtyz(0),
42hvtxz(0),
43hMultPSV(0),
44hPtAll(0),
45hEtaAll(0),
46hTrackPos(0),
47hTrackPosxy(0),
48hTrackPosyz(0),
49hTrackPosxz(0),
50//hTPCchi2clusters(0),
51//hdcaToVertexXY(0),
52//hdcaToVertexZ(0),
53hMultPrim(0),
54hPtPrim(0),
55hEtaPrim(0),
56hPrimTrackPos(0),
57hPrimTrackPosxy(0),
58hPrimTrackPosyz(0),
59hPrimTrackPosxz(0),
60hPt(0),
61hEta(0),
62//hRapidity(0),
63hPtKink(0),
64hEtaKink(0),
65hRapidityKink(0),
66hPmP(0),
67hKinkPosRTPCclusters1(0),
68hKinkPosRTPCclusters2(0),
69hQt(0),
70hKinkAngle(0),
71hDCAkink(0),
72hPmKinkAng(0),
73hKinkPosXY(0),
74hKinkPosZY(0),
75hKinkPosZR(0),
76hKinkPosR(0),
77hKinkPosZ(0),
78hPmd(0),
79hMinvPimu(0),
80hdEdx(0),
81hPtPosRSelected(0),
82hPtZSelected(0),
83hPtAngSelected(0),
84hPtPmSelected(0),
85hPtGoodKink(0),
86hEtaGoodKink(0),
87hRapidityGoodKink(0),
88hQtGoodKink(0),
89hPmGoodKinkAng(0),
90hPmdGoodKink(0),
91hdEdxGoodKink(0),
92hPtQtSelected(0),
93hPtMaxAngSelected(0),
94hPtRTPCclustersSelected(0),
95hRTPCclustersRTPCclustersSelected(0),
96hPtSelected(0),
97hEtaSelected(0),
98hRapiditySelected(0),
99hQtSelected(0),
100hKinkAngleSelected(0),
101hDCAkinkSelected(0),
102hPmKinkAngSelected(0),
103hKinkPosXYSelected(0),
104hKinkPosZRSelected(0),
105hKinkPosRSelected(0),
106hPmdSelected(0),
107hMinvPimuSelected(0),
108hdEdxSelected(0),
109hPtPiSelected(0),
110hEtaPiSelected(0),
111hRapidityPiSelected(0),
112hQtPiSelected(0),
113hKinkAnglePiSelected(0),
114hDCAkinkPiSelected(0),
115hPmKinkAngPiSelected(0),
116hKinkPosRTPCclusters1PiSelected(0),
117hKinkPosRTPCclusters2PiSelected(0),
118hKinkPosXYPiSelected(0),
119hKinkPosZRPiSelected(0),
120hKinkPosRPiSelected(0),
121hKinkPosZPiSelected(0),
122hPmPPiSelected(0),
123hPmdPiSelected(0),
124hMinvPimuPiSelected(0),
125hdEdxPiSelected(0),
126hPtPiSelectedPlus(0),
127hEtaPiSelectedPlus(0),
128hRapidityPiSelectedPlus(0),
129hQtPiSelectedPlus(0),
130hKinkAnglePiSelectedPlus(0),
131hDCAkinkPiSelectedPlus(0),
132hPmKinkAngPiSelectedPlus(0),
133hKinkPosXYPiSelectedPlus(0),
134hKinkPosZRPiSelectedPlus(0),
135hPmdPiSelectedPlus(0),
136hMinvPimuPiSelectedPlus(0),
137hdEdxPiSelectedPlus(0),
138hPtPiSelectedMinus(0),
139hEtaPiSelectedMinus(0),
140hRapidityPiSelectedMinus(0),
141hQtPiSelectedMinus(0),
142hKinkAnglePiSelectedMinus(0),
143hDCAkinkPiSelectedMinus(0),
144hPmKinkAngPiSelectedMinus(0),
145hKinkPosXYPiSelectedMinus(0),
146hKinkPosZRPiSelectedMinus(0),
147hPmdPiSelectedMinus(0),
148hMinvPimuPiSelectedMinus(0),
149hdEdxPiSelectedMinus(0), // reconstruction histograms
150fListOfHistos(0),
151fLowMulcut(-1), fUpMulcut(-1),
152cLowPt(0), cRapidityLim(0),
153cLowR(0), cUpR(0),
154cLowZ(0), cUpZ(0),
155cLowKinkAngle(0),
156cLowQt(0), cUpQt(0),
157cLowInvMass(0), cUpInvMass(0),
158cSigmaCut(0),
159cPdgKaon(321), cPdgPion(211), cPdgMuon(13), cPdgElectron(11),
160cKaonMass(0), cPionMass(0), cMuonMass(0), cElectronMass(0),
161nBinsMult(0), hLowMult(0), hUpMult(0),
162nBinsPt(0), hLowPt(0), hUpPt(0),
163nBinsEta(0), hLowEta(0), hUpEta(0),
164nBinsQt(0), hLowQt(0), hUpQt(0),
165nBinsR(0), hLowR(0), hUpR(0),
166nBinsZ(0), hLowZ(0), hUpZ(0),
167nBinsXY(0), hLowXY(0), hUpXY(0),
168nBinsAngle(0), hLowAngle(0), hUpAngle(0),
169nBinsZV(0), hLowZV(0), hUpZV(0),
170nBinsXYV(0), hLowXYV(0), hUpXYV(0),
171nBinsInvMass(0), hLowInvMass(0), hUpInvMass(0),
172nBinsdEdx(0), hLowdEdx(0), hUpdEdx(0), fPIDResponse(0),
173fMaxDCAtoVtxCut(0), fTrackCuts(0)
174
175{
176//Multiplicity bins
177fMaxDCAtoVtxCut=new AliESDtrackCuts("fMaxDCAtoVtxCut","fMaxDCAtoVtxCut");
178fMaxDCAtoVtxCut->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
179fMaxDCAtoVtxCut->SetMaxChi2TPCConstrainedGlobal(36);
180
181fTrackCuts = new AliESDtrackCuts("Multiplicity bins","Multiplicity bins");
182fTrackCuts->SetMinNClustersTPC(70);
183fTrackCuts->SetMaxChi2PerClusterTPC(4);
184fTrackCuts->SetAcceptKinkDaughters(kFALSE);
185fTrackCuts->SetRequireTPCRefit(kTRUE);
186fTrackCuts->SetRequireITSRefit(kTRUE);
187fTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
188fTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
189fTrackCuts->SetMaxDCAToVertexZ(2);
190fTrackCuts->SetDCAToVertex2D(kFALSE);
191fTrackCuts->SetRequireSigmaToVertex(kFALSE);
192fTrackCuts->SetEtaRange(-0.8,+0.8);
193fTrackCuts->SetPtRange(0.15, 1e10);
194
195//DefineOutput(0, TList::Class());
196DefineOutput(1, TList::Class());
197}
198
199//________________________________________________________________________
200void AliAnalysisPionKinksESD::UserCreateOutputObjects() {
201fListOfHistos=new TList();
202
203//maximum kink angle for kaons to muons
204fMaxKinkAngKmu=new TF1("fMaxKinkAngKmu","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",1.1,10.0);
205fMaxKinkAngKmu->SetParameter(0,cKaonMass);
206fMaxKinkAngKmu->SetParameter(1,0.9127037);
207fMaxKinkAngKmu->SetParameter(2,TMath::Pi());
208
209//maximum kink angle for pions to muons
210fMaxKinkAngPimu=new TF1("fMaxKinkAngPimu","((atan([0]*[1]*(1.0/(sqrt((x^2)*(1.0-([1]^2))-([0]^2)*([1]^2))))))*180.)/[2]",0.1,10.0);
211fMaxKinkAngPimu->SetParameter(0,cPionMass);
212fMaxKinkAngPimu->SetParameter(1,0.2731374);
213fMaxKinkAngPimu->SetParameter(2,TMath::Pi());
214
215//Create histograms
216TH1::SetDefaultSumw2();
217TH2::SetDefaultSumw2();
218
219
220//Reconstruction histograms
221hMult = new TH1F("hMult", "Multiplicity (unbiased); Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
222hAcceptedMult = new TH1F("hAcceptedMult", "Multiplicity (biased); Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
223hMultPS = new TH1F("hMultPS", "Multiplicity after physics selection; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
224hvtx = new TH3F("hvtx", "Reconstructed primary vertex position; x axis; y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
225hvtxy = new TH2F("hvtxy", "Reconstructed primary vertex position in x-y plane; x axis; y axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV);
226hvtyz = new TH2F("hvtyz", "Reconstructed primary vertex position in y-z plane; y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
227hvtxz = new TH2F("hvtxz", "Reconstructed primary vertex position in x-z plane; x axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
228hMultPSV = new TH1F("hMultPSV", "Multiplicity after physics selection & vertex cut; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
229hPtAll = new TH1F("hPtAll", "Transverse momentum of all tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
230hEtaAll = new TH1F("hEtaAll", "Pseudorapidity of all tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
231hTrackPos = new TH3F("hTrackPos", "Generetion position of all reconstructed tracks", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
232hTrackPosxy = new TH2F("hTrackPosxy", "Generetion position of all reconstructed tracks in x-y plane; x axis; y axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV);
233hTrackPosyz = new TH2F("hTrackPosyz", "Generetion position of all reconstructed tracks in y-z plane; y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
234hTrackPosxz = new TH2F("hTrackPosxz", "Generetion position of all reconstructed tracks in x-z plane; x axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
235//hTPCchi2clusters = new TH1F("hTPCchi2clusters", "#chi^{2}/Number of TPC clusters; #chi^{2}; TPC clusters)", 100, 0.0, 2.0);//
236//hdcaToVertexXY = new TH1F("hdcaToVertexXY", "Track to vertex impact parameter in x-y plane; DCA_{z} (cm); dN/d(DCA_{z})", 100, 0.0, 2.0);//
237//hdcaToVertexZ = new TH1F("hdcaToVertexZ", "Track to vertex impact parameter in z axis; DCA_{z} (cm); dN/d(DCA_{z})", 100, 0.0, 2.0);//
238hMultPrim = new TH1F("hMultPrim", "ESD primary - supposed tracks multiplicity; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult);
239hPtPrim = new TH1F("hPtPrim", "Transverse momentum of primary - supposed ESD tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
240hEtaPrim = new TH1F("hEtaPrim", "Pseudorapidity of primary - supposed ESD tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
241hPrimTrackPos = new TH3F("hPrimTrackPos", "Generetion position of selected tracks (DCA and quality cuts)", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
242hPrimTrackPosxy = new TH2F("hPrimTrackPosxy", "Generetion position of selected tracks in x-y plane (DCA and quality cuts); x axis; y axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV);
243hPrimTrackPosyz = new TH2F("hPrimTrackPosyz", "Generetion position of selected tracks in y-z plane (DCA and quality cuts); y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
244hPrimTrackPosxz = new TH2F("hPrimTrackPosxz", "Generetion position of selected tracks in x-z plane (DCA and quality cuts); x axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV);
245hPt = new TH1F("hPt", "Transverse momentum of selected ESD tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
246hEta = new TH1F("hEta", "Pseudorapidity of selected ESD tracks; n; Number of tracks dN/dn", nBinsEta, hLowEta, hUpEta);
247//hRapidity = new TH1F("hRapidity", "Rapidity of selected ESD tracks; n; Number of tracks dN/dn", nBinsEta, hLowEta, hUpEta);
248hPtKink = new TH1F("hPtKink", "Mother's transverse momentum for all ESD kinks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
249hEtaKink = new TH1F("hEtaKink", "Mother's pseudorapidity for all ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
250hRapidityKink = new TH1F("hRapidityKink", "Mother's rapidity for all ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
251hPmP = new TH2F("hPmP", "Mother's momentum as calculated by kink and by track; P_{kink}; P_{track}", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
252hKinkPosRTPCclusters1 = new TH1F("hKinkPosRTPCclusters1", " ;kinkposR; tpc clusters",100,0,1);
253hKinkPosRTPCclusters2 = new TH2F("hKinkPosRTPCclusters2", " ;kinkposR; tpc clusters",nBinsR, hLowR, hUpR,100,0,200 );
254hQt = new TH1F("hQt", "Daughter's transverse momentum in mother's frame for all ESD kinks; q_{T} (GeV/c); dN/dq_{T}", nBinsQt, hLowQt, hUpQt);
255hKinkAngle = new TH1F("hKinkAngle", "Kink angle for all ESD kinks; #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
256hDCAkink = new TH1F("hDCAkink", "DCA between the two kink tracks; DCA(cm); Number of kinks", 100, 0.0, 2.0);
257hPmKinkAng = new TH2F("hPmKinkAng", "k, p_(GeV/c); #theta (#circ); d^{2}N/dpd#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
258hKinkPosXY = new TH2F("hKinkPosXY", "X-Y Position of all kinks; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
259hKinkPosZY = new TH2F("hKinkPosZY", "z vs y position of kinks (DCA, quality, p_{T} & y cuts); z (cm); y (cm)", nBinsZ, hLowZ, hUpZ, nBinsXY, hLowXY, hUpXY);
260hKinkPosZR = new TH2F("hKinkPosZR", "Z vs radius of all kinks position; Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
261hKinkPosR = new TH1F("hKinkPosR", "Position radius of all ESD kinks; R (cm); dN/dR", nBinsR, hLowR, hUpR);
262hKinkPosZ = new TH1F("hKinkPosZ", "z position of kinks (DCA, quality, p_{T} & y cuts); z (cm); dN/dz", nBinsZ, -1, 1);
263hPmd = new TH2F("hPmd", "ESD mother vs daughter momentum magnitude; Mother's P (GeV/c); Daughter's P (GeV/c)", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
264hMinvPimu = new TH1F("hMinvPimu", "Invariant mass of ESD pions decaying to muons; m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
265hdEdx = new TH2F("hdEdx", "dE/dx vs mother's momentum; p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
266hPtPosRSelected = new TH1F("hPtPosRSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y & R cuts); R (cm); dN/dR", nBinsPt, hLowPt, hUpPt);
267hPtZSelected = new TH1F("hPtZSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R & z cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
268hPtAngSelected = new TH1F("hPtAngSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z & #theta cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
269hPtPmSelected = new TH1F("hPtPmSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z, #theta & p_{track}/p{kink} cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
270hPtGoodKink = new TH1F("hPtGoodKink", "Mother's transverse momentum for real ESD kinks (realistic PID); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
271hEtaGoodKink = new TH1F("hEtaGoodKink", "Mother's pseudorapidity for real ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
272hRapidityGoodKink = new TH1F("hRapidityGoodKink", "Mother's rapidity for real ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta);
273hQtGoodKink = new TH1F("hQtGoodKink", "Daughter's transverse momentum in mother's frame for real ESD kinks (realistic PID); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
274hPmGoodKinkAng = new TH2F("hPmGoodKinkAng", "Mother's momentum magnitude vs kink angle for real ESD kinks (realistic PID); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
275hPmdGoodKink = new TH2F("hPmdGoodKink", "Mother vs daughter momentum magnitude for real ESD kinks (realistic PID); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
276hdEdxGoodKink = new TH2F("hdEdxGoodKink", "dE/dx vs mother's momentum; p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
277hPtQtSelected = new TH1F("hPtQtSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink} & q^{T} cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
278hPtMaxAngSelected = new TH1F("hPtMaxAngSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink}, q^{T} & #theta_{max} cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
279hPtRTPCclustersSelected = new TH1F("hPtRTPCclustersSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink}, q^{T}, #theta_{max} & R/TPC clusters cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
280hRTPCclustersRTPCclustersSelected = new TH2F("hRTPCclustersRTPCclustersSelected", "Number of TPC clusters vs radius for selected kinks (DCA, quality, p_{T}, y, R, z, #theta, p_{track}/p{kink}, q^{T}, #theta_{max} & R/TPC clusters cuts); R (cm); number of TPC clusters", nBinsR, hLowR, hUpR, 100, 0, 200);
281hPtSelected = new TH1F("hPtSelected", "Mother's transverse momentum for selected kinks (all cuts except dE/dx); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
282hEtaSelected = new TH1F("hEtaSelected", "Mother's pseudorapidity for selected kinks (all cuts except dE/dx); n; dN/dn", nBinsEta, hLowEta, hUpEta);
283hRapiditySelected = new TH1F("hRapiditySelected", "Mother's rapidity for selected kinks (all cuts except dE/dx); n; dN/dn", nBinsEta, hLowEta, hUpEta);
284hQtSelected = new TH1F("hQtSelected", "Daughter's transverse momentum in mother's frame for selected kinks (all cuts except dE/dx); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
285hKinkAngleSelected = new TH1F("hKinkAngleSelected", "Kink angle of selected kinks (all cuts except dE/dx); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
286hDCAkinkSelected = new TH1F("hDCAkinkSelected", "DCA; DCA(cm); Number of kinks", 100, 0.0, 2.0);
287hPmKinkAngSelected = new TH2F("hPmKinkAngSelected", "Mother's momentum magnitude vs kink angle for selected kinks (all cuts except dE/dx); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
288hKinkPosXYSelected = new TH2F("hKinkPosXYSelected", "X-Y Position ; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
289hKinkPosZRSelected = new TH2F("hKinkPosZRSelected", "Z vs radius of selected kinks (all cuts except dE/dx); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
290hKinkPosRSelected = new TH1F("hKinkPosRSelected", "Position radius of selected kinks (all cuts except dE/dx); R (cm); dN/dR", nBinsR, hLowR, hUpR);
291hPmdSelected = new TH2F("hPmdSelected", "Mother vs daughter momentum magnitude for selected kinks (all cuts except dE/dx); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
292hMinvPimuSelected = new TH1F("hMinvPimuSelected", "Invariant mass for #pi^{#pm} decaying to #mu^{#pm} for selected kinks (all cuts except dE/dx); m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
293hdEdxSelected = new TH2F("hdEdxSelected", "dE/dx vs mother's momentum for selected kinks (all cuts except dE/dx); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
294hPtPiSelected = new TH1F("hPtPiSelected", "Mother's transverse momentum for selected kinks (all cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
295hEtaPiSelected = new TH1F("hEtaPiSelected", "Mother's pseudorapidity for selected kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
296hRapidityPiSelected = new TH1F("hRapidityPiSelected", "Mother's rapidity for selected kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
297hQtPiSelected = new TH1F("hQtPiSelected", "Daughter's transverse momentum in mother's frame for selected kinks (all cuts); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
298hKinkAnglePiSelected = new TH1F("hKinkAnglePiSelected", "Kink angle of selected kinks (all cuts); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
299hDCAkinkPiSelected = new TH1F("hDCAkinkPiSelected", "DCA; DCA(cm); Number of kinks", 100, 0.0, 2.0);
300hPmKinkAngPiSelected = new TH2F("hPmKinkAngPiSelected", "Mother's momentum magnitude vs kink angle for selected kinks (all cuts); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
301hKinkPosRTPCclusters1PiSelected = new TH1F("hKinkPosRTPCclusters1PiSelected", " ;kinkposR; tpc clusters",100,0,1);
302hKinkPosRTPCclusters2PiSelected = new TH2F("hKinkPosRTPCclusters2PiSelected", " ;kinkposR; tpc clusters",nBinsR, hLowR, hUpR,100,0,200 );
303hKinkPosXYPiSelected = new TH2F("hKinkPosXYPiSelected", "X-Y Position ; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
304hKinkPosZRPiSelected = new TH2F("hKinkPosZRPiSelected", "Z vs radius of selected kinks (all cuts); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR);
305hKinkPosRPiSelected = new TH1F("hKinkPosRPiSelected", "Position radius of selected kinks (all cuts); R (cm); dN/dR", nBinsR, hLowR, hUpR);
306hKinkPosZPiSelected = new TH1F("hKinkPosZPiSelected", "z position of selected kinks (all cuts); R (cm); dN/dR", nBinsZ, hLowZ, hUpZ);
307hPmPPiSelected = new TH2F("hPmPPiSelected", "Mother's momentum as calculated by kink and by track of selected kinks (all cuts); R (cm); dN/dR", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
308hPmdPiSelected = new TH2F("hPmdPiSelected", "Mother vs daughter momentum magnitude for selected kinks (all cuts); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
309hMinvPimuPiSelected = new TH1F("hMinvPimuPiSelected", "Invariant mass for #pi^{#pm} decaying to #mu^{#pm} for selected kinks (all cuts); m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
310hdEdxPiSelected = new TH2F("hdEdxPiSelected", "dE/dx vs mother's momentum for selected kinks (all cuts); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
311hPtPiSelectedPlus = new TH1F("hPtPiSelectedPlus", "Mother's transverse momentum for selected positive kinks (all cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
312hEtaPiSelectedPlus = new TH1F("hEtaPiSelectedPlus", "Mother's pseudorapidity for selected positive kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
313hRapidityPiSelectedPlus = new TH1F("hRapidityPiSelectedPlus", "Mother's rapidity for selected positive kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
314hQtPiSelectedPlus = new TH1F("hQtKselectedPlus", "Daughter's transverse momentum in mother's frame for selected positive kinks (all cuts); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
315hKinkAnglePiSelectedPlus = new TH1F("hKinkAnglePiSelectedPlus", "Kink angle for selected positive kinks (all cuts); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
316hDCAkinkPiSelectedPlus = new TH1F("hDCAkinkPiSelectedPlus", "DCA for selected positive kinks (all cuts); DCA(cm); Number of kinks", 100, 0.0, 2.0);
317hPmKinkAngPiSelectedPlus = new TH2F("hPmKinkAngPiSelectedPlus", "Mother's momentum magnitude vs kink angle for selected positive kinks (all cuts); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
318hKinkPosXYPiSelectedPlus = new TH2F("hKinkPosXYPiSelectedPlus", "X-Y Position of selected positive kinks (all cuts); X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
319hKinkPosZRPiSelectedPlus = new TH2F("hKinkPosZRPiSelectedPlus", "Z vs radius of selected positive kinks (all cuts); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ,nBinsR, hLowR, hUpR);
320hPmdPiSelectedPlus = new TH2F("hPmdPiSelectedPlus", "Mother vs daughter momentum magnitude for selected positive kinks (all cuts); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
321hMinvPimuPiSelectedPlus = new TH1F("hMinvPimuPiSelectedPlus", "Invariant mass for #pi^{+} decaying to #mu^{+} for selected kinks (all cuts); m (GeV/c^{2}); dN/dm",nBinsInvMass, hLowInvMass, hUpInvMass);
322hdEdxPiSelectedPlus = new TH2F("hdEdxPiSelectedPlus", "dE/dx vs mother's momentum for selected positive kinks (all cuts); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
323
324hPtPiSelectedMinus = new TH1F("hPtPiSelectedMinus", "Mother's transverse momentum for selected negative kinks (all cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt);
325hEtaPiSelectedMinus = new TH1F("hEtaPiSelectedMinus", "Mother's pseudorapidity for selected negative kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
326hRapidityPiSelectedMinus = new TH1F("hRapidityPiSelectedMinus", "Mother's rapidity for selected negative kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta);
327hQtPiSelectedMinus = new TH1F("hQtPiSelectedMinus", "Daughter's transverse momentum in mother's frame for selected negative kinks (all cuts); q_{T} (GeV/c); dN/dq_{T}", 200, 0.0, 0.3);
328hKinkAnglePiSelectedMinus = new TH1F("hKinkAnglePiSelectedMinus", "Kink angle for selected negative kinks (all cuts); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle);
329hDCAkinkPiSelectedMinus = new TH1F("hDCAkinkPiSelectedMinus", "DCA for selected negative kinks (all cuts); DCA(cm); Number of kinks", 100, 0.0, 2.0);
330hPmKinkAngPiSelectedMinus = new TH2F("hPmKinkAngPiSelectedMinus", "Mother's momentum magnitude vs kink angle for selected negative kinks (all cuts); p_{T} (GeV/c); #theta (#circ); d^{2}N/dp_{T}d#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle);
331hKinkPosXYPiSelectedMinus = new TH2F("hKinkPosXYPiSelectedMinus", "X-Y Position for selected negative kinks (all cuts); X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY);
332hKinkPosZRPiSelectedMinus = new TH2F("hKinkPosZRPiSelectedMinus", "Z vs radius for selected negative kinks (all cuts); Z (cm); R (cm)",nBinsZ, hLowZ, hUpZ,nBinsR, hLowR, hUpR);
333hPmdPiSelectedMinus = new TH2F("hPmdPiSelectedMinus", "Mother vs daughter momentum magnitude for selected negative kinks (all cuts); Mother's P; Daughter's P", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt);
334hMinvPimuPiSelectedMinus = new TH1F("hMinvPimuPiSelectedMinus", "Invariant mass for #pi^{-} decaying to #mu^{-} for selected kinks (all cuts); m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass);
335hdEdxPiSelectedMinus = new TH2F("hdEdxPiSelectedMinus", "dE/dx vs mother's momentum for selected negative kinks (all cuts); p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0);
336
337
338fListOfHistos->Add(hMult);
339fListOfHistos->Add(hAcceptedMult);
340fListOfHistos->Add(hMultPS);
341fListOfHistos->Add(hvtx);
342fListOfHistos->Add(hvtxy);
343fListOfHistos->Add(hvtyz);
344fListOfHistos->Add(hvtxz);
345fListOfHistos->Add(hMultPSV);
346fListOfHistos->Add(hPtAll);
347fListOfHistos->Add(hEtaAll);
348fListOfHistos->Add(hTrackPos);
349fListOfHistos->Add(hTrackPosxy);
350fListOfHistos->Add(hTrackPosyz);
351fListOfHistos->Add(hTrackPosxz);
352//fListOfHistos->Add(hTPCchi2clusters);
353//fListOfHistos->Add(hdcaToVertexXY);
354//fListOfHistos->Add(hdcaToVertexZ);
355fListOfHistos->Add(hMultPrim);
356fListOfHistos->Add(hPtPrim);
357fListOfHistos->Add(hEtaPrim);
358fListOfHistos->Add(hPrimTrackPos);
359fListOfHistos->Add(hPrimTrackPosxy);
360fListOfHistos->Add(hPrimTrackPosyz);
361fListOfHistos->Add(hPrimTrackPosxz);
362fListOfHistos->Add(hPt);
363fListOfHistos->Add(hEta);
364//fListOfHistos->Add(hRapidity);
365fListOfHistos->Add(hPtKink);
366fListOfHistos->Add(hEtaKink);
367fListOfHistos->Add(hRapidityKink);
368fListOfHistos->Add(hPmP);
369fListOfHistos->Add(hKinkPosRTPCclusters1);
370fListOfHistos->Add(hKinkPosRTPCclusters2);
371fListOfHistos->Add(hQt);
372fListOfHistos->Add(hKinkAngle);
373fListOfHistos->Add(hDCAkink);
374fListOfHistos->Add(hPmKinkAng);
375fListOfHistos->Add(hKinkPosXY);
376fListOfHistos->Add(hKinkPosZY);
377fListOfHistos->Add(hKinkPosZR);
378fListOfHistos->Add(hKinkPosR);
379fListOfHistos->Add(hKinkPosZ);
380fListOfHistos->Add(hPmd);
381fListOfHistos->Add(hMinvPimu);
382fListOfHistos->Add(hdEdx);
383fListOfHistos->Add(hPtPosRSelected);
384fListOfHistos->Add(hPtZSelected);
385fListOfHistos->Add(hPtAngSelected);
386fListOfHistos->Add(hPtPmSelected);
387fListOfHistos->Add(hPtGoodKink);
388fListOfHistos->Add(hEtaGoodKink);
389fListOfHistos->Add(hRapidityGoodKink);
390fListOfHistos->Add(hQtGoodKink);
391fListOfHistos->Add(hPmGoodKinkAng);
392fListOfHistos->Add(hPmdGoodKink);
393fListOfHistos->Add(hdEdxGoodKink);
394fListOfHistos->Add(hPtQtSelected);
395fListOfHistos->Add(hPtMaxAngSelected);
396fListOfHistos->Add(hPtRTPCclustersSelected);
397fListOfHistos->Add(hRTPCclustersRTPCclustersSelected);
398fListOfHistos->Add(hPtSelected);
399fListOfHistos->Add(hEtaSelected);
400fListOfHistos->Add(hRapiditySelected);
401fListOfHistos->Add(hQtSelected);
402fListOfHistos->Add(hKinkAngleSelected);
403fListOfHistos->Add(hDCAkinkSelected);
404fListOfHistos->Add(hPmKinkAngSelected);
405fListOfHistos->Add(hKinkPosXYSelected);
406fListOfHistos->Add(hKinkPosZRSelected);
407fListOfHistos->Add(hKinkPosRSelected);
408fListOfHistos->Add(hPmdSelected);
409fListOfHistos->Add(hMinvPimuSelected);
410fListOfHistos->Add(hdEdxSelected);
411fListOfHistos->Add(hPtPiSelected);
412fListOfHistos->Add(hEtaPiSelected);
413fListOfHistos->Add(hRapidityPiSelected);
414fListOfHistos->Add(hQtPiSelected);
415fListOfHistos->Add(hKinkAnglePiSelected);
416fListOfHistos->Add(hDCAkinkPiSelected);
417fListOfHistos->Add(hPmKinkAngPiSelected);
418fListOfHistos->Add(hKinkPosRTPCclusters1PiSelected);
419fListOfHistos->Add(hKinkPosRTPCclusters2PiSelected);
420fListOfHistos->Add(hKinkPosXYPiSelected);
421fListOfHistos->Add(hKinkPosZRPiSelected);
422fListOfHistos->Add(hKinkPosRPiSelected);
423fListOfHistos->Add(hKinkPosZPiSelected);
424fListOfHistos->Add(hPmPPiSelected);
425fListOfHistos->Add(hPmdPiSelected);
426fListOfHistos->Add(hMinvPimuPiSelected);
427fListOfHistos->Add(hdEdxPiSelected);
428
429fListOfHistos->Add(hPtPiSelectedPlus);
430fListOfHistos->Add(hEtaPiSelectedPlus);
431fListOfHistos->Add(hRapidityPiSelectedPlus);
432fListOfHistos->Add(hQtPiSelectedPlus);
433fListOfHistos->Add(hKinkAnglePiSelectedPlus);
434fListOfHistos->Add(hDCAkinkPiSelectedPlus);
435fListOfHistos->Add(hPmKinkAngPiSelectedPlus);
436fListOfHistos->Add(hKinkPosXYPiSelectedPlus);
437fListOfHistos->Add(hKinkPosZRPiSelectedPlus);
438fListOfHistos->Add(hPmdPiSelectedPlus);
439fListOfHistos->Add(hMinvPimuPiSelectedPlus);
440fListOfHistos->Add(hdEdxPiSelectedPlus);
441
442fListOfHistos->Add(hPtPiSelectedMinus);
443fListOfHistos->Add(hEtaPiSelectedMinus);
444fListOfHistos->Add(hRapidityPiSelectedMinus);
445fListOfHistos->Add(hQtPiSelectedMinus);
446fListOfHistos->Add(hKinkAnglePiSelectedMinus);
447fListOfHistos->Add(hDCAkinkPiSelectedMinus);
448fListOfHistos->Add(hPmKinkAngPiSelectedMinus);
449fListOfHistos->Add(hKinkPosXYPiSelectedMinus);
450fListOfHistos->Add(hKinkPosZRPiSelectedMinus);
451fListOfHistos->Add(hPmdPiSelectedMinus);
452fListOfHistos->Add(hMinvPimuPiSelectedMinus);
453fListOfHistos->Add(hdEdxPiSelectedMinus);
454
455fListOfHistos->SetOwner(kTRUE);
456PostData(1, fListOfHistos);
457}
458
459//________________________________________________________________________
460void AliAnalysisPionKinksESD::UserExec(Option_t *) {
461 AliVEvent *event = InputEvent();
462 if (!event) {
463 Printf("ERROR: Could not retrieve event");
464 return;
465 }
466
467 AliESDEvent* esdEvent = dynamic_cast<AliESDEvent*>(event);
468 if (!esdEvent) {
469 Printf("ERROR: Could not retrieve esd");
470 return;
471 }
472
473
474//------------------------ Data Multiplicity unbiased --------------------------//
475 Int_t NTracks = esdEvent->GetNumberOfTracks(); //number of ESD tracks
476 hMult->Fill(NTracks);
477
478//----------------------------- Accepted Multiplicity -----------------------------//
479 Float_t NAcceptedTracks = fTrackCuts->CountAcceptedTracks(esdEvent);
480 if(fLowMulcut>-1) {
481 if(NAcceptedTracks<fLowMulcut) return;
482 }
483 if(fUpMulcut>-1) {
484 if(NAcceptedTracks>fUpMulcut) return;
485 }
486 hAcceptedMult->Fill(NAcceptedTracks); //to check if the multiplicity limits are ok
487
488
489
490//----------------------------- Physics selection ------------------------------//
491 Bool_t IsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kMB;
492 if ( IsSelected ==kFALSE) return;
493
494//--------------- Data Multiplicity after Physics selection --------------------//
495 hMultPS->Fill(NTracks);
496
497//------------------------------------ Vertex ----------------------------------//
498 const AliESDVertex* vtx = GetEventVertex(esdEvent); //ESD primary vertex
499 if (!vtx) return;
500
501 Double_t vtxpos[3]; //vertex position vector
502 vtx->GetXYZ(vtxpos);
503 hvtx->Fill(vtxpos[0], vtxpos[1], vtxpos[2]); //ESD primary vertex position (x-y-z)
504 hvtxy->Fill(vtxpos[0], vtxpos[1]);
505 hvtyz->Fill(vtxpos[1], vtxpos[2]);
506 hvtxz->Fill(vtxpos[0], vtxpos[2]);
507
508 if (TMath::Abs(vtxpos[2])>10.) return;
509
510//-------------------- Data Multiplicity after vertex cut -----------------------//
511 hMultPSV->Fill(NTracks);
512
513//------------------------------- dE/dx parameters -----------------------------//
514 if(!fPIDResponse) {
515 AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
516 AliInputEventHandler* inputHandler = (AliInputEventHandler*)(man->GetInputEventHandler());
517 fPIDResponse = inputHandler->GetPIDResponse();
518 }
519
520//------------------------- Reconstructed data Analysis -----------------------//
521 for (Int_t iData = 0; iData<NTracks; iData++) { //loop on all ESD tracks
522 AliESDtrack *ESDtrack = esdEvent->GetTrack(iData);
523 if (!ESDtrack) {
524 Printf("ERROR: Could not receive ESD track %d", iData);
525 continue;
526 }
527
528 Double_t Pt = ESDtrack->Pt();
529 Double_t Eta = ESDtrack->Eta();
530
531 hPtAll->Fill(Pt);
532 hEtaAll->Fill(Eta);
533 //hRapidityAll->Fill(Rapidity(ESDtrack));
534
535 Double_t TrackPos[3]; //starting position of ESD tracks (x-y-z)
536 ESDtrack->GetXYZ(TrackPos);
537 hTrackPos->Fill(TrackPos[0],TrackPos[1],TrackPos[2]);
538 hTrackPosxy->Fill(TrackPos[0], TrackPos[1]);
539 hTrackPosyz->Fill(TrackPos[1], TrackPos[2]);
540 hTrackPosxz->Fill(TrackPos[0], TrackPos[2]);
541
542 if ((IsPrimaryTrack(ESDtrack) == kFALSE) || (IsGoodTrack(ESDtrack) == kFALSE)) continue; //reject bad & secondary tracks
543 hMultPrim->Fill(NTracks);
544 hPtPrim->Fill(Pt);
545 hEtaPrim->Fill(Eta);
546 //hRapidityPrim->Fill(Rapidity(ESDtrack));
547
548 hPrimTrackPos->Fill(TrackPos[0],TrackPos[1],TrackPos[2]); //starting position of primary - supposed ESD tracks (x-y-z)
549 hPrimTrackPosxy->Fill(TrackPos[0], TrackPos[1]);
550 hPrimTrackPosyz->Fill(TrackPos[1], TrackPos[2]);
551 hPrimTrackPosxz->Fill(TrackPos[0], TrackPos[2]);
552
553 if (Pt<cLowPt) continue;
554
555 hPt->Fill(Pt);
556 hEta->Fill(Eta);
557 //hRapidity->Fill(fuRapidity(ESDtrack));
558
559 Int_t KinkIndex = ESDtrack->GetKinkIndex(0); //kink index (1st component is negative if the track is a kink candidate)
560 if (KinkIndex>=0) continue; //kink selection
561
562 Double_t Rapidity = fuRapidity(ESDtrack);
563 if (TMath::Abs(Rapidity)>cRapidityLim) continue;
564
565 Double_t dEdx = ESDtrack->GetTPCsignal();
566 Double_t NTPCclusters = ESDtrack->GetTPCclusters(0);
567
568 AliESDkink *kink = esdEvent->GetKink(TMath::Abs(KinkIndex)-1);
569
570 const TVector3 KinkPos(kink->GetPosition());
571 Double_t KinkPosR = kink->GetR(); //kink's position radius
572 Double_t KinkDistance = kink->GetDistance();
573 Double_t Qt = kink->GetQt(); //daughter's transverse momentum in mother's frame
574 Double_t KinkAngle =TMath::RadToDeg()*kink->GetAngle(2); //kink angle in mother frame (3rd component is angle in rads)
575
576 const TVector3 PMother(kink->GetMotherP()); //ESD mother's momentum
577 Double_t Pmx = PMother.Px();
578 Double_t Pmy = PMother.Py();
579 Double_t Pmz = PMother.Pz();
580 Double_t Pm = PMother.Mag(); //ESD mother's momentum magnitude
581 Double_t PTrack[3];
582 ESDtrack->GetPxPyPz(PTrack);
583 TVector3 Pvector3(PTrack[0], PTrack[1], PTrack[2]);
584 Double_t P = Pvector3.Mag();
585 Double_t PTPC = ESDtrack->GetInnerParam()->GetP();
586
587 const TVector3 PDaughter(kink->GetDaughterP()); //ESD daughter's momentum
588 Double_t Pdx = PDaughter.Px();
589 Double_t Pdy = PDaughter.Py();
590 Double_t Pdz = PDaughter.Pz();
591 Double_t Pd = PDaughter.Mag(); //ESD daugter's momentum magnitude
592 Double_t Edmu = TMath::Sqrt(TMath::Power(Pd,2)+TMath::Power(cMuonMass,2)); //ESD muon daughter's energy
593
594 Double_t DP = TMath::Sqrt((Pmx-Pdx)*(Pmx-Pdx)+(Pmy-Pdy)*(Pmy-Pdy)+(Pmz-Pdz)*(Pmz-Pdz)); //transferred momentum magnitude
595 Double_t MinvPimu = TMath::Sqrt((Edmu+DP)*(Edmu+DP)-TMath::Power(Pm,2)); //pion mother's invariant mass when decaying to muon
596 Double_t MaxKinkAngPimu=fMaxKinkAngPimu->Eval(P,0.,0.,0.); //maximum decay angle in lab frame for a pion decaying to muon
597
598 hPtKink->Fill(Pt);
599 hEtaKink->Fill(Eta);
600 hRapidityKink->Fill(Rapidity);
601 hPmP->Fill(Pm,P);
602 hKinkPosRTPCclusters1->Fill(NTPCclusters/KinkPosR);
603 hKinkPosRTPCclusters2->Fill(KinkPosR, NTPCclusters);
604 hQt->Fill(Qt);
605 hKinkAngle->Fill(KinkAngle);
606 hDCAkink->Fill(KinkDistance);
607 hPmKinkAng->Fill(P, KinkAngle);
608 hKinkPosXY->Fill(KinkPos[0],KinkPos[1]);
609 hKinkPosZY->Fill(KinkPos[2],KinkPos[1]);
610 hKinkPosZR->Fill(KinkPos[2],KinkPosR);
611 hKinkPosR->Fill(KinkPosR);
612 hKinkPosZ->Fill(KinkPos[2]);
613 hPmd->Fill(Pm,Pd);
614 hMinvPimu->Fill(MinvPimu);
615 hdEdx->Fill(PTPC, dEdx);
616
617 if ((KinkPosR<cLowR)||(KinkPosR>cUpR)) continue; //selection of kinks that are detected in the main region of TPC
618
619 hPtPosRSelected->Fill(Pt);
620
621 if ((TMath::Abs(KinkPos[2])<cLowZ) || (TMath::Abs(KinkPos[2])>cUpZ)) continue;
622 hPtZSelected->Fill(Pt);
623
624
625 if (KinkAngle<cLowKinkAngle) continue;
626 hPtAngSelected->Fill(Pt);
627
628 if ((Pm/P<0.7) || (1.3<Pm/P)) continue;
629 hPtPmSelected->Fill(Pt);
630
631 if (Qt<cLowQt)continue;
632
633 //Good Kinks
634 hPtGoodKink->Fill(Pt);
635 hEtaGoodKink->Fill(Eta);
636 hRapidityGoodKink->Fill(Rapidity);
637 hQtGoodKink->Fill(Qt);
638 hPmGoodKinkAng->Fill(P, KinkAngle);
639 hPmdGoodKink->Fill(Pm,Pd);
640 hdEdxGoodKink->Fill(PTPC, dEdx);
641
642 //------------------------ realistic PID from physical criteria --------------------//
643
644 if (Qt>cUpQt) continue;
645 hPtQtSelected->Fill(Pt);
646
647 if (KinkAngle>(MaxKinkAngPimu*1.1)) continue;
648 hPtMaxAngSelected->Fill(Pt);
649
650
651// if ( ((NTPCclusters/KinkPosR)>0.63) || ((NTPCclusters/KinkPosR)<0.20) ) //good TPC tracks selection
652 Double_t tpcNClHigh = -51.67+ (11./12.)*KinkPosR;
653 Double_t tpcNClMin = -85.5 + (65./95.)*KinkPosR;
654 if ( (NTPCclusters>tpcNClHigh) || (NTPCclusters<tpcNClMin) ) continue;//good TPC tracks selection
655// if ( (NTPCclusters>((11/12)*KinkPosR-51.67)) || (NTPCclusters<((65/95)*KinkPosR-85.5)) ) continue;
656 hPtRTPCclustersSelected->Fill(Pt);
657 hRTPCclustersRTPCclustersSelected->Fill(KinkPosR,NTPCclusters);
658
659 if ((MinvPimu>cUpInvMass) || (MinvPimu<cLowInvMass)) continue;
660
661 //selected
662 hPtSelected->Fill(Pt);
663 hEtaSelected->Fill(Eta);
664 hRapiditySelected->Fill(Rapidity);
665 hQtSelected->Fill(Qt);
666 hKinkAngleSelected->Fill(KinkAngle);
667 hDCAkinkSelected->Fill(KinkDistance);
668 hPmKinkAngSelected->Fill(P, KinkAngle);
669 hKinkPosXYSelected->Fill(KinkPos[0],KinkPos[1]);
670 hKinkPosZRSelected->Fill(KinkPos[2],KinkPosR);
671 hKinkPosRSelected->Fill(KinkPosR);
672 hPmdSelected->Fill(Pm,Pd);
673 hMinvPimuSelected->Fill(MinvPimu);
674 hdEdxSelected->Fill(PTPC, dEdx);
675
676
677 Double_t NSigmaTPC = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(ESDtrack, AliPID::kPion));
678 if (NSigmaTPC>cSigmaCut) continue;
679 Double_t Sign = ESDtrack->GetSign();
680
681 // dEdx selected
682 hPtPiSelected->Fill(Pt);
683 hEtaPiSelected->Fill(Eta);
684 hRapidityPiSelected->Fill(Rapidity);
685 hQtPiSelected->Fill(Qt);
686 hKinkAnglePiSelected->Fill(KinkAngle);
687 hDCAkinkPiSelected->Fill(KinkDistance);
688 hPmKinkAngPiSelected->Fill(P, KinkAngle);
689 hKinkPosRTPCclusters1PiSelected->Fill(NTPCclusters/KinkPosR);
690 hKinkPosRTPCclusters2PiSelected->Fill(KinkPosR, NTPCclusters);
691 hKinkPosXYPiSelected->Fill(KinkPos[0],KinkPos[1]);
692 hKinkPosZRPiSelected->Fill(KinkPos[2],KinkPosR);
693 hKinkPosRPiSelected->Fill(KinkPosR);
694 hKinkPosZPiSelected->Fill(KinkPos[2]);
695 hPmPPiSelected->Fill(Pm,P);
696 hPmdPiSelected->Fill(Pm,Pd);
697 hMinvPimuPiSelected->Fill(MinvPimu);
698 hdEdxPiSelected->Fill(PTPC, dEdx);
699
700 if (Sign>0) {
701 hPtPiSelectedPlus->Fill(Pt);
702 hEtaPiSelectedPlus->Fill(Eta);
703 hRapidityPiSelectedPlus->Fill(Rapidity);
704 hQtPiSelectedPlus->Fill(Qt);
705 hKinkAnglePiSelectedPlus->Fill(KinkAngle);
706 hDCAkinkPiSelectedPlus->Fill(KinkDistance);
707 hPmKinkAngPiSelectedPlus->Fill(P, KinkAngle);
708 hKinkPosXYPiSelectedPlus->Fill(KinkPos[0],KinkPos[1]);
709 hKinkPosZRPiSelectedPlus->Fill(KinkPos[2],KinkPosR);
710 hPmdPiSelectedPlus->Fill(Pm,Pd);
711 hMinvPimuPiSelectedPlus->Fill(MinvPimu);
712 hdEdxPiSelectedPlus->Fill(PTPC, dEdx);
713
714
715 } else if (Sign<0) {
716 hPtPiSelectedMinus->Fill(Pt);
717 hEtaPiSelectedMinus->Fill(Eta);
718 hRapidityPiSelectedMinus->Fill(Rapidity);
719 hQtPiSelectedMinus->Fill(Qt);
720 hKinkAnglePiSelectedMinus->Fill(KinkAngle);
721 hDCAkinkPiSelectedMinus->Fill(KinkDistance);
722 hPmKinkAngPiSelectedMinus->Fill(P, KinkAngle);
723 hKinkPosXYPiSelectedMinus->Fill(KinkPos[0],KinkPos[1]);
724 hKinkPosZRPiSelectedMinus->Fill(KinkPos[2],KinkPosR);
725 hPmdPiSelectedMinus->Fill(Pm,Pd);
726 hMinvPimuPiSelectedMinus->Fill(MinvPimu);
727 hdEdxPiSelectedMinus->Fill(PTPC, dEdx);
728
729 }
730 } //end of ESD track loop
731 PostData(1, fListOfHistos);
732}
733
734
735//________________________________________________________________________
736void AliAnalysisPionKinksESD::Terminate(Option_t *) {
737}
738
739//_________________________________________________________________________
740const AliESDVertex* AliAnalysisPionKinksESD::GetEventVertex(AliESDEvent* esd) { //Gets ESD vertex and returns it if it is valid
741 const AliESDVertex* vertex = esd->GetPrimaryVertexTracks();
742 if(vertex->GetStatus()==kTRUE) return vertex;
743 else {
744 vertex = esd->GetPrimaryVertexSPD();
745 if((vertex->GetStatus()==kTRUE)&&(vertex->GetNContributors()>0)) return vertex;
746 else return 0;
747 }
748}
749
750//________________________________________________________________________
751Double_t AliAnalysisPionKinksESD::Energy(AliESDtrack* track) const { //calculates the energy for a pion track
752 Double_t TrackMom[3];
753 track->GetPxPyPz(TrackMom);
754 TVector3 P(TrackMom[0], TrackMom[1], TrackMom[2]);
755 //Double_t EnergyK = TMath::Sqrt(P.Mag()*P.Mag()+0.493677*0.493677); //kaon's energy
756 Double_t EnergyPi = TMath::Sqrt(P.Mag()*P.Mag()+0.13957018*0.13957018); //pion's energy
757 return EnergyPi;
758}
759
760
761//________________________________________________________________________
762Double_t AliAnalysisPionKinksESD::fuRapidity(AliESDtrack* track) const { //calculates the rapidity for a track
763 Double_t TrackMom[3];
764 track->GetPxPyPz(TrackMom);
765 TVector3 P(TrackMom[0], TrackMom[1], TrackMom[2]);
766 Double_t RapidityK = 0.5*(TMath::Log((Energy(track)+P[2])/(Energy(track)-P[2])));
767 return RapidityK;
768}
769
770
771//________________________________________________________________________
772Bool_t AliAnalysisPionKinksESD::IsGoodTrack(AliESDtrack* ESDtrack) const { //Checks if a track is acceptable as good
773 UInt_t status = ESDtrack->GetStatus();
774 if ((status&AliESDtrack::kITSrefit)==0) return kFALSE; //cut tracks that cannot be reconstructed by ITS only
775 if ((status&AliESDtrack::kTPCrefit)==0) return kFALSE; //cut tracks that cannot be reconstructed by TPC only
776
777 Double_t NTPCclusters = ESDtrack->GetTPCclusters(0);
778 Double_t TPCchi2 = ESDtrack->GetTPCchi2();
779 if (NTPCclusters<20) return kFALSE;
780 //if (NTPCclusters<30) return kFALSE; // cut sta 30 gia syst
781
782 //hTPCchi2clusters->Fill(TPCchi2/NTPCclusters);//histo to check???????
783 if (TPCchi2/NTPCclusters>3.8) return kFALSE; //cut tracks of bad quality fit with the contributing clusters
784
785 /*Double_t ExtCov[15]; //external covariances matrix
786 ESDtrack->GetExternalCovariance(ExtCov);
787 if(ExtCov[0]>2) return kFALSE; //sigma(y^2)
788 if(ExtCov[2]>2) return kFALSE; //sigma(z^2)
789 if(ExtCov[5]>0.5) return kFALSE; //sigma(sinphi^2)
790 if(ExtCov[9]>0.5) return kFALSE; //sigma(tanlamda^2)
791 if(ExtCov[14]>2) return kFALSE; //sigma(1/Pt^2)*/
792
793 return kTRUE;
794}
795
796//________________________________________________________________________
797Bool_t AliAnalysisPionKinksESD::IsPrimaryTrack(AliESDtrack* ESDtrack) const { //Checks if a track is acceptable as a primary
798 Float_t ImpParam[2]; //DCA to vertex, 0->in x-y plane, 1->in z
799 Float_t ImpParamCov[3]; //covariances of DCA to vertex
800 ESDtrack->GetImpactParameters(ImpParam,ImpParamCov);
801 //hdcaToVertexXY->Fill(ImpParam[0]);
802 //hdcaToVertexZ->Fill(ImpParam[1]);
803 if (ImpParamCov[0]<=0 || ImpParamCov[2]<=0) {
804 AliDebug (1, "Estimated DCA covariance lower or equal zero!");
805 ImpParamCov[0]=0; ImpParamCov[2]=0;
806 }
807
808 //if((TMath::Abs(ImpParam[0])>0.3) || (TMath::Abs((ImpParam[1])>2.5))) return kFALSE; //absolute DCA cut
809 if (!fMaxDCAtoVtxCut->AcceptTrack(ESDtrack)) return kFALSE;
810 else return kTRUE;
811}
812