From f53e3b0e274f183ba6671ad2e540cead1c2ee6c7 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Wed, 18 Feb 2026 14:02:33 +0000 Subject: [PATCH 01/15] update logistic kwargs for sklearn updates --- prody/dynamics/logistic.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/prody/dynamics/logistic.py b/prody/dynamics/logistic.py index eb5abc963..f278747d0 100644 --- a/prody/dynamics/logistic.py +++ b/prody/dynamics/logistic.py @@ -38,10 +38,11 @@ def calcModes(self, coordsets, labels, lasso=True, **kwargs): :arg labels: a set of labels for discriminating classes :type labels: :class:`~numpy.ndarray` - :arg lasso: whether to use lasso regression (sets penalty='l1', solver='liblinear') + :arg lasso: whether to use lasso regression + This sets penalty='l1', solver='saga', max_iter=50000 if these are not set Default **True** :type lasso: bool - + :arg n_shuffles: number of random shuffles of labels to assess variability :type n_shuffles: int @@ -50,7 +51,7 @@ def calcModes(self, coordsets, labels, lasso=True, **kwargs): try: from sklearn.linear_model import LogisticRegression except ImportError: - raise ImportError("Please install sklearn to use LogisticRegression") + raise ImportError("Please install scikit-learn to use LogisticRegression") start = time.time() self._clear() @@ -93,9 +94,14 @@ def calcModes(self, coordsets, labels, lasso=True, **kwargs): LOGGER.warn('using provided penalty kwarg instead of l1 from lasso') if 'solver' not in kwargs: - kwargs['solver'] ='liblinear' + kwargs['solver'] ='saga' + else: + LOGGER.warn('using provided solver kwarg instead of saga for lasso') + + if 'max_iter' not in kwargs: + kwargs['max_iter'] = 50000 else: - LOGGER.warn('using provided solver kwarg instead of liblinear from lasso') + LOGGER.warn('using provided max_iter kwarg instead of 50000 that works for lasso') self._lra = LogisticRegression(**kwargs) self._projection = self._lra.fit(self._coordsets, self._labels) From 0389d1c48453724810304ad0f9f5de00d38b829c Mon Sep 17 00:00:00 2001 From: James Krieger Date: Wed, 18 Feb 2026 15:40:31 +0000 Subject: [PATCH 02/15] fix LRA and its save and load --- prody/dynamics/functions.py | 13 +++++++++++++ prody/dynamics/logistic.py | 23 +++++++++++++++-------- 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/prody/dynamics/functions.py b/prody/dynamics/functions.py index bd7c346fb..1756ad3d5 100644 --- a/prody/dynamics/functions.py +++ b/prody/dynamics/functions.py @@ -24,6 +24,7 @@ from .exanm import exANM, MaskedExANM from .rtb import RTB from .pca import PCA, EDA +from .logistic import LRA from .imanm import imANM from .mode import Vector, Mode, VectorBase from .modeset import ModeSet @@ -77,6 +78,13 @@ def saveModel(nma, filename=None, matrices=False, **kwargs): type_ = 'ANM' else: type_ = 'GNM' + elif isinstance(nma, LRA): + type_ = 'LRA' + attr_list.extend(['_shuffled_lras', + '_n_shuffles', + '_coordsets_reshaped', + '_projection', '_lra', + '_array']) elif isinstance(nma, EDA): type_ = 'EDA' elif isinstance(nma, PCA): @@ -114,6 +122,9 @@ def saveModel(nma, filename=None, matrices=False, **kwargs): if isinstance(nma, exANM): attr_dict['type'] = 'exANM' + if isinstance(nma, LRA): + attr_dict['type'] = 'LRA' + suffix = '.' + attr_dict['type'].lower() if not filename.lower().endswith('.npz'): if not filename.lower().endswith(suffix): @@ -176,6 +187,8 @@ def loadModel(filename, **kwargs): nma = NMA(title) elif type_ == 'RTB': nma = RTB(title) + elif type_ == 'LRA': + nma = LRA(title) else: raise IOError('NMA model type is not recognized: {0}'.format(type_)) diff --git a/prody/dynamics/logistic.py b/prody/dynamics/logistic.py index f278747d0..c8b1683e1 100644 --- a/prody/dynamics/logistic.py +++ b/prody/dynamics/logistic.py @@ -103,13 +103,18 @@ def calcModes(self, coordsets, labels, lasso=True, **kwargs): else: LOGGER.warn('using provided max_iter kwarg instead of 50000 that works for lasso') + # The general multi-class case has one array per class + self._n_modes = len(set(labels)) + + if self._n_modes == 2: + # binary classification just has one + self._n_modes = 1 + self._lra = LogisticRegression(**kwargs) self._projection = self._lra.fit(self._coordsets, self._labels) self._array = self._lra.coef_.T/np.linalg.norm(self._lra.coef_) - self._eigvals = np.ones(1) - self._vars = np.ones(1) - - self._n_modes = 1 + self._eigvals = np.ones(self._n_modes) + self._vars = np.ones(self._n_modes) if not quiet: if self._n_modes > 1: @@ -120,13 +125,15 @@ def calcModes(self, coordsets, labels, lasso=True, **kwargs): .format(self._n_modes, time.time()-start)) if self._n_shuffles > 0: - if self._n_modes > 1: + if self._n_modes > 1 and self._n_shuffles > 1: LOGGER.debug('Calculating {0} modes for {1} shuffles.' .format(self._n_modes, self._n_shuffles)) + elif self._n_modes > 1 and self._n_shuffles == 1: + LOGGER.debug('Calculating {0} modes for 1 shuffle.' + .format(self._n_modes)) else: - LOGGER.debug('Calculating {0} mode for {1} shuffles.' - .format(self._n_modes, self._n_shuffles)) - + LOGGER.debug('Calculating 1 mode for 1 shuffle.') + self._shuffled_lras = [LRA('shuffle '+str(n)) for n in range(self._n_shuffles)] self._coordsets_reshaped = self._coordsets.reshape(self._coordsets.shape[0], self._n_atoms, -1) From 28e8c7796bfc24dfad78a022cb96815756e18dea Mon Sep 17 00:00:00 2001 From: James Krieger Date: Wed, 18 Feb 2026 15:41:04 +0000 Subject: [PATCH 03/15] add LRA app --- docs/apps/prody/lra.rst | 104 +++++++++ docs/reference/apps/prody_lra.rst | 6 + prody/apps/prody_apps/__init__.py | 2 +- prody/apps/prody_apps/nmaoptions.py | 9 +- prody/apps/prody_apps/prody_lra.py | 342 ++++++++++++++++++++++++++++ 5 files changed, 458 insertions(+), 5 deletions(-) create mode 100644 docs/apps/prody/lra.rst create mode 100644 docs/reference/apps/prody_lra.rst create mode 100644 prody/apps/prody_apps/prody_lra.py diff --git a/docs/apps/prody/lra.rst b/docs/apps/prody/lra.rst new file mode 100644 index 000000000..9b1b8f970 --- /dev/null +++ b/docs/apps/prody/lra.rst @@ -0,0 +1,104 @@ +.. _prody-lra: + +prody lra +==================== + +Usage +-------------------- + +Running :command:`prody lra -h` displays:: + + usage: prody lra [-h] [--quiet] [--examples] [-n INT] [-s SEL] [-a] [-o PATH] + [-e] [-r] [-u] [-q] [-v] [-z] [-t STR] [-j] [-p STR] [-f STR] + [-d STR] [-x STR] [-A] [-R] [-Q] [-J STR] [-F STR] [-D INT] + [-W FLOAT] [-H FLOAT] [--psf PSF | --pdb PDB] [--aligned] + dcd + + positional arguments: + dcd file in DCD or PDB format + + optional arguments: + -h, --help show this help message and exit + --quiet suppress info messages to stderr + --examples show usage examples and exit + --psf PSF PSF filename + --pdb PDB PDB filename + --aligned trajectory is already aligned + + parameters: + -n INT, --number-of-modes INT + number of non-zero eigenvectors (modes) to calculate + (default: 1, note difference here) + -s SEL, --select SEL atom selection (default: "protein and name CA or + nucleic and name P C4' C2") + + output: + -a, --all-output write all outputs + -o PATH, --output-dir PATH + output directory (default: .) + -e, --eigenvs write eigenvalues/vectors + -r, --cross-correlations + write cross-correlations + -u, --heatmap write cross-correlations heatmap file + -q, --square-fluctuations + write square-fluctuations + -v, --covariance write covariance matrix + -z, --npz write compressed ProDy data file + -t STR, --extend STR write NMD file for the model extended to "backbone" + ("bb") or "all" atoms of the residue, model must have + one node per residue + -j, --projection write projections onto LR modes + + -i, -- + + output options: + -p STR, --file-prefix STR + output file prefix (default: pdb_lra) + -f STR, --number-format STR + number output format (default: %12g) + -d STR, --delimiter STR + number delimiter (default: " ") + -x STR, --extension STR + numeric file extension (default: .txt) + + figures: + -A, --all-figures save all figures + -R, --cross-correlations-figure + save cross-correlations figure + -Q, --square-fluctuations-figure + save square-fluctuations figure + -J STR, --projection-figure STR + save projections onto specified subspaces, e.g. "1,2" + for projections onto PCs 1 and 2; "1,2 1,3" for + projections onto PCs 1,2 and 1, 3; "1 1,2,3" for + projections onto PCs 1 and 1, 2, 3 + + figure options: + -F STR, --figure-format STR + pdf (default: pdf) + -D INT, --dpi INT figure resolution (dpi) (default: 300) + -W FLOAT, --width FLOAT + figure width (inch) (default: 8.0) + -H FLOAT, --height FLOAT + figure height (inch) (default: 6.0) + +Examples +-------------------- + +Running :command:`prody lra --examples` displays:: + + This command performs logistic regression analysis (LRA) calculations for + given multi-model PDB structure or DCD format trajectory file and outputs + results in NMD format. If a PDB identifier is given, structure file will be + downloaded from the PDB FTP server. DCD files may be accompanied with + PDB or PSF files to enable atoms selections. + + Fetch pdb 2k39, perform LRA calculations, and output NMD file: + + $ prody lra 2k39 + + Fetch pdb 2k39 and perform calculations for backbone of residues up to + 71, and save all output and figure files: + + $ prody lra 2k39 --select "backbone and resnum < 71" -a -A + diff --git a/docs/reference/apps/prody_lra.rst b/docs/reference/apps/prody_lra.rst new file mode 100644 index 000000000..1336d96a3 --- /dev/null +++ b/docs/reference/apps/prody_lra.rst @@ -0,0 +1,6 @@ +LRA Application +=============== + +.. automodule:: prody.apps.prody_apps.prody_lra + :members: + :undoc-members: diff --git a/prody/apps/prody_apps/__init__.py b/prody/apps/prody_apps/__init__.py index cbdeb8129..da53d3481 100644 --- a/prody/apps/prody_apps/__init__.py +++ b/prody/apps/prody_apps/__init__.py @@ -27,7 +27,7 @@ PRODY_APPS = ['anm', 'gnm', 'pca', 'eda', 'align', 'blast', 'biomol', 'catdcd', 'contacts', 'fetch', 'select', 'energy', - 'clustenm', 'rtb'] + 'clustenm', 'rtb', 'lra'] __all__ = ['prody_main'] diff --git a/prody/apps/prody_apps/nmaoptions.py b/prody/apps/prody_apps/nmaoptions.py index da3851a07..3d1055220 100644 --- a/prody/apps/prody_apps/nmaoptions.py +++ b/prody/apps/prody_apps/nmaoptions.py @@ -49,13 +49,14 @@ 'addNMAFigures', 'addNMAFigureOptions'] -def addNMAParameters(parser, include_nproc=True): +def addNMAParameters(parser, include_nproc=True, include_nmodes=True): parser = parser.add_argument_group('parameters') - parser.add_argument('-n', '--number-of-modes', dest='nmodes', type=int, - default=DEFAULTS['nmodes'], metavar='INT', - help=HELPTEXT['nmodes'] + ' (default: %(default)s)') + if include_nmodes: + parser.add_argument('-n', '--number-of-modes', dest='nmodes', type=int, + default=DEFAULTS['nmodes'], metavar='INT', + help=HELPTEXT['nmodes'] + ' (default: %(default)s)') parser.add_argument('-s', '--select', dest='select', type=str, default=DEFAULTS['select'], metavar='STR', diff --git a/prody/apps/prody_apps/prody_lra.py b/prody/apps/prody_apps/prody_lra.py new file mode 100644 index 000000000..a85885fb4 --- /dev/null +++ b/prody/apps/prody_apps/prody_lra.py @@ -0,0 +1,342 @@ +"""Perform logistic regression analysis (LRA) calculations and output the results in plain text, NMD, and +graphical formats.""" + +from ..apptools import * +from .nmaoptions import * +from . import nmaoptions +from numbers import Integral + +DEFAULTS = {} +HELPTEXT = {} +for key, txt, val in [ + ('aligned', 'trajectory is already aligned', False), + ('altloc', 'alternative location identifiers for residues used in the calculations', "A"), + ('outproj', 'write projections onto LR component', False), + ('figproj', 'save projections onto specified subspaces, e.g. ' + '"1,2" for projections onto LRCs 1 and 2; ' + '"1,2 1,3" for projections onto LRCs 1,2 and 1,3; ' + '"1 1,2,3" for projections onto LRCs 1 and 1, 2, 3', ''), + ('nShuffles', 'number of random shuffles to make', 10), + ('labels', 'labels for classes to separate. If None, get them from k-medoids clustering using nmodes+1', None), + ('nmodes', 'number of modes of separation to calculate if labels is None', 1)]: + + DEFAULTS[key] = val + HELPTEXT[key] = txt + +DEFAULTS.update(nmaoptions.DEFAULTS) +HELPTEXT.update(nmaoptions.HELPTEXT) + +# override nmodes to 1 +key, txt, val = ('nmodes', 'number of modes of separation to calculate if labels is None', 1) +DEFAULTS[key] = val +HELPTEXT[key] = txt + +DEFAULTS['prefix'] = '_lra' + +__all__ = ['prody_lra'] + +def prody_lra(coords, **kwargs): + """Perform LRA calculations for PDB or DCD format *coords* file. + """ + + for key in DEFAULTS: + if not key in kwargs: + kwargs[key] = DEFAULTS[key] + + from os.path import isdir, splitext, join + outdir = kwargs.get('outdir') + if not isdir(outdir): + raise IOError('{0} is not a valid path'.format(repr(outdir))) + + import prody + LOGGER = prody.LOGGER + + prefix = kwargs.get('prefix') + nmodes = kwargs.get('nmodes') + selstr = kwargs.get('select') + altloc = kwargs.get('altloc') + + nproc = kwargs.get('nproc') + nShuffles = kwargs.get('nShuffles') + labels = kwargs.get('labels') + + ext = splitext(coords)[1].lower() + if ext == '.gz': + ext = splitext(coords[:-3])[1].lower() + + if ext == '.dcd': + pdb = kwargs.get('psf') or kwargs.get('pdb') + if pdb: + if splitext(pdb)[1].lower() == '.psf': + pdb = prody.parsePSF(pdb) + else: + pdb = prody.parsePDB(pdb, altloc=altloc) + dcd = prody.DCDFile(coords) + if prefix == '_lra': + prefix = dcd.getTitle() + prefix + + if len(dcd) < 2: + raise ValueError('DCD file must have multiple frames') + if pdb: + if pdb.numAtoms() == dcd.numAtoms(): + select = pdb.select(selstr) + dcd.setAtoms(select) + LOGGER.info('{0} atoms are selected for calculations.' + .format(len(select))) + else: + select = pdb.select(selstr) + if select.numAtoms() != dcd.numAtoms(): + raise ValueError('number of selected atoms ({0}) does ' + 'not match number of atoms in the DCD ' + 'file ({1})'.format(select.numAtoms(), + dcd.numAtoms())) + if pdb.numCoordsets(): + dcd.setCoords(select.getCoords()) + else: + select = prody.AtomGroup() + select.setCoords(dcd.getCoords()) + + lra = prody.LRA(dcd.getTitle()) + ensemble = dcd + else: + pdb = prody.parsePDB(coords) + if pdb.numCoordsets() < 2: + raise ValueError('PDB file must contain multiple models') + + if prefix == '_lra': + prefix = pdb.getTitle() + prefix + + select = pdb.select(selstr) + LOGGER.info('{0} atoms are selected for calculations.' + .format(len(select))) + if select is None: + raise ValueError('selection {0} do not match any atoms' + .format(repr(selstr))) + LOGGER.info('{0} atoms will be used for LRA calculations.' + .format(len(select))) + ensemble = prody.Ensemble(select) + lra = prody.LRA(pdb.getTitle()) + if not kwargs.get('aligned'): + ensemble.iterpose() + + if labels is None: + _, labels, _ = prody.calcKmedoidClusters(ensemble.getCoordsets(), nmodes+1) + + nproc = kwargs.get('nproc') + if nproc: + try: + from threadpoolctl import threadpool_limits + except ImportError: + raise ImportError('Please install threadpoolctl to control threads') + + with threadpool_limits(limits=nproc, user_api="blas"): + lra.calcModes(ensemble, labels, n_shuffles=nShuffles) + else: + lra.calcModes(ensemble, labels, n_shuffles=nShuffles) + + LOGGER.info('Writing numerical output.') + if kwargs.get('outnpz'): + prody.saveModel(lra, join(outdir, prefix), + matrices=kwargs.get('npzmatrices')) + + if kwargs.get('outscipion'): + prody.writeScipionModes(outdir, lra) + + prody.writeNMD(join(outdir, prefix + '.nmd'), lra[:nmodes], select) + + extend = kwargs.get('extend') + if extend: + if pdb: + if extend == 'all': + extended = prody.extendModel(lra[:nmodes], select, pdb) + else: + extended = prody.extendModel(lra[:nmodes], select, + select | pdb.bb) + prody.writeNMD(join(outdir, prefix + '_extended_' + + extend + '.nmd'), *extended) + else: + prody.LOGGER.warn('Model could not be extended, provide a PDB or ' + 'PSF file.') + outall = kwargs.get('outall') + delim = kwargs.get('numdelim') + ext = kwargs.get('numext') + format = kwargs.get('numformat') + + if outall or kwargs.get('outeig'): + prody.writeArray(join(outdir, prefix + '_evectors'+ext), + lra.getArray(), delimiter=delim, format=format) + prody.writeArray(join(outdir, prefix + '_evalues'+ext), + lra.getEigvals(), delimiter=delim, format=format) + if outall or kwargs.get('outcov'): + prody.writeArray(join(outdir, prefix + '_covariance'+ext), + lra.getCovariance(), delimiter=delim, format=format) + if outall or kwargs.get('outcc') or kwargs.get('outhm'): + cc = prody.calcCrossCorr(lra) + if outall or kwargs.get('outcc'): + prody.writeArray(join(outdir, prefix + '_cross-correlations' + + ext), cc, delimiter=delim, format=format) + if outall or kwargs.get('outhm'): + resnums = select.getResnums() + hmargs = {} if resnums is None else {'resnums': resnums} + prody.writeHeatmap(join(outdir, prefix + '_cross-correlations.hm'), + cc, xlabel='Residue', ylabel='Residue', + title=lra.getTitle() + ' cross-correlations', + **hmargs) + + if outall or kwargs.get('outsf'): + prody.writeArray(join(outdir, prefix + '_sqfluct'+ext), + prody.calcSqFlucts(lra), delimiter=delim, + format=format) + if outall or kwargs.get('outproj'): + prody.writeArray(join(outdir, prefix + '_proj'+ext), + prody.calcProjection(ensemble, lra), delimiter=delim, + format=format) + + figall = kwargs.get('figall') + cc = kwargs.get('figcc') + sf = kwargs.get('figsf') + sp = kwargs.get('figproj') + + if figall or cc or sf or sp: + try: + import matplotlib.pyplot as plt + except ImportError: + LOGGER.warning('Matplotlib could not be imported. ' + 'Figures are not saved.') + else: + prody.SETTINGS['auto_show'] = False + LOGGER.info('Saving graphical output.') + format = kwargs.get('figformat') + width = kwargs.get('figwidth') + height = kwargs.get('figheight') + dpi = kwargs.get('figdpi') + + format = format.lower() + if figall or cc: + plt.figure(figsize=(width, height)) + prody.showCrossCorr(lra, interactive=False) + plt.savefig(join(outdir, prefix + '_cc.'+format), + dpi=dpi, format=format) + plt.close('all') + if figall or sf: + plt.figure(figsize=(width, height)) + prody.showSqFlucts(lra) + plt.savefig(join(outdir, prefix + '_sf.'+format), + dpi=dpi, format=format) + plt.close('all') + if figall or sp: + indices = [] + for item in sp.split(): + try: + if '-' in item: + item = item.split('-') + if len(item) == 2: + indices.append(list(range(int(item[0])-1, + int(item[1])))) + elif ',' in item: + indices.append([int(i)-1 for i in item.split(',')]) + else: + indices.append(int(item)-1) + except: + pass + for index in indices: + plt.figure(figsize=(width, height)) + prody.showProjection(ensemble, lra[index]) + if isinstance(index, Integral): + index = [index] + index = [str(i+1) for i in index] + plt.savefig(join(outdir, prefix + '_proj_' + + '_'.join(index) + '.' + format), + dpi=dpi, format=format) + plt.close('all') + + +_ = list(HELPTEXT) +_.sort() +for key in _: + + prody_lra.__doc__ += """ + :arg {0}: {1}, default is ``{2!r}``""".format(key, HELPTEXT[key], + DEFAULTS[key]) + + +def addCommand(commands): + + subparser = commands.add_parser('lra', + help='perform principal component analysis calculations') + + subparser.add_argument('--quiet', help='suppress info messages to stderr', + action=Quiet, nargs=0) + + subparser.add_argument('--examples', action=UsageExample, nargs=0, + help='show usage examples and exit') + + subparser.set_defaults(usage_example= + """This command performs logistic regression analysis (LRA) calculations \ +for given multi-model PDB structure or DCD format trajectory file and outputs \ +results in NMD format. If a PDB identifier is given, structure file will be \ +downloaded from the PDB FTP server. DCD files may be accompanied with \ +PDB or PSF files to enable atoms selections. + +Fetch pdb 2k39, perform LRA calculations, and output NMD file: + + $ prody lra 2k39 + +Fetch pdb 2k39 and perform calculations for backbone of residues up to 71, \ +and save all output and figure files: + + $ prody lra 2k39 --select "backbone and resnum < 71" -a -A + +Extra arguments are as follows: + +-i or --shuffles sets the number of shuffles for identifying key residues +-l or --labels sets labels for classes to separate and overrides the number of modes + +If labels are not set, then they are calculated by k-medoids clustering with k = nmodes + 1. +The default value of nmodes is 1 for separating 2 clusters. +""", + test_examples=[0, 1]) + + group = addNMAParameters(subparser, include_nmodes=False) + + group = addNMAOutput(subparser) + + group.add_argument('-i', '--shuffles', dest='nShuffles', + type=int, + default=DEFAULTS['nShuffles'], help=HELPTEXT['nShuffles']) + + group.add_argument('-l', '--labels', dest='labels', + type=int, + default=DEFAULTS['labels'], help=HELPTEXT['labels']) + + group.add_argument('-n', '--number-of-modes', dest='nmodes', type=int, + default=DEFAULTS['nmodes'], metavar='INT', + help=HELPTEXT['nmodes'] + ' (default: %(default)s)') + + group.add_argument('-j', '--projection', dest='outproj', + action='store_true', + default=DEFAULTS['outproj'], help=HELPTEXT['outproj']) + + group = addNMAOutputOptions(subparser, '_lra') + + group = addNMAFigures(subparser) + + group.add_argument('-J', '--projection-figure', dest='figproj', type=str, + default=DEFAULTS['figproj'], metavar='STR', + help=HELPTEXT['figproj']) + + group = addNMAFigureOptions(subparser) + + group = subparser.add_mutually_exclusive_group() + group.add_argument('--psf', help='PSF filename') + group.add_argument('--pdb', help='PDB filename') + group.add_argument('-L', '--altloc', dest='altloc', type=str, + metavar='INT', default=DEFAULTS['altloc'], help=HELPTEXT['altloc']) + + subparser.add_argument('--aligned', dest='aligned', action='store_true', + default=DEFAULTS['aligned'], help=HELPTEXT['aligned']) + + subparser.add_argument('dcd', help='file in DCD or PDB format') + + subparser.set_defaults(func=lambda ns: prody_lra(ns.dcd, **ns.__dict__)) + subparser.set_defaults(subparser=subparser) From c9eef9a478030cd67273d465ded84a5bdaf69077 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Wed, 18 Feb 2026 15:52:52 +0000 Subject: [PATCH 04/15] save lra labels --- prody/dynamics/functions.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/prody/dynamics/functions.py b/prody/dynamics/functions.py index 1756ad3d5..6935f19aa 100644 --- a/prody/dynamics/functions.py +++ b/prody/dynamics/functions.py @@ -80,7 +80,8 @@ def saveModel(nma, filename=None, matrices=False, **kwargs): type_ = 'GNM' elif isinstance(nma, LRA): type_ = 'LRA' - attr_list.extend(['_shuffled_lras', + attr_list.extend(['_labels', + '_shuffled_lras', '_n_shuffles', '_coordsets_reshaped', '_projection', '_lra', From 4e547a38f2d5b423965cdc327460a4130f1df678 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Thu, 19 Feb 2026 16:19:11 +0000 Subject: [PATCH 05/15] handle labels better --- prody/apps/prody_apps/prody_lra.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prody/apps/prody_apps/prody_lra.py b/prody/apps/prody_apps/prody_lra.py index a85885fb4..ef28c5b63 100644 --- a/prody/apps/prody_apps/prody_lra.py +++ b/prody/apps/prody_apps/prody_lra.py @@ -58,7 +58,7 @@ def prody_lra(coords, **kwargs): nproc = kwargs.get('nproc') nShuffles = kwargs.get('nShuffles') - labels = kwargs.get('labels') + labels = eval(kwargs.get('labels')) ext = splitext(coords)[1].lower() if ext == '.gz': @@ -306,7 +306,7 @@ def addCommand(commands): default=DEFAULTS['nShuffles'], help=HELPTEXT['nShuffles']) group.add_argument('-l', '--labels', dest='labels', - type=int, + type=str, default=DEFAULTS['labels'], help=HELPTEXT['labels']) group.add_argument('-n', '--number-of-modes', dest='nmodes', type=int, From d91456d4006fc3ac0e1abe59ca8967c869774e99 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Thu, 19 Feb 2026 16:28:09 +0000 Subject: [PATCH 06/15] actually support labels and dcdfile --- prody/apps/prody_apps/prody_lra.py | 20 ++++++++++---------- prody/dynamics/logistic.py | 7 ++++--- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/prody/apps/prody_apps/prody_lra.py b/prody/apps/prody_apps/prody_lra.py index ef28c5b63..a2d5f59e5 100644 --- a/prody/apps/prody_apps/prody_lra.py +++ b/prody/apps/prody_apps/prody_lra.py @@ -17,7 +17,7 @@ '"1,2 1,3" for projections onto LRCs 1,2 and 1,3; ' '"1 1,2,3" for projections onto LRCs 1 and 1, 2, 3', ''), ('nShuffles', 'number of random shuffles to make', 10), - ('labels', 'labels for classes to separate. If None, get them from k-medoids clustering using nmodes+1', None), + ('labels', 'labels for classes to separate. If None, get them from k-medoids clustering using nmodes+1', 'None'), ('nmodes', 'number of modes of separation to calculate if labels is None', 1)]: DEFAULTS[key] = val @@ -122,17 +122,17 @@ def prody_lra(coords, **kwargs): if labels is None: _, labels, _ = prody.calcKmedoidClusters(ensemble.getCoordsets(), nmodes+1) - nproc = kwargs.get('nproc') - if nproc: - try: - from threadpoolctl import threadpool_limits - except ImportError: - raise ImportError('Please install threadpoolctl to control threads') + nproc = kwargs.get('nproc') + if nproc: + try: + from threadpoolctl import threadpool_limits + except ImportError: + raise ImportError('Please install threadpoolctl to control threads') - with threadpool_limits(limits=nproc, user_api="blas"): - lra.calcModes(ensemble, labels, n_shuffles=nShuffles) - else: + with threadpool_limits(limits=nproc, user_api="blas"): lra.calcModes(ensemble, labels, n_shuffles=nShuffles) + else: + lra.calcModes(ensemble, labels, n_shuffles=nShuffles) LOGGER.info('Writing numerical output.') if kwargs.get('outnpz'): diff --git a/prody/dynamics/logistic.py b/prody/dynamics/logistic.py index c8b1683e1..6ad3f22b9 100644 --- a/prody/dynamics/logistic.py +++ b/prody/dynamics/logistic.py @@ -8,6 +8,7 @@ from prody import LOGGER from prody.atomic import Atomic from prody.ensemble import Ensemble +from prody.trajectory import DCDFile from prody.utilities import isListLike from .nma import NMA @@ -61,10 +62,10 @@ def calcModes(self, coordsets, labels, lasso=True, **kwargs): coordsets.dtype not in (np.float32, float)): raise ValueError('coordsets is not a valid coordinate array') self._coordsets = coordsets - elif isinstance(coordsets, Atomic): - self._coordsets = coordsets._getCoordsets() - elif isinstance(coordsets, Ensemble): + elif isinstance(coordsets, (Atomic, Ensemble)): self._coordsets = coordsets._getCoordsets() + elif isinstance(coordsets, DCDFile): + self._coordsets = coordsets.getCoordsets() else: raise TypeError('coordsets should be Atomic, Ensemble or numpy.ndarray, not {0}' .format(type(coordsets))) From dfabcc74898d76d3bc7413aee22381e37983b95c Mon Sep 17 00:00:00 2001 From: James Krieger Date: Thu, 19 Feb 2026 16:40:01 +0000 Subject: [PATCH 07/15] add lra test --- prody/tests/apps/test_prody_lra.py | 93 ++ prody/tests/datafiles/__init__.py | 10 +- prody/tests/datafiles/pdb2k39_all_model0.pdb | 1234 ++++++++++++++++++ 3 files changed, 1335 insertions(+), 2 deletions(-) create mode 100644 prody/tests/apps/test_prody_lra.py create mode 100644 prody/tests/datafiles/pdb2k39_all_model0.pdb diff --git a/prody/tests/apps/test_prody_lra.py b/prody/tests/apps/test_prody_lra.py new file mode 100644 index 000000000..ba19dd41f --- /dev/null +++ b/prody/tests/apps/test_prody_lra.py @@ -0,0 +1,93 @@ +from os import remove +import shlex +from os.path import isfile, join, split, splitext +from prody.tests import TestCase, skipIf, skipUnless + +from numpy.testing import * + +from prody.utilities import importDec +dec = importDec() + +from prody.tests.datafiles import TEMPDIR, pathDatafile + +from prody.apps import prody_parser + +from prody.tests import MATPLOTLIB, NOPRODYCMD, WINDOWS + +# NEW: Import ProDy functions to generate valid test data +from prody import parsePDB, writePDB, writeDCD + +class TestLRACommand(TestCase): + + def setUp(self): + # We define the base command. Note that {pdb} is the REFERENCE structure. + self.command = ('lra --pdb {pdb} ' + '-e -r -o {outdir} -v -z -t all -j ' + '-f %8g -d , -x .dat ' + '-R -Q -J 1 -S ' + '-F png -D 120 -W 5 -H 4 ').format(outdir=TEMPDIR, + pdb=pathDatafile('2k39_pdb_model0')) + self.suffixes = [ + '_lra_cc.png', + '_lra.lra.npz', + '_lra_covariance.dat', + '_lra_cross-correlations.dat', + '_lra_proj_1.png', + '_lra_evalues.dat', + '_lra_proj.dat', + '_lra_evectors.dat', + '_lra_sf.png', + '_lra_extended_all.nmd', + '_lra.nmd', + ] + + self.tearDown() + + # NOTE: I have kept the skip decorators commented out so you can verify the fix works. + # In a real PR, you might want to uncomment them. + # @dec.slow + # @skipIf(NOPRODYCMD, 'prody command not found') + # @skipUnless(MATPLOTLIB, 'matplotlib not found') + # @skipIf(WINDOWS, 'command tests are not run on Windows') + def testLRACommandDCD(self): + dcd = pathDatafile('2k39_insty_dcd') + command = self.command + dcd + prefix = splitext(split(dcd)[1])[0] + + namespace = prody_parser.parse_args(shlex.split(command)) + namespace.func(namespace) + + for suffix in self.suffixes: + fn = join(TEMPDIR, prefix + suffix) + self.assertTrue(isfile(fn), msg=fn+' not found') + + # @dec.slow + # @skipIf(NOPRODYCMD, 'prody command not found') + # @skipUnless(MATPLOTLIB, 'matplotlib not found') + # @skipIf(WINDOWS, 'command tests are not run on Windows') + def testLRACommandLabels(self): + dcd = pathDatafile('2k39_insty_dcd') + command = self.command + dcd + ' -l "[1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0]"' + prefix = splitext(split(dcd)[1])[0] + + namespace = prody_parser.parse_args(shlex.split(command)) + namespace.func(namespace) + + for suffix in self.suffixes: + fn = join(TEMPDIR, prefix + suffix) + self.assertTrue(isfile(fn), msg=fn+' not found') + + + def tearDown(self): + # Clean up the generated temp files as well as outputs + files_to_clean = ['2k39_insty_dcd'] + + for fname in files_to_clean: + # Handle full paths vs datafiles + base_path = pathDatafile(fname) + prefix = splitext(split(base_path)[1])[0] + + for suffix in self.suffixes: + fn = join(TEMPDIR, prefix + suffix) + if isfile(fn): + remove(fn) diff --git a/prody/tests/datafiles/__init__.py b/prody/tests/datafiles/__init__.py index d3996586f..373d3ced8 100644 --- a/prody/tests/datafiles/__init__.py +++ b/prody/tests/datafiles/__init__.py @@ -85,7 +85,13 @@ 'file': '2k39.mmtf', 'n_atoms': 1231, 'models': 116 - }, + }, + '2k39_pdb_model0': { + 'pdb': '2K39', + 'file': 'pdb2k39_all_model0.pdb', + 'n_atoms': 1231, + 'models': 116 + }, '3enl_pdb': { 'pdb': '3enl', 'file': 'pdb3enl.pdb', @@ -371,7 +377,7 @@ }, '2k39_insty_first': { 'file': '2k39_insty_first.pdb' - }, + }, '2k39_insty_dcd': { 'file': '2k39_insty.dcd' }, diff --git a/prody/tests/datafiles/pdb2k39_all_model0.pdb b/prody/tests/datafiles/pdb2k39_all_model0.pdb new file mode 100644 index 000000000..be9dc4c0c --- /dev/null +++ b/prody/tests/datafiles/pdb2k39_all_model0.pdb @@ -0,0 +1,1234 @@ +REMARK AtomGroup pdb2k39_all_model1 +ATOM 1 N MET A 1 13.434 30.709 16.715 1.00 0.00 N +ATOM 2 CA MET A 1 13.659 30.300 18.110 1.00 0.00 C +ATOM 3 C MET A 1 14.899 31.030 18.626 1.00 0.00 C +ATOM 4 O MET A 1 15.953 30.604 18.157 1.00 0.00 O +ATOM 5 CB MET A 1 13.679 28.767 18.194 1.00 0.00 C +ATOM 6 CG MET A 1 13.568 28.117 19.570 1.00 0.00 C +ATOM 7 SD MET A 1 13.587 26.307 19.538 1.00 0.00 S +ATOM 8 CE MET A 1 15.369 25.978 19.566 1.00 0.00 C +ATOM 9 H1 MET A 1 14.305 30.658 16.209 1.00 0.00 H +ATOM 10 H2 MET A 1 12.735 30.140 16.262 1.00 0.00 H +ATOM 11 H3 MET A 1 13.219 31.695 16.682 1.00 0.00 H +ATOM 12 HA MET A 1 12.695 30.569 18.600 1.00 0.00 H +ATOM 13 HB2 MET A 1 12.872 28.254 17.671 1.00 0.00 H +ATOM 14 HB3 MET A 1 14.585 28.402 17.707 1.00 0.00 H +ATOM 15 HG2 MET A 1 14.414 28.445 20.178 1.00 0.00 H +ATOM 16 HG3 MET A 1 12.648 28.449 20.049 1.00 0.00 H +ATOM 17 HE1 MET A 1 15.846 26.661 18.869 1.00 0.00 H +ATOM 18 HE2 MET A 1 15.828 26.123 20.545 1.00 0.00 H +ATOM 19 HE3 MET A 1 15.605 24.958 19.289 1.00 0.00 H +ATOM 20 N GLN A 2 14.825 31.962 19.581 1.00 0.00 N +ATOM 21 CA GLN A 2 15.958 32.639 20.166 1.00 0.00 C +ATOM 22 C GLN A 2 16.592 31.548 21.022 1.00 0.00 C +ATOM 23 O GLN A 2 15.852 31.036 21.862 1.00 0.00 O +ATOM 24 CB GLN A 2 15.434 33.873 20.896 1.00 0.00 C +ATOM 25 CG GLN A 2 16.523 34.577 21.702 1.00 0.00 C +ATOM 26 CD GLN A 2 16.244 36.016 22.112 1.00 0.00 C +ATOM 27 OE1 GLN A 2 15.105 36.419 22.324 1.00 0.00 O +ATOM 28 NE2 GLN A 2 17.278 36.839 22.274 1.00 0.00 N +ATOM 29 H GLN A 2 13.906 32.047 20.060 1.00 0.00 H +ATOM 30 HA GLN A 2 16.719 33.001 19.417 1.00 0.00 H +ATOM 31 HB2 GLN A 2 15.051 34.501 20.084 1.00 0.00 H +ATOM 32 HB3 GLN A 2 14.558 33.684 21.507 1.00 0.00 H +ATOM 33 HG2 GLN A 2 16.758 33.978 22.587 1.00 0.00 H +ATOM 34 HG3 GLN A 2 17.387 34.634 21.036 1.00 0.00 H +ATOM 35 HE21 GLN A 2 18.247 36.469 22.257 1.00 0.00 H +ATOM 36 HE22 GLN A 2 17.043 37.847 22.186 1.00 0.00 H +ATOM 37 N ILE A 3 17.919 31.368 20.975 1.00 0.00 N +ATOM 38 CA ILE A 3 18.793 30.563 21.808 1.00 0.00 C +ATOM 39 C ILE A 3 19.967 31.469 22.174 1.00 0.00 C +ATOM 40 O ILE A 3 20.312 32.438 21.505 1.00 0.00 O +ATOM 41 CB ILE A 3 19.207 29.218 21.198 1.00 0.00 C +ATOM 42 CG1 ILE A 3 20.170 29.106 20.019 1.00 0.00 C +ATOM 43 CG2 ILE A 3 18.012 28.267 21.107 1.00 0.00 C +ATOM 44 CD1 ILE A 3 20.893 27.762 19.884 1.00 0.00 C +ATOM 45 H ILE A 3 18.408 32.017 20.326 1.00 0.00 H +ATOM 46 HA ILE A 3 18.237 30.300 22.743 1.00 0.00 H +ATOM 47 HB ILE A 3 19.869 28.834 21.973 1.00 0.00 H +ATOM 48 HG12 ILE A 3 19.629 29.438 19.125 1.00 0.00 H +ATOM 49 HG13 ILE A 3 20.988 29.815 20.102 1.00 0.00 H +ATOM 50 HG21 ILE A 3 17.242 28.770 20.523 1.00 0.00 H +ATOM 51 HG22 ILE A 3 18.260 27.376 20.521 1.00 0.00 H +ATOM 52 HG23 ILE A 3 17.663 27.964 22.096 1.00 0.00 H +ATOM 53 HD11 ILE A 3 20.242 26.900 19.759 1.00 0.00 H +ATOM 54 HD12 ILE A 3 21.467 27.851 18.968 1.00 0.00 H +ATOM 55 HD13 ILE A 3 21.566 27.652 20.730 1.00 0.00 H +ATOM 56 N PHE A 4 20.616 31.098 23.275 1.00 0.00 N +ATOM 57 CA PHE A 4 21.758 31.719 23.917 1.00 0.00 C +ATOM 58 C PHE A 4 22.886 30.687 23.963 1.00 0.00 C +ATOM 59 O PHE A 4 22.610 29.489 24.030 1.00 0.00 O +ATOM 60 CB PHE A 4 21.371 32.243 25.296 1.00 0.00 C +ATOM 61 CG PHE A 4 20.515 33.492 25.360 1.00 0.00 C +ATOM 62 CD1 PHE A 4 19.146 33.556 25.060 1.00 0.00 C +ATOM 63 CD2 PHE A 4 21.201 34.678 25.614 1.00 0.00 C +ATOM 64 CE1 PHE A 4 18.478 34.790 25.093 1.00 0.00 C +ATOM 65 CE2 PHE A 4 20.547 35.898 25.808 1.00 0.00 C +ATOM 66 CZ PHE A 4 19.169 35.928 25.520 1.00 0.00 C +ATOM 67 H PHE A 4 20.273 30.192 23.654 1.00 0.00 H +ATOM 68 HA PHE A 4 22.013 32.566 23.228 1.00 0.00 H +ATOM 69 HB2 PHE A 4 20.825 31.495 25.873 1.00 0.00 H +ATOM 70 HB3 PHE A 4 22.314 32.461 25.800 1.00 0.00 H +ATOM 71 HD1 PHE A 4 18.693 32.637 24.742 1.00 0.00 H +ATOM 72 HD2 PHE A 4 22.258 34.673 25.848 1.00 0.00 H +ATOM 73 HE1 PHE A 4 17.419 34.801 24.901 1.00 0.00 H +ATOM 74 HE2 PHE A 4 21.019 36.839 26.060 1.00 0.00 H +ATOM 75 HZ PHE A 4 18.585 36.795 25.783 1.00 0.00 H +ATOM 76 N VAL A 5 24.117 31.184 23.941 1.00 0.00 N +ATOM 77 CA VAL A 5 25.321 30.442 24.237 1.00 0.00 C +ATOM 78 C VAL A 5 26.124 31.308 25.214 1.00 0.00 C +ATOM 79 O VAL A 5 26.193 32.522 25.028 1.00 0.00 O +ATOM 80 CB VAL A 5 26.095 30.068 22.975 1.00 0.00 C +ATOM 81 CG1 VAL A 5 27.168 29.049 23.348 1.00 0.00 C +ATOM 82 CG2 VAL A 5 25.269 29.306 21.937 1.00 0.00 C +ATOM 83 H VAL A 5 24.148 32.218 23.997 1.00 0.00 H +ATOM 84 HA VAL A 5 25.046 29.529 24.826 1.00 0.00 H +ATOM 85 HB VAL A 5 26.483 30.948 22.458 1.00 0.00 H +ATOM 86 HG11 VAL A 5 27.732 29.121 24.285 1.00 0.00 H +ATOM 87 HG12 VAL A 5 26.755 28.049 23.494 1.00 0.00 H +ATOM 88 HG13 VAL A 5 27.887 28.976 22.531 1.00 0.00 H +ATOM 89 HG21 VAL A 5 24.727 28.505 22.439 1.00 0.00 H +ATOM 90 HG22 VAL A 5 24.439 29.871 21.508 1.00 0.00 H +ATOM 91 HG23 VAL A 5 25.805 28.882 21.093 1.00 0.00 H +ATOM 92 N LYS A 6 26.630 30.634 26.238 1.00 0.00 N +ATOM 93 CA LYS A 6 27.541 31.152 27.232 1.00 0.00 C +ATOM 94 C LYS A 6 28.967 30.657 26.967 1.00 0.00 C +ATOM 95 O LYS A 6 29.223 29.465 26.990 1.00 0.00 O +ATOM 96 CB LYS A 6 27.046 30.701 28.609 1.00 0.00 C +ATOM 97 CG LYS A 6 27.851 31.128 29.836 1.00 0.00 C +ATOM 98 CD LYS A 6 27.240 30.877 31.212 1.00 0.00 C +ATOM 99 CE LYS A 6 28.142 31.218 32.398 1.00 0.00 C +ATOM 100 NZ LYS A 6 27.608 30.857 33.717 1.00 0.00 N +ATOM 101 H LYS A 6 26.203 29.692 26.390 1.00 0.00 H +ATOM 102 HA LYS A 6 27.527 32.268 27.201 1.00 0.00 H +ATOM 103 HB2 LYS A 6 26.020 31.006 28.826 1.00 0.00 H +ATOM 104 HB3 LYS A 6 26.960 29.618 28.700 1.00 0.00 H +ATOM 105 HG2 LYS A 6 28.843 30.670 29.819 1.00 0.00 H +ATOM 106 HG3 LYS A 6 28.059 32.189 29.740 1.00 0.00 H +ATOM 107 HD2 LYS A 6 26.285 31.408 31.118 1.00 0.00 H +ATOM 108 HD3 LYS A 6 26.982 29.820 31.166 1.00 0.00 H +ATOM 109 HE2 LYS A 6 29.141 30.846 32.175 1.00 0.00 H +ATOM 110 HE3 LYS A 6 28.368 32.281 32.412 1.00 0.00 H +ATOM 111 HZ1 LYS A 6 26.611 30.678 33.687 1.00 0.00 H +ATOM 112 HZ2 LYS A 6 28.175 30.139 34.130 1.00 0.00 H +ATOM 113 HZ3 LYS A 6 27.635 31.642 34.346 1.00 0.00 H +ATOM 114 N THR A 7 29.862 31.633 26.759 1.00 0.00 N +ATOM 115 CA THR A 7 31.247 31.407 26.403 1.00 0.00 C +ATOM 116 C THR A 7 32.034 31.500 27.715 1.00 0.00 C +ATOM 117 O THR A 7 31.809 32.439 28.473 1.00 0.00 O +ATOM 118 CB THR A 7 31.779 32.490 25.469 1.00 0.00 C +ATOM 119 OG1 THR A 7 30.893 32.789 24.410 1.00 0.00 O +ATOM 120 CG2 THR A 7 33.151 32.225 24.866 1.00 0.00 C +ATOM 121 H THR A 7 29.595 32.639 26.711 1.00 0.00 H +ATOM 122 HA THR A 7 31.396 30.438 25.852 1.00 0.00 H +ATOM 123 HB THR A 7 31.691 33.431 26.023 1.00 0.00 H +ATOM 124 HG1 THR A 7 30.105 33.265 24.610 1.00 0.00 H +ATOM 125 HG21 THR A 7 33.811 32.040 25.713 1.00 0.00 H +ATOM 126 HG22 THR A 7 33.156 31.297 24.295 1.00 0.00 H +ATOM 127 HG23 THR A 7 33.438 33.117 24.304 1.00 0.00 H +ATOM 128 N LEU A 8 32.973 30.576 27.880 1.00 0.00 N +ATOM 129 CA LEU A 8 34.014 30.392 28.869 1.00 0.00 C +ATOM 130 C LEU A 8 34.448 31.718 29.480 1.00 0.00 C +ATOM 131 O LEU A 8 34.813 31.843 30.641 1.00 0.00 O +ATOM 132 CB LEU A 8 35.073 29.362 28.466 1.00 0.00 C +ATOM 133 CG LEU A 8 34.784 27.860 28.545 1.00 0.00 C +ATOM 134 CD1 LEU A 8 36.019 27.119 28.042 1.00 0.00 C +ATOM 135 CD2 LEU A 8 34.621 27.416 30.005 1.00 0.00 C +ATOM 136 H LEU A 8 32.992 29.857 27.126 1.00 0.00 H +ATOM 137 HA LEU A 8 33.339 30.131 29.722 1.00 0.00 H +ATOM 138 HB2 LEU A 8 35.187 29.371 27.385 1.00 0.00 H +ATOM 139 HB3 LEU A 8 35.949 29.669 29.045 1.00 0.00 H +ATOM 140 HG LEU A 8 33.998 27.445 27.915 1.00 0.00 H +ATOM 141 HD11 LEU A 8 36.901 27.452 28.589 1.00 0.00 H +ATOM 142 HD12 LEU A 8 35.802 26.047 28.130 1.00 0.00 H +ATOM 143 HD13 LEU A 8 36.199 27.367 27.005 1.00 0.00 H +ATOM 144 HD21 LEU A 8 35.427 27.590 30.712 1.00 0.00 H +ATOM 145 HD22 LEU A 8 33.736 27.944 30.369 1.00 0.00 H +ATOM 146 HD23 LEU A 8 34.286 26.389 30.180 1.00 0.00 H +ATOM 147 N THR A 9 34.603 32.726 28.617 1.00 0.00 N +ATOM 148 CA THR A 9 35.225 33.996 28.914 1.00 0.00 C +ATOM 149 C THR A 9 34.214 34.947 29.581 1.00 0.00 C +ATOM 150 O THR A 9 34.669 35.893 30.211 1.00 0.00 O +ATOM 151 CB THR A 9 35.560 34.444 27.499 1.00 0.00 C +ATOM 152 OG1 THR A 9 34.447 34.606 26.653 1.00 0.00 O +ATOM 153 CG2 THR A 9 36.507 33.600 26.657 1.00 0.00 C +ATOM 154 H THR A 9 34.325 32.499 27.636 1.00 0.00 H +ATOM 155 HA THR A 9 36.167 33.853 29.496 1.00 0.00 H +ATOM 156 HB THR A 9 36.113 35.366 27.716 1.00 0.00 H +ATOM 157 HG1 THR A 9 34.757 35.022 25.867 1.00 0.00 H +ATOM 158 HG21 THR A 9 37.431 33.240 27.120 1.00 0.00 H +ATOM 159 HG22 THR A 9 36.075 32.751 26.128 1.00 0.00 H +ATOM 160 HG23 THR A 9 36.858 34.376 25.979 1.00 0.00 H +ATOM 161 N GLY A 10 32.921 34.654 29.493 1.00 0.00 N +ATOM 162 CA GLY A 10 31.922 35.451 30.171 1.00 0.00 C +ATOM 163 C GLY A 10 31.007 36.181 29.191 1.00 0.00 C +ATOM 164 O GLY A 10 30.062 36.820 29.639 1.00 0.00 O +ATOM 165 H GLY A 10 32.655 33.814 28.950 1.00 0.00 H +ATOM 166 HA2 GLY A 10 31.239 34.686 30.620 1.00 0.00 H +ATOM 167 HA3 GLY A 10 32.250 36.119 31.012 1.00 0.00 H +ATOM 168 N LYS A 11 31.253 36.101 27.882 1.00 0.00 N +ATOM 169 CA LYS A 11 30.524 36.681 26.770 1.00 0.00 C +ATOM 170 C LYS A 11 29.284 35.876 26.376 1.00 0.00 C +ATOM 171 O LYS A 11 29.269 34.655 26.276 1.00 0.00 O +ATOM 172 CB LYS A 11 31.488 36.757 25.579 1.00 0.00 C +ATOM 173 CG LYS A 11 30.894 37.336 24.294 1.00 0.00 C +ATOM 174 CD LYS A 11 31.895 37.629 23.174 1.00 0.00 C +ATOM 175 CE LYS A 11 31.321 38.524 22.074 1.00 0.00 C +ATOM 176 NZ LYS A 11 32.299 38.915 21.048 1.00 0.00 N +ATOM 177 H LYS A 11 32.024 35.489 27.567 1.00 0.00 H +ATOM 178 HA LYS A 11 30.289 37.746 27.017 1.00 0.00 H +ATOM 179 HB2 LYS A 11 32.227 37.457 25.953 1.00 0.00 H +ATOM 180 HB3 LYS A 11 31.923 35.794 25.301 1.00 0.00 H +ATOM 181 HG2 LYS A 11 30.283 36.573 23.819 1.00 0.00 H +ATOM 182 HG3 LYS A 11 30.209 38.182 24.439 1.00 0.00 H +ATOM 183 HD2 LYS A 11 32.808 38.067 23.582 1.00 0.00 H +ATOM 184 HD3 LYS A 11 32.261 36.737 22.669 1.00 0.00 H +ATOM 185 HE2 LYS A 11 30.471 38.079 21.576 1.00 0.00 H +ATOM 186 HE3 LYS A 11 31.014 39.479 22.502 1.00 0.00 H +ATOM 187 HZ1 LYS A 11 33.194 39.132 21.451 1.00 0.00 H +ATOM 188 HZ2 LYS A 11 32.394 38.234 20.296 1.00 0.00 H +ATOM 189 HZ3 LYS A 11 31.967 39.745 20.584 1.00 0.00 H +ATOM 190 N THR A 12 28.191 36.619 26.215 1.00 0.00 N +ATOM 191 CA THR A 12 26.852 36.097 26.048 1.00 0.00 C +ATOM 192 C THR A 12 26.607 36.315 24.556 1.00 0.00 C +ATOM 193 O THR A 12 26.729 37.414 24.018 1.00 0.00 O +ATOM 194 CB THR A 12 25.818 36.976 26.759 1.00 0.00 C +ATOM 195 OG1 THR A 12 26.154 37.010 28.122 1.00 0.00 O +ATOM 196 CG2 THR A 12 24.352 36.543 26.642 1.00 0.00 C +ATOM 197 H THR A 12 28.302 37.646 26.321 1.00 0.00 H +ATOM 198 HA THR A 12 26.776 35.025 26.345 1.00 0.00 H +ATOM 199 HB THR A 12 25.941 37.996 26.384 1.00 0.00 H +ATOM 200 HG1 THR A 12 26.901 37.589 28.208 1.00 0.00 H +ATOM 201 HG21 THR A 12 24.078 36.259 25.625 1.00 0.00 H +ATOM 202 HG22 THR A 12 24.142 35.718 27.320 1.00 0.00 H +ATOM 203 HG23 THR A 12 23.680 37.364 26.855 1.00 0.00 H +ATOM 204 N ILE A 13 26.191 35.285 23.828 1.00 0.00 N +ATOM 205 CA ILE A 13 26.030 35.321 22.388 1.00 0.00 C +ATOM 206 C ILE A 13 24.608 34.771 22.201 1.00 0.00 C +ATOM 207 O ILE A 13 24.275 33.742 22.780 1.00 0.00 O +ATOM 208 CB ILE A 13 27.137 34.482 21.751 1.00 0.00 C +ATOM 209 CG1 ILE A 13 28.526 35.097 21.836 1.00 0.00 C +ATOM 210 CG2 ILE A 13 26.895 34.014 20.312 1.00 0.00 C +ATOM 211 CD1 ILE A 13 29.616 34.055 21.611 1.00 0.00 C +ATOM 212 H ILE A 13 26.132 34.397 24.367 1.00 0.00 H +ATOM 213 HA ILE A 13 26.002 36.378 22.005 1.00 0.00 H +ATOM 214 HB ILE A 13 27.201 33.558 22.317 1.00 0.00 H +ATOM 215 HG12 ILE A 13 28.628 35.848 21.039 1.00 0.00 H +ATOM 216 HG13 ILE A 13 28.575 35.581 22.810 1.00 0.00 H +ATOM 217 HG21 ILE A 13 25.883 34.139 19.926 1.00 0.00 H +ATOM 218 HG22 ILE A 13 27.451 34.671 19.645 1.00 0.00 H +ATOM 219 HG23 ILE A 13 27.262 33.025 20.032 1.00 0.00 H +ATOM 220 HD11 ILE A 13 29.628 33.217 22.309 1.00 0.00 H +ATOM 221 HD12 ILE A 13 29.616 33.637 20.605 1.00 0.00 H +ATOM 222 HD13 ILE A 13 30.528 34.604 21.847 1.00 0.00 H +ATOM 223 N THR A 14 23.815 35.411 21.349 1.00 0.00 N +ATOM 224 CA THR A 14 22.480 34.927 21.037 1.00 0.00 C +ATOM 225 C THR A 14 22.318 34.806 19.518 1.00 0.00 C +ATOM 226 O THR A 14 22.719 35.683 18.768 1.00 0.00 O +ATOM 227 CB THR A 14 21.484 35.605 21.968 1.00 0.00 C +ATOM 228 OG1 THR A 14 20.163 35.353 21.537 1.00 0.00 O +ATOM 229 CG2 THR A 14 21.508 37.133 21.924 1.00 0.00 C +ATOM 230 H THR A 14 24.171 36.225 20.806 1.00 0.00 H +ATOM 231 HA THR A 14 22.335 33.851 21.312 1.00 0.00 H +ATOM 232 HB THR A 14 21.674 35.201 22.958 1.00 0.00 H +ATOM 233 HG1 THR A 14 20.065 34.412 21.524 1.00 0.00 H +ATOM 234 HG21 THR A 14 21.247 37.479 20.931 1.00 0.00 H +ATOM 235 HG22 THR A 14 20.799 37.574 22.619 1.00 0.00 H +ATOM 236 HG23 THR A 14 22.484 37.523 22.239 1.00 0.00 H +ATOM 237 N LEU A 15 21.547 33.844 19.007 1.00 0.00 N +ATOM 238 CA LEU A 15 21.277 33.571 17.615 1.00 0.00 C +ATOM 239 C LEU A 15 19.818 33.127 17.516 1.00 0.00 C +ATOM 240 O LEU A 15 19.447 32.271 18.321 1.00 0.00 O +ATOM 241 CB LEU A 15 22.163 32.457 17.039 1.00 0.00 C +ATOM 242 CG LEU A 15 23.638 32.695 17.353 1.00 0.00 C +ATOM 243 CD1 LEU A 15 24.210 31.839 18.487 1.00 0.00 C +ATOM 244 CD2 LEU A 15 24.532 32.469 16.127 1.00 0.00 C +ATOM 245 H LEU A 15 21.084 33.218 19.691 1.00 0.00 H +ATOM 246 HA LEU A 15 21.420 34.480 16.970 1.00 0.00 H +ATOM 247 HB2 LEU A 15 21.967 31.501 17.520 1.00 0.00 H +ATOM 248 HB3 LEU A 15 22.100 32.569 15.959 1.00 0.00 H +ATOM 249 HG LEU A 15 23.852 33.758 17.443 1.00 0.00 H +ATOM 250 HD11 LEU A 15 24.145 30.790 18.210 1.00 0.00 H +ATOM 251 HD12 LEU A 15 25.246 32.005 18.807 1.00 0.00 H +ATOM 252 HD13 LEU A 15 23.690 32.113 19.403 1.00 0.00 H +ATOM 253 HD21 LEU A 15 24.201 31.656 15.488 1.00 0.00 H +ATOM 254 HD22 LEU A 15 24.478 33.325 15.451 1.00 0.00 H +ATOM 255 HD23 LEU A 15 25.591 32.290 16.353 1.00 0.00 H +ATOM 256 N GLU A 16 19.038 33.713 16.616 1.00 0.00 N +ATOM 257 CA GLU A 16 17.739 33.241 16.170 1.00 0.00 C +ATOM 258 C GLU A 16 18.031 32.068 15.237 1.00 0.00 C +ATOM 259 O GLU A 16 18.841 32.252 14.333 1.00 0.00 O +ATOM 260 CB GLU A 16 17.017 34.414 15.508 1.00 0.00 C +ATOM 261 CG GLU A 16 17.162 35.752 16.242 1.00 0.00 C +ATOM 262 CD GLU A 16 18.450 36.486 15.871 1.00 0.00 C +ATOM 263 OE1 GLU A 16 19.287 35.925 15.135 1.00 0.00 O +ATOM 264 OE2 GLU A 16 18.592 37.544 16.521 1.00 0.00 O +ATOM 265 H GLU A 16 19.373 34.451 15.962 1.00 0.00 H +ATOM 266 HA GLU A 16 17.184 32.918 17.091 1.00 0.00 H +ATOM 267 HB2 GLU A 16 17.298 34.562 14.469 1.00 0.00 H +ATOM 268 HB3 GLU A 16 16.009 34.013 15.419 1.00 0.00 H +ATOM 269 HG2 GLU A 16 16.330 36.418 16.025 1.00 0.00 H +ATOM 270 HG3 GLU A 16 17.133 35.467 17.287 1.00 0.00 H +ATOM 271 N VAL A 17 17.458 30.909 15.545 1.00 0.00 N +ATOM 272 CA VAL A 17 17.691 29.680 14.814 1.00 0.00 C +ATOM 273 C VAL A 17 16.315 29.043 14.673 1.00 0.00 C +ATOM 274 O VAL A 17 15.293 29.390 15.265 1.00 0.00 O +ATOM 275 CB VAL A 17 18.586 28.784 15.678 1.00 0.00 C +ATOM 276 CG1 VAL A 17 20.044 29.249 15.675 1.00 0.00 C +ATOM 277 CG2 VAL A 17 18.130 28.440 17.101 1.00 0.00 C +ATOM 278 H VAL A 17 16.890 30.726 16.393 1.00 0.00 H +ATOM 279 HA VAL A 17 18.044 29.825 13.765 1.00 0.00 H +ATOM 280 HB VAL A 17 18.658 27.850 15.109 1.00 0.00 H +ATOM 281 HG11 VAL A 17 20.201 29.857 14.784 1.00 0.00 H +ATOM 282 HG12 VAL A 17 20.271 29.983 16.443 1.00 0.00 H +ATOM 283 HG13 VAL A 17 20.684 28.361 15.717 1.00 0.00 H +ATOM 284 HG21 VAL A 17 17.161 27.939 17.060 1.00 0.00 H +ATOM 285 HG22 VAL A 17 18.638 27.716 17.728 1.00 0.00 H +ATOM 286 HG23 VAL A 17 18.039 29.359 17.665 1.00 0.00 H +ATOM 287 N GLU A 18 16.270 27.948 13.911 1.00 0.00 N +ATOM 288 CA GLU A 18 15.107 27.098 13.722 1.00 0.00 C +ATOM 289 C GLU A 18 15.464 25.871 14.566 1.00 0.00 C +ATOM 290 O GLU A 18 16.643 25.510 14.626 1.00 0.00 O +ATOM 291 CB GLU A 18 14.957 26.737 12.251 1.00 0.00 C +ATOM 292 CG GLU A 18 14.589 27.943 11.388 1.00 0.00 C +ATOM 293 CD GLU A 18 13.067 28.045 11.350 1.00 0.00 C +ATOM 294 OE1 GLU A 18 12.411 28.233 12.394 1.00 0.00 O +ATOM 295 OE2 GLU A 18 12.508 27.827 10.250 1.00 0.00 O +ATOM 296 H GLU A 18 17.137 27.475 13.575 1.00 0.00 H +ATOM 297 HA GLU A 18 14.130 27.575 13.974 1.00 0.00 H +ATOM 298 HB2 GLU A 18 15.846 26.244 11.857 1.00 0.00 H +ATOM 299 HB3 GLU A 18 14.269 25.901 12.096 1.00 0.00 H +ATOM 300 HG2 GLU A 18 15.086 28.834 11.765 1.00 0.00 H +ATOM 301 HG3 GLU A 18 14.918 27.695 10.381 1.00 0.00 H +ATOM 302 N PRO A 19 14.544 25.072 15.091 1.00 0.00 N +ATOM 303 CA PRO A 19 14.685 23.794 15.755 1.00 0.00 C +ATOM 304 C PRO A 19 15.091 22.647 14.833 1.00 0.00 C +ATOM 305 O PRO A 19 15.820 21.808 15.373 1.00 0.00 O +ATOM 306 CB PRO A 19 13.286 23.569 16.335 1.00 0.00 C +ATOM 307 CG PRO A 19 12.311 24.318 15.424 1.00 0.00 C +ATOM 308 CD PRO A 19 13.166 25.489 14.944 1.00 0.00 C +ATOM 309 HA PRO A 19 15.330 23.888 16.660 1.00 0.00 H +ATOM 310 HB2 PRO A 19 12.893 22.548 16.338 1.00 0.00 H +ATOM 311 HB3 PRO A 19 13.341 23.989 17.346 1.00 0.00 H +ATOM 312 HG2 PRO A 19 11.959 23.729 14.572 1.00 0.00 H +ATOM 313 HG3 PRO A 19 11.387 24.673 15.874 1.00 0.00 H +ATOM 314 HD2 PRO A 19 12.847 25.871 13.969 1.00 0.00 H +ATOM 315 HD3 PRO A 19 13.105 26.282 15.691 1.00 0.00 H +ATOM 316 N SER A 20 14.763 22.617 13.542 1.00 0.00 N +ATOM 317 CA SER A 20 15.204 21.649 12.566 1.00 0.00 C +ATOM 318 C SER A 20 16.664 21.757 12.141 1.00 0.00 C +ATOM 319 O SER A 20 17.114 20.830 11.476 1.00 0.00 O +ATOM 320 CB SER A 20 14.265 21.848 11.372 1.00 0.00 C +ATOM 321 OG SER A 20 12.945 21.566 11.792 1.00 0.00 O +ATOM 322 H SER A 20 14.045 23.306 13.253 1.00 0.00 H +ATOM 323 HA SER A 20 14.921 20.657 13.008 1.00 0.00 H +ATOM 324 HB2 SER A 20 14.348 22.876 11.019 1.00 0.00 H +ATOM 325 HB3 SER A 20 14.476 21.104 10.595 1.00 0.00 H +ATOM 326 HG SER A 20 12.593 20.741 11.501 1.00 0.00 H +ATOM 327 N ASP A 21 17.400 22.845 12.367 1.00 0.00 N +ATOM 328 CA ASP A 21 18.815 23.002 12.060 1.00 0.00 C +ATOM 329 C ASP A 21 19.597 22.026 12.943 1.00 0.00 C +ATOM 330 O ASP A 21 19.462 21.914 14.161 1.00 0.00 O +ATOM 331 CB ASP A 21 19.341 24.420 12.307 1.00 0.00 C +ATOM 332 CG ASP A 21 18.655 25.468 11.453 1.00 0.00 C +ATOM 333 OD1 ASP A 21 18.491 25.188 10.250 1.00 0.00 O +ATOM 334 OD2 ASP A 21 18.326 26.563 11.976 1.00 0.00 O +ATOM 335 H ASP A 21 16.939 23.549 12.973 1.00 0.00 H +ATOM 336 HA ASP A 21 18.976 22.786 10.977 1.00 0.00 H +ATOM 337 HB2 ASP A 21 19.134 24.651 13.352 1.00 0.00 H +ATOM 338 HB3 ASP A 21 20.412 24.445 12.102 1.00 0.00 H +ATOM 339 N THR A 22 20.508 21.330 12.273 1.00 0.00 N +ATOM 340 CA THR A 22 21.690 20.718 12.852 1.00 0.00 C +ATOM 341 C THR A 22 22.489 21.549 13.859 1.00 0.00 C +ATOM 342 O THR A 22 22.450 22.776 13.798 1.00 0.00 O +ATOM 343 CB THR A 22 22.564 20.024 11.808 1.00 0.00 C +ATOM 344 OG1 THR A 22 22.980 21.033 10.924 1.00 0.00 O +ATOM 345 CG2 THR A 22 21.998 18.815 11.062 1.00 0.00 C +ATOM 346 H THR A 22 20.417 21.533 11.258 1.00 0.00 H +ATOM 347 HA THR A 22 21.189 19.863 13.371 1.00 0.00 H +ATOM 348 HB THR A 22 23.415 19.654 12.385 1.00 0.00 H +ATOM 349 HG1 THR A 22 22.167 21.241 10.485 1.00 0.00 H +ATOM 350 HG21 THR A 22 20.970 19.019 10.776 1.00 0.00 H +ATOM 351 HG22 THR A 22 22.506 18.603 10.121 1.00 0.00 H +ATOM 352 HG23 THR A 22 22.043 17.877 11.622 1.00 0.00 H +ATOM 353 N ILE A 23 23.140 20.924 14.834 1.00 0.00 N +ATOM 354 CA ILE A 23 24.023 21.599 15.760 1.00 0.00 C +ATOM 355 C ILE A 23 25.240 22.121 14.995 1.00 0.00 C +ATOM 356 O ILE A 23 25.704 23.224 15.255 1.00 0.00 O +ATOM 357 CB ILE A 23 24.388 20.529 16.786 1.00 0.00 C +ATOM 358 CG1 ILE A 23 23.232 19.795 17.452 1.00 0.00 C +ATOM 359 CG2 ILE A 23 25.262 21.163 17.878 1.00 0.00 C +ATOM 360 CD1 ILE A 23 22.212 20.640 18.221 1.00 0.00 C +ATOM 361 H ILE A 23 23.187 19.879 14.860 1.00 0.00 H +ATOM 362 HA ILE A 23 23.558 22.490 16.250 1.00 0.00 H +ATOM 363 HB ILE A 23 25.101 19.787 16.409 1.00 0.00 H +ATOM 364 HG12 ILE A 23 22.669 19.159 16.761 1.00 0.00 H +ATOM 365 HG13 ILE A 23 23.667 19.191 18.240 1.00 0.00 H +ATOM 366 HG21 ILE A 23 24.764 21.970 18.405 1.00 0.00 H +ATOM 367 HG22 ILE A 23 25.615 20.350 18.513 1.00 0.00 H +ATOM 368 HG23 ILE A 23 26.221 21.521 17.500 1.00 0.00 H +ATOM 369 HD11 ILE A 23 21.796 21.472 17.645 1.00 0.00 H +ATOM 370 HD12 ILE A 23 21.391 20.017 18.569 1.00 0.00 H +ATOM 371 HD13 ILE A 23 22.609 21.132 19.108 1.00 0.00 H +ATOM 372 N GLU A 24 25.827 21.423 14.031 1.00 0.00 N +ATOM 373 CA GLU A 24 26.929 21.675 13.131 1.00 0.00 C +ATOM 374 C GLU A 24 26.808 22.946 12.294 1.00 0.00 C +ATOM 375 O GLU A 24 27.821 23.620 12.071 1.00 0.00 O +ATOM 376 CB GLU A 24 27.330 20.391 12.412 1.00 0.00 C +ATOM 377 CG GLU A 24 28.523 20.361 11.453 1.00 0.00 C +ATOM 378 CD GLU A 24 29.177 19.045 11.089 1.00 0.00 C +ATOM 379 OE1 GLU A 24 28.730 17.990 11.574 1.00 0.00 O +ATOM 380 OE2 GLU A 24 30.056 19.090 10.190 1.00 0.00 O +ATOM 381 H GLU A 24 25.457 20.442 13.999 1.00 0.00 H +ATOM 382 HA GLU A 24 27.744 22.017 13.832 1.00 0.00 H +ATOM 383 HB2 GLU A 24 27.759 19.747 13.179 1.00 0.00 H +ATOM 384 HB3 GLU A 24 26.426 19.946 11.991 1.00 0.00 H +ATOM 385 HG2 GLU A 24 28.104 20.766 10.528 1.00 0.00 H +ATOM 386 HG3 GLU A 24 29.336 20.949 11.875 1.00 0.00 H +ATOM 387 N ASN A 25 25.585 23.245 11.849 1.00 0.00 N +ATOM 388 CA ASN A 25 25.273 24.584 11.402 1.00 0.00 C +ATOM 389 C ASN A 25 25.565 25.747 12.357 1.00 0.00 C +ATOM 390 O ASN A 25 26.302 26.643 11.961 1.00 0.00 O +ATOM 391 CB ASN A 25 23.844 24.711 10.861 1.00 0.00 C +ATOM 392 CG ASN A 25 23.536 25.875 9.938 1.00 0.00 C +ATOM 393 OD1 ASN A 25 22.497 26.533 10.018 1.00 0.00 O +ATOM 394 ND2 ASN A 25 24.441 26.189 9.001 1.00 0.00 N +ATOM 395 H ASN A 25 24.821 22.619 12.171 1.00 0.00 H +ATOM 396 HA ASN A 25 26.005 24.782 10.582 1.00 0.00 H +ATOM 397 HB2 ASN A 25 23.612 23.759 10.376 1.00 0.00 H +ATOM 398 HB3 ASN A 25 23.147 24.799 11.694 1.00 0.00 H +ATOM 399 HD21 ASN A 25 25.339 25.655 8.997 1.00 0.00 H +ATOM 400 HD22 ASN A 25 24.311 26.853 8.214 1.00 0.00 H +ATOM 401 N VAL A 26 25.142 25.676 13.616 1.00 0.00 N +ATOM 402 CA VAL A 26 25.262 26.709 14.635 1.00 0.00 C +ATOM 403 C VAL A 26 26.683 26.826 15.188 1.00 0.00 C +ATOM 404 O VAL A 26 27.036 27.872 15.737 1.00 0.00 O +ATOM 405 CB VAL A 26 24.257 26.394 15.755 1.00 0.00 C +ATOM 406 CG1 VAL A 26 24.064 27.603 16.661 1.00 0.00 C +ATOM 407 CG2 VAL A 26 22.880 26.137 15.152 1.00 0.00 C +ATOM 408 H VAL A 26 24.524 24.893 13.890 1.00 0.00 H +ATOM 409 HA VAL A 26 25.086 27.710 14.166 1.00 0.00 H +ATOM 410 HB VAL A 26 24.591 25.505 16.288 1.00 0.00 H +ATOM 411 HG11 VAL A 26 25.020 27.936 17.084 1.00 0.00 H +ATOM 412 HG12 VAL A 26 23.725 28.526 16.183 1.00 0.00 H +ATOM 413 HG13 VAL A 26 23.438 27.374 17.523 1.00 0.00 H +ATOM 414 HG21 VAL A 26 22.727 26.727 14.244 1.00 0.00 H +ATOM 415 HG22 VAL A 26 22.653 25.111 14.891 1.00 0.00 H +ATOM 416 HG23 VAL A 26 22.112 26.449 15.859 1.00 0.00 H +ATOM 417 N LYS A 27 27.596 25.887 14.965 1.00 0.00 N +ATOM 418 CA LYS A 27 29.025 25.937 15.201 1.00 0.00 C +ATOM 419 C LYS A 27 29.674 26.739 14.067 1.00 0.00 C +ATOM 420 O LYS A 27 30.647 27.461 14.262 1.00 0.00 O +ATOM 421 CB LYS A 27 29.689 24.553 15.205 1.00 0.00 C +ATOM 422 CG LYS A 27 29.106 23.481 16.122 1.00 0.00 C +ATOM 423 CD LYS A 27 29.658 22.061 16.031 1.00 0.00 C +ATOM 424 CE LYS A 27 30.849 21.957 16.982 1.00 0.00 C +ATOM 425 NZ LYS A 27 31.571 20.715 16.664 1.00 0.00 N +ATOM 426 H LYS A 27 27.248 24.977 14.607 1.00 0.00 H +ATOM 427 HA LYS A 27 29.085 26.519 16.155 1.00 0.00 H +ATOM 428 HB2 LYS A 27 29.759 24.143 14.191 1.00 0.00 H +ATOM 429 HB3 LYS A 27 30.717 24.698 15.516 1.00 0.00 H +ATOM 430 HG2 LYS A 27 29.156 23.911 17.125 1.00 0.00 H +ATOM 431 HG3 LYS A 27 28.059 23.588 15.828 1.00 0.00 H +ATOM 432 HD2 LYS A 27 28.886 21.377 16.384 1.00 0.00 H +ATOM 433 HD3 LYS A 27 29.771 21.883 14.963 1.00 0.00 H +ATOM 434 HE2 LYS A 27 31.438 22.805 16.625 1.00 0.00 H +ATOM 435 HE3 LYS A 27 30.580 22.059 18.029 1.00 0.00 H +ATOM 436 HZ1 LYS A 27 31.879 20.432 15.745 1.00 0.00 H +ATOM 437 HZ2 LYS A 27 32.327 20.624 17.322 1.00 0.00 H +ATOM 438 HZ3 LYS A 27 30.856 20.106 17.025 1.00 0.00 H +ATOM 439 N ALA A 28 29.168 26.713 12.835 1.00 0.00 N +ATOM 440 CA ALA A 28 29.682 27.462 11.705 1.00 0.00 C +ATOM 441 C ALA A 28 29.060 28.859 11.669 1.00 0.00 C +ATOM 442 O ALA A 28 29.757 29.821 11.349 1.00 0.00 O +ATOM 443 CB ALA A 28 29.263 26.892 10.343 1.00 0.00 C +ATOM 444 H ALA A 28 28.561 25.887 12.668 1.00 0.00 H +ATOM 445 HA ALA A 28 30.794 27.506 11.790 1.00 0.00 H +ATOM 446 HB1 ALA A 28 28.192 26.810 10.213 1.00 0.00 H +ATOM 447 HB2 ALA A 28 29.809 27.472 9.601 1.00 0.00 H +ATOM 448 HB3 ALA A 28 29.577 25.849 10.251 1.00 0.00 H +ATOM 449 N LYS A 29 27.840 29.078 12.155 1.00 0.00 N +ATOM 450 CA LYS A 29 27.250 30.382 12.387 1.00 0.00 C +ATOM 451 C LYS A 29 28.074 31.099 13.455 1.00 0.00 C +ATOM 452 O LYS A 29 28.179 32.318 13.291 1.00 0.00 O +ATOM 453 CB LYS A 29 25.789 30.232 12.810 1.00 0.00 C +ATOM 454 CG LYS A 29 24.988 30.050 11.519 1.00 0.00 C +ATOM 455 CD LYS A 29 23.519 29.640 11.653 1.00 0.00 C +ATOM 456 CE LYS A 29 22.751 29.666 10.331 1.00 0.00 C +ATOM 457 NZ LYS A 29 21.344 29.249 10.291 1.00 0.00 N +ATOM 458 H LYS A 29 27.202 28.263 12.205 1.00 0.00 H +ATOM 459 HA LYS A 29 27.326 31.053 11.500 1.00 0.00 H +ATOM 460 HB2 LYS A 29 25.696 29.465 13.582 1.00 0.00 H +ATOM 461 HB3 LYS A 29 25.493 31.203 13.215 1.00 0.00 H +ATOM 462 HG2 LYS A 29 25.152 30.984 10.973 1.00 0.00 H +ATOM 463 HG3 LYS A 29 25.560 29.340 10.923 1.00 0.00 H +ATOM 464 HD2 LYS A 29 23.514 28.633 12.079 1.00 0.00 H +ATOM 465 HD3 LYS A 29 23.004 30.245 12.395 1.00 0.00 H +ATOM 466 HE2 LYS A 29 22.755 30.613 9.799 1.00 0.00 H +ATOM 467 HE3 LYS A 29 23.270 28.984 9.647 1.00 0.00 H +ATOM 468 HZ1 LYS A 29 21.289 28.286 10.577 1.00 0.00 H +ATOM 469 HZ2 LYS A 29 20.744 29.854 10.838 1.00 0.00 H +ATOM 470 HZ3 LYS A 29 20.966 29.200 9.355 1.00 0.00 H +ATOM 471 N ILE A 30 28.705 30.497 14.458 1.00 0.00 N +ATOM 472 CA ILE A 30 29.685 31.198 15.253 1.00 0.00 C +ATOM 473 C ILE A 30 30.928 31.576 14.443 1.00 0.00 C +ATOM 474 O ILE A 30 31.625 32.488 14.870 1.00 0.00 O +ATOM 475 CB ILE A 30 29.783 30.427 16.575 1.00 0.00 C +ATOM 476 CG1 ILE A 30 28.504 30.629 17.378 1.00 0.00 C +ATOM 477 CG2 ILE A 30 30.981 30.787 17.450 1.00 0.00 C +ATOM 478 CD1 ILE A 30 28.529 30.068 18.792 1.00 0.00 C +ATOM 479 H ILE A 30 28.626 29.458 14.539 1.00 0.00 H +ATOM 480 HA ILE A 30 29.207 32.191 15.440 1.00 0.00 H +ATOM 481 HB ILE A 30 29.969 29.374 16.394 1.00 0.00 H +ATOM 482 HG12 ILE A 30 28.276 31.689 17.488 1.00 0.00 H +ATOM 483 HG13 ILE A 30 27.691 30.041 16.957 1.00 0.00 H +ATOM 484 HG21 ILE A 30 31.949 30.811 16.941 1.00 0.00 H +ATOM 485 HG22 ILE A 30 30.860 31.789 17.860 1.00 0.00 H +ATOM 486 HG23 ILE A 30 30.984 30.116 18.314 1.00 0.00 H +ATOM 487 HD11 ILE A 30 28.943 29.062 18.871 1.00 0.00 H +ATOM 488 HD12 ILE A 30 29.113 30.770 19.386 1.00 0.00 H +ATOM 489 HD13 ILE A 30 27.507 30.077 19.172 1.00 0.00 H +ATOM 490 N GLN A 31 31.337 30.856 13.394 1.00 0.00 N +ATOM 491 CA GLN A 31 32.579 31.159 12.706 1.00 0.00 C +ATOM 492 C GLN A 31 32.334 32.431 11.883 1.00 0.00 C +ATOM 493 O GLN A 31 33.105 33.384 11.989 1.00 0.00 O +ATOM 494 CB GLN A 31 32.963 29.995 11.800 1.00 0.00 C +ATOM 495 CG GLN A 31 34.250 30.217 11.002 1.00 0.00 C +ATOM 496 CD GLN A 31 34.542 28.946 10.211 1.00 0.00 C +ATOM 497 OE1 GLN A 31 33.705 28.104 9.889 1.00 0.00 O +ATOM 498 NE2 GLN A 31 35.830 28.725 9.976 1.00 0.00 N +ATOM 499 H GLN A 31 30.717 30.098 13.046 1.00 0.00 H +ATOM 500 HA GLN A 31 33.467 31.347 13.370 1.00 0.00 H +ATOM 501 HB2 GLN A 31 32.971 29.041 12.328 1.00 0.00 H +ATOM 502 HB3 GLN A 31 32.218 29.715 11.061 1.00 0.00 H +ATOM 503 HG2 GLN A 31 34.214 31.012 10.257 1.00 0.00 H +ATOM 504 HG3 GLN A 31 35.099 30.449 11.648 1.00 0.00 H +ATOM 505 HE21 GLN A 31 36.507 29.242 10.578 1.00 0.00 H +ATOM 506 HE22 GLN A 31 36.076 27.806 9.556 1.00 0.00 H +ATOM 507 N ASP A 32 31.165 32.595 11.272 1.00 0.00 N +ATOM 508 CA ASP A 32 30.556 33.768 10.672 1.00 0.00 C +ATOM 509 C ASP A 32 30.502 34.975 11.612 1.00 0.00 C +ATOM 510 O ASP A 32 31.032 36.009 11.217 1.00 0.00 O +ATOM 511 CB ASP A 32 29.213 33.462 10.026 1.00 0.00 C +ATOM 512 CG ASP A 32 28.524 34.500 9.152 1.00 0.00 C +ATOM 513 OD1 ASP A 32 29.194 34.966 8.205 1.00 0.00 O +ATOM 514 OD2 ASP A 32 27.327 34.850 9.252 1.00 0.00 O +ATOM 515 H ASP A 32 30.595 31.722 11.238 1.00 0.00 H +ATOM 516 HA ASP A 32 31.250 34.001 9.822 1.00 0.00 H +ATOM 517 HB2 ASP A 32 29.356 32.643 9.317 1.00 0.00 H +ATOM 518 HB3 ASP A 32 28.508 32.976 10.702 1.00 0.00 H +ATOM 519 N LYS A 33 30.024 34.742 12.827 1.00 0.00 N +ATOM 520 CA LYS A 33 29.711 35.760 13.810 1.00 0.00 C +ATOM 521 C LYS A 33 30.857 36.174 14.744 1.00 0.00 C +ATOM 522 O LYS A 33 31.047 37.360 14.981 1.00 0.00 O +ATOM 523 CB LYS A 33 28.542 35.269 14.667 1.00 0.00 C +ATOM 524 CG LYS A 33 27.191 35.817 14.227 1.00 0.00 C +ATOM 525 CD LYS A 33 26.713 35.338 12.854 1.00 0.00 C +ATOM 526 CE LYS A 33 25.792 36.307 12.125 1.00 0.00 C +ATOM 527 NZ LYS A 33 25.455 35.697 10.831 1.00 0.00 N +ATOM 528 H LYS A 33 29.764 33.750 13.034 1.00 0.00 H +ATOM 529 HA LYS A 33 29.401 36.693 13.293 1.00 0.00 H +ATOM 530 HB2 LYS A 33 28.566 34.206 14.906 1.00 0.00 H +ATOM 531 HB3 LYS A 33 28.626 35.773 15.632 1.00 0.00 H +ATOM 532 HG2 LYS A 33 26.449 35.712 15.023 1.00 0.00 H +ATOM 533 HG3 LYS A 33 27.222 36.915 14.266 1.00 0.00 H +ATOM 534 HD2 LYS A 33 27.576 35.176 12.211 1.00 0.00 H +ATOM 535 HD3 LYS A 33 26.271 34.338 12.935 1.00 0.00 H +ATOM 536 HE2 LYS A 33 24.902 36.424 12.743 1.00 0.00 H +ATOM 537 HE3 LYS A 33 26.167 37.326 12.012 1.00 0.00 H +ATOM 538 HZ1 LYS A 33 26.237 35.512 10.220 1.00 0.00 H +ATOM 539 HZ2 LYS A 33 24.935 34.829 10.950 1.00 0.00 H +ATOM 540 HZ3 LYS A 33 24.863 36.327 10.317 1.00 0.00 H +ATOM 541 N GLU A 34 31.696 35.231 15.155 1.00 0.00 N +ATOM 542 CA GLU A 34 32.551 35.430 16.306 1.00 0.00 C +ATOM 543 C GLU A 34 33.968 34.914 16.023 1.00 0.00 C +ATOM 544 O GLU A 34 34.978 35.396 16.519 1.00 0.00 O +ATOM 545 CB GLU A 34 31.942 34.791 17.551 1.00 0.00 C +ATOM 546 CG GLU A 34 30.753 35.542 18.155 1.00 0.00 C +ATOM 547 CD GLU A 34 31.192 36.872 18.744 1.00 0.00 C +ATOM 548 OE1 GLU A 34 32.352 37.131 19.138 1.00 0.00 O +ATOM 549 OE2 GLU A 34 30.350 37.789 18.853 1.00 0.00 O +ATOM 550 H GLU A 34 31.427 34.272 14.846 1.00 0.00 H +ATOM 551 HA GLU A 34 32.681 36.535 16.401 1.00 0.00 H +ATOM 552 HB2 GLU A 34 31.536 33.804 17.300 1.00 0.00 H +ATOM 553 HB3 GLU A 34 32.694 34.575 18.308 1.00 0.00 H +ATOM 554 HG2 GLU A 34 30.021 35.685 17.358 1.00 0.00 H +ATOM 555 HG3 GLU A 34 30.267 34.866 18.865 1.00 0.00 H +ATOM 556 N GLY A 35 34.079 34.127 14.950 1.00 0.00 N +ATOM 557 CA GLY A 35 35.326 33.980 14.241 1.00 0.00 C +ATOM 558 C GLY A 35 35.889 32.597 14.585 1.00 0.00 C +ATOM 559 O GLY A 35 37.022 32.329 14.163 1.00 0.00 O +ATOM 560 H GLY A 35 33.225 33.916 14.390 1.00 0.00 H +ATOM 561 HA2 GLY A 35 35.291 34.163 13.136 1.00 0.00 H +ATOM 562 HA3 GLY A 35 36.080 34.713 14.623 1.00 0.00 H +ATOM 563 N ILE A 36 35.212 31.683 15.265 1.00 0.00 N +ATOM 564 CA ILE A 36 35.724 30.511 15.944 1.00 0.00 C +ATOM 565 C ILE A 36 35.452 29.294 15.054 1.00 0.00 C +ATOM 566 O ILE A 36 34.322 29.279 14.569 1.00 0.00 O +ATOM 567 CB ILE A 36 34.861 30.359 17.198 1.00 0.00 C +ATOM 568 CG1 ILE A 36 34.774 31.658 17.985 1.00 0.00 C +ATOM 569 CG2 ILE A 36 35.366 29.205 18.067 1.00 0.00 C +ATOM 570 CD1 ILE A 36 34.085 31.566 19.348 1.00 0.00 C +ATOM 571 H ILE A 36 34.208 31.963 15.381 1.00 0.00 H +ATOM 572 HA ILE A 36 36.785 30.653 16.256 1.00 0.00 H +ATOM 573 HB ILE A 36 33.822 30.141 16.970 1.00 0.00 H +ATOM 574 HG12 ILE A 36 35.823 31.918 18.129 1.00 0.00 H +ATOM 575 HG13 ILE A 36 34.292 32.454 17.406 1.00 0.00 H +ATOM 576 HG21 ILE A 36 35.539 28.286 17.491 1.00 0.00 H +ATOM 577 HG22 ILE A 36 36.365 29.354 18.470 1.00 0.00 H +ATOM 578 HG23 ILE A 36 34.768 28.919 18.939 1.00 0.00 H +ATOM 579 HD11 ILE A 36 34.718 30.896 19.932 1.00 0.00 H +ATOM 580 HD12 ILE A 36 34.020 32.555 19.794 1.00 0.00 H +ATOM 581 HD13 ILE A 36 33.045 31.314 19.525 1.00 0.00 H +ATOM 582 N PRO A 37 36.371 28.371 14.788 1.00 0.00 N +ATOM 583 CA PRO A 37 36.098 27.256 13.912 1.00 0.00 C +ATOM 584 C PRO A 37 35.227 26.169 14.535 1.00 0.00 C +ATOM 585 O PRO A 37 35.299 25.951 15.743 1.00 0.00 O +ATOM 586 CB PRO A 37 37.466 26.716 13.464 1.00 0.00 C +ATOM 587 CG PRO A 37 38.320 26.935 14.710 1.00 0.00 C +ATOM 588 CD PRO A 37 37.754 28.266 15.217 1.00 0.00 C +ATOM 589 HA PRO A 37 35.499 27.633 13.046 1.00 0.00 H +ATOM 590 HB2 PRO A 37 37.470 25.678 13.138 1.00 0.00 H +ATOM 591 HB3 PRO A 37 37.904 27.374 12.715 1.00 0.00 H +ATOM 592 HG2 PRO A 37 38.333 26.107 15.420 1.00 0.00 H +ATOM 593 HG3 PRO A 37 39.363 27.065 14.424 1.00 0.00 H +ATOM 594 HD2 PRO A 37 37.844 28.449 16.291 1.00 0.00 H +ATOM 595 HD3 PRO A 37 38.250 29.114 14.751 1.00 0.00 H +ATOM 596 N PRO A 38 34.421 25.399 13.803 1.00 0.00 N +ATOM 597 CA PRO A 38 33.763 24.187 14.226 1.00 0.00 C +ATOM 598 C PRO A 38 34.557 23.114 14.976 1.00 0.00 C +ATOM 599 O PRO A 38 33.974 22.615 15.938 1.00 0.00 O +ATOM 600 CB PRO A 38 33.099 23.555 13.002 1.00 0.00 C +ATOM 601 CG PRO A 38 32.975 24.746 12.038 1.00 0.00 C +ATOM 602 CD PRO A 38 34.036 25.775 12.461 1.00 0.00 C +ATOM 603 HA PRO A 38 33.039 24.609 14.966 1.00 0.00 H +ATOM 604 HB2 PRO A 38 33.700 22.825 12.459 1.00 0.00 H +ATOM 605 HB3 PRO A 38 32.179 23.026 13.237 1.00 0.00 H +ATOM 606 HG2 PRO A 38 32.920 24.624 10.957 1.00 0.00 H +ATOM 607 HG3 PRO A 38 32.015 25.214 12.223 1.00 0.00 H +ATOM 608 HD2 PRO A 38 34.863 25.661 11.767 1.00 0.00 H +ATOM 609 HD3 PRO A 38 33.745 26.818 12.400 1.00 0.00 H +ATOM 610 N ASP A 39 35.795 22.882 14.546 1.00 0.00 N +ATOM 611 CA ASP A 39 36.717 21.819 14.908 1.00 0.00 C +ATOM 612 C ASP A 39 37.079 21.712 16.392 1.00 0.00 C +ATOM 613 O ASP A 39 36.991 20.662 17.026 1.00 0.00 O +ATOM 614 CB ASP A 39 37.961 21.977 14.047 1.00 0.00 C +ATOM 615 CG ASP A 39 39.125 21.041 14.325 1.00 0.00 C +ATOM 616 OD1 ASP A 39 38.893 19.822 14.213 1.00 0.00 O +ATOM 617 OD2 ASP A 39 40.256 21.421 14.690 1.00 0.00 O +ATOM 618 H ASP A 39 36.021 23.439 13.707 1.00 0.00 H +ATOM 619 HA ASP A 39 36.214 20.849 14.674 1.00 0.00 H +ATOM 620 HB2 ASP A 39 37.660 21.717 13.029 1.00 0.00 H +ATOM 621 HB3 ASP A 39 38.217 23.035 14.166 1.00 0.00 H +ATOM 622 N GLN A 40 37.349 22.891 16.960 1.00 0.00 N +ATOM 623 CA GLN A 40 37.841 22.982 18.323 1.00 0.00 C +ATOM 624 C GLN A 40 36.729 23.348 19.315 1.00 0.00 C +ATOM 625 O GLN A 40 36.987 23.258 20.506 1.00 0.00 O +ATOM 626 CB GLN A 40 38.844 24.122 18.163 1.00 0.00 C +ATOM 627 CG GLN A 40 39.995 23.803 17.204 1.00 0.00 C +ATOM 628 CD GLN A 40 41.010 22.876 17.847 1.00 0.00 C +ATOM 629 OE1 GLN A 40 41.676 23.183 18.837 1.00 0.00 O +ATOM 630 NE2 GLN A 40 41.144 21.677 17.290 1.00 0.00 N +ATOM 631 H GLN A 40 37.252 23.825 16.518 1.00 0.00 H +ATOM 632 HA GLN A 40 38.309 22.057 18.723 1.00 0.00 H +ATOM 633 HB2 GLN A 40 38.395 25.102 17.968 1.00 0.00 H +ATOM 634 HB3 GLN A 40 39.269 24.258 19.162 1.00 0.00 H +ATOM 635 HG2 GLN A 40 39.657 23.479 16.225 1.00 0.00 H +ATOM 636 HG3 GLN A 40 40.517 24.749 17.130 1.00 0.00 H +ATOM 637 HE21 GLN A 40 40.903 21.606 16.284 1.00 0.00 H +ATOM 638 HE22 GLN A 40 41.814 21.029 17.760 1.00 0.00 H +ATOM 639 N GLN A 41 35.527 23.548 18.776 1.00 0.00 N +ATOM 640 CA GLN A 41 34.326 23.901 19.502 1.00 0.00 C +ATOM 641 C GLN A 41 33.456 22.689 19.849 1.00 0.00 C +ATOM 642 O GLN A 41 33.181 21.931 18.916 1.00 0.00 O +ATOM 643 CB GLN A 41 33.595 24.847 18.541 1.00 0.00 C +ATOM 644 CG GLN A 41 32.305 25.432 19.125 1.00 0.00 C +ATOM 645 CD GLN A 41 31.539 26.251 18.107 1.00 0.00 C +ATOM 646 OE1 GLN A 41 30.417 26.661 18.387 1.00 0.00 O +ATOM 647 NE2 GLN A 41 32.073 26.596 16.933 1.00 0.00 N +ATOM 648 H GLN A 41 35.390 23.472 17.751 1.00 0.00 H +ATOM 649 HA GLN A 41 34.605 24.444 20.434 1.00 0.00 H +ATOM 650 HB2 GLN A 41 34.334 25.613 18.305 1.00 0.00 H +ATOM 651 HB3 GLN A 41 33.411 24.284 17.623 1.00 0.00 H +ATOM 652 HG2 GLN A 41 31.693 24.608 19.500 1.00 0.00 H +ATOM 653 HG3 GLN A 41 32.540 26.042 20.000 1.00 0.00 H +ATOM 654 HE21 GLN A 41 32.984 26.135 16.772 1.00 0.00 H +ATOM 655 HE22 GLN A 41 31.569 27.203 16.248 1.00 0.00 H +ATOM 656 N ARG A 42 33.093 22.468 21.105 1.00 0.00 N +ATOM 657 CA ARG A 42 32.164 21.483 21.614 1.00 0.00 C +ATOM 658 C ARG A 42 31.081 22.206 22.426 1.00 0.00 C +ATOM 659 O ARG A 42 31.436 23.068 23.237 1.00 0.00 O +ATOM 660 CB ARG A 42 32.849 20.238 22.190 1.00 0.00 C +ATOM 661 CG ARG A 42 32.127 19.238 23.097 1.00 0.00 C +ATOM 662 CD ARG A 42 32.886 17.969 23.485 1.00 0.00 C +ATOM 663 NE ARG A 42 33.143 17.066 22.366 1.00 0.00 N +ATOM 664 CZ ARG A 42 34.309 16.870 21.740 1.00 0.00 C +ATOM 665 NH1 ARG A 42 35.452 17.350 22.251 1.00 0.00 N +ATOM 666 NH2 ARG A 42 34.258 16.122 20.620 1.00 0.00 N +ATOM 667 H ARG A 42 33.328 23.177 21.839 1.00 0.00 H +ATOM 668 HA ARG A 42 31.614 21.112 20.713 1.00 0.00 H +ATOM 669 HB2 ARG A 42 33.460 19.705 21.476 1.00 0.00 H +ATOM 670 HB3 ARG A 42 33.724 20.623 22.720 1.00 0.00 H +ATOM 671 HG2 ARG A 42 31.664 19.828 23.896 1.00 0.00 H +ATOM 672 HG3 ARG A 42 31.228 18.986 22.527 1.00 0.00 H +ATOM 673 HD2 ARG A 42 33.827 18.164 23.999 1.00 0.00 H +ATOM 674 HD3 ARG A 42 32.283 17.308 24.093 1.00 0.00 H +ATOM 675 HE ARG A 42 32.237 16.753 22.065 1.00 0.00 H +ATOM 676 HH11 ARG A 42 35.416 18.255 22.685 1.00 0.00 H +ATOM 677 HH12 ARG A 42 36.326 17.039 21.858 1.00 0.00 H +ATOM 678 HH21 ARG A 42 33.510 15.486 20.397 1.00 0.00 H +ATOM 679 HH22 ARG A 42 34.984 16.223 19.922 1.00 0.00 H +ATOM 680 N LEU A 43 29.812 21.891 22.207 1.00 0.00 N +ATOM 681 CA LEU A 43 28.719 22.625 22.794 1.00 0.00 C +ATOM 682 C LEU A 43 28.012 21.729 23.816 1.00 0.00 C +ATOM 683 O LEU A 43 27.793 20.567 23.494 1.00 0.00 O +ATOM 684 CB LEU A 43 27.673 23.150 21.799 1.00 0.00 C +ATOM 685 CG LEU A 43 28.239 23.955 20.636 1.00 0.00 C +ATOM 686 CD1 LEU A 43 27.341 23.870 19.398 1.00 0.00 C +ATOM 687 CD2 LEU A 43 28.518 25.386 21.088 1.00 0.00 C +ATOM 688 H LEU A 43 29.558 21.071 21.608 1.00 0.00 H +ATOM 689 HA LEU A 43 29.079 23.527 23.345 1.00 0.00 H +ATOM 690 HB2 LEU A 43 27.078 22.317 21.431 1.00 0.00 H +ATOM 691 HB3 LEU A 43 26.969 23.725 22.406 1.00 0.00 H +ATOM 692 HG LEU A 43 29.170 23.509 20.284 1.00 0.00 H +ATOM 693 HD11 LEU A 43 27.085 22.849 19.114 1.00 0.00 H +ATOM 694 HD12 LEU A 43 26.432 24.362 19.756 1.00 0.00 H +ATOM 695 HD13 LEU A 43 27.835 24.326 18.541 1.00 0.00 H +ATOM 696 HD21 LEU A 43 29.017 25.491 22.054 1.00 0.00 H +ATOM 697 HD22 LEU A 43 29.192 25.791 20.334 1.00 0.00 H +ATOM 698 HD23 LEU A 43 27.603 25.976 21.203 1.00 0.00 H +ATOM 699 N ILE A 44 27.421 22.369 24.830 1.00 0.00 N +ATOM 700 CA ILE A 44 26.913 21.758 26.037 1.00 0.00 C +ATOM 701 C ILE A 44 25.484 22.270 26.230 1.00 0.00 C +ATOM 702 O ILE A 44 25.273 23.485 26.196 1.00 0.00 O +ATOM 703 CB ILE A 44 27.892 21.705 27.205 1.00 0.00 C +ATOM 704 CG1 ILE A 44 29.265 21.147 26.838 1.00 0.00 C +ATOM 705 CG2 ILE A 44 27.386 20.947 28.437 1.00 0.00 C +ATOM 706 CD1 ILE A 44 30.363 21.103 27.901 1.00 0.00 C +ATOM 707 H ILE A 44 27.687 23.369 24.850 1.00 0.00 H +ATOM 708 HA ILE A 44 26.820 20.687 25.715 1.00 0.00 H +ATOM 709 HB ILE A 44 28.097 22.733 27.504 1.00 0.00 H +ATOM 710 HG12 ILE A 44 29.111 20.113 26.525 1.00 0.00 H +ATOM 711 HG13 ILE A 44 29.668 21.628 25.946 1.00 0.00 H +ATOM 712 HG21 ILE A 44 26.442 21.315 28.821 1.00 0.00 H +ATOM 713 HG22 ILE A 44 27.201 19.928 28.102 1.00 0.00 H +ATOM 714 HG23 ILE A 44 28.176 20.745 29.153 1.00 0.00 H +ATOM 715 HD11 ILE A 44 30.126 21.830 28.685 1.00 0.00 H +ATOM 716 HD12 ILE A 44 30.580 20.195 28.456 1.00 0.00 H +ATOM 717 HD13 ILE A 44 31.250 21.460 27.377 1.00 0.00 H +ATOM 718 N PHE A 45 24.539 21.371 26.487 1.00 0.00 N +ATOM 719 CA PHE A 45 23.166 21.541 26.910 1.00 0.00 C +ATOM 720 C PHE A 45 22.770 20.452 27.909 1.00 0.00 C +ATOM 721 O PHE A 45 22.720 19.270 27.561 1.00 0.00 O +ATOM 722 CB PHE A 45 22.274 21.642 25.678 1.00 0.00 C +ATOM 723 CG PHE A 45 20.870 22.047 26.057 1.00 0.00 C +ATOM 724 CD1 PHE A 45 20.636 23.332 26.562 1.00 0.00 C +ATOM 725 CD2 PHE A 45 19.815 21.132 26.126 1.00 0.00 C +ATOM 726 CE1 PHE A 45 19.437 23.641 27.213 1.00 0.00 C +ATOM 727 CE2 PHE A 45 18.590 21.496 26.692 1.00 0.00 C +ATOM 728 CZ PHE A 45 18.348 22.752 27.261 1.00 0.00 C +ATOM 729 H PHE A 45 24.856 20.384 26.460 1.00 0.00 H +ATOM 730 HA PHE A 45 23.215 22.583 27.315 1.00 0.00 H +ATOM 731 HB2 PHE A 45 22.804 22.239 24.932 1.00 0.00 H +ATOM 732 HB3 PHE A 45 22.218 20.683 25.164 1.00 0.00 H +ATOM 733 HD1 PHE A 45 21.362 24.133 26.549 1.00 0.00 H +ATOM 734 HD2 PHE A 45 20.085 20.119 25.861 1.00 0.00 H +ATOM 735 HE1 PHE A 45 19.346 24.657 27.552 1.00 0.00 H +ATOM 736 HE2 PHE A 45 17.874 20.694 26.744 1.00 0.00 H +ATOM 737 HZ PHE A 45 17.414 22.954 27.760 1.00 0.00 H +ATOM 738 N ALA A 46 22.414 20.856 29.128 1.00 0.00 N +ATOM 739 CA ALA A 46 21.831 20.048 30.182 1.00 0.00 C +ATOM 740 C ALA A 46 22.834 18.992 30.656 1.00 0.00 C +ATOM 741 O ALA A 46 22.510 17.938 31.200 1.00 0.00 O +ATOM 742 CB ALA A 46 20.462 19.491 29.792 1.00 0.00 C +ATOM 743 H ALA A 46 22.527 21.879 29.276 1.00 0.00 H +ATOM 744 HA ALA A 46 21.697 20.771 31.030 1.00 0.00 H +ATOM 745 HB1 ALA A 46 20.094 20.209 29.043 1.00 0.00 H +ATOM 746 HB2 ALA A 46 20.366 18.492 29.371 1.00 0.00 H +ATOM 747 HB3 ALA A 46 19.794 19.532 30.646 1.00 0.00 H +ATOM 748 N GLY A 47 24.114 19.297 30.508 1.00 0.00 N +ATOM 749 CA GLY A 47 25.235 18.479 30.938 1.00 0.00 C +ATOM 750 C GLY A 47 25.904 17.718 29.783 1.00 0.00 C +ATOM 751 O GLY A 47 27.033 17.270 29.967 1.00 0.00 O +ATOM 752 H GLY A 47 24.305 20.295 30.289 1.00 0.00 H +ATOM 753 HA2 GLY A 47 26.063 19.185 31.173 1.00 0.00 H +ATOM 754 HA3 GLY A 47 24.988 17.841 31.822 1.00 0.00 H +ATOM 755 N LYS A 48 25.183 17.546 28.678 1.00 0.00 N +ATOM 756 CA LYS A 48 25.605 16.586 27.677 1.00 0.00 C +ATOM 757 C LYS A 48 26.413 17.372 26.643 1.00 0.00 C +ATOM 758 O LYS A 48 26.081 18.502 26.275 1.00 0.00 O +ATOM 759 CB LYS A 48 24.294 16.212 26.968 1.00 0.00 C +ATOM 760 CG LYS A 48 23.372 15.584 28.009 1.00 0.00 C +ATOM 761 CD LYS A 48 22.154 15.028 27.266 1.00 0.00 C +ATOM 762 CE LYS A 48 21.133 16.153 27.071 1.00 0.00 C +ATOM 763 NZ LYS A 48 19.810 15.637 26.691 1.00 0.00 N +ATOM 764 H LYS A 48 24.316 18.101 28.539 1.00 0.00 H +ATOM 765 HA LYS A 48 26.026 15.639 28.080 1.00 0.00 H +ATOM 766 HB2 LYS A 48 23.723 16.989 26.475 1.00 0.00 H +ATOM 767 HB3 LYS A 48 24.523 15.460 26.206 1.00 0.00 H +ATOM 768 HG2 LYS A 48 23.929 14.749 28.431 1.00 0.00 H +ATOM 769 HG3 LYS A 48 22.941 16.364 28.642 1.00 0.00 H +ATOM 770 HD2 LYS A 48 22.330 14.500 26.332 1.00 0.00 H +ATOM 771 HD3 LYS A 48 21.684 14.236 27.842 1.00 0.00 H +ATOM 772 HE2 LYS A 48 20.993 16.778 27.958 1.00 0.00 H +ATOM 773 HE3 LYS A 48 21.499 16.762 26.246 1.00 0.00 H +ATOM 774 HZ1 LYS A 48 19.720 14.987 25.919 1.00 0.00 H +ATOM 775 HZ2 LYS A 48 19.382 15.193 27.488 1.00 0.00 H +ATOM 776 HZ3 LYS A 48 19.230 16.440 26.514 1.00 0.00 H +ATOM 777 N GLN A 49 27.461 16.746 26.115 1.00 0.00 N +ATOM 778 CA GLN A 49 28.033 17.181 24.851 1.00 0.00 C +ATOM 779 C GLN A 49 27.103 16.843 23.683 1.00 0.00 C +ATOM 780 O GLN A 49 26.597 15.734 23.579 1.00 0.00 O +ATOM 781 CB GLN A 49 29.378 16.503 24.580 1.00 0.00 C +ATOM 782 CG GLN A 49 29.394 14.993 24.355 1.00 0.00 C +ATOM 783 CD GLN A 49 30.765 14.339 24.483 1.00 0.00 C +ATOM 784 OE1 GLN A 49 31.516 14.557 25.426 1.00 0.00 O +ATOM 785 NE2 GLN A 49 31.117 13.424 23.587 1.00 0.00 N +ATOM 786 H GLN A 49 27.792 15.927 26.662 1.00 0.00 H +ATOM 787 HA GLN A 49 28.077 18.292 24.990 1.00 0.00 H +ATOM 788 HB2 GLN A 49 29.613 16.932 23.608 1.00 0.00 H +ATOM 789 HB3 GLN A 49 30.017 16.853 25.393 1.00 0.00 H +ATOM 790 HG2 GLN A 49 28.777 14.557 25.132 1.00 0.00 H +ATOM 791 HG3 GLN A 49 28.972 14.592 23.427 1.00 0.00 H +ATOM 792 HE21 GLN A 49 30.636 13.339 22.668 1.00 0.00 H +ATOM 793 HE22 GLN A 49 32.012 12.908 23.511 1.00 0.00 H +ATOM 794 N LEU A 50 26.958 17.787 22.756 1.00 0.00 N +ATOM 795 CA LEU A 50 25.998 17.732 21.671 1.00 0.00 C +ATOM 796 C LEU A 50 26.822 17.389 20.428 1.00 0.00 C +ATOM 797 O LEU A 50 27.923 17.902 20.256 1.00 0.00 O +ATOM 798 CB LEU A 50 25.354 19.103 21.453 1.00 0.00 C +ATOM 799 CG LEU A 50 24.515 19.826 22.499 1.00 0.00 C +ATOM 800 CD1 LEU A 50 23.747 21.011 21.912 1.00 0.00 C +ATOM 801 CD2 LEU A 50 23.601 18.771 23.114 1.00 0.00 C +ATOM 802 H LEU A 50 27.342 18.744 22.856 1.00 0.00 H +ATOM 803 HA LEU A 50 25.243 16.923 21.889 1.00 0.00 H +ATOM 804 HB2 LEU A 50 26.070 19.802 21.023 1.00 0.00 H +ATOM 805 HB3 LEU A 50 24.754 19.072 20.539 1.00 0.00 H +ATOM 806 HG LEU A 50 25.278 20.165 23.204 1.00 0.00 H +ATOM 807 HD11 LEU A 50 24.438 21.608 21.329 1.00 0.00 H +ATOM 808 HD12 LEU A 50 23.044 20.671 21.149 1.00 0.00 H +ATOM 809 HD13 LEU A 50 23.227 21.626 22.646 1.00 0.00 H +ATOM 810 HD21 LEU A 50 23.082 18.139 22.391 1.00 0.00 H +ATOM 811 HD22 LEU A 50 24.215 18.031 23.638 1.00 0.00 H +ATOM 812 HD23 LEU A 50 22.918 19.202 23.854 1.00 0.00 H +ATOM 813 N GLU A 51 26.271 16.537 19.569 1.00 0.00 N +ATOM 814 CA GLU A 51 27.070 15.621 18.786 1.00 0.00 C +ATOM 815 C GLU A 51 26.560 15.863 17.359 1.00 0.00 C +ATOM 816 O GLU A 51 25.472 16.388 17.125 1.00 0.00 O +ATOM 817 CB GLU A 51 27.009 14.179 19.292 1.00 0.00 C +ATOM 818 CG GLU A 51 27.611 13.851 20.658 1.00 0.00 C +ATOM 819 CD GLU A 51 29.129 13.769 20.780 1.00 0.00 C +ATOM 820 OE1 GLU A 51 29.801 14.579 20.097 1.00 0.00 O +ATOM 821 OE2 GLU A 51 29.666 12.918 21.508 1.00 0.00 O +ATOM 822 H GLU A 51 25.259 16.325 19.531 1.00 0.00 H +ATOM 823 HA GLU A 51 28.162 15.875 18.803 1.00 0.00 H +ATOM 824 HB2 GLU A 51 25.954 13.957 19.443 1.00 0.00 H +ATOM 825 HB3 GLU A 51 27.408 13.463 18.567 1.00 0.00 H +ATOM 826 HG2 GLU A 51 27.326 14.651 21.333 1.00 0.00 H +ATOM 827 HG3 GLU A 51 27.089 13.080 21.218 1.00 0.00 H +ATOM 828 N ASP A 52 27.437 15.509 16.423 1.00 0.00 N +ATOM 829 CA ASP A 52 27.147 15.482 14.996 1.00 0.00 C +ATOM 830 C ASP A 52 25.989 14.533 14.687 1.00 0.00 C +ATOM 831 O ASP A 52 25.841 13.473 15.286 1.00 0.00 O +ATOM 832 CB ASP A 52 28.418 15.323 14.166 1.00 0.00 C +ATOM 833 CG ASP A 52 29.032 13.932 14.215 1.00 0.00 C +ATOM 834 OD1 ASP A 52 29.527 13.509 15.284 1.00 0.00 O +ATOM 835 OD2 ASP A 52 29.048 13.254 13.173 1.00 0.00 O +ATOM 836 H ASP A 52 28.257 14.954 16.741 1.00 0.00 H +ATOM 837 HA ASP A 52 26.840 16.531 14.763 1.00 0.00 H +ATOM 838 HB2 ASP A 52 28.148 15.546 13.139 1.00 0.00 H +ATOM 839 HB3 ASP A 52 29.300 15.929 14.381 1.00 0.00 H +ATOM 840 N GLY A 53 25.148 14.994 13.757 1.00 0.00 N +ATOM 841 CA GLY A 53 24.234 14.089 13.091 1.00 0.00 C +ATOM 842 C GLY A 53 22.837 14.642 13.360 1.00 0.00 C +ATOM 843 O GLY A 53 21.983 14.754 12.481 1.00 0.00 O +ATOM 844 H GLY A 53 25.419 15.874 13.283 1.00 0.00 H +ATOM 845 HA2 GLY A 53 24.441 14.009 11.990 1.00 0.00 H +ATOM 846 HA3 GLY A 53 24.184 13.050 13.517 1.00 0.00 H +ATOM 847 N ARG A 54 22.636 14.962 14.636 1.00 0.00 N +ATOM 848 CA ARG A 54 21.347 15.227 15.226 1.00 0.00 C +ATOM 849 C ARG A 54 21.106 16.735 15.369 1.00 0.00 C +ATOM 850 O ARG A 54 21.895 17.541 14.881 1.00 0.00 O +ATOM 851 CB ARG A 54 21.268 14.574 16.602 1.00 0.00 C +ATOM 852 CG ARG A 54 21.718 13.105 16.642 1.00 0.00 C +ATOM 853 CD ARG A 54 21.534 12.439 18.006 1.00 0.00 C +ATOM 854 NE ARG A 54 22.722 11.797 18.581 1.00 0.00 N +ATOM 855 CZ ARG A 54 23.559 10.955 17.967 1.00 0.00 C +ATOM 856 NH1 ARG A 54 23.288 10.574 16.707 1.00 0.00 N +ATOM 857 NH2 ARG A 54 24.716 10.595 18.543 1.00 0.00 N +ATOM 858 H ARG A 54 23.464 15.006 15.258 1.00 0.00 H +ATOM 859 HA ARG A 54 20.591 14.785 14.525 1.00 0.00 H +ATOM 860 HB2 ARG A 54 21.885 15.160 17.286 1.00 0.00 H +ATOM 861 HB3 ARG A 54 20.231 14.668 16.928 1.00 0.00 H +ATOM 862 HG2 ARG A 54 21.028 12.559 16.001 1.00 0.00 H +ATOM 863 HG3 ARG A 54 22.766 12.942 16.404 1.00 0.00 H +ATOM 864 HD2 ARG A 54 21.143 13.180 18.708 1.00 0.00 H +ATOM 865 HD3 ARG A 54 20.760 11.696 17.858 1.00 0.00 H +ATOM 866 HE ARG A 54 22.929 12.063 19.532 1.00 0.00 H +ATOM 867 HH11 ARG A 54 22.351 10.550 16.334 1.00 0.00 H +ATOM 868 HH12 ARG A 54 23.763 9.877 16.159 1.00 0.00 H +ATOM 869 HH21 ARG A 54 24.974 10.917 19.461 1.00 0.00 H +ATOM 870 HH22 ARG A 54 25.463 10.222 17.974 1.00 0.00 H +ATOM 871 N THR A 55 19.933 17.145 15.819 1.00 0.00 N +ATOM 872 CA THR A 55 19.360 18.475 15.745 1.00 0.00 C +ATOM 873 C THR A 55 18.996 19.058 17.109 1.00 0.00 C +ATOM 874 O THR A 55 18.829 18.354 18.103 1.00 0.00 O +ATOM 875 CB THR A 55 18.112 18.607 14.885 1.00 0.00 C +ATOM 876 OG1 THR A 55 16.863 18.132 15.338 1.00 0.00 O +ATOM 877 CG2 THR A 55 18.362 18.267 13.418 1.00 0.00 C +ATOM 878 H THR A 55 19.232 16.440 16.141 1.00 0.00 H +ATOM 879 HA THR A 55 20.193 19.160 15.417 1.00 0.00 H +ATOM 880 HB THR A 55 17.876 19.670 14.768 1.00 0.00 H +ATOM 881 HG1 THR A 55 17.005 17.269 15.698 1.00 0.00 H +ATOM 882 HG21 THR A 55 19.243 18.728 12.972 1.00 0.00 H +ATOM 883 HG22 THR A 55 18.577 17.226 13.198 1.00 0.00 H +ATOM 884 HG23 THR A 55 17.460 18.618 12.906 1.00 0.00 H +ATOM 885 N LEU A 56 18.828 20.384 17.182 1.00 0.00 N +ATOM 886 CA LEU A 56 18.381 21.015 18.405 1.00 0.00 C +ATOM 887 C LEU A 56 17.066 20.469 18.978 1.00 0.00 C +ATOM 888 O LEU A 56 17.015 20.274 20.190 1.00 0.00 O +ATOM 889 CB LEU A 56 18.281 22.496 18.050 1.00 0.00 C +ATOM 890 CG LEU A 56 19.413 23.268 17.371 1.00 0.00 C +ATOM 891 CD1 LEU A 56 18.893 24.308 16.377 1.00 0.00 C +ATOM 892 CD2 LEU A 56 20.368 23.778 18.446 1.00 0.00 C +ATOM 893 H LEU A 56 19.230 20.982 16.441 1.00 0.00 H +ATOM 894 HA LEU A 56 19.094 20.832 19.247 1.00 0.00 H +ATOM 895 HB2 LEU A 56 17.418 22.693 17.417 1.00 0.00 H +ATOM 896 HB3 LEU A 56 18.160 22.940 19.028 1.00 0.00 H +ATOM 897 HG LEU A 56 19.999 22.550 16.782 1.00 0.00 H +ATOM 898 HD11 LEU A 56 18.174 24.976 16.856 1.00 0.00 H +ATOM 899 HD12 LEU A 56 19.759 24.903 16.087 1.00 0.00 H +ATOM 900 HD13 LEU A 56 18.426 23.882 15.491 1.00 0.00 H +ATOM 901 HD21 LEU A 56 20.753 22.929 19.008 1.00 0.00 H +ATOM 902 HD22 LEU A 56 21.237 24.339 18.092 1.00 0.00 H +ATOM 903 HD23 LEU A 56 19.931 24.546 19.079 1.00 0.00 H +ATOM 904 N SER A 57 16.116 20.081 18.126 1.00 0.00 N +ATOM 905 CA SER A 57 14.856 19.436 18.409 1.00 0.00 C +ATOM 906 C SER A 57 15.100 18.131 19.158 1.00 0.00 C +ATOM 907 O SER A 57 14.414 17.844 20.138 1.00 0.00 O +ATOM 908 CB SER A 57 14.177 19.322 17.046 1.00 0.00 C +ATOM 909 OG SER A 57 12.859 18.803 17.080 1.00 0.00 O +ATOM 910 H SER A 57 16.214 20.348 17.122 1.00 0.00 H +ATOM 911 HA SER A 57 14.228 20.028 19.120 1.00 0.00 H +ATOM 912 HB2 SER A 57 14.092 20.337 16.646 1.00 0.00 H +ATOM 913 HB3 SER A 57 14.842 18.706 16.449 1.00 0.00 H +ATOM 914 HG SER A 57 12.300 19.291 17.663 1.00 0.00 H +ATOM 915 N ASP A 58 16.043 17.283 18.733 1.00 0.00 N +ATOM 916 CA ASP A 58 16.275 16.007 19.382 1.00 0.00 C +ATOM 917 C ASP A 58 16.665 16.113 20.857 1.00 0.00 C +ATOM 918 O ASP A 58 16.328 15.273 21.684 1.00 0.00 O +ATOM 919 CB ASP A 58 17.376 15.295 18.607 1.00 0.00 C +ATOM 920 CG ASP A 58 17.195 14.831 17.161 1.00 0.00 C +ATOM 921 OD1 ASP A 58 16.441 13.870 16.874 1.00 0.00 O +ATOM 922 OD2 ASP A 58 17.711 15.543 16.278 1.00 0.00 O +ATOM 923 H ASP A 58 16.478 17.563 17.843 1.00 0.00 H +ATOM 924 HA ASP A 58 15.353 15.358 19.373 1.00 0.00 H +ATOM 925 HB2 ASP A 58 18.325 15.781 18.840 1.00 0.00 H +ATOM 926 HB3 ASP A 58 17.478 14.352 19.140 1.00 0.00 H +ATOM 927 N TYR A 59 17.453 17.148 21.107 1.00 0.00 N +ATOM 928 CA TYR A 59 17.937 17.597 22.394 1.00 0.00 C +ATOM 929 C TYR A 59 17.037 18.620 23.106 1.00 0.00 C +ATOM 930 O TYR A 59 17.561 19.209 24.044 1.00 0.00 O +ATOM 931 CB TYR A 59 19.347 18.167 22.273 1.00 0.00 C +ATOM 932 CG TYR A 59 20.357 17.351 21.498 1.00 0.00 C +ATOM 933 CD1 TYR A 59 20.813 16.181 22.131 1.00 0.00 C +ATOM 934 CD2 TYR A 59 20.890 17.764 20.265 1.00 0.00 C +ATOM 935 CE1 TYR A 59 21.803 15.428 21.499 1.00 0.00 C +ATOM 936 CE2 TYR A 59 21.958 17.041 19.717 1.00 0.00 C +ATOM 937 CZ TYR A 59 22.484 15.915 20.373 1.00 0.00 C +ATOM 938 OH TYR A 59 23.605 15.310 19.898 1.00 0.00 O +ATOM 939 H TYR A 59 17.635 17.766 20.282 1.00 0.00 H +ATOM 940 HA TYR A 59 18.010 16.714 23.073 1.00 0.00 H +ATOM 941 HB2 TYR A 59 19.412 19.224 21.999 1.00 0.00 H +ATOM 942 HB3 TYR A 59 19.594 18.224 23.329 1.00 0.00 H +ATOM 943 HD1 TYR A 59 20.352 15.810 23.034 1.00 0.00 H +ATOM 944 HD2 TYR A 59 20.479 18.549 19.666 1.00 0.00 H +ATOM 945 HE1 TYR A 59 22.187 14.607 22.084 1.00 0.00 H +ATOM 946 HE2 TYR A 59 22.296 17.319 18.740 1.00 0.00 H +ATOM 947 HH TYR A 59 23.747 14.447 20.258 1.00 0.00 H +ATOM 948 N ASN A 60 15.790 18.797 22.693 1.00 0.00 N +ATOM 949 CA ASN A 60 14.619 19.375 23.316 1.00 0.00 C +ATOM 950 C ASN A 60 14.771 20.896 23.422 1.00 0.00 C +ATOM 951 O ASN A 60 13.986 21.546 24.117 1.00 0.00 O +ATOM 952 CB ASN A 60 14.347 18.612 24.617 1.00 0.00 C +ATOM 953 CG ASN A 60 13.817 17.192 24.476 1.00 0.00 C +ATOM 954 OD1 ASN A 60 14.693 16.357 24.257 1.00 0.00 O +ATOM 955 ND2 ASN A 60 12.506 16.945 24.406 1.00 0.00 N +ATOM 956 H ASN A 60 15.591 18.256 21.822 1.00 0.00 H +ATOM 957 HA ASN A 60 13.831 19.182 22.541 1.00 0.00 H +ATOM 958 HB2 ASN A 60 15.207 18.659 25.282 1.00 0.00 H +ATOM 959 HB3 ASN A 60 13.661 19.296 25.119 1.00 0.00 H +ATOM 960 HD21 ASN A 60 11.889 17.729 24.706 1.00 0.00 H +ATOM 961 HD22 ASN A 60 12.183 15.969 24.236 1.00 0.00 H +ATOM 962 N ILE A 61 15.752 21.515 22.790 1.00 0.00 N +ATOM 963 CA ILE A 61 16.175 22.904 22.700 1.00 0.00 C +ATOM 964 C ILE A 61 14.998 23.788 22.288 1.00 0.00 C +ATOM 965 O ILE A 61 14.210 23.506 21.384 1.00 0.00 O +ATOM 966 CB ILE A 61 17.433 23.123 21.869 1.00 0.00 C +ATOM 967 CG1 ILE A 61 18.502 22.158 22.401 1.00 0.00 C +ATOM 968 CG2 ILE A 61 18.002 24.534 21.989 1.00 0.00 C +ATOM 969 CD1 ILE A 61 19.924 22.449 21.932 1.00 0.00 C +ATOM 970 H ILE A 61 16.415 20.958 22.206 1.00 0.00 H +ATOM 971 HA ILE A 61 16.384 23.393 23.681 1.00 0.00 H +ATOM 972 HB ILE A 61 17.001 22.975 20.871 1.00 0.00 H +ATOM 973 HG12 ILE A 61 18.540 22.152 23.492 1.00 0.00 H +ATOM 974 HG13 ILE A 61 18.327 21.111 22.156 1.00 0.00 H +ATOM 975 HG21 ILE A 61 17.278 25.343 21.914 1.00 0.00 H +ATOM 976 HG22 ILE A 61 18.496 24.722 22.939 1.00 0.00 H +ATOM 977 HG23 ILE A 61 18.692 24.902 21.219 1.00 0.00 H +ATOM 978 HD11 ILE A 61 20.078 22.600 20.867 1.00 0.00 H +ATOM 979 HD12 ILE A 61 20.287 23.322 22.471 1.00 0.00 H +ATOM 980 HD13 ILE A 61 20.649 21.650 22.100 1.00 0.00 H +ATOM 981 N GLN A 62 14.816 24.923 22.959 1.00 0.00 N +ATOM 982 CA GLN A 62 13.642 25.758 23.106 1.00 0.00 C +ATOM 983 C GLN A 62 14.019 27.243 23.178 1.00 0.00 C +ATOM 984 O GLN A 62 15.171 27.658 23.258 1.00 0.00 O +ATOM 985 CB GLN A 62 12.856 25.346 24.347 1.00 0.00 C +ATOM 986 CG GLN A 62 11.784 24.295 24.020 1.00 0.00 C +ATOM 987 CD GLN A 62 10.526 24.845 23.377 1.00 0.00 C +ATOM 988 OE1 GLN A 62 10.564 25.954 22.853 1.00 0.00 O +ATOM 989 NE2 GLN A 62 9.442 24.073 23.398 1.00 0.00 N +ATOM 990 H GLN A 62 15.542 25.278 23.624 1.00 0.00 H +ATOM 991 HA GLN A 62 13.152 25.500 22.140 1.00 0.00 H +ATOM 992 HB2 GLN A 62 13.500 25.027 25.161 1.00 0.00 H +ATOM 993 HB3 GLN A 62 12.193 26.119 24.743 1.00 0.00 H +ATOM 994 HG2 GLN A 62 12.258 23.460 23.498 1.00 0.00 H +ATOM 995 HG3 GLN A 62 11.453 23.946 24.992 1.00 0.00 H +ATOM 996 HE21 GLN A 62 9.446 23.146 23.856 1.00 0.00 H +ATOM 997 HE22 GLN A 62 8.494 24.406 23.137 1.00 0.00 H +ATOM 998 N LYS A 63 12.948 28.015 23.366 1.00 0.00 N +ATOM 999 CA LYS A 63 12.861 29.428 23.669 1.00 0.00 C +ATOM 1000 C LYS A 63 13.707 29.868 24.865 1.00 0.00 C +ATOM 1001 O LYS A 63 13.427 29.664 26.047 1.00 0.00 O +ATOM 1002 CB LYS A 63 11.389 29.811 23.537 1.00 0.00 C +ATOM 1003 CG LYS A 63 11.145 31.260 23.927 1.00 0.00 C +ATOM 1004 CD LYS A 63 9.674 31.686 23.879 1.00 0.00 C +ATOM 1005 CE LYS A 63 9.430 33.127 24.342 1.00 0.00 C +ATOM 1006 NZ LYS A 63 8.025 33.336 24.724 1.00 0.00 N +ATOM 1007 H LYS A 63 12.053 27.491 23.220 1.00 0.00 H +ATOM 1008 HA LYS A 63 13.421 29.967 22.860 1.00 0.00 H +ATOM 1009 HB2 LYS A 63 11.158 29.654 22.482 1.00 0.00 H +ATOM 1010 HB3 LYS A 63 10.602 29.215 24.001 1.00 0.00 H +ATOM 1011 HG2 LYS A 63 11.438 31.174 24.974 1.00 0.00 H +ATOM 1012 HG3 LYS A 63 11.689 31.990 23.328 1.00 0.00 H +ATOM 1013 HD2 LYS A 63 9.259 31.562 22.888 1.00 0.00 H +ATOM 1014 HD3 LYS A 63 9.048 31.039 24.494 1.00 0.00 H +ATOM 1015 HE2 LYS A 63 9.967 33.510 25.206 1.00 0.00 H +ATOM 1016 HE3 LYS A 63 9.650 33.805 23.520 1.00 0.00 H +ATOM 1017 HZ1 LYS A 63 7.316 33.036 24.057 1.00 0.00 H +ATOM 1018 HZ2 LYS A 63 7.960 32.756 25.548 1.00 0.00 H +ATOM 1019 HZ3 LYS A 63 7.871 34.308 24.944 1.00 0.00 H +ATOM 1020 N GLU A 64 14.827 30.531 24.591 1.00 0.00 N +ATOM 1021 CA GLU A 64 15.833 31.017 25.514 1.00 0.00 C +ATOM 1022 C GLU A 64 16.670 29.905 26.147 1.00 0.00 C +ATOM 1023 O GLU A 64 17.267 30.159 27.186 1.00 0.00 O +ATOM 1024 CB GLU A 64 15.260 31.957 26.568 1.00 0.00 C +ATOM 1025 CG GLU A 64 16.178 33.108 26.974 1.00 0.00 C +ATOM 1026 CD GLU A 64 15.807 33.679 28.339 1.00 0.00 C +ATOM 1027 OE1 GLU A 64 16.088 32.985 29.342 1.00 0.00 O +ATOM 1028 OE2 GLU A 64 15.036 34.670 28.389 1.00 0.00 O +ATOM 1029 H GLU A 64 14.928 30.797 23.597 1.00 0.00 H +ATOM 1030 HA GLU A 64 16.655 31.511 24.921 1.00 0.00 H +ATOM 1031 HB2 GLU A 64 14.245 32.301 26.347 1.00 0.00 H +ATOM 1032 HB3 GLU A 64 15.037 31.326 27.424 1.00 0.00 H +ATOM 1033 HG2 GLU A 64 17.211 32.768 27.106 1.00 0.00 H +ATOM 1034 HG3 GLU A 64 16.000 33.806 26.159 1.00 0.00 H +ATOM 1035 N SER A 65 16.782 28.701 25.586 1.00 0.00 N +ATOM 1036 CA SER A 65 17.652 27.619 26.013 1.00 0.00 C +ATOM 1037 C SER A 65 19.083 28.154 25.978 1.00 0.00 C +ATOM 1038 O SER A 65 19.547 28.613 24.933 1.00 0.00 O +ATOM 1039 CB SER A 65 17.532 26.400 25.090 1.00 0.00 C +ATOM 1040 OG SER A 65 16.365 25.689 25.417 1.00 0.00 O +ATOM 1041 H SER A 65 16.209 28.556 24.742 1.00 0.00 H +ATOM 1042 HA SER A 65 17.439 27.311 27.067 1.00 0.00 H +ATOM 1043 HB2 SER A 65 17.558 26.815 24.082 1.00 0.00 H +ATOM 1044 HB3 SER A 65 18.352 25.687 25.058 1.00 0.00 H +ATOM 1045 HG SER A 65 16.272 25.576 26.353 1.00 0.00 H +ATOM 1046 N THR A 66 19.762 28.158 27.119 1.00 0.00 N +ATOM 1047 CA THR A 66 21.132 28.574 27.377 1.00 0.00 C +ATOM 1048 C THR A 66 22.024 27.339 27.261 1.00 0.00 C +ATOM 1049 O THR A 66 21.821 26.348 27.961 1.00 0.00 O +ATOM 1050 CB THR A 66 21.131 29.110 28.813 1.00 0.00 C +ATOM 1051 OG1 THR A 66 20.229 30.195 28.863 1.00 0.00 O +ATOM 1052 CG2 THR A 66 22.479 29.641 29.301 1.00 0.00 C +ATOM 1053 H THR A 66 19.273 27.709 27.922 1.00 0.00 H +ATOM 1054 HA THR A 66 21.398 29.423 26.694 1.00 0.00 H +ATOM 1055 HB THR A 66 20.831 28.333 29.519 1.00 0.00 H +ATOM 1056 HG1 THR A 66 19.513 29.867 28.343 1.00 0.00 H +ATOM 1057 HG21 THR A 66 23.223 28.864 29.122 1.00 0.00 H +ATOM 1058 HG22 THR A 66 22.734 30.536 28.738 1.00 0.00 H +ATOM 1059 HG23 THR A 66 22.459 29.694 30.390 1.00 0.00 H +ATOM 1060 N LEU A 67 22.991 27.456 26.361 1.00 0.00 N +ATOM 1061 CA LEU A 67 23.989 26.451 26.070 1.00 0.00 C +ATOM 1062 C LEU A 67 25.363 26.975 26.487 1.00 0.00 C +ATOM 1063 O LEU A 67 25.524 28.176 26.712 1.00 0.00 O +ATOM 1064 CB LEU A 67 23.911 26.151 24.572 1.00 0.00 C +ATOM 1065 CG LEU A 67 22.842 25.205 24.040 1.00 0.00 C +ATOM 1066 CD1 LEU A 67 21.432 25.789 24.096 1.00 0.00 C +ATOM 1067 CD2 LEU A 67 23.228 24.736 22.634 1.00 0.00 C +ATOM 1068 H LEU A 67 23.042 28.370 25.856 1.00 0.00 H +ATOM 1069 HA LEU A 67 23.888 25.542 26.714 1.00 0.00 H +ATOM 1070 HB2 LEU A 67 23.884 27.067 23.974 1.00 0.00 H +ATOM 1071 HB3 LEU A 67 24.811 25.634 24.235 1.00 0.00 H +ATOM 1072 HG LEU A 67 22.941 24.325 24.661 1.00 0.00 H +ATOM 1073 HD11 LEU A 67 21.358 26.844 23.820 1.00 0.00 H +ATOM 1074 HD12 LEU A 67 20.857 25.161 23.409 1.00 0.00 H +ATOM 1075 HD13 LEU A 67 21.050 25.682 25.113 1.00 0.00 H +ATOM 1076 HD21 LEU A 67 24.231 24.299 22.636 1.00 0.00 H +ATOM 1077 HD22 LEU A 67 22.698 23.870 22.236 1.00 0.00 H +ATOM 1078 HD23 LEU A 67 23.133 25.564 21.937 1.00 0.00 H +ATOM 1079 N HIS A 68 26.409 26.157 26.481 1.00 0.00 N +ATOM 1080 CA HIS A 68 27.742 26.435 26.983 1.00 0.00 C +ATOM 1081 C HIS A 68 28.818 25.935 26.005 1.00 0.00 C +ATOM 1082 O HIS A 68 28.607 24.938 25.315 1.00 0.00 O +ATOM 1083 CB HIS A 68 28.098 25.952 28.390 1.00 0.00 C +ATOM 1084 CG HIS A 68 26.901 25.438 29.119 1.00 0.00 C +ATOM 1085 ND1 HIS A 68 26.448 24.125 29.013 1.00 0.00 N +ATOM 1086 CD2 HIS A 68 26.035 26.117 29.941 1.00 0.00 C +ATOM 1087 CE1 HIS A 68 25.300 24.072 29.696 1.00 0.00 C +ATOM 1088 NE2 HIS A 68 24.971 25.272 30.203 1.00 0.00 N +ATOM 1089 H HIS A 68 26.162 25.202 26.177 1.00 0.00 H +ATOM 1090 HA HIS A 68 27.839 27.542 27.076 1.00 0.00 H +ATOM 1091 HB2 HIS A 68 28.896 25.217 28.416 1.00 0.00 H +ATOM 1092 HB3 HIS A 68 28.576 26.755 28.967 1.00 0.00 H +ATOM 1093 HD2 HIS A 68 25.910 27.123 30.300 1.00 0.00 H +ATOM 1094 HE1 HIS A 68 24.614 23.240 29.789 1.00 0.00 H +ATOM 1095 HE2 HIS A 68 24.117 25.461 30.710 1.00 0.00 H +ATOM 1096 N LEU A 69 29.920 26.670 25.895 1.00 0.00 N +ATOM 1097 CA LEU A 69 30.809 26.557 24.758 1.00 0.00 C +ATOM 1098 C LEU A 69 32.222 26.313 25.287 1.00 0.00 C +ATOM 1099 O LEU A 69 32.864 27.261 25.741 1.00 0.00 O +ATOM 1100 CB LEU A 69 30.642 27.800 23.881 1.00 0.00 C +ATOM 1101 CG LEU A 69 31.392 27.696 22.555 1.00 0.00 C +ATOM 1102 CD1 LEU A 69 30.644 28.664 21.631 1.00 0.00 C +ATOM 1103 CD2 LEU A 69 32.905 27.916 22.556 1.00 0.00 C +ATOM 1104 H LEU A 69 30.116 27.485 26.509 1.00 0.00 H +ATOM 1105 HA LEU A 69 30.426 25.686 24.152 1.00 0.00 H +ATOM 1106 HB2 LEU A 69 29.566 27.970 23.899 1.00 0.00 H +ATOM 1107 HB3 LEU A 69 31.037 28.635 24.461 1.00 0.00 H +ATOM 1108 HG LEU A 69 31.395 26.689 22.136 1.00 0.00 H +ATOM 1109 HD11 LEU A 69 30.380 29.527 22.251 1.00 0.00 H +ATOM 1110 HD12 LEU A 69 31.280 28.906 20.778 1.00 0.00 H +ATOM 1111 HD13 LEU A 69 29.700 28.325 21.205 1.00 0.00 H +ATOM 1112 HD21 LEU A 69 33.322 28.326 23.476 1.00 0.00 H +ATOM 1113 HD22 LEU A 69 33.408 26.953 22.613 1.00 0.00 H +ATOM 1114 HD23 LEU A 69 33.259 28.416 21.658 1.00 0.00 H +ATOM 1115 N VAL A 70 32.710 25.082 25.222 1.00 0.00 N +ATOM 1116 CA VAL A 70 34.089 24.741 25.528 1.00 0.00 C +ATOM 1117 C VAL A 70 34.952 24.893 24.275 1.00 0.00 C +ATOM 1118 O VAL A 70 34.713 24.366 23.186 1.00 0.00 O +ATOM 1119 CB VAL A 70 34.097 23.335 26.131 1.00 0.00 C +ATOM 1120 CG1 VAL A 70 33.751 23.289 27.618 1.00 0.00 C +ATOM 1121 CG2 VAL A 70 33.339 22.225 25.401 1.00 0.00 C +ATOM 1122 H VAL A 70 32.115 24.411 24.695 1.00 0.00 H +ATOM 1123 HA VAL A 70 34.460 25.480 26.278 1.00 0.00 H +ATOM 1124 HB VAL A 70 35.114 22.956 26.204 1.00 0.00 H +ATOM 1125 HG11 VAL A 70 32.885 23.920 27.836 1.00 0.00 H +ATOM 1126 HG12 VAL A 70 33.635 22.272 27.981 1.00 0.00 H +ATOM 1127 HG13 VAL A 70 34.559 23.757 28.182 1.00 0.00 H +ATOM 1128 HG21 VAL A 70 33.702 22.267 24.366 1.00 0.00 H +ATOM 1129 HG22 VAL A 70 33.447 21.185 25.701 1.00 0.00 H +ATOM 1130 HG23 VAL A 70 32.277 22.420 25.499 1.00 0.00 H +ATOM 1131 N LEU A 71 36.043 25.635 24.448 1.00 0.00 N +ATOM 1132 CA LEU A 71 37.053 25.786 23.424 1.00 0.00 C +ATOM 1133 C LEU A 71 38.099 24.708 23.719 1.00 0.00 C +ATOM 1134 O LEU A 71 38.784 24.736 24.744 1.00 0.00 O +ATOM 1135 CB LEU A 71 37.638 27.170 23.735 1.00 0.00 C +ATOM 1136 CG LEU A 71 38.720 27.816 22.868 1.00 0.00 C +ATOM 1137 CD1 LEU A 71 38.347 27.880 21.385 1.00 0.00 C +ATOM 1138 CD2 LEU A 71 39.378 29.078 23.414 1.00 0.00 C +ATOM 1139 H LEU A 71 36.150 26.141 25.344 1.00 0.00 H +ATOM 1140 HA LEU A 71 36.844 25.743 22.327 1.00 0.00 H +ATOM 1141 HB2 LEU A 71 36.789 27.857 23.753 1.00 0.00 H +ATOM 1142 HB3 LEU A 71 38.097 27.201 24.720 1.00 0.00 H +ATOM 1143 HG LEU A 71 39.575 27.139 22.963 1.00 0.00 H +ATOM 1144 HD11 LEU A 71 37.336 28.276 21.269 1.00 0.00 H +ATOM 1145 HD12 LEU A 71 38.927 28.621 20.849 1.00 0.00 H +ATOM 1146 HD13 LEU A 71 38.345 26.962 20.795 1.00 0.00 H +ATOM 1147 HD21 LEU A 71 39.793 28.822 24.388 1.00 0.00 H +ATOM 1148 HD22 LEU A 71 40.207 29.470 22.824 1.00 0.00 H +ATOM 1149 HD23 LEU A 71 38.674 29.897 23.583 1.00 0.00 H +ATOM 1150 N ARG A 72 38.248 23.724 22.834 1.00 0.00 N +ATOM 1151 CA ARG A 72 39.346 22.800 22.674 1.00 0.00 C +ATOM 1152 C ARG A 72 39.351 21.612 23.640 1.00 0.00 C +ATOM 1153 O ARG A 72 39.452 20.464 23.209 1.00 0.00 O +ATOM 1154 CB ARG A 72 40.708 23.476 22.520 1.00 0.00 C +ATOM 1155 CG ARG A 72 41.765 22.535 21.955 1.00 0.00 C +ATOM 1156 CD ARG A 72 43.106 23.257 21.808 1.00 0.00 C +ATOM 1157 NE ARG A 72 44.151 22.256 21.576 1.00 0.00 N +ATOM 1158 CZ ARG A 72 44.702 21.860 20.417 1.00 0.00 C +ATOM 1159 NH1 ARG A 72 44.230 22.300 19.249 1.00 0.00 N +ATOM 1160 NH2 ARG A 72 45.795 21.092 20.432 1.00 0.00 N +ATOM 1161 H ARG A 72 37.606 23.704 22.015 1.00 0.00 H +ATOM 1162 HA ARG A 72 39.026 22.335 21.704 1.00 0.00 H +ATOM 1163 HB2 ARG A 72 40.640 24.246 21.751 1.00 0.00 H +ATOM 1164 HB3 ARG A 72 40.867 23.944 23.493 1.00 0.00 H +ATOM 1165 HG2 ARG A 72 41.966 21.631 22.535 1.00 0.00 H +ATOM 1166 HG3 ARG A 72 41.487 22.302 20.931 1.00 0.00 H +ATOM 1167 HD2 ARG A 72 43.138 23.906 20.933 1.00 0.00 H +ATOM 1168 HD3 ARG A 72 43.334 23.832 22.704 1.00 0.00 H +ATOM 1169 HE ARG A 72 44.536 21.834 22.396 1.00 0.00 H +ATOM 1170 HH11 ARG A 72 43.284 22.654 19.175 1.00 0.00 H +ATOM 1171 HH12 ARG A 72 44.701 22.133 18.372 1.00 0.00 H +ATOM 1172 HH21 ARG A 72 46.235 20.841 21.306 1.00 0.00 H +ATOM 1173 HH22 ARG A 72 45.971 20.474 19.649 1.00 0.00 H +ATOM 1174 N LEU A 73 39.260 21.872 24.945 1.00 0.00 N +ATOM 1175 CA LEU A 73 39.236 20.941 26.055 1.00 0.00 C +ATOM 1176 C LEU A 73 37.858 20.274 25.996 1.00 0.00 C +ATOM 1177 O LEU A 73 36.861 20.938 25.722 1.00 0.00 O +ATOM 1178 CB LEU A 73 39.353 21.691 27.385 1.00 0.00 C +ATOM 1179 CG LEU A 73 39.372 20.692 28.542 1.00 0.00 C +ATOM 1180 CD1 LEU A 73 40.807 20.424 28.971 1.00 0.00 C +ATOM 1181 CD2 LEU A 73 38.520 21.323 29.649 1.00 0.00 C +ATOM 1182 H LEU A 73 39.036 22.856 25.195 1.00 0.00 H +ATOM 1183 HA LEU A 73 40.030 20.176 25.872 1.00 0.00 H +ATOM 1184 HB2 LEU A 73 40.304 22.219 27.422 1.00 0.00 H +ATOM 1185 HB3 LEU A 73 38.549 22.417 27.527 1.00 0.00 H +ATOM 1186 HG LEU A 73 38.846 19.761 28.379 1.00 0.00 H +ATOM 1187 HD11 LEU A 73 41.439 20.072 28.155 1.00 0.00 H +ATOM 1188 HD12 LEU A 73 41.288 21.350 29.281 1.00 0.00 H +ATOM 1189 HD13 LEU A 73 40.886 19.581 29.671 1.00 0.00 H +ATOM 1190 HD21 LEU A 73 38.685 22.397 29.722 1.00 0.00 H +ATOM 1191 HD22 LEU A 73 37.478 21.237 29.345 1.00 0.00 H +ATOM 1192 HD23 LEU A 73 38.800 20.932 30.625 1.00 0.00 H +ATOM 1193 N ARG A 74 37.868 18.970 26.228 1.00 0.00 N +ATOM 1194 CA ARG A 74 36.695 18.117 26.239 1.00 0.00 C +ATOM 1195 C ARG A 74 36.571 17.751 27.724 1.00 0.00 C +ATOM 1196 O ARG A 74 37.573 17.306 28.276 1.00 0.00 O +ATOM 1197 CB ARG A 74 37.093 16.846 25.481 1.00 0.00 C +ATOM 1198 CG ARG A 74 35.987 15.794 25.464 1.00 0.00 C +ATOM 1199 CD ARG A 74 36.270 14.691 24.444 1.00 0.00 C +ATOM 1200 NE ARG A 74 35.568 13.465 24.806 1.00 0.00 N +ATOM 1201 CZ ARG A 74 35.929 12.386 25.531 1.00 0.00 C +ATOM 1202 NH1 ARG A 74 37.049 12.331 26.265 1.00 0.00 N +ATOM 1203 NH2 ARG A 74 35.238 11.250 25.665 1.00 0.00 N +ATOM 1204 H ARG A 74 38.748 18.478 26.480 1.00 0.00 H +ATOM 1205 HA ARG A 74 35.754 18.598 25.869 1.00 0.00 H +ATOM 1206 HB2 ARG A 74 37.070 17.161 24.430 1.00 0.00 H +ATOM 1207 HB3 ARG A 74 38.017 16.340 25.761 1.00 0.00 H +ATOM 1208 HG2 ARG A 74 35.973 15.372 26.469 1.00 0.00 H +ATOM 1209 HG3 ARG A 74 35.052 16.294 25.217 1.00 0.00 H +ATOM 1210 HD2 ARG A 74 35.869 15.041 23.490 1.00 0.00 H +ATOM 1211 HD3 ARG A 74 37.332 14.487 24.418 1.00 0.00 H +ATOM 1212 HE ARG A 74 34.630 13.368 24.441 1.00 0.00 H +ATOM 1213 HH11 ARG A 74 37.665 13.126 26.356 1.00 0.00 H +ATOM 1214 HH12 ARG A 74 37.280 11.511 26.799 1.00 0.00 H +ATOM 1215 HH21 ARG A 74 34.436 11.032 25.091 1.00 0.00 H +ATOM 1216 HH22 ARG A 74 35.495 10.471 26.256 1.00 0.00 H +ATOM 1217 N GLY A 75 35.369 17.822 28.292 1.00 0.00 N +ATOM 1218 CA GLY A 75 35.335 17.811 29.745 1.00 0.00 C +ATOM 1219 C GLY A 75 34.890 19.196 30.200 1.00 0.00 C +ATOM 1220 O GLY A 75 33.814 19.656 29.825 1.00 0.00 O +ATOM 1221 H GLY A 75 34.511 18.080 27.774 1.00 0.00 H +ATOM 1222 HA2 GLY A 75 34.476 17.130 29.977 1.00 0.00 H +ATOM 1223 HA3 GLY A 75 36.246 17.459 30.286 1.00 0.00 H +ATOM 1224 N GLY A 76 35.687 19.883 31.014 1.00 0.00 N +ATOM 1225 CA GLY A 76 35.308 21.159 31.570 1.00 0.00 C +ATOM 1226 C GLY A 76 35.113 21.093 33.088 1.00 0.00 C +ATOM 1227 O GLY A 76 35.613 20.095 33.653 1.00 0.00 O +ATOM 1228 OXT GLY A 76 34.450 21.993 33.645 1.00 0.00 O +ATOM 1229 H GLY A 76 36.612 19.476 31.237 1.00 0.00 H +ATOM 1230 HA2 GLY A 76 36.166 21.875 31.486 1.00 0.00 H +ATOM 1231 HA3 GLY A 76 34.384 21.658 31.165 1.00 0.00 H +TER 1232 GLY A 76 +END From 8a3b6387d249872fa7dfb75de5deae0bb3a9dcfe Mon Sep 17 00:00:00 2001 From: James Krieger Date: Thu, 19 Feb 2026 18:48:20 +0000 Subject: [PATCH 08/15] add scikit-learn-extra to environment yml for kmedoids --- environment.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/environment.yml b/environment.yml index 50dd9ab2a..c56444682 100644 --- a/environment.yml +++ b/environment.yml @@ -26,3 +26,4 @@ dependencies: - pip: - mmtf-python - scikit-learn + - scikit-learn-extra From ae6305cf2c7b162907eb61d3ce8fd8e8b35b9f91 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 20 Feb 2026 11:12:09 +0000 Subject: [PATCH 09/15] update scikit-learn and extra versions for numpy 2 --- environment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/environment.yml b/environment.yml index c56444682..93ae0a273 100644 --- a/environment.yml +++ b/environment.yml @@ -25,5 +25,5 @@ dependencies: - pip - pip: - mmtf-python - - scikit-learn - - scikit-learn-extra + - scikit-learn>=1.3 + - scikit-learn-extra>=0.4.0 # Newer versions support numpy 2.x From 5b1d8d7b0845b4fb4425773dc6200c713f39721c Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 20 Feb 2026 11:12:51 +0000 Subject: [PATCH 10/15] scikit-learn and extra to conda not pip --- environment.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/environment.yml b/environment.yml index 93ae0a273..7d1c47fcf 100644 --- a/environment.yml +++ b/environment.yml @@ -20,10 +20,10 @@ dependencies: - mdtraj - openmm - clustalw - + - scikit-learn>=1.3 + - scikit-learn-extra>=0.4.0 # Newer versions support numpy 2.x + # Pip packages - pip - pip: - mmtf-python - - scikit-learn>=1.3 - - scikit-learn-extra>=0.4.0 # Newer versions support numpy 2.x From 3072198576b16987ef589d41968719bdaa53bb77 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 20 Feb 2026 11:28:58 +0000 Subject: [PATCH 11/15] no higher scikit learn extra as copilot lied --- environment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/environment.yml b/environment.yml index 7d1c47fcf..8c07ba7b1 100644 --- a/environment.yml +++ b/environment.yml @@ -20,8 +20,8 @@ dependencies: - mdtraj - openmm - clustalw - - scikit-learn>=1.3 - - scikit-learn-extra>=0.4.0 # Newer versions support numpy 2.x + - scikit-learn + - scikit-learn-extra # Pip packages - pip From d566a9dbfb6f389458df73f08d012ae0874a0bf5 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 20 Feb 2026 11:45:40 +0000 Subject: [PATCH 12/15] numpy 2 compatible kmedoids --- environment.yml | 2 +- prody/utilities/catchall.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/environment.yml b/environment.yml index 8c07ba7b1..286e8dc80 100644 --- a/environment.yml +++ b/environment.yml @@ -21,7 +21,7 @@ dependencies: - openmm - clustalw - scikit-learn - - scikit-learn-extra + - kmedoids # Pip packages - pip diff --git a/prody/utilities/catchall.py b/prody/utilities/catchall.py index 16e033d77..0c3ba1eee 100644 --- a/prody/utilities/catchall.py +++ b/prody/utilities/catchall.py @@ -1247,14 +1247,14 @@ def calcRMSDclusters(rmsd_matrix, c, labels=None): calcGromosClusters = calcRMSDclusters calcGromacsClusters = calcRMSDclusters -def calcKmedoidClusters(coordsets, nClusters): +def calcKmedoidClusters(ensemble, nClusters): try: - from sklearn_extra.cluster import KMedoids + from kmedoids import KMedoids except ImportError: - raise ImportError('Please install scikit-learn-extra to run this function') + raise ImportError('Please install kmedoids to run this function') - X = coordsets.reshape(coordsets.shape[0], -1) - c = KMedoids(n_clusters=nClusters, random_state=0).fit(X) + rmsd_mat = ensemble.getRMSDs(pairwise=True) + c = KMedoids(n_clusters=nClusters, random_state=0).fit(rmsd_mat) labels = c.labels_ _, counts = np.unique(labels, return_counts=True) return c.medoid_indices_, labels, counts From 77be99945ae20f63cec5b92d43c312edbbffe66c Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 20 Feb 2026 11:54:49 +0000 Subject: [PATCH 13/15] fix lra app for new kmedoids --- environment.yml | 2 +- prody/apps/prody_apps/prody_lra.py | 6 ++++-- prody/tests/apps/test_prody_lra.py | 3 --- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/environment.yml b/environment.yml index 286e8dc80..488b93674 100644 --- a/environment.yml +++ b/environment.yml @@ -11,7 +11,7 @@ dependencies: - numpy - pyparsing<=3.1.1 - scipy - - matplotlib # REQUIRED: Prevents import errors and allows font caching + - matplotlib # REQUIRED: Prevents import errors and allows font caching and app outputs - nose - pytest - pytest-timeout # Added here for caching diff --git a/prody/apps/prody_apps/prody_lra.py b/prody/apps/prody_apps/prody_lra.py index a2d5f59e5..41c488edb 100644 --- a/prody/apps/prody_apps/prody_lra.py +++ b/prody/apps/prody_apps/prody_lra.py @@ -97,7 +97,9 @@ def prody_lra(coords, **kwargs): select.setCoords(dcd.getCoords()) lra = prody.LRA(dcd.getTitle()) - ensemble = dcd + ensemble = prody.Ensemble(dcd) + ensemble.setCoords(dcd.getCoords()) + ensemble.addCoordset(dcd.getCoordsets()) else: pdb = prody.parsePDB(coords) if pdb.numCoordsets() < 2: @@ -120,7 +122,7 @@ def prody_lra(coords, **kwargs): ensemble.iterpose() if labels is None: - _, labels, _ = prody.calcKmedoidClusters(ensemble.getCoordsets(), nmodes+1) + _, labels, _ = prody.calcKmedoidClusters(ensemble, nmodes+1) nproc = kwargs.get('nproc') if nproc: diff --git a/prody/tests/apps/test_prody_lra.py b/prody/tests/apps/test_prody_lra.py index ba19dd41f..b012a01d2 100644 --- a/prody/tests/apps/test_prody_lra.py +++ b/prody/tests/apps/test_prody_lra.py @@ -14,9 +14,6 @@ from prody.tests import MATPLOTLIB, NOPRODYCMD, WINDOWS -# NEW: Import ProDy functions to generate valid test data -from prody import parsePDB, writePDB, writeDCD - class TestLRACommand(TestCase): def setUp(self): From d4e6e83ec7fd7a521449ae91d8452404dd1d5a09 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 20 Feb 2026 11:57:13 +0000 Subject: [PATCH 14/15] document kmedoids --- prody/utilities/catchall.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/prody/utilities/catchall.py b/prody/utilities/catchall.py index 0c3ba1eee..81edaa857 100644 --- a/prody/utilities/catchall.py +++ b/prody/utilities/catchall.py @@ -1248,6 +1248,14 @@ def calcRMSDclusters(rmsd_matrix, c, labels=None): calcGromacsClusters = calcRMSDclusters def calcKmedoidClusters(ensemble, nClusters): + """ + calculate Kmedoids clusters for an ensemble + and return indices, labels and counts + + :arg ensemble: ensemble from which to calculate RMSDs + This needs to have reference coords + :type ensemble: :class:`.Ensemble`, :class:`.PDBEnsemble` + """ try: from kmedoids import KMedoids except ImportError: From 666f5fc695ced989e75c75ce71e39b7a8ec9de12 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Wed, 25 Feb 2026 11:55:42 +0000 Subject: [PATCH 15/15] add tests for lra itself --- prody/tests/dynamics/test_lra.py | 105 +++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 prody/tests/dynamics/test_lra.py diff --git a/prody/tests/dynamics/test_lra.py b/prody/tests/dynamics/test_lra.py new file mode 100644 index 000000000..7e2fe1f90 --- /dev/null +++ b/prody/tests/dynamics/test_lra.py @@ -0,0 +1,105 @@ +"""This module contains unit tests for :mod:`~prody.dynamics`.""" + +import numpy as np +from numpy.testing import assert_array_equal + +from prody.utilities import calcTree, findSubgroups +from prody.dynamics import LRA +from prody.ensemble import PDBEnsemble +from prody import LOGGER +from prody.tests import unittest +from prody.tests.datafiles import parseDatafile + +LOGGER.verbosity = 'none' + +ATOL = 1e-5 +RTOL = 0 + +ENSEMBLE = PDBEnsemble(parseDatafile('2k39_insty_dcd')) + +RMSD_MATRIX = ENSEMBLE.getRMSDs(pairwise=True) +RMSD_TREE = calcTree(ENSEMBLE.getLabels(), RMSD_MATRIX) + +SUBGROUPS_3P5 = findSubgroups(RMSD_TREE, 3.5) +TWO_CLASSES = [np.nonzero(np.array([i in sg for sg in SUBGROUPS_3P5]))[0][0] + for i in ENSEMBLE.getLabels()] + +SUBGROUPS_3P2 = findSubgroups(RMSD_TREE, 3.2) +THREE_CLASSES = [np.nonzero(np.array([i in sg for sg in SUBGROUPS_3P2]))[0][0] + for i in ENSEMBLE.getLabels()] + +# LRA specific setup +lra_two = None +lra_three = None +try: + lra_two = LRA() + lra_two.calcModes(ENSEMBLE, TWO_CLASSES) + + lra_three = LRA() + lra_three.calcModes(ENSEMBLE, THREE_CLASSES) + + SKLEARN_AVAILABLE = True +except ImportError: + SKLEARN_AVAILABLE = False + +class TestLRA(unittest.TestCase): + + @unittest.skipUnless(SKLEARN_AVAILABLE, "scikit-learn not available") + def setUp(self): + + self.model = LRA() + self.calcModes = self.model.calcModes + + @unittest.skipUnless(SKLEARN_AVAILABLE, "scikit-learn not available") + def testCalcCoordsWrongType(self): + """Test response to wrong type *coords* argument.""" + + self.assertRaises(TypeError, self.calcModes, 'nogood', TWO_CLASSES) + + @unittest.skipUnless(SKLEARN_AVAILABLE, "scikit-learn not available") + def testCalcWrongCoords(self): + """Test response to wrong coords.dtype.""" + + array = np.array([['a','a','a'] for _ in range(10)]) + self.assertRaises(ValueError, self.calcModes, array, TWO_CLASSES) + + @unittest.skipUnless(SKLEARN_AVAILABLE, "scikit-learn not available") + def testCalcLabelsWrongType(self): + """Test response to wrong type *coords* argument.""" + + self.assertRaises(TypeError, self.calcModes, ENSEMBLE, 'nogood') + + +class TestLRAResults(TestLRA): + + @unittest.skipUnless(SKLEARN_AVAILABLE, "scikit-learn not available") + def testCoefficients(self): + # Test that coefficients are calculated + coeffs = lra_two.getEigvecs() + self.assertIsNotNone(coeffs) + self.assertEqual(coeffs.shape[1], lra_two._n_modes) + + @unittest.skipUnless(SKLEARN_AVAILABLE, "scikit-learn not available") + def testEigenvals(self): + # Test that eigenvalues are set to ones + eigvals = lra_two.getEigvals() + assert_array_equal(eigvals, np.ones(lra_two._n_modes)) + + @unittest.skipUnless(SKLEARN_AVAILABLE, "scikit-learn not available") + def testNumModesTwoClasses(self): + # Test number of modes + expected_modes = len(set(TWO_CLASSES)) + if expected_modes == 2: + expected_modes = 1 + self.assertEqual(lra_two._n_modes, expected_modes) + + @unittest.skipUnless(SKLEARN_AVAILABLE, "scikit-learn not available") + def testNumModesThreeClasses(self): + # Since n_modes is automatic in LRA from classes, check it sets correctly + expected_modes = len(set(THREE_CLASSES)) + if expected_modes == 2: + expected_modes = 1 + self.assertEqual(lra_three._n_modes, expected_modes) + +if __name__ == '__main__': + unittest.main()