@staticmethod
def rmsd(df1, df2, heavy_only=True):
    """Compute the Root Mean Square Deviation between molecules

        Parameters
        ----------
        df1 : pandas.DataFrame
            DataFrame with HETATM, ATOM, and/or ANISOU entries
        df2 : pandas.DataFrame
            Second DataFrame for RMSD computation against df1. Must have the
            same number of entries as df1
        heavy_only : bool (default: True)
            Which atoms to compare to compute the RMSD. If `True` (default),
            computes the RMSD between non-hydrogen atoms only.

        Returns
        ---------
        rmsd : float
            Root Mean Square Deviation between df1 and df2

        """
    if df1.shape[0] != df2.shape[0]:
        raise AttributeError('DataFrames have unequal lengths')
    if heavy_only:
        d1 = df1[df1['atom_type'] != 'H']
        d2 = df2[df2['atom_type'] != 'H']
    else:
        d1, d2 = df1, df2
    total = (d1['x'].values - d2['x'].values) ** 2 + (d1['y'].values - d2[
        'y'].values) ** 2 + (d1['z'].values - d2['z'].values) ** 2
    rmsd = round((total.sum() / df1.shape[0]) ** 0.5, 4)
    return rmsd
