BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtTensor4C.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
4// This software is part of the EvtGen package developed jointly
5// for the BaBar and CLEO collaborations. If you use all or part
6// of it, please give an appropriate acknowledgement.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9// Copyright (C) 1998 Caltech, UCSB
10//
11// Module: EvtTensor4C.cc
12//
13// Description: Implementation of tensor particles.
14//
15// Modification history:
16//
17// DJL/RYD September 25,1996 Module created
18//
19//------------------------------------------------------------------------
20//
21#include "EvtTensor4C.hh"
22#include "EvtComplex.hh"
23#include "EvtPatches.hh"
24#include "EvtVector4C.hh"
25#include <assert.h>
26#include <iostream>
27#include <math.h>
28using std::endl;
29using std::ostream;
30
32
33 int i, j;
34
35 for ( i = 0; i < 4; i++ )
36 {
37 for ( j = 0; j < 4; j++ ) { t[i][j] = t1.t[i][j]; }
38 }
39}
40
42
44
45 static EvtTensor4C g_metric( 1.0, -1.0, -1.0, -1.0 );
46
47 return g_metric;
48}
49
51 int i, j;
52
53 for ( i = 0; i < 4; i++ )
54 {
55 for ( j = 0; j < 4; j++ ) { t[i][j] = t1.t[i][j]; }
56 }
57 return *this;
63 int i, j;
65 for ( i = 0; i < 4; i++ )
66 {
67 for ( j = 0; j < 4; j++ ) { temp.set( j, i, ::conj( t[i][j] ) ); }
68 }
69 return temp;
70}
71
72EvtTensor4C rotateEuler( const EvtTensor4C& rs, double alpha, double beta, double gamma ) {
73
74 EvtTensor4C tmp( rs );
75 tmp.applyRotateEuler( alpha, beta, gamma );
76 return tmp;
77}
78
80
81 EvtTensor4C tmp( rs );
82 tmp.applyBoostTo( p4 );
83 return tmp;
84}
85
86EvtTensor4C boostTo( const EvtTensor4C& rs, const EvtVector3R boost ) {
87
88 EvtTensor4C tmp( rs );
89 tmp.applyBoostTo( boost );
90 return tmp;
91}
92
94
95 double e = p4.get( 0 );
96
97 EvtVector3R boost( p4.get( 1 ) / e, p4.get( 2 ) / e, p4.get( 3 ) / e );
98
99 applyBoostTo( boost );
100
101 return;
102}
103
105
106 double bx, by, bz, gamma, b2;
107 double lambda[4][4];
108 EvtComplex tt[4][4];
109
110 bx = boost.get( 0 );
111 by = boost.get( 1 );
112 bz = boost.get( 2 );
113
114 double bxx = bx * bx;
115 double byy = by * by;
116 double bzz = bz * bz;
117
118 b2 = bxx + byy + bzz;
119
120 if ( b2 == 0.0 ) { return; }
121
122 assert( b2 < 1.0 );
123
124 gamma = 1.0 / sqrt( 1 - b2 );
125
126 int i, j, k;
127
128 if ( b2 == 0.0 ) { return; }
129
130 lambda[0][0] = gamma;
131 lambda[0][1] = gamma * bx;
132 lambda[1][0] = gamma * bx;
133 lambda[0][2] = gamma * by;
134 lambda[2][0] = gamma * by;
135 lambda[0][3] = gamma * bz;
136 lambda[3][0] = gamma * bz;
137
138 lambda[1][1] = 1.0 + ( gamma - 1.0 ) * bx * bx / b2;
139 lambda[2][2] = 1.0 + ( gamma - 1.0 ) * by * by / b2;
140 lambda[3][3] = 1.0 + ( gamma - 1.0 ) * bz * bz / b2;
141
142 lambda[1][2] = ( gamma - 1.0 ) * bx * by / b2;
143 lambda[2][1] = ( gamma - 1.0 ) * bx * by / b2;
144
145 lambda[1][3] = ( gamma - 1.0 ) * bx * bz / b2;
146 lambda[3][1] = ( gamma - 1.0 ) * bx * bz / b2;
147
148 lambda[3][2] = ( gamma - 1.0 ) * bz * by / b2;
149 lambda[2][3] = ( gamma - 1.0 ) * bz * by / b2;
150
151 for ( i = 0; i < 4; i++ )
152 {
153 for ( j = 0; j < 4; j++ )
154 {
155 tt[i][j] = EvtComplex( 0.0 );
156 for ( k = 0; k < 4; k++ ) { tt[i][j] = tt[i][j] + lambda[j][k] * t[i][k]; }
157 }
158 }
159
160 for ( i = 0; i < 4; i++ )
161 {
162 for ( j = 0; j < 4; j++ )
163 {
164 t[i][j] = EvtComplex( 0.0 );
165 for ( k = 0; k < 4; k++ ) { t[i][j] = t[i][j] + lambda[i][k] * tt[k][j]; }
166 }
167 }
168}
169
171 int i, j;
172 for ( i = 0; i < 4; i++ )
173 {
174 for ( j = 0; j < 4; j++ ) { t[i][j] = EvtComplex( 0.0, 0.0 ); }
175 }
176}
177
178ostream& operator<<( ostream& s, const EvtTensor4C& t ) {
179
180 int i, j;
181 s << endl;
182 for ( i = 0; i < 4; i++ )
183 {
184 for ( j = 0; j < 4; j++ ) { s << t.t[i][j]; }
185 s << endl;
186 }
187 return s;
188}
189
190void EvtTensor4C::setdiag( double g00, double g11, double g22, double g33 ) {
191 t[0][0] = EvtComplex( g00 );
192 t[1][1] = EvtComplex( g11 );
193 t[2][2] = EvtComplex( g22 );
194 t[3][3] = EvtComplex( g33 );
195 t[0][1] = EvtComplex( 0.0 );
196 t[0][2] = EvtComplex( 0.0 );
197 t[0][3] = EvtComplex( 0.0 );
198 t[1][0] = EvtComplex( 0.0 );
199 t[1][2] = EvtComplex( 0.0 );
200 t[1][3] = EvtComplex( 0.0 );
201 t[2][0] = EvtComplex( 0.0 );
202 t[2][1] = EvtComplex( 0.0 );
203 t[2][3] = EvtComplex( 0.0 );
204 t[3][0] = EvtComplex( 0.0 );
205 t[3][1] = EvtComplex( 0.0 );
206 t[3][2] = EvtComplex( 0.0 );
207}
208
210
211 int i, j;
212
213 for ( i = 0; i < 4; i++ )
214 {
215 for ( j = 0; j < 4; j++ ) { t[i][j] += t2.get( i, j ); }
216 }
217 return *this;
218}
219
221
222 int i, j;
223
224 for ( i = 0; i < 4; i++ )
225 {
226 for ( j = 0; j < 4; j++ ) { t[i][j] -= t2.get( i, j ); }
227 }
228 return *this;
229}
230
232 int i, j;
233
234 for ( i = 0; i < 4; i++ )
235 {
236 for ( j = 0; j < 4; j++ ) { t[i][j] *= c; }
237 }
238 return *this;
239}
240
242
243 return EvtTensor4C( t1 ) *= c;
244}
245
247
248 return EvtTensor4C( t1 ) *= c;
249}
250
252 int i, j;
253
254 for ( i = 0; i < 4; i++ )
255 {
256 for ( j = 0; j < 4; j++ ) { t[i][j] *= EvtComplex( d, 0.0 ); }
257 }
258 return *this;
259}
260
261EvtTensor4C operator*( const EvtTensor4C& t1, double d ) {
262
263 return EvtTensor4C( t1 ) *= EvtComplex( d, 0.0 );
264}
265
266EvtTensor4C operator*( double d, const EvtTensor4C& t1 ) {
267
268 return EvtTensor4C( t1 ) *= EvtComplex( d, 0.0 );
269}
270
271EvtComplex cont( const EvtTensor4C& t1, const EvtTensor4C& t2 ) {
272
273 EvtComplex sum( 0.0, 0.0 );
274 int i, j;
275
276 for ( i = 0; i < 4; i++ )
277 {
278 for ( j = 0; j < 4; j++ ) { sum += t1.t[i][j] * t2.t[i][j]; }
279 }
280
281 return sum;
282}
283
285 EvtTensor4C temp;
286 int i, j;
287
288 for ( i = 0; i < 4; i++ )
289 {
290 for ( j = 0; j < 4; j++ ) { temp.set( i, j, c1.get( i ) * c2.get( j ) ); }
291 }
292 return temp;
293}
294
296 EvtTensor4C temp;
297 int i, j;
298
299 for ( i = 0; i < 4; i++ )
300 {
301 for ( j = 0; j < 4; j++ ) { temp.set( i, j, c1.get( i ) * c2.get( j ) ); }
302 }
303 return temp;
304}
305
307
308 EvtTensor4C temp;
309 int i, j;
310
311 for ( i = 0; i < 4; i++ )
312 {
313 for ( j = 0; j < 4; j++ ) { temp.t[i][j] = EvtComplex( c1.get( i ) * c2.get( j ), 0.0 ); }
314 }
315 return temp;
316}
317
319
320 int i, j;
321
322 for ( i = 0; i < 4; i++ )
323 {
324 for ( j = 0; j < 4; j++ ) { t[i][j] += p1.get( i ) * p2.get( j ); }
325 }
326 return *this;
327}
328
330
331 EvtTensor4C temp;
332
333 temp.set( 0, 0, EvtComplex( 0.0, 0.0 ) );
334 temp.set( 1, 1, EvtComplex( 0.0, 0.0 ) );
335 temp.set( 2, 2, EvtComplex( 0.0, 0.0 ) );
336 temp.set( 3, 3, EvtComplex( 0.0, 0.0 ) );
337
338 temp.set( 0, 1, t2.get( 3, 2 ) - t2.get( 2, 3 ) );
339 temp.set( 0, 2, -t2.get( 3, 1 ) + t2.get( 1, 3 ) );
340 temp.set( 0, 3, t2.get( 2, 1 ) - t2.get( 1, 2 ) );
341
342 temp.set( 1, 2, -t2.get( 3, 0 ) + t2.get( 0, 3 ) );
343 temp.set( 1, 3, t2.get( 2, 0 ) - t2.get( 0, 2 ) );
344
345 temp.set( 2, 3, -t2.get( 1, 0 ) + t2.get( 0, 1 ) );
346
347 temp.set( 1, 0, -temp.get( 0, 1 ) );
348 temp.set( 2, 0, -temp.get( 0, 2 ) );
349 temp.set( 3, 0, -temp.get( 0, 3 ) );
350
351 temp.set( 2, 1, -temp.get( 1, 2 ) );
352 temp.set( 3, 1, -temp.get( 1, 3 ) );
353
354 temp.set( 3, 2, -temp.get( 2, 3 ) );
355
356 return temp;
357}
358
360 EvtTensor4C temp;
361
362 int i, j;
363
364 for ( i = 0; i < 4; i++ )
365 {
366 for ( j = 0; j < 4; j++ ) { temp.set( i, j, ::conj( ( t2.get( i, j ) ) ) ); }
367 }
368
369 return temp;
370}
371
372EvtTensor4C cont22( const EvtTensor4C& t1, const EvtTensor4C& t2 ) {
373 EvtTensor4C temp;
374
375 int i, j;
376 EvtComplex c;
377
378 for ( i = 0; i < 4; i++ )
379 {
380 for ( j = 0; j < 4; j++ )
381 {
382 c = t1.get( i, 0 ) * t2.get( j, 0 ) - t1.get( i, 1 ) * t2.get( j, 1 ) -
383 t1.get( i, 2 ) * t2.get( j, 2 ) - t1.get( i, 3 ) * t2.get( j, 3 );
384 temp.set( i, j, c );
385 }
386 }
387
388 return temp;
389}
390
391EvtTensor4C cont11( const EvtTensor4C& t1, const EvtTensor4C& t2 ) {
392 EvtTensor4C temp;
393
394 int i, j;
395 EvtComplex c;
396
397 for ( i = 0; i < 4; i++ )
398 {
399 for ( j = 0; j < 4; j++ )
400 {
401 c = t1.get( 0, i ) * t2.get( 0, j ) - t1.get( 1, i ) * t2.get( 1, j ) -
402 t1.get( 2, i ) * t2.get( 2, j ) - t1.get( 3, i ) * t2.get( 3, j );
403 temp.set( i, j, c );
404 }
405 }
406
407 return temp;
408}
409
411 EvtVector4C temp;
412
413 int i;
414
415 for ( i = 0; i < 4; i++ )
416 {
417 temp.set( i, t[0][i] * v4.get( 0 ) - t[1][i] * v4.get( 1 ) - t[2][i] * v4.get( 2 ) -
418 t[3][i] * v4.get( 3 ) );
419 }
420
421 return temp;
422}
423
425 EvtVector4C temp;
426
427 int i;
428
429 for ( i = 0; i < 4; i++ )
430 {
431 temp.set( i, t[i][0] * v4.get( 0 ) - t[i][1] * v4.get( 1 ) - t[i][2] * v4.get( 2 ) -
432 t[i][3] * v4.get( 3 ) );
433 }
434
435 return temp;
436}
437
439 EvtVector4C temp;
440
441 int i;
442
443 for ( i = 0; i < 4; i++ )
444 {
445 temp.set( i, t[0][i] * v4.get( 0 ) - t[1][i] * v4.get( 1 ) - t[2][i] * v4.get( 2 ) -
446 t[3][i] * v4.get( 3 ) );
447 }
448
449 return temp;
450}
451
453 EvtVector4C temp;
454
455 int i;
456
457 for ( i = 0; i < 4; i++ )
458 {
459 temp.set( i, t[i][0] * v4.get( 0 ) - t[i][1] * v4.get( 1 ) - t[i][2] * v4.get( 2 ) -
460 t[i][3] * v4.get( 3 ) );
461 }
462
463 return temp;
464}
465
466void EvtTensor4C::applyRotateEuler( double phi, double theta, double ksi ) {
467
468 EvtComplex tt[4][4];
469 double sp, st, sk, cp, ct, ck;
470 double lambda[4][4];
471
472 sp = sin( phi );
473 st = sin( theta );
474 sk = sin( ksi );
475 cp = cos( phi );
476 ct = cos( theta );
477 ck = cos( ksi );
478
479 lambda[0][0] = 1.0;
480 lambda[0][1] = 0.0;
481 lambda[1][0] = 0.0;
482 lambda[0][2] = 0.0;
483 lambda[2][0] = 0.0;
484 lambda[0][3] = 0.0;
485 lambda[3][0] = 0.0;
486
487 lambda[1][1] = ck * ct * cp - sk * sp;
488 lambda[1][2] = -sk * ct * cp - ck * sp;
489 lambda[1][3] = st * cp;
490
491 lambda[2][1] = ck * ct * sp + sk * cp;
492 lambda[2][2] = -sk * ct * sp + ck * cp;
493 lambda[2][3] = st * sp;
494
495 lambda[3][1] = -ck * st;
496 lambda[3][2] = sk * st;
497 lambda[3][3] = ct;
498
499 int i, j, k;
500
501 for ( i = 0; i < 4; i++ )
502 {
503 for ( j = 0; j < 4; j++ )
504 {
505 tt[i][j] = EvtComplex( 0.0 );
506 for ( k = 0; k < 4; k++ ) { tt[i][j] += lambda[j][k] * t[i][k]; }
507 }
508 }
509
510 for ( i = 0; i < 4; i++ )
511 {
512 for ( j = 0; j < 4; j++ )
513 {
514 t[i][j] = EvtComplex( 0.0 );
515 for ( k = 0; k < 4; k++ ) { t[i][j] += lambda[i][k] * tt[k][j]; }
516 }
517 }
518}
double p2[4]
double p1[4]
Evt3Rank3C conj(const Evt3Rank3C &t2)
double alpha
EvtTensor4C dual(const EvtTensor4C &t2)
ostream & operator<<(ostream &s, const EvtTensor4C &t)
EvtComplex cont(const EvtTensor4C &t1, const EvtTensor4C &t2)
EvtTensor4C rotateEuler(const EvtTensor4C &rs, double alpha, double beta, double gamma)
EvtTensor4C cont22(const EvtTensor4C &t1, const EvtTensor4C &t2)
EvtTensor4C cont11(const EvtTensor4C &t1, const EvtTensor4C &t2)
EvtTensor4C boostTo(const EvtTensor4C &rs, const EvtVector4R p4)
EvtTensor4C operator*(const EvtTensor4C &t1, const EvtComplex &c)
EvtTensor4C conj(const EvtTensor4C &t2)
EvtTensor4C directProd(const EvtVector4C &c1, const EvtVector4C &c2)
XmlRpcServer s
void setdiag(double t00, double t11, double t22, double t33)
void set(int i, int j, const EvtComplex &c)
const EvtComplex & get(int i, int j) const
EvtTensor4C & operator=(const EvtTensor4C &t1)
EvtTensor4C & operator-=(const EvtTensor4C &t2)
virtual ~EvtTensor4C()
EvtVector4C cont1(const EvtVector4C &v4) const
static const EvtTensor4C & g()
void applyBoostTo(const EvtVector4R &p4)
EvtTensor4C conj() const
EvtTensor4C & addDirProd(const EvtVector4R &p1, const EvtVector4R &p2)
EvtTensor4C & operator*=(const EvtComplex &c)
EvtVector4C cont2(const EvtVector4C &v4) const
EvtTensor4C & operator+=(const EvtTensor4C &t2)
void applyRotateEuler(double alpha, double beta, double gamma)
friend EvtTensor4C conj(const EvtTensor4C &t2)
double get(int i) const
void set(int, const EvtComplex &)
const EvtComplex & get(int) const
double get(int i) const
int t()
Definition t.c:1