]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - STARLIGHT/starlight/include/vector3.h
STARLIGHT code and interface
[u/mrichter/AliRoot.git] / STARLIGHT / starlight / include / vector3.h
diff --git a/STARLIGHT/starlight/include/vector3.h b/STARLIGHT/starlight/include/vector3.h
new file mode 100644 (file)
index 0000000..3929f37
--- /dev/null
@@ -0,0 +1,97 @@
+///////////////////////////////////////////////////////////////////////////
+//
+//    Copyright 2010
+//
+//    This file is part of starlight.
+//
+//    starlight is free software: you can redistribute it and/or modify
+//    it under the terms of the GNU General Public License as published by
+//    the Free Software Foundation, either version 3 of the License, or
+//    (at your option) any later version.
+//
+//    starlight is distributed in the hope that it will be useful,
+//    but WITHOUT ANY WARRANTY; without even the implied warranty of
+//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+//    GNU General Public License for more details.
+//
+//    You should have received a copy of the GNU General Public License
+//    along with starlight. If not, see <http://www.gnu.org/licenses/>.
+//
+///////////////////////////////////////////////////////////////////////////
+//
+// File and Version Information:
+// $Rev:: 28                          $: revision of last commit
+// $Author:: bgrube                   $: author of last commit
+// $Date:: 2010-12-10 19:30:01 +0100 #$: date of last commit
+//
+// Description:
+//
+//
+//
+///////////////////////////////////////////////////////////////////////////
+
+
+#ifndef VECTOR3_H
+#define VECTOR3_H
+
+
+#include <iostream>
+#include <cmath>
+
+
+class vector3
+{
+   public:
+      vector3();
+      vector3(double *vec);
+      vector3(double x, double y, double z);
+      virtual ~vector3();
+      
+      const double* GetVector() const { return _vec; }
+      
+      void SetVector(double x, double y, double z);
+      void SetVector(double *vec);
+
+           vector3& operator =(const vector3& vec)
+           {
+                   if (this != &vec)
+                           for (unsigned int i = 0; i < 3; ++i)
+                                   _vec[i] = vec._vec[i];
+                   return *this;
+           }
+
+           vector3& operator +=(const vector3& vec)
+           {
+                   for (unsigned int i = 0; i < 3; ++i)
+                           _vec[i] += vec._vec[i];
+                   return *this;
+           }
+           vector3& operator -=(const vector3& vec)
+           {
+                   for (unsigned int i = 0; i < 3; ++i)
+                           _vec[i] -= vec._vec[i];
+                   return *this;
+           }
+
+           double X() const { return _vec[0]; }
+           double Y() const { return _vec[1]; }
+           double Z() const { return _vec[2]; }
+
+           double Mag2() const { return _vec[0] * _vec[0] + _vec[1] * _vec[1] + _vec[2] * _vec[2]; }
+           double Mag () const { return sqrt(Mag2()); }
+      
+           friend std::ostream& operator << (std::ostream&  out,
+                                             const vector3& vec)
+           {
+                   out << "(" << vec.X() << ", " << vec.Y() << ", " << vec.Z() << ")";
+                   return out;
+           }
+       
+   private:
+      
+      double _vec[3];
+   
+};
+
+
+#endif  // VECTOR3_H