// $Id: CovMatrix3VectorMultiply.cc,v 1.4 2002/09/19 16:45:18 sachs Exp $ // David Sachs, Fermilab - April 2002 #include "CovMatrices/CovMatrix3.h" #include "CovMatrixElement.h" // Functions for multiplying a CovMatrix3 by a Vector3 or a BiVector3 // These functions are very straightforward, but contain too many operations to // justify making them inline namespace CovMatrices { Vector3 operator* ( const CovMatrix3& m, const Vector3& v ) { return Vector3( m.M[M00]*v.E[0] + m.M[M01]*v.E[1] + m.M[M02]*v.E[2], m.M[M10]*v.E[0] + m.M[M11]*v.E[1] + m.M[M12]*v.E[2], m.M[M20]*v.E[0] + m.M[M21]*v.E[1] + m.M[M22]*v.E[2]); } Vector3 operator* ( const Vector3& v, const CovMatrix3& m ) { return Vector3( m.M[M00]*v.E[0] + m.M[M01]*v.E[1] + m.M[M02]*v.E[2], m.M[M10]*v.E[0] + m.M[M11]*v.E[1] + m.M[M12]*v.E[2], m.M[M20]*v.E[0] + m.M[M21]*v.E[1] + m.M[M22]*v.E[2]); } BiVector3 operator* ( const CovMatrix3& m, const BiVector3& b ) { return BiVector3( m.M[M00]*b.v0.E[0] + m.M[M01]*b.v0.E[1] + m.M[M02]*b.v0.E[2], m.M[M10]*b.v0.E[0] + m.M[M11]*b.v0.E[1] + m.M[M12]*b.v0.E[2], m.M[M20]*b.v0.E[0] + m.M[M21]*b.v0.E[1] + m.M[M22]*b.v0.E[2], m.M[M00]*b.v1.E[0] + m.M[M01]*b.v1.E[1] + m.M[M02]*b.v1.E[2], m.M[M10]*b.v1.E[0] + m.M[M11]*b.v1.E[1] + m.M[M12]*b.v1.E[2], m.M[M20]*b.v1.E[0] + m.M[M21]*b.v1.E[1] + m.M[M22]*b.v1.E[2]); } BiVector3 operator* ( const BiVector3& b, const CovMatrix3& m ) { return BiVector3( m.M[M00]*b.v0.E[0] + m.M[M01]*b.v0.E[1] + m.M[M02]*b.v0.E[2], m.M[M10]*b.v0.E[0] + m.M[M11]*b.v0.E[1] + m.M[M12]*b.v0.E[2], m.M[M20]*b.v0.E[0] + m.M[M21]*b.v0.E[1] + m.M[M22]*b.v0.E[2], m.M[M00]*b.v1.E[0] + m.M[M01]*b.v1.E[1] + m.M[M02]*b.v1.E[2], m.M[M10]*b.v1.E[0] + m.M[M11]*b.v1.E[1] + m.M[M12]*b.v1.E[2], m.M[M20]*b.v1.E[0] + m.M[M21]*b.v1.E[1] + m.M[M22]*b.v1.E[2]); } }