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