]>
Commit | Line | Data |
---|---|---|
9bcef488 | 1 | /* Leading Charged Track+V0 Correlation.(Works for Real,Monte Carlo Data) |
2 | * Sandun Jayarathna | |
3 | * University of Houston | |
4 | * sandun.pahula.hewage@cern.ch | |
5 | *****************************************************************************************/ | |
ff0805a7 | 6 | #include <TROOT.h> |
7 | #include <TList.h> | |
8 | #include <TChain.h> | |
9 | #include <TFile.h> | |
10 | #include <TMath.h> | |
5b607771 | 11 | #include <TH1.h> |
33971f6b | 12 | #include <TH2.h> |
13 | #include <TH3.h> | |
ff0805a7 | 14 | #include <TTree.h> |
15 | #include <TRandom.h> | |
da6ac661 | 16 | #include <THnSparse.h> |
17 | #include <TPDGCode.h> | |
18 | #include <TDatabasePDG.h> | |
ff0805a7 | 19 | |
20 | #include "AliLog.h" | |
21 | #include "AliAnalysisManager.h" | |
22 | #include "AliAODTrack.h" | |
23 | #include "AliAODEvent.h" | |
24 | #include "AliAODv0.h" | |
ff0805a7 | 25 | #include "AliAODVertex.h" |
26 | #include "AliAODPid.h" | |
27 | #include "AliPIDResponse.h" | |
28 | #include "AliEventPoolManager.h" | |
29 | #include "AliCentrality.h" | |
ff0805a7 | 30 | #include "AliAODHandler.h" |
31 | #include "AliAODInputHandler.h" | |
32 | #include "AliAODMCParticle.h" | |
33 | #include "AliInputEventHandler.h" | |
ff0805a7 | 34 | #include "AliVParticle.h" |
ff0805a7 | 35 | #include "AliMultiplicity.h" |
ff0805a7 | 36 | #include "AliAODMCHeader.h" |
37 | #include "AliPID.h" | |
ff0805a7 | 38 | #include "AliExternalTrackParam.h" |
da6ac661 | 39 | #include "AliAnalyseLeadingTrackUE.h" |
ff0805a7 | 40 | |
41 | #include "AliLeadingV0Correlation.h" | |
42 | ||
9dbaebd5 | 43 | #define CorrBinsX 240 |
44 | #define CorrBinsY 260 | |
da6ac661 | 45 | |
2fdc3a7b | 46 | |
da6ac661 | 47 | Double_t PI =TMath::Pi(); |
ff0805a7 | 48 | |
49 | ClassImp(AliLeadingV0Correlation) | |
da6ac661 | 50 | ClassImp(V0Correlationparticle) |
ff0805a7 | 51 | |
52 | //--------------------------------------------------------------------------------------- | |
53 | AliLeadingV0Correlation::AliLeadingV0Correlation() | |
54 | : AliAnalysisTaskSE(), | |
5b607771 | 55 | fAODEvent (0x0), |
56 | fPoolMgr (0x0), | |
57 | fPIDResponse (0x0), | |
58 | fAnalyseUE (0x0), | |
59 | fPoolMaxNEvents (0), | |
60 | fPoolMinNTracks (0), | |
61 | fMinEventsToMix (0), | |
62 | fNzVtxBins (0), | |
63 | fNCentBins (0), | |
64 | fcollidingSys (""), | |
65 | fpvzcut (0), | |
66 | fTrackEtaCut (0.9), | |
67 | fFilterBit (128), | |
68 | fAnalysisMC (0), | |
69 | fCase (0), | |
70 | fRemoveAutoCorr (0), | |
71 | fRapidityCut (0), | |
72 | fV0radius (0), | |
73 | fV0PostoPVz (0), | |
74 | fV0NegtoPVz (0), | |
75 | fDCAV0Daughters (0), | |
76 | fCPAK0 (0), | |
77 | fCPALam (0), | |
78 | fRejectLamK0 (0), | |
79 | fRejectK0Lam (0), | |
80 | fSigmaPID (0), | |
81 | fCutCTK0 (0), | |
82 | fCutCTLa (0), | |
83 | fMassCutK0 (0), | |
84 | fMassCutLa (0), | |
85 | fTriglow (0), | |
86 | fTrighigh (0), | |
a8a50f30 | 87 | fTPCClusters (0), |
88 | fTPCfindratio (0), | |
5b607771 | 89 | fUseChargeHadrons (kTRUE), |
90 | fPtMin (0.15), | |
91 | fOutputList (0), | |
92 | fHist_Mult_B4_Trg_Sel (0), | |
93 | fHist_Mult_Af_Trg_Sel (0), | |
94 | fHist_Mult_PVz_Cut (0), | |
95 | fHist_Mult_SPD_PVz (0), | |
96 | fHist_Mult_SPD_PVz_Pileup (0), | |
97 | fHistPVx (0), | |
98 | fHistPVy (0), | |
99 | fHistPVz (0), | |
100 | fHistPVxAnalysis (0), | |
101 | fHistPVyAnalysis (0), | |
102 | fHistPVzAnalysis (0), | |
103 | fHistEventViceGen (0), | |
104 | fHistEventViceReconst (0), | |
105 | fHistMCGenK0 (0), | |
106 | fHistMCGenLAM (0), | |
107 | fHistMCGenALAM (0), | |
9dbaebd5 | 108 | fHistMCGenLAMXIPLS (0), |
109 | fHistMCGenLAMXI (0), | |
5b607771 | 110 | fHistReconstK0 (0), |
111 | fHistReconstLA (0), | |
112 | fHistReconstALA (0), | |
113 | fHistMCAssoK0 (0), | |
114 | fHistMCAssoLA (0), | |
115 | fHistMCAssoALA (0), | |
9dbaebd5 | 116 | fHistMCAssoLAXI (0), |
117 | fHistMCAssoALAXiPlus (0), | |
5b607771 | 118 | fHistReconstSib (0), |
119 | fHistReconstMix (0), | |
33971f6b | 120 | fHistReconstSibGEN (0), |
121 | fHistReconstMixGEN (0), | |
122 | fHistReconstSibASO (0), | |
123 | fHistReconstMixASO (0), | |
a8a50f30 | 124 | fHistReconstSibFEED (0), |
125 | fHistReconstMixFEED (0), | |
5b607771 | 126 | fHistTriggerSib (0), |
33971f6b | 127 | fHistTriggerMix (0), |
128 | fHistTriggerSibGEN (0), | |
129 | fHistTriggerMixGEN (0), | |
130 | fHistTriggerSibASO (0), | |
a8a50f30 | 131 | fHistTriggerMixASO (0) |
5b607771 | 132 | { |
9bcef488 | 133 | |
f018e7c8 | 134 | for(Int_t iBin = 0; iBin < 100; iBin++){ |
135 | fZvtxBins[iBin] = 0.; | |
136 | fCentBins[iBin] = 0.; | |
137 | } | |
ff0805a7 | 138 | } |
139 | //--------------------------------------------------------------------------------------- | |
140 | AliLeadingV0Correlation::AliLeadingV0Correlation(const char *name) | |
141 | : AliAnalysisTaskSE(name), | |
5b607771 | 142 | fAODEvent (0x0), |
143 | fPoolMgr (0x0), | |
144 | fPIDResponse (0x0), | |
145 | fAnalyseUE (0x0), | |
146 | fPoolMaxNEvents (0), | |
147 | fPoolMinNTracks (0), | |
148 | fMinEventsToMix (0), | |
149 | fNzVtxBins (0), | |
150 | fNCentBins (0), | |
151 | fcollidingSys (""), | |
152 | fpvzcut (0), | |
153 | fTrackEtaCut (0.9), | |
154 | fFilterBit (128), | |
155 | fAnalysisMC (0), | |
156 | fCase (0), | |
157 | fRemoveAutoCorr (0), | |
158 | fRapidityCut (0), | |
159 | fV0radius (0), | |
160 | fV0PostoPVz (0), | |
161 | fV0NegtoPVz (0), | |
162 | fDCAV0Daughters (0), | |
163 | fCPAK0 (0), | |
164 | fCPALam (0), | |
165 | fRejectLamK0 (0), | |
166 | fRejectK0Lam (0), | |
167 | fSigmaPID (0), | |
168 | fCutCTK0 (0), | |
169 | fCutCTLa (0), | |
170 | fMassCutK0 (0), | |
171 | fMassCutLa (0), | |
172 | fTriglow (0), | |
173 | fTrighigh (0), | |
a8a50f30 | 174 | fTPCClusters (0), |
175 | fTPCfindratio (0), | |
5b607771 | 176 | fUseChargeHadrons (kTRUE), |
177 | fPtMin (0.15), | |
178 | fOutputList (0), | |
179 | fHist_Mult_B4_Trg_Sel (0), | |
180 | fHist_Mult_Af_Trg_Sel (0), | |
181 | fHist_Mult_PVz_Cut (0), | |
182 | fHist_Mult_SPD_PVz (0), | |
183 | fHist_Mult_SPD_PVz_Pileup (0), | |
184 | fHistPVx (0), | |
185 | fHistPVy (0), | |
186 | fHistPVz (0), | |
187 | fHistPVxAnalysis (0), | |
188 | fHistPVyAnalysis (0), | |
189 | fHistPVzAnalysis (0), | |
190 | fHistEventViceGen (0), | |
191 | fHistEventViceReconst (0), | |
192 | fHistMCGenK0 (0), | |
193 | fHistMCGenLAM (0), | |
194 | fHistMCGenALAM (0), | |
9dbaebd5 | 195 | fHistMCGenLAMXIPLS (0), |
196 | fHistMCGenLAMXI (0), | |
5b607771 | 197 | fHistReconstK0 (0), |
198 | fHistReconstLA (0), | |
199 | fHistReconstALA (0), | |
200 | fHistMCAssoK0 (0), | |
201 | fHistMCAssoLA (0), | |
202 | fHistMCAssoALA (0), | |
9dbaebd5 | 203 | fHistMCAssoLAXI (0), |
204 | fHistMCAssoALAXiPlus (0), | |
5b607771 | 205 | fHistReconstSib (0), |
206 | fHistReconstMix (0), | |
33971f6b | 207 | fHistReconstSibGEN (0), |
208 | fHistReconstMixGEN (0), | |
209 | fHistReconstSibASO (0), | |
210 | fHistReconstMixASO (0), | |
a8a50f30 | 211 | fHistReconstSibFEED (0), |
212 | fHistReconstMixFEED (0), | |
5b607771 | 213 | fHistTriggerSib (0), |
33971f6b | 214 | fHistTriggerMix (0), |
215 | fHistTriggerSibGEN (0), | |
216 | fHistTriggerMixGEN (0), | |
217 | fHistTriggerSibASO (0), | |
218 | fHistTriggerMixASO (0) | |
f018e7c8 | 219 | |
a8a50f30 | 220 | |
da6ac661 | 221 | { |
f018e7c8 | 222 | for(Int_t iBin = 0; iBin < 100; iBin++){ |
223 | fZvtxBins[iBin] = 0.; | |
224 | fCentBins[iBin] = 0.; | |
225 | } | |
f018e7c8 | 226 | DefineOutput(1, TList::Class()); |
ff0805a7 | 227 | } |
228 | ||
229 | //--------------------------------------------------------------------------------------- | |
230 | AliLeadingV0Correlation::~AliLeadingV0Correlation() | |
231 | { | |
ff0805a7 | 232 | if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) { |
233 | delete fOutputList; | |
234 | } | |
235 | } | |
236 | //--------------------------------------------------------------------------------------- | |
237 | void AliLeadingV0Correlation::UserCreateOutputObjects() | |
238 | { | |
da6ac661 | 239 | fAnalyseUE =new AliAnalyseLeadingTrackUE(); |
5b607771 | 240 | if(!fAnalysisMC) |
241 | { | |
da6ac661 | 242 | fAnalyseUE->SetParticleSelectionCriteria(fFilterBit,fUseChargeHadrons,fTrackEtaCut,fPtMin); |
243 | fAnalyseUE->DefineESDCuts(fFilterBit); | |
5b607771 | 244 | } |
da6ac661 | 245 | |
9bcef488 | 246 | fOutputList = new TList(); |
247 | fOutputList->SetOwner(); | |
ff0805a7 | 248 | |
a8a50f30 | 249 | fHist_Mult_B4_Trg_Sel = new TH2F("fHist_Mult_B4_Trg_Sel","Tracks per event;Nbr of Tracks;Events", 1000, 0, 10000, 1000, 0, 10000); |
5b607771 | 250 | fOutputList->Add(fHist_Mult_B4_Trg_Sel); |
251 | ||
a8a50f30 | 252 | fHist_Mult_Af_Trg_Sel = new TH2F("fHist_Mult_Af_Trg_Sel","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000, 1000, 0, 10000); |
5b607771 | 253 | fOutputList->Add(fHist_Mult_Af_Trg_Sel); |
254 | ||
a8a50f30 | 255 | fHist_Mult_PVz_Cut = new TH2F("fHist_Mult_PVz_Cut","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000, 1000, 0, 10000); |
5b607771 | 256 | fOutputList->Add(fHist_Mult_PVz_Cut); |
257 | ||
a8a50f30 | 258 | fHist_Mult_SPD_PVz = new TH2F("fHist_Mult_SPD_PVz","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000, 1000, 0, 10000); |
5b607771 | 259 | fOutputList->Add(fHist_Mult_SPD_PVz); |
260 | ||
a8a50f30 | 261 | fHist_Mult_SPD_PVz_Pileup = new TH2F("fHist_Mult_SPD_PVz_Pileup","Tracks per event;Nbr of Tracks;Events",1000, 0, 10000, 1000, 0, 10000); |
5b607771 | 262 | fOutputList->Add(fHist_Mult_SPD_PVz_Pileup); |
263 | ||
264 | fHistPVx = new TH1F("fHistPVx","PV x position;Nbr of Evts;x", 200, -0.5, 0.5); | |
265 | fOutputList->Add(fHistPVx); | |
266 | ||
267 | fHistPVy = new TH1F("fHistPVy","PV y position;Nbr of Evts;y",200, -0.5, 0.5); | |
268 | fOutputList->Add(fHistPVy); | |
269 | ||
270 | fHistPVz = new TH1F("fHistPVz","PV z position;Nbr of Evts;z",400, -20, 20); | |
271 | fOutputList->Add(fHistPVz); | |
272 | ||
273 | fHistPVxAnalysis = new TH1F("fHistPVxAnalysis","PV x position;Nbr of Evts;x", 200, -0.5, 0.5); | |
274 | fOutputList->Add(fHistPVxAnalysis); | |
275 | ||
276 | fHistPVyAnalysis = new TH1F("fHistPVyAnalysis","PV y position;Nbr of Evts;y",200, -0.5, 0.5); | |
277 | fOutputList->Add(fHistPVyAnalysis); | |
278 | ||
279 | fHistPVzAnalysis = new TH1F("fHistPVzAnalysis","PV z position;Nbr of Evts;z",400, -20, 20); | |
280 | fOutputList->Add(fHistPVzAnalysis); | |
281 | ||
da6ac661 | 282 | //---------------------------------------------- Events histograms -----------------------------------------------------// |
ff0805a7 | 283 | |
a8a50f30 | 284 | fHistEventViceGen= new TH2F("fHistEventViceGen", "fHistEventViceGen", 200, -20, 20, 10,0,1000); |
da6ac661 | 285 | fOutputList->Add(fHistEventViceGen); |
ff0805a7 | 286 | |
a8a50f30 | 287 | fHistEventViceReconst= new TH2F("fHistEventViceReconst", "fHistEventViceReconst", 200, -20, 20, 10,0,1000); |
da6ac661 | 288 | fOutputList->Add(fHistEventViceReconst); |
ff0805a7 | 289 | |
9dbaebd5 | 290 | fHistMCGenLAM = new TH2F("fHistMCGenLAM" , "fHistMCGenLAM" ,140,1.06,1.2, 120, 0, fTriglow); |
da6ac661 | 291 | fOutputList->Add(fHistMCGenLAM); |
ff0805a7 | 292 | |
9dbaebd5 | 293 | fHistMCGenALAM = new TH2F("fHistMCGenALAM", "fHistMCGenALAM",140,1.06,1.2, 120, 0, fTriglow); |
da6ac661 | 294 | fOutputList->Add(fHistMCGenALAM); |
ff0805a7 | 295 | |
9dbaebd5 | 296 | fHistMCGenK0 = new TH2F("fHistMCGenK0" , "fHistMCGenK0" ,200,0.4,0.6, 120, 0, fTriglow); |
da6ac661 | 297 | fOutputList->Add(fHistMCGenK0); |
ff0805a7 | 298 | |
9dbaebd5 | 299 | fHistMCGenLAMXIPLS = new TH2F("fHistMCGenLAMXIPLS", "fHistMCGenLAMXIPLS",140,1.06,1.2, 120, 0, fTriglow); |
300 | fOutputList->Add(fHistMCGenLAMXIPLS); | |
301 | ||
302 | fHistMCGenLAMXI = new TH2F("fHistMCGenLAMXI" , "fHistMCGenLAMXI" ,140,1.06,1.2, 120, 0, fTriglow); | |
303 | fOutputList->Add(fHistMCGenLAMXI); | |
304 | ||
a8a50f30 | 305 | //New dimension for feed down corection |
306 | ||
307 | const Int_t ndimsK0 = 4; | |
9dbaebd5 | 308 | Int_t binsK0[ndimsK0] = {200, 120,500,1000}; |
309 | Double_t xminK0[ndimsK0] = {0.4, 0, 0,0.99}; | |
310 | Double_t xmaxK0[ndimsK0] = {0.6, fTriglow, 10, 1}; | |
a8a50f30 | 311 | |
312 | const Int_t ndimsLA = 4; | |
7624720d | 313 | Int_t binsLA[ndimsLA] = { 140, 120,500,1000}; |
9dbaebd5 | 314 | Double_t xminLA[ndimsLA] = {1.06, 0, 0,0.99}; |
315 | Double_t xmaxLA[ndimsLA] = { 1.2, fTriglow, 10, 1}; | |
a8a50f30 | 316 | |
317 | fHistReconstK0= new THnSparseD("fHistReconstK0" , "fHistReconstK0",ndimsK0,binsK0,xminK0,xmaxK0); | |
da6ac661 | 318 | fHistReconstK0->Sumw2(); |
319 | fOutputList->Add(fHistReconstK0); | |
ff0805a7 | 320 | |
a8a50f30 | 321 | fHistReconstLA= new THnSparseD("fHistReconstLA" , "fHistReconstLA",ndimsLA,binsLA,xminLA,xmaxLA); |
da6ac661 | 322 | fHistReconstLA->Sumw2(); |
323 | fOutputList->Add(fHistReconstLA); | |
ff0805a7 | 324 | |
a8a50f30 | 325 | fHistReconstALA= new THnSparseD("fHistReconstALA", "fHistReconstALA",ndimsLA,binsLA,xminLA,xmaxLA); |
da6ac661 | 326 | fHistReconstALA->Sumw2(); |
327 | fOutputList->Add(fHistReconstALA); | |
ff0805a7 | 328 | |
a8a50f30 | 329 | fHistMCAssoK0= new THnSparseD("fHistMCAssoK0" , "fHistMCAssoK0" ,ndimsK0,binsK0,xminK0,xmaxK0); |
da6ac661 | 330 | fHistMCAssoK0->Sumw2(); |
331 | fOutputList->Add(fHistMCAssoK0); | |
ff0805a7 | 332 | |
a8a50f30 | 333 | fHistMCAssoLA= new THnSparseD("fHistMCAssoLA" , "fHistMCAssoLA" ,ndimsLA,binsLA,xminLA,xmaxLA); |
da6ac661 | 334 | fHistMCAssoLA->Sumw2(); |
335 | fOutputList->Add(fHistMCAssoLA); | |
ff0805a7 | 336 | |
a8a50f30 | 337 | fHistMCAssoALA= new THnSparseD("fHistMCAssoALA" , "fHistMCAssoALA" , ndimsLA,binsLA,xminLA,xmaxLA); |
da6ac661 | 338 | fHistMCAssoALA->Sumw2(); |
339 | fOutputList->Add(fHistMCAssoALA); | |
ff0805a7 | 340 | |
9dbaebd5 | 341 | fHistMCAssoLAXI= new THnSparseD("fHistMCAssoLAXI" , "fHistMCAssoLAXI" , ndimsLA,binsLA,xminLA,xmaxLA); |
342 | fHistMCAssoLAXI->Sumw2(); | |
343 | fOutputList->Add(fHistMCAssoLAXI); | |
344 | ||
345 | fHistMCAssoALAXiPlus= new THnSparseD("fHistMCAssoALAXiPlus" , "fHistMCAssoALAXiPlus" , ndimsLA,binsLA,xminLA,xmaxLA); | |
346 | fHistMCAssoALAXiPlus->Sumw2(); | |
347 | fOutputList->Add(fHistMCAssoALAXiPlus); | |
348 | ||
da6ac661 | 349 | //--------------------------------------------Correlation Histos -----------------------------------------------------// |
ff0805a7 | 350 | |
da6ac661 | 351 | //0-pTK0,1-PhiK0,2-EtaK0,3-DPhiK0,4-DEtaK0,5-TYPE,6-CutSet |
33971f6b | 352 | const Int_t ndimsv0CORR = 8; |
7624720d | 353 | Int_t binsv0CORR[ndimsv0CORR] = {120, 200, 200,CorrBinsX, CorrBinsY,4,500,1000}; |
ff0805a7 | 354 | |
9dbaebd5 | 355 | Double_t xminv0CORR[ndimsv0CORR] = { 0, 0,-fTrackEtaCut, -PI/2,-2*fTrackEtaCut,0, 0,0.99}; |
ff0805a7 | 356 | |
9dbaebd5 | 357 | Double_t xmaxv0CORR[ndimsv0CORR] = { fTriglow,2*PI, fTrackEtaCut, 3*PI/2, 2*fTrackEtaCut,4, 10, 1}; |
ff0805a7 | 358 | |
da6ac661 | 359 | fHistReconstSib= new THnSparseD("fHistReconstSib", "fHistReconstSib", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR); |
360 | fHistReconstSib->Sumw2(); | |
361 | fOutputList->Add(fHistReconstSib); | |
ff0805a7 | 362 | |
da6ac661 | 363 | fHistReconstMix= new THnSparseD("fHistReconstMix", "fHistReconstMix", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR); |
364 | fHistReconstMix->Sumw2(); | |
365 | fOutputList->Add(fHistReconstMix); | |
ff0805a7 | 366 | |
33971f6b | 367 | fHistReconstSibGEN= new THnSparseD("fHistReconstSibGEN", "fHistReconstSibGEN", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR); |
368 | fHistReconstSibGEN->Sumw2(); | |
369 | fOutputList->Add(fHistReconstSibGEN); | |
370 | ||
371 | fHistReconstMixGEN= new THnSparseD("fHistReconstMixGEN", "fHistReconstMixGEN", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR); | |
372 | fHistReconstMixGEN->Sumw2(); | |
373 | fOutputList->Add(fHistReconstMixGEN); | |
ff0805a7 | 374 | |
33971f6b | 375 | fHistReconstSibASO= new THnSparseD("fHistReconstSibASO", "fHistReconstSibASO", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR); |
376 | fHistReconstSibASO->Sumw2(); | |
377 | fOutputList->Add(fHistReconstSibASO); | |
378 | ||
379 | fHistReconstMixASO= new THnSparseD("fHistReconstMixASO", "fHistReconstMixASO", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR); | |
380 | fHistReconstMixASO->Sumw2(); | |
381 | fOutputList->Add(fHistReconstMixASO); | |
382 | ||
a8a50f30 | 383 | fHistReconstSibFEED= new THnSparseD("fHistReconstSibFEED", "fHistReconstSibFEED", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR); |
384 | fHistReconstSibFEED->Sumw2(); | |
385 | fOutputList->Add(fHistReconstSibFEED); | |
386 | ||
387 | fHistReconstMixFEED= new THnSparseD("fHistReconstMixFEED", "fHistReconstMixFEED", ndimsv0CORR, binsv0CORR, xminv0CORR, xmaxv0CORR); | |
388 | fHistReconstMixFEED->Sumw2(); | |
389 | fOutputList->Add(fHistReconstMixFEED); | |
390 | ||
33971f6b | 391 | |
746a34ad | 392 | fHistTriggerSib= new TH3F("fHistTriggerSib", "fHistTriggerSib", 100, fTriglow, fTrighigh,200,0,2*PI,200,-fTrackEtaCut,fTrackEtaCut); |
da6ac661 | 393 | fHistTriggerSib->Sumw2(); |
394 | fOutputList->Add(fHistTriggerSib); | |
ff0805a7 | 395 | |
9dbaebd5 | 396 | fHistTriggerMix= new TH1F("fHistTriggerMix", "fHistTriggerMix", 100, fTriglow, fTrighigh); |
da6ac661 | 397 | fHistTriggerMix->Sumw2(); |
398 | fOutputList->Add(fHistTriggerMix); | |
ff0805a7 | 399 | |
746a34ad | 400 | fHistTriggerSibGEN= new TH3F("fHistTriggerSibGEN", "fHistTriggerSibGEN", 100, fTriglow, fTrighigh,200,0,2*PI,200,-fTrackEtaCut,fTrackEtaCut); |
33971f6b | 401 | fHistTriggerSibGEN->Sumw2(); |
402 | fOutputList->Add(fHistTriggerSibGEN); | |
403 | ||
9dbaebd5 | 404 | fHistTriggerMixGEN= new TH1F("fHistTriggerMixGEN", "fHistTriggerMixGEN", 100, fTriglow, fTrighigh); |
33971f6b | 405 | fHistTriggerMixGEN->Sumw2(); |
406 | fOutputList->Add(fHistTriggerMixGEN); | |
407 | ||
746a34ad | 408 | fHistTriggerSibASO= new TH3F("fHistTriggerSibASO", "fHistTriggerSibASO", 100, fTriglow, fTrighigh,200,0,2*PI,200,-fTrackEtaCut,fTrackEtaCut); |
33971f6b | 409 | fHistTriggerSibASO->Sumw2(); |
410 | fOutputList->Add(fHistTriggerSibASO); | |
411 | ||
9dbaebd5 | 412 | fHistTriggerMixASO= new TH1F("fHistTriggerMixASO", "fHistTriggerMixASO", 100, fTriglow, fTrighigh); |
33971f6b | 413 | fHistTriggerMixASO->Sumw2(); |
414 | fOutputList->Add(fHistTriggerMixASO); | |
9bcef488 | 415 | |
ff0805a7 | 416 | //----------------------------------------------Event Pool-----------------------------------------------------// |
ff0805a7 | 417 | fPoolMgr = new AliEventPoolManager(fPoolMaxNEvents, fPoolMinNTracks, fNCentBins, fCentBins, fNzVtxBins, fZvtxBins); |
418 | if(!fPoolMgr) return; | |
419 | ||
420 | PostData(1, fOutputList); | |
ff0805a7 | 421 | } |
422 | //--------------------------------------------------------------------------------------- | |
423 | void AliLeadingV0Correlation::UserExec(Option_t *) | |
424 | { | |
425 | ||
426 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
427 | AliInputEventHandler *inEvMain = (AliInputEventHandler*)(mgr->GetInputEventHandler()); | |
428 | if (!inEvMain) return; | |
429 | ||
430 | // Pointers to PID Response objects. | |
9bcef488 | 431 | fPIDResponse = inEvMain->GetPIDResponse(); |
432 | if(!fPIDResponse) return; | |
433 | ||
ff0805a7 | 434 | fAODEvent = dynamic_cast<AliAODEvent*>(inEvMain->GetEvent()); |
435 | if(!fAODEvent) return; | |
436 | ||
a8a50f30 | 437 | Int_t ltrackMultiplicity = 0; |
438 | Int_t lrefMultiplicity = 0; | |
5b607771 | 439 | |
a8a50f30 | 440 | //------------------------------------------------ |
441 | // Before Physics Selection | |
442 | //------------------------------------------------ | |
443 | ltrackMultiplicity = (InputEvent())->GetNumberOfTracks(); | |
0a918d8d | 444 | AliAODHeader * header = dynamic_cast<AliAODHeader*>(fAODEvent->GetHeader()); |
445 | if(!header) AliFatal("Not a standard AOD"); | |
446 | lrefMultiplicity = header->GetRefMultiplicity(); | |
ff0805a7 | 447 | |
a8a50f30 | 448 | fHist_Mult_B4_Trg_Sel->Fill(ltrackMultiplicity,lrefMultiplicity); |
ff0805a7 | 449 | |
da6ac661 | 450 | Double_t * CentBins = fCentBins; |
451 | Double_t poolmin = CentBins[0]; | |
452 | Double_t poolmax = CentBins[fNCentBins]; | |
ff0805a7 | 453 | |
5b607771 | 454 | //---------------------------------------------------------- |
455 | // Efficency denomenator comes before the physics selection | |
456 | //---------------------------------------------------------- | |
ff0805a7 | 457 | |
a8a50f30 | 458 | Double_t dimEventviceMC[2]; |
da6ac661 | 459 | if(fAnalysisMC) //Efficency denomenator comes before the physics selection |
460 | { | |
461 | AliAODMCHeader *aodMCheader = (AliAODMCHeader*)fAODEvent->FindListObject(AliAODMCHeader::StdBranchName()); | |
a8a50f30 | 462 | if(!aodMCheader) return; |
da6ac661 | 463 | Float_t mcZv = aodMCheader->GetVtxZ(); |
464 | ||
465 | if (TMath::Abs(mcZv) >= fpvzcut) return; | |
9bcef488 | 466 | |
bf855ed5 | 467 | dimEventviceMC[0]=aodMCheader->GetVtxZ(); |
ff0805a7 | 468 | |
da6ac661 | 469 | TClonesArray *mcArray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName()); |
470 | if(!mcArray)return; | |
ff0805a7 | 471 | |
da6ac661 | 472 | Int_t nMCTracks = mcArray->GetEntriesFast(); |
473 | ||
bf855ed5 | 474 | dimEventviceMC[1]=nMCTracks; |
33971f6b | 475 | fHistEventViceGen->Fill(dimEventviceMC[0],dimEventviceMC[1]); |
476 | ||
477 | TObjArray *selectedTracksLeadingMC=fAnalyseUE->FindLeadingObjects(mcArray); | |
478 | if(!selectedTracksLeadingMC) return; | |
479 | selectedTracksLeadingMC->SetOwner(kTRUE); | |
480 | ||
481 | TObjArray * selectedV0sMC =new TObjArray; | |
482 | selectedV0sMC->SetOwner(kTRUE); | |
ff0805a7 | 483 | |
a8a50f30 | 484 | TObjArray * selectedV0sMCXI =new TObjArray; |
485 | selectedV0sMCXI->SetOwner(kTRUE); | |
486 | ||
da6ac661 | 487 | for (Int_t iMC = 0; iMC<nMCTracks; iMC++) |
488 | { | |
489 | AliAODMCParticle *mcTrack = (AliAODMCParticle*)mcArray->At(iMC); | |
490 | if (!mcTrack) continue; | |
491 | // Charged track Generated level | |
492 | Double_t mcTrackPt = mcTrack->Pt(); | |
9dbaebd5 | 493 | if ((mcTrackPt<fPtMin)||(mcTrackPt>fTriglow)) continue; |
ff0805a7 | 494 | |
33971f6b | 495 | Double_t mcTrackEta = mcTrack->Eta(); |
496 | Double_t mcTrackPhi = mcTrack->Phi(); | |
da6ac661 | 497 | Bool_t TrIsPrime = mcTrack->IsPhysicalPrimary(); |
498 | Bool_t TrPtMin = mcTrackPt>fPtMin; | |
499 | Bool_t TrCharge = (mcTrack->Charge())!=0; | |
ff0805a7 | 500 | |
da6ac661 | 501 | if (!TrIsPrime && !TrPtMin && !TrCharge) continue; //Check Point 1 |
ff0805a7 | 502 | |
da6ac661 | 503 | // V0 Generated level |
504 | Int_t mcPartPdg = mcTrack->GetPdgCode(); | |
ff0805a7 | 505 | |
746a34ad | 506 | Double_t mcRapidity = mcTrack->Y(); |
507 | Bool_t V0RapMax = TMath::Abs(mcRapidity)<fRapidityCut; | |
9dbaebd5 | 508 | Bool_t V0EtaMax = TMath::Abs(mcTrackEta)<fTrackEtaCut; |
da6ac661 | 509 | Double_t mcMass = mcTrack->M(); |
ff0805a7 | 510 | |
2942f542 | 511 | Double_t mcK0[3] = {mcMass,mcTrackPt,static_cast<Double_t>(nMCTracks)}; |
512 | Double_t mcLa[3] = {mcMass,mcTrackPt,static_cast<Double_t>(nMCTracks)}; | |
513 | Double_t mcAl[3] = {mcMass,mcTrackPt,static_cast<Double_t>(nMCTracks)}; | |
ff0805a7 | 514 | |
a8a50f30 | 515 | Int_t myTrackMotherLabel = mcTrack->GetMother(); |
516 | ||
517 | AliAODMCParticle *mcMother = (AliAODMCParticle*)mcArray->At(myTrackMotherLabel); | |
518 | if (!mcMother) continue; | |
519 | Int_t MotherPdg = mcMother->GetPdgCode(); | |
746a34ad | 520 | Bool_t IsK0 = mcPartPdg==310; |
521 | Bool_t IsLambda = mcPartPdg==3122; | |
da6ac661 | 522 | Bool_t IsAntiLambda = mcPartPdg==-3122; |
a8a50f30 | 523 | |
524 | Bool_t IsXImin =MotherPdg== 3312; | |
525 | Bool_t IsXIPlus =MotherPdg==-3312; | |
9dbaebd5 | 526 | Bool_t IsXizero =MotherPdg== 3322; |
527 | Bool_t IsOmega =MotherPdg== 3334; | |
a8a50f30 | 528 | |
746a34ad | 529 | switch (fCase) { |
530 | case 1: | |
531 | ||
532 | if (IsK0) | |
533 | { | |
534 | fHistMCGenK0->Fill(mcK0[0],mcK0[1]); | |
535 | selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0)); | |
536 | } | |
537 | ||
538 | if (IsLambda) | |
539 | { | |
540 | fHistMCGenLAM->Fill(mcLa[0],mcLa[1]); | |
541 | selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0)); | |
542 | } | |
543 | ||
544 | if (IsAntiLambda) | |
545 | { | |
546 | fHistMCGenALAM->Fill(mcAl[0],mcAl[1]); | |
547 | selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0)); | |
548 | } | |
549 | ||
550 | if (IsLambda && (IsXizero || IsXImin)) | |
551 | { | |
552 | selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0)); | |
553 | fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]); | |
554 | } | |
555 | ||
556 | if (IsLambda && IsOmega) | |
557 | { | |
558 | selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0)); | |
559 | } | |
560 | ||
561 | if (IsAntiLambda && IsXIPlus) | |
562 | { | |
563 | selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0)); | |
564 | fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]); | |
565 | } | |
566 | ||
567 | break; | |
568 | ||
569 | case 2: | |
570 | ||
571 | if (IsK0 && V0RapMax && TrIsPrime) | |
572 | { | |
573 | fHistMCGenK0->Fill(mcK0[0],mcK0[1]); | |
574 | selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0)); | |
575 | } | |
576 | ||
577 | if (IsLambda && V0RapMax && TrIsPrime) | |
578 | { | |
579 | fHistMCGenLAM->Fill(mcLa[0],mcLa[1]); | |
580 | selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0)); | |
581 | } | |
582 | ||
583 | if (IsAntiLambda && V0RapMax && TrIsPrime) | |
584 | { | |
585 | fHistMCGenALAM->Fill(mcAl[0],mcAl[1]); | |
586 | selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0)); | |
587 | } | |
588 | ||
589 | if (IsLambda && V0RapMax && (IsXizero || IsXImin)) | |
590 | { | |
591 | selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0)); | |
592 | fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]); | |
593 | } | |
594 | ||
595 | if (IsLambda && V0RapMax && IsOmega) | |
596 | { | |
597 | selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0)); | |
598 | } | |
599 | ||
600 | if (IsAntiLambda && V0RapMax && IsXIPlus) | |
601 | { | |
602 | selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0)); | |
603 | fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]); | |
604 | } | |
605 | ||
606 | break; | |
607 | ||
608 | case 3: | |
609 | ||
610 | if (IsK0 && V0EtaMax && TrIsPrime) | |
611 | { | |
612 | fHistMCGenK0->Fill(mcK0[0],mcK0[1]); | |
613 | selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0)); | |
614 | } | |
615 | ||
616 | if (IsLambda && V0EtaMax && TrIsPrime) | |
617 | { | |
618 | fHistMCGenLAM->Fill(mcLa[0],mcLa[1]); | |
619 | selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0)); | |
620 | } | |
621 | ||
622 | if (IsAntiLambda && V0EtaMax && TrIsPrime) | |
623 | { | |
624 | fHistMCGenALAM->Fill(mcAl[0],mcAl[1]); | |
625 | selectedV0sMC->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0)); | |
626 | } | |
627 | ||
628 | if (IsLambda && V0EtaMax && (IsXizero || IsXImin)) | |
629 | { | |
630 | selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,1,0,0)); | |
631 | fHistMCGenLAMXI->Fill(mcLa[0],mcLa[1]); | |
632 | } | |
633 | ||
634 | if (IsLambda && V0EtaMax && IsOmega) | |
635 | { | |
636 | selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,2,0,0)); | |
637 | } | |
638 | ||
639 | if (IsAntiLambda && V0EtaMax && IsXIPlus) | |
640 | { | |
641 | selectedV0sMCXI->Add(new V0Correlationparticle(mcTrackEta,mcTrackPhi,mcTrackPt,3,0,0)); | |
642 | fHistMCGenLAMXIPLS->Fill(mcAl[0],mcAl[1]); | |
643 | } | |
644 | break; | |
645 | ||
646 | default: | |
647 | AliInfo(Form("No case selected")); | |
648 | break; | |
a8a50f30 | 649 | } |
da6ac661 | 650 | } |
33971f6b | 651 | |
a8a50f30 | 652 | FillCorrelationSibling(nMCTracks,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerSibGEN,fHistReconstSibGEN); |
653 | FillCorrelationMixing(nMCTracks,mcZv,poolmax,poolmin,selectedTracksLeadingMC,selectedV0sMC,fHistTriggerMixGEN,fHistReconstMixGEN); | |
654 | ||
655 | FillCorrelationSibling(nMCTracks,selectedTracksLeadingMC,selectedV0sMCXI,0,fHistReconstSibFEED); | |
656 | FillCorrelationMixing(nMCTracks,mcZv,poolmax,poolmin,selectedTracksLeadingMC,selectedV0sMCXI,0,fHistReconstMixFEED); | |
da6ac661 | 657 | } |
ff0805a7 | 658 | |
5b607771 | 659 | // End Loop over MC condition |
660 | ||
661 | //------------------------------------------------ | |
662 | // Physics Selection | |
663 | //------------------------------------------------ | |
da6ac661 | 664 | UInt_t maskIsSelected = inEvMain->IsEventSelected(); |
a8a50f30 | 665 | Bool_t isSelected = ((maskIsSelected & AliVEvent::kMB)== AliVEvent::kMB); |
da6ac661 | 666 | if (!isSelected) return; |
667 | ||
5b607771 | 668 | //------------------------------------------------ |
669 | // After Trigger Selection | |
670 | //------------------------------------------------ | |
671 | ||
a8a50f30 | 672 | fHist_Mult_Af_Trg_Sel->Fill(ltrackMultiplicity,lrefMultiplicity); |
ff0805a7 | 673 | |
5b607771 | 674 | //------------------------------------------------ |
675 | // Getting: Primary Vertex + MagField Info | |
676 | //------------------------------------------------ | |
bf855ed5 | 677 | Double_t dimEventviceReal[3]; |
5b607771 | 678 | Double_t lBestPrimaryVtxPos[3]; |
679 | Double_t tPrimaryVtxPosition[3]; | |
da6ac661 | 680 | Double_t lV0Position[3]; |
681 | ||
5b607771 | 682 | AliAODVertex *lPrimaryBestAODVtx = fAODEvent->GetPrimaryVertex(); |
683 | if (!lPrimaryBestAODVtx) return; | |
684 | // get the best primary vertex available for the event | |
685 | // As done in AliCascadeVertexer, we keep the one which is the best one available. | |
686 | // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex | |
687 | // This one will be used for next calculations (DCA essentially) | |
688 | lPrimaryBestAODVtx->GetXYZ(lBestPrimaryVtxPos); | |
689 | ||
690 | const AliVVertex *primaryVtx = fAODEvent->GetPrimaryVertex(); | |
a8a50f30 | 691 | if(!primaryVtx)return; |
5b607771 | 692 | tPrimaryVtxPosition[0] = primaryVtx->GetX(); |
693 | tPrimaryVtxPosition[1] = primaryVtx->GetY(); | |
694 | tPrimaryVtxPosition[2] = primaryVtx->GetZ(); | |
695 | fHistPVx->Fill( tPrimaryVtxPosition[0] ); | |
696 | fHistPVy->Fill( tPrimaryVtxPosition[1] ); | |
697 | fHistPVz->Fill( tPrimaryVtxPosition[2] ); | |
698 | ||
699 | //------------------------------------------------ | |
700 | // Primary Vertex Z position: SKIP | |
701 | //------------------------------------------------ | |
702 | ||
703 | Double_t lPVx = lBestPrimaryVtxPos[0]; | |
704 | Double_t lPVy = lBestPrimaryVtxPos[1]; | |
705 | Double_t lPVz = lBestPrimaryVtxPos[2]; | |
ff0805a7 | 706 | |
da6ac661 | 707 | if ((TMath::Abs(lPVz)) >= fpvzcut) return ; |
ff0805a7 | 708 | if (TMath::Abs(lPVx)<10e-5 && TMath::Abs(lPVy)<10e-5 && TMath::Abs(lPVz)<10e-5) return; |
a8a50f30 | 709 | fHist_Mult_PVz_Cut->Fill(ltrackMultiplicity,lrefMultiplicity); |
5b607771 | 710 | |
711 | //------------------------------------------------ | |
712 | // Only look at events with well-established PV | |
713 | //------------------------------------------------ | |
714 | ||
715 | const AliAODVertex *lPrimaryTrackingAODVtxCheck = fAODEvent->GetPrimaryVertex(); | |
716 | const AliAODVertex *lPrimarySPDVtx = fAODEvent->GetPrimaryVertexSPD(); | |
717 | if (!lPrimarySPDVtx && !lPrimaryTrackingAODVtxCheck )return; | |
718 | ||
a8a50f30 | 719 | fHist_Mult_SPD_PVz->Fill(ltrackMultiplicity,lrefMultiplicity); |
5b607771 | 720 | //------------------------------------------------ |
721 | // Pileup Rejection | |
722 | //------------------------------------------------ | |
723 | ||
724 | // FIXME : quality selection regarding pile-up rejection | |
725 | if(fAODEvent->IsPileupFromSPD()) return; | |
a8a50f30 | 726 | fHist_Mult_SPD_PVz_Pileup->Fill(ltrackMultiplicity,lrefMultiplicity); |
5b607771 | 727 | |
728 | fHistPVxAnalysis->Fill(tPrimaryVtxPosition[0]); | |
729 | fHistPVyAnalysis->Fill(tPrimaryVtxPosition[1]); | |
730 | fHistPVzAnalysis->Fill(tPrimaryVtxPosition[2]); | |
731 | ||
732 | dimEventviceReal[0]=tPrimaryVtxPosition[2]; | |
a8a50f30 | 733 | dimEventviceReal[1]=ltrackMultiplicity; |
ff0805a7 | 734 | |
33971f6b | 735 | fHistEventViceReconst->Fill(dimEventviceReal[0],dimEventviceReal[1]); |
da6ac661 | 736 | |
737 | //--------------------------------------------------------------------------------------------- | |
ff0805a7 | 738 | |
da6ac661 | 739 | Double_t lDcaPosToPrimVertex = 0;Double_t lDcaNegToPrimVertex = 0;Double_t lDcaV0Daughters = 0; |
740 | Double_t lV0cosPointAngle = 0;Double_t lV0DecayLength = 0;Double_t lV0Radius = 0; | |
741 | Double_t lcTauLambda = 0;Double_t lcTauAntiLambda = 0; | |
9dbaebd5 | 742 | Double_t lcTauK0s = 0; |
743 | Double_t lDCAV0PVz = 0; | |
ff0805a7 | 744 | |
da6ac661 | 745 | Double_t lInvMassK0 = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0; |
746 | Double_t lPtV0s = 0; Double_t lPhiV0s = 0; Double_t lEtaV0s = 0; | |
746a34ad | 747 | Double_t lRapK0 = 0, lRapLambda = 0, lRapAntiLambda = 0; |
748 | Double_t lPzV0s = 0; | |
da6ac661 | 749 | Double_t lPV0s = 0; |
ff0805a7 | 750 | |
bf855ed5 | 751 | TObjArray *selectedTracksLeading=0; |
5b607771 | 752 | selectedTracksLeading=fAnalyseUE->FindLeadingObjects(fAODEvent); |
da6ac661 | 753 | if(!selectedTracksLeading) return; |
754 | selectedTracksLeading->SetOwner(kTRUE); | |
ff0805a7 | 755 | |
da6ac661 | 756 | TObjArray * selectedV0s = new TObjArray; |
757 | selectedV0s->SetOwner(kTRUE); | |
ff0805a7 | 758 | |
33971f6b | 759 | TObjArray * selectedV0sAssoc = new TObjArray; |
760 | selectedV0sAssoc->SetOwner(kTRUE); | |
761 | ||
ff0805a7 | 762 | Int_t nV0s = fAODEvent->GetNumberOfV0s(); |
5115718d | 763 | |
da6ac661 | 764 | for (Int_t i = 0; i < nV0s; i++) |
ff0805a7 | 765 | { // start of V0 slection loop |
766 | AliAODv0* aodV0 = dynamic_cast<AliAODv0 *>(fAODEvent->GetV0(i)); | |
da6ac661 | 767 | if (!aodV0) continue; |
ff0805a7 | 768 | |
9dbaebd5 | 769 | if (((aodV0->Pt())<fPtMin)||((aodV0->Pt())>fTriglow)) continue; |
ff0805a7 | 770 | |
da6ac661 | 771 | // get daughters |
ff0805a7 | 772 | AliAODTrack *myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0)); |
773 | AliAODTrack *myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1)); | |
774 | ||
a8a50f30 | 775 | if (!myTrackPos || !myTrackNeg) continue; |
da6ac661 | 776 | |
777 | if (!IsAcseptedV0(aodV0,myTrackPos,myTrackNeg)) continue; | |
ff0805a7 | 778 | |
779 | // VO's main characteristics to check the reconstruction cuts | |
ff0805a7 | 780 | lDcaV0Daughters = aodV0->DcaV0Daughters(); |
5b607771 | 781 | lV0cosPointAngle = aodV0->CosPointingAngle(lBestPrimaryVtxPos); |
ff0805a7 | 782 | |
783 | aodV0->GetXYZ(lV0Position); | |
784 | ||
785 | lV0Radius = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]); | |
5b607771 | 786 | lV0DecayLength = TMath::Sqrt(TMath::Power(lV0Position[0] - tPrimaryVtxPosition[0],2) + |
787 | TMath::Power(lV0Position[1] - tPrimaryVtxPosition[1],2) + | |
788 | TMath::Power(lV0Position[2] - tPrimaryVtxPosition[2],2)); | |
ff0805a7 | 789 | |
790 | // DCA between daughter and Primary Vertex: | |
791 | if (myTrackPos) lDcaPosToPrimVertex = aodV0->DcaPosToPrimVertex(); | |
9dbaebd5 | 792 | if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex(); |
793 | lDCAV0PVz = aodV0->DcaV0ToPrimVertex(); | |
ff0805a7 | 794 | |
795 | // Quality tracks cuts: | |
796 | if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) { continue;} | |
797 | ||
da6ac661 | 798 | // Invariant mass |
799 | lInvMassK0 = aodV0->MassK0Short(); | |
800 | lInvMassLambda = aodV0->MassLambda(); | |
ff0805a7 | 801 | lInvMassAntiLambda = aodV0->MassAntiLambda(); |
da6ac661 | 802 | |
803 | lPtV0s = aodV0->Pt(); | |
804 | lPhiV0s= aodV0->Phi(); | |
805 | lEtaV0s= aodV0->Eta(); | |
806 | lPzV0s = aodV0->Pz(); | |
ff0805a7 | 807 | |
746a34ad | 808 | // Rapidity: |
809 | lRapK0 = aodV0->RapK0Short(); | |
810 | lRapLambda = aodV0->RapLambda(); | |
811 | lRapAntiLambda = aodV0->Y(-3122); | |
812 | ||
da6ac661 | 813 | if (lPtV0s==0) {continue;} |
ff0805a7 | 814 | |
da6ac661 | 815 | Float_t nSigmaPosPion = 0.; |
816 | Float_t nSigmaNegPion = 0.; | |
817 | Float_t nSigmaPosProton = 0.; | |
818 | Float_t nSigmaNegProton = 0.; | |
ff0805a7 | 819 | |
da6ac661 | 820 | const AliAODPid *pPid = myTrackPos->GetDetPid(); |
821 | const AliAODPid *nPid = myTrackNeg->GetDetPid(); | |
822 | ||
823 | if (pPid) | |
824 | { | |
825 | Double_t pdMom = pPid->GetTPCmomentum(); | |
bf855ed5 | 826 | if (pdMom<1.0 && (fcollidingSys=="PbPb")) |
da6ac661 | 827 | { |
828 | nSigmaPosPion = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion); | |
829 | nSigmaPosProton = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton); | |
830 | } | |
ff0805a7 | 831 | |
da6ac661 | 832 | if (fcollidingSys=="PP") |
833 | { | |
834 | nSigmaPosPion = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kPion); | |
835 | nSigmaPosProton = fPIDResponse->NumberOfSigmasTPC(myTrackPos, AliPID::kProton); | |
836 | } | |
837 | } | |
838 | ||
839 | if (nPid) | |
840 | { | |
841 | Double_t ndMom = nPid->GetTPCmomentum(); | |
bf855ed5 | 842 | if (ndMom<1.0 && (fcollidingSys=="PbPb")) |
da6ac661 | 843 | { |
844 | nSigmaNegPion = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion); | |
845 | nSigmaNegProton = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton); | |
846 | } | |
ff0805a7 | 847 | |
da6ac661 | 848 | if (fcollidingSys=="PP") |
849 | { | |
850 | nSigmaNegPion = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kPion); | |
851 | nSigmaNegProton = fPIDResponse->NumberOfSigmasTPC(myTrackNeg, AliPID::kProton); | |
852 | } | |
853 | } | |
854 | Bool_t bpPion = TMath::Abs(nSigmaPosPion) <= fSigmaPID; | |
855 | Bool_t bpProton = TMath::Abs(nSigmaPosProton) <= fSigmaPID; | |
856 | Bool_t bnPion = TMath::Abs(nSigmaNegPion) <= fSigmaPID; | |
857 | Bool_t bnProton = TMath::Abs(nSigmaNegProton) <= fSigmaPID; | |
858 | ||
859 | Bool_t cutK0Pid = (bpPion && bnPion) ; | |
860 | Bool_t cutLambdaPid = (bpProton && bnPion) ; | |
861 | Bool_t cutAntiLambdaPid = (bpPion && bnProton); | |
862 | //-------------------------------------------------- | |
863 | ||
864 | lPV0s = TMath::Sqrt(lPzV0s*lPzV0s + lPtV0s*lPtV0s); | |
865 | ||
866 | if(lPV0s > 0) lcTauLambda = (lV0DecayLength*lInvMassLambda)/lPV0s; | |
867 | if(lPV0s > 0) lcTauAntiLambda = (lV0DecayLength*lInvMassAntiLambda)/lPV0s; | |
868 | if(lPV0s > 0) lcTauK0s = (lV0DecayLength*lInvMassK0)/lPV0s; | |
869 | ||
870 | Bool_t k0ctcut = (lcTauK0s < fCutCTK0); | |
871 | Bool_t lactcut = (lcTauLambda < fCutCTLa); | |
872 | Bool_t alactcut= (lcTauAntiLambda < fCutCTLa); | |
da6ac661 | 873 | |
746a34ad | 874 | Bool_t k0Rapcut = (TMath::Abs(lRapK0) < fRapidityCut); |
875 | Bool_t laRapcut = (TMath::Abs(lRapLambda) < fRapidityCut); | |
876 | Bool_t alaRapcut= (TMath::Abs(lRapAntiLambda) < fRapidityCut); | |
877 | ||
878 | Bool_t V0EtaMax= (TMath::Abs(lEtaV0s) < fTrackEtaCut); | |
da6ac661 | 879 | |
da6ac661 | 880 | Bool_t k0cutset = IsAcseptedK0(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassLambda,lInvMassAntiLambda); |
881 | Bool_t lacutset = IsAcseptedLA(lV0Radius,lDcaPosToPrimVertex,lDcaNegToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0); | |
882 | Bool_t alacutset= IsAcseptedLA(lV0Radius,lDcaNegToPrimVertex,lDcaPosToPrimVertex,lDcaV0Daughters,lV0cosPointAngle,lInvMassK0); | |
883 | ||
9dbaebd5 | 884 | Double_t spK0[4] = {lInvMassK0,lPtV0s,lDCAV0PVz,lV0cosPointAngle}; |
885 | Double_t spLa[4] = {lInvMassLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle}; | |
886 | Double_t spAl[4] = {lInvMassAntiLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle}; | |
da6ac661 | 887 | |
888 | switch (fCase) { | |
889 | case 1: | |
a8a50f30 | 890 | fHistReconstK0->Fill(spK0); |
9dbaebd5 | 891 | if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle)); |
ff0805a7 | 892 | |
a8a50f30 | 893 | fHistReconstLA->Fill(spLa); |
9dbaebd5 | 894 | if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle)); |
da6ac661 | 895 | |
a8a50f30 | 896 | fHistReconstALA->Fill(spAl); |
9dbaebd5 | 897 | if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle)); |
da6ac661 | 898 | |
899 | break; | |
900 | ||
901 | case 2: | |
746a34ad | 902 | if(k0ctcut && k0Rapcut && k0cutset && cutK0Pid) |
da6ac661 | 903 | { |
a8a50f30 | 904 | fHistReconstK0->Fill(spK0); |
9dbaebd5 | 905 | if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle)); |
ff0805a7 | 906 | } |
ff0805a7 | 907 | |
746a34ad | 908 | if (lactcut && laRapcut && lacutset && cutLambdaPid) |
da6ac661 | 909 | { |
a8a50f30 | 910 | fHistReconstLA->Fill(spLa); |
9dbaebd5 | 911 | if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle)); |
da6ac661 | 912 | } |
913 | ||
746a34ad | 914 | if (alactcut && alaRapcut && alacutset && cutAntiLambdaPid) |
da6ac661 | 915 | { |
a8a50f30 | 916 | fHistReconstALA->Fill(spAl); |
9dbaebd5 | 917 | if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle)); |
da6ac661 | 918 | } |
919 | ||
920 | break; | |
921 | ||
922 | case 3: | |
746a34ad | 923 | if(k0ctcut && V0EtaMax && k0cutset && cutK0Pid) |
da6ac661 | 924 | { |
a8a50f30 | 925 | fHistReconstK0->Fill(spK0); |
9dbaebd5 | 926 | if(IsK0InvMass(lInvMassK0))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle)); |
da6ac661 | 927 | } |
928 | ||
746a34ad | 929 | if (lactcut && V0EtaMax && lacutset && cutLambdaPid) |
da6ac661 | 930 | { |
a8a50f30 | 931 | fHistReconstLA->Fill(spLa); |
9dbaebd5 | 932 | if(IsLambdaInvMass(lInvMassLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle)); |
da6ac661 | 933 | } |
934 | ||
746a34ad | 935 | if (alactcut && V0EtaMax && alacutset && cutAntiLambdaPid) |
da6ac661 | 936 | { |
a8a50f30 | 937 | fHistReconstALA->Fill(spAl); |
9dbaebd5 | 938 | if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0s->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle)); |
da6ac661 | 939 | } |
940 | break; | |
941 | ||
942 | default: | |
2fdc3a7b | 943 | AliInfo(Form("No case selected")); |
da6ac661 | 944 | break; |
ff0805a7 | 945 | } |
ff0805a7 | 946 | |
da6ac661 | 947 | if (fAnalysisMC) |
948 | { | |
949 | TClonesArray *mcArray = (TClonesArray*)fAODEvent->FindListObject(AliAODMCParticle::StdBranchName()); | |
950 | if(!mcArray)return; | |
951 | ||
952 | Int_t myTrackPosLabel = TMath::Abs(myTrackPos->GetLabel()); | |
953 | Int_t myTrackNegLabel = TMath::Abs(myTrackNeg->GetLabel()); | |
954 | ||
955 | AliAODMCParticle *mcPosTrack = (AliAODMCParticle*)mcArray->At(myTrackPosLabel); | |
a8a50f30 | 956 | if(!mcPosTrack)continue; |
da6ac661 | 957 | AliAODMCParticle *mcNegTrack = (AliAODMCParticle*)mcArray->At(myTrackNegLabel); |
a8a50f30 | 958 | if(!mcNegTrack)continue; |
da6ac661 | 959 | |
960 | Int_t PosDaughterPdg = mcPosTrack->GetPdgCode(); | |
961 | Int_t NegDaughterPdg = mcNegTrack->GetPdgCode(); | |
962 | ||
963 | Int_t myTrackPosMotherLabel = mcPosTrack->GetMother(); | |
964 | Int_t myTrackNegMotherLabel = mcNegTrack->GetMother(); | |
965 | ||
966 | if ((myTrackPosMotherLabel==-1)||(myTrackNegMotherLabel==-1)) continue; | |
967 | if (myTrackPosMotherLabel!=myTrackNegMotherLabel) continue; | |
968 | ||
969 | AliAODMCParticle *mcPosMother = (AliAODMCParticle*)mcArray->At(myTrackPosMotherLabel); | |
a8a50f30 | 970 | if(!mcPosMother)continue; |
da6ac661 | 971 | Int_t MotherPdg = mcPosMother->GetPdgCode(); |
972 | Bool_t IsPrime = mcPosMother->IsPhysicalPrimary(); | |
973 | ||
9dbaebd5 | 974 | Int_t myGrandMotherLabel = mcPosMother->GetMother(); |
975 | AliAODMCParticle *mcGrandMother = (AliAODMCParticle*)mcArray->At(myGrandMotherLabel); | |
976 | Int_t GrandMotherPdg = mcGrandMother->GetPdgCode(); | |
977 | ||
978 | Double_t rcK0[4] = {lInvMassK0,lPtV0s,lDCAV0PVz,lV0cosPointAngle}; | |
979 | Double_t rcLa[4] = {lInvMassLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle}; | |
980 | Double_t rcAl[4] = {lInvMassAntiLambda,lPtV0s,lDCAV0PVz,lV0cosPointAngle}; | |
da6ac661 | 981 | |
982 | switch (fCase) { | |
983 | case 1: | |
a8a50f30 | 984 | fHistMCAssoK0->Fill(rcK0); |
9dbaebd5 | 985 | if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle)); |
33971f6b | 986 | |
a8a50f30 | 987 | fHistMCAssoLA->Fill(rcLa); |
9dbaebd5 | 988 | if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle)); |
33971f6b | 989 | |
a8a50f30 | 990 | fHistMCAssoALA->Fill(rcAl); |
9dbaebd5 | 991 | if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle)); |
da6ac661 | 992 | |
993 | break; | |
994 | ||
995 | case 2: | |
746a34ad | 996 | if ((k0ctcut && k0Rapcut && k0cutset)&&(MotherPdg == 310 && |
da6ac661 | 997 | PosDaughterPdg== 211 && |
998 | NegDaughterPdg== -211 && | |
999 | IsPrime)) | |
1000 | { | |
a8a50f30 | 1001 | fHistMCAssoK0->Fill(rcK0); |
9dbaebd5 | 1002 | if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle)); |
ff0805a7 | 1003 | } |
da6ac661 | 1004 | |
746a34ad | 1005 | if ((lactcut && laRapcut && lacutset)&&(MotherPdg == 3122 && |
da6ac661 | 1006 | PosDaughterPdg== 2212 && |
1007 | NegDaughterPdg== -211 && | |
1008 | IsPrime)) | |
1009 | { | |
a8a50f30 | 1010 | fHistMCAssoLA->Fill(rcLa); |
9dbaebd5 | 1011 | if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle)); |
ff0805a7 | 1012 | } |
da6ac661 | 1013 | |
746a34ad | 1014 | if ((alactcut && alaRapcut && alacutset)&&(MotherPdg == -3122 && |
da6ac661 | 1015 | PosDaughterPdg== 211 && |
1016 | NegDaughterPdg== -2212 && | |
1017 | IsPrime)) | |
1018 | { | |
a8a50f30 | 1019 | fHistMCAssoALA->Fill(rcAl); |
9dbaebd5 | 1020 | if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle)); |
1021 | } | |
1022 | ||
746a34ad | 1023 | if ((lactcut && laRapcut && lacutset)&&(MotherPdg == 3122 && |
9dbaebd5 | 1024 | PosDaughterPdg== 2212 && |
1025 | NegDaughterPdg== -211 && | |
1026 | (GrandMotherPdg==3322 ||GrandMotherPdg==3312))) | |
1027 | { | |
1028 | fHistMCAssoLAXI->Fill(rcLa); | |
1029 | } | |
1030 | ||
746a34ad | 1031 | if ((alactcut && alaRapcut && alacutset)&&(MotherPdg == -3122 && |
9dbaebd5 | 1032 | PosDaughterPdg== 211 && |
1033 | NegDaughterPdg== -2212 && | |
1034 | GrandMotherPdg== -3312)) | |
1035 | { | |
1036 | fHistMCAssoALAXiPlus->Fill(rcAl); | |
ff0805a7 | 1037 | } |
da6ac661 | 1038 | |
1039 | break; | |
1040 | ||
1041 | case 3: | |
746a34ad | 1042 | if ((k0ctcut && V0EtaMax && k0cutset)&&(MotherPdg == 310 && |
da6ac661 | 1043 | PosDaughterPdg== 211 && |
1044 | NegDaughterPdg== -211 && | |
1045 | IsPrime)) | |
1046 | { | |
a8a50f30 | 1047 | fHistMCAssoK0->Fill(rcK0); |
9dbaebd5 | 1048 | if(IsK0InvMass(lInvMassK0))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,1,lDCAV0PVz,lV0cosPointAngle)); |
ff0805a7 | 1049 | } |
da6ac661 | 1050 | |
746a34ad | 1051 | if ((lactcut && V0EtaMax && lacutset)&&(MotherPdg == 3122 && |
da6ac661 | 1052 | PosDaughterPdg== 2212 && |
1053 | NegDaughterPdg== -211 && | |
1054 | IsPrime)) | |
1055 | { | |
a8a50f30 | 1056 | fHistMCAssoLA->Fill(rcLa); |
9dbaebd5 | 1057 | if(IsLambdaInvMass(lInvMassLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,2,lDCAV0PVz,lV0cosPointAngle)); |
ff0805a7 | 1058 | } |
da6ac661 | 1059 | |
746a34ad | 1060 | if ((alactcut && V0EtaMax && alacutset)&&(MotherPdg == -3122 && |
da6ac661 | 1061 | PosDaughterPdg== 211 && |
1062 | NegDaughterPdg== -2212 && | |
1063 | IsPrime)) | |
1064 | { | |
a8a50f30 | 1065 | fHistMCAssoALA->Fill(rcAl); |
9dbaebd5 | 1066 | if(IsLambdaInvMass(lInvMassAntiLambda))selectedV0sAssoc->Add(new V0Correlationparticle(lEtaV0s,lPhiV0s,lPtV0s,3,lDCAV0PVz,lV0cosPointAngle)); |
ff0805a7 | 1067 | } |
746a34ad | 1068 | |
1069 | if ((lactcut && V0EtaMax && lacutset)&&(MotherPdg == 3122 && | |
1070 | PosDaughterPdg== 2212 && | |
1071 | NegDaughterPdg== -211 && | |
1072 | (GrandMotherPdg==3322 ||GrandMotherPdg==3312))) | |
1073 | { | |
1074 | fHistMCAssoLAXI->Fill(rcLa); | |
1075 | } | |
1076 | ||
1077 | if ((alactcut && V0EtaMax && alacutset)&&(MotherPdg == -3122 && | |
1078 | PosDaughterPdg== 211 && | |
1079 | NegDaughterPdg== -2212 && | |
1080 | GrandMotherPdg== -3312)) | |
1081 | { | |
1082 | fHistMCAssoALAXiPlus->Fill(rcAl); | |
1083 | } | |
da6ac661 | 1084 | break; |
1085 | ||
1086 | default: | |
2fdc3a7b | 1087 | AliInfo(Form("No case selected")); |
da6ac661 | 1088 | break; |
1089 | } | |
1090 | } | |
1091 | } | |
ff0805a7 | 1092 | |
a8a50f30 | 1093 | FillCorrelationSibling(ltrackMultiplicity,selectedTracksLeading,selectedV0s,fHistTriggerSib,fHistReconstSib); |
1094 | FillCorrelationMixing(ltrackMultiplicity,tPrimaryVtxPosition[2],poolmax,poolmin,selectedTracksLeading,selectedV0s,fHistTriggerMix,fHistReconstMix); | |
ff0805a7 | 1095 | |
a8a50f30 | 1096 | FillCorrelationSibling(ltrackMultiplicity,selectedTracksLeading,selectedV0sAssoc,fHistTriggerSibASO,fHistReconstSibASO); |
1097 | FillCorrelationMixing(ltrackMultiplicity,lPVz,poolmax,poolmin,selectedTracksLeading,selectedV0sAssoc,fHistTriggerMixASO,fHistReconstMixASO); | |
33971f6b | 1098 | |
da6ac661 | 1099 | PostData(1,fOutputList); |
1100 | } | |
ff0805a7 | 1101 | //--------------------------------------------------------------------------------------- |
da6ac661 | 1102 | void AliLeadingV0Correlation::Terminate(Option_t *) |
ff0805a7 | 1103 | { |
da6ac661 | 1104 | //No need in the grid |
ff0805a7 | 1105 | } |
1106 | //--------------------------------------------------------------------------------------- | |
1107 | Bool_t AliLeadingV0Correlation::IsAcseptedDaughterTrack(const AliAODTrack *itrack) | |
9dbaebd5 | 1108 | { |
d803353d | 1109 | if(fCase==1 || fCase==2) |
746a34ad | 1110 | if(TMath::Abs(itrack->Eta())>fTrackEtaCut)return kFALSE; |
1111 | ||
ff0805a7 | 1112 | if (!itrack->IsOn(AliAODTrack::kTPCrefit)) return kFALSE; |
1113 | ||
1114 | Float_t nCrossedRowsTPC = itrack->GetTPCClusterInfo(2,1); | |
a8a50f30 | 1115 | if (nCrossedRowsTPC < fTPCClusters) return kFALSE; |
ff0805a7 | 1116 | |
1117 | Int_t findable=itrack->GetTPCNclsF(); | |
1118 | if (findable <= 0) return kFALSE; | |
1119 | ||
a8a50f30 | 1120 | if (nCrossedRowsTPC/findable < fTPCfindratio) return kFALSE; |
ff0805a7 | 1121 | return kTRUE; |
1122 | } | |
1123 | //--------------------------------------------------------------------------------------- | |
da6ac661 | 1124 | Bool_t AliLeadingV0Correlation::IsAcseptedV0(const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg) |
ff0805a7 | 1125 | { |
da6ac661 | 1126 | if (!aodV0) return kFALSE; |
ff0805a7 | 1127 | |
da6ac661 | 1128 | // Offline reconstructed V0 only |
1129 | if (aodV0->GetOnFlyStatus()) return kFALSE; | |
ff0805a7 | 1130 | |
da6ac661 | 1131 | // Get daughters and check them |
1132 | myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0)); | |
1133 | myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1)); | |
ff0805a7 | 1134 | |
da6ac661 | 1135 | if (!myTrackPos||!myTrackNeg) return kFALSE; |
1136 | // Unlike signs of daughters | |
1137 | if (myTrackPos->Charge() == myTrackNeg->Charge()) return kFALSE; | |
ff0805a7 | 1138 | |
da6ac661 | 1139 | // Track cuts for daughers |
1140 | if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) return kFALSE; | |
1141 | ||
1142 | // Minimum pt of daughters | |
1143 | Double_t lPtPos = myTrackPos->Pt(); | |
1144 | Double_t lPtNeg = myTrackNeg->Pt(); | |
1145 | ||
1146 | if (lPtPos<fPtMin || lPtNeg<fPtMin) return kFALSE; | |
ff0805a7 | 1147 | |
da6ac661 | 1148 | return kTRUE; |
ff0805a7 | 1149 | } |
1150 | //--------------------------------------------------------------------------------------- | |
da6ac661 | 1151 | Bool_t AliLeadingV0Correlation::IsAcseptedK0(Double_t v0rad, |
1152 | Double_t dcaptp, | |
1153 | Double_t dcantp, | |
1154 | Double_t dcav0d, | |
1155 | Double_t cpa, | |
1156 | Double_t massLa, | |
1157 | Double_t massALa) | |
1158 | { | |
1159 | if(v0rad >=fV0radius && | |
1160 | dcaptp >=fV0PostoPVz && | |
1161 | dcantp >=fV0NegtoPVz && | |
1162 | dcav0d <=fDCAV0Daughters && | |
1163 | cpa >=fCPAK0 && | |
1164 | TMath::Abs(massLa - 1.115683) > fRejectLamK0 && | |
1165 | TMath::Abs(massALa - 1.115683) > fRejectLamK0 )return kTRUE; | |
1166 | return kFALSE; | |
ff0805a7 | 1167 | } |
1168 | //--------------------------------------------------------------------------------------- | |
da6ac661 | 1169 | Bool_t AliLeadingV0Correlation::IsAcseptedLA(Double_t v0rad, |
1170 | Double_t dcaptp, | |
1171 | Double_t dcantp, | |
1172 | Double_t dcav0d, | |
1173 | Double_t cpa, | |
1174 | Double_t massK0) | |
1175 | { | |
1176 | if(v0rad >=fV0radius && | |
1177 | dcaptp >=fV0PostoPVz && | |
1178 | dcantp >=fV0NegtoPVz && | |
1179 | dcav0d <=fDCAV0Daughters && | |
1180 | cpa >=fCPALam && | |
1181 | TMath::Abs(massK0 - 0.4976) > fRejectK0Lam && | |
1182 | TMath::Abs(massK0 - 0.4976) > fRejectK0Lam )return kTRUE; | |
1183 | return kFALSE; | |
ff0805a7 | 1184 | } |
1185 | //--------------------------------------------------------------------------------------- | |
9bcef488 | 1186 | Bool_t AliLeadingV0Correlation::IsK0InvMass(const Double_t mass) const |
1187 | { | |
da6ac661 | 1188 | const Float_t massK0 = 0.497; |
ff0805a7 | 1189 | |
da6ac661 | 1190 | return ((massK0-fMassCutK0)<=mass && mass<=(massK0 + fMassCutK0))?1:0; |
ff0805a7 | 1191 | } |
1192 | //--------------------------------------------------------------------------------------- | |
9bcef488 | 1193 | Bool_t AliLeadingV0Correlation::IsLambdaInvMass(const Double_t mass) const |
1194 | { | |
da6ac661 | 1195 | const Float_t massLambda = 1.116; |
ff0805a7 | 1196 | |
da6ac661 | 1197 | return ((massLambda-fMassCutLa)<=mass && mass<=(massLambda + fMassCutLa))?1:0; |
1198 | } | |
1199 | //--------------------------------------------------------------------------------------- | |
1200 | Double_t AliLeadingV0Correlation::RangePhi(Double_t DPhi) | |
1201 | { | |
1202 | if (DPhi < -TMath::Pi()/2) DPhi += 2*TMath::Pi(); | |
1203 | if (DPhi > 3*TMath::Pi()/2) DPhi -= 2*TMath::Pi(); | |
1204 | return DPhi; | |
ff0805a7 | 1205 | } |
1206 | //--------------------------------------------------------------------------------------- | |
da6ac661 | 1207 | Bool_t AliLeadingV0Correlation::IsTrackFromV0(AliAODTrack* track) |
9bcef488 | 1208 | { |
1209 | Int_t atrID = track->GetID(); | |
1210 | ||
ff0805a7 | 1211 | for(int i=0; i<fAODEvent->GetNumberOfV0s(); i++){ // loop over V0s |
1212 | AliAODv0* aodV0 = fAODEvent->GetV0(i); | |
9bcef488 | 1213 | |
1214 | AliAODTrack *trackPos=(AliAODTrack *)(aodV0->GetDaughter(0)); | |
1215 | AliAODTrack *trackNeg=(AliAODTrack *)(aodV0->GetDaughter(1)); | |
ff0805a7 | 1216 | |
9bcef488 | 1217 | if ( !(IsAcseptedDaughterTrack(trackPos)) || !(IsAcseptedDaughterTrack(trackNeg)) ) continue; |
1218 | //---------------------------------- | |
1219 | Int_t negID = trackNeg->GetID(); | |
1220 | Int_t posID = trackPos->GetID(); | |
1221 | ||
da6ac661 | 1222 | if ((TMath::Abs(negID)+1)==(TMath::Abs(atrID))){ return kTRUE;} |
1223 | if ((TMath::Abs(posID)+1)==(TMath::Abs(atrID))){ return kTRUE;} | |
9bcef488 | 1224 | //---------------------------------- |
ff0805a7 | 1225 | } |
da6ac661 | 1226 | return kFALSE; |
ff0805a7 | 1227 | } |
1228 | //--------------------------------------------------------------------------------------- | |
da6ac661 | 1229 | void AliLeadingV0Correlation::FillCorrelationSibling(Double_t MultipOrCent, |
1230 | TObjArray*triggerArray, | |
1231 | TObjArray*selectedV0Array, | |
746a34ad | 1232 | TH3F*triggerHist, |
da6ac661 | 1233 | THnSparse*associateHist) |
ff0805a7 | 1234 | { |
33971f6b | 1235 | Double_t binsv0CORR[8]; |
9dbaebd5 | 1236 | Double_t binsTrigSib[2]; |
da6ac661 | 1237 | Int_t counterSibMCA=0; |
ff0805a7 | 1238 | |
da6ac661 | 1239 | for(Int_t i=0;i<triggerArray->GetEntriesFast();i++) |
1240 | { | |
1241 | AliAODTrack* trigger = (AliAODTrack*)triggerArray->At(0); | |
1242 | if(!trigger)continue; | |
1243 | ||
1244 | if(fRemoveAutoCorr) | |
1245 | if(IsTrackFromV0(trigger))continue; | |
1246 | ||
1247 | Double_t triggerPt = trigger->Pt(); | |
1248 | Double_t triggerPhi = trigger->Phi(); | |
1249 | Double_t triggerEta = trigger->Eta(); | |
1250 | ||
5b607771 | 1251 | if(triggerPt<fTriglow||triggerPt>fTrighigh)continue; |
da6ac661 | 1252 | counterSibMCA++; |
5b607771 | 1253 | |
da6ac661 | 1254 | if(counterSibMCA==triggerArray->GetEntriesFast()){ |
1255 | ||
1256 | binsTrigSib[0]=triggerPt; | |
9dbaebd5 | 1257 | binsTrigSib[1]=MultipOrCent; |
da6ac661 | 1258 | |
746a34ad | 1259 | if(triggerHist)triggerHist->Fill(binsTrigSib[0],triggerPhi,triggerEta); |
da6ac661 | 1260 | |
bf855ed5 | 1261 | for (Int_t j=0; j<selectedV0Array->GetEntriesFast(); j++){ |
1262 | ||
1263 | V0Correlationparticle* associate = (V0Correlationparticle*) selectedV0Array->At(j); | |
1264 | if(!associate)continue; | |
1265 | ||
1266 | binsv0CORR[0]= associate->Pt(); | |
1267 | binsv0CORR[1]= associate->Phi(); | |
1268 | binsv0CORR[2]= associate->Eta(); | |
1269 | ||
1270 | if(binsv0CORR[0]>triggerPt) continue; | |
1271 | ||
1272 | binsv0CORR[3]=RangePhi(triggerPhi-binsv0CORR[1]); | |
1273 | binsv0CORR[4]=triggerEta-binsv0CORR[2]; | |
1274 | binsv0CORR[5]= associate->WhichCandidate(); | |
33971f6b | 1275 | binsv0CORR[6]= associate->DCAPostoP(); |
1276 | binsv0CORR[7]= associate->DCANegtoP(); | |
bf855ed5 | 1277 | |
1278 | associateHist->Fill(binsv0CORR); | |
1279 | } | |
1280 | } | |
1281 | } | |
da6ac661 | 1282 | } |
1283 | //--------------------------------------------------------------------------------------- | |
1284 | void AliLeadingV0Correlation::FillCorrelationMixing(Double_t MultipOrCentMix, | |
1285 | Double_t pvxMix, | |
1286 | Double_t poolmax, | |
1287 | Double_t poolmin, | |
1288 | TObjArray*triggerArray, | |
1289 | TObjArray*selectedV0Array, | |
9dbaebd5 | 1290 | TH1F*triggerHist, |
da6ac661 | 1291 | THnSparse*associateHist) |
1292 | { | |
1293 | if(TMath::Abs(pvxMix)>=fpvzcut || MultipOrCentMix>poolmax || MultipOrCentMix < poolmin) | |
1294 | { | |
1295 | if(fcollidingSys=="PP")AliInfo(Form("pp Event with Zvertex = %.2f cm and multiplicity = %.0f out of pool bounds, SKIPPING",pvxMix,MultipOrCentMix)); | |
da6ac661 | 1296 | return; |
1297 | } | |
ff0805a7 | 1298 | |
33971f6b | 1299 | Double_t binsv0CORRMix[8]; |
5b607771 | 1300 | Double_t binsTrigMix[2]; |
da6ac661 | 1301 | Double_t counterMix=0; |
ff0805a7 | 1302 | |
da6ac661 | 1303 | AliEventPool* pool = fPoolMgr->GetEventPool(MultipOrCentMix, pvxMix); |
ff7f6628 | 1304 | if (!pool) AliFatal(Form("No pool found for centrality = %f, zVtx = %f", MultipOrCentMix, pvxMix)); |
ff0805a7 | 1305 | |
da6ac661 | 1306 | if (pool->IsReady() || pool->NTracksInPool() > fPoolMinNTracks || pool->GetCurrentNEvents() > fMinEventsToMix) |
1307 | { | |
1308 | Int_t nMix = pool->GetCurrentNEvents(); | |
1309 | for (Int_t jMix=0; jMix<nMix; jMix++){ | |
1310 | ||
1311 | TObjArray* mixEvents = pool->GetEvent(jMix); | |
1312 | for (Int_t i=0; i<triggerArray->GetEntriesFast(); i++){ | |
1313 | ||
1314 | AliAODTrack* trig = (AliAODTrack*)triggerArray->At(0); | |
1315 | if(!trig)continue; | |
1316 | ||
1317 | if(fRemoveAutoCorr) | |
1318 | if(IsTrackFromV0(trig))continue; | |
1319 | ||
1320 | Double_t trigPhi = trig->Phi(); | |
1321 | Double_t trigEta = trig->Eta(); | |
1322 | Double_t trigPt = trig->Pt(); | |
1323 | ||
5b607771 | 1324 | if(trigPt<fTriglow||trigPt>fTrighigh)continue; |
da6ac661 | 1325 | counterMix++; |
5b607771 | 1326 | |
da6ac661 | 1327 | if(counterMix==triggerArray->GetEntriesFast()){ |
1328 | ||
1329 | binsTrigMix[0]=trigPt; | |
9dbaebd5 | 1330 | binsTrigMix[1]=MultipOrCentMix; |
bf855ed5 | 1331 | |
9dbaebd5 | 1332 | if(triggerHist)triggerHist->Fill(binsTrigMix[0]); |
bf855ed5 | 1333 | |
da6ac661 | 1334 | for (Int_t j=0; j<mixEvents->GetEntriesFast(); j++){ |
1335 | ||
1336 | V0Correlationparticle* associate = (V0Correlationparticle*) mixEvents->At(j); | |
1337 | if(!associate)continue; | |
1338 | ||
1339 | binsv0CORRMix[0]= associate->Pt(); | |
1340 | binsv0CORRMix[1]= associate->Phi(); | |
1341 | binsv0CORRMix[2]= associate->Eta(); | |
1342 | ||
1343 | if(binsv0CORRMix[0]>trigPt) continue; | |
1344 | ||
1345 | binsv0CORRMix[3]=RangePhi(trigPhi-binsv0CORRMix[1]); | |
1346 | binsv0CORRMix[4]=trigEta-binsv0CORRMix[2]; | |
1347 | binsv0CORRMix[5]=associate->WhichCandidate(); | |
33971f6b | 1348 | binsv0CORRMix[6]=associate->DCAPostoP(); |
1349 | binsv0CORRMix[7]=associate->DCANegtoP(); | |
da6ac661 | 1350 | |
1351 | associateHist->Fill(binsv0CORRMix); | |
5b607771 | 1352 | } |
da6ac661 | 1353 | } |
1354 | } | |
1355 | } | |
1356 | } | |
ff0805a7 | 1357 | |
da6ac661 | 1358 | TObjArray* tracksClone = new TObjArray; |
1359 | tracksClone->SetOwner(kTRUE); | |
ff0805a7 | 1360 | |
da6ac661 | 1361 | for (Int_t i=0; i<selectedV0Array->GetEntriesFast(); i++) |
1362 | { | |
1363 | V0Correlationparticle* particle = (V0Correlationparticle*) selectedV0Array->At(i); | |
1364 | tracksClone->Add(new V0Correlationparticle(particle->Eta(), | |
1365 | particle->Phi(), | |
1366 | particle->Pt(), | |
33971f6b | 1367 | particle->WhichCandidate(), |
1368 | particle->DCAPostoP(), | |
1369 | particle->DCANegtoP())); | |
da6ac661 | 1370 | }; |
1371 | pool->UpdatePool(tracksClone); | |
ff0805a7 | 1372 | } |
da6ac661 | 1373 | //--------------------------------------------------------------------------------------- |
1374 | ||
1375 | ||
1376 | ||
5b607771 | 1377 |