// --- ROOT system ---
#include "TParticle.h"
#include "TH2F.h"
-#include "TH3D.h"
+
//---- AliRoot system ----
#include "AliAnaChargedParticles.h"
#include "AliCaloTrackReader.h"
ClassImp(AliAnaChargedParticles)
-//____________________________________________________________________________
+//__________________________________________________
AliAnaChargedParticles::AliAnaChargedParticles() :
- AliAnaPartCorrBaseClass(),fPdg(0), fhNtracks(0),fhVertex(0), fhPt(0),fhPhi(0),fhEta(0),
- fhPtEtaPhiPos(0), fhPtEtaPhiNeg(0),
- fhPtPion(0),fhPhiPion(0),fhEtaPion(0),
- fhPtProton(0),fhPhiProton(0),fhEtaProton(0),
- fhPtElectron(0),fhPhiElectron(0),fhEtaElectron(0),
- fhPtKaon(0),fhPhiKaon(0),fhEtaKaon(0),
- fhPtUnknown(0),fhPhiUnknown(0),fhEtaUnknown(0)
-
+ AliAnaPartCorrBaseClass(),
+ fPdg(0),
+ fhNtracks(0), fhPt(0),
+ fhPhiNeg(0), fhEtaNeg(0),
+ fhPhiPos(0), fhEtaPos(0),
+ fhEtaPhiPos(0), fhEtaPhiNeg(0),
+ //MC
+ fhPtPion(0), fhPhiPion(0), fhEtaPion(0),
+ fhPtProton(0), fhPhiProton(0), fhEtaProton(0),
+ fhPtElectron(0),fhPhiElectron(0), fhEtaElectron(0),
+ fhPtKaon(0), fhPhiKaon(0), fhEtaKaon(0),
+ fhPtUnknown(0), fhPhiUnknown(0), fhEtaUnknown(0)
{
//Default Ctor
//Initialize parameters
InitParameters();
-}
-/*
-//____________________________________________________________________________
-AliAnaChargedParticles::AliAnaChargedParticles(const AliAnaChargedParticles & ch) :
- AliAnaPartCorrBaseClass(ch), fPdg(ch.fPdg), fhPt(ch.fhPt), fhPhi(ch.fhPhi),fhEta(ch.fhEta),
- fhPtPion(ch. fhPtPion),fhPhiPion(ch.fhPhiPion),fhEtaPion(ch.fhEtaPion),
- fhPtProton(ch.fhPtProton),fhPhiProton(ch.fhPhiProton),fhEtaProton(ch.fhEtaProton),
- fhPtElectron(ch. fhPtElectron),fhPhiElectron(ch.fhPhiElectron),fhEtaElectron(ch.fhEtaElectron),
- fhPtKaon(ch. fhPtKaon),fhPhiKaon(ch.fhPhiKaon),fhEtaKaon(ch.fhEtaKaon),
- fhPtUnknown(ch.fhPtUnknown),fhPhiUnknown(ch.fhPhiUnknown),fhEtaUnknown(ch.fhEtaUnknown)
-
-{
- // cpy ctor
-
}
-//_________________________________________________________________________
-AliAnaChargedParticles & AliAnaChargedParticles::operator = (const AliAnaChargedParticles & ch)
-{
- // assignment operator
-
- if(this == &ch)return *this;
- ((AliAnaPartCorrBaseClass *)this)->operator=(ch);
-
- fPdg = ch.fPdg;
- fhPt = ch.fhPt;
- fhPhi = ch.fhPhi;
- fhEta = ch.fhEta;
-
- fhPtPion = ch. fhPtPion; fhPhiPion = ch.fhPhiPion; fhEtaPion = ch.fhEtaPion;
- fhPtProton = ch.fhPtProton; fhPhiProton = ch.fhPhiProton; fhEtaProton = ch.fhEtaProton;
- fhPtElectron = ch. fhPtElectron; fhPhiElectron = ch.fhPhiElectron; fhEtaElectron = ch.fhEtaElectron;
- fhPtKaon = ch. fhPtKaon; fhPhiKaon = ch.fhPhiKaon; fhEtaKaon = ch.fhEtaKaon;
- fhPtUnknown = ch.fhPtUnknown; fhPhiUnknown = ch.fhPhiUnknown; fhEtaUnknown = ch.fhEtaUnknown;
-
- return *this;
-
-}
-*/
-
-//________________________________________________________________________
+//_______________________________________________________
TList * AliAnaChargedParticles::GetCreateOutputObjects()
{
// Create histograms to be saved in output file and
TList * outputContainer = new TList() ;
outputContainer->SetName("ExampleHistos") ;
- Int_t nptbins = GetHistoPtBins();
- Int_t nphibins = GetHistoPhiBins();
- Int_t netabins = GetHistoEtaBins();
- Float_t ptmax = GetHistoPtMax();
- Float_t phimax = GetHistoPhiMax();
- Float_t etamax = GetHistoEtaMax();
- Float_t ptmin = GetHistoPtMin();
- Float_t phimin = GetHistoPhiMin();
- Float_t etamin = GetHistoEtaMin();
+ Int_t nptbins = GetHistoPtBins(); Int_t nphibins = GetHistoPhiBins(); Int_t netabins = GetHistoEtaBins();
+ Float_t ptmax = GetHistoPtMax(); Float_t phimax = GetHistoPhiMax(); Float_t etamax = GetHistoEtaMax();
+ Float_t ptmin = GetHistoPtMin(); Float_t phimin = GetHistoPhiMin(); Float_t etamin = GetHistoEtaMin();
fhNtracks = new TH1F ("hNtracks","# of tracks", 1000,0,1000);
fhNtracks->SetXTitle("# of tracks");
outputContainer->Add(fhNtracks);
-
- fhVertex = new TH3D ("Vertex","vertex position", 100,-50.,50., 100,-50.,50., 100,-50.,50.);
- fhVertex->SetXTitle("X");
- fhVertex->SetYTitle("Y");
- fhVertex->SetZTitle("Z");
- outputContainer->Add(fhVertex);
-
- fhPt = new TH1F ("hPtCharged","p_T distribution", nptbins,ptmin,ptmax);
+
+ fhPt = new TH1F ("hPt","p_T distribution", nptbins,ptmin,ptmax);
fhPt->SetXTitle("p_{T} (GeV/c)");
outputContainer->Add(fhPt);
- fhPhi = new TH2F ("hPhiCharged","#phi distribution",nptbins,ptmin,ptmax, nphibins,phimin,phimax);
- fhPhi->SetXTitle("#phi (rad)");
- outputContainer->Add(fhPhi);
+ fhPhiNeg = new TH2F ("hPhiNegative","#phi of negative charges distribution",
+ nptbins,ptmin,ptmax, nphibins,phimin,phimax);
+ fhPhiNeg->SetYTitle("#phi (rad)");
+ fhPhiNeg->SetXTitle("p_{T} (GeV/c)");
+ outputContainer->Add(fhPhiNeg);
+
+ fhEtaNeg = new TH2F ("hEtaNegative","#eta of negative charges distribution",
+ nptbins,ptmin,ptmax, netabins,etamin,etamax);
+ fhEtaNeg->SetYTitle("#eta ");
+ fhEtaNeg->SetXTitle("p_{T} (GeV/c)");
+ outputContainer->Add(fhEtaNeg);
- fhEta = new TH2F ("hEtaCharged","#eta distribution",nptbins,ptmin,ptmax, netabins,etamin,etamax);
- fhEta->SetXTitle("#eta ");
- outputContainer->Add(fhEta);
+ fhPhiPos = new TH2F ("hPhiPositive","#phi of negative charges distribution",
+ nptbins,ptmin,ptmax, nphibins,phimin,phimax);
+ fhPhiPos->SetYTitle("#phi (rad)");
+ fhPhiPos->SetXTitle("p_{T} (GeV/c)");
+ outputContainer->Add(fhPhiPos);
- fhPtEtaPhiPos = new TH3D ("hPtEtaPhiPos","pt/eta/phi of positive charge",nptbins,ptmin,ptmax, netabins,etamin,etamax, nphibins,phimin,phimax);
- fhPtEtaPhiPos->SetXTitle("p_{T}^{h^{+}} (GeV/c)");
- fhPtEtaPhiPos->SetYTitle("#eta ");
- fhPtEtaPhiPos->SetZTitle("#phi (rad)");
- outputContainer->Add(fhPtEtaPhiPos);
+ fhEtaPos = new TH2F ("hEtaPositive","#eta of negative charges distribution",
+ nptbins,ptmin,ptmax, netabins,etamin,etamax);
+ fhEtaPos->SetYTitle("#eta ");
+ fhEtaPos->SetXTitle("p_{T} (GeV/c)");
+ outputContainer->Add(fhEtaPos);
- fhPtEtaPhiNeg = new TH3D ("hPtEtaPhiNeg","pt/eta/phi of negative charge",nptbins,ptmin,ptmax, netabins,etamin,etamax, nphibins,phimin,phimax);
- fhPtEtaPhiNeg->SetXTitle("p_{T}^{h^{-}} (GeV/c)");
- fhPtEtaPhiNeg->SetYTitle("#eta ");
- fhPtEtaPhiNeg->SetZTitle("#phi (rad)");
- outputContainer->Add(fhPtEtaPhiNeg);
+ fhEtaPhiPos = new TH2F ("hPtEtaPhiPositive","pt/eta/phi of positive charge",netabins,etamin,etamax, nphibins,phimin,phimax);
+ fhEtaPhiPos->SetXTitle("p_{T}^{h^{+}} (GeV/c)");
+ fhEtaPhiPos->SetYTitle("#eta ");
+ fhEtaPhiPos->SetZTitle("#phi (rad)");
+ outputContainer->Add(fhEtaPhiPos);
+
+ fhEtaPhiNeg = new TH2F ("hEtaPhiNegative","eta vs phi of negative charge",netabins,etamin,etamax, nphibins,phimin,phimax);
+ fhEtaPhiNeg->SetXTitle("p_{T}^{h^{-}} (GeV/c)");
+ fhEtaPhiNeg->SetYTitle("#eta ");
+ fhEtaPhiNeg->SetZTitle("#phi (rad)");
+ outputContainer->Add(fhEtaPhiNeg);
if(IsDataMC()){
}
-//__________________________________________________
+//___________________________________________
void AliAnaChargedParticles::InitParameters()
{
//Initialize the parameters of the analysis.
}
-//__________________________________________________________________
+//____________________________________________________________
void AliAnaChargedParticles::Print(const Option_t * opt) const
{
//Print some relevant parameters set for the analysis
}
-//____________________________________________________________________________
+//_________________________________
void AliAnaChargedParticles::Init()
{
//Init
}
-//__________________________________________________________________
+//_________________________________________________
void AliAnaChargedParticles::MakeAnalysisFillAOD()
{
//Do analysis and fill aods
//Acceptance selection
Bool_t in = GetFiducialCut()->IsInFiducialCut(mom,"CTS") ;
- if(GetDebug() > 1) printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - Track pt %2.2f, phi %2.2f, in fiducial cut %d\n",p3.Pt(), p3.Phi(), in);
+ if(GetDebug() > 1)
+ printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - Track pt %2.2f, phi %2.2f, in fiducial cut %d\n",p3.Pt(), p3.Phi(), in);
+
if(p3.Pt() > GetMinPt() && in) {
//Keep only particles identified with fPdg
//Selection not done for the moment
//Should be done here.
+
+ // Mixed event
if (GetMixedEvent()){
evtIndex = GetMixedEvent()->EventIndex(track->GetID()) ;
- }
+ }
GetVertex(vert,evtIndex);
- if(TMath::Abs(vert[2])> GetZvertexCut()) return;
+ if(TMath::Abs(vert[2])> GetZvertexCut()) return;
+
AliAODPWG4Particle tr = AliAODPWG4Particle(mom[0],mom[1],mom[2],0);
tr.SetDetector("CTS");
tr.SetLabel(track->GetLabel());
tr.SetTrackLabel(track->GetID(),-1);
- // tr.SetChargedBit(track->Charge());
- //Input from second AOD?
- //if(GetReader()->GetCTSTracksNormalInputEntries() <= i) tr.SetInputFileIndex(1);
+ tr.SetChargedBit(track->Charge()>0);
AddAODParticle(tr);
+
}//selection
}//loop
//Loop on stored AODParticles
Int_t naod = GetOutputAODBranch()->GetEntriesFast();
- Double_t v[3] = {0,0,0}; //vertex ;
- GetReader()->GetVertex(v);
- fhVertex->Fill(v[0],v[1],v[2]);
- if(TMath::Abs(v[2]) >GetZvertexCut()) return ;
+
fhNtracks->Fill(GetReader()->GetTrackMultiplicity()) ;
- if(GetDebug() > 0) printf("AliAnaChargedParticles::MakeAnalysisFillHistograms() - aod branch entries %d\n", naod);
+
+ if(GetDebug() > 0)
+ printf("AliAnaChargedParticles::MakeAnalysisFillHistograms() - aod branch entries %d\n", naod);
+
for(Int_t iaod = 0; iaod < naod ; iaod++){
AliAODPWG4Particle* tr = (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod));
fhPt->Fill(tr->Pt());
- fhPhi->Fill(tr->Pt(), tr->Phi());
- fhEta->Fill(tr->Pt(), tr->Eta());
- //for charge information
- AliVTrack * track = (AliVTrack*) (GetCTSTracks()->At(iaod));
- if(track->Charge()>0)fhPtEtaPhiPos->Fill(tr->Pt(), tr->Eta(),tr->Phi());
- if(track->Charge()<0)fhPtEtaPhiNeg->Fill(tr->Pt(), tr->Eta(),tr->Phi());
+
+ if(tr->GetChargedBit()){
+ fhPhiPos ->Fill(tr->Pt(), tr->Phi());
+ fhEtaPhiPos->Fill(tr->Eta(),tr->Phi());
+ }
+ else{
+ fhEtaNeg ->Fill(tr->Pt(), tr->Eta());
+ fhEtaPhiNeg->Fill(tr->Eta(),tr->Phi());
+ }
if(IsDataMC()){
//Play with the MC stack if available
mompdg =TMath::Abs(aodmom->GetPdgCode());
}
-
if(mompdg==211){
- fhPtPion->Fill(tr->Pt());
+ fhPtPion ->Fill(tr->Pt());
fhPhiPion->Fill(tr->Pt(), tr->Phi());
fhEtaPion->Fill(tr->Pt(), tr->Eta());
}
else if(mompdg==2212){
- fhPtProton->Fill(tr->Pt());
+ fhPtProton ->Fill(tr->Pt());
fhPhiProton->Fill(tr->Pt(), tr->Phi());
fhEtaProton->Fill(tr->Pt(), tr->Eta());
}
else if(mompdg==321){
- fhPtKaon->Fill(tr->Pt());
+ fhPtKaon ->Fill(tr->Pt());
fhPhiKaon->Fill(tr->Pt(), tr->Phi());
fhEtaKaon->Fill(tr->Pt(), tr->Eta());
}
else if(mompdg==11){
- fhPtElectron->Fill(tr->Pt());
+ fhPtElectron ->Fill(tr->Pt());
fhPhiElectron->Fill(tr->Pt(), tr->Phi());
fhEtaElectron->Fill(tr->Pt(), tr->Eta());
}
else {
//printf("unknown pdg %d\n",mompdg);
- fhPtUnknown->Fill(tr->Pt());
+ fhPtUnknown ->Fill(tr->Pt());
fhPhiUnknown->Fill(tr->Pt(), tr->Phi());
fhEtaUnknown->Fill(tr->Pt(), tr->Eta());
}
+
}//Work with stack also
}// aod branch loop
ClassImp(AliAnaParticleHadronCorrelation)
-//____________________________________________________________________________
+//___________________________________________________________________
AliAnaParticleHadronCorrelation::AliAnaParticleHadronCorrelation():
AliAnaPartCorrBaseClass(),
- fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.), fSelectIsolated(0),
- fMakeSeveralUE(0),
- fUeDeltaPhiMaxCut(0.), fUeDeltaPhiMinCut(0.),
- fPi0AODBranchName(""),fNeutralCorr(0), fPi0Trigger(0),
- fMakeAbsoluteLeading(0), fLeadingTriggerIndex(-1),
- fNTriggerPtBins(0),
- fhPtLeading(0),fhPhiLeading(0),fhEtaLeading(0),
- fhDeltaPhiDeltaEtaCharged(0),
- fhPhiCharged(0), fhEtaCharged(0),
- fhDeltaPhiCharged(0),
- fhDeltaEtaCharged(0),
- fhDeltaPhiChargedPt(0),
- fhDeltaPhiUeChargedPt(0),
- fhPtImbalanceCharged(0),
- fhPtImbalanceUeCharged(0),
- fhPtImbalancePosCharged(0),fhPtImbalanceNegCharged(0),
- fhPtHbpCharged(0), fhPtHbpUeCharged(0),
- fhDeltaPhiUeLeftCharged(0),fhDeltaPhiUeRightCharged(0),
- fhPtImbalanceUeLeftCharged(0),fhPtImbalanceUeRightCharged(0),
- fhPtHbpUeLeftCharged(0),fhPtHbpUeRightCharged(0),
- fhPtTrigPout(0), fhPtAssocDeltaPhi(0),
- fhPtTrigCharged(0),
- fhTrigDeltaPhiCharged(0x0), fhTrigDeltaEtaCharged(0x0),fhTrigCorr(0x0),fhTrigUeCorr(0x0),
+ fDeltaPhiMaxCut(0.), fDeltaPhiMinCut(0.),
+ fSelectIsolated(0), fMakeSeveralUE(0),
+ fUeDeltaPhiMaxCut(0.), fUeDeltaPhiMinCut(0.),
+ fPi0AODBranchName(""), fNeutralCorr(0),
+ fPi0Trigger(0), fMakeAbsoluteLeading(0),
+ fLeadingTriggerIndex(-1),
+ fNAssocPtBins(0), fAssocPtBinLimit(),
+ //Histograms
+ fhPtLeading(0), fhPhiLeading(0),
+ fhEtaLeading(0), fhDeltaPhiDeltaEtaCharged(0),
+ fhPhiCharged(0), fhEtaCharged(0),
+ fhDeltaPhiCharged(0), fhDeltaEtaCharged(0),
+ fhDeltaPhiChargedPt(0), fhDeltaPhiUeChargedPt(0),
+ fhPtImbalanceCharged(0), fhPtImbalanceUeCharged(0),
+ fhPtImbalancePosCharged(0), fhPtImbalanceNegCharged(0),
+ fhPtHbpCharged(0), fhPtHbpUeCharged(0),
+ fhDeltaPhiUeLeftCharged(0), fhDeltaPhiUeRightCharged(0),
+ fhPtImbalanceUeLeftCharged(0), fhPtImbalanceUeRightCharged(0),
+ fhPtHbpUeLeftCharged(0), fhPtHbpUeRightCharged(0),
+ fhPtTrigPout(0), fhPtTrigCharged(0),
+ fhTrigDeltaPhiCharged(0x0), fhTrigDeltaEtaCharged(0x0),
+ fhTrigCorr(0x0), fhTrigUeCorr(0x0),
+ fhAssocPt(0), fhAssocPtBkg(0),
+ fhDeltaPhiAssocPtBin(0), fhDeltaPhiBradAssocPtBin(0),
+ fhXEAssocPtBin(0),
fhDeltaPhiDeltaEtaNeutral(0),
- fhPhiNeutral(0), fhEtaNeutral(0),
- fhDeltaPhiNeutral(0), fhDeltaEtaNeutral(0),
- fhDeltaPhiNeutralPt(0),fhDeltaPhiUeNeutralPt(0),
- fhPtImbalanceNeutral(0),fhPtImbalanceUeNeutral(0),
- fhPtHbpNeutral(0), fhPtHbpUeNeutral(0),
- fhDeltaPhiUeLeftNeutral(0),fhDeltaPhiUeRightNeutral(0),
- fhPtImbalanceUeLeftNeutral(0),fhPtImbalanceUeRightNeutral(0),
- fhPtHbpUeLeftNeutral(0),fhPtHbpUeRightNeutral(0),
+ fhPhiNeutral(0), fhEtaNeutral(0),
+ fhDeltaPhiNeutral(0), fhDeltaEtaNeutral(0),
+ fhDeltaPhiNeutralPt(0), fhDeltaPhiUeNeutralPt(0),
+ fhPtImbalanceNeutral(0), fhPtImbalanceUeNeutral(0),
+ fhPtHbpNeutral(0), fhPtHbpUeNeutral(0),
+ fhDeltaPhiUeLeftNeutral(0), fhDeltaPhiUeRightNeutral(0),
+ fhPtImbalanceUeLeftNeutral(0), fhPtImbalanceUeRightNeutral(0),
+ fhPtHbpUeLeftNeutral(0), fhPtHbpUeRightNeutral(0),
fhPtPi0DecayRatio(0),
- fhDeltaPhiDecayCharged(0),
- fhPtImbalanceDecayCharged(0),
- fhDeltaPhiDecayNeutral(0),
- fhPtImbalanceDecayNeutral(0),
+ fhDeltaPhiDecayCharged(0), fhPtImbalanceDecayCharged(0),
+ fhDeltaPhiDecayNeutral(0), fhPtImbalanceDecayNeutral(0),
fh2phiLeadingParticle(0x0),
fhMCLeadingCount(0),
- fhMCEtaCharged(0),
- fhMCPhiCharged(0),
- fhMCDeltaEtaCharged(0),
- fhMCDeltaPhiCharged(0x0),
- fhMCDeltaPhiDeltaEtaCharged(0),
- fhMCDeltaPhiChargedPt(0),
+ fhMCEtaCharged(0), fhMCPhiCharged(0),
+ fhMCDeltaEtaCharged(0), fhMCDeltaPhiCharged(0x0),
+ fhMCDeltaPhiDeltaEtaCharged(0), fhMCDeltaPhiChargedPt(0),
fhMCPtImbalanceCharged(0),
fhMCPtHbpCharged(0),
fhMCPtTrigPout(0),
InitParameters();
}
-//________________________________________________________________________
+//____________________________________________________________
+TObjString* AliAnaParticleHadronCorrelation::GetAnalysisCuts()
+{
+ //Save parameters used for analysis
+ TString parList ; //this will be list of parameters used for this analysis.
+ const Int_t buffersize = 560;
+ char onePar[buffersize] ;
+
+ snprintf(onePar,buffersize,"--- AliAnaPaticleHadronCorrelation ---\n") ;
+ parList+=onePar ;
+ snprintf(onePar,buffersize,"Phi trigger particle-Hadron < %3.2f ", fDeltaPhiMaxCut) ;
+ parList+=onePar ;
+ snprintf(onePar,buffersize,"Phi trigger particle-Hadron > %3.2f ", fDeltaPhiMinCut) ;
+ parList+=onePar ;
+ snprintf(onePar,buffersize,"Isolated Trigger? %d\n", fSelectIsolated) ;
+ parList+=onePar ;
+ snprintf(onePar,buffersize,"Phi trigger particle-UeHadron < %3.2f ", fUeDeltaPhiMaxCut) ;
+ parList+=onePar ;
+ snprintf(onePar,buffersize,"Phi trigger particle-UeHadron > %3.2f ", fUeDeltaPhiMinCut) ;
+ parList+=onePar ;
+ snprintf(onePar,buffersize,"Several UE? %d\n", fMakeSeveralUE) ;
+ parList+=onePar ;
+ snprintf(onePar,buffersize,"Name of AOD Pi0 Branch %s ",fPi0AODBranchName.Data());
+ parList+=onePar ;
+ snprintf(onePar,buffersize,"Do Decay-hadron correlation ? %d", fPi0Trigger) ;
+ parList+=onePar ;
+ snprintf(onePar,buffersize,"Select absolute leading for cluster triggers ? %d\n", fMakeAbsoluteLeading) ;
+ parList+=onePar ;
+ snprintf(onePar,buffersize,"Associated particle pt bins %d: ", fNAssocPtBins) ;
+ parList+=onePar ;
+ for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) {
+ snprintf(onePar,buffersize,"bin %d = [%2.1f,%2.1f];", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ;
+ }
+ parList+=onePar ;
+
+ //Get parameters set in base class.
+ parList += GetBaseParametersList() ;
+
+ //Get parameters set in PID class.
+ //parList += GetCaloPID()->GetPIDParametersList() ;
+
+ //Get parameters set in FiducialCut class (not available yet)
+ //parlist += GetFidCut()->GetFidCutParametersList()
+
+ return new TObjString(parList) ;
+
+}
+
+//________________________________________________________________
TList * AliAnaParticleHadronCorrelation::GetCreateOutputObjects()
{
TList * outputContainer = new TList() ;
outputContainer->SetName("CorrelationHistos") ;
- Int_t nptbins = GetHistoPtBins();
- Int_t nphibins = GetHistoPhiBins();
- Int_t netabins = GetHistoEtaBins();
- Float_t ptmax = GetHistoPtMax();
- Float_t phimax = GetHistoPhiMax();
- Float_t etamax = GetHistoEtaMax();
- Float_t ptmin = GetHistoPtMin();
- Float_t phimin = GetHistoPhiMin();
- Float_t etamin = GetHistoEtaMin();
+ Int_t nptbins = GetHistoPtBins(); Int_t nphibins = GetHistoPhiBins(); Int_t netabins = GetHistoEtaBins();
+ Float_t ptmax = GetHistoPtMax(); Float_t phimax = GetHistoPhiMax(); Float_t etamax = GetHistoEtaMax();
+ Float_t ptmin = GetHistoPtMin(); Float_t phimin = GetHistoPhiMin(); Float_t etamin = GetHistoEtaMin();
fhPtLeading = new TH1F ("hPtLeading","p_T distribution of leading particles", nptbins,ptmin,ptmax);
fhPtLeading->SetXTitle("p_{T}^{trig} (GeV/c)");
fhPtTrigPout->SetYTitle("p_{out} (GeV/c)");
fhPtTrigPout->SetXTitle("p_{T trigger} (GeV/c)");
- fhPtAssocDeltaPhi =
- new TH2F("fhPtAssocDeltaPhi"," charged hadrons vs. delta phi",
- nptbins,ptmin,ptmax,140,-2.,5.);
- fhPtAssocDeltaPhi->SetXTitle("p_{T h^{#pm}} (GeV/c)");
- fhPtAssocDeltaPhi->SetYTitle("#Delta #phi (GeV/c)");
-
fhPtTrigCharged =
new TH2F("PtTrigCharged","trgger and charged tracks pt distribution",
nptbins,ptmin,ptmax,nptbins,ptmin,ptmax);
outputContainer->Add(fhPtHbpCharged) ;
outputContainer->Add(fhPtHbpUeCharged) ;
outputContainer->Add(fhPtTrigPout) ;
- outputContainer->Add(fhPtAssocDeltaPhi) ;
outputContainer->Add(fhPtTrigCharged) ;
if(DoEventSelect()){
Int_t nMultiBins = GetMultiBin();
fhTrigDeltaPhiCharged = new TH2F*[nMultiBins] ;
fhTrigDeltaEtaCharged = new TH2F*[nMultiBins] ;
- fhTrigCorr = new TH2F*[nMultiBins];
- fhTrigUeCorr = new TH2F*[nMultiBins];
+ fhTrigCorr = new TH2F*[nMultiBins];
+ fhTrigUeCorr = new TH2F*[nMultiBins];
for(Int_t im=0; im<nMultiBins; im++){
fhTrigDeltaPhiCharged[im] = new TH2F
(Form("fhTrigDeltaPhiCharged_%d",im),Form("fhTrigDeltaPhiCharged_%d",im), nptbins,ptmin,ptmax, 140,-2.,5.);
}
}
- for(Int_t i = 0 ; i < fNTriggerPtBins ; i++){
- fhTrigPt[i] = new TH1F(Form("fhTrigPt%1.f_%1.f", fTriggerPtBinLimit[i], fTriggerPtBinLimit[i+1]),
- Form("fhTrigPt%1.f_%1.f", fTriggerPtBinLimit[i], fTriggerPtBinLimit[i+1]),
- 20, fTriggerPtBinLimit[i], fTriggerPtBinLimit[i+1]);
- fhDphiTrigPtAssocPt[i] = new TH1F(Form("fhDphiTrigPtAssocPt%1.f_%1.f", fTriggerPtBinLimit[i], fTriggerPtBinLimit[i+1]),
- Form("fhDphiTrigPtAssocPt%1.f_%1.f", fTriggerPtBinLimit[i], fTriggerPtBinLimit[i+1]),
- 288, -1.0/3.0, 5.0/3.0);
- fhAssocPtBkg[i] = new TH1F(Form("fhAssocPtBkg%1.f_%1.f", fTriggerPtBinLimit[i], fTriggerPtBinLimit[i+1]),
- Form("fhAssocPtBkg%1.f_%1.f", fTriggerPtBinLimit[i], fTriggerPtBinLimit[i+1]),
- 600, 0., 30.0);
- fhXE[i] = new TH1F(Form("fhXETrigPt%1.f_%1.f", fTriggerPtBinLimit[i], fTriggerPtBinLimit[i+1]),
- Form("fhXETrigPt%1.f_%1.f", fTriggerPtBinLimit[i], fTriggerPtBinLimit[i+1]),
- 50, 0.0, 2.0);
- outputContainer->Add(fhTrigPt[i]) ;
- outputContainer->Add(fhDphiTrigPtAssocPt[i]) ;
- outputContainer->Add(fhAssocPtBkg[i]);
- outputContainer->Add(fhXE[i]);
+ fhAssocPt = new TH2F("fhAssocPt", " Trigger p_{T} vs associated hadron p_{T}",
+ nptbins, ptmin, ptmax,nptbins,ptmin,ptmax);
+ fhAssocPt->SetXTitle("p_{T trigger}");
+ fhAssocPt->SetYTitle("p_{T associated}");
+ outputContainer->Add(fhAssocPt) ;
+
+ fhAssocPtBkg = new TH2F("fhAssocPtBkg", " 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}");
+ outputContainer->Add(fhAssocPtBkg) ;
+
+ fhDeltaPhiAssocPtBin = new TH2F*[fNAssocPtBins] ;
+ fhDeltaPhiBradAssocPtBin = new TH2F*[fNAssocPtBins] ;
+ fhXEAssocPtBin = new TH2F*[fNAssocPtBins] ;
+ for(Int_t i = 0 ; i < fNAssocPtBins ; i++){
+ fhDeltaPhiAssocPtBin[i] = new TH2F(Form("fhDeltaPhiPtAssocPt%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");
+
+ fhDeltaPhiBradAssocPtBin[i] = new TH2F(Form("fhDeltaPhiBradPtAssocPt%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");
+
+
+ fhXEAssocPtBin[i] = new TH2F(Form("fhXEAssocPtBin%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,50, 0.0, 2.0);
+ fhXEAssocPtBin[i]->SetXTitle("p_{T trigger}");
+ fhXEAssocPtBin[i]->SetYTitle("x_{E}");
+
+ outputContainer->Add(fhDeltaPhiAssocPtBin[i]) ;
+ outputContainer->Add(fhDeltaPhiBradAssocPtBin[i]) ;
+ outputContainer->Add(fhXEAssocPtBin[i]);
}
if(fPi0Trigger){
}
-//____________________________________________________________________________
+//____________________________________________________
void AliAnaParticleHadronCorrelation::InitParameters()
{
fPi0Trigger = kFALSE ;
fMakeAbsoluteLeading = kTRUE;
- fNTriggerPtBins = 6 ;
- fTriggerPtBinLimit[0] = 4.;
- fTriggerPtBinLimit[1] = 5.;
- fTriggerPtBinLimit[2] = 6.;
- fTriggerPtBinLimit[3] = 7.;
- fTriggerPtBinLimit[4] = 8.;
- fTriggerPtBinLimit[5] =10.;
- fTriggerPtBinLimit[6] =12.;
- fTriggerPtBinLimit[7] =15.;
- fTriggerPtBinLimit[8] =20.;
- fTriggerPtBinLimit[9] =25.;
- fTriggerPtBinLimit[6] =100.;
+ fNAssocPtBins = 7 ;
+ fAssocPtBinLimit[0] = 2. ;
+ fAssocPtBinLimit[1] = 4. ;
+ fAssocPtBinLimit[2] = 6. ;
+ fAssocPtBinLimit[3] = 8. ;
+ fAssocPtBinLimit[4] = 10. ;
+ fAssocPtBinLimit[5] = 13. ;
+ fAssocPtBinLimit[6] = 16. ;
+ fAssocPtBinLimit[7] = 20. ;
+ fAssocPtBinLimit[8] = 100.;
+ fAssocPtBinLimit[9] = 200.;
}
-//__________________________________________________________________
-void AliAnaParticleHadronCorrelation::Print(const Option_t * opt) const
-{
-
- //Print some relevant parameters set for the analysis
- if(! opt)
- return;
-
- printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
- AliAnaPartCorrBaseClass::Print(" ");
-
- printf("Phi trigger particle-Hadron < %3.2f\n", fDeltaPhiMaxCut) ;
- printf("Phi trigger particle-Hadron > %3.2f\n", fDeltaPhiMinCut) ;
- printf("Isolated Trigger? %d\n", fSelectIsolated) ;
- printf("Phi trigger particle-UeHadron < %3.2f\n", fUeDeltaPhiMaxCut) ;
- printf("Phi trigger particle-UeHadron > %3.2f\n", fUeDeltaPhiMinCut) ;
- printf("Several UE? %d\n", fMakeSeveralUE) ;
- printf("Name of AOD Pi0 Branch %s \n",fPi0AODBranchName.Data());
- printf("Do Decay-hadron correlation ? %d\n", fPi0Trigger) ;
- printf("Select absolute leading for cluster triggers ? %d\n", fMakeAbsoluteLeading) ;
- printf("Trigger pt bins %d\n", fNTriggerPtBins) ;
- for (Int_t ibin = 0; ibin<fNTriggerPtBins; ibin++) {
- printf("\t bin %d = [%2.1f,%2.1f]\n", ibin, fTriggerPtBinLimit[ibin], fTriggerPtBinLimit[ibin+1]) ;
- }
-
-}
-
-//__________________________________________________________________
-TObjString* AliAnaParticleHadronCorrelation::GetAnalysisCuts()
-{
- //Save parameters used for analysis
- TString parList ; //this will be list of parameters used for this analysis.
- const Int_t buffersize = 560;
- char onePar[buffersize] ;
-
- snprintf(onePar,buffersize,"--- AliAnaPaticleHadronCorrelation ---\n") ;
- parList+=onePar ;
- snprintf(onePar,buffersize,"Phi trigger particle-Hadron < %3.2f ", fDeltaPhiMaxCut) ;
- parList+=onePar ;
- snprintf(onePar,buffersize,"Phi trigger particle-Hadron > %3.2f ", fDeltaPhiMinCut) ;
- parList+=onePar ;
- snprintf(onePar,buffersize,"Isolated Trigger? %d\n", fSelectIsolated) ;
- parList+=onePar ;
- snprintf(onePar,buffersize,"Phi trigger particle-UeHadron < %3.2f ", fUeDeltaPhiMaxCut) ;
- parList+=onePar ;
- snprintf(onePar,buffersize,"Phi trigger particle-UeHadron > %3.2f ", fUeDeltaPhiMinCut) ;
- parList+=onePar ;
- snprintf(onePar,buffersize,"Several UE? %d\n", fMakeSeveralUE) ;
- parList+=onePar ;
- snprintf(onePar,buffersize,"Name of AOD Pi0 Branch %s ",fPi0AODBranchName.Data());
- parList+=onePar ;
- snprintf(onePar,buffersize,"Do Decay-hadron correlation ? %d", fPi0Trigger) ;
- parList+=onePar ;
- snprintf(onePar,buffersize,"Select absolute leading for cluster triggers ? %d\n", fMakeAbsoluteLeading) ;
- parList+=onePar ;
- snprintf(onePar,buffersize,"Trigger pt bins %d: ", fNTriggerPtBins) ;
- parList+=onePar ;
- for (Int_t ibin = 0; ibin<fNTriggerPtBins; ibin++) {
- snprintf(onePar,buffersize,"bin %d = [%2.1f,%2.1f];", ibin, fTriggerPtBinLimit[ibin], fTriggerPtBinLimit[ibin+1]) ;
- }
- parList+=onePar ;
-
- //Get parameters set in base class.
- parList += GetBaseParametersList() ;
-
- //Get parameters set in PID class.
- //parList += GetCaloPID()->GetPIDParametersList() ;
-
- //Get parameters set in FiducialCut class (not available yet)
- //parlist += GetFidCut()->GetFidCutParametersList()
-
- return new TObjString(parList) ;
-
-}
-
-
-//____________________________________________________________________________
+//__________________________________________________________
void AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD()
{
//Particle-Hadron Correlation Analysis, fill AODs
}
-//____________________________________________________________________________
+//_________________________________________________________________
void AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms()
{
//Particle-Hadron Correlation Analysis, fill histograms
if (TMath::Abs(GetVertex(evt)[2]) > GetZvertexCut())
return ;
}
+
//check if the particle is isolated or if we want to take the isolation into account
if(OnlyIsolated() && !particle->IsIsolated()) continue;
if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n");
}
-//____________________________________________________________________________
+//_________________________________________________________________________________________________________
Bool_t AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle,
TObjArray* pl, const Bool_t bFillHisto)
{
Double_t phiTrig = aodParticle->Phi();
Double_t etaTrig = aodParticle->Eta();
Double_t ptTrig = aodParticle->Pt();
- Int_t trBin = -1;
- for(Int_t i = 0 ; i < fNTriggerPtBins ; i++){
- if(ptTrig > fTriggerPtBinLimit[i] && ptTrig < fTriggerPtBinLimit[i+1]) trBin= i;
- }
- if(trBin==-1) return kFALSE;
- if(OnlyIsolated() && aodParticle->IsIsolated()){
- fhTrigPt[trBin]->Fill(ptTrig);
- }
Double_t pt = -100. ;
Double_t px = -100. ;
pout = pt*TMath::Sin(deltaPhi) ;
rat = pt/ptTrig ;
xE =-pt/ptTrig*TMath::Cos(deltaPhi);
- if(xE > 0 )cosi = TMath::Log(1/xE);
+ cosi =-100;
+ if(xE > 0 ) cosi = TMath::Log(1/xE);
else {
- printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - xE=%f negative or null, check!, pT %f, ptTrig %f\n", xE,pt,ptTrig);
- return kFALSE;
+ if(GetDebug() > 1 ) printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - xE=%f negative or null, check!, pT %f, ptTrig %f\n", xE,pt,ptTrig);
+ //return kFALSE; // shbould return or continue?
}
if(GetDebug() > 2)
// Fill Histograms
if(bFillHisto){
- if(OnlyIsolated() && aodParticle->IsIsolated()){ //FILIP, if only wantisolated histograms
- if(TMath::Cos(deltaPhi)<0){//away side
- fhXE[trBin]->Fill(xE) ;
- }
-
- //Hardcoded values, BAD, FIXME
- Double_t dphiBrad = atan2(sin(deltaPhiOrg), cos(deltaPhiOrg))/TMath::Pi();//-1 to 1
- if(TMath::Abs(dphiBrad)>0.325 && TMath::Abs(dphiBrad)<0.475){
- fhAssocPtBkg[trBin]->Fill(pt);
- }
- if(dphiBrad<-1./3) dphiBrad += 2;
- fhDphiTrigPtAssocPt[trBin]->Fill(dphiBrad);
+ Int_t assocBin = -1;
+ for(Int_t i = 0 ; i < fNAssocPtBins ; i++){
+ if(ptTrig > fAssocPtBinLimit[i] && ptTrig < fAssocPtBinLimit[i+1]) assocBin= i;
}
- fhEtaCharged->Fill(pt,eta);
- fhPhiCharged->Fill(pt,phi);
+ fhAssocPt->Fill(ptTrig,pt);
+
+ if(TMath::Cos(deltaPhi) < 0 && assocBin >= 0 )//away side
+ fhXEAssocPtBin[assocBin]->Fill(ptTrig, xE) ;
+
+ //Hardcoded values, BAD, FIXME
+ Double_t dphiBrad = atan2(sin(deltaPhiOrg), cos(deltaPhiOrg))/TMath::Pi();//-1 to 1
+ if(TMath::Abs(dphiBrad)>0.325 && TMath::Abs(dphiBrad)<0.475){
+ fhAssocPtBkg->Fill(ptTrig, pt);
+ }
+
+ if(dphiBrad<-1./3) dphiBrad += 2;
+ if(assocBin>=0){
+ fhDeltaPhiBradAssocPtBin[assocBin]->Fill(ptTrig, dphiBrad);
+ fhDeltaPhiAssocPtBin [assocBin]->Fill(ptTrig, deltaPhi);
+ }
+
+ fhEtaCharged ->Fill(pt,eta);
+ fhPhiCharged ->Fill(pt,phi);
fhDeltaEtaCharged->Fill(ptTrig,aodParticle->Eta()-eta);
fhDeltaPhiCharged->Fill(ptTrig, deltaPhi);
fhDeltaPhiDeltaEtaCharged->Fill(deltaPhi,aodParticle->Eta()-eta);
- fhPtAssocDeltaPhi->Fill(pt, deltaPhi);
if(GetDebug() > 2 ) printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Selected charge for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta);
//fill different multiplicity histogram
if( (deltaPhi > fDeltaPhiMinCut) && ( deltaPhi < fDeltaPhiMaxCut) ) {
fhDeltaPhiChargedPt->Fill(pt,deltaPhi);
fhPtImbalanceCharged->Fill(ptTrig,xE);
- fhPtHbpCharged->Fill(ptTrig,cosi);
- fhPtTrigPout->Fill(ptTrig, pout) ;
+ fhPtHbpCharged ->Fill(ptTrig, cosi);
+ fhPtTrigPout ->Fill(ptTrig, pout) ;
fhPtTrigCharged->Fill(ptTrig, pt) ;
- if(track->Charge()>0) fhPtImbalancePosCharged->Fill(ptTrig,xE) ;
- else fhPtImbalanceNegCharged->Fill(ptTrig,xE) ;
+ if(track->Charge() > 0) fhPtImbalancePosCharged->Fill(ptTrig,xE) ;
+ else fhPtImbalanceNegCharged->Fill(ptTrig,xE) ;
//fill different multiplicity histogram
if(DoEventSelect()){
for(Int_t im=0; im<GetMultiBin(); im++){
}
-//____________________________________________________________________________
+//________________________________________________________________________________________________________________
Bool_t AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4ParticleCorrelation * const aodParticle,
TObjArray* pi0list, const Bool_t bFillHisto)
{
return kTRUE;
}
-//____________________________________________________________________________
+//_________________________________________________________________________________________________________
void AliAnaParticleHadronCorrelation::MakeMCChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle)
{
// Charged Hadron Correlation Analysis with MC information
}// AOD MC
}
-//____________________________________________________________________________
-void AliAnaParticleHadronCorrelation::SetNTriggerPtBins(Int_t n)
+//_____________________________________________________________________
+void AliAnaParticleHadronCorrelation::Print(const Option_t * opt) const
+{
+
+ //Print some relevant parameters set for the analysis
+ if(! opt)
+ return;
+
+ printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
+ AliAnaPartCorrBaseClass::Print(" ");
+
+ printf("Phi trigger particle-Hadron < %3.2f\n", fDeltaPhiMaxCut) ;
+ printf("Phi trigger particle-Hadron > %3.2f\n", fDeltaPhiMinCut) ;
+ printf("Isolated Trigger? %d\n", fSelectIsolated) ;
+ printf("Phi trigger particle-UeHadron < %3.2f\n", fUeDeltaPhiMaxCut) ;
+ printf("Phi trigger particle-UeHadron > %3.2f\n", fUeDeltaPhiMinCut) ;
+ printf("Several UE? %d\n", fMakeSeveralUE) ;
+ printf("Name of AOD Pi0 Branch %s \n",fPi0AODBranchName.Data());
+ printf("Do Decay-hadron correlation ? %d\n", fPi0Trigger) ;
+ printf("Select absolute leading for cluster triggers ? %d\n", fMakeAbsoluteLeading) ;
+ printf("Trigger pt bins %d\n", fNAssocPtBins) ;
+ for (Int_t ibin = 0; ibin<fNAssocPtBins; ibin++) {
+ printf("\t bin %d = [%2.1f,%2.1f]\n", ibin, fAssocPtBinLimit[ibin], fAssocPtBinLimit[ibin+1]) ;
+ }
+
+}
+
+//____________________________________________________________
+void AliAnaParticleHadronCorrelation::SetNAssocPtBins(Int_t n)
{
// Set number of bins
+ fNAssocPtBins = n ;
+
+
if(n < 10 && n > 0)
{
- fNTriggerPtBins = n ;
+ fNAssocPtBins = n ;
}
else
{
printf("n = larger than 9 or too small, set to 9 \n");
- fNTriggerPtBins = 9;
+ fNAssocPtBins = 9;
}
}
-//____________________________________________________________________________
-void AliAnaParticleHadronCorrelation::SetTriggerPtBinLimit(Int_t ibin, Float_t pt)
+//______________________________________________________________________________
+void AliAnaParticleHadronCorrelation::SetAssocPtBinLimit(Int_t ibin, Float_t pt)
{
// Set the list of limits for the trigger pt bins
- if(ibin <= fNTriggerPtBins || ibin >= 0)
+ if(ibin <= fNAssocPtBins || ibin >= 0)
{
- fTriggerPtBinLimit[ibin] = pt ;
+ fAssocPtBinLimit[ibin] = pt ;
}
else {
- printf("AliAnaParticleHadronCorrelation::SetTriggerPtBinLimit() - bin number too large %d > %d or small, nothing done\n", ibin, fNTriggerPtBins) ;
+ printf("AliAnaParticleHadronCorrelation::SetAssocPtBinLimit() - bin number too large %d > %d or small, nothing done\n", ibin, fNAssocPtBins) ;
}
}