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 = ((AliVAODHeader*)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 = dynamic_cast<AliAODTrack*>(fAOD->GetTrack(it));
2301 if(!tr) AliFatal("Not a standard AOD");
2303 if(type == kTrackAODCuts || type==kTrackAODQualityCuts){
2305 if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue;
2308 if(fTPCCutMode==kPIDN && !AliIDFFUtils::TPCCutPIDN(tr)){
2311 if(fTPCCutMode==kMIGeo && !AliIDFFUtils::TPCCutMIGeo(tr, fAOD, fStream)){
2315 if(type == kTrackAODCuts){
2316 if(tr->Eta() < fTrackEtaMin || tr->Eta() > fTrackEtaMax) continue;
2317 if(tr->Phi() < fTrackPhiMin || tr->Phi() > fTrackPhiMax) continue;
2318 if(tr->Pt() < fTrackPtCut) continue;
2325 else if (type==kTrackKineAll || type==kTrackKineCharged || type==kTrackKineChargedAcceptance){
2326 // kine particles, all or rather charged
2327 if(!fMCEvent) return iCount;
2329 for(Int_t it=0; it<fMCEvent->GetNumberOfTracks(); ++it){
2330 AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it);
2332 if(type == kTrackKineCharged || type == kTrackKineChargedAcceptance){
2333 if(part->Charge()==0) continue;
2335 if(type == kTrackKineChargedAcceptance &&
2336 ( part->Eta() < fTrackEtaMin
2337 || part->Eta() > fTrackEtaMax
2338 || part->Phi() < fTrackPhiMin
2339 || part->Phi() > fTrackPhiMax
2340 || part->Pt() < fTrackPtCut)) continue;
2347 else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec) {
2348 // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance
2349 if(!fAOD) return -1;
2351 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2352 if(!tca)return iCount;
2354 for(int it=0; it<tca->GetEntriesFast(); ++it){
2355 AliAODMCParticle *part = dynamic_cast<AliAODMCParticle*>(tca->At(it));
2357 if(type != kTrackAODMCChargedSec && !part->IsPhysicalPrimary())continue;
2358 if((type == kTrackAODMCChargedSec) && part->IsPhysicalPrimary())continue;
2360 if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec){
2361 if(part->Charge()==0) continue;
2363 if(type==kTrackAODMCChargedSec){
2365 Int_t iMother = part->GetMother();
2366 if(iMother < 0) continue; // throw out PYTHIA stack partons + incoming protons
2370 if(type==kTrackAODMCChargedAcceptance &&
2371 ( part->Eta() > fTrackEtaMax
2372 || part->Eta() < fTrackEtaMin
2373 || part->Phi() > fTrackPhiMax
2374 || part->Phi() < fTrackPhiMin
2375 || part->Pt() < fTrackPtCut)) continue;
2387 // _______________________________________________________________________________
2388 Int_t AliAnalysisTaskIDFFTCF::GetListOfJets(TList *list, Int_t type)
2390 // fill list of jets selected according to type
2393 if(fDebug>1) Printf("%s:%d no input list", (char*)__FILE__,__LINE__);
2397 if(type == kJetsRec || type == kJetsRecAcceptance){ // reconstructed jets
2399 if(fBranchRecJets.Length()==0){
2400 Printf("%s:%d no rec jet branch specified", (char*)__FILE__,__LINE__);
2401 if(fDebug>1)fAOD->Print();
2405 TClonesArray *aodRecJets = 0;
2406 if(fBranchRecJets.Length()) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchRecJets.Data()));
2407 if(!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchRecJets.Data()));
2408 if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data()));
2411 if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data());
2412 if(fDebug>1)fAOD->Print();
2416 // Reorder jet pt and fill new temporary AliAODJet objects
2419 for(Int_t ij=0; ij<aodRecJets->GetEntries(); ++ij){
2421 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ij));
2424 if( tmp->Pt() < fJetPtCut ) continue;
2425 if( type == kJetsRecAcceptance &&
2426 ( tmp->Eta() < fJetEtaMin
2427 || tmp->Eta() > fJetEtaMax
2428 || tmp->Phi() < fJetPhiMin
2429 || tmp->Phi() > fJetPhiMax )) continue;
2440 else if(type == kJetsKine || type == kJetsKineAcceptance){
2446 if(fDebug>1) Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__);
2450 AliGenEventHeader* genHeader = fMCEvent->GenEventHeader();
2451 AliGenPythiaEventHeader* pythiaGenHeader = dynamic_cast<AliGenPythiaEventHeader*>(genHeader);
2452 AliGenHijingEventHeader* hijingGenHeader = 0x0;
2454 if(!pythiaGenHeader){
2455 hijingGenHeader = dynamic_cast<AliGenHijingEventHeader*>(genHeader);
2457 if(!hijingGenHeader){
2458 Printf("%s:%d no pythiaGenHeader or hijingGenHeader found", (char*)__FILE__,__LINE__);
2461 TLorentzVector mom[4];
2463 hijingGenHeader->GetJets(mom[0], mom[1], mom[2], mom[3]);
2465 for(Int_t i=0; i<2; ++i){
2466 if(!mom[i].Pt()) continue;
2467 jet[i] = new AliAODJet(mom[i]);
2469 if( type == kJetsKineAcceptance &&
2470 ( jet[i]->Eta() < fJetEtaMin
2471 || jet[i]->Eta() > fJetEtaMax
2472 || jet[i]->Phi() < fJetPhiMin
2473 || jet[i]->Phi() > fJetPhiMax )) continue;
2483 // fetch the pythia generated jets
2484 for(int ip=0; ip<pythiaGenHeader->NTriggerJets(); ++ip){
2487 AliAODJet *jet = new AliAODJet();
2488 pythiaGenHeader->TriggerJet(ip, p);
2489 jet->SetPxPyPzE(p[0], p[1], p[2], p[3]);
2491 if( type == kJetsKineAcceptance &&
2492 ( jet->Eta() < fJetEtaMin
2493 || jet->Eta() > fJetEtaMax
2494 || jet->Phi() < fJetPhiMin
2495 || jet->Phi() > fJetPhiMax )) continue;
2503 else if(type == kJetsGen || type == kJetsGenAcceptance ){
2505 if(fBranchGenJets.Length()==0){
2506 if(fDebug>1) Printf("%s:%d no gen jet branch specified", (char*)__FILE__,__LINE__);
2510 TClonesArray *aodGenJets = 0;
2511 if(fBranchGenJets.Length()) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->FindListObject(fBranchGenJets.Data()));
2512 if(!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODJets->GetList()->FindObject(fBranchGenJets.Data()));
2513 if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast<TClonesArray*>(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data()));
2517 if(fBranchGenJets.Length()) Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data());
2519 if(fDebug>1)fAOD->Print();
2525 for(Int_t ig=0; ig<aodGenJets->GetEntries(); ++ig){
2527 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodGenJets->At(ig));
2530 if( tmp->Pt() < fJetPtCut ) continue;
2531 if( type == kJetsGenAcceptance &&
2532 ( tmp->Eta() < fJetEtaMin
2533 || tmp->Eta() > fJetEtaMax
2534 || tmp->Phi() < fJetPhiMin
2535 || tmp->Phi() > fJetPhiMax )) continue;
2544 if(fDebug>0)Printf("%s:%d no such type %d",(char*)__FILE__,__LINE__,type);
2549 // _________________________________________________________________________________________________________
2550 void AliAnalysisTaskIDFFTCF::SetProperties(THnSparse* h,const Int_t dim, const char** labels)
2552 // Set properties of THnSparse
2554 for(Int_t i=0; i<dim; i++){
2555 h->GetAxis(i)->SetTitle(labels[i]);
2556 h->GetAxis(i)->SetTitleColor(1);
2560 // __________________________________________________________________________________________
2561 void AliAnalysisTaskIDFFTCF::SetProperties(TH1* h,const char* x, const char* y)
2563 //Set properties of histos (x and y title)
2567 h->GetXaxis()->SetTitleColor(1);
2568 h->GetYaxis()->SetTitleColor(1);
2571 // _________________________________________________________________________________________________________
2572 void AliAnalysisTaskIDFFTCF::SetProperties(TH1* h,const char* x, const char* y, const char* z)
2574 //Set properties of histos (x,y and z title)
2579 h->GetXaxis()->SetTitleColor(1);
2580 h->GetYaxis()->SetTitleColor(1);
2581 h->GetZaxis()->SetTitleColor(1);
2584 // ________________________________________________________________________________________________________________________________________________________
2585 void AliAnalysisTaskIDFFTCF::GetJetTracksPointing(TList* inputlist, TList* outputlist, const AliAODJet* jet,
2586 const Double_t radius, Double_t& sumPt, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
2588 // fill list of tracks in cone around jet axis
2591 Bool_t isBadMaxPt = kFALSE;
2592 Bool_t isBadMinPt = kTRUE;
2595 jet->PxPyPz(jetMom);
2596 TVector3 jet3mom(jetMom);
2598 for (Int_t itrack=0; itrack<inputlist->GetSize(); itrack++){
2600 AliVParticle* track = dynamic_cast<AliVParticle*>(inputlist->At(itrack));
2602 Double_t trackMom[3];
2603 track->PxPyPz(trackMom);
2604 TVector3 track3mom(trackMom);
2606 Double_t dR = jet3mom.DeltaR(track3mom);
2610 outputlist->Add(track);
2612 sumPt += track->Pt();
2614 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
2615 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
2620 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
2621 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
2626 // _________________________________________________________________________________________________________________________________________________________________
2627 void AliAnalysisTaskIDFFTCF::GetJetTracksTrackrefs(TList* list, const AliAODJet* jet, const Double_t minPtL, const Double_t maxPt, Bool_t& isBadPt)
2629 // list of jet tracks from trackrefs
2631 Int_t nTracks = jet->GetRefTracks()->GetEntriesFast();
2633 Bool_t isBadMaxPt = kFALSE;
2634 Bool_t isBadMinPt = kTRUE;
2636 for(Int_t itrack=0; itrack<nTracks; itrack++) {
2638 AliVParticle* track = dynamic_cast<AliVParticle*>(jet->GetRefTracks()->At(itrack));
2640 AliError("expected ref track not found ");
2644 if(track->Pt() < fTrackPtCut) continue; // track refs may contain low pt cut (bug in AliFastJetInput)
2645 if(maxPt>0 && track->Pt()>maxPt) isBadMaxPt = kTRUE;
2646 if(minPtL>0 && track->Pt()>minPtL) isBadMinPt = kFALSE;
2652 if(minPtL>0 && isBadMinPt) isBadPt = kTRUE;
2653 if(maxPt>0 && isBadMaxPt) isBadPt = kTRUE;
2658 // _ ________________________________________________________________________________________________________________________________
2659 void AliAnalysisTaskIDFFTCF::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,
2660 TArrayS& isRefGen,TH2F* fh2PtRecVsGen)
2662 // associate generated and reconstructed tracks, fill TArrays of list indices
2664 Int_t nTracksRec = tracksRec->GetSize();
2665 Int_t nTracksGen = tracksAODMCCharged->GetSize();
2666 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
2669 if(!nTracksGen) return;
2673 indexAODTr.Set(nTracksGen);
2674 indexMCTr.Set(nTracksRec);
2675 isRefGen.Set(nTracksGen);
2677 indexAODTr.Reset(-1);
2678 indexMCTr.Reset(-1);
2681 // loop over reconstructed tracks, get generated track
2683 for(Int_t iRec=0; iRec<nTracksRec; iRec++){
2685 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
2686 if(!rectrack)continue;
2687 Int_t label = TMath::Abs(rectrack->GetLabel());
2689 // find MC track in our list
2690 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tca->At(label));
2692 Int_t listIndex = -1;
2693 if(gentrack) listIndex = tracksAODMCCharged->IndexOf(gentrack);
2697 indexAODTr[listIndex] = iRec;
2698 indexMCTr[iRec] = listIndex;
2703 // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination)
2705 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
2707 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksAODMCCharged->At(iGen));
2708 if(!gentrack)continue;
2709 Int_t pdg = gentrack->GetPdgCode();
2711 // 211 - pi, 2212 - proton, 321 - Kaon, 11 - electron, 13 - muon
2712 if(TMath::Abs(pdg) == 211 || TMath::Abs(pdg) == 2212 || TMath::Abs(pdg) == 321 ||
2713 TMath::Abs(pdg) == 11 || TMath::Abs(pdg) == 13){
2715 isRefGen[iGen] = kTRUE;
2717 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2720 Float_t genPt = gentrack->Pt();
2721 AliAODTrack* vt = dynamic_cast<AliAODTrack*>(tracksRec->At(iRec));
2723 Float_t recPt = vt->Pt();
2724 fh2PtRecVsGen->Fill(genPt,recPt);
2731 // _____________________________________________________________________________________________________________________________________________
2732 void AliAnalysisTaskIDFFTCF::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen,
2733 const TArrayI& indexAODTr, const TArrayS& isRefGen, const Int_t pdg, const Bool_t scaleGFL,
2734 const Bool_t scaleStrangeness){
2736 // fill QA for single track reconstruction efficiency
2738 Int_t nTracksGen = tracksGen->GetSize();
2740 if(!nTracksGen) return;
2742 for(Int_t iGen=0; iGen<nTracksGen; iGen++){
2744 if(isRefGen[iGen] != 1) continue; // select primaries
2746 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (tracksGen->At(iGen));
2747 if(!gentrack) continue;
2748 Double_t ptGen = gentrack->Pt();
2749 Double_t etaGen = gentrack->Eta();
2750 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
2752 // apply same acc & pt cuts as for FF
2754 if(etaGen < fTrackEtaMin || etaGen > fTrackEtaMax) continue;
2755 if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue;
2756 if(ptGen < fTrackPtCut) continue;
2757 if(pdg && TMath::Abs(gentrack->GetPdgCode()) != pdg) continue;
2759 if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen);
2761 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2763 if(iRec>=0 && trackQARec){
2765 if(scaleGFL || scaleStrangeness){
2767 Double_t weight = 1;
2770 Double_t GFLcorr = 1;
2771 if(gentrack->GetPdgCode() == -2212) GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);
2772 else if(gentrack->GetPdgCode() == -321) GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);
2774 if(GFLcorr > 0) weight *= 1/GFLcorr;
2776 if(scaleStrangeness){
2777 Double_t strCorr = GetMCStrangenessFactorCMS(gentrack);
2781 trackQARec->FillTrackQA(etaGen, phiGen, ptGen, kFALSE, 0, kTRUE, weight);
2783 else trackQARec->FillTrackQA(etaGen, phiGen, ptGen);
2788 // ______________________________________________________________________________________________________________________________________________________
2790 void AliAnalysisTaskIDFFTCF::FillJetTrackHistosRec(AliFragFuncHistos* ffhistRec, AliAODJet* jet,
2791 TList* jetTrackList, const TList* tracksGen, const TList* tracksRec, const TArrayI& indexAODTr,
2792 const TArrayS& isRefGen, TList* jetTrackListTR, const Int_t pdg,
2793 const Bool_t scaleGFL, const Bool_t scaleStrangeness)
2795 // fill objects for jet track reconstruction efficiency or secondaries contamination
2796 // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ...
2797 // jetTrackListTR pointer: track refs if not NULL
2800 // ensure proper normalization, even for secondaries
2801 Double_t jetPtRec = jet->Pt();
2802 //TVector3 jet3Mom = (jet->MomentumVector())->Vect();
2804 ffhistRec->FillFF(-1, -1, jetPtRec, kTRUE);
2806 Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks
2807 if(nTracksJet == 0) return;
2809 TList* listRecTracks = new TList();
2810 listRecTracks->Clear();
2812 for(Int_t iTr=0; iTr<nTracksJet; iTr++){ // jet tracks loop
2814 AliAODMCParticle* gentrack = dynamic_cast<AliAODMCParticle*> (jetTrackList->At(iTr));
2815 if(!gentrack)continue;
2816 // find jet track in gen tracks list
2817 Int_t iGen = tracksGen->IndexOf(gentrack);
2820 if(fDebug>0) Printf("%s:%d gen jet track not found ",(char*)__FILE__,__LINE__);
2824 if(isRefGen[iGen] != 1) continue; // select primaries
2826 Double_t ptGen = gentrack->Pt();
2827 Double_t etaGen = gentrack->Eta();
2828 Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi());
2830 // gen level acc & pt cuts - skip in case of track refs
2831 if(!jetTrackListTR && (etaGen < fTrackEtaMin || etaGen > fTrackEtaMax)) continue;
2832 if(!jetTrackListTR && (phiGen < fTrackPhiMin || phiGen > fTrackPhiMax)) continue;
2833 if(!jetTrackListTR && ptGen < fTrackPtCut) continue;
2834 if(pdg && TMath::Abs(gentrack->GetPdgCode()) != pdg) continue;
2837 Double_t ptRec = -1;
2838 Double_t etaRec = -1;
2840 Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track
2841 Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE;
2843 Bool_t isJetTrack = kFALSE;
2844 if(!jetTrackListTR) isJetTrack = kTRUE; // skip trackRefs check for tracks in ideal cone
2848 AliAODTrack* rectrack = dynamic_cast<AliAODTrack*> (tracksRec->At(iRec));
2849 if(!rectrack) continue;
2851 ptRec = rectrack->Pt();
2852 etaRec = rectrack->Eta();
2855 Int_t iRecTR = jetTrackListTR->IndexOf(rectrack);
2856 if(iRecTR >=0 ) isJetTrack = kTRUE; // rec tracks assigned to jet
2861 Double_t trackPt = ptRec;
2862 Double_t trackEta = etaRec;
2863 Bool_t incrementJetPt = kFALSE;
2865 if(scaleGFL || scaleStrangeness){
2867 Double_t weight = 1;
2870 Double_t GFLcorr = 1;
2871 if(gentrack->GetPdgCode() == -2212) GFLcorr = TrackingPtGeantFlukaCorrectionPrMinus(ptGen);
2872 else if(gentrack->GetPdgCode() == -321) GFLcorr = TrackingPtGeantFlukaCorrectionKaMinus(ptGen);
2874 if(GFLcorr > 0) weight *= 1/GFLcorr;
2876 if(scaleStrangeness){
2877 Double_t strCorr = GetMCStrangenessFactorCMS(gentrack);
2881 ffhistRec->FillFF( trackPt, trackEta, jetPtRec, incrementJetPt, 0, kTRUE, weight );
2883 else ffhistRec->FillFF( trackPt, trackEta, jetPtRec, incrementJetPt);
2885 listRecTracks->Add(rectrack);
2890 delete listRecTracks;
2894 // ______________________________________________________________________________________________________________________________________________________
2895 Float_t AliAnalysisTaskIDFFTCF::CalcJetArea(const Float_t etaJet, const Float_t rc) const
2897 // calculate area of jet with eta etaJet and radius rc
2899 Float_t detamax = etaJet + rc;
2900 Float_t detamin = etaJet - rc;
2901 Float_t accmax = 0.0; Float_t accmin = 0.0;
2902 if(detamax > fTrackEtaMax){ // sector outside etamax
2903 Float_t h = fTrackEtaMax - etaJet;
2904 accmax = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
2906 if(detamin < fTrackEtaMin){ // sector outside etamin
2907 Float_t h = fTrackEtaMax + etaJet;
2908 accmin = rc*rc*TMath::ACos(h/rc) - h*TMath::Sqrt(rc*rc - h*h);
2910 Float_t areaJet = rc*rc*TMath::Pi() - accmax - accmin;
2916 //____________________________________________________________________________________________________________________________________________
2917 void AliAnalysisTaskIDFFTCF::BookQAHistos(TList* list, AliFragFuncQATrackHistos** rec, TString strTitRec, AliFragFuncQATrackHistos** gen, TString strTitGen,
2918 AliFragFuncQATrackHistos** sec, TString strTitSec){
2922 if(strTitRec.Length()>0){
2924 *rec = new AliFragFuncQATrackHistos(strTitRec, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2925 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2926 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2927 fQATrackHighPtThreshold);
2929 (*rec)->DefineHistos();
2930 (*rec)->AddToOutput(list);
2933 if(strTitGen.Length()>0){
2935 *gen = new AliFragFuncQATrackHistos(strTitGen, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2936 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2937 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2938 fQATrackHighPtThreshold);
2940 (*gen)->DefineHistos();
2941 (*gen)->AddToOutput(list);
2944 if(strTitSec.Length()>0){
2946 *sec = new AliFragFuncQATrackHistos(strTitSec, fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax,
2947 fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax,
2948 fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax,
2949 fQATrackHighPtThreshold);
2951 (*sec)->DefineHistos();
2952 (*sec)->AddToOutput(list);
2957 //____________________________________________________________________________________________________________________________________________
2958 void AliAnalysisTaskIDFFTCF::BookFFHistos(TList* list, AliFragFuncHistos** rec, TString strTitRec, AliFragFuncHistos** gen, TString strTitGen,
2959 AliFragFuncHistos** sec, TString strTitSec){
2963 if(strTitRec.Length()>0){
2965 *rec = new AliFragFuncHistos(strTitRec, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2966 fFFNBinsPt, fFFPtMin, fFFPtMax,
2967 fFFNBinsXi, fFFXiMin, fFFXiMax,
2968 fFFNBinsZ , fFFZMin , fFFZMax);
2970 (*rec)->DefineHistos();
2971 (*rec)->AddToOutput(list);
2974 if(strTitGen.Length()>0){
2976 *gen = new AliFragFuncHistos(strTitGen, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2977 fFFNBinsPt, fFFPtMin, fFFPtMax,
2978 fFFNBinsXi, fFFXiMin, fFFXiMax,
2979 fFFNBinsZ , fFFZMin , fFFZMax);
2981 (*gen)->DefineHistos();
2982 (*gen)->AddToOutput(list);
2985 if(strTitSec.Length()>0){
2987 *sec = new AliFragFuncHistos(strTitSec, fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax,
2988 fFFNBinsPt, fFFPtMin, fFFPtMax,
2989 fFFNBinsXi, fFFXiMin, fFFXiMax,
2990 fFFNBinsZ , fFFZMin , fFFZMax);
2992 (*sec)->DefineHistos();
2993 (*sec)->AddToOutput(list);
2997 //____________________________________________________________________________________
2998 Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionPrMinus(const Double_t pTmc)
3000 // GEANT-FLUKA correction for pbar from Roberto via Benjamin
3002 Double_t corr = 1. - 0.129758 * TMath::Exp(-pTmc * 0.679612);
3006 //____________________________________________________________________________________
3007 Double_t AliAnalysisTaskIDFFTCF::TrackingPtGeantFlukaCorrectionKaMinus(const Double_t pTmc)
3010 // GEANT-FLUKA correction for K- from Roberto via Benjamin
3012 Double_t corr = TMath::Min((0.972865 + 0.0117093 * pTmc), 1.);
3016 //__________________________________________________________________________________________________
3017 Double_t AliAnalysisTaskIDFFTCF::GetMCStrangenessFactorCMS(AliAODMCParticle* daughter)
3019 // strangeness ratio MC/data as function of mother pt from CMS data in |eta|<2.0
3021 TClonesArray *tca = dynamic_cast<TClonesArray*>(fAOD->FindListObject(AliAODMCParticle::StdBranchName()));
3024 AliAODMCParticle* currentMother = daughter;
3025 AliAODMCParticle* currentDaughter = daughter;
3028 // find first primary mother K0s, Lambda or Xi
3031 Int_t daughterPDG = currentDaughter->GetPdgCode();
3033 Int_t motherLabel = currentDaughter->GetMother();
3034 if(motherLabel >= tca->GetEntriesFast()){ // protection
3035 currentMother = currentDaughter;
3039 currentMother = (AliAODMCParticle*) tca->At(motherLabel);
3042 currentMother = currentDaughter;
3046 Int_t motherPDG = currentMother->GetPdgCode();
3048 // phys. primary found ?
3049 if(currentMother->IsPhysicalPrimary()) break;
3051 if(TMath::Abs(daughterPDG) == 321){ // K+/K- e.g. from phi (ref data not feeddown corrected)
3052 currentMother = currentDaughter; break;
3054 if(TMath::Abs(motherPDG) == 310 ){ // K0s e.g. from phi (ref data not feeddown corrected)
3057 if(TMath::Abs(motherPDG) == 3212 && TMath::Abs(daughterPDG) == 3122){ // mother Sigma0, daughter Lambda (this case not included in feeddown corr.)
3058 currentMother = currentDaughter; break;
3061 currentDaughter = currentMother;
3065 Int_t motherPDG = currentMother->GetPdgCode();
3066 Double_t motherPt = currentMother->Pt();
3070 if(TMath::Abs(motherPDG) == 310 || TMath::Abs(motherPDG)==321){ // K0s / K+ / K-
3072 if(0.00 <= motherPt && motherPt < 0.20) fac = 0.768049;
3073 else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.732933;
3074 else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.650298;
3075 else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.571332;
3076 else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.518734;
3077 else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.492543;
3078 else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.482704;
3079 else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.488056;
3080 else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.488861;
3081 else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.492862;
3082 else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.504332;
3083 else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.501858;
3084 else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.512970;
3085 else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.524131;
3086 else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.539130;
3087 else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.554101;
3088 else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.560348;
3089 else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.568869;
3090 else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.583310;
3091 else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.604818;
3092 else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.632630;
3093 else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.710070;
3094 else if(6.00 <= motherPt && motherPt < 8.00) fac = 0.736365;
3095 else if(8.00 <= motherPt && motherPt < 10.00) fac = 0.835865;
3098 if(TMath::Abs(motherPDG) == 3122){ // Lambda
3100 if(0.00 <= motherPt && motherPt < 0.20) fac = 0.645162;
3101 else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.627431;
3102 else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.457136;
3103 else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.384369;
3104 else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.330597;
3105 else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.309571;
3106 else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.293620;
3107 else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.283709;
3108 else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.282047;
3109 else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.277261;
3110 else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.275772;
3111 else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.280726;
3112 else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.288540;
3113 else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.288315;
3114 else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.296619;
3115 else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.302993;
3116 else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.338121;
3117 else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.349800;
3118 else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.356802;
3119 else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.391202;
3120 else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.422573;
3121 else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.573815;
3122 else if(6.00 <= motherPt && motherPt < 8.00) fac = 0.786984;
3123 else if(8.00 <= motherPt && motherPt < 10.00) fac = 1.020021;
3126 if(TMath::Abs(motherPDG) == 3312 || TMath::Abs(motherPDG) == 3322){ // xi
3128 if(0.00 <= motherPt && motherPt < 0.20) fac = 0.666620;
3129 else if(0.20 <= motherPt && motherPt < 0.40) fac = 0.575908;
3130 else if(0.40 <= motherPt && motherPt < 0.60) fac = 0.433198;
3131 else if(0.60 <= motherPt && motherPt < 0.80) fac = 0.340901;
3132 else if(0.80 <= motherPt && motherPt < 1.00) fac = 0.290896;
3133 else if(1.00 <= motherPt && motherPt < 1.20) fac = 0.236074;
3134 else if(1.20 <= motherPt && motherPt < 1.40) fac = 0.218681;
3135 else if(1.40 <= motherPt && motherPt < 1.60) fac = 0.207763;
3136 else if(1.60 <= motherPt && motherPt < 1.80) fac = 0.222848;
3137 else if(1.80 <= motherPt && motherPt < 2.00) fac = 0.208806;
3138 else if(2.00 <= motherPt && motherPt < 2.20) fac = 0.197275;
3139 else if(2.20 <= motherPt && motherPt < 2.40) fac = 0.183645;
3140 else if(2.40 <= motherPt && motherPt < 2.60) fac = 0.188788;
3141 else if(2.60 <= motherPt && motherPt < 2.80) fac = 0.188282;
3142 else if(2.80 <= motherPt && motherPt < 3.00) fac = 0.207442;
3143 else if(3.00 <= motherPt && motherPt < 3.20) fac = 0.240388;
3144 else if(3.20 <= motherPt && motherPt < 3.40) fac = 0.241916;
3145 else if(3.40 <= motherPt && motherPt < 3.60) fac = 0.208276;
3146 else if(3.60 <= motherPt && motherPt < 3.80) fac = 0.234550;
3147 else if(3.80 <= motherPt && motherPt < 4.00) fac = 0.251689;
3148 else if(4.00 <= motherPt && motherPt < 5.00) fac = 0.310204;
3149 else if(5.00 <= motherPt && motherPt < 6.00) fac = 0.343492;
3152 Double_t weight = 1;
3153 if(fac > 0) weight = 1/fac;