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