Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def calcSignatureCrossCorr(mode_ensemble, norm=True):
"""Calculate the signature cross-correlations based on a :class:`ModeEnsemble` instance.
:arg mode_ensemble: an ensemble of ENMs
:type mode_ensemble: :class: `ModeEnsemble`
:keyword norm: whether to normalize the cross-correlations. Default is **True**
:type norm: bool
"""
if not isinstance(mode_ensemble, ModeEnsemble):
raise TypeError('mode_ensemble should be an instance of ModeEnsemble')
if not mode_ensemble.isMatched():
LOGGER.warn('modes in mode_ensemble did not match cross modesets. '
'Consider running mode_ensemble.match() prior to using this function')
modesets = mode_ensemble
n_atoms = modesets.numAtoms()
n_sets = len(modesets)
C = np.zeros((n_sets, n_atoms, n_atoms))
for i in range(n_sets):
modes = modesets[i]
c = calcCrossCorr(modes, norm=norm)
C[i, :, :] = c
title_str = '%d modes'%mode_ensemble.numModes()
weights = mode_ensemble.getWeights()
if weights is not None:
W = np.zeros((mode_ensemble.numModeSets(),
mode_ensemble.numAtoms(),
try:
xml = openURL(url, timeout=timeout).read()
except Exception:
pass
else:
if xml:
break
if not xml:
raise IOError('Pfam search timed out or failed to parse results '
'XML, check URL: ' + url)
else:
LOGGER.report('Pfam search completed in %.2fs.', '_pfam')
if xml.find(b'There was a system error on your last request.') > 0:
LOGGER.warn('No Pfam matches found for: ' + seq)
return None
try:
root = ET.XML(xml)
except Exception as err:
raise ValueError('failed to parse results XML, check URL: ' + url)
result = root[0].get('id')
return result
def calcMinBranchLength(go_id1, go_id2, go):
'''Find the minimum branch length between two terms in the GO DAG.
:arg go_id1: the first GO ID
:type go_id1: str
:arg go_id2: the second GO ID
:type go_id2:str
:arg go: object containing a gene ontology (GO) directed acyclic graph (DAG)
:type go: `~goatools.obo_parser.GODag`
'''
# First get the deepest common ancestor
dca = findDeepestCommonAncestor([go_id1, go_id2], go)
if dca is None:
LOGGER.warn('There are no common ancestors between {0} and {1} so no meaningful distance can be calculated.'.format(
go_id1, go_id2))
return None
# Then get the distance from the DCA to each term
dca_depth = go[dca].depth
d1 = go[go_id1].depth - dca_depth
d2 = go[go_id2].depth - dca_depth
# Return the total distance - i.e., to the deepest common ancestor and back.
return d1 + d2
def calcSignatureFractVariance(mode_ensemble):
"""Calculate signature fractional variance for a ModeEnsemble."""
if not isinstance(mode_ensemble, ModeEnsemble):
raise TypeError('mode_ensemble should be an instance of ModeEnsemble')
if not mode_ensemble.isMatched():
LOGGER.warn('modes in mode_ensemble did not match cross modesets. '
'Consider running mode_ensemble.match() prior to using this function')
matches = mode_ensemble
n_sets = len(matches)
W = []; is3d = None
for i in range(n_sets):
m = matches[i]
var = calcFractVariance(m)
W.append(var)
if is3d is None:
is3d = m.is3d()
title_str = '%d modes'%mode_ensemble.numModes()
labels = mode_ensemble.getLabels()
sig = sdarray(W, title=title_str, weights=None, labels=labels, is3d=is3d)
def __init__(self, sel='', loc=0, msg='', tkns=None):
if SETTINGS.get('selection_warning', True):
if tkns:
for tkn in tkns:
tkn = str(tkn)
if sel.count(tkn, loc) == 1: loc = sel.index(tkn, loc)
msg = ('Selection string contains typo(s):\n'
'{0}\n '.format(repr(sel)) +
' ' * loc + '^ ' + msg)
LOGGER.warn(msg)
if n_yatoms == n_col or 3*n_yatoms == n_col:
xatoms = yatoms_ # swap xatoms and yatoms
else:
xatoms = None
LOGGER.warn('the number of columns ({0}) in matrix does not '
'match that of either {1} ({2} atoms) or {3} '
'({4} atoms)'.format(n_col, xatoms_, n_xatoms, yatoms_, n_yatoms))
else:
xatoms = xatoms_
if n_yatoms != n_row and 3*n_yatoms != n_row:
if n_xatoms == n_row or 3*n_xatoms == n_row:
yatoms = xatoms_ # swap xatoms and yatoms
else:
yatoms = None
LOGGER.warn('the number of rows ({0}) in matrix does not '
'match that of either {1} ({2} atoms) or {3} '
'({4} atoms)'.format(n_row, xatoms_, n_xatoms, yatoms_, n_yatoms))
else:
yatoms = yatoms_
else:
xatoms = yatoms = atoms
is3dx = is3dy = False
# an additional check for the case of xatoms = yatoms = atoms
if xatoms is not None:
if xatoms.numAtoms() != n_col and 3*xatoms.numAtoms() != n_col:
xatoms = None
else:
is3dx = xatoms.numAtoms()*3 == n_col
if yatoms is not None:
writePDB(outfn, pdb)
continue
pdb_sel = pdb.select(selstr)
LOGGER.info('Selection {0} matched {1} atoms.'
.format(repr(selstr), len(pdb_sel)))
if (len(pdb_sel) == len(ref_sel) and
all(pdb_sel.getNames() == ref_sel.getNames())):
printRMSD(ref_sel, pdb_sel, msg='Before alignment ')
superpose(pdb_sel, ref_sel)
printRMSD(ref_sel, pdb_sel, msg='After alignment ')
outfn = pdb.getTitle() + suffix + '.pdb'
LOGGER.info('Writing file: ' + outfn)
writePDB(outfn, pdb)
else:
LOGGER.warn('Failed to align structure ' + arg + '.')
repr(type(other).__name__)))
new = AtomGroup(self._title + ' + ' + other._title)
if self._n_csets:
if self._n_csets == other._n_csets:
new.setCoords(np.concatenate((self._coords, other._coords), 1))
if self._n_csets > 1:
LOGGER.info('All {0} coordinate sets are copied to '
'{1}.'.format(self._n_csets, new.getTitle()))
else:
new.setCoords(np.concatenate((self._getCoords(),
other._getCoords())))
LOGGER.info('Active coordinate sets are copied to {0}.'
.format(new.getTitle()))
elif other._n_csets:
LOGGER.warn('No coordinate sets are copied to {0}'
.format(new.getTitle()))
for key in set(list(self._data) + list(other._data)):
if key in ATOMIC_FIELDS and ATOMIC_FIELDS[key].readonly:
continue
this = self._data.get(key)
that = other._data.get(key)
if this is not None or that is not None:
if this is None:
shape = list(that.shape)
shape[0] = len(self)
this = np.zeros(shape, that.dtype)
if that is None:
shape = list(this.shape)
shape[0] = len(other)
that = np.zeros(shape, this.dtype)
ag = other.getAtomGroup()
except AttributeError:
raise TypeError('other must be an AtomPointer')
if self._ag != ag:
raise ValueError('both selections must be from the same AtomGroup')
acsi = self.getACSIndex()
if acsi != other.getACSIndex():
LOGGER.warning('active coordinate set indices do not match, '
'so it will be set to zero in the union.')
acsi = 0
acsi = self.getACSIndex()
if acsi != other.getACSIndex():
LOGGER.warn('Active coordinate set indices do not match, it will '
'be set to zero.')
acsi = 0
indices = set(self._getIndices())
indices = indices.intersection(other.getIndices())
if indices:
indices = unique(indices)
if indices[-1] == atommap.DUMMY:
indices = indices[:-1]
return Selection(self._ag, indices, '({0}) and ({1})'
.format(self.getSelstr(), other.getSelstr()),
acsi)
self._coords = coords.reshape((1, n_atoms, 3))
self._cslabels = [str(label)]
self._n_csets = n_csets = 1
else:
self._coords = coords
self._n_csets = n_csets = shape[0]
if isinstance(label, list):
if len(label) == n_csets:
self._cslabels = list(label)
else:
self._cslabels = [''] * n_csets
LOGGER.warn('Number of labels does not match number '
'of coordinate sets.')
else:
self._cslabels = [str(label)] * n_csets
self._acsi = 0
self._setTimeStamp()
else:
acsi = self._acsi
if ndim == 2:
self._coords[acsi] = coords
else:
self._coords[acsi] = coords[0]
self._setTimeStamp(acsi)
self._cslabels[acsi] = str(label)