def sample_df()

in mmcif_utils.py [0:0]


def sample_df(df, uniform=False, sample=1):
    """Sample from rotamer library based off gaussian on nearby slots"""
    cum_prob = df["Probabil"].cumsum()
    cutoff = np.random.uniform(0, cum_prob.max(), (sample,))
    ixs = cum_prob.searchsorted(cutoff)

    if uniform:
        ix = cum_prob.searchsorted(0.99)
        if ix == 0:
            ixs = [0] * sample
        else:
            ixs = np.random.randint(ix, size=(sample,))

    chis_list = []
    for ix in ixs:
        means = df[["chi{}Val".format(i) for i in range(1, 5)]][ix : ix + 1].to_numpy()
        std = df[["chi{}Sig".format(i) for i in range(1, 5)]][ix : ix + 1].to_numpy()
        chis = std[0] * np.random.normal(0, 1, (4,)) + means[0]
        chis[chis > 180] = chis[chis > 180] - 360
        chis[chis < -180] = chis[chis < -180] + 360
        chis_list.append(chis)

    if sample == 1:
        chis_list = chis_list[0]

    return chis_list