Skip to content

Commit

Permalink
crystal: Handled empty base in .calculate_properties
Browse files Browse the repository at this point in the history
  • Loading branch information
Somerandomguy10111 committed Jul 14, 2024
1 parent 0dd29af commit ab3e27b
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions CrystalStructure/crystal/crystal.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@
from pymatgen.symmetry.analyzer import SpacegroupAnalyzer
from pymatgen.symmetry.groups import SpaceGroup

from holytools.logging import LoggerFactory
from .atomic_site import AtomicSite
from .base import CrystalBase
from .lattice import Angles, Lengths

logger = LoggerFactory.get_logger(name=__name__)
CrystalSystem = Literal["cubic", "hexagonal", "monoclinic", "orthorhombic", "tetragonal", "triclinic", "trigonal"]
# ---------------------------------------------------------

Expand Down Expand Up @@ -59,14 +61,18 @@ def from_pymatgen(cls, pymatgen_structure: Structure) -> CrystalStructure:
# properties

def calculate_properties(self):
if len(self.base) == 0:
logger.error(msg=f'Base is empty! Cannot calculate properties of empty crystal. Aborting ...')
return

pymatgen_structure = self.to_pymatgen()
self.volume_uc = pymatgen_structure.volume
analyzer = SpacegroupAnalyzer(structure=pymatgen_structure, symprec=0.1, angle_tolerance=10)
self.spacegroup = analyzer.get_space_group_number()
self.volume_uc = pymatgen_structure.volume
self.num_atoms = len(self.base)

symmetry_dataset = analyzer.get_symmetry_dataset()
self.wyckoff_symbols = symmetry_dataset['wyckoffs']
self.num_atoms = len(self.wyckoff_symbols)

pymatgen_spacegroup = SpaceGroup.from_int_number(self.spacegroup)
self.crystal_system = pymatgen_spacegroup.crystal_system
Expand Down Expand Up @@ -125,6 +131,10 @@ def to_pymatgen(self) -> Structure:
non_void_sites = self.base.get_non_void_sites()
atoms = [site.atom_type.pymatgen_type for site in non_void_sites]
positions = [(site.x, site.y, site.z) for site in non_void_sites]

if len(atoms) == 0:
logger.warning('Structure has no atoms!')

return Structure(lattice, atoms, positions)

def as_str(self) -> str:
Expand Down

0 comments on commit ab3e27b

Please sign in to comment.