* add tuned on data functionality for TOF (non-gaussian tails)
[u/mrichter/AliRoot.git] / STEER / STEERBase / AliTOFPIDResponse.h
1 #ifndef ALITOFPIDRESPONSE_H
2 #define ALITOFPIDRESPONSE_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 //-------------------------------------------------------
8 //                    TOF PID class
9 //   Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch 
10 //-------------------------------------------------------
11
12 #include "TObject.h"
13 #include "AliPID.h"
14 #include "AliVParticle.h"
15 #include "AliVTrack.h"
16
17 class AliTOFPIDParams;
18 class TF1;
19
20 class AliTOFPIDResponse : public TObject {
21 public:
22
23   AliTOFPIDResponse();
24   AliTOFPIDResponse(Double_t *param);
25   ~AliTOFPIDResponse(){}
26
27   void     SetTimeResolution(Float_t res) { fSigma = res; }
28   void     SetTimeZero(Double_t t0) { fTime0=t0; }
29   Double_t GetTimeZero() const { return fTime0; }
30
31   void     SetMaxMismatchProbability(Double_t p) {fPmax=p;}
32   Double_t GetMaxMismatchProbability() const {return fPmax;}
33
34   Double_t GetExpectedSigma(Float_t mom, Float_t tof, Float_t massZ) const;
35   Double_t GetExpectedSigma(Float_t mom, Float_t tof, AliPID::EParticleType type) const;
36   Double_t GetExpectedSignal(const AliVTrack *track, AliPID::EParticleType type) const;
37
38   Double_t GetMismatchProbability(Double_t p,Double_t mass) const;
39
40   Double_t GetTailRandomValue() const; // generate a random value to add a tail to TOF time (for MC analyses)
41
42   void     SetT0event(Float_t *t0event){for(Int_t i=0;i < fNmomBins;i++) fT0event[i] = t0event[i];};
43   void     SetT0resolution(Float_t *t0resolution){for(Int_t i=0;i < fNmomBins;i++) fT0resolution[i] = t0resolution[i];};
44   void     ResetT0info(){ for(Int_t i=0;i < fNmomBins;i++){ fT0event[i] = 0.0; fT0resolution[i] = 0.0; fMaskT0[i] = 0;} };
45   void     SetMomBoundary();
46   Int_t    GetMomBin(Float_t p) const;
47   Int_t    GetNmomBins(){return fNmomBins;};
48   Float_t  GetMinMom(Int_t ibin) const {if(ibin >=0 && ibin < fNmomBins) return fPCutMin[ibin]; else return 0.0;}; // overrun static array - coverity
49   Float_t  GetMaxMom(Int_t ibin) const {if(ibin >=0 && ibin < fNmomBins) return fPCutMin[ibin+1]; else return 0.0;}; // overrun static array - coverity
50   void     SetT0bin(Int_t ibin,Float_t t0bin){if(ibin >=0 && ibin < fNmomBins) fT0event[ibin] = t0bin;}; // overrun static array - coverity
51   void     SetT0binRes(Int_t ibin,Float_t t0binRes){if(ibin >=0 && ibin < fNmomBins) fT0resolution[ibin] = t0binRes;}; // overrun static array - coverity
52   void     SetT0binMask(Int_t ibin,Int_t t0binMask){if(ibin >=0 && ibin < fNmomBins) fMaskT0[ibin] = t0binMask;}; // overrun static array - coverity
53   Float_t  GetT0bin(Int_t ibin) const {if(ibin >=0 && ibin < fNmomBins) return fT0event[ibin]; else return 0.0;}; // overrun static array - coverity
54   Float_t  GetT0binRes(Int_t ibin) const {if(ibin >=0 && ibin < fNmomBins) return fT0resolution[ibin]; else return 0.0;}; // overrun static array - coverity
55   Int_t    GetT0binMask(Int_t ibin) const {if(ibin >=0 && ibin < fNmomBins) return fMaskT0[ibin]; else return 0;}; // overrun static array - coverity
56
57   // Get Start Time for a track
58   Float_t  GetStartTime(Float_t mom) const;
59   Float_t  GetStartTimeRes(Float_t mom) const;
60   Int_t    GetStartTimeMask(Float_t mom) const;
61
62   // Tracking resolution for expected times
63   void SetTrackParameter(Int_t ip,Float_t value){if(ip>=0 && ip < 4) fPar[ip] = value;};
64   Float_t GetTrackParameter(Int_t ip){if(ip>=0 && ip < 4) return fPar[ip]; else return -1.0;};
65
66  private:
67   Double_t fSigma;        // intrinsic TOF resolution
68
69   // obsolete
70   Double_t fPmax;         // "maximal" probability of mismathing (at ~0.5 GeV/c)
71   Double_t fTime0;        // time zero
72   //--------------
73
74   // About event time (t0) info
75   static const Int_t fNmomBins = 10; // number of momentum bin 
76   Float_t fT0event[fNmomBins];    // t0 (best, T0, T0-TOF, ...) of the event as a function of p 
77   Float_t fT0resolution[fNmomBins]; // t0 (best, T0, T0-TOF, ...) resolution as a function of p 
78   Float_t fPCutMin[fNmomBins+1]; // min values for p bins
79   Int_t fMaskT0[fNmomBins]; // mask withthe T0 used (0x1=T0-TOF,0x2=T0A,0x3=TOC) for p bins
80   Float_t fPar[4]; // parameter for expected times resolution
81
82   static TF1 *fTOFtailResponse; // function to generate a TOF tail
83
84   ClassDef(AliTOFPIDResponse,5)   // TOF PID class
85 };
86
87 #endif