move the decay bit definition from AliAnaPi0EbE to AliNeutralSelection, define there...
authorgconesab <gustavo.conesa.balbastre@cern.ch>
Thu, 21 Aug 2014 08:31:12 +0000 (10:31 +0200)
committergconesab <gustavo.conesa.balbastre@cern.ch>
Thu, 21 Aug 2014 13:20:29 +0000 (15:20 +0200)
PWG/CaloTrackCorrBase/AliNeutralMesonSelection.cxx
PWG/CaloTrackCorrBase/AliNeutralMesonSelection.h
PWGGA/CaloTrackCorrelations/AliAnaPi0EbE.cxx
PWGGA/CaloTrackCorrelations/AliAnaPi0EbE.h

index de3d3d2..b97642f 100755 (executable)
@@ -39,8 +39,9 @@ ClassImp(AliNeutralMesonSelection)
     fLeftBandMinCut(0.),   fLeftBandMaxCut(0.),            
     fRightBandMinCut(0.),  fRightBandMaxCut(0.),              
     fAngleMaxParam(),      fUseAngleCut(0),       
-    fKeepNeutralMesonHistos(0), fParticle(""),
-    // histograms 
+    fKeepNeutralMesonHistos(0),
+    fParticle(""),         fDecayBit(0),
+    // histograms
     fhAnglePairNoCut(0),          fhAnglePairOpeningAngleCut(0),   
     fhAnglePairAsymmetryCut(0),   fhAnglePairAllCut(0), 
     fhInvMassPairNoCut(0),        fhInvMassPairOpeningAngleCut(0), 
@@ -336,7 +337,8 @@ void  AliNeutralMesonSelection::SetParticle(TString particleName)
   // Set some default parameters for selection of pi0 or eta
 
   fParticle = particleName ;
-  
+  fDecayBit = kPi0;
+
   if(particleName.Contains("Pi0"))
   {
     fHistoNIMBins          = 150 ;
@@ -363,6 +365,9 @@ void  AliNeutralMesonSelection::SetParticle(TString particleName)
     fAngleMaxParam.AddAt(-1,    1) ;
     fAngleMaxParam.AddAt( 0.09, 2) ; //for pi0 shift, for eta maybe 0.09 
     fAngleMaxParam.AddAt(-2.e-3,3) ;
+    
+    fDecayBit = kPi0;
+    if(particleName.Contains("Side")) fDecayBit = kPi0Side;
   
   }  
   else if(particleName.Contains("Eta"))
@@ -389,14 +394,15 @@ void  AliNeutralMesonSelection::SetParticle(TString particleName)
     
     fAngleMaxParam.AddAt( 0.80,  0) ; // Same as pi0
     fAngleMaxParam.AddAt(-0.25,  1) ; // Same as pi0
-    fAngleMaxParam.AddAt( 0.12,  2) ;   // Shifted with respect to pi0
+    fAngleMaxParam.AddAt( 0.12,  2) ; // Shifted with respect to pi0
     fAngleMaxParam.AddAt(-5.e-4, 3) ; // Same as pi0
     
+    fDecayBit = kEta;
+    if(particleName.Contains("Side")) fDecayBit = kEtaSide;
   }
   else 
     printf("AliAnaNeutralMesonSelection::SetParticle(%s) *** Particle NOT defined (Pi0 or Eta), Pi0 settings by default *** \n",particleName.Data());
   
-  
 }
 
 //______________________________________________________________
@@ -409,7 +415,7 @@ void AliNeutralMesonSelection::Print(const Option_t * opt) const
   
   printf("**** Print %s %s ****\n", GetName(), GetTitle() ) ;
 
-  printf("Particle %s, mass : %f  \n", fParticle.Data(), fM );
+  printf("Particle %s, bit %d, mass : %f  \n", fParticle.Data(), fDecayBit, fM );
   printf("Invariant mass limits : %f < m < %f \n", fInvMassMinCut , fInvMassMinCut );
   
   printf("Use asymmetry cut? : %d ; A < %f \n", fUseAngleCut, fAsymmetryCut );
