/************************************************************************** * Task for Fragmentation Function in PWG4 Jet Task Force Train * **************************************************************************/ /************************************************************************** * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * * Contributors are mentioned in the code where appropriate. * * * * Permission to use, copy, modify and distribute this software and its * * documentation strictly for non-commercial purposes is hereby granted * * without fee, provided that the above copyright notice appears in all * * copies and that both the copyright notice and this permission notice * * appear in the supporting documentation. The authors make no claims * * about the suitability of this software for any purpose. It is * * provided "as is" without express or implied warranty. * **************************************************************************/ /* $Id: */ #include "TList.h" #include "TH1F.h" #include "TH2F.h" #include "TH3F.h" #include "TParticle.h" #include "TParticlePDG.h" #include "AliESDEvent.h" #include "AliAODEvent.h" #include "AliMCEvent.h" #include "AliAODMCParticle.h" #include "AliAODJet.h" #include "AliGenPythiaEventHeader.h" #include "AliInputEventHandler.h" #include "AliAnalysisTaskSE.h" #include "AliAnalysisManager.h" //#include "AliAnalysisHelperJetTasks.h" #include "AliKFVertex.h" #include "AliAnalysisTaskFragFuncBB.h" #include "AliStack.h" ClassImp(AliAnalysisTaskFragFuncBB) //________________________________________________________________________ AliAnalysisTaskFragFuncBB::AliAnalysisTaskFragFuncBB() : AliAnalysisTaskSE() ,fESD(0x0) ,fAOD(0x0) ,fMCEvent(0x0) ,fBranchRecJets("jets") ,fBranchGenJets("") ,fLeadingRecJet(-1) ,fLeadingGenJet(-1) ,fTrackTypeRec(0) ,fTrackTypeGen(0) ,fFilterMask(0) ,fUseGlobalSelection(kFALSE) ,fUseAODJetInput(kFALSE) ,fUseAODTrackInput(kFALSE) ,fUseAODMCInput(kFALSE) ,fJetRadius(.4) ,fEtaMaxPart(.9) ,fEtaMaxJets(.5) ,fHistList(0x0) ,fh1_eventSelection(0x0) ,fh1_vertexNContributors(0x0) ,fh1_vertexZ(0x0) ,fh1_recJets_Et(0x0) ,fh1_genJets_Et(0x0) ,fh2_recJets_EtaPhi(0x0) ,fh2_genJets_EtaPhi(0x0) ,fh1_recJetsWoC_Et(0x0) ,fh1_genJetsWoC_Et(0x0) ,fh2_recJetsWoC_EtaPhi(0x0) ,fh2_genJetsWoC_EtaPhi(0x0) ,fh1_recLJets_Et(0x0) ,fh1_genLJets_Et(0x0) ,fh2_recLJets_EtaPhi(0x0) ,fh2_genLJets_EtaPhi(0x0) ,fh2_recFF_JetEt(0x0) ,fh2_genFF_JetEt(0x0) ,fh2_recHumpBacked_JetEt(0x0) ,fh2_genHumpBacked_JetEt(0x0) ,fh2_recFF_JetWoCEt(0x0) ,fh2_genFF_JetWoCEt(0x0) ,fh2_recHumpBacked_JetWoCEt(0x0) ,fh2_genHumpBacked_JetWoCEt(0x0) ,fh2_recFF_LJetEt(0x0) ,fh2_genFF_LJetEt(0x0) ,fh2_recHumpBacked_LJetEt(0x0) ,fh2_genHumpBacked_LJetEt(0x0) ,fh1_recPart_Pt(0x0) ,fh1_genPart_Pt(0x0) ,fh2_recPart_EtaPhi(0x0) ,fh2_genPart_EtaPhi(0x0) ,fh1_recJetPart_Pt(0x0) ,fh1_genJetPart_Pt(0x0) ,fh2_recJetPart_EtaPhi(0x0) ,fh2_genJetPart_EtaPhi(0x0) ,fh2_recJetPart_RJetPt(0x0) ,fh2_genJetPart_RJetPt(0x0) ,fh1_recJetWoCPart_Pt(0x0) ,fh1_genJetWoCPart_Pt(0x0) ,fh2_recJetWoCPart_EtaPhi(0x0) ,fh2_genJetWoCPart_EtaPhi(0x0) ,fh2_recJetWoCPart_RJetPt(0x0) ,fh2_genJetWoCPart_RJetPt(0x0) ,fh1_recLJetPart_Pt(0x0) ,fh1_genLJetPart_Pt(0x0) ,fh2_recLJetPart_EtaPhi(0x0) ,fh2_genLJetPart_EtaPhi(0x0) ,fh2_recLJetPart_RJetPt(0x0) ,fh2_genLJetPart_RJetPt(0x0) ,fh3_recPart_EtaPhiPt(0x0) { // // Constructor // } AliAnalysisTaskFragFuncBB::AliAnalysisTaskFragFuncBB(const char *name) : AliAnalysisTaskSE(name) ,fESD(0x0) ,fAOD(0x0) ,fMCEvent(0x0) ,fBranchRecJets("jets") ,fBranchGenJets("") ,fLeadingRecJet(-1) ,fLeadingGenJet(-1) ,fTrackTypeRec(0) ,fTrackTypeGen(0) ,fFilterMask(0) ,fUseGlobalSelection(kFALSE) ,fUseAODJetInput(kFALSE) ,fUseAODTrackInput(kFALSE) ,fUseAODMCInput(kFALSE) ,fJetRadius(.4) ,fEtaMaxPart(.9) ,fEtaMaxJets(.5) ,fHistList(0x0) ,fh1_eventSelection(0x0) ,fh1_vertexNContributors(0x0) ,fh1_vertexZ(0x0) ,fh1_recJets_Et(0x0) ,fh1_genJets_Et(0x0) ,fh2_recJets_EtaPhi(0x0) ,fh2_genJets_EtaPhi(0x0) ,fh1_recJetsWoC_Et(0x0) ,fh1_genJetsWoC_Et(0x0) ,fh2_recJetsWoC_EtaPhi(0x0) ,fh2_genJetsWoC_EtaPhi(0x0) ,fh1_recLJets_Et(0x0) ,fh1_genLJets_Et(0x0) ,fh2_recLJets_EtaPhi(0x0) ,fh2_genLJets_EtaPhi(0x0) ,fh2_recFF_JetEt(0x0) ,fh2_genFF_JetEt(0x0) ,fh2_recHumpBacked_JetEt(0x0) ,fh2_genHumpBacked_JetEt(0x0) ,fh2_recFF_JetWoCEt(0x0) ,fh2_genFF_JetWoCEt(0x0) ,fh2_recHumpBacked_JetWoCEt(0x0) ,fh2_genHumpBacked_JetWoCEt(0x0) ,fh2_recFF_LJetEt(0x0) ,fh2_genFF_LJetEt(0x0) ,fh2_recHumpBacked_LJetEt(0x0) ,fh2_genHumpBacked_LJetEt(0x0) ,fh1_recPart_Pt(0x0) ,fh1_genPart_Pt(0x0) ,fh2_recPart_EtaPhi(0x0) ,fh2_genPart_EtaPhi(0x0) ,fh1_recJetPart_Pt(0x0) ,fh1_genJetPart_Pt(0x0) ,fh2_recJetPart_EtaPhi(0x0) ,fh2_genJetPart_EtaPhi(0x0) ,fh2_recJetPart_RJetPt(0x0) ,fh2_genJetPart_RJetPt(0x0) ,fh1_recJetWoCPart_Pt(0x0) ,fh1_genJetWoCPart_Pt(0x0) ,fh2_recJetWoCPart_EtaPhi(0x0) ,fh2_genJetWoCPart_EtaPhi(0x0) ,fh2_recJetWoCPart_RJetPt(0x0) ,fh2_genJetWoCPart_RJetPt(0x0) ,fh1_recLJetPart_Pt(0x0) ,fh1_genLJetPart_Pt(0x0) ,fh2_recLJetPart_EtaPhi(0x0) ,fh2_genLJetPart_EtaPhi(0x0) ,fh2_recLJetPart_RJetPt(0x0) ,fh2_genLJetPart_RJetPt(0x0) ,fh3_recPart_EtaPhiPt(0x0) { // // Constructor // DefineOutput(1, TList::Class()); } //________________________________________________________________________ AliAnalysisTaskFragFuncBB::~AliAnalysisTaskFragFuncBB() { } //________________________________________________________________________ void AliAnalysisTaskFragFuncBB::UserCreateOutputObjects() { if(fDebug > 1) Printf("AliAnalysisTaskFragFuncBB::UserCreateOutputObjects()"); // // Create histograms / output container // // set binning limits const Int_t nBinJetEt = 250; Double_t binLimitsJetEt[nBinJetEt+1]; for(Int_t iEt=0; iEt<=nBinJetEt; ++iEt){ if(iEt==0) binLimitsJetEt[iEt] = 0.0; else binLimitsJetEt[iEt] = binLimitsJetEt[iEt-1] + 1.0; } const Int_t nBinPartPt = 250; Double_t binLimitsPartPt[nBinPartPt+1]; for(Int_t iPt=0; iPt<=nBinPartPt; ++iPt){ if(iPt==0) binLimitsPartPt[iPt] = 0.0; else binLimitsPartPt[iPt] = binLimitsPartPt[iPt-1] + 1.0; } const Int_t nBinPhi = 90; Double_t binLimitsPhi[nBinPhi+1]; for(Int_t iPhi=0; iPhi<=nBinPhi; ++iPhi){ if(iPhi==0) binLimitsPhi[iPhi] = 0.; //-1.*TMath::Pi(); else binLimitsPhi[iPhi] = binLimitsPhi[iPhi-1] + TMath::Pi()*2/nBinPhi; } const Int_t nBinEta = 40; Double_t binLimitsEta[nBinEta+1]; for(Int_t iEta=0; iEta<=nBinEta; ++iEta){ if(iEta==0) binLimitsEta[iEta] = -2.; else binLimitsEta[iEta] = binLimitsEta[iEta-1] + 0.1; // upper limit: 2. } const Int_t nBinZ = 25; Double_t binLimitsZ[nBinZ+1]; for(Int_t iZ=0; iZ<=nBinZ; ++iZ){ if(iZ==0) binLimitsZ[iZ] = 0.; else binLimitsZ[iZ] = binLimitsZ[iZ-1] + 0.05; // upper limit: 1.25 } const Int_t nBinXi = 100; Double_t binLimitsXi[nBinXi+1]; for(Int_t iXi=0; iXi<=nBinXi; ++iXi){ if(iXi==0) binLimitsXi[iXi] = 0.; else binLimitsXi[iXi] = binLimitsXi[iXi-1] + 0.1; // upper limit: 10. } OpenFile(1); fHistList = new TList(); Bool_t oldStatus = TH1::AddDirectoryStatus(); TH1::AddDirectory(kFALSE); // Histograms fh1_eventSelection = new TH1F("fh1_eventSelection", "Event Selection", 4, -0.5, 3.5); fh1_vertexNContributors = new TH1F("fh1_vertexNContributors", "Vertex N contributors", 51,-.5, 50.5); fh1_vertexZ = new TH1F("fh1_vertexZ", "Vertex z distribution", 200, -19.5, 19.5); fh1_recJets_Et = new TH1F("fh1_recJets_Et", "reconstructed jets;E_{T} [GeV]", nBinJetEt, binLimitsJetEt); fh1_genJets_Et = new TH1F("fh1_genJets_Et", "generated jets;E_{T} [GeV]", nBinJetEt, binLimitsJetEt); fh2_recJets_EtaPhi = new TH2F("fh2_recJets_EtaPhi", "Jet axis - rec. jets;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh2_genJets_EtaPhi = new TH2F("fh2_genJets_EtaPhi", "Jet axis - gen. jets;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh1_recJetsWoC_Et = new TH1F("fh1_recJetsWoC_Et", "reconstructed jets;E_{T} [GeV]", nBinJetEt, binLimitsJetEt); fh1_genJetsWoC_Et = new TH1F("fh1_genJetsWoC_Et", "generated jets;E_{T} [GeV]", nBinJetEt, binLimitsJetEt); fh2_recJetsWoC_EtaPhi = new TH2F("fh2_recJetsWoC_EtaPhi", "Jet axis - rec. jets;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh2_genJetsWoC_EtaPhi = new TH2F("fh2_genJetsWoC_EtaPhi", "Jet axis - gen. jets;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh1_recLJets_Et = new TH1F("fh1_recLJets_Et", "reconstructed jets;E_{T} [GeV]", nBinJetEt, binLimitsJetEt); fh1_genLJets_Et = new TH1F("fh1_genLJets_Et", "generated jets;E_{T} [GeV]", nBinJetEt, binLimitsJetEt); fh2_recLJets_EtaPhi = new TH2F("fh2_recLJets_EtaPhi", "Jet axis - rec. jets;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh2_genLJets_EtaPhi = new TH2F("fh2_genLJets_EtaPhi", "Jet axis - gen. jets;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh2_recFF_JetEt = new TH2F("fh2_recFF_JetEt", "Fragmentation Function - reconstructed; z = p_{T} / p_{T}^{Jet}", nBinZ, binLimitsZ, nBinJetEt, binLimitsJetEt); fh2_genFF_JetEt = new TH2F("fh2_genFF_JetEt", "Fragmentation Function - generated; z = p_{T} / p_{T}^{Jet}", nBinZ, binLimitsZ, nBinJetEt, binLimitsJetEt); fh2_recHumpBacked_JetEt = new TH2F("fh2_recHumpBacked_JetEt", "Hump Backed Plateau - reconstructed ; #xi = log( p_{T}^{Jet} / p_{T} )", nBinXi, binLimitsXi, nBinJetEt, binLimitsJetEt); fh2_genHumpBacked_JetEt = new TH2F("fh2_genHumpBacked_JetEt", "Hump Backed Plateau - generated ; #xi = log( p_{T}^{Jet} / p_{T} )", nBinXi, binLimitsXi, nBinJetEt, binLimitsJetEt); fh2_recFF_JetWoCEt = new TH2F("fh2_recFF_JetWoCEt", "Fragmentation Function - reconstructed; z = p_{T} / p_{T}^{Jet}", nBinZ, binLimitsZ, nBinJetEt, binLimitsJetEt); fh2_genFF_JetWoCEt = new TH2F("fh2_genFF_JetWoCEt", "Fragmentation Function - generated; z = p_{T} / p_{T}^{Jet}", nBinZ, binLimitsZ, nBinJetEt, binLimitsJetEt); fh2_recHumpBacked_JetWoCEt = new TH2F("fh2_recHumpBacked_JetWoCEt", "Hump Backed Plateau - reconstructed ; #xi = log( p_{T}^{Jet} / p_{T} )", nBinXi, binLimitsXi, nBinJetEt, binLimitsJetEt); fh2_genHumpBacked_JetWoCEt = new TH2F("fh2_genHumpBacked_JetWoCEt", "Hump Backed Plateau - generated ; #xi = log( p_{T}^{Jet} / p_{T} )", nBinXi, binLimitsXi, nBinJetEt, binLimitsJetEt); fh2_recFF_LJetEt = new TH2F("fh2_recFF_LJetEt", "Fragmentation Function - reconstructed; z = p_{T} / p_{T}^{Jet}", nBinZ, binLimitsZ, nBinJetEt, binLimitsJetEt); fh2_genFF_LJetEt = new TH2F("fh2_genFF_LJetEt", "Fragmentation Function - generated; z = p_{T} / p_{T}^{Jet}", nBinZ, binLimitsZ, nBinJetEt, binLimitsJetEt); fh2_recHumpBacked_LJetEt = new TH2F("fh2_recHumpBacked_LJetEt", "Hump Backed Plateau - reconstructed ; #xi = log( p_{T}^{Jet} / p_{T} )", nBinXi, binLimitsXi, nBinJetEt, binLimitsJetEt); fh2_genHumpBacked_LJetEt = new TH2F("fh2_genHumpBacked_LJetEt", "Hump Backed Plateau - generated ; #xi = log( p_{T}^{Jet} / p_{T} )", nBinXi, binLimitsXi, nBinJetEt, binLimitsJetEt); fh1_recPart_Pt = new TH1F("fh1_recPart_Pt", "Particles Spectrum - reconstructed;p_{T}", nBinPartPt, binLimitsPartPt); fh1_genPart_Pt = new TH1F("fh1_genPart_Pt", "Particles Spectrum - generated;p_{T}", nBinPartPt, binLimitsPartPt); fh2_recPart_EtaPhi = new TH2F("fh2_recPart_EtaPhi", "Particles distribution - reconstructed;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh2_genPart_EtaPhi = new TH2F("fh2_genPart_EtaPhi", "Particles distribution - generated;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh1_recJetPart_Pt = new TH1F("fh1_recJetPart_Pt", "Jet Particles Spectrum - reconstructed;p_{T}", nBinPartPt, binLimitsPartPt); fh1_genJetPart_Pt = new TH1F("fh1_genJetPart_Pt", "Jet Particles Spectrum - generated;p_{T}", nBinPartPt, binLimitsPartPt); fh2_recJetPart_EtaPhi = new TH2F("fh2_recJetPart_EtaPhi", "Jet Particles - reconstructed;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh2_genJetPart_EtaPhi = new TH2F("fh2_genJetPart_EtaPhi", "Jet Particles - generated;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh2_recJetPart_RJetPt = new TH2F("fh2_recJetPart_RJetPt", "Jet Particles - distance to jet axis;R", 101, -.05, 1.05, nBinJetEt, binLimitsJetEt); fh2_genJetPart_RJetPt = new TH2F("fh2_genJetPart_RJetPt", "Jet Particles - distance to jet axis;R", 101, -.05, 1.05, nBinJetEt, binLimitsJetEt); fh1_recJetWoCPart_Pt = new TH1F("fh1_recJetWoCPart_Pt", "Jet Particles Spectrum - reconstructed;p_{T}", nBinPartPt, binLimitsPartPt); fh1_genJetWoCPart_Pt = new TH1F("fh1_genJetWoCPart_Pt", "Jet Particles Spectrum - generated;p_{T}", nBinPartPt, binLimitsPartPt); fh2_recJetWoCPart_EtaPhi = new TH2F("fh2_recJetWoCPart_EtaPhi", "Jet Particles - reconstructed;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh2_genJetWoCPart_EtaPhi = new TH2F("fh2_genJetWoCPart_EtaPhi", "Jet Particles - generated;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh2_recJetWoCPart_RJetPt = new TH2F("fh2_recJetWoCPart_RJetPt", "Jet Particles - distance to jet axis;R", 101, -.05, 1.05, nBinJetEt, binLimitsJetEt); fh2_genJetWoCPart_RJetPt = new TH2F("fh2_genJetWoCPart_RJetPt", "Jet Particles - distance to jet axis;R", 101, -.05, 1.05, nBinJetEt, binLimitsJetEt); fh1_recLJetPart_Pt = new TH1F("fh1_recLJetPart_Pt", "Jet Particles Spectrum - reconstructed;p_{T}", nBinPartPt, binLimitsPartPt); fh1_genLJetPart_Pt = new TH1F("fh1_genLJetPart_Pt", "Jet Particles Spectrum - generated;p_{T}", nBinPartPt, binLimitsPartPt); fh2_recLJetPart_EtaPhi = new TH2F("fh2_recLJetPart_EtaPhi", "Jet Particles - reconstructed;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh2_genLJetPart_EtaPhi = new TH2F("fh2_genLJetPart_EtaPhi", "Jet Particles - generated;#eta;#phi", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi); fh2_recLJetPart_RJetPt = new TH2F("fh2_recLJetPart_RJetPt", "Jet Particles - distance to jet axis;R", 101, -.05, 1.05, nBinJetEt, binLimitsJetEt); fh2_genLJetPart_RJetPt = new TH2F("fh2_genLJetPart_RJetPt", "Jet Particles - distance to jet axis;R", 101, -.05, 1.05, nBinJetEt, binLimitsJetEt); fh3_recPart_EtaPhiPt = new TH3F("fh3_recPart_EtaPhiPt", "Particles - reconstruced;#eta;#phi;p_{T} [GeV]", nBinEta, binLimitsEta, nBinPhi, binLimitsPhi, nBinPartPt, binLimitsPartPt); const Int_t saveLevel = 4; if(saveLevel>0){ fHistList->Add(fh1_recJetPart_Pt); fHistList->Add(fh2_recJetPart_RJetPt); fHistList->Add(fh2_recFF_JetEt); fHistList->Add(fh2_recHumpBacked_JetEt); fHistList->Add(fh1_genJetPart_Pt); fHistList->Add(fh2_genJetPart_RJetPt); fHistList->Add(fh2_genFF_JetEt); fHistList->Add(fh2_genHumpBacked_JetEt); fHistList->Add(fh1_recJetWoCPart_Pt); fHistList->Add(fh2_recJetWoCPart_RJetPt); fHistList->Add(fh2_recFF_JetWoCEt); fHistList->Add(fh2_recHumpBacked_JetWoCEt); fHistList->Add(fh1_genJetWoCPart_Pt); fHistList->Add(fh2_genJetWoCPart_RJetPt); fHistList->Add(fh2_genFF_JetWoCEt); fHistList->Add(fh2_genHumpBacked_JetWoCEt); fHistList->Add(fh1_recLJetPart_Pt); fHistList->Add(fh2_recLJetPart_RJetPt); fHistList->Add(fh2_recFF_LJetEt); fHistList->Add(fh2_recHumpBacked_LJetEt); fHistList->Add(fh1_genLJetPart_Pt); fHistList->Add(fh2_genLJetPart_RJetPt); fHistList->Add(fh2_genFF_LJetEt); fHistList->Add(fh2_genHumpBacked_LJetEt); } if(saveLevel>1){ fHistList->Add(fh1_eventSelection); fHistList->Add(fh1_recPart_Pt); fHistList->Add(fh1_recJets_Et); fHistList->Add(fh1_recJetsWoC_Et); fHistList->Add(fh1_recLJets_Et); fHistList->Add(fh1_genPart_Pt); fHistList->Add(fh1_genJets_Et); fHistList->Add(fh1_genJetsWoC_Et); fHistList->Add(fh1_genLJets_Et); } if(saveLevel>2){ } if(saveLevel>3){ fHistList->Add(fh2_recJetPart_EtaPhi); fHistList->Add(fh2_recJetWoCPart_EtaPhi); fHistList->Add(fh2_recLJetPart_EtaPhi); fHistList->Add(fh2_recJets_EtaPhi); fHistList->Add(fh2_recJetsWoC_EtaPhi); fHistList->Add(fh2_recLJets_EtaPhi); fHistList->Add(fh2_recPart_EtaPhi); fHistList->Add(fh2_genJetPart_EtaPhi); fHistList->Add(fh2_genJetWoCPart_EtaPhi); fHistList->Add(fh2_genLJetPart_EtaPhi); fHistList->Add(fh2_genJets_EtaPhi); fHistList->Add(fh2_genJetsWoC_EtaPhi); fHistList->Add(fh2_genLJets_EtaPhi); fHistList->Add(fh2_genPart_EtaPhi); fHistList->Add(fh3_recPart_EtaPhiPt); fHistList->Add(fh1_vertexNContributors); fHistList->Add(fh1_vertexZ); } // =========== Switch on Sumw2 for all histos =========== for (Int_t i=0; iGetEntries(); ++i) { TH1 *h1 = dynamic_cast(fHistList->At(i)); if (h1) h1->Sumw2(); } TH1::AddDirectory(oldStatus); } //_______________________________________________________________________ void AliAnalysisTaskFragFuncBB::Init() { // Initialization if(fDebug > 1) Printf("AliAnalysisTaskFragFuncBB::Init()"); } //________________________________________________________________________ void AliAnalysisTaskFragFuncBB::UserExec(Option_t *) { // Main loop // Called for each event if(fDebug > 1) Printf("AliAnalysisTaskFragFuncBB::UserExec()"); /* if(!AliAnalysisHelperJetTasks::Selected()&&fUseGlobalSelection){ // no selection by the service task, we continue if (fDebug > 1)Printf("Not selected %s:%d",(char*)__FILE__,__LINE__); PostData(1, fHistList); return; } */ if(fDebug > 1) Printf("Analysis event #%5d", (Int_t) fEntry); // Trigger selection AliInputEventHandler* inputHandler = (AliInputEventHandler*) ((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler()); if(inputHandler->IsEventSelected()){ if(fDebug > 1) AliInfo(" Trigger Selection: event ACCEPTED ... "); fh1_eventSelection->Fill(1.); } else { if (fDebug > 1) AliInfo(" Trigger Selection: event REJECTED ... "); fh1_eventSelection->Fill(0.); PostData(1, fHistList); return; } fESD = dynamic_cast(InputEvent()); if(!fESD){ Printf("%s:%d ESDEvent not found in the input", (char*)__FILE__,__LINE__); } fMCEvent = MCEvent(); if(!fMCEvent){ Printf("%s:%d MCEvent not found in the input", (char*)__FILE__,__LINE__); } if(fUseAODJetInput){ fAOD = dynamic_cast(InputEvent()); if(!fAOD){ Printf("%s:%d AODEvent not found in InputManager %d", (char*)__FILE__,__LINE__, fUseAODJetInput); return; } } else { // assume that the AOD is in the general output ... fAOD = dynamic_cast(AODEvent()); if(!fAOD){ Printf("%s:%d AODEvent not found in the output", (char*)__FILE__,__LINE__); return; } } //Event selection (vertex) ***************************************** AliKFVertex primVtx(*(fAOD->GetPrimaryVertex())); Int_t nTracksPrim = primVtx.GetNContributors(); fh1_vertexNContributors->Fill(nTracksPrim); fh1_vertexZ->Fill(primVtx.GetZ()); if (fDebug > 1) AliInfo(Form(" Primary-vertex Selection: %d",nTracksPrim)); if(!nTracksPrim){ if (fDebug > 1) AliInfo(" Primary-vertex Selection: event REJECTED ..."); fh1_eventSelection->Fill(2.); PostData(1, fHistList); return; } if (fDebug > 1) AliInfo(" Primary-vertex Selection: event ACCEPTED ..."); fh1_eventSelection->Fill(3.); //___ fetch jets __________________________________________________________________________ // reconstructed jets AliAODJet recJets[fgkMaxJets]; Int_t nRecJets = 0; if(fBranchRecJets.Length()>0){ TClonesArray *aodRecJets = dynamic_cast(fAOD->FindListObject(fBranchRecJets.Data())); if(aodRecJets){ Int_t iCount = 0; for(Int_t ij=0; ijGetEntries(); ++ij){ if(iCount>=fgkMaxJets){ Printf("%s:%d max. nb. of jets %d reached, %d", (char*)__FILE__,__LINE__,fgkMaxJets, ij); continue; } AliAODJet *tmp = dynamic_cast(aodRecJets->At(ij)); if(!tmp) continue; recJets[iCount] = *tmp; // leading jet? if(fLeadingRecJet<0 || recJets[fLeadingRecJet].Pt()1)fAOD->Print(); return; } } // check that the jets are sorted Float_t ptOld = 999999.; for(int ir = 0;ir < nRecJets;ir++){ Float_t tmpPt = recJets[ir].Pt(); if(tmpPt>ptOld){ Printf("%s:%d Jets Not Sorted!! %d:%.3E %d%.3E",(char*)__FILE__,__LINE__,ir,tmpPt,ir-1,ptOld); } ptOld = tmpPt; } // generated jets AliAODJet genJets[fgkMaxJets]; Int_t nGenJets = 0; //Int_t nTrials = 1; // Trials for MC trigger //Double_t ptHard = -1; if(fBranchGenJets.Length()==0){ // if no generated jets from AOD used, get pythia jets if(!fMCEvent){ Printf("%s:%d no mcEvent",(char*)__FILE__,__LINE__); } /* AliGenPythiaEventHeader* pythiaGenHeader = AliAnalysisHelperJetTasks::GetPythiaEventHeader(fMCEvent); Int_t iCount = 0; if(pythiaGenHeader){ //nTrials = pythiaGenHeader->Trials(); //ptHard = pythiaGenHeader->GetPtHard(); int iProcessType = pythiaGenHeader->ProcessType(); // 11 f+f -> f+f // 12 f+barf -> f+barf // 13 f+barf -> g+g // 28 f+g -> f+g // 53 g+g -> f+barf // 68 g+g -> g+g if (fDebug > 10)Printf("%d iProcessType %d",__LINE__, iProcessType); if(fDebug>20)AliAnalysisHelperJetTasks::PrintStack(fMCEvent); // fetch the pythia generated jets for(int ip=0; ipNTriggerJets(); ++ip){ if(iCount>=fgkMaxJets){ Printf("%s:%d max. nb. of jets %d reached, %d", (char*)__FILE__,__LINE__,fgkMaxJets, ip); continue; } Float_t p[4]; pythiaGenHeader->TriggerJet(ip, p); genJets[iCount].SetPxPyPzE(p[0], p[1], p[2], p[3]); iCount++; } nGenJets = iCount; } */ } else { TClonesArray *aodGenJets = dynamic_cast(fAOD->FindListObject(fBranchGenJets.Data())); if(aodGenJets){ Int_t iCount = 0; for(Int_t ig=0; igGetEntries(); ++ig){ if(iCount>=fgkMaxJets){ Printf("%s:%d max. nb. of jets %d reached, %d", (char*)__FILE__,__LINE__,fgkMaxJets, ig); continue; } AliAODJet *tmp = dynamic_cast(aodGenJets->At(ig)); if(!tmp) continue; genJets[iCount] = *tmp; // check for leading jet if(fLeadingGenJet<0 || genJets[fLeadingGenJet].Pt()0)Printf("%s:%d Generated jet branch %s not found",(char*)__FILE__,__LINE__,fBranchGenJets.Data()); if(fDebug>1)fAOD->Print(); } } //____ fetch particles __________________________________________________________ TList recParticles; TList genParticles; Int_t nT = GetListOfTracks(&recParticles,fTrackTypeRec); Int_t nRecPart = 0; if(nT>=0) nRecPart = recParticles.GetEntries(); if(fDebug>2)Printf("%s:%d Selected Rec tracks: %d %d",(char*)__FILE__,__LINE__,nT,nRecPart); nT = GetListOfTracks(&genParticles,fTrackTypeGen); Int_t nGenPart = 0; if(nT>=0) nGenPart = genParticles.GetEntries(); if(fDebug>2)Printf("%s:%d Selected Gen tracks: %d %d",(char*)__FILE__,__LINE__,nT,nGenPart); //____ analysis, fill histos ___________________________________________________ // loop over rec. particles for(Int_t it=0; it Fill( part->Pt() ); fh2_recPart_EtaPhi -> Fill( part->Eta(), TVector2::Phi_0_2pi(part->Phi()) ); fh3_recPart_EtaPhiPt -> Fill( part->Eta(), TVector2::Phi_0_2pi(part->Phi()), part->Pt() ); } // loop over reconstructed jets for(Int_t ij=0; ij Fill( recJetPt ); fh2_recJetsWoC_EtaPhi -> Fill( recJetEta, recJetPhi ); // eta acceptance cut if(TMath::Abs(recJetEta) Fill( recJetPt ); fh2_recJets_EtaPhi -> Fill( recJetEta, recJetPhi ); // leading jet if(fLeadingRecJet==ij){ fh1_recLJets_Et -> Fill( recJetPt ); fh2_recLJets_EtaPhi -> Fill( recJetEta, recJetPhi ); } } // loop over rec. particles (in loop over rec. jets) for(Int_t it=0; itPt() / recJetPt; Double_t xi = 0; if(z!=0) xi = TMath::Log(1/z); // without cuts fh2_recFF_JetWoCEt -> Fill( z, recJetPt ); fh2_recHumpBacked_JetWoCEt -> Fill( xi, recJetPt ); fh1_recJetWoCPart_Pt -> Fill( part->Pt() ); fh2_recJetWoCPart_EtaPhi -> Fill( part->Eta(), TVector2::Phi_0_2pi(part->Phi()) ); fh2_recJetWoCPart_RJetPt -> Fill( recJets[ij].DeltaR(part), recJetPt ); // jet eta acceptance cut if(TMath::Abs(recJetEta) Fill( z, recJetPt ); fh2_recHumpBacked_JetEt -> Fill( xi, recJetPt ); fh1_recJetPart_Pt -> Fill( part->Pt() ); fh2_recJetPart_EtaPhi -> Fill( part->Eta(), TVector2::Phi_0_2pi(part->Phi()) ); fh2_recJetPart_RJetPt -> Fill( recJets[ij].DeltaR(part), recJetPt ); // leading jet if(fLeadingRecJet==ij){ fh2_recFF_LJetEt -> Fill( z, recJetPt ); fh2_recHumpBacked_LJetEt -> Fill( xi, recJetPt ); fh1_recLJetPart_Pt -> Fill( part->Pt() ); fh2_recLJetPart_EtaPhi -> Fill( part->Eta(), TVector2::Phi_0_2pi(part->Phi()) ); fh2_recLJetPart_RJetPt -> Fill( recJets[ij].DeltaR(part), recJetPt ); } } } } } // loop over gen. particles for(Int_t it=0; it Fill( part->Pt() ); fh2_genPart_EtaPhi -> Fill( part->Eta(), TVector2::Phi_0_2pi(part->Phi()) ); } // loop over gen. jets for(Int_t ig=0; ig Fill( genJetPt ); fh2_genJets_EtaPhi -> Fill( genJetEta, genJetPhi ); // loop over gen. particles (in loop over gen. jets) for(Int_t it=0; itPt() / genJetPt; Double_t xi = 0; if(z!=0) xi = TMath::Log(1/z); fh2_genFF_JetEt -> Fill( z, genJetPt ); fh2_genHumpBacked_JetEt -> Fill( xi, genJetPt ); fh1_genJetPart_Pt -> Fill( part->Pt() ); fh2_genJetPart_EtaPhi -> Fill( part->Eta(), TVector2::Phi_0_2pi(part->Phi()) ); fh2_genJetPart_RJetPt -> Fill( genJets[ig].DeltaR(part), genJetPt ); } } } //Post output data. PostData(1, fHistList); } //________________________________________________________________________ void AliAnalysisTaskFragFuncBB::Terminate(Option_t *) { if(fDebug > 1) printf("AliAnalysisTaskFragFuncBB::Terminate() \n"); } //________________________________________________________________________ Int_t AliAnalysisTaskFragFuncBB::GetListOfTracks(TList *list, Int_t type){ if(fDebug > 2) Printf("%s:%d Selecting tracks with %d", (char*)__FILE__,__LINE__,type); if(type==kTrackUndef) return -1; Int_t iCount = 0; if(type==kTrackAOD){ // all rec. tracks, esd filter mask, eta range AliAODEvent *aod = 0; if(fUseAODTrackInput) aod = dynamic_cast(InputEvent()); else aod = AODEvent(); if(!aod) return iCount; for(Int_t it=0; itGetNumberOfTracks(); ++it){ AliAODTrack *tr = aod->GetTrack(it); if((fFilterMask>0)&&!(tr->TestFilterBit(fFilterMask))) continue; if(TMath::Abs(tr->Eta())>fEtaMaxPart) continue; list->Add(tr); iCount++; } } else if (type==kTrackKineAll || type==kTrackKineCharged){ // kine particles, all or rather charged if(!fMCEvent) return iCount; for(Int_t it=0; itGetNumberOfTracks(); ++it){ AliMCParticle* part = (AliMCParticle*) fMCEvent->GetTrack(it); if(type == kTrackKineCharged){ if(part->Particle()->GetPDG()->Charge()==0) continue; } list->Add(part); iCount++; } } else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance) { // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance AliAODEvent *aod = 0; if(fUseAODMCInput) aod = dynamic_cast(InputEvent()); else aod = AODEvent(); if(!aod) return iCount; TClonesArray *tca = dynamic_cast(aod->FindListObject(AliAODMCParticle::StdBranchName())); if(!tca)return iCount; for(int it=0; itGetEntriesFast(); ++it){ AliAODMCParticle *part = dynamic_cast(tca->At(it)); if(!part->IsPhysicalPrimary())continue; if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance){ if(part->Charge()==0) continue; if(type==kTrackAODMCChargedAcceptance && TMath::Abs(part->Eta())>fEtaMaxPart) continue; } list->Add(part); iCount++; } } list->Sort(); return iCount; }