From 9ee59e5a0b2a83decb05d491752c935f0a1381e4 Mon Sep 17 00:00:00 2001 From: juergen <juergen@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Mon, 22 Mar 2010 18:58:10 +0000 Subject: [PATCH] fixed BZDNG-49: superposition failed in windows: -replaced all reinterpret_casts with manual copying over index by index git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1871 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- modules/mol/alg/src/svd_superpose.cc | 39 +++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/modules/mol/alg/src/svd_superpose.cc b/modules/mol/alg/src/svd_superpose.cc index 343c00e98..6608372c1 100644 --- a/modules/mol/alg/src/svd_superpose.cc +++ b/modules/mol/alg/src/svd_superpose.cc @@ -27,6 +27,7 @@ #include <Eigen/SVD> #include <Eigen/LU> +#include <iostream> #include <ost/base.hh> #include <ost/geom/vec3.hh> #include <ost/mol/alg/svd_superpose.hh> @@ -108,19 +109,54 @@ SuperposerSVD::SuperposerSVD(int natoms, bool alloc_atoms): } geom::Vec3 SuperposerSVD::EigenVec3ToVec3(const EVec3 &vec){ +#if defined _MSC_VER + geom::Vec3 myvec3; + for (int i=0; i<3; ++i) { + myvec3[i]=vec[i]; + } + return myvec3; +#else return *reinterpret_cast<const geom::Vec3*>(&vec); +#endif } geom::Mat3 SuperposerSVD::EigenMat3ToMat3(const EMat3 &mat){ +#if defined _MSC_VER + geom::Mat3 mymat3; + for (int i=0; i<3; ++i) { + for (int j=0; j<3; ++j) { + mymat3(j,i)=mat(i,j); + } + } + return mymat3; +#else return *reinterpret_cast<const geom::Mat3*>(&mat); +#endif + } EVec3 SuperposerSVD::Vec3ToEigenRVec(const geom::Vec3 &vec){ +#if defined _MSC_VER + EVec3 myvec3=EVec3::Zero(); + for (int counter=0; counter<3; ++counter) { + myvec3[counter]=vec[counter]; + } + return myvec3; +#else return *reinterpret_cast<const ERVec3*>(&vec); +#endif } EVec3 SuperposerSVD::Vec3ToEigenVec(const geom::Vec3 &vec){ - return *reinterpret_cast<const EVec3*>(&vec); +#if defined _MSC_VER + EVec3 myvec3=EVec3::Zero(); + for (int counter=0; counter<3; ++counter) { + myvec3[counter]=vec[counter]; + } + return myvec3; +#else + return *reinterpret_cast<const EVec3*>(&vec); +#endif } EMatX SuperposerSVD::SubtractVecFromMatrixRows(EMatX Mat, @@ -165,6 +201,7 @@ SuperpositionResult SuperposerSVD::DoSuperposition() atoms1_=this->SuperposerSVD::SubtractVecFromMatrixRows(atoms1_, avg1_); atoms2_=this->SuperposerSVD::SubtractVecFromMatrixRows(atoms2_, avg2_); EMatX atoms2=atoms2_.transpose(); + //single value decomposition Eigen::SVD<EMat3> svd(atoms2*atoms1_); -- GitLab