Beispiel #1
0
 def parse_gaussian_basis_set(self):
     '''
     Parses the primitive exponents, coefficients and shell if BSSHOW specified in SEWARD.
     '''
     basis_map = self._basis_set_map()
     linenos = [i[0] + 1 for i in self.regex(_re_prims)]
     lisdx = 0
     lfsdx = 0
     basis_set = pd.DataFrame()
     blocks = []
     sets = basis_map.groupby('set')
     for sdx, seht in sets:
         shfunc = 0
         lfsdx += len(seht)
         starts = linenos[lisdx:lfsdx]
         lisdx = lfsdx
         prims = []
         for i, start in enumerate(starts):
             prim = seht['nprim'].values[i]
             bas = seht['nbasis'].values[i]
             chk1 = len(self[start].split())
             chk2 = len(self[start + 1].split())
             if chk1 == chk2:
                 block = self.pandas_dataframe(start, start + prim, bas + 2)
             else:
                 block = self[start:start + 2 * prim]
                 most = block[::2]
                 extr = block[1::2]
                 ncols = len(most[0].split()) + len(extr[0].split())
                 block = pd.read_csv(StringIO('\n'.join([i + j for i, j in zip(most, extr)])),
                                     delim_whitespace=True, names=range(ncols))
             alphas = pd.concat([block[1]] * bas).reset_index(drop=True).str.replace('D', 'E').astype(np.float64)
             coeffs = block[list(range(2, bas + 2))].unstack().reset_index(drop=True)
             primdf = pd.concat([alphas, coeffs], axis=1)
             primdf.columns = ['alpha', 'd']
             primdf['L'] = lorder.index(seht['shell'].values[i])
             primdf['shell'] = np.repeat(range(shfunc, shfunc + bas), prim)
             shfunc += bas
             prims.append(primdf)
         block = pd.concat(prims)
         block['set'] = sdx
         blocks.append(block)
     gaussian_basis_set = pd.concat(blocks).reset_index(drop=True)
     gaussian_basis_set['frame'] = 0
     self.gaussian_basis_set = gaussian_basis_set
Beispiel #2
0
"""
NWChem Editor
##################
"""
import numpy as np
import pandas as pd
from io import StringIO
from exatomic.container import Universe
from exatomic.editor import Editor as AtomicEditor
from exatomic.basis import BasisSetSummary
try:
    from exatomic.algorithms.basis import spher_lml_count, cart_lml_count, rlmap
except ImportError:
    from exatomic.algorithms.basis import spher_ml_count, cart_ml_count, lmap, lorder
    rlmap = {value: key for key, value in lmap.items() if len(key) == 1}
    spher_lml_count = {lorder.index(key): value for key, value in spher_ml_count.items()}
    cart_lml_count = {lorder.index(key): value for key, value in cart_ml_count.items()}


class Editor(AtomicEditor):
    """
    Base NWChem editor
    """
    def _expand_summary(self):
        '''
        Adds basis set information to the basis set summary table.
        Requires a parsed basis set object.
        '''
        if any('bas_' in col for col in self.basis_set_summary):
            return
                #lcounts = bfns.apply(lambda y: y['L'].values[0]).value_counts()