diff --git a/Code/Mantid/Framework/DataObjects/src/CoordTransformAffine.cpp b/Code/Mantid/Framework/DataObjects/src/CoordTransformAffine.cpp index ab4a393b03c1d3c55fa122d0fad635afb5d56982..42d14ec96dc22fc6016767c0208d4cf43be78be0 100644 --- a/Code/Mantid/Framework/DataObjects/src/CoordTransformAffine.cpp +++ b/Code/Mantid/Framework/DataObjects/src/CoordTransformAffine.cpp @@ -226,31 +226,30 @@ void CoordTransformAffine::buildNonOrthogonal( // Start with identity m_affineMatrix.identityMatrix(); - Mantid::Kernel::Matrix<coord_t> A(outD,inD); + //A matrix is columns of basis vectors + Mantid::Kernel::Matrix<coord_t> A(inD,outD); for(size_t i = 0; i < outD; i++){ for(size_t j = 0; j < inD; j++){ - A[i][j]=axes[i][j]; + A[j][i]=axes[i][j]; } } - Mantid::Kernel::Matrix<coord_t> AT=A; AT.Transpose(); - Mantid::Kernel::Matrix<coord_t> AAT=A*AT; - AAT.Invert(); - Mantid::Kernel::Matrix<coord_t> Ainv=AT*AAT; - Mantid::Kernel::Matrix<coord_t> offset(1,inD); + Mantid::Kernel::Matrix<coord_t> ATA=AT*A; + ATA.Invert(); + Mantid::Kernel::Matrix<coord_t> Ainv=ATA*AT; + Mantid::Kernel::Matrix<coord_t> offset(inD,1); for(size_t j = 0; j < inD; j++){ - offset[0][j]=origin[j]; + offset[j][0]=origin[j]; } - Mantid::Kernel::Matrix<coord_t> outoffset=offset*Ainv; + Mantid::Kernel::Matrix<coord_t> outoffset=Ainv*offset; for(size_t i = 0; i < outD; i++){ for(size_t j = 0; j < inD; j++){ m_affineMatrix[i][j]=Ainv[i][j]*scaling[i]; } - m_affineMatrix[i][inD]=-outoffset[0][i]*scaling[i]; + m_affineMatrix[i][inD]=-outoffset[i][0]*scaling[i]; } - // Copy into the raw matrix (for speed) copyRawMatrix(); }