]>
Commit | Line | Data |
---|---|---|
9bcef488 | 1 | /* Leading Charged Track+V0 Correlation.(Works for Real,Monte Carlo Data) |
2 | * Sandun Jayarathna | |
3 | * University of Houston | |
4 | * sandun.pahula.hewage@cern.ch | |
5 | *****************************************************************************************/ | |
ff0805a7 | 6 | #include <TROOT.h> |
7 | #include <TList.h> | |
8 | #include <TChain.h> | |
9 | #include <TFile.h> | |
10 | #include <TMath.h> | |
11 | #include <TTree.h> | |
12 | #include <TRandom.h> | |
13 | #include <TH1.h> | |
14 | #include <TH2.h> | |
15 | #include <TH3.h> | |
16 | ||
17 | ||
18 | #include "AliLog.h" | |
19 | #include "AliAnalysisManager.h" | |
20 | #include "AliAODTrack.h" | |
21 | #include "AliAODEvent.h" | |
22 | #include "AliAODv0.h" | |
ff0805a7 | 23 | #include "AliAODVertex.h" |
24 | #include "AliAODPid.h" | |
25 | #include "AliPIDResponse.h" | |
26 | #include "AliEventPoolManager.h" | |
27 | #include "AliCentrality.h" | |
ff0805a7 | 28 | #include "AliAODHandler.h" |
29 | #include "AliAODInputHandler.h" | |
30 | #include "AliAODMCParticle.h" | |
31 | #include "AliInputEventHandler.h" | |
ff0805a7 | 32 | #include "AliVParticle.h" |
ff0805a7 | 33 | #include "AliMultiplicity.h" |
ff0805a7 | 34 | #include "AliAODMCHeader.h" |
35 | #include "AliPID.h" | |
ff0805a7 | 36 | #include "AliExternalTrackParam.h" |
37 | ||
38 | #include "AliLeadingV0Correlation.h" | |
39 | ||
9bcef488 | 40 | #define CorrBinsX 24 |
41 | #define CorrBinsY 26 | |
ff0805a7 | 42 | |
43 | ClassImp(AliLeadingV0Correlation) | |
44 | ClassImp(AliLeadingBasicParticle) | |
45 | ||
46 | //--------------------------------------------------------------------------------------- | |
47 | AliLeadingV0Correlation::AliLeadingV0Correlation() | |
48 | : AliAnalysisTaskSE(), | |
9bcef488 | 49 | fAODEvent(0x0), |
50 | fPoolMgr(0x0), | |
51 | fPoolMgrMC(0x0), | |
52 | fPoolK0(0x0), | |
53 | fPoolLambda(0x0), | |
54 | fPoolK0MC(0x0), | |
55 | fPoolLambdaMC(0x0), | |
56 | fPIDResponse(0x0), | |
57 | fPoolMaxNEvents(0), | |
58 | fPoolMinNTracks(0), | |
59 | fMinEventsToMix(0), | |
60 | fNzVtxBins(0), | |
61 | fNCentBins(0), | |
62 | fcollidingSys(""), | |
63 | fTriggerMask(""), | |
64 | fpvzcut(0), | |
65 | fTrackEtaCut(0), | |
66 | fFilterBit(128), | |
67 | ftrigPtLow(0), | |
68 | ftrigPtHigh(0), | |
69 | fassocPtLow(0), | |
70 | fassocPtHigh(0), | |
71 | fAnalysisMC(0), | |
72 | fUsePID(""), | |
73 | fRapidityCut(0), | |
74 | fCutV0Radius(0.), | |
75 | fCutDCANegToPV(0.), | |
76 | fCutDCAPosToPV(0.), | |
77 | fCutDCAV0Daughters(0.), | |
78 | fCutV0CosPA(0.), | |
79 | fSpecialArmenterosCutK0s(0.), | |
80 | fCTauK0(0.), | |
81 | fCTauLambda(0.), | |
82 | fOutputList(0), | |
83 | fHistMCPrimaryVertexX(0), | |
84 | fHistMCPrimaryVertexY(0), | |
85 | fHistMCPrimaryVertexZ(0), | |
86 | fHistMCPtAllK0s(0), | |
87 | fHistMCPtAllLambda(0), | |
88 | fHistMCPtAllAntiLambda(0), | |
89 | fHistMCRapK0s(0), | |
90 | fHistMCRapLambda(0), | |
91 | fHistMCRapAntiLambda(0), | |
92 | fHistMCPtK0s(0), | |
93 | fHistMCPtLambda(0), | |
94 | fHistMCPtAntiLambda(0), | |
95 | fHistMCPtLambdaFromSigma(0), | |
96 | fHistMCPtAntiLambdaFromSigma(0), | |
97 | fHistPrimRawPtVsYK0s(0), | |
98 | fHistPrimRawPtVsYLambda(0), | |
99 | fHistPrimRawPtVsYAntiLambda(0), | |
100 | fHistPrimaryVertexX(0), | |
101 | fHistPrimaryVertexY(0), | |
102 | fHistPrimaryVertexZ(0), | |
103 | fHistDcaPosToPrimVertexK0vsMassK0(0), | |
104 | fHistDcaNegToPrimVertexK0vsMassK0(0), | |
105 | fHistRadiusV0K0vsMassK0(0), | |
106 | fHistDecayLengthV0K0vsMassK0(0), | |
107 | fHistDcaV0DaughtersK0vsMassK0(0), | |
108 | fHistCosPointAngleK0vsMassK0(0), | |
109 | fHistDcaPosToPrimVertexLvsMassL(0), | |
110 | fHistDcaNegToPrimVertexLvsMassL(0), | |
111 | fHistRadiusV0LvsMassL(0), | |
112 | fHistDecayLengthV0LvsMassL(0), | |
113 | fHistDcaV0DaughtersLvsMassL(0), | |
114 | fHistCosPointAngleLvsMassL(0), | |
115 | fHistDcaPosToPrimVertexAntiLvsMass(0), | |
116 | fHistDcaNegToPrimVertexAntiLvsMass(0), | |
117 | fHistRadiusV0AntiLvsMass(0), | |
118 | fHistDecayLengthV0AntiLvsMass(0), | |
119 | fHistDcaV0DaughtersAntiLvsMass(0), | |
120 | fHistCosPointAngleAntiLvsMass(0), | |
121 | fHistMassK0(0), | |
122 | fHistMassLambda(0), | |
123 | fHistMassAntiLambda(0), | |
124 | fHistPtVsMassK0(0), | |
125 | fHistPtVsMassLambda(0), | |
126 | fHistPtVsMassAntiLambda(0), | |
127 | fHistArmenterosPodolanskiK0(0), | |
128 | fHistArmenterosPodolanskiLambda(0), | |
129 | fHistArmenterosPodolanskiAntiLambda(0), | |
ff0805a7 | 130 | fHistAsMcPtK0(0), |
131 | fHistAsMcPtLambda(0), | |
132 | fHistAsMcPtAntiLambda(0), | |
133 | fHistAsMcProdRadiusK0(0), | |
134 | fHistAsMcProdRadiusLambda(0), | |
135 | fHistAsMcProdRadiusAntiLambda(0), | |
136 | fHistAsMcProdRadiusXvsYK0s(0), | |
137 | fHistAsMcProdRadiusXvsYLambda(0), | |
138 | fHistAsMcProdRadiusXvsYAntiLambda(0), | |
139 | fHistPidMcMassK0(0), | |
140 | fHistPidMcMassLambda(0), | |
141 | fHistPidMcMassAntiLambda(0), | |
ff0805a7 | 142 | fHistAsMcPtLambdaFromSigma(0), |
143 | fHistAsMcPtAntiLambdaFromSigma(0), | |
144 | fHistAsMcSecondaryPtVsRapK0s(0), | |
145 | fHistAsMcSecondaryPtVsRapLambda(0), | |
146 | fHistAsMcSecondaryPtVsRapAntiLambda(0), | |
147 | fHistAsMcSecondaryProdRadiusK0s(0), | |
148 | fHistAsMcSecondaryProdRadiusLambda(0), | |
149 | fHistAsMcSecondaryProdRadiusAntiLambda(0), | |
150 | fHistAsMcSecondaryProdRadiusXvsYK0s(0), | |
151 | fHistAsMcSecondaryProdRadiusXvsYLambda(0), | |
152 | fHistAsMcSecondaryProdRadiusXvsYAntiLambda(0), | |
153 | fHistAsMcSecondaryPtLambdaFromSigma(0), | |
154 | fHistAsMcSecondaryPtAntiLambdaFromSigma(0), | |
155 | fHistSibK0(0), | |
156 | fHistMixK0(0), | |
157 | fHistSibLambda(0), | |
158 | fHistMixLambda(0), | |
159 | fHistSibK0MC(0), | |
160 | fHistMixK0MC(0), | |
161 | fHistSibLambdaMC(0), | |
9bcef488 | 162 | fHistMixLambdaMC(0), |
163 | fHistLeadInfo(0), | |
164 | fHistLeadInfoMC(0), | |
165 | fHistLeadInfoMix(0), | |
166 | fHistLeadInfoMixMC(0) | |
ff0805a7 | 167 | { |
9bcef488 | 168 | |
ff0805a7 | 169 | |
170 | } | |
171 | //--------------------------------------------------------------------------------------- | |
172 | AliLeadingV0Correlation::AliLeadingV0Correlation(const char *name) | |
173 | : AliAnalysisTaskSE(name), | |
174 | fAODEvent(0x0), | |
9bcef488 | 175 | fPoolMgr(0x0), |
176 | fPoolMgrMC(0x0), | |
ff0805a7 | 177 | fPoolK0(0x0), |
178 | fPoolLambda(0x0), | |
9bcef488 | 179 | fPoolK0MC(0x0), |
180 | fPoolLambdaMC(0x0), | |
ff0805a7 | 181 | fPIDResponse(0x0), |
182 | fPoolMaxNEvents(0), | |
183 | fPoolMinNTracks(0), | |
184 | fMinEventsToMix(0), | |
185 | fNzVtxBins(0), | |
186 | fNCentBins(0), | |
9bcef488 | 187 | fcollidingSys(""), |
188 | fTriggerMask(""), | |
ff0805a7 | 189 | fpvzcut(0), |
190 | fTrackEtaCut(0), | |
191 | fFilterBit(128), | |
9bcef488 | 192 | ftrigPtLow(0), |
193 | ftrigPtHigh(0), | |
194 | fassocPtLow(0), | |
195 | fassocPtHigh(0), | |
196 | fAnalysisMC(0), | |
197 | fUsePID(""), | |
198 | fRapidityCut(0), | |
199 | fCutV0Radius(0.), | |
200 | fCutDCANegToPV(0.), | |
201 | fCutDCAPosToPV(0.), | |
202 | fCutDCAV0Daughters(0.), | |
203 | fCutV0CosPA(0.), | |
204 | fSpecialArmenterosCutK0s(0.), | |
205 | fCTauK0(0.), | |
206 | fCTauLambda(0.), | |
207 | fOutputList(0), | |
ff0805a7 | 208 | fHistMCPrimaryVertexX(0), |
209 | fHistMCPrimaryVertexY(0), | |
210 | fHistMCPrimaryVertexZ(0), | |
ff0805a7 | 211 | fHistMCPtAllK0s(0), |
212 | fHistMCPtAllLambda(0), | |
213 | fHistMCPtAllAntiLambda(0), | |
ff0805a7 | 214 | fHistMCRapK0s(0), |
215 | fHistMCRapLambda(0), | |
216 | fHistMCRapAntiLambda(0), | |
217 | fHistMCPtK0s(0), | |
218 | fHistMCPtLambda(0), | |
219 | fHistMCPtAntiLambda(0), | |
220 | fHistMCPtLambdaFromSigma(0), | |
221 | fHistMCPtAntiLambdaFromSigma(0), | |
ff0805a7 | 222 | fHistPrimRawPtVsYK0s(0), |
223 | fHistPrimRawPtVsYLambda(0), | |
224 | fHistPrimRawPtVsYAntiLambda(0), | |
225 | fHistPrimaryVertexX(0), | |
226 | fHistPrimaryVertexY(0), | |
227 | fHistPrimaryVertexZ(0), | |
ff0805a7 | 228 | fHistDcaPosToPrimVertexK0vsMassK0(0), |
229 | fHistDcaNegToPrimVertexK0vsMassK0(0), | |
230 | fHistRadiusV0K0vsMassK0(0), | |
231 | fHistDecayLengthV0K0vsMassK0(0), | |
232 | fHistDcaV0DaughtersK0vsMassK0(0), | |
233 | fHistCosPointAngleK0vsMassK0(0), | |
ff0805a7 | 234 | fHistDcaPosToPrimVertexLvsMassL(0), |
235 | fHistDcaNegToPrimVertexLvsMassL(0), | |
236 | fHistRadiusV0LvsMassL(0), | |
237 | fHistDecayLengthV0LvsMassL(0), | |
238 | fHistDcaV0DaughtersLvsMassL(0), | |
239 | fHistCosPointAngleLvsMassL(0), | |
ff0805a7 | 240 | fHistDcaPosToPrimVertexAntiLvsMass(0), |
241 | fHistDcaNegToPrimVertexAntiLvsMass(0), | |
242 | fHistRadiusV0AntiLvsMass(0), | |
243 | fHistDecayLengthV0AntiLvsMass(0), | |
244 | fHistDcaV0DaughtersAntiLvsMass(0), | |
245 | fHistCosPointAngleAntiLvsMass(0), | |
246 | fHistMassK0(0), | |
247 | fHistMassLambda(0), | |
248 | fHistMassAntiLambda(0), | |
ff0805a7 | 249 | fHistPtVsMassK0(0), |
250 | fHistPtVsMassLambda(0), | |
251 | fHistPtVsMassAntiLambda(0), | |
9bcef488 | 252 | fHistArmenterosPodolanskiK0(0), |
253 | fHistArmenterosPodolanskiLambda(0), | |
254 | fHistArmenterosPodolanskiAntiLambda(0), | |
ff0805a7 | 255 | fHistAsMcPtK0(0), |
256 | fHistAsMcPtLambda(0), | |
257 | fHistAsMcPtAntiLambda(0), | |
258 | fHistAsMcProdRadiusK0(0), | |
259 | fHistAsMcProdRadiusLambda(0), | |
260 | fHistAsMcProdRadiusAntiLambda(0), | |
261 | fHistAsMcProdRadiusXvsYK0s(0), | |
262 | fHistAsMcProdRadiusXvsYLambda(0), | |
263 | fHistAsMcProdRadiusXvsYAntiLambda(0), | |
264 | fHistPidMcMassK0(0), | |
265 | fHistPidMcMassLambda(0), | |
266 | fHistPidMcMassAntiLambda(0), | |
ff0805a7 | 267 | fHistAsMcPtLambdaFromSigma(0), |
268 | fHistAsMcPtAntiLambdaFromSigma(0), | |
269 | fHistAsMcSecondaryPtVsRapK0s(0), | |
270 | fHistAsMcSecondaryPtVsRapLambda(0), | |
271 | fHistAsMcSecondaryPtVsRapAntiLambda(0), | |
272 | fHistAsMcSecondaryProdRadiusK0s(0), | |
273 | fHistAsMcSecondaryProdRadiusLambda(0), | |
274 | fHistAsMcSecondaryProdRadiusAntiLambda(0), | |
275 | fHistAsMcSecondaryProdRadiusXvsYK0s(0), | |
276 | fHistAsMcSecondaryProdRadiusXvsYLambda(0), | |
277 | fHistAsMcSecondaryProdRadiusXvsYAntiLambda(0), | |
278 | fHistAsMcSecondaryPtLambdaFromSigma(0), | |
279 | fHistAsMcSecondaryPtAntiLambdaFromSigma(0), | |
280 | fHistSibK0(0), | |
281 | fHistMixK0(0), | |
282 | fHistSibLambda(0), | |
283 | fHistMixLambda(0), | |
284 | fHistSibK0MC(0), | |
285 | fHistMixK0MC(0), | |
286 | fHistSibLambdaMC(0), | |
9bcef488 | 287 | fHistMixLambdaMC(0), |
288 | fHistLeadInfo(0), | |
289 | fHistLeadInfoMC(0), | |
290 | fHistLeadInfoMix(0), | |
291 | fHistLeadInfoMixMC(0) | |
ff0805a7 | 292 | { |
ff0805a7 | 293 | DefineOutput(1, TList::Class()); |
294 | } | |
295 | ||
296 | //--------------------------------------------------------------------------------------- | |
297 | AliLeadingV0Correlation::~AliLeadingV0Correlation() | |
298 | { | |
299 | // Destructor. Clean-up the output list, but not the histograms that are put inside | |
300 | // (the list is owner and will clean-up these histograms). Protect in PROOF case. | |
301 | if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { | |
302 | delete fOutputList; | |
303 | } | |
304 | } | |
305 | //--------------------------------------------------------------------------------------- | |
306 | void AliLeadingV0Correlation::UserCreateOutputObjects() | |
307 | { | |
9bcef488 | 308 | fOutputList = new TList(); |
309 | fOutputList->SetOwner(); | |
ff0805a7 | 310 | |
311 | Int_t lCustomNBins = 200; | |
312 | Double_t lCustomPtUpperLimit = 20; | |
ff0805a7 | 313 | |
314 | //---------------------------------------------- MC histograms -----------------------------------------------------// | |
9bcef488 | 315 | fHistMCPrimaryVertexX = new TH1F("h1MCPrimaryVertexX", "MC Primary Vertex Position X;Primary Vertex Position X (cm);Events",100,-0.5,0.5); |
ff0805a7 | 316 | fOutputList->Add(fHistMCPrimaryVertexX); |
317 | ||
9bcef488 | 318 | fHistMCPrimaryVertexY = new TH1F("h1MCPrimaryVertexY", "MC Primary Vertex Position Y;Primary Vertex Position Y (cm);Events",100,-0.5,0.5); |
ff0805a7 | 319 | fOutputList->Add(fHistMCPrimaryVertexY); |
320 | ||
9bcef488 | 321 | fHistMCPrimaryVertexZ = new TH1F("h1MCPrimaryVertexZ", "MC Primary Vertex Position Z;Primary Vertex Position Z (cm);Events",200,-20,20); |
ff0805a7 | 322 | fOutputList->Add(fHistMCPrimaryVertexZ); |
9bcef488 | 323 | |
ff0805a7 | 324 | fHistMCRapK0s = new TH1F("h1MCRapK0s", "K^{0};y",160,-4,4); |
325 | fOutputList->Add(fHistMCRapK0s); | |
326 | ||
327 | fHistMCRapLambda = new TH1F("h1MCRapLambda", "#Lambda;y",160,-4,4); | |
328 | fOutputList->Add(fHistMCRapLambda); | |
329 | ||
ff0805a7 | 330 | fHistMCRapAntiLambda = new TH1F("h1MCRapAntiLambda", "#bar{#Lambda};y",160,-4,4); |
331 | fOutputList->Add(fHistMCRapAntiLambda); | |
9bcef488 | 332 | |
333 | fHistMCPtK0s = new TH1F("h1MCPtK0s", "K^{0};p{t} (GeV/c)",240,0,12); | |
ff0805a7 | 334 | fOutputList->Add(fHistMCPtK0s); |
335 | ||
9bcef488 | 336 | fHistMCPtLambda = new TH1F("h1MCPtLambda", "#Lambda^{0};p{t} (GeV/c)",240,0,12); |
ff0805a7 | 337 | fOutputList->Add(fHistMCPtLambda); |
338 | ||
9bcef488 | 339 | fHistMCPtAntiLambda = new TH1F("h1MCPtAntiLambda", "#AntiLambda^{0};p{t} (GeV/c)",240,0,12); |
ff0805a7 | 340 | fOutputList->Add(fHistMCPtAntiLambda); |
9bcef488 | 341 | |
ff0805a7 | 342 | fHistMCPtLambdaFromSigma = new TH1F("h1MCPtLambdaFromSigma", "#Lambda^{0};p{t} (GeV/c)",240,0,12); |
343 | fOutputList->Add(fHistMCPtLambdaFromSigma); | |
344 | ||
345 | fHistMCPtAntiLambdaFromSigma = new TH1F("h1MCPtAntiLambdaFromSigma", "#Lambda^{0};p{t} (GeV/c)",240,0,12); | |
346 | fOutputList->Add(fHistMCPtAntiLambdaFromSigma); | |
347 | ||
9bcef488 | 348 | fHistMCPtAllK0s = new TH1F("h1MCPtAllK0s", "Non-primary MC K^{0};p{t} (GeV/c);Counts",240,0,12); |
ff0805a7 | 349 | fOutputList->Add(fHistMCPtAllK0s); |
350 | ||
9bcef488 | 351 | fHistMCPtAllLambda = new TH1F("h1MCPtAllLambda", "Non-primary MC #Lambda^{0};p{t} (GeV/c);Counts",240,0,12); |
ff0805a7 | 352 | fOutputList->Add(fHistMCPtAllLambda); |
353 | ||
9bcef488 | 354 | fHistMCPtAllAntiLambda = new TH1F("h1MCPtAllAntiLambda", "Non-primary MC #bar{#Lambda}^{0};p{t} (GeV/c);Counts",240,0,12); |
ff0805a7 | 355 | fOutputList->Add(fHistMCPtAllAntiLambda); |
ff0805a7 | 356 | |
9bcef488 | 357 | fHistPrimRawPtVsYK0s = new TH2F( "f3dHistPrimRawPtVsYVsMultK0Short", "Pt{K0S} Vs Y{K0S} Vs Multiplicity; Pt{K0S} (GeV/c); Y{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2); |
ff0805a7 | 358 | fOutputList->Add(fHistPrimRawPtVsYK0s); |
359 | ||
360 | ||
9bcef488 | 361 | fHistPrimRawPtVsYLambda = new TH2F( "f3dHistPrimRawPtVsYVsMultLambda", "Pt{lambda} Vs Y{#Lambda} Vs Multiplicity; Pt{lambda} (GeV/c); Y{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2); |
ff0805a7 | 362 | fOutputList->Add(fHistPrimRawPtVsYLambda); |
363 | ||
9bcef488 | 364 | fHistPrimRawPtVsYAntiLambda = new TH2F( "f3dHistPrimRawPtVsYVsMultAntiLambda", "Pt{antilambda} Vs Y{#Lambda} Vs Multiplicity; Pt{antilambda} (GeV/c); Y{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2); |
ff0805a7 | 365 | fOutputList->Add(fHistPrimRawPtVsYAntiLambda); |
366 | ||
367 | //---------------------------------------------End Of MC Histos-----------------------------------------------------// | |
9bcef488 | 368 | |
369 | fHistPrimaryVertexX = new TH1F("h1PrimaryVertexX", "Primary Vertex Position X;Primary Vertex Position X (cm);Events",100,-0.5,0.5); | |
ff0805a7 | 370 | fOutputList->Add(fHistPrimaryVertexX); |
371 | ||
9bcef488 | 372 | fHistPrimaryVertexY = new TH1F("h1PrimaryVertexY", "Primary Vertex Position Y;Primary Vertex Position Y (cm);Events",100,-0.5,0.5); |
ff0805a7 | 373 | fOutputList->Add(fHistPrimaryVertexY); |
374 | ||
9bcef488 | 375 | fHistPrimaryVertexZ = new TH1F("h1PrimaryVertexZ", "Primary Vertex Position Z;Primary Vertex Position Z (cm);Events",200,-20,20); |
ff0805a7 | 376 | fOutputList->Add(fHistPrimaryVertexZ); |
9bcef488 | 377 | |
ff0805a7 | 378 | fHistDcaPosToPrimVertexK0vsMassK0 = new TH2F("h2DcaPosToPrimVertexK0vsMassK0", "Positive V0 daughter;dca(cm);K0s inv. mass",500,0,10,200,0.4,0.6); |
379 | fOutputList->Add(fHistDcaPosToPrimVertexK0vsMassK0); | |
380 | ||
381 | fHistDcaNegToPrimVertexK0vsMassK0 = new TH2F("h2DcaNegToPrimVertexK0vsMassK0", "Negative V0 daughter;dca(cm);K0s inv. mass",500,0,10,200,0.4,0.6); | |
382 | fOutputList->Add(fHistDcaNegToPrimVertexK0vsMassK0); | |
383 | ||
ff0805a7 | 384 | fHistRadiusV0K0vsMassK0 = new TH2F("h2RadiusV0K0vsMassK0", "Radius;Radius(cm);K0s inv. mass",110,0,110,200,0.4,0.6); |
385 | fOutputList->Add(fHistRadiusV0K0vsMassK0); | |
386 | ||
387 | fHistDecayLengthV0K0vsMassK0 = new TH2F("h2DecayLengthV0K0vsMassK0", "V0s decay Length;decay length(cm);K0s inv. mass", 100, 0, 100,200,0.4,0.6); | |
388 | fOutputList->Add(fHistDecayLengthV0K0vsMassK0); | |
389 | ||
390 | fHistDcaV0DaughtersK0vsMassK0 = new TH2F("h2DcaV0DaughtersK0vsMassK0", "DCA between daughters;dca(cm);K0s inv. mass", 110, 0, 1.1,200,0.4,0.6); | |
391 | fOutputList->Add(fHistDcaV0DaughtersK0vsMassK0); | |
392 | ||
ff0805a7 | 393 | fHistCosPointAngleK0vsMassK0 = new TH2F("h2CosPointAngleK0vsMassK0", "Cosine of V0's pointing angle", 200,0.997,1.007,200,0.4,0.6); |
394 | fOutputList->Add(fHistCosPointAngleK0vsMassK0); | |
ff0805a7 | 395 | |
9bcef488 | 396 | fHistDcaPosToPrimVertexLvsMassL = new TH2F("h2DcaPosToPrimVertexLvsMassL", "Positive V0 daughter;dca(cm);Status",100,0,10,140, 1.06, 1.2); |
ff0805a7 | 397 | fOutputList->Add(fHistDcaPosToPrimVertexLvsMassL); |
398 | ||
9bcef488 | 399 | fHistDcaNegToPrimVertexLvsMassL = new TH2F("h2DcaNegToPrimVertexLvsMassL", "Negative V0 daughter;dca(cm);Status",100,0,10,140, 1.06, 1.2); |
ff0805a7 | 400 | fOutputList->Add(fHistDcaNegToPrimVertexLvsMassL); |
401 | ||
9bcef488 | 402 | fHistRadiusV0LvsMassL = new TH2F("h2RadiusV0LvsMassL", "Radius;Radius(cm);Status",110,0,110,140, 1.06, 1.2); |
ff0805a7 | 403 | fOutputList->Add(fHistRadiusV0LvsMassL); |
404 | ||
9bcef488 | 405 | fHistDecayLengthV0LvsMassL = new TH2F("h2DecayLengthV0LvsMassL", "V0s decay Length;decay length(cm);Status", 120, 0, 120,140, 1.06, 1.2); |
ff0805a7 | 406 | fOutputList->Add(fHistDecayLengthV0LvsMassL); |
407 | ||
9bcef488 | 408 | fHistDcaV0DaughtersLvsMassL = new TH2F("h2DcaV0DaughtersLvsMassL", "DCA between daughters;dca(cm);Status", 110, 0, 1.1,140, 1.06, 1.2); |
ff0805a7 | 409 | fOutputList->Add(fHistDcaV0DaughtersLvsMassL); |
410 | ||
9bcef488 | 411 | fHistCosPointAngleLvsMassL = new TH2F("h2CosPointAngleLvsMassL", "Cosine of V0's pointing angle", 200,0.997,1.007,140, 1.06, 1.2); |
ff0805a7 | 412 | fOutputList->Add(fHistCosPointAngleLvsMassL); |
9bcef488 | 413 | |
414 | fHistDcaPosToPrimVertexAntiLvsMass = new TH2F("h2DcaPosToPrimVertexAntiLvsMass", "Positive V0 daughter;dca(cm);Status",100,0,10,140, 1.06, 1.2); | |
ff0805a7 | 415 | fOutputList->Add(fHistDcaPosToPrimVertexAntiLvsMass); |
416 | ||
9bcef488 | 417 | fHistDcaNegToPrimVertexAntiLvsMass = new TH2F("h2DcaNegToPrimVertexAntiLvsMass", "Negative V0 daughter;dca(cm);Status",100,0,10,140, 1.06, 1.2); |
ff0805a7 | 418 | fOutputList->Add(fHistDcaNegToPrimVertexAntiLvsMass); |
9bcef488 | 419 | |
420 | fHistRadiusV0AntiLvsMass = new TH2F("h2RadiusV0AntiLvsMass", "Radius;Radius(cm);Status",110,0,110,140, 1.06, 1.2); | |
ff0805a7 | 421 | fOutputList->Add(fHistRadiusV0AntiLvsMass); |
422 | ||
9bcef488 | 423 | fHistDecayLengthV0AntiLvsMass = new TH2F("h2DecayLengthV0AntiLvsMass", "V0s decay Length;decay length(cm);Status", 120, 0, 120,140, 1.06, 1.2); |
ff0805a7 | 424 | fOutputList->Add(fHistDecayLengthV0AntiLvsMass); |
425 | ||
9bcef488 | 426 | fHistDcaV0DaughtersAntiLvsMass = new TH2F("h2DcaV0DaughtersAntiLvsMass", "DCA between daughters;dca(cm);Status", 110, 0, 1.1,140, 1.06, 1.2); |
ff0805a7 | 427 | fOutputList->Add(fHistDcaV0DaughtersAntiLvsMass); |
428 | ||
9bcef488 | 429 | fHistCosPointAngleAntiLvsMass = new TH2F("h2CosPointAngleAntiLvsMass", "Cosine of V0's pointing angle", 200,0.997,1.007,140, 1.06, 1.2); |
ff0805a7 | 430 | fOutputList->Add(fHistCosPointAngleAntiLvsMass); |
431 | ||
9bcef488 | 432 | fHistMassK0 = new TH1F("h1MassK0", "K^{0} candidates;M(#pi^{+}#pi^{-}) (GeV/c^{2});Counts", 200, 0.4, 0.6); |
ff0805a7 | 433 | fOutputList->Add(fHistMassK0); |
434 | ||
9bcef488 | 435 | fHistMassLambda = new TH1F("h1MassLambda", "#Lambda^{0} candidates;M(p#pi^{-}) (GeV/c^{2});Counts", 150, 1.05, 1.2); |
ff0805a7 | 436 | fOutputList->Add(fHistMassLambda); |
437 | ||
9bcef488 | 438 | fHistMassAntiLambda = new TH1F("h1MassAntiLambda", "#bar{#Lambda}^{0} candidates;M(#bar{p}#pi^{+}) (GeV/c^{2});Counts", 150, 1.05, 1.2); |
ff0805a7 | 439 | fOutputList->Add(fHistMassAntiLambda); |
440 | ||
9bcef488 | 441 | fHistPtVsMassK0 = new TH2F("h2PtVsMassK0","K^{0} candidates;M(#pi^{+}#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",400, 0.4, 0.6,240,0,12); |
ff0805a7 | 442 | fOutputList->Add(fHistPtVsMassK0); |
443 | ||
9bcef488 | 444 | fHistPtVsMassLambda = new TH2F("h2PtVsMassLambda","#Lambda^{0} candidates;M(p#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",280, 1.06, 1.2,240,0,12); |
ff0805a7 | 445 | fOutputList->Add(fHistPtVsMassLambda); |
446 | ||
9bcef488 | 447 | fHistPtVsMassAntiLambda = new TH2F("h2PtVsMassAntiLambda","#AntiLambda^{0} candidates;M(p#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",280, 1.06, 1.2,240,0,12); |
ff0805a7 | 448 | fOutputList->Add(fHistPtVsMassAntiLambda); |
449 | ||
9bcef488 | 450 | fHistArmenterosPodolanskiK0 = new TH2F("h2ArmenterosPodolanskiK0","Armenteros-Podolanski phase space;#alpha;p{t} arm",100,-1.0,1.0,50,0,0.5); |
451 | fOutputList->Add(fHistArmenterosPodolanskiK0); | |
ff0805a7 | 452 | |
9bcef488 | 453 | fHistArmenterosPodolanskiLambda = new TH2F("h2ArmenterosPodolanskiLambda","Armenteros-Podolanski phase space;#alpha;p{t} arm",100,-1.0,1.0,50,0,0.5); |
454 | fOutputList->Add(fHistArmenterosPodolanskiLambda); | |
ff0805a7 | 455 | |
9bcef488 | 456 | fHistArmenterosPodolanskiAntiLambda = new TH2F("h2ArmenterosPodolanskiAntiLambda","Armenteros-Podolanski phase space;#alpha;p{t} arm",100,-1.0,1.0,50,0,0.5); |
457 | fOutputList->Add(fHistArmenterosPodolanskiAntiLambda); | |
ff0805a7 | 458 | |
459 | //--------------------------------------------MC Associated histograms -----------------------------------------------------// | |
460 | ||
9bcef488 | 461 | fHistAsMcPtK0 = new TH1F("h1AsMcPtK0", "K^{0} associated;p{t} (GeV/c);Counts", 240,0,12); |
ff0805a7 | 462 | fOutputList->Add(fHistAsMcPtK0); |
463 | ||
9bcef488 | 464 | fHistAsMcPtLambda = new TH1F("h1AsMcPtLambda", "#Lambda^{0} associated;p{t} (GeV/c);Counts", 240,0,12); |
ff0805a7 | 465 | fOutputList->Add(fHistAsMcPtLambda); |
466 | ||
9bcef488 | 467 | fHistAsMcPtAntiLambda = new TH1F("h1AsMcPtAntiLambda", "#AntiLambda^{0} associated;p{t} (GeV/c);Counts", 240,0,12); |
ff0805a7 | 468 | fOutputList->Add(fHistAsMcPtAntiLambda); |
469 | ||
9bcef488 | 470 | fHistAsMcProdRadiusK0 = new TH1F("h1AsMcProdRadiusK0", "K^{0} associated;r (cm);Counts", 500, 0, 100); |
ff0805a7 | 471 | fOutputList->Add(fHistAsMcProdRadiusK0); |
472 | ||
9bcef488 | 473 | fHistAsMcProdRadiusLambda = new TH1F("h1AsMcProdRadiusLambda", "#Lambda^{0} associated;r (cm);Counts", 500, 0, 100); |
ff0805a7 | 474 | fOutputList->Add(fHistAsMcProdRadiusLambda); |
475 | ||
9bcef488 | 476 | fHistAsMcProdRadiusAntiLambda = new TH1F("h1AsMcProdRadiusAntiLambda", "#bar{#Lambda}^{0} associated;r (cm);Counts", 500, 0, 100); |
ff0805a7 | 477 | fOutputList->Add(fHistAsMcProdRadiusAntiLambda); |
478 | ||
9bcef488 | 479 | fHistAsMcProdRadiusXvsYK0s = new TH2F("h2AsMcProdRadiusXvsYK0s","Associated Secondary K^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50); |
ff0805a7 | 480 | fOutputList->Add(fHistAsMcProdRadiusXvsYK0s); |
481 | ||
9bcef488 | 482 | fHistAsMcProdRadiusXvsYLambda = new TH2F("h2AsMcProdRadiusXvsYLambda","Associated Secondary #Lambda^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50); |
ff0805a7 | 483 | fOutputList->Add(fHistAsMcProdRadiusXvsYLambda); |
484 | ||
9bcef488 | 485 | fHistAsMcProdRadiusXvsYAntiLambda = new TH2F("h2AsMcProdRadiusXvsYAntiLambda","Associated Secondary #bar{#Lambda}^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50); |
ff0805a7 | 486 | fOutputList->Add(fHistAsMcProdRadiusXvsYAntiLambda); |
487 | ||
9bcef488 | 488 | fHistPidMcMassK0 = new TH1F("h1PidMcMassK0", "K^{0} MC PId checked;M(#pi^{+}#pi^{-}) (GeV/c^{2});Counts", 100, 0.4, 0.6); |
ff0805a7 | 489 | fOutputList->Add(fHistPidMcMassK0); |
490 | ||
9bcef488 | 491 | fHistPidMcMassLambda = new TH1F("h1PidMcMassLambda", "#Lambda^{0} MC PId checked;M(p#pi^{-}) (GeV/c^{2});Counts", 75, 1.05, 1.2); |
ff0805a7 | 492 | fOutputList->Add(fHistPidMcMassLambda); |
493 | ||
9bcef488 | 494 | fHistPidMcMassAntiLambda = new TH1F("h1PidMcMassAntiLambda", "#bar{#Lambda}^{0} MC PId checked;M(#bar{p}#pi^{+}) (GeV/c^{2});Counts", 75, 1.05, 1.2); |
ff0805a7 | 495 | fOutputList->Add(fHistPidMcMassAntiLambda); |
496 | ||
9bcef488 | 497 | fHistAsMcPtLambdaFromSigma = new TH1F("h1AsMcPtLambdaFromSigma","#Lambda}^{0} associated from Sigma;p{t} (GeV/c);Count",240,0,12); |
ff0805a7 | 498 | fOutputList->Add(fHistAsMcPtLambdaFromSigma); |
499 | ||
9bcef488 | 500 | fHistAsMcPtAntiLambdaFromSigma = new TH1F("h1AsMcPtAntiLambdaFromSigma","#bar{#Lambda}^{0} associated from Sigma;p{t} (GeV/c);Count",240,0,12); |
ff0805a7 | 501 | fOutputList->Add(fHistAsMcPtAntiLambdaFromSigma); |
502 | ||
9bcef488 | 503 | fHistAsMcSecondaryPtVsRapK0s = new TH2F("h2AsMcSecondaryPtVsRapK0s", "K^{0} associated secondary;p{t} (GeV/c);rapidity",240,0,12,30,-1.5,1.5); |
ff0805a7 | 504 | fOutputList->Add(fHistAsMcSecondaryPtVsRapK0s); |
505 | ||
9bcef488 | 506 | fHistAsMcSecondaryPtVsRapLambda = new TH2F("h2AsMcSecondaryPtVsRapLambda", "#Lambda^{0} associated secondary;p{t} (GeV/c);rapidity",240,0,12,30,-1.5,1.5); |
ff0805a7 | 507 | fOutputList->Add(fHistAsMcSecondaryPtVsRapLambda); |
508 | ||
9bcef488 | 509 | fHistAsMcSecondaryPtVsRapAntiLambda = new TH2F("h2AsMcSecondaryPtVsRapAntiLambda", "#bar{#Lambda}^{0} associated secondary;p{t} (GeV/c);rapidity",240,0,12,30,-1.5,1.5); |
ff0805a7 | 510 | fOutputList->Add(fHistAsMcSecondaryPtVsRapAntiLambda); |
9bcef488 | 511 | |
512 | fHistAsMcSecondaryProdRadiusK0s = new TH1F("h1AsMcSecondaryProdRadiusK0s", "K^{0} Production Radius;r (cm);Count", 170, -2, 15); | |
ff0805a7 | 513 | fOutputList->Add(fHistAsMcSecondaryProdRadiusK0s); |
514 | ||
9bcef488 | 515 | fHistAsMcSecondaryProdRadiusLambda = new TH1F("h1AsMcSecondaryProdRadiusLambda", "#Lambda^{0} Production Radius;r (cm);Count", 170, -2, 15); |
ff0805a7 | 516 | fOutputList->Add(fHistAsMcSecondaryProdRadiusLambda); |
517 | ||
518 | fHistAsMcSecondaryProdRadiusAntiLambda = new TH1F("h1AsMcSecondaryProdRadiusAntiLambda", "#bar{#Lambda}^{0} Production Radius;r (cm);Count", 170, -2, 15); | |
519 | fOutputList->Add(fHistAsMcSecondaryProdRadiusAntiLambda); | |
520 | ||
521 | fHistAsMcSecondaryProdRadiusXvsYK0s = new TH2F("h2AsMcSecondaryProdRadiusXvsYK0s","Associated Secondary K^{0} Production Radius;x (cm); y (cm)",200,-20,20,200,-20,20); | |
522 | fOutputList->Add(fHistAsMcSecondaryProdRadiusXvsYK0s); | |
523 | ||
524 | fHistAsMcSecondaryProdRadiusXvsYLambda = new TH2F("h2AsMcSecondaryProdRadiusXvsYLambda","Associated Secondary #Lambda^{0} Production Radius;x (cm); y (cm)",200,-20,20,200,-20,20); | |
525 | fOutputList->Add(fHistAsMcSecondaryProdRadiusXvsYLambda); | |
526 | ||
527 | fHistAsMcSecondaryProdRadiusXvsYAntiLambda = new TH2F("h2AsMcSecondaryProdRadiusXvsYAntiLambda","Associated Secondary #bar{#Lambda}^{0} Production Radius;x (cm); y (cm)",200,-20,20,200,-20,20); | |
528 | fOutputList->Add(fHistAsMcSecondaryProdRadiusXvsYAntiLambda); | |
9bcef488 | 529 | |
ff0805a7 | 530 | fHistAsMcSecondaryPtLambdaFromSigma = new TH1F("h1AsMcSecondaryPtLambdaFromSigma","#Lambda}^{0} associated from Sigma;p{t} (GeV/c);Count",240,0,12); |
531 | fOutputList->Add(fHistAsMcSecondaryPtLambdaFromSigma); | |
532 | ||
533 | fHistAsMcSecondaryPtAntiLambdaFromSigma = new TH1F("h1AsMcSecondaryPtAntiLambdaFromSigma","#bar{#Lambda}^{0} associated from Sigma;p{t} (GeV/c);Count",240,0,12); | |
534 | fOutputList->Add(fHistAsMcSecondaryPtAntiLambdaFromSigma); | |
535 | ||
ff0805a7 | 536 | //----------------------------------------------Correlation histograms -----------------------------------------------------// |
537 | ||
9bcef488 | 538 | fHistSibK0 = new TH3F("hfHistSibK0","",CorrBinsX,-TMath::Pi()/2,3*TMath::Pi()/2,CorrBinsY,-2*fTrackEtaCut,2*fTrackEtaCut,30,0,6); |
ff0805a7 | 539 | fHistSibK0->SetStats(0); |
540 | fHistSibK0->Sumw2(); | |
541 | fOutputList->Add(fHistSibK0); | |
542 | ||
9bcef488 | 543 | fHistMixK0 = new TH3F("hfHistMixK0","",CorrBinsX,-TMath::Pi()/2,3*TMath::Pi()/2,CorrBinsY,-2*fTrackEtaCut,2*fTrackEtaCut,30,0,6); |
ff0805a7 | 544 | fHistMixK0->SetStats(0); |
545 | fHistMixK0->Sumw2(); | |
546 | fOutputList->Add(fHistMixK0); | |
547 | ||
9bcef488 | 548 | fHistSibLambda = new TH3F("hfHistSibLambda","",CorrBinsX,-TMath::Pi()/2,3*TMath::Pi()/2,CorrBinsY,-2*fTrackEtaCut,2*fTrackEtaCut,30,0,6); |
ff0805a7 | 549 | fHistSibLambda->SetStats(0); |
550 | fHistSibLambda->Sumw2(); | |
551 | fOutputList->Add(fHistSibLambda); | |
552 | ||
9bcef488 | 553 | fHistMixLambda = new TH3F("hfHistMixLambda","",CorrBinsX,-TMath::Pi()/2,3*TMath::Pi()/2,CorrBinsY,-2*fTrackEtaCut,2*fTrackEtaCut,30,0,6); |
ff0805a7 | 554 | fHistMixLambda->SetXTitle("#Delta #Phi"); |
555 | fHistMixLambda->SetStats(0); | |
556 | fHistMixLambda->Sumw2(); | |
557 | fOutputList->Add(fHistMixLambda); | |
558 | ||
9bcef488 | 559 | fHistSibK0MC = new TH3F("hfHistSibK0MC","",CorrBinsX,-TMath::Pi()/2,3*TMath::Pi()/2,CorrBinsY,-2*fTrackEtaCut,2*fTrackEtaCut,30,0,6); |
ff0805a7 | 560 | fHistSibK0MC->SetStats(0); |
561 | fHistSibK0MC->Sumw2(); | |
562 | fOutputList->Add(fHistSibK0MC); | |
563 | ||
9bcef488 | 564 | fHistMixK0MC = new TH3F("hfHistMixK0MC","",CorrBinsX,-TMath::Pi()/2,3*TMath::Pi()/2,CorrBinsY,-2*fTrackEtaCut,2*fTrackEtaCut,30,0,6); |
ff0805a7 | 565 | fHistMixK0MC->SetStats(0); |
566 | fHistMixK0MC->Sumw2(); | |
567 | fOutputList->Add(fHistMixK0MC); | |
568 | ||
9bcef488 | 569 | fHistSibLambdaMC = new TH3F("hfHistSibLambdaMC","",CorrBinsX,-TMath::Pi()/2,3*TMath::Pi()/2,CorrBinsY,-2*fTrackEtaCut,2*fTrackEtaCut,30,0,6); |
ff0805a7 | 570 | fHistSibLambdaMC->SetStats(0); |
571 | fHistSibLambdaMC->Sumw2(); | |
572 | fOutputList->Add(fHistSibLambdaMC); | |
573 | ||
9bcef488 | 574 | fHistMixLambdaMC = new TH3F("hfHistMixLambdaMC","",CorrBinsX,-TMath::Pi()/2,3*TMath::Pi()/2,CorrBinsY,-2*fTrackEtaCut,2*fTrackEtaCut,30,0,6); |
ff0805a7 | 575 | fHistMixLambdaMC->SetStats(0); |
576 | fHistMixLambdaMC->Sumw2(); | |
577 | fOutputList->Add(fHistMixLambdaMC); | |
578 | ||
9bcef488 | 579 | fHistLeadInfo = new TH3F("hfHistLeadInfo","",60,0,12,CorrBinsY/2,-fTrackEtaCut,fTrackEtaCut,CorrBinsX/2,0,3*TMath::Pi()); |
580 | fOutputList->Add(fHistLeadInfo); | |
581 | ||
582 | fHistLeadInfoMC = new TH3F("hfHistLeadInfoMC","",60,0,12,CorrBinsY/2,-fTrackEtaCut,fTrackEtaCut,CorrBinsX/2,0,3*TMath::Pi()); | |
583 | fOutputList->Add(fHistLeadInfoMC); | |
584 | ||
585 | fHistLeadInfoMix = new TH3F("hfHistLeadInfoMix","",60,0,12,CorrBinsY/2,-fTrackEtaCut,fTrackEtaCut,CorrBinsX/2,0,3*TMath::Pi()); | |
586 | fOutputList->Add(fHistLeadInfoMix); | |
587 | ||
588 | fHistLeadInfoMixMC = new TH3F("hfHistLeadInfoMixMC","",60,0,12,CorrBinsY/2,-fTrackEtaCut,fTrackEtaCut,CorrBinsX/2,0,3*TMath::Pi()); | |
589 | fOutputList->Add(fHistLeadInfoMixMC); | |
590 | ||
ff0805a7 | 591 | //----------------------------------------------Event Pool-----------------------------------------------------// |
592 | ||
593 | fPoolMgr = new AliEventPoolManager(fPoolMaxNEvents, fPoolMinNTracks, fNCentBins, fCentBins, fNzVtxBins, fZvtxBins); | |
594 | if(!fPoolMgr) return; | |
595 | ||
9bcef488 | 596 | if(fAnalysisMC){ |
597 | fPoolMgrMC = new AliEventPoolManager(fPoolMaxNEvents, fPoolMinNTracks, fNCentBins, fCentBins, fNzVtxBins, fZvtxBins); | |
598 | if(!fPoolMgr) return; | |
599 | } | |
600 | ||
ff0805a7 | 601 | PostData(1, fOutputList); |
602 | ||
603 | } | |
604 | //--------------------------------------------------------------------------------------- | |
605 | void AliLeadingV0Correlation::UserExec(Option_t *) | |
606 | { | |
607 | ||
608 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
609 | AliInputEventHandler *inEvMain = (AliInputEventHandler*)(mgr->GetInputEventHandler()); | |
610 | if (!inEvMain) return; | |
611 | ||
612 | // Pointers to PID Response objects. | |
9bcef488 | 613 | fPIDResponse = inEvMain->GetPIDResponse(); |
614 | if(!fPIDResponse) return; | |
615 | ||
ff0805a7 | 616 | fAODEvent = dynamic_cast<AliAODEvent*>(inEvMain->GetEvent()); |
617 | if(!fAODEvent) return; | |
618 | ||
ff0805a7 | 619 | // physics selection |
620 | UInt_t maskIsSelected = inEvMain->IsEventSelected(); | |
9bcef488 | 621 | Bool_t isSelected = 0; |
622 | ||
623 | if( fTriggerMask == "kMB" ) | |
624 | isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB; | |
625 | if( fTriggerMask == "kINT7" ) | |
626 | isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7; | |
627 | if( fTriggerMask == "kINT8" ) | |
628 | isSelected = (maskIsSelected & AliVEvent::kINT8) == AliVEvent::kINT8; | |
629 | if( fTriggerMask == "kAnyINT" ) | |
630 | isSelected = (maskIsSelected & AliVEvent::kAnyINT) == AliVEvent::kAnyINT; | |
631 | if ( ! isSelected )return; | |
ff0805a7 | 632 | |
633 | //-----------------------------MC Accsess------------------------------------------------ | |
634 | TClonesArray *stack = 0x0; | |
635 | Double_t mcXv=0., mcYv=0., mcZv=0.; | |
636 | Int_t ntrk =0, ntrk0=0; | |
637 | ||
9bcef488 | 638 | TObjArray *selectedTracksLeadingMC =0x0; |
ff0805a7 | 639 | |
640 | TObjArray * selectedK0MC =new TObjArray; | |
641 | selectedK0MC->SetOwner(kTRUE); | |
642 | ||
643 | TObjArray * selectedLambdaMC =new TObjArray; | |
644 | selectedLambdaMC->SetOwner(kTRUE); | |
645 | ||
646 | if (fAnalysisMC) { | |
9bcef488 | 647 | |
ff0805a7 | 648 | TList *lst = fAODEvent->GetList(); |
649 | stack = (TClonesArray*)lst->FindObject(AliAODMCParticle::StdBranchName()); | |
650 | if (!stack) {Printf("ERROR: stack not available");return;} | |
651 | ||
652 | AliAODMCHeader *mcHdr=(AliAODMCHeader*)lst->FindObject(AliAODMCHeader::StdBranchName()); | |
653 | mcXv=mcHdr->GetVtxX(); mcYv=mcHdr->GetVtxY(); mcZv=mcHdr->GetVtxZ(); | |
654 | ntrk=stack->GetEntriesFast(), ntrk0=ntrk; | |
655 | if(TMath::Abs(mcZv)>fpvzcut)return; | |
656 | ||
9bcef488 | 657 | selectedTracksLeadingMC = FindLeadingObjectsMC(stack); |
658 | if(!selectedTracksLeadingMC) return; | |
659 | selectedTracksLeadingMC->SetOwner(kTRUE); | |
ff0805a7 | 660 | } |
661 | ||
662 | // If PID is used: | |
9bcef488 | 663 | Double_t lLimitPPID = 1.0; |
664 | Float_t cutNSigmaLowP = 3.0; | |
665 | Float_t cutNSigmaHighP = 3.0; | |
666 | Int_t lPdgcodeCurrentPart = 0; | |
667 | Double_t lRapCurrentPart = 0; | |
668 | Double_t lPtCurrentPart = 0; | |
669 | Double_t lPhiCurrentPart = 0; | |
670 | Double_t lEtaCurrentPart = 0; | |
671 | Int_t lComeFromSigma = 0; | |
ff0805a7 | 672 | |
673 | // PID flags: | |
674 | Int_t LambdaPID = 0; | |
675 | Int_t AntiLambdaPID = 0; | |
676 | ||
ff0805a7 | 677 | // current mc particle 's mother |
678 | Int_t iCurrentMother = 0, lPdgCurrentMother = 0; | |
ff0805a7 | 679 | |
ff0805a7 | 680 | // Start loop over MC particles |
681 | if (fAnalysisMC) { | |
682 | ||
ff0805a7 | 683 | fHistMCPrimaryVertexX->Fill(mcXv); |
684 | fHistMCPrimaryVertexY->Fill(mcYv); | |
685 | fHistMCPrimaryVertexZ->Fill(mcZv); | |
686 | ||
ff0805a7 | 687 | for (Int_t iMc = 0; iMc < (ntrk); iMc++) { |
688 | AliAODMCParticle *p0=(AliAODMCParticle*)stack->UncheckedAt(iMc); | |
689 | if (!p0) continue; | |
690 | ||
691 | lPdgcodeCurrentPart = p0->GetPdgCode(); | |
692 | ||
693 | // Keep only K0s, Lambda and AntiLambda, Xi and Phi: | |
694 | if ( (lPdgcodeCurrentPart != 310 ) && (lPdgcodeCurrentPart != 3122 ) && (lPdgcodeCurrentPart != -3122 ) && (lPdgcodeCurrentPart != 3312 ) && (lPdgcodeCurrentPart != -3312) && (lPdgcodeCurrentPart != -333) ) continue; | |
695 | ||
696 | lRapCurrentPart = p0->Y(); | |
697 | lPtCurrentPart = p0->Pt(); | |
698 | lPhiCurrentPart = p0->Phi(); | |
699 | lEtaCurrentPart = p0->Eta(); | |
700 | iCurrentMother = p0->GetMother(); | |
701 | ||
702 | AliAODMCParticle *Mother = (AliAODMCParticle*)stack->UncheckedAt(iCurrentMother); | |
703 | if (iCurrentMother == -1){lPdgCurrentMother=0; } else {lPdgCurrentMother = Mother->GetPdgCode();} | |
704 | ||
9bcef488 | 705 | if (( ( TMath::Abs(lPdgCurrentMother) == 3212) || |
706 | ( TMath::Abs(lPdgCurrentMother) == 3224) || | |
707 | ( TMath::Abs(lPdgCurrentMother) == 3214) || | |
708 | ( TMath::Abs(lPdgCurrentMother) == 3114) ) | |
ff0805a7 | 709 | && ( Mother->GetMother() == -1) |
710 | ) lComeFromSigma = 1; | |
9bcef488 | 711 | else lComeFromSigma = 0; |
ff0805a7 | 712 | |
9bcef488 | 713 | Bool_t isPrimary=p0->IsPhysicalPrimary(); |
714 | if (!isPrimary)continue; //keep only primary particles | |
ff0805a7 | 715 | |
716 | // Rapidity Cut | |
717 | if (TMath::Abs(lRapCurrentPart) > fRapidityCut) continue; | |
718 | ||
719 | if (lPdgcodeCurrentPart==310) { | |
720 | fHistMCRapK0s->Fill(lRapCurrentPart); | |
ff0805a7 | 721 | fHistMCPtK0s->Fill(lPtCurrentPart); |
ff0805a7 | 722 | fHistPrimRawPtVsYK0s->Fill(lPtCurrentPart,lRapCurrentPart); |
9bcef488 | 723 | fHistMCPtAllK0s->Fill(lPtCurrentPart); |
ff0805a7 | 724 | selectedK0MC->Add(new AliLeadingBasicParticle(lEtaCurrentPart,lPhiCurrentPart,lPtCurrentPart)); |
725 | } | |
726 | else | |
727 | if (lPdgcodeCurrentPart==3122) { | |
728 | fHistMCRapLambda->Fill(lRapCurrentPart); | |
ff0805a7 | 729 | fHistMCPtLambda->Fill(lPtCurrentPart); |
ff0805a7 | 730 | fHistPrimRawPtVsYLambda->Fill(lPtCurrentPart,lRapCurrentPart); |
9bcef488 | 731 | fHistMCPtAllLambda->Fill(lPtCurrentPart); |
ff0805a7 | 732 | if (lComeFromSigma) fHistMCPtLambdaFromSigma->Fill(lPtCurrentPart); |
733 | selectedLambdaMC->Add(new AliLeadingBasicParticle(lEtaCurrentPart,lPhiCurrentPart,lPtCurrentPart)); | |
734 | ||
735 | } | |
736 | else | |
737 | if (lPdgcodeCurrentPart==-3122) { | |
738 | fHistMCRapAntiLambda->Fill(lRapCurrentPart); | |
ff0805a7 | 739 | fHistMCPtAntiLambda->Fill(lPtCurrentPart); |
ff0805a7 | 740 | fHistPrimRawPtVsYAntiLambda->Fill(lPtCurrentPart,lRapCurrentPart); |
9bcef488 | 741 | fHistMCPtAllAntiLambda->Fill(lPtCurrentPart); |
ff0805a7 | 742 | if (lComeFromSigma) fHistMCPtAntiLambdaFromSigma->Fill(lPtCurrentPart); |
743 | } | |
744 | ||
745 | } // end loop AOD MC | |
ff0805a7 | 746 | } // End Loop over MC condition |
747 | ||
748 | //----------------------------------------------------------------------------------------- | |
749 | ||
750 | // Vertex cut | |
751 | Double_t lPrimaryVtxPosition[3]; | |
752 | AliAODVertex *myPrimVertex = fAODEvent->GetPrimaryVertex(); | |
753 | if (!myPrimVertex) return; | |
754 | myPrimVertex->GetXYZ(lPrimaryVtxPosition); | |
755 | ||
756 | Double_t lPVx = lPrimaryVtxPosition[0]; | |
757 | Double_t lPVy = lPrimaryVtxPosition[1]; | |
758 | Double_t lPVz = lPrimaryVtxPosition[2]; | |
759 | if ((TMath::Abs(lPVz)) >= fpvzcut) return ; | |
760 | ||
761 | if (TMath::Abs(lPVx)<10e-5 && TMath::Abs(lPVy)<10e-5 && TMath::Abs(lPVz)<10e-5) return; | |
762 | ||
ff0805a7 | 763 | fHistPrimaryVertexX->Fill(lPVx); |
764 | fHistPrimaryVertexY->Fill(lPVy); | |
765 | fHistPrimaryVertexZ->Fill(lPVz); | |
766 | ||
767 | // Centrality definition | |
768 | AliCentrality *centralityObj = 0; | |
769 | Int_t multiplicity = -1; | |
770 | Double_t MultipOrCent = -1; | |
771 | ||
772 | // initialize the pool for event mixing | |
773 | if(fcollidingSys=="PP"){ | |
774 | multiplicity = fAODEvent->GetNTracks(); | |
775 | MultipOrCent = multiplicity; // convert from Int_t to Double_t | |
776 | } | |
777 | if(fcollidingSys=="PbPb"){ | |
778 | centralityObj = fAODEvent->GetHeader()->GetCentralityP(); | |
779 | MultipOrCent = centralityObj->GetCentralityPercentileUnchecked("V0M"); | |
9bcef488 | 780 | if ((MultipOrCent < 0.)||(MultipOrCent > 90.)) return; |
ff0805a7 | 781 | } |
782 | ||
783 | Double_t * CentBins = fCentBins; | |
9bcef488 | 784 | Double_t poolmin = CentBins[0]; |
785 | Double_t poolmax = CentBins[fNCentBins]; | |
ff0805a7 | 786 | |
9bcef488 | 787 | TObjArray *selectedTracksLeading = FindLeadingObjects(fAODEvent); |
788 | if(!selectedTracksLeading) return; | |
789 | selectedTracksLeading->SetOwner(kTRUE); | |
ff0805a7 | 790 | |
791 | // -------------------------------------V0 loop for reconstructed event------------------------ | |
9bcef488 | 792 | Double_t lPLambda = 0; |
ff0805a7 | 793 | Double_t lPAntiLambda = 0; |
9bcef488 | 794 | Double_t lPK0s = 0; |
ff0805a7 | 795 | |
796 | // Variables: | |
797 | Double_t lV0Position[3]; | |
798 | ||
799 | Double_t lDcaPosToPrimVertex = 0; | |
800 | Double_t lDcaNegToPrimVertex = 0; | |
801 | Double_t lDcaV0Daughters = 0; | |
802 | Double_t lV0cosPointAngle = 0; | |
ff0805a7 | 803 | Double_t lV0DecayLength = 0; |
804 | Double_t lV0Radius = 0; | |
805 | Double_t lDcaV0ToPrimVertex = 0; | |
806 | Double_t lcTauLambda = 0; | |
807 | Double_t lcTauAntiLambda = 0; | |
808 | Double_t lcTauK0s = 0; | |
ff0805a7 | 809 | |
810 | Double_t lInvMassK0 = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0; | |
811 | Double_t lPtK0s = 0, lPtLambda = 0, lPtAntiLambda = 0; | |
812 | Double_t lPhiK0s = 0, lPhiLambda = 0, lPhiAntiLambda = 0; | |
813 | Double_t lEtaK0s = 0, lEtaLambda = 0, lEtaAntiLambda = 0; | |
814 | Double_t lRapK0s = 0, lRapLambda = 0, lRapAntiLambda = 0; | |
815 | Double_t lPzK0s = 0, lPzLambda = 0, lPzAntiLambda = 0; | |
816 | Double_t lAlphaV0 = 0, lPtArmV0 = 0; | |
817 | ||
ff0805a7 | 818 | //Associated V0s: |
819 | ||
820 | UInt_t lLabelTrackPos = 0, lLabelTrackNeg = 0; | |
821 | Int_t lCheckPIdK0Short = 0, lCheckMcK0Short = 0; | |
822 | Int_t lCheckPIdLambda = 0, lCheckMcLambda = 0; | |
823 | Int_t lCheckPIdAntiLambda = 0, lCheckMcAntiLambda = 0; | |
824 | Int_t lCheckSecondaryK0s = 0, lCheckSecondaryLambda = 0, lCheckSecondaryAntiLambda = 0; | |
ff0805a7 | 825 | Double_t mcPosMotherX = 0, mcPosMotherY = 0, mcPosMotherZ = 0; |
826 | Double_t mcPosMotherR = 0; | |
827 | Double_t mcMotherPt = 0; | |
828 | ||
829 | Int_t lIndexPosMother = 0; | |
830 | Int_t lIndexNegMother = 0; | |
831 | Int_t lIndexMotherOfMother = 0; | |
832 | Int_t lPDGCodePosDaughter = 0; | |
833 | Int_t lPDGCodeNegDaughter = 0; | |
834 | Int_t lPdgcodeMother = 0; | |
835 | Int_t lPdgcodeMotherOfMother = 0; | |
836 | ||
ff0805a7 | 837 | // Daughters' momentum: |
838 | Double_t lMomPos[3] = {999,999,999}; | |
839 | Double_t lMomNeg[3] = {999,999,999}; | |
840 | Double_t lPtPos = 999, lPtNeg = 999; | |
ff0805a7 | 841 | |
842 | // Inner Wall parameters: | |
843 | Double_t lMomInnerWallPos =999, lMomInnerWallNeg = 999; | |
9bcef488 | 844 | Double_t ldEdxPos =0.0, ldEdxNeg = 0.0; |
ff0805a7 | 845 | |
846 | // PID | |
847 | Float_t nSigmaPosPion = 0; | |
848 | Float_t nSigmaNegPion = 0; | |
ff0805a7 | 849 | Float_t nSigmaPosProton = 0; |
850 | Float_t nSigmaNegProton = 0; | |
851 | ||
852 | ||
853 | Int_t lCheckPIDK0sPosDaughter = 0, lCheckPIDK0sNegDaughter = 0; | |
854 | Int_t lCheckPIDLambdaPosDaughter = 0, lCheckPIDLambdaNegDaughter = 0; | |
855 | Int_t lCheckPIDAntiLambdaPosDaughter = 0, lCheckPIDAntiLambdaNegDaughter = 0; | |
856 | ||
857 | //--------------------------------------------------------------------------------------------- | |
858 | TObjArray * selectedK0 = new TObjArray; | |
859 | selectedK0->SetOwner(kTRUE); | |
860 | ||
861 | TObjArray * selectedLambda = new TObjArray; | |
862 | selectedLambda->SetOwner(kTRUE); | |
863 | ||
864 | Int_t nV0s = fAODEvent->GetNumberOfV0s(); | |
865 | ||
866 | for (Int_t i = 0; i < nV0s; i++) | |
867 | { // start of V0 slection loop | |
868 | AliAODv0* aodV0 = dynamic_cast<AliAODv0 *>(fAODEvent->GetV0(i)); | |
869 | if (!aodV0) {AliError(Form("ERROR: Could not retrieve aodaodV0 %d", i));continue;} | |
870 | ||
871 | lIndexPosMother = 0; lIndexNegMother = 0; lIndexMotherOfMother = 0; | |
872 | lCheckPIdK0Short = 0; lCheckMcK0Short = 0; lCheckSecondaryK0s = 0; | |
873 | lCheckPIdLambda = 0; lCheckMcLambda = 0; lCheckSecondaryLambda = 0; | |
874 | lCheckPIdAntiLambda = 0; lCheckMcAntiLambda = 0; lCheckSecondaryAntiLambda = 0; | |
9bcef488 | 875 | lComeFromSigma = -1; |
ff0805a7 | 876 | |
877 | // get daughters | |
878 | ||
879 | AliAODTrack *myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0)); | |
880 | AliAODTrack *myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1)); | |
881 | ||
882 | if (!myTrackPos || !myTrackNeg) {Printf("ERROR: Could not retreive one of the daughter track");continue;} | |
ff0805a7 | 883 | if (!IsAcseptedV0(fAODEvent,aodV0,myTrackPos,myTrackNeg)) continue; |
884 | ||
885 | // VO's main characteristics to check the reconstruction cuts | |
ff0805a7 | 886 | lDcaV0Daughters = aodV0->DcaV0Daughters(); |
887 | lDcaV0ToPrimVertex = aodV0->DcaV0ToPrimVertex(); | |
888 | lV0cosPointAngle = aodV0->CosPointingAngle(lPrimaryVtxPosition); | |
889 | ||
890 | aodV0->GetXYZ(lV0Position); | |
891 | ||
892 | lV0Radius = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]); | |
893 | lV0DecayLength = TMath::Sqrt(TMath::Power(lV0Position[0] - lPrimaryVtxPosition[0],2) + | |
894 | TMath::Power(lV0Position[1] - lPrimaryVtxPosition[1],2) + | |
895 | TMath::Power(lV0Position[2] - lPrimaryVtxPosition[2],2 )); | |
896 | ||
897 | lLabelTrackPos = (UInt_t)TMath::Abs(myTrackPos->GetLabel()); | |
898 | lLabelTrackNeg = (UInt_t)TMath::Abs(myTrackNeg->GetLabel()); | |
899 | ||
900 | // Daughters Pt and P: | |
901 | lPtPos = TMath::Sqrt(lMomPos[0]*lMomPos[0] + lMomPos[1]*lMomPos[1]); | |
902 | lPtNeg = TMath::Sqrt(lMomNeg[0]*lMomNeg[0] + lMomNeg[1]*lMomNeg[1]); | |
903 | ||
ff0805a7 | 904 | // Inner Wall parameter: |
905 | const AliAODPid *pidPos=myTrackPos->GetDetPid(); | |
906 | const AliAODPid *pidNeg=myTrackNeg->GetDetPid(); | |
907 | ||
908 | // innerWall momentum | |
909 | lMomInnerWallPos = pidPos->GetTPCmomentum(); | |
910 | lMomInnerWallNeg = pidNeg->GetTPCmomentum(); | |
911 | ||
912 | ldEdxPos = pidPos->GetTPCsignal(); | |
913 | ldEdxNeg = pidNeg->GetTPCsignal(); | |
914 | ||
915 | // DCA between daughter and Primary Vertex: | |
916 | if (myTrackPos) lDcaPosToPrimVertex = aodV0->DcaPosToPrimVertex(); | |
917 | if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex(); | |
918 | ||
919 | // Quality tracks cuts: | |
920 | if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) { continue;} | |
921 | ||
922 | // Armenteros variables: | |
923 | lAlphaV0 = aodV0->AlphaV0(); | |
924 | lPtArmV0 = aodV0->PtArmV0(); | |
9bcef488 | 925 | |
ff0805a7 | 926 | // Invariant mass |
927 | lInvMassK0 = aodV0->MassK0Short(); | |
928 | lPtK0s = aodV0->Pt(); | |
929 | lPhiK0s= aodV0->Phi(); | |
930 | lEtaK0s= aodV0->Eta(); | |
931 | lPzK0s = aodV0->Pz(); | |
932 | ||
933 | lInvMassLambda = aodV0->MassLambda(); | |
934 | lPtLambda = aodV0->Pt(); | |
935 | lPhiLambda= aodV0->Phi(); | |
936 | lEtaLambda= aodV0->Eta(); | |
937 | lPzLambda = aodV0->Pz(); | |
938 | ||
939 | lInvMassAntiLambda = aodV0->MassAntiLambda(); | |
9bcef488 | 940 | lPtAntiLambda = aodV0->Pt(); |
941 | lPhiAntiLambda = aodV0->Phi(); | |
942 | lEtaAntiLambda = aodV0->Eta(); | |
943 | lPzAntiLambda = aodV0->Pz(); | |
ff0805a7 | 944 | |
945 | // Rapidity: | |
946 | lRapK0s = aodV0->RapK0Short(); | |
947 | lRapLambda = aodV0->RapLambda(); | |
948 | lRapAntiLambda = aodV0->Y(-3122); | |
949 | ||
950 | if (lPtK0s==0) {continue;} | |
951 | if (lPtLambda==0) {continue;} | |
952 | if (lPtAntiLambda==0) {continue;} | |
953 | ||
ff0805a7 | 954 | if (fUsePID=="withPID") { |
9bcef488 | 955 | nSigmaPosPion = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion)); |
956 | nSigmaNegPion = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion)); | |
957 | nSigmaPosProton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton)); | |
958 | nSigmaNegProton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton)); | |
ff0805a7 | 959 | } |
960 | else {nSigmaPosPion = 0; nSigmaNegPion =0; nSigmaPosProton = 0; nSigmaNegProton= 0;} | |
961 | ||
962 | // Monte-Carlo particle associated to reconstructed particles: | |
963 | if (fAnalysisMC) { | |
964 | ||
965 | AliAODMCParticle *pp=(AliAODMCParticle*)stack->UncheckedAt(lLabelTrackPos); | |
966 | if(!pp) { continue;} | |
967 | AliAODMCParticle *np=(AliAODMCParticle*)stack->UncheckedAt(lLabelTrackNeg); | |
968 | if (!np) { continue;} | |
969 | ||
970 | lPDGCodePosDaughter = pp->GetPdgCode(); | |
971 | lPDGCodeNegDaughter = np->GetPdgCode(); | |
972 | lIndexPosMother = pp->GetMother(); | |
973 | lIndexNegMother = np->GetMother(); | |
974 | ||
975 | if (lIndexPosMother == -1) { | |
976 | ||
977 | lPdgcodeMother = 0; | |
978 | lIndexMotherOfMother = 0; | |
ff0805a7 | 979 | mcPosMotherX = 0; |
980 | mcPosMotherY = 0; | |
981 | mcPosMotherZ = 0; | |
982 | mcPosMotherR = 0; | |
983 | mcMotherPt = 1; | |
984 | } | |
985 | ||
986 | else { | |
987 | AliAODMCParticle *lMCAODMother=(AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother); | |
988 | if (!lMCAODMother) { continue;} | |
989 | lPdgcodeMother = lMCAODMother->GetPdgCode(); | |
990 | lIndexMotherOfMother = lMCAODMother->GetMother(); | |
991 | if (lIndexMotherOfMother ==-1) lPdgcodeMotherOfMother = 0; | |
992 | else { | |
993 | AliAODMCParticle *lMCAODMotherOfMother=(AliAODMCParticle*)stack->UncheckedAt(lIndexMotherOfMother); | |
994 | if (!lMCAODMotherOfMother) {continue;} | |
995 | lPdgcodeMotherOfMother = lMCAODMotherOfMother->GetPdgCode(); | |
996 | } | |
ff0805a7 | 997 | mcPosMotherX = lMCAODMother->Xv(); |
998 | mcPosMotherY = lMCAODMother->Yv(); | |
999 | mcPosMotherZ = lMCAODMother->Zv(); | |
1000 | mcPosMotherR = TMath::Sqrt(mcPosMotherX*mcPosMotherX+mcPosMotherY*mcPosMotherY); | |
1001 | ||
1002 | mcMotherPt = lMCAODMother->Pt(); | |
1003 | } | |
1004 | } | |
1005 | ||
1006 | } | |
1007 | ||
9bcef488 | 1008 | if (fAnalysisMC) { |
1009 | if(((lPDGCodePosDaughter==+211) && (lPDGCodeNegDaughter==-211))){lCheckPIdK0Short = 1; | |
1010 | if ( (lIndexPosMother==lIndexNegMother) &&(lPdgcodeMother==310) ){ | |
ff0805a7 | 1011 | if (((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary()) lCheckMcK0Short = 1; |
1012 | else lCheckSecondaryK0s = 1; | |
1013 | } | |
1014 | } | |
9bcef488 | 1015 | else if(((lPDGCodePosDaughter==+2212) && (lPDGCodeNegDaughter==-211))){lCheckPIdLambda = 1; |
1016 | if ((lIndexPosMother==lIndexNegMother) &&(lPdgcodeMother==3122) ){ | |
ff0805a7 | 1017 | if ( ( TMath::Abs(lPdgcodeMotherOfMother) == 3212) || |
1018 | ( TMath::Abs(lPdgcodeMotherOfMother) == 3224) || | |
1019 | ( TMath::Abs(lPdgcodeMotherOfMother) == 3214) || | |
9bcef488 | 1020 | ( TMath::Abs(lPdgcodeMotherOfMother) == 3114))lComeFromSigma = 1; |
ff0805a7 | 1021 | else lComeFromSigma = 0; |
9bcef488 | 1022 | if (((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary()|| |
1023 | (!(((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary() )&& | |
1024 | (lComeFromSigma)))lCheckMcLambda = 1; | |
ff0805a7 | 1025 | else lCheckSecondaryLambda = 1; |
1026 | } | |
1027 | } | |
9bcef488 | 1028 | else if(((lPDGCodePosDaughter==211) && (lPDGCodeNegDaughter==-2212))){lCheckPIdAntiLambda = 1; |
ff0805a7 | 1029 | if ( (lIndexPosMother==lIndexNegMother) && |
1030 | (lPdgcodeMother==-3122) ) { | |
1031 | if ( ( TMath::Abs(lPdgcodeMotherOfMother) == 3212) || | |
1032 | ( TMath::Abs(lPdgcodeMotherOfMother) == 3224) || | |
1033 | ( TMath::Abs(lPdgcodeMotherOfMother) == 3214) || | |
1034 | ( TMath::Abs(lPdgcodeMotherOfMother) == 3114) | |
9bcef488 | 1035 | )lComeFromSigma = 1; |
ff0805a7 | 1036 | else lComeFromSigma = 0; |
9bcef488 | 1037 | if (((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary() || |
1038 | ((!((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary())&& | |
1039 | (lComeFromSigma)))lCheckMcAntiLambda = 1; | |
ff0805a7 | 1040 | else lCheckSecondaryAntiLambda = 1; |
1041 | } | |
1042 | } | |
ff0805a7 | 1043 | } // end "look for associated particles |
1044 | ||
1045 | // PID condition: | |
1046 | lCheckPIDK0sPosDaughter = 0, lCheckPIDK0sNegDaughter = 0; | |
1047 | lCheckPIDLambdaPosDaughter = 0, lCheckPIDLambdaNegDaughter = 0; | |
1048 | lCheckPIDAntiLambdaPosDaughter = 0, lCheckPIDAntiLambdaNegDaughter = 0; | |
1049 | ||
1050 | if (lMomInnerWallPos < lLimitPPID) { | |
9bcef488 | 1051 | if (nSigmaPosPion < cutNSigmaLowP){ |
ff0805a7 | 1052 | lCheckPIDK0sPosDaughter = 1; |
1053 | lCheckPIDAntiLambdaPosDaughter = 1; | |
1054 | } | |
1055 | if (nSigmaPosProton < cutNSigmaLowP) lCheckPIDLambdaPosDaughter = 1; | |
1056 | } | |
1057 | ||
1058 | else if (lMomInnerWallPos > lLimitPPID) { | |
1059 | if (nSigmaPosPion < cutNSigmaHighP) { | |
1060 | lCheckPIDK0sPosDaughter = 1; | |
1061 | lCheckPIDAntiLambdaPosDaughter = 1; | |
1062 | } | |
1063 | if (nSigmaPosProton < cutNSigmaHighP) lCheckPIDLambdaPosDaughter = 1; | |
1064 | } | |
1065 | ||
1066 | if (lMomInnerWallNeg < lLimitPPID) { | |
9bcef488 | 1067 | if (nSigmaNegPion < cutNSigmaLowP){ |
ff0805a7 | 1068 | lCheckPIDK0sNegDaughter = 1; |
1069 | lCheckPIDLambdaNegDaughter = 1; | |
1070 | } | |
1071 | if (nSigmaNegProton < cutNSigmaLowP) lCheckPIDAntiLambdaNegDaughter = 1; | |
1072 | ||
1073 | } | |
1074 | else if (lMomInnerWallNeg > lLimitPPID) { | |
9bcef488 | 1075 | if (nSigmaNegPion < cutNSigmaHighP){ |
ff0805a7 | 1076 | lCheckPIDK0sNegDaughter = 1; |
1077 | lCheckPIDLambdaNegDaughter = 1; | |
1078 | } | |
1079 | if (nSigmaNegProton < cutNSigmaHighP) lCheckPIDAntiLambdaNegDaughter = 1; | |
1080 | } | |
1081 | ||
1082 | //************************************filling histograms********************************// | |
1083 | ||
1084 | if((fUsePID=="withPID") && (lCheckPIDAntiLambdaNegDaughter==0) && lCheckPIDLambdaPosDaughter==1) LambdaPID = 1; | |
1085 | else LambdaPID =0; | |
1086 | if((fUsePID=="withPID") && (lCheckPIDLambdaPosDaughter==0) && lCheckPIDAntiLambdaNegDaughter==1) AntiLambdaPID = 1; | |
1087 | else AntiLambdaPID =0; | |
1088 | ||
1089 | lPLambda = TMath::Sqrt(lPzLambda*lPzLambda + lPtLambda*lPtLambda); | |
1090 | lPAntiLambda = TMath::Sqrt(lPzAntiLambda*lPzAntiLambda + lPtAntiLambda*lPtAntiLambda); | |
1091 | lPK0s = TMath::Sqrt(lPzK0s*lPzK0s + lPtK0s*lPtK0s); | |
1092 | ||
9bcef488 | 1093 | if(lPLambda > 0) lcTauLambda = (lV0DecayLength*lInvMassLambda)/lPLambda; |
1094 | if(lPAntiLambda > 0) lcTauAntiLambda = (lV0DecayLength*lInvMassAntiLambda)/lPAntiLambda; | |
1095 | if(lPK0s > 0) lcTauK0s = (lV0DecayLength*lInvMassK0)/lPK0s; | |
ff0805a7 | 1096 | //--------------------------------------------K0s---------------------------------// |
9bcef488 | 1097 | if(!fAnalysisMC){ |
1098 | if (lcTauK0s< fCTauK0){ | |
ff0805a7 | 1099 | if (TMath::Abs(lRapK0s) < fRapidityCut ){ |
1100 | if(lPtArmV0*fSpecialArmenterosCutK0s>(TMath::Abs(lAlphaV0))){ | |
ff0805a7 | 1101 | fHistMassK0->Fill(lInvMassK0); |
ff0805a7 | 1102 | fHistPtVsMassK0->Fill(lInvMassK0,lPtK0s); |
1103 | fHistDcaPosToPrimVertexK0vsMassK0->Fill(lDcaPosToPrimVertex,lInvMassK0); | |
1104 | fHistDcaNegToPrimVertexK0vsMassK0->Fill(lDcaNegToPrimVertex,lInvMassK0); | |
1105 | fHistRadiusV0K0vsMassK0->Fill(lV0Radius,lInvMassK0); | |
1106 | fHistDecayLengthV0K0vsMassK0->Fill(lV0DecayLength,lInvMassK0); | |
1107 | fHistDcaV0DaughtersK0vsMassK0->Fill(lDcaV0Daughters,lInvMassK0); | |
1108 | fHistCosPointAngleK0vsMassK0->Fill(lV0cosPointAngle,lInvMassK0); | |
9bcef488 | 1109 | fHistArmenterosPodolanskiK0->Fill(lAlphaV0,lPtArmV0); |
1110 | if(IsK0InvMass(lInvMassK0)){selectedK0->Add(new AliLeadingBasicParticle(lEtaK0s,lPhiK0s,lPtK0s));} | |
ff0805a7 | 1111 | }//Special Armesto Cut for K0 |
1112 | } // if rap. condition | |
1113 | } // end cTau condition | |
ff0805a7 | 1114 | //-----------------------------------------Lambda---------------------------------// |
9bcef488 | 1115 | if (lcTauLambda < fCTauLambda){ |
ff0805a7 | 1116 | if ((LambdaPID==1 && lMomInnerWallPos <=1 ) || (lMomInnerWallPos >1 ) || !(fUsePID=="withPID")){ |
1117 | if (TMath::Abs(lRapLambda) <fRapidityCut) { | |
ff0805a7 | 1118 | fHistMassLambda->Fill(lInvMassLambda); |
ff0805a7 | 1119 | fHistPtVsMassLambda->Fill(lInvMassLambda,lPtLambda); |
ff0805a7 | 1120 | fHistDcaPosToPrimVertexLvsMassL->Fill(lDcaPosToPrimVertex,lInvMassLambda); |
1121 | fHistDcaNegToPrimVertexLvsMassL->Fill(lDcaNegToPrimVertex,lInvMassLambda); | |
1122 | fHistRadiusV0LvsMassL->Fill(lV0Radius,lInvMassLambda); | |
1123 | fHistDecayLengthV0LvsMassL->Fill(lV0DecayLength,lInvMassLambda); | |
1124 | fHistDcaV0DaughtersLvsMassL->Fill(lDcaV0Daughters,lInvMassLambda); | |
1125 | fHistCosPointAngleLvsMassL->Fill(lV0cosPointAngle,lInvMassLambda); | |
9bcef488 | 1126 | fHistArmenterosPodolanskiLambda->Fill(lAlphaV0,lPtArmV0); |
1127 | if(IsLambdaInvMass(lInvMassLambda)){selectedLambda->Add(new AliLeadingBasicParticle(lEtaLambda,lPhiLambda,lPtLambda));} | |
ff0805a7 | 1128 | } //end of Rap condition |
9bcef488 | 1129 | }//End PID |
ff0805a7 | 1130 | } //end cTau condition |
9bcef488 | 1131 | |
ff0805a7 | 1132 | //--------------------------------------AntiLambda---------------------------------// |
9bcef488 | 1133 | if (lcTauAntiLambda < fCTauLambda){ |
ff0805a7 | 1134 | if ((AntiLambdaPID==1 && lMomInnerWallNeg <=1) || (lMomInnerWallNeg >1) || !(fUsePID=="withPID")){ |
1135 | if (TMath::Abs(lRapAntiLambda) < fRapidityCut) { | |
ff0805a7 | 1136 | fHistMassAntiLambda->Fill(lInvMassAntiLambda); |
ff0805a7 | 1137 | fHistPtVsMassAntiLambda->Fill(lInvMassAntiLambda,lPtAntiLambda); |
1138 | fHistDcaPosToPrimVertexAntiLvsMass->Fill(lDcaPosToPrimVertex,lInvMassAntiLambda); | |
1139 | fHistDcaNegToPrimVertexAntiLvsMass->Fill(lDcaNegToPrimVertex,lInvMassAntiLambda); | |
1140 | fHistRadiusV0AntiLvsMass->Fill(lV0Radius,lInvMassAntiLambda); | |
1141 | fHistDecayLengthV0AntiLvsMass->Fill(lV0DecayLength,lInvMassAntiLambda); | |
1142 | fHistDcaV0DaughtersAntiLvsMass->Fill(lDcaV0Daughters,lInvMassAntiLambda); | |
1143 | fHistCosPointAngleAntiLvsMass->Fill(lV0cosPointAngle,lInvMassAntiLambda); | |
9bcef488 | 1144 | fHistArmenterosPodolanskiAntiLambda->Fill(lAlphaV0,lPtArmV0); |
ff0805a7 | 1145 | } //end of Rap condition |
1146 | } // end of PID condition | |
1147 | } //end cTau condition | |
9bcef488 | 1148 | } |
1149 | if(fAnalysisMC) { | |
ff0805a7 | 1150 | //--------------------------------------K0s Associated---------------------------------// |
1151 | ||
9bcef488 | 1152 | if (lcTauK0s< fCTauK0) { |
ff0805a7 | 1153 | if (TMath::Abs(lRapK0s) < fRapidityCut) { |
ff0805a7 | 1154 | if(lCheckPIdK0Short) fHistPidMcMassK0->Fill(lInvMassK0); |
1155 | if(lCheckMcK0Short) { | |
ff0805a7 | 1156 | fHistAsMcPtK0->Fill(lPtK0s); |
ff0805a7 | 1157 | fHistAsMcProdRadiusK0->Fill(mcPosMotherR); |
1158 | fHistAsMcProdRadiusXvsYK0s->Fill(mcPosMotherX,mcPosMotherY); | |
9bcef488 | 1159 | if(lPtArmV0*fSpecialArmenterosCutK0s>(TMath::Abs(lAlphaV0))){ |
1160 | fHistMassK0->Fill(lInvMassK0); | |
1161 | fHistPtVsMassK0->Fill(lInvMassK0,lPtK0s); | |
1162 | fHistDcaPosToPrimVertexK0vsMassK0->Fill(lDcaPosToPrimVertex,lInvMassK0); | |
1163 | fHistDcaNegToPrimVertexK0vsMassK0->Fill(lDcaNegToPrimVertex,lInvMassK0); | |
1164 | fHistRadiusV0K0vsMassK0->Fill(lV0Radius,lInvMassK0); | |
1165 | fHistDecayLengthV0K0vsMassK0->Fill(lV0DecayLength,lInvMassK0); | |
1166 | fHistDcaV0DaughtersK0vsMassK0->Fill(lDcaV0Daughters,lInvMassK0); | |
1167 | fHistCosPointAngleK0vsMassK0->Fill(lV0cosPointAngle,lInvMassK0); | |
1168 | fHistArmenterosPodolanskiK0->Fill(lAlphaV0,lPtArmV0); | |
1169 | if(IsK0InvMass(lInvMassK0)){selectedK0->Add(new AliLeadingBasicParticle(lEtaK0s,lPhiK0s,lPtK0s));} | |
1170 | } | |
ff0805a7 | 1171 | } |
1172 | if (lCheckSecondaryK0s) { | |
1173 | fHistAsMcSecondaryPtVsRapK0s->Fill(lPtK0s,lRapK0s); | |
1174 | fHistAsMcSecondaryProdRadiusK0s->Fill(mcPosMotherR); | |
1175 | fHistAsMcSecondaryProdRadiusXvsYK0s->Fill(mcPosMotherX,mcPosMotherY); | |
1176 | } | |
ff0805a7 | 1177 | } // end rapidity condition |
1178 | } //end cTau condition | |
ff0805a7 | 1179 | //-----------------------------------Lambda Associated---------------------------------// |
9bcef488 | 1180 | if (lcTauLambda < fCTauLambda){ |
ff0805a7 | 1181 | if (TMath::Abs(lRapLambda) < fRapidityCut) { |
ff0805a7 | 1182 | if(lCheckPIdLambda) fHistPidMcMassLambda->Fill(lInvMassLambda); |
1183 | if(lCheckMcLambda) { | |
ff0805a7 | 1184 | fHistAsMcPtLambda->Fill(lPtLambda); |
ff0805a7 | 1185 | fHistAsMcProdRadiusLambda->Fill(mcPosMotherR); |
1186 | fHistAsMcProdRadiusXvsYLambda->Fill(mcPosMotherX,mcPosMotherY); | |
9bcef488 | 1187 | if (lComeFromSigma) fHistAsMcPtLambdaFromSigma->Fill(lPtLambda); |
1188 | fHistMassLambda->Fill(lInvMassLambda); | |
1189 | fHistPtVsMassLambda->Fill(lInvMassLambda,lPtLambda); | |
1190 | fHistDcaPosToPrimVertexLvsMassL->Fill(lDcaPosToPrimVertex,lInvMassLambda); | |
1191 | fHistDcaNegToPrimVertexLvsMassL->Fill(lDcaNegToPrimVertex,lInvMassLambda); | |
1192 | fHistRadiusV0LvsMassL->Fill(lV0Radius,lInvMassLambda); | |
1193 | fHistDecayLengthV0LvsMassL->Fill(lV0DecayLength,lInvMassLambda); | |
1194 | fHistDcaV0DaughtersLvsMassL->Fill(lDcaV0Daughters,lInvMassLambda); | |
1195 | fHistCosPointAngleLvsMassL->Fill(lV0cosPointAngle,lInvMassLambda); | |
1196 | fHistArmenterosPodolanskiLambda->Fill(lAlphaV0,lPtArmV0); | |
1197 | if(IsLambdaInvMass(lInvMassLambda)){selectedLambda->Add(new AliLeadingBasicParticle(lEtaLambda,lPhiLambda,lPtLambda));} | |
ff0805a7 | 1198 | } |
ff0805a7 | 1199 | if (lCheckSecondaryLambda) { |
1200 | fHistAsMcSecondaryPtVsRapLambda->Fill(lPtLambda,lRapLambda); | |
1201 | fHistAsMcSecondaryProdRadiusLambda->Fill(mcPosMotherR); | |
1202 | fHistAsMcSecondaryProdRadiusXvsYLambda->Fill(mcPosMotherX,mcPosMotherY); | |
9bcef488 | 1203 | if (lComeFromSigma) fHistAsMcSecondaryPtLambdaFromSigma->Fill(lPtLambda); |
ff0805a7 | 1204 | } |
ff0805a7 | 1205 | } // end rapidity condition |
1206 | }//end cTau condition | |
ff0805a7 | 1207 | //------------------------------AntiLambda Associated---------------------------------// |
9bcef488 | 1208 | if (lcTauAntiLambda < fCTauLambda){ |
ff0805a7 | 1209 | if (TMath::Abs(lRapAntiLambda) < fRapidityCut) { |
ff0805a7 | 1210 | if(lCheckPIdAntiLambda) fHistPidMcMassAntiLambda->Fill(lInvMassAntiLambda); |
1211 | if(lCheckMcAntiLambda) { | |
ff0805a7 | 1212 | fHistAsMcPtAntiLambda->Fill(lPtAntiLambda); |
ff0805a7 | 1213 | fHistAsMcProdRadiusAntiLambda->Fill(mcPosMotherR); |
1214 | fHistAsMcProdRadiusXvsYAntiLambda->Fill(mcPosMotherX,mcPosMotherY); | |
9bcef488 | 1215 | if (lComeFromSigma) fHistAsMcPtAntiLambdaFromSigma->Fill(lPtAntiLambda); |
1216 | fHistMassAntiLambda->Fill(lInvMassAntiLambda); | |
1217 | fHistPtVsMassAntiLambda->Fill(lInvMassAntiLambda,lPtAntiLambda); | |
1218 | fHistDcaPosToPrimVertexAntiLvsMass->Fill(lDcaPosToPrimVertex,lInvMassAntiLambda); | |
1219 | fHistDcaNegToPrimVertexAntiLvsMass->Fill(lDcaNegToPrimVertex,lInvMassAntiLambda); | |
1220 | fHistRadiusV0AntiLvsMass->Fill(lV0Radius,lInvMassAntiLambda); | |
1221 | fHistDecayLengthV0AntiLvsMass->Fill(lV0DecayLength,lInvMassAntiLambda); | |
1222 | fHistDcaV0DaughtersAntiLvsMass->Fill(lDcaV0Daughters,lInvMassAntiLambda); | |
1223 | fHistCosPointAngleAntiLvsMass->Fill(lV0cosPointAngle,lInvMassAntiLambda); | |
1224 | fHistArmenterosPodolanskiAntiLambda->Fill(lAlphaV0,lPtArmV0); | |
ff0805a7 | 1225 | } |
ff0805a7 | 1226 | if (lCheckSecondaryAntiLambda) { |
1227 | fHistAsMcSecondaryPtVsRapAntiLambda->Fill(lPtAntiLambda,lRapAntiLambda); | |
1228 | fHistAsMcSecondaryProdRadiusAntiLambda->Fill(mcPosMotherR); | |
1229 | fHistAsMcSecondaryProdRadiusXvsYAntiLambda->Fill(mcPosMotherX,mcPosMotherY); | |
9bcef488 | 1230 | if (lComeFromSigma) fHistAsMcSecondaryPtAntiLambdaFromSigma->Fill(lPtAntiLambda); |
ff0805a7 | 1231 | } |
ff0805a7 | 1232 | } // end rapidity condition |
1233 | }//end cTau condition | |
1234 | ||
1235 | // Correlation part | |
9bcef488 | 1236 | FillCorrelations(selectedTracksLeadingMC,selectedK0MC,fHistSibK0MC,fHistLeadInfoMC); |
1237 | FillCorrelations(selectedTracksLeadingMC,selectedLambdaMC,fHistSibLambdaMC,0); | |
1238 | ||
1239 | // Mixing part | |
1240 | if(TMath::Abs(lPVz)>=10 || MultipOrCent>poolmax || MultipOrCent < poolmin) { | |
1241 | if(fcollidingSys=="PP")AliInfo(Form("pp Event with Zvertex = %.2f cm and multiplicity = %.0f out of pool bounds, SKIPPING",mcZv,MultipOrCent)); | |
1242 | if(fcollidingSys=="PbPb") AliInfo(Form("PbPb Event with Zvertex = %.2f cm and centrality = %.1f out of pool bounds, SKIPPING",mcZv,MultipOrCent)); | |
1243 | return; | |
1244 | } | |
1245 | ||
1246 | fPoolK0MC = fPoolMgrMC->GetEventPool(MultipOrCent, mcZv); | |
1247 | if (!fPoolK0MC){AliInfo(Form("No pool found for multiplicity = %f, zVtx = %f cm", MultipOrCent, mcZv));return;} | |
1248 | ||
1249 | if (fPoolK0MC->IsReady() || fPoolK0MC->NTracksInPool() > fPoolMinNTracks || fPoolK0MC->GetCurrentNEvents() >= fMinEventsToMix) | |
1250 | { | |
1251 | for (Int_t jMix=0; jMix<fPoolK0MC->GetCurrentNEvents(); jMix++) | |
1252 | FillCorrelations(selectedTracksLeadingMC, fPoolK0MC->GetEvent(jMix),fHistMixK0MC,fHistLeadInfoMixMC); | |
1253 | fPoolK0MC->UpdatePool(CloneAndReduceTrackList(selectedK0MC)); | |
1254 | } | |
1255 | ||
1256 | fPoolLambdaMC = fPoolMgrMC->GetEventPool(MultipOrCent, mcZv); | |
1257 | if (!fPoolLambdaMC){AliInfo(Form("No pool found for multiplicity = %f, zVtx = %f cm", MultipOrCent, mcZv));return;} | |
1258 | ||
1259 | if (fPoolLambdaMC->IsReady() || fPoolLambdaMC->NTracksInPool() > fPoolMinNTracks || fPoolLambdaMC->GetCurrentNEvents() >= fMinEventsToMix) | |
1260 | { | |
1261 | for (Int_t jMix=0; jMix<fPoolLambdaMC->GetCurrentNEvents(); jMix++) | |
1262 | FillCorrelations(selectedTracksLeadingMC, fPoolLambdaMC->GetEvent(jMix),fHistMixLambdaMC,0); | |
1263 | fPoolLambdaMC->UpdatePool(CloneAndReduceTrackList(selectedLambdaMC)); | |
ff0805a7 | 1264 | } |
9bcef488 | 1265 | } |
ff0805a7 | 1266 | |
9bcef488 | 1267 | FillCorrelations(selectedTracksLeading,selectedK0,fHistSibK0,fHistLeadInfo); |
1268 | FillCorrelations(selectedTracksLeading,selectedLambda,fHistSibLambda,0); | |
ff0805a7 | 1269 | |
1270 | // Mixing part | |
1271 | if(TMath::Abs(lPVz)>=10 || MultipOrCent>poolmax || MultipOrCent < poolmin) { | |
1272 | if(fcollidingSys=="PP")AliInfo(Form("pp Event with Zvertex = %.2f cm and multiplicity = %.0f out of pool bounds, SKIPPING",lPVz,MultipOrCent)); | |
1273 | if(fcollidingSys=="PbPb") AliInfo(Form("PbPb Event with Zvertex = %.2f cm and centrality = %.1f out of pool bounds, SKIPPING",lPVz,MultipOrCent)); | |
1274 | return; | |
1275 | } | |
1276 | ||
1277 | fPoolK0 = fPoolMgr->GetEventPool(MultipOrCent, lPVz); | |
1278 | if (!fPoolK0){AliInfo(Form("No pool found for multiplicity = %f, zVtx = %f cm", MultipOrCent, lPVz));return;} | |
1279 | ||
1280 | if (fPoolK0->IsReady() || fPoolK0->NTracksInPool() > fPoolMinNTracks || fPoolK0->GetCurrentNEvents() >= fMinEventsToMix) | |
1281 | { | |
1282 | for (Int_t jMix=0; jMix<fPoolK0->GetCurrentNEvents(); jMix++) | |
9bcef488 | 1283 | FillCorrelations(selectedTracksLeading, fPoolK0->GetEvent(jMix),fHistMixK0,fHistLeadInfoMix); |
ff0805a7 | 1284 | fPoolK0->UpdatePool(CloneAndReduceTrackList(selectedK0)); |
1285 | } | |
1286 | ||
1287 | fPoolLambda = fPoolMgr->GetEventPool(MultipOrCent, lPVz); | |
1288 | if (!fPoolLambda){AliInfo(Form("No pool found for multiplicity = %f, zVtx = %f cm", MultipOrCent, lPVz));return;} | |
1289 | ||
1290 | if (fPoolLambda->IsReady() || fPoolLambda->NTracksInPool() > fPoolMinNTracks || fPoolLambda->GetCurrentNEvents() >= fMinEventsToMix) | |
1291 | { | |
1292 | for (Int_t jMix=0; jMix<fPoolLambda->GetCurrentNEvents(); jMix++) | |
9bcef488 | 1293 | FillCorrelations(selectedTracksLeading, fPoolLambda->GetEvent(jMix),fHistMixLambda,0); |
ff0805a7 | 1294 | fPoolLambda->UpdatePool(CloneAndReduceTrackList(selectedLambda)); |
1295 | } | |
1296 | ||
1297 | PostData(1, fOutputList); | |
ff0805a7 | 1298 | } |
1299 | //--------------------------------------------------------------------------------------- | |
1300 | TObjArray* AliLeadingV0Correlation::CloneAndReduceTrackList(TObjArray* tracks) | |
1301 | { | |
1302 | // clones a track list for mixing | |
1303 | TObjArray* tracksClone = new TObjArray; | |
1304 | tracksClone->SetOwner(kTRUE); | |
1305 | ||
1306 | for (Int_t i=0; i<tracks->GetEntriesFast(); i++) | |
1307 | { | |
1308 | AliVParticle* particle = (AliVParticle*) tracks->At(i); | |
1309 | tracksClone->Add(new AliLeadingBasicParticle(particle->Eta(), particle->Phi(), particle->Pt())); | |
1310 | } | |
1311 | ||
1312 | return tracksClone; | |
1313 | } | |
1314 | //--------------------------------------------------------------------------------------- | |
1315 | Int_t AliLeadingV0Correlation::NParticles(TObject* obj) | |
1316 | { | |
1317 | Int_t nTracks; | |
1318 | ||
1319 | if (obj->InheritsFrom("TClonesArray")){ // MC particles | |
1320 | TClonesArray *arrayMC = static_cast<TClonesArray*>(obj); | |
1321 | nTracks = arrayMC->GetEntriesFast(); | |
1322 | }else if (obj->InheritsFrom("TObjArray")){ // list of AliVParticle | |
1323 | TObjArray *array = static_cast<TObjArray*>(obj); | |
1324 | nTracks = array->GetEntriesFast(); | |
1325 | }else if (obj->InheritsFrom("AliAODEvent")){ // RECO AOD tracks | |
1326 | AliAODEvent *aodEvent = static_cast<AliAODEvent*>(obj); | |
1327 | nTracks = aodEvent->GetNTracks(); | |
ff0805a7 | 1328 | }else { |
1329 | if (fDebug > 1) AliFatal(" Analysis type not defined !!! "); | |
1330 | return 0; | |
1331 | } | |
1332 | ||
1333 | return nTracks; | |
1334 | } | |
1335 | //--------------------------------------------------------------------------------------- | |
1336 | Bool_t AliLeadingV0Correlation::IsAcseptedPrimaryTrack(const AliAODTrack *itrack) | |
1337 | { | |
1338 | if (TMath::Abs(itrack->Eta())>fTrackEtaCut) return kFALSE; | |
1339 | if (!itrack->TestFilterBit(fFilterBit)) return kFALSE; | |
1340 | return kTRUE; | |
1341 | } | |
1342 | //--------------------------------------------------------------------------------------- | |
1343 | Bool_t AliLeadingV0Correlation::IsAcseptedDaughterTrack(const AliAODTrack *itrack) | |
1344 | { | |
1345 | if(TMath::Abs(itrack->Eta())>fTrackEtaCut)return kFALSE; | |
1346 | ||
1347 | if (!itrack->IsOn(AliAODTrack::kTPCrefit)) return kFALSE; | |
1348 | ||
1349 | Float_t nCrossedRowsTPC = itrack->GetTPCClusterInfo(2,1); | |
1350 | if (nCrossedRowsTPC < 70) return kFALSE; | |
1351 | ||
1352 | Int_t findable=itrack->GetTPCNclsF(); | |
1353 | if (findable <= 0) return kFALSE; | |
1354 | ||
1355 | if (nCrossedRowsTPC/findable < 0.8) return kFALSE; | |
1356 | ||
1357 | return kTRUE; | |
1358 | } | |
1359 | //--------------------------------------------------------------------------------------- | |
1360 | Double_t AliLeadingV0Correlation::RangePhi(Double_t DPhi) | |
1361 | { | |
1362 | if (DPhi < -TMath::Pi()/2) DPhi += 2*TMath::Pi(); | |
1363 | if (DPhi > 3*TMath::Pi()/2) DPhi -= 2*TMath::Pi(); | |
1364 | return DPhi; | |
1365 | } | |
1366 | //--------------------------------------------------------------------------------------- | |
9bcef488 | 1367 | void AliLeadingV0Correlation::FillCorrelations(TObjArray* particles, TObjArray* mixed,TH3F*histo,TH3F*leadinfo) |
ff0805a7 | 1368 | { |
1369 | TObjArray* input = (mixed) ? mixed : particles; | |
1370 | TArrayF eta(input->GetEntriesFast()); | |
1371 | for (Int_t i=0; i<input->GetEntriesFast(); i++) eta[i] = ((AliVParticle*) input->At(i))->Eta(); | |
1372 | if (particles) | |
1373 | { | |
1374 | Int_t jMax = particles->GetEntriesFast(); | |
1375 | if (mixed) jMax = mixed->GetEntriesFast(); | |
1376 | for (Int_t i=0; i<particles->GetEntriesFast(); i++) | |
1377 | { | |
1378 | AliVParticle* triggerParticle = (AliVParticle*) particles->At(0); //For leading Track | |
1379 | // some optimization | |
1380 | Float_t triggerEta = triggerParticle->Eta(); | |
1381 | ||
1382 | for (Int_t j=0; j<jMax; j++) | |
1383 | { | |
1384 | if (!mixed && i == j)continue; | |
1385 | AliVParticle* particle = 0; | |
1386 | if (!mixed)particle = (AliVParticle*) particles->At(0); //For leading Track | |
1387 | else particle = (AliVParticle*) mixed->At(j); | |
1388 | ||
1389 | // check if both particles point to the same element (does not occur for mixed events, but if subsets are mixed within the same event for cross-checks) | |
1390 | if (mixed && triggerParticle == particle)continue; | |
1391 | ||
1392 | if (particle->Pt() > triggerParticle->Pt())continue; | |
1393 | ||
1394 | if (((particle->Pt())<fassocPtLow)||((particle->Pt())>fassocPtHigh)) continue; | |
1395 | if (((triggerParticle->Pt())<ftrigPtLow)||((triggerParticle->Pt())>ftrigPtHigh)) continue; | |
1396 | ||
1397 | Double_t vars[4]; | |
1398 | vars[0] = triggerEta - eta[j]; | |
1399 | vars[1] = particle->Pt(); //Associated Pt | |
1400 | vars[2] = triggerParticle->Pt(); //Triger Pt | |
1401 | vars[3] = RangePhi(triggerParticle->Phi() - particle->Phi()); | |
1402 | ||
9bcef488 | 1403 | histo->Fill(vars[3],vars[0],vars[1]); |
1404 | if(leadinfo)leadinfo->Fill(vars[2],triggerEta,triggerParticle->Phi()); | |
ff0805a7 | 1405 | |
1406 | } | |
1407 | } | |
1408 | } | |
1409 | } | |
1410 | //--------------------------------------------------------------------------------------- | |
9bcef488 | 1411 | TObjArray* AliLeadingV0Correlation::FindLeadingObjects(TObject *obj) |
ff0805a7 | 1412 | { |
1413 | ||
1414 | Int_t nTracks = NParticles(obj); | |
1415 | if( !nTracks ) return 0; | |
1416 | ||
1417 | // Define array of AliVParticle objects | |
1418 | TObjArray* tracks = new TObjArray(nTracks); | |
1419 | ||
1420 | // Loop over tracks or jets | |
1421 | for (Int_t ipart=0; ipart<nTracks; ++ipart) { | |
1422 | AliVParticle* part = ParticleWithCuts( obj,ipart); | |
1423 | if (!part) continue; | |
1424 | ||
1425 | if(!IsAcseptedPrimaryTrack(((AliAODTrack*)part)))continue; | |
9bcef488 | 1426 | if(!IsTrackNotFromV0(((AliAODTrack*)part)))continue; |
ff0805a7 | 1427 | |
1428 | tracks->AddLast( part ); | |
1429 | } | |
1430 | // Order tracks by pT | |
1431 | QSortTracks( *tracks, 0, tracks->GetEntriesFast() ); | |
1432 | ||
1433 | nTracks = tracks->GetEntriesFast(); | |
1434 | if( !nTracks ) return 0; | |
1435 | ||
1436 | return tracks; | |
1437 | } | |
1438 | //--------------------------------------------------------------------------------------- | |
9bcef488 | 1439 | TObjArray* AliLeadingV0Correlation::FindLeadingObjectsMC(TObject *obj) |
ff0805a7 | 1440 | { |
1441 | ||
1442 | Int_t nTracks = NParticles(obj); | |
1443 | if( !nTracks ) return 0; | |
1444 | ||
1445 | // Define array of AliVParticle objects | |
1446 | TObjArray* tracks = new TObjArray(nTracks); | |
1447 | ||
1448 | // Loop over tracks or jets | |
1449 | for (Int_t ipart=0; ipart<nTracks; ++ipart) { | |
1450 | AliVParticle* part = ParticleWithCuts( obj,ipart); | |
1451 | if (!part) continue; | |
1452 | Int_t pdgCodeCurrent = ((AliAODMCParticle*)part)->GetPdgCode(); | |
9bcef488 | 1453 | Bool_t isHadron = TMath::Abs(pdgCodeCurrent)==211 || // Pion |
1454 | TMath::Abs(pdgCodeCurrent)==2212 || // Proton | |
1455 | TMath::Abs(pdgCodeCurrent)==321; // Kaon | |
1456 | if (!isHadron) continue; | |
ff0805a7 | 1457 | tracks->AddLast( part ); |
1458 | } | |
1459 | // Order tracks by pT | |
1460 | QSortTracks( *tracks, 0, tracks->GetEntriesFast() ); | |
1461 | ||
1462 | nTracks = tracks->GetEntriesFast(); | |
1463 | if( !nTracks ) return 0; | |
1464 | ||
1465 | return tracks; | |
1466 | } | |
1467 | //--------------------------------------------------------------------------------------- | |
9bcef488 | 1468 | void AliLeadingV0Correlation::QSortTracks(TObjArray &a, Int_t first, Int_t last) |
ff0805a7 | 1469 | { |
1470 | // Sort array of TObjArray of tracks by Pt using a quicksort algorithm. | |
1471 | ||
1472 | static TObject *tmp; | |
1473 | static int i; // "static" to save stack space | |
1474 | int j; | |
1475 | ||
1476 | while (last - first > 1) { | |
1477 | i = first; | |
1478 | j = last; | |
1479 | for (;;) { | |
1480 | while (++i < last && ((AliVParticle*)a[i])->Pt() > ((AliVParticle*)a[first])->Pt() ) | |
1481 | ; | |
1482 | while (--j > first && ((AliVParticle*)a[j])->Pt() < ((AliVParticle*)a[first])->Pt() ) | |
1483 | ; | |
1484 | if (i >= j) | |
1485 | break; | |
1486 | ||
1487 | tmp = a[i]; | |
1488 | a[i] = a[j]; | |
1489 | a[j] = tmp; | |
1490 | } | |
1491 | if (j == first) { | |
1492 | ++first; | |
1493 | continue; | |
1494 | } | |
1495 | tmp = a[first]; | |
1496 | a[first] = a[j]; | |
1497 | a[j] = tmp; | |
1498 | if (j - first < last - (j + 1)) { | |
1499 | QSortTracks(a, first, j); | |
1500 | first = j + 1; // QSortTracks(j + 1, last); | |
1501 | } else { | |
1502 | QSortTracks(a, j + 1, last); | |
1503 | last = j; // QSortTracks(first, j); | |
1504 | } | |
1505 | } | |
1506 | } | |
1507 | //--------------------------------------------------------------------------------------- | |
1508 | AliVParticle* AliLeadingV0Correlation::ParticleWithCuts(TObject* obj, Int_t ipart) | |
1509 | { | |
1510 | AliVParticle *part=0; | |
1511 | if (obj->InheritsFrom("AliAODEvent")){ // RECO AOD TRACKS | |
1512 | AliAODEvent *aodEvent = static_cast<AliAODEvent*>(obj); | |
1513 | part = aodEvent->GetTrack(ipart); | |
1514 | // track selection cuts | |
1515 | if ( !(((AliAODTrack*)part)->TestFilterBit(fFilterBit))) return 0; | |
1516 | } | |
1517 | else if(obj->InheritsFrom("TClonesArray")){ // AOD-MC PARTICLE | |
1518 | TClonesArray *arrayMC = static_cast<TClonesArray*>(obj); | |
1519 | part = (AliVParticle*)arrayMC->At( ipart ); | |
1520 | if (!part)return 0; | |
1521 | // eventually only primaries | |
1522 | if (!( ((AliAODMCParticle*)part)->IsPhysicalPrimary()) )return 0; | |
1523 | // eventually only hadrons | |
1524 | Int_t pdgCode = ((AliAODMCParticle*)part)->GetPdgCode(); | |
1525 | Bool_t isHadron = TMath::Abs(pdgCode)==211 || // Pion | |
1526 | TMath::Abs(pdgCode)==2212 || // Proton | |
1527 | TMath::Abs(pdgCode)==321; // Kaon | |
1528 | if (!isHadron) return 0; | |
1529 | } | |
1530 | else {return 0;} | |
1531 | // only charged | |
1532 | if (!part->Charge())return 0; | |
1533 | return part; | |
1534 | } | |
1535 | //--------------------------------------------------------------------------------------- | |
9bcef488 | 1536 | Bool_t AliLeadingV0Correlation::IsK0InvMass(const Double_t mass) const |
1537 | { | |
ff0805a7 | 1538 | |
1539 | const Float_t massK0 = 0.497; | |
1540 | const Float_t sigmaK0 = 0.003; | |
1541 | const Float_t nSigmaSignal = 3.5; | |
1542 | ||
1543 | return ((massK0-nSigmaSignal*sigmaK0)<=mass && mass<=(massK0 + nSigmaSignal*sigmaK0))?1:0; | |
1544 | } | |
1545 | //--------------------------------------------------------------------------------------- | |
9bcef488 | 1546 | Bool_t AliLeadingV0Correlation::IsLambdaInvMass(const Double_t mass) const |
1547 | { | |
ff0805a7 | 1548 | |
1549 | const Float_t massLambda = 1.116; | |
1550 | const Float_t sigmaLambda = 0.003; | |
1551 | const Float_t nSigmaSignal = 3.5; | |
1552 | ||
1553 | return ((massLambda-nSigmaSignal*sigmaLambda)<=mass && mass<=(massLambda + nSigmaSignal*sigmaLambda))?1:0; | |
1554 | } | |
1555 | //--------------------------------------------------------------------------------------- | |
9bcef488 | 1556 | Bool_t AliLeadingV0Correlation::IsTrackNotFromV0(AliAODTrack* track) |
1557 | { | |
1558 | Int_t atrID = track->GetID(); | |
1559 | ||
ff0805a7 | 1560 | for(int i=0; i<fAODEvent->GetNumberOfV0s(); i++){ // loop over V0s |
1561 | AliAODv0* aodV0 = fAODEvent->GetV0(i); | |
9bcef488 | 1562 | |
1563 | AliAODTrack *trackPos=(AliAODTrack *)(aodV0->GetDaughter(0)); | |
1564 | AliAODTrack *trackNeg=(AliAODTrack *)(aodV0->GetDaughter(1)); | |
ff0805a7 | 1565 | |
9bcef488 | 1566 | if ( !(IsAcseptedDaughterTrack(trackPos)) || !(IsAcseptedDaughterTrack(trackNeg)) ) continue; |
1567 | //---------------------------------- | |
1568 | Int_t negID = trackNeg->GetID(); | |
1569 | Int_t posID = trackPos->GetID(); | |
1570 | ||
1571 | if ((TMath::Abs(negID)+1)==(TMath::Abs(atrID))){ return kFALSE;} | |
1572 | if ((TMath::Abs(posID)+1)==(TMath::Abs(atrID))){ return kFALSE;} | |
1573 | //---------------------------------- | |
ff0805a7 | 1574 | } |
1575 | return kTRUE; | |
1576 | } | |
1577 | //--------------------------------------------------------------------------------------- | |
1578 | Bool_t AliLeadingV0Correlation::IsAcseptedV0(const AliAODEvent*aod, const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg) | |
1579 | { | |
1580 | if (!aodV0) return kFALSE; | |
1581 | ||
ff0805a7 | 1582 | // Offline reconstructed V0 only |
1583 | if (aodV0->GetOnFlyStatus()) return kFALSE; | |
1584 | ||
1585 | // DCA of daughter track to Primary Vertex | |
1586 | Float_t dcaNP=aodV0->DcaNegToPrimVertex(); | |
1587 | if (TMath::Abs(dcaNP)<fCutDCANegToPV) return kFALSE; | |
1588 | Float_t dcaPP=aodV0->DcaPosToPrimVertex(); | |
1589 | if (TMath::Abs(dcaPP)<fCutDCAPosToPV) return kFALSE; | |
1590 | ||
1591 | // DCA of daughter tracks | |
1592 | Double_t dcaD=aodV0->DcaV0Daughters(); | |
1593 | if (dcaD>fCutDCAV0Daughters) return kFALSE; | |
1594 | ||
1595 | // Cosinus of pointing angle | |
1596 | Double_t cpa=aodV0->CosPointingAngle(aod->GetPrimaryVertex()); | |
1597 | if (cpa<fCutV0CosPA) return kFALSE; | |
1598 | ||
1599 | // Decay Radius Cut | |
1600 | Double_t xyz[3]; aodV0->GetSecondaryVtx(xyz); | |
1601 | Double_t r2=xyz[0]*xyz[0] + xyz[1]*xyz[1]; | |
1602 | if (r2<fCutV0Radius) return kFALSE; | |
1603 | ||
1604 | // Get daughters and check them | |
1605 | myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0)); | |
1606 | myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1)); | |
1607 | ||
1608 | if (!myTrackPos||!myTrackNeg) return kFALSE; | |
1609 | // Unlike signs of daughters | |
1610 | if (myTrackPos->Charge() == myTrackNeg->Charge()) return kFALSE; | |
1611 | ||
1612 | // Track cuts for daughers | |
1613 | if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) return kFALSE; | |
1614 | ||
1615 | // Minimum pt of daughters | |
1616 | Double_t lMomPos[3] = {999,999,999}; | |
1617 | Double_t lMomNeg[3] = {999,999,999}; | |
1618 | ||
1619 | lMomPos[0] = aodV0->MomPosX(); | |
1620 | lMomPos[1] = aodV0->MomPosY(); | |
1621 | lMomPos[2] = aodV0->MomPosZ(); | |
1622 | ||
1623 | lMomNeg[0] = aodV0->MomNegX(); | |
1624 | lMomNeg[1] = aodV0->MomNegY(); | |
1625 | lMomNeg[2] = aodV0->MomNegZ(); | |
1626 | ||
1627 | Double_t lPtPos = TMath::Sqrt(lMomPos[0]*lMomPos[0] + lMomPos[1]*lMomPos[1]); | |
1628 | Double_t lPtNeg = TMath::Sqrt(lMomNeg[0]*lMomNeg[0] + lMomNeg[1]*lMomNeg[1]); | |
1629 | ||
1630 | Double_t cutMinPtDaughter = 0.150; | |
1631 | if (lPtPos<cutMinPtDaughter || lPtNeg<cutMinPtDaughter) return kFALSE; | |
1632 | ||
1633 | return kTRUE; | |
1634 | } | |
ff0805a7 | 1635 | //--------------------------------------------------------------------------------------- |
1636 | void AliLeadingV0Correlation::Terminate(Option_t *) | |
1637 | { | |
1638 | //No need in the grid | |
1639 | } | |
1640 | //--------------------------------------------------------------------------------------- |