#include "AliMixedEvent.h"
#include "AliAnalysisManager.h"
#include "AliInputEventHandler.h"
+#include "AliEventplane.h"
ClassImp(AliAnaParticleHadronCorrelation)
fMakeAbsoluteLeading(0), fMakeNearSideLeading(0),
fLeadingTriggerIndex(-1), fHMPIDCorrelation(0), fFillBradHisto(0),
fNAssocPtBins(0), fAssocPtBinLimit(),
- fDoOwnMix(0), fUseTrackMultBins(0),
- fListMixEvents(),
+ fCorrelVzBin(0),
+ fListMixTrackEvents(), fListMixCaloEvents(),
+ fUseMixStoredInReader(0), fFillNeutralEventMixPool(0),
+ fM02MaxCut(0), fM02MinCut(0),
+ fFillPileUpHistograms(0),
//Histograms
- fhPtLeading(0), fhPhiLeading(0),
- fhEtaLeading(0), fhDeltaPhiDeltaEtaCharged(0),
+ fhPtInput(0), fhPtFidCut(0),
+ fhPtLeading(0), fhPtLeadingPileUp(),
+ fhPtLeadingVzBin(0), fhPtLeadingBin(0),
+ fhPhiLeading(0), fhEtaLeading(0),
+ fhPtLeadingMC(),
+ fhPtLeadingCentrality(0), fhPtLeadingEventPlane(0),
+ fhLeadingEventPlaneCentrality(0),
+ fhPtLeadingMixed(0), fhPtLeadingMixedVzBin(0), fhPtLeadingMixedBin(0),
+ fhPhiLeadingMixed(0), fhEtaLeadingMixed(0),
+ fhDeltaPhiDeltaEtaCharged(0),
fhPhiCharged(0), fhEtaCharged(0),
fhDeltaPhiCharged(0), fhDeltaEtaCharged(0),
fhDeltaPhiChargedPt(0), fhDeltaPhiUeChargedPt(0),
+ fhUePart(0),
fhXECharged(0), fhXEUeCharged(0),
fhXEPosCharged(0), fhXENegCharged(0),
fhPtHbpXECharged(0), fhPtHbpXEUeCharged(0),
fhZTCharged(0), fhZTUeCharged(0),
fhZTPosCharged(0), fhZTNegCharged(0),
fhPtHbpZTCharged(0), fhPtHbpZTUeCharged(0),
+ fhXEChargedMC(), fhDeltaPhiChargedMC(),
+ fhDeltaPhiDeltaEtaChargedPtA3GeV(0),
+ fhDeltaPhiChargedPtA3GeV(0), fhDeltaEtaChargedPtA3GeV(0),
+ //Pile-Up
+ fhDeltaPhiChargedPileUp(), fhDeltaEtaChargedPileUp(),
+ fhDeltaPhiChargedPtA3GeVPileUp(), fhDeltaEtaChargedPtA3GeVPileUp(),
+ fhXEChargedPileUp(), fhXEUeChargedPileUp(),
+ fhZTChargedPileUp(), fhZTUeChargedPileUp(),
+ fhPtTrigChargedPileUp(),
+ fhDeltaPhiChargedOtherBC(), fhDeltaPhiChargedPtA3GeVOtherBC(),
+ fhXEChargedOtherBC(), fhXEUeChargedOtherBC(),
+ fhZTChargedOtherBC(), fhZTUeChargedOtherBC(),
+ fhPtTrigChargedOtherBC(),
+ fhDeltaPhiChargedBC0(), fhDeltaPhiChargedPtA3GeVBC0(),
+ fhXEChargedBC0(), fhXEUeChargedBC0(),
+ fhZTChargedBC0(), fhZTUeChargedBC0(),
+ fhPtTrigChargedBC0(),
fhDeltaPhiUeLeftCharged(0), fhDeltaPhiUeRightCharged(0),
+ fhDeltaPhiUeLeftUpCharged(0), fhDeltaPhiUeRightUpCharged(0),
+ fhDeltaPhiUeLeftDownCharged(0), fhDeltaPhiUeRightDownCharged(0),
fhXEUeLeftCharged(0), fhXEUeRightCharged(0),
+ fhXEUeLeftUpCharged(0), fhXEUeRightUpCharged(0),
+ fhXEUeLeftDownCharged(0), fhXEUeRightDownCharged(0),
fhPtHbpXEUeLeftCharged(0), fhPtHbpXEUeRightCharged(0),
fhZTUeLeftCharged(0), fhZTUeRightCharged(0),
fhPtHbpZTUeLeftCharged(0), fhPtHbpZTUeRightCharged(0),
fhTrigDeltaPhiCharged(0x0), fhTrigDeltaEtaCharged(0x0),
fhTrigXECorr(0x0), fhTrigXEUeCorr(0x0),
fhTrigZTCorr(0x0), fhTrigZTUeCorr(0x0),
- fhAssocPtBkg(0),
- fhDeltaPhiAssocPtBin(0), fhDeltaPhiAssocPtBinHMPID(0), fhDeltaPhiAssocPtBinHMPIDAcc(0),
+ fhAssocPtBkg(0), fhDeltaPhiDeltaEtaAssocPtBin(0),
+ fhDeltaPhiAssocPtBin(0),
+ fhDeltaPhiAssocPtBinDEta08(0), fhDeltaPhiAssocPtBinDEta0(0),
+ fhDeltaPhiAssocPtBinHMPID(0), fhDeltaPhiAssocPtBinHMPIDAcc(0),
fhDeltaPhiBradAssocPtBin(0), fhDeltaPhiBrad(0),
fhXEAssocPtBin(0), fhZTAssocPtBin(0),
fhDeltaPhiDeltaEtaNeutral(0),
fhDeltaPhiDecayNeutral(0), fhXEDecayNeutral(0), fhZTDecayNeutral(0),
fhDeltaPhiDecayChargedAssocPtBin(0),
fhXEDecayChargedAssocPtBin(0), fhZTDecayChargedAssocPtBin(0),
- fh2phiLeadingParticle(0x0),
+ fh2phiLeadingParticle(0x0), fhMCPtLeading(0),
+ fhMCPhiLeading(0), fhMCEtaLeading(0),
fhMCEtaCharged(0), fhMCPhiCharged(0),
fhMCDeltaEtaCharged(0), fhMCDeltaPhiCharged(0x0),
fhMCDeltaPhiDeltaEtaCharged(0), fhMCDeltaPhiChargedPt(0),
- fhMCPtXECharged(0), fhMCPtHbpXECharged(0),
+ fhMCPtXECharged(0), fhMCPtXEUeCharged(0),
+ fhMCPtHbpXECharged(0), fhMCPtHbpXEUeCharged(0),
+ fhMCUePart(0),
fhMCPtZTCharged(0), fhMCPtHbpZTCharged(0),
fhMCPtTrigPout(0), fhMCPtAssocDeltaPhi(0),
//Mixing
fhNEventsTrigger(0),
- fhNtracksAll(0), fhNtracksTrigger(0),
- fhNtracksINT(0),
+ fhNtracksAll(0), fhNtracksTrigger(0), fhNtracksMB(0),
+ fhNclustersAll(0), fhNclustersTrigger(0), fhNclustersMB(0),
fhMixDeltaPhiCharged(0), fhMixDeltaPhiDeltaEtaCharged(0),
- fhMixDeltaPhiChargedAssocPtBin(),fhMixDeltaPhiDeltaEtaChargedAssocPtBin(0)
+ fhMixXECharged(0), fhMixHbpXECharged(0),
+ fhMixDeltaPhiChargedAssocPtBin(),
+ fhMixDeltaPhiChargedAssocPtBinDEta08(),
+ fhMixDeltaPhiChargedAssocPtBinDEta0(),
+ fhMixDeltaPhiDeltaEtaChargedAssocPtBin(),
+ fhEventBin(0), fhEventMixBin(0)
{
- //Default Ctor
+ //Default Ctor
//Initialize parameters
InitParameters();
+
+ for(Int_t i = 0; i < 7; i++)
+ {
+ fhPtLeadingMC[i] = 0;
+ fhXEChargedMC[i] = 0;
+ fhDeltaPhiChargedMC[i] = 0;
+ }
+
+ for(Int_t i = 0; i < 7; i++)
+ {
+ fhPtLeadingPileUp [i] = 0 ;
+ fhDeltaPhiChargedPileUp [i] = 0 ; fhDeltaEtaChargedPileUp [i] = 0 ;
+ fhXEChargedPileUp [i] = 0 ; fhXEUeChargedPileUp [i] = 0 ;
+ fhZTChargedPileUp [i] = 0 ; fhZTUeChargedPileUp [i] = 0 ;
+ fhPtTrigChargedPileUp [i] = 0 ;
+ fhDeltaPhiChargedPtA3GeVPileUp[i] = 0 ; fhDeltaEtaChargedPtA3GeVPileUp[i] = 0 ;
+ }
+
}
//_________________________________________________________________
-AliAnaParticleHadronCorrelation::~AliAnaParticleHadronCorrelation()
+AliAnaParticleHadronCorrelation::~AliAnaParticleHadronCorrelation()
{
// Remove event containers
- if(fDoOwnMix && fListMixEvents)
- {
- for(Int_t iz=0; iz < GetNZvertBin(); iz++)
- {
- for(Int_t ic=0; ic < GetNCentrBin(); ic++)
+ if(DoOwnMix())
+ {
+ if(fListMixTrackEvents)
+ {
+ for(Int_t iz=0; iz < GetNZvertBin(); iz++)
{
- fListMixEvents[ic*GetNZvertBin()+iz]->Delete() ;
- delete fListMixEvents[ic*GetNZvertBin()+iz] ;
+ for(Int_t ic=0; ic < GetNCentrBin(); ic++)
+ {
+ for(Int_t irp=0; irp<GetNRPBin(); irp++)
+ {
+ Int_t bin = GetEventMixBin(ic, iz, irp);
+ fListMixTrackEvents[bin]->Delete() ;
+ delete fListMixTrackEvents[bin] ;
+ }
+ }
}
}
-
- delete[] fListMixEvents;
+
+ delete[] fListMixTrackEvents;
+
+ if(fListMixCaloEvents)
+ {
+ for(Int_t iz=0; iz < GetNZvertBin(); iz++)
+ {
+ for(Int_t ic=0; ic < GetNCentrBin(); ic++)
+ {
+ for(Int_t irp=0; irp<GetNRPBin(); irp++)
+ {
+ Int_t bin = GetEventMixBin(ic, iz, irp);
+ fListMixCaloEvents[bin]->Delete() ;
+ delete fListMixCaloEvents[bin] ;
+ }
+ }
+ }
+ }
+
+ delete[] fListMixCaloEvents;
}
}
//______________________________________________________________________________________________________________________________________________________
-void AliAnaParticleHadronCorrelation::FillChargedAngularCorrelationHistograms(const Float_t ptAssoc, const Float_t ptTrig, const Int_t assocBin,
- const Float_t phiAssoc, const Float_t phiTrig, Float_t & deltaPhi,
+void AliAnaParticleHadronCorrelation::FillChargedAngularCorrelationHistograms(const Float_t ptAssoc, const Float_t ptTrig, const Int_t bin,
+ const Float_t phiAssoc, const Float_t phiTrig, Float_t & deltaPhi,
const Float_t etaAssoc, const Float_t etaTrig,
- const Bool_t decay, const Float_t hmpidSignal, const Int_t nTracks)
+ const Bool_t decay, const Float_t hmpidSignal, const Int_t outTOF,
+ const Int_t nTracks, const Int_t mcTag)
{
// Fill angular correlation related histograms
if(deltaPhi <= -TMath::PiOver2()) deltaPhi+=TMath::TwoPi();
if(deltaPhi > 3*TMath::PiOver2()) deltaPhi-=TMath::TwoPi();
- fhEtaCharged ->Fill(ptAssoc,etaAssoc);
- fhPhiCharged ->Fill(ptAssoc,phiAssoc);
- fhDeltaEtaCharged->Fill(ptTrig ,deltaEta);
- fhDeltaPhiCharged->Fill(ptTrig ,deltaPhi);
+ fhEtaCharged ->Fill(ptAssoc,etaAssoc);
+ fhPhiCharged ->Fill(ptAssoc,phiAssoc);
+ fhDeltaEtaCharged ->Fill(ptTrig ,deltaEta);
+ fhDeltaPhiCharged ->Fill(ptTrig ,deltaPhi);
+ fhDeltaPhiChargedPt->Fill(ptAssoc, deltaPhi);
+ fhDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
+
+ if(ptAssoc > 3 )
+ {
+ fhDeltaEtaChargedPtA3GeV ->Fill(ptTrig ,deltaEta);
+ fhDeltaPhiChargedPtA3GeV ->Fill(ptTrig ,deltaPhi);
+ fhDeltaPhiDeltaEtaChargedPtA3GeV->Fill(deltaPhi, deltaEta);
+ }
- if(ptAssoc > 2 ) fhDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
+ // Pile up studies
+
+ if(fFillPileUpHistograms)
+ {
+ if (outTOF==1)
+ {
+ fhDeltaPhiChargedOtherBC->Fill(ptTrig ,deltaPhi) ;
+ if(ptAssoc > 3 ) fhDeltaPhiChargedPtA3GeVOtherBC->Fill(ptTrig ,deltaPhi) ;
+ }
+ else if(outTOF==0)
+ {
+ fhDeltaPhiChargedBC0->Fill(ptTrig ,deltaPhi) ;
+ if(ptAssoc > 3 ) fhDeltaPhiChargedPtA3GeVBC0->Fill(ptTrig ,deltaPhi) ;
+ }
+
+ if(GetReader()->IsPileUpFromSPD()) { fhDeltaEtaChargedPileUp[0]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[0]->Fill(ptTrig ,deltaPhi) ; }
+ if(GetReader()->IsPileUpFromEMCal()) { fhDeltaEtaChargedPileUp[1]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[1]->Fill(ptTrig ,deltaPhi) ; }
+ if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhDeltaEtaChargedPileUp[2]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[2]->Fill(ptTrig ,deltaPhi) ; }
+ if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhDeltaEtaChargedPileUp[3]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[3]->Fill(ptTrig ,deltaPhi) ; }
+ if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhDeltaEtaChargedPileUp[4]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[4]->Fill(ptTrig ,deltaPhi) ; }
+ if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhDeltaEtaChargedPileUp[5]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[5]->Fill(ptTrig ,deltaPhi) ; }
+ if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhDeltaEtaChargedPileUp[6]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPileUp[6]->Fill(ptTrig ,deltaPhi) ; }
+
+
+
+ if(ptAssoc > 3 )
+ {
+ if(GetReader()->IsPileUpFromSPD()) { fhDeltaEtaChargedPtA3GeVPileUp[0]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[0]->Fill(ptTrig ,deltaPhi) ; }
+ if(GetReader()->IsPileUpFromEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[1]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[1]->Fill(ptTrig ,deltaPhi) ; }
+ if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[2]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[2]->Fill(ptTrig ,deltaPhi) ; }
+ if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[3]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[3]->Fill(ptTrig ,deltaPhi) ; }
+ if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[4]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[4]->Fill(ptTrig ,deltaPhi) ; }
+ if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhDeltaEtaChargedPtA3GeVPileUp[5]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[5]->Fill(ptTrig ,deltaPhi) ; }
+ if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhDeltaEtaChargedPtA3GeVPileUp[6]->Fill(ptTrig ,deltaEta) ; fhDeltaPhiChargedPtA3GeVPileUp[6]->Fill(ptTrig ,deltaPhi) ; }
+ }
+ }
+
+ if(IsDataMC())
+ {
+ Int_t mcIndex = GetMCTagHistogramIndex(mcTag);
+ fhDeltaPhiChargedMC[mcIndex]->Fill(ptTrig , deltaPhi);
+ }
if(fDecayTrigger && decay) fhDeltaPhiDecayCharged ->Fill(ptTrig , deltaPhi);
}
// Fill histograms in bins of associated particle pT
- if(assocBin>=0)
+ if(bin>=0)
{
- fhDeltaPhiAssocPtBin[assocBin]->Fill(ptTrig, deltaPhi);
- if (fFillBradHisto) fhDeltaPhiBradAssocPtBin [assocBin]->Fill(ptTrig, dphiBrad);
- if(fDecayTrigger && decay) fhDeltaPhiDecayChargedAssocPtBin[assocBin]->Fill(ptTrig, deltaPhi);
+ fhDeltaPhiDeltaEtaAssocPtBin [bin]->Fill(deltaPhi,deltaEta);
+
+ fhDeltaPhiAssocPtBin [bin]->Fill(ptTrig, deltaPhi);
+
+ if(TMath::Abs(deltaEta)> 0.8)
+ fhDeltaPhiAssocPtBinDEta08 [bin]->Fill(ptTrig, deltaPhi);
+
+ if(TMath::Abs(deltaEta)< 0.01)
+ fhDeltaPhiAssocPtBinDEta0 [bin]->Fill(ptTrig, deltaPhi);
+
+ if (fFillBradHisto)
+ fhDeltaPhiBradAssocPtBin [bin]->Fill(ptTrig, dphiBrad);
+
+ if(fDecayTrigger && decay)
+ fhDeltaPhiDecayChargedAssocPtBin[bin]->Fill(ptTrig, deltaPhi);
if(fHMPIDCorrelation)
{
if( hmpidSignal > 0 )
{
//printf("Track pt %f with HMPID signal %f \n",pt,hmpidSignal);
- fhDeltaPhiAssocPtBinHMPID[assocBin]->Fill(ptTrig, deltaPhi);
+ fhDeltaPhiAssocPtBinHMPID[bin]->Fill(ptTrig, deltaPhi);
}
if(phiAssoc > 5*TMath::DegToRad() && phiAssoc < 20*TMath::DegToRad())
{
//printf("Track pt %f in HMPID acceptance phi %f \n ",pt,phi*TMath::RadToDeg() );
- fhDeltaPhiAssocPtBinHMPIDAcc[assocBin]->Fill(ptTrig, deltaPhi);
+ fhDeltaPhiAssocPtBinHMPIDAcc[bin]->Fill(ptTrig, deltaPhi);
}
}
}
fhMCPtHbpZTCharged ->Fill(mcTrigPt,mchbpZT);
fhMCPtTrigPout ->Fill(mcTrigPt, mcpout) ;
}
+
+ //underlying event
+ if ( (mcdeltaPhi > fUeDeltaPhiMinCut) && (mcdeltaPhi < fUeDeltaPhiMaxCut) )
+ {
+ Double_t randomphi = gRandom->Uniform(TMath::Pi()/2,3*TMath::Pi()/2);
+ Double_t mcUexE = -(mcAssocPt/mcTrigPt)*TMath::Cos(randomphi);
+
+ if(mcUexE < 0.) mcUexE = -mcUexE;
+
+ fhMCPtXEUeCharged->Fill(mcTrigPt,mcUexE);
+ if(mcUexE > 0) fhMCPtHbpXEUeCharged->Fill(mcTrigPt,TMath::Log(1/mcUexE));
+
+ fhMCUePart->Fill(mcTrigPt);
+ }
return kTRUE;
}
void AliAnaParticleHadronCorrelation::FillChargedMomentumImbalanceHistograms(const Float_t ptTrig, const Float_t ptAssoc,
const Float_t xE, const Float_t hbpXE,
const Float_t zT, const Float_t hbpZT,
- const Float_t pout, const Float_t deltaPhi,
+ const Float_t pout,
const Int_t nTracks, const Int_t charge,
- const Int_t assocBin, const Bool_t decay )
+ const Int_t bin, const Bool_t decay,
+ const Int_t outTOF, const Int_t mcTag)
{
// Fill mostly momentum imbalance related histograms
- fhDeltaPhiChargedPt ->Fill(ptAssoc, deltaPhi);
fhXECharged ->Fill(ptTrig , xE);
fhPtHbpXECharged ->Fill(ptTrig , hbpXE);
fhZTCharged ->Fill(ptTrig , zT);
fhPtTrigPout ->Fill(ptTrig , pout) ;
fhPtTrigCharged ->Fill(ptTrig , ptAssoc) ;
+ // Pile up studies
+ if(fFillPileUpHistograms)
+ {
+ if (outTOF==1)
+ {
+ fhXEChargedOtherBC ->Fill(ptTrig,xE);
+ fhZTChargedOtherBC ->Fill(ptTrig,zT);
+ fhPtTrigChargedOtherBC->Fill(ptTrig,ptAssoc);
+ }
+ else if(outTOF==0)
+ {
+ fhXEChargedBC0 ->Fill(ptTrig,xE);
+ fhZTChargedBC0 ->Fill(ptTrig,zT);
+ fhPtTrigChargedBC0->Fill(ptTrig,ptAssoc);
+ }
+
+ if(GetReader()->IsPileUpFromSPD()) { fhXEChargedPileUp[0]->Fill(ptTrig,xE); fhZTChargedPileUp[0]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[0]->Fill(ptTrig,ptAssoc); }
+ if(GetReader()->IsPileUpFromEMCal()) { fhXEChargedPileUp[1]->Fill(ptTrig,xE); fhZTChargedPileUp[1]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[1]->Fill(ptTrig,ptAssoc); }
+ if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhXEChargedPileUp[2]->Fill(ptTrig,xE); fhZTChargedPileUp[2]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[2]->Fill(ptTrig,ptAssoc); }
+ if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhXEChargedPileUp[3]->Fill(ptTrig,xE); fhZTChargedPileUp[3]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[3]->Fill(ptTrig,ptAssoc); }
+ if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhXEChargedPileUp[4]->Fill(ptTrig,xE); fhZTChargedPileUp[4]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[4]->Fill(ptTrig,ptAssoc); }
+ if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhXEChargedPileUp[5]->Fill(ptTrig,xE); fhZTChargedPileUp[5]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[5]->Fill(ptTrig,ptAssoc); }
+ if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhXEChargedPileUp[6]->Fill(ptTrig,xE); fhZTChargedPileUp[6]->Fill(ptTrig,zT); fhPtTrigChargedPileUp[6]->Fill(ptTrig,ptAssoc); }
+ }
+
+ if(IsDataMC())
+ {
+ Int_t mcIndex = GetMCTagHistogramIndex(mcTag);
+ fhXEChargedMC [mcIndex]->Fill(ptTrig , xE );
+ }
+
if(fDecayTrigger && decay)
{
fhXEDecayCharged->Fill(ptTrig,xE);
fhZTDecayCharged->Fill(ptTrig,zT);
} // photon decay pi0/eta trigger
- if(assocBin >= 0 )//away side
+ if(bin >= 0 )//away side
{
- fhXEAssocPtBin[assocBin]->Fill(ptTrig, xE) ;
- fhZTAssocPtBin[assocBin]->Fill(ptTrig, zT) ;
+ fhXEAssocPtBin[bin]->Fill(ptTrig, xE) ;
+ fhZTAssocPtBin[bin]->Fill(ptTrig, zT) ;
if(fDecayTrigger && decay)
{
- fhXEDecayChargedAssocPtBin[assocBin]->Fill(ptTrig, xE);
- fhZTDecayChargedAssocPtBin[assocBin]->Fill(ptTrig, zT);
+ fhXEDecayChargedAssocPtBin[bin]->Fill(ptTrig, xE);
+ fhZTDecayChargedAssocPtBin[bin]->Fill(ptTrig, zT);
}
}
//_______________________________________________________________________________________________________________________
void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventHistograms(const Float_t ptTrig, const Float_t ptAssoc,
- const Float_t deltaPhi, const Int_t nTracks)
+ const Float_t deltaPhi, const Int_t nTracks, const Int_t outTOF)
{
// Fill underlying event histograms
fhDeltaPhiUeChargedPt->Fill(ptAssoc,deltaPhi);
- Double_t randomphi = gRandom->Uniform(TMath::Pi()/2,3*TMath::Pi()/2);
+ Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
Double_t uezT = ptAssoc/ptTrig;
fhZTUeCharged->Fill(ptTrig,uezT);
if(uexE > 0) fhPtHbpZTUeCharged->Fill(ptTrig,TMath::Log(1/uezT));
+ // Pile up studies
+
+ if(fFillPileUpHistograms)
+ {
+ if (outTOF==1)
+ {
+ fhXEUeChargedOtherBC->Fill(ptTrig,uexE);
+ fhZTUeChargedOtherBC->Fill(ptTrig,uezT);
+ }
+ else if(outTOF==0)
+ {
+ fhXEUeChargedBC0->Fill(ptTrig,uexE);
+ fhZTUeChargedBC0->Fill(ptTrig,uezT);
+ }
+
+ if(GetReader()->IsPileUpFromSPD()) { fhXEUeChargedPileUp[0]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[0]->Fill(ptTrig,uezT);}
+ if(GetReader()->IsPileUpFromEMCal()) { fhXEUeChargedPileUp[1]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[1]->Fill(ptTrig,uezT);}
+ if(GetReader()->IsPileUpFromSPDOrEMCal()) { fhXEUeChargedPileUp[2]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[2]->Fill(ptTrig,uezT);}
+ if(GetReader()->IsPileUpFromSPDAndEMCal()) { fhXEUeChargedPileUp[3]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[3]->Fill(ptTrig,uezT);}
+ if(GetReader()->IsPileUpFromSPDAndNotEMCal()) { fhXEUeChargedPileUp[4]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[4]->Fill(ptTrig,uezT);}
+ if(GetReader()->IsPileUpFromEMCalAndNotSPD()) { fhXEUeChargedPileUp[5]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[5]->Fill(ptTrig,uezT);}
+ if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) { fhXEUeChargedPileUp[6]->Fill(ptTrig,uexE); fhZTUeChargedPileUp[6]->Fill(ptTrig,uezT);}
+ }
+
if(DoEventSelect())
{
for(Int_t im=0; im<GetMultiBin(); im++)
} //multiplicity events selection
}
-//___________________________________________________________________________________________________________________________
-void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventSidesHistograms(const Float_t ptTrig, const Float_t ptAssoc,
- const Float_t xE, const Float_t hbpXE,
- const Float_t zT, const Float_t hbpZT,
+//_____________________________________________________________________________________________________
+void AliAnaParticleHadronCorrelation::FillChargedUnderlyingEventSidesHistograms(const Float_t ptTrig,
+ const Float_t ptAssoc,
const Float_t deltaPhi)
{
- // Fill underlying event histograms to the left and right of trigger
-
- if((deltaPhi<-fUeDeltaPhiMinCut) && (deltaPhi >-fUeDeltaPhiMaxCut))
+ // Fill underlying event histograms to the left and right of trigger
+ if((deltaPhi<-fUeDeltaPhiMinCut) || (deltaPhi >2*fUeDeltaPhiMaxCut))
{
+ fhDeltaPhiUeLeftCharged->Fill(ptAssoc,deltaPhi);
+ Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
+ Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
+ Double_t uezT = ptAssoc/ptTrig;
+
+ if(uexE < 0.) uexE = -uexE;
+
+ fhXEUeLeftCharged->Fill(ptTrig,uexE);
+ if(uexE > 0) fhPtHbpXEUeLeftCharged->Fill(ptTrig,TMath::Log(1/uexE));
+
+ fhZTUeLeftCharged->Fill(ptTrig,uezT);
+ if(uexE > 0) fhPtHbpZTUeLeftCharged->Fill(ptTrig,TMath::Log(1/uezT));
fhDeltaPhiUeLeftCharged->Fill(ptAssoc, deltaPhi);
- fhXEUeLeftCharged ->Fill(ptTrig , xE);
- fhPtHbpXEUeLeftCharged ->Fill(ptTrig , hbpXE);
- fhZTUeLeftCharged ->Fill(ptTrig , zT);
- fhPtHbpZTUeLeftCharged ->Fill(ptTrig , hbpZT);
}
if((deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut))
{
+ fhDeltaPhiUeRightCharged->Fill(ptAssoc,deltaPhi);
+ Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
+ Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
+ Double_t uezT = ptAssoc/ptTrig;
+
+ if(uexE < 0.) uexE = -uexE;
+
+ fhXEUeRightCharged->Fill(ptTrig,uexE);
+ if(uexE > 0) fhPtHbpXEUeRightCharged->Fill(ptTrig,TMath::Log(1/uexE));
+
+ fhZTUeRightCharged->Fill(ptTrig,uezT);
+ if(uexE > 0) fhPtHbpZTUeRightCharged->Fill(ptTrig,TMath::Log(1/uezT));
fhDeltaPhiUeRightCharged->Fill(ptAssoc, deltaPhi);
- fhXEUeRightCharged ->Fill(ptTrig , xE);
- fhPtHbpXEUeRightCharged ->Fill(ptTrig , hbpXE);
- fhZTUeRightCharged ->Fill(ptTrig , zT);
- fhPtHbpZTUeRightCharged ->Fill(ptTrig , hbpZT);
}
+
+ if((deltaPhi<-fUeDeltaPhiMinCut) && (deltaPhi >-TMath::Pi()/2))
+ {
+ fhDeltaPhiUeLeftDownCharged->Fill(ptAssoc,deltaPhi);
+ Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
+ Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
+
+ if(uexE < 0.) uexE = -uexE;
+
+ fhXEUeLeftDownCharged->Fill(ptTrig,uexE);
+ }
+
+ if((deltaPhi>2*fUeDeltaPhiMaxCut) && (deltaPhi <3*TMath::Pi()/2))
+ {
+ fhDeltaPhiUeLeftUpCharged->Fill(ptAssoc,deltaPhi);
+ Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
+ Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
+
+ if(uexE < 0.) uexE = -uexE;
+
+ fhXEUeLeftUpCharged->Fill(ptTrig,uexE);
+ }
+
+ if((deltaPhi > TMath::Pi()/2) && (deltaPhi < fUeDeltaPhiMaxCut))
+ {
+ fhDeltaPhiUeRightUpCharged->Fill(ptAssoc,deltaPhi);
+ Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
+ Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
+
+ if(uexE < 0.) uexE = -uexE;
+
+ fhXEUeRightUpCharged->Fill(ptTrig,uexE);
+ }
+
+ if((deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < TMath::Pi()/2))
+ {
+ fhDeltaPhiUeRightDownCharged->Fill(ptAssoc,deltaPhi);
+ Double_t randomphi = gRandom->Uniform(fDeltaPhiMinCut,fDeltaPhiMaxCut);
+ Double_t uexE = -(ptAssoc/ptTrig)*TMath::Cos(randomphi);
+
+ if(uexE < 0.) uexE = -uexE;
+
+ fhXEUeRightDownCharged->Fill(ptTrig,uexE);
+ }
}
//______________________________________________________________________________________________________________________________
fhDeltaPhiDecayCharged->Fill(ptDecay1, deltaPhiDecay1);
fhDeltaPhiDecayCharged->Fill(ptDecay2, deltaPhiDecay2);
- if(GetDebug() > 1)printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms( Charged corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2);
+ if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms( Charged corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2);
if( (deltaPhiDecay1 > fDeltaPhiMinCut) && ( deltaPhiDecay1 < fDeltaPhiMaxCut) )
{
fhDeltaPhiDecayCharged->Fill(ptDecay1, deltaPhiDecay1);
fhDeltaPhiDecayCharged->Fill(ptDecay2, deltaPhiDecay2);
- if(GetDebug() > 1)printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms(Neutral corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2);
+ if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::FillDecayPhotonHistograms(Neutral corr) - deltaPhoton1 = %f, deltaPhoton2 = %f \n", deltaPhiDecay1, deltaPhiDecay2);
if( (deltaPhiDecay1 > fDeltaPhiMinCut) && ( deltaPhiDecay1 < fDeltaPhiMaxCut) )
{
//_____________________________________________________________
void AliAnaParticleHadronCorrelation::FillChargedEventMixPool()
{
- // Mixed event init
-
+ // Mixed event pool filling for tracks
+
+ //printf("FillChargedEventMixPool for %s\n",GetInputAODName().Data());
+
+ if(fUseMixStoredInReader && GetReader()->GetLastTracksMixedEvent() == GetEventNumber())
+ {
+ //printf("%s : Pool already filled for this event !!!\n",GetInputAODName().Data());
+ return ; // pool filled previously for another trigger
+ }
+
Int_t nTracks = GetCTSTracks()->GetEntriesFast();
fhNtracksAll->Fill(nTracks);
AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
- if(inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask())
+ if(!inputHandler) return ;
+
+ if( inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask() )
{
fhNtracksTrigger->Fill(nTracks);
}
- if(inputHandler->IsEventSelected( ) & AliVEvent::kAnyINT)
+ // Do mixing only with MB event (or the chosen mask), if not skip
+ if( !(inputHandler->IsEventSelected( ) & GetReader()->GetMixEventTriggerMask()) ) return ;
+
+ fhNtracksMB->Fill(nTracks);
+
+ Int_t eventBin = GetEventMixBin();
+
+ //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing
+ if(eventBin < 0) return;
+
+ TObjArray * mixEventTracks = new TObjArray;
+
+ if(fUseMixStoredInReader)
+ {
+ fListMixTrackEvents[eventBin] = GetReader()->GetListWithMixedEventsForTracks(eventBin);
+ }
+
+ if(!fListMixTrackEvents[eventBin]) fListMixTrackEvents[eventBin] = new TList();
+
+ //printf("%s ***** Pool Event bin : %d - nTracks %d\n",GetInputAODName().Data(),eventBin, GetCTSTracks()->GetEntriesFast());
+
+ TList * pool = fListMixTrackEvents[eventBin];
+
+ TVector3 p3;
+ for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
{
+ AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
- fhNtracksINT->Fill(nTracks);
-
- //Get vertex z bin
- Double_t v[3] = {0,0,0}; //vertex ;
- GetReader()->GetVertex(v);
-
- Int_t curZvertBin = (Int_t)(0.5*GetNZvertBin()*(v[2]+GetZvertexCut())/GetZvertexCut()) ;
-
- // centrality or tracks bin
- Int_t curCentrBin = 0;
- if(fUseTrackMultBins)
- { // Track multiplicity bins
- //curCentrBin = (GetTrackMultiplicity()-1)/5;
- //if(curCentrBin > GetNCentrBin()-1) curCentrBin=GetNCentrBin()-1;
- Int_t trackMult = GetReader()->GetTrackMultiplicity();
- if(trackMult<=5)
- curCentrBin=8;
- else if(trackMult<=10)
- curCentrBin=7;
- else if(trackMult<=15)
- curCentrBin=6;
- else if(trackMult<=20)
- curCentrBin=5;
- else if(trackMult<=30)
- curCentrBin=4;
- else if(trackMult<=40)
- curCentrBin=3;
- else if(trackMult<=55)
- curCentrBin=2;
- else if(trackMult<=70)
- curCentrBin=1 ;
- else curCentrBin=0 ;
- }
- else // Set centrality based on centrality task
- {
- curCentrBin = GetEventCentrality() * GetNCentrBin() / GetReader()->GetCentralityOpt();
- if(GetDebug() > 0 )printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - curCentrBin %d, centrality %d, n bins %d, max bin from centrality %d\n",
- curCentrBin, GetEventCentrality(), GetNCentrBin(), GetReader()->GetCentralityOpt());
- }
-
- TObjArray * mixEventTracks = new TObjArray;
-
- //printf("curCen %d, curZ %d, bin %d\n",curCentrBin,curZvertBin,curCentrBin*GetNZvertBin()+curZvertBin);
+ Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
+ p3.SetXYZ(mom[0],mom[1],mom[2]);
+ Float_t pt = p3.Pt();
- if(!fListMixEvents[curCentrBin*GetNZvertBin()+curZvertBin])
- fListMixEvents[curCentrBin*GetNZvertBin()+curZvertBin]=new TList();
+ //Select only hadrons in pt range
+ if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
- TList * pool = fListMixEvents[curCentrBin*GetNZvertBin()+curZvertBin];
+ AliAODPWG4Particle * mixedTrack = new AliAODPWG4Particle(mom[0],mom[1],mom[2],0);
+ mixedTrack->SetDetector("CTS");
+ mixedTrack->SetChargedBit(track->Charge()>0);
+ mixEventTracks->Add(mixedTrack);
+ }
+
+ //Set the event number where the last event was added, to avoid double pool filling
+ GetReader()->SetLastTracksMixedEvent(GetEventNumber());
+
+ //printf("Add event to pool with %d tracks \n ",mixEventTracks->GetEntries());
+ pool->AddFirst(mixEventTracks);
+ mixEventTracks = 0;
+
+ //printf("Pool size %d, max %d\n",pool->GetSize(), GetNMaxEvMix());
+
+ if(pool->GetSize() > GetNMaxEvMix())
+ {//Remove last event
+ TClonesArray * tmp = static_cast<TClonesArray*>(pool->Last()) ;
+ pool->RemoveLast() ;
+ delete tmp ;
+ }
+}
+
+//_____________________________________________________________
+void AliAnaParticleHadronCorrelation::FillNeutralEventMixPool()
+{
+ // Mixed event pool filling for neutral clusters
+ // Right now only for EMCAL and in isolation case
+
+ //printf("FillNeutralEventMixPool for %s\n",GetInputAODName().Data());
+
+ TObjArray * pl = GetEMCALClusters();
+ //if (GetAODObjArrayName.Contains("PHOS") )pl = GetPHOSClusters();
+ //else pl = GetEMCALClusters();
+
+ Int_t nClusters = pl->GetEntriesFast();
+ fhNclustersAll->Fill(nClusters);
+
+ if(fUseMixStoredInReader && GetReader()->GetLastCaloMixedEvent() == GetEventNumber())
+ {
+ //printf("%s : Pool already filled for this event !!!\n",GetInputAODName().Data());
+ return ; // pool filled previously for another trigger
+ }
+
+ AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
+ AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
+
+ if(!inputHandler) return ;
+
+ if( inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask() )
+ {
+ fhNclustersTrigger->Fill(nClusters);
+ }
+
+ // Do mixing only with MB event (or the chosen mask), if not skip
+ if( !(inputHandler->IsEventSelected( ) & GetReader()->GetMixEventTriggerMask()) ) return ;
+
+ fhNclustersMB->Fill(nClusters);
+
+ Int_t eventBin = GetEventMixBin();
+
+ //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing
+ if(eventBin < 0) return;
+
+ TObjArray * mixEventCalo = new TObjArray;
+
+ if(fUseMixStoredInReader)
+ {
+ fListMixCaloEvents[eventBin] = GetReader()->GetListWithMixedEventsForCalo(eventBin);
+ }
+
+ if(!fListMixCaloEvents[eventBin]) fListMixCaloEvents[eventBin] = new TList();
+
+ TList * poolCalo = fListMixCaloEvents[eventBin];
+
+ TLorentzVector mom;
+
+ for(Int_t ipr = 0;ipr < nClusters ; ipr ++ )
+ {
+ AliVCluster * calo = (AliVCluster *) (pl->At(ipr)) ;
+
+ // remove matched clusters
+ if( IsTrackMatched( calo, GetReader()->GetInputEvent() ) ) continue ;
- TVector3 p3;
- for(Int_t ipr = 0;ipr < GetCTSTracks()->GetEntriesFast() ; ipr ++ )
+ //Cluster momentum calculation
+ if(GetReader()->GetDataType() != AliCaloTrackReader::kMC)
{
- AliVTrack * track = (AliVTrack *) (GetCTSTracks()->At(ipr)) ;
-
- Double_t mom[3] = {track->Px(),track->Py(),track->Pz()};
- p3.SetXYZ(mom[0],mom[1],mom[2]);
- Float_t pt = p3.Pt();
-
- //Select only hadrons in pt range
- if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
-
- AliAODPWG4Particle * mixedTrack = new AliAODPWG4Particle(mom[0],mom[1],mom[2],0);
- mixedTrack->SetDetector("CTS");
- mixedTrack->SetChargedBit(track->Charge()>0);
-
- mixEventTracks->Add(mixedTrack);
+ calo->GetMomentum(mom,GetVertex(0)) ;
+ }//Assume that come from vertex in straight line
+ else
+ {
+ Double_t vertex[]={0,0,0};
+ calo->GetMomentum(mom,vertex) ;
}
- pool->AddFirst(mixEventTracks);
- mixEventTracks = 0;
- if(pool->GetSize() >= GetNMaxEvMix())
- {//Remove last event
- TClonesArray * tmp = static_cast<TClonesArray*>(pool->Last()) ;
- pool->RemoveLast() ;
- delete tmp ;
- }
+ Float_t pt = mom.Pt();
+ //Select only clusters in pt range
+ if(pt < fMinAssocPt || pt > fMaxAssocPt) continue ;
- } // MB event
+ AliAODPWG4Particle * mixedCalo = new AliAODPWG4Particle(mom);
+ mixedCalo->SetDetector("EMCAL");
+ mixEventCalo->Add(mixedCalo);
+ }
+
+ //Set the event number where the last event was added, to avoid double pool filling
+ GetReader()->SetLastCaloMixedEvent(GetEventNumber());
+
+ //printf("Add event to pool with %d clusters \n ",mixEventCalo->GetEntries());
+ poolCalo->AddFirst(mixEventCalo);
+ mixEventCalo = 0;
+ //printf("Pool size %d, max %d\n",poolCalo->GetSize(), GetNMaxEvMix());
+
+ if(poolCalo->GetSize() > GetNMaxEvMix())
+ {//Remove last event
+ TClonesArray * tmp = static_cast<TClonesArray*>(poolCalo->Last()) ;
+ poolCalo->RemoveLast() ;
+ delete tmp ;
+ }
}
//____________________________________________________________
// Create histograms to be saved in output file and
// store them in fOutputContainer
-
TList * outputContainer = new TList() ;
outputContainer->SetName("CorrelationHistos") ;
- Int_t nptbins = GetHistogramRanges()->GetHistoPtBins(); Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins(); Int_t netabins = GetHistogramRanges()->GetHistoEtaBins();
- Float_t ptmax = GetHistogramRanges()->GetHistoPtMax(); Float_t phimax = GetHistogramRanges()->GetHistoPhiMax(); Float_t etamax = GetHistogramRanges()->GetHistoEtaMax();
- Float_t ptmin = GetHistogramRanges()->GetHistoPtMin(); Float_t phimin = GetHistogramRanges()->GetHistoPhiMin(); Float_t etamin = GetHistogramRanges()->GetHistoEtaMin();
+ Int_t nptbins = GetHistogramRanges()->GetHistoPtBins(); Int_t nphibins = GetHistogramRanges()->GetHistoPhiBins(); Int_t netabins = GetHistogramRanges()->GetHistoEtaBins(); Int_t ndeltaphibins = GetHistogramRanges()->GetHistoDeltaPhiBins(); Int_t ndeltaetabins = GetHistogramRanges()->GetHistoDeltaEtaBins();
+ Float_t ptmax = GetHistogramRanges()->GetHistoPtMax(); Float_t phimax = GetHistogramRanges()->GetHistoPhiMax(); Float_t etamax = GetHistogramRanges()->GetHistoEtaMax(); Float_t deltaphimax = GetHistogramRanges()->GetHistoDeltaPhiMax(); Float_t deltaetamax = GetHistogramRanges()->GetHistoDeltaEtaMax();
+ Float_t ptmin = GetHistogramRanges()->GetHistoPtMin(); Float_t phimin = GetHistogramRanges()->GetHistoPhiMin(); Float_t etamin = GetHistogramRanges()->GetHistoEtaMin(); Float_t deltaphimin = GetHistogramRanges()->GetHistoDeltaPhiMin(); Float_t deltaetamin = GetHistogramRanges()->GetHistoDeltaEtaMin();
+
+ Int_t nMixBins = GetNCentrBin()*GetNZvertBin()*GetNRPBin();
- fhPtLeading = new TH1F ("hPtLeading","p_T distribution of leading particles", nptbins,ptmin,ptmax);
+ TString nameMC[] = {"Photon","Pi0","Pi0Decay","EtaDecay","OtherDecay","Electron","Hadron"};
+ TString pileUpName[] = {"SPD","EMCAL","SPDOrEMCAL","SPDAndEMCAL","SPDAndNotEMCAL","EMCALAndNotSPD","NotSPDAndNotEMCAL"} ;
+
+ // For vz dependent histograms, if option ON
+ Int_t nz = 1 ;
+ if(fCorrelVzBin) nz = GetNZvertBin();
+ TString sz = "" ;
+ TString tz = "" ;
+
+ fhPtInput = new TH1F("hPtInput","p_{T} distribution of input trigger particles", nptbins,ptmin,ptmax);
+ fhPtInput->SetXTitle("p_{T}^{trig} (GeV/c)");
+ outputContainer->Add(fhPtInput);
+
+ fhPtFidCut = new TH1F("hPtFidCut","p_{T} distribution of input trigger particles after fiducial cut", nptbins,ptmin,ptmax);
+ fhPtFidCut->SetXTitle("p_{T}^{trig} (GeV/c)");
+ outputContainer->Add(fhPtFidCut);
+
+ fhPtLeading = new TH1F("hPtLeading","p_{T} distribution of leading particles", nptbins,ptmin,ptmax);
fhPtLeading->SetXTitle("p_{T}^{trig} (GeV/c)");
+ outputContainer->Add(fhPtLeading);
+
+ if(IsDataMC())
+ {
+ for(Int_t i=0; i < 7; i++)
+ {
+ fhPtLeadingMC[i] = new TH1F(Form("hPtLeading_MC%s",nameMC[i].Data()),
+ Form("p_{T} distribution of leading particles, trigger origin is %s",nameMC[i].Data()),
+ nptbins,ptmin,ptmax);
+ fhPtLeadingMC[i]->SetXTitle("p_{T}^{trig} (GeV/c)");
+ outputContainer->Add(fhPtLeadingMC[i]);
+ }
+ }
+
+ if(fCorrelVzBin)
+ {
+ fhPtLeadingVzBin = new TH2F("hPtLeadingVzBin","p_{T} distribution of leading particles vs vz bin", nptbins,ptmin,ptmax,GetNZvertBin(),0,GetNZvertBin());
+ fhPtLeadingVzBin->SetXTitle("p_{T}^{trig} (GeV/c)");
+ fhPtLeadingVzBin->SetYTitle("v_{z} bin");
+ outputContainer->Add(fhPtLeadingVzBin);
+ }
+ fhPtLeadingBin = new TH2F ("hPtLeadingBin","p_{T} distribution of leading particles", nptbins,ptmin,ptmax,nMixBins,0,nMixBins);
+ fhPtLeadingBin->SetXTitle("p_{T}^{trig} (GeV/c)");
+ fhPtLeadingBin->SetYTitle("Bin");
+ outputContainer->Add(fhPtLeadingBin);
+
fhPhiLeading = new TH2F ("hPhiLeading","#phi distribution of leading Particles",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
fhPhiLeading->SetYTitle("#phi (rad)");
-
+ outputContainer->Add(fhPhiLeading);
+
fhEtaLeading = new TH2F ("hEtaLeading","#eta distribution of leading",nptbins,ptmin,ptmax, netabins,etamin,etamax);
fhEtaLeading->SetYTitle("#eta ");
-
- outputContainer->Add(fhPtLeading);
- outputContainer->Add(fhPhiLeading);
outputContainer->Add(fhEtaLeading);
+ fhPtLeadingCentrality = new TH2F("hPtLeadingCentrality","Leading particle p_{T} vs centrality",nptbins,ptmin,ptmax,100,0.,100) ;
+ fhPtLeadingCentrality->SetXTitle("p_{T}^{trig} (GeV/c)");
+ fhPtLeadingCentrality->SetYTitle("Centrality (%)");
+ outputContainer->Add(fhPtLeadingCentrality) ;
+
+ fhPtLeadingEventPlane = new TH2F("hPtLeadingEventPlane","Leading particle p_{T} vs event plane angle",nptbins,ptmin,ptmax, 100,0.,TMath::Pi()) ;
+ fhPtLeadingEventPlane->SetXTitle("p_{T}^{trig} (GeV/c)");
+ fhPtLeadingEventPlane->SetXTitle("EP angle (rad)");
+ outputContainer->Add(fhPtLeadingEventPlane) ;
+
+ fhLeadingEventPlaneCentrality = new TH2F("hLeadingEventPlane","Leading particle centrality vs event plane angle",100,0.,100,100,0.,TMath::Pi()) ;
+ fhLeadingEventPlaneCentrality->SetXTitle("Centrality (%)");
+ fhLeadingEventPlaneCentrality->SetYTitle("EP angle (rad)");
+ outputContainer->Add(fhLeadingEventPlaneCentrality) ;
+
//Correlation with charged hadrons
if(GetReader()->IsCTSSwitchedOn())
{
fhDeltaPhiDeltaEtaCharged = new TH2F
- ("hDeltaPhiDeltaEtaCharged","#phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
- 140,-2.,5.,200,-2,2);
- fhDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi");
+ ("hDeltaPhiDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs #phi_{trigger} - #phi_{h^{#pm}}",
+ ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins,deltaetamin,deltaetamax);
+ fhDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi (rad)");
fhDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
+ fhDeltaPhiDeltaEtaChargedPtA3GeV = new TH2F
+ ("hDeltaPhiDeltaEtaChargedPtA3GeV","#eta_{trigger} - #eta_{h^{#pm}} vs #phi_{trigger} - #phi_{h^{#pm}, p_{TA}>3 GeV/c}",
+ ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins,deltaetamin,deltaetamax);
+ fhDeltaPhiDeltaEtaChargedPtA3GeV->SetXTitle("#Delta #phi (rad)");
+ fhDeltaPhiDeltaEtaChargedPtA3GeV->SetYTitle("#Delta #eta");
+
fhPhiCharged = new TH2F
("hPhiCharged","#phi_{h^{#pm}} vs p_{T #pm}",
nptbins,ptmin,ptmax,nphibins,phimin,phimax);
fhDeltaPhiCharged = new TH2F
("hDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhDeltaPhiCharged->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiCharged->SetYTitle("#Delta #phi (rad)");
fhDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)");
+ fhDeltaPhiChargedPtA3GeV = new TH2F
+ ("hDeltaPhiChargedPtA3GeV","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}, p_{TA}>3 GeV/c",
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiChargedPtA3GeV->SetYTitle("#Delta #phi (rad)");
+ fhDeltaPhiChargedPtA3GeV->SetXTitle("p_{T trigger} (GeV/c)");
+
+
fhDeltaPhiChargedPt = new TH2F
("hDeltaPhiChargedPt","#phi_{trigger} - #phi_{#h^{#pm}} vs p_{T h^{#pm}}",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhDeltaPhiChargedPt->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiChargedPt->SetYTitle("#Delta #phi (rad)");
fhDeltaPhiChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)");
fhDeltaPhiUeChargedPt = new TH2F
("hDeltaPhiUeChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}}",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhDeltaPhiUeChargedPt->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiUeChargedPt->SetYTitle("#Delta #phi (rad)");
fhDeltaPhiUeChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)");
+ fhUePart = new TH1F("hUePart","UE particles distribution vs pt trig",
+ nptbins,ptmin,ptmax);
+ fhUePart->SetYTitle("dNch");
+ fhUePart->SetXTitle("p_{T trigger} (GeV/c)");
+
+
fhDeltaEtaCharged = new TH2F
("hDeltaEtaCharged","#eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger}",
- nptbins,ptmin,ptmax,200,-2,2);
+ nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
fhDeltaEtaCharged->SetYTitle("#Delta #eta");
fhDeltaEtaCharged->SetXTitle("p_{T trigger} (GeV/c)");
+ fhDeltaEtaChargedPtA3GeV = new TH2F
+ ("hDeltaEtaChargedPtA3GeV","#eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger}, p_{TA}>3 GeV/c",
+ nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
+ fhDeltaEtaChargedPtA3GeV->SetYTitle("#Delta #eta");
+ fhDeltaEtaChargedPtA3GeV->SetXTitle("p_{T trigger} (GeV/c)");
+
fhXECharged =
new TH2F("hXECharged","x_{E} for charged tracks",
nptbins,ptmin,ptmax,200,0.,2.);
fhXECharged->SetYTitle("x_{E}");
- fhXECharged->SetXTitle("p_{T trigger}");
+ fhXECharged->SetXTitle("p_{T trigger} (GeV/c)");
fhXEUeCharged =
new TH2F("hXEUeCharged","x_{E} for Underlying Event",
nptbins,ptmin,ptmax,200,0.,2.);
fhXEUeCharged->SetYTitle("x_{E}");
- fhXEUeCharged->SetXTitle("p_{T trigger}");
+ fhXEUeCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhXEPosCharged =
new TH2F("hXEPositiveCharged","x_{E} for positive charged tracks",
nptbins,ptmin,ptmax,200,0.,2.);
fhXEPosCharged->SetYTitle("x_{E}");
- fhXEPosCharged->SetXTitle("p_{T trigger}");
+ fhXEPosCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhXENegCharged =
new TH2F("hXENegativeCharged","x_{E} for negative charged tracks",
nptbins,ptmin,ptmax,200,0.,2.);
fhXENegCharged->SetYTitle("x_{E}");
- fhXENegCharged->SetXTitle("p_{T trigger}");
+ fhXENegCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhPtHbpXECharged =
new TH2F("hHbpXECharged","#xi = ln(1/x_{E}) with charged hadrons",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpXECharged->SetYTitle("ln(1/x_{E})");
- fhPtHbpXECharged->SetXTitle("p_{T trigger}");
+ fhPtHbpXECharged->SetXTitle("p_{T trigger} (GeV/c)");
fhPtHbpXEUeCharged =
new TH2F("hHbpXEUeCharged","#xi = ln(1/x_{E}) with charged hadrons,Underlying Event",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpXEUeCharged->SetYTitle("ln(1/x_{E})");
- fhPtHbpXEUeCharged->SetXTitle("p_{T trigger}");
+ fhPtHbpXEUeCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhZTCharged =
new TH2F("hZTCharged","z_{T} for charged tracks",
new TH2F("hZTUeCharged","z_{T} for Underlying Event",
nptbins,ptmin,ptmax,200,0.,2.);
fhZTUeCharged->SetYTitle("z_{T}");
- fhZTUeCharged->SetXTitle("p_{T trigger}");
+ fhZTUeCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhZTPosCharged =
new TH2F("hZTPositiveCharged","z_{T} for positive charged tracks",
nptbins,ptmin,ptmax,200,0.,2.);
fhZTPosCharged->SetYTitle("z_{T}");
- fhZTPosCharged->SetXTitle("p_{T trigger}");
+ fhZTPosCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhZTNegCharged =
new TH2F("hZTNegativeCharged","z_{T} for negative charged tracks",
nptbins,ptmin,ptmax,200,0.,2.);
fhZTNegCharged->SetYTitle("z_{T}");
- fhZTNegCharged->SetXTitle("p_{T trigger}");
+ fhZTNegCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhPtHbpZTCharged =
new TH2F("hHbpZTCharged","#xi = ln(1/z_{T}) with charged hadrons",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpZTCharged->SetYTitle("ln(1/z_{T})");
- fhPtHbpZTCharged->SetXTitle("p_{T trigger}");
+ fhPtHbpZTCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhPtHbpZTUeCharged =
new TH2F("hHbpZTUeCharged","#xi = ln(1/z_{T}) with charged hadrons,Underlying Event",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpZTUeCharged->SetYTitle("ln(1/x_{E})");
- fhPtHbpZTUeCharged->SetXTitle("p_{T trigger}");
+ fhPtHbpZTUeCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhPtTrigPout =
new TH2F("hPtTrigPout","Pout with triggers",
fhPtTrigPout->SetXTitle("p_{T trigger} (GeV/c)");
fhPtTrigCharged =
- new TH2F("hPtTrigCharged","trgger and charged tracks pt distribution",
+ new TH2F("hPtTrigCharged","trigger and charged tracks pt distribution",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
fhPtTrigCharged->SetYTitle("p_{T h^{#pm}} (GeV/c)");
fhPtTrigCharged->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhDeltaPhiDeltaEtaCharged);
+ outputContainer->Add(fhDeltaPhiDeltaEtaChargedPtA3GeV);
outputContainer->Add(fhPhiCharged) ;
outputContainer->Add(fhEtaCharged) ;
outputContainer->Add(fhDeltaPhiCharged) ;
+ outputContainer->Add(fhDeltaPhiChargedPtA3GeV) ;
outputContainer->Add(fhDeltaEtaCharged) ;
+ outputContainer->Add(fhDeltaEtaChargedPtA3GeV) ;
outputContainer->Add(fhDeltaPhiChargedPt) ;
outputContainer->Add(fhDeltaPhiUeChargedPt) ;
-
+ outputContainer->Add(fhUePart);
+
outputContainer->Add(fhXECharged) ;
+
+ if(IsDataMC())
+ {
+ for(Int_t i=0; i < 7; i++)
+ {
+
+ fhDeltaPhiChargedMC[i] = new TH2F(Form("hDeltaPhiCharged_MC%s",nameMC[i].Data()),
+ Form("#Delta #phi for charged tracks, trigger origin is %s",nameMC[i].Data()),
+ nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiChargedMC[i]->SetYTitle("x_{E}");
+ fhDeltaPhiChargedMC[i]->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhDeltaPhiChargedMC[i]) ;
+
+ fhXEChargedMC[i] = new TH2F(Form("hXECharged_MC%s",nameMC[i].Data()),
+ Form("x_{E} for charged tracks, trigger origin is %s",nameMC[i].Data()),
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhXEChargedMC[i]->SetYTitle("x_{E}");
+ fhXEChargedMC[i]->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhXEChargedMC[i]) ;
+ }
+ }
+
outputContainer->Add(fhXEPosCharged) ;
outputContainer->Add(fhXENegCharged) ;
outputContainer->Add(fhXEUeCharged) ;
outputContainer->Add(fhPtHbpXECharged) ;
outputContainer->Add(fhPtHbpXEUeCharged) ;
-
+
outputContainer->Add(fhZTCharged) ;
outputContainer->Add(fhZTPosCharged) ;
outputContainer->Add(fhZTNegCharged) ;
outputContainer->Add(fhPtTrigPout) ;
outputContainer->Add(fhPtTrigCharged) ;
+ if(fFillPileUpHistograms)
+ {
+ fhDeltaPhiChargedOtherBC = new TH2F
+ ("hDeltaPhiChargedOtherBC","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}, track BC!=0",
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiChargedOtherBC->SetYTitle("#Delta #phi (rad)");
+ fhDeltaPhiChargedOtherBC->SetXTitle("p_{T trigger} (GeV/c)");
+
+ fhDeltaPhiChargedPtA3GeVOtherBC = new TH2F
+ ("hDeltaPhiChargedPtA3GeVOtherBC","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}, p_{TA}>3 GeV/c, track BC!=0",
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiChargedPtA3GeVOtherBC->SetYTitle("#Delta #phi (rad)");
+ fhDeltaPhiChargedPtA3GeVOtherBC->SetXTitle("p_{T trigger} (GeV/c)");
+
+ fhPtTrigChargedOtherBC =
+ new TH2F("hPtTrigChargedOtherBC","trigger and charged tracks pt distribution, track BC!=0",
+ nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
+ fhPtTrigChargedOtherBC->SetYTitle("p_{T h^{#pm}} (GeV/c)");
+ fhPtTrigChargedOtherBC->SetXTitle("p_{T trigger} (GeV/c)");
+
+ fhXEChargedOtherBC =
+ new TH2F("hXEChargedOtherBC","x_{E} for charged tracks, track BC!=0",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhXEChargedOtherBC->SetYTitle("x_{E}");
+ fhXEChargedOtherBC->SetXTitle("p_{T trigger} (GeV/c)");
+
+ fhXEUeChargedOtherBC =
+ new TH2F("hXEUeChargedOtherBC","x_{E} for Underlying Event, track BC!=0",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhXEUeChargedOtherBC->SetYTitle("x_{E}");
+ fhXEUeChargedOtherBC->SetXTitle("p_{T trigger} (GeV/c)");
+
+ fhZTChargedOtherBC =
+ new TH2F("hZTChargedOtherBC","z_{T} for charged tracks, track BC!=0",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhZTChargedOtherBC->SetYTitle("z_{T}");
+ fhZTChargedOtherBC->SetXTitle("p_{T trigger}");
+
+ fhZTUeChargedOtherBC =
+ new TH2F("hZTUeChargedOtherBC","z_{T} for Underlying Event, track BC!=0",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhZTUeChargedOtherBC->SetYTitle("z_{T}");
+ fhZTUeChargedOtherBC->SetXTitle("p_{T trigger} (GeV/c)");
+
+ outputContainer->Add(fhDeltaPhiChargedOtherBC) ;
+ outputContainer->Add(fhDeltaPhiChargedPtA3GeVOtherBC) ;
+ outputContainer->Add(fhXEChargedOtherBC) ;
+ outputContainer->Add(fhXEUeChargedOtherBC) ;
+ outputContainer->Add(fhZTChargedOtherBC) ;
+ outputContainer->Add(fhZTUeChargedOtherBC) ;
+ outputContainer->Add(fhPtTrigChargedOtherBC) ;
+
+ fhDeltaPhiChargedBC0 = new TH2F
+ ("hDeltaPhiChargedBC0","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}, track BC==0",
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiChargedBC0->SetYTitle("#Delta #phi (rad)");
+ fhDeltaPhiChargedBC0->SetXTitle("p_{T trigger} (GeV/c)");
+
+ fhDeltaPhiChargedPtA3GeVBC0 = new TH2F
+ ("hDeltaPhiChargedPtA3GeVBC0","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}, p_{TA}>3 GeV/c, track BC==0",
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiChargedPtA3GeVBC0->SetYTitle("#Delta #phi (rad)");
+ fhDeltaPhiChargedPtA3GeVBC0->SetXTitle("p_{T trigger} (GeV/c)");
+
+ fhPtTrigChargedBC0 =
+ new TH2F("hPtTrigChargedBC0","trigger and charged tracks pt distribution, track BC==0",
+ nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
+ fhPtTrigChargedBC0->SetYTitle("p_{T h^{#pm}} (GeV/c)");
+ fhPtTrigChargedBC0->SetXTitle("p_{T trigger} (GeV/c)");
+
+ fhXEChargedBC0 =
+ new TH2F("hXEChargedBC0","x_{E} for charged tracks, track BC==0",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhXEChargedBC0->SetYTitle("x_{E}");
+ fhXEChargedBC0->SetXTitle("p_{T trigger} (GeV/c)");
+
+ fhXEUeChargedBC0 =
+ new TH2F("hXEUeChargedBC0","x_{E} for Underlying Event, track BC==0",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhXEUeChargedBC0->SetYTitle("x_{E}");
+ fhXEUeChargedBC0->SetXTitle("p_{T trigger} (GeV/c)");
+
+ fhZTChargedBC0 =
+ new TH2F("hZTChargedBC0","z_{T} for charged tracks, track BC==0",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhZTChargedBC0->SetYTitle("z_{T}");
+ fhZTChargedBC0->SetXTitle("p_{T trigger}");
+
+ fhZTUeChargedBC0 =
+ new TH2F("hZTUeChargedBC0","z_{T} for Underlying Event, track BC==0",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhZTUeChargedBC0->SetYTitle("z_{T}");
+ fhZTUeChargedBC0->SetXTitle("p_{T trigger} (GeV/c)");
+
+ outputContainer->Add(fhDeltaPhiChargedBC0) ;
+ outputContainer->Add(fhDeltaPhiChargedPtA3GeVBC0) ;
+ outputContainer->Add(fhXEChargedBC0) ;
+ outputContainer->Add(fhXEUeChargedBC0) ;
+ outputContainer->Add(fhZTChargedBC0) ;
+ outputContainer->Add(fhZTUeChargedBC0) ;
+ outputContainer->Add(fhPtTrigChargedBC0) ;
+
+
+ for(Int_t i = 0 ; i < 7 ; i++)
+ {
+ fhPtLeadingPileUp[i] = new TH1F(Form("hPtLeadingPileUp%s",pileUpName[i].Data()),
+ Form("p_{T} distribution of leading particles, %s Pile-Up event",pileUpName[i].Data()), nptbins,ptmin,ptmax);
+ fhPtLeadingPileUp[i]->SetXTitle("p_{T}^{trig} (GeV/c)");
+ outputContainer->Add(fhPtLeadingPileUp[i]);
+
+ fhDeltaPhiChargedPileUp[i] = new TH2F(Form("hDeltaPhiChargedPileUp%s",pileUpName[i].Data()),
+ Form("#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}, %s Pile-Up event",pileUpName[i].Data()),
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiChargedPileUp[i]->SetYTitle("#Delta #phi (rad)");
+ fhDeltaPhiChargedPileUp[i]->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhDeltaPhiChargedPileUp[i]) ;
+
+ fhDeltaPhiChargedPtA3GeVPileUp[i] = new TH2F(Form("hDeltaPhiChargedPtA3GeVPileUp%s",pileUpName[i].Data()),
+ Form("#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}, p_{TA}>3 GeV/c, %s Pile-Up event",pileUpName[i].Data()),
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiChargedPtA3GeVPileUp[i]->SetYTitle("#Delta #phi (rad)");
+ fhDeltaPhiChargedPtA3GeVPileUp[i]->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhDeltaPhiChargedPtA3GeVPileUp[i]) ;
+
+ fhDeltaEtaChargedPileUp[i] = new TH2F(Form("hDeltaEtaChargedPileUp%s",pileUpName[i].Data()),
+ Form("#eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger}, %s Pile-Up event",pileUpName[i].Data()),
+ nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
+ fhDeltaEtaChargedPileUp[i]->SetYTitle("#Delta #eta");
+ fhDeltaEtaChargedPileUp[i]->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhDeltaEtaChargedPileUp[i]) ;
+
+ fhDeltaEtaChargedPtA3GeVPileUp[i] = new TH2F(Form("hDeltaEtaChargedPtA3GeVPileUp%s",pileUpName[i].Data()),
+ Form("#eta_{trigger} - #eta_{h^{#pm}} vs p_{T trigger}, p_{TA}>3 GeV/c, %s Pile-Up event",pileUpName[i].Data()),
+ nptbins,ptmin,ptmax,ndeltaetabins,deltaetamin,deltaetamax);
+ fhDeltaEtaChargedPtA3GeVPileUp[i]->SetYTitle("#Delta #eta");
+ fhDeltaEtaChargedPtA3GeVPileUp[i]->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhDeltaEtaChargedPtA3GeVPileUp[i]) ;
+
+ fhXEChargedPileUp[i] = new TH2F(Form("hXEChargedPileUp%s",pileUpName[i].Data()),
+ Form("x_{E} for charged tracks, %s Pile-Up event",pileUpName[i].Data()),
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhXEChargedPileUp[i]->SetYTitle("x_{E}");
+ fhXEChargedPileUp[i]->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhXEChargedPileUp[i]) ;
+
+ fhXEUeChargedPileUp[i] = new TH2F(Form("hXEUeChargedPileUp%s",pileUpName[i].Data()),
+ Form("x_{E} for Underlying Event, %s Pile-Up event",pileUpName[i].Data()),
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhXEUeChargedPileUp[i]->SetYTitle("x_{E}");
+ fhXEUeChargedPileUp[i]->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhXEUeChargedPileUp[i]) ;
+
+ fhZTChargedPileUp[i] = new TH2F(Form("hZTChargedPileUp%s",pileUpName[i].Data()),
+ Form("z_{T} for charged tracks, %s Pile-Up event",pileUpName[i].Data()),
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhZTChargedPileUp[i]->SetYTitle("z_{T}");
+ fhZTChargedPileUp[i]->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhZTChargedPileUp[i]) ;
+
+ fhZTUeChargedPileUp[i] = new TH2F(Form("hZTUeChargedPileUp%s",pileUpName[i].Data()),
+ Form("z_{T} for Underlying Event, %s Pile-Up event",pileUpName[i].Data()),
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhZTUeChargedPileUp[i]->SetYTitle("z_{T}");
+ fhZTUeChargedPileUp[i]->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhZTUeChargedPileUp[i]) ;
+
+ fhPtTrigChargedPileUp[i] = new TH2F(Form("hPtTrigChargedPileUp%s",pileUpName[i].Data()),
+ Form("trigger and charged tracks pt distribution, %s Pile-Up event",pileUpName[i].Data()),
+ nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
+ fhPtTrigChargedPileUp[i]->SetYTitle("p_{T h^{#pm}} (GeV/c)");
+ fhPtTrigChargedPileUp[i]->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhPtTrigChargedPileUp[i]) ;
+
+ }
+ }
+
if(DoEventSelect())
{
Int_t nMultiBins = GetMultiBin();
for(Int_t im=0; im<nMultiBins; im++)
{
fhTrigDeltaPhiCharged[im] = new TH2F
- (Form("hTrigDeltaPhiCharged_%d",im),Form("hTrigDeltaPhiCharged_%d",im), nptbins,ptmin,ptmax, 140,-2.,5.);
+ (Form("hTrigDeltaPhiCharged_%d",im),Form("hTrigDeltaPhiCharged_%d",im), nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
fhTrigDeltaPhiCharged[im]->SetXTitle("p_{T trigger} (GeV/c)");
- fhTrigDeltaPhiCharged[im]->SetYTitle("#Delta #phi");
+ fhTrigDeltaPhiCharged[im]->SetYTitle("#Delta #phi (rad)");
fhTrigDeltaEtaCharged[im] = new TH2F
- (Form("hTrigDeltaEtaCharged_%d",im),Form("hTrigDeltaEtaCharged_%d",im), nptbins,ptmin,ptmax, 200,-2,2);
+ (Form("hTrigDeltaEtaCharged_%d",im),Form("hTrigDeltaEtaCharged_%d",im), nptbins,ptmin,ptmax, ndeltaetabins ,deltaetamin,deltaetamax);
fhTrigDeltaEtaCharged[im]->SetXTitle("p_{T trigger} (GeV/c)");
fhTrigDeltaEtaCharged[im]->SetYTitle("#Delta #eta");
fhTrigXECorr[im] = new TH2F
(Form("hTrigXEPtCorr_%d",im),Form("hTrigXEPtCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
fhTrigXECorr[im]->SetYTitle("x_{E trigger h^{#pm}}");
- fhTrigXECorr[im]->SetXTitle("p_{T trigger}");
+ fhTrigXECorr[im]->SetXTitle("p_{T trigger} (GeV/c)");
fhTrigXEUeCorr[im] = new TH2F
(Form("hTrigXEPtUeCorr_%d",im),Form("hTrigXEPtUeCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
fhTrigXEUeCorr[im]->SetYTitle("x_{E trigger h^{#pm}}");
- fhTrigXEUeCorr[im]->SetXTitle("p_{T trigger}");
+ fhTrigXEUeCorr[im]->SetXTitle("p_{T trigger}(GeV/c)");
fhTrigZTCorr[im] = new TH2F
(Form("hTrigZTPtCorr_%d",im),Form("hTrigZTPtCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
fhTrigZTCorr[im]->SetYTitle("z_{trigger h^{#pm}}");
- fhTrigZTCorr[im]->SetXTitle("p_{T trigger}");
+ fhTrigZTCorr[im]->SetXTitle("p_{T trigger} (GeV/c)");
fhTrigZTUeCorr[im] = new TH2F
(Form("hTrigZTPtUeCorr_%d",im),Form("hTrigZTPtUeCorr_%d",im), nptbins,ptmin,ptmax,200,0.,2.);
fhTrigZTUeCorr[im]->SetYTitle("z_{trigger h^{#pm}}");
- fhTrigZTUeCorr[im]->SetXTitle("p_{T trigger}");
+ fhTrigZTUeCorr[im]->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhTrigDeltaPhiCharged[im]) ;
outputContainer->Add(fhTrigDeltaEtaCharged[im]) ;
{
fhAssocPtBkg = new TH2F("hAssocPtBkg", " Trigger p_{T} vs associated hadron p_{T} from background",
nptbins, ptmin, ptmax,nptbins,ptmin,ptmax);
- fhAssocPtBkg->SetXTitle("p_{T trigger}");
- fhAssocPtBkg->SetYTitle("p_{T associated}");
+ fhAssocPtBkg->SetXTitle("p_{T trigger} (GeV/c)");
+ fhAssocPtBkg->SetYTitle("p_{T associated} (GeV/c)");
outputContainer->Add(fhAssocPtBkg) ;
fhDeltaPhiBrad = new TH2F("hDeltaPhiBrad","atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs p_{T trigger} ",
nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
- fhDeltaPhiBrad->SetXTitle("p_{T trigger}");
+ fhDeltaPhiBrad->SetXTitle("p_{T trigger} (GeV/c)");
fhDeltaPhiBrad->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
outputContainer->Add(fhDeltaPhiBrad) ;
}
-
- fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins] ;
- fhXEAssocPtBin = new TH2F*[fNAssocPtBins] ;
- fhZTAssocPtBin = new TH2F*[fNAssocPtBins] ;
+
+ fhDeltaPhiDeltaEtaAssocPtBin = new TH2F*[fNAssocPtBins*nz];
+ fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins*nz];
+ fhDeltaPhiAssocPtBinDEta08 = new TH2F*[fNAssocPtBins*nz];
+ fhDeltaPhiAssocPtBinDEta0 = new TH2F*[fNAssocPtBins*nz];
+ fhXEAssocPtBin = new TH2F*[fNAssocPtBins*nz];
+ fhZTAssocPtBin = new TH2F*[fNAssocPtBins*nz];
if(fFillBradHisto)
- fhDeltaPhiBradAssocPtBin = new TH2F*[fNAssocPtBins] ;
+ fhDeltaPhiBradAssocPtBin = new TH2F*[fNAssocPtBins*nz];
if(fPi0Trigger || fDecayTrigger)
{
- fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins] ;
- fhXEAssocPtBin = new TH2F*[fNAssocPtBins] ;
- fhZTAssocPtBin = new TH2F*[fNAssocPtBins] ;
- fhXEDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
- fhZTDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
- fhDeltaPhiDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
+ fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins*nz];
+ fhDeltaPhiAssocPtBinDEta08 = new TH2F*[fNAssocPtBins*nz];
+ fhXEAssocPtBin = new TH2F*[fNAssocPtBins*nz];
+ fhZTAssocPtBin = new TH2F*[fNAssocPtBins*nz];
+ fhXEDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
+ fhZTDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
+ fhDeltaPhiDecayChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
}
-
+
if(fHMPIDCorrelation)
{
- fhDeltaPhiAssocPtBinHMPID = new TH2F*[fNAssocPtBins] ;
- fhDeltaPhiAssocPtBinHMPIDAcc= new TH2F*[fNAssocPtBins] ;
+ fhDeltaPhiAssocPtBinHMPID = new TH2F*[fNAssocPtBins*nz];
+ fhDeltaPhiAssocPtBinHMPIDAcc= new TH2F*[fNAssocPtBins*nz];
}
for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
{
- fhDeltaPhiAssocPtBin[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- nptbins, ptmin, ptmax,140,-2.,5.);
- fhDeltaPhiAssocPtBin[i]->SetXTitle("p_{T trigger}");
- fhDeltaPhiAssocPtBin[i]->SetYTitle("#Delta #phi");
-
- fhXEAssocPtBin[i] = new TH2F(Form("hXEAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- Form("x_{E} vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- nptbins, ptmin, ptmax,200, 0.0, 2.0);
- fhXEAssocPtBin[i]->SetXTitle("p_{T trigger}");
- fhXEAssocPtBin[i]->SetYTitle("x_{E}");
-
- fhZTAssocPtBin[i] = new TH2F(Form("hZTAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- Form("z_{T} vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- nptbins, ptmin, ptmax,200, 0.0, 2.0);
- fhZTAssocPtBin[i]->SetXTitle("p_{T trigger}");
- fhZTAssocPtBin[i]->SetYTitle("z_{T}");
-
- outputContainer->Add(fhDeltaPhiAssocPtBin[i]) ;
- outputContainer->Add(fhXEAssocPtBin[i]);
- outputContainer->Add(fhZTAssocPtBin[i]);
-
- if(fPi0Trigger || fDecayTrigger)
+ for(Int_t z = 0 ; z < nz ; z++)
{
- fhDeltaPhiDecayChargedAssocPtBin[i] = new TH2F(Form("hDeltaPhiPtDecayChargedAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- Form("#Delta #phi vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- nptbins, ptmin, ptmax,140,-2.,5.);
- fhDeltaPhiDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
- fhDeltaPhiDecayChargedAssocPtBin[i]->SetYTitle("#Delta #phi");
+ Int_t bin = i*nz+z;
+
+ if(fCorrelVzBin)
+ {
+ sz = "_vz%d"+z;
+ tz = ", v_{z} bin "+z;
+ }
+
+ //printf("iAssoc %d, Vz %d, bin %d - sz %s, tz %s \n",i,z,bin,sz.Data(),tz.Data());
+
+ fhDeltaPhiDeltaEtaAssocPtBin[bin] = new TH2F(Form("hDeltaPhiDeltaEtaPtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("#Delta #phi vs #Delta #eta for associated p_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins,deltaetamin,deltaetamax);
+ fhDeltaPhiDeltaEtaAssocPtBin[bin]->SetXTitle("#Delta #phi (rad)");
+ fhDeltaPhiDeltaEtaAssocPtBin[bin]->SetYTitle("#Delta #eta");
+
+ fhDeltaPhiAssocPtBin[bin] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiAssocPtBin[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhDeltaPhiAssocPtBin[bin]->SetYTitle("#Delta #phi (rad)");
+
+ fhDeltaPhiAssocPtBinDEta08[bin] = new TH2F(Form("hDeltaPhiDeltaEta0.8PtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]%s, for #Delta #eta > 0.8", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiAssocPtBinDEta08[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhDeltaPhiAssocPtBinDEta08[bin]->SetYTitle("#Delta #phi (rad)");
+
+ fhDeltaPhiAssocPtBinDEta0[bin] = new TH2F(Form("hDeltaPhiDeltaEta0PtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]%s, for #Delta #eta = 0.", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiAssocPtBinDEta0[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhDeltaPhiAssocPtBinDEta0[bin]->SetYTitle("#Delta #phi (rad)");
- fhXEDecayChargedAssocPtBin[i] = new TH2F(Form("hXEDecayChargedAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- Form("x_{E} vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
+ fhXEAssocPtBin[bin] = new TH2F(Form("hXEAssocPtBin%1.f_%1.f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("x_{E} vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
nptbins, ptmin, ptmax,200, 0.0, 2.0);
- fhXEDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
- fhXEDecayChargedAssocPtBin[i]->SetYTitle("x_{E}");
+ fhXEAssocPtBin[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhXEAssocPtBin[bin]->SetYTitle("x_{E}");
- fhZTDecayChargedAssocPtBin[i] = new TH2F(Form("hZTDecayChargedAssocPtBin%1.f_%1.f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- Form("z_{T} vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
+ fhZTAssocPtBin[bin] = new TH2F(Form("hZTAssocPtBin%1.f_%1.f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("z_{T} vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
nptbins, ptmin, ptmax,200, 0.0, 2.0);
- fhZTDecayChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
- fhZTDecayChargedAssocPtBin[i]->SetYTitle("z_{T}");
+ fhZTAssocPtBin[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhZTAssocPtBin[bin]->SetYTitle("z_{T}");
- outputContainer->Add(fhDeltaPhiDecayChargedAssocPtBin[i]) ;
- outputContainer->Add(fhXEDecayChargedAssocPtBin[i]);
- outputContainer->Add(fhZTDecayChargedAssocPtBin[i]);
-
- }
-
- if(fFillBradHisto)
- {
- fhDeltaPhiBradAssocPtBin[i] = new TH2F(Form("hDeltaPhiBradPtAssocPt%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- Form("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
- fhDeltaPhiBradAssocPtBin[i]->SetXTitle("p_{T trigger}");
- fhDeltaPhiBradAssocPtBin[i]->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
- outputContainer->Add(fhDeltaPhiBradAssocPtBin[i]) ;
- }
-
- if(fHMPIDCorrelation)
- {
- fhDeltaPhiAssocPtBinHMPID[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1fHMPID", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f], with track having HMPID signal", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- nptbins, ptmin, ptmax,140,-2.,5.);
- fhDeltaPhiAssocPtBinHMPID[i]->SetXTitle("p_{T trigger}");
- fhDeltaPhiAssocPtBinHMPID[i]->SetYTitle("#Delta #phi");
-
- fhDeltaPhiAssocPtBinHMPIDAcc[i] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1fHMPIDAcc", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f], with track within 5<phi<20 deg", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- nptbins, ptmin, ptmax,140,-2.,5.);
- fhDeltaPhiAssocPtBinHMPIDAcc[i]->SetXTitle("p_{T trigger}");
- fhDeltaPhiAssocPtBinHMPIDAcc[i]->SetYTitle("#Delta #phi");
+ outputContainer->Add(fhDeltaPhiDeltaEtaAssocPtBin[bin]) ;
+ outputContainer->Add(fhDeltaPhiAssocPtBin[bin]) ;
+ outputContainer->Add(fhDeltaPhiAssocPtBinDEta08[bin]) ;
+ outputContainer->Add(fhDeltaPhiAssocPtBinDEta0[bin]) ;
+ outputContainer->Add(fhXEAssocPtBin[bin]);
+ outputContainer->Add(fhZTAssocPtBin[bin]);
+
+ if(fPi0Trigger || fDecayTrigger)
+ {
+ fhDeltaPhiDecayChargedAssocPtBin[bin] = new TH2F(Form("hDeltaPhiPtDecayChargedAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("#Delta #phi vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiDecayChargedAssocPtBin[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhDeltaPhiDecayChargedAssocPtBin[bin]->SetYTitle("#Delta #phi (rad)");
+
+ fhXEDecayChargedAssocPtBin[bin] = new TH2F(Form("hXEDecayChargedAssocPtBin%1.f_%1.f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("x_{E} vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ nptbins, ptmin, ptmax,200, 0.0, 2.0);
+ fhXEDecayChargedAssocPtBin[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhXEDecayChargedAssocPtBin[bin]->SetYTitle("x_{E}");
+
+ fhZTDecayChargedAssocPtBin[bin] = new TH2F(Form("hZTDecayChargedAssocPtBin%1.f_%1.f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("z_{T} vs p_{T trigger} tagged as decay for associated p_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ nptbins, ptmin, ptmax,200, 0.0, 2.0);
+ fhZTDecayChargedAssocPtBin[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhZTDecayChargedAssocPtBin[bin]->SetYTitle("z_{T}");
+
+ outputContainer->Add(fhDeltaPhiDecayChargedAssocPtBin[bin]) ;
+ outputContainer->Add(fhXEDecayChargedAssocPtBin[bin]);
+ outputContainer->Add(fhZTDecayChargedAssocPtBin[bin]);
+
+ }
- outputContainer->Add(fhDeltaPhiAssocPtBinHMPID[i]) ;
- outputContainer->Add(fhDeltaPhiAssocPtBinHMPIDAcc[i]) ;
+ if(fFillBradHisto)
+ {
+ fhDeltaPhiBradAssocPtBin[bin] = new TH2F(Form("hDeltaPhiBradPtAssocPt%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ nptbins, ptmin, ptmax,288, -1.0/3.0, 5.0/3.0);
+ fhDeltaPhiBradAssocPtBin[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhDeltaPhiBradAssocPtBin[bin]->SetYTitle("atan2(sin(#Delta #phi), cos(#Delta #phi))/#pi");
+ outputContainer->Add(fhDeltaPhiBradAssocPtBin[bin]) ;
+ }
- }
+ if(fHMPIDCorrelation)
+ {
+ fhDeltaPhiAssocPtBinHMPID[bin] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f%sHMPID", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]%s, with track having HMPID signal", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiAssocPtBinHMPID[bin]->SetXTitle("p_{T trigger} (GeV/c)" );
+ fhDeltaPhiAssocPtBinHMPID[bin]->SetYTitle("#Delta #phi (rad)");
+
+ fhDeltaPhiAssocPtBinHMPIDAcc[bin] = new TH2F(Form("hDeltaPhiPtAssocPt%2.1f_%2.1f%sHMPIDAcc", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("#Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]%s, with track within 5<phi<20 deg", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiAssocPtBinHMPIDAcc[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhDeltaPhiAssocPtBinHMPIDAcc[bin]->SetYTitle("#Delta #phi (rad)");
+
+ outputContainer->Add(fhDeltaPhiAssocPtBinHMPID[bin]) ;
+ outputContainer->Add(fhDeltaPhiAssocPtBinHMPIDAcc[bin]) ;
+
+ }
+ }
}
if(fPi0Trigger || fDecayTrigger)
if(fPi0Trigger)
{
fhPtPi0DecayRatio = new TH2F
- ("hPtPi0DecayRatio","p_T of #pi^{0} and the ratio of pt for two decay",
+ ("hPtPi0DecayRatio","p_{T} of #pi^{0} and the ratio of pt for two decay",
nptbins,ptmin,ptmax, 100,0.,2.);
fhPtPi0DecayRatio->SetXTitle("p_{T}^{#pi^{0}} (GeV/c)");
fhPtPi0DecayRatio->SetYTitle("p_{T}^{Decay}/p_{T}^{#pi^{0}}");
+ outputContainer->Add(fhPtPi0DecayRatio) ;
}
fhDeltaPhiDecayCharged = new TH2F
("hDeltaPhiDecayCharged","#phi_{Decay} - #phi_{h^{#pm}} vs p_{T Decay}",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhDeltaPhiDecayCharged->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiDecayCharged->SetYTitle("#Delta #phi (rad)");
fhDeltaPhiDecayCharged->SetXTitle("p_{T Decay} (GeV/c)");
fhXEDecayCharged =
new TH2F("hXEDecayCharged","x_{E} Decay",
nptbins,ptmin,ptmax,200,0.,2.);
fhXEDecayCharged->SetYTitle("x_{E}");
- fhXEDecayCharged->SetXTitle("p_{T decay}");
+ fhXEDecayCharged->SetXTitle("p_{T decay} (GeV/c)");
fhZTDecayCharged =
new TH2F("hZTDecayCharged","z_{trigger h^{#pm}} = p_{T h^{#pm}} / p_{T Decay}",
nptbins,ptmin,ptmax,200,0.,2.);
fhZTDecayCharged->SetYTitle("z_{decay h^{#pm}}");
- fhZTDecayCharged->SetXTitle("p_{T decay}");
+ fhZTDecayCharged->SetXTitle("p_{T decay} (GeV/c)");
- outputContainer->Add(fhPtPi0DecayRatio) ;
outputContainer->Add(fhDeltaPhiDecayCharged) ;
outputContainer->Add(fhXEDecayCharged) ;
outputContainer->Add(fhZTDecayCharged) ;
{
fhDeltaPhiUeLeftCharged = new TH2F
("hDeltaPhiUeLeftChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE left side range of trigger particles",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhDeltaPhiUeLeftCharged->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiUeLeftCharged->SetYTitle("#Delta #phi (rad)");
fhDeltaPhiUeLeftCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)");
outputContainer->Add(fhDeltaPhiUeLeftCharged) ;
fhDeltaPhiUeRightCharged = new TH2F
("hDeltaPhiUeRightChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE right side range of trigger particles",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhDeltaPhiUeRightCharged->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiUeRightCharged->SetYTitle("#Delta #phi (rad)");
fhDeltaPhiUeRightCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)");
outputContainer->Add(fhDeltaPhiUeRightCharged) ;
+ fhDeltaPhiUeLeftUpCharged = new TH2F
+ ("hDeltaPhiUeLeftUpChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE left Up side range of trigger particles",
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiUeLeftUpCharged->SetYTitle("#Delta #phi (rad)");
+ fhDeltaPhiUeLeftUpCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)");
+ outputContainer->Add(fhDeltaPhiUeLeftUpCharged) ;
+
+ fhDeltaPhiUeRightUpCharged = new TH2F
+ ("hDeltaPhiUeRightUpChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE right Up side range of trigger particles",
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiUeRightUpCharged->SetYTitle("#Delta #phi (rad)");
+ fhDeltaPhiUeRightUpCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)");
+ outputContainer->Add(fhDeltaPhiUeRightUpCharged) ;
+
+ fhDeltaPhiUeLeftDownCharged = new TH2F
+ ("hDeltaPhiUeLeftDownChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE left Down side range of trigger particles",
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiUeLeftDownCharged->SetYTitle("#Delta #phi (rad)");
+ fhDeltaPhiUeLeftDownCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)");
+ outputContainer->Add(fhDeltaPhiUeLeftDownCharged) ;
+
+ fhDeltaPhiUeRightDownCharged = new TH2F
+ ("hDeltaPhiUeRightDownChargedPt","#phi_{trigger} - #phi_{#Ueh^{#pm}} vs p_{T Ueh^{#pm}} with UE right Down side range of trigger particles",
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiUeRightDownCharged->SetYTitle("#Delta #phi (rad)");
+ fhDeltaPhiUeRightDownCharged->SetXTitle("p_{T h^{#pm}} (GeV/c)");
+ outputContainer->Add(fhDeltaPhiUeRightDownCharged) ;
+
fhXEUeLeftCharged =
new TH2F("hXEUeChargedLeft","x_{E} with UE left side of trigger",
nptbins,ptmin,ptmax,200,0.,2.);
fhXEUeLeftCharged->SetYTitle("x_{E Ueh^{#pm}}");
- fhXEUeLeftCharged->SetXTitle("p_{T trigger}");
+ fhXEUeLeftCharged->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhXEUeLeftCharged) ;
fhXEUeRightCharged =
new TH2F("hXEUeChargedRight","x_{E h^{#pm}} with UE right side of trigger",
nptbins,ptmin,ptmax,200,0.,2.);
fhXEUeRightCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
- fhXEUeRightCharged->SetXTitle("p_{T trigger}");
+ fhXEUeRightCharged->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhXEUeRightCharged) ;
+ fhXEUeLeftUpCharged =
+ new TH2F("hXEUeChargedLeftUp","x_{E} with UE left Up side of trigger",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhXEUeLeftUpCharged->SetYTitle("x_{E Ueh^{#pm}}");
+ fhXEUeLeftUpCharged->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhXEUeLeftUpCharged) ;
+
+ fhXEUeRightUpCharged =
+ new TH2F("hXEUeChargedRightUp","x_{E h^{#pm}} with UE right Up side of trigger",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhXEUeRightUpCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
+ fhXEUeRightUpCharged->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhXEUeRightUpCharged) ;
+
+ fhXEUeLeftDownCharged =
+ new TH2F("hXEUeChargedLeftDown","x_{E} with UE left Down side of trigger",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhXEUeLeftDownCharged->SetYTitle("x_{E Ueh^{#pm}}");
+ fhXEUeLeftDownCharged->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhXEUeLeftDownCharged) ;
+
+ fhXEUeRightDownCharged =
+ new TH2F("hXEUeChargedRightDown","x_{E h^{#pm}} with UE right Down side of trigger",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhXEUeRightDownCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
+ fhXEUeRightDownCharged->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhXEUeRightDownCharged) ;
+
fhPtHbpXEUeLeftCharged =
new TH2F("hHbpXEUeChargedLeft","#xi = ln(1/x_{E}) with charged UE left side of trigger",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpXEUeLeftCharged->SetYTitle("ln(1/x_{E})");
- fhPtHbpXEUeLeftCharged->SetXTitle("p_{T trigger}");
+ fhPtHbpXEUeLeftCharged->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhPtHbpXEUeLeftCharged) ;
fhPtHbpXEUeRightCharged =
new TH2F("hHbpXEUeChargedRight","#xi = ln(1/x_{E}) with charged UE right side of trigger",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpXEUeRightCharged->SetYTitle("ln(1/x_{E})");
- fhPtHbpXEUeRightCharged->SetXTitle("p_{T trigger}");
+ fhPtHbpXEUeRightCharged->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhPtHbpXEUeRightCharged) ;
fhZTUeLeftCharged =
new TH2F("hZTUeChargedLeft","z_{trigger h^{#pm}} = p_{T Ueh^{#pm}} / p_{T trigger} with UE left side of trigger",
nptbins,ptmin,ptmax,200,0.,2.);
fhZTUeLeftCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
- fhZTUeLeftCharged->SetXTitle("p_{T trigger}");
+ fhZTUeLeftCharged->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhZTUeLeftCharged) ;
fhZTUeRightCharged =
new TH2F("hZTUeChargedRight","z_{trigger h^{#pm}} = p_{T Ueh^{#pm}} / p_{T trigger} with UE right side of trigger",
nptbins,ptmin,ptmax,200,0.,2.);
fhZTUeRightCharged->SetYTitle("z_{trigger Ueh^{#pm}}");
- fhZTUeRightCharged->SetXTitle("p_{T trigger}");
+ fhZTUeRightCharged->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhZTUeRightCharged) ;
fhPtHbpZTUeLeftCharged =
new TH2F("hHbpZTUeChargedLeft","#xi = ln(1/z_{T}) with charged UE left side of trigger",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpZTUeLeftCharged->SetYTitle("ln(1/z_{T})");
- fhPtHbpZTUeLeftCharged->SetXTitle("p_{T trigger}");
+ fhPtHbpZTUeLeftCharged->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhPtHbpZTUeLeftCharged) ;
fhPtHbpZTUeRightCharged =
new TH2F("hHbpZTUeChargedRight","#xi = ln(1/z_{T}) with charged UE right side of trigger",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpZTUeRightCharged->SetYTitle("ln(1/z_{T})");
- fhPtHbpZTUeRightCharged->SetXTitle("p_{T trigger}");
+ fhPtHbpZTUeRightCharged->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhPtHbpZTUeRightCharged) ;
- }
+ }
} //Correlation with charged hadrons
-
+
//Correlation with neutral hadrons
if(fNeutralCorr)
{
fhDeltaPhiDeltaEtaNeutral = new TH2F
("hDeltaPhiDeltaEtaNeutral","#phi_{trigger} - #phi_{h^{0}} vs #eta_{trigger} - #eta_{h^{0}}",
- 140,-2.,5.,200,-2,2);
- fhDeltaPhiDeltaEtaNeutral->SetXTitle("#Delta #phi");
+ ndeltaphibins ,deltaphimin,deltaphimax, ndeltaetabins ,deltaetamin,deltaetamax);
+ fhDeltaPhiDeltaEtaNeutral->SetXTitle("#Delta #phi (rad)");
fhDeltaPhiDeltaEtaNeutral->SetYTitle("#Delta #eta");
fhPhiNeutral = new TH2F
fhDeltaPhiNeutral = new TH2F
("hDeltaPhiNeutral","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T trigger}",
nptbins,ptmin,ptmax,nphibins,phimin,phimax);
- fhDeltaPhiNeutral->SetYTitle("#Delta #phi");
+ fhDeltaPhiNeutral->SetYTitle("#Delta #phi (rad)");
fhDeltaPhiNeutral->SetXTitle("p_{T trigger} (GeV/c)");
fhDeltaPhiNeutralPt = new TH2F
("hDeltaPhiNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T #pi^{0}}}",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhDeltaPhiNeutralPt->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiNeutralPt->SetYTitle("#Delta #phi (rad)");
fhDeltaPhiNeutralPt->SetXTitle("p_{T h^{0}} (GeV/c)");
fhDeltaPhiUeNeutralPt = new TH2F
("hDeltaPhiUeNeutralPt","#phi_{trigger} - #phi_{#pi^{0}} vs p_{T #pi^{0}}}",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhDeltaPhiUeNeutralPt->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiUeNeutralPt->SetYTitle("#Delta #phi (rad)");
fhDeltaPhiUeNeutralPt->SetXTitle("p_{T h^{0}} (GeV/c)");
fhDeltaEtaNeutral = new TH2F
("hDeltaEtaNeutral","#eta_{trigger} - #eta_{#pi^{0}} vs p_{T trigger}",
- nptbins,ptmin,ptmax,200,-2,2);
+ nptbins,ptmin,ptmax, ndeltaetabins ,deltaetamin,deltaetamax);
fhDeltaEtaNeutral->SetYTitle("#Delta #eta");
fhDeltaEtaNeutral->SetXTitle("p_{T trigger} (GeV/c)");
new TH2F("hXENeutral","x_{E} for #pi^{0} associated",
nptbins,ptmin,ptmax,200,0.,2.);
fhXENeutral->SetYTitle("x_{E}");
- fhXENeutral->SetXTitle("p_{T trigger}");
+ fhXENeutral->SetXTitle("p_{T trigger} (GeV/c)");
fhXEUeNeutral =
new TH2F("hXEUeNeutral","x_{E} for #pi^{0} associated",
nptbins,ptmin,ptmax,200,0.,2.);
fhXEUeNeutral->SetYTitle("x_{E}");
- fhXEUeNeutral->SetXTitle("p_{T trigger}");
+ fhXEUeNeutral->SetXTitle("p_{T trigger} (GeV/c)");
fhPtHbpXENeutral =
new TH2F("hHbpXENeutral","#xi = ln(1/x_{E})for #pi^{0} associated",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpXENeutral->SetYTitle("ln(1/x_{E})");
- fhPtHbpXENeutral->SetXTitle("p_{T trigger}");
+ fhPtHbpXENeutral->SetXTitle("p_{T trigger} (GeV/c)");
fhPtHbpXEUeNeutral =
new TH2F("hHbpXEUeNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpXEUeNeutral->SetYTitle("ln(1/x_{E})");
- fhPtHbpXEUeNeutral->SetXTitle("p_{T trigger}");
+ fhPtHbpXEUeNeutral->SetXTitle("p_{T trigger} (GeV/c)");
fhZTNeutral =
new TH2F("hZTNeutral","z_{trigger #pi} = p_{T #pi^{0}} / p_{T trigger} for #pi^{0} associated",
nptbins,ptmin,ptmax,200,0.,2.);
fhZTNeutral->SetYTitle("z_{trigger #pi^{0}}");
- fhZTNeutral->SetXTitle("p_{T trigger}");
+ fhZTNeutral->SetXTitle("p_{T trigger} (GeV/c)");
fhZTUeNeutral =
new TH2F("hZTUeNeutral","z_{trigger #pi} = p_{T #pi^{0}} / p_{T trigger} for #pi^{0} associated",
nptbins,ptmin,ptmax,200,0.,2.);
fhZTUeNeutral->SetYTitle("z_{trigger #pi^{0}}");
- fhZTUeNeutral->SetXTitle("p_{T trigger}");
+ fhZTUeNeutral->SetXTitle("p_{T trigger} (GeV/c)");
fhPtHbpZTNeutral =
new TH2F("hHbpZTNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated",
new TH2F("hHbpZTUeNeutral","#xi = ln(1/x_{E}) for #pi^{0} associated",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpXEUeNeutral->SetYTitle("ln(1/z_{T})");
- fhPtHbpXEUeNeutral->SetXTitle("p_{T trigger}");
+ fhPtHbpXEUeNeutral->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhDeltaPhiDeltaEtaNeutral);
outputContainer->Add(fhPhiNeutral) ;
{
fhDeltaPhiDecayNeutral = new TH2F
("hDeltaPhiDecayNeutral","#phi_{Decay} - #phi_{h^{0}} vs p_{T Decay}",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhDeltaPhiDecayNeutral->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiDecayNeutral->SetYTitle("#Delta #phi (rad)");
fhDeltaPhiDecayNeutral->SetXTitle("p_{T Decay} (GeV/c)");
fhXEDecayNeutral =
{
fhDeltaPhiUeLeftNeutral = new TH2F
("hDeltaPhiUeLeftNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs p_{T h^{0}} with neutral UE left side range of trigger particles",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhDeltaPhiUeLeftNeutral->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiUeLeftNeutral->SetYTitle("#Delta #phi (rad)");
fhDeltaPhiUeLeftNeutral->SetXTitle("p_{T h^{0}} (GeV/c)");
outputContainer->Add(fhDeltaPhiUeLeftNeutral) ;
fhDeltaPhiUeRightNeutral = new TH2F
("hDeltaPhiUeRightNeutralPt","#phi_{trigger} - #phi_{#Ueh^{0}} vs p_{T Ueh^{0}} with neutral UE right side range of trigger particles",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhDeltaPhiUeRightNeutral->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhDeltaPhiUeRightNeutral->SetYTitle("#Delta #phi (rad)");
fhDeltaPhiUeRightNeutral->SetXTitle("p_{T h^{0}} (GeV/c)");
outputContainer->Add(fhDeltaPhiUeRightNeutral) ;
new TH2F("hXEUeNeutralLeft","x_{E} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE left side of trigger",
nptbins,ptmin,ptmax,140,0.,2.);
fhXEUeLeftNeutral->SetYTitle("z_{trigger Ueh^{0}}");
- fhXEUeLeftNeutral->SetXTitle("p_{T trigger}");
+ fhXEUeLeftNeutral->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhXEUeLeftNeutral) ;
fhXEUeRightNeutral =
new TH2F("hXEUeNeutralRight","x_{E} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE right side of trigger",
nptbins,ptmin,ptmax,200,0.,2.);
fhXEUeRightNeutral->SetYTitle("z_{trigger Ueh^{0}}");
- fhXEUeRightNeutral->SetXTitle("p_{T trigger}");
+ fhXEUeRightNeutral->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhXEUeRightNeutral) ;
fhPtHbpXEUeLeftNeutral =
new TH2F("hHbpXEUeNeutralLeft","#xi = ln(1/x_{E}) with neutral UE left side of trigger",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpXEUeLeftNeutral->SetYTitle("ln(1/x_{E})");
- fhPtHbpXEUeLeftNeutral->SetXTitle("p_{T trigger}");
+ fhPtHbpXEUeLeftNeutral->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhPtHbpXEUeLeftNeutral) ;
fhPtHbpXEUeRightNeutral =
new TH2F("hHbpXEUeNeutralRight","#xi = ln(1/x_{E}) with neutral UE right side of trigger",
nptbins,ptmin,ptmax,200,0.,10.);
fhPtHbpXEUeRightNeutral->SetYTitle("ln(1/x_{E})");
- fhPtHbpXEUeRightNeutral->SetXTitle("p_{T trigger}");
+ fhPtHbpXEUeRightNeutral->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhPtHbpXEUeRightNeutral) ;
fhZTUeLeftNeutral =
new TH2F("hZTUeNeutralLeft","z_{trigger h^{0}} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE left side of trigger",
nptbins,ptmin,ptmax,140,0.,2.);
fhZTUeLeftNeutral->SetYTitle("z_{trigger Ueh^{0}}");
- fhZTUeLeftNeutral->SetXTitle("p_{T trigger}");
+ fhZTUeLeftNeutral->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhZTUeLeftNeutral) ;
fhZTUeRightNeutral =
new TH2F("hZTUeNeutralRight","z_{trigger h^{0}} = p_{T Ueh^{0}} / p_{T trigger} with neutral UE right side of trigger",
nptbins,ptmin,ptmax,200,0.,2.);
fhZTUeRightNeutral->SetYTitle("z_{trigger Ueh^{0}}");
- fhZTUeRightNeutral->SetXTitle("p_{T trigger}");
+ fhZTUeRightNeutral->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhZTUeRightNeutral) ;
fhPtHbpZTUeLeftNeutral =
fh2phiLeadingParticle=new TH2F("h2phiLeadingParticle","#phi resolustion for trigger particles",nptbins,ptmin,ptmax,100,-1,1);
fh2phiLeadingParticle->GetXaxis()->SetTitle("p_{T gen Leading} (GeV/c)");
fh2phiLeadingParticle->GetYaxis()->SetTitle("(#phi_{rec}-#phi_{gen})/#phi_{gen}");
+
+ fhMCPtLeading = new TH1F ("hMCPtLeading","MC : p_{T} distribution of leading particles", nptbins,ptmin,ptmax);
+ fhMCPtLeading->SetXTitle("p_{T}^{trig} (GeV/c)");
+
+ fhMCPhiLeading = new TH2F ("hMCPhiLeading","MC : #phi distribution of leading Particles",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
+ fhMCPhiLeading->SetYTitle("#phi (rad)");
+
+ fhMCEtaLeading = new TH2F ("hMCEtaLeading","MC : #eta distribution of leading",nptbins,ptmin,ptmax, netabins,etamin,etamax);
+ fhMCEtaLeading->SetYTitle("#eta ");
+
fhMCEtaCharged = new TH2F
("hMCEtaCharged","MC #eta_{h^{#pm}} vs p_{T #pm}",
fhMCDeltaPhiDeltaEtaCharged = new TH2F
("hMCDeltaPhiDeltaEtaCharged","#MC phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
140,-2.,5.,200,-2,2);
- fhMCDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi");
+ fhMCDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi (rad)");
fhMCDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
fhMCDeltaEtaCharged = new TH2F
fhMCDeltaPhiCharged = new TH2F
("hMCDeltaPhiCharged","#phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhMCDeltaPhiCharged->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
+ fhMCDeltaPhiCharged->SetYTitle("#Delta #phi (rad)");
fhMCDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhMCDeltaPhiChargedPt = new TH2F
("hMCDeltaPhiChargedPt","MC #phi_{trigger} - #phi_{#h^{#pm}} vs p_{T h^{#pm}}",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhMCDeltaPhiChargedPt->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
+ fhMCDeltaPhiChargedPt->SetYTitle("#Delta #phi (rad)");
fhMCDeltaPhiChargedPt->SetXTitle("p_{T h^{#pm}} (GeV/c)");
fhMCPtXECharged =
new TH2F("hMCPtXECharged","x_{E}",
nptbins,ptmin,ptmax,200,0.,2.);
fhMCPtXECharged->SetYTitle("x_{E}");
- fhMCPtXECharged->SetXTitle("p_{T trigger}");
+ fhMCPtXECharged->SetXTitle("p_{T trigger} (GeV/c)");
+
+ fhMCPtXEUeCharged =
+ new TH2F("hMCPtXEUeCharged","x_{E}",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhMCPtXEUeCharged->SetYTitle("x_{E}");
+ fhMCPtXEUeCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhMCPtHbpXECharged =
new TH2F("hMCHbpXECharged","MC #xi = ln(1/x_{E}) with charged hadrons",
nptbins,ptmin,ptmax,200,0.,10.);
fhMCPtHbpXECharged->SetYTitle("ln(1/x_{E})");
fhMCPtHbpXECharged->SetXTitle("p_{T trigger}");
+
+ fhMCPtHbpXEUeCharged =
+ new TH2F("hMCPtHbpXEUeCharged","#xi = ln(1/x_{E}) with charged hadrons,Underlying Event",
+ nptbins,ptmin,ptmax,200,0.,10.);
+ fhMCPtHbpXEUeCharged->SetYTitle("ln(1/x_{E})");
+ fhMCPtHbpXEUeCharged->SetXTitle("p_{T trigger} (GeV/c)");
+
+ fhMCUePart =
+ new TH1F("hMCUePart","MC UE particles distribution vs pt trig",
+ nptbins,ptmin,ptmax);
+ fhMCUePart->SetYTitle("dNch");
+ fhMCUePart->SetXTitle("p_{T trigger} (GeV/c)");
fhMCPtZTCharged =
new TH2F("hMCPtZTCharged","z_{T}",
nptbins,ptmin,ptmax,200,0.,2.);
fhMCPtZTCharged->SetYTitle("z_{T}");
- fhMCPtZTCharged->SetXTitle("p_{T trigger}");
+ fhMCPtZTCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhMCPtHbpZTCharged =
new TH2F("hMCHbpZTCharged","MC #xi = ln(1/z_{T}) with charged hadrons",
nptbins,ptmin,ptmax,200,0.,10.);
fhMCPtHbpZTCharged->SetYTitle("ln(1/z_{T})");
- fhMCPtHbpZTCharged->SetXTitle("p_{T trigger}");
+ fhMCPtHbpZTCharged->SetXTitle("p_{T trigger} (GeV/c)");
fhMCPtTrigPout =
new TH2F("hMCPtTrigPout","AOD MC Pout with triggers",
fhMCPtAssocDeltaPhi =
new TH2F("hMCPtAssocDeltaPhi","AOD MC delta phi with associated charged hadrons",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhMCPtAssocDeltaPhi->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
+ fhMCPtAssocDeltaPhi->SetYTitle("#Delta #phi (rad)");
fhMCPtAssocDeltaPhi->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fh2phiLeadingParticle);
+ outputContainer->Add(fhMCPtLeading);
+ outputContainer->Add(fhMCPhiLeading);
+ outputContainer->Add(fhMCEtaLeading);
outputContainer->Add(fhMCDeltaPhiDeltaEtaCharged);
outputContainer->Add(fhMCPhiCharged) ;
outputContainer->Add(fhMCEtaCharged) ;
outputContainer->Add(fhMCDeltaPhiChargedPt) ;
outputContainer->Add(fhMCPtXECharged) ;
+ outputContainer->Add(fhMCPtXEUeCharged) ;
outputContainer->Add(fhMCPtZTCharged) ;
outputContainer->Add(fhMCPtHbpXECharged) ;
+ outputContainer->Add(fhMCPtHbpXEUeCharged);
+ outputContainer->Add(fhMCUePart);
outputContainer->Add(fhMCPtHbpZTCharged) ;
outputContainer->Add(fhMCPtTrigPout) ;
outputContainer->Add(fhMCPtAssocDeltaPhi) ;
} //for MC histogram
- if(fDoOwnMix)
+ if(DoOwnMix())
{
//create event containers
- fListMixEvents= new TList*[GetNCentrBin()*GetNZvertBin()] ;
- for(Int_t ic=0; ic<GetNCentrBin(); ic++){
- for(Int_t iz=0; iz<GetNZvertBin(); iz++){
- fListMixEvents[ic*GetNZvertBin()+iz] = new TList() ;
- fListMixEvents[ic*GetNZvertBin()+iz]->SetOwner(kFALSE);
- }
- }
+ if(!fUseMixStoredInReader || (fUseMixStoredInReader && !GetReader()->ListWithMixedEventsForTracksExists()))
+ {
+ Int_t nvz = GetNZvertBin();
+ Int_t nrp = GetNRPBin();
+ Int_t nce = GetNCentrBin();
+
+ fListMixTrackEvents= new TList*[nvz*nrp*nce] ;
+
+ for( Int_t ice = 0 ; ice < nce ; ice++ )
+ {
+ for( Int_t ivz = 0 ; ivz < nvz ; ivz++ )
+ {
+ for( Int_t irp = 0 ; irp < nrp ; irp++ )
+ {
+ Int_t bin = GetEventMixBin(ice,ivz,irp); //ic*nvz*nrp+iz*nrp+irp;
+
+ //printf("GetCreateOutputObjects - Bins : cent %d, vz %d, RP %d, event %d/%d\n",
+ // ic,iz, irp, bin);
+
+ fListMixTrackEvents[bin] = new TList() ;
+ fListMixTrackEvents[bin]->SetOwner(kFALSE);
+ }
+ }
+ }
+ }
+
+ fhPtLeadingMixed = new TH1F ("hPtLeadingMixed","p_{T} distribution of leading particles, used for mixing", nptbins,ptmin,ptmax);
+ fhPtLeadingMixed->SetXTitle("p_{T}^{trig} (GeV/c)");
+
+ if(fCorrelVzBin)
+ {
+ fhPtLeadingMixedVzBin = new TH2F ("hPtLeadingMixedVzBin","p_{T} distribution of leading particles, used for mixing", nptbins,ptmin,ptmax,GetNZvertBin(),0,GetNZvertBin());
+ fhPtLeadingMixedVzBin->SetXTitle("p_{T}^{trig} (GeV/c)");
+ fhPtLeadingMixedVzBin->SetYTitle("v_{z} bin");
+ outputContainer->Add(fhPtLeadingMixedVzBin);
+ }
+
+ fhPtLeadingMixedBin = new TH2F ("hPtLeadingMixedBin","p_{T} distribution of leading particles vs mixing bin", nptbins,ptmin,ptmax,nMixBins,0,nMixBins);
+ fhPtLeadingMixedBin->SetXTitle("p_{T}^{trig} (GeV/c)");
+ fhPtLeadingMixedBin->SetYTitle("Bin");
+
+ fhPhiLeadingMixed = new TH2F ("hPhiLeadingMixed","#phi distribution of leading Particles, used for mixing",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
+ fhPhiLeadingMixed->SetYTitle("#phi (rad)");
+
+ fhEtaLeadingMixed = new TH2F ("hEtaLeadingMixed","#eta distribution of leading, used for mixing",nptbins,ptmin,ptmax, netabins,etamin,etamax);
+ fhEtaLeadingMixed->SetYTitle("#eta ");
+
+ outputContainer->Add(fhPtLeadingMixed);
+ outputContainer->Add(fhPtLeadingMixedBin);
+ outputContainer->Add(fhPhiLeadingMixed);
+ outputContainer->Add(fhEtaLeadingMixed);
+
+ // Fill the cluster pool only in isolation analysis or if requested
+ if( ( OnlyIsolated() || fFillNeutralEventMixPool) &&
+ (!fUseMixStoredInReader || (fUseMixStoredInReader && !GetReader()->ListWithMixedEventsForCaloExists())))
+ {
+ Int_t nvz = GetNZvertBin();
+ Int_t nrp = GetNRPBin();
+ Int_t nce = GetNCentrBin();
+
+ fListMixCaloEvents= new TList*[nvz*nrp*nce] ;
+
+ for( Int_t ice = 0 ; ice < nce ; ice++ )
+ {
+ for( Int_t ivz = 0 ; ivz < nvz ; ivz++ )
+ {
+ for( Int_t irp = 0 ; irp < nrp ; irp++ )
+ {
+ Int_t bin = GetEventMixBin(ice,ivz,irp); //ic*nvz*nrp+iz*nrp+irp;
+
+ //printf("GetCreateOutputObjects - Bins : cent %d, vz %d, RP %d, event %d/%d\n",
+ // ic,iz, irp, bin);
+
+ fListMixCaloEvents[bin] = new TList() ;
+ fListMixCaloEvents[bin]->SetOwner(kFALSE);
+ }
+ }
+ }
+ }
+
+ //Init the list in the reader if not done previously
+ if(fUseMixStoredInReader)
+ {
+ if( !GetReader()->ListWithMixedEventsForTracksExists() )
+ GetReader()->SetListWithMixedEventsForTracks(fListMixTrackEvents);
+
+ if( !GetReader()->ListWithMixedEventsForCaloExists() )
+ GetReader()->SetListWithMixedEventsForCalo (fListMixCaloEvents );
+ }
+
+ fhEventBin=new TH1I("hEventBin","Number of real events per bin(cen,vz,rp)",
+ GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1,0,
+ GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1) ;
+ fhEventBin->SetXTitle("bin");
+ outputContainer->Add(fhEventBin) ;
+
+ fhEventMixBin=new TH1I("hEventMixBin","Number of events per bin(cen,vz,rp)",
+ GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1,0,
+ GetNCentrBin()*GetNZvertBin()*GetNRPBin()+1) ;
+ fhEventMixBin->SetXTitle("bin");
+ outputContainer->Add(fhEventMixBin) ;
fhNtracksAll=new TH1F("hNtracksAll","Number of tracks w/o event trigger",2000,0,2000);
outputContainer->Add(fhNtracksAll);
fhNtracksTrigger=new TH1F("hNtracksTriggerEvent","Number of tracks w/ event trigger",2000,0,2000);
outputContainer->Add(fhNtracksTrigger);
- fhNtracksINT=new TH1F("hNtracksMBEvent","Number of tracks w/ event trigger kAnyINT",2000,0,2000);
- outputContainer->Add(fhNtracksINT);
+ fhNtracksMB=new TH1F("hNtracksMBEvent","Number of tracks w/ event trigger kMB",2000,0,2000);
+ outputContainer->Add(fhNtracksMB);
+
+ if(fFillNeutralEventMixPool || OnlyIsolated())
+ {
+ fhNclustersAll=new TH1F("hNclustersAll","Number of clusters w/o event trigger",2000,0,2000);
+ outputContainer->Add(fhNclustersAll);
+
+ fhNclustersTrigger=new TH1F("hNclustersTriggerEvent","Number of clusters w/ event trigger",2000,0,2000);
+ outputContainer->Add(fhNclustersTrigger);
+
+ fhNclustersMB=new TH1F("hNclustersMBEvent","Number of clusters w/ event trigger kMB",2000,0,2000);
+ outputContainer->Add(fhNclustersMB);
+ }
fhMixDeltaPhiCharged = new TH2F
("hMixDeltaPhiCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs p_{T trigger}",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhMixDeltaPhiCharged->SetYTitle("#Delta #phi");
+ nptbins,ptmin,ptmax,ndeltaphibins ,deltaphimin,deltaphimax);
+ fhMixDeltaPhiCharged->SetYTitle("#Delta #phi (rad)");
fhMixDeltaPhiCharged->SetXTitle("p_{T trigger} (GeV/c)");
outputContainer->Add(fhMixDeltaPhiCharged);
-
+
fhMixDeltaPhiDeltaEtaCharged = new TH2F
("hMixDeltaPhiDeltaEtaCharged","Mixed event : #phi_{trigger} - #phi_{h^{#pm}} vs #eta_{trigger} - #eta_{h^{#pm}}",
- 140,-2.,5.,200,-2,2);
- fhMixDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi");
+ ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins ,deltaetamin,deltaetamax);
+ fhMixDeltaPhiDeltaEtaCharged->SetXTitle("#Delta #phi (rad)");
fhMixDeltaPhiDeltaEtaCharged->SetYTitle("#Delta #eta");
outputContainer->Add(fhMixDeltaPhiDeltaEtaCharged);
+
+ fhMixXECharged =
+ new TH2F("hMixXECharged","Mixed event : x_{E} for charged tracks",
+ nptbins,ptmin,ptmax,200,0.,2.);
+ fhMixXECharged->SetYTitle("x_{E}");
+ fhMixXECharged->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhMixXECharged);
- fhMixDeltaPhiChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
- fhMixDeltaPhiDeltaEtaChargedAssocPtBin = new TH2F*[fNAssocPtBins] ;
-
- for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
- {
- fhMixDeltaPhiChargedAssocPtBin[i] = new TH2F(Form("hMixDeltaPhiChargedAssocPtBin%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- nptbins, ptmin, ptmax,140,-2.,5.);
- fhMixDeltaPhiChargedAssocPtBin[i]->SetXTitle("p_{T trigger}");
- fhMixDeltaPhiChargedAssocPtBin[i]->SetYTitle("#Delta #phi");
+ fhMixHbpXECharged =
+ new TH2F("hMixHbpXECharged","mixed event : #xi = ln(1/x_{E}) with charged hadrons",
+ nptbins,ptmin,ptmax,200,0.,10.);
+ fhMixHbpXECharged->SetYTitle("ln(1/x_{E})");
+ fhMixHbpXECharged->SetXTitle("p_{T trigger} (GeV/c)");
+ outputContainer->Add(fhMixHbpXECharged);
- fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i] = new TH2F(Form("hMixDeltaPhiDeltaEtaChargedAssocPtBin%2.1f_%2.1f", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1]),
- 140,-2.,5.,200,-2,2);
- fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]->SetXTitle("#Delta #phi");
- fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]->SetYTitle("#Delta #eta");
-
- outputContainer->Add(fhMixDeltaPhiChargedAssocPtBin[i]);
- outputContainer->Add(fhMixDeltaPhiDeltaEtaChargedAssocPtBin[i]);
-
- }
+ fhMixDeltaPhiChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
+ fhMixDeltaPhiChargedAssocPtBinDEta08 = new TH2F*[fNAssocPtBins*nz];
+ fhMixDeltaPhiChargedAssocPtBinDEta0 = new TH2F*[fNAssocPtBins*nz];
+ fhMixDeltaPhiDeltaEtaChargedAssocPtBin = new TH2F*[fNAssocPtBins*nz];
+ for(Int_t i = 0 ; i < fNAssocPtBins ; i++)
+ {
+ for(Int_t z = 0 ; z < nz ; z++)
+ {
+ Int_t bin = i*nz+z;
+
+ if(fCorrelVzBin)
+ {
+ sz = "_vz%d"+z;
+ tz = ", v_{z} bin "+z;
+ }
+
+ //printf("MIX : iAssoc %d, Vz %d, bin %d - sz %s, tz %s \n",i,z,bin,sz.Data(),tz.Data());
+
+ fhMixDeltaPhiChargedAssocPtBin[bin] = new TH2F(Form("hMixDeltaPhiChargedAssocPtBin%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhMixDeltaPhiChargedAssocPtBin[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhMixDeltaPhiChargedAssocPtBin[bin]->SetYTitle("#Delta #phi (rad)");
+
+ fhMixDeltaPhiChargedAssocPtBinDEta08[bin] = new TH2F(Form("hMixDeltaPhiDeltaEta0.8ChargedAssocPtBin%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]%s, for #Delta #eta > 0.8", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhMixDeltaPhiChargedAssocPtBinDEta08[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhMixDeltaPhiChargedAssocPtBinDEta08[bin]->SetYTitle("#Delta #phi (rad)");
+
+ fhMixDeltaPhiChargedAssocPtBinDEta0[bin] = new TH2F(Form("hMixDeltaPhiDeltaEta0ChargedAssocPtBin%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]%s, for #Delta #eta = 0", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ nptbins, ptmin, ptmax, ndeltaphibins ,deltaphimin,deltaphimax);
+ fhMixDeltaPhiChargedAssocPtBinDEta0[bin]->SetXTitle("p_{T trigger} (GeV/c)");
+ fhMixDeltaPhiChargedAssocPtBinDEta0[bin]->SetYTitle("#Delta #phi (rad)");
+
+ fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin] = new TH2F(Form("hMixDeltaPhiDeltaEtaChargedAssocPtBin%2.1f_%2.1f%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],sz.Data()),
+ Form("Mixed event #Delta #phi vs p_{T trigger} for associated p_{T} bin [%2.1f,%2.1f]%s", fAssocPtBinLimit[i], fAssocPtBinLimit[i+1],tz.Data()),
+ ndeltaphibins ,deltaphimin,deltaphimax,ndeltaetabins ,deltaetamin,deltaetamax);
+ fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin]->SetXTitle("#Delta #phi (rad)");
+ fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin]->SetYTitle("#Delta #eta");
+
+ outputContainer->Add(fhMixDeltaPhiChargedAssocPtBin[bin]);
+ outputContainer->Add(fhMixDeltaPhiChargedAssocPtBinDEta08[bin]);
+ outputContainer->Add(fhMixDeltaPhiChargedAssocPtBinDEta0[bin]);
+ outputContainer->Add(fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin]);
+ }
+ }
}
return outputContainer;
}
+//_____________________________________________________________
+Int_t AliAnaParticleHadronCorrelation::GetMCTagHistogramIndex(const Int_t mcTag)
+{
+ // Index of MC histograms depending on MC origin
+
+ if ( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPrompt) ||
+ GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCFragmentation)) return 0;
+ else if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0)) return 1;
+ else if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCPi0Decay)) return 2;
+ else if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCEtaDecay)) return 3;
+ else if( GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCOtherDecay)) return 4;
+ else if(!GetMCAnalysisUtils()->CheckTagBit(mcTag,AliMCAnalysisUtils::kMCElectron)) return 5;
+ else return 6;
+
+}
//____________________________________________________
void AliAnaParticleHadronCorrelation::InitParameters()
{
//Initialize the parameters of the analysis.
- SetInputAODName("PWG4Particle");
+ SetInputAODName("Particle");
SetAODObjArrayName("Hadrons");
AddToHistogramsName("AnaHadronCorr_");
fMakeAbsoluteLeading = kTRUE;
fMakeNearSideLeading = kFALSE;
- fNAssocPtBins = 7 ;
- fAssocPtBinLimit[0] = 1.5 ;
- fAssocPtBinLimit[1] = 3. ;
- fAssocPtBinLimit[2] = 5. ;
- fAssocPtBinLimit[3] = 7. ;
- fAssocPtBinLimit[4] = 9. ;
- fAssocPtBinLimit[5] = 12. ;
- fAssocPtBinLimit[6] = 15. ;
- fAssocPtBinLimit[7] = 20. ;
- fAssocPtBinLimit[8] = 100.;
- fAssocPtBinLimit[9] = 200.;
+ fNAssocPtBins = 9 ;
+ fAssocPtBinLimit[0] = 0.2 ;
+ fAssocPtBinLimit[1] = 0.5 ;
+ fAssocPtBinLimit[2] = 1.0 ;
+ fAssocPtBinLimit[3] = 2.0 ;
+ fAssocPtBinLimit[4] = 3.0 ;
+ fAssocPtBinLimit[5] = 4.0 ;
+ fAssocPtBinLimit[6] = 5.0 ;
+ fAssocPtBinLimit[7] = 6.0 ;
+ fAssocPtBinLimit[8] = 7.0 ;
+ fAssocPtBinLimit[9] = 8.0 ;
+ fAssocPtBinLimit[10] = 9.0 ;
+ fAssocPtBinLimit[11] = 10.0 ;
+ fAssocPtBinLimit[12] = 12.0 ;
+ fAssocPtBinLimit[13] = 14.0 ;
+ fAssocPtBinLimit[14] = 16.0 ;
+ fAssocPtBinLimit[15] = 20.0 ;
+ fAssocPtBinLimit[16] = 30.0 ;
+ fAssocPtBinLimit[17] = 40.0 ;
+ fAssocPtBinLimit[18] = 50.0 ;
+ fAssocPtBinLimit[19] = 200.0 ;
+
+
+ fUseMixStoredInReader = kTRUE;
+
+ fM02MinCut = -1 ;
+ fM02MaxCut = -1 ;
}
abort();
}
- if(GetDebug() > 1){
+ if(GetDebug() > 1)
+ {
printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - Begin hadron correlation analysis, fill AODs \n");
printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast());
printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In CTS aod entries %d\n", GetCTSTracks() ->GetEntriesFast());
if(!GetMixedEvent() && TMath::Abs(v[2]) > GetZvertexCut()) return ;
// Fill the pool with tracks if requested
- if(fDoOwnMix) FillChargedEventMixPool();
-
+ if(DoOwnMix())
+ {
+ FillChargedEventMixPool();
+ if(OnlyIsolated() || fFillNeutralEventMixPool)
+ FillNeutralEventMixPool();
+ }
+
//Loop on stored AOD particles, find leading trigger
Double_t ptTrig = fMinTriggerPt ;
fLeadingTriggerIndex = -1 ;
Int_t check = CheckMixedEventVertex(particle->GetCaloLabel(0), particle->GetTrackLabel(0));
if(check == 0) continue;
if(check == -1) return;
-
+
//check if the particle is isolated or if we want to take the isolation into account
if(OnlyIsolated() && !particle->IsIsolated()) continue;
AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(fLeadingTriggerIndex));
+ // check if it was a calorimeter cluster and if the SS cut was requested, if so, apply it
+ Int_t clID1 = particle->GetCaloLabel(0) ;
+ Int_t clID2 = particle->GetCaloLabel(1) ; // for photon clusters should not be set.
+ //printf("Leading for for %s: id1 %d, id2 %d, min %f, max %f, det %s\n",
+ // GetInputAODName().Data(),clID1,clID2,fM02MinCut,fM02MaxCut,(particle->GetDetector()).Data());
+
+ if(clID1 > 0 && clID2 < 0 && fM02MaxCut > 0 && fM02MinCut > 0)
+ {
+ Int_t iclus = -1;
+ TObjArray* clusters = 0x0;
+ if (particle->GetDetector() == "EMCAL") clusters = GetEMCALClusters();
+ else if(particle->GetDetector() == "PHOS" ) clusters = GetPHOSClusters();
+
+ if(clusters)
+ {
+ AliVCluster *cluster = FindCluster(clusters,clID1,iclus);
+ Float_t m02 = cluster->GetM02();
+ //printf("\t Check m02 = %2.2f\n",m02);
+ if(m02 > fM02MaxCut || m02 < fM02MinCut)
+ {
+ //printf("\t \t Not accepted\n");
+ return;
+ }
+ }
+ }
+
+ // Check if the particle is isolated or if we want to take the isolation into account
+ if(OnlyIsolated() && !particle->IsIsolated()) return;
+
+ Float_t pt = particle->Pt();
+ fhPtInput->Fill(pt);
+
// Check if trigger is in fiducial region
if(IsFiducialCutOn())
{
Bool_t in = GetFiducialCut()->IsInFiducialCut(*particle->Momentum(),particle->GetDetector()) ;
if(! in ) return ;
- }
-
- // Check if the particle is isolated or if we want to take the isolation into account
- if(OnlyIsolated() && !particle->IsIsolated()) return;
+ }
+ fhPtFidCut->Fill(pt);
+
// Make correlation with charged hadrons
Bool_t okcharged = kTRUE;
Bool_t okneutral = kTRUE;
// no problem was found, like not absolute leading, or bad vertex in mixing.
if(okcharged && okneutral)
{
- fhPtLeading->Fill(particle->Pt());
+ fhPtLeading->Fill(pt);
+ fhPtLeadingBin->Fill(pt,GetEventMixBin());
+ if(fCorrelVzBin) fhPtLeadingVzBin->Fill(pt,GetEventVzBin());
+
+ if(fFillPileUpHistograms)
+ {
+ if(GetReader()->IsPileUpFromSPD()) fhPtLeadingPileUp[0]->Fill(pt);
+ if(GetReader()->IsPileUpFromEMCal()) fhPtLeadingPileUp[1]->Fill(pt);
+ if(GetReader()->IsPileUpFromSPDOrEMCal()) fhPtLeadingPileUp[2]->Fill(pt);
+ if(GetReader()->IsPileUpFromSPDAndEMCal()) fhPtLeadingPileUp[3]->Fill(pt);
+ if(GetReader()->IsPileUpFromSPDAndNotEMCal()) fhPtLeadingPileUp[4]->Fill(pt);
+ if(GetReader()->IsPileUpFromEMCalAndNotSPD()) fhPtLeadingPileUp[5]->Fill(pt);
+ if(GetReader()->IsPileUpFromNotSPDAndNotEMCal()) fhPtLeadingPileUp[6]->Fill(pt);
+ }
+
Float_t phi = particle->Phi();
if(phi<0)phi+=TMath::TwoPi();
- fhPhiLeading->Fill(particle->Pt(), phi);
- fhEtaLeading->Fill(particle->Pt(), particle->Eta());
+ fhPhiLeading->Fill(pt, phi);
+
+ fhEtaLeading->Fill(pt, particle->Eta());
+ //printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Leading particle : pt %f, eta %f, phi %f\n",particle->Pt(),particle->Eta(),phi);
+
+ if(IsDataMC())
+ {
+ Int_t mcIndex = GetMCTagHistogramIndex(particle->GetTag());
+ fhPtLeadingMC[mcIndex]->Fill(pt);
+ }
+
+ Float_t cen = GetEventCentrality();
+ Float_t ep = GetEventPlaneAngle();
+
+ fhPtLeadingCentrality ->Fill(pt,cen);
+ fhPtLeadingEventPlane ->Fill(pt,ep);
+ fhLeadingEventPlaneCentrality->Fill(cen,ep);
+
}//ok charged && neutral
}//Aod branch loop
const TObjArray* pl, const Bool_t bFillHisto)
{
// Charged Hadron Correlation Analysis
- if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Make trigger particle - charged hadron correlation \n");
+ if(GetDebug() > 1)
+ printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Make trigger particle - charged hadron correlation \n");
Float_t phiTrig = aodParticle->Phi();
Float_t etaTrig = aodParticle->Eta();
Float_t ptTrig = aodParticle->Pt();
Bool_t decay = aodParticle->IsTagged();
+ Int_t mcTag = aodParticle->GetTag();
+ Double_t bz = GetReader()->GetInputEvent()->GetMagneticField();
Float_t pt = -100. ;
Float_t zT = -100. ;
if(bFillHisto)
{
- if(GetDebug() > 2 ) printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Selected charge for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
+ if(GetDebug() > 2 )
+ printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Selected charge for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
// Set the pt associated bin for the defined bins
Int_t assocBin = -1;
if(pt > fAssocPtBinLimit[i] && pt < fAssocPtBinLimit[i+1]) assocBin= i;
}
+ // Assign to the histogram array a bin corresponding to a combination of pTa and vz bins
+ Int_t nz = 1;
+ Int_t vz = 0;
+
+ if(fCorrelVzBin)
+ {
+ nz = GetNZvertBin();
+ vz = GetEventVzBin();
+ }
+
+ Int_t bin = assocBin*nz+vz;
+
+ //printf("assoc Bin = %d, vZ bin = %d, bin = %d \n", assocBin,GetEventVzBin(),bin);
+
+ ULong_t status = track->GetStatus();
+ Bool_t okTOF = ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) ;
+ //Double32_t tof = track->GetTOFsignal()*1e-3;
+ Int_t trackBC = track->GetTOFBunchCrossing(bz);
+
+ Int_t outTOF = -1;
+ if (okTOF && trackBC!=0) outTOF = 1;
+ else if(okTOF && trackBC==0) outTOF = 0;
+
// Azimuthal Angle
// calculate deltaPhi for later, shift when needed
- FillChargedAngularCorrelationHistograms(pt, ptTrig, assocBin, phi, phiTrig, deltaPhi,
- eta, etaTrig, decay, track->GetHMPIDsignal(),nTracks);
+ FillChargedAngularCorrelationHistograms(pt, ptTrig, bin, phi, phiTrig, deltaPhi,
+ eta, etaTrig, decay, track->GetHMPIDsignal(),outTOF,nTracks,mcTag);
// Imbalance zT/xE/pOut
zT = pt/ptTrig ;
if ( (deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) )
{
- FillChargedMomentumImbalanceHistograms(ptTrig, pt, xE, hbpXE, zT, hbpZT, pout, deltaPhi,
- nTracks, track->Charge(), assocBin, decay);
+ FillChargedMomentumImbalanceHistograms(ptTrig, pt, xE, hbpXE, zT, hbpZT, pout,
+ nTracks, track->Charge(), bin, decay,outTOF,mcTag);
}
- else if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
+ if ( (deltaPhi > fUeDeltaPhiMinCut) && (deltaPhi < fUeDeltaPhiMaxCut) )
{ //UE study
- FillChargedUnderlyingEventHistograms(ptTrig, pt, deltaPhi, nTracks);
+ FillChargedUnderlyingEventHistograms(ptTrig, pt, deltaPhi, nTracks,outTOF);
+
+ fhUePart->Fill(ptTrig);
}
FillDecayPhotonCorrelationHistograms(pt, phi, decayMom1,decayMom2, kTRUE) ;
//several UE calculation
- if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,xE,hbpXE,zT,hbpZT,deltaPhi);
+ if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,deltaPhi);
} //Fill histogram
else
{
aodParticle->AddObjArray(reftracks);
}
-
+
//Own mixed event, add event and remove previous or fill the mixed histograms
- if(fDoOwnMix && bFillHisto)
+ if(DoOwnMix() && bFillHisto)
{
MakeChargedMixCorrelation(aodParticle);
}
}
-//______________________________________________________________________________________________________________________
-void AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
+//_________________________________________________________________________________________________________
+void AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
{
- if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Make trigger particle - charged hadron mixed event correlation \n");
+ // Mix current trigger with tracks in another MB event
- Double_t v[3] = {0,0,0}; //vertex ;
- GetReader()->GetVertex(v);
+ if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Make trigger particle - charged hadron mixed event correlation \n");
if(GetMixedEvent()) return; // This is not the mixed event from general mixing frame
-
// Get the event with similar caracteristics
+ //printf("MakeChargedMixCorrelation for %s\n",GetInputAODName().Data());
+
+ AliAnalysisManager * manager = AliAnalysisManager::GetAnalysisManager();
- //Get vertex z bin
-
- Int_t curZvertBin = (Int_t)(0.5*GetNZvertBin()*(v[2]+GetZvertexCut())/GetZvertexCut()) ;
-
- // centrality or tracks bin
- Int_t curCentrBin = 0;
- if(fUseTrackMultBins)
- { // Track multiplicity bins
- //curCentrBin = (GetTrackMultiplicity()-1)/5;
- //if(curCentrBin > GetNCentrBin()-1) curCentrBin=GetNCentrBin()-1;
- Int_t trackMult = GetReader()->GetTrackMultiplicity();
- if(trackMult<=5)
- curCentrBin=8;
- else if(trackMult<=10)
- curCentrBin=7;
- else if(trackMult<=15)
- curCentrBin=6;
- else if(trackMult<=20)
- curCentrBin=5;
- else if(trackMult<=30)
- curCentrBin=4;
- else if(trackMult<=40)
- curCentrBin=3;
- else if(trackMult<=55)
- curCentrBin=2;
- else if(trackMult<=70)
- curCentrBin=1 ;
- else curCentrBin=0 ;
- }
- else // Set centrality based on centrality task
- {
- curCentrBin = GetEventCentrality() * GetNCentrBin() / GetReader()->GetCentralityOpt();
- if(GetDebug() > 0 )printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - curCentrBin %d, centrality %d, n bins %d, max bin from centrality %d\n",
- curCentrBin, GetEventCentrality(), GetNCentrBin(), GetReader()->GetCentralityOpt());
- }
+ AliInputEventHandler * inputHandler = dynamic_cast<AliInputEventHandler*>(manager->GetInputEventHandler());
+ if(!inputHandler) return;
+
+ if(!(inputHandler->IsEventSelected( ) & GetReader()->GetEventTriggerMask())) return;
+
// Get the pool, check if it exits
- if(!fListMixEvents[curCentrBin*GetNZvertBin()+curZvertBin]) return ;
+ Int_t eventBin = GetEventMixBin();
+
+ fhEventBin->Fill(eventBin);
+
+ //Check that the bin exists, if not (bad determination of RP, centrality or vz bin) do nothing
+ if(eventBin < 0) return;
- //printf("curCen %d, curZ %d, bin %d\n",curCentrBin,curZvertBin,curCentrBin*GetNZvertBin()+curZvertBin);
+ TList * pool = 0;
+ TList * poolCalo = 0;
+ if(fUseMixStoredInReader)
+ {
+ pool = GetReader()->GetListWithMixedEventsForTracks(eventBin);
+ if(OnlyIsolated() || fFillNeutralEventMixPool) poolCalo = GetReader()->GetListWithMixedEventsForCalo (eventBin);
+ }
+ else
+ {
+ pool = fListMixTrackEvents[eventBin];
+ if(OnlyIsolated() || fFillNeutralEventMixPool) poolCalo = fListMixCaloEvents [eventBin];
+ }
- TList * pool = fListMixEvents[curCentrBin*GetNZvertBin()+curZvertBin];
+ if(!pool) return ;
+ if((OnlyIsolated() || fFillNeutralEventMixPool ) && !poolCalo &&
+ (GetIsolationCut()->GetParticleTypeInCone()!=AliIsolationCut::AliIsolationCut::kOnlyCharged))
+ printf("AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation() - Careful, cluster pool not available\n");
+
Double_t ptTrig = aodParticle->Pt();
Double_t etaTrig = aodParticle->Eta();
Double_t phiTrig = aodParticle->Phi();
if(phiTrig < 0.) phiTrig+=TMath::TwoPi();
- if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - leading trigger pt=%f, phi=%f, eta=%f\n",ptTrig,phiTrig,etaTrig);
+ if(GetDebug() > 1)
+ printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Pool bin %d size %d, leading trigger pt=%f, phi=%f, eta=%f\n",
+ eventBin,pool->GetSize(), ptTrig,phiTrig,etaTrig);
Double_t ptAssoc = -999.;
- Double_t phiAssoc = -999. ;
+ Double_t phiAssoc = -999.;
Double_t etaAssoc = -999.;
Double_t deltaPhi = -999.;
Double_t deltaEta = -999.;
-
- for(Int_t ev=0; ev <pool->GetSize(); ev++)
+ Double_t xE = -999.;
+ Double_t hbpXE = -999.;
+
+ //Start from first event in pool except if in this same event the pool was filled
+ Int_t ev0 = 0;
+ if(GetReader()->GetLastTracksMixedEvent() == GetEventNumber()) ev0 = 1;
+
+ for(Int_t ev=ev0; ev < pool->GetSize(); ev++)
{
TObjArray* bgTracks = static_cast<TObjArray*>(pool->At(ev));
+ TObjArray* bgCalo = 0;
+
+ // Check if the particle is isolated in the mixed event, it not, do not fill the histograms
+ if(OnlyIsolated() || fFillNeutralEventMixPool)
+ {
+ if(pool->GetSize()!=poolCalo->GetSize())
+ printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Different size of calo and track pools\n");
+
+ bgCalo = static_cast<TObjArray*>(poolCalo->At(ev));
+
+ if(!bgCalo)
+ printf("AliAnaParticleHadronCorrelationNew::MakeChargedMixCorrelation() - Event %d in calo pool not available?\n",ev);
+
+ if(OnlyIsolated() && bgCalo)
+ {
+ Int_t n=0; Int_t nfrac = 0; Bool_t isolated = kFALSE; Float_t coneptsum = 0;
+ GetIsolationCut()->MakeIsolationCut(bgTracks,bgCalo,
+ GetReader(), GetCaloPID(),
+ kFALSE, aodParticle, "",
+ n,nfrac,coneptsum, isolated);
+
+ //printf("AliAnaParticleHadronCorrelation::MakeChargedMixCorrelation() - Isolated? %d - cone %f, ptthres %f",
+ // isolated,GetIsolationCut()->GetConeSize(),GetIsolationCut()->GetPtThreshold());
+ //if(bgTracks)printf(" - n track %d", bgTracks->GetEntriesFast());
+ //printf("\n");
+
+ if(!isolated) continue ;
+ }
+ }
+
+ fhEventMixBin->Fill(eventBin);
Int_t nTracks=bgTracks->GetEntriesFast();
+ //printf("\t Read Pool event %d, nTracks %d\n",ev,nTracks);
+
+ //Check if it is leading if mixed event
+ if(fMakeNearSideLeading || fMakeAbsoluteLeading)
+ {
+ Bool_t leading = kTRUE;
+ for(Int_t jlead = 0;jlead <nTracks; jlead++ )
+ {
+ AliAODPWG4Particle *track = (AliAODPWG4Particle*) bgTracks->At(jlead) ;
+
+ ptAssoc = track->Pt();
+ phiAssoc = track->Phi() ;
+
+ if(phiAssoc < 0) phiAssoc+=TMath::TwoPi();
+ if (fMakeNearSideLeading)
+ {
+ if(ptAssoc > ptTrig && TMath::Abs(phiAssoc-phiTrig) < TMath::PiOver2())
+ {
+ leading = kFALSE;
+ break;
+ }
+ }
+ //jump out this event if there is any other particle with pt larger than trigger
+ else if(fMakeAbsoluteLeading)
+ {
+ if(ptAssoc > ptTrig)
+ {
+ leading = kFALSE;
+ break;
+ }
+ }
+ }
+
+ if(fFillNeutralEventMixPool && bgCalo)
+ {
+ Int_t nClusters=bgCalo->GetEntriesFast();
+ TLorentzVector mom ;
+ for(Int_t jlead = 0;jlead <nClusters; jlead++ )
+ {
+ AliVCluster *cluster = (AliVCluster*) bgCalo->At(jlead) ;
+
+ Double_t vertex[]={0,0,0}; // assume 0 vertex
+ cluster->GetMomentum(mom,vertex) ;
+
+ ptAssoc = mom.Pt();
+ phiAssoc = mom.Phi() ;
+
+ if(phiAssoc < 0) phiAssoc+=TMath::TwoPi();
+ if (fMakeNearSideLeading)
+ {
+ if(ptAssoc > ptTrig && TMath::Abs(phiAssoc-phiTrig) < TMath::PiOver2())
+ {
+ leading = kFALSE;
+ break;
+ }
+ }
+ //jump out this event if there is any other particle with pt larger than trigger
+ else if(fMakeAbsoluteLeading)
+ {
+ if(ptAssoc > ptTrig)
+ {
+ leading = kFALSE;
+ break;
+ }
+ }
+ }
+ }
+
+ if(!leading) continue; // not leading, check the next event in pool
+
+ }
+ fhPtLeadingMixed ->Fill(ptTrig);
+ fhPhiLeadingMixed ->Fill(ptTrig, phiTrig);
+ fhEtaLeadingMixed ->Fill(ptTrig, etaTrig);
+ fhPtLeadingMixedBin->Fill(ptTrig,eventBin);
+ if(fCorrelVzBin)fhPtLeadingMixedVzBin->Fill(ptTrig, GetEventVzBin());
+
for(Int_t j1 = 0;j1 <nTracks; j1++ )
{
AliAODPWG4Particle *track = (AliAODPWG4Particle*) bgTracks->At(j1) ;
etaAssoc = track->Eta();
phiAssoc = track->Phi() ;
if(phiAssoc < 0) phiAssoc+=TMath::TwoPi();
-
+
if(IsFiducialCutOn())
{
Bool_t in = GetFiducialCut()->IsInFiducialCut(*aodParticle->Momentum(),"CTS") ;
if(ptAssoc > fAssocPtBinLimit[i] && ptAssoc < fAssocPtBinLimit[i+1]) assocBin= i;
}
+ // Assign to the histogram array a bin corresponding to a combination of pTa and vz bins
+ Int_t nz = 1;
+ Int_t vz = 0;
+
+ if(fCorrelVzBin)
+ {
+ nz = GetNZvertBin();
+ vz = GetEventVzBin();
+ }
+
+ Int_t bin = assocBin*nz+vz;
+
+ fhMixDeltaPhiCharged ->Fill(ptTrig, deltaPhi);
+ fhMixDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
+
fhMixDeltaPhiCharged ->Fill(ptTrig, deltaPhi);
fhMixDeltaPhiDeltaEtaCharged->Fill(deltaPhi, deltaEta);
- if(assocBin < 0) continue ; // this pt bin was not considered
+ xE =-ptAssoc/ptTrig*TMath::Cos(deltaPhi); // -(px*pxTrig+py*pyTrig)/(ptTrig*ptTrig);
+ //if(xE <0.)xE =-xE;
+ if(xE > 0 ) hbpXE = TMath::Log(1./xE);
+ else hbpXE =-100;
+
+ if ( (deltaPhi > fDeltaPhiMinCut) && (deltaPhi < fDeltaPhiMaxCut) )
+ {
+ fhMixXECharged->Fill(ptTrig,xE);
+ fhMixHbpXECharged->Fill(ptTrig,hbpXE);
+ }
+
+ if(bin < 0) continue ; // this pt bin was not considered
- fhMixDeltaPhiChargedAssocPtBin[assocBin] ->Fill(ptTrig, deltaPhi);
- fhMixDeltaPhiDeltaEtaChargedAssocPtBin[assocBin]->Fill(deltaPhi, deltaEta);
+ if(TMath::Abs(deltaEta) > 0.8)
+ fhMixDeltaPhiChargedAssocPtBinDEta08 [bin]->Fill(ptTrig, deltaPhi);
+ if(TMath::Abs(deltaEta) < 0.01)
+ fhMixDeltaPhiChargedAssocPtBinDEta0 [bin]->Fill(ptTrig, deltaPhi);
+
+ fhMixDeltaPhiChargedAssocPtBin [bin]->Fill(ptTrig, deltaPhi);
+ fhMixDeltaPhiDeltaEtaChargedAssocPtBin[bin]->Fill(deltaPhi, deltaEta);
} // track loop
} // mixed event loop
}
//several UE calculation
- if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,xE,hbpXE,zT,hbpZT,deltaPhi);
+ if(fMakeSeveralUE) FillChargedUnderlyingEventSidesHistograms(ptTrig,pt,deltaPhi);
}
else
void AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
{
// Charged Hadron Correlation Analysis with MC information
+
if(GetDebug()>1)
printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation() - Make trigger particle - charged hadron correlation in AOD MC level\n");
Int_t nTracks = 0 ;
Int_t iParticle = 0 ;
Double_t charge = 0.;
-
+
if(GetReader()->ReadStack())
{
nTracks = GetMCStack()->GetNtrack() ;
//Int_t trackIndex[nTracks];
Int_t label= aodParticle->GetLabel();
- if(label<0){
- printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** bad label ***: label %d \n", label);
+ if(label < 0)
+ {
+ if(GetDebug() > 0) printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** bad label ***: label %d \n", label);
return;
}
if(GetReader()->ReadStack())
{
stack = GetMCStack() ;
- if(!stack) {
+ if(!stack)
+ {
printf(" AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation- Stack not available, is the MC handler called? STOP\n");
abort();
}
charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
- particle->Momentum(momentum);
+ particle->Momentum(momentum);
//---------- Charged particles ----------------------
if(charge != 0)
} //track loop
} //when the leading particles could trace back to MC
} //ESD MC
+
else if(GetReader()->ReadAODMCParticles())
{
//Get the list of MC particles
mcparticles0 = GetReader()->GetAODMCParticles(0);
if(!mcparticles0) return;
+
if(label >=mcparticles0->GetEntriesFast())
{
if(GetDebug() > 2)
printf("AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation *** large label ***: label %d, n tracks %d \n", label,mcparticles0->GetEntriesFast());
return;
}
+
//Get the particle
aodprimary = (AliAODMCParticle*) mcparticles0->At(label);
if(!aodprimary)
ptprim = aodprimary->Pt();
phiprim = aodprimary->Phi();
etaprim = aodprimary->Eta();
+ eprim = aodprimary->E();
+
+ Bool_t lead = kFALSE;
if(ptprim < 0.01 || eprim < 0.01) return ;
mcparticles= GetReader()->GetAODMCParticles();
- for (Int_t i = 0; i < nTracks; i++)
+ for (iParticle = 0; iParticle < nTracks; iParticle++)
{
- AliAODMCParticle *part = (AliAODMCParticle*) mcparticles->At(i);
+ AliAODMCParticle *part = (AliAODMCParticle*) mcparticles->At(iParticle);
+
if (!part->IsPhysicalPrimary()) continue;
+
Int_t pdg = part->GetPdgCode();
charge = TDatabasePDG::Instance()->GetParticle(pdg)->Charge();
- TLorentzVector momentum(part->Px(),part->Py(),part->Pz(),part->E());
+ TLorentzVector momentum(part->Px(),part->Py(),part->Pz(),part->E());
+
if(charge != 0)
{
if(part->Pt()> GetReader()->GetCTSPtMin())
//Particles in CTS acceptance
Bool_t inCTS = GetFiducialCut()->IsInFiducialCut(momentum,"CTS");
Int_t indexmother=part->GetMother();
+
if(indexmother>-1)
{
Int_t mPdg = ((AliAODMCParticle*) mcparticles->At(indexmother)) ->GetPdgCode();
if( label!=iParticle) // avoid trigger particle
{
if(!FillChargedMCCorrelationHistograms(part->Pt(),part->Phi(),part->Eta(),ptprim,phiprim,etaprim)) return;
+ else lead = kTRUE;
}
} // in acceptance
} // min pt cut
} //only charged particles
- } //MC particle loop
+ } //MC particle loop
+ if (lead)
+ {
+ fhMCPtLeading->Fill(ptprim);
+ fhMCPhiLeading->Fill(ptprim,phiprim);
+ fhMCEtaLeading->Fill(ptprim,etaprim);
+ }
} //when the leading particles could trace back to MC
}// AOD MC
}
fNAssocPtBins = n ;
- if(n < 10 && n > 0)
+ if(n < 20 && n > 0)
{
fNAssocPtBins = n ;
}
else
{
- printf("n = larger than 9 or too small, set to 9 \n");
- fNAssocPtBins = 9;
+ printf("n = larger than 19 or too small, set to 19 \n");
+ fNAssocPtBins = 19;
}
}
{
fAssocPtBinLimit[ibin] = pt ;
}
- else {
+ else
+ {
printf("AliAnaParticleHadronCorrelation::SetAssocPtBinLimit() - bin number too large %d > %d or small, nothing done\n", ibin, fNAssocPtBins) ;
-
}
}