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