File: spectrophoretest.cpp

package info (click to toggle)
openbabel 2.3.2%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 75,356 kB
  • ctags: 41,971
  • sloc: cpp: 321,256; ansic: 89,228; python: 7,262; perl: 6,418; pascal: 793; sh: 194; xml: 97; ruby: 55; makefile: 48; java: 23
file content (512 lines) | stat: -rw-r--r-- 24,325 bytes parent folder | download | duplicates (3)
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
#include <vector>

#include "obtest.h"
#include <openbabel/mol.h>
#include <openbabel/spectrophore.h>



// Normal Spectrophore(TM): test all values
void test01(OpenBabel::OBMol* mol)
{
   OpenBabel::OBSpectrophore s;
   s.SetNormalization(OpenBabel::OBSpectrophore::NoNormalization);
   s.SetResolution(3.0);
   s.SetAccuracy(OpenBabel::OBSpectrophore::AngStepSize20);
   s.SetStereo(OpenBabel::OBSpectrophore::NoStereoSpecificProbes);
   std::vector<double> r = s.GetSpectrophore(mol);
   OB_REQUIRE( (r[0]  >  1.598) && (r[0]  <  1.600) );
   OB_REQUIRE( (r[1]  >  1.576) && (r[1]  <  1.578) );
   OB_REQUIRE( (r[2]  >  1.169) && (r[2]  <  1.171) );
   OB_REQUIRE( (r[3]  >  3.760) && (r[3]  <  3.762) );
   OB_REQUIRE( (r[4]  >  5.174) && (r[4]  <  5.176) );
   OB_REQUIRE( (r[5]  >  5.780) && (r[5]  <  5.782) );
   OB_REQUIRE( (r[6]  >  3.796) && (r[6]  <  3.798) );
   OB_REQUIRE( (r[7]  >  3.712) && (r[7]  <  3.714) );
   OB_REQUIRE( (r[8]  >  4.650) && (r[8]  <  4.652) );
   OB_REQUIRE( (r[9]  >  7.736) && (r[9]  <  7.738) );
   OB_REQUIRE( (r[10] >  7.949) && (r[10] <  7.951) );
   OB_REQUIRE( (r[11] >  4.868) && (r[11] <  4.870) );
   OB_REQUIRE( (r[12] >  2.707) && (r[12] <  2.709) );
   OB_REQUIRE( (r[13] >  3.470) && (r[13] <  3.472) );
   OB_REQUIRE( (r[14] >  6.698) && (r[14] <  6.700) );
   OB_REQUIRE( (r[15] >  9.485) && (r[15] <  9.487) );
   OB_REQUIRE( (r[16] >  7.667) && (r[16] <  7.669) );
   OB_REQUIRE( (r[17] >  8.881) && (r[17] <  8.883) );
   OB_REQUIRE( (r[18] >  4.899) && (r[18] <  4.901) );
   OB_REQUIRE( (r[19] >  7.478) && (r[19] <  7.480) );
   OB_REQUIRE( (r[20] >  9.323) && (r[20] <  9.325) );
   OB_REQUIRE( (r[21] > 10.292) && (r[21] < 10.294) );
   OB_REQUIRE( (r[22] > 12.955) && (r[22] < 12.957) );
   OB_REQUIRE( (r[23] > 10.334) && (r[23] < 10.336) );
   OB_REQUIRE( (r[24] >  4.020) && (r[24] <  4.022) );
   OB_REQUIRE( (r[25] >  3.813) && (r[25] <  3.815) );
   OB_REQUIRE( (r[26] >  2.946) && (r[26] <  2.948) );
   OB_REQUIRE( (r[27] >  6.380) && (r[27] <  6.382) );
   OB_REQUIRE( (r[28] > 11.003) && (r[28] < 11.005) );
   OB_REQUIRE( (r[29] >  8.278) && (r[29] <  8.280) );
   OB_REQUIRE( (r[30] >  6.548) && (r[30] <  6.550) );
   OB_REQUIRE( (r[31] >  7.135) && (r[31] <  7.137) );
   OB_REQUIRE( (r[32] >  8.612) && (r[32] <  8.614) );
   OB_REQUIRE( (r[33] > 13.181) && (r[33] < 13.183) );
   OB_REQUIRE( (r[34] > 13.743) && (r[34] < 13.745) );
   OB_REQUIRE( (r[35] >  9.083) && (r[35] <  9.085) );
   OB_REQUIRE( (r[36] >  0.458) && (r[36] <  0.460) );
   OB_REQUIRE( (r[37] >  0.641) && (r[37] <  0.643) );
   OB_REQUIRE( (r[38] >  2.171) && (r[38] <  2.173) );
   OB_REQUIRE( (r[39] >  2.752) && (r[39] <  2.754) );
   OB_REQUIRE( (r[40] >  2.347) && (r[40] <  2.349) );
   OB_REQUIRE( (r[41] >  2.604) && (r[41] <  2.606) );
   OB_REQUIRE( (r[42] >  1.613) && (r[42] <  1.615) );
   OB_REQUIRE( (r[43] >  3.165) && (r[43] <  3.167) );
   OB_REQUIRE( (r[44] >  3.390) && (r[44] <  3.392) );
   OB_REQUIRE( (r[45] >  3.131) && (r[45] <  3.133) );
   OB_REQUIRE( (r[46] >  4.104) && (r[46] <  4.106) );
   OB_REQUIRE( (r[47] >  2.874) && (r[47] <  2.876) );
}



