Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
.format(sqid, PDB_CLUSTERS_SQID_STR))
LOGGER.info('Loading PDB sequence clusters for sequence identity '
'{0}.'.format(sqid))
sqid_list = [sqid]
global PDB_CLUSTERS_UPDATE_WARNING
for sqid in sqid_list:
filename = os.path.join(PDB_CLUSTERS_PATH,
'bc-{0}.out.gz'.format(sqid))
if not os.path.isfile(filename):
fetchPDBClusters(sqid)
if PDB_CLUSTERS_UPDATE_WARNING:
import time
diff = (time.time() - os.path.getmtime(filename)) / 604800.
if diff > 1.:
LOGGER.warning('PDB sequence clusters are {0:.1f} week(s) old,'
' call `fetchPDBClusters` to receive updates.'
.format(diff))
PDB_CLUSTERS_UPDATE_WARNING = False
inp = openFile(filename)
clusters_str = pystr(inp.read())
clusters = []
for cluster_str in clusters_str.split('\n'):
cluster_str = cluster_str.strip()
if len(cluster_str):
cluster = [tuple(item.split('_')) for item in cluster_str.split()]
clusters.append(cluster)
PDB_CLUSTERS[sqid] = clusters
inp.close()
def pathVMD(*path):
"""Returns VMD path, or set it to be a user specified *path*."""
if not path:
path = SETTINGS.get('vmd', None)
if isExecutable(path):
return path
else:
LOGGER.warning('VMD path is not set by user, looking for it.')
vmdbin = None
vmddir = None
if PLATFORM == 'Windows':
if PY3K:
import winreg
else:
import _winreg as winreg # PY3K: OK
for vmdversion in ('1.8.7', '1.9', '1.9.1'):
try:
key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE,
'Software\\University of Illinois\\VMD\\' +
vmdversion)
vmddir = winreg.QueryValueEx(key, 'VMDDIR')[0]
vmdbin = join(vmddir, 'vmd.exe')
except:
def getWWPDBFTPServer():
"""Return a tuple containing name, host, and path of the currently
set `wwPDB `_ FTP server."""
server = SETTINGS.get('wwpdb_ftp', None)
if server is None:
LOGGER.warning('A wwPDB FTP server is not set, default FTP server '
'RCSB PDB is used. Use `setWWPDBFTPServer` function '
'to set a server close to your location.')
return _WWPDB_RCSB
else:
if server[2].endswith('data/structures/divided/pdb/'):
return (server[0], server[1],
server[2][:-len('data/structures/divided/pdb/')])
else:
return server
try:
from scipy.sparse import linalg as scipy_sparse_la
except ImportError:
raise ImportError('failed to import scipy.sparse.linalg, '
'which is required for sparse matrix '
'decomposition')
if eigvals:
j = eigvals[0]
k = eigvals[-1] + 1
else:
j = 0
k = dof
if k >= dof:
k -= 1
LOGGER.warning('Cannot calculate all eigenvalues for sparse matrices, thus '
'the last eigenvalue is omitted. See scipy.sparse.linalg.eigsh '
'for more information')
values, vectors = scipy_sparse_la.eigsh(M, k=k, which='SA')
values = values[j:k]
vectors = vectors[:, j:k]
else:
if n_modes is not None:
LOGGER.info('Scipy is not found, all modes were calculated.')
else:
n_modes = dof
values, vectors = linalg.eigh(M)
return values, vectors
def getPackagePath():
"""Returns package path."""
path = pkg.SETTINGS.get('package_path', None)
update = False
if path is None:
pkg.LOGGER.warning('{0} package path is not yet set by the user.'
.format(pkg.SETTINGS._package))
update = True
elif not os.path.isdir(path):
pkg.LOGGER.warning("{0} package path '{1}' does not exist."
.format(pkg.SETTINGS._package, path))
update = True
elif not os.access(path, os.W_OK):
pkg.LOGGER.warning("User does not have write access to {0} package "
"path '{1}'.".format(pkg.SETTINGS._package, path))
update = True
if update:
default = os.path.join(USERHOME, '.' + pkg.SETTINGS._package)
path = input('Please specify a folder for storing {0} data '
'(press enter for "{1}"):'
.format(pkg.SETTINGS._package, default)) or default
while not setPackagePath(path):
path = input('Please specify a valid folder name with write '
'access:')
return path
To release the current mirror, pass an invalid path, e.g. ``path=''``.
If you are keeping a partial mirror, such as PDB files in
:file:`/data/structures/divided/pdb/` folder, specify *format*, which is
``'pdb'`` in this case."""
if path is None:
path = SETTINGS.get('pdb_mirror_path')
format = SETTINGS.get('pdb_mirror_format', None)
if path:
if isdir(path):
if format is None:
return path
else:
return path, format
else:
LOGGER.warning('PDB mirror path {0} is not a accessible.'
.format(repr(path)))
else:
if isdir(path):
path = abspath(path)
LOGGER.info('Local PDB mirror path is set: {0}'
.format(repr(path)))
SETTINGS['pdb_mirror_path'] = path
SETTINGS['pdb_mirror_format'] = format
SETTINGS.save()
else:
current = SETTINGS.pop('pdb_mirror_path')
if current:
LOGGER.info('PDB mirror {0} is released.'
.format(repr(current)))
SETTINGS.save()
else:
| wwPDB FTP server | *Key* (case insensitive) |
+===========================+=============================+
| RCSB PDB (USA) (default) | RCSB, USA, US |
+---------------------------+-----------------------------+
| PDBe (Europe) | PDBe, Europe, Euro, EU |
+---------------------------+-----------------------------+
| PDBj (Japan) | PDBj, Japan, Jp |
+---------------------------+-----------------------------+
"""
server = WWPDB_FTP_SERVERS.get(key.lower())
if server is not None:
SETTINGS['wwpdb_ftp'] = server
SETTINGS.save()
else:
LOGGER.warning('{0:s} is not a valid key.'.format(key))
def alignCoordsets(atoms, weights=None):
"""Returns *atoms* after superposing coordinate sets onto its active
coordinate set. Transformations will be calculated for *atoms* and
applied to its :class:`.AtomGroup`, when applicable. Optionally,
atomic *weights* can be passed for weighted superposition."""
try:
acsi, n_csets = atoms.getACSIndex(), atoms.numCoordsets()
except AttributeError:
raise TypeError('atoms must have type Atomic, not {0}'
.format(type(atoms)))
if n_csets < 2:
LOGGER.warning('{0} contains fewer than two coordinate sets, '
'alignment was not performed.'.format(str(atoms)))
return
try:
ag = atoms.getAtomGroup()
except AttributeError:
ag = atoms
agacsi = ag.getACSIndex()
tar = atoms._getCoords()
for i in range(n_csets):
if i == acsi:
continue
atoms.setACSIndex(i)
ag.setACSIndex(i)
calcTransformation(atoms, tar, weights).apply(ag)
simpch2.getTitle(), len(simpch2)))
match1, match2, nmatches = getAlignedMatch(simpch1, simpch2)
_seqid = nmatches * 100 / min(len(simpch1), len(simpch2))
_cover = len(match2) * 100 / max(len(simpch1), len(simpch2))
if _seqid >= seqid and _cover >= coverage:
LOGGER.debug('\tMatch: {0} residues match with {1:.0f}% '
'sequence identity and {2:.0f}% overlap.'
.format(len(match1), _seqid, _cover))
matches.append((match1, match2, _seqid, _cover,
simpch1, simpch2))
else:
LOGGER.debug('\tFailed to match chains (seqid={0:.0f}%, '
'overlap={1:.0f}%).'
.format(_seqid, _cover))
else:
LOGGER.warning('Pairwise alignment could not be performed.')
if not matches:
return None
subset = _SUBSETS[subset]
for mi, result in enumerate(matches):
match1, match2, _seqid, _cover, simpch1, simpch2 = result
indices1 = []
indices2 = []
for i in range(len(match1)):
ares = match1[i]
bres = match2[i]
if subset == 'ca':
try:
aid = ares.getNames().tolist().index('CA')