]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/EvtGenBase/EvtTensor3C.hh
Updates EvtGen Code
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenBase / EvtTensor3C.hh
CommitLineData
da0e9ce3 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: EvtGen/EvtTensor3C.hh
12//
13// Description: Class to handle complex 3 tensors
14//
15// Modification history:
16//
17// RYD September 14, 1997 Module created
18//
19//------------------------------------------------------------------------
20
21#ifndef EVTTENSOR3C_HH
22#define EVTTENSOR3C_HH
23
24#include <iostream>
25#include "EvtGenBase/EvtComplex.hh"
26
27class EvtVector3C;
28class EvtVector3R;
29
30class EvtTensor3C;
31
0ca57c2f 32namespace EvtGenFunctions {
33 EvtTensor3C eps(const EvtVector3R& v);
34 EvtTensor3C rotateEuler(const EvtTensor3C& v,
35 double phi,double theta,double ksi);
36 EvtTensor3C directProd(const EvtVector3C& c1,const EvtVector3C& c2);
37 EvtTensor3C directProd(const EvtVector3C& c1,const EvtVector3R& c2);
38 EvtTensor3C directProd(const EvtVector3R& c1,const EvtVector3R& c2);
39};
da0e9ce3 40
41class EvtTensor3C {
da0e9ce3 42 friend EvtTensor3C operator*(
43 const EvtComplex& c,const EvtTensor3C& t2);
0ca57c2f 44 friend EvtTensor3C operator*(const double d,const EvtTensor3C& t2);
da0e9ce3 45 friend EvtTensor3C operator*(
46 const EvtTensor3C& t2,const EvtComplex& c);
0ca57c2f 47 friend EvtTensor3C operator*(const EvtTensor3C& t2,const double d);
da0e9ce3 48 friend EvtTensor3C operator+(
49 const EvtTensor3C& t1,const EvtTensor3C& t2);
50 friend EvtTensor3C operator-(
51 const EvtTensor3C& t1,const EvtTensor3C& t2);
0ca57c2f 52 friend EvtTensor3C EvtGenFunctions::directProd(const EvtVector3C& c1,const EvtVector3C& c2);
53 friend EvtTensor3C EvtGenFunctions::directProd(const EvtVector3C& c1,const EvtVector3R& c2);
54 friend EvtTensor3C EvtGenFunctions::directProd(const EvtVector3R& c1,const EvtVector3R& c2);
da0e9ce3 55 friend EvtTensor3C conj(const EvtTensor3C& t2);
56 //Contract the second index of two tensors result(i,j) = t1(i,k)t2(j,k)
57 friend EvtTensor3C cont22(const EvtTensor3C& t1,const EvtTensor3C& t2);
58 //Contract the first index of two tensors result(i,j) = t1(k,i)t2(k,j)
59 friend EvtTensor3C cont11(const EvtTensor3C& t1,const EvtTensor3C& t2);
60 //Contract the last index of eps_{ijk} with w
0ca57c2f 61 friend EvtTensor3C EvtGenFunctions::eps(const EvtVector3R& v);
da0e9ce3 62 friend std::ostream& operator<<(std::ostream& c,const EvtTensor3C& v);
63
64public:
65 EvtTensor3C();
66 EvtTensor3C(const EvtTensor3C& t1 );
67 EvtTensor3C(double d11, double d22, double d33);
68 virtual ~EvtTensor3C();
69 EvtTensor3C& operator=(const EvtTensor3C& t1);
70 inline void set(int i,int j,const EvtComplex& c);
71 inline const EvtComplex& get(int i, int j) const;
72 inline EvtComplex trace() const;
73 static const EvtTensor3C& id();
74 void zero();
75 void applyRotateEuler(double phi,double theta,double ksi);
76
77 EvtTensor3C operator+=(const EvtTensor3C& t2);
78 EvtTensor3C operator-=(const EvtTensor3C& t2);
0ca57c2f 79 EvtTensor3C operator*=(const double d);
da0e9ce3 80 EvtTensor3C operator*=(const EvtComplex& c);
81 EvtTensor3C conj() const;
82 EvtVector3C cont1(const EvtVector3C& v) const;
83 EvtVector3C cont2(const EvtVector3C& v) const;
84 EvtVector3C cont1(const EvtVector3R& v) const;
85 EvtVector3C cont2(const EvtVector3R& v) const;
86
87private:
88
89 EvtComplex t[3][3];
90
91};
92
93inline EvtTensor3C operator*(const EvtComplex& c,const EvtTensor3C& t2){
94 return EvtTensor3C(t2)*=c;
95}
96
97inline EvtTensor3C operator*(const double d,const EvtTensor3C& t2){
98 return EvtTensor3C(t2)*=d;
99}
100
101inline EvtTensor3C operator*(const EvtTensor3C& t2,const EvtComplex& c){
102 return EvtTensor3C(t2)*=c;
103}
104
0ca57c2f 105inline EvtTensor3C operator*(const EvtTensor3C& t2,const double d){
da0e9ce3 106 return EvtTensor3C(t2)*=d;
107}
108
109inline EvtTensor3C operator+(const EvtTensor3C& t1,const EvtTensor3C& t2){
110 return EvtTensor3C(t1)+=t2;
111}
112
113inline EvtTensor3C operator-(const EvtTensor3C& t1,const EvtTensor3C& t2){
114 return EvtTensor3C(t1)-=t2;
115}
116
117inline void EvtTensor3C::set(int i,int j,const EvtComplex& c){
118 t[i][j]=c;
119}
120
121inline const EvtComplex& EvtTensor3C::get(int i,int j) const{
122 return t[i][j];
123}
124
125inline EvtComplex EvtTensor3C::trace() const{
126 return t[0][0]+t[1][1]+t[2][2];
127}
128
129#endif
130