]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
AliNeutralMesonSelection: Set default settings for pi0 or eta pairs selection, set...
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 25 Sep 2011 10:12:12 +0000 (10:12 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Sun, 25 Sep 2011 10:12:12 +0000 (10:12 +0000)
                                            For EMCAL, variable maximum invariant mass cut with energy to account for increase of mass value due to merging.
                                            Remove pt histogram settings since all histograms are with E

AliAnaPi0EbE: Add shower shape histograms to check modules without TRD and cut on fraction of energy carried by cell with maximum energy.

PWG4/PartCorrBase/AliNeutralMesonSelection.cxx
PWG4/PartCorrBase/AliNeutralMesonSelection.h
PWG4/PartCorrDep/AliAnaParticleIsolation.cxx
PWG4/PartCorrDep/AliAnaParticleJetLeadingConeCorrelation.cxx
PWG4/PartCorrDep/AliAnaPi0EbE.cxx
PWG4/PartCorrDep/AliAnaPi0EbE.h

index c4c5564e63faa11bcbcb760305ab883ede2c3cd6..40da7bda46afb5144e4cf6a6b8a2402392b98ab0 100755 (executable)
@@ -34,14 +34,13 @@ ClassImp(AliNeutralMesonSelection)
 //____________________________________________________________________________
   AliNeutralMesonSelection::AliNeutralMesonSelection() : 
     TObject(),             fAsymmetryCut(1),                fUseAsymmetryCut(0),
-    fM(0),                 fInvMassMaxCut(0.),              fInvMassMinCut(0.),
+    fM(0),                 fInvMassMaxCut(0.),              fInvMassMinCut(0.),           fInvMassMaxCutParam(),
     fAngleMaxParam(),      fUseAngleCut(0),                 
     fShiftMinAngle(0),     fKeepNeutralMesonHistos(0), 
     fhAnglePairNoCut(0),   fhAnglePairOpeningAngleCut(0),   fhAnglePairAsymmetryCut(0),   fhAnglePairAllCut(0), 
     fhInvMassPairNoCut(0), fhInvMassPairOpeningAngleCut(0), fhInvMassPairAsymmetryCut(0), fhInvMassPairAllCut(0),
     fhAsymmetryNoCut(0),   fhAsymmetryOpeningAngleCut(0),   fhAsymmetryAllCut(0),
     fHistoNEBins(0),       fHistoEMax(0.),                  fHistoEMin(0.),
-    fHistoNPtBins(0),      fHistoPtMax(0.),                 fHistoPtMin(0.),
     fHistoNAngleBins(0),   fHistoAngleMax(0.),              fHistoAngleMin(0.),
     fHistoNIMBins(0),      fHistoIMMax(0.),                 fHistoIMMin(0.)
 {
@@ -72,13 +71,13 @@ TList *  AliNeutralMesonSelection::GetCreateOutputObjects()
              
     fhAsymmetryNoCut  = new TH2F
          ("AsymmetryNoCut","Asymmetry of all #gamma pair vs E_{#pi^{0}}",
-          fHistoNPtBins,fHistoPtMin,fHistoPtMax,100,0,1); 
+          fHistoNEBins,fHistoEMin,fHistoEMax,100,0,1); 
          fhAsymmetryNoCut->SetYTitle("Asymmetry");
          fhAsymmetryNoCut->SetXTitle("E_{ #pi^{0}} (GeV)");    
     
     fhInvMassPairNoCut  = new TH2F
          ("InvMassPairNoCut","Invariant Mass of all #gamma pair vs E_{#pi^{0}}",
-          fHistoNPtBins,fHistoPtMin,fHistoPtMax,fHistoNIMBins,fHistoIMMin,fHistoIMMax); 
+          fHistoNEBins,fHistoEMin,fHistoEMax,fHistoNIMBins,fHistoIMMin,fHistoIMMax); 
          fhInvMassPairNoCut->SetYTitle("Invariant Mass (GeV/c^{2})");
          fhInvMassPairNoCut->SetXTitle("E_{ #pi^{0}} (GeV)");    
     
@@ -97,14 +96,14 @@ TList *  AliNeutralMesonSelection::GetCreateOutputObjects()
       fhAsymmetryOpeningAngleCut  = new TH2F
       ("AsymmetryOpeningAngleCut",
        "Asymmetry of #gamma pair (angle cut) vs E_{#pi^{0}}",
-       fHistoNPtBins,fHistoPtMin,fHistoPtMax,100,0,1); 
+       fHistoNEBins,fHistoEMin,fHistoEMax,100,0,1); 
       fhAsymmetryOpeningAngleCut->SetYTitle("Asymmetry");
       fhAsymmetryOpeningAngleCut->SetXTitle(" E_{#pi^{0}}(GeV)");   
       
       fhInvMassPairOpeningAngleCut  = new TH2F
       ("InvMassPairOpeningAngleCut",
        "Invariant Mass of #gamma pair (angle cut) vs E_{#pi^{0}}",
-       fHistoNPtBins,fHistoPtMin,fHistoPtMax,fHistoNIMBins,fHistoIMMin,fHistoIMMax); 
+       fHistoNEBins,fHistoEMin,fHistoEMax,fHistoNIMBins,fHistoIMMin,fHistoIMMax); 
       fhInvMassPairOpeningAngleCut->SetYTitle("Invariant Mass (GeV/c^{2})");
       fhInvMassPairOpeningAngleCut->SetXTitle(" E_{#pi^{0}}(GeV)");
       
