# TQuaternion* **public TObject** ## class ```cpp public: TQuaternion(Double_t real = 0, Double_t X = 0, Double_t Y = 0, Double_t Z = 0); TQuaternion(const TVector3 & vector, Double_t real = 0); TQuaternion(const Double_t *); TQuaternion(const Float_t *); // Constructors from an array : 0 to 2 = vector part, 3 = real part TQuaternion(const TQuaternion &); // The copy constructor. virtual ~TQuaternion(); // Destructor Double_t operator () (int) const; inline Double_t operator [] (int) const; // Get components by index. 0 to 2 = vector part, 3 = real part Double_t & operator () (int); inline Double_t & operator [] (int); // Set components by index. 0 to 2 = vector part, 3 = real part inline TQuaternion& SetRXYZ(Double_t r,Double_t x,Double_t y,Double_t z); inline TQuaternion& SetRV(Double_t r, TVector3& vect); // Sets components TQuaternion& SetAxisQAngle(TVector3& v,Double_t QAngle); // Set from vector direction and quaternion angle Double_t GetQAngle() const; TQuaternion& SetQAngle(Double_t angle); // set and get quaternion angle inline void GetRXYZ(Double_t *carray) const; inline void GetRXYZ(Float_t *carray) const; // Get the components into an array : 0 to 2 vector part, 3 real part // not checked! // --------------- real to quaternion algebra inline TQuaternion& operator=(Double_t r); inline Bool_t operator == (Double_t r) const; inline Bool_t operator != (Double_t r) const; inline TQuaternion& operator+=(Double_t real); inline TQuaternion& operator-=(Double_t real); inline TQuaternion& operator*=(Double_t real); inline TQuaternion& operator/=(Double_t real); TQuaternion operator*(Double_t real) const; TQuaternion operator+(Double_t real) const; TQuaternion operator-(Double_t real) const; TQuaternion operator/(Double_t real) const; // ---------------- vector to quaternion algebra inline TQuaternion& operator=(const TVector3& ); inline Bool_t operator == (const TVector3&) const; inline Bool_t operator != (const TVector3&) const; inline TQuaternion& operator+=(const TVector3 &vector); inline TQuaternion& operator-=(const TVector3 &vector); TQuaternion& MultiplyLeft(const TVector3 &vector); TQuaternion& operator*=(const TVector3 &vector); TQuaternion& DivideLeft(const TVector3 &vector); TQuaternion& operator/=(const TVector3 &vector); TQuaternion operator+(const TVector3 &vector) const; TQuaternion operator-(const TVector3 &vector) const; TQuaternion LeftProduct(const TVector3 &vector) const; TQuaternion operator*(const TVector3 &vector) const; TQuaternion LeftQuotient(const TVector3 &vector) const; TQuaternion operator/(const TVector3 &vector) const; // ----------------- quaternion algebra inline TQuaternion& operator=(const TQuaternion& ); inline Bool_t operator == (const TQuaternion&) const; inline Bool_t operator != (const TQuaternion&) const; inline TQuaternion& operator+=(const TQuaternion &quaternion); inline TQuaternion& operator-=(const TQuaternion &quaternion); TQuaternion& MultiplyLeft(const TQuaternion &quaternion); TQuaternion& operator*=(const TQuaternion &quaternion); TQuaternion& DivideLeft(const TQuaternion &quaternion); TQuaternion& operator/=(const TQuaternion &quaternion); TQuaternion operator+(const TQuaternion &quaternion) const; TQuaternion operator-(const TQuaternion &quaternion) const; TQuaternion LeftProduct(const TQuaternion &quaternion) const; TQuaternion operator*(const TQuaternion &quaternion) const; TQuaternion LeftQuotient(const TQuaternion &quaternion) const; TQuaternion operator/(const TQuaternion &quaternion) const; // ------------------ general algebra inline Double_t Norm() const; // quaternion magnitude inline Double_t Norm2() const; // quaternion squared magnitude Double_t QMag() const { return Norm(); } // quaternion magnitude Double_t QMag2() const { return Norm2(); } // quaternion squared magnitude inline TQuaternion& Normalize(); // normalize quaternion inline TQuaternion operator - () const; // Unary minus. inline TQuaternion Conjugate() const; TQuaternion Invert() const; void Rotate(TVector3& vect) const; TVector3 Rotation(const TVector3& vect) const; void Print(Option_t* option="") const; Double_t fRealPart; // Real part TVector3 fVectorPart; // vector part ```