1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 //************************************************************************
18 // ESD track and V0 resolution parameterization
21 // Origin: Marian Ivanov marian.ivanov@cern.ch
22 //-------------------------------------------------------------------------
25 The track parameter resolution is determined by the intrinsic detector
26 resolution and by the multiple scattering and fluctuation of the energy
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.
33 Multiple effect scaling:
35 SCATERING ANGLE - fi, theta
36 sigma A += sqrt(14.1*14.1/(beta2*p2*1e6)*TMath::Abs(xOverX0));
38 sigma sfi += sigma A * sqrt((1-sfi^2) * (1+ tth^2))
39 sigma tth += sigma A * (1+tth^2)
42 sigma 1/pt = sigma A * 1/pt * tth
46 sigma y +~ sigma A * eff length (between update measurements) ~ 1/pt
47 sigma z +~ sigma A * eff length (between update measurements) ~ 1/pt
56 #include "TObjArray.h"
57 #include "AliESDresolParams.h"
60 ClassImp(AliESDresolParams)
63 AliESDresolParams* AliESDresolParams::fgInstance = 0; //! Instance of this class (singleton implementation)
66 AliESDresolParams::AliESDresolParams() :
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
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
81 // Default constructor
85 Double_t AliESDresolParams::GetResolPrimFast(Int_t param, Float_t onept, Float_t tanth) const {
87 // Resolution at primary vertex
88 // simple Resolution parameterization
89 // polynom of second order in 2D
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;
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);
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);
114 Double_t AliESDresolParams::GetResolRFast(Int_t param, Float_t onept, Float_t radius) const {
116 // simple DCA resolution parameterization
117 // polynom of second order in 2D
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;
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);
138 void AliESDresolParams::SetResolPrimFast(TObjArray* array){
140 // Set parameters - resolution at prim vertex
144 fResolDCAyy = new TVectorD(*((TVectorD*)array->At(0)));
146 fResolDCAzz = new TVectorD(*((TVectorD*)array->At(1)));
148 fResolDCAphi = new TVectorD(*((TVectorD*)array->At(2)));
150 fResolDCAth = new TVectorD(*((TVectorD*)array->At(3)));
152 fResolDCA1pt = new TVectorD(*((TVectorD*)array->At(4)));
155 void AliESDresolParams::SetResolRFast(TObjArray* array){
157 // Set parameters - resolution at prim vertex
161 fResolCyy = new TVectorD(*((TVectorD*)array->At(0)));
163 fResolCzz = new TVectorD(*((TVectorD*)array->At(1)));
165 fResolCphi = new TVectorD(*((TVectorD*)array->At(2)));
167 fResolCth = new TVectorD(*((TVectorD*)array->At(3)));
169 fResolC1pt = new TVectorD(*((TVectorD*)array->At(4)));