Skip to content
Snippets Groups Projects
Commit b3944657 authored by ansgar's avatar ansgar
Browse files

added generic pointlist -> pointlist superposition


git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2123 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent d8a438f2
No related branches found
No related tags found
No related merge requests found
......@@ -30,6 +30,8 @@ using namespace ost::mol::alg;
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;
class_<SuperpositionResult>("SuperpositionResult", init<>())
.def_readwrite("ncycles", &SuperpositionResult::ncycles)
.def_readwrite("rmsd", &SuperpositionResult::rmsd)
......@@ -41,7 +43,8 @@ void export_svdSuperPose()
&SuperpositionResult::entity_view2)
;
def("SuperposeAtoms", &SuperposeAtoms,(arg("apply_transform")=true));
def("SuperposeSVD", &SuperposeSVD, (arg("apply_transform")=true));
def("SuperposeSVD", sup1);
def("SuperposeSVD", sup2);
def("CalculateRMSD", &CalculateRMSD, (arg("transformation")=geom::Mat4()));
def("IterativeSuperposition", &IterativeSuperposition, (arg("ncycles")=200,
arg("dist_thres")=4.0,
......
......@@ -131,6 +131,8 @@ public:
ERVecX Vec);
SuperpositionResult Run(const mol::AtomViewList& atoms1,
const mol::AtomViewList& atoms2);
SuperpositionResult Run(const std::vector<geom::Vec3>& pl1,
const std::vector<geom::Vec3>& pl2);
SuperpositionResult DoSuperposition();
EIGEN_MAKE_ALIGNED_OPERATOR_NEW //needed only if *fixed* sized matrices are
//members of classes
......@@ -295,6 +297,12 @@ SuperpositionResult SuperposerSVD::Run(const mol::AtomViewList& atoms1,
return impl_->Run(atoms1, atoms2);
}
SuperpositionResult SuperposerSVD::Run(const std::vector<geom::Vec3>& pl1,
const std::vector<geom::Vec3>& pl2)
{
return impl_->Run(pl1,pl2);
}
SuperpositionResult SuperposerSVDImpl::Run(const mol::AtomViewList& atoms1,
const mol::AtomViewList& atoms2)
{
......@@ -315,6 +323,15 @@ SuperpositionResult SuperposerSVDImpl::Run(const mol::AtomViewList& atoms1,
return this->DoSuperposition();
}
SuperpositionResult SuperposerSVDImpl::Run(const std::vector<geom::Vec3>& pl1,
const std::vector<geom::Vec3>& pl2)
{
for (unsigned int counter=0; counter<pl1.size();++counter) {
atoms1_.row(counter)=ERVec3(SuperposerSVDImpl::Vec3ToEigenVec(pl1[counter]));
atoms2_.row(counter)=ERVec3(SuperposerSVDImpl::Vec3ToEigenVec(pl2[counter]));
}
return this->DoSuperposition();
}
SuperpositionResult SuperposeAtoms(const mol::AtomViewList& atoms1,
......@@ -370,6 +387,24 @@ SuperpositionResult SuperposeSVD(const mol::EntityView& ev1,
return res;
}
SuperpositionResult SuperposeSVD(const std::vector<geom::Vec3>& pl1,
const std::vector<geom::Vec3>& pl2)
{
if (pl1.size()!=pl2.size()){
throw std::runtime_error("pointlist lengths not equal");
}
if ((pl1.size()<3)){
throw std::runtime_error("three or more points required");
}
SuperposerSVD sp(pl1.size(), true);
SuperpositionResult res=sp.Run(pl1, pl2);
res.entity_view1=EntityView();
res.entity_view2=EntityView();
res.ncycles=1;
res.rmsd=0.0;
return res;
}
SuperpositionResult IterativeSuperposition(mol::EntityView& ev1,
mol::EntityView& ev2,
int ncycles,
......
......@@ -59,6 +59,9 @@ public:
SuperpositionResult Run(const mol::AtomViewList& atoms1,
const mol::AtomViewList& atoms2);
SuperpositionResult Run(const std::vector<geom::Vec3>& pl1,
const std::vector<geom::Vec3>& pl2);
private:
SuperposerSVDImpl* impl_;
};
......@@ -72,6 +75,10 @@ SuperpositionResult DLLEXPORT_OST_MOL_ALG SuperposeSVD(const mol::EntityView& ev
const mol::EntityView& ev2,
bool apply_transform);
/// \brief superposes two pointlists
SuperpositionResult DLLEXPORT_OST_MOL_ALG SuperposeSVD(const std::vector<geom::Vec3>& pl1,
const std::vector<geom::Vec3>& pl2);
/// \brief iterative superposition
SuperpositionResult DLLEXPORT_OST_MOL_ALG IterativeSuperposition(mol::EntityView& ev1,
mol::EntityView& ev2,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment