/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/BesEvtGen/BesEvtGen-00-03-58/src/EvtGen/EvtGenBase/EvtTensor3C.cc

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 //
00003 // Environment:
00004 //      This software is part of the EvtGen package developed jointly
00005 //      for the BaBar and CLEO collaborations.  If you use all or part
00006 //      of it, please give an appropriate acknowledgement.
00007 //
00008 // Copyright Information: See EvtGen/COPYRIGHT
00009 //      Copyright (C) 1998      Caltech, UCSB
00010 //
00011 // Module: EvtTensor3C.cc
00012 //
00013 // Description: Implementation of 3 tensors.
00014 //
00015 // Modification history:
00016 //
00017 //    RYD       September 14, 1996       Module created
00018 //
00019 //------------------------------------------------------------------------
00020 // 
00021 #include "EvtGenBase/EvtPatches.hh"
00022 #include <iostream>
00023 #include <math.h>
00024 #include "EvtGenBase/EvtComplex.hh"
00025 #include "EvtGenBase/EvtVector3C.hh"
00026 #include "EvtGenBase/EvtTensor3C.hh"
00027 #include "EvtGenBase/EvtReport.hh"
00028 using std::endl;
00029 using std::ostream;
00030 
00031 
00032 EvtTensor3C::~EvtTensor3C(){}
00033 
00034 
00035 EvtTensor3C::EvtTensor3C( const EvtTensor3C& t1 ) {
00036 
00037   int i,j;
00038   
00039   for(i=0;i<3;i++) {
00040     for(j=0;j<3;j++) {
00041       t[i][j] = t1.t[i][j];
00042     }
00043   }
00044 }
00045 
00046 EvtTensor3C::EvtTensor3C(double d11, double d22, double d33) {
00047 
00048   int i,j;
00049   
00050   for(i=0;i<3;i++) {
00051     for(j=0;j<3;j++) {
00052       t[i][j] = 0.0;
00053     }
00054   }
00055 
00056   t[0][0]=d11;
00057   t[1][1]=d22;
00058   t[2][2]=d33;
00059 
00060 }
00061 
00062 
00063 
00064 EvtTensor3C& EvtTensor3C::operator=(const EvtTensor3C& t1) {
00065   int i,j;
00066   
00067   for(i=0;i<3;i++) {
00068     for(j=0;j<3;j++) {
00069       t[i][j] = t1.t[i][j];
00070     }
00071   }
00072   return *this;
00073 }
00074 
00075 EvtTensor3C EvtTensor3C::conj() const {
00076   EvtTensor3C temp;
00077   
00078   int i,j;
00079   
00080   for(i=0;i<3;i++) {
00081     for(j=0;j<3;j++) {
00082       temp.set(j,i,::conj(t[i][j]));
00083     }
00084   }
00085   return temp;
00086 }
00087 
00088 void EvtTensor3C::zero(){
00089   int i,j;
00090   for(i=0;i<3;i++){
00091     for(j=0;j<3;j++){
00092       t[i][j]=EvtComplex(0.0,0.0);
00093     }
00094   }
00095 }
00096 
00097 
00098 EvtTensor3C::EvtTensor3C(){
00099   
00100   int i,j;
00101   
00102   for(i=0;i<3;i++){
00103     for(j=0;j<3;j++){
00104       t[i][j]=EvtComplex(0.0,0.0);
00105     }
00106   }
00107 
00108 }
00109 
00110 EvtTensor3C EvtTensor3C::operator+=(const EvtTensor3C& t2) {
00111   
00112   int i,j;
00113   
00114   for (i=0;i<3;i++) {
00115     for (j=0;j<3;j++) {
00116       t[i][j]+=t2.t[i][j];
00117     }
00118   }
00119   return *this;
00120 }
00121 
00122 
00123 EvtTensor3C EvtTensor3C::operator-=(const EvtTensor3C& t2) {
00124   
00125   int i,j;
00126   
00127   for (i=0;i<3;i++) {
00128     for (j=0;j<3;j++) {
00129       t[i][j]-=t2.t[i][j];
00130     }
00131   }
00132   return *this;
00133 }
00134 
00135 
00136 
00137 EvtTensor3C EvtTensor3C::operator*=(const EvtComplex& c) {
00138 
00139   int i,j;
00140   
00141   for (i=0;i<3;i++) {
00142     for (j=0;j<3;j++) {
00143       t[i][j]*=c;
00144     }
00145   }
00146   return *this;
00147 }
00148 
00149 
00150 EvtTensor3C EvtTensor3C::operator*=(const double c){
00151 
00152   int i,j;
00153   
00154   for (i=0;i<3;i++) {
00155     for (j=0;j<3;j++) {
00156       t[i][j]*=EvtComplex(c);
00157     }
00158   }
00159   return *this;
00160 }
00161 
00162 
00163 
00164 
00165 EvtTensor3C directProd(const EvtVector3C& c1,const EvtVector3C& c2){ 
00166   EvtTensor3C temp;
00167   int i,j;
00168   
00169   for (i=0;i<3;i++) {
00170     for (j=0;j<3;j++) {
00171       temp.set(i,j,c1.get(i)*c2.get(j));
00172     }
00173   }
00174   return temp;
00175 }
00176 
00177 
00178 EvtTensor3C directProd(const EvtVector3C& c1,const EvtVector3R& c2){ 
00179   EvtTensor3C temp;
00180   int i,j;
00181   
00182   for (i=0;i<3;i++) {
00183     for (j=0;j<3;j++) {
00184       temp.set(i,j,c1.get(i)*c2.get(j));
00185     }
00186   }
00187   return temp;
00188 }
00189 
00190 
00191 EvtTensor3C directProd(const EvtVector3R& c1,const EvtVector3R& c2){ 
00192   EvtTensor3C temp;
00193   int i,j;
00194   
00195   for (i=0;i<3;i++) {
00196     for (j=0;j<3;j++) {
00197       temp.t[i][j]=EvtComplex(c1.get(i)*c2.get(j),0.0);
00198     }
00199   }
00200   return temp;
00201 }
00202 
00203 
00204 EvtTensor3C conj(const EvtTensor3C& t2) { 
00205   EvtTensor3C temp;
00206   
00207   int i,j;
00208 
00209   for(i=0;i<3;i++){ 
00210     for(j=0;j<3;j++){ 
00211       temp.set(i,j,::conj((t2.get(i,j))));
00212     }
00213   }
00214   
00215   return temp;
00216 }
00217 
00218 
00219 EvtTensor3C cont22(const EvtTensor3C& t1,const EvtTensor3C& t2){ 
00220   EvtTensor3C temp;
00221 
00222   int i,j;
00223   EvtComplex c;
00224   
00225   for(i=0;i<3;i++){ 
00226     for(j=0;j<3;j++){ 
00227       c=t1.get(i,0)*t2.get(j,0)+t1.get(i,1)*t2.get(j,1)
00228         +t1.get(i,2)*t2.get(j,2);
00229       temp.set(i,j,c);
00230     }
00231   }
00232   
00233   return temp;
00234 }
00235 
00236 EvtTensor3C cont11(const EvtTensor3C& t1,const EvtTensor3C& t2){ 
00237   EvtTensor3C temp;
00238   
00239   int i,j;
00240   EvtComplex c;
00241   
00242   for(i=0;i<3;i++){ 
00243     for(j=0;j<3;j++){ 
00244         c=t1.get(0,i)*t2.get(0,j)+t1.get(1,i)*t2.get(1,j)
00245           +t1.get(2,i)*t2.get(2,j);
00246         temp.set(i,j,c);
00247     }
00248   }
00249   
00250   return temp;
00251 }
00252 
00253 
00254 EvtVector3C EvtTensor3C::cont1(const EvtVector3C& v) const {
00255   EvtVector3C temp;
00256   
00257   int i;
00258   
00259   for(i=0;i<3;i++){
00260     temp.set(i,t[0][i]*v.get(0)+t[1][i]*v.get(1)
00261              +t[2][i]*v.get(2));
00262   }
00263   
00264   return temp;
00265 } 
00266 
00267 EvtVector3C EvtTensor3C::cont2(const EvtVector3C& v) const {
00268   EvtVector3C temp;
00269 
00270   int i;
00271   
00272   for(i=0;i<3;i++){
00273     temp.set(i,t[i][0]*v.get(0)+t[i][1]*v.get(1)
00274              +t[i][2]*v.get(2));
00275   }
00276   
00277   return temp;
00278 } 
00279 
00280 EvtVector3C EvtTensor3C::cont1(const EvtVector3R& v) const {
00281   EvtVector3C temp;
00282   
00283   int i;
00284   
00285   for(i=0;i<3;i++){
00286     temp.set(i,t[0][i]*v.get(0)+t[1][i]*v.get(1)
00287              +t[2][i]*v.get(2));
00288   }
00289 
00290   return temp;
00291 } 
00292 
00293 EvtVector3C EvtTensor3C::cont2(const EvtVector3R& v) const {
00294   EvtVector3C temp;
00295   
00296   int i;
00297   
00298   for(i=0;i<3;i++){
00299     temp.set(i,t[i][0]*v.get(0)+t[i][1]*v.get(1)
00300              +t[i][2]*v.get(2));
00301   }
00302   
00303   return temp;
00304 } 
00305 
00306 
00307 EvtTensor3C eps(const EvtVector3R& v){
00308 
00309   EvtTensor3C temp;
00310 
00311   temp.t[0][0]=0.0;
00312   temp.t[1][1]=0.0;
00313   temp.t[2][2]=0.0;
00314 
00315   temp.t[0][1]=v.get(2);
00316   temp.t[0][2]=-v.get(1);
00317 
00318   temp.t[1][0]=-v.get(2);
00319   temp.t[1][2]=v.get(0);
00320 
00321   temp.t[2][0]=v.get(1);
00322   temp.t[2][1]=-v.get(0);
00323 
00324   return temp;
00325 
00326 }
00327 
00328 
00329 
00330 const EvtTensor3C& EvtTensor3C::id(){
00331 
00332   static EvtTensor3C identity(1.0,1.0,1.0);
00333 
00334   return identity;
00335 
00336 }
00337 
00338 ostream& operator<<(ostream& s,const EvtTensor3C& v){
00339 
00340   s<<endl<<"("<<v.t[0][0]<<","<<v.t[0][1]<<","<<v.t[0][2]<<")";
00341   s<<endl<<"("<<v.t[1][0]<<","<<v.t[1][1]<<","<<v.t[1][2]<<")";
00342   s<<endl<<"("<<v.t[2][0]<<","<<v.t[2][1]<<","<<v.t[2][2]<<")"<<endl;
00343   
00344   return s;
00345 }
00346 
00347 
00348 EvtTensor3C rotateEuler(const EvtTensor3C& v,
00349                         double alpha,double beta,double gamma){
00350 
00351   EvtTensor3C tmp(v);
00352   tmp.applyRotateEuler(alpha,beta,gamma);
00353   return tmp;
00354 
00355 }
00356 
00357 
00358 void EvtTensor3C::applyRotateEuler(double phi,double theta,double ksi){
00359 
00360   EvtComplex temp[3][3];
00361   double sp,st,sk,cp,ct,ck;
00362   double r[3][3];
00363   int i,j,k;
00364 
00365   sp=sin(phi);
00366   st=sin(theta);
00367   sk=sin(ksi);
00368   cp=cos(phi);
00369   ct=cos(theta);
00370   ck=cos(ksi);
00371 
00372   r[0][0]=ck*ct*cp-sk*sp;
00373   r[0][1]=ck*ct*sp+sk*cp;
00374   r[0][2]=-ck*st;
00375 
00376   r[1][0]=-sk*ct*cp-ck*sp;
00377   r[1][1]=-sk*ct*sp+ck*cp;
00378   r[1][2]=sk*st;
00379 
00380   r[2][0]=st*cp;
00381   r[2][1]=st*sp;
00382   r[2][2]=ct;
00383 
00384   for(i=0;i<3;i++){
00385     for(j=0;j<3;j++){
00386       temp[i][j]=0.0;
00387       for(k=0;k<3;k++){
00388         temp[i][j]+=r[i][k]*t[k][j];
00389       }
00390     }
00391   }
00392 
00393   for(i=0;i<3;i++){
00394     for(j=0;j<3;j++){
00395       t[i][j]=0.0;
00396       for(k=0;k<3;k++){
00397         t[i][j]+=r[i][k]*temp[j][k];
00398       }
00399     }
00400   }
00401 
00402 
00403 }
00404 
00405 

Generated on Tue Nov 29 23:12:15 2016 for BOSS_7.0.2 by  doxygen 1.4.7