ROOT logo
/***************************************************************************
 *
 * $Id$
 *
 * Author: Brian Lasiuk, Thomas Ullrich, April 1998
 ***************************************************************************
 *
 * Description:  
 *
 * Remarks:   Since not all compilers support member templates
 *            we have to specialize the templated member on these
 *            platforms. If member templates are not supported the
 *            ST_NO_MEMBER_TEMPLATES flag has to be set. tu.
 *
 ***************************************************************************
 *
 * $Log$
 * Revision 1.1.1.1  2007/04/25 15:38:41  panos
 * Importing the HBT code dir
 *
 * Revision 1.1.1.1  2007/03/07 10:14:49  mchojnacki
 * First version on CVS
 *
 * Revision 1.15  2005/09/22 20:09:20  fisyak
 * Make AliFmLorentzVector persistent
 *
 * Revision 1.14  2005/07/19 22:27:11  perev
 * Cleanup
 *
 * Revision 1.13  2005/07/06 18:49:57  fisyak
 * Replace AliFmHelixD, AliFmLorentzVectorD,AliFmLorentzVectorF,AliFmMatrixD,AliFmMatrixF,AliFmPhysicalHelixD,AliFmThreeVectorD,AliFmThreeVectorF by templated version
 *
 * Revision 1.12  2005/03/28 06:03:41  perev
 * Defence FPE added
 *
 * Revision 1.11  2004/12/02 20:07:32  fine
 * define the valid method for both flavor of AliFmThreeVector
 *
 * Revision 1.10  2003/10/30 20:06:46  perev
 * Check of quality added
 *
 * Revision 1.9  2003/09/02 17:59:35  perev
 * gcc 3.2 updates + WarnOff
 *
 * Revision 1.8  2002/06/21 17:47:37  genevb
 * Added pseudoProduct
 *
 * Revision 1.7  2000/01/04 19:56:05  ullrich
 * Added cpp macro for CINT.
 *
 * Revision 1.6  1999/12/21 15:14:31  ullrich
 * Modified to cope with new compiler version on Sun (CC5.0).
 *
 * Revision 1.5  1999/10/15 15:46:54  ullrich
 * Changed output format in operator<<
 *
 * Revision 1.4  1999/06/04 18:00:05  ullrich
 * Added new constructor which takes C-style array as argument.
 * New operators operator() and operator[] which can be used
 * as lvalues.
 *
 * Revision 1.3  1999/02/17 11:42:19  ullrich
 * Removed specialization for 'long double'.
 *
 * Revision 1.2  1999/02/14 23:11:48  fisyak
 * Fixes for Rootcint
 *
 * Revision 1.1  1999/01/30 03:59:05  fisyak
 * Root Version of AliFmarClassLibrary
 *
 * Revision 1.1  1999/01/23 00:28:04  ullrich
 * Initial Revision
 *
 **************************************************************************/
#ifndef ST_THREE_VECTOR_HH
#define ST_THREE_VECTOR_HH
#ifdef __ROOT__
#include "Rtypes.h"
#endif
#ifndef __CINT__
#include <iostream>
#include <fstream>
#include <math.h>
#ifdef GNU_GCC
#    include <stddef.h>
#endif
#if defined (__SUNPRO_CC) && __SUNPRO_CC < 0x500
#    include <stdcomp.h>
#endif
#ifndef ST_NO_EXCEPTIONS
#    include <stdexcept>
#    if !defined(ST_NO_NAMESPACES)
using std::out_of_range;
#    endif
#endif
#endif // __CINT__

#ifdef WIN32
#include "gcc2vs.h"
#endif

class TRootIOCtor;//nic nie rozumiem
using namespace std;


template<class T> class AliFmThreeVector {
public:    
    AliFmThreeVector(T = 0, T = 0, T = 0);
  //                     ROOT_VERSION(5,03,01)
#if ROOT_VERSION_CODE >= 328449
   AliFmThreeVector(TRootIOCtor*) : mX1(0), mX2(0), mX3(0) {}
#endif
    virtual ~AliFmThreeVector();

#ifndef ST_NO_MEMBER_TEMPLATES
    template<class X> AliFmThreeVector(const AliFmThreeVector<X>&);
    template<class X> AliFmThreeVector(const X*);  
    template<class X> AliFmThreeVector<T>& operator=(const AliFmThreeVector<X>&);
    // AliFmThreeVector(const AliFmThreeVector<T>&);                use default
    // AliFmThreeVector<T>& operator=(const AliFmThreeVector<T>&);  use default
#else    
    AliFmThreeVector(const AliFmThreeVector<float>&);
    AliFmThreeVector(const AliFmThreeVector<double>&);
    
    AliFmThreeVector(const float*); 
    AliFmThreeVector(const double*);
    
    AliFmThreeVector<T>& operator=(const AliFmThreeVector<float>&);
    AliFmThreeVector<T>& operator=(const AliFmThreeVector<double>&);
#endif
    
    void SetX(T);
    void SetY(T);
    void SetZ(T);

    void SetPhi(T);
    void SetTheta(T);
    void SetMag(T);
    void SetMagnitude(T);
    
    T   x()                        const;
    T   y()                        const;
    T   z()                        const;
    T   Theta()                    const;
    T   CosTheta()                 const;
    T   Phi()                      const;
    T   Perp()                     const;
    T   Perp2()                    const;
    T   Magnitude()                const;
    T   Mag()                      const;
    T   Mag2()                     const;
    T   PseudoRapidity()           const;
    T   operator() (size_t)        const;
    T   operator[] (size_t)        const;

    T&  operator() (size_t);
    T&  operator[] (size_t);
    
    T   MassHypothesis(T mass)     const;
    
    AliFmThreeVector<T>  unit()       const;
    AliFmThreeVector<T>  orthogonal() const;

    void  RotateX(T);
    void  RotateY(T);
    void  RotateZ(T);
    
    AliFmThreeVector<T>  operator- ();
    AliFmThreeVector<T>  operator+ ();
    AliFmThreeVector<T>& operator*= (double);
    AliFmThreeVector<T>& operator/= (double);
    AliFmThreeVector<T>  PseudoProduct(double,double,double) const;
 
#ifndef ST_NO_MEMBER_TEMPLATES
    template<class X> T                Angle(const AliFmThreeVector<X>&) const;
    template<class X> AliFmThreeVector<T> Cross(const AliFmThreeVector<X>&) const;
    template<class X> T                Dot  (const AliFmThreeVector<X>&) const;
    template<class X> AliFmThreeVector<T> PseudoProduct(const AliFmThreeVector<X>&) const;
    
    template<class X> bool operator == (const AliFmThreeVector<X>& v) const;
    template<class X> bool operator != (const AliFmThreeVector<X>& v) const;

    template<class X> AliFmThreeVector<T>& operator+= (const AliFmThreeVector<X>&);
    template<class X> AliFmThreeVector<T>& operator-= (const AliFmThreeVector<X>&);
#else    
    T                Angle(const AliFmThreeVector<float>&) const;
    AliFmThreeVector<T> Cross(const AliFmThreeVector<float>&) const;
    T                Dot  (const AliFmThreeVector<float>&) const;
    AliFmThreeVector<T> PseudoProduct(const AliFmThreeVector<float>&) const;
    
    T                Angle(const AliFmThreeVector<double>&) const;
    T                Dot  (const AliFmThreeVector<double>&) const;
    AliFmThreeVector<T> Cross(const AliFmThreeVector<double>&) const;
    AliFmThreeVector<T> PseudoProduct(const AliFmThreeVector<double>&) const;

    bool operator == (const AliFmThreeVector<float>& v) const;
    bool operator != (const AliFmThreeVector<float>& v) const;
    AliFmThreeVector<T>& operator+= (const AliFmThreeVector<float>&);
    AliFmThreeVector<T>& operator-= (const AliFmThreeVector<float>&);
    
    bool operator == (const AliFmThreeVector<double>& v) const;
    bool operator != (const AliFmThreeVector<double>& v) const;
    AliFmThreeVector<T>& operator+= (const AliFmThreeVector<double>&);
    AliFmThreeVector<T>& operator-= (const AliFmThreeVector<double>&);
#endif
    int             Valid(double world = 1.e+5) const;
    int               Bad(double world = 1.e+5) const;
protected:
    T    mX1, mX2, mX3;  // Vector components
#ifdef __ROOT__
  ClassDef(AliFmThreeVector,3)
#endif /* __ROOT__ */
};

