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

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: EvtGen/EvtVector4R.hh
00012 //
00013 // Description: Class to describe real 4 vectors
00014 //
00015 // Modification history:
00016 //
00017 //    DJL/RYD     September 25, 1996         Module created
00018 //
00019 //------------------------------------------------------------------------
00020 
00021 #ifndef EVTVECTOR4R_HH
00022 #define EVTVECTOR4R_HH
00023 
00024 #include <iostream>
00025 #include <math.h>
00026 
00027 class EvtVector3R;
00028 
00029 class EvtVector4R {
00030 
00031   friend EvtVector4R rotateEuler(const EvtVector4R& rs,
00032                                  double alpha,double beta,double gamma);
00033   friend EvtVector4R boostTo(const EvtVector4R& rs,
00034                              const EvtVector4R& p4);
00035   friend EvtVector4R boostTo(const EvtVector4R& rs,
00036                              const EvtVector3R& boost);
00037   
00038 
00039   inline friend EvtVector4R operator*(double d,const EvtVector4R& v2); 
00040   inline friend EvtVector4R operator*(const EvtVector4R& v2,double d); 
00041   inline friend EvtVector4R operator/(const EvtVector4R& v2,double d); 
00042   inline friend double operator*(const EvtVector4R& v1,const EvtVector4R& v2); 
00043   inline friend EvtVector4R operator+(const EvtVector4R& v1,const EvtVector4R& v2); 
00044   inline friend EvtVector4R operator-(const EvtVector4R& v1,const EvtVector4R& v2); 
00045   
00046 public:
00047   EvtVector4R(){}
00048   EvtVector4R(double e,double px,double py ,double pz);
00049   inline void set(int i,double d);
00050   inline void set(double e,double px,double py ,double pz);
00051   inline EvtVector4R& operator*=(double c);
00052   inline EvtVector4R& operator/=(double c);
00053   inline EvtVector4R& operator=(const EvtVector4R& v2);
00054   inline EvtVector4R& operator+=(const EvtVector4R& v2);
00055   inline EvtVector4R& operator-=(const EvtVector4R& v2);
00056   inline double get(int i) const;
00057   inline double cont(const EvtVector4R& v4) const;
00058   friend std::ostream& operator<<(std::ostream& s, const EvtVector4R& v);  
00059   double mass2() const;     
00060   double mass() const;
00061   void applyRotateEuler(double alpha,double beta,double gamma);
00062   void applyBoostTo(const EvtVector4R& p4);
00063   void applyBoostTo(const EvtVector3R& boost);
00064   EvtVector4R cross(const EvtVector4R& v2);
00065   double dot(const EvtVector4R& v2) const;
00066   double d3mag() const;
00067 
00068   // Added by AJB - calculate scalars in the rest frame of the current object
00069   double scalartripler3( const EvtVector4R& p1, const EvtVector4R& p2,
00070           const EvtVector4R& p3 ) const;
00071   double dotr3( const EvtVector4R& p1, const EvtVector4R& p2 ) const;
00072   double mag2r3( const EvtVector4R& p1 ) const;
00073   double magr3( const EvtVector4R& p1 ) const;
00074   double theta();
00075   double phi();
00076 
00077 private:
00078 
00079   double v[4];
00080 
00081   inline double Square( double x ) const { return x*x; }
00082 
00083 };
00084 
00085 
00086 inline EvtVector4R& EvtVector4R::operator=(const EvtVector4R& v2){
00087 
00088   v[0]=v2.v[0];
00089   v[1]=v2.v[1];
00090   v[2]=v2.v[2];
00091   v[3]=v2.v[3];
00092   
00093   return *this; 
00094 }
00095 
00096 inline EvtVector4R& EvtVector4R::operator+=(const EvtVector4R& v2){
00097 
00098   v[0]+=v2.v[0];
00099   v[1]+=v2.v[1];
00100   v[2]+=v2.v[2];
00101   v[3]+=v2.v[3];
00102   
00103   return *this; 
00104 }
00105 
00106 inline EvtVector4R& EvtVector4R::operator-=(const EvtVector4R& v2){
00107 
00108   v[0]-=v2.v[0];
00109   v[1]-=v2.v[1];
00110   v[2]-=v2.v[2];
00111   v[3]-=v2.v[3];
00112   
00113   return *this; 
00114 }
00115 
00116 inline double EvtVector4R::mass2() const{
00117 
00118   return v[0]*v[0]-v[1]*v[1]-v[2]*v[2]-v[3]*v[3];
00119 }
00120 
00121 inline EvtVector4R operator*(double c,const EvtVector4R& v2){
00122   
00123   return EvtVector4R(v2)*=c;
00124 }
00125 
00126 inline EvtVector4R operator*(const EvtVector4R& v2,double c){
00127   
00128   return EvtVector4R(v2)*=c;
00129 }
00130 
00131 inline EvtVector4R operator/(const EvtVector4R& v2,double c){
00132   
00133   return EvtVector4R(v2)/=c;
00134 }
00135 
00136 inline EvtVector4R& EvtVector4R::operator*=(double c){
00137 
00138   v[0]*=c;  
00139   v[1]*=c;  
00140   v[2]*=c;  
00141   v[3]*=c;  
00142 
00143   return *this;
00144 }
00145 
00146 inline EvtVector4R& EvtVector4R::operator/=(double c){
00147 
00148   double cinv=1.0/c;  
00149   v[0]*=cinv;  
00150   v[1]*=cinv;  
00151   v[2]*=cinv;  
00152   v[3]*=cinv;  
00153 
00154   return *this;
00155 }
00156 
00157 inline double operator*(const EvtVector4R& v1,const EvtVector4R& v2){
00158 
00159   return v1.v[0]*v2.v[0]-v1.v[1]*v2.v[1]-
00160          v1.v[2]*v2.v[2]-v1.v[3]*v2.v[3];
00161 }
00162 
00163 inline double EvtVector4R::cont(const EvtVector4R& v4) const {
00164   
00165   return v[0]*v4.v[0]-v[1]*v4.v[1]-
00166          v[2]*v4.v[2]-v[3]*v4.v[3];
00167 }
00168 
00169 inline EvtVector4R operator-(const EvtVector4R& v1,const EvtVector4R& v2){
00170   
00171   return EvtVector4R(v1)-=v2;
00172 }
00173 
00174 inline EvtVector4R operator+(const EvtVector4R& v1,const EvtVector4R& v2){
00175   
00176   return EvtVector4R(v1)+=v2;
00177 }
00178 
00179 inline double EvtVector4R::get(int i) const {
00180   return v[i];
00181 }
00182 
00183 inline void EvtVector4R::set(int i,double d){
00184   
00185   v[i]=d;
00186 }
00187 
00188 inline void EvtVector4R::set(double e,double p1,double p2, double p3){
00189 
00190   v[0]=e;
00191   v[1]=p1;
00192   v[2]=p2;
00193   v[3]=p3;
00194 }
00195 
00196 #endif
00197 

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