Moving the classes that belong to the following libraries: STEERBase, ESD, CDB, AOD...
[u/mrichter/AliRoot.git] / STEER / STEERBase / AliTPCPIDResponse.h
1 #ifndef ALITPCPIDRESPONSE_H
2 #define ALITPCPIDRESPONSE_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 //-------------------------------------------------------
7 //                    TPC PID class
8 // A very naive design... Should be made better by the detector experts...
9 //   Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch 
10 // With many additions and modifications suggested by
11 //      Alexander Kalweit, GSI, alexander.philipp.kalweit@cern.ch
12 //      Dariusz Miskowiec, GSI, D.Miskowiec@gsi.de
13 //-------------------------------------------------------
14 #include <Rtypes.h>
15 #include <TObjArray.h>
16
17 #include "AliPID.h"
18
19 class AliTPCPIDResponse {
20 public:
21   AliTPCPIDResponse();
22   AliTPCPIDResponse(const Double_t *param);
23   virtual ~AliTPCPIDResponse() {}
24   void SetSigma(Float_t res0, Float_t resN2);
25   void SetBetheBlochParameters(Double_t kp1,
26                                Double_t kp2,
27                                Double_t kp3,
28                                Double_t kp4,
29                                Double_t kp5
30                                );
31   void SetMip(Float_t mip) { fMIP = mip; } // Set overall normalisation; mean dE/dx for MIP
32   Double_t Bethe(Double_t bg) const;
33   void SetUseDatabase(Bool_t useDatabase) { fUseDatabase = useDatabase;}
34   
35   void SetResponseFunction(AliPID::EParticleType type, TObject * const o) { fResponseFunctions.AddAt(o,(Int_t)type); }
36   const TObject * GetResponseFunction(AliPID::EParticleType type) { return fResponseFunctions.At((Int_t)type); }
37   
38   Double_t GetExpectedSignal(const Float_t mom,
39                      AliPID::EParticleType n=AliPID::kKaon) const;
40   Double_t GetExpectedSigma(const Float_t mom, const Int_t nPoints,
41                      AliPID::EParticleType n=AliPID::kKaon) const;
42   Float_t  GetNumberOfSigmas(const Float_t mom, const Float_t dEdx, 
43                              const Int_t nPoints,
44                      AliPID::EParticleType n=AliPID::kKaon) const {
45
46     Double_t bethe=GetExpectedSignal(mom,n);
47     Double_t sigma=GetExpectedSigma(mom,nPoints,n);
48     return (dEdx-bethe)/sigma;
49   }
50
51   Double_t GetMIP() const { return fMIP;} 
52 private:
53   Float_t fMIP;          // dEdx for MIP
54   Float_t fRes0;         // relative dEdx resolution  rel sigma = fRes0*sqrt(1+fResN2/npoint)
55   Float_t fResN2;        // relative Npoint dependence rel  sigma = fRes0*sqrt(1+fResN2/npoint)
56
57   Double_t fKp1;   // Parameters
58   Double_t fKp2;   //    of
59   Double_t fKp3;   // the ALEPH
60   Double_t fKp4;   // Bethe-Bloch
61   Double_t fKp5;   // formula
62
63   Bool_t fUseDatabase; // flag if fine-tuned database-response or simple ALEPH BB should be used
64   TObjArray fResponseFunctions; //! ObjArray of response functions individually for each particle
65
66   ClassDef(AliTPCPIDResponse,3)   // TPC PID class
67 };
68
69 #endif
70
71