]>
Commit | Line | Data |
---|---|---|
257f0eee | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
7729cc34 | 16 | // task for analysis of V0s (K0S, (anti-)Lambda) in charged jets |
17 | // Author: Vit Kucera (vit.kucera@cern.ch) | |
18 | ||
19 | #include "TChain.h" | |
20 | #include "TTree.h" | |
21 | #include "TH1D.h" | |
22 | #include "TH2D.h" | |
23 | #include "THnSparse.h" | |
24 | #include "TCanvas.h" | |
25 | ||
26 | #include "AliAnalysisTask.h" | |
27 | #include "AliAnalysisManager.h" | |
28 | ||
29 | #include "AliESDEvent.h" | |
30 | #include "AliAODEvent.h" | |
31 | #include "AliAODTrack.h" | |
32 | #include <TDatabasePDG.h> | |
33 | #include <TPDGCode.h> | |
34 | #include "AliPIDResponse.h" | |
35 | #include "AliInputEventHandler.h" | |
36 | #include "AliAODMCHeader.h" | |
37 | #include "AliAODMCParticle.h" | |
38 | #include "TClonesArray.h" | |
39 | //#include "AliEventInfoObject.cxx" | |
40 | //#include "AliV0Object.cxx" | |
41 | //#include "AliJetObject.cxx" | |
42 | #include "TRandom3.h" | |
43 | ||
44 | #include "AliAnalysisTaskV0sInJets.h" | |
45 | ||
46 | ClassImp(AliAnalysisTaskV0sInJets) | |
47 | ||
48 | // upper edges of centrality bins | |
9706bde3 | 49 | //const Int_t AliAnalysisTaskV0sInJets::fgkiCentBinRanges[AliAnalysisTaskV0sInJets::fgkiNBinsCent] = {10, 30, 50, 80}; // Alice Zimmermann |
7729cc34 | 50 | //const Int_t AliAnalysisTaskV0sInJets::fgkiCentBinRanges[AliAnalysisTaskV0sInJets::fgkiNBinsCent] = {10, 20, 40, 60, 80}; // Vit Kucera, initial binning |
51 | //const Int_t AliAnalysisTaskV0sInJets::fgkiCentBinRanges[AliAnalysisTaskV0sInJets::fgkiNBinsCent] = {5, 10, 20, 40, 60, 80}; // Iouri Belikov, LF analysis | |
9706bde3 | 52 | const Int_t AliAnalysisTaskV0sInJets::fgkiCentBinRanges[AliAnalysisTaskV0sInJets::fgkiNBinsCent] = {10}; // only central |
7729cc34 | 53 | |
54 | // axis: pT of V0 | |
9706bde3 | 55 | const Double_t AliAnalysisTaskV0sInJets::fgkdBinsPtV0[2] = {0, 12}; |
7495a67b | 56 | const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsPtV0 = sizeof(AliAnalysisTaskV0sInJets::fgkdBinsPtV0) / sizeof((AliAnalysisTaskV0sInJets::fgkdBinsPtV0)[0]) - 1; |
57 | const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsPtV0Init = int(((AliAnalysisTaskV0sInJets::fgkdBinsPtV0)[AliAnalysisTaskV0sInJets::fgkiNBinsPtV0] - (AliAnalysisTaskV0sInJets::fgkdBinsPtV0)[0]) / 0.1); // bin width 0.1 GeV/c | |
7729cc34 | 58 | // axis: pT of jets |
59 | const Double_t AliAnalysisTaskV0sInJets::fgkdBinsPtJet[2] = {0, 100}; | |
7495a67b | 60 | const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsPtJet = sizeof(AliAnalysisTaskV0sInJets::fgkdBinsPtJet) / sizeof(AliAnalysisTaskV0sInJets::fgkdBinsPtJet[0]) - 1; |
61 | const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsPtJetInit = int(((AliAnalysisTaskV0sInJets::fgkdBinsPtJet)[AliAnalysisTaskV0sInJets::fgkiNBinsPtJet] - (AliAnalysisTaskV0sInJets::fgkdBinsPtJet)[0]) / 5.); // bin width 5 GeV/c | |
7729cc34 | 62 | // axis: K0S invariant mass |
9706bde3 | 63 | const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsMassK0s = 300; |
64 | const Double_t AliAnalysisTaskV0sInJets::fgkdMassK0sMin = 0.35; | |
65 | const Double_t AliAnalysisTaskV0sInJets::fgkdMassK0sMax = 0.65; | |
7729cc34 | 66 | // axis: Lambda invariant mass |
67 | const Int_t AliAnalysisTaskV0sInJets::fgkiNBinsMassLambda = 200; | |
87e23d3e | 68 | const Double_t AliAnalysisTaskV0sInJets::fgkdMassLambdaMin = 1.05; |
69 | const Double_t AliAnalysisTaskV0sInJets::fgkdMassLambdaMax = 1.25; | |
7729cc34 | 70 | |
71 | ||
72 | // Default constructor | |
73 | AliAnalysisTaskV0sInJets::AliAnalysisTaskV0sInJets(): | |
74 | AliAnalysisTaskSE(), | |
75 | fAODIn(0), | |
76 | fAODOut(0), | |
77 | fOutputListStd(0), | |
78 | fOutputListQA(0), | |
79 | fOutputListCuts(0), | |
80 | fOutputListMC(0), | |
81 | // ftreeOut(0), | |
82 | ||
83 | fiAODAnalysis(1), | |
7495a67b | 84 | fbIsPbPb(1), |
7729cc34 | 85 | |
86 | fdCutDCAToPrimVtxMin(0.1), | |
87 | fdCutDCADaughtersMax(1.), | |
88 | fdCutNSigmadEdxMax(3), | |
89 | fdCutCPAMin(0.998), | |
90 | fdCutNTauMax(5), | |
91 | ||
92 | fsJetBranchName(0), | |
9706bde3 | 93 | fsJetBgBranchName(0), |
87e23d3e | 94 | fdCutPtJetMin(0), |
95 | fdCutPtTrackMin(5), | |
96 | fdRadiusJet(0.4), | |
7495a67b | 97 | fdRadiusJetBg(0.4), |
7729cc34 | 98 | fbJetSelection(0), |
99 | fbMCAnalysis(0), | |
100 | // fbTreeOutput(0), | |
101 | fRandom(0), | |
102 | ||
87e23d3e | 103 | fdCutVertexZ(10), |
104 | fdCutVertexR2(1), | |
105 | fdCutCentLow(0), | |
106 | fdCutCentHigh(80), | |
7729cc34 | 107 | |
108 | /* | |
109 | fBranchV0Rec(0), | |
110 | fBranchV0Gen(0), | |
111 | fBranchJet(0), | |
112 | fEventInfo(0), | |
113 | */ | |
87e23d3e | 114 | fdCentrality(0), |
7729cc34 | 115 | fh1EventCounterCut(0), |
116 | fh1EventCent(0), | |
117 | fh1EventCent2(0), | |
169867f8 | 118 | fh1EventCent2Jets(0), |
119 | fh1EventCent2NoJets(0), | |
7729cc34 | 120 | fh2EventCentTracks(0), |
121 | fh1V0CandPerEvent(0), | |
122 | fh1NRndConeCent(0), | |
9706bde3 | 123 | fh1NMedConeCent(0), |
7729cc34 | 124 | fh1AreaExcluded(0), |
125 | ||
126 | fh2CCK0s(0), | |
127 | fh2CCLambda(0), | |
128 | fh3CCMassCorrelBoth(0), | |
129 | fh3CCMassCorrelKNotL(0), | |
130 | fh3CCMassCorrelLNotK(0) | |
131 | { | |
7495a67b | 132 | for(Int_t i = 0; i < fgkiNQAIndeces; i++) |
133 | { | |
134 | fh1QAV0Status[i] = 0; | |
135 | fh1QAV0TPCRefit[i] = 0; | |
136 | fh1QAV0TPCRows[i] = 0; | |
137 | fh1QAV0TPCFindable[i] = 0; | |
138 | fh1QAV0TPCRowsFind[i] = 0; | |
139 | fh1QAV0Eta[i] = 0; | |
140 | fh2QAV0EtaRows[i] = 0; | |
141 | fh2QAV0PtRows[i] = 0; | |
142 | fh2QAV0PhiRows[i] = 0; | |
143 | fh2QAV0NClRows[i] = 0; | |
144 | fh2QAV0EtaNCl[i] = 0; | |
145 | ||
146 | fh2QAV0EtaPtK0sPeak[i] = 0; | |
147 | fh2QAV0EtaEtaK0s[i] = 0; | |
148 | fh2QAV0PhiPhiK0s[i] = 0; | |
149 | fh1QAV0RapK0s[i] = 0; | |
150 | fh2QAV0PtPtK0sPeak[i] = 0; | |
151 | fh2ArmPodK0s[i] = 0; | |
152 | ||
153 | fh2QAV0EtaPtLambdaPeak[i] = 0; | |
154 | fh2QAV0EtaEtaLambda[i] = 0; | |
155 | fh2QAV0PhiPhiLambda[i] = 0; | |
156 | fh1QAV0RapLambda[i] = 0; | |
157 | fh2QAV0PtPtLambdaPeak[i] = 0; | |
158 | fh2ArmPodLambda[i] = 0; | |
159 | ||
160 | fh2QAV0EtaPtALambdaPeak[i] = 0; | |
161 | fh2QAV0EtaEtaALambda[i] = 0; | |
162 | fh2QAV0PhiPhiALambda[i] = 0; | |
163 | fh1QAV0RapALambda[i] = 0; | |
164 | fh2QAV0PtPtALambdaPeak[i] = 0; | |
165 | fh2ArmPodALambda[i] = 0; | |
166 | ||
167 | fh1QAV0Pt[i] = 0; | |
168 | fh1QAV0Charge[i] = 0; | |
169 | fh1QAV0DCAVtx[i] = 0; | |
170 | fh1QAV0DCAV0[i] = 0; | |
171 | fh1QAV0Cos[i] = 0; | |
172 | fh1QAV0R[i] = 0; | |
173 | fh1QACTau2D[i] = 0; | |
174 | fh1QACTau3D[i] = 0; | |
175 | ||
176 | fh2ArmPod[i] = 0; | |
177 | ||
178 | /* | |
179 | fh2CutTPCRowsK0s[i] = 0; | |
180 | fh2CutTPCRowsLambda[i] = 0; | |
181 | fh2CutPtPosK0s[i] = 0; | |
182 | fh2CutPtNegK0s[i] = 0; | |
183 | fh2CutPtPosLambda[i] = 0; | |
184 | fh2CutPtNegLambda[i] = 0; | |
185 | fh2CutDCAVtx[i] = 0; | |
186 | fh2CutDCAV0[i] = 0; | |
187 | fh2CutCos[i] = 0; | |
188 | fh2CutR[i] = 0; | |
189 | fh2CutEtaK0s[i] = 0; | |
190 | fh2CutEtaLambda[i] = 0; | |
191 | fh2CutRapK0s[i] = 0; | |
192 | fh2CutRapLambda[i] = 0; | |
193 | fh2CutCTauK0s[i] = 0; | |
194 | fh2CutCTauLambda[i] = 0; | |
195 | fh2CutPIDPosK0s[i] = 0; | |
196 | fh2CutPIDNegK0s[i] = 0; | |
197 | fh2CutPIDPosLambda[i] = 0; | |
198 | fh2CutPIDNegLambda[i] = 0; | |
199 | ||
200 | fh2Tau3DVs2D[i] = 0; | |
201 | */ | |
202 | } | |
203 | for(Int_t i = 0; i < fgkiNCategV0; i++) | |
204 | { | |
205 | fh1V0InvMassK0sAll[i] = 0; | |
206 | fh1V0InvMassLambdaAll[i] = 0; | |
207 | fh1V0InvMassALambdaAll[i] = 0; | |
208 | } | |
209 | for(Int_t i = 0; i < fgkiNBinsCent; i++) | |
210 | { | |
211 | fh1EventCounterCutCent[i] = 0; | |
212 | fh1V0CounterCentK0s[i] = 0; | |
213 | fh1V0CounterCentLambda[i] = 0; | |
214 | fh1V0CounterCentALambda[i] = 0; | |
215 | fh1V0CandPerEventCentK0s[i] = 0; | |
216 | fh1V0CandPerEventCentLambda[i] = 0; | |
217 | fh1V0CandPerEventCentALambda[i] = 0; | |
218 | fh1V0InvMassK0sCent[i] = 0; | |
219 | fh1V0InvMassLambdaCent[i] = 0; | |
220 | fh1V0InvMassALambdaCent[i] = 0; | |
221 | fh1V0K0sPtMCGen[i] = 0; | |
222 | fh2V0K0sPtMassMCRec[i] = 0; | |
223 | fh1V0K0sPtMCRecFalse[i] = 0; | |
224 | fh2V0K0sEtaPtMCGen[i] = 0; | |
225 | fh3V0K0sEtaPtMassMCRec[i] = 0; | |
226 | fh2V0K0sInJetPtMCGen[i] = 0; | |
227 | fh3V0K0sInJetPtMassMCRec[i] = 0; | |
228 | fh3V0K0sInJetEtaPtMCGen[i] = 0; | |
229 | fh4V0K0sInJetEtaPtMassMCRec[i] = 0; | |
230 | fh2V0K0sMCResolMPt[i] = 0; | |
231 | fh2V0K0sMCPtGenPtRec[i] = 0; | |
232 | fh1V0LambdaPtMCGen[i] = 0; | |
233 | fh2V0LambdaPtMassMCRec[i] = 0; | |
234 | fh1V0LambdaPtMCRecFalse[i] = 0; | |
235 | fh2V0LambdaEtaPtMCGen[i] = 0; | |
236 | fh3V0LambdaEtaPtMassMCRec[i] = 0; | |
237 | fh2V0LambdaInJetPtMCGen[i] = 0; | |
238 | fh3V0LambdaInJetPtMassMCRec[i] = 0; | |
239 | fh3V0LambdaInJetEtaPtMCGen[i] = 0; | |
240 | fh4V0LambdaInJetEtaPtMassMCRec[i] = 0; | |
241 | fh2V0LambdaMCResolMPt[i] = 0; | |
242 | fh2V0LambdaMCPtGenPtRec[i] = 0; | |
243 | fhnV0LambdaInclMCFD[i] = 0; | |
244 | fhnV0LambdaInJetsMCFD[i] = 0; | |
245 | fhnV0LambdaBulkMCFD[i] = 0; | |
246 | fh1V0XiPtMCGen[i] = 0; | |
247 | fh1V0ALambdaPt[i] = 0; | |
248 | fh1V0ALambdaPtMCGen[i] = 0; | |
249 | fh1V0ALambdaPtMCRec[i] = 0; | |
250 | fh2V0ALambdaPtMassMCRec[i] = 0; | |
251 | fh1V0ALambdaPtMCRecFalse[i] = 0; | |
252 | fh2V0ALambdaEtaPtMCGen[i] = 0; | |
253 | fh3V0ALambdaEtaPtMassMCRec[i] = 0; | |
254 | fh2V0ALambdaInJetPtMCGen[i] = 0; | |
255 | fh2V0ALambdaInJetPtMCRec[i] = 0; | |
256 | fh3V0ALambdaInJetPtMassMCRec[i] = 0; | |
257 | fh3V0ALambdaInJetEtaPtMCGen[i] = 0; | |
258 | fh4V0ALambdaInJetEtaPtMassMCRec[i] = 0; | |
259 | fh2V0ALambdaMCResolMPt[i] = 0; | |
260 | fh2V0ALambdaMCPtGenPtRec[i] = 0; | |
261 | fhnV0ALambdaInclMCFD[i] = 0; | |
262 | fhnV0ALambdaInJetsMCFD[i] = 0; | |
263 | fhnV0ALambdaBulkMCFD[i] = 0; | |
264 | fh1V0AXiPtMCGen[i] = 0; | |
265 | ||
266 | // eta daughters | |
7729cc34 | 267 | // fhnV0K0sInclDaughterEtaPtPtMCGen[i] = 0; |
7495a67b | 268 | fhnV0K0sInclDaughterEtaPtPtMCRec[i] = 0; |
7729cc34 | 269 | // fhnV0K0sInJetsDaughterEtaPtPtMCGen[i] = 0; |
7495a67b | 270 | fhnV0K0sInJetsDaughterEtaPtPtMCRec[i] = 0; |
7729cc34 | 271 | // fhnV0LambdaInclDaughterEtaPtPtMCGen[i] = 0; |
7495a67b | 272 | fhnV0LambdaInclDaughterEtaPtPtMCRec[i] = 0; |
7729cc34 | 273 | // fhnV0LambdaInJetsDaughterEtaPtPtMCGen[i] = 0; |
7495a67b | 274 | fhnV0LambdaInJetsDaughterEtaPtPtMCRec[i] = 0; |
7729cc34 | 275 | // fhnV0ALambdaInclDaughterEtaPtPtMCGen[i] = 0; |
7495a67b | 276 | fhnV0ALambdaInclDaughterEtaPtPtMCRec[i] = 0; |
7729cc34 | 277 | // fhnV0ALambdaInJetsDaughterEtaPtPtMCGen[i] = 0; |
7495a67b | 278 | fhnV0ALambdaInJetsDaughterEtaPtPtMCRec[i] = 0; |
279 | ||
280 | // Inclusive | |
281 | fhnV0InclusiveK0s[i] = 0; | |
282 | fhnV0InclusiveLambda[i] = 0; | |
283 | fhnV0InclusiveALambda[i] = 0; | |
284 | // Cones | |
285 | fhnV0InJetK0s[i] = 0; | |
286 | fhnV0InPerpK0s[i] = 0; | |
287 | fhnV0InRndK0s[i] = 0; | |
288 | fhnV0InMedK0s[i] = 0; | |
289 | fhnV0OutJetK0s[i] = 0; | |
290 | fhnV0NoJetK0s[i] = 0; | |
291 | fhnV0InJetLambda[i] = 0; | |
292 | fhnV0InPerpLambda[i] = 0; | |
293 | fhnV0InRndLambda[i] = 0; | |
294 | fhnV0InMedLambda[i] = 0; | |
295 | fhnV0OutJetLambda[i] = 0; | |
296 | fhnV0NoJetLambda[i] = 0; | |
297 | fhnV0InJetALambda[i] = 0; | |
298 | fhnV0InPerpALambda[i] = 0; | |
299 | fhnV0InRndALambda[i] = 0; | |
300 | fhnV0InMedALambda[i] = 0; | |
301 | fhnV0OutJetALambda[i] = 0; | |
302 | fhnV0NoJetALambda[i] = 0; | |
303 | ||
304 | fh2V0PtJetAngleK0s[i] = 0; | |
305 | fh2V0PtJetAngleLambda[i] = 0; | |
306 | fh2V0PtJetAngleALambda[i] = 0; | |
307 | fh1DCAInK0s[i] = 0; | |
308 | fh1DCAInLambda[i] = 0; | |
309 | fh1DCAInALambda[i] = 0; | |
310 | fh1DCAOutK0s[i] = 0; | |
311 | fh1DCAOutLambda[i] = 0; | |
312 | fh1DCAOutALambda[i] = 0; | |
313 | // fh1DeltaZK0s[i] = 0; | |
314 | // fh1DeltaZLambda[i] = 0; | |
315 | // fh1DeltaZALambda[i] = 0; | |
316 | ||
317 | fh1PtJet[i] = 0; | |
318 | fh1EtaJet[i] = 0; | |
319 | fh2EtaPtJet[i] = 0; | |
320 | fh1PhiJet[i] = 0; | |
321 | fh1NJetPerEvent[i] = 0; | |
322 | fh2EtaPhiRndCone[i] = 0; | |
323 | fh2EtaPhiMedCone[i] = 0; | |
324 | ||
325 | fh1VtxZ[i] = 0; | |
326 | fh2VtxXY[i] = 0; | |
327 | } | |
7729cc34 | 328 | } |
329 | ||
330 | // Constructor | |
331 | AliAnalysisTaskV0sInJets::AliAnalysisTaskV0sInJets(const char* name): | |
332 | AliAnalysisTaskSE(name), | |
333 | fAODIn(0), | |
334 | fAODOut(0), | |
335 | fOutputListStd(0), | |
336 | fOutputListQA(0), | |
337 | fOutputListCuts(0), | |
338 | fOutputListMC(0), | |
339 | // ftreeOut(0), | |
340 | ||
341 | fiAODAnalysis(1), | |
7495a67b | 342 | fbIsPbPb(1), |
7729cc34 | 343 | |
344 | fdCutDCAToPrimVtxMin(0.1), | |
345 | fdCutDCADaughtersMax(1.), | |
346 | fdCutNSigmadEdxMax(3), | |
347 | fdCutCPAMin(0.998), | |
348 | fdCutNTauMax(5), | |
349 | ||
350 | fsJetBranchName(0), | |
9706bde3 | 351 | fsJetBgBranchName(0), |
87e23d3e | 352 | fdCutPtJetMin(0), |
353 | fdCutPtTrackMin(5), | |
354 | fdRadiusJet(0.4), | |
7495a67b | 355 | fdRadiusJetBg(0.4), |
7729cc34 | 356 | fbJetSelection(0), |
357 | fbMCAnalysis(0), | |
358 | // fbTreeOutput(0), | |
359 | fRandom(0), | |
360 | ||
87e23d3e | 361 | fdCutVertexZ(10), |
362 | fdCutVertexR2(1), | |
363 | fdCutCentLow(0), | |
364 | fdCutCentHigh(80), | |
7729cc34 | 365 | /* |
366 | fBranchV0Rec(0), | |
367 | fBranchV0Gen(0), | |
368 | fBranchJet(0), | |
369 | fEventInfo(0), | |
370 | */ | |
87e23d3e | 371 | fdCentrality(0), |
7729cc34 | 372 | fh1EventCounterCut(0), |
373 | fh1EventCent(0), | |
374 | fh1EventCent2(0), | |
169867f8 | 375 | fh1EventCent2Jets(0), |
376 | fh1EventCent2NoJets(0), | |
7729cc34 | 377 | fh2EventCentTracks(0), |
378 | fh1V0CandPerEvent(0), | |
379 | fh1NRndConeCent(0), | |
9706bde3 | 380 | fh1NMedConeCent(0), |
7729cc34 | 381 | fh1AreaExcluded(0), |
382 | ||
383 | fh2CCK0s(0), | |
384 | fh2CCLambda(0), | |
385 | fh3CCMassCorrelBoth(0), | |
386 | fh3CCMassCorrelKNotL(0), | |
387 | fh3CCMassCorrelLNotK(0) | |
388 | { | |
7495a67b | 389 | for(Int_t i = 0; i < fgkiNQAIndeces; i++) |
390 | { | |
391 | fh1QAV0Status[i] = 0; | |
392 | fh1QAV0TPCRefit[i] = 0; | |
393 | fh1QAV0TPCRows[i] = 0; | |
394 | fh1QAV0TPCFindable[i] = 0; | |
395 | fh1QAV0TPCRowsFind[i] = 0; | |
396 | fh1QAV0Eta[i] = 0; | |
397 | fh2QAV0EtaRows[i] = 0; | |
398 | fh2QAV0PtRows[i] = 0; | |
399 | fh2QAV0PhiRows[i] = 0; | |
400 | fh2QAV0NClRows[i] = 0; | |
401 | fh2QAV0EtaNCl[i] = 0; | |
402 | ||
403 | fh2QAV0EtaPtK0sPeak[i] = 0; | |
404 | fh2QAV0EtaEtaK0s[i] = 0; | |
405 | fh2QAV0PhiPhiK0s[i] = 0; | |
406 | fh1QAV0RapK0s[i] = 0; | |
407 | fh2QAV0PtPtK0sPeak[i] = 0; | |
408 | fh2ArmPodK0s[i] = 0; | |
409 | ||
410 | fh2QAV0EtaPtLambdaPeak[i] = 0; | |
411 | fh2QAV0EtaEtaLambda[i] = 0; | |
412 | fh2QAV0PhiPhiLambda[i] = 0; | |
413 | fh1QAV0RapLambda[i] = 0; | |
414 | fh2QAV0PtPtLambdaPeak[i] = 0; | |
415 | fh2ArmPodLambda[i] = 0; | |
416 | ||
417 | fh2QAV0EtaPtALambdaPeak[i] = 0; | |
418 | fh2QAV0EtaEtaALambda[i] = 0; | |
419 | fh2QAV0PhiPhiALambda[i] = 0; | |
420 | fh1QAV0RapALambda[i] = 0; | |
421 | fh2QAV0PtPtALambdaPeak[i] = 0; | |
422 | fh2ArmPodALambda[i] = 0; | |
423 | ||
424 | fh1QAV0Pt[i] = 0; | |
425 | fh1QAV0Charge[i] = 0; | |
426 | fh1QAV0DCAVtx[i] = 0; | |
427 | fh1QAV0DCAV0[i] = 0; | |
428 | fh1QAV0Cos[i] = 0; | |
429 | fh1QAV0R[i] = 0; | |
430 | fh1QACTau2D[i] = 0; | |
431 | fh1QACTau3D[i] = 0; | |
432 | ||
433 | fh2ArmPod[i] = 0; | |
434 | ||
435 | /* | |
436 | fh2CutTPCRowsK0s[i] = 0; | |
437 | fh2CutTPCRowsLambda[i] = 0; | |
438 | fh2CutPtPosK0s[i] = 0; | |
439 | fh2CutPtNegK0s[i] = 0; | |
440 | fh2CutPtPosLambda[i] = 0; | |
441 | fh2CutPtNegLambda[i] = 0; | |
442 | fh2CutDCAVtx[i] = 0; | |
443 | fh2CutDCAV0[i] = 0; | |
444 | fh2CutCos[i] = 0; | |
445 | fh2CutR[i] = 0; | |
446 | fh2CutEtaK0s[i] = 0; | |
447 | fh2CutEtaLambda[i] = 0; | |
448 | fh2CutRapK0s[i] = 0; | |
449 | fh2CutRapLambda[i] = 0; | |
450 | fh2CutCTauK0s[i] = 0; | |
451 | fh2CutCTauLambda[i] = 0; | |
452 | fh2CutPIDPosK0s[i] = 0; | |
453 | fh2CutPIDNegK0s[i] = 0; | |
454 | fh2CutPIDPosLambda[i] = 0; | |
455 | fh2CutPIDNegLambda[i] = 0; | |
456 | ||
457 | fh2Tau3DVs2D[i] = 0; | |
458 | */ | |
459 | } | |
460 | for(Int_t i = 0; i < fgkiNCategV0; i++) | |
461 | { | |
462 | fh1V0InvMassK0sAll[i] = 0; | |
463 | fh1V0InvMassLambdaAll[i] = 0; | |
464 | fh1V0InvMassALambdaAll[i] = 0; | |
465 | } | |
466 | for(Int_t i = 0; i < fgkiNBinsCent; i++) | |
467 | { | |
468 | fh1EventCounterCutCent[i] = 0; | |
469 | fh1V0CounterCentK0s[i] = 0; | |
470 | fh1V0CounterCentLambda[i] = 0; | |
471 | fh1V0CounterCentALambda[i] = 0; | |
472 | fh1V0CandPerEventCentK0s[i] = 0; | |
473 | fh1V0CandPerEventCentLambda[i] = 0; | |
474 | fh1V0CandPerEventCentALambda[i] = 0; | |
475 | fh1V0InvMassK0sCent[i] = 0; | |
476 | fh1V0InvMassLambdaCent[i] = 0; | |
477 | fh1V0InvMassALambdaCent[i] = 0; | |
478 | fh1V0K0sPtMCGen[i] = 0; | |
479 | fh2V0K0sPtMassMCRec[i] = 0; | |
480 | fh1V0K0sPtMCRecFalse[i] = 0; | |
481 | fh2V0K0sEtaPtMCGen[i] = 0; | |
482 | fh3V0K0sEtaPtMassMCRec[i] = 0; | |
483 | fh2V0K0sInJetPtMCGen[i] = 0; | |
484 | fh3V0K0sInJetPtMassMCRec[i] = 0; | |
485 | fh3V0K0sInJetEtaPtMCGen[i] = 0; | |
486 | fh4V0K0sInJetEtaPtMassMCRec[i] = 0; | |
487 | fh2V0K0sMCResolMPt[i] = 0; | |
488 | fh2V0K0sMCPtGenPtRec[i] = 0; | |
489 | fh1V0LambdaPtMCGen[i] = 0; | |
490 | fh2V0LambdaPtMassMCRec[i] = 0; | |
491 | fh1V0LambdaPtMCRecFalse[i] = 0; | |
492 | fh2V0LambdaEtaPtMCGen[i] = 0; | |
493 | fh3V0LambdaEtaPtMassMCRec[i] = 0; | |
494 | fh2V0LambdaInJetPtMCGen[i] = 0; | |
495 | fh3V0LambdaInJetPtMassMCRec[i] = 0; | |
496 | fh3V0LambdaInJetEtaPtMCGen[i] = 0; | |
497 | fh4V0LambdaInJetEtaPtMassMCRec[i] = 0; | |
498 | fh2V0LambdaMCResolMPt[i] = 0; | |
499 | fh2V0LambdaMCPtGenPtRec[i] = 0; | |
500 | fhnV0LambdaInclMCFD[i] = 0; | |
501 | fhnV0LambdaInJetsMCFD[i] = 0; | |
502 | fhnV0LambdaBulkMCFD[i] = 0; | |
503 | fh1V0XiPtMCGen[i] = 0; | |
504 | fh1V0ALambdaPt[i] = 0; | |
505 | fh1V0ALambdaPtMCGen[i] = 0; | |
506 | fh1V0ALambdaPtMCRec[i] = 0; | |
507 | fh2V0ALambdaPtMassMCRec[i] = 0; | |
508 | fh1V0ALambdaPtMCRecFalse[i] = 0; | |
509 | fh2V0ALambdaEtaPtMCGen[i] = 0; | |
510 | fh3V0ALambdaEtaPtMassMCRec[i] = 0; | |
511 | fh2V0ALambdaInJetPtMCGen[i] = 0; | |
512 | fh2V0ALambdaInJetPtMCRec[i] = 0; | |
513 | fh3V0ALambdaInJetPtMassMCRec[i] = 0; | |
514 | fh3V0ALambdaInJetEtaPtMCGen[i] = 0; | |
515 | fh4V0ALambdaInJetEtaPtMassMCRec[i] = 0; | |
516 | fh2V0ALambdaMCResolMPt[i] = 0; | |
517 | fh2V0ALambdaMCPtGenPtRec[i] = 0; | |
518 | fhnV0ALambdaInclMCFD[i] = 0; | |
519 | fhnV0ALambdaInJetsMCFD[i] = 0; | |
520 | fhnV0ALambdaBulkMCFD[i] = 0; | |
521 | fh1V0AXiPtMCGen[i] = 0; | |
522 | ||
523 | // eta daughters | |
7729cc34 | 524 | // fhnV0K0sInclDaughterEtaPtPtMCGen[i] = 0; |
7495a67b | 525 | fhnV0K0sInclDaughterEtaPtPtMCRec[i] = 0; |
7729cc34 | 526 | // fhnV0K0sInJetsDaughterEtaPtPtMCGen[i] = 0; |
7495a67b | 527 | fhnV0K0sInJetsDaughterEtaPtPtMCRec[i] = 0; |
7729cc34 | 528 | // fhnV0LambdaInclDaughterEtaPtPtMCGen[i] = 0; |
7495a67b | 529 | fhnV0LambdaInclDaughterEtaPtPtMCRec[i] = 0; |
7729cc34 | 530 | // fhnV0LambdaInJetsDaughterEtaPtPtMCGen[i] = 0; |
7495a67b | 531 | fhnV0LambdaInJetsDaughterEtaPtPtMCRec[i] = 0; |
7729cc34 | 532 | // fhnV0ALambdaInclDaughterEtaPtPtMCGen[i] = 0; |
7495a67b | 533 | fhnV0ALambdaInclDaughterEtaPtPtMCRec[i] = 0; |
7729cc34 | 534 | // fhnV0ALambdaInJetsDaughterEtaPtPtMCGen[i] = 0; |
7495a67b | 535 | fhnV0ALambdaInJetsDaughterEtaPtPtMCRec[i] = 0; |
536 | ||
537 | // Inclusive | |
538 | fhnV0InclusiveK0s[i] = 0; | |
539 | fhnV0InclusiveLambda[i] = 0; | |
540 | fhnV0InclusiveALambda[i] = 0; | |
541 | // Cones | |
542 | fhnV0InJetK0s[i] = 0; | |
543 | fhnV0InPerpK0s[i] = 0; | |
544 | fhnV0InRndK0s[i] = 0; | |
545 | fhnV0InMedK0s[i] = 0; | |
546 | fhnV0OutJetK0s[i] = 0; | |
547 | fhnV0NoJetK0s[i] = 0; | |
548 | fhnV0InJetLambda[i] = 0; | |
549 | fhnV0InPerpLambda[i] = 0; | |
550 | fhnV0InRndLambda[i] = 0; | |
551 | fhnV0InMedLambda[i] = 0; | |
552 | fhnV0OutJetLambda[i] = 0; | |
553 | fhnV0NoJetLambda[i] = 0; | |
554 | fhnV0InJetALambda[i] = 0; | |
555 | fhnV0InPerpALambda[i] = 0; | |
556 | fhnV0InRndALambda[i] = 0; | |
557 | fhnV0InMedALambda[i] = 0; | |
558 | fhnV0OutJetALambda[i] = 0; | |
559 | fhnV0NoJetALambda[i] = 0; | |
560 | ||
561 | fh2V0PtJetAngleK0s[i] = 0; | |
562 | fh2V0PtJetAngleLambda[i] = 0; | |
563 | fh2V0PtJetAngleALambda[i] = 0; | |
564 | fh1DCAInK0s[i] = 0; | |
565 | fh1DCAInLambda[i] = 0; | |
566 | fh1DCAInALambda[i] = 0; | |
567 | fh1DCAOutK0s[i] = 0; | |
568 | fh1DCAOutLambda[i] = 0; | |
569 | fh1DCAOutALambda[i] = 0; | |
570 | // fh1DeltaZK0s[i] = 0; | |
571 | // fh1DeltaZLambda[i] = 0; | |
572 | // fh1DeltaZALambda[i] = 0; | |
573 | ||
574 | fh1PtJet[i] = 0; | |
575 | fh1EtaJet[i] = 0; | |
576 | fh2EtaPtJet[i] = 0; | |
577 | fh1PhiJet[i] = 0; | |
578 | fh1NJetPerEvent[i] = 0; | |
579 | fh2EtaPhiRndCone[i] = 0; | |
580 | fh2EtaPhiMedCone[i] = 0; | |
581 | ||
582 | fh1VtxZ[i] = 0; | |
583 | fh2VtxXY[i] = 0; | |
584 | } | |
7729cc34 | 585 | // Define input and output slots here |
586 | // Input slot #0 works with a TChain | |
587 | DefineInput(0, TChain::Class()); | |
588 | // Output slot #0 id reserved by the base class for AOD | |
589 | // Output slot #1 writes into a TList container | |
590 | DefineOutput(1, TList::Class()); | |
591 | DefineOutput(2, TList::Class()); | |
592 | DefineOutput(3, TList::Class()); | |
593 | DefineOutput(4, TList::Class()); | |
594 | DefineOutput(5, TTree::Class()); | |
595 | } | |
596 | ||
597 | AliAnalysisTaskV0sInJets::~AliAnalysisTaskV0sInJets() | |
598 | { | |
7495a67b | 599 | /* |
600 | if (fBranchV0Rec) | |
601 | fBranchV0Rec->Delete(); | |
602 | delete fBranchV0Rec; | |
603 | fBranchV0Rec = 0; | |
604 | if (fBranchV0Gen) | |
605 | fBranchV0Gen->Delete(); | |
606 | delete fBranchV0Gen; | |
607 | fBranchV0Gen = 0; | |
608 | if (fBranchJet) | |
609 | fBranchJet->Delete(); | |
610 | delete fBranchJet; | |
611 | fBranchJet = 0; | |
612 | if (fEventInfo) | |
613 | fEventInfo->Delete(); | |
614 | delete fEventInfo; | |
615 | fEventInfo = 0; | |
616 | */ | |
7729cc34 | 617 | delete fRandom; |
618 | fRandom = 0; | |
619 | } | |
620 | ||
621 | void AliAnalysisTaskV0sInJets::UserCreateOutputObjects() | |
622 | { | |
623 | // Create histograms | |
624 | // Called once | |
625 | ||
626 | fRandom = new TRandom3(0); | |
627 | ||
7495a67b | 628 | /* |
629 | if (!fBranchV0Rec && fbTreeOutput) | |
630 | { | |
631 | // fBranchV0Rec = new TClonesArray("AliAODv0",0); | |
632 | fBranchV0Rec = new TClonesArray("AliV0Object",0); | |
633 | fBranchV0Rec->SetName("branch_V0Rec"); | |
634 | } | |
635 | if (!fBranchV0Gen && fbTreeOutput) | |
636 | { | |
637 | fBranchV0Gen = new TClonesArray("AliAODMCParticle",0); | |
638 | fBranchV0Gen->SetName("branch_V0Gen"); | |
639 | } | |
640 | if (!fBranchJet && fbTreeOutput) | |
641 | { | |
642 | // fBranchJet = new TClonesArray("AliAODJet",0); | |
643 | fBranchJet = new TClonesArray("AliJetObject",0); | |
644 | fBranchJet->SetName("branch_Jet"); | |
645 | } | |
646 | if (!fEventInfo && fbTreeOutput) | |
7729cc34 | 647 | { |
7495a67b | 648 | fEventInfo = new AliEventInfoObject(); |
649 | fEventInfo->SetName("eventInfo"); | |
7729cc34 | 650 | } |
7495a67b | 651 | Int_t dSizeBuffer = 32000; // default 32000 |
652 | if (fbTreeOutput) | |
653 | { | |
654 | ftreeOut = new TTree("treeV0","Tree V0"); | |
655 | ftreeOut->Branch("branch_V0Rec",&fBranchV0Rec,dSizeBuffer,2); | |
656 | ftreeOut->Branch("branch_V0Gen",&fBranchV0Gen,dSizeBuffer,2); | |
657 | ftreeOut->Branch("branch_Jet",&fBranchJet,dSizeBuffer,2); | |
658 | ftreeOut->Branch("eventInfo",&fEventInfo,dSizeBuffer,2); | |
659 | } | |
660 | */ | |
7729cc34 | 661 | |
662 | fOutputListStd = new TList(); | |
663 | fOutputListStd->SetOwner(); | |
664 | fOutputListQA = new TList(); | |
665 | fOutputListQA->SetOwner(); | |
666 | fOutputListCuts = new TList(); | |
667 | fOutputListCuts->SetOwner(); | |
668 | fOutputListMC = new TList(); | |
669 | fOutputListMC->SetOwner(); | |
670 | ||
671 | // event categories | |
672 | const Int_t iNCategEvent = 6; | |
7495a67b | 673 | TString categEvent[iNCategEvent] = {"coll. candid.", "AOD OK", "vtx & cent", "with V0", "with jets", "jet selection"}; |
7729cc34 | 674 | // labels for stages of V0 selection |
7495a67b | 675 | TString categV0[fgkiNCategV0] = {"all"/*0*/, "mass range"/*1*/, "rec. method"/*2*/, "tracks TPC"/*3*/, "track pt"/*4*/, "DCA prim v"/*5*/, "DCA daughters"/*6*/, "CPA"/*7*/, "volume"/*8*/, "track #it{#eta}"/*9*/, "V0 #it{y} & #it{#eta}"/*10*/, "lifetime"/*11*/, "PID"/*12*/, "Arm.-Pod."/*13*/, "inclusive"/*14*/, "in jet event"/*15*/, "in jet"/*16*/}; |
676 | ||
677 | fh1EventCounterCut = new TH1D("fh1EventCounterCut", "Number of events after filtering;selection filter;counts", iNCategEvent, 0, iNCategEvent); | |
678 | for(Int_t i = 0; i < iNCategEvent; i++) | |
679 | fh1EventCounterCut->GetXaxis()->SetBinLabel(i + 1, categEvent[i].Data()); | |
680 | fh1EventCent2 = new TH1D("fh1EventCent2", "Number of events vs centrality;centrality;counts", 100, 0, 100); | |
681 | fh1EventCent2Jets = new TH1D("fh1EventCent2Jets", "Number of sel.-jet events vs centrality;centrality;counts", 100, 0, 100); | |
682 | fh1EventCent2NoJets = new TH1D("fh1EventCent2NoJets", "Number of no-jet events vs centrality;centrality;counts", 100, 0, 100); | |
683 | fh2EventCentTracks = new TH2D("fh2EventCentTracks", "Number of tracks vs centrality;centrality;tracks;counts", 100, 0, 100, 150, 0, 15e3); | |
684 | fh1EventCent = new TH1D("fh1EventCent", "Number of events in centrality bins;centrality;counts", fgkiNBinsCent, 0, fgkiNBinsCent); | |
685 | for(Int_t i = 0; i < fgkiNBinsCent; i++) | |
686 | fh1EventCent->GetXaxis()->SetBinLabel(i + 1, GetCentBinLabel(i).Data()); | |
687 | fh1NRndConeCent = new TH1D("fh1NRndConeCent", "Number of rnd. cones in centrality bins;centrality;counts", fgkiNBinsCent, 0, fgkiNBinsCent); | |
688 | for(Int_t i = 0; i < fgkiNBinsCent; i++) | |
689 | fh1NRndConeCent->GetXaxis()->SetBinLabel(i + 1, GetCentBinLabel(i).Data()); | |
690 | fh1NMedConeCent = new TH1D("fh1NMedConeCent", "Number of med.-cl. cones in centrality bins;centrality;counts", fgkiNBinsCent, 0, fgkiNBinsCent); | |
691 | for(Int_t i = 0; i < fgkiNBinsCent; i++) | |
692 | fh1NMedConeCent->GetXaxis()->SetBinLabel(i + 1, GetCentBinLabel(i).Data()); | |
693 | fh1AreaExcluded = new TH1D("fh1AreaExcluded", "Area of excluded cones in centrality bins;centrality;area", fgkiNBinsCent, 0, fgkiNBinsCent); | |
694 | for(Int_t i = 0; i < fgkiNBinsCent; i++) | |
695 | fh1AreaExcluded->GetXaxis()->SetBinLabel(i + 1, GetCentBinLabel(i).Data()); | |
7729cc34 | 696 | fOutputListStd->Add(fh1EventCounterCut); |
697 | fOutputListStd->Add(fh1EventCent); | |
698 | fOutputListStd->Add(fh1EventCent2); | |
169867f8 | 699 | fOutputListStd->Add(fh1EventCent2Jets); |
700 | fOutputListStd->Add(fh1EventCent2NoJets); | |
7729cc34 | 701 | fOutputListStd->Add(fh1NRndConeCent); |
9706bde3 | 702 | fOutputListStd->Add(fh1NMedConeCent); |
7729cc34 | 703 | fOutputListStd->Add(fh1AreaExcluded); |
704 | fOutputListStd->Add(fh2EventCentTracks); | |
705 | ||
7495a67b | 706 | fh1V0CandPerEvent = new TH1D("fh1V0CandPerEvent", "Number of all V0 candidates per event;candidates;events", 1000, 0, 1000); |
7729cc34 | 707 | fOutputListStd->Add(fh1V0CandPerEvent); |
708 | ||
7495a67b | 709 | for(Int_t i = 0; i < fgkiNBinsCent; i++) |
710 | { | |
711 | fh1EventCounterCutCent[i] = new TH1D(Form("fh1EventCounterCutCent_%d", i), Form("Number of events after filtering, cent %s;selection filter;counts", GetCentBinLabel(i).Data()), iNCategEvent, 0, iNCategEvent); | |
712 | for(Int_t j = 0; j < iNCategEvent; j++) | |
713 | fh1EventCounterCutCent[i]->GetXaxis()->SetBinLabel(j + 1, categEvent[j].Data()); | |
714 | fh1V0CandPerEventCentK0s[i] = new TH1D(Form("fh1V0CandPerEventCentK0s_%d", i), Form("Number of selected K0s candidates per event, cent %s;candidates;events", GetCentBinLabel(i).Data()), 100, 0, 100); | |
715 | fh1V0CandPerEventCentLambda[i] = new TH1D(Form("fh1V0CandPerEventCentLambda_%d", i), Form("Number of selected Lambda candidates per event, cent %s;candidates;events", GetCentBinLabel(i).Data()), 100, 0, 100); | |
716 | fh1V0CandPerEventCentALambda[i] = new TH1D(Form("fh1V0CandPerEventCentALambda_%d", i), Form("Number of selected ALambda candidates per event, cent %s;candidates;events", GetCentBinLabel(i).Data()), 100, 0, 100); | |
717 | fh1V0CounterCentK0s[i] = new TH1D(Form("fh1V0CounterCentK0s_%d", i), Form("Number of K0s candidates after cuts, cent %s;cut;counts", GetCentBinLabel(i).Data()), fgkiNCategV0, 0, fgkiNCategV0); | |
718 | fh1V0CounterCentLambda[i] = new TH1D(Form("fh1V0CounterCentLambda_%d", i), Form("Number of Lambda candidates after cuts, cent %s;cut;counts", GetCentBinLabel(i).Data()), fgkiNCategV0, 0, fgkiNCategV0); | |
719 | fh1V0CounterCentALambda[i] = new TH1D(Form("fh1V0CounterCentALambda_%d", i), Form("Number of ALambda candidates after cuts, cent %s;cut;counts", GetCentBinLabel(i).Data()), fgkiNCategV0, 0, fgkiNCategV0); | |
720 | for(Int_t j = 0; j < fgkiNCategV0; j++) | |
7729cc34 | 721 | { |
7495a67b | 722 | fh1V0CounterCentK0s[i]->GetXaxis()->SetBinLabel(j + 1, categV0[j].Data()); |
723 | fh1V0CounterCentLambda[i]->GetXaxis()->SetBinLabel(j + 1, categV0[j].Data()); | |
724 | fh1V0CounterCentALambda[i]->GetXaxis()->SetBinLabel(j + 1, categV0[j].Data()); | |
7729cc34 | 725 | } |
7495a67b | 726 | fOutputListStd->Add(fh1EventCounterCutCent[i]); |
727 | fOutputListStd->Add(fh1V0CandPerEventCentK0s[i]); | |
728 | fOutputListStd->Add(fh1V0CandPerEventCentLambda[i]); | |
729 | fOutputListStd->Add(fh1V0CandPerEventCentALambda[i]); | |
730 | fOutputListStd->Add(fh1V0CounterCentK0s[i]); | |
731 | fOutputListStd->Add(fh1V0CounterCentLambda[i]); | |
732 | fOutputListStd->Add(fh1V0CounterCentALambda[i]); | |
733 | } | |
7729cc34 | 734 | // pt binning for V0 and jets |
735 | Int_t iNBinsPtV0 = fgkiNBinsPtV0Init; | |
87e23d3e | 736 | Double_t dPtV0Min = fgkdBinsPtV0[0]; |
737 | Double_t dPtV0Max = fgkdBinsPtV0[fgkiNBinsPtV0]; | |
7729cc34 | 738 | Int_t iNJetPtBins = fgkiNBinsPtJetInit; |
87e23d3e | 739 | Double_t dJetPtMin = fgkdBinsPtJet[0]; |
740 | Double_t dJetPtMax = fgkdBinsPtJet[fgkiNBinsPtJet]; | |
7729cc34 | 741 | |
7495a67b | 742 | fh2CCK0s = new TH2D("fh2CCK0s", "K0s candidates in Lambda peak", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, iNBinsPtV0, dPtV0Min, dPtV0Max); |
743 | fh2CCLambda = new TH2D("fh2CCLambda", "Lambda candidates in K0s peak", fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax, iNBinsPtV0, dPtV0Min, dPtV0Max); | |
7729cc34 | 744 | Int_t binsCorrel[3] = {fgkiNBinsMassK0s, fgkiNBinsMassLambda, iNBinsPtV0}; |
87e23d3e | 745 | Double_t xminCorrel[3] = {fgkdMassK0sMin, fgkdMassLambdaMin, dPtV0Min}; |
746 | Double_t xmaxCorrel[3] = {fgkdMassK0sMax, fgkdMassLambdaMax, dPtV0Max}; | |
7729cc34 | 747 | // Int_t binsCorrel[3] = {200, 200, iNBinsPtV0}; |
87e23d3e | 748 | // Double_t xminCorrel[3] = {0, 0, dPtV0Min}; |
749 | // Double_t xmaxCorrel[3] = {2, 2, dPtV0Max}; | |
7495a67b | 750 | fh3CCMassCorrelBoth = new THnSparseD("fh3CCMassCorrelBoth", "Mass correlation: K0S && Lambda;m K0S;m Lambda;pT", 3, binsCorrel, xminCorrel, xmaxCorrel); |
751 | fh3CCMassCorrelKNotL = new THnSparseD("fh3CCMassCorrelKNotL", "Mass correlation: K0S, not Lambda;m K0S;m Lambda;pT", 3, binsCorrel, xminCorrel, xmaxCorrel); | |
752 | fh3CCMassCorrelLNotK = new THnSparseD("fh3CCMassCorrelLNotK", "Mass correlation: Lambda, not K0S;m K0S;m Lambda;pT", 3, binsCorrel, xminCorrel, xmaxCorrel); | |
7729cc34 | 753 | fOutputListQA->Add(fh2CCK0s); |
754 | fOutputListQA->Add(fh2CCLambda); | |
755 | fOutputListQA->Add(fh3CCMassCorrelBoth); | |
756 | fOutputListQA->Add(fh3CCMassCorrelKNotL); | |
757 | fOutputListQA->Add(fh3CCMassCorrelLNotK); | |
758 | ||
87e23d3e | 759 | Double_t dStepEtaV0 = 0.025; |
760 | Double_t dRangeEtaV0Max = 0.8; | |
7495a67b | 761 | const Int_t iNBinsEtaV0 = 2 * Int_t(dRangeEtaV0Max / dStepEtaV0); |
7729cc34 | 762 | // inclusive |
763 | const Int_t iNDimIncl = 3; | |
764 | Int_t binsKIncl[iNDimIncl] = {fgkiNBinsMassK0s, iNBinsPtV0, iNBinsEtaV0}; | |
87e23d3e | 765 | Double_t xminKIncl[iNDimIncl] = {fgkdMassK0sMin, dPtV0Min, -dRangeEtaV0Max}; |
766 | Double_t xmaxKIncl[iNDimIncl] = {fgkdMassK0sMax, dPtV0Max, dRangeEtaV0Max}; | |
7729cc34 | 767 | Int_t binsLIncl[iNDimIncl] = {fgkiNBinsMassLambda, iNBinsPtV0, iNBinsEtaV0}; |
87e23d3e | 768 | Double_t xminLIncl[iNDimIncl] = {fgkdMassLambdaMin, dPtV0Min, -dRangeEtaV0Max}; |
769 | Double_t xmaxLIncl[iNDimIncl] = {fgkdMassLambdaMax, dPtV0Max, dRangeEtaV0Max}; | |
7729cc34 | 770 | // binning in jets |
771 | const Int_t iNDimInJC = 4; | |
772 | Int_t binsKInJC[iNDimInJC] = {fgkiNBinsMassK0s, iNBinsPtV0, iNBinsEtaV0, iNJetPtBins}; | |
87e23d3e | 773 | Double_t xminKInJC[iNDimInJC] = {fgkdMassK0sMin, dPtV0Min, -dRangeEtaV0Max, dJetPtMin}; |
774 | Double_t xmaxKInJC[iNDimInJC] = {fgkdMassK0sMax, dPtV0Max, dRangeEtaV0Max, dJetPtMax}; | |
7729cc34 | 775 | Int_t binsLInJC[iNDimInJC] = {fgkiNBinsMassLambda, iNBinsPtV0, iNBinsEtaV0, iNJetPtBins}; |
87e23d3e | 776 | Double_t xminLInJC[iNDimInJC] = {fgkdMassLambdaMin, dPtV0Min, -dRangeEtaV0Max, dJetPtMin}; |
777 | Double_t xmaxLInJC[iNDimInJC] = {fgkdMassLambdaMax, dPtV0Max, dRangeEtaV0Max, dJetPtMax}; | |
7729cc34 | 778 | |
779 | // binning eff inclusive vs eta-pT | |
87e23d3e | 780 | Double_t dStepDeltaEta = 0.1; |
781 | Double_t dRangeDeltaEtaMax = 0.5; | |
7495a67b | 782 | const Int_t iNBinsDeltaEta = 2 * Int_t(dRangeDeltaEtaMax / dStepDeltaEta); |
7729cc34 | 783 | Int_t binsEtaK[3] = {fgkiNBinsMassK0s, iNBinsPtV0, iNBinsEtaV0}; |
87e23d3e | 784 | Double_t xminEtaK[3] = {fgkdMassK0sMin, dPtV0Min, -dRangeEtaV0Max}; |
785 | Double_t xmaxEtaK[3] = {fgkdMassK0sMax, dPtV0Max, dRangeEtaV0Max}; | |
7729cc34 | 786 | Int_t binsEtaL[3] = {fgkiNBinsMassLambda, iNBinsPtV0, iNBinsEtaV0}; |
87e23d3e | 787 | Double_t xminEtaL[3] = {fgkdMassLambdaMin, dPtV0Min, -dRangeEtaV0Max}; |
788 | Double_t xmaxEtaL[3] = {fgkdMassLambdaMax, dPtV0Max, dRangeEtaV0Max}; | |
7729cc34 | 789 | // binning eff in jets vs eta-pT |
790 | // associated | |
791 | Int_t binsEtaKInRec[5] = {fgkiNBinsMassK0s, iNBinsPtV0, iNBinsEtaV0, iNJetPtBins, iNBinsDeltaEta}; | |
87e23d3e | 792 | Double_t xminEtaKInRec[5] = {fgkdMassK0sMin, dPtV0Min, -dRangeEtaV0Max, dJetPtMin, -dRangeDeltaEtaMax}; |
793 | Double_t xmaxEtaKInRec[5] = {fgkdMassK0sMax, dPtV0Max, dRangeEtaV0Max, dJetPtMax, dRangeDeltaEtaMax}; | |
7729cc34 | 794 | Int_t binsEtaLInRec[5] = {fgkiNBinsMassLambda, iNBinsPtV0, iNBinsEtaV0, iNJetPtBins, iNBinsDeltaEta}; |
87e23d3e | 795 | Double_t xminEtaLInRec[5] = {fgkdMassLambdaMin, dPtV0Min, -dRangeEtaV0Max, dJetPtMin, -dRangeDeltaEtaMax}; |
796 | Double_t xmaxEtaLInRec[5] = {fgkdMassLambdaMax, dPtV0Max, dRangeEtaV0Max, dJetPtMax, dRangeDeltaEtaMax}; | |
7729cc34 | 797 | // generated |
798 | Int_t binsEtaInGen[4] = {iNBinsPtV0, iNBinsEtaV0, iNJetPtBins, iNBinsDeltaEta}; | |
87e23d3e | 799 | Double_t xminEtaInGen[4] = {dPtV0Min, -dRangeEtaV0Max, dJetPtMin, -dRangeDeltaEtaMax}; |
800 | Double_t xmaxEtaInGen[4] = {dPtV0Max, dRangeEtaV0Max, dJetPtMax, dRangeDeltaEtaMax}; | |
7729cc34 | 801 | // daughter eta: charge-etaD-ptD-etaV0-ptV0-ptJet |
802 | const Int_t iNDimEtaD = 6; | |
803 | Int_t binsEtaDaughter[iNDimEtaD] = {2, 20, iNBinsPtV0, iNBinsEtaV0, iNBinsPtV0, iNJetPtBins}; | |
87e23d3e | 804 | Double_t xminEtaDaughter[iNDimEtaD] = {0, -1, dPtV0Min, -dRangeEtaV0Max, dPtV0Min, dJetPtMin}; |
805 | Double_t xmaxEtaDaughter[iNDimEtaD] = {2, 1, dPtV0Max, dRangeEtaV0Max, dPtV0Max, dJetPtMax}; | |
7729cc34 | 806 | |
7495a67b | 807 | for(Int_t i = 0; i < fgkiNBinsCent; i++) |
808 | { | |
809 | fh1V0InvMassK0sCent[i] = new TH1D(Form("fh1V0InvMassK0sCent_%d", i), Form("K0s: V0 invariant mass, cent %s;#it{m}_{inv} (GeV/#it{c}^{2});counts", GetCentBinLabel(i).Data()), fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax); | |
810 | fh1V0InvMassLambdaCent[i] = new TH1D(Form("fh1V0InvMassLambdaCent_%d", i), Form("Lambda: V0 invariant mass, cent %s;#it{m}_{inv} (GeV/#it{c}^{2});counts", GetCentBinLabel(i).Data()), fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax); | |
811 | fh1V0InvMassALambdaCent[i] = new TH1D(Form("fh1V0InvMassALambdaCent_%d", i), Form("ALambda: V0 invariant mass, cent %s;#it{m}_{inv} (GeV/#it{c}^{2});counts", GetCentBinLabel(i).Data()), fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax); | |
812 | fOutputListStd->Add(fh1V0InvMassK0sCent[i]); | |
813 | fOutputListStd->Add(fh1V0InvMassLambdaCent[i]); | |
814 | fOutputListStd->Add(fh1V0InvMassALambdaCent[i]); | |
815 | // Inclusive | |
816 | fhnV0InclusiveK0s[i] = new THnSparseD(Form("fhnV0InclusiveK0s_C%d", i), "K0s: V0 invariant mass vs pt;#it{m}_{inv} (GeV/#it{c}^{2});pt (GeV/#it{c});counts", iNDimIncl, binsKIncl, xminKIncl, xmaxKIncl); | |
817 | fhnV0InclusiveLambda[i] = new THnSparseD(Form("fhnV0InclusiveLambda_C%d", i), "Lambda: V0 invariant mass vs pt;#it{m}_{inv} (GeV/#it{c}^{2});pt (GeV/#it{c});counts", iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl); | |
818 | fhnV0InclusiveALambda[i] = new THnSparseD(Form("fhnV0InclusiveALambda_C%d", i), "ALambda: V0 invariant mass vs pt;#it{m}_{inv} (GeV/#it{c}^{2});pt (GeV/#it{c});counts", iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl); | |
819 | fOutputListStd->Add(fhnV0InclusiveK0s[i]); | |
820 | fOutputListStd->Add(fhnV0InclusiveLambda[i]); | |
821 | fOutputListStd->Add(fhnV0InclusiveALambda[i]); | |
822 | // In cones | |
823 | fhnV0InJetK0s[i] = new THnSparseD(Form("fhnV0InJetK0s_%d", i), Form("K0s: Mass vs Pt in jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimInJC, binsKInJC, xminKInJC, xmaxKInJC); | |
824 | fOutputListStd->Add(fhnV0InJetK0s[i]); | |
825 | fhnV0InPerpK0s[i] = new THnSparseD(Form("fhnV0InPerpK0s_%d", i), Form("K0s: Mass vs Pt in perp. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimInJC, binsKInJC, xminKInJC, xmaxKInJC); | |
826 | fOutputListStd->Add(fhnV0InPerpK0s[i]); | |
827 | fhnV0InRndK0s[i] = new THnSparseD(Form("fhnV0InRndK0s_%d", i), Form("K0s: Mass vs Pt in rnd. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimIncl, binsKIncl, xminKIncl, xmaxKIncl); | |
828 | fOutputListStd->Add(fhnV0InRndK0s[i]); | |
829 | fhnV0InMedK0s[i] = new THnSparseD(Form("fhnV0InMedK0s_%d", i), Form("K0s: Mass vs Pt in med.-cl. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimIncl, binsKIncl, xminKIncl, xmaxKIncl); | |
830 | fOutputListStd->Add(fhnV0InMedK0s[i]); | |
831 | fhnV0OutJetK0s[i] = new THnSparseD(Form("fhnV0OutJetK0s_%d", i), Form("K0s: Pt outside jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimIncl, binsKIncl, xminKIncl, xmaxKIncl); | |
832 | fOutputListStd->Add(fhnV0OutJetK0s[i]); | |
833 | fhnV0NoJetK0s[i] = new THnSparseD(Form("fhnV0NoJetK0s_%d", i), Form("K0s: Pt in jet-less events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimIncl, binsKIncl, xminKIncl, xmaxKIncl); | |
834 | fOutputListStd->Add(fhnV0NoJetK0s[i]); | |
835 | fhnV0InJetLambda[i] = new THnSparseD(Form("fhnV0InJetLambda_%d", i), Form("Lambda: Mass vs Pt in jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC); | |
836 | fOutputListStd->Add(fhnV0InJetLambda[i]); | |
837 | fhnV0InPerpLambda[i] = new THnSparseD(Form("fhnV0InPerpLambda_%d", i), Form("Lambda: Mass vs Pt in perp. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC); | |
838 | fOutputListStd->Add(fhnV0InPerpLambda[i]); | |
839 | fhnV0InRndLambda[i] = new THnSparseD(Form("fhnV0InRndLambda_%d", i), Form("Lambda: Mass vs Pt in rnd. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl); | |
840 | fOutputListStd->Add(fhnV0InRndLambda[i]); | |
841 | fhnV0InMedLambda[i] = new THnSparseD(Form("fhnV0InMedLambda_%d", i), Form("Lambda: Mass vs Pt in med.-cl. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl); | |
842 | fOutputListStd->Add(fhnV0InMedLambda[i]); | |
843 | fhnV0OutJetLambda[i] = new THnSparseD(Form("fhnV0OutJetLambda_%d", i), Form("Lambda: Pt outside jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl); | |
844 | fOutputListStd->Add(fhnV0OutJetLambda[i]); | |
845 | fhnV0NoJetLambda[i] = new THnSparseD(Form("fhnV0NoJetLambda_%d", i), Form("Lambda: Pt in jet-less events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl); | |
846 | fOutputListStd->Add(fhnV0NoJetLambda[i]); | |
847 | fhnV0InJetALambda[i] = new THnSparseD(Form("fhnV0InJetALambda_%d", i), Form("ALambda: Mass vs Pt in jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC); | |
848 | fOutputListStd->Add(fhnV0InJetALambda[i]); | |
849 | fhnV0InPerpALambda[i] = new THnSparseD(Form("fhnV0InPerpALambda_%d", i), Form("ALambda: Mass vs Pt in perp. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC); | |
850 | fOutputListStd->Add(fhnV0InPerpALambda[i]); | |
851 | fhnV0InRndALambda[i] = new THnSparseD(Form("fhnV0InRndALambda_%d", i), Form("ALambda: Mass vs Pt in rnd. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl); | |
852 | fOutputListStd->Add(fhnV0InRndALambda[i]); | |
853 | fhnV0InMedALambda[i] = new THnSparseD(Form("fhnV0InMedALambda_%d", i), Form("ALambda: Mass vs Pt in med.-cl. cones, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl); | |
854 | fOutputListStd->Add(fhnV0InMedALambda[i]); | |
855 | fhnV0OutJetALambda[i] = new THnSparseD(Form("fhnV0OutJetALambda_%d", i), Form("ALambda: Pt outside jets, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl); | |
856 | fOutputListStd->Add(fhnV0OutJetALambda[i]); | |
857 | fhnV0NoJetALambda[i] = new THnSparseD(Form("fhnV0NoJetALambda_%d", i), Form("ALambda: Pt in jet-less events, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});#it{p}_{T}^{V0} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimIncl, binsLIncl, xminLIncl, xmaxLIncl); | |
858 | fOutputListStd->Add(fhnV0NoJetALambda[i]); | |
859 | ||
860 | fh2V0PtJetAngleK0s[i] = new TH2D(Form("fh2V0PtJetAngleK0s_%d", i), Form("K0s: #it{p}_{T}^{jet} vs angle V0-jet, cent: %s;#it{p}_{T}^{jet};#it{#alpha}", GetCentBinLabel(i).Data()), iNJetPtBins, dJetPtMin, dJetPtMax, 100, 0, fdRadiusJet + 0.1); | |
861 | fOutputListStd->Add(fh2V0PtJetAngleK0s[i]); | |
862 | fh2V0PtJetAngleLambda[i] = new TH2D(Form("fh2V0PtJetAngleLambda_%d", i), Form("Lambda: #it{p}_{T}^{jet} vs angle V0-jet, cent: %s;#it{p}_{T}^{jet};#it{#alpha}", GetCentBinLabel(i).Data()), iNJetPtBins, dJetPtMin, dJetPtMax, 100, 0, fdRadiusJet + 0.1); | |
863 | fOutputListStd->Add(fh2V0PtJetAngleLambda[i]); | |
864 | fh2V0PtJetAngleALambda[i] = new TH2D(Form("fh2V0PtJetAngleALambda_%d", i), Form("ALambda: #it{p}_{T}^{jet} vs angle V0-jet, cent: %s;#it{p}_{T}^{jet};#it{#alpha}", GetCentBinLabel(i).Data()), iNJetPtBins, dJetPtMin, dJetPtMax, 100, 0, fdRadiusJet + 0.1); | |
865 | fOutputListStd->Add(fh2V0PtJetAngleALambda[i]); | |
866 | ||
867 | fh1DCAInK0s[i] = new TH1D(Form("fh1DCAInK0s_%d", i), Form("K0s in jets: DCA daughters, cent %s;DCA (#sigma)", GetCentBinLabel(i).Data()), 50, 0, 1); | |
868 | fOutputListQA->Add(fh1DCAInK0s[i]); | |
869 | fh1DCAInLambda[i] = new TH1D(Form("fh1DCAInLambda_%d", i), Form("Lambda in jets: DCA daughters, cent %s;DCA (#sigma)", GetCentBinLabel(i).Data()), 50, 0, 1); | |
870 | fOutputListQA->Add(fh1DCAInLambda[i]); | |
871 | fh1DCAInALambda[i] = new TH1D(Form("fh1DCAInALambda_%d", i), Form("ALambda in jets: DCA daughters, cent %s;DCA (#sigma)", GetCentBinLabel(i).Data()), 50, 0, 1); | |
872 | fOutputListQA->Add(fh1DCAInALambda[i]); | |
873 | ||
874 | fh1DCAOutK0s[i] = new TH1D(Form("fh1DCAOutK0s_%d", i), Form("K0s outside jets: DCA daughters, cent %s;DCA (#sigma)", GetCentBinLabel(i).Data()), 50, 0, 1); | |
875 | fOutputListQA->Add(fh1DCAOutK0s[i]); | |
876 | fh1DCAOutLambda[i] = new TH1D(Form("fh1DCAOutLambda_%d", i), Form("Lambda outside jets: DCA daughters, cent %s;DCA (#sigma)", GetCentBinLabel(i).Data()), 50, 0, 1); | |
877 | fOutputListQA->Add(fh1DCAOutLambda[i]); | |
878 | fh1DCAOutALambda[i] = new TH1D(Form("fh1DCAOutALambda_%d", i), Form("ALambda outside jets: DCA daughters, cent %s;DCA (#sigma)", GetCentBinLabel(i).Data()), 50, 0, 1); | |
879 | fOutputListQA->Add(fh1DCAOutALambda[i]); | |
880 | ||
881 | /* | |
882 | fh1DeltaZK0s[i] = new TH1D(Form("fh1DeltaZK0s_%d", i), Form("K0s: #Delta#it{z} vertices, cent %s;#it{z} (cm)", GetCentBinLabel(i).Data()), 50, -10, 10); | |
883 | fOutputListQA->Add(fh1DeltaZK0s[i]); | |
884 | fh1DeltaZLambda[i] = new TH1D(Form("fh1DeltaZLambda_%d", i), Form("Lambda: #Delta#it{z} vertices, cent %s;#it{z} (cm)", GetCentBinLabel(i).Data()), 50, -10, 10); | |
885 | fOutputListQA->Add(fh1DeltaZLambda[i]); | |
886 | fh1DeltaZALambda[i] = new TH1D(Form("fh1DeltaZALambda_%d", i), Form("ALambda: #Delta#it{z} vertices, cent %s;#it{z} (cm)", GetCentBinLabel(i).Data()), 50, -10, 10); | |
887 | fOutputListQA->Add(fh1DeltaZALambda[i]); | |
888 | */ | |
889 | ||
890 | // jet histograms | |
891 | fh1PtJet[i] = new TH1D(Form("fh1PtJet_%d", i), Form("Jet pt spectrum, cent: %s;#it{p}_{T} jet (GeV/#it{c})", GetCentBinLabel(i).Data()), iNJetPtBins, dJetPtMin, dJetPtMax); | |
892 | fOutputListStd->Add(fh1PtJet[i]); | |
893 | fh1EtaJet[i] = new TH1D(Form("fh1EtaJet_%d", i), Form("Jet eta spectrum, cent: %s;#it{#eta} jet", GetCentBinLabel(i).Data()), 80, -1., 1.); | |
894 | fOutputListStd->Add(fh1EtaJet[i]); | |
895 | fh2EtaPtJet[i] = new TH2D(Form("fh2EtaPtJet_%d", i), Form("Jet eta vs pT spectrum, cent: %s;#it{#eta} jet;#it{p}_{T} jet (GeV/#it{c})", GetCentBinLabel(i).Data()), 80, -1., 1., iNJetPtBins, dJetPtMin, dJetPtMax); | |
896 | fOutputListStd->Add(fh2EtaPtJet[i]); | |
897 | fh2EtaPhiRndCone[i] = new TH2D(Form("fh2EtaPhiRndCone_%d", i), Form("Rnd. cones: eta vs phi, cent: %s;#it{#eta} cone;#it{#phi} cone", GetCentBinLabel(i).Data()), 80, -1., 1., 100, 0., TMath::TwoPi()); | |
898 | fOutputListStd->Add(fh2EtaPhiRndCone[i]); | |
899 | fh2EtaPhiMedCone[i] = new TH2D(Form("fh2EtaPhiMedCone_%d", i), Form("Med.-cl. cones: eta vs phi, cent: %s;#it{#eta} cone;#it{#phi} cone", GetCentBinLabel(i).Data()), 80, -1., 1., 100, 0., TMath::TwoPi()); | |
900 | fOutputListStd->Add(fh2EtaPhiMedCone[i]); | |
901 | fh1PhiJet[i] = new TH1D(Form("fh1PhiJet_%d", i), Form("Jet phi spectrum, cent: %s;#it{#phi} jet", GetCentBinLabel(i).Data()), 100, 0., TMath::TwoPi()); | |
902 | fOutputListStd->Add(fh1PhiJet[i]); | |
903 | fh1NJetPerEvent[i] = new TH1D(Form("fh1NJetPerEvent_%d", i), Form("Number of selected jets per event, cent: %s;# jets;# events", GetCentBinLabel(i).Data()), 100, 0., 100.); | |
904 | fOutputListStd->Add(fh1NJetPerEvent[i]); | |
905 | // event histograms | |
906 | fh1VtxZ[i] = new TH1D(Form("fh1VtxZ_%d", i), Form("#it{z} coordinate of the primary vertex, cent: %s;#it{z} (cm)", GetCentBinLabel(i).Data()), 150, -1.5 * fdCutVertexZ, 1.5 * fdCutVertexZ); | |
907 | fOutputListQA->Add(fh1VtxZ[i]); | |
908 | fh2VtxXY[i] = new TH2D(Form("fh2VtxXY_%d", i), Form("#it{xy} coordinate of the primary vertex, cent: %s;#it{x} (cm);#it{y} (cm)", GetCentBinLabel(i).Data()), 200, -0.2, 0.2, 500, -0.5, 0.5); | |
909 | fOutputListQA->Add(fh2VtxXY[i]); | |
910 | // fOutputListStd->Add([i]); | |
911 | if(fbMCAnalysis) | |
7729cc34 | 912 | { |
7495a67b | 913 | // inclusive pt |
914 | fh1V0K0sPtMCGen[i] = new TH1D(Form("fh1V0K0sPtMCGen_%d", i), Form("MC K0s generated: pt spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max); | |
915 | fOutputListMC->Add(fh1V0K0sPtMCGen[i]); | |
916 | fh2V0K0sPtMassMCRec[i] = new TH2D(Form("fh2V0K0sPtMassMCRec_%d", i), Form("MC K0s associated: pt-m spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#it{m}_{inv} (GeV/#it{c}^{2})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax); | |
917 | fOutputListMC->Add(fh2V0K0sPtMassMCRec[i]); | |
918 | fh1V0K0sPtMCRecFalse[i] = new TH1D(Form("fh1V0K0sPtMCRecFalse_%d", i), Form("MC K0s false: pt spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max); | |
919 | fOutputListMC->Add(fh1V0K0sPtMCRecFalse[i]); | |
920 | // inclusive pt-eta | |
921 | fh2V0K0sEtaPtMCGen[i] = new TH2D(Form("fh2V0K0sEtaPtMCGen_%d", i), Form("MC K0s generated: pt-eta spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#eta", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNBinsEtaV0, -dRangeEtaV0Max, dRangeEtaV0Max); | |
922 | fOutputListMC->Add(fh2V0K0sEtaPtMCGen[i]); | |
923 | fh3V0K0sEtaPtMassMCRec[i] = new THnSparseD(Form("fh3V0K0sEtaPtMassMCRec_%d", i), Form("MC K0s associated: m-pt-eta spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#eta", GetCentBinLabel(i).Data()), 3, binsEtaK, xminEtaK, xmaxEtaK); | |
924 | fOutputListMC->Add(fh3V0K0sEtaPtMassMCRec[i]); | |
925 | // in jet pt | |
926 | fh2V0K0sInJetPtMCGen[i] = new TH2D(Form("fh2V0K0sInJetPtMCGen_%d", i), Form("MC K0s in jet generated: pt-ptJet spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNJetPtBins, dJetPtMin, dJetPtMax); | |
927 | fOutputListMC->Add(fh2V0K0sInJetPtMCGen[i]); | |
928 | fh3V0K0sInJetPtMassMCRec[i] = new THnSparseD(Form("fh3V0K0sInJetPtMassMCRec_%d", i), Form("MC K0s in jet associated: m-pt-ptJet spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimInJC, binsKInJC, xminKInJC, xmaxKInJC); | |
929 | fOutputListMC->Add(fh3V0K0sInJetPtMassMCRec[i]); | |
930 | // in jet pt-eta | |
931 | fh3V0K0sInJetEtaPtMCGen[i] = new THnSparseD(Form("fh3V0K0sInJetEtaPtMCGen_%d", i), Form("MC K0s generated: pt-eta-ptJet spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#eta;#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), 4, binsEtaInGen, xminEtaInGen, xmaxEtaInGen); | |
932 | fOutputListMC->Add(fh3V0K0sInJetEtaPtMCGen[i]); | |
933 | fh4V0K0sInJetEtaPtMassMCRec[i] = new THnSparseD(Form("fh4V0K0sInJetEtaPtMassMCRec_%d", i), Form("MC K0s associated: m-pt-eta-ptJet spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#eta;#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), 5, binsEtaKInRec, xminEtaKInRec, xmaxEtaKInRec); | |
934 | fOutputListMC->Add(fh4V0K0sInJetEtaPtMassMCRec[i]); | |
935 | ||
936 | fh2V0K0sMCResolMPt[i] = new TH2D(Form("fh2V0K0sMCResolMPt_%d", i), Form("MC K0s associated: #Delta#it{m} vs pt, cent %s;#Delta#it{m} = #it{m}_{inv} - #it{m}_{true} (GeV/#it{c}^{2});#it{p}_{T}^{rec} (GeV/#it{c})", GetCentBinLabel(i).Data()), 100, -0.02, 0.02, iNBinsPtV0, dPtV0Min, dPtV0Max); | |
937 | fOutputListMC->Add(fh2V0K0sMCResolMPt[i]); | |
938 | fh2V0K0sMCPtGenPtRec[i] = new TH2D(Form("fh2V0K0sMCPtGenPtRec_%d", i), Form("MC K0s associated: pt gen vs pt rec, cent %s;#it{p}_{T}^{gen} (GeV/#it{c});#it{p}_{T}^{rec} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNBinsPtV0, dPtV0Min, dPtV0Max); | |
939 | fOutputListMC->Add(fh2V0K0sMCPtGenPtRec[i]); | |
940 | ||
941 | // inclusive pt | |
942 | fh1V0LambdaPtMCGen[i] = new TH1D(Form("fh1V0LambdaPtMCGen_%d", i), Form("MC Lambda generated: pt spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max); | |
943 | fOutputListMC->Add(fh1V0LambdaPtMCGen[i]); | |
944 | fh2V0LambdaPtMassMCRec[i] = new TH2D(Form("fh2V0LambdaPtMassMCRec_%d", i), Form("MC Lambda associated: pt-m spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#it{m}_{inv} (GeV/#it{c}^{2})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax); | |
945 | fOutputListMC->Add(fh2V0LambdaPtMassMCRec[i]); | |
946 | fh1V0LambdaPtMCRecFalse[i] = new TH1D(Form("fh1V0LambdaPtMCRecFalse_%d", i), Form("MC Lambda false: pt spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max); | |
947 | fOutputListMC->Add(fh1V0LambdaPtMCRecFalse[i]); | |
948 | // inclusive pt-eta | |
949 | fh2V0LambdaEtaPtMCGen[i] = new TH2D(Form("fh2V0LambdaEtaPtMCGen_%d", i), Form("MC Lambda generated: pt-eta spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#eta", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNBinsEtaV0, -dRangeEtaV0Max, dRangeEtaV0Max); | |
950 | fOutputListMC->Add(fh2V0LambdaEtaPtMCGen[i]); | |
951 | fh3V0LambdaEtaPtMassMCRec[i] = new THnSparseD(Form("fh3V0LambdaEtaPtMassMCRec_%d", i), Form("MC Lambda associated: m-pt-eta spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#eta", GetCentBinLabel(i).Data()), 3, binsEtaL, xminEtaL, xmaxEtaL); | |
952 | fOutputListMC->Add(fh3V0LambdaEtaPtMassMCRec[i]); | |
953 | // in jet pt | |
954 | fh2V0LambdaInJetPtMCGen[i] = new TH2D(Form("fh2V0LambdaInJetPtMCGen_%d", i), Form("MC Lambda in jet generated: pt-ptJet spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNJetPtBins, dJetPtMin, dJetPtMax); | |
955 | fOutputListMC->Add(fh2V0LambdaInJetPtMCGen[i]); | |
956 | fh3V0LambdaInJetPtMassMCRec[i] = new THnSparseD(Form("fh3V0LambdaInJetPtMassMCRec_%d", i), Form("MC Lambda in jet associated: m-pt-ptJet spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC); | |
957 | fOutputListMC->Add(fh3V0LambdaInJetPtMassMCRec[i]); | |
958 | // in jet pt-eta | |
959 | fh3V0LambdaInJetEtaPtMCGen[i] = new THnSparseD(Form("fh3V0LambdaInJetEtaPtMCGen_%d", i), Form("MC Lambda generated: pt-eta-ptJet spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#eta;#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), 4, binsEtaInGen, xminEtaInGen, xmaxEtaInGen); | |
960 | fOutputListMC->Add(fh3V0LambdaInJetEtaPtMCGen[i]); | |
961 | fh4V0LambdaInJetEtaPtMassMCRec[i] = new THnSparseD(Form("fh4V0LambdaInJetEtaPtMassMCRec_%d", i), Form("MC Lambda associated: m-pt-eta-ptJet spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#eta;#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), 5, binsEtaLInRec, xminEtaLInRec, xmaxEtaLInRec); | |
962 | fOutputListMC->Add(fh4V0LambdaInJetEtaPtMassMCRec[i]); | |
963 | ||
964 | fh2V0LambdaMCResolMPt[i] = new TH2D(Form("fh2V0LambdaMCResolMPt_%d", i), Form("MC Lambda associated: #Delta#it{m} vs pt, cent %s;#Delta#it{m} = #it{m}_{inv} - #it{m}_{true} (GeV/#it{c}^{2});#it{p}_{T}^{rec} (GeV/#it{c})", GetCentBinLabel(i).Data()), 100, -0.02, 0.02, iNBinsPtV0, dPtV0Min, dPtV0Max); | |
965 | fOutputListMC->Add(fh2V0LambdaMCResolMPt[i]); | |
966 | fh2V0LambdaMCPtGenPtRec[i] = new TH2D(Form("fh2V0LambdaMCPtGenPtRec_%d", i), Form("MC Lambda associated: pt gen vs pt rec, cent %s;#it{p}_{T}^{gen} (GeV/#it{c});#it{p}_{T}^{rec} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNBinsPtV0, dPtV0Min, dPtV0Max); | |
967 | fOutputListMC->Add(fh2V0LambdaMCPtGenPtRec[i]); | |
968 | ||
969 | // inclusive pt | |
970 | fh1V0ALambdaPtMCGen[i] = new TH1D(Form("fh1V0ALambdaPtMCGen_%d", i), Form("MC ALambda generated: pt spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max); | |
971 | fOutputListMC->Add(fh1V0ALambdaPtMCGen[i]); | |
972 | fh2V0ALambdaPtMassMCRec[i] = new TH2D(Form("fh2V0ALambdaPtMassMCRec_%d", i), Form("MC ALambda associated: pt-m spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#it{m}_{inv} (GeV/#it{c}^{2})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax); | |
973 | fOutputListMC->Add(fh2V0ALambdaPtMassMCRec[i]); | |
974 | fh1V0ALambdaPtMCRecFalse[i] = new TH1D(Form("fh1V0ALambdaPtMCRecFalse_%d", i), Form("MC ALambda false: pt spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max); | |
975 | fOutputListMC->Add(fh1V0ALambdaPtMCRecFalse[i]); | |
976 | // inclusive pt-eta | |
977 | fh2V0ALambdaEtaPtMCGen[i] = new TH2D(Form("fh2V0ALambdaEtaPtMCGen_%d", i), Form("MC ALambda generated: pt-eta spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#eta", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNBinsEtaV0, -dRangeEtaV0Max, dRangeEtaV0Max); | |
978 | fOutputListMC->Add(fh2V0ALambdaEtaPtMCGen[i]); | |
979 | fh3V0ALambdaEtaPtMassMCRec[i] = new THnSparseD(Form("fh3V0ALambdaEtaPtMassMCRec_%d", i), Form("MC ALambda associated: m-pt-eta spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#eta", GetCentBinLabel(i).Data()), 3, binsEtaL, xminEtaL, xmaxEtaL); | |
980 | fOutputListMC->Add(fh3V0ALambdaEtaPtMassMCRec[i]); | |
981 | // in jet pt | |
982 | fh2V0ALambdaInJetPtMCGen[i] = new TH2D(Form("fh2V0ALambdaInJetPtMCGen_%d", i), Form("MC ALambda in jet generated: pt-ptJet spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNJetPtBins, dJetPtMin, dJetPtMax); | |
983 | fOutputListMC->Add(fh2V0ALambdaInJetPtMCGen[i]); | |
984 | fh3V0ALambdaInJetPtMassMCRec[i] = new THnSparseD(Form("fh3V0ALambdaInJetPtMassMCRec_%d", i), Form("MC ALambda in jet associated: m-pt-ptJet spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimInJC, binsLInJC, xminLInJC, xmaxLInJC); | |
985 | fOutputListMC->Add(fh3V0ALambdaInJetPtMassMCRec[i]); | |
986 | // in jet pt-eta | |
987 | fh3V0ALambdaInJetEtaPtMCGen[i] = new THnSparseD(Form("fh3V0ALambdaInJetEtaPtMCGen_%d", i), Form("MC ALambda generated: pt-eta-ptJet spectrum, cent: %s;MC #it{p}_{T} (GeV/#it{c});#eta;#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), 4, binsEtaInGen, xminEtaInGen, xmaxEtaInGen); | |
988 | fOutputListMC->Add(fh3V0ALambdaInJetEtaPtMCGen[i]); | |
989 | fh4V0ALambdaInJetEtaPtMassMCRec[i] = new THnSparseD(Form("fh4V0ALambdaInJetEtaPtMassMCRec_%d", i), Form("MC ALambda associated: m-pt-eta-ptJet spectrum, cent: %s;#it{m}_{inv} (GeV/#it{c}^{2});MC #it{p}_{T} (GeV/#it{c});#eta;#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), 5, binsEtaLInRec, xminEtaLInRec, xmaxEtaLInRec); | |
990 | fOutputListMC->Add(fh4V0ALambdaInJetEtaPtMassMCRec[i]); | |
991 | ||
992 | fh2V0ALambdaMCResolMPt[i] = new TH2D(Form("fh2V0ALambdaMCResolMPt_%d", i), Form("MC ALambda associated: #Delta#it{m} vs pt, cent %s;#Delta#it{m} = #it{m}_{inv} - #it{m}_{true} (GeV/#it{c}^{2});#it{p}_{T}^{rec} (GeV/#it{c})", GetCentBinLabel(i).Data()), 100, -0.02, 0.02, iNBinsPtV0, dPtV0Min, dPtV0Max); | |
993 | fOutputListMC->Add(fh2V0ALambdaMCResolMPt[i]); | |
994 | fh2V0ALambdaMCPtGenPtRec[i] = new TH2D(Form("fh2V0ALambdaMCPtGenPtRec_%d", i), Form("MC ALambda associated: pt gen vs pt rec, cent %s;#it{p}_{T}^{gen} (GeV/#it{c});#it{p}_{T}^{rec} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtV0, dPtV0Min, dPtV0Max, iNBinsPtV0, dPtV0Min, dPtV0Max); | |
995 | fOutputListMC->Add(fh2V0ALambdaMCPtGenPtRec[i]); | |
996 | ||
997 | Int_t iNBinsPtXi = 80; | |
998 | Double_t dPtXiMin = 0; | |
999 | Double_t dPtXiMax = 8; | |
1000 | const Int_t iNDimFD = 3; | |
1001 | Int_t binsFD[iNDimFD] = {iNBinsPtV0, iNBinsPtXi, iNJetPtBins}; | |
1002 | Double_t xminFD[iNDimFD] = {dPtV0Min, dPtXiMin, dJetPtMin}; | |
1003 | Double_t xmaxFD[iNDimFD] = {dPtV0Max, dPtXiMax, dJetPtMax}; | |
1004 | fhnV0LambdaInclMCFD[i] = new THnSparseD(Form("fhnV0LambdaInclMCFD_%d", i), Form("MC Lambda associated, inclusive, from Xi: pt-pt, cent %s;#it{p}_{T}^{#Lambda,gen.} (GeV/#it{c});#it{p}_{T}^{#Xi,gen.} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimFD, binsFD, xminFD, xmaxFD); | |
1005 | fOutputListMC->Add(fhnV0LambdaInclMCFD[i]); | |
1006 | fhnV0LambdaInJetsMCFD[i] = new THnSparseD(Form("fhnV0LambdaInJetsMCFD_%d", i), Form("MC Lambda associated, in JC, from Xi: pt-pt-ptJet, cent %s;#it{p}_{T}^{#Lambda,gen.} (GeV/#it{c});#it{p}_{T}^{#Xi,gen.} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimFD, binsFD, xminFD, xmaxFD); | |
1007 | fOutputListMC->Add(fhnV0LambdaInJetsMCFD[i]); | |
1008 | fhnV0LambdaBulkMCFD[i] = new THnSparseD(Form("fhnV0LambdaBulkMCFD_%d", i), Form("MC Lambda associated, in no jet events, from Xi: pt-pt, cent %s;#it{p}_{T}^{#Lambda,gen.} (GeV/#it{c});#it{p}_{T}^{#Xi,gen.} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimFD, binsFD, xminFD, xmaxFD); | |
1009 | fOutputListMC->Add(fhnV0LambdaBulkMCFD[i]); | |
1010 | fh1V0XiPtMCGen[i] = new TH1D(Form("fh1V0XiPtMCGen_%d", i), Form("MC Xi^{-} generated: Pt spectrum, cent %s;#it{p}_{T}^{#Xi^{-},gen.} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtXi, dPtXiMin, dPtXiMax); | |
1011 | fOutputListMC->Add(fh1V0XiPtMCGen[i]); | |
1012 | fhnV0ALambdaInclMCFD[i] = new THnSparseD(Form("fhnV0ALambdaInclMCFD_%d", i), Form("MC ALambda associated, from AXi: pt-pt, cent %s;#it{p}_{T}^{A#Lambda,gen.} (GeV/#it{c});#it{p}_{T}^{A#Xi,gen.} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimFD, binsFD, xminFD, xmaxFD); | |
1013 | fOutputListMC->Add(fhnV0ALambdaInclMCFD[i]); | |
1014 | fhnV0ALambdaInJetsMCFD[i] = new THnSparseD(Form("fhnV0ALambdaInJetsMCFD_%d", i), Form("MC ALambda associated, in JC, from AXi: pt-pt-ptJet, cent %s;#it{p}_{T}^{A#Lambda,gen.} (GeV/#it{c});#it{p}_{T}^{A#Xi,gen.} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimFD, binsFD, xminFD, xmaxFD); | |
1015 | fOutputListMC->Add(fhnV0ALambdaInJetsMCFD[i]); | |
1016 | fhnV0ALambdaBulkMCFD[i] = new THnSparseD(Form("fhnV0ALambdaBulkMCFD_%d", i), Form("MC ALambda associated, in no jet events, from AXi: pt-pt-ptJet, cent %s;#it{p}_{T}^{A#Lambda,gen.} (GeV/#it{c});#it{p}_{T}^{A#Xi,gen.} (GeV/#it{c});#it{p}_{T}^{jet} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNDimFD, binsFD, xminFD, xmaxFD); | |
1017 | fOutputListMC->Add(fhnV0ALambdaBulkMCFD[i]); | |
1018 | fh1V0AXiPtMCGen[i] = new TH1D(Form("fh1V0AXiPtMCGen_%d", i), Form("MC AXi^{-} generated: Pt spectrum, cent %s;#it{p}_{T}^{A#Xi^{-},gen.} (GeV/#it{c})", GetCentBinLabel(i).Data()), iNBinsPtXi, dPtXiMin, dPtXiMax); | |
1019 | fOutputListMC->Add(fh1V0AXiPtMCGen[i]); | |
1020 | ||
1021 | // daughter eta | |
7729cc34 | 1022 | // fhnV0K0sInclDaughterEtaPtPtMCGen[i] = new THnSparseD(Form("fhnV0K0sInclDaughterEtaPtPtMCGen_%d",i),Form("MC K0S, inclusive, gen., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta daughter;pT daughter;eta V0;pT V0;pT jet",GetCentBinLabel(i).Data()),iNDimEtaD,binsEtaDaughter,xminEtaDaughter,xmaxEtaDaughter); |
7495a67b | 1023 | fhnV0K0sInclDaughterEtaPtPtMCRec[i] = new THnSparseD(Form("fhnV0K0sInclDaughterEtaPtPtMCRec_%d", i), Form("MC K0S, inclusive, assoc., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta daughter;pT daughter;eta V0;pT V0;pT jet", GetCentBinLabel(i).Data()), iNDimEtaD, binsEtaDaughter, xminEtaDaughter, xmaxEtaDaughter); |
7729cc34 | 1024 | // fhnV0K0sInJetsDaughterEtaPtPtMCGen[i] = new THnSparseD(Form("fhnV0K0sInJetsDaughterEtaPtPtMCGen_%d",i),Form("MC K0S, in JC, gen., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta daughter;pT daughter;eta V0;pT V0;pT jet",GetCentBinLabel(i).Data()),iNDimEtaD,binsEtaDaughter,xminEtaDaughter,xmaxEtaDaughter); |
7495a67b | 1025 | fhnV0K0sInJetsDaughterEtaPtPtMCRec[i] = new THnSparseD(Form("fhnV0K0sInJetsDaughterEtaPtPtMCRec_%d", i), Form("MC K0S, in JC, assoc., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta daughter;pT daughter;eta V0;pT V0;pT jet", GetCentBinLabel(i).Data()), iNDimEtaD, binsEtaDaughter, xminEtaDaughter, xmaxEtaDaughter); |
7729cc34 | 1026 | // fhnV0LambdaInclDaughterEtaPtPtMCGen[i] = new THnSparseD(Form("fhnV0LambdaInclDaughterEtaPtPtMCGen_%d",i),Form("MC Lambda, inclusive, gen., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta daughter;pT daughter;eta V0;pT V0;pT jet",GetCentBinLabel(i).Data()),iNDimEtaD,binsEtaDaughter,xminEtaDaughter,xmaxEtaDaughter); |
7495a67b | 1027 | fhnV0LambdaInclDaughterEtaPtPtMCRec[i] = new THnSparseD(Form("fhnV0LambdaInclDaughterEtaPtPtMCRec_%d", i), Form("MC Lambda, inclusive, assoc., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta daughter;pT daughter;eta V0;pT V0;pT jet", GetCentBinLabel(i).Data()), iNDimEtaD, binsEtaDaughter, xminEtaDaughter, xmaxEtaDaughter); |
7729cc34 | 1028 | // fhnV0LambdaInJetsDaughterEtaPtPtMCGen[i] = new THnSparseD(Form("fhnV0LambdaInJetsDaughterEtaPtPtMCGen_%d",i),Form("MC Lambda, in JC, gen., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta daughter;pT daughter;eta V0;pT V0;pT jet",GetCentBinLabel(i).Data()),iNDimEtaD,binsEtaDaughter,xminEtaDaughter,xmaxEtaDaughter); |
7495a67b | 1029 | fhnV0LambdaInJetsDaughterEtaPtPtMCRec[i] = new THnSparseD(Form("fhnV0LambdaInJetsDaughterEtaPtPtMCRec_%d", i), Form("MC Lambda, in JC, assoc., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta daughter;pT daughter;eta V0;pT V0;pT jet", GetCentBinLabel(i).Data()), iNDimEtaD, binsEtaDaughter, xminEtaDaughter, xmaxEtaDaughter); |
7729cc34 | 1030 | // fhnV0ALambdaInclDaughterEtaPtPtMCGen[i] = new THnSparseD(Form("fhnV0ALambdaInclDaughterEtaPtPtMCGen_%d",i),Form("MC ALambda, inclusive, gen., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta daughter;pT daughter;eta V0;pT V0;pT jet",GetCentBinLabel(i).Data()),iNDimEtaD,binsEtaDaughter,xminEtaDaughter,xmaxEtaDaughter); |
7495a67b | 1031 | fhnV0ALambdaInclDaughterEtaPtPtMCRec[i] = new THnSparseD(Form("fhnV0ALambdaInclDaughterEtaPtPtMCRec_%d", i), Form("MC ALambda, inclusive, assoc., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta daughter;pT daughter;eta V0;pT V0;pT jet", GetCentBinLabel(i).Data()), iNDimEtaD, binsEtaDaughter, xminEtaDaughter, xmaxEtaDaughter); |
7729cc34 | 1032 | // fhnV0ALambdaInJetsDaughterEtaPtPtMCGen[i] = new THnSparseD(Form("fhnV0ALambdaInJetsDaughterEtaPtPtMCGen_%d",i),Form("MC ALambda, in JC, gen., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta daughter;pT daughter;eta V0;pT V0;pT jet",GetCentBinLabel(i).Data()),iNDimEtaD,binsEtaDaughter,xminEtaDaughter,xmaxEtaDaughter); |
7495a67b | 1033 | fhnV0ALambdaInJetsDaughterEtaPtPtMCRec[i] = new THnSparseD(Form("fhnV0ALambdaInJetsDaughterEtaPtPtMCRec_%d", i), Form("MC ALambda, in JC, assoc., daughters: charge-etaD-ptD-etaV0-ptV0-ptJet, cent: %s;charge;eta daughter;pT daughter;eta V0;pT V0;pT jet", GetCentBinLabel(i).Data()), iNDimEtaD, binsEtaDaughter, xminEtaDaughter, xmaxEtaDaughter); |
7729cc34 | 1034 | |
1035 | // fOutputListMC->Add(fhnV0K0sInclDaughterEtaPtPtMCGen[i]); | |
7495a67b | 1036 | fOutputListMC->Add(fhnV0K0sInclDaughterEtaPtPtMCRec[i]); |
7729cc34 | 1037 | // fOutputListMC->Add(fhnV0K0sInJetsDaughterEtaPtPtMCGen[i]); |
7495a67b | 1038 | fOutputListMC->Add(fhnV0K0sInJetsDaughterEtaPtPtMCRec[i]); |
7729cc34 | 1039 | // fOutputListMC->Add(fhnV0LambdaInclDaughterEtaPtPtMCGen[i]); |
7495a67b | 1040 | fOutputListMC->Add(fhnV0LambdaInclDaughterEtaPtPtMCRec[i]); |
7729cc34 | 1041 | // fOutputListMC->Add(fhnV0LambdaInJetsDaughterEtaPtPtMCGen[i]); |
7495a67b | 1042 | fOutputListMC->Add(fhnV0LambdaInJetsDaughterEtaPtPtMCRec[i]); |
7729cc34 | 1043 | // fOutputListMC->Add(fhnV0ALambdaInclDaughterEtaPtPtMCGen[i]); |
7495a67b | 1044 | fOutputListMC->Add(fhnV0ALambdaInclDaughterEtaPtPtMCRec[i]); |
7729cc34 | 1045 | // fOutputListMC->Add(fhnV0ALambdaInJetsDaughterEtaPtPtMCGen[i]); |
7495a67b | 1046 | fOutputListMC->Add(fhnV0ALambdaInJetsDaughterEtaPtPtMCRec[i]); |
7729cc34 | 1047 | } |
7495a67b | 1048 | } |
7729cc34 | 1049 | |
1050 | // QA Histograms | |
7495a67b | 1051 | for(Int_t i = 0; i < fgkiNQAIndeces; i++) |
1052 | { | |
7729cc34 | 1053 | // [i] = new TH1D(Form("%d",i),";;Counts",,,); |
7495a67b | 1054 | fh1QAV0Status[i] = new TH1D(Form("fh1QAV0Status_%d", i), "QA: V0 status", 2, 0, 2); |
1055 | fh1QAV0TPCRefit[i] = new TH1D(Form("fh1QAV0TPCRefit_%d", i), "QA: TPC refit", 2, 0, 2); | |
1056 | fh1QAV0TPCRows[i] = new TH1D(Form("fh1QAV0TPCRows_%d", i), "QA: TPC Rows", 160, 0, 160); | |
1057 | fh1QAV0TPCFindable[i] = new TH1D(Form("fh1QAV0TPCFindable_%d", i), "QA: TPC Findable", 160, 0, 160); | |
1058 | fh1QAV0TPCRowsFind[i] = new TH1D(Form("fh1QAV0TPCRowsFind_%d", i), "QA: TPC Rows/Findable", 100, 0, 2); | |
1059 | fh1QAV0Eta[i] = new TH1D(Form("fh1QAV0Eta_%d", i), "QA: Daughter Eta", 200, -2, 2); | |
1060 | fh2QAV0EtaRows[i] = new TH2D(Form("fh2QAV0EtaRows_%d", i), "QA: Daughter Eta vs TPC rows;#eta;TPC rows", 200, -2, 2, 160, 0, 160); | |
1061 | fh2QAV0PtRows[i] = new TH2D(Form("fh2QAV0PtRows_%d", i), "QA: Daughter Pt vs TPC rows;pt;TPC rows", 100, 0, 10, 160, 0, 160); | |
1062 | fh2QAV0PhiRows[i] = new TH2D(Form("fh2QAV0PhiRows_%d", i), "QA: Daughter Phi vs TPC rows;#phi;TPC rows", 100, 0, TMath::TwoPi(), 160, 0, 160); | |
1063 | fh2QAV0NClRows[i] = new TH2D(Form("fh2QAV0NClRows_%d", i), "QA: Daughter NCl vs TPC rows;findable clusters;TPC rows", 100, 0, 160, 160, 0, 160); | |
1064 | fh2QAV0EtaNCl[i] = new TH2D(Form("fh2QAV0EtaNCl_%d", i), "QA: Daughter Eta vs NCl;#eta;findable clusters", 200, -2, 2, 160, 0, 160); | |
1065 | ||
1066 | fh2QAV0EtaPtK0sPeak[i] = new TH2D(Form("fh2QAV0EtaPtK0sPeak_%d", i), "QA: K0s: Daughter Eta vs V0 pt, peak;track eta;V0 pt", 200, -2, 2, iNBinsPtV0, dPtV0Min, dPtV0Max); | |
1067 | fh2QAV0EtaEtaK0s[i] = new TH2D(Form("fh2QAV0EtaEtaK0s_%d", i), "QA: K0s: Eta vs Eta Daughter", 200, -2, 2, 200, -2, 2); | |
1068 | fh2QAV0PhiPhiK0s[i] = new TH2D(Form("fh2QAV0PhiPhiK0s_%d", i), "QA: K0s: Phi vs Phi Daughter", 200, 0, TMath::TwoPi(), 200, 0, TMath::TwoPi()); | |
1069 | fh1QAV0RapK0s[i] = new TH1D(Form("fh1QAV0RapK0s_%d", i), "QA: K0s: V0 Rapidity", 200, -2, 2); | |
1070 | fh2QAV0PtPtK0sPeak[i] = new TH2D(Form("fh2QAV0PtPtK0sPeak_%d", i), "QA: K0s: Daughter Pt vs Pt;neg pt;pos pt", 100, 0, 5, 100, 0, 5); | |
1071 | ||
1072 | fh2QAV0EtaPtLambdaPeak[i] = new TH2D(Form("fh2QAV0EtaPtLambdaPeak_%d", i), "QA: Lambda: Daughter Eta vs V0 pt, peak;track eta;V0 pt", 200, -2, 2, iNBinsPtV0, dPtV0Min, dPtV0Max); | |
1073 | fh2QAV0EtaEtaLambda[i] = new TH2D(Form("fh2QAV0EtaEtaLambda_%d", i), "QA: Lambda: Eta vs Eta Daughter", 200, -2, 2, 200, -2, 2); | |
1074 | fh2QAV0PhiPhiLambda[i] = new TH2D(Form("fh2QAV0PhiPhiLambda_%d", i), "QA: Lambda: Phi vs Phi Daughter", 200, 0, TMath::TwoPi(), 200, 0, TMath::TwoPi()); | |
1075 | fh1QAV0RapLambda[i] = new TH1D(Form("fh1QAV0RapLambda_%d", i), "QA: Lambda: V0 Rapidity", 200, -2, 2); | |
1076 | fh2QAV0PtPtLambdaPeak[i] = new TH2D(Form("fh2QAV0PtPtLambdaPeak_%d", i), "QA: Lambda: Daughter Pt vs Pt;neg pt;pos pt", 100, 0, 5, 100, 0, 5); | |
1077 | ||
1078 | fh1QAV0Pt[i] = new TH1D(Form("fh1QAV0Pt_%d", i), "QA: Daughter Pt", 100, 0, 5); | |
1079 | fh1QAV0Charge[i] = new TH1D(Form("fh1QAV0Charge_%d", i), "QA: V0 Charge", 3, -1, 2); | |
1080 | fh1QAV0DCAVtx[i] = new TH1D(Form("fh1QAV0DCAVtx_%d", i), "QA: DCA daughters to primary vertex", 100, 0, 10); | |
1081 | fh1QAV0DCAV0[i] = new TH1D(Form("fh1QAV0DCAV0_%d", i), "QA: DCA daughters", 100, 0, 2); | |
1082 | fh1QAV0Cos[i] = new TH1D(Form("fh1QAV0Cos_%d", i), "QA: CPA", 10000, 0.9, 1); | |
1083 | fh1QAV0R[i] = new TH1D(Form("fh1QAV0R_%d", i), "QA: R", 1500, 0, 150); | |
1084 | fh1QACTau2D[i] = new TH1D(Form("fh1QACTau2D_%d", i), "QA: K0s: c#tau 2D;mR/pt#tau", 100, 0, 10); | |
1085 | fh1QACTau3D[i] = new TH1D(Form("fh1QACTau3D_%d", i), "QA: K0s: c#tau 3D;mL/p#tau", 100, 0, 10); | |
1086 | ||
1087 | fh2ArmPod[i] = new TH2D(Form("fh2ArmPod_%d", i), "Armenteros-Podolanski;#alpha;#it{p}_{T}^{Arm}", 100, -1., 1., 50, 0., 0.25); | |
1088 | fh2ArmPodK0s[i] = new TH2D(Form("fh2ArmPodK0s_%d", i), "K0s: Armenteros-Podolanski;#alpha;#it{p}_{T}^{Arm}", 100, -1., 1., 50, 0., 0.25); | |
1089 | fh2ArmPodLambda[i] = new TH2D(Form("fh2ArmPodLambda_%d", i), "Lambda: Armenteros-Podolanski;#alpha;#it{p}_{T}^{Arm}", 100, -1., 1., 50, 0., 0.25); | |
1090 | fh2ArmPodALambda[i] = new TH2D(Form("fh2ArmPodALambda_%d", i), "ALambda: Armenteros-Podolanski;#alpha;#it{p}_{T}^{Arm}", 100, -1., 1., 50, 0., 0.25); | |
1091 | ||
1092 | fOutputListQA->Add(fh1QAV0Status[i]); | |
1093 | fOutputListQA->Add(fh1QAV0TPCRefit[i]); | |
1094 | fOutputListQA->Add(fh1QAV0TPCRows[i]); | |
1095 | fOutputListQA->Add(fh1QAV0TPCFindable[i]); | |
1096 | fOutputListQA->Add(fh1QAV0TPCRowsFind[i]); | |
1097 | fOutputListQA->Add(fh1QAV0Eta[i]); | |
1098 | fOutputListQA->Add(fh2QAV0EtaRows[i]); | |
1099 | fOutputListQA->Add(fh2QAV0PtRows[i]); | |
1100 | fOutputListQA->Add(fh2QAV0PhiRows[i]); | |
1101 | fOutputListQA->Add(fh2QAV0NClRows[i]); | |
1102 | fOutputListQA->Add(fh2QAV0EtaNCl[i]); | |
1103 | ||
1104 | fOutputListQA->Add(fh2QAV0EtaPtK0sPeak[i]); | |
1105 | fOutputListQA->Add(fh2QAV0EtaEtaK0s[i]); | |
1106 | fOutputListQA->Add(fh2QAV0PhiPhiK0s[i]); | |
1107 | fOutputListQA->Add(fh1QAV0RapK0s[i]); | |
1108 | fOutputListQA->Add(fh2QAV0PtPtK0sPeak[i]); | |
1109 | ||
1110 | fOutputListQA->Add(fh2QAV0EtaPtLambdaPeak[i]); | |
1111 | fOutputListQA->Add(fh2QAV0EtaEtaLambda[i]); | |
1112 | fOutputListQA->Add(fh2QAV0PhiPhiLambda[i]); | |
1113 | fOutputListQA->Add(fh1QAV0RapLambda[i]); | |
1114 | fOutputListQA->Add(fh2QAV0PtPtLambdaPeak[i]); | |
1115 | ||
1116 | fOutputListQA->Add(fh1QAV0Pt[i]); | |
1117 | fOutputListQA->Add(fh1QAV0Charge[i]); | |
1118 | fOutputListQA->Add(fh1QAV0DCAVtx[i]); | |
1119 | fOutputListQA->Add(fh1QAV0DCAV0[i]); | |
1120 | fOutputListQA->Add(fh1QAV0Cos[i]); | |
1121 | fOutputListQA->Add(fh1QAV0R[i]); | |
1122 | fOutputListQA->Add(fh1QACTau2D[i]); | |
1123 | fOutputListQA->Add(fh1QACTau3D[i]); | |
1124 | ||
1125 | fOutputListQA->Add(fh2ArmPod[i]); | |
1126 | fOutputListQA->Add(fh2ArmPodK0s[i]); | |
1127 | fOutputListQA->Add(fh2ArmPodLambda[i]); | |
1128 | fOutputListQA->Add(fh2ArmPodALambda[i]); | |
1129 | ||
1130 | /* | |
1131 | fh2CutTPCRowsK0s[i] = new TH2D(Form("fh2CutTPCRowsK0s_%d", i), "Cuts: K0s: TPC Rows vs mass;#it{m}_{inv} (GeV/#it{c}^{2});TPC rows", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, 160, 0, 160); | |
1132 | fh2CutTPCRowsLambda[i] = new TH2D(Form("fh2CutTPCRowsLambda_%d", i), "Cuts: Lambda: TPC Rows vs mass;#it{m}_{inv} (GeV/#it{c}^{2});TPC rows", fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax, 160, 0, 160); | |
1133 | fh2CutPtPosK0s[i] = new TH2D(Form("fh2CutPtPosK0s_%d", i), "Cuts: K0s: Pt pos;#it{m}_{inv} (GeV/#it{c}^{2});pt pos", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, 100, 0, 5); | |
1134 | fh2CutPtNegK0s[i] = new TH2D(Form("fh2CutPtNegK0s_%d", i), "Cuts: K0s: Pt neg;#it{m}_{inv} (GeV/#it{c}^{2});pt neg", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, 100, 0, 5); | |
1135 | fh2CutPtPosLambda[i] = new TH2D(Form("fh2CutPtPosLambda_%d", i), "Cuts: Lambda: Pt pos;#it{m}_{inv} (GeV/#it{c}^{2});pt pos", fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax, 100, 0, 5); | |
1136 | fh2CutPtNegLambda[i] = new TH2D(Form("fh2CutPtNegLambda_%d", i), "Cuts: Lambda: Pt neg;#it{m}_{inv} (GeV/#it{c}^{2});pt neg", fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax, 100, 0, 5); | |
1137 | fh2CutDCAVtx[i] = new TH2D(Form("fh2CutDCAVtx_%d", i), "Cuts: DCA daughters to prim. vtx.;#it{m}_{inv} (GeV/#it{c}^{2});DCA daughter to prim. vtx. (cm)", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, 100, 0, 10); | |
1138 | fh2CutDCAV0[i] = new TH2D(Form("fh2CutDCAV0_%d", i), "Cuts: DCA daughters;#it{m}_{inv} (GeV/#it{c}^{2});DCA daughters / #sigma_{TPC}", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, 100, 0, 2); | |
1139 | fh2CutCos[i] = new TH2D(Form("fh2CutCos_%d", i), "Cuts: CPA;#it{m}_{inv} (GeV/#it{c}^{2});CPA", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, 10000, 0.9, 1); | |
1140 | fh2CutR[i] = new TH2D(Form("fh2CutR_%d", i), "Cuts: R;#it{m}_{inv} (GeV/#it{c}^{2});R (cm)", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, 1500, 0, 150); | |
1141 | fh2CutEtaK0s[i] = new TH2D(Form("fh2CutEtaK0s_%d", i), "Cuts: K0s: Eta;#it{m}_{inv} (GeV/#it{c}^{2});#eta", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, 200, -2, 2); | |
1142 | fh2CutEtaLambda[i] = new TH2D(Form("fh2CutEtaLambda_%d", i), "Cuts: Lambda: Eta;#it{m}_{inv} (GeV/#it{c}^{2});#eta", fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax, 200, -2, 2); | |
1143 | fh2CutRapK0s[i] = new TH2D(Form("fh2CutRapK0s_%d", i), "Cuts: K0s: Rapidity;#it{m}_{inv} (GeV/#it{c}^{2});y", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, 200, -2, 2); | |
1144 | fh2CutRapLambda[i] = new TH2D(Form("fh2CutRapLambda_%d", i), "Cuts: Lambda: Rapidity;#it{m}_{inv} (GeV/#it{c}^{2});y", fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax, 200, -2, 2); | |
1145 | fh2CutCTauK0s[i] = new TH2D(Form("fh2CutCTauK0s_%d", i), "Cuts: K0s: #it{c#tau};#it{m}_{inv} (GeV/#it{c}^{2});#it{mL/p#tau}", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, 100, 0, 10); | |
1146 | fh2CutCTauLambda[i] = new TH2D(Form("fh2CutCTauLambda_%d", i), "Cuts: Lambda: #it{c#tau};#it{m}_{inv} (GeV/#it{c}^{2});#it{mL/p#tau}", fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax, 100, 0, 10); | |
1147 | fh2CutPIDPosK0s[i] = new TH2D(Form("fh2CutPIDPosK0s_%d", i), "Cuts: K0s: PID pos;#it{m}_{inv} (GeV/#it{c}^{2});##sigma_{d#it{E}/d#it{x}}", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, 100, 0, 10); | |
1148 | fh2CutPIDNegK0s[i] = new TH2D(Form("fh2CutPIDNegK0s_%d", i), "Cuts: K0s: PID neg;#it{m}_{inv} (GeV/#it{c}^{2});##sigma_{d#it{E}/d#it{x}}", fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax, 100, 0, 10); | |
1149 | fh2CutPIDPosLambda[i] = new TH2D(Form("fh2CutPIDPosLambda_%d", i), "Cuts: Lambda: PID pos;#it{m}_{inv} (GeV/#it{c}^{2});##sigma_{d#it{E}/d#it{x}}", fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax, 100, 0, 10); | |
1150 | fh2CutPIDNegLambda[i] = new TH2D(Form("fh2CutPIDNegLambda_%d", i), "Cuts: Lambda: PID neg;#it{m}_{inv} (GeV/#it{c}^{2});##sigma_{d#it{E}/d#it{x}}", fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax, 100, 0, 10); | |
1151 | fh2Tau3DVs2D[i] = new TH2D(Form("fh2Tau3DVs2D_%d", i), "Decay 3D vs 2D;pt;3D/2D", 100, 0, 10, 200, 0.5, 1.5); | |
1152 | ||
1153 | fOutputListCuts->Add(fh2CutTPCRowsK0s[i]); | |
1154 | fOutputListCuts->Add(fh2CutTPCRowsLambda[i]); | |
1155 | fOutputListCuts->Add(fh2CutPtPosK0s[i]); | |
1156 | fOutputListCuts->Add(fh2CutPtNegK0s[i]); | |
1157 | fOutputListCuts->Add(fh2CutPtPosLambda[i]); | |
1158 | fOutputListCuts->Add(fh2CutPtNegLambda[i]); | |
1159 | fOutputListCuts->Add(fh2CutDCAVtx[i]); | |
1160 | fOutputListCuts->Add(fh2CutDCAV0[i]); | |
1161 | fOutputListCuts->Add(fh2CutCos[i]); | |
1162 | fOutputListCuts->Add(fh2CutR[i]); | |
1163 | fOutputListCuts->Add(fh2CutEtaK0s[i]); | |
1164 | fOutputListCuts->Add(fh2CutEtaLambda[i]); | |
1165 | fOutputListCuts->Add(fh2CutRapK0s[i]); | |
1166 | fOutputListCuts->Add(fh2CutRapLambda[i]); | |
1167 | fOutputListCuts->Add(fh2CutCTauK0s[i]); | |
1168 | fOutputListCuts->Add(fh2CutCTauLambda[i]); | |
1169 | fOutputListCuts->Add(fh2CutPIDPosK0s[i]); | |
1170 | fOutputListCuts->Add(fh2CutPIDNegK0s[i]); | |
1171 | fOutputListCuts->Add(fh2CutPIDPosLambda[i]); | |
1172 | fOutputListCuts->Add(fh2CutPIDNegLambda[i]); | |
1173 | fOutputListCuts->Add(fh2Tau3DVs2D[i]); | |
1174 | */ | |
1175 | } | |
1176 | ||
1177 | for(Int_t i = 0; i < fgkiNCategV0; i++) | |
1178 | { | |
1179 | fh1V0InvMassK0sAll[i] = new TH1D(Form("fh1V0InvMassK0sAll_%d", i), Form("K0s: V0 invariant mass, %s;#it{m}_{inv} (GeV/#it{c}^{2});counts", categV0[i].Data()), fgkiNBinsMassK0s, fgkdMassK0sMin, fgkdMassK0sMax); | |
1180 | fh1V0InvMassLambdaAll[i] = new TH1D(Form("fh1V0InvMassLambdaAll_%d", i), Form("Lambda: V0 invariant mass, %s;#it{m}_{inv} (GeV/#it{c}^{2});counts", categV0[i].Data()), fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax); | |
1181 | fh1V0InvMassALambdaAll[i] = new TH1D(Form("fh1V0InvMassALambdaAll_%d", i), Form("ALambda: V0 invariant mass, %s;#it{m}_{inv} (GeV/#it{c}^{2});counts", categV0[i].Data()), fgkiNBinsMassLambda, fgkdMassLambdaMin, fgkdMassLambdaMax); | |
1182 | fOutputListStd->Add(fh1V0InvMassK0sAll[i]); | |
1183 | fOutputListStd->Add(fh1V0InvMassLambdaAll[i]); | |
1184 | fOutputListStd->Add(fh1V0InvMassALambdaAll[i]); | |
1185 | } | |
1186 | ||
1187 | for(Int_t i = 0; i < fOutputListStd->GetEntries(); ++i) | |
1188 | { | |
1189 | TH1* h1 = dynamic_cast<TH1*>(fOutputListStd->At(i)); | |
1190 | if(h1) | |
7729cc34 | 1191 | { |
7495a67b | 1192 | h1->Sumw2(); |
1193 | continue; | |
7729cc34 | 1194 | } |
7495a67b | 1195 | THnSparse* hn = dynamic_cast<THnSparse*>(fOutputListStd->At(i)); |
1196 | if(hn) hn->Sumw2(); | |
1197 | } | |
1198 | for(Int_t i = 0; i < fOutputListQA->GetEntries(); ++i) | |
1199 | { | |
1200 | TH1* h1 = dynamic_cast<TH1*>(fOutputListQA->At(i)); | |
1201 | if(h1) | |
7729cc34 | 1202 | { |
7495a67b | 1203 | h1->Sumw2(); |
1204 | continue; | |
7729cc34 | 1205 | } |
7495a67b | 1206 | THnSparse* hn = dynamic_cast<THnSparse*>(fOutputListQA->At(i)); |
1207 | if(hn) hn->Sumw2(); | |
1208 | } | |
1209 | for(Int_t i = 0; i < fOutputListCuts->GetEntries(); ++i) | |
1210 | { | |
1211 | TH1* h1 = dynamic_cast<TH1*>(fOutputListCuts->At(i)); | |
1212 | if(h1) | |
7729cc34 | 1213 | { |
7495a67b | 1214 | h1->Sumw2(); |
1215 | continue; | |
7729cc34 | 1216 | } |
7495a67b | 1217 | THnSparse* hn = dynamic_cast<THnSparse*>(fOutputListCuts->At(i)); |
1218 | if(hn) hn->Sumw2(); | |
1219 | } | |
1220 | for(Int_t i = 0; i < fOutputListMC->GetEntries(); ++i) | |
1221 | { | |
1222 | TH1* h1 = dynamic_cast<TH1*>(fOutputListMC->At(i)); | |
1223 | if(h1) | |
7729cc34 | 1224 | { |
7495a67b | 1225 | h1->Sumw2(); |
1226 | continue; | |
7729cc34 | 1227 | } |
7495a67b | 1228 | THnSparse* hn = dynamic_cast<THnSparse*>(fOutputListMC->At(i)); |
1229 | if(hn) hn->Sumw2(); | |
1230 | } | |
1231 | ||
1232 | PostData(1, fOutputListStd); | |
1233 | PostData(2, fOutputListQA); | |
1234 | PostData(3, fOutputListCuts); | |
1235 | PostData(4, fOutputListMC); | |
7729cc34 | 1236 | // if (fbTreeOutput) |
1237 | // PostData(5,ftreeOut); | |
1238 | } | |
1239 | ||
7495a67b | 1240 | void AliAnalysisTaskV0sInJets::UserExec(Option_t*) |
7729cc34 | 1241 | { |
1242 | // Main loop, called for each event | |
7495a67b | 1243 | if(fDebug > 5) printf("TaskV0sInJets: UserExec: Start\n"); |
1244 | /* | |
1245 | // reset branches for each event | |
1246 | if (fBranchV0Rec) | |
1247 | fBranchV0Rec->Clear(); | |
1248 | if (fBranchV0Gen) | |
1249 | fBranchV0Gen->Clear(); | |
1250 | if (fBranchJet) | |
1251 | fBranchJet->Clear(); | |
1252 | if (fEventInfo) | |
1253 | fEventInfo->Reset(); | |
1254 | */ | |
1255 | if(!fiAODAnalysis) | |
7729cc34 | 1256 | return; |
1257 | ||
7495a67b | 1258 | if(fDebug > 2) printf("TaskV0sInJets: AOD analysis\n"); |
7729cc34 | 1259 | fh1EventCounterCut->Fill(0); // all available selected events (collision candidates) |
1260 | ||
7495a67b | 1261 | if(fDebug > 5) printf("TaskV0sInJets: UserExec: Loading AOD\n"); |
7729cc34 | 1262 | fAODIn = dynamic_cast<AliAODEvent*>(InputEvent()); // input AOD |
1263 | fAODOut = AODEvent(); // output AOD | |
7495a67b | 1264 | if(!fAODOut) |
1265 | { | |
1266 | if(fDebug > 0) printf("TaskV0sInJets: No output AOD found\n"); | |
1267 | return; | |
1268 | } | |
1269 | if(!fAODIn) | |
1270 | { | |
1271 | if(fDebug > 0) printf("TaskV0sInJets: No input AOD found\n"); | |
1272 | return; | |
1273 | } | |
1274 | if(fDebug > 5) printf("TaskV0sInJets: UserExec: Loading AOD OK\n"); | |
7729cc34 | 1275 | |
1276 | TClonesArray* arrayMC = 0; // array particles in the MC event | |
1277 | AliAODMCHeader* headerMC = 0; // MC header | |
1278 | Int_t iNTracksMC = 0; // number of MC tracks | |
7495a67b | 1279 | Double_t dPrimVtxMCX = 0., dPrimVtxMCY = 0., dPrimVtxMCZ = 0.; // position of the MC primary vertex |
7729cc34 | 1280 | |
1281 | // Simulation info | |
7495a67b | 1282 | if(fbMCAnalysis) |
1283 | { | |
1284 | arrayMC = (TClonesArray*)fAODIn->FindListObject(AliAODMCParticle::StdBranchName()); | |
1285 | if(!arrayMC) | |
7729cc34 | 1286 | { |
7495a67b | 1287 | if(fDebug > 0) printf("TaskV0sInJets: No MC array found\n"); |
1288 | return; | |
1289 | } | |
1290 | if(fDebug > 5) printf("TaskV0sInJets: MC array found\n"); | |
1291 | iNTracksMC = arrayMC->GetEntriesFast(); | |
1292 | if(fDebug > 5) printf("TaskV0sInJets: There are %d MC tracks in this event\n", iNTracksMC); | |
7729cc34 | 1293 | // if (!iNTracksMC) |
1294 | // return; | |
7495a67b | 1295 | headerMC = (AliAODMCHeader*)fAODIn->FindListObject(AliAODMCHeader::StdBranchName()); |
1296 | if(!headerMC) | |
1297 | { | |
1298 | if(fDebug > 0) printf("TaskV0sInJets: No MC header found\n"); | |
1299 | return; | |
7729cc34 | 1300 | } |
7495a67b | 1301 | // get position of the MC primary vertex |
1302 | dPrimVtxMCX = headerMC->GetVtxX(); | |
1303 | dPrimVtxMCY = headerMC->GetVtxY(); | |
1304 | dPrimVtxMCZ = headerMC->GetVtxZ(); | |
1305 | } | |
7729cc34 | 1306 | |
1307 | // PID Response Task object | |
1308 | AliAnalysisManager* mgr = AliAnalysisManager::GetAnalysisManager(); | |
1309 | AliInputEventHandler* inputHandler = (AliInputEventHandler*)mgr->GetInputEventHandler(); | |
1310 | AliPIDResponse* fPIDResponse = inputHandler->GetPIDResponse(); | |
7495a67b | 1311 | if(!fPIDResponse) |
1312 | { | |
1313 | if(fDebug > 0) printf("TaskV0sInJets: No PID response object found\n"); | |
1314 | return; | |
1315 | } | |
7729cc34 | 1316 | |
1317 | // AOD files are OK | |
1318 | fh1EventCounterCut->Fill(1); | |
1319 | ||
1320 | // Event selection | |
7495a67b | 1321 | if(!IsSelectedForJets(fAODIn, fdCutVertexZ, fdCutVertexR2, fdCutCentLow, fdCutCentHigh, 1, 0.1)) // cut on |delta z| in 2011 data between SPD vertex and nominal primary vertex |
87e23d3e | 1322 | // if (!IsSelectedForJets(fAODIn,fdCutVertexZ,fdCutVertexR2,fdCutCentLow,fdCutCentHigh)) // no need for cutting in 2010 data |
7495a67b | 1323 | { |
1324 | if(fDebug > 5) printf("TaskV0sInJets: Event rejected\n"); | |
1325 | return; | |
1326 | } | |
7729cc34 | 1327 | |
0a918d8d | 1328 | // fdCentrality = ((AliVAODHeader*)fAODIn->GetHeader())->GetCentrality(); // event centrality |
1329 | fdCentrality = ((AliVAODHeader*)fAODIn->GetHeader())->GetCentralityP()->GetCentralityPercentile("V0M"); // event centrality | |
7495a67b | 1330 | if(!fbIsPbPb) |
1331 | fdCentrality = 0.; | |
87e23d3e | 1332 | Int_t iCentIndex = GetCentralityBinIndex(fdCentrality); // get index of centrality bin |
7495a67b | 1333 | if(iCentIndex < 0) |
1334 | { | |
1335 | if(fDebug > 5) printf("TaskV0sInJets: Event is out of histogram range\n"); | |
1336 | return; | |
1337 | } | |
7729cc34 | 1338 | fh1EventCounterCut->Fill(2); // selected events (vertex, centrality) |
1339 | fh1EventCounterCutCent[iCentIndex]->Fill(2); | |
1340 | ||
1341 | UInt_t iNTracks = fAODIn->GetNumberOfTracks(); // get number of tracks in event | |
7495a67b | 1342 | if(fDebug > 5) printf("TaskV0sInJets: There are %d tracks in this event\n", iNTracks); |
7729cc34 | 1343 | // if (!iNTracks) |
1344 | // return; | |
1345 | ||
1346 | Int_t iNV0s = fAODIn->GetNumberOfV0s(); // get the number of V0 candidates | |
7495a67b | 1347 | if(!iNV0s) |
1348 | { | |
1349 | if(fDebug > 2) printf("TaskV0sInJets: No V0s found in event\n"); | |
7729cc34 | 1350 | // return; |
7495a67b | 1351 | } |
7729cc34 | 1352 | |
7495a67b | 1353 | //===== Event is OK for the analysis ===== |
7729cc34 | 1354 | fh1EventCent->Fill(iCentIndex); |
87e23d3e | 1355 | fh1EventCent2->Fill(fdCentrality); |
7495a67b | 1356 | fh2EventCentTracks->Fill(fdCentrality, iNTracks); |
7729cc34 | 1357 | |
1358 | // if (fbTreeOutput) | |
1359 | // fEventInfo->SetAODEvent(fAODIn); | |
1360 | // printf("V0sInJets: EventInfo: Centrality: %f\n",fEventInfo->GetCentrality()); | |
1361 | ||
7495a67b | 1362 | if(iNV0s) |
1363 | { | |
1364 | fh1EventCounterCut->Fill(3); // events with V0s | |
1365 | fh1EventCounterCutCent[iCentIndex]->Fill(3); | |
1366 | } | |
7729cc34 | 1367 | |
1368 | // Int_t iNV0SelV0Rec = 0; | |
1369 | // Int_t iNV0SelV0Gen = 0; | |
1370 | ||
7729cc34 | 1371 | AliAODv0* v0 = 0; // pointer to V0 candidates |
1372 | // AliV0Object* objectV0 = 0; | |
1373 | TVector3 vecV0Momentum; // 3D vector of V0 momentum | |
87e23d3e | 1374 | Double_t dMassV0K0s = 0; // invariant mass of the K0s candidate |
1375 | Double_t dMassV0Lambda = 0; // invariant mass of the Lambda candidate | |
1376 | Double_t dMassV0ALambda = 0; // invariant mass of the Lambda candidate | |
7729cc34 | 1377 | Int_t iNV0CandTot = 0; // counter of all V0 candidates at the beginning |
1378 | Int_t iNV0CandK0s = 0; // counter of K0s candidates at the end | |
1379 | Int_t iNV0CandLambda = 0; // counter of Lambda candidates at the end | |
1380 | Int_t iNV0CandALambda = 0; // counter of Lambda candidates at the end | |
1381 | ||
1382 | Bool_t bUseOldCuts = 0; // old reconstruction cuts | |
1383 | Bool_t bUseAliceCuts = 0; // cuts used by Alice Zimmermann | |
1384 | Bool_t bUseIouriCuts = 0; // cuts used by Iouri | |
87e23d3e | 1385 | Bool_t bPrintCuts = 0; // print out which cuts are applied |
7729cc34 | 1386 | Bool_t bPrintJetSelection = 0; // print out which jets are selected |
1387 | ||
1388 | // Values of V0 reconstruction cuts: | |
1389 | // Daughter tracks | |
1390 | Int_t iRefit = AliAODTrack::kTPCrefit; // TPC refit for daughter tracks | |
87e23d3e | 1391 | Double_t dDCAToPrimVtxMin = fdCutDCAToPrimVtxMin; // 0.1; // [cm] min DCA of daughters to the prim vtx |
1392 | Double_t dDCADaughtersMax = fdCutDCADaughtersMax; // 1.; // [sigma of TPC tracking] max DCA between daughters | |
1393 | Double_t dEtaDaughterMax = 0.8; // max |pseudorapidity| of daughter tracks | |
1394 | Double_t dNSigmadEdxMax = fdCutNSigmadEdxMax;// 3.; // [sigma dE/dx] max difference between measured and expected signal of dE/dx in the TPC | |
1395 | Double_t dPtProtonPIDMax = 1.; // [GeV/c] maxium pT of proton for applying PID cut | |
7729cc34 | 1396 | // V0 candidate |
1397 | Bool_t bOnFly = 0; // on-the-fly (yes) or offline (no) reconstructed | |
87e23d3e | 1398 | Double_t dCPAMin = fdCutCPAMin;// 0.998; // min cosine of the pointing angle |
1399 | Double_t dRadiusDecayMin = 5.; // [cm] min radial distance of the decay vertex | |
1400 | Double_t dRadiusDecayMax = 100.; // [cm] max radial distance of the decay vertex | |
1401 | Double_t dEtaMax = 0.7; // max |pseudorapidity| of V0 | |
1402 | Double_t dNTauMax = fdCutNTauMax; // 5.0; // [tau] max proper lifetime in multiples of the mean lifetime | |
7729cc34 | 1403 | |
1404 | // Old cuts Start | |
87e23d3e | 1405 | Double_t dNCrossedRowsTPCMin = 70.; // min number of crossed TPC rows (turned off) |
1406 | // Double_t dCrossedRowsOverFindMin = 0.8; // min ratio crossed rows / findable clusters (turned off) | |
1407 | // Double_t dCrossedRowsOverFindMax = 1e3; // max ratio crossed rows / findable clusters (turned off) | |
1408 | Double_t dPtDaughterMin = 0.150; // [GeV/c] min transverse momentum of daughter tracks (turned off) | |
1409 | Double_t dRapMax = 0.75; // max |rapidity| of V0 (turned off) | |
7729cc34 | 1410 | // Old cuts End |
1411 | ||
1412 | // Other cuts | |
87e23d3e | 1413 | Double_t dNSigmaMassMax = 3.; // [sigma m] max difference between candidate mass and real particle mass (used only for mass peak method of signal extraction) |
1414 | Double_t dDistPrimaryMax = 0.01; // [cm] max distance of production point to the primary vertex (criterion for choice of MC particles considered as primary) | |
7729cc34 | 1415 | |
1416 | // Selection of active cuts | |
1417 | Bool_t bCutEtaDaughter = 1; // daughter pseudorapidity | |
1418 | Bool_t bCutRapV0 = 0; // V0 rapidity | |
1419 | Bool_t bCutEtaV0 = 1; // V0 pseudorapidity | |
1420 | Bool_t bCutTau = 1; // V0 lifetime | |
1421 | Bool_t bCutPid = 1; // PID (TPC dE/dx) | |
1422 | Bool_t bCutArmPod = 1; // Armenteros-Podolanski for K0S | |
1423 | // Bool_t bCutCross = 0; // cross contamination | |
1424 | ||
7495a67b | 1425 | if(bUseOldCuts) |
1426 | { | |
1427 | bCutRapV0 = 1; | |
1428 | dEtaMax = 0.75; | |
1429 | dNTauMax = 3.0; | |
1430 | } | |
1431 | else if(bUseAliceCuts) | |
1432 | { | |
7729cc34 | 1433 | // bOnFly = 1; |
7495a67b | 1434 | dEtaMax = 0.75; |
1435 | dNTauMax = 5.0; | |
1436 | } | |
1437 | else if(bUseIouriCuts) | |
1438 | { | |
1439 | bCutRapV0 = 1; | |
1440 | bCutEtaV0 = 0; | |
1441 | dNTauMax = 3.0; | |
1442 | dRapMax = 0.5; | |
1443 | } | |
7729cc34 | 1444 | |
87e23d3e | 1445 | Double_t dCTauK0s = 2.6844; // [cm] c tau of K0S |
1446 | Double_t dCTauLambda = 7.89; // [cm] c tau of Lambda | |
7729cc34 | 1447 | |
1448 | // Load PDG values of particle masses | |
87e23d3e | 1449 | Double_t dMassPDGK0s = TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass(); |
1450 | Double_t dMassPDGLambda = TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass(); | |
7729cc34 | 1451 | |
1452 | // PDG codes of used particles | |
1453 | Int_t iPdgCodePion = 211; | |
1454 | Int_t iPdgCodeProton = 2212; | |
1455 | Int_t iPdgCodeK0s = 310; | |
1456 | Int_t iPdgCodeLambda = 3122; | |
1457 | ||
87e23d3e | 1458 | // Jet selection: fdCutPtJetMin, fdCutPtTrackMin |
7495a67b | 1459 | Double_t dJetEtaWindow = dEtaMax - fdRadiusJet; // max jet |pseudorapidity|, to make sure that V0s can appear in the entire jet area |
1460 | Double_t dCutJetAreaMin = 0.6 * TMath::Pi() * fdRadiusJet * fdRadiusJet; // minimum jet area | |
1461 | Double_t dRadiusExcludeCone = 2 * fdRadiusJet; // radius of cones around jets excluded for V0 outside jets | |
7729cc34 | 1462 | Bool_t bLeadingJetOnly = 0; |
1463 | ||
7495a67b | 1464 | if(bUseAliceCuts) |
1465 | { | |
1466 | fdCutPtJetMin = 5; | |
1467 | fdCutPtTrackMin = 5; | |
1468 | dCutJetAreaMin = 0; | |
1469 | bLeadingJetOnly = 0; | |
1470 | } | |
7729cc34 | 1471 | |
1472 | // Int_t iNJetAll = 0; // number of reconstructed jets in fBranchJet | |
1473 | // iNJetAll = fBranchJet->GetEntriesFast(); // number of reconstructed jets | |
1474 | TClonesArray* jetArray = 0; // object where the input jets are stored | |
9706bde3 | 1475 | TClonesArray* jetArrayBg = 0; // object where the kt clusters are stored |
7729cc34 | 1476 | Int_t iNJet = 0; // number of reconstructed jets in the input |
7495a67b | 1477 | TClonesArray* jetArraySel = new TClonesArray("AliAODJet", 0); // object where the selected jets are copied |
7729cc34 | 1478 | Int_t iNJetSel = 0; // number of selected reconstructed jets |
1479 | // iNJetSel = jetArraySel->GetEntriesFast(); // number of selected reconstructed jets | |
7495a67b | 1480 | TClonesArray* jetArrayPerp = new TClonesArray("AliAODJet", 0); // object where the perp. cones are stored |
7729cc34 | 1481 | Int_t iNJetPerp = 0; // number of perpendicular cones |
1482 | ||
1483 | AliAODJet* jet = 0; // pointer to a jet | |
1484 | // AliJetObject* objectJet = 0; | |
1485 | AliAODJet* jetPerp = 0; // pointer to a perp. cone | |
1486 | AliAODJet* jetRnd = 0; // pointer to a rand. cone | |
9706bde3 | 1487 | AliAODJet* jetMed = 0; // pointer to a median cluster |
7729cc34 | 1488 | TVector3 vecJetMomentum; // 3D vector of jet momentum |
1489 | // TVector3 vecPerpConeMomentum; // 3D vector of perpendicular cone momentum | |
1490 | // TVector3 vecRndConeMomentum; // 3D vector of random cone momentum | |
1491 | Bool_t bJetEventGood = kTRUE; // indicator of good jet events | |
1492 | ||
1493 | // printf("iNJetAll, iNJetSel: %d %d\n",iNJetAll,iNJetSel); | |
1494 | ||
7495a67b | 1495 | if(fbJetSelection) // analysis of V0s in jets is switched on |
1496 | { | |
1497 | jetArray = (TClonesArray*)(fAODOut->FindListObject(fsJetBranchName.Data())); // find object with jets in the output AOD | |
1498 | if(!jetArray) | |
1499 | { | |
1500 | if(fDebug > 0) printf("TaskV0sInJets: No array of name: %s\n", fsJetBranchName.Data()); | |
1501 | bJetEventGood = kFALSE; | |
1502 | } | |
1503 | if(bJetEventGood) | |
1504 | iNJet = jetArray->GetEntriesFast(); | |
1505 | if(bJetEventGood && !iNJet) // check whether there are some jets | |
1506 | { | |
1507 | if(fDebug > 2) printf("TaskV0sInJets: No jets in array\n"); | |
1508 | bJetEventGood = kFALSE; | |
1509 | } | |
1510 | if(bJetEventGood) | |
7729cc34 | 1511 | { |
9706bde3 | 1512 | // printf("TaskV0sInJets: Loading bg array of name: %s\n",fsJetBgBranchName.Data()); |
7495a67b | 1513 | jetArrayBg = (TClonesArray*)(fAODOut->FindListObject(fsJetBgBranchName.Data())); // find object with jets in the output AOD |
1514 | if(!jetArrayBg) | |
1515 | { | |
1516 | if(fDebug > 0) printf("TaskV0sInJets: No bg array of name: %s\n", fsJetBgBranchName.Data()); | |
9706bde3 | 1517 | // bJetEventGood = kFALSE; |
7495a67b | 1518 | } |
7729cc34 | 1519 | } |
7495a67b | 1520 | } |
7729cc34 | 1521 | else // no in-jet analysis |
1522 | bJetEventGood = kFALSE; | |
1523 | ||
1524 | // select good jets and copy them to another array | |
7495a67b | 1525 | if(bJetEventGood) |
1526 | { | |
1527 | if(bLeadingJetOnly) | |
1528 | iNJet = 1; // only leading jets | |
1529 | if(fDebug > 5) printf("TaskV0sInJets: Jet selection for %d jets\n", iNJet); | |
1530 | for(Int_t iJet = 0; iJet < iNJet; iJet++) | |
7729cc34 | 1531 | { |
7495a67b | 1532 | AliAODJet* jetSel = (AliAODJet*)jetArray->At(iJet); // load a jet in the list |
1533 | if(!jetSel) | |
1534 | { | |
1535 | if(fDebug > 0) printf("TaskV0sInJets: Cannot load jet %d\n", iJet); | |
1536 | continue; | |
1537 | } | |
1538 | if(bPrintJetSelection) | |
1539 | if(fDebug > 7) printf("jet: i = %d, pT = %f, eta = %f, phi = %f, pt lead tr = %f ", iJet, jetSel->Pt(), jetSel->Eta(), jetSel->Phi(), jetSel->GetPtLeading()); | |
87e23d3e | 1540 | // printf("TaskV0sInJets: Checking pt > %.2f for jet %d with pt %.2f\n",fdCutPtJetMin,iJet,jetSel->Pt()); |
7495a67b | 1541 | if(jetSel->Pt() < fdCutPtJetMin) // selection of high-pt jets |
1542 | { | |
1543 | if(bPrintJetSelection) | |
1544 | if(fDebug > 7) printf("rejected (pt)\n"); | |
1545 | continue; | |
1546 | } | |
87e23d3e | 1547 | // printf("TaskV0sInJets: Checking |eta| < %.2f for jet %d with |eta| %.2f\n",dJetEtaWindow,iJet,TMath::Abs(jetSel->Eta())); |
7495a67b | 1548 | if(TMath::Abs(jetSel->Eta()) > dJetEtaWindow) // selection of jets in the chosen pseudorapidity range |
1549 | { | |
1550 | if(bPrintJetSelection) | |
1551 | if(fDebug > 7) printf("rejected (eta)\n"); | |
1552 | continue; | |
1553 | } | |
1554 | if(!bUseOldCuts) | |
1555 | { | |
1556 | if(jetSel->EffectiveAreaCharged() < dCutJetAreaMin) | |
1557 | continue; | |
1558 | } | |
1559 | Int_t iNTracksInJet = 0; | |
1560 | Double_t dPtLeadTrack = 0; // pt of the leading track | |
7729cc34 | 1561 | // Int_t iLeadTrack = 0; |
7495a67b | 1562 | iNTracksInJet = jetSel->GetRefTracks()->GetEntriesFast(); // number od tracks that constitute the jet |
7729cc34 | 1563 | // printf("TaskV0sInJets: Searching for leading track from %d tracks in jet %d\n",iNTracksInJet,iJet); |
7495a67b | 1564 | if(fdCutPtTrackMin > 0) // a positive min leading track pt is set |
1565 | { | |
1566 | for(Int_t j = 0; j < iNTracksInJet; j++) // find the track with the highest pt | |
1567 | { | |
1568 | AliAODTrack* track = (AliAODTrack*)jetSel->GetTrack(j); // is this the leading track? | |
1569 | if(!track) | |
1570 | continue; | |
7729cc34 | 1571 | // printf("TaskV0sInJets: %d: %.2f\n",j,track->Pt()); |
7495a67b | 1572 | if(track->Pt() > dPtLeadTrack) |
1573 | { | |
1574 | dPtLeadTrack = track->Pt(); | |
7729cc34 | 1575 | // iLeadTrack = j; |
7495a67b | 1576 | } |
7729cc34 | 1577 | } |
7495a67b | 1578 | // printf("Leading track pT: my: %f, ali: %f\n",dPtLeadTrack,jetSel->GetPtLeading()); |
1579 | // printf("TaskV0sInJets: Checking leading track pt > %.2f for pt %.2f of track %d in jet %d\n",fdCutPtTrackMin,dPtLeadTrack,iLeadTrack,iJet); | |
1580 | if(dPtLeadTrack < fdCutPtTrackMin) // selection of high-pt jet-track events | |
7729cc34 | 1581 | { |
7495a67b | 1582 | if(bPrintJetSelection) |
1583 | if(fDebug > 7) printf("rejected (track pt)\n"); | |
1584 | continue; | |
7729cc34 | 1585 | } |
7495a67b | 1586 | } |
1587 | if(bPrintJetSelection) | |
1588 | if(fDebug > 7) printf("accepted\n"); | |
1589 | if(fDebug > 5) printf("TaskV0sInJets: Jet %d with pt %.2f passed selection\n", iJet, jetSel->Pt()); | |
1590 | /* | |
1591 | if (fbTreeOutput) | |
1592 | { | |
1593 | // new ((*fBranchJet)[iNJetAll++]) AliAODJet(*((AliAODJet*)jetSel)); | |
1594 | objectJet = new ((*fBranchJet)[iNJetAll++]) AliJetObject(jetSel); // copy selected jet to the array | |
1595 | // objectJet->SetPtLeadingTrack(dPtLeadTrack); | |
1596 | objectJet->SetRadius(fdRadiusJet); | |
1597 | objectJet = 0; | |
1598 | } | |
1599 | */ | |
1600 | TLorentzVector vecPerpPlus(*(jetSel->MomentumVector())); | |
1601 | vecPerpPlus.RotateZ(TMath::Pi() / 2.); // rotate vector by 90 deg around z | |
1602 | TLorentzVector vecPerpMinus(*(jetSel->MomentumVector())); | |
1603 | vecPerpMinus.RotateZ(-TMath::Pi() / 2.); // rotate vector by -90 deg around z | |
1604 | // AliAODJet jetTmp = AliAODJet(vecPerp); | |
1605 | if(fDebug > 5) printf("TaskV0sInJets: Adding perp. cones number %d, %d\n", iNJetPerp, iNJetPerp + 1); | |
1606 | // printf("TaskV0sInJets: Adding perp. cone number %d: pT %f, phi %f, eta %f, pT %f, phi %f, eta %f\n",iNJetSel,vecPerp.Pt(),vecPerp.Phi(),vecPerp.Eta(),jetTmp.Pt(),jetTmp.Phi(),jetTmp.Eta()); | |
1607 | new((*jetArrayPerp)[iNJetPerp++]) AliAODJet(vecPerpPlus); // write perp. cone to the array | |
1608 | new((*jetArrayPerp)[iNJetPerp++]) AliAODJet(vecPerpMinus); // write perp. cone to the array | |
1609 | if(fDebug > 5) printf("TaskV0sInJets: Adding jet number %d\n", iNJetSel); | |
1610 | // printf("TaskV0sInJets: Adding jet number %d: pT %f, phi %f, eta %f\n",iNJetSel,jetSel->Pt(),jetSel->Phi(),jetSel->Eta()); | |
1611 | new((*jetArraySel)[iNJetSel++]) AliAODJet(*((AliAODJet*)jetSel)); // copy selected jet to the array | |
7729cc34 | 1612 | } |
7495a67b | 1613 | if(fDebug > 5) printf("TaskV0sInJets: Added jets: %d\n", iNJetSel); |
1614 | iNJetSel = jetArraySel->GetEntriesFast(); | |
1615 | if(fDebug > 2) printf("TaskV0sInJets: Selected jets in array: %d\n", iNJetSel); | |
1616 | fh1NJetPerEvent[iCentIndex]->Fill(iNJetSel); | |
1617 | // fill jet spectra | |
1618 | for(Int_t iJet = 0; iJet < iNJetSel; iJet++) | |
7729cc34 | 1619 | { |
7495a67b | 1620 | jet = (AliAODJet*)jetArraySel->At(iJet); // load a jet in the list |
1621 | fh1PtJet[iCentIndex]->Fill(jet->Pt()); // pt spectrum of selected jets | |
1622 | fh1EtaJet[iCentIndex]->Fill(jet->Eta()); // eta spectrum of selected jets | |
1623 | fh2EtaPtJet[iCentIndex]->Fill(jet->Eta(), jet->Pt()); // eta-pT spectrum of selected jets | |
1624 | fh1PhiJet[iCentIndex]->Fill(jet->Phi()); // phi spectrum of selected jets | |
1625 | Double_t dAreaExcluded = TMath::Pi() * dRadiusExcludeCone * dRadiusExcludeCone; // area of the cone | |
1626 | dAreaExcluded -= AreaCircSegment(dRadiusExcludeCone, dEtaMax - jet->Eta()); // positive eta overhang | |
1627 | dAreaExcluded -= AreaCircSegment(dRadiusExcludeCone, dEtaMax + jet->Eta()); // negative eta overhang | |
1628 | fh1AreaExcluded->Fill(iCentIndex, dAreaExcluded); | |
7729cc34 | 1629 | } |
7495a67b | 1630 | jet = 0; |
1631 | } | |
1632 | ||
1633 | if(bJetEventGood) // there should be some reconstructed jets | |
1634 | { | |
1635 | fh1EventCounterCut->Fill(4); // events with jet(s) | |
1636 | fh1EventCounterCutCent[iCentIndex]->Fill(4); // events with jet(s) | |
1637 | if(iNJetSel) | |
1638 | { | |
1639 | fh1EventCounterCut->Fill(5); // events with selected jets | |
1640 | fh1EventCounterCutCent[iCentIndex]->Fill(5); | |
1641 | } | |
1642 | } | |
1643 | if(iNJetSel) | |
169867f8 | 1644 | fh1EventCent2Jets->Fill(fdCentrality); |
1645 | else | |
1646 | fh1EventCent2NoJets->Fill(fdCentrality); | |
7729cc34 | 1647 | |
7495a67b | 1648 | if(iNJetSel) |
1649 | { | |
1650 | jetRnd = GetRandomCone(jetArraySel, dJetEtaWindow, 2 * fdRadiusJet); | |
1651 | if(jetRnd) | |
7729cc34 | 1652 | { |
7495a67b | 1653 | fh1NRndConeCent->Fill(iCentIndex); |
1654 | fh2EtaPhiRndCone[iCentIndex]->Fill(jetRnd->Eta(), jetRnd->Phi()); | |
1655 | } | |
1656 | jetMed = GetMedianCluster(jetArrayBg, dJetEtaWindow); | |
1657 | if(jetMed) | |
1658 | { | |
1659 | fh1NMedConeCent->Fill(iCentIndex); | |
1660 | fh2EtaPhiMedCone[iCentIndex]->Fill(jetMed->Eta(), jetMed->Phi()); | |
7729cc34 | 1661 | } |
7495a67b | 1662 | } |
7729cc34 | 1663 | |
1664 | // Loading primary vertex info | |
1665 | AliAODVertex* primVtx = fAODIn->GetPrimaryVertex(); // get the primary vertex | |
1666 | Double_t dPrimVtxPos[3]; // primary vertex position {x,y,z} | |
1667 | primVtx->GetXYZ(dPrimVtxPos); | |
1668 | fh1VtxZ[iCentIndex]->Fill(dPrimVtxPos[2]); | |
7495a67b | 1669 | fh2VtxXY[iCentIndex]->Fill(dPrimVtxPos[0], dPrimVtxPos[1]); |
1670 | ||
1671 | //===== Start of loop over V0 candidates ===== | |
1672 | if(fDebug > 2) printf("TaskV0sInJets: Start of V0 loop\n"); | |
1673 | for(Int_t iV0 = 0; iV0 < iNV0s; iV0++) | |
1674 | { | |
1675 | v0 = fAODIn->GetV0(iV0); // get next candidate from the list in AOD | |
1676 | if(!v0) | |
1677 | continue; | |
1678 | ||
1679 | iNV0CandTot++; | |
1680 | ||
1681 | // Initialization of status indicators | |
1682 | Bool_t bIsCandidateK0s = kTRUE; // candidate for K0s | |
1683 | Bool_t bIsCandidateLambda = kTRUE; // candidate for Lambda | |
1684 | Bool_t bIsCandidateALambda = kTRUE; // candidate for Lambda | |
1685 | Bool_t bIsInPeakK0s = kFALSE; // candidate within the K0s mass peak | |
1686 | Bool_t bIsInPeakLambda = kFALSE; // candidate within the Lambda mass peak | |
1687 | Bool_t bIsInConeJet = kFALSE; // candidate within the jet cones | |
1688 | Bool_t bIsInConePerp = kFALSE; // candidate within the perpendicular cone | |
1689 | Bool_t bIsInConeRnd = kFALSE; // candidate within the random cone | |
1690 | Bool_t bIsInConeMed = kFALSE; // candidate within the median-cluster cone | |
1691 | Bool_t bIsOutsideCones = kFALSE; // candidate outside excluded cones | |
1692 | ||
1693 | // Invariant mass calculation | |
1694 | dMassV0K0s = v0->MassK0Short(); | |
1695 | dMassV0Lambda = v0->MassLambda(); | |
1696 | dMassV0ALambda = v0->MassAntiLambda(); | |
1697 | ||
1698 | Int_t iCutIndex = 0; // indicator of current selection step | |
1699 | // 0 | |
1700 | // All V0 candidates | |
1701 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); | |
1702 | iCutIndex++; | |
1703 | ||
1704 | // Skip candidates outside the histogram range | |
1705 | if((dMassV0K0s < fgkdMassK0sMin) || (dMassV0K0s >= fgkdMassK0sMax)) | |
1706 | bIsCandidateK0s = kFALSE; | |
1707 | if((dMassV0Lambda < fgkdMassLambdaMin) || (dMassV0Lambda >= fgkdMassLambdaMax)) | |
1708 | bIsCandidateLambda = kFALSE; | |
1709 | if((dMassV0ALambda < fgkdMassLambdaMin) || (dMassV0ALambda >= fgkdMassLambdaMax)) | |
1710 | bIsCandidateALambda = kFALSE; | |
1711 | if(!bIsCandidateK0s && !bIsCandidateLambda && !bIsCandidateALambda) | |
1712 | continue; | |
1713 | ||
1714 | Double_t dPtV0 = TMath::Sqrt(v0->Pt2V0()); // transverse momentum of V0 | |
1715 | vecV0Momentum = TVector3(v0->Px(), v0->Py(), v0->Pz()); // set the vector of V0 momentum | |
1716 | ||
1717 | // Sigma of the mass peak window | |
1718 | Double_t dMassPeakWindowK0s = dNSigmaMassMax * MassPeakSigmaOld(dPtV0, 0); | |
1719 | Double_t dMassPeakWindowLambda = dNSigmaMassMax * MassPeakSigmaOld(dPtV0, 1); | |
87e23d3e | 1720 | // Double_t dMassPeakWindowK0s = dNSigmaMassMax*MassPeakSigma(iCentIndex,dPtV0,0); |
1721 | // Double_t dMassPeakWindowLambda = dNSigmaMassMax*MassPeakSigma(iCentIndex,dPtV0,1); | |
7729cc34 | 1722 | |
7495a67b | 1723 | // Invariant mass peak selection |
1724 | if(TMath::Abs(dMassV0K0s - dMassPDGK0s) < dMassPeakWindowK0s) | |
1725 | bIsInPeakK0s = kTRUE; | |
1726 | if(TMath::Abs(dMassV0Lambda - dMassPDGLambda) < dMassPeakWindowLambda) | |
1727 | bIsInPeakLambda = kTRUE; | |
1728 | ||
1729 | // Retrieving all relevant properties of the V0 candidate | |
1730 | Bool_t bOnFlyStatus = v0->GetOnFlyStatus(); // online (on fly) reconstructed vs offline reconstructed | |
1731 | const AliAODTrack* trackPos = (AliAODTrack*)v0->GetDaughter(0); // positive daughter track | |
1732 | const AliAODTrack* trackNeg = (AliAODTrack*)v0->GetDaughter(1); // negative daughter track | |
1733 | Double_t dPtDaughterPos = trackPos->Pt(); // transverse momentum of a daughter track | |
1734 | Double_t dPtDaughterNeg = trackNeg->Pt(); | |
1735 | Double_t dNRowsPos = trackPos->GetTPCClusterInfo(2, 1); // crossed TPC pad rows of a daughter track | |
1736 | Double_t dNRowsNeg = trackNeg->GetTPCClusterInfo(2, 1); | |
1737 | Double_t dDCAToPrimVtxPos = TMath::Abs(v0->DcaPosToPrimVertex()); // dca of a daughter to the primary vertex | |
1738 | Double_t dDCAToPrimVtxNeg = TMath::Abs(v0->DcaNegToPrimVertex()); | |
1739 | Double_t dDCADaughters = v0->DcaV0Daughters(); // dca between daughters | |
1740 | Double_t dCPA = v0->CosPointingAngle(primVtx); // cosine of the pointing angle | |
1741 | Double_t dSecVtxPos[3]; // V0 vertex position {x,y,z} | |
7729cc34 | 1742 | // Double_t dSecVtxPos[3] = {v0->DecayVertexV0X(),v0->DecayVertexV0Y(),v0->DecayVertexV0Z()}; // V0 vertex position |
7495a67b | 1743 | v0->GetSecondaryVtx(dSecVtxPos); |
1744 | Double_t dRadiusDecay = TMath::Sqrt(dSecVtxPos[0] * dSecVtxPos[0] + dSecVtxPos[1] * dSecVtxPos[1]); // distance of the V0 vertex from the z-axis | |
1745 | Double_t dEtaDaughterNeg = trackNeg->Eta(); // = v0->EtaProng(1), pseudorapidity of a daughter track | |
1746 | Double_t dEtaDaughterPos = trackPos->Eta(); // = v0->EtaProng(0) | |
1747 | Double_t dRapK0s = v0->RapK0Short(); // rapidity calculated for K0s assumption | |
1748 | Double_t dRapLambda = v0->RapLambda(); // rapidity calculated for Lambda assumption | |
1749 | Double_t dEtaV0 = v0->Eta(); // V0 pseudorapidity | |
87e23d3e | 1750 | // Double_t dPhiV0 = v0->Phi(); // V0 pseudorapidity |
7495a67b | 1751 | Double_t dDecayPath[3]; |
1752 | for(Int_t iPos = 0; iPos < 3; iPos++) | |
1753 | dDecayPath[iPos] = dSecVtxPos[iPos] - dPrimVtxPos[iPos]; // vector of the V0 path | |
1754 | Double_t dDecLen = TMath::Sqrt(dDecayPath[0] * dDecayPath[0] + dDecayPath[1] * dDecayPath[1] + dDecayPath[2] * dDecayPath[2]); // path length L | |
1755 | Double_t dDecLen2D = TMath::Sqrt(dDecayPath[0] * dDecayPath[0] + dDecayPath[1] * dDecayPath[1]); // transverse path length R | |
1756 | Double_t dLOverP = dDecLen / v0->P(); // L/p | |
1757 | Double_t dROverPt = dDecLen2D / dPtV0; // R/pT | |
1758 | Double_t dMLOverPK0s = dMassPDGK0s * dLOverP; // m*L/p = c*(proper lifetime) | |
87e23d3e | 1759 | // Double_t dMLOverPLambda = dMassPDGLambda*dLOverP; // m*L/p |
7495a67b | 1760 | Double_t dMROverPtK0s = dMassPDGK0s * dROverPt; // m*R/pT |
1761 | Double_t dMROverPtLambda = dMassPDGLambda * dROverPt; // m*R/pT | |
1762 | Double_t dNSigmaPosPion = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(trackPos, AliPID::kPion)); // difference between measured and expected signal of the dE/dx in the TPC | |
1763 | Double_t dNSigmaPosProton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(trackPos, AliPID::kProton)); | |
1764 | Double_t dNSigmaNegPion = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(trackNeg, AliPID::kPion)); | |
1765 | Double_t dNSigmaNegProton = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(trackNeg, AliPID::kProton)); | |
1766 | Double_t dAlpha = v0->AlphaV0(); // Armenteros-Podolanski alpha | |
1767 | Double_t dPtArm = v0->PtArmV0(); // Armenteros-Podolanski pT | |
1768 | AliAODVertex* prodVtxDaughterPos = (AliAODVertex*)(trackPos->GetProdVertex()); // production vertex of the positive daughter track | |
1769 | Char_t cTypeVtxProdPos = prodVtxDaughterPos->GetType(); // type of the production vertex | |
1770 | AliAODVertex* prodVtxDaughterNeg = (AliAODVertex*)(trackNeg->GetProdVertex()); // production vertex of the negative daughter track | |
1771 | Char_t cTypeVtxProdNeg = prodVtxDaughterNeg->GetType(); // type of the production vertex | |
1772 | ||
1773 | // fh2Tau3DVs2D[0]->Fill(dPtV0, dLOverP / dROverPt); | |
1774 | ||
1775 | // QA histograms before cuts | |
1776 | FillQAHistogramV0(primVtx, v0, 0, bIsCandidateK0s, bIsCandidateLambda, bIsInPeakK0s, bIsInPeakLambda); | |
1777 | // Cut vs mass histograms before cuts | |
1778 | /* | |
1779 | if(bIsCandidateK0s) | |
1780 | { | |
1781 | fh2CutTPCRowsK0s[0]->Fill(dMassV0K0s, dNRowsPos); | |
1782 | fh2CutTPCRowsK0s[0]->Fill(dMassV0K0s, dNRowsNeg); | |
1783 | fh2CutPtPosK0s[0]->Fill(dMassV0K0s, dPtDaughterPos); | |
1784 | fh2CutPtNegK0s[0]->Fill(dMassV0K0s, dPtDaughterNeg); | |
1785 | fh2CutDCAVtx[0]->Fill(dMassV0K0s, dDCAToPrimVtxPos); | |
1786 | fh2CutDCAVtx[0]->Fill(dMassV0K0s, dDCAToPrimVtxNeg); | |
1787 | fh2CutDCAV0[0]->Fill(dMassV0K0s, dDCADaughters); | |
1788 | fh2CutCos[0]->Fill(dMassV0K0s, dCPA); | |
1789 | fh2CutR[0]->Fill(dMassV0K0s, dRadiusDecay); | |
1790 | fh2CutEtaK0s[0]->Fill(dMassV0K0s, dEtaDaughterPos); | |
1791 | fh2CutEtaK0s[0]->Fill(dMassV0K0s, dEtaDaughterNeg); | |
1792 | fh2CutRapK0s[0]->Fill(dMassV0K0s, dRapK0s); | |
1793 | fh2CutCTauK0s[0]->Fill(dMassV0K0s, dMROverPtK0s / dCTauK0s); | |
1794 | fh2CutPIDPosK0s[0]->Fill(dMassV0K0s, dNSigmaPosPion); | |
1795 | fh2CutPIDNegK0s[0]->Fill(dMassV0K0s, dNSigmaNegPion); | |
1796 | } | |
1797 | if(bIsCandidateLambda) | |
1798 | { | |
1799 | fh2CutTPCRowsLambda[0]->Fill(dMassV0Lambda, dNRowsPos); | |
1800 | fh2CutTPCRowsLambda[0]->Fill(dMassV0Lambda, dNRowsNeg); | |
1801 | fh2CutPtPosLambda[0]->Fill(dMassV0Lambda, dPtDaughterPos); | |
1802 | fh2CutPtNegLambda[0]->Fill(dMassV0Lambda, dPtDaughterNeg); | |
1803 | fh2CutEtaLambda[0]->Fill(dMassV0Lambda, dEtaDaughterPos); | |
1804 | fh2CutEtaLambda[0]->Fill(dMassV0Lambda, dEtaDaughterNeg); | |
1805 | fh2CutRapLambda[0]->Fill(dMassV0Lambda, dRapLambda); | |
1806 | fh2CutCTauLambda[0]->Fill(dMassV0Lambda, dMROverPtLambda / dCTauLambda); | |
1807 | fh2CutPIDPosLambda[0]->Fill(dMassV0Lambda, dNSigmaPosProton); | |
1808 | fh2CutPIDNegLambda[0]->Fill(dMassV0Lambda, dNSigmaNegPion); | |
1809 | } | |
1810 | */ | |
1811 | ||
1812 | //===== Start of reconstruction cutting ===== | |
1813 | ||
1814 | // 1 | |
1815 | // All V0 candidates | |
1816 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); | |
1817 | iCutIndex++; | |
1818 | ||
1819 | // Start of global cuts | |
1820 | // 2 | |
1821 | // Reconstruction method | |
1822 | if(bPrintCuts) printf("Rec: Applying cut: Reconstruction method: on-the-fly? %s\n", (bOnFly ? "yes" : "no")); | |
1823 | if(bOnFlyStatus != bOnFly) | |
1824 | continue; | |
1825 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); | |
1826 | iCutIndex++; | |
1827 | ||
1828 | // 3 | |
1829 | // Tracks TPC OK | |
1830 | if(bPrintCuts) printf("Rec: Applying cut: Correct charge of daughters\n"); | |
1831 | if(!trackNeg || !trackPos) | |
1832 | continue; | |
1833 | if(trackNeg->Charge() == trackPos->Charge()) // daughters have different charge? | |
1834 | continue; | |
1835 | if(trackNeg->Charge() != -1) // daughters have expected charge? | |
1836 | continue; | |
1837 | if(trackPos->Charge() != 1) // daughters have expected charge? | |
1838 | continue; | |
1839 | ||
1840 | if(bPrintCuts) printf("Rec: Applying cut: TPC refit: %d\n", iRefit); | |
1841 | if(!trackNeg->IsOn(iRefit)) // TPC refit is ON? | |
1842 | continue; | |
1843 | if(bPrintCuts) printf("Rec: Applying cut: Type of production vertex of daughter: Not %d\n", AliAODVertex::kKink); | |
1844 | if(cTypeVtxProdNeg == AliAODVertex::kKink) // kink daughter rejection | |
1845 | continue; | |
1846 | // Old cuts Start | |
1847 | if(bUseOldCuts) | |
1848 | { | |
1849 | if(bPrintCuts) printf("Rec: Applying cut: Number of TPC rows: > %f\n", dNCrossedRowsTPCMin); | |
1850 | if(dNRowsNeg < dNCrossedRowsTPCMin) // Crossed TPC padrows | |
7729cc34 | 1851 | continue; |
7729cc34 | 1852 | // Int_t findable = trackNeg->GetTPCNclsF(); // Findable clusters |
1853 | // if (findable <= 0) | |
1854 | // continue; | |
87e23d3e | 1855 | // if (dNRowsNeg/findable < dCrossedRowsOverFindMin) |
7729cc34 | 1856 | // continue; |
87e23d3e | 1857 | // if (dNRowsNeg/findable > dCrossedRowsOverFindMax) |
7729cc34 | 1858 | // continue; |
7495a67b | 1859 | } |
1860 | // Old cuts End | |
1861 | ||
1862 | if(!trackPos->IsOn(iRefit)) | |
1863 | continue; | |
1864 | if(cTypeVtxProdPos == AliAODVertex::kKink) // kink daughter rejection | |
1865 | continue; | |
1866 | // Old cuts Start | |
1867 | if(bUseOldCuts) | |
1868 | { | |
1869 | if(dNRowsPos < dNCrossedRowsTPCMin) | |
7729cc34 | 1870 | continue; |
7729cc34 | 1871 | // findable = trackPos->GetTPCNclsF(); |
1872 | // if (findable <= 0) | |
1873 | // continue; | |
87e23d3e | 1874 | // if (dNRowsPos/findable < dCrossedRowsOverFindMin) |
7729cc34 | 1875 | // continue; |
87e23d3e | 1876 | // if (dNRowsPos/findable > dCrossedRowsOverFindMax) |
7729cc34 | 1877 | // continue; |
7495a67b | 1878 | } |
1879 | // Old cuts End | |
7729cc34 | 1880 | |
7495a67b | 1881 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); |
1882 | iCutIndex++; | |
7729cc34 | 1883 | |
7495a67b | 1884 | // 4 |
1885 | // Daughters: transverse momentum cut | |
1886 | if(bUseOldCuts) | |
1887 | { | |
1888 | if(bPrintCuts) printf("Rec: Applying cut: Daughter pT: > %f\n", dPtDaughterMin); | |
1889 | if((dPtDaughterNeg < dPtDaughterMin) || (dPtDaughterPos < dPtDaughterMin)) | |
7729cc34 | 1890 | continue; |
87e23d3e | 1891 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); |
7495a67b | 1892 | } |
1893 | iCutIndex++; | |
1894 | ||
1895 | // 5 | |
1896 | // Daughters: Impact parameter of daughters to prim vtx | |
1897 | if(bPrintCuts) printf("Rec: Applying cut: Daughter DCA to prim vtx: > %f\n", dDCAToPrimVtxMin); | |
1898 | if((dDCAToPrimVtxNeg < dDCAToPrimVtxMin) || (dDCAToPrimVtxPos < dDCAToPrimVtxMin)) | |
1899 | continue; | |
1900 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); | |
1901 | iCutIndex++; | |
1902 | ||
1903 | // 6 | |
1904 | // Daughters: DCA | |
1905 | if(bPrintCuts) printf("Rec: Applying cut: DCA between daughters: < %f\n", dDCADaughtersMax); | |
1906 | if(dDCADaughters > dDCADaughtersMax) | |
1907 | continue; | |
1908 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); | |
1909 | iCutIndex++; | |
1910 | ||
1911 | // 7 | |
1912 | // V0: Cosine of the pointing angle | |
1913 | if(bPrintCuts) printf("Rec: Applying cut: CPA: > %f\n", dCPAMin); | |
1914 | if(dCPA < dCPAMin) | |
1915 | continue; | |
1916 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); | |
1917 | iCutIndex++; | |
1918 | ||
1919 | // 8 | |
1920 | // V0: Fiducial volume | |
1921 | if(bPrintCuts) printf("Rec: Applying cut: Decay radius: > %f, < %f\n", dRadiusDecayMin, dRadiusDecayMax); | |
1922 | if((dRadiusDecay < dRadiusDecayMin) || (dRadiusDecay > dRadiusDecayMax)) | |
1923 | continue; | |
1924 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); | |
1925 | iCutIndex++; | |
1926 | ||
1927 | // 9 | |
1928 | // Daughters: pseudorapidity cut | |
1929 | if(bCutEtaDaughter) | |
1930 | { | |
1931 | if(bPrintCuts) printf("Rec: Applying cut: Daughter |eta|: < %f\n", dEtaDaughterMax); | |
1932 | if((TMath::Abs(dEtaDaughterNeg) > dEtaDaughterMax) || (TMath::Abs(dEtaDaughterPos) > dEtaDaughterMax)) | |
7729cc34 | 1933 | continue; |
87e23d3e | 1934 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); |
7495a67b | 1935 | } |
1936 | iCutIndex++; | |
1937 | // End of global cuts | |
7729cc34 | 1938 | |
7495a67b | 1939 | // Start of particle-dependent cuts |
1940 | // 10 | |
1941 | // V0: rapidity cut & pseudorapidity cut | |
1942 | if(bCutRapV0) | |
1943 | { | |
1944 | if(bPrintCuts) printf("Rec: Applying cut: V0 |y|: < %f\n", dRapMax); | |
1945 | if(TMath::Abs(dRapK0s) > dRapMax) | |
1946 | bIsCandidateK0s = kFALSE; | |
1947 | if(TMath::Abs(dRapLambda) > dRapMax) | |
1948 | { | |
1949 | bIsCandidateLambda = kFALSE; | |
1950 | bIsCandidateALambda = kFALSE; | |
1951 | } | |
1952 | } | |
1953 | if(bCutEtaV0) | |
1954 | { | |
1955 | if(bPrintCuts) printf("Rec: Applying cut: V0 |eta|: < %f\n", dEtaMax); | |
1956 | if(TMath::Abs(dEtaV0) > dEtaMax) | |
1957 | { | |
1958 | bIsCandidateK0s = kFALSE; | |
1959 | bIsCandidateLambda = kFALSE; | |
1960 | bIsCandidateALambda = kFALSE; | |
1961 | } | |
87e23d3e | 1962 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); |
7495a67b | 1963 | } |
1964 | iCutIndex++; | |
7729cc34 | 1965 | |
7495a67b | 1966 | // 11 |
1967 | // Lifetime cut | |
1968 | if(bCutTau) | |
1969 | { | |
1970 | if(bPrintCuts) printf("Rec: Applying cut: Proper lifetime: < %f\n", dNTauMax); | |
1971 | if(dMROverPtK0s > dNTauMax * dCTauK0s) | |
1972 | bIsCandidateK0s = kFALSE; | |
1973 | if(dMROverPtLambda > dNTauMax * dCTauLambda) | |
1974 | { | |
1975 | bIsCandidateLambda = kFALSE; | |
1976 | bIsCandidateALambda = kFALSE; | |
1977 | } | |
87e23d3e | 1978 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); |
7495a67b | 1979 | } |
1980 | iCutIndex++; | |
7729cc34 | 1981 | |
7495a67b | 1982 | // 12 |
1983 | // Daughter PID | |
1984 | if(bCutPid) | |
1985 | { | |
1986 | if(bUseOldCuts) | |
1987 | { | |
1988 | if(bPrintCuts) printf("Rec: Applying cut: Delta dE/dx (both daughters): < %f\n", dNSigmadEdxMax); | |
1989 | if(dNSigmaPosPion > dNSigmadEdxMax || dNSigmaNegPion > dNSigmadEdxMax) // pi+, pi- | |
1990 | bIsCandidateK0s = kFALSE; | |
1991 | if(dNSigmaPosProton > dNSigmadEdxMax || dNSigmaNegPion > dNSigmadEdxMax) // p+, pi- | |
1992 | bIsCandidateLambda = kFALSE; | |
1993 | if(dNSigmaNegProton > dNSigmadEdxMax || dNSigmaPosPion > dNSigmadEdxMax) // p-, pi+ | |
1994 | bIsCandidateALambda = kFALSE; | |
1995 | } | |
1996 | else | |
1997 | { | |
1998 | if(bPrintCuts) printf("Rec: Applying cut: Delta dE/dx (proton below %f GeV/c): < %f\n", dPtProtonPIDMax, dNSigmadEdxMax); | |
1999 | if((dPtDaughterPos < dPtProtonPIDMax) && (dNSigmaPosProton > dNSigmadEdxMax)) // p+ | |
2000 | bIsCandidateLambda = kFALSE; | |
2001 | if((dPtDaughterNeg < dPtProtonPIDMax) && (dNSigmaNegProton > dNSigmadEdxMax)) // p- | |
2002 | bIsCandidateALambda = kFALSE; | |
2003 | } | |
2004 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); | |
2005 | } | |
2006 | iCutIndex++; | |
2007 | ||
2008 | Double_t valueCorrel[3] = {dMassV0K0s, dMassV0Lambda, dPtV0}; | |
2009 | if(bIsCandidateK0s && bIsCandidateLambda) | |
2010 | fh3CCMassCorrelBoth->Fill(valueCorrel); // correlation of mass distribution of candidates selected as both K0s and Lambda | |
2011 | if(bIsCandidateK0s && !bIsCandidateLambda) | |
2012 | fh3CCMassCorrelKNotL->Fill(valueCorrel); // correlation of mass distribution of candidates selected as K0s and not Lambda | |
2013 | if(!bIsCandidateK0s && bIsCandidateLambda) | |
2014 | fh3CCMassCorrelLNotK->Fill(valueCorrel); // correlation of mass distribution of candidates selected as not K0s and Lambda | |
2015 | ||
2016 | // 13 | |
2017 | // Armenteros-Podolanski cut | |
2018 | if(bCutArmPod) | |
2019 | { | |
2020 | if(bPrintCuts) printf("Rec: Applying cut: Armenteros-Podolanski (K0S): pT > %f * |alpha|\n", 0.2); | |
2021 | if(dPtArm < TMath::Abs(0.2 * dAlpha)) | |
2022 | bIsCandidateK0s = kFALSE; | |
2023 | // if(dPtArm < 0.025) | |
2024 | // { | |
2025 | // bIsCandidateLambda = kFALSE; | |
2026 | // bIsCandidateALambda = kFALSE; | |
2027 | // } | |
2028 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); | |
2029 | } | |
2030 | iCutIndex++; | |
7729cc34 | 2031 | |
7495a67b | 2032 | // Cross contamination |
2033 | if(bIsInPeakK0s) | |
2034 | { | |
2035 | if(bIsCandidateLambda) // Lambda candidates in K0s peak, excluded from Lambda candidates by CC cut | |
2036 | fh2CCLambda->Fill(dMassV0Lambda, dPtV0); | |
2037 | } | |
2038 | if(bIsInPeakLambda) | |
2039 | { | |
2040 | if(bIsCandidateK0s) // K0s candidates in Lambda peak, excluded from K0s candidates by CC cut | |
2041 | fh2CCK0s->Fill(dMassV0K0s, dPtV0); | |
2042 | } | |
7729cc34 | 2043 | // if (bCutCross) |
2044 | // { | |
2045 | // if (bIsInPeakK0s) | |
2046 | // bIsCandidateLambda = kFALSE; | |
2047 | // if (bIsInPeakLambda) | |
2048 | // bIsCandidateK0s = kFALSE; | |
87e23d3e | 2049 | // FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, bIsCandidateLambda, bIsCandidateALambda, iCutIndex, iCentIndex); |
7729cc34 | 2050 | // } |
2051 | // iCutIndex++; | |
2052 | ||
7495a67b | 2053 | // End of particle-dependent cuts |
7729cc34 | 2054 | |
7495a67b | 2055 | //===== End of reconstruction cutting ===== |
7729cc34 | 2056 | |
7495a67b | 2057 | if(!bIsCandidateK0s && !bIsCandidateLambda && !bIsCandidateALambda) |
2058 | continue; | |
7729cc34 | 2059 | |
7495a67b | 2060 | /* |
2061 | if(fDebug>5) printf("TaskV0sInJets: Adding selected V0 to branch\n"); | |
2062 | // Add selected candidates to the output tree branch | |
2063 | if ((bIsCandidateK0s || bIsCandidateLambda || bIsCandidateALambda) && fbTreeOutput) | |
2064 | { | |
2065 | objectV0 = new ((*fBranchV0Rec)[iNV0SelV0Rec++]) AliV0Object(v0,primVtx); | |
2066 | // new ((*fBranchV0Rec)[iNV0SelV0Rec++]) AliAODv0(*((AliAODv0*)v0)); | |
2067 | objectV0->SetIsCandidateK0S(bIsCandidateK0s); | |
2068 | objectV0->SetIsCandidateLambda(bIsCandidateLambda); | |
2069 | objectV0->SetIsCandidateALambda(bIsCandidateALambda); | |
2070 | objectV0->SetNSigmaPosProton(dNSigmaPosProton); | |
2071 | objectV0->SetNSigmaNegProton(dNSigmaNegProton); | |
2072 | } | |
2073 | */ | |
2074 | ||
2075 | // Selection of V0s in jet cones, perpendicular cones, random cones, outside cones | |
2076 | if(bJetEventGood && iNJetSel && (bIsCandidateK0s || bIsCandidateLambda || bIsCandidateALambda)) | |
2077 | { | |
2078 | // Selection of V0s in jet cones | |
2079 | if(fDebug > 5) printf("TaskV0sInJets: Searching for V0 %d %d in %d jet cones\n", bIsCandidateK0s, bIsCandidateLambda, iNJetSel); | |
2080 | for(Int_t iJet = 0; iJet < iNJetSel; iJet++) | |
2081 | { | |
2082 | jet = (AliAODJet*)jetArraySel->At(iJet); // load a jet in the list | |
2083 | vecJetMomentum = TVector3(jet->Px(), jet->Py(), jet->Pz()); // set the vector of jet momentum | |
2084 | if(fDebug > 5) printf("TaskV0sInJets: Checking if V0 %d %d in jet cone %d\n", bIsCandidateK0s, bIsCandidateLambda, iJet); | |
2085 | if(IsParticleInCone(v0, jet, fdRadiusJet)) // If good jet in event, find out whether V0 is in that jet | |
7729cc34 | 2086 | { |
7495a67b | 2087 | if(fDebug > 5) printf("TaskV0sInJets: V0 %d %d found in jet cone %d\n", bIsCandidateK0s, bIsCandidateLambda, iJet); |
2088 | bIsInConeJet = kTRUE; | |
2089 | break; | |
7729cc34 | 2090 | } |
7495a67b | 2091 | } |
2092 | // Selection of V0s in perp. cones | |
2093 | if(fDebug > 5) printf("TaskV0sInJets: Searching for V0 %d %d in %d perp. cones\n", bIsCandidateK0s, bIsCandidateLambda, iNJetSel); | |
2094 | for(Int_t iJet = 0; iJet < iNJetPerp; iJet++) | |
2095 | { | |
2096 | jetPerp = (AliAODJet*)jetArrayPerp->At(iJet); // load a jet in the list | |
2097 | if(fDebug > 5) printf("TaskV0sInJets: Checking if V0 %d %d in perp. cone %d\n", bIsCandidateK0s, bIsCandidateLambda, iJet); | |
2098 | if(IsParticleInCone(v0, jetPerp, fdRadiusJet)) // V0 in perp. cone | |
7729cc34 | 2099 | { |
7495a67b | 2100 | if(fDebug > 5) printf("TaskV0sInJets: V0 %d %d found in perp. cone %d\n", bIsCandidateK0s, bIsCandidateLambda, iJet); |
2101 | bIsInConePerp = kTRUE; | |
2102 | break; | |
7729cc34 | 2103 | } |
7495a67b | 2104 | } |
2105 | // Selection of V0s in random cones | |
2106 | if(jetRnd) | |
2107 | { | |
2108 | if(fDebug > 5) printf("TaskV0sInJets: Searching for V0 %d %d in the rnd. cone\n", bIsCandidateK0s, bIsCandidateLambda); | |
2109 | if(IsParticleInCone(v0, jetRnd, fdRadiusJet)) // V0 in rnd. cone? | |
7729cc34 | 2110 | { |
7495a67b | 2111 | if(fDebug > 5) printf("TaskV0sInJets: V0 %d %d found in the rnd. cone\n", bIsCandidateK0s, bIsCandidateLambda); |
2112 | bIsInConeRnd = kTRUE; | |
7729cc34 | 2113 | } |
7495a67b | 2114 | } |
2115 | // Selection of V0s in median-cluster cones | |
2116 | if(jetMed) | |
2117 | { | |
2118 | if(fDebug > 5) printf("TaskV0sInJets: Searching for V0 %d %d in the med. cone\n", bIsCandidateK0s, bIsCandidateLambda); | |
2119 | if(IsParticleInCone(v0, jetMed, fdRadiusJet)) // V0 in med. cone? | |
7729cc34 | 2120 | { |
7495a67b | 2121 | if(fDebug > 5) printf("TaskV0sInJets: V0 %d %d found in the med. cone\n", bIsCandidateK0s, bIsCandidateLambda); |
2122 | bIsInConeMed = kTRUE; | |
7729cc34 | 2123 | } |
7495a67b | 2124 | } |
2125 | // Selection of V0s outside jet cones | |
2126 | if(fDebug > 5) printf("TaskV0sInJets: Searching for V0 %d %d outside jet cones\n", bIsCandidateK0s, bIsCandidateLambda); | |
2127 | if(!OverlapWithJets(jetArraySel, v0, dRadiusExcludeCone)) // V0 oustide jet cones | |
2128 | { | |
2129 | if(fDebug > 5) printf("TaskV0sInJets: V0 %d %d found outside jet cones\n", bIsCandidateK0s, bIsCandidateLambda); | |
2130 | bIsOutsideCones = kTRUE; | |
2131 | } | |
2132 | } | |
7729cc34 | 2133 | |
7495a67b | 2134 | // QA histograms after cuts |
2135 | FillQAHistogramV0(primVtx, v0, 1, bIsCandidateK0s, bIsCandidateLambda, bIsInPeakK0s, bIsInPeakLambda); | |
2136 | // Cut vs mass histograms after cuts | |
2137 | /* | |
2138 | if(bIsCandidateK0s) | |
2139 | { | |
2140 | fh2CutTPCRowsK0s[1]->Fill(dMassV0K0s, dNRowsPos); | |
2141 | fh2CutTPCRowsK0s[1]->Fill(dMassV0K0s, dNRowsNeg); | |
2142 | fh2CutPtPosK0s[1]->Fill(dMassV0K0s, dPtDaughterPos); | |
2143 | fh2CutPtNegK0s[1]->Fill(dMassV0K0s, dPtDaughterNeg); | |
2144 | fh2CutDCAVtx[1]->Fill(dMassV0K0s, dDCAToPrimVtxPos); | |
2145 | fh2CutDCAVtx[1]->Fill(dMassV0K0s, dDCAToPrimVtxNeg); | |
2146 | fh2CutDCAV0[1]->Fill(dMassV0K0s, dDCADaughters); | |
2147 | fh2CutCos[1]->Fill(dMassV0K0s, dCPA); | |
2148 | fh2CutR[1]->Fill(dMassV0K0s, dRadiusDecay); | |
2149 | fh2CutEtaK0s[1]->Fill(dMassV0K0s, dEtaDaughterPos); | |
2150 | fh2CutEtaK0s[1]->Fill(dMassV0K0s, dEtaDaughterNeg); | |
2151 | fh2CutRapK0s[1]->Fill(dMassV0K0s, dRapK0s); | |
2152 | fh2CutCTauK0s[1]->Fill(dMassV0K0s, dMROverPtK0s / dCTauK0s); | |
2153 | fh2CutPIDPosK0s[1]->Fill(dMassV0K0s, dNSigmaPosPion); | |
2154 | fh2CutPIDNegK0s[1]->Fill(dMassV0K0s, dNSigmaNegPion); | |
2155 | fh1DeltaZK0s[iCentIndex]->Fill(dDecayPath[2]); | |
2156 | } | |
2157 | if(bIsCandidateLambda) | |
2158 | { | |
2159 | fh2CutTPCRowsLambda[1]->Fill(dMassV0Lambda, dNRowsPos); | |
2160 | fh2CutTPCRowsLambda[1]->Fill(dMassV0Lambda, dNRowsNeg); | |
2161 | fh2CutPtPosLambda[1]->Fill(dMassV0Lambda, dPtDaughterPos); | |
2162 | fh2CutPtNegLambda[1]->Fill(dMassV0Lambda, dPtDaughterNeg); | |
2163 | fh2CutEtaLambda[1]->Fill(dMassV0Lambda, dEtaDaughterPos); | |
2164 | fh2CutEtaLambda[1]->Fill(dMassV0Lambda, dEtaDaughterNeg); | |
2165 | fh2CutRapLambda[1]->Fill(dMassV0Lambda, dRapLambda); | |
2166 | fh2CutCTauLambda[1]->Fill(dMassV0Lambda, dMROverPtLambda / dCTauLambda); | |
2167 | fh2CutPIDPosLambda[1]->Fill(dMassV0Lambda, dNSigmaPosProton); | |
2168 | fh2CutPIDNegLambda[1]->Fill(dMassV0Lambda, dNSigmaNegPion); | |
2169 | fh1DeltaZLambda[iCentIndex]->Fill(dDecayPath[2]); | |
2170 | } | |
2171 | */ | |
2172 | ||
2173 | //===== Start of filling V0 spectra ===== | |
2174 | ||
2175 | Double_t dAngle = TMath::Pi(); // angle between V0 momentum and jet momentum | |
2176 | if(bIsInConeJet) | |
2177 | { | |
2178 | dAngle = vecV0Momentum.Angle(vecJetMomentum); | |
2179 | } | |
2180 | ||
2181 | // iCutIndex = 14 | |
2182 | if(bIsCandidateK0s) | |
2183 | { | |
2184 | // 14 K0s candidates after cuts | |
87e23d3e | 2185 | // printf("K0S: i = %d, m = %f, pT = %f, eta = %f, phi = %f\n",iV0,dMassV0K0s,dPtV0,dEtaV0,dPhiV0); |
7495a67b | 2186 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, kFALSE, kFALSE, iCutIndex, iCentIndex); |
2187 | Double_t valueKIncl[3] = {dMassV0K0s, dPtV0, dEtaV0}; | |
2188 | fhnV0InclusiveK0s[iCentIndex]->Fill(valueKIncl); | |
2189 | fh1V0InvMassK0sCent[iCentIndex]->Fill(dMassV0K0s); | |
2190 | ||
2191 | fh1QACTau2D[1]->Fill(dMROverPtK0s / dCTauK0s); | |
2192 | fh1QACTau3D[1]->Fill(dMLOverPK0s / dCTauK0s); | |
2193 | // fh2Tau3DVs2D[1]->Fill(dPtV0, dLOverP / dROverPt); | |
2194 | ||
2195 | if(iNJetSel) | |
2196 | { | |
2197 | // 15 K0s in jet events | |
2198 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, kFALSE, kFALSE, iCutIndex + 1, iCentIndex); | |
2199 | } | |
2200 | if(bIsInConeJet) | |
2201 | { | |
2202 | // 16 K0s in jets | |
2203 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, bIsCandidateK0s, kFALSE, kFALSE, iCutIndex + 2, iCentIndex); | |
2204 | Double_t valueKInJC[4] = {dMassV0K0s, dPtV0, dEtaV0, jet->Pt()}; | |
2205 | fhnV0InJetK0s[iCentIndex]->Fill(valueKInJC); | |
2206 | fh2V0PtJetAngleK0s[iCentIndex]->Fill(jet->Pt(), dAngle); | |
2207 | } | |
2208 | if(bIsOutsideCones) | |
2209 | { | |
2210 | Double_t valueKOutJC[3] = {dMassV0K0s, dPtV0, dEtaV0}; | |
2211 | fhnV0OutJetK0s[iCentIndex]->Fill(valueKOutJC); | |
2212 | } | |
2213 | if(bIsInConePerp) | |
2214 | { | |
2215 | Double_t valueKInPC[4] = {dMassV0K0s, dPtV0, dEtaV0, jetPerp->Pt()}; | |
2216 | fhnV0InPerpK0s[iCentIndex]->Fill(valueKInPC); | |
2217 | } | |
2218 | if(bIsInConeRnd) | |
2219 | { | |
2220 | Double_t valueKInRnd[3] = {dMassV0K0s, dPtV0, dEtaV0}; | |
2221 | fhnV0InRndK0s[iCentIndex]->Fill(valueKInRnd); | |
2222 | } | |
2223 | if(bIsInConeMed) | |
2224 | { | |
2225 | Double_t valueKInMed[3] = {dMassV0K0s, dPtV0, dEtaV0}; | |
2226 | fhnV0InMedK0s[iCentIndex]->Fill(valueKInMed); | |
2227 | } | |
2228 | if(!iNJetSel) | |
2229 | { | |
2230 | Double_t valueKNoJet[3] = {dMassV0K0s, dPtV0, dEtaV0}; | |
2231 | fhnV0NoJetK0s[iCentIndex]->Fill(valueKNoJet); | |
2232 | } | |
2233 | iNV0CandK0s++; | |
2234 | } | |
2235 | if(bIsCandidateLambda) | |
2236 | { | |
2237 | // 14 Lambda candidates after cuts | |
87e23d3e | 2238 | // printf("La: i = %d, m = %f, pT = %f, eta = %f, phi = %f\n",iV0,dMassV0Lambda,dPtV0,dEtaV0,dPhiV0); |
7495a67b | 2239 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, bIsCandidateLambda, kFALSE, iCutIndex, iCentIndex); |
2240 | Double_t valueLIncl[3] = {dMassV0Lambda, dPtV0, dEtaV0}; | |
2241 | fhnV0InclusiveLambda[iCentIndex]->Fill(valueLIncl); | |
2242 | fh1V0InvMassLambdaCent[iCentIndex]->Fill(dMassV0Lambda); | |
2243 | if(iNJetSel) | |
2244 | { | |
2245 | // 15 Lambda in jet events | |
2246 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, bIsCandidateLambda, kFALSE, iCutIndex + 1, iCentIndex); | |
2247 | } | |
2248 | if(bIsInConeJet) | |
2249 | { | |
2250 | // 16 Lambda in jets | |
2251 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, bIsCandidateLambda, kFALSE, iCutIndex + 2, iCentIndex); | |
2252 | Double_t valueLInJC[4] = {dMassV0Lambda, dPtV0, dEtaV0, jet->Pt()}; | |
2253 | fhnV0InJetLambda[iCentIndex]->Fill(valueLInJC); | |
2254 | fh2V0PtJetAngleLambda[iCentIndex]->Fill(jet->Pt(), dAngle); | |
2255 | } | |
2256 | if(bIsOutsideCones) | |
2257 | { | |
2258 | Double_t valueLOutJet[3] = {dMassV0Lambda, dPtV0, dEtaV0}; | |
2259 | fhnV0OutJetLambda[iCentIndex]->Fill(valueLOutJet); | |
2260 | } | |
2261 | if(bIsInConePerp) | |
2262 | { | |
2263 | Double_t valueLInPC[4] = {dMassV0Lambda, dPtV0, dEtaV0, jetPerp->Pt()}; | |
2264 | fhnV0InPerpLambda[iCentIndex]->Fill(valueLInPC); | |
2265 | } | |
2266 | if(bIsInConeRnd) | |
2267 | { | |
2268 | Double_t valueLInRnd[3] = {dMassV0Lambda, dPtV0, dEtaV0}; | |
2269 | fhnV0InRndLambda[iCentIndex]->Fill(valueLInRnd); | |
2270 | } | |
2271 | if(bIsInConeMed) | |
2272 | { | |
2273 | Double_t valueLInMed[3] = {dMassV0Lambda, dPtV0, dEtaV0}; | |
2274 | fhnV0InMedLambda[iCentIndex]->Fill(valueLInMed); | |
2275 | } | |
2276 | if(!iNJetSel) | |
2277 | { | |
2278 | Double_t valueLNoJet[3] = {dMassV0Lambda, dPtV0, dEtaV0}; | |
2279 | fhnV0NoJetLambda[iCentIndex]->Fill(valueLNoJet); | |
2280 | } | |
2281 | iNV0CandLambda++; | |
2282 | } | |
2283 | if(bIsCandidateALambda) | |
2284 | { | |
2285 | // 14 ALambda candidates after cuts | |
87e23d3e | 2286 | // printf("AL: i = %d, m = %f, pT = %f, eta = %f, phi = %f\n",iV0,dMassV0ALambda,dPtV0,dEtaV0,dPhiV0); |
7495a67b | 2287 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, kFALSE, bIsCandidateALambda, iCutIndex, iCentIndex); |
2288 | Double_t valueALIncl[3] = {dMassV0ALambda, dPtV0, dEtaV0}; | |
2289 | fhnV0InclusiveALambda[iCentIndex]->Fill(valueALIncl); | |
2290 | fh1V0InvMassALambdaCent[iCentIndex]->Fill(dMassV0ALambda); | |
2291 | if(iNJetSel) | |
2292 | { | |
2293 | // 15 ALambda in jet events | |
2294 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, kFALSE, bIsCandidateALambda, iCutIndex + 1, iCentIndex); | |
2295 | } | |
2296 | if(bIsInConeJet) | |
2297 | { | |
2298 | // 16 ALambda in jets | |
2299 | FillCandidates(dMassV0K0s, dMassV0Lambda, dMassV0ALambda, kFALSE, kFALSE, bIsCandidateALambda, iCutIndex + 2, iCentIndex); | |
2300 | Double_t valueLInJC[4] = {dMassV0ALambda, dPtV0, dEtaV0, jet->Pt()}; | |
2301 | fhnV0InJetALambda[iCentIndex]->Fill(valueLInJC); | |
2302 | fh2V0PtJetAngleALambda[iCentIndex]->Fill(jet->Pt(), dAngle); | |
2303 | } | |
2304 | if(bIsOutsideCones) | |
2305 | { | |
2306 | Double_t valueALOutJet[3] = {dMassV0ALambda, dPtV0, dEtaV0}; | |
2307 | fhnV0OutJetALambda[iCentIndex]->Fill(valueALOutJet); | |
2308 | } | |
2309 | if(bIsInConePerp) | |
2310 | { | |
2311 | Double_t valueLInPC[4] = {dMassV0ALambda, dPtV0, dEtaV0, jetPerp->Pt()}; | |
2312 | fhnV0InPerpALambda[iCentIndex]->Fill(valueLInPC); | |
2313 | } | |
2314 | if(bIsInConeRnd) | |
2315 | { | |
2316 | Double_t valueALInRnd[3] = {dMassV0ALambda, dPtV0, dEtaV0}; | |
2317 | fhnV0InRndALambda[iCentIndex]->Fill(valueALInRnd); | |
2318 | } | |
2319 | if(bIsInConeMed) | |
2320 | { | |
2321 | Double_t valueALInMed[3] = {dMassV0ALambda, dPtV0, dEtaV0}; | |
2322 | fhnV0InMedALambda[iCentIndex]->Fill(valueALInMed); | |
2323 | } | |
2324 | if(!iNJetSel) | |
2325 | { | |
2326 | Double_t valueALNoJet[3] = {dMassV0ALambda, dPtV0, dEtaV0}; | |
2327 | fhnV0NoJetALambda[iCentIndex]->Fill(valueALNoJet); | |
2328 | } | |
2329 | iNV0CandALambda++; | |
2330 | } | |
2331 | //===== End of filling V0 spectra ===== | |
7729cc34 | 2332 | |
2333 | ||
7495a67b | 2334 | //===== Association of reconstructed V0 candidates with MC particles ===== |
2335 | if(fbMCAnalysis) | |
2336 | { | |
2337 | // Associate selected candidates only | |
7729cc34 | 2338 | // if ( !(bIsCandidateK0s && bIsInPeakK0s) && !(bIsCandidateLambda && bIsInPeakLambda) ) // signal candidates |
7495a67b | 2339 | if(!(bIsCandidateK0s) && !(bIsCandidateLambda) && !(bIsCandidateALambda)) // chosen candidates with any mass |
2340 | continue; | |
7729cc34 | 2341 | |
7495a67b | 2342 | // Get MC labels of reconstructed daughter tracks |
2343 | Int_t iLabelPos = TMath::Abs(trackPos->GetLabel()); | |
2344 | Int_t iLabelNeg = TMath::Abs(trackNeg->GetLabel()); | |
7729cc34 | 2345 | |
7495a67b | 2346 | // Make sure MC daughters are in the array range |
2347 | if((iLabelNeg < 0) || (iLabelNeg >= iNTracksMC) || (iLabelPos < 0) || (iLabelPos >= iNTracksMC)) | |
2348 | continue; | |
7729cc34 | 2349 | |
7495a67b | 2350 | // Get MC particles corresponding to reconstructed daughter tracks |
2351 | AliAODMCParticle* particleMCDaughterNeg = (AliAODMCParticle*)arrayMC->At(iLabelNeg); | |
2352 | AliAODMCParticle* particleMCDaughterPos = (AliAODMCParticle*)arrayMC->At(iLabelPos); | |
2353 | if(!particleMCDaughterNeg || !particleMCDaughterPos) | |
2354 | continue; | |
7729cc34 | 2355 | |
7495a67b | 2356 | // Make sure MC daughter particles are not physical primary |
2357 | if((particleMCDaughterNeg->IsPhysicalPrimary()) || (particleMCDaughterPos->IsPhysicalPrimary())) | |
2358 | continue; | |
7729cc34 | 2359 | |
7495a67b | 2360 | // Get identities of MC daughter particles |
2361 | Int_t iPdgCodeDaughterPos = particleMCDaughterPos->GetPdgCode(); | |
2362 | Int_t iPdgCodeDaughterNeg = particleMCDaughterNeg->GetPdgCode(); | |
7729cc34 | 2363 | |
7495a67b | 2364 | // Get index of the mother particle for each MC daughter particle |
2365 | Int_t iIndexMotherPos = particleMCDaughterPos->GetMother(); | |
2366 | Int_t iIndexMotherNeg = particleMCDaughterNeg->GetMother(); | |
7729cc34 | 2367 | |
7495a67b | 2368 | if((iIndexMotherNeg < 0) || (iIndexMotherNeg >= iNTracksMC) || (iIndexMotherPos < 0) || (iIndexMotherPos >= iNTracksMC)) |
2369 | continue; | |
7729cc34 | 2370 | |
7495a67b | 2371 | // Check whether MC daughter particles have the same mother |
2372 | if(iIndexMotherNeg != iIndexMotherPos) | |
2373 | continue; | |
7729cc34 | 2374 | |
7495a67b | 2375 | // Get the MC mother particle of both MC daughter particles |
2376 | AliAODMCParticle* particleMCMother = (AliAODMCParticle*)arrayMC->At(iIndexMotherPos); | |
2377 | if(!particleMCMother) | |
2378 | continue; | |
7729cc34 | 2379 | |
7495a67b | 2380 | // Get identity of the MC mother particle |
2381 | Int_t iPdgCodeMother = particleMCMother->GetPdgCode(); | |
7729cc34 | 2382 | |
7495a67b | 2383 | // Skip not interesting particles |
2384 | if((iPdgCodeMother != iPdgCodeK0s) && (TMath::Abs(iPdgCodeMother) != iPdgCodeLambda)) | |
2385 | continue; | |
7729cc34 | 2386 | |
7495a67b | 2387 | // Check identity of the MC mother particle and the decay channel |
2388 | // Is MC mother particle K0S? | |
2389 | Bool_t bV0MCIsK0s = ((iPdgCodeMother == iPdgCodeK0s) && (iPdgCodeDaughterPos == +iPdgCodePion) && (iPdgCodeDaughterNeg == -iPdgCodePion)); | |
2390 | // Is MC mother particle Lambda? | |
2391 | Bool_t bV0MCIsLambda = ((iPdgCodeMother == +iPdgCodeLambda) && (iPdgCodeDaughterPos == +iPdgCodeProton) && (iPdgCodeDaughterNeg == -iPdgCodePion)); | |
2392 | // Is MC mother particle anti-Lambda? | |
2393 | Bool_t bV0MCIsALambda = ((iPdgCodeMother == -iPdgCodeLambda) && (iPdgCodeDaughterPos == +iPdgCodePion) && (iPdgCodeDaughterNeg == -iPdgCodeProton)); | |
7729cc34 | 2394 | |
7495a67b | 2395 | Double_t dPtV0Gen = particleMCMother->Pt(); |
87e23d3e | 2396 | // Double_t dRapV0MC = particleMCMother->Y(); |
7495a67b | 2397 | Double_t dEtaV0Gen = particleMCMother->Eta(); |
87e23d3e | 2398 | // Double_t dPhiV0Gen = particleMCMother->Phi(); |
7729cc34 | 2399 | |
7495a67b | 2400 | // Is MC mother particle physical primary? Attention!! Definition of IsPhysicalPrimary may change!! |
7729cc34 | 2401 | // Bool_t bV0MCIsPrimary = particleMCMother->IsPhysicalPrimary(); |
7495a67b | 2402 | // Get the MC mother particle of the MC mother particle |
2403 | Int_t iIndexMotherOfMother = particleMCMother->GetMother(); | |
2404 | AliAODMCParticle* particleMCMotherOfMother = 0; | |
2405 | if(iIndexMotherOfMother >= 0) | |
2406 | particleMCMotherOfMother = (AliAODMCParticle*)arrayMC->At(iIndexMotherOfMother); | |
2407 | // Get identity of the MC mother particle of the MC mother particle if it exists | |
2408 | Int_t iPdgCodeMotherOfMother = 0; | |
2409 | if(particleMCMotherOfMother) | |
2410 | iPdgCodeMotherOfMother = particleMCMotherOfMother->GetPdgCode(); | |
2411 | // Check if the MC mother particle of the MC mother particle is a physical primary Sigma (3212 - Sigma0, 3224 - Sigma*+, 3214 - Sigma*0, 3114 - Sigma*-) | |
7729cc34 | 2412 | // Bool_t bV0MCComesFromSigma = kFALSE; // Is MC mother particle daughter of a Sigma? |
2413 | // if ( (particleMCMotherOfMother && particleMCMotherOfMother->IsPhysicalPrimary()) && ( (TMath::Abs(iPdgCodeMotherOfMother)==3212) || (TMath::Abs(iPdgCodeMotherOfMother)==3224) || (TMath::Abs(iPdgCodeMotherOfMother)==3214) || (TMath::Abs(iPdgCodeMotherOfMother)==3114) ) ) | |
2414 | // bV0MCComesFromSigma = kTRUE; | |
7495a67b | 2415 | // Should MC mother particle be considered as primary when it is Lambda? |
7729cc34 | 2416 | // Bool_t bV0MCIsPrimaryLambda = (bV0MCIsPrimary || bV0MCComesFromSigma); |
7495a67b | 2417 | // Check if the MC mother particle of the MC mother particle is a Xi (3322 - Xi0, 3312 - Xi-) |
2418 | Bool_t bV0MCComesFromXi = ((particleMCMotherOfMother) && ((iPdgCodeMotherOfMother == 3322) || (iPdgCodeMotherOfMother == 3312))); // Is MC mother particle daughter of a Xi? | |
2419 | Bool_t bV0MCComesFromAXi = ((particleMCMotherOfMother) && ((iPdgCodeMotherOfMother == -3322) || (iPdgCodeMotherOfMother == -3312))); // Is MC mother particle daughter of a anti-Xi? | |
2420 | ||
2421 | // Get the distance between production point of the MC mother particle and the primary vertex | |
2422 | Double_t dx = dPrimVtxMCX - particleMCMother->Xv(); | |
2423 | Double_t dy = dPrimVtxMCY - particleMCMother->Yv(); | |
2424 | Double_t dz = dPrimVtxMCZ - particleMCMother->Zv(); | |
2425 | Double_t dDistPrimary = TMath::Sqrt(dx * dx + dy * dy + dz * dz); | |
2426 | Bool_t bV0MCIsPrimaryDist = (dDistPrimary < dDistPrimaryMax); // Is close enough to be considered primary-like? | |
2427 | ||
2428 | // phi, eta resolution for V0-reconstruction | |
87e23d3e | 2429 | // Double_t dResolutionV0Eta = particleMCMother->Eta()-v0->Eta(); |
2430 | // Double_t dResolutionV0Phi = particleMCMother->Phi()-v0->Phi(); | |
7729cc34 | 2431 | |
7495a67b | 2432 | /* |
2433 | if (fbTreeOutput) | |
2434 | { | |
2435 | objectV0->SetPtTrue(dPtV0Gen); | |
2436 | objectV0->SetEtaTrue(dEtaV0Gen); | |
2437 | objectV0->SetPhiTrue(dPhiV0Gen); | |
2438 | objectV0->SetPDGCode(iPdgCodeMother); | |
2439 | objectV0->SetPDGCodeMother(iPdgCodeMotherOfMother); | |
2440 | } | |
2441 | */ | |
2442 | ||
2443 | // K0s | |
7729cc34 | 2444 | // if (bIsCandidateK0s && bIsInPeakK0s) // selected candidates in peak |
7495a67b | 2445 | if(bIsCandidateK0s) // selected candidates with any mass |
2446 | { | |
7729cc34 | 2447 | // if (bV0MCIsK0s && bV0MCIsPrimary) // well reconstructed candidates |
7495a67b | 2448 | if(bV0MCIsK0s && bV0MCIsPrimaryDist) // well reconstructed candidates |
2449 | { | |
7729cc34 | 2450 | // if (fbTreeOutput) |
2451 | // objectV0->SetOrigin(1); | |
7495a67b | 2452 | fh2V0K0sPtMassMCRec[iCentIndex]->Fill(dPtV0Gen, dMassV0K0s); |
2453 | Double_t valueEtaK[3] = {dMassV0K0s, dPtV0Gen, dEtaV0Gen}; | |
2454 | fh3V0K0sEtaPtMassMCRec[iCentIndex]->Fill(valueEtaK); | |
2455 | ||
2456 | Double_t valueEtaDKNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, 0}; | |
2457 | fhnV0K0sInclDaughterEtaPtPtMCRec[iCentIndex]->Fill(valueEtaDKNeg); | |
2458 | Double_t valueEtaDKPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, 0}; | |
2459 | fhnV0K0sInclDaughterEtaPtPtMCRec[iCentIndex]->Fill(valueEtaDKPos); | |
2460 | ||
2461 | fh2V0K0sMCResolMPt[iCentIndex]->Fill(dMassV0K0s - dMassPDGK0s, dPtV0); | |
2462 | fh2V0K0sMCPtGenPtRec[iCentIndex]->Fill(dPtV0Gen, dPtV0); | |
2463 | if(bIsInConeJet) // true V0 associated to a candidate in jet | |
2464 | { | |
2465 | Double_t valueKInJCMC[4] = {dMassV0K0s, dPtV0Gen, dEtaV0Gen, jet->Pt()}; | |
2466 | fh3V0K0sInJetPtMassMCRec[iCentIndex]->Fill(valueKInJCMC); | |
2467 | Double_t valueEtaKIn[5] = {dMassV0K0s, dPtV0Gen, dEtaV0Gen, jet->Pt(), dEtaV0Gen - jet->Eta()}; | |
2468 | fh4V0K0sInJetEtaPtMassMCRec[iCentIndex]->Fill(valueEtaKIn); | |
2469 | ||
2470 | Double_t valueEtaDKJCNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()}; | |
2471 | fhnV0K0sInJetsDaughterEtaPtPtMCRec[iCentIndex]->Fill(valueEtaDKJCNeg); | |
2472 | Double_t valueEtaDKJCPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()}; | |
2473 | fhnV0K0sInJetsDaughterEtaPtPtMCRec[iCentIndex]->Fill(valueEtaDKJCPos); | |
2474 | } | |
2475 | } | |
2476 | if(bV0MCIsK0s && !bV0MCIsPrimaryDist) // not primary K0s | |
2477 | { | |
7729cc34 | 2478 | // if (fbTreeOutput) |
2479 | // objectV0->SetOrigin(-1); | |
7495a67b | 2480 | fh1V0K0sPtMCRecFalse[iCentIndex]->Fill(dPtV0Gen); |
2481 | } | |
2482 | } | |
2483 | // Lambda | |
7729cc34 | 2484 | // if (bIsCandidateLambda && bIsInPeakLambda) // selected candidates in peak |
7495a67b | 2485 | if(bIsCandidateLambda) // selected candidates with any mass |
2486 | { | |
7729cc34 | 2487 | // if (bV0MCIsLambda && bV0MCIsPrimaryLambda) // well reconstructed candidates |
7495a67b | 2488 | if(bV0MCIsLambda && bV0MCIsPrimaryDist) // well reconstructed candidates |
2489 | { | |
7729cc34 | 2490 | // if (fbTreeOutput) |
2491 | // objectV0->SetOrigin(1); | |
7495a67b | 2492 | fh2V0LambdaPtMassMCRec[iCentIndex]->Fill(dPtV0Gen, dMassV0Lambda); |
2493 | Double_t valueEtaL[3] = {dMassV0Lambda, dPtV0Gen, dEtaV0Gen}; | |
2494 | fh3V0LambdaEtaPtMassMCRec[iCentIndex]->Fill(valueEtaL); | |
2495 | ||
2496 | Double_t valueEtaDLNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, 0}; | |
2497 | fhnV0LambdaInclDaughterEtaPtPtMCRec[iCentIndex]->Fill(valueEtaDLNeg); | |
2498 | Double_t valueEtaDLPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, 0}; | |
2499 | fhnV0LambdaInclDaughterEtaPtPtMCRec[iCentIndex]->Fill(valueEtaDLPos); | |
2500 | ||
2501 | fh2V0LambdaMCResolMPt[iCentIndex]->Fill(dMassV0Lambda - dMassPDGLambda, dPtV0); | |
2502 | fh2V0LambdaMCPtGenPtRec[iCentIndex]->Fill(dPtV0Gen, dPtV0); | |
2503 | if(bIsInConeJet) // true V0 associated to a reconstructed candidate in jet | |
2504 | { | |
2505 | Double_t valueLInJCMC[4] = {dMassV0Lambda, dPtV0Gen, dEtaV0Gen, jet->Pt()}; | |
2506 | fh3V0LambdaInJetPtMassMCRec[iCentIndex]->Fill(valueLInJCMC); | |
2507 | Double_t valueEtaLIn[5] = {dMassV0Lambda, dPtV0Gen, dEtaV0Gen, jet->Pt(), dEtaV0Gen - jet->Eta()}; | |
2508 | fh4V0LambdaInJetEtaPtMassMCRec[iCentIndex]->Fill(valueEtaLIn); | |
2509 | ||
2510 | Double_t valueEtaDLJCNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()}; | |
2511 | fhnV0LambdaInJetsDaughterEtaPtPtMCRec[iCentIndex]->Fill(valueEtaDLJCNeg); | |
2512 | Double_t valueEtaDLJCPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()}; | |
2513 | fhnV0LambdaInJetsDaughterEtaPtPtMCRec[iCentIndex]->Fill(valueEtaDLJCPos); | |
2514 | } | |
2515 | } | |
2516 | // Fill the feed-down histograms | |
2517 | if(bV0MCIsLambda && bV0MCComesFromXi) | |
2518 | { | |
7729cc34 | 2519 | // if (fbTreeOutput) |
2520 | // objectV0->SetOrigin(2); | |
7495a67b | 2521 | Double_t valueFDLIncl[3] = {dPtV0Gen, particleMCMotherOfMother->Pt(), 0.}; |
2522 | fhnV0LambdaInclMCFD[iCentIndex]->Fill(valueFDLIncl); | |
2523 | if(bIsInConeRnd) | |
2524 | { | |
2525 | fhnV0LambdaBulkMCFD[iCentIndex]->Fill(valueFDLIncl); | |
2526 | } | |
2527 | if(bIsInConeJet) | |
2528 | { | |
2529 | Double_t valueFDLInJets[3] = {dPtV0Gen, particleMCMotherOfMother->Pt(), jet->Pt()}; | |
2530 | fhnV0LambdaInJetsMCFD[iCentIndex]->Fill(valueFDLInJets); | |
2531 | } | |
2532 | } | |
2533 | if(bV0MCIsLambda && !bV0MCIsPrimaryDist && !bV0MCComesFromXi) // not primary Lambda | |
2534 | { | |
7729cc34 | 2535 | // if (fbTreeOutput) |
2536 | // objectV0->SetOrigin(-1); | |
7495a67b | 2537 | fh1V0LambdaPtMCRecFalse[iCentIndex]->Fill(dPtV0Gen); |
2538 | } | |
2539 | } | |
2540 | // anti-Lambda | |
7729cc34 | 2541 | // if (bIsCandidateALambda && bIsInPeakALambda) // selected candidates in peak |
7495a67b | 2542 | if(bIsCandidateALambda) // selected candidates with any mass |
2543 | { | |
7729cc34 | 2544 | // if (bV0MCIsALambda && bV0MCIsPrimaryALambda) // well reconstructed candidates |
7495a67b | 2545 | if(bV0MCIsALambda && bV0MCIsPrimaryDist) // well reconstructed candidates |
2546 | { | |
7729cc34 | 2547 | // if (fbTreeOutput) |
2548 | // objectV0->SetOrigin(1); | |
7495a67b | 2549 | fh2V0ALambdaPtMassMCRec[iCentIndex]->Fill(dPtV0Gen, dMassV0ALambda); |
2550 | Double_t valueEtaAL[3] = {dMassV0ALambda, dPtV0Gen, dEtaV0Gen}; | |
2551 | fh3V0ALambdaEtaPtMassMCRec[iCentIndex]->Fill(valueEtaAL); | |
2552 | ||
2553 | Double_t valueEtaDALNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, 0}; | |
2554 | fhnV0ALambdaInclDaughterEtaPtPtMCRec[iCentIndex]->Fill(valueEtaDALNeg); | |
2555 | Double_t valueEtaDALPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, 0}; | |
2556 | fhnV0ALambdaInclDaughterEtaPtPtMCRec[iCentIndex]->Fill(valueEtaDALPos); | |
2557 | ||
2558 | fh2V0ALambdaMCResolMPt[iCentIndex]->Fill(dMassV0ALambda - dMassPDGLambda, dPtV0); | |
2559 | fh2V0ALambdaMCPtGenPtRec[iCentIndex]->Fill(dPtV0Gen, dPtV0); | |
2560 | if(bIsInConeJet) // true V0 associated to a reconstructed candidate in jet | |
2561 | { | |
2562 | Double_t valueALInJCMC[4] = {dMassV0ALambda, dPtV0Gen, dEtaV0Gen, jet->Pt()}; | |
2563 | fh3V0ALambdaInJetPtMassMCRec[iCentIndex]->Fill(valueALInJCMC); | |
2564 | Double_t valueEtaALIn[5] = {dMassV0ALambda, dPtV0Gen, dEtaV0Gen, jet->Pt(), dEtaV0Gen - jet->Eta()}; | |
2565 | fh4V0ALambdaInJetEtaPtMassMCRec[iCentIndex]->Fill(valueEtaALIn); | |
2566 | ||
2567 | Double_t valueEtaDALJCNeg[6] = {0, particleMCDaughterNeg->Eta(), particleMCDaughterNeg->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()}; | |
2568 | fhnV0ALambdaInJetsDaughterEtaPtPtMCRec[iCentIndex]->Fill(valueEtaDALJCNeg); | |
2569 | Double_t valueEtaDALJCPos[6] = {1, particleMCDaughterPos->Eta(), particleMCDaughterPos->Pt(), dEtaV0Gen, dPtV0Gen, jet->Pt()}; | |
2570 | fhnV0ALambdaInJetsDaughterEtaPtPtMCRec[iCentIndex]->Fill(valueEtaDALJCPos); | |
2571 | } | |
2572 | } | |
2573 | // Fill the feed-down histograms | |
2574 | if(bV0MCIsALambda && bV0MCComesFromAXi) | |
2575 | { | |
7729cc34 | 2576 | // if (fbTreeOutput) |
2577 | // objectV0->SetOrigin(2); | |
7495a67b | 2578 | Double_t valueFDALIncl[3] = {dPtV0Gen, particleMCMotherOfMother->Pt(), 0.}; |
2579 | fhnV0ALambdaInclMCFD[iCentIndex]->Fill(valueFDALIncl); | |
2580 | if(bIsInConeRnd) | |
2581 | { | |
2582 | fhnV0ALambdaBulkMCFD[iCentIndex]->Fill(valueFDALIncl); | |
2583 | } | |
2584 | if(bIsInConeJet) | |
2585 | { | |
2586 | Double_t valueFDALInJets[3] = {dPtV0Gen, particleMCMotherOfMother->Pt(), jet->Pt()}; | |
2587 | fhnV0ALambdaInJetsMCFD[iCentIndex]->Fill(valueFDALInJets); | |
2588 | } | |
2589 | } | |
2590 | if(bV0MCIsALambda && !bV0MCIsPrimaryDist && !bV0MCComesFromAXi) // not primary anti-Lambda | |
2591 | { | |
7729cc34 | 2592 | // if (fbTreeOutput) |
2593 | // objectV0->SetOrigin(-1); | |
7495a67b | 2594 | fh1V0ALambdaPtMCRecFalse[iCentIndex]->Fill(dPtV0Gen); |
7729cc34 | 2595 | } |
7495a67b | 2596 | } |
7729cc34 | 2597 | } |
7495a67b | 2598 | //===== End Association of reconstructed V0 candidates with MC particles ===== |
2599 | } | |
2600 | //===== End of V0 loop ===== | |
7729cc34 | 2601 | |
2602 | fh1V0CandPerEvent->Fill(iNV0CandTot); | |
2603 | fh1V0CandPerEventCentK0s[iCentIndex]->Fill(iNV0CandK0s); | |
2604 | fh1V0CandPerEventCentLambda[iCentIndex]->Fill(iNV0CandLambda); | |
2605 | fh1V0CandPerEventCentALambda[iCentIndex]->Fill(iNV0CandALambda); | |
2606 | ||
7495a67b | 2607 | if(fDebug > 2) printf("TaskV0sInJets: End of V0 loop\n"); |
7729cc34 | 2608 | |
2609 | // Spectra of generated particles | |
7495a67b | 2610 | if(fbMCAnalysis) |
2611 | { | |
2612 | for(Int_t iPartMC = 0; iPartMC < iNTracksMC; iPartMC++) | |
7729cc34 | 2613 | { |
7495a67b | 2614 | // Get MC particle |
2615 | AliAODMCParticle* particleMC = (AliAODMCParticle*)arrayMC->At(iPartMC); | |
2616 | if(!particleMC) | |
2617 | continue; | |
7729cc34 | 2618 | |
7495a67b | 2619 | // Get identity of MC particle |
2620 | Int_t iPdgCodeParticleMC = particleMC->GetPdgCode(); | |
2621 | // Fill Xi spectrum (3322 - Xi0, 3312 - Xi-) | |
7729cc34 | 2622 | // if ( (iPdgCodeParticleMC==3322) || (iPdgCodeParticleMC==3312) ) |
7495a67b | 2623 | if((iPdgCodeParticleMC == 3312) && (TMath::Abs(particleMC->Y()) < 0.5)) |
2624 | { | |
7729cc34 | 2625 | // if (fbTreeOutput) |
2626 | // new ((*fBranchV0Gen)[iNV0SelV0Gen++]) AliAODMCParticle(*((AliAODMCParticle*)particleMC)); | |
7495a67b | 2627 | fh1V0XiPtMCGen[iCentIndex]->Fill(particleMC->Pt()); |
2628 | } | |
2629 | if((iPdgCodeParticleMC == -3312) && (TMath::Abs(particleMC->Y()) < 0.5)) | |
2630 | { | |
7729cc34 | 2631 | // if (fbTreeOutput) |
2632 | // new ((*fBranchV0Gen)[iNV0SelV0Gen++]) AliAODMCParticle(*((AliAODMCParticle*)particleMC)); | |
7495a67b | 2633 | fh1V0AXiPtMCGen[iCentIndex]->Fill(particleMC->Pt()); |
2634 | } | |
2635 | // Skip not interesting particles | |
2636 | if((iPdgCodeParticleMC != iPdgCodeK0s) && (TMath::Abs(iPdgCodeParticleMC) != iPdgCodeLambda)) | |
2637 | continue; | |
7729cc34 | 2638 | |
7495a67b | 2639 | // Check identity of the MC V0 particle |
2640 | // Is MC V0 particle K0S? | |
2641 | Bool_t bV0MCIsK0s = (iPdgCodeParticleMC == iPdgCodeK0s); | |
2642 | // Is MC V0 particle Lambda? | |
2643 | Bool_t bV0MCIsLambda = (iPdgCodeParticleMC == +iPdgCodeLambda); | |
2644 | // Is MC V0 particle anti-Lambda? | |
2645 | Bool_t bV0MCIsALambda = (iPdgCodeParticleMC == -iPdgCodeLambda); | |
2646 | ||
2647 | Double_t dPtV0Gen = particleMC->Pt(); | |
2648 | Double_t dRapV0Gen = particleMC->Y(); | |
2649 | Double_t dEtaV0Gen = particleMC->Eta(); | |
2650 | ||
2651 | // V0 rapidity cut | |
2652 | if(bCutRapV0) | |
2653 | { | |
2654 | if(bPrintCuts) printf("Gen: Applying cut: V0 |y|: < %f\n", dRapMax); | |
2655 | if((TMath::Abs(dRapV0Gen) > dRapMax)) | |
2656 | continue; | |
2657 | } | |
2658 | // V0 pseudorapidity cut | |
2659 | if(bCutEtaV0) | |
2660 | { | |
2661 | if(bPrintCuts) printf("Gen: Applying cut: V0 |eta|: < %f\n", dEtaMax); | |
2662 | if((TMath::Abs(dEtaV0Gen) > dEtaMax)) | |
2663 | continue; | |
2664 | } | |
2665 | /* | |
2666 | // Is MC V0 particle physical primary? Attention!! Definition of IsPhysicalPrimary may change!! | |
2667 | Bool_t bV0MCIsPrimary = particleMC->IsPhysicalPrimary(); | |
2668 | ||
2669 | // Get the MC mother particle of the MC V0 particle | |
2670 | Int_t iIndexMotherOfMother = particleMC->GetMother(); | |
2671 | AliAODMCParticle* particleMCMotherOfMother = 0; | |
2672 | if (iIndexMotherOfMother >= 0) | |
2673 | particleMCMotherOfMother = (AliAODMCParticle*)arrayMC->At(iIndexMotherOfMother); | |
2674 | // Get identity of the MC mother particle of the MC V0 particle if it exists | |
2675 | Int_t iPdgCodeMotherOfMother = 0; | |
2676 | if (particleMCMotherOfMother) | |
2677 | iPdgCodeMotherOfMother = particleMCMotherOfMother->GetPdgCode(); | |
2678 | // Check if the MC mother particle is a physical primary Sigma | |
2679 | Bool_t bV0MCComesFromSigma = kFALSE; | |
2680 | if ((particleMCMotherOfMother && particleMCMotherOfMother->IsPhysicalPrimary()) && (TMath::Abs(iPdgCodeMotherOfMother)==3212) || (TMath::Abs(iPdgCodeMotherOfMother)==3224) || (TMath::Abs(iPdgCodeMotherOfMother)==3214) || (TMath::Abs(iPdgCodeMotherOfMother)==3114) ) | |
2681 | bV0MCComesFromSigma = kTRUE; | |
2682 | // Should the MC V0 particle be considered as primary when it is Lambda? | |
2683 | Bool_t bV0MCIsPrimaryLambda = (bV0MCIsPrimary || bV0MCComesFromSigma); | |
2684 | */ | |
2685 | // Reject non primary particles | |
7729cc34 | 2686 | // if (!bV0MCIsPrimaryLambda) |
2687 | // continue; | |
2688 | ||
7495a67b | 2689 | // Get the distance between the production point of the MC V0 particle and the primary vertex |
2690 | Double_t dx = dPrimVtxMCX - particleMC->Xv(); | |
2691 | Double_t dy = dPrimVtxMCY - particleMC->Yv(); | |
2692 | Double_t dz = dPrimVtxMCZ - particleMC->Zv(); | |
2693 | Double_t dDistPrimary = TMath::Sqrt(dx * dx + dy * dy + dz * dz); | |
2694 | Bool_t bV0MCIsPrimaryDist = (dDistPrimary < dDistPrimaryMax); // Is close enough to be considered primary-like? | |
2695 | ||
2696 | // Check whether the MC V0 particle is in a MC jet | |
2697 | AliAODJet* jetMC = 0; | |
2698 | Bool_t bIsMCV0InJet = kFALSE; | |
2699 | if(iNJetSel) | |
2700 | { | |
2701 | if(fDebug > 5) printf("TaskV0sInJets: Searching for gen V0 in %d MC jets\n", iNJetSel); | |
2702 | for(Int_t iJet = 0; iJet < iNJetSel; iJet++) | |
2703 | { | |
2704 | jetMC = (AliAODJet*)jetArraySel->At(iJet); // load a jet in the list | |
2705 | if(fDebug > 5) printf("TaskV0sInJets: Checking if gen V0 in MC jet %d\n", iJet); | |
2706 | if(IsParticleInCone(particleMC, jetMC, fdRadiusJet)) // If good jet in event, find out whether V0 is in that jet | |
2707 | { | |
2708 | if(fDebug > 5) printf("TaskV0sInJets: gen V0 found in MC jet %d\n", iJet); | |
2709 | bIsMCV0InJet = kTRUE; | |
2710 | break; | |
2711 | } | |
2712 | } | |
2713 | } | |
2714 | ||
2715 | // Select only primary-like MC V0 particles | |
2716 | // K0s | |
7729cc34 | 2717 | // if (bV0MCIsK0s && bV0MCIsPrimary) // well reconstructed candidates |
7495a67b | 2718 | if(bV0MCIsK0s && bV0MCIsPrimaryDist) // well reconstructed candidates |
2719 | { | |
7729cc34 | 2720 | // if (fbTreeOutput) |
2721 | // new ((*fBranchV0Gen)[iNV0SelV0Gen++]) AliAODMCParticle(*((AliAODMCParticle*)particleMC)); | |
7495a67b | 2722 | fh1V0K0sPtMCGen[iCentIndex]->Fill(dPtV0Gen); |
2723 | fh2V0K0sEtaPtMCGen[iCentIndex]->Fill(dPtV0Gen, dEtaV0Gen); | |
2724 | if(bIsMCV0InJet) | |
2725 | { | |
2726 | fh2V0K0sInJetPtMCGen[iCentIndex]->Fill(dPtV0Gen, jetMC->Pt()); | |
2727 | Double_t valueEtaKInGen[4] = {dPtV0Gen, dEtaV0Gen, jetMC->Pt(), dEtaV0Gen - jetMC->Eta()}; | |
2728 | fh3V0K0sInJetEtaPtMCGen[iCentIndex]->Fill(valueEtaKInGen); | |
2729 | } | |
2730 | } | |
2731 | // Lambda | |
7729cc34 | 2732 | // if (bV0MCIsLambda && bV0MCIsPrimaryLambda) // well reconstructed candidates |
7495a67b | 2733 | if(bV0MCIsLambda && bV0MCIsPrimaryDist) // well reconstructed candidates |
2734 | { | |
7729cc34 | 2735 | // if (fbTreeOutput) |
2736 | // new ((*fBranchV0Gen)[iNV0SelV0Gen++]) AliAODMCParticle(*((AliAODMCParticle*)particleMC)); | |
7495a67b | 2737 | fh1V0LambdaPtMCGen[iCentIndex]->Fill(dPtV0Gen); |
2738 | fh2V0LambdaEtaPtMCGen[iCentIndex]->Fill(dPtV0Gen, dEtaV0Gen); | |
2739 | if(bIsMCV0InJet) | |
2740 | { | |
2741 | fh2V0LambdaInJetPtMCGen[iCentIndex]->Fill(dPtV0Gen, jetMC->Pt()); | |
2742 | Double_t valueEtaLInGen[4] = {dPtV0Gen, dEtaV0Gen, jetMC->Pt(), dEtaV0Gen - jetMC->Eta()}; | |
2743 | fh3V0LambdaInJetEtaPtMCGen[iCentIndex]->Fill(valueEtaLInGen); | |
2744 | } | |
2745 | } | |
2746 | // anti-Lambda | |
7729cc34 | 2747 | // if (bV0MCIsALambda && bV0MCIsPrimaryALambda) // well reconstructed candidates |
7495a67b | 2748 | if(bV0MCIsALambda && bV0MCIsPrimaryDist) // well reconstructed candidates |
2749 | { | |
7729cc34 | 2750 | // if (fbTreeOutput) |
2751 | // new ((*fBranchV0Gen)[iNV0SelV0Gen++]) AliAODMCParticle(*((AliAODMCParticle*)particleMC)); | |
7495a67b | 2752 | fh1V0ALambdaPtMCGen[iCentIndex]->Fill(dPtV0Gen); |
2753 | fh2V0ALambdaEtaPtMCGen[iCentIndex]->Fill(dPtV0Gen, dEtaV0Gen); | |
2754 | if(bIsMCV0InJet) | |
2755 | { | |
2756 | fh2V0ALambdaInJetPtMCGen[iCentIndex]->Fill(dPtV0Gen, jetMC->Pt()); | |
2757 | Double_t valueEtaALInGen[4] = {dPtV0Gen, dEtaV0Gen, jetMC->Pt(), dEtaV0Gen - jetMC->Eta()}; | |
2758 | fh3V0ALambdaInJetEtaPtMCGen[iCentIndex]->Fill(valueEtaALInGen); | |
7729cc34 | 2759 | } |
7495a67b | 2760 | } |
7729cc34 | 2761 | } |
7495a67b | 2762 | } |
7729cc34 | 2763 | |
2764 | // if (fbTreeOutput) | |
2765 | // ftreeOut->Fill(); | |
2766 | ||
2767 | jetArraySel->Delete(); | |
2768 | delete jetArraySel; | |
2769 | jetArrayPerp->Delete(); | |
2770 | delete jetArrayPerp; | |
7495a67b | 2771 | if(jetRnd) |
7729cc34 | 2772 | delete jetRnd; |
2773 | jetRnd = 0; | |
2774 | ||
7495a67b | 2775 | PostData(1, fOutputListStd); |
2776 | PostData(2, fOutputListQA); | |
2777 | PostData(3, fOutputListCuts); | |
2778 | PostData(4, fOutputListMC); | |
7729cc34 | 2779 | // if (fbTreeOutput) |
2780 | // PostData(5,ftreeOut); | |
2781 | // if(fDebug>5) printf("TaskV0sInJets: UserExec: End\n"); | |
2782 | } | |
2783 | ||
2784 | void AliAnalysisTaskV0sInJets::FillQAHistogramV0(AliAODVertex* vtx, const AliAODv0* vZero, Int_t iIndexHisto, Bool_t IsCandK0s, Bool_t IsCandLambda, Bool_t IsInPeakK0s, Bool_t IsInPeakLambda) | |
2785 | { | |
7495a67b | 2786 | if(!IsCandK0s && !IsCandLambda) |
7729cc34 | 2787 | return; |
2788 | ||
87e23d3e | 2789 | // Double_t dMassK0s = vZero->MassK0Short(); |
2790 | // Double_t dMassLambda = vZero->MassLambda(); | |
7729cc34 | 2791 | |
2792 | fh1QAV0Status[iIndexHisto]->Fill(vZero->GetOnFlyStatus()); | |
2793 | ||
7495a67b | 2794 | AliAODTrack* trackNeg = (AliAODTrack*)vZero->GetDaughter(1); // negative track |
2795 | AliAODTrack* trackPos = (AliAODTrack*)vZero->GetDaughter(0); // positive track | |
7729cc34 | 2796 | |
2797 | Short_t fTotalCharge = 0; | |
7495a67b | 2798 | for(Int_t i = 0; i < 2; i++) |
2799 | { | |
2800 | AliAODTrack* track = (AliAODTrack*)vZero->GetDaughter(i); // track | |
2801 | // Tracks TPC OK | |
2802 | fh1QAV0TPCRefit[iIndexHisto]->Fill(track->IsOn(AliAODTrack::kTPCrefit)); | |
2803 | Double_t nCrossedRowsTPC = track->GetTPCClusterInfo(2, 1); | |
2804 | fh1QAV0TPCRows[iIndexHisto]->Fill(nCrossedRowsTPC); | |
2805 | Int_t findable = track->GetTPCNclsF(); | |
2806 | fh1QAV0TPCFindable[iIndexHisto]->Fill(findable); | |
2807 | if(findable != 0) | |
7729cc34 | 2808 | { |
7495a67b | 2809 | fh1QAV0TPCRowsFind[iIndexHisto]->Fill(nCrossedRowsTPC / findable); |
2810 | } | |
2811 | // Daughters: pseudo-rapidity cut | |
2812 | fh1QAV0Eta[iIndexHisto]->Fill(track->Eta()); | |
2813 | if((nCrossedRowsTPC > (160. / (250. - 85.) * (255.*TMath::Abs(tan(track->Theta())) - 85.)) + 20.) && (track->Eta() < 0) && (track->Pt() > 0.15)) | |
7729cc34 | 2814 | // if (IsCandK0s) |
7495a67b | 2815 | { |
2816 | fh2QAV0EtaRows[iIndexHisto]->Fill(track->Eta(), nCrossedRowsTPC); | |
2817 | fh2QAV0PtRows[iIndexHisto]->Fill(track->Pt(), nCrossedRowsTPC); | |
2818 | fh2QAV0PhiRows[iIndexHisto]->Fill(track->Phi(), nCrossedRowsTPC); | |
2819 | fh2QAV0NClRows[iIndexHisto]->Fill(findable, nCrossedRowsTPC); | |
2820 | fh2QAV0EtaNCl[iIndexHisto]->Fill(track->Eta(), findable); | |
7729cc34 | 2821 | } |
7495a67b | 2822 | |
2823 | // Daughters: transverse momentum cut | |
2824 | fh1QAV0Pt[iIndexHisto]->Fill(track->Pt()); | |
2825 | fTotalCharge += track->Charge(); | |
2826 | } | |
7729cc34 | 2827 | fh1QAV0Charge[iIndexHisto]->Fill(fTotalCharge); |
2828 | ||
2829 | // Daughters: Impact parameter of daughters to prim vtx | |
2830 | fh1QAV0DCAVtx[iIndexHisto]->Fill(TMath::Abs(vZero->DcaNegToPrimVertex())); | |
2831 | fh1QAV0DCAVtx[iIndexHisto]->Fill(TMath::Abs(vZero->DcaPosToPrimVertex())); | |
87e23d3e | 2832 | // fh2CutDCAVtx[iIndexHisto]->Fill(dMassK0s,TMath::Abs(vZero->DcaNegToPrimVertex())); |
7729cc34 | 2833 | |
2834 | // Daughters: DCA | |
2835 | fh1QAV0DCAV0[iIndexHisto]->Fill(vZero->DcaV0Daughters()); | |
87e23d3e | 2836 | // fh2CutDCAV0[iIndexHisto]->Fill(dMassK0s,vZero->DcaV0Daughters()); |
7729cc34 | 2837 | |
2838 | // V0: Cosine of the pointing angle | |
2839 | fh1QAV0Cos[iIndexHisto]->Fill(vZero->CosPointingAngle(vtx)); | |
87e23d3e | 2840 | // fh2CutCos[iIndexHisto]->Fill(dMassK0s,vZero->CosPointingAngle(vtx)); |
7729cc34 | 2841 | |
2842 | // V0: Fiducial volume | |
2843 | Double_t xyz[3]; | |
2844 | vZero->GetSecondaryVtx(xyz); | |
7495a67b | 2845 | Double_t r2 = xyz[0] * xyz[0] + xyz[1] * xyz[1]; |
7729cc34 | 2846 | fh1QAV0R[iIndexHisto]->Fill(TMath::Sqrt(r2)); |
2847 | ||
87e23d3e | 2848 | Double_t dAlpha = vZero->AlphaV0(); |
2849 | Double_t dPtArm = vZero->PtArmV0(); | |
7729cc34 | 2850 | |
7495a67b | 2851 | if(IsCandK0s) |
2852 | { | |
2853 | if(IsInPeakK0s) | |
7729cc34 | 2854 | { |
7729cc34 | 2855 | // fh2QAV0EtaPtK0sPeak[iIndexHisto]->Fill(trackNeg->Eta(),vZero->Pt()); |
2856 | // fh2QAV0EtaPtK0sPeak[iIndexHisto]->Fill(trackPos->Eta(),vZero->Pt()); | |
7495a67b | 2857 | fh2QAV0EtaPtK0sPeak[iIndexHisto]->Fill(vZero->Eta(), vZero->Pt()); |
2858 | fh2QAV0PtPtK0sPeak[iIndexHisto]->Fill(trackNeg->Pt(), trackPos->Pt()); | |
2859 | fh2ArmPodK0s[iIndexHisto]->Fill(dAlpha, dPtArm); | |
7729cc34 | 2860 | } |
7495a67b | 2861 | fh2QAV0EtaEtaK0s[iIndexHisto]->Fill(trackNeg->Eta(), trackPos->Eta()); |
2862 | fh2QAV0PhiPhiK0s[iIndexHisto]->Fill(trackNeg->Phi(), trackPos->Phi()); | |
2863 | fh1QAV0RapK0s[iIndexHisto]->Fill(vZero->RapK0Short()); | |
2864 | } | |
2865 | ||
2866 | if(IsCandLambda) | |
2867 | { | |
2868 | if(IsInPeakLambda) | |
7729cc34 | 2869 | { |
7729cc34 | 2870 | // fh2QAV0EtaPtLambdaPeak[iIndexHisto]->Fill(trackNeg->Eta(),vZero->Pt()); |
2871 | // fh2QAV0EtaPtLambdaPeak[iIndexHisto]->Fill(trackPos->Eta(),vZero->Pt()); | |
7495a67b | 2872 | fh2QAV0EtaPtLambdaPeak[iIndexHisto]->Fill(vZero->Eta(), vZero->Pt()); |
2873 | fh2QAV0PtPtLambdaPeak[iIndexHisto]->Fill(trackNeg->Pt(), trackPos->Pt()); | |
2874 | fh2ArmPodLambda[iIndexHisto]->Fill(dAlpha, dPtArm); | |
7729cc34 | 2875 | } |
7495a67b | 2876 | fh2QAV0EtaEtaLambda[iIndexHisto]->Fill(trackNeg->Eta(), trackPos->Eta()); |
2877 | fh2QAV0PhiPhiLambda[iIndexHisto]->Fill(trackNeg->Phi(), trackPos->Phi()); | |
2878 | fh1QAV0RapLambda[iIndexHisto]->Fill(vZero->RapLambda()); | |
2879 | } | |
7729cc34 | 2880 | |
7495a67b | 2881 | fh2ArmPod[iIndexHisto]->Fill(dAlpha, dPtArm); |
7729cc34 | 2882 | |
2883 | } | |
2884 | ||
2885 | void AliAnalysisTaskV0sInJets::FillCandidates(Double_t mK, Double_t mL, Double_t mAL, Bool_t isK, Bool_t isL, Bool_t isAL, Int_t iCut/*cut index*/, Int_t iCent/*cent index*/) | |
2886 | { | |
7495a67b | 2887 | if(isK) |
2888 | { | |
2889 | fh1V0CounterCentK0s[iCent]->Fill(iCut); | |
2890 | fh1V0InvMassK0sAll[iCut]->Fill(mK); | |
2891 | } | |
2892 | if(isL) | |
2893 | { | |
2894 | fh1V0CounterCentLambda[iCent]->Fill(iCut); | |
2895 | fh1V0InvMassLambdaAll[iCut]->Fill(mL); | |
2896 | } | |
2897 | if(isAL) | |
2898 | { | |
2899 | fh1V0CounterCentALambda[iCent]->Fill(iCut); | |
2900 | fh1V0InvMassALambdaAll[iCut]->Fill(mAL); | |
2901 | } | |
7729cc34 | 2902 | } |
2903 | ||
2904 | Bool_t AliAnalysisTaskV0sInJets::IsParticleInCone(const AliVParticle* part1, const AliVParticle* part2, Double_t dRMax) const | |
2905 | { | |
2906 | // decides whether a particle is inside a jet cone | |
7495a67b | 2907 | if(!part1 || !part2) |
7729cc34 | 2908 | return kFALSE; |
2909 | ||
7495a67b | 2910 | TVector3 vecMom2(part2->Px(), part2->Py(), part2->Pz()); |
2911 | TVector3 vecMom1(part1->Px(), part1->Py(), part1->Pz()); | |
7729cc34 | 2912 | Double_t dR = vecMom2.DeltaR(vecMom1); // = sqrt(dEta*dEta+dPhi*dPhi) |
7495a67b | 2913 | if(dR < dRMax) // momentum vectors of part1 and part2 are closer than dRMax |
7729cc34 | 2914 | return kTRUE; |
2915 | return kFALSE; | |
2916 | } | |
2917 | ||
2918 | Bool_t AliAnalysisTaskV0sInJets::OverlapWithJets(const TClonesArray* array, const AliVParticle* part, Double_t dDistance) const | |
2919 | { | |
2920 | // decides whether a cone overlaps with other jets | |
7495a67b | 2921 | if(!part) |
2922 | { | |
2923 | if(fDebug > 0) printf("AliAnalysisTaskV0sInJets::OverlapWithJets: Error: No part\n"); | |
2924 | return kFALSE; | |
2925 | } | |
2926 | if(!array) | |
2927 | { | |
2928 | if(fDebug > 0) printf("AliAnalysisTaskV0sInJets::OverlapWithJets: Error: No array\n"); | |
2929 | return kFALSE; | |
2930 | } | |
7729cc34 | 2931 | Int_t iNJets = array->GetEntriesFast(); |
7495a67b | 2932 | if(iNJets <= 0) |
2933 | { | |
2934 | if(fDebug > 2) printf("AliAnalysisTaskV0sInJets::OverlapWithJets: Warning: No jets\n"); | |
2935 | return kFALSE; | |
2936 | } | |
7729cc34 | 2937 | AliVParticle* jet = 0; |
7495a67b | 2938 | for(Int_t iJet = 0; iJet < iNJets; iJet++) |
2939 | { | |
2940 | jet = (AliVParticle*)array->At(iJet); | |
2941 | if(!jet) | |
7729cc34 | 2942 | { |
7495a67b | 2943 | if(fDebug > 0) printf("AliAnalysisTaskV0sInJets::OverlapWithJets: Error: Failed to load jet %d/%d\n", iJet, iNJets); |
2944 | continue; | |
7729cc34 | 2945 | } |
7495a67b | 2946 | if(IsParticleInCone(part, jet, dDistance)) |
2947 | return kTRUE; | |
2948 | } | |
7729cc34 | 2949 | return kFALSE; |
2950 | } | |
2951 | ||
9706bde3 | 2952 | AliAODJet* AliAnalysisTaskV0sInJets::GetRandomCone(const TClonesArray* array, Double_t dEtaConeMax, Double_t dDistance) const |
7729cc34 | 2953 | { |
2954 | // generate a random cone which does not overlap with selected jets | |
2955 | // printf("Generating random cone...\n"); | |
2956 | TLorentzVector vecCone; | |
2957 | AliAODJet* part = 0; | |
2958 | Double_t dEta, dPhi; | |
2959 | Int_t iNTrialsMax = 10; | |
2960 | Bool_t bStatus = kFALSE; | |
7495a67b | 2961 | for(Int_t iTry = 0; iTry < iNTrialsMax; iTry++) |
2962 | { | |
7729cc34 | 2963 | // printf("Try %d\n",iTry); |
7495a67b | 2964 | dEta = dEtaConeMax * (2 * fRandom->Rndm() - 1.); // random eta in [-dEtaConeMax,+dEtaConeMax] |
2965 | dPhi = TMath::TwoPi() * fRandom->Rndm(); // random phi in [0,2*Pi] | |
2966 | vecCone.SetPtEtaPhiM(1., dEta, dPhi, 0.); | |
2967 | part = new AliAODJet(vecCone); | |
2968 | if(!OverlapWithJets(array, part, dDistance)) | |
2969 | { | |
2970 | bStatus = kTRUE; | |
7729cc34 | 2971 | // printf("Success\n"); |
7495a67b | 2972 | break; |
7729cc34 | 2973 | } |
7495a67b | 2974 | else |
2975 | delete part; | |
2976 | } | |
2977 | if(!bStatus) | |
7729cc34 | 2978 | part = 0; |
2979 | return part; | |
2980 | } | |
2981 | ||
9706bde3 | 2982 | AliAODJet* AliAnalysisTaskV0sInJets::GetMedianCluster(const TClonesArray* array, Double_t dEtaConeMax) const |
2983 | { | |
f8afd72f | 2984 | // sort kt clusters by pT/area and return the middle one, based on code in AliAnalysisTaskJetChem |
7495a67b | 2985 | if(!array) |
2986 | { | |
2987 | if(fDebug > 0) printf("AliAnalysisTaskV0sInJets::GetMedianCluster: Error: No array\n"); | |
2988 | return NULL; | |
2989 | } | |
2990 | Int_t iNClTot = array->GetEntriesFast(); // number of all clusters in the array | |
2991 | Int_t iNCl = 0; // number of accepted clusters | |
9706bde3 | 2992 | |
2993 | // get list of densities | |
7495a67b | 2994 | std::vector<std::vector<Double_t> > vecListClusters; // vector that contains pairs [ index, density ] |
2995 | // printf("AliAnalysisTaskV0sInJets::GetMedianCluster: Loop over %d clusters.\n", iNClTot); | |
2996 | for(Int_t ij = 0; ij < iNClTot; ij++) | |
2997 | { | |
2998 | AliAODJet* clusterBg = (AliAODJet*)(array->At(ij)); | |
2999 | if(!clusterBg) | |
9706bde3 | 3000 | { |
7495a67b | 3001 | // printf("AliAnalysisTaskV0sInJets::GetMedianCluster: cluster %d/%d not ok\n", ij, iNClTot); |
3002 | return NULL; | |
9706bde3 | 3003 | } |
7495a67b | 3004 | if(TMath::Abs(clusterBg->Eta()) > 0.9 - fdRadiusJetBg) |
3005 | continue; | |
3006 | // fh2EtaPhiMedCone[0]->Fill(clusterBg->Eta(), clusterBg->Phi()); | |
3007 | // printf("AliAnalysisTaskV0sInJets::GetMedianCluster: Cluster %d/%d used as accepted cluster %d.\n", ij, iNClTot, int(vecListClusters.size())); | |
3008 | Double_t dPtBg = clusterBg->Pt(); | |
3009 | Double_t dAreaBg = clusterBg->EffectiveAreaCharged(); | |
3010 | Double_t dDensityBg = 0; | |
3011 | if(dAreaBg > 0) | |
3012 | dDensityBg = dPtBg / dAreaBg; | |
3013 | std::vector<Double_t> vecCluster; | |
3014 | vecCluster.push_back(ij); | |
3015 | vecCluster.push_back(dDensityBg); | |
3016 | vecListClusters.push_back(vecCluster); | |
3017 | } | |
3018 | iNCl = vecListClusters.size(); | |
3019 | if(iNCl < 3) // need at least 3 clusters (skipping 2 highest) | |
3020 | { | |
3021 | // if(fDebug > 2) printf("AliAnalysisTaskV0sInJets::GetMedianCluster: Warning: Too little clusters\n"); | |
3022 | return NULL; | |
3023 | } | |
3024 | ||
3025 | // printf("AliAnalysisTaskV0sInJets::GetMedianCluster: Original lists:\n"); | |
3026 | // for(Int_t i = 0; i < iNCl; i++) | |
3027 | // printf("%g %g\n", (vecListClusters[i])[0], (vecListClusters[i])[1]); | |
3028 | ||
3029 | // sort list of indeces by density in descending order | |
3030 | std::sort(vecListClusters.begin(), vecListClusters.end(), CompareClusters); | |
3031 | ||
3032 | // printf("AliAnalysisTaskV0sInJets::GetMedianCluster: Sorted lists:\n"); | |
3033 | // for(Int_t i = 0; i < iNCl; i++) | |
3034 | // printf("%g %g\n", (vecListClusters[i])[0], (vecListClusters[i])[1]); | |
9706bde3 | 3035 | |
3036 | // get median cluster with median density | |
3037 | AliAODJet* clusterMed = 0; | |
7495a67b | 3038 | Int_t iIndex = 0; // index of the median cluster in the sorted list |
3039 | Int_t iIndexMed = 0; // index of the median cluster in the original array | |
3040 | if(TMath::Odd(iNCl)) // odd number of clusters | |
3041 | { | |
3042 | iIndex = (Int_t)(0.5 * (iNCl + 1)); // = (n - skip + 1)/2 + 1, skip = 2 | |
3043 | // printf("AliAnalysisTaskV0sInJets::GetMedianCluster: Odd, median index = %d/%d\n", iIndex, iNCl); | |
3044 | } | |
9706bde3 | 3045 | else // even number: picking randomly one of the two closest to median |
7495a67b | 3046 | { |
3047 | Int_t iIndex1 = (Int_t)(0.5 * iNCl); // = (n - skip)/2 + 1, skip = 2 | |
3048 | Int_t iIndex2 = (Int_t)(0.5 * iNCl + 1); // = (n - skip)/2 + 1 + 1, skip = 2 | |
3049 | iIndex = ((fRandom->Rndm() > 0.5) ? iIndex1 : iIndex2); | |
3050 | // printf("AliAnalysisTaskV0sInJets::GetMedianCluster: Even, median index = %d or %d -> %d/%d\n", iIndex1, iIndex2, iIndex, iNCl); | |
3051 | } | |
90db0a5c | 3052 | iIndexMed = Int_t((vecListClusters[iIndex])[0]); |
7495a67b | 3053 | |
3054 | // printf("AliAnalysisTaskV0sInJets::GetMedianCluster: getting median cluster %d/%d ok, rho = %g\n", iIndexMed, iNClTot, (vecListClusters[iIndex])[1]); | |
9706bde3 | 3055 | clusterMed = (AliAODJet*)(array->At(iIndexMed)); |
3056 | ||
7495a67b | 3057 | if(TMath::Abs(clusterMed->Eta()) > dEtaConeMax) |
9706bde3 | 3058 | return NULL; |
7495a67b | 3059 | |
9706bde3 | 3060 | return clusterMed; |
3061 | } | |
3062 | ||
7729cc34 | 3063 | Double_t AliAnalysisTaskV0sInJets::AreaCircSegment(Double_t dRadius, Double_t dDistance) const |
3064 | { | |
3065 | // calculate area of a circular segment defined by the circle radius and the (oriented) distance between the secant line and the circle centre | |
3066 | Double_t dEpsilon = 1e-2; | |
3067 | Double_t dR = dRadius; | |
3068 | Double_t dD = dDistance; | |
7495a67b | 3069 | if(TMath::Abs(dR) < dEpsilon) |
3070 | { | |
3071 | if(fDebug > 0) printf("AliAnalysisTaskV0sInJets::AreaCircSegment: Error: Too small radius: %f < %f\n", dR, dEpsilon); | |
3072 | return 0.; | |
3073 | } | |
3074 | if(dD >= dR) | |
7729cc34 | 3075 | return 0.; |
7495a67b | 3076 | if(dD <= -dR) |
3077 | return TMath::Pi() * dR * dR; | |
3078 | return dR * dR * TMath::ACos(dD / dR) - dD * TMath::Sqrt(dR * dR - dD * dD); | |
7729cc34 | 3079 | } |
3080 | ||
87e23d3e | 3081 | Bool_t AliAnalysisTaskV0sInJets::IsSelectedForJets(AliAODEvent* fAOD, Double_t dVtxZCut, Double_t dVtxR2Cut, Double_t dCentCutLo, Double_t dCentCutUp, Bool_t bCutDeltaZ, Double_t dDeltaZMax) |
7729cc34 | 3082 | { |
3083 | // event selection | |
3084 | AliAODVertex* vertex = fAOD->GetPrimaryVertex(); | |
7495a67b | 3085 | if(!vertex) |
7729cc34 | 3086 | return kFALSE; |
7495a67b | 3087 | Int_t iNContribMin = 3; |
3088 | if(!fbIsPbPb) | |
3089 | iNContribMin = 2; | |
3090 | if(vertex->GetNContributors() < iNContribMin) | |
7729cc34 | 3091 | return kFALSE; |
3092 | TString vtxTitle(vertex->GetTitle()); | |
7495a67b | 3093 | if(vtxTitle.Contains("TPCVertex")) |
7729cc34 | 3094 | return kFALSE; |
3095 | Double_t zVertex = vertex->GetZ(); | |
7495a67b | 3096 | if(TMath::Abs(zVertex) > dVtxZCut) |
7729cc34 | 3097 | return kFALSE; |
7495a67b | 3098 | if(bCutDeltaZ) |
3099 | { | |
3100 | AliAODVertex* vertexSPD = fAOD->GetPrimaryVertexSPD(); | |
3101 | if(!vertexSPD) | |
7729cc34 | 3102 | { |
7729cc34 | 3103 | // printf("IsSelectedForJets: Error: No SPD vertex\n"); |
7495a67b | 3104 | return kFALSE; |
3105 | } | |
3106 | Double_t zVertexSPD = vertexSPD->GetZ(); | |
3107 | if(TMath::Abs(zVertex - zVertexSPD) > dDeltaZMax) | |
3108 | { | |
7729cc34 | 3109 | // printf("IsSelectedForJets: Rejecting event due to delta z = %f - %f = %f\n",zVertex,zVertexSPD,zVertex-zVertexSPD); |
7495a67b | 3110 | return kFALSE; |
7729cc34 | 3111 | } |
7495a67b | 3112 | // printf("IsSelectedForJets: Event OK: %f - %f = %f\n",zVertex,zVertexSPD,zVertex-zVertexSPD); |
3113 | } | |
7729cc34 | 3114 | Double_t xVertex = vertex->GetX(); |
3115 | Double_t yVertex = vertex->GetY(); | |
7495a67b | 3116 | Double_t radiusSq = yVertex * yVertex + xVertex * xVertex; |
3117 | if(radiusSq > dVtxR2Cut) | |
7729cc34 | 3118 | return kFALSE; |
3119 | Double_t centrality; | |
3120 | // centrality = fAOD->GetHeader()->GetCentrality(); | |
0a918d8d | 3121 | centrality = ((AliVAODHeader*)fAOD->GetHeader())->GetCentralityP()->GetCentralityPercentile("V0M"); |
7495a67b | 3122 | if(fbIsPbPb) |
3123 | { | |
3124 | if(centrality < 0) | |
3125 | return kFALSE; | |
3126 | if((dCentCutUp < 0) || (dCentCutLo < 0) || (dCentCutUp > 100) || (dCentCutLo > 100) || (dCentCutLo > dCentCutUp)) | |
3127 | return kFALSE; | |
3128 | if((centrality < dCentCutLo) || (centrality > dCentCutUp)) | |
3129 | return kFALSE; | |
3130 | } | |
3131 | else | |
3132 | { | |
3133 | if(centrality != -1) | |
3134 | return kFALSE; | |
3135 | } | |
7729cc34 | 3136 | return kTRUE; |
3137 | } | |
3138 | ||
3139 | Int_t AliAnalysisTaskV0sInJets::GetCentralityBinIndex(Double_t centrality) | |
3140 | { | |
3141 | // returns index of the centrality bin corresponding to the provided value of centrality | |
7495a67b | 3142 | if(centrality < 0 || centrality > fgkiCentBinRanges[fgkiNBinsCent - 1]) |
7729cc34 | 3143 | return -1; |
7495a67b | 3144 | for(Int_t i = 0; i < fgkiNBinsCent; i++) |
3145 | { | |
3146 | if(centrality <= fgkiCentBinRanges[i]) | |
3147 | return i; | |
3148 | } | |
7729cc34 | 3149 | return -1; |
3150 | } | |
3151 | ||
3152 | Int_t AliAnalysisTaskV0sInJets::GetCentralityBinEdge(Int_t index) | |
3153 | { | |
3154 | // returns the upper edge of the centrality bin corresponding to the provided value of index | |
7495a67b | 3155 | if(index < 0 || index >= fgkiNBinsCent) |
7729cc34 | 3156 | return -1; |
3157 | return fgkiCentBinRanges[index]; | |
3158 | } | |
3159 | ||
3160 | TString AliAnalysisTaskV0sInJets::GetCentBinLabel(Int_t index) | |
3161 | { | |
3162 | // get string with centrality range for given bin | |
7495a67b | 3163 | TString lowerEdge = ((index == 0) ? "0" : Form("%d", GetCentralityBinEdge(index - 1))); |
3164 | TString upperEdge = Form("%d", GetCentralityBinEdge(index)); | |
3165 | return Form("%s-%s %%", lowerEdge.Data(), upperEdge.Data()); | |
7729cc34 | 3166 | } |
3167 | ||
3168 | Double_t AliAnalysisTaskV0sInJets::MassPeakSigmaOld(Double_t pt, Int_t particle) | |
3169 | { | |
3170 | // estimation of the sigma of the invariant-mass peak as a function of pT and particle type | |
7495a67b | 3171 | switch(particle) |
3172 | { | |
7729cc34 | 3173 | case 0: // K0S |
7495a67b | 3174 | return 0.0044 + 0.0004 * (pt - 1.); |
7729cc34 | 3175 | break; |
3176 | case 1: // Lambda | |
7495a67b | 3177 | return 0.0023 + 0.00034 * (pt - 1.); |
7729cc34 | 3178 | break; |
3179 | default: | |
3180 | return 0; | |
3181 | break; | |
7495a67b | 3182 | } |
3183 | } | |
3184 | ||
3185 | bool AliAnalysisTaskV0sInJets::CompareClusters(const std::vector<Double_t> cluster1, const std::vector<Double_t> cluster2) | |
3186 | { | |
3187 | return (cluster1[1] > cluster2[1]); | |
7729cc34 | 3188 | } |