def featurize(self, comp):
        """
		Args:
			comp: (Composition)
				pymatgen Composition object
		Returns:
			HOMO_character: (str) orbital symbol ('s', 'p', 'd', or 'f')
			HOMO_element: (str) symbol of element for H**O
			HOMO_energy: (float in eV) absolute energy of H**O
			LUMO_character: (str) orbital symbol ('s', 'p', 'd', or 'f')
			LUMO_element: (str) symbol of element for LUMO
			LUMO_energy: (float in eV) absolute energy of LUMO
			gap_AO: (float in eV)
				the estimated bandgap from H**O and LUMO energeis
		"""

        integer_comp, factor = comp.get_integer_formula_and_factor()

        # warning message if composition is dilute and truncated
        if not (len(Composition(comp).elements) == len(
                Composition(integer_comp).elements)):
            warn('AtomicOrbitals: {} truncated to {}'.format(
                comp, integer_comp))

        homo_lumo = MolecularOrbitals(integer_comp).band_edges

        feat = collections.OrderedDict()

        for edge in ['H**O', 'LUMO']:
            if homo_lumo[edge] is not None:
                feat['{}_character'.format(edge)] = homo_lumo[edge][1][-1]
                feat['{}_element'.format(edge)] = homo_lumo[edge][0]
                feat['{}_energy'.format(edge)] = homo_lumo[edge][2]
            else:
                #if LUMO is None
                feat['{}_character'.format(edge)] = 'na'
                feat['{}_element'.format(edge)] = 'na'
                #unclear what this value should be. Arbitrarily set to 0. Don't want NaN for modeling
                feat['{}_energy'.format(edge)] = 0

        feat['gap_AO'] = feat['LUMO_energy'] - feat['HOMO_energy']

        return list(feat.values())
예제 #2
0
    def featurize(self, comp):
        """
        Args:
            comp: (Composition)
                pymatgen Composition object

        Returns:
            HOMO_character: (str) orbital symbol ('s', 'p', 'd', or 'f')
            HOMO_element: (str) symbol of element for H**O
            HOMO_energy: (float in eV) absolute energy of H**O
            LUMO_character: (str) orbital symbol ('s', 'p', 'd', or 'f')
            LUMO_element: (str) symbol of element for LUMO
            LUMO_energy: (float in eV) absolute energy of LUMO
            gap_AO: (float in eV)
                the estimated bandgap from H**O and LUMO energeis
        """

        # NOTE comprhys: factor is unused
        # integer_comp, factor = comp.get_integer_formula_and_factor()
        integer_comp, _ = comp.get_integer_formula_and_factor()

        # warning message if composition is dilute and truncated
        if not (len(Composition(comp).elements) == len(
                Composition(integer_comp).elements)):
            warn(f"AtomicOrbitals: {comp} truncated to {integer_comp}")

        homo_lumo = MolecularOrbitals(integer_comp).band_edges

        feat = collections.OrderedDict()
        for edge in ['H**O', 'LUMO']:
            feat[f"{edge}_character"] = homo_lumo[edge][1][-1]
            feat[f"{edge}_element"] = homo_lumo[edge][0]
            feat[f"{edge}_energy"] = homo_lumo[edge][2]
        feat['gap_AO'] = feat['LUMO_energy'] - feat['HOMO_energy']

        return list(feat.values())
예제 #3
0
 def test_fractional_compositions(self):
     self.assertRaises(ValueError, lambda: MolecularOrbitals('Na0.5Cl0.5'))
예제 #4
0
# coding: utf-8
# Copyright (c) Pymatgen Development Team.
# Distributed under the terms of the MIT License.

from __future__ import division, unicode_literals

import unittest

from pymatgen.util.testing import PymatgenTest
from pymatgen.core.molecular_orbitals import MolecularOrbitals

test_case = MolecularOrbitals('NaCl')

class MolecularOrbitalTestCase(PymatgenTest):

    def test_max_electronegativity(self):
        test_elec_neg = 2.23
        self.assertEqual(test_elec_neg, test_case.max_electronegativity())


    def test_aos_as_list(self):
        test_list = [['Cl', '1s', -100.369229], ['Na', '1s', -37.719975],
                     ['Cl', '2s', -9.187993], ['Cl', '2p', -7.039982],
                     ['Na', '2s', -2.063401], ['Na', '2p', -1.060636],
                     ['Cl', '3s', -0.754458], ['Cl', '3p', -0.32038],
                     ['Na', '3s', -0.103415]]
        self.assertEqual(test_list, test_case.aos_as_list())

    def test_obtain_band_edges(self):
        test_edges = {'H**O': ['Cl', '3p', -0.32038],
                      'LUMO': ['Na', '3s', -0.103415],
예제 #5
0
# Copyright (c) Pymatgen Development Team.
# Distributed under the terms of the MIT License.

import unittest

from pymatgen.core.molecular_orbitals import MolecularOrbitals
from pymatgen.util.testing import PymatgenTest

test_case = MolecularOrbitals("NaCl")


class MolecularOrbitalTestCase(PymatgenTest):
    def test_max_electronegativity(self):
        test_elec_neg = 2.23
        self.assertEqual(test_elec_neg, test_case.max_electronegativity())

    def test_aos_as_list(self):
        test_list = [
            ["Cl", "1s", -100.369229],
            ["Na", "1s", -37.719975],
            ["Cl", "2s", -9.187993],
            ["Cl", "2p", -7.039982],
            ["Na", "2s", -2.063401],
            ["Na", "2p", -1.060636],
            ["Cl", "3s", -0.754458],
            ["Cl", "3p", -0.32038],
            ["Na", "3s", -0.103415],
        ]
        self.assertEqual(test_list, test_case.aos_as_list())

    def test_obtain_band_edges(self):