don't lie in the log!
[u/mrichter/AliRoot.git] / PWGPP / TPC / AliESDresolParams.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 //   ESD track and V0 resolution parameterization
19 //   
20 //             
21 //    Origin: Marian Ivanov marian.ivanov@cern.ch
22 //-------------------------------------------------------------------------
23
24 /*
25   The track parameter resolution is determined by the intrinsic detector
26   resolution and by the multiple scattering and fluctuation of the energy 
27   loss in the material.
28
29   The contribution from the intrinsic detector resolution is independent of
30   the particle momenta and the mass of particle. In the limit limit of infinite
31   momenta - zero curvature, the intrinsic detector resolution can be obtained.
32  
33   Multiple effect scaling:
34
35   SCATERING ANGLE   - fi, theta
36         sigma A   += sqrt(14.1*14.1/(beta2*p2*1e6)*TMath::Abs(xOverX0));
37         sigma A    ~ 1/p
38         sigma sfi  += sigma A *  sqrt((1-sfi^2) * (1+ tth^2))
39         sigma tth  += sigma A * (1+tth^2)    
40
41   MOMENTUM Pt: 
42         sigma 1/pt = sigma A  * 1/pt * tth
43         sigma 1/pt ~ (1/pt)^2
44   
45   POSITION y, z:        
46         sigma y   +~ sigma A * eff length (between update measurements) ~ 1/pt 
47         sigma z   +~ sigma A * eff length (between update measurements) ~ 1/pt
48   Example usage:
49     
50
51 */
52
53
54 #include "TVectorD.h"
55 #include "TMath.h"
56 #include "TObjArray.h"
57 #include "AliESDresolParams.h"
58
59
60 ClassImp(AliESDresolParams)
61
62
63  AliESDresolParams*    AliESDresolParams::fgInstance = 0x0; //! Instance of this class (singleton implementation)
64
65
66 AliESDresolParams::AliESDresolParams() :
67   TObject(),  
68   fResolDCAyy(0),            // resolution Y parameterization
69   fResolDCAzz(0),            // resolution Z parameterization   
70   fResolDCAphi(0),           // resolution phi parameterization - pt-theta
71   fResolDCAth(0),            // resolution theta parameterization -pt-theta
72   fResolDCA1pt(0),           // resolution 1/pt parameterization - pt-theta
73   //
74   fResolCyy(0),              // DCA resolution Y parameterization - r-pt
75   fResolCzz(0),              // DCA resolution Z parameterization - r-pt
76   fResolCphi(0),             // DCA resolution phi parameterization - r-pt
77   fResolCth(0),              // DCA resolution theta parameterization - r-pt
78   fResolC1pt(0)             // DCA resolution 1/pt parameterization - r-pt
79 {
80   //
81   // Default constructor
82   //
83 }
84
85 Double_t AliESDresolParams::GetResolPrimFast(Int_t param, Float_t onept, Float_t tanth) const {
86   //
87   // Resolution at primary vertex
88   // simple Resolution parameterization 
89   // polynom of second order in 2D 
90   // 
91   if (!fResolDCAyy) return 0;
92   TVectorD * pvec     = fResolDCAyy;
93   if (param==1)  pvec = fResolDCAzz;
94   if (param==2)  pvec = fResolDCAphi;
95   if (param==3)  pvec = fResolDCAth;
96   if (param==4)  pvec = fResolDCA1pt;
97   TVectorD &vec = *pvec;
98   //
99   Float_t val = vec[0];
100   val+= vec[1]*TMath::Abs(onept);
101   val+= vec[2]*TMath::Abs(onept*onept);
102   val+= vec[3]*TMath::Abs(tanth);
103   val+= vec[4]*TMath::Abs(tanth*tanth);
104   val+= vec[5]*TMath::Abs(onept*tanth);
105   Float_t shift1pt=0;
106   if (param==0 || param==1) shift1pt=0.2;
107   if (param==2 || param==3) shift1pt=0.1;
108   if (param==4)             shift1pt=1.;
109   val*= (onept+shift1pt);  
110   if (param==4) val*=(onept+shift1pt);
111   return val;
112 }
113
114 Double_t AliESDresolParams::GetResolRFast(Int_t param, Float_t onept, Float_t radius) const {
115   //
116   // simple DCA resolution parameterization
117   // polynom of second order in 2D 
118   // 
119   if (!fResolCyy) return 0;
120   TVectorD * pvec     = fResolCyy;
121   if (param==1)  pvec = fResolCzz;
122   if (param==2)  pvec = fResolCphi;
123   if (param==3)  pvec = fResolCth;
124   if (param==4)  pvec = fResolC1pt;
125   TVectorD &vec = *pvec;
126   //
127   Float_t val = vec[0];
128   val+= vec[1]*TMath::Abs(onept);
129   val+= vec[2]*TMath::Abs(radius);
130   val+= vec[3]*TMath::Abs(onept*onept);
131   val+= vec[4]*TMath::Abs(radius*radius);
132   val+= vec[5]*TMath::Abs(radius*onept);
133   val+= vec[6]*TMath::Abs(radius*radius*onept);
134   val*=val;
135   return val;
136 }
137
138 void AliESDresolParams::SetResolPrimFast(TObjArray* array){
139   //
140   // Set parameters - resolution at prim vertex
141   //
142   if (!array) return;  
143   if (array->At(0)) 
144     fResolDCAyy = new TVectorD(*((TVectorD*)array->At(0))); 
145   if (array->At(1)) 
146     fResolDCAzz = new TVectorD(*((TVectorD*)array->At(1))); 
147   if (array->At(2)) 
148     fResolDCAphi = new TVectorD(*((TVectorD*)array->At(2))); 
149   if (array->At(3)) 
150     fResolDCAth = new TVectorD(*((TVectorD*)array->At(3))); 
151   if (array->At(4)) 
152     fResolDCA1pt = new TVectorD(*((TVectorD*)array->At(4))); 
153 }
154
155 void AliESDresolParams::SetResolRFast(TObjArray* array){
156   //
157   // Set parameters - resolution at prim vertex
158   //
159   if (!array) return;  
160   if (array->At(0)) 
161     fResolCyy = new TVectorD(*((TVectorD*)array->At(0))); 
162   if (array->At(1)) 
163     fResolCzz = new TVectorD(*((TVectorD*)array->At(1))); 
164   if (array->At(2)) 
165     fResolCphi = new TVectorD(*((TVectorD*)array->At(2))); 
166   if (array->At(3)) 
167     fResolCth = new TVectorD(*((TVectorD*)array->At(3))); 
168   if (array->At(4)) 
169     fResolC1pt = new TVectorD(*((TVectorD*)array->At(4)));   
170 }
171
172
173
174