1 // *************************************************************************
3 // * Task for Fragmentation Function Analysis in PWG4 Jet Task Force Train *
5 // *************************************************************************
8 /**************************************************************************
9 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
11 * Author: The ALICE Off-line Project. *
12 * Contributors are mentioned in the code where appropriate. *
14 * Permission to use, copy, modify and distribute this software and its *
15 * documentation strictly for non-commercial purposes is hereby granted *
16 * without fee, provided that the above copyright notice appears in all *
17 * copies and that both the copyright notice and this permission notice *
18 * appear in the supporting documentation. The authors make no claims *
19 * about the suitability of this software for any purpose. It is *
20 * provided "as is" without express or implied warranty. *
21 **************************************************************************/
30 #include "THnSparse.h"
37 #include "AliAODInputHandler.h"
38 #include "AliAODHandler.h"
39 #include "AliESDEvent.h"
40 #include "AliESDInputHandler.h"
41 #include "AliAODMCParticle.h"
42 #include "AliAODJet.h"
43 #include "AliAODJetEventBackground.h"
44 #include "AliGenPythiaEventHeader.h"
45 #include "AliGenHijingEventHeader.h"
46 #include "AliInputEventHandler.h"
48 #include "AliAnalysisHelperJetTasks.h"
49 #include "AliAnalysisManager.h"
50 #include "AliAnalysisTaskSE.h"
51 #include "AliVParticle.h"
52 #include "AliVEvent.h"
53 #include "AliPIDResponse.h"
54 #include "AliIDFFUtils.h"
56 #include "AliAnalysisTaskIDFFTCF.h"
61 ClassImp(AliAnalysisTaskIDFFTCF)
63 Bool_t AliAnalysisTaskIDFFTCF::fkDump = kFALSE;
65 //____________________________________________________________________________
66 AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF()
73 ,fBranchRecJets("jets")
78 ,fUseAODInputJets(kTRUE)
80 ,fUsePhysicsSelection(kTRUE)
85 ,fTPCCutMode(kPIDNone)
109 ,fTracksAODMCCharged(0)
110 ,fTracksAODMCChargedSec(0)
111 ,fTracksRecQualityCuts(0)
116 ,fQATrackHistosRecCuts(0)
117 ,fQATrackHistosGen(0)
119 ,fQAJetHistosRecCuts(0)
120 ,fQAJetHistosRecCutsLeading(0)
122 ,fQAJetHistosGenLeading(0)
123 ,fQAJetHistosRecEffLeading(0)
124 ,fFFHistosRecCutsInc(0)
125 ,fFFHistosRecCutsIncPi(0)
126 ,fFFHistosRecCutsIncPro(0)
127 ,fFFHistosRecCutsIncK(0)
128 ,fFFHistosRecCutsIncEl(0)
129 ,fFFHistosRecCutsIncMu(0)
130 ,fFFHistosRecLeadingTrack(0)
132 ,fFFHistosGenIncPi(0)
133 ,fFFHistosGenIncPro(0)
135 ,fFFHistosGenIncEl(0)
136 ,fFFHistosGenIncMu(0)
137 ,fFFHistosGenLeadingTrack(0)
138 ,fQATrackHighPtThreshold(0)
173 ,fh1VertexNContributors(0)
184 ,fh2PtRecVsGenPrim(0)
186 ,fQATrackHistosRecEffGen(0)
187 ,fQATrackHistosRecEffRec(0)
188 ,fQATrackHistosSecRec(0)
189 ,fQATrackHistosSecRecSSc(0)
190 ,fQATrackHistosRecEffGenPi(0)
191 ,fQATrackHistosRecEffGenPro(0)
192 ,fQATrackHistosRecEffGenK(0)
193 ,fQATrackHistosRecEffGenEl(0)
194 ,fQATrackHistosRecEffGenMu(0)
195 ,fQATrackHistosRecEffRecPi(0)
196 ,fQATrackHistosRecEffRecPro(0)
197 ,fQATrackHistosRecEffRecK(0)
198 ,fQATrackHistosRecEffRecEl(0)
199 ,fQATrackHistosRecEffRecMu(0)
200 ,fQATrackHistosRecEffRecProGFL(0)
201 ,fQATrackHistosRecEffRecKGFL(0)
202 ,fQATrackHistosSecRecPi(0)
203 ,fQATrackHistosSecRecPro(0)
204 ,fQATrackHistosSecRecK(0)
205 ,fQATrackHistosSecRecEl(0)
206 ,fQATrackHistosSecRecMu(0)
207 ,fQATrackHistosSecRecProGFL(0)
208 ,fQATrackHistosSecRecKGFL(0)
209 ,fQATrackHistosSecRecPiSSc(0)
210 ,fQATrackHistosSecRecProSSc(0)
211 ,fQATrackHistosSecRecKSSc(0)
212 ,fQATrackHistosSecRecElSSc(0)
213 ,fQATrackHistosSecRecMuSSc(0)
214 ,fQATrackHistosSecRecProGFLSSc(0)
215 ,fQATrackHistosSecRecKGFLSSc(0)
216 ,fFFHistosRecEffRec(0)
218 ,fFFHistosSecRecSSc(0)
219 ,fFFHistosRecEffRecPi(0)
220 ,fFFHistosRecEffRecPro(0)
221 ,fFFHistosRecEffRecK(0)
222 ,fFFHistosRecEffRecEl(0)
223 ,fFFHistosRecEffRecMu(0)
224 ,fFFHistosRecEffRecProGFL(0)
225 ,fFFHistosRecEffRecKGFL(0)
226 ,fFFHistosSecRecPi(0)
227 ,fFFHistosSecRecPro(0)
229 ,fFFHistosSecRecEl(0)
230 ,fFFHistosSecRecMu(0)
231 ,fFFHistosSecRecProGFL(0)
232 ,fFFHistosSecRecKGFL(0)
233 ,fFFHistosSecRecPiSSc(0)
234 ,fFFHistosSecRecProSSc(0)
235 ,fFFHistosSecRecKSSc(0)
236 ,fFFHistosSecRecElSSc(0)
237 ,fFFHistosSecRecMuSSc(0)
238 ,fFFHistosSecRecProGFLSSc(0)
239 ,fFFHistosSecRecKGFLSSc(0)
242 // default constructor
245 //_______________________________________________________________________________________________
246 AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF(const char *name)
247 : AliAnalysisTaskSE(name)
253 ,fBranchRecJets("jets")
258 ,fUseAODInputJets(kTRUE)
260 ,fUsePhysicsSelection(kTRUE)
261 ,fEvtSelectionMask(0)
264 ,fLeadingJets(kFALSE)
265 ,fTPCCutMode(kPIDNone)
289 ,fTracksAODMCCharged(0)
290 ,fTracksAODMCChargedSec(0)
291 ,fTracksRecQualityCuts(0)
296 ,fQATrackHistosRecCuts(0)
297 ,fQATrackHistosGen(0)
299 ,fQAJetHistosRecCuts(0)
300 ,fQAJetHistosRecCutsLeading(0)
302 ,fQAJetHistosGenLeading(0)
303 ,fQAJetHistosRecEffLeading(0)
304 ,fFFHistosRecCutsInc(0)
305 ,fFFHistosRecCutsIncPi(0)
306 ,fFFHistosRecCutsIncPro(0)
307 ,fFFHistosRecCutsIncK(0)
308 ,fFFHistosRecCutsIncEl(0)
309 ,fFFHistosRecCutsIncMu(0)
310 ,fFFHistosRecLeadingTrack(0)
312 ,fFFHistosGenIncPi(0)
313 ,fFFHistosGenIncPro(0)
315 ,fFFHistosGenIncEl(0)
316 ,fFFHistosGenIncMu(0)
317 ,fFFHistosGenLeadingTrack(0)
318 ,fQATrackHighPtThreshold(0)
353 ,fh1VertexNContributors(0)
364 ,fh2PtRecVsGenPrim(0)
366 ,fQATrackHistosRecEffGen(0)
367 ,fQATrackHistosRecEffRec(0)
368 ,fQATrackHistosSecRec(0)
369 ,fQATrackHistosSecRecSSc(0)
370 ,fQATrackHistosRecEffGenPi(0)
371 ,fQATrackHistosRecEffGenPro(0)
372 ,fQATrackHistosRecEffGenK(0)
373 ,fQATrackHistosRecEffGenEl(0)
374 ,fQATrackHistosRecEffGenMu(0)
375 ,fQATrackHistosRecEffRecPi(0)
376 ,fQATrackHistosRecEffRecPro(0)
377 ,fQATrackHistosRecEffRecK(0)
378 ,fQATrackHistosRecEffRecEl(0)
379 ,fQATrackHistosRecEffRecMu(0)
380 ,fQATrackHistosRecEffRecProGFL(0)
381 ,fQATrackHistosRecEffRecKGFL(0)
382 ,fQATrackHistosSecRecPi(0)
383 ,fQATrackHistosSecRecPro(0)
384 ,fQATrackHistosSecRecK(0)
385 ,fQATrackHistosSecRecEl(0)
386 ,fQATrackHistosSecRecMu(0)
387 ,fQATrackHistosSecRecProGFL(0)
388 ,fQATrackHistosSecRecKGFL(0)
389 ,fQATrackHistosSecRecPiSSc(0)
390 ,fQATrackHistosSecRecProSSc(0)
391 ,fQATrackHistosSecRecKSSc(0)
392 ,fQATrackHistosSecRecElSSc(0)
393 ,fQATrackHistosSecRecMuSSc(0)
394 ,fQATrackHistosSecRecProGFLSSc(0)
395 ,fQATrackHistosSecRecKGFLSSc(0)
396 ,fFFHistosRecEffRec(0)
398 ,fFFHistosSecRecSSc(0)
399 ,fFFHistosRecEffRecPi(0)
400 ,fFFHistosRecEffRecPro(0)
401 ,fFFHistosRecEffRecK(0)
402 ,fFFHistosRecEffRecEl(0)
403 ,fFFHistosRecEffRecMu(0)
404 ,fFFHistosRecEffRecProGFL(0)
405 ,fFFHistosRecEffRecKGFL(0)
406 ,fFFHistosSecRecPi(0)
407 ,fFFHistosSecRecPro(0)
409 ,fFFHistosSecRecEl(0)
410 ,fFFHistosSecRecMu(0)
411 ,fFFHistosSecRecProGFL(0)
412 ,fFFHistosSecRecKGFL(0)
413 ,fFFHistosSecRecPiSSc(0)
414 ,fFFHistosSecRecProSSc(0)
415 ,fFFHistosSecRecKSSc(0)
416 ,fFFHistosSecRecElSSc(0)
417 ,fFFHistosSecRecMuSSc(0)
418 ,fFFHistosSecRecProGFLSSc(0)
419 ,fFFHistosSecRecKGFLSSc(0)
424 DefineOutput(1,TList::Class());
427 fStream = new TTreeStream("tree");
428 DefineOutput(2, TTree::Class());
429 fTree= fStream->GetTree();
433 //__________________________________________________________________________________________________________________________
434 AliAnalysisTaskIDFFTCF::AliAnalysisTaskIDFFTCF(const AliAnalysisTaskIDFFTCF ©)
435 : AliAnalysisTaskSE()
438 ,fAODJets(copy.fAODJets)
439 ,fAODExtension(copy.fAODExtension)
440 ,fNonStdFile(copy.fNonStdFile)
441 ,fBranchRecJets(copy.fBranchRecJets)
442 ,fBranchGenJets(copy.fBranchGenJets)
443 ,fTrackTypeGen(copy.fTrackTypeGen)
444 ,fJetTypeGen(copy.fJetTypeGen)
445 ,fJetTypeRecEff(copy.fJetTypeRecEff)
446 ,fUseAODInputJets(copy.fUseAODInputJets)
447 ,fFilterMask(copy.fFilterMask)
448 ,fUsePhysicsSelection(copy.fUsePhysicsSelection)
449 ,fEvtSelectionMask(copy.fEvtSelectionMask)
450 ,fEventClass(copy.fEventClass)
451 ,fMaxVertexZ(copy.fMaxVertexZ)
452 ,fLeadingJets(copy.fLeadingJets)
453 ,fTPCCutMode(copy.fTPCCutMode)
454 ,fTOFCutMode(copy.fTOFCutMode)
455 ,fStream(copy.fStream)
457 ,fTrackPtCut(copy.fTrackPtCut)
458 ,fTrackEtaMin(copy.fTrackEtaMin)
459 ,fTrackEtaMax(copy.fTrackEtaMax)
460 ,fTrackPhiMin(copy.fTrackPhiMin)
461 ,fTrackPhiMax(copy.fTrackPhiMax)
462 ,fJetPtCut(copy.fJetPtCut)
463 ,fJetEtaMin(copy.fJetEtaMin)
464 ,fJetEtaMax(copy.fJetEtaMax)
465 ,fJetPhiMin(copy.fJetPhiMin)
466 ,fJetPhiMax(copy.fJetPhiMax)
467 ,fFFRadius(copy.fFFRadius)
468 ,fFFMinLTrackPt(copy.fFFMinLTrackPt)
469 ,fFFMaxTrackPt(copy.fFFMaxTrackPt)
470 ,fFFMinnTracks(copy.fFFMinnTracks)
471 ,fQAMode(copy.fQAMode)
472 ,fFFMode(copy.fFFMode)
473 ,fEffMode(copy.fEffMode)
474 ,fAvgTrials(copy.fAvgTrials)
475 ,fTracksRecCuts(copy.fTracksRecCuts)
476 ,fTracksGen(copy.fTracksGen)
477 ,fTracksAODMCCharged(copy.fTracksAODMCCharged)
478 ,fTracksAODMCChargedSec(copy.fTracksAODMCChargedSec)
479 ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts)
480 ,fJetsRec(copy.fJetsRec)
481 ,fJetsRecCuts(copy.fJetsRecCuts)
482 ,fJetsGen(copy.fJetsGen)
483 ,fJetsRecEff(copy.fJetsRecEff)
484 ,fQATrackHistosRecCuts(copy.fQATrackHistosRecCuts)
485 ,fQATrackHistosGen(copy.fQATrackHistosGen)
486 ,fQAJetHistosRec(copy.fQAJetHistosRec)
487 ,fQAJetHistosRecCuts(copy.fQAJetHistosRecCuts)
488 ,fQAJetHistosRecCutsLeading(copy.fQAJetHistosRecCutsLeading)
489 ,fQAJetHistosGen(copy.fQAJetHistosGen)
490 ,fQAJetHistosGenLeading(copy.fQAJetHistosGenLeading)
491 ,fQAJetHistosRecEffLeading(copy.fQAJetHistosRecEffLeading)
492 ,fFFHistosRecCutsInc(copy.fFFHistosRecCutsInc)
493 ,fFFHistosRecCutsIncPi(copy.fFFHistosRecCutsIncPi)
494 ,fFFHistosRecCutsIncPro(copy.fFFHistosRecCutsIncPro)
495 ,fFFHistosRecCutsIncK(copy.fFFHistosRecCutsIncK)
496 ,fFFHistosRecCutsIncEl(copy.fFFHistosRecCutsIncEl)
497 ,fFFHistosRecCutsIncMu(copy.fFFHistosRecCutsIncMu)
498 ,fFFHistosRecLeadingTrack(copy.fFFHistosRecLeadingTrack)
499 ,fFFHistosGenInc(copy.fFFHistosGenInc)
500 ,fFFHistosGenIncPi(copy.fFFHistosGenIncPi)
501 ,fFFHistosGenIncPro(copy.fFFHistosGenIncPro)
502 ,fFFHistosGenIncK(copy.fFFHistosGenIncK)
503 ,fFFHistosGenIncEl(copy.fFFHistosGenIncEl)
504 ,fFFHistosGenIncMu(copy.fFFHistosGenIncMu)
505 ,fFFHistosGenLeadingTrack(copy.fFFHistosGenLeadingTrack)
506 ,fQATrackHighPtThreshold(copy.fQATrackHighPtThreshold)
507 ,fTHnIDFF(copy.fTHnIDFF)
508 ,fTHnIncl(copy.fTHnIncl)
509 ,fFFNBinsJetPt(copy.fFFNBinsJetPt)
510 ,fFFJetPtMin(copy.fFFJetPtMin)
511 ,fFFJetPtMax(copy.fFFJetPtMax)
512 ,fFFNBinsPt(copy.fFFNBinsPt)
513 ,fFFPtMin(copy.fFFPtMin)
514 ,fFFPtMax(copy.fFFPtMax)
515 ,fFFNBinsXi(copy.fFFNBinsXi)
516 ,fFFXiMin(copy.fFFXiMin)
517 ,fFFXiMax(copy.fFFXiMax)
518 ,fFFNBinsZ(copy.fFFNBinsZ)
519 ,fFFZMin(copy.fFFZMin)
520 ,fFFZMax(copy.fFFZMax)
521 ,fQAJetNBinsPt(copy.fQAJetNBinsPt)
522 ,fQAJetPtMin(copy.fQAJetPtMin)
523 ,fQAJetPtMax(copy.fQAJetPtMax)
524 ,fQAJetNBinsEta(copy.fQAJetNBinsEta)
525 ,fQAJetEtaMin(copy.fQAJetEtaMin)
526 ,fQAJetEtaMax(copy.fQAJetEtaMax)
527 ,fQAJetNBinsPhi(copy.fQAJetNBinsPhi)
528 ,fQAJetPhiMin(copy.fQAJetPhiMin)
529 ,fQAJetPhiMax(copy.fQAJetPhiMax)
530 ,fQATrackNBinsPt(copy.fQATrackNBinsPt)
531 ,fQATrackPtMin(copy.fQATrackPtMin)
532 ,fQATrackPtMax(copy.fQATrackPtMax)
533 ,fQATrackNBinsEta(copy.fQATrackNBinsEta)
534 ,fQATrackEtaMin(copy.fQATrackEtaMin)
535 ,fQATrackEtaMax(copy.fQATrackEtaMax)
536 ,fQATrackNBinsPhi(copy.fQATrackNBinsPhi)
537 ,fQATrackPhiMin(copy.fQATrackPhiMin)
538 ,fQATrackPhiMax(copy.fQATrackPhiMax)
539 ,fCommonHistList(copy.fCommonHistList)
540 ,fh1EvtSelection(copy.fh1EvtSelection)
541 ,fh1VertexNContributors(copy.fh1VertexNContributors)
542 ,fh1VertexZ(copy.fh1VertexZ)
543 ,fh1EvtMult(copy.fh1EvtMult)
544 ,fh1EvtCent(copy.fh1EvtCent)
545 ,fh1Xsec(copy.fh1Xsec)
546 ,fh1Trials(copy.fh1Trials)
547 ,fh1PtHard(copy.fh1PtHard)
548 ,fh1PtHardTrials(copy.fh1PtHardTrials)
549 ,fh1nRecJetsCuts(copy.fh1nRecJetsCuts)
550 ,fh1nGenJets(copy.fh1nGenJets)
551 ,fh1nRecEffJets(copy.fh1nRecEffJets)
552 ,fh2PtRecVsGenPrim(copy.fh2PtRecVsGenPrim)
553 ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec)
554 ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen)
555 ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec)
556 ,fQATrackHistosSecRec(copy.fQATrackHistosSecRec)
557 ,fQATrackHistosSecRecSSc(copy.fQATrackHistosSecRecSSc)
558 ,fQATrackHistosRecEffGenPi(copy.fQATrackHistosRecEffGenPi)
559 ,fQATrackHistosRecEffGenPro(copy.fQATrackHistosRecEffGenPro)
560 ,fQATrackHistosRecEffGenK(copy.fQATrackHistosRecEffGenK)
561 ,fQATrackHistosRecEffGenEl(copy.fQATrackHistosRecEffGenEl)
562 ,fQATrackHistosRecEffGenMu(copy.fQATrackHistosRecEffGenMu)
563 ,fQATrackHistosRecEffRecPi(copy.fQATrackHistosRecEffRecPi)
564 ,fQATrackHistosRecEffRecPro(copy.fQATrackHistosRecEffRecPro)
565 ,fQATrackHistosRecEffRecK(copy.fQATrackHistosRecEffRecK)
566 ,fQATrackHistosRecEffRecEl(copy.fQATrackHistosRecEffRecEl)
567 ,fQATrackHistosRecEffRecMu(copy.fQATrackHistosRecEffRecMu)
568 ,fQATrackHistosRecEffRecProGFL(copy.fQATrackHistosRecEffRecProGFL)
569 ,fQATrackHistosRecEffRecKGFL(copy.fQATrackHistosRecEffRecKGFL)
570 ,fQATrackHistosSecRecPi(copy.fQATrackHistosSecRecPi)
571 ,fQATrackHistosSecRecPro(copy.fQATrackHistosSecRecPro)
572 ,fQATrackHistosSecRecK(copy.fQATrackHistosSecRecK)
573 ,fQATrackHistosSecRecEl(copy.fQATrackHistosSecRecEl)
574 ,fQATrackHistosSecRecMu(copy.fQATrackHistosSecRecMu)
575 ,fQATrackHistosSecRecProGFL(copy.fQATrackHistosSecRecProGFL)
576 ,fQATrackHistosSecRecKGFL(copy.fQATrackHistosSecRecKGFL)
577 ,fQATrackHistosSecRecPiSSc(copy.fQATrackHistosSecRecPiSSc)
578 ,fQATrackHistosSecRecProSSc(copy.fQATrackHistosSecRecProSSc)
579 ,fQATrackHistosSecRecKSSc(copy.fQATrackHistosSecRecKSSc)
580 ,fQATrackHistosSecRecElSSc(copy.fQATrackHistosSecRecElSSc)
581 ,fQATrackHistosSecRecMuSSc(copy.fQATrackHistosSecRecMuSSc)
582 ,fQATrackHistosSecRecProGFLSSc(copy.fQATrackHistosSecRecProGFLSSc)
583 ,fQATrackHistosSecRecKGFLSSc(copy.fQATrackHistosSecRecKGFLSSc)
584 ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec)
585 ,fFFHistosSecRec(copy.fFFHistosSecRec)
586 ,fFFHistosSecRecSSc(copy.fFFHistosSecRecSSc)
587 ,fFFHistosRecEffRecPi(copy.fFFHistosRecEffRecPi)
588 ,fFFHistosRecEffRecPro(copy.fFFHistosRecEffRecPro)
589 ,fFFHistosRecEffRecK(copy.fFFHistosRecEffRecK)
590 ,fFFHistosRecEffRecEl(copy.fFFHistosRecEffRecEl)
591 ,fFFHistosRecEffRecMu(copy.fFFHistosRecEffRecMu)
592 ,fFFHistosRecEffRecProGFL(copy.fFFHistosRecEffRecProGFL)
593 ,fFFHistosRecEffRecKGFL(copy.fFFHistosRecEffRecKGFL)
594 ,fFFHistosSecRecPi(copy.fFFHistosSecRecPi)
595 ,fFFHistosSecRecPro(copy.fFFHistosSecRecPro)
596 ,fFFHistosSecRecK(copy.fFFHistosSecRecK)
597 ,fFFHistosSecRecEl(copy.fFFHistosSecRecEl)
598 ,fFFHistosSecRecMu(copy.fFFHistosSecRecMu)
599 ,fFFHistosSecRecProGFL(copy.fFFHistosSecRecProGFL)
600 ,fFFHistosSecRecKGFL(copy.fFFHistosSecRecKGFL)
601 ,fFFHistosSecRecPiSSc(copy.fFFHistosSecRecPiSSc)
602 ,fFFHistosSecRecProSSc(copy.fFFHistosSecRecProSSc)
603 ,fFFHistosSecRecKSSc(copy.fFFHistosSecRecKSSc)
604 ,fFFHistosSecRecElSSc(copy.fFFHistosSecRecElSSc)
605 ,fFFHistosSecRecMuSSc(copy.fFFHistosSecRecMuSSc)
606 ,fFFHistosSecRecProGFLSSc(copy.fFFHistosSecRecProGFLSSc)
607 ,fFFHistosSecRecKGFLSSc(copy.fFFHistosSecRecKGFLSSc)
608 ,fRandom(copy.fRandom)
613 // _________________________________________________________________________________________________________________________________
614 AliAnalysisTaskIDFFTCF& AliAnalysisTaskIDFFTCF::operator=(const AliAnalysisTaskIDFFTCF& o)
620 AliAnalysisTaskSE::operator=(o);
623 fAODJets = o.fAODJets;
624 fAODExtension = o.fAODExtension;
625 fNonStdFile = o.fNonStdFile;
626 fBranchRecJets = o.fBranchRecJets;
627 fBranchGenJets = o.fBranchGenJets;
628 fTrackTypeGen = o.fTrackTypeGen;
629 fJetTypeGen = o.fJetTypeGen;
630 fJetTypeRecEff = o.fJetTypeRecEff;
631 fUseAODInputJets = o.fUseAODInputJets;
632 fFilterMask = o.fFilterMask;
633 fUsePhysicsSelection = o.fUsePhysicsSelection;
634 fEvtSelectionMask = o.fEvtSelectionMask;
635 fEventClass = o.fEventClass;
636 fMaxVertexZ = o.fMaxVertexZ;
637 fLeadingJets = o.fLeadingJets;
638 fTPCCutMode = o.fTPCCutMode;
639 fTOFCutMode = o.fTOFCutMode;
642 fTrackPtCut = o.fTrackPtCut;
643 fTrackEtaMin = o.fTrackEtaMin;
644 fTrackEtaMax = o.fTrackEtaMax;
645 fTrackPhiMin = o.fTrackPhiMin;
646 fTrackPhiMax = o.fTrackPhiMax;
647 fJetPtCut = o.fJetPtCut;
648 fJetEtaMin = o.fJetEtaMin;
649 fJetEtaMax = o.fJetEtaMax;
650 fJetPhiMin = o.fJetPhiMin;
651 fJetPhiMax = o.fJetPhiMin;
652 fFFRadius = o.fFFRadius;
653 fFFMinLTrackPt = o.fFFMinLTrackPt;
654 fFFMaxTrackPt = o.fFFMaxTrackPt;
655 fFFMinnTracks = o.fFFMinnTracks;
658 fEffMode = o.fEffMode;
659 fAvgTrials = o.fAvgTrials;
660 fTracksRecCuts = o.fTracksRecCuts;
661 fTracksGen = o.fTracksGen;
662 fTracksAODMCCharged = o.fTracksAODMCCharged;
663 fTracksAODMCChargedSec = o.fTracksAODMCChargedSec;
664 fTracksRecQualityCuts = o.fTracksRecQualityCuts;
665 fJetsRec = o.fJetsRec;
666 fJetsRecCuts = o.fJetsRecCuts;
667 fJetsGen = o.fJetsGen;
668 fJetsRecEff = o.fJetsRecEff;
669 fQATrackHistosRecCuts = o.fQATrackHistosRecCuts;
670 fQATrackHistosGen = o.fQATrackHistosGen;
671 fQAJetHistosRec = o.fQAJetHistosRec;
672 fQAJetHistosRecCuts = o.fQAJetHistosRecCuts;
673 fQAJetHistosRecCutsLeading = o.fQAJetHistosRecCutsLeading;
674 fQAJetHistosGen = o.fQAJetHistosGen;
675 fQAJetHistosGenLeading = o.fQAJetHistosGenLeading;
676 fQAJetHistosRecEffLeading = o.fQAJetHistosRecEffLeading;
677 fFFHistosRecCutsInc = o.fFFHistosRecCutsInc;
678 fFFHistosRecCutsIncPi = o.fFFHistosRecCutsIncPi;
679 fFFHistosRecCutsIncPro = o.fFFHistosRecCutsIncPro;
680 fFFHistosRecCutsIncK = o.fFFHistosRecCutsIncK;
681 fFFHistosRecCutsIncEl = o.fFFHistosRecCutsIncEl;
682 fFFHistosRecCutsIncMu = o.fFFHistosRecCutsIncMu;
683 fFFHistosRecLeadingTrack = o.fFFHistosRecLeadingTrack;
684 fFFHistosGenInc = o.fFFHistosGenInc;
685 fFFHistosGenIncPi = o.fFFHistosGenIncPi;
686 fFFHistosGenIncPro = o.fFFHistosGenIncPro;
687 fFFHistosGenIncK = o.fFFHistosGenIncK;
688 fFFHistosGenIncEl = o.fFFHistosGenIncEl;
689 fFFHistosGenIncMu = o.fFFHistosGenIncMu;
690 fFFHistosGenLeadingTrack = o.fFFHistosGenLeadingTrack;
691 fQATrackHighPtThreshold = o.fQATrackHighPtThreshold;
692 fTHnIDFF = o.fTHnIDFF;
693 fTHnIncl = o.fTHnIncl;
694 fFFNBinsJetPt = o.fFFNBinsJetPt;
695 fFFJetPtMin = o.fFFJetPtMin;
696 fFFJetPtMax = o.fFFJetPtMax;
697 fFFNBinsPt = o.fFFNBinsPt;
698 fFFPtMin = o.fFFPtMin;
699 fFFPtMax = o.fFFPtMax;
700 fFFNBinsXi = o.fFFNBinsXi;
701 fFFXiMin = o.fFFXiMin;
702 fFFXiMax = o.fFFXiMax;
703 fFFNBinsZ = o.fFFNBinsZ;
706 fQAJetNBinsPt = o.fQAJetNBinsPt;
707 fQAJetPtMin = o.fQAJetPtMin;
708 fQAJetPtMax = o.fQAJetPtMax;
709 fQAJetNBinsEta = o.fQAJetNBinsEta;
710 fQAJetEtaMin = o.fQAJetEtaMin;
711 fQAJetEtaMax = o.fQAJetEtaMax;
712 fQAJetNBinsPhi = o.fQAJetNBinsPhi;
713 fQAJetPhiMin = o.fQAJetPhiMin;
714 fQAJetPhiMax = o.fQAJetPhiMax;
715 fQATrackNBinsPt = o.fQATrackNBinsPt;
716 fQATrackPtMin = o.fQATrackPtMin;
717 fQATrackPtMax = o.fQATrackPtMax;
718 fQATrackNBinsEta = o.fQATrackNBinsEta;
719 fQATrackEtaMin = o.fQATrackEtaMin;
720 fQATrackEtaMax = o.fQATrackEtaMax;
721 fQATrackNBinsPhi = o.fQATrackNBinsPhi;
722 fQATrackPhiMin = o.fQATrackPhiMin;
723 fQATrackPhiMax = o.fQATrackPhiMax;
724 fCommonHistList = o.fCommonHistList;
725 fh1EvtSelection = o.fh1EvtSelection;
726 fh1VertexNContributors = o.fh1VertexNContributors;
727 fh1VertexZ = o.fh1VertexZ;
728 fh1EvtMult = o.fh1EvtMult;
729 fh1EvtCent = o.fh1EvtCent;
731 fh1Trials = o.fh1Trials;
732 fh1PtHard = o.fh1PtHard;
733 fh1PtHardTrials = o.fh1PtHardTrials;
734 fh1nRecJetsCuts = o.fh1nRecJetsCuts;
735 fh1nGenJets = o.fh1nGenJets;
736 fh1nRecEffJets = o.fh1nRecEffJets;
737 fh2PtRecVsGenPrim = o.fh2PtRecVsGenPrim;
738 fh2PtRecVsGenSec = o.fh2PtRecVsGenSec;
739 fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen;
740 fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec;
741 fQATrackHistosSecRec = o.fQATrackHistosSecRec;
742 fQATrackHistosSecRecSSc = o.fQATrackHistosSecRecSSc;
743 fQATrackHistosRecEffGenPi = o.fQATrackHistosRecEffGenPi;
744 fQATrackHistosRecEffGenPro = o.fQATrackHistosRecEffGenPro;
745 fQATrackHistosRecEffGenK = o.fQATrackHistosRecEffGenK;
746 fQATrackHistosRecEffGenEl = o.fQATrackHistosRecEffGenEl;
747 fQATrackHistosRecEffGenMu = o.fQATrackHistosRecEffGenMu;
748 fQATrackHistosRecEffRecPi = o.fQATrackHistosRecEffRecPi;
749 fQATrackHistosRecEffRecPro = o.fQATrackHistosRecEffRecPro;
750 fQATrackHistosRecEffRecK = o.fQATrackHistosRecEffRecK;
751 fQATrackHistosRecEffRecEl = o.fQATrackHistosRecEffRecEl;
752 fQATrackHistosRecEffRecMu = o.fQATrackHistosRecEffRecMu;
753 fQATrackHistosRecEffRecProGFL = o.fQATrackHistosRecEffRecProGFL;
754 fQATrackHistosRecEffRecKGFL = o.fQATrackHistosRecEffRecKGFL;
755 fQATrackHistosSecRecPi = o.fQATrackHistosSecRecPi;
756 fQATrackHistosSecRecPro = o.fQATrackHistosSecRecPro;
757 fQATrackHistosSecRecK = o.fQATrackHistosSecRecK;
758 fQATrackHistosSecRecEl = o.fQATrackHistosSecRecEl;
759 fQATrackHistosSecRecMu = o.fQATrackHistosSecRecMu;
760 fQATrackHistosSecRecProGFL = o.fQATrackHistosSecRecProGFL;
761 fQATrackHistosSecRecKGFL = o.fQATrackHistosSecRecKGFL;
762 fQATrackHistosSecRecPiSSc = o.fQATrackHistosSecRecPiSSc;
763 fQATrackHistosSecRecProSSc = o.fQATrackHistosSecRecProSSc;
764 fQATrackHistosSecRecKSSc = o.fQATrackHistosSecRecKSSc;
765 fQATrackHistosSecRecElSSc = o.fQATrackHistosSecRecElSSc;
766 fQATrackHistosSecRecMuSSc = o.fQATrackHistosSecRecMuSSc;
767 fQATrackHistosSecRecProGFLSSc = o.fQATrackHistosSecRecProGFLSSc;
768 fQATrackHistosSecRecKGFLSSc = o.fQATrackHistosSecRecKGFLSSc;
769 fFFHistosRecEffRec = o.fFFHistosRecEffRec;
770 fFFHistosSecRec = o.fFFHistosSecRec;
771 fFFHistosSecRecSSc = o.fFFHistosSecRecSSc;
772 fFFHistosRecEffRecPi = o.fFFHistosRecEffRecPi;
773 fFFHistosRecEffRecPro = o.fFFHistosRecEffRecPro;
774 fFFHistosRecEffRecK = o.fFFHistosRecEffRecK;
775 fFFHistosRecEffRecEl = o.fFFHistosRecEffRecEl;
776 fFFHistosRecEffRecMu = o.fFFHistosRecEffRecMu;
777 fFFHistosRecEffRecProGFL = o.fFFHistosRecEffRecProGFL;
778 fFFHistosRecEffRecKGFL = o.fFFHistosRecEffRecKGFL;
779 fFFHistosSecRecPi = o.fFFHistosSecRecPi;
780 fFFHistosSecRecPro = o.fFFHistosSecRecPro;
781 fFFHistosSecRecK = o.fFFHistosSecRecK;
782 fFFHistosSecRecEl = o.fFFHistosSecRecEl;
783 fFFHistosSecRecMu = o.fFFHistosSecRecMu;
784 fFFHistosSecRecProGFL = o.fFFHistosSecRecProGFL;
785 fFFHistosSecRecKGFL = o.fFFHistosSecRecKGFL;
786 fFFHistosSecRecPiSSc = o.fFFHistosSecRecPiSSc;
787 fFFHistosSecRecProSSc = o.fFFHistosSecRecProSSc;
788 fFFHistosSecRecKSSc = o.fFFHistosSecRecKSSc;
789 fFFHistosSecRecElSSc = o.fFFHistosSecRecElSSc;
790 fFFHistosSecRecMuSSc = o.fFFHistosSecRecMuSSc;
791 fFFHistosSecRecProGFLSSc = o.fFFHistosSecRecProGFLSSc;
792 fFFHistosSecRecKGFLSSc = o.fFFHistosSecRecKGFLSSc;
799 //___________________________________________________________________________
800 AliAnalysisTaskIDFFTCF::~AliAnalysisTaskIDFFTCF()
804 if(fTracksRecCuts) delete fTracksRecCuts;
805 if(fTracksGen) delete fTracksGen;
806 if(fTracksAODMCCharged) delete fTracksAODMCCharged;
807 if(fTracksAODMCChargedSec) delete fTracksAODMCChargedSec;
808 if(fTracksRecQualityCuts) delete fTracksRecQualityCuts;
809 if(fJetsRec) delete fJetsRec;
810 if(fJetsRecCuts) delete fJetsRecCuts;
811 if(fJetsGen) delete fJetsGen;
812 if(fJetsRecEff) delete fJetsRecEff;
814 if(fRandom) delete fRandom;
817 //______________________________________________________________________________________________________
818 AliAnalysisTaskIDFFTCF::AliFragFuncHistos::AliFragFuncHistos(const char* name,
819 Int_t nJetPt, Float_t jetPtMin, Float_t jetPtMax,
820 Int_t nPt, Float_t ptMin, Float_t ptMax,
821 Int_t nXi, Float_t xiMin, Float_t xiMax,
822 Int_t nZ , Float_t zMin , Float_t zMax)
844 // default constructor
848 //___________________________________________________________________________
849 AliAnalysisTaskIDFFTCF::AliFragFuncHistos::AliFragFuncHistos(const AliFragFuncHistos& copy)
851 ,fNBinsJetPt(copy.fNBinsJetPt)
852 ,fJetPtMin(copy.fJetPtMin)
853 ,fJetPtMax(copy.fJetPtMax)
854 ,fNBinsPt(copy.fNBinsPt)
857 ,fNBinsXi(copy.fNBinsXi)
860 ,fNBinsZ(copy.fNBinsZ)
863 ,fh2TrackPt(copy.fh2TrackPt)
866 ,fh1JetPt(copy.fh1JetPt)
867 ,fh3TrackPtVsEta(copy.fh3TrackPtVsEta)
868 ,fh3TrackPVsEta(copy.fh3TrackPVsEta)
869 ,fNameFF(copy.fNameFF)
874 //_______________________________________________________________________________________________________________________________________________________________
875 AliAnalysisTaskIDFFTCF::AliFragFuncHistos& AliAnalysisTaskIDFFTCF::AliFragFuncHistos::operator=(const AliAnalysisTaskIDFFTCF::AliFragFuncHistos& o)
880 TObject::operator=(o);
881 fNBinsJetPt = o.fNBinsJetPt;
882 fJetPtMin = o.fJetPtMin;
883 fJetPtMax = o.fJetPtMax;
884 fNBinsPt = o.fNBinsPt;
887 fNBinsXi = o.fNBinsXi;
893 fh2TrackPt = o.fh2TrackPt;
896 fh1JetPt = o.fh1JetPt;
897 fh3TrackPtVsEta = o.fh3TrackPtVsEta;
898 fh3TrackPVsEta = o.fh3TrackPVsEta;
905 //_________________________________________________________
906 AliAnalysisTaskIDFFTCF::AliFragFuncHistos::~AliFragFuncHistos()
910 if(fh2TrackPt) delete fh2TrackPt;
911 if(fh2Xi) delete fh2Xi;
912 if(fh2Z) delete fh2Z;
913 if(fh1JetPt) delete fh1JetPt;
915 if(fh3TrackPtVsEta) delete fh3TrackPtVsEta;
916 if(fh3TrackPVsEta) delete fh3TrackPVsEta;
919 //_________________________________________________________________
920 void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::DefineHistos()
924 fh1JetPt = new TH1F(Form("fh1FFJetPt%s", fNameFF.Data()),"",fNBinsJetPt,fJetPtMin,fJetPtMax);
925 fh2TrackPt = new TH2F(Form("fh2FFTrackPt%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,fNBinsPt, fPtMin, fPtMax);
926 fh2Z = new TH2F(Form("fh2FFZ%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsZ, fZMin, fZMax);
927 fh2Xi = new TH2F(Form("fh2FFXi%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax, fNBinsXi, fXiMin, fXiMax);
929 fh3TrackPtVsEta = new TH3F(Form("fh3FFTrackPtVsEta%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,
930 20,-1,1,fNBinsPt, fPtMin, fPtMax);
932 fh3TrackPVsEta = new TH3F(Form("fh3FFTrackPVsEta%s",fNameFF.Data()),"",fNBinsJetPt, fJetPtMin, fJetPtMax,
933 20,-1,1,300, -1, 2); // Xianguo: fine log binning
936 AliAnalysisTaskIDFFTCF::SetProperties(fh1JetPt, "p_{T} [GeV/c]", "entries");
937 AliAnalysisTaskIDFFTCF::SetProperties(fh2TrackPt,"jet p_{T} [GeV/c]","p_{T} [GeV/c]","entries");
938 AliAnalysisTaskIDFFTCF::SetProperties(fh2Xi,"jet p_{T} [GeV/c]","#xi", "entries");
939 AliAnalysisTaskIDFFTCF::SetProperties(fh2Z,"jet p_{T} [GeV/c]","z","entries");
941 AliAnalysisTaskIDFFTCF::SetProperties(fh3TrackPtVsEta,"jet pt","eta","p_{T} [GeV/c]");
942 AliAnalysisTaskIDFFTCF::SetProperties(fh3TrackPVsEta,"jet pt","eta","p [GeV/c]");
945 //_______________________________________________________________________________________________________________
946 void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::FillFF(Float_t trackPt, Float_t trackEta, Float_t jetPt, Bool_t incrementJetPt,
947 Float_t norm, Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
952 if(incrementJetPt && norm) fh1JetPt->Fill(jetPt,1/norm);
953 else if(incrementJetPt) fh1JetPt->Fill(jetPt);
955 // Added for proper normalization of FF background estimation
956 // when zero track are found in the background region
957 if((int)trackPt==-1) return;
959 const Double_t tracklogPt = TMath::Log10(trackPt);
961 Double_t theta = 2*TMath::ATan(TMath::Exp(-1*trackEta));
962 Double_t trackP = trackPt / TMath::Sin(theta);
963 Double_t tracklogP = TMath::Log10(trackP);
965 if(norm)fh2TrackPt->Fill(jetPt,tracklogPt,1/norm);
966 else if(scaleStrangeness) fh2TrackPt->Fill(jetPt,tracklogPt,scaleFacStrangeness);
967 else fh2TrackPt->Fill(jetPt,tracklogPt);
969 if(norm) fh3TrackPtVsEta->Fill(jetPt,trackEta,tracklogPt,1/norm);
970 else if(scaleStrangeness) fh3TrackPtVsEta->Fill(jetPt,trackEta,tracklogPt,scaleFacStrangeness);
971 else fh3TrackPtVsEta->Fill(jetPt,trackEta,tracklogPt);
973 if(norm) fh3TrackPVsEta->Fill(jetPt,trackEta,tracklogP,1/norm);
974 else if(scaleStrangeness) fh3TrackPVsEta->Fill(jetPt,trackEta,tracklogP,scaleFacStrangeness);
975 else fh3TrackPVsEta->Fill(jetPt,trackEta,tracklogP);
979 if(jetPt>0) z = trackPt / jetPt;
981 if(z>0) xi = TMath::Log(1/z);
983 if(trackPt>(1-1e-06)*jetPt && trackPt<(1+1e-06)*jetPt){ // case z=1 : move entry to last histo bin <1
989 fh2Xi->Fill(jetPt,xi,1/norm);
990 fh2Z->Fill(jetPt,z,1/norm);
992 else if(scaleStrangeness){
993 fh2Xi->Fill(jetPt,xi,scaleFacStrangeness);
994 fh2Z->Fill(jetPt,z,scaleFacStrangeness);
997 fh2Xi->Fill(jetPt,xi);
1002 //_________________________________________________________________________________
1003 void AliAnalysisTaskIDFFTCF::AliFragFuncHistos::AddToOutput(TList* list) const
1005 // add histos to list
1007 list->Add(fh1JetPt);
1009 list->Add(fh2TrackPt);
1013 list->Add(fh3TrackPtVsEta);
1014 list->Add(fh3TrackPVsEta);
1017 //_________________________________________________________________________________________________________
1018 AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const char* name,
1019 Int_t nPt, Float_t ptMin, Float_t ptMax,
1020 Int_t nEta, Float_t etaMin, Float_t etaMax,
1021 Int_t nPhi, Float_t phiMin, Float_t phiMax)
1036 // default constructor
1039 //____________________________________________________________________________________
1040 AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::AliFragFuncQAJetHistos(const AliFragFuncQAJetHistos& copy)
1042 ,fNBinsPt(copy.fNBinsPt)
1043 ,fPtMin(copy.fPtMin)
1044 ,fPtMax(copy.fPtMax)
1045 ,fNBinsEta(copy.fNBinsEta)
1046 ,fEtaMin(copy.fEtaMin)
1047 ,fEtaMax(copy.fEtaMax)
1048 ,fNBinsPhi(copy.fNBinsPhi)
1049 ,fPhiMin(copy.fPhiMin)
1050 ,fPhiMax(copy.fPhiMax)
1051 ,fh2EtaPhi(copy.fh2EtaPhi)
1053 ,fNameQAJ(copy.fNameQAJ)
1058 //________________________________________________________________________________________________________________________________________________________________________
1059 AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos& AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::operator=(const AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos& o)
1064 TObject::operator=(o);
1065 fNBinsPt = o.fNBinsPt;
1068 fNBinsEta = o.fNBinsEta;
1069 fEtaMin = o.fEtaMin;
1070 fEtaMax = o.fEtaMax;
1071 fNBinsPhi = o.fNBinsPhi;
1072 fPhiMin = o.fPhiMin;
1073 fPhiMax = o.fPhiMax;
1074 fh2EtaPhi = o.fh2EtaPhi;
1076 fNameQAJ = o.fNameQAJ;
1082 //______________________________________________________________
1083 AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::~AliFragFuncQAJetHistos()
1087 if(fh2EtaPhi) delete fh2EtaPhi;
1088 if(fh1Pt) delete fh1Pt;
1091 //____________________________________________________________________
1092 void AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::DefineHistos()
1094 // book jet QA histos
1096 fh2EtaPhi = new TH2F(Form("fh2JetQAEtaPhi%s", fNameQAJ.Data()), Form("%s: #eta - #phi distribution", fNameQAJ.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1097 fh1Pt = new TH1F(Form("fh1JetQAPt%s", fNameQAJ.Data()), Form("%s: p_{T} distribution", fNameQAJ.Data()), fNBinsPt, fPtMin, fPtMax);
1099 AliAnalysisTaskIDFFTCF::SetProperties(fh2EtaPhi, "#eta", "#phi");
1100 AliAnalysisTaskIDFFTCF::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1103 //____________________________________________________________________________________________________
1104 void AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::FillJetQA(Float_t eta, Float_t phi, Float_t pt)
1106 // fill jet QA histos
1108 fh2EtaPhi->Fill( eta, phi);
1112 //____________________________________________________________________________________
1113 void AliAnalysisTaskIDFFTCF::AliFragFuncQAJetHistos::AddToOutput(TList* list) const
1115 // add histos to list
1117 list->Add(fh2EtaPhi);
1121 //___________________________________________________________________________________________________________
1122 AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const char* name,
1123 Int_t nPt, Float_t ptMin, Float_t ptMax,
1124 Int_t nEta, Float_t etaMin, Float_t etaMax,
1125 Int_t nPhi, Float_t phiMin, Float_t phiMax,
1137 ,fHighPtThreshold(ptThresh)
1144 // default constructor
1147 //__________________________________________________________________________________________
1148 AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::AliFragFuncQATrackHistos(const AliFragFuncQATrackHistos& copy)
1150 ,fNBinsPt(copy.fNBinsPt)
1151 ,fPtMin(copy.fPtMin)
1152 ,fPtMax(copy.fPtMax)
1153 ,fNBinsEta(copy.fNBinsEta)
1154 ,fEtaMin(copy.fEtaMin)
1155 ,fEtaMax(copy.fEtaMax)
1156 ,fNBinsPhi(copy.fNBinsPhi)
1157 ,fPhiMin(copy.fPhiMin)
1158 ,fPhiMax(copy.fPhiMax)
1159 ,fHighPtThreshold(copy.fHighPtThreshold)
1160 ,fh2EtaPhi(copy.fh2EtaPhi)
1162 ,fh2HighPtEtaPhi(copy.fh2HighPtEtaPhi)
1163 ,fh2PhiPt(copy.fh2PhiPt)
1164 ,fNameQAT(copy.fNameQAT)
1169 // _____________________________________________________________________________________________________________________________________________________________________________
1170 AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos& AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::operator=(const AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos& o)
1175 TObject::operator=(o);
1176 fNBinsPt = o.fNBinsPt;
1179 fNBinsEta = o.fNBinsEta;
1180 fEtaMin = o.fEtaMin;
1181 fEtaMax = o.fEtaMax;
1182 fNBinsPhi = o.fNBinsPhi;
1183 fPhiMin = o.fPhiMin;
1184 fPhiMax = o.fPhiMax;
1185 fHighPtThreshold = o.fHighPtThreshold;
1186 fh2EtaPhi = o.fh2EtaPhi;
1188 fh2HighPtEtaPhi = o.fh2HighPtEtaPhi;
1189 fh2PhiPt = o.fh2PhiPt;
1190 fNameQAT = o.fNameQAT;
1196 //___________________________________________________________________
1197 AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::~AliFragFuncQATrackHistos()
1201 if(fh2EtaPhi) delete fh2EtaPhi;
1202 if(fh2HighPtEtaPhi) delete fh2HighPtEtaPhi;
1203 if(fh1Pt) delete fh1Pt;
1204 if(fh2PhiPt) delete fh2PhiPt;
1207 //______________________________________________________________________
1208 void AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::DefineHistos()
1210 // book track QA histos
1212 fh2EtaPhi = new TH2F(Form("fh2TrackQAEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1213 fh2HighPtEtaPhi = new TH2F(Form("fh2TrackQAHighPtEtaPhi%s", fNameQAT.Data()), Form("%s: #eta - #phi distribution for high-p_{T}", fNameQAT.Data()), fNBinsEta, fEtaMin, fEtaMax, fNBinsPhi, fPhiMin, fPhiMax);
1214 fh1Pt = new TH1F(Form("fh1TrackQAPt%s", fNameQAT.Data()), Form("%s: p_{T} distribution", fNameQAT.Data()), fNBinsPt, fPtMin, fPtMax);
1215 fh2PhiPt = new TH2F(Form("fh2TrackQAPhiPt%s", fNameQAT.Data()), Form("%s: #phi - p_{T} distribution", fNameQAT.Data()), fNBinsPhi, fPhiMin, fPhiMax, fNBinsPt, fPtMin, fPtMax);
1217 AliAnalysisTaskIDFFTCF::SetProperties(fh2EtaPhi, "#eta", "#phi");
1218 AliAnalysisTaskIDFFTCF::SetProperties(fh2HighPtEtaPhi, "#eta", "#phi");
1219 AliAnalysisTaskIDFFTCF::SetProperties(fh1Pt, "p_{T} [GeV/c]", "entries");
1220 AliAnalysisTaskIDFFTCF::SetProperties(fh2PhiPt, "#phi", "p_{T} [GeV/c]");
1225 //________________________________________________________________________________________________________
1226 void AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::FillTrackQA(Float_t eta, Float_t phi, Float_t pt, Bool_t weightPt, Float_t norm,
1227 Bool_t scaleStrangeness, Float_t scaleFacStrangeness)
1229 // fill track QA histos
1230 Float_t weight = 1.;
1231 if(weightPt) weight = pt;
1232 fh2EtaPhi->Fill( eta, phi, weight);
1233 if(scaleStrangeness) fh2EtaPhi->Fill( eta, phi, scaleFacStrangeness);
1234 if(pt > fHighPtThreshold) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1235 if(pt > fHighPtThreshold && scaleStrangeness) fh2HighPtEtaPhi->Fill( eta, phi, weight);
1236 if(norm) fh1Pt->Fill( pt, 1/norm );
1237 else if(scaleStrangeness) fh1Pt->Fill(pt,scaleFacStrangeness);
1238 else fh1Pt->Fill( pt );
1240 if(scaleFacStrangeness) fh2PhiPt->Fill(phi, pt, scaleFacStrangeness);
1241 else fh2PhiPt->Fill(phi, pt);
1244 //______________________________________________________________________________________
1245 void AliAnalysisTaskIDFFTCF::AliFragFuncQATrackHistos::AddToOutput(TList* list) const
1247 // add histos to list
1249 list->Add(fh2EtaPhi);
1250 list->Add(fh2HighPtEtaPhi);
1252 list->Add(fh2PhiPt);
1255 //_________________________________________________________________________________
1256 Bool_t AliAnalysisTaskIDFFTCF::Notify()
1259 // Implemented Notify() to read the cross sections
1260 // and number of trials from pyxsec.root
1261 // (taken from AliAnalysisTaskJetSpectrum2)
1263 TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
1264 Float_t xsection = 0;
1265 Float_t ftrials = 1;
1269 TFile *curfile = tree->GetCurrentFile();
1271 Error("Notify","No current file");
1274 if(!fh1Xsec||!fh1Trials){
1275 Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
1278 AliAnalysisHelperJetTasks::PythiaInfoFromFile(curfile->GetName(),xsection,ftrials);
1279 fh1Xsec->Fill("<#sigma>",xsection);
1280 // construct a poor man average trials
1281 Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
1282 if(ftrials>=nEntries && nEntries>0.)fAvgTrials = ftrials/nEntries;
1285 // Set seed for backg study
1286 fRandom = new TRandom3();
1287 fRandom->SetSeed(0);
1292 //__________________________________________________________________
1293 void AliAnalysisTaskIDFFTCF::UserCreateOutputObjects()
1295 // create output objects
1297 if(fDebug > 1) Printf("AliAnalysisTaskIDFFTCF::UserCreateOutputObjects()");
1299 // create list of tracks and jets
1301 fTracksRecCuts = new TList();
1302 fTracksRecCuts->SetOwner(kFALSE);
1304 fTracksGen = new TList();
1305 fTracksGen->SetOwner(kFALSE);
1307 fTracksAODMCCharged = new TList();
1308 fTracksAODMCCharged->SetOwner(kFALSE);
1310 fTracksAODMCChargedSec = new TList();
1311 fTracksAODMCChargedSec->SetOwner(kFALSE);
1313 fTracksRecQualityCuts = new TList();
1314 fTracksRecQualityCuts->SetOwner(kFALSE);
1316 fJetsRec = new TList();
1317 fJetsRec->SetOwner(kFALSE);
1319 fJetsRecCuts = new TList();
1320 fJetsRecCuts->SetOwner(kFALSE);
1322 fJetsGen = new TList();
1323 fJetsGen->SetOwner(kFALSE);
1325 fJetsRecEff = new TList();
1326 fJetsRecEff->SetOwner(kFALSE);
1329 // Create histograms / output container
1333 fCommonHistList = new TList();
1334 fCommonHistList->SetOwner(kTRUE);
1336 Bool_t oldStatus = TH1::AddDirectoryStatus();
1337 TH1::AddDirectory(kFALSE);
1340 fh1EvtSelection = new TH1F("fh1EvtSelection", "Event Selection", 6, -0.5, 5.5);
1341 fh1EvtSelection->GetXaxis()->SetBinLabel(1,"ACCEPTED");
1342 fh1EvtSelection->GetXaxis()->SetBinLabel(2,"event selection: rejected");
1343 fh1EvtSelection->GetXaxis()->SetBinLabel(3,"event class: rejected");
1344 fh1EvtSelection->GetXaxis()->SetBinLabel(4,"vertex Ncontr: rejected");
1345 fh1EvtSelection->GetXaxis()->SetBinLabel(5,"vertex z: rejected");
1346 fh1EvtSelection->GetXaxis()->SetBinLabel(6,"vertex type: rejected");
1348 fh1VertexNContributors = new TH1F("fh1VertexNContributors", "Vertex N contributors", 2500,-.5, 2499.5);
1349 fh1VertexZ = new TH1F("fh1VertexZ", "Vertex z distribution", 30, -15., 15.);
1350 fh1EvtMult = new TH1F("fh1EvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",120,0.,12000.);
1351 fh1EvtCent = new TH1F("fh1EvtCent","centrality",100,0.,100.);
1353 fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
1354 fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
1355 fh1Trials = new TH1F("fh1Trials","trials from pyxsec.root",1,0,1);
1356 fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
1357 fh1PtHard = new TH1F("fh1PtHard","PYTHIA Pt hard;p_{T,hard}",350,-.5,349.5);
1358 fh1PtHardTrials = new TH1F("fh1PtHardTrials","PYTHIA Pt hard weight with trials;p_{T,hard}",350,-.5,349.5);
1360 fh1nRecJetsCuts = new TH1F("fh1nRecJetsCuts","reconstructed jets per event",10,-0.5,9.5);
1361 fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5);
1362 fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5);
1364 fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1365 fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax);
1369 if(fQAMode&1){ // track QA
1370 fQATrackHistosRecCuts = new AliFragFuncQATrackHistos("RecCuts", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1371 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1372 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1373 fQATrackHighPtThreshold);
1374 fQATrackHistosGen = new AliFragFuncQATrackHistos("Gen", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
1375 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
1376 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
1377 fQATrackHighPtThreshold);
1380 if(fQAMode&2){ // jet QA
1381 fQAJetHistosRec = new AliFragFuncQAJetHistos("Rec", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1382 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1383 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1384 fQAJetHistosRecCuts = new AliFragFuncQAJetHistos("RecCuts", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1385 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1386 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1387 fQAJetHistosRecCutsLeading = new AliFragFuncQAJetHistos("RecCutsLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1388 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1389 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1390 fQAJetHistosGen = new AliFragFuncQAJetHistos("Gen", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1391 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1392 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1393 fQAJetHistosGenLeading = new AliFragFuncQAJetHistos("GenLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1394 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,
1395 fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1397 if(fEffMode) fQAJetHistosRecEffLeading = new AliFragFuncQAJetHistos("RecEffLeading", fQAJetNBinsPt, fQAJetPtMin, fQAJetPtMax,
1398 fQAJetNBinsEta, fQAJetEtaMin, fQAJetEtaMax,fQAJetNBinsPhi, fQAJetPhiMin, fQAJetPhiMax);
1406 fTHnIDFF = AliIDFFUtils::GetTHn("THnIDFF");
1407 fTHnIncl = 0x0;//AliIDFFUtils::GetTHn("THnIncl");
1415 // ____________ define histograms ____________________
1418 if(fQAMode&1){ // track QA
1419 fQATrackHistosRecCuts->DefineHistos();
1420 fQATrackHistosGen->DefineHistos();
1423 if(fQAMode&2){ // jet QA
1424 fQAJetHistosRec->DefineHistos();
1425 fQAJetHistosRecCuts->DefineHistos();
1426 fQAJetHistosRecCutsLeading->DefineHistos();
1427 fQAJetHistosGen->DefineHistos();
1428 fQAJetHistosGenLeading->DefineHistos();
1429 if(fEffMode) fQAJetHistosRecEffLeading->DefineHistos();
1434 fCommonHistList->Add(fTHnIDFF);
1435 //fCommonHistList->Add(fTHnIncl);
1438 Bool_t genJets = (fJetTypeGen != kJetsUndef) ? kTRUE : kFALSE;
1439 Bool_t genTracks = (fTrackTypeGen != kTrackUndef) ? kTRUE : kFALSE;
1440 Bool_t recJetsEff = (fJetTypeRecEff != kJetsUndef) ? kTRUE : kFALSE;
1442 fCommonHistList->Add(fh1EvtSelection);
1443 fCommonHistList->Add(fh1EvtMult);
1444 fCommonHistList->Add(fh1EvtCent);
1445 fCommonHistList->Add(fh1VertexNContributors);
1446 fCommonHistList->Add(fh1VertexZ);
1447 fCommonHistList->Add(fh1nRecJetsCuts);
1448 fCommonHistList->Add(fh1Xsec);
1449 fCommonHistList->Add(fh1Trials);
1450 fCommonHistList->Add(fh1PtHard);
1451 fCommonHistList->Add(fh1PtHardTrials);
1453 if(genJets) fCommonHistList->Add(fh1nGenJets);
1457 if(fQAMode&1){ // track QA
1458 fQATrackHistosRecCuts->AddToOutput(fCommonHistList);
1459 if(genTracks) fQATrackHistosGen->AddToOutput(fCommonHistList);
1462 if(fQAMode&2){ // jet QA
1463 fQAJetHistosRec->AddToOutput(fCommonHistList);
1464 fQAJetHistosRecCuts->AddToOutput(fCommonHistList);
1465 fQAJetHistosRecCutsLeading->AddToOutput(fCommonHistList);
1466 if(recJetsEff && fEffMode) fQAJetHistosRecEffLeading->AddToOutput(fCommonHistList);
1468 fQAJetHistosGen->AddToOutput(fCommonHistList);
1469 fQAJetHistosGenLeading->AddToOutput(fCommonHistList);
1475 BookFFHistos(fCommonHistList,&fFFHistosRecCutsInc,"RecCutsInc",&fFFHistosGenInc,"GenInc");
1476 BookFFHistos(fCommonHistList,&fFFHistosRecLeadingTrack,"RecLeadingTrack",&fFFHistosGenLeadingTrack,"GenLeadingTrack");
1480 if(fFFMode && genTracks){
1481 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncPi,"RecCutsInc_piPlusPiMinus",&fFFHistosGenIncPi,"GenInc_piPlusPiMinus");
1482 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncPro,"RecCutsInc_ppbar",&fFFHistosGenIncPro,"GenInc_ppbar");
1483 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncK,"RecCutsInc_kPlusKMinus",&fFFHistosGenIncK,"GenInc_kPlusKMinus");
1484 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncEl,"RecCutsInc_ePlusEMinus",&fFFHistosGenIncEl,"GenInc_ePlusEMinus");
1485 BookFFHistos(fCommonHistList,&fFFHistosRecCutsIncMu,"RecCutsInc_muPlusMuMinus",&fFFHistosGenIncMu,"GenInc_muPlusMuMinus");
1489 if(fEffMode && recJetsEff && genTracks){
1491 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRec,"RecEffRec",&fQATrackHistosRecEffGen,"RecEffGen",&fQATrackHistosSecRec,"SecRec");
1492 BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecSSc,"SecRecSSc");
1493 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecPi,"RecEffRec_piPlusPiMinus",&fQATrackHistosRecEffGenPi,"RecEffGen_piPlusPiMinus",&fQATrackHistosSecRecPi,"SecRec_piPlusPiMinus");
1494 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecPro,"RecEffRec_ppbar",&fQATrackHistosRecEffGenPro,"RecEffGen_ppbar",&fQATrackHistosSecRecPro,"SecRec_ppbar");
1495 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecK,"RecEffRec_kPlusKMinus",&fQATrackHistosRecEffGenK,"RecEffGen_kPlusKMinus",&fQATrackHistosSecRecK,"SecRec_kPlusKMinus");
1496 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecEl,"RecEffRec_ePlusEMinus",&fQATrackHistosRecEffGenEl,"RecEffGen_ePlusEMinus",&fQATrackHistosSecRecEl,"SecRec_ePlusEMinus");
1497 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecMu,"RecEffRec_muPlusMuMinus",&fQATrackHistosRecEffGenMu,"RecEffGen_muPlusMuMinus",&fQATrackHistosSecRecMu,"SecRec_muPlusMuMinus");
1498 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecProGFL,"RecEffRec_ppbarGFL",0,"",&fQATrackHistosSecRecProGFL,"SecRec_ppbarGFL");
1499 BookQAHistos(fCommonHistList,&fQATrackHistosRecEffRecKGFL,"RecEffRec_kPlusKMinusGFL",0,"",&fQATrackHistosSecRecKGFL,"SecRec_kPlusKMinusGFL");
1500 BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecPiSSc ,"SecRec_piPlusPiMinusSSc");
1501 BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecProSSc,"SecRec_ppbarSSc");
1502 BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecKSSc,"SecRec_kPlusKMinusSSc");
1503 BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecElSSc,"SecRec_ePlusEMinusSSc");
1504 BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecMuSSc,"SecRec_muPlusMuMinusSSc");
1505 BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecProGFLSSc,"SecRec_ppbarGFLSSc");
1506 BookQAHistos(fCommonHistList,0x0,"",0x0,"",&fQATrackHistosSecRecKGFLSSc,"SecRec_kPlusKMinusGFLSSc");
1509 BookFFHistos(fCommonHistList,&fFFHistosRecEffRec,"RecEffRec",0x0,"",&fFFHistosSecRec,"SecRec");
1510 BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecSSc,"SecRecSSc");
1511 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecPi,"RecEffRec_piPlusPiMinus",0x0,"",&fFFHistosSecRecPi,"SecRec_piPlusPiMinus");
1512 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecPro,"RecEffRec_ppbar",0x0,"",&fFFHistosSecRecPro,"SecRec_ppbar");
1513 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecK,"RecEffRec_kPlusKMinus",0x0,"",&fFFHistosSecRecK,"SecRec_kPlusKMinus");
1514 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecEl,"RecEffRec_ePlusEMinus",0x0,"",&fFFHistosSecRecEl,"SecRec_ePlusEMinus");
1515 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecMu,"RecEffRec_muPlusMuMinus",0x0,"",&fFFHistosSecRecMu,"SecRec_muPlusMuMinus");
1516 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecProGFL,"RecEffRec_ppbarGFL",0x0,"",&fFFHistosSecRecProGFL,"SecRec_ppbarGFL");
1517 BookFFHistos(fCommonHistList,&fFFHistosRecEffRecKGFL,"RecEffRec_kPlusKMinusGFL",0x0,"",&fFFHistosSecRecKGFL,"SecRec_kPlusKMinusGFL");
1518 BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecPiSSc,"SecRec_piPlusPiMinusSSc");
1519 BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecProSSc,"SecRec_ppbarSSc");
1520 BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecKSSc,"SecRec_kPlusKMinusSSc");
1521 BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecElSSc,"SecRec_ePlusEMinusSSc");
1522 BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecMuSSc,"SecRec_muPlusMuMinusSSc");
1523 BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecProGFLSSc,"SecRec_ppbarGFLSSc");
1524 BookFFHistos(fCommonHistList,0x0,"",0x0,"",&fFFHistosSecRecKGFLSSc,"SecRec_kPlusKMinusGFLSSc");
1527 fCommonHistList->Add(fh1nRecEffJets);
1528 fCommonHistList->Add(fh2PtRecVsGenPrim);
1529 fCommonHistList->Add(fh2PtRecVsGenSec);
1532 // =========== Switch on Sumw2 for all histos ===========
1533 for (Int_t i=0; i<fCommonHistList->GetEntries(); ++i){
1534 TH1 *h1 = dynamic_cast<TH1*>(fCommonHistList->At(i));
1535 if (h1) h1->Sumw2();
1537 THnSparse *hnSparse = dynamic_cast<THnSparse*>(fCommonHistList->At(i));
1538 if(hnSparse) hnSparse->Sumw2();
1542 TH1::AddDirectory(oldStatus);
1544 PostData(1, fCommonHistList);
1551 //_______________________________________________
1552 void AliAnalysisTaskIDFFTCF::Init()
1555 if(fDebug > 1) Printf("AliAnalysisTaskIDFFTCF::Init()");
1559 //_____________________________________________________________
1560 void AliAnalysisTaskIDFFTCF::UserExec(Option_t *)
1562 AliIDFFUtils::fPid = 0x0;
1565 // Called for each event
1566 if(fDebug > 1) Printf("AliAnalysisTaskIDFFTCF::UserExec()");
1569 if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry);
1571 // Trigger selection
1572 AliInputEventHandler* inputHandler = (AliInputEventHandler*)
1573 ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
1575 if(!(inputHandler->IsEventSelected() & fEvtSelectionMask)){
1576 fh1EvtSelection->Fill(1.);
1577 if (fDebug > 1 ) Printf(" Trigger Selection: event REJECTED ... ");
1578 PostData(1, fCommonHistList);
1582 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
1584 if(fDebug>3) Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__);
1587 fMCEvent = MCEvent();
1589 if(fDebug>3) Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__);
1592 // get AOD event from input/ouput
1593 TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler();
1594 if( handler && handler->InheritsFrom("AliAODInputHandler") ) {
1595 fAOD = ((AliAODInputHandler*)handler)->GetEvent();
1596 AliIDFFUtils::fPid = ((AliAODInputHandler*)handler)->GetPIDResponse();
1597 if(fUseAODInputJets) fAODJets = fAOD;
1598 if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__);
1601 handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
1602 if( handler && handler->InheritsFrom("AliAODHandler") ) {
1603 fAOD = ((AliAODHandler*)handler)->GetAOD();
1605 AliInputEventHandler* esdinputHandler =
1606 (AliInputEventHandler*) (AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
1607 AliIDFFUtils::fPid = esdinputHandler->GetPIDResponse();
1610 if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__);
1614 if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output
1615 TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler();
1616 if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) {
1617 fAODJets = ((AliAODHandler*)outHandler)->GetAOD();
1618 if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__);
1622 if(fNonStdFile.Length()!=0){
1623 // case we have an AOD extension - fetch the jets from the extended output
1625 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
1626 fAODExtension = (aodH?aodH->GetExtension(fNonStdFile.Data()):0);
1628 if(fDebug>1)Printf("AODExtension not found for %s",fNonStdFile.Data());
1633 Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__);
1636 if(!AliIDFFUtils::fPid){
1637 Printf("%s:%d PIDresponse not found", (char*)__FILE__,__LINE__);
1641 Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__);
1646 // event selection **************************************************
1647 // *** event class ***
1648 Double_t centPercent = -1;
1651 if(handler->InheritsFrom("AliAODInputHandler")){
1652 // since it is not supported by the helper task define own classes
1653 centPercent = fAOD->GetHeader()->GetCentrality();
1655 if(centPercent>10) cl = 2;
1656 if(centPercent>30) cl = 3;
1657 if(centPercent>50) cl = 4;
1660 cl = AliAnalysisHelperJetTasks::EventClass();
1661 if(fESD) centPercent = fESD->GetCentrality()->GetCentralityPercentile("V0M"); // retrieve value 'by hand'
1664 if(cl!=fEventClass){
1665 // event not in selected event class, reject event
1666 if (fDebug > 1) Printf("%s:%d event not in selected event class: event REJECTED ...",(char*)__FILE__,__LINE__);
1667 fh1EvtSelection->Fill(2.);
1668 PostData(1, fCommonHistList);
1673 // *** vertex cut ***
1674 AliAODVertex* primVtx = fAOD->GetPrimaryVertex();
1675 Int_t nTracksPrim = primVtx->GetNContributors();
1676 fh1VertexNContributors->Fill(nTracksPrim);
1679 if (fDebug > 1) Printf("%s:%d primary vertex selection: %d", (char*)__FILE__,__LINE__,nTracksPrim);
1681 if (fDebug > 1) Printf("%s:%d primary vertex selection: event REJECTED...",(char*)__FILE__,__LINE__);
1682 fh1EvtSelection->Fill(3.);
1683 PostData(1, fCommonHistList);
1687 fh1VertexZ->Fill(primVtx->GetZ());
1689 if(TMath::Abs(primVtx->GetZ())>fMaxVertexZ){
1690 if (fDebug > 1) Printf("%s:%d primary vertex z = %f: event REJECTED...",(char*)__FILE__,__LINE__,primVtx->GetZ());
1691 fh1EvtSelection->Fill(4.);
1692 PostData(1, fCommonHistList);
1696 TString primVtxName(primVtx->GetName());
1698 if(primVtxName.CompareTo("TPCVertex",TString::kIgnoreCase) == 1){
1699 if (fDebug > 1) Printf("%s:%d primary vertex selection: TPC vertex, event REJECTED...",(char*)__FILE__,__LINE__);
1700 fh1EvtSelection->Fill(5.);
1701 PostData(1, fCommonHistList);
1705 if (fDebug > 1) Printf("%s:%d event ACCEPTED ...",(char*)__FILE__,__LINE__);
1706 fh1EvtSelection->Fill(0.);
1707 fh1EvtCent->Fill(centPercent);
1710 //___ get MC information __________________________________________________________________
1712 fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
1714 Double_t ptHard = 0.;
1715 Double_t nTrials = 1; // trials for MC trigger weight for real data
1718 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
1722 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
1723 AliGenHijingEventHeader* hijingGenHeader = 0x0;
1725 if(pythiaGenHeader){
1726 if(fDebug>3) Printf("%s:%d pythiaGenHeader found", (char*)__FILE__,__LINE__);
1727 nTrials = pythiaGenHeader->Trials();
1728 ptHard = pythiaGenHeader->GetPtHard();
1730 fh1PtHard->Fill(ptHard);
1731 fh1PtHardTrials->Fill(ptHard,nTrials);
1733 } else { // no pythia, hijing?
1735 if(fDebug>3) Printf("%s:%d no pythiaGenHeader found", (char*)__FILE__,__LINE__);
1737 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
1738 if(!hijingGenHeader){
1739 Printf("%s:%d no pythiaGenHeader or hjingGenHeader found", (char*)__FILE__,__LINE__);
1741 if(fDebug>3) Printf("%s:%d hijingGenHeader found", (char*)__FILE__,__LINE__);
1745 //fh1Trials->Fill("#sum{ntrials}",fAvgTrials);
1749 //___ fetch jets __________________________________________________________________________
1751 Int_t nJ = GetListOfJets(fJetsRec, kJetsRec);
1753 if(nJ>=0) nRecJets = fJetsRec->GetEntries();
1754 if(fDebug>2)Printf("%s:%d Selected Rec jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
1755 if(nJ != nRecJets) Printf("%s:%d Mismatch Selected Rec Jets: %d %d",(char*)__FILE__,__LINE__,nJ,nRecJets);
1757 Int_t nJCuts = GetListOfJets(fJetsRecCuts, kJetsRecAcceptance);
1758 Int_t nRecJetsCuts = 0;
1759 if(nJCuts>=0) nRecJetsCuts = fJetsRecCuts->GetEntries();
1760 if(fDebug>2)Printf("%s:%d Selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
1761 if(nRecJetsCuts != nJCuts) Printf("%s:%d Mismatch selected Rec jets after cuts: %d %d",(char*)__FILE__,__LINE__,nJCuts,nRecJetsCuts);
1762 fh1nRecJetsCuts->Fill(nRecJetsCuts);
1764 if(fJetTypeGen==kJetsKine || fJetTypeGen == kJetsKineAcceptance) fJetsGen->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
1766 Int_t nJGen = GetListOfJets(fJetsGen, fJetTypeGen);
1768 if(nJGen>=0) nGenJets = fJetsGen->GetEntries();
1769 if(fDebug>2)Printf("%s:%d Selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
1771 if(nJGen != nGenJets) Printf("%s:%d Mismatch selected Gen jets: %d %d",(char*)__FILE__,__LINE__,nJGen,nGenJets);
1772 fh1nGenJets->Fill(nGenJets);
1775 if(fJetTypeRecEff==kJetsKine || fJetTypeRecEff == kJetsKineAcceptance) fJetsRecEff->SetOwner(kTRUE); // kine aod jets allocated on heap, delete them with TList::Clear()
1776 Int_t nJRecEff = GetListOfJets(fJetsRecEff, fJetTypeRecEff);
1777 Int_t nRecEffJets = 0;
1778 if(nJRecEff>=0) nRecEffJets = fJetsRecEff->GetEntries();
1779 if(fDebug>2)Printf("%s:%d Selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
1780 if(nJRecEff != nRecEffJets) Printf("%s:%d Mismatch selected RecEff jets: %d %d",(char*)__FILE__,__LINE__,nJRecEff,nRecEffJets);
1781 fh1nRecEffJets->Fill(nRecEffJets);
1784 //____ fetch particles __________________________________________________________
1786 Int_t nTCuts = GetListOfTracks(fTracksRecCuts, kTrackAODCuts);
1788 Int_t nRecPartCuts = 0;
1789 if(nTCuts>=0) nRecPartCuts = fTracksRecCuts->GetEntries();
1790 if(fDebug>2)Printf("%s:%d Selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
1791 if(nRecPartCuts != nTCuts) Printf("%s:%d Mismatch selected Rec tracks after cuts: %d %d",(char*)__FILE__,__LINE__,nTCuts,nRecPartCuts);
1792 fh1EvtMult->Fill(nRecPartCuts);
1795 Int_t nTGen = GetListOfTracks(fTracksGen,fTrackTypeGen);
1797 if(nTGen>=0) nGenPart = fTracksGen->GetEntries();
1798 if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
1799 if(nGenPart != nTGen) Printf("%s:%d Mismatch selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nTGen,nGenPart);
1802 //____ analysis, fill histos ___________________________________________________
1807 for(Int_t it=0; it<nRecPartCuts; ++it){
1808 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksRecCuts->At(it));
1809 if(part)fQATrackHistosRecCuts->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() );
1811 // fill inclusive tracks XXX, they have the same track cuts!
1812 AliAODTrack * inclusiveaod = dynamic_cast<AliAODTrack*>(fTracksRecCuts->At(it));
1814 //AliIDFFUtils::FillTHn(fTHnIncl, -999, inclusiveaod, fAOD, fTOFCutMode);
1818 for(Int_t it=0; it<nGenPart; ++it){
1819 AliVParticle *part = dynamic_cast<AliVParticle*>(fTracksGen->At(it));
1820 if(part)fQATrackHistosGen->FillTrackQA( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt());
1826 for(Int_t ij=0; ij<nRecJets; ++ij){
1827 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsRec->At(ij));
1828 if(jet)fQAJetHistosRec->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jet->Pt());
1833 if(fQAMode || fFFMode){
1835 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){
1837 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
1838 Float_t jetPt = jet->Pt();
1840 if(fQAMode&2) fQAJetHistosRecCuts->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt);
1842 if(fLeadingJets && ij>0) continue; // leading/all jets
1844 if(fQAMode&2 && (ij==0) ) fQAJetHistosRecCutsLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt );
1846 // get tracks in jet
1847 TList* jettracklist = new TList();
1848 Double_t sumPt = 0.;
1849 Bool_t isBadJet = kFALSE;
1851 if(GetFFRadius()<=0)
1852 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1854 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet,
1855 GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1857 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
1860 delete jettracklist;
1864 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
1866 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
1867 if(!trackVP)continue;
1869 AliAODTrack * aodtrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
1870 if(!aodtrack) continue;
1872 Float_t trackPt = trackVP->Pt();
1873 Float_t trackEta = trackVP->Eta();
1875 Bool_t incrementJetPt = (it==0) ? kTRUE : kFALSE;
1879 fFFHistosRecCutsInc->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
1881 AliIDFFUtils::FillTHn(fTHnIDFF, jetPt, aodtrack, fAOD, fTOFCutMode);
1883 if(it==0){ // leading track, all jets
1884 fFFHistosRecLeadingTrack->FillFF( trackPt, trackEta, jetPt, kTRUE);
1890 delete jettracklist;
1892 } // end: rec. jets after cuts
1894 // loop again over rec jets:
1895 // PID histos (only for MC)
1897 if(fBranchGenJets.Length()>0){ // check if we're running over MC
1899 for(Int_t ij=0; ij<nRecJetsCuts; ++ij){ // rec jets loop
1901 if(fLeadingJets && ij>0) continue; // leading/all jets
1903 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
1906 AliAODJet* jet = (AliAODJet*)(fJetsRecCuts->At(ij));
1907 Float_t jetPt = jet->Pt();
1909 // get tracks in jet
1910 TList* jettracklist = new TList();
1911 Double_t sumPt = 0.;
1912 Bool_t isBadJet = kFALSE;
1914 if(GetFFRadius()<=0)
1915 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1917 GetJetTracksPointing(fTracksRecCuts, jettracklist, jet,
1918 GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1920 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;
1923 delete jettracklist;
1927 Bool_t incrementJetPt = kTRUE; // there could be 0 tracks in jet: first fill jet pt histo once
1928 fFFHistosRecCutsIncPi->FillFF(-1, -1, jetPt, incrementJetPt);
1929 fFFHistosRecCutsIncPro->FillFF(-1,-1, jetPt, incrementJetPt);
1930 fFFHistosRecCutsIncK->FillFF(-1, -1, jetPt, incrementJetPt);
1931 fFFHistosRecCutsIncEl->FillFF(-1, -1, jetPt, incrementJetPt);
1932 fFFHistosRecCutsIncMu->FillFF(-1, -1, jetPt, incrementJetPt);
1934 incrementJetPt = kFALSE;
1936 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
1938 AliAODTrack * rectrack = dynamic_cast<AliAODTrack*>(jettracklist->At(it));
1939 if(!rectrack) continue;
1941 Int_t label = TMath::Abs(rectrack->GetLabel());
1942 Float_t recPt = rectrack->Pt();
1943 Float_t recEta = rectrack->Eta();
1945 // find MC track in our list
1946 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
1948 // Float_t genPt = gentrack->Pt();
1951 Int_t mcpdg = TMath::Abs(gentrack->GetPdgCode());
1953 if(mcpdg == 211) fFFHistosRecCutsIncPi->FillFF(recPt, recEta, jetPt, incrementJetPt);
1954 if(mcpdg == 2212) fFFHistosRecCutsIncPro->FillFF(recPt, recEta, jetPt, incrementJetPt);
1955 if(mcpdg == 321) fFFHistosRecCutsIncK->FillFF(recPt, recEta, jetPt, incrementJetPt);
1956 if(mcpdg == 11) fFFHistosRecCutsIncEl->FillFF(recPt, recEta, jetPt, incrementJetPt);
1957 if(mcpdg == 13) fFFHistosRecCutsIncMu->FillFF(recPt, recEta, jetPt, incrementJetPt);
1960 delete jettracklist;
1962 } // end: rec. jets after cuts
1967 for(Int_t ij=0; ij<nGenJets; ++ij){
1969 AliAODJet* jet = dynamic_cast<AliAODJet*>(fJetsGen->At(ij));
1972 Float_t jetPt = jet->Pt();
1974 if(fQAMode&2) fQAJetHistosGen->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt);
1976 if(fLeadingJets && ij>0) continue; // leading/all jets
1978 if(fQAMode&2 && (ij==0)) fQAJetHistosGenLeading->FillJetQA( jet->Eta(), TVector2::Phi_0_2pi(jet->Phi()), jetPt);
1980 TList* jettracklist = new TList();
1981 Double_t sumPt = 0.;
1982 Bool_t isBadJet = kFALSE;
1984 if(GetFFRadius()<=0){
1985 GetJetTracksTrackrefs(jettracklist, jet, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1987 GetJetTracksPointing(fTracksGen, jettracklist, jet, GetFFRadius(), sumPt, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJet);
1990 if(GetFFMinNTracks()>0 && jettracklist->GetSize()<=GetFFMinNTracks()) isBadJet = kTRUE;;
1993 delete jettracklist;
1997 Bool_t incrementJetPt = kTRUE; // first fill jet pt histo once
1998 fFFHistosGenInc->FillFF(-1, -1, jetPt, incrementJetPt);
1999 fFFHistosGenIncPi->FillFF(-1, -1, jetPt, incrementJetPt);
2000 fFFHistosGenIncPro->FillFF(-1,-1, jetPt, incrementJetPt);
2001 fFFHistosGenIncK->FillFF(-1, -1, jetPt, incrementJetPt);
2002 fFFHistosGenIncEl->FillFF(-1, -1, jetPt, incrementJetPt);
2003 fFFHistosGenIncMu->FillFF(-1, -1, jetPt, incrementJetPt);
2005 incrementJetPt = kFALSE;
2007 for(Int_t it=0; it<jettracklist->GetSize(); ++it){
2009 AliVParticle* trackVP = dynamic_cast<AliVParticle*>(jettracklist->At(it));
2010 if(!trackVP)continue;
2012 Float_t trackPt = trackVP->Pt();
2013 Float_t trackEta = trackVP->Eta();
2017 fFFHistosGenInc->FillFF( trackPt, trackEta, jetPt, incrementJetPt);
2019 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*>(trackVP);
2023 Int_t mcpdg = TMath::Abs(gentrack->GetPdgCode());
2025 if(mcpdg == 211) fFFHistosGenIncPi->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
2026 if(mcpdg == 2212) fFFHistosGenIncPro->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
2027 if(mcpdg == 321) fFFHistosGenIncK->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
2028 if(mcpdg == 11) fFFHistosGenIncEl->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
2029 if(mcpdg == 13) fFFHistosGenIncMu->FillFF(trackPt, trackEta, jetPt, incrementJetPt);
2033 if(it==0){ // leading track, all jets
2034 fFFHistosGenLeadingTrack->FillFF( trackPt, trackEta, jetPt, kTRUE);
2039 delete jettracklist;
2042 } // end: QA, FF and intra-jet
2045 // ____ efficiency _______________________________
2047 if(fEffMode && (fJetTypeRecEff != kJetsUndef)){
2049 // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function
2053 // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function
2056 // ... and another set for secondaries from strange/non strange mothers (secondary MC tracks are stored in different lists)
2057 TArrayI indexAODTrSec;
2059 TArrayI indexMCTrSec;
2061 Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged);
2062 if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged);
2064 Int_t nTracksAODMCChargedSec = GetListOfTracks(fTracksAODMCChargedSec, kTrackAODMCChargedSec);
2065 if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks NS: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSec);
2068 Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts);
2069 if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts);
2071 // associate gen and rec tracks, store indices in TArrays
2072 AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim);
2073 AssociateGenRec(fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,indexMCTrSec,isGenSec,fh2PtRecVsGenSec);
2076 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim);
2077 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenPi,fQATrackHistosRecEffRecPi,fTracksAODMCCharged,indexAODTr,isGenPrim, 211);
2078 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenPro,fQATrackHistosRecEffRecPro,fTracksAODMCCharged,indexAODTr,isGenPrim, 2212);
2079 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenK,fQATrackHistosRecEffRecK,fTracksAODMCCharged,indexAODTr,isGenPrim, 321);
2080 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenEl,fQATrackHistosRecEffRecEl,fTracksAODMCCharged,indexAODTr,isGenPrim, 11);
2081 if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGenMu,fQATrackHistosRecEffRecMu,fTracksAODMCCharged,indexAODTr,isGenPrim, 13);
2082 if(fQAMode&1) FillSingleTrackHistosRecGen(0,fQATrackHistosRecEffRecProGFL,fTracksAODMCCharged,indexAODTr,isGenPrim, 2212,kTRUE);
2083 if(fQAMode&1) FillSingleTrackHistosRecGen(0,fQATrackHistosRecEffRecKGFL,fTracksAODMCCharged,indexAODTr,isGenPrim, 321,kTRUE);
2086 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec);
2087 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,0,kFALSE,kTRUE);
2088 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPi,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,211);
2089 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPro,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212);
2090 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecK,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321);
2091 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecEl,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,11);
2092 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecMu,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,13);
2093 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecProGFL,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212,kTRUE);
2094 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecKGFL,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321,kTRUE);
2096 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecPiSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,211,kFALSE,kTRUE);
2097 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecProSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212,kFALSE,kTRUE);
2098 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecKSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321,kFALSE,kTRUE);
2099 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecElSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,11,kFALSE,kTRUE);
2100 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecMuSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,13,kFALSE,kTRUE);
2101 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecProGFLSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,2212,kTRUE,kTRUE);
2102 if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRecKGFLSSc,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,321,kTRUE,kTRUE);
2105 Double_t sumPtGenLeadingJetRecEff = 0;
2106 Double_t sumPtGenLeadingJetSec = 0;
2107 Double_t sumPtRecLeadingJetRecEff = 0;
2109 for(Int_t ij=0; ij<nRecEffJets; ++ij){ // jet loop
2111 if(fLeadingJets && ij>0) continue; // leading/all jets
2113 AliAODJet* jet = (AliAODJet*)(fJetsRecEff->At(ij));
2115 Bool_t isBadJetGenPrim = kFALSE;
2116 Bool_t isBadJetGenSec = kFALSE;
2117 Bool_t isBadJetRec = kFALSE;
2119 // for efficiency: gen tracks from pointing with gen/rec jet
2120 TList* jettracklistGenPrim = new TList();
2122 // if radius<0 -> trackRefs: collect gen tracks in wide radius + fill FF recEff rec histos with tracks contained in track refs
2123 // note : FF recEff gen histos will be somewhat useless in this approach
2125 if(GetFFRadius() >0)
2126 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, GetFFRadius(), sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
2128 GetJetTracksPointing(fTracksAODMCCharged, jettracklistGenPrim, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetRecEff, GetFFMinLTrackPt(), GetFFMaxTrackPt(), isBadJetGenPrim);
2130 TList* jettracklistGenSec = new TList();
2131 if(GetFFRadius() >0)
2132 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, GetFFRadius(), sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2134 GetJetTracksPointing(fTracksAODMCChargedSec, jettracklistGenSec, jet, TMath::Abs(GetFFRadius())+0.2, sumPtGenLeadingJetSec, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetGenSec);
2137 // bin efficiency in jet pt bins using rec tracks
2138 TList* jettracklistRec = new TList();
2139 if(GetFFRadius() >0) GetJetTracksPointing(fTracksRecCuts,jettracklistRec, jet, GetFFRadius(), sumPtRecLeadingJetRecEff, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
2140 else GetJetTracksTrackrefs(jettracklistRec, jet, GetFFMinLTrackPt() , GetFFMaxTrackPt(), isBadJetRec);
2143 Double_t jetEta = jet->Eta();
2144 Double_t jetPhi = TVector2::Phi_0_2pi(jet->Phi());
2146 if(GetFFMinNTracks()>0 && jettracklistGenPrim->GetSize()<=GetFFMinNTracks()) isBadJetGenPrim = kTRUE;
2147 if(GetFFMinNTracks()>0 && jettracklistGenSec->GetSize()<=GetFFMinNTracks()) isBadJetGenSec = kTRUE;
2148 if(GetFFMinNTracks()>0 && jettracklistRec->GetSize()<=GetFFMinNTracks()) isBadJetRec = kTRUE;
2151 delete jettracklistGenPrim;
2152 delete jettracklistGenSec;
2153 delete jettracklistRec;
2157 if(fQAMode&2) fQAJetHistosRecEffLeading->FillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff );
2161 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRec,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0);
2162 else FillJetTrackHistosRec(fFFHistosRecEffRec,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec);
2164 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecPi,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,211);
2165 else FillJetTrackHistosRec(fFFHistosRecEffRecPi,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,211);
2167 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecPro,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,2212);
2168 else FillJetTrackHistosRec(fFFHistosRecEffRecPro,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,2212);
2170 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecK,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,321);
2171 else FillJetTrackHistosRec(fFFHistosRecEffRecK,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,321);
2173 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecEl,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,11);
2174 else FillJetTrackHistosRec(fFFHistosRecEffRecEl,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,11);
2176 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecMu,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,13);
2177 else FillJetTrackHistosRec(fFFHistosRecEffRecMu,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,13);
2179 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecProGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,2212,kTRUE);
2180 else FillJetTrackHistosRec(fFFHistosRecEffRecProGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,2212,kTRUE);
2182 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosRecEffRecKGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,0,321,kTRUE);
2183 else FillJetTrackHistosRec(fFFHistosRecEffRecKGFL,jet,jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,jettracklistRec,321,kTRUE);
2187 // secondaries: use jet pt from primaries
2188 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRec,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0);
2189 else FillJetTrackHistosRec(fFFHistosSecRec,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec);
2191 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,0,kFALSE,kTRUE);
2192 else FillJetTrackHistosRec(fFFHistosSecRecSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,kFALSE,kTRUE);
2194 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecPi,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,211);
2195 else FillJetTrackHistosRec(fFFHistosSecRecPi,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,211);
2197 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecPro,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212);
2198 else FillJetTrackHistosRec(fFFHistosSecRecPro,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212);
2200 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecK,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321);
2201 else FillJetTrackHistosRec(fFFHistosSecRecK,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321);
2203 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecEl,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,11);
2204 else FillJetTrackHistosRec(fFFHistosSecRecEl,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,11);
2206 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecMu,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,13);
2207 else FillJetTrackHistosRec(fFFHistosSecRecMu,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,13);
2209 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecProGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212,kTRUE);
2210 else FillJetTrackHistosRec(fFFHistosSecRecProGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212,kTRUE);
2212 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecKGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321,kTRUE);
2213 else FillJetTrackHistosRec(fFFHistosSecRecKGFL,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321,kTRUE);
2216 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecPiSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,211,kFALSE,kTRUE);
2217 else FillJetTrackHistosRec(fFFHistosSecRecPiSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,211,kFALSE,kTRUE);
2219 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecProSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212,kFALSE,kTRUE);
2220 else FillJetTrackHistosRec(fFFHistosSecRecProSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212,kFALSE,kTRUE);
2222 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecKSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321,kFALSE,kTRUE);
2223 else FillJetTrackHistosRec(fFFHistosSecRecKSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321,kFALSE,kTRUE);
2225 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecElSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,11,kFALSE,kTRUE);
2226 else FillJetTrackHistosRec(fFFHistosSecRecElSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,11,kFALSE,kTRUE);
2228 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecMuSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,13,kFALSE,kTRUE);
2229 else FillJetTrackHistosRec(fFFHistosSecRecMuSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,13,kFALSE,kTRUE);
2231 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecProGFLSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,2212,kTRUE,kTRUE);
2232 else FillJetTrackHistosRec(fFFHistosSecRecProGFLSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,2212,kTRUE,kTRUE);
2234 if(GetFFRadius()>0) FillJetTrackHistosRec(fFFHistosSecRecKGFLSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts, indexAODTrSec,isGenSec,0,321,kTRUE,kTRUE);
2235 else FillJetTrackHistosRec(fFFHistosSecRecKGFLSSc,jet,jettracklistGenSec,fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,isGenSec,jettracklistRec,321,kTRUE,kTRUE);
2241 delete jettracklistGenPrim;
2242 delete jettracklistGenSec;
2243 delete jettracklistRec;
2249 //___________________
2251 fTracksRecCuts->Clear();
2252 fTracksGen->Clear();
2253 fTracksAODMCCharged->Clear();
2254 fTracksAODMCChargedSec->Clear();
2255 fTracksRecQualityCuts->Clear();
2258 fJetsRecCuts->Clear();
2260 fJetsRecEff->Clear();
2263 PostData(1, fCommonHistList);
2266 //______________________________________________________________
2267 void AliAnalysisTaskIDFFTCF::Terminate(Option_t *)
2271 if(fDebug > 1) printf("AliAnalysisTaskIDFFTCF::Terminate() \n");
2274 //_________________________________________________________________________________
2275 Int_t AliAnalysisTaskIDFFTCF::GetListOfTracks(TList *list, Int_t type)
2277 // fill list of tracks selected according to type
2279 if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type);
2282 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2286 if(!fAOD) return -1;
2288 if(!fAOD->GetTracks()) return 0;
2290 if(type==kTrackUndef) return 0;
2295 if(type==kTrackAODCuts || type==kTrackAODQualityCuts || type==kTrackAOD){
2297 // all rec. tracks, esd filter mask, eta range
2299 for(Int_t it=0; it<fAOD->GetNumberOfTracks(); ++it){
2300 AliAODTrack *tr = fAOD->GetTrack(it);
2302 if(type == kTrackAODCuts || type==kTrackAODQualityCuts){
2304 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
2307 if(fTPCCutMode==kPIDN && !AliIDFFUtils::TPCCutPIDN(tr)){
2310 if(fTPCCutMode==kMIGeo && !AliIDFFUtils::TPCCutMIGeo(tr, fAOD, fStream)){
2314 if(type == kTrackAODCuts){
2315 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
2316 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
2317 if(tr->Pt() < fTrackPtCut) continue;
2324 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
2325 // kine particles, all or rather charged
2326 if(!fMCEvent) return iCount;
2328 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
2329 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
2331 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
2332 if(part->Charge()==0) continue;
2334 if(type == kTrackKineChargedAcceptance &&
2335 ( part->Eta() < fTrackEtaMin
2336 || part->Eta() > fTrackEtaMax
2337 || part->Phi() < fTrackPhiMin
2338 || part->Phi() > fTrackPhiMax
2339 || part->Pt() < fTrackPtCut)) continue;
2346 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec) {
2347 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
2348 if(!fAOD) return -1;
2350 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2351 if(!tca)return iCount;
2353 for(int it=0; it<tca->GetEntriesFast(); ++it){
2354 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
2356 if(type != kTrackAODMCChargedSec && !part->IsPhysicalPrimary())continue;
2357 if((type == kTrackAODMCChargedSec) && part->IsPhysicalPrimary())continue;
2359 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec){
2360 if(part->Charge()==0) continue;
2362 if(type==kTrackAODMCChargedSec){
2364 Int_t iMother = part->GetMother();
2365 if(iMother < 0) continue; // throw out PYTHIA stack partons + incoming protons
2369 if(type==kTrackAODMCChargedAcceptance &&
2370 ( part->Eta() > fTrackEtaMax
2371 || part->Eta() < fTrackEtaMin
2372 || part->Phi() > fTrackPhiMax
2373 || part->Phi() < fTrackPhiMin
2374 || part->Pt() < fTrackPtCut)) continue;
2386 // _______________________________________________________________________________
2387 Int_t AliAnalysisTaskIDFFTCF::GetListOfJets(TList *list, Int_t type)
2389 // fill list of jets selected according to type
2392 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2396 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
2398 if(fBranchRecJets.Length()==0){
2399 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
2400 if(fDebug>1)fAOD->Print();
2404 TClonesArray *aodRecJets = 0;
2405 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
2406 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
2407 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
2410 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
2411 if(fDebug>1)fAOD->Print();
2415 // Reorder jet pt and fill new temporary AliAODJet objects
2418 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
2420 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
2423 if( tmp->Pt() < fJetPtCut ) continue;
2424 if( type == kJetsRecAcceptance &&
2425 ( tmp->Eta() < fJetEtaMin
2426 || tmp->Eta() > fJetEtaMax
2427 || tmp->Phi() < fJetPhiMin
2428 || tmp->Phi() > fJetPhiMax )) continue;
2439 else if(type == kJetsKine || type == kJetsKineAcceptance){
2445 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
2449 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
2450 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
2451 AliGenHijingEventHeader* hijingGenHeader = 0x0;
2453 if(!pythiaGenHeader){
2454 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2456 if(!hijingGenHeader){
2457 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
2460 TLorentzVector mom[4];
2462 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
2464 for(Int_t i=0; i<2; ++i){
2465 if(!mom[i].Pt()) continue;
2466 jet[i] = new AliAODJet(mom[i]);
2468 if( type == kJetsKineAcceptance &&
2469 ( jet[i]->Eta() < fJetEtaMin
2470 || jet[i]->Eta() > fJetEtaMax
2471 || jet[i]->Phi() < fJetPhiMin
2472 || jet[i]->Phi() > fJetPhiMax )) continue;
2482 // fetch the pythia generated jets
2483 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
2486 AliAODJet *jet = new AliAODJet();
2487 pythiaGenHeader->TriggerJet(ip, p);
2488 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
2490 if( type == kJetsKineAcceptance &&
2491 ( jet->Eta() < fJetEtaMin
2492 || jet->Eta() > fJetEtaMax
2493 || jet->Phi() < fJetPhiMin
2494 || jet->Phi() > fJetPhiMax )) continue;
2502 else if(type == kJetsGen || type == kJetsGenAcceptance ){
2504 if(fBranchGenJets.Length()==0){
2505 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
2509 TClonesArray *aodGenJets = 0;
2510 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
2511 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
2512 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
2516 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
2518 if(fDebug>1)fAOD->Print();
2524 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
2526 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
2529 if( tmp->Pt() < fJetPtCut ) continue;
2530 if( type == kJetsGenAcceptance &&
2531 ( tmp->Eta() < fJetEtaMin
2532 || tmp->Eta() > fJetEtaMax
2533 || tmp->Phi() < fJetPhiMin
2534 || tmp->Phi() > fJetPhiMax )) continue;
2543 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
2548 // _________________________________________________________________________________________________________
2549 void AliAnalysisTaskIDFFTCF::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
2551 // Set properties of THnSparse
2553 for(Int_t i=0; i<dim; i++){
2554 h->GetAxis(i)->SetTitle(labels[i]);
2555 h->GetAxis(i)->SetTitleColor(1);
2559 // __________________________________________________________________________________________
2560 void AliAnalysisTaskIDFFTCF::SetProperties(TH1* h,const char* x, const char* y)
2562 //Set properties of histos (x and y title)
2566 h->GetXaxis()->SetTitleColor(1);
2567 h->GetYaxis()->SetTitleColor(1);
2570 // _________________________________________________________________________________________________________
2571 void AliAnalysisTaskIDFFTCF::SetProperties(TH1* h,const char* x, const char* y, const char* z)
2573 //Set properties of histos (x,y and z title)
2578 h->GetXaxis()->SetTitleColor(1);
2579 h->GetYaxis()->SetTitleColor(1);
2580 h->GetZaxis()->SetTitleColor(1);
2583 // ________________________________________________________________________________________________________________________________________________________
2584 void AliAnalysisTaskIDFFTCF::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
2585 const Double_t radius, Double_t& sumPt, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
2587 // fill list of tracks in cone around jet axis
2590 Bool_t isBadMaxPt = kFALSE;
2591 Bool_t isBadMinPt = kTRUE;
2594 jet->PxPyPz(jetMom);
2595 TVector3 jet3mom(jetMom);
2597 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
2599 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
2601 Double_t trackMom[3];
2602 track->PxPyPz(trackMom);
2603 TVector3 track3mom(trackMom);
2605 Double_t dR = jet3mom.DeltaR(track3mom);
2609 outputlist->Add(track);
2611 sumPt += track->Pt();
2613 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
2614 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
2619 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
2620 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
2625 // _________________________________________________________________________________________________________________________________________________________________
2626 void AliAnalysisTaskIDFFTCF::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
2628 // list of jet tracks from trackrefs
2630 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
2632 Bool_t isBadMaxPt = kFALSE;
2633 Bool_t isBadMinPt = kTRUE;
2635 for(Int_t itrack=0; itrack<nTracks; itrack++) {
2637 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
2639 AliError("expected ref track not found ");
2643 if(track->Pt() < fTrackPtCut) continue; // track refs may contain low pt cut (bug in AliFastJetInput)
2644 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
2645 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
2651 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
2652 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
2657 // _ ________________________________________________________________________________________________________________________________
2658 void AliAnalysisTaskIDFFTCF::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
2659 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
2661 // associate generated and reconstructed tracks, fill TArrays of list indices
2663 Int_t nTracksRec = tracksRec->GetSize();
2664 Int_t nTracksGen = tracksAODMCCharged->GetSize();
2665 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2668 if(!nTracksGen) return;
2672 indexAODTr.Set(nTracksGen);
2673 indexMCTr.Set(nTracksRec);
2674 isRefGen.Set(nTracksGen);
2676 indexAODTr.Reset(-1);
2677 indexMCTr.Reset(-1);
2680 // loop over reconstructed tracks, get generated track
2682 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
2684 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
2685 if(!rectrack)continue;
2686 Int_t label = TMath::Abs(rectrack->GetLabel());
2688 // find MC track in our list
2689 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
2691 Int_t listIndex = -1;
2692 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
2696 indexAODTr[listIndex] = iRec;
2697 indexMCTr[iRec] = listIndex;
2702 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
2704 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
2706 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
2707 if(!gentrack)continue;
2708 Int_t pdg = gentrack->GetPdgCode();
2710 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
2711 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
2712 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
2714 isRefGen[iGen] = kTRUE;
2716 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2719 Float_t genPt = gentrack->Pt();
2720 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
2722 Float_t recPt = vt->Pt();
2723 fh2PtRecVsGen->Fill(genPt,recPt);
2730 // _____________________________________________________________________________________________________________________________________________
2731 void AliAnalysisTaskIDFFTCF::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
2732 const TArrayI& indexAODTr, const TArrayS& isRefGen, const Int_t pdg, const Bool_t scaleGFL,
2733 const Bool_t scaleStrangeness){
2735 // fill QA for single track reconstruction efficiency
2737 Int_t nTracksGen = tracksGen->GetSize();
2739 if(!nTracksGen) return;
2741 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
2743 if(isRefGen[iGen] != 1) continue; // select primaries
2745 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
2746 if(!gentrack) continue;
2747 Double_t ptGen = gentrack->Pt();
2748 Double_t etaGen = gentrack->Eta();
2749 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
2751 // apply same acc & pt cuts as for FF
2753 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
2754 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
2755 if(ptGen < fTrackPtCut) continue;
2756 if(pdg && TMath::Abs(gentrack->GetPdgCode()) != pdg) continue;
2758 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
2760 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2762 if(iRec>=0 && trackQARec){
2764 if(scaleGFL || scaleStrangeness){
2766 Double_t weight = 1;
2769 Double_t GFLcorr = 1;
2770 if(gentrack->GetPdgCode() == -2212) GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);
2771 else if(gentrack->GetPdgCode() == -321) GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);
2773 if(GFLcorr > 0) weight *= 1/GFLcorr;
2775 if(scaleStrangeness){
2776 Double_t strCorr = GetMCStrangenessFactorCMS(gentrack);
2780 trackQARec->FillTrackQA(etaGen, phiGen, ptGen, kFALSE, 0, kTRUE, weight);
2782 else trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
2787 // ______________________________________________________________________________________________________________________________________________________
2789 void AliAnalysisTaskIDFFTCF::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec, AliAODJet* jet,
2790 TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
2791 const TArrayS& isRefGen, TList* jetTrackListTR, const Int_t pdg,
2792 const Bool_t scaleGFL, const Bool_t scaleStrangeness)
2794 // fill objects for jet track reconstruction efficiency or secondaries contamination
2795 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
2796 // jetTrackListTR pointer: track refs if not NULL
2799 // ensure proper normalization, even for secondaries
2800 Double_t jetPtRec = jet->Pt();
2801 //TVector3 jet3Mom = (jet->MomentumVector())->Vect();
2803 ffhistRec->FillFF(-1, -1, jetPtRec, kTRUE);
2805 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
2806 if(nTracksJet == 0) return;
2808 TList* listRecTracks = new TList();
2809 listRecTracks->Clear();
2811 for(Int_t iTr=0; iTr<nTracksJet; iTr++){ // jet tracks loop
2813 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
2814 if(!gentrack)continue;
2815 // find jet track in gen tracks list
2816 Int_t iGen = tracksGen->IndexOf(gentrack);
2819 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
2823 if(isRefGen[iGen] != 1) continue; // select primaries
2825 Double_t ptGen = gentrack->Pt();
2826 Double_t etaGen = gentrack->Eta();
2827 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
2829 // gen level acc & pt cuts - skip in case of track refs
2830 if(!jetTrackListTR && (etaGen < fTrackEtaMin || etaGen > fTrackEtaMax)) continue;
2831 if(!jetTrackListTR && (phiGen < fTrackPhiMin || phiGen > fTrackPhiMax)) continue;
2832 if(!jetTrackListTR && ptGen < fTrackPtCut) continue;
2833 if(pdg && TMath::Abs(gentrack->GetPdgCode()) != pdg) continue;
2836 Double_t ptRec = -1;
2837 Double_t etaRec = -1;
2839 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2840 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
2842 Bool_t isJetTrack = kFALSE;
2843 if(!jetTrackListTR) isJetTrack = kTRUE; // skip trackRefs check for tracks in ideal cone
2847 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*> (tracksRec->At(iRec));
2848 if(!rectrack) continue;
2850 ptRec = rectrack->Pt();
2851 etaRec = rectrack->Eta();
2854 Int_t iRecTR = jetTrackListTR->IndexOf(rectrack);
2855 if(iRecTR >=0 ) isJetTrack = kTRUE; // rec tracks assigned to jet
2860 Double_t trackPt = ptRec;
2861 Double_t trackEta = etaRec;
2862 Bool_t incrementJetPt = kFALSE;
2864 if(scaleGFL || scaleStrangeness){
2866 Double_t weight = 1;
2869 Double_t GFLcorr = 1;
2870 if(gentrack->GetPdgCode() == -2212) GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);
2871 else if(gentrack->GetPdgCode() == -321) GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);
2873 if(GFLcorr > 0) weight *= 1/GFLcorr;
2875 if(scaleStrangeness){
2876 Double_t strCorr = GetMCStrangenessFactorCMS(gentrack);
2880 ffhistRec->FillFF( trackPt, trackEta, jetPtRec, incrementJetPt, 0, kTRUE, weight );
2882 else ffhistRec->FillFF( trackPt, trackEta, jetPtRec, incrementJetPt);
2884 listRecTracks->Add(rectrack);
2889 delete listRecTracks;
2893 // ______________________________________________________________________________________________________________________________________________________
2894 Float_t AliAnalysisTaskIDFFTCF::CalcJetArea(const Float_t etaJet, const Float_t rc) const
2896 // calculate area of jet with eta etaJet and radius rc
2898 Float_t detamax = etaJet + rc;
2899 Float_t detamin = etaJet - rc;
2900 Float_t accmax = 0.0; Float_t accmin = 0.0;
2901 if(detamax > fTrackEtaMax){ // sector outside etamax
2902 Float_t h = fTrackEtaMax - etaJet;
2903 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
2905 if(detamin < fTrackEtaMin){ // sector outside etamin
2906 Float_t h = fTrackEtaMax + etaJet;
2907 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
2909 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
2915 //____________________________________________________________________________________________________________________________________________
2916 void AliAnalysisTaskIDFFTCF::BookQAHistos(TList* list, AliFragFuncQATrackHistos** rec, TString strTitRec, AliFragFuncQATrackHistos** gen, TString strTitGen,
2917 AliFragFuncQATrackHistos** sec, TString strTitSec){
2921 if(strTitRec.Length()>0){
2923 *rec = new AliFragFuncQATrackHistos(strTitRec, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2924 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2925 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2926 fQATrackHighPtThreshold);
2928 (*rec)->DefineHistos();
2929 (*rec)->AddToOutput(list);
2932 if(strTitGen.Length()>0){
2934 *gen = new AliFragFuncQATrackHistos(strTitGen, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2935 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2936 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2937 fQATrackHighPtThreshold);
2939 (*gen)->DefineHistos();
2940 (*gen)->AddToOutput(list);
2943 if(strTitSec.Length()>0){
2945 *sec = new AliFragFuncQATrackHistos(strTitSec, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2946 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2947 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2948 fQATrackHighPtThreshold);
2950 (*sec)->DefineHistos();
2951 (*sec)->AddToOutput(list);
2956 //____________________________________________________________________________________________________________________________________________
2957 void AliAnalysisTaskIDFFTCF::BookFFHistos(TList* list, AliFragFuncHistos** rec, TString strTitRec, AliFragFuncHistos** gen, TString strTitGen,
2958 AliFragFuncHistos** sec, TString strTitSec){
2962 if(strTitRec.Length()>0){
2964 *rec = new AliFragFuncHistos(strTitRec, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2965 fFFNBinsPt, fFFPtMin, fFFPtMax,
2966 fFFNBinsXi, fFFXiMin, fFFXiMax,
2967 fFFNBinsZ , fFFZMin , fFFZMax);
2969 (*rec)->DefineHistos();
2970 (*rec)->AddToOutput(list);
2973 if(strTitGen.Length()>0){
2975 *gen = new AliFragFuncHistos(strTitGen, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2976 fFFNBinsPt, fFFPtMin, fFFPtMax,
2977 fFFNBinsXi, fFFXiMin, fFFXiMax,
2978 fFFNBinsZ , fFFZMin , fFFZMax);
2980 (*gen)->DefineHistos();
2981 (*gen)->AddToOutput(list);
2984 if(strTitSec.Length()>0){
2986 *sec = new AliFragFuncHistos(strTitSec, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2987 fFFNBinsPt, fFFPtMin, fFFPtMax,
2988 fFFNBinsXi, fFFXiMin, fFFXiMax,
2989 fFFNBinsZ , fFFZMin , fFFZMax);
2991 (*sec)->DefineHistos();
2992 (*sec)->AddToOutput(list);
2996 //____________________________________________________________________________________
2997 Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionPrMinus(const Double_t pTmc)
2999 // GEANT-FLUKA correction for pbar from Roberto via Benjamin
3001 Double_t corr = 1. - 0.129758 * TMath::Exp(-pTmc * 0.679612);
3005 //____________________________________________________________________________________
3006 Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionKaMinus(const Double_t pTmc)
3009 // GEANT-FLUKA correction for K- from Roberto via Benjamin
3011 Double_t corr = TMath::Min((0.972865 + 0.0117093 * pTmc), 1.);
3015 //__________________________________________________________________________________________________
3016 Double_t AliAnalysisTaskIDFFTCF::GetMCStrangenessFactorCMS(AliAODMCParticle* daughter)
3018 // strangeness ratio MC/data as function of mother pt from CMS data in |eta|<2.0
3020 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
3023 AliAODMCParticle* currentMother = daughter;
3024 AliAODMCParticle* currentDaughter = daughter;
3027 // find first primary mother K0s, Lambda or Xi
3030 Int_t daughterPDG = currentDaughter->GetPdgCode();
3032 Int_t motherLabel = currentDaughter->GetMother();
3033 if(motherLabel >= tca->GetEntriesFast()){ // protection
3034 currentMother = currentDaughter;
3038 currentMother = (AliAODMCParticle*) tca->At(motherLabel);
3041 currentMother = currentDaughter;
3045 Int_t motherPDG = currentMother->GetPdgCode();
3047 // phys. primary found ?
3048 if(currentMother->IsPhysicalPrimary()) break;
3050 if(TMath::Abs(daughterPDG) == 321){ // K+/K- e.g. from phi (ref data not feeddown corrected)
3051 currentMother = currentDaughter; break;
3053 if(TMath::Abs(motherPDG) == 310 ){ // K0s e.g. from phi (ref data not feeddown corrected)
3056 if(TMath::Abs(motherPDG) == 3212 && TMath::Abs(daughterPDG) == 3122){ // mother Sigma0, daughter Lambda (this case not included in feeddown corr.)
3057 currentMother = currentDaughter; break;
3060 currentDaughter = currentMother;
3064 Int_t motherPDG = currentMother->GetPdgCode();
3065 Double_t motherPt = currentMother->Pt();
3069 if(TMath::Abs(motherPDG) == 310 || TMath::Abs(motherPDG)==321){ // K0s / K+ / K-
3071 if(0.00 <= motherPt && motherPt < 0.20) fac = 0.768049;
3072 else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.732933;
3073 else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.650298;
3074 else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.571332;
3075 else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.518734;
3076 else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.492543;
3077 else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.482704;
3078 else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.488056;
3079 else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.488861;
3080 else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.492862;
3081 else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.504332;
3082 else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.501858;
3083 else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.512970;
3084 else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.524131;
3085 else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.539130;
3086 else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.554101;
3087 else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.560348;
3088 else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.568869;
3089 else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.583310;
3090 else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.604818;
3091 else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.632630;
3092 else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.710070;
3093 else if(6.00 <= motherPt && motherPt < 8.00) fac = 0.736365;
3094 else if(8.00 <= motherPt && motherPt < 10.00) fac = 0.835865;
3097 if(TMath::Abs(motherPDG) == 3122){ // Lambda
3099 if(0.00 <= motherPt && motherPt < 0.20) fac = 0.645162;
3100 else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.627431;
3101 else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.457136;
3102 else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.384369;
3103 else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.330597;
3104 else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.309571;
3105 else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.293620;
3106 else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.283709;
3107 else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.282047;
3108 else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.277261;
3109 else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.275772;
3110 else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.280726;
3111 else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.288540;
3112 else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.288315;
3113 else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.296619;
3114 else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.302993;
3115 else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.338121;
3116 else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.349800;
3117 else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.356802;
3118 else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.391202;
3119 else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.422573;
3120 else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.573815;
3121 else if(6.00 <= motherPt && motherPt < 8.00) fac = 0.786984;
3122 else if(8.00 <= motherPt && motherPt < 10.00) fac = 1.020021;
3125 if(TMath::Abs(motherPDG) == 3312 || TMath::Abs(motherPDG) == 3322){ // xi
3127 if(0.00 <= motherPt && motherPt < 0.20) fac = 0.666620;
3128 else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.575908;
3129 else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.433198;
3130 else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.340901;
3131 else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.290896;
3132 else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.236074;
3133 else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.218681;
3134 else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.207763;
3135 else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.222848;
3136 else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.208806;
3137 else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.197275;
3138 else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.183645;
3139 else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.188788;
3140 else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.188282;
3141 else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.207442;
3142 else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.240388;
3143 else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.241916;
3144 else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.208276;
3145 else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.234550;
3146 else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.251689;
3147 else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.310204;
3148 else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.343492;
3151 Double_t weight = 1;
3152 if(fac > 0) weight = 1/fac;