ROOT logo
#ifndef ALIISOLATIONCUT_H
#define ALIISOLATIONCUT_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice     */

//_________________________________________________________________________
// Class containing methods for the isolation cut. 
// An AOD candidate (AliAODPWG4ParticleCorrelation type)
// is passed. Look in a cone around the candidate and study
// the hadronic activity inside to decide if the candidate is isolated
//
// -- Author: Gustavo Conesa (INFN-LNF)
//
// -- Yaxian Mao (add the possibility for different IC method with different pt range, 01/10/2010)

// --- ROOT system --- 
#include <TObject.h>
class TObjArray ;
#include <TLorentzVector.h>

// --- ANALYSIS system ---
class AliAODPWG4ParticleCorrelation ;
class AliCaloTrackReader ;
class AliCaloPID; 

class AliIsolationCut : public TObject {
  
 public: 
  
  AliIsolationCut() ;            // default ctor
  virtual ~AliIsolationCut() {;} // virtual dtor
 
  // Enums 
  
  enum type       { kPtThresIC, kSumPtIC, kPtFracIC, kSumPtFracIC, kSumDensityIC, kSumBkgSubIC } ;
  
  enum partInCone { kNeutralAndCharged=0, kOnlyNeutral=1, kOnlyCharged=2 } ;
	
  // Main Methods
  
  void       InitParameters() ;
  
  TString    GetICParametersList() ; 
  
  Float_t    GetCellDensity(  AliAODPWG4ParticleCorrelation * pCandidate, 
                              AliCaloTrackReader * reader) const ;

  void       MakeIsolationCut(TObjArray * plCTS, TObjArray * plNe, 
                              AliCaloTrackReader * reader, 
                              AliCaloPID * pid, 
                              Bool_t bFillAOD,
                              AliAODPWG4ParticleCorrelation  * pCandidate, TString aodObjArrayName,
                              Int_t &n, Int_t & nfrac, Float_t &ptSum, Float_t &ptLead, Bool_t & isolated) ;
  
  void       Print(const Option_t * opt) const ;
  
  Float_t    Radius(Float_t etaCandidate, Float_t phiCandidate, Float_t eta, Float_t phi) const ;
  
  // Cone background studies medthods
  
  Float_t    CalculateExcessAreaFraction(Float_t excess) const ;

  void       CalculateUEBandClusterNormalization(AliCaloTrackReader * reader,     Float_t   etaC, Float_t phiC,
                                                 Float_t   phiUEptsumCluster,     Float_t   etaUEptsumCluster,
                                                 Float_t & phiUEptsumClusterNorm, Float_t & etaUEptsumClusterNorm,
                                                 Float_t & excessFracEta,         Float_t & excessFracPhi              ) const ;
  
  void       CalculateUEBandTrackNormalization  (AliCaloTrackReader * reader,     Float_t   etaC,  Float_t phiC,
                                                 Float_t   phiUEptsumTrack,       Float_t   etaUEptsumTrack,
                                                 Float_t & phiUEptsumTrackNorm,   Float_t & etaUEptsumTrackNorm,
                                                 Float_t & excessFracEta,         Float_t & excessFracPhi              )   const ;

  void 	     GetCoeffNormBadCell(AliAODPWG4ParticleCorrelation * pCandidate,
                                 AliCaloTrackReader * reader,
                                 Float_t & coneBadCellsCoeff,
                                 Float_t & etaBandBadCellsCoeff  , Float_t & phiBandBadCellsCoeff) ;

  
  // Parameter setters and getters
  
  Float_t    GetConeSize()            const { return fConeSize       ; }
  Float_t    GetPtThreshold()         const { return fPtThreshold    ; }
  Float_t    GetPtThresholdMax()      const { return fPtThresholdMax ; }
  Float_t    GetSumPtThreshold()      const { return fSumPtThreshold ; }
  Float_t    GetSumPtThresholdMax()   const { return fSumPtThresholdMax ; }
  Float_t    GetPtFraction()          const { return fPtFraction     ; }
  Int_t      GetICMethod()            const { return fICMethod       ; }
  Int_t      GetParticleTypeInCone()  const { return fPartInCone     ; }
  Int_t      GetDebug()               const { return fDebug          ; }
  Bool_t     GetFracIsThresh()        const { return fFracIsThresh   ; }
	
  void       SetConeSize(Float_t r)         { fConeSize       = r    ; }
  void       SetPtThreshold(Float_t pt)     { fPtThreshold    = pt   ; }
  void       SetPtThresholdMax(Float_t pt)  { fPtThresholdMax = pt   ; }
  void       SetSumPtThreshold(Float_t s)   { fSumPtThreshold = s    ; }
  void       SetSumPtThresholdMax(Float_t s){ fSumPtThresholdMax = s ; }
  void       SetPtFraction(Float_t pt)      { fPtFraction     = pt   ; }
  void       SetICMethod(Int_t i )          { fICMethod       = i    ; }
  void       SetParticleTypeInCone(Int_t i) { fPartInCone     = i    ; }
  void       SetDebug(Int_t d)              { fDebug          = d    ; }
  void       SetFracIsThresh(Bool_t f )     { fFracIsThresh   = f    ; }
 private:
  
  Float_t    fConeSize ;         // Size of the isolation cone
  Float_t    fPtThreshold ;      // Mimium pt of the particles in the cone or sum in cone (UE pt mean in the forward region cone)
  Float_t    fPtThresholdMax ;   // Maximum pt of the particles outside the cone (needed to fit shower distribution isolated/non-isolated particles)
  Float_t    fSumPtThreshold ;   // Minimum of sum pt of the particles in the cone (UE sum in the forward region cone)
  Float_t    fSumPtThresholdMax ;// Maximum of sum pt of the particles in the cone (UE sum in the forward region cone)
  Float_t    fPtFraction ;       // Fraction of the momentum of particles in cone or sum in cone
  Int_t      fICMethod ;         // Isolation cut method to be used
                                 // kPtIC: Pt threshold method
                                 // kSumPtIC: Cone pt sum method
                                 // kPtFracIC:   Pt threshold, fraction of candidate pt, method
                                 // kSumPtFracIC:   Cone pt sum , fraction of cone sum, method
  Int_t      fPartInCone;        // Type of particles inside cone:
                                 // kNeutralAndCharged, kOnlyNeutral, kOnlyCharged

  Int_t      fDebug;             // Debug level
  Bool_t     fFracIsThresh;      // Use threshold instead of fraction when pt leading is small
  
  TLorentzVector fMomentum;      //! momentum of cluster
  TVector3       fTrackVector;   //! track moment
  
  AliIsolationCut(              const AliIsolationCut & g) ; // cpy ctor
  AliIsolationCut & operator = (const AliIsolationCut & g) ; // cpy assignment
  
  ClassDef(AliIsolationCut,9)
} ;


#endif //ALIISOLATIONCUT_H



 AliIsolationCut.h:1
 AliIsolationCut.h:2
 AliIsolationCut.h:3
 AliIsolationCut.h:4
 AliIsolationCut.h:5
 AliIsolationCut.h:6
 AliIsolationCut.h:7
 AliIsolationCut.h:8
 AliIsolationCut.h:9
 AliIsolationCut.h:10
 AliIsolationCut.h:11
 AliIsolationCut.h:12
 AliIsolationCut.h:13
 AliIsolationCut.h:14
 AliIsolationCut.h:15
 AliIsolationCut.h:16
 AliIsolationCut.h:17
 AliIsolationCut.h:18
 AliIsolationCut.h:19
 AliIsolationCut.h:20
 AliIsolationCut.h:21
 AliIsolationCut.h:22
 AliIsolationCut.h:23
 AliIsolationCut.h:24
 AliIsolationCut.h:25
 AliIsolationCut.h:26
 AliIsolationCut.h:27
 AliIsolationCut.h:28
 AliIsolationCut.h:29
 AliIsolationCut.h:30
 AliIsolationCut.h:31
 AliIsolationCut.h:32
 AliIsolationCut.h:33
 AliIsolationCut.h:34
 AliIsolationCut.h:35
 AliIsolationCut.h:36
 AliIsolationCut.h:37
 AliIsolationCut.h:38
 AliIsolationCut.h:39
 AliIsolationCut.h:40
 AliIsolationCut.h:41
 AliIsolationCut.h:42
 AliIsolationCut.h:43
 AliIsolationCut.h:44
 AliIsolationCut.h:45
 AliIsolationCut.h:46
 AliIsolationCut.h:47
 AliIsolationCut.h:48
 AliIsolationCut.h:49
 AliIsolationCut.h:50
 AliIsolationCut.h:51
 AliIsolationCut.h:52
 AliIsolationCut.h:53
 AliIsolationCut.h:54
 AliIsolationCut.h:55
 AliIsolationCut.h:56
 AliIsolationCut.h:57
 AliIsolationCut.h:58
 AliIsolationCut.h:59
 AliIsolationCut.h:60
 AliIsolationCut.h:61
 AliIsolationCut.h:62
 AliIsolationCut.h:63
 AliIsolationCut.h:64
 AliIsolationCut.h:65
 AliIsolationCut.h:66
 AliIsolationCut.h:67
 AliIsolationCut.h:68
 AliIsolationCut.h:69
 AliIsolationCut.h:70
 AliIsolationCut.h:71
 AliIsolationCut.h:72
 AliIsolationCut.h:73
 AliIsolationCut.h:74
 AliIsolationCut.h:75
 AliIsolationCut.h:76
 AliIsolationCut.h:77
 AliIsolationCut.h:78
 AliIsolationCut.h:79
 AliIsolationCut.h:80
 AliIsolationCut.h:81
 AliIsolationCut.h:82
 AliIsolationCut.h:83
 AliIsolationCut.h:84
 AliIsolationCut.h:85
 AliIsolationCut.h:86
 AliIsolationCut.h:87
 AliIsolationCut.h:88
 AliIsolationCut.h:89
 AliIsolationCut.h:90
 AliIsolationCut.h:91
 AliIsolationCut.h:92
 AliIsolationCut.h:93
 AliIsolationCut.h:94
 AliIsolationCut.h:95
 AliIsolationCut.h:96
 AliIsolationCut.h:97
 AliIsolationCut.h:98
 AliIsolationCut.h:99
 AliIsolationCut.h:100
 AliIsolationCut.h:101
 AliIsolationCut.h:102
 AliIsolationCut.h:103
 AliIsolationCut.h:104
 AliIsolationCut.h:105
 AliIsolationCut.h:106
 AliIsolationCut.h:107
 AliIsolationCut.h:108
 AliIsolationCut.h:109
 AliIsolationCut.h:110
 AliIsolationCut.h:111
 AliIsolationCut.h:112
 AliIsolationCut.h:113
 AliIsolationCut.h:114
 AliIsolationCut.h:115
 AliIsolationCut.h:116
 AliIsolationCut.h:117
 AliIsolationCut.h:118
 AliIsolationCut.h:119
 AliIsolationCut.h:120
 AliIsolationCut.h:121
 AliIsolationCut.h:122
 AliIsolationCut.h:123
 AliIsolationCut.h:124
 AliIsolationCut.h:125
 AliIsolationCut.h:126
 AliIsolationCut.h:127
 AliIsolationCut.h:128
 AliIsolationCut.h:129
 AliIsolationCut.h:130
 AliIsolationCut.h:131
 AliIsolationCut.h:132
 AliIsolationCut.h:133
 AliIsolationCut.h:134