1 #ifndef ALIANALYSISTASKSE_H 10 #include <TProfile2D.h> 18 #include <THnSparse.h> 21 #include <TClonesArray.h> 25 #include <TInterpreter.h> 26 #include "AliAnalysisTask.h" 27 #include "AliCentrality.h" 29 #include "AliESDEvent.h" 31 #include "AliESDInputHandler.h" 32 #include "AliAODEvent.h" 33 #include "AliAODHandler.h" 34 #include "AliAnalysisManager.h" 35 #include "AliAnalysisTaskSE.h" 38 #include "AliInputEventHandler.h" 44 #include "AliGenEventHeader.h" 45 #include "AliGenPythiaEventHeader.h" 46 #include "AliGenHijingEventHeader.h" 47 #include "AliAODMCHeader.h" 48 #include "AliMCEvent.h" 52 #include "AliVEventHandler.h" 53 #include "AliVParticle.h" 54 #include "AliAODMCParticle.h" 55 #include "AliAODTrack.h" 56 #include "AliAnalysisUtils.h" 59 #include "AliVVertex.h" 69 #include "AliHeader.h" 70 #include "AliRunLoader.h" 71 #include "AliVVZERO.h" 73 #include "AliExternalTrackParam.h" 86 fUseDefaultVertexCut(1), fUsePileUpCut(1), fIsMC(0),
87 fSignalJetRadius(0.4),
88 fSignalJetEtaWindow(0.9 - fSignalJetRadius), fTrackEtaWindow(0.9), fMinTrackPt(0.150), fASPDCvsTCut(65.), fBSPDCvsTCut(4.), fMinJetArea(0.0),
89 fCentralityType("V0A"), fHelperClass(0), fInitializedLocal(0),
90 fZVertexCut(10.0), fhJetPt(0x0), fhCuts(0x0), fhTrackPt(0x0),fhJetConstituentPt(0x0),fhJetEtaPt(0x0),fhAktJetEtaPhi(0x0),fhKtJetEtaPhi(0x0),fhJetAreaPt(0x0),fhJetPhiPt(0x0),fhZVertex(0x0),fhYVertex(0x0),fhXVertex(0x0),fhJetPtRho(0x0),fhJetPtConeRho(0x0),fhJetPtCMSRho(0x0),fhRho(0x0),fhConeRho(0x0),fhCMSRho(0x0),fhTrackEtaPt(0x0),fhGenTrackEtaPt(0x0),fhTrackPhiPt(0x0),fhTrackEtaPhi(0x0),fhKTJetPt(0x0),fhZVertexBC(0x0), fhRemx(0x0), fhPrimGenTrkPt(0x0), fhGenJetPt(0x0), fhRecTrkPt(0x0), fhFakeTrkPt(0x0),fhMult(0x0),fhTrackPhiCG(0x0),fhTrackPhiTPCG(0x0),fhAtimesRhoMedian(0x0),fhAtimesRhoCone(0x0),fhAtimesRhoCMS(0x0)
94 fhInvPtQVsPhi[i] = NULL;
95 fhInvPtQVsEta[i] = NULL;
96 fhInvPtQVsPhiASide[i] = NULL;
97 fhInvPtQVsPhiCSide[i] = NULL;
98 fhSigmaPtOverPtVsPt[i] = NULL;
105 fUseDefaultVertexCut(1), fUsePileUpCut(1), fIsMC(0),
106 fSignalJetRadius(0.4),
107 fSignalJetEtaWindow(0.9 - fSignalJetRadius), fTrackEtaWindow(0.9), fMinTrackPt(0.150), fASPDCvsTCut(65.), fBSPDCvsTCut(4.), fMinJetArea(0.0),
108 fCentralityType(
"V0A"), fHelperClass(0), fInitializedLocal(0),
109 fZVertexCut(10.0),fhJetPt(0x0),fhCuts(0x0), fhTrackPt(0x0),fhJetConstituentPt(0x0),fhJetEtaPt(0x0),fhAktJetEtaPhi(0x0),fhKtJetEtaPhi(0x0),fhJetAreaPt(0x0),fhJetPhiPt(0x0),fhZVertex(0x0),fhYVertex(0x0),fhXVertex(0x0),fhJetPtRho(0x0),fhJetPtConeRho(0x0),fhJetPtCMSRho(0x0),fhRho(0x0),fhConeRho(0x0),fhCMSRho(0x0),fhTrackEtaPt(0x0),fhTrackPhiPt(0x0),fhTrackEtaPhi(0x0),fhGenTrackEtaPt(0x0),fhKTJetPt(0x0),fhZVertexBC(0x0), fhRemx(0x0), fhPrimGenTrkPt(0x0), fhGenJetPt(0x0), fhRecTrkPt(0x0), fhFakeTrkPt(0x0),fhMult(0x0),fhTrackPhiCG(0x0),fhTrackPhiTPCG(0x0),fhAtimesRhoMedian(0x0),fhAtimesRhoCone(0x0),fhAtimesRhoCMS(0x0)
113 for(
int i=0;i<2;i++){
122 DefineOutput(1, AliEmcalList::Class());
129 if(!event)
return kFALSE;
133 fhZVertexBC->Fill(event->GetPrimaryVertex()->GetZ());
141 if(TMath::Abs(event->GetPrimaryVertex()->GetZ()) >
fZVertexCut){
146 fhZVertex->Fill(event->GetPrimaryVertex()->GetZ());
147 fhXVertex->Fill(event->GetPrimaryVertex()->GetX());
148 fhYVertex->Fill(event->GetPrimaryVertex()->GetY());
157 Int_t nClustersLayer0 =
event->GetNumberOfITSClusters(0);
158 Int_t nClustersLayer1 =
event->GetNumberOfITSClusters(1);
159 Int_t nTracklets =
event->GetMultiplicity()->GetNumberOfTracklets();
171 if(!track)
return kFALSE;
174 if(!track->Charge())
return kFALSE;
175 if(!(static_cast<AliAODMCParticle*>(track))->IsPhysicalPrimary())
return kFALSE;
189 if(!jet)
return kFALSE;
219 AliError(
"??? Event pointer == 0 ???");
246 AliVParticle *constTrackRec = NULL;
247 AliVParticle *constTrackGen = NULL;
266 AliAODTrack *constTrackRecAod=NULL;
272 constTrackRecAod = (AliAODTrack*)trackIterator.second;
273 if(!constTrackRecAod->IsHybridGlobalConstrainedGlobal())
continue;
274 if(!constTrackRecAod)
continue;
278 fhTrackEtaPt->Fill(constTrackRecAod->Eta(),constTrackRecAod->Pt());
282 if(constTrackRecAod->IsGlobalConstrained()){
287 itrkq = (constTrackRecAod->Charge()<0) ? 0 : 1;
290 fhInvPtQVsEta[itrkq]->Fill(constTrackRecAod->Eta(), 1.0/constTrackRecAod->Pt());
292 if(constTrackRecAod->Eta()>0){
297 memset(cv, 0,
sizeof(
Double_t) * 21);
298 memset(pxpypz, 0,
sizeof(
Double_t) * 50);
299 memset(xyz, 0,
sizeof(
Double_t) * 50);
300 constTrackRecAod->GetXYZ(xyz);
301 constTrackRecAod->GetPxPyPz(pxpypz);
302 constTrackRecAod->GetCovarianceXYZPxPyPz(cv);
303 AliExternalTrackParam par(xyz, pxpypz, cv, constTrackRecAod->Charge());
304 fhSigmaPtOverPtVsPt[itrkq]->Fill(constTrackRecAod->Pt(), TMath::Abs(sqrt(par.GetSigma1Pt2())/par.GetSigned1Pt()));
307 fhMult->Fill(fMultCounter);
322 jetContRecAKT->ResetCurrentID();
325 if(!jetRec)
continue;
341 constTrackRec =
static_cast<AliVParticle*
> (jetRec->
TrackAt(iq, trkContRec->GetArray()));
342 if(!constTrackRec)
continue;
352 if(!jetRec)
continue;
363 constTrackGen=(AliVParticle*)trackIterator.second;
364 if(!constTrackGen)
continue;
375 if(trkContRec && parContGen){
377 constTrackRecAod=(AliAODTrack*)trackIterator.second;
378 if(!constTrackRecAod->IsHybridGlobalConstrainedGlobal())
continue;
379 if(!constTrackRecAod)
continue;
383 parContGen->ResetCurrentID();
385 constTrackGen=(AliAODTrack*)trackIterator.second;
386 if(!constTrackGen)
continue;
388 if(TMath::Abs(constTrackRecAod->GetLabel()) == TMath::Abs(constTrackGen->GetLabel())){
407 if(!jetGen)
continue;
416 if(!jetRec)
continue;
441 printf(
"ERROR: Output list not available\n");
449 if(
fOutput && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
459 Bool_t oldStatus = TH1::AddDirectoryStatus();
460 TH1::AddDirectory(kFALSE);
464 fhJetPt =
new TH1D(
"fhJetPt",
"Pt spectrum of the AKT jets",320,-20.0,300.0);
465 fhJetPtRho =
new TH1D(
"fhJetPtRho",
"Pt spectrum of the AKT jets - kt bg",320,-20.0,300.0);
466 fhJetPtConeRho =
new TH1D(
"fhJetPtConeRho",
"p_{T} spectrum of the a-k_{T} jets - local kt bg",320,-20.0,300.0);
467 fhJetPtCMSRho =
new TH1D(
"fhJetPtCMSRho",
"p_{T} spectrum of the a-k_{T} jets - CMS bg",320,-20.0,300.0);
469 fhAtimesRhoCone =
new TH1D(
"fhAtimesRhoCone",
"cone background times area",320,-20.0,300.0);
470 fhAtimesRhoCMS =
new TH1D(
"fhAtimesRhoCMS",
"CMS a-k_{T} background times area",320,-20.0,300.0);
471 fhJetConstituentPt =
new TH1D(
"fhJetConstituentPt",
"Pt spectrum of the a-k_{T} jet constituents",300,0.0,300.0);
472 fhTrackPt =
new TH1D(
"fhTrackPt",
"p_{T} spectrum of tracks",300,0.0,300.0);
473 fhJetAreaPt =
new TH2D(
"fhJetAreaPt",
"Jet area vs pt",50,0.,2.,300,0.0,300.0);
480 fhJetPhiPt =
new TH2D(
"fhJetPhiPt",
"#phi-p_{T} distribution of jets",50,-TMath::Pi(),TMath::Pi(),300,0.0,300.0);
481 fhTrackPhiPt =
new TH2D(
"fhTrackPhiPt",
"#phi-p_{T} distribution of tracks",50,-TMath::Pi(),TMath::Pi(),300,0.0,300.0);
483 fhZVertexBC =
new TH1D(
"fhZVertexBC",
"Z vertex before the cut",200,-50.0,50.0);
486 fhCuts =
new TH1D(
"fhCuts",
"Cuts statistics",3,0,3);
487 fhRho =
new TH1D(
"fhRho",
"k_{T} jet background",500,0,50.0);
488 fhConeRho =
new TH1D(
"fhConeRho",
"Local a-k_{T} jet background",500,0,50.0);
489 fhCMSRho =
new TH1D(
"fhCMSRho",
"CMS-style a-k_{T} jet background",500,0,50.0);
490 fhKTJetPt =
new TH1D(
"fhKTJetPt",
"KT jets p_{T} spectrum",300,0.0,300.0);
493 fhRecTrkPt =
new TH1D(
"fhRecTrkPt",
"Correctly rec. track p_{T}",300,0.0,300.0);
494 fhFakeTrkPt =
new TH1D(
"fhFakeTrkPt",
"Fake track p_{T}",300,0.0,300.0);
495 fhRemx =
new TH2D(
"fhRemx",
"Response matrix",300,0.0,300.0,300,0.0,300.0);
496 fhMult =
new TH1D(
"fhMult",
"Reconstructed track multiplicity",300,0,300.0);
498 fhTrackPhiCG =
new TH2D(
"fhTrackPhiCG",
"Global tracks azimuth vs p_{T} ",300,0,300,50,-TMath::Pi(),TMath::Pi());
499 fhTrackPhiTPCG =
new TH2D(
"fhTrackPhiTPCG",
"Complementary tracks azimuth vs p_{T)",300,0,300.0,50,-TMath::Pi(),TMath::Pi());
500 for(
int i=0;i<2;i++){
501 name = Form(
"fhSigmaPtOverPtVsPt%i",i);
504 name = Form(
"fhInvPtQVsPhi%i",i);
505 fhInvPtQVsPhi[i] =
new TH2D(name.Data(),
"Negative track azimuth vs 1/pt",50,-TMath::Pi(),TMath::Pi(),300,0.0,0.25);
507 name = Form(
"fhInvPtQVsEta%i",i);
510 name = Form(
"fhInvPtQVsPhiASide%i",i);
511 fhInvPtQVsPhiASide[i] =
new TH2D(name.Data(),
"Negative phi vs 1/pt A-eta",50,-TMath::Pi(),TMath::Pi(),300,0.0,0.25);
513 name = Form(
"fhInvPtQVsPhiCSide%i",i);
514 fhInvPtQVsPhiCSide[i] =
new TH2D(name.Data(),
"Negative phi vs 1/pt C-eta",50,-TMath::Pi(),TMath::Pi(),300,0.0,0.25);
565 THnSparse *hn =
dynamic_cast<THnSparse*
>(
fOutput->At(i));
570 TH1::AddDirectory(oldStatus);
597 if(!jetCont)
return rhoCone;
610 if(jetpt <0.005) jetpt = 0.;
611 rhovec[nJetAcc] = jetpt/jet->
Area();
616 rhoCone = TMath::Median(nJetAcc, rhovec);
628 if(!jetCont)
return rhoCone;
631 AliVParticle* track = NULL;
652 if(jet->
Pt()>highjetpt){
653 highjetpt = jet->
Pt();
654 highjeteta = jet->
Eta();
658 if(highjetpt<0)
return 0.;
659 perpphi1=
Convert(highjetphi+TMath::Pi()/2);
660 perpphi2=
Convert(highjetphi-TMath::Pi()/2);
663 track=(AliVParticle*)trackIterator.second;
664 if(!((AliAODTrack*)track)->IsHybridGlobalConstrainedGlobal())
continue;
668 trackpt = track->Pt();
669 tracketa = track->Eta();
670 trackphi =
Convert(track->Phi());
671 X=tracketa-highjeteta;
675 if((X*X+Y*Y) < coner2 || (X*X+Z*Z) < coner2){
679 rhoCone = bgpt/(2*TMath::Pi()*coner2);
689 if(!jetCont)
return rhoCMS;
703 if(jet->
Pt() > 0.01){
704 physJetArea += jet->
Area();
706 rhovec[nJetAcc] = jetpt/jet->
Area();
709 allJetArea += jet->
Area();
712 if(nJetAcc>0 && allJetArea!=0){
713 rhoCMS = TMath::Median(nJetAcc, rhovec)*physJetArea/allJetArea;
723 phi = TMath::ATan2(TMath::Sin(input),TMath::Cos(input));
void ExecOnceLocal()
Perform steps needed to initialize the analysis.
Double_t EstimateBgKT(AliJetContainer *jetCont)
Bool_t IsSignalJetInAcceptance(AliEmcalJet *jet, Bool_t suppressGhost=1)
TH1D * fhXVertex
! X vertex
TH2D * fhRemx
! Response matrix
Bool_t IsTrackInAcceptance(AliVParticle *track, Bool_t isprimary=0)
TH2D * fhTrackEtaPhi
! Track eta-phi distribution
AliEmcalJet * ClosestJet() const
TH2D * fhGenTrackEtaPt
! Generated track eta-pt distribution
AliJetContainer * GetJetContainer(Int_t i=0) const
Bool_t IsSPDClusterVsTrackletBG(AliVEvent *event)
TH1D * fhZVertex
! Z vertex
TH1D * fhJetPtConeRho
! pt spectrum of AKT jets without local bgk
TH2D * fhInvPtQVsEta[2]
! Inverse pt vs eta
Bool_t Run()
Run the nalysis.
TH2D * fhTrackPhiCG
! Global tracks
TH2D * fhTrackPhiTPCG
! complementary tracks
Double_t fMinJetArea
Min jet area to be accepted.
TH1D * fhRecTrkPt
! Pt spectrum of correctly reconstructed tracks
TH1D * fhPrimGenTrkPt
! Pt spectrum of MC particle
TH2D * fhTrackEtaPt
! Track eta-pt distribution
TH1D * fhMult
! Multiplicity
Declaration of the class AliAnalysisTaskJetPP.
Bool_t RetrieveEventObjects()
TH2D * fhInvPtQVsPhiCSide[2]
! Inverse pt vs pi in close-side rapidity
TH1D * fhTrackPt
! Track pt
Double_t EstimateLocalBg(AliJetContainer *jetCont, AliParticleContainer *trkCont)
TH1D * fhJetConstituentPt
! Jet constituent pt
Double_t fSignalJetEtaWindow
+- window in eta for signal jets
Container for particles within the EMCAL framework.
TH1D * fhCMSRho
! CMS KT bgk
Int_t TrackAt(Int_t idx) const
Pure virtual base class for AliAnalysisTaskJetPP.
UShort_t GetNumberOfTracks() const
TH1D * fhJetPt
! pt spectrum of AKT jets
AliParticleContainer * GetParticleContainer(Int_t i=0) const
Get particle container attached to this task.
TH2D * fhAktJetEtaPhi
! Jet et-phi distribution
Double_t Convert(Double_t input)
TH1D * fhAtimesRhoCone
! cone jet background times area
const AliJetIterableMomentumContainer accepted_momentum() const
Float_t fBSPDCvsTCut
SPD cluster-vs-tracklet cut.
Double_t fTrackEtaWindow
gc +- window in eta for tracks
TH2D * fhTrackPhiPt
! Track phi-pt distribution
TH2D * fhJetAreaPt
! Jet Area-pt distribution
Double_t fZVertexCut
zvertex cut
TH2D * fhKtJetEtaPhi
! Jet et-phi distribution
TH1D * fhJetPtRho
! pt spectrum of AKT jets without kt bgk
void Terminate(Option_t *)
void UserCreateOutputObjects()
Overloads base class method. Creates output objects.
TH2D * fhInvPtQVsPhiASide[2]
! Inverse pt vs phi in away-side rapidity
TH1D * fhConeRho
! local KT bgk
TH1D * fhAtimesRhoCMS
! CMS jet background times area
TH2D * fhJetPhiPt
! Jet phi-pt distribution
TH1D * fhYVertex
! Y vertex
Bool_t fInitializedLocal
! gc trigger if tracks/jets are loaded initiates calling ExecOnce
TH1D * fhKTJetPt
! pt spectrum of KT jets
TH2D * fhSigmaPtOverPtVsPt[2]
! Pt vs sigmaPt/Pt
Enhanced TList-derived class that implements correct merging for pt_hard binned production.
TH1D * fhCuts
! histogram for pilup/vertex cuts
virtual ~AliAnalysisTaskJetPP()
TH2D * fhInvPtQVsPhi[2]
! Inverse pt vs phi
AliEmcalList * fOutput
!output list
AliAnalysisUtils * fHelperClass
! gc Vertex selection helper
Bool_t RetrieveEventObjects()
Retrieve common objects from event.
Double_t EstimateBgKTCMS(AliJetContainer *jetCont)
Double_t fMinTrackPt
gc Min track pt to be accepted
const AliParticleIterableMomentumContainer accepted_momentum() const
TH1D * fhJetPtCMSRho
! pt spectrum of AKT jets without CMS bgk
Float_t fASPDCvsTCut
SPD cluster-vs-tracklet cut.
TH1D * fhAtimesRhoMedian
! kt jet background times area
Base task in the EMCAL jet framework.
Represent a jet reconstructed using the EMCal jet framework.
TH1D * fhZVertexBC
! Z vertex before cut
void UserCreateOutputObjects()
Main initialization function on the worker.
Bool_t IsEventInAcceptance(AliVEvent *event)
TH1D * fhGenJetPt
! Pt spectrum of MC jets
Bool_t fUseDefaultVertexCut
trigger if automatic vertex cut from helper class should be done
Bool_t fUsePileUpCut
trigger if pileup cut should be done
Container for jet within the EMCAL jet framework.
AliAnalysisTaskJetPP()
Default constructor.
TH1D * fhFakeTrkPt
! Pt spectrum of fake tracks
TH2D * fhJetEtaPt
! Jet eta-pt distribution