Back to index

PHVector.C

 
//--------------------------------------------------------------------------------------- 
// Class:  PHVector header 
// 
// Created by:  Jane M. Burward-Hoy and Federica Messer 
// 
// Purpose:  The Phenix 3D vector class is privately derived from HepVector3D base class. 
//           The constructor, destructor, copy, and assignment constructor functions  
//           are declared here.  
// 
// Last update:  10/19/99 
// 
//------------------------------------------------------------------------------ 
#include "PHVector.h" 
#include "PHGeometron.h" 
 
PHVector::PHVector() 
{ 
  setX(0.); 
  setY(0.); 
  setZ(0.); 
} 
  
PHVector::PHVector(double x, double y, double z ) 
{ 
  setX(x); 
  setY(y); 
  setZ(z); 
} 
  
 
PHVector::~PHVector() 
{ 
} 
 
 
PHVector::PHVector(const PHVector &v) 
{ 
  setX(v.x()); 
  setY(v.y()); 
  setZ(v.z()); 
} 
PHVector::PHVector(const PHPoint &v) 
{ 
  setX(v.getX()); 
  setY(v.getY()); 
  setZ(v.getZ()); 
} 
 
PHVector::PHVector(const HepVector3D &v) 
{ 
  setX(v.x()); 
  setY(v.y()); 
  setZ(v.z()); 
} 
PHVector::PHVector(const Hep3Vector &v) 
{ 
  setX(v.x()); 
  setY(v.y()); 
  setZ(v.z()); 
} 
 
PHVector& PHVector::operator=(const PHVector &v)  
{ 
  setX(v.x()); 
  setY(v.y()); 
  setZ(v.z()); 
  return *this; 
}  
PHVector& PHVector::operator=(const PHPoint &v)  
{ 
  setX(v.getX()); 
  setY(v.getY()); 
  setZ(v.getZ()); 
  return *this; 
}  
 
PHVector& PHVector::operator=(const HepVector3D &v) 
{ 
  setX(v.x()); 
  setY(v.y()); 
  setZ(v.z()); 
  return *this; 
}  
 
PHVector& PHVector::operator=(const Hep3Vector &v) 
{ 
  setX(v.x()); 
  setY(v.y()); 
  setZ(v.z()); 
  return *this; 
} 
 
PHVector PHVector::operator- (const PHVector &p) const 
{ 
  PHVector newVector; 
  newVector.setX(getX()-p.x()); 
  newVector.setY(getY()-p.y()); 
  newVector.setZ(getZ()-p.z()); 
  return newVector; 
} 
 
PHVector PHVector::operator- () 
{ 
 setX(-getX()); 
 setY(-getY()); 
 setZ(-getZ()); 
 return *this; 
} 
 
PHVector PHVector::operator+ (const PHVector &p) const 
{ 
  PHVector newVector; 
  newVector.setX(getX()+p.x()); 
  newVector.setY(getY()+p.y()); 
  newVector.setZ(getZ()+p.z()); 
  return newVector; 
} 
 
PHVector PHVector::operator* (const double &a) const 
{ 
  PHVector newVector; 
  newVector.setX(getX()*a); 
  newVector.setY(getY()*a); 
  newVector.setZ(getZ()*a); 
  return newVector; 
} 
 
double PHVector::dot(const PHVector &v) const 
{ 
  PHGeometron* geometry = PHGeometron::instance(); 
  return (geometry->dot(*this,v)); 
} 
 
PHVector PHVector::cross(const PHVector &v) const 
{ 
  PHGeometron* geometry = PHGeometron::instance(); 
  return (geometry->cross(*this,v)); 
} 
 
double PHVector::angle(const PHVector& v) const 
{ 
  PHGeometron* geometry = PHGeometron::instance(); 
  return geometry->angle(*this,v); 
} 
/* 
PHVector PHVector::orthogonal() const 
{ 
  PHVector newVector; 
  newVector = (PHVector)(Hep3Vector::orthogonal()); 
  return newVector; 
} 
*/ 
double PHVector::length() const 
{ 
  return sqrt(pow(x(),2)+ pow(y(),2)+ pow(z(),2)); 
} 
 
double PHVector::lengthSqr() const 
{ 
  return (pow(x(),2)+ pow(y(),2) + pow(z(),2)); 
} 
 
void PHVector::normalize() 
{   
  double a, b, c; 
  a = b = c = 1.0; 
 
  if (lengthSqr() != 0.0) { 
      if (x() < 0.) a = -1.0; 
      if (y() < 0.) b = -1.0; 
      if (z() < 0.) c = -1.0; 
      setX(a * sqrt( pow( x(),2 )/lengthSqr() ) ); 
      setY(b * sqrt( pow( y(),2 )/lengthSqr() ) ); 
      setZ(c * sqrt( pow( z(),2 )/lengthSqr() ) ); 
  }else{ 
    cout << "PHVector::normalize() -- Length of the Vector is 0.0" << endl; 
  } 
} 
 
 
ostream& operator<<(ostream& os, const PHVector &p) 
{ 
  return (os << "( " << p.getX() << ", " << p.getY() << ", " << p.getZ() << " ) "); 
} 
 
void PHVector::print() const 
{ 
  cout << "( " << getX() << ",  " << getY() << ",  " << getZ() << "  ) " << endl; 
} 

Back to index