#ifndef __CINT__
//
//        Implementation of member functions
//
template<class T>
inline AliFmThreeVector<T>::AliFmThreeVector(T ax, T ay, T az)
    : mX1(ax), mX2(ay), mX3(az) {/* nop */}
template<class T>
inline AliFmThreeVector<T>::~AliFmThreeVector() {/* nop */}

template<class T>
inline void AliFmThreeVector<T>::SetX(T ax) {mX1 = ax;}

template<class T>
inline void AliFmThreeVector<T>::SetY(T ay) {mX2 = ay;}

template<class T>
inline void AliFmThreeVector<T>::SetZ(T az) {mX3 = az;}

template<class T>
void AliFmThreeVector<T>::SetPhi(T aAngle)
{
    double  r = Magnitude();
    double th = Theta();
    
    mX1 = r*sin(th)*cos(aAngle);
    mX2 = r*sin(th)*sin(aAngle);
}

template <class T>
void AliFmThreeVector<T>::SetTheta(T aAngle)
{
    double r  = Magnitude();
    double ph = Phi();

    mX1 = r*sin(aAngle)*cos(ph);
    mX2 = r*sin(aAngle)*sin(ph);
    mX3 = r*cos(aAngle);
}

template <class T>
void AliFmThreeVector<T>::SetMagnitude(T r)
{
    double th = Theta();
    double ph = Phi();
    
    mX1 = r*sin(th)*cos(ph);
    mX2 = r*sin(th)*sin(ph);
    mX3 = r*cos(th);
}

template <class T>
void AliFmThreeVector<T>::SetMag(T amag)
{
    SetMagnitude(amag);
}

template<class T>
inline T AliFmThreeVector<T>::x() const {return mX1;}

template<class T>
inline T AliFmThreeVector<T>::y() const {return mX2;}

template<class T>
inline T AliFmThreeVector<T>::z() const {return mX3;}

template<class T>
inline T AliFmThreeVector<T>::Theta() const
{
  return acos(CosTheta());
}

template<class T>
inline T AliFmThreeVector<T>::CosTheta() const
{
  return mX3/(Mag()+1e-20);
}

template<class T>
inline T AliFmThreeVector<T>::Phi() const
{
    return atan2(mX2,mX1);
}

template<class T>
inline T AliFmThreeVector<T>::PseudoRapidity() const
{
    //
    // change code to more optimal:
    // double m = Mag();
    // return 0.5*::log( (m+z())/(m-z()) );
    double tmp = tan(Theta()/2.); if (tmp <=0.) return 1e20;
    return -::log(tmp);
}

template<class T>
inline AliFmThreeVector<T> AliFmThreeVector<T>::unit() const
{
    double tmp = Mag(); if (tmp<=0.) tmp = 1e-20;
    return *this/tmp;
}

template <class T>
T AliFmThreeVector<T>::MassHypothesis(T mass) const
{
    return ::sqrt((*this)*(*this) + mass*mass);
}

template <class T>
AliFmThreeVector<T> AliFmThreeVector<T>::orthogonal() const
{
    // Direct copy from CLHEP--it is probably better to
    // use your own dot/cross product code...
    double ax = (mX1 < 0.0) ? -mX1 : mX1;
    double ay = (mX2 < 0.0) ? -mX2 : mX2;
    double az = (mX3 < 0.0) ? -mX3 : mX3;
    
    if(ax<ay)
	return ax < az ? AliFmThreeVector<T>(0,mX3,-mX2) :  AliFmThreeVector<T>(mX2,-mX1,0);
    else
	return  mX2 < mX3 ? AliFmThreeVector<T>(-mX3,0,mX1) :  AliFmThreeVector<T>(mX2,-mX1,0);
}

template <class T>
void AliFmThreeVector<T>::RotateX(T aAngle)
{
    // may in the future make use of the AliFmRotation class!
    double yPrime = cos(aAngle)*mX2 - sin(aAngle)*mX3;
    double zPrime = sin(aAngle)*mX2 + cos(aAngle)*mX3;

    mX2 = yPrime;
    mX3 = zPrime;
}

template <class T>
void AliFmThreeVector<T>::RotateY(T aAngle)
{
    // may in the future make use of the AliFmRotation class!
    double zPrime = cos(aAngle)*mX3 - sin(aAngle)*mX1;
    double xPrime = sin(aAngle)*mX3 + cos(aAngle)*mX1;

    mX1 = xPrime;
    mX3 = zPrime;
}

template <class T>
void AliFmThreeVector<T>::RotateZ(T aAngle)
{
    // may in the future make use of the AliFmRotation class!
    double xPrime = cos(aAngle)*mX1 - sin(aAngle)*mX2;
    double yPrime = sin(aAngle)*mX1 + cos(aAngle)*mX2;

    mX1 = xPrime;
    mX2 = yPrime;
}

template<class T>
inline T AliFmThreeVector<T>::Perp() const
{
    return ::sqrt(mX1*mX1+mX2*mX2);
}

template<class T>
inline T AliFmThreeVector<T>::Perp2() const
{
    return mX1*mX1+mX2*mX2;
}

template<class T>
inline T AliFmThreeVector<T>::Magnitude() const
{
    return Mag();
}

template<class T>
inline T AliFmThreeVector<T>::Mag() const
{
    return ::sqrt(mX1*mX1+mX2*mX2+mX3*mX3);
}

template<class T>
inline T AliFmThreeVector<T>::Mag2() const
{
    return mX1*mX1+mX2*mX2+mX3*mX3;
}

template<class T>
inline T AliFmThreeVector<T>::operator() (size_t i) const
{
    if (i <= 2)  return (&mX1)[i];
#ifndef ST_NO_EXCEPTIONS
    throw out_of_range("AliFmThreeVector<T>::operator(): bad index");
#else
    cerr << "AliFmThreeVector<T>::operator(): bad index" << endl;
#endif
    return 0;
}

template<class T>
inline T& AliFmThreeVector<T>::operator() (size_t i) 
{
    if (i <= 2)  return (&mX1)[i];
#ifndef ST_NO_EXCEPTIONS
    throw out_of_range("AliFmThreeVector<T>::operator(): bad index");
#else
    cerr << "AliFmThreeVector<T>::operator(): bad index" << endl;
    return mX1;
#endif
}

template<class T>
inline T AliFmThreeVector<T>::operator[] (size_t i) const
{
    if (i <= 2)  return (&mX1)[i];
#ifndef ST_NO_EXCEPTIONS
      throw out_of_range("AliFmThreeVector<T>::operator[]: bad index"); 
#else
      cerr << "AliFmThreeVector<T>::operator[]: bad index" << endl;
#endif
      return 0;
}

template<class T>
inline T &AliFmThreeVector<T>::operator[] (size_t i) 
{
    if (i <= 2)  return (&mX1)[i];
#ifndef ST_NO_EXCEPTIONS
      throw out_of_range("AliFmThreeVector<T>::operator[]: bad index"); 
#else
      cerr << "AliFmThreeVector<T>::operator[]: bad index" << endl;
      return mX1;
#endif
}

template<class T>
inline AliFmThreeVector<T>& AliFmThreeVector<T>::operator*= (double c)
{
    mX1 *= c; mX2 *= c; mX3 *= c;
    return *this;
}

