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