-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathop-rmsd.cpp
More file actions
35 lines (25 loc) · 759 Bytes
/
op-rmsd.cpp
File metadata and controls
35 lines (25 loc) · 759 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "op-rmsd.h"
#include "molecule.h"
#include "contrib/rmsd/rmsd++/kabsch.h"
#include <valarray>
namespace Op {
typedef std::valarray<double> matrix;
double rmsd(std::valarray<double> &v1, std::valarray<double> &v2) {
std::valarray<double> v1ctr;
std::valarray<double> v2ctr;
assert(v1.size() == v2.size() && v1.size()%3 == 0);
auto nPts = v1.size()/3;
// find the center of the structures
v1ctr = kabsch::centroid(v1);
v2ctr = kabsch::centroid(v2);
// recenter point sets at origins
for (unsigned int p = 0; p < nPts; p++) {
for(unsigned int d = 0; d < 3; d++) {
v1[3*p + d] -= v1ctr[d];
v2[3*p + d] -= v2ctr[d];
}
}
// rotate and calculate rmsd
return kabsch::kabsch_rmsd(v1, v2, nPts);
}
} // Op