Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
Returns: lists containing an :class:'.AtomGroup' for each PDB,
the headers for those PDBs, and the requested :class:`.Chain` objects
"""
fi = open(filename,'r')
lines = fi.readlines()
fi.close()
pdb_ids = []
ags = []
headers = []
chains = []
num_lines = len(lines)
LOGGER.progress('Starting', num_lines, '_prody_parseChainsList')
for i, line in enumerate(lines):
LOGGER.update(i, 'Parsing lines...', label='_prody_parseChainsList')
pdb_id = line.split()[0].split('_')[0]
if not pdb_id in pdb_ids:
pdb_ids.append(pdb_id)
ag, header = parsePDB(pdb_id, compressed=False, \
subset=line.split()[0].split('_')[1], header=True)
ags.append(ag)
headers.append(header)
chains.append(ag.getHierView()[line.strip().split()[1]])
LOGGER.finish()
LOGGER.info('{0} PDBs have been parsed and {1} chains have been extracted. \
'.format(len(ags),len(chains)))
if unitcell:
uc = frame._getUnitcell()
uc[3:] = np.sin((PISQUARE/90) * (90-uc[3:]))
uc = uc[[0,3,1,4,5,2]]
elif isEnsemble:
frame._index = i
else:
frame.setACSIndex(i)
if align:
frame.superpose()
if j == 0:
dcd.write(frame._getCoords(), uc, timestep=timestep,
firsttimestep=first_ts, framefreq=framefreq)
else:
dcd.write(frame._getCoords(), uc)
LOGGER.update(i, label='_prody_writeDCD')
if isAtomic:
trajectory.setACSIndex(acsi)
j += 1
LOGGER.finish()
dcd.close()
time_ = time() - time_ or 0.01
dcd_size = 1.0 * (56 + (n_atoms * 3 + 6) * 4 ) * n_csets / (1024*1024)
LOGGER.info('DCD file was written in {0:.2f} seconds.'.format(time_))
LOGGER.info('{0:.2f} MB written at input rate {1:.2f} MB/s.'
.format(dcd_size, dcd_size/time_))
LOGGER.info('{0} coordinate sets written at output rate {1} frame/s.'
.format(n_csets, int(n_csets/time_)))
if j != n_csets:
LOGGER.warn('Warning: {0} frames expected, {1} written.'
.format(n_csets, j))
if isTrajectory:
for i, x in enumerate(keys):
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.')
natoms = coordsets.numSelected()
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
ori_coords = atoms.getCoords()
labels = ensemble.getLabels()
### ENMs ###
## ENM for every conf
enms = []
n_confs = ensemble.numConfs()
str_modes = 'all' if n_modes is None else str(n_modes)
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:
lstkwargs = {}
for key in kwargs:
argval = kwargs.get(key)
if np.isscalar(argval):
argval = [argval]*n_pdb
lstkwargs[key] = argval
start = time.time()
LOGGER.progress('Retrieving {0} PDB structures...'
.format(n_pdb), n_pdb, '_prody_parsePDB')
for i, p in enumerate(pdb):
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:
debug['coverage'] = cov_matrix
debug['solution'] = [1]
# optimize atommaps based on superposition if target is given
if target is not None and len(nodes):
atommaps = _optimize(atommaps)
i = 2
if len(atommaps) < least_n_atommaps:
LOGGER.debug('At least %d atommaps requested. '
'Finding alternative solutions.'%least_n_atommaps)
LOGGER.progress('Solving for %d-best solution...', None, label='_atommap_lap')
while len(atommaps) < least_n_atommaps:
LOGGER.update(i, label='_atommap_lap')
try:
more_atommaps, _, _ = _build(mappings, nodes)
except SolutionDepletionException:
break
more_atommaps = _optimize(more_atommaps)
for j in reversed(range(len(more_atommaps))):
if more_atommaps[j] in atommaps:
more_atommaps.pop(j)
if len(more_atommaps):
debug['solution'].append(i)
atommaps.extend(more_atommaps)
i += 1
LOGGER.finish()
LOGGER.report('%d atommaps were found in %%.2fs. %d requested'%(len(atommaps), least_n_atommaps),
label='_atommap_lap')
n_ids = len(ids)
if n_ids == 1:
if isListLike(ids[0]):
ids = ids[0]
n_ids = len(ids)
if n_ids == 1:
ids = list(ids)
results = []
unmapped = []
LOGGER.progress('Querying GOA for {0} ids...'
.format(n_ids), n_ids, '_prody_queryGOA')
for i, id in enumerate(ids):
LOGGER.update(i, 'Querying GOA for id {0} of {1}...'
.format(i+1, n_ids), label='_prody_queryGOA')
if not isinstance(id, str):
raise TypeError('each ID should be a string')
id = id.upper()
if database == 'PDB':
if not len(id) in [4, 5, 6]:
raise ValueError('PDB IDs should be strings of length 4 to 6')
if len(id) == 5 and str.isalpha(id[-1]):
id = id[:4] + '_' + id[-1]
if id in list(gaf_dict.keys()):
results.append(gaf_dict[id])
else: