Skip to content

Commit d7ee2dc

Browse files
committed
renmae files, move tests (NO_JIRA)
1 parent ff71780 commit d7ee2dc

File tree

3 files changed

+158
-5
lines changed

3 files changed

+158
-5
lines changed

scripts/refcodes_with_properties/refcodes_with_properties.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import sys
1818
import os
1919
import argparse
20-
import EntryPropertyCalculator
20+
import entry_property_calculator
2121
from ccdc import io
2222

2323
if __name__ == '__main__':
@@ -28,9 +28,9 @@
2828

2929
parser.add_argument( '-r','--refcode_file', help='input file containing the list of refcodes', default = None )
3030
parser.add_argument( '-d','--database_file', help='input file containing the list of refcodes', default = None )
31-
parser.add_argument( '-c','--control_file', help='configuration file containing the desired properties\n\n %s' % (EntryPropertyCalculator.helptext()) )
32-
parser.add_argument( '-v','--get_values', action="store_true", help='calculate and print descriptor values where possible rather than filter\n\n %s' % (EntryPropertyCalculator.helptext()) )
33-
parser.add_argument( '-o','--output_file', default = None, help='output CSV file for results\n\n %s' % (EntryPropertyCalculator.helptext()) )
31+
parser.add_argument( '-c','--control_file', help='configuration file containing the desired properties\n\n %s' % (entry_property_calculator.helptext()) )
32+
parser.add_argument( '-v','--get_values', action="store_true", help='calculate and print descriptor values where possible rather than filter\n\n %s' % (entry_property_calculator.helptext()) )
33+
parser.add_argument( '-o','--output_file', default = None, help='output CSV file for results\n\n %s' % (entry_property_calculator.helptext()) )
3434

3535
args = parser.parse_args()
3636

@@ -43,7 +43,7 @@
4343
if args.output_file != None:
4444
outfile = open(args.output_file, 'wb')
4545

46-
filterer = EntryPropertyCalculator.parse_control_file(open(control_file,"r").readlines())
46+
filterer = entry_property_calculator.parse_control_file(open(control_file,"r").readlines())
4747

4848
reader = None
4949
if refcode_file:
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
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

Comments
 (0)