Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:09:51

0001 #ifndef ATOOLS_Math_Vector_H
0002 #define ATOOLS_Math_Vector_H
0003 
0004 #include <iostream>
0005 #include <vector>
0006 #include "ATOOLS/Math/Vec3.H"
0007 #include "ATOOLS/Math/Vec4.H"
0008 #include "ATOOLS/Math/MyComplex.H"
0009 
0010 namespace ATOOLS {
0011 
0012   /*
0013    * declarations and specialisations for 3 and 4 dimensional vectors of doubles
0014    */
0015   typedef Vec3<double> Vec3D;
0016   typedef Vec4<double> Vec4D;
0017   typedef std::vector<Vec4D> Vec4D_Vector;
0018 
0019   template<> double Vec4<double>::CosPhi() const;
0020   template<> double Vec4<double>::SinPhi() const;
0021   template<> double Vec4<double>::Phi() const;
0022   template<> double Vec4<double>::CosTheta() const;
0023   template<> double Vec4<double>::SinTheta() const;
0024   template<> double Vec4<double>::Theta() const;
0025   template<> double Vec4<double>::Eta() const;
0026   template<> double Vec4<double>::CosTheta(const Vec4D& ref) const;
0027   template<> double Vec4<double>::Theta(const Vec4D& ref) const;
0028   template<> double Vec4<double>::Eta(const Vec4D& ref) const;
0029   template<> double Vec4<double>::CosDPhi(const Vec4D& ref) const;
0030   template<> double Vec4<double>::DPhi(const Vec4D& ref) const;
0031   template<> double Vec4<double>::DEta(const Vec4D& ref) const;
0032   template<> double Vec4<double>::DY(const Vec4D& ref) const;
0033   template<> double Vec4<double>::DR(const Vec4D& ref) const;
0034   template<> double Vec4<double>::DR2(const Vec4D& ref) const;
0035   template<> double Vec4<double>::DRy(const Vec4D& ref) const;
0036   template<> double Vec4<double>::DR2y(const Vec4D& ref) const;
0037   template<> double Vec4<double>::SmallOMCT(const Vec4D& ref) const;
0038   template<> double Vec4<double>::SmallMLDP(const Vec4D& ref) const;
0039 
0040   std::istream& operator>>(std::istream& s,Vec4D& vec);
0041   std::istream& operator>>(std::istream& s,Vec3D& vec);
0042 
0043   bool IsEqual(const Vec4D& v1, const Vec4D& v2, const double crit=1.0e-12);
0044   inline bool operator==(const Vec4D& v1, const Vec4D& v2) {
0045     return IsEqual(v1,v2);
0046   }
0047   inline bool operator!=(const Vec4D& v1, const Vec4D& v2) {
0048     return !IsEqual(v1,v2);
0049   }
0050   bool IsEqual(const Vec3D& v1, const Vec3D& v2, const double crit=1.0e-12);
0051   inline bool operator==(const Vec3D& v1, const Vec3D& v2) {
0052     return IsEqual(v1,v2);
0053   }
0054   inline bool operator!=(const Vec3D& v1, const Vec3D& v2) {
0055     return !IsEqual(v1,v2);
0056   }
0057 
0058 
0059   /*
0060    * declarations and specialisations for 3 and 4 dimensional vectors of Complex
0061    */
0062   typedef Vec3<Complex> Vec3C;
0063   typedef Vec4<Complex> Vec4C;
0064   inline Vec4C conj(const Vec4C& v) {
0065     return Vec4C(std::conj(v[0]),std::conj(v[1]),
0066                  std::conj(v[2]),std::conj(v[3]));
0067   }
0068 
0069   // static members
0070   template<> const Vec4D Vec4<double>::XVEC;
0071   template<> const Vec4D Vec4<double>::YVEC;
0072   template<> const Vec4D Vec4<double>::ZVEC;
0073   template<> const Vec3D Vec3<double>::XVEC;
0074   template<> const Vec3D Vec3<double>::YVEC;
0075   template<> const Vec3D Vec3<double>::ZVEC;
0076 
0077 }
0078 
0079 /*!
0080  \file
0081  \brief   contains typedefs of Vec3D (3-dim. real vector), Vec3C (3-dim. complex
0082  vector), Vec4D (real Minkowski vector), Vec4C (complex Minkowski vector).
0083 
0084  Furthermore it contains specialisations of some member functions of the
0085  templated Vec3 and Vec4 classes.
0086 */
0087 
0088 #endif