-
Notifications
You must be signed in to change notification settings - Fork 23
Expand file tree
/
Copy pathtest_entry_property_calculator.py
More file actions
162 lines (128 loc) · 4.53 KB
/
test_entry_property_calculator.py
File metadata and controls
162 lines (128 loc) · 4.53 KB
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
#!/usr/bin/env python
#
# This script can be used for any purpose without limitation subject to the
# conditions at http://www.ccdc.cam.ac.uk/Community/Pages/Licences/v2.aspx
#
# This permission notice and the following statement of attribution must be
# included in all copies or substantial portions of this script.
#
import unittest
from ccdc.io import EntryReader
from entry_property_calculator import parse_control_file
class TestFiltering(unittest.TestCase):
def setUp(self):
self.reader = EntryReader('CSD')
self.aabhtz = self.reader.entry("AABHTZ")
self.aacani_ten = self.reader.entry("AACANI10")
self.aadamc = self.reader.entry("AADAMC")
self.aadrib = self.reader.entry("AADRIB")
self.abadis = self.reader.entry("ABADIS")
def test_organic_filter(self):
test_file = """
organic : 1
"""
lines = test_file.split('\n')
evaluator = parse_control_file(lines)
self.assertTrue(evaluator.evaluate(self.aabhtz))
self.assertFalse(evaluator.evaluate(self.aacani_ten))
def test_component_filter(self):
test_file = """
component range : 0 1
"""
lines = test_file.split('\n')
evaluator = parse_control_file(lines)
self.assertTrue(evaluator.evaluate(self.aabhtz))
self.assertFalse(evaluator.evaluate(self.aacani_ten))
def test_donor_count_filter(self):
test_file = """
donor count : 2 2
"""
lines = test_file.split('\n')
evaluator = parse_control_file(lines)
self.assertFalse(evaluator.evaluate(self.aabhtz))
self.assertTrue(evaluator.evaluate(self.aadamc))
test_file = """
donor count : 0 3
"""
lines = test_file.split('\n')
evaluator = parse_control_file(lines)
self.assertTrue(evaluator.evaluate(self.aabhtz))
self.assertTrue(evaluator.evaluate(self.aadamc))
def test_acceptor_count_filter(self):
test_file = """
acceptor count : 7 7
"""
lines = test_file.split('\n')
evaluator = parse_control_file(lines)
# regards Cl as an acceptor ...
self.assertTrue(evaluator.evaluate(self.aabhtz))
self.assertTrue(evaluator.evaluate(self.aacani_ten))
def test_zprime(self):
test_file = """
zprime range : 0.99 1.01
"""
lines = test_file.split('\n')
evaluator = parse_control_file(lines)
self.assertTrue(evaluator.evaluate(self.aabhtz))
self.assertFalse(evaluator.evaluate(self.aadrib))
def test_atomic_numbers(self):
test_file = """
allowed atomic numbers : 1 6 7 8
must have atomic numbers : 1 6 7 8
"""
lines = test_file.split('\n')
evaluator = parse_control_file(lines)
self.assertFalse(evaluator.evaluate(self.aabhtz))
self.assertFalse(evaluator.evaluate(self.aadrib))
test_file = """
must have atomic numbers : 1 6 7 8
"""
lines = test_file.split('\n')
evaluator = parse_control_file(lines)
self.assertTrue(evaluator.evaluate(self.aabhtz))
self.assertFalse(evaluator.evaluate(self.aadrib))
def test_rotatable_bond_count(self):
test_file = """
rotatable bond count : 0 4
"""
lines = test_file.split('\n')
evaluator = parse_control_file(lines)
self.assertTrue(evaluator.evaluate(self.abadis))
def test_multiple(self):
test_file = """
# An example control file
#
#
# only include organic structures as output
organic : 1
# specify a range of donors
donor count : 0 10
# specify a range of acceptors
acceptor count : 5 5
# rotatable bond count range
rotatable bond count : 3 7
# number of atoms to allow through
atom count : 0 100
# only include structures containing Hydrogen, Carbon, Nitrogen or Oxygen and nothing else
allowed atomic numbers : 1 6 7 8
# only include structures containing all of these elements (i.e.) Hydrogen, Carbon, Nitrogen or Oxygen
must have atomic numbers : 1 6 7 8
# Ensure Z-prime is one
zprime range : 0.99 1.01
# Ensure only one component in the structure
component range : 2 2
# Dont include disordered structures
disordered : 0
# Specify an R-factor range
rfactor range : 0.1 5
#
"""
lines = test_file.split('\n')
evaluator = parse_control_file(lines)
hits = []
test_entries = ['AABHTZ', 'ABAQEB', 'ABELEY', 'ADAQOM', 'ADARAA', 'ADARAZ', 'ADUWIG', 'AFEREK']
for id in test_entries:
e = self.reader.entry(id)
if evaluator.evaluate(e):
hits.append(e.identifier)
self.assertEqual(['ABAQEB', 'ABELEY', 'ADAQOM', 'ADUWIG', 'AFEREK'], hits)