]>
Commit | Line | Data |
---|---|---|
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 | ||
28 | ClassImp(AliAnalysisPionKinksESD) | |
29 | ||
30 | //________________________________________________________________________ | |
31 | AliAnalysisPionKinksESD::AliAnalysisPionKinksESD(const char *name) | |
32 | :AliAnalysisTaskSE(name), | |
33 | fMaxKinkAngKmu(0), | |
34 | fMaxKinkAngPimu(0), //functions | |
35 | ||
36 | hMult(0), | |
37 | hAcceptedMult(0), | |
38 | hMultPS(0), | |
39 | hvtx(0), | |
40 | hvtxy(0), | |
41 | hvtyz(0), | |
42 | hvtxz(0), | |
43 | hMultPSV(0), | |
44 | hPtAll(0), | |
45 | hEtaAll(0), | |
46 | hTrackPos(0), | |
47 | hTrackPosxy(0), | |
48 | hTrackPosyz(0), | |
49 | hTrackPosxz(0), | |
50 | //hTPCchi2clusters(0), | |
51 | //hdcaToVertexXY(0), | |
52 | //hdcaToVertexZ(0), | |
53 | hMultPrim(0), | |
54 | hPtPrim(0), | |
55 | hEtaPrim(0), | |
56 | hPrimTrackPos(0), | |
57 | hPrimTrackPosxy(0), | |
58 | hPrimTrackPosyz(0), | |
59 | hPrimTrackPosxz(0), | |
60 | hPt(0), | |
61 | hEta(0), | |
62 | //hRapidity(0), | |
63 | hPtKink(0), | |
64 | hEtaKink(0), | |
65 | hRapidityKink(0), | |
66 | hPmP(0), | |
67 | hKinkPosRTPCclusters1(0), | |
68 | hKinkPosRTPCclusters2(0), | |
69 | hQt(0), | |
70 | hKinkAngle(0), | |
71 | hDCAkink(0), | |
72 | hPmKinkAng(0), | |
73 | hKinkPosXY(0), | |
74 | hKinkPosZY(0), | |
75 | hKinkPosZR(0), | |
76 | hKinkPosR(0), | |
77 | hKinkPosZ(0), | |
78 | hPmd(0), | |
79 | hMinvPimu(0), | |
80 | hdEdx(0), | |
81 | hPtPosRSelected(0), | |
82 | hPtZSelected(0), | |
83 | hPtAngSelected(0), | |
84 | hPtPmSelected(0), | |
85 | hPtGoodKink(0), | |
86 | hEtaGoodKink(0), | |
87 | hRapidityGoodKink(0), | |
88 | hQtGoodKink(0), | |
89 | hPmGoodKinkAng(0), | |
90 | hPmdGoodKink(0), | |
91 | hdEdxGoodKink(0), | |
92 | hPtQtSelected(0), | |
93 | hPtMaxAngSelected(0), | |
94 | hPtRTPCclustersSelected(0), | |
95 | hRTPCclustersRTPCclustersSelected(0), | |
96 | hPtSelected(0), | |
97 | hEtaSelected(0), | |
98 | hRapiditySelected(0), | |
99 | hQtSelected(0), | |
100 | hKinkAngleSelected(0), | |
101 | hDCAkinkSelected(0), | |
102 | hPmKinkAngSelected(0), | |
103 | hKinkPosXYSelected(0), | |
104 | hKinkPosZRSelected(0), | |
105 | hKinkPosRSelected(0), | |
106 | hPmdSelected(0), | |
107 | hMinvPimuSelected(0), | |
108 | hdEdxSelected(0), | |
109 | hPtPiSelected(0), | |
110 | hEtaPiSelected(0), | |
111 | hRapidityPiSelected(0), | |
112 | hQtPiSelected(0), | |
113 | hKinkAnglePiSelected(0), | |
114 | hDCAkinkPiSelected(0), | |
115 | hPmKinkAngPiSelected(0), | |
116 | hKinkPosRTPCclusters1PiSelected(0), | |
117 | hKinkPosRTPCclusters2PiSelected(0), | |
118 | hKinkPosXYPiSelected(0), | |
119 | hKinkPosZRPiSelected(0), | |
120 | hKinkPosRPiSelected(0), | |
121 | hKinkPosZPiSelected(0), | |
122 | hPmPPiSelected(0), | |
123 | hPmdPiSelected(0), | |
124 | hMinvPimuPiSelected(0), | |
125 | hdEdxPiSelected(0), | |
126 | hPtPiSelectedPlus(0), | |
127 | hEtaPiSelectedPlus(0), | |
128 | hRapidityPiSelectedPlus(0), | |
129 | hQtPiSelectedPlus(0), | |
130 | hKinkAnglePiSelectedPlus(0), | |
131 | hDCAkinkPiSelectedPlus(0), | |
132 | hPmKinkAngPiSelectedPlus(0), | |
133 | hKinkPosXYPiSelectedPlus(0), | |
134 | hKinkPosZRPiSelectedPlus(0), | |
135 | hPmdPiSelectedPlus(0), | |
136 | hMinvPimuPiSelectedPlus(0), | |
137 | hdEdxPiSelectedPlus(0), | |
138 | hPtPiSelectedMinus(0), | |
139 | hEtaPiSelectedMinus(0), | |
140 | hRapidityPiSelectedMinus(0), | |
141 | hQtPiSelectedMinus(0), | |
142 | hKinkAnglePiSelectedMinus(0), | |
143 | hDCAkinkPiSelectedMinus(0), | |
144 | hPmKinkAngPiSelectedMinus(0), | |
145 | hKinkPosXYPiSelectedMinus(0), | |
146 | hKinkPosZRPiSelectedMinus(0), | |
147 | hPmdPiSelectedMinus(0), | |
148 | hMinvPimuPiSelectedMinus(0), | |
149 | hdEdxPiSelectedMinus(0), // reconstruction histograms | |
150 | fListOfHistos(0), | |
151 | fLowMulcut(-1), fUpMulcut(-1), | |
152 | cLowPt(0), cRapidityLim(0), | |
153 | cLowR(0), cUpR(0), | |
154 | cLowZ(0), cUpZ(0), | |
155 | cLowKinkAngle(0), | |
156 | cLowQt(0), cUpQt(0), | |
157 | cLowInvMass(0), cUpInvMass(0), | |
158 | cSigmaCut(0), | |
159 | cPdgKaon(321), cPdgPion(211), cPdgMuon(13), cPdgElectron(11), | |
160 | cKaonMass(0), cPionMass(0), cMuonMass(0), cElectronMass(0), | |
161 | nBinsMult(0), hLowMult(0), hUpMult(0), | |
162 | nBinsPt(0), hLowPt(0), hUpPt(0), | |
163 | nBinsEta(0), hLowEta(0), hUpEta(0), | |
164 | nBinsQt(0), hLowQt(0), hUpQt(0), | |
165 | nBinsR(0), hLowR(0), hUpR(0), | |
166 | nBinsZ(0), hLowZ(0), hUpZ(0), | |
167 | nBinsXY(0), hLowXY(0), hUpXY(0), | |
168 | nBinsAngle(0), hLowAngle(0), hUpAngle(0), | |
169 | nBinsZV(0), hLowZV(0), hUpZV(0), | |
170 | nBinsXYV(0), hLowXYV(0), hUpXYV(0), | |
171 | nBinsInvMass(0), hLowInvMass(0), hUpInvMass(0), | |
172 | nBinsdEdx(0), hLowdEdx(0), hUpdEdx(0), fPIDResponse(0), | |
173 | fMaxDCAtoVtxCut(0), fTrackCuts(0) | |
174 | ||
175 | { | |
176 | //Multiplicity bins | |
177 | fMaxDCAtoVtxCut=new AliESDtrackCuts("fMaxDCAtoVtxCut","fMaxDCAtoVtxCut"); | |
178 | fMaxDCAtoVtxCut->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01"); | |
179 | fMaxDCAtoVtxCut->SetMaxChi2TPCConstrainedGlobal(36); | |
180 | ||
181 | fTrackCuts = new AliESDtrackCuts("Multiplicity bins","Multiplicity bins"); | |
182 | fTrackCuts->SetMinNClustersTPC(70); | |
183 | fTrackCuts->SetMaxChi2PerClusterTPC(4); | |
184 | fTrackCuts->SetAcceptKinkDaughters(kFALSE); | |
185 | fTrackCuts->SetRequireTPCRefit(kTRUE); | |
186 | fTrackCuts->SetRequireITSRefit(kTRUE); | |
187 | fTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny); | |
188 | fTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01"); | |
189 | fTrackCuts->SetMaxDCAToVertexZ(2); | |
190 | fTrackCuts->SetDCAToVertex2D(kFALSE); | |
191 | fTrackCuts->SetRequireSigmaToVertex(kFALSE); | |
192 | fTrackCuts->SetEtaRange(-0.8,+0.8); | |
193 | fTrackCuts->SetPtRange(0.15, 1e10); | |
194 | ||
195 | //DefineOutput(0, TList::Class()); | |
196 | DefineOutput(1, TList::Class()); | |
197 | } | |
198 | ||
199 | //________________________________________________________________________ | |
200 | void AliAnalysisPionKinksESD::UserCreateOutputObjects() { | |
201 | fListOfHistos=new TList(); | |
202 | ||
203 | //maximum kink angle for kaons to muons | |
204 | fMaxKinkAngKmu=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); | |
205 | fMaxKinkAngKmu->SetParameter(0,cKaonMass); | |
206 | fMaxKinkAngKmu->SetParameter(1,0.9127037); | |
207 | fMaxKinkAngKmu->SetParameter(2,TMath::Pi()); | |
208 | ||
209 | //maximum kink angle for pions to muons | |
210 | fMaxKinkAngPimu=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); | |
211 | fMaxKinkAngPimu->SetParameter(0,cPionMass); | |
212 | fMaxKinkAngPimu->SetParameter(1,0.2731374); | |
213 | fMaxKinkAngPimu->SetParameter(2,TMath::Pi()); | |
214 | ||
215 | //Create histograms | |
216 | TH1::SetDefaultSumw2(); | |
217 | TH2::SetDefaultSumw2(); | |
218 | ||
219 | ||
220 | //Reconstruction histograms | |
221 | hMult = new TH1F("hMult", "Multiplicity (unbiased); Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult); | |
222 | hAcceptedMult = new TH1F("hAcceptedMult", "Multiplicity (biased); Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult); | |
223 | hMultPS = new TH1F("hMultPS", "Multiplicity after physics selection; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult); | |
224 | hvtx = new TH3F("hvtx", "Reconstructed primary vertex position; x axis; y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV); | |
225 | hvtxy = new TH2F("hvtxy", "Reconstructed primary vertex position in x-y plane; x axis; y axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV); | |
226 | hvtyz = new TH2F("hvtyz", "Reconstructed primary vertex position in y-z plane; y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV); | |
227 | hvtxz = new TH2F("hvtxz", "Reconstructed primary vertex position in x-z plane; x axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV); | |
228 | hMultPSV = new TH1F("hMultPSV", "Multiplicity after physics selection & vertex cut; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult); | |
229 | hPtAll = new TH1F("hPtAll", "Transverse momentum of all tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt); | |
230 | hEtaAll = new TH1F("hEtaAll", "Pseudorapidity of all tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
231 | hTrackPos = new TH3F("hTrackPos", "Generetion position of all reconstructed tracks", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV); | |
232 | hTrackPosxy = new TH2F("hTrackPosxy", "Generetion position of all reconstructed tracks in x-y plane; x axis; y axis", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV); | |
233 | hTrackPosyz = new TH2F("hTrackPosyz", "Generetion position of all reconstructed tracks in y-z plane; y axis; z axis", nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV); | |
234 | hTrackPosxz = 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);// | |
238 | hMultPrim = new TH1F("hMultPrim", "ESD primary - supposed tracks multiplicity; Number of tracks; Number of events", nBinsMult, hLowMult, hUpMult); | |
239 | hPtPrim = new TH1F("hPtPrim", "Transverse momentum of primary - supposed ESD tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt); | |
240 | hEtaPrim = new TH1F("hEtaPrim", "Pseudorapidity of primary - supposed ESD tracks; n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
241 | hPrimTrackPos = new TH3F("hPrimTrackPos", "Generetion position of selected tracks (DCA and quality cuts)", nBinsXYV, hLowXYV, hUpXYV, nBinsXYV, hLowXYV, hUpXYV, nBinsZV, hLowZV, hUpZV); | |
242 | hPrimTrackPosxy = 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); | |
243 | hPrimTrackPosyz = 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); | |
244 | hPrimTrackPosxz = 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); | |
245 | hPt = new TH1F("hPt", "Transverse momentum of selected ESD tracks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt); | |
246 | hEta = 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); | |
248 | hPtKink = new TH1F("hPtKink", "Mother's transverse momentum for all ESD kinks; p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt); | |
249 | hEtaKink = new TH1F("hEtaKink", "Mother's pseudorapidity for all ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
250 | hRapidityKink = new TH1F("hRapidityKink", "Mother's rapidity for all ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
251 | hPmP = new TH2F("hPmP", "Mother's momentum as calculated by kink and by track; P_{kink}; P_{track}", nBinsPt, hLowPt, hUpPt, nBinsPt, hLowPt, hUpPt); | |
252 | hKinkPosRTPCclusters1 = new TH1F("hKinkPosRTPCclusters1", " ;kinkposR; tpc clusters",100,0,1); | |
253 | hKinkPosRTPCclusters2 = new TH2F("hKinkPosRTPCclusters2", " ;kinkposR; tpc clusters",nBinsR, hLowR, hUpR,100,0,200 ); | |
254 | hQt = 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); | |
255 | hKinkAngle = new TH1F("hKinkAngle", "Kink angle for all ESD kinks; #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle); | |
256 | hDCAkink = new TH1F("hDCAkink", "DCA between the two kink tracks; DCA(cm); Number of kinks", 100, 0.0, 2.0); | |
257 | hPmKinkAng = new TH2F("hPmKinkAng", "k, p_(GeV/c); #theta (#circ); d^{2}N/dpd#theta", nBinsPt, hLowPt, hUpPt, nBinsAngle, hLowAngle, hUpAngle); | |
258 | hKinkPosXY = new TH2F("hKinkPosXY", "X-Y Position of all kinks; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY); | |
259 | hKinkPosZY = 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); | |
260 | hKinkPosZR = new TH2F("hKinkPosZR", "Z vs radius of all kinks position; Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR); | |
261 | hKinkPosR = new TH1F("hKinkPosR", "Position radius of all ESD kinks; R (cm); dN/dR", nBinsR, hLowR, hUpR); | |
262 | hKinkPosZ = new TH1F("hKinkPosZ", "z position of kinks (DCA, quality, p_{T} & y cuts); z (cm); dN/dz", nBinsZ, -1, 1); | |
263 | hPmd = 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); | |
264 | hMinvPimu = new TH1F("hMinvPimu", "Invariant mass of ESD pions decaying to muons; m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass); | |
265 | hdEdx = new TH2F("hdEdx", "dE/dx vs mother's momentum; p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0); | |
266 | hPtPosRSelected = new TH1F("hPtPosRSelected", "Mother's transverse momentum for selected kinks (DCA, quality, p_{T}, y & R cuts); R (cm); dN/dR", nBinsPt, hLowPt, hUpPt); | |
267 | hPtZSelected = 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); | |
268 | hPtAngSelected = 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); | |
269 | hPtPmSelected = 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); | |
270 | hPtGoodKink = new TH1F("hPtGoodKink", "Mother's transverse momentum for real ESD kinks (realistic PID); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt); | |
271 | hEtaGoodKink = new TH1F("hEtaGoodKink", "Mother's pseudorapidity for real ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
272 | hRapidityGoodKink = new TH1F("hRapidityGoodKink", "Mother's rapidity for real ESD kinks; n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
273 | hQtGoodKink = 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); | |
274 | hPmGoodKinkAng = 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); | |
275 | hPmdGoodKink = 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); | |
276 | hdEdxGoodKink = new TH2F("hdEdxGoodKink", "dE/dx vs mother's momentum; p (GeV/c); dE/dx (GeV/cm)", nBinsPt, hLowPt, hUpPt, 100, 0.0, 300.0); | |
277 | hPtQtSelected = 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); | |
278 | hPtMaxAngSelected = 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); | |
279 | hPtRTPCclustersSelected = 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); | |
280 | hRTPCclustersRTPCclustersSelected = 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); | |
281 | hPtSelected = 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); | |
282 | hEtaSelected = new TH1F("hEtaSelected", "Mother's pseudorapidity for selected kinks (all cuts except dE/dx); n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
283 | hRapiditySelected = new TH1F("hRapiditySelected", "Mother's rapidity for selected kinks (all cuts except dE/dx); n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
284 | hQtSelected = 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); | |
285 | hKinkAngleSelected = new TH1F("hKinkAngleSelected", "Kink angle of selected kinks (all cuts except dE/dx); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle); | |
286 | hDCAkinkSelected = new TH1F("hDCAkinkSelected", "DCA; DCA(cm); Number of kinks", 100, 0.0, 2.0); | |
287 | hPmKinkAngSelected = 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); | |
288 | hKinkPosXYSelected = new TH2F("hKinkPosXYSelected", "X-Y Position ; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY); | |
289 | hKinkPosZRSelected = new TH2F("hKinkPosZRSelected", "Z vs radius of selected kinks (all cuts except dE/dx); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR); | |
290 | hKinkPosRSelected = new TH1F("hKinkPosRSelected", "Position radius of selected kinks (all cuts except dE/dx); R (cm); dN/dR", nBinsR, hLowR, hUpR); | |
291 | hPmdSelected = 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); | |
292 | hMinvPimuSelected = 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); | |
293 | hdEdxSelected = 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); | |
294 | hPtPiSelected = new TH1F("hPtPiSelected", "Mother's transverse momentum for selected kinks (all cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt); | |
295 | hEtaPiSelected = new TH1F("hEtaPiSelected", "Mother's pseudorapidity for selected kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
296 | hRapidityPiSelected = new TH1F("hRapidityPiSelected", "Mother's rapidity for selected kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
297 | hQtPiSelected = 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); | |
298 | hKinkAnglePiSelected = new TH1F("hKinkAnglePiSelected", "Kink angle of selected kinks (all cuts); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle); | |
299 | hDCAkinkPiSelected = new TH1F("hDCAkinkPiSelected", "DCA; DCA(cm); Number of kinks", 100, 0.0, 2.0); | |
300 | hPmKinkAngPiSelected = 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); | |
301 | hKinkPosRTPCclusters1PiSelected = new TH1F("hKinkPosRTPCclusters1PiSelected", " ;kinkposR; tpc clusters",100,0,1); | |
302 | hKinkPosRTPCclusters2PiSelected = new TH2F("hKinkPosRTPCclusters2PiSelected", " ;kinkposR; tpc clusters",nBinsR, hLowR, hUpR,100,0,200 ); | |
303 | hKinkPosXYPiSelected = new TH2F("hKinkPosXYPiSelected", "X-Y Position ; X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY); | |
304 | hKinkPosZRPiSelected = new TH2F("hKinkPosZRPiSelected", "Z vs radius of selected kinks (all cuts); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ, nBinsR, hLowR, hUpR); | |
305 | hKinkPosRPiSelected = new TH1F("hKinkPosRPiSelected", "Position radius of selected kinks (all cuts); R (cm); dN/dR", nBinsR, hLowR, hUpR); | |
306 | hKinkPosZPiSelected = new TH1F("hKinkPosZPiSelected", "z position of selected kinks (all cuts); R (cm); dN/dR", nBinsZ, hLowZ, hUpZ); | |
307 | hPmPPiSelected = 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); | |
308 | hPmdPiSelected = 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); | |
309 | hMinvPimuPiSelected = 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); | |
310 | hdEdxPiSelected = 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); | |
311 | hPtPiSelectedPlus = new TH1F("hPtPiSelectedPlus", "Mother's transverse momentum for selected positive kinks (all cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt); | |
312 | hEtaPiSelectedPlus = new TH1F("hEtaPiSelectedPlus", "Mother's pseudorapidity for selected positive kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
313 | hRapidityPiSelectedPlus = new TH1F("hRapidityPiSelectedPlus", "Mother's rapidity for selected positive kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
314 | hQtPiSelectedPlus = 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); | |
315 | hKinkAnglePiSelectedPlus = new TH1F("hKinkAnglePiSelectedPlus", "Kink angle for selected positive kinks (all cuts); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle); | |
316 | hDCAkinkPiSelectedPlus = new TH1F("hDCAkinkPiSelectedPlus", "DCA for selected positive kinks (all cuts); DCA(cm); Number of kinks", 100, 0.0, 2.0); | |
317 | hPmKinkAngPiSelectedPlus = 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); | |
318 | hKinkPosXYPiSelectedPlus = new TH2F("hKinkPosXYPiSelectedPlus", "X-Y Position of selected positive kinks (all cuts); X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY); | |
319 | hKinkPosZRPiSelectedPlus = new TH2F("hKinkPosZRPiSelectedPlus", "Z vs radius of selected positive kinks (all cuts); Z (cm); R (cm)", nBinsZ, hLowZ, hUpZ,nBinsR, hLowR, hUpR); | |
320 | hPmdPiSelectedPlus = 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); | |
321 | hMinvPimuPiSelectedPlus = new TH1F("hMinvPimuPiSelectedPlus", "Invariant mass for #pi^{+} decaying to #mu^{+} for selected kinks (all cuts); m (GeV/c^{2}); dN/dm",nBinsInvMass, hLowInvMass, hUpInvMass); | |
322 | hdEdxPiSelectedPlus = 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 | ||
324 | hPtPiSelectedMinus = new TH1F("hPtPiSelectedMinus", "Mother's transverse momentum for selected negative kinks (all cuts); p_{T} (GeV/c); dN/dp_{T}", nBinsPt, hLowPt, hUpPt); | |
325 | hEtaPiSelectedMinus = new TH1F("hEtaPiSelectedMinus", "Mother's pseudorapidity for selected negative kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
326 | hRapidityPiSelectedMinus = new TH1F("hRapidityPiSelectedMinus", "Mother's rapidity for selected negative kinks (all cuts); n; dN/dn", nBinsEta, hLowEta, hUpEta); | |
327 | hQtPiSelectedMinus = 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); | |
328 | hKinkAnglePiSelectedMinus = new TH1F("hKinkAnglePiSelectedMinus", "Kink angle for selected negative kinks (all cuts); #theta (#circ); dN/d#theta", nBinsAngle, hLowAngle, hUpAngle); | |
329 | hDCAkinkPiSelectedMinus = new TH1F("hDCAkinkPiSelectedMinus", "DCA for selected negative kinks (all cuts); DCA(cm); Number of kinks", 100, 0.0, 2.0); | |
330 | hPmKinkAngPiSelectedMinus = 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); | |
331 | hKinkPosXYPiSelectedMinus = new TH2F("hKinkPosXYPiSelectedMinus", "X-Y Position for selected negative kinks (all cuts); X (cm); Y (cm)", nBinsXY, hLowXY, hUpXY, nBinsXY, hLowXY, hUpXY); | |
332 | hKinkPosZRPiSelectedMinus = new TH2F("hKinkPosZRPiSelectedMinus", "Z vs radius for selected negative kinks (all cuts); Z (cm); R (cm)",nBinsZ, hLowZ, hUpZ,nBinsR, hLowR, hUpR); | |
333 | hPmdPiSelectedMinus = 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); | |
334 | hMinvPimuPiSelectedMinus = new TH1F("hMinvPimuPiSelectedMinus", "Invariant mass for #pi^{-} decaying to #mu^{-} for selected kinks (all cuts); m (GeV/c^{2}); dN/dm", nBinsInvMass, hLowInvMass, hUpInvMass); | |
335 | hdEdxPiSelectedMinus = 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 | ||
338 | fListOfHistos->Add(hMult); | |
339 | fListOfHistos->Add(hAcceptedMult); | |
340 | fListOfHistos->Add(hMultPS); | |
341 | fListOfHistos->Add(hvtx); | |
342 | fListOfHistos->Add(hvtxy); | |
343 | fListOfHistos->Add(hvtyz); | |
344 | fListOfHistos->Add(hvtxz); | |
345 | fListOfHistos->Add(hMultPSV); | |
346 | fListOfHistos->Add(hPtAll); | |
347 | fListOfHistos->Add(hEtaAll); | |
348 | fListOfHistos->Add(hTrackPos); | |
349 | fListOfHistos->Add(hTrackPosxy); | |
350 | fListOfHistos->Add(hTrackPosyz); | |
351 | fListOfHistos->Add(hTrackPosxz); | |
352 | //fListOfHistos->Add(hTPCchi2clusters); | |
353 | //fListOfHistos->Add(hdcaToVertexXY); | |
354 | //fListOfHistos->Add(hdcaToVertexZ); | |
355 | fListOfHistos->Add(hMultPrim); | |
356 | fListOfHistos->Add(hPtPrim); | |
357 | fListOfHistos->Add(hEtaPrim); | |
358 | fListOfHistos->Add(hPrimTrackPos); | |
359 | fListOfHistos->Add(hPrimTrackPosxy); | |
360 | fListOfHistos->Add(hPrimTrackPosyz); | |
361 | fListOfHistos->Add(hPrimTrackPosxz); | |
362 | fListOfHistos->Add(hPt); | |
363 | fListOfHistos->Add(hEta); | |
364 | //fListOfHistos->Add(hRapidity); | |
365 | fListOfHistos->Add(hPtKink); | |
366 | fListOfHistos->Add(hEtaKink); | |
367 | fListOfHistos->Add(hRapidityKink); | |
368 | fListOfHistos->Add(hPmP); | |
369 | fListOfHistos->Add(hKinkPosRTPCclusters1); | |
370 | fListOfHistos->Add(hKinkPosRTPCclusters2); | |
371 | fListOfHistos->Add(hQt); | |
372 | fListOfHistos->Add(hKinkAngle); | |
373 | fListOfHistos->Add(hDCAkink); | |
374 | fListOfHistos->Add(hPmKinkAng); | |
375 | fListOfHistos->Add(hKinkPosXY); | |
376 | fListOfHistos->Add(hKinkPosZY); | |
377 | fListOfHistos->Add(hKinkPosZR); | |
378 | fListOfHistos->Add(hKinkPosR); | |
379 | fListOfHistos->Add(hKinkPosZ); | |
380 | fListOfHistos->Add(hPmd); | |
381 | fListOfHistos->Add(hMinvPimu); | |
382 | fListOfHistos->Add(hdEdx); | |
383 | fListOfHistos->Add(hPtPosRSelected); | |
384 | fListOfHistos->Add(hPtZSelected); | |
385 | fListOfHistos->Add(hPtAngSelected); | |
386 | fListOfHistos->Add(hPtPmSelected); | |
387 | fListOfHistos->Add(hPtGoodKink); | |
388 | fListOfHistos->Add(hEtaGoodKink); | |
389 | fListOfHistos->Add(hRapidityGoodKink); | |
390 | fListOfHistos->Add(hQtGoodKink); | |
391 | fListOfHistos->Add(hPmGoodKinkAng); | |
392 | fListOfHistos->Add(hPmdGoodKink); | |
393 | fListOfHistos->Add(hdEdxGoodKink); | |
394 | fListOfHistos->Add(hPtQtSelected); | |
395 | fListOfHistos->Add(hPtMaxAngSelected); | |
396 | fListOfHistos->Add(hPtRTPCclustersSelected); | |
397 | fListOfHistos->Add(hRTPCclustersRTPCclustersSelected); | |
398 | fListOfHistos->Add(hPtSelected); | |
399 | fListOfHistos->Add(hEtaSelected); | |
400 | fListOfHistos->Add(hRapiditySelected); | |
401 | fListOfHistos->Add(hQtSelected); | |
402 | fListOfHistos->Add(hKinkAngleSelected); | |
403 | fListOfHistos->Add(hDCAkinkSelected); | |
404 | fListOfHistos->Add(hPmKinkAngSelected); | |
405 | fListOfHistos->Add(hKinkPosXYSelected); | |
406 | fListOfHistos->Add(hKinkPosZRSelected); | |
407 | fListOfHistos->Add(hKinkPosRSelected); | |
408 | fListOfHistos->Add(hPmdSelected); | |
409 | fListOfHistos->Add(hMinvPimuSelected); | |
410 | fListOfHistos->Add(hdEdxSelected); | |
411 | fListOfHistos->Add(hPtPiSelected); | |
412 | fListOfHistos->Add(hEtaPiSelected); | |
413 | fListOfHistos->Add(hRapidityPiSelected); | |
414 | fListOfHistos->Add(hQtPiSelected); | |
415 | fListOfHistos->Add(hKinkAnglePiSelected); | |
416 | fListOfHistos->Add(hDCAkinkPiSelected); | |
417 | fListOfHistos->Add(hPmKinkAngPiSelected); | |
418 | fListOfHistos->Add(hKinkPosRTPCclusters1PiSelected); | |
419 | fListOfHistos->Add(hKinkPosRTPCclusters2PiSelected); | |
420 | fListOfHistos->Add(hKinkPosXYPiSelected); | |
421 | fListOfHistos->Add(hKinkPosZRPiSelected); | |
422 | fListOfHistos->Add(hKinkPosRPiSelected); | |
423 | fListOfHistos->Add(hKinkPosZPiSelected); | |
424 | fListOfHistos->Add(hPmPPiSelected); | |
425 | fListOfHistos->Add(hPmdPiSelected); | |
426 | fListOfHistos->Add(hMinvPimuPiSelected); | |
427 | fListOfHistos->Add(hdEdxPiSelected); | |
428 | ||
429 | fListOfHistos->Add(hPtPiSelectedPlus); | |
430 | fListOfHistos->Add(hEtaPiSelectedPlus); | |
431 | fListOfHistos->Add(hRapidityPiSelectedPlus); | |
432 | fListOfHistos->Add(hQtPiSelectedPlus); | |
433 | fListOfHistos->Add(hKinkAnglePiSelectedPlus); | |
434 | fListOfHistos->Add(hDCAkinkPiSelectedPlus); | |
435 | fListOfHistos->Add(hPmKinkAngPiSelectedPlus); | |
436 | fListOfHistos->Add(hKinkPosXYPiSelectedPlus); | |
437 | fListOfHistos->Add(hKinkPosZRPiSelectedPlus); | |
438 | fListOfHistos->Add(hPmdPiSelectedPlus); | |
439 | fListOfHistos->Add(hMinvPimuPiSelectedPlus); | |
440 | fListOfHistos->Add(hdEdxPiSelectedPlus); | |
441 | ||
442 | fListOfHistos->Add(hPtPiSelectedMinus); | |
443 | fListOfHistos->Add(hEtaPiSelectedMinus); | |
444 | fListOfHistos->Add(hRapidityPiSelectedMinus); | |
445 | fListOfHistos->Add(hQtPiSelectedMinus); | |
446 | fListOfHistos->Add(hKinkAnglePiSelectedMinus); | |
447 | fListOfHistos->Add(hDCAkinkPiSelectedMinus); | |
448 | fListOfHistos->Add(hPmKinkAngPiSelectedMinus); | |
449 | fListOfHistos->Add(hKinkPosXYPiSelectedMinus); | |
450 | fListOfHistos->Add(hKinkPosZRPiSelectedMinus); | |
451 | fListOfHistos->Add(hPmdPiSelectedMinus); | |
452 | fListOfHistos->Add(hMinvPimuPiSelectedMinus); | |
453 | fListOfHistos->Add(hdEdxPiSelectedMinus); | |
454 | ||
455 | fListOfHistos->SetOwner(kTRUE); | |
456 | PostData(1, fListOfHistos); | |
457 | } | |
458 | ||
459 | //________________________________________________________________________ | |
460 | void 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 | //________________________________________________________________________ | |
736 | void AliAnalysisPionKinksESD::Terminate(Option_t *) { | |
737 | } | |
738 | ||
739 | //_________________________________________________________________________ | |
740 | const 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 | //________________________________________________________________________ | |
751 | Double_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 | //________________________________________________________________________ | |
762 | Double_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 | //________________________________________________________________________ | |
772 | Bool_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 | //________________________________________________________________________ | |
797 | Bool_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 |