@@ -124,7 +123,7 @@ TList *  AliNeutralMesonSelection::GetCreateOutputObjects()
       fhInvMassPairAsymmetryCut  = new TH2F
       ("InvMassPairAsymmetryCut",
        "Invariant Mass of #gamma pair (opening angle + asymmetry) vs E_{#pi^{0}}",
-       fHistoNPtBins,fHistoPtMin,fHistoPtMax,fHistoNIMBins,fHistoIMMin,fHistoIMMax); 
+       fHistoNEBins,fHistoEMin,fHistoEMax,fHistoNIMBins,fHistoIMMin,fHistoIMMax); 
       fhInvMassPairAsymmetryCut->SetYTitle("Invariant Mass (GeV/c^{2})");
       fhInvMassPairAsymmetryCut->SetXTitle("E_{#pi^{0}}(GeV)");      
       
@@ -143,14 +142,14 @@ TList *  AliNeutralMesonSelection::GetCreateOutputObjects()
          fhInvMassPairAllCut  = new TH2F
          ("InvMassPairAllCut",
           "Invariant Mass of #gamma pair (opening angle + asymmetry + invmass cut) vs E_{#pi^{0}}",
-          fHistoNPtBins,fHistoPtMin,fHistoPtMax,fHistoNIMBins,fHistoIMMin,fHistoIMMax); 
+          fHistoNEBins,fHistoEMin,fHistoEMax,fHistoNIMBins,fHistoIMMin,fHistoIMMax); 
          fhInvMassPairAllCut->SetYTitle("Invariant Mass (GeV/c^{2})");
          fhInvMassPairAllCut->SetXTitle("E_{#pi^{0}}(GeV)");
          
          fhAsymmetryAllCut  = new TH2F
          ("AsymmetryAllCut",
           "Asymmetry of #gamma pair (opening angle+invmass cut) vs E_{#pi^{0}}",
-          fHistoNPtBins,fHistoPtMin,fHistoPtMax,100,0,1); 
+          fHistoNEBins,fHistoEMin,fHistoEMax,100,0,1); 
          fhAsymmetryAllCut->SetYTitle("Asymmetry");
          fhAsymmetryAllCut->SetXTitle("E_{#pi^{0}}(GeV)");
     
@@ -171,32 +170,20 @@ void AliNeutralMesonSelection::InitParameters()
   //Initialize the parameters of the analysis.
   fAngleMaxParam.Set(4) ;
   fAngleMaxParam.Reset(0.);
-  fAngleMaxParam.AddAt(0.4,0);
-  fAngleMaxParam.AddAt(-0.25,1) ;
-  fAngleMaxParam.AddAt(0.025,2) ;
-  fAngleMaxParam.AddAt(-2e-4,3) ;
-  fShiftMinAngle   = 0.02 ;
-  fInvMassMaxCut   = 0.16 ;
-  fInvMassMinCut   = 0.11 ;
 
-  fM               = 0.1349766 ;//neutralMeson mass, pi0
+  SetParticle("Pi0");
+
+  fShiftMinAngle   = 0.03;
   
- //Histogrammes settings
-  fHistoNEBins     = 100 ;
-  fHistoEMax       = 20 ;
 //Histogrammes settings
+  fHistoNEBins     = 200 ;
+  fHistoEMax       = 50  ;
   fHistoEMin       = 0.  ;  
-  
-  fHistoNPtBins    = 100 ;
-  fHistoPtMax      = 20 ;
-  fHistoPtMin      = 0.  ;
 
-  fHistoNAngleBins = 100 ;
-  fHistoAngleMax   = 0.2;
+  fHistoNAngleBins = 200 ;
+  fHistoAngleMax   = 0.;
   fHistoAngleMin   = 0.  ;
 
-  fHistoNIMBins    = 100 ;
-  fHistoIMMax      = 0.3   ;
-  fHistoIMMin      = 0.  ;  
 }
 
 //__________________________________________________________________________-
@@ -205,7 +192,7 @@ Bool_t AliNeutralMesonSelection::IsAngleInWindow(const Float_t angle,const Float
  
   // Check if the opening angle of the candidate pairs is inside 
   // our selection window
-  // Attention, only valid for Pi0, if needed for Eta need to revise function or change parameters
+  // Attention, only valid for Pi0, if needed for Eta need to revise max angle function or change parameters
        
   Double_t max =  fAngleMaxParam.At(0)*TMath::Exp(fAngleMaxParam.At(1)*e)
     +fAngleMaxParam.At(2)+fAngleMaxParam.At(3)*e;
@@ -213,14 +200,14 @@ Bool_t AliNeutralMesonSelection::IsAngleInWindow(const Float_t angle,const Float
   Double_t min = 100. ;
   if(arg>0.)
     min = TMath::ACos(arg)-fShiftMinAngle;
-
+  
   if((angle<max)&&(angle>=min)) return kTRUE  ;
   else                          return kFALSE ;
 
 }
 
 //____________________________________________________________________________
-Bool_t  AliNeutralMesonSelection::SelectPair(TLorentzVector gammai, TLorentzVector gammaj)  
+Bool_t  AliNeutralMesonSelection::SelectPair(TLorentzVector gammai, TLorentzVector gammaj, TString calo)  
 {  
   
   //Search for the neutral pion within selection cuts
@@ -265,7 +252,16 @@ Bool_t  AliNeutralMesonSelection::SelectPair(TLorentzVector gammai, TLorentzVect
   
   
   //Cut on the invariant mass of the pair
-  if((invmass > fInvMassMinCut) && (invmass < fInvMassMaxCut)){ 
+  
+  Float_t invmassmaxcut = fInvMassMaxCut;
+  if(calo=="EMCAL" && e > 6.){ // for EMCAL, pi0s, mass depends strongly with energy for e > 6, loose max cut
+  
+    invmassmaxcut = (fInvMassMaxCutParam[0]+fInvMassMaxCut)+fInvMassMaxCutParam[1]*e+fInvMassMaxCutParam[2]*e*e;
+    //printf("e %f, max cut %f, p00 %f,p0 %f,p1 %f,p2 %f\n",
+    //       e,invmassmaxcut,fInvMassMaxCut,fInvMassMaxCutParam[0],fInvMassMaxCutParam[1],fInvMassMaxCutParam[2]);
+  }
+  
+  if((invmass > fInvMassMinCut) && (invmass < invmassmaxcut)){ 
     if(fKeepNeutralMesonHistos){
       fhInvMassPairAllCut->Fill(e,invmass);
       fhAnglePairAllCut  ->Fill(e,angle);
@@ -280,6 +276,55 @@ Bool_t  AliNeutralMesonSelection::SelectPair(TLorentzVector gammai, TLorentzVect
   
 }
 
+//____________________________________________________________________________
+void  AliNeutralMesonSelection::SetParticle(TString particleName){
+  // Set some default parameters for selection of pi0 or eta
+  
+  if(particleName=="Pi0"){
+    
+    fM               = 0.135 ; // GeV
+    fInvMassMaxCut   = 0.16  ; // GeV
+    fInvMassMinCut   = 0.11  ; // GeV
+
+    fInvMassMaxCutParam[0] = 0.0   ;
+    fInvMassMaxCutParam[1] =-7.e-5 ;
+    fInvMassMaxCutParam[2] = 8.e-5 ;    
+         
+    fAngleMaxParam.AddAt( 0.40, 0) ;
+    fAngleMaxParam.AddAt(-0.25, 1) ;
+    fAngleMaxParam.AddAt( 0.025,2) ; //for pi0 shift, for eta maybe 0.09 
+    fAngleMaxParam.AddAt(-2.e-4,3) ;
+    
+    fHistoNIMBins    = 150 ;
+    fHistoIMMax      = 0.3 ;
+    fHistoIMMin      = 0.  ;  
+    
+  }else if(particleName=="Eta"){
+  
+    fM               = 0.547 ; // GeV
+    fInvMassMaxCut   = 0.590 ; // GeV
+    fInvMassMinCut   = 0.510 ; // GeV
+    
+    fInvMassMaxCutParam[0] = 0.0 ;
+    fInvMassMaxCutParam[1] = 0.0 ;
+    fInvMassMaxCutParam[2] = 0.0 ;    
+    
+    fAngleMaxParam.AddAt( 0.40, 0) ; // Same as pi0
+    fAngleMaxParam.AddAt(-0.25, 1) ; // Same as pi0
+    fAngleMaxParam.AddAt( 0.1,2) ;   // Shifted with respect to pi0
+    fAngleMaxParam.AddAt(-2.e-4,3) ; // Same as pi0
+  
+    fHistoNIMBins    = 200  ; // GeV
+    fHistoIMMax      = 0.75 ; // GeV
+    fHistoIMMin      = 0.35 ; // GeV 
+    
+  }
+  else 
+    printf("AliAnaNeutralMesonSelection::SetParticle(%s) *** Particle NOT defined (Pi0 or Eta), Pi0 settings by default *** \n",particleName.Data());
+  
+  
+}
+
 //__________________________________________________________________
 void AliNeutralMesonSelection::Print(const Option_t * opt) const
 {
@@ -309,10 +354,8 @@ void AliNeutralMesonSelection::Print(const Option_t * opt) const
   
   if(fKeepNeutralMesonHistos){
     printf("Histograms: %3.1f < E  < %3.1f,  Nbin = %d\n",   fHistoEMin,     fHistoEMax,     fHistoNEBins);
-    printf("Histograms: %3.1f < pT < %3.1f,  Nbin = %d\n",   fHistoPtMin,    fHistoPtMax,    fHistoNPtBins);
     printf("Histograms: %3.1f < angle < %3.1f, Nbin = %d\n", fHistoAngleMin, fHistoAngleMax, fHistoNAngleBins);
-    printf("Histograms: %3.1f < IM < %3.1f, Nbin = %d\n",    fHistoIMMin,    fHistoIMMax,    fHistoNIMBins);
-    
+    printf("Histograms: %3.1f < IM < %3.1f, Nbin = %d\n",    fHistoIMMin,    fHistoIMMax,    fHistoNIMBins);    
   }
   
 } 
index 600e2d7cc85b0198b8363ddc8bf5b1754782fa51..ff142b65a53948b0eb195db7c26151f4b428d193 100755 (executable)
@@ -42,7 +42,9 @@ class AliNeutralMesonSelection : public TObject {
   Bool_t   AreNeutralMesonSelectionHistosKept()   const { return fKeepNeutralMesonHistos ; }
   void     KeepNeutralMesonSelectionHistos(Bool_t keep) { fKeepNeutralMesonHistos = keep ; }
   
-  Bool_t   SelectPair(TLorentzVector particlei,  TLorentzVector particlej)  ;
+  Bool_t   SelectPair(TLorentzVector particlei,  TLorentzVector particlej, TString calo)  ;
+  
+  void     SetParticle(TString particleName) ;  // Do some default settings for "Pi0" or "Eta"
   
   // Asymmetry selection
     
@@ -73,10 +75,14 @@ class AliNeutralMesonSelection : public TObject {
   void     SetInvMassCutRange(Double_t invmassmin, Double_t invmassmax)
             { fInvMassMaxCut =invmassmax;  fInvMassMinCut =invmassmin                    ; }   
   
+  void     SetInvMassCutMaxParameters(Float_t a, Float_t b, Float_t c)
+            { fInvMassMaxCutParam[0] = a ; 
+              fInvMassMaxCutParam[1] = b ; 
+              fInvMassMaxCutParam[2] = c ; }   
+
   Double_t GetMass()                              const { return fM                      ; }
   void     SetMass(Double_t m)                          { fM = m                         ; }
-  
-       
+      
   //Histogrammes setters and getters
   
   virtual void SetHistoERangeAndNBins(Float_t min, Float_t max, Int_t n) {
@@ -88,17 +94,7 @@ class AliNeutralMesonSelection : public TObject {
   Int_t   GetHistoNEBins()     const { return fHistoNEBins    ; }
   Float_t GetHistoEMin()       const { return fHistoEMin      ; }
   Float_t GetHistoEMax()       const { return fHistoEMax      ; }
-  
-  virtual void SetHistoPtRangeAndNBins(Float_t min, Float_t max, Int_t n) {
-    fHistoNPtBins = n ;
-    fHistoPtMax = max ;
-    fHistoPtMin = min ;
-  }
-  
-  Int_t   GetHistoNPtBins()    const { return fHistoNPtBins    ; }
-  Float_t GetHistoPtMin()      const { return fHistoPtMin      ; }
-  Float_t GetHistoPtMax()      const { return fHistoPtMax      ; }
-  
+    
   virtual void SetHistoAngleRangeAndNBins(Float_t min, Float_t max, Int_t n) {
     fHistoNAngleBins = n ;
     fHistoAngleMax = max ;
@@ -128,13 +124,14 @@ class AliNeutralMesonSelection : public TObject {
   Double_t fM ;                           // Mass of the neutral meson
   Double_t fInvMassMaxCut ;               // Invariant Mass cut maximum
   Double_t fInvMassMinCut ;               // Invariant Masscut minimun
+  Double_t fInvMassMaxCutParam[3];        // Variable invariant mass max cut, for pi0 in EMCAL
   
   TArrayD  fAngleMaxParam ;               // Max opening angle selection parameters
   Bool_t   fUseAngleCut   ;               // Select pairs depending on their opening angle
   Float_t  fShiftMinAngle ;               // Correction shift for min angle from true kinematic limit, resolution effects
   
   Bool_t   fKeepNeutralMesonHistos ;      // Keep neutral meson selection histograms
-  
+
   //Histograms
   TH2F *   fhAnglePairNoCut ;             //! Aperture angle of decay photons, no cuts
   TH2F *   fhAnglePairOpeningAngleCut ;   //! Aperture angle of decay photons, cut on opening angle
@@ -155,10 +152,6 @@ class AliNeutralMesonSelection : public TObject {
   Float_t  fHistoEMax ;                   // Maximum value of pi0 E histogram range
   Float_t  fHistoEMin ;                   // Minimum value of pi0 E histogram range
   
-  Int_t    fHistoNPtBins ;                // Number of bins in Pt trigger axis
-  Float_t  fHistoPtMax ;                  // Maximum value of Pt trigger histogram range
-  Float_t  fHistoPtMin ;                  // Minimum value of Pt trigger histogram range       
-       
   Int_t    fHistoNAngleBins ;             // Number of bins in angle axis
   Float_t  fHistoAngleMax ;               // Maximum value of angle histogram range
   Float_t  fHistoAngleMin ;               // Minimum value of angle histogram range
@@ -167,7 +160,7 @@ class AliNeutralMesonSelection : public TObject {
   Float_t  fHistoIMMax ;                  // Maximum value of Invariant Mass histogram range
   Float_t  fHistoIMMin ;                  // Minimum value of Invariant Mass histogram range
   
-  ClassDef(AliNeutralMesonSelection,5)
+  ClassDef(AliNeutralMesonSelection,6)
     
 } ;
 
index e30996a828cc64eba3ed79d8fd8d28b90b397336..5f4317dd9fd38c648b576d9059cee417d818dc52 100755 (executable)
@@ -143,8 +143,14 @@ Bool_t AliAnaParticleIsolation::CheckInvMass(const Int_t iaod, const AliAODPWG4P
     if(iaod == jaod) continue ;
     AliAODPWG4ParticleCorrelation * part2 =  (AliAODPWG4ParticleCorrelation*) (GetInputAODBranch()->At(jaod));
     mom2 = *(part2->Momentum());
+    
     //Select good pair (good phi, pt cuts, aperture and invariant mass)
-    if(GetNeutralMesonSelection()->SelectPair(mom1, mom2)){
+    
+    TString detector="";
+    if(part1->GetDetector()=="EMCAL" || part2->GetDetector()=="EMCAL" )
+      detector = "EMCAL";
+    
+    if(GetNeutralMesonSelection()->SelectPair(mom1, mom2,detector)){
       if(GetDebug() > 1)printf("AliAnaParticleIsolation::CheckInvMass() - Selected gamma pair: pt %f, phi %f, eta%f\n",(mom1+mom2).Pt(), (mom1+mom2).Phi()*180./3.1416, (mom1+mom2).Eta());
       return kTRUE ;
     }
index b61bfe96553d999000868c834af58cc0d5a66e34..cf51fbbdf20826e31f361aea970cf6fb5bffe8f7 100755 (executable)
@@ -1032,7 +1032,7 @@ void  AliAnaParticleJetLeadingConeCorrelation::GetLeadingPi0(AliAODPWG4ParticleC
             if(pt > ptl  && rat > fLeadingRatioMinCut  && rat < fLeadingRatioMaxCut  && 
                deltaphi > fDeltaPhiMinCut && deltaphi < fDeltaPhiMaxCut ){
               //Select good pair (aperture and invariant mass)
-              if(GetNeutralMesonSelection()->SelectPair(gammai, gammaj)){
+              if(GetNeutralMesonSelection()->SelectPair(gammai, gammaj,"EMCAL")){
                 phil = phi ;
                 ptl  = pt ;
                 pLeading=(gammai+gammaj);      
index 529bb6c761a057d8a3570e1988f6e8a6e5f976d5..4bb2fa55f5e321f35fd126c668d612c25cfddaba 100755 (executable)
@@ -56,9 +56,11 @@ AliAnaPi0EbE::AliAnaPi0EbE() :
     //Histograms
     fhPtPi0(0),                   fhEPi0(0),                    fhEEtaPhiPi0(0),
     //Shower shape histos
-    fhEDispersion(0),             fhELambda0(0),                fhELambda1(0),             
+    fhEDispersion(0),             fhELambda0(0),                fhELambda1(0), 
+    fhELambda0NoTRD(0),           fhELambda0FracMaxCellCut(0),  
+    fhEFracMaxCell(0),            fhEFracMaxCellNoTRD(0),            
     //Time histograms
-    fhClusterPairDiffTimeE(0),    fhClusterPairDiffTimeAsy(0),
+    fhClusterPairDiffTimeE(0),    fhClusterPairDiffTimeAsy(0),  
     //MC histos
     fhPtMCNoPi0(0),               fhPhiMCNoPi0(0),              fhEtaMCNoPi0(0), 
     fhPtMCPi0(0),                 fhPhiMCPi0(0),                fhEtaMCPi0(0)
@@ -67,6 +69,9 @@ AliAnaPi0EbE::AliAnaPi0EbE() :
   
   for(Int_t i = 0; i < 6; i++){
     fhEMCLambda0[i]     = 0;
+    fhEMCLambda0NoTRD[i]= 0;
+    fhEMCLambda0FracMaxCellCut[i]= 0;
+    fhEMCFracMaxCell[i] = 0;
     fhEMCLambda1[i]     = 0;
     fhEMCDispersion[i]  = 0;
   }
@@ -165,6 +170,33 @@ TList *  AliAnaPi0EbE::GetCreateOutputObjects()
     fhELambda0->SetYTitle("#lambda_{0}^{2}");
     fhELambda0->SetXTitle("E (GeV)");
     outputContainer->Add(fhELambda0) ; 
+
+    
+    fhELambda0FracMaxCellCut  = new TH2F
+    ("hELambda0FracMaxCellCut","Selected #pi^{0} pairs: E vs #lambda_{0}, Max cell fraction of energy < 0.5",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax); 
+    fhELambda0FracMaxCellCut->SetYTitle("#lambda_{0}^{2}");
+    fhELambda0FracMaxCellCut->SetXTitle("E (GeV)");
+    outputContainer->Add(fhELambda0FracMaxCellCut) ; 
+
+    fhEFracMaxCell  = new TH2F
+    ("hEFracMaxCell","Selected #pi^{0} pairs: E vs #lambda_{0}, Max cell fraction of energy",nptbins,ptmin,ptmax,100,0,1); 
+    fhEFracMaxCell->SetYTitle("Fraction");
+    fhEFracMaxCell->SetXTitle("E (GeV)");
+    outputContainer->Add(fhEFracMaxCell) ; 
+
+    if(fCalorimeter=="EMCAL"){
+      fhELambda0NoTRD  = new TH2F
+      ("hELambda0NoTRD","Selected #pi^{0} pairs: E vs #lambda_{0}, not behind TRD",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax); 
+      fhELambda0NoTRD->SetYTitle("#lambda_{0}^{2}");
+      fhELambda0NoTRD->SetXTitle("E (GeV)");
+      outputContainer->Add(fhELambda0NoTRD) ; 
+      
+      fhEFracMaxCellNoTRD  = new TH2F
+      ("hEFracMaxCellNoTRD","Selected #pi^{0} pairs: E vs #lambda_{0}, Max cell fraction of energy, not behind TRD",nptbins,ptmin,ptmax,100,0,1); 
+      fhEFracMaxCellNoTRD->SetYTitle("Fraction");
+      fhEFracMaxCellNoTRD->SetXTitle("E (GeV)");
+      outputContainer->Add(fhEFracMaxCellNoTRD) ; 
+    }
     
     fhELambda1  = new TH2F
     ("hELambda1","Selected #pi^{0} pairs: E vs #lambda_{1}",nptbins,ptmin,ptmax,ssbins,ssmin,ssmax); 
@@ -234,6 +266,29 @@ TList *  AliAnaPi0EbE::GetCreateOutputObjects()
           fhEMCLambda0[i]->SetXTitle("E (GeV)");
           outputContainer->Add(fhEMCLambda0[i]) ; 
           
+          if(fCalorimeter=="EMCAL"){
+            fhEMCLambda0NoTRD[i]  = new TH2F(Form("hELambda0NoTRD_MC%s",pname[i].Data()),
+                                             Form("Selected pair, cluster from %s : E vs #lambda_{0}^{2}, NoTRD",ptype[i].Data()),
+                                             nptbins,ptmin,ptmax,ssbins,ssmin,ssmax); 
+            fhEMCLambda0NoTRD[i]->SetYTitle("#lambda_{0}^{2}");
+            fhEMCLambda0NoTRD[i]->SetXTitle("E (GeV)");
+            outputContainer->Add(fhEMCLambda0NoTRD[i]) ; 
+          }
+          
+          fhEMCLambda0FracMaxCellCut[i]  = new TH2F(Form("hELambda0FracMaxCellCut_MC%s",pname[i].Data()),
+                                                    Form("Selected pair, cluster from %s : E vs #lambda_{0}^{2}, Max cell fraction of energy < 0.5 ",ptype[i].Data()),
+                                                    nptbins,ptmin,ptmax,ssbins,ssmin,ssmax); 
+          fhEMCLambda0FracMaxCellCut[i]->SetYTitle("#lambda_{0}^{2}");
+          fhEMCLambda0FracMaxCellCut[i]->SetXTitle("E (GeV)");
+          outputContainer->Add(fhEMCLambda0FracMaxCellCut[i]) ; 
+          
+          fhEMCFracMaxCell[i]  = new TH2F(Form("hEFracMaxCell_MC%s",pname[i].Data()),
+                                          Form("Selected pair, cluster from %s : E vs Max cell fraction of energy",ptype[i].Data()),
+                                          nptbins,ptmin,ptmax,100,0,1); 
+          fhEMCFracMaxCell[i]->SetYTitle("Fraction");
+          fhEMCFracMaxCell[i]->SetXTitle("E (GeV)");
+          outputContainer->Add(fhEMCFracMaxCell[i]) ;           
+
           fhEMCLambda1[i]  = new TH2F(Form("hELambda1_MC%s",pname[i].Data()),
                                       Form("Selected pair, cluster from %s : E vs #lambda_{1}^{2}",ptype[i].Data()),
                                       nptbins,ptmin,ptmax,ssbins,ssmin,ssmax); 
@@ -446,7 +501,7 @@ void  AliAnaPi0EbE::MakeInvMassInCalorimeter()
       }
       
       //Select good pair (good phi, pt cuts, aperture and invariant mass)
-      if(GetNeutralMesonSelection()->SelectPair(mom1, mom2))
+      if(GetNeutralMesonSelection()->SelectPair(mom1, mom2,fCalorimeter))
       {
         if(GetDebug()>1) 
           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());
@@ -497,6 +552,21 @@ void  AliAnaPi0EbE::MakeInvMassInCalorimeter()
         
         //Fill some histograms about shower shape
         if(clusters && GetReader()->GetDataType()!=AliCaloTrackReader::kMC){
+          
+          AliVCaloCells * cell = 0x0; 
+          if(fCalorimeter == "PHOS") 
+            cell = GetPHOSCells();
+          else                       
+            cell = GetEMCALCells();
+          
+          Float_t maxCellFraction1 = 0;
+          Float_t maxCellFraction2 = 0;
+          GetCaloUtils()->GetMaxEnergyCell(cell, cluster1, maxCellFraction1);
+          GetCaloUtils()->GetMaxEnergyCell(cell, cluster2, maxCellFraction2);
+          //printf("frac1 %f, frac2 %f\n",maxCellFraction1,maxCellFraction2);
+          fhEFracMaxCell->Fill(e1,maxCellFraction1);  
+          fhEFracMaxCell->Fill(e2,maxCellFraction2);  
+          
           //Photon1 
           
           //printf("Signal Cl1: e %f, pt %f, disp %f, l1 %f, l0 %f, eta %f, phi %f \n",
@@ -505,6 +575,15 @@ void  AliAnaPi0EbE::MakeInvMassInCalorimeter()
           fhEDispersion->Fill(e1, disp1);   
           fhELambda0   ->Fill(e1, l01  );  
           fhELambda1   ->Fill(e1, l11  );  
+          //printf("SM1 %d SM2 %d\n",GetModuleNumber(cluster2),GetModuleNumber(cluster1));
+
+          if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster1) < 6) {
+            fhELambda0NoTRD->Fill(e1, l01  );
+            fhEFracMaxCellNoTRD->Fill(e1,maxCellFraction1);  
+          }
+          
+          if(maxCellFraction1 < 0.5) 
+            fhELambda0FracMaxCellCut->Fill(e1, l01  );  
           
           //Photon2
           //printf("Signal Cl2: e %f, pt %f, disp %f, l1 %f, l0 %f, eta %f, phi %f \n",e
@@ -513,6 +592,12 @@ void  AliAnaPi0EbE::MakeInvMassInCalorimeter()
           fhEDispersion->Fill(e2, disp2);   
           fhELambda0   ->Fill(e2, l02  ); 
           fhELambda1   ->Fill(e2, l12  ); 
+          if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster2) < 6) {
+            fhELambda0NoTRD->Fill(e2, l02  );
+            fhEFracMaxCellNoTRD->Fill(e2,maxCellFraction2);  
+          }
+          if(maxCellFraction2 < 0.5) 
+            fhELambda0FracMaxCellCut->Fill(e2, l02  );  
           
           if(IsDataMC()) {
             //Photon1
@@ -520,65 +605,127 @@ void  AliAnaPi0EbE::MakeInvMassInCalorimeter()
               fhEMCLambda0[mcPi0]    ->Fill(e1, l01);
               fhEMCLambda1[mcPi0]    ->Fill(e1, l11);
               fhEMCDispersion[mcPi0] ->Fill(e1, disp1);
+              
+              fhEMCFracMaxCell[mcPi0]->Fill(e1,maxCellFraction1);  
+              if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster1) < 6) 
+                fhEMCLambda0NoTRD[mcPi0]->Fill(e1, l01  );
+              if(maxCellFraction1 < 0.5) 
+                fhEMCLambda0FracMaxCellCut[mcPi0]->Fill(e1, l01  );  
+              
             }//pi0
             else if  ( GetMCAnalysisUtils()->CheckTagBit(tag1,AliMCAnalysisUtils::kMCEta)  ){
               fhEMCLambda0[mcEta]    ->Fill(e1, l01);
               fhEMCLambda1[mcEta]    ->Fill(e1, l11);
               fhEMCDispersion[mcEta] ->Fill(e1, disp1);
+              fhEMCFracMaxCell[mcEta]->Fill(e1,maxCellFraction1);  
+              if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster1) < 6) 
+                fhEMCLambda0NoTRD[mcEta]->Fill(e1, l01  );
+              if(maxCellFraction1 < 0.5) 
+                fhEMCLambda0FracMaxCellCut[mcEta]->Fill(e1, l01  );  
             }//eta          
             else if  ( GetMCAnalysisUtils()->CheckTagBit(tag1,AliMCAnalysisUtils::kMCPhoton) &&
-                       GetMCAnalysisUtils()->CheckTagBit(tag1,AliMCAnalysisUtils::kMCConversion) ){
+                      GetMCAnalysisUtils()->CheckTagBit(tag1,AliMCAnalysisUtils::kMCConversion) ){
               fhEMCLambda0[mcConversion]    ->Fill(e1, l01);
               fhEMCLambda1[mcConversion]    ->Fill(e1, l11);
               fhEMCDispersion[mcConversion] ->Fill(e1, disp1);
+              fhEMCFracMaxCell[mcConversion]->Fill(e1,maxCellFraction1);  
+              if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster1) < 6) 
+                fhEMCLambda0NoTRD[mcConversion]->Fill(e1, l01  );
+              if(maxCellFraction1 < 0.5) 
+                fhEMCLambda0FracMaxCellCut[mcConversion]->Fill(e1, l01  );  
             }//conversion photon
             else if( GetMCAnalysisUtils()->CheckTagBit(tag1,AliMCAnalysisUtils::kMCPhoton) ){
               fhEMCLambda0[mcPhoton]    ->Fill(e1, l01);
               fhEMCLambda1[mcPhoton]    ->Fill(e1, l11);
               fhEMCDispersion[mcPhoton] ->Fill(e1, disp1);
+              fhEMCFracMaxCell[mcPhoton]->Fill(e1,maxCellFraction1);  
+              if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster1) < 6) 
+                fhEMCLambda0NoTRD[mcPhoton]->Fill(e1, l01  );
+              if(maxCellFraction1 < 0.5) 
+                fhEMCLambda0FracMaxCellCut[mcPhoton]->Fill(e1, l01  );  
             }//photon   no conversion
             else if  ( GetMCAnalysisUtils()->CheckTagBit(tag1,AliMCAnalysisUtils::kMCElectron)){
               fhEMCLambda0[mcElectron]    ->Fill(e1, l01);
               fhEMCLambda1[mcElectron]    ->Fill(e1, l11);
               fhEMCDispersion[mcElectron] ->Fill(e1, disp1);
+              fhEMCFracMaxCell[mcElectron]->Fill(e1,maxCellFraction1);  
+              if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster1) < 6) 
+                fhEMCLambda0NoTRD[mcElectron]->Fill(e1, l01  );
+              if(maxCellFraction1 < 0.5) 
+                fhEMCLambda0FracMaxCellCut[mcElectron]->Fill(e1, l01  );  
             }//electron
             else {
               fhEMCLambda0[mcHadron]    ->Fill(e1, l01);
               fhEMCLambda1[mcHadron]    ->Fill(e1, l11);
               fhEMCDispersion[mcHadron] ->Fill(e1, disp1);
+              fhEMCFracMaxCell[mcHadron]->Fill(e1,maxCellFraction1);  
+              if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster1) < 6) 
+                fhEMCLambda0NoTRD[mcHadron]->Fill(e1, l01  );
+              if(maxCellFraction1 < 0.5) 
+                fhEMCLambda0FracMaxCellCut[mcHadron]->Fill(e1, l01  );  
             }//other particles 
             
             //Photon 2
             if  ( GetMCAnalysisUtils()->CheckTagBit(tag2,AliMCAnalysisUtils::kMCPi0)  ){
-                 fhEMCLambda0[mcPi0]    ->Fill(e2, l02);
-                 fhEMCLambda1[mcPi0]    ->Fill(e2, l12);
-                 fhEMCDispersion[mcPi0] ->Fill(e2, disp2);
+              fhEMCLambda0[mcPi0]    ->Fill(e2, l02);
+              fhEMCLambda1[mcPi0]    ->Fill(e2, l12);
+              fhEMCDispersion[mcPi0] ->Fill(e2, disp2);
+              fhEMCFracMaxCell[mcPi0]->Fill(e2,maxCellFraction2);  
+              if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster2) < 6) 
+                fhEMCLambda0NoTRD[mcPi0]->Fill(e2, l02  );
+              if(maxCellFraction2 < 0.5) 
+                fhEMCLambda0FracMaxCellCut[mcPi0]->Fill(e2, l02  );  
             }//pi0
             else if  ( GetMCAnalysisUtils()->CheckTagBit(tag2,AliMCAnalysisUtils::kMCEta)  ){
               fhEMCLambda0[mcEta]    ->Fill(e2, l02);
               fhEMCLambda1[mcEta]    ->Fill(e2, l12);
               fhEMCDispersion[mcEta] ->Fill(e2, disp2);
+              fhEMCFracMaxCell[mcEta]->Fill(e2,maxCellFraction2);  
+              if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster2) < 6) 
+                fhEMCLambda0NoTRD[mcEta]->Fill(e2, l02  );
+              if(maxCellFraction2 < 0.5) 
+                fhEMCLambda0FracMaxCellCut[mcEta]->Fill(e2, l02  );  
             }//eta            
             else if  ( GetMCAnalysisUtils()->CheckTagBit(tag2,AliMCAnalysisUtils::kMCConversion) && 
-                       GetMCAnalysisUtils()->CheckTagBit(tag2,AliMCAnalysisUtils::kMCPhoton) ){
-                 fhEMCLambda0[mcConversion]    ->Fill(e2, l02);
-                 fhEMCLambda1[mcConversion]    ->Fill(e2, l12);
-                 fhEMCDispersion[mcConversion] ->Fill(e2, disp2);
+                      GetMCAnalysisUtils()->CheckTagBit(tag2,AliMCAnalysisUtils::kMCPhoton) ){
+              fhEMCLambda0[mcConversion]    ->Fill(e2, l02);
+              fhEMCLambda1[mcConversion]    ->Fill(e2, l12);
+              fhEMCDispersion[mcConversion] ->Fill(e2, disp2);
+              fhEMCFracMaxCell[mcConversion]->Fill(e2,maxCellFraction2);  
+              if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster2) < 6) 
+                fhEMCLambda0NoTRD[mcConversion]->Fill(e2, l02  );
+              if(maxCellFraction2 < 0.5) 
+                fhEMCLambda0FracMaxCellCut[mcConversion]->Fill(e2, l02  );  
             }//conversion photon
             else if( GetMCAnalysisUtils()->CheckTagBit(tag2,AliMCAnalysisUtils::kMCPhoton) ){              
-                fhEMCLambda0[mcPhoton]    ->Fill(e2, l02);
-                fhEMCLambda1[mcPhoton]    ->Fill(e2, l12);
-                fhEMCDispersion[mcPhoton] ->Fill(e2, disp2);
+              fhEMCLambda0[mcPhoton]    ->Fill(e2, l02);
+              fhEMCLambda1[mcPhoton]    ->Fill(e2, l12);
+              fhEMCDispersion[mcPhoton] ->Fill(e2, disp2);
+              fhEMCFracMaxCell[mcPhoton]->Fill(e2,maxCellFraction2);  
+              if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster2) < 6) 
+                fhEMCLambda0NoTRD[mcPhoton]->Fill(e2, l02  );
+              if(maxCellFraction2 < 0.5) 
+                fhEMCLambda0FracMaxCellCut[mcPhoton]->Fill(e2, l02  );  
             }//photon   no conversion
             else if  ( GetMCAnalysisUtils()->CheckTagBit(tag2,AliMCAnalysisUtils::kMCElectron)){
               fhEMCLambda0[mcElectron]    ->Fill(e2, l02);
               fhEMCLambda1[mcElectron]    ->Fill(e2, l12);
               fhEMCDispersion[mcElectron] ->Fill(e2, disp2);
+              fhEMCFracMaxCell[mcElectron]->Fill(e2,maxCellFraction2);  
+              if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster2) < 6) 
+                fhEMCLambda0NoTRD[mcElectron]->Fill(e2, l02  );
+              if(maxCellFraction2 < 0.5) 
+                fhEMCLambda0FracMaxCellCut[mcElectron]->Fill(e2, l02  );  
             }//electron
             else {
               fhEMCLambda0[mcHadron]    ->Fill(e2, l02);
               fhEMCLambda1[mcHadron]    ->Fill(e2, l12);
               fhEMCDispersion[mcHadron] ->Fill(e2, disp2);
+              fhEMCFracMaxCell[mcHadron]->Fill(e2,maxCellFraction2);  
+              if(fCalorimeter=="EMCAL" && GetModuleNumber(cluster2) < 6) 
+                fhEMCLambda0NoTRD[mcHadron]->Fill(e2, l02  );
+              if(maxCellFraction2 < 0.5) 
+                fhEMCLambda0FracMaxCellCut[mcHadron]->Fill(e2, l02  );  
             }//other particles 
           }//is datamc
         }//MC histograms
