1 /*************************************************************************
\r
3 * Task for Fragmentation Function Analysis in PWG4 Jet Task Force Train *
\r
5 *************************************************************************/
\r
8 /**************************************************************************
\r
9 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
11 * Author: The ALICE Off-line Project. *
\r
12 * Contributors are mentioned in the code where appropriate. *
\r
14 * Permission to use, copy, modify and distribute this software and its *
\r
15 * documentation strictly for non-commercial purposes is hereby granted *
\r
16 * without fee, provided that the above copyright notice appears in all *
\r
17 * copies and that both the copyright notice and this permission notice *
\r
18 * appear in the supporting documentation. The authors make no claims *
\r
19 * about the suitability of this software for any purpose. It is *
\r
20 * provided "as is" without express or implied warranty. *
\r
21 **************************************************************************/
\r
29 #include "TString.h"
\r
31 #include "AliAODInputHandler.h"
\r
32 #include "AliAODHandler.h"
\r
33 #include "AliESDEvent.h"
\r
34 #include "AliAODMCParticle.h"
\r
35 #include "AliAODJet.h"
\r
36 #include "AliGenPythiaEventHeader.h"
\r
37 #include "AliInputEventHandler.h"
\r
39 #include "AliAnalysisHelperJetTasks.h"
\r
40 #include "AliAnalysisManager.h"
\r
41 #include "AliAnalysisTaskSE.h"
\r
43 #include "AliAnalysisTaskFragmentationFunction.h"
\r
46 ClassImp(AliAnalysisTaskFragmentationFunction)
\r
48 //____________________________________________________________________________
\r
49 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction()
\r
50 : AliAnalysisTaskSE()
\r
54 ,fBranchRecJets("jets")
\r
70 ,fDijetDeltaPhiCut(0)
\r
71 ,fDijetInvMassMin(0)
\r
72 ,fDijetInvMassMax(0)
\r
76 ,fDijetEFractionCut(0)
\r
84 ,fQATrackHistosRec(0)
\r
85 ,fQATrackHistosRecCuts(0)
\r
86 ,fQATrackHistosGen(0)
\r
88 ,fQAJetHistosRecCuts(0)
\r
89 ,fQAJetHistosRecCutsLeading(0)
\r
91 ,fQAJetHistosGenLeading(0)
\r
92 ,fFFHistosRecCuts(0)
\r
93 ,fFFHistosRecLeading(0)
\r
94 ,fFFHistosRecLeadingTrack(0)
\r
96 ,fFFHistosGenLeading(0)
\r
97 ,fFFHistosGenLeadingTrack(0)
\r
98 ,fQATrackHighPtThreshold(0)
\r
114 ,fQAJetNBinsEta(0)
\r
117 ,fQAJetNBinsPhi(0)
\r
120 ,fQATrackNBinsPt(0)
\r
123 ,fQATrackNBinsEta(0)
\r
124 ,fQATrackEtaMin(0)
\r
125 ,fQATrackEtaMax(0)
\r
126 ,fQATrackNBinsPhi(0)
\r
127 ,fQATrackPhiMin(0)
\r
128 ,fQATrackPhiMax(0)
\r
129 ,fCommonHistList(0)
\r
130 ,fh1EvtSelection(0)
\r
131 ,fh1VertexNContributors(0)
\r
134 ,fh1nRecJetsCuts(0)
\r
137 // default constructor
\r
140 //__________________________________________________________________________________________
\r
141 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const char *name)
\r
142 : AliAnalysisTaskSE(name)
\r
146 ,fBranchRecJets("jets")
\r
147 ,fBranchGenJets("")
\r
162 ,fDijetDeltaPhiCut(0)
\r
163 ,fDijetInvMassMin(0)
\r
164 ,fDijetInvMassMax(0)
\r
168 ,fDijetEFractionCut(0)
\r
169 ,fDijetEFraction(0)
\r
176 ,fQATrackHistosRec(0)
\r
177 ,fQATrackHistosRecCuts(0)
\r
178 ,fQATrackHistosGen(0)
\r
179 ,fQAJetHistosRec(0)
\r
180 ,fQAJetHistosRecCuts(0)
\r
181 ,fQAJetHistosRecCutsLeading(0)
\r
182 ,fQAJetHistosGen(0)
\r
183 ,fQAJetHistosGenLeading(0)
\r
184 ,fFFHistosRecCuts(0)
\r
185 ,fFFHistosRecLeading(0)
\r
186 ,fFFHistosRecLeadingTrack(0)
\r
188 ,fFFHistosGenLeading(0)
\r
189 ,fFFHistosGenLeadingTrack(0)
\r
190 ,fQATrackHighPtThreshold(0)
\r
206 ,fQAJetNBinsEta(0)
\r
209 ,fQAJetNBinsPhi(0)
\r
212 ,fQATrackNBinsPt(0)
\r
215 ,fQATrackNBinsEta(0)
\r
216 ,fQATrackEtaMin(0)
\r
217 ,fQATrackEtaMax(0)
\r
218 ,fQATrackNBinsPhi(0)
\r
219 ,fQATrackPhiMin(0)
\r
220 ,fQATrackPhiMax(0)
\r
221 ,fCommonHistList(0)
\r
222 ,fh1EvtSelection(0)
\r
223 ,fh1VertexNContributors(0)
\r
226 ,fh1nRecJetsCuts(0)
\r
231 DefineOutput(1,TList::Class());
\r
236 //__________________________________________________________________________________________________________________________
\r
237 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const AliAnalysisTaskFragmentationFunction ©)
\r
238 : AliAnalysisTaskSE()
\r
241 ,fMCEvent(copy.fMCEvent)
\r
242 ,fBranchRecJets(copy.fBranchRecJets)
\r
243 ,fBranchGenJets(copy.fBranchGenJets)
\r
244 ,fTrackTypeGen(copy.fTrackTypeGen)
\r
245 ,fJetTypeGen(copy.fJetTypeGen)
\r
246 ,fFilterMask(copy.fFilterMask)
\r
247 ,fTrackPtCut(copy.fTrackPtCut)
\r
248 ,fTrackEtaMin(copy.fTrackEtaMin)
\r
249 ,fTrackEtaMax(copy.fTrackEtaMax)
\r
250 ,fTrackPhiMin(copy.fTrackPhiMin)
\r
251 ,fTrackPhiMax(copy.fTrackPhiMax)
\r
252 ,fJetPtCut(copy.fJetPtCut)
\r
253 ,fJetEtaMin(copy.fJetEtaMin)
\r
254 ,fJetEtaMax(copy.fJetEtaMax)
\r
255 ,fJetPhiMin(copy.fJetPhiMin)
\r
256 ,fJetPhiMax(copy.fJetPhiMax)
\r
257 ,fFFRadius(copy.fFFRadius)
\r
258 ,fDijetDeltaPhiCut(copy.fDijetDeltaPhiCut)
\r
259 ,fDijetInvMassMin(copy.fDijetInvMassMin)
\r
260 ,fDijetInvMassMax(copy.fDijetInvMassMax)
\r
261 ,fDijetCDFcut(copy.fDijetCDFcut)
\r
262 ,fDijetEMeanMin(copy.fDijetEMeanMin)
\r
263 ,fDijetEMeanMax(copy.fDijetEMeanMax)
\r
264 ,fDijetEFractionCut(copy.fDijetEFractionCut)
\r
265 ,fDijetEFraction(copy.fDijetEFraction)
\r
266 ,fTracksRec(copy.fTracksRec)
\r
267 ,fTracksRecCuts(copy.fTracksRecCuts)
\r
268 ,fTracksGen(copy.fTracksGen)
\r
269 ,fJetsRec(copy.fJetsRec)
\r
270 ,fJetsRecCuts(copy.fJetsRecCuts)
\r
271 ,fJetsGen(copy.fJetsGen)
\r
272 ,fQATrackHistosRec(copy.fQATrackHistosRec)
\r
273 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
\r
274 ,fQATrackHistosGen(copy.fQATrackHistosGen)
\r
275 ,fQAJetHistosRec(copy.fQAJetHistosRec)
\r
276 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
\r
277 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
\r
278 ,fQAJetHistosGen(copy.fQAJetHistosGen)
\r
279 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
\r
280 ,fFFHistosRecCuts(copy.fFFHistosRecCuts)
\r
281 ,fFFHistosRecLeading(copy.fFFHistosRecLeading)
\r
282 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
\r
283 ,fFFHistosGen(copy.fFFHistosGen)
\r
284 ,fFFHistosGenLeading(copy.fFFHistosGenLeading)
\r
285 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
\r
286 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
\r
287 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
\r
288 ,fFFJetPtMin(copy.fFFJetPtMin)
\r
289 ,fFFJetPtMax(copy.fFFJetPtMax)
\r
290 ,fFFNBinsPt(copy.fFFNBinsPt)
\r
291 ,fFFPtMin(copy.fFFPtMin)
\r
292 ,fFFPtMax(copy.fFFPtMax)
\r
293 ,fFFNBinsXi(copy.fFFNBinsXi)
\r
294 ,fFFXiMin(copy.fFFXiMin)
\r
295 ,fFFXiMax(copy.fFFXiMax)
\r
296 ,fFFNBinsZ(copy.fFFNBinsZ)
\r
297 ,fFFZMin(copy.fFFZMin)
\r
298 ,fFFZMax(copy.fFFZMax)
\r
299 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
\r
300 ,fQAJetPtMin(copy.fQAJetPtMin)
\r
301 ,fQAJetPtMax(copy.fQAJetPtMax)
\r
302 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
\r
303 ,fQAJetEtaMin(copy.fQAJetEtaMin)
\r
304 ,fQAJetEtaMax(copy.fQAJetEtaMax)
\r
305 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
\r
306 ,fQAJetPhiMin(copy.fQAJetPhiMin)
\r
307 ,fQAJetPhiMax(copy.fQAJetPhiMax)
\r
308 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
\r
309 ,fQATrackPtMin(copy.fQATrackPtMin)
\r
310 ,fQATrackPtMax(copy.fQATrackPtMax)
\r
311 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
\r
312 ,fQATrackEtaMin(copy.fQATrackEtaMin)
\r
313 ,fQATrackEtaMax(copy.fQATrackEtaMax)
\r
314 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
\r
315 ,fQATrackPhiMin(copy.fQATrackPhiMin)
\r
316 ,fQATrackPhiMax(copy.fQATrackPhiMax)
\r
317 ,fCommonHistList(copy.fCommonHistList)
\r
318 ,fh1EvtSelection(copy.fh1EvtSelection)
\r
319 ,fh1VertexNContributors(copy.fh1VertexNContributors)
\r
320 ,fh1VertexZ(copy.fh1VertexZ)
\r
321 ,fh1EvtMult(copy.fh1EvtMult)
\r
322 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
\r
323 ,fh1nGenJets(copy.fh1nGenJets)
\r
325 // copy constructor
\r
329 // _________________________________________________________________________________________________________________________________
\r
330 AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::operator=(const AliAnalysisTaskFragmentationFunction& o)
\r
336 AliAnalysisTaskSE::operator=(o);
\r
339 fMCEvent = o.fMCEvent;
\r
340 fBranchRecJets = o.fBranchRecJets;
\r
341 fBranchGenJets = o.fBranchGenJets;
\r
342 fTrackTypeGen = o.fTrackTypeGen;
\r
343 fJetTypeGen = o.fJetTypeGen;
\r
344 fFilterMask = o.fFilterMask;
\r
345 fTrackPtCut = o.fTrackPtCut;
\r
346 fTrackEtaMin = o.fTrackEtaMin;
\r
347 fTrackEtaMax = o.fTrackEtaMax;
\r
348 fTrackPhiMin = o.fTrackPhiMin;
\r
349 fTrackPhiMax = o.fTrackPhiMax;
\r
350 fJetPtCut = o.fJetPtCut;
\r
351 fJetEtaMin = o.fJetEtaMin;
\r
352 fJetEtaMax = o.fJetEtaMax;
\r
353 fJetPhiMin = o.fJetPhiMin;
\r
354 fJetPhiMax = o.fJetPhiMax;
\r
355 fFFRadius = o.fFFRadius;
\r
356 fDijetDeltaPhiCut = o.fDijetDeltaPhiCut;
\r
357 fDijetInvMassMin = o.fDijetInvMassMin;
\r
358 fDijetInvMassMax = o.fDijetInvMassMax;
\r
359 fDijetCDFcut = o.fDijetCDFcut;
\r
360 fDijetEMeanMin = o.fDijetEMeanMin;
\r
361 fDijetEMeanMax = o.fDijetEMeanMax;
\r
362 fDijetEFractionCut = o.fDijetEFractionCut;
\r
363 fDijetEFraction = o.fDijetEFraction;
\r
364 fTracksRec = o.fTracksRec;
\r
365 fTracksRecCuts = o.fTracksRecCuts;
\r
366 fTracksGen = o.fTracksGen;
\r
367 fJetsRec = o.fJetsRec;
\r
368 fJetsRecCuts = o.fJetsRecCuts;
\r
369 fJetsGen = o.fJetsGen;
\r
370 fQATrackHistosRec = o.fQATrackHistosRec;
\r
371 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
\r
372 fQATrackHistosGen = o.fQATrackHistosGen;
\r
373 fQAJetHistosRec = o.fQAJetHistosRec;
\r
374 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
\r
375 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
\r
376 fQAJetHistosGen = o.fQAJetHistosGen;
\r
377 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
\r
378 fFFHistosRecCuts = o.fFFHistosRecCuts;
\r
379 fFFHistosRecLeading = o.fFFHistosRecLeading;
\r
380 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
\r
381 fFFHistosGen = o.fFFHistosGen;
\r
382 fFFHistosGenLeading = o.fFFHistosGenLeading;
\r
383 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
\r
384 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
\r
385 fFFNBinsJetPt = o.fFFNBinsJetPt;
\r
386 fFFJetPtMin = o.fFFJetPtMin;
\r
387 fFFJetPtMax = o.fFFJetPtMax;
\r
388 fFFNBinsPt = o.fFFNBinsPt;
\r
389 fFFPtMin = o.fFFPtMin;
\r
390 fFFPtMax = o.fFFPtMax;
\r
391 fFFNBinsXi = o.fFFNBinsXi;
\r
392 fFFXiMin = o.fFFXiMin;
\r
393 fFFXiMax = o.fFFXiMax;
\r
394 fFFNBinsZ = o.fFFNBinsZ;
\r
395 fFFZMin = o.fFFZMin;
\r
396 fFFZMax = o.fFFZMax;
\r
397 fQAJetNBinsPt = o.fQAJetNBinsPt;
\r
398 fQAJetPtMin = o.fQAJetPtMin;
\r
399 fQAJetPtMax = o.fQAJetPtMax;
\r
400 fQAJetNBinsEta = o.fQAJetNBinsEta;
\r
401 fQAJetEtaMin = o.fQAJetEtaMin;
\r
402 fQAJetEtaMax = o.fQAJetEtaMax;
\r
403 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
\r
404 fQAJetPhiMin = o.fQAJetPhiMin;
\r
405 fQAJetPhiMax = o.fQAJetPhiMax;
\r
406 fQATrackNBinsPt = o.fQATrackNBinsPt;
\r
407 fQATrackPtMin = o.fQATrackPtMin;
\r
408 fQATrackPtMax = o.fQATrackPtMax;
\r
409 fQATrackNBinsEta = o.fQATrackNBinsEta;
\r
410 fQATrackEtaMin = o.fQATrackEtaMin;
\r
411 fQATrackEtaMax = o.fQATrackEtaMax;
\r
412 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
\r
413 fQATrackPhiMin = o.fQATrackPhiMin;
\r
414 fQATrackPhiMax = o.fQATrackPhiMax;
\r
415 fCommonHistList = o.fCommonHistList;
\r
416 fh1EvtSelection = o.fh1EvtSelection;
\r
417 fh1VertexNContributors = o.fh1VertexNContributors;
\r
418 fh1VertexZ = o.fh1VertexZ;
\r
419 fh1EvtMult = o.fh1EvtMult;
\r
420 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
\r
421 fh1nGenJets = o.fh1nGenJets;
\r
427 //___________________________________________________________________________
\r
428 AliAnalysisTaskFragmentationFunction::~AliAnalysisTaskFragmentationFunction()
\r
436 //______________________________________________________________________________________________________
\r
437 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const char* name,
\r
438 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
\r
439 Int_t nPt, Float_t ptMin, Float_t ptMax,
\r
440 Int_t nXi, Float_t xiMin, Float_t xiMax,
\r
441 Int_t nZ , Float_t zMin , Float_t zMax )
\r
443 ,fNBinsJetPt(nJetPt)
\r
444 ,fJetPtMin(jetPtMin)
\r
445 ,fJetPtMax(jetPtMax)
\r
461 // default constructor
\r
465 //___________________________________________________________________________
\r
466 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
\r
468 ,fNBinsJetPt(copy.fNBinsJetPt)
\r
469 ,fJetPtMin(copy.fJetPtMin)
\r
470 ,fJetPtMax(copy.fJetPtMax)
\r
471 ,fNBinsPt(copy.fNBinsPt)
\r
472 ,fPtMin(copy.fPtMin)
\r
473 ,fPtMax(copy.fPtMax)
\r
474 ,fNBinsXi(copy.fNBinsXi)
\r
475 ,fXiMin(copy.fXiMin)
\r
476 ,fXiMax(copy.fXiMax)
\r
477 ,fNBinsZ(copy.fNBinsZ)
\r
478 ,fZMin(copy.fZMin)
\r
479 ,fZMax(copy.fZMax)
\r
480 ,fh2TrackPt(copy.fh2TrackPt)
\r
483 ,fh1JetPt(copy.fh1JetPt)
\r
486 // copy constructor
\r
489 //_______________________________________________________________________________________________________________________________________________________________
\r
490 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncHistos& o)
\r
495 TObject::operator=(o);
\r
496 fNBinsJetPt = o.fNBinsJetPt;
\r
497 fJetPtMin = o.fJetPtMin;
\r
498 fJetPtMax = o.fJetPtMax;
\r
499 fNBinsPt = o.fNBinsPt;
\r
500 fPtMin = o.fPtMin;
\r
501 fPtMax = o.fPtMax;
\r
502 fNBinsXi = o.fNBinsXi;
\r
503 fXiMin = o.fXiMin;
\r
504 fXiMax = o.fXiMax;
\r
505 fNBinsZ = o.fNBinsZ;
\r
508 fh2TrackPt = o.fh2TrackPt;
\r
511 fh1JetPt = o.fh1JetPt;
\r
518 //_________________________________________________________
\r
519 AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::~AliFragFuncHistos()
\r
523 if(fh1JetPt) delete fh1JetPt;
\r
524 if(fh2TrackPt) delete fh2TrackPt;
\r
525 if(fh2Xi) delete fh2Xi;
\r
526 if(fh2Z) delete fh2Z;
\r
529 //_________________________________________________________________
\r
530 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::DefineHistos()
\r
534 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fName.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
\r
535 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fName.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
\r
536 fh2Xi = new TH2F(Form("fh2FFXi%s",fName.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
\r
537 fh2Z = new TH2F(Form("fh2FFZ%s",fName.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
\r
539 AliAnalysisTaskFragmentationFunction::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
\r
540 AliAnalysisTaskFragmentationFunction::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
\r
541 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
\r
542 AliAnalysisTaskFragmentationFunction::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
\r
545 //_______________________________________________________________________________________________________________
\r
546 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t jetPt, Bool_t incrementJetPt)
\r
550 if(incrementJetPt) fh1JetPt->Fill(jetPt);
\r
551 fh2TrackPt->Fill(jetPt,trackPt);
\r
553 Double_t z = trackPt / jetPt;
\r
555 if(z>0) xi = TMath::Log(1/z);
\r
557 fh2Xi->Fill(jetPt,xi);
\r
558 fh2Z->Fill(jetPt,z);
\r
561 //_________________________________________________________________________________
\r
562 void AliAnalysisTaskFragmentationFunction::AliFragFuncHistos::AddToOutput(TList* list) const
\r
564 // add histos to list
\r
566 list->Add(fh1JetPt);
\r
568 list->Add(fh2TrackPt);
\r
574 //_________________________________________________________________________________________________________
\r
575 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
\r
576 Int_t nPt, Float_t ptMin, Float_t ptMax,
\r
577 Int_t nEta, Float_t etaMin, Float_t etaMax,
\r
578 Int_t nPhi, Float_t phiMin, Float_t phiMax)
\r
593 // default constructor
\r
596 //____________________________________________________________________________________
\r
597 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
\r
599 ,fNBinsPt(copy.fNBinsPt)
\r
600 ,fPtMin(copy.fPtMin)
\r
601 ,fPtMax(copy.fPtMax)
\r
602 ,fNBinsEta(copy.fNBinsEta)
\r
603 ,fEtaMin(copy.fEtaMin)
\r
604 ,fEtaMax(copy.fEtaMax)
\r
605 ,fNBinsPhi(copy.fNBinsPhi)
\r
606 ,fPhiMin(copy.fPhiMin)
\r
607 ,fPhiMax(copy.fPhiMax)
\r
608 ,fh2EtaPhi(copy.fh2EtaPhi)
\r
612 // copy constructor
\r
615 //________________________________________________________________________________________________________________________________________________________________________
\r
616 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos& o)
\r
621 TObject::operator=(o);
\r
622 fNBinsPt = o.fNBinsPt;
\r
625 fNBinsEta = o.fNBinsEta;
\r
626 fEtaMin = o.fEtaMin;
\r
627 fEtaMax = o.fEtaMax;
\r
628 fNBinsPhi = o.fNBinsPhi;
\r
629 fPhiMin = o.fPhiMin;
\r
630 fPhiMax = o.fPhiMax;
\r
631 fh2EtaPhi = o.fh2EtaPhi;
\r
639 //______________________________________________________________
\r
640 AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
\r
644 if(fh2EtaPhi) delete fh2EtaPhi;
\r
645 if(fh1Pt) delete fh1Pt;
\r
648 //____________________________________________________________________
\r
649 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::DefineHistos()
\r
651 // book jet QA histos
\r
653 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fName.Data()), Form("%s: #eta - #phi distribution", fName.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
\r
654 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fName.Data()), Form("%s: p_{T} distribution", fName.Data()), fNBinsPt, fPtMin, fPtMax);
\r
656 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
\r
657 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
\r
660 //____________________________________________________________________________________________________
\r
661 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
\r
663 // fill jet QA histos
\r
665 fh2EtaPhi->Fill( eta, phi);
\r
669 //____________________________________________________________________________________
\r
670 void AliAnalysisTaskFragmentationFunction::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
\r
672 // add histos to list
\r
674 list->Add(fh2EtaPhi);
\r
679 //___________________________________________________________________________________________________________
\r
680 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
\r
681 Int_t nPt, Float_t ptMin, Float_t ptMax,
\r
682 Int_t nEta, Float_t etaMin, Float_t etaMax,
\r
683 Int_t nPhi, Float_t phiMin, Float_t phiMax,
\r
695 ,fHighPtThreshold(ptThresh)
\r
698 ,fh2HighPtEtaPhi(0)
\r
701 // default constructor
\r
704 //__________________________________________________________________________________________
\r
705 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
\r
707 ,fNBinsPt(copy.fNBinsPt)
\r
708 ,fPtMin(copy.fPtMin)
\r
709 ,fPtMax(copy.fPtMax)
\r
710 ,fNBinsEta(copy.fNBinsEta)
\r
711 ,fEtaMin(copy.fEtaMin)
\r
712 ,fEtaMax(copy.fEtaMax)
\r
713 ,fNBinsPhi(copy.fNBinsPhi)
\r
714 ,fPhiMin(copy.fPhiMin)
\r
715 ,fPhiMax(copy.fPhiMax)
\r
716 ,fHighPtThreshold(copy.fHighPtThreshold)
\r
717 ,fh2EtaPhi(copy.fh2EtaPhi)
\r
719 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
\r
722 // copy constructor
\r
725 // _____________________________________________________________________________________________________________________________________________________________________________
\r
726 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos& o)
\r
731 TObject::operator=(o);
\r
732 fNBinsPt = o.fNBinsPt;
\r
735 fNBinsEta = o.fNBinsEta;
\r
736 fEtaMin = o.fEtaMin;
\r
737 fEtaMax = o.fEtaMax;
\r
738 fNBinsPhi = o.fNBinsPhi;
\r
739 fPhiMin = o.fPhiMin;
\r
740 fPhiMax = o.fPhiMax;
\r
741 fHighPtThreshold = o.fHighPtThreshold;
\r
742 fh2EtaPhi = o.fh2EtaPhi;
\r
744 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
\r
751 //___________________________________________________________________
\r
752 AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
\r
756 if(fh2EtaPhi) delete fh2EtaPhi;
\r
757 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
\r
758 if(fh1Pt) delete fh1Pt;
\r
761 //______________________________________________________________________
\r
762 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::DefineHistos()
\r
764 // book track QA histos
\r
766 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fName.Data()), Form("%s: #eta - #phi distribution", fName.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
\r
767 fh2HighPtEtaPhi = new TH2F(Form("fh2TrackQAHighPtEtaPhi%s", fName.Data()), Form("%s: #eta - #phi distribution for high-p_{T}", fName.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
\r
768 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fName.Data()), Form("%s: p_{T} distribution", fName.Data()), fNBinsPt, fPtMin, fPtMax);
\r
770 AliAnalysisTaskFragmentationFunction::SetProperties(fh2EtaPhi, "#eta", "#phi");
\r
771 AliAnalysisTaskFragmentationFunction::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
\r
772 AliAnalysisTaskFragmentationFunction::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
\r
775 //________________________________________________________________________________________________________
\r
776 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt)
\r
778 // fill track QA histos
\r
780 fh2EtaPhi->Fill( eta, phi);
\r
781 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi);
\r
782 fh1Pt->Fill( pt );
\r
785 //______________________________________________________________________________________
\r
786 void AliAnalysisTaskFragmentationFunction::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
\r
788 // add histos to list
\r
790 list->Add(fh2EtaPhi);
\r
791 list->Add(fh2HighPtEtaPhi);
\r
795 //__________________________________________________________________
\r
796 void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()
\r
798 // create output objects
\r
800 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()");
\r
802 // create list of tracks and jets
\r
804 fTracksRec = new TList();
\r
805 fTracksRec->SetOwner(kFALSE);
\r
807 fTracksRecCuts = new TList();
\r
808 fTracksRecCuts->SetOwner(kFALSE);
\r
810 fTracksGen = new TList();
\r
811 fTracksGen->SetOwner(kFALSE);
\r
813 fJetsRec = new TList();
\r
814 fJetsRec->SetOwner(kFALSE);
\r
816 fJetsRecCuts = new TList();
\r
817 fJetsRecCuts->SetOwner(kFALSE);
\r
819 fJetsGen = new TList();
\r
820 fJetsGen->SetOwner(kFALSE);
\r
822 // fJetsKine = new TList();
\r
823 // fJetsKine->SetOwner(kTRUE); // delete AOD jets using mom from Kine Tree via TList::Clear()
\r
827 // Create histograms / output container
\r
831 fCommonHistList = new TList();
\r
833 Bool_t oldStatus = TH1::AddDirectoryStatus();
\r
834 TH1::AddDirectory(kFALSE);
\r
838 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
\r
839 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 11,-.5, 10.5);
\r
840 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
\r
841 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",100,0.,100.);
\r
842 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
\r
843 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
\r
846 fQATrackHistosRec = new AliFragFuncQATrackHistos("Rec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
\r
847 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, fQATrackHighPtThreshold);
\r
848 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
\r
849 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, fQATrackHighPtThreshold);
\r
850 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
\r
851 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, fQATrackHighPtThreshold);
\r
854 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
\r
855 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
\r
856 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
\r
857 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
\r
858 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
\r
859 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
\r
860 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
\r
861 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
\r
862 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax, fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
\r
863 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
\r
866 fFFHistosRecCuts = new AliFragFuncHistos("RecCuts", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, fFFNBinsPt, fFFPtMin, fFFPtMax, fFFNBinsXi, fFFXiMin, fFFXiMax,
\r
867 fFFNBinsZ , fFFZMin , fFFZMax);
\r
868 fFFHistosRecLeading = new AliFragFuncHistos("RecLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, fFFNBinsPt, fFFPtMin, fFFPtMax, fFFNBinsXi, fFFXiMin, fFFXiMax,
\r
869 fFFNBinsZ , fFFZMin , fFFZMax);
\r
870 fFFHistosRecLeadingTrack = new AliFragFuncHistos("RecLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, fFFNBinsPt, fFFPtMin, fFFPtMax, fFFNBinsXi, fFFXiMin, fFFXiMax,
\r
871 fFFNBinsZ , fFFZMin , fFFZMax);
\r
872 fFFHistosGen = new AliFragFuncHistos("Gen", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, fFFNBinsPt, fFFPtMin, fFFPtMax, fFFNBinsXi, fFFXiMin, fFFXiMax,
\r
873 fFFNBinsZ , fFFZMin , fFFZMax);
\r
874 fFFHistosGenLeading = new AliFragFuncHistos("GenLeading", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, fFFNBinsPt, fFFPtMin, fFFPtMax, fFFNBinsXi, fFFXiMin, fFFXiMax,
\r
875 fFFNBinsZ , fFFZMin , fFFZMax);
\r
876 fFFHistosGenLeadingTrack = new AliFragFuncHistos("GenLeadingTrack", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, fFFNBinsPt, fFFPtMin, fFFPtMax, fFFNBinsXi, fFFXiMin, fFFXiMax,
\r
877 fFFNBinsZ , fFFZMin , fFFZMax);
\r
880 fQATrackHistosRec->DefineHistos();
\r
881 fQATrackHistosRecCuts->DefineHistos();
\r
882 fQATrackHistosGen->DefineHistos();
\r
884 fQAJetHistosRec->DefineHistos();
\r
885 fQAJetHistosRecCuts->DefineHistos();
\r
886 fQAJetHistosRecCutsLeading->DefineHistos();
\r
887 fQAJetHistosGen->DefineHistos();
\r
888 fQAJetHistosGenLeading->DefineHistos();
\r
890 fFFHistosRecCuts->DefineHistos();
\r
891 fFFHistosRecLeading->DefineHistos();
\r
892 fFFHistosRecLeadingTrack->DefineHistos();
\r
893 fFFHistosGen->DefineHistos();
\r
894 fFFHistosGenLeading->DefineHistos();
\r
895 fFFHistosGenLeadingTrack->DefineHistos();
\r
898 const Int_t saveLevel = 4;
\r
900 fCommonHistList->Add(fh1EvtSelection);
\r
901 fFFHistosRecCuts->AddToOutput(fCommonHistList);
\r
902 fFFHistosRecLeading->AddToOutput(fCommonHistList);
\r
903 fFFHistosRecLeadingTrack->AddToOutput(fCommonHistList);
\r
904 fFFHistosGen->AddToOutput(fCommonHistList);
\r
905 fFFHistosGenLeading->AddToOutput(fCommonHistList);
\r
906 fFFHistosGenLeadingTrack->AddToOutput(fCommonHistList);
\r
909 fQATrackHistosRec->AddToOutput(fCommonHistList);
\r
910 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
\r
911 fQATrackHistosGen->AddToOutput(fCommonHistList);
\r
913 fQAJetHistosRec->AddToOutput(fCommonHistList);
\r
914 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
\r
915 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
\r
916 fQAJetHistosGen->AddToOutput(fCommonHistList);
\r
917 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
\r
919 fCommonHistList->Add(fh1EvtMult);
\r
920 fCommonHistList->Add(fh1nRecJetsCuts);
\r
921 fCommonHistList->Add(fh1nGenJets);
\r
924 fCommonHistList->Add(fh1VertexNContributors);
\r
925 fCommonHistList->Add(fh1VertexZ);
\r
931 // =========== Switch on Sumw2 for all histos ===========
\r
932 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i) {
\r
933 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
\r
934 if (h1) h1->Sumw2();
\r
937 TH1::AddDirectory(oldStatus);
\r
940 //_______________________________________________
\r
941 void AliAnalysisTaskFragmentationFunction::Init()
\r
944 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::Init()");
\r
948 //_____________________________________________________________
\r
949 void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *)
\r
952 // Called for each event
\r
953 if(fDebug > 1) Printf("AliAnalysisTaskFragmentationFunction::UserExec()");
\r
956 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
\r
957 // Trigger selection
\r
959 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
\r
960 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
\r
961 if(inputHandler->IsEventSelected()&AliVEvent::kMB){
\r
962 if(fDebug > 1) Printf(" Trigger Selection: event ACCEPTED ... ");
\r
963 fh1EvtSelection->Fill(1.);
\r
965 fh1EvtSelection->Fill(0.);
\r
966 if(inputHandler->InheritsFrom("AliESDInputHandler")){ // PhysicsSelection only with ESD input
\r
967 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
\r
968 PostData(1, fCommonHistList);
\r
973 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
\r
975 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
\r
978 fMCEvent = MCEvent();
\r
980 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
\r
983 // get AOD event from input/ouput
\r
984 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
\r
985 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
\r
986 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
\r
987 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
\r
990 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
\r
991 if( handler && handler->InheritsFrom("AliAODHandler") ) {
\r
992 fAOD = ((AliAODHandler*)handler)->GetAOD();
\r
993 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
\r
998 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
\r
1003 // event selection (vertex) *****************************************
\r
1005 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
\r
1006 Int_t nTracksPrim = primVtx->GetNContributors();
\r
1007 fh1VertexNContributors->Fill(nTracksPrim);
\r
1009 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
\r
1011 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
\r
1012 fh1EvtSelection->Fill(2.);
\r
1013 PostData(1, fCommonHistList);
\r
1017 fh1VertexZ->Fill(primVtx->GetZ());
\r
1019 if(TMath::Abs(primVtx->GetZ())>10){
\r
1020 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
\r
1021 fh1EvtSelection->Fill(3.);
\r
1022 PostData(1, fCommonHistList);
\r
1026 TString primVtxName(primVtx->GetName());
\r
1028 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
\r
1029 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
\r
1030 fh1EvtSelection->Fill(4.);
\r
1031 PostData(1, fCommonHistList);
\r
1034 if (fDebug > 1) Printf("%s:%d primary vertex selection: event ACCEPTED ...",(char*)__FILE__,__LINE__);
\r
1035 fh1EvtSelection->Fill(5.);
\r
1038 //___ fetch jets __________________________________________________________________________
\r
1040 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
\r
1041 Int_t nRecJets = 0;
\r
1042 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
\r
1043 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
\r
1044 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
\r
1046 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
\r
1047 Int_t nRecJetsCuts = 0;
\r
1048 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
\r
1049 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
\r
1050 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
\r
1051 fh1nRecJetsCuts->Fill(nRecJetsCuts);
\r
1054 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
\r
1055 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
\r
1056 Int_t nGenJets = 0;
\r
1057 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
\r
1058 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
\r
1059 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
\r
1060 fh1nGenJets->Fill(nGenJets);
\r
1063 //____ fetch particles __________________________________________________________
\r
1065 Int_t nT = GetListOfTracks(fTracksRec, kTrackAOD);
\r
1066 Int_t nRecPart = 0;
\r
1067 if(nT>=0) nRecPart = fTracksRec->GetEntries();
\r
1068 if(fDebug>2)Printf("%s:%d Selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
\r
1069 if(nRecPart != nT) Printf("%s:%d Mismatch selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart);
\r
1072 Int_t nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
\r
1073 Int_t nRecPartCuts = 0;
\r
1074 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
\r
1075 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
\r
1076 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
\r
1077 fh1EvtMult->Fill(nRecPartCuts);
\r
1080 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
\r
1081 Int_t nGenPart = 0;
\r
1082 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
\r
1083 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
\r
1084 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
\r
1087 //____ analysis, fill histos ___________________________________________________
\r
1089 // loop over tracks
\r
1091 for(Int_t it=0; it<nRecPart; ++it){
\r
1092 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRec->At(it));
\r
1093 fQATrackHistosRec->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
\r
1095 for(Int_t it=0; it<nRecPartCuts; ++it){
\r
1096 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
\r
1097 fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
\r
1099 for(Int_t it=0; it<nGenPart; ++it){
\r
1100 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
\r
1101 fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
\r
1106 for(Int_t ij=0; ij<nRecJets; ++ij){
\r
1108 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
\r
1109 fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
\r
1113 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
\r
1115 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRecCuts->At(ij));
\r
1116 fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
\r
1118 if(ij==0){ // leading jet
\r
1120 fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt() );
\r
1122 TList* jettracklist = new TList();
\r
1123 Double_t sumPt = 0.;
\r
1124 Float_t leadTrackPt = 0.;
\r
1126 if(GetFFRadius()<=0){
\r
1127 GetJetTracksTrackrefs(jettracklist, jet);
\r
1129 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet, GetFFRadius(), sumPt);
\r
1132 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
\r
1133 Float_t trackPt = (dynamic_cast<AliVParticle*> (jettracklist->At(it)))->Pt();
\r
1134 Float_t jetPt = jet->Pt();
\r
1135 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
\r
1137 fFFHistosRecCuts->FillFF( trackPt, jetPt, incrementJetPt);
\r
1140 leadTrackPt = trackPt;
\r
1141 fFFHistosRecLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);
\r
1143 fFFHistosRecLeading->FillFF( trackPt, leadTrackPt , incrementJetPt);
\r
1146 delete jettracklist;
\r
1151 for(Int_t ij=0; ij<nGenJets; ++ij){
\r
1153 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
\r
1154 fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
\r
1156 if(ij==0){ // leading jet
\r
1158 fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
\r
1160 TList* jettracklist = new TList();
\r
1161 Double_t sumPt = 0.;
\r
1162 Float_t leadTrackPt = 0.;
\r
1164 if(GetFFRadius()<=0){
\r
1165 GetJetTracksTrackrefs(jettracklist, jet);
\r
1167 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt);
\r
1170 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
\r
1171 Float_t trackPt = (dynamic_cast<AliVParticle*>(jettracklist->At(it)))->Pt();
\r
1172 Float_t jetPt = jet->Pt();
\r
1173 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
\r
1175 fFFHistosGen->FillFF( trackPt, jetPt, incrementJetPt);
\r
1178 leadTrackPt = trackPt;
\r
1179 fFFHistosGenLeadingTrack->FillFF( leadTrackPt, jetPt, kTRUE);
\r
1181 fFFHistosGenLeading->FillFF( trackPt, leadTrackPt, incrementJetPt);
\r
1184 delete jettracklist;
\r
1188 fTracksRec->Clear();
\r
1189 fTracksRecCuts->Clear();
\r
1190 fTracksGen->Clear();
\r
1191 fJetsRec->Clear();
\r
1192 fJetsRecCuts->Clear();
\r
1193 fJetsGen->Clear();
\r
1195 //Post output data.
\r
1196 PostData(1, fCommonHistList);
\r
1200 //______________________________________________________________
\r
1201 void AliAnalysisTaskFragmentationFunction::Terminate(Option_t *)
\r
1205 if(fDebug > 1) printf("AliAnalysisTaskFragmentationFunction::Terminate() \n");
\r
1208 //_________________________________________________________________________________
\r
1209 Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t type)
\r
1211 // fill list of tracks selected according to type
\r
1213 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
\r
1216 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
\r
1220 if(type==kTrackUndef) return -1;
\r
1223 if(type==kTrackAODCuts || type==kTrackAOD){
\r
1225 // all rec. tracks, esd filter mask, eta range
\r
1226 if(!fAOD) return -1;
\r
1228 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
\r
1229 AliAODTrack *tr = fAOD->GetTrack(it);
\r
1231 if(type == kTrackAODCuts){
\r
1232 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
\r
1233 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
\r
1234 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
\r
1235 if(tr->Pt() < fTrackPtCut) continue;
\r
1241 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
\r
1242 // kine particles, all or rather charged
\r
1243 if(!fMCEvent) return iCount;
\r
1245 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
\r
1246 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
\r
1248 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
\r
1249 if(part->Charge()==0) continue;
\r
1251 if(type == kTrackKineChargedAcceptance &&
\r
1252 ( part->Eta() < fTrackEtaMin
\r
1253 || part->Eta() > fTrackEtaMax
\r
1254 || part->Phi() < fTrackPhiMin
\r
1255 || part->Phi() > fTrackPhiMax
\r
1256 || part->Pt() < fTrackPtCut)) continue;
\r
1263 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance) {
\r
1264 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
\r
1265 if(!fAOD) return -1;
\r
1267 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
\r
1268 if(!tca)return iCount;
\r
1270 for(int it=0; it<tca->GetEntriesFast(); ++it){
\r
1271 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
\r
1272 if(!part->IsPhysicalPrimary())continue;
\r
1274 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance){
\r
1275 if(part->Charge()==0) continue;
\r
1276 if(type==kTrackAODMCChargedAcceptance &&
\r
1277 ( part->Eta() > fTrackEtaMax
\r
1278 || part->Eta() < fTrackEtaMin
\r
1279 || part->Phi() > fTrackPhiMax
\r
1280 || part->Phi() < fTrackPhiMin
\r
1281 || part->Pt() < fTrackPtCut)) continue;
\r
1293 // _______________________________________________________________________________
\r
1294 Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t type)
\r
1296 // fill list of jets selected according to type
\r
1299 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
\r
1303 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
\r
1305 if(fBranchRecJets.Length()==0){
\r
1306 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
\r
1307 if(fDebug>1)fAOD->Print();
\r
1311 TClonesArray *aodRecJets = 0x0;
\r
1312 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fBranchRecJets.Data()));
\r
1313 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fBranchRecJets.Data()));
\r
1316 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s found", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
\r
1318 if(fDebug>1)fAOD->Print();
\r
1322 Int_t nRecJets = 0;
\r
1324 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
\r
1326 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
\r
1327 if(!tmp) continue;
\r
1329 if( tmp->Pt() < fJetPtCut ) continue;
\r
1330 if( type == kJetsRecAcceptance &&
\r
1331 ( tmp->Eta() < fJetEtaMin
\r
1332 || tmp->Eta() > fJetEtaMax
\r
1333 || tmp->Phi() < fJetPhiMin
\r
1334 || tmp->Phi() > fJetPhiMax )) continue;
\r
1344 else if(type == kJetsKine || type == kJetsKineAcceptance){
\r
1347 Int_t nGenJets = 0;
\r
1350 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
\r
1354 AliGenPythiaEventHeader* pythiaGenHeader = AliAnalysisHelperJetTasks::GetPythiaEventHeader(fMCEvent);
\r
1355 if(!pythiaGenHeader){
\r
1356 Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
\r
1360 // fetch the pythia generated jets
\r
1361 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
\r
1364 AliAODJet *jet = new AliAODJet();
\r
1365 pythiaGenHeader->TriggerJet(ip, p);
\r
1366 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
\r
1368 if( type == kJetsKineAcceptance &&
\r
1369 ( jet->Eta() < fJetEtaMin
\r
1370 || jet->Eta() > fJetEtaMax
\r
1371 || jet->Phi() < fJetPhiMin
\r
1372 || jet->Phi() > fJetPhiMax )) continue;
\r
1380 else if(type == kJetsGen || type == kJetsGenAcceptance ){
\r
1382 if(fBranchGenJets.Length()==0){
\r
1383 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
\r
1387 TClonesArray *aodGenJets = 0x0;
\r
1388 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fBranchGenJets.Data()));
\r
1389 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAOD->GetList()->FindObject(fBranchGenJets.Data()));
\r
1393 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
\r
1395 if(fDebug>1)fAOD->Print();
\r
1399 Int_t nGenJets = 0;
\r
1401 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
\r
1403 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
\r
1404 if(!tmp) continue;
\r
1406 if( tmp->Pt() < fJetPtCut ) continue;
\r
1407 if( type == kJetsGenAcceptance &&
\r
1408 ( tmp->Eta() < fJetEtaMin
\r
1409 || tmp->Eta() > fJetEtaMax
\r
1410 || tmp->Phi() < fJetPhiMin
\r
1411 || tmp->Phi() > fJetPhiMax )) continue;
\r
1421 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
\r
1427 // __________________________________________________________________________________________
\r
1428 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
\r
1430 //Set properties of histos (x and y title)
\r
1434 h->GetXaxis()->SetTitleColor(1);
\r
1435 h->GetYaxis()->SetTitleColor(1);
\r
1438 // _________________________________________________________________________________________________________
\r
1439 void AliAnalysisTaskFragmentationFunction::SetProperties(TH2* h,const char* x, const char* y, const char* z)
\r
1441 //Set properties of histos (x,y and z title)
\r
1446 h->GetXaxis()->SetTitleColor(1);
\r
1447 h->GetYaxis()->SetTitleColor(1);
\r
1448 h->GetZaxis()->SetTitleColor(1);
\r
1451 // ________________________________________________________________________________________________________________________________________________________
\r
1452 void AliAnalysisTaskFragmentationFunction::GetJetTracksPointing(TList* inputlist, TList* outputlist, AliAODJet* jet, const Double_t radius,Double_t& sumPt)
\r
1454 // fill list of tracks in cone around jet axis
\r
1458 Double_t jetMom[3];
\r
1459 jet->PxPyPz(jetMom);
\r
1460 TVector3 jet3mom(jetMom);
\r
1462 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
\r
1464 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
\r
1466 Double_t trackMom[3];
\r
1467 track->PxPyPz(trackMom);
\r
1468 TVector3 track3mom(trackMom);
\r
1470 Double_t dR = jet3mom.DeltaR(track3mom);
\r
1474 outputlist->Add(track);
\r
1476 sumPt += track->Pt();
\r
1480 outputlist->Sort();
\r
1483 // ___________________________________________________________________________________________
\r
1484 void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, AliAODJet* jet)
\r
1486 // list of jet tracks from trackrefs
\r
1488 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
\r
1490 for (Int_t itrack=0; itrack<nTracks; itrack++) {
\r
1492 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
\r
1494 AliError("expected ref track not found ");
\r