From 4e4c273b8402280a15559cc675689e0332c75f19 Mon Sep 17 00:00:00 2001 From: Gabriel Studer <gabriel.studer@stud.unibas.ch> Date: Thu, 23 May 2013 15:32:56 +0200 Subject: [PATCH] added possibility to superpose two vectors of Vec3 --- modules/mol/alg/pymod/export_svd_superpose.cc | 5 ++++- modules/mol/alg/src/svd_superpose.cc | 11 +++++++++++ modules/mol/alg/src/svd_superpose.hh | 8 ++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/modules/mol/alg/pymod/export_svd_superpose.cc b/modules/mol/alg/pymod/export_svd_superpose.cc index 9c4087021..d5f942fe7 100644 --- a/modules/mol/alg/pymod/export_svd_superpose.cc +++ b/modules/mol/alg/pymod/export_svd_superpose.cc @@ -36,6 +36,8 @@ void export_svdSuperPose() { SuperpositionResult (*sup1)(const mol::EntityView&,const mol::EntityView&,bool) = SuperposeSVD; SuperpositionResult (*sup2)(const std::vector<geom::Vec3>&,const std::vector<geom::Vec3>& ) = SuperposeSVD; + SuperpositionResult (*sup3)(const mol::EntityView&,const mol::EntityView&, int, Real, bool) = IterativeSuperposeSVD; + SuperpositionResult (*sup4)(const std::vector<geom::Vec3>&,const std::vector<geom::Vec3>&, int, Real) = IterativeSuperposeSVD; class_<SuperpositionResult>("SuperpositionResult", init<>()) .def_readwrite("ncycles", &SuperpositionResult::ncycles) .def_readwrite("rmsd", &SuperpositionResult::rmsd) @@ -51,7 +53,8 @@ void export_svdSuperPose() def("SuperposeAtoms", &SuperposeAtoms,(arg("apply_transform")=true)); def("SuperposeSVD", sup1, (arg("apply_transform")=true)); def("SuperposeSVD", sup2, (arg("apply_transform")=true)); - def("IterativeSuperposeSVD", &IterativeSuperposeSVD,(arg("max_iterations")=5, arg("distance_threshold")=3.0,arg("apply_transform")=true)); + def("IterativeSuperposeSVD", sup3,(arg("max_iterations")=5, arg("distance_threshold")=3.0,arg("apply_transform")=true)); + def("IterativeSuperposeSVD", sup4,(arg("max_iterations")=5, arg("distance_threshold")=3.0)); def("CalculateRMSD", &CalculateRMSD, (arg("transformation")=geom::Mat4())); } diff --git a/modules/mol/alg/src/svd_superpose.cc b/modules/mol/alg/src/svd_superpose.cc index 38dd51202..c5279eb35 100644 --- a/modules/mol/alg/src/svd_superpose.cc +++ b/modules/mol/alg/src/svd_superpose.cc @@ -498,5 +498,16 @@ SuperpositionResult IterativeSuperposeSVD(const mol::EntityView& ev, return result; } +SuperpositionResult DLLEXPORT_OST_MOL_ALG IterativeSuperposeSVD(const std::vector<geom::Vec3>& pl1, + const std::vector<geom::Vec3>& pl2, + int max_cycles, + Real distance_threshold){ + + MeanSquareMinimizer msm = MeanSquareMinimizer::FromPointLists(pl1, pl2); + SuperpositionResult result = msm.IterativeMinimize(max_cycles, distance_threshold); + result.rmsd = calc_rmsd_for_point_lists(pl1, pl2, result.transformation); + return result; +} + }}} //ns diff --git a/modules/mol/alg/src/svd_superpose.hh b/modules/mol/alg/src/svd_superpose.hh index bdbaf505d..28ee7a0d4 100644 --- a/modules/mol/alg/src/svd_superpose.hh +++ b/modules/mol/alg/src/svd_superpose.hh @@ -102,6 +102,14 @@ SuperpositionResult DLLEXPORT_OST_MOL_ALG IterativeSuperposeSVD(const mol::Entit Real distance_threshold, bool apply_transform); +/// \brief iterative superposition of two point lists +SuperpositionResult DLLEXPORT_OST_MOL_ALG IterativeSuperposeSVD(const std::vector<geom::Vec3>& pl1, + const std::vector<geom::Vec3>& pl2, + int max_cycles, + Real distance_threshold); + + + /// \brief calculates RMSD for two entity view Real DLLEXPORT_OST_MOL_ALG CalculateRMSD(const mol::EntityView& ev1, const mol::EntityView& ev2, -- GitLab