@@ -646,7 +793,7 @@ void  AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS()
       //if(photon1->GetInputFileIndex() == photon2->GetInputFileIndex()) input = photon1->GetInputFileIndex();
       
       //Select good pair (good phi, pt cuts, aperture and invariant mass)
-      if(GetNeutralMesonSelection()->SelectPair(mom1, mom2)){
+      if(GetNeutralMesonSelection()->SelectPair(mom1, mom2,fCalorimeter)){
         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()){
index 55758c0d1e6e913118ed1256b48299a3bae42ed6..ecac2fba274ae17edca8d1c87a8f448d9ee0ea38 100755 (executable)
@@ -76,7 +76,8 @@ class AliAnaPi0EbE : public AliAnaPartCorrBaseClass {
                   fMinDist = m1; fMinDist2 = m2; fMinDist3 = m3                              ; }
 
   //For histograms
-  enum mcTypes   {mcPhoton = 0, mcConversion = 1, mcPi0 = 2,  mcEta = 3, mcElectron = 4, mcHadron = 5};
+  enum mcTypes   { mcPhoton = 0, mcConversion = 1, mcPi0    = 2,  
+                   mcEta    = 3, mcElectron   = 4, mcHadron = 5 };
 
  private:
   
@@ -101,7 +102,11 @@ class AliAnaPi0EbE : public AliAnaPartCorrBaseClass {
   TH2F         * fhEDispersion ;           //! E vs disp of pi0 pairs
   TH2F         * fhELambda0 ;              //! E vs lambda0 of pi0 pairs 
   TH2F         * fhELambda1 ;              //! E vs lambda1 of pi0 pairs 
-  
+  TH2F         * fhELambda0NoTRD ;         //! E vs lambda0 of pi0 pairs, not behind TRD 
+  TH2F         * fhELambda0FracMaxCellCut ;//! E vs lambda0 of pi0 pairs, fraction of cluster energy in max cell cut 
+  TH2F         * fhEFracMaxCell ;          //! E vs frac max cell of cluster  
+  TH2F         * fhEFracMaxCellNoTRD ;     //! E vs frac max cell of cluster, not behind TRD  
+
   TH2F         * fhClusterPairDiffTimeE;   //! Pair of clusters time difference vs E
   TH2F         * fhClusterPairDiffTimeAsy; //! Pair of clusters time difference vs Asymmetry
   
@@ -110,6 +115,9 @@ class AliAnaPi0EbE : public AliAnaPartCorrBaseClass {
   TH2F         * fhEMCLambda0[6] ;         //! E vs lambda0 of pi0 pairs but really from MC particle
   TH2F         * fhEMCLambda1[6] ;         //! E vs lambda1 of pi0 pairs but really from MC particle
   TH2F         * fhEMCDispersion[6] ;      //! E vs dispersion of pi0 pairs but really from MC particle
+  TH2F         * fhEMCLambda0NoTRD[6] ;         //! E vs lambda0 of pi0 pairs but really from MC particle, not behind TRD
+  TH2F         * fhEMCLambda0FracMaxCellCut[6] ;//! E vs lambda0 of pi0 pairs but really from MC particle, fraction of cluster energy in max cell cut
+  TH2F         * fhEMCFracMaxCell[6] ;     //! E vs fraction of max cell 
   
   TH1F         * fhPtMCNoPi0;              //! Number of identified pi0, not coming from pi0
   TH2F         * fhPhiMCNoPi0;             //! Phi of identified pi0, not coming from pi0