index 0460a2e..c5db998 100755 (executable)
@@ -40,7 +40,7 @@ class AliNeutralMesonSelection : public TObject {
   Bool_t   SelectPair(TLorentzVector particlei,  TLorentzVector particlej, TString calo)  ;
   
   void     SetParticle(TString particleName) ;  // Do some default settings for "Pi0" or "Eta"
-  TString  GetParticle()                          const { return    fParticle ; }
+  TString  GetParticle()                          const { return fParticle               ; }
   
   // Asymmetry selection
     
@@ -83,8 +83,37 @@ class AliNeutralMesonSelection : public TObject {
 
   Double_t GetMass()                              const { return fM                      ; }
   void     SetMass(Double_t m)                          { fM = m                         ; }
-      
-  //Histogrammes setters and getters
+  
+  
+  // Decay photon bit setting
+  
+  enum decayTypes { kPi0, kEta, kPi0Side, kEtaSide} ;
+
+  UInt_t    GetDecayBit()                         const { return fDecayBit               ; }
+  
+  void    SetDecayBit(Int_t &tag, UInt_t set) const {
+    // Set bit of type set (decayTypes) in tag
+    tag |= (1<<set) ;
+  }
+  
+  void    SetDecayBit(Int_t &tag) const {
+    // Set bit of type set (decayTypes) in tag
+    tag |= (1<<fDecayBit) ;
+  }
+  
+  Bool_t  CheckDecayBit(Int_t tag, UInt_t test) const {
+    // Check if in tag the bit test (decayTypes) is set.
+    if (tag & (1<<test) ) return  kTRUE ;
+    else return kFALSE ;
+  }
+
+  Bool_t  CheckDecayBit(Int_t tag) const {
+    // Check if in tag the bit test (decayTypes) is set.
+    if (tag & (1<<fDecayBit) ) return  kTRUE ;
+    else return kFALSE ;
+  }
+  
+  // Histograms setters and getters
   
   virtual void SetHistoERangeAndNBins(Float_t min, Float_t max, Int_t n) {
     fHistoNEBins = n ;
@@ -116,7 +145,6 @@ class AliNeutralMesonSelection : public TObject {
   Float_t GetHistoIMMin()      const { return fHistoIMMin      ; }
   Float_t GetHistoIMMax()      const { return fHistoIMMax      ; }
   
-  
  private:
   
   Float_t  fAsymmetryCut  ;               // Asymmetry cut
@@ -137,7 +165,9 @@ class AliNeutralMesonSelection : public TObject {
   Float_t  fShiftMinAngle[2] ;            // Correction shift for min angle from true kinematic limit, resolution effects
   
   Bool_t   fKeepNeutralMesonHistos ;      // Keep neutral meson selection histograms
+  
   TString  fParticle ;                    // neutral meson name (Pi0, Eta, +SideBand)
+  UInt_t   fDecayBit;                     // Decay type flag, set when fParticle is set
 
   //Histograms
   TH2F *   fhAnglePairNoCut ;             //! Aperture angle of decay photons, no cuts
@@ -170,7 +200,7 @@ class AliNeutralMesonSelection : public TObject {
   AliNeutralMesonSelection(              const AliNeutralMesonSelection & g) ; // cpy ctor
   AliNeutralMesonSelection & operator = (const AliNeutralMesonSelection & g) ; // cpy assignment
   
-  ClassDef(AliNeutralMesonSelection,7)
+  ClassDef(AliNeutralMesonSelection,8)
     
 } ;
 
index 53b977c..b5742a6 100755 (executable)
@@ -49,8 +49,7 @@ ClassImp(AliAnaPi0EbE)
 //____________________________
 AliAnaPi0EbE::AliAnaPi0EbE() :
 AliAnaCaloTrackCorrBaseClass(),
-fAnaType(kIMCalo),                  fDecayTag(0),
-fCalorimeter(""),
+fAnaType(kIMCalo),                  fCalorimeter(""),
 fMinDist(0.),fMinDist2(0.),         fMinDist3(0.),
 fNLMCutMin(-1),                     fNLMCutMax(10),
 fTimeCutMin(-10000),                fTimeCutMax(10000),
@@ -2553,25 +2552,6 @@ TList *  AliAnaPi0EbE::GetCreateOutputObjects()
     delete nmsHistos;
   }
   
-  // Set the flag of the decay clusters
-  if(fAnaType!=kSSCalo)
-  {
-    fDecayTag = kNone;
-    TString particle = GetNeutralMesonSelection()->GetParticle();
-    if(particle.Contains("Pi0"))
-    {
-      fDecayTag = kPi0;
-      if(particle.Contains("Side")) fDecayTag = kPi0Side;
-    }
-    else if(particle.Contains("Eta"))
-    {
-      fDecayTag = kEta;
-      if(particle.Contains("Side")) fDecayTag = kEtaSide;
-    }
-    else
-      printf("AliAnaPi0EbE::GetCreateOutputObjects() - Uknown particle %s\n",particle.Data());
-  }
-  
   return outputContainer ;
   
 }
@@ -2913,14 +2893,19 @@ void  AliAnaPi0EbE::MakeInvMassInCalorimeter()
         FillSelectedClusterHistograms(cluster2, mom2.Pt(), nMaxima2, photon2->GetTag());
       }
       
+      //
       // Tag both photons as decay if not done before
-      // Careful, if pi0, eta and side bands analysis
-      // run in pararel, the label can be overwritten
-      if( photon1->GetBtag() != fDecayTag ) // temporary
+      // set the corresponding bit for pi0 or eta or "side" case
+      //
+      Int_t bit1 = photon1->GetBtag(); // temporary
+      if( bit1 < 0 ) bit1 = 0 ; // temporary
+      if( !GetNeutralMesonSelection()->CheckDecayBit(bit1) )
       {
-        photon1->SetTagged(kTRUE);
-        photon1->SetBtag(fDecayTag); // temporary
+        photon1->SetTagged(kTRUE); // temporary
+        GetNeutralMesonSelection()->SetDecayBit(bit1);
+        photon1->SetBtag(bit1); // temporary
         fhPtDecay->Fill(photon1->Pt());
+        
         //Fill some histograms about shower shape
         if(fFillSelectClHisto && cluster1 && GetReader()->GetDataType()!=AliCaloTrackReader::kMC)
           FillSelectedClusterHistograms(cluster1, mom1.Pt(), nMaxima1, photon1->GetTag());
@@ -2932,10 +2917,13 @@ void  AliAnaPi0EbE::MakeInvMassInCalorimeter()
         }
       }
       
-      if( photon2->GetBtag() != fDecayTag ) // temporary
+      Int_t bit2 = photon2->GetBtag(); // temporary
+      if( bit2 < 0 ) bit2 = 0 ; // temporary
+      if( !GetNeutralMesonSelection()->CheckDecayBit(bit2) )
       {
-        photon2->SetTagged(kTRUE);
-        photon2->SetBtag(fDecayTag); // temporary
+        photon2->SetTagged(kTRUE); // temporary
+        GetNeutralMesonSelection()->SetDecayBit(bit2);
+        photon2->SetBtag(bit2); // temporary
         fhPtDecay->Fill(photon2->Pt());
         
         //Fill some histograms about shower shape
@@ -2947,7 +2935,6 @@ void  AliAnaPi0EbE::MakeInvMassInCalorimeter()
           Int_t mcIndex2 = GetMCIndex(photon2->GetTag());
           fhMCPtDecay[mcIndex2]->Fill(photon2->Pt());
         }
-        
       }
       
       //Mass of selected pairs
