Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
total = zeros((natoms, 3))
sqsum = zeros((natoms, 3))
LOGGER.progress('Evaluating {0} frames from {1}:'
.format(ncsets, str(coordsets)), ncsets,
'_prody_calcMSF')
ncsets = 0
coordsets.reset()
for frame in coordsets:
frame.superpose()
coords = frame._getCoords()
total += coords
sqsum += coords ** 2
ncsets += 1
LOGGER.update(ncsets, label='_prody_calcMSF')
LOGGER.finish(label='_prody_calcMSF')
msf = (sqsum/ncsets - (total/ncsets)**2).sum(1)
coordsets.goto(nfi)
return msf
right_dbref = header[data_dict['chain']].dbrefs[right_part]
chainStart = ag.select('chain {0}'.format(data_dict['chain'])
).getResnums()[0]
missing = chainStart - right_dbref.first[0]
partStart = ag.getResindices()[np.where(ag.getResnums() ==
right_dbref.first[0] + missing)][0]
pfStart, pfEnd = int(pfamRange[0]), int(pfamRange[1])
uniStart, uniEnd = int(resrange[0]), int(resrange[1])
resiStart = pfStart - uniStart + partStart - missing
resiEnd = pfEnd - uniStart + partStart - missing
ags[i] = ag.select('resindex {0} to {1}'.format(
resiStart, resiEnd))
else:
no_info.append(i)
LOGGER.finish()
for i in reversed(no_info):
ags.pop(i)
if header:
headers.pop(i)
if isinstance(data, list):
data.extend(data_dicts)
else:
LOGGER.warn('data should be a list in order to get output')
return results
subtract(mob, mob_com, mob_org)
matrix = dot((tar_org * weights).T,
(mob_org * weights)) / weights_dot
U, s, Vh = svd(matrix)
Id = array([[1, 0, 0], [0, 1, 0], [0, 0, sign(det(matrix))]])
rotation = dot(Vh.T, dot(Id, U.T))
if movs is None:
mobs[i] = dot(mob_org, rotation)
add(mobs[i], tar_com, mobs[i])
else:
add(dot(movs[i], rotation),
(tar_com - dot(mob_com, rotation)), movs[i])
LOGGER.update(i + 1, label='_prody_ensemble')
LOGGER.finish()
if len(atommaps) == 0:
unmapped.append(labels[i])
continue
# add the atommaps to the ensemble
for atommap in atommaps:
lbl = pystr(labels[i])
if len(atommaps) > 1:
chids = np.unique(atommap.getChids())
strchids = ''.join(chids)
lbl += '_%s'%strchids
ensemble.addCoordset(atommap, weights=atommap.getFlags('mapped'),
label=lbl, degeneracy=degeneracy)
LOGGER.finish()
if occupancy is not None:
ensemble = trimPDBEnsemble(ensemble, occupancy=occupancy)
if superpose != 'iter':
ensemble.superpose()
else:
ensemble.iterpose()
LOGGER.info('Ensemble ({0} conformations) were built in {1:.2f}s.'
.format(ensemble.numConfs(), time.time()-start))
if unmapped:
LOGGER.warn('{0} structures cannot be mapped.'.format(len(unmapped)))
return ensemble
filename = 'bc-{0}.out'.format(x)
url = ('ftp://resources.rcsb.org/sequence/clusters/' + filename)
try:
inp = openURL(url)
except IOError:
LOGGER.warning('Clusters at {0}% sequence identity level could '
'not be downloaded.')
continue
else:
out = openFile(filename+'.gz', 'w', folder=PDB_CLUSTERS_PATH)
out.write(inp.read())
inp.close()
out.close()
count += 1
LOGGER.update(i, label='_prody_fetchPDBClusters')
LOGGER.finish()
if len(PDB_CLUSTERS) == count:
LOGGER.info('All PDB clusters were downloaded successfully.')
elif count == 0:
LOGGER.warn('PDB clusters could not be downloaded.')
LOGGER.progress('Calculating {0} {1} modes for {2} conformations...'
.format(str_modes, model_type, n_confs), n_confs, '_prody_calcEnsembleENMs')
for i in range(n_confs):
LOGGER.update(i, label='_prody_calcEnsembleENMs')
coords = ensemble.getCoordsets(i, selected=False)
nodes = coords[0, :, :]
if atoms is not None:
atoms.setCoords(nodes)
nodes = atoms
enm, _ = calcENM(nodes, select, model=model, trim=trim,
n_modes=n_modes, title=labels[i], **kwargs)
enms.append(enm)
#lbl = labels[i] if labels[i] != '' else '%d-th conformation'%(i+1)
LOGGER.finish()
min_n_modes = ensemble.numAtoms() * 3
for enm in enms:
n_modes = enm.numModes()
if n_modes < min_n_modes:
min_n_modes = n_modes
for i in range(len(enms)):
n_modes = enms[i].numModes()
if n_modes > min_n_modes:
enms[i] = enms[i][:min_n_modes]
LOGGER.warn('last {0} modes for {1} has been discarded because at least one '
'conformation has only {2} modes'.format(n_modes-min_n_modes,
enms[i].getTitle(), min_n_modes))
LOGGER.info('{0} {1} modes were calculated for each of the {2} conformations in {3:.2f}s.'
kwargs = {}
for key in lstkwargs:
kwargs[key] = lstkwargs[key][i]
c = kwargs.get('chain','')
LOGGER.update(i, 'Retrieving {0}...'.format(p+c),
label='_prody_parsePDB')
result = _parsePDB(p, **kwargs)
if not isinstance(result, tuple):
if isinstance(result, dict):
result = (None, result)
else:
result = (result, None)
results.append(result)
results = list(zip(*results))
LOGGER.finish()
for i in reversed(range(len(results))):
if all(j is None for j in results[i]):
results.pop(i)
if len(results) == 1:
results = results[0]
results = list(results)
model = kwargs.get('model')
header = kwargs.get('header', False)
if model != 0 and header:
numPdbs = len(results[0])
else:
numPdbs = len(results)
LOGGER.info('{0} PDBs were parsed in {1:.2f}s.'
args.append((modeset0, subset, index))
nested_ret = pool.map(_pairModes_wrapper, args)
for entry in nested_ret:
ret.extend(entry)
pool.close()
pool.join()
else:
LOGGER.progress('Matching {0} modes across {1} modesets...'
.format(n_modes, n_sets), n_sets, '_prody_matchModes')
for i, modeset in enumerate(modesets):
LOGGER.update(i, label='_prody_matchModes')
if i > 0:
_, reordered_modeset = pairModes(modeset0, modeset, index=index, **kwargs)
ret.append(reordered_modeset)
LOGGER.finish()
return ret
s = (n_confs, dof)
if weights is None:
if coordsets.dtype == float:
self._cov = np.cov(coordsets.reshape((n_confs, dof)).T,
bias=1)
else:
cov = np.zeros((dof, dof))
coordsets = coordsets.reshape((n_confs, dof))
mean = coordsets.mean(0)
LOGGER.progress('Building covariance', n_confs,
'_prody_pca')
for i, coords in enumerate(coordsets.reshape(s)):
deviations = coords - mean
cov += np.outer(deviations, deviations)
LOGGER.update(n_confs, label='_prody_pca')
LOGGER.finish()
cov /= n_confs
self._cov = cov
else:
# PDB ensemble case
mean = np.zeros((n_atoms, 3))
for i, coords in enumerate(coordsets):
mean += coords * weights[i]
mean /= weights.sum(0)
d_xyz = ((coordsets - mean) * weights).reshape(s)
divide_by = weights.astype(float).repeat(3, axis=2).reshape(s)
self._cov = np.dot(d_xyz.T, d_xyz) / np.dot(divide_by.T,
divide_by)
if update_coords and ensemble is not None:
if mean is None:
mean = coordsets.mean(0)
ensemble.setCoords(mean)