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 package ffx.xray;
39
40 import ffx.algorithms.misc.AlgorithmsTest;
41 import ffx.crystal.HKL;
42 import ffx.potential.bonded.Atom;
43 import ffx.potential.parameters.AtomType;
44 import ffx.xray.scatter.XRayFormFactor;
45 import ffx.xray.scatter.XRayScatteringParameters;
46 import org.junit.Before;
47 import org.junit.Test;
48
49 import static java.lang.String.format;
50 import static org.junit.Assert.assertEquals;
51 import static org.junit.Assert.assertNotNull;
52
53
54
55
56 public class FormFactorTest extends AlgorithmsTest {
57
58 private XRayFormFactor carbonFormFactor;
59
60 @Before
61 public void setUp() {
62 double[] d = new double[3];
63 double[] anisou = new double[6];
64 anisou[0] = anisou[1] = anisou[2] = 1.0;
65 anisou[3] = anisou[4] = anisou[5] = 0.0;
66 Atom carbon = new Atom(1, "C", 'A', d, "ALA", 1, 'A', 1.0, 20.0, "A");
67 AtomType atomType = new AtomType(1, 1, "C", null, 6, 12.01, 1);
68 carbon.setAtomType(atomType);
69 carbon.setAltLoc('A');
70 carbon.setAnisou(anisou);
71 carbonFormFactor = new XRayFormFactor(carbon, false, 0.0);
72 }
73
74 @Test
75 public void testCarbonFF() {
76 assertNotNull(" Carbon form factors should exist", XRayScatteringParameters.getFormFactor(6,0, false));
77 double[][] formFactor = XRayScatteringParameters.getFormFactor(6, 0, false).formFactor();
78 assertEquals(" Carbon form factors", 5, (int) formFactor[0][0]);
79 assertEquals(" Carbon form factors", 2.09921, formFactor[1][0], 0.0001);
80 assertEquals(" Carbon form factors", 13.18997, formFactor[2][0], 0.0001);
81 }
82
83 @Test
84 public void testCarbonfrho() {
85 HKL hkl = new HKL(1, 1, 1);
86 assertEquals("carbon (1 1 1) structure factor", 2.3986e-26,
87 carbonFormFactor.f(hkl), 1e-30);
88
89 double[] xyz = {1.0, 1.0, 1.0};
90 assertEquals("carbon (1 1 1) electron density", 0.081937,
91 carbonFormFactor.rho(0.0, 1.0, xyz), 0.000001);
92 }
93
94 @Test
95 public void testFormFactors() {
96 for (int i = 1; i <= 18; i++) {
97 XRayScatteringParameters parameters = XRayScatteringParameters.getFormFactor(i, 0, false);
98 double[][] formFactor = parameters.formFactor();
99 double sum = 0.0;
100 for (int j = 0; j < 6; j++) {
101 sum += formFactor[1][j];
102 }
103 assertEquals(format(" Form factor 6G sum for %s", parameters), i, sum, 1e-2);
104 }
105 }
106
107 @Test
108 public void testFormFactors3G() {
109 for (int i = 1; i <= 18; i++) {
110 XRayScatteringParameters parameters = XRayScatteringParameters.getFormFactor(i, 0, true);
111 double[][] formFactor = parameters.formFactor();
112 double sum = 0.0;
113 for (int j = 0; j < parameters.numberOfGaussians(); j++) {
114 sum += formFactor[1][j];
115 }
116 assertEquals(format(" Form factor 3G sum for %s", parameters), i, sum, 1e-1);
117 }
118 }
119 }