View Javadoc
1   // ******************************************************************************
2   //
3   // Title:       Force Field X.
4   // Description: Force Field X - Software for Molecular Biophysics.
5   // Copyright:   Copyright (c) Michael J. Schnieders 2001-2024.
6   //
7   // This file is part of Force Field X.
8   //
9   // Force Field X is free software; you can redistribute it and/or modify it
10  // under the terms of the GNU General Public License version 3 as published by
11  // the Free Software Foundation.
12  //
13  // Force Field X is distributed in the hope that it will be useful, but WITHOUT
14  // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  // FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
16  // details.
17  //
18  // You should have received a copy of the GNU General Public License along with
19  // Force Field X; if not, write to the Free Software Foundation, Inc., 59 Temple
20  // Place, Suite 330, Boston, MA 02111-1307 USA
21  //
22  // Linking this library statically or dynamically with other modules is making a
23  // combined work based on this library. Thus, the terms and conditions of the
24  // GNU General Public License cover the whole combination.
25  //
26  // As a special exception, the copyright holders of this library give you
27  // permission to link this library with independent modules to produce an
28  // executable, regardless of the license terms of these independent modules, and
29  // to copy and distribute the resulting executable under terms of your choice,
30  // provided that you also meet, for each linked independent module, the terms
31  // and conditions of the license of that module. An independent module is a
32  // module which is not derived from or based on this library. If you modify this
33  // library, you may extend this exception to your version of the library, but
34  // you are not obligated to do so. If you do not wish to do so, delete this
35  // exception statement from your version.
36  //
37  // ******************************************************************************
38  package ffx.crystal;
39  
40  import static org.junit.Assert.assertEquals;
41  import static org.junit.Assert.assertNotNull;
42  import static org.junit.Assert.assertNull;
43  
44  import ffx.utilities.FFXTest;
45  import java.util.Arrays;
46  import java.util.Collection;
47  import org.junit.Test;
48  import org.junit.runner.RunWith;
49  import org.junit.runners.Parameterized;
50  import org.junit.runners.Parameterized.Parameters;
51  
52  /**
53   * Test the ReflectionList class.
54   *
55   * @author Timothy D. Fenn
56   */
57  @RunWith(Parameterized.class)
58  public class ReflectionListTest extends FFXTest {
59  
60    private final String info;
61    private final int size;
62    private final HKL valid;
63    private final HKL invalid;
64    private final int epsilon;
65    private final int allowed;
66    private final boolean ciOnly;
67    private final ReflectionList reflectionlist;
68  
69    public ReflectionListTest(
70        boolean ciOnly,
71        String info,
72        double a,
73        double b,
74        double c,
75        double alpha,
76        double beta,
77        double gamma,
78        String sg,
79        double resolution,
80        int size,
81        HKL valid,
82        HKL invalid,
83        int epsilon,
84        int allowed) {
85      this.ciOnly = ciOnly;
86      this.info = info;
87      this.size = size;
88      this.valid = valid;
89      this.invalid = invalid;
90      this.epsilon = epsilon;
91      this.allowed = allowed;
92  
93      if (!ffxCI && ciOnly) {
94        this.reflectionlist = null;
95        return;
96      }
97  
98      Crystal crystal = new Crystal(a, b, c, alpha, beta, gamma, sg);
99      Resolution res = new Resolution(resolution);
100     this.reflectionlist = new ReflectionList(crystal, res);
101   }
102 
103   @Parameters
104   public static Collection<Object[]> data() {
105     return Arrays.asList(
106         new Object[][] {
107           {
108             false,
109             "P6 test",
110             115.996,
111             115.996,
112             44.13,
113             90.0,
114             90.0,
115             120.0,
116             "P6",
117             1.89631,
118             27200,
119             new HKL(0, 0, 4),
120             new HKL(-1, 0, 0),
121             6,
122             0
123           },
124           {
125             true,
126             "I222 test",
127             86.031,
128             92.854,
129             98.312,
130             90.0,
131             90.0,
132             90.0,
133             "I222",
134             1.0,
135             210663,
136             new HKL(0, 0, 4),
137             new HKL(0, 0, 3),
138             8,
139             0
140           },
141           {
142             true,
143             "P1 test",
144             25.015,
145             29.415,
146             52.761,
147             89.54,
148             86.1,
149             82.39,
150             "P1",
151             1.0,
152             80373,
153             new HKL(-24, -10, 1),
154             new HKL(-24, -10, 8),
155             1,
156             0
157           }
158         });
159   }
160 
161   @Test
162   public void testreflections() {
163     if (!ffxCI && ciOnly) {
164       return;
165     }
166 
167     assertNotNull(info + " list should have valid reflection", reflectionlist.getHKL(valid));
168     assertNull(info + " list should NOT have invalid reflection", reflectionlist.getHKL(invalid));
169 
170     HKL hkl = reflectionlist.getHKL(0, 0, 0);
171     assertEquals(
172         info + " list 0 0 0 reflection should have correct epsilon", epsilon, hkl.getEpsilon());
173     assertEquals(
174         info + " list 0 0 0 reflection should have correct allowance", allowed, hkl.allowed);
175   }
176 
177   @Test
178   public void testsize() {
179     if (!ffxCI && ciOnly) {
180       return;
181     }
182 
183     assertEquals(
184         info + " hash map and arraylist should have equal length",
185         reflectionlist.hklMap.size(),
186         reflectionlist.hklList.size());
187     assertEquals(
188         info + " reflection list should have correct size", size, reflectionlist.hklList.size());
189   }
190 }