Source code for sknano.core.atoms._kdtree_atom
# -*- coding: utf-8 -*-
"""
===============================================================================
Atom class for KDTree analysis (:mod:`sknano.core.atoms._kdtree_atom`)
===============================================================================
An `XAtom` class for structure analysis.
.. currentmodule:: sknano.core.atoms._kdtree_atom
"""
from __future__ import absolute_import, division, print_function
__docformat__ = 'restructuredtext en'
import numbers
import sknano.core.atoms
from ._bonds import Bonds
from ._extended_atom import XAtom
__all__ = ['KDTAtom']
[docs]class KDTAtom(XAtom):
"""An `Atom` class for KDTree analysis.
Parameters
----------
CN : int, optional
`KDTAtom` coordination number.
NN : {sequence, `Atoms`}, optional
List of nearest-neighbor `Atoms`
bonds : {sequence, `Bonds`}, optional
List of atom `Bond`\ s or `Bonds` instance
"""
_atomattrs = XAtom._atomattrs + ['CN', 'NN', 'bonds']
def __init__(self, CN=0, NN=None, bonds=None, **kwargs):
super(KDTAtom, self).__init__(**kwargs)
self.CN = CN
if NN is None:
NN = sknano.core.atoms.StructureAtoms()
self.NN = NN
if bonds is None:
bonds = Bonds()
self.bonds = bonds
def __str__(self):
"""Return a nice string representation of `KDTAtom`."""
strrep = "Atom(element={element!r}, atomID={atomID!r}, " + \
"moleculeID={moleculeID!r}, atomtype={atomtype!r}, " + \
"q={q!r}, m={m!r}, x={x:.6f}, y={y:.6f}, z={z:.6f}, " + \
"CN={CN!r}, NN={NN!s}, bonds={bonds!s})"
parameters = dict(element=self.element, atomID=self.atomID,
moleculeID=self.moleculeID, atomtype=self.atomtype,
q=self.q, m=self.m, x=self.x, y=self.y, z=self.z,
CN=self.CN, NN=self.NN, bonds=self.bonds)
return strrep.format(**parameters)
def __repr__(self):
"""Return canonical string representation of `KDTAtom`."""
#strrep = "Atom(element={element!r}, atomID={atomID!r}, " + \
# "moleculeID={moleculeID!r}, atomtype={atomtype!r}, " + \
# "q={q!r}, m={m!r}, x={x:.6f}, y={y:.6f}, z={z:.6f}, " + \
# "CN={CN!r}, NN={NN!r})"
#parameters = dict(element=self.element, atomID=self.atomID,
# moleculeID=self.moleculeID, atomtype=self.atomtype,
# q=self.q, m=self.m, x=self.x, y=self.y, z=self.z,
# CN=self.CN, NN=self.NN)
#return strrep.format(**parameters)
return super(KDTAtom, self).__repr__()
@property
def CN(self):
"""Return `KDTAtom` coordination number."""
return self._CN
@CN.setter
def CN(self, value):
"""Set `KDTAtom` coordination number."""
if not isinstance(value, numbers.Number):
raise TypeError('Expected a number.')
self._CN = int(value)
@property
def NN(self):
"""Nearest-neighbor `Atoms`."""
return self._NN
@NN.setter
def NN(self, value):
"""Set nearest-neighbor `Atoms`."""
if not isinstance(value, sknano.core.atoms.Atoms):
raise TypeError('Expected an `Atoms` object.')
self._NN = value
@property
def bonds(self):
"""Return atom `Bonds` instance."""
return self._bonds
@bonds.setter
def bonds(self, value):
if not isinstance(value, Bonds):
raise TypeError('Expected a `Bonds` object.')
self._bonds = value