f962070df618f020d706f4285f76b5e417da7c78
[u/mrichter/AliRoot.git] / STEER / STEERBase / AliTOFPIDResponse.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 //-----------------------------------------------------------------//
17 //                                                                 //
18 //           Implementation of the TOF PID class                   //
19 //      Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch         //
20 //                                                                 //
21 //-----------------------------------------------------------------//
22
23 #include "TMath.h"
24 #include "AliLog.h"
25
26 #include "AliTOFPIDResponse.h"
27
28 ClassImp(AliTOFPIDResponse)
29
30 //_________________________________________________________________________
31 AliTOFPIDResponse::AliTOFPIDResponse(): 
32   fSigma(0),
33   fPmax(0),         // zero at 0.5 GeV/c for pp
34   fTime0(0)
35 {
36   fPar[0] = 0.008;
37   fPar[1] = 0.008;
38   fPar[2] = 0.002;
39   fPar[3] = 40.0;
40
41   // Reset T0 info
42   ResetT0info();
43   SetMomBoundary();
44 }
45 //_________________________________________________________________________
46 AliTOFPIDResponse::AliTOFPIDResponse(Double_t *param):
47   fSigma(param[0]),
48   fPmax(0),          // zero at 0.5 GeV/c for pp
49   fTime0(0)
50 {
51   //
52   //  The main constructor
53   //
54   //
55
56   //fPmax=TMath::Exp(-0.5*3*3)/fSigma; // ~3 sigma at 0.5 GeV/c for PbPb 
57
58   fPar[0] = 0.008;
59   fPar[1] = 0.008;
60   fPar[2] = 0.002;
61   fPar[3] = 40.0;
62
63   // Reset T0 info
64   ResetT0info();
65   SetMomBoundary();
66 }
67 //_________________________________________________________________________
68 Double_t 
69 AliTOFPIDResponse::GetMismatchProbability(Double_t p, Double_t mass) const {
70   //
71   // Returns the probability of mismatching 
72   // assuming 1/(p*beta)^2 scaling
73   //
74   const Double_t km=0.5;                   // "reference" momentum (GeV/c)
75
76   Double_t ref2=km*km*km*km/(km*km + mass*mass);// "reference" (p*beta)^2
77   Double_t p2beta2=p*p*p*p/(p*p + mass*mass);
78
79   return fPmax*ref2/p2beta2;
80 }
81 //_________________________________________________________________________
82 Double_t AliTOFPIDResponse::GetExpectedSigma(Float_t mom, Float_t time, Float_t mass) const {
83   //
84   // Return the expected sigma of the PID signal for the specified
85   // particle type.
86   // If the operation is not possible, return a negative value.
87   //
88
89   Double_t dpp=fPar[0] + fPar[1]*mom + fPar[2]*mass/mom;      //mean relative pt resolution;
90
91  
92   Double_t sigma = dpp*time/(1.+ mom*mom/(mass*mass));
93   
94   Int_t index = GetMomBin(mom);
95
96   Double_t t0res = fT0resolution[index];
97
98   return TMath::Sqrt(sigma*sigma + fPar[3]*fPar[3]/mom/mom + fSigma*fSigma + t0res*t0res);
99
100 }
101 //_________________________________________________________________________
102 Int_t AliTOFPIDResponse::GetMomBin(Float_t p) const{
103   //
104   // Returns the momentum bin index
105   //
106
107   Int_t i=0;
108   while(p > fPCutMin[i] && i < fNmomBins) i++;
109   if(i > 0) i--;
110
111   return i;
112 }
113 //_________________________________________________________________________
114 void AliTOFPIDResponse::SetMomBoundary(){
115   //
116   // Set boundaries for momentum bins
117   //
118
119   fPCutMin[0] = 0.3;
120   fPCutMin[1] = 0.5;
121   fPCutMin[2] = 0.6;
122   fPCutMin[3] = 0.7;
123   fPCutMin[4] = 0.8;
124   fPCutMin[5] = 0.9;
125   fPCutMin[6] = 1;
126   fPCutMin[7] = 1.2;
127   fPCutMin[8] = 1.5;
128   fPCutMin[9] = 2;
129   fPCutMin[10] = 3;  
130 }
131 //_________________________________________________________________________
132 Float_t AliTOFPIDResponse::GetStartTime(Float_t mom) const {
133   //
134   // Returns event_time value as estimated by TOF combinatorial algorithm
135   //
136
137   Int_t ibin = GetMomBin(mom);
138   return GetT0bin(ibin);
139
140 }
141 //_________________________________________________________________________
142 Float_t AliTOFPIDResponse::GetStartTimeRes(Float_t mom) const {
143   //
144   // Returns event_time resolution as estimated by TOF combinatorial algorithm
145   //
146
147   Int_t ibin = GetMomBin(mom);
148   return GetT0binRes(ibin);
149
150 }
151 //_________________________________________________________________________
152 Int_t AliTOFPIDResponse::GetStartTimeMask(Float_t mom) const {
153   //
154   // Returns event_time mask
155   //
156
157   Int_t ibin = GetMomBin(mom);
158   return GetT0binMask(ibin);
159
160 }