Ejemplo n.º 1
0
def parse_ijk(path, columns, include_frame=False):
    """
    Generic parser for pos, for, and vel files.

    Args:
        path (str): File path
        columns (list): Header
        include_frame (bool): Include the frame index (default: false)

    Returns:
        df (:pandas:`~pandas.DataFrame`): Atom-like dataframe
    """
    fcol = columns[0]
    lcol = columns[-1]
    df = pd.read_csv(path, delim_whitespace=True, names=columns)
    step = df[df[lcol].isnull()]
    starts = step.drop_duplicates(fcol, keep='last').index.values + 1
    nframes = len(step)
    nat = np.min(starts[1:] - starts[:-1]) - 1
    frame, label, indices = starts_count(starts, nat)
    frame = pd.Series(frame, dtype='category')
    df = df[df.index.isin(indices)].reset_index(drop=True)
    if include_frame:
        df['frame'] = frame
    return df
Ejemplo n.º 2
0
def parse_cel(path):
    """
    Parse cell dimensions.
    """
    df = pd.read_csv(path, delim_whitespace=True, names=('i', 'j', 'k'))
    starts = df[::4].drop_duplicates(df.columns[0], keep='last').index.values + 1
    frame, label, indices = starts_count(starts, 3)
    df = df[df.index.isin(indices)].reset_index(drop=True)
    df['frame'] = pd.Series(frame, dtype='category')
    df['label'] = pd.Series(label, dtype='category')
    df = df.pivot('frame', 'label')
    df.columns = ['xi', 'xj', 'xk', 'yi', 'yj', 'yk', 'zi', 'zj', 'zk']
    df['ox'] = 0.0
    df['oy'] = 0.0
    df['oz'] = 0.0
    df.index.names = [None]
    return df