1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 #include <Riostream.h>
19 #include <TClonesArray.h>
20 #include <TLorentzVector.h>
28 #include "AliAnalysisTaskFragmentationFunction.h"
29 #include "AliAnalysisManager.h"
30 #include "AliInputEventHandler.h"
31 #include "AliAODHandler.h"
32 #include "AliAODTrack.h"
33 #include "AliJetHeader.h"
34 #include "AliAODEvent.h"
35 #include "AliAODJet.h"
36 #include "AliAODDiJet.h"
37 #include "AliGenPythiaEventHeader.h"
38 #include "AliAnalysisHelperJetTasks.h"
39 #include "AliMCEvent.h"
40 #include "AliMCParticle.h"
41 #include "AliAODMCParticle.h"
43 ClassImp(AliAnalysisTaskFragmentationFunction)
45 //#######################################################################
46 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction():
54 fUseAODJetInput(kFALSE),
55 fUseAODTrackInput(kFALSE),
56 fUseAODMCInput(kFALSE),
57 fUseGlobalSelection(kFALSE),
58 fUseExternalWeightOnly(kFALSE),
59 fLimitGenJetEta(kFALSE),
62 fTrackTypeRec(kTrackUndef),
63 fTrackTypeGen(kTrackUndef),
75 // Number of energy bins
80 // Number of radius bins
92 fPhiHBinMax(2*TMath::Pi()),
118 fcosThetaHBinMin(0.),
119 fcosThetaHBinMax(1.),
135 fdNdXiMonoJet1H(0x0),
136 fdNdPtMonoJet1H(0x0),
138 fdNdThetaMonoJet1H(0x0),
139 fdNdcosThetaMonoJet1H(0x0),
140 fdNdkTMonoJet1H(0x0),
141 fdNdpTvsZMonoJet1H(0x0),
142 fShapeMonoJet1H(0x0),
144 fThetaPtPartMonoJet1H(0x0),
145 fcosThetaPtPartMonoJet1H(0x0),
146 fkTPtPartMonoJet1H(0x0),
147 fThetaPtJetMonoJet1H(0x0),
148 fcosThetaPtJetMonoJet1H(0x0),
149 fkTPtJetMonoJet1H(0x0),
150 fpTPtJetMonoJet1H(0x0),
154 farrayPtTrigmin(0x0),
155 farrayPtTrigmax(0x0),
156 // Track control plots
160 fetaphiptAllTracks(0x0),
161 fetaphiAllTracks(0x0),
162 fptAllTracksCut(0x0),
163 fetaAllTracksCut(0x0),
164 fphiAllTracksCut(0x0),
165 fetaphiptAllTracksCut(0x0),
166 fetaphiAllTracksCut(0x0),
172 fetaphiptTracks(0x0),
174 fdetadphiTracks(0x0),
180 fetaphiptTracksCut(0x0),
181 fetaphiTracksCut(0x0),
182 fdetadphiTracksCut(0x0),
188 fEvtMultvsJetPt(0x0),
197 fNpevtvsPtJet1D(0x0),
209 // Default constructor
212 for(int i = 0;i < kMaxStep*2;++i){
213 fhnJetContainer[i] = 0;
216 // for(int ij = 0;ij<kMaxJets;++ij){
217 // fh1E[ij] = fh1PtRecIn[ij] = fh1PtRecOut[ij] = fh1PtGenIn[ij] = fh1PtGenOut[ij] = 0;
218 // fh1Eta[ij] = fh1Phi[ij] = 0;
223 //#######################################################################
224 AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const char* name):
225 AliAnalysisTaskSE(name),
231 fUseAODInput(kFALSE),
232 fUseAODJetInput(kFALSE),
233 fUseAODTrackInput(kFALSE),
234 fUseAODMCInput(kFALSE),
235 fUseGlobalSelection(kFALSE),
236 fUseExternalWeightOnly(kFALSE),
237 fLimitGenJetEta(kFALSE),
240 fTrackTypeRec(kTrackUndef),
241 fTrackTypeGen(kTrackUndef),
254 // Number of energy bins
259 // Number of radius bins
271 fPhiHBinMax(2*TMath::Pi()),
298 fcosThetaHBinMin(0.),
299 fcosThetaHBinMax(1.),
313 fdNdXiMonoJet1H(0x0),
314 fdNdPtMonoJet1H(0x0),
316 fdNdThetaMonoJet1H(0x0),
317 fdNdcosThetaMonoJet1H(0x0),
318 fdNdkTMonoJet1H(0x0),
319 fdNdpTvsZMonoJet1H(0x0),
320 fShapeMonoJet1H(0x0),
322 fThetaPtPartMonoJet1H(0x0),
323 fcosThetaPtPartMonoJet1H(0x0),
324 fkTPtPartMonoJet1H(0x0),
325 fThetaPtJetMonoJet1H(0x0),
326 fcosThetaPtJetMonoJet1H(0x0),
327 fkTPtJetMonoJet1H(0x0),
328 fpTPtJetMonoJet1H(0x0),
332 farrayPtTrigmin(0x0),
333 farrayPtTrigmax(0x0),
334 // Track control plots
338 fetaphiptAllTracks(0x0),
339 fetaphiAllTracks(0x0),
340 fptAllTracksCut(0x0),
341 fetaAllTracksCut(0x0),
342 fphiAllTracksCut(0x0),
343 fetaphiptAllTracksCut(0x0),
344 fetaphiAllTracksCut(0x0),
350 fetaphiptTracks(0x0),
352 fdetadphiTracks(0x0),
358 fetaphiptTracksCut(0x0),
359 fetaphiTracksCut(0x0),
360 fdetadphiTracksCut(0x0),
366 fEvtMultvsJetPt(0x0),
375 fNpevtvsPtJet1D(0x0),
387 // Default constructor
390 for(int i = 0;i < kMaxStep*2;++i){
391 fhnJetContainer[i] = 0;
394 // for(int ij = 0;ij<kMaxJets;++ij){
395 // fh1E[ij] = fh1PtRecIn[ij] = fh1PtRecOut[ij] = fh1PtGenIn[ij] = fh1PtGenOut[ij] = 0;
396 // fh1Eta[ij] = fh1Phi[ij] = 0;
399 DefineOutput(1, TList::Class());
402 //////////////////////////////////////////////////////////////////////////////
404 Bool_t AliAnalysisTaskFragmentationFunction::Notify()
407 // Implemented Notify() to read the cross sections
408 // and number of trials from pyxsec.root
411 // TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
412 // UInt_t ntrials = 0;
413 // Float_t ftrials = 0;
415 // TFile *curfile = tree->GetCurrentFile();
417 // Error("Notify","No current file");
421 // if(!fh1Xsec||!fh1Trials){
422 // Printf("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__);
426 // TString fileName(curfile->GetName());
427 // if(fileName.Contains("AliESDs.root")){
428 // fileName.ReplaceAll("AliESDs.root", "pyxsec.root");
430 // else if(fileName.Contains("AliAOD.root")){
431 // fileName.ReplaceAll("AliAOD.root", "pyxsec.root");
433 // else if(fileName.Contains("AliAODs.root")){
434 // fileName.ReplaceAll("AliAODs.root", "");
436 // else if(fileName.Contains("galice.root")){
437 // // for running with galice and kinematics alone...
438 // fileName.ReplaceAll("galice.root", "pyxsec.root");
440 // TFile *fxsec = TFile::Open(fileName.Data());
442 // Printf("%s:%d %s not found in the Input",(char*)__FILE__,__LINE__,fileName.Data());
443 // // no a severe condition
446 // TTree *xtree = (TTree*)fxsec->Get("Xsection");
448 // Printf("%s:%d tree not found in the pyxsec.root",(char*)__FILE__,__LINE__);
450 // xtree->SetBranchAddress("xsection",&fXsection);
451 // xtree->SetBranchAddress("ntrials",&ntrials);
452 // ftrials = ntrials;
453 // xtree->GetEntry(0);
455 // fh1Xsec->Fill("<#sigma>",fXsection);
456 // fh1Trials->Fill("#sum{ntrials}",ftrials);
464 //////////////////////////////////////////////////////////////////////////////
465 //////////////////////////////////////////////////////////////////////////////
467 void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects()
470 // Create the output container
473 //**** Connect the AOD
474 if(fUseAODInput) // Use AODs as input not ESDs
476 fAOD = dynamic_cast<AliAODEvent*>(InputEvent());
479 Printf("%s:%d AODEvent not found in Input Manager %d",(char*)__FILE__,__LINE__,fUseAODInput);
484 fJetHeaderRec = dynamic_cast<AliJetHeader*>(fInputHandler->GetTree()->GetUserInfo()->FindObject(Form("AliJetHeader_%s",fBranchRec.Data())));
487 Printf("%s:%d Jet Header not found in the Input",(char*)__FILE__,__LINE__);
492 else // Use the AOD on the flight
494 // assume that the AOD is in the general output...
498 Printf("%s:%d AODEvent not found in the Output",(char*)__FILE__,__LINE__);
502 // ((TList*)OutputTree()->GetUserInfo())->Dump();
503 fJetHeaderRec = dynamic_cast<AliJetHeader*>(OutputTree()->GetUserInfo()->FindObject(Form("AliJetHeader_%s",fBranchRec.Data())));
506 Printf("%s:%d Jet Header not found in the Output",(char*)__FILE__,__LINE__);
510 if(fDebug>10)fJetHeaderRec->Dump();
514 ////////////////////////////
516 if (fDebug > 1) printf("AnalysisTaskJetSpectrum::UserCreateOutputObjects() \n");
519 if(!fHistList)fHistList = new TList();
520 fHistList->SetOwner(kTRUE);
521 Bool_t oldStatus = TH1::AddDirectoryStatus();
522 TH1::AddDirectory(kFALSE);
524 //////////////////////////////////////////////////
525 //////////// HISTOGRAM DECLARATION ///////////////
526 //////////////////////////////////////////////////
530 //////////////////////////////////////////////////
531 ////////////// HISTOGRAM SAVING //////////////////
532 //////////////////////////////////////////////////
534 for (Int_t i3 = 0; i3 < fnEBin; i3++)
536 fHistList->Add(fEtaMonoJet1H[i3]);
537 fHistList->Add(fPhiMonoJet1H[i3]);
538 fHistList->Add(fPtMonoJet1H[i3]);
539 fHistList->Add(fEMonoJet1H[i3]);
541 for(Int_t i4 = 0; i4 < fnRBin; i4++)
543 fHistList->Add(fdNdXiMonoJet1H[i3][i4]);
544 fHistList->Add(fdNdPtMonoJet1H[i3][i4]);
545 fHistList->Add(fdNdZMonoJet1H[i3][i4]);
546 fHistList->Add(fNMonoJet1sH[i3][i4]);
550 // Theta, kT particles/jet
551 for (Int_t i3 = 0; i3 < fnEBin; i3++)
553 for(Int_t i4 = 0; i4 < fnRBin; i4++)
555 fHistList->Add(fdNdThetaMonoJet1H[i3][i4]);
556 fHistList->Add(fdNdcosThetaMonoJet1H[i3][i4]);
557 fHistList->Add(fdNdkTMonoJet1H[i3][i4]);
558 fHistList->Add(fdNdpTvsZMonoJet1H[i3][i4]);
559 fHistList->Add(fShapeMonoJet1H[i3][i4]);
561 fHistList->Add(fThetaPtPartMonoJet1H[i3][i4]);
562 fHistList->Add(fcosThetaPtPartMonoJet1H[i3][i4]);
563 fHistList->Add(fkTPtPartMonoJet1H[i3][i4]);
564 fHistList->Add(fThetaPtJetMonoJet1H[i3][i4]);
565 fHistList->Add(fcosThetaPtJetMonoJet1H[i3][i4]);
566 fHistList->Add(fkTPtJetMonoJet1H[i3][i4]);
567 fHistList->Add(fpTPtJetMonoJet1H[i3][i4]);
571 // Track QA - Correlations
572 for (Int_t iPtBin=0; iPtBin<fnPtTrigBin; iPtBin++)
574 fHistList->Add(fptTracks[iPtBin]);
575 fHistList->Add(fetaTracks[iPtBin]);
576 fHistList->Add(fphiTracks[iPtBin]);
577 fHistList->Add(fdetaTracks[iPtBin]);
578 fHistList->Add(fdphiTracks[iPtBin]);
579 fHistList->Add(fetaphiptTracks[iPtBin]);
580 fHistList->Add(fetaphiTracks[iPtBin]);
581 fHistList->Add(fdetadphiTracks[iPtBin]);
582 fHistList->Add(fptTracksCut[iPtBin]);
583 fHistList->Add(fetaTracksCut[iPtBin]);
584 fHistList->Add(fphiTracksCut[iPtBin]);
585 fHistList->Add(fdetaTracksCut[iPtBin]);
586 fHistList->Add(fdphiTracksCut[iPtBin]);
587 fHistList->Add(fetaphiptTracksCut[iPtBin]);
588 fHistList->Add(fetaphiTracksCut[iPtBin]);
589 fHistList->Add(fdetadphiTracksCut[iPtBin]);
590 fHistList->Add(fNPtTrig[iPtBin]);
591 fHistList->Add(fNPtTrigCut[iPtBin]);
595 fHistList->Add(fptAllTracks);
596 fHistList->Add(fetaAllTracks);
597 fHistList->Add(fphiAllTracks);
598 fHistList->Add(fetaphiptAllTracks);
599 fHistList->Add(fetaphiAllTracks);
600 fHistList->Add(fptAllTracksCut);
601 fHistList->Add(fetaAllTracksCut);
602 fHistList->Add(fphiAllTracksCut);
603 fHistList->Add(fetaphiptAllTracksCut);
604 fHistList->Add(fetaphiAllTracksCut);
606 // Event caracterisation QA
607 fHistList->Add(fvertexXY);
608 fHistList->Add(fvertexZ);
609 fHistList->Add(fEvtMult);
610 fHistList->Add(fEvtMultvsJetPt);
611 fHistList->Add(fPtvsEtaJet);
612 fHistList->Add(fNpvsEtaJet);
613 fHistList->Add(fNpevtvsEtaJet);
614 fHistList->Add(fPtvsPtJet);
615 fHistList->Add(fNpvsPtJet);
616 fHistList->Add(fNpevtvsPtJet);
617 fHistList->Add(fPtvsPtJet1D);
618 fHistList->Add(fNpvsPtJet1D);
619 fHistList->Add(fNpevtvsPtJet1D);
620 fHistList->Add(fptLeadingJet);
621 fHistList->Add(fetaLeadingJet);
622 fHistList->Add(fphiLeadingJet);
623 fHistList->Add(fptJet);
624 fHistList->Add(fetaJet);
625 fHistList->Add(fphiJet);
626 fHistList->Add(fNBadRunsH);
628 //////////////////////////////////////////////////
629 ///////// END OF HISTOGRAM DECLARATION ///////////
630 //////////////////////////////////////////////////
632 // =========== Switch on Sumw2 for all histos ===========
633 for (Int_t i=0; i<fHistList->GetEntries(); ++i)
635 TH1 *h1 = dynamic_cast<TH1*>(fHistList->At(i));
638 // Printf("%s ",h1->GetName());
644 TH1::AddDirectory(oldStatus);
647 if (fDebug > 1) printf("AnalysisTaskDiJets::CreateOutPutData() \n");
648 fDiJets = new TClonesArray("AliAODDiJet", 0);
649 fDiJets->SetName("Dijets");
650 AddAODBranch("TClonesArray", &fDiJets);
656 //////////////////////////////////////////////////////////////////////////////
657 //////////////////////////////////////////////////////////////////////////////
659 void AliAnalysisTaskFragmentationFunction::Init()
665 Printf(">>> AnalysisTaskFragmentationFunction::Init() debug level %d\n",fDebug);
666 if (fDebug > 1) printf("AnalysisTaskDiJets::Init() \n");
669 /////////////////////////////////////////////////////////////////////////////
670 /////////////////////////////////////////////////////////////////////////////
672 void AliAnalysisTaskFragmentationFunction::UserExec(Option_t */*option*/)
675 // Execute analysis for current event
679 //**** Check of input data
682 printf("Analysing event # %5d\n", (Int_t) fEntry);
683 if (fDebug > 1)printf("Analysing event # %5d\n", (Int_t) fEntry);
685 AliAODHandler *aodH = dynamic_cast<AliAODHandler*>(AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler());
688 Printf("%s:%d no output aodHandler found Jet",(char*)__FILE__,__LINE__);
692 TClonesArray *aodRecJets = dynamic_cast<TClonesArray*>(fAOD->FindListObject(fBranchRec.Data()));
695 Printf("%s:%d no reconstructed Jet array with name %s in AOD",(char*)__FILE__,__LINE__,fBranchRec.Data());
698 if (fDebug > 10) Printf("%s:%d",(char*)__FILE__,__LINE__);
701 //**** Check of primary vertex
703 AliAODVertex * pvtx = dynamic_cast<AliAODVertex*>(fAOD->GetPrimaryVertex());
705 (pvtx->GetZ()<-10. || pvtx->GetZ()>10.) ||
706 (pvtx->GetNContributors()<0) )
709 fNBadRunsH->Fill(0.5);
714 //**** Check number of tracks
716 TClonesArray* tracks = dynamic_cast<TClonesArray*>(fAOD->GetTracks());
719 //**** Declaration of arrays and variables
721 // We use static array, not to fragment the memory
722 AliAODJet recJets[kMaxJets];
726 //////////////////////////////////////////////////
727 ///////// Get the reconstructed jets /////////////
728 //////////////////////////////////////////////////
730 nRecJets = aodRecJets->GetEntries();
731 nRecJets = TMath::Min(nRecJets,kMaxJets);
732 nTracks = fAOD->GetNumberOfTracks();
734 for(int ir = 0;ir < nRecJets;++ir)
736 AliAODJet *tmp = dynamic_cast<AliAODJet*>(aodRecJets->At(ir));
739 cout << "recJets[" << ir << "].Eta(): " << recJets[ir].Eta() << ", recJets[" << ir <<"].Phi(): " << recJets[ir].Phi() << ", recJets[" << ir << "].E(): " << recJets[ir].E() << endl;
742 Float_t detaJ = recJets[0].Eta() - recJets[1].Eta();
743 Float_t dphiJ = recJets[0].Phi() - recJets[1].Phi();
744 Float_t detJ = recJets[0].Pt() - recJets[1].Pt();
745 cout << "detaJ: " << detaJ << ", dphiJ: " << dphiJ << ", detJ: " << detJ << endl;
748 // Get vertex information
749 fvertexXY->Fill(pvtx->GetX(),pvtx->GetY());
750 fvertexZ->Fill(pvtx->GetZ());
752 //////////////////////////////////////////////////
753 ////////////// TRACK QUALITY ASSURANCE /////////// TO BE OPTIMISED!!
754 //////////////////////////////////////////////////
756 for(Int_t it=0; it<nTracks; it++)
758 AliAODTrack* aodTrack = (AliAODTrack*)tracks->At(it);
759 Float_t etaT = aodTrack->Eta();
760 Float_t phiT = aodTrack->Phi();
761 Float_t ptT = aodTrack->Pt();
762 phiT = ((phiT < 0) ? phiT + 2 * TMath::Pi() : phiT);
763 // cout << "etaT: " << etaT << ", phiT: " << phiT << endl;
764 fptAllTracks->Fill(ptT);
765 fetaAllTracks->Fill(etaT);
766 fphiAllTracks->Fill(phiT);
767 fetaphiptAllTracks->Fill(etaT,phiT,ptT);
768 fetaphiAllTracks->Fill(etaT,phiT,1);
769 UInt_t status = aodTrack->GetStatus();
771 for(Int_t i=0; i<fnPtTrigBin; i++)
773 if(ptT>=farrayPtTrigmin[i] && ptT<farrayPtTrigmax[i])
775 fptTracks[i]->Fill(ptT);
776 fetaTracks[i]->Fill(etaT);
777 fphiTracks[i]->Fill(phiT);
778 fNPtTrig[i]->Fill(0.5);
785 for(Int_t it2 = 0; it2< nTracks; it2++)
787 AliAODTrack* aodTrack2 = (AliAODTrack*)tracks->At(it2);
788 etaT2 = aodTrack2->Eta(); phiT2 = aodTrack2->Phi(); ptT2 = aodTrack2->Pt();
789 phiT2 = ((phiT2 < 0) ? phiT2 + 2 * TMath::Pi() : phiT2);
790 // cout << "etaT2: " << etaT2 << ", phiT2: " << phiT2 << endl;
791 if(ptT2 > 2.*i+4.) continue;
792 if(it2==it) continue;
793 detaT = etaT - etaT2;
794 dphiT = phiT - phiT2;
795 if (dphiT > TMath::Pi()) dphiT = (-TMath::Pi() +TMath::Abs(dphiT - TMath::Pi()));
796 if (dphiT < -1.0*TMath::Pi()) dphiT = (TMath::Pi() - TMath::Abs(dphiT + TMath::Pi()));
798 fdetaTracks[i]->Fill(detaT);
799 fdphiTracks[i]->Fill(dphiT);
800 fdetadphiTracks[i]->Fill(detaT,dphiT,1);
802 fetaphiptTracks[i]->Fill(etaT,phiT,ptT);
803 fetaphiTracks[i]->Fill(etaT,phiT,1);
805 } // End loop over trigger ranges
807 if (status == 0) continue;
808 if((fFilterMask>0)&&!(aodTrack->TestFilterBit(fFilterMask))) continue;
809 fptAllTracksCut->Fill(ptT);
810 fetaAllTracksCut->Fill(etaT);
811 fphiAllTracksCut->Fill(phiT);
812 fetaphiptAllTracksCut->Fill(etaT,phiT,ptT);
813 fetaphiAllTracksCut->Fill(etaT,phiT,1);
814 if(ptT > 0.150 && TMath::Abs(etaT) < 0.9) evtMult++;
815 } // end loop over tracks
816 fEvtMult->Fill(evtMult);
818 //////////////////////////////////////////////////
819 ///////////////// MONOJET PART ///////////////////
820 //////////////////////////////////////////////////
822 if (nRecJets == 0) return;
824 Double_t jetEnergy = recJets[0].E();
827 for (Int_t i1 = 0; i1 < fnEBin; i1++)
829 if (jetEnergy < farrayEmax[i1] && jetEnergy >= farrayEmin[i1])
836 fptLeadingJet->Fill(recJets[0].Pt());
837 fetaLeadingJet->Fill(recJets[0].Eta());
838 fphiLeadingJet->Fill(recJets[0].Phi());
840 for(Int_t ij=0; ij<nRecJets; ij++)
842 fptJet->Fill(recJets[ij].Pt());
843 fetaJet->Fill(recJets[ij].Eta());
844 fphiJet->Fill(recJets[ij].Phi());
848 TRefArray* ref = recJets[0].GetRefTracks();
849 for(Int_t it=0; it<ref->GetEntries(); it++)
851 Float_t ptTrack = ((AliVTrack*)ref->At(it))->Pt();
852 fPtvsEtaJet->Fill(recJets[0].Eta(),ptTrack);
853 fNpvsEtaJet->Fill(recJets[0].Eta(),ref->GetEntries());
854 fNpevtvsEtaJet->Fill(recJets[0].Eta(),evtMult);
855 fPtvsPtJet->Fill(recJets[0].Pt(),ptTrack);
856 fNpvsPtJet->Fill(recJets[0].Pt(),ref->GetEntries());
857 fNpevtvsPtJet->Fill(recJets[0].Pt(),evtMult);
858 fPtvsPtJet1D->Fill(recJets[0].Pt(),ptTrack);
859 fNpvsPtJet1D->Fill(recJets[0].Pt(),ref->GetEntries());
860 fNpevtvsPtJet1D->Fill(recJets[0].Pt(),evtMult);
863 FillMonoJetH(goodBin, recJets, tracks);
865 //////////////////////////////////////////////////
866 ////////////////// DIJET PART ////////////////////
867 //////////////////////////////////////////////////
869 // UNDER CONSTRUCTION
871 PostData(1, fHistList);
874 //#######################################################################
875 void AliAnalysisTaskFragmentationFunction::Terminate(Option_t */*option*/)
877 // Terminate analysis
879 if (fDebug > 1) printf("AnalysisDiJets: Terminate() \n");
880 printf("Number of events with vertex out of bound: %d", fNBadRuns);
883 //////////////////////////////////////////////////////////////////////////////
884 //////////////////////////////////////////////////////////////////////////////
886 void AliAnalysisTaskFragmentationFunction::DefineJetH()
889 /////////////////////////////////////// HISTOGRAMS FIRST JET
890 fEtaMonoJet1H = new TH1F*[fnEBin+1];
891 fPhiMonoJet1H = new TH1F*[fnEBin+1];
892 fPtMonoJet1H = new TH1F*[fnEBin+1];
893 fEMonoJet1H = new TH1F*[fnEBin+1];
895 fdNdXiMonoJet1H = new TH1F**[fnEBin+1];
896 fdNdPtMonoJet1H = new TH1F**[fnEBin+1];
897 fdNdZMonoJet1H = new TH1F**[fnEBin+1];
898 fdNdThetaMonoJet1H = new TH1F**[fnEBin+1];
899 fdNdcosThetaMonoJet1H = new TH1F**[fnEBin+1];
900 fdNdkTMonoJet1H = new TH1F**[fnEBin+1];
901 fdNdpTvsZMonoJet1H = new TH1F**[fnEBin+1];
902 fShapeMonoJet1H = new TH1F**[fnEBin+1];
903 fNMonoJet1sH = new TH1F**[fnEBin+1];
905 fThetaPtPartMonoJet1H = new TH2F**[fnEBin+1];
906 fcosThetaPtPartMonoJet1H = new TH2F**[fnEBin+1];
907 fkTPtPartMonoJet1H = new TH2F**[fnEBin+1];
908 fThetaPtJetMonoJet1H = new TH2F**[fnEBin+1];
909 fcosThetaPtJetMonoJet1H = new TH2F**[fnEBin+1];
910 fkTPtJetMonoJet1H = new TH2F**[fnEBin+1];
911 fpTPtJetMonoJet1H = new TH2F**[fnEBin+1];
913 for (Int_t iEbin=0;iEbin<fnEBin+1;iEbin++)
915 fdNdXiMonoJet1H[iEbin] = new TH1F*[fnRBin+1];
916 fdNdPtMonoJet1H[iEbin] = new TH1F*[fnRBin+1];
917 fdNdZMonoJet1H[iEbin] = new TH1F*[fnRBin+1];
918 fdNdThetaMonoJet1H[iEbin] = new TH1F*[fnRBin+1];
919 fdNdcosThetaMonoJet1H[iEbin] = new TH1F*[fnRBin+1];
920 fdNdkTMonoJet1H[iEbin] = new TH1F*[fnRBin+1];
921 fdNdpTvsZMonoJet1H[iEbin] = new TH1F*[fnRBin+1];
922 fShapeMonoJet1H[iEbin] = new TH1F*[fnRBin+1];
923 fNMonoJet1sH[iEbin] = new TH1F*[fnRBin+1];
925 fThetaPtPartMonoJet1H[iEbin] = new TH2F*[fnRBin+1];
926 fcosThetaPtPartMonoJet1H[iEbin] = new TH2F*[fnRBin+1];
927 fkTPtPartMonoJet1H[iEbin] = new TH2F*[fnRBin+1];
928 fThetaPtJetMonoJet1H[iEbin] = new TH2F*[fnRBin+1];
929 fcosThetaPtJetMonoJet1H[iEbin] = new TH2F*[fnRBin+1];
930 fkTPtJetMonoJet1H[iEbin] = new TH2F*[fnRBin+1];
931 fpTPtJetMonoJet1H[iEbin] = new TH2F*[fnRBin+1];
934 for (Int_t iEbin=0;iEbin<fnEBin+1;iEbin++)
936 fEtaMonoJet1H[iEbin] = 0;
937 fPhiMonoJet1H[iEbin] = 0;
938 fPtMonoJet1H[iEbin] = 0;
939 fEMonoJet1H[iEbin] = 0;
941 for (Int_t iRbin=0;iRbin<fnRBin+1;iRbin++)
943 fdNdXiMonoJet1H[iEbin][iRbin] = 0;
944 fdNdPtMonoJet1H[iEbin][iRbin] = 0;
945 fdNdZMonoJet1H[iEbin][iRbin] = 0;
946 fdNdThetaMonoJet1H[iEbin][iRbin] = 0;
947 fdNdcosThetaMonoJet1H[iEbin][iRbin] = 0;
948 fdNdkTMonoJet1H[iEbin][iRbin] = 0;
949 fdNdpTvsZMonoJet1H[iEbin][iRbin] = 0;
950 fShapeMonoJet1H[iEbin][iRbin] = 0;
951 fNMonoJet1sH[iEbin][iRbin] = 0;
953 fThetaPtPartMonoJet1H[iEbin][iRbin] = 0;
954 fcosThetaPtPartMonoJet1H[iEbin][iRbin] = 0;
955 fkTPtPartMonoJet1H[iEbin][iRbin] = 0;
956 fThetaPtJetMonoJet1H[iEbin][iRbin] = 0;
957 fcosThetaPtJetMonoJet1H[iEbin][iRbin] = 0;
958 fkTPtJetMonoJet1H[iEbin][iRbin] = 0;
959 fpTPtJetMonoJet1H[iEbin][iRbin] = 0;
963 fptTracks = new TH1F*[fnPtTrigBin+1];
964 fetaTracks = new TH1F*[fnPtTrigBin+1];
965 fphiTracks = new TH1F*[fnPtTrigBin+1];
966 fdetaTracks = new TH1F*[fnPtTrigBin+1];
967 fdphiTracks = new TH1F*[fnPtTrigBin+1];
968 fetaphiptTracks = new TH2F*[fnPtTrigBin+1];
969 fetaphiTracks = new TH2F*[fnPtTrigBin+1];
970 fdetadphiTracks = new TH2F*[fnPtTrigBin+1];
971 fptTracksCut = new TH1F*[fnPtTrigBin+1];
972 fetaTracksCut = new TH1F*[fnPtTrigBin+1];
973 fphiTracksCut = new TH1F*[fnPtTrigBin+1];
974 fdetaTracksCut = new TH1F*[fnPtTrigBin+1];
975 fdphiTracksCut = new TH1F*[fnPtTrigBin+1];
976 fetaphiptTracksCut = new TH2F*[fnPtTrigBin+1];
977 fetaphiTracksCut = new TH2F*[fnPtTrigBin+1];
978 fdetadphiTracksCut = new TH2F*[fnPtTrigBin+1];
979 fNPtTrig = new TH1F*[fnPtTrigBin+1];
980 fNPtTrigCut = new TH1F*[fnPtTrigBin+1];
982 for(Int_t iPtTrigBin=0; iPtTrigBin<fnPtTrigBin; iPtTrigBin++)
984 fptTracks[iPtTrigBin] = 0;
985 fetaTracks[iPtTrigBin] = 0;
986 fphiTracks[iPtTrigBin] = 0;
987 fdetaTracks[iPtTrigBin] = 0;
988 fdphiTracks[iPtTrigBin] = 0;
989 fetaphiptTracks[iPtTrigBin] = 0;
990 fetaphiTracks[iPtTrigBin] = 0;
991 fdetadphiTracks[iPtTrigBin] = 0;
992 fptTracksCut[iPtTrigBin] = 0;
993 fetaTracksCut[iPtTrigBin] = 0;
994 fphiTracksCut[iPtTrigBin] = 0;
995 fdetaTracksCut[iPtTrigBin] = 0;
996 fdphiTracksCut[iPtTrigBin] = 0;
997 fetaphiptTracksCut[iPtTrigBin] = 0;
998 fetaphiTracksCut[iPtTrigBin] = 0;
999 fdetadphiTracksCut[iPtTrigBin] = 0;
1000 fNPtTrig[iPtTrigBin] = 0;
1001 fNPtTrigCut[iPtTrigBin] = 0;
1004 farrayEmin = new Double_t[fnEBin];
1005 farrayEmax = new Double_t[fnEBin];
1007 farrayPtTrigmin = new Double_t[fnPtTrigBin];
1008 farrayPtTrigmax = new Double_t[fnPtTrigBin];
1010 farrayRadii = new Double_t[fnRBin];
1014 Double_t pasE = (Double_t)((fEmax-fEmin)/fnEInterval);
1019 Double_t pasR = (Double_t)((fRmax-fRmin)/fnRInterval);
1022 for (Int_t i = 0; i < fnEBin; i++)
1027 if (i==0) Emin = fEmin;
1028 if (i!=0) Emin = fEmin + pasE*i;
1030 energy2 = "E_{jet1} : ";
1031 energy = "E_{jet} : ";
1041 farrayEmin[i] = Emin;
1042 farrayEmax[i] = Emax;
1044 for (Int_t j = 0; j < fnRBin; j++)
1047 if (j==0) R = fRmin;
1048 if (j!=0) R = fRmin + pasR*j;
1054 fEtaMonoJet1H[i] = new TH1F("fEtaMonoJet1H,"+energy, "#eta_{jet1},"+energy, fnEtaHBin, fEtaHBinMin, fEtaHBinMax);
1055 fPhiMonoJet1H[i] = new TH1F("fPhiMonoJet1H,"+energy, "#phi_{jet1},"+energy, fnPhiHBin, fPhiHBinMin, fPhiHBinMax);
1056 fPtMonoJet1H[i] = new TH1F("fPtMonoJet1H,"+energy, "pT_{jet1},"+energy, fnPtHBin, fPtHBinMin, fPtHBinMax);
1057 fEMonoJet1H[i] = new TH1F("fEMonoJet1H,"+energy, "E_{jet1},"+energy, fnEHBin, fEHBinMin, fEHBinMax);
1059 fdNdXiMonoJet1H[i][j] = new TH1F("fdNdXiMonoJet1H,"+energy+radius, "dN_{ch}/d#xi,"+energy+radius, fnXiHBin, fXiHBinMin, fXiHBinMax);
1060 fdNdPtMonoJet1H[i][j] = new TH1F("fdNdPtMonoJet1H,"+energy+radius, "dN_{ch}/dPt_{had},"+energy+radius, fnPthadHBin, fPthadHBinMin, fPthadHBinMax);
1061 fdNdZMonoJet1H[i][j] = new TH1F("fdNdZMonoJet1H,"+energy+radius, "dN_{ch}/dz,"+energy+radius, fnZHBin, fZHBinMin, fZHBinMax);
1063 fdNdThetaMonoJet1H[i][j] = new TH1F("fdNdThetaMonoJet1H,"+energy+radius, "dN_{ch}/d#Theta,"+energy+radius, fnThetaHBin, fThetaHBinMin, fThetaHBinMax);
1064 fdNdcosThetaMonoJet1H[i][j] = new TH1F("fdNdcosThetaMonoJet1H,"+energy+radius, "dN_{ch}/dcos(#Theta),"+energy+radius, fnCosThetaHBin, fcosThetaHBinMin, fcosThetaHBinMax);
1065 fdNdkTMonoJet1H[i][j] = new TH1F("fdNdkTMonoJet1H,"+energy+radius, "dN_{ch}/dk_{T},"+energy+radius, fnkTHBin, fkTHBinMin, fkTHBinMax);
1066 fdNdpTvsZMonoJet1H[i][j]= new TH1F("fdNdpTvsZMonoJet1H,"+energy+radius, "dN_{ch}/dk_{T} vs Z,"+energy+radius, fnZHBin, fZHBinMin, fZHBinMax);
1067 fShapeMonoJet1H[i][j] = new TH1F("fShapeMonoJet1H,"+energy+radius, "E(R=x)/E(R=1)"+energy+radius, fnRHBin, fRHBinMin, fRHBinMax);
1069 fThetaPtPartMonoJet1H[i][j] = new TH2F("fThetaPtPartMonoJet1H,"+energy+radius, "#Theta vs Pt particle,"+energy+radius, fnPthadHBin, fPthadHBinMin, fPthadHBinMax, fnThetaHBin, fThetaHBinMin, fThetaHBinMax);
1070 fcosThetaPtPartMonoJet1H[i][j] = new TH2F("fcosThetaPtPartMonoJet1H,"+energy+radius, "cos(#Theta) vs Pt particle,"+energy+radius, fnPthadHBin, fPthadHBinMin, fPthadHBinMax, fnCosThetaHBin, fcosThetaHBinMin, fcosThetaHBinMax);
1071 fkTPtPartMonoJet1H[i][j] = new TH2F("fkTPtPartMonoJet1H,"+energy+radius, "kT vs Pt particle,"+energy+radius, fnPthadHBin, fPthadHBinMin, fPthadHBinMax, fnkTHBin, fkTHBinMin, fkTHBinMax);
1072 fThetaPtJetMonoJet1H[i][j] = new TH2F("fThetaPtJetMonoJet1H,"+energy+radius, "#Theta vs Pt jet,"+energy+radius, fnPtHBin, fPtHBinMin, fPtHBinMax, fnThetaHBin, fThetaHBinMin, fThetaHBinMax);
1073 fcosThetaPtJetMonoJet1H[i][j] = new TH2F("fcosThetaPtJetMonoJet1H,"+energy+radius, "cos(#Theta) vs Pt jet,"+energy+radius, fnPtHBin, fPtHBinMin, fPtHBinMax, fnCosThetaHBin, fcosThetaHBinMin, fcosThetaHBinMax);
1074 fkTPtJetMonoJet1H[i][j] = new TH2F("fkTPtJetMonoJet1H,"+energy+radius, "kT vs Pt jet,"+energy+radius, fnPtHBin, fPtHBinMin, fPtHBinMax, fnkTHBin, fkTHBinMin, fkTHBinMax);
1075 fpTPtJetMonoJet1H[i][j] = new TH2F("fpTPtJetMonoJet1H,"+energy+radius, "pT vs Pt jet,"+energy+radius, fnPtHBin, fPtHBinMin, fPtHBinMax, fnkTHBin, fkTHBinMin, fkTHBinMax);
1077 fNMonoJet1sH[i][j] = new TH1F("fNMonoJet1sH,"+energy+radius, "N_{jets1},"+energy+radius, 1, 0., 1.);
1078 fNBadRunsH = new TH1F("fNBadRunsH","Number of events with Z vertex out of range", 1, 0., 1.);
1080 SetProperties(fEtaMonoJet1H[i], "#eta_{jet1}", "Entries");
1081 SetProperties(fPhiMonoJet1H[i], "#phi_{jet1}", "Entries");
1082 SetProperties(fPtMonoJet1H[i], "p_{Tjet1} (GeV/c)", "Entries");
1083 SetProperties(fEMonoJet1H[i], "E_{jet1} (GeV)", "Entries");
1085 SetProperties(fdNdXiMonoJet1H[i][j], "#xi = ln(E_{jet1}/p_{Thad})", "dN_{had}/d#xi");
1086 SetProperties(fdNdPtMonoJet1H[i][j], "p_{Thad} (GeV/c)", "dN_{had}/dp_{Thad}");
1087 SetProperties(fdNdZMonoJet1H[i][j], "z = (p_{Thad}/E_{jet1})", "dN_{had}/dz");
1088 SetProperties(fdNdThetaMonoJet1H[i][j], "#Theta", "dN_{had}/d#Theta");
1089 SetProperties(fdNdcosThetaMonoJet1H[i][j], "cos(#Theta)", "dN_{had}/dcos(#Theta)");
1090 SetProperties(fdNdkTMonoJet1H[i][j], "k_{Thad}", "dN_{had}/dk_{Thad}");
1091 SetProperties(fdNdpTvsZMonoJet1H[i][j], "z = (p_{Thad}/E_{jet1})", "dN_{had}/dp_{T}");
1092 SetProperties(fShapeMonoJet1H[i][j], "R", "#Psi(R)");
1093 SetProperties(fNMonoJet1sH[i][j], "Bin", "N_{jets1}");
1095 SetProperties(fThetaPtPartMonoJet1H[i][j],"p_{Thad} [GeV/c]","#Theta");
1096 SetProperties(fcosThetaPtPartMonoJet1H[i][j],"p_{Thad} [GeV/c]","cos(#Theta)");
1097 SetProperties(fkTPtPartMonoJet1H[i][j],"p_{Thad} [GeV/c]","k_{Thad}");
1098 SetProperties(fThetaPtJetMonoJet1H[i][j], "p_{Tjet} [GeV/c]", "#Theta");
1099 SetProperties(fcosThetaPtJetMonoJet1H[i][j], "p_{Tjet} [GeV/c]", "cos(#Theta)");
1100 SetProperties(fkTPtJetMonoJet1H[i][j], "p_{Tjet} [GeV/c]", "k_{Thad} [GeV/c]");
1101 SetProperties(fpTPtJetMonoJet1H[i][j], "p_{Tjet} [GeV/c]", "p_{Thad} [GeV/c]");
1105 for(Int_t i=0; i<fnPtTrigBin; i++)
1107 if(i==0) farrayPtTrigmin[i] = 1.;
1108 else farrayPtTrigmin[i] = i*5.;
1109 farrayPtTrigmax[i] = i*5+5.;
1111 TString ptTrigRange;
1112 ptTrigRange = "; p_{T} trig range: ";
1113 ptTrigRange += farrayPtTrigmin[i];
1115 ptTrigRange += farrayPtTrigmax[i];
1116 ptTrigRange += " [GeV]";
1118 fptTracks[i] = new TH1F("fptTracks"+ptTrigRange, "Track transverse momentum [GeV]"+ptTrigRange,300,0.,150.);
1119 fetaTracks[i] = new TH1F("fetaTracks"+ptTrigRange, "#eta tracks"+ptTrigRange, 36, -0.9, 0.9);
1120 fphiTracks[i] = new TH1F("fphiTracks"+ptTrigRange, "#phi tracks"+ptTrigRange, 60, 0., 2*TMath::Pi());
1121 fdetaTracks[i] = new TH1F("fdetaTracks"+ptTrigRange, "#Delta #eta tracks"+ptTrigRange,80, -2., 2.);
1122 fdphiTracks[i] = new TH1F("fdphiTracks"+ptTrigRange, "#Delta #phi tracks"+ptTrigRange, 120, -TMath::Pi(), TMath::Pi());
1123 fetaphiptTracks[i] = new TH2F("fetaphiptTracks"+ptTrigRange,"#eta/#phi track p_{T} mapping"+ptTrigRange,36, -0.9, 0.9,60, 0., 2*TMath::Pi());
1124 fetaphiTracks[i] = new TH2F("fetaphiTracks"+ptTrigRange,"#eta/#phi track mapping"+ptTrigRange,36, -0.9, 0.9,60, 0., 2*TMath::Pi());
1125 fdetadphiTracks[i] = new TH2F("fdetadphiTracks"+ptTrigRange,"#Delta #eta/#Delta #phi track mapping"+ptTrigRange,80, -2., 2., 120, -TMath::Pi(), TMath::Pi());
1126 fptTracksCut[i] = new TH1F("fptTracksCut"+ptTrigRange, "Track transverse momentum after cuts [GeV]"+ptTrigRange,300,0.,150.);
1127 fetaTracksCut[i] = new TH1F("fetaTracksCut"+ptTrigRange, "#eta tracks after cuts"+ptTrigRange, 36, -0.9, 0.9);
1128 fphiTracksCut[i] = new TH1F("fphiTracksCuts"+ptTrigRange, "#phi tracks after cuts"+ptTrigRange, 60, 0., 2*TMath::Pi());
1129 fdetaTracksCut[i] = new TH1F("fdetaTracksCuts"+ptTrigRange, "#Delta #eta tracks after cuts"+ptTrigRange,80, -2., 2.);
1130 fdphiTracksCut[i] = new TH1F("fdphiTracksCuts"+ptTrigRange, "#Delta #phi tracks after cuts"+ptTrigRange, 120, -TMath::Pi(), TMath::Pi());
1131 fetaphiptTracksCut[i] = new TH2F("fetaphiptTracksCuts"+ptTrigRange,"#eta/#phi track p_{T} mapping after cuts"+ptTrigRange,36, -0.9, 0.9,60, 0., 2*TMath::Pi());
1132 fetaphiTracksCut[i] = new TH2F("fetaphiTracksCuts"+ptTrigRange,"#eta/#phi track mapping after cuts"+ptTrigRange,36, -0.9, 0.9,60, 0., 2*TMath::Pi());
1133 fdetadphiTracksCut[i] = new TH2F("fdetadphiTracksCuts"+ptTrigRange,"#Delta #eta/#Delta #phi track mapping after cuts"+ptTrigRange,80, -2., 2., 120, -TMath::Pi(), TMath::Pi());
1134 fNPtTrig[i] = new TH1F("fNPtTrig"+ptTrigRange,"Number of triggers"+ptTrigRange,1,0.,1.);
1135 fNPtTrigCut[i] = new TH1F("fNPtTrigCut"+ptTrigRange,"Number of triggers after cut"+ptTrigRange,1,0.,1.);
1137 SetProperties(fptTracks[i], "Track p_{T} [GeV]", "dN/dp_{T}");
1138 SetProperties(fetaTracks[i], "Track #eta", "dN/d#eta");
1139 SetProperties(fphiTracks[i], "Track #phi", "dN/d#phi");
1140 SetProperties(fdetaTracks[i], "#eta_{track} - #eta_{trig}", "dN/d#Delta#eta");
1141 SetProperties(fdphiTracks[i], "#phi_{track} - #phi_{trig}", "dN/d#Delta#phi");
1142 SetProperties(fetaphiptTracks[i], "#eta_{track}", "#phi_{track}");
1143 SetProperties(fetaphiTracks[i], "#eta_{track}", "#phi_{track}");
1144 SetProperties(fdetadphiTracks[i], "#Delta #eta_{track}", "#Delta #phi_{track}");
1145 SetProperties(fptTracksCut[i], "p_{T}track [GeV]", "dN/dp_{T}");
1146 SetProperties(fetaTracksCut[i], "#eta_{track}", "dN/d#eta");
1147 SetProperties(fphiTracksCut[i], "#phi_{track}", "dN/d#phi");
1148 SetProperties(fdetaTracksCut[i], "#eta_{track} - #eta_{trig}", "dN/d#Delta#eta");
1149 SetProperties(fdphiTracksCut[i], "#phi_{track} - #phi_{trig}", "dN/d#Delta#phi");
1150 SetProperties(fetaphiptTracksCut[i], "#eta_{track}", "#phi_{track}");
1151 SetProperties(fetaphiTracksCut[i], "#eta_{track}", "#phi_{track}");
1152 SetProperties(fdetadphiTracksCut[i], "#Delta #eta_{track}", "#Delta #phi_{track}");
1153 SetProperties(fNPtTrig[i], "", "Number of triggers");
1154 SetProperties(fNPtTrigCut[i], "", "Number of triggers");
1158 fptAllTracks = new TH1F("fptAllTracks", "Track transverse momentum [GeV]",300,0.,150.);
1159 fetaAllTracks = new TH1F("fetaAllTracks", "#eta tracks", 36, -0.9, 0.9);
1160 fphiAllTracks = new TH1F("fphiAllTracks", "#phi tracks", 60, 0., 2*TMath::Pi());
1161 fetaphiptAllTracks = new TH2F("fetaphiptAllTracks","#eta/#phi track p_{T} mapping",36, -0.9, 0.9,60, 0., 2*TMath::Pi());
1162 fetaphiAllTracks = new TH2F("fetaphiAllTracks","#eta/#phi track mapping",36, -0.9, 0.9,60, 0., 2*TMath::Pi());
1163 fptAllTracksCut = new TH1F("fptAllTracksCut", "Track transverse momentum after cuts [GeV]",300,0.,150.);
1164 fetaAllTracksCut = new TH1F("fetaAllTracksCut", "#eta tracks after cuts", 36, -0.9, 0.9);
1165 fphiAllTracksCut = new TH1F("fphiAllTracksCuts", "#phi tracks after cuts", 60, 0., 2*TMath::Pi());
1166 fetaphiptAllTracksCut = new TH2F("fetaphiptAllTracksCuts","#eta/#phi track p_{T} mapping after cuts",36, -0.9, 0.9,60, 0., 2*TMath::Pi());
1167 fetaphiAllTracksCut = new TH2F("fetaphiAllTracksCuts","#eta/#phi track mapping after cuts",36, -0.9, 0.9,60, 0., 2*TMath::Pi());
1169 SetProperties(fptAllTracks, "Track p_{T} [GeV]", "dN/dp_{T}");
1170 SetProperties(fetaAllTracks, "Track #eta", "dN/d#eta");
1171 SetProperties(fphiAllTracks, "Track #phi", "dN/d#phi");
1172 SetProperties(fetaphiptAllTracks, "#eta_{track}", "#phi_{track}");
1173 SetProperties(fetaphiAllTracks, "#eta_{track}", "#phi_{track}");
1174 SetProperties(fptAllTracksCut, "p_{T}track [GeV]", "dN/dp_{T}");
1175 SetProperties(fetaAllTracksCut, "#eta_{track}", "dN/d#eta");
1176 SetProperties(fphiAllTracksCut, "#phi_{track}", "dN/d#phi");
1177 SetProperties(fetaphiptAllTracksCut, "#eta_{track}", "#phi_{track}");
1178 SetProperties(fetaphiAllTracksCut, "#eta_{track}", "#phi_{track}");
1180 fvertexXY = new TH2F("fvertexXY","X-Y vertex position",30,0.,10.,30,0.,10.);
1181 fvertexZ = new TH1F("fvertexZ","Z vertex position",60,-30.,30.);
1182 fEvtMult = new TH1F("fEvtMult","Event multiplicity, track pT cut > 150 MeV/c, |#eta| < 0.9",100,0.,100.);
1183 fEvtMultvsJetPt = new TH2F("fEvtMultvsJetPt","Event multiplicity vs pT_{jet}",60,0.,60.,100,0.,100.);
1184 fPtvsEtaJet = new TH2F("fPtvsEtaJet","Pt vs #eta_{jet}",20,-1.,1.,60,0.,60.);
1185 fNpvsEtaJet = new TH2F("fNpvsEtaJet","N_{part} inside jet vs #eta_{jet}",20,-1.,1.,20,0,20);
1186 fNpevtvsEtaJet = new TH2F("fNpevtvsEtaJet","N_{part} in evt vs #eta_{jet}",20,-1.,1.,90,0,90);
1187 fPtvsPtJet = new TH2F("fPtvsPtJet","Pt vs #p_{Tjet}",60,0.,60.,60,0.,60.);
1188 fNpvsPtJet = new TH2F("fNpvsPtJet","N_{part} inside jet vs #pt_{Tjet}",60,0.,60.,20,0,20);
1189 fNpevtvsPtJet = new TH2F("fNpevtvsPtJet","N_{part} in evt vs #pt_{Tjet}",60,0.,60.,90,0,90);
1190 fPtvsPtJet1D = new TH1F("fPtvsPtJet1D","Pt vs #p_{Tjet}",60,0.,60.);
1191 fNpvsPtJet1D = new TH1F("fNpvsPtJet1D","N_{part} inside jet vs #pt_{Tjet}",60,0.,60.);
1192 fNpevtvsPtJet1D = new TH1F("fNpevtvsPtJet1D","N_{part} in evt vs #pt_{Tjet}",60,0.,60.);
1193 fptLeadingJet = new TH1F("fptLeadingJet","Pt leading Jet [GeV/c]",60,0.,60.);
1194 fetaLeadingJet = new TH1F("fetaLeadingJet","#eta leading jet",20,-1.,1.);
1195 fphiLeadingJet = new TH1F("fphiLeadingJet","#phi leading jet",12,0.,2*TMath::Pi());
1196 fptJet = new TH1F("fptJet","Pt Jets [GeV/c]",60,0.,60.);
1197 fetaJet = new TH1F("fetaJet","#eta jet",20,-1.,1.);
1198 fphiJet = new TH1F("fphiJet","#phi jet",12,0.,2*TMath::Pi());
1199 fNBadRunsH = new TH1F("fNBadRunsH","Number of events with Z vertex out of range", 1, 0., 1.);
1201 SetProperties(fvertexXY, "vtx X", "vtx Y");
1202 SetProperties(fvertexZ, "vtx Z", "Count");
1203 SetProperties(fEvtMult, "N_{part} / event", "Count");
1204 SetProperties(fEvtMultvsJetPt, "p_{T jet}", "Event multiplicity");
1205 SetProperties(fPtvsEtaJet, "#eta_{leading jet}", "p_{T} part [GeV/c]");
1206 SetProperties(fNpvsEtaJet, "#eta_{leading jet}", "N_{part} in leading jet");
1207 SetProperties(fNpevtvsEtaJet, "#eta_{leading jet}", "N_{part} in event");
1208 SetProperties(fPtvsPtJet, "#p_{T leading jet}", "p_{T} part [GeV/c]");
1209 SetProperties(fNpvsPtJet, "#p_{T leading jet}", "N_{part} in leading jet");
1210 SetProperties(fNpevtvsPtJet, "#p_{T leading jet}", "N_{part} in event");
1211 SetProperties(fPtvsPtJet1D, "#p_{T leading jet}", "<p_{T}> part [GeV/c]");
1212 SetProperties(fNpvsPtJet1D, "#p_{T leading jet}", "<N_{part}> in leading jet");
1213 SetProperties(fNpevtvsPtJet1D, "#p_{T leading jet}", "<N_{part}> in event");
1214 SetProperties(fptLeadingJet, "p_{T} leading jet", "dN/dp_{T} leading jet");
1215 SetProperties(fetaLeadingJet, "#eta leading jet", "dN/d#eta leading jet");
1216 SetProperties(fphiLeadingJet, "#phi leading jet", "dN/d#phi leading jet");
1217 SetProperties(fptJet, "p_{T} jet [GeV/c]", "dN/dp_{T}");
1218 SetProperties(fetaJet, "#eta jet", "dN/d#eta");
1219 SetProperties(fphiJet, "#phi jet", "dN/d#phi");
1224 //////////////////////////////////////////////////////////////////////////////
1225 //////////////////////////////////////////////////////////////////////////////
1227 void AliAnalysisTaskFragmentationFunction::FillMonoJetH(Int_t goodBin, AliAODJet* recJets, TClonesArray* tracks)
1229 if (goodBin == 999) return;
1231 Int_t nTracks = tracks->GetEntries();
1232 Float_t xi,t1,ene,dr2,deta2,dphi2, z, cosTheta, theta, kt;
1244 fEtaMonoJet1H[goodBin]->Fill(recJets[0].Eta());
1245 fPhiMonoJet1H[goodBin]->Fill(recJets[0].Phi());
1246 fPtMonoJet1H[goodBin]->Fill(recJets[0].Pt());
1247 fEMonoJet1H[goodBin]->Fill(recJets[0].E());
1250 for(Int_t it=0; it<nTracks; it++)
1252 AliAODTrack* aodTrack = (AliAODTrack*)tracks->At(it);
1254 UInt_t status = aodTrack->GetStatus();
1255 if (status == 0) continue;
1256 if((fFilterMask>0)&&!(aodTrack->TestFilterBit(fFilterMask)))continue;
1258 Float_t etaT = aodTrack->Eta();
1259 Float_t phiT = aodTrack->Phi();
1260 Float_t ptT = aodTrack->Pt();
1261 // For Theta distribution
1262 Float_t pxT = aodTrack->Px();
1263 Float_t pyT = aodTrack->Py();
1264 Float_t pzT = aodTrack->Pz();
1265 Float_t pT = aodTrack->P();
1267 cosTheta = (pxT*recJets[0].Px()+pyT*recJets[0].Py()+pzT*recJets[0].Pz())/(pT*recJets[0].P());
1268 theta = TMath::ACos(cosTheta);
1270 deta2 = etaT - recJets[0].Eta();
1271 dphi2 = phiT - recJets[0].Phi();
1272 if (dphi2 < -TMath::Pi()) dphi2= -dphi2 - 2.0 * TMath::Pi();
1273 if (dphi2 > TMath::Pi()) dphi2 = 2.0 * TMath::Pi() - dphi2;
1274 dr2 = TMath::Sqrt(deta2 * deta2 + dphi2 * dphi2);
1275 t1 = TMath::Tan(2.0*TMath::ATan(TMath::Exp(-etaT)));
1276 ene = ptT*TMath::Sqrt(1.+1./(t1*t1));
1277 xi = (Float_t) TMath::Log(recJets[0].E()/ptT);
1279 z = (Double_t)(ptT/recJets[0].E());
1281 TVector3 partP; TVector3 jetP;
1282 jetP[0] = recJets[0].Px();
1283 jetP[1] = recJets[0].Py();
1284 jetP[2] = recJets[0].Pz();
1285 partP.SetPtEtaPhi(ptT,etaT,phiT);
1286 kt = TMath::Sin(partP.Angle(jetP))*partP.Mag();
1287 // Compute Jet shape
1289 for(Int_t i2 = 0; i2 < fnRBin; i2++)
1291 if ((dr2<farrayRadii[i2]) && (ptT > fPartPtCut))
1293 if (i2 == 0) jetOk1 = 1;
1294 if (i2 == 1) jetOk2 = 1;
1295 if (i2 == 2) jetOk3 = 1;
1296 if (i2 == 3) jetOk4 = 1;
1297 if (i2 == 4) jetOk5 = 1;
1298 if (i2 == 5) jetOk6 = 1;
1299 if (i2 == 6) jetOk7 = 1;
1300 if (i2 == 7) jetOk8 = 1;
1301 if (i2 == 8) jetOk9 = 1;
1302 if (i2 == 9) jetOk10 = 1;
1304 fdNdXiMonoJet1H[goodBin][i2]->Fill(xi);
1305 fdNdPtMonoJet1H[goodBin][i2]->Fill(ptT);
1306 fdNdZMonoJet1H[goodBin][i2]->Fill(z);
1307 fdNdThetaMonoJet1H[goodBin][i2]->Fill(theta);
1308 fdNdcosThetaMonoJet1H[goodBin][i2]->Fill(cosTheta);
1309 fdNdkTMonoJet1H[goodBin][i2]->Fill(kt);
1310 fdNdpTvsZMonoJet1H[goodBin][i2]->Fill(z,1/((fPthadHBinMax-fPthadHBinMin)/fnPthadHBin));
1312 fThetaPtPartMonoJet1H[goodBin][i2]->Fill(ptT,theta);
1313 fcosThetaPtPartMonoJet1H[goodBin][i2]->Fill(ptT,cosTheta);
1314 fkTPtPartMonoJet1H[goodBin][i2]->Fill(ptT,kt);
1315 fThetaPtJetMonoJet1H[goodBin][i2]->Fill(recJets[0].Pt(),theta);
1316 fcosThetaPtJetMonoJet1H[goodBin][i2]->Fill(recJets[0].Pt(),cosTheta);
1317 fkTPtJetMonoJet1H[goodBin][i2]->Fill(recJets[0].Pt(),kt);
1318 fpTPtJetMonoJet1H[goodBin][i2]->Fill(recJets[0].Pt(),ptT);
1322 fEvtMultvsJetPt->Fill(recJets[0].Pt(),mult);
1324 if (jetOk1) fNMonoJet1sH[goodBin][0]->Fill(0.5);
1325 if (jetOk2) fNMonoJet1sH[goodBin][1]->Fill(0.5);
1326 if (jetOk3) fNMonoJet1sH[goodBin][2]->Fill(0.5);
1327 if (jetOk4) fNMonoJet1sH[goodBin][3]->Fill(0.5);
1328 if (jetOk5) fNMonoJet1sH[goodBin][4]->Fill(0.5);
1329 if (jetOk6) fNMonoJet1sH[goodBin][5]->Fill(0.5);
1330 if (jetOk7) fNMonoJet1sH[goodBin][6]->Fill(0.5);
1331 if (jetOk8) fNMonoJet1sH[goodBin][7]->Fill(0.5);
1332 if (jetOk9) fNMonoJet1sH[goodBin][8]->Fill(0.5);
1333 if (jetOk10) fNMonoJet1sH[goodBin][9]->Fill(0.5);
1337 //////////////////////////////////////////////////////////////////////////////
1338 //////////////////////////////////////////////////////////////////////////////
1340 void AliAnalysisTaskFragmentationFunction::SetProperties(TH1* h,const char* x, const char* y)
1342 //Set properties of histos (x and y title and error propagation)
1345 h->GetXaxis()->SetTitleColor(1);
1346 h->GetYaxis()->SetTitleColor(1);
1350 //////////////////////////////////////////////////////////////////////////////
1351 //////////////////////////////////////////////////////////////////////////////
1353 void AliAnalysisTaskFragmentationFunction::MakeJetContainer()
1356 // Create the particle container for the correction framework manager and
1359 const Int_t kNvar = 3 ; //number of variables on the grid:pt,eta, phi
1360 const Double_t kPtmin = 5.0, kPtmax = 105.; // we do not want to have empty bins at the beginning...
1361 const Double_t kEtamin = -3.0, kEtamax = 3.0;
1362 const Double_t kPhimin = 0., kPhimax = 2. * TMath::Pi();
1364 // can we neglect migration in eta and phi?
1365 // phi should be no problem since we cover full phi and are phi symmetric
1366 // eta migration is more difficult due to needed acceptance correction
1367 // in limited eta range
1369 //arrays for the number of bins in each dimension
1371 iBin[0] = 100; //bins in pt
1372 iBin[1] = 1; //bins in eta
1373 iBin[2] = 1; // bins in phi
1375 //arrays for lower bounds :
1376 Double_t* binEdges[kNvar];
1377 for(Int_t ivar = 0; ivar < kNvar; ivar++)
1378 binEdges[ivar] = new Double_t[iBin[ivar] + 1];
1380 //values for bin lower bounds
1381 // for(Int_t i=0; i<=iBin[0]; i++) binEdges[0][i]=(Double_t)TMath::Power(10,TMath::Log10(kPtmin) + (TMath::Log10(kPtmax)-TMath::Log10(kPtmin))/iBin[0]*(Double_t)i);
1382 for(Int_t i=0; i<=iBin[0]; i++) binEdges[0][i]=(Double_t)kPtmin + (kPtmax-kPtmin)/(Double_t)iBin[0]*(Double_t)i;
1383 for(Int_t i=0; i<=iBin[1]; i++) binEdges[1][i]=(Double_t)kEtamin + (kEtamax-kEtamin)/iBin[1]*(Double_t)i;
1384 for(Int_t i=0; i<=iBin[2]; i++) binEdges[2][i]=(Double_t)kPhimin + (kPhimax-kPhimin)/iBin[2]*(Double_t)i;
1387 for(int i = 0;i < kMaxStep*2;++i){
1388 fhnJetContainer[i] = new THnSparseF(Form("fhnJetContainer%d",i),Form("THnSparse jet info %d"),kNvar,iBin);
1389 for (int k=0; k<kNvar; k++) {
1390 fhnJetContainer[i]->SetBinEdges(k,binEdges[k]);
1393 //create correlation matrix for unfolding
1394 Int_t thnDim[2*kNvar];
1395 for (int k=0; k<kNvar; k++) {
1396 //first half : reconstructed
1398 thnDim[k] = iBin[k];
1399 thnDim[k+kNvar] = iBin[k];
1402 fhnCorrelation = new THnSparseF("fhnCorrelation","THnSparse with correlations",2*kNvar,thnDim);
1403 for (int k=0; k<kNvar; k++) {
1404 fhnCorrelation->SetBinEdges(k,binEdges[k]);
1405 fhnCorrelation->SetBinEdges(k+kNvar,binEdges[k]);
1407 fhnCorrelation->Sumw2();
1409 // Add a histogram for Fake jets
1410 // thnDim[3] = AliPID::kSPECIES;
1411 // fFakeElectrons = new THnSparseF("fakeEkectrons", "Output for Fake Electrons", kNvar + 1, thnDim);
1412 // for(Int_t idim = 0; idim < kNvar; idim++)
1413 // fFakeElectrons->SetBinEdges(idim, binEdges[idim]);
1417 //////////////////////////////////////////////////////////////////////////////
1418 //////////////////////////////////////////////////////////////////////////////