@@ -3097,38 +3084,44 @@ void  AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS()
       if(IsDataMC()) fhMCMassPt[mcIndex]->Fill(ptpair,mass);
 
       //
-      //Select good pair (good phi, pt cuts, aperture and invariant mass)
+      // Select good pair (good phi, pt cuts, aperture and invariant mass)
       //
       if(!GetNeutralMesonSelection()->SelectPair(mom1, mom2,fCalorimeter)) continue ;
       
       if(GetDebug() > 1) printf("AliAnaPi0EbE::MakeInvMassInCalorimeterAndCTS() - Selected gamma pair: pt %f, phi %f, eta%f\n",
                                 mom.Pt(), mom.Phi()*TMath::RadToDeg(), mom.Eta());
       
-      // Tag both photons as decay
-      // Careful, if pi0, eta and side bands analysis
-      // run in pararel, the label can be overwritten
-      if( photon1->GetBtag() != fDecayTag ) // temporary
+      //
+      // Tag both photons as decay if not done before
+      // set the corresponding bit for pi0 or eta or "side" case
+      //
+      Int_t bit1 = photon1->GetBtag(); // temporary
+      if( bit1 < 0 ) bit1 = 0 ; // temporary
+      if( !GetNeutralMesonSelection()->CheckDecayBit(bit1) )
       {
-        photon1->SetTagged(kTRUE);
-        photon1->SetBtag(fDecayTag); // temporary
-        
+        photon1->SetTagged(kTRUE); // temporary
+        GetNeutralMesonSelection()->SetDecayBit(bit1);
+        photon1->SetBtag(bit1); // temporary
         fhPtDecay->Fill(photon1->Pt());
         
+        //Fill some histograms about shower shape
+        if(fFillSelectClHisto && cluster && GetReader()->GetDataType()!=AliCaloTrackReader::kMC)
+          FillSelectedClusterHistograms(cluster, mom1.Pt(), nMaxima, photon1->GetTag());
+        
         if(IsDataMC())
         {
           Int_t mcIndex1 = GetMCIndex(photon1->GetTag());
           fhMCPtDecay[mcIndex1]->Fill(photon1->Pt());
         }
-        
-        //Fill some histograms about shower shape
-        if(fFillSelectClHisto && cluster && GetReader()->GetDataType()!=AliCaloTrackReader::kMC)
-          FillSelectedClusterHistograms(cluster, mom1.Pt(), nMaxima, photon1->GetTag());
       }
       
