Beispiel #1
0
 def parse_overlap(self):
     if 'symmetrized' not in self.meta: self.parse_atom()
     key = 'AO_OVERLAP_MATRIX'
     if not self.meta['symmetrized']:
         self.overlap = Overlap.from_column(
             _flat_square_to_triangle(np.array(self._hdf[key])))
     else:
         print('Symmetrized overlap indices not set correctly.')
         self.overlap = Overlap.from_dict({
             'coef': np.array(self._hdf[key]),
             'chi0': 0, 'chi1': 0, 'frame': 0
         })
Beispiel #2
0
def parse_molcas(fp, momatrix=None, overlap=None, occvec=None, **kwargs):
    """
    Will parse a Molcas output file. Optionally it will attempt
    to parse additional information obtained from the same directory
    from specified Orb files or the AO overlap matrix and density matrix.
    If density keyword is specified, the momatrix keyword is ignored.

    Args:
        fp (str): Path to output file
        momatrix (str): file name of the C matrix of interest
        overlap (str): file name of the overlap matrix
        occvec (str): an occupation vector

    Returns:
        parsed (Editor): contains many attributes similar to the
            exatomic universe
    """
    uni = Output(fp, **kwargs)
    adir = os.sep.join(fp.split(os.sep)[:-1])
    if momatrix is not None:
        fp = os.sep.join([adir, momatrix])
        if os.path.isfile(fp):
            orb = Orb(fp)
            uni.momatrix = orb.momatrix
            uni.occupation_vector = orb.occupation_vector
            occvec = occvec if occvec is not None else orb.occupation_vector
            d = DensityMatrix.from_momatrix(orb.momatrix, occvec)
            uni.density = d
        else:
            print('Is {} in the same directory as {}?'.format(momatrix, fp))
    if overlap is not None:
        fp = os.sep.join([adir, overlap])
        if os.path.isfile(fp): uni.overlap = Overlap.from_file(fp)
        else: print('Is {} in the same directory as {}?'.format(overlap, fp))
    return uni
Beispiel #3
0
 def integrals(self):
     """Compute the overlap matrix using primitive cartesian integrals."""
     from exatomic.core.basis import Overlap
     ovl = _cartesian_shell_pairs(len(self), self._ptrs.astype(np.int64),
                                  self._xyzs, *self._shells)
     ovl = _triangle(ovl)
     chi0, chi1 = _tri_indices(ovl)
     return Overlap.from_dict({'chi0': chi0, 'chi1': chi1,
                               'frame': 0, 'coef': ovl})
Beispiel #4
0
 def integrals(self):
     """Compute the overlap matrix using primitive cartesian integrals."""
     from exatomic.core.basis import Overlap
     ovl = _cartesian_shell_pairs(len(self), self._ptrs.astype(np.int64),
                                  self._xyzs, *self._shells)
     ovl = _triangle(ovl)
     chi0, chi1 = _tri_indices(ovl)
     return Overlap.from_dict({
         'chi0': chi0,
         'chi1': chi1,
         'frame': 0,
         'coef': ovl
     })
Beispiel #5
0
 def parse_overlap(self):
     self._init()
     start = self.find_next("$OVERLAP", keys_only=True) + 1
     stop = self.find_next("$END", start=start, keys_only=True)
     ovl = self.pandas_dataframe(start, stop, range(len(
         self[start].split()))).stack().values
     if ovl.shape[0] != self._nbas * (self._nbas + 1) // 2:
         ovl = _flat_square_to_triangle(ovl.stack().values)
     chi0, chi1 = _tri_indices(ovl)
     self.overlap = Overlap.from_dict({
         'coef': ovl,
         'chi0': chi0,
         'chi1': chi1,
         'frame': 0
     })
Beispiel #6
0
 def add_overlap(self, path):
     try: # If it's an ASCII text file
         self.overlap = Overlap.from_column(path)
     except ParserError: # If it's an HDF5 file
         hdf = HDF(path)
         if 'DESYM_CENTER_CHARGES' not in hdf._hdf:
             self.overlap = hdf.overlap
             return
         if 'irrep' not in self.momatrix:
             raise Exception("Trying to set symmetrized overlap with "
                             "desymmetrized MOMatrix data.")
         ovl = pd.DataFrame(np.array(hdf._hdf['AO_OVERLAP_MATRIX']),
                            columns=('coef',))
         ovl['irrep'] = self.momatrix['irrep']
         ovl['chi0'] = self.momatrix['chi']
         ovl['chi1'] = self.momatrix['orbital']
         ovl['frame'] = 0
         self.overlap = ovl