Source code for pymatgen.analysis.chemenv.utils.defs_utils
# coding: utf-8
# Copyright (c) Pymatgen Development Team.
# Distributed under the terms of the MIT License.
from __future__ import division, unicode_literals
"""
This module contains the definition of some objects used in the chemenv package.
"""
__author__ = "David Waroquiers"
__copyright__ = "Copyright 2012, The Materials Project"
__credits__ = "Geoffroy Hautier"
__version__ = "2.0"
__maintainer__ = "David Waroquiers"
__email__ = "david.waroquiers@gmail.com"
__date__ = "Feb 20, 2016"
from pymatgen.analysis.chemenv.utils.coordination_geometry_utils import is_anion_cation_bond
[docs]class AdditionalConditions():
NO_ADDITIONAL_CONDITION = 0
ONLY_ANION_CATION_BONDS = 1
NO_ELEMENT_TO_SAME_ELEMENT_BONDS = 2
ONLY_ANION_CATION_BONDS_AND_NO_ELEMENT_TO_SAME_ELEMENT_BONDS = 3
ONLY_ELEMENT_TO_OXYGEN_BONDS = 4
#Short versions
NONE = NO_ADDITIONAL_CONDITION
NO_AC = NO_ADDITIONAL_CONDITION
ONLY_ACB = ONLY_ANION_CATION_BONDS
NO_E2SEB = NO_ELEMENT_TO_SAME_ELEMENT_BONDS
ONLY_ACB_AND_NO_E2SEB = ONLY_ANION_CATION_BONDS_AND_NO_ELEMENT_TO_SAME_ELEMENT_BONDS
ONLY_E2OB = ONLY_ELEMENT_TO_OXYGEN_BONDS
#Dictionary mapping of integer for the condition and its "description"
CONDITION_DESCRIPTION = {NO_ADDITIONAL_CONDITION: 'No additional condition',
ONLY_ANION_CATION_BONDS: 'Only anion-cation bonds',
NO_ELEMENT_TO_SAME_ELEMENT_BONDS: 'No element-element bonds (same elements)',
ONLY_ANION_CATION_BONDS_AND_NO_ELEMENT_TO_SAME_ELEMENT_BONDS: 'Only anion-cation bonds and'
' no element-element bonds'
' (same elements)',
ONLY_ELEMENT_TO_OXYGEN_BONDS: 'Only element-oxygen bonds'}
ALL = [NONE, ONLY_ACB, NO_E2SEB, ONLY_ACB_AND_NO_E2SEB, ONLY_E2OB]
[docs] def check_condition(self, condition, structure, parameters):
if condition == self.NONE:
return True
elif condition == self.ONLY_ACB:
valences = parameters['valences']
ii = parameters['site_index']
jj = parameters['neighbor_index']
return is_anion_cation_bond(valences, ii, jj)
elif condition == self.NO_E2SEB:
ii = parameters['site_index']
jj = parameters['neighbor_index']
elmts_ii = [sp.symbol for sp in structure[ii].species_and_occu]
elmts_jj = [sp.symbol for sp in structure[jj].species_and_occu]
return len(set(elmts_ii) & set(elmts_jj)) == 0
elif condition == self.ONLY_ACB_AND_NO_E2SEB:
valences = parameters['valences']
ii = parameters['site_index']
jj = parameters['neighbor_index']
elmts_ii = [sp.symbol for sp in structure[ii].species_and_occu]
elmts_jj = [sp.symbol for sp in structure[jj].species_and_occu]
return len(set(elmts_ii) & set(elmts_jj)) == 0 and is_anion_cation_bond(valences, ii, jj)
elif condition == self.ONLY_E2OB:
ii = parameters['site_index']
jj = parameters['neighbor_index']
elmts_ii = [sp.symbol for sp in structure[ii].species_and_occu]
elmts_jj = [sp.symbol for sp in structure[jj].species_and_occu]
return ('O' in elmts_jj and 'O' not in elmts_ii) or ('O' in elmts_ii and 'O' not in elmts_jj)