From a3aebfff4a53f81498544cdd41e7a563056ef8a5 Mon Sep 17 00:00:00 2001 From: gconesab Date: Thu, 30 Apr 2009 12:00:14 +0000 Subject: [PATCH] 1) Reference arrays with tracks and clusters before defined in the AliAODPWG4ParticleCorrelatio now will are kept in a TList, the arrays are declared and defined in the corresponding subtask. In this way we can execute different subtasks (Isolation+Hadron Correlation+Jet Correlation) with the same task . 2) The name of the histograms has changed. The name will begin with a common string for each subtask, for example all the histograms produced by AliAnaPhoton now begin with AnaPhoton_OldName (ex: AnaPhoton_hPt). 3) AliCaloTrackESDReader: Bug in the filling of the track matched indeces corrected. 4) AliAnaPhoton: Possibility to switch on/off the rejection of track matched clusters when PID option is on. 5) AddTaskPartCorr.C: Now it executes the following analysis executing only once the reader: Pi0 invariant mass, photon isolation, photon correlation with hadrons and photon correlation with jets. --- PWG4/PartCorrBase/AliAODPWG4Particle.cxx | 44 +-- PWG4/PartCorrBase/AliAODPWG4Particle.h | 66 ++-- .../AliAODPWG4ParticleCorrelation.cxx | 75 ++-- .../AliAODPWG4ParticleCorrelation.h | 65 +--- PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx | 45 ++- PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h | 20 +- PWG4/PartCorrBase/AliAnaPartCorrMaker.cxx | 16 +- PWG4/PartCorrBase/AliCaloTrackAODReader.cxx | 14 +- PWG4/PartCorrBase/AliCaloTrackESDReader.cxx | 68 ++-- PWG4/PartCorrBase/AliCaloTrackMCReader.cxx | 8 +- PWG4/PartCorrBase/AliFidutialCut.cxx | 2 +- PWG4/PartCorrBase/AliIsolationCut.cxx | 32 +- PWG4/PartCorrBase/AliIsolationCut.h | 2 +- PWG4/PartCorrBase/AliMCAnalysisUtils.cxx | 23 +- .../PartCorrBase/AliNeutralMesonSelection.cxx | 2 +- PWG4/PartCorrDep/AliAnaChargedParticles.cxx | 51 +-- PWG4/PartCorrDep/AliAnaExample.cxx | 42 ++- .../AliAnaParticleHadronCorrelation.cxx | 153 ++++---- .../AliAnaParticleHadronCorrelation.h | 4 +- PWG4/PartCorrDep/AliAnaParticleIsolation.cxx | 198 ++++++----- PWG4/PartCorrDep/AliAnaParticleIsolation.h | 2 +- .../AliAnaParticleJetFinderCorrelation.cxx | 63 ++-- .../AliAnaParticleJetFinderCorrelation.h | 17 +- ...liAnaParticleJetLeadingConeCorrelation.cxx | 233 ++++++++----- .../AliAnaParticleJetLeadingConeCorrelation.h | 1 - .../AliAnaParticlePartonCorrelation.cxx | 69 ++-- PWG4/PartCorrDep/AliAnaPhoton.cxx | 92 ++--- PWG4/PartCorrDep/AliAnaPhoton.h | 7 +- PWG4/PartCorrDep/AliAnaPi0.cxx | 26 +- PWG4/PartCorrDep/AliAnaPi0EbE.cxx | 54 +-- PWG4/PartCorrDep/AliAnaPi0EbE.h | 1 - PWG4/macros/AddTaskPartCorr.C | 330 +++++------------- PWG4/macros/ConfigAnalysisPhoton.C | 1 + 33 files changed, 913 insertions(+), 913 deletions(-) diff --git a/PWG4/PartCorrBase/AliAODPWG4Particle.cxx b/PWG4/PartCorrBase/AliAODPWG4Particle.cxx index 92ed8cd40be..ebb6b029a5a 100755 --- a/PWG4/PartCorrBase/AliAODPWG4Particle.cxx +++ b/PWG4/PartCorrBase/AliAODPWG4Particle.cxx @@ -83,8 +83,9 @@ AliAODPWG4Particle::~AliAODPWG4Particle() //______________________________________________________________________________ AliAODPWG4Particle::AliAODPWG4Particle(const AliAODPWG4Particle& part) : AliVParticle(part), - fMomentum(0), fPdg(part.fPdg), fTag(part.fTag), fLabel(part.fLabel), fCaloLabel(), fTrackLabel(), - fDetector(part.fDetector),fDisp(part.fDisp), fTof(part.fTof), fCharged(part.fCharged), fBadDist(part.fBadDist) + fMomentum(0), fPdg(part.fPdg), fTag(part.fTag), fLabel(part.fLabel), + fCaloLabel(), fTrackLabel(), fDetector(part.fDetector),fDisp(part.fDisp), + fTof(part.fTof), fCharged(part.fCharged), fBadDist(part.fBadDist) { // Copy constructor @@ -102,20 +103,21 @@ AliAODPWG4Particle& AliAODPWG4Particle::operator=(const AliAODPWG4Particle& part // Assignment operator if(this!=&part) { - fPdg = part.fPdg; - fTag = part.fTag; + fPdg = part.fPdg; + fTag = part.fTag; fLabel = part.fLabel; + fCaloLabel [0] = part.fCaloLabel[0]; fCaloLabel [1] = part.fCaloLabel[1]; fTrackLabel[0] = part.fTrackLabel[0]; fTrackLabel[1] = part.fTrackLabel[1]; - fDetector =part.fDetector; - - fDisp = part.fDisp; - fTof = part.fTof; - fCharged = part.fCharged; - fBadDist=part.fBadDist; - + + fDetector = part.fDetector; + fDisp = part.fDisp; + fTof = part.fTof; + fCharged = part.fCharged; + fBadDist = part.fBadDist; + if (fMomentum ) delete fMomentum; fMomentum = new TLorentzVector(*part.fMomentum); } @@ -150,15 +152,17 @@ void AliAODPWG4Particle::Print(Option_t* /*option*/) const { // Print information of all data members printf("Particle 4-vector:\n"); - printf(" E = %13.3f\n", E() ); - printf(" Px = %13.3f\n", Px()); - printf(" Py = %13.3f\n", Py()); + printf(" E = %13.3f", E() ); + printf(" Px = %13.3f", Px()); + printf(" Py = %13.3f", Py()); printf(" Pz = %13.3f\n", Pz()); - printf("TOF bit : %d\n",fTof); - printf("Charged bit : %d\n",fCharged); - printf("Dispersion bit : %d\n",fDisp); - printf("pdg : %d\n",fPdg); - printf("tag : %d\n",fTag); - printf("Trigger Detector : %s\n",fDetector.Data()); + printf("PID bits :\n"); + printf(" TOF : %d",fTof); + printf(" Charged : %d",fCharged); + printf(" Dispersion : %d\n",fDisp); + printf("PDG : %d\n",fPdg); + printf("Tag : %d\n",fTag); + printf("Dist. to bad channel : %d\n",fBadDist); + printf("Detector : %s\n",fDetector.Data()); } diff --git a/PWG4/PartCorrBase/AliAODPWG4Particle.h b/PWG4/PartCorrBase/AliAODPWG4Particle.h index e787de4edb1..0054c0dc6f0 100755 --- a/PWG4/PartCorrBase/AliAODPWG4Particle.h +++ b/PWG4/PartCorrBase/AliAODPWG4Particle.h @@ -54,48 +54,46 @@ class AliAODPWG4Particle : public AliVParticle { virtual const Double_t* PID() const { return NULL;} // - virtual Int_t GetPdg() const {return fPdg ; } - virtual Int_t GetTag() const {return fTag ; } - virtual Int_t GetLabel() const {return fLabel ; } - virtual Int_t GetCaloLabel (Int_t i) const {return fCaloLabel[i];} - virtual Int_t GetTrackLabel(Int_t i) const {return fTrackLabel[i];} - virtual TString GetDetector() const {return fDetector ; } - - virtual Bool_t GetDispBit(void) const {return fDisp;} - virtual Bool_t GetTOFBit(void) const {return fTof;} - virtual Bool_t GetChargedBit(void) const {return fCharged;} - virtual Int_t DistToBad() const {return fBadDist ;} + virtual Int_t GetPdg() const {return fPdg ; } + virtual Int_t GetTag() const {return fTag ; } + virtual Int_t GetLabel() const {return fLabel ; } + virtual Int_t GetCaloLabel (Int_t i) const {return fCaloLabel[i] ; } + virtual Int_t GetTrackLabel(Int_t i) const {return fTrackLabel[i] ; } + virtual TString GetDetector() const {return fDetector ; } + virtual Bool_t GetDispBit(void) const {return fDisp ; } + virtual Bool_t GetTOFBit(void) const {return fTof ; } + virtual Bool_t GetChargedBit(void) const {return fCharged ; } + virtual Int_t DistToBad() const {return fBadDist ; } - virtual void SetPdg(Int_t pdg) {fPdg = pdg ; } - virtual void SetTag(Int_t tag) {fTag = tag ; } - virtual void SetLabel(Int_t l) {fLabel = l ; } - virtual void SetCaloLabel (Int_t a, Int_t b) {fCaloLabel [0] = a; fCaloLabel [1] = b ; } - virtual void SetTrackLabel(Int_t a, Int_t b) {fTrackLabel[0] = a; fTrackLabel[1] = b ; } - virtual void SetDetector(TString d) {fDetector = d ; } + virtual void SetLabel(Int_t l) { fLabel = l ; } + virtual void SetCaloLabel (Int_t a, Int_t b) { fCaloLabel [0] = a; fCaloLabel [1] = b ; } + virtual void SetTrackLabel(Int_t a, Int_t b) { fTrackLabel[0] = a; fTrackLabel[1] = b ; } - virtual void SetDispBit(Bool_t chi2){fDisp = chi2 ;} - virtual void SetTOFBit(Bool_t tof){fTof = tof ;} - virtual void SetChargedBit(Bool_t ch){fCharged = ch; } - virtual void SetDistToBad(Int_t dist){fBadDist=dist;} + virtual void SetPdg(Int_t pdg) { fPdg = pdg ; } + virtual void SetTag(Int_t tag) { fTag = tag ; } + virtual void SetDetector(TString d) { fDetector = d ; } + virtual void SetDispBit(Bool_t disp) { fDisp = disp ; } + virtual void SetTOFBit(Bool_t tof) { fTof = tof ;} + virtual void SetChargedBit(Bool_t ch) { fCharged = ch ; } + virtual void SetDistToBad(Int_t dist) { fBadDist=dist ;} - TLorentzVector * Momentum() const {return fMomentum ; } - virtual void SetMomentum(TLorentzVector *lv) {fMomentum = lv ; } + TLorentzVector * Momentum() const { return fMomentum ; } + virtual void SetMomentum(TLorentzVector *lv) { fMomentum = lv ; } Bool_t IsPIDOK(const Int_t ipid, const Int_t pdgwanted) const; private: TLorentzVector* fMomentum; // Photon 4-momentum vector - Int_t fPdg; // id of particle - Int_t fTag; // tag of particle (decay, fragment, prompt photon) - Int_t fLabel; // MC label - Int_t fCaloLabel[2]; // CaloCluster index, 1 for photons, 2 for pi0. - Int_t fTrackLabel[2]; // Track lable, 1 for pions, 2 for conversion photons - TString fDetector; // Detector where particle was measured. - - Bool_t fDisp ; //Dispersion bit - Bool_t fTof ; //TOF bit - Bool_t fCharged ; //Charged bit - Int_t fBadDist ; //Distance to bad module in module units + Int_t fPdg ; // id of particle + Int_t fTag ; // tag of particle (decay, fragment, prompt photon) + Int_t fLabel ; // MC label + Int_t fCaloLabel[2]; // CaloCluster index, 1 for photons, 2 for pi0. + Int_t fTrackLabel[2]; // Track lable, 1 for pions, 2 for conversion photons + TString fDetector ; // Detector where particle was measured. + Bool_t fDisp ; //Dispersion bit + Bool_t fTof ; //TOF bit + Bool_t fCharged ; //Charged bit + Int_t fBadDist ; //Distance to bad module in module units ClassDef(AliAODPWG4Particle,1); }; diff --git a/PWG4/PartCorrBase/AliAODPWG4ParticleCorrelation.cxx b/PWG4/PartCorrBase/AliAODPWG4ParticleCorrelation.cxx index 421266a6a41..01e9837a9e3 100755 --- a/PWG4/PartCorrBase/AliAODPWG4ParticleCorrelation.cxx +++ b/PWG4/PartCorrBase/AliAODPWG4ParticleCorrelation.cxx @@ -32,10 +32,8 @@ ClassImp(AliAODPWG4ParticleCorrelation) //______________________________________________________________________________ AliAODPWG4ParticleCorrelation::AliAODPWG4ParticleCorrelation() : AliAODPWG4Particle(), fIsolated(kFALSE), - fRefTracks(new TRefArray()), fRefClusters(new TRefArray()), - fRefIsolationConeTracks(new TRefArray()), fRefIsolationConeClusters(new TRefArray()), - fRefBackgroundTracks(new TRefArray()), fRefBackgroundClusters(new TRefArray()), - fLeadingDetector(""), fLeading(), fCorrJet(), fCorrBkg(), fRefJet(0) + fLeadingDetector(""), fLeading(), fCorrJet(), fCorrBkg(), fRefJet(0), + fListOfRefArrays(new TList) { // constructor } @@ -43,11 +41,8 @@ ClassImp(AliAODPWG4ParticleCorrelation) //______________________________________________________________________________ AliAODPWG4ParticleCorrelation::AliAODPWG4ParticleCorrelation(Double_t px, Double_t py, Double_t pz, Double_t e): AliAODPWG4Particle(), fIsolated(kFALSE), - fRefTracks(new TRefArray()), fRefClusters(new TRefArray()), - fRefIsolationConeTracks(new TRefArray()), fRefIsolationConeClusters(new TRefArray()), - fRefBackgroundTracks(new TRefArray()), fRefBackgroundClusters(new TRefArray()), fLeadingDetector(""), fLeading(), fCorrJet(), - fCorrBkg(), fRefJet(0) + fCorrBkg(), fRefJet(0), fListOfRefArrays(new TList) { // constructor SetMomentum(new TLorentzVector(px, py, pz, e)); @@ -56,10 +51,7 @@ AliAODPWG4ParticleCorrelation::AliAODPWG4ParticleCorrelation(Double_t px, Double //______________________________________________________________________________ AliAODPWG4ParticleCorrelation::AliAODPWG4ParticleCorrelation(TLorentzVector & p): AliAODPWG4Particle(p), fIsolated(kFALSE), - fRefTracks(new TRefArray()), fRefClusters(new TRefArray()), - fRefIsolationConeTracks(new TRefArray()), fRefIsolationConeClusters(new TRefArray()), - fRefBackgroundTracks(new TRefArray()), fRefBackgroundClusters(new TRefArray()), - fLeadingDetector(""), fLeading(), fCorrJet(), fCorrBkg(),fRefJet(0) + fLeadingDetector(""), fLeading(), fCorrJet(), fCorrBkg(), fRefJet(0), fListOfRefArrays(new TList) { // constructor } @@ -67,10 +59,7 @@ AliAODPWG4ParticleCorrelation::AliAODPWG4ParticleCorrelation(TLorentzVector & p) //______________________________________________________________________________ AliAODPWG4ParticleCorrelation::AliAODPWG4ParticleCorrelation(AliAODPWG4Particle & p): AliAODPWG4Particle(p), fIsolated(kFALSE), - fRefTracks(new TRefArray()), fRefClusters(new TRefArray()), - fRefIsolationConeTracks(new TRefArray()), fRefIsolationConeClusters(new TRefArray()), - fRefBackgroundTracks(new TRefArray()), fRefBackgroundClusters(new TRefArray()), - fLeadingDetector(""), fLeading(), fCorrJet(), fCorrBkg(),fRefJet(0) + fLeadingDetector(""), fLeading(), fCorrJet(), fCorrBkg(),fRefJet(0), fListOfRefArrays(new TList) { // constructor @@ -80,31 +69,21 @@ AliAODPWG4ParticleCorrelation::AliAODPWG4ParticleCorrelation(AliAODPWG4Particle AliAODPWG4ParticleCorrelation::~AliAODPWG4ParticleCorrelation() { // destructor - delete fRefTracks; - delete fRefClusters; - delete fRefIsolationConeTracks; - delete fRefIsolationConeClusters; - delete fRefBackgroundTracks; - delete fRefBackgroundClusters; - + if(fListOfRefArrays){ + fListOfRefArrays->Clear(); + delete fListOfRefArrays ; + } } //______________________________________________________________________________ AliAODPWG4ParticleCorrelation::AliAODPWG4ParticleCorrelation(const AliAODPWG4ParticleCorrelation& part) : AliAODPWG4Particle(part), fIsolated(part.fIsolated), - fRefTracks(), fRefClusters(), - fRefIsolationConeTracks(), fRefIsolationConeClusters(), - fRefBackgroundTracks(), fRefBackgroundClusters(), fLeadingDetector(part.fLeadingDetector), fLeading(part.fLeading), - fCorrJet(part.fCorrJet), fCorrBkg(part.fCorrBkg), fRefJet(part.fRefJet) + fCorrJet(part.fCorrJet), fCorrBkg(part.fCorrBkg), fRefJet(part.fRefJet), + fListOfRefArrays(part.fListOfRefArrays) { // Copy constructor - fRefTracks = new TRefArray(*part.fRefTracks); - fRefClusters = new TRefArray(*part.fRefClusters); - fRefIsolationConeTracks = new TRefArray(*part.fRefIsolationConeTracks); - fRefIsolationConeClusters = new TRefArray(*part.fRefIsolationConeClusters); - fRefBackgroundTracks = new TRefArray(*part.fRefBackgroundTracks); - fRefBackgroundClusters = new TRefArray(*part.fRefBackgroundClusters); + } //______________________________________________________________________________ @@ -118,22 +97,9 @@ AliAODPWG4ParticleCorrelation& AliAODPWG4ParticleCorrelation::operator=(const Al fLeadingDetector =part.fLeadingDetector; fLeading = part.fLeading; fCorrJet = part.fCorrJet ; - fCorrBkg = part.fCorrBkg; - - if( fRefTracks ) delete fRefTracks ; - if( fRefClusters) delete fRefClusters ; - if( fRefIsolationConeTracks ) delete fRefIsolationConeTracks ; - if( fRefIsolationConeClusters) delete fRefIsolationConeClusters ; - if( fRefBackgroundTracks ) delete fRefBackgroundTracks ; - if( fRefBackgroundClusters ) delete fRefBackgroundClusters ; - - fRefTracks = new TRefArray(*part.fRefTracks); - fRefClusters = new TRefArray(*part.fRefClusters); - fRefIsolationConeTracks = new TRefArray(*part.fRefIsolationConeTracks); - fRefIsolationConeClusters = new TRefArray(*part.fRefIsolationConeClusters); - fRefBackgroundTracks = new TRefArray(*part.fRefBackgroundTracks); - fRefBackgroundClusters = new TRefArray(*part.fRefBackgroundClusters); - + fCorrBkg = part.fCorrBkg; + fListOfRefArrays = fListOfRefArrays; + } return *this; @@ -144,8 +110,17 @@ void AliAODPWG4ParticleCorrelation::Print(Option_t* /*option*/) const { // Print information of all data members AliAODPWG4Particle::Print(""); + if(fIsolated) printf("Isolated! \n"); + + if(GetJet()) GetJet()->Print(""); + printf("Leading Detector : %s\n",fLeadingDetector.Data()); - // if(fRefJet) fRefJet.Print(); + printf("Leading Particle 4-vector:\n"); + printf(" E = %13.3f", fLeading.E() ); + printf(" Px = %13.3f", fLeading.Px()); + printf(" Py = %13.3f", fLeading.Py()); + printf(" Pz = %13.3f\n", fLeading.Pz()); + if( fListOfRefArrays) fListOfRefArrays->Print(""); } diff --git a/PWG4/PartCorrBase/AliAODPWG4ParticleCorrelation.h b/PWG4/PartCorrBase/AliAODPWG4ParticleCorrelation.h index 6a6c28b2745..91218c21110 100755 --- a/PWG4/PartCorrBase/AliAODPWG4ParticleCorrelation.h +++ b/PWG4/PartCorrBase/AliAODPWG4ParticleCorrelation.h @@ -12,6 +12,7 @@ //------------------------------------------------------------------------- //-- ROOT system -- +#include "TList.h" //-- Analysis system #include "AliAODJet.h" @@ -29,33 +30,10 @@ class AliAODPWG4ParticleCorrelation : public AliAODPWG4Particle { AliAODPWG4ParticleCorrelation(const AliAODPWG4ParticleCorrelation& photon); AliAODPWG4ParticleCorrelation& operator=(const AliAODPWG4ParticleCorrelation& photon); - virtual Bool_t IsIsolated() const { return fIsolated ;} - virtual void SetIsolated(Bool_t iso) {fIsolated = iso ;} - - virtual TRefArray* GetRefTracks() const { return fRefTracks;} - virtual void AddTrack(TObject *tr) {fRefTracks->Add(tr);} - virtual TObject* GetTrack(Int_t i) const { return fRefTracks->At(i);} - - virtual TRefArray* GetRefClusters() const { return fRefClusters;} - virtual void AddCluster(TObject *tr) {fRefClusters->Add(tr);} - virtual TObject* GetCluster(Int_t i) const { return fRefClusters->At(i);} - - virtual TRefArray* GetRefIsolationConeTracks() const { return fRefIsolationConeTracks;} - virtual void AddIsolationConeTrack(TObject *tr) {fRefIsolationConeTracks->Add(tr);} - virtual TObject* GetIsolationConeTrack(Int_t i) const { return fRefIsolationConeTracks->At(i);} - - virtual TRefArray* GetRefIsolationConeClusters() const { return fRefIsolationConeClusters;} - virtual void AddIsolationConeCluster(TObject *tr) {fRefIsolationConeClusters->Add(tr);} - virtual TObject* GetIsolationConeCluster(Int_t i) const { return fRefIsolationConeClusters->At(i);} - - virtual TRefArray* GetRefBackgroundTracks() const { return fRefBackgroundTracks;} - virtual void AddBackgroundTrack(TObject *tr) {fRefBackgroundTracks->Add(tr);} - virtual TObject* GetBackgroundTrack(Int_t i) const { return fRefBackgroundTracks->At(i);} - - virtual TRefArray* GetRefBackgroundClusters() const { return fRefBackgroundClusters;} - virtual void AddBackgroundCluster(TObject *tr) {fRefBackgroundClusters->Add(tr);} - virtual TObject* GetBackgroundCluster(Int_t i) const { return fRefBackgroundClusters->At(i);} - + virtual TRefArray* GetRefArray(TString refname) const { return (TRefArray*) fListOfRefArrays->FindObject(refname); } + virtual TList* GetRefArrayList() const { return fListOfRefArrays; } + virtual void AddRefArray(TRefArray * refarray) { fListOfRefArrays->Add(refarray); } + virtual TString GetLeadingDetector() const {return fLeadingDetector ; } virtual void SetLeadingDetector(TString d) {fLeadingDetector = d ; } @@ -72,30 +50,21 @@ class AliAODPWG4ParticleCorrelation : public AliAODPWG4Particle { virtual AliAODJet* GetJet() const {return ((AliAODJet*) fRefJet.GetObject());} virtual TRef GetRefJet() const {return fRefJet;} + virtual Bool_t IsIsolated() const { return fIsolated ; } + virtual void SetIsolated(Bool_t iso) { fIsolated = iso ; } + virtual void Print(Option_t* /*option*/) const; private: - - Bool_t fIsolated ; //Particle is isolated or not - - TRefArray* fRefTracks; // array of references to the tracks belonging to the jet / all selected hadrons - TRefArray* fRefClusters; // array of references to the clusters belonging to the jet / all selected hadrons - - TRefArray* fRefIsolationConeTracks; // array of references to the tracks belonging to the cone around direct particle candidate - TRefArray* fRefIsolationConeClusters; // array of references to the clusters belonging to the cone around direct particle candidate - - TRefArray* fRefBackgroundTracks; // array of references to the tracks for background stimation - TRefArray* fRefBackgroundClusters; // array of references to the clusters for background stimation - - TString fLeadingDetector; // Detector where leading particle was measured. - TLorentzVector fLeading; // Leading Particle 4-momentum vector - - TLorentzVector fCorrJet; // Jet 4-momentum vector - TLorentzVector fCorrBkg; // Background 4-momentum vector - - TRef fRefJet; // Rerence to jet found with JETAN and correlated with particle - - ClassDef(AliAODPWG4ParticleCorrelation,1); + Bool_t fIsolated ; //Particle is isolated or not + TString fLeadingDetector; // Detector where leading particle was measured. + TLorentzVector fLeading; // Leading Particle 4-momentum vector + TLorentzVector fCorrJet; // Jet 4-momentum vector + TLorentzVector fCorrBkg; // Background 4-momentum vector + TRef fRefJet; // Reference to jet found with JETAN and correlated with particle + TList * fListOfRefArrays ; // List with correlation reference arrays + + ClassDef(AliAODPWG4ParticleCorrelation, 2); }; diff --git a/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx b/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx index 42de8872297..02fbaae5b0b 100755 --- a/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx +++ b/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx @@ -25,7 +25,6 @@ //#include //---- AliRoot system ---- -#include "AliAODPWG4ParticleCorrelation.h" #include "AliAnaPartCorrBaseClass.h" #include "AliCaloTrackReader.h" #include "AliCaloPID.h" @@ -46,6 +45,7 @@ ClassImp(AliAnaPartCorrBaseClass) fReader(0x0), fInputAODBranch(0x0), fInputAODName(""), fOutputAODBranch(0x0), fNewAOD(kFALSE), fOutputAODName(""), fOutputAODClassName(""), + fAODRefArrayName(""), fAddToHistogramsName(""), fAODCaloCells(0x0),//fAODCaloClusters(0x0), fCaloPID(0x0), fFidCut(0x0), fIC(0x0),fMCUtils(0x0), fNMS(0x0), fHistoNPtBins(0), fHistoPtMax(0.), fHistoPtMin(0.), @@ -73,6 +73,8 @@ AliAnaPartCorrBaseClass::AliAnaPartCorrBaseClass(const AliAnaPartCorrBaseClass & fInputAODBranch(new TClonesArray(*abc.fInputAODBranch)), fInputAODName(abc.fInputAODName), fOutputAODBranch(new TClonesArray(*abc.fOutputAODBranch)),fNewAOD(abc.fNewAOD), fOutputAODName(abc.fOutputAODName), fOutputAODClassName(abc.fOutputAODClassName), + fAODRefArrayName(abc.fAODRefArrayName), + fAddToHistogramsName(abc.fAddToHistogramsName), //fAODCaloClusters(new TClonesArray(*abc.fAODCaloClusters)), fAODCaloCells(new AliAODCaloCells(*abc.fAODCaloCells)), fCaloPID(abc.fCaloPID), fFidCut(abc.fFidCut), fIC(abc.fIC),fMCUtils(abc.fMCUtils), fNMS(abc.fNMS), @@ -110,13 +112,15 @@ AliAnaPartCorrBaseClass & AliAnaPartCorrBaseClass::operator = (const AliAnaPartC fMCUtils = abc.fMCUtils; fNMS = abc.fNMS; - fInputAODBranch = new TClonesArray(*abc.fInputAODBranch) ; - fInputAODName = abc.fInputAODName; - fOutputAODBranch = new TClonesArray(*abc.fOutputAODBranch) ; - fNewAOD = abc.fNewAOD ; - fOutputAODName = abc.fOutputAODName; - fOutputAODClassName = abc.fOutputAODClassName; - + fInputAODBranch = new TClonesArray(*abc.fInputAODBranch) ; + fInputAODName = abc.fInputAODName; + fOutputAODBranch = new TClonesArray(*abc.fOutputAODBranch) ; + fNewAOD = abc.fNewAOD ; + fOutputAODName = abc.fOutputAODName; + fOutputAODClassName = abc.fOutputAODClassName; + fAddToHistogramsName = abc.fAddToHistogramsName; + fAODRefArrayName = abc.fAODRefArrayName; + fHistoNPtBins = abc.fHistoNPtBins; fHistoPtMax = abc.fHistoPtMax; fHistoPtMin = abc.fHistoPtMin; fHistoNPhiBins = abc.fHistoNPhiBins; fHistoPhiMax = abc.fHistoPhiMax; fHistoPhiMin = abc.fHistoPhiMin; fHistoNEtaBins = abc.fHistoNEtaBins; fHistoEtaMax = abc.fHistoEtaMax; fHistoEtaMin = abc.fHistoEtaMin; @@ -284,11 +288,23 @@ TString AliAnaPartCorrBaseClass::GetBaseParametersList() { parList+=onePar ; sprintf(onePar,"fCheckFidCut=%d (Check Fidutial cut selection on/off) \n",fCheckFidCut) ; parList+=onePar ; - sprintf(onePar,"fCheckCaloPIC =%d (Use Bayesian PID in calorimetes, on/off) \n",fCheckCaloPID) ; + sprintf(onePar,"fCheckCaloPID =%d (Use Bayesian PID in calorimetes, on/off) \n",fCheckCaloPID) ; parList+=onePar ; sprintf(onePar,"fRecalculateCaloPID =%d (Calculate PID from shower/tof/tracking parameters, on/off) \n",fRecalculateCaloPID) ; parList+=onePar ; - + sprintf(onePar,"fInputAODName =%s Input AOD name \n",fInputAODName.Data()) ; + parList+=onePar ; + if(fNewAOD){ + sprintf(onePar,"fOutputAODName =%s Output AOD name \n",fOutputAODName.Data()) ; + parList+=onePar ; + sprintf(onePar,"fOutputAODClassName =%s Output AOD class name \n",fOutputAODClassName.Data()) ; + parList+=onePar ; + } + sprintf(onePar,"fAODRefArrayName =%s Reference arrays in AOD name \n",fAODRefArrayName.Data()) ; + parList+=onePar ; + sprintf(onePar,"fAddToHistogramsName =%s String added to beginning of histograms name \n",fAddToHistogramsName.Data()) ; + parList+=onePar ; + return parList; } @@ -373,7 +389,9 @@ void AliAnaPartCorrBaseClass::InitParameters() fOutputAODName = "PartCorr"; fOutputAODClassName = "AliAODPWG4Particle"; fInputAODName = "PartCorr"; - + fAddToHistogramsName = ""; + fAODRefArrayName="Ref"; + //Histogrammes settings fHistoNPtBins = 240 ; fHistoPtMax = 120 ; @@ -396,6 +414,7 @@ void AliAnaPartCorrBaseClass::Print(const Option_t * opt) const if(! opt) return; + printf("New AOD: = %d\n",fNewAOD); printf("Input AOD name: = %s\n",fInputAODName.Data()); printf("Output AOD name: = %s\n",fOutputAODName.Data()); @@ -410,7 +429,9 @@ void AliAnaPartCorrBaseClass::Print(const Option_t * opt) const printf("Histograms: %3.1f < pT < %3.1f, Nbin = %d\n", fHistoPtMin, fHistoPtMax, fHistoNPtBins); printf("Histograms: %3.1f < phi < %3.1f, Nbin = %d\n", fHistoPhiMin, fHistoPhiMax, fHistoNPhiBins); printf("Histograms: %3.1f < eta < %3.1f, Nbin = %d\n", fHistoEtaMin, fHistoEtaMax, fHistoNEtaBins); - + printf("Name of reference array : %s\n", fAODRefArrayName.Data()); + printf("String added histograms name : %s\n",fAddToHistogramsName.Data()); + printf(" \n") ; } diff --git a/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h b/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h index 8353cf1a6a8..15603b86087 100755 --- a/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h +++ b/PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h @@ -13,13 +13,12 @@ //ROOT class TClonesArray ; class TRefArray ; -#include +#include #include //Analysis class AliAODCaloCluster; class AliAODCaloCells; -#include "AliAODPWG4Particle.h" class AliCaloTrackReader ; class AliCaloPID ; class AliFidutialCut ; @@ -29,7 +28,7 @@ class AliNeutralMesonSelection ; class AliStack ; class AliHeader ; class AliGenEventHeader ; - +#include "AliAODPWG4ParticleCorrelation.h" class AliAnaPartCorrBaseClass : public TObject { @@ -41,8 +40,8 @@ public: virtual ~AliAnaPartCorrBaseClass() ; //virtual dtor // virtual void AddAODCaloCluster(AliAODCaloCluster calo) ; - virtual void AddAODParticle(AliAODPWG4Particle pc) ; -// + virtual void AddAODParticle(AliAODPWG4Particle part) ; + // virtual void ConnectAODCaloClusters(); virtual void ConnectAODPHOSCells(); virtual void ConnectAODEMCALCells(); @@ -50,6 +49,9 @@ public: virtual TList * GetCreateOutputObjects() { return (new TList) ;} + virtual void AddToHistogramsName(TString add) { fAddToHistogramsName = add; } + virtual TString GetAddedHistogramsStringToName() {return fAddToHistogramsName ;} + virtual void Init() {;} virtual void InitParameters() ; @@ -79,6 +81,9 @@ public: virtual TString GetOutputAODClassName() const {return fOutputAODClassName;} virtual void SetOutputAODClassName(TString name) {fOutputAODClassName = name; } + virtual TString GetAODRefArrayName() const {return fAODRefArrayName;} + virtual void SetAODRefArrayName(TString name) {fAODRefArrayName = name; } + virtual TClonesArray* GetInputAODBranch() const {return fInputAODBranch ;} virtual TClonesArray* GetOutputAODBranch() const {return fOutputAODBranch ;} @@ -169,8 +174,7 @@ public: Int_t GetHistoNEtaBins() const { return fHistoNEtaBins ; } Float_t GetHistoEtaMin() const { return fHistoEtaMin ; } Float_t GetHistoEtaMax() const { return fHistoEtaMax ; } - - + private: Bool_t fDataMC ; // Flag to access MC data when using ESD or AOD @@ -189,6 +193,8 @@ public: Bool_t fNewAOD ; // Flag, new aod branch added to the analysis or not. TString fOutputAODName ; // Name of output AOD branch; TString fOutputAODClassName; // Type of aod objects to be stored in the TClonesArray (AliAODPWG4Particle, AliAODPWG4ParticleCorrelation ...) + TString fAODRefArrayName ; // Name of ref array kept in a TList in AliAODParticleCorrelation with clusters or track references. + TString fAddToHistogramsName;// Add this string to histograms name //TClonesArray* fAODCaloClusters ; //! selected PHOS/EMCAL CaloClusters AliAODCaloCells * fAODCaloCells ; //! selected PHOS/EMCAL CaloCells diff --git a/PWG4/PartCorrBase/AliAnaPartCorrMaker.cxx b/PWG4/PartCorrBase/AliAnaPartCorrMaker.cxx index 3ddfb0f34fe..d0f5fab506d 100755 --- a/PWG4/PartCorrBase/AliAnaPartCorrMaker.cxx +++ b/PWG4/PartCorrBase/AliAnaPartCorrMaker.cxx @@ -27,8 +27,8 @@ // --- ROOT system --- #include "TClonesArray.h" -class TString ; #include "TList.h" +#include "TH1.h" //#include "Riostream.h" //---- AliRoot system ---- @@ -144,16 +144,28 @@ TList *AliAnaPartCorrMaker::GetOutputContainer() printf("AliAnaPartCorrMaker::GetOutputContainer() - Analysis job list not initialized\n"); abort(); } + + char newname[128]; for(Int_t iana = 0; iana < fAnalysisContainer->GetEntries(); iana++){ AliAnaPartCorrBaseClass * ana = ((AliAnaPartCorrBaseClass *) fAnalysisContainer->At(iana)) ; if(fMakeHisto){// Analysis with histograms as output on //Fill container with appropriate histograms TList * templist = ana -> GetCreateOutputObjects(); - for(Int_t i = 0; i < templist->GetEntries(); i++) + for(Int_t i = 0; i < templist->GetEntries(); i++){ + + //Add only to the histogram name the name of the task + if( strcmp((templist->At(i))->ClassName(),"TObjString") ) { + sprintf(newname,"%s%s", (ana->GetAddedHistogramsStringToName()).Data(), (templist->At(i))->GetName()); + ((TH1*) templist->At(i))->SetName(newname); + } + //Add histogram to general container fOutputContainer->Add(templist->At(i)) ; + } }// Analysis with histograms as output on }//Loop on analysis defined + return fOutputContainer; + } //________________________________________________________________________ diff --git a/PWG4/PartCorrBase/AliCaloTrackAODReader.cxx b/PWG4/PartCorrBase/AliCaloTrackAODReader.cxx index f85de428af0..3602519a29a 100755 --- a/PWG4/PartCorrBase/AliCaloTrackAODReader.cxx +++ b/PWG4/PartCorrBase/AliCaloTrackAODReader.cxx @@ -91,7 +91,7 @@ void AliCaloTrackAODReader::FillInputCTS() { if(fCTSPtMin < momentum.Pt() && fFidutialCut->IsInFidutialCut(momentum,"CTS")){ - if(fDebug > 2 && momentum.Pt() > 0.1)printf("FillInputCTS():: Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", + if(fDebug > 2 && momentum.Pt() > 0.1) printf("AliCaloTrackAODReader::FillInputCTS() - Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta()); if(first){ @@ -103,7 +103,7 @@ void AliCaloTrackAODReader::FillInputCTS() { }//Pt and Fidutial cut passed. //}// track status }// track loop - if(fDebug > 1) printf("FillInputCTS():: aod entries %d\n", fAODCTS->GetEntriesFast()); + if(fDebug > 1) printf("AliCaloTrackAODReader::FillInputCTS() - aod entries %d\n", fAODCTS->GetEntriesFast()); } //____________________________________________________________________________ @@ -127,7 +127,7 @@ void AliCaloTrackAODReader::FillInputEMCAL() { if(fEMCALPtMin < momentum.Pt() && fFidutialCut->IsInFidutialCut(momentum,"EMCAL")){ - if(fDebug > 2 && momentum.E() > 0.1)printf("FillInputEMCAL():: Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", + if(fDebug > 2 && momentum.E() > 0.1) printf("AliCaloTrackAODReader::FillInputEMCAL() - Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta()); if(first){ @@ -140,7 +140,7 @@ void AliCaloTrackAODReader::FillInputEMCAL() { }// cluster exists }//esd cluster loop - if(fDebug > 1) printf("FillInputEMCAL():: aod entries %d\n", fAODEMCAL->GetEntriesFast()); + if(fDebug > 1) printf("AliCaloTrackAODReader::FillInputEMCAL() - aod entries %d\n", fAODEMCAL->GetEntriesFast()); } @@ -166,7 +166,7 @@ void AliCaloTrackAODReader::FillInputPHOS() { if(fPHOSPtMin < momentum.Pt() && fFidutialCut->IsInFidutialCut(momentum,"PHOS")){ - if(fDebug > 2 && momentum.E() > 0.1)printf("FillInputPHOS():: Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", + if(fDebug > 2 && momentum.E() > 0.1) printf("AliCaloTrackAODReader::FillInputPHOS() - Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta()); if(first){ @@ -179,7 +179,7 @@ void AliCaloTrackAODReader::FillInputPHOS() { }//cluster exists }//esd cluster loop - if(fDebug > 1) printf("FillInputPHOS():: aod entries %d\n", fAODPHOS->GetEntriesFast()); + if(fDebug > 1) printf("AliCaloTrackAODReader::FillInputPHOS() - aod entries %d\n", fAODPHOS->GetEntriesFast()); } @@ -223,7 +223,7 @@ void AliCaloTrackAODReader::SetInputOutputMCEvent(AliVEvent* input, AliAODEvent* SetOutputEvent(aod); } else{ - printf("AliCaloTrackAODReader::SetInputOutputMCEvent() - ABORT::Unknown data format: %s\n",input->GetName()); + printf("AliCaloTrackAODReader::SetInputOutputMCEvent() - ABORT : Wrong data format: %s\n",input->GetName()); abort(); } diff --git a/PWG4/PartCorrBase/AliCaloTrackESDReader.cxx b/PWG4/PartCorrBase/AliCaloTrackESDReader.cxx index 0a2bd83662e..3c65935ebf4 100755 --- a/PWG4/PartCorrBase/AliCaloTrackESDReader.cxx +++ b/PWG4/PartCorrBase/AliCaloTrackESDReader.cxx @@ -91,7 +91,7 @@ void AliCaloTrackESDReader::FillInputCTS() { if(fCTSPtMin < momentum.Pt() &&fFidutialCut->IsInFidutialCut(momentum,"CTS")){ - if(fDebug > 3 && momentum.Pt() > 0.2)printf("FillInputCTS():: Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", + if(fDebug > 3 && momentum.Pt() > 0.2) printf("AliCaloTrackESDReader::FillInputCTS() - Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta()); track->GetXYZ(pos); @@ -129,7 +129,7 @@ void AliCaloTrackESDReader::FillInputCTS() { fAODCTS->Add(track); } - if(fDebug > 1) printf("FillInputCTS():: aod entries %d\n", fAODCTS->GetEntriesFast()); + if(fDebug > 1) printf("AliCaloTrackESDReader::FillInputCTS() - aod entries %d\n", fAODCTS->GetEntriesFast()); } //____________________________________________________________________________ @@ -140,27 +140,25 @@ void AliCaloTrackESDReader::FillInputEMCAL() { Double_t v[3] ; //vertex ; GetVertex(v); - //Loop to select clusters in fidutial cut and fill container with aodClusters - Int_t naod = (fOutputEvent->GetCaloClusters())->GetEntriesFast(); Float_t pos[3] ; - // Double_t * pid = new Double_t[AliPID::kSPECIESN]; + Int_t naod = (fOutputEvent->GetCaloClusters())->GetEntriesFast(); + Int_t nTracks = fInputEvent->GetNumberOfTracks() ; + + //Loop to select clusters in fidutial cut and fill container with aodClusters for (Int_t iclus = 0; iclus < ((AliESDEvent*)fInputEvent)->GetNumberOfCaloClusters(); iclus++) { AliESDCaloCluster * clus = 0; if ( (clus = ((AliESDEvent*)fInputEvent)->GetCaloCluster(iclus)) ) { if (clus->IsEMCAL()){ TLorentzVector momentum ; clus->GetMomentum(momentum, v); - if(fDebug > 3 && momentum.E() > 0.1)printf("FillInputEMCAL():: all clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", + if(fDebug > 3 && momentum.E() > 0.2) printf("AliCaloTrackESDReader::FillInputEMCAL() - all clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta()); if(fEMCALPtMin < momentum.Pt() && fFidutialCut->IsInFidutialCut(momentum,"EMCAL")){ - if(fDebug > 2 && momentum.E() > 0.2)printf("FillInputEMCAL():: Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", + if(fDebug > 2 && momentum.E() > 0.2) printf("AliCaloTrackESDReader::FillInputEMCAL() - Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta()); - // pid=clus->GetPid(); + clus->GetPosition(pos) ; - // printf("Reader PID ESD: ph %0.2f, pi0 %0.2f, el %0.2f, conv el %0.2f,pi %0.2f, k %0.2f, p %0.2f, k0 %0.2f, n %0.2f, mu %0.2f \n", - // pid[AliPID::kPhoton],pid[AliPID::kPi0],pid[AliPID::kElectron],pid[AliPID::kEleCon],pid[AliPID::kPion], - // pid[AliPID::kKaon],pid[AliPID::kProton], pid[AliPID::kKaon0],pid[AliPID::kNeutron], pid[AliPID::kMuon]); Int_t id = clus->GetID(); Int_t nLabel = clus->GetNLabels(); Int_t *labels=0x0; @@ -173,6 +171,9 @@ void AliCaloTrackESDReader::FillInputEMCAL() { AliAODCaloCluster *caloCluster = new((*(fOutputEvent->GetCaloClusters()))[naod++]) AliAODCaloCluster(id,nLabel,labels,energy, pos, NULL,ttype,0); + // printf("Reader PID ESD: ph %0.2f, pi0 %0.2f, el %0.2f, conv el %0.2f,pi %0.2f, k %0.2f, p %0.2f, k0 %0.2f, n %0.2f, mu %0.2f \n", + // pid[AliPID::kPhoton],pid[AliPID::kPi0],pid[AliPID::kElectron],pid[AliPID::kEleCon],pid[AliPID::kPion], + // pid[AliPID::kKaon],pid[AliPID::kProton], pid[AliPID::kKaon0],pid[AliPID::kNeutron], pid[AliPID::kMuon]); caloCluster->SetPIDFromESD(clus->GetPid()); caloCluster->SetCaloCluster(clus->GetDistanceToBadChannel(), clus->GetClusterDisp(), clus->GetM20(), clus->GetM02(), @@ -180,7 +181,7 @@ void AliCaloTrackESDReader::FillInputEMCAL() { if(fDebug > 3 && momentum.E() > 0.2) - printf("FillInputEMCAL():: Selected clusters Distance BC %2.2f, dispersion %2.2f, M20 %f, M02 %3.2f, NexMax %d, TOF %e\n", + printf("AliCaloTrackESDReader::FillInputEMCAL() - Selected clusters Distance BC %2.2f, dispersion %2.2f, M20 %f, M02 %3.2f, NexMax %d, TOF %e\n", clus->GetDistanceToBadChannel(), clus->GetClusterDisp(),clus->GetM20(), clus->GetM02(), clus->GetNExMax(), clus->GetTOF()); @@ -189,9 +190,11 @@ void AliCaloTrackESDReader::FillInputEMCAL() { caloCluster->SetCellsAmplitudeFraction(clus->GetCellsAmplitudeFraction()); TArrayI* matchedT = clus->GetTracksMatched(); - if (matchedT && clus->GetTrackMatched() > 0) { + if (nTracks > 0 && matchedT && clus->GetTrackMatched() >= 0) { for (Int_t im = 0; im < matchedT->GetSize(); im++) { - caloCluster->AddTrackMatched((fInputEvent->GetTrack(im))); + Int_t iESDtrack = matchedT->At(im); + if(iESDtrack < nTracks && iESDtrack > -1) + caloCluster->AddTrackMatched((fInputEvent->GetTrack(iESDtrack))); } } //Fill reference array @@ -205,7 +208,7 @@ void AliCaloTrackESDReader::FillInputEMCAL() { AliAODCaloCluster * clus = (AliAODCaloCluster*) (fOutputEvent->GetCaloClusters())->At(iclus); fAODEMCAL->Add(clus); } - if(fDebug > 1) printf("FillInputEMCAL():: aod entries %d\n", fAODEMCAL->GetEntriesFast()); + if(fDebug > 1) printf("AliCaloTrackESDReader::FillInputEMCAL() - aod entries %d\n", fAODEMCAL->GetEntriesFast()); } @@ -217,29 +220,25 @@ void AliCaloTrackESDReader::FillInputPHOS() { Double_t v[3] ; //vertex ; GetVertex(v); - //Loop to select clusters in fidutial cut and fill container with aodClusters - Int_t naod = (fOutputEvent->GetCaloClusters())->GetEntriesFast(); Float_t pos[3] ; Double_t * pid = new Double_t[AliPID::kSPECIESN]; - + Int_t naod = (fOutputEvent->GetCaloClusters())->GetEntriesFast(); + Int_t nTracks = fInputEvent->GetNumberOfTracks() ; + + //Loop to select clusters in fidutial cut and fill container with aodClusters for (Int_t iclus = 0; iclus < ((AliESDEvent*)fInputEvent)->GetNumberOfCaloClusters(); iclus++) { AliESDCaloCluster * clus = 0; if ( (clus = ((AliESDEvent*)fInputEvent)->GetCaloCluster(iclus)) ) { if (clus->IsPHOS()){ TLorentzVector momentum ; clus->GetMomentum(momentum, v); - if(fDebug > 3 && momentum.E() > 0.1)printf("FillInputPHOS():: all clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", + if(fDebug > 3 && momentum.E() > 0.1)printf("AliCaloTrackESDReader::FillInputPHOS() - all clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta()); if(fPHOSPtMin < momentum.Pt() && fFidutialCut->IsInFidutialCut(momentum,"PHOS")){ - if(fDebug > 2 && momentum.E() > 0.1)printf("FillInputPHOS():: Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", + if(fDebug > 2 && momentum.E() > 0.1)printf("AliCaloTrackESDReader::FillInputPHOS() - Selected clusters E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta()); - pid=clus->GetPid(); - // printf("Reader PID ESD: ph %0.2f, pi0 %0.2f, el %0.2f, conv el %0.2f,pi %0.2f, k %0.2f, p %0.2f, k0 %0.2f, n %0.2f, mu %0.2f \n", - // pid[AliPID::kPhoton],pid[AliPID::kPi0],pid[AliPID::kElectron],pid[AliPID::kEleCon],pid[AliPID::kPion], - // pid[AliPID::kKaon],pid[AliPID::kProton], pid[AliPID::kKaon0],pid[AliPID::kNeutron], pid[AliPID::kMuon]); - clus->GetPosition(pos) ; Int_t id = clus->GetID(); Int_t nLabel = clus->GetNLabels(); @@ -248,6 +247,10 @@ void AliCaloTrackESDReader::FillInputPHOS() { Float_t energy = clus->E(); //Phos cluster type + pid = clus->GetPid(); + // printf("Reader PID ESD: ph %0.2f, pi0 %0.2f, el %0.2f, conv el %0.2f,pi %0.2f, k %0.2f, p %0.2f, k0 %0.2f, n %0.2f, mu %0.2f \n", + // pid[AliPID::kPhoton],pid[AliPID::kPi0],pid[AliPID::kElectron],pid[AliPID::kEleCon],pid[AliPID::kPion], + // pid[AliPID::kKaon],pid[AliPID::kProton], pid[AliPID::kKaon0],pid[AliPID::kNeutron], pid[AliPID::kMuon]); Char_t ttype= AliAODCluster::kPHOSNeutral; Float_t wNeutral = pid[AliPID::kNeutron]+ pid[AliPID::kKaon0]+pid[AliPID::kPhoton]+pid[AliPID::kPi0]; Float_t wCharged = pid[AliPID::kMuon] + pid[AliPID::kElectron] + pid[AliPID::kEleCon]+ @@ -257,23 +260,28 @@ void AliCaloTrackESDReader::FillInputPHOS() { //Put new aod object in file in AOD calo clusters array AliAODCaloCluster *caloCluster = new((*(fOutputEvent->GetCaloClusters()))[naod++]) AliAODCaloCluster(id,nLabel,labels,energy, pos, NULL, ttype, 0); - caloCluster->SetPIDFromESD(clus->GetPid()); + + + caloCluster->SetPIDFromESD(pid); caloCluster->SetCaloCluster(clus->GetDistanceToBadChannel(), clus->GetClusterDisp(), clus->GetM20(), clus->GetM02(), clus->GetEmcCpvDistance(), clus->GetNExMax()) ; if(fDebug > 3 && momentum.E() > 0.2) - printf("FillInputPHOS():: Selected clusters Distance BC %2.2f, dispersion %2.2f, M20 %f, M02 %3.2f, EmcCpvDist %3.3f, NexMax %d, TOF %e\n", + printf("AliCaloTrackESDReader::FillInputPHOS() - Selected clusters Distance BC %2.2f, dispersion %2.2f, M20 %f, M02 %3.2f, EmcCpvDist %3.3f, NexMax %d, TOF %e\n", clus->GetDistanceToBadChannel(), clus->GetClusterDisp(),clus->GetM20(), clus->GetM02(), clus->GetEmcCpvDistance(), clus->GetNExMax(), clus->GetTOF()); caloCluster->SetNCells(clus->GetNCells()); caloCluster->SetCellsAbsId(clus->GetCellsAbsId()); caloCluster->SetCellsAmplitudeFraction(clus->GetCellsAmplitudeFraction()); + TArrayI* matchedT = clus->GetTracksMatched(); - if (matchedT) { + if (nTracks > 0 && matchedT && clus->GetTrackMatched() >= 0) { for (Int_t im = 0; im < matchedT->GetSize(); im++) { - caloCluster->AddTrackMatched((fInputEvent->GetTrack(im))); + Int_t iESDtrack = matchedT->At(im); + if(iESDtrack < nTracks && iESDtrack > -1) + caloCluster->AddTrackMatched((fInputEvent->GetTrack(iESDtrack))); } } }//Pt and Fidutial cut passed. @@ -320,7 +328,7 @@ void AliCaloTrackESDReader::SetInputOutputMCEvent(AliVEvent* esd, AliAODEvent* a // Connect the data pointers if(strcmp(esd->GetName(),"AliESDEvent")){ - printf("ABORT::Wrong reader, here only ESDs. Input name: %s != AliESDEvent \n",esd->GetName()); + printf("AliCaloTrackESDReader::SetInputOutputMCEvent() - ABORT::Wrong reader, here only ESDs. Input name: %s != AliESDEvent \n",esd->GetName()); abort(); } diff --git a/PWG4/PartCorrBase/AliCaloTrackMCReader.cxx b/PWG4/PartCorrBase/AliCaloTrackMCReader.cxx index e24e0117e00..e8551eb5332 100755 --- a/PWG4/PartCorrBase/AliCaloTrackMCReader.cxx +++ b/PWG4/PartCorrBase/AliCaloTrackMCReader.cxx @@ -202,7 +202,7 @@ void AliCaloTrackMCReader::FillCalorimeters(Int_t & iParticle, TParticle* parti SetCaloClusterPID(pdg,calo) ; if(fDebug > 3 && momentum.Pt() > 0.2) - printf("Fill MC PHOS :: Selected tracks %s E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", + printf("AliCaloTrackMCReader::FillCalorimeters() - PHOS : Selected cluster %s E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", particle->GetName(),momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta()); fAODPHOS->Add(calo);//reference the selected object to the list } @@ -223,7 +223,7 @@ void AliCaloTrackMCReader::FillCalorimeters(Int_t & iParticle, TParticle* parti SetCaloClusterPID(pdg,calo) ; if(fDebug > 3 && momentum.Pt() > 0.2) - printf("Fill MC EMCAL :: Selected tracks %s E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", + printf("AliCaloTrackMCReader::FillCalorimeters() - EMCAL : Selected cluster %s E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", particle->GetName(),momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta()); fAODEMCAL->Add(calo);//reference the selected object to the list } @@ -259,7 +259,7 @@ void AliCaloTrackMCReader::FillInputEvent(Int_t iEntry){ if(fFillCTS){ //Particles in CTS acceptance if(fDebug > 3 && momentum.Pt() > 0.2) - printf("Fill MC CTS :: Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", + printf("AliCaloTrackMCReader::FillInputEvent() - CTS : Selected tracks E %3.2f, pt %3.2f, phi %3.2f, eta %3.2f\n", momentum.E(),momentum.Pt(),momentum.Phi()*TMath::RadToDeg(),momentum.Eta()); x[0] = particle->Vx(); x[1] = particle->Vy(); x[2] = particle->Vz(); @@ -353,7 +353,7 @@ void AliCaloTrackMCReader::Print(const Option_t * opt) const if(! opt) return; - Info("**** Print **** ", "%s %s", GetName(), GetTitle() ) ; + printf("**** Print **** %s %s ****\n", GetName(), GetTitle() ) ; printf("Decay Pi0? : %d\n", fDecayPi0) ; printf("Check Overlap in Calo? : %d\n", fCheckOverlap) ; diff --git a/PWG4/PartCorrBase/AliFidutialCut.cxx b/PWG4/PartCorrBase/AliFidutialCut.cxx index 0079eee2045..d99b9430d44 100755 --- a/PWG4/PartCorrBase/AliFidutialCut.cxx +++ b/PWG4/PartCorrBase/AliFidutialCut.cxx @@ -179,7 +179,7 @@ Bool_t AliFidutialCut::IsInFidutialCut(TLorentzVector momentum, TString det) con selection = fPHOSFidutialCut ; } else - printf("AliFidutialCut::IsInFidutialCut() - Wrong detector name = %s", det.Data()); + printf("AliFidutialCut::IsInFidutialCut() - Wrong detector name = %s\n", det.Data()); //printf("IsInFidutialCut::nphiregions = %d, netaregions = %d\n",nphiregions, netaregions); diff --git a/PWG4/PartCorrBase/AliIsolationCut.cxx b/PWG4/PartCorrBase/AliIsolationCut.cxx index aefbcf6a419..97b4da9751e 100755 --- a/PWG4/PartCorrBase/AliIsolationCut.cxx +++ b/PWG4/PartCorrBase/AliIsolationCut.cxx @@ -114,6 +114,7 @@ void AliIsolationCut::InitParameters() //__________________________________________________________________ void AliIsolationCut::MakeIsolationCut(TRefArray * plCTS, TRefArray * plNe, Double_t * vertex, const Bool_t fillAOD, AliAODPWG4ParticleCorrelation *pCandidate, + const TString aodArrayRefName, Int_t & n, Int_t & nfrac, Float_t &coneptsum, Bool_t &isolated) const { //Search in cone around a candidate particle if it is isolated @@ -128,7 +129,16 @@ void AliIsolationCut::MakeIsolationCut(TRefArray * plCTS, TRefArray * plNe, Do n = 0 ; coneptsum = 0.; isolated = kFALSE; - + + //Initialize the array with refrences + TRefArray * refclusters = 0x0; + TRefArray * reftracks =0x0; + + if(fillAOD) { + refclusters = new TRefArray; + reftracks = new TRefArray; + } + //Check charged particles in cone. if(plCTS){ TVector3 p3; @@ -148,10 +158,10 @@ void AliIsolationCut::MakeIsolationCut(TRefArray * plCTS, TRefArray * plNe, Do if(rad < fConeSize){ if(fillAOD) { if(first) { - new (pCandidate->GetRefIsolationConeTracks()) TRefArray(TProcessID::GetProcessWithUID(track)); + new (reftracks) TRefArray(TProcessID::GetProcessWithUID(track)); first = kFALSE; } - pCandidate->AddIsolationConeTrack(track); + reftracks->Add(track); } //printf("charged in isolation cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad); coneptsum+=pt; @@ -184,10 +194,10 @@ void AliIsolationCut::MakeIsolationCut(TRefArray * plCTS, TRefArray * plNe, Do if(rad < fConeSize){ if(fillAOD) { if(first) { - new (pCandidate->GetRefIsolationConeClusters()) TRefArray(TProcessID::GetProcessWithUID(calo)); + new (refclusters) TRefArray(TProcessID::GetProcessWithUID(calo)); first = kFALSE; } - pCandidate->AddIsolationConeCluster(calo); + refclusters->Add(calo); } //printf("neutral in isolation cone pt %f, phi %f, eta %f, R %f \n",pt,phi,eta,rad); coneptsum+=pt; @@ -199,6 +209,18 @@ void AliIsolationCut::MakeIsolationCut(TRefArray * plCTS, TRefArray * plNe, Do //printf("Isolation Cut: in cone with: pT>pTthres %d, pT > pTfrac*pTcandidate %d \n",n,nfrac); + //Add reference arrays to AOD when filling AODs only + if(fillAOD) { + if(refclusters->GetEntriesFast() > 0){ + refclusters->SetName(aodArrayRefName+"Clusters"); + pCandidate->AddRefArray(refclusters); + } + if(reftracks->GetEntriesFast() > 0){ + reftracks->SetName(aodArrayRefName+"Tracks"); + pCandidate->AddRefArray(reftracks); + } + } + //Check isolation, depending on method. if( fICMethod == kPtThresIC){ if(n==0) isolated = kTRUE ; diff --git a/PWG4/PartCorrBase/AliIsolationCut.h b/PWG4/PartCorrBase/AliIsolationCut.h index de4c4430eb3..340357bde6f 100755 --- a/PWG4/PartCorrBase/AliIsolationCut.h +++ b/PWG4/PartCorrBase/AliIsolationCut.h @@ -38,7 +38,7 @@ class AliIsolationCut : public TObject { TString GetICParametersList() ; void MakeIsolationCut(TRefArray * plCTS, TRefArray * plNe, Double_t * vertex, - const Bool_t fillAOD, AliAODPWG4ParticleCorrelation * pCandidate, + const Bool_t fillAOD, AliAODPWG4ParticleCorrelation * pCandidate, const TString aodRefArrayName, Int_t &n, Int_t & nfrac, Float_t &ptsum, Bool_t & isolated) const ; void Print(const Option_t * opt)const; diff --git a/PWG4/PartCorrBase/AliMCAnalysisUtils.cxx b/PWG4/PartCorrBase/AliMCAnalysisUtils.cxx index c5ee124beaa..82e460a9c46 100755 --- a/PWG4/PartCorrBase/AliMCAnalysisUtils.cxx +++ b/PWG4/PartCorrBase/AliMCAnalysisUtils.cxx @@ -85,7 +85,7 @@ Int_t AliMCAnalysisUtils::CheckOrigin(const Int_t label, AliStack * stack) const //Check origin of the candidates, good for PYTHIA if(!stack) { - printf("AliMCAnalysisUtils::CheckOrigin() - Stack is not available, check analysis settings in configuration file, STOP!!"); + printf("AliMCAnalysisUtils::CheckOrigin() - Stack is not available, check analysis settings in configuration file, STOP!!\n"); abort(); } // printf("label %d, ntrack %d, nprim %d\n",label, stack->GetNtrack(), stack->GetNprimary()); @@ -205,9 +205,9 @@ TList * AliMCAnalysisUtils::GetJets(Int_t iEvent, AliStack * stack, AliGenEventH TParticle * parton1 = stack->Particle(6); TParticle * parton2 = stack->Particle(7); if(fDebug > 2){ - printf("parton 6 : %s, pt %2.2f,E %2.2f, phi %2.2f, eta %2.2f \n", + printf("AliMCAnalysisUtils::GetJets() - parton 6 : %s, pt %2.2f,E %2.2f, phi %2.2f, eta %2.2f \n", parton1->GetName(),parton1->Pt(),parton1->Energy(),parton1->Phi()*TMath::RadToDeg(),parton1->Eta()); - printf("parton 7 : %s, pt %2.2f,E %2.2f, phi %2.2f, eta %2.2f \n", + printf("AliMCAnalysisUtils::GetJets() - parton 7 : %s, pt %2.2f,E %2.2f, phi %2.2f, eta %2.2f \n", parton2->GetName(),parton2->Pt(),parton2->Energy(),parton2->Phi()*TMath::RadToDeg(),parton2->Eta()); } // //Trace the jet from the mother parton @@ -253,8 +253,9 @@ TList * AliMCAnalysisUtils::GetJets(Int_t iEvent, AliStack * stack, AliGenEventH TParticle * jet = new TParticle; AliGenPythiaEventHeader* pygeh= (AliGenPythiaEventHeader*) geh; nTriggerJets = pygeh->NTriggerJets(); - //if(fDebug > 1) - printf("PythiaEventHeader: Njets: %d\n",nTriggerJets); + if(fDebug > 1) + printf("AliMCAnalysisUtils::GetJets() - PythiaEventHeader: Njets: %d\n",nTriggerJets); + Int_t iparton = -1; for(Int_t i = 0; i< nTriggerJets; i++){ iparton=-1; @@ -267,7 +268,7 @@ TList * AliMCAnalysisUtils::GetJets(Int_t iEvent, AliStack * stack, AliGenEventH else jet->SetFirstMother(6); //jet->Print(); if(fDebug > 1) - printf("PYTHIA Jet %d: mother %d, pt %2.2f,E %2.2f, phi %2.2f, eta %2.2f \n", + printf("AliMCAnalysisUtils::GetJets() - PYTHIA Jet %d: mother %d, pt %2.2f,E %2.2f, phi %2.2f, eta %2.2f \n", i, jet->GetFirstMother(),jet->Pt(),jet->Energy(),jet->Phi()*TMath::RadToDeg(),jet->Eta()); fJetsList->Add(jet); } @@ -293,7 +294,7 @@ TList * AliMCAnalysisUtils::GetJets(Int_t iEvent, AliStack * stack, AliGenEventH //tmp->Print(); //jet1->Print(); if(fDebug > 1) - printf("HERWIG Jet 1: mother %d, status %d, pt %2.2f,E %2.2f, phi %2.2f, eta %2.2f \n", + printf("AliMCAnalysisUtils::GetJets() - HERWIG Jet 1: mother %d, status %d, pt %2.2f,E %2.2f, phi %2.2f, eta %2.2f \n", jet1->GetFirstMother(),jet1->GetStatusCode(),jet1->Pt(),jet1->Energy(),jet1->Phi()*TMath::RadToDeg(),jet1->Eta()); }//not photon @@ -314,11 +315,11 @@ TList * AliMCAnalysisUtils::GetJets(Int_t iEvent, AliStack * stack, AliGenEventH fJetsList->Add(jet2); //jet2->Print(); if(fDebug > 1) - printf("HERWIG Jet 2: mother %d, status %d, pt %2.2f,E %2.2f, phi %2.2f, eta %2.2f \n", + printf("AliMCAnalysisUtils::GetJets() - HERWIG Jet 2: mother %d, status %d, pt %2.2f,E %2.2f, phi %2.2f, eta %2.2f \n", jet2->GetFirstMother(),jet2->GetStatusCode(),jet2->Pt(),jet2->Energy(),jet2->Phi()*TMath::RadToDeg(),jet2->Eta()); - Int_t first = tmp->GetFirstDaughter(); - Int_t last = tmp->GetLastDaughter(); - printf("jet 2: first daughter %d, last daughter %d, pdg %d\n",first, last, tmp->GetPdgCode()); + //Int_t first = tmp->GetFirstDaughter(); + //Int_t last = tmp->GetLastDaughter(); + //printf("jet 2: first daughter %d, last daughter %d, pdg %d\n",first, last, tmp->GetPdgCode()); // for(Int_t d = first ; d < last+1; d++){ // tmp = stack->Particle(d); // if(i == tmp->GetFirstMother()) diff --git a/PWG4/PartCorrBase/AliNeutralMesonSelection.cxx b/PWG4/PartCorrBase/AliNeutralMesonSelection.cxx index 973c786af22..c3be0ce6d79 100755 --- a/PWG4/PartCorrBase/AliNeutralMesonSelection.cxx +++ b/PWG4/PartCorrBase/AliNeutralMesonSelection.cxx @@ -288,7 +288,7 @@ void AliNeutralMesonSelection::Print(const Option_t * opt) const if(! opt) return; - Info("Print", "%s %s", GetName(), GetTitle() ) ; + printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ; printf("mass : %f \n", fM ); printf("Invariant mass limits : %f < m < %f \n", fInvMassMinCut , fInvMassMinCut ); diff --git a/PWG4/PartCorrDep/AliAnaChargedParticles.cxx b/PWG4/PartCorrDep/AliAnaChargedParticles.cxx index 684b3aa9b66..15b895cea7f 100755 --- a/PWG4/PartCorrDep/AliAnaChargedParticles.cxx +++ b/PWG4/PartCorrDep/AliAnaChargedParticles.cxx @@ -128,69 +128,70 @@ TList * AliAnaChargedParticles::GetCreateOutputObjects() if(IsDataMC()){ - fhPtPion = new TH1F ("hPtChargedPion","p_T distribution from #pi", nptbins,ptmin,ptmax); + fhPtPion = new TH1F ("hPtMCPion","p_T distribution from #pi", nptbins,ptmin,ptmax); fhPtPion->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtPion); - fhPhiPion = new TH2F ("hPhiChargedPion","#phi distribution from #pi",nptbins,ptmin,ptmax, nphibins,phimin,phimax); + fhPhiPion = new TH2F ("hPhiMCPion","#phi distribution from #pi",nptbins,ptmin,ptmax, nphibins,phimin,phimax); fhPhiPion->SetXTitle("#phi (rad)"); outputContainer->Add(fhPhiPion); - fhEtaPion = new TH2F ("hEtaChargedPion","#eta distribution from #pi",nptbins,ptmin,ptmax, netabins,etamin,etamax); + fhEtaPion = new TH2F ("hEtaMCPion","#eta distribution from #pi",nptbins,ptmin,ptmax, netabins,etamin,etamax); fhEtaPion->SetXTitle("#eta "); outputContainer->Add(fhEtaPion); - fhPtProton = new TH1F ("hPtChargedProton","p_T distribution from proton", nptbins,ptmin,ptmax); + fhPtProton = new TH1F ("hPtMCProton","p_T distribution from proton", nptbins,ptmin,ptmax); fhPtProton->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtProton); - fhPhiProton = new TH2F ("hPhiChargedProton","#phi distribution from proton",nptbins,ptmin,ptmax, nphibins,phimin,phimax); + fhPhiProton = new TH2F ("hPhiMCProton","#phi distribution from proton",nptbins,ptmin,ptmax, nphibins,phimin,phimax); fhPhiProton->SetXTitle("#phi (rad)"); outputContainer->Add(fhPhiProton); - fhEtaProton = new TH2F ("hEtaChargedProton","#eta distribution from proton",nptbins,ptmin,ptmax, netabins,etamin,etamax); + fhEtaProton = new TH2F ("hEtaMCProton","#eta distribution from proton",nptbins,ptmin,ptmax, netabins,etamin,etamax); fhEtaProton->SetXTitle("#eta "); outputContainer->Add(fhEtaProton); - fhPtKaon = new TH1F ("hPtChargedKaon","p_T distribution from kaon", nptbins,ptmin,ptmax); + fhPtKaon = new TH1F ("hPtMCKaon","p_T distribution from kaon", nptbins,ptmin,ptmax); fhPtKaon->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtKaon); - fhPhiKaon = new TH2F ("hPhiChargedKaon","#phi distribution from kaon",nptbins,ptmin,ptmax, nphibins,phimin,phimax); + fhPhiKaon = new TH2F ("hPhiMCKaon","#phi distribution from kaon",nptbins,ptmin,ptmax, nphibins,phimin,phimax); fhPhiKaon->SetXTitle("#phi (rad)"); outputContainer->Add(fhPhiKaon); - fhEtaKaon = new TH2F ("hEtaChargedKaon","#eta distribution from kaon",nptbins,ptmin,ptmax, netabins,etamin,etamax); + fhEtaKaon = new TH2F ("hEtaMCKaon","#eta distribution from kaon",nptbins,ptmin,ptmax, netabins,etamin,etamax); fhEtaKaon->SetXTitle("#eta "); outputContainer->Add(fhEtaKaon); - - fhPtElectron = new TH1F ("hPtChargedElectron","p_T distribution from electron", nptbins,ptmin,ptmax); + fhPtElectron = new TH1F ("hPtMCElectron","p_T distribution from electron", nptbins,ptmin,ptmax); fhPtElectron->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtElectron); - fhPhiElectron = new TH2F ("hPhiChargedElectron","#phi distribution from electron",nptbins,ptmin,ptmax, nphibins,phimin,phimax); + fhPhiElectron = new TH2F ("hPhiMCElectron","#phi distribution from electron",nptbins,ptmin,ptmax, nphibins,phimin,phimax); fhPhiElectron->SetXTitle("#phi (rad)"); outputContainer->Add(fhPhiElectron); - fhEtaElectron = new TH2F ("hEtaChargedElectron","#eta distribution from electron",nptbins,ptmin,ptmax, netabins,etamin,etamax); + fhEtaElectron = new TH2F ("hEtaMCElectron","#eta distribution from electron",nptbins,ptmin,ptmax, netabins,etamin,etamax); fhEtaElectron->SetXTitle("#eta "); outputContainer->Add(fhEtaElectron); - fhPtUnknown = new TH1F ("hPtChargedUnknown","p_T distribution from unknown", nptbins,ptmin,ptmax); + fhPtUnknown = new TH1F ("hPtMCUnknown","p_T distribution from unknown", nptbins,ptmin,ptmax); fhPtUnknown->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtUnknown); - fhPhiUnknown = new TH2F ("hPhiChargedUnknown","#phi distribution from unknown",nptbins,ptmin,ptmax, nphibins,phimin,phimax); + fhPhiUnknown = new TH2F ("hPhiMCUnknown","#phi distribution from unknown",nptbins,ptmin,ptmax, nphibins,phimin,phimax); fhPhiUnknown->SetXTitle("#phi (rad)"); outputContainer->Add(fhPhiUnknown); - fhEtaUnknown = new TH2F ("hEtaChargedUnknown","#eta distribution from unknown",nptbins,ptmin,ptmax, netabins,etamin,etamax); + fhEtaUnknown = new TH2F ("hEtaMCUnknown","#eta distribution from unknown",nptbins,ptmin,ptmax, netabins,etamin,etamax); fhEtaUnknown->SetXTitle("#eta "); outputContainer->Add(fhEtaUnknown); } + return outputContainer; + } //__________________________________________________ @@ -198,7 +199,10 @@ void AliAnaChargedParticles::InitParameters() { //Initialize the parameters of the analysis. SetOutputAODClassName("AliAODPWG4Particle"); - SetOutputAODName("Charged"); + SetOutputAODName("PWG4Particle"); + + AddToHistogramsName("AnaCharged_"); + fPdg = -1; //Select all tracks } @@ -210,6 +214,9 @@ void AliAnaChargedParticles::Print(const Option_t * opt) const if(! opt) return; + printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ; + AliAnaPartCorrBaseClass::Print(" "); + printf("Min Pt = %3.2f\n", GetMinPt()); printf("Max Pt = %3.2f\n", GetMaxPt()); printf("Select clusters with pdg %d \n",fPdg); @@ -222,7 +229,7 @@ void AliAnaChargedParticles::Init() //Init //Do some checks if(!GetReader()->IsCTSSwitchedOn()){ - printf("!!ABORT: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n"); + printf("AliAnaChargedParticles::Init() - !!ABORT: You want to use CTS tracks in analysis but not read!! \n!!Check the configuration file!!\n"); abort(); } @@ -237,7 +244,7 @@ void AliAnaChargedParticles::MakeAnalysisFillAOD() //Some prints if(GetDebug() > 0) - printf("AliAnaChargedParticles : in CTS aod entries %d\n", ntracks); + printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - In CTS aod entries %d\n", ntracks); //Fill AODParticle with CTS aods TVector3 p3; @@ -251,7 +258,7 @@ void AliAnaChargedParticles::MakeAnalysisFillAOD() //Acceptance selection Bool_t in = GetFidutialCut()->IsInFidutialCut(mom,"CTS") ; - if(GetDebug() > 1) printf("track pt %2.2f, phi %2.2f, in fidutial cut %d\n",p3.Pt(), p3.Phi(), in); + if(GetDebug() > 1) printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - Track pt %2.2f, phi %2.2f, in fidutial 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 @@ -266,7 +273,7 @@ void AliAnaChargedParticles::MakeAnalysisFillAOD() }//loop if(GetDebug() > 0) - printf("AliAnaChargedParticles: final aod branch entries %d\n", GetOutputAODBranch()->GetEntriesFast()); + printf("AliAnaChargedParticles::MakeAnalysisFillAOD() - Final aod branch entries %d\n", GetOutputAODBranch()->GetEntriesFast()); } //__________________________________________________________________ @@ -276,7 +283,7 @@ void AliAnaChargedParticles::MakeAnalysisFillHistograms() //Loop on stored AODParticles Int_t naod = GetOutputAODBranch()->GetEntriesFast(); - if(GetDebug() > 0) printf("AliAnaChargedParticles::histo 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)); diff --git a/PWG4/PartCorrDep/AliAnaExample.cxx b/PWG4/PartCorrDep/AliAnaExample.cxx index 32c62d315f0..8df6c56f64e 100755 --- a/PWG4/PartCorrDep/AliAnaExample.cxx +++ b/PWG4/PartCorrDep/AliAnaExample.cxx @@ -161,6 +161,7 @@ TList * AliAnaExample::GetCreateOutputObjects() outputContainer->Add(fh2Eta); } + return outputContainer; } @@ -169,7 +170,9 @@ void AliAnaExample::InitParameters() { //Initialize the parameters of the analysis. SetOutputAODClassName("AliAODPWG4Particle"); - SetOutputAODName("example"); + SetOutputAODName("PWG4Particle"); + AddToHistogramsName("AnaExample_"); + fPdg = 22; //Keep photons fDetector = "PHOS"; @@ -182,8 +185,9 @@ void AliAnaExample::Print(const Option_t * opt) const if(! opt) return; - printf("Min Pt = %3.2f\n", GetMinPt()); - printf("Max Pt = %3.2f\n", GetMaxPt()); + printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ; + AliAnaPartCorrBaseClass::Print(" "); + printf("Select clusters with pdg %d \n",fPdg); printf("Select detector %s \n",fDetector.Data()); @@ -196,9 +200,9 @@ void AliAnaExample::MakeAnalysisFillAOD() //Some prints if(GetDebug() > 0){ - if(fDetector == "EMCAL" && GetAODEMCAL())printf("Example : in EMCAL aod entries %d\n", GetAODEMCAL()->GetEntriesFast()); - if(fDetector == "CTS" && GetAODCTS())printf("Example : in CTS aod entries %d\n", GetAODCTS()->GetEntriesFast()); - if(fDetector == "PHOS" && GetAODPHOS())printf("Example : in PHOS aod entries %d\n", GetAODPHOS()->GetEntriesFast()); + if(fDetector == "EMCAL" && GetAODEMCAL())printf("AliAnaExample::MakeAnalysisFillAOD() - In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntriesFast()); + if(fDetector == "CTS" && GetAODCTS())printf("AliAnaExample::MakeAnalysisFillAOD() - In CTS aod entries %d\n", GetAODCTS()->GetEntriesFast()); + if(fDetector == "PHOS" && GetAODPHOS())printf("AliAnaExample::MakeAnalysisFillAOD() - In PHOS aod entries %d\n", GetAODPHOS()->GetEntriesFast()); } //Get List with tracks or clusters @@ -239,7 +243,7 @@ void AliAnaExample::MakeAnalysisFillAOD() if(IsFidutialCutOn()) in = GetFidutialCut()->IsInFidutialCut(mom,fDetector) ; - if(GetDebug() > 1) printf("cluster pt %2.2f, phi %2.2f, pdg %d, in fidutial cut %d \n",mom.Pt(), mom.Phi(), pdg, in); + if(GetDebug() > 1) printf("AliAnaExample::MakeAnalysisFillAOD() - Cluster pt %2.2f, phi %2.2f, pdg %d, in fidutial cut %d \n",mom.Pt(), mom.Phi(), pdg, in); //Select cluster if momentum, pdg and acceptance are good if(mom.Pt() > GetMinPt() && pdg ==fPdg && in) { @@ -267,12 +271,12 @@ void AliAnaExample::MakeAnalysisFillAOD() } if(!esdCell) { - printf("FillAOD ABORT: No CELLS available for analysis"); + printf("AliAnaExample::MakeAnalysisFillAOD() - ABORT: No CELLS available for analysis"); abort(); } //Some prints if(GetDebug() > 0 && esdCell ) - printf("Example : in ESD %s cell entries %d\n", fDetector.Data(), esdCell->GetNumberOfCells()); + printf("AliAnaExample::MakeAnalysisFillAOD() - In ESD %s cell entries %d\n", fDetector.Data(), esdCell->GetNumberOfCells()); //Fill AODCells in file Int_t ncells = esdCell->GetNumberOfCells() ; @@ -281,7 +285,7 @@ void AliAnaExample::MakeAnalysisFillAOD() GetAODCaloCells()->SetType((AliAODCaloCells::AODCells_t) esdCell->GetType()); for (Int_t iCell = 0; iCell < ncells; iCell++) { - if(GetDebug() > 2) printf("cell : amp %f, absId %d, time %f\n", esdCell->GetAmplitude(iCell), esdCell->GetCellNumber(iCell), esdCell->GetTime(iCell)); + if(GetDebug() > 2) printf("AliAnaExample::MakeAnalysisFillAOD() - Cell : amp %f, absId %d, time %f\n", esdCell->GetAmplitude(iCell), esdCell->GetCellNumber(iCell), esdCell->GetTime(iCell)); GetAODCaloCells()->SetCell(iCell,esdCell->GetCellNumber(iCell),esdCell->GetAmplitude(iCell)); } @@ -301,7 +305,7 @@ void AliAnaExample::MakeAnalysisFillAOD() //Acceptance selection Bool_t in = GetFidutialCut()->IsInFidutialCut(mom,"CTS") ; - if(GetDebug() > 1) printf("track pt %2.2f, phi %2.2f, in fidutial cut %d\n",p3.Pt(), p3.Phi(), in); + if(GetDebug() > 1) printf("AliAnaExample::MakeAnalysisFillAOD() - Track pt %2.2f, phi %2.2f, in fidutial cut %d\n",p3.Pt(), p3.Phi(), in); if(p3.Pt() > GetMinPt() && in) { AliAODPWG4Particle tr = AliAODPWG4Particle(mom[0],mom[1],mom[2],0); tr.SetDetector("CTS"); @@ -313,7 +317,7 @@ void AliAnaExample::MakeAnalysisFillAOD() if(GetDebug() > 0) { if(fDetector!="CTS" && GetReader()->GetDataType()!= AliCaloTrackReader::kMC) //printf("Example: final aod calocluster entries %d\n", GetAODCaloClusters()->GetEntriesFast()); - printf("Example: final aod branch entries %d\n", GetOutputAODBranch()->GetEntriesFast()); + printf("AliAnaExample::MakeAnalysisFillAOD() - Final aod branch entries %d\n", GetOutputAODBranch()->GetEntriesFast()); // if(fDetector!="CTS" && GetReader()->GetDataType()!= AliCaloTrackReader::kMC) //printf("Example: final aod cell entries %d\n", GetAODCaloCells()->GetNumberOfCells()); } @@ -326,7 +330,7 @@ void AliAnaExample::MakeAnalysisFillHistograms() //Loop on stored AODParticles Int_t naod = GetOutputAODBranch()->GetEntriesFast(); - if(GetDebug() > 0) printf("histo aod branch entries %d\n", naod); + if(GetDebug() > 0) printf("AliAnaExample::MakeAnalysisFillHistograms() - Histo aod branch entries %d\n", naod); for(Int_t iaod = 0; iaod < naod ; iaod++){ AliAODPWG4Particle* ph = (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod)); @@ -339,12 +343,12 @@ void AliAnaExample::MakeAnalysisFillHistograms() AliStack * stack = GetMCStack() ; if(ph->GetLabel() < 0 || !stack) { - printf("*** bad label or no stack ***: label %d \n", ph->GetLabel()); + printf("AliAnaExample::MakeAnalysisFillHistograms() *** bad label or no stack ***: label %d \n", ph->GetLabel()); continue; } if(ph->GetLabel() >= stack->GetNtrack()) { - printf("*** large label ***: label %d, n tracks %d \n", ph->GetLabel(), stack->GetNtrack()); + printf("AliAnaExample::MakeAnalysisFillHistograms() *** large label ***: label %d, n tracks %d \n", ph->GetLabel(), stack->GetNtrack()); continue ; } @@ -364,7 +368,7 @@ void AliAnaExample::MakeAnalysisFillHistograms() fhNCells->Fill(ncells) ; for (Int_t iCell = 0; iCell < ncells; iCell++) { - if(GetDebug() > 2) printf("cell : amp %f, absId %d \n", GetAODCaloCells()->GetAmplitude(iCell), GetAODCaloCells()->GetCellNumber(iCell)); + if(GetDebug() > 2) printf("AliAnaExample::MakeAnalysisFillHistograms() - Cell : amp %f, absId %d \n", GetAODCaloCells()->GetAmplitude(iCell), GetAODCaloCells()->GetCellNumber(iCell)); fhAmplitude->Fill(GetAODCaloCells()->GetAmplitude(iCell)); } }//calo cells container exist @@ -377,8 +381,8 @@ void AliAnaExample::Terminate() //Do some plots to end - printf(" *** %s Report:", GetName()) ; - printf(" pt : %5.3f , RMS : %5.3f \n", fhPt->GetMean(), fhPt->GetRMS() ) ; + printf(" AliAnaExample::Terminate() *** %s Report:", GetName()) ; + printf(" AliAnaExample::Terminate() pt : %5.3f , RMS : %5.3f \n", fhPt->GetMean(), fhPt->GetRMS() ) ; TCanvas * c = new TCanvas("c", "PHOS ESD Test", 400, 10, 600, 700) ; c->Divide(1, 3); @@ -404,6 +408,6 @@ void AliAnaExample::Terminate() sprintf(line, ".!rm -fR *.eps"); gROOT->ProcessLine(line); - printf("!! All the eps files are in %s.tar.gz !!!", GetName()); + printf("AliAnaExample::Terminate() - !! All the eps files are in %s.tar.gz !!!", GetName()); } diff --git a/PWG4/PartCorrDep/AliAnaParticleHadronCorrelation.cxx b/PWG4/PartCorrDep/AliAnaParticleHadronCorrelation.cxx index 249cb41b724..3f2b5ec0351 100755 --- a/PWG4/PartCorrDep/AliAnaParticleHadronCorrelation.cxx +++ b/PWG4/PartCorrDep/AliAnaParticleHadronCorrelation.cxx @@ -220,10 +220,11 @@ TList * AliAnaParticleHadronCorrelation::GetCreateOutputObjects() if(GetNeutralMesonSelection()->AreNeutralMesonSelectionHistosKept()) for(Int_t i = 0; i < nmsHistos->GetEntries(); i++) outputContainer->Add(nmsHistos->At(i)) ; } - + }//Correlation with neutral hadrons return outputContainer; + } //____________________________________________________________________________ @@ -231,7 +232,10 @@ void AliAnaParticleHadronCorrelation::InitParameters() { //Initialize the parameters of the analysis. - SetInputAODName("photons"); + SetInputAODName("PWG4Particle"); + SetAODRefArrayName("Hadrons"); + AddToHistogramsName("AnaHadronCorr_"); + SetPtCutRange(2,300); fDeltaPhiMinCut = 1.5 ; fDeltaPhiMaxCut = 4.5 ; @@ -246,9 +250,9 @@ void AliAnaParticleHadronCorrelation::Print(const Option_t * opt) const if(! opt) return; - Info("*** Print *** ", "%s %s", GetName(), GetTitle() ) ; - printf("pT Hadron > %2.2f\n", GetMinPt()) ; - printf("pT Hadron < %2.2f\n", GetMaxPt()) ; + 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) ; @@ -260,43 +264,45 @@ void AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() //Particle-Hadron Correlation Analysis, fill AODs if(!GetInputAODBranch()){ - printf("ParticleHadronCorrelation::FillAOD: No input particles in AOD with name branch < %s >, ABORT \n",GetInputAODName().Data()); + printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s >, ABORT \n",GetInputAODName().Data()); abort(); } if(GetDebug() > 1){ - printf("Begin hadron correlation analysis, fill AODs \n"); - printf("In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); - printf("In CTS aod entries %d\n", GetAODCTS()->GetEntriesFast()); - printf("In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntriesFast()); - printf("In PHOS aod entries %d\n", GetAODPHOS()->GetEntriesFast()); + 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", GetAODCTS()->GetEntriesFast()); + printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntriesFast()); + printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - In PHOS aod entries %d\n", GetAODPHOS()->GetEntriesFast()); } //Loop on stored AOD particles, trigger Int_t naod = GetInputAODBranch()->GetEntriesFast(); for(Int_t iaod = 0; iaod < naod ; iaod++){ AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); + //Make correlation with charged hadrons if(GetReader()->IsCTSSwitchedOn() ) - MakeChargedCorrelation(particle, (TSeqCollection*)GetAODCTS(),kFALSE); + MakeChargedCorrelation(particle, GetAODCTS(),kFALSE); //Make correlation with neutral pions //Trigger particle in PHOS, correlation with EMCAL if(particle->GetDetector()=="PHOS" && GetReader()->IsEMCALSwitchedOn() && GetAODEMCAL()->GetEntriesFast() > 0) - MakeNeutralCorrelation(particle,(TSeqCollection*)GetAODEMCAL(),kFALSE); + MakeNeutralCorrelation(particle, GetAODEMCAL(),kFALSE); //Trigger particle in EMCAL, correlation with PHOS else if(particle->GetDetector()=="EMCAL" && GetReader()->IsPHOSSwitchedOn() && GetAODPHOS()->GetEntriesFast() > 0) - MakeNeutralCorrelation(particle,(TSeqCollection*)GetAODPHOS(),kFALSE); + MakeNeutralCorrelation(particle, GetAODPHOS(),kFALSE); //Trigger particle in CTS, correlation with PHOS, EMCAL and CTS else if(particle->GetDetector()=="CTS" ){ if(GetReader()->IsPHOSSwitchedOn() && GetAODPHOS()->GetEntriesFast() > 0) - MakeNeutralCorrelation(particle,(TSeqCollection*)GetAODPHOS(),kFALSE); + MakeNeutralCorrelation(particle, GetAODPHOS(),kFALSE); if(GetReader()->IsEMCALSwitchedOn() && GetAODEMCAL()->GetEntriesFast() > 0) - MakeNeutralCorrelation(particle,(TSeqCollection*)GetAODEMCAL(),kFALSE); + MakeNeutralCorrelation(particle, GetAODEMCAL(),kFALSE); } - + + }//Aod branch loop - if(GetDebug() > 1) printf("End hadron correlation analysis, fill AODs \n"); + if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillAOD() - End fill AODs \n"); } @@ -306,45 +312,48 @@ void AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() //Particle-Hadron Correlation Analysis, fill histograms if(!GetInputAODBranch()){ - printf("ParticleHadronCorrelation::FillHistos: No input particles in AOD with name branch < %s >, ABORT \n",GetInputAODName().Data()); + printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - No input particles in AOD with name branch < %s >, ABORT \n",GetInputAODName().Data()); abort(); } + if(GetDebug() > 1){ - printf("Begin hadron correlation analysis, fill histograms \n"); - printf("In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); + printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Begin hadron correlation analysis, fill histograms \n"); + printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); } - + //Loop on stored AOD particles Int_t naod = GetInputAODBranch()->GetEntriesFast(); for(Int_t iaod = 0; iaod < naod ; iaod++){ - AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); - - if(GetDebug() > 1){ - printf("Particle %d, In Track Refs entries %d\n", iaod, (particle->GetRefTracks())->GetEntriesFast()); - printf("Particle %d, In Cluster Refs entries %d\n",iaod, (particle->GetRefClusters())->GetEntriesFast()); - } - - if(OnlyIsolated() && !particle->IsIsolated()) continue; - - //Make correlation with charged hadrons - if((particle->GetRefTracks())->GetEntriesFast() > 0) - MakeChargedCorrelation(particle, (TSeqCollection*) (particle->GetRefTracks()),kTRUE); - - //Make correlation with neutral pions - if((particle->GetRefClusters())->GetEntriesFast() > 0) - MakeNeutralCorrelation(particle, (TSeqCollection*) (particle->GetRefClusters()), kTRUE); - + AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); + + //check if the particle is isolated or if we want to take the isolation into account + if(OnlyIsolated() && !particle->IsIsolated()) continue; + + //Make correlation with charged hadrons + TRefArray * reftracks = particle->GetRefArray(GetAODRefArrayName()+"Tracks"); + if(reftracks){ + if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Particle %d, In Track Refs entries %d\n", iaod, reftracks->GetEntriesFast()); + if(reftracks->GetEntriesFast() > 0) MakeChargedCorrelation(particle, reftracks,kTRUE); + } + + //Make correlation with neutral pions + TRefArray * refclusters = particle->GetRefArray(GetAODRefArrayName()+"Clusters"); + if(refclusters && refclusters->GetEntriesFast() > 0){ + if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - Particle %d, In Cluster Refs entries %d\n",iaod, refclusters->GetEntriesFast()); + if(refclusters->GetEntriesFast() > 0) MakeNeutralCorrelation(particle,refclusters, kTRUE); + } + }//Aod branch loop - if(GetDebug() > 1) printf("End hadron correlation analysis, fill histograms \n"); + if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n"); } //____________________________________________________________________________ -void AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle, TSeqCollection* pl, const Bool_t bFillHisto) +void AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4ParticleCorrelation *aodParticle, TRefArray* pl, const Bool_t bFillHisto) { // Charged Hadron Correlation Analysis - if(GetDebug() > 1)printf("Make trigger particle - charged hadron correlation \n"); + if(GetDebug() > 1)printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Make trigger particle - charged hadron correlation \n"); Double_t ptTrig = aodParticle->Pt(); Double_t phiTrig = aodParticle->Phi(); @@ -355,6 +364,11 @@ void AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4Particle Double_t p[3]; Bool_t first=kTRUE; + TRefArray * reftracks =0x0; + if(!bFillHisto) + reftracks = new TRefArray; + + //Track loop, select tracks with good pt, phi and fill AODs or histograms for(Int_t ipr = 0;ipr < pl->GetEntries() ; ipr ++ ){ AliAODTrack * track = (AliAODTrack *) (pl->At(ipr)) ; @@ -375,7 +389,7 @@ void AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4Particle if(pt < GetMinPt() || pt > GetMaxPt()) continue ; if(GetDebug() > 2) - printf("charged hadron: pt %f, phi %f, phi trigger %f. Cuts: delta phi min %2.2f, max%2.2f, pT min %2.2f \n", + printf("AliAnaParticleHadronCorrelation::MakeChargedCorrelation() - Charged hadron: pt %f, phi %f, phi trigger %f. Cuts: delta phi min %2.2f, max%2.2f, pT min %2.2f \n", pt,phi,phiTrig,fDeltaPhiMinCut, fDeltaPhiMaxCut, GetMinPt()); if(bFillHisto){ @@ -387,7 +401,7 @@ void AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4Particle fhDeltaPhiChargedPt->Fill(pt,phiTrig-phi); //Selection within angular range if(((phiTrig-phi)> fDeltaPhiMinCut) && ((phiTrig-phi) 2 ) printf("Selected charge for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f ",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); fhPtImbalanceCharged->Fill(ptTrig,rat); } } @@ -395,21 +409,27 @@ void AliAnaParticleHadronCorrelation::MakeChargedCorrelation(AliAODPWG4Particle //Fill AODs if(first) { - new (aodParticle->GetRefTracks()) TRefArray(TProcessID::GetProcessWithUID(track)); + new (reftracks) TRefArray(TProcessID::GetProcessWithUID(track)); first = kFALSE; } - - aodParticle->AddTrack(track); + + reftracks->Add(track); }//aod particle loop }// track loop + //Fill AOD with reference tracks, if not filling histograms + if(!bFillHisto && reftracks->GetEntriesFast() > 0) { + reftracks->SetName(GetAODRefArrayName()+"Tracks"); + aodParticle->AddRefArray(reftracks); + } + } //____________________________________________________________________________ -void AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4ParticleCorrelation * aodParticle,TSeqCollection* pl, const Bool_t bFillHisto) +void AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4ParticleCorrelation * aodParticle,TRefArray* pl, const Bool_t bFillHisto) { // Neutral Pion Correlation Analysis - if(GetDebug() > 1) printf("Make trigger particle - neutral hadron correlation \n"); + if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Make trigger particle - neutral hadron correlation \n"); Double_t pt = -100.; Double_t rat = -100.; @@ -424,9 +444,12 @@ void AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4Particle TLorentzVector gammaj; Double_t vertex[] = {0,0,0}; - if(!GetReader()->GetDataType()== AliCaloTrackReader::kMC) GetReader()->GetVertex(vertex); + TRefArray * refclusters =0x0; + if(!bFillHisto) + refclusters = new TRefArray; + //Cluster loop, select pairs with good pt, phi and fill AODs or histograms for(Int_t iclus = 0;iclus < pl->GetEntries() ; iclus ++ ){ AliAODCaloCluster * calo = (AliAODCaloCluster *) (pl->At(iclus)) ; @@ -437,7 +460,7 @@ void AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4Particle if(!SelectCluster(calo, vertex, gammai, pdg)) continue ; if(GetDebug() > 2) - printf("neutral cluster: pt %f, phi %f, phi trigger %f. Cuts: delta phi min %2.2f, max%2.2f, pT min %2.2f \n", + printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Neutral cluster: pt %f, phi %f, phi trigger %f. Cuts: delta phi min %2.2f, max%2.2f, pT min %2.2f \n", gammai.Pt(),gammai.Phi(),phiTrig,fDeltaPhiMinCut, fDeltaPhiMaxCut, GetMinPt()); //2 gamma overlapped, found with PID @@ -447,12 +470,12 @@ void AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4Particle if(gammai.Pt() < GetMinPt() || gammai.Pt() > GetMaxPt()) continue ; if(first) { - new (aodParticle->GetRefClusters()) TRefArray(TProcessID::GetProcessWithUID(calo)); + new (refclusters) TRefArray(TProcessID::GetProcessWithUID(calo)); first = kFALSE; } - aodParticle->AddCluster(calo); - if(GetDebug() > 2) printf("Correlated with selected pi0 (pid): pt %f, phi %f",gammai.Pt(),gammai.Phi()); + refclusters->Add(calo); + if(GetDebug() > 2) printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Correlated with selected pi0 (pid): pt %f, phi %f\n",gammai.Pt(),gammai.Phi()); }// pdg = 111 @@ -474,7 +497,7 @@ void AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4Particle //Select good pair (aperture and invariant mass) if(GetNeutralMesonSelection()->SelectPair(gammai, gammaj)){ - if(GetDebug() > 2 ) printf("Neutral Hadron Correlation: AOD Selected gamma pair: pt %2.2f, phi %2.2f, eta %2.2f, M %2.3f", + if(GetDebug() > 2 ) printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Neutral Hadron Correlation: AOD Selected gamma pair: pt %2.2f, phi %2.2f, eta %2.2f, M %2.3f\n", (gammai+gammaj).Pt(),(gammai+gammaj).Phi(),(gammai+gammaj).Eta(), (gammai+gammaj).M()); Int_t labels[]={calo->GetLabel(0),calo2->GetLabel(0)}; Float_t pid[]={0,0,0,0,0,0,1,0,0,0,0,0,0};//Pi0 weight 1 @@ -485,11 +508,12 @@ void AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4Particle GetReader()->GetAODEMCAL()->Add(caloCluster); if(first) { - new (aodParticle->GetRefClusters()) TRefArray(TProcessID::GetProcessWithUID(caloCluster)); + new (refclusters) TRefArray(TProcessID::GetProcessWithUID(caloCluster)); first = kFALSE; } - - aodParticle->AddCluster(caloCluster); + + refclusters->Add(calo); + }//Pair selected }//if pair of gammas }//2nd loop @@ -506,7 +530,7 @@ void AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4Particle phi = gammai.Phi() ; eta = gammai.Eta() ; - if(GetDebug() > 2 ) printf("Neutral Hadron Correlation: Histograms selected gamma pair: pt %2.2f, phi %2.2f, eta %2.2f",pt,phi,eta); + if(GetDebug() > 2 ) printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Neutral Hadron Correlation: Histograms selected gamma pair: pt %2.2f, phi %2.2f, eta %2.2f\n",pt,phi,eta); fhEtaNeutral->Fill(ptTrig,eta); fhPhiNeutral->Fill(ptTrig,phi); @@ -515,12 +539,17 @@ void AliAnaParticleHadronCorrelation::MakeNeutralCorrelation(AliAODPWG4Particle fhDeltaPhiNeutralPt->Fill(pt,phiTrig-phi); //Selection within angular range if(((phiTrig-phi)> fDeltaPhiMinCut) && ((phiTrig-phi) 2 ) printf("Selected neutral for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f ",pt,phi,eta); + if(GetDebug() > 2 ) printf("AliAnaParticleHadronCorrelation::MakeNeutralCorrelation() - Selected neutral for momentum imbalance: pt %2.2f, phi %2.2f, eta %2.2f \n",pt,phi,eta); fhPtImbalanceNeutral->Fill(ptTrig,rat); } }//Fill histograms }//1st loop + //Fill AOD with reference tracks, if not filling histograms + if(!bFillHisto && refclusters->GetEntriesFast() > 0) { + refclusters->SetName(GetAODRefArrayName()+"Clusters"); + aodParticle->AddRefArray(refclusters); + } } //____________________________________________________________________________ @@ -546,7 +575,7 @@ Bool_t AliAnaParticleHadronCorrelation::SelectCluster(AliAODCaloCluster * calo, else pdg = GetCaloPID()->GetPdg(detector,mom,calo);//PID recalculated - if(GetDebug() > 1) printf("PDG of identified particle %d\n",pdg); + if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::SelectCluster() - PDG of identified particle %d\n",pdg); //If it does not pass pid, skip if(pdg != AliCaloPID::kPhoton || pdg != AliCaloPID::kPi0) { @@ -564,7 +593,7 @@ Bool_t AliAnaParticleHadronCorrelation::SelectCluster(AliAODCaloCluster * calo, if(! in ) { return kFALSE ;} } - if(GetDebug() > 1) printf("Correlation photon selection cuts passed: pT %3.2f, pdg %d\n",mom.Pt(), pdg); + if(GetDebug() > 1) printf("AliAnaParticleHadronCorrelation::SelectCluster() - Correlation photon selection cuts passed: pT %3.2f, pdg %d\n",mom.Pt(), pdg); return kTRUE; diff --git a/PWG4/PartCorrDep/AliAnaParticleHadronCorrelation.h b/PWG4/PartCorrDep/AliAnaParticleHadronCorrelation.h index 6add712ebfd..e71b82d44c9 100755 --- a/PWG4/PartCorrDep/AliAnaParticleHadronCorrelation.h +++ b/PWG4/PartCorrDep/AliAnaParticleHadronCorrelation.h @@ -39,8 +39,8 @@ class AliAnaParticleHadronCorrelation : public AliAnaPartCorrBaseClass { void Print(const Option_t * opt) const; - void MakeChargedCorrelation(AliAODPWG4ParticleCorrelation * aodParticle,TSeqCollection* pl, const Bool_t bFillHisto) ; - void MakeNeutralCorrelation(AliAODPWG4ParticleCorrelation * aodParticle,TSeqCollection* pl, const Bool_t bFillHisto) ; + void MakeChargedCorrelation(AliAODPWG4ParticleCorrelation * aodParticle,TRefArray* pl, const Bool_t bFillHisto) ; + void MakeNeutralCorrelation(AliAODPWG4ParticleCorrelation * aodParticle,TRefArray* pl, const Bool_t bFillHisto) ; void MakeAnalysisFillAOD() ; diff --git a/PWG4/PartCorrDep/AliAnaParticleIsolation.cxx b/PWG4/PartCorrDep/AliAnaParticleIsolation.cxx index 0572f9b5c6e..bc540cf9bd8 100755 --- a/PWG4/PartCorrDep/AliAnaParticleIsolation.cxx +++ b/PWG4/PartCorrDep/AliAnaParticleIsolation.cxx @@ -1,4 +1,4 @@ -/************************************************************************** +/************************************************************************** * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * @@ -30,6 +30,7 @@ #include #include #include +//#include // --- Analysis system --- #include "AliAnaParticleIsolation.h" @@ -293,7 +294,7 @@ AliAnaParticleIsolation::~AliAnaParticleIsolation() } //_________________________________________________________________________ -Bool_t AliAnaParticleIsolation::CheckInvMass(const Int_t iaod, const AliAODPWG4ParticleCorrelation * part1) const +Bool_t AliAnaParticleIsolation::CheckInvMass(const Int_t iaod, const AliAODPWG4Particle * part1) const { // Search if there is a companion decay photon to the candidate // and discard it in such case @@ -307,7 +308,7 @@ Bool_t AliAnaParticleIsolation::CheckInvMass(const Int_t iaod, const AliAODPWG4P mom2 = *(part2->Momentum()); //Select good pair (good phi, pt cuts, aperture and invariant mass) if(GetNeutralMesonSelection()->SelectPair(mom1, mom2)){ - if(GetDebug() > 1)printf("Selected gamma pair: pt %f, phi %f, eta%f",(mom1+mom2).Pt(), (mom1+mom2).Phi()*180./3.1416, (mom1+mom2).Eta()); + if(GetDebug() > 1)printf("AliAnaParticleIsolation::CheckInvMass() - Selected gamma pair: pt %f, phi %f, eta%f",(mom1+mom2).Pt(), (mom1+mom2).Phi()*180./3.1416, (mom1+mom2).Eta()); return kTRUE ; } }//loop @@ -343,136 +344,136 @@ TList * AliAnaParticleIsolation::GetCreateOutputObjects() if(!fMakeSeveralIC){ fhConeSumPt = new TH2F - ("hConePtSum","#Sigma p_{T} in cone ",nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); + ("hConePtSum","#Sigma p_{T} in isolation cone ",nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhConeSumPt->SetYTitle("#Sigma p_{T}"); - fhConeSumPt->SetXTitle("p_{T #gamma} (GeV/c)"); + fhConeSumPt->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhConeSumPt) ; fhPtInCone = new TH2F - ("hPtInCone","p_{T} in cone ",nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax); + ("hPtInCone","p_{T} in isolation cone ",nptbins,ptmin,ptmax,nptinconebins,ptinconemin,ptinconemax); fhPtInCone->SetYTitle("p_{T in cone} (GeV/c)"); - fhPtInCone->SetXTitle("p_{T #gamma} (GeV/c)"); + fhPtInCone->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtInCone) ; - fhPtIso = new TH1F("hPtIso","Isolated Number of #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtIso = new TH1F("hPt","Isolated Number of particles",nptbins,ptmin,ptmax); fhPtIso->SetYTitle("N"); - fhPtIso->SetXTitle("p_{T #gamma}(GeV/c)"); + fhPtIso->SetXTitle("p_{T}(GeV/c)"); outputContainer->Add(fhPtIso) ; fhPhiIso = new TH2F - ("hPhiIso","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhi","Isolated Number of particles",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiIso->SetYTitle("#phi"); - fhPhiIso->SetXTitle("p_{T #gamma} (GeV/c)"); + fhPhiIso->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPhiIso) ; fhEtaIso = new TH2F - ("hEtaIso","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEta","Isolated Number of particles",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaIso->SetYTitle("#eta"); - fhEtaIso->SetXTitle("p_{T #gamma} (GeV/c)"); + fhEtaIso->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhEtaIso) ; if(IsDataMC()){ - fhPtIsoPrompt = new TH1F("hPtIsoPrompt","Isolated Number of #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtIsoPrompt = new TH1F("hPtMCPrompt","Isolated Number of #gamma prompt",nptbins,ptmin,ptmax); fhPtIsoPrompt->SetYTitle("N"); fhPtIsoPrompt->SetXTitle("p_{T #gamma}(GeV/c)"); outputContainer->Add(fhPtIsoPrompt) ; fhPhiIsoPrompt = new TH2F - ("hPhiIsoPrompt","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCPrompt","Isolated Number of #gamma prompt",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiIsoPrompt->SetYTitle("#phi"); fhPhiIsoPrompt->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiIsoPrompt) ; fhEtaIsoPrompt = new TH2F - ("hEtaIsoPrompt","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCPrompt","Isolated Number of #gamma prompt ",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaIsoPrompt->SetYTitle("#eta"); fhEtaIsoPrompt->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaIsoPrompt) ; - fhPtIsoFragmentation = new TH1F("hPtIsoFragmentation","Isolated Number of #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtIsoFragmentation = new TH1F("hPtMCFragmentation","Isolated Number of #gamma",nptbins,ptmin,ptmax); fhPtIsoFragmentation->SetYTitle("N"); fhPtIsoFragmentation->SetXTitle("p_{T #gamma}(GeV/c)"); outputContainer->Add(fhPtIsoFragmentation) ; fhPhiIsoFragmentation = new TH2F - ("hPhiIsoFragmentation","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCFragmentation","Isolated Number of #gamma fragmentation",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiIsoFragmentation->SetYTitle("#phi"); fhPhiIsoFragmentation->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiIsoFragmentation) ; fhEtaIsoFragmentation = new TH2F - ("hEtaIsoFragmentation","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCFragmentation","Isolated Number of #gamma fragmentation",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaIsoFragmentation->SetYTitle("#eta"); fhEtaIsoFragmentation->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaIsoFragmentation) ; - fhPtIsoPi0Decay = new TH1F("hPtIsoPi0Decay","Isolated Number of #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtIsoPi0Decay = new TH1F("hPtMCPi0Decay","Isolated Number of #gamma from #pi^{0} decay",nptbins,ptmin,ptmax); fhPtIsoPi0Decay->SetYTitle("N"); fhPtIsoPi0Decay->SetXTitle("p_{T #gamma}(GeV/c)"); outputContainer->Add(fhPtIsoPi0Decay) ; fhPhiIsoPi0Decay = new TH2F - ("hPhiIsoPi0Decay","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCPi0Decay","Isolated Number of #gamma from #pi^{0} decay",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiIsoPi0Decay->SetYTitle("#phi"); fhPhiIsoPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiIsoPi0Decay) ; fhEtaIsoPi0Decay = new TH2F - ("hEtaIsoPi0Decay","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCPi0Decay","Isolated Number of #gamma from #pi^{0} decay",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaIsoPi0Decay->SetYTitle("#eta"); fhEtaIsoPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaIsoPi0Decay) ; - fhPtIsoOtherDecay = new TH1F("hPtIsoOtherDecay","Isolated Number of #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtIsoOtherDecay = new TH1F("hPtMCOtherDecay","Isolated Number of #gamma from non #pi^{0} decay",nptbins,ptmin,ptmax); fhPtIsoOtherDecay->SetYTitle("N"); fhPtIsoOtherDecay->SetXTitle("p_{T #gamma}(GeV/c)"); outputContainer->Add(fhPtIsoOtherDecay) ; fhPhiIsoOtherDecay = new TH2F - ("hPhiIsoOtherDecay","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCOtherDecay","Isolated Number of #gamma from non #pi^{0} decay",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiIsoOtherDecay->SetYTitle("#phi"); fhPhiIsoOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiIsoOtherDecay) ; fhEtaIsoOtherDecay = new TH2F - ("hEtaIsoOtherDecay","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCOtherDecay","Isolated Number of #gamma non #pi^{0} decay",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaIsoOtherDecay->SetYTitle("#eta"); fhEtaIsoOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaIsoOtherDecay) ; - fhPtIsoConversion = new TH1F("hPtIsoConversion","Isolated Number of #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtIsoConversion = new TH1F("hPtMCConversion","Isolated Number of #gamma converted",nptbins,ptmin,ptmax); fhPtIsoConversion->SetYTitle("N"); fhPtIsoConversion->SetXTitle("p_{T #gamma}(GeV/c)"); outputContainer->Add(fhPtIsoConversion) ; fhPhiIsoConversion = new TH2F - ("hPhiIsoConversion","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCConversion","Isolated Number of #gamma converted",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiIsoConversion->SetYTitle("#phi"); fhPhiIsoConversion->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiIsoConversion) ; fhEtaIsoConversion = new TH2F - ("hEtaIsoConversion","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCConversion","Isolated Number of #gamma converted",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaIsoConversion->SetYTitle("#eta"); fhEtaIsoConversion->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaIsoConversion) ; - fhPtIsoUnknown = new TH1F("hPtIsoUnknown","Isolated Number of #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtIsoUnknown = new TH1F("hPtMCUnknown","Isolated Number of non #gamma particles",nptbins,ptmin,ptmax); fhPtIsoUnknown->SetYTitle("N"); - fhPtIsoUnknown->SetXTitle("p_{T #gamma}(GeV/c)"); + fhPtIsoUnknown->SetXTitle("p_{T}(GeV/c)"); outputContainer->Add(fhPtIsoUnknown) ; fhPhiIsoUnknown = new TH2F - ("hPhiIsoUnknown","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCUnknown","Isolated Number of non #gamma particles",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiIsoUnknown->SetYTitle("#phi"); - fhPhiIsoUnknown->SetXTitle("p_{T #gamma} (GeV/c)"); + fhPhiIsoUnknown->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPhiIsoUnknown) ; fhEtaIsoUnknown = new TH2F - ("hEtaIsoUnknown","Isolated #phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCUnknown","Isolated Number of non #gamma particles",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaIsoUnknown->SetYTitle("#eta"); - fhEtaIsoUnknown->SetXTitle("p_{T #gamma} (GeV/c)"); + fhEtaIsoUnknown->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhEtaIsoUnknown) ; }//Histos with MC @@ -482,7 +483,7 @@ TList * AliAnaParticleIsolation::GetCreateOutputObjects() char name[128]; char title[128]; for(Int_t icone = 0; iconeSetYTitle("#Sigma p_{T} (GeV/c)"); @@ -490,42 +491,42 @@ TList * AliAnaParticleIsolation::GetCreateOutputObjects() outputContainer->Add(fhPtSumIsolated[icone]) ; if(IsDataMC()){ - sprintf(name,"hPtSumIsolatedPrompt_Cone_%d",icone); + sprintf(name,"hPtSumPrompt_Cone_%d",icone); sprintf(title,"Candidate Prompt cone sum p_{T} for cone size %d vs candidate p_{T}",icone); fhPtSumIsolatedPrompt[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhPtSumIsolatedPrompt[icone]->SetYTitle("#Sigma p_{T} (GeV/c)"); fhPtSumIsolatedPrompt[icone]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtSumIsolatedPrompt[icone]) ; - sprintf(name,"hPtSumIsolatedFragmentation_Cone_%d",icone); + sprintf(name,"hPtSumFragmentation_Cone_%d",icone); sprintf(title,"Candidate Fragmentation cone sum p_{T} for cone size %d vs candidate p_{T}",icone); fhPtSumIsolatedFragmentation[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhPtSumIsolatedFragmentation[icone]->SetYTitle("#Sigma p_{T} (GeV/c)"); fhPtSumIsolatedFragmentation[icone]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtSumIsolatedFragmentation[icone]) ; - sprintf(name,"hPtSumIsolatedPi0Decay_Cone_%d",icone); + sprintf(name,"hPtSumPi0Decay_Cone_%d",icone); sprintf(title,"Candidate Pi0Decay cone sum p_{T} for cone size %d vs candidate p_{T}",icone); fhPtSumIsolatedPi0Decay[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhPtSumIsolatedPi0Decay[icone]->SetYTitle("#Sigma p_{T} (GeV/c)"); fhPtSumIsolatedPi0Decay[icone]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtSumIsolatedPi0Decay[icone]) ; - sprintf(name,"hPtSumIsolatedOtherDecay_Cone_%d",icone); + sprintf(name,"hPtSumOtherDecay_Cone_%d",icone); sprintf(title,"Candidate OtherDecay cone sum p_{T} for cone size %d vs candidate p_{T}",icone); fhPtSumIsolatedOtherDecay[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhPtSumIsolatedOtherDecay[icone]->SetYTitle("#Sigma p_{T} (GeV/c)"); fhPtSumIsolatedOtherDecay[icone]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtSumIsolatedOtherDecay[icone]) ; - sprintf(name,"hPtSumIsolatedConversion_Cone_%d",icone); + sprintf(name,"hPtSumConversion_Cone_%d",icone); sprintf(title,"Candidate Conversion cone sum p_{T} for cone size %d vs candidate p_{T}",icone); fhPtSumIsolatedConversion[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhPtSumIsolatedConversion[icone]->SetYTitle("#Sigma p_{T} (GeV/c)"); fhPtSumIsolatedConversion[icone]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtSumIsolatedConversion[icone]) ; - sprintf(name,"hPtSumIsolatedUnknown_Cone_%d",icone); + sprintf(name,"hPtSumUnknown_Cone_%d",icone); sprintf(title,"Candidate Unknown cone sum p_{T} for cone size %d vs candidate p_{T}",icone); fhPtSumIsolatedUnknown[icone] = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax); fhPtSumIsolatedUnknown[icone]->SetYTitle("#Sigma p_{T} (GeV/c)"); @@ -535,86 +536,86 @@ TList * AliAnaParticleIsolation::GetCreateOutputObjects() }//Histos with MC for(Int_t ipt = 0; iptSetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolated[icone][ipt]) ; - sprintf(name,"hPtFracIsol_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtFrac_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolated[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolated[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolated[icone][ipt]) ; if(IsDataMC()){ - sprintf(name,"hPtThresIsolPrompt_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtThresMCPrompt_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate Prompt p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtThresIsolatedPrompt[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtThresIsolatedPrompt[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolatedPrompt[icone][ipt]) ; - sprintf(name,"hPtFracIsolPrompt_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtFracMCPrompt_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate Prompt p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolatedPrompt[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolatedPrompt[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolatedPrompt[icone][ipt]) ; - sprintf(name,"hPtThresIsolFragmentation_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtThresMCFragmentation_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate Fragmentation p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtThresIsolatedFragmentation[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtThresIsolatedFragmentation[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolatedFragmentation[icone][ipt]) ; - sprintf(name,"hPtFracIsolFragmentation_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtFracMCFragmentation_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate Fragmentation p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolatedFragmentation[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolatedFragmentation[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolatedFragmentation[icone][ipt]) ; - sprintf(name,"hPtThresIsolPi0Decay_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtThresMCPi0Decay_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate Pi0Decay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtThresIsolatedPi0Decay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtThresIsolatedPi0Decay[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolatedPi0Decay[icone][ipt]) ; - sprintf(name,"hPtFracIsolPi0Decay_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtFracMCPi0Decay_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate Pi0Decay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolatedPi0Decay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolatedPi0Decay[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolatedPi0Decay[icone][ipt]) ; - sprintf(name,"hPtThresIsolOtherDecay_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtThresMCOtherDecay_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate OtherDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtThresIsolatedOtherDecay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtThresIsolatedOtherDecay[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolatedOtherDecay[icone][ipt]) ; - sprintf(name,"hPtFracIsolOtherDecay_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtFracMCOtherDecay_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate OtherDecay p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolatedOtherDecay[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolatedOtherDecay[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolatedOtherDecay[icone][ipt]) ; - sprintf(name,"hPtThresIsolConversion_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtThresMCConversion_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate Conversion p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtThresIsolatedConversion[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtThresIsolatedConversion[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolatedConversion[icone][ipt]) ; - sprintf(name,"hPtFracIsolConversion_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtFracMCConversion_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate Conversion p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolatedConversion[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolatedConversion[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtFracIsolatedConversion[icone][ipt]) ; - sprintf(name,"hPtThresIsolUnknown_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtThresMCUnknown_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate Unknown p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtThresIsolatedUnknown[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtThresIsolatedUnknown[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); outputContainer->Add(fhPtThresIsolatedUnknown[icone][ipt]) ; - sprintf(name,"hPtFracIsolUnknown_Cone_%d_Pt%d",icone,ipt); + sprintf(name,"hPtFracMCUnknown_Cone_%d_Pt%d",icone,ipt); sprintf(title,"Isolated candidate Unknown p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt); fhPtFracIsolatedUnknown[icone][ipt] = new TH1F(name, title,nptbins,ptmin,ptmax); fhPtFracIsolatedUnknown[icone][ipt]->SetXTitle("p_{T} (GeV/c)"); @@ -634,7 +635,6 @@ TList * AliAnaParticleIsolation::GetCreateOutputObjects() for(Int_t i = 0; i < nmsHistos->GetEntries(); i++) outputContainer->Add(nmsHistos->At(i)) ; } - //Save parameters used for analysis TString parList ; //this will be list of parameters used for this analysis. char onePar[255] ; @@ -691,9 +691,10 @@ void AliAnaParticleIsolation::MakeAnalysisFillAOD() //Search for the isolated photon in fCalorimeter with pt > GetMinPt() if(!GetInputAODBranch()){ - printf("ParticleIsolation::FillAOD: No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data()); + printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s >, STOP \n",GetInputAODName().Data()); abort(); } + Int_t n = 0, nfrac = 0; Bool_t isolated = kFALSE ; Float_t coneptsum = 0 ; @@ -712,24 +713,25 @@ void AliAnaParticleIsolation::MakeAnalysisFillAOD() TLorentzVector mom ; for(Int_t iaod = 0; iaod < GetInputAODBranch()->GetEntriesFast(); iaod++){ - AliAODPWG4ParticleCorrelation * aod = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); + AliAODPWG4ParticleCorrelation * aodinput = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); //If too small or too large pt, skip - if(aod->Pt() < GetMinPt() || aod->Pt() > GetMaxPt() ) continue ; + if(aodinput->Pt() < GetMinPt() || aodinput->Pt() > GetMaxPt() ) continue ; //Check invariant mass, if pi0, skip. Bool_t decay = kFALSE ; - if(fMakeInvMass) decay = CheckInvMass(iaod,aod); + if(fMakeInvMass) decay = CheckInvMass(iaod,aodinput); if(decay) continue ; - + + //After cuts, study isolation n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0; - GetIsolationCut()->MakeIsolationCut(GetAODCTS(),pl, - fVertex, kTRUE, aod, n,nfrac,coneptsum, isolated); - aod->SetIsolated(isolated); + GetIsolationCut()->MakeIsolationCut(GetAODCTS(),pl,fVertex, kTRUE, aodinput, GetAODRefArrayName(), n,nfrac,coneptsum, isolated); + aodinput->SetIsolated(isolated); + }//loop - if(GetDebug() > 1) printf("End fill AODs "); + if(GetDebug() > 1) printf("AliAnaParticleIsolation::MakeAnalysisFillAOD() - End fill AODs "); } @@ -744,17 +746,18 @@ void AliAnaParticleIsolation::MakeAnalysisFillHistograms() //Loop on stored AOD Int_t naod = GetInputAODBranch()->GetEntriesFast(); - if(GetDebug() > 0) printf("histo aod branch entries %d\n", naod); + if(GetDebug() > 0) printf(" AliAnaParticleIsolation::MakeAnalysisFillHistograms() - Histo aod branch entries %d\n", naod); for(Int_t iaod = 0; iaod < naod ; iaod++){ AliAODPWG4ParticleCorrelation* aod = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); - Bool_t isolation = aod->IsIsolated(); + + Bool_t isolation = aod->IsIsolated(); Float_t ptcluster = aod->Pt(); Float_t phicluster = aod->Phi(); Float_t etacluster = aod->Eta(); - - //is pt too small skip it - if(ptcluster < GetMinPt() || ptcluster > GetMaxPt() ) continue ; - + //Recover reference arrays with clusters and tracks + TRefArray * refclusters = aod->GetRefArray(GetAODRefArrayName()+"Clusters"); + TRefArray * reftracks = aod->GetRefArray(GetAODRefArrayName()+"Tracks"); + if(fMakeSeveralIC) { //Analysis of multiple IC at same time MakeSeveralICAnalysis(aod); @@ -763,30 +766,32 @@ void AliAnaParticleIsolation::MakeAnalysisFillHistograms() else if(fReMakeIC){ //In case a more strict IC is needed in the produced AOD n=0; nfrac = 0; isolated = kFALSE; coneptsum = 0; - GetIsolationCut()->MakeIsolationCut(aod->GetRefIsolationConeTracks(), - aod->GetRefIsolationConeClusters(), - fVertex, kFALSE, aod, - n,nfrac,coneptsum, isolated); + GetIsolationCut()->MakeIsolationCut(reftracks, refclusters, fVertex, kFALSE, aod, "", n,nfrac,coneptsum, isolated); fhConeSumPt->Fill(ptcluster,coneptsum); } //Fill pt distribution of particles in cone //Tracks coneptsum=0; - for(Int_t itrack=0; itrack < (aod->GetRefIsolationConeTracks())->GetEntriesFast(); itrack++){ - AliAODTrack* track = (AliAODTrack *)((aod->GetRefIsolationConeTracks())->At(itrack)); - fhPtInCone->Fill(ptcluster,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py())); - coneptsum+=track->Pt(); - } + if(reftracks){ + for(Int_t itrack=0; itrack < reftracks->GetEntriesFast(); itrack++){ + AliAODTrack* track = (AliAODTrack *) reftracks->At(itrack); + fhPtInCone->Fill(ptcluster,TMath::Sqrt(track->Px()*track->Px()+track->Py()*track->Py())); + coneptsum+=track->Pt(); + } + } + //CaloClusters - TLorentzVector mom ; - for(Int_t icalo=0; icalo < (aod->GetRefIsolationConeClusters())->GetEntriesFast(); icalo++){ - AliAODCaloCluster* calo = (AliAODCaloCluster *)((aod->GetRefIsolationConeClusters())->At(icalo)); - calo->GetMomentum(mom,fVertex);//Assume that come from vertex in straight line - fhPtInCone->Fill(ptcluster, mom.Pt()); - coneptsum+=mom.Pt(); + if(refclusters){ + TLorentzVector mom ; + for(Int_t icalo=0; icalo < refclusters->GetEntriesFast(); icalo++){ + AliAODCaloCluster* calo = (AliAODCaloCluster *) refclusters->At(icalo); + calo->GetMomentum(mom,fVertex);//Assume that come from vertex in straight line + fhPtInCone->Fill(ptcluster, mom.Pt()); + coneptsum+=mom.Pt(); + } } - + if(!fReMakeIC) fhConeSumPt->Fill(ptcluster,coneptsum); if(isolation){ @@ -845,8 +850,10 @@ void AliAnaParticleIsolation::InitParameters() { //Initialize the parameters of the analysis. - SetInputAODName("photons"); - + SetInputAODName("PWG4Particle"); + SetAODRefArrayName("IsolationCone"); + AddToHistogramsName("AnaIsolation_"); + fCalorimeter = "PHOS" ; fReMakeIC = kFALSE ; fMakeSeveralIC = kFALSE ; @@ -891,15 +898,16 @@ void AliAnaParticleIsolation::MakeSeveralICAnalysis(AliAODPWG4ParticleCorrelati for(Int_t icone = 0; iconeSetConeSize(fConeSizes[icone]); coneptsum = 0 ; + //Loop on ptthresholds for(Int_t ipt = 0; iptSetPtThreshold(fPtThresholds[ipt]); - GetIsolationCut()->MakeIsolationCut(ph->GetRefIsolationConeTracks(), - ph->GetRefIsolationConeClusters(), - fVertex, kFALSE, ph, - n[icone][ipt],nfrac[icone][ipt],coneptsum, isolated); + GetIsolationCut()->MakeIsolationCut(ph->GetRefArray(GetAODRefArrayName()+"Tracks"), + ph->GetRefArray(GetAODRefArrayName()+"Clusters"), + fVertex, kFALSE, ph, "",n[icone][ipt],nfrac[icone][ipt],coneptsum, isolated); + //Normal ptThreshold cut if(n[icone][ipt] == 0) { fhPtThresIsolated[icone][ipt]->Fill(ptC); @@ -956,9 +964,7 @@ void AliAnaParticleIsolation::Print(const Option_t * opt) const return; printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ; - - printf("Min Gamma pT = %2.2f\n", GetMinPt()) ; - printf("Max Gamma pT = %3.2f\n", GetMaxPt()) ; + AliAnaPartCorrBaseClass::Print(" "); printf("ReMake Isolation = %d \n", fReMakeIC) ; printf("Make Several Isolation = %d \n", fMakeSeveralIC) ; diff --git a/PWG4/PartCorrDep/AliAnaParticleIsolation.h b/PWG4/PartCorrDep/AliAnaParticleIsolation.h index 99eba20431b..90dca7ca6c2 100755 --- a/PWG4/PartCorrDep/AliAnaParticleIsolation.h +++ b/PWG4/PartCorrDep/AliAnaParticleIsolation.h @@ -32,7 +32,7 @@ public: AliAnaParticleIsolation & operator = (const AliAnaParticleIsolation & g) ;//cpy assignment virtual ~AliAnaParticleIsolation() ; //virtual dtor - Bool_t CheckInvMass(const Int_t icalo,const AliAODPWG4ParticleCorrelation * ph) const ; + Bool_t CheckInvMass(const Int_t icalo,const AliAODPWG4Particle * ph) const ; TList * GetCreateOutputObjects(); diff --git a/PWG4/PartCorrDep/AliAnaParticleJetFinderCorrelation.cxx b/PWG4/PartCorrDep/AliAnaParticleJetFinderCorrelation.cxx index 74ba6462af7..1711cc668bb 100755 --- a/PWG4/PartCorrDep/AliAnaParticleJetFinderCorrelation.cxx +++ b/PWG4/PartCorrDep/AliAnaParticleJetFinderCorrelation.cxx @@ -115,9 +115,7 @@ TList * AliAnaParticleJetFinderCorrelation::GetCreateOutputObjects() { // Create histograms to be saved in output file and // store them in fOutputContainer - - if(GetDebug()>1) printf("Init histograms \n"); - + TList * outputContainer = new TList() ; outputContainer->SetName("ParticleJetFinderHistos") ; @@ -177,6 +175,7 @@ TList * AliAnaParticleJetFinderCorrelation::GetCreateOutputObjects() outputContainer->Add(fhNTracksInCone) ; return outputContainer; + } //____________________________________________________________________________ @@ -184,7 +183,9 @@ void AliAnaParticleJetFinderCorrelation::InitParameters() { //Initialize the parameters of the analysis. - SetInputAODName("photons"); + SetInputAODName("PWG4Particle"); + AddToHistogramsName("AnaJetFinderCorr_"); + fDeltaPhiMinCut = 1.5 ; fDeltaPhiMaxCut = 4.5 ; fRatioMaxCut = 1.2 ; @@ -197,7 +198,7 @@ void AliAnaParticleJetFinderCorrelation::InitParameters() } //__________________________________________________________________ -Int_t AliAnaParticleJetFinderCorrelation::SelectJet(AliAODPWG4ParticleCorrelation * particle) const +Int_t AliAnaParticleJetFinderCorrelation::SelectJet(AliAODPWG4Particle * particle) const { //Returns the index of the jet that is opposite to the particle @@ -210,7 +211,7 @@ Int_t AliAnaParticleJetFinderCorrelation::SelectJet(AliAODPWG4ParticleCorrelati Float_t dphi = TMath::Abs(particle->Phi()-jet->Phi()); Float_t ratio = jet->Pt()/particle->Pt(); if(GetDebug() > 3) - printf("Jet %d, Ratio pT %2.3f, Delta phi %2.3f\n",ijet,ratio,dphi); + printf("AliAnaParticleJetFinderCorrelation::SelectJet() - Jet %d, Ratio pT %2.3f, Delta phi %2.3f\n",ijet,ratio,dphi); Float_t dphiprev= 10000; if((dphi > fDeltaPhiMinCut) && (dphi fRatioMinCut) && (ratio < fRatioMaxCut) && @@ -229,30 +230,31 @@ void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() { //Particle-Jet Correlation Analysis, fill AODs if(!GetInputAODBranch()){ - printf("ParticleJetCorrelation::FillAOD: No input particles in AOD with name branch < %s > \n",GetInputAODName().Data()); + printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s > \n",GetInputAODName().Data()); abort(); } + Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ; if(GetDebug() > 3){ - printf("Begin jet finder correlation analysis, fill AODs \n"); - printf("In particle branch aod entries %d\n", ntrig); - printf("In jet branch aod entries %d\n", (GetReader()->GetOutputEvent())->GetNJets()); + printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Begin jet finder correlation analysis, fill AODs \n"); + printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", ntrig); + printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - In jet branch aod entries %d\n", (GetReader()->GetOutputEvent())->GetNJets()); } //Loop on stored AOD particles, trigger for(Int_t iaod = 0; iaod < ntrig ; iaod++){ AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); - + //Correlate with jets Int_t ijet = SelectJet(particle); if(ijet > -1){ - if(GetDebug() > 2) printf ("Jet with index %d selected \n",ijet); - AliAODJet *jet = (GetReader()->GetOutputEvent())->GetJet(ijet); + if(GetDebug() > 2) printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - Jet with index %d selected \n",ijet); + AliAODJet *jet = (GetReader()->GetOutputEvent())->GetJet(ijet); particle->SetRefJet(jet); } - } + } // input aod loop - if(GetDebug() >1)printf("End of jet leading cone analysis, fill AODs \n"); + if(GetDebug() > 1 ) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillAOD() - End fill AODs \n"); } //__________________________________________________________________ @@ -261,32 +263,32 @@ void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() //Particle-Jet Correlation Analysis, fill histograms if(!GetInputAODBranch()){ - printf("ParticleJetCorrelation::FillHistos: No input particles in AOD with name branch < %s > \n",GetInputAODName().Data()); + printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - No input particles in AOD with name branch < %s > \n",GetInputAODName().Data()); abort(); } Int_t ntrig = GetInputAODBranch()->GetEntriesFast() ; if(GetDebug() > 1){ - printf("Begin jet finder correlation analysis, fill histograms \n"); - printf("In particle branch aod entries %d\n", ntrig); - printf("In jet branch aod entries %d\n", (GetReader()->GetOutputEvent())->GetNJets()); + printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - Begin jet finder correlation analysis, fill histograms \n"); + printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", ntrig); + printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - In jet branch aod entries %d\n", (GetReader()->GetOutputEvent())->GetNJets()); } //Loop on stored AOD particles, trigger for(Int_t iaod = 0; iaod < ntrig ; iaod++){ - AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); + AliAODPWG4ParticleCorrelation* particlecorr = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); - if(OnlyIsolated() && !particle->IsIsolated()) continue; + if(OnlyIsolated() && !particlecorr->IsIsolated()) continue; //Recover the jet correlated, found previously. - AliAODJet * jet = particle->GetJet(); + AliAODJet * jet = particlecorr->GetJet(); //If correlation not made before, do it now. if(fMakeCorrelationInHistoMaker){ //Correlate with jets - Int_t ijet = SelectJet(particle); + Int_t ijet = SelectJet(particlecorr); if(ijet > -1){ - if(GetDebug() > 2) printf ("Jet with index %d selected \n",ijet); + if(GetDebug() > 2) printf ("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - Jet with index %d selected \n",ijet); jet = (GetReader()->GetOutputEvent())->GetJet(ijet); - particle->SetRefJet(jet); + particlecorr->SetRefJet(jet); } } @@ -294,11 +296,11 @@ void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() //Fill Histograms - Double_t ptTrig = particle->Pt(); + Double_t ptTrig = particlecorr->Pt(); Double_t ptJet = jet->Pt(); - Double_t phiTrig = particle->Phi(); + Double_t phiTrig = particlecorr->Phi(); Double_t phiJet = jet->Phi(); - Double_t etaTrig = particle->Eta(); + Double_t etaTrig = particlecorr->Eta(); Double_t etaJet = jet->Eta(); //printf("pT trigger %2.3f, pT jet %2.3f, Delta phi %2.3f, Delta eta %2.3f, Delta pT %2.3f, ratio %2.3f \n", // ptTrig,ptJet, phiJet-phiTrig, etaJet-etaTrig, ptTrig-ptJet, ptJet/ptTrig); @@ -344,7 +346,7 @@ void AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() }//Tracks fhNTracksInCone->Fill(ptTrig, npartcone); }//AOD trigger particle loop - if(GetDebug() >1) printf("End of jet leading cone analysis, fill histograms \n"); + if(GetDebug() > 1) printf("AliAnaParticleJetFinderCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n"); } @@ -356,6 +358,9 @@ void AliAnaParticleJetFinderCorrelation::Print(const Option_t * opt) const if(! opt) return; + printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ; + AliAnaPartCorrBaseClass::Print(" "); + printf("Phi trigger-jet < %3.2f\n", fDeltaPhiMaxCut) ; printf("Phi trigger-jet > %3.2f\n", fDeltaPhiMinCut) ; printf("pT Ratio trigger/jet < %3.2f\n", fRatioMaxCut) ; diff --git a/PWG4/PartCorrDep/AliAnaParticleJetFinderCorrelation.h b/PWG4/PartCorrDep/AliAnaParticleJetFinderCorrelation.h index f8338b8b496..963d33db00e 100755 --- a/PWG4/PartCorrDep/AliAnaParticleJetFinderCorrelation.h +++ b/PWG4/PartCorrDep/AliAnaParticleJetFinderCorrelation.h @@ -18,7 +18,6 @@ class TH2F; //---- Analysis system ---- #include "AliAnaPartCorrBaseClass.h" -class AliAODPWG4ParticleCorrelation ; class AliAnaParticleJetFinderCorrelation : public AliAnaPartCorrBaseClass { @@ -38,13 +37,13 @@ class AliAnaParticleJetFinderCorrelation : public AliAnaPartCorrBaseClass { void Print(const Option_t * opt) const; - Float_t GetConeSize() const {return fConeSize ; } - Float_t GetPtThresholdInCone() const {return fPtThresholdInCone ; } - Double_t GetDeltaPhiMaxCut() const {return fDeltaPhiMaxCut ; } - Double_t GetDeltaPhiMinCut() const {return fDeltaPhiMinCut ; } - Double_t GetRatioMaxCut() const {return fRatioMaxCut ; } - Double_t GetRatioMinCut() const {return fRatioMinCut ; } - Bool_t AreJetRefTracks() const {return fUseJetRefTracks ; } + Float_t GetConeSize() const { return fConeSize ; } + Float_t GetPtThresholdInCone() const { return fPtThresholdInCone ; } + Double_t GetDeltaPhiMaxCut() const { return fDeltaPhiMaxCut ; } + Double_t GetDeltaPhiMinCut() const { return fDeltaPhiMinCut ; } + Double_t GetRatioMaxCut() const { return fRatioMaxCut ; } + Double_t GetRatioMinCut() const { return fRatioMinCut ; } + Bool_t AreJetRefTracks() const { return fUseJetRefTracks ; } Bool_t IsCorrelationMadeInHistoMaker() const {return fMakeCorrelationInHistoMaker ;} void SetConeSize(Float_t cone) {fConeSize = cone; } @@ -58,7 +57,7 @@ class AliAnaParticleJetFinderCorrelation : public AliAnaPartCorrBaseClass { private: - Int_t SelectJet(AliAODPWG4ParticleCorrelation * particle) const ; + Int_t SelectJet(AliAODPWG4Particle * particle) const ; void MakeAnalysisFillAOD() ; void MakeAnalysisFillHistograms() ; diff --git a/PWG4/PartCorrDep/AliAnaParticleJetLeadingConeCorrelation.cxx b/PWG4/PartCorrDep/AliAnaParticleJetLeadingConeCorrelation.cxx index 2bb502919da..14b6a45cd58 100755 --- a/PWG4/PartCorrDep/AliAnaParticleJetLeadingConeCorrelation.cxx +++ b/PWG4/PartCorrDep/AliAnaParticleJetLeadingConeCorrelation.cxx @@ -356,15 +356,15 @@ AliAnaParticleJetLeadingConeCorrelation::~AliAnaParticleJetLeadingConeCorrelatio Double_t AliAnaParticleJetLeadingConeCorrelation::CalculateJetRatioLimit(const Double_t ptg, const Double_t *par, const Double_t *x) const { //Calculate the ratio of the jet and trigger particle limit for the selection //WARNING: need to check what it does - //Info("CalculateLimit","x1 %f, x2%f",x[0],x[1]); + //printf("CalculateLimit: x1 %f, x2%f\n",x[0],x[1]); Double_t ePP = par[0] + par[1] * ptg ; Double_t sPP = par[2] + par[3] * ptg ; Double_t f = x[0] + x[1] * ptg ; Double_t ePbPb = ePP + par[4] ; Double_t sPbPb = TMath::Sqrt(sPP*sPP+ par[5]*par[5]) ; Double_t rat = (ePbPb - sPbPb * f) / ptg ; - //Info("CalculateLimit","ePP %f, sPP %f, f %f", ePP, sPP, f); - //Info("CalculateLimit","ePbPb %f, sPbPb %f, rat %f", ePbPb, sPbPb, rat); + //printf("CalculateLimit: ePP %f, sPP %f, f %f\n", ePP, sPP, f); + //printf("CalculateLimit: ePbPb %f, sPbPb %f, rat %f\n", ePbPb, sPbPb, rat); return rat ; } @@ -404,8 +404,8 @@ void AliAnaParticleJetLeadingConeCorrelation::FillJetHistos(AliAODPWG4ParticleCo //Construct fragmentation function TRefArray * pl = new TRefArray; - if(type == "Jet") pl = particle->GetRefTracks(); - else if(type == "Bkg") pl = particle->GetRefBackgroundTracks(); + if(type == "Jet") pl = particle->GetRefArray(GetAODRefArrayName()+"Tracks"); + else if(type == "Bkg") particle->GetRefArray(GetAODRefArrayName()+"TracksBkg"); //Different pt cut for jet particles in different collisions systems //Only needed when jet is recalculated from AODs @@ -779,13 +779,13 @@ TList * AliAnaParticleJetLeadingConeCorrelation::GetCreateOutputObjects() if(GetDebug()>2){ printf("AliAnaParticleJetLeadingConeCorrelation::GetCreateOutputObjects() - All histograms names : \n"); - for(Int_t i = 0 ; i< fOutCont->GetEntries(); i++) printf("Histo i %d name %s",i,((fOutCont->At(i))->GetName())); //cout<< (fOutCont->At(i))->GetName()< 3)printf("Jet selection? : Limits min %f, max %f, pt_jet %f, pt_gamma %f, pt_jet / pt_gamma %f",min,max,ptjet,ptTrig,rat); + if(GetDebug() > 3)printf("AliAnaParticleJetLeadingConeCorrelation::IsJetSelected() - Jet selection? : Limits min %f, max %f, pt_jet %f, pt_gamma %f, pt_jet / pt_gamma %f\n",min,max,ptjet,ptTrig,rat); if(( min < rat ) && ( max > ptjet/rat)) return kTRUE; @@ -1146,7 +1148,7 @@ Bool_t AliAnaParticleJetLeadingConeCorrelation::IsJetSelected(const Double_t ptT }// fSelect = 2 //############################################################### else{ - AliError("Jet selection option larger than 2, DON'T SELECT JETS"); + printf("AliAnaParticleJetLeadingConeCorrelation::IsJetSelected() - Jet selection option larger than 2, DON'T SELECT JETS\n"); return kFALSE ; } @@ -1190,9 +1192,9 @@ void AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() } if(GetDebug() > 1){ printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - Begin jet leading cone correlation analysis, fill AODs \n"); - printf("In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); - printf("In CTS aod entries %d\n", GetAODCTS()->GetEntriesFast()); - printf("In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntriesFast()); + printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); + printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - In CTS aod entries %d\n", GetAODCTS()->GetEntriesFast()); + printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() - In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntriesFast()); } TLorentzVector pLeading(0,0,0,0); //It will contain the kinematics of the found leading particle @@ -1200,15 +1202,15 @@ void AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillAOD() //Loop on stored AOD particles, trigger Int_t naod = GetInputAODBranch()->GetEntriesFast(); for(Int_t iaod = 0; iaod < naod ; iaod++){ - AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); - + AliAODPWG4ParticleCorrelation* particle = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(iaod)); + //Search leading particles in CTS and EMCAL if(GetLeadingParticle(particle, pLeading)){ //Construct the jet around the leading, Fill AOD jet particle list, select jet //and fill AOD with jet and background MakeAODJet(particle, pLeading); - + }//Leading found }//AOD trigger particle loop @@ -1229,9 +1231,9 @@ void AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() } if(GetDebug() > 1){ printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - Begin jet leading cone correlation analysis, fill histograms \n"); - printf("In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); - printf("In CTS aod entries %d\n", GetAODCTS()->GetEntriesFast()); - printf("In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntriesFast()); + printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); + printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - In CTS aod entries %d\n", GetAODCTS()->GetEntriesFast()); + printf("AliAnaParticleJetLeadingConeCorrelation::MakeAnalysisFillHistograms() - In EMCAL aod entries %d\n", GetAODEMCAL()->GetEntriesFast()); } TLorentzVector pLeading(0,0,0,0) ; @@ -1345,6 +1347,10 @@ const { //Fill jet with tracks TVector3 p3; + //Initialize reference arrays that will contain jet and background tracks + TRefArray * reftracks = new TRefArray; + TRefArray * reftracksbkg = new TRefArray; + for(Int_t ipr = 0;ipr < (GetAODCTS())->GetEntriesFast() ; ipr ++ ){ AliAODTrack* track = (AliAODTrack *)((GetAODCTS())->At(ipr)) ; p3.SetXYZ(track->Px(),track->Py(),track->Pz()); @@ -1353,11 +1359,12 @@ const { if(IsParticleInJetCone(p3.Eta(), p3.Phi(), etal, phil)){ if(first) { - new (particle->GetRefTracks()) TRefArray(TProcessID::GetProcessWithUID(track)); + new (reftracks) TRefArray(TProcessID::GetProcessWithUID(track)); first = kFALSE; } - particle->AddTrack(track); + reftracks->Add(track); + if(p3.Pt() > ptcut ){ lv.SetVect(p3); jet+=lv; @@ -1367,11 +1374,12 @@ const { else if(IsParticleInJetCone(p3.Eta(),p3.Phi(),etal, phiTrig)) { if(firstbkg) { - new (particle->GetRefBackgroundTracks()) TRefArray(TProcessID::GetProcessWithUID(track)); + new (reftracksbkg) TRefArray(TProcessID::GetProcessWithUID(track)); firstbkg = kFALSE; } - particle->AddBackgroundTrack(track); + reftracksbkg->Add(track); + if(p3.Pt() > ptcut ){ lv.SetVect(p3); bkg+=lv; @@ -1379,7 +1387,20 @@ const { } }//Track loop + //Add referenced tracks to AOD + if(reftracks->GetEntriesFast() > 0 ){ + reftracks->SetName(GetAODRefArrayName()+"Tracks"); + particle->AddRefArray(reftracks); + } + if(reftracksbkg->GetEntriesFast() > 0 ){ + reftracksbkg->SetName(GetAODRefArrayName()+"TracksBkg"); + particle->AddRefArray(reftracksbkg); + } + //Add neutral particles to jet + //Initialize reference arrays that will contain jet and background tracks + TRefArray * refclusters = new TRefArray; + TRefArray * refclustersbkg = new TRefArray; if(!fJetsOnlyInCTS && GetAODEMCAL()){ Double_t vertex[] = {0,0,0}; @@ -1387,6 +1408,7 @@ const { first = kTRUE; firstbkg = kTRUE; + for(Int_t iclus = 0;iclus < (GetAODEMCAL())->GetEntriesFast() ; iclus ++ ){ AliAODCaloCluster * calo = (AliAODCaloCluster *) (GetAODEMCAL()->At(iclus)) ; @@ -1396,29 +1418,41 @@ const { calo->GetMomentum(lv,vertex); //Particles in jet if(IsParticleInJetCone(lv.Eta(),lv.Phi(), etal, phil)){ - + if(first) { - new (particle->GetRefClusters()) TRefArray(TProcessID::GetProcessWithUID(calo)); + new (refclusters) TRefArray(TProcessID::GetProcessWithUID(calo)); first = kFALSE; } - - particle->AddCluster(calo); + + refclusters->Add(calo); + if(lv.Pt() > ptcut ) jet+=lv; } //Background around (phi_gamma-pi, eta_leading) else if(IsParticleInJetCone(lv.Eta(),lv.Phi(),etal, phiTrig)){ - + if(firstbkg) { - new (particle->GetRefBackgroundClusters()) TRefArray(TProcessID::GetProcessWithUID(calo)); + new (refclustersbkg) TRefArray(TProcessID::GetProcessWithUID(calo)); firstbkg = kFALSE; } - particle->AddBackgroundCluster(calo); + refclustersbkg->Add(calo); + if(lv.Pt() > ptcut ) bkg+=lv; } }//cluster loop }//jets with neutral particles + //Add referenced clusters to AOD + if(refclusters->GetEntriesFast() > 0 ){ + refclusters->SetName(GetAODRefArrayName()+"Clusters"); + particle->AddRefArray(refclusters); + } + if(refclustersbkg->GetEntriesFast() > 0 ){ + refclustersbkg->SetName(GetAODRefArrayName()+"ClustersBkg"); + particle->AddRefArray(refclustersbkg); + } + //If there is any jet found, select after some criteria and //and fill AOD with corresponding TLorentzVector kinematics if(IsJetSelected(particle->Pt(), jet.Pt())) { @@ -1443,53 +1477,65 @@ const { Double_t phil = pLeading.Phi(); Double_t etal = pLeading.Eta(); + TRefArray * refclusters = particle->GetRefArray(GetAODRefArrayName()+"Clusters"); + TRefArray * reftracks = particle->GetRefArray(GetAODRefArrayName()+"Tracks"); + TRefArray * refclustersbkg = particle->GetRefArray(GetAODRefArrayName()+"ClustersBkg"); + TRefArray * reftracksbkg = particle->GetRefArray(GetAODRefArrayName()+"TracksBkg"); + //Different pt cut for jet particles in different collisions systems Float_t ptcut = fJetPtThreshold; if(fPbPb && !fSeveralConeAndPtCuts && ptTrig > fPtTriggerSelectionCut) ptcut = fJetPtThresPbPb ; - + //Fill jet with tracks //Particles in jet TVector3 p3; - for(Int_t ipr = 0;ipr < (particle->GetRefTracks())->GetEntriesFast() ; ipr ++ ){ - AliAODTrack* track = (AliAODTrack *) ((particle-> GetRefTracks())->At(ipr)) ; - p3.SetXYZ(track->Px(),track->Py(),track->Pz()); - if(p3.Pt() > ptcut && IsParticleInJetCone(p3.Eta(), p3.Phi(), etal, phil) ){ - lv.SetVect(p3); - jet+=lv; - } - }//jet Track loop - + if(reftracks){ + for(Int_t ipr = 0;ipr < reftracks->GetEntriesFast() ; ipr ++ ){ + AliAODTrack* track = (AliAODTrack *) reftracks->At(ipr) ; + p3.SetXYZ(track->Px(),track->Py(),track->Pz()); + if(p3.Pt() > ptcut && IsParticleInJetCone(p3.Eta(), p3.Phi(), etal, phil) ){ + lv.SetVect(p3); + jet+=lv; + } + }//jet Track loop + } //Particles in background - for(Int_t ipr = 0;ipr < (particle-> GetRefBackgroundTracks())->GetEntriesFast() ; ipr ++ ){ - AliAODTrack* track = (AliAODTrack *) ((particle->GetRefBackgroundTracks())->At(ipr)) ; - p3.SetXYZ(track->Px(),track->Py(),track->Pz()); - if(p3.Pt() > ptcut && IsParticleInJetCone(p3.Eta(),p3.Phi(),etal, phiTrig) ) { - lv.SetVect(p3); - bkg+=lv; - } - }//background Track loop - + if(reftracksbkg){ + for(Int_t ipr = 0;ipr < reftracksbkg->GetEntriesFast() ; ipr ++ ){ + AliAODTrack* track = (AliAODTrack *) reftracksbkg->At(ipr) ; + p3.SetXYZ(track->Px(),track->Py(),track->Pz()); + if(p3.Pt() > ptcut && IsParticleInJetCone(p3.Eta(),p3.Phi(),etal, phiTrig) ) { + lv.SetVect(p3); + bkg+=lv; + } + }//background Track loop + } + //Add neutral particles to jet - if(!fJetsOnlyInCTS && (particle->GetRefClusters())){ + if(!fJetsOnlyInCTS && refclusters){ Double_t vertex[] = {0,0,0}; if(!GetReader()->GetDataType()== AliCaloTrackReader::kMC) GetReader()->GetVertex(vertex); //Loop on jet particles - for(Int_t iclus = 0;iclus < (particle->GetRefClusters())->GetEntriesFast() ; iclus ++ ){ - AliAODCaloCluster * calo = (AliAODCaloCluster *) ((particle->GetRefClusters())->At(iclus)) ; - calo->GetMomentum(lv,vertex); - if(lv.Pt() > ptcut && IsParticleInJetCone(lv.Eta(),lv.Phi(), etal, phil)) jet+=lv; - }//jet cluster loop - - //Loop on background particles - for(Int_t iclus = 0;iclus < (particle->GetRefClusters())->GetEntriesFast() ; iclus ++ ){ - AliAODCaloCluster * calo = (AliAODCaloCluster *) ((particle->GetRefClusters())->At(iclus)) ; - calo->GetMomentum(lv,vertex); - if( lv.Pt() > ptcut &&IsParticleInJetCone(lv.Eta(),lv.Phi(),etal, phiTrig)) bkg+=lv; - }//background cluster loop + if(refclusters){ + for(Int_t iclus = 0;iclus < refclusters->GetEntriesFast() ; iclus ++ ){ + AliAODCaloCluster * calo = (AliAODCaloCluster *) refclusters->At(iclus) ; + calo->GetMomentum(lv,vertex); + if(lv.Pt() > ptcut && IsParticleInJetCone(lv.Eta(),lv.Phi(), etal, phil)) jet+=lv; + }//jet cluster loop + } + + //Loop on background particles + if(refclustersbkg){ + for(Int_t iclus = 0;iclus < refclustersbkg->GetEntriesFast() ; iclus ++ ){ + AliAODCaloCluster * calo = (AliAODCaloCluster *) refclustersbkg->At(iclus) ; + calo->GetMomentum(lv,vertex); + if( lv.Pt() > ptcut && IsParticleInJetCone(lv.Eta(),lv.Phi(),etal, phiTrig)) bkg+=lv; + }//background cluster loop + } }//clusters in jet - + //If there is any jet found, leave jet and bkg as they are, //if not set them to 0. if(!IsJetSelected(particle->Pt(), jet.Pt())) { @@ -1497,7 +1543,7 @@ const { bkg.SetPxPyPzE(0.,0.,0.,0.); } else - if(GetDebug()>1) printf("AliAnaParticleJetLeadingConeCorrelation::MakeJetFromAOD()::Found jet: Trigger pt %f, Jet pt %f, Bkg pt %f\n",ptTrig,jet.Pt(),bkg.Pt()); + if(GetDebug()>1) printf("AliAnaParticleJetLeadingConeCorrelation::MakeJetFromAOD() - Found jet: Trigger pt %f, Jet pt %f, Bkg pt %f\n",ptTrig,jet.Pt(),bkg.Pt()); } @@ -1507,34 +1553,34 @@ Bool_t AliAnaParticleJetLeadingConeCorrelation::SelectCluster(AliAODCaloCluster //Skip matched clusters with tracks if(calo->GetNTracksMatched() > 0) return kFALSE; - - //Check PID - calo->GetMomentum(mom,vertex);//Assume that come from vertex in straight line - pdg = AliCaloPID::kPhoton; - if(IsCaloPIDOn()){ - //Get most probable PID, 2 options check PID weights (in MC this option is mandatory) - //or redo PID, recommended option for EMCal. - if(!IsCaloPIDRecalculationOn() || GetReader()->GetDataType() == AliCaloTrackReader::kMC ) - pdg = GetCaloPID()->GetPdg("EMCAL",calo->PID(),mom.E());//PID with weights - else - pdg = GetCaloPID()->GetPdg("EMCAL",mom,calo);//PID recalculated - - if(GetDebug() > 1) printf("AliAnaParticleJetLeadingConeCorrelation::SelectCluster() - PDG of identified particle %d\n",pdg); - //If it does not pass pid, skip - if(pdg != AliCaloPID::kPhoton || pdg != AliCaloPID::kPi0) - return kFALSE ; - }//CaloPID - + + //Check PID + calo->GetMomentum(mom,vertex);//Assume that come from vertex in straight line + pdg = AliCaloPID::kPhoton; + if(IsCaloPIDOn()){ + //Get most probable PID, 2 options check PID weights (in MC this option is mandatory) + //or redo PID, recommended option for EMCal. + if(!IsCaloPIDRecalculationOn() || GetReader()->GetDataType() == AliCaloTrackReader::kMC ) + pdg = GetCaloPID()->GetPdg("EMCAL",calo->PID(),mom.E());//PID with weights + else + pdg = GetCaloPID()->GetPdg("EMCAL",mom,calo);//PID recalculated + + if(GetDebug() > 1) printf("AliAnaParticleJetLeadingConeCorrelation::SelectCluster() - PDG of identified particle %d\n",pdg); + //If it does not pass pid, skip + if(pdg != AliCaloPID::kPhoton || pdg != AliCaloPID::kPi0) + return kFALSE ; + }//CaloPID + //Check acceptance selection - if(IsFidutialCutOn()){ - Bool_t in = GetFidutialCut()->IsInFidutialCut(mom,"EMCAL") ; - if(! in ) return kFALSE ; - } - - if(GetDebug() > 1) printf("AliAnaParticleJetLeadingConeCorrelation::SelectCluster() - Cluster selection cuts passed: pT %3.2f, pdg %d\n",mom.Pt(), pdg); - - return kTRUE; - + if(IsFidutialCutOn()){ + Bool_t in = GetFidutialCut()->IsInFidutialCut(mom,"EMCAL") ; + if(! in ) return kFALSE ; + } + + if(GetDebug() > 1) printf("AliAnaParticleJetLeadingConeCorrelation::SelectCluster() - Cluster selection cuts passed: pT %3.2f, pdg %d\n",mom.Pt(), pdg); + + return kTRUE; + } //__________________________________________________________________ @@ -1545,8 +1591,9 @@ void AliAnaParticleJetLeadingConeCorrelation::Print(const Option_t * opt) const if(! opt) return; - Info("Print", "%s %s", GetName(), GetTitle() ) ; - + printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ; + AliAnaPartCorrBaseClass::Print(" "); + if(fJetsOnlyInCTS)printf("Jets reconstructed in CTS \n"); else printf("Jets reconstructed in CTS+EMCAL \n"); diff --git a/PWG4/PartCorrDep/AliAnaParticleJetLeadingConeCorrelation.h b/PWG4/PartCorrDep/AliAnaParticleJetLeadingConeCorrelation.h index dd2dbdafa43..5a9a05ffd6d 100755 --- a/PWG4/PartCorrDep/AliAnaParticleJetLeadingConeCorrelation.h +++ b/PWG4/PartCorrDep/AliAnaParticleJetLeadingConeCorrelation.h @@ -24,7 +24,6 @@ class AliAODTrack; class AliAODCaloCluster; class AliCaloTrackReader; class AliNeutralMesonSelection; -class AliAODPWG4ParticleCorrelation ; #include "AliAnaPartCorrBaseClass.h" diff --git a/PWG4/PartCorrDep/AliAnaParticlePartonCorrelation.cxx b/PWG4/PartCorrDep/AliAnaParticlePartonCorrelation.cxx index a27d840f808..d6e1b15c14f 100755 --- a/PWG4/PartCorrDep/AliAnaParticlePartonCorrelation.cxx +++ b/PWG4/PartCorrDep/AliAnaParticlePartonCorrelation.cxx @@ -146,6 +146,7 @@ TList * AliAnaParticlePartonCorrelation::GetCreateOutputObjects() outputContainer->Add(fhPtRatAwayParton); return outputContainer; + } //____________________________________________________________________________ @@ -153,8 +154,10 @@ void AliAnaParticlePartonCorrelation::InitParameters() { //Initialize the parameters of the analysis. - SetInputAODName("photons"); - + SetInputAODName("PWG4Particle"); + SetAODRefArrayName("Partons"); + AddToHistogramsName("AnaPartonCorr_"); + } //__________________________________________________________________ @@ -165,6 +168,9 @@ void AliAnaParticlePartonCorrelation::Print(const Option_t * opt) const if(! opt) return; + printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ; + AliAnaPartCorrBaseClass::Print(" "); + } //__________________________________________________________________ @@ -175,12 +181,12 @@ void AliAnaParticlePartonCorrelation::MakeAnalysisFillAOD() //Partons are considered those in the first eight possitions in the stack //being 0, and 1 the 2 protons, and 6 and 7 the outgoing final partons. if(!GetInputAODBranch()){ - printf("ParticlePartonCorrelation::FillAOD: No input particles in AOD with name branch < %s > \n",GetInputAODName().Data()); + printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillAOD() - No input particles in AOD with name branch < %s > \n",GetInputAODName().Data()); abort(); } if(GetDebug() > 1){ - printf("Begin parton correlation analysis, fill AODs \n"); - printf("In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); + printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillAOD() - Begin fill AODs \n"); + printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillAOD() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); } //Loop on stored AOD particles @@ -190,49 +196,55 @@ void AliAnaParticlePartonCorrelation::MakeAnalysisFillAOD() AliStack * stack = GetMCStack() ; if(!stack){ - printf("No Stack available, STOP"); + printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillAOD() - No Stack available, STOP\n"); abort(); } if(stack->GetNtrack() < 8) { - printf("*** small number of particles, not a PYTHIA simulation? ***: n tracks %d \n", stack->GetNprimary()); + printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillAOD() *** small number of particles, not a PYTHIA simulation? ***: n tracks %d \n", stack->GetNprimary()); continue ; } //Fill AOD reference only with partons TParticle * parton = new TParticle ; Bool_t first = kTRUE; + + //Array with reference to partons, initialize + TRefArray * refarray = new TRefArray; + for(Int_t ipr = 0;ipr < 8; ipr ++ ){ parton = stack->Particle(ipr) ; - + if(first) { - new (particle->GetRefTracks()) TRefArray(TProcessID::GetProcessWithUID(parton)); + new (refarray) TRefArray(TProcessID::GetProcessWithUID(parton)); first = kFALSE; } + refarray->Add(parton); + }//parton loop + + refarray->SetName(GetAODRefArrayName()); + if(refarray->GetEntriesFast() > 0) particle->AddRefArray(refarray); - particle->AddTrack(parton); - } - }//Aod branch loop - if(GetDebug() > 1) printf("End parton correlation analysis, fill AODs \n"); + if(GetDebug() > 1) printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillAOD() - End fill AODs \n"); } - + //__________________________________________________________________ void AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() { //Particle-Parton Correlation Analysis, fill histograms if(!GetInputAODBranch()){ - printf("ParticlePartonCorrelation::FillHistos: No input particles in AOD with name branch < %s > \n",GetInputAODName().Data()); + printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() - No input particles in AOD with name branch < %s > \n",GetInputAODName().Data()); abort(); } if(GetDebug() > 1){ - printf("Begin parton correlation analysis, fill histograms \n"); - printf("In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); + printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() - Begin parton correlation analysis, fill histograms \n"); + printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() - In particle branch aod entries %d\n", GetInputAODBranch()->GetEntriesFast()); } AliStack * stack = GetMCStack() ; if(!stack) { - printf("ParticlePartonCorrelation::FillHistos - No Stack available, STOP"); + printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() - No Stack available, STOP\n"); abort(); } @@ -249,11 +261,13 @@ void AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() Int_t imom = particle->GetLabel(); Int_t iparent = 2000; Int_t iawayparent = -1; - - if(!(particle->GetRefTracks()) || (particle->GetRefTracks())->GetEntriesFast() < 7) { - printf("ParticlePartonCorrelation::FillHistos - Reference list with partons not filled, STOP analysis"); + + TRefArray * refarray = particle->GetRefArray(GetAODRefArrayName()); + if(!(refarray) || (refarray->GetEntriesFast() < 7) ) { + printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() - Reference list with partons not filled, STOP analysis\n"); abort(); } + //Check and get indeces of mother and parton if(imom < 8 ) iparent = imom ; //mother is already a parton else if (imom < stack->GetNtrack()) { @@ -268,16 +282,16 @@ void AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() } } - if(GetDebug() > 1) printf("N reference partons %d; labels: mother %d, parent %d \n", (particle->GetRefTracks())->GetEntriesFast(), imom, iparent); + if(GetDebug() > 1) printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() - N reference partons %d; labels: mother %d, parent %d \n", refarray->GetEntriesFast(), imom, iparent); if(iparent < 0 || iparent > 8) { - if(GetDebug() > 0 ) printf("Failed to find appropriate parton, index %d", iparent); + if(GetDebug() > 0 ) printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() - Failed to find appropriate parton, index %d", iparent); continue ; } //Near parton is the parton that fragmented and created the mother - TParticle * nearParton = (TParticle*) (particle->GetRefTracks())->At(iparent); + TParticle * nearParton = (TParticle*) refarray->At(iparent); Float_t ptNearParton = nearParton->Pt(); Float_t phiNearParton = nearParton->Phi() ; Float_t etaNearParton = nearParton->Eta() ; @@ -290,12 +304,12 @@ void AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() if(iparent == 7) iawayparent =6; else if(iparent == 6) iawayparent =7; else{ - printf("Parent parton is not final state, skip \n"); + printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() - Parent parton is not final state, skip \n"); continue; } //Away parton is the other final parton. - TParticle * awayParton = (TParticle*) (particle->GetRefTracks())->At(iawayparent); + TParticle * awayParton = (TParticle*) refarray->At(iawayparent); Float_t ptAwayParton = awayParton->Pt(); Float_t phiAwayParton = awayParton->Phi() ; Float_t etaAwayParton = awayParton->Eta() ; @@ -304,9 +318,8 @@ void AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() fhDeltaPtAwayParton->Fill(ptTrigg,ptTrigg-ptAwayParton); fhPtRatAwayParton->Fill(ptTrigg,ptAwayParton/ptTrigg); - } - if(GetDebug() > 1) printf("End parton correlation analysis, fill histograms \n"); + if(GetDebug() > 1) printf("AliAnaParticlePartonCorrelation::MakeAnalysisFillHistograms() - End fill histograms \n"); } diff --git a/PWG4/PartCorrDep/AliAnaPhoton.cxx b/PWG4/PartCorrDep/AliAnaPhoton.cxx index d4847e15a55..5badc93fcf5 100755 --- a/PWG4/PartCorrDep/AliAnaPhoton.cxx +++ b/PWG4/PartCorrDep/AliAnaPhoton.cxx @@ -1,4 +1,4 @@ -/************************************************************************** + /************************************************************************** * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * * * * Author: The ALICE Off-line Project. * @@ -43,8 +43,8 @@ ClassImp(AliAnaPhoton) //____________________________________________________________________________ AliAnaPhoton::AliAnaPhoton() : AliAnaPartCorrBaseClass(), fCalorimeter(""), - fMinDist(0.),fMinDist2(0.),fMinDist3(0.), - fhPtPhoton(0),fhPhiPhoton(0),fhEtaPhoton(0), + fMinDist(0.),fMinDist2(0.),fMinDist3(0.),fRejectTrackMatch(0), + fhPtPhoton(0),fhPhiPhoton(0),fhEtaPhoton(0), //MC fhPtPrompt(0),fhPhiPrompt(0),fhEtaPrompt(0), fhPtFragmentation(0),fhPhiFragmentation(0),fhEtaFragmentation(0), @@ -65,6 +65,7 @@ ClassImp(AliAnaPhoton) AliAnaPhoton::AliAnaPhoton(const AliAnaPhoton & g) : AliAnaPartCorrBaseClass(g), fCalorimeter(g.fCalorimeter), fMinDist(g.fMinDist),fMinDist2(g.fMinDist2), fMinDist3(g.fMinDist3), + fRejectTrackMatch(g.fRejectTrackMatch), fhPtPhoton(g.fhPtPhoton),fhPhiPhoton(g.fhPhiPhoton),fhEtaPhoton(g.fhEtaPhoton), //MC fhPtPrompt(g.fhPtPrompt),fhPhiPrompt(g.fhPhiPrompt),fhEtaPrompt(g.fhEtaPrompt), @@ -91,7 +92,8 @@ AliAnaPhoton & AliAnaPhoton::operator = (const AliAnaPhoton & g) fMinDist = g.fMinDist; fMinDist2 = g.fMinDist2; fMinDist3 = g.fMinDist3; - + fRejectTrackMatch = g.fRejectTrackMatch; + fhPtPhoton = g.fhPtPhoton ; fhPhiPhoton = g.fhPhiPhoton ; fhEtaPhoton = g.fhEtaPhoton ; @@ -168,53 +170,53 @@ TList * AliAnaPhoton::GetCreateOutputObjects() if(IsDataMC()){ - fhPtPrompt = new TH1F("hPtPrompt","Number of #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtPrompt = new TH1F("hPtMCPrompt","Number of #gamma over calorimeter",nptbins,ptmin,ptmax); fhPtPrompt->SetYTitle("N"); fhPtPrompt->SetXTitle("p_{T #gamma}(GeV/c)"); outputContainer->Add(fhPtPrompt) ; fhPhiPrompt = new TH2F - ("hPhiPrompt","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCPrompt","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiPrompt->SetYTitle("#phi"); fhPhiPrompt->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiPrompt) ; fhEtaPrompt = new TH2F - ("hEtaPrompt","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCPrompt","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaPrompt->SetYTitle("#eta"); fhEtaPrompt->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaPrompt) ; - fhPtFragmentation = new TH1F("hPtFragmentation","Number of #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtFragmentation = new TH1F("hPtMCFragmentation","Number of #gamma over calorimeter",nptbins,ptmin,ptmax); fhPtFragmentation->SetYTitle("N"); fhPtFragmentation->SetXTitle("p_{T #gamma}(GeV/c)"); outputContainer->Add(fhPtFragmentation) ; fhPhiFragmentation = new TH2F - ("hPhiFragmentation","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCFragmentation","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiFragmentation->SetYTitle("#phi"); fhPhiFragmentation->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiFragmentation) ; fhEtaFragmentation = new TH2F - ("hEtaFragmentation","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCFragmentation","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaFragmentation->SetYTitle("#eta"); fhEtaFragmentation->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaFragmentation) ; - fhPtISR = new TH1F("hPtISR","Number of initial state radiation #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtISR = new TH1F("hPtMCISR","Number of initial state radiation #gamma over calorimeter",nptbins,ptmin,ptmax); fhPtISR->SetYTitle("N"); fhPtISR->SetXTitle("p_{T #gamma}(GeV/c)"); outputContainer->Add(fhPtISR) ; fhPhiISR = new TH2F - ("hPhiISR","#phi_{#gamma} initial state radiation",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCISR","#phi_{#gamma} initial state radiation",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiISR->SetYTitle("#phi"); fhPhiISR->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiISR) ; fhEtaISR = new TH2F - ("hEtaISR","#phi_{#gamma} initial state radiation",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCISR","#phi_{#gamma} initial state radiation",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaISR->SetYTitle("#eta"); fhEtaISR->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaISR) ; @@ -225,68 +227,68 @@ TList * AliAnaPhoton::GetCreateOutputObjects() outputContainer->Add(fhPtPi0Decay) ; fhPhiPi0Decay = new TH2F - ("hPhiPi0Decay","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCPi0Decay","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiPi0Decay->SetYTitle("#phi"); fhPhiPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiPi0Decay) ; fhEtaPi0Decay = new TH2F - ("hEtaPi0Decay","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCPi0Decay","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaPi0Decay->SetYTitle("#eta"); fhEtaPi0Decay->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaPi0Decay) ; - fhPtOtherDecay = new TH1F("hPtOtherDecay","Number of #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtOtherDecay = new TH1F("hPtMCOtherDecay","Number of #gamma over calorimeter",nptbins,ptmin,ptmax); fhPtOtherDecay->SetYTitle("N"); fhPtOtherDecay->SetXTitle("p_{T #gamma}(GeV/c)"); outputContainer->Add(fhPtOtherDecay) ; fhPhiOtherDecay = new TH2F - ("hPhiOtherDecay","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCOtherDecay","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiOtherDecay->SetYTitle("#phi"); fhPhiOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiOtherDecay) ; fhEtaOtherDecay = new TH2F - ("hEtaOtherDecay","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCOtherDecay","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaOtherDecay->SetYTitle("#eta"); fhEtaOtherDecay->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaOtherDecay) ; - fhPtConversion = new TH1F("hPtConversion","Number of #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtConversion = new TH1F("hPtMCConversion","Number of #gamma over calorimeter",nptbins,ptmin,ptmax); fhPtConversion->SetYTitle("N"); fhPtConversion->SetXTitle("p_{T #gamma}(GeV/c)"); outputContainer->Add(fhPtConversion) ; fhPhiConversion = new TH2F - ("hPhiConversion","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCConversion","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiConversion->SetYTitle("#phi"); fhPhiConversion->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiConversion) ; fhEtaConversion = new TH2F - ("hEtaConversion","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCConversion","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaConversion->SetYTitle("#eta"); fhEtaConversion->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaConversion) ; - fhPtUnknown = new TH1F("hPtUnknown","Number of #gamma over calorimeter",nptbins,ptmin,ptmax); + fhPtUnknown = new TH1F("hPtMCUnknown","Number of #gamma over calorimeter",nptbins,ptmin,ptmax); fhPtUnknown->SetYTitle("N"); fhPtUnknown->SetXTitle("p_{T #gamma}(GeV/c)"); outputContainer->Add(fhPtUnknown) ; fhPhiUnknown = new TH2F - ("hPhiUnknown","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); + ("hPhiMCUnknown","#phi_{#gamma}",nptbins,ptmin,ptmax,nphibins,phimin,phimax); fhPhiUnknown->SetYTitle("#phi"); fhPhiUnknown->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhPhiUnknown) ; fhEtaUnknown = new TH2F - ("hEtaUnknown","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); + ("hEtaMCUnknown","#phi_{#gamma}",nptbins,ptmin,ptmax,netabins,etamin,etamax); fhEtaUnknown->SetYTitle("#eta"); fhEtaUnknown->SetXTitle("p_{T #gamma} (GeV/c)"); outputContainer->Add(fhEtaUnknown) ; - + }//Histos with MC //Save parameters used for analysis @@ -303,6 +305,8 @@ TList * AliAnaPhoton::GetCreateOutputObjects() parList+=onePar ; sprintf(onePar,"fMinDist3=%2.2f (One more cut on distance used for acceptance-efficiency study) \n",fMinDist3) ; parList+=onePar ; + sprintf(onePar,"fRejectTrackMatch: %d\n",fRejectTrackMatch) ; + parList+=onePar ; //Get parameters set in base class. parList += GetBaseParametersList() ; @@ -327,11 +331,11 @@ void AliAnaPhoton::Init() //Init //Do some checks if(fCalorimeter == "PHOS" && !GetReader()->IsPHOSSwitchedOn()){ - printf("!!ABORT: You want to use PHOS in analysis but it is not read!! \n!!Check the configuration file!!\n"); + printf("AliAnaPhoton::Init() - !!ABORT: You want to use PHOS in analysis but it is not read!! \n!!Check the configuration file!!\n"); abort(); } else if(fCalorimeter == "EMCAL" && !GetReader()->IsEMCALSwitchedOn()){ - printf("!!ABORT: You want to use EMCAL in analysis but it is not read!! \n!!Check the configuration file!!\n"); + printf("AliAnaPhoton::Init() - !!ABORT: You want to use EMCAL in analysis but it is not read!! \n!!Check the configuration file!!\n"); abort(); } @@ -344,12 +348,15 @@ void AliAnaPhoton::InitParameters() //Initialize the parameters of the analysis. SetOutputAODClassName("AliAODPWG4Particle"); - SetOutputAODName("photons"); + SetOutputAODName("PWG4Particle"); + + AddToHistogramsName("AnaPhoton_"); + fCalorimeter = "PHOS" ; fMinDist = 2.; fMinDist2 = 4.; fMinDist3 = 5.; - + fRejectTrackMatch = kTRUE ; } //__________________________________________________________________ @@ -392,7 +399,7 @@ void AliAnaPhoton::MakeAnalysisFillAOD() aodph.SetCaloLabel(calo->GetID(),-1); aodph.SetDetector(fCalorimeter); if(GetDebug() > 1) - printf("AliAnaPhoton::FillAOD: Min pt cut and fidutial cut passed: pt %3.2f, phi %2.2f, eta %1.2f\n",aodph.Pt(),aodph.Phi(),aodph.Eta()); + printf("AliAnaPhoton::MakeAnalysisFillAOD() - Min pt cut and fidutial cut passed: pt %3.2f, phi %2.2f, eta %1.2f\n",aodph.Pt(),aodph.Phi(),aodph.Eta()); //Check Distance to Bad channel, set bit. Double_t distBad=calo->GetDistToBadChannel() ; //Distance to bad channel @@ -400,7 +407,7 @@ void AliAnaPhoton::MakeAnalysisFillAOD() if(distBad < fMinDist) //In bad channel (PHOS cristal size 2.2x2.2 cm) continue ; - if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: Bad channel cut passed %4.2f\n",distBad); + if(GetDebug() > 1) printf("AliAnaPhoton::MakeAnalysisFillAOD() - Bad channel cut passed %4.2f\n",distBad); if(distBad > fMinDist3) aodph.SetDistToBad(2) ; else if(distBad > fMinDist2) aodph.SetDistToBad(1) ; @@ -411,13 +418,13 @@ void AliAnaPhoton::MakeAnalysisFillAOD() if(GetReader()->GetDataType() == AliCaloTrackReader::kMC){ //Get most probable PID, check PID weights (in MC this option is mandatory) aodph.SetPdg(GetCaloPID()->GetPdg(fCalorimeter,calo->PID(),mom.E()));//PID with weights - if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: PDG of identified particle %d\n",aodph.GetPdg()); + if(GetDebug() > 1) printf("AliAnaPhoton::MakeAnalysisFillAOD() - PDG of identified particle %d\n",aodph.GetPdg()); //If primary is not photon, skip it. if(aodph.GetPdg() != AliCaloPID::kPhoton) continue ; } else if(IsCaloPIDOn()){ //Skip matched clusters with tracks - if(calo->GetNTracksMatched() > 0) continue ; + if(fRejectTrackMatch && calo->GetNTracksMatched() > 0) continue ; //Get most probable PID, 2 options check PID weights //or redo PID, recommended option for EMCal. @@ -426,7 +433,7 @@ void AliAnaPhoton::MakeAnalysisFillAOD() else aodph.SetPdg(GetCaloPID()->GetPdg(fCalorimeter,mom,calo));//PID recalculated - if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: PDG of identified particle %d\n",aodph.GetPdg()); + if(GetDebug() > 1) printf("AliAnaPhoton::MakeAnalysisFillAOD() - PDG of identified particle %d\n",aodph.GetPdg()); //If cluster does not pass pid, not photon, skip it. if(aodph.GetPdg() != AliCaloPID::kPhoton) continue ; @@ -436,16 +443,16 @@ void AliAnaPhoton::MakeAnalysisFillAOD() //Set PID bits for later selection (AliAnaPi0 for example) //GetPDG already called in SetPIDBits. GetCaloPID()->SetPIDBits(fCalorimeter,calo,&aodph); - if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: PID Bits set \n"); + if(GetDebug() > 1) printf("AliAnaPhoton::MakeAnalysisFillAOD() - PID Bits set \n"); } - if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: Photon selection cuts passed: pT %3.2f, pdg %d\n",aodph.Pt(), aodph.GetPdg()); + if(GetDebug() > 1) printf("AliAnaPhoton::MakeAnalysisFillAOD() - Photon selection cuts passed: pT %3.2f, pdg %d\n",aodph.Pt(), aodph.GetPdg()); //Play with the MC stack if available //Check origin of the candidates if(IsDataMC()){ aodph.SetTag(GetMCAnalysisUtils()->CheckOrigin(calo->GetLabel(0),GetMCStack())); - if(GetDebug() > 0) printf("AliAnaPhoton::FillAOD: Origin of candidate %d\n",aodph.GetTag()); + if(GetDebug() > 0) printf("AliAnaPhoton::MakeAnalysisFillAOD() - Origin of candidate %d\n",aodph.GetTag()); }//Work with stack also //Add AOD with photon object to aod branch @@ -453,7 +460,7 @@ void AliAnaPhoton::MakeAnalysisFillAOD() }//loop - if(GetDebug() > 1) printf("AliAnaPhoton::FillAOD: End fill AODs \n"); + if(GetDebug() > 1) printf("AliAnaPhoton::MakeAnalysisFillAOD() End fill AODs \n"); } @@ -469,14 +476,14 @@ void AliAnaPhoton::MakeAnalysisFillHistograms() //Loop on stored AOD photons Int_t naod = GetOutputAODBranch()->GetEntriesFast(); - if(GetDebug() > 0) printf("AliAnaPhoton::FillHistos: aod branch entries %d\n", naod); + if(GetDebug() > 0) printf("AliAnaPhoton::MakeAnalysisFillHistograms() - aod branch entries %d\n", naod); for(Int_t iaod = 0; iaod < naod ; iaod++){ AliAODPWG4Particle* ph = (AliAODPWG4Particle*) (GetOutputAODBranch()->At(iaod)); Int_t pdg = ph->GetPdg(); if(GetDebug() > 3) - printf("AliAnaPhoton::FillHistos: PDG %d, MC TAG %d, Calorimeter %s\n", ph->GetPdg(),ph->GetTag(), (ph->GetDetector()).Data()) ; + printf("AliAnaPhoton::MakeAnalysisFillHistograms() - PDG %d, MC TAG %d, Calorimeter %s\n", ph->GetPdg(),ph->GetTag(), (ph->GetDetector()).Data()) ; //If PID used, fill histos with photons in Calorimeter fCalorimeter if(IsCaloPIDOn()) @@ -484,7 +491,7 @@ void AliAnaPhoton::MakeAnalysisFillHistograms() if(ph->GetDetector() != fCalorimeter) continue; if(GetDebug() > 1) - printf("AliAnaPhoton::FillHistos: ID Photon: pt %f, phi %f, eta %f\n", ph->Pt(),ph->Phi(),ph->Eta()) ; + printf("AliAnaPhoton::MakeAnalysisFillHistograms() - ID Photon: pt %f, phi %f, eta %f\n", ph->Pt(),ph->Phi(),ph->Eta()) ; //Fill photon histograms Float_t ptcluster = ph->Pt(); @@ -555,10 +562,13 @@ void AliAnaPhoton::Print(const Option_t * opt) const printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ; AliAnaPartCorrBaseClass::Print(" "); + printf("Calorimeter = %s\n", fCalorimeter.Data()) ; printf("Min Distance to Bad Channel = %2.1f\n",fMinDist); printf("Min Distance to Bad Channel 2 = %2.1f\n",fMinDist2); printf("Min Distance to Bad Channel 3 = %2.1f\n",fMinDist3); + printf("Reject clusters with a track matched = %d\n",fRejectTrackMatch); + printf(" \n") ; } diff --git a/PWG4/PartCorrDep/AliAnaPhoton.h b/PWG4/PartCorrDep/AliAnaPhoton.h index ebe3af71872..a0aa3c7b1d9 100755 --- a/PWG4/PartCorrDep/AliAnaPhoton.h +++ b/PWG4/PartCorrDep/AliAnaPhoton.h @@ -44,6 +44,10 @@ public: TString GetCalorimeter() const {return fCalorimeter ; } void SetCalorimeter(TString det) {fCalorimeter = det ; } + Bool_t IsTrackMatchRejectionOn() const {return fRejectTrackMatch ; } + void SwitchOnTrackMatchRejection() {fRejectTrackMatch = kTRUE ; } + void SwitchOffTrackMatchRejection() {fRejectTrackMatch = kFALSE ; } + void InitParameters(); void SetMinDistanceToBadChannel(Float_t m1, Float_t m2, Float_t m3) { @@ -58,6 +62,7 @@ public: Float_t fMinDist ; // Minimal distance to bad channel to accept cluster Float_t fMinDist2; // Cuts on Minimal distance to study acceptance evaluation Float_t fMinDist3; // One more cut on distance used for acceptance-efficiency study + Bool_t fRejectTrackMatch ; //If PID on, reject clusters which have an associated TPC track //Histograms TH1F * fhPtPhoton ; //! Number of identified photon vs transerse momentum @@ -93,7 +98,7 @@ public: TH2F * fhPhiUnknown; //! Phi of identified Unknown gamma TH2F * fhEtaUnknown; //! eta of identified Unknown gamma - ClassDef(AliAnaPhoton,2) + ClassDef(AliAnaPhoton,3) } ; diff --git a/PWG4/PartCorrDep/AliAnaPi0.cxx b/PWG4/PartCorrDep/AliAnaPi0.cxx index 5275d229b74..1526c9235d4 100755 --- a/PWG4/PartCorrDep/AliAnaPi0.cxx +++ b/PWG4/PartCorrDep/AliAnaPi0.cxx @@ -122,7 +122,10 @@ void AliAnaPi0::InitParameters() { //Init parameters when first called the analysis //Set default parameters - SetInputAODName("photons"); + SetInputAODName("PWG4Particle"); + + AddToHistogramsName("AnaPi0_"); + fNCentrBin = 1; fNZvertBin = 1; fNrpBin = 1; @@ -165,7 +168,7 @@ TList * AliAnaPi0::GetCreateOutputObjects() //If Geometry library loaded, do geometry selection during analysis. #ifdef __PHOSGEO__ - printf("PHOS geometry initialized!\n"); + printf("AliAnaPi0::GetCreateOutputObjects() - PHOS geometry initialized!\n"); fPHOSGeo = new AliPHOSGeoUtils("PHOSgeo") ; #endif @@ -266,7 +269,7 @@ TList * AliAnaPi0::GetCreateOutputObjects() fhPrimAccPhi = new TH1D("hPrimAccPhi","Azimithal of primary pi0 with accepted daughters",180,-0.,360.) ; outputContainer->Add(fhPrimAccPhi) ; } - + //Save parameters used for analysis TString parList ; //this will be list of parameters used for this analysis. char onePar[255] ; @@ -299,8 +302,9 @@ TList * AliAnaPi0::GetCreateOutputObjects() void AliAnaPi0::Print(const Option_t * /*opt*/) const { //Print some relevant parameters set for the analysis + printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ; AliAnaPartCorrBaseClass::Print(" "); - printf("Class AliAnaPi0 for gamma-gamma inv.mass construction \n") ; + printf("Number of bins in Centrality: %d \n",fNCentrBin) ; printf("Number of bins in Z vert. pos: %d \n",fNZvertBin) ; printf("Number of bins in Reac. Plain: %d \n",fNrpBin) ; @@ -339,7 +343,7 @@ void AliAnaPi0::MakeAnalysisFillHistograms() fhEvents->Fill(curCentrBin+0.5,curZvertBin+0.5,curRPBin+0.5) ; Int_t nPhot = GetInputAODBranch()->GetEntriesFast() ; - if(GetDebug() > 1) printf("AliAnaPi0::FillHistos: photon entries %d\n", nPhot); + if(GetDebug() > 1) printf("AliAnaPi0::MakeAnalysisFillHistograms() - Photon entries %d\n", nPhot); for(Int_t i1=0; i1At(i1)) ; @@ -351,7 +355,7 @@ void AliAnaPi0::MakeAnalysisFillHistograms() Double_t pt = (photon1 + photon2).Pt(); Double_t a = TMath::Abs(p1->E()-p2->E())/(p1->E()+p2->E()) ; if(GetDebug() > 2) - printf("AliAnaPi0::FillHistos: Current Event: pT: photon1 %2.2f, photon2 %2.2f; Pair: pT %2.2f, mass %2.3f, a %f2.3\n", + printf("AliAnaPi0::MakeAnalysisFillHistograms() - Current Event: pT: photon1 %2.2f, photon2 %2.2f; Pair: pT %2.2f, mass %2.3f, a %f2.3\n", p1->Pt(), p2->Pt(), pt,m,a); for(Int_t ipid=0; ipidAt(ii)); Int_t nPhot2=ev2->GetEntriesFast() ; Double_t m = -999; - if(GetDebug() > 1) printf("AliAnaPi0::FillHistos: Mixed event %d photon entries %d\n", ii, nPhot); + if(GetDebug() > 1) printf("AliAnaPi0::MakeAnalysisFillHistograms() - Mixed event %d photon entries %d\n", ii, nPhot); for(Int_t i1=0; i1At(i1)) ; @@ -389,7 +393,7 @@ void AliAnaPi0::MakeAnalysisFillHistograms() Double_t pt = (photon1 + photon2).Pt(); Double_t a = TMath::Abs(p1->E()-p2->E())/(p1->E()+p2->E()) ; if(GetDebug() > 2) - printf("AliAnaPi0::FillHistos: Mixed Event: pT: photon1 %2.2f, photon2 %2.2f; Pair: pT %2.2f, mass %2.3f, a %f2.3\n", + printf("AliAnaPi0::MakeAnalysisFillHistograms() - Mixed Event: pT: photon1 %2.2f, photon2 %2.2f; Pair: pT %2.2f, mass %2.3f, a %f2.3\n", p1->Pt(), p2->Pt(), pt,m,a); for(Int_t ipid=0; ipidIsPIDOK(ipid,AliCaloPID::kPhoton)) && (p2->IsPIDOK(ipid,AliCaloPID::kPhoton))){ @@ -486,11 +490,11 @@ void AliAnaPi0::Terminate() printf(" *** %s Terminate:\n", GetName()) ; if (!fhRe1) { - Error("Terminate", "Remote output histograms not imported in AliAnaPi0 object"); + printf("AliAnaPi0::Terminate() - Error: Remote output histograms not imported in AliAnaPi0 object"); return; } - printf(" Mgg Real : %5.3f , RMS : %5.3f \n", fhRe1[0]->GetMean(), fhRe1[0]->GetRMS() ) ; + printf("AliAnaPi0::Terminate() Mgg Real : %5.3f , RMS : %5.3f \n", fhRe1[0]->GetMean(), fhRe1[0]->GetRMS() ) ; TCanvas * cIM = new TCanvas("cIM", "", 400, 10, 600, 700) ; cIM->Divide(2, 2); @@ -572,7 +576,7 @@ void AliAnaPi0::Terminate() sprintf(line, ".!rm -fR *.eps"); gROOT->ProcessLine(line); - printf("!! All the eps files are in %s.tar.gz !!!\n", GetName()); + printf(" AliAnaPi0::Terminate() - !! All the eps files are in %s.tar.gz !!!\n", GetName()); } diff --git a/PWG4/PartCorrDep/AliAnaPi0EbE.cxx b/PWG4/PartCorrDep/AliAnaPi0EbE.cxx index 6cadfd9f661..d2afc7ed4d5 100755 --- a/PWG4/PartCorrDep/AliAnaPi0EbE.cxx +++ b/PWG4/PartCorrDep/AliAnaPi0EbE.cxx @@ -39,7 +39,6 @@ #include "AliNeutralMesonSelection.h" #include "AliCaloPID.h" #include "AliMCAnalysisUtils.h" -#include "AliAODPWG4ParticleCorrelation.h" #include "AliStack.h" #include "AliFidutialCut.h" #include "TParticle.h" @@ -269,7 +268,7 @@ void AliAnaPi0EbE::MakeInvMassInCalorimeter() Int_t tag = -1; if(!GetInputAODBranch()){ - printf("AliAnaPi0EbE::kIMCalo:: No input calo photons in AOD with name branch < %s >, STOP \n",GetInputAODName().Data()); + printf("AliAnaPi0EbE::MakeInvMassInCalorimeter() - No input calo photons in AOD with name branch < %s >, STOP \n",GetInputAODName().Data()); abort(); } for(Int_t iphoton = 0; iphoton < GetInputAODBranch()->GetEntriesFast(); iphoton++){ @@ -279,14 +278,14 @@ void AliAnaPi0EbE::MakeInvMassInCalorimeter() for(Int_t jphoton = iphoton+1; jphoton < GetInputAODBranch()->GetEntriesFast()-1; jphoton++){ - AliAODPWG4ParticleCorrelation * photon2 = (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(jphoton)); + AliAODPWG4Particle * photon2 = (AliAODPWG4Particle*) (GetInputAODBranch()->At(jphoton)); mom2 = *(photon2->Momentum()); //Select good pair (good phi, pt cuts, aperture and invariant mass) if(GetNeutralMesonSelection()->SelectPair(mom1, mom2)) { if(GetDebug()>1) - printf("AliAnaPi0EbE::kIMCalo::Selected gamma pair: pt %f, phi %f, eta%f \n",(mom1+mom2).Pt(), (mom1+mom2).Phi()*180./3.1416, (mom1+mom2).Eta()); + printf("AliAnaPi0EbE::MakeInvMassInCalorimeter() - Selected gamma pair: pt %f, phi %f, eta%f \n",(mom1+mom2).Pt(), (mom1+mom2).Phi()*180./3.1416, (mom1+mom2).Eta()); //Play with the MC stack if available if(IsDataMC()){ @@ -294,7 +293,7 @@ void AliAnaPi0EbE::MakeInvMassInCalorimeter() tag1 = GetMCAnalysisUtils()->CheckOrigin(photon1->GetLabel(), GetMCStack()); tag2 = GetMCAnalysisUtils()->CheckOrigin(photon2->GetLabel(), GetMCStack()); - if(GetDebug() > 0) printf("AliAnaPi0EbE::kIMCalo::Origin of: photon1 %d; photon2 %d \n",tag1, tag2); + if(GetDebug() > 0) printf("AliAnaPi0EbE::MakeInvMassInCalorimeter() - Origin of: photon1 %d; photon2 %d \n",tag1, tag2); if(tag1 == AliMCAnalysisUtils::kMCPi0Decay && tag2 == AliMCAnalysisUtils::kMCPi0Decay){ //Check if pi0 mother is the same @@ -329,7 +328,7 @@ void AliAnaPi0EbE::MakeInvMassInCalorimeter() }//1st photon loop - if(GetDebug() > 1) printf("AliAnaPi0EbE::kIMCalo::End fill AODs \n"); + if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeInvMassInCalorimeter() - End fill AODs \n"); } @@ -349,7 +348,7 @@ void AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() Int_t tag = -1; if(!GetInputAODBranch()){ - printf("AliAnaPi0EbE::kIMCaloCTS: No input calo photons in AOD branch with name < %s > , STOP\n",GetInputAODName().Data()); + printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - No input calo photons in AOD branch with name < %s > , STOP\n",GetInputAODName().Data()); abort(); } for(Int_t iphoton = 0; iphoton < GetInputAODBranch()->GetEntriesFast(); iphoton++){ @@ -359,21 +358,21 @@ void AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() //Play with the MC stack if available fInputAODGammaConv = (TClonesArray *) GetReader()->GetOutputEvent()->FindListObject(fInputAODGammaConvName); if(!fInputAODGammaConv) { - printf("AliAnaPi0EbE::kIMCaloCTS: No input gamma conversions in AOD branch with name < %s >, STOP",fInputAODGammaConvName.Data()); + printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - No input gamma conversions in AOD branch with name < %s >, STOP\n",fInputAODGammaConvName.Data()); abort(); } for(Int_t jphoton = iphoton+1; jphoton < fInputAODGammaConv->GetEntriesFast()-1; jphoton++){ - AliAODPWG4ParticleCorrelation * photon2 = (AliAODPWG4ParticleCorrelation*) (fInputAODGammaConv->At(jphoton)); + AliAODPWG4Particle * photon2 = (AliAODPWG4Particle*) (fInputAODGammaConv->At(jphoton)); mom2 = *(photon2->Momentum()); //Select good pair (good phi, pt cuts, aperture and invariant mass) if(GetNeutralMesonSelection()->SelectPair(mom1, mom2)){ - if(GetDebug() > 1) printf("AliAnaPi0EbE::kIMCaloCTS::Selected gamma pair: pt %f, phi %f, eta%f\n",(mom1+mom2).Pt(), (mom1+mom2).Phi()*180./3.1416, (mom1+mom2).Eta()); + if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - Selected gamma pair: pt %f, phi %f, eta%f\n",(mom1+mom2).Pt(), (mom1+mom2).Phi()*180./3.1416, (mom1+mom2).Eta()); if(IsDataMC()){ //Check origin of the candidates tag1 = GetMCAnalysisUtils()->CheckOrigin(photon1->GetLabel(), GetMCStack()); tag2 = GetMCAnalysisUtils()->CheckOrigin(photon2->GetLabel(), GetMCStack()); - if(GetDebug() > 0) printf("AliAnaPi0EbE::kIMCaloCTS::Origin of: photon1 %d; photon2 %d \n",tag1, tag2); + if(GetDebug() > 0) printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - Origin of: photon1 %d; photon2 %d \n",tag1, tag2); if(tag1 == AliMCAnalysisUtils::kMCPi0Decay && tag2 == AliMCAnalysisUtils::kMCPi0Decay){ //Check if pi0 mother is the same Int_t label1 = photon1->GetLabel(); @@ -394,7 +393,7 @@ void AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() //Create AOD for analysis mom = mom1+mom2; - AliAODPWG4ParticleCorrelation pi0 = AliAODPWG4ParticleCorrelation(mom); + AliAODPWG4Particle pi0 = AliAODPWG4Particle(mom); //pi0.SetLabel(calo->GetLabel(0)); pi0.SetPdg(AliCaloPID::kPi0); pi0.SetDetector(photon1->GetDetector()); @@ -408,7 +407,7 @@ void AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() }//1st photon loop - if(GetDebug() > 1) printf("AliAnaPi0EbE::kIMCaloCTS::End fill AODs \n"); + if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - End fill AODs \n"); } @@ -452,7 +451,7 @@ void AliAnaPi0EbE::MakeShowerShapeIdentification() aodpi0.SetCaloLabel(calo->GetID(),-1); aodpi0.SetDetector(fCalorimeter); if(GetDebug() > 1) - printf("AliAnaPi0EbE::kSSCalo::::FillAOD: Min pt cut and fidutial cut passed: pt %3.2f, phi %2.2f, eta %1.2f\n",aodpi0.Pt(),aodpi0.Phi(),aodpi0.Eta()); + printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - FillAOD: Min pt cut and fidutial cut passed: pt %3.2f, phi %2.2f, eta %1.2f\n",aodpi0.Pt(),aodpi0.Phi(),aodpi0.Eta()); //Check Distance to Bad channel, set bit. Double_t distBad=calo->GetDistToBadChannel() ; //Distance to bad channel @@ -460,7 +459,7 @@ void AliAnaPi0EbE::MakeShowerShapeIdentification() if(distBad < fMinDist) //In bad channel (PHOS cristal size 2.2x2.2 cm) continue ; - if(GetDebug() > 1) printf("AliAnaPi0EbE::kSSCalo::::FillAOD: Bad channel cut passed %4.2f\n",distBad); + if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - FillAOD: Bad channel cut passed %4.2f\n",distBad); if(distBad > fMinDist3) aodpi0.SetDistToBad(2) ; else if(distBad > fMinDist2) aodpi0.SetDistToBad(1) ; @@ -472,7 +471,7 @@ void AliAnaPi0EbE::MakeShowerShapeIdentification() //Get most probable PID, check PID weights (in MC this option is mandatory) aodpi0.SetPdg(GetCaloPID()->GetPdg(fCalorimeter,calo->PID(),mom.E()));//PID with weights if(GetDebug() > 1) - printf("AliAnaPi0EbE::kSSCalo::::FillAOD: PDG of identified particle %d\n",aodpi0.GetPdg()); + printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - FillAOD: PDG of identified particle %d\n",aodpi0.GetPdg()); //If primary is not pi0, skip it. if(aodpi0.GetPdg() != AliCaloPID::kPi0) continue ; } @@ -487,7 +486,7 @@ void AliAnaPi0EbE::MakeShowerShapeIdentification() else aodpi0.SetPdg(GetCaloPID()->GetPdg(fCalorimeter,mom,calo));//PID recalculated - if(GetDebug() > 1) printf("AliAnaPi0EbE::kSSCalo::::FillAOD: PDG of identified particle %d\n",aodpi0.GetPdg()); + if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - PDG of identified particle %d\n",aodpi0.GetPdg()); //If cluster does not pass pid, not pi0, skip it. if(aodpi0.GetPdg() != AliCaloPID::kPi0) continue ; @@ -497,10 +496,10 @@ void AliAnaPi0EbE::MakeShowerShapeIdentification() //Set PID bits for later selection (AliAnaPi0 for example) //GetPDG already called in SetPIDBits. GetCaloPID()->SetPIDBits(fCalorimeter,calo,&aodpi0); - if(GetDebug() > 1) printf("AliAnaPi0EbE::kSSCalo::::FillAOD: PID Bits set \n"); + if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - PID Bits set \n"); } - if(GetDebug() > 1) printf("AliAnaPi0EbE::kSSCalo::::FillAOD: Pi0 selection cuts passed: pT %3.2f, pdg %d\n",aodpi0.Pt(), aodpi0.GetPdg()); + if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - Pi0 selection cuts passed: pT %3.2f, pdg %d\n",aodpi0.Pt(), aodpi0.GetPdg()); //Play with the MC stack if available //Check origin of the candidates @@ -508,7 +507,7 @@ void AliAnaPi0EbE::MakeShowerShapeIdentification() if((GetReader()->GetDataType() == AliCaloTrackReader::kMC && fAnaType!=kSSCalo) || GetReader()->GetDataType() != AliCaloTrackReader::kMC){ aodpi0.SetTag(GetMCAnalysisUtils()->CheckOrigin(calo->GetLabel(0),GetMCStack())); - if(GetDebug() > 0) printf("AliAnaPi0EbE::kSSCalo::EbE::FillAOD: Origin of candidate %d\n",aodpi0.GetTag()); + if(GetDebug() > 0) printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - Origin of candidate %d\n",aodpi0.GetTag()); } }//Work with stack also @@ -517,7 +516,7 @@ void AliAnaPi0EbE::MakeShowerShapeIdentification() }//loop - if(GetDebug() > 1) printf("AliAnaPi0EbE::kSSCalo::::FillAOD: End fill AODs \n"); + if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - End fill AODs \n"); } //__________________________________________________________________ @@ -526,12 +525,12 @@ void AliAnaPi0EbE::MakeAnalysisFillHistograms() //Do analysis and fill histograms if(!GetOutputAODBranch()){ - printf("AliAnaPi0EbE::FillHistos - No output pi0 in AOD branch with name < %s >,STOP \n",GetOutputAODName().Data()); + printf("AliAnaPi0EbE::MakeAnalysisFillHistograms() - No output pi0 in AOD branch with name < %s >,STOP \n",GetOutputAODName().Data()); abort(); } //Loop on stored AOD pi0 Int_t naod = GetOutputAODBranch()->GetEntriesFast(); - if(GetDebug() > 0) printf("AliAnaPi0EbE::Histo::pi0 aod branch entries %d\n", naod); + if(GetDebug() > 0) printf("AliAnaPi0EbE::MakeAnalysisFillHistograms() - aod branch entries %d\n", naod); for(Int_t iaod = 0; iaod < naod ; iaod++){ @@ -577,11 +576,11 @@ void AliAnaPi0EbE::Init() //Init //Do some checks if(fCalorimeter == "PHOS" && !GetReader()->IsPHOSSwitchedOn()){ - printf("!!ABORT: You want to use PHOS in analysis but it is not read!! \n!!Check the configuration file!!\n"); + printf("AliAnaPi0EbE::Init() - !!ABORT: You want to use PHOS in analysis but it is not read!! \n!!Check the configuration file!!\n"); abort(); } else if(fCalorimeter == "EMCAL" && !GetReader()->IsEMCALSwitchedOn()){ - printf("!!ABORT: You want to use EMCAL in analysis but it is not read!! \n!!Check the configuration file!!\n"); + printf("AliAnaPi0EbE::Init() - !!ABORT: You want to use EMCAL in analysis but it is not read!! \n!!Check the configuration file!!\n"); abort(); } @@ -592,7 +591,10 @@ void AliAnaPi0EbE::InitParameters() { //Initialize the parameters of the analysis. SetOutputAODClassName("AliAODPWG4Particle"); - SetOutputAODName("pi0s"); + SetOutputAODName("Pi0"); + + AddToHistogramsName("AnaPi0EbE_"); + fInputAODGammaConvName = "gammaconv" ; fAnaType = kIMCalo ; fCalorimeter = "EMCAL" ; diff --git a/PWG4/PartCorrDep/AliAnaPi0EbE.h b/PWG4/PartCorrDep/AliAnaPi0EbE.h index d1b0da709b0..09b486f5586 100755 --- a/PWG4/PartCorrDep/AliAnaPi0EbE.h +++ b/PWG4/PartCorrDep/AliAnaPi0EbE.h @@ -22,7 +22,6 @@ class TList ; // --- ANALYSIS system --- #include "AliAnaPartCorrBaseClass.h" -class AliAODPWG4ParticleCorrelation ; class AliAnaPi0EbE : public AliAnaPartCorrBaseClass { diff --git a/PWG4/macros/AddTaskPartCorr.C b/PWG4/macros/AddTaskPartCorr.C index 00c61fdb7a4..fa8567fbb3f 100644 --- a/PWG4/macros/AddTaskPartCorr.C +++ b/PWG4/macros/AddTaskPartCorr.C @@ -1,4 +1,4 @@ -AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(Char_t * analysis, TString data, TString calorimeter) +AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(TString data, TString calorimeter) { // Creates a PartCorr task, configures it and adds it to the analysis manager. @@ -28,69 +28,17 @@ AliAnalysisTaskParticleCorrelation *AddTaskPartCorr(Char_t * analysis, TString d else if(data=="MC") reader = new AliCaloTrackMCReader(); reader->SetDebug(-1);//10 for lots of messages - AliAnaPartCorrMaker * maker = new AliAnaPartCorrMaker(); - switch (analysis) { - case "Pi0": - AnalysisPi0(maker,reader,calorimeter); - break; - case "GammaJetFinder": - //JETAN must run before - AnalysisGammaJetFinderCorrelation(maker,reader,calorimeter); - break; - case "GammaHadron": - AnalysisGammaHadronCorrelation(maker,reader,calorimeter); - break; - } - - - // Create task - //=========================================================================== - AliAnalysisTaskParticleCorrelation * task = new AliAnalysisTaskParticleCorrelation (analysis); - task->SetConfigFileName(""); //Don't configure the analysis via configuration file. - //task->SetDebugLevel(-1); - task->SetAnalysisMaker(maker); - mgr->AddTask(task); - - AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form("%s", analysis),TList::Class(), - AliAnalysisManager::kOutputContainer, Form("%s_%s.root",analysis,calorimeter.Data())); - - // Create ONLY the output containers for the data produced by the task. - // Get and connect other common input/output containers via the manager as below - //============================================================================== - mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer()); - // AOD output slot will be used in a different way in future - mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer()); - mgr->ConnectOutput (task, 1, cout_pc); - - return task; -} - -//_________________________________________________________________________________________________ -void AnalysisPi0(AliAnaPartCorrMaker * maker, AliCaloTrackReader * reader, TString calorimeter){ - //Configuration for pi0 invariant mass analysis - - // #### Reader #### - //Switch on or off the detectors - if(calorimeter=="EMCAL"){ - reader->SwitchOnEMCAL(); - reader->SwitchOffPHOS(); - } - else if(calorimeter=="PHOS"){ - reader->SwitchOffEMCAL(); - reader->SwitchOnPHOS(); - } - else if { - printf("ABORT analysis: Wrong calorimeter in configuration: %s\n",calorimeter.Data()); - abort(); - } - reader->SwitchOffCTS(); - //Min particle pT reader->SetEMCALPtMin(0.5); reader->SetPHOSPtMin(0.5); + reader->SetCTSPtMin(0.2); reader->Print(""); - // ##### Analysis algorithm #### + // ##### Analysis algorithm settings #### + + // -------------------- + // --- Pi0 Analysis --- + // -------------------- AliCaloPID * pid = new AliCaloPID(); pid->SetDispersionCut(1.5); @@ -98,83 +46,46 @@ void AnalysisPi0(AliAnaPartCorrMaker * maker, AliCaloTrackReader * reader, TStr pid->SetDebug(-1); pid->Print(""); - AliAnaPhoton *anaphoton = new AliAnaPhoton(); - anaphoton->SetDebug(-1); //10 for lots of messages + AliAnaPhoton *anaphoton1 = new AliAnaPhoton(); + anaphoton1->SetDebug(-1); //10 for lots of messages //anaphoton->SetMinPt(0.5); - anaphoton->SetMinDistanceToBadChannel(2, 4, 5); - anaphoton->SetCaloPID(pid); - anaphoton->SetCalorimeter(calorimeter); - anaphoton->SwitchOffDataMC() ;//Access MC stack and fill more histograms - anaphoton->SwitchOffCaloPID(); - anaphoton->SwitchOffCaloPIDRecalculation(); //recommended for EMCAL - anaphoton->SwitchOffFidutialCut(); - anaphoton->SetOutputAODName("Photons"+calorimeter); - anaphoton->SetOutputAODClassName("AliAODPWG4Particle"); - + anaphoton1->SetMinDistanceToBadChannel(2, 4, 5); + anaphoton1->SetCaloPID(pid); + anaphoton1->SetCalorimeter(calorimeter); + anaphoton1->SwitchOffDataMC() ;//Access MC stack and fill more histograms + anaphoton1->SwitchOffCaloPID(); + anaphoton1->SwitchOffCaloPIDRecalculation(); //recommended for EMCAL + anaphoton1->SwitchOffFidutialCut(); + anaphoton1->SetOutputAODName("PhotonsForPi0IM"+calorimeter); + anaphoton1->Print(""); + AliAnaPi0 *anapi0 = new AliAnaPi0(); anapi0->SetDebug(-1);//10 for lots of messages - anapi0->SetInputAODName("Photons"+calorimeter); + anapi0->SetInputAODName("PhotonsForPi0IM"+calorimeter); anapi0->SetCaloPID(pid); anapi0->SetCalorimeter(calorimeter); anapi0->SwitchOnFidutialCut(); anapi0->SwitchOffDataMC() ;//Access MC stack and fill more histograms anapi0->Print(""); - // #### Configure Maker #### - maker->SetReader(reader);//pointer to reader - maker->AddAnalysis(anaphoton,0); - maker->AddAnalysis(anapi0,1); - maker->SetAnaDebug(-1) ; - maker->SwitchOnHistogramsMaker() ; - maker->SwitchOnAODsMaker() ; - maker->Print(""); - // - printf("======================== \n"); - printf("End Configuration of AnalysisPi0() \n"); - printf("======================== \n"); - - -} -//_________________________________________________________________________________________________ -void AnalysisGammaJetFinderCorrelation(AliAnaPartCorrMaker * maker, AliCaloTrackReader * reader, TString calorimeter){ - //Configuration for pi0 invariant mass analysis - - // #### Reader #### - //Switch on or off the detectors - if(calorimeter=="PHOS") - reader->SwitchOnPHOS(); - else if(calorimeter=="EMCAL") - reader->SwitchOffPHOS(); - else if { - printf("ABORT analysis: Wrong calorimeter in configuration: %s\n",calorimeter.Data()); - abort(); - } - reader->SwitchOnEMCAL(); - reader->SwitchOnCTS(); - - //Min particle pT - reader->SetEMCALPtMin(0.5); - reader->SetPHOSPtMin(0.5); - reader->SetCTSPtMin(0.1); - reader->Print(""); - - // ##### Analysis algorithm #### - // ### Photon analysis ### - //AliCaloPID * pid = new AliCaloPID(); - //pid->Print(""); - - AliAnaPhoton *anaphoton = new AliAnaPhoton(); - anaphoton->SetDebug(-1); //10 for lots of messages - anaphoton->SetMinPt(5); - //anaphoton->SetCaloPID(pid); - anaphoton->SetCalorimeter(calorimeter); - anaphoton->SwitchOffDataMC() ;//Access MC stack and fill more histograms - anaphoton->SwitchOnCaloPID(); - if(calorimeter == "EMCAL") anaphoton->SwitchOnCaloPIDRecalculation(); - anaphoton->SwitchOffFidutialCut(); - anaphoton->SetOutputAODName("DirectPhotonsJet"+calorimeter); - anaphoton->SetOutputAODClassName("AliAODPWG4ParticleCorrelation"); + // ------------------------------------------------- + // --- Photon Isolation and Correlation Analysis --- + // ------------------------------------------------- + + AliAnaPhoton *anaphoton2 = new AliAnaPhoton(); + anaphoton2->SetDebug(-1); //10 for lots of messages + anaphoton2->SetMinPt(5); + anaphoton2->SetCaloPID(pid); + anaphoton2->SetCalorimeter(calorimeter); + anaphoton2->SwitchOffDataMC() ;//Access MC stack and fill more histograms + anaphoton2->SwitchOnCaloPID(); + if(calorimeter == "EMCAL") anaphoton2->SwitchOnCaloPIDRecalculation(); + anaphoton2->SwitchOffFidutialCut(); + anaphoton2->SetOutputAODName("DirectPhotons"+calorimeter); + anaphoton2->SetOutputAODClassName("AliAODPWG4ParticleCorrelation"); + anaphoton2->AddToHistogramsName("AnaPhotonCorr_"); + anaphoton2->Print(""); // ### Isolation analysis ### AliIsolationCut * ic = new AliIsolationCut(); @@ -186,7 +97,7 @@ void AnalysisGammaJetFinderCorrelation(AliAnaPartCorrMaker * maker, AliCaloTrack AliAnaParticleIsolation *anaisol = new AliAnaParticleIsolation(); anaisol->SetDebug(-1); //anaisol->SetMinPt(5); - anaisol->SetInputAODName("DirectPhotonsJet"+calorimeter); + anaisol->SetInputAODName("DirectPhotons"+calorimeter); anaisol->SetCalorimeter(calorimeter); anaisol->SwitchOffDataMC() ;//Access MC stack and fill more histograms //Select clusters with no pair, if both clusters with pi0 mass @@ -201,129 +112,72 @@ void AnalysisGammaJetFinderCorrelation(AliAnaPartCorrMaker * maker, AliCaloTrack anaisol->SwitchOffSeveralIsolation() ; anaisol->Print(""); - // ### Correlatio with Jet Finder AOD output - AliAnaParticleJetFinderCorrelation *anacorr = new AliAnaParticleJetFinderCorrelation(); - anacorr->SetInputAODName("DirectPhotonsJet"+calorimeter); - anacorr->SwitchOffFidutialCut(); - anacorr->SetDebug(-1); - anacorr->SetConeSize(1); - anacorr->SelectIsolated(kTRUE); // do correlation with isolated photons - anacorr->SetPtThresholdInCone(0.2); - anacorr->SetDeltaPhiCutRange(0.5,5.5);//Mostly Open Cuts - anacorr->SetRatioCutRange(0.01,3); //Mostly Open Cuts - anacorr->UseJetRefTracks(kFALSE); //Not working now - anacorr->Print(""); - - // #### Configure Maker #### - maker->SetReader(reader);//pointer to reader - maker->AddAnalysis(anaphoton,0); - maker->AddAnalysis(anaisol,1); - maker->AddAnalysis(anacorr,2); - maker->SetAnaDebug(-1) ; - maker->SwitchOnHistogramsMaker() ; - maker->SwitchOnAODsMaker() ; - maker->Print(""); - // - printf("======================== \n"); - printf("End Configuration of AnalysisGammaJetFinderCorrelation() \n"); - printf("======================== \n"); - - -} - - -//_________________________________________________________________________________________________ -void AnalysisGammaHadronCorrelation(AliAnaPartCorrMaker * maker, AliCaloTrackReader * reader, TString calorimeter){ - //Configuration for pi0 invariant mass analysis - - // #### Reader #### - //Switch on or off the detectors - if(calorimeter=="PHOS") - reader->SwitchOnPHOS(); - else if(calorimeter=="EMCAL") - reader->SwitchOffPHOS(); - else if { - printf("ABORT analysis: Wrong calorimeter in configuration: %s\n",calorimeter.Data()); - abort(); - } - reader->SwitchOnEMCAL(); - reader->SwitchOnCTS(); - - //Min particle pT - reader->SetEMCALPtMin(0.5); - reader->SetPHOSPtMin(0.5); - reader->SetCTSPtMin(0.1); - reader->Print(""); - - // ##### Analysis algorithm #### - // ### Photon analysis ### - //AliCaloPID * pid = new AliCaloPID(); - //pid->Print(""); - - AliAnaPhoton *anaphoton = new AliAnaPhoton(); - anaphoton->SetDebug(-1); //10 for lots of messages - anaphoton->SetMinPt(5); - //anaphoton->SetCaloPID(pid); - anaphoton->SetCalorimeter(calorimeter); - anaphoton->SwitchOffDataMC() ;//Access MC stack and fill more histograms - anaphoton->SwitchOnCaloPID(); - if(calorimeter == "EMCAL") anaphoton->SwitchOnCaloPIDRecalculation(); - anaphoton->SwitchOffFidutialCut(); - anaphoton->SetOutputAODName("DirectPhotonsHadron"+calorimeter); - anaphoton->SetOutputAODClassName("AliAODPWG4ParticleCorrelation"); - - // ### Isolation analysis ### - - AliIsolationCut * ic = new AliIsolationCut(); - ic->SetConeSize(0.5); - ic->SetPtThreshold(1.); - ic->SetICMethod(AliIsolationCut::kPtThresIC); - ic->Print(""); - - AliAnaParticleIsolation *anaisol = new AliAnaParticleIsolation(); - anaisol->SetDebug(-1); - //anaisol->SetMinPt(5); - anaisol->SetInputAODName("DirectPhotonsHadron"+calorimeter); - anaisol->SetCalorimeter(calorimeter); - anaisol->SwitchOffDataMC() ;//Access MC stack and fill more histograms - //Select clusters with no pair, if both clusters with pi0 mass - anaisol->SwitchOffInvariantMass(); - //anaisol->SetNeutralMesonSelection(nms); - //Do isolation cut - anaisol->SetIsolationCut(ic); - //Do or not do isolation with previously produced AODs. - //No effect if use of SwitchOnSeveralIsolation() - anaisol->SwitchOffReIsolation(); - //Multiple IC - anaisol->SwitchOffSeveralIsolation() ; - anaisol->Print(""); + // ### Correlation with Jet Finder AOD output + AliAnaParticleJetFinderCorrelation *anacorrjet = new AliAnaParticleJetFinderCorrelation(); + anacorrjet->SetInputAODName("DirectPhotons"+calorimeter); + anacorrjet->SwitchOffFidutialCut(); + anacorrjet->SetDebug(-1); + anacorrjet->SetConeSize(1); + anacorrjet->SelectIsolated(kTRUE); // do correlation with isolated photons + anacorrjet->SetPtThresholdInCone(0.2); + anacorrjet->SetDeltaPhiCutRange(0.5,5.5);//Mostly Open Cuts + anacorrjet->SetRatioCutRange(0.01,3); //Mostly Open Cuts + anacorrjet->UseJetRefTracks(kFALSE); //Not working now + anacorrjet->Print(""); // ### Correlation with hadrons - AliAnaParticleHadronCorrelation *anacorr = new AliAnaParticleHadronCorrelation(); - anacorr->SetInputAODName("DirectPhotonsHadron"+calorimeter); - anacorr->SetDebug(-1); - anacorr->SwitchOffFidutialCut(); - anacorr->SetPtCutRange(1,100); - anacorr->SetDeltaPhiCutRange(1.5,4.5); - if(calorimeter=="PHOS"){ + AliAnaParticleHadronCorrelation *anacorrhadron = new AliAnaParticleHadronCorrelation(); + anacorrhadron->SetInputAODName("DirectPhotons"+calorimeter); + anacorrhadron->SetDebug(-1); + anacorrhadron->SwitchOffFidutialCut(); + anacorrhadron->SetPtCutRange(1,100); + anacorrhadron->SetDeltaPhiCutRange(1.5,4.5); + anacorrhadron->SelectIsolated(kTRUE); // do correlation with isolated photons + if(calorimeter=="PHOS"){ //Correlate with particles in EMCAL - anacorr->SwitchOnCaloPID(); - anacorr->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL + anacorrhadron->SwitchOnCaloPID(); + anacorrhadron->SwitchOnCaloPIDRecalculation(); //recommended for EMCAL } - anacorr->Print(""); + anacorrhadron->Print(""); // #### Configure Maker #### + AliAnaPartCorrMaker * maker = new AliAnaPartCorrMaker(); maker->SetReader(reader);//pointer to reader - maker->AddAnalysis(anaphoton,0); - maker->AddAnalysis(anaisol,1); - maker->AddAnalysis(anacorr,2); + maker->AddAnalysis(anaphoton1,0); + maker->AddAnalysis(anapi0,1); + maker->AddAnalysis(anaphoton2,2); + maker->AddAnalysis(anaisol,3); + maker->AddAnalysis(anacorrjet,4); + maker->AddAnalysis(anacorrhadron,5); maker->SetAnaDebug(-1) ; maker->SwitchOnHistogramsMaker() ; maker->SwitchOnAODsMaker() ; maker->Print(""); - // + printf("======================== \n"); - printf("End Configuration of AnalysisGammaJetFinderCorrelation() \n"); + printf(" End Configuration of PartCorr analysis with detector %s \n",calorimeter.Data()); printf("======================== \n"); + // Create task + //=========================================================================== + AliAnalysisTaskParticleCorrelation * task = new AliAnalysisTaskParticleCorrelation ("PartCorr"); + task->SetConfigFileName(""); //Don't configure the analysis via configuration file. + //task->SetDebugLevel(-1); + task->SetAnalysisMaker(maker); + mgr->AddTask(task); + + AliAnalysisDataContainer *cout_pc = mgr->CreateContainer(Form("PartCorr"),TList::Class(), + AliAnalysisManager::kOutputContainer, Form("PartCorr_%s.root",calorimeter.Data())); + + // Create ONLY the output containers for the data produced by the task. + // Get and connect other common input/output containers via the manager as below + //============================================================================== + mgr->ConnectInput (task, 0, mgr->GetCommonInputContainer()); + // AOD output slot will be used in a different way in future + mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer()); + mgr->ConnectOutput (task, 1, cout_pc); + + return task; } + + diff --git a/PWG4/macros/ConfigAnalysisPhoton.C b/PWG4/macros/ConfigAnalysisPhoton.C index ddc9a92ab33..1d7433c375e 100644 --- a/PWG4/macros/ConfigAnalysisPhoton.C +++ b/PWG4/macros/ConfigAnalysisPhoton.C @@ -94,6 +94,7 @@ AliAnaPartCorrMaker* ConfigAnalysis() ana->SwitchOnDataMC() ;//Access MC stack and fill more histograms ana->SwitchOffCaloPID(); ana->SwitchOffCaloPIDRecalculation(); //recommended for EMCAL + ana->SwitchOnTrackMatchRejection(); //Only in use when OnCaloPID ana->SwitchOffFidutialCut(); ana->SetOutputAODName("Photons"); ana->SetOutputAODClassName("AliAODPWG4Particle"); -- 2.43.5