]> git.uio.no Git - u/mrichter/AliRoot.git/blame - RALICE/Ali4Vector.cxx
Addition of CPV library as a separate detector from PHOS
[u/mrichter/AliRoot.git] / RALICE / Ali4Vector.cxx
CommitLineData
d88f97cc 1#include "Ali4Vector.h"
2
3ClassImp(Ali4Vector) // Class implementation to enable ROOT I/O
4
5Ali4Vector::Ali4Vector()
6{
7// Creation of a contravariant 4-vector and initialisation of parameters
8 fV0=0;
9 Double_t a[3]={0,0,0};
10 fV.SetVector(a,"sph");
11}
12///////////////////////////////////////////////////////////////////////////
13Ali4Vector::~Ali4Vector()
14{
15// Destructor to delete dynamically allocated memory
16}
17///////////////////////////////////////////////////////////////////////////
18void Ali4Vector::SetVector(Double_t v0,Ali3Vector v)
19{
20// Store contravariant vector
21 fV0=v0;
22 fV=v;
23}
24///////////////////////////////////////////////////////////////////////////
25void Ali4Vector::SetVector(Double_t* v,TString f)
26{
27// Store vector according to reference frame f
28 fV0=v[0];
29 Double_t a[3];
30 for (Int_t i=0; i<3; i++)
31 {
32 a[i]=v[i+1];
33 }
34 fV.SetVector(a,f);
35}
36///////////////////////////////////////////////////////////////////////////
37void Ali4Vector::GetVector(Double_t* v,TString f)
38{
39// Provide vector according to reference frame f
40 v[0]=fV0;
41 Double_t a[3];
42 fV.GetVector(a,f);
43 for (Int_t i=0; i<3; i++)
44 {
45 v[i+1]=a[i];
46 }
47}
48///////////////////////////////////////////////////////////////////////////
49void Ali4Vector::SetVector(Float_t* v,TString f)
50{
51// Store vector according to reference frame f
52 Double_t vec[4];
53 for (Int_t i=0; i<4; i++)
54 {
55 vec[i]=v[i];
56 }
57 SetVector(vec,f);
58}
59///////////////////////////////////////////////////////////////////////////
60void Ali4Vector::GetVector(Float_t* v,TString f)
61{
62// Provide vector according to reference frame f
63 Double_t vec[4];
64 GetVector(vec,f);
65 for (Int_t i=0; i<4; i++)
66 {
67 v[i]=vec[i];
68 }
69}
70///////////////////////////////////////////////////////////////////////////
71Double_t Ali4Vector::GetScalar()
72{
73// Provide the scalar part
74 return fV0;
75}
76///////////////////////////////////////////////////////////////////////////
77Ali3Vector Ali4Vector::Get3Vector()
78{
79// Provide the 3-vector part
80 return fV;
81}
82///////////////////////////////////////////////////////////////////////////
83void Ali4Vector::Info(TString f)
84{
85// Print contravariant vector components according to reference frame f
86 if (f=="car" || f=="sph" || f=="cyl")
87 {
88 Double_t vec[4];
89 GetVector(vec,f);
90 cout << " Contravariant vector in " << f << " coordinates : "
91 << vec[0] << " " << vec[1] << " " << vec[2] << " " << vec[3] << endl;
92 }
93 else
94 {
95 cout << " *Ali4Vector::Info* Unsupported frame : " << f << endl
96 << " Possible frames are 'car', 'sph' and 'cyl'." << endl;
97 }
98}
99///////////////////////////////////////////////////////////////////////////
100Double_t Ali4Vector::Dot(Ali4Vector& q)
101{
102// Provide the dot product of the current vector with vector q
103 Double_t a[4],b[4];
104 Double_t dotpro;
105
106 GetVector(a,"car");
107 q.GetVector(b,"car");
108
109 dotpro=a[0]*b[0];
110 for (Int_t i=1; i<4; i++)
111 {
112 dotpro-=a[i]*b[i];
113 }
114
115 return dotpro;
116}
117///////////////////////////////////////////////////////////////////////////
118Ali4Vector Ali4Vector::operator+(Ali4Vector& q)
119{
120// Add vector q to the current vector
121 Double_t a[4],b[4];
122
123 GetVector(a,"car");
124 q.GetVector(b,"car");
125
126 for (Int_t i=0; i<4; i++)
127 {
128 a[i]+=b[i];
129 }
130
131 Ali4Vector v;
132 v.SetVector(a,"car");
133
134 return v;
135}
136///////////////////////////////////////////////////////////////////////////
137Ali4Vector Ali4Vector::operator-(Ali4Vector& q)
138{
139// Subtract vector q from the current vector
140 Double_t a[4],b[4];
141
142 GetVector(a,"car");
143 q.GetVector(b,"car");
144
145 for (Int_t i=0; i<4; i++)
146 {
147 a[i]-=b[i];
148 }
149
150 Ali4Vector v;
151 v.SetVector(a,"car");
152
153 return v;
154}
155///////////////////////////////////////////////////////////////////////////
156Ali4Vector Ali4Vector::operator*(Double_t s)
157{
158// Multiply the current vector with a scalar s
159 Double_t a[4];
160
161 GetVector(a,"car");
162
163 for (Int_t i=0; i<4; i++)
164 {
165 a[i]*=s;
166 }
167
168 Ali4Vector v;
169 v.SetVector(a,"car");
170
171 return v;
172}
173///////////////////////////////////////////////////////////////////////////
174Ali4Vector Ali4Vector::operator/(Double_t s)
175{
176// Divide the current vector by a scalar s
177
178 if (fabs(s)<1.e-20) // Protect against division by 0
179 {
180 cout << " *Ali4Vector::/* Division by 0 detected. No action taken." << endl;
181 return *this;
182 }
183 else
184 {
185 Double_t a[4];
186
187 GetVector(a,"car");
188
189 for (Int_t i=0; i<4; i++)
190 {
191 a[i]/=s;
192 }
193
194 Ali4Vector v;
195 v.SetVector(a,"car");
196
197 return v;
198 }
199}
200///////////////////////////////////////////////////////////////////////////
201Ali4Vector& Ali4Vector::operator+=(Ali4Vector& q)
202{
203// Add vector q to the current vector
204 Double_t a[4],b[4];
205
206 GetVector(a,"car");
207 q.GetVector(b,"car");
208
209 for (Int_t i=0; i<4; i++)
210 {
211 a[i]+=b[i];
212 }
213
214 SetVector(a,"car");
215
216 return *this;
217}
218///////////////////////////////////////////////////////////////////////////
219Ali4Vector& Ali4Vector::operator-=(Ali4Vector& q)
220{
221// Subtract vector q from the current vector
222 Double_t a[4],b[4];
223
224 GetVector(a,"car");
225 q.GetVector(b,"car");
226
227 for (Int_t i=0; i<4; i++)
228 {
229 a[i]-=b[i];
230 }
231
232 SetVector(a,"car");
233
234 return *this;
235}
236///////////////////////////////////////////////////////////////////////////
237Ali4Vector& Ali4Vector::operator*=(Double_t s)
238{
239// Multiply the current vector with a scalar s
240 Double_t a[4];
241
242 GetVector(a,"car");
243
244 for (Int_t i=0; i<4; i++)
245 {
246 a[i]*=s;
247 }
248
249 SetVector(a,"car");
250
251 return *this;
252}
253///////////////////////////////////////////////////////////////////////////
254Ali4Vector& Ali4Vector::operator/=(Double_t s)
255{
256// Divide the current vector by a scalar s
257
258 if (fabs(s)<1.e-20) // Protect against division by 0
259 {
260 cout << " *Ali4Vector::/=* Division by 0 detected. No action taken." << endl;
261 return *this;
262 }
263 else
264 {
265 Double_t a[4];
266
267 GetVector(a,"car");
268
269 for (Int_t i=0; i<4; i++)
270 {
271 a[i]/=s;
272 }
273
274 SetVector(a,"car");
275
276 return *this;
277 }
278}
279///////////////////////////////////////////////////////////////////////////