-      if( photon2->GetBtag() != fDecayTag ) // temporary
+      Int_t bit2 = photon2->GetBtag(); // temporary
+      if( bit2 < 0 ) bit2 = 0 ; // temporary
+      if( !GetNeutralMesonSelection()->CheckDecayBit(bit2) )
       {
-        photon2->SetTagged(kTRUE);
-        photon2->SetBtag(fDecayTag); // temporary
+        photon2->SetTagged(kTRUE); // temporary
+        GetNeutralMesonSelection()->SetDecayBit(bit2);
+        photon2->SetBtag(bit2); // temporary
       }
       
       //Mass of selected pairs
index dbc7baa..3d1c702 100755 (executable)
@@ -133,15 +133,11 @@ class AliAnaPi0EbE : public AliAnaCaloTrackCorrBaseClass {
   enum mcTypes   { kmcPi0Decay = 0, kmcEtaDecay = 1, kmcOtherDecay = 2,
                    kmcPi0      = 3, kmcEta      = 4, kmcElectron   = 5,
                    kmcHadron   = 6                                     };
-
-  enum decayTypes { kNone = 0, kPi0 = 1, kEta = 2, kPi0Side = 3 , kEtaSide = 4} ;
   
  private:
   
   anaTypes       fAnaType;                 // Select analysis type
-  
-  Int_t          fDecayTag;                // Decay type flag, stored in AOD SetBtag() temporarily
-  
+    
   //Only for pi0 SS identification case, kSSCalo
   TString        fCalorimeter ;            // Calorimeter where the gamma is searched;
   Float_t        fMinDist ;                // Minimal distance to bad channel to accept cluster