LCOV - code coverage report
Current view: top level - TEvtGen/EvtGen/EvtGenBase - EvtTensor3C.cpp (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 157 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 31 0.0 %

          Line data    Source code
       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: EvtTensor3C.cc
      12             : //
      13             : // Description: Implementation of 3 tensors.
      14             : //
      15             : // Modification history:
      16             : //
      17             : //    RYD       September 14, 1996       Module created
      18             : //
      19             : //------------------------------------------------------------------------
      20             : // 
      21             : #include "EvtGenBase/EvtPatches.hh"
      22             : #include <iostream>
      23             : #include <math.h>
      24             : #include "EvtGenBase/EvtComplex.hh"
      25             : #include "EvtGenBase/EvtVector3C.hh"
      26             : #include "EvtGenBase/EvtTensor3C.hh"
      27             : #include "EvtGenBase/EvtReport.hh"
      28             : using std::endl;
      29             : using std::ostream;
      30             : 
      31             : 
      32           0 : EvtTensor3C::~EvtTensor3C(){}
      33             : 
      34             : 
      35           0 : EvtTensor3C::EvtTensor3C( const EvtTensor3C& t1 ) {
      36             : 
      37             :   int i,j;
      38             :   
      39           0 :   for(i=0;i<3;i++) {
      40           0 :     for(j=0;j<3;j++) {
      41           0 :       t[i][j] = t1.t[i][j];
      42             :     }
      43             :   }
      44           0 : }
      45             : 
      46           0 : EvtTensor3C::EvtTensor3C(double d11, double d22, double d33) {
      47             : 
      48             :   int i,j;
      49             :   
      50           0 :   for(i=0;i<3;i++) {
      51           0 :     for(j=0;j<3;j++) {
      52           0 :       t[i][j] = 0.0;
      53             :     }
      54             :   }
      55             : 
      56           0 :   t[0][0]=d11;
      57           0 :   t[1][1]=d22;
      58           0 :   t[2][2]=d33;
      59             : 
      60           0 : }
      61             : 
      62             : 
      63             : 
      64             : EvtTensor3C& EvtTensor3C::operator=(const EvtTensor3C& t1) {
      65             :   int i,j;
      66             :   
      67           0 :   for(i=0;i<3;i++) {
      68           0 :     for(j=0;j<3;j++) {
      69           0 :       t[i][j] = t1.t[i][j];
      70             :     }
      71             :   }
      72           0 :   return *this;
      73             : }
      74             : 
      75             : EvtTensor3C EvtTensor3C::conj() const {
      76           0 :   EvtTensor3C temp;
      77             :   
      78             :   int i,j;
      79             :   
      80           0 :   for(i=0;i<3;i++) {
      81           0 :     for(j=0;j<3;j++) {
      82           0 :       temp.set(j,i,::conj(t[i][j]));
      83             :     }
      84             :   }
      85             :   return temp;
      86           0 : }
      87             : 
      88             : void EvtTensor3C::zero(){
      89             :   int i,j;
      90           0 :   for(i=0;i<3;i++){
      91           0 :     for(j=0;j<3;j++){
      92           0 :       t[i][j]=EvtComplex(0.0,0.0);
      93             :     }
      94             :   }
      95           0 : }
      96             : 
      97             : 
      98           0 : EvtTensor3C::EvtTensor3C(){
      99             :   
     100             :   int i,j;
     101             :   
     102           0 :   for(i=0;i<3;i++){
     103           0 :     for(j=0;j<3;j++){
     104           0 :       t[i][j]=EvtComplex(0.0,0.0);
     105             :     }
     106             :   }
     107             : 
     108           0 : }
     109             : 
     110             : EvtTensor3C EvtTensor3C::operator+=(const EvtTensor3C& t2) {
     111             :   
     112             :   int i,j;
     113             :   
     114           0 :   for (i=0;i<3;i++) {
     115           0 :     for (j=0;j<3;j++) {
     116           0 :       t[i][j]+=t2.t[i][j];
     117             :     }
     118             :   }
     119           0 :   return *this;
     120           0 : }
     121             : 
     122             : 
     123             : EvtTensor3C EvtTensor3C::operator-=(const EvtTensor3C& t2) {
     124             :   
     125             :   int i,j;
     126             :   
     127           0 :   for (i=0;i<3;i++) {
     128           0 :     for (j=0;j<3;j++) {
     129           0 :       t[i][j]-=t2.t[i][j];
     130             :     }
     131             :   }
     132           0 :   return *this;
     133           0 : }
     134             : 
     135             : 
     136             : 
     137             : EvtTensor3C EvtTensor3C::operator*=(const EvtComplex& c) {
     138             : 
     139             :   int i,j;
     140             :   
     141           0 :   for (i=0;i<3;i++) {
     142           0 :     for (j=0;j<3;j++) {
     143           0 :       t[i][j]*=c;
     144             :     }
     145             :   }
     146           0 :   return *this;
     147           0 : }
     148             : 
     149             : 
     150             : EvtTensor3C EvtTensor3C::operator*=(const double c){
     151             : 
     152             :   int i,j;
     153             :   
     154           0 :   for (i=0;i<3;i++) {
     155           0 :     for (j=0;j<3;j++) {
     156           0 :       t[i][j]*=EvtComplex(c);
     157             :     }
     158             :   }
     159           0 :   return *this;
     160           0 : }
     161             : 
     162             : 
     163             : 
     164             : 
     165             : EvtTensor3C EvtGenFunctions::directProd(const EvtVector3C& c1,const EvtVector3C& c2){ 
     166           0 :   EvtTensor3C temp;
     167             :   int i,j;
     168             :   
     169           0 :   for (i=0;i<3;i++) {
     170           0 :     for (j=0;j<3;j++) {
     171           0 :       temp.set(i,j,c1.get(i)*c2.get(j));
     172             :     }
     173             :   }
     174             :   return temp;
     175           0 : }
     176             : 
     177             : 
     178             : EvtTensor3C EvtGenFunctions::directProd(const EvtVector3C& c1,const EvtVector3R& c2){ 
     179           0 :   EvtTensor3C temp;
     180             :   int i,j;
     181             :   
     182           0 :   for (i=0;i<3;i++) {
     183           0 :     for (j=0;j<3;j++) {
     184           0 :       temp.set(i,j,c1.get(i)*c2.get(j));
     185             :     }
     186             :   }
     187             :   return temp;
     188           0 : }
     189             : 
     190             : 
     191             : EvtTensor3C EvtGenFunctions::directProd(const EvtVector3R& c1,const EvtVector3R& c2){ 
     192           0 :   EvtTensor3C temp;
     193             :   int i,j;
     194             :   
     195           0 :   for (i=0;i<3;i++) {
     196           0 :     for (j=0;j<3;j++) {
     197           0 :       temp.t[i][j]=EvtComplex(c1.get(i)*c2.get(j),0.0);
     198             :     }
     199             :   }
     200             :   return temp;
     201           0 : }
     202             : 
     203             : 
     204             : EvtTensor3C conj(const EvtTensor3C& t2) { 
     205           0 :   EvtTensor3C temp;
     206             :   
     207             :   int i,j;
     208             : 
     209           0 :   for(i=0;i<3;i++){ 
     210           0 :     for(j=0;j<3;j++){ 
     211           0 :       temp.set(i,j,::conj((t2.get(i,j))));
     212             :     }
     213             :   }
     214             :   
     215             :   return temp;
     216           0 : }
     217             : 
     218             : 
     219             : EvtTensor3C cont22(const EvtTensor3C& t1,const EvtTensor3C& t2){ 
     220           0 :   EvtTensor3C temp;
     221             : 
     222             :   int i,j;
     223           0 :   EvtComplex c;
     224             :   
     225           0 :   for(i=0;i<3;i++){ 
     226           0 :     for(j=0;j<3;j++){ 
     227           0 :       c=t1.get(i,0)*t2.get(j,0)+t1.get(i,1)*t2.get(j,1)
     228           0 :         +t1.get(i,2)*t2.get(j,2);
     229           0 :       temp.set(i,j,c);
     230             :     }
     231             :   }
     232             :   
     233             :   return temp;
     234           0 : }
     235             : 
     236             : EvtTensor3C cont11(const EvtTensor3C& t1,const EvtTensor3C& t2){ 
     237           0 :   EvtTensor3C temp;
     238             :   
     239             :   int i,j;
     240           0 :   EvtComplex c;
     241             :   
     242           0 :   for(i=0;i<3;i++){ 
     243           0 :     for(j=0;j<3;j++){ 
     244           0 :         c=t1.get(0,i)*t2.get(0,j)+t1.get(1,i)*t2.get(1,j)
     245           0 :           +t1.get(2,i)*t2.get(2,j);
     246           0 :         temp.set(i,j,c);
     247             :     }
     248             :   }
     249             :   
     250             :   return temp;
     251           0 : }
     252             : 
     253             : 
     254             : EvtVector3C EvtTensor3C::cont1(const EvtVector3C& v) const {
     255           0 :   EvtVector3C temp;
     256             :   
     257             :   int i;
     258             :   
     259           0 :   for(i=0;i<3;i++){
     260           0 :     temp.set(i,t[0][i]*v.get(0)+t[1][i]*v.get(1)
     261           0 :              +t[2][i]*v.get(2));
     262             :   }
     263             :   
     264             :   return temp;
     265           0 : } 
     266             : 
     267             : EvtVector3C EvtTensor3C::cont2(const EvtVector3C& v) const {
     268           0 :   EvtVector3C temp;
     269             : 
     270             :   int i;
     271             :   
     272           0 :   for(i=0;i<3;i++){
     273           0 :     temp.set(i,t[i][0]*v.get(0)+t[i][1]*v.get(1)
     274           0 :              +t[i][2]*v.get(2));
     275             :   }
     276             :   
     277             :   return temp;
     278           0 : } 
     279             : 
     280             : EvtVector3C EvtTensor3C::cont1(const EvtVector3R& v) const {
     281           0 :   EvtVector3C temp;
     282             :   
     283             :   int i;
     284             :   
     285           0 :   for(i=0;i<3;i++){
     286           0 :     temp.set(i,t[0][i]*v.get(0)+t[1][i]*v.get(1)
     287           0 :              +t[2][i]*v.get(2));
     288             :   }
     289             : 
     290             :   return temp;
     291           0 : } 
     292             : 
     293             : EvtVector3C EvtTensor3C::cont2(const EvtVector3R& v) const {
     294           0 :   EvtVector3C temp;
     295             :   
     296             :   int i;
     297             :   
     298           0 :   for(i=0;i<3;i++){
     299           0 :     temp.set(i,t[i][0]*v.get(0)+t[i][1]*v.get(1)
     300           0 :              +t[i][2]*v.get(2));
     301             :   }
     302             :   
     303             :   return temp;
     304           0 : } 
     305             : 
     306             : 
     307             : EvtTensor3C EvtGenFunctions::eps(const EvtVector3R& v){
     308             : 
     309           0 :   EvtTensor3C temp;
     310             : 
     311           0 :   temp.t[0][0]=0.0;
     312           0 :   temp.t[1][1]=0.0;
     313           0 :   temp.t[2][2]=0.0;
     314             : 
     315           0 :   temp.t[0][1]=v.get(2);
     316           0 :   temp.t[0][2]=-v.get(1);
     317             : 
     318           0 :   temp.t[1][0]=-v.get(2);
     319           0 :   temp.t[1][2]=v.get(0);
     320             : 
     321           0 :   temp.t[2][0]=v.get(1);
     322           0 :   temp.t[2][1]=-v.get(0);
     323             : 
     324             :   return temp;
     325             : 
     326           0 : }
     327             : 
     328             : 
     329             : 
     330             : const EvtTensor3C& EvtTensor3C::id(){
     331             : 
     332           0 :   static EvtTensor3C identity(1.0,1.0,1.0);
     333             : 
     334           0 :   return identity;
     335             : 
     336           0 : }
     337             : 
     338             : ostream& operator<<(ostream& s,const EvtTensor3C& v){
     339             : 
     340           0 :   s<<endl<<"("<<v.t[0][0]<<","<<v.t[0][1]<<","<<v.t[0][2]<<")";
     341           0 :   s<<endl<<"("<<v.t[1][0]<<","<<v.t[1][1]<<","<<v.t[1][2]<<")";
     342           0 :   s<<endl<<"("<<v.t[2][0]<<","<<v.t[2][1]<<","<<v.t[2][2]<<")"<<endl;
     343             :   
     344           0 :   return s;
     345             : }
     346             : 
     347             : 
     348             : EvtTensor3C EvtGenFunctions::rotateEuler(const EvtTensor3C& v,
     349             :                         double alpha,double beta,double gamma){
     350             : 
     351           0 :   EvtTensor3C tmp(v);
     352           0 :   tmp.applyRotateEuler(alpha,beta,gamma);
     353             :   return tmp;
     354             : 
     355           0 : }
     356             : 
     357             : 
     358             : void EvtTensor3C::applyRotateEuler(double phi,double theta,double ksi){
     359             : 
     360           0 :   EvtComplex temp[3][3];
     361             :   double sp,st,sk,cp,ct,ck;
     362           0 :   double r[3][3];
     363             :   int i,j,k;
     364             : 
     365           0 :   sp=sin(phi);
     366           0 :   st=sin(theta);
     367           0 :   sk=sin(ksi);
     368           0 :   cp=cos(phi);
     369           0 :   ct=cos(theta);
     370           0 :   ck=cos(ksi);
     371             : 
     372           0 :   r[0][0]=ck*ct*cp-sk*sp;
     373           0 :   r[0][1]=ck*ct*sp+sk*cp;
     374           0 :   r[0][2]=-ck*st;
     375             : 
     376           0 :   r[1][0]=-sk*ct*cp-ck*sp;
     377           0 :   r[1][1]=-sk*ct*sp+ck*cp;
     378           0 :   r[1][2]=sk*st;
     379             : 
     380           0 :   r[2][0]=st*cp;
     381           0 :   r[2][1]=st*sp;
     382           0 :   r[2][2]=ct;
     383             : 
     384           0 :   for(i=0;i<3;i++){
     385           0 :     for(j=0;j<3;j++){
     386           0 :       temp[i][j]=0.0;
     387           0 :       for(k=0;k<3;k++){
     388           0 :         temp[i][j]+=r[i][k]*t[k][j];
     389             :       }
     390             :     }
     391             :   }
     392             : 
     393           0 :   for(i=0;i<3;i++){
     394           0 :     for(j=0;j<3;j++){
     395           0 :       t[i][j]=0.0;
     396           0 :       for(k=0;k<3;k++){
     397           0 :         t[i][j]+=r[i][k]*temp[j][k];
     398             :       }
     399             :     }
     400             :   }
     401             : 
     402             : 
     403           0 : }
     404             : 
     405             : 

Generated by: LCOV version 1.11