Source code for sknano.structures._fullerenes
# -*- coding: utf-8 -*-
"""
===================================================================
Fullerene structure classes (:mod:`sknano.structures._fullerenes`)
===================================================================
.. currentmodule:: sknano.structures._fullerenes
"""
from __future__ import absolute_import, division, print_function
from __future__ import unicode_literals
__docformat__ = 'restructuredtext en'
from pkg_resources import resource_filename
import numbers
import os
from sknano.core import BaseClass, listdir_dirnames, listdir_fnames
from sknano.core.crystallography import BaseStructure
__all__ = ['Fullerene', 'Fullerenes', 'load_fullerene_data']
def load_fullerene_data():
"""Helper function to populate dict of fullerene data files."""
datadir = resource_filename('sknano', 'data/fullerenes')
fullerenes = \
listdir_dirnames(datadir, filterfunc=lambda name: name.startswith('C'))
fullerene_data = {}
for fullerene in fullerenes:
datapath = os.path.join('data', 'fullerenes', fullerene)
datadir = resource_filename('sknano', datapath)
fullerene_data[fullerene] = listdir_fnames(datadir)
return fullerene_data
[docs]class Fullerene(BaseStructure, BaseClass):
"""Fullerene structure class.
The `fullerene data
<http://www.nanotube.msu.edu/fullerene/fullerene-isomers.html>`_
were downloaded from the
`The Nanotube Site <http://www.nanotube.msu.edu>`_.
Parameters
----------
N : int
The :math:`N` in :math:`C_N` where :math:`N` is the number
fullerene atoms. Always an even integer.
PG : str, optional
Symmetry
Examples
--------
"""
def __init__(self, N=60, PG=None, Ni=None, **kwargs):
super().__init__(**kwargs)
# Check that N is a valid `N` and that `N` is
self.N = N
self.PG = PG
self.Ni = Ni
@property
def N(self):
return self._N
@N.setter
def N(self, value):
if not (isinstance(value, numbers.Integral) or
value > 0 or value % 2 == 0):
raise TypeError('Expected an even, positive integer.')
self._N = int(value)
@N.deleter
def N(self):
del self._N
[docs] def todict(self):
return dict(N=self.N)
class Fullerenes(BaseStructure, BaseClass):
def __init__(self):
super().__init__()
self.fullerene_data = load_fullerene_data()
self.fullerenes = list(self.fullerene_data.keys())
self.fullerene_files = list(self.fullerene_data.values())
def todict(self):
return dict()