// With increased accuracy
void test02(OpenBabel::OBMol* mol)
{
   OpenBabel::OBSpectrophore s;
   s.SetNormalization(OpenBabel::OBSpectrophore::NoNormalization);
   s.SetResolution(3.0);
   s.SetAccuracy(OpenBabel::OBSpectrophore::AngStepSize5);
   s.SetStereo(OpenBabel::OBSpectrophore::NoStereoSpecificProbes);
   std::vector<double> r = s.GetSpectrophore(mol);
   OB_REQUIRE( (r[0]  > 1.644) && (r[0]  < 1.645) );
   OB_REQUIRE( (r[12] > 2.724) && (r[12] < 2.725) );
   OB_REQUIRE( (r[24] > 4.043) && (r[24] < 4.044) );
   OB_REQUIRE( (r[36] > 0.458) && (r[36] < 0.459) );
}



// With modified resolution
void test03(OpenBabel::OBMol* mol)
{
   OpenBabel::OBSpectrophore s;
   s.SetNormalization(OpenBabel::OBSpectrophore::NoNormalization);
   s.SetResolution(10.0);
   s.SetAccuracy(OpenBabel::OBSpectrophore::AngStepSize20);
   s.SetStereo(OpenBabel::OBSpectrophore::NoStereoSpecificProbes);
   std::vector<double> r = s.GetSpectrophore(mol);
   OB_REQUIRE( (r[1]  > 0.146) && (r[1]  < 0.147) );
   OB_REQUIRE( (r[13] > 0.327) && (r[13] < 0.328) );
   OB_REQUIRE( (r[25] > 0.359) && (r[25] < 0.360) );
   OB_REQUIRE( (r[37] > 0.061) && (r[37] < 0.062) );
}



// With normalization towards zero mean
void test04(OpenBabel::OBMol* mol)
{
   OpenBabel::OBSpectrophore s;
   s.SetNormalization(OpenBabel::OBSpectrophore::NormalizationTowardsZeroMean);
   s.SetResolution(3.0);
   s.SetAccuracy(OpenBabel::OBSpectrophore::AngStepSize20);
   s.SetStereo(OpenBabel::OBSpectrophore::NoStereoSpecificProbes);
   std::vector<double> r = s.GetSpectrophore(mol);
   OB_REQUIRE( (r[2]  > -3.145) && (r[2]  < -3.144) );
   OB_REQUIRE( (r[14] > -1.152) && (r[14] < -1.151) );
   OB_REQUIRE( (r[26] > -4.949) && (r[26] < -4.948) );
   OB_REQUIRE( (r[38] > -0.267) && (r[38] < -0.266) );
}



// With normalization towards unit std
void test05(OpenBabel::OBMol* mol)
{
   OpenBabel::OBSpectrophore s;
   s.SetNormalization(OpenBabel::OBSpectrophore::NormalizationTowardsUnitStd);
   s.SetResolution(3.0);
   s.SetAccuracy(OpenBabel::OBSpectrophore::AngStepSize20);
   s.SetStereo(OpenBabel::OBSpectrophore::NoStereoSpecificProbes);
   std::vector<double> r = s.GetSpectrophore(mol);
   OB_REQUIRE( (r[3]  > 1.698) && (r[3]  < 1.699) );
   OB_REQUIRE( (r[15] > 3.147) && (r[15] < 3.148) );
   OB_REQUIRE( (r[27] > 1.823) && (r[27] < 1.824) );
   OB_REQUIRE( (r[39] > 2.539) && (r[39] < 2.540) );
}



// With normalization towards unit std and zero mean
void test06(OpenBabel::OBMol* mol)
{
   OpenBabel::OBSpectrophore s;
   s.SetNormalization(OpenBabel::OBSpectrophore::NormalizationTowardsZeroMeanAndUnitStd);
   s.SetResolution(3.0);
   s.SetAccuracy(OpenBabel::OBSpectrophore::AngStepSize20);
   s.SetStereo(OpenBabel::OBSpectrophore::NoStereoSpecificProbes);
   std::vector<double> r = s.GetSpectrophore(mol);
   OB_REQUIRE( (r[4]  >  0.388) && (r[4]  <  0.389) );
   OB_REQUIRE( (r[16] > -0.061) && (r[16] < -0.060) );
   OB_REQUIRE( (r[28] >  0.887) && (r[28] <  0.888) );
   OB_REQUIRE( (r[40] > -0.084) && (r[40] < -0.083) );
}



// Unique stereo probes
void test07(OpenBabel::OBMol* mol)
{
   OpenBabel::OBSpectrophore s;
   s.SetNormalization(OpenBabel::OBSpectrophore::NoNormalization);
   s.SetResolution(3.0);
   s.SetAccuracy(OpenBabel::OBSpectrophore::AngStepSize20);
   s.SetStereo(OpenBabel::OBSpectrophore::UniqueStereoSpecificProbes);
   std::vector<double> r = s.GetSpectrophore(mol);
   OB_REQUIRE( (r[0]  >  1.150) && (r[0]  <  1.151) );
   OB_REQUIRE( (r[1]  >  3.149) && (r[1]  <  3.150) );
   OB_REQUIRE( (r[2]  >  3.209) && (r[2]  <  3.210) );
   OB_REQUIRE( (r[3]  >  3.174) && (r[3]  <  3.175) );
   OB_REQUIRE( (r[4]  >  3.569) && (r[4]  <  3.570) );
   OB_REQUIRE( (r[5]  >  3.304) && (r[5]  <  3.305) );
   OB_REQUIRE( (r[6]  >  3.051) && (r[6]  <  3.052) );
   OB_REQUIRE( (r[7]  >  4.562) && (r[7]  <  4.563) );
   OB_REQUIRE( (r[8]  >  6.095) && (r[8]  <  6.096) );
   OB_REQUIRE( (r[9]  >  5.226) && (r[9]  <  5.227) );
   OB_REQUIRE( (r[10] >  4.518) && (r[10] <  4.519) );
   OB_REQUIRE( (r[11] >  5.049) && (r[11] <  5.050) );
   OB_REQUIRE( (r[12] >  6.967) && (r[12] <  6.968) );
   OB_REQUIRE( (r[13] >  5.714) && (r[13] <  5.715) );
   OB_REQUIRE( (r[14] >  4.741) && (r[14] <  4.742) );
   OB_REQUIRE( (r[15] >  5.948) && (r[15] <  5.949) );
   OB_REQUIRE( (r[16] >  5.890) && (r[16] <  5.891) );
   OB_REQUIRE( (r[17] >  7.335) && (r[17] <  7.336) );
   OB_REQUIRE( (r[18] >  2.015) && (r[18] <  2.016) );
   OB_REQUIRE( (r[19] >  8.571) && (r[19] <  8.572) );
   OB_REQUIRE( (r[20] >  5.878) && (r[20] <  5.879) );
   OB_REQUIRE( (r[21] >  7.161) && (r[21] <  7.162) );
   OB_REQUIRE( (r[22] >  5.824) && (r[22] <  5.825) );
   OB_REQUIRE( (r[23] >  5.744) && (r[23] <  5.745) );
   OB_REQUIRE( (r[24] >  5.676) && (r[24] <  5.677) );
   OB_REQUIRE( (r[25] >  8.814) && (r[25] <  8.815) );
   OB_REQUIRE( (r[26] >  9.347) && (r[26] <  9.348) );
   OB_REQUIRE( (r[27] >  8.610) && (r[27] <  8.611) );
   OB_REQUIRE( (r[28] >  6.540) && (r[28] <  6.541) );
   OB_REQUIRE( (r[29] >  9.610) && (r[29] <  9.611) );
   OB_REQUIRE( (r[30] > 13.544) && (r[30] < 13.545) );
   OB_REQUIRE( (r[31] >  8.755) && (r[31] <  8.756) );
   OB_REQUIRE( (r[32] >  9.704) && (r[32] <  9.705) );
   OB_REQUIRE( (r[33] >  9.714) && (r[33] <  9.715) );
   OB_REQUIRE( (r[34] >  9.948) && (r[34] <  9.949) );
   OB_REQUIRE( (r[35] > 10.934) && (r[35] < 10.935) );
   OB_REQUIRE( (r[36] >  2.432) && (r[36] <  2.433) );
   OB_REQUIRE( (r[37] >  5.466) && (r[37] <  5.467) );
   OB_REQUIRE( (r[38] >  7.455) && (r[38] <  7.456) );
   OB_REQUIRE( (r[39] >  5.584) && (r[39] <  5.585) );
   OB_REQUIRE( (r[40] >  5.687) && (r[40] <  5.688) );
   OB_REQUIRE( (r[41] >  5.350) && (r[41] <  5.351) );
   OB_REQUIRE( (r[42] >  5.879) && (r[42] <  5.880) );
   OB_REQUIRE( (r[43] >  8.811) && (r[43] <  8.812) );
   OB_REQUIRE( (r[44] > 10.500) && (r[44] < 10.501) );
   OB_REQUIRE( (r[45] >  9.302) && (r[45] <  9.303) );
   OB_REQUIRE( (r[46] >  8.525) && (r[46] <  8.526) );
   OB_REQUIRE( (r[47] >  9.723) && (r[47] <  9.724) );
   OB_REQUIRE( (r[48] > 12.615) && (r[48] < 12.616) );
   OB_REQUIRE( (r[49] >  9.912) && (r[49] <  9.913) );
   OB_REQUIRE( (r[50] >  8.245) && (r[50] <  8.246) );
   OB_REQUIRE( (r[51] > 10.045) && (r[51] < 10.046) );
   OB_REQUIRE( (r[52] > 10.673) && (r[52] < 10.674) );
   OB_REQUIRE( (r[53] > 12.036) && (r[53] < 12.037) );
   OB_REQUIRE( (r[54] >  0.405) && (r[54] <  0.406) );
   OB_REQUIRE( (r[55] >  2.217) && (r[55] <  2.218) );
   OB_REQUIRE( (r[56] >  1.789) && (r[56] <  1.790) );
   OB_REQUIRE( (r[57] >  2.424) && (r[57] <  2.425) );
   OB_REQUIRE( (r[58] >  2.259) && (r[58] <  2.260) );
   OB_REQUIRE( (r[59] >  1.872) && (r[59] <  1.873) );
   OB_REQUIRE( (r[60] >  1.794) && (r[60] <  1.795) );
   OB_REQUIRE( (r[61] >  2.502) && (r[61] <  2.503) );
   OB_REQUIRE( (r[62] >  3.007) && (r[62] <  3.008) );
   OB_REQUIRE( (r[63] >  2.563) && (r[63] <  2.564) );
   OB_REQUIRE( (r[64] >  1.916) && (r[64] <  1.917) );
   OB_REQUIRE( (r[65] >  2.708) && (r[65] <  2.709) );
   OB_REQUIRE( (r[66] >  3.421) && (r[66] <  3.422) );
   OB_REQUIRE( (r[67] >  2.706) && (r[67] <  2.707) );
   OB_REQUIRE( (r[68] >  2.581) && (r[68] <  2.582) );
   OB_REQUIRE( (r[69] >  2.838) && (r[69] <  2.839) );
   OB_REQUIRE( (r[70] >  3.403) && (r[70] <  3.404) );
   OB_REQUIRE( (r[71] >  3.637) && (r[71] <  3.638) );
}



// Mirror stereo probes
void test08(OpenBabel::OBMol* mol)
{
   OpenBabel::OBSpectrophore s;
   s.SetNormalization(OpenBabel::OBSpectrophore::NoNormalization);
   s.SetResolution(3.0);
   s.SetAccuracy(OpenBabel::OBSpectrophore::AngStepSize20);
   s.SetStereo(OpenBabel::OBSpectrophore::MirrorStereoSpecificProbes);
   std::vector<double> r = s.GetSpectrophore(mol);
   OB_REQUIRE( (r[0]  >  1.147) && (r[0]  <  1.148) );
   OB_REQUIRE( (r[1]  >  3.170) && (r[1]  <  3.171) );
   OB_REQUIRE( (r[2]  >  3.174) && (r[2]  <  3.175) );
   OB_REQUIRE( (r[3]  >  3.339) && (r[3]  <  3.340) );
   OB_REQUIRE( (r[4]  >  3.669) && (r[4]  <  3.670) );
   OB_REQUIRE( (r[5]  >  3.108) && (r[5]  <  3.109) );
   OB_REQUIRE( (r[6]  >  3.160) && (r[6]  <  3.161) );
   OB_REQUIRE( (r[7]  >  4.886) && (r[7]  <  4.887) );
   OB_REQUIRE( (r[8]  >  6.239) && (r[8]  <  6.240) );
   OB_REQUIRE( (r[9]  >  5.184) && (r[9]  <  5.185) );
   OB_REQUIRE( (r[10] >  4.438) && (r[10] <  4.439) );
   OB_REQUIRE( (r[11] >  5.232) && (r[11] <  5.233) );
   OB_REQUIRE( (r[12] >  6.973) && (r[12] <  6.974) );
   OB_REQUIRE( (r[13] >  5.545) && (r[13] <  5.546) );
   OB_REQUIRE( (r[14] >  4.827) && (r[14] <  4.828) );
   OB_REQUIRE( (r[15] >  5.804) && (r[15] <  5.805) );
   OB_REQUIRE( (r[16] >  5.809) && (r[16] <  5.810) );
   OB_REQUIRE( (r[17] >  7.107) && (r[17] <  7.108) );
   OB_REQUIRE( (r[18] >  1.986) && (r[18] <  1.987) );
   OB_REQUIRE( (r[19] >  8.473) && (r[19] <  8.474) );
   OB_REQUIRE( (r[20] >  5.681) && (r[20] <  5.682) );
   OB_REQUIRE( (r[21] >  7.358) && (r[21] <  7.359) );
   OB_REQUIRE( (r[22] >  5.874) && (r[22] <  5.875) );
   OB_REQUIRE( (r[23] >  5.997) && (r[23] <  5.998) );
   OB_REQUIRE( (r[24] >  5.596) && (r[24] <  5.597) );
   OB_REQUIRE( (r[25] >  9.362) && (r[25] <  9.363) );
   OB_REQUIRE( (r[26] >  9.389) && (r[26] <  9.390) );
   OB_REQUIRE( (r[27] >  9.566) && (r[27] <  9.567) );
   OB_REQUIRE( (r[28] >  6.162) && (r[28] <  6.163) );
   OB_REQUIRE( (r[29] >  8.745) && (r[29] <  8.746) );
   OB_REQUIRE( (r[30] > 12.694) && (r[30] < 12.695) );
   OB_REQUIRE( (r[31] >  8.925) && (r[31] <  8.926) );
   OB_REQUIRE( (r[32] >  8.854) && (r[32] <  8.855) );
   OB_REQUIRE( (r[33] >  9.599) && (r[33] <  9.600) );
   OB_REQUIRE( (r[34] > 10.087) && (r[34] < 10.088) );
   OB_REQUIRE( (r[35] > 10.454) && (r[35] < 10.455) );
   OB_REQUIRE( (r[36] >  2.371) && (r[36] <  2.372) );
   OB_REQUIRE( (r[37] >  5.658) && (r[37] <  5.659) );
   OB_REQUIRE( (r[38] >  7.224) && (r[38] <  7.225) );
   OB_REQUIRE( (r[39] >  5.556) && (r[39] <  5.557) );
   OB_REQUIRE( (r[40] >  5.617) && (r[40] <  5.618) );
   OB_REQUIRE( (r[41] >  5.240) && (r[41] <  5.241) );
   OB_REQUIRE( (r[42] >  5.576) && (r[42] <  5.577) );
   OB_REQUIRE( (r[43] >  9.171) && (r[43] <  9.172) );
   OB_REQUIRE( (r[44] > 10.523) && (r[44] < 10.524) );
   OB_REQUIRE( (r[45] >  9.109) && (r[45] <  9.110) );
   OB_REQUIRE( (r[46] >  8.459) && (r[46] <  8.460) );
   OB_REQUIRE( (r[47] >  9.413) && (r[47] <  9.414) );
   OB_REQUIRE( (r[48] > 12.418) && (r[48] < 12.419) );
   OB_REQUIRE( (r[49] > 10.191) && (r[49] < 10.192) );
   OB_REQUIRE( (r[50] >  8.444) && (r[50] <  8.445) );
   OB_REQUIRE( (r[51] > 10.295) && (r[51] < 10.296) );
   OB_REQUIRE( (r[52] > 10.572) && (r[52] < 10.573) );
   OB_REQUIRE( (r[53] > 12.187) && (r[53] < 12.188) );
   OB_REQUIRE( (r[54] >  0.371) && (r[54] <  0.372) );
   OB_REQUIRE( (r[55] >  2.238) && (r[55] <  2.239) );
   OB_REQUIRE( (r[56] >  2.022) && (r[56] <  2.023) );
   OB_REQUIRE( (r[57] >  2.330) && (r[57] <  2.331) );
   OB_REQUIRE( (r[58] >  2.009) && (r[58] <  2.010) );
   OB_REQUIRE( (r[59] >  1.968) && (r[59] <  1.969) );
   OB_REQUIRE( (r[60] >  1.978) && (r[60] <  1.979) );
   OB_REQUIRE( (r[61] >  2.682) && (r[61] <  2.683) );
   OB_REQUIRE( (r[62] >  2.877) && (r[62] <  2.878) );
   OB_REQUIRE( (r[63] >  2.494) && (r[63] <  2.495) );
   OB_REQUIRE( (r[64] >  1.869) && (r[64] <  1.870) );
   OB_REQUIRE( (r[65] >  2.450) && (r[65] <  2.451) );
   OB_REQUIRE( (r[66] >  3.385) && (r[66] <  3.386) );
   OB_REQUIRE( (r[67] >  2.565) && (r[67] <  2.566) );
   OB_REQUIRE( (r[68] >  2.589) && (r[68] <  2.590) );
   OB_REQUIRE( (r[69] >  3.011) && (r[69] <  3.012) );
   OB_REQUIRE( (r[70] >  3.380) && (r[70] <  3.381) );
   OB_REQUIRE( (r[71] >  3.848) && (r[71] <  3.849) );
}



// All stereo probes
void test09(OpenBabel::OBMol* mol)
{
   OpenBabel::OBSpectrophore s;
   s.SetNormalization(OpenBabel::OBSpectrophore::NoNormalization);
   s.SetResolution(3.0);
   s.SetAccuracy(OpenBabel::OBSpectrophore::AngStepSize20);
   s.SetStereo(OpenBabel::OBSpectrophore::AllStereoSpecificProbes);
   std::vector<double> r = s.GetSpectrophore(mol);
   OB_REQUIRE( (r[0]   >  1.150) && (r[0]   <  1.151) );
   OB_REQUIRE( (r[1]   >  3.149) && (r[1]   <  3.150) );
   OB_REQUIRE( (r[2]   >  3.209) && (r[2]   <  3.210) );
   OB_REQUIRE( (r[3]   >  3.174) && (r[3]   <  3.175) );
   OB_REQUIRE( (r[4]   >  3.569) && (r[4]   <  3.570) );
   OB_REQUIRE( (r[5]   >  3.304) && (r[5]   <  3.305) );
   OB_REQUIRE( (r[6]   >  3.051) && (r[6]   <  3.052) );
   OB_REQUIRE( (r[7]   >  4.562) && (r[7]   <  4.563) );
   OB_REQUIRE( (r[8]   >  6.095) && (r[8]   <  6.096) );
   OB_REQUIRE( (r[9]   >  5.226) && (r[9]   <  5.227) );
   OB_REQUIRE( (r[10]  >  4.518) && (r[10]  <  4.519) );
   OB_REQUIRE( (r[11]  >  5.049) && (r[11]  <  5.050) );
   OB_REQUIRE( (r[12]  >  6.967) && (r[12]  <  6.968) );
   OB_REQUIRE( (r[13]  >  5.714) && (r[13]  <  5.715) );
   OB_REQUIRE( (r[14]  >  4.741) && (r[14]  <  4.742) );
   OB_REQUIRE( (r[15]  >  5.948) && (r[15]  <  5.949) );
   OB_REQUIRE( (r[16]  >  5.890) && (r[16]  <  5.891) );
   OB_REQUIRE( (r[17]  >  7.335) && (r[17]  <  7.336) );
   OB_REQUIRE( (r[18]  >  1.147) && (r[18]  <  1.148) );
   OB_REQUIRE( (r[19]  >  3.170) && (r[19]  <  3.171) );
   OB_REQUIRE( (r[20]  >  3.174) && (r[20]  <  3.175) );
   OB_REQUIRE( (r[21]  >  3.339) && (r[21]  <  3.340) );
   OB_REQUIRE( (r[22]  >  3.669) && (r[22]  <  3.670) );
   OB_REQUIRE( (r[23]  >  3.108) && (r[23]  <  3.109) );
   OB_REQUIRE( (r[24]  >  3.160) && (r[24]  <  3.161) );
   OB_REQUIRE( (r[25]  >  4.886) && (r[25]  <  4.887) );
   OB_REQUIRE( (r[26]  >  6.239) && (r[26]  <  6.240) );
   OB_REQUIRE( (r[27]  >  5.184) && (r[27]  <  5.185) );
   OB_REQUIRE( (r[28]  >  4.438) && (r[28]  <  4.439) );
   OB_REQUIRE( (r[29]  >  5.232) && (r[29]  <  5.233) );
   OB_REQUIRE( (r[30]  >  6.973) && (r[30]  <  6.974) );
   OB_REQUIRE( (r[31]  >  5.545) && (r[31]  <  5.546) );
   OB_REQUIRE( (r[32]  >  4.827) && (r[32]  <  4.828) );
   OB_REQUIRE( (r[33]  >  5.804) && (r[33]  <  5.805) );
   OB_REQUIRE( (r[34]  >  5.809) && (r[34]  <  5.810) );
   OB_REQUIRE( (r[35]  >  7.107) && (r[35]  <  7.108) );
   OB_REQUIRE( (r[36]  >  2.015) && (r[36]  <  2.016) );
   OB_REQUIRE( (r[37]  >  8.571) && (r[37]  <  8.572) );
   OB_REQUIRE( (r[38]  >  5.878) && (r[38]  <  5.879) );
   OB_REQUIRE( (r[39]  >  7.161) && (r[39]  <  7.162) );
   OB_REQUIRE( (r[40]  >  5.824) && (r[40]  <  5.825) );
   OB_REQUIRE( (r[41]  >  5.744) && (r[41]  <  5.745) );
   OB_REQUIRE( (r[42]  >  5.676) && (r[42]  <  5.677) );
   OB_REQUIRE( (r[43]  >  8.814) && (r[43]  <  8.815) );
   OB_REQUIRE( (r[44]  >  9.347) && (r[44]  <  9.348) );
   OB_REQUIRE( (r[45]  >  8.610) && (r[45]  <  8.611) );
   OB_REQUIRE( (r[46]  >  6.540) && (r[46]  <  6.541) );
   OB_REQUIRE( (r[47]  >  9.610) && (r[47]  <  9.611) );
   OB_REQUIRE( (r[48]  > 13.544) && (r[48]  < 13.545) );
   OB_REQUIRE( (r[49]  >  8.755) && (r[49]  <  8.756) );
   OB_REQUIRE( (r[50]  >  9.704) && (r[50]  <  9.705) );
   OB_REQUIRE( (r[51]  >  9.714) && (r[51]  <  9.715) );
   OB_REQUIRE( (r[52]  >  9.948) && (r[52]  <  9.949) );
   OB_REQUIRE( (r[53]  > 10.934) && (r[53]  < 10.935) );
   OB_REQUIRE( (r[54]  >  1.986) && (r[54]  <  1.987) );
   OB_REQUIRE( (r[55]  >  8.473) && (r[55]  <  8.474) );
   OB_REQUIRE( (r[56]  >  5.681) && (r[56]  <  5.682) );
   OB_REQUIRE( (r[57]  >  7.358) && (r[57]  <  7.359) );
   OB_REQUIRE( (r[58]  >  5.874) && (r[58]  <  5.875) );
   OB_REQUIRE( (r[59]  >  5.997) && (r[59]  <  5.998) );
   OB_REQUIRE( (r[60]  >  5.596) && (r[60]  <  5.597) );
   OB_REQUIRE( (r[61]  >  9.362) && (r[61]  <  9.363) );
   OB_REQUIRE( (r[62]  >  9.389) && (r[62]  <  9.390) );
   OB_REQUIRE( (r[63]  >  9.566) && (r[63]  <  9.567) );
   OB_REQUIRE( (r[64]  >  6.162) && (r[64]  <  6.163) );
   OB_REQUIRE( (r[65]  >  8.745) && (r[65]  <  8.746) );
   OB_REQUIRE( (r[66]  > 12.694) && (r[66]  < 12.695) );
   OB_REQUIRE( (r[67]  >  8.925) && (r[67]  <  8.926) );
   OB_REQUIRE( (r[68]  >  8.854) && (r[68]  <  8.855) );
   OB_REQUIRE( (r[69]  >  9.599) && (r[69]  <  9.600) );
   OB_REQUIRE( (r[70]  > 10.087) && (r[70]  < 10.088) );
   OB_REQUIRE( (r[71]  > 10.454) && (r[71]  < 10.455) );
   OB_REQUIRE( (r[72]  >  2.432) && (r[72]  <  2.433) );
   OB_REQUIRE( (r[73]  >  5.466) && (r[73]  <  5.467) );
   OB_REQUIRE( (r[74]  >  7.455) && (r[74]  <  7.456) );
   OB_REQUIRE( (r[75]  >  5.584) && (r[75]  <  5.585) );
   OB_REQUIRE( (r[76]  >  5.687) && (r[76]  <  5.688) );
   OB_REQUIRE( (r[77]  >  5.350) && (r[77]  <  5.351) );
   OB_REQUIRE( (r[78]  >  5.879) && (r[78]  <  5.880) );
   OB_REQUIRE( (r[79]  >  8.811) && (r[79]  <  8.812) );
   OB_REQUIRE( (r[80]  > 10.500) && (r[80]  < 10.501) );
   OB_REQUIRE( (r[81]  >  9.302) && (r[81]  <  9.304) );
   OB_REQUIRE( (r[82]  >  8.525) && (r[82]  <  8.526) );
   OB_REQUIRE( (r[83]  >  9.723) && (r[83]  <  9.724) );
   OB_REQUIRE( (r[84]  > 12.615) && (r[84]  < 12.616) );
   OB_REQUIRE( (r[85]  >  9.912) && (r[85]  <  9.913) );
   OB_REQUIRE( (r[86]  >  8.245) && (r[86]  <  8.246) );
   OB_REQUIRE( (r[87]  > 10.045) && (r[87]  < 10.046) );
   OB_REQUIRE( (r[88]  > 10.673) && (r[88]  < 10.674) );
   OB_REQUIRE( (r[89]  > 12.036) && (r[89]  < 12.037) );
   OB_REQUIRE( (r[90]  >  2.371) && (r[90]  <  2.372) );
   OB_REQUIRE( (r[91]  >  5.658) && (r[91]  <  5.659) );
   OB_REQUIRE( (r[92]  >  7.224) && (r[92]  <  7.225) );
   OB_REQUIRE( (r[93]  >  5.556) && (r[93]  <  5.557) );
   OB_REQUIRE( (r[94]  >  5.617) && (r[94]  <  5.618) );
   OB_REQUIRE( (r[95]  >  5.240) && (r[95]  <  5.241) );
   OB_REQUIRE( (r[96]  >  5.576) && (r[96]  <  5.577) );
   OB_REQUIRE( (r[97]  >  9.171) && (r[97]  <  9.172) );
   OB_REQUIRE( (r[98]  > 10.523) && (r[98]  < 10.524) );
   OB_REQUIRE( (r[99]  >  9.109) && (r[99]  <  9.110) );
   OB_REQUIRE( (r[100] >  8.459) && (r[100] <  8.460) );
   OB_REQUIRE( (r[101] >  9.413) && (r[101] <  9.414) );
   OB_REQUIRE( (r[102] > 12.418) && (r[102] < 12.419) );
   OB_REQUIRE( (r[103] > 10.191) && (r[103] < 10.192) );
   OB_REQUIRE( (r[104] >  8.444) && (r[104] <  8.445) );
   OB_REQUIRE( (r[105] > 10.295) && (r[105] < 10.296) );
   OB_REQUIRE( (r[106] > 10.572) && (r[106] < 10.573) );
   OB_REQUIRE( (r[107] > 12.187) && (r[107] < 12.188) );
   OB_REQUIRE( (r[108] >  0.405) && (r[108] <  0.406) );
   OB_REQUIRE( (r[109] >  2.217) && (r[109] <  2.218) );
   OB_REQUIRE( (r[110] >  1.789) && (r[110] <  1.790) );
   OB_REQUIRE( (r[111] >  2.424) && (r[111] <  2.425) );
   OB_REQUIRE( (r[112] >  2.259) && (r[112] <  2.260) );
   OB_REQUIRE( (r[113] >  1.872) && (r[113] <  1.873) );
   OB_REQUIRE( (r[114] >  1.794) && (r[114] <  1.795) );
   OB_REQUIRE( (r[115] >  2.502) && (r[115] <  2.503) );
   OB_REQUIRE( (r[116] >  3.007) && (r[116] <  3.008) );
   OB_REQUIRE( (r[117] >  2.563) && (r[117] <  2.564) );
   OB_REQUIRE( (r[118] >  1.916) && (r[118] <  1.917) );
   OB_REQUIRE( (r[119] >  2.708) && (r[119] <  2.709) );
   OB_REQUIRE( (r[120] >  3.421) && (r[120] <  3.422) );
   OB_REQUIRE( (r[121] >  2.706) && (r[121] <  2.707) );
   OB_REQUIRE( (r[122] >  2.581) && (r[122] <  2.582) );
   OB_REQUIRE( (r[123] >  2.838) && (r[123] <  2.839) );
   OB_REQUIRE( (r[124] >  3.403) && (r[124] <  3.404) );
   OB_REQUIRE( (r[125] >  3.637) && (r[125] <  3.638) );
   OB_REQUIRE( (r[126] >  0.371) && (r[126] <  0.372) );
   OB_REQUIRE( (r[127] >  2.238) && (r[127] <  2.239) );
   OB_REQUIRE( (r[128] >  2.022) && (r[128] <  2.023) );
   OB_REQUIRE( (r[129] >  2.330) && (r[129] <  2.331) );
   OB_REQUIRE( (r[130] >  2.009) && (r[130] <  2.010) );
   OB_REQUIRE( (r[131] >  1.968) && (r[131] <  1.969) );
   OB_REQUIRE( (r[132] >  1.978) && (r[132] <  1.979) );
   OB_REQUIRE( (r[133] >  2.682) && (r[133] <  2.683) );
   OB_REQUIRE( (r[134] >  2.877) && (r[134] <  2.878) );
   OB_REQUIRE( (r[135] >  2.494) && (r[135] <  2.495) );
   OB_REQUIRE( (r[136] >  1.869) && (r[136] <  1.870) );
   OB_REQUIRE( (r[137] >  2.450) && (r[137] <  2.451) );
   OB_REQUIRE( (r[138] >  3.385) && (r[138] <  3.386) );
   OB_REQUIRE( (r[139] >  2.565) && (r[139] <  2.566) );
   OB_REQUIRE( (r[140] >  2.589) && (r[140] <  2.590) );
   OB_REQUIRE( (r[141] >  3.011) && (r[141] <  3.012) );
   OB_REQUIRE( (r[142] >  3.380) && (r[142] <  3.381) );
   OB_REQUIRE( (r[143] >  3.848) && (r[143] <  3.849) );
}



int main(int argc,char **argv)
{
   // Create a test molecule
   OpenBabel::OBMol mol;
   OpenBabel::OBAtom* a[5];
   a[0] = mol.NewAtom(); a[0]->SetAtomicNum(6);  a[0]->SetVector(-0.013,  1.086,  0.008);
   a[1] = mol.NewAtom(); a[1]->SetAtomicNum(1);  a[1]->SetVector( 0.002, -0.004,  0.002);
   a[2] = mol.NewAtom(); a[2]->SetAtomicNum(9);  a[2]->SetVector( 1.300,  1.570, -0.002);
   a[3] = mol.NewAtom(); a[3]->SetAtomicNum(35); a[3]->SetVector(-0.964,  1.737, -1.585);
   a[4] = mol.NewAtom(); a[4]->SetAtomicNum(17); a[4]->SetVector(-0.857,  1.667,  1.491);
   OpenBabel::OBBond* b;
   for (int i(1); i < 5; ++i)
   {
      b = mol.NewBond();
      b->SetBegin(a[0]); b->SetEnd(a[i]); b->SetBondOrder(1);
   }
   
   // Run the tests
   test01(&mol);
   test02(&mol);
   test03(&mol);
   test04(&mol);
   test05(&mol);
   test06(&mol);
   test07(&mol);
   test08(&mol);
   test09(&mol);
   
   // End
   return 0;
}