]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/JetTasks/AliAnalysisTaskJetChem.cxx
adding usage of vtx axis as a parameter in the addtask macro
[u/mrichter/AliRoot.git] / PWG4 / JetTasks / AliAnalysisTaskJetChem.cxx
CommitLineData
96c271c1 1/*************************************************************************
2 * *
3 * *
4 * Task for Jet Chemistry Analysis in PWG4 Jet Task Force Train *
5 * *
6 * *
7 *************************************************************************/
8
9b2de807 9/**************************************************************************
10 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
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 *
16 * documentation strictly for non-commercial purposes is hereby granted *
17 * without fee, provided that the above copyright notice appears in all *
18 * copies and that both the copyright notice and this permission notice *
19 * appear in the supporting documentation. The authors make no claims *
20 * about the suitability of this software for any purpose. It is *
21 * provided "as is" without express or implied warranty. *
22 **************************************************************************/
23
96c271c1 24/* $Id: */
9b2de807 25
96c271c1 26#include "TH2F.h"
27#include "TH3F.h"
28#include "TProfile.h"
29#include "THnSparse.h"
9b2de807 30
96c271c1 31#include "AliAnalysisHelperJetTasks.h"
9b2de807 32#include "AliAnalysisManager.h"
96c271c1 33#include "AliAODHandler.h"
34#include "AliAODInputHandler.h"
35#include "AliESDEvent.h"
36#include "AliGenPythiaEventHeader.h"
37#include "AliGenHijingEventHeader.h"
38
39#include "AliAODEvent.h"
9b2de807 40#include "AliAODJet.h"
96c271c1 41#include "AliAODv0.h"
9b2de807 42#include "AliAODTrack.h"
9b2de807 43
96c271c1 44
45#include "AliPID.h"
9b2de807 46#include "AliExternalTrackParam.h"
47
96c271c1 48#include "AliAnalysisTaskJetChem.h"
9280dfa6 49
96c271c1 50ClassImp(AliAnalysisTaskJetChem)
9280dfa6 51
96c271c1 52//____________________________________________________________________________
53AliAnalysisTaskJetChem::AliAnalysisTaskJetChem()
54 : AliAnalysisTaskFragmentationFunction()
55 ,fK0Type(0)
56 ,fFilterMaskK0(0)
57 ,fListK0s(0)
58 ,fV0QAK0(0)
59 ,fFFHistosRecCutsK0Evt(0)
60 ,fFFHistosIMK0AllEvt(0)
61 ,fFFHistosIMK0Jet(0)
62 ,fFFHistosIMK0Cone(0)
63 ,fFFHistosPhiCorrIMK0(0)
64 ,fFFIMNBinsJetPt(0)
65 ,fFFIMJetPtMin(0)
66 ,fFFIMJetPtMax(0)
67 ,fFFIMNBinsInvM(0)
68 ,fFFIMInvMMin(0)
69 ,fFFIMInvMMax(0)
70 ,fFFIMNBinsPt(0)
71 ,fFFIMPtMin(0)
72 ,fFFIMPtMax(0)
73 ,fFFIMNBinsXi(0)
74 ,fFFIMXiMin(0)
75 ,fFFIMXiMax(0)
76 ,fFFIMNBinsZ(0)
77 ,fFFIMZMin(0)
78 ,fFFIMZMax(0)
79 ,fPhiCorrIMNBinsPt(0)
80 ,fPhiCorrIMPtMin(0)
81 ,fPhiCorrIMPtMax(0)
82 ,fPhiCorrIMNBinsPhi(0)
83 ,fPhiCorrIMPhiMin(0)
84 ,fPhiCorrIMPhiMax(0)
85 ,fPhiCorrIMNBinsInvM(0)
86 ,fPhiCorrIMInvMMin(0)
87 ,fPhiCorrIMInvMMax(0)
88 ,fh1K0Mult(0)
89 ,fh1dPhiJetK0(0)
90{
91 // default constructor
92}
9b2de807 93
96c271c1 94//__________________________________________________________________________________________
95AliAnalysisTaskJetChem::AliAnalysisTaskJetChem(const char *name)
96 : AliAnalysisTaskFragmentationFunction(name)
97 ,fK0Type(0)
98 ,fFilterMaskK0(0)
99 ,fListK0s(0)
100 ,fV0QAK0(0)
101 ,fFFHistosRecCutsK0Evt(0)
102 ,fFFHistosIMK0AllEvt(0)
103 ,fFFHistosIMK0Jet(0)
104 ,fFFHistosIMK0Cone(0)
105 ,fFFHistosPhiCorrIMK0(0)
106 ,fFFIMNBinsJetPt(0)
107 ,fFFIMJetPtMin(0)
108 ,fFFIMJetPtMax(0)
109 ,fFFIMNBinsInvM(0)
110 ,fFFIMInvMMin(0)
111 ,fFFIMInvMMax(0)
112 ,fFFIMNBinsPt(0)
113 ,fFFIMPtMin(0)
114 ,fFFIMPtMax(0)
115 ,fFFIMNBinsXi(0)
116 ,fFFIMXiMin(0)
117 ,fFFIMXiMax(0)
118 ,fFFIMNBinsZ(0)
119 ,fFFIMZMin(0)
120 ,fFFIMZMax(0)
121 ,fPhiCorrIMNBinsPt(0)
122 ,fPhiCorrIMPtMin(0)
123 ,fPhiCorrIMPtMax(0)
124 ,fPhiCorrIMNBinsPhi(0)
125 ,fPhiCorrIMPhiMin(0)
126 ,fPhiCorrIMPhiMax(0)
127 ,fPhiCorrIMNBinsInvM(0)
128 ,fPhiCorrIMInvMMin(0)
129 ,fPhiCorrIMInvMMax(0)
130 ,fh1K0Mult(0)
131 ,fh1dPhiJetK0(0)
132{
133 // constructor
134
135 DefineOutput(1,TList::Class());
136}
9b2de807 137
96c271c1 138//__________________________________________________________________________________________________________________________
139AliAnalysisTaskJetChem::AliAnalysisTaskJetChem(const AliAnalysisTaskJetChem &copy)
140 : AliAnalysisTaskFragmentationFunction()
141 ,fK0Type(copy.fK0Type)
142 ,fFilterMaskK0(copy.fFilterMaskK0)
143 ,fListK0s(copy.fListK0s)
144 ,fV0QAK0(copy.fV0QAK0)
145 ,fFFHistosRecCutsK0Evt(copy.fFFHistosRecCutsK0Evt)
146 ,fFFHistosIMK0AllEvt(copy.fFFHistosIMK0AllEvt)
147 ,fFFHistosIMK0Jet(copy.fFFHistosIMK0Jet)
148 ,fFFHistosIMK0Cone(copy.fFFHistosIMK0Cone)
149 ,fFFHistosPhiCorrIMK0(copy.fFFHistosPhiCorrIMK0)
150 ,fFFIMNBinsJetPt(copy.fFFIMNBinsJetPt)
151 ,fFFIMJetPtMin(copy.fFFIMJetPtMin)
152 ,fFFIMJetPtMax(copy.fFFIMJetPtMax)
153 ,fFFIMNBinsInvM(copy.fFFIMNBinsInvM)
154 ,fFFIMInvMMin(copy.fFFIMInvMMin)
155 ,fFFIMInvMMax(copy.fFFIMInvMMax)
156 ,fFFIMNBinsPt(copy.fFFIMNBinsPt)
157 ,fFFIMPtMin(copy.fFFIMPtMin)
158 ,fFFIMPtMax(copy.fFFIMPtMax)
159 ,fFFIMNBinsXi(copy.fFFIMNBinsXi)
160 ,fFFIMXiMin(copy.fFFIMXiMin)
161 ,fFFIMXiMax(copy.fFFIMXiMax)
162 ,fFFIMNBinsZ(copy.fFFIMNBinsZ)
163 ,fFFIMZMin(copy.fFFIMZMin)
164 ,fFFIMZMax(copy.fFFIMZMax)
165 ,fPhiCorrIMNBinsPt(copy.fPhiCorrIMNBinsPt)
166 ,fPhiCorrIMPtMin(copy.fPhiCorrIMPtMin)
167 ,fPhiCorrIMPtMax(copy.fPhiCorrIMPtMax)
168 ,fPhiCorrIMNBinsPhi(copy.fPhiCorrIMNBinsPhi)
169 ,fPhiCorrIMPhiMin(copy.fPhiCorrIMPhiMin)
170 ,fPhiCorrIMPhiMax(copy.fPhiCorrIMPhiMax)
171 ,fPhiCorrIMNBinsInvM(copy.fPhiCorrIMNBinsInvM)
172 ,fPhiCorrIMInvMMin(copy.fPhiCorrIMInvMMin)
173 ,fPhiCorrIMInvMMax(copy.fPhiCorrIMInvMMax)
174 ,fh1K0Mult(copy.fh1K0Mult)
175 ,fh1dPhiJetK0(copy.fh1dPhiJetK0)
176{
177 // copy constructor
178
179}
9b2de807 180
96c271c1 181// _________________________________________________________________________________________________________________________________
182AliAnalysisTaskJetChem& AliAnalysisTaskJetChem::operator=(const AliAnalysisTaskJetChem& o)
183{
184 // assignment
185
186 if(this!=&o){
187 AliAnalysisTaskFragmentationFunction::operator=(o);
188
189 fK0Type = o.fK0Type;
190 fFilterMaskK0 = o.fFilterMaskK0;
191 fListK0s = o.fListK0s;
192 fV0QAK0 = o.fV0QAK0;
193 fFFHistosRecCutsK0Evt = o.fFFHistosRecCutsK0Evt;
194 fFFHistosIMK0AllEvt = o.fFFHistosIMK0AllEvt;
195 fFFHistosIMK0Jet = o.fFFHistosIMK0Jet;
196 fFFHistosIMK0Cone = o.fFFHistosIMK0Cone;
197 fFFHistosPhiCorrIMK0 = o.fFFHistosPhiCorrIMK0;
198 fFFIMNBinsJetPt = o.fFFIMNBinsJetPt;
199 fFFIMJetPtMin = o.fFFIMJetPtMin;
200 fFFIMJetPtMax = o.fFFIMJetPtMax;
201 fFFIMNBinsPt = o.fFFIMNBinsPt;
202 fFFIMPtMin = o.fFFIMPtMin;
203 fFFIMPtMax = o.fFFIMPtMax;
204 fFFIMNBinsXi = o.fFFIMNBinsXi;
205 fFFIMXiMin = o.fFFIMXiMin;
206 fFFIMXiMax = o.fFFIMXiMax;
207 fFFIMNBinsZ = o.fFFIMNBinsZ;
208 fFFIMZMin = o.fFFIMZMin;
209 fFFIMZMax = o.fFFIMZMax;
210 fPhiCorrIMNBinsPt = o.fPhiCorrIMNBinsPt;
211 fPhiCorrIMPtMin = o.fPhiCorrIMPtMin;
212 fPhiCorrIMPtMax = o.fPhiCorrIMPtMax;
213 fPhiCorrIMNBinsPhi = o.fPhiCorrIMNBinsPhi;
214 fPhiCorrIMPhiMin = o.fPhiCorrIMPhiMin;
215 fPhiCorrIMPhiMax = o.fPhiCorrIMPhiMax;
216 fPhiCorrIMNBinsInvM = o.fPhiCorrIMNBinsInvM;
217 fPhiCorrIMInvMMin = o.fPhiCorrIMInvMMin;
218 fPhiCorrIMInvMMax = o.fPhiCorrIMInvMMax;
219 fh1K0Mult = o.fh1K0Mult;
220 fh1dPhiJetK0 = o.fh1dPhiJetK0;
221 }
222
223 return *this;
224}
9b2de807 225
96c271c1 226//_______________________________________________
227AliAnalysisTaskJetChem::~AliAnalysisTaskJetChem()
228{
229 // destructor
9b2de807 230
96c271c1 231
232 if(fTracksRecCuts) delete fTracksRecCuts;
233 if(fJetsRecCuts) delete fJetsRecCuts;
234 if(fListK0s) delete fListK0s;
235 if(fCommonHistList) delete fCommonHistList;
9b2de807 236
9b2de807 237}
238
96c271c1 239//________________________________________________________________________________________________________________________________
240AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::AliFragFuncHistosInvMass(const char* name,
241 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
242 Int_t nInvMass, Float_t invMassMin, Float_t invMassMax,
243 Int_t nPt, Float_t ptMin, Float_t ptMax,
244 Int_t nXi, Float_t xiMin, Float_t xiMax,
245 Int_t nZ , Float_t zMin , Float_t zMax )
246 : TObject()
247 ,fNBinsJetPt(nJetPt)
248 ,fJetPtMin(jetPtMin)
249 ,fJetPtMax(jetPtMax)
250 ,fNBinsInvMass(nInvMass)
251 ,fInvMassMin(invMassMin)
252 ,fInvMassMax(invMassMax)
253 ,fNBinsPt(nPt)
254 ,fPtMin(ptMin)
255 ,fPtMax(ptMax)
256 ,fNBinsXi(nXi)
257 ,fXiMin(xiMin)
258 ,fXiMax(xiMax)
259 ,fNBinsZ(nZ)
260 ,fZMin(zMin)
261 ,fZMax(zMax)
262 ,fh3TrackPt(0)
263 ,fh3Xi(0)
264 ,fh3Z(0)
265 ,fh1JetPt(0)
266 ,fNameFF(name)
9b2de807 267{
96c271c1 268 // default constructor
269
9b2de807 270}
271
96c271c1 272//______________________________________________________________________________________________________________
273AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::AliFragFuncHistosInvMass(const AliFragFuncHistosInvMass& copy)
274 : TObject()
275 ,fNBinsJetPt(copy.fNBinsJetPt)
276 ,fJetPtMin(copy.fJetPtMin)
277 ,fJetPtMax(copy.fJetPtMax)
278 ,fNBinsInvMass(copy.fNBinsInvMass)
279 ,fInvMassMin(copy.fInvMassMin)
280 ,fInvMassMax(copy.fInvMassMax)
281 ,fNBinsPt(copy.fNBinsPt)
282 ,fPtMin(copy.fPtMin)
283 ,fPtMax(copy.fPtMax)
284 ,fNBinsXi(copy.fNBinsXi)
285 ,fXiMin(copy.fXiMin)
286 ,fXiMax(copy.fXiMax)
287 ,fNBinsZ(copy.fNBinsZ)
288 ,fZMin(copy.fZMin)
289 ,fZMax(copy.fZMax)
290 ,fh3TrackPt(copy.fh3TrackPt)
291 ,fh3Xi(copy.fh3Xi)
292 ,fh3Z(copy.fh3Z)
293 ,fh1JetPt(copy.fh1JetPt)
294 ,fNameFF(copy.fNameFF)
9b2de807 295{
96c271c1 296 // copy constructor
9b2de807 297}
298
96c271c1 299//______________________________________________________________________________________________________________________________________________________________________
300AliAnalysisTaskJetChem::AliFragFuncHistosInvMass& AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::operator=(const AliAnalysisTaskJetChem::AliFragFuncHistosInvMass& o)
9b2de807 301{
96c271c1 302 // assignment
303
304 if(this!=&o){
305 TObject::operator=(o);
306 fNBinsJetPt = o.fNBinsJetPt;
307 fJetPtMin = o.fJetPtMin;
308 fJetPtMax = o.fJetPtMax;
309 fNBinsInvMass = o.fNBinsInvMass;
310 fInvMassMin = o.fInvMassMin;
311 fInvMassMax = o.fInvMassMax;
312 fNBinsPt = o.fNBinsPt;
313 fPtMin = o.fPtMin;
314 fPtMax = o.fPtMax;
315 fNBinsXi = o.fNBinsXi;
316 fXiMin = o.fXiMin;
317 fXiMax = o.fXiMax;
318 fNBinsZ = o.fNBinsZ;
319 fZMin = o.fZMin;
320 fZMax = o.fZMax;
321 fh3TrackPt = o.fh3TrackPt;
322 fh3Xi = o.fh3Xi;
323 fh3Z = o.fh3Z;
324 fh1JetPt = o.fh1JetPt;
325 fNameFF = o.fNameFF;
9b2de807 326 }
96c271c1 327
328 return *this;
329}
9b2de807 330
96c271c1 331//___________________________________________________________________________
332AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::~AliFragFuncHistosInvMass()
333{
334 // destructor
9b2de807 335
96c271c1 336 if(fh1JetPt) delete fh1JetPt;
337 if(fh3TrackPt) delete fh3TrackPt;
338 if(fh3Xi) delete fh3Xi;
339 if(fh3Z) delete fh3Z;
9b2de807 340}
341
96c271c1 342//_________________________________________________________________
343void AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::DefineHistos()
9b2de807 344{
96c271c1 345 // book FF histos
9b2de807 346
96c271c1 347 fh1JetPt = new TH1F(Form("fh1FFJetPtIM%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
348 fh3TrackPt = new TH3F(Form("fh3FFTrackPtIM%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsInvMass, fInvMassMin, fInvMassMax, fNBinsPt, fPtMin, fPtMax);
349 fh3Xi = new TH3F(Form("fh3FFXiIM%s", fNameFF.Data()),"", fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsInvMass, fInvMassMin, fInvMassMax, fNBinsXi, fXiMin, fXiMax);
350 fh3Z = new TH3F(Form("fh3FFZIM%s", fNameFF.Data()),"", fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsInvMass, fInvMassMin, fInvMassMax, fNBinsZ, fZMin, fZMax);
9b2de807 351
96c271c1 352 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{t} (GeV/c)", "entries");
353 AliAnalysisTaskJetChem::SetProperties(fh3TrackPt,"jet p_{t} (GeV/c)","inv Mass (GeV/c^2)","p_{t} (GeV/c)");
354 AliAnalysisTaskJetChem::SetProperties(fh3Xi,"jet p_{t} (GeV/c)","inv Mass (GeV/c^2)","#xi");
355 AliAnalysisTaskJetChem::SetProperties(fh3Z,"jet p_{t} (GeV/c)","inv Mass (GeV/c^2)","z");
356}
3e3b1bae 357
96c271c1 358//________________________________________________________________________________________________________________________________
359void AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::FillFF(Float_t trackPt, Float_t invM, Float_t jetPt, Bool_t incrementJetPt)
360{
361 // fill FF
362
363 if(incrementJetPt) fh1JetPt->Fill(jetPt);
364 fh3TrackPt->Fill(jetPt,invM,trackPt);
9280dfa6 365
96c271c1 366 Double_t z = 0.;
367 if(jetPt>0) z = trackPt / jetPt;
368 Double_t xi = 0;
369 if(z>0) xi = TMath::Log(1/z);
9b2de807 370
96c271c1 371 fh3Xi->Fill(jetPt,invM,xi);
372 fh3Z->Fill(jetPt,invM,z);
373}
9b2de807 374
96c271c1 375//___________________________________________________________________________________
376void AliAnalysisTaskJetChem::AliFragFuncHistosInvMass::AddToOutput(TList* list) const
377{
378 // add histos to list
9b2de807 379
96c271c1 380 list->Add(fh1JetPt);
381
382 list->Add(fh3TrackPt);
383 list->Add(fh3Xi);
384 list->Add(fh3Z);
385}
9b2de807 386
96c271c1 387// ---
388
389
390//_______________________________________________________________________________________________________
391AliAnalysisTaskJetChem::AliFragFuncHistosPhiCorrInvMass::AliFragFuncHistosPhiCorrInvMass(const char* name,
392 Int_t nPt, Float_t ptMin, Float_t ptMax,
393 Int_t nPhi, Float_t phiMin, Float_t phiMax,
394 Int_t nInvMass, Float_t invMassMin, Float_t invMassMax)
395 : TObject()
396 ,fNBinsPt(nPt)
397 ,fPtMin(ptMin)
398 ,fPtMax(ptMax)
399 ,fNBinsPhi(nPhi)
400 ,fPhiMin(phiMin)
401 ,fPhiMax(phiMax)
402 ,fNBinsInvMass(nInvMass)
403 ,fInvMassMin(invMassMin)
404 ,fInvMassMax(invMassMax)
405 ,fh3PhiCorr(0)
406 ,fNamePhiCorr(name)
407{
408 // default constructor
409}
9b2de807 410
96c271c1 411//____________________________________________________________________________________________________________________________________
412AliAnalysisTaskJetChem::AliFragFuncHistosPhiCorrInvMass::AliFragFuncHistosPhiCorrInvMass(const AliFragFuncHistosPhiCorrInvMass& copy)
413 : TObject()
414 ,fNBinsPt(copy.fNBinsPt)
415 ,fPtMin(copy.fPtMin)
416 ,fPtMax(copy.fPtMax)
417 ,fNBinsPhi(copy.fNBinsPhi)
418 ,fPhiMin(copy.fPhiMin)
419 ,fPhiMax(copy.fPhiMax)
420 ,fNBinsInvMass(copy.fNBinsInvMass)
421 ,fInvMassMin(copy.fInvMassMin)
422 ,fInvMassMax(copy.fInvMassMax)
423 ,fh3PhiCorr(copy.fh3PhiCorr)
424 ,fNamePhiCorr(copy.fNamePhiCorr)
425{
426 // copy constructor
427}
9280dfa6 428
96c271c1 429//________________________________________________________________________________________________________________________________________________________________________
430AliAnalysisTaskJetChem::AliFragFuncHistosPhiCorrInvMass& AliAnalysisTaskJetChem::AliFragFuncHistosPhiCorrInvMass::operator=(const AliAnalysisTaskJetChem::AliFragFuncHistosPhiCorrInvMass& o)
431{
432 // assignment
433
434 if(this!=&o){
435 TObject::operator=(o);
436 fNBinsPt = o.fNBinsPt;
437 fPtMin = o.fPtMin;
438 fPtMax = o.fPtMax;
439 fNBinsPhi = o.fNBinsPhi;
440 fPhiMin = o.fPhiMin;
441 fPhiMax = o.fPhiMax;
442 fNBinsInvMass = o.fNBinsInvMass;
443 fInvMassMin = o.fInvMassMin;
444 fInvMassMax = o.fInvMassMax;
9280dfa6 445
96c271c1 446 fh3PhiCorr = o.fh3PhiCorr;
447 fNamePhiCorr = o.fNamePhiCorr;
9280dfa6 448 }
96c271c1 449
450 return *this;
451}
9280dfa6 452
96c271c1 453//_________________________________________________________________________________________
454AliAnalysisTaskJetChem::AliFragFuncHistosPhiCorrInvMass::~AliFragFuncHistosPhiCorrInvMass()
455{
456 // destructor
457
458 if(fh3PhiCorr) delete fh3PhiCorr;
459}
460
461//__________________________________________________________________________
462void AliAnalysisTaskJetChem::AliFragFuncHistosPhiCorrInvMass::DefineHistos()
463{
464 // book jet QA histos
9280dfa6 465
96c271c1 466 fh3PhiCorr = new TH3F(Form("fh3PhiCorrIM%s", fNamePhiCorr.Data()),
467 Form("%s: p_{t} - #phi - m_{inv} distribution",fNamePhiCorr.Data()),
468 fNBinsPt, fPtMin, fPtMax,
469 fNBinsPhi, fPhiMin, fPhiMax,
470 fNBinsInvMass, fInvMassMin, fInvMassMax);
471
472 AliAnalysisTaskJetChem::SetProperties(fh3PhiCorr, "p_{t} (GeV/c)", "#phi", "m_{inv} (GeV/c^2)");
473}
9b2de807 474
96c271c1 475//___________________________________________________________________________________________________________
476void AliAnalysisTaskJetChem::AliFragFuncHistosPhiCorrInvMass::FillPhiCorr(Float_t pt, Float_t phi, Float_t invM)
477{
478 // fill jet QA histos
9b2de807 479
96c271c1 480 fh3PhiCorr->Fill(pt, phi, invM);
481}
9b2de807 482
96c271c1 483//______________________________________________________________________________________________
484void AliAnalysisTaskJetChem::AliFragFuncHistosPhiCorrInvMass::AddToOutput(TList* list) const
485{
486 // add histos to list
9b2de807 487
96c271c1 488 list->Add(fh3PhiCorr);
489}
9b2de807 490
96c271c1 491//____________________________________________________
492void AliAnalysisTaskJetChem::UserCreateOutputObjects()
493{
494 // create output objects
9b2de807 495
96c271c1 496 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()");
9b2de807 497
96c271c1 498 // create list of tracks and jets
499
500 fTracksRecCuts = new TList();
501 fTracksRecCuts->SetOwner(kFALSE);
9b2de807 502
96c271c1 503 fJetsRecCuts = new TList();
504 fJetsRecCuts->SetOwner(kFALSE);
9b2de807 505
96c271c1 506 fListK0s = new TList();
507 fListK0s->SetOwner(kFALSE);
9b2de807 508
96c271c1 509 //
510 // Create histograms / output container
511 //
9b2de807 512
96c271c1 513 OpenFile(1);
514 fCommonHistList = new TList();
9b2de807 515
96c271c1 516 Bool_t oldStatus = TH1::AddDirectoryStatus();
517 TH1::AddDirectory(kFALSE);
518
9b2de807 519
96c271c1 520 // histograms inherited from AliAnalysisTaskFragmentationFunction
9b2de807 521
96c271c1 522 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
523 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
524 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
525 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
526 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
527 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
528 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
9b2de807 529
96c271c1 530 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
531 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 11,-.5, 10.5);
532 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
533 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
534 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
535 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
536 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
537 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
538 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
9b2de807 539
96c271c1 540 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
9b2de807 541
9b2de807 542
96c271c1 543 // histograms jetChem proper
9b2de807 544
96c271c1 545 fh1EvtMult = new TH1F("fh1EvtMult","multiplicity",1200,0.,12000.);
546 fh1K0Mult = new TH1F("fh1K0Mult","K0 multiplicity",500,0.,500.);
547 fh1dPhiJetK0 = new TH1F("fh1dPhiJetK0","",640,-1,5.4);
9b2de807 548
9b2de807 549
656457c9 550
96c271c1 551 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
552 fFFNBinsPt, fFFPtMin, fFFPtMax,
553 fFFNBinsXi, fFFXiMin, fFFXiMax,
554 fFFNBinsZ , fFFZMin , fFFZMax);
555
556 fV0QAK0 = new AliFragFuncQATrackHistos("V0QAK0",fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
557 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
558 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
559 fQATrackHighPtThreshold);
560
561 fFFHistosRecCutsK0Evt = new AliFragFuncHistos("RecCutsK0Evt", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
562 fFFNBinsPt, fFFPtMin, fFFPtMax,
563 fFFNBinsXi, fFFXiMin, fFFXiMax,
564 fFFNBinsZ , fFFZMin , fFFZMax);
565
566
567 fFFHistosIMK0AllEvt = new AliFragFuncHistosInvMass("K0AllEvt", fFFIMNBinsJetPt, fFFIMJetPtMin, fFFIMJetPtMax,
568 fFFIMNBinsInvM,fFFIMInvMMin,fFFIMInvMMax,
569 fFFIMNBinsPt, fFFIMPtMin, fFFIMPtMax,
570 fFFIMNBinsXi, fFFIMXiMin, fFFIMXiMax,
571 fFFIMNBinsZ , fFFIMZMin , fFFIMZMax);
572
573 fFFHistosIMK0Jet = new AliFragFuncHistosInvMass("K0Jet", fFFIMNBinsJetPt, fFFIMJetPtMin, fFFIMJetPtMax,
574 fFFIMNBinsInvM,fFFIMInvMMin,fFFIMInvMMax,
575 fFFIMNBinsPt, fFFIMPtMin, fFFIMPtMax,
576 fFFIMNBinsXi, fFFIMXiMin, fFFIMXiMax,
577 fFFIMNBinsZ , fFFIMZMin , fFFIMZMax);
578
579
580 fFFHistosIMK0Cone = new AliFragFuncHistosInvMass("K0Cone", fFFIMNBinsJetPt, fFFIMJetPtMin, fFFIMJetPtMax,
581 fFFIMNBinsInvM,fFFIMInvMMin,fFFIMInvMMax,
582 fFFIMNBinsPt, fFFIMPtMin, fFFIMPtMax,
583 fFFIMNBinsXi, fFFIMXiMin, fFFIMXiMax,
584 fFFIMNBinsZ , fFFIMZMin , fFFIMZMax);
9280dfa6 585
96c271c1 586 fFFHistosPhiCorrIMK0 = new AliFragFuncHistosPhiCorrInvMass("K0",fPhiCorrIMNBinsPt, fPhiCorrIMPtMin, fPhiCorrIMPtMax,
587 fPhiCorrIMNBinsPhi, fPhiCorrIMPhiMin, fPhiCorrIMPhiMax,
588 fPhiCorrIMNBinsInvM , fPhiCorrIMInvMMin , fPhiCorrIMInvMMax);
589
590
591 fV0QAK0->DefineHistos();
592 fFFHistosRecCuts->DefineHistos();
593 fFFHistosRecCutsK0Evt->DefineHistos();
594 fFFHistosIMK0AllEvt->DefineHistos();
595 fFFHistosIMK0Jet->DefineHistos();
596 fFFHistosIMK0Cone->DefineHistos();
597 fFFHistosPhiCorrIMK0->DefineHistos();
9b2de807 598
96c271c1 599 const Int_t saveLevel = 5;
600 if(saveLevel>0){
601
602 fCommonHistList->Add(fh1EvtSelection);
603 fCommonHistList->Add(fh1EvtCent);
604 fCommonHistList->Add(fh1VertexNContributors);
605 fCommonHistList->Add(fh1VertexZ);
606 fCommonHistList->Add(fh1Xsec);
607 fCommonHistList->Add(fh1Trials);
608 fCommonHistList->Add(fh1PtHard);
609 fCommonHistList->Add(fh1PtHardTrials);
610 fCommonHistList->Add(fh1nRecJetsCuts);
611 fCommonHistList->Add(fh1EvtMult);
612 fCommonHistList->Add(fh1K0Mult);
613 fCommonHistList->Add(fh1dPhiJetK0);
614
615 fV0QAK0->AddToOutput(fCommonHistList);
616 fFFHistosRecCuts->AddToOutput(fCommonHistList);
617 fFFHistosRecCutsK0Evt->AddToOutput(fCommonHistList);
618
619 fFFHistosIMK0AllEvt->AddToOutput(fCommonHistList);
620 fFFHistosIMK0Jet->AddToOutput(fCommonHistList);
621 fFFHistosIMK0Cone->AddToOutput(fCommonHistList);
622 fFFHistosPhiCorrIMK0->AddToOutput(fCommonHistList);
9b2de807 623 }
96c271c1 624
625 // =========== Switch on Sumw2 for all histos ===========
626 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
627 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
628 if (h1) h1->Sumw2();
629 else{
630 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
631 if(hnSparse) hnSparse->Sumw2();
632 }
9b2de807 633 }
96c271c1 634
635 TH1::AddDirectory(oldStatus);
9b2de807 636}
637
96c271c1 638//_______________________________________________
639void AliAnalysisTaskJetChem::UserExec(Option_t *)
640{
641 // Main loop
642 // Called for each event
9b2de807 643
96c271c1 644 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
9b2de807 645
96c271c1 646 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
647 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
648 if(inputHandler->IsEventSelected() & AliVEvent::kMB){
649 if(fDebug > 1) Printf(" Trigger Selection: event ACCEPTED ... ");
650 fh1EvtSelection->Fill(1.);
651 } else {
652 fh1EvtSelection->Fill(0.);
653 if(inputHandler->InheritsFrom("AliESDInputHandler") && fUsePhysicsSelection){ // PhysicsSelection only with ESD input
654 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
655 PostData(1, fCommonHistList);
656 return;
657 }
658 }
9b2de807 659
96c271c1 660 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
661 if(!fESD){
662 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
663 }
664
665 fMCEvent = MCEvent();
666 if(!fMCEvent){
667 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
668 }
669
670 // get AOD event from input/ouput
671 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
672 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
673 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
674 if(fUseAODInputJets) fAODJets = fAOD;
675 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
676 }
677 else {
678 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
679 if( handler && handler->InheritsFrom("AliAODHandler") ) {
680 fAOD = ((AliAODHandler*)handler)->GetAOD();
681 fAODJets = fAOD;
682 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
683 }
684 }
685
686 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
687 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
688 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
689 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
690 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
691 }
692 }
693
694 if(fNonStdFile.Length()!=0){
695 // case we have an AOD extension - fetch the jets from the extended output
696
697 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
698 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
699 if(!fAODExtension){
700 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
701 }
702 }
703
704 if(!fAOD){
705 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
706 return;
707 }
708 if(!fAODJets){
709 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
710 return;
711 }
9b2de807 712
9b2de807 713
96c271c1 714 // event selection *****************************************
715
716 Double_t centPercent = -1;
717 if(fEventClass>0){
718 Int_t cl = 0;
c500e0a0 719 if(handler && handler->InheritsFrom("AliAODInputHandler")){
96c271c1 720 // since it is not supported by the helper task define own classes
721 centPercent = fAOD->GetHeader()->GetCentrality();
722 cl = 1;
723 if(centPercent>10) cl = 2;
724 if(centPercent>30) cl = 3;
725 if(centPercent>50) cl = 4;
726 }
727 else {
728 cl = AliAnalysisHelperJetTasks::EventClass();
c500e0a0 729 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // OB added
96c271c1 730 }
731
732 if(cl!=fEventClass){
733 // event not in selected event class, reject event
734 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
735 fh1EvtSelection->Fill(2.);
736 PostData(1, fCommonHistList);
737 return;
738 }
739 }
740
741 // *** vertex cut ***
742 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
743 Int_t nTracksPrim = primVtx->GetNContributors();
744 fh1VertexNContributors->Fill(nTracksPrim);
745
746 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
747 if(!nTracksPrim){
748 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
749 fh1EvtSelection->Fill(3.);
750 PostData(1, fCommonHistList);
751 return;
752 }
753
754 fh1VertexZ->Fill(primVtx->GetZ());
755
756 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
757 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
758 fh1EvtSelection->Fill(4.);
759 PostData(1, fCommonHistList);
760 return;
761 }
762
763 TString primVtxName(primVtx->GetName());
764
765 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
766 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
767 fh1EvtSelection->Fill(5.);
768 PostData(1, fCommonHistList);
769 return;
9f77f0ce 770 }
96c271c1 771
772 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
773 fh1EvtSelection->Fill(0.);
774 fh1EvtCent->Fill(centPercent);
775
9f77f0ce 776
96c271c1 777 //___ get MC information __________________________________________________________________
9f77f0ce 778
96c271c1 779 Double_t ptHard = 0.;
780 Double_t nTrials = 1; // trials for MC trigger weight for real data
9b2de807 781
96c271c1 782 if(fMCEvent){
783 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
784 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
785 AliGenHijingEventHeader* hijingGenHeader = 0x0;
9f77f0ce 786
96c271c1 787 if(pythiaGenHeader){
788 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
789 nTrials = pythiaGenHeader->Trials();
790 ptHard = pythiaGenHeader->GetPtHard();
9b2de807 791
96c271c1 792 fh1PtHard->Fill(ptHard);
793 fh1PtHardTrials->Fill(ptHard,nTrials);
9b2de807 794
9b2de807 795
96c271c1 796 } else { // no pythia, hijing?
9b2de807 797
96c271c1 798 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
9b2de807 799
96c271c1 800 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
801 if(!hijingGenHeader){
802 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
803 } else {
804 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
805 }
806 }
9b2de807 807
96c271c1 808 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
9b2de807 809 }
810
9b2de807 811
96c271c1 812 //____ fetch jets ______________________________________________________________
9b2de807 813
96c271c1 814 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
815 Int_t nRecJetsCuts = 0;
816 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
817 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
818 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
819 fh1nRecJetsCuts->Fill(nRecJetsCuts);
820
9b2de807 821
96c271c1 822 //____ fetch particles __________________________________________________________
823
824 Int_t nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
825 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,fTracksRecCuts->GetEntries());
826 if(fTracksRecCuts->GetEntries() != nTCuts)
827 Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,fTracksRecCuts->GetEntries());
828 fh1EvtMult->Fill(fTracksRecCuts->GetEntries());
9b2de807 829
96c271c1 830 Int_t nK0s = GetListOfK0s(fListK0s,fK0Type);
831 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nK0s,fListK0s->GetEntries());
832 if(nK0s != fListK0s->GetEntries()) Printf("%s:%d Mismatch selected K0s: %d %d",(char*)__FILE__,__LINE__,nK0s,fListK0s->GetEntries());
833 fh1K0Mult->Fill(fListK0s->GetEntries());
9b2de807 834
96c271c1 835 // ___ V0 QA + K0 pt spectra all events _______________________________________________
836
837 if(fListK0s->GetEntries()>0){
838
839 for(Int_t it=0; it<fListK0s->GetSize(); ++it){ // loop all K0s
840
841 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListK0s->At(it));
f98082ec 842 if(!v0) continue;
843
96c271c1 844 Float_t trackPt = v0->Pt();
845 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
846 Double_t invM = v0->MassK0Short();
847 Double_t jetPt = fFFIMJetPtMin; // assign pro forma jet energy
9b2de807 848
96c271c1 849 fV0QAK0->FillTrackQA(v0->Eta(), TVector2::Phi_0_2pi(v0->Phi()), v0->Pt());
850 fFFHistosIMK0AllEvt->FillFF(trackPt, invM, jetPt, incrementJetPt);
851 }
9b2de807 852 }
853
9b2de807 854
96c271c1 855 //____ fill FF histos __________________________________________________________
9b2de807 856
96c271c1 857 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
9b2de807 858
c500e0a0 859 AliAODJet* jet = (AliAODJet*) (fJetsRecCuts->At(ij));
96c271c1 860
861 if(ij==0){ // leading jet
862
863 TList* jettracklist = new TList();
864 Double_t sumPt = 0.;
865
866 if(GetFFRadius()<=0){
867 GetJetTracksTrackrefs(jettracklist, jet);
868 } else {
869 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt);
870 }
871
872 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
9b2de807 873
c500e0a0 874 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
875 if(!trackVP)continue;
876
96c271c1 877 Float_t jetPt = jet->Pt();
878 Float_t trackPt = trackVP->Pt();
879
880 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
881
882 fFFHistosRecCuts->FillFF(trackPt, jetPt, incrementJetPt);
883 if(nK0s>0) fFFHistosRecCutsK0Evt->FillFF(trackPt, jetPt, incrementJetPt);
884 }
885
886 delete jettracklist;
887 }
888 }
9b2de807 889
9b2de807 890
96c271c1 891 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){ // jet loop
9b2de807 892
96c271c1 893 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecCuts->At(ij));
f98082ec 894 if(!jet) continue;
9b2de807 895
96c271c1 896 if(ij==0){ // leading jet
897
898 //fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
899
900 Float_t jetPt = jet->Pt();
9b2de807 901
96c271c1 902 for(Int_t it=0; it<fListK0s->GetSize(); ++it){ // loop all K0s
9b2de807 903
96c271c1 904 AliAODv0* v0 = dynamic_cast<AliAODv0*>(fListK0s->At(it));
f98082ec 905 if(!v0) continue;
906
96c271c1 907 Double_t v0Mom[3];
908 v0->PxPyPz(v0Mom);
909 TVector3 v0MomVect(v0Mom);
9b2de807 910
96c271c1 911 Double_t dPhiJetK0 = (jet->MomentumVector()->Vect()).DeltaPhi(v0MomVect);
912
913 Float_t trackPt = v0->Pt();
914 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
915 Double_t invM = v0->MassK0Short();
916
917 fFFHistosIMK0Jet->FillFF(trackPt, invM, jetPt, incrementJetPt);
918 fFFHistosPhiCorrIMK0->FillPhiCorr(trackPt,TVector2::Phi_0_2pi(dPhiJetK0),invM);
9b2de807 919
96c271c1 920 if(dPhiJetK0<fh1dPhiJetK0->GetXaxis()->GetXmin()) dPhiJetK0 += 2*TMath::Pi();
921 fh1dPhiJetK0->Fill(dPhiJetK0);
9b2de807 922
96c271c1 923 }
924 if(fListK0s->GetSize() == 0){ // no K0: increment jet pt spectrum
9b2de807 925
96c271c1 926 Bool_t incrementJetPt = kTRUE;
927 fFFHistosIMK0Jet->FillFF(-1, -1, jetPt, incrementJetPt);
928 }
929
9b2de807 930
96c271c1 931 TList* jetConeK0list = new TList();
932 Double_t sumPt = 0.;
933
934 GetJetTracksPointing(fListK0s, jetConeK0list, jet, GetFFRadius(), sumPt);
935
936 if(fDebug>2)Printf("%s:%d nK0s total: %d, in jet cone: %d,FFRadius %f ",(char*)__FILE__,__LINE__,nK0s,jetConeK0list->GetEntries(),GetFFRadius());
937
938 for(Int_t it=0; it<jetConeK0list->GetSize(); ++it){ // loop K0s in jet cone
c500e0a0 939
96c271c1 940 AliAODv0* v0 = dynamic_cast<AliAODv0*>(jetConeK0list->At(it));
c500e0a0 941 if(!v0) continue;
9b2de807 942
96c271c1 943 Double_t invM = v0->MassK0Short();
944 Float_t trackPt = v0->Pt();
945 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
946
947 //std::cout<<" trackPt "<<trackPt<<" invM "<<invM<<std::endl;
948 fFFHistosIMK0Cone->FillFF(trackPt, invM, jetPt, incrementJetPt);
949 }
950 if(jetConeK0list->GetSize() == 0){ // no K0: increment jet pt spectrum
9b2de807 951
96c271c1 952 Bool_t incrementJetPt = kTRUE;
953 fFFHistosIMK0Cone->FillFF(-1, -1, jetPt, incrementJetPt);
9b2de807 954 }
9b2de807 955
96c271c1 956 delete jetConeK0list;
9b2de807 957 }
9b2de807 958 }
9b2de807 959
96c271c1 960 fTracksRecCuts->Clear();
961 fJetsRecCuts->Clear();
962 fListK0s->Clear();
9b2de807 963
96c271c1 964 //Post output data.
965 PostData(1, fCommonHistList);
9b2de807 966}
967
96c271c1 968// ____________________________________________________________________________________________
969void AliAnalysisTaskJetChem::SetProperties(TH3F* h,const char* x, const char* y, const char* z)
9b2de807 970{
96c271c1 971 //Set properties of histos (x,y and z title)
972
973 h->SetXTitle(x);
974 h->SetYTitle(y);
975 h->SetZTitle(z);
976 h->GetXaxis()->SetTitleColor(1);
977 h->GetYaxis()->SetTitleColor(1);
978 h->GetZaxis()->SetTitleColor(1);
9b2de807 979}
980
96c271c1 981// ____________________________________________________________________________________________________________________________________________
9b2de807 982Bool_t AliAnalysisTaskJetChem::IsAccepteddEdx(const Double_t mom,const Double_t signal, AliPID::EParticleType n, const Double_t cutnSig) const{
983
984 // apply TPC dE/dx cut similar as in AliTPCpidESD
985 // note: AliTPCidESD uses inner track param for momentum - not avaiable on AOD,
986 // so we use global track momentum
987 // should use separate parametrisation for MC and data, but probably ALEPH param & 7% resolution used here anyway not the last word
988
989
990 const Double_t kBBMIP(50.);
991 const Double_t kBBRes(0.07);
992 //const Double_t kBBRange(5.);
993 const Double_t kBBp1(0.76176e-1);
994 const Double_t kBBp2(10.632);
995 const Double_t kBBp3(0.13279e-4);
996 const Double_t kBBp4(1.8631);
997 const Double_t kBBp5(1.9479);
998
999 Double_t mass=AliPID::ParticleMass(n);
1000 Double_t betaGamma = mom/mass;
1001
1002 const Float_t kmeanCorrection =0.1;
1003 Double_t bb = AliExternalTrackParam::BetheBlochAleph(betaGamma,kBBp1,kBBp2,kBBp3,kBBp4,kBBp5);
1004 Double_t meanCorrection =(1+(bb-1)*kmeanCorrection);
1005 Double_t bethe = bb * meanCorrection; // expected
1006 Double_t sigma = bethe * kBBRes;
1007
1008
1009 Double_t dedx = signal/kBBMIP; // measured
1010
1011 Double_t nSig = (TMath::Abs(dedx - bethe))/sigma;
1012
1013 if(nSig > cutnSig) return kFALSE;
1014
1015 return kTRUE;
1016}
1017
96c271c1 1018//___________________________________________________________________
1019Bool_t AliAnalysisTaskJetChem::IsK0InvMass(const Double_t mass) const
1020{
1021 // K0 mass ? Use FF histo limits
1022
1023 if(fFFIMInvMMin <= mass && mass <= fFFIMInvMMax) return kTRUE;
1024
1025 return kFALSE;
1026}
9b2de807 1027
96c271c1 1028//_____________________________________________________________________________________
1029Int_t AliAnalysisTaskJetChem::GetListOfK0s(TList *list, const Int_t type)
1030{
1031 // fill list of V0s selected according to type
9280dfa6 1032
96c271c1 1033 if(!list){
1034 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
1035 return -1;
1036 }
9b2de807 1037
96c271c1 1038 if(type==kTrackUndef) return 0;
9b2de807 1039
1040 for(int i=0; i<fAOD->GetNumberOfV0s(); i++){ // loop over V0s
1041
1042 AliAODv0* v0 = fAOD->GetV0(i);
1043
1044 Bool_t isOnFly = v0->GetOnFlyStatus();
9b2de807 1045
96c271c1 1046 if(!isOnFly && (type == kOnFly || type == kOnFlyPID || type == kOnFlydEdx || type == kOnFlyPrim)) continue;
1047 if( isOnFly && (type == kOffl || type == kOfflPID || type == kOffldEdx || type == kOfflPrim)) continue;
656457c9 1048
96c271c1 1049 Double_t massK0 = v0->MassK0Short();
656457c9 1050
96c271c1 1051 if(!(IsK0InvMass(massK0))) continue; // moved invMass cut for HI - otherwise too slow
656457c9 1052
96c271c1 1053 if(type == kOnFlyPID || type == kOfflPID){
1054
1055 AliAODTrack *trackPos = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(0)); // slow
1056 AliAODTrack *trackNeg = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(1)); // slow
1057
1058 // AOD pid - cuts strongly into signal
9280dfa6 1059
96c271c1 1060 AliAODTrack::AODTrkPID_t mpPIDNeg = trackNeg->GetMostProbablePID();
1061 AliAODTrack::AODTrkPID_t mpPIDPos = trackPos->GetMostProbablePID();
1062
1063 if(!( (mpPIDNeg == AliAODTrack::kPion) && (mpPIDPos == AliAODTrack::kPion) ) ) continue;
1064 }
1065
1066 if(type == kOnFlydEdx || type == kOffldEdx){
9b2de807 1067
656457c9 1068 AliAODTrack *trackPos = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(0)); // slow
1069 AliAODTrack *trackNeg = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(1)); // slow
9b2de807 1070
9b2de807 1071 AliAODPid* aodPidPos = trackPos->GetDetPid();
1072 AliAODPid* aodPidNeg = trackNeg->GetDetPid();
1073
1074 Double_t dEdxPos = aodPidPos->GetTPCsignal();
1075 Double_t dEdxNeg = aodPidNeg->GetTPCsignal();
1076
1077 Double_t momPos = trackPos->P();
1078 Double_t momNeg = trackNeg->P();
fb72ed5f 1079
96c271c1 1080 Int_t cutnSigdEdx = 2;
1081 if(! (IsAccepteddEdx(momPos,dEdxPos,AliPID::kPion,cutnSigdEdx)) && (IsAccepteddEdx(momNeg,dEdxNeg,AliPID::kPion,cutnSigdEdx)) ) continue;
1082
1083 }
1084
1085 if(type == kOnFlyPrim || type == kOfflPrim){
1086
1087 AliAODTrack *trackPos = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(0)); // slow
1088 AliAODTrack *trackNeg = (AliAODTrack *) (v0->GetSecondaryVtx()->GetDaughter(1)); // slow
1089
1090 //std::cout<<" filer map trackPos "<<trackPos->GetFilterMap()<<" trackNeg "<<trackNeg->GetFilterMap()<<std::endl;
1091
1092 if((fFilterMaskK0>0) && !(trackPos->TestFilterBit(fFilterMaskK0))) continue;
1093 if((fFilterMaskK0>0) && !(trackNeg->TestFilterBit(fFilterMaskK0))) continue;
1094 }
1095
1096 list->Add(v0);
1097 }
1098
1099 Int_t nK0s = list->GetSize();
1100
1101 return nK0s;
1102}
9b2de807 1103
9280dfa6 1104