]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
add cut on split fraction dependent on NLM, and min E cut, depending on NLM
authorgconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 Apr 2013 10:32:34 +0000 (10:32 +0000)
committergconesab <gconesab@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 11 Apr 2013 10:32:34 +0000 (10:32 +0000)
PWG/CaloTrackCorrBase/AliCaloPID.cxx
PWG/CaloTrackCorrBase/AliCaloPID.h
PWGGA/CaloTrackCorrelations/AliAnaInsideClusterInvariantMass.cxx
PWGGA/CaloTrackCorrelations/AliAnaPi0EbE.cxx
PWGGA/CaloTrackCorrelations/AliAnaPi0EbE.h

index 6f393980b943e152afdf7688f4534772f60c3a30..cfe078727c09d6dec4ba46d1ff364c47f27885bc 100755 (executable)
@@ -86,7 +86,7 @@ fSplitM02MaxCut(0),       fSplitM02MinCut(0),          fSplitMinNCells(0),
 fMassEtaMin(0),           fMassEtaMax(0),
 fMassPi0Min(0),           fMassPi0Max(0),
 fMassPhoMin(0),           fMassPhoMax(0),
-fSplitEFracMin(0),        fSplitWidthSigma(0)
+fSplitWidthSigma(0)
 {
   //Ctor
   
@@ -120,7 +120,7 @@ fSplitM02MaxCut(0),       fSplitM02MinCut(0),          fSplitMinNCells(0),
 fMassEtaMin(0),           fMassEtaMax(0),
 fMassPi0Min(0),           fMassPi0Max(0),
 fMassPhoMin(0),           fMassPhoMax(0),
-fSplitEFracMin(0),        fSplitWidthSigma(0)
+fSplitWidthSigma(0)
 {
   //Ctor
        
@@ -156,7 +156,7 @@ fSplitM02MaxCut(0),       fSplitM02MinCut(0),          fSplitMinNCells(0),
 fMassEtaMin(0),           fMassEtaMax(0),
 fMassPi0Min(0),           fMassPi0Max(0),
 fMassPhoMin(0),           fMassPhoMax(0),
-fSplitEFracMin(0),        fSplitWidthSigma(0)
+fSplitWidthSigma(0)
 
 {
   //Ctor
@@ -303,7 +303,10 @@ void AliCaloPID::InitParameters()
 //  fAsyMinParam[1][3] = 0.0000377; // pol3 param2 for NLM>2 , E < 25 GeV, PbPb
 
   
-  fSplitEFracMin   = 0. ; // no effect
+  fSplitEFracMin[0]   = 0.0 ; // 0.96
+  fSplitEFracMin[1]   = 0.0 ; // 0.96
+  fSplitEFracMin[2]   = 0.0 ; // 0.7
+
   fSplitWidthSigma = 3. ;
   
 }
@@ -649,7 +652,7 @@ Int_t AliCaloPID::GetIdentifiedParticleTypeFromClusterSplitting(AliVCluster* clu
   Float_t m02    = cluster->GetM02();
   const Int_t nc = cluster->GetNCells();
   Int_t   absIdList[nc]; 
-  Float_t maxEList [nc]; 
+  Float_t maxEList [nc];
   
   mass  = -1.;
   angle = -1.;
@@ -756,7 +759,10 @@ Int_t AliCaloPID::GetIdentifiedParticleTypeFromClusterSplitting(AliVCluster* clu
   e2    = cluster2.E();
     
   // Consider clusters with splitted energy not too different to original cluster energy
-  if((e1+e2)/eClus < fSplitEFracMin) return kNeutralUnknown ;
+  Float_t splitFracCut = 0;
+  if(nMax < 3)  splitFracCut = fSplitEFracMin[nMax-1];
+  else          splitFracCut = fSplitEFracMin[2];
+  if((e1+e2)/eClus < splitFracCut) return kNeutralUnknown ;
   
   if(fDebug > 0) printf("\t pass Split E frac cut\n");
     
index df28734d238dc9e1c440fbc98f0b75e249da0f1f..a457c12f8e6df0137cbe69d18b2542acd9c038b0 100755 (executable)
@@ -217,8 +217,8 @@ class AliCaloPID : public TObject {
   
   void    SetClusterSplittingMinNCells(Int_t cut)   { fSplitMinNCells = cut   ; }
   
-  void    SetSplitEnergyFractionMinimum(Float_t min){ fSplitEFracMin  = min   ; }
-  Float_t GetSplitEnergyFractionMinimum() const     { return fSplitEFracMin   ; }
+  void    SetSplitEnergyFractionMinimum(Int_t i, Float_t min){ if (i < 3 && i >=0 ) fSplitEFracMin[i]  = min   ; }
+  Float_t GetSplitEnergyFractionMinimum(Int_t i) const       { if( i < 3 && i >=0 ) return fSplitEFracMin[i]   ;  else return 0 ; }
   
   Float_t GetPi0MinMass()                const { return fMassPi0Min           ; } // Simple cut case
   Float_t GetEtaMinMass()                const { return fMassEtaMin           ; } // Simple cut case
@@ -296,8 +296,8 @@ private:
   Float_t   fM02MinParam[2][6] ;                // 4 param for pol3 fit on M02 minimum for pi0 selection (maximum for conversions)
   Float_t   fM02MaxParam[2][6] ;                // 4 param for pol3 fit on M02 maximum for pi0 selection
   Float_t   fAsyMinParam[2][6] ;                // 4 param for pol3 fit on asymmetry minimum, for 2 cases, NLM=1 and NLM>=2
-  Float_t   fSplitEFracMin  ;                   // Do not use clusters with too large energy in cluster compared 
-                                                // to energy in splitted clusters
+  Float_t   fSplitEFracMin[3]  ;                // Do not use clusters with too large energy in cluster compared
+                                                // to energy in splitted clusters, depeding on NLM
   Float_t   fSplitWidthSigma;                   // Cut on mass+-width*fSplitWidthSigma
 
 
index 9b96d6c8f1c968a9a1aa06d4e028ad1805cc196e..b46a4ad53f6e9d39740da751462329ee40b1c5b6 100755 (executable)
@@ -1768,6 +1768,11 @@ void  AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms()
     
     fhNLocMax[0][matched]->Fill(en,nMax);
     
+    Int_t inlm = -1;
+    if     (nMax == 1) inlm = 0;
+    else if(nMax == 2) inlm = 1;
+    else if(nMax > 2 ) inlm = 2;
+    
     if     ( nMax == 1  ) 
     { 
       fhM02NLocMax1[0][matched]->Fill(en,l0) ; 
@@ -2084,7 +2089,9 @@ void  AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms()
     
     fhNLocMaxM02Cut[0][matched]->Fill(en,nMax);
     if(IsDataMC()) fhNLocMaxM02Cut[mcindex][matched]->Fill(en,nMax);
-        
+    
+    Float_t splitFracMin = GetCaloPID()->GetSplitEnergyFractionMinimum(inlm) ;
+    
     if     (nMax==1) 
     { 
       fhMassNLocMax1[0][matched]->Fill(en,mass ); 
@@ -2092,20 +2099,20 @@ void  AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms()
       
       // Effect of cuts in mass histograms
 
-      if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum() && !matched)
+      if(!matched)
       {
-        fhMassSplitECutNLocMax1->Fill(en,mass );
         if(m02OK)
         {
           fhMassM02CutNLocMax1->Fill(en,mass);
           fhAsymM02CutNLocMax1->Fill(en,asym );
+          if(splitFrac > splitFracMin) fhMassSplitECutNLocMax1->Fill(en,mass );
         } // m02
       } // split frac
       
       if(m02OK && asyOK)
       {
         fhSplitEFractionAfterCutsNLocMax1[0][matched]->Fill(en,splitFrac);
-        if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum()) fhMassAfterCutsNLocMax1[0][matched]->Fill(en,mass);
+        if(splitFrac > splitFracMin) fhMassAfterCutsNLocMax1[0][matched]->Fill(en,mass);
         
         if(!matched && IsDataMC() && fFillMCFractionHisto && mcindex==kmcPi0)
         {
@@ -2152,20 +2159,20 @@ void  AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms()
       fhAsymNLocMax2[0][matched]->Fill(en,asym );
       
       // Effect of cuts in mass histograms
-      if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum() && !matched)
+      if(!matched)
       {
-        fhMassSplitECutNLocMax2->Fill(en,mass );
         if(m02OK)
         {
           fhMassM02CutNLocMax2->Fill(en,mass);
           fhAsymM02CutNLocMax2->Fill(en,asym );
+          if(splitFrac > splitFracMin) fhMassSplitECutNLocMax2->Fill(en,mass );
         } // m02
       } // split frac
       
       if(m02OK && asyOK)
       {
         fhSplitEFractionAfterCutsNLocMax2[0][matched]->Fill(en,splitFrac);
-        if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum()) fhMassAfterCutsNLocMax2[0][matched]->Fill(en,mass);
+        if(splitFrac >splitFracMin) fhMassAfterCutsNLocMax2[0][matched]->Fill(en,mass);
         
         if(!matched && IsDataMC() && fFillMCFractionHisto && mcindex==kmcPi0)
         {
@@ -2212,20 +2219,20 @@ void  AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms()
       fhAsymNLocMaxN[0][matched]->Fill(en,asym);
       
       // Effect of cuts in mass histograms
-      if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum() && !matched)
+      if(!matched)
       {
-        fhMassSplitECutNLocMaxN->Fill(en,mass );
         if(m02OK)
         {
           fhMassM02CutNLocMaxN->Fill(en,mass);
           fhAsymM02CutNLocMaxN->Fill(en,asym );
+          if(splitFrac > splitFracMin)fhMassSplitECutNLocMaxN->Fill(en,mass );
         } // m02
       } // split frac
       
       if(m02OK && asyOK)
       {
         fhSplitEFractionAfterCutsNLocMaxN[0][matched]->Fill(en,splitFrac);
-        if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum()) fhMassAfterCutsNLocMaxN[0][matched]->Fill(en,mass);
+        if(splitFrac > splitFracMin) fhMassAfterCutsNLocMaxN[0][matched]->Fill(en,mass);
         
         if(!matched && IsDataMC() && fFillMCFractionHisto && mcindex==kmcPi0)
         {
@@ -2278,7 +2285,7 @@ void  AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms()
         if(asyOK && m02OK)
         {
           fhSplitEFractionAfterCutsNLocMax1[mcindex][matched]->Fill(en,splitFrac);
-          if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum())
+          if(splitFrac > splitFracMin)
             fhMassAfterCutsNLocMax1[mcindex][matched]->Fill(en,mass);
         }
 
@@ -2297,7 +2304,7 @@ void  AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms()
         if(asyOK && m02OK)
         {
           fhSplitEFractionAfterCutsNLocMax2[mcindex][matched]->Fill(en,splitFrac);
-          if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum())
+          if(splitFrac >splitFracMin)
             fhMassAfterCutsNLocMax2[mcindex][matched]->Fill(en,mass);
         }
         
@@ -2317,7 +2324,7 @@ void  AliAnaInsideClusterInvariantMass::MakeAnalysisFillHistograms()
         if(asyOK && m02OK)
         {
           fhSplitEFractionAfterCutsNLocMaxN[mcindex][matched]->Fill(en,splitFrac);
-          if(splitFrac > GetCaloPID()->GetSplitEnergyFractionMinimum())
+          if(splitFrac > splitFracMin )
             fhMassAfterCutsNLocMaxN[mcindex][matched]->Fill(en,mass);
         }
         
index 1828d95d3ed72318652f9347ec4262a7cc2de8b3..0d16deb5aba7b4f4dddf0bae4582f54cf3c676b1 100755 (executable)
@@ -1647,6 +1647,10 @@ void AliAnaPi0EbE::InitParameters()
   fMinDist2 = 4.;
   fMinDist3 = 5.;
   
+  fNLMECutMin[0] = 10.;
+  fNLMECutMin[1] = 6. ;
+  fNLMECutMin[2] = 6. ;
+
 }
 
 //__________________________________________________________________
@@ -2104,6 +2108,10 @@ void  AliAnaPi0EbE::MakeShowerShapeIdentification()
       continue ;
     }
     
+    if(nMaxima == 1 && fNLMECutMin[0] > mom.E()) continue;
+    if(nMaxima == 2 && fNLMECutMin[1] > mom.E()) continue;
+    if(nMaxima >  2 && fNLMECutMin[2] > mom.E()) continue;
+    
     if(GetDebug() > 1)
       printf("AliAnaPi0EbE::MakeShowerShapeIdentification() - NLM %d accepted \n",nMaxima);
     
index 134b18ad1086a56fe5817fe21551c6d002ec26aa..bbd007b67ea58b7b0efede2adb5776f99f3c777a 100755 (executable)
@@ -88,7 +88,10 @@ class AliAnaPi0EbE : public AliAnaCaloTrackCorrBaseClass {
   Int_t          GetNLMCutMin()                        const { return fNLMCutMin               ; }
   Int_t          GetNLMCutMax()                        const { return fNLMCutMax               ; }     
   
-  void           SetTimeCut(Double_t min, Double_t max)      { fTimeCutMin = min; 
+  void           SetNLMMinEnergy(Int_t i, Float_t min)       { if (i < 3 && i >=0 ) fNLMECutMin[i]  = min   ; }
+  Float_t        GetNLMMinEnergy(Int_t i) const              { if( i < 3 && i >=0 ) return fNLMECutMin[i]   ;  else return 0 ; }
+
+  void           SetTimeCut(Double_t min, Double_t max)      { fTimeCutMin = min;
                                                                fTimeCutMax = max               ; }
   Double_t       GetTimeCutMin()                       const { return fTimeCutMin              ; }
   Double_t       GetTimeCutMax()                       const { return fTimeCutMax              ; }
@@ -109,6 +112,7 @@ class AliAnaPi0EbE : public AliAnaCaloTrackCorrBaseClass {
   void           SwitchOffOnlySimpleHistoFill()              { fFillOnlySimpleSSHisto = kFALSE ; }
 
   
+  
   //For histograms
   enum mcTypes   { kmcPhoton = 0, kmcConversion = 1, kmcPi0    = 2,  
                    kmcEta    = 3, kmcElectron   = 4, kmcHadron = 5 };
@@ -124,6 +128,8 @@ class AliAnaPi0EbE : public AliAnaCaloTrackCorrBaseClass {
   Float_t        fMinDist3;                // One more cut on distance used for acceptance-efficiency study
   Int_t          fNLMCutMin  ;             // Remove clusters/cells with number of local maxima smaller than this value
   Int_t          fNLMCutMax  ;             // Remove clusters/cells with number of local maxima larger than this value
+  Bool_t         fNLMECutMin[3] ;          // Minimum energy of the cluster, depending on nlm.
+
   Double_t       fTimeCutMin  ;            // Remove clusters/cells with time smaller than this value, in ns
   Double_t       fTimeCutMax  ;            // Remove clusters/cells with time larger than this value, in ns
   
@@ -133,6 +139,7 @@ class AliAnaPi0EbE : public AliAnaCaloTrackCorrBaseClass {
   Bool_t         fFillSelectClHisto;       // Fill selected cluster histograms
   Bool_t         fFillOnlySimpleSSHisto;   // Fill selected cluster histograms, selected SS histograms
 
+  
   //Only for combination of calorimeter and conversion photons, kIMCaloTracks
   TString        fInputAODGammaConvName;   //  Name of AOD branch with conversion photons
   
@@ -277,7 +284,7 @@ class AliAnaPi0EbE : public AliAnaCaloTrackCorrBaseClass {
   AliAnaPi0EbE(              const AliAnaPi0EbE & pi0ebe) ; // cpy ctor
   AliAnaPi0EbE & operator = (const AliAnaPi0EbE & pi0ebe) ; // cpy assignment
   
-  ClassDef(AliAnaPi0EbE,23)
+  ClassDef(AliAnaPi0EbE,24)
 } ;