@@ -101,8 +101,7 @@ def helptext():
101
101
def __call__ (self , entry ):
102
102
try :
103
103
molecule = entry .crystal .molecule
104
- return len ([x for x in molecule .atoms if x .atomic_number in self .allowed_atomic_numbers ]) == len (
105
- molecule .atoms )
104
+ return len ([x for x in molecule .atoms if x .atomic_number in self .allowed_atomic_numbers ]) == len (molecule .atoms )
106
105
except TypeError :
107
106
return False
108
107
@@ -126,17 +125,16 @@ def __call__(self, entry):
126
125
try :
127
126
molecule = entry .crystal .molecule
128
127
129
- contains = {}
128
+ contains = set ()
130
129
for x in molecule .atoms :
131
- if not contains .has_key (x .atomic_number ):
132
- contains [x .atomic_number ] = 0
133
- contains [x .atomic_number ] = contains [x .atomic_number ] + 1
130
+ contains .add (x .atomic_number )
131
+
134
132
for x in self .must_have_atomic_numbers :
135
- if not contains . has_key ( x ) :
133
+ if x not in contains :
136
134
return False
137
135
138
136
return True
139
- except :
137
+ except TypeError :
140
138
return False
141
139
142
140
@@ -196,7 +194,7 @@ def helptext():
196
194
def value (self , entry ):
197
195
try :
198
196
return entry .crystal .molecule .all_atoms_have_sites
199
- except :
197
+ except TypeError :
200
198
return False
201
199
202
200
@@ -453,160 +451,3 @@ def parse_control_file(lines):
453
451
cls = _filter_classes [parts [0 ].strip ()]
454
452
evaluator .add_filter (cls (parts [1 ]))
455
453
return evaluator
456
-
457
-
458
- import unittest
459
-
460
-
461
- class TestFiltering (unittest .TestCase ):
462
-
463
- def setUp (self ):
464
-
465
- self .reader = ccdc .io .EntryReader ('CSD' )
466
- self .aabhtz = self .reader .entry ("AABHTZ" )
467
- self .aacani_ten = self .reader .entry ("AACANI10" )
468
- self .aadamc = self .reader .entry ("AADAMC" )
469
- self .aadrib = self .reader .entry ("AADRIB" )
470
- self .abadis = self .reader .entry ("ABADIS" )
471
-
472
- def test_organic_filter (self ):
473
-
474
- test_file = """
475
- organic : 1
476
- """
477
- lines = test_file .split ('\n ' )
478
- evaluator = parse_control_file (lines )
479
-
480
- self .assertTrue (evaluator .evaluate (self .aabhtz ))
481
-
482
- self .assertFalse (evaluator .evaluate (self .aacani_ten ))
483
-
484
- def test_component_filter (self ):
485
- test_file = """
486
- component range : 0 1
487
- """
488
- lines = test_file .split ('\n ' )
489
- evaluator = parse_control_file (lines )
490
-
491
- self .assertTrue (evaluator .evaluate (self .aabhtz ))
492
-
493
- self .assertFalse (evaluator .evaluate (self .aacani_ten ))
494
-
495
- def test_donor_count_filter (self ):
496
- test_file = """
497
- donor count : 2 2
498
- """
499
- lines = test_file .split ('\n ' )
500
- evaluator = parse_control_file (lines )
501
-
502
- self .assertFalse (evaluator .evaluate (self .aabhtz ))
503
-
504
- self .assertTrue (evaluator .evaluate (self .aadamc ))
505
-
506
- test_file = """
507
- donor count : 0 3
508
- """
509
- lines = test_file .split ('\n ' )
510
- evaluator = parse_control_file (lines )
511
-
512
- self .assertTrue (evaluator .evaluate (self .aabhtz ))
513
- self .assertTrue (evaluator .evaluate (self .aadamc ))
514
-
515
- def test_acceptor_count_filter (self ):
516
- test_file = """
517
- acceptor count : 7 7
518
- """
519
- lines = test_file .split ('\n ' )
520
- evaluator = parse_control_file (lines )
521
-
522
- # regards Cl as an acceptor ...
523
- self .assertTrue (evaluator .evaluate (self .aabhtz ))
524
-
525
- self .assertTrue (evaluator .evaluate (self .aacani_ten ))
526
-
527
- def test_zprime (self ):
528
- test_file = """
529
- zprime range : 0.99 1.01
530
- """
531
- lines = test_file .split ('\n ' )
532
- evaluator = parse_control_file (lines )
533
- self .assertTrue (evaluator .evaluate (self .aabhtz ))
534
- self .assertFalse (evaluator .evaluate (self .aadrib ))
535
-
536
- def test_atomic_numbers (self ):
537
- test_file = """
538
- allowed atomic numbers : 1 6 7 8
539
- must have atomic numbers : 1 6 7 8
540
- """
541
- lines = test_file .split ('\n ' )
542
- evaluator = parse_control_file (lines )
543
- self .assertFalse (evaluator .evaluate (self .aabhtz ))
544
- self .assertFalse (evaluator .evaluate (self .aadrib ))
545
-
546
- test_file = """
547
- must have atomic numbers : 1 6 7 8
548
- """
549
- lines = test_file .split ('\n ' )
550
- evaluator = parse_control_file (lines )
551
- self .assertTrue (evaluator .evaluate (self .aabhtz ))
552
- self .assertFalse (evaluator .evaluate (self .aadrib ))
553
-
554
- def test_rotatable_bond_count (self ):
555
- test_file = """
556
- rotatable bond count : 0 3
557
- """
558
- lines = test_file .split ('\n ' )
559
- evaluator = parse_control_file (lines )
560
- self .assertTrue (evaluator .evaluate (self .abadis ))
561
-
562
- def test_multiple (self ):
563
- test_file = """
564
-
565
- # An example control file
566
- #
567
- #
568
- # only include organic structures as output
569
- organic : 1
570
- # specify a range of donors
571
- donor count : 0 10
572
- # specify a range of acceptors
573
- acceptor count : 5 5
574
- # rotatable bond count range
575
- rotatable bond count : 3 7
576
- # number of atoms to allow through
577
- atom count : 0 100
578
- # only include structures containing Hydrogen, Carbon, Nitrogen or Oxygen and nothing else
579
- allowed atomic numbers : 1 6 7 8
580
- # only include structures containing all of these elements (i.e.) Hydrogen, Carbon, Nitrogen or Oxygen
581
- must have atomic numbers : 1 6 7 8
582
- # Ensure Z-prime is one
583
- zprime range : 0.99 1.01
584
- # Ensure only one component in the structure
585
- component range : 2 2
586
- # Dont include disordered structures
587
- disordered : 0
588
- # Specify an R-factor range
589
- rfactor range : 0.1 5
590
- #
591
-
592
-
593
- """
594
-
595
- lines = test_file .split ('\n ' )
596
- evaluator = parse_control_file (lines )
597
-
598
- counter = 0
599
- hits = []
600
-
601
- test_entries = ['AABHTZ' , 'ABAQEB' , 'ABELEY' , 'ADAQOM' , 'ADARAA' , 'ADARAZ' , 'ADUWIG' , 'AFEREK' ]
602
- for id in test_entries :
603
- e = self .reader .entry (id )
604
-
605
- if evaluator .evaluate (e ):
606
- hits .append (e .identifier )
607
-
608
- self .assertEquals (['ABAQEB' , 'ABELEY' , 'ADAQOM' , 'ADUWIG' , 'AFEREK' ], hits )
609
-
610
-
611
- if __name__ == "__main__" :
612
- unittest .main ()
0 commit comments