#ifndef ALIEMCALPIDUTILS_H
#define ALIEMCALPIDUTILS_H
#include "TNamed.h"
class TArrayD ;
#include "AliPID.h"
class AliEMCALPIDUtils : public TNamed {
public:
AliEMCALPIDUtils();
void ComputePID(Double_t energy, Double_t lambda0);
void InitParameters();
void SetLowFluxParam();
void SetHighFluxParam();
TArrayD DistLambda0(const Double_t energy, const Int_t nature) ;
Double_t DistEnergy(const Double_t energy, const Int_t nature) ;
Double_t GetPID(Int_t idx) const {if (idx>=0&&idx<3) return fPID[idx]; else return 0.;}
Double_t GetPIDFinal(Int_t idx) const {if (idx>=0&&idx<AliPID::kSPECIESCN) return fPIDFinal[idx]; else return 0.;}
Double_t GetPIDWeight(Int_t idx) const {if (idx>=0&&idx<3) return fPIDWeight[idx]; else return 0.;}
void SetPID(Double_t val, Int_t idx) {if (idx>=0&&idx<3) fPID[idx] = val;}
void SetPIDFinal(Double_t val, Int_t idx) {if (idx>=0&&idx<AliPID::kSPECIESCN) fPIDFinal[idx] = val;}
void SetPIDWeight(Double_t val, Int_t idx) {if (idx>=0&&idx<3) fPIDWeight[idx] = val;}
void SetPrintInfo(Bool_t yesno) {fPrintInfo = yesno;}
private:
Double_t Polynomial(const Double_t x, const Double_t *params) const ;
Double_t Polynomialinv(const Double_t x, const Double_t *params) const ;
Double_t PolynomialMixed1(const Double_t x, const Double_t *params) const ;
Double_t PolynomialMixed2(const Double_t x, const Double_t *params) const ;
Double_t Polynomial0(const Double_t *params) const ;
Double_t PowerExp(const Double_t x, const Double_t *params) const ;
protected:
Bool_t fPrintInfo;
Double_t fGamma[6][6];
Double_t fGamma1to10[6][6];
Double_t fHadron[6][6];
Double_t fHadron1to10[6][6];
Double_t fPiZero[6][6];
Double_t fHadronEnergyProb[6];
Double_t fPiZeroEnergyProb[6];
Double_t fGammaEnergyProb[6];
Float_t fPID[3];
Float_t fPIDFinal[AliPID::kSPECIESCN+1];
Float_t fPIDWeight[3];
Double_t fProbGamma;
Double_t fProbPiZero;
Double_t fProbHadron;
Double_t fWeightHadronEnergy;
Double_t fWeightGammaEnergy;
Double_t fWeightPiZeroEnergy;
ClassDef(AliEMCALPIDUtils, 2)
};
#endif // ALIEMCALPIDUTILS_H