Toggle Light / Dark / Auto color theme
Toggle table of contents sidebar
Source code for deepfold.eval.distogram
from typing import Dict , Optional
import numpy as np
from scipy.special import softmax
[docs]
def bin_edges_np (
min_bin : float ,
max_bin : float ,
num_bins : int ,
) -> np . ndarray :
bin_edges = np . linspace (
start = min_bin ,
stop = max_bin ,
num = num_bins ,
)
return bin_edges
[docs]
def calculate_bin_centers_np ( boundaries : np . ndarray ) -> np . ndarray :
step = boundaries [ 1 ] - boundaries [ 0 ]
bin_centers = boundaries + step * 0.5
bin_centers = np . concatenate (
[
bin_centers ,
( bin_centers [ - 1 ] + step )[ ... , None ],
],
axis = 0 ,
)
return bin_centers
[docs]
def undigitize ( indices : np . ndarray , bins : np . ndarray , right : bool = False ) -> np . ndarray :
if np . any ( indices < 0 ) or np . any ( indices >= len ( bins )):
raise ValueError ( "Indices must be within the range of bins" )
widths = np . diff ( bins )
if right :
bins = bins - widths
return bins [ indices ]
[docs]
def compute_predicted_distogram (
logits : np . ndarray ,
min_bin : float = 2.2325 ,
max_bin : float = 21.6875 ,
num_bins : int = 64 ,
) -> np . ndarray :
boundaries = bin_edges_np ( min_bin , max_bin , num_bins - 1 )
bin_centers = calculate_bin_centers_np ( boundaries )
probs = softmax ( logits , axis =- 1 )
predicted_distoram = np . sum ( probs * bin_centers , axis =- 1 )
return predicted_distoram
[docs]
def compute_distogram (
pts : np . ndarray ,
min_bin : float = 2.2325 ,
max_bin : float = 21.6875 ,
num_bins : int = 64 ,
) -> np . ndarray :
# boundaries = bin_edges_np(min_bin, max_bin, num_bins)
distances = np . sqrt ( np . sum (( pts [ ... , None , :, :] - pts [ ... , :, None , :]) ** 2 , axis =- 1 ))
return distances