Added hbonds function
This commit is contained in:
parent
3992dd4e07
commit
4d257b00ee
@ -2,6 +2,8 @@ import numpy as np
|
|||||||
from scipy.special import legendre
|
from scipy.special import legendre
|
||||||
from itertools import chain
|
from itertools import chain
|
||||||
import dask.array as darray
|
import dask.array as darray
|
||||||
|
from pathos.pools import ProcessPool
|
||||||
|
from functools import partial
|
||||||
|
|
||||||
from .autosave import autosave_data
|
from .autosave import autosave_data
|
||||||
from .utils import filon_fourier_transformation, coherent_sum, histogram
|
from .utils import filon_fourier_transformation, coherent_sum, histogram
|
||||||
|
@ -4,7 +4,7 @@ from .coordinates import rotate_axis, polar_coordinates, spherical_coordinates
|
|||||||
from .atoms import next_neighbors
|
from .atoms import next_neighbors
|
||||||
from .autosave import autosave_data
|
from .autosave import autosave_data
|
||||||
from .utils import runningmean
|
from .utils import runningmean
|
||||||
from .pbc import pbc_diff, pbc_points
|
from .pbc import pbc_diff, pbc_points, make_PBC
|
||||||
from .logging import logger
|
from .logging import logger
|
||||||
from scipy import spatial
|
from scipy import spatial
|
||||||
|
|
||||||
@ -357,3 +357,46 @@ def next_neighbor_distribution(atoms, reference=None, number_of_neighbors=4, bin
|
|||||||
resname_nn = reference.residue_names[nn]
|
resname_nn = reference.residue_names[nn]
|
||||||
count_nn = (resname_nn == atoms.residue_names.reshape(-1, 1)).sum(axis=1)
|
count_nn = (resname_nn == atoms.residue_names.reshape(-1, 1)).sum(axis=1)
|
||||||
return np.histogram(count_nn, bins=bins, normed=normed)[0]
|
return np.histogram(count_nn, bins=bins, normed=normed)[0]
|
||||||
|
|
||||||
|
|
||||||
|
def hbonds(D, H, A, box, DA_lim=0.35, HA_lim=0.35, min_cos=np.cos(30*np.pi/180), full_output=False):
|
||||||
|
def dist_DltA(D, H, A, box, max_dist=0.35):
|
||||||
|
ppoints, pind = make_PBC(D, box, thickness=max_dist+0.1, index=True)
|
||||||
|
Dtree = cKDTree(ppoints)
|
||||||
|
Atree = cKDTree(A)
|
||||||
|
pairs = Dtree.sparse_distance_matrix(Atree, max_dist, output_type='ndarray')
|
||||||
|
pairs = np.asarray(pairs.tolist())
|
||||||
|
pairs = np.int_(pairs[pairs[:,2] > 0][:,:2])
|
||||||
|
pairs[:,0] = pind[pairs[:,0]]
|
||||||
|
return pairs
|
||||||
|
|
||||||
|
def dist_AltD(D, H, A, box, max_dist=0.35):
|
||||||
|
ppoints, pind = make_PBC(A, box, thickness=max_dist+0.1, index=True)
|
||||||
|
Atree = cKDTree(ppoints)
|
||||||
|
Dtree = cKDTree(D)
|
||||||
|
pairs = Atree.sparse_distance_matrix(Dtree, max_dist, output_type='ndarray')
|
||||||
|
pairs = np.asarray(pairs.tolist())
|
||||||
|
pairs = np.int_(pairs[pairs[:,2] > 0][:,:2])
|
||||||
|
pairs = pairs[:,::-1]
|
||||||
|
pairs[:,1] = pind[pairs[:,1]]
|
||||||
|
return pairs
|
||||||
|
|
||||||
|
if len(D) <= len(A):
|
||||||
|
pairs = dist_DltA(D,H,A,box,DA_lim)
|
||||||
|
else:
|
||||||
|
pairs = dist_AltD(D,H,A,box,DA_lim)
|
||||||
|
|
||||||
|
vDH = md.pbc.pbc_diff(D[pairs[:,0]], H[pairs[:,0]], box)
|
||||||
|
vDA = md.pbc.pbc_diff(D[pairs[:,0]], A[pairs[:,1]], box)
|
||||||
|
vHA = md.pbc.pbc_diff(H[pairs[:,0]], A[pairs[:,1]], box)
|
||||||
|
angles_cos = np.clip(np.einsum('ij,ij->i', vDH, vDA)/
|
||||||
|
np.linalg.norm(vDH,axis=1)/
|
||||||
|
np.linalg.norm(vDA,axis=1), -1, 1)
|
||||||
|
is_bond = ((angles_cos >= min_cos) &
|
||||||
|
(np.sum(vHA**2,axis=-1) <= HA_lim**2) &
|
||||||
|
(np.sum(vDA**2,axis=-1) <= DA_lim**2))
|
||||||
|
if full_output:
|
||||||
|
return pairs[is_bond], angles_cos[is_bond], np.sum(vDA[is_bond]**2,axis=-1)**.5
|
||||||
|
else:
|
||||||
|
return pairs[is_bond]
|
||||||
|
|
||||||
|
@ -305,11 +305,6 @@ def Fqt_from_Grt(data, q):
|
|||||||
else:
|
else:
|
||||||
return isf.index, isf.values
|
return isf.index, isf.values
|
||||||
|
|
||||||
'''
|
|
||||||
@numba.jit
|
|
||||||
def norm(vec):
|
|
||||||
return (vec**2).sum()**0.5
|
|
||||||
'''
|
|
||||||
|
|
||||||
def singledispatchmethod(func):
|
def singledispatchmethod(func):
|
||||||
"""A decorator to define a genric instance method, analogue to functools.singledispatch."""
|
"""A decorator to define a genric instance method, analogue to functools.singledispatch."""
|
||||||
|
Loading…
Reference in New Issue
Block a user