1) Reference arrays with tracks and clusters before defined in the AliAODPWG4Particl...
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 30 Apr 2009 12:00:14 +0000 (12:00 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 30 Apr 2009 12:00:14 +0000 (12:00 +0000)
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.

33 files changed:
PWG4/PartCorrBase/AliAODPWG4Particle.cxx
PWG4/PartCorrBase/AliAODPWG4Particle.h
PWG4/PartCorrBase/AliAODPWG4ParticleCorrelation.cxx
PWG4/PartCorrBase/AliAODPWG4ParticleCorrelation.h
PWG4/PartCorrBase/AliAnaPartCorrBaseClass.cxx
PWG4/PartCorrBase/AliAnaPartCorrBaseClass.h
PWG4/PartCorrBase/AliAnaPartCorrMaker.cxx
PWG4/PartCorrBase/AliCaloTrackAODReader.cxx
PWG4/PartCorrBase/AliCaloTrackESDReader.cxx
PWG4/PartCorrBase/AliCaloTrackMCReader.cxx
PWG4/PartCorrBase/AliFidutialCut.cxx
PWG4/PartCorrBase/AliIsolationCut.cxx
PWG4/PartCorrBase/AliIsolationCut.h
PWG4/PartCorrBase/AliMCAnalysisUtils.cxx
PWG4/PartCorrBase/AliNeutralMesonSelection.cxx
PWG4/PartCorrDep/AliAnaChargedParticles.cxx
PWG4/PartCorrDep/AliAnaExample.cxx
PWG4/PartCorrDep/AliAnaParticleHadronCorrelation.cxx
PWG4/PartCorrDep/AliAnaParticleHadronCorrelation.h
PWG4/PartCorrDep/AliAnaParticleIsolation.cxx
PWG4/PartCorrDep/AliAnaParticleIsolation.h
PWG4/PartCorrDep/AliAnaParticleJetFinderCorrelation.cxx
PWG4/PartCorrDep/AliAnaParticleJetFinderCorrelation.h
PWG4/PartCorrDep/AliAnaParticleJetLeadingConeCorrelation.cxx
PWG4/PartCorrDep/AliAnaParticleJetLeadingConeCorrelation.h
PWG4/PartCorrDep/AliAnaParticlePartonCorrelation.cxx
PWG4/PartCorrDep/AliAnaPhoton.cxx
PWG4/PartCorrDep/AliAnaPhoton.h
PWG4/PartCorrDep/AliAnaPi0.cxx
PWG4/PartCorrDep/AliAnaPi0EbE.cxx
PWG4/PartCorrDep/AliAnaPi0EbE.h
PWG4/macros/AddTaskPartCorr.C
PWG4/macros/ConfigAnalysisPhoton.C

index 92ed8cd..ebb6b02 100755 (executable)
@@ -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());
   
 }
index e787de4..0054c0d 100755 (executable)
@@ -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);
 };
index 421266a..01e9837 100755 (executable)
@@ -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("");
 }
index 6a6c28b..91218c2 100755 (executable)
@@ -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);
 };
 
 
index 42de887..02fbaae 100755 (executable)
@@ -25,7 +25,6 @@
 //#include <Riostream.h>
 
 //---- 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") ;
   
 } 
index 8353cf1..15603b8 100755 (executable)
 //ROOT
 class TClonesArray ;
 class TRefArray ;
-#include <TList.h>
+#include <TList.h> 
 #include <TObject.h>
 
 //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
index 3ddfb0f..d0f5fab 100755 (executable)
@@ -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;
+
 }
 
 //________________________________________________________________________
index f85de42..3602519 100755 (executable)
@@ -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();
   }
   
index 0a2bd83..3c65935 100755 (executable)
@@ -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();
   }
   
index e24e011..e8551eb 100755 (executable)
@@ -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) ;
index 0079eee..d99b943 100755 (executable)
@@ -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);
 
index aefbcf6..97b4da9 100755 (executable)
@@ -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 ;
index de4c443..340357b 100755 (executable)
@@ -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;
index c5ee124..82e460a 100755 (executable)
@@ -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())
index 973c786..c3be0ce 100755 (executable)
@@ -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 );
index 684b3aa..15b895c 100755 (executable)
@@ -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));
     
index 32c62d3..8df6c56 100755 (executable)
@@ -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());
 
 }
index 249cb41..3f2b5ec 100755 (executable)
@@ -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)<fDeltaPhiMaxCut) ){
-       if(GetDebug() > 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)<fDeltaPhiMaxCut) ){
-       if(GetDebug() > 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;
    
index 6add712..e71b82d 100755 (executable)
@@ -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()  ;
   
index 0572f9b..bc540cf 100755 (executable)
@@ -1,4 +1,4 @@
-/**************************************************************************\r
+/**************************************************************************
  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
  *                                                                        *
  * Author: The ALICE Off-line Project.                                    *
@@ -30,6 +30,7 @@
 #include <TList.h>
 #include <TObjString.h>
 #include <TH2F.h>
+//#include <Riostream.h>
 
 // --- 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; icone<fNCones; icone++){
-                 sprintf(name,"hPtSumIsolated_Cone_%d",icone);
+                 sprintf(name,"hPtSum_Cone_%d",icone);
                  sprintf(title,"Candidate cone sum p_{T} for cone size %d vs candidate p_{T}",icone);
                  fhPtSumIsolated[icone]  = new TH2F(name, title,nptbins,ptmin,ptmax,nptsumbins,ptsummin,ptsummax);
                  fhPtSumIsolated[icone]->SetYTitle("#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; ipt<fNPtThresFrac;ipt++){ 
-                   sprintf(name,"hPtThresIsol_Cone_%d_Pt%d",icone,ipt);
+                   sprintf(name,"hPtThres_Cone_%d_Pt%d",icone,ipt);
                    sprintf(title,"Isolated candidate p_{T} distribution for cone size %d and p_{T}^{th} %d",icone,ipt);
                    fhPtThresIsolated[icone][ipt]  = new TH1F(name, title,nptbins,ptmin,ptmax);
                    fhPtThresIsolated[icone][ipt]->SetXTitle("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; icone<fNCones; icone++){
     GetIsolationCut()->SetConeSize(fConeSizes[icone]);
     coneptsum = 0 ;
+
     //Loop on ptthresholds
     for(Int_t ipt = 0; ipt<fNPtThresFrac ;ipt++){
       n[icone][ipt]=0;
       nfrac[icone][ipt]=0;
       GetIsolationCut()->SetPtThreshold(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) ;
index 99eba20..90dca7c 100755 (executable)
@@ -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();
   
index 74ba646..1711cc6 100755 (executable)
@@ -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<fDeltaPhiMaxCut) &&
        (ratio > 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) ; 
index f8338b8..963d33d 100755 (executable)
@@ -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() ;
index 2bb5029..14b6a45 100755 (executable)
@@ -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()<<endl;
   }
   
   return fOutCont;
+
 }
 
 //____________________________________________________________________________
@@ -963,8 +963,10 @@ void  AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0(AliAODPWG4ParticleC
 void AliAnaParticleJetLeadingConeCorrelation::InitParameters()
 {
   //Initialize the parameters of the analysis.
-  
-  SetInputAODName("photons");
+  SetInputAODName("PWG4Particle");
+  SetAODRefArrayName("JetLeadingCone");    
+  AddToHistogramsName("AnaJetLCCorr_");
+
   fJetsOnlyInCTS      = kFALSE ;
   fPbPb               = kFALSE ;
   fReMakeJet          = kFALSE ;
@@ -1127,7 +1129,7 @@ Bool_t AliAnaParticleJetLeadingConeCorrelation::IsJetSelected(const Double_t ptT
     Double_t min = CalculateJetRatioLimit(ptTrig, par, xmin);
     Double_t max = CalculateJetRatioLimit(ptTrig, par, xmax);
     
-    if(GetDebug() > 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");
 
index dd2dbda..5a9a05f 100755 (executable)
@@ -24,7 +24,6 @@ class AliAODTrack;
 class AliAODCaloCluster;
 class AliCaloTrackReader;
 class AliNeutralMesonSelection;
-class AliAODPWG4ParticleCorrelation ;
 
 #include "AliAnaPartCorrBaseClass.h"
 
index a27d840..d6e1b15 100755 (executable)
@@ -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");
   
 } 
index d4847e1..5badc93 100755 (executable)
@@ -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") ;
        
 } 
index ebe3af7..a0aa3c7 100755 (executable)
@@ -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)
 
 } ;
  
index 5275d22..1526c92 100755 (executable)
@@ -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; i1<nPhot-1; i1++){
     AliAODPWG4Particle * p1 = (AliAODPWG4Particle*) (GetInputAODBranch()->At(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; ipid<fNPID; ipid++)
        {
@@ -376,7 +380,7 @@ void AliAnaPi0::MakeAnalysisFillHistograms()
     TClonesArray* ev2= (TClonesArray*) (evMixList->At(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; i1<nPhot; i1++){
       AliAODPWG4Particle * p1 = (AliAODPWG4Particle*) (GetInputAODBranch()->At(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; ipid<fNPID; ipid++){ 
          if((p1->IsPIDOK(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());
 
 }
 
index 6cadfd9..d2afc7e 100755 (executable)
@@ -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" ;
index d1b0da7..09b486f 100755 (executable)
@@ -22,7 +22,6 @@ class TList ;
 
 // --- ANALYSIS system ---
 #include "AliAnaPartCorrBaseClass.h"
-class AliAODPWG4ParticleCorrelation ;
 
 class AliAnaPi0EbE : public AliAnaPartCorrBaseClass {
 
index 00c61fd..fa8567f 100644 (file)
@@ -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;
 }
+
+
index ddc9a92..1d7433c 100644 (file)
@@ -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");