mindsponge.metrics.local_distance_difference_test

View Source On Gitee
mindsponge.metrics.local_distance_difference_test(predicted_points, true_points, true_points_mask, cutoff=15, per_residue=False)[source]

Compute true and predicted distance matrices for \(C\alpha\). First calculate the distance matrix of true and predicted \(C\alpha\) atoms \(D = (((x[None,:] - x[:,None])^2).sum(-1))^{0.5}\) then compute the rate that difference is smaller than fixed value: \(lddt = (rate(abs(D_{true} - D_{pred}) < 0.5) + rate(abs(D_{true} - D_{pred}) < 1.0) + rate(abs(D_{true} - D_{pred}) < 2.0) + rate(abs(D_{true} - D_{pred}) < 4.0))/4\) Jumper et al. (2021) Suppl. Alg. 29 "predictPerResidueLDDT_Ca".

Parameters
  • predicted_points (Tensor) – The prediction Ca atoms position tensor of shape \((1, N_{res}, 3)\) with \(N_{res}\) the number of residues in protein.

  • true_points (Tensor) – The ground truth Ca atoms position tensor of shape \((1, N_{res}, 3)\)

  • true_points_mask (Tensor) – The binary mask for predicted_points of shape \((1, N_{res}, 1)\)

  • cutoff (float) – The cutoff value for lddt to stop gradient, Default: 15.

  • per_residue (bool) – The indicator if local distance difference is averaged, set True to return local distance difference per residue. Default: False.

Returns

  • score (Tensor) - Local distance difference score, the shape is \((1,)\) if per_residue is set to False, \((1, N_{res})\) otherwise.

Supported Platforms:

Ascend GPU

Examples

>>> import numpy as np
>>> np.random.seed(0)
>>> from mindsponge.metrics import local_distance_difference_test
>>> from mindspore import dtype as mstype
>>> from mindspore import Tensor
>>> predicted_points = Tensor(np.random.rand(1, 256, 3)).astype(mstype.float32)
>>> true_points = Tensor(np.random.rand(1, 256, 3)).astype(mstype.float32)
>>> true_points_mask = Tensor(np.random.rand(1, 256, 1)).astype(mstype.float32)
>>> lddt = local_distance_difference_test(predicted_points, true_points, true_points_mask,
...                                       cutoff=15, per_residue=False)
>>> print(lddt)
[0.9554313]