File: RMSDMinimizer_test.C

package info (click to toggle)
ball 1.5.0%2Bgit20180813.37fc53c-11
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 239,924 kB
  • sloc: cpp: 326,149; ansic: 4,208; python: 2,303; yacc: 1,778; lex: 1,099; xml: 958; sh: 322; javascript: 164; makefile: 88
file content (110 lines) | stat: -rw-r--r-- 3,792 bytes parent folder | download | duplicates (4)
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// -*- Mode: C++; tab-width: 2; -*-
// vi: set ts=2:
//

#include <BALL/CONCEPT/classTest.h>

///////////////////////////

#include <BALL/STRUCTURE/RMSDMinimizer.h>

///////////////////////////

START_TEST(RMSDMinimizer)

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////

using namespace BALL;

typedef RMSDMinimizer::PointVector Points;

CHECK(RMSDMinimizer::Result RMSDMinimizer::computeTransformation(const AtomBijection& ab))
	// ????
RESULT

CHECK(RMSDMinimizer::Result RMSDMinimizer::computeTransformation
    (const RMSDMinimizer::PointVector& X, const RMSDMinimizer::PointVector& Y))
	Points A;
	Points B;

	TEST_EXCEPTION(RMSDMinimizer::TooFewCoordinates, RMSDMinimizer::computeTransformation(A, B))

	A.push_back(Vector3(0.0, 0.0, 0.0));
	TEST_EXCEPTION(RMSDMinimizer::IncompatibleCoordinateSets, RMSDMinimizer::computeTransformation(A, B))
	B.push_back(Vector3(0.0, 2.0, 0.0));
	TEST_EXCEPTION(RMSDMinimizer::TooFewCoordinates, RMSDMinimizer::computeTransformation(A, B))
	
	A.push_back(Vector3(0.0, 0.0, 1.0));
	TEST_EXCEPTION(RMSDMinimizer::IncompatibleCoordinateSets, RMSDMinimizer::computeTransformation(A, B))
	B.push_back(Vector3(0.0, 2.0, 1.0));
	TEST_EXCEPTION(RMSDMinimizer::TooFewCoordinates, RMSDMinimizer::computeTransformation(A, B))

	A.push_back(Vector3(3.0, 0.0, 1.0));
	TEST_EXCEPTION(RMSDMinimizer::IncompatibleCoordinateSets, RMSDMinimizer::computeTransformation(A, B))
	B.push_back(Vector3(3.0, 2.0, 1.0));
	RMSDMinimizer::Result r = RMSDMinimizer::computeTransformation(A, B);
	PRECISION(1e-3)
	TEST_REAL_EQUAL(r.second, 0.0)
	STATUS("RMSD: " << r.second)
	STATUS("T:\n" << r.first)
	TEST_REAL_EQUAL(r.first.m11, 1.0)
	TEST_REAL_EQUAL(r.first.m12, 0.0)
	TEST_REAL_EQUAL(r.first.m13, 0.0)
	TEST_REAL_EQUAL(r.first.m14, 0.0)
	TEST_REAL_EQUAL(r.first.m21, 0.0)
	TEST_REAL_EQUAL(r.first.m22, 1.0)
	TEST_REAL_EQUAL(r.first.m23, 0.0)
	TEST_REAL_EQUAL(r.first.m24, 2.0)
	TEST_REAL_EQUAL(r.first.m31, 0.0)
	TEST_REAL_EQUAL(r.first.m32, 0.0)
	TEST_REAL_EQUAL(r.first.m33, 1.0)
	TEST_REAL_EQUAL(r.first.m34, 0.0)
	TEST_REAL_EQUAL(r.first.m41, 0.0)
	TEST_REAL_EQUAL(r.first.m42, 0.0)
	TEST_REAL_EQUAL(r.first.m43, 0.0)
	TEST_REAL_EQUAL(r.first.m44, 1.0)
RESULT

CHECK(RMSDMinimizer::Reszlt RMSDMinimizer::computeTransformation
    (const RMSDMinimizer::PointVector& X, const RMSDMinimizer::PointVector& Y))
	vector<Vector3> vs1, vs2;
	
	vs1.push_back(Vector3(25.861,	3.886,	34.880));
	vs1.push_back(Vector3(27.128,	3.019,	34.851));
	vs1.push_back(Vector3(27.781,	3.086,	36.096));
	vs1.push_back(Vector3(30.318,   3.114,  35.247));
	vs1.push_back(Vector3(31.422,   4.794,  34.532));
	vs1.push_back(Vector3(30.314,   4.429,  35.143));		
	vs1.push_back(Vector3(32.569,	7.979,	33.549));
	vs1.push_back(Vector3(32.867,	7.345,	32.521));
	vs1.push_back(Vector3(31.964,	7.456,	34.484));
	
	vs2.push_back(Vector3(25.861,   3.886,  34.880));
	vs2.push_back(Vector3(27.126,   3.020,  34.851));
	vs2.push_back(Vector3(27.526,   2.665,  36.160));
	vs2.push_back(Vector3(30.319,   3.546,  35.391));
	vs2.push_back(Vector3(31.422,   5.105,  34.317));
	vs2.push_back(Vector3(30.304,   4.842,  35.018));
	vs2.push_back(Vector3(32.521,   8.000,  33.476));
	vs2.push_back(Vector3(32.575,   7.569,  32.307));
	vs2.push_back(Vector3(32.080,   7.387,  34.471));
		
	RMSDMinimizer::Result r = RMSDMinimizer::computeTransformation(vs1, vs2);	
	Matrix4x4 m = r.first;
	
	double rmsd = 0;
	for (unsigned int i = 0; i < 9; ++i)
	{
			Vector3 v1 = m * vs1[i];
			Vector3 v2 = vs2[i];
			rmsd += v1.getSquareDistance(v2);
	}	

	rmsd = sqrt(rmsd/9);		
	TEST_REAL_EQUAL(rmsd, r.second)
RESULT

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
END_TEST