87594435 |
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 | |
acd84897 |
16 | /* $Id$ */ |
fb17acd4 |
17 | |
87594435 |
18 | //------------------------------------------------------------------------- |
19 | // Implementation of the AliKalmanTrack class |
066782e8 |
20 | // that is the base for AliTPCtrack, AliITStrackV2 and AliTRDtrack |
87594435 |
21 | // Origin: Iouri Belikov, CERN, Jouri.Belikov@cern.ch |
22 | //------------------------------------------------------------------------- |
6c94f330 |
23 | #include <TGeoManager.h> |
39d4ae58 |
24 | |
87594435 |
25 | #include "AliKalmanTrack.h" |
87594435 |
26 | |
27 | ClassImp(AliKalmanTrack) |
28 | |
e2afb3b6 |
29 | //_______________________________________________________________________ |
6c94f330 |
30 | AliKalmanTrack::AliKalmanTrack():AliExternalTrackParam(), |
68b8060b |
31 | fFakeRatio(0), |
e2afb3b6 |
32 | fChi2(0), |
304864ab |
33 | fMass(AliPID::ParticleMass(AliPID::kPion)), |
562dd0b4 |
34 | fLab(-3141593), |
c6e740ea |
35 | fN(0), |
90e48c0c |
36 | fStartTimeIntegral(kFALSE), |
37 | fIntegratedLength(0) |
e2afb3b6 |
38 | { |
116cbefd |
39 | // |
40 | // Default constructor |
41 | // |
c84a5e9e |
42 | |
7d0f8548 |
43 | for(Int_t i=0; i<AliPID::kSPECIES; i++) fIntegratedTime[i] = 0; |
e2afb3b6 |
44 | } |
45 | |
e2afb3b6 |
46 | AliKalmanTrack::AliKalmanTrack(const AliKalmanTrack &t): |
6c94f330 |
47 | AliExternalTrackParam(t), |
babd135a |
48 | fFakeRatio(t.fFakeRatio), |
e2afb3b6 |
49 | fChi2(t.fChi2), |
50 | fMass(t.fMass), |
562dd0b4 |
51 | fLab(t.fLab), |
c6e740ea |
52 | fN(t.fN), |
90e48c0c |
53 | fStartTimeIntegral(t.fStartTimeIntegral), |
54 | fIntegratedLength(t.fIntegratedLength) |
e2afb3b6 |
55 | { |
116cbefd |
56 | // |
57 | // Copy constructor |
58 | // |
74f9526e |
59 | |
c84a5e9e |
60 | for (Int_t i=0; i<AliPID::kSPECIES; i++) |
61 | fIntegratedTime[i] = t.fIntegratedTime[i]; |
74f9526e |
62 | } |
c5507f6d |
63 | |
316c6cd9 |
64 | AliKalmanTrack& AliKalmanTrack::operator=(const AliKalmanTrack&o){ |
65 | if(this!=&o){ |
66 | AliExternalTrackParam::operator=(o); |
67 | fLab = o.fLab; |
68 | fFakeRatio = o.fFakeRatio; |
69 | fChi2 = o.fChi2; |
70 | fMass = o.fMass; |
71 | fN = o.fN; |
72 | fStartTimeIntegral = o.fStartTimeIntegral; |
73 | for(Int_t i = 0;i<AliPID::kSPECIES;++i)fIntegratedTime[i] = o.fIntegratedTime[i]; |
74 | fIntegratedLength = o.fIntegratedLength; |
75 | } |
76 | return *this; |
77 | } |
78 | |
c5507f6d |
79 | //_______________________________________________________________________ |
74f9526e |
80 | void AliKalmanTrack::StartTimeIntegral() |
81 | { |
49a7a79a |
82 | // Sylwester Radomski, GSI |
83 | // S.Radomski@gsi.de |
74f9526e |
84 | // |
85 | // Start time integration |
86 | // To be called at Vertex by ITS tracker |
87 | // |
88 | |
89 | //if (fStartTimeIntegral) |
f37d970d |
90 | // AliWarning("Reseting Recorded Time."); |
74f9526e |
91 | |
92 | fStartTimeIntegral = kTRUE; |
304864ab |
93 | for(Int_t i=0; i<AliPID::kSPECIES; i++) fIntegratedTime[i] = 0; |
74f9526e |
94 | fIntegratedLength = 0; |
95 | } |
7d0f8548 |
96 | |
74f9526e |
97 | //_______________________________________________________________________ |
98 | void AliKalmanTrack:: AddTimeStep(Double_t length) |
99 | { |
100 | // |
101 | // Add step to integrated time |
102 | // this method should be called by a sublasses at the end |
103 | // of the PropagateTo function or by a tracker |
104 | // each time step is made. |
105 | // |
106 | // If integration not started function does nothing |
107 | // |
108 | // Formula |
109 | // dt = dl * sqrt(p^2 + m^2) / p |
110 | // p = pT * (1 + tg^2 (lambda) ) |
111 | // |
112 | // pt = 1/external parameter [4] |
113 | // tg lambda = external parameter [3] |
114 | // |
115 | // |
116 | // Sylwester Radomski, GSI |
117 | // S.Radomski@gsi.de |
118 | // |
119 | |
5d8718b8 |
120 | static const Double_t kcc = 2.99792458e-2; |
74f9526e |
121 | |
122 | if (!fStartTimeIntegral) return; |
123 | |
124 | fIntegratedLength += length; |
125 | |
74f9526e |
126 | Double_t xr, param[5]; |
127 | Double_t pt, tgl; |
128 | |
129 | GetExternalParameters(xr, param); |
130 | pt = 1/param[4] ; |
131 | tgl = param[3]; |
132 | |
133 | Double_t p = TMath::Abs(pt * TMath::Sqrt(1+tgl*tgl)); |
134 | |
135 | if (length > 100) return; |
136 | |
304864ab |
137 | for (Int_t i=0; i<AliPID::kSPECIES; i++) { |
74f9526e |
138 | |
304864ab |
139 | Double_t mass = AliPID::ParticleMass(i); |
74f9526e |
140 | Double_t correction = TMath::Sqrt( pt*pt * (1 + tgl*tgl) + mass * mass ) / p; |
5d8718b8 |
141 | Double_t time = length * correction / kcc; |
74f9526e |
142 | |
74f9526e |
143 | fIntegratedTime[i] += time; |
144 | } |
e2afb3b6 |
145 | } |
146 | |
74f9526e |
147 | //_______________________________________________________________________ |
74f9526e |
148 | Double_t AliKalmanTrack::GetIntegratedTime(Int_t pdg) const |
149 | { |
49a7a79a |
150 | // Sylwester Radomski, GSI |
151 | // S.Radomski@gsi.de |
74f9526e |
152 | // |
153 | // Return integrated time hypothesis for a given particle |
154 | // type assumption. |
155 | // |
156 | // Input parameter: |
157 | // pdg - Pdg code of a particle type |
158 | // |
159 | |
160 | |
161 | if (!fStartTimeIntegral) { |
f37d970d |
162 | AliWarning("Time integration not started"); |
74f9526e |
163 | return 0.; |
164 | } |
165 | |
304864ab |
166 | for (Int_t i=0; i<AliPID::kSPECIES; i++) |
167 | if (AliPID::ParticleCode(i) == TMath::Abs(pdg)) return fIntegratedTime[i]; |
74f9526e |
168 | |
f37d970d |
169 | AliWarning(Form("Particle type [%d] not found", pdg)); |
74f9526e |
170 | return 0; |
171 | } |
ae982df3 |
172 | |
173 | void AliKalmanTrack::GetIntegratedTimes(Double_t *times) const { |
304864ab |
174 | for (Int_t i=0; i<AliPID::kSPECIES; i++) times[i]=fIntegratedTime[i]; |
ae982df3 |
175 | } |
176 | |
177 | void AliKalmanTrack::SetIntegratedTimes(const Double_t *times) { |
304864ab |
178 | for (Int_t i=0; i<AliPID::kSPECIES; i++) fIntegratedTime[i]=times[i]; |
ae982df3 |
179 | } |
180 | |