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
""" 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()