]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/StrangenessInJets/AliAnalysisTaskJetChem.cxx
coverity fix
[u/mrichter/AliRoot.git] / PWGJE / StrangenessInJets / AliAnalysisTaskJetChem.cxx
CommitLineData
8bde4137 1/*************************************************************************
96c271c1 2 * *
3 * *
4 * Task for Jet Chemistry Analysis in PWG4 Jet Task Force Train *
bce887f5 5 * Analysis of K0s, Lambda and Antilambda with and without Jetevents *
96c271c1 6 * *
7 *************************************************************************/
8
9b2de807 9/**************************************************************************
bce887f5 10 * Copyright(c) 1998-2012, ALICE Experiment at CERN, All rights reserved. *
9b2de807 11 * *
12 * Author: The ALICE Off-line Project. *
13 * Contributors are mentioned in the code where appropriate. *
14 * *
15 * Permission to use, copy, modify and distribute this software and its *
bce887f5 16 * documentation strictly for non-commercial purposes is hereby grante *
17 * *
9b2de807 18 * without fee, provided that the above copyright notice appears in all *
19 * copies and that both the copyright notice and this permission notice *
20 * appear in the supporting documentation. The authors make no claims *
21 * about the suitability of this software for any purpose. It is *
22 * provided "as is" without express or implied warranty. *
23 **************************************************************************/
cc096464 24//Task for K0s, Lambda and Antilambda analysis in jets
25//Author: Alice Zimmermann (zimmermann@physi.uni-heidelberg.de)
bce887f5 26
9b2de807 27
96c271c1 28/* $Id: */
9b2de807 29
bce887f5 30#include <iostream>
31#include "TH2.h"
32#include "TH3.h"
96c271c1 33#include "TH2F.h"
34#include "TH3F.h"
bce887f5 35#include "TH2D.h"
36#include "TH3D.h"
37#include "TChain.h"
38#include "TTree.h"
39#include "TList.h"
40#include "TCanvas.h"
41#include "TPDGCode.h"
96c271c1 42#include "TProfile.h"
43#include "THnSparse.h"
bce887f5 44#include <algorithm>
45#include <string>
96c271c1 46#include "AliAnalysisHelperJetTasks.h"
bce887f5 47#include "TDatabasePDG.h"
48#include "TPDGCode.h"
9b2de807 49#include "AliAnalysisManager.h"
96c271c1 50#include "AliAODHandler.h"
51#include "AliAODInputHandler.h"
52#include "AliESDEvent.h"
53#include "AliGenPythiaEventHeader.h"
54#include "AliGenHijingEventHeader.h"
bce887f5 55#include "AliGenEventHeader.h"
56#include "TLorentzVector.h"
96c271c1 57#include "AliAODEvent.h"
9b2de807 58#include "AliAODJet.h"
96c271c1 59#include "AliAODv0.h"
9b2de807 60#include "AliAODTrack.h"
bce887f5 61#include "AliCentrality.h"
62#include "AliAnalysisTaskSE.h"
63#include "AliESDtrack.h"
64#include "AliESDtrackCuts.h"
65#include "AliESDEvent.h"
66#include "AliESDInputHandler.h"
96c271c1 67#include "AliPID.h"
bce887f5 68#include "AliPIDResponse.h"
69#include "AliAODPid.h"
9b2de807 70#include "AliExternalTrackParam.h"
96c271c1 71#include "AliAnalysisTaskJetChem.h"
bce887f5 72#include "AliPhysicsSelection.h"
73#include "AliBackgroundSelection.h"
74#include "AliInputEventHandler.h"
75#include "AliAODMCHeader.h"
76#include "AliAODPid.h"
77#include "AliVEvent.h"
78#include "AliAODMCParticle.h"
79#include "TVector3.h"
cc096464 80#include "TRandom3.h"
9280dfa6 81
96c271c1 82ClassImp(AliAnalysisTaskJetChem)
9280dfa6 83
96c271c1 84//____________________________________________________________________________
85AliAnalysisTaskJetChem::AliAnalysisTaskJetChem()
86 : AliAnalysisTaskFragmentationFunction()
cc096464 87
88 ,fRandom(0)
bce887f5 89 ,fAnalysisMC(0)
90 ,fDeltaVertexZ(0)
a6ffe507 91 ,fCutjetEta(0)
bce887f5 92 ,fCuttrackNegNcls(0)
93 ,fCuttrackPosNcls(0)
94 ,fCutPostrackRap(0)
95 ,fCutNegtrackRap(0)
96 ,fCutRap(0)
97 ,fCutPostrackEta(0)
98 ,fCutNegtrackEta(0)
99 ,fCutEta(0)
100 ,fCutV0cosPointAngle(0)
bce887f5 101 ,fKinkDaughters(0)
102 ,fRequireTPCRefit(0)
103 ,fCutArmenteros(0)
104 ,fCutV0DecayMin(0)
105 ,fCutV0DecayMax(0)
106 ,fCutV0totMom(0)
107 ,fCutDcaV0Daughters(0)
108 ,fCutDcaPosToPrimVertex(0)
109 ,fCutDcaNegToPrimVertex(0)
110 ,fCutV0RadiusMin(0)
111 ,fCutV0RadiusMax(0)
112 ,fCutBetheBloch(0)
113 ,fCutRatio(0)
114 ,fK0Type(0)
96c271c1 115 ,fFilterMaskK0(0)
116 ,fListK0s(0)
bce887f5 117 ,fPIDResponse(0)
96c271c1 118 ,fV0QAK0(0)
119 ,fFFHistosRecCutsK0Evt(0)
cc096464 120 //,fFFHistosIMK0AllEvt(0)
121 //,fFFHistosIMK0Jet(0)
122 //,fFFHistosIMK0Cone(0)
bce887f5 123 ,fLaType(0)
124 ,fFilterMaskLa(0)
125 ,fListLa(0)
cc096464 126 // ,fFFHistosIMLaAllEvt(0)
127 // ,fFFHistosIMLaJet(0)
128 //,fFFHistosIMLaCone(0)
bce887f5 129 ,fALaType(0)
130 ,fFilterMaskALa(0)
131 ,fListALa(0)
132 ,fListFeeddownLaCand(0)
133 ,fListFeeddownALaCand(0)
134 ,jetConeFDLalist(0)
135 ,jetConeFDALalist(0)
136 ,fListMCgenK0s(0)
137 ,fListMCgenLa(0)
138 ,fListMCgenALa(0)
139 ,fListMCgenK0sCone(0)
140 ,fListMCgenLaCone(0)
141 ,fListMCgenALaCone(0)
142 ,IsArmenterosSelected(0)
cc096464 143 // ,fFFHistosIMALaAllEvt(0)
144 // ,fFFHistosIMALaJet(0)
145 // ,fFFHistosIMALaCone(0)
bce887f5 146 ,fFFIMNBinsJetPt(0)
96c271c1 147 ,fFFIMJetPtMin(0)
148 ,fFFIMJetPtMax(0)
149 ,fFFIMNBinsInvM(0)
150 ,fFFIMInvMMin(0)
151 ,fFFIMInvMMax(0)
152 ,fFFIMNBinsPt(0)
153 ,fFFIMPtMin(0)
154 ,fFFIMPtMax(0)
155 ,fFFIMNBinsXi(0)
156 ,fFFIMXiMin(0)
157 ,fFFIMXiMax(0)
158 ,fFFIMNBinsZ(0)
159 ,fFFIMZMin(0)
160 ,fFFIMZMax(0)
bce887f5 161 ,fFFIMLaNBinsJetPt(0)
162 ,fFFIMLaJetPtMin(0)
163 ,fFFIMLaJetPtMax(0)
164 ,fFFIMLaNBinsInvM(0)
165 ,fFFIMLaInvMMin(0)
166 ,fFFIMLaInvMMax(0)
167 ,fFFIMLaNBinsPt(0)
168 ,fFFIMLaPtMin(0)
169 ,fFFIMLaPtMax(0)
170 ,fFFIMLaNBinsXi(0)
171 ,fFFIMLaXiMin(0)
172 ,fFFIMLaXiMax(0)
173 ,fFFIMLaNBinsZ(0)
174 ,fFFIMLaZMin(0)
175 ,fFFIMLaZMax(0)
bce887f5 176 ,fh1EvtAllCent(0)
177 ,fh1Evt(0)
96c271c1 178 ,fh1K0Mult(0)
179 ,fh1dPhiJetK0(0)
bce887f5 180 ,fh1LaMult(0)
181 ,fh1dPhiJetLa(0)
182 ,fh1ALaMult(0)
183 ,fh1dPhiJetALa(0)
184 ,fh1JetEta(0)
185 ,fh1JetPhi(0)
186 ,fh2JetEtaPhi(0)
cc096464 187 //,fh1V0JetPt(0)
188 ,fh1IMK0Cone(0)
189 ,fh1IMLaCone(0)
190 ,fh1IMALaCone(0)
bce887f5 191 ,fh2FFJetTrackEta(0)
cc096464 192 //,fh1trackPosNCls(0)
193 //,fh1trackNegNCls(0)
bce887f5 194 ,fh1trackPosRap(0)
195 ,fh1trackNegRap(0)
cc096464 196 //,fh1V0Rap(0)
bce887f5 197 ,fh1trackPosEta(0)
198 ,fh1trackNegEta(0)
199 ,fh1V0Eta(0)
cc096464 200 //,fh1V0totMom(0)
8bde4137 201 ,fh1CosPointAngle(0)
bce887f5 202 ,fh1DecayLengthV0(0)
203 ,fh2ProperLifetimeK0sVsPtBeforeCut(0)
204 ,fh2ProperLifetimeK0sVsPtAfterCut(0)
bce887f5 205 ,fh1V0Radius(0)
206 ,fh1DcaV0Daughters(0)
207 ,fh1DcaPosToPrimVertex(0)
208 ,fh1DcaNegToPrimVertex(0)
209 ,fh2ArmenterosBeforeCuts(0)
210 ,fh2ArmenterosAfterCuts(0)
bce887f5 211 ,fh2BBLaPos(0)
212 ,fh2BBLaNeg(0)
bce887f5 213 ,fh1PosDaughterCharge(0)
214 ,fh1NegDaughterCharge(0)
215 ,fh1PtMCK0s(0)
216 ,fh1PtMCLa(0)
217 ,fh1PtMCALa(0)
218 ,fh1EtaK0s(0)
219 ,fh1EtaLa(0)
220 ,fh1EtaALa(0)
dde76689 221 ,fh1RC(0)
222 ,fh1RCBiasK0(0)
223 ,fh1RCBiasLa(0)
224 ,fh1RCBiasALa(0)
225 ,fh1MCC(0)
226 ,fh1OC(0)
227 ,fh1NJ(0)
cc096464 228 ,fhnInvMassEtaTrackPtK0s(0)
229 ,fhnInvMassEtaTrackPtLa(0)
230 ,fhnInvMassEtaTrackPtALa(0)
bce887f5 231 ,fh1TrackMultCone(0)
8bde4137 232 ,fh2TrackMultCone(0)
2e400c0d 233 ,fhnNJK0(0)
234 ,fhnNJLa(0)
235 ,fhnNJALa(0)
a6ee5cab 236 // ,fh2MCgenK0Cone(0)
237 // ,fh2MCgenLaCone(0)
238 // ,fh2MCgenALaCone(0)
239 // ,fh2MCEtagenK0Cone(0)
240 // ,fh2MCEtagenLaCone(0)
241 // ,fh2MCEtagenALaCone(0)
242 ,fh2CorrHijingLaProton(0)
243 ,fh2CorrInjectLaProton(0)
244 ,fh2CorrHijingALaAProton(0)
245 ,fh2CorrInjectALaAProton(0)
cc096464 246 ,fh1IMK0ConeSmear(0)
247 ,fh1IMLaConeSmear(0)
248 ,fh1IMALaConeSmear(0)
a6ee5cab 249 ,fh2MCEtaVsPtHijingLa(0)
250 ,fh2MCEtaVsPtInjectLa(0)
251 ,fh2MCEtaVsPtHijingALa(0)
252 ,fh2MCEtaVsPtInjectALa(0)
df9b7345 253 ,fhnrecMCHijingLaIncl(0)
254 ,fhnrecMCHijingLaCone(0)
255 ,fhnrecMCHijingALaIncl(0)
256 ,fhnrecMCHijingALaCone(0)
257 ,fhnrecMCInjectLaIncl(0)
258 ,fhnrecMCInjectLaCone(0)
259 ,fhnrecMCInjectALaIncl(0)
260 ,fhnrecMCInjectALaCone(0)
cc096464 261 ,fhnMCrecK0Cone(0)
262 ,fhnMCrecLaCone(0)
263 ,fhnMCrecALaCone(0)
264 ,fhnMCrecK0ConeSmear(0)
265 ,fhnMCrecLaConeSmear(0)
266 ,fhnMCrecALaConeSmear(0)
267 ,fhnK0sSecContinCone(0)
268 ,fhnLaSecContinCone(0)
269 ,fhnALaSecContinCone(0)
3ed9f288 270 ,fhnK0sIncl(0)
271 ,fhnK0sCone(0)
272 ,fhnLaIncl(0)
273 ,fhnLaCone(0)
274 ,fhnALaIncl(0)
275 ,fhnALaCone(0)
cc096464 276 ,fhnK0sPC(0)
277 ,fhnLaPC(0)
278 ,fhnALaPC(0)
279 ,fhnK0sMCC(0)
280 ,fhnLaMCC(0)
281 ,fhnALaMCC(0)
282 ,fhnK0sRC(0)
283 ,fhnLaRC(0)
284 ,fhnALaRC(0)
dde76689 285 ,fhnK0sRCBias(0)
286 ,fhnLaRCBias(0)
287 ,fhnALaRCBias(0)
cc096464 288 ,fhnK0sOC(0)
289 ,fhnLaOC(0)
290 ,fhnALaOC(0)
291 ,fh1AreaExcluded(0)
a6ffe507 292 ,fh1MedianEta(0)
293 ,fh1JetPtMedian(0)
bce887f5 294 ,fh1MCMultiplicityPrimary(0)
295 ,fh1MCMultiplicityTracks(0)
cc096464 296 ,fhnFeedDownLa(0)
297 ,fhnFeedDownALa(0)
298 ,fhnFeedDownLaCone(0)
299 ,fhnFeedDownALaCone(0)
bce887f5 300 ,fh1MCProdRadiusK0s(0)
301 ,fh1MCProdRadiusLambda(0)
302 ,fh1MCProdRadiusAntiLambda(0)
303 ,fh1MCPtV0s(0)
304 ,fh1MCPtK0s(0)
305 ,fh1MCPtLambda(0)
306 ,fh1MCPtAntiLambda(0)
307 ,fh1MCXiPt(0)
308 ,fh1MCXibarPt(0)
309 ,fh2MCEtaVsPtK0s(0)
310 ,fh2MCEtaVsPtLa(0)
311 ,fh2MCEtaVsPtALa(0)
df9b7345 312 //,fh1MCRapK0s(0)
313 //,fh1MCRapLambda(0)
314 //,fh1MCRapAntiLambda(0)
bce887f5 315 ,fh1MCEtaAllK0s(0)
316 ,fh1MCEtaK0s(0)
317 ,fh1MCEtaLambda(0)
318 ,fh1MCEtaAntiLambda(0)
319
96c271c1 320{
321 // default constructor
322}
9b2de807 323
96c271c1 324//__________________________________________________________________________________________
325AliAnalysisTaskJetChem::AliAnalysisTaskJetChem(const char *name)
326 : AliAnalysisTaskFragmentationFunction(name)
bce887f5 327
cc096464 328 ,fRandom(0)
bce887f5 329 ,fAnalysisMC(0)
330 ,fDeltaVertexZ(0)
a6ffe507 331 ,fCutjetEta(0)
bce887f5 332 ,fCuttrackNegNcls(0)
333 ,fCuttrackPosNcls(0)
334 ,fCutPostrackRap(0)
335 ,fCutNegtrackRap(0)
336 ,fCutRap(0)
337 ,fCutPostrackEta(0)
338 ,fCutNegtrackEta(0)
339 ,fCutEta(0)
340 ,fCutV0cosPointAngle(0)
bce887f5 341 ,fKinkDaughters(0)
342 ,fRequireTPCRefit(0)
343 ,fCutArmenteros(0)
344 ,fCutV0DecayMin(0)
345 ,fCutV0DecayMax(0)
346 ,fCutV0totMom(0)
347 ,fCutDcaV0Daughters(0)
348 ,fCutDcaPosToPrimVertex(0)
349 ,fCutDcaNegToPrimVertex(0)
350 ,fCutV0RadiusMin(0)
351 ,fCutV0RadiusMax(0)
352 ,fCutBetheBloch(0)
353 ,fCutRatio(0)
96c271c1 354 ,fK0Type(0)
355 ,fFilterMaskK0(0)
356 ,fListK0s(0)
bce887f5 357 ,fPIDResponse(0)
96c271c1 358 ,fV0QAK0(0)
359 ,fFFHistosRecCutsK0Evt(0)
cc096464 360 //,fFFHistosIMK0AllEvt(0)
361 //,fFFHistosIMK0Jet(0)
362 //,fFFHistosIMK0Cone(0)
bce887f5 363 ,fLaType(0)
364 ,fFilterMaskLa(0)
365 ,fListLa(0)
cc096464 366 //,fFFHistosIMLaAllEvt(0)
367 //,fFFHistosIMLaJet(0)
368 //,fFFHistosIMLaCone(0)
bce887f5 369 ,fALaType(0)
370 ,fFilterMaskALa(0)
371 ,fListALa(0)
372 ,fListFeeddownLaCand(0)
373 ,fListFeeddownALaCand(0)
374 ,jetConeFDLalist(0)
375 ,jetConeFDALalist(0)
376 ,fListMCgenK0s(0)
377 ,fListMCgenLa(0)
378 ,fListMCgenALa(0)
379 ,fListMCgenK0sCone(0)
380 ,fListMCgenLaCone(0)
381 ,fListMCgenALaCone(0)
382 ,IsArmenterosSelected(0)
cc096464 383 //,fFFHistosIMALaAllEvt(0)
384 //,fFFHistosIMALaJet(0)
385 // ,fFFHistosIMALaCone(0)
96c271c1 386 ,fFFIMNBinsJetPt(0)
387 ,fFFIMJetPtMin(0)
388 ,fFFIMJetPtMax(0)
389 ,fFFIMNBinsInvM(0)
390 ,fFFIMInvMMin(0)
391 ,fFFIMInvMMax(0)
392 ,fFFIMNBinsPt(0)
393 ,fFFIMPtMin(0)
394 ,fFFIMPtMax(0)
395 ,fFFIMNBinsXi(0)
396 ,fFFIMXiMin(0)
397 ,fFFIMXiMax(0)
398 ,fFFIMNBinsZ(0)
399 ,fFFIMZMin(0)
bce887f5 400 ,fFFIMZMax(0)
401 ,fFFIMLaNBinsJetPt(0)
402 ,fFFIMLaJetPtMin(0)
403 ,fFFIMLaJetPtMax(0)
404 ,fFFIMLaNBinsInvM(0)
405 ,fFFIMLaInvMMin(0)
406 ,fFFIMLaInvMMax(0)
407 ,fFFIMLaNBinsPt(0)
408 ,fFFIMLaPtMin(0)
409 ,fFFIMLaPtMax(0)
410 ,fFFIMLaNBinsXi(0)
411 ,fFFIMLaXiMin(0)
412 ,fFFIMLaXiMax(0)
413 ,fFFIMLaNBinsZ(0)
414 ,fFFIMLaZMin(0)
415 ,fFFIMLaZMax(0)
bce887f5 416 ,fh1EvtAllCent(0)
417 ,fh1Evt(0)
96c271c1 418 ,fh1K0Mult(0)
bce887f5 419 ,fh1dPhiJetK0(0)
420 ,fh1LaMult(0)
421 ,fh1dPhiJetLa(0)
422 ,fh1ALaMult(0)
423 ,fh1dPhiJetALa(0)
424 ,fh1JetEta(0)
425 ,fh1JetPhi(0)
426 ,fh2JetEtaPhi(0)
cc096464 427 // ,fh1V0JetPt(0)
428 ,fh1IMK0Cone(0)
429 ,fh1IMLaCone(0)
430 ,fh1IMALaCone(0)
bce887f5 431 ,fh2FFJetTrackEta(0)
cc096464 432 // ,fh1trackPosNCls(0)
433 // ,fh1trackNegNCls(0)
bce887f5 434 ,fh1trackPosRap(0)
435 ,fh1trackNegRap(0)
cc096464 436 //,fh1V0Rap(0)
bce887f5 437 ,fh1trackPosEta(0)
438 ,fh1trackNegEta(0)
439 ,fh1V0Eta(0)
cc096464 440 // ,fh1V0totMom(0)
bce887f5 441 ,fh1CosPointAngle(0)
bce887f5 442 ,fh1DecayLengthV0(0)
443 ,fh2ProperLifetimeK0sVsPtBeforeCut(0)
444 ,fh2ProperLifetimeK0sVsPtAfterCut(0)
bce887f5 445 ,fh1V0Radius(0)
446 ,fh1DcaV0Daughters(0)
447 ,fh1DcaPosToPrimVertex(0)
448 ,fh1DcaNegToPrimVertex(0)
449 ,fh2ArmenterosBeforeCuts(0)
450 ,fh2ArmenterosAfterCuts(0)
bce887f5 451 ,fh2BBLaPos(0)
452 ,fh2BBLaNeg(0)
bce887f5 453 ,fh1PosDaughterCharge(0)
454 ,fh1NegDaughterCharge(0)
455 ,fh1PtMCK0s(0)
456 ,fh1PtMCLa(0)
457 ,fh1PtMCALa(0)
458 ,fh1EtaK0s(0)
459 ,fh1EtaLa(0)
460 ,fh1EtaALa(0)
dde76689 461 ,fh1RC(0)
462 ,fh1RCBiasK0(0)
463 ,fh1RCBiasLa(0)
464 ,fh1RCBiasALa(0)
465 ,fh1MCC(0)
466 ,fh1OC(0)
467 ,fh1NJ(0)
cc096464 468 ,fhnInvMassEtaTrackPtK0s(0)
469 ,fhnInvMassEtaTrackPtLa(0)
470 ,fhnInvMassEtaTrackPtALa(0)
bce887f5 471 ,fh1TrackMultCone(0)
472 ,fh2TrackMultCone(0)
2e400c0d 473 ,fhnNJK0(0)
474 ,fhnNJLa(0)
475 ,fhnNJALa(0)
a6ee5cab 476 //,fh2MCgenK0Cone(0)
477 //,fh2MCgenLaCone(0)
478 //,fh2MCgenALaCone(0)
479 //,fh2MCEtagenK0Cone(0)
480 //,fh2MCEtagenLaCone(0)
481 //,fh2MCEtagenALaCone(0)
482 ,fh2CorrHijingLaProton(0)
483 ,fh2CorrInjectLaProton(0)
484 ,fh2CorrHijingALaAProton(0)
485 ,fh2CorrInjectALaAProton(0)
cc096464 486 ,fh1IMK0ConeSmear(0)
487 ,fh1IMLaConeSmear(0)
a6ee5cab 488 ,fh1IMALaConeSmear(0)
489 ,fh2MCEtaVsPtHijingLa(0)
490 ,fh2MCEtaVsPtInjectLa(0)
491 ,fh2MCEtaVsPtHijingALa(0)
492 ,fh2MCEtaVsPtInjectALa(0)
df9b7345 493 ,fhnrecMCHijingLaIncl(0)
494 ,fhnrecMCHijingLaCone(0)
495 ,fhnrecMCHijingALaIncl(0)
496 ,fhnrecMCHijingALaCone(0)
497 ,fhnrecMCInjectLaIncl(0)
498 ,fhnrecMCInjectLaCone(0)
499 ,fhnrecMCInjectALaIncl(0)
500 ,fhnrecMCInjectALaCone(0)
cc096464 501 ,fhnMCrecK0Cone(0)
502 ,fhnMCrecLaCone(0)
503 ,fhnMCrecALaCone(0)
504 ,fhnMCrecK0ConeSmear(0)
505 ,fhnMCrecLaConeSmear(0)
506 ,fhnMCrecALaConeSmear(0)
507 ,fhnK0sSecContinCone(0)
508 ,fhnLaSecContinCone(0)
509 ,fhnALaSecContinCone(0)
3ed9f288 510 ,fhnK0sIncl(0)
511 ,fhnK0sCone(0)
512 ,fhnLaIncl(0)
513 ,fhnLaCone(0)
514 ,fhnALaIncl(0)
515 ,fhnALaCone(0)
cc096464 516 ,fhnK0sPC(0)
517 ,fhnLaPC(0)
518 ,fhnALaPC(0)
519 ,fhnK0sMCC(0)
520 ,fhnLaMCC(0)
521 ,fhnALaMCC(0)
522 ,fhnK0sRC(0)
523 ,fhnLaRC(0)
524 ,fhnALaRC(0)
dde76689 525 ,fhnK0sRCBias(0)
526 ,fhnLaRCBias(0)
527 ,fhnALaRCBias(0)
cc096464 528 ,fhnK0sOC(0)
529 ,fhnLaOC(0)
530 ,fhnALaOC(0)
531 ,fh1AreaExcluded(0)
a6ffe507 532 ,fh1MedianEta(0)
533 ,fh1JetPtMedian(0)
bce887f5 534 ,fh1MCMultiplicityPrimary(0)
535 ,fh1MCMultiplicityTracks(0)
cc096464 536 ,fhnFeedDownLa(0)
537 ,fhnFeedDownALa(0)
538 ,fhnFeedDownLaCone(0)
539 ,fhnFeedDownALaCone(0)
bce887f5 540 ,fh1MCProdRadiusK0s(0)
541 ,fh1MCProdRadiusLambda(0)
542 ,fh1MCProdRadiusAntiLambda(0)
543 ,fh1MCPtV0s(0)
544 ,fh1MCPtK0s(0)
545 ,fh1MCPtLambda(0)
546 ,fh1MCPtAntiLambda(0)
547 ,fh1MCXiPt(0)
548 ,fh1MCXibarPt(0)
549 ,fh2MCEtaVsPtK0s(0)
550 ,fh2MCEtaVsPtLa(0)
551 ,fh2MCEtaVsPtALa(0)
df9b7345 552 //,fh1MCRapK0s(0)
553 //,fh1MCRapLambda(0)
554 //,fh1MCRapAntiLambda(0)
bce887f5 555 ,fh1MCEtaAllK0s(0)
556 ,fh1MCEtaK0s(0)
557 ,fh1MCEtaLambda(0)
558 ,fh1MCEtaAntiLambda(0)
559
560
96c271c1 561{
562 // constructor
563
564 DefineOutput(1,TList::Class());
565}
9b2de807 566
96c271c1 567//__________________________________________________________________________________________________________________________
568AliAnalysisTaskJetChem::AliAnalysisTaskJetChem(const AliAnalysisTaskJetChem &copy)
569 : AliAnalysisTaskFragmentationFunction()
bce887f5 570
cc096464 571 ,fRandom(copy.fRandom)
bce887f5 572 ,fAnalysisMC(copy.fAnalysisMC)
573 ,fDeltaVertexZ(copy.fDeltaVertexZ)
a6ffe507 574 ,fCutjetEta(copy.fCutjetEta)
bce887f5 575 ,fCuttrackNegNcls(copy.fCuttrackNegNcls)
576 ,fCuttrackPosNcls(copy.fCuttrackPosNcls)
577 ,fCutPostrackRap(copy.fCutPostrackRap)
578 ,fCutNegtrackRap(copy.fCutNegtrackRap)
579 ,fCutRap(copy.fCutRap)
580 ,fCutPostrackEta(copy.fCutPostrackEta)
581 ,fCutNegtrackEta(copy.fCutNegtrackEta)
582 ,fCutEta(copy.fCutEta)
583 ,fCutV0cosPointAngle(copy.fCutV0cosPointAngle)
bce887f5 584 ,fKinkDaughters(copy.fKinkDaughters)
585 ,fRequireTPCRefit(copy.fRequireTPCRefit)
586 ,fCutArmenteros(copy.fCutArmenteros)
587 ,fCutV0DecayMin(copy.fCutV0DecayMin)
588 ,fCutV0DecayMax(copy.fCutV0DecayMax)
589 ,fCutV0totMom(copy.fCutV0totMom)
590 ,fCutDcaV0Daughters(copy.fCutDcaV0Daughters)
591 ,fCutDcaPosToPrimVertex(copy.fCutDcaPosToPrimVertex)
592 ,fCutDcaNegToPrimVertex(copy.fCutDcaNegToPrimVertex)
593 ,fCutV0RadiusMin(copy.fCutV0RadiusMin)
594 ,fCutV0RadiusMax(copy.fCutV0RadiusMax)
595 ,fCutBetheBloch(copy.fCutBetheBloch)
596 ,fCutRatio(copy.fCutRatio)
597 ,fK0Type(copy.fK0Type)
96c271c1 598 ,fFilterMaskK0(copy.fFilterMaskK0)
599 ,fListK0s(copy.fListK0s)
bce887f5 600 ,fPIDResponse(copy.fPIDResponse)
96c271c1 601 ,fV0QAK0(copy.fV0QAK0)
602 ,fFFHistosRecCutsK0Evt(copy.fFFHistosRecCutsK0Evt)
cc096464 603 //,fFFHistosIMK0AllEvt(copy.fFFHistosIMK0AllEvt)
604 //,fFFHistosIMK0Jet(copy.fFFHistosIMK0Jet)
605 //,fFFHistosIMK0Cone(copy.fFFHistosIMK0Cone)
bce887f5 606 ,fLaType(copy.fLaType)
607 ,fFilterMaskLa(copy.fFilterMaskLa)
608 ,fListLa(copy.fListLa)
cc096464 609 //,fFFHistosIMLaAllEvt(copy.fFFHistosIMLaAllEvt)
610 //,fFFHistosIMLaJet(copy.fFFHistosIMLaJet)
611 //,fFFHistosIMLaCone(copy.fFFHistosIMLaCone)
bce887f5 612 ,fALaType(copy.fALaType)
613 ,fFilterMaskALa(copy.fFilterMaskALa)
614 ,fListALa(copy.fListALa)
615 ,fListFeeddownLaCand(copy.fListFeeddownLaCand)
616 ,fListFeeddownALaCand(copy.fListFeeddownALaCand)
617 ,jetConeFDLalist(copy.jetConeFDLalist)
618 ,jetConeFDALalist(copy.jetConeFDALalist)
619 ,fListMCgenK0s(copy.fListMCgenK0s)
620 ,fListMCgenLa(copy.fListMCgenLa)
621 ,fListMCgenALa(copy.fListMCgenALa)
622 ,fListMCgenK0sCone(copy.fListMCgenK0sCone)
623 ,fListMCgenLaCone(copy.fListMCgenLaCone)
624 ,fListMCgenALaCone(copy.fListMCgenALaCone)
625 ,IsArmenterosSelected(copy.IsArmenterosSelected)
cc096464 626 //,fFFHistosIMALaAllEvt(copy.fFFHistosIMALaAllEvt)
627 //,fFFHistosIMALaJet(copy.fFFHistosIMALaJet)
628 //,fFFHistosIMALaCone(copy.fFFHistosIMALaCone)
bce887f5 629 ,fFFIMNBinsJetPt(copy.fFFIMNBinsJetPt)
96c271c1 630 ,fFFIMJetPtMin(copy.fFFIMJetPtMin)
631 ,fFFIMJetPtMax(copy.fFFIMJetPtMax)
632 ,fFFIMNBinsInvM(copy.fFFIMNBinsInvM)
633 ,fFFIMInvMMin(copy.fFFIMInvMMin)
634 ,fFFIMInvMMax(copy.fFFIMInvMMax)
635 ,fFFIMNBinsPt(copy.fFFIMNBinsPt)
636 ,fFFIMPtMin(copy.fFFIMPtMin)
637 ,fFFIMPtMax(copy.fFFIMPtMax)
638 ,fFFIMNBinsXi(copy.fFFIMNBinsXi)
639 ,fFFIMXiMin(copy.fFFIMXiMin)
640 ,fFFIMXiMax(copy.fFFIMXiMax)
641 ,fFFIMNBinsZ(copy.fFFIMNBinsZ)
642 ,fFFIMZMin(copy.fFFIMZMin)
643 ,fFFIMZMax(copy.fFFIMZMax)
bce887f5 644 ,fFFIMLaNBinsJetPt(copy.fFFIMLaNBinsJetPt)
645 ,fFFIMLaJetPtMin(copy.fFFIMLaJetPtMin)
646 ,fFFIMLaJetPtMax(copy.fFFIMLaJetPtMax)
647 ,fFFIMLaNBinsInvM(copy.fFFIMLaNBinsInvM)
648 ,fFFIMLaInvMMin(copy.fFFIMLaInvMMin)
649 ,fFFIMLaInvMMax(copy.fFFIMLaInvMMax)
650 ,fFFIMLaNBinsPt(copy.fFFIMLaNBinsPt)
651 ,fFFIMLaPtMin(copy.fFFIMLaPtMin)
652 ,fFFIMLaPtMax(copy.fFFIMLaPtMax)
653 ,fFFIMLaNBinsXi(copy.fFFIMLaNBinsXi)
654 ,fFFIMLaXiMin(copy.fFFIMLaXiMin)
655 ,fFFIMLaXiMax(copy.fFFIMLaXiMax)
656 ,fFFIMLaNBinsZ(copy.fFFIMLaNBinsZ)
657 ,fFFIMLaZMin(copy.fFFIMLaZMin)
658 ,fFFIMLaZMax(copy.fFFIMLaZMax)
bce887f5 659 ,fh1EvtAllCent(copy.fh1EvtAllCent)
660 ,fh1Evt(copy.fh1Evt)
96c271c1 661 ,fh1K0Mult(copy.fh1K0Mult)
662 ,fh1dPhiJetK0(copy.fh1dPhiJetK0)
bce887f5 663 ,fh1LaMult(copy.fh1LaMult)
664 ,fh1dPhiJetLa(copy.fh1dPhiJetLa)
665 ,fh1ALaMult(copy.fh1ALaMult)
666 ,fh1dPhiJetALa(copy.fh1dPhiJetALa)
667 ,fh1JetEta(copy.fh1JetEta)
668 ,fh1JetPhi(copy.fh1JetPhi)
669 ,fh2JetEtaPhi(copy.fh2JetEtaPhi)
cc096464 670 //,fh1V0JetPt(copy.fh1V0JetPt)
671 ,fh1IMK0Cone(copy.fh1IMK0Cone)
672 ,fh1IMLaCone(copy.fh1IMLaCone)
673 ,fh1IMALaCone(copy.fh1IMALaCone)
bce887f5 674 ,fh2FFJetTrackEta(copy.fh2FFJetTrackEta)
cc096464 675 //,fh1trackPosNCls(copy.fh1trackPosNCls)
676 //,fh1trackNegNCls(copy.fh1trackNegNCls)
bce887f5 677 ,fh1trackPosRap(copy.fh1trackPosRap)
678 ,fh1trackNegRap(copy.fh1trackNegRap)
cc096464 679 //,fh1V0Rap(copy.fh1V0Rap)
bce887f5 680 ,fh1trackPosEta(copy.fh1trackPosEta)
681 ,fh1trackNegEta(copy.fh1trackNegEta)
682 ,fh1V0Eta(copy.fh1V0Eta)
cc096464 683 //,fh1V0totMom(copy.fh1V0totMom)
8bde4137 684 ,fh1CosPointAngle(copy.fh1CosPointAngle)
bce887f5 685 ,fh1DecayLengthV0(copy.fh1DecayLengthV0)
686 ,fh2ProperLifetimeK0sVsPtBeforeCut(copy.fh2ProperLifetimeK0sVsPtBeforeCut)
687 ,fh2ProperLifetimeK0sVsPtAfterCut(copy.fh2ProperLifetimeK0sVsPtAfterCut)
bce887f5 688 ,fh1V0Radius(copy.fh1V0Radius)
689 ,fh1DcaV0Daughters(copy.fh1DcaV0Daughters)
690 ,fh1DcaPosToPrimVertex(copy.fh1DcaPosToPrimVertex)
691 ,fh1DcaNegToPrimVertex(copy.fh1DcaNegToPrimVertex)
692 ,fh2ArmenterosBeforeCuts(copy.fh2ArmenterosBeforeCuts)
693 ,fh2ArmenterosAfterCuts(copy.fh2ArmenterosAfterCuts)
bce887f5 694 ,fh2BBLaPos(copy.fh2BBLaPos)
695 ,fh2BBLaNeg(copy.fh2BBLaPos)
bce887f5 696 ,fh1PosDaughterCharge(copy.fh1PosDaughterCharge)
697 ,fh1NegDaughterCharge(copy.fh1NegDaughterCharge)
698 ,fh1PtMCK0s(copy.fh1PtMCK0s)
699 ,fh1PtMCLa(copy.fh1PtMCLa)
700 ,fh1PtMCALa(copy.fh1PtMCALa)
701 ,fh1EtaK0s(copy.fh1EtaK0s)
702 ,fh1EtaLa(copy.fh1EtaLa)
703 ,fh1EtaALa(copy.fh1EtaALa)
dde76689 704 ,fh1RC(copy.fh1RC)
705 ,fh1RCBiasK0(copy.fh1RCBiasK0)
706 ,fh1RCBiasLa(copy.fh1RCBiasLa)
707 ,fh1RCBiasALa(copy.fh1RCBiasALa)
708 ,fh1MCC(copy.fh1MCC)
709 ,fh1OC(copy.fh1OC)
710 ,fh1NJ(copy.fh1NJ)
cc096464 711 ,fhnInvMassEtaTrackPtK0s(copy.fhnInvMassEtaTrackPtK0s)
712 ,fhnInvMassEtaTrackPtLa(copy.fhnInvMassEtaTrackPtLa)
713 ,fhnInvMassEtaTrackPtALa(copy.fhnInvMassEtaTrackPtALa)
bce887f5 714 ,fh1TrackMultCone(copy.fh1TrackMultCone)
715 ,fh2TrackMultCone(copy.fh2TrackMultCone)
2e400c0d 716 ,fhnNJK0(copy.fhnNJK0)
717 ,fhnNJLa(copy.fhnNJLa)
718 ,fhnNJALa(copy.fhnNJALa)
a6ee5cab 719 //,fh2MCgenK0Cone(copy.fh2MCgenK0Cone)
720 //,fh2MCgenLaCone(copy.fh2MCgenLaCone)
721 //,fh2MCgenALaCone(copy.fh2MCgenALaCone)
722 //,fh2MCEtagenK0Cone(copy.fh2MCEtagenK0Cone)
723 //,fh2MCEtagenLaCone(copy.fh2MCEtagenLaCone)
724 //,fh2MCEtagenALaCone(copy.fh2MCEtagenALaCone)
725 ,fh2CorrHijingLaProton(copy.fh2CorrHijingLaProton)
726 ,fh2CorrInjectLaProton(copy.fh2CorrInjectLaProton)
727 ,fh2CorrHijingALaAProton(copy.fh2CorrHijingALaAProton)
728 ,fh2CorrInjectALaAProton(copy.fh2CorrInjectALaAProton)
cc096464 729 ,fh1IMK0ConeSmear(copy.fh1IMK0ConeSmear)
730 ,fh1IMLaConeSmear(copy.fh1IMLaConeSmear)
df9b7345 731 ,fh1IMALaConeSmear(copy.fh1IMALaConeSmear)
a6ee5cab 732 ,fh2MCEtaVsPtHijingLa(copy.fh2MCEtaVsPtHijingLa)
733 ,fh2MCEtaVsPtInjectLa(copy.fh2MCEtaVsPtInjectLa)
734 ,fh2MCEtaVsPtHijingALa(copy.fh2MCEtaVsPtHijingALa)
735 ,fh2MCEtaVsPtInjectALa(copy.fh2MCEtaVsPtInjectALa)
df9b7345 736 ,fhnrecMCHijingLaIncl(copy.fhnrecMCHijingLaIncl)
737 ,fhnrecMCHijingLaCone(copy.fhnrecMCHijingLaCone)
738 ,fhnrecMCHijingALaIncl(copy.fhnrecMCHijingALaIncl)
739 ,fhnrecMCHijingALaCone(copy.fhnrecMCHijingALaCone)
740 ,fhnrecMCInjectLaIncl(copy.fhnrecMCInjectLaIncl)
741 ,fhnrecMCInjectLaCone(copy.fhnrecMCInjectLaCone)
742 ,fhnrecMCInjectALaIncl(copy.fhnrecMCInjectALaIncl)
743 ,fhnrecMCInjectALaCone(copy.fhnrecMCInjectALaCone)
cc096464 744 ,fhnMCrecK0Cone(copy.fhnMCrecK0Cone)
745 ,fhnMCrecLaCone(copy.fhnMCrecLaCone)
746 ,fhnMCrecALaCone(copy.fhnMCrecALaCone)
747 ,fhnMCrecK0ConeSmear(copy.fhnMCrecK0ConeSmear)
748 ,fhnMCrecLaConeSmear(copy.fhnMCrecLaConeSmear)
749 ,fhnMCrecALaConeSmear(copy.fhnMCrecALaConeSmear)
750 ,fhnK0sSecContinCone(copy.fhnK0sSecContinCone)
751 ,fhnLaSecContinCone(copy.fhnLaSecContinCone)
752 ,fhnALaSecContinCone(copy.fhnALaSecContinCone)
3ed9f288 753 ,fhnK0sIncl(copy.fhnK0sIncl)
754 ,fhnK0sCone(copy.fhnK0sCone)
755 ,fhnLaIncl(copy.fhnLaIncl)
756 ,fhnLaCone(copy.fhnLaCone)
757 ,fhnALaIncl(copy.fhnALaIncl)
758 ,fhnALaCone(copy.fhnALaCone)
cc096464 759 ,fhnK0sPC(copy.fhnK0sPC)
760 ,fhnLaPC(copy.fhnLaPC)
761 ,fhnALaPC(copy.fhnALaPC)
762 ,fhnK0sMCC(copy.fhnK0sMCC)
763 ,fhnLaMCC(copy.fhnLaMCC)
764 ,fhnALaMCC(copy.fhnALaMCC)
765 ,fhnK0sRC(copy.fhnK0sRC)
766 ,fhnLaRC(copy.fhnLaRC)
767 ,fhnALaRC(copy.fhnALaRC)
dde76689 768 ,fhnK0sRCBias(copy.fhnK0sRCBias)
769 ,fhnLaRCBias(copy.fhnLaRCBias)
770 ,fhnALaRCBias(copy.fhnALaRCBias)
cc096464 771 ,fhnK0sOC(copy.fhnK0sOC)
772 ,fhnLaOC(copy.fhnLaOC)
773 ,fhnALaOC(copy.fhnALaOC)
774 ,fh1AreaExcluded(copy.fh1AreaExcluded)
a6ffe507 775 ,fh1MedianEta(copy.fh1MedianEta)
776 ,fh1JetPtMedian(copy.fh1JetPtMedian)
bce887f5 777 ,fh1MCMultiplicityPrimary(copy.fh1MCMultiplicityPrimary)
778 ,fh1MCMultiplicityTracks(copy.fh1MCMultiplicityTracks)
cc096464 779 ,fhnFeedDownLa(copy.fhnFeedDownLa)
780 ,fhnFeedDownALa(copy.fhnFeedDownALa)
781 ,fhnFeedDownLaCone(copy.fhnFeedDownLaCone)
782 ,fhnFeedDownALaCone(copy.fhnFeedDownALaCone)
bce887f5 783 ,fh1MCProdRadiusK0s(copy.fh1MCProdRadiusK0s)
784 ,fh1MCProdRadiusLambda(copy.fh1MCProdRadiusLambda)
785 ,fh1MCProdRadiusAntiLambda(copy.fh1MCProdRadiusAntiLambda)
786 ,fh1MCPtV0s(copy.fh1MCPtV0s)
787 ,fh1MCPtK0s(copy.fh1MCPtK0s)
788 ,fh1MCPtLambda(copy.fh1MCPtLambda)
789 ,fh1MCPtAntiLambda(copy.fh1MCPtAntiLambda)
790 ,fh1MCXiPt(copy.fh1MCXiPt)
791 ,fh1MCXibarPt(copy.fh1MCXibarPt)
792 ,fh2MCEtaVsPtK0s(copy.fh2MCEtaVsPtK0s)
793 ,fh2MCEtaVsPtLa(copy.fh2MCEtaVsPtLa)
794 ,fh2MCEtaVsPtALa(copy.fh2MCEtaVsPtALa)
df9b7345 795 //,fh1MCRapK0s(copy.fh1MCRapK0s)
796 //,fh1MCRapLambda(copy.fh1MCRapLambda)
797 //,fh1MCRapAntiLambda(copy.fh1MCRapAntiLambda)
bce887f5 798 ,fh1MCEtaAllK0s(copy.fh1MCEtaAllK0s)
799 ,fh1MCEtaK0s(copy.fh1MCEtaK0s)
800 ,fh1MCEtaLambda(copy.fh1MCEtaLambda)
801 ,fh1MCEtaAntiLambda(copy.fh1MCEtaAntiLambda)
802
96c271c1 803{
804 // copy constructor
805
806}
9b2de807 807
96c271c1 808// _________________________________________________________________________________________________________________________________
809AliAnalysisTaskJetChem& AliAnalysisTaskJetChem::operator=(const AliAnalysisTaskJetChem& o)
810{
811 // assignment
812
813 if(this!=&o){
814 AliAnalysisTaskFragmentationFunction::operator=(o);
815
cc096464 816 fRandom = o.fRandom;
bce887f5 817 fAnalysisMC = o.fAnalysisMC;
818 fDeltaVertexZ = o.fDeltaVertexZ;
a6ffe507 819 fCutjetEta = o.fCutjetEta;
bce887f5 820 fCuttrackNegNcls = o.fCuttrackNegNcls;
821 fCuttrackPosNcls = o.fCuttrackPosNcls;
822 fCutPostrackRap = o.fCutPostrackRap;
823 fCutNegtrackRap = o.fCutNegtrackRap;
824 fCutRap = o.fCutRap;
825 fCutPostrackEta = o.fCutPostrackEta;
826 fCutNegtrackEta = o.fCutNegtrackEta;
827 fCutEta = o.fCutEta;
828 fCutV0cosPointAngle = o.fCutV0cosPointAngle;
bce887f5 829 fKinkDaughters = o.fKinkDaughters;
830 fRequireTPCRefit = o.fRequireTPCRefit;
831 fCutArmenteros = o.fCutArmenteros;
832 fCutV0DecayMin = o.fCutV0DecayMin;
833 fCutV0DecayMax = o.fCutV0DecayMax;
834 fCutV0totMom = o.fCutV0totMom;
835 fCutDcaV0Daughters = o.fCutDcaV0Daughters;
836 fCutDcaPosToPrimVertex = o.fCutDcaPosToPrimVertex;
837 fCutDcaNegToPrimVertex = o.fCutDcaNegToPrimVertex;
838 fCutV0RadiusMin = o.fCutV0RadiusMin;
839 fCutV0RadiusMax = o.fCutV0RadiusMax;
840 fCutBetheBloch = o.fCutBetheBloch;
841 fCutRatio = o.fCutRatio;
96c271c1 842 fK0Type = o.fK0Type;
843 fFilterMaskK0 = o.fFilterMaskK0;
844 fListK0s = o.fListK0s;
bce887f5 845 fPIDResponse = o.fPIDResponse;
96c271c1 846 fV0QAK0 = o.fV0QAK0;
847 fFFHistosRecCutsK0Evt = o.fFFHistosRecCutsK0Evt;
cc096464 848 //fFFHistosIMK0AllEvt = o.fFFHistosIMK0AllEvt;
849 //fFFHistosIMK0Jet = o.fFFHistosIMK0Jet;
850 //fFFHistosIMK0Cone = o.fFFHistosIMK0Cone;
bce887f5 851 fLaType = o.fLaType;
852 fFilterMaskLa = o.fFilterMaskLa;
853 fListLa = o.fListLa;
cc096464 854 //fFFHistosIMLaAllEvt = o.fFFHistosIMLaAllEvt;
855 //fFFHistosIMLaJet = o.fFFHistosIMLaJet;
856 //fFFHistosIMLaCone = o.fFFHistosIMLaCone;
bce887f5 857 fALaType = o.fALaType;
858 fFilterMaskALa = o.fFilterMaskALa;
859 fListFeeddownLaCand = o.fListFeeddownLaCand;
860 fListFeeddownALaCand = o.fListFeeddownALaCand;
861 jetConeFDLalist = o.jetConeFDLalist;
862 jetConeFDALalist = o.jetConeFDALalist;
863 fListMCgenK0s = o.fListMCgenK0s;
864 fListMCgenLa = o.fListMCgenLa;
865 fListMCgenALa = o.fListMCgenALa;
866 fListMCgenK0sCone = o.fListMCgenK0sCone;
867 fListMCgenLaCone = o.fListMCgenLaCone;
868 fListMCgenALaCone = o.fListMCgenALaCone;
869 IsArmenterosSelected = o.IsArmenterosSelected;
cc096464 870 // fFFHistosIMALaAllEvt = o.fFFHistosIMALaAllEvt;
871 // fFFHistosIMALaJet = o.fFFHistosIMALaJet;
872 // fFFHistosIMALaCone = o.fFFHistosIMALaCone;
bce887f5 873 fFFIMNBinsJetPt = o.fFFIMNBinsJetPt;
96c271c1 874 fFFIMJetPtMin = o.fFFIMJetPtMin;
875 fFFIMJetPtMax = o.fFFIMJetPtMax;
876 fFFIMNBinsPt = o.fFFIMNBinsPt;
877 fFFIMPtMin = o.fFFIMPtMin;
878 fFFIMPtMax = o.fFFIMPtMax;
879 fFFIMNBinsXi = o.fFFIMNBinsXi;
880 fFFIMXiMin = o.fFFIMXiMin;
881 fFFIMXiMax = o.fFFIMXiMax;
882 fFFIMNBinsZ = o.fFFIMNBinsZ;
883 fFFIMZMin = o.fFFIMZMin;
bce887f5 884 fFFIMZMax = o.fFFIMZMax;
885 fFFIMLaNBinsJetPt = o.fFFIMLaNBinsJetPt;
886 fFFIMLaJetPtMin = o.fFFIMLaJetPtMin;
887 fFFIMLaJetPtMax = o.fFFIMLaJetPtMax;
888 fFFIMLaNBinsPt = o.fFFIMLaNBinsPt;
889 fFFIMLaPtMin = o.fFFIMLaPtMin;
890 fFFIMLaPtMax = o.fFFIMLaPtMax;
891 fFFIMLaNBinsXi = o.fFFIMLaNBinsXi;
892 fFFIMLaXiMin = o.fFFIMLaXiMin;
893 fFFIMLaXiMax = o.fFFIMLaXiMax;
894 fFFIMLaNBinsZ = o.fFFIMLaNBinsZ;
895 fFFIMLaZMin = o.fFFIMLaZMin;
896 fFFIMLaZMax = o.fFFIMLaZMax;
bce887f5 897 fh1EvtAllCent = o.fh1EvtAllCent;
898 fh1Evt = o.fh1Evt;
96c271c1 899 fh1K0Mult = o.fh1K0Mult;
900 fh1dPhiJetK0 = o.fh1dPhiJetK0;
bce887f5 901 fh1LaMult = o.fh1LaMult;
902 fh1dPhiJetLa = o.fh1dPhiJetLa;
903 fh1ALaMult = o.fh1ALaMult;
904 fh1dPhiJetALa = o.fh1dPhiJetALa;
905 fh1JetEta = o.fh1JetEta;
906 fh1JetPhi = o.fh1JetPhi;
907 fh2JetEtaPhi = o.fh2JetEtaPhi;
cc096464 908 //fh1V0JetPt = o.fh1V0JetPt;
909 fh1IMK0Cone = o.fh1IMK0Cone;
910 fh1IMLaCone = o.fh1IMLaCone;
911 fh1IMALaCone = o.fh1IMALaCone;
bce887f5 912 fh2FFJetTrackEta = o.fh2FFJetTrackEta;
cc096464 913 //fh1trackPosNCls = o.fh1trackPosNCls;
914 //fh1trackNegNCls = o.fh1trackNegNCls;
bce887f5 915 fh1trackPosRap = o.fh1trackPosRap;
916 fh1trackNegRap = o.fh1trackNegRap;
cc096464 917 //fh1V0Rap = o.fh1V0Rap;
bce887f5 918 fh1trackPosEta = o.fh1trackPosEta;
919 fh1trackNegEta = o.fh1trackNegEta;
920 fh1V0Eta = o.fh1V0Eta;
cc096464 921 // fh1V0totMom = o.fh1V0totMom;
8bde4137 922 fh1CosPointAngle = o.fh1CosPointAngle;
bce887f5 923 fh1DecayLengthV0 = o.fh1DecayLengthV0;
924 fh2ProperLifetimeK0sVsPtBeforeCut = o.fh2ProperLifetimeK0sVsPtBeforeCut;
925 fh2ProperLifetimeK0sVsPtAfterCut= o.fh2ProperLifetimeK0sVsPtAfterCut;
bce887f5 926 fh1V0Radius = o.fh1V0Radius;
927 fh1DcaV0Daughters = o.fh1DcaV0Daughters;
928 fh1DcaPosToPrimVertex = o.fh1DcaPosToPrimVertex;
929 fh1DcaNegToPrimVertex = o.fh1DcaNegToPrimVertex;
930 fh2ArmenterosBeforeCuts = o.fh2ArmenterosBeforeCuts;
931 fh2ArmenterosAfterCuts = o.fh2ArmenterosAfterCuts;
bce887f5 932 fh2BBLaPos = o.fh2BBLaPos;
933 fh2BBLaNeg = o.fh2BBLaPos;
bce887f5 934 fh1PosDaughterCharge = o.fh1PosDaughterCharge;
935 fh1NegDaughterCharge = o.fh1NegDaughterCharge;
936 fh1PtMCK0s = o.fh1PtMCK0s;
937 fh1PtMCLa = o.fh1PtMCLa;
938 fh1PtMCALa = o.fh1PtMCALa;
939 fh1EtaK0s = o.fh1EtaK0s;
940 fh1EtaLa = o.fh1EtaLa;
941 fh1EtaALa = o.fh1EtaALa;
dde76689 942 fh1RC = o.fh1RC;
943 fh1RCBiasK0 = o.fh1RCBiasK0;
944 fh1RCBiasLa = o.fh1RCBiasLa;
945 fh1RCBiasALa = o.fh1RCBiasALa;
946 fh1MCC = o.fh1MCC;
947 fh1OC = o.fh1OC;
948 fh1NJ = o.fh1NJ;
cc096464 949 fhnInvMassEtaTrackPtK0s = o.fhnInvMassEtaTrackPtK0s;
950 fhnInvMassEtaTrackPtLa = o.fhnInvMassEtaTrackPtLa;
951 fhnInvMassEtaTrackPtALa = o.fhnInvMassEtaTrackPtALa;
bce887f5 952 fh1TrackMultCone = o.fh1TrackMultCone;
953 fh2TrackMultCone = o.fh2TrackMultCone;
2e400c0d 954 fhnNJK0 = o.fhnNJK0;
955 fhnNJLa = o.fhnNJLa;
956 fhnNJALa = o.fhnNJALa;
a6ee5cab 957 //fh2MCgenK0Cone = o.fh2MCgenK0Cone;
958 //fh2MCgenLaCone = o.fh2MCgenLaCone;
959 //fh2MCgenALaCone = o.fh2MCgenALaCone;
960 //fh2MCEtagenK0Cone = o.fh2MCEtagenK0Cone;
961 //fh2MCEtagenLaCone = o.fh2MCEtagenLaCone;
962 //fh2MCEtagenALaCone = o.fh2MCEtagenALaCone;
cc096464 963 fh1IMK0ConeSmear = o.fh1IMK0ConeSmear;
964 fh1IMLaConeSmear = o.fh1IMLaConeSmear;
965 fh1IMALaConeSmear = o.fh1IMALaConeSmear;
a6ee5cab 966 fh2MCEtaVsPtHijingLa = o.fh2MCEtaVsPtHijingLa;
967 fh2MCEtaVsPtInjectLa = o.fh2MCEtaVsPtInjectLa;
968 fh2MCEtaVsPtHijingALa = o.fh2MCEtaVsPtHijingALa;
969 fh2MCEtaVsPtInjectALa = o.fh2MCEtaVsPtInjectALa;
df9b7345 970 fhnrecMCHijingLaIncl = o.fhnrecMCHijingLaIncl;
971 fhnrecMCHijingLaCone = o.fhnrecMCHijingLaCone;
972 fhnrecMCHijingALaIncl = o.fhnrecMCHijingALaIncl;
973 fhnrecMCHijingALaCone = o.fhnrecMCHijingALaCone;
974 fhnrecMCInjectLaIncl = o.fhnrecMCInjectLaIncl;
975 fhnrecMCInjectLaCone = o.fhnrecMCInjectLaCone;
976 fhnrecMCInjectALaIncl = o.fhnrecMCInjectALaIncl;
977 fhnrecMCInjectALaCone = o.fhnrecMCInjectALaCone;
cc096464 978 fhnMCrecK0Cone = o.fhnMCrecK0Cone;
979 fhnMCrecLaCone = o.fhnMCrecLaCone;
980 fhnMCrecALaCone = o.fhnMCrecALaCone;
981 fhnMCrecK0ConeSmear = o.fhnMCrecK0ConeSmear;
982 fhnMCrecLaConeSmear = o.fhnMCrecLaConeSmear;
983 fhnMCrecALaConeSmear = o.fhnMCrecALaConeSmear;
984 fhnK0sSecContinCone = o.fhnK0sSecContinCone;
985 fhnLaSecContinCone = o.fhnLaSecContinCone;
986 fhnALaSecContinCone = o.fhnALaSecContinCone;
3ed9f288 987 fhnK0sIncl = o.fhnK0sIncl;
988 fhnK0sCone = o.fhnK0sCone;
989 fhnLaIncl = o.fhnLaIncl;
990 fhnLaCone = o.fhnLaCone;
991 fhnALaIncl = o.fhnALaIncl;
cc096464 992 fhnALaCone = o.fhnALaCone;
993 fhnK0sPC = o.fhnK0sPC;
994 fhnLaPC = o.fhnLaPC;
995 fhnALaPC = o.fhnALaPC;
996 fhnK0sRC = o.fhnK0sRC;
997 fhnLaRC = o.fhnLaRC;
998 fhnALaRC = o.fhnALaRC;
dde76689 999 fhnK0sRCBias = o.fhnK0sRCBias;
1000 fhnLaRCBias = o.fhnLaRCBias;
1001 fhnALaRCBias = o.fhnALaRCBias;
cc096464 1002 fhnK0sOC = o.fhnK0sOC;
1003 fhnLaOC = o.fhnLaOC;
1004 fhnALaOC = o.fhnALaOC;
1005 fh1AreaExcluded = o.fh1AreaExcluded;
a6ffe507 1006 fh1MedianEta = o.fh1MedianEta;
1007 fh1JetPtMedian = o.fh1JetPtMedian;
bce887f5 1008 fh1MCMultiplicityPrimary = o.fh1MCMultiplicityPrimary;
1009 fh1MCMultiplicityTracks = o.fh1MCMultiplicityTracks;
cc096464 1010 fhnFeedDownLa = o.fhnFeedDownLa;
1011 fhnFeedDownALa = o.fhnFeedDownALa;
1012 fhnFeedDownLaCone = o.fhnFeedDownLaCone;
1013 fhnFeedDownALaCone = o.fhnFeedDownALaCone;
bce887f5 1014 fh1MCProdRadiusK0s = o.fh1MCProdRadiusK0s;
1015 fh1MCProdRadiusLambda = o.fh1MCProdRadiusLambda;
1016 fh1MCProdRadiusAntiLambda = o.fh1MCProdRadiusAntiLambda;
1017 fh1MCPtV0s = o.fh1MCPtV0s;
1018 fh1MCPtK0s = o.fh1MCPtK0s;
1019 fh1MCPtLambda = o.fh1MCPtLambda;
1020 fh1MCPtAntiLambda = o.fh1MCPtAntiLambda;
1021 fh1MCXiPt = o.fh1MCXiPt;
1022 fh1MCXibarPt = o.fh1MCXibarPt;
1023 fh2MCEtaVsPtK0s = o.fh2MCEtaVsPtK0s;
1024 fh2MCEtaVsPtLa = o.fh2MCEtaVsPtLa;
1025 fh2MCEtaVsPtALa = o.fh2MCEtaVsPtALa;
df9b7345 1026 //fh1MCRapK0s = o.fh1MCRapK0s;
1027 //fh1MCRapLambda = o.fh1MCRapLambda;
1028 //fh1MCRapAntiLambda = o.fh1MCRapAntiLambda;
bce887f5 1029 fh1MCEtaAllK0s = o.fh1MCEtaAllK0s;
1030 fh1MCEtaK0s = o.fh1MCEtaK0s;
1031 fh1MCEtaLambda = o.fh1MCEtaLambda;
1032 fh1MCEtaAntiLambda = o.fh1MCEtaAntiLambda;
1033}
96c271c1 1034
1035 return *this;
1036}
9b2de807 1037
96c271c1 1038//_______________________________________________
1039AliAnalysisTaskJetChem::~AliAnalysisTaskJetChem()
1040{
1041 // destructor
9b2de807 1042
bce887f5 1043
96c271c1 1044 if(fListK0s) delete fListK0s;
bce887f5 1045 if(fListLa) delete fListLa;
1046 if(fListALa) delete fListALa;
1047 if(fListFeeddownLaCand) delete fListFeeddownLaCand;
1048 if(fListFeeddownALaCand) delete fListFeeddownALaCand;
1049 if(jetConeFDLalist) delete jetConeFDLalist;
1050 if(jetConeFDALalist) delete jetConeFDALalist;
1051 if(fListMCgenK0s) delete fListMCgenK0s;
1052 if(fListMCgenLa) delete fListMCgenLa;
1053 if(fListMCgenALa) delete fListMCgenALa;
cc096464 1054 if(fRandom) delete fRandom;
9b2de807 1055}
1056
96c271c1 1057//________________________________________________________________________________________________________________________________
1058AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::AliFragFuncHistosInvMass(const char* name,
1059 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
1060 Int_t nInvMass, Float_t invMassMin, Float_t invMassMax,
1061 Int_t nPt, Float_t ptMin, Float_t ptMax,
1062 Int_t nXi, Float_t xiMin, Float_t xiMax,
1063 Int_t nZ , Float_t zMin , Float_t zMax )
1064 : TObject()
1065 ,fNBinsJetPt(nJetPt)
1066 ,fJetPtMin(jetPtMin)
1067 ,fJetPtMax(jetPtMax)
1068 ,fNBinsInvMass(nInvMass)
1069 ,fInvMassMin(invMassMin)
1070 ,fInvMassMax(invMassMax)
1071 ,fNBinsPt(nPt)
1072 ,fPtMin(ptMin)
1073 ,fPtMax(ptMax)
1074 ,fNBinsXi(nXi)
1075 ,fXiMin(xiMin)
1076 ,fXiMax(xiMax)
1077 ,fNBinsZ(nZ)
1078 ,fZMin(zMin)
1079 ,fZMax(zMax)
1080 ,fh3TrackPt(0)
1081 ,fh3Xi(0)
1082 ,fh3Z(0)
1083 ,fh1JetPt(0)
1084 ,fNameFF(name)
9b2de807 1085{
96c271c1 1086 // default constructor
1087
9b2de807 1088}
1089
96c271c1 1090//______________________________________________________________________________________________________________
1091AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::AliFragFuncHistosInvMass(const AliFragFuncHistosInvMass& copy)
1092 : TObject()
1093 ,fNBinsJetPt(copy.fNBinsJetPt)
1094 ,fJetPtMin(copy.fJetPtMin)
1095 ,fJetPtMax(copy.fJetPtMax)
1096 ,fNBinsInvMass(copy.fNBinsInvMass)
1097 ,fInvMassMin(copy.fInvMassMin)
1098 ,fInvMassMax(copy.fInvMassMax)
1099 ,fNBinsPt(copy.fNBinsPt)
1100 ,fPtMin(copy.fPtMin)
1101 ,fPtMax(copy.fPtMax)
1102 ,fNBinsXi(copy.fNBinsXi)
1103 ,fXiMin(copy.fXiMin)
1104 ,fXiMax(copy.fXiMax)
1105 ,fNBinsZ(copy.fNBinsZ)
1106 ,fZMin(copy.fZMin)
1107 ,fZMax(copy.fZMax)
1108 ,fh3TrackPt(copy.fh3TrackPt)
1109 ,fh3Xi(copy.fh3Xi)
1110 ,fh3Z(copy.fh3Z)
1111 ,fh1JetPt(copy.fh1JetPt)
1112 ,fNameFF(copy.fNameFF)
9b2de807 1113{
96c271c1 1114 // copy constructor
9b2de807 1115}
1116
96c271c1 1117//______________________________________________________________________________________________________________________________________________________________________
1118AliAnalysisTaskJetChem::AliFragFuncHistosInvMass& AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::operator=(const AliAnalysisTaskJetChem::AliFragFuncHistosInvMass& o)
9b2de807 1119{
96c271c1 1120 // assignment
1121
1122 if(this!=&o){
1123 TObject::operator=(o);
1124 fNBinsJetPt = o.fNBinsJetPt;
1125 fJetPtMin = o.fJetPtMin;
1126 fJetPtMax = o.fJetPtMax;
1127 fNBinsInvMass = o.fNBinsInvMass;
1128 fInvMassMin = o.fInvMassMin;
1129 fInvMassMax = o.fInvMassMax;
1130 fNBinsPt = o.fNBinsPt;
1131 fPtMin = o.fPtMin;
1132 fPtMax = o.fPtMax;
1133 fNBinsXi = o.fNBinsXi;
1134 fXiMin = o.fXiMin;
1135 fXiMax = o.fXiMax;
1136 fNBinsZ = o.fNBinsZ;
1137 fZMin = o.fZMin;
1138 fZMax = o.fZMax;
1139 fh3TrackPt = o.fh3TrackPt;
1140 fh3Xi = o.fh3Xi;
1141 fh3Z = o.fh3Z;
1142 fh1JetPt = o.fh1JetPt;
1143 fNameFF = o.fNameFF;
9b2de807 1144 }
96c271c1 1145
1146 return *this;
1147}
9b2de807 1148
96c271c1 1149//___________________________________________________________________________
1150AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::~AliFragFuncHistosInvMass()
1151{
1152 // destructor
9b2de807 1153
96c271c1 1154 if(fh1JetPt) delete fh1JetPt;
1155 if(fh3TrackPt) delete fh3TrackPt;
1156 if(fh3Xi) delete fh3Xi;
1157 if(fh3Z) delete fh3Z;
9b2de807 1158}
1159
96c271c1 1160//_________________________________________________________________
1161void AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::DefineHistos()
9b2de807 1162{
96c271c1 1163 // book FF histos
9b2de807 1164
96c271c1 1165 fh1JetPt = new TH1F(Form("fh1FFJetPtIM%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
1166 fh3TrackPt = new TH3F(Form("fh3FFTrackPtIM%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsInvMass, fInvMassMin, fInvMassMax, fNBinsPt, fPtMin, fPtMax);
1167 fh3Xi = new TH3F(Form("fh3FFXiIM%s", fNameFF.Data()),"", fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsInvMass, fInvMassMin, fInvMassMax, fNBinsXi, fXiMin, fXiMax);
1168 fh3Z = new TH3F(Form("fh3FFZIM%s", fNameFF.Data()),"", fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsInvMass, fInvMassMin, fInvMassMax, fNBinsZ, fZMin, fZMax);
9b2de807 1169
96c271c1 1170 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{t} (GeV/c)", "entries");
1171 AliAnalysisTaskJetChem::SetProperties(fh3TrackPt,"jet p_{t} (GeV/c)","inv Mass (GeV/c^2)","p_{t} (GeV/c)");
1172 AliAnalysisTaskJetChem::SetProperties(fh3Xi,"jet p_{t} (GeV/c)","inv Mass (GeV/c^2)","#xi");
1173 AliAnalysisTaskJetChem::SetProperties(fh3Z,"jet p_{t} (GeV/c)","inv Mass (GeV/c^2)","z");
1174}
3e3b1bae 1175
96c271c1 1176//________________________________________________________________________________________________________________________________
1177void AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::FillFF(Float_t trackPt, Float_t invM, Float_t jetPt, Bool_t incrementJetPt)
1178{
cc096464 1179 // fill FF, don't use TH3F anymore use THnSparse instead to save memory
96c271c1 1180
1181 if(incrementJetPt) fh1JetPt->Fill(jetPt);
cc096464 1182 //fh3TrackPt->Fill(jetPt,invM,trackPt);//Fill(x,y,z)
1183 invM = 0;
96c271c1 1184 Double_t z = 0.;
1185 if(jetPt>0) z = trackPt / jetPt;
1186 Double_t xi = 0;
1187 if(z>0) xi = TMath::Log(1/z);
9b2de807 1188
cc096464 1189 //fh3Xi->Fill(jetPt,invM,xi);
1190 //fh3Z->Fill(jetPt,invM,z);
96c271c1 1191}
9b2de807 1192
96c271c1 1193//___________________________________________________________________________________
1194void AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::AddToOutput(TList* list) const
1195{
1196 // add histos to list
9b2de807 1197
96c271c1 1198 list->Add(fh1JetPt);
cc096464 1199 //list->Add(fh3TrackPt);
1200 //list->Add(fh3Xi);
1201 //list->Add(fh3Z);
96c271c1 1202}
9b2de807 1203
9b2de807 1204
96c271c1 1205//____________________________________________________
1206void AliAnalysisTaskJetChem::UserCreateOutputObjects()
1207{
1208 // create output objects
bce887f5 1209
cc096464 1210 fRandom = new TRandom3(0);
1211 fRandom->SetSeed(0);
1212
bce887f5 1213 if(fDebug > 1) Printf("AliAnalysisTaskJetChem::UserCreateOutputObjects()");
9b2de807 1214
96c271c1 1215 // create list of tracks and jets
1216
1217 fTracksRecCuts = new TList();
bce887f5 1218 fTracksRecCuts->SetOwner(kFALSE); //objects in TList wont be deleted when TList is deleted
96c271c1 1219 fJetsRecCuts = new TList();
1220 fJetsRecCuts->SetOwner(kFALSE);
bce887f5 1221 fBckgJetsRec = new TList();
1222 fBckgJetsRec->SetOwner(kFALSE);
96c271c1 1223 fListK0s = new TList();
1224 fListK0s->SetOwner(kFALSE);
bce887f5 1225 fListLa = new TList();
1226 fListLa->SetOwner(kFALSE);
1227 fListALa = new TList();
1228 fListALa->SetOwner(kFALSE);
1229 fListFeeddownLaCand = new TList(); //feeddown Lambda candidates
1230 fListFeeddownLaCand->SetOwner(kFALSE);
1231 fListFeeddownALaCand = new TList(); //feeddown Antilambda candidates
1232 fListFeeddownALaCand->SetOwner(kFALSE);
1233 jetConeFDLalist = new TList();
1234 jetConeFDLalist->SetOwner(kFALSE); //feeddown Lambda candidates in jet cone
1235 jetConeFDALalist = new TList();
1236 jetConeFDALalist->SetOwner(kFALSE); //feeddown Antilambda candidates in jet cone
1237 fListMCgenK0s = new TList(); //MC generated K0s
1238 fListMCgenK0s->SetOwner(kFALSE);
1239 fListMCgenLa = new TList(); //MC generated Lambdas
1240 fListMCgenLa->SetOwner(kFALSE);
1241 fListMCgenALa = new TList(); //MC generated Antilambdas
1242 fListMCgenALa->SetOwner(kFALSE);
9b2de807 1243
bce887f5 1244
96c271c1 1245 // Create histograms / output container
bce887f5 1246
96c271c1 1247 fCommonHistList = new TList();
a6ffe507 1248 fCommonHistList->SetOwner();
9b2de807 1249
96c271c1 1250 Bool_t oldStatus = TH1::AddDirectoryStatus();
bce887f5 1251 TH1::AddDirectory(kFALSE);//By default (fAddDirectory = kTRUE), histograms are automatically added to the list of objects in memory
96c271c1 1252
96c271c1 1253 // histograms inherited from AliAnalysisTaskFragmentationFunction
9b2de807 1254
96c271c1 1255 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
1256 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
bce887f5 1257 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event trigger selection: rejected");
96c271c1 1258 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
1259 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
1260 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
1261 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
9b2de807 1262
bce887f5 1263
96c271c1 1264 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
1265 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 11,-.5, 10.5);
1266 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
1267 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
1268 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
1269 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
1270 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
1271 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
1272 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
6ec586c1 1273 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",100,-0.5,99.5);
bce887f5 1274
1275 // histograms JetChem task
1276
1277 fh1EvtAllCent = new TH1F("fh1EvtAllCent","before centrality selection",100,0.,100.);
1278 fh1Evt = new TH1F("fh1Evt", "All events runned over", 3, 0.,1.);
a6ffe507 1279 fh1EvtMult = new TH1F("fh1EvtMult","multiplicity",240,0.,240.);
1280 fh1K0Mult = new TH1F("fh1K0Mult","K0 multiplicity",100,0.,100.);//500. all
8bde4137 1281 fh1dPhiJetK0 = new TH1F("fh1dPhiJetK0","",64,-1,5.4);
a6ffe507 1282 fh1LaMult = new TH1F("fh1LaMult","La multiplicity",100,0.,100.);
8bde4137 1283 fh1dPhiJetLa = new TH1F("fh1dPhiJetLa","",64,-1,5.4);
a6ffe507 1284 fh1ALaMult = new TH1F("fh1ALaMult","ALa multiplicity",100,0.,100.);
8bde4137 1285 fh1dPhiJetALa = new TH1F("fh1dPhiJetALa","",64,-1,5.4);
1286 fh1JetEta = new TH1F("fh1JetEta","#eta distribution of all jets",40,-2.,2.);
1287 fh1JetPhi = new TH1F("fh1JetPhi","#phi distribution of all jets",63,0.,6.3);
1288 fh2JetEtaPhi = new TH2F("fh2JetEtaPhi","#eta and #phi distribution of all jets",400,-2.,2.,63,0.,6.3);
cc096464 1289
1290
1291 //fh1V0JetPt = new TH1F("fh1V0JetPt","p_{T} distribution of all jets containing v0s",200,0.,200.);
1292 fh1IMK0Cone = new TH1F("fh1IMK0Cone","p_{T} distribution of all jets containing K0s candidates",19,5.,100.);
1293 fh1IMLaCone = new TH1F("fh1IMLaCone","p_{T} distribution of all jets containing #Lambda candidates",19,5.,100.);
1294 fh1IMALaCone = new TH1F("fh1IMALaCone","p_{T} distribution of all jets containing #bar{#Lambda} candidates",19,5.,100.);
1295
bce887f5 1296 fh2FFJetTrackEta = new TH2F("fh2FFJetTrackEta","charged track eta distr. in jet cone",200,-1.,1.,40,0.,200.);
cc096464 1297 //fh1trackPosNCls = new TH1F("fh1trackPosNCls","NTPC clusters positive daughters",10,0.,100.);
1298 //fh1trackNegNCls = new TH1F("fh1trackNegNCls","NTPC clusters negative daughters",10,0.,100.);
bce887f5 1299 fh1trackPosEta = new TH1F("fh1trackPosEta","eta positive daughters",100,-2.,2.);
1300 fh1trackNegEta = new TH1F("fh1trackNegEta","eta negative daughters",100,-2.,2.);
1301 fh1V0Eta = new TH1F("fh1V0Eta","V0 eta",60,-1.5,1.5);
cc096464 1302 //fh1V0totMom = new TH1F("fh1V0totMom","V0 tot mom",100,0.,20.);
8bde4137 1303 fh1CosPointAngle = new TH1F("fh1CosPointAngle", "Cosine of V0's pointing angle",50,0.99,1.0);
bce887f5 1304 fh1DecayLengthV0 = new TH1F("fh1DecayLengthV0", "V0s decay Length;decay length(cm)",1200,0.,120.);
5cca0df6 1305 fh2ProperLifetimeK0sVsPtBeforeCut = new TH2F("fh2ProperLifetimeK0sVsPtBeforeCut"," K0s ProperLifetime vs Pt; p_{T} (GeV/#it{c})",150,0.,15.,250,0.,250.);
a6ffe507 1306 fh2ProperLifetimeK0sVsPtAfterCut = new TH2F("fh2ProperLifetimeK0sVsPtAfterCut"," K0s ProperLifetime vs Pt; p_{T} (GeV/#it{c})",150,0.,15.,250,0.,250.);
5cca0df6 1307 fh1V0Radius = new TH1F("fh1V0Radius", "V0s Radius;Radius(cm)",200,0.,40.);
bce887f5 1308 fh1DcaV0Daughters = new TH1F("fh1DcaV0Daughters", "DCA between daughters;dca(cm)",200,0.,2.);
5cca0df6 1309 fh1DcaPosToPrimVertex = new TH1F("fh1DcaPosToPrimVertex", "Positive V0 daughter;dca(cm)",100,0.,10.);
1310 fh1DcaNegToPrimVertex = new TH1F("fh1DcaNegToPrimVertex", "Negative V0 daughter;dca(cm)",100,0.,10.);
1311 fh2ArmenterosBeforeCuts = new TH2F("fh2ArmenterosBeforeCuts","Armenteros Podolanski Plot for K0s Candidates;#alpha;(p^{arm})_{T}/(GeV/#it{c})",200,-1.2,1.2,350,0.,0.35);
1312 fh2ArmenterosAfterCuts = new TH2F("fh2ArmenterosAfterCuts","Armenteros Podolanski Plot for K0s Candidates;#alpha;(p^{arm})_{T}/(GeV/#it{c});",200,-1.2,1.2,350,0.,0.35);
1313 fh2BBLaPos = new TH2F("fh2BBLaPos","PID of the positive daughter of La candidates; P (GeV); -dE/dx (keV/cm ?)",100,0,10,200,0,200);
1314 fh2BBLaNeg = new TH2F("fh2BBLaNeg","PID of the negative daughter of La candidates; P (GeV); -dE/dx (keV/cm ?)",100,0,10,200,0,200);
bce887f5 1315 fh1PosDaughterCharge = new TH1F("fh1PosDaughterCharge","charge of V0 positive daughters; V0 daughters",3,-2.,2.);
1316 fh1NegDaughterCharge = new TH1F("fh1NegDaughterCharge","charge of V0 negative daughters; V0 daughters",3,-2.,2.);
1317 fh1PtMCK0s = new TH1F("fh1PtMCK0s","Pt of MC rec K0s; #it{p}_{T} (GeV/#it{c})",200,0.,20.);
1318 fh1PtMCLa = new TH1F("fh1PtMCLa","Pt of MC rec La; #it{p}_{T} (GeV/#it{c})",200,0.,20.);
1319 fh1PtMCALa = new TH1F("fh1PtMCALa","Pt of MC rec ALa; #it{p}_{T} (GeV/#it{c})",200,0.,20.);
1320 fh1EtaK0s = new TH1F("fh1EtaK0s","K^{0}_{s} entries ;#eta",200,-1.,1.);
1321 fh1EtaLa = new TH1F("fh1EtaLa","#Lambda entries ;#eta",200,-1.,1.);
1322 fh1EtaALa = new TH1F("fh1EtaALa","#bar{#Lambda} entries ;#eta",200,-1.,1.);
cc096464 1323
dde76689 1324 //histos for normalisation of MCC, RC, OC and NJ
1325
1326 fh1RC = new TH1F("fh1RC"," # random cones used",1,0.,1.);
1327 fh1RCBiasK0 = new TH1F("fh1RCBiasK0"," # random cones with K0s trigger particle",1,0.,1.);
1328 fh1RCBiasLa = new TH1F("fh1RCBiasLa"," # random cones with La trigger particle",1,0.,1.);
1329 fh1RCBiasALa = new TH1F("fh1RCBiasALa"," # random cones with ALa trigger particle",1,0.,1.);
1330 fh1MCC = new TH1F("fh1MCC","# median cluster cones used",1,0.,1.);
33fc837a 1331 fh1OC = new TH1F("fh1OC","# outside cones used, number of jet events",1,0.,1.);
dde76689 1332 fh1NJ = new TH1F("fh1NJ","# non-jet events used",1,0.,1.);
1333
cc096464 1334 Int_t binsInvMassEtaTrackPtK0s[3] = {200, 200, 120};//eta,invM,trackPt
1335 Double_t xminInvMassEtaTrackPtK0s[3] = {-1.,0.3,0.};
1336 Double_t xmaxInvMassEtaTrackPtK0s[3] = {1.,0.7,12.};
1337
1338 fhnInvMassEtaTrackPtK0s = new THnSparseF("fhnInvMassEtaTrackPtK0s","#eta; K0s invM (GeV/{#it{c}}^{2}); #it{p}_{T} (GeV/#it{c})",3,binsInvMassEtaTrackPtK0s,xminInvMassEtaTrackPtK0s,xmaxInvMassEtaTrackPtK0s);
1339
1340 Int_t binsInvMassEtaTrackPtLa[3] = {200, 200, 120};//eta,invM,trackPt
1341 Double_t xminInvMassEtaTrackPtLa[3] = {-1.,1.05,0.};
1342 Double_t xmaxInvMassEtaTrackPtLa[3] = {1.,1.25,12.};
1343
1344 fhnInvMassEtaTrackPtLa = new THnSparseF("fhnInvMassEtaTrackPtLa","#eta; #Lambda invM (GeV/{#it{c}}^{2}); #it{p}_{T} (GeV/#it{c})",3,binsInvMassEtaTrackPtLa,xminInvMassEtaTrackPtLa,xmaxInvMassEtaTrackPtLa);
1345
1346 Int_t binsInvMassEtaTrackPtALa[3] = {200, 200, 120};//eta,invM,trackPt
1347 Double_t xminInvMassEtaTrackPtALa[3] = {-1.,1.05,0.};
1348 Double_t xmaxInvMassEtaTrackPtALa[3] = {1.,1.25,12.};
1349
1350 fhnInvMassEtaTrackPtALa = new THnSparseF("fhnInvMassEtaTrackPtALa","#eta; #bar{#Lambda} invM (GeV/{#it{c}}^{2}); #it{p}_{T} (GeV/#it{c})",3,binsInvMassEtaTrackPtALa,xminInvMassEtaTrackPtALa,xmaxInvMassEtaTrackPtALa);
1351
1352 Int_t binsK0sPC[4] = {19, 200, 200, 200};
1353 Double_t xminK0sPC[4] = {5.,0.3, 0., -1.};
1354 Double_t xmaxK0sPC[4] = {100.,0.7, 20., 1.};
1355 fhnK0sPC = new THnSparseF("fhnK0sPC","jet pT; K0s invM; particle pT; particle #eta",4,binsK0sPC,xminK0sPC,xmaxK0sPC);
1356
1357 Int_t binsLaPC[4] = {19, 200, 200, 200};
1358 Double_t xminLaPC[4] = {5.,1.05, 0., -1.};
1359 Double_t xmaxLaPC[4] = {100.,1.25, 20., 1.};
1360 fhnLaPC = new THnSparseF("fhnLaPC","jet pT; #Lambda invM; particle pT; particle #eta",4,binsLaPC,xminLaPC,xmaxLaPC);
1361
1362 Int_t binsALaPC[4] = {19, 200, 200, 200};
1363 Double_t xminALaPC[4] = {5.,1.05, 0., -1.};
1364 Double_t xmaxALaPC[4] = {100.,1.25, 20., 1.};
1365 fhnALaPC = new THnSparseF("fhnALaPC","jet pT; #bar#Lambda invM; particle pT; particle #eta",4,binsALaPC,xminALaPC,xmaxALaPC);
1366
1367 Int_t binsK0sMCC[3] = {200, 200, 200};
1368 Double_t xminK0sMCC[3] = {0.3, 0., -1.};
1369 Double_t xmaxK0sMCC[3] = {0.7, 20., 1.};
1370 fhnK0sMCC = new THnSparseF("fhnK0sMCC","jet pT; K0s invM; particle pT; particle #eta",3,binsK0sMCC,xminK0sMCC,xmaxK0sMCC);
1371
1372 Int_t binsLaMCC[3] = {200, 200, 200};
1373 Double_t xminLaMCC[3] = {1.05, 0., -1.};
1374 Double_t xmaxLaMCC[3] = {1.25, 20., 1.};
1375 fhnLaMCC = new THnSparseF("fhnLaMCC","jet pT; #Lambda invM; particle pT; particle #eta",3,binsLaMCC,xminLaMCC,xmaxLaMCC);
1376
1377 Int_t binsALaMCC[3] = {200, 200, 200};
1378 Double_t xminALaMCC[3] = {1.05, 0., -1.};
1379 Double_t xmaxALaMCC[3] = {1.25, 20., 1.};
dde76689 1380 fhnALaMCC = new THnSparseF("fhnALaMCC","jet pT; #bara#Lambda invM; particle pT; particle #eta",3,binsALaMCC,xminALaMCC,xmaxALaMCC);
cc096464 1381
1382 Int_t binsK0sRC[3] = {200, 200, 200};
1383 Double_t xminK0sRC[3] = {0.3, 0., -1.};
1384 Double_t xmaxK0sRC[3] = {0.7, 20., 1.};
dde76689 1385 fhnK0sRC = new THnSparseF("fhnK0sRC","jet pT; K0s invM; particle pT; particle #eta",3,binsK0sRC,xminK0sRC,xmaxK0sRC);
cc096464 1386
1387 Int_t binsLaRC[3] = {200, 200, 200};
1388 Double_t xminLaRC[3] = {1.05, 0., -1.};
1389 Double_t xmaxLaRC[3] = {1.25, 20., 1.};
dde76689 1390 fhnLaRC = new THnSparseF("fhnLaRC","jet pT; #Lambda invM; particle pT; particle #eta",3,binsLaRC,xminLaRC,xmaxLaRC);
cc096464 1391
1392 Int_t binsALaRC[3] = {200, 200, 200};
1393 Double_t xminALaRC[3] = {1.05, 0., -1.};
1394 Double_t xmaxALaRC[3] = {1.25, 20., 1.};
1395 fhnALaRC = new THnSparseF("fhnALaRC","jet pT; #bara#Lambda invM; particle pT; particle #eta",3,binsALaRC,xminALaRC,xmaxALaRC);
1396
dde76689 1397 Int_t binsK0sRCBias[3] = {200, 200, 200};
1398 Double_t xminK0sRCBias[3] = {0.3, 0., -1.};
1399 Double_t xmaxK0sRCBias[3] = {0.7, 20., 1.};
1400 fhnK0sRCBias = new THnSparseF("fhnK0sRCBias","jet pT; K0s invM; particle pT; particle #eta",3,binsK0sRCBias,xminK0sRCBias,xmaxK0sRCBias);
1401
1402 Int_t binsLaRCBias[3] = {200, 200, 200};
1403 Double_t xminLaRCBias[3] = {1.05, 0., -1.};
1404 Double_t xmaxLaRCBias[3] = {1.25, 20., 1.};
1405 fhnLaRCBias = new THnSparseF("fhnLaRCBias","jet pT; #Lambda invM; particle pT; particle #eta",3,binsLaRCBias,xminLaRCBias,xmaxLaRCBias);
1406
1407 Int_t binsALaRCBias[3] = {200, 200, 200};
1408 Double_t xminALaRCBias[3] = {1.05, 0., -1.};
1409 Double_t xmaxALaRCBias[3] = {1.25, 20., 1.};
1410 fhnALaRCBias = new THnSparseF("fhnALaRCBias","jet pT; #bara#Lambda invM; particle pT; particle #eta",3,binsALaRCBias,xminALaRCBias,xmaxALaRCBias);
cc096464 1411
1412 Int_t binsK0sOC[3] = {200, 200, 200};
1413 Double_t xminK0sOC[3] = {0.3, 0., -1.};
1414 Double_t xmaxK0sOC[3] = {0.7, 20., 1.};
1415 fhnK0sOC = new THnSparseF("fhnK0sOC","jet pT; K0s invM; particle pT; particle #eta",3,binsK0sOC,xminK0sOC,xmaxK0sOC);
1416
1417 Int_t binsLaOC[3] = {200, 200, 200};
1418 Double_t xminLaOC[3] = {1.05, 0., -1.};
1419 Double_t xmaxLaOC[3] = {1.25, 20., 1.};
1420 fhnLaOC = new THnSparseF("fhnLaOC","jet pT; #Lambda invM; particle pT; particle #eta",3,binsLaOC,xminLaOC,xmaxLaOC);
1421
1422 Int_t binsALaOC[3] = {200, 200, 200};
1423 Double_t xminALaOC[3] = {1.05, 0., -1.};
1424 Double_t xmaxALaOC[3] = {1.25, 20., 1.};
1425
1426 fhnALaOC = new THnSparseF("fhnALaOC","jet pT; #bara#Lambda invM; particle pT; particle #eta",3,binsALaOC,xminALaOC,xmaxALaOC);
1427
4855fa4a 1428 fh1AreaExcluded = new TH1F("fh1AreaExcluded","area excluded for selected jets in event acceptance",50,0.,1.);
cc096464 1429
a6ffe507 1430 fh1MedianEta = new TH1F("fh1MedianEta","Median cluster axis ;#eta",200,-1.,1.);
cc096464 1431 fh1JetPtMedian = new TH1F("fh1JetPtMedian"," (selected) jet it{p}_{T} distribution for MCC method; #GeV/it{c}",19,5.,100.);
bce887f5 1432
cc096464 1433 fh1TrackMultCone = new TH1F("fh1TrackMultCone","track multiplicity in jet cone; number of tracks",20,0.,50.);
bce887f5 1434
cc096464 1435 fh2TrackMultCone = new TH2F("fh2TrackMultCone","track multiplicity in jet cone vs. jet momentum; number of tracks; jet it{p}_{T} (GeV/it{c})",50,0.,50.,19,5.,100.);
8bde4137 1436
2e400c0d 1437 Int_t binsNJK0[3] = {200, 200, 200};
1438 Double_t xminNJK0[3] = {0.3, 0., -1.};
1439 Double_t xmaxNJK0[3] = {0.7, 20., 1.};
1440 fhnNJK0 = new THnSparseF("fhnNJK0","K0s candidates in events wo selected jets;",3,binsNJK0,xminNJK0,xmaxNJK0);
8bde4137 1441
2e400c0d 1442 Int_t binsNJLa[3] = {200, 200, 200};
1443 Double_t xminNJLa[3] = {1.05, 0., -1.};
1444 Double_t xmaxNJLa[3] = {1.25, 20., 1.};
1445 fhnNJLa = new THnSparseF("fhnNJLa","La candidates in events wo selected jets; ",3,binsNJLa,xminNJLa,xmaxNJLa);
8bde4137 1446
2e400c0d 1447 Int_t binsNJALa[3] = {200, 200, 200};
1448 Double_t xminNJALa[3] = {1.05, 0., -1.};
1449 Double_t xmaxNJALa[3] = {1.25, 20., 1.};
1450 fhnNJALa = new THnSparseF("fhnNJALa","ALa candidates in events wo selected jets; ",3,binsNJALa,xminNJALa,xmaxNJALa);
bce887f5 1451
cc096464 1452 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
96c271c1 1453 fFFNBinsPt, fFFPtMin, fFFPtMax,
1454 fFFNBinsXi, fFFXiMin, fFFXiMax,
1455 fFFNBinsZ , fFFZMin , fFFZMax);
1456
cc096464 1457 fV0QAK0 = new AliFragFuncQATrackHistos("V0QAK0",fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
96c271c1 1458 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1459 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1460 fQATrackHighPtThreshold);
1461
cc096464 1462 fFFHistosRecCutsK0Evt = new AliFragFuncHistos("RecCutsK0Evt", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
96c271c1 1463 fFFNBinsPt, fFFPtMin, fFFPtMax,
1464 fFFNBinsXi, fFFXiMin, fFFXiMax,
1465 fFFNBinsZ , fFFZMin , fFFZMax);
1466
cc096464 1467 /*
96c271c1 1468 fFFHistosIMK0AllEvt = new AliFragFuncHistosInvMass("K0AllEvt", fFFIMNBinsJetPt, fFFIMJetPtMin, fFFIMJetPtMax,
1469 fFFIMNBinsInvM,fFFIMInvMMin,fFFIMInvMMax,
1470 fFFIMNBinsPt, fFFIMPtMin, fFFIMPtMax,
1471 fFFIMNBinsXi, fFFIMXiMin, fFFIMXiMax,
1472 fFFIMNBinsZ , fFFIMZMin , fFFIMZMax);
1473
1474 fFFHistosIMK0Jet = new AliFragFuncHistosInvMass("K0Jet", fFFIMNBinsJetPt, fFFIMJetPtMin, fFFIMJetPtMax,
1475 fFFIMNBinsInvM,fFFIMInvMMin,fFFIMInvMMax,
1476 fFFIMNBinsPt, fFFIMPtMin, fFFIMPtMax,
1477 fFFIMNBinsXi, fFFIMXiMin, fFFIMXiMax,
1478 fFFIMNBinsZ , fFFIMZMin , fFFIMZMax);
bce887f5 1479
96c271c1 1480 fFFHistosIMK0Cone = new AliFragFuncHistosInvMass("K0Cone", fFFIMNBinsJetPt, fFFIMJetPtMin, fFFIMJetPtMax,
1481 fFFIMNBinsInvM,fFFIMInvMMin,fFFIMInvMMax,
1482 fFFIMNBinsPt, fFFIMPtMin, fFFIMPtMax,
1483 fFFIMNBinsXi, fFFIMXiMin, fFFIMXiMax,
1484 fFFIMNBinsZ , fFFIMZMin , fFFIMZMax);
9280dfa6 1485
bce887f5 1486 fFFHistosIMLaAllEvt = new AliFragFuncHistosInvMass("LaAllEvt", fFFIMLaNBinsJetPt, fFFIMLaJetPtMin, fFFIMLaJetPtMax,
1487 fFFIMLaNBinsInvM,fFFIMLaInvMMin,fFFIMLaInvMMax,
1488 fFFIMLaNBinsPt, fFFIMLaPtMin, fFFIMLaPtMax,
1489 fFFIMLaNBinsXi, fFFIMLaXiMin, fFFIMLaXiMax,
1490 fFFIMLaNBinsZ , fFFIMLaZMin , fFFIMLaZMax);
1491
1492 fFFHistosIMLaJet = new AliFragFuncHistosInvMass("LaJet", fFFIMLaNBinsJetPt, fFFIMLaJetPtMin, fFFIMLaJetPtMax,
1493 fFFIMLaNBinsInvM,fFFIMLaInvMMin,fFFIMLaInvMMax,
1494 fFFIMLaNBinsPt, fFFIMLaPtMin, fFFIMLaPtMax,
1495 fFFIMLaNBinsXi, fFFIMLaXiMin, fFFIMLaXiMax,
1496 fFFIMLaNBinsZ , fFFIMLaZMin , fFFIMLaZMax);
1497
1498
1499 fFFHistosIMLaCone = new AliFragFuncHistosInvMass("LaCone", fFFIMLaNBinsJetPt, fFFIMLaJetPtMin, fFFIMLaJetPtMax,
1500 fFFIMLaNBinsInvM,fFFIMLaInvMMin,fFFIMLaInvMMax,
1501 fFFIMLaNBinsPt, fFFIMLaPtMin, fFFIMLaPtMax,
1502 fFFIMLaNBinsXi, fFFIMLaXiMin, fFFIMLaXiMax,
1503 fFFIMLaNBinsZ , fFFIMLaZMin , fFFIMLaZMax);
d7fb73a4 1504
bce887f5 1505
1506 fFFHistosIMALaAllEvt = new AliFragFuncHistosInvMass("ALaAllEvt", fFFIMLaNBinsJetPt, fFFIMLaJetPtMin, fFFIMLaJetPtMax,
1507 fFFIMLaNBinsInvM,fFFIMLaInvMMin,fFFIMLaInvMMax,
1508 fFFIMLaNBinsPt, fFFIMLaPtMin, fFFIMLaPtMax,
1509 fFFIMLaNBinsXi, fFFIMLaXiMin, fFFIMLaXiMax,
1510 fFFIMLaNBinsZ , fFFIMLaZMin , fFFIMLaZMax);
1511
1512 fFFHistosIMALaJet = new AliFragFuncHistosInvMass("ALaJet", fFFIMLaNBinsJetPt, fFFIMLaJetPtMin, fFFIMLaJetPtMax,
1513 fFFIMLaNBinsInvM,fFFIMLaInvMMin,fFFIMLaInvMMax,
1514 fFFIMLaNBinsPt, fFFIMLaPtMin, fFFIMLaPtMax,
1515 fFFIMLaNBinsXi, fFFIMLaXiMin, fFFIMLaXiMax,
1516 fFFIMLaNBinsZ , fFFIMLaZMin , fFFIMLaZMax);
1517
1518 fFFHistosIMALaCone = new AliFragFuncHistosInvMass("ALaCone", fFFIMLaNBinsJetPt, fFFIMLaJetPtMin, fFFIMLaJetPtMax,
1519 fFFIMLaNBinsInvM,fFFIMLaInvMMin,fFFIMLaInvMMax,
1520 fFFIMLaNBinsPt, fFFIMLaPtMin, fFFIMLaPtMax,
1521 fFFIMLaNBinsXi, fFFIMLaXiMin, fFFIMLaXiMax,
1522 fFFIMLaNBinsZ , fFFIMLaZMin , fFFIMLaZMax);
cc096464 1523 */
bce887f5 1524
1525 //***************
1526 // MC histograms
1527 //***************
1528
a6ee5cab 1529 //fh2MCgenK0Cone = new TH2F("fh2MCgenK0Cone", "MC gen {K^{0}}^{s} #it{p}_{T} in cone around rec jet axis versus jet #it{p}_{T}; jet #it{p}_{T}",19,5.,100.,200,0.,20.);
1530 //fh2MCgenLaCone = new TH2F("fh2MCgenLaCone", "MC gen #Lambda #it{p}_{T} in cone around rec jet axis versus jet #it{p}_{T} ; jet #it{p}_{T}",19,5.,100.,200,0.,20.);
1531 //fh2MCgenALaCone = new TH2F("fh2MCgenALaCone", "MC gen #Antilambda #it{p}_{T} in cone around rec jet axis versus jet #it{p}_{T}; jet #it{p}_{T}",19,5.,100.,200,0.,20.);
bce887f5 1532
a6ee5cab 1533 //fh2MCgenK0Cone->GetYaxis()->SetTitle("MC gen K^{0}}^{s} #it{p}_{T}");
1534 //fh2MCgenLaCone->GetYaxis()->SetTitle("MC gen #Lambda #it{p}_{T}");
1535 //fh2MCgenALaCone->GetYaxis()->SetTitle("MC gen #Antilambda #it{p}_{T}");
bce887f5 1536
a6ee5cab 1537 //fh2MCEtagenK0Cone = new TH2F("fh2MCEtagenK0Cone","MC gen {K^{0}}^{s} #it{p}_{T} #eta distribution in jet cone;#eta",19,5.,100.,200,-1.,1.);
1538 //fh2MCEtagenLaCone = new TH2F("fh2MCEtagenLaCone","MC gen #Lambda #it{p}_{T} #eta distribution in jet cone;#eta",19,5.,100.,200,-1.,1.);
1539 //fh2MCEtagenALaCone = new TH2F("fh2MCEtagenALaCone","MC gen #Antilambda #it{p}_{T} #eta distribution in jet cone;#eta",19,5.,100.,200,-1.,1.);
1540 fh1IMK0ConeSmear = new TH1F("fh1IMK0ConeSmear","Smeared jet pt study for K0s-in-cone-jets; smeared jet #it{p}_{T}", 19,5.,100.);
1541 fh1IMLaConeSmear = new TH1F("fh1IMLaConeSmear","Smeared jet pt study for La-in-cone-jets; smeared jet #it{p}_{T}", 19,5.,100.);
1542 fh1IMALaConeSmear = new TH1F("fh1IMALaConeSmear","Smeared jet pt study for ALa-in-cone-jets; smeared jet #it{p}_{T}", 19,5.,100.);
bce887f5 1543
a6ee5cab 1544 fh2CorrHijingLaProton = new TH2F("fh2CorrHijingLaProton","#Lambda - proton pT correlation, Hijing;#it{p^{#Lambda}}_{T} (GeV/c);#it{p^{proton}}_{T} (GeV/c)",20,0.,20.,20,0.,20.);
1545 fh2CorrInjectLaProton = new TH2F("fh2CorrInjectLaProton","#Lambda - proton pT correlation, Injected;#it{p^{#Lambda}}_{T} (GeV/c);#it{p^{proton}}_{T} (GeV/c)",20,0.,20.,20,0.,20.);
1546 fh2CorrHijingALaAProton = new TH2F("fh2CorrHijingALaAProton","#bar{#Lambda} - proton pT correlation, Hijing;#it{p^{#Lambda}}_{T} (GeV/c);#it{p^{#bar{proton}}}_{T} (GeV/c)",20,0.,20.,20,0.,20.);
1547 fh2CorrInjectALaAProton = new TH2F("fh2CorrInjectALaAProton","#bar{#Lambda} - proton pT correlation, Injected;#it{p^{#Lambda}}_{T} (GeV/c);#it{p^{#bar{proton}}}_{T} (GeV/c)",20,0.,20.,20,0.,20.);
1548 //12 new histograms: Cone, Incl, Lambda, Antilambda, Hijing, Injected:
df9b7345 1549
a6ee5cab 1550 fh2MCEtaVsPtHijingLa = new TH2F("fh2MCEtaVsPtHijingLa","MC Hijing gen. #Lambda #eta; #it{p}_{T}",200,0.,20.,200,-1.,1.);
1551 fh2MCEtaVsPtInjectLa = new TH2F("fh2MCEtaVsPtInjectLa","MC injected gen. #Lambda #eta; #it{p}_{T}",200,0.,20.,200,-1.,1.);
1552 fh2MCEtaVsPtHijingALa = new TH2F("fh2MCEtaVsPtHijingALa","MC gen. Hijing #bar{#Lambda} #eta; #it{p}_{T}",200,0.,20.,200,-1.,1.);
1553 fh2MCEtaVsPtInjectALa = new TH2F("fh2MCEtaVsPtInjectALa","MC gen. injected #bar{#Lambda} #eta; #it{p}_{T}",200,0.,20.,200,-1.,1.);
1554
df9b7345 1555 Int_t binsrecMCHijingLaIncl[3] = {200, 200, 200};
1556 Double_t xminrecMCHijingLaIncl[3] = {1.05, 0., -1.};
1557 Double_t xmaxrecMCHijingLaIncl[3] = {1.25, 20., 1.};
1558 fhnrecMCHijingLaIncl = new THnSparseF("fhnrecMCHijingLaIncl","La inv. mass; particle pT; particle #eta",3,binsrecMCHijingLaIncl,xminrecMCHijingLaIncl,xmaxrecMCHijingLaIncl);
1559
1560 Int_t binsrecMCHijingLaCone[4] = {19, 200, 200, 200};
1561 Double_t xminrecMCHijingLaCone[4] = {5., 1.05, 0., -1.};
1562 Double_t xmaxrecMCHijingLaCone[4] = {100., 1.25, 20., 1.};
1563 fhnrecMCHijingLaCone = new THnSparseF("fhnrecMCHijingLaCone","La inv. mass; particle pT; particle #eta",4,binsrecMCHijingLaCone,xminrecMCHijingLaCone,xmaxrecMCHijingLaCone);
1564
1565 Int_t binsrecMCHijingALaIncl[3] = {200, 200, 200};
1566 Double_t xminrecMCHijingALaIncl[3] = {1.05, 0., -1.};
1567 Double_t xmaxrecMCHijingALaIncl[3] = {1.25, 20., 1.};
1568 fhnrecMCHijingALaIncl = new THnSparseF("fhnrecMCHijingALaIncl","ALa inv. mass; particle pT; particle #eta",3,binsrecMCHijingALaIncl,xminrecMCHijingALaIncl,xmaxrecMCHijingALaIncl);
1569
1570 Int_t binsrecMCHijingALaCone[4] = {19, 200, 200, 200};
1571 Double_t xminrecMCHijingALaCone[4] = {5., 1.05, 0., -1.};
1572 Double_t xmaxrecMCHijingALaCone[4] = {100., 1.25, 20., 1.};
1573 fhnrecMCHijingALaCone = new THnSparseF("fhnrecMCHijingALaCone","ALa inv. mass; particle pT; particle #eta",4,binsrecMCHijingALaCone,xminrecMCHijingALaCone,xmaxrecMCHijingALaCone);
1574
1575 Int_t binsrecMCInjectLaIncl[3] = {200, 200, 200};
1576 Double_t xminrecMCInjectLaIncl[3] = {1.05, 0., -1.};
1577 Double_t xmaxrecMCInjectLaIncl[3] = {1.25, 20., 1.};
1578 fhnrecMCInjectLaIncl = new THnSparseF("fhnrecMCInjectLaIncl","La inv. mass; particle pT; particle #eta",3,binsrecMCInjectLaIncl,xminrecMCInjectLaIncl,xmaxrecMCInjectLaIncl);
1579
1580 Int_t binsrecMCInjectLaCone[4] = {19, 200, 200, 200};
1581 Double_t xminrecMCInjectLaCone[4] = {5., 1.05, 0., -1.};
1582 Double_t xmaxrecMCInjectLaCone[4] = {100., 1.25, 20., 1.};
1583 fhnrecMCInjectLaCone = new THnSparseF("fhnrecMCInjectLaCone","La jet pT;inv. mass; particle pT; particle #eta",4,binsrecMCInjectLaCone,xminrecMCInjectLaCone,xmaxrecMCInjectLaCone);
1584
1585 Int_t binsrecMCInjectALaIncl[3] = {200, 200, 200};
1586 Double_t xminrecMCInjectALaIncl[3] = {1.05, 0., -1.};
1587 Double_t xmaxrecMCInjectALaIncl[3] = {1.25, 20., 1.};
1588 fhnrecMCInjectALaIncl = new THnSparseF("fhnrecMCInjectALaIncl","ALa inv. mass; particle pT; particle #eta",3,binsrecMCInjectALaIncl,xminrecMCInjectALaIncl,xmaxrecMCInjectALaIncl);
1589
1590 Int_t binsrecMCInjectALaCone[4] = {19, 200, 200, 200};
1591 Double_t xminrecMCInjectALaCone[4] = {5., 1.05, 0., -1.};
1592 Double_t xmaxrecMCInjectALaCone[4] = {100., 1.25, 20., 1.};
1593 fhnrecMCInjectALaCone = new THnSparseF("fhnrecMCInjectALaCone","ALa inv. mass; particle pT; particle #eta",4,binsrecMCInjectALaCone,xminrecMCInjectALaCone,xmaxrecMCInjectALaCone);
1594
1595
cc096464 1596 Int_t binsMCrecK0Cone[4] = {19, 200, 200, 200};
1597 Double_t xminMCrecK0Cone[4] = {5.,0.3, 0., -1.};
1598 Double_t xmaxMCrecK0Cone[4] = {100.,0.7, 20., 1.};
1599 fhnMCrecK0Cone = new THnSparseF("fhnMCrecK0Cone", "MC rec {K^{0}}^{s} #it{p}_{T} in cone around jet axis matching MC gen particle; jet #it{p}_{T}; inv mass (GeV/#it{c}^{2};#it{p}_{T}",4,binsMCrecK0Cone,xminMCrecK0Cone,xmaxMCrecK0Cone);
1600
1601 Int_t binsMCrecLaCone[4] = {19, 200, 200, 200};
1602 Double_t xminMCrecLaCone[4] = {5.,0.3, 0., -1.};
1603 Double_t xmaxMCrecLaCone[4] = {100.,0.7, 20., 1.};
1604 fhnMCrecLaCone = new THnSparseF("fhnMCrecLaCone", "MC rec {#Lambda #it{p}_{T} in cone around jet axis matching MC gen particle; jet #it{p}_{T}; inv mass (GeV/#it{c}^{2};#it{p}_{T}",4,binsMCrecLaCone,xminMCrecLaCone,xmaxMCrecLaCone);
1605
1606 Int_t binsMCrecALaCone[4] = {19, 200, 200, 200};
1607 Double_t xminMCrecALaCone[4] = {5.,0.3, 0., -1.};
1608 Double_t xmaxMCrecALaCone[4] = {100.,0.7, 20., 1.};
1609 fhnMCrecALaCone = new THnSparseF("fhnMCrecALaCone", "MC rec {#bar{#Lambda} #it{p}_{T} in cone around jet axis matching MC gen particle; jet #it{p}_{T}; inv mass (GeV/#it{c}^{2};#it{p}_{T}",4,binsMCrecALaCone,xminMCrecALaCone,xmaxMCrecALaCone);
1610
1611 Int_t binsMCrecK0ConeSmear[4] = {19, 200, 200, 200};
1612 Double_t xminMCrecK0ConeSmear[4] = {5.,0.3, 0., -1.};
1613 Double_t xmaxMCrecK0ConeSmear[4] = {100.,0.7, 20., 1.};
1614 fhnMCrecK0ConeSmear = new THnSparseF("fhnMCrecK0ConeSmear", "MC rec {K^{0}}^{s} #it{p}_{T} in cone around jet axis matching MC gen particle; jet #it{p}_{T}; inv mass (GeV/#it{c}^{2};#it{p}_{T}",4,binsMCrecK0ConeSmear,xminMCrecK0ConeSmear,xmaxMCrecK0ConeSmear);
1615
1616 Int_t binsMCrecLaConeSmear[4] = {19, 200, 200, 200};
4855fa4a 1617 Double_t xminMCrecLaConeSmear[4] = {5.,1.05, 0., -1.};
1618 Double_t xmaxMCrecLaConeSmear[4] = {100.,1.25, 20., 1.};
cc096464 1619 fhnMCrecLaConeSmear = new THnSparseF("fhnMCrecLaConeSmear", "MC rec {#Lambda #it{p}_{T} in cone around jet axis matching MC gen particle; jet #it{p}_{T}; inv mass (GeV/#it{c}^{2};#it{p}_{T}",4,binsMCrecLaConeSmear,xminMCrecLaConeSmear,xmaxMCrecLaConeSmear);
1620
1621 Int_t binsMCrecALaConeSmear[4] = {19, 200, 200, 200};
4855fa4a 1622 Double_t xminMCrecALaConeSmear[4] = {5.,1.05, 0., -1.};
1623 Double_t xmaxMCrecALaConeSmear[4] = {100.,1.25, 20., 1.};
cc096464 1624 fhnMCrecALaConeSmear = new THnSparseF("fhnMCrecALaConeSmear", "MC rec {#bar{#Lambda} #it{p}_{T} in cone around jet axis matching MC gen particle; jet #it{p}_{T}; inv mass (GeV/#it{c}^{2};#it{p}_{T}",4,binsMCrecALaConeSmear,xminMCrecALaConeSmear,xmaxMCrecALaConeSmear);
1625
1626 Int_t binsK0sSecContinCone[3] = {19, 200, 200};
1627 Double_t xminK0sSecContinCone[3] = {5.,0., -1.};
1628 Double_t xmaxK0sSecContinCone[3] = {100.,20., 1.};
1629 fhnK0sSecContinCone = new THnSparseF("fhnK0sSecContinCone", "Secondary contamination {K^{0}}^{s} #it{p}_{T} in cone around jet axis; jet #it{p}_{T}; inv mass (GeV/#it{c}^{2};#it{p}_{T}",3,binsK0sSecContinCone,xminK0sSecContinCone,xmaxK0sSecContinCone);
1630
1631 Int_t binsLaSecContinCone[3] = {19, 200, 200};
1632 Double_t xminLaSecContinCone[3] = {5.,0., -1.};
1633 Double_t xmaxLaSecContinCone[3] = {100.,20., 1.};
1634 fhnLaSecContinCone = new THnSparseF("fhnLaSecContinCone", "Secondary contamination {#Lambda #it{p}_{T} in cone around jet axis; jet #it{p}_{T}; inv mass (GeV/#it{c}^{2};#it{p}_{T}",3,binsLaSecContinCone,xminLaSecContinCone,xmaxLaSecContinCone);
1635
1636 Int_t binsALaSecContinCone[3] = {19, 200, 200};
1637 Double_t xminALaSecContinCone[3] = {5.,0., -1.};
1638 Double_t xmaxALaSecContinCone[3] = {100.,20., 1.};
1639 fhnALaSecContinCone = new THnSparseF("fhnALaSecContinCone", "Secondary contamination {#bar{#Lambda} #it{p}_{T} in cone around jet axis; jet #it{p}_{T}; inv mass (GeV/#it{c}^{2};#it{p}_{T}",3,binsALaSecContinCone,xminALaSecContinCone,xmaxALaSecContinCone);
bce887f5 1640
3ed9f288 1641 Int_t binsK0sIncl[3] = {200, 200, 200};
1642 Double_t xminK0sIncl[3] = {0.3, 0., -1.};
1643 Double_t xmaxK0sIncl[3] = {0.7, 20., 1.};
cc096464 1644 fhnK0sIncl = new THnSparseF("fhnK0sIncl","K0s inv. mass; particle pT; particle #eta",3,binsK0sIncl,xminK0sIncl,xmaxK0sIncl);
3ed9f288 1645
1646 Int_t binsK0sCone[4] = {19, 200, 200, 200};
1647 Double_t xminK0sCone[4] = {5.,0.3, 0., -1.};
1648 Double_t xmaxK0sCone[4] = {100.,0.7, 20., 1.};
cc096464 1649 fhnK0sCone = new THnSparseF("fhnK0sCone","jet pT; K0s inv. mass; particle pT; particle #eta",4,binsK0sCone,xminK0sCone,xmaxK0sCone);
3ed9f288 1650
1651 Int_t binsLaIncl[3] = {200, 200, 200};
1652 Double_t xminLaIncl[3] = {1.05, 0., -1.};
1653 Double_t xmaxLaIncl[3] = {1.25, 20., 1.};
cc096464 1654 fhnLaIncl = new THnSparseF("fhnLaIncl","La inv. mass; particle pT; particle #eta",3,binsLaIncl,xminLaIncl,xmaxLaIncl);
3ed9f288 1655
1656 Int_t binsLaCone[4] = {19, 200, 200, 200};
1657 Double_t xminLaCone[4] = {5.,1.05, 0., -1.};
1658 Double_t xmaxLaCone[4] = {100.,1.25, 20., 1.};
cc096464 1659 fhnLaCone = new THnSparseF("fhnLaCone","jet pT; La inv. mass; particle pT; particle #eta",4,binsLaCone,xminLaCone,xmaxLaCone);
3ed9f288 1660
1661 Int_t binsALaIncl[3] = {200, 200, 200};
1662 Double_t xminALaIncl[3] = {1.05, 0., -1.};
1663 Double_t xmaxALaIncl[3] = {1.25, 20., 1.};
cc096464 1664 fhnALaIncl = new THnSparseF("fhnALaIncl","ALa inv. mass; particle pT; particle #eta",3,binsALaIncl,xminALaIncl,xmaxALaIncl);
3ed9f288 1665
1666 Int_t binsALaCone[4] = {19, 200, 200, 200};
1667 Double_t xminALaCone[4] = {5.,1.05, 0., -1.};
1668 Double_t xmaxALaCone[4] = {100.,1.25, 20., 1.};
cc096464 1669 fhnALaCone = new THnSparseF("fhnALaCone","jet pT; ALa inv. mass; particle pT; particle #eta",4,binsALaCone,xminALaCone,xmaxALaCone);
3ed9f288 1670
bce887f5 1671 fh1MCMultiplicityPrimary = new TH1F("fh1MCMultiplicityPrimary", "MC Primary Particles;NPrimary;Count", 201, -0.5, 200.5);
1672 fh1MCMultiplicityTracks = new TH1F("h1MCMultiplicityTracks", "MC Tracks;Ntracks;Count", 201, -0.5, 200.5);
cc096464 1673
1674
1675 Int_t binsFeedDownLa[3] = {19, 200, 200};
1676 Double_t xminFeedDownLa[3] = {5.,1.05, 0.};
1677 Double_t xmaxFeedDownLa[3] = {100.,1.25, 20.};
1678 fhnFeedDownLa = new THnSparseF("fhnFeedDownLa","#Lambda stemming from feeddown from Xi(0/-)",3,binsFeedDownLa,xminFeedDownLa,xmaxFeedDownLa);
1679
1680 Int_t binsFeedDownALa[3] = {19, 200, 200};
1681 Double_t xminFeedDownALa[3] = {5.,1.05, 0.};
1682 Double_t xmaxFeedDownALa[3] = {100.,1.25, 20.};
1683 fhnFeedDownALa = new THnSparseF("fhnFeedDownALa","#bar#Lambda stemming from feeddown from Xibar(0/+)",3,binsFeedDownALa,xminFeedDownALa,xmaxFeedDownALa);
1684
1685 Int_t binsFeedDownLaCone[3] = {19, 200, 200};
1686 Double_t xminFeedDownLaCone[3] = {5.,1.05, 0.};
1687 Double_t xmaxFeedDownLaCone[3] = {100.,1.25, 20.};
1688 fhnFeedDownLaCone = new THnSparseF("fhnFeedDownLaCone","#Lambda stemming from feeddown from Xi(0/-) in jet cone",3,binsFeedDownLaCone,xminFeedDownLaCone,xmaxFeedDownLaCone);
1689
1690 Int_t binsFeedDownALaCone[3] = {19, 200, 200};
1691 Double_t xminFeedDownALaCone[3] = {5.,1.05, 0.};
1692 Double_t xmaxFeedDownALaCone[3] = {100.,1.25, 20.};
1693 fhnFeedDownALaCone = new THnSparseF("fhnFeedDownALaCone","#bar#Lambda stemming from feeddown from Xibar(0/+) in jet cone",3,binsFeedDownALaCone,xminFeedDownALaCone,xmaxFeedDownALaCone);
1694
1695
a6ffe507 1696 fh1MCProdRadiusK0s = new TH1F("fh1MCProdRadiusK0s","MC gen. MC K0s prod radius",200,0.,200.);
1697 fh1MCProdRadiusLambda = new TH1F("fh1MCProdRadiusLambda","MC gen. MC La prod radius",200,0.,200.);
1698 fh1MCProdRadiusAntiLambda = new TH1F("fh1MCProdRadiusAntiLambda","MC gen. MC ALa prod radius",200,0.,200.);
bce887f5 1699
1700 // Pt and inv mass distributions
1701
1702 fh1MCPtV0s = new TH1F("fh1MCPtV0s", "MC gen. V^{0} in rap range;#it{p}_{T} (GeV/#it{c})",200,0,20.);// 0.1 GeV/c steps
1703 fh1MCPtK0s = new TH1F("fh1MCPtK0s", "MC gen. K^{0}_{s} in eta range;#it{p}_{T} (GeV/#it{c})",200,0.,20.);
1704 fh1MCPtLambda = new TH1F("fh1MCPtLambda", "MC gen. #Lambda in rap range;#it{p}_{T} (GeV/#it{c})",200,0.,20.);
1705 fh1MCPtAntiLambda = new TH1F("fh1MCPtAntiLambda", "MC gen. #AntiLambda in rap range;#it{p}_{T} (GeV/#it{c})",200,0.,20.);
1706 fh1MCXiPt = new TH1F("fh1MCXiPt", "MC gen. #Xi^{-/o};#it{p}_{T} (GeV/#it{c})",200,0.,20.);
1707 fh1MCXibarPt = new TH1F("fh1MCXibarPt", "MC gen. #bar{#Xi}^{+/o};#it{p}_{T} (GeV/#it{c})",200,0.,20.);
1708 fh2MCEtaVsPtK0s = new TH2F("fh2MCEtaVsPtK0s","MC gen. K^{0}_{s} #eta; #it{p}_{T}",200,0.,20.,200,-1.,1.);
1709 fh2MCEtaVsPtLa = new TH2F("fh2MCEtaVsPtLa","MC gen. #Lambda #eta; #it{p}_{T}",200,0.,20.,200,-1.,1.);
1710 fh2MCEtaVsPtALa = new TH2F("fh2MCEtaVsPtALa","MC gen. #bar{#Lambda} #eta; #it{p}_{T}",200,0.,20.,200,-1.,1.);
1711
1712 // Rapidity
df9b7345 1713 //fh1MCRapK0s = new TH1F("fh1MCRapK0s", "MC gen. K0s;rap with cut",200,-10,10);
1714 //fh1MCRapLambda = new TH1F("fh1MCRapLambda", "MC gen. #Lambda;rap",200,-10,10);
1715 //fh1MCRapAntiLambda = new TH1F("fh1MCRapAntiLambda", "MC gen. #bar{#Lambda};rap",200,-10,10);
bce887f5 1716 fh1MCEtaAllK0s = new TH1F("fh1MCEtaAllK0s", "MC gen. K0s;#eta",200,-1.,1.);
1717 fh1MCEtaK0s = new TH1F("fh1MCEtaK0s", "MC gen. K0s;#eta with cut",200,-1.,1.);
1718 fh1MCEtaLambda = new TH1F("fh1MCEtaLambda", "MC gen. #Lambda;#eta",200,-1.,1.);
1719 fh1MCEtaAntiLambda = new TH1F("fh1MCEtaAntiLambda", "MC gen. #bar{#Lambda};#eta",200,-1.,1.);
1720
96c271c1 1721 fV0QAK0->DefineHistos();
1722 fFFHistosRecCuts->DefineHistos();
1723 fFFHistosRecCutsK0Evt->DefineHistos();
cc096464 1724 /* fFFHistosIMK0AllEvt->DefineHistos();
96c271c1 1725 fFFHistosIMK0Jet->DefineHistos();
1726 fFFHistosIMK0Cone->DefineHistos();
bce887f5 1727 fFFHistosIMLaAllEvt->DefineHistos();
1728 fFFHistosIMLaJet->DefineHistos();
1729 fFFHistosIMLaCone->DefineHistos();
bce887f5 1730 fFFHistosIMALaAllEvt->DefineHistos();
1731 fFFHistosIMALaJet->DefineHistos();
1732 fFFHistosIMALaCone->DefineHistos();
cc096464 1733 */
9b2de807 1734
96c271c1 1735 const Int_t saveLevel = 5;
1736 if(saveLevel>0){
bce887f5 1737
1738 fCommonHistList->Add(fh1EvtAllCent);
1739 fCommonHistList->Add(fh1Evt);
96c271c1 1740 fCommonHistList->Add(fh1EvtSelection);
1741 fCommonHistList->Add(fh1EvtCent);
1742 fCommonHistList->Add(fh1VertexNContributors);
1743 fCommonHistList->Add(fh1VertexZ);
1744 fCommonHistList->Add(fh1Xsec);
1745 fCommonHistList->Add(fh1Trials);
1746 fCommonHistList->Add(fh1PtHard);
1747 fCommonHistList->Add(fh1PtHardTrials);
1748 fCommonHistList->Add(fh1nRecJetsCuts);
1749 fCommonHistList->Add(fh1EvtMult);
1750 fCommonHistList->Add(fh1K0Mult);
1751 fCommonHistList->Add(fh1dPhiJetK0);
bce887f5 1752 fCommonHistList->Add(fh1LaMult);
1753 fCommonHistList->Add(fh1dPhiJetLa);
1754 fCommonHistList->Add(fh1ALaMult);
1755 fCommonHistList->Add(fh1dPhiJetALa);
1756 fCommonHistList->Add(fh1JetEta);
1757 fCommonHistList->Add(fh1JetPhi);
1758 fCommonHistList->Add(fh2JetEtaPhi);
cc096464 1759 //fCommonHistList->Add(fh1V0JetPt);
1760 fCommonHistList->Add(fh1IMK0Cone);
1761 fCommonHistList->Add(fh1IMLaCone);
1762 fCommonHistList->Add(fh1IMALaCone);
bce887f5 1763 fCommonHistList->Add(fh2FFJetTrackEta);
cc096464 1764 // fCommonHistList->Add(fh1trackPosNCls);
1765 //fCommonHistList->Add(fh1trackNegNCls);
bce887f5 1766 fCommonHistList->Add(fh1trackPosEta);
1767 fCommonHistList->Add(fh1trackNegEta);
1768 fCommonHistList->Add(fh1V0Eta);
cc096464 1769 // fCommonHistList->Add(fh1V0totMom);
8bde4137 1770 fCommonHistList->Add(fh1CosPointAngle);
bce887f5 1771 fCommonHistList->Add(fh1DecayLengthV0);
1772 fCommonHistList->Add(fh2ProperLifetimeK0sVsPtBeforeCut);
1773 fCommonHistList->Add(fh2ProperLifetimeK0sVsPtAfterCut);
bce887f5 1774 fCommonHistList->Add(fh1V0Radius);
1775 fCommonHistList->Add(fh1DcaV0Daughters);
1776 fCommonHistList->Add(fh1DcaPosToPrimVertex);
1777 fCommonHistList->Add(fh1DcaNegToPrimVertex);
1778 fCommonHistList->Add(fh2ArmenterosBeforeCuts);
1779 fCommonHistList->Add(fh2ArmenterosAfterCuts);
bce887f5 1780 fCommonHistList->Add(fh2BBLaPos);
1781 fCommonHistList->Add(fh2BBLaNeg);
bce887f5 1782 fCommonHistList->Add(fh1PosDaughterCharge);
1783 fCommonHistList->Add(fh1NegDaughterCharge);
1784 fCommonHistList->Add(fh1PtMCK0s);
1785 fCommonHistList->Add(fh1PtMCLa);
1786 fCommonHistList->Add(fh1PtMCALa);
1787 fCommonHistList->Add(fh1EtaK0s);
1788 fCommonHistList->Add(fh1EtaLa);
dde76689 1789 fCommonHistList->Add(fh1EtaALa);
1790 fCommonHistList->Add(fh1RC);
1791 fCommonHistList->Add(fh1RCBiasK0);
1792 fCommonHistList->Add(fh1RCBiasLa);
1793 fCommonHistList->Add(fh1RCBiasALa);
1794 fCommonHistList->Add(fh1MCC);
1795 fCommonHistList->Add(fh1OC);
1796 fCommonHistList->Add(fh1NJ);
cc096464 1797 fCommonHistList->Add(fhnInvMassEtaTrackPtK0s);
1798 fCommonHistList->Add(fhnInvMassEtaTrackPtLa);
1799 fCommonHistList->Add(fhnInvMassEtaTrackPtALa);
bce887f5 1800 fCommonHistList->Add(fh1TrackMultCone);
1801 fCommonHistList->Add(fh2TrackMultCone);
2e400c0d 1802 fCommonHistList->Add(fhnNJK0);
1803 fCommonHistList->Add(fhnNJLa);
1804 fCommonHistList->Add(fhnNJALa);
a6ee5cab 1805 //fCommonHistList->Add(fh2MCgenK0Cone);
1806 //fCommonHistList->Add(fh2MCgenLaCone);
1807 //fCommonHistList->Add(fh2MCgenALaCone);
1808 //fCommonHistList->Add(fh2MCEtagenK0Cone);
1809 //fCommonHistList->Add(fh2MCEtagenLaCone);
1810 //fCommonHistList->Add(fh2MCEtagenALaCone);
1811 fCommonHistList->Add(fh2CorrHijingLaProton);
1812 fCommonHistList->Add(fh2CorrInjectLaProton);
1813 fCommonHistList->Add(fh2CorrHijingALaAProton);
1814 fCommonHistList->Add(fh2CorrInjectALaAProton);
1815 fCommonHistList->Add(fh2MCEtaVsPtHijingLa);
1816 fCommonHistList->Add(fh2MCEtaVsPtInjectLa);
1817 fCommonHistList->Add(fh2MCEtaVsPtHijingALa);
1818 fCommonHistList->Add(fh2MCEtaVsPtInjectALa);
cc096464 1819 fCommonHistList->Add(fh1IMK0ConeSmear);
1820 fCommonHistList->Add(fh1IMLaConeSmear);
1821 fCommonHistList->Add(fh1IMALaConeSmear);
df9b7345 1822 fCommonHistList->Add(fhnrecMCHijingLaIncl);
1823 fCommonHistList->Add(fhnrecMCHijingLaCone);
1824 fCommonHistList->Add(fhnrecMCHijingALaIncl);
1825 fCommonHistList->Add(fhnrecMCHijingALaCone);
1826 fCommonHistList->Add(fhnrecMCInjectLaIncl);
1827 fCommonHistList->Add(fhnrecMCInjectLaCone);
1828 fCommonHistList->Add(fhnrecMCInjectALaIncl);
1829 fCommonHistList->Add(fhnrecMCInjectALaCone);
cc096464 1830 fCommonHistList->Add(fhnMCrecK0Cone);
1831 fCommonHistList->Add(fhnMCrecLaCone);
1832 fCommonHistList->Add(fhnMCrecALaCone);
1833 fCommonHistList->Add(fhnMCrecK0ConeSmear);
1834 fCommonHistList->Add(fhnMCrecLaConeSmear);
1835 fCommonHistList->Add(fhnMCrecALaConeSmear);
1836 fCommonHistList->Add(fhnK0sSecContinCone);
1837 fCommonHistList->Add(fhnLaSecContinCone);
1838 fCommonHistList->Add(fhnALaSecContinCone);
3ed9f288 1839 fCommonHistList->Add(fhnK0sIncl);
1840 fCommonHistList->Add(fhnK0sCone);
1841 fCommonHistList->Add(fhnLaIncl);
1842 fCommonHistList->Add(fhnLaCone);
1843 fCommonHistList->Add(fhnALaIncl);
1844 fCommonHistList->Add(fhnALaCone);
cc096464 1845 fCommonHistList->Add(fhnK0sPC);
1846 fCommonHistList->Add(fhnLaPC);
1847 fCommonHistList->Add(fhnALaPC);
1848 fCommonHistList->Add(fhnK0sMCC);
1849 fCommonHistList->Add(fhnLaMCC);
1850 fCommonHistList->Add(fhnALaMCC);
1851 fCommonHistList->Add(fhnK0sRC);
1852 fCommonHistList->Add(fhnLaRC);
1853 fCommonHistList->Add(fhnALaRC);
dde76689 1854 fCommonHistList->Add(fhnK0sRCBias);
1855 fCommonHistList->Add(fhnLaRCBias);
1856 fCommonHistList->Add(fhnALaRCBias);
cc096464 1857 fCommonHistList->Add(fhnK0sOC);
1858 fCommonHistList->Add(fhnLaOC);
1859 fCommonHistList->Add(fhnALaOC);
1860 fCommonHistList->Add(fh1AreaExcluded);
a6ffe507 1861 fCommonHistList->Add(fh1MedianEta);
1862 fCommonHistList->Add(fh1JetPtMedian);
bce887f5 1863 fCommonHistList->Add(fh1MCMultiplicityPrimary);
1864 fCommonHistList->Add(fh1MCMultiplicityTracks);
cc096464 1865 fCommonHistList->Add(fhnFeedDownLa);
1866 fCommonHistList->Add(fhnFeedDownALa);
1867 fCommonHistList->Add(fhnFeedDownLaCone);
1868 fCommonHistList->Add(fhnFeedDownALaCone);
bce887f5 1869 fCommonHistList->Add(fh1MCProdRadiusK0s);
1870 fCommonHistList->Add(fh1MCProdRadiusLambda);
1871 fCommonHistList->Add(fh1MCProdRadiusAntiLambda);
1872 fCommonHistList->Add(fh1MCPtV0s);
1873 fCommonHistList->Add(fh1MCPtK0s);
1874 fCommonHistList->Add(fh1MCPtLambda);
1875 fCommonHistList->Add(fh1MCPtAntiLambda);
1876 fCommonHistList->Add(fh1MCXiPt);
1877 fCommonHistList->Add(fh1MCXibarPt);
1878 fCommonHistList->Add(fh2MCEtaVsPtK0s);
1879 fCommonHistList->Add(fh2MCEtaVsPtLa);
1880 fCommonHistList->Add(fh2MCEtaVsPtALa);
df9b7345 1881 //fCommonHistList->Add(fh1MCRapK0s);
1882 //fCommonHistList->Add(fh1MCRapLambda);
1883 //fCommonHistList->Add(fh1MCRapAntiLambda);
bce887f5 1884 fCommonHistList->Add(fh1MCEtaAllK0s);
1885 fCommonHistList->Add(fh1MCEtaK0s);
1886 fCommonHistList->Add(fh1MCEtaLambda);
1887 fCommonHistList->Add(fh1MCEtaAntiLambda);
96c271c1 1888
a6ffe507 1889
1890
96c271c1 1891 fV0QAK0->AddToOutput(fCommonHistList);
1892 fFFHistosRecCuts->AddToOutput(fCommonHistList);
1893 fFFHistosRecCutsK0Evt->AddToOutput(fCommonHistList);
cc096464 1894 // fFFHistosIMK0AllEvt->AddToOutput(fCommonHistList);
1895 // fFFHistosIMK0Jet->AddToOutput(fCommonHistList);
1896 // fFFHistosIMK0Cone->AddToOutput(fCommonHistList);
1897 // fFFHistosIMLaAllEvt->AddToOutput(fCommonHistList);
1898 // fFFHistosIMLaJet->AddToOutput(fCommonHistList);
1899 // fFFHistosIMLaCone->AddToOutput(fCommonHistList);
1900 // fFFHistosIMALaAllEvt->AddToOutput(fCommonHistList);
1901 // fFFHistosIMALaJet->AddToOutput(fCommonHistList);
1902 // fFFHistosIMALaCone->AddToOutput(fCommonHistList);
bce887f5 1903
1904
9b2de807 1905 }
bce887f5 1906
cc096464 1907 // =========== Switch on Sumw2 for all histos ===========
1908 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
bce887f5 1909
1910 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
1911
1912 if (h1) h1->Sumw2();//The error per bin will be computed as sqrt(sum of squares of weight) for each bin
1913 else{
96c271c1 1914 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
1915 if(hnSparse) hnSparse->Sumw2();
1916 }
bce887f5 1917
9b2de807 1918 }
96c271c1 1919 TH1::AddDirectory(oldStatus);
a6ffe507 1920 PostData(1, fCommonHistList);
9b2de807 1921}
1922
96c271c1 1923//_______________________________________________
1924void AliAnalysisTaskJetChem::UserExec(Option_t *)
1925{
1926 // Main loop
1927 // Called for each event
9b2de807 1928
bce887f5 1929 if(fDebug > 1) Printf("AliAnalysisTaskJetChem::UserExec()");
1930
96c271c1 1931 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
9b2de807 1932
bce887f5 1933 // Trigger selection
96c271c1 1934 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
1935 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
bce887f5 1936
a6ffe507 1937
1938 //for AliPIDResponse:
1939 //AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
1940 //AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
1941 fPIDResponse = inputHandler->GetPIDResponse();
1942
1943 if (!fPIDResponse){if(fDebug > 1) Printf("AliAnalysisTaskJetChem::UserExec(): fPIDResponse does not exist!"); return;}
1944
bce887f5 1945 //std::cout<<"inputHandler->IsEventSelected(): "<<inputHandler->IsEventSelected()<<std::endl;
1946 //std::cout<<"fEvtSelectionMask: "<<fEvtSelectionMask<<std::endl;
1947
1948 if(!(inputHandler->IsEventSelected() & fEvtSelectionMask)){
1949 //std::cout<<"########event rejected!!############"<<std::endl;
96c271c1 1950 fh1EvtSelection->Fill(1.);
bce887f5 1951 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
1952 PostData(1, fCommonHistList);
1953 return;
1954 }
1955
1956 fESD = dynamic_cast<AliESDEvent*>(InputEvent());//casting of pointers for inherited class, only for ESDs
96c271c1 1957 if(!fESD){
1958 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
1959 }
1960
1961 fMCEvent = MCEvent();
1962 if(!fMCEvent){
1963 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
1964 }
1965
bce887f5 1966 // get AOD event from input/output
96c271c1 1967 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
1968 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
1969 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
1970 if(fUseAODInputJets) fAODJets = fAOD;
1971 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
1972 }
1973 else {
1974 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
1975 if( handler && handler->InheritsFrom("AliAODHandler") ) {
1976 fAOD = ((AliAODHandler*)handler)->GetAOD();
1977 fAODJets = fAOD;
1978 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
1979 }
1980 }
1981
1982 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
1983 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
bce887f5 1984 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ){
96c271c1 1985 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
1986 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
1987 }
1988 }
1989
1990 if(fNonStdFile.Length()!=0){
1991 // case we have an AOD extension - fetch the jets from the extended output
1992
1993 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
1994 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
1995 if(!fAODExtension){
1996 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
1997 }
1998 }
1999
2000 if(!fAOD){
2001 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
2002 return;
2003 }
2004 if(!fAODJets){
2005 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
2006 return;
2007 }
9b2de807 2008
bce887f5 2009 //primary vertex position:
2010 AliAODVertex *myPrimaryVertex = NULL;
2011 myPrimaryVertex = (AliAODVertex*)fAOD->GetPrimaryVertex();
2012 if (!myPrimaryVertex) return;
2013 fh1Evt->Fill(1.);//fill in every event that was accessed with InputHandler
9b2de807 2014
96c271c1 2015 // event selection *****************************************
2016
96c271c1 2017 // *** vertex cut ***
2018 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
2019 Int_t nTracksPrim = primVtx->GetNContributors();
2020 fh1VertexNContributors->Fill(nTracksPrim);
2021
2022 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
bce887f5 2023 //if(!nTracksPrim){
2024 if(nTracksPrim <= 2){
96c271c1 2025 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
2026 fh1EvtSelection->Fill(3.);
2027 PostData(1, fCommonHistList);
2028 return;
2029 }
2030
2031 fh1VertexZ->Fill(primVtx->GetZ());
2032
2033 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
2034 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
2035 fh1EvtSelection->Fill(4.);
2036 PostData(1, fCommonHistList);
2037 return;
2038 }
2039
bce887f5 2040 // accepts only events that have same "primary" and SPD vertex, special issue of LHC11h PbPb data
2041
2042 //fAOD: pointer to global primary vertex
2043
2044 const AliAODVertex* spdVtx = fAOD->GetPrimaryVertexSPD();
2045
2046 if (TMath::Abs(spdVtx->GetZ() - primVtx->GetZ())>fDeltaVertexZ) { if (fDebug > 1) Printf("deltaZVertex: event REJECTED..."); return;}
2047
2048
2049 //check for vertex radius to be smaller than 1 cm, (that was first applied by Vit Kucera in his analysis)
2050
2051 Double_t vtxX = primVtx->GetX();
2052 Double_t vtxY = primVtx->GetY();
2053
2054 if(TMath::Sqrt(vtxX*vtxX + vtxY*vtxY)>=1){
2055 if (fDebug > 1) Printf("%s:%d primary vertex r = %f: event REJECTED...",(char*)__FILE__,__LINE__,TMath::Sqrt(vtxX*vtxX + vtxY*vtxY));
2056 return;
2057 }
2058
2059
96c271c1 2060 TString primVtxName(primVtx->GetName());
2061
2062 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
2063 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
2064 fh1EvtSelection->Fill(5.);
2065 PostData(1, fCommonHistList);
2066 return;
9f77f0ce 2067 }
96c271c1 2068
bce887f5 2069 Bool_t selectedHelper = AliAnalysisHelperJetTasks::Selected();
2070 if(!selectedHelper){
2071 fh1EvtSelection->Fill(6.);
2072 PostData(1, fCommonHistList);
2073 return;
2074 }
2075
6ec586c1 2076 // event selection *****************************************
2077
bce887f5 2078 Double_t centPercent = -1;
b6eb08db 2079 Int_t cl = 0;
bce887f5 2080 if(fEventClass>0){
bce887f5 2081
6ec586c1 2082 if(handler && handler->InheritsFrom("AliAODInputHandler")){
2083
bce887f5 2084 centPercent = fAOD->GetHeader()->GetCentrality();
6ec586c1 2085 cl = 1;
2086 //std::cout<<"centPercent: "<<centPercent<<std::endl;
2087
bce887f5 2088 fh1EvtAllCent->Fill(centPercent);
6ec586c1 2089 /*
2090 if(centPercent>10) cl = 2; //standard PWG-JE binning
2091 if(centPercent>30) cl = 3;
2092 if(centPercent>50) cl = 4;
2093 */
2094
2095
bce887f5 2096 if(centPercent < 0) cl = -1;
2097 if(centPercent >= 0) cl = 1;
2098 if(centPercent > 10) cl = 2; //standard PWG-JE binning
2099 if(centPercent > 30) cl = 3;
2100 if(centPercent > 50) cl = 4;
2101 if(centPercent > 80) cl = 5; //takes centralities higher than my upper edge of 80%, not to be used
6ec586c1 2102
bce887f5 2103 }
2104 else {
2105
2106 cl = AliAnalysisHelperJetTasks::EventClass();
2107
2108 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); //ESD JetServices Task has the centrality binning 0-10,10-30,30-50,50-80
2109 fh1EvtAllCent->Fill(centPercent);
2110 }
2111
2112 if(cl!=fEventClass){ // event not in selected event class, reject event#########################################
2113
2114 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
2115 fh1EvtSelection->Fill(2.);
2116 PostData(1, fCommonHistList);
2117 return;
2118 }
2119 }//end if fEventClass > 0
2120
2121
96c271c1 2122 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
bce887f5 2123
2124 //test test
2125 //Printf("Analysis event #%5d", (Int_t) fEntry);
2126
96c271c1 2127 fh1EvtSelection->Fill(0.);
2128 fh1EvtCent->Fill(centPercent);
2129
96c271c1 2130 //___ get MC information __________________________________________________________________
9f77f0ce 2131
bce887f5 2132
2133 Double_t ptHard = 0.; //parton energy bins -> energy of particle
96c271c1 2134 Double_t nTrials = 1; // trials for MC trigger weight for real data
9b2de807 2135
96c271c1 2136 if(fMCEvent){
2137 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
bce887f5 2138 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);//check usage of Pythia (pp) or Hijing (PbPb)
96c271c1 2139 AliGenHijingEventHeader* hijingGenHeader = 0x0;
bce887f5 2140
96c271c1 2141 if(pythiaGenHeader){
bce887f5 2142 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
2143 nTrials = pythiaGenHeader->Trials();
2144 ptHard = pythiaGenHeader->GetPtHard();
2145
2146 fh1PtHard->Fill(ptHard);
2147 fh1PtHardTrials->Fill(ptHard,nTrials);
2148
2149
96c271c1 2150 } else { // no pythia, hijing?
9b2de807 2151
bce887f5 2152 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
2153
2154 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2155 if(!hijingGenHeader){
2156 if(fDebug>3) Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
2157 } else {
2158 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
2159 }
96c271c1 2160 }
bce887f5 2161
96c271c1 2162 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
9b2de807 2163 }
bce887f5 2164
2165 //____ fetch jets _______________________________________________________________
9b2de807 2166
cc096464 2167 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);//fetch list with jets that survived all jet cuts: fJetsRecCuts
9b2de807 2168
bce887f5 2169 Int_t nRecJetsCuts = 0; //number of reconstructed jets after jet cuts
2170 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
96c271c1 2171 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2172 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
2173 fh1nRecJetsCuts->Fill(nRecJetsCuts);
9b2de807 2174
bce887f5 2175
2176 //____ fetch background clusters ___________________________________________________
2177 if(fBranchRecBckgClusters.Length() != 0){
2178
2179 Int_t nBJ = GetListOfBckgJets(fBckgJetsRec, kJetsRec);
2180 Int_t nRecBckgJets = 0;
2181 if(nBJ>=0) nRecBckgJets = fBckgJetsRec->GetEntries();
2182 if(fDebug>2)Printf("%s:%d Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
2183 if(nBJ != nRecBckgJets) Printf("%s:%d Mismatch Selected Rec background jets: %d %d",(char*)__FILE__,__LINE__,nBJ,nRecBckgJets);
2184 }
2185
2186
2187 //____ fetch reconstructed particles __________________________________________________________
96c271c1 2188
bce887f5 2189 Int_t nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);//all tracks of event
2190 if(fDebug>2)Printf("%s:%d selected reconstructed tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,fTracksRecCuts->GetEntries());
96c271c1 2191 if(fTracksRecCuts->GetEntries() != nTCuts)
bce887f5 2192 Printf("%s:%d Mismatch selected reconstructed tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,fTracksRecCuts->GetEntries());
96c271c1 2193 fh1EvtMult->Fill(fTracksRecCuts->GetEntries());
9b2de807 2194
bce887f5 2195 Int_t nK0s = GetListOfV0s(fListK0s,fK0Type,kK0,myPrimaryVertex,fAOD);//all V0s in event with K0s assumption
2196
5cca0df6 2197 if(fDebug>5){std::cout<<"fK0Type: "<<fK0Type<<" kK0: "<<kK0<<" myPrimaryVertex: "<<myPrimaryVertex<<" fAOD: "<<fAOD<<std::endl;}
2198
bce887f5 2199 //std::cout<< "nK0s: "<<nK0s<<std::endl;
2200
5cca0df6 2201 if(fDebug>2)Printf("%s:%d Selected V0s after cuts: %d %d",(char*)__FILE__,__LINE__,nK0s,fListK0s->GetEntries());
96c271c1 2202 if(nK0s != fListK0s->GetEntries()) Printf("%s:%d Mismatch selected K0s: %d %d",(char*)__FILE__,__LINE__,nK0s,fListK0s->GetEntries());
2203 fh1K0Mult->Fill(fListK0s->GetEntries());
9b2de807 2204
96c271c1 2205
bce887f5 2206 Int_t nLa = GetListOfV0s(fListLa,fLaType,kLambda,myPrimaryVertex,fAOD);//all V0s in event with Lambda particle assumption
2207 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nLa,fListLa->GetEntries());
2208 if(nLa != fListLa->GetEntries()) Printf("%s:%d Mismatch selected La: %d %d",(char*)__FILE__,__LINE__,nLa,fListLa->GetEntries());
2209 fh1LaMult->Fill(fListLa->GetEntries());
2210
2211 Int_t nALa = GetListOfV0s(fListALa,fALaType,kAntiLambda,myPrimaryVertex,fAOD);//all V0s in event with Antilambda particle assumption
2212 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nALa,fListALa->GetEntries());
2213 if(nALa != fListALa->GetEntries()) Printf("%s:%d Mismatch selected ALa: %d %d",(char*)__FILE__,__LINE__,nALa,fListALa->GetEntries());
2214 fh1ALaMult->Fill(fListALa->GetEntries());
2215
2216
2217
2218 //fetch MC gen particles_______________________________________________________
2219
2220 if(fAnalysisMC){ // here
2221
2222 //fill feeddown histo for associated particles
2223
2224 // Access MC generated particles, fill TLists and histograms :
2225
2226 Int_t nMCgenK0s = GetListOfMCParticles(fListMCgenK0s,kK0,fAOD); //fill TList with MC generated primary true K0s (list to fill, particletype, mc aod event)
2227 if(nMCgenK0s != fListMCgenK0s->GetEntries()) Printf("%s:%d Mismatch selected MCgenK0s: %d %d",(char*)__FILE__,__LINE__,nMCgenK0s,fListMCgenK0s->GetEntries());
2228
2229
2230 for(Int_t it=0; it<fListMCgenK0s->GetSize(); ++it){ // loop MC generated K0s, filling histograms
2231
2232 AliAODMCParticle* mcp0 = dynamic_cast<AliAODMCParticle*>(fListMCgenK0s->At(it));
2233 if(!mcp0) continue;
2234
2235 //MC gen K0s
2236
df9b7345 2237 //Double_t fRapCurrentPart = MyRapidity(mcp0->E(),mcp0->Pz());
bce887f5 2238 Double_t fEtaCurrentPart = mcp0->Eta();
2239 Double_t fPtCurrentPart = mcp0->Pt();
2240
2241 fh1MCEtaK0s->Fill(fEtaCurrentPart);
df9b7345 2242 //fh1MCRapK0s->Fill(fRapCurrentPart);
bce887f5 2243 fh1MCPtK0s->Fill(fPtCurrentPart);
2244
2245 fh2MCEtaVsPtK0s->Fill(fPtCurrentPart,fEtaCurrentPart); //eta cut, physical primary selection and decay mode considered
a6ee5cab 2246
bce887f5 2247 }//end of the loop
a6ee5cab 2248
bce887f5 2249 Int_t nMCgenLa = GetListOfMCParticles(fListMCgenLa,kLambda,fAOD); //fill TList with MC generated primary true Lambdas (list to fill, particletype, mc aod event)
2250 if(nMCgenLa != fListMCgenLa->GetEntries()) Printf("%s:%d Mismatch selected MCgenLa: %d %d",(char*)__FILE__,__LINE__,nMCgenLa,fListMCgenLa->GetEntries());
2251
a6ee5cab 2252 TList *mclist = fAOD->GetList();
2253 TClonesArray *stackMC = 0x0;
2254 stackMC = (TClonesArray*)mclist->FindObject(AliAODMCParticle::StdBranchName());
2255 if (!stackMC) {
2256 Printf("ERROR: AliAnalysisTaskJetChem.cxx: loop over MC gen. particles: stackMC not available!");
2257 }
2258
2259 AliAODMCHeader *mcHdr=(AliAODMCHeader*)mclist->FindObject(AliAODMCHeader::StdBranchName());
2260 if(!mcHdr)Printf("ERROR: AliAnalysisTaskJetChem.cxx: loop over MC gen. particles: mcHdr not available!");
2261
bce887f5 2262 for(Int_t it=0; it<fListMCgenLa->GetSize(); ++it){ // loop MC generated La, filling histograms
2263
2264 AliAODMCParticle* mcp0 = dynamic_cast<AliAODMCParticle*>(fListMCgenLa->At(it));
2265 if(!mcp0) continue;
2266
2267 //MC gen Lambdas
2268
df9b7345 2269 //Double_t fRapCurrentPart = MyRapidity(mcp0->E(),mcp0->Pz());
bce887f5 2270 Double_t fEtaCurrentPart = mcp0->Eta();
2271 Double_t fPtCurrentPart = mcp0->Pt();
a6ee5cab 2272 TString generatorName;
bce887f5 2273
2274 fh1MCEtaLambda->Fill(fEtaCurrentPart);
df9b7345 2275 //fh1MCRapLambda->Fill(fRapCurrentPart);
bce887f5 2276 fh1MCPtLambda->Fill(fPtCurrentPart);
2277 fh2MCEtaVsPtLa->Fill(fPtCurrentPart,fEtaCurrentPart); //eta cut, physical primary selection and decay mode considered
a6ee5cab 2278
2279 Int_t mcp0label = mcp0->GetLabel();
2280 Bool_t istrackInject = IsTrackInjected(mcp0label, mcHdr, stackMC, generatorName);
2281
2282 //std::cout<<"generatorName: "<<generatorName<<std::endl;
bce887f5 2283
2284
a6ee5cab 2285 if(generatorName == "Hijing"){
2286 fh2MCEtaVsPtHijingLa->Fill(fPtCurrentPart,fEtaCurrentPart);
2287 }
2288
2289 if(istrackInject == kTRUE){
2290 fh2MCEtaVsPtHijingLa->Fill(fPtCurrentPart,fEtaCurrentPart);
2291 }
2292
2293 }//end of the loop
2294
2295
bce887f5 2296 Int_t nMCgenALa = GetListOfMCParticles(fListMCgenALa,kAntiLambda,fAOD); //fill TList with MC generated primary true Antilambdas (list to fill, particletype, mc aod event)
2297 if(nMCgenALa != fListMCgenALa->GetEntries()) Printf("%s:%d Mismatch selected MCgenALa: %d %d",(char*)__FILE__,__LINE__,nMCgenALa,fListMCgenALa->GetEntries());
2298
2299
2300 for(Int_t it=0; it<fListMCgenALa->GetSize(); ++it){ // loop MC generated ALa, filling histograms
2301
2302 AliAODMCParticle* mcp0 = dynamic_cast<AliAODMCParticle*>(fListMCgenALa->At(it));
2303 if(!mcp0) continue;
2304
2305 //MC gen Antilambdas
2306
df9b7345 2307 //Double_t fRapCurrentPart = MyRapidity(mcp0->E(),mcp0->Pz());
bce887f5 2308 Double_t fEtaCurrentPart = mcp0->Eta();
2309 Double_t fPtCurrentPart = mcp0->Pt();
2310
2311 fh1MCEtaAntiLambda->Fill(fEtaCurrentPart);
df9b7345 2312 //fh1MCRapAntiLambda->Fill(fRapCurrentPart);
bce887f5 2313 fh1MCPtAntiLambda->Fill(fPtCurrentPart);
2314 fh2MCEtaVsPtALa->Fill(fPtCurrentPart,fEtaCurrentPart); //eta cut, physical primary selection and decay mode considered
2315
2316 }//end of the loop
2317
2318
2319
2320 //loop over MC feeddown candidates in TList
2321
2322 //....
2323
2324
2325 } //end MCAnalysis part for gen particles
2326
96c271c1 2327
bce887f5 2328 // ___ V0 QA + K0s + La + ALa pt spectra all events _______________________________________________
2329
2330 Double_t lPrimaryVtxPosition[3];
2331 Double_t lV0Position[3];
2332 lPrimaryVtxPosition[0] = primVtx->GetX();
2333 lPrimaryVtxPosition[1] = primVtx->GetY();
2334 lPrimaryVtxPosition[2] = primVtx->GetZ();
cc096464 2335 Double_t dRadiusExcludeCone = 2*GetFFRadius(); //2 times jet radius
bce887f5 2336 //------------------------------------------
cc096464 2337 for(Int_t it=0; it<fListK0s->GetSize(); ++it){
2338
bce887f5 2339 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListK0s->At(it));
2340 if(!v0) continue;
cc096464 2341
bce887f5 2342 // VO's main characteristics to check the reconstruction cuts
2343
cc096464 2344 //Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
bce887f5 2345 Double_t invMK0s=0;
2346 Double_t trackPt=0;
2347 Double_t fV0Radius = -999;
2348 Double_t fDcaV0Daughters = v0->DcaV0Daughters();
2349 Double_t fDcaPosToPrimVertex = v0->DcaPosToPrimVertex();//IP of positive charged daughter
2350 Double_t fDcaNegToPrimVertex = v0->DcaNegToPrimVertex();//IP of negative charged daughter
2351 Int_t negDaughterpdg = 0;
2352 Int_t posDaughterpdg = 0;
2353 Int_t motherType = 0;
2354 Int_t v0Label = -1;
2355 Double_t MCPt = 0;
2356 Bool_t fPhysicalPrimary = kFALSE;//don't use IsPhysicalPrimary() anymore for MC analysis, use instead 2D distance from primary to secondary vertex
2357 Int_t MCv0PdgCode = 0;
2358
2359 AliAODTrack *trackPos = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(0));
2360 AliAODTrack *trackNeg = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(1));
2361
2362 Double_t PosEta = trackPos->AliAODTrack::Eta();//daughter track charge is sometimes wrong here, account for that!!!
2363 Double_t NegEta = trackNeg->AliAODTrack::Eta();
f98082ec 2364
bce887f5 2365 //Double_t trackPosNcls = trackPos->GetTPCNcls();//Get number of clusters for positive charged tracks
2366 //Double_t trackNegNcls = trackNeg->GetTPCNcls();//Get number of clusters for negative charged tracks
2367
2368 CalculateInvMass(v0, kK0, invMK0s, trackPt); //function to calculate invMass with TLorentzVector class
2369
33fc837a 2370
2371 //OUTSIDE CONES:########
2372
bce887f5 2373 Double_t fEta = v0->PseudoRapV0();
cc096464 2374 Bool_t bIsInCone = kFALSE;//init boolean, is not in any cone (OC)
2375
2376 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){ // loop over all jets in event
2377
2378 AliAODJet* jet = (AliAODJet*) (fJetsRecCuts->At(ij));
33fc837a 2379 TList* jettracklist = new TList();
2380 Double_t sumPt = 0.;
2381 Bool_t isBadJet = kFALSE;
2382
2383 if(GetFFRadius()<=0){
2384 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);// list of jet tracks from trackrefs
2385 } else {
2386 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet); // fill list of tracks in cone around jet axis with cone Radius (= 0.4 standard)
2387 }
cc096464 2388
33fc837a 2389
2390 //leading track pt bias on jets inside this small jet loop
2391 if(isBadJet) continue;
2392 //if jet is selected, then check whether V0 is part of the jet cone:
cc096464 2393 if(IsParticleInCone(jet, v0, dRadiusExcludeCone) == kTRUE) {bIsInCone = kTRUE;}
2394
2395 }
2396
2397 if(bIsInCone==kFALSE){//K0s is not part of any selected jet in event
2398 Double_t vK0sOC[3] = {invMK0s,trackPt,fEta};
2399 fhnK0sOC->Fill(vK0sOC);
2400 }
bce887f5 2401
33fc837a 2402 //end of outside cone K0s
2403
bce887f5 2404 Double_t fV0cosPointAngle = v0->CosPointingAngle(lPrimaryVtxPosition);
9b2de807 2405
bce887f5 2406 lV0Position[0]= v0->DecayVertexV0X();
2407 lV0Position[1]= v0->DecayVertexV0Y();
2408 lV0Position[2]= v0->DecayVertexV0Z();
2409
bce887f5 2410 Double_t fV0DecayLength = v0->DecayLengthV0(lPrimaryVtxPosition);
2411 fV0Radius = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]);
cc096464 2412
bce887f5 2413
2414 fV0QAK0->FillTrackQA(v0->Eta(), TVector2::Phi_0_2pi(v0->Phi()), v0->Pt());
cc096464 2415 //fFFHistosIMK0AllEvt->FillFF(trackPt, invMK0s, jetPt, incrementJetPt);
bce887f5 2416 //fh1trackPosNCls->Fill(trackPosNcls);
2417 //fh1trackNegNCls->Fill(trackNegNcls);
2418 fh1EtaK0s->Fill(fEta);
3ed9f288 2419
cc096464 2420 Double_t vK0sIncl[3] = {invMK0s,trackPt,fEta}; //fill all K0s in event into THnSparse of 3 dimensions
3ed9f288 2421 fhnK0sIncl->Fill(vK0sIncl);
2422
df9b7345 2423
bce887f5 2424 if(fAnalysisMC){
df9b7345 2425 TString generatorName;
2426 Bool_t isinjected;
bce887f5 2427 TList *listmc = fAOD->GetList();
df9b7345 2428 Bool_t mclabelcheck = MCLabelCheck(v0, kK0, trackNeg, trackPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PdgCode, generatorName, isinjected);
6ec586c1 2429 //if(fPhysicalPrimary == kFALSE)continue;
bce887f5 2430 //std::cout<<"mclabelcheck: "<<mclabelcheck<<std::endl;
2431 //std::cout<<"IsPhysicalPrimary: "<<fPhysicalPrimary<<std::endl;
2432
2433 if(mclabelcheck == kFALSE)continue;
cc096464 2434
2435 Double_t vInvMassEtaTrackPtK0s[3] = {fEta,invMK0s,trackPt};
2436 fhnInvMassEtaTrackPtK0s->Fill(vInvMassEtaTrackPtK0s);//includes also feeddown particles, mainly phi particles whose decay products are considered here as primary
2437
2438
bce887f5 2439 fh1PtMCK0s->Fill(MCPt);
96c271c1 2440 }
bce887f5 2441
2442
2443 fh1V0Eta->Fill(fEta);
cc096464 2444 //fh1V0totMom->Fill(fV0TotalMomentum);
bce887f5 2445 fh1CosPointAngle->Fill(fV0cosPointAngle);
2446 fh1DecayLengthV0->Fill(fV0DecayLength);
2447 fh1V0Radius->Fill(fV0Radius);
2448 fh1DcaV0Daughters->Fill(fDcaV0Daughters);
2449 fh1DcaPosToPrimVertex->Fill(fDcaPosToPrimVertex);
2450 fh1DcaNegToPrimVertex->Fill(fDcaNegToPrimVertex);
2451 fh1trackPosEta->Fill(PosEta);
2452 fh1trackNegEta->Fill(NegEta);
9b2de807 2453 }
bce887f5 2454
9b2de807 2455
bce887f5 2456 // __La pt spectra all events _______________________________________________
9b2de807 2457
bce887f5 2458
2459 for(Int_t it=0; it<fListLa->GetSize(); ++it){ // loop all La
2460
2461 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListLa->At(it));
2462 if(!v0) continue;
2463
2464 // VO's main characteristics to check the reconstruction cuts
cc096464 2465 // Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
bce887f5 2466 Double_t invMLa =0;
2467 Double_t trackPt=0;
2468 Double_t fV0Radius = -999;
2469 Double_t fDcaV0Daughters = v0->DcaV0Daughters();
2470 Double_t fDcaPosToPrimVertex = v0->DcaPosToPrimVertex();//IP of positive charged daughter
2471 Double_t fDcaNegToPrimVertex = v0->DcaNegToPrimVertex();//IP of negative charged daughter
2472 Int_t negDaughterpdg = 0;
2473 Int_t posDaughterpdg = 0;
2474 Int_t motherType = 0;
2475 Int_t v0Label = -1;
2476 Double_t MCPt = 0;
2477 Bool_t fPhysicalPrimary = kFALSE;
2478 Int_t MCv0PdgCode = 0;
2479 AliAODTrack *trackPos = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(0));
2480 AliAODTrack *trackNeg = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(1));
2481
2482 //Double_t trackPosNcls = trackPos->GetTPCNcls();//Get number of clusters for positive charged tracks
2483 //Double_t trackNegNcls = trackNeg->GetTPCNcls();//Get number of clusters for negative charged tracks
2484
2485 Double_t PosEta = trackPos->AliAODTrack::Eta();//daughter track charge is sometimes wrong here, account for that!!!
2486 Double_t NegEta = trackNeg->AliAODTrack::Eta();
2487
cc096464 2488 Double_t fEta = v0->PseudoRapV0();
2489 Bool_t bIsInCone = kFALSE;//init boolean, is not in any cone (OC)
2490
bce887f5 2491 CalculateInvMass(v0, kLambda, invMLa, trackPt);//function to calculate invMass with TLorentzVector class
2492
2493
cc096464 2494 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){ // loop over all jets in event
2495
2496 AliAODJet* jet = (AliAODJet*) (fJetsRecCuts->At(ij));
33fc837a 2497 TList* jettracklist = new TList();
2498 Double_t sumPt = 0.;
2499 Bool_t isBadJet = kFALSE;
2500
2501 if(GetFFRadius()<=0){
2502 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);// list of jet tracks from trackrefs
2503 } else {
2504 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet); // fill list of tracks in cone around jet axis with cone Radius (= 0.4 standard)
2505 }
cc096464 2506
33fc837a 2507
2508 //leading track pt bias on jets inside this small jet loop
2509 if(isBadJet) continue;
2510
cc096464 2511 if(IsParticleInCone(jet, v0, dRadiusExcludeCone) == kTRUE) {bIsInCone = kTRUE;
2512 }
2513 }
2514
2515 if(bIsInCone == kFALSE){//success!
2516 Double_t vLaOC[3] = {invMLa, trackPt,fEta};
2517 fhnLaOC->Fill(vLaOC);
2518 }
2519
2520 // Double_t jetPt = fFFIMJetPtMin; // assign pro forma jet energy
bce887f5 2521 // Double_t fRap = v0->Y(3122);
cc096464 2522
bce887f5 2523 Double_t fV0DecayLength = v0->DecayLengthV0(lPrimaryVtxPosition);
2524 Double_t fV0cosPointAngle = v0->CosPointingAngle(lPrimaryVtxPosition);
2525 lV0Position[0]= v0->DecayVertexV0X();
2526 lV0Position[1]= v0->DecayVertexV0Y();
2527 lV0Position[2]= v0->DecayVertexV0Z();
2528
2529 fV0Radius = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]);
2530
cc096464 2531 //fFFHistosIMLaAllEvt->FillFF(trackPt, invMLa, jetPt, incrementJetPt);
bce887f5 2532 //fh1trackPosNCls->Fill(trackPosNcls);
2533 //fh1trackNegNCls->Fill(trackNegNcls);
2534 fh1EtaLa->Fill(fEta);
3ed9f288 2535
2536 Double_t vLaIncl[3] = {invMLa,trackPt,fEta};
2537 fhnLaIncl->Fill(vLaIncl);
2538
df9b7345 2539 if(fAnalysisMC){
2540
2541 TString generatorName;
2542 Bool_t isinjected;
bce887f5 2543 TList* listmc = fAOD->GetList();
df9b7345 2544 Bool_t mclabelcheck = MCLabelCheck(v0, kLambda, trackNeg, trackPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PdgCode, generatorName, isinjected);
6ec586c1 2545 if(mclabelcheck == kFALSE)continue;
2546 //if(fPhysicalPrimary == kFALSE)continue;
cc096464 2547
df9b7345 2548 if(generatorName == "Hijing"){
2549 Double_t vrecMCHijingLaIncl[3] = {invMLa,trackPt,fEta};
2550 fhnrecMCHijingLaIncl->Fill(vrecMCHijingLaIncl);
a6ee5cab 2551
2552 Double_t protonPt = trackPos->Pt();
2553 fh2CorrHijingLaProton->Fill(trackPt,protonPt);
df9b7345 2554 }
2555
2556 if(isinjected == kTRUE){
2557 Double_t vrecMCInjectLaIncl[3] = {invMLa,trackPt,fEta};
2558 fhnrecMCInjectLaIncl->Fill(vrecMCInjectLaIncl);
a6ee5cab 2559
2560 Double_t protonPt = trackPos->Pt();
2561 fh2CorrInjectLaProton->Fill(trackPt,protonPt);
df9b7345 2562 }
2563
cc096464 2564 Double_t vInvMassEtaTrackPtLa[3] = {fEta,invMLa,trackPt};
2565 fhnInvMassEtaTrackPtLa->Fill(vInvMassEtaTrackPtLa);//includes also feed-down particles
2566 fh1PtMCLa->Fill(MCPt);
2567
2568
bce887f5 2569 fh1PtMCLa->Fill(MCPt);
2570 }
2571 fh1V0Eta->Fill(fEta);
cc096464 2572 //fh1V0totMom->Fill(fV0TotalMomentum);
bce887f5 2573 fh1CosPointAngle->Fill(fV0cosPointAngle);
2574 fh1DecayLengthV0->Fill(fV0DecayLength);
2575 fh1V0Radius->Fill(fV0Radius);
2576 fh1DcaV0Daughters->Fill(fDcaV0Daughters);
2577 fh1DcaPosToPrimVertex->Fill(fDcaPosToPrimVertex);
2578 fh1DcaNegToPrimVertex->Fill(fDcaNegToPrimVertex);
2579 fh1trackPosEta->Fill(PosEta);
2580 fh1trackNegEta->Fill(NegEta);
2581 }
2582
2583 // __ALa pt spectra all events _______________________________________________
2584
2585 for(Int_t it=0; it<fListALa->GetSize(); ++it){ // loop all ALa
2586
2587 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListALa->At(it));
2588 if(!v0) continue;
2589
9b2de807 2590
bce887f5 2591 //VO's main characteristics to check the reconstruction cuts
2592 Double_t invMALa =0;
2593 Double_t trackPt=0;
2594 Double_t fV0Radius = -999;
2595 Double_t fDcaV0Daughters = v0->DcaV0Daughters();
2596 Double_t fDcaPosToPrimVertex = v0->DcaPosToPrimVertex();//IP of positive charged daughter
2597 Double_t fDcaNegToPrimVertex = v0->DcaNegToPrimVertex();//IP of negative charged daughter
2598 Int_t negDaughterpdg = 0;
2599 Int_t posDaughterpdg = 0;
2600 Int_t motherType = 0;
2601 Int_t v0Label = -1;
2602 Double_t MCPt = 0;
2603 Bool_t fPhysicalPrimary = kFALSE;
2604 Int_t MCv0PdgCode = 0;
2605
2606 AliAODTrack *trackPos = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(0));
2607 AliAODTrack *trackNeg = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(1));
2608
2609 Double_t PosEta = trackPos->AliAODTrack::Eta();//daughter track charge is sometimes wrong here, account for that!!!
2610 Double_t NegEta = trackNeg->AliAODTrack::Eta();
cc096464 2611
2612 Double_t fEta = v0->PseudoRapV0();
2613 Bool_t bIsInCone = kFALSE;//init boolean for OC
2614
bce887f5 2615
2616 CalculateInvMass(v0, kAntiLambda, invMALa, trackPt); //function to calculate invMass with TLorentzVector class
2617
cc096464 2618 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){ // loop over all jets in event
2619
2620 AliAODJet* jet = (AliAODJet*) (fJetsRecCuts->At(ij));
33fc837a 2621 TList* jettracklist = new TList();
2622 Double_t sumPt = 0.;
2623 Bool_t isBadJet = kFALSE;
2624
2625 if(GetFFRadius()<=0){
2626 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);// list of jet tracks from trackrefs
2627 } else {
2628 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet); // fill list of tracks in cone around jet axis with cone Radius (= 0.4 standard)
2629 }
cc096464 2630
33fc837a 2631
2632 //leading track pt bias on jets inside this small jet loop
2633 if(isBadJet) continue;
2634
cc096464 2635 if(IsParticleInCone(jet, v0, dRadiusExcludeCone) == kTRUE){
2636 bIsInCone = kTRUE;
2637 }
2638 }
2639
2640 if(bIsInCone == kFALSE){//success!
2641 Double_t vALaOC[3] = {invMALa, trackPt,fEta};
2642 fhnALaOC->Fill(vALaOC);
2643 }
2644
2645 //Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2646 //Double_t jetPt = fFFIMJetPtMin; // assign pro forma jet energy
bce887f5 2647 // Double_t fRap = v0->Y(-3122);
cc096464 2648
bce887f5 2649
bce887f5 2650 Double_t fV0cosPointAngle = v0->CosPointingAngle(lPrimaryVtxPosition);
2651 lV0Position[0]= v0->DecayVertexV0X();
2652 lV0Position[1]= v0->DecayVertexV0Y();
2653 lV0Position[2]= v0->DecayVertexV0Z();
2654 Double_t fV0DecayLength = v0->DecayLengthV0(lPrimaryVtxPosition);
2655 fV0Radius = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]);
2656
cc096464 2657 //fFFHistosIMALaAllEvt->FillFF(trackPt, invMALa, jetPt, incrementJetPt);
bce887f5 2658 //fh1trackPosNCls->Fill(trackPosNcls);
2659 //fh1trackNegNCls->Fill(trackNegNcls);
2660 fh1EtaALa->Fill(fEta);
3ed9f288 2661
2662 Double_t vALaIncl[3] = {invMALa,trackPt,fEta};
2663 fhnALaIncl->Fill(vALaIncl);
2664
bce887f5 2665 if(fAnalysisMC){
df9b7345 2666 TString generatorName;
2667 Bool_t isinjected;
bce887f5 2668 TList* listmc = fAOD->GetList();
df9b7345 2669 Bool_t mclabelcheck = MCLabelCheck(v0, kAntiLambda, trackNeg, trackPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PdgCode, generatorName, isinjected);
6ec586c1 2670 if(mclabelcheck == kFALSE)continue;
a6ee5cab 2671 //if(fPhysicalPrimary == kFALSE)continue;//take also feeddown particles into account
cc096464 2672
df9b7345 2673 if(generatorName == "Hijing"){
2674 Double_t vrecMCHijingALaIncl[3] = {invMALa,trackPt,fEta};
2675 fhnrecMCHijingALaIncl->Fill(vrecMCHijingALaIncl);
a6ee5cab 2676
2677 Double_t aprotonPt = trackNeg->Pt();
2678 fh2CorrHijingALaAProton->Fill(trackPt,aprotonPt);
df9b7345 2679 }
2680
a6ee5cab 2681
df9b7345 2682 if(isinjected == kTRUE){
2683 Double_t vrecMCInjectALaIncl[3] = {invMALa,trackPt,fEta};
2684 fhnrecMCInjectALaIncl->Fill(vrecMCInjectALaIncl);
a6ee5cab 2685
2686 Double_t aprotonPt = trackNeg->Pt();
2687 fh2CorrInjectALaAProton->Fill(trackPt,aprotonPt);
2688
df9b7345 2689 }
2690
2691
cc096464 2692 Double_t vInvMassEtaTrackPtALa[3] = {fEta,invMALa,trackPt};
2693 fhnInvMassEtaTrackPtALa->Fill(vInvMassEtaTrackPtALa);
bce887f5 2694 fh1PtMCALa->Fill(MCPt);
cc096464 2695
bce887f5 2696 }
2697 fh1V0Eta->Fill(fEta);
cc096464 2698 //fh1V0totMom->Fill(fV0TotalMomentum);
bce887f5 2699 fh1CosPointAngle->Fill(fV0cosPointAngle);
2700 fh1DecayLengthV0->Fill(fV0DecayLength);
2701 fh1V0Radius->Fill(fV0Radius);
2702 fh1DcaV0Daughters->Fill(fDcaV0Daughters);
2703 fh1DcaPosToPrimVertex->Fill(fDcaPosToPrimVertex);
2704 fh1DcaNegToPrimVertex->Fill(fDcaNegToPrimVertex);
2705 fh1trackPosEta->Fill(PosEta);
2706 fh1trackNegEta->Fill(NegEta);
2707 }
2708
6ec586c1 2709 //_____no jets events______________________________________________________________________________________________________________________________________
2710
33fc837a 2711 if(nRecJetsCuts == 0){//no jet events, before the remaining jet cuts are applied, the second part for the non-jet events comes inside the jet loop
dde76689 2712
2713 fh1NJ->Fill(1.);//for normalisation by number of NJ events
8bde4137 2714
42bf8fa0 2715 if(fDebug>6) { std::cout<<"################## nRecJetsCuts == 0 ###################"<<std::endl;
dde76689 2716 //std::cout<<"fListK0s->GetSize() in NJ event: "<<fListK0s->GetSize()<<std::endl;
42bf8fa0 2717 }
8bde4137 2718
2719 for(Int_t it=0; it<fListK0s->GetSize(); ++it){ // loop all K0s
2720
2721 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListK0s->At(it));
2722 if(!v0) continue;
2723
2724 Double_t invMK0s =0;
2725 Double_t trackPt=0;
2726 CalculateInvMass(v0, kK0, invMK0s, trackPt);
2e400c0d 2727 Double_t fEta = v0->Eta();
2728
2729 Double_t vNJK0[3] = {invMK0s,trackPt,fEta}; //fill all K0s in events wo selected jets
2730 fhnNJK0->Fill(vNJK0);
8bde4137 2731
2732 }
2733
42bf8fa0 2734 for(Int_t it=0; it<fListLa->GetSize(); ++it){ // loop all La
8bde4137 2735
2736 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListLa->At(it));
2737 if(!v0) continue;
2738
2739 Double_t invMLa =0;
2740 Double_t trackPt=0;
2741 CalculateInvMass(v0, kLambda, invMLa, trackPt);
2e400c0d 2742 Double_t fEta = v0->Eta();
2743
2744 Double_t vNJLa[3] = {invMLa,trackPt,fEta}; //fill all K0s in events wo selected jets
2745 fhnNJLa->Fill(vNJLa);
2746
8bde4137 2747 }
2748
42bf8fa0 2749 for(Int_t it=0; it<fListALa->GetSize(); ++it){ // loop all ALa
8bde4137 2750
2751 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListALa->At(it));
2752 if(!v0) continue;
2753
2754 Double_t invMALa =0;
2755 Double_t trackPt=0;
2756 CalculateInvMass(v0, kAntiLambda, invMALa, trackPt);
2e400c0d 2757
2758 Double_t fEta = v0->Eta();
2759
2760 Double_t vNJALa[3] = {invMALa,trackPt,fEta}; //fill all K0s in events wo selected jets
2761 fhnNJALa->Fill(vNJALa);
2762
8bde4137 2763
2764 }
2765
2766 }//no jet events
2767
bce887f5 2768 //____ fill all jet related histos ________________________________________________________________________________________________________________________
6ec586c1 2769 //##########################jet loop########################################################################################################################
dde76689 2770
274a6ff7 2771 Int_t nSelJets = nRecJetsCuts;//init value
dde76689 2772
bce887f5 2773 //fill jet histos in general
2774 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){ // ij is an index running over the list of the reconstructed jets after cuts, all jets in event
2775
c500e0a0 2776 AliAODJet* jet = (AliAODJet*) (fJetsRecCuts->At(ij));
6daac008 2777
bce887f5 2778 Double_t jetPt = jet->Pt();
2779 Double_t jetEta = jet->Eta();
2780 Double_t jetPhi = jet->Phi();
274a6ff7 2781
bce887f5 2782 //if(ij==0){ // loop over leading jets for ij = 0, for ij>= 0 look into all jets
2783
2784 if(ij>=0){//all jets in event
2785
96c271c1 2786 TList* jettracklist = new TList();
2787 Double_t sumPt = 0.;
6daac008 2788 Bool_t isBadJet = kFALSE;
bce887f5 2789 Int_t njetTracks = 0;
274a6ff7 2790
96c271c1 2791 if(GetFFRadius()<=0){
bce887f5 2792 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);// list of jet tracks from trackrefs
96c271c1 2793 } else {
bce887f5 2794 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet); // fill list of tracks in cone around jet axis with cone Radius (= 0.4 standard)
96c271c1 2795 }
33fc837a 2796 //not applied at the moment:
bce887f5 2797 if(GetFFMinNTracks()>0 && jettracklist->GetSize() <= GetFFMinNTracks()) isBadJet = kTRUE; // reject jets with less tracks than fFFMinNTracks
33fc837a 2798
33fc837a 2799 //APPLICATION OF REMAINING JET CUTS (leading track pt bias etc..) + NJ events
2800 if(isBadJet) {
2801
2802 nSelJets--;//remove one jet from nRecJetsCuts
2803 if(nSelJets == 0){//case that event doesn't contain any selected jets in the end
2804
2805 fh1NJ->Fill(1.);//for normalisation by number of NJ events
2806
2807 for(Int_t it=0; it<fListK0s->GetSize(); ++it){ // loop all K0s
2808
2809 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListK0s->At(it));
2810 if(!v0) continue;
2811
2812 Double_t invMK0s =0;
2813 Double_t trackPt=0;
2814 CalculateInvMass(v0, kK0, invMK0s, trackPt);
2815 Double_t fEta = v0->Eta();
2816
2817 Double_t vNJK0[3] = {invMK0s,trackPt,fEta}; //fill all K0s in events wo selected jets
2818 fhnNJK0->Fill(vNJK0);
2819
2820 }
2821
2822 for(Int_t it=0; it<fListLa->GetSize(); ++it){ // loop all La
2823
2824 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListLa->At(it));
2825 if(!v0) continue;
2826
2827 Double_t invMLa =0;
2828 Double_t trackPt=0;
2829 CalculateInvMass(v0, kLambda, invMLa, trackPt);
2830 Double_t fEta = v0->Eta();
2831
2832 Double_t vNJLa[3] = {invMLa,trackPt,fEta}; //fill all K0s in events wo selected jets
2833 fhnNJLa->Fill(vNJLa);
2834
2835 }
2836
2837 for(Int_t it=0; it<fListALa->GetSize(); ++it){ // loop all ALa
2838
2839 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListALa->At(it));
2840 if(!v0) continue;
2841
2842 Double_t invMALa =0;
2843 Double_t trackPt=0;
2844 CalculateInvMass(v0, kAntiLambda, invMALa, trackPt);
2845
2846 Double_t fEta = v0->Eta();
2847
2848 Double_t vNJALa[3] = {invMALa,trackPt,fEta}; //fill all K0s in events wo selected jets
2849 fhnNJALa->Fill(vNJALa);
2850
2851
2852 }
2853
2854 }
2855 continue;//rejection of current jet
2856 } // rejects jets in which no track has a track pt higher than 5 GeV/c (see AddTask macro)
2857
2858
2859 if((ij==(nRecJetsCuts-1))&&(nSelJets > 0)){fh1OC->Fill(1.);}//in case there are still some selected jets remaining in the last loop cycle, count number of jet events in this histo
2860
cc096464 2861 //Float_t fJetAreaMin = 0.6*TMath::Pi()*GetFFRadius()*GetFFRadius(); // minimum jet area cut
6ec586c1 2862
bce887f5 2863 //std::cout<<"GetFFRadius(): "<<GetFFRadius()<<std::endl;
bce887f5 2864 //std::cout<<"jet->EffectiveAreaCharged()"<<jet->EffectiveAreaCharged()<<std::endl;
6ec586c1 2865 //std::cout<<"fJetAreaMin: "<<fJetAreaMin<<std::endl;
cc096464 2866
df9b7345 2867 //if(fDebug > 2) {if (jet->EffectiveAreaCharged() < fJetAreaMin) {std::cout<<" fCutjetArea cut removed a jet!!!!! Should not have to be done again!!"<<std::endl;}}// cut on jet area, already done by jet selection in FF task
cc096464 2868
2869 Double_t dAreaExcluded = TMath::Pi()*dRadiusExcludeCone*dRadiusExcludeCone; // area of the cone
2870 dAreaExcluded -= AreaCircSegment(dRadiusExcludeCone,fCutjetEta-jet->Eta()); // positive eta overhang
2871 dAreaExcluded -= AreaCircSegment(dRadiusExcludeCone,fCutjetEta+jet->Eta()); // negative eta overhang
2872 fh1AreaExcluded->Fill(dAreaExcluded);//histo contains all areas that are jet related and have to be excluded concerning OC UE pt spectrum normalisation by area
6daac008 2873
bce887f5 2874 fh1JetEta->Fill(jetEta);
2875 fh1JetPhi->Fill(jetPhi);
2876 fh2JetEtaPhi->Fill(jetEta,jetPhi);
2877
2878 // printf("pT = %f, eta = %f, phi = %f, leadtr pt = %f\n, ",jetPt,jetEta,jetphi,leadtrack);
9b2de807 2879
bce887f5 2880 for(Int_t it=0; it<jettracklist->GetSize(); ++it){//loop over all particles in jet
2881
2882 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));//all tracks in jet cone
c500e0a0 2883 if(!trackVP)continue;
96c271c1 2884
bce887f5 2885 Float_t trackPt = trackVP->Pt();//transversal momentum of jet particle
2886 Float_t trackEta = trackVP->Eta();
2887
96c271c1 2888 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
2889
dec584ae 2890 fFFHistosRecCuts->FillFF(trackPt, jetPt, incrementJetPt);//histo with tracks/jets after cut selection, for all events
2891 if(nK0s>0) fFFHistosRecCutsK0Evt->FillFF(trackPt, jetPt, incrementJetPt);//only for K0s events
bce887f5 2892 fh2FFJetTrackEta->Fill(trackEta,jetPt);
9b2de807 2893
bce887f5 2894
2895 }
2896
2897 njetTracks = jettracklist->GetSize();
2898
2899 //____________________________________________________________________________________________________________________
dec584ae 2900 //strangeness constribution to jet cone
cc096464 2901 /*
bce887f5 2902 if(fAnalysisMC){
2903
2904 TList *list = fAOD->GetList();
2905 AliAODMCHeader *mcHeadr=(AliAODMCHeader*)list->FindObject(AliAODMCHeader::StdBranchName());
2906 if(!mcHeadr)continue;
2907
2908 Double_t mcXv=0., mcYv=0., mcZv=0.;//MC primary vertex position
2909
2910 mcXv=mcHeadr->GetVtxX(); mcYv=mcHeadr->GetVtxY(); mcZv=mcHeadr->GetVtxZ(); // position of the MC primary vertex
2911
2912 for(Int_t it=0; it<jettracklist->GetSize(); ++it){//loop over all tracks in the jet
2913
2914 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));//track in jet cone
2915 if(!trackVP)continue;
2916 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (trackVP); //fetch one jet track from the TList
2917 if(!tr)continue;
2918
2919 //get MC label information
2920 TList *mclist = fAOD->GetList();
2921
2922 //fetch the MC stack
2923 TClonesArray* stackMC = (TClonesArray*)mclist->FindObject(AliAODMCParticle::StdBranchName()); //get MCAOD branch in data
2924 if (!stackMC) {Printf("ERROR: stack not available");}
2925
2926 else {
2927
2928 Int_t trackLabel = TMath::Abs(tr->GetLabel()); //fetch jet track label in MC stack
2929
2930 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(stackMC->At(trackLabel)); //fetch MC gen. particle for rec. jet track
2931
2932 if(!part)continue; //skip non-existing objects
2933
2934
2935 //Bool_t IsPhysicalPrimary = part->IsPhysicalPrimary();//not recommended to check, better use distance between primary vertex and secondary vertex
2936
2937 Float_t fDistPrimaryMax = 0.01;
2938 // Get the distance between production point of the MC mother particle and the primary vertex
2939
2940 Double_t dx = mcXv-part->Xv();//mc primary vertex - mc gen. v0 vertex
2941 Double_t dy = mcYv-part->Yv();
2942 Double_t dz = mcZv-part->Zv();
2943
2944 Float_t fDistPrimary = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
2945 Bool_t fPhysicalPrimary = (fDistPrimary < fDistPrimaryMax);
2946
2947 // std::cout<<"fDistPrimary"<<fDistPrimary<<std::endl;
2948 // std::cout<<"fPhysicalPrimary"<<fPhysicalPrimary<<std::endl;
2949
2950 if(!fPhysicalPrimary)continue;//rejects Kstar and other strong decaying particles from Secondary Contamination
2951
2952 Bool_t isFromStrange = kFALSE;// flag to check whether particle has strange mother
2953
2954 Int_t iMother = part->GetMother(); //get mother MC gen. particle label
2955
2956 if(iMother >= 0){
2957 AliAODMCParticle *partM = dynamic_cast<AliAODMCParticle*>(stackMC->At(iMother)); //fetch mother of MC gen. particle
2958 if(!partM) continue;
2959
2960 Int_t codeM = TMath::Abs(partM->GetPdgCode()); //mothers pdg code
2961
2962 Int_t mfl = Int_t (codeM/ TMath::Power(10, Int_t(TMath::Log10(codeM)))); //asks for first number of mothers pdg code (strange particles always start with 3..)
2963
2964 if (mfl == 3 && codeM != 3) isFromStrange = kTRUE;
2965 }
2966
bce887f5 2967 if(isFromStrange == kTRUE){
2968
2969 Double_t trackPt = part->Pt();
2970 Double_t trackEta = part->Eta();
cc096464 2971 //fh3StrContinCone->Fill(jetPt, trackPt, trackEta);//MC gen. particle parameters, but rec. jet pt
bce887f5 2972
2973 }//isFromStrange is kTRUE
2974 } //end else
2975 }//end loop over jet tracks
2976
2977 }// end fAnalysisMC
cc096464 2978 */
bce887f5 2979
2980 fh1TrackMultCone->Fill(njetTracks);
2981 fh2TrackMultCone->Fill(njetTracks,jetPt);
2982
6daac008 2983 // ---- K0s ----
96c271c1 2984
6daac008 2985 // fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
bce887f5 2986
2987 for(Int_t it=0; it<fListK0s->GetSize(); ++it){ // loop all K0s
2988
2989 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListK0s->At(it));
2990 if(!v0) continue;//rejection of events with no V0 vertex
2991
2992 Double_t v0Mom[3];
2993 v0->PxPyPz(v0Mom);
2994 TVector3 v0MomVect(v0Mom);
2995
2996 Double_t dPhiJetK0 = (jet->MomentumVector()->Vect()).DeltaPhi(v0MomVect);
cc096464 2997 // Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
bce887f5 2998
cc096464 2999 // if(incrementJetPt){fh1V0JetPt->Fill(jetPt);}
bce887f5 3000
3001 Double_t invMK0s =0;
3002 Double_t trackPt=0;
3003 CalculateInvMass(v0, kK0, invMK0s, trackPt); //function to calculate invMass with TLorentzVector class
3004
cc096464 3005 // fFFHistosIMK0Jet->FillFF(trackPt, invMK0s, jetPt, incrementJetPt);
d7fb73a4 3006
cc096464 3007
bce887f5 3008 if(dPhiJetK0<fh1dPhiJetK0->GetXaxis()->GetXmin()) dPhiJetK0 += 2*TMath::Pi();
3009 fh1dPhiJetK0->Fill(dPhiJetK0);
3010
3011 }
3012
cc096464 3013 // if(fListK0s->GetSize() == 0){ // no K0: increment jet pt spectrum
bce887f5 3014
cc096464 3015 // Bool_t incrementJetPt = kTRUE;
3016 // fFFHistosIMK0Jet->FillFF(-1, -1, jetPt, incrementJetPt);
3017 // }
bce887f5 3018
3019 //____fetch reconstructed K0s in cone around jet axis:_______________________________________________________________________________
3020
3021 TList* jetConeK0list = new TList();
3022
3023 Double_t sumPtK0 = 0.;
3024
3025 Bool_t isBadJetK0 = kFALSE; // dummy, do not use
3026
bce887f5 3027 GetTracksInCone(fListK0s, jetConeK0list, jet, GetFFRadius(), sumPtK0, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetK0); //reconstructed K0s in cone around jet axis
3028
3029 if(fDebug>2)Printf("%s:%d nK0s total: %d, in jet cone: %d,FFRadius %f ",(char*)__FILE__,__LINE__,nK0s,jetConeK0list->GetEntries(),GetFFRadius());
3030
3031
3032 for(Int_t it=0; it<jetConeK0list->GetSize(); ++it){ // loop for K0s in jet cone
3033
3034 AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetConeK0list->At(it));
3035 if(!v0) continue;
3036
3037 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3038 Double_t invMK0s =0;
3039 Double_t trackPt=0;
3ed9f288 3040 Double_t fEta=0;
3041 fEta = v0->Eta();
bce887f5 3042
3043 CalculateInvMass(v0, kK0, invMK0s, trackPt); //function to calculate invMass with TLorentzVector class
3044
cc096464 3045
bce887f5 3046 if(fAnalysisMC){
3047 Double_t jetPtSmear = -1;
b6eb08db 3048 SmearJetPt(jetPt,cl,GetFFRadius(),GetFFMinLTrackPt(),jetPtSmear);
cc096464 3049 if(incrementJetPt == kTRUE){fh1IMK0ConeSmear->Fill(jetPtSmear);} //fill TH1F for normalization purposes
bce887f5 3050 }
3051
cc096464 3052 if(incrementJetPt==kTRUE){
3053 fh1IMK0Cone->Fill(jetPt);}//normalisation by number of selected jets
3054
3055 //fFFHistosIMK0Cone->FillFF(trackPt, invMK0s, jetPt, incrementJetPt);
3ed9f288 3056
3057 Double_t vK0sCone[4] = {jetPt, invMK0s,trackPt,fEta};
3058 fhnK0sCone->Fill(vK0sCone);
bce887f5 3059 }
3060
3061
3062 if(jetConeK0list->GetSize() == 0){ // no K0: increment jet pt spectrum
3063
cc096464 3064
3065 Bool_t incrementJetPt = kTRUE;//jets without K0s will be only filled in TH1F only once, so no increment needed
3066 //fFFHistosIMK0Cone->FillFF(-1, -1, jetPt, incrementJetPt);
3ed9f288 3067 Double_t vK0sCone[4] = {jetPt, -1, -1, -1};
3068 fhnK0sCone->Fill(vK0sCone);
3069
cc096464 3070 if(incrementJetPt==kTRUE){
3071 fh1IMK0Cone->Fill(jetPt);}//normalisation by number of selected jets
3072
bce887f5 3073 if(fAnalysisMC){
3074 Double_t jetPtSmear = -1;
b6eb08db 3075 SmearJetPt(jetPt,cl,GetFFRadius(),GetFFMinLTrackPt(),jetPtSmear);
cc096464 3076 if(incrementJetPt == kTRUE){fh1IMK0ConeSmear->Fill(jetPtSmear);} //fill TH1F for normalization purposes
bce887f5 3077 }
3078 }
cc096464 3079
3080 //Random cones________________________________________________________________________
3081
3082 if(ij==0){//fetch random cone V0s only once per event
3083
3084 //______fetch random cones___________________________________________________________
3085
3086
3087 AliAODJet* jetRC = 0;
3088 jetRC = GetRandomCone(fJetsRecCuts, fCutjetEta, 2*GetFFRadius());//fetch one random cone for each event
3089 TList* fListK0sRC = new TList();//list for K0s in random cone (RC), one RC per event
3090 TList* fListLaRC = new TList();
3091 TList* fListALaRC = new TList();
3092
3093 Double_t sumPtK0sRC = 0;
3094 Double_t sumPtLaRC = 0;
3095 Double_t sumPtALaRC = 0;
3096 Bool_t isBadJetK0sRC = kFALSE;
3097 Bool_t isBadJetLaRC = kFALSE;
3098 Bool_t isBadJetALaRC = kFALSE;
3099
dde76689 3100
3101 if(jetRC != 0) {
cc096464 3102 //fetch V0s in RC:
dde76689 3103 fh1RC->Fill(1.);//for normalisation purposes
cc096464 3104
3105 GetTracksInCone(fListK0s, fListK0sRC, jetRC, GetFFRadius(), sumPtK0sRC, 0, 0, isBadJetK0sRC);
3106
dde76689 3107 //________________fill RC with all V0s__________________
cc096464 3108 for(Int_t it=0; it<fListK0sRC->GetSize(); ++it){ // loop for K0s in random cone
3109
3110 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListK0sRC->At(it));
3111 if(!v0) continue;
3112
3113 Double_t invMK0s =0;
3114 Double_t trackPt=0;
3115 Double_t fEta=0;
3116 fEta = v0->Eta();
3117
3118 CalculateInvMass(v0, kK0, invMK0s, trackPt); //function to calculate invMass with TLorentzVector class
3119
3120 Double_t vK0sRC[3] = {invMK0s,trackPt,fEta};
3121 fhnK0sRC->Fill(vK0sRC);
3122 }
3123
3124
3125
3126 GetTracksInCone(fListLa, fListLaRC, jetRC, GetFFRadius(), sumPtLaRC, 0, 0, isBadJetLaRC);
3127
3128 for(Int_t it=0; it<fListLaRC->GetSize(); ++it){ // loop for Lambdas in random cone
3129
3130 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListLaRC->At(it));
3131 if(!v0) continue;
3132
3133 Double_t invMLa =0;
3134 Double_t trackPt=0;
3135 Double_t fEta=0;
3136 fEta = v0->Eta();
3137
3138 CalculateInvMass(v0, kLambda, invMLa, trackPt); //function to calculate invMass with TLorentzVector class
3139
3140 Double_t vLaRC[3] = {invMLa,trackPt,fEta};
3141 fhnLaRC->Fill(vLaRC);
3142 }
3143
3144
3145
3146 GetTracksInCone(fListALa, fListALaRC, jetRC, GetFFRadius(), sumPtALaRC, 0, 0, isBadJetALaRC);
3147
3148 for(Int_t it=0; it<fListALaRC->GetSize(); ++it){ // loop for Lambdas in random cone
3149
3150 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListALaRC->At(it));
3151 if(!v0) continue;
3152
3153 Double_t invMALa =0;
3154 Double_t trackPt=0;
3155 Double_t fEta=0;
3156 fEta = v0->Eta();
3157
3158 CalculateInvMass(v0, kAntiLambda, invMALa, trackPt); //function to calculate invMass with TLorentzVector class
3159
3160 Double_t vALaRC[3] = {invMALa,trackPt,fEta};
3161 fhnALaRC->Fill(vALaRC);
3162 }
dde76689 3163
3164
3165 if(isBadJetK0sRC == kFALSE){ //in case RC contains at least one K0s with minimum pT
3166 fh1RCBiasK0->Fill(1.);//for normalisation purposes
3167 //________________fill RC (with trigger particle bias)_____________
3168 for(Int_t it=0; it<fListK0sRC->GetSize(); ++it){ // loop for K0s in random cone
3169
3170 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListK0sRC->At(it));
3171 if(!v0) continue;
3172
3173 Double_t invMK0s =0;
3174 Double_t trackPt=0;
3175 Double_t fEta=0;
3176 fEta = v0->Eta();
3177
3178 CalculateInvMass(v0, kK0, invMK0s, trackPt); //function to calculate invMass with TLorentzVector class
3179
3180 Double_t vK0sRC[3] = {invMK0s,trackPt,fEta};
3181 fhnK0sRCBias->Fill(vK0sRC);
3182 }
3183 }
3184
3185
3186 if(isBadJetLaRC == kFALSE){ //in case RC contains at least one Lambda with minimum pT
3187 fh1RCBiasLa->Fill(1.);//for normalisation purposes
3188 for(Int_t it=0; it<fListLaRC->GetSize(); ++it){ // loop for Lambdas in random cone
3189
3190 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListLaRC->At(it));
3191 if(!v0) continue;
3192
3193 Double_t invMLa =0;
3194 Double_t trackPt=0;
3195 Double_t fEta=0;
3196 fEta = v0->Eta();
3197
3198 CalculateInvMass(v0, kLambda, invMLa, trackPt); //function to calculate invMass with TLorentzVector class
3199
3200 Double_t vLaRC[3] = {invMLa,trackPt,fEta};
3201 fhnLaRCBias->Fill(vLaRC);
3202 }
3203 }
cc096464 3204
dde76689 3205
3206
3207 if(isBadJetLaRC == kFALSE){ //in case RC contains at least one Antilambda with minimum pT
3208 fh1RCBiasALa->Fill(1.);//for normalisation purposes
3209 for(Int_t it=0; it<fListALaRC->GetSize(); ++it){ // loop for Lambdas in random cone
3210
3211 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListALaRC->At(it));
3212 if(!v0) continue;
3213
3214 Double_t invMALa =0;
3215 Double_t trackPt=0;
3216 Double_t fEta=0;
3217 fEta = v0->Eta();
3218
3219 CalculateInvMass(v0, kAntiLambda, invMALa, trackPt); //function to calculate invMass with TLorentzVector class
3220
3221 Double_t vALaRC[3] = {invMALa,trackPt,fEta};
3222 fhnALaRCBias->Fill(vALaRC);
3223 }
3224
3225 }
3226
3227 }
cc096464 3228
3229 delete fListK0sRC;
3230 delete fListLaRC;
3231 delete fListALaRC;
3232 }
3233
bce887f5 3234
3235 //fetch particles in perpendicular cone to estimate UE event contribution to particle spectrum
3236 //these perpendicular cone particle spectra serve to subtract the particles in jet cones, that are stemming from the Underlying event, on a statistical basis
cc096464 3237 //for normalization the common jet pT spectrum is used: fh1IMK0Cone, fh1IMLaCone and fh1IMALaCone
bce887f5 3238
3239 //____fetch reconstructed K0s in cone perpendicular to jet axis:_______________________________________________________________________________
3240
3241 TList* jetPerpConeK0list = new TList();
3242
3243 Double_t sumPerpPtK0 = 0.;
3244
3245 GetTracksInPerpCone(fListK0s, jetPerpConeK0list, jet, GetFFRadius(), sumPerpPtK0); //reconstructed K0s in cone around jet axis
3246
3247 if(fDebug>2)Printf("%s:%d nK0s total: %d, in perp jet cone: %d,FFRadius %f ",(char*)__FILE__,__LINE__,nK0s,jetPerpConeK0list->GetEntries(),GetFFRadius());
3248
3249 for(Int_t it=0; it<jetPerpConeK0list->GetSize(); ++it){ // loop for K0s in perpendicular cone
3250
3251 AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetPerpConeK0list->At(it));
3252 if(!v0) continue;
3253
3254 Double_t invMPerpK0s =0;
3255 Double_t trackPt=0;
cc096464 3256 Double_t fEta=0;
3257
3258 fEta = v0->Eta();
bce887f5 3259 CalculateInvMass(v0, kK0, invMPerpK0s, trackPt); //function to calculate invMass with TLorentzVector class
cc096464 3260 Double_t vK0sPC[4] = {jetPt, invMPerpK0s,trackPt,fEta};
3261
3262 fhnK0sPC->Fill(vK0sPC); //(x,y,z) //pay attention, this histogram contains the V0 content of both (+/- 90 degrees) perp. cones!!
bce887f5 3263
bce887f5 3264 }
3265
3266
3267 if(jetPerpConeK0list->GetSize() == 0){ // no K0s in jet cone
3268
cc096464 3269 Double_t vK0sPC[4] = {jetPt, -1, -1 , -999};//default values for case: no K0s is found in PC
3270 fhnK0sPC->Fill(vK0sPC);
3271
bce887f5 3272 }
bce887f5 3273
dec584ae 3274 if(ij==0){//median cluster only once for event
d7fb73a4 3275
3276 AliAODJet* medianCluster = GetMedianCluster();
3277
3278 if(medianCluster){
dec584ae 3279 // ____ rec K0s in median cluster___________________________________________________________________________________________________________
bce887f5 3280
dec584ae 3281 TList* jetMedianConeK0list = new TList();
3282 TList* jetMedianConeLalist = new TList();
3283 TList* jetMedianConeALalist = new TList();
3284
d7fb73a4 3285
dec584ae 3286 Double_t medianEta = medianCluster->Eta();
3287
3288 if(TMath::Abs(medianEta)<=fCutjetEta){
a6ffe507 3289
dec584ae 3290 fh1MedianEta->Fill(medianEta);
dde76689 3291 fh1JetPtMedian->Fill(jetPt);
3292 fh1MCC->Fill(1.);//for normalisation by total number of median cluster jets
dec584ae 3293 Double_t sumMedianPtK0 = 0.;
3294
3295 Bool_t isBadJetK0Median = kFALSE; // dummy, do not use
3296
3297 GetTracksInCone(fListK0s, jetMedianConeK0list, medianCluster, GetFFRadius(), sumMedianPtK0, 0., 0., isBadJetK0Median); //reconstructed K0s in median cone around jet axis
3298 //GetTracksInCone(fListK0s, jetConeK0list, jet, GetFFRadius(), sumPtK0, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetK0); //original use of function
3299
3300 //cut parameters from Fragmentation Function task:
3301 //Float_t fFFMinLTrackPt; // reject jets with leading track with pt smaller than this value, use GetFFMinLTrackPt()
3302 //Float_t fFFMaxTrackPt; // reject jetscontaining any track with pt larger than this value, use GetFFMaxTrackPt()
3303
3304 for(Int_t it=0; it<jetMedianConeK0list->GetSize(); ++it){ // loop for K0s in median cone
3305
3306 AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetMedianConeK0list->At(it));
3307 if(!v0) continue;
3308
3309 Double_t invMMedianK0s =0;
3310 Double_t trackPt=0;
cc096464 3311 Double_t fEta=0;
dec584ae 3312
cc096464 3313 fEta = v0->Eta();
dec584ae 3314 CalculateInvMass(v0, kK0, invMMedianK0s, trackPt); //function to calculate invMass with TLorentzVector class
cc096464 3315 Double_t vK0sMCC[3] = {invMMedianK0s,trackPt,fEta};
3316 fhnK0sMCC->Fill(vK0sMCC);
dec584ae 3317
3318 }
3319
3320 if(jetMedianConeK0list->GetSize() == 0){ // no K0s in median cluster cone
cc096464 3321
3322 Double_t vK0sMCC[3] = {-1, -1, -999};
3323 fhnK0sMCC->Fill(vK0sMCC);
3324
dec584ae 3325 }
3326
3327 //__________________________________________________________________________________________________________________________________________
3328 // ____ rec Lambdas in median cluster___________________________________________________________________________________________________________
3329
3330 Double_t sumMedianPtLa = 0.;
3331 Bool_t isBadJetLaMedian = kFALSE; // dummy, do not use
3332
3333 GetTracksInCone(fListLa, jetMedianConeLalist, medianCluster, GetFFRadius(), sumMedianPtLa, 0, 0, isBadJetLaMedian); //reconstructed Lambdas in median cone around jet axis
3334
3335 //cut parameters from Fragmentation Function task:
3336 //Float_t fFFMinLTrackPt; // reject jets with leading track with pt smaller than this value, use GetFFMinLTrackPt()
3337 //Float_t fFFMaxTrackPt; // reject jets containing any track with pt larger than this value, use GetFFMaxTrackPt()
3338
3339 for(Int_t it=0; it<jetMedianConeLalist->GetSize(); ++it){ // loop for Lambdas in perpendicular cone
3340
3341 AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetMedianConeLalist->At(it));
3342 if(!v0) continue;
3343
3344 Double_t invMMedianLa =0;
3345 Double_t trackPt=0;
cc096464 3346 Double_t fEta=0;
3347 fEta = v0->Eta();
3348
dec584ae 3349 CalculateInvMass(v0, kLambda, invMMedianLa, trackPt); //function to calculate invMass with TLorentzVector class
3350
4855fa4a 3351 Double_t vLaMCC[3] = {invMMedianLa,trackPt,fEta};
cc096464 3352 fhnLaMCC->Fill(vLaMCC);
dec584ae 3353 }
3354
3355 if(jetMedianConeLalist->GetSize() == 0){ // no Lambdas in median cluster cone
cc096464 3356
3357 Double_t vLaMCC[4] = {jetPt, -1, -1, -999};
3358 fhnLaMCC->Fill(vLaMCC);
dec584ae 3359
dec584ae 3360 }
a6ffe507 3361
bce887f5 3362
dec584ae 3363 // ____ rec Antilambdas in median cluster___________________________________________________________________________________________________________
bce887f5 3364
dec584ae 3365
3366 Double_t sumMedianPtALa = 0.;
3367
3368 Bool_t isBadJetALaMedian = kFALSE; // dummy, do not use
3369
3370 GetTracksInCone(fListALa, jetMedianConeALalist, medianCluster, GetFFRadius(), sumMedianPtALa, 0, 0, isBadJetALaMedian); //reconstructed Antilambdas in median cone around jet axis
3371
3372
3373 //cut parameters from Fragmentation Function task:
3374 //Float_t fFFMinLTrackPt; // reject jets with leading track with pt smaller than this value, use GetFFMinLTrackPt()
3375 //Float_t fFFMaxTrackPt; // reject jets containing any track with pt larger than this value, use GetFFMaxTrackPt()
a6ffe507 3376
dec584ae 3377 for(Int_t it=0; it<jetMedianConeALalist->GetSize(); ++it){ // loop for Antilambdas in median cluster cone
3378
3379 AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetMedianConeALalist->At(it));
3380 if(!v0) continue;
3381
3382 Double_t invMMedianALa =0;
3383 Double_t trackPt=0;
cc096464 3384 Double_t fEta=0;
dec584ae 3385
cc096464 3386 fEta = v0->Eta();
3387
dec584ae 3388 CalculateInvMass(v0, kAntiLambda, invMMedianALa, trackPt); //function to calculate invMass with TLorentzVector class
4855fa4a 3389 Double_t vALaMCC[3] = {invMMedianALa,trackPt,fEta};
cc096464 3390 fhnALaMCC->Fill(vALaMCC);
dec584ae 3391
dec584ae 3392 }
3393
3394 if(jetMedianConeALalist->GetSize() == 0){ // no Antilambdas in median cluster cone
cc096464 3395
3396 Double_t vALaMCC[4] = {jetPt, -1, -1, -999};
3397 fhnALaMCC->Fill(vALaMCC);
dec584ae 3398
dec584ae 3399 }
3400 }//median cluster eta cut
3401
3402 delete jetMedianConeK0list;
3403 delete jetMedianConeLalist;
3404 delete jetMedianConeALalist;
d7fb73a4 3405
3406 }//if mediancluster is existing
dec584ae 3407 }//end ij == 0
bce887f5 3408 //_________________________________________________________________________________________________________________________________________
3409
3410 //____fetch reconstructed Lambdas in cone perpendicular to jet axis:__________________________________________________________________________
3411
3412 TList* jetPerpConeLalist = new TList();
3413
3414 Double_t sumPerpPtLa = 0.;
3415
3416 GetTracksInPerpCone(fListLa, jetPerpConeLalist, jet, GetFFRadius(), sumPerpPtLa); //reconstructed Lambdas in cone around jet axis //pay attention, this histogram contains the V0 content of both (+/- 90 degrees) perp. cones!!
3417
3418 if(fDebug>2)Printf("%s:%d nLa total: %d, in perp jet cone: %d,FFRadius %f ",(char*)__FILE__,__LINE__,nLa,jetPerpConeLalist->GetEntries(),GetFFRadius());
3419
3420 for(Int_t it=0; it<jetPerpConeLalist->GetSize(); ++it){ // loop for Lambdas in perpendicular cone
3421
3422 AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetPerpConeLalist->At(it));
3423 if(!v0) continue;
3424
3425 Double_t invMPerpLa =0;
3426 Double_t trackPt=0;
cc096464 3427 Double_t fEta=0;
3428 fEta = v0->Eta();
bce887f5 3429
3430 CalculateInvMass(v0, kLambda, invMPerpLa, trackPt); //function to calculate invMass with TLorentzVector class
cc096464 3431 Double_t vLaPC[4] = {jetPt, invMPerpLa,trackPt,fEta};
3432 fhnLaPC->Fill(vLaPC); //(x,y,z) //pay attention, this histogram contains the V0 content of both (+/- 90 degrees) perp. cones!!
3433
bce887f5 3434 }
3435
3436
3437 if(jetPerpConeLalist->GetSize() == 0){ // no Lambdas in jet
3438
cc096464 3439 Double_t vLaPC[4] = {jetPt, -1, -1 , -999};//default values for case: no K0s is found in PC
3440 fhnLaPC->Fill(vLaPC);
3441
bce887f5 3442
3443 }
3444
bce887f5 3445
3446 //____fetch reconstructed Antilambdas in cone perpendicular to jet axis:___________________________________________________________________
3447
3448 TList* jetPerpConeALalist = new TList();
3449
3450 Double_t sumPerpPtALa = 0.;
3451
3452 GetTracksInPerpCone(fListALa, jetPerpConeALalist, jet, GetFFRadius(), sumPerpPtALa); //reconstructed Antilambdas in cone around jet axis //pay attention, this histogram contains the V0 content of both (+/- 90 degrees) perp. cones!!
3453
3454 if(fDebug>2)Printf("%s:%d nALa total: %d, in perp jet cone: %d,FFRadius %f ",(char*)__FILE__,__LINE__,nALa,jetPerpConeALalist->GetEntries(),GetFFRadius());
3455
3456 for(Int_t it=0; it<jetPerpConeALalist->GetSize(); ++it){ // loop for ALa in perpendicular cone
3457
3458 AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetPerpConeALalist->At(it));
3459 if(!v0) continue;
3460
3461 Double_t invMPerpALa =0;
3462 Double_t trackPt=0;
cc096464 3463 Double_t fEta=0;
3464 fEta = v0->Eta();
3465
bce887f5 3466 CalculateInvMass(v0, kAntiLambda, invMPerpALa, trackPt); //function to calculate invMass with TLorentzVector class
cc096464 3467 Double_t vALaPC[4] = {jetPt, invMPerpALa,trackPt,fEta};
3468 fhnALaPC->Fill(vALaPC);
bce887f5 3469
3470 }
3471
3472
3473 if(jetPerpConeALalist->GetSize() == 0){ // no Antilambda
3474
cc096464 3475 Double_t vALaPC[4] = {jetPt, -1, -1, -999};
3476 fhnALaPC->Fill(vALaPC);
3477
bce887f5 3478 }
dec584ae 3479
cc096464 3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496 //###########################################################################################################
6ec586c1 3497 //MC Analysis
bce887f5 3498 //__________________________________________________________________________________________________________________________________________
3499
3500 if(fAnalysisMC){
3501
3502 //fill feeddown candidates from TList
3503 //std::cout<<"fListFeeddownLaCand entries: "<<fListFeeddownLaCand->GetSize()<<std::endl;
3504
bce887f5 3505 Double_t sumPtFDLa = 0.;
3506 Bool_t isBadJetFDLa = kFALSE; // dummy, do not use
3507
3508 GetTracksInCone(fListFeeddownLaCand, jetConeFDLalist, jet, GetFFRadius(), sumPtFDLa, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetFDLa);
6ec586c1 3509
bce887f5 3510 Double_t sumPtFDALa = 0.;
3511 Bool_t isBadJetFDALa = kFALSE; // dummy, do not use
3512
3513 GetTracksInCone(fListFeeddownALaCand, jetConeFDALalist, jet, GetFFRadius(), sumPtFDALa, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetFDALa);
6ec586c1 3514
3515 //_________________________________________________________________
3516 for(Int_t it=0; it<fListFeeddownLaCand->GetSize(); ++it){
bce887f5 3517
6ec586c1 3518 AliAODv0* mcfd = dynamic_cast<AliAODv0*>(fListFeeddownLaCand->At(it));
bce887f5 3519 if(!mcfd) continue;
3520
3521 Double_t invMLaFDcand = 0;
3522 Double_t trackPt = 0;//pt of ass. particle, not used for the histos
3523
3524 CalculateInvMass(mcfd, kLambda, invMLaFDcand, trackPt);
3525
3526 //Get MC gen. Lambda transverse momentum
3527 TClonesArray *st = 0x0;
6ec586c1 3528
3529 if(!fAOD)continue;
bce887f5 3530 TList *lt = fAOD->GetList();
3531 if(!lt)continue;
3532
6ec586c1 3533 st = (TClonesArray*)lt->FindObject(AliAODMCParticle::StdBranchName()); //get MCAOD branch in data
3534 if (!st)continue;
bce887f5 3535
6ec586c1 3536 AliAODTrack *daughtertrack = (AliAODTrack *) (mcfd->GetSecondaryVtx()->GetDaughter(0));//fetch the first of the two daughter tracks
3537 Int_t AssLabel = TMath::Abs(daughtertrack->GetLabel());
3538
3539 AliAODMCParticle *mcDaughterPart =(AliAODMCParticle*)st->UncheckedAt(AssLabel);
3540
3541 Int_t v0lab = mcDaughterPart->GetMother();
3542
3543 // Int_t v0lab= TMath::Abs(mcfd->GetLabel());//GetLabel doesn't work for AliAODv0 class!!! Only for AliAODtrack
bce887f5 3544
3545 if((!v0lab) || (v0lab<0) || (v0lab > st->GetEntriesFast()))continue;//validity checks
3546
3547 AliAODMCParticle *mcp=(AliAODMCParticle*)st->UncheckedAt(v0lab);
3548
3549 Double_t genLaPt = mcp->Pt();
6ec586c1 3550
3551 //std::cout<<"Incl FD, genLaPt:"<<genLaPt<<std::endl;
cc096464 3552
3553 Double_t vFeedDownLa[3] = {5., invMLaFDcand, genLaPt};
3554 fhnFeedDownLa->Fill(vFeedDownLa);
3555
6ec586c1 3556
3557 }//end loop over feeddown candidates for Lambda particles in jet cone
3558 //fetch MC truth in jet cones, denominator of rec. efficiency in jet cones
3559 //_________________________________________________________________
3560 for(Int_t it=0; it<jetConeFDLalist->GetSize(); ++it){
3561
3562 AliAODv0* mcfd = dynamic_cast<AliAODv0*>(jetConeFDLalist->At(it));
3563 if(!mcfd) continue;
3564
3565 //std::cout<<"Cone, recLaPt:"<<mcfd->Pt()<<std::endl;
3566
3567 Double_t invMLaFDcand = 0;
3568 Double_t trackPt = mcfd->Pt();//pt of ass. particle, not used for the histos
3569
3570 CalculateInvMass(mcfd, kLambda, invMLaFDcand, trackPt);
3571
3572 //Get MC gen. Lambda transverse momentum
3573 TClonesArray *st = 0x0;
3574
3575 TList *lt = fAOD->GetList();
3576 if(!lt)continue;
3577
3578 st = (TClonesArray*)lt->FindObject(AliAODMCParticle::StdBranchName());
3579
3580 AliAODTrack *daughtertrack = (AliAODTrack *) (mcfd->GetSecondaryVtx()->GetDaughter(0));//fetch the first of the two daughter tracks
3581 Int_t AssLabel = TMath::Abs(daughtertrack->GetLabel());
3582
3583 AliAODMCParticle *mcDaughterPart =(AliAODMCParticle*)st->UncheckedAt(AssLabel);
3584
3585 Int_t v0lab = mcDaughterPart->GetMother();
3586
3587 //std::cout<<"v0lab: "<<v0lab<<std::endl;
3588
3589 if((!v0lab) || (v0lab<0) || (v0lab > st->GetEntriesFast()))continue;//validity checks
3590
3591 AliAODMCParticle *mcp=(AliAODMCParticle*)st->UncheckedAt(v0lab);
3592
3593 Double_t genLaPt = mcp->Pt();
3594
3595
3596 //std::cout<<"Cone FD, genLaPt:"<<genLaPt<<std::endl;
3597
cc096464 3598 Double_t vFeedDownLaCone[3] = {jetPt, invMLaFDcand, genLaPt};
3599 fhnFeedDownLaCone->Fill(vFeedDownLaCone);
3600
bce887f5 3601
3602 }//end loop over feeddown candidates for Lambda particles in jet cone
3603
6ec586c1 3604 //_________________________________________________________________
3605 for(Int_t it=0; it<fListFeeddownALaCand->GetSize(); ++it){
3606
3607 AliAODv0* mcfd = dynamic_cast<AliAODv0*>(fListFeeddownALaCand->At(it));
3608 if(!mcfd) continue;
bce887f5 3609
6ec586c1 3610 Double_t invMALaFDcand = 0;
3611 Double_t trackPt = 0;//pt of ass. particle, not used for the histos
3612
3613 CalculateInvMass(mcfd, kAntiLambda, invMALaFDcand, trackPt);
3614
3615 //Get MC gen. Antilambda transverse momentum
3616 TClonesArray *st = 0x0;
3617
3618 TList *lt = fAOD->GetList();
3619 if(!lt)continue;
3620
3621 st = (TClonesArray*)lt->FindObject(AliAODMCParticle::StdBranchName());
3622
3623 AliAODTrack *daughtertrack = (AliAODTrack *) (mcfd->GetSecondaryVtx()->GetDaughter(0));//fetch the first of the two daughter tracks
3624 Int_t AssLabel = TMath::Abs(daughtertrack->GetLabel());
3625
3626 AliAODMCParticle *mcDaughterPart =(AliAODMCParticle*)st->UncheckedAt(AssLabel);
3627
3628 Int_t v0lab = mcDaughterPart->GetMother();
3629
3630
3631 if((!v0lab) || (v0lab<0) || (v0lab > st->GetEntriesFast()))continue;//validity checks
3632
3633 AliAODMCParticle *mcp=(AliAODMCParticle*)st->UncheckedAt(v0lab);
3634
3635 Double_t genALaPt = mcp->Pt();
cc096464 3636
3637 Double_t vFeedDownALa[3] = {5., invMALaFDcand, genALaPt};
3638 fhnFeedDownALa->Fill(vFeedDownALa);
3639
6ec586c1 3640
3641 }//end loop over feeddown candidates for Antilambda particles
bce887f5 3642
6ec586c1 3643 //_________________________________________________________________
3644 //feeddown for Antilambdas from Xi(bar)+ and Xi(bar)0 in jet cone:
bce887f5 3645
3646 for(Int_t it=0; it<jetConeFDALalist->GetSize(); ++it){
3647
3648 AliAODv0* mcfd = dynamic_cast<AliAODv0*>(jetConeFDALalist->At(it));
3649 if(!mcfd) continue;
3650
3651 Double_t invMALaFDcand = 0;
3652 Double_t trackPt = 0;//pt of ass. particle, not used for the histos
3653
3654 CalculateInvMass(mcfd, kAntiLambda, invMALaFDcand, trackPt);
3655
3656 //Get MC gen. Antilambda transverse momentum
3657 TClonesArray *st = 0x0;
3658
3659 TList *lt = fAOD->GetList();
3660 if(!lt)continue;
3661
3662 st = (TClonesArray*)lt->FindObject(AliAODMCParticle::StdBranchName());
3663
6ec586c1 3664 AliAODTrack *daughtertrack = (AliAODTrack *) (mcfd->GetSecondaryVtx()->GetDaughter(0));//fetch the first of the two daughter tracks
3665 Int_t AssLabel = TMath::Abs(daughtertrack->GetLabel());
3666
3667 AliAODMCParticle *mcDaughterPart =(AliAODMCParticle*)st->UncheckedAt(AssLabel);
3668
3669 Int_t v0lab = mcDaughterPart->GetMother();
3670
bce887f5 3671 if((!v0lab) || (v0lab<0) || (v0lab > st->GetEntriesFast()))continue;//validity checks
3672
3673 AliAODMCParticle *mcp=(AliAODMCParticle*)st->UncheckedAt(v0lab);
3674
3675 Double_t genALaPt = mcp->Pt();
cc096464 3676
3677 Double_t vFeedDownALaCone[3] = {jetPt, invMALaFDcand, genALaPt};
3678 fhnFeedDownALaCone->Fill(vFeedDownALaCone);
3679
bce887f5 3680
3681 }//end loop over feeddown candidates for Antilambda particles in jet cone
3682
3683
3684
3685 //____fetch MC generated K0s in cone around jet axis__(note: particles can stem from fragmentation but also from underlying event)________
3686
3687 Double_t sumPtMCgenK0s = 0.;
3688 Bool_t isBadJetMCgenK0s = kFALSE; // dummy, do not use
3689
3690
3691 fListMCgenK0sCone = new TList(); //MC generated K0s in (only geometrical) jet cone (these are MC gen K0s falling geometrically into jet cone (R = 0.4) around jet axis, that was found by anti-kt jet finder, particles can stem from fragmentation but also from underlying event!!)
3692
3693 //first: sampling MC gen K0s
3694
3695 GetTracksInCone(fListMCgenK0s, fListMCgenK0sCone, jet, GetFFRadius(), sumPtMCgenK0s, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetMCgenK0s); //MC generated K0s in cone around jet axis
3696
3697 if(fDebug>2)Printf("%s:%d nMCgenK0s in jet cone: %d,FFRadius %f ",(char*)__FILE__,__LINE__,fListMCgenK0sCone->GetEntries(),GetFFRadius());
3698
3699
a6ee5cab 3700 /* for(Int_t it=0; it<fListMCgenK0sCone->GetSize(); ++it){ // loop MC generated K0s in cone around jet axis
bce887f5 3701
3702 AliAODMCParticle* mcp0 = dynamic_cast<AliAODMCParticle*>(fListMCgenK0sCone->At(it));
3703 if(!mcp0) continue;
3704
3705 //Double_t fRapMCgenK0s = MyRapidity(mcp0->E(),mcp0->Pz());//get rec. particle in cone information
3706 Double_t fEtaMCgenK0s = mcp0->Eta();
3707 Double_t fPtMCgenK0s = mcp0->Pt();
3708
a6ee5cab 3709 //fh2MCgenK0Cone->Fill(jetPt,fPtMCgenK0s);
3710 // fh2MCEtagenK0Cone->Fill(jetPt,fEtaMCgenK0s);
bce887f5 3711
a6ee5cab 3712 }*/
bce887f5 3713
3714 //check whether the reconstructed K0s in jet cone are stemming from MC gen K0s (on MCgenK0s list):__________________________________________________
3715
3716 for(Int_t ic=0; ic<jetConeK0list->GetSize(); ++ic){ //loop over all reconstructed K0s in jet cone
3717
3718 //for(Int_t ic=0; ic<fListK0s->GetSize(); ++ic){ //loop over all reconstructed K0s -> previous definition of reconstruction efficiency, not sure what is the better one to choose
3719
3720 Int_t negDaughterpdg;
3721 Int_t posDaughterpdg;
3722 Int_t motherType;
3723 Int_t v0Label;
3724 Double_t fPtMCrecK0Match;
3725 Double_t invMK0Match;
3726 Double_t MCPt;
3727 Int_t nnum =-1;
3728 Int_t pnum =-1;
3729 Bool_t fPhysicalPrimary = -1;
3730 Int_t MCv0PDGCode =0;
3731 Double_t jetPtSmear = -1;
3732
3733 AliAODv0* v0c = dynamic_cast<AliAODv0*>(jetConeK0list->At(ic));//pointer to reconstructed K0s inside jet cone (cone is placed around reconstructed jet axis)
3734
3735 //AliAODv0* v0c = dynamic_cast<AliAODv0*>(fListK0s->At(ic));//pointer to reconstructed K0s
3736 if(!v0c) continue;
3737
3738 Bool_t daughtercheck = DaughterTrackCheck(v0c, nnum, pnum);//check daughter tracks have proper sign
3739 if(daughtercheck == kFALSE)continue;
3740
3741 const AliAODTrack *trackMCNeg=(AliAODTrack *)(v0c->GetDaughter(nnum));
3742 const AliAODTrack *trackMCPos=(AliAODTrack *)(v0c->GetDaughter(pnum));
df9b7345 3743 Bool_t isinjected;
3744 TString generatorName;
bce887f5 3745 TList *listmc = fAOD->GetList();
3746
df9b7345 3747 Bool_t mclabelcheck = MCLabelCheck(v0c, kK0, trackMCNeg, trackMCPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PDGCode, generatorName, isinjected);
bce887f5 3748
6ec586c1 3749 if(mclabelcheck == kFALSE)continue;
3750 if(fPhysicalPrimary == kFALSE)continue; //requirements for rec. V0 associated to MC true primary particle
bce887f5 3751
3752 for(Int_t it=0; it<fListMCgenK0s->GetSize(); ++it){ // loop over MC generated K0s in event, check whether associated MC particle is part of it
3753
3754 //for(Int_t it=0; it<fListMCgenK0sCone->GetSize(); ++it){//belongs to previous definition of rec. eff. of V0s within jet cone
3755
3756 //Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
3757 //AliAODMCParticle* mcp0 = dynamic_cast<AliAODMCParticle*>(fListMCgenK0sCone->At(it));
3758 AliAODMCParticle* mcp0 = dynamic_cast<AliAODMCParticle*>(fListMCgenK0s->At(it));
3759 if(!mcp0) continue;
3760
3761 Bool_t particleMatching = IsParticleMatching(mcp0, v0Label);
3762
3763 if(particleMatching == kFALSE)continue; //if reconstructed V0 particle doesn't match to the associated MC particle go to next stack entry
3764 CalculateInvMass(v0c, kK0, invMK0Match, fPtMCrecK0Match);
cc096464 3765 Double_t fEta = v0c->Eta();
3766 Double_t fPtMCgenK0s = mcp0->Pt();//pt has to be always MC truth value!
bce887f5 3767
cc096464 3768 Double_t vMCrecK0Cone[4] = {jetPt, invMK0Match,fPtMCgenK0s,fEta};
3769 fhnMCrecK0Cone->Fill(vMCrecK0Cone); //fill matching rec. K0s in 3D histogram
bce887f5 3770
cc096464 3771 SmearJetPt(jetPt,cl,GetFFRadius(),GetFFMinLTrackPt(),jetPtSmear); //jetPt, cent, jetRadius, ptmintrack, &jetPtSmear
3772
3773 Double_t vMCrecK0ConeSmear[4] = {jetPtSmear, invMK0Match,fPtMCgenK0s,fEta};
3774 fhnMCrecK0ConeSmear->Fill(vMCrecK0ConeSmear);
3775
3776 //fill matching rec. K0s in 3D histogram, jet pT smeared according to deltaptjet distribution width
bce887f5 3777
3778
3779 } // end MCgenK0s / MCgenK0sCone loop
3780
3781 //___________
3782 //check the K0s daughters contamination of the jet tracks:
3783
3784 TClonesArray *stackMC = 0x0;
3785
3786 for(Int_t it=0; it<jettracklist->GetSize(); ++it){//loop over all particles in the jet
3787
3788 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));//all tracks in jet cone
3789 if(!trackVP)continue;
3790 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (trackVP); //fetch one jet track from the TList
3791 if(!tr)continue;
3792
3793 //get MC label information
3794 TList *mclist = fAOD->GetList(); //fetch the MC stack
3795 if(!mclist)continue;
3796
3797 stackMC = (TClonesArray*)mclist->FindObject(AliAODMCParticle::StdBranchName()); //get MCAOD branch in data
3798 if (!stackMC) {Printf("ERROR: stack not available");}
3799 else {
3800
3801 Int_t particleLabel = TMath::Abs(tr->GetLabel()); //fetch jet track label in MC stack
3802 if(!tr)continue;
3803 //v0c is pointer to K0s candidate, is fetched already above, here it is just checked again whether daughters are properly ordered by their charge
3804
3805 Bool_t daughterchecks = DaughterTrackCheck(v0c, nnum, pnum);
3806
3807 if(daughterchecks == kFALSE)continue; //make sure that daughters are properly ordered
3808
3809 const AliAODTrack *trackNeg=(AliAODTrack *)(v0c->GetDaughter(nnum)); //fetch v0 daughters of reconstructed K0s
3810 const AliAODTrack *trackPos=(AliAODTrack *)(v0c->GetDaughter(pnum));
3811
3812 if(!trackNeg)continue;
3813 if(!trackPos)continue;
3814
3815 Int_t negAssLabel = TMath::Abs(trackNeg->GetLabel()); //negative (reconstructed) charged track label in MC stack
3816 Int_t posAssLabel = TMath::Abs(trackPos->GetLabel()); //positive (reconstructed) charged track label in MC stack
3817
3818
3819 if(particleLabel == posAssLabel){ //check whether jet track and each of the rec. K0s daughters have same MC stack label -> are identical
3820 AliAODMCParticle* mctrackPos = dynamic_cast<AliAODMCParticle*>(stackMC->At(posAssLabel));
3821 if(!mctrackPos) continue;
3822 Double_t trackPosPt = mctrackPos->Pt();
3823 Double_t trackPosEta = mctrackPos->Eta();
cc096464 3824
3825 Double_t vK0sSecContinCone[3] = {jetPt, trackPosPt, trackPosEta};
3826 fhnK0sSecContinCone->Fill(vK0sSecContinCone);} //if it's the case, fill jet pt, daughter track pt and track eta in histo
bce887f5 3827
3828 if(particleLabel == negAssLabel){
3829 AliAODMCParticle* mctrackNeg = dynamic_cast<AliAODMCParticle*>(stackMC->At(negAssLabel));
3830 if(!mctrackNeg) continue;
3831 Double_t trackNegPt = mctrackNeg->Pt();
3832 Double_t trackNegEta = mctrackNeg->Eta();
cc096464 3833
3834 Double_t vK0sSecContinCone[3] = {jetPt, trackNegPt, trackNegEta};
3835 fhnK0sSecContinCone->Fill(vK0sSecContinCone);} //if it's the case, fill jet pt, daughter track pt and track eta in histo
bce887f5 3836 }
3837 }
3838
3839
3840 //_______________
3841
3842
3843 } //end rec-K0-in-cone loop
3844
3845 //________________________________________________________________________________________________________________________________________________________
3846
bce887f5 3847 delete fListMCgenK0sCone;
3848
3849
3850 }//end fAnalysisMC
3851
3852 delete jetConeK0list;
3853 delete jetPerpConeK0list;
3854 delete jetPerpConeLalist;
3855 delete jetPerpConeALalist;
dec584ae 3856
bce887f5 3857
3858 //---------------La--------------------------------------------------------------------------------------------------------------------------------------------
3859
3860 // fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
3861
3862 for(Int_t it=0; it<fListLa->GetSize(); ++it){ // loop all La
3863
3864 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListLa->At(it));
3865 if(!v0) continue;
3866
3867 Double_t v0Mom[3];
3868 v0->PxPyPz(v0Mom);
3869 TVector3 v0MomVect(v0Mom);
3870
3871 Double_t dPhiJetLa = (jet->MomentumVector()->Vect()).DeltaPhi(v0MomVect);
3872
3873 Double_t invMLa =0;
3874 Double_t trackPt=0;
3875
3876 CalculateInvMass(v0, kLambda, invMLa, trackPt); //function to calculate invMass with TLorentzVector class
cc096464 3877 // Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
bce887f5 3878
3879 //if(incrementJetPt){fh1V0JetPt->Fill(jetPt);}
3880
cc096464 3881 //fFFHistosIMLaJet->FillFF(trackPt, invMLa, jetPt, incrementJetPt);
d7fb73a4 3882
bce887f5 3883 if(dPhiJetLa<fh1dPhiJetLa->GetXaxis()->GetXmin()) dPhiJetLa += 2*TMath::Pi();
3884 fh1dPhiJetLa->Fill(dPhiJetLa);
3885 }
3886
cc096464 3887 /* if(fListLa->GetSize() == 0){ // no La: increment jet pt spectrum
bce887f5 3888
cc096464 3889 Bool_t incrementJetPt = kTRUE;
3890 fFFHistosIMLaJet->FillFF(-1, -1, jetPt, incrementJetPt);
3891 }*/
bce887f5 3892
3893
3894 // ____fetch rec. Lambdas in cone around jet axis_______________________________________________________________________________________
3895
3896 TList* jetConeLalist = new TList();
3897 Double_t sumPtLa = 0.;
3898 Bool_t isBadJetLa = kFALSE; // dummy, do not use
3899
3900 GetTracksInCone(fListLa, jetConeLalist, jet, GetFFRadius(), sumPtLa, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetLa);//method inherited from FF
3901
3902 if(fDebug>2)Printf("%s:%d nLa total: %d, in jet cone: %d,FFRadius %f ",(char*)__FILE__,__LINE__,nLa,jetConeLalist->GetEntries(),GetFFRadius());
3903
3904 for(Int_t it=0; it<jetConeLalist->GetSize(); ++it){ // loop La in jet cone
3905
3906 AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetConeLalist->At(it));
df9b7345 3907 if(!v0) continue;
3908
3909 Int_t nnum;
3910 Int_t pnum;
3911
3912 Bool_t daughtercheck = DaughterTrackCheck(v0, nnum, pnum);
3913 if(daughtercheck == kFALSE)continue;
bce887f5 3914 Double_t invMLa =0;
3915 Double_t trackPt=0;
3ed9f288 3916 Double_t fEta = 0;
3917
3918 fEta = v0->Eta();
3919
bce887f5 3920 CalculateInvMass(v0, kLambda, invMLa, trackPt); //function to calculate invMass with TLorentzVector class
3921
cc096464 3922 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;//needed for all histos, which serve for normalisation
df9b7345 3923
bce887f5 3924 if(fAnalysisMC){
df9b7345 3925
3926 Int_t negDaughterpdg;
3927 Int_t posDaughterpdg;
3928 Int_t motherType;
3929 Int_t v0Label;
bce887f5 3930 Double_t jetPtSmear = -1;
df9b7345 3931 Double_t MCPt;
3932 Bool_t fPhysicalPrimary = -1;
3933 Int_t MCv0PDGCode =0;
3934 TString generatorName;
3935
b6eb08db 3936 SmearJetPt(jetPt,cl,GetFFRadius(),GetFFMinLTrackPt(),jetPtSmear);
df9b7345 3937 if(incrementJetPt == kTRUE){fh1IMLaConeSmear->Fill(jetPtSmear);
3938
3939 const AliAODTrack *trackNeg=(AliAODTrack *)(v0->GetDaughter(nnum));
3940 const AliAODTrack *trackPos=(AliAODTrack *)(v0->GetDaughter(pnum));
3941
3942 TList *listmc = fAOD->GetList();
3943 Bool_t isinjected;
3944 Bool_t mclabelcheck = MCLabelCheck(v0, kLambda, trackNeg, trackPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PDGCode, generatorName, isinjected);
3945 if(mclabelcheck == kFALSE)continue;
3946
3947 //std::cout<<"generatorName: "<<generatorName<<std::endl;
3948
3949 if(generatorName == "Hijing"){
3950 Double_t vrecMCHijingLaCone[4] = {jetPt, invMLa,trackPt,fEta};
3951 fhnrecMCHijingLaCone->Fill(vrecMCHijingLaCone);
3952 }
3953
3954 if(isinjected == kTRUE){
3955 Double_t vrecMCInjectLaCone[4] = {jetPt, invMLa,trackPt,fEta};
3956 fhnrecMCInjectLaCone->Fill(vrecMCInjectLaCone);
3957 }
3958
3959 }//fill TH1F for normalization purposes
4855fa4a 3960 }//end MC analysis part
cc096464 3961
3962 if(incrementJetPt==kTRUE){
3963 fh1IMLaCone->Fill(jetPt);}//normalisation by number of selected jets
4855fa4a 3964
df9b7345 3965 //fFFHistosIMLaCone->FillFF(trackPt, invMLa, jetPt, incrementJetPt);
4855fa4a 3966 Double_t vLaCone[4] = {jetPt, invMLa,trackPt,fEta};
3967 fhnLaCone->Fill(vLaCone);
bce887f5 3968 }
3969
3970 if(jetConeLalist->GetSize() == 0){ // no La: increment jet pt spectrum
3971
3972 Bool_t incrementJetPt = kTRUE;
cc096464 3973 // fFFHistosIMLaCone->FillFF(-1, -1, jetPt, incrementJetPt);
3ed9f288 3974 Double_t vLaCone[4] = {jetPt, -1, -1, -1};
3975 fhnLaCone->Fill(vLaCone);
cc096464 3976
3977 if(incrementJetPt==kTRUE){
3978 fh1IMLaCone->Fill(jetPt);}//normalisation by number of selected jets
bce887f5 3979
3980 if(fAnalysisMC){
3981 Double_t jetPtSmear;
b6eb08db 3982 SmearJetPt(jetPt,cl,GetFFRadius(),GetFFMinLTrackPt(),jetPtSmear);
df9b7345 3983 if(incrementJetPt == kTRUE){
3984 fh1IMLaConeSmear->Fill(jetPtSmear);
3985
3986 }
3987 }
bce887f5 3988
3989 }
3990
3991 if(fAnalysisMC){
3992
3993 //____fetch MC generated Lambdas in cone around jet axis__(particles can stem from fragmentation but also from underlying event)_____________
3994
3995 Double_t sumPtMCgenLa = 0.;
3996 Bool_t isBadJetMCgenLa = kFALSE; // dummy, do not use
3997
3998 //sampling MC gen. Lambdas in cone around reconstructed jet axis
3999 fListMCgenLaCone = new TList();
4000
4001 GetTracksInCone(fListMCgenLa, fListMCgenLaCone, jet, GetFFRadius(), sumPtMCgenLa, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetMCgenLa);//fetch MC generated Lambdas in cone of resolution parameter R around jet axis
4002
4003 if(fDebug>2)Printf("%s:%d nMCgenLa in jet cone: %d,FFRadius %f ",(char*)__FILE__,__LINE__,fListMCgenLaCone->GetEntries(),GetFFRadius());
4004
a6ee5cab 4005 /* for(Int_t it=0; it<fListMCgenLaCone->GetSize(); ++it){ // loop MC generated La in cone around jet axis
bce887f5 4006
4007 AliAODMCParticle* mcp0 = dynamic_cast<AliAODMCParticle*>(fListMCgenLaCone->At(it));
4008 if(!mcp0) continue;
4009
4010 //Double_t fRapMCgenLa = MyRapidity(mcp0->E(),mcp0->Pz());
4011 Double_t fEtaMCgenLa = mcp0->Eta();
4012 Double_t fPtMCgenLa = mcp0->Pt();
4013
a6ee5cab 4014 // fh2MCgenLaCone->Fill(jetPt,fPtMCgenLa);
4015 //fh2MCEtagenLaCone->Fill(jetPt,fEtaMCgenLa);
4016 }*/
bce887f5 4017
4018
4019 //check whether the reconstructed La are stemming from MC gen La on fListMCgenLa List:__________________________________________________
4020
4021 for(Int_t ic=0; ic<jetConeLalist->GetSize(); ++ic){//loop over all reconstructed La within jet cone, new definition
4022
4023 //for(Int_t ic=0; ic<fListLa->GetSize(); ++ic){//old definition
4024
4025 Int_t negDaughterpdg;
4026 Int_t posDaughterpdg;
4027 Int_t motherType;
4028 Int_t v0Label;
4029 Double_t fPtMCrecLaMatch;
4030 Double_t invMLaMatch;
4031 Double_t MCPt;
4032 Int_t nnum;
4033 Int_t pnum;
4034 Bool_t fPhysicalPrimary = -1;
4035 Int_t MCv0PDGCode =0;
4036 Double_t jetPtSmear = -1;
df9b7345 4037 TString generatorName;
bce887f5 4038
4039 AliAODv0* v0c = dynamic_cast<AliAODv0*>(jetConeLalist->At(ic));//new definition
4040
df9b7345 4041
bce887f5 4042 if(!v0c) continue;
4043
4044 Bool_t daughtercheck = DaughterTrackCheck(v0c, nnum, pnum);
4045 if(daughtercheck == kFALSE)continue;
4046
4047 const AliAODTrack *trackMCNeg=(AliAODTrack *)(v0c->GetDaughter(nnum));
4048 const AliAODTrack *trackMCPos=(AliAODTrack *)(v0c->GetDaughter(pnum));
4049
4050 TList *listmc = fAOD->GetList();
df9b7345 4051 Bool_t isinjected;
4052 Bool_t mclabelcheck = MCLabelCheck(v0c, kLambda, trackMCNeg, trackMCPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PDGCode, generatorName, isinjected);
bce887f5 4053
4054 if(mclabelcheck == kFALSE)continue;
6ec586c1 4055 if(fPhysicalPrimary == kFALSE)continue;
4056
bce887f5 4057 for(Int_t it=0; it<fListMCgenLa->GetSize(); ++it){//new definition // loop over MC generated K0s in cone around jet axis
4058
4059 // for(Int_t it=0; it<fListMCgenLaCone->GetSize(); ++it){//old definition // loop over MC generated La in cone around jet axis
4060
4061 //Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4062
4063 AliAODMCParticle* mcp0 = dynamic_cast<AliAODMCParticle*>(fListMCgenLa->At(it));//new definition
4064 //AliAODMCParticle* mcp0 = dynamic_cast<AliAODMCParticle*>(fListMCgenLaCone->At(it));//old definition
4065
4066 if(!mcp0) continue;
4067
4068 Bool_t particleMatching = IsParticleMatching(mcp0, v0Label);
4069
4070
4071 if(particleMatching == kFALSE)continue; //particle doesn't match on any associated MC gen particle in cone around rec jet axis
4072
4073 CalculateInvMass(v0c, kLambda, invMLaMatch, fPtMCrecLaMatch);
4074
4075 Double_t fPtMCgenLa = mcp0->Pt();
cc096464 4076 Double_t fEta = v0c->Eta();//rec. MC particle
4077 Double_t vMCrecLaCone[4] = {jetPt, invMLaMatch,fPtMCgenLa,fEta};
4078 fhnMCrecLaCone->Fill(vMCrecLaCone);
bce887f5 4079
b6eb08db 4080 SmearJetPt(jetPt,cl,GetFFRadius(),GetFFMinLTrackPt(),jetPtSmear);
bce887f5 4081
cc096464 4082 Double_t vMCrecLaConeSmear[4] = {jetPtSmear, invMLaMatch,fPtMCgenLa,fEta};
4083 fhnMCrecLaConeSmear->Fill(vMCrecLaConeSmear); //fill matching rec. Lambdas in 3D histogram, jet pT smeared according to deltaptjet distribution width
bce887f5 4084
4085
4086 } // end MCgenLa loop
4087
4088 //check the Lambda daughters contamination of the jet tracks://///////////////////////////////////////////////////////////////////////////////////////////
4089
4090 TClonesArray *stackMC = 0x0;
4091
4092 for(Int_t it=0; it<jettracklist->GetSize(); ++it){//loop over all particles in the jet
4093
4094 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));//all tracks in jet cone
4095 if(!trackVP)continue;
4096 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (trackVP); //fetch one jet track from the TList
4097 if(!tr)continue;
4098
4099 //get MC label information
4100 TList *mclist = fAOD->GetList(); //fetch the MC stack
4101
4102 stackMC = (TClonesArray*)mclist->FindObject(AliAODMCParticle::StdBranchName()); //get MCAOD branch in data
4103 if (!stackMC) {Printf("ERROR: stack not available");}
4104 else {
4105
4106 Int_t particleLabel = TMath::Abs(tr->GetLabel()); //fetch jet track label in MC stack
4107
4108 Bool_t daughterchecks = DaughterTrackCheck(v0c, nnum, pnum);
4109
4110 if(daughterchecks == kFALSE)continue; //make sure that daughters are properly ordered
4111
4112 const AliAODTrack *trackNeg=(AliAODTrack *)(v0c->GetDaughter(nnum)); //fetch v0 daughters of reconstructed K0s
4113 const AliAODTrack *trackPos=(AliAODTrack *)(v0c->GetDaughter(pnum));
4114
4115 Int_t negAssLabel = TMath::Abs(trackNeg->GetLabel()); //negative (reconstructed) charged track label in MC stack
4116 Int_t posAssLabel = TMath::Abs(trackPos->GetLabel()); //positive (reconstructed) charged track label in MC stack
4117
4118
4119 if(particleLabel == posAssLabel){ //check whether jet track and each of the rec. K0s daughters have same MC stack label -> are identical
4120
4121 AliAODMCParticle* mctrackPos = dynamic_cast<AliAODMCParticle*>(stackMC->At(posAssLabel));
4122 if(!mctrackPos) continue;
4123
4124 Double_t trackPosPt = trackPos->Pt();
4125 Double_t trackPosEta = trackPos->Eta();
cc096464 4126 Double_t vLaSecContinCone[3] = {jetPt, trackPosPt, trackPosEta};
4127 fhnLaSecContinCone->Fill(vLaSecContinCone);
4128
4129 } //if it's the case, fill jet pt, daughter track pt and track eta in histo
4130
4131
bce887f5 4132 if(particleLabel == negAssLabel){
4133
4134 AliAODMCParticle* mctrackNeg = dynamic_cast<AliAODMCParticle*>(stackMC->At(negAssLabel));
4135 if(!mctrackNeg) continue;
4136
4137 Double_t trackNegPt = trackNeg->Pt();
4138 Double_t trackNegEta = trackNeg->Eta();
cc096464 4139
4140 Double_t vLaSecContinCone[3] = {jetPt, trackNegPt, trackNegEta};
4141 fhnLaSecContinCone->Fill(vLaSecContinCone);
4142
4143
4144 } //if it's the case, fill jet pt, daughter track pt and track eta in histo
bce887f5 4145 }
4146 }
4147
cc096464 4148
bce887f5 4149 } //end rec-La-in-cone loop
4150 //________________________________________________________________________________________________________________________________________________________
4151
4152 delete fListMCgenLaCone;
4153
4154 }//end fAnalysisMC
4155
4156 delete jetConeLalist;
4157
4158
4159
4160 //---------------ALa-----------
4161
4162
4163 // fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
4164
4165 for(Int_t it=0; it<fListALa->GetSize(); ++it){ // loop all ALa
4166
4167 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListALa->At(it));
4168 if(!v0) continue;
4169
4170 Double_t v0Mom[3];
4171 v0->PxPyPz(v0Mom);
4172 TVector3 v0MomVect(v0Mom);
4173
4174 Double_t dPhiJetALa = (jet->MomentumVector()->Vect()).DeltaPhi(v0MomVect);
4175
4176 Double_t invMALa =0;
4177 Double_t trackPt=0;
4178
4179 CalculateInvMass(v0, kAntiLambda, invMALa, trackPt); //function to calculate invMass with TLorentzVector class
cc096464 4180 //Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
bce887f5 4181
4182 //if(incrementJetPt){fh1V0JetPt->Fill(jetPt);}
4183
cc096464 4184 //fFFHistosIMALaJet->FillFF(trackPt, invMALa, jetPt, incrementJetPt);
d7fb73a4 4185
bce887f5 4186 if(dPhiJetALa<fh1dPhiJetALa->GetXaxis()->GetXmin()) dPhiJetALa += 2*TMath::Pi();
4187 fh1dPhiJetALa->Fill(dPhiJetALa);
4188 }
4189
cc096464 4190 // if(fListALa->GetSize() == 0){ // no ALa: increment jet pt spectrum
bce887f5 4191
cc096464 4192 // Bool_t incrementJetPt = kTRUE;
4193 //fFFHistosIMALaJet->FillFF(-1, -1, jetPt, incrementJetPt);
4194 //}
bce887f5 4195
4196
4197 // ____fetch rec. Antilambdas in cone around jet axis_______________________________________________________________________________________
4198
4199 TList* jetConeALalist = new TList();
4200 Double_t sumPtALa = 0.;
4201 Bool_t isBadJetALa = kFALSE; // dummy, do not use
4202
4203 GetTracksInCone(fListALa, jetConeALalist, jet, GetFFRadius(), sumPtALa, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetALa);//method inherited from FF
4204
4205 if(fDebug>2)Printf("%s:%d nALa total: %d, in jet cone: %d,FFRadius %f ",(char*)__FILE__,__LINE__,nALa,jetConeALalist->GetEntries(),GetFFRadius());
4206
4207 for(Int_t it=0; it<jetConeALalist->GetSize(); ++it){ // loop ALa in jet cone
4208
4209 AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetConeALalist->At(it));
df9b7345 4210 if(!v0) continue;
4211
4212
4213 Int_t nnum;
4214 Int_t pnum;
4215
4216 Bool_t daughtercheck = DaughterTrackCheck(v0, nnum, pnum);
4217 if(daughtercheck == kFALSE)continue;
4218
4219
bce887f5 4220 Double_t invMALa =0;
4221 Double_t trackPt=0;
3ed9f288 4222 Double_t fEta = 0;
4223
4224 fEta = v0->Eta();
4225
bce887f5 4226 CalculateInvMass(v0, kAntiLambda, invMALa, trackPt); //function to calculate invMass with TLorentzVector class
4227
4228 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4229
4230 if(fAnalysisMC){ //jet pt smearing study for Antilambdas
df9b7345 4231
4232 Int_t negDaughterpdg;
4233 Int_t posDaughterpdg;
4234 Int_t motherType;
4235 Int_t v0Label;
4236 Double_t jetPtSmear = -1;
4237 Double_t MCPt;
4238 Bool_t fPhysicalPrimary = -1;
4239 Int_t MCv0PDGCode =0;
4240 TString generatorName;
4241
b6eb08db 4242 SmearJetPt(jetPt,cl,GetFFRadius(),GetFFMinLTrackPt(),jetPtSmear);
df9b7345 4243 const AliAODTrack *trackNeg=(AliAODTrack *)(v0->GetDaughter(nnum));
4244 const AliAODTrack *trackPos=(AliAODTrack *)(v0->GetDaughter(pnum));
4245
4246 TList *listmc = fAOD->GetList();
4247 Bool_t isinjected;
4248 Bool_t mclabelcheck = MCLabelCheck(v0, kAntiLambda, trackNeg, trackPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PDGCode, generatorName, isinjected);
4249 if(mclabelcheck == kFALSE)continue;
4250
4251 //std::cout<<"generatorName: "<<generatorName<<std::endl;
4252
4253 if(generatorName == "Hijing"){
4254 Double_t vrecMCHijingALaCone[4] = {jetPt, invMALa,trackPt,fEta};
4255 fhnrecMCHijingALaCone->Fill(vrecMCHijingALaCone);
4256 }
4257
4258 if(isinjected == kTRUE){
4259 Double_t vrecMCInjectALaCone[4] = {jetPt, invMALa,trackPt,fEta};
4260 fhnrecMCInjectALaCone->Fill(vrecMCInjectALaCone);
4261 }
4262
cc096464 4263 if(incrementJetPt == kTRUE){fh1IMALaConeSmear->Fill(jetPtSmear);} //fill TH1F for normalization purposes
4264 }//end fAnalysisMC
4265
4266 if(incrementJetPt==kTRUE){
4267 fh1IMALaCone->Fill(jetPt);}//normalisation by number of selected jets
4268
4269 //fFFHistosIMALaCone->FillFF(trackPt, invMALa, jetPt, incrementJetPt);
3ed9f288 4270 Double_t vALaCone[4] = {jetPt, invMALa,trackPt,fEta};
4271 fhnALaCone->Fill(vALaCone);
bce887f5 4272 }
4273
4274 if(jetConeALalist->GetSize() == 0){ // no ALa: increment jet pt spectrum
4275
4276 Bool_t incrementJetPt = kTRUE;
cc096464 4277
4278 if(incrementJetPt==kTRUE){
4279 fh1IMALaCone->Fill(jetPt);}//normalisation by number of selected jets
4280
4281 //fFFHistosIMALaCone->FillFF(-1, -1, jetPt, incrementJetPt);
3ed9f288 4282 Double_t vALaCone[4] = {jetPt, -1, -1, -1};
4283 fhnALaCone->Fill(vALaCone);
bce887f5 4284
4285 if(fAnalysisMC){
4286 Double_t jetPtSmear;
b6eb08db 4287 SmearJetPt(jetPt,cl,GetFFRadius(),GetFFMinLTrackPt(),jetPtSmear);
cc096464 4288 if(incrementJetPt == kTRUE)fh1IMALaConeSmear->Fill(jetPtSmear);}
bce887f5 4289
4290 }
4291
4292 if(fAnalysisMC){
4293
4294 //____fetch MC generated Antilambdas in cone around jet axis__(particles can stem from fragmentation but also from underlying event)_____________
4295
4296 Double_t sumPtMCgenALa = 0.;
4297 Bool_t isBadJetMCgenALa = kFALSE; // dummy, do not use
4298
4299 //sampling MC gen Antilambdas in cone around reconstructed jet axis
4300 fListMCgenALaCone = new TList();
4301
4302 GetTracksInCone(fListMCgenALa, fListMCgenALaCone, jet, GetFFRadius(), sumPtMCgenALa, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetMCgenALa);//MC generated K0s in cone around jet axis
4303
4304 if(fDebug>2)Printf("%s:%d nMCgenALa in jet cone: %d,FFRadius %f ",(char*)__FILE__,__LINE__,fListMCgenALaCone->GetEntries(),GetFFRadius());
4305
a6ee5cab 4306 /* for(Int_t it=0; it<fListMCgenALaCone->GetSize(); ++it){ // loop MC generated La in cone around jet axis
bce887f5 4307
4308 AliAODMCParticle* mcp0 = dynamic_cast<AliAODMCParticle*>(fListMCgenALaCone->At(it));
4309 if(!mcp0) continue;
4310
4311 //Double_t fRapMCgenALa = MyRapidity(mcp0->E(),mcp0->Pz());
4312 Double_t fEtaMCgenALa = mcp0->Eta();
4313 Double_t fPtMCgenALa = mcp0->Pt();
4314
a6ee5cab 4315 //fh2MCgenALaCone->Fill(jetPt,fPtMCgenALa);
4316 //fh2MCEtagenALaCone->Fill(jetPt,fEtaMCgenALa);
4317 }*/
bce887f5 4318
4319
4320 //check whether the reconstructed ALa are stemming from MC gen ALa on MCgenALa List:__________________________________________________
4321
4322 for(Int_t ic=0; ic<jetConeALalist->GetSize(); ++ic){//loop over all reconstructed ALa
4323
4324 Int_t negDaughterpdg;
4325 Int_t posDaughterpdg;
4326 Int_t motherType;
4327 Int_t v0Label;
4328 Double_t fPtMCrecALaMatch;
4329 Double_t invMALaMatch;
4330 Double_t MCPt;
4331 Int_t nnum;
4332 Int_t pnum;
4333 Bool_t fPhysicalPrimary = -1;
4334 Int_t MCv0PDGCode =0;
4335 Double_t jetPtSmear = -1;
df9b7345 4336 TString generatorName;
bce887f5 4337
4338 AliAODv0* v0c = dynamic_cast<AliAODv0*>(jetConeALalist->At(ic));
4339 if(!v0c) continue;
4340
4341 Bool_t daughtercheck = DaughterTrackCheck(v0c, nnum, pnum);
4342 if(daughtercheck == kFALSE)continue;
4343
4344 const AliAODTrack *trackMCNeg=(AliAODTrack *)(v0c->GetDaughter(nnum));
4345 const AliAODTrack *trackMCPos=(AliAODTrack *)(v0c->GetDaughter(pnum));
4346
4347 TList *listmc = fAOD->GetList();
4348 if(!listmc)continue;
df9b7345 4349 Bool_t isinjected;
4350 Bool_t mclabelcheck = MCLabelCheck(v0c, kAntiLambda, trackMCNeg, trackMCPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PDGCode, generatorName, isinjected);
bce887f5 4351
4352 if(mclabelcheck == kFALSE)continue;
6ec586c1 4353 if(fPhysicalPrimary == kFALSE)continue;
4354
bce887f5 4355 for(Int_t it=0; it<fListMCgenALa->GetSize(); ++it){ // loop over MC generated Antilambdas in cone around jet axis
4356
4357 //Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
4358
4359 AliAODMCParticle* mcp0 = dynamic_cast<AliAODMCParticle*>(fListMCgenALa->At(it));
4360 if(!mcp0) continue;
4361
4362 Bool_t particleMatching = IsParticleMatching(mcp0, v0Label);
4363
4364 if(particleMatching == kFALSE)continue; //particle doesn't match on any associated MC gen particle in cone around rec jet axis
4365
4366 CalculateInvMass(v0c, kAntiLambda, invMALaMatch, fPtMCrecALaMatch);
4367
4368 Double_t fPtMCgenALa = mcp0->Pt();
cc096464 4369 Double_t fEta = v0c->Eta();
4370 Double_t vMCrecALaCone[4] = {jetPt, invMALaMatch,fPtMCgenALa,fEta};
4371 fhnMCrecALaCone->Fill(vMCrecALaCone); //fill matching rec. Antilambda in 3D histogram
bce887f5 4372
b6eb08db 4373 SmearJetPt(jetPt,cl,GetFFRadius(),GetFFMinLTrackPt(),jetPtSmear);
bce887f5 4374
cc096464 4375 Double_t vMCrecALaConeSmear[4] = {jetPtSmear, invMALaMatch,fPtMCgenALa,fEta};
4376 fhnMCrecALaConeSmear->Fill(vMCrecALaConeSmear); //fill matching rec. Antilambda in 3D histogram
bce887f5 4377
4378 } // end MCgenALa loop
4379
4380
4381 //___________
4382 //check the Antilambda daughters contamination of the jet tracks:
4383
4384 TClonesArray *stackMC = 0x0;
4385
4386 for(Int_t it=0; it<jettracklist->GetSize(); ++it){//loop over all particles in the jet
4387
4388 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));//all tracks in jet cone
4389 if(!trackVP)continue;
4390 AliAODTrack *tr = dynamic_cast<AliAODTrack*> (trackVP); //fetch one jet track from the TList
4391 if(!tr)continue;
4392
4393 //get MC label information
4394 TList *mclist = fAOD->GetList(); //fetch the MC stack
4395 if(!mclist)continue;
4396
4397 stackMC = (TClonesArray*)mclist->FindObject(AliAODMCParticle::StdBranchName()); //get MCAOD branch in data
4398 if (!stackMC) {Printf("ERROR: stack not available");}
4399 else {
4400
4401 Int_t particleLabel = TMath::Abs(tr->GetLabel()); //fetch jet track label in MC stack
4402
4403 Bool_t daughterchecks = DaughterTrackCheck(v0c, nnum, pnum);
4404
4405 if(daughterchecks == kFALSE)continue; //make sure that daughters are properly ordered
4406
4407 const AliAODTrack *trackNeg=(AliAODTrack *)(v0c->GetDaughter(nnum)); //fetch v0 daughters of reconstructed K0s
4408 const AliAODTrack *trackPos=(AliAODTrack *)(v0c->GetDaughter(pnum));
4409 if(!trackPos)continue;
4410 if(!trackNeg)continue;
4411
4412 Int_t negAssLabel = TMath::Abs(trackNeg->GetLabel()); //negative (reconstructed) charged track label in MC stack
4413 Int_t posAssLabel = TMath::Abs(trackPos->GetLabel()); //positive (reconstructed) charged track label in MC stack
4414
4415 if(!negAssLabel)continue;
4416 if(!posAssLabel)continue;
4417
4418 if(particleLabel == posAssLabel){ //check whether jet track and each of the rec. K0s daughters have same MC stack label -> are identical
4419 AliAODMCParticle* mctrackPos = dynamic_cast<AliAODMCParticle*>(stackMC->At(posAssLabel));
4420 if(!mctrackPos) continue;
4421
4422 Double_t trackPosPt = trackPos->Pt();
4423 Double_t trackPosEta = trackPos->Eta();
4424 if(!trackPosPt)continue;
4425 if(!trackPosEta)continue;
4426
cc096464 4427 Double_t vLaSecContinCone[3] = {jetPt, trackPosPt, trackPosEta};
4428 fhnLaSecContinCone->Fill(vLaSecContinCone);
4429
4430
4431
4432 //fh3SecContinCone->Fill(jetPt, trackPosPt, trackPosEta);
4433 } //if it's the case, fill jet pt, daughter track pt and track eta in histo
bce887f5 4434
4435 if(particleLabel == negAssLabel){
4436
4437 AliAODMCParticle* mctrackNeg = dynamic_cast<AliAODMCParticle*>(stackMC->At(negAssLabel));
4438 if(!mctrackNeg) continue;
4439
4440 Double_t trackNegPt = trackNeg->Pt();
4441 Double_t trackNegEta = trackNeg->Eta();
4442
4443 if(!trackNegPt)continue;
4444 if(!trackNegEta)continue;
4445
cc096464 4446 Double_t vLaSecContinCone[3] = {jetPt, trackNegPt, trackNegEta};
4447 fhnLaSecContinCone->Fill(vLaSecContinCone);
4448
4449 //fh3SecContinCone->Fill(jetPt, trackNegPt, trackNegEta);
4450 } //if it's the case, fill jet pt, daughter track pt and track eta in histo
bce887f5 4451 }
4452 }
4453
4454 } //end rec-ALa-in-cone loop
4455 //________________________________________________________________________________________________________________________________________________________
4456
4457 delete fListMCgenALaCone;
4458
4459 }//end fAnalysisMC
4460
4461 delete jetConeALalist;
4462 delete jettracklist; //had been initialised at jet loop beginning
d7fb73a4 4463
4464 }//end of if 'leading' or 'all jet' requirement
bce887f5 4465 }//end of jet loop
d7fb73a4 4466
bce887f5 4467
4468
4469
4470 fTracksRecCuts->Clear();
4471 fJetsRecCuts->Clear();
4472 fBckgJetsRec->Clear();
4473 fListK0s->Clear();
4474 fListLa->Clear();
4475 fListALa->Clear();
4476 fListFeeddownLaCand->Clear();
4477 fListFeeddownALaCand->Clear();
4478 jetConeFDLalist->Clear();
4479 jetConeFDALalist->Clear();
4480 fListMCgenK0s->Clear();
4481 fListMCgenLa->Clear();
4482 fListMCgenALa->Clear();
cc096464 4483
bce887f5 4484
4485 //Post output data.
cc096464 4486 PostData(1, fCommonHistList);
4487
4488
bce887f5 4489}
4490
4491// ____________________________________________________________________________________________
4492void AliAnalysisTaskJetChem::SetProperties(TH3F* h,const char* x, const char* y, const char* z)
4493{
4494 //Set properties of histos (x,y and z title)
4495
4496 h->SetXTitle(x);
4497 h->SetYTitle(y);
4498 h->SetZTitle(z);
4499 h->GetXaxis()->SetTitleColor(1);
4500 h->GetYaxis()->SetTitleColor(1);
4501 h->GetZaxis()->SetTitleColor(1);
4502}
4503
4504
4505//________________________________________________________________________________________________________________________________________
4506Bool_t AliAnalysisTaskJetChem::AcceptBetheBloch(AliAODv0 *v0, AliPIDResponse *PIDResponse, const Int_t particletype) //dont use for MC Analysis
4507{
4508
4509 Int_t nnum = 1;
4510 Int_t pnum = 0;
4511 //---
4512 const AliAODTrack *ntracktest=(AliAODTrack *)v0->GetDaughter(nnum);
4513 if(ntracktest->Charge() > 0){nnum = 0; pnum = 1;}
4514
4515 const AliAODTrack *trackNeg=(AliAODTrack *)(v0->GetDaughter(nnum));
4516 const AliAODTrack *trackPos=(AliAODTrack *)(v0->GetDaughter(pnum));
4517
4518 //Check if both tracks are available
4519 if (!trackPos || !trackNeg) {
4520 Printf("strange analysis::UserExec:: Error:Could not retrieve one of the daughter tracks\n");
4521 return kFALSE;
4522 }
4523
4524 //remove like sign V0s
4525 if ( trackPos->Charge() == trackNeg->Charge() ){
4526 //if(fDebug>1) Printf("%s:%d found like-sign V0", (char*)__FILE__,__LINE__);
4527 return kFALSE;
4528 }
4529 //--
4530
4531 Double_t nsig_p = 0; //number of sigmas that positive daughter track has got in TPC pid information
4532 Double_t nsig_n = 0;
4533
4534 const AliAODPid *pid_p=trackPos->GetDetPid(); // returns fDetPID, more detailed or detector specific pid information
4535 const AliAODPid *pid_n=trackNeg->GetDetPid();
4536
4537 if(!pid_p)return kFALSE;
4538 if(!pid_n)return kFALSE;
4539
4540 if (pid_p)
4541 {
4542 if(particletype == 1) //PID cut on positive charged Lambda daughters (only those with pt < 1 GeV/c)
4543 {
4544
4545 nsig_p=PIDResponse->NumberOfSigmasTPC(trackPos,AliPID::kProton);
4546 Double_t protonPt = trackPos->Pt();
4547 if ((TMath::Abs(nsig_p) >= fCutBetheBloch) && (fCutBetheBloch >0) && (protonPt < 1)) return kFALSE;
4548
4549 }
4550
4551
4552 }
4553
4554 if (pid_n)
4555 {
4556 if(particletype == 2)
4557 {
4558 nsig_n=PIDResponse->NumberOfSigmasTPC(trackNeg,AliPID::kProton);
4559 Double_t antiprotonPt = trackNeg->Pt();
4560 if ((TMath::Abs(nsig_n) >= fCutBetheBloch) && (fCutBetheBloch >0) && (antiprotonPt < 1)) return kFALSE;
4561 }
4562
4563 }
4564
4565 return kTRUE;
4566}
4567
4568//___________________________________________________________________
4569Bool_t AliAnalysisTaskJetChem::IsK0InvMass(const Double_t mass) const
4570{
4571 // K0 mass ? Use FF histo limits
4572
4573 if(fFFIMInvMMin <= mass && mass < fFFIMInvMMax) return kTRUE;
4574
4575 return kFALSE;
4576}
4577//___________________________________________________________________
4578Bool_t AliAnalysisTaskJetChem::IsLaInvMass(const Double_t mass) const
4579{
4580 // La mass ? Use FF histo limits
4581
4582
4583 if(fFFIMLaInvMMin <= mass && mass < fFFIMLaInvMMax) return kTRUE;
4584
4585 return kFALSE;
4586}
4587
4588//_____________________________________________________________________________________
4589Int_t AliAnalysisTaskJetChem::GetListOfV0s(TList *list, const Int_t type, const Int_t particletype, AliAODVertex* primVertex, AliAODEvent* aod)
4590{
4591 // fill list of V0s selected according to type
4592
4593 if(!list){
4594 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
4595 return -1;
4596 }
4597
5cca0df6 4598
4599 if(fDebug>5){std::cout<<"AliAnalysisTaskJetChem::GetListOfV0s(): type: "<<type<<" particletype: "<<particletype<<"aod: "<<aod<<std::endl;
4600 if(type==kTrackUndef){std::cout<<"AliAnalysisTaskJetChem::GetListOfV0s(): kTrackUndef!! "<<std::endl;}
4601 }
4602
4603
bce887f5 4604 if(type==kTrackUndef) return 0;
4605
4606 if(!primVertex) return 0;
4607
4608 Double_t lPrimaryVtxPosition[3];
4609 Double_t lV0Position[3];
4610 lPrimaryVtxPosition[0] = primVertex->GetX();
4611 lPrimaryVtxPosition[1] = primVertex->GetY();
4612 lPrimaryVtxPosition[2] = primVertex->GetZ();
4613
5cca0df6 4614 if(fDebug>5){ std::cout<<"AliAnalysisTaskJetChem::GetListOfV0s(): aod->GetNumberOfV0s: "<<aod->GetNumberOfV0s()<<std::endl; }
4615
4616
bce887f5 4617 for(int i=0; i<aod->GetNumberOfV0s(); i++){ // loop over V0s
4618
4619
4620 AliAODv0* v0 = aod->GetV0(i);
4621
4622 if(!v0)
4623 {
4624 std::cout << std::endl
4625 << "Warning in AliAnalysisTaskJetChem::GetListOfV0s:" << std::endl
4626 << "v0 = " << v0 << std::endl;
4627 continue;
4628 }
4629
4630 Bool_t isOnFly = v0->GetOnFlyStatus();
4631
4632 if(!isOnFly && (type == kOnFly || type == kOnFlyPID || type == kOnFlydEdx || type == kOnFlyPrim)) continue;
4633 if( isOnFly && (type == kOffl || type == kOfflPID || type == kOffldEdx || type == kOfflPrim)) continue;
4634
4635 Int_t motherType = -1;
4636 //Double_t v0CalcMass = 0; //mass of MC v0
4637 Double_t MCPt = 0; //pt of MC v0
4638
4639 Double_t pp[3]={0,0,0}; //3-momentum positive charged track
4640 Double_t pm[3]={0,0,0}; //3-momentum negative charged track
4641 Double_t v0mom[3]={0,0,0};
4642
4643 Double_t invM = 0;
4644 Double_t invMK0s=0;
4645 Double_t invMLa=0;
4646 Double_t invMALa=0;
4647 Double_t trackPt=0;
4648 Int_t nnum = -1;
4649 Int_t pnum = -1;
4650
4651
4652 Bool_t daughtercheck = DaughterTrackCheck(v0, nnum, pnum);
4653
4654 if(daughtercheck == kFALSE)continue;
4655
4656 const AliAODTrack *trackNeg=(AliAODTrack *)(v0->GetDaughter(nnum));
4657 const AliAODTrack *trackPos=(AliAODTrack *)(v0->GetDaughter(pnum));
4658
4659
4660 ///////////////////////////////////////////////////////////////////////////////////
4661
4662 //calculate InvMass for every V0 particle assumption (Kaon=1,Lambda=2,Antilambda=3)
4663 switch(particletype){
4664 case kK0:
4665 CalculateInvMass(v0, kK0, invM, trackPt); //function to calculate invMass with TLorentzVector class
4666 invMK0s=invM;
4667 break;
4668 case kLambda:
4669 CalculateInvMass(v0, kLambda, invM, trackPt);
4670 invMLa=invM;
4671 break;
4672 case kAntiLambda:
4673 CalculateInvMass(v0, kAntiLambda, invM, trackPt);
4674 invMALa=invM;
4675 break;
4676 default:
4677 std::cout<<"***NO VALID PARTICLETYPE***"<<std::endl;
4678 return 0;
4679 }
4680
4681
4682 /////////////////////////////////////////////////////////////
4683 //V0 and track Cuts:
5cca0df6 4684
4685
42bf8fa0 4686 if(fDebug>7){if(!(IsK0InvMass(invMK0s)) && !(IsLaInvMass(invMLa)) && !(IsLaInvMass(invMALa))){std::cout<<"AliAnalysisTaskJetChem::GetListOfV0s: invM not in selected mass window "<<std::endl;}}
5cca0df6 4687
bce887f5 4688 if(!(IsK0InvMass(invMK0s)) && !(IsLaInvMass(invMLa)) && !(IsLaInvMass(invMALa)))continue;
4689
4690 // Double_t PosEta = trackPos->AliAODTrack::Eta();//daughter track charge is sometimes wrong here, account for that!!!
4691 // Double_t NegEta = trackNeg->AliAODTrack::Eta();
4692
4693 Double_t PosEta = trackPos->Eta();//daughter track charge is sometimes wrong here, account for that!!!
4694 Double_t NegEta = trackNeg->Eta();
4695
4696 Double_t PosCharge = trackPos->Charge();
4697 Double_t NegCharge = trackNeg->Charge();
4698
4699 if((trackPos->Charge() == 1) && (trackNeg->Charge() == -1)) //Fill daughters charge into histo to check if they are symmetric distributed
4700 { fh1PosDaughterCharge->Fill(PosCharge);
4701 fh1NegDaughterCharge->Fill(NegCharge);
4702 }
4703
4704 //DistOverTotMom_in_2D___________
4705
4706 Float_t fMassK0s = TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass();
4707 Float_t fMassLambda = TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass();
4708
4709
4710 AliAODVertex* primVtx = fAOD->GetPrimaryVertex(); // get the primary vertex
4711 Double_t dPrimVtxPos[3]; // primary vertex position {x,y,z}
4712 primVtx->GetXYZ(dPrimVtxPos);
4713
4714 Float_t fPtV0 = TMath::Sqrt(v0->Pt2V0()); // transverse momentum of V0
4715 Double_t dSecVtxPos[3]; // V0 vertex position {x,y,z}
4716 v0->GetSecondaryVtx(dSecVtxPos);
4717 Double_t dDecayPath[3];
4718 for (Int_t iPos = 0; iPos < 3; iPos++)
4719 dDecayPath[iPos] = dSecVtxPos[iPos]-dPrimVtxPos[iPos]; // vector of the V0 path
4720 Float_t fDecLen2D = TMath::Sqrt(dDecayPath[0]*dDecayPath[0]+dDecayPath[1]*dDecayPath[1]); //transverse path length R
4721 Float_t fROverPt = fDecLen2D/fPtV0; // R/pT
4722
4723 Float_t fMROverPtK0s = fMassK0s*fROverPt; // m*R/pT
4724 Float_t fMROverPtLambda = fMassLambda*fROverPt; // m*R/pT
4725
4726 //___________________
df9b7345 4727 //Double_t fRap = -999;//init values
bce887f5 4728 Double_t fEta = -999;
4729 Double_t fV0cosPointAngle = -999;
4730 Double_t fV0DecayLength = v0->DecayLengthV0(lPrimaryVtxPosition);
4731
4732 Double_t fV0mom[3];
4733
4734 fV0mom[0]=v0->MomV0X();
4735 fV0mom[1]=v0->MomV0Y();
4736 fV0mom[2]=v0->MomV0Z();
4737
4738 Double_t fV0TotalMomentum = TMath::Sqrt(fV0mom[0]*fV0mom[0]+fV0mom[1]*fV0mom[1]+fV0mom[2]*fV0mom[2]);
4739 // const Double_t K0sPDGmass = 0.497614;
4740 // const Double_t LambdaPDGmass = 1.115683;
4741
4742 const Double_t K0sPDGmass = TDatabasePDG::Instance()->GetParticle(kK0Short)->Mass();
4743 const Double_t LambdaPDGmass = TDatabasePDG::Instance()->GetParticle(kLambda0)->Mass();
4744
4745 Double_t fDistOverTotMomK0s = 0;
4746 Double_t fDistOverTotMomLa = 0;
4747
4748 //calculate proper lifetime of particles in 3D (not recommended anymore)
4749
4750 if(particletype == kK0){
4751
4752 fDistOverTotMomK0s = fV0DecayLength * K0sPDGmass;
4753 fDistOverTotMomK0s /= (fV0TotalMomentum+1e-10);
4754 }
4755
4756 if((particletype == kLambda)||(particletype == kAntiLambda)){
4757
4758 fDistOverTotMomLa = fV0DecayLength * LambdaPDGmass;
4759 fDistOverTotMomLa /= (fV0TotalMomentum+1e-10);
4760 }
4761
4762 //TPC cluster (not used anymore) and TPCRefit cuts
4763
4764 //Double_t trackPosNcls = trackPos->GetTPCNcls();//Get number of clusters for positive charged tracks
4765 //Double_t trackNegNcls = trackNeg->GetTPCNcls();//Get number of clusters for negative charged tracks
4766
4767 if(fRequireTPCRefit==kTRUE){//if kTRUE: accept only if daughter track is refitted in TPC!!
4768 Bool_t isPosTPCRefit = (trackPos->AliAODTrack::IsOn(AliESDtrack::kTPCrefit));
4769 Bool_t isNegTPCRefit = (trackNeg->AliAODTrack::IsOn(AliESDtrack::kTPCrefit));
4770 if (!isPosTPCRefit)continue;
4771 if (!isNegTPCRefit)continue;
4772 }
4773
4774 if(fKinkDaughters==kFALSE){//if kFALSE: no acceptance of kink daughters
4775 AliAODVertex* ProdVtxDaughtersPos = (AliAODVertex*) (trackPos->AliAODTrack::GetProdVertex());
4776 Char_t isAcceptKinkDaughtersPos = ProdVtxDaughtersPos->GetType();
4777 if(isAcceptKinkDaughtersPos==AliAODVertex::kKink)continue;
4778
4779 AliAODVertex* ProdVtxDaughtersNeg = (AliAODVertex*) (trackNeg->AliAODTrack::GetProdVertex());
4780 Char_t isAcceptKinkDaughtersNeg = ProdVtxDaughtersNeg->GetType();
4781 if(isAcceptKinkDaughtersNeg==AliAODVertex::kKink)continue;
4782
4783 }
4784
4785 Double_t fV0Radius = -999;
4786 Double_t fDcaV0Daughters = v0->DcaV0Daughters();
4787 Double_t fDcaPosToPrimVertex = v0->DcaPosToPrimVertex();//IP of positive charged daughter
4788 Double_t fDcaNegToPrimVertex = v0->DcaNegToPrimVertex();//IP of negative charged daughter
4789 Double_t avDecayLengthK0s = 2.6844;
4790 Double_t avDecayLengthLa = 7.89;
4791
4792 //Float_t fCTauK0s = 2.6844; // [cm] c tau of K0S
4793 //Float_t fCTauLambda = 7.89; // [cm] c tau of Lambda and Antilambda
4794
4795 fV0cosPointAngle = v0->CosPointingAngle(lPrimaryVtxPosition);
4796 lV0Position[0]= v0->DecayVertexV0X();
4797 lV0Position[1]= v0->DecayVertexV0Y();
4798 lV0Position[2]= v0->DecayVertexV0Z();
4799
4800 fV0Radius = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]);
4801
df9b7345 4802 if(particletype == kK0) {//fRap = v0->RapK0Short();
bce887f5 4803 fEta = v0->PseudoRapV0();}
df9b7345 4804 if(particletype == kLambda) {//fRap = v0->RapLambda();
bce887f5 4805 fEta = v0->PseudoRapV0();}
df9b7345 4806 if(particletype == kAntiLambda) {//fRap = v0->Y(-3122);
bce887f5 4807 fEta = v0->PseudoRapV0();}
4808
4809
4810 //cut on 3D DistOverTotMom: (not used anymore)
4811 //if((particletype == kLambda)||(particletype == kAntiLambda)){if(fDistOverTotMomLa >= (fCutV0DecayMax * avDecayLengthLa)) continue;}
4812
4813 //cut on K0s applied below after all other cuts for histo fill purposes..
4814
4815 //cut on 2D DistOverTransMom: (recommended from Iouri)
4816 if((particletype == kLambda)||(particletype == kAntiLambda)){if(fMROverPtLambda > (fCutV0DecayMax * avDecayLengthLa))continue;}//fCutV0DecayMax set to 5 in AddTask macro
4817
4818 //Armenteros Podolanski Plot for K0s:////////////////////////////
4819
4820 Double_t ArmenterosAlpha=-999;
4821 Double_t ArmenterosPt=-999;
4822 Double_t PosPl;
4823 Double_t NegPl;
df9b7345 4824 //Double_t PosPt;
4825 //Double_t NegPt;
bce887f5 4826
4827 if(particletype == kK0){
4828
4829 pp[0]=v0->MomPosX();
4830 pp[1]=v0->MomPosY();
4831 pp[2]=v0->MomPosZ();
4832
4833 pm[0]=v0->MomNegX();
4834 pm[1]=v0->MomNegY();
4835 pm[2]=v0->MomNegZ();
4836
4837
4838 v0mom[0]=v0->MomV0X();
4839 v0mom[1]=v0->MomV0Y();
4840 v0mom[2]=v0->MomV0Z();
4841
4842 TVector3 v0Pos(pp[0],pp[1],pp[2]);
4843 TVector3 v0Neg(pm[0],pm[1],pm[2]);
4844 TVector3 v0totMom(v0mom[0], v0mom[1], v0mom[2]); //vector for tot v0 momentum
4845
df9b7345 4846 //PosPt = v0Pos.Perp(v0totMom); //longitudinal momentum of positive charged daughter track
bce887f5 4847 PosPl = v0Pos.Dot(v0totMom)/v0totMom.Mag(); //transversal momentum of positive charged daughter track
4848
df9b7345 4849 //NegPt = v0Neg.Perp(v0totMom); //longitudinal momentum of negative charged daughter track
bce887f5 4850 NegPl = v0Neg.Dot(v0totMom)/v0totMom.Mag(); //transversal momentum of nergative charged daughter track
4851
4852 ArmenterosAlpha = 1.-2./(1+(PosPl/NegPl));
4853 ArmenterosPt= v0->PtArmV0();
4854
4855 }
4856
4857 if(particletype == kK0){//only cut on K0s histos
4858 if(IsArmenterosSelected == 1){// Armenteros Cut to reject Lambdas contamination in K0s inv. massspectrum
4859 fh2ArmenterosBeforeCuts->Fill(ArmenterosAlpha,ArmenterosPt);
4860 }
4861 }
4862
4863 //some more cuts on v0s and daughter tracks:
4864
4865
4866 if((TMath::Abs(PosEta)>fCutPostrackEta) || (TMath::Abs(NegEta)>fCutNegtrackEta))continue; //Daughters pseudorapidity cut
4867 if (fV0cosPointAngle < fCutV0cosPointAngle) continue; //cospointangle cut
4868
4869 //if(TMath::Abs(fRap) > fCutRap)continue; //V0 Rapidity Cut
4870 if(TMath::Abs(fEta) > fCutEta) continue; //V0 Eta Cut
4871 if (fDcaV0Daughters > fCutDcaV0Daughters)continue;
4872 if ((fDcaPosToPrimVertex < fCutDcaPosToPrimVertex) || (fDcaNegToPrimVertex < fCutDcaNegToPrimVertex))continue;
4873 if ((fV0Radius < fCutV0RadiusMin) || (fV0Radius > fCutV0RadiusMax))continue;
4874
4875 const AliAODPid *pid_p1=trackPos->GetDetPid();
4876 const AliAODPid *pid_n1=trackNeg->GetDetPid();
4877
4878
4879 if(particletype == kLambda){
4880 // if(AcceptBetheBloch(v0, fPIDResponse, 1) == kFALSE){std::cout<<"******PID cut rejects Lambda!!!************"<<std::endl;}
4881 if(AcceptBetheBloch(v0, fPIDResponse, 1) == kFALSE)continue;
4882 fh2BBLaPos->Fill(pid_p1->GetTPCmomentum(),pid_p1->GetTPCsignal());//positive lambda daughter
4883 fh2BBLaNeg->Fill(pid_n1->GetTPCmomentum(),pid_n1->GetTPCsignal());//negative lambda daughter
4884
4885 //Double_t phi = v0->Phi();
4886 //Double_t massLa = v0->MassLambda();
4887
4888 //printf("La: i = %d, m = %f, pT = %f, eta = %f, phi = %f\n, ",i,massLa,trackPt,fEta,phi);
4889
4890 }
4891
4892 if(particletype == kAntiLambda){
4893
4894 if(AcceptBetheBloch(v0, fPIDResponse, 2) == kFALSE)continue;
4895 fh2BBLaPos->Fill(pid_p1->GetTPCmomentum(),pid_p1->GetTPCsignal());//positive antilambda daughter
4896 fh2BBLaNeg->Fill(pid_n1->GetTPCmomentum(),pid_n1->GetTPCsignal());//negative antilambda daughter
4897
4898 }
4899
4900
4901 //Armenteros cut on K0s:
4902 if(particletype == kK0){
4903 if(IsArmenterosSelected == 1){// Armenteros Cut to reject Lambdas contamination in K0s inv. massspectrum
4904
4905 if((ArmenterosPt<=(TMath::Abs(fCutArmenteros*ArmenterosAlpha))) && (fCutArmenteros!=-999))continue; //Cuts out Lambda contamination in K0s histos
4906 fh2ArmenterosAfterCuts->Fill(ArmenterosAlpha,ArmenterosPt);
4907 }
4908 }
4909
4910 //not used anymore in 3D, z component of total momentum has bad resolution, cut instead in 2D and use pT
4911 //Proper Lifetime Cut: DecayLength3D * PDGmass / |p_tot| < 3*2.68cm (ctau(betagamma=1)) ; |p|/mass = beta*gamma
4912 //////////////////////////////////////////////
4913
bce887f5 4914
4915//cut on 2D DistOverTransMom
4916 if(particletype == kK0){//the cut on Lambdas you can find above
4917
4918 fh2ProperLifetimeK0sVsPtBeforeCut->Fill(trackPt,fMROverPtK0s); //fill these histos after all other cuts
bce887f5 4919 if(fMROverPtK0s > (fCutV0DecayMax * avDecayLengthK0s))continue;
bce887f5 4920 fh2ProperLifetimeK0sVsPtAfterCut->Fill(trackPt,fMROverPtK0s);
4921
4922 //Double_t phi = v0->Phi();
4923 // Double_t massK0s = v0->MassK0Short();
4924 //printf("K0S: i = %d, m = %f, pT = %f, eta = %f, phi = %f\n",i,invMK0s,trackPt,fEta,phi);
4925
4926 //test std::cout<<" Index accepted K0s candidate in list of V0s in event: "<<i<<" m: "<<invMK0s<<" pT: "<<trackPt<<" eta: "<<fEta<<" phi: "<<v0->Phi()<<std::endl;
4927
4928 }
4929 //MC Associated V0 particles: (reconstructed particles associated with MC truth (MC truth: true primary MC generated particle))
4930
4931
4932 if(fAnalysisMC){// begin MC part
4933
4934 Int_t negDaughterpdg = 0;
4935 Int_t posDaughterpdg = 0;
4936 Int_t v0Label = -1;
4937 Bool_t fPhysicalPrimary = -1; //v0 physical primary check
4938 Int_t MCv0PdgCode = 0;
4939 Bool_t mclabelcheck = kFALSE;
4940
4941 TList *listmc = aod->GetList(); //AliAODEvent* is inherited from AliVEvent*, listmc is pointer to reconstructed event in MC list, member of AliAODEvent
4942
4943 if(!listmc)continue;
4944
4945 if((particletype == kLambda) || (particletype == kAntiLambda)){// at this point the v0 candidates already survived all V0 cuts, for the MC analysis they still have to survive the association checks in the following block
4946
4947 //feeddown-correction for Lambda/Antilambda particles
4948 //feedddown comes mainly from charged and neutral Xi particles
4949 //feeddown from Sigma decays so quickly that it's not possible to distinguish from primary Lambdas with detector
4950 //feeddown for K0s from phi decays is neglectible
4951 //TH2F* fh2FeedDownMatrix = 0x0; //histo for feeddown already decleared above
4952
4953
4954 //first for all Lambda and Antilambda candidates____________________________________________________________________
df9b7345 4955 TString generatorName;
4956 Bool_t isinjected;
bce887f5 4957 if(particletype == kLambda){
4958
df9b7345 4959 mclabelcheck = MCLabelCheck(v0, kLambda, trackNeg, trackPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PdgCode, generatorName, isinjected);
bce887f5 4960
4961
4962 if((motherType == 3312)||(motherType == 3322)){//mother of v0 is neutral or negative Xi
6ec586c1 4963
bce887f5 4964 fListFeeddownLaCand->Add(v0); //fill TList with ass. particles, stemming from feeddown from Xi(bar) decays
4965 }
4966 }
6ec586c1 4967
bce887f5 4968 if(particletype == kAntiLambda){
df9b7345 4969
4970 mclabelcheck = MCLabelCheck(v0, kAntiLambda, trackNeg, trackPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PdgCode, generatorName, isinjected);
bce887f5 4971
4972 if((motherType == -3312)||(motherType == -3322)){
4973 fListFeeddownALaCand->Add(v0); //fill TList with ass. particles, stemming from feeddown from Xi(bar) decays
4974 }
4975 }
4976 }
df9b7345 4977
bce887f5 4978
4979 //_only true primary particles survive the following checks_______________________________________________________________________________________________
df9b7345 4980 TString generatorName;
4981 Bool_t isinjected;
bce887f5 4982 if(particletype == kK0){
df9b7345 4983
4984 mclabelcheck = MCLabelCheck(v0, kK0, trackNeg, trackPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PdgCode, generatorName, isinjected);
6ec586c1 4985 if(mclabelcheck == kFALSE)continue;
bce887f5 4986 }
4987 if(particletype == kLambda){
df9b7345 4988
4989 mclabelcheck = MCLabelCheck(v0, kLambda, trackNeg, trackPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PdgCode, generatorName, isinjected);
6ec586c1 4990 if(mclabelcheck == kFALSE)continue;
bce887f5 4991 }
4992 if(particletype == kAntiLambda){
df9b7345 4993
4994 mclabelcheck = MCLabelCheck(v0, kAntiLambda, trackNeg, trackPos, listmc, negDaughterpdg, posDaughterpdg, motherType, v0Label, MCPt, fPhysicalPrimary, MCv0PdgCode, generatorName, isinjected);
6ec586c1 4995 if(mclabelcheck == kFALSE)continue;
bce887f5 4996 }
4997
4998 if(fPhysicalPrimary != 1)continue; //V0 candidate (K0s, Lambda or Antilambda) must be physical primary, this means there is no mother particle existing
4999
5000 }
5001
5002
5003 list->Add(v0);
5004
5005 }
5006
5007 Int_t nPart=list->GetSize();
5008
5009 return nPart;
5010} // end GetListOfV0s()
5011
5012// -------------------------------------------------------------------------------------------------------
5013
5014void AliAnalysisTaskJetChem::CalculateInvMass(AliAODv0* v0vtx, const Int_t particletype, Double_t& invM, Double_t& trackPt){
5015
5016 //particletype:
5017 // * kaon = 1
5018 // * lambda = 2
5019 // * antilambda = 3
5020
5021 invM = 0;
5022 trackPt = 0;
5023
5024 Double_t pp[3]={0,0,0}; //3-momentum positive charged track
5025 Double_t pm[3]={0,0,0}; //3-momentum negative charged track
5026
5027 const Double_t massPi = 0.13957018; //better use PDG code at this point
5028 const Double_t massP = 0.93827203;
5029
5030 Double_t mass1=0;
5031 Double_t mass2=0;
5032
5033 TLorentzVector vector; //lorentzvector V0 particle
5034 TLorentzVector fourmom1;//lorentzvector positive daughter
5035 TLorentzVector fourmom2;//lorentzvector negative daughter
5036
5037 //--------------------------------------------------------------
5038
5039 AliAODTrack *trackPos = (AliAODTrack *) (v0vtx->GetSecondaryVtx()->GetDaughter(0));//index 0 defined as positive charged track in AliESDFilter
5040
5041 if( trackPos->Charge() == 1 ){
5042
5043 pp[0]=v0vtx->MomPosX();
5044 pp[1]=v0vtx->MomPosY();
5045 pp[2]=v0vtx->MomPosZ();
5046
5047 pm[0]=v0vtx->MomNegX();
5048 pm[1]=v0vtx->MomNegY();
5049 pm[2]=v0vtx->MomNegZ();
5050 }
5051
5052 if( trackPos->Charge() == -1 ){
5053
5054 pm[0]=v0vtx->MomPosX();
5055 pm[1]=v0vtx->MomPosY();
5056 pm[2]=v0vtx->MomPosZ();
5057
5058 pp[0]=v0vtx->MomNegX();
5059 pp[1]=v0vtx->MomNegY();
5060 pp[2]=v0vtx->MomNegZ();
5061 }
5062
5063 if (particletype == kK0){ // case K0s
5064 mass1 = massPi;//positive particle
5065 mass2 = massPi;//negative particle
5066 } else if (particletype == kLambda){ // case Lambda
5067 mass1 = massP;//positive particle
5068 mass2 = massPi;//negative particle
5069 } else if (particletype == kAntiLambda){ //case AntiLambda
5070 mass1 = massPi;//positive particle
5071 mass2 = massP; //negative particle
5072 }
5073
5074 fourmom1.SetXYZM(pp[0],pp[1],pp[2],mass1);//positive track
5075 fourmom2.SetXYZM(pm[0],pm[1],pm[2],mass2);//negative track
5076 vector=fourmom1 + fourmom2;
5077
5078 invM = vector.M();
5079 trackPt = vector.Pt();
5080
5081 /*// don't apply AliAODv0 methods to get the inv. mass for the OnFly finder, since the daughter labels are sometimes switched!!!! For Offline V0 finder no problem
5082
5083 if(particletype == kK0){
5084 std::cout << "invMK0s: " << invM <<std::endl;
5085 std::cout << "v0vtx->MassK0Short(): " << v0vtx->MassK0Short() << std::endl;
5086 std::cout << " " <<std::endl;
5087 //invM = v0vtx->MassK0Short();
5088 }
5089
5090 if(particletype == kLambda){
5091 std::cout << "invMLambda: " << invM <<std::endl;
5092 std::cout << "v0vtx->MassMassLambda(): " << v0vtx->MassLambda() << std::endl;
5093 std::cout << " " <<std::endl;
5094 //invM = v0vtx->MassLambda();
5095 }
5096
5097 if(particletype == kAntiLambda){
5098 std::cout << "invMAntiLambda: " << invM <<std::endl;
5099 std::cout << "v0vtx->MassAntiLambda(): " << v0vtx->MassAntiLambda() << std::endl;
5100 std::cout << " " <<std::endl;
5101 //invM = v0vtx->MassAntiLambda();
5102 }
5103 */
5104
5105 return;
5106}
9b2de807 5107
9b2de807 5108
bce887f5 5109//_____________________________________________________________________________________
5110Int_t AliAnalysisTaskJetChem::GetListOfMCParticles(TList *outputlist, const Int_t particletype, AliAODEvent *mcaodevent) //(list to fill here e.g. fListMCgenK0s, particle species to search for)
5111{
5112
5113 outputlist->Clear();
5114
5115 TClonesArray *stack = 0x0;
5116 Double_t mcXv=0., mcYv=0., mcZv=0.;//MC vertex position
5117 Int_t ntrk =0;
5118
5119 // get MC generated particles
5120
5121 Int_t fPdgcodeCurrentPart = 0; //pdg code current particle
df9b7345 5122 //Double_t fRapCurrentPart = 0; //get rapidity
5123 //Double_t fPtCurrentPart = 0; //get transverse momentum
bce887f5 5124 Double_t fEtaCurrentPart = 0; //get pseudorapidity
5125
5126 //variable for check: physical primary particle
5127 //Bool_t IsPhysicalPrimary = -1;
5128 //Int_t index = 0; //check number of injected particles
5129 //****************************
5130 // Start loop over MC particles
f98082ec 5131
bce887f5 5132 TList *lst = mcaodevent->GetList();
5133
5134 if(!lst){
5135 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
5136 return -1;
5137 }
5138
5139 stack = (TClonesArray*)lst->FindObject(AliAODMCParticle::StdBranchName());
5140 if (!stack) {
5141 Printf("ERROR: stack not available");
5142 return -1;
5143 }
5144
5145 AliAODMCHeader *mcHdr=(AliAODMCHeader*)lst->FindObject(AliAODMCHeader::StdBranchName());
5146 if(!mcHdr)return -1;
9b2de807 5147
bce887f5 5148 mcXv=mcHdr->GetVtxX(); mcYv=mcHdr->GetVtxY(); mcZv=mcHdr->GetVtxZ(); // position of the MC primary vertex
5149
5150
5151 ntrk=stack->GetEntriesFast();
5152
5153 //if(TMath::Abs(mcZv)>10)return; //i also cut at the reconstructed particles - here i also want to cut for a second time on z vertex (?) -> could be possible bias because of resolution effects on edges of acceptance, also the case for pseudorapidity...
5154
5155
5156 for (Int_t iMc = 0; iMc < ntrk; iMc++) { //loop over mc generated particles
5157
5158
5159 AliAODMCParticle *p0=(AliAODMCParticle*)stack->UncheckedAt(iMc);
5160 if (!p0) {
5161 //Printf("ERROR: particle with label %d not found in stack (mc loop)", iMc);
5162 continue;
5163 }
5164 fPdgcodeCurrentPart = p0->GetPdgCode();
5165
5166 // Keep only K0s, Lambda and AntiLambda, Xi and Phi:
5167 //if ( (fPdgcodeCurrentPart != 310 ) && (fPdgcodeCurrentPart != 3122 ) && (fPdgcodeCurrentPart != -3122 ) && (fPdgcodeCurrentPart != 3312 ) && (fPdgcodeCurrentPart != -3312) && (fPdgcodeCurrentPart != -333) ) continue;
5168
5169
5170
5171 //Rejection of Pythia injected particles with David Chinellatos method - not the latest method, better Method with TString from MC generator in IsInjected() function below!
5172
5173 /* if( (p0->GetStatus()==21) ||
5174 ((p0->GetPdgCode() == 443) &&
5175 (p0->GetMother() == -1) &&
5176 (p0->GetDaughter(0) == (iMc))) ){ index++; }
5177
5178 if(p0->GetStatus()==21){std::cout<< "hello !!!!" <<std::endl;}
5179
5180 std::cout<< "MC particle status: " << p0->GetStatus() <<std::endl;
5181 */
5182
5183
5184 //if(index>=1){std::cout<< "MC particle status: " << p0->GetStatus() <<std::endl;}//if first injected MC particle was found, the Status is printed out for this and every following MC particle
96c271c1 5185
bce887f5 5186
5187 //injected particles could be from GenBox (single high pt tracks) or jet related tracks, both generated from PYTHIA MC generator
5188
5189 //Check: MC particle mother
5190
5191 //for feed-down checks
5192 /* //MC gen particles
5193 Int_t iMother = p0->GetMother(); //Motherparticle of V0 candidate (e.g. phi particle,..)
5194 if(iMother >= 0){
5195 AliAODMCParticle *partM = (AliAODMCParticle*)stack->UncheckedAt(iMother);
5196 Int_t codeM = -1;
5197 if(partM) codeM = TMath::Abs(partM->GetPdgCode());
5198
5199
5200 3312 Xi- -3312 Xibar+
5201 3322 Xi0 -3322 Xibar0
96c271c1 5202
9b2de807 5203
bce887f5 5204 if((codeM == 3312)||(codeM == 3322))// feeddown for Lambda coming from Xi- and Xi0
9b2de807 5205
6daac008 5206
9b2de807 5207
bce887f5 5208 }
5209 */
5210 /* //Check: MC gen. particle decays via 2-pion decay? -> only to be done for the rec. particles !! (-> branching ratio ~ 70 % for K0s -> pi+ pi-)
5211
5212 Int_t daughter0Label = p0->GetDaughter(0);
5213 AliAODMCParticle *mcDaughter0 = (AliAODMCParticle *)stack->UncheckedAt(daughter0Label);
5214 if(daughter0Label >= 0)
5215 {daughter0Type = mcDaughter0->GetPdgCode();}
5216
5217 Int_t daughter1Label = p0->GetDaughter(1);
5218 AliAODMCParticle *mcDaughter1 = (AliAODMCParticle *)stack->UncheckedAt(daughter1Label);
96c271c1 5219
bce887f5 5220 if(daughter1Label >= 1)
5221 {daughter1Type = mcDaughter1->GetPdgCode();} //requirement that daughters are pions is only done for the reconstructed V0s in GetListofV0s() below
5222 }
5223 */
5224
9b2de807 5225
bce887f5 5226 // Keep only K0s, Lambda and AntiLambda:
5227 if ( (fPdgcodeCurrentPart != 310 ) && (fPdgcodeCurrentPart != 3122 ) && (fPdgcodeCurrentPart != -3122 )) continue;
5228 // Check: Is physical primary
5229
5230 //do not use anymore: //IsPhysicalPrimary = p0->IsPhysicalPrimary();
5231 //if(!IsPhysicalPrimary)continue;
6daac008 5232
bce887f5 5233 Float_t fDistPrimaryMax = 0.01; // [cm] max distance of production point to the primary vertex (criterion for choice of MC particles considered as primary)
6daac008 5234
bce887f5 5235 // Get the distance between production point of the MC mother particle and the primary vertex
5236
5237 Double_t dx = mcXv-p0->Xv();//mc primary vertex - mc gen. v0 vertex
5238 Double_t dy = mcYv-p0->Yv();
5239 Double_t dz = mcZv-p0->Zv();
6daac008 5240
bce887f5 5241 Double_t fDistPrimary = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
5242 Bool_t fPhysicalPrimary = (fDistPrimary < fDistPrimaryMax);
96c271c1 5243
bce887f5 5244 if(!fPhysicalPrimary)continue;
9b2de807 5245
bce887f5 5246 //if(fPhysicalPrimary){std::cout<<"hello**********************"<<std::endl;}
5247
5248 /* std::cout<<"dx: "<<dx<<std::endl;
5249 std::cout<<"dy: "<<dy<<std::endl;
5250 std::cout<<"dz: "<<dz<<std::endl;
5251
5252 std::cout<<"start: "<<std::endl;
5253 std::cout<<"mcXv: "<<mcXv<<std::endl;
5254 std::cout<<"mcYv: "<<mcYv<<std::endl;
5255 std::cout<<"mcZv: "<<mcZv<<std::endl;
5256
5257 std::cout<<"p0->Xv(): "<<p0->Xv()<<std::endl;
5258 std::cout<<"p0->Yv(): "<<p0->Yv()<<std::endl;
5259 std::cout<<"p0->Zv(): "<<p0->Zv()<<std::endl;
5260 std::cout<<" "<<std::endl;
5261 std::cout<<"fDistPrimary"<<fDistPrimary<<std::endl;
5262 std::cout<<"fPhysicalPrimary"<<fPhysicalPrimary<<std::endl;
5263 */
5264
5265 //Is close enough to primary vertex to be considered as primary-like?
5266
df9b7345 5267 //fRapCurrentPart = MyRapidity(p0->E(),p0->Pz());
bce887f5 5268 fEtaCurrentPart = p0->Eta();
df9b7345 5269 //fPtCurrentPart = p0->Pt();
bce887f5 5270
5271 if (TMath::Abs(fEtaCurrentPart) < fCutEta){
5272 // if (TMath::Abs(fRapCurrentPart) > fCutRap)continue; //rap cut for crosschecks
96c271c1 5273
bce887f5 5274 if(particletype == kK0){ //MC gen. K0s
5275 if (fPdgcodeCurrentPart==310){
5276 outputlist->Add(p0);
5277 }
5278 }
5279
5280 if(particletype == kLambda){ //MC gen. Lambdas
5281 if (fPdgcodeCurrentPart==3122) {
5282 outputlist->Add(p0);
96c271c1 5283 }
bce887f5 5284 }
5285
5286 if(particletype == kAntiLambda){
5287 if (fPdgcodeCurrentPart==-3122) { //MC gen. Antilambdas
5288 outputlist->Add(p0);
9b2de807 5289 }
9b2de807 5290 }
9b2de807 5291 }
9b2de807 5292
bce887f5 5293 }//end loop over MC generated particle
5294
5295 Int_t nMCPart=outputlist->GetSize();
5296
9b2de807 5297
bce887f5 5298 return nMCPart;
5299
9b2de807 5300}
5301
bce887f5 5302//---------------------------------------------------------------------------
5303/*
5304Bool_t AliAnalysisTaskJetChem::FillFeeddownMatrix(TList* fListFeeddownCand, Int_t particletype)
9b2de807 5305{
96c271c1 5306
bce887f5 5307 // Define Feeddown matrix
5308 Double_t lFeedDownMatrix [100][100];
5309 // FeedDownMatrix [Lambda Bin][Xi Bin];
5310
5311 //Initialize entries of matrix:
5312 for(Int_t ilb = 0; ilb<100; ilb++){
5313 for(Int_t ixb = 0; ixb<100; ixb++){
5314 lFeedDownMatrix[ilb][ixb]=0; //first lambda bins, xi bins
5315 }
5316 }
9b2de807 5317}
bce887f5 5318*/
5319//----------------------------------------------------------------------------
9b2de807 5320
bce887f5 5321Double_t AliAnalysisTaskJetChem::MyRapidity(Double_t rE, Double_t rPz) const
5322{
5323 // Local calculation for rapidity
5324 return 0.5*TMath::Log((rE+rPz)/(rE-rPz+1.e-13));
5325}
5326//----------------------------------------------------------------------------
9b2de807 5327
9b2de807 5328
bce887f5 5329void AliAnalysisTaskJetChem::GetTracksInCone(TList* inputlist, TList* outputlist, const AliAODJet* jet,
5330 const Double_t radius, Double_t& sumPt, const Double_t minPt, const Double_t maxPt, Bool_t& isBadPt)
5331{
dde76689 5332 // fill list of V0 tracks in cone around jet axis
9b2de807 5333
bce887f5 5334 sumPt = 0;
5335 Bool_t isBadMaxPt = kFALSE;
5336 Bool_t isBadMinPt = kTRUE;
9b2de807 5337
bce887f5 5338 Double_t jetMom[3];
5339 if(!jet)return;
5340 jet->PxPyPz(jetMom);
5341 TVector3 jet3mom(jetMom);
9b2de807 5342
a6ffe507 5343 //if(jetets < jetetscutr)continue;
5344
dde76689 5345 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){//loop over all K0s found in event
96c271c1 5346
bce887f5 5347 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
5348 if(!track)continue;
5349 Double_t trackMom[3];
5350 track->PxPyPz(trackMom);
5351 TVector3 track3mom(trackMom);
5352
5353 Double_t dR = jet3mom.DeltaR(track3mom);
5354
dde76689 5355 if(dR<radius){//fill all the V0s inside cone into outputlist, radius is reutrn value of GetFFRadius()
bce887f5 5356
5357 outputlist->Add(track);
5358
5359 sumPt += track->Pt();
5360
5361 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE; // reject jets containing any track with pt larger than this value, use GetFFMaxTrackPt()
5362 if(minPt>0 && track->Pt()>minPt) isBadMinPt = kFALSE; // reject jets with leading track with pt smaller than this value, use GetFFMinLTrackPt()
5363
5364 }
5365 }
5366
5367 isBadPt = kFALSE;
5368 if(minPt>0 && isBadMinPt) isBadPt = kTRUE; //either the jet is bad because of too small leading track pt.. (probability to be purely combinatorial jet is too high to accept it)
5369 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE; //..or because of leading track with too high pt (could be fake track)
5370
5371 outputlist->Sort();
5372
96c271c1 5373}
9b2de807 5374
bce887f5 5375//____________________________________________________________________________________________________________________
5376
5377
5378void AliAnalysisTaskJetChem::GetTracksInPerpCone(TList* inputlist, TList* outputlist, const AliAODJet* jet,
5379 const Double_t radius, Double_t& sumPerpPt)
96c271c1 5380{
bce887f5 5381 // fill list of tracks in two cones around jet axis rotated in phi +/- 90 degrees
5382
6ec586c1 5383 Double_t jetMom[3]; //array for entries in TVector3
bce887f5 5384 Double_t perpjetplusMom[3]; //array for entries in TVector3
5385 Double_t perpjetnegMom[3];
5386
5387 if(!jet)return;
9280dfa6 5388
bce887f5 5389 jet->PxPyPz(jetMom); //get 3D jet momentum
5390 Double_t jetPerpPt = jet->Pt(); //original jet pt, invariant under rotations
5391 Double_t jetPhi = jet->Phi(); //original jet phi
9b2de807 5392
bce887f5 5393 Double_t jetPerpposPhi = jetPhi + ((TMath::Pi())*0.5);//get new perp. jet axis phi clockwise
5394 Double_t jetPerpnegPhi = jetPhi - ((TMath::Pi())*0.5);//get new perp. jet axis phi counterclockwise
9b2de807 5395
bce887f5 5396 TVector3 jet3mom(jetMom); //3-Vector for original rec. jet axis
5397
6ec586c1 5398 //Double_t phitest = jet3mom.Phi();
5399
5400 perpjetplusMom[0]=(TMath::Cos(jetPerpposPhi)*jetPerpPt); //x coordinate (sidewards - when looking in beam direction)
5401 perpjetplusMom[1]=(TMath::Sin(jetPerpposPhi)*jetPerpPt); //y coordinate (upwards - when looking in beam direction)
bce887f5 5402 perpjetplusMom[2]=jetMom[2]; //z coordinate (along beam axis), invariant under azimuthal rotation
6ec586c1 5403
5404 perpjetnegMom[0]=(TMath::Cos(jetPerpnegPhi)*jetPerpPt); //x coordinate (sidewards - when looking in beam direction)
5405 perpjetnegMom[1]=(TMath::Sin(jetPerpnegPhi)*jetPerpPt); //y coordinate (upwards - when looking in beam direction)
5406 perpjetnegMom[2]=jetMom[2]; //z coordinate (along beam axis), invariant under azimuthal rotation
5407
5408
bce887f5 5409 TVector3 perpjetplus3mom(perpjetplusMom); //3-Vector for new perp. jet axis, clockwise rotated
5410 TVector3 perpjetneg3mom(perpjetnegMom); //3-Vector for new perp. jet axis, counterclockwise rotated
6ec586c1 5411
5412 //for crosscheck TVector3 rotation method
5413
5414 //Double_t jetMomplusTest[3];
5415 //Double_t jetMomminusTest[3];
5416
5417 //jet3mom.RotateZ(TMath::Pi()*0.5);//rotate original jet axis around +90 degrees in phi
5418
5419 //perpjetminus3momTest = jet3mom.RotateZ((-1)*TMath::Pi()*0.5);
5420
5421 // jet3mom.RotateZ(TMath::Pi()*0.5);
5422 // jet3mom.RotateZ((-1)*TMath::Pi()*0.5);
5423
5424 //jetMomplusTest[0] = jet3mom.X(); //fetching perp. axis coordinates
5425 //jetMomplusTest[1] = jet3mom.Y();
5426 //jetMomplusTest[2] = jet3mom.Z();
5427
5428 //TVector3 perpjetplus3momTest(jetMomplusTest); //new TVector3 for +90deg rotated jet axis with rotation method from ROOT
5429 //TVector3 perpjetminus3momTest(jetMomminusTest); //new TVector3 for -90deg rotated jet axis with rotation method from ROOT
5430
9b2de807 5431
bce887f5 5432 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){ //collect V0 content in perp cone, rotated clockwise
5433
5434 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack)); //inputlist is fListK0s, all reconstructed K0s in event
5435 if(!track){std::cout<<"K0s track not found!!!"<<std::endl; continue;}
5436
5437 Double_t trackMom[3];//3-mom of V0 particle
5438 track->PxPyPz(trackMom);
5439 TVector3 track3mom(trackMom);
656457c9 5440
bce887f5 5441 Double_t dR = perpjetplus3mom.DeltaR(track3mom);
656457c9 5442
bce887f5 5443 if(dR<radius){
656457c9 5444
bce887f5 5445 outputlist->Add(track); // output list is jetPerpConeK0list
96c271c1 5446
bce887f5 5447 sumPerpPt += track->Pt();
5448
9280dfa6 5449
96c271c1 5450 }
bce887f5 5451 }
9b2de807 5452
9b2de807 5453
bce887f5 5454 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){//collect V0 content in perp cone, rotated counterclockwise
9b2de807 5455
bce887f5 5456 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack)); //inputlist is fListK0s, all reconstructed K0s in event
5457 if(!track){std::cout<<"K0s track not found!!!"<<std::endl; continue;}
9b2de807 5458
bce887f5 5459 Double_t trackMom[3];//3-mom of V0 particle
5460 track->PxPyPz(trackMom);
5461 TVector3 track3mom(trackMom);
fb72ed5f 5462
bce887f5 5463 Double_t dR = perpjetneg3mom.DeltaR(track3mom);
5464
5465 if(dR<radius){
5466
5467 outputlist->Add(track); // output list is jetPerpConeK0list
96c271c1 5468
bce887f5 5469 sumPerpPt += track->Pt();
5470
5471
5472 }
5473 }
5474
5475 // pay attention: this list contains the double amount of V0s, found in both cones
5476 // before using it, devide spectra by 2!!!
5477 sumPerpPt = sumPerpPt*0.5; //correct to do this?
5478
5479
5480 outputlist->Sort();
5481
5482}
5483
5484
5485// _______________________________________________________________________________________________________________________________________________________
5486
df9b7345 5487Bool_t AliAnalysisTaskJetChem::MCLabelCheck(AliAODv0* v0, Int_t particletype,const AliAODTrack* trackNeg, const AliAODTrack* trackPos, TList *listmc, Int_t& negDaughterpdg, Int_t& posDaughterpdg, Int_t& motherType, Int_t& v0Label, Double_t& MCPt, Bool_t& fPhysicalPrimary, Int_t& MCv0PDGCode, TString& generatorName, Bool_t& isinjected){
5488
5489 if(!v0)return kFALSE;
5490
bce887f5 5491 TClonesArray *stackmc = 0x0;
5492 stackmc = (TClonesArray*)listmc->FindObject(AliAODMCParticle::StdBranchName()); //get MCAOD branch in data
5493 if (!stackmc)
5494 {
5495 Printf("ERROR: stack not available");
5496 return kFALSE;
5497 }
5498 else
5499 {
5500 Int_t negAssLabel = TMath::Abs(trackNeg->GetLabel()); //negative (reconstructed) charged track label in MC stack
5501 Int_t posAssLabel = TMath::Abs(trackPos->GetLabel()); //positive (reconstructed) charged track label in MC stack
96c271c1 5502
bce887f5 5503 //injected particle checks
5504
5505 Double_t mcXv = 0;
5506 Double_t mcYv = 0;
5507 Double_t mcZv = 0;
96c271c1 5508
bce887f5 5509 AliAODMCHeader *header=(AliAODMCHeader*)listmc->FindObject(AliAODMCHeader::StdBranchName());
5510 if(!header)return kFALSE;
5511
5512 mcXv=header->GetVtxX(); mcYv=header->GetVtxY(); mcZv=header->GetVtxZ();
5513
df9b7345 5514
bce887f5 5515
5516 //mc label checks
5517
5518 if(negAssLabel>=0 && negAssLabel < stackmc->GetEntriesFast() && posAssLabel>=0 && posAssLabel < stackmc->GetEntriesFast()){//safety check if label has valid value of stack
5519
5520 AliAODMCParticle *mcNegPart =(AliAODMCParticle*)stackmc->UncheckedAt(negAssLabel);//fetch the, with one MC truth track associated (reconstructed), negative charged track
6ec586c1 5521 v0Label = mcNegPart->GetMother();// mother of negative charged particle is v0, get v0 label here
bce887f5 5522 negDaughterpdg = mcNegPart->GetPdgCode();
5523 AliAODMCParticle *mcPosPart =(AliAODMCParticle*)stackmc->UncheckedAt(posAssLabel);//fetch the, with one MC truth track associated (reconstructed), positive charged track
5524 Int_t v0PosLabel = mcPosPart->GetMother(); //get mother label of positive charged track label
5525 posDaughterpdg = mcPosPart->GetPdgCode();
5526
5527 if(v0Label >= 0 && v0Label < stackmc->GetEntriesFast() && v0Label == v0PosLabel){//first v0 mc label check, then: check if both daughters are stemming from same particle
5528
5529 AliAODMCParticle *mcv0 = (AliAODMCParticle *)stackmc->UncheckedAt(v0Label); //fetch MC ass. particle to v0 (mother of the both charged daughter tracks)
bce887f5 5530
5531 Float_t fDistPrimaryMax = 0.01; // [cm] max distance of production point to the primary vertex (criterion for choice of MC particles considered as primary)
5532
5533 // Get the distance between production point of the MC mother particle and the primary vertex
5534
5535 Double_t dx = mcXv-mcv0->Xv();//mc primary vertex - mc particle production vertex
5536 Double_t dy = mcYv-mcv0->Yv();
5537 Double_t dz = mcZv-mcv0->Zv();
5538
5539 Float_t fDistPrimary = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
5540 fPhysicalPrimary = kFALSE;//init
5541
5542 fPhysicalPrimary = (fDistPrimary < fDistPrimaryMax);
bce887f5 5543 MCv0PDGCode = mcv0->GetPdgCode();
df9b7345 5544
5545 //if(fPhysicalPrimary == kTRUE){//look only at physical primary particles
5546
a6ee5cab 5547 isinjected = IsTrackInjected(v0Label, header, stackmc, generatorName);
df9b7345 5548
5549 //trackinjected is kFALSE if it is either Hijing or has no generator name
5550 // std::cout<<" "<<std::endl;
5551 // std::cout<<"#### next particle: ####"<<std::endl;
5552 //std::cout<<"Is track injected: "<< trackinjected <<std::endl;
5553 // std::cout<<"pdg code: "<<MCv0PDGCode<<std::endl;
5554 // std::cout<<"v0Label: "<<v0Label<<std::endl;
5555
bce887f5 5556 MCPt = mcv0->Pt();//for MC data, always use MC gen. pt for any pt distributions, also for the spectra, used for normalisation
5557 //for feed-down checks later
5558
5559 Int_t motherLabel = mcv0->GetMother(); //get mother particle label of v0 particle
5560 // std::cout<<"motherLabel: "<<motherLabel<<std::endl;
5561
5562 if(motherLabel >= 0 && v0Label < stackmc->GetEntriesFast()) //do safety check for mother label
5563 {
5564 AliAODMCParticle *mcMother = (AliAODMCParticle *)stackmc->UncheckedAt(motherLabel); //get mother particle
5565 motherType = mcMother->GetPdgCode(); //get PDG code of mother
5566
5567 Double_t XiPt = 0.;
5568 Double_t XibarPt = 0.;
5569
5570 if(particletype == kLambda){
5571 if((motherType == 3312)||(motherType == 3322)){ //if v0 mother is Xi0 or Xi- fill MC gen. pt in FD La histogram
5572 XiPt = mcMother->Pt();
5573 fh1MCXiPt->Fill(XiPt);
5574 }
5575 }
5576 if(particletype == kAntiLambda){
5577 if((motherType == -3312)||(motherType == -3322)){ //if v0 mother is Xibar0 or Xibar+ fill MC gen. pt in FD ALa histogram
5578 XibarPt = mcMother->Pt();
5579 fh1MCXibarPt->Fill(XibarPt);
5580 }
5581 }
5582
5583 }
5584
5585 //pdg code checks etc..
5586
5587 if(particletype == kK0){
5588
5589 if(TMath::Abs(posDaughterpdg) != 211){return kFALSE;}//one or both of the daughters are not a pion
5590 if(TMath::Abs(negDaughterpdg) != 211){return kFALSE;}
5591
5cca0df6 5592 if(MCv0PDGCode != 310) {return kFALSE;}
bce887f5 5593 }
5594
5595 if(particletype == kLambda){
5596 if(MCv0PDGCode != 3122)return kFALSE;//if particle is not Antilambda, v0 is rejected
5597 if(posDaughterpdg != 2212)return kFALSE;
5598 if(negDaughterpdg != -211)return kFALSE; //pdg code check for Lambda daughters
5599
5600 //{if((motherType == 3312)||(motherType == 3322)){continue;}//if Xi0 and Xi- is motherparticle of Lambda, particle is rejected, pay attention, most possible Xi-, Xi0 and Omega- are not distributed physically and are much more abundant than expected by physics //}
5601 }
5602
5603 if(particletype == kAntiLambda){
5604 if(MCv0PDGCode != -3122)return kFALSE;
5605 if(posDaughterpdg != 211)return kFALSE;
5606 if(negDaughterpdg !=-2212)return kFALSE; //pdg code check for Antilambda daughters
d7fb73a4 5607
bce887f5 5608
5609 //{if((motherType == -3312)||(motherType == -3322)){continue;}//if bar{Xi0} and Xi+ is motherparticle of Antilambda, particle is rejected
5610 //}
5611 }
5612
5613 return kTRUE; //check was successful
5614 }//end mc v0 label check
5615 }// end of stack label check
5616 }//end of else
5617
5618
5619
5620 return kFALSE; //check wasn't successful
5621}
5622//________________________________________________________________________________________________________________________________________________________
5623
5624
5625Bool_t AliAnalysisTaskJetChem::IsParticleMatching(const AliAODMCParticle* mcp0, const Int_t v0Label){
5626
5627 const Int_t mcp0label = mcp0->GetLabel();
5628
5629 if(v0Label == mcp0label)return kTRUE;
5630
5631 return kFALSE;
5632}
5633
5634//_______________________________________________________________________________________________________________________________________________________
5635
5636Bool_t AliAnalysisTaskJetChem::DaughterTrackCheck(AliAODv0* v0, Int_t& nnum, Int_t& pnum){
5637
5638
5639 if(v0->GetNDaughters() != 2) return kFALSE;//case v0 has more or less than 2 daughters, avoids seg. break at some AOD files //reason?
5640
5641
5642 // safety check of input parameters
5643 if(v0 == NULL)
5644 {
5645 if(fDebug > 1){std::cout << std::endl
5646 << "Warning in AliAnalysisTaskJetChem::DaughterTrackCheck:" << std::endl
5647 << "v0 = " << v0 << std::endl;}
5648
5649 return kFALSE;
96c271c1 5650 }
bce887f5 5651 else
5652 {
5653 //Daughters track check: its Luke Hanrattys method to check daughters charge
5654
5655 nnum = 1;
5656 pnum = 0;
5657
5658
5659 AliAODTrack *ntracktest =(AliAODTrack*)(v0->GetDaughter(nnum));
5660
5661 if(ntracktest == NULL)
5662 {
5663 if(fDebug > 1){std::cout << std::endl
5664 << "Warning in AliAnalysisTaskJetChem::DaughterTrackCheck:" << std::endl
5665 << "ntracktest = " << ntracktest << std::endl;}
5666
5667 return kFALSE;
5668 }
5669
5670 if(ntracktest->Charge() > 0)
5671 {
5672 nnum = 0;
5673 pnum = 1;
5674 }
5675
5676 const AliAODTrack *trackNeg=(AliAODTrack *)(v0->GetDaughter(nnum));
5677 const AliAODTrack *trackPos=(AliAODTrack *)(v0->GetDaughter(pnum));
5678
5679 //Check if both tracks are available
5680 if (!trackPos || !trackNeg) {
5681 if(fDebug > 1) Printf("strange analysis::UserExec:: Error:Could not retrieve one of the daughter tracks\n");
5682 return kFALSE;
5683 }
5684
96c271c1 5685
bce887f5 5686 //remove like sign V0s
5687 if ( trackPos->Charge() == trackNeg->Charge() ){
5688 //if(fDebug>1) Printf("%s:%d found like-sign V0", (char*)__FILE__,__LINE__);
5689 return kFALSE;
5690 }
5691
5692 return kTRUE;
5693 }
5694}
5695
cc096464 5696//______________________________________________________________________
5697TString AliAnalysisTaskJetChem::GetGenerator(Int_t label, AliAODMCHeader* header){
5698 Int_t nsumpart=0;//number of particles
5699 TList *lh=header->GetCocktailHeaders();//TList with all generator headers
5700 Int_t nh=lh->GetEntries();//number of entries in TList with all headers
5701
5702 for(Int_t i=0;i<nh;i++){
5703 AliGenEventHeader* gh=(AliGenEventHeader*)lh->At(i);
5704 TString genname=gh->GetName();//name of particle generator
5705 Int_t npart=gh->NProduced();//number of stable or undecayed particles in MC stack block (?)
5706 if(label>=nsumpart && label<(nsumpart+npart)) return genname;
5707 nsumpart+=npart;
5708 }
5709 TString empty="";
5710 return empty;
5711 }
bce887f5 5712
df9b7345 5713//_____________________________________________________________________
5714void AliAnalysisTaskJetChem::GetTrackPrimaryGenerator(Int_t lab, AliAODMCHeader *header,TClonesArray *arrayMC,TString &nameGen){
5715
a6ee5cab 5716 // method to check if a particle is stemming from a given generator
df9b7345 5717
5718 nameGen=GetGenerator(lab,header);
5719
5720 // Int_t countControl=0;
5721
5722 while(nameGen.IsWhitespace()){
a6ee5cab 5723 AliAODMCParticle *mcpart= (AliAODMCParticle*)arrayMC->At(lab);//get MC generated particle for particle MC label
df9b7345 5724 if(!mcpart){
5725 printf("AliAnalysisTaskJetChem::IsTrackInjected - BREAK: No valid AliAODMCParticle at label %i\n",lab);
5726 break;
5727 }
5728 Int_t mother = mcpart->GetMother();
5729
5730 if(mother<0){
5731 printf("AliAnalysisTaskJetChem::IsTrackInjected - BREAK: Reached primary particle without valid mother\n");
5732 break;
5733 }
5734 lab=mother;
5735 nameGen=GetGenerator(mother,header);
5736
5737 // countControl++;
5738 // if(countControl>=10){ // 10 = arbitrary number; protection from infinite loops
5739 // printf("AliVertexingHFUtils::IsTrackInjected - BREAK: Protection from infinite loop active\n");
5740 // break;
5741 // }
5742
5743 }
5744
5745 return;
5746}
bce887f5 5747
bce887f5 5748
df9b7345 5749//---------------------------------------------------------------------------------------------------------------------
5750Bool_t AliAnalysisTaskJetChem::IsTrackInjected(Int_t lab, AliAODMCHeader *header,TClonesArray *arrayMC, TString& nameGen){
5751 // method to check if a v0 particle comes from the signal event or from the underlying Hijing event
5752 //TString nameGen;
5753
5754 GetTrackPrimaryGenerator(lab, header, arrayMC, nameGen);
5755
5756 if(nameGen.IsWhitespace() || nameGen.Contains("ijing")) return kFALSE;//particle has either no info about generator or is Hijing particle, so it is not injected
5757
5758 //std::cout<<"generator name: "<<nameGen<<std::endl;
5759
5760 return kTRUE;
5761}
5762
bce887f5 5763//_________________________________________________________________________________________________________________________________________
b6eb08db 5764Double_t AliAnalysisTaskJetChem::SmearJetPt(Double_t jetPt, Int_t /*cent*/, Double_t /*jetRadius*/, Double_t /*ptmintrack*/, Double_t& jetPtSmear){
bce887f5 5765
b6eb08db 5766 static TF1 fsmear("f1","[0]*exp(-1*(x-[1])*(x-[1])/(2*[2]*[2]))",-100.,100.); //smearing according to gaussian function in between +/- 10 GeV/c
6ec586c1 5767
bce887f5 5768 //Int_t cl = 1;
5769
5770 /* if(cent>10) cl = 2;
5771 if(cent>30) cl = 3;
5772 if(cent>50) cl = 4;
5773 */
5774
b6eb08db 5775 fsmear.SetParameters(1,0,11.19);//for 2010 PbPb jets, R=0.4, ptmintrack = 0.15 GeV/c, cent 00-10%, delta-pt width estimated via single track embedding
bce887f5 5776 //fsmear->SetParameters(1,0,3.28);//for 2010 PbPb jets, R=0.4, ptmintrack = 0.15 GeV/c, cent 50-60%, delta-pt width estimated via single track embedding
5777
5778 //fsmear->SetParameters(1,0,4.472208);// for 2010 PbPb jets, R=0.2, ptmintrack = 0.15 GeV/c, cent 00-10%
5779
5780 /* //delta-pt width for anti-kt jet finder:
5781
5782 // jet cone R = 0.4
5783 if((cl == 1)&&(jetRadius == 0.4)&&(ptmintrack == 0.15)){
5784 fsmear->SetParameters(1,0,10.178069);//(max.,mean,sigma) of gaussian, needs to be adjusted for every combination of jet cone size, centrality and min. pt constituents cut
5785 }
5786 if((cl == 2)&&(jetRadius == 0.4)&&(ptmintrack == 0.15)){
5787 fsmear->SetParameters(1,0,8.536195);
5788 }
5789 if((cl == 3)&&(jetRadius == 0.4)&&(ptmintrack == 0.15)){
5790 fsmear->SetParameters(1,0,?);
5791 }
5792 if((cl == 4)&&(jetRadius == 0.4)&&(ptmintrack == 0.15)){
5793 fsmear->SetParameters(1,0,5.229839);
5794 }
5795
5796 // jet cone R = 0.3
5797 if((cl == 1)&&(jetRadius == 0.3)&&(ptmintrack == 0.15)){
5798 fsmear->SetParameters(1,0,7.145967);
5799 }
5800 if((cl == 2)&&(jetRadius == 0.3)&&(ptmintrack == 0.15)){
5801 fsmear->SetParameters(1,0,5.844796);
5802 }
5803 if((cl == 3)&&(jetRadius == 0.3)&&(ptmintrack == 0.15)){
5804 fsmear->SetParameters(1,0,?);
5805 }
5806 if((cl == 4)&&(jetRadius == 0.3)&&(ptmintrack == 0.15)){
5807 fsmear->SetParameters(1,0,3.630751);
5808 }
5809
5810 // jet cone R = 0.2
5811 if((cl == 1)&&(jetRadius == 0.2)&&(ptmintrack == 0.15)){
5812 fsmear->SetParameters(1,0,4.472208);
5813 }
5814 if((cl == 2)&&(jetRadius == 0.2)&&(ptmintrack == 0.15)){
5815 fsmear->SetParameters(1,0,3.543938);
96c271c1 5816 }
bce887f5 5817 if((cl == 3)&&(jetRadius == 0.2)&&(ptmintrack == 0.15)){
5818 fsmear->SetParameters(1,0,?);
5819 }
5820 if((cl == 4)&&(jetRadius == 0.2)&&(ptmintrack == 0.15)){
5821 fsmear->SetParameters(1,0,1.037476);
5822 }
5823
5824 */
5825
b6eb08db 5826 Double_t r = fsmear.GetRandom();
bce887f5 5827 jetPtSmear = jetPt + r;
96c271c1 5828
bce887f5 5829 // std::cout<<"jetPt: "<<jetPt<<std::endl;
5830 // std::cout<<"jetPtSmear: "<<jetPtSmear<<std::endl;
5831 // std::cout<<"r: "<<r<<std::endl;
96c271c1 5832
6ec586c1 5833
bce887f5 5834 return jetPtSmear;
96c271c1 5835}
9b2de807 5836
9280dfa6 5837
cc096464 5838//______________________________________________________________________________________________________________________
5839//____________________________________________________________________________________________________________________
5840
5841Bool_t AliAnalysisTaskJetChem::IsParticleInCone(const AliVParticle* part1, const AliVParticle* part2, Double_t dRMax) const
5842{
5843// decides whether a particle is inside a jet cone
5844 if (!part1 || !part2)
5845 return kFALSE;
5846
5847 TVector3 vecMom2(part2->Px(),part2->Py(),part2->Pz());
5848 TVector3 vecMom1(part1->Px(),part1->Py(),part1->Pz());
5849 Double_t dR = vecMom2.DeltaR(vecMom1); // = sqrt(dEta*dEta+dPhi*dPhi)
5850 if(dR<dRMax) // momentum vectors of part1 and part2 are closer than dRMax
5851 return kTRUE;
5852 return kFALSE;
5853}
5854//__________________________________________________________________________________________________________________
5855
5856
5857Bool_t AliAnalysisTaskJetChem::IsRCJCOverlap(TList* recjetlist, const AliVParticle* part, Double_t dDistance) const{
5858
5859 if(!recjetlist) return kFALSE;
5860 if(!part) return kFALSE;
5861 if(!dDistance) return kFALSE;
5862 Int_t nRecJetsCuts = fJetsRecCuts->GetEntries();
5863
5864 for(Int_t i=0; i<nRecJetsCuts; ++i){ //loop over all reconstructed jets in events
5865 AliAODJet* jet = (AliAODJet*) (recjetlist->At(i));
5866 if(!jet){if(fDebug>2)std::cout<<"AliAnalysisTaskJetChem::IsRCJCOverlap jet pointer invalid!"<<std::endl;continue;}
5867 if(IsParticleInCone(jet, part, dDistance) == kTRUE)return kTRUE;//RC and JC are overlapping
5868
5869 }//end loop testing RC-JC overlap
5870 return kFALSE;//RC and JC are not overlapping -> good!
5871}
5872
5873//_______________________________________________________________________________________________________________________
5874AliAODJet* AliAnalysisTaskJetChem::GetRandomCone(TList* jetlist, Double_t dEtaConeMax, Double_t dDistance) const
dde76689 5875{
cc096464 5876 TLorentzVector vecRdCone;
5877 AliAODJet* jetRC = 0;//random cone candidate
5878 Double_t dEta, dPhi; //random eta and phi value for RC
df9b7345 5879 Bool_t IsRCoutJC = kFALSE;//check whether RC is not overlapping with any selected jet cone in event
cc096464 5880 Int_t iRCTrials = 10;//search at maximum 10 times for random cone that doesn't overlap with jet cone
5881
5882 for(Int_t i=0; i<iRCTrials; iRCTrials++){
5883
5884 dEta = dEtaConeMax*(2*fRandom->Rndm()-1.); //random eta value in range: [-dEtaConeMax,+dEtaConeMax]
5885 dPhi = TMath::TwoPi()*fRandom->Rndm(); //random phi value in range: [0,2*Pi]
5886 vecRdCone.SetPtEtaPhiM(1.,dEta,dPhi,0.);
5887 jetRC = new AliAODJet(vecRdCone);//new RC candidate
5888
df9b7345 5889 if (!IsRCJCOverlap(jetlist,jetRC,dDistance))
cc096464 5890 {
df9b7345 5891 IsRCoutJC = kTRUE; //std::cout<<"RC and JC are not overlapping!!!"<<std::endl;
cc096464 5892 break;
5893 }
5894 else
5895 delete jetRC; //RC is overlapping with JC, delete this RC candidate
5896
5897 }
5898 if(!IsRCoutJC) {jetRC = 0;}//in case no random cone was selected
5899
5900 return jetRC;
5901}
5902
5903
bce887f5 5904// _______________________________________________________________________________________________________________________
5905AliAODJet* AliAnalysisTaskJetChem::GetMedianCluster()
5906{
5907 // fill tracks from bckgCluster branch,
5908 // using cluster with median density (odd number of clusters)
5909 // or picking randomly one of the two closest to median (even number)
5910
5911 Int_t nBckgClusters = fBckgJetsRec->GetEntries(); // not 'recCuts': use all clusters in full eta range
5912
5913 if(nBckgClusters<3) return 0; // need at least 3 clusters (skipping 2 highest)
5914
5915 Double_t* bgrDensity = new Double_t[nBckgClusters];
5916 Int_t* indices = new Int_t[nBckgClusters];
5917
5918 for(Int_t ij=0; ij<nBckgClusters; ++ij){
5919
5920 AliAODJet* bgrCluster = (AliAODJet*)(fBckgJetsRec->At(ij));
5921 Double_t clusterPt = bgrCluster->Pt();
5922 Double_t area = bgrCluster->EffectiveAreaCharged();
5923
5924 Double_t density = 0;
5925 if(area>0) density = clusterPt/area;
5926
5927 bgrDensity[ij] = density;
5928 indices[ij] = ij;
4855fa4a 5929
bce887f5 5930 }
5931
5932 TMath::Sort(nBckgClusters, bgrDensity, indices);
5933
5934 // get median cluster
5935
5936 AliAODJet* medianCluster = 0;
bce887f5 5937
5938 if(TMath::Odd(nBckgClusters)){
5939
bce887f5 5940 Int_t medianIndex = indices[(Int_t) (0.5*(nBckgClusters+1))];
5941
5942 medianCluster = (AliAODJet*)(fBckgJetsRec->At(medianIndex));
5943
4855fa4a 5944 //Double_t clusterPt = medianCluster->Pt();
5945 //Double_t area = medianCluster->EffectiveAreaCharged();
bce887f5 5946 }
5947 else{
5948
bce887f5 5949 Int_t medianIndex1 = indices[(Int_t) (0.5*nBckgClusters)];
5950 Int_t medianIndex2 = indices[(Int_t) (0.5*nBckgClusters+1)];
5951
5952 AliAODJet* medianCluster1 = (AliAODJet*)(fBckgJetsRec->At(medianIndex1));
5953 AliAODJet* medianCluster2 = (AliAODJet*)(fBckgJetsRec->At(medianIndex2));
5954
dde76689 5955 // Double_t density1 = 0;
5956 //Double_t clusterPt1 = medianCluster1->Pt();
5957 //Double_t area1 = medianCluster1->EffectiveAreaCharged();
5958 //if(area1>0) Double_t density1 = clusterPt1/area1;
bce887f5 5959
dde76689 5960 // Double_t density2 = 0;
5961 //Double_t clusterPt2 = medianCluster2->Pt();
5962 //Double_t area2 = medianCluster2->EffectiveAreaCharged();
5963 // if(area2>0) Double_t density2 = clusterPt2/area2;
bce887f5 5964
bce887f5 5965 medianCluster = ( (gRandom->Rndm()>0.5) ? medianCluster1 : medianCluster2 ); // select one randomly to avoid adding areas
5966 }
5967
5968 delete[] bgrDensity;
5969 delete[] indices;
5970
5971 return medianCluster;
5972}
cc096464 5973
5974//____________________________________________________________________________________________
5975
5976Double_t AliAnalysisTaskJetChem::AreaCircSegment(Double_t dRadius, Double_t dDistance) const
5977{
5978// calculate area of a circular segment defined by the circle radius and the (oriented) distance between the secant line and the circle centre
5979 Double_t dEpsilon = 1e-2;
5980 Double_t dR = dRadius;
5981 Double_t dD = dDistance;
5982 if (TMath::Abs(dR)<dEpsilon)
5983 {
5984 if(fDebug>0) printf("AliAnalysisTaskJetChem::AreaCircSegment: Error: Too small radius: %f < %f\n",dR,dEpsilon);
5985 return 0.;
5986 }
5987 if (dD>=dR)
5988 return 0.;
5989 if (dD<=-dR)
5990 return TMath::Pi()*dR*dR;
5991 return dR*dR*TMath::ACos(dD/dR)-dD*TMath::Sqrt(dR*dR-dD*dD);
5992}
5993
5994
5995