00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef EvtTensor4C_HH
00022 #define EvtTensor4C_HH
00023
00024
00025 #include "EvtGenBase/EvtComplex.hh"
00026
00027
00028 class EvtTensor4C;
00029 class EvtVector4C;
00030 class EvtVector4R;
00031 class EvtVector3R;
00032 #include <iosfwd>
00033 EvtTensor4C rotateEuler(const EvtTensor4C& e,
00034 double alpha,double beta,double gamma);
00035 EvtTensor4C boostTo(const EvtTensor4C& e, const EvtVector4R p4);
00036 EvtTensor4C boostTo(const EvtTensor4C& e, const EvtVector3R boost);
00037 EvtTensor4C directProd(const EvtVector4C& c1,const EvtVector4C& c2);
00038 EvtTensor4C directProd(const EvtVector4C& c1,const EvtVector4R& c2);
00039 EvtTensor4C directProd(const EvtVector4R& c1,const EvtVector4R& c2);
00040 EvtTensor4C dual(const EvtTensor4C& t2);
00041 EvtTensor4C conj(const EvtTensor4C& t2);
00042 EvtTensor4C cont22(const EvtTensor4C& t1,const EvtTensor4C& t2);
00043 EvtTensor4C cont11(const EvtTensor4C& t1,const EvtTensor4C& t2);
00044 EvtTensor4C operator*(const EvtTensor4C& t1,const EvtComplex& c);
00045 EvtTensor4C operator*(const EvtComplex& c,const EvtTensor4C& t1);
00046 EvtTensor4C operator*(const EvtTensor4C& t1,double d);
00047 EvtTensor4C operator*(double d,const EvtTensor4C& t1);
00048 EvtComplex cont(const EvtTensor4C& t1,const EvtTensor4C& t2);
00049 EvtTensor4C operator+(const EvtTensor4C& t1,const EvtTensor4C& t2);
00050 inline EvtTensor4C operator-(const EvtTensor4C& t1,const EvtTensor4C& t2);
00051
00052 class EvtTensor4C {
00053
00054 friend EvtTensor4C rotateEuler(const EvtTensor4C& e,
00055 double alpha,double beta,double gamma);
00056 friend EvtTensor4C boostTo(const EvtTensor4C& e,
00057 const EvtVector4R p4);
00058 friend EvtTensor4C boostTo(const EvtTensor4C& e,
00059 const EvtVector3R boost);
00060 friend EvtTensor4C directProd(const EvtVector4C& c1,const EvtVector4C& c2);
00061 friend EvtTensor4C directProd(const EvtVector4C& c1,const EvtVector4R& c2);
00062 friend EvtTensor4C directProd(const EvtVector4R& c1,const EvtVector4R& c2);
00063 friend EvtTensor4C dual(const EvtTensor4C& t2);
00064 friend EvtTensor4C conj(const EvtTensor4C& t2);
00065 friend EvtTensor4C cont22(const EvtTensor4C& t1,const EvtTensor4C& t2);
00066 friend EvtTensor4C cont11(const EvtTensor4C& t1,const EvtTensor4C& t2);
00067 friend EvtTensor4C operator*(const EvtTensor4C& t1,const EvtComplex& c);
00068 friend EvtTensor4C operator*(const EvtComplex& c,const EvtTensor4C& t1);
00069 friend EvtTensor4C operator*(const EvtTensor4C& t1,double d);
00070 friend EvtTensor4C operator*(double d,const EvtTensor4C& t1);
00071 friend EvtComplex cont(const EvtTensor4C& t1,const EvtTensor4C& t2);
00072 friend EvtTensor4C operator+(const EvtTensor4C& t1,const EvtTensor4C& t2);
00073 friend EvtTensor4C operator-(const EvtTensor4C& t1,const EvtTensor4C& t2);
00074
00075 public:
00076 EvtTensor4C() {;}
00077
00078 EvtTensor4C(double t00,double t11,double t22, double t33) { setdiag(t00,t11,t22,t33);}
00079
00080
00081 EvtTensor4C(const EvtTensor4C& t1 );
00082 virtual ~EvtTensor4C();
00083 EvtTensor4C& operator=(const EvtTensor4C& t1);
00084 EvtTensor4C& operator*=(const EvtComplex& c);
00085 EvtTensor4C& operator*=(double d);
00086 EvtTensor4C& addDirProd(const EvtVector4R& p1,const EvtVector4R& p2);
00087 static const EvtTensor4C& g();
00088 inline void set(int i,int j,const EvtComplex& c);
00089 void setdiag(double t00,double t11,double t22, double t33);
00090 inline const EvtComplex& get(int i, int j) const;
00091 inline EvtComplex trace() const;
00092 void zero();
00093 void applyRotateEuler(double alpha,double beta,double gamma);
00094 void applyBoostTo(const EvtVector4R& p4);
00095 void applyBoostTo(const EvtVector3R& boost);
00096 friend std::ostream& operator<<(std::ostream& s, const EvtTensor4C& t);
00097 EvtTensor4C& operator+=(const EvtTensor4C& t2);
00098 EvtTensor4C& operator-=(const EvtTensor4C& t2);
00099 EvtTensor4C conj() const;
00100 EvtVector4C cont1(const EvtVector4C& v4) const;
00101 EvtVector4C cont2(const EvtVector4C& v4) const;
00102 EvtVector4C cont1(const EvtVector4R& v4) const;
00103 EvtVector4C cont2(const EvtVector4R& v4) const;
00104
00105
00106 private:
00107
00108 EvtComplex t[4][4];
00109
00110 };
00111
00112 inline EvtTensor4C operator+(const EvtTensor4C& t1,const EvtTensor4C& t2){
00113
00114 return EvtTensor4C(t1)+=t2;
00115 }
00116
00117 inline EvtTensor4C operator-(const EvtTensor4C& t1,const EvtTensor4C& t2){
00118
00119 return EvtTensor4C(t1)-=t2;
00120 }
00121
00122 inline void EvtTensor4C::set(int i,int j,const EvtComplex& c){
00123 t[i][j]=c;
00124 }
00125
00126 inline const EvtComplex& EvtTensor4C::get(int i,int j) const{
00127 return t[i][j];
00128 }
00129
00130 inline EvtComplex EvtTensor4C::trace() const{
00131 return t[0][0]-t[1][1]-t[2][2]-t[3][3];
00132 }
00133
00134 #endif
00135