Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
anm.buildHessian(p38ca)
anm.calcModes()
#traverseMode() function generates conformations along a single normal mode.
#Conformations are generated in both directions along the given mode.
#rmsd argument is used to set the RMSD distance to the farthest conformation.
#Let’s generate 10 conformations along ANM mode 1:
trajectory = prody.traverseMode(anm[0], p38ca, n_steps=5, rmsd=2.0)
coords=trajectory.getCoordsets()
#conformation...
#dumb->read in epmv or read on the fly?
p38traj = p38ca.copy()
p38traj.delCoordset(0)
p38traj.addCoordset( trajectory )
prody.writePDB('p38_mode1_trajectory.pdb', p38traj)
def computeNormalMode(userfilenamein="",userfilenameout="NMA.pdb", usermode=0,userrmsd=0.8, usernbconf=5, conf="allatom", usercutoff=15.0, usergamma=1.0) :
mystruct = prody.parsePDB(userfilenamein, model=1)
mystruct_ca = mystruct.select('protein and name CA')
anm = prody.ANM(userfilenamein+str(usermode))
anm.buildHessian(mystruct_ca, gamma=usergamma, cutoff=usercutoff)
anm.calcModes()
bb_anm, bb_atoms = extrapolateModel(anm, mystruct_ca, mystruct.select(conf))
ensemble = sampleModes(bb_anm[usermode], bb_atoms, n_confs=usernbconf, rmsd=userrmsd)
nmastruct = mystruct.copy( bb_atoms )
nmastruct.addCoordset(ensemble)
writePDB(userfilenameout, nmastruct)
items = arr.split(':', nnums + 1)
numbers.append(items[:nnums])
else:
items = [arr]
heatmap.append(fromstring(items[-1], float, sep=';'))
heatmap = array(heatmap)
if nnums:
numbering = meta['numbering']
try:
numbers = array(numbers, int)
except ValueError:
try:
numbers = array(numbers, float)
except ValueError:
LOGGER.warn('Numbering for y-axis could not be parsed.')
numbering = []
for i, label in enumerate(numbering):
meta[label] = numbers[:, i].copy()
return heatmap, meta
raise TypeError('database should be a string')
database = database.upper()
filename = kwargs.get('filename', None)
if filename is None:
if database == 'UNIPROT':
filename = 'goa_' + database.lower() + '_all.gaf.gz'
else:
filename = 'goa_' + database.lower() + '.gaf'
data_folder = kwargs.get('data_folder', os.getcwd())
# If the file doesn't already exist, download it
gaf = os.path.join(data_folder, filename)
if not(os.path.exists(gaf) and os.path.getsize(gaf) > 0):
LOGGER.info('Downloading file {0} to {1}'.format(filename, gaf))
data_stream = BytesIO()
ftp_host = 'ftp.ebi.ac.uk'
ftp = FTP(ftp_host)
ftp.login()
try:
ftp.cwd('pub/databases/GO/goa')
ftp.cwd(database)
ftp.retrbinary('RETR {}.gz'.format(filename), data_stream.write)
except:
raise ValueError('Cannot find the requested GO association file')
# Logout from FTP server
ftp.quit()
zip_data = data_stream.getvalue()
GAP_PENALTY, GAP_EXT_PENALTY,
one_alignment_only=1)
torf = []
for s, c in zip(*algn[0][:2]):
if s == '-':
continue
elif c != '-':
torf.append(True)
else:
torf.append(False)
torf = array(torf)
tsum = torf.sum()
assert tsum <= before, 'problem in mapping sequence to structure'
if tsum < before:
arr = arr.take(torf.nonzero()[0], 1)
LOGGER.report('Structure refinement reduced number of '
'columns from {0} to {1} in %.2fs.'
.format(before, arr.shape[1]), '_refine')
else:
LOGGER.debug('All residues in the sequence are contained in '
'PDB structure {0}.'.format(label))
from .analysis import calcMSAOccupancy, uniqueSequences
rows = None
if rowocc is not None:
before = arr.shape[0]
LOGGER.timeit('_refine')
try:
rowocc = float(rowocc)
except Exception as err:
raise TypeError('rowocc must be a float ({0})'.format(str(err)))
failure += 1
filenames[i] = None
else:
pdbfile.close()
if not compressed:
gunzip(filename)
filename = relpath(filename)
LOGGER.debug('{0:s} downloaded ({1:s})'
.format(pdbid, filename))
success += 1
filenames[i] = filename
ftp.quit()
if len(identifiers) == 1:
return filenames[0]
else:
LOGGER.info('PDB download completed ({2:d} found, '
'{0:d} downloaded, {1:d} failed).'
.format(success, failure, exists))
return filenames
def prody_align(opt):
"""Align models in a PDB file or a PDB file onto others."""
import prody
LOGGER = prody.LOGGER
args = opt.pdb
if len(args) == 1:
pdb = args[0]
LOGGER.info('Aligning multiple models in: ' + pdb)
selstr, prefix, model = opt.select, opt.prefix, opt.model
pdb = prody.parsePDB(pdb)
pdbselect = pdb.select(selstr)
if pdbselect is None:
LOGGER.warning('Selection "{0:s}" do not match any atoms.'
.format(selstr))
sys.exit(-1)
LOGGER.info('{0:d} atoms will be used for alignment.'
.format(len(pdbselect)))
pdb.setACSIndex(model-1)
prody.alignCoordsets(pdb, selstr=selstr)
rmsd = prody.calcRMSD(pdb)
LOGGER.info('Max RMSD: {0:0.2f} Mean RMSD: {1:0.2f}'
.format(rmsd.max(), rmsd.mean()))
if prefix == '':
prefix = pdb.getTitle() + '_aligned'
outfn = prefix + '.pdb'
LOGGER.info('Writing file: ' + outfn)
if isinstance(file_info, basestring):
# Then is a path, and must be a pdb
path = file_info
structure_info["source"] = path
name, ext = os.path.splitext(path)
self.check_extension(ext)
if ext == ".dcd":
common.print_and_flush( "[ERROR TrajectoryHandler::get_structure] Path format can only be used with pdb files. Exiting...\n")
self.notify("SHUTDOWN", "Fatal error reading pdbs.")
exit()
else:
structure = prody.parsePDB(path)
structure_info["number of conformations"] = structure.numCoordsets()
structure_info["number of atoms"] = structure.numAtoms()
return structure, structure_info
else:
# {"file": , "selection": } object or
# {"file": , "atoms_file":, "selection"} if the file is a dcd file
path = file_info["file"]
structure_info["source"] = path
name, ext = os.path.splitext(path)
self.check_extension(ext)
if ext == ".dcd":
structure_info["source of atoms"] = file_info["atoms_file"]
structure = prody.parsePDB(file_info["atoms_file"])
removeAllCoordsetsFromStructureLeavingFirst(structure)
parser.print_help()
print "\nError: PDB missing\n"
sys.exit(-1)
import numpy as np
import prody
LOGGER = prody.LOGGER
if opt.silent:
prody.setVerbosity('warning')
if len(args) == 1:
pdb = args[0]
LOGGER.info('Aligning multiple models in: ' + pdb)
selstr, prefix, model = opt.select, opt.prefix, opt.model
pdb = prody.parsePDB(pdb)
pdbselect = pdb.select(selstr)
if pdbselect is None:
LOGGER.warning('Selection "{0:s}" do not match any atoms.'
.format(selstr))
sys.exit(-1)
LOGGER.info('{0:d} atoms will be used for alignment.'
.format(len(pdbselect)))
pdb.setACSIndex(model-1)
prody.alignCoordsets(pdb, selstr=selstr)
rmsd = prody.calcRMSD(pdb)
LOGGER.info('Max RMSD: {0:0.2f} Mean RMSD: {1:0.2f}'
.format(rmsd.max(), rmsd.mean()))
if prefix == '':
prefix = pdb.getTitle() + '_aligned'
outfn = prefix + '.pdb'
LOGGER.info('Writing file: ' + outfn)
n_csets = 0
if model != 0:
LOGGER.timeit()
try:
lines = stream.readlines()
except AttributeError as err:
try:
lines = stream.read().split('\n')
except AttributeError:
raise err
if not len(lines):
raise ValueError('empty PDB file or stream')
ag = _parseCIFLines(ag, lines, model, chain, subset, altloc)
if ag.numAtoms() > 0:
LOGGER.report('{0} atoms and {1} coordinate set(s) were '
'parsed in %.2fs.'.format(ag.numAtoms(),
ag.numCoordsets() - n_csets))
else:
ag = None
LOGGER.warn('Atomic data could not be parsed, please '
'check the input file.')
return ag
title_suffix = kwargs.get('title_suffix','')
atomgroup = AtomGroup(str(kwargs.get('title', 'Unknown')) + title_suffix)
atomgroup._n_atoms = n_nodes
if make_nodes:
LOGGER.info('Building coordinates from electron density map. This may take a while.')
LOGGER.timeit()
if map:
emd, atomgroup = _parseEMDLines(atomgroup, stream, cutoff=cutoff, n_nodes=n_nodes, \
num_iter=num_iter, map=map, make_nodes=make_nodes)
else:
atomgroup = _parseEMDLines(atomgroup, stream, cutoff=cutoff, n_nodes=n_nodes, \
num_iter=num_iter, map=map, make_nodes=make_nodes)
LOGGER.report('{0} atoms and {1} coordinate sets were '
'parsed in %.2fs.'.format(atomgroup.numAtoms(), atomgroup.numCoordsets()))
else:
emd = _parseEMDLines(atomgroup, stream, cutoff=cutoff, n_nodes=n_nodes, \
num_iter=num_iter, map=map, make_nodes=make_nodes)
if make_nodes:
if map:
return emd, atomgroup
else:
return atomgroup
else:
return emd