template<class T>
inline AliFmThreeVector<T>& AliFmThreeVector<T>::operator/= (double c)
{
    mX1 /= c; mX2 /= c; mX3 /= c;
    return *this;
}

template<class T>
inline AliFmThreeVector<T>
AliFmThreeVector<T>::PseudoProduct(double ax,double ay,double az) const
{
    return AliFmThreeVector<T>(mX1*ax,mX2*ay,mX3*az);
}

template<class T>
AliFmThreeVector<T> AliFmThreeVector<T>::operator- ()
{
    return AliFmThreeVector<T>(-mX1, -mX2, -mX3);
}

template<class T>
AliFmThreeVector<T> AliFmThreeVector<T>::operator+ ()
{
    return *this;
}

#ifndef ST_NO_MEMBER_TEMPLATES
#ifndef WIN32

template<class T>
template<class X>
inline AliFmThreeVector<T>::AliFmThreeVector(const AliFmThreeVector<X>& v)
    : mX1(v.x()), mX2(v.y()), mX3(v.z()) {/* nop */}

template<class T>
template<class X>
inline AliFmThreeVector<T>::AliFmThreeVector(const X *a)
{
    mX1 = a[0];
    mX2 = a[1];
    mX3 = a[2];
}

template<class T>
template<class X>
inline AliFmThreeVector<T>&
AliFmThreeVector<T>::operator=(const AliFmThreeVector<X>& v)
{
    mX1 = v.x();  mX2 = v.y();  mX3 = v.z();
    return *this;
}

template<class T>
template<class X>
inline bool AliFmThreeVector<T>::operator== (const AliFmThreeVector<X>& v) const
{
    return mX1 == v.x() && mX2 == v.y() && mX3 == v.z();
}

template<class T>
template<class X>
inline bool AliFmThreeVector<T>::operator!= (const AliFmThreeVector<X>& v) const
{
    return !(*this == v);
}

template<class T>
template<class X>
inline AliFmThreeVector<T>&
AliFmThreeVector<T>::operator+= (const AliFmThreeVector<X>& v)
{
    mX1 += v.x(); mX2 += v.y(); mX3 += v.z();
    return *this;
}

template<class T>
template<class X>
inline AliFmThreeVector<T>&
AliFmThreeVector<T>::operator-= (const AliFmThreeVector<X>& v)
{
    mX1 -= v.x(); mX2 -= v.y(); mX3 -= v.z();
    return *this;
}

template<class T>
template<class X>
inline T AliFmThreeVector<T>::Dot(const AliFmThreeVector<X>& v) const
{
    return mX1*v.x() + mX2*v.y() + mX3*v.z();
}

template<class T>
template<class X>
inline AliFmThreeVector<T>
AliFmThreeVector<T>::Cross(const AliFmThreeVector<X>& v) const
{
    return AliFmThreeVector<T>(mX2*v.z() - mX3*v.y(),
			    mX3*v.x() - mX1*v.z(),
			    mX1*v.y() - mX2*v.x());
}

template<class T>
template<class X>
inline T AliFmThreeVector<T>::Angle(const AliFmThreeVector<X>& vec) const
{
    double norm = this->Mag2()*vec.Mag2(); 
    
    return norm > 0 ? acos(this->Dot(vec)/(::sqrt(norm))) : 0;
}

template<class T>
template<class X>
inline AliFmThreeVector<T>
AliFmThreeVector<T>::PseudoProduct(const AliFmThreeVector<X>& v) const
{
    return this->PseudoProduct(v.x(),v.y(),v.z());
}

#endif
#else

template<class T>
inline AliFmThreeVector<T>::AliFmThreeVector(const AliFmThreeVector<float>& v)
    : mX1(v.x()), mX2(v.y()), mX3(v.z()) {/* nop */}

template<class T>
inline AliFmThreeVector<T>::AliFmThreeVector(const AliFmThreeVector<double>& v)
    : mX1(v.x()), mX2(v.y()), mX3(v.z()) {/* nop */}

template<class T>
inline AliFmThreeVector<T>::AliFmThreeVector(const float *a)
{
    mX1 = a[0];
    mX2 = a[1];
    mX3 = a[2];
}

template<class T>
inline AliFmThreeVector<T>::AliFmThreeVector(const double *a)
{
    mX1 = a[0];
    mX2 = a[1];
    mX3 = a[2];
}

template<class T>
inline AliFmThreeVector<T>&
AliFmThreeVector<T>::operator=(const AliFmThreeVector<float>& v)
{
    mX1 = v.x();  mX2 = v.y();  mX3 = v.z();
    return *this;
}

template<class T>
inline AliFmThreeVector<T>&
AliFmThreeVector<T>::operator=(const AliFmThreeVector<double>& v)
{
    mX1 = v.x();  mX2 = v.y();  mX3 = v.z();
    return *this;
}

template<class T>
inline bool
AliFmThreeVector<T>::operator== (const AliFmThreeVector<float>& v) const
{
    return mX1 == v.x() && mX2 == v.y() && mX3 == v.z();
}

template<class T>
inline bool
AliFmThreeVector<T>::operator== (const AliFmThreeVector<double>& v) const
{
    return mX1 == v.x() && mX2 == v.y() && mX3 == v.z();
}

template<class T>
inline bool
AliFmThreeVector<T>::operator!= (const AliFmThreeVector<float>& v) const
{
    return !(*this == v);
}

template<class T>
inline bool
AliFmThreeVector<T>::operator!= (const AliFmThreeVector<double>& v) const
{
    return !(*this == v);
}

template<class T>
inline AliFmThreeVector<T>&
AliFmThreeVector<T>::operator+= (const AliFmThreeVector<float>& v)
{
    mX1 += v.x(); mX2 += v.y(); mX3 += v.z();
    return *this;
}

template<class T>
inline AliFmThreeVector<T>&
AliFmThreeVector<T>::operator+= (const AliFmThreeVector<double>& v)
{
    mX1 += v.x(); mX2 += v.y(); mX3 += v.z();
    return *this;
}

template<class T>
inline AliFmThreeVector<T>&
AliFmThreeVector<T>::operator-= (const AliFmThreeVector<float>& v)
{
    mX1 -= v.x(); mX2 -= v.y(); mX3 -= v.z();
    return *this;
}

template<class T>
inline AliFmThreeVector<T>&
AliFmThreeVector<T>::operator-= (const AliFmThreeVector<double>& v)
{
    mX1 -= v.x(); mX2 -= v.y(); mX3 -= v.z();
    return *this;
}

template<class T>
inline T AliFmThreeVector<T>::Dot(const AliFmThreeVector<float>& v) const
{
    return mX1*v.x() + mX2*v.y() + mX3*v.z();
}

template<class T>
inline T AliFmThreeVector<T>::Dot(const AliFmThreeVector<double>& v) const
{
    return mX1*v.x() + mX2*v.y() + mX3*v.z();
}

template<class T>
inline AliFmThreeVector<T>
AliFmThreeVector<T>::Cross(const AliFmThreeVector<float>& v) const
{
    return AliFmThreeVector<T>(mX2*v.z() - mX3*v.y(),
			    mX3*v.x() - mX1*v.z(),
			    mX1*v.y() - mX2*v.x());
}

template<class T>
inline AliFmThreeVector<T>
AliFmThreeVector<T>::Cross(const AliFmThreeVector<double>& v) const
{
    return AliFmThreeVector<T>(mX2*v.z() - mX3*v.y(),
			    mX3*v.x() - mX1*v.z(),
			    mX1*v.y() - mX2*v.x());
}

template<class T>
inline T AliFmThreeVector<T>::Angle(const AliFmThreeVector<float>& v) const
{
    double tmp = Mag()*v.Mag(); if (tmp <=0) tmp = 1e-20;
    return acos(this->Dot(v)/tmp);
}

template<class T>
inline T AliFmThreeVector<T>::Angle(const AliFmThreeVector<double>& v) const
{
    double tmp = Mag()*v.Mag(); if (tmp <=0) tmp = 1e-20;
    return acos(this->Dot(v)/tmp);
}

template<class T>
inline AliFmThreeVector<T>
AliFmThreeVector<T>::PseudoProduct(const AliFmThreeVector<float>& v) const
{
    return this->PseudoProduct(v.x(),v.y(),v.z());
}

template<class T>
inline AliFmThreeVector<T>
AliFmThreeVector<T>::PseudoProduct(const AliFmThreeVector<double>& v) const
{
    return this->PseudoProduct(v.x(),v.y(),v.z());
}
#endif  // ST_NO_MEMBER_TEMPLATES
template<class T>
inline int
AliFmThreeVector<T>::Valid(double world) const  {return !Bad(world);}

template<class T>
inline int
AliFmThreeVector<T>::Bad(double world) const
{
  for (int i=0;i<3;i++) {
          if (!isfinite((&mX1)[i])      ) return 10+i; 		
	  if ( fabs  ((&mX1)[i])>world) return 20+i; 		
  }		
  return 0;		
}
#endif /*! __CINT__ */
#ifdef __CINT__
template<> float abs(const AliFmThreeVector<float>& v);
template<> double abs(const AliFmThreeVector<double>& v);
template<> AliFmThreeVector<double> cross_product(const AliFmThreeVector<double>& v1, const AliFmThreeVector<double>& v2);
template<> AliFmThreeVector<float>  cross_product(const AliFmThreeVector<float>&  v1, const AliFmThreeVector<float>& v2);
template<> AliFmThreeVector<double> cross_product(const AliFmThreeVector<float>&  v1, const AliFmThreeVector<double>& v2);
template<> AliFmThreeVector<double> cross_product(const AliFmThreeVector<double>& v1, const AliFmThreeVector<float>& v2);
template<> AliFmThreeVector<double> operator+ (const AliFmThreeVector<double>& v1, const AliFmThreeVector<double>& v2);
template<> AliFmThreeVector<float>  operator+ (const AliFmThreeVector<float>&  v1, const AliFmThreeVector<float>& v2);
template<> AliFmThreeVector<double> operator+ (const AliFmThreeVector<double>& v1, const AliFmThreeVector<float>& v2);
template<> AliFmThreeVector<double> operator+ (const AliFmThreeVector<float>&  v1, const AliFmThreeVector<double>& v2);
template<> AliFmThreeVector<double> operator- (const AliFmThreeVector<double>& v1, const AliFmThreeVector<double>& v2);
template<> AliFmThreeVector<float>  operator- (const AliFmThreeVector<float>&  v1, const AliFmThreeVector<float>& v2);
template<> AliFmThreeVector<double> operator- (const AliFmThreeVector<double>& v1, const AliFmThreeVector<float>& v2);
template<> AliFmThreeVector<double> operator- (const AliFmThreeVector<float>&  v1, const AliFmThreeVector<double>& v2);
template<> AliFmThreeVector<double> operator* (const AliFmThreeVector<double>& v1, const AliFmThreeVector<double>& v2);
template<> AliFmThreeVector<float>  operator* (const AliFmThreeVector<float>&  v1, const AliFmThreeVector<float>& v2);
template<> AliFmThreeVector<double> operator* (const AliFmThreeVector<double>& v1, const AliFmThreeVector<float>& v2);
template<> AliFmThreeVector<double> operator* (const AliFmThreeVector<float>&  v1, const AliFmThreeVector<double>& v2);
template<> AliFmThreeVector<double> operator* (const double                 v1, const AliFmThreeVector<float>& v2);
template<> AliFmThreeVector<double> operator* (const AliFmThreeVector<float>&  v1, const double v2);
template<> AliFmThreeVector<double> operator* (const double                 v1, const AliFmThreeVector<double>& v2);
template<> AliFmThreeVector<double> operator* (const AliFmThreeVector<double>& v1, const double v2);
template<> AliFmThreeVector<double> operator/ (const AliFmThreeVector<double>& v1, const AliFmThreeVector<double>& v2);
template<> AliFmThreeVector<float>  operator/ (const AliFmThreeVector<float>&  v1, const AliFmThreeVector<float>& v2);
template<> AliFmThreeVector<double> operator/ (const AliFmThreeVector<double>& v1, const AliFmThreeVector<float>& v2);
template<> AliFmThreeVector<double> operator/ (const AliFmThreeVector<float>&  v1, const AliFmThreeVector<double>& v2);
template<> AliFmThreeVector<double> operator/ (const                double  v1, const AliFmThreeVector<double>& v2);
template<> AliFmThreeVector<float>  operator/ (const                double  v1, const AliFmThreeVector<float>& v2);
template<> AliFmThreeVector<double> operator/ (const AliFmThreeVector<double>& v1, const double v2);
template<> AliFmThreeVector<double> operator/ (const AliFmThreeVector<float>&  v1, const double v2);
template<> istream&  operator>>(istream& is,const AliFmThreeVector<double>& v);
template<> istream&  operator>>(istream& is,const AliFmThreeVector<float>& v);
template<> ostream&  operator<<(ostream& os,const AliFmThreeVector<double>& v);
template<> ostream&  operator<<(ostream& os,const AliFmThreeVector<float>& v);
#else
//
//        Non-member functions
//
template<class T>
inline T abs(const AliFmThreeVector<T>& v) {return v.Mag();}

template<class T, class X>
inline AliFmThreeVector<T>
cross_product(const AliFmThreeVector<T>& v1, const AliFmThreeVector<X>& v2)
{
    return v1.Cross(v2);
}


//
//        Non-member operators
//
template<class T, class X>
inline AliFmThreeVector<T>
operator+ (const AliFmThreeVector<T>& v1, const AliFmThreeVector<X>& v2)
{
    return AliFmThreeVector<T>(v1) += v2;
}

template<class T, class X>
inline AliFmThreeVector<T>
operator- (const AliFmThreeVector<T>& v1, const AliFmThreeVector<X>& v2)
{
    return AliFmThreeVector<T>(v1) -= v2;
}

template<class T, class X>
inline T operator* (const AliFmThreeVector<T>& v1, const AliFmThreeVector<X>& v2)
{
    return AliFmThreeVector<T>(v1).Dot(v2);
}

template<class T>
inline AliFmThreeVector<T> operator* (const AliFmThreeVector<T>& v, double c)
{
    return AliFmThreeVector<T>(v) *= c;
}

template<class T>
inline AliFmThreeVector<T> operator* (double c, const AliFmThreeVector<T>& v)
{
    return AliFmThreeVector<T>(v) *= c;
}

template<class T, class X>
inline AliFmThreeVector<T> operator/ (const AliFmThreeVector<T>& v, X c)
{
    return AliFmThreeVector<T>(v) /= c;
}

template<class T>
ostream&  operator<<(ostream& os, const AliFmThreeVector<T>& v)
{
    return os << v.x() << '\t' << v.y() << '\t' << v.z();
}

template<class T>
istream&  operator>>(istream& is, AliFmThreeVector<T>& v)
{
    T  x, y, z;
    is >> x >> y >> z;
    v.SetX(x);
    v.SetY(y);
    v.SetZ(z);
    return is;
}
#endif /* ! __CINT__ */
#endif
 AliFmThreeVector.h:1
 AliFmThreeVector.h:2
 AliFmThreeVector.h:3
 AliFmThreeVector.h:4
 AliFmThreeVector.h:5
 AliFmThreeVector.h:6
 AliFmThreeVector.h:7
 AliFmThreeVector.h:8
 AliFmThreeVector.h:9
 AliFmThreeVector.h:10
 AliFmThreeVector.h:11
 AliFmThreeVector.h:12
 AliFmThreeVector.h:13
 AliFmThreeVector.h:14
 AliFmThreeVector.h:15
 AliFmThreeVector.h:16
 AliFmThreeVector.h:17
 AliFmThreeVector.h:18
 AliFmThreeVector.h:19
 AliFmThreeVector.h:20
 AliFmThreeVector.h:21
 AliFmThreeVector.h:22
 AliFmThreeVector.h:23
 AliFmThreeVector.h:24
 AliFmThreeVector.h:25
 AliFmThreeVector.h:26
 AliFmThreeVector.h:27
 AliFmThreeVector.h:28
 AliFmThreeVector.h:29
 AliFmThreeVector.h:30
 AliFmThreeVector.h:31
 AliFmThreeVector.h:32
 AliFmThreeVector.h:33
 AliFmThreeVector.h:34
 AliFmThreeVector.h:35
 AliFmThreeVector.h:36
 AliFmThreeVector.h:37
 AliFmThreeVector.h:38
 AliFmThreeVector.h:39
 AliFmThreeVector.h:40
 AliFmThreeVector.h:41
 AliFmThreeVector.h:42
 AliFmThreeVector.h:43
 AliFmThreeVector.h:44
 AliFmThreeVector.h:45
 AliFmThreeVector.h:46
 AliFmThreeVector.h:47
 AliFmThreeVector.h:48
 AliFmThreeVector.h:49
 AliFmThreeVector.h:50
 AliFmThreeVector.h:51
 AliFmThreeVector.h:52
 AliFmThreeVector.h:53
 AliFmThreeVector.h:54
 AliFmThreeVector.h:55
 AliFmThreeVector.h:56
 AliFmThreeVector.h:57
 AliFmThreeVector.h:58
 AliFmThreeVector.h:59
 AliFmThreeVector.h:60
 AliFmThreeVector.h:61
 AliFmThreeVector.h:62
 AliFmThreeVector.h:63
 AliFmThreeVector.h:64
 AliFmThreeVector.h:65
 AliFmThreeVector.h:66
 AliFmThreeVector.h:67
 AliFmThreeVector.h:68
 AliFmThreeVector.h:69
 AliFmThreeVector.h:70
 AliFmThreeVector.h:71
 AliFmThreeVector.h:72
 AliFmThreeVector.h:73
 AliFmThreeVector.h:74
 AliFmThreeVector.h:75
 AliFmThreeVector.h:76
 AliFmThreeVector.h:77
 AliFmThreeVector.h:78
 AliFmThreeVector.h:79
 AliFmThreeVector.h:80
 AliFmThreeVector.h:81
 AliFmThreeVector.h:82
 AliFmThreeVector.h:83
 AliFmThreeVector.h:84
 AliFmThreeVector.h:85
 AliFmThreeVector.h:86
 AliFmThreeVector.h:87
 AliFmThreeVector.h:88
 AliFmThreeVector.h:89
 AliFmThreeVector.h:90
 AliFmThreeVector.h:91
 AliFmThreeVector.h:92
 AliFmThreeVector.h:93
 AliFmThreeVector.h:94
 AliFmThreeVector.h:95
 AliFmThreeVector.h:96
 AliFmThreeVector.h:97
 AliFmThreeVector.h:98
 AliFmThreeVector.h:99
 AliFmThreeVector.h:100
 AliFmThreeVector.h:101
 AliFmThreeVector.h:102
 AliFmThreeVector.h:103
 AliFmThreeVector.h:104
 AliFmThreeVector.h:105
 AliFmThreeVector.h:106
 AliFmThreeVector.h:107
 AliFmThreeVector.h:108
 AliFmThreeVector.h:109
 AliFmThreeVector.h:110
 AliFmThreeVector.h:111
 AliFmThreeVector.h:112
 AliFmThreeVector.h:113
 AliFmThreeVector.h:114
 AliFmThreeVector.h:115
 AliFmThreeVector.h:116
 AliFmThreeVector.h:117
 AliFmThreeVector.h:118
 AliFmThreeVector.h:119
 AliFmThreeVector.h:120
 AliFmThreeVector.h:121
 AliFmThreeVector.h:122
 AliFmThreeVector.h:123
 AliFmThreeVector.h:124
 AliFmThreeVector.h:125
 AliFmThreeVector.h:126
 AliFmThreeVector.h:127
 AliFmThreeVector.h:128
 AliFmThreeVector.h:129
 AliFmThreeVector.h:130
 AliFmThreeVector.h:131
 AliFmThreeVector.h:132
 AliFmThreeVector.h:133
 AliFmThreeVector.h:134
 AliFmThreeVector.h:135
 AliFmThreeVector.h:136
 AliFmThreeVector.h:137
 AliFmThreeVector.h:138
 AliFmThreeVector.h:139
 AliFmThreeVector.h:140
 AliFmThreeVector.h:141
 AliFmThreeVector.h:142
 AliFmThreeVector.h:143
 AliFmThreeVector.h:144
 AliFmThreeVector.h:145
 AliFmThreeVector.h:146
 AliFmThreeVector.h:147
 AliFmThreeVector.h:148
 AliFmThreeVector.h:149
 AliFmThreeVector.h:150
 AliFmThreeVector.h:151
 AliFmThreeVector.h:152
 AliFmThreeVector.h:153
 AliFmThreeVector.h:154
 AliFmThreeVector.h:155
 AliFmThreeVector.h:156
 AliFmThreeVector.h:157
 AliFmThreeVector.h:158
 AliFmThreeVector.h:159
 AliFmThreeVector.h:160
 AliFmThreeVector.h:161
 AliFmThreeVector.h:162
 AliFmThreeVector.h:163
 AliFmThreeVector.h:164
 AliFmThreeVector.h:165
 AliFmThreeVector.h:166
 AliFmThreeVector.h:167
 AliFmThreeVector.h:168
 AliFmThreeVector.h:169
 AliFmThreeVector.h:170
 AliFmThreeVector.h:171
 AliFmThreeVector.h:172
 AliFmThreeVector.h:173
 AliFmThreeVector.h:174
 AliFmThreeVector.h:175
 AliFmThreeVector.h:176
 AliFmThreeVector.h:177
 AliFmThreeVector.h:178
 AliFmThreeVector.h:179
 AliFmThreeVector.h:180
 AliFmThreeVector.h:181
 AliFmThreeVector.h:182
 AliFmThreeVector.h:183
 AliFmThreeVector.h:184
 AliFmThreeVector.h:185
 AliFmThreeVector.h:186
 AliFmThreeVector.h:187
 AliFmThreeVector.h:188
 AliFmThreeVector.h:189
 AliFmThreeVector.h:190
 AliFmThreeVector.h:191
 AliFmThreeVector.h:192
 AliFmThreeVector.h:193
 AliFmThreeVector.h:194
 AliFmThreeVector.h:195
 AliFmThreeVector.h:196
 AliFmThreeVector.h:197
 AliFmThreeVector.h:198
 AliFmThreeVector.h:199
 AliFmThreeVector.h:200
 AliFmThreeVector.h:201
 AliFmThreeVector.h:202
 AliFmThreeVector.h:203
 AliFmThreeVector.h:204
 AliFmThreeVector.h:205
 AliFmThreeVector.h:206
 AliFmThreeVector.h:207
 AliFmThreeVector.h:208
 AliFmThreeVector.h:209
 AliFmThreeVector.h:210
 AliFmThreeVector.h:211
 AliFmThreeVector.h:212
 AliFmThreeVector.h:213
 AliFmThreeVector.h:214
 AliFmThreeVector.h:215
 AliFmThreeVector.h:216
 AliFmThreeVector.h:217
 AliFmThreeVector.h:218
 AliFmThreeVector.h:219
 AliFmThreeVector.h:220
 AliFmThreeVector.h:221
 AliFmThreeVector.h:222
 AliFmThreeVector.h:223
 AliFmThreeVector.h:224
 AliFmThreeVector.h:225
 AliFmThreeVector.h:226
 AliFmThreeVector.h:227
 AliFmThreeVector.h:228
 AliFmThreeVector.h:229
 AliFmThreeVector.h:230
 AliFmThreeVector.h:231
 AliFmThreeVector.h:232
 AliFmThreeVector.h:233
 AliFmThreeVector.h:234
 AliFmThreeVector.h:235
 AliFmThreeVector.h:236
 AliFmThreeVector.h:237
 AliFmThreeVector.h:238
 AliFmThreeVector.h:239
 AliFmThreeVector.h:240
 AliFmThreeVector.h:241
 AliFmThreeVector.h:242
 AliFmThreeVector.h:243
 AliFmThreeVector.h:244
 AliFmThreeVector.h:245
 AliFmThreeVector.h:246
 AliFmThreeVector.h:247
 AliFmThreeVector.h:248
 AliFmThreeVector.h:249
 AliFmThreeVector.h:250
 AliFmThreeVector.h:251
 AliFmThreeVector.h:252
 AliFmThreeVector.h:253
 AliFmThreeVector.h:254
 AliFmThreeVector.h:255
 AliFmThreeVector.h:256
 AliFmThreeVector.h:257
 AliFmThreeVector.h:258
 AliFmThreeVector.h:259
 AliFmThreeVector.h:260
 AliFmThreeVector.h:261
 AliFmThreeVector.h:262
 AliFmThreeVector.h:263
 AliFmThreeVector.h:264
 AliFmThreeVector.h:265
 AliFmThreeVector.h:266
 AliFmThreeVector.h:267
 AliFmThreeVector.h:268
 AliFmThreeVector.h:269
 AliFmThreeVector.h:270
 AliFmThreeVector.h:271
 AliFmThreeVector.h:272
 AliFmThreeVector.h:273
 AliFmThreeVector.h:274
 AliFmThreeVector.h:275
 AliFmThreeVector.h:276
 AliFmThreeVector.h:277
 AliFmThreeVector.h:278
 AliFmThreeVector.h:279
 AliFmThreeVector.h:280
 AliFmThreeVector.h:281
 AliFmThreeVector.h:282
 AliFmThreeVector.h:283
 AliFmThreeVector.h:284
 AliFmThreeVector.h:285
 AliFmThreeVector.h:286
 AliFmThreeVector.h:287
 AliFmThreeVector.h:288
 AliFmThreeVector.h:289
 AliFmThreeVector.h:290
 AliFmThreeVector.h:291
 AliFmThreeVector.h:292
 AliFmThreeVector.h:293
 AliFmThreeVector.h:294
 AliFmThreeVector.h:295
 AliFmThreeVector.h:296
 AliFmThreeVector.h:297
 AliFmThreeVector.h:298
 AliFmThreeVector.h:299
 AliFmThreeVector.h:300
 AliFmThreeVector.h:301
 AliFmThreeVector.h:302
 AliFmThreeVector.h:303
 AliFmThreeVector.h:304
 AliFmThreeVector.h:305
 AliFmThreeVector.h:306
 AliFmThreeVector.h:307
 AliFmThreeVector.h:308
 AliFmThreeVector.h:309
 AliFmThreeVector.h:310
 AliFmThreeVector.h:311
 AliFmThreeVector.h:312
 AliFmThreeVector.h:313
 AliFmThreeVector.h:314
 AliFmThreeVector.h:315
 AliFmThreeVector.h:316
 AliFmThreeVector.h:317
 AliFmThreeVector.h:318
 AliFmThreeVector.h:319
 AliFmThreeVector.h:320
 AliFmThreeVector.h:321
 AliFmThreeVector.h:322
 AliFmThreeVector.h:323
 AliFmThreeVector.h:324
 AliFmThreeVector.h:325
 AliFmThreeVector.h:326
 AliFmThreeVector.h:327
 AliFmThreeVector.h:328
 AliFmThreeVector.h:329
 AliFmThreeVector.h:330
 AliFmThreeVector.h:331
 AliFmThreeVector.h:332
 AliFmThreeVector.h:333
 AliFmThreeVector.h:334
 AliFmThreeVector.h:335
 AliFmThreeVector.h:336
 AliFmThreeVector.h:337
 AliFmThreeVector.h:338
 AliFmThreeVector.h:339
 AliFmThreeVector.h:340
 AliFmThreeVector.h:341
 AliFmThreeVector.h:342
 AliFmThreeVector.h:343
 AliFmThreeVector.h:344
 AliFmThreeVector.h:345
 AliFmThreeVector.h:346
 AliFmThreeVector.h:347
 AliFmThreeVector.h:348
 AliFmThreeVector.h:349
 AliFmThreeVector.h:350
 AliFmThreeVector.h:351
 AliFmThreeVector.h:352
 AliFmThreeVector.h:353
 AliFmThreeVector.h:354
 AliFmThreeVector.h:355
 AliFmThreeVector.h:356
 AliFmThreeVector.h:357
 AliFmThreeVector.h:358
 AliFmThreeVector.h:359
 AliFmThreeVector.h:360
 AliFmThreeVector.h:361
 AliFmThreeVector.h:362
 AliFmThreeVector.h:363
 AliFmThreeVector.h:364
 AliFmThreeVector.h:365
 AliFmThreeVector.h:366
 AliFmThreeVector.h:367
 AliFmThreeVector.h:368
 AliFmThreeVector.h:369
 AliFmThreeVector.h:370
 AliFmThreeVector.h:371
 AliFmThreeVector.h:372
 AliFmThreeVector.h:373
 AliFmThreeVector.h:374
 AliFmThreeVector.h:375
 AliFmThreeVector.h:376
 AliFmThreeVector.h:377
 AliFmThreeVector.h:378
 AliFmThreeVector.h:379
 AliFmThreeVector.h:380
 AliFmThreeVector.h:381
 AliFmThreeVector.h:382
 AliFmThreeVector.h:383
 AliFmThreeVector.h:384
 AliFmThreeVector.h:385
 AliFmThreeVector.h:386
 AliFmThreeVector.h:387
 AliFmThreeVector.h:388
 AliFmThreeVector.h:389
 AliFmThreeVector.h:390
 AliFmThreeVector.h:391
 AliFmThreeVector.h:392
 AliFmThreeVector.h:393
 AliFmThreeVector.h:394
 AliFmThreeVector.h:395
 AliFmThreeVector.h:396
 AliFmThreeVector.h:397
 AliFmThreeVector.h:398
 AliFmThreeVector.h:399
 AliFmThreeVector.h:400
 AliFmThreeVector.h:401
 AliFmThreeVector.h:402
 AliFmThreeVector.h:403
 AliFmThreeVector.h:404
 AliFmThreeVector.h:405
 AliFmThreeVector.h:406
 AliFmThreeVector.h:407
 AliFmThreeVector.h:408
 AliFmThreeVector.h:409
 AliFmThreeVector.h:410
 AliFmThreeVector.h:411
 AliFmThreeVector.h:412
 AliFmThreeVector.h:413
 AliFmThreeVector.h:414
 AliFmThreeVector.h:415
 AliFmThreeVector.h:416
 AliFmThreeVector.h:417
 AliFmThreeVector.h:418
 AliFmThreeVector.h:419
 AliFmThreeVector.h:420
 AliFmThreeVector.h:421
 AliFmThreeVector.h:422
 AliFmThreeVector.h:423
 AliFmThreeVector.h:424
 AliFmThreeVector.h:425
 AliFmThreeVector.h:426
 AliFmThreeVector.h:427
 AliFmThreeVector.h:428
 AliFmThreeVector.h:429
 AliFmThreeVector.h:430
 AliFmThreeVector.h:431
 AliFmThreeVector.h:432
 AliFmThreeVector.h:433
 AliFmThreeVector.h:434
 AliFmThreeVector.h:435
 AliFmThreeVector.h:436
 AliFmThreeVector.h:437
 AliFmThreeVector.h:438
 AliFmThreeVector.h:439
 AliFmThreeVector.h:440
 AliFmThreeVector.h:441
 AliFmThreeVector.h:442
 AliFmThreeVector.h:443
 AliFmThreeVector.h:444
 AliFmThreeVector.h:445
 AliFmThreeVector.h:446
 AliFmThreeVector.h:447
 AliFmThreeVector.h:448
 AliFmThreeVector.h:449
 AliFmThreeVector.h:450
 AliFmThreeVector.h:451
 AliFmThreeVector.h:452
 AliFmThreeVector.h:453
 AliFmThreeVector.h:454
 AliFmThreeVector.h:455
 AliFmThreeVector.h:456
 AliFmThreeVector.h:457
 AliFmThreeVector.h:458
 AliFmThreeVector.h:459
 AliFmThreeVector.h:460
 AliFmThreeVector.h:461
 AliFmThreeVector.h:462
 AliFmThreeVector.h:463
 AliFmThreeVector.h:464
 AliFmThreeVector.h:465
 AliFmThreeVector.h:466
 AliFmThreeVector.h:467
 AliFmThreeVector.h:468
 AliFmThreeVector.h:469
 AliFmThreeVector.h:470
 AliFmThreeVector.h:471
 AliFmThreeVector.h:472
 AliFmThreeVector.h:473
 AliFmThreeVector.h:474
 AliFmThreeVector.h:475
 AliFmThreeVector.h:476
 AliFmThreeVector.h:477
 AliFmThreeVector.h:478
 AliFmThreeVector.h:479
 AliFmThreeVector.h:480
 AliFmThreeVector.h:481
 AliFmThreeVector.h:482
 AliFmThreeVector.h:483
 AliFmThreeVector.h:484
 AliFmThreeVector.h:485
 AliFmThreeVector.h:486
 AliFmThreeVector.h:487
 AliFmThreeVector.h:488
 AliFmThreeVector.h:489
 AliFmThreeVector.h:490
 AliFmThreeVector.h:491
 AliFmThreeVector.h:492
 AliFmThreeVector.h:493
 AliFmThreeVector.h:494
 AliFmThreeVector.h:495
 AliFmThreeVector.h:496
 AliFmThreeVector.h:497
 AliFmThreeVector.h:498
 AliFmThreeVector.h:499
 AliFmThreeVector.h:500
 AliFmThreeVector.h:501
 AliFmThreeVector.h:502
 AliFmThreeVector.h:503
 AliFmThreeVector.h:504
 AliFmThreeVector.h:505
 AliFmThreeVector.h:506
 AliFmThreeVector.h:507
 AliFmThreeVector.h:508
 AliFmThreeVector.h:509
 AliFmThreeVector.h:510
 AliFmThreeVector.h:511
 AliFmThreeVector.h:512
 AliFmThreeVector.h:513
 AliFmThreeVector.h:514
 AliFmThreeVector.h:515
 AliFmThreeVector.h:516
 AliFmThreeVector.h:517
 AliFmThreeVector.h:518
 AliFmThreeVector.h:519
 AliFmThreeVector.h:520
 AliFmThreeVector.h:521
 AliFmThreeVector.h:522
 AliFmThreeVector.h:523
 AliFmThreeVector.h:524
 AliFmThreeVector.h:525
 AliFmThreeVector.h:526
 AliFmThreeVector.h:527
 AliFmThreeVector.h:528
 AliFmThreeVector.h:529
 AliFmThreeVector.h:530
 AliFmThreeVector.h:531
 AliFmThreeVector.h:532
 AliFmThreeVector.h:533
 AliFmThreeVector.h:534
 AliFmThreeVector.h:535
 AliFmThreeVector.h:536
 AliFmThreeVector.h:537
 AliFmThreeVector.h:538
 AliFmThreeVector.h:539
 AliFmThreeVector.h:540
 AliFmThreeVector.h:541
 AliFmThreeVector.h:542
 AliFmThreeVector.h:543
 AliFmThreeVector.h:544
 AliFmThreeVector.h:545
 AliFmThreeVector.h:546
 AliFmThreeVector.h:547
 AliFmThreeVector.h:548
 AliFmThreeVector.h:549
 AliFmThreeVector.h:550
 AliFmThreeVector.h:551
 AliFmThreeVector.h:552
 AliFmThreeVector.h:553
 AliFmThreeVector.h:554
 AliFmThreeVector.h:555
 AliFmThreeVector.h:556
 AliFmThreeVector.h:557
 AliFmThreeVector.h:558
 AliFmThreeVector.h:559
 AliFmThreeVector.h:560
 AliFmThreeVector.h:561
 AliFmThreeVector.h:562
 AliFmThreeVector.h:563
 AliFmThreeVector.h:564
 AliFmThreeVector.h:565
 AliFmThreeVector.h:566
 AliFmThreeVector.h:567
 AliFmThreeVector.h:568
 AliFmThreeVector.h:569
 AliFmThreeVector.h:570
 AliFmThreeVector.h:571
 AliFmThreeVector.h:572
 AliFmThreeVector.h:573
 AliFmThreeVector.h:574
 AliFmThreeVector.h:575
 AliFmThreeVector.h:576
 AliFmThreeVector.h:577
 AliFmThreeVector.h:578
 AliFmThreeVector.h:579
 AliFmThreeVector.h:580
 AliFmThreeVector.h:581
 AliFmThreeVector.h:582
 AliFmThreeVector.h:583
 AliFmThreeVector.h:584
 AliFmThreeVector.h:585
 AliFmThreeVector.h:586
 AliFmThreeVector.h:587
 AliFmThreeVector.h:588
 AliFmThreeVector.h:589
 AliFmThreeVector.h:590
 AliFmThreeVector.h:591
 AliFmThreeVector.h:592
 AliFmThreeVector.h:593
 AliFmThreeVector.h:594
 AliFmThreeVector.h:595
 AliFmThreeVector.h:596
 AliFmThreeVector.h:597
 AliFmThreeVector.h:598
 AliFmThreeVector.h:599
 AliFmThreeVector.h:600
 AliFmThreeVector.h:601
 AliFmThreeVector.h:602
 AliFmThreeVector.h:603
 AliFmThreeVector.h:604
 AliFmThreeVector.h:605
 AliFmThreeVector.h:606
 AliFmThreeVector.h:607
 AliFmThreeVector.h:608
 AliFmThreeVector.h:609
 AliFmThreeVector.h:610
 AliFmThreeVector.h:611
 AliFmThreeVector.h:612
 AliFmThreeVector.h:613
 AliFmThreeVector.h:614
 AliFmThreeVector.h:615
 AliFmThreeVector.h:616
 AliFmThreeVector.h:617
 AliFmThreeVector.h:618
 AliFmThreeVector.h:619
 AliFmThreeVector.h:620
 AliFmThreeVector.h:621
 AliFmThreeVector.h:622
 AliFmThreeVector.h:623
 AliFmThreeVector.h:624
 AliFmThreeVector.h:625
 AliFmThreeVector.h:626
 AliFmThreeVector.h:627
 AliFmThreeVector.h:628
 AliFmThreeVector.h:629
 AliFmThreeVector.h:630
 AliFmThreeVector.h:631
 AliFmThreeVector.h:632
 AliFmThreeVector.h:633
 AliFmThreeVector.h:634
 AliFmThreeVector.h:635
 AliFmThreeVector.h:636
 AliFmThreeVector.h:637
 AliFmThreeVector.h:638
 AliFmThreeVector.h:639
 AliFmThreeVector.h:640
 AliFmThreeVector.h:641
 AliFmThreeVector.h:642
 AliFmThreeVector.h:643
 AliFmThreeVector.h:644
 AliFmThreeVector.h:645
 AliFmThreeVector.h:646
 AliFmThreeVector.h:647
 AliFmThreeVector.h:648
 AliFmThreeVector.h:649
 AliFmThreeVector.h:650
 AliFmThreeVector.h:651
 AliFmThreeVector.h:652
 AliFmThreeVector.h:653
 AliFmThreeVector.h:654
 AliFmThreeVector.h:655
 AliFmThreeVector.h:656
 AliFmThreeVector.h:657
 AliFmThreeVector.h:658
 AliFmThreeVector.h:659
 AliFmThreeVector.h:660
 AliFmThreeVector.h:661
 AliFmThreeVector.h:662
 AliFmThreeVector.h:663
 AliFmThreeVector.h:664
 AliFmThreeVector.h:665
 AliFmThreeVector.h:666
 AliFmThreeVector.h:667
 AliFmThreeVector.h:668
 AliFmThreeVector.h:669
 AliFmThreeVector.h:670
 AliFmThreeVector.h:671
 AliFmThreeVector.h:672
 AliFmThreeVector.h:673
 AliFmThreeVector.h:674
 AliFmThreeVector.h:675
 AliFmThreeVector.h:676
 AliFmThreeVector.h:677
 AliFmThreeVector.h:678
 AliFmThreeVector.h:679
 AliFmThreeVector.h:680
 AliFmThreeVector.h:681
 AliFmThreeVector.h:682
 AliFmThreeVector.h:683
 AliFmThreeVector.h:684
 AliFmThreeVector.h:685
 AliFmThreeVector.h:686
 AliFmThreeVector.h:687
 AliFmThreeVector.h:688
 AliFmThreeVector.h:689
 AliFmThreeVector.h:690
 AliFmThreeVector.h:691
 AliFmThreeVector.h:692
 AliFmThreeVector.h:693
 AliFmThreeVector.h:694
 AliFmThreeVector.h:695
 AliFmThreeVector.h:696
 AliFmThreeVector.h:697
 AliFmThreeVector.h:698
 AliFmThreeVector.h:699
 AliFmThreeVector.h:700
 AliFmThreeVector.h:701
 AliFmThreeVector.h:702
 AliFmThreeVector.h:703
 AliFmThreeVector.h:704
 AliFmThreeVector.h:705
 AliFmThreeVector.h:706
 AliFmThreeVector.h:707
 AliFmThreeVector.h:708
 AliFmThreeVector.h:709
 AliFmThreeVector.h:710
 AliFmThreeVector.h:711
 AliFmThreeVector.h:712
 AliFmThreeVector.h:713
 AliFmThreeVector.h:714
 AliFmThreeVector.h:715
 AliFmThreeVector.h:716
 AliFmThreeVector.h:717
 AliFmThreeVector.h:718
 AliFmThreeVector.h:719
 AliFmThreeVector.h:720
 AliFmThreeVector.h:721
 AliFmThreeVector.h:722
 AliFmThreeVector.h:723
 AliFmThreeVector.h:724
 AliFmThreeVector.h:725
 AliFmThreeVector.h:726
 AliFmThreeVector.h:727
 AliFmThreeVector.h:728
 AliFmThreeVector.h:729
 AliFmThreeVector.h:730
 AliFmThreeVector.h:731
 AliFmThreeVector.h:732
 AliFmThreeVector.h:733
 AliFmThreeVector.h:734
 AliFmThreeVector.h:735
 AliFmThreeVector.h:736
 AliFmThreeVector.h:737
 AliFmThreeVector.h:738
 AliFmThreeVector.h:739
 AliFmThreeVector.h:740
 AliFmThreeVector.h:741
 AliFmThreeVector.h:742
 AliFmThreeVector.h:743
 AliFmThreeVector.h:744
 AliFmThreeVector.h:745
 AliFmThreeVector.h:746
 AliFmThreeVector.h:747
 AliFmThreeVector.h:748
 AliFmThreeVector.h:749
 AliFmThreeVector.h:750
 AliFmThreeVector.h:751
 AliFmThreeVector.h:752
 AliFmThreeVector.h:753
 AliFmThreeVector.h:754
 AliFmThreeVector.h:755
 AliFmThreeVector.h:756
 AliFmThreeVector.h:757
 AliFmThreeVector.h:758
 AliFmThreeVector.h:759
 AliFmThreeVector.h:760
 AliFmThreeVector.h:761
 AliFmThreeVector.h:762
 AliFmThreeVector.h:763
 AliFmThreeVector.h:764
 AliFmThreeVector.h:765
 AliFmThreeVector.h:766
 AliFmThreeVector.h:767
 AliFmThreeVector.h:768
 AliFmThreeVector.h:769
 AliFmThreeVector.h:770
 AliFmThreeVector.h:771
 AliFmThreeVector.h:772
 AliFmThreeVector.h:773
 AliFmThreeVector.h:774
 AliFmThreeVector.h:775
 AliFmThreeVector.h:776
 AliFmThreeVector.h:777
 AliFmThreeVector.h:778
 AliFmThreeVector.h:779
 AliFmThreeVector.h:780
 AliFmThreeVector.h:781
 AliFmThreeVector.h:782
 AliFmThreeVector.h:783
 AliFmThreeVector.h:784
 AliFmThreeVector.h:785
 AliFmThreeVector.h:786
 AliFmThreeVector.h:787
 AliFmThreeVector.h:788
 AliFmThreeVector.h:789
 AliFmThreeVector.h:790
 AliFmThreeVector.h:791
 AliFmThreeVector.h:792
 AliFmThreeVector.h:793
 AliFmThreeVector.h:794
 AliFmThreeVector.h:795
 AliFmThreeVector.h:796
 AliFmThreeVector.h:797
 AliFmThreeVector.h:798
 AliFmThreeVector.h:799
 AliFmThreeVector.h:800
 AliFmThreeVector.h:801
 AliFmThreeVector.h:802
 AliFmThreeVector.h:803
 AliFmThreeVector.h:804
 AliFmThreeVector.h:805
 AliFmThreeVector.h:806
 AliFmThreeVector.h:807
 AliFmThreeVector.h:808
 AliFmThreeVector.h:809
 AliFmThreeVector.h:810
 AliFmThreeVector.h:811
 AliFmThreeVector.h:812
 AliFmThreeVector.h:813
 AliFmThreeVector.h:814
 AliFmThreeVector.h:815
 AliFmThreeVector.h:816
 AliFmThreeVector.h:817
 AliFmThreeVector.h:818
 AliFmThreeVector.h:819
 AliFmThreeVector.h:820
 AliFmThreeVector.h:821
 AliFmThreeVector.h:822
 AliFmThreeVector.h:823
 AliFmThreeVector.h:824
 AliFmThreeVector.h:825
 AliFmThreeVector.h:826
 AliFmThreeVector.h:827
 AliFmThreeVector.h:828
 AliFmThreeVector.h:829
 AliFmThreeVector.h:830
 AliFmThreeVector.h:831
 AliFmThreeVector.h:832
 AliFmThreeVector.h:833
 AliFmThreeVector.h:834
 AliFmThreeVector.h:835
 AliFmThreeVector.h:836
 AliFmThreeVector.h:837
 AliFmThreeVector.h:838
 AliFmThreeVector.h:839
 AliFmThreeVector.h:840
 AliFmThreeVector.h:841
 AliFmThreeVector.h:842
 AliFmThreeVector.h:843
 AliFmThreeVector.h:844
 AliFmThreeVector.h:845
 AliFmThreeVector.h:846
 AliFmThreeVector.h:847
 AliFmThreeVector.h:848
 AliFmThreeVector.h:849
 AliFmThreeVector.h:850
 AliFmThreeVector.h:851
 AliFmThreeVector.h:852
 AliFmThreeVector.h:853
 AliFmThreeVector.h:854
 AliFmThreeVector.h:855
 AliFmThreeVector.h:856
 AliFmThreeVector.h:857
 AliFmThreeVector.h:858