@@ -85,6 +85,20 @@ def __call__(self, theobject):
8585 return value >= self .minimum and value <= self .maximum
8686
8787
88+ class _ValueFilter (_Filter ):
89+ def __init__ (self , args ):
90+ values = [p for p in args .split ()]
91+ #To do: add option for two values?
92+ self .expected_value = values [0 ]
93+
94+ def value (self , theobject ):
95+ raise NotImplementedError # override this
96+
97+ def __call__ (self , theobject ):
98+ value = self .value (theobject )
99+ return value == self .expected_value
100+
101+
88102class AllowedAtomicNumbersFilter (_Filter ):
89103 def __init__ (self , args ):
90104 self .allowed_atomic_numbers = [int (atomic_number ) for atomic_number in args .strip ().split ()]
@@ -413,6 +427,30 @@ def value(self, entry):
413427register (SpacegroupNumberFilter )
414428
415429
430+ class ChiralityFilter (_ValueFilter ):
431+ def __init__ (self , args ):
432+ super ().__init__ (args )
433+
434+ @staticmethod
435+ def name ():
436+ return "chirality"
437+
438+ @staticmethod
439+ def helptext ():
440+ return "specify the chirality value to be used as filter"
441+
442+ def value (self , entry ):
443+ try :
444+ molecule = entry .crystal .molecule
445+ chirality = next ((atom .chirality for atom in molecule .atoms if atom .is_chiral ), None )
446+ return chirality
447+ except TypeError :
448+ return 0
449+
450+
451+ register (ChiralityFilter )
452+
453+
416454class FilterEvaluation (object ):
417455 def __init__ (self ):
418456 self ._methods = []
0 commit comments