Avoid message E-TClonesArray::At: during digitization due to try to access non existi...
[u/mrichter/AliRoot.git] / EMCAL / AliEMCALPIDUtils.h
1 #ifndef ALIEMCALPIDUTILS_H
2 #define ALIEMCALPIDUTILS_H
3
4 /* $Id: AliEMCALPIDUtils.h 33808 2009-07-15 09:48:08Z gconesab $ */
5
6 ///////////////////////////////////////////////////////////////////////////////
7 // Class AliEMCALPIDUtils
8 // Compute PID weights for all the clusters
9 ///////////////////////////////////////////////////////////////////////////////
10
11 //Root includes
12 #include "TTask.h"
13 class TArrayD ;
14
15 //AliRoot includes
16 #include "AliPID.h" 
17
18 class AliEMCALPIDUtils : public TTask {
19
20 public:
21   
22   AliEMCALPIDUtils();
23 /*   AliEMCALPIDUtils(Bool_t reconstructor); */
24   //virtual ~AliEMCALPIDUtils() { }
25   
26   void     ComputePID(Double_t energy, Double_t lambda0); // give the PID of a cluster
27
28   void     InitParameters();
29   void     SetLowFluxParam();
30   void     SetHighFluxParam();
31
32   TArrayD  DistLambda0(const Double_t energy, const Int_t nature) ; // compute lambda0 distributions
33   
34   Double_t DistEnergy(const Double_t energy, const Int_t nature) ;
35
36   Double_t GetPID(Int_t idx) const {if (idx>=0&&idx<3) return fPID[idx]; else return 0.;}
37   Double_t GetPIDFinal(Int_t idx) const {if (idx>=0&&idx<AliPID::kSPECIESN) return fPIDFinal[idx]; else return 0.;}
38   Double_t GetPIDWeight(Int_t idx) const {if (idx>=0&&idx<3) return fPIDWeight[idx]; else return 0.;}
39   
40   void    SetPID(Double_t val, Int_t idx) {if (idx>=0&&idx<3) fPID[idx] = val;}
41   void    SetPIDFinal(Double_t val, Int_t idx) {if (idx>=0&&idx<AliPID::kSPECIESN) fPIDFinal[idx] = val;}
42   void    SetPIDWeight(Double_t val, Int_t idx) {if (idx>=0&&idx<3) fPIDWeight[idx] = val;}
43   void    SetPrintInfo(Bool_t yesno) {fPrintInfo = yesno;}
44         
45         
46         
47  private:
48   
49   Double_t Polynomial(const Double_t x, const Double_t *params) const ;
50   Double_t Polynomialinv(const Double_t x, const Double_t *params) const ;
51   Double_t PolynomialMixed1(const Double_t x, const Double_t *params) const ;
52   Double_t PolynomialMixed2(const Double_t x, const Double_t *params) const ;
53   Double_t Polynomial0(const Double_t *params) const ;
54   Double_t PowerExp(const Double_t x, const Double_t *params) const ;
55         
56 protected:      
57   Bool_t   fPrintInfo;          // flag to decide if details about PID must be printed
58   
59   Double_t fGamma[6][6];            // Parameter to Compute PID for photons
60   Double_t fGamma1to10[6][6];       // Parameter to Compute PID not used
61   Double_t fHadron[6][6];               // Parameter to Compute PID for hadrons, 1 to 10 GeV
62   Double_t fHadron1to10[6][6];      // Parameter to Compute PID for hadrons, 1 to 10 GeV
63   Double_t fPiZero[6][6];           // Parameter to Compute PID for pi0
64   Double_t fHadronEnergyProb[6];        // Parameter to Compute PID for energy ponderation for hadrons           
65   Double_t fPiZeroEnergyProb[6];        // Parameter to Compute PID for energy ponderation for Pi0       
66   Double_t fGammaEnergyProb[6];         // Parameter to Compute PID for energy ponderation for gamma     
67    
68   Float_t fPID[3];
69   
70   Float_t  fPIDFinal[AliPID::kSPECIESN+1]; // final PID format
71   Float_t  fPIDWeight[3];                  // order: gamma, pi0, hadrons,
72   Double_t fProbGamma;                    // probility to be a Gamma
73   Double_t fProbPiZero;                   // probility to be a PiO
74   Double_t fProbHadron;                   // probility to be a Hadron
75   Double_t fWeightHadronEnergy;           // Weight for a  a Hadron to have a given energy  (parametr from a flat distrib from 0 to 100)
76   Double_t fWeightGammaEnergy;            // Weight for a  Gamma to have a given energy  (for the moment =1.)
77   Double_t fWeightPiZeroEnergy;           // Weight for a Pi0 Hadron to have a given energy (for the moment =1.)
78   
79   ClassDef(AliEMCALPIDUtils, 1)
80
81 };
82
83 #endif // ALIEMCALPIDUTILS_H
84
85