X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWG%2FCaloTrackCorrBase%2FAliCaloPID.h;h=b652d1be4fbf81700565c126c8cb9a45272073d0;hb=ffac87af5e7ea2fc1a29a168dbad6f4fb7be42a1;hp=76dcf24703aa5a3727cdf915c142e97e14debc92;hpb=4914e781a66e156fb3b515cc79a42713410712a6;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWG/CaloTrackCorrBase/AliCaloPID.h b/PWG/CaloTrackCorrBase/AliCaloPID.h index 76dcf24703a..b652d1be4fb 100755 --- a/PWG/CaloTrackCorrBase/AliCaloPID.h +++ b/PWG/CaloTrackCorrBase/AliCaloPID.h @@ -48,7 +48,7 @@ class AliCaloPID : public TObject { public: AliCaloPID() ; // ctor - AliCaloPID(const Int_t particleFlux) ; // ctor, to be used when recalculating bayesian PID + AliCaloPID(Int_t particleFlux) ; // ctor, to be used when recalculating bayesian PID AliCaloPID(const TNamed * emcalpid) ; // ctor, to be used when recalculating bayesian PID and need different parameters virtual ~AliCaloPID() ;//virtual dtor @@ -73,16 +73,17 @@ class AliCaloPID : public TObject { void InitParameters(); - Bool_t IsInPi0SplitAsymmetryRange(const Float_t energy, const Float_t asy, const Int_t nlm); + Bool_t IsInPi0SplitAsymmetryRange(Float_t energy, Float_t asy, Int_t nlm) const; - Bool_t IsInPi0SplitMassRange (const Float_t energy, const Float_t mass, const Int_t nlm); + Bool_t IsInPi0SplitMassRange (Float_t energy, Float_t mass, Int_t nlm) const; - Bool_t IsInPi0M02Range (const Float_t energy, const Float_t m02, const Int_t nlm); - Bool_t IsInEtaM02Range (const Float_t energy, const Float_t m02, const Int_t nlm); - Bool_t IsInConM02Range (const Float_t energy, const Float_t m02, const Int_t nlm); + Bool_t IsInM02Range (Float_t m02) const; + Bool_t IsInPi0M02Range (Float_t energy, Float_t m02, Int_t nlm) const; + Bool_t IsInEtaM02Range (Float_t energy, Float_t m02, Int_t nlm) const; + Bool_t IsInConM02Range (Float_t energy, Float_t m02, Int_t nlm) const; - Int_t GetIdentifiedParticleTypeFromBayesWeights(const Bool_t isEMCAL, const Double_t * pid, const Float_t energy) ; + Int_t GetIdentifiedParticleTypeFromBayesWeights(Bool_t isEMCAL, Double_t * pid, Float_t energy) ; Int_t GetIdentifiedParticleTypeFromClusterSplitting(AliVCluster * cluster, AliVCaloCells* cells, AliCalorimeterUtils * caloutils, @@ -91,9 +92,9 @@ class AliCaloPID : public TObject { TLorentzVector & l1 , TLorentzVector & l2, Int_t & absId1, Int_t & absId2, Float_t & distbad1, Float_t & distbad2, - Bool_t & fidcut1, Bool_t & fidcut2 ) ; + Bool_t & fidcut1, Bool_t & fidcut2 ) const; - Int_t GetIdentifiedParticleType(const AliVCluster * cluster) ; + Int_t GetIdentifiedParticleType(AliVCluster * cluster) ; TString GetPIDParametersList(); @@ -108,11 +109,11 @@ class AliCaloPID : public TObject { //Check if cluster photon-like. Uses photon cluster parameterization in real pp data //Returns distance in sigmas. Recommended cut 2.5 - Float_t TestPHOSDispersion(const Double_t pt, const Double_t m20, const Double_t m02) const ; + Float_t TestPHOSDispersion(Double_t pt, Double_t m20, Double_t m02) const ; //Checks distance to the closest track. Takes into account //non-perpendicular incidence of tracks. - Float_t TestPHOSChargedVeto(const Double_t dx, const Double_t dz, const Double_t ptTrack, - const Int_t chargeTrack, const Double_t mf) const ; + Float_t TestPHOSChargedVeto(Double_t dx, Double_t dz, Double_t ptTrack, + Int_t chargeTrack, Double_t mf) const ; // Setters, getters @@ -203,9 +204,6 @@ class AliCaloPID : public TObject { // Cluster splitting analysis - void SwitchOnClusterSplittingPID() { fDoClusterSplitting = kTRUE ; } - void SwitchOffClusterplittingPID() { fDoClusterSplitting = kFALSE ; } - void SwitchOnSimpleSplitMassCut() { fUseSimpleMassCut = kTRUE ; } void SwitchOffSimpleSplitMassCut() { fUseSimpleMassCut = kFALSE ; } @@ -214,17 +212,23 @@ class AliCaloPID : public TObject { void SwitchOnSplitAsymmetryCut() { fUseSplitAsyCut = kTRUE ; } void SwitchOffSplitAsymmetryCut() { fUseSplitAsyCut = kFALSE ; } - + Bool_t IsSplitAsymmetryCutOn() { return fUseSplitAsyCut ; } + void SwitchOnSplitShowerShapeCut() { fUseSplitSSCut = kTRUE ; } void SwitchOffSplitShowerShapeCut() { fUseSplitSSCut = kFALSE ; } + Bool_t IsSplitShowerShapeCutOn() { return fUseSplitSSCut ; } void SetClusterSplittingM02Cut(Float_t min=0, Float_t max=100) { fSplitM02MinCut = min ; fSplitM02MaxCut = max ; } - void SetClusterSplittingMinNCells(Int_t cut) { fSplitMinNCells = cut ; } + void SetClusterSplittingMinNCells(Int_t c) { fSplitMinNCells = c ; } + Int_t GetClusterSplittingMinNCells() const { return fSplitMinNCells ; } - 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 ; } + 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 ; } + + void SetSubClusterEnergyMinimum (Int_t i, Float_t min){ if (i < 3 && i >=0 ) fSubClusterEMin[i] = min ; } + Float_t GetSubClusterEnergyMinimum (Int_t i) const { if( i < 3 && i >=0 ) return fSubClusterEMin[i]; else return 0 ; } Float_t GetPi0MinMass() const { return fMassPi0Min ; } // Simple cut case Float_t GetEtaMinMass() const { return fMassEtaMin ; } // Simple cut case @@ -234,13 +238,25 @@ class AliCaloPID : public TObject { Float_t GetPhotonMaxMass() const { return fMassPhoMax ; } void SetSplitWidthSigma(Float_t s) { fSplitWidthSigma = s ; } - void SetPi0MassWidthSelectionParameters (Int_t iparam, Float_t param) { if(iparam < 7 ) fMassWidthPi0Param[iparam] = param ; } + + void SetPi0MassShiftHighECell(Float_t s) { fMassShiftHighECell = s ; } + + void SetPi0MassSelectionParameters (Int_t inlm, Int_t iparam, Float_t param) + { if(iparam < 6 ) fMassPi0Param[inlm][iparam] = param ; } + + void SetPi0WidthSelectionParameters (Int_t inlm, Int_t iparam, Float_t param) + { if(iparam < 6 ) fWidthPi0Param[inlm][iparam] = param ; } + void SetM02MaximumSelectionParameters (Int_t inlm, Int_t iparam, Float_t param) - { if(iparam < 6 && inlm < 2) fM02MaxParam[inlm][iparam] = param ; } + { if(iparam < 5 && inlm < 2) fM02MaxParam[inlm][iparam] = param ; } + + void SetM02MaximumShiftForNLMN(Int_t shift) { fM02MaxParamShiftNLMN = shift ; } + void SetM02MinimumSelectionParameters (Int_t inlm, Int_t iparam, Float_t param) - { if(iparam < 6 && inlm < 2) fM02MinParam[inlm][iparam] = param ; } + { if(iparam < 5 && inlm < 2) fM02MinParam[inlm][iparam] = param ; } + void SetAsymmetryMinimumSelectionParameters(Int_t inlm, Int_t iparam, Float_t param) - { if(iparam < 6 && inlm < 2) fAsyMinParam[inlm][iparam] = param ; } + { if(iparam < 4 && inlm < 2) fAsyMinParam[inlm][iparam] = param ; } void SetPi0MassRange(Float_t min, Float_t max) { fMassPi0Min = min ; fMassPi0Max = max ; } // Simple case void SetEtaMassRange(Float_t min, Float_t max) { fMassEtaMin = min ; fMassEtaMax = max ; } @@ -285,7 +301,6 @@ private: Float_t fPHOSRCut; // Track-Cluster distance cut for track matching in PHOS // Cluster splitting mass ranges - Bool_t fDoClusterSplitting; // Cluster splitting analysis Bool_t fUseSimpleMassCut; // Use simple min-max pi0 mass cut Bool_t fUseSimpleM02Cut; // Use simple min-max M02 cut Bool_t fUseSplitAsyCut ; // Remove splitted clusters with too large asymmetry @@ -299,20 +314,22 @@ private: Float_t fMassPi0Max ; // Min Pi0 mass // simple cut case Float_t fMassPhoMin ; // Min Photon mass Float_t fMassPhoMax ; // Min Photon mass - Float_t fMassWidthPi0Param[7] ; // 3 param for pol2 fit on width, 2 param for mass position NLM=1 and NLM>1 for pi0 selection - 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 fMassPi0Param [2][6] ; // mean mass param, 2 regions in energy + Float_t fWidthPi0Param[2][6] ; // width param, 2 regions in energy + Float_t fM02MinParam[2][5] ; // 5 param for expo + pol fit on M02 minimum for pi0 selection (maximum for conversions) + Float_t fM02MaxParam[2][5] ; // 5 param for expo + pol fit on M02 maximum for pi0 selection + Float_t fM02MaxParamShiftNLMN; // shift of max M02 for NLM>2 + Float_t fAsyMinParam[2][4] ; // 3 param for fit on asymmetry minimum, for 2 cases, NLM=1 and NLM>=2 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 fSubClusterEMin[3] ; // Do not use sub-clusters with too low energy depeding on NLM Float_t fSplitWidthSigma; // Cut on mass+-width*fSplitWidthSigma + Float_t fMassShiftHighECell; // Shift cuts 5 MeV for Ecell > 150 MeV, default Ecell > 50 MeV - - AliCaloPID & operator = (const AliCaloPID & cpid) ; // cpy assignment AliCaloPID( const AliCaloPID & cpid) ; // cpy ctor - ClassDef(AliCaloPID,18) + ClassDef(AliCaloPID,22) } ;