1
+ import unittest
2
+ from ccdc .io import EntryReader
3
+
4
+ from entry_property_calculator import parse_control_file
5
+
6
+ class TestFiltering (unittest .TestCase ):
7
+
8
+ def setUp (self ):
9
+
10
+ self .reader = EntryReader ('CSD' )
11
+ self .aabhtz = self .reader .entry ("AABHTZ" )
12
+ self .aacani_ten = self .reader .entry ("AACANI10" )
13
+ self .aadamc = self .reader .entry ("AADAMC" )
14
+ self .aadrib = self .reader .entry ("AADRIB" )
15
+ self .abadis = self .reader .entry ("ABADIS" )
16
+
17
+ def test_organic_filter (self ):
18
+
19
+ test_file = """
20
+ organic : 1
21
+ """
22
+ lines = test_file .split ('\n ' )
23
+ evaluator = parse_control_file (lines )
24
+
25
+ self .assertTrue (evaluator .evaluate (self .aabhtz ))
26
+
27
+ self .assertFalse (evaluator .evaluate (self .aacani_ten ))
28
+
29
+ def test_component_filter (self ):
30
+ test_file = """
31
+ component range : 0 1
32
+ """
33
+ lines = test_file .split ('\n ' )
34
+ evaluator = parse_control_file (lines )
35
+
36
+ self .assertTrue (evaluator .evaluate (self .aabhtz ))
37
+
38
+ self .assertFalse (evaluator .evaluate (self .aacani_ten ))
39
+
40
+ def test_donor_count_filter (self ):
41
+ test_file = """
42
+ donor count : 2 2
43
+ """
44
+ lines = test_file .split ('\n ' )
45
+ evaluator = parse_control_file (lines )
46
+
47
+ self .assertFalse (evaluator .evaluate (self .aabhtz ))
48
+
49
+ self .assertTrue (evaluator .evaluate (self .aadamc ))
50
+
51
+ test_file = """
52
+ donor count : 0 3
53
+ """
54
+ lines = test_file .split ('\n ' )
55
+ evaluator = parse_control_file (lines )
56
+
57
+ self .assertTrue (evaluator .evaluate (self .aabhtz ))
58
+ self .assertTrue (evaluator .evaluate (self .aadamc ))
59
+
60
+ def test_acceptor_count_filter (self ):
61
+ test_file = """
62
+ acceptor count : 7 7
63
+ """
64
+ lines = test_file .split ('\n ' )
65
+ evaluator = parse_control_file (lines )
66
+
67
+ # regards Cl as an acceptor ...
68
+ self .assertTrue (evaluator .evaluate (self .aabhtz ))
69
+
70
+ self .assertTrue (evaluator .evaluate (self .aacani_ten ))
71
+
72
+ def test_zprime (self ):
73
+ test_file = """
74
+ zprime range : 0.99 1.01
75
+ """
76
+ lines = test_file .split ('\n ' )
77
+ evaluator = parse_control_file (lines )
78
+ self .assertTrue (evaluator .evaluate (self .aabhtz ))
79
+ self .assertFalse (evaluator .evaluate (self .aadrib ))
80
+
81
+ def test_atomic_numbers (self ):
82
+ test_file = """
83
+ allowed atomic numbers : 1 6 7 8
84
+ must have atomic numbers : 1 6 7 8
85
+ """
86
+ lines = test_file .split ('\n ' )
87
+ evaluator = parse_control_file (lines )
88
+ self .assertFalse (evaluator .evaluate (self .aabhtz ))
89
+ self .assertFalse (evaluator .evaluate (self .aadrib ))
90
+
91
+ test_file = """
92
+ must have atomic numbers : 1 6 7 8
93
+ """
94
+ lines = test_file .split ('\n ' )
95
+ evaluator = parse_control_file (lines )
96
+ self .assertTrue (evaluator .evaluate (self .aabhtz ))
97
+ self .assertFalse (evaluator .evaluate (self .aadrib ))
98
+
99
+ def test_rotatable_bond_count (self ):
100
+ test_file = """
101
+ rotatable bond count : 0 3
102
+ """
103
+ lines = test_file .split ('\n ' )
104
+ evaluator = parse_control_file (lines )
105
+ self .assertTrue (evaluator .evaluate (self .abadis ))
106
+
107
+ def test_multiple (self ):
108
+ test_file = """
109
+
110
+ # An example control file
111
+ #
112
+ #
113
+ # only include organic structures as output
114
+ organic : 1
115
+ # specify a range of donors
116
+ donor count : 0 10
117
+ # specify a range of acceptors
118
+ acceptor count : 5 5
119
+ # rotatable bond count range
120
+ rotatable bond count : 3 7
121
+ # number of atoms to allow through
122
+ atom count : 0 100
123
+ # only include structures containing Hydrogen, Carbon, Nitrogen or Oxygen and nothing else
124
+ allowed atomic numbers : 1 6 7 8
125
+ # only include structures containing all of these elements (i.e.) Hydrogen, Carbon, Nitrogen or Oxygen
126
+ must have atomic numbers : 1 6 7 8
127
+ # Ensure Z-prime is one
128
+ zprime range : 0.99 1.01
129
+ # Ensure only one component in the structure
130
+ component range : 2 2
131
+ # Dont include disordered structures
132
+ disordered : 0
133
+ # Specify an R-factor range
134
+ rfactor range : 0.1 5
135
+ #
136
+
137
+
138
+ """
139
+
140
+ lines = test_file .split ('\n ' )
141
+ evaluator = parse_control_file (lines )
142
+
143
+ counter = 0
144
+ hits = []
145
+
146
+ test_entries = ['AABHTZ' , 'ABAQEB' , 'ABELEY' , 'ADAQOM' , 'ADARAA' , 'ADARAZ' , 'ADUWIG' , 'AFEREK' ]
147
+ for id in test_entries :
148
+ e = self .reader .entry (id )
149
+
150
+ if evaluator .evaluate (e ):
151
+ hits .append (e .identifier )
152
+
153
+ self .assertEquals (['ABAQEB' , 'ABELEY' , 'ADAQOM' , 'ADUWIG' , 'AFEREK' ], hits )
0 commit comments