Permalink
Browse files

Added RMSD

  • Loading branch information...
1 parent b43b42d commit 98b301c1009f0003974fdef81db0ff6cb1bcc83d @betajippity committed Feb 20, 2014
Showing with 643 additions and 0 deletions.
  1. +1 −0 README.md
  2. +80 −0 include/rmsd/rmsd.h
  3. +562 −0 src/rmsd/rmsd.c
View
@@ -14,5 +14,6 @@ Nuparu currently consists of:
* [Eigen](eigen.tuxfamily.org/) 3.2.0 (OSX/Linux/Win)
* [OpenVDB](http://www.openvdb.org/) 2.1.0 (OSX)
* [Partio](http://www.disneyanimation.com/technology/partio.html) 1.1.0 (OSX)
+* [RMSD](http://boscoh.com/code/), with minor modifications for C++ (OSX/Linux/Win)
Note: OpenVDB's dependencies are dynamically linked, so OpenVDB requires [Ilmbase/OpenEXR](http://www.openexr.com/) and [Intel TBB](https://www.threadingbuildingblocks.org/) to be installed.
View
@@ -0,0 +1,80 @@
+/*
+ * *******************************************************************
+ *
+ * rmsd.h
+ * (c) 2005 Bosco K Ho
+ *
+ * Implementation of the Kabsch algorithm to find the RMSD, and
+ * the least-squares rotation matrix for a superposition between
+ * two sets of vectors.
+ *
+ * This implementation is completely self-contained. No other dependencies.
+ *
+ * **************************************************************************
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation; either version 2.1 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * **************************************************************************
+ *
+ */
+
+#ifndef _rmsd_h_
+#define _rmsd_h_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+ * calculate_rotation_rmsd()
+ *
+ * given two lists of x,y,z coordinates, constructs
+ * - mov_com: the centre of mass of the mov list
+ * - mov_to_ref: vector between the com of mov and ref
+ * - U: the rotation matrix for least-squares, usage of
+ * of the matrix U[3][3] is
+ * for (i=0; i<3; i++)
+ * {
+ * rotated_v[i] = 0.0;
+ * for (j=0; j<3; j++)
+ * rotated_v[i] += U[i][j] * v[j];
+ * }
+ * - rmsd: measures similarity between the vectors
+ */
+void calculate_rotation_rmsd(double ref_xlist[][3],
+ double mov_xlist[][3],
+ int n_list,
+ double mov_com[3],
+ double mov_to_ref[3],
+ double U[3][3],
+ double* rmsd);
+
+/*
+ * fast_rmsd()
+ *
+ * Fast calculation of rmsd w/o calculating a rotation matrix,
+ * adapted from the BTK by Chris Saunders 11/2002.
+ */
+void fast_rmsd(double ref_xlist[][3],
+ double mov_xlist[][3],
+ int n_list,
+ double* rmsd);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
Oops, something went wrong.

0 comments on commit 98b301c

Please sign in to comment.