AliCaloPID: Correct matching rejection in case of recalculation in the analysis,...
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 17 Jun 2011 11:20:57 +0000 (11:20 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 17 Jun 2011 11:20:57 +0000 (11:20 +0000)
AliAnaPhoton: Pass the CaloPID histograms to list of histograms
AliAnaPi0: Fill conversion histograms only if conversion check label is true
AliNeutralMeson: Some commented code cleaning

PWG4/PartCorrBase/AliCaloPID.cxx
PWG4/PartCorrBase/AliCaloPID.h
PWG4/PartCorrBase/AliNeutralMesonSelection.cxx
PWG4/PartCorrDep/AliAnaPhoton.cxx
PWG4/PartCorrDep/AliAnaPi0.cxx

index 0c285f3..68ebb86 100755 (executable)
@@ -47,6 +47,7 @@
 //---- ANALYSIS system ----
 #include "AliCaloPID.h"
 #include "AliVCluster.h"
+#include "AliVTrack.h"
 #include "AliAODPWG4Particle.h"
 #include "AliEMCALPIDUtils.h"
 #include "AliCalorimeterUtils.h"
@@ -65,7 +66,12 @@ fPHOSNeutralWeight(0.), //fPHOSWeightFormula(0),
 //fPHOSPhotonWeightFormula(0x0), fPHOSPi0WeightFormula(0x0),
 fDispCut(0.),fTOFCut(0.), fDebug(-1), 
 fRecalculateBayesian(kFALSE), fParticleFlux(kLow), 
-fEMCALPIDUtils(new AliEMCALPIDUtils)
+fEMCALPIDUtils(new AliEMCALPIDUtils),
+fHistoNEBins(100),   fHistoEMax(100.),   fHistoEMin(0.),
+fHistoNDEtaBins(100),fHistoDEtaMax(0.15),fHistoDEtaMin(-0.15),
+fHistoNDPhiBins(100),fHistoDPhiMax(0.15),fHistoDPhiMin(-0.15),
+fhTrackMatchedDEta(),fhTrackMatchedDPhi(),fhTrackMatchedDEtaDPhi()
+
 {
   //Ctor
   
@@ -84,7 +90,12 @@ fPHOSNeutralWeight(0.), //fPHOSWeightFormula(0),
 //fPHOSPhotonWeightFormula(0x0), fPHOSPi0WeightFormula(0x0),
 fDispCut(0.),fTOFCut(0.), fDebug(-1), 
 fRecalculateBayesian(kTRUE), fParticleFlux(flux), 
-fEMCALPIDUtils(new AliEMCALPIDUtils)
+fEMCALPIDUtils(new AliEMCALPIDUtils),
+fHistoNEBins(100),   fHistoEMax(100.),   fHistoEMin(0.),
+fHistoNDEtaBins(100),fHistoDEtaMax(0.15),fHistoDEtaMin(-0.15),
+fHistoNDPhiBins(100),fHistoDPhiMax(0.15),fHistoDPhiMin(-0.15),
+fhTrackMatchedDEta(),fhTrackMatchedDPhi(),fhTrackMatchedDEtaDPhi()
+
 {
        //Ctor
        
@@ -103,7 +114,12 @@ fPHOSNeutralWeight(0.), //fPHOSWeightFormula(0),
 //fPHOSPhotonWeightFormula(0x0), fPHOSPi0WeightFormula(0x0),
 fDispCut(0.),fTOFCut(0.), fDebug(-1), 
 fRecalculateBayesian(kTRUE), fParticleFlux(-1), 
-fEMCALPIDUtils( (AliEMCALPIDUtils*) emcalpid)
+fEMCALPIDUtils( (AliEMCALPIDUtils*) emcalpid),
+fHistoNEBins(100),   fHistoEMax(100.),   fHistoEMin(0.),
+fHistoNDEtaBins(100),fHistoDEtaMax(0.15),fHistoDEtaMin(-0.15),
+fHistoNDPhiBins(100),fHistoDPhiMax(0.15),fHistoDPhiMin(-0.15),
+fhTrackMatchedDEta(),fhTrackMatchedDPhi(),fhTrackMatchedDEtaDPhi()
+
 {
        //Ctor
        
@@ -111,66 +127,6 @@ fEMCALPIDUtils( (AliEMCALPIDUtils*) emcalpid)
        InitParameters();
 }
 
-//____________________________________________________________________________
-AliCaloPID::AliCaloPID(const AliCaloPID & pid) :   
-TObject(pid), fEMCALPhotonWeight(pid.fEMCALPhotonWeight), 
-fEMCALPi0Weight(pid.fEMCALPi0Weight), 
-fEMCALElectronWeight(pid.fEMCALElectronWeight), 
-fEMCALChargeWeight(pid.fEMCALChargeWeight), 
-fEMCALNeutralWeight(pid.fEMCALNeutralWeight), 
-fPHOSPhotonWeight(pid.fPHOSPhotonWeight),
-fPHOSPi0Weight(pid.fPHOSPi0Weight),
-fPHOSElectronWeight(pid.fPHOSElectronWeight), 
-fPHOSChargeWeight(pid.fPHOSChargeWeight),
-fPHOSNeutralWeight(pid.fPHOSNeutralWeight),
-//fPHOSWeightFormula(pid.fPHOSWeightFormula), 
-//fPHOSPhotonWeightFormula(new TFormula(*pid.fPHOSPhotonWeightFormula)), 
-//fPHOSPi0WeightFormula   (new TFormula(*pid.fPHOSPi0WeightFormula)), 
-fDispCut(pid.fDispCut),fTOFCut(pid.fTOFCut),
-fDebug(pid.fDebug), fRecalculateBayesian(pid.fRecalculateBayesian),
-fParticleFlux(pid.fParticleFlux), 
-fEMCALPIDUtils(new AliEMCALPIDUtils(*pid.fEMCALPIDUtils))
-{
-  // cpy ctor
-       
-}
-
-//_________________________________________________________________________
-//AliCaloPID & AliCaloPID::operator = (const AliCaloPID & pid)
-//{
-//  // assignment operator
-//  
-//  if(&pid == this) return *this;
-//  
-//  fEMCALPhotonWeight   = pid. fEMCALPhotonWeight ;
-//  fEMCALPi0Weight      = pid.fEMCALPi0Weight ;
-//  fEMCALElectronWeight = pid.fEMCALElectronWeight; 
-//  fEMCALChargeWeight   = pid.fEMCALChargeWeight;
-//  fEMCALNeutralWeight  = pid.fEMCALNeutralWeight;
-//  
-//  fPHOSPhotonWeight    = pid.fPHOSPhotonWeight ;
-//  fPHOSPi0Weight       = pid.fPHOSPi0Weight ;
-//  fPHOSElectronWeight  = pid.fPHOSElectronWeight; 
-//  fPHOSChargeWeight    = pid.fPHOSChargeWeight;
-//  fPHOSNeutralWeight   = pid.fPHOSNeutralWeight;
-//  
-//  fPHOSWeightFormula   = pid.fPHOSWeightFormula; 
-//  delete fPHOSPhotonWeightFormula;  fPHOSPhotonWeightFormula = new TFormula(*pid.fPHOSPhotonWeightFormula); 
-//  delete fPHOSPi0WeightFormula;     fPHOSPi0WeightFormula    = new TFormula(*pid.fPHOSPi0WeightFormula);
-//  
-//  fDispCut  = pid.fDispCut;
-//  fTOFCut   = pid.fTOFCut;
-//  fDebug    = pid.fDebug;
-//  
-//  fRecalculateBayesian = pid.fRecalculateBayesian;
-//  fParticleFlux        = pid.fParticleFlux;
-//     
-//  delete fEMCALPIDUtils; fEMCALPIDUtils       = new AliEMCALPIDUtils(*pid.fEMCALPIDUtils);
-//             
-//  return *this;
-//  
-//}
-
 //_________________________________
 AliCaloPID::~AliCaloPID() {
   //Dtor
@@ -181,6 +137,46 @@ AliCaloPID::~AliCaloPID() {
 }
 
 
+//________________________________________________________________________
+TList *  AliCaloPID::GetCreateOutputObjects()
+{  
+  // Create histograms to be saved in output file and 
+  // store them in outputContainer of the analysis class that calls this class.
+  
+  TList * outputContainer = new TList() ; 
+  outputContainer->SetName("CaloPIDHistos") ; 
+  
+  outputContainer->SetOwner(kFALSE);
+  
+  fhTrackMatchedDEta  = new TH2F
+  ("TrackMatchedDEta",
+   "d#eta of cluster-track vs cluster energy",fHistoNEBins,fHistoEMin,fHistoEMax,fHistoNDEtaBins,fHistoDEtaMin,fHistoDEtaMax); 
+  fhTrackMatchedDEta->SetYTitle("d#eta");
+  fhTrackMatchedDEta->SetXTitle("E_{cluster} (GeV)");
+  
+  fhTrackMatchedDPhi  = new TH2F
+  ("TrackMatchedDPhi",
+   "d#phi of cluster-track vs cluster energy"
+   ,fHistoNEBins,fHistoEMin,fHistoEMax,fHistoNDPhiBins,fHistoDPhiMin,fHistoDPhiMax); 
+  fhTrackMatchedDPhi->SetYTitle("d#phi (rad)");
+  fhTrackMatchedDPhi->SetXTitle("E_{cluster} (GeV)");
+  
+  fhTrackMatchedDEtaDPhi  = new TH2F
+  ("TrackMatchedDEtaDPhi",
+   "d#eta vs d#phi of cluster-track vs cluster energy"
+   ,fHistoNDEtaBins,fHistoDEtaMin,fHistoDEtaMax,fHistoNDPhiBins,fHistoDPhiMin,fHistoDPhiMax); 
+  fhTrackMatchedDEtaDPhi->SetYTitle("d#phi (rad)");
+  fhTrackMatchedDEtaDPhi->SetXTitle("d#eta");   
+  
+  outputContainer->Add(fhTrackMatchedDEta) ; 
+  outputContainer->Add(fhTrackMatchedDPhi) ;
+  outputContainer->Add(fhTrackMatchedDEtaDPhi) ; 
+  
+  return outputContainer;
+}
+
+
+
 //_______________________________________________________________
 void AliCaloPID::InitParameters()
 {
@@ -477,22 +473,38 @@ Bool_t AliCaloPID::IsTrackMatched(const AliVCluster* cluster, const AliCalorimet
   //Check if there is any track attached to this cluster
   
   Int_t nMatches = cluster->GetNTracksMatched();
+//  if(nMatches>0){
+//    printf("N matches %d, first match (ESD) %d or (AOD) %d\n",nMatches,cluster->GetTrackMatchedIndex(), cluster->GetTrackMatched(0));
+//    if     (cluster->GetTrackMatched(0))        printf("\t matched track id %d\n",((AliVTrack*)cluster->GetTrackMatched(0)) ->GetID() ) ;
+//  }
+//  else {
+//    printf("Not Matched");
+//  }
+
+  //If EMCAL track matching needs to be recalculated
+  if(cluster->IsEMCAL() && cu && cu->IsRecalculationOfClusterTrackMatchingOn()){
+    Float_t dR = 999., dZ = 999.;
+    cu->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dR,dZ);
+
+    if(dR < 999) {     
+      
+      fhTrackMatchedDEta->Fill(cluster->E(),dZ);
+      fhTrackMatchedDPhi->Fill(cluster->E(),dR);
+      if(cluster->E() > 0.5)fhTrackMatchedDEtaDPhi->Fill(dZ,dR);
+      //printf("dR %f, dZ %f \n",dR,dZ);
+      return kTRUE;
+    }
+    else         
+      return kFALSE;
+  }//EMCAL cluster and recalculation of matching on
   
-  //  printf("N matches %d, first match %d\n",nMatches,cluster->GetTrackMatchedIndex());
-  //  if     (cluster->GetTrackMatched(0))        printf("\t matched track id %d\n",((AliVTrack*)cluster->GetTrackMatched(0))->GetID()) ;
-  //  else if(cluster->GetTrackMatchedIndex()>=0) printf("\t matched track id %d\n",((AliVTrack*) GetReader()->GetInputEvent()->GetTrack(cluster->GetTrackMatchedIndex()))->GetID()) ;
+  fhTrackMatchedDEta->Fill(cluster->GetTrackDz(),cluster->E());
+  fhTrackMatchedDEta->Fill(cluster->GetTrackDx(),cluster->E());
+  if(cluster->E() > 0.5)fhTrackMatchedDEtaDPhi->Fill(cluster->GetTrackDz(),cluster->GetTrackDx());
   
   
   if(!strcmp("AliESDCaloCluster",Form("%s",cluster->ClassName())))
-  {
-    //If EMCAL track matching needs to be recalculated
-    if(cluster->IsEMCAL() && cu && cu->IsRecalculationOfClusterTrackMatchingOn()){
-      Float_t dR = 999., dZ = 999.;
-      cu->GetEMCALRecoUtils()->GetMatchedResiduals(cluster->GetID(),dR,dZ);
-      if(dR < 999) return kTRUE;
-      else         return kFALSE;
-    }
-    
+  {    
     if (nMatches > 0) {
       if (nMatches == 1 ) {
         Int_t iESDtrack = cluster->GetTrackMatchedIndex();
@@ -507,16 +519,21 @@ Bool_t AliCaloPID::IsTrackMatched(const AliVCluster* cluster, const AliCalorimet
   }//ESDs
   else
   {
-    //AODs
-    if(cu && cu->IsRecalculationOfClusterTrackMatchingOn()){
-      Float_t dR = TMath::Abs(cluster->GetEmcCpvDistance()) ; //FIXME
-      if(dR > cu->GetCutR()) return kFALSE;
-      else                   return kTRUE;
-    }
-    else {
-      if(nMatches > 0) return kTRUE; //There is at least one match.
-      else             return kFALSE;
-    }
+//    //Patched AODs
+//    if(cu && cu->IsRecalculationOfClusterTrackMatchingOn()){
+//      Float_t dR = TMath::Abs(cluster->GetEmcCpvDistance()) ; //FIXME
+//      if(dR > cu->GetCutR()) return kFALSE;
+//      else                   return kTRUE;
+//    }
+//    else {
+//      if(nMatches > 0) return kTRUE; //There is at least one match.
+//      else             return kFALSE;
+    
+//    }
+    
+    if(nMatches > 0) return kTRUE; //There is at least one match.
+    else             return kFALSE;
+    
   }//AODs or MC (copy into AOD)
   
   return kFALSE;
index 22c597b..4d07012 100755 (executable)
@@ -33,6 +33,7 @@ class TString ;
 class TLorentzVector ;
 //class TFormula ;
 class TTask;
+class TH2F ;
 
 //--- AliRoot system ---
 class AliVCluster;
@@ -47,12 +48,12 @@ class AliCaloPID : public TObject {
   AliCaloPID() ; // ctor
   AliCaloPID(const Int_t particleFlux) ; // ctor, to be used when recalculating bayesian PID
   AliCaloPID(const TTask * emcalpid) ; // ctor, to be used when recalculating bayesian PID and need different parameters
-  AliCaloPID(const AliCaloPID & g) ; // cpy ctor
   virtual ~AliCaloPID() ;//virtual dtor
-
+  
 private:
   AliCaloPID & operator = (const AliCaloPID & g) ;//cpy assignment
-  
+  AliCaloPID(const AliCaloPID & g) ; // cpy ctor
+
 public:
        
   enum PidType {
@@ -69,8 +70,10 @@ public:
   
   enum TagType {kPi0Decay, kEtaDecay, kOtherDecay, kConversion, kNoTag = -1};
   
+  TList * GetCreateOutputObjects();
+
   void InitParameters();
-  
+
   Int_t GetPdg(const TString calo, const Double_t * pid, const Float_t energy) const ;
   
   Int_t GetPdg(const TString calo,const TLorentzVector mom, const AliVCluster * cluster) const ;
@@ -132,6 +135,31 @@ public:
   void SetLowParticleFlux()  {fParticleFlux = kLow;}
   void SetHighParticleFlux() {fParticleFlux = kHigh;}
 
+  
+  
+  //Histogrammes setters and getters
+  
+  virtual void SetHistoERangeAndNBins(Float_t min, Float_t max, Int_t n) {
+    fHistoNEBins = n ;
+    fHistoEMax = max ;
+    fHistoEMin = min ;
+  }
+  
+  virtual void SetHistoDEtaRangeAndNBins(Float_t min, Float_t max, Int_t n) {
+    fHistoNDEtaBins = n ;
+    fHistoDEtaMax = max ;
+    fHistoDEtaMin = min ;
+  }
+
+  
+  virtual void SetHistoDPhiRangeAndNBins(Float_t min, Float_t max, Int_t n) {
+    fHistoNDPhiBins = n ;
+    fHistoDPhiMax = max ;
+    fHistoDPhiMin = min ;
+  }
+  
+   
+  
 private:
   
   Float_t      fEMCALPhotonWeight; //Bayesian PID weight for photons in EMCAL 
@@ -158,7 +186,23 @@ private:
   Int_t  fParticleFlux;               // Particle flux for setting PID parameters
   AliEMCALPIDUtils * fEMCALPIDUtils;  // Pointer to EMCALPID to redo the PID Bayesian calculation
        
-  ClassDef(AliCaloPID,4)
+  //Histograms
+  Int_t   fHistoNEBins ;    // Number of bins in cluster E axis
+  Float_t fHistoEMax ;      // Maximum value of cluster E histogram range
+  Float_t fHistoEMin ;      // Minimum value of cluster E histogram range
+  Int_t   fHistoNDEtaBins ; // Number of bins in dEta (cluster-track) axis
+  Float_t fHistoDEtaMax ;   // Maximum value of dEta (cluster-track) histogram range
+  Float_t fHistoDEtaMin ;   // Minimum value of dEta (cluster-track) histogram range           
+  Int_t   fHistoNDPhiBins ; // Number of bins in dPhi axis
+  Float_t fHistoDPhiMax ;   // Maximum value of dPhi (cluster-track) histogram range
+  Float_t fHistoDPhiMin ;   // Minimum value of dPhi (cluster-track) histogram range
+  
+  TH2F * fhTrackMatchedDEta     ;     //! Eta distance between track and cluster vs cluster E
+  TH2F * fhTrackMatchedDPhi     ;     //! Phi distance between track and cluster vs cluster E
+  TH2F * fhTrackMatchedDEtaDPhi ;     //! Eta vs Phi distance between track and cluster, E cluster > 0.5 GeV
+  
+  
+  ClassDef(AliCaloPID,5)
 } ;
 
 
index d6f03f6..bb0e9c6 100755 (executable)
@@ -56,57 +56,7 @@ ClassImp(AliNeutralMesonSelection)
   //Initialize parameters
   InitParameters();
 }
-/*
-//____________________________________________________________________________
-AliNeutralMesonSelection::AliNeutralMesonSelection(const AliNeutralMesonSelection & g) :   
-  TObject(), fM(g.fM),
-  fInvMassMaxCut(g.fInvMassMaxCut), fInvMassMinCut(g.fInvMassMinCut),
-  fAngleMaxParam(g.fAngleMaxParam),
-  fKeepNeutralMesonHistos(g.fKeepNeutralMesonHistos),
-  fhAnglePairNoCut(g. fhAnglePairNoCut), 
-  fhAnglePairOpeningAngleCut(g. fhAnglePairOpeningAngleCut), 
-  fhAnglePairAllCut(g. fhAnglePairAllCut), 
-  fhInvMassPairNoCut(g.fhInvMassPairNoCut),  
-  fhInvMassPairOpeningAngleCut(g.fhInvMassPairOpeningAngleCut), 
-  fhInvMassPairAllCut(g.fhInvMassPairAllCut),
-  fHistoNEBins(g.fHistoNEBins),   fHistoEMax(g.fHistoEMax),   fHistoEMin(g.fHistoEMin),
-  fHistoNPtBins(g.fHistoNPtBins),   fHistoPtMax(g.fHistoPtMax),   fHistoPtMin(g.fHistoPtMin),
-  fHistoNAngleBins(g.fHistoNAngleBins), fHistoAngleMax(g.fHistoAngleMax), fHistoAngleMin(g.fHistoAngleMin),
-  fHistoNIMBins(g.fHistoNIMBins), fHistoIMMax(g.fHistoIMMax), fHistoIMMin(g.fHistoIMMin)
-{
-  // cpy ctor
-}
-
-//_________________________________________________________________________
-AliNeutralMesonSelection & AliNeutralMesonSelection::operator = (const AliNeutralMesonSelection & source)
-{
-  // assignment operator
-  
-  if(this == &source)return *this;
-  ((TObject *)this)->operator=(source);
 
-  fM = source.fM ;
-  fInvMassMaxCut = source.fInvMassMaxCut ; 
-  fInvMassMinCut = source.fInvMassMinCut ;
-  fAngleMaxParam = source.fAngleMaxParam ;
-  fKeepNeutralMesonHistos = source.fKeepNeutralMesonHistos;
-  fhAnglePairNoCut = source. fhAnglePairNoCut ; 
-  fhAnglePairOpeningAngleCut = source. fhAnglePairOpeningAngleCut ; 
-  fhAnglePairAllCut = source. fhAnglePairAllCut ; 
-  fhInvMassPairNoCut = source.fhInvMassPairNoCut ; 
-  fhInvMassPairOpeningAngleCut = source.fhInvMassPairOpeningAngleCut ; 
-  fhInvMassPairAllCut = source.fhInvMassPairAllCut ; 
-  
-  fHistoNEBins = source.fHistoNEBins;   fHistoEMax = source.fHistoEMax;   fHistoEMin = source.fHistoEMin;
-  fHistoNPtBins = source.fHistoNPtBins;   fHistoPtMax = source.fHistoPtMax;   fHistoPtMin = source.fHistoPtMin;
-  fHistoNAngleBins = source.fHistoNAngleBins; fHistoAngleMax = source.fHistoAngleMax; fHistoAngleMin = source.fHistoAngleMin;
-  fHistoNIMBins = source.fHistoNIMBins; fHistoIMMax = source.fHistoIMMax; fHistoIMMin = source.fHistoIMMin;
-  
-  return *this;
-  
-}
-*/
 //____________________________________________________________________________
 AliNeutralMesonSelection::~AliNeutralMesonSelection() 
 {
index ee214ac..0eaf92d 100755 (executable)
@@ -651,6 +651,15 @@ TList *  AliAnaPhoton::GetCreateOutputObjects()
     
   }//Histos with MC
     
+  //Store calo PID histograms
+  if(fRejectTrackMatch){
+    TList * caloPIDHistos = GetCaloPID()->GetCreateOutputObjects() ;
+    for(Int_t i = 0; i < caloPIDHistos->GetEntries(); i++) {
+      outputContainer->Add(caloPIDHistos->At(i)) ;
+    }
+    delete caloPIDHistos;
+  }
+  
   return outputContainer ;
   
 }
@@ -804,11 +813,11 @@ void  AliAnaPhoton::MakeAnalysisFillAOD()
     //Skip matched clusters with tracks
     if(fRejectTrackMatch){
       if(IsTrackMatched(calo)) {
-        if(GetDebug() > 2) printf("\t Reject matched clusters\n");
+        if(GetDebug() > 2) printf("\t Reject track-matched clusters\n");
         continue ;
       }
       else  
-        if(GetDebug() > 2)  printf(" matching cut passed cut passed \n");
+        if(GetDebug() > 2)  printf(" Track-matching cut passed \n");
     }// reject matched clusters
     
     //.......................................
@@ -957,8 +966,29 @@ void  AliAnaPhoton::MakeAnalysisFillAOD()
           
           Float_t asymmetry = TMath::Abs(mom.E()-mom2.E())/(mom.E()+mom2.E());
           Float_t dPhi      = mom.Phi()-mom2.Phi();
-          Float_t dEta      = mom.Eta()-mom2.Eta();          
+          Float_t dEta      = mom.Eta()-mom2.Eta();  
           
+          //Estimate conversion distance, T. Awes, M. Ivanov
+          //Under the assumption that the pair has zero mass, and that each electron 
+          //of the pair has the same momentum, they will each have the same bend radius 
+          //given by R=p/(qB) = p / (300 B) with p in [MeV/c], B in [Tesla] and R in [m]. 
+          //With nominal ALICE magnet current of 30kA B=0.5T, and so with E_cluster=p,  
+          //R = E/1.5 [cm].  Under these assumptions, the distance from the conversion 
+          //point to the EMCal can be related to the separation distance, L=2y, on the EMCal 
+          //as d = sqrt(R^2 -(R-y)^2) = sqrt(2Ry - y^2). And since R>>y we can write as 
+          //d = sqrt(E*L/1.5) where E is the cluster energy and L is the distance in cm between 
+          //the clusters.
+//          Float_t pos1[3];
+//          calo->GetPosition(pos1); 
+//          Float_t pos2[3];
+//          calo2->GetPosition(pos2); 
+//          Float_t l = TMath::Sqrt((pos1[0]-pos2[0])*(pos1[0]-pos2[0])+
+//                                  (pos1[1]-pos2[1])*(pos1[1]-pos2[1])+
+//                                  (pos1[2]-pos2[2])*(pos1[2]-pos2[2]));
+//          
+//          Float_t convDist  = TMath::Sqrt(mom.E() *l/1.5);
+//          Float_t convDist2 = TMath::Sqrt(mom2.E()*l/1.5);
+//          printf("l = %f, e1 = %f, d1=%f, e2 = %f, d2=%f\n",l,mom.E(),convDist,mom2.E(),convDist2);
           if(GetDebug() > 2)
             printf("AliAnaPhoton::MakeAnalysisFillAOD(): Pair with mass %2.3f < %2.3f, %1.2f < dPhi %2.2f < %2.2f, dEta %f < %2.2f, asymmetry %2.2f< %2.2f; \n    cluster1 id %d, e %2.3f  SM %d, eta %2.3f, phi %2.3f ; \n    cluster2 id %d, e %2.3f, SM %d,eta %2.3f, phi %2.3f\n",
                    pairM,fMassCut,fConvDPhiMinCut, dPhi, fConvDPhiMaxCut, dEta, fConvDEtaCut, asymmetry, fConvAsymCut,
index 92dc8f2..69bb03f 100755 (executable)
@@ -1887,8 +1887,10 @@ void AliAnaPi0::MakeAnalysisFillHistograms()
       if(ok){
         
         //Check if one of the clusters comes from a conversion 
-        if     (p1->IsTagged() && p2->IsTagged()) fhReConv2->Fill(pt,m);
-        else if(p1->IsTagged() || p2->IsTagged()) fhReConv ->Fill(pt,m);
+        if(fCheckConversion){
+          if     (p1->IsTagged() && p2->IsTagged()) fhReConv2->Fill(pt,m);
+          else if(p1->IsTagged() || p2->IsTagged()) fhReConv ->Fill(pt,m);
+        }
         
         //Fill histograms for different bad channel distance, centrality, assymmetry cut and pid bit
         for(Int_t ipid=0; ipid<fNPIDBits; ipid++){
@@ -2095,9 +2097,10 @@ void AliAnaPi0::MakeAnalysisFillHistograms()
           if(ok){
             
             //Check if one of the clusters comes from a conversion 
-            if     (p1->IsTagged() && p2->IsTagged()) fhMiConv2->Fill(pt,m);
-            else if(p1->IsTagged() || p2->IsTagged()) fhMiConv ->Fill(pt,m);
-
+            if(fCheckConversion){
+              if     (p1->IsTagged() && p2->IsTagged()) fhMiConv2->Fill(pt,m);
+              else if(p1->IsTagged() || p2->IsTagged()) fhMiConv ->Fill(pt,m);
+            }
             //Fill histograms for different bad channel distance, centrality, assymmetry cut and pid bit
             for(Int_t ipid=0; ipid<fNPIDBits; ipid++){ 
               if((p1->IsPIDOK(ipid,AliCaloPID::kPhoton)) && (p2->IsPIDOK(ipid,AliCaloPID::kPhoton))){