diff --git a/MANIFEST.in b/MANIFEST.in index 64ce3ca..6b4ae90 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -5,6 +5,8 @@ include LICENSE include README.md include CONTRIBUTING.md include DEVELOPMENT.md +include NOTICES +include moldesign/HISTORY.rst recursive-include moldesign/_static_data *.* recursive-include moldesign/_notebooks *.* global-exclude *.py[cod] __pycache__ *~ *.bak diff --git a/NOTICES b/NOTICES index 3aaf11b..f274cda 100644 --- a/NOTICES +++ b/NOTICES @@ -5,6 +5,7 @@ The Molecular Design Toolkit incorporates code from the following sources: Copyright (c) 2006-2015, Christoph Gohlke Copyright (c) 2006-2015, The Regents of the University of California SOURCE CODE: moldesign/external/transformations.py +DESCRIPTION: Included in its entirety, with minor modifications to imports LICENSE: moldesign/external/transformations.py WEBSITE: http://www.lfd.uci.edu/~gohlke/ @@ -13,10 +14,23 @@ WEBSITE: http://www.lfd.uci.edu/~gohlke/ ------------------------- Copyright (c) 2007-2016 by the Sphinx team SOURCE CODE: moldesign/utils/docparsers/google.py -Note that this source code has been heavily modified. Modifications are described in the file. +DESCRIPTION: Includes code derived from the Napoleon Google-style docstring parsers. +Note that these routines have been heavily modified as described in the file. LICENSE: moldesign/utils/docparsers/sphinxlicense WEBSITE: http://sphinx-doc.org + + Python +-------------------------------- +Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights +Reserved +SOURCE CODE: moldesign/utils/utils.py (`methodcaller` class) +DESCRIPTION: unmodified copy of the pure-python `methodcaller` class +LICENSE: moldesign/external/licenses/python +WEBSITE: https://www.python.org + + Versioneer ------------------------- By Brian Warner diff --git a/RELEASE.md b/RELEASE.md index deda84d..f9cd093 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,18 +1,62 @@ -# Creating new MDT project releases +# Whenever commiting changes anywhere + +Make SURE that you've run `set_filters.sh` at the project base. This will make sure that you don't accidentally commit any `ipynb` output fields into the repository. You can check to make sure the filters are working by running `git diff` on any notebook file that has output in it: all `output` and `metadata` fields should remain blank. + +# Creating a Pull Request These instructions generally apply to [Autodesk/molecular-design-toolkit](https://github.com/Autodesk/molecular-design-toolkit), [Autodesk/py-cloud-compute-cannon](https://github.com/Autodesk/py-cloud-compute-cannon), and [Autodesk/notebook-molecular-visualization](https://github.com/Autodesk/notebook-molecular-visualization). -This is only for project maintainers - everyone else should use PRs. +1. Group all changes in a single branch. +1. Run tests in `moldesign/_tests` with `py.test -n NCORES` where `NCORES` is the number of jobs to run simultanously. +2. Create a pull-request for the appropriate branch in Autodesk/molecular-design-toolkit + + +# Maintainers: Accepting a PR + +Work can be merged into `master` or a feature branch, as appropriate. Don't merge broken code +into master, but it doesn't need to be totally production-ready either: only releases (below) +are considered "stable". + +1. Review the code. +1. Make sure that there's appropriate functional tests. +1. Run all tests. They don't all *necessarily* need to pass, but you need to undertand why what's passing and what's not. +1. Run any example notebooks that might be affected by the PR. + + +# Maintainers: Creating a new release + +Decide on the new version number (using [semantic versioning](http://semver.org/)). + +Everything here is HIGHLY PRELIMINARY!!! This will be a lot easier once Travis/Jenkins is up. + +1. Make sure all changes have been PR'd into master +1. Check out a clean copy of master +1. Run `check-manifest` at project root to make sure the distribution will include the necessary files. +1. Increment the `default_version_tag` field in `moldesign.compute.config`, and commit the change +1. Tag your local branch with the release number: `git tag [version]` (note: delete this tag with `git tag rm [version]` if you need to abort the release) +4. Build new docker images: `cd docker_images; ./dockermake.py --all --repo docker.io/Autodesk/moldesign: --tag [version]` +1. Confirm that all tests are passing *with and without* locally installed dependencies (pyscf, openbabel, etc) +1. Confirm that all tutorial and example notebooks run without errors. + +If this is all succesfull - you're ready to make it public. + +1. Push docker images to cloud: `cd docker_images; ./dockermake.py --all --push --repo docker.io/Autodesk/moldesign: --tag [version]` +4. `python setup.py register -r pypi` +5. `python setup.py sdist upload -r pypi` +1. `git push origin master --tags` + +The final step is the point of no return - you'll need to prep a new release if you discover a problem. Before that, you can undo +what you've done by deleting your release off of PyPI and DockerHub. + + + +# Maintainers: updating docs -Everything here is HIGHLY PRELIMINARY!!! This will change dramatically once Jenkins or Travis is up. +Documentation is NOT coupled to the package releases; docs tend to get updated continuously. -1. Push changes or merge PR into dev branch and check out a clean copy. -1. Test it. -1. Run `check-manifest` at project root. (Repeat steps 1-3 until this checks out OK) -1. [MDT only] - update/push dockerfiles and image URLs in `moldesign.compute.configuration` -2. Pull-request into master -3. Tag master branch with new release number -4. In repo root. `python setup.py register -r pypi` -5. In repo root, `python setup.py sdist upload -r pypi` -6. [MDT only] Run `cd docs; make html` and push contents of `_build/html` to the gh-pages branch. \ No newline at end of file +1. In the `master` branch, update the version numbers in `docs/conf.py` +1. Run `cd docs; make clean; make html`. +1. In a separate directory, check out a fresh copy of the repo and run `git checkout gh-pages` +1. Copy the contents of `[master branch]/docs/_build/html` into the root of the `gh-pages` branch. +1. Commit your changes to the `gh-pages` branch and push them back to GitHub. diff --git a/docs/api/atoms.rst b/docs/api/atoms.rst new file mode 100644 index 0000000..ae69e59 --- /dev/null +++ b/docs/api/atoms.rst @@ -0,0 +1,6 @@ +============ +Atom objects +============ + +.. autoclass:: moldesign.Atom + :members: diff --git a/docs/biomolecule.rst b/docs/biomolecule.rst new file mode 100644 index 0000000..270f833 --- /dev/null +++ b/docs/biomolecule.rst @@ -0,0 +1,55 @@ +Biomolecular structure +====================== + + + +Primary structure +----------------- +**Class documentation:** :class:`moldesign.Chain`, :class:`moldesign.Residue` + +Biomolecules also contain primary structure information such as :class:`Chains ` +and :class:`Residues `. Chains can be accessed by name OR by index: + + >>> chain1 = molecule.chains['A'] + >>> chain2 = molecule.chains[0] + >>> chain1 is chain2 + True + +Each chain contains :class:`residues `. In a chain, residues can similarly be +accessed through a flat list or by name: + + >>> res0 = molecule.residues[0] + >>> resA = molecule.chains['A'].residues['PRO1'] + >>> res0 is resA + True + +A flat list of all residues in a molecule is also available at `molecule.residues`. + + + +Biomolecular assemblies +----------------------- +Many biomolecules in the PDB only contain a subset of the total biomolecular structure - the +remaining parts of the structure can be generated via `symmetry transformations `_. + +When you read in such a structure, MDT will issue a warning. + + >>> mol = mdt.from_pdb('3FPP') + WARNING: This PDB file contains the following biomolecular assemblies: + WARNING: Assembly "1": 3 copies of chains A, B + WARNING: Use ``mdt.build_assembly([molecule],[assembly_name])`` to build one of the above assemblies + +To create the full assembly, run + >>> assembly = mdt.build_assembly(mol,"1") + >>> assembly.draw() + + .. image:: img/howdoi_pdb_assm.png + +Note: + Only PDB-formatted files are currently supported for biomolecular assemblies - MMCif support + is in progress. + + + + + diff --git a/docs/conf.py b/docs/conf.py index b37dc36..1d99014 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -69,12 +69,12 @@ #source_encoding = 'utf-8-sig' # The master toctree document. -master_doc = 'contents' +master_doc = 'index' # General information about the project. project = u'Molecular Design Toolkit' copyright = u'2016 Autodesk Research' -author = u'Aaron Virshup, Dion Amago, Malte Tinnus (Bio/Nano Research Group, Autodesk)' +author = u'Aaron Virshup, Dion Amago, Justin McCandless, Malte Tinnus (Bio/Nano Research Group, Autodesk)' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the @@ -83,9 +83,9 @@ import moldesign # The short X.Y version. -version = moldesign.__version__ +version = '0.7' # The full version, including alpha/beta/rc tags. -release = moldesign.__version__ +release = '0.7.3' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/contents.rst b/docs/contents.rst deleted file mode 100644 index e2ebbbf..0000000 --- a/docs/contents.rst +++ /dev/null @@ -1,13 +0,0 @@ -.. toctree:: - :maxdepth: 3 - :caption: Contents - :name: mastertoc - - Introduction - Installation - How do I ...? - Atoms, molecules, and biomolecules - Complete API reference <_moldesign_api/moldesign> - -* :ref:`Alphabetical index ` -* :ref:`Search ` diff --git a/docs/creating_and_converting.rst b/docs/creating_and_converting.rst index 263354a..7378f37 100644 --- a/docs/creating_and_converting.rst +++ b/docs/creating_and_converting.rst @@ -1,9 +1,64 @@ -Creating and converting molecules ---------------------------------- +Creating molecules +================== -From other objects -================== +From names and ids +------------------ +You can use an IUPAC name: + + >>> import moldesign as mdt + >>> benzene = mdt.from_name('benzene') + >>> caffeine = mdt.from_name('1,3,7-Trimethylpurine-2,6-dione') + +or a `SMILES string `_ + + >>> benzene = mdt.from_smiles('c1ccccc1') + >>> caffeine = mdt.from_smiles('CN1C=NC2=C1C(=O)N(C(=O)N2C)C') + + +To download a biomolecular structure from the `Protein DataBank `_, you can use + + >>> hiv_protease = mdt.from_pdb('3AID') + +DNA helices can be generated from a genetic sequence: + + >>> bdna = mdt.build_dna_helix('ACTG') + + +From files +---------- +MDT supports most common molecular formats via ``moldesign.read``. In most cases, the format can be inferred from the filename. Files compressed with `gz` or `bz2` can be read as well. + + >>> benzene = mdt.read('benzene.sdf') + >>> caffeine = mdt.read('caffeine.xyz') + >>> lsd = mdt.read('lsd.mol2.gz') + >>> hiv_protease = mdt.read('3aid.pdb.bz2') + >>> zika_capsid = mdt.read('5ire.cif') + +In addition, any pickled python object can be read in with this function - files with ``pickle``, ``pkl``, and ``P`` are recognized as pickle files: + >>> saved_mol = mdt.read('molecule_1.pickle') + >>> saved_atom = mdt.read('atom_2.pkl.gz') + >>> saved_trajectory = mdt.read('traj.P.bz2') + + +From strings +------------ +File content in strings or file-like objects can be read as well, but the format needs to be explicitly specified. + + >>> water_str = """ 3 + >>> water xyz file + >>> O 0.98285 0.07497 0.04837 + >>> H 0.70400 0.94631 0.36769 + >>> H 1.95074 0.11856 0.06434 """ + >>> water = mdt.read(water_str, format='xyz') + >>> + >>> import StringIO + >>> water_filelike = StringIO.StringIO(water_str) + >>> molecule = mdt.read(water_filelike, format='xyz') + + +From other molecules +-------------------- You can create a new molecule from any collection of atoms. For instance, a list of atoms: @@ -18,3 +73,13 @@ Or even a list of molecules, atoms, and residues: >>> dmso = mdt.from_name('dmso') >>> cobalt_atom = mdt.Atom(symbol='Co') >>> complex = mdt.Molecule([protein, dmso, cobalt_atom]) + + +From other python packages +-------------------------- +MDT's interfaces allow it to import objects from a variety of other molecular modeling packages, including; + +- `OpenBabel `_ / `Pybel `_ : ``mdt.interfaces.pybel_to_mdt(pybel_molecule)`` +- `OpenMM `_: ``mdt.interfaces.openmm_topology_to_mdt(openmm_topology)`` +- `BioPython `_: ``mdt.interfaces.biopython_to_mdt(biopython_pdb_structure)`` +- `PdbFixer `_: ``mdt.interfaces.pdbfixer_to_mdt(pdbfixer_object)`` \ No newline at end of file diff --git a/docs/dynamics.rst b/docs/dynamics.rst new file mode 100644 index 0000000..ecd1cf8 --- /dev/null +++ b/docs/dynamics.rst @@ -0,0 +1,17 @@ +Molecular dynamics +================== + +Protein MD +---------- + +WIP + +Small molecule MD +----------------- + +WIP + +Quantum chemical potentials +--------------------------- + +WIP \ No newline at end of file diff --git a/docs/features.rst b/docs/features.rst new file mode 100644 index 0000000..27d5dfd --- /dev/null +++ b/docs/features.rst @@ -0,0 +1,150 @@ +Molecular Design Toolkit Features +================================= + +.. contents:: + :depth: 5 + + + +Molecular Mechanics +------------------- + + - :class:`models.Forcefield` Generic Forcefield energy model (automatically chosen implementation) + + - :class:`models.GAFF` Amber force field for small organic molecules + + - :class:`models.OpenMMEnergyModel` OpenMM energy kernel for Amber/CHARMM-like forcefields + + - :class:`models.SanderEnergyModel` Sander energy kernel (from AmberTools) for Amber/CHARMM-like forcefields + + - :class:`models.Spring` A single harmonic bond 2 atoms (for testing and toy models) + + - :class:`models.HarmonicOscillator` A 1-D Harmonic oscillator centered at x=0 (for testing and toy models) + + +Quantum Chemistry +----------------- + + - :class:`models.RHF` Restricted Hartree-Fock (automatically chosen implementation) + + - :class:`models.DFT` Density functional theories (automatically chosen implementation) + + - :class:`models.CASSCF` Complete-active space MCSCF (automatically chosen implementation) + + - :class:`models.Semiempirical` Generic semiempirical theories (automatically chosen implementation) + + - :class:`models.PySCF` PySCF *ab initio* QM energy kernel, includes implementations for a large number of quantum energy models, including RHF, DFT, CASCI, CASSCF, MP2, and coupled cluster + + - :class:`models.SQM` SQM semi-empirical energy kernel (from AmberTools), includes implementations for a large number of semiempirical models, including MNDO, AM1, PM3, PM6, DFTB + + +Molecular Dynamics +^^^^^^^^^^^^^^^^^^ + + - :class:`integrators.VelocityVerlet` Generic Velocity Verlet dynamics (automatically chosen implementation) + + - :class:`integrators.Langevin` Generic Langevin type (automatically chosen implementation) + + - :class:`integrators.OpenMMVerlet` Velocity Verlet dynamics for use with OpenMM energy models + + - :class:`integrators.OpenMMLangevin` Velocity Langevin dynamics for use with OpenMM energy models + + - :class:`integrators.SurfaceHopping` Multi-state surface hopping dynamics using fewest switched. Implementation: internal. + + +Interactive visualization +------------------------- + + - :class:`viewer.Configurator` Automatically generates user interfaces for configuring simulations + + - :class:`viewer.GeometryViewer` 3D molecular viewer + + - :class:`viewer.ChemicalGraphViewer` 2D molecular viewer + + - :class:`widgets.OrbitalViewer` 3D molecular orbital viewer + + - :class:`widgets.BondSelector` widget for building lists of atoms and/or bonds + + - :class:`widgets.ResidueSelector` widget for building lists of atoms and/or residues + + - :class:`widgets.GeometryBuilder` widget for manipulating internal coordinates + + - :class:`widgets.Symmetrizer` widget for displaying and manipulating molecular symmetry groups + + - :class:`widgets.ParameterizationDisplay` 3D display of issues when assigning forcefield parameters + + +Data analysis +------------- + +Simulation results are stored in numpy arrays with an explicit unit system based on ``pint`` for easy analysis and comparison. A few are shown here as examples: + +**Static properties** + + - :meth:`Molecule.potential_energy`, :meth:`Molecule.forces`, :meth:`Molecule.dipole_moment`, :meth:`Molecule.wfn` Molecular properties calcualted by energy models: the potential energy, force array, dipole moment vector, and electronic wavefunction, respectively. + + - :class:`orbitals.ElectronWfn` A data structure storic electronic wavefunction information, as calculated by a quantum energy model. + + - :meth:`ElectronWfn.aobasis.fock` :meth:`ElectronWfn.aobasis.overlaps` The Fock and overlap matrices in the AO basis + + - :meth:`ElectronWfn.canonical.fock` :meth:`ElectronWfn.canonical.overlaps` The Fock and overlap matrices in the canonical orbital basis + + - :meth:`ElectronWfn.canonical.coeffs` The canonical orbital coefficients in the AO basis + +**Trajectory properties** + + - :class:`Trajectory` A data structure storing a series of molecular structures with associated properties + + - :meth:`Trajectory.rmsd` Calculate a timeseries of RMSD values over the course of a trajectory + + - :meth:`Trajectory.distance`, :meth:`Trajectory.angle`, :meth:`Trajectory.dihedral` Return a timeseries of distances, angles, or dihedral angles over the course of a trajectory + + - :meth:`Trajectory.time` :meth:`Trajectory.potential_energy` :meth:`Trajectory.kinetic_temperature` ``...`` - Return timeseries of times, energies, temperatures, etc. over the course of a trajectory + + +Interfaces +---------- + +**Files and databases** + + - :meth:`read`, :meth:`write` read/write molecular file formats. Supports PDB, mmCIF, SDF, XYZ, MOL2, and pickled objects. Implementations: OpenBabel, BioPython, or internal. + + - :meth:`from_smiles` Convert a SMILES string into an MDT molecule with a 3D structure. Implementation: OpenBabel. + + - :meth:`from_name` Convert an IUPAC chemical name into an MDT molecule with a 3D structure. Implementation: Opsin. + + - :meth:`from_pdb` Download and create a molecule object from a PDB code. Implementation: BioPython. + + +**Python objects** + +MDT molecules can also be converted into objects for a variety of other Python chemistry libraries: + + - :meth:`interfaces.mol_to_pybel`, :meth:`interfaces.pybel_to_mol` Convert an MDT molecule to/from a `pybel` (i.e. OpenBabel) molecule object. + + - :meth:`interfaces.mol_to_pyscf`, :meth:`interfaces.pyscf_to_mol` Convert an MDT molecule to/from a PySCF molecule object. + + - :meth:`interfaces.topology_to_mol`, :meth:`interfaces.mol_to_topology` Convert an OpenMM topology object to/from an MDT molecule + + +Tools +----- + +**Topology manipulation** + + - :meth:`add_hydrogen` Saturate a molecule's valence with hydrogens. Implementation: OpenBabel. + + - :meth:`guess_bond_orders` Assign bond orders based on geometry and/or topology. Implementation: OpenBabel. + + - :meth:`mutate_residues` Mutate DNA bases and amino acid residues. Implementation: PDBFixer. + + - :meth:`add_water_box` Add water box with optional ions. Implementation: PDBFixer. + + +**Forcefields** + + - :meth:`assign_forcefield` Returns a new molecule with forcefield assignments and any missing atoms. Implementation: AmberTools/tLeap. + + - :meth:`parameterize` Assign forcefield parameters to a molecule. Implementation: Ambertools/antechamber. + + - :meth:`calc_am1_bcc_charges` :meth:`calc_gasteiger_charges` :meth:`calc_esp_charges` Calculate partial charges for use with a forcefield. Implementation: Ambertools/antechamber and Ambertools/SQM diff --git a/docs/geometry.rst b/docs/geometry.rst new file mode 100644 index 0000000..3acae61 --- /dev/null +++ b/docs/geometry.rst @@ -0,0 +1,41 @@ +Geometry tools +============== + + +Measure geometry +---------------- + +The :mod:`moldesign.geom` module contains a variety of methods for measuring (and +manipulate geometry). + +You can get the distance between any two atoms with the +:meth:`atom.distance ` method. + + >>> atom1.distance(atom2) + [...] angstrom + +Bond angles and dihedral (twist) angles can be measured using the :meth:`moldesign.geom.angle` +and :meth:`moldesign.geom.dihedral` methods: + + >>> moldesign.geom.angle(atom1, atom2, atom3) + [...] radians + >>> moldesign.geom.dihedral(atom1, atom2, atom3, atom4) + [...] radians + + +Manipulate geometry +------------------- + +WIP + + +Analyze dynamics +---------------- + +WIP + + +Constrain geometry +------------------ + +WIP \ No newline at end of file diff --git a/docs/howdoi.rst b/docs/howdoi.rst deleted file mode 100644 index 85716e3..0000000 --- a/docs/howdoi.rst +++ /dev/null @@ -1,203 +0,0 @@ -============= -How do I ...? -============= - -.. contents:: Quick guides to common tasks - :depth: 2 - - -How do I create a small molecule? ---------------------------------- -You can use an IUPAC name: - - >>> import moldesign as mdt - >>> benzene = mdt.from_name('benzene') - >>> caffeine = mdt.from_name('1,3,7-Trimethylpurine-2,6-dione') - -or a `SMILES string `_ - - >>> benzene = mdt.from_smiles('c1ccccc1') - >>> caffeine = mdt.from_smiles('CN1C=NC2=C1C(=O)N(C(=O)N2C)C') - -or read it from a number of file formats: - - >>> benzene = mdt.read('/home/myuser/benzene.sdf') - >>> caffeine = mdt.read('/home/myuser/caffeine.xyz') - - - -How do I import a biomolecule? ------------------------------- - -Basic PDB structures -^^^^^^^^^^^^^^^^^^^^ -If you're looking for a specific biomolecule, you'll find its structure on -`the RCSB Protein Databank (PDB) `_ (if a structure exists). Structures in PDB are -indexed with 4-character codes (such as `1MBN `_, `3AID `_, `3FPP `_, ...). - -To download a structure with -a specific PDB code, you can use - - >>> mol = mdt.from_pdb('3AID') - >>> mol.draw() - - .. image:: img/howdoi_pdb1.png - -You can, of course, also read in files from a variety of formats: - - >>> mol = mdt.read('/path/to/3AID.pdb') - -Biomolecular assemblies -^^^^^^^^^^^^^^^^^^^^^^^ -Many biomolecules in the PDB only contain a subset of the total biomolecular structure - the -remaining parts of the structure can be generated via `symmetry transformations `_. - -When you read in such a structure, MDT will issue a warning. - - >>> mol = mdt.from_pdb('3FPP') - WARNING: This PDB file contains the following biomolecular assemblies: - WARNING: Assembly "1": 3 copies of chains A, B - WARNING: Use ``mdt.build_assembly([molecule],[assembly_name])`` to build one of the above assemblies - -To create the full assembly, run - >>> assembly = mdt.build_assembly(mol,"1") - >>> assembly.draw() - - .. image:: img/howdoi_pdb_assm.png - -Note: - Only PDB-formatted files are currently supported for biomolecular assemblies - MMCif support - is in progress. - - -How do I measure bonds? ------------------------ - -The :mod:`moldesign.geom` module contains a variety of methods for measuring (and -manipulate geometry). - -You can get the distance between any two atoms with the -:meth:`atom.distance ` method. - - >>> atom1.distance(atom2) - [...] angstrom - -Bond angles and dihedral (twist) angles can be measured using the :meth:`moldesign.geom.angle` -and :meth:`moldesign.geom.dihedral` methods: - - >>> moldesign.geom.angle(atom1, atom2, atom3) - [...] radians - >>> moldesign.geom.dihedral(atom1, atom2, atom3, atom4) - [...] radians - - - -How do I visualize molecular orbitals? --------------------------------------- -First, you'll need to calculate the molecule's electronic structure using a quantum chemistry -model. Quantum chemistry models are a type of -:class:`Energy Model ` in MDT. - -You can use iPython's autocomplete to get a list of the available methods by typing -``mdt.models.`` and then hitting the ``Tab`` key: - -.. image:: img/howdoi_method_autocomplete.png - -In this example, let's set up a small molecule with a simple quantum chemistry model - -`restricted Hartree-Fock. `_ - - >>> mol = mdt.from_name('benzene') - >>> mol.set_energy_model(mdt.models.RHF(basis='6-31g')) - - -Next, we'll run a calculation with this model - this will calculate several relevant properties for -the molecule. - - >>> mol.calculate() - >>> mol.potential_energy - -6275.56597497 eV - >>> mol.wfn - - -These properties are stored in a :class:`dict` at ``mol.properties``: - - >>> mol.properties.keys() - ['wfn', 'positions', 'mulliken', 'potential_energy'] - -Most relevant for our purposes, we've calculated the electronic state of the molecule and are -ready to visualize it. - - >>> mol.draw_orbitals() - - .. image:: img/howdoi_orbs.png - -In an actual notebook, you can use the controls on the right to control the visualization. - - - - -How do I perform an energy minimization? ----------------------------------------- -First, you'll need to create an :class:`EnergyModel ` for your molecule. Energy models can include quantum chemical, molecular mechanics, or wide assortment of other methods. - -We'll follow the same setup as the previous step: - - >>> mol = mdt.from_name('benzene') - >>> mol.set_energy_model(mdt.models.RHF(basis='sto-3g')) - -Now that our molecule has an :class:`EnergyModel `, we can calculate energies and forces: - - >>> mol.calculate_forces() # returns vector of forces - >>> mol.calculate_potential_energy() # returns the molecule's energy - -You're now ready to use the molecule's :meth:`minimize ` method: - - >>> trajectory = mol.minimize(nsteps=10, frame_interval=1) - -And you can visualize the minimization process using the trajectory object: - - >>> trajectory.draw_orbitals() - -.. image:: img/benz_min_traj.png - - -How do I customize a 3D view? ------------------------------ -First, create a viewer. It will be rendered in your notebook when it's the last object evaluated in a code cell. - - >>> import moldesign as mdt - >>> from moldesign import units as u - >>> mol = mdt.from_pdb('3AID') - >>> viewer = mol.draw3d() - >>> viewer - -.. image:: img/howdoi_view1.png - -At this point, the viewer will be drawn into your notebook. You can continue to manipulate it after it's been drawn. - -For starters, let's turn all the waters purple. - - >>> wateratoms = [atom for atom in mol.atoms if atom.residue.type == 'water'] - >>> viewer.vdw(atoms=wateratoms, color='purple') - -.. image:: img/howdoi_purplewater.png - -Next, let's make that drug molecule really stand out with with a transparent sphere, an arrow, -and a label: - - >>> drug = mol.chains['A'].residues['ARQ401'] - >>> r = drug.center_of_mass - >>> sphere = viewer.draw_sphere(position=r, radius=6*u.angstrom, opacity=0.5, color='green') - >>> arrow = viewer.draw_arrow(start=r+[0,0,26]*u.angstrom, end=r+[0,0,6]*u.angstrom, radius=3) - >>> label = viewer.draw_label(text="Here's the drug", position=r) - -.. image:: img/howdoi_annotated.png - -Maybe that's too much - let's remove the label and the sphere. - - >>> viewer.remove(label) - >>> viewer.remove(sphere) - -.. image:: img/howdoi_subtle.png - - diff --git a/docs/index.rst b/docs/index.rst index d425c1f..26dc7b9 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,54 +1,47 @@ -=========================================== -Molecular Design Toolkit: API documentation -=========================================== +Molecular Design Toolkit |version| +################################## -These pages provide reference API documentation for the Molecular Design Toolkit. +Molecular science is hard - the software shouldn't make it harder. The `Molecular Design Toolkit `_ offers access to a large and still-growing set of computational modeling methods from a science-focused, Python API. When you +call MDT functions from a Jupyter notebook, you'll also be get inline 2D and 3D visualization, +plotting support, and interactivity. -Just getting started? We recommend trying out `the tutorials and -walkthroughs `_ before diving into the API. +`Try a live demo now. `_ +MDT is free, open source, and is built for scientific collaboration. -Quick install -------------- -Get the latest stable version: -.. code-block:: bash - $ pip install moldesign +.. toctree:: + :maxdepth: 2 + :numbered: + :caption: Getting started -Or get the source code on github: + quickstart + features + install -.. code-block:: bash - $ git clone github.com/autodesk/molecular-design-toolkit +.. toctree:: + :maxdepth: 2 + :numbered: + :caption: Recipes + creating_and_converting + structure + biomolecule + geometry + properties + dynamics + visualization -Get started ------------ -At the command line, run -.. code-block:: bash +.. toctree:: + :maxdepth: 2 + :numbered: + :caption: API Reference - $ python -m moldesign intro + api/general + api/atoms - -Explore the API ---------------- -The Jupyter online documentation system is a powerful tool for discovering functionality. - -To get a list of all members of a module or class, type ``modulename.``, then hit `tab`. - -.. image:: img/tab_autocomplete.png - -To get online documentation about a function or method, type the method's name, then hit `shift+tab` - -.. image:: img/shifttab_online.png - -To get the complete docstring for any object, type its name then a question mark. - -.. image:: img/questiondoc.png - - -Get help --------- -Click a link in the navigation menu (to your left) for in-depth documentation. +* :ref:`Alphabetical index ` +* :ref:`Search ` \ No newline at end of file diff --git a/docs/install.rst b/docs/install.rst index da3a6dd..6e4de94 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -27,6 +27,39 @@ At this point, you should have everything you need to install MDT. pip install moldesign +**Note:** Depending on their specific python installation, some users may need to run the installation as root, i.e. ``sudo pip install moldesign`` + + + +Updating +^^^^^^^^ + +To update to the most recent version of the toolkit, type + +.. code-block:: bash + + pip install -U moldesign + +However, note that this will update ``moldesign`` and *all of its dependencies* (including `numpy`, `jupyter`, `setuptools`, etc.) to their latest versions, which you may or may not want. To update only the ``moldesign`` suite, please run + +.. code-block:: bash + + pip install --no-deps -U moldesign pyccc nbmolviz + + +Common problems +^^^^^^^^^^^^^^^ + +**Permissions** +Depending on how python is installed on your system, you may need to run this installation as root, e.g. ``sudo pip install moldesign``. + +**MacOS default Python** +We've encountered issues trying to install Jupyter with MacOS's built-in python distribution. We highly recommend using `Homebrew ` to install a friendlier version of Python that doesn't require root permissions; see http://docs.python-guide.org/en/latest/starting/install/osx/ for instructions. + +**Python version** +The toolkit is not yet compatible with Python 3. For now, make sure you're using Python 2 to install and run everything. + + Notebook extensions ^^^^^^^^^^^^^^^^^^^ MDT will automatically install and enable the ``nbmolviz`` and ``widgetsnbextensions`` for Jupyter if they're not already enabled (these extensions provide the interactive molecular visualization framework). You can list the installed extensions by running @@ -74,7 +107,8 @@ If you run into problems, see the `documentation `_ and Changing where your jobs run ============================ -The toolkit is built to run jobs using the `Docker containerization technology `_ (which *has nothing to do with molecular docking*). Docker eliminates the need to configure or compile +The toolkit is built to run jobs using the `Docker containerization technology `_ +(which *has nothing to do with molecular docking*). Docker eliminates the need to configure or compile software on different computers. By default, MDT is configured to use a free cloud-based docker cluster provided by Autodesk @@ -82,30 +116,52 @@ Research. If you'd like to run jobs on your local machine, you'll need to instal things. -Running jobs locally --------------------- -Using a docker-machine -^^^^^^^^^^^^^^^^^^^^^^ -A recent version of Docker (>1.11) is required. +Running locally with Docker +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +First, create or edit a file at ``$HOME/.moldesign/moldesign.yml`` with the line -*Mac or Windows*: Download and install the `Docker Toolbox `_. +.. code-block:: yaml -*Linux*: `Follow the instructions for your distribution `_. + engine_type: docker -Next, create a docker-machine (ideally, it should have at least 4 GB of RAM and 40 GB of disk -space): +Next, install Docker if necessary (version 1.11 or higher is required): + +- *Mac*: Download and install `Docker for Mac `_. +- *Windows*: Download and install `Docker for Windows `_. +- *Linux*: `Follow the instructions for your distribution `_. + +Once Docker is up and running, make sure to allocate enough RAM - 4 GB will work well for the +included example jobs. + +Running locally with CloudComputeCannon +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Our group has also developed +`CloudComputeCannon `_, a lightweight, +Docker-based job scheduling system which is more suitable for production than a bare Docker engine. + +You'll need Docker installed locally (see steps above). To install CCC: + +1. `Install the Node.js `_ javascript interpreter if necessary. +2. Update NPM if necessary: ``npm install npm -g`` +3. Do a global install of cloud compute cannon: ``npm install -g cloud-compute-cannon`` + +To run it: + +- To **start** the CCC scheduler, make sure Docker is running locally, then run ``ccc server-install`` +- To **stop** the CCC scheduler, run ``ccc server-stop`` + +Finally, update your MDT configuration to point to the CCC server by default by putting these lines in +``$HOME/.moldesign/moldesign.yml``: + +.. code-block:: yaml + + engine_type: cloudcomputecannon + default_ccc_server: localhost:9000 -.. code-block:: bash - $ docker-machine create --driver virtualbox --virtualbox-memory "4096" --virtualbox-disk-size "40000" -Running jobs on AWS --------------------- -coming soon System-specific installation ============================ diff --git a/docs/properties.rst b/docs/properties.rst new file mode 100644 index 0000000..ea10d92 --- /dev/null +++ b/docs/properties.rst @@ -0,0 +1,29 @@ +Property calculations +===================== + + +Optimize a geometry +------------------- +First, you'll need to create an :class:`EnergyModel ` for your molecule. Energy models can include quantum chemical, molecular mechanics, or wide assortment of other methods. + +We'll follow the same setup as the previous step: + + >>> mol = mdt.from_name('benzene') + >>> mol.set_energy_model(mdt.models.RHF(basis='sto-3g')) + +Now that our molecule has an :class:`EnergyModel `, we can calculate energies and forces: + + >>> mol.calculate_forces() # returns vector of forces + >>> mol.calculate_potential_energy() # returns the molecule's energy + +You're now ready to use the molecule's :meth:`minimize ` method: + + >>> trajectory = mol.minimize(nsteps=10, frame_interval=1) + +And you can visualize the minimization process using the trajectory object: + + >>> trajectory.draw_orbitals() + +.. image:: img/benz_min_traj.png + + diff --git a/docs/quickstart.rst b/docs/quickstart.rst new file mode 100644 index 0000000..85653d7 --- /dev/null +++ b/docs/quickstart.rst @@ -0,0 +1,57 @@ +========== +Quickstart +========== + +These pages provide reference API documentation for the Molecular Design Toolkit. + +Just getting started? We recommend trying out `the tutorials and +walkthroughs `_ before diving into the API. + + +Install with pip +---------------- +Get the latest stable version: + +.. code-block:: bash + + $ pip install moldesign + +**Note:** some users may need to run the installation as root, i.e. ``sudo pip install moldesign``, +see `Installing MDT`_ for details. + +Or get the source code on github: + +.. code-block:: bash + + $ git clone github.com/autodesk/molecular-design-toolkit + + +Get started +----------- +At the command line, run + +.. code-block:: bash + + $ python -m moldesign intro + + +Explore the API +--------------- +The Jupyter online documentation system is a powerful tool for discovering functionality. + +To get a list of all members of a module or class, type ``modulename.``, then hit `tab`. + +.. image:: img/tab_autocomplete.png + +To get online documentation about a function or method, type the method's name, then hit `shift+tab` + +.. image:: img/shifttab_online.png + +To get the complete docstring for any object, type its name then a question mark. + +.. image:: img/questiondoc.png + + +Get help +-------- +Click a link in the navigation menu (to your left) for in-depth documentation. diff --git a/docs/structure.rst b/docs/structure.rst index aa13bed..cd16e01 100644 --- a/docs/structure.rst +++ b/docs/structure.rst @@ -1,6 +1,6 @@ -Atoms, molecules, and biomolecules ----------------------------------- -The Molecular design toolkit is built around familiar physical objects. Below is a quick rundown of +Molecular structure +------------------- +MDT is built around familiar physical objects. Below is a quick rundown of those objects and how they relate to one another. For most of the examples here, we'll look at a benzene molecule, which you can create as follows: @@ -167,29 +167,6 @@ Note: NotCalculatedError: The 'potential_energy' property hasn't been calculated yet. ... -Primary structure -""""""""""""""""" -**Class documentation:** :class:`moldesign.Chain`, :class:`moldesign.Residue` - -Biomolecules also contain primary structure information such as :class:`Chains ` -and :class:`Residues `. Chains can be accessed by name OR by index: - - >>> chain1 = molecule.chains['A'] - >>> chain2 = molecule.chains[0] - >>> chain1 is chain2 - True - -Each chain contains :class:`residues `. In a chain, residues can similarly be -accessed through a flat list or by name: - - >>> res0 = molecule.residues[0] - >>> resA = molecule.chains['A'].residues['PRO1'] - >>> res0 is resA - True - -A flat list of all residues in a molecule is also available at `molecule.residues`. - - Electronic structure """""""""""""""""""" **Class documentation:** :class:`moldesign.orbitals.wfn.ElectronicWfn` diff --git a/docs/visualization.rst b/docs/visualization.rst new file mode 100644 index 0000000..2a39330 --- /dev/null +++ b/docs/visualization.rst @@ -0,0 +1,87 @@ +Visualization +============= + + + +Visualize molecular orbitals +---------------------------- +First, you'll need to calculate the molecule's electronic structure using a quantum chemistry +model. Quantum chemistry models are a type of +:class:`Energy Model ` in MDT. + +You can use iPython's autocomplete to get a list of the available methods by typing +``mdt.models.`` and then hitting the ``Tab`` key: + +.. image:: img/howdoi_method_autocomplete.png + +In this example, let's set up a small molecule with a simple quantum chemistry model - +`restricted Hartree-Fock. `_ + + >>> mol = mdt.from_name('benzene') + >>> mol.set_energy_model(mdt.models.RHF(basis='6-31g')) + + +Next, we'll run a calculation with this model - this will calculate several relevant properties for +the molecule. + + >>> mol.calculate() + >>> mol.potential_energy + -6275.56597497 eV + >>> mol.wfn + + +These properties are stored in a :class:`dict` at ``mol.properties``: + + >>> mol.properties.keys() + ['wfn', 'positions', 'mulliken', 'potential_energy'] + +Most relevant for our purposes, we've calculated the electronic state of the molecule and are +ready to visualize it. + + >>> mol.draw_orbitals() + + .. image:: img/howdoi_orbs.png + +In an actual notebook, you can use the controls on the right to control the visualization. + + + +Maniuplate a 3D visualization +----------------------------- +First, create a viewer. It will be rendered in your notebook when it's the last object evaluated in a code cell. + + >>> import moldesign as mdt + >>> from moldesign import units as u + >>> mol = mdt.from_pdb('3AID') + >>> viewer = mol.draw3d() + >>> viewer + +.. image:: img/howdoi_view1.png + +At this point, the viewer will be drawn into your notebook. You can continue to manipulate it after it's been drawn. + +For starters, let's turn all the waters purple. + + >>> wateratoms = [atom for atom in mol.atoms if atom.residue.type == 'water'] + >>> viewer.vdw(atoms=wateratoms, color='purple') + +.. image:: img/howdoi_purplewater.png + +Next, let's make that drug molecule really stand out with with a transparent sphere, an arrow, +and a label: + + >>> drug = mol.chains['A'].residues['ARQ401'] + >>> r = drug.center_of_mass + >>> sphere = viewer.draw_sphere(position=r, radius=6*u.angstrom, opacity=0.5, color='green') + >>> arrow = viewer.draw_arrow(start=r+[0,0,26]*u.angstrom, end=r+[0,0,6]*u.angstrom, radius=3) + >>> label = viewer.draw_label(text="Here's the drug", position=r) + +.. image:: img/howdoi_annotated.png + +Maybe that's too much - let's remove the label and the sphere. + + >>> viewer.remove(label) + >>> viewer.remove(sphere) + +.. image:: img/howdoi_subtle.png + diff --git a/moldesign/HISTORY.rst b/moldesign/HISTORY.rst new file mode 100644 index 0000000..cfff535 --- /dev/null +++ b/moldesign/HISTORY.rst @@ -0,0 +1,62 @@ +0.7.3 (WIP) +=========== +NEW MODELING FEATURES + - #33 - Add DFT w/ gradients; MP2, CASSCF, CASCI w/out gradients + - Constrained minimizations w/ SHAKE and scipy's SLQSP + - Rename `build_bdna` to `build_dna_helix` and give access to all NAB helix types + - GAFF parameterizer for small molecules -- ``params = mdt.parameterize(mol)`` + - AM1-BCC and Gasteiger partial charge calculators: ``mdt.calc_am1_bcc_charges`` and + ``mdt.calc_gasteiger_charges`` + - Add PDB database and biomolecular assembly support for mmCIF files + - #72 - Add ``moldesign.guess_formal_charges`` and ``moldesign.add_missing_data`` + - Excited and multi-state property calculations + +OTHER ENHANCEMENTS + - #78 - ``moldesign`` now imports much more quickly + - Add ``GAFF`` energy model automates small molecule parameterization + - Change Example 2 to show an absorption spectrum calculation + - Add Example 4 on protein MD with a small ligand + - Add Example 5: on constrained minimization and enthalpic barriers + - Add Tutorial 3: QM data analysis + - Show changelog and version check in the ``mdt.about()`` (aka ``mdt.configure``) widget + - Change moldesign.tools and moldesign.helpers modules into more rationally organized subpackages + - ``mdt.set_dihedral`` can be called with two atoms in the same way as ``mdt.dihedral`` + - Explicit parameter created to store wavefunction guesses + - Better access to density matrix in wavefunction objects + - Improved parsing support for PDB and mmCIF files + +BUGFIXES + - #61 - fixed a KeyError when parsing PDBs with metal centers or ions + - #74 - Add function to create PDB files with correct TER records (used for TLeap input) + - Better handling of chains with non-standard residues + - ``mdt.add_hydrogens`` no longer creates structures with separated residues + - Fix sign of dihedral gradient + - Charge quantities now mostly have the correct units + + +0.7.2 - July 26, 2016 +===================== +NEW MODELING FEATURES + - Add trajectory geometry analysis functions (``traj.dihedral``, ``traj.angle``, etc.) + - Can now calculate angles, dists, and dihedrals by name within a residue + (``residue.distance('CA','CG')``) + - Calculate dihedral angles using only two atoms defining the central bond (MDT will infer + infer the other two in a consistent way) + +CHANGES + - Completed tutorials + +BUGFIXES + - #28: Fixed a rounding error and logging problems with OpenMM trajectory snapshots + - #21: Better bond orders to structures in Amber files, which don't store them + - #20: Store OpenMM force vector correctly + +0.7.1 - July 20, 2016 +===================== +BUGFIXES + - #4: Use public demo CCC server by default + - #3: Fix ``python -m moldesign intro`` + +0.7.0 - July 15, 2016 +===================== + - Initial public release diff --git a/moldesign/__init__.py b/moldesign/__init__.py index 08e1e27..9136ca8 100644 --- a/moldesign/__init__.py +++ b/moldesign/__init__.py @@ -22,9 +22,15 @@ from . import data PACKAGEPATH = data.PACKAGEPATH -# Import all subpackages / submodules +# Base subpackages - import these first +from . import utils +from . import units +from . import uibase +from . import widgets + +# Functional subpackages from . import compute -from . import converters +from . import fileio from . import exceptions from . import external from . import forcefields @@ -40,14 +46,12 @@ from . import orbitals from . import molecules from . import tools -from . import uibase -from . import units -from . import utils from . import viewer -from . import widgets + # Populate the top-level namespace (imports everything from each .__all__ variable) -from .converters import * +from .exceptions import * +from .fileio import * from .forcefields import * from .geom import * from .min import * @@ -77,11 +81,11 @@ # For documentation purposes only - make sphinx document the toplevel namespace if _building_docs: - __all__ = converters.__all__ + \ + __all__ = fileio.__all__ + \ geom.__all__ + \ min.__all__ + \ - orbitals.__all__+ \ - molecules.__all__+ \ + orbitals.__all__ + \ + molecules.__all__ + \ tools.__all__ + \ viewer.__all__ diff --git a/moldesign/_notebooks/.building/Example 3. Simulate HIV Protease.ipynb b/moldesign/_notebooks/.building/Example 3. Simulate HIV Protease.ipynb deleted file mode 100644 index efe8801..0000000 --- a/moldesign/_notebooks/.building/Example 3. Simulate HIV Protease.ipynb +++ /dev/null @@ -1,537 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "About      Forum      Issues      Tutorials      Documentation\n", - "\n", - "![Molecular Design Toolkit](img/Top.png)\n", - "
\n", - "\n", - "

Example 3: Simulating HIV Protease

\n", - "\n", - "This notebook prepares a co-crystallized protein / small molecule ligand structure from [the PDB database](http://www.rcsb.org/pdb/home/home.do) and prepares it for molecular dynamics simulation. \n", - "\n", - "---" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "import moldesign as mdt\n", - "import moldesign.units as u" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "## I. The crystal structure\n", - "\n", - "First, we'll download and investigate the [3AID crystal structure](http://www.rcsb.org/pdb/explore.do?structureId=3aid).\n", - "\n", - "### A. Download and visualize" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mol = mdt.read('../data/3AID.pdb')\n", - "mol" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### B. Try assigning a forcefield" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This structure is not ready for MD - this command will raise a `ParameterizationError` Exception. After running this calculation, click on the **Errors/Warnings** tab to see why." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "newmol = mdt.assign_forcefield(mol)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You should see 3 errors: \n", - " * The residue name `ARQ` not recognized\n", - " * Atom `HD1` in residue `HIS69`, chain `A` was not recognized\n", - " * Atom `HD1` in residue `HIS69`, chain `B` was not recognized\n", - " \n", - "(There's also a warning about bond distances, but these can be generally be fixed with an energy minimization before running dynamics)\n", - "\n", - "We'll deal with the histidine residues first." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## II. Prepping the protein\n", - "\n", - "### A. Assign histidine's protonation\n", - "Histidine is notoriously tricky, because it exists in no less than three different protonation states at biological pH (7.4) - the \"delta-protonated\" form, referred to with residue name `HID`; the \"epsilon-protonated\" form aka `HIE`; and the doubly-protonated form `HIP`, which has a +1 charge. These are drawn below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "hid = mdt.from_smiles('O=C(O)[C@@H](N)Cc1c[nH]cn1')\n", - "hid.draw3d()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "hie = mdt.from_smiles('O=C(O)[C@@H](N)Cc1cnc[nH]1')\n", - "hie.draw3d()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Crystallographers usually can't resolve hydrogen positions, and so can't tell you which form of histidine you have. PDB files thus refer to histidine as `HIS`, which leaves the protonation state ambiguous. In general, picking the right protontation is both extremely important and extremely difficult.\n", - "\n", - "We're in luck for this simulation, however - the histidines are located on the surface of the protein, quite far from the drug binding site, and so their state is not likely to be important for a drug binding calculation. Further, the presence of the `HD1` atoms in the crystal structure indicates that we should probably go ahead and change our `HIS` residues to `HID`.\n", - "\n", - "The fix is easy - just change the name. We'll rerun the paramterization to confirm that the histidine errors disappeared (although the small molecule errors remain)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "for residue in mol.residues:\n", - " if residue.resname == 'HIS':\n", - " residue.resname = 'HID'\n", - " print 'I changed %s in chain %s to HID' % (residue.name, residue.chain.name)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "md_ready_molecule = mdt.assign_forcefield(mol)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### B. Remove the ligand\n", - "The following cell creates a new ``Molecule`` with only the protein - no solvent or bound ligand." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "receptor_structure = mdt.Molecule([atom for atom in mol.atoms if atom.residue.type == 'protein'])\n", - "receptor = mdt.assign_forcefield(receptor_structure)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### C. Prep for dynamics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "receptor.set_energy_model(mdt.models.OpenMMPotential, implicit_solvent='obc', cutoff=8.0*u.angstrom)\n", - "receptor.set_integrator(mdt.integrators.OpenMMLangevin, timestep=2.0*u.fs)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "receptor.configure_methods()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### D. Equilibrate the protein\n", - "The next series of cells first minimize the crystal structure to remove clashes, then heats the system to 300K." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mintraj = receptor.minimize()\n", - "mintraj.draw()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [], - "source": [ - "# Restrain the peptide backbone:\n", - "for residue in receptor.residues:\n", - " for atom in residue.backbone:\n", - " receptor.constrain_atom(atom)\n", - "print 'Constrained %d atoms' % len(receptor.constraints)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": false - }, - "outputs": [], - "source": [ - "warmup = receptor.run(20.0*u.ps)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "receptor.clear_constraints()\n", - "receptor.integrator.params.frame_interval=0.1*u.ps\n", - "equil = receptor.run(5.0*u.ps)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "fulltraj = mintraj + warmup + equil\n", - "fulltraj.draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## III. Parameterizing a small molecule\n", - "We'll use the GAFF (generalized Amber force field) to create force field parameters for the small ligand.\n", - "\n", - "### A. Isolate the small molecule\n", - "Click on the ligand to select it, then we'll use that selection to create a new molecule." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "sel = mdt.widgets.ResidueSelector(mol)\n", - "sel" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "drugres = mdt.Molecule(sel.selected_residues[0])\n", - "drugres.draw2d()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### B. Assign bond orders and hydrogens\n", - "The crystal structure doesn't provide indicate bond orders or hydrogens, but we can add those:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "drugmol = mdt.add_hydrogen(mdt.guess_bond_orders((drugres)))\n", - "drugmol.draw2d()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "drugmol.draw()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### C. Assign partial charges and a GAFF forcefield" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To assign force field parameters to this molecule, each atom will need 1) a GAFF atom type, and 2) a partial charge.\n", - "\n", - "For the charges, we'll use the fast (but not particularly accurate) AM1-BCC method to compute partial charges for the atoms." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "assert drugmol.charge == +1" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "result = drugmol.get_gaff_parameters(charge='am1-bcc', )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "print drugmol.write(format='pdb')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "mol = bb.from_smiles('C1=CCNOC1')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "#include commands as file ... stdout, stderr in main display" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "reload(bb.interfaces.ambertools)\n", - "bb.interfaces.ambertools.am1_bcc_charges(mol)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "mol = mdt.from_name('bipyridine')" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mol.draw(height=300, width=300, show_2dhydrogens=True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mdt.widgets.Symmetrizer(mdt.from_smiles('CC'))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 2", - "language": "python", - "name": "python2" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file diff --git a/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb b/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb index e17d47c..3625038 100644 --- a/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb +++ b/moldesign/_notebooks/Example 1. Build and simulate DNA.ipynb @@ -4,29 +4,33 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", "About      Forum      Issues      Tutorials      Documentation\n", "\n", "![Molecular Design Toolkit](img/Top.png)\n", - "
\n", + "\n", "\n", "

Example 1: Build and simulate DNA

\n", + "---\n", "\n", - "This notebook builds a small DNA double helix, assigns a forcefield to it, and runs a molecular dynamics simulation. \n", "\n", - "---" + "This notebook builds a small DNA double helix, assigns a forcefield to it, and runs a molecular dynamics simulation.\n", + "\n", + " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research
\n", + " - _Created on_: July 1, 2016\n", + " - _Tags_: DNA, molecular dynamics\n", + "\n" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "from matplotlib.pyplot import *\n", + "try: import seaborn #optional, makes plots nicer\n", + "except ImportError: pass\n", "\n", "import moldesign as mdt\n", "from moldesign import units as u" @@ -58,22 +62,17 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, + "metadata": {}, "outputs": [], "source": [ - "dna_structure = mdt.build_bdna('ACTGACTG')\n", + "dna_structure = mdt.build_dna_helix('ACTGACTG', helix_type='b')\n", "dna_structure.draw()" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "dna_structure" @@ -92,9 +91,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mol = mdt.assign_forcefield(dna_structure)" @@ -113,10 +110,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, + "metadata": {}, "outputs": [], "source": [ "rs = mdt.widgets.ResidueSelector(mol)\n", @@ -126,31 +120,26 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ + "if len(rs.selected_atoms) == 0:\n", + " raise ValueError(\"You didn't click on anything!\")\n", + " \n", "rs.selected_residues" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "for residue in rs.selected_residues:\n", " print 'Constraining position for residue %s' % residue\n", " \n", " for atom in residue.atoms:\n", - " mol.constrain_atom(atom)\n", - " \n", - " \n", - "if len(rs.selected_atoms) == 0:\n", - " raise ValueError(\"You didn't click on anything!\")" + " mol.constrain_atom(atom)" ] }, { @@ -171,9 +160,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mol.set_energy_model(mdt.models.OpenMMPotential,\n", @@ -196,9 +183,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mol.configure_methods()" @@ -216,10 +201,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": false - }, + "metadata": {}, "outputs": [], "source": [ "trajectory = mol.minimize(nsteps=200)\n", @@ -229,16 +211,13 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "plot(trajectory.potential_energy)\n", "\n", "xlabel('steps');ylabel('energy / %s' % trajectory.unit_system.energy)\n", - "title('Energy relaxation')\n", - "grid()" + "title('Energy relaxation'); grid('on')" ] }, { @@ -252,28 +231,13 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, + "metadata": {}, "outputs": [], "source": [ "traj = mol.run(run_for=25.0*u.ps)\n", "traj.draw()" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "viewer = traj.draw()\n", - "viewer" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -285,30 +249,25 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "plot(traj.time, traj.kinetic_energy, label='kinetic energy')\n", "plot(traj.time, traj.potential_energy - traj.potential_energy[0], label='potential_energy')\n", "xlabel('time / {time.units}'.format(time=traj.time))\n", "ylabel('energy / {energy.units}'.format(energy=traj.kinetic_energy))\n", - "title('Energy vs. time'); grid()\n", - "legend(loc='center right')" + "title('Energy vs. time'); legend(); grid('on')" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "# Using the trajectory's 'plot' method will autogenerate axes labels with the appropriate units\n", "traj.plot('time','kinetic_temperature')\n", - "title('Temperature')" + "title('Temperature'); grid('on')" ] }, { @@ -322,16 +281,16 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "from ipywidgets import interact_manual\n", "from IPython.display import display\n", "\n", "rs = mdt.widgets.ResidueSelector(mol)\n", - "def plot_rmsd(): plot(traj.time, traj.rmsd(rs.selected_atoms))\n", + "def plot_rmsd(): \n", + " plot(traj.time, traj.rmsd(rs.selected_atoms))\n", + " xlabel('time / fs'); ylabel(u'RMSD / Ã…')\n", "interact_manual(plot_rmsd)\n", "rs" ] @@ -339,9 +298,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] } diff --git a/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb b/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb deleted file mode 100644 index 16515fd..0000000 --- a/moldesign/_notebooks/Example 2. Running Quantum Chemistry.ipynb +++ /dev/null @@ -1,496 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "About      \n", - "Forum      \n", - "Issues      \n", - "Tutorials      \n", - "Documentation\n", - "\n", - "![Molecular Design Toolkit](img/Top.png)\n", - "
\n", - "

Example 2: Orbitals, Wavefunctions, and Potential Energy Surfaces

\n", - "\n", - "---\n", - "\n", - "This notebook shows a few different ways that Molecular Design Toolkit can be used to run and visualize electronic structure calculations." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import numpy as np\n", - "from matplotlib.pylab import *\n", - "\n", - "import moldesign as mdt\n", - "from moldesign import units as u" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "

Contents

\n", - "\n", - "---\n", - "\n", - " - [I. Molecular hydrogen](#I.-Molecular-hydrogen)\n", - " - [A. Build the molecule](#A.-Build-the-molecule)\n", - " - [B. Run a hartree-fock calculation](#B.-Run-a-hartree-fock-calculation)\n", - " - [C. Visualize the orbitals](#C.-Visualize-the-orbitals)\n", - " - [D. Minimize the energy](#D.-Minimize-the-energy)\n", - " - [E. Scan the potential energy surface](#E.-Scan-the-potential-energy-surface)\n", - " - [II. Butadiene](#II.-Butadiene)\n", - " - [A. Build the molecule and calculate its energy](#A.-Build-the-molecule-and-calculate-its-energy)\n", - " - [B. Select a bond](#B.-Select-a-bond)\n", - " - [C. Calculate the initial dihedral angle](#C.-Calculate-the-initial-dihedral-angle)\n", - " - [D. Scan over the dihedral angle](#D.-Scan-over-the-dihedral-angle)\n", - " - [E. Minimize the new form](#E.-Minimize-the-new-form)\n", - " - [III. Advanced topics](#III.-Advanced-topics)\n", - " - [A. Symmetry](#A.-Symmetry)\n", - " - [B. Examining the wavefunction](#B.-Examining-the-wavefunction)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## I. Molecular hydrogen\n", - "\n", - "### A. Build the molecule\n", - "This cell builds H2 by creating the two atoms, and explicitly setting their positions.\n", - "\n", - "**Try editing this cell to**:\n", - " * Create HeH+\n", - " * Create H3+\n", - " * Change the atoms' initial positions" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "atom1 = mdt.Atom('H')\n", - "atom2 = mdt.Atom('H')\n", - "atom1.bond_to(atom2,1)\n", - "atom2.x = 2.0 * u.angstrom\n", - "\n", - "h2 = mdt.Molecule([atom1,atom2], name='H2', charge=0)\n", - "h2.draw(height=300)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### B. Run a hartree-fock calculation\n", - "The next cell adds the RHF energy model to our molecule, then triggers a calculation.\n", - "\n", - "**Try editing this cell to**:\n", - " * Change the atomic basis\n", - " * Get a list of other available energy models (type `mdt.models.` and then hit the `[tab]` key)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "h2.set_energy_model(mdt.models.RHF, basis='3-21g')\n", - "h2.calculate()\n", - "\n", - "print 'Calculated properties:', h2.properties.keys()\n", - "print 'Potential energy:', h2.potential_energy" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### C. Visualize the orbitals\n", - "After running the calculation, we have enough information to visualize the molecular orbitals." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "h2.draw_orbitals()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### D. Minimize the energy\n", - "Here, we'll run a quick energy minimization then visualize how the hydrogen nuclei AND the atomic wavefunctions changed." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, - "outputs": [], - "source": [ - "minimization = h2.minimize(frame_interval=1, nsteps=10)\n", - "minimization.draw_orbitals()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "minimization" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### E. Scan the potential energy surface\n", - "This cell calculates the potential energy at a series of interatomic separations, from 0.3 to 7.0 Ã…; the results are collections in a `Trajectory` object, named `scan` here." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "distances = np.arange(0.3,7.0,0.5)*u.angstrom\n", - "scan = mdt.Trajectory(h2)\n", - "h2.atoms[0].x = 0.0*u.angstrom\n", - "for r in distances:\n", - " h2.atoms[1].x = r\n", - " h2.calc_potential_energy()\n", - " scan.new_frame(annotation='Separation: %s'%r)\n", - "\n", - "scan.draw_orbitals()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The results can also be plotted directly in `matplotlib`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "plot(distances, scan.potential_energy)\n", - "grid(); xlabel('separation / ang'); ylabel('energy / eV')\n", - "\n", - "figure()\n", - "plot(distances, scan.atoms[0].mulliken, label='atom 1 partial charge')\n", - "plot(distances, scan.atoms[1].mulliken, label='atom 2 partial charge')\n", - "grid(); xlabel('separation / ang'); ylabel('partial charge'); legend()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## II. Butadiene\n", - "This example deals with butadiene, a slightly larger molecule. Here, we'll scan its potential energy surface over its central dihedral angle.\n", - "\n", - "### A. Build the molecule and calculate its energy\n", - "The following code cell uses a SMILES string to create the molecule." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mol = mdt.from_smiles('C=CC=C')\n", - "mol.set_energy_model(mdt.models.RHF(basis='sto-3g'))\n", - "result = mol.calculate(['potential_energy','orbitals'], wait=True)\n", - "\n", - "print 'Potential energy:',result.potential_energy.to(u.kcalpermol)\n", - "mol.draw_orbitals()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### B. Select a bond\n", - "Next, we pull up an interactive widget to select a specific bond." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "selector = mdt.widgets.BondSelector(mol)\n", - "selector" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Click on any bond you like in the above widget. We can programatically access that selection using `selector.selected_bonds`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "selector.selected_bonds" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### C. Calculate the initial dihedral angle\n", - "Next, we'll gather the four atoms involved in the central dihedral and calculate the current angle." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "bond = selector.selected_bonds[0]\n", - "a1 = bond.a1\n", - "a2 = bond.a2\n", - "a0 = [atom for atom in a1.bond_graph \n", - " if atom.atnum==6 and atom is not a2][0]\n", - "a3 = [atom for atom in a2.bond_graph \n", - " if atom.atnum==6 and atom is not a1][0]\n", - "\n", - "print 'Dihedral:', mdt.dihedral(a0, a1, a2, a3).to(u.degrees)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### D. Scan over the dihedral angle\n", - "\n", - "This code loops over values of the dihedral angle from 180º to 360º, calcualting the wavefunction along the way." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "traj = mdt.Trajectory(mol)\n", - "traj.new_frame()\n", - "for angle in np.arange(180, 360.0, 15.0)*u.degrees:\n", - " mdt.set_dihedral(a0, a1, a2, a3, angle)\n", - " mol.calculate()\n", - " traj.new_frame(annotation='dihedral:%s' % angle) " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "traj.draw_orbitals()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "### E. Minimize the new form\n", - "\n", - "In the new *cis* form, we search for a new energy minimum:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "mintraj = mol.minimize(frame_interval=1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "plot(mintraj.potential_energy); ylabel('energy / eV'); grid()\n", - "mintraj.draw_orbitals()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## III. Advanced topics" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### A. Symmetry\n", - "You can use buckyball's symmetrization tools to build symmetric molecules, which can often lead to huge improvements in computational efficiency.\n", - "\n", - "First, let's look at the simplest possible organic molecule, methane. Its simplicity actually leads to some very complex symmetry." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "methane = mdt.from_name('methane')\n", - "mdt.widgets.Symmetrizer(methane)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The list of items on the right is the list of individual symmetry elements - for methane, there are a lot. Click on one to see it illustrated in 3D. Larger molecules will generally have far less symmetry.\n", - "\n", - "Let's take a look at ethane. We'll add some noise to the molecule's coordinates to destroy exact symmetry." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "ethane = mdt.from_smiles('CC')\n", - "for atom in ethane.atoms: atom.position += 0.1 * u.angstrom * np.random.random(3)\n", - "mdt.widgets.Symmetrizer(ethane)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can use the \"symmetrize\" button to impose individual symmetry elements exactly." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### B. Examining the wavefunction\n", - "You can dive deeply into the quantum wavefunction results by examining the `h2.electronic_state` object. For instance, we can verify that the MO basis diagonalizes the Fock matrix:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "fock_ao = h2.wfn.fock_ao\n", - "mos_in_ao = h2.wfn.molecular_orbitals\n", - "\n", - "matshow( h2.wfn.orbitals.canonical.fock )\n", - "title('Fock matrix in canonical MO basis'); cb = colorbar()\n", - "cb.set_label('energy / eV')\n", - "\n", - "matshow( h2.wfn.orbitals.atomic.fock )\n", - "title('Fock matrix in atomic orbital basis'); cb = colorbar()\n", - "cb.set_label('energy / eV')" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 2", - "language": "python", - "name": "python2" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.12" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} \ No newline at end of file diff --git a/moldesign/_notebooks/Example 2. UV-vis absorption spectra.ipynb b/moldesign/_notebooks/Example 2. UV-vis absorption spectra.ipynb new file mode 100644 index 0000000..67ac5e6 --- /dev/null +++ b/moldesign/_notebooks/Example 2. UV-vis absorption spectra.ipynb @@ -0,0 +1,253 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "About      \n", + "Forum      \n", + "Issues      \n", + "Tutorials      \n", + "Documentation\n", + "\n", + "![Molecular Design Toolkit](img/Top.png)\n", + "
\n", + "

Example 2: Using MD sampling to calculate UV-Vis spectra

\n", + "\n", + "---\n", + "\n", + "This notebook uses basic quantum chemical calculations to calculate the absorption spectra of a small molecule.\n", + "\n", + " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research
\n", + " - _Created on_: September 23, 2016\n", + " - _Tags_: excited states, CASSCF, absorption, sampling\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "from matplotlib.pylab import *\n", + "\n", + "try: import seaborn #optional, makes plots look nicer\n", + "except ImportError: pass\n", + "\n", + "import moldesign as mdt\n", + "from moldesign import units as u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Contents\n", + "=======\n", + "---\n", + " - [Single point](#Single-point)\n", + " - [Sampling](#Sampling)\n", + " - [Post-processing](#Post-processing)\n", + " - [Create spectrum](#Create-spectrum)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Single point\n", + "\n", + "Let's start with calculating the vertical excitation energy and oscillator strengths at the ground state minimum (aka Franck-Condon) geometry.\n", + "\n", + "Note that the active space and number of included states here is system-specific." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "qmmol = mdt.from_name('benzene')\n", + "qmmol.set_energy_model(mdt.models.CASSCF, active_electrons=6,\n", + " active_orbitals=6, state_average=6, basis='sto-3g')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "properties = qmmol.calculate()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This cell print a summary of the possible transitions. \n", + "\n", + "Note: you can convert excitation energies directly to nanometers using [Pint](https://pint.readthedocs.io) by calling `energy.to('nm', 'spectroscopy')`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for fstate in xrange(1, len(qmmol.properties.state_energies)):\n", + " excitation_energy = properties.state_energies[fstate] - properties.state_energies[0]\n", + " \n", + " print '--- Transition from S0 to S%d ---' % fstate \n", + " print 'Excitation wavelength: %s' % excitation_energy.to('nm', 'spectroscopy')\n", + " print 'Oscillator strength: %s' % qmmol.properties.oscillator_strengths[0,fstate]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Sampling\n", + "\n", + "Of course, molecular spectra aren't just a set of discrete lines - they're broadened by several mechanisms. We'll treat vibrations here by sampling the molecule's motion on the ground state at 300 Kelvin.\n", + "\n", + "To do this, we'll sample its geometries as it moves on the ground state by:\n", + " 1. Create a copy of the molecule\n", + " 2. Assign a forcefield (GAFF2/AM1-BCC)\n", + " 3. Run dynamics for 5 ps, taking a snapshot every 250 fs, for a total of 20 separate geometries." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mdmol = mdt.Molecule(qmmol)\n", + "mdmol.set_energy_model(mdt.models.GAFF)\n", + "mdmol.minimize()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mdmol.set_integrator(mdt.integrators.OpenMMLangevin, frame_interval=250*u.fs,\n", + " timestep=0.5*u.fs, constrain_hbonds=False, remove_rotation=True,\n", + " remove_translation=True, constrain_water=False)\n", + "mdtraj = mdmol.run(5.0 * u.ps)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Post-processing\n", + "\n", + "Next, we calculate the spectrum at each sampled geometry." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "post_traj = mdt.Trajectory(qmmol)\n", + "for frame in mdtraj:\n", + " qmmol.positions = frame.positions\n", + " qmmol.calculate()\n", + " post_traj.new_frame()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This cell plots the results - wavelength vs. oscillator strength at each geometry for each transition:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wavelengths_to_state = []\n", + "oscillators_to_state = []\n", + "for i in xrange(1, len(qmmol.properties.state_energies)):\n", + " wavelengths_to_state.append( (post_traj.state_energies[:,i] - post_traj.potential_energy).to('nm', 'spectroscopy'))\n", + " oscillators_to_state.append([o[0,i] for o in post_traj.oscillator_strengths])\n", + "\n", + " \n", + "for istate, (w,o) in enumerate(zip(wavelengths_to_state, oscillators_to_state)):\n", + " plot(w,o, label='S0 -> S%d'%(istate+1),\n", + " marker='o', linestyle='none')\n", + "xlabel('wavelength / nm'); ylabel('oscillator strength'); legend()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create spectrum\n", + "\n", + "We're finally ready to calculate a spectrum - we'll create a histogram of all calculated transition wavelengths over all states, weighted by the oscillator strengths." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from itertools import chain\n", + "all_wavelengths = u.array(list(chain(*wavelengths_to_state)))\n", + "all_oscs = u.array(list(chain(*oscillators_to_state)))\n", + "hist(all_wavelengths, weights=all_oscs, bins=50)\n", + "xlabel('wavelength / nm')" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + }, + "nav_menu": { + "height": "95px", + "width": "327px" + }, + "toc": { + "navigate_menu": true, + "number_sections": true, + "sideBar": true, + "threshold": 6, + "toc_cell": false, + "toc_section_display": "block", + "toc_window_display": false + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb b/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb index 2f19f7c..4bfd966 100644 --- a/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb +++ b/moldesign/_notebooks/Example 3. Simulating a crystal structure.ipynb @@ -13,19 +13,21 @@ "\n", "![Molecular Design Toolkit](img/Top.png)\n", "
\n", - "

Example 3: Simulating a Holliday Junction PDB assembly

\n", + "

Example 3: Simulating a Holliday Junction PDB assembly

\n", "\n", "---\n", "\n", - "This notebook takes a crystal structure from the PDB and prepares it for simulation." + "This notebook takes a crystal structure from the PDB and prepares it for simulation.\n", + "\n", + " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research\n", + " - _Created on_: July 1, 2016\n", + " - _Tags_: DNA, holliday junction, assembly, PDB, MD" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", @@ -64,10 +66,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false, - "scrolled": true - }, + "metadata": {}, "outputs": [], "source": [ "xtal = mdt.from_pdb('1kbu')\n", @@ -86,9 +85,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "assembly = mdt.build_assembly(xtal,'1')\n", @@ -105,9 +102,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "assembly" @@ -137,9 +132,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "query = {'residue.type':'dna'}\n", @@ -151,9 +144,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "## D. Prep for simulation\n", "Next, we'll assign a forcefield and energy model, then minimize the structure." @@ -162,9 +153,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "dna = mdt.assign_forcefield(dna_only)" @@ -173,9 +162,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "dna.set_energy_model(mdt.models.OpenMMPotential, implicit_solvent='obc')\n", @@ -185,9 +172,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "minimization = dna.minimize()" @@ -196,9 +181,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "minimization.draw()" @@ -215,21 +198,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "for atom in dna.get_atoms(name=\"HO3'\"):\n", - " dna.constrain_atom(atom)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "# Freeze the backbone:\n", @@ -241,9 +210,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "dna.set_integrator(mdt.integrators.OpenMMLangevin,\n", @@ -263,9 +230,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "equil1 = dna.run(20.0*u.ps)" @@ -274,9 +239,23 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, + "outputs": [], + "source": [ + "equil1.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Next**, we'll remove the constraints and do full dynamics:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, "outputs": [], "source": [ "dna.clear_constraints()\n", @@ -286,9 +265,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "equil = equil1 + equil2\n", @@ -298,9 +275,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "plot(equil2.time, equil2.rmsd())\n", @@ -328,9 +303,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "trajectory = dna.run(40.0*u.ps)" @@ -339,9 +312,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "trajectory.draw()" @@ -360,9 +331,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "trajectory.write('holliday_traj.P.gz')" @@ -378,9 +347,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "traj = mdt.read('holliday_traj.P.gz')" @@ -389,9 +356,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "traj.draw()" @@ -419,4 +384,4 @@ }, "nbformat": 4, "nbformat_minor": 0 -} +} \ No newline at end of file diff --git a/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb b/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb new file mode 100644 index 0000000..9e9c13d --- /dev/null +++ b/moldesign/_notebooks/Example 4. HIV Protease bound to an inhibitor.ipynb @@ -0,0 +1,365 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "About      Forum      Issues      Tutorials      Documentation\n", + "\n", + "![Molecular Design Toolkit](img/Top.png)\n", + "
\n", + "\n", + "

Example 4: The Dynamics of HIV Protease bound to a small molecule

\n", + "\n", + "This notebook prepares a co-crystallized protein / small molecule ligand structure from [the PDB database](http://www.rcsb.org/pdb/home/home.do) and prepares it for molecular dynamics simulation. \n", + "\n", + " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research
\n", + " - _Created on_: August 9, 2016\n", + " - _Tags_: HIV Protease, small molecule, ligand, drug, PDB, MD" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import moldesign as mdt\n", + "import moldesign.units as u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Contents\n", + "=======\n", + "---\n", + " - [I. The crystal structure](#I.-The-crystal-structure)\n", + " - [A. Download and visualize](#A.-Download-and-visualize)\n", + " - [B. Try assigning a forcefield](#B.-Try-assigning-a-forcefield)\n", + " - [II. Parameterizing a small molecule](#II.-Parameterizing-a-small-molecule)\n", + " - [A. Isolate the ligand](#A.-Isolate-the-ligand)\n", + " - [B. Assign bond orders and hydrogens](#B.-Assign-bond-orders-and-hydrogens)\n", + " - [C. Generate forcefield parameters](#C.-Generate-forcefield-parameters)\n", + " - [III. Prepping the protein](#III.-Prepping-the-protein)\n", + " - [A. Strip waters](#A.-Strip-waters)\n", + " - [B. Histidine](#B.-Histidine)\n", + " - [IV. Prep for dynamics](#IV.-Prep-for-dynamics)\n", + " - [A. Assign the forcefield](#A.-Assign-the-forcefield)\n", + " - [B. Attach and configure simulation methods](#B.-Attach-and-configure-simulation-methods)\n", + " - [D. Equilibrate the protein](#D.-Equilibrate-the-protein)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "## I. The crystal structure\n", + "\n", + "First, we'll download and investigate the [3AID crystal structure](http://www.rcsb.org/pdb/explore.do?structureId=3aid).\n", + "\n", + "### A. Download and visualize" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "protease = mdt.from_pdb('3AID')\n", + "protease" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "protease.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### B. Try assigning a forcefield" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This structure is not ready for MD - this command will raise a `ParameterizationError` Exception. After running this calculation, click on the **Errors/Warnings** tab to see why." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "newmol = mdt.assign_forcefield(protease)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You should see 3 errors: \n", + " 1. The residue name `ARQ` not recognized\n", + " 1. Atom `HD1` in residue `HIS69`, chain `A` was not recognized\n", + " 1. Atom `HD1` in residue `HIS69`, chain `B` was not recognized\n", + " \n", + "(There's also a warning about bond distances, but these can be generally be fixed with an energy minimization before running dynamics)\n", + "\n", + "We'll start by tackling the small molecule \"ARQ\"." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## II. Parameterizing a small molecule\n", + "We'll use the GAFF (generalized Amber force field) to create force field parameters for the small ligand.\n", + "\n", + "### A. Isolate the ligand\n", + "Click on the ligand to select it, then we'll use that selection to create a new molecule." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sel = mdt.widgets.ResidueSelector(protease)\n", + "sel" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "drugres = mdt.Molecule(sel.selected_residues[0])\n", + "drugres.draw2d(width=700, show_hydrogens=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### B. Assign bond orders and hydrogens\n", + "A PDB file provides only limited information; they often don't provide indicate bond orders, hydrogen locations, or formal charges. These can be added, however, with the `add_missing_pdb_data` tool:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "drugmol = mdt.add_missing_data(drugres)\n", + "drugmol.draw(width=500)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "drugmol.draw2d(width=700, show_hydrogens=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### C. Generate forcefield parameters\n", + "\n", + "We'll next generate forcefield parameters using this ready-to-simulate structure.\n", + "\n", + "**NOTE**: for computational speed, we use the `gasteiger` charge model. This is not advisable for production work! `am1-bcc` or `esp` are far likelier to produce sensible results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "drug_parameters = mdt.parameterize(drugmol, charges='gasteiger')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## III. Prepping the protein\n", + "\n", + "Section II. dealt with getting forcefield parameters for an unknown small molecule. Next, we'll prep the other part of the structure.\n", + "\n", + "### A. Strip waters\n", + "\n", + "Waters in crystal structures are usually stripped from a simulation as artifacts of the crystallization process. Here, we'll remove the waters from the protein structure." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "dehydrated = mdt.Molecule([atom for atom in protease.atoms if atom.residue.type != 'water'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### B. Histidine\n", + "Histidine is notoriously tricky, because it exists in no less than three different protonation states at biological pH (7.4) - the \"delta-protonated\" form, referred to with residue name `HID`; the \"epsilon-protonated\" form aka `HIE`; and the doubly-protonated form `HIP`, which has a +1 charge. Unfortunately, crystallography isn't usually able to resolve the difference between these three.\n", + "\n", + "Luckily, these histidines are pretty far from the ligand binding site, so their protonation is unlikely to affect the dynamics. We'll therefore use the `guess_histidine_states` function to assign a reasonable starting guess." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mdt.guess_histidine_states(dehydrated)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## IV. Prep for dynamics\n", + "\n", + "With these problems fixed, we can succesfully assigne a forcefield and set up the simulation.\n", + "\n", + "### A. Assign the forcefield\n", + "Now that we have parameters for the drug and have dealt with histidine, the forcefield assignment will succeed:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sim_mol = mdt.assign_forcefield(dehydrated, parameters=drug_parameters)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### B. Attach and configure simulation methods\n", + "\n", + "Armed with the forcefield parameters, we can connect an energy model to compute energies and forces, and an integrator to create trajectories:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "sim_mol.set_energy_model(mdt.models.OpenMMPotential, implicit_solvent='obc', cutoff=8.0*u.angstrom)\n", + "sim_mol.set_integrator(mdt.integrators.OpenMMLangevin, timestep=2.0*u.fs)\n", + "sim_mol.configure_methods()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### C. Equilibrate the protein\n", + "The next series of cells first minimize the crystal structure to remove clashes, then heats the system to 300K." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mintraj = sim_mol.minimize()\n", + "mintraj.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "traj = sim_mol.run(20*u.ps)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "viewer = traj.draw(display=True)\n", + "viewer.autostyle()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + }, + "nav_menu": {}, + "toc": { + "navigate_menu": true, + "number_sections": false, + "sideBar": true, + "threshold": 6, + "toc_cell": true, + "toc_section_display": "block", + "toc_window_display": false + }, + "toc_position": { + "height": "974px", + "left": "0px", + "right": "1166px", + "top": "106px", + "width": "212px" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/moldesign/_notebooks/Example 5. Enthalpic barriers.ipynb b/moldesign/_notebooks/Example 5. Enthalpic barriers.ipynb new file mode 100644 index 0000000..e49a2fe --- /dev/null +++ b/moldesign/_notebooks/Example 5. Enthalpic barriers.ipynb @@ -0,0 +1,313 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "About      \n", + "Forum      \n", + "Issues      \n", + "Tutorials      \n", + "Documentation\n", + "\n", + "![Molecular Design Toolkit](img/Top.png)\n", + "
\n", + "

Example 5: Calculating torsional barriers with relaxation

\n", + "\n", + "---\n", + "\n", + "This workflow calculates the enthalpic barrier of a small alkane.\n", + "\n", + " - _Author_: [Aaron Virshup](https://github.com/avirshup), Autodesk Research
\n", + " - _Created on_: September 23, 2016\n", + " - _Tags_: reaction path, constrained minimization, torsion, enthalpic\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import moldesign as mdt\n", + "from moldesign import units as u\n", + "\n", + "%matplotlib notebook\n", + "from matplotlib.pyplot import *\n", + "try: import seaborn # optional, makes graphs look better\n", + "except ImportError: pass\n", + "\n", + "u.default.energy = u.kcalpermol # use kcal/mol for energy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Contents\n", + "=======\n", + "---\n", + " - [I. Create and minimize the molecule](#I.-Create-and-minimize-the-molecule)\n", + " - [II. Select the torsional bond](#II.-Select-the-torsional-bond)\n", + " - [III. Rigid rotation scan](#III.-Rigid-rotation-scan)\n", + " - [IV. Relaxed rotation scan](#IV.-Relaxed-rotation-scan)\n", + " - [V. Plot the potential energy surfaces](#V.-Plot-the-potential-energy-surfaces)\n", + " - [VI. Investigate conformational changes](#VI.-Investigate-conformational-changes)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# I. Create and minimize the molecule" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mol = mdt.from_smiles('CCCC')\n", + "mol.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mol.set_energy_model(mdt.models.GAFF)\n", + "mol.energy_model.configure()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "minimization = mol.minimize(nsteps=40)\n", + "minimization.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# II. Select the torsional bond\n", + "\n", + "Next, we use the `BondSelector` to pick the bond that we'll rotate around." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "bs = mdt.widgets.BondSelector(mol)\n", + "bs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "twist = mdt.DihedralMonitor(bs.selected_bonds[0])\n", + "twist" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# III. Rigid rotation scan\n", + "\n", + "First, we'll perform a simple energy scan, simply by rotating around the bond and calculating the energy at each point.\n", + "\n", + "This gives us only an _upper bound_ on the enthalpic rotation barrier. This is because we keep the molecule rigid, except for the single rotating bond." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "angles = np.arange(-150, 210, 5) * u.degree" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rigid = mdt.Trajectory(mol)\n", + "for angle in angles:\n", + " twist.value = angle\n", + " mol.calculate()\n", + " rigid.new_frame(annotation='angle: %s, energy: %s' % (twist.value.to(u.degrees), mol.potential_energy))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "rigid.draw()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "figure()\n", + "plot(angles, rigid.potential_energy)\n", + "xlabel(u'dihedral / º'); ylabel('energy / kcal/mol')\n", + "xticks(np.arange(-120,211,30))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# IV. Relaxed rotation scan\n", + "\n", + "Next, we'll get the *right* barrier (up to the accuracy of the energy model).\n", + "\n", + "Here, we'll rotate around the bond, but then perform a _constrained minimization_ at each rotation point. This will allow all other degrees of freedom to relax, thus finding lower energies at each point along the path. \n", + "\n", + "_Note_: In order to break any spurious symmetries, this loop also adds a little bit of random noise to each structure before performing the minimization." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "constraint = twist.constrain()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "relaxed = mdt.Trajectory(mol)\n", + "for angle in angles:\n", + " print angle,':',\n", + " \n", + " #add random noise to break symmetry\n", + " mol.positions += np.random.random(mol.positions.shape) * 0.01*u.angstrom\n", + " mol.positions -= mol.center_of_mass\n", + " \n", + " twist.value = angle\n", + " constraint.value = angle\n", + " \n", + " t = mol.minimize(nsteps=100)\n", + " relaxed.new_frame(annotation='angle: %s, energy: %s' % (twist.value.to(u.degrees), mol.potential_energy))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "relaxed.draw()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# V. Plot the potential energy surfaces\n", + "\n", + "If you plotted butane's rotation around its central bond, you'll see [three stable points](https://en.wikipedia.org/wiki/Alkane_stereochemistry#Conformation): two at about ±60º (the _gauche_ conformations), and one at 180º (the _anti_ conformation).\n", + "\n", + "You will likely see a large differences in the energetics of the relaxed and rigid scans; depending on the exact starting conformation, the rigid scan can overestimate the rotation barrier by as much as 5 kcal/mol!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "figure()\n", + "plot(angles, rigid.potential_energy, label='rigid')\n", + "plot(angles, relaxed.potential_energy, label='relaxed')\n", + "plot(angles, abs(rigid.potential_energy - relaxed.potential_energy), label='error')\n", + "xlabel(u'dihedral / º'); ylabel('energy / kcal/mol'); legend()\n", + "xticks(np.arange(-120,211,30))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# VI. Investigate conformational changes\n", + "\n", + "This cell illustrates a simple interactive \"app\" - select the bonds you're interested in, then click the \"show_dihedral\" button to show their relaxed angles as a function of the central twist during the `relaxed` scan." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from ipywidgets import interact_manual\n", + "\n", + "bs = mdt.widgets.BondSelector(mol)\n", + "def show_dihedral():\n", + " figure()\n", + " for bond in bs.selected_bonds:\n", + " dihemon = mdt.DihedralMonitor(bond)\n", + " plot(angles, dihemon(relaxed).to(u.degrees), label=str(bond))\n", + " legend(); xlabel(u'central twist / º'); ylabel(u'bond twist / º')\n", + "interact_manual(show_dihedral)\n", + "bs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file diff --git a/moldesign/_notebooks/Getting Started.ipynb b/moldesign/_notebooks/Getting Started.ipynb index 52f333a..dfa0be7 100644 --- a/moldesign/_notebooks/Getting Started.ipynb +++ b/moldesign/_notebooks/Getting Started.ipynb @@ -2,9 +2,7 @@ "cells": [ { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "![Molecular Design Toolkit](img/Header.png)\n", "\n", @@ -14,15 +12,18 @@ "\n", "Get started with these step-by-step demonstration notebooks. Check out the accompanying [video tutorials](https://www.youtube.com/channel/UCRmzThLOYJ3Tx1e81fXRfOA).\n", "\n", - "* [Tutorial 1: Making a molecule.ipynb](Tutorial 1. Making a molecule.ipynb)\n", - "* [Tutorial 2: Biochemical basics](Tutorial 2. Biochemical basics.ipynb)\n", + "* [Tutorial 1. Making a molecule](Tutorial 1. Making a molecule.ipynb)\n", + "* [Tutorial 2. Biochemical basics](Tutorial 2. Biochemical basics.ipynb)\n", + "* [Tutorial 3. Quantum Chemistry](Tutorial 3. Quantum Chemistry.ipynb)\n", "\n", "\n", "# Keep going\n", "\n", - "* [Example 1. Build and simulate DNA.ipynb](Example 1. Build and simulate DNA.ipynb)\n", - "* [Example 2. Running Quantum Chemistry.ipynb](Example 2. Running Quantum Chemistry.ipynb)\n", - "* [Example 3. Simulating a crystal structure.ipynb](Example 3. Simulating a crystal structure.ipynb)\n", + "* [Example 1. Build and simulate DNA](Example 1. Build and simulate DNA.ipynb)\n", + "* [Example 2. UV-vis absorption spectra](Example 2. UV-vis absorption spectra.ipynb)\n", + "* [Example 3. Simulating a crystal structure](Example 3. Simulating a crystal structure.ipynb)\n", + "* [Example 4. HIV Protease bound to an inhibitor](Example 4. HIV Protease bound to an inhibitor.ipynb)\n", + "* [Example 5. Enthalpic barriers](Example 5. Enthalpic barriers.ipynb)\n", "\n", "\n", "# Read the docs\n", @@ -51,9 +52,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] } @@ -67,7 +66,7 @@ "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2.0 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", diff --git a/moldesign/_notebooks/Tutorial 1. Making a molecule.ipynb b/moldesign/_notebooks/Tutorial 1. Making a molecule.ipynb index e72d771..24fa80b 100644 --- a/moldesign/_notebooks/Tutorial 1. Making a molecule.ipynb +++ b/moldesign/_notebooks/Tutorial 1. Making a molecule.ipynb @@ -4,7 +4,6 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", "About      Forum      Issues      Tutorials      Documentation\n", "\n", "![Molecular Design Toolkit](img/Top.png)\n", @@ -12,7 +11,7 @@ "\n", "

Tutorial 1: Making a molecule

\n", "\n", - "This notebook gets you started with MDT - you'll build a molecule, visualize it, and look inside." + "This notebook gets you started with MDT - you'll build a small molecule, visualize it, and run a basic calculation." ] }, { @@ -43,9 +42,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import moldesign as mdt\n", @@ -64,9 +61,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mdt.configure()" @@ -86,9 +81,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "molecule = mdt.read('data/butane.xyz')" @@ -104,9 +97,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "molecule" @@ -123,9 +114,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "molecule.draw()" @@ -152,9 +141,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "molecule.set_energy_model(mdt.models.RHF, basis='sto-3g')\n", @@ -164,9 +151,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "print properties.keys()\n", @@ -184,9 +169,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mintraj = molecule.minimize()" @@ -195,9 +178,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mintraj.draw_orbitals()" @@ -213,9 +194,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "molecule.write('my_first_molecule.xyz')" @@ -224,9 +203,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "mintraj.write('my_first_minimization.P.gz')" @@ -234,9 +211,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": false - }, + "metadata": {}, "source": [ "## 7. Examine it\n", "There are any number of directions to go from here. For this tutorial, try click on some bonds to check the molecule's geometry." @@ -245,9 +220,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "mdt.widgets.GeometryBuilder(molecule)" @@ -263,9 +236,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mdt.dihedral(*molecule.atoms[:4]).to(u.degrees)" @@ -293,4 +264,4 @@ }, "nbformat": 4, "nbformat_minor": 0 -} +} \ No newline at end of file diff --git a/moldesign/_notebooks/Tutorial 2. Biochemical basics.ipynb b/moldesign/_notebooks/Tutorial 2. Biochemical basics.ipynb index 2f5ae80..e2c1f15 100644 --- a/moldesign/_notebooks/Tutorial 2. Biochemical basics.ipynb +++ b/moldesign/_notebooks/Tutorial 2. Biochemical basics.ipynb @@ -13,19 +13,23 @@ "\n", "

Tutorial 2: Playing with proteins

\n", "\n", - "Here, you'll see how to get, visualize, and analyze static protein structures." + "Here, you'll see how to build, visualize, and simulate a protein structure from the PDB." ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "import moldesign as mdt\n", - "from moldesign import units as u" + "from moldesign import units as u\n", + "\n", + "%matplotlib inline\n", + "import numpy as np\n", + "from matplotlib.pylab import *\n", + "try: import seaborn\n", + "except ImportError: pass" ] }, { @@ -44,9 +48,7 @@ }, { "cell_type": "markdown", - "metadata": { - "collapsed": true - }, + "metadata": {}, "source": [ "# 1. Download from PDB\n", "In this example, we'll download `1YU8`, a structure of the Villin Headpiece." @@ -55,9 +57,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "one_yu8 = mdt.from_pdb('1YU8')\n", @@ -67,9 +67,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "one_yu8" @@ -85,9 +83,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "headpiece = mdt.Molecule([res for res in one_yu8.residues if res.type == 'protein'])" @@ -96,9 +92,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "protein = mdt.assign_forcefield(headpiece)" @@ -114,9 +108,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "protein.set_energy_model(mdt.models.OpenMMPotential, implicit_solvent='obc')" @@ -125,9 +117,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "mintraj = protein.minimize()" @@ -136,12 +126,10 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "mintraj.draw()" + "mintraj.draw(display=False)" ] }, { @@ -154,9 +142,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "protein.set_integrator(mdt.integrators.OpenMMLangevin,\n", @@ -168,9 +154,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ "traj = protein.run(50*u.ps)" @@ -179,9 +163,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ "traj.draw()" @@ -198,38 +180,34 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [ - "%matplotlib inline\n", - "from matplotlib import pyplot as plt" + "plot(traj.time, traj.kinetic_energy)\n", + "xlabel('time / %s' % u.default.time); ylabel('energy / %s' % u.default.energy)" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "plt.plot(traj.time, traj.kinetic_energy)" + "myres = protein.chains['1'].residues['PHE45']\n", + "plot(traj.time, traj.dihedral(myres['CG'], myres['CB']).to(u.degrees))\n", + "title('dihedral angle vs time')\n", + "xlabel('time / %s' % u.default.time); ylabel('angle / degrees')" ] }, { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": false - }, + "metadata": {}, "outputs": [], "source": [ - "myres = protein.chains['1'].residues['PHE45']\n", - "plt.plot(traj.time, traj.dihedral(myres['CG'], myres['CB']).to(u.degrees)); plt.title('dihedral angle vs time')\n", - "plt.figure()\n", - "plt.plot(traj.time, traj.distance(myres['CG'], myres['CB'])); plt.title('bond length vs time')" + "plot(traj.time, traj.distance(myres['CG'], myres['CB']))\n", + "plt.title('bond length vs time')\n", + "xlabel('time / %s' % u.default.time); ylabel('distance / %s' % u.default.length)" ] } ], diff --git a/moldesign/_notebooks/Tutorial 3. Quantum Chemistry.ipynb b/moldesign/_notebooks/Tutorial 3. Quantum Chemistry.ipynb new file mode 100644 index 0000000..4893528 --- /dev/null +++ b/moldesign/_notebooks/Tutorial 3. Quantum Chemistry.ipynb @@ -0,0 +1,378 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "About      Forum      Issues      Tutorials      Documentation\n", + "\n", + "![Molecular Design Toolkit](img/Top.png)\n", + "\n", + "\n", + "

Tutorial 3: Intro to Quantum Chemistry

\n", + "---\n", + "\n", + "This tutorial shows how to select a quantum chemistry method, visualize orbitals, and analyze the electronic wavefunction." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "from matplotlib.pylab import *\n", + "try: import seaborn #optional, makes plots look nicer\n", + "except ImportError: pass\n", + "\n", + "import moldesign as mdt\n", + "from moldesign import units as u" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## I. Build and minimize minimal basis set hydrogen\n", + "\n", + "### A. Build the molecule\n", + "This cell builds H2 by creating the two atoms, and explicitly setting their positions.\n", + "\n", + "**Try editing this cell to**:\n", + " * Create HeH+\n", + " * Create H3+\n", + " * Change the atoms' initial positions" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "atom1 = mdt.Atom('H')\n", + "atom2 = mdt.Atom('H')\n", + "atom1.bond_to(atom2,1)\n", + "atom2.x = 2.0 * u.angstrom\n", + "\n", + "h2 = mdt.Molecule([atom1,atom2], name='H2', charge=0)\n", + "h2.draw(height=300)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### B. Run a hartree-fock calculation\n", + "The next cell adds the RHF energy model to our molecule, then triggers a calculation.\n", + "\n", + "**Try editing this cell to**:\n", + " * Change the atomic basis\n", + " * Get a list of other available energy models (type `mdt.models.` and then hit the `[tab]` key)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "h2.set_energy_model(mdt.models.RHF, basis='3-21g')\n", + "h2.calculate()\n", + "\n", + "print 'Calculated properties:', h2.properties.keys()\n", + "print 'Potential energy:', h2.potential_energy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### C. Visualize the orbitals\n", + "After running the calculation, we have enough information to visualize the molecular orbitals." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "h2.draw_orbitals()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### D. Minimize the energy\n", + "Here, we'll run a quick energy minimization then visualize how the hydrogen nuclei AND the atomic wavefunctions changed." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "minimization = h2.minimize(frame_interval=1, nsteps=10)\n", + "minimization.draw_orbitals()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# II. Analyzing the wavefunction\n", + "\n", + "The wavefunction created during QM calculations will be stored as an easy-to-analyze python object:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wfn = h2.wfn\n", + "wfn" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## A. The atomic basis set\n", + "First, let's examine the atomic orbitals. The overlaps, fock matrix, coefficents, and density matrix are all available as 2D numpy arrays (with units where applicable):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Overlap matrix\n", + "wfn.aobasis.overlaps" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Fock matrix\n", + "matshow(wfn.aobasis.fock.value_in(u.eV))\n", + "colorbar(label='fock element / eV')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# The AO orbital coefficients (in the AO basis, this is the identity)\n", + "wfn.aobasis.coeffs" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wfn.aobasis.density_matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The 1- and 2-electron parts of the hamiltonian are also available:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matshow(wfn.aobasis.h1e.value_in(u.eV))\n", + "colorbar(label='1-electron hamiltonian term / eV')\n", + "\n", + "matshow(wfn.aobasis.h2e.value_in(u.eV))\n", + "colorbar(label='2-electron hamiltonian term / eV')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## B. The canonical molecular orbitals\n", + "\n", + "These are the orbitals that result from Hartree-Fock calculations - they diagonalize the fock matrix. All quantities that we looked at for the atomic orbitals are also available for the canonical orbitals." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mos = wfn.orbitals.canonical\n", + "mos" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "MOs are, of course, a linear combination of AOs:\n", + "\n", + "\\begin{equation} \\left| \\text{MO}_i \\right \\rangle = \\sum_j c_{ij} \\left| \\text{AO}_j \\right\\rangle \\end{equation}\n", + "\n", + "The coefficient $c_{ij}$ is stored at `mos.coeffs[i,j]`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mos.coeffs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Most MO sets are orthogonal; their overlaps will often be the identity matrix (plus some small numerical noise)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "mos.overlaps" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By definition, the fock matrix should be orthogonal as well; the orbital energies are on its diagonal." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "matshow(mos.fock.value_in(u.eV))\n", + "colorbar(label='fock element/eV')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `MolecularOrbitals` class also offers several methods to transform operators into different bases. For instance, the `overlap` method creates an overlap matrix between the AOs and MOs, where olap[i,j] is the overlap between MO _i_ and AO _j_:\n", + "\\begin{equation}\n", + "\\text{olap[i,j]} = \\left\\langle MO_i \\middle| AO_j \\right \\rangle\n", + "\\end{equation}\n", + "\n", + "Note: this matrix is NOT the same as the MO coefficient matrix, because AOs are not orthogonal." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "olap = mos.overlap(wfn.aobasis)\n", + "olap" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## C. Individual orbitals\n", + "\n", + "You can work with inidividual orbitals as well. For instance, to get a list (in order) of the four AOs:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "wfn.aobasis.orbitals" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ao0 = wfn.aobasis.orbitals[0]\n", + "ao1 = wfn.aobasis.orbitals[1]\n", + "\n", + "print ao0\n", + "print ao1" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Many matrix elements can also be accessed directly from these orbitals." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print 'overlap (from orbitals)',ao0.overlap(ao1)\n", + "print 'overlap (from overlap matrix)', wfn.aobasis.overlaps[0,1]\n", + "print\n", + "print 'fock element (from orbitals)', ao0.fock_element(ao1)\n", + "print 'fock element (from fock matrix)', wfn.aobasis.fock[0,1]" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} \ No newline at end of file diff --git a/moldesign/_notebooks/nbscripts/gen_example_md.py b/moldesign/_notebooks/nbscripts/gen_example_md.py new file mode 100755 index 0000000..9687b81 --- /dev/null +++ b/moldesign/_notebooks/nbscripts/gen_example_md.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python +import glob + +for f in glob.glob('Example*.ipynb'): + print '* [%s](%s)' % (f[:-6], f) + +print + +for f in glob.glob('Tutorial*.ipynb'): + print '* [%s](%s)' % (f[:-6], f) + diff --git a/moldesign/_notebooks/nbscripts/strip_nb_output.py b/moldesign/_notebooks/nbscripts/strip_nb_output.py index 92d4857..8356ce0 100755 --- a/moldesign/_notebooks/nbscripts/strip_nb_output.py +++ b/moldesign/_notebooks/nbscripts/strip_nb_output.py @@ -25,6 +25,8 @@ def strip_output(nb): cell['outputs'] = [] if 'execution_count' in cell: cell['execution_count'] = None + if 'metadata' in cell: + cell['metadata'] = {} return nb if __name__ == '__main__': diff --git a/moldesign/_static_data/pint_atomic_units.txt b/moldesign/_static_data/pint_atomic_units.txt index c180588..1b7de80 100644 --- a/moldesign/_static_data/pint_atomic_units.txt +++ b/moldesign/_static_data/pint_atomic_units.txt @@ -8,3 +8,4 @@ ps = picosecond = 1.0 * piscosecond amu = 1.0 * atomic_mass_units ang = 1.0 * angstrom eV = electron_volt +debye = 0.393430307 * elementary_charge * bohr diff --git a/moldesign/_static_data/residue_templates.json b/moldesign/_static_data/residue_templates.json new file mode 100644 index 0000000..b5c04aa --- /dev/null +++ b/moldesign/_static_data/residue_templates.json @@ -0,0 +1 @@ +{"ILE": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N ILE B 92 -66.813 -7.120 7.545 1.00 0.00 N \nATOM 2 CA ILE B 92 -65.821 -8.056 8.073 1.00 0.00 C \nATOM 3 C ILE B 92 -66.404 -9.432 8.417 1.00 0.00 C \nATOM 4 O ILE B 92 -65.709 -10.448 8.340 1.00 0.00 O \nATOM 5 CB ILE B 92 -65.095 -7.471 9.303 1.00 0.00 C \nATOM 6 CG1 ILE B 92 -63.886 -8.330 9.675 1.00 0.00 C \nATOM 7 CG2 ILE B 92 -66.047 -7.344 10.479 1.00 0.00 C \nATOM 8 CD1 ILE B 92 -62.788 -8.299 8.661 1.00 0.00 C \nATOM 9 H ILE B 92 -66.363 -6.229 7.338 1.00 0.00 H \nATOM 10 H10 ILE B 92 -67.548 -6.977 8.238 1.00 0.00 H \nATOM 11 H11 ILE B 92 -65.116 -8.202 7.281 1.00 0.00 H \nATOM 12 H12 ILE B 92 -67.389 -9.509 8.716 1.00 0.00 H \nATOM 13 H13 ILE B 92 -64.745 -6.492 9.051 1.00 0.00 H \nATOM 14 H14 ILE B 92 -64.213 -9.343 9.787 1.00 0.00 H \nATOM 15 H15 ILE B 92 -63.484 -7.927 10.581 1.00 0.00 H \nATOM 16 H16 ILE B 92 -66.411 -8.313 10.750 1.00 0.00 H \nATOM 17 H17 ILE B 92 -66.870 -6.717 10.205 1.00 0.00 H \nATOM 18 H18 ILE B 92 -65.531 -6.912 11.311 1.00 0.00 H \nATOM 19 H19 ILE B 92 -63.147 -8.695 7.734 1.00 0.00 H \nATOM 20 H20 ILE B 92 -61.966 -8.890 9.007 1.00 0.00 H \nATOM 21 H21 ILE B 92 -62.465 -7.289 8.516 1.00 0.00 H \nCONECT 1 9 2 10 \nCONECT 2 1 3 5 11 \nCONECT 3 4 12 2 \nCONECT 4 3 \nCONECT 5 6 13 7 2 \nCONECT 6 15 5 8 14 \nCONECT 7 17 16 5 18 \nCONECT 8 6 21 20 19 \nCONECT 9 1 \nCONECT 10 1 \nCONECT 11 2 \nCONECT 12 3 \nCONECT 13 5 \nCONECT 14 6 \nCONECT 15 6 \nCONECT 16 7 \nCONECT 17 7 \nCONECT 18 7 \nCONECT 19 8 \nCONECT 20 8 \nCONECT 21 8 \nMASTER 0 0 0 0 0 0 0 0 21 0 21 0\nEND\n", "GLN": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N GLN B 72 -75.527 -11.475 17.192 1.00 0.00 N \nATOM 2 CA GLN B 72 -76.080 -10.134 17.093 1.00 0.00 C \nATOM 3 C GLN B 72 -76.405 -9.695 15.673 1.00 0.00 C \nATOM 4 O GLN B 72 -77.351 -8.949 15.473 1.00 0.00 O \nATOM 5 CB GLN B 72 -75.167 -9.118 17.774 1.00 0.00 C \nATOM 6 CG GLN B 72 -75.174 -9.228 19.281 1.00 0.00 C \nATOM 7 CD GLN B 72 -74.183 -8.294 19.926 1.00 0.00 C \nATOM 8 OE1 GLN B 72 -73.178 -8.732 20.481 1.00 0.00 O \nATOM 9 NE2 GLN B 72 -74.458 -6.995 19.856 1.00 0.00 N \nATOM 10 H GLN B 72 -75.337 -11.693 18.170 1.00 0.00 H \nATOM 11 H11 GLN B 72 -74.659 -11.525 16.658 1.00 0.00 H \nATOM 12 H12 GLN B 72 -77.018 -10.173 17.607 1.00 0.00 H \nATOM 13 H13 GLN B 72 -75.829 -10.026 14.883 1.00 0.00 H \nATOM 14 H14 GLN B 72 -75.491 -8.135 17.503 1.00 0.00 H \nATOM 15 H15 GLN B 72 -74.168 -9.317 17.445 1.00 0.00 H \nATOM 16 H16 GLN B 72 -76.154 -8.991 19.639 1.00 0.00 H \nATOM 17 H17 GLN B 72 -74.896 -10.229 19.538 1.00 0.00 H \nATOM 18 H18 GLN B 72 -75.276 -6.689 19.401 1.00 0.00 H \nATOM 19 H19 GLN B 72 -73.844 -6.339 20.259 1.00 0.00 H \nCONECT 1 11 10 2 \nCONECT 2 5 12 3 1 \nCONECT 3 4 13 2 \nCONECT 4 3 \nCONECT 5 2 15 6 14 \nCONECT 6 5 16 7 17 \nCONECT 7 6 9 8 \nCONECT 8 7 \nCONECT 9 19 7 18 \nCONECT 10 1 \nCONECT 11 1 \nCONECT 12 2 \nCONECT 13 3 \nCONECT 14 5 \nCONECT 15 5 \nCONECT 16 6 \nCONECT 17 6 \nCONECT 18 9 \nCONECT 19 9 \nMASTER 0 0 0 0 0 0 0 0 19 0 19 0\nEND\n", "DG": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 P DG B 5 -5.889 6.175 5.509 1.00 0.00 P \nATOM 2 OP1 DG B 5 -6.554 7.446 5.873 1.00 0.00 O \nATOM 3 OP2 DG B 5 -6.567 5.316 4.513 1.00 0.00 O \nATOM 4 O5' DG B 5 -4.411 6.584 5.052 1.00 0.00 O \nATOM 5 C5' DG B 5 -3.446 6.950 6.056 1.00 0.00 C \nATOM 6 H5' DG B 5 -3.299 6.115 6.741 1.00 0.00 H \nATOM 7 H5'' DG B 5 -3.809 7.815 6.612 1.00 0.00 H \nATOM 8 C4' DG B 5 -2.120 7.299 5.401 1.00 0.00 C \nATOM 9 H4' DG B 5 -1.521 7.898 6.086 1.00 0.00 H \nATOM 10 O4' DG B 5 -1.348 6.073 5.217 1.00 0.00 O \nATOM 11 C1' DG B 5 -1.355 5.693 3.849 1.00 0.00 C \nATOM 12 H1' DG B 5 -0.333 5.670 3.472 1.00 0.00 H \nATOM 13 N9 DG B 5 -1.793 4.272 3.766 1.00 0.00 N \nATOM 14 C8 DG B 5 -3.071 3.750 3.792 1.00 0.00 C \nATOM 15 H8 DG B 5 -3.922 4.409 3.883 1.00 0.00 H \nATOM 16 N7 DG B 5 -3.114 2.444 3.700 1.00 0.00 N \nATOM 17 C5 DG B 5 -1.779 2.070 3.608 1.00 0.00 C \nATOM 18 C6 DG B 5 -1.189 0.785 3.486 1.00 0.00 C \nATOM 19 O6 DG B 5 -1.739 -0.314 3.435 1.00 0.00 O \nATOM 20 N1 DG B 5 0.207 0.868 3.423 1.00 0.00 N \nATOM 21 H1 DG B 5 0.715 0.010 3.338 1.00 0.00 H \nATOM 22 C2 DG B 5 0.939 2.037 3.469 1.00 0.00 C \nATOM 23 N2 DG B 5 2.270 1.902 3.394 1.00 0.00 N \nATOM 24 H21 DG B 5 2.790 1.039 3.320 1.00 0.00 H \nATOM 25 H22 DG B 5 2.813 2.752 3.436 1.00 0.00 H \nATOM 26 N3 DG B 5 0.384 3.241 3.581 1.00 0.00 N \nATOM 27 C4 DG B 5 -0.973 3.178 3.643 1.00 0.00 C \nATOM 28 C3' DG B 5 -2.210 7.906 3.999 1.00 0.00 C \nATOM 29 H3' DG B 5 -3.141 8.464 3.903 1.00 0.00 H \nATOM 30 C2' DG B 5 -2.261 6.670 3.097 1.00 0.00 C \nATOM 31 H2' DG B 5 -3.189 6.677 2.525 1.00 0.00 H \nATOM 32 H2'' DG B 5 -1.413 6.683 2.414 1.00 0.00 H \nATOM 33 O3' DG B 5 -1.106 8.694 3.577 1.00 0.00 O \nATOM 34 H DG B 5 -6.090 5.027 6.247 1.00 0.00 H \nATOM 35 H35 DG B 5 -6.660 5.801 3.678 1.00 0.00 H \nATOM 36 H36 DG B 5 -1.045 9.488 4.131 1.00 0.00 H \nCONECT 1 2 3 34 4 \nCONECT 2 1 \nCONECT 3 35 1 \nCONECT 4 5 1 \nCONECT 5 8 4 6 7 \nCONECT 6 5 \nCONECT 7 5 \nCONECT 8 5 28 9 10 \nCONECT 9 8 \nCONECT 10 11 8 \nCONECT 11 10 30 13 12 \nCONECT 12 11 \nCONECT 13 11 27 14 \nCONECT 14 15 16 13 \nCONECT 15 14 \nCONECT 16 17 14 \nCONECT 17 16 18 27 \nCONECT 18 19 17 20 \nCONECT 19 18 \nCONECT 20 22 18 21 \nCONECT 21 20 \nCONECT 22 20 26 23 \nCONECT 23 25 24 22 \nCONECT 24 23 \nCONECT 25 23 \nCONECT 26 22 27 \nCONECT 27 13 26 17 \nCONECT 28 8 30 33 29 \nCONECT 29 28 \nCONECT 30 11 28 31 32 \nCONECT 31 30 \nCONECT 32 30 \nCONECT 33 36 28 \nCONECT 34 1 \nCONECT 35 3 \nCONECT 36 33 \nMASTER 0 0 0 0 0 0 0 0 36 0 36 0\nEND\n", "DC": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 P DC B 3 -7.669 -3.704 12.267 1.00 0.00 P \nATOM 2 OP1 DC B 3 -9.083 -3.954 12.625 1.00 0.00 O \nATOM 3 OP2 DC B 3 -7.051 -4.611 11.274 1.00 0.00 O \nATOM 4 O5' DC B 3 -7.611 -2.172 11.808 1.00 0.00 O \nATOM 5 C5' DC B 3 -7.672 -1.140 12.811 1.00 0.00 C \nATOM 6 H5' DC B 3 -6.835 -1.251 13.499 1.00 0.00 H \nATOM 7 H5'' DC B 3 -8.609 -1.224 13.363 1.00 0.00 H \nATOM 8 C4' DC B 3 -7.601 0.228 12.154 1.00 0.00 C \nATOM 9 H4' DC B 3 -7.995 0.981 12.837 1.00 0.00 H \nATOM 10 O4' DC B 3 -6.199 0.594 11.976 1.00 0.00 O \nATOM 11 C1' DC B 3 -5.834 0.470 10.609 1.00 0.00 C \nATOM 12 H1' DC B 3 -5.501 1.438 10.232 1.00 0.00 H \nATOM 13 N1 DC B 3 -4.610 -0.377 10.531 1.00 0.00 N \nATOM 14 C6 DC B 3 -4.692 -1.734 10.574 1.00 0.00 C \nATOM 15 H6 DC B 3 -5.655 -2.214 10.665 1.00 0.00 H \nATOM 16 C5 DC B 3 -3.574 -2.505 10.503 1.00 0.00 C \nATOM 17 H5 DC B 3 -3.658 -3.591 10.538 1.00 0.00 H \nATOM 18 C4 DC B 3 -2.323 -1.822 10.383 1.00 0.00 C \nATOM 19 N4 DC B 3 -1.198 -2.509 10.309 1.00 0.00 N \nATOM 20 H41 DC B 3 -0.336 -1.990 10.225 1.00 0.00 H \nATOM 21 H42 DC B 3 -1.215 -3.518 10.337 1.00 0.00 H \nATOM 22 N3 DC B 3 -2.253 -0.495 10.342 1.00 0.00 N \nATOM 23 C2 DC B 3 -3.383 0.259 10.415 1.00 0.00 C \nATOM 24 O2 DC B 3 -3.358 1.498 10.380 1.00 0.00 O \nATOM 25 C3' DC B 3 -8.201 0.324 10.749 1.00 0.00 C \nATOM 26 H3' DC B 3 -9.015 -0.394 10.652 1.00 0.00 H \nATOM 27 C2' DC B 3 -7.036 -0.099 9.853 1.00 0.00 C \nATOM 28 H2' DC B 3 -7.319 -0.982 9.280 1.00 0.00 H \nATOM 29 H2'' DC B 3 -6.789 0.713 9.170 1.00 0.00 H \nATOM 30 O3' DC B 3 -8.617 1.614 10.325 1.00 0.00 O \nATOM 31 H DC B 3 -7.361 -2.862 11.218 1.00 0.00 H \nATOM 32 H32 DC B 3 -7.036 -5.514 11.627 1.00 0.00 H \nATOM 33 H33 DC B 3 -8.979 1.558 9.427 1.00 0.00 H \nCONECT 1 3 4 31 2 \nCONECT 2 1 \nCONECT 3 1 32 \nCONECT 4 5 1 \nCONECT 5 4 8 7 6 \nCONECT 6 5 \nCONECT 7 5 \nCONECT 8 10 25 5 9 \nCONECT 9 8 \nCONECT 10 8 11 \nCONECT 11 12 27 13 10 \nCONECT 12 11 \nCONECT 13 14 11 23 \nCONECT 14 16 13 15 \nCONECT 15 14 \nCONECT 16 14 17 18 \nCONECT 17 16 \nCONECT 18 19 16 22 \nCONECT 19 18 20 21 \nCONECT 20 19 \nCONECT 21 19 \nCONECT 22 23 18 \nCONECT 23 24 22 13 \nCONECT 24 23 \nCONECT 25 30 27 8 26 \nCONECT 26 25 \nCONECT 27 25 11 29 28 \nCONECT 28 27 \nCONECT 29 27 \nCONECT 30 25 33 \nCONECT 31 1 \nCONECT 32 3 \nCONECT 33 30 \nMASTER 0 0 0 0 0 0 0 0 33 0 33 0\nEND\n", "DA": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 P DA B 4 -8.512 1.732 8.846 1.00 0.00 P \nATOM 2 OP1 DA B 4 -9.793 2.421 9.118 1.00 0.00 O \nATOM 3 OP2 DA B 4 -8.544 0.583 7.914 1.00 0.00 O \nATOM 4 O5' DA B 4 -7.506 2.878 8.362 1.00 0.00 O \nATOM 5 C5' DA B 4 -6.959 3.785 9.339 1.00 0.00 C \nATOM 6 H5' DA B 4 -6.394 3.221 10.081 1.00 0.00 H \nATOM 7 H5'' DA B 4 -7.770 4.322 9.831 1.00 0.00 H \nATOM 8 C4' DA B 4 -6.036 4.784 8.661 1.00 0.00 C \nATOM 9 H4' DA B 4 -5.910 5.656 9.302 1.00 0.00 H \nATOM 10 O4' DA B 4 -4.700 4.203 8.566 1.00 0.00 O \nATOM 11 C1' DA B 4 -4.436 3.807 7.228 1.00 0.00 C \nATOM 12 H1' DA B 4 -3.565 4.345 6.855 1.00 0.00 H \nATOM 13 N9 DA B 4 -3.977 2.358 7.207 1.00 0.00 N \nATOM 14 C8 DA B 4 -4.686 1.186 7.243 1.00 0.00 C \nATOM 15 H8 DA B 4 -5.765 1.209 7.297 1.00 0.00 H \nATOM 16 N7 DA B 4 -3.949 0.120 7.146 1.00 0.00 N \nATOM 17 C5 DA B 4 -2.655 0.615 7.036 1.00 0.00 C \nATOM 18 C6 DA B 4 -1.411 -0.013 6.902 1.00 0.00 C \nATOM 19 N6 DA B 4 -1.256 -1.344 6.853 1.00 0.00 N \nATOM 20 H61 DA B 4 -0.333 -1.741 6.755 1.00 0.00 H \nATOM 21 H62 DA B 4 -2.063 -1.948 6.913 1.00 0.00 H \nATOM 22 N1 DA B 4 -0.328 0.771 6.821 1.00 0.00 N1+\nATOM 23 C2 DA B 4 -0.488 2.091 6.870 1.00 0.00 C \nATOM 24 H2 DA B 4 0.372 2.742 6.806 1.00 0.00 H \nATOM 25 N3 DA B 4 -1.599 2.792 6.994 1.00 0.00 N \nATOM 26 C4 DA B 4 -2.673 1.978 7.074 1.00 0.00 C \nATOM 27 C3' DA B 4 -6.396 5.150 7.219 1.00 0.00 C \nATOM 28 H3' DA B 4 -7.475 5.076 7.083 1.00 0.00 H \nATOM 29 C2' DA B 4 -5.703 4.053 6.408 1.00 0.00 C \nATOM 30 H2' DA B 4 -6.448 3.499 5.836 1.00 0.00 H \nATOM 31 H2'' DA B 4 -4.983 4.504 5.726 1.00 0.00 H \nATOM 32 O3' DA B 4 -5.914 6.398 6.743 1.00 0.00 O \nATOM 33 H DA B 4 -9.284 1.056 7.923 1.00 0.00 H \nATOM 34 H34 DA B 4 -7.699 0.108 7.957 1.00 0.00 H \nATOM 35 H35 DA B 4 -1.639 3.775 7.024 1.00 0.00 H \nATOM 36 H36 DA B 4 -6.335 7.118 7.238 1.00 0.00 H \nCONECT 1 2 4 3 33 \nCONECT 2 1 \nCONECT 3 34 1 \nCONECT 4 5 1 \nCONECT 5 6 4 7 8 \nCONECT 6 5 \nCONECT 7 5 \nCONECT 8 9 10 27 5 \nCONECT 9 8 \nCONECT 10 8 11 \nCONECT 11 10 12 13 29 \nCONECT 12 11 \nCONECT 13 26 11 14 \nCONECT 14 16 13 15 \nCONECT 15 14 \nCONECT 16 17 14 \nCONECT 17 16 18 26 \nCONECT 18 22 17 19 \nCONECT 19 18 21 20 \nCONECT 20 19 \nCONECT 21 19 \nCONECT 22 18 23 \nCONECT 23 24 25 22 \nCONECT 24 23 \nCONECT 25 35 26 23 \nCONECT 26 25 13 17 \nCONECT 27 28 8 29 32 \nCONECT 28 27 \nCONECT 29 11 27 30 31 \nCONECT 30 29 \nCONECT 31 29 \nCONECT 32 36 27 \nCONECT 33 1 \nCONECT 34 3 \nCONECT 35 25 \nCONECT 36 32 \nMASTER 0 0 0 0 0 0 0 0 36 0 36 0\nEND\n", "GLY": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N GLY B 96 -65.752 -12.672 6.506 1.00 0.00 N \nATOM 2 CA GLY B 96 -65.330 -13.835 7.265 1.00 0.00 C \nATOM 3 C GLY B 96 -65.956 -15.114 6.748 1.00 0.00 C \nATOM 4 O GLY B 96 -65.286 -16.137 6.603 1.00 0.00 O \nATOM 5 H GLY B 96 -65.308 -11.837 6.888 1.00 0.00 H \nATOM 6 H6 GLY B 96 -66.766 -12.576 6.567 1.00 0.00 H \nATOM 7 H7 GLY B 96 -65.615 -13.701 8.288 1.00 0.00 H \nATOM 8 H8 GLY B 96 -64.269 -13.925 7.165 1.00 0.00 H \nATOM 9 H9 GLY B 96 -66.961 -15.128 6.513 1.00 0.00 H \nCONECT 1 2 5 6 \nCONECT 2 1 8 3 7 \nCONECT 3 9 2 4 \nCONECT 4 3 \nCONECT 5 1 \nCONECT 6 1 \nCONECT 7 2 \nCONECT 8 2 \nCONECT 9 3 \nMASTER 0 0 0 0 0 0 0 0 9 0 9 0\nEND\n", "DT": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 P DT B 2 -4.249 -7.545 15.635 1.00 0.00 P \nATOM 2 OP1 DT B 2 -5.294 -8.554 15.917 1.00 0.00 O \nATOM 3 OP2 DT B 2 -3.167 -7.932 14.703 1.00 0.00 O \nATOM 4 O5' DT B 2 -5.037 -6.242 15.145 1.00 0.00 O \nATOM 5 C5' DT B 2 -5.732 -5.438 16.117 1.00 0.00 C \nATOM 6 H5' DT B 2 -5.022 -5.066 16.856 1.00 0.00 H \nATOM 7 H5'' DT B 2 -6.489 -6.044 16.615 1.00 0.00 H \nATOM 8 C4' DT B 2 -6.405 -4.260 15.433 1.00 0.00 C \nATOM 9 H4' DT B 2 -7.196 -3.870 16.074 1.00 0.00 H \nATOM 10 O4' DT B 2 -5.446 -3.164 15.328 1.00 0.00 O \nATOM 11 C1' DT B 2 -4.991 -3.042 13.988 1.00 0.00 C \nATOM 12 H1' DT B 2 -5.240 -2.051 13.608 1.00 0.00 H \nATOM 13 N1 DT B 2 -3.462 -3.046 13.963 1.00 0.00 N \nATOM 14 C6 DT B 2 -2.717 -4.195 14.013 1.00 0.00 C \nATOM 15 H6 DT B 2 -3.208 -5.155 14.074 1.00 0.00 H \nATOM 16 C5 DT B 2 -1.379 -4.159 13.935 1.00 0.00 C \nATOM 17 C7 DT B 2 -0.555 -5.411 13.989 1.00 0.00 C \nATOM 18 H71 DT B 2 -0.833 -6.066 13.163 1.00 0.00 H \nATOM 19 H72 DT B 2 0.502 -5.155 13.909 1.00 0.00 H \nATOM 20 H73 DT B 2 -0.733 -5.924 14.934 1.00 0.00 H \nATOM 21 C4 DT B 2 -0.682 -2.907 13.795 1.00 0.00 C \nATOM 22 O4 DT B 2 0.538 -2.777 13.716 1.00 0.00 O \nATOM 23 N3 DT B 2 -1.510 -1.804 13.753 1.00 0.00 N \nATOM 24 H3 DT B 2 -1.028 -0.832 13.648 1.00 0.00 H \nATOM 25 C2 DT B 2 -2.888 -1.809 13.831 1.00 0.00 C \nATOM 26 O2 DT B 2 -3.536 -0.776 13.785 1.00 0.00 O \nATOM 27 C3' DT B 2 -6.867 -4.501 13.994 1.00 0.00 C \nATOM 28 H3' DT B 2 -7.125 -5.552 13.866 1.00 0.00 H \nATOM 29 C2' DT B 2 -5.613 -4.181 13.178 1.00 0.00 C \nATOM 30 H2' DT B 2 -5.313 -5.062 12.611 1.00 0.00 H \nATOM 31 H2'' DT B 2 -5.826 -3.362 12.490 1.00 0.00 H \nATOM 32 O3' DT B 2 -7.911 -3.666 13.515 1.00 0.00 O \nATOM 33 H DT B 2 -5.520 -8.055 15.466 1.00 0.00 H \nATOM 34 H34 DT B 2 -2.344 -7.488 14.961 1.00 0.00 H \nATOM 35 H35 DT B 2 -7.663 -2.736 13.637 1.00 0.00 H \nCONECT 1 2 4 33 3 \nCONECT 2 1 \nCONECT 3 34 1 \nCONECT 4 5 1 \nCONECT 5 6 7 8 4 \nCONECT 6 5 \nCONECT 7 5 \nCONECT 8 5 9 10 27 \nCONECT 9 8 \nCONECT 10 8 11 \nCONECT 11 10 12 13 29 \nCONECT 12 11 \nCONECT 13 25 11 14 \nCONECT 14 16 15 13 \nCONECT 15 14 \nCONECT 16 14 17 21 \nCONECT 17 18 16 20 19 \nCONECT 18 17 \nCONECT 19 17 \nCONECT 20 17 \nCONECT 21 22 23 16 \nCONECT 22 21 \nCONECT 23 25 21 24 \nCONECT 24 23 \nCONECT 25 13 23 26 \nCONECT 26 25 \nCONECT 27 28 32 8 29 \nCONECT 28 27 \nCONECT 29 30 31 11 27 \nCONECT 30 29 \nCONECT 31 29 \nCONECT 32 27 35 \nCONECT 33 1 \nCONECT 34 3 \nCONECT 35 32 \nMASTER 0 0 0 0 0 0 0 0 35 0 35 0\nEND\n", "GLU": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N GLU B 85 -69.608 2.339 12.362 1.00 0.00 N \nATOM 2 CA GLU B 85 -69.012 1.134 12.925 1.00 0.00 C \nATOM 3 C GLU B 85 -69.847 -0.107 12.644 1.00 0.00 C \nATOM 4 O GLU B 85 -69.330 -1.222 12.622 1.00 0.00 O \nATOM 5 CB GLU B 85 -68.781 1.305 14.428 1.00 0.00 C \nATOM 6 CG GLU B 85 -67.656 2.274 14.770 1.00 0.00 C \nATOM 7 CD GLU B 85 -68.067 3.734 14.657 1.00 0.00 C \nATOM 8 OE1 GLU B 85 -69.228 4.049 14.991 1.00 0.00 O \nATOM 9 OE2 GLU B 85 -67.232 4.569 14.240 1.00 0.00 O \nATOM 10 H GLU B 85 -69.016 3.142 12.574 1.00 0.00 H \nATOM 11 H11 GLU B 85 -70.533 2.482 12.767 1.00 0.00 H \nATOM 12 H12 GLU B 85 -68.067 0.990 12.443 1.00 0.00 H \nATOM 13 H13 GLU B 85 -70.860 -0.011 12.470 1.00 0.00 H \nATOM 14 H14 GLU B 85 -68.541 0.349 14.844 1.00 0.00 H \nATOM 15 H15 GLU B 85 -69.681 1.715 14.837 1.00 0.00 H \nATOM 16 H16 GLU B 85 -67.340 2.087 15.775 1.00 0.00 H \nATOM 17 H17 GLU B 85 -66.869 2.110 14.063 1.00 0.00 H \nATOM 18 H18 GLU B 85 -66.370 4.290 14.000 1.00 0.00 H \nCONECT 1 2 11 10 \nCONECT 2 12 1 5 3 \nCONECT 3 4 13 2 \nCONECT 4 3 \nCONECT 5 14 2 6 15 \nCONECT 6 7 16 5 17 \nCONECT 7 8 6 9 \nCONECT 8 7 \nCONECT 9 18 7 \nCONECT 10 1 \nCONECT 11 1 \nCONECT 12 2 \nCONECT 13 3 \nCONECT 14 5 \nCONECT 15 5 \nCONECT 16 6 \nCONECT 17 6 \nCONECT 18 9 \nMASTER 0 0 0 0 0 0 0 0 18 0 18 0\nEND\n", "CYS": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N CYS B 66 -65.831 -3.341 19.224 1.00 0.00 N \nATOM 2 CA CYS B 66 -66.627 -4.442 18.692 1.00 0.00 C \nATOM 3 C CYS B 66 -67.251 -5.245 19.828 1.00 0.00 C \nATOM 4 O CYS B 66 -66.828 -6.368 20.100 1.00 0.00 O \nATOM 5 CB CYS B 66 -65.773 -5.358 17.812 1.00 0.00 C \nATOM 6 SG CYS B 66 -66.653 -6.196 16.468 1.00 0.00 S \nATOM 7 H CYS B 66 -65.421 -2.814 18.453 1.00 0.00 H \nATOM 8 H8 CYS B 66 -65.087 -3.713 19.815 1.00 0.00 H \nATOM 9 H9 CYS B 66 -67.408 -4.025 18.091 1.00 0.00 H \nATOM 10 H10 CYS B 66 -68.032 -4.845 20.371 1.00 0.00 H \nATOM 11 H11 CYS B 66 -64.996 -4.765 17.377 1.00 0.00 H \nATOM 12 H12 CYS B 66 -65.416 -6.134 18.457 1.00 0.00 H \nATOM 13 H13 CYS B 66 -67.140 -5.270 15.599 1.00 0.00 H \nCONECT 1 8 7 2 \nCONECT 2 9 5 3 1 \nCONECT 3 10 4 2 \nCONECT 4 3 \nCONECT 5 6 12 11 2 \nCONECT 6 13 5 \nCONECT 7 1 \nCONECT 8 1 \nCONECT 9 2 \nCONECT 10 3 \nCONECT 11 5 \nCONECT 12 5 \nCONECT 13 6 \nMASTER 0 0 0 0 0 0 0 0 13 0 13 0\nEND\n", "HIS": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N HIS B 90 -70.685 -5.477 9.408 1.00 0.00 N \nATOM 2 CA HIS B 90 -71.321 -6.180 8.296 1.00 0.00 C \nATOM 3 C HIS B 90 -70.311 -6.707 7.283 1.00 0.00 C \nATOM 4 O HIS B 90 -70.386 -7.867 6.866 1.00 0.00 O \nATOM 5 CB HIS B 90 -72.320 -5.274 7.581 1.00 0.00 C \nATOM 6 CG HIS B 90 -73.602 -5.077 8.327 1.00 0.00 C \nATOM 7 ND1 HIS B 90 -73.763 -4.090 9.276 1.00 0.00 N \nATOM 8 CD2 HIS B 90 -74.780 -5.736 8.262 1.00 0.00 C \nATOM 9 CE1 HIS B 90 -74.988 -4.154 9.764 1.00 0.00 C \nATOM 10 NE2 HIS B 90 -75.626 -5.142 9.168 1.00 0.00 N \nATOM 11 H HIS B 90 -70.023 -6.100 9.870 1.00 0.00 H \nATOM 12 H12 HIS B 90 -71.397 -5.182 10.076 1.00 0.00 H \nATOM 13 H13 HIS B 90 -71.831 -7.018 8.724 1.00 0.00 H \nATOM 14 H14 HIS B 90 -69.558 -6.089 6.943 1.00 0.00 H \nATOM 15 H15 HIS B 90 -71.864 -4.317 7.437 1.00 0.00 H \nATOM 16 H16 HIS B 90 -72.569 -5.754 6.658 1.00 0.00 H \nATOM 17 H17 HIS B 90 -75.003 -6.535 7.648 1.00 0.00 H \nATOM 18 H18 HIS B 90 -75.380 -3.535 10.490 1.00 0.00 H \nATOM 19 H19 HIS B 90 -76.557 -5.411 9.343 1.00 0.00 H \nCONECT 1 2 11 12 \nCONECT 2 13 5 1 3 \nCONECT 3 14 4 2 \nCONECT 4 3 \nCONECT 5 2 16 6 15 \nCONECT 6 7 5 8 \nCONECT 7 6 9 \nCONECT 8 17 6 10 \nCONECT 9 18 7 10 \nCONECT 10 19 8 9 \nCONECT 11 1 \nCONECT 12 1 \nCONECT 13 2 \nCONECT 14 3 \nCONECT 15 5 \nCONECT 16 5 \nCONECT 17 8 \nCONECT 18 9 \nCONECT 19 10 \nMASTER 0 0 0 0 0 0 0 0 19 0 19 0\nEND\n", "SER": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N SER B 94 -69.234 -10.629 6.814 1.00 0.00 N \nATOM 2 CA SER B 94 -69.535 -11.155 5.487 1.00 0.00 C \nATOM 3 C SER B 94 -68.243 -11.664 4.872 1.00 0.00 C \nATOM 4 O SER B 94 -68.197 -12.752 4.298 1.00 0.00 O \nATOM 5 CB SER B 94 -70.149 -10.079 4.594 1.00 0.00 C \nATOM 6 OG SER B 94 -70.318 -10.558 3.272 1.00 0.00 O \nATOM 7 H SER B 94 -70.091 -10.282 7.244 1.00 0.00 H \nATOM 8 H8 SER B 94 -68.561 -9.867 6.733 1.00 0.00 H \nATOM 9 H9 SER B 94 -70.247 -11.949 5.574 1.00 0.00 H \nATOM 10 H10 SER B 94 -67.389 -11.088 4.936 1.00 0.00 H \nATOM 11 H11 SER B 94 -71.102 -9.797 4.989 1.00 0.00 H \nATOM 12 H12 SER B 94 -69.491 -9.236 4.571 1.00 0.00 H \nATOM 13 H13 SER B 94 -70.914 -11.324 3.279 1.00 0.00 H \nCONECT 1 2 8 7 \nCONECT 2 1 9 5 3 \nCONECT 3 4 10 2 \nCONECT 4 3 \nCONECT 5 6 2 11 12 \nCONECT 6 13 5 \nCONECT 7 1 \nCONECT 8 1 \nCONECT 9 2 \nCONECT 10 3 \nCONECT 11 5 \nCONECT 12 5 \nCONECT 13 6 \nMASTER 0 0 0 0 0 0 0 0 13 0 13 0\nEND\n", "LYS": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N LYS B 56 -62.900 -7.407 16.360 1.00 0.00 N \nATOM 2 CA LYS B 56 -62.435 -7.205 17.724 1.00 0.00 C \nATOM 3 C LYS B 56 -60.952 -6.850 17.742 1.00 0.00 C \nATOM 4 O LYS B 56 -60.521 -6.029 18.549 1.00 0.00 O \nATOM 5 CB LYS B 56 -62.692 -8.451 18.575 1.00 0.00 C \nATOM 6 CG LYS B 56 -64.159 -8.700 18.904 1.00 0.00 C \nATOM 7 CD LYS B 56 -64.344 -9.991 19.700 1.00 0.00 C \nATOM 8 CE LYS B 56 -65.819 -10.293 19.970 1.00 0.00 C \nATOM 9 NZ LYS B 56 -66.502 -9.261 20.806 1.00 0.00 N \nATOM 10 H LYS B 56 -63.892 -7.643 16.371 1.00 0.00 H \nATOM 11 H11 LYS B 56 -62.374 -8.168 15.931 1.00 0.00 H \nATOM 12 H12 LYS B 56 -62.985 -6.388 18.143 1.00 0.00 H \nATOM 13 H13 LYS B 56 -60.308 -7.301 17.074 1.00 0.00 H \nATOM 14 H14 LYS B 56 -62.157 -8.343 19.495 1.00 0.00 H \nATOM 15 H15 LYS B 56 -62.364 -9.288 17.995 1.00 0.00 H \nATOM 16 H16 LYS B 56 -64.530 -7.879 19.482 1.00 0.00 H \nATOM 17 H17 LYS B 56 -64.698 -8.793 17.984 1.00 0.00 H \nATOM 18 H18 LYS B 56 -63.834 -9.896 20.636 1.00 0.00 H \nATOM 19 H19 LYS B 56 -63.943 -10.796 19.120 1.00 0.00 H \nATOM 20 H20 LYS B 56 -65.884 -11.234 20.476 1.00 0.00 H \nATOM 21 H21 LYS B 56 -66.314 -10.303 19.021 1.00 0.00 H \nATOM 22 H22 LYS B 56 -66.059 -9.219 21.724 1.00 0.00 H \nATOM 23 H23 LYS B 56 -67.486 -9.508 20.915 1.00 0.00 H \nCONECT 1 10 11 2 \nCONECT 2 3 12 5 1 \nCONECT 3 2 4 13 \nCONECT 4 3 \nCONECT 5 14 15 6 2 \nCONECT 6 16 7 5 17 \nCONECT 7 8 6 19 18 \nCONECT 8 9 7 20 21 \nCONECT 9 8 23 22 \nCONECT 10 1 \nCONECT 11 1 \nCONECT 12 2 \nCONECT 13 3 \nCONECT 14 5 \nCONECT 15 5 \nCONECT 16 6 \nCONECT 17 6 \nCONECT 18 7 \nCONECT 19 7 \nCONECT 20 8 \nCONECT 21 8 \nCONECT 22 9 \nCONECT 23 9 \nMASTER 0 0 0 0 0 0 0 0 23 0 23 0\nEND\n", "PRO": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N PRO B 67 -68.249 -4.660 20.513 1.00 0.00 N \nATOM 2 CA PRO B 67 -69.014 -5.385 21.528 1.00 0.00 C \nATOM 3 C PRO B 67 -70.070 -6.235 20.843 1.00 0.00 C \nATOM 4 O PRO B 67 -71.252 -6.158 21.171 1.00 0.00 O \nATOM 5 CB PRO B 67 -69.692 -4.260 22.301 1.00 0.00 C \nATOM 6 CG PRO B 67 -69.915 -3.215 21.273 1.00 0.00 C \nATOM 7 CD PRO B 67 -68.705 -3.265 20.384 1.00 0.00 C \nATOM 8 H PRO B 67 -68.362 -5.130 19.615 1.00 0.00 H \nATOM 9 H9 PRO B 67 -68.421 -6.032 22.140 1.00 0.00 H \nATOM 10 H10 PRO B 67 -69.791 -6.886 20.092 1.00 0.00 H \nATOM 11 H11 PRO B 67 -69.058 -3.898 23.083 1.00 0.00 H \nATOM 12 H12 PRO B 67 -70.597 -4.571 22.780 1.00 0.00 H \nATOM 13 H13 PRO B 67 -70.801 -3.425 20.711 1.00 0.00 H \nATOM 14 H14 PRO B 67 -70.047 -2.248 21.711 1.00 0.00 H \nATOM 15 H15 PRO B 67 -68.964 -3.038 19.371 1.00 0.00 H \nATOM 16 H16 PRO B 67 -67.955 -2.552 20.656 1.00 0.00 H \nCONECT 1 7 2 8 \nCONECT 2 3 9 5 1 \nCONECT 3 4 2 10 \nCONECT 4 3 \nCONECT 5 11 2 12 6 \nCONECT 6 14 7 13 5 \nCONECT 7 15 1 6 16 \nCONECT 8 1 \nCONECT 9 2 \nCONECT 10 3 \nCONECT 11 5 \nCONECT 12 5 \nCONECT 13 6 \nCONECT 14 6 \nCONECT 15 7 \nCONECT 16 7 \nMASTER 0 0 0 0 0 0 0 0 16 0 16 0\nEND\n", "ASN": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N ASN B 77 -79.700 -6.939 17.196 1.00 0.00 N \nATOM 2 CA ASN B 77 -79.635 -6.262 18.478 1.00 0.00 C \nATOM 3 C ASN B 77 -78.192 -5.881 18.779 1.00 0.00 C \nATOM 4 O ASN B 77 -77.281 -6.696 18.635 1.00 0.00 O \nATOM 5 CB ASN B 77 -80.206 -7.144 19.587 1.00 0.00 C \nATOM 6 CG ASN B 77 -80.649 -6.342 20.796 1.00 0.00 C \nATOM 7 OD1 ASN B 77 -80.062 -5.308 21.120 1.00 0.00 O \nATOM 8 ND2 ASN B 77 -81.696 -6.812 21.466 1.00 0.00 N \nATOM 9 H ASN B 77 -80.667 -7.194 16.995 1.00 0.00 H \nATOM 10 H10 ASN B 77 -79.126 -7.781 17.227 1.00 0.00 H \nATOM 11 H11 ASN B 77 -80.228 -5.373 18.433 1.00 0.00 H \nATOM 12 H12 ASN B 77 -77.975 -4.927 19.108 1.00 0.00 H \nATOM 13 H13 ASN B 77 -79.453 -7.840 19.894 1.00 0.00 H \nATOM 14 H14 ASN B 77 -81.067 -7.644 19.195 1.00 0.00 H \nATOM 15 H15 ASN B 77 -82.028 -6.333 22.259 1.00 0.00 H \nATOM 16 H16 ASN B 77 -82.140 -7.639 21.169 1.00 0.00 H \nCONECT 1 2 10 9 \nCONECT 2 11 3 1 5 \nCONECT 3 2 12 4 \nCONECT 4 3 \nCONECT 5 6 14 13 2 \nCONECT 6 7 5 8 \nCONECT 7 6 \nCONECT 8 15 6 16 \nCONECT 9 1 \nCONECT 10 1 \nCONECT 11 2 \nCONECT 12 3 \nCONECT 13 5 \nCONECT 14 5 \nCONECT 15 8 \nCONECT 16 8 \nMASTER 0 0 0 0 0 0 0 0 16 0 16 0\nEND\n", "VAL": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N VAL B 97 -67.253 -15.051 6.473 1.00 0.00 N \nATOM 2 CA VAL B 97 -67.992 -16.197 5.968 1.00 0.00 C \nATOM 3 C VAL B 97 -67.420 -16.633 4.627 1.00 0.00 C \nATOM 4 O VAL B 97 -67.132 -17.813 4.420 1.00 0.00 O \nATOM 5 CB VAL B 97 -69.496 -15.872 5.828 1.00 0.00 C \nATOM 6 CG1 VAL B 97 -70.243 -17.021 5.170 1.00 0.00 C \nATOM 7 CG2 VAL B 97 -70.090 -15.562 7.187 1.00 0.00 C \nATOM 8 H VAL B 97 -67.642 -14.765 7.371 1.00 0.00 H \nATOM 9 H9 VAL B 97 -67.326 -14.280 5.809 1.00 0.00 H \nATOM 10 H10 VAL B 97 -67.892 -16.998 6.671 1.00 0.00 H \nATOM 11 H11 VAL B 97 -67.272 -15.933 3.883 1.00 0.00 H \nATOM 12 H12 VAL B 97 -69.598 -15.011 5.201 1.00 0.00 H \nATOM 13 H13 VAL B 97 -70.157 -17.897 5.778 1.00 0.00 H \nATOM 14 H14 VAL B 97 -69.822 -17.214 4.205 1.00 0.00 H \nATOM 15 H15 VAL B 97 -71.275 -16.761 5.063 1.00 0.00 H \nATOM 16 H16 VAL B 97 -69.993 -16.418 7.822 1.00 0.00 H \nATOM 17 H17 VAL B 97 -71.125 -15.316 7.076 1.00 0.00 H \nATOM 18 H18 VAL B 97 -69.571 -14.734 7.623 1.00 0.00 H \nCONECT 1 2 9 8 \nCONECT 2 5 1 10 3 \nCONECT 3 4 11 2 \nCONECT 4 3 \nCONECT 5 6 2 7 12 \nCONECT 6 15 5 14 13 \nCONECT 7 18 16 5 17 \nCONECT 8 1 \nCONECT 9 1 \nCONECT 10 2 \nCONECT 11 3 \nCONECT 12 5 \nCONECT 13 6 \nCONECT 14 6 \nCONECT 15 6 \nCONECT 16 7 \nCONECT 17 7 \nCONECT 18 7 \nMASTER 0 0 0 0 0 0 0 0 18 0 18 0\nEND\n", "THR": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N THR B 86 -71.139 0.090 12.422 1.00 0.00 N \nATOM 2 CA THR B 86 -72.021 -1.015 12.082 1.00 0.00 C \nATOM 3 C THR B 86 -71.720 -1.488 10.663 1.00 0.00 C \nATOM 4 O THR B 86 -71.880 -2.666 10.340 1.00 0.00 O \nATOM 5 CB THR B 86 -73.493 -0.608 12.204 1.00 0.00 C \nATOM 6 OG1 THR B 86 -73.720 -0.040 13.499 1.00 0.00 O \nATOM 7 CG2 THR B 86 -74.393 -1.807 12.039 1.00 0.00 C \nATOM 8 H THR B 86 -70.168 -0.210 12.332 1.00 0.00 H \nATOM 9 H9 THR B 86 -71.316 0.384 13.383 1.00 0.00 H \nATOM 10 H10 THR B 86 -71.846 -1.815 12.771 1.00 0.00 H \nATOM 11 H11 THR B 86 -71.377 -0.811 9.963 1.00 0.00 H \nATOM 12 H12 THR B 86 -73.714 0.104 11.437 1.00 0.00 H \nATOM 13 H13 THR B 86 -73.515 -0.698 14.181 1.00 0.00 H \nATOM 14 H14 THR B 86 -74.177 -2.523 12.804 1.00 0.00 H \nATOM 15 H15 THR B 86 -74.226 -2.249 11.079 1.00 0.00 H \nATOM 16 H16 THR B 86 -75.415 -1.499 12.117 1.00 0.00 H \nCONECT 1 2 8 9 \nCONECT 2 10 1 5 3 \nCONECT 3 4 11 2 \nCONECT 4 3 \nCONECT 5 7 2 12 6 \nCONECT 6 13 5 \nCONECT 7 5 16 15 14 \nCONECT 8 1 \nCONECT 9 1 \nCONECT 10 2 \nCONECT 11 3 \nCONECT 12 5 \nCONECT 13 6 \nCONECT 14 7 \nCONECT 15 7 \nCONECT 16 7 \nMASTER 0 0 0 0 0 0 0 0 16 0 16 0\nEND\n", "ASP": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N ASP B 297 -59.479 10.941 28.834 1.00 0.00 N \nATOM 2 CA ASP B 297 -60.327 11.754 27.959 1.00 0.00 C \nATOM 3 C ASP B 297 -61.803 11.421 28.137 1.00 0.00 C \nATOM 4 O ASP B 297 -62.676 12.136 27.648 1.00 0.00 O \nATOM 5 CB ASP B 297 -59.938 11.562 26.492 1.00 0.00 C \nATOM 6 CG ASP B 297 -58.646 12.260 26.136 1.00 0.00 C \nATOM 7 OD1 ASP B 297 -58.252 12.213 24.949 1.00 0.00 O \nATOM 8 OD2 ASP B 297 -58.032 12.863 27.042 1.00 0.00 O \nATOM 9 H ASP B 297 -58.501 11.191 28.688 1.00 0.00 H \nATOM 10 H10 ASP B 297 -59.614 9.954 28.616 1.00 0.00 H \nATOM 11 H11 ASP B 297 -60.173 12.776 28.237 1.00 0.00 H \nATOM 12 H12 ASP B 297 -62.074 10.583 28.676 1.00 0.00 H \nATOM 13 H13 ASP B 297 -60.720 11.954 25.876 1.00 0.00 H \nATOM 14 H14 ASP B 297 -59.795 10.514 26.330 1.00 0.00 H \nATOM 15 H15 ASP B 297 -58.371 12.867 27.915 1.00 0.00 H \nCONECT 1 2 10 9 \nCONECT 2 1 5 11 3 \nCONECT 3 12 2 4 \nCONECT 4 3 \nCONECT 5 6 2 14 13 \nCONECT 6 5 7 8 \nCONECT 7 6 \nCONECT 8 6 15 \nCONECT 9 1 \nCONECT 10 1 \nCONECT 11 2 \nCONECT 12 3 \nCONECT 13 5 \nCONECT 14 5 \nCONECT 15 8 \nMASTER 0 0 0 0 0 0 0 0 15 0 15 0\nEND\n", "TRP": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N TRP B 64 -65.076 2.218 20.952 1.00 0.00 N \nATOM 2 CA TRP B 64 -65.913 1.126 20.481 1.00 0.00 C \nATOM 3 C TRP B 64 -64.976 -0.036 20.159 1.00 0.00 C \nATOM 4 O TRP B 64 -64.055 0.108 19.357 1.00 0.00 O \nATOM 5 CB TRP B 64 -66.696 1.558 19.239 1.00 0.00 C \nATOM 6 CG TRP B 64 -67.632 0.513 18.706 1.00 0.00 C \nATOM 7 CD1 TRP B 64 -68.906 0.264 19.124 1.00 0.00 C \nATOM 8 CD2 TRP B 64 -67.370 -0.418 17.645 1.00 0.00 C \nATOM 9 NE1 TRP B 64 -69.451 -0.766 18.396 1.00 0.00 N \nATOM 10 CE2 TRP B 64 -68.526 -1.202 17.483 1.00 0.00 C \nATOM 11 CE3 TRP B 64 -66.266 -0.666 16.822 1.00 0.00 C \nATOM 12 CZ2 TRP B 64 -68.611 -2.214 16.536 1.00 0.00 C \nATOM 13 CZ3 TRP B 64 -66.353 -1.671 15.886 1.00 0.00 C \nATOM 14 CH2 TRP B 64 -67.515 -2.432 15.749 1.00 0.00 C \nATOM 15 H TRP B 64 -64.560 1.918 21.779 1.00 0.00 H \nATOM 16 H16 TRP B 64 -65.662 3.018 21.189 1.00 0.00 H \nATOM 17 H17 TRP B 64 -66.630 0.838 21.221 1.00 0.00 H \nATOM 18 H18 TRP B 64 -65.117 -0.949 20.618 1.00 0.00 H \nATOM 19 H19 TRP B 64 -65.995 1.804 18.469 1.00 0.00 H \nATOM 20 H20 TRP B 64 -67.301 2.391 19.532 1.00 0.00 H \nATOM 21 H21 TRP B 64 -69.391 0.775 19.878 1.00 0.00 H \nATOM 22 H22 TRP B 64 -70.358 -1.131 18.511 1.00 0.00 H \nATOM 23 H23 TRP B 64 -65.404 -0.107 16.915 1.00 0.00 H \nATOM 24 H24 TRP B 64 -69.468 -2.779 16.431 1.00 0.00 H \nATOM 25 H25 TRP B 64 -65.545 -1.865 15.275 1.00 0.00 H \nATOM 26 H26 TRP B 64 -67.547 -3.177 15.036 1.00 0.00 H \nCONECT 1 2 15 16 \nCONECT 2 17 5 1 3 \nCONECT 3 2 4 18 \nCONECT 4 3 \nCONECT 5 2 6 19 20 \nCONECT 6 5 8 7 \nCONECT 7 6 21 9 \nCONECT 8 11 6 10 \nCONECT 9 10 7 22 \nCONECT 10 8 9 12 \nCONECT 11 23 8 13 \nCONECT 12 24 14 10 \nCONECT 13 14 11 25 \nCONECT 14 26 12 13 \nCONECT 15 1 \nCONECT 16 1 \nCONECT 17 2 \nCONECT 18 3 \nCONECT 19 5 \nCONECT 20 5 \nCONECT 21 7 \nCONECT 22 9 \nCONECT 23 11 \nCONECT 24 12 \nCONECT 25 13 \nCONECT 26 14 \nMASTER 0 0 0 0 0 0 0 0 26 0 26 0\nEND\n", "PHE": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N PHE B 88 -68.683 -1.575 9.290 1.00 0.00 N \nATOM 2 CA PHE B 88 -67.517 -2.436 9.379 1.00 0.00 C \nATOM 3 C PHE B 88 -67.897 -3.839 9.834 1.00 0.00 C \nATOM 4 O PHE B 88 -67.418 -4.822 9.277 1.00 0.00 O \nATOM 5 CB PHE B 88 -66.457 -1.843 10.306 1.00 0.00 C \nATOM 6 CG PHE B 88 -65.209 -2.664 10.379 1.00 0.00 C \nATOM 7 CD1 PHE B 88 -64.271 -2.611 9.363 1.00 0.00 C \nATOM 8 CD2 PHE B 88 -64.982 -3.508 11.452 1.00 0.00 C \nATOM 9 CE1 PHE B 88 -63.130 -3.376 9.420 1.00 0.00 C \nATOM 10 CE2 PHE B 88 -63.843 -4.273 11.515 1.00 0.00 C \nATOM 11 CZ PHE B 88 -62.915 -4.208 10.496 1.00 0.00 C \nATOM 12 H PHE B 88 -68.396 -0.645 8.984 1.00 0.00 H \nATOM 13 H13 PHE B 88 -69.128 -1.509 10.206 1.00 0.00 H \nATOM 14 H14 PHE B 88 -67.099 -2.506 8.396 1.00 0.00 H \nATOM 15 H15 PHE B 88 -68.561 -3.964 10.615 1.00 0.00 H \nATOM 16 H16 PHE B 88 -66.201 -0.867 9.949 1.00 0.00 H \nATOM 17 H17 PHE B 88 -66.876 -1.815 11.290 1.00 0.00 H \nATOM 18 H18 PHE B 88 -64.430 -1.991 8.554 1.00 0.00 H \nATOM 19 H19 PHE B 88 -65.676 -3.563 12.213 1.00 0.00 H \nATOM 20 H20 PHE B 88 -62.436 -3.327 8.658 1.00 0.00 H \nATOM 21 H21 PHE B 88 -63.682 -4.895 12.323 1.00 0.00 H \nATOM 22 H22 PHE B 88 -62.059 -4.783 10.540 1.00 0.00 H \nCONECT 1 13 12 2 \nCONECT 2 14 3 1 5 \nCONECT 3 4 2 15 \nCONECT 4 3 \nCONECT 5 6 16 17 2 \nCONECT 6 5 8 7 \nCONECT 7 9 6 18 \nCONECT 8 6 10 19 \nCONECT 9 20 7 11 \nCONECT 10 8 21 11 \nCONECT 11 22 10 9 \nCONECT 12 1 \nCONECT 13 1 \nCONECT 14 2 \nCONECT 15 3 \nCONECT 16 5 \nCONECT 17 5 \nCONECT 18 7 \nCONECT 19 8 \nCONECT 20 9 \nCONECT 21 10 \nCONECT 22 11 \nMASTER 0 0 0 0 0 0 0 0 22 0 22 0\nEND\n", "ALA": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N ALA B 95 -67.191 -10.867 5.017 1.00 0.00 N \nATOM 2 CA ALA B 95 -65.862 -11.236 4.552 1.00 0.00 C \nATOM 3 C ALA B 95 -65.371 -12.495 5.246 1.00 0.00 C \nATOM 4 O ALA B 95 -64.658 -13.290 4.653 1.00 0.00 O \nATOM 5 CB ALA B 95 -64.882 -10.094 4.785 1.00 0.00 C \nATOM 6 H ALA B 95 -67.835 -11.641 4.854 1.00 0.00 H \nATOM 7 H7 ALA B 95 -67.513 -10.044 4.508 1.00 0.00 H \nATOM 8 H8 ALA B 95 -65.923 -11.433 3.502 1.00 0.00 H \nATOM 9 H9 ALA B 95 -65.642 -12.680 6.225 1.00 0.00 H \nATOM 10 H10 ALA B 95 -64.815 -9.890 5.833 1.00 0.00 H \nATOM 11 H11 ALA B 95 -65.225 -9.220 4.272 1.00 0.00 H \nATOM 12 H12 ALA B 95 -63.917 -10.370 4.413 1.00 0.00 H \nCONECT 1 2 6 7 \nCONECT 2 8 1 3 5 \nCONECT 3 9 2 4 \nCONECT 4 3 \nCONECT 5 10 12 2 11 \nCONECT 6 1 \nCONECT 7 1 \nCONECT 8 2 \nCONECT 9 3 \nCONECT 10 5 \nCONECT 11 5 \nCONECT 12 5 \nMASTER 0 0 0 0 0 0 0 0 12 0 12 0\nEND\n", "MET": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N MET B 98 -67.237 -15.672 3.728 1.00 0.00 N \nATOM 2 CA MET B 98 -66.693 -15.962 2.408 1.00 0.00 C \nATOM 3 C MET B 98 -65.271 -16.509 2.461 1.00 0.00 C \nATOM 4 O MET B 98 -64.971 -17.524 1.837 1.00 0.00 O \nATOM 5 CB MET B 98 -66.726 -14.721 1.523 1.00 0.00 C \nATOM 6 CG MET B 98 -65.922 -14.888 0.252 1.00 0.00 C \nATOM 7 SD MET B 98 -66.021 -13.462 -0.826 1.00 0.00 S \nATOM 8 CE MET B 98 -64.794 -13.885 -2.056 1.00 0.00 C \nATOM 9 H MET B 98 -67.205 -16.515 4.302 1.00 0.00 H \nATOM 10 H10 MET B 98 -68.204 -15.360 3.636 1.00 0.00 H \nATOM 11 H11 MET B 98 -67.318 -16.723 1.989 1.00 0.00 H \nATOM 12 H12 MET B 98 -64.556 -16.024 3.025 1.00 0.00 H \nATOM 13 H13 MET B 98 -67.743 -14.515 1.260 1.00 0.00 H \nATOM 14 H14 MET B 98 -66.290 -13.917 2.078 1.00 0.00 H \nATOM 15 H15 MET B 98 -66.292 -15.742 -0.276 1.00 0.00 H \nATOM 16 H16 MET B 98 -64.897 -15.008 0.534 1.00 0.00 H \nATOM 17 H17 MET B 98 -64.738 -13.106 -2.787 1.00 0.00 H \nATOM 18 H18 MET B 98 -65.069 -14.803 -2.533 1.00 0.00 H \nATOM 19 H19 MET B 98 -63.841 -14.000 -1.584 1.00 0.00 H \nCONECT 1 10 2 9 \nCONECT 2 3 11 5 1 \nCONECT 3 4 12 2 \nCONECT 4 3 \nCONECT 5 13 2 14 6 \nCONECT 6 7 16 15 5 \nCONECT 7 6 8 \nCONECT 8 19 18 17 7 \nCONECT 9 1 \nCONECT 10 1 \nCONECT 11 2 \nCONECT 12 3 \nCONECT 13 5 \nCONECT 14 5 \nCONECT 15 6 \nCONECT 16 6 \nCONECT 17 8 \nCONECT 18 8 \nCONECT 19 8 \nMASTER 0 0 0 0 0 0 0 0 19 0 19 0\nEND\n", "LEU": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N LEU B 79 -76.819 -3.540 17.072 1.00 0.00 N \nATOM 2 CA LEU B 79 -76.460 -2.806 15.859 1.00 0.00 C \nATOM 3 C LEU B 79 -77.626 -2.520 14.905 1.00 0.00 C \nATOM 4 O LEU B 79 -77.575 -2.858 13.724 1.00 0.00 O \nATOM 5 CB LEU B 79 -75.282 -3.467 15.120 1.00 0.00 C \nATOM 6 CG LEU B 79 -75.112 -4.982 14.984 1.00 0.00 C \nATOM 7 CD1 LEU B 79 -76.147 -5.597 14.061 1.00 0.00 C \nATOM 8 CD2 LEU B 79 -73.718 -5.274 14.471 1.00 0.00 C \nATOM 9 H LEU B 79 -75.985 -3.683 17.642 1.00 0.00 H \nATOM 10 H10 LEU B 79 -77.216 -4.444 16.817 1.00 0.00 H \nATOM 11 H11 LEU B 79 -76.149 -1.845 16.211 1.00 0.00 H \nATOM 12 H12 LEU B 79 -78.466 -2.037 15.260 1.00 0.00 H \nATOM 13 H13 LEU B 79 -75.313 -3.086 14.121 1.00 0.00 H \nATOM 14 H14 LEU B 79 -74.466 -3.223 15.768 1.00 0.00 H \nATOM 15 H15 LEU B 79 -75.255 -5.422 15.949 1.00 0.00 H \nATOM 16 H16 LEU B 79 -76.040 -5.184 13.080 1.00 0.00 H \nATOM 17 H17 LEU B 79 -77.128 -5.384 14.433 1.00 0.00 H \nATOM 18 H18 LEU B 79 -76.003 -6.656 14.020 1.00 0.00 H \nATOM 19 H19 LEU B 79 -73.592 -4.827 13.507 1.00 0.00 H \nATOM 20 H20 LEU B 79 -73.581 -6.332 14.395 1.00 0.00 H \nATOM 21 H21 LEU B 79 -72.996 -4.869 15.149 1.00 0.00 H \nCONECT 1 9 10 2 \nCONECT 2 3 11 1 5 \nCONECT 3 12 4 2 \nCONECT 4 3 \nCONECT 5 6 13 14 2 \nCONECT 6 15 5 7 8 \nCONECT 7 16 18 6 17 \nCONECT 8 19 20 21 6 \nCONECT 9 1 \nCONECT 10 1 \nCONECT 11 2 \nCONECT 12 3 \nCONECT 13 5 \nCONECT 14 5 \nCONECT 15 6 \nCONECT 16 7 \nCONECT 17 7 \nCONECT 18 7 \nCONECT 19 8 \nCONECT 20 8 \nCONECT 21 8 \nMASTER 0 0 0 0 0 0 0 0 21 0 21 0\nEND\n", "ARG": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N ARG B 84 -71.294 4.317 11.431 1.00 0.00 N \nATOM 2 CA ARG B 84 -70.106 3.983 10.660 1.00 0.00 C \nATOM 3 C ARG B 84 -69.534 2.634 11.068 1.00 0.00 C \nATOM 4 O ARG B 84 -69.049 1.877 10.232 1.00 0.00 O \nATOM 5 CB ARG B 84 -69.058 5.069 10.864 1.00 0.00 C \nATOM 6 CG ARG B 84 -67.684 4.720 10.366 1.00 0.00 C \nATOM 7 CD ARG B 84 -66.728 5.818 10.758 1.00 0.00 C \nATOM 8 NE ARG B 84 -67.189 7.106 10.259 1.00 0.00 N \nATOM 9 CZ ARG B 84 -66.672 7.715 9.199 1.00 0.00 C \nATOM 10 NH1 ARG B 84 -65.662 7.156 8.544 1.00 0.00 N \nATOM 11 NH2 ARG B 84 -67.151 8.887 8.801 1.00 0.00 N \nATOM 12 H ARG B 84 -71.649 5.225 11.132 1.00 0.00 H \nATOM 13 H13 ARG B 84 -71.057 4.355 12.422 1.00 0.00 H \nATOM 14 H14 ARG B 84 -70.380 3.921 9.628 1.00 0.00 H \nATOM 15 H15 ARG B 84 -69.554 2.351 12.060 1.00 0.00 H \nATOM 16 H16 ARG B 84 -69.385 5.948 10.349 1.00 0.00 H \nATOM 17 H17 ARG B 84 -68.969 5.207 11.921 1.00 0.00 H \nATOM 18 H18 ARG B 84 -67.368 3.796 10.803 1.00 0.00 H \nATOM 19 H19 ARG B 84 -67.700 4.617 9.301 1.00 0.00 H \nATOM 20 H20 ARG B 84 -66.659 5.859 11.825 1.00 0.00 H \nATOM 21 H21 ARG B 84 -65.770 5.607 10.331 1.00 0.00 H \nATOM 22 H22 ARG B 84 -65.277 7.605 7.757 1.00 0.00 H \nATOM 23 H23 ARG B 84 -65.298 6.292 8.845 1.00 0.00 H \nATOM 24 H24 ARG B 84 -66.765 9.335 8.014 1.00 0.00 H \nATOM 25 H25 ARG B 84 -67.893 9.308 9.293 1.00 0.00 H \nCONECT 1 2 13 12 \nCONECT 2 1 3 14 5 \nCONECT 3 2 4 15 \nCONECT 4 3 \nCONECT 5 16 6 17 2 \nCONECT 6 7 18 5 19 \nCONECT 7 6 8 20 21 \nCONECT 8 9 7 \nCONECT 9 8 10 11 \nCONECT 10 9 23 22 \nCONECT 11 9 24 25 \nCONECT 12 1 \nCONECT 13 1 \nCONECT 14 2 \nCONECT 15 3 \nCONECT 16 5 \nCONECT 17 5 \nCONECT 18 6 \nCONECT 19 6 \nCONECT 20 7 \nCONECT 21 7 \nCONECT 22 10 \nCONECT 23 10 \nCONECT 24 11 \nCONECT 25 11 \nMASTER 0 0 0 0 0 0 0 0 25 0 25 0\nEND\n", "TYR": "COMPND UNNAMED\nAUTHOR GENERATED BY OPEN BABEL 2.3.90\nATOM 1 N TYR B 99 -64.405 -15.823 3.199 1.00 0.00 N \nATOM 2 CA TYR B 99 -63.008 -16.217 3.338 1.00 0.00 C \nATOM 3 C TYR B 99 -62.884 -17.647 3.828 1.00 0.00 C \nATOM 4 O TYR B 99 -62.161 -18.449 3.244 1.00 0.00 O \nATOM 5 CB TYR B 99 -62.288 -15.292 4.322 1.00 0.00 C \nATOM 6 CG TYR B 99 -60.790 -15.483 4.362 1.00 0.00 C \nATOM 7 CD1 TYR B 99 -60.210 -16.453 5.168 1.00 0.00 C \nATOM 8 CD2 TYR B 99 -59.953 -14.689 3.593 1.00 0.00 C \nATOM 9 CE1 TYR B 99 -58.840 -16.626 5.200 1.00 0.00 C \nATOM 10 CE2 TYR B 99 -58.583 -14.854 3.622 1.00 0.00 C \nATOM 11 CZ TYR B 99 -58.033 -15.823 4.424 1.00 0.00 C \nATOM 12 OH TYR B 99 -56.671 -15.982 4.451 1.00 0.00 O \nATOM 13 H TYR B 99 -64.455 -14.859 2.869 1.00 0.00 H \nATOM 14 H14 TYR B 99 -64.871 -15.897 4.103 1.00 0.00 H \nATOM 15 H15 TYR B 99 -62.557 -16.141 2.371 1.00 0.00 H \nATOM 16 H16 TYR B 99 -63.413 -17.949 4.661 1.00 0.00 H \nATOM 17 H17 TYR B 99 -62.677 -15.475 5.302 1.00 0.00 H \nATOM 18 H18 TYR B 99 -62.463 -14.290 3.990 1.00 0.00 H \nATOM 19 H19 TYR B 99 -60.812 -17.054 5.752 1.00 0.00 H \nATOM 20 H20 TYR B 99 -60.362 -13.961 2.987 1.00 0.00 H \nATOM 21 H21 TYR B 99 -58.423 -17.353 5.802 1.00 0.00 H \nATOM 22 H22 TYR B 99 -57.976 -14.252 3.044 1.00 0.00 H \nATOM 23 H23 TYR B 99 -56.125 -15.434 3.922 1.00 0.00 H \nCONECT 1 13 14 2 \nCONECT 2 5 15 1 3 \nCONECT 3 16 4 2 \nCONECT 4 3 \nCONECT 5 2 17 6 18 \nCONECT 6 7 8 5 \nCONECT 7 19 6 9 \nCONECT 8 6 20 10 \nCONECT 9 21 11 7 \nCONECT 10 11 22 8 \nCONECT 11 10 9 12 \nCONECT 12 23 11 \nCONECT 13 1 \nCONECT 14 1 \nCONECT 15 2 \nCONECT 16 3 \nCONECT 17 5 \nCONECT 18 5 \nCONECT 19 7 \nCONECT 20 8 \nCONECT 21 9 \nCONECT 22 10 \nCONECT 23 12 \nMASTER 0 0 0 0 0 0 0 0 23 0 23 0\nEND\n"} \ No newline at end of file diff --git a/moldesign/_static_data/generate_residue_bonds.py b/moldesign/_static_data/scripts/generate_residue_bonds.py similarity index 100% rename from moldesign/_static_data/generate_residue_bonds.py rename to moldesign/_static_data/scripts/generate_residue_bonds.py diff --git a/moldesign/_static_data/scripts/generate_residue_templates.py b/moldesign/_static_data/scripts/generate_residue_templates.py new file mode 100644 index 0000000..f8f3d14 --- /dev/null +++ b/moldesign/_static_data/scripts/generate_residue_templates.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python +""" A short script that assembles reasonable template geometries for standard amino acids +and DNA bases +""" +import moldesign as mdt +import json + +protein = mdt.from_pdb('4F0A') +dna = mdt.build_bdna('ACTGAA') + +residues = {} + +for chain in protein.chains.values() + dna.chains.values(): + for residue in chain: + if residue.type not in ('dna', 'protein'): continue + if residue.type == 'dna' and (residue.is_5prime_end or residue.is_3prime_end): + continue + if residue.type == 'protein' and (residue.is_c_terminal or residue.is_n_terminal): + continue + + residues[residue.resname] = mdt.clean_pdb(mdt.Molecule(residue)) + +residue_pdb = {k: m.write(format='pdb') for k,m in residues.iteritems()} + +with open('residue_templates.json', 'w') as outfile: + json.dump(residue_pdb, outfile) diff --git a/moldesign/_tests/data/3aid.cif b/moldesign/_tests/data/3aid.cif new file mode 100644 index 0000000..9ffb439 --- /dev/null +++ b/moldesign/_tests/data/3aid.cif @@ -0,0 +1,3108 @@ +data_3AID +# +_entry.id 3AID +# +_audit_conform.dict_name mmcif_pdbx.dic +_audit_conform.dict_version 4.007 +_audit_conform.dict_location http://mmcif.pdb.org/dictionaries/ascii/mmcif_pdbx.dic +# +_database_2.database_id PDB +_database_2.database_code 3AID +# +loop_ +_database_PDB_rev.num +_database_PDB_rev.date +_database_PDB_rev.date_original +_database_PDB_rev.status +_database_PDB_rev.replaces +_database_PDB_rev.mod_type +1 1997-09-17 1997-05-15 ? 3AID 0 +2 2003-04-01 ? ? 3AID 1 +3 2009-02-24 ? ? 3AID 1 +# +loop_ +_database_PDB_rev_record.rev_num +_database_PDB_rev_record.type +_database_PDB_rev_record.details +2 JRNL ? +3 VERSN ? +# +_pdbx_database_status.status_code REL +_pdbx_database_status.entry_id 3AID +_pdbx_database_status.deposit_site ? +_pdbx_database_status.process_site ? +_pdbx_database_status.SG_entry . +# +loop_ +_audit_author.name +_audit_author.pdbx_ordinal +'Rutenber, E.E.' 1 +'Stroud, R.M.' 2 +# +_citation.id primary +_citation.title +;A new class of HIV-1 protease inhibitor: the crystallographic structure, inhibition and chemical synthesis of an aminimide peptide isostere. +; +_citation.journal_abbrev Bioorg.Med.Chem. +_citation.journal_volume 4 +_citation.page_first 1545 +_citation.page_last 1558 +_citation.year 1996 +_citation.journal_id_ASTM BMECEP +_citation.country UK +_citation.journal_id_ISSN 0968-0896 +_citation.journal_id_CSD 1200 +_citation.book_publisher ? +_citation.pdbx_database_id_PubMed 8894111 +_citation.pdbx_database_id_DOI '10.1016/0968-0896(96)00147-2' +# +loop_ +_citation_author.citation_id +_citation_author.name +_citation_author.ordinal +primary 'Rutenber, E.E.' 1 +primary 'McPhee, F.' 2 +primary 'Kaplan, A.P.' 3 +primary 'Gallion, S.L.' 4 +primary 'Hogan Jr., J.C.' 5 +primary 'Craik, C.S.' 6 +primary 'Stroud, R.M.' 7 +# +_cell.entry_id 3AID +_cell.length_a 53.100 +_cell.length_b 61.000 +_cell.length_c 63.200 +_cell.angle_alpha 90.00 +_cell.angle_beta 90.00 +_cell.angle_gamma 90.00 +_cell.Z_PDB 8 +_cell.pdbx_unique_axis ? +# +_symmetry.entry_id 3AID +_symmetry.space_group_name_H-M 'P 21 21 21' +_symmetry.pdbx_full_space_group_name_H-M ? +_symmetry.cell_setting ? +_symmetry.Int_Tables_number ? +# +loop_ +_entity.id +_entity.type +_entity.src_method +_entity.pdbx_description +_entity.formula_weight +_entity.pdbx_number_of_molecules +_entity.details +_entity.pdbx_mutation +_entity.pdbx_fragment +_entity.pdbx_ec +1 polymer man 'HUMAN IMMUNODEFICIENCY VIRUS PROTEASE' 10801.857 2 +? Q7K ? 3.4.23.16 +2 non-polymer syn 'BENZOYLAMINO-BENZYL-METHYL-[2-HYDROXY-3-[1-METHYL-ETHYL-OXY-N-FORMAMIDYL]-4-PHENYL-BUTYL]-AMMONIUM' 504.648 1 +? ? ? ? +3 water nat water 18.015 8 +? ? ? ? +# +loop_ +_entity_keywords.entity_id +_entity_keywords.text +1 ? +2 ? +3 ? +# +loop_ +_entity_name_com.entity_id +_entity_name_com.name +1 'HIV PROTEASE, HIV PR' +2 ? +3 ? +# +_entity_poly.entity_id 1 +_entity_poly.type 'polypeptide(L)' +_entity_poly.nstd_linkage no +_entity_poly.nstd_monomer no +_entity_poly.pdbx_seq_one_letter_code +;PQITLWKRPLVTIRIGGQLKEALLDTGADDTVLEEMNLPGKWKPKMIGGIGGFIKVRQYDQIPVEICGHKAIGTVLVGPT +PVNIIGRNLLTQIGCTLNF +; +_entity_poly.pdbx_seq_one_letter_code_can +;PQITLWKRPLVTIRIGGQLKEALLDTGADDTVLEEMNLPGKWKPKMIGGIGGFIKVRQYDQIPVEICGHKAIGTVLVGPT +PVNIIGRNLLTQIGCTLNF +; +_entity_poly.pdbx_strand_id A,B +# +loop_ +_entity_poly_seq.entity_id +_entity_poly_seq.num +_entity_poly_seq.mon_id +_entity_poly_seq.hetero +1 1 PRO n +1 2 GLN n +1 3 ILE n +1 4 THR n +1 5 LEU n +1 6 TRP n +1 7 LYS n +1 8 ARG n +1 9 PRO n +1 10 LEU n +1 11 VAL n +1 12 THR n +1 13 ILE n +1 14 ARG n +1 15 ILE n +1 16 GLY n +1 17 GLY n +1 18 GLN n +1 19 LEU n +1 20 LYS n +1 21 GLU n +1 22 ALA n +1 23 LEU n +1 24 LEU n +1 25 ASP n +1 26 THR n +1 27 GLY n +1 28 ALA n +1 29 ASP n +1 30 ASP n +1 31 THR n +1 32 VAL n +1 33 LEU n +1 34 GLU n +1 35 GLU n +1 36 MET n +1 37 ASN n +1 38 LEU n +1 39 PRO n +1 40 GLY n +1 41 LYS n +1 42 TRP n +1 43 LYS n +1 44 PRO n +1 45 LYS n +1 46 MET n +1 47 ILE n +1 48 GLY n +1 49 GLY n +1 50 ILE n +1 51 GLY n +1 52 GLY n +1 53 PHE n +1 54 ILE n +1 55 LYS n +1 56 VAL n +1 57 ARG n +1 58 GLN n +1 59 TYR n +1 60 ASP n +1 61 GLN n +1 62 ILE n +1 63 PRO n +1 64 VAL n +1 65 GLU n +1 66 ILE n +1 67 CYS n +1 68 GLY n +1 69 HIS n +1 70 LYS n +1 71 ALA n +1 72 ILE n +1 73 GLY n +1 74 THR n +1 75 VAL n +1 76 LEU n +1 77 VAL n +1 78 GLY n +1 79 PRO n +1 80 THR n +1 81 PRO n +1 82 VAL n +1 83 ASN n +1 84 ILE n +1 85 ILE n +1 86 GLY n +1 87 ARG n +1 88 ASN n +1 89 LEU n +1 90 LEU n +1 91 THR n +1 92 GLN n +1 93 ILE n +1 94 GLY n +1 95 CYS n +1 96 THR n +1 97 LEU n +1 98 ASN n +1 99 PHE n +# +_entity_src_gen.entity_id 1 +_entity_src_gen.gene_src_common_name ? +_entity_src_gen.gene_src_genus Lentivirus +_entity_src_gen.pdbx_gene_src_gene ? +_entity_src_gen.gene_src_species ? +_entity_src_gen.gene_src_strain ? +_entity_src_gen.gene_src_tissue ? +_entity_src_gen.gene_src_tissue_fraction ? +_entity_src_gen.gene_src_details ? +_entity_src_gen.pdbx_gene_src_fragment ? +_entity_src_gen.pdbx_gene_src_scientific_name 'Human immunodeficiency virus 1' +_entity_src_gen.pdbx_gene_src_ncbi_taxonomy_id 11676 +_entity_src_gen.pdbx_gene_src_variant 'SF1 ISOLATE' +_entity_src_gen.pdbx_gene_src_cell_line ? +_entity_src_gen.pdbx_gene_src_atcc ? +_entity_src_gen.pdbx_gene_src_organ ? +_entity_src_gen.pdbx_gene_src_organelle ? +_entity_src_gen.pdbx_gene_src_cell ? +_entity_src_gen.pdbx_gene_src_cellular_location ? +_entity_src_gen.host_org_common_name ? +_entity_src_gen.pdbx_host_org_scientific_name 'Escherichia coli' +_entity_src_gen.pdbx_host_org_ncbi_taxonomy_id 562 +_entity_src_gen.host_org_genus Escherichia +_entity_src_gen.pdbx_host_org_gene ? +_entity_src_gen.pdbx_host_org_organ ? +_entity_src_gen.host_org_species ? +_entity_src_gen.pdbx_host_org_tissue ? +_entity_src_gen.pdbx_host_org_tissue_fraction ? +_entity_src_gen.pdbx_host_org_strain ? +_entity_src_gen.pdbx_host_org_variant ? +_entity_src_gen.pdbx_host_org_cell_line ? +_entity_src_gen.pdbx_host_org_atcc ? +_entity_src_gen.pdbx_host_org_culture_collection ? +_entity_src_gen.pdbx_host_org_cell ? +_entity_src_gen.pdbx_host_org_organelle ? +_entity_src_gen.pdbx_host_org_cellular_location ? +_entity_src_gen.pdbx_host_org_vector_type ? +_entity_src_gen.pdbx_host_org_vector ? +_entity_src_gen.plasmid_name ? +_entity_src_gen.plasmid_details ? +_entity_src_gen.pdbx_description ? +# +_struct_ref.id 1 +_struct_ref.db_name UNP +_struct_ref.db_code POL_HV1A2 +_struct_ref.entity_id 1 +_struct_ref.pdbx_db_accession P03369 +_struct_ref.pdbx_align_begin 1 +_struct_ref.pdbx_seq_one_letter_code +;FFREDLAFLQGKAREFSSEQTRANSPTRRELQVWGGENNSLSEAGADRQGTVSFNFPQITLWQRPLVTIRIGGQLKEALL +DTGADDTVLEEMNLPGKWKPKMIGGIGGFIKVRQYDQIPVEICGHKAIGTVLVGPTPVNIIGRNLLTQIGCTLNFPISPI +ETVPVKLKPGMDGPKVKQWPLTEEKIKALVEICTEMEKEGKISKIGPENPYNTPVFAIKKKDSTKWRKLVDFRELNKRTQ +DFWEVQLGIPHPAGLKKKKSVTVLDVGDAYFSVPLDKDFRKYTAFTIPSINNETPGIRYQYNVLPQGWKGSPAIFQSSMT +KILEPFRKQNPDIVIYQYMDDLYVGSDLEIGQHRTKIEELRQHLLRWGFTTPDKKHQKEPPFLWMGYELHPDKWTVQPIM +LPEKDSWTVNDIQKLVGKLNWASQIYAGIKVKQLCKLLRGTKALTEVIPLTEEAELELAENREILKEPVHEVYYDPSKDL +VAEIQKQGQGQWTYQIYQEPFKNLKTGKYARMRGAHTNDVKQLTEAVQKVSTESIVIWGKIPKFKLPIQKETWEAWWMEY +WQATWIPEWEFVNTPPLVKLWYQLEKEPIVGAETFYVDGAANRETKLGKAGYVTDRGRQKVVSIADTTNQKTELQAIHLA +LQDSGLEVNIVTDSQYALGIIQAQPDKSESELVSQIIEQLIKKEKVYLAWVPAHKGIGGNEQVDKLVSAGIRKVLFLNGI +DKAQEEHEKYHSNWRAMASDFNLPPVVAKEIVASCDKCQLKGEAMHGQVDCSPGIWQLDCTHLEGKIILVAVHVASGYIE +AEVIPAETGQETAYFLLKLAGRWPVKTIHTDNGSNFTSTTVKAACWWAGIKQEFGIPYNPQSQGVVESMNNELKKIIGQV +RDQAEHLKTAVQMAVFIHNFKRKGGIGGYSAGERIVDIIATDIQTKELQKQITKIQNFRVYYRDNKDPLWKGPAKLLWKG +EGAVVIQDNSDIKVVPRRKAKIIRDYGKQMAGDDCVASRQDED +; +_struct_ref.biol_id . +# +loop_ +_struct_ref_seq.align_id +_struct_ref_seq.ref_id +_struct_ref_seq.pdbx_PDB_id_code +_struct_ref_seq.pdbx_strand_id +_struct_ref_seq.seq_align_beg +_struct_ref_seq.pdbx_seq_align_beg_ins_code +_struct_ref_seq.seq_align_end +_struct_ref_seq.pdbx_seq_align_end_ins_code +_struct_ref_seq.pdbx_db_accession +_struct_ref_seq.db_align_beg +_struct_ref_seq.pdbx_db_align_beg_ins_code +_struct_ref_seq.db_align_end +_struct_ref_seq.pdbx_db_align_end_ins_code +_struct_ref_seq.pdbx_auth_seq_align_beg +_struct_ref_seq.pdbx_auth_seq_align_end +1 1 3AID A 1 ? 99 ? P03369 57 ? 155 ? 1 99 +2 1 3AID B 1 ? 99 ? P03369 57 ? 155 ? 1 99 +# +loop_ +_struct_ref_seq_dif.align_id +_struct_ref_seq_dif.pdbx_pdb_id_code +_struct_ref_seq_dif.mon_id +_struct_ref_seq_dif.pdbx_pdb_strand_id +_struct_ref_seq_dif.seq_num +_struct_ref_seq_dif.pdbx_pdb_ins_code +_struct_ref_seq_dif.pdbx_seq_db_name +_struct_ref_seq_dif.pdbx_seq_db_accession_code +_struct_ref_seq_dif.db_mon_id +_struct_ref_seq_dif.pdbx_seq_db_seq_num +_struct_ref_seq_dif.details +_struct_ref_seq_dif.pdbx_auth_seq_num +_struct_ref_seq_dif.pdbx_ordinal +1 3AID LYS A 7 ? UNP P03369 GLN 63 ENGINEERED 7 1 +2 3AID LYS B 7 ? UNP P03369 GLN 63 ENGINEERED 7 2 +# +loop_ +_chem_comp.id +_chem_comp.type +_chem_comp.mon_nstd_flag +_chem_comp.name +_chem_comp.pdbx_synonyms +_chem_comp.formula +_chem_comp.formula_weight +PRO 'L-peptide linking' y PROLINE ? +'C5 H9 N O2' 115.132 +GLN 'L-peptide linking' y GLUTAMINE ? +'C5 H10 N2 O3' 146.146 +ILE 'L-peptide linking' y ISOLEUCINE ? +'C6 H13 N O2' 131.174 +THR 'L-peptide linking' y THREONINE ? +'C4 H9 N O3' 119.120 +LEU 'L-peptide linking' y LEUCINE ? +'C6 H13 N O2' 131.174 +TRP 'L-peptide linking' y TRYPTOPHAN ? +'C11 H12 N2 O2' 204.228 +LYS 'L-peptide linking' y LYSINE ? +'C6 H15 N2 O2 1' 147.197 +ARG 'L-peptide linking' y ARGININE ? +'C6 H15 N4 O2 1' 175.210 +VAL 'L-peptide linking' y VALINE ? +'C5 H11 N O2' 117.147 +GLY 'PEPTIDE LINKING' y GLYCINE ? +'C2 H5 N O2' 75.067 +GLU 'L-peptide linking' y 'GLUTAMIC ACID' ? +'C5 H9 N O4' 147.130 +ALA 'L-peptide linking' y ALANINE ? +'C3 H7 N O2' 89.094 +ASP 'L-peptide linking' y 'ASPARTIC ACID' ? +'C4 H7 N O4' 133.104 +MET 'L-peptide linking' y METHIONINE ? +'C5 H11 N O2 S' 149.207 +ASN 'L-peptide linking' y ASPARAGINE ? +'C4 H8 N2 O3' 132.119 +PHE 'L-peptide linking' y PHENYLALANINE ? +'C9 H11 N O2' 165.191 +TYR 'L-peptide linking' y TYROSINE ? +'C9 H11 N O3' 181.191 +CYS 'L-peptide linking' y CYSTEINE ? +'C3 H7 N O2 S' 121.154 +HIS 'L-peptide linking' y HISTIDINE ? +'C6 H10 N3 O2 1' 156.164 +ARQ NON-POLYMER . 'BENZOYLAMINO-BENZYL-METHYL-[2-HYDROXY-3-[1-METHYL-ETHYL-OXY-N-FORMAMIDYL]-4-PHENYL-BUTYL]-AMMONIUM' ? +'C30 H38 N3 O4 1' 504.648 +HOH NON-POLYMER . WATER ? +'H2 O' 18.015 +# +_exptl.entry_id 3AID +_exptl.method 'X-RAY DIFFRACTION' +_exptl.crystals_number 1 +# +_exptl_crystal.id 1 +_exptl_crystal.density_meas ? +_exptl_crystal.density_Matthews 2.37 +_exptl_crystal.density_percent_sol 48.04 +_exptl_crystal.description ? +# +_exptl_crystal_grow.crystal_id 1 +_exptl_crystal_grow.method ? +_exptl_crystal_grow.temp ? +_exptl_crystal_grow.temp_details ? +_exptl_crystal_grow.pH 5.4 +_exptl_crystal_grow.pdbx_pH_range ? +_exptl_crystal_grow.pdbx_details 'pH 5.4' +# +_diffrn.id 1 +_diffrn.ambient_temp 287 +_diffrn.ambient_temp_details ? +_diffrn.crystal_id 1 +# +_diffrn_detector.diffrn_id 1 +_diffrn_detector.detector 'AREA DETECTOR' +_diffrn_detector.type SIEMENS +_diffrn_detector.pdbx_collection_date 1995-01 +_diffrn_detector.details ? +# +_diffrn_radiation.diffrn_id 1 +_diffrn_radiation.wavelength_id 1 +_diffrn_radiation.pdbx_monochromatic_or_laue_m_l M +_diffrn_radiation.monochromator 'GRAPHITE(002)' +_diffrn_radiation.pdbx_diffrn_protocol ? +_diffrn_radiation.pdbx_scattering_type x-ray +# +_diffrn_radiation_wavelength.id 1 +_diffrn_radiation_wavelength.wavelength 1.5418 +_diffrn_radiation_wavelength.wt 1.0 +# +_diffrn_source.diffrn_id 1 +_diffrn_source.source 'ROTATING ANODE' +_diffrn_source.type 'RIGAKU RUH3R' +_diffrn_source.pdbx_synchrotron_site ? +_diffrn_source.pdbx_synchrotron_beamline ? +_diffrn_source.pdbx_wavelength 1.5418 +_diffrn_source.pdbx_wavelength_list ? +# +_reflns.entry_id 3AID +_reflns.observed_criterion_sigma_I 0.0 +_reflns.observed_criterion_sigma_F ? +_reflns.d_resolution_low 100. +_reflns.d_resolution_high 2.5 +_reflns.number_obs 14215 +_reflns.number_all ? +_reflns.percent_possible_obs 87. +_reflns.pdbx_Rmerge_I_obs 0.0810000 +_reflns.pdbx_Rsym_value 0.0810000 +_reflns.pdbx_netI_over_sigmaI ? +_reflns.B_iso_Wilson_estimate ? +_reflns.pdbx_redundancy 2.2 +_reflns.pdbx_ordinal 1 +_reflns.pdbx_diffrn_id 1 +# +_computing.entry_id 3AID +_computing.pdbx_data_reduction_ii SIEMENS +_computing.pdbx_data_reduction_ds SIEMENS +_computing.data_collection ? +_computing.structure_solution 'X-PLOR 2.0' +_computing.structure_refinement 'X-PLOR 2.0' +_computing.pdbx_structure_refinement_method ? +# +_refine.entry_id 3AID +_refine.ls_number_reflns_obs 6864 +_refine.ls_number_reflns_all ? +_refine.pdbx_ls_sigma_I ? +_refine.pdbx_ls_sigma_F 0.0 +_refine.pdbx_data_cutoff_high_absF ? +_refine.pdbx_data_cutoff_low_absF ? +_refine.pdbx_data_cutoff_high_rms_absF ? +_refine.ls_d_res_low 7.0 +_refine.ls_d_res_high 2.5 +_refine.ls_percent_reflns_obs 88. +_refine.ls_R_factor_obs 0.1800000 +_refine.ls_R_factor_all ? +_refine.ls_R_factor_R_work 0.1800000 +_refine.ls_R_factor_R_free ? +_refine.ls_R_factor_R_free_error ? +_refine.ls_R_factor_R_free_error_details ? +_refine.ls_percent_reflns_R_free ? +_refine.ls_number_reflns_R_free ? +_refine.ls_number_parameters ? +_refine.ls_number_restraints ? +_refine.occupancy_min ? +_refine.occupancy_max ? +_refine.B_iso_mean ? +_refine.aniso_B[1][1] ? +_refine.aniso_B[2][2] ? +_refine.aniso_B[3][3] ? +_refine.aniso_B[1][2] ? +_refine.aniso_B[1][3] ? +_refine.aniso_B[2][3] ? +_refine.solvent_model_details ? +_refine.solvent_model_param_ksol ? +_refine.solvent_model_param_bsol ? +_refine.pdbx_ls_cross_valid_method ? +_refine.details ? +_refine.pdbx_starting_model 'PDB ENTRY 3HVP' +_refine.pdbx_method_to_determine_struct 'MOLECULAR REPLACEMENT' +_refine.pdbx_isotropic_thermal_model ? +_refine.pdbx_stereochemistry_target_values ? +_refine.pdbx_stereochem_target_val_spec_case ? +_refine.pdbx_R_Free_selection_details ? +_refine.pdbx_overall_ESU_R ? +_refine.pdbx_overall_ESU_R_Free ? +_refine.overall_SU_ML ? +_refine.overall_SU_B ? +_refine.pdbx_refine_id 'X-RAY DIFFRACTION' +_refine.pdbx_diffrn_id 1 +# +_refine_hist.pdbx_refine_id 'X-RAY DIFFRACTION' +_refine_hist.cycle_id LAST +_refine_hist.pdbx_number_atoms_protein 1516 +_refine_hist.pdbx_number_atoms_nucleic_acid 0 +_refine_hist.pdbx_number_atoms_ligand 37 +_refine_hist.number_atoms_solvent 8 +_refine_hist.number_atoms_total 1561 +_refine_hist.d_res_high 2.5 +_refine_hist.d_res_low 7.0 +# +loop_ +_refine_ls_restr.type +_refine_ls_restr.dev_ideal +_refine_ls_restr.dev_ideal_target +_refine_ls_restr.weight +_refine_ls_restr.number +_refine_ls_restr.pdbx_refine_id +x_bond_d 0.021 ? ? ? 'X-RAY DIFFRACTION' +x_bond_d_na ? ? ? ? 'X-RAY DIFFRACTION' +x_bond_d_prot ? ? ? ? 'X-RAY DIFFRACTION' +x_angle_d ? ? ? ? 'X-RAY DIFFRACTION' +x_angle_d_na ? ? ? ? 'X-RAY DIFFRACTION' +x_angle_d_prot ? ? ? ? 'X-RAY DIFFRACTION' +x_angle_deg 3.50 ? ? ? 'X-RAY DIFFRACTION' +x_angle_deg_na ? ? ? ? 'X-RAY DIFFRACTION' +x_angle_deg_prot ? ? ? ? 'X-RAY DIFFRACTION' +x_dihedral_angle_d 30.1 ? ? ? 'X-RAY DIFFRACTION' +x_dihedral_angle_d_na ? ? ? ? 'X-RAY DIFFRACTION' +x_dihedral_angle_d_prot ? ? ? ? 'X-RAY DIFFRACTION' +x_improper_angle_d 16.4 ? ? ? 'X-RAY DIFFRACTION' +x_improper_angle_d_na ? ? ? ? 'X-RAY DIFFRACTION' +x_improper_angle_d_prot ? ? ? ? 'X-RAY DIFFRACTION' +x_mcbond_it ? ? ? ? 'X-RAY DIFFRACTION' +x_mcangle_it ? ? ? ? 'X-RAY DIFFRACTION' +x_scbond_it ? ? ? ? 'X-RAY DIFFRACTION' +x_scangle_it ? ? ? ? 'X-RAY DIFFRACTION' +# +loop_ +_pdbx_xplor_file.serial_no +_pdbx_xplor_file.param_file +_pdbx_xplor_file.topol_file +_pdbx_xplor_file.pdbx_refine_id +1 PARAM19X.PRO TOPH19X.PRO 'X-RAY DIFFRACTION' +2 ? ? 'X-RAY DIFFRACTION' +# +_struct.entry_id 3AID +_struct.title +;A NEW CLASS OF HIV-1 PROTEASE INHIBITOR: THE CRYSTALLOGRAPHIC STRUCTURE, INHIBITION AND CHEMICAL SYNTHESIS OF AN AMINIMIDE PEPTIDE ISOSTERE +; +_struct.pdbx_descriptor +;HUMAN IMMUNODEFICIENCY VIRUS PROTEASE, BENZOYLAMINO-BENZYL-METHYL-[2-HYDROXY-3-[1-METHYL-ETHYL-OXY-N-FORMAMIDYL]-4-PHENYL-BUTYL]-AMMONIUM +; +_struct.pdbx_model_details ? +_struct.pdbx_CASP_flag ? +_struct.pdbx_model_type_details ? +# +_struct_keywords.entry_id 3AID +_struct_keywords.pdbx_keywords 'ASPARTYL PROTEASE' +_struct_keywords.text 'ASPARTYL PROTEASE, PROTEASE, HIV, PEPTIDE ISOSTERE INHIBITOR, DRUG DESIGN' +# +loop_ +_struct_asym.id +_struct_asym.pdbx_blank_PDB_chainid_flag +_struct_asym.pdbx_modified +_struct_asym.entity_id +_struct_asym.details +A N N 1 ? +B N N 1 ? +C N N 2 ? +D N N 3 ? +E N N 3 ? +# +_struct_biol.id 1 +# +loop_ +_struct_conf.conf_type_id +_struct_conf.id +_struct_conf.pdbx_PDB_helix_id +_struct_conf.beg_label_comp_id +_struct_conf.beg_label_asym_id +_struct_conf.beg_label_seq_id +_struct_conf.pdbx_beg_PDB_ins_code +_struct_conf.end_label_comp_id +_struct_conf.end_label_asym_id +_struct_conf.end_label_seq_id +_struct_conf.pdbx_end_PDB_ins_code +_struct_conf.beg_auth_comp_id +_struct_conf.beg_auth_asym_id +_struct_conf.beg_auth_seq_id +_struct_conf.end_auth_comp_id +_struct_conf.end_auth_asym_id +_struct_conf.end_auth_seq_id +_struct_conf.pdbx_PDB_helix_class +_struct_conf.details +_struct_conf.pdbx_PDB_helix_length +HELX_P HELX_P1 1 ARG A 87 ? LEU A 90 ? ARG A 87 LEU A 90 1 ? 4 +HELX_P HELX_P2 2 ARG B 87 ? LEU B 90 ? ARG B 87 LEU B 90 1 ? 4 +# +_struct_conf_type.id HELX_P +_struct_conf_type.criteria ? +_struct_conf_type.reference ? +# +loop_ +_struct_sheet.id +_struct_sheet.type +_struct_sheet.number_strands +_struct_sheet.details +A ? 4 ? +B ? 3 ? +C ? 2 ? +D ? 2 ? +E ? 3 ? +F ? 2 ? +# +loop_ +_struct_sheet_order.sheet_id +_struct_sheet_order.range_id_1 +_struct_sheet_order.range_id_2 +_struct_sheet_order.offset +_struct_sheet_order.sense +A 1 2 ? anti-parallel +A 2 3 ? anti-parallel +A 3 4 ? anti-parallel +B 1 2 ? anti-parallel +B 2 3 ? anti-parallel +C 1 2 ? anti-parallel +D 1 2 ? anti-parallel +E 1 2 ? anti-parallel +E 2 3 ? anti-parallel +F 1 2 ? anti-parallel +# +loop_ +_struct_sheet_range.sheet_id +_struct_sheet_range.id +_struct_sheet_range.beg_label_comp_id +_struct_sheet_range.beg_label_asym_id +_struct_sheet_range.beg_label_seq_id +_struct_sheet_range.pdbx_beg_PDB_ins_code +_struct_sheet_range.end_label_comp_id +_struct_sheet_range.end_label_asym_id +_struct_sheet_range.end_label_seq_id +_struct_sheet_range.pdbx_end_PDB_ins_code +_struct_sheet_range.symmetry +_struct_sheet_range.beg_auth_comp_id +_struct_sheet_range.beg_auth_asym_id +_struct_sheet_range.beg_auth_seq_id +_struct_sheet_range.end_auth_comp_id +_struct_sheet_range.end_auth_asym_id +_struct_sheet_range.end_auth_seq_id +A 1 GLN A 18 ? LEU A 23 ? ? GLN A 18 LEU A 23 +A 2 LEU A 10 ? ILE A 15 ? ? LEU A 10 ILE A 15 +A 3 ILE A 62 ? ILE A 66 ? ? ILE A 62 ILE A 66 +A 4 HIS A 69 ? GLY A 73 ? ? HIS A 69 GLY A 73 +B 1 LYS A 43 ? GLY A 49 ? ? LYS A 43 GLY A 49 +B 2 GLY A 52 ? TYR A 59 ? ? GLY A 52 TYR A 59 +B 3 VAL A 75 ? GLY A 78 ? ? VAL A 75 GLY A 78 +C 1 THR A 96 ? ASN A 98 ? ? THR A 96 ASN A 98 +C 2 THR B 96 ? ASN B 98 ? ? THR B 96 ASN B 98 +D 1 LEU B 10 ? ILE B 15 ? ? LEU B 10 ILE B 15 +D 2 GLN B 18 ? LEU B 23 ? ? GLN B 18 LEU B 23 +E 1 TRP B 42 ? GLY B 49 ? ? TRP B 42 GLY B 49 +E 2 GLY B 52 ? TYR B 59 ? ? GLY B 52 TYR B 59 +E 3 VAL B 75 ? GLY B 78 ? ? VAL B 75 GLY B 78 +F 1 ILE B 62 ? ILE B 66 ? ? ILE B 62 ILE B 66 +F 2 HIS B 69 ? GLY B 73 ? ? HIS B 69 GLY B 73 +# +loop_ +_pdbx_struct_sheet_hbond.sheet_id +_pdbx_struct_sheet_hbond.range_id_1 +_pdbx_struct_sheet_hbond.range_id_2 +_pdbx_struct_sheet_hbond.range_1_label_atom_id +_pdbx_struct_sheet_hbond.range_1_label_comp_id +_pdbx_struct_sheet_hbond.range_1_label_asym_id +_pdbx_struct_sheet_hbond.range_1_label_seq_id +_pdbx_struct_sheet_hbond.range_1_PDB_ins_code +_pdbx_struct_sheet_hbond.range_1_auth_atom_id +_pdbx_struct_sheet_hbond.range_1_auth_comp_id +_pdbx_struct_sheet_hbond.range_1_auth_asym_id +_pdbx_struct_sheet_hbond.range_1_auth_seq_id +_pdbx_struct_sheet_hbond.range_2_label_atom_id +_pdbx_struct_sheet_hbond.range_2_label_comp_id +_pdbx_struct_sheet_hbond.range_2_label_asym_id +_pdbx_struct_sheet_hbond.range_2_label_seq_id +_pdbx_struct_sheet_hbond.range_2_PDB_ins_code +_pdbx_struct_sheet_hbond.range_2_auth_atom_id +_pdbx_struct_sheet_hbond.range_2_auth_comp_id +_pdbx_struct_sheet_hbond.range_2_auth_asym_id +_pdbx_struct_sheet_hbond.range_2_auth_seq_id +A 1 2 O GLN A 18 ? O GLN A 18 N ILE A 15 ? N ILE A 15 +A 2 3 O ARG A 14 ? O ARG A 14 N GLU A 65 ? N GLU A 65 +A 3 4 O ILE A 62 ? O ILE A 62 N GLY A 73 ? N GLY A 73 +B 1 2 O LYS A 43 ? O LYS A 43 N GLN A 58 ? N GLN A 58 +B 2 3 O ARG A 57 ? O ARG A 57 N VAL A 77 ? N VAL A 77 +C 1 2 O THR A 96 ? O THR A 96 N ASN B 98 ? N ASN B 98 +D 1 2 O VAL B 11 ? O VAL B 11 N ALA B 22 ? N ALA B 22 +E 1 2 O LYS B 43 ? O LYS B 43 N GLN B 58 ? N GLN B 58 +E 2 3 O ARG B 57 ? O ARG B 57 N VAL B 77 ? N VAL B 77 +F 1 2 O ILE B 62 ? O ILE B 62 N GLY B 73 ? N GLY B 73 +# +_struct_site.id AC1 +_struct_site.details 'BINDING SITE FOR RESIDUE ARQ A 401' +_struct_site.pdbx_evidence_code SOFTWARE +# +loop_ +_struct_site_gen.id +_struct_site_gen.site_id +_struct_site_gen.pdbx_num_res +_struct_site_gen.label_comp_id +_struct_site_gen.label_asym_id +_struct_site_gen.label_seq_id +_struct_site_gen.pdbx_auth_ins_code +_struct_site_gen.auth_comp_id +_struct_site_gen.auth_asym_id +_struct_site_gen.auth_seq_id +_struct_site_gen.label_atom_id +_struct_site_gen.label_alt_id +_struct_site_gen.symmetry +_struct_site_gen.details +1 AC1 10 ASP A 25 ? ASP A 25 . . 1_555 ? +2 AC1 10 GLY A 27 ? GLY A 27 . . 1_555 ? +3 AC1 10 ALA A 28 ? ALA A 28 . . 1_555 ? +4 AC1 10 ILE A 50 ? ILE A 50 . . 1_555 ? +5 AC1 10 HOH D . ? HOH A 402 . . 1_555 ? +6 AC1 10 LEU B 23 ? LEU B 23 . . 1_555 ? +7 AC1 10 ASP B 25 ? ASP B 25 . . 1_555 ? +8 AC1 10 GLY B 27 ? GLY B 27 . . 1_555 ? +9 AC1 10 GLY B 49 ? GLY B 49 . . 1_555 ? +10 AC1 10 ILE B 50 ? ILE B 50 . . 1_555 ? +# +_database_PDB_matrix.entry_id 3AID +_database_PDB_matrix.origx[1][1] 1.000000 +_database_PDB_matrix.origx[1][2] 0.000000 +_database_PDB_matrix.origx[1][3] 0.000000 +_database_PDB_matrix.origx[2][1] 0.000000 +_database_PDB_matrix.origx[2][2] 1.000000 +_database_PDB_matrix.origx[2][3] 0.000000 +_database_PDB_matrix.origx[3][1] 0.000000 +_database_PDB_matrix.origx[3][2] 0.000000 +_database_PDB_matrix.origx[3][3] 1.000000 +_database_PDB_matrix.origx_vector[1] 0.00000 +_database_PDB_matrix.origx_vector[2] 0.00000 +_database_PDB_matrix.origx_vector[3] 0.00000 +# +_atom_sites.entry_id 3AID +_atom_sites.Cartn_transform_axes ? +_atom_sites.fract_transf_matrix[1][1] 0.018832 +_atom_sites.fract_transf_matrix[1][2] 0.000000 +_atom_sites.fract_transf_matrix[1][3] 0.000000 +_atom_sites.fract_transf_matrix[2][1] 0.000000 +_atom_sites.fract_transf_matrix[2][2] 0.016393 +_atom_sites.fract_transf_matrix[2][3] 0.000000 +_atom_sites.fract_transf_matrix[3][1] 0.000000 +_atom_sites.fract_transf_matrix[3][2] 0.000000 +_atom_sites.fract_transf_matrix[3][3] 0.015823 +_atom_sites.fract_transf_vector[1] 0.00000 +_atom_sites.fract_transf_vector[2] 0.00000 +_atom_sites.fract_transf_vector[3] 0.00000 +# +loop_ +_atom_type.symbol +N +C +O +H +S +# +loop_ +_atom_site.group_PDB +_atom_site.id +_atom_site.type_symbol +_atom_site.label_atom_id +_atom_site.label_alt_id +_atom_site.label_comp_id +_atom_site.label_asym_id +_atom_site.label_entity_id +_atom_site.label_seq_id +_atom_site.pdbx_PDB_ins_code +_atom_site.Cartn_x +_atom_site.Cartn_y +_atom_site.Cartn_z +_atom_site.occupancy +_atom_site.B_iso_or_equiv +_atom_site.Cartn_x_esd +_atom_site.Cartn_y_esd +_atom_site.Cartn_z_esd +_atom_site.occupancy_esd +_atom_site.B_iso_or_equiv_esd +_atom_site.pdbx_formal_charge +_atom_site.auth_seq_id +_atom_site.auth_comp_id +_atom_site.auth_asym_id +_atom_site.auth_atom_id +_atom_site.pdbx_PDB_model_num +ATOM 1 N N . PRO A 1 1 ? -2.555 9.253 34.411 1.00 30.60 ? ? ? ? ? ? 1 PRO A N 1 +ATOM 2 C CA . PRO A 1 1 ? -1.620 8.250 33.848 1.00 28.31 ? ? ? ? ? ? 1 PRO A CA 1 +ATOM 3 C C . PRO A 1 1 ? -0.108 8.328 33.944 1.00 23.58 ? ? ? ? ? ? 1 PRO A C 1 +ATOM 4 O O . PRO A 1 1 ? 0.501 8.910 33.067 1.00 29.57 ? ? ? ? ? ? 1 PRO A O 1 +ATOM 5 C CB . PRO A 1 1 ? -2.238 6.879 33.989 1.00 28.94 ? ? ? ? ? ? 1 PRO A CB 1 +ATOM 6 C CG . PRO A 1 1 ? -3.624 7.314 33.540 1.00 32.55 ? ? ? ? ? ? 1 PRO A CG 1 +ATOM 7 C CD . PRO A 1 1 ? -3.859 8.575 34.395 1.00 34.64 ? ? ? ? ? ? 1 PRO A CD 1 +ATOM 8 H H2 . PRO A 1 1 ? -2.308 9.752 35.280 0.00 0.00 ? ? ? ? ? ? 1 PRO A H2 1 +ATOM 9 H H3 . PRO A 1 1 ? -2.623 10.035 33.697 0.00 0.00 ? ? ? ? ? ? 1 PRO A H3 1 +ATOM 10 N N . GLN A 1 2 ? 0.519 7.674 34.926 1.00 20.68 ? ? ? ? ? ? 2 GLN A N 1 +ATOM 11 C CA . GLN A 1 2 ? 1.942 7.366 34.601 1.00 22.20 ? ? ? ? ? ? 2 GLN A CA 1 +ATOM 12 C C . GLN A 1 2 ? 2.286 5.899 34.319 1.00 22.20 ? ? ? ? ? ? 2 GLN A C 1 +ATOM 13 O O . GLN A 1 2 ? 2.239 5.053 35.212 1.00 24.91 ? ? ? ? ? ? 2 GLN A O 1 +ATOM 14 C CB . GLN A 1 2 ? 3.002 7.941 35.586 1.00 22.73 ? ? ? ? ? ? 2 GLN A CB 1 +ATOM 15 C CG . GLN A 1 2 ? 4.462 7.592 35.145 1.00 23.29 ? ? ? ? ? ? 2 GLN A CG 1 +ATOM 16 C CD . GLN A 1 2 ? 5.541 8.058 36.132 1.00 23.86 ? ? ? ? ? ? 2 GLN A CD 1 +ATOM 17 O OE1 . GLN A 1 2 ? 6.166 9.080 35.963 1.00 21.61 ? ? ? ? ? ? 2 GLN A OE1 1 +ATOM 18 N NE2 . GLN A 1 2 ? 5.815 7.280 37.164 1.00 21.66 ? ? ? ? ? ? 2 GLN A NE2 1 +ATOM 19 H H . GLN A 1 2 ? 0.038 7.260 35.695 1.00 15.00 ? ? ? ? ? ? 2 GLN A H 1 +ATOM 20 H HE21 . GLN A 1 2 ? 6.517 7.687 37.741 1.00 15.00 ? ? ? ? ? ? 2 GLN A HE21 1 +ATOM 21 H HE22 . GLN A 1 2 ? 5.386 6.401 37.335 1.00 15.00 ? ? ? ? ? ? 2 GLN A HE22 1 +ATOM 22 N N . ILE A 1 3 ? 2.606 5.658 33.030 1.00 18.27 ? ? ? ? ? ? 3 ILE A N 1 +ATOM 23 C CA . ILE A 1 3 ? 2.930 4.304 32.526 1.00 14.22 ? ? ? ? ? ? 3 ILE A CA 1 +ATOM 24 C C . ILE A 1 3 ? 4.436 4.069 32.273 1.00 15.16 ? ? ? ? ? ? 3 ILE A C 1 +ATOM 25 O O . ILE A 1 3 ? 5.020 4.591 31.332 1.00 20.12 ? ? ? ? ? ? 3 ILE A O 1 +ATOM 26 C CB . ILE A 1 3 ? 2.076 3.977 31.276 1.00 8.81 ? ? ? ? ? ? 3 ILE A CB 1 +ATOM 27 C CG1 . ILE A 1 3 ? 0.614 4.286 31.565 1.00 6.38 ? ? ? ? ? ? 3 ILE A CG1 1 +ATOM 28 C CG2 . ILE A 1 3 ? 2.170 2.509 30.873 1.00 3.08 ? ? ? ? ? ? 3 ILE A CG2 1 +ATOM 29 C CD1 . ILE A 1 3 ? -0.351 3.719 30.518 1.00 10.97 ? ? ? ? ? ? 3 ILE A CD1 1 +ATOM 30 H H . ILE A 1 3 ? 2.634 6.454 32.436 1.00 15.00 ? ? ? ? ? ? 3 ILE A H 1 +ATOM 31 N N . THR A 1 4 ? 5.050 3.270 33.166 1.00 10.39 ? ? ? ? ? ? 4 THR A N 1 +ATOM 32 C CA . THR A 1 4 ? 6.416 2.743 32.935 1.00 10.00 ? ? ? ? ? ? 4 THR A CA 1 +ATOM 33 C C . THR A 1 4 ? 6.599 1.452 32.068 1.00 11.66 ? ? ? ? ? ? 4 THR A C 1 +ATOM 34 O O . THR A 1 4 ? 5.793 0.527 32.112 1.00 15.69 ? ? ? ? ? ? 4 THR A O 1 +ATOM 35 C CB . THR A 1 4 ? 7.056 2.437 34.248 1.00 4.39 ? ? ? ? ? ? 4 THR A CB 1 +ATOM 36 O OG1 . THR A 1 4 ? 6.473 1.231 34.804 1.00 5.25 ? ? ? ? ? ? 4 THR A OG1 1 +ATOM 37 C CG2 . THR A 1 4 ? 6.920 3.635 35.165 1.00 2.00 ? ? ? ? ? ? 4 THR A CG2 1 +ATOM 38 H H . THR A 1 4 ? 4.492 2.965 33.935 1.00 15.00 ? ? ? ? ? ? 4 THR A H 1 +ATOM 39 H HG1 . THR A 1 4 ? 5.929 0.815 34.136 1.00 15.00 ? ? ? ? ? ? 4 THR A HG1 1 +ATOM 40 N N . LEU A 1 5 ? 7.715 1.398 31.321 1.00 8.84 ? ? ? ? ? ? 5 LEU A N 1 +ATOM 41 C CA . LEU A 1 5 ? 7.870 0.420 30.235 1.00 7.65 ? ? ? ? ? ? 5 LEU A CA 1 +ATOM 42 C C . LEU A 1 5 ? 8.606 -0.903 30.466 1.00 8.47 ? ? ? ? ? ? 5 LEU A C 1 +ATOM 43 O O . LEU A 1 5 ? 9.134 -1.511 29.545 1.00 9.06 ? ? ? ? ? ? 5 LEU A O 1 +ATOM 44 C CB . LEU A 1 5 ? 8.534 1.094 29.034 1.00 6.66 ? ? ? ? ? ? 5 LEU A CB 1 +ATOM 45 C CG . LEU A 1 5 ? 7.818 2.230 28.311 1.00 9.11 ? ? ? ? ? ? 5 LEU A CG 1 +ATOM 46 C CD1 . LEU A 1 5 ? 6.305 2.030 28.315 1.00 10.52 ? ? ? ? ? ? 5 LEU A CD1 1 +ATOM 47 C CD2 . LEU A 1 5 ? 8.236 3.611 28.775 1.00 10.50 ? ? ? ? ? ? 5 LEU A CD2 1 +ATOM 48 H H . LEU A 1 5 ? 8.405 2.109 31.468 1.00 15.00 ? ? ? ? ? ? 5 LEU A H 1 +ATOM 49 N N . TRP A 1 6 ? 8.646 -1.381 31.725 1.00 13.00 ? ? ? ? ? ? 6 TRP A N 1 +ATOM 50 C CA . TRP A 1 6 ? 9.213 -2.750 31.877 1.00 14.24 ? ? ? ? ? ? 6 TRP A CA 1 +ATOM 51 C C . TRP A 1 6 ? 8.280 -3.867 31.412 1.00 14.81 ? ? ? ? ? ? 6 TRP A C 1 +ATOM 52 O O . TRP A 1 6 ? 8.651 -5.001 31.168 1.00 16.96 ? ? ? ? ? ? 6 TRP A O 1 +ATOM 53 C CB . TRP A 1 6 ? 9.687 -3.124 33.289 1.00 14.28 ? ? ? ? ? ? 6 TRP A CB 1 +ATOM 54 C CG . TRP A 1 6 ? 10.074 -1.910 34.088 1.00 20.68 ? ? ? ? ? ? 6 TRP A CG 1 +ATOM 55 C CD1 . TRP A 1 6 ? 9.182 -1.145 34.863 1.00 27.93 ? ? ? ? ? ? 6 TRP A CD1 1 +ATOM 56 C CD2 . TRP A 1 6 ? 11.333 -1.208 34.201 1.00 21.72 ? ? ? ? ? ? 6 TRP A CD2 1 +ATOM 57 N NE1 . TRP A 1 6 ? 9.777 -0.041 35.406 1.00 26.52 ? ? ? ? ? ? 6 TRP A NE1 1 +ATOM 58 C CE2 . TRP A 1 6 ? 11.101 -0.027 35.017 1.00 22.61 ? ? ? ? ? ? 6 TRP A CE2 1 +ATOM 59 C CE3 . TRP A 1 6 ? 12.617 -1.473 33.714 1.00 16.16 ? ? ? ? ? ? 6 TRP A CE3 1 +ATOM 60 C CZ2 . TRP A 1 6 ? 12.128 0.887 35.290 1.00 20.31 ? ? ? ? ? ? 6 TRP A CZ2 1 +ATOM 61 C CZ3 . TRP A 1 6 ? 13.644 -0.553 34.018 1.00 17.45 ? ? ? ? ? ? 6 TRP A CZ3 1 +ATOM 62 C CH2 . TRP A 1 6 ? 13.406 0.616 34.778 1.00 18.71 ? ? ? ? ? ? 6 TRP A CH2 1 +ATOM 63 H H . TRP A 1 6 ? 8.228 -0.834 32.447 1.00 15.00 ? ? ? ? ? ? 6 TRP A H 1 +ATOM 64 H HE1 . TRP A 1 6 ? 9.317 0.632 35.960 1.00 15.00 ? ? ? ? ? ? 6 TRP A HE1 1 +ATOM 65 N N . LYS A 1 7 ? 7.017 -3.454 31.284 1.00 12.93 ? ? ? ? ? ? 7 LYS A N 1 +ATOM 66 C CA . LYS A 1 7 ? 5.990 -4.250 30.643 1.00 9.56 ? ? ? ? ? ? 7 LYS A CA 1 +ATOM 67 C C . LYS A 1 7 ? 5.420 -3.525 29.460 1.00 11.55 ? ? ? ? ? ? 7 LYS A C 1 +ATOM 68 O O . LYS A 1 7 ? 5.478 -2.299 29.399 1.00 12.41 ? ? ? ? ? ? 7 LYS A O 1 +ATOM 69 C CB . LYS A 1 7 ? 4.841 -4.432 31.607 1.00 18.71 ? ? ? ? ? ? 7 LYS A CB 1 +ATOM 70 C CG . LYS A 1 7 ? 5.137 -5.278 32.839 1.00 28.83 ? ? ? ? ? ? 7 LYS A CG 1 +ATOM 71 C CD . LYS A 1 7 ? 3.948 -5.219 33.795 1.00 36.81 ? ? ? ? ? ? 7 LYS A CD 1 +ATOM 72 C CE . LYS A 1 7 ? 4.209 -5.975 35.117 1.00 43.42 ? ? ? ? ? ? 7 LYS A CE 1 +ATOM 73 N NZ . LYS A 1 7 ? 3.160 -5.652 36.107 1.00 42.34 ? ? ? ? ? ? 7 LYS A NZ 1 +ATOM 74 H H . LYS A 1 7 ? 6.799 -2.518 31.545 1.00 15.00 ? ? ? ? ? ? 7 LYS A H 1 +ATOM 75 H HZ1 . LYS A 1 7 ? 2.887 -4.655 35.991 1.00 15.00 ? ? ? ? ? ? 7 LYS A HZ1 1 +ATOM 76 H HZ2 . LYS A 1 7 ? 2.331 -6.260 35.944 1.00 15.00 ? ? ? ? ? ? 7 LYS A HZ2 1 +ATOM 77 H HZ3 . LYS A 1 7 ? 3.527 -5.810 37.067 1.00 15.00 ? ? ? ? ? ? 7 LYS A HZ3 1 +ATOM 78 N N . ARG A 1 8 ? 4.801 -4.305 28.535 1.00 12.42 ? ? ? ? ? ? 8 ARG A N 1 +ATOM 79 C CA . ARG A 1 8 ? 4.091 -3.587 27.449 1.00 10.97 ? ? ? ? ? ? 8 ARG A CA 1 +ATOM 80 C C . ARG A 1 8 ? 3.003 -2.612 27.887 1.00 11.55 ? ? ? ? ? ? 8 ARG A C 1 +ATOM 81 O O . ARG A 1 8 ? 2.184 -2.938 28.746 1.00 13.27 ? ? ? ? ? ? 8 ARG A O 1 +ATOM 82 C CB . ARG A 1 8 ? 3.384 -4.517 26.488 1.00 9.39 ? ? ? ? ? ? 8 ARG A CB 1 +ATOM 83 C CG . ARG A 1 8 ? 4.144 -5.748 26.107 1.00 6.80 ? ? ? ? ? ? 8 ARG A CG 1 +ATOM 84 C CD . ARG A 1 8 ? 3.297 -6.581 25.184 1.00 12.73 ? ? ? ? ? ? 8 ARG A CD 1 +ATOM 85 N NE . ARG A 1 8 ? 4.151 -7.669 24.790 1.00 28.15 ? ? ? ? ? ? 8 ARG A NE 1 +ATOM 86 C CZ . ARG A 1 8 ? 4.343 -8.083 23.521 1.00 36.60 ? ? ? ? ? ? 8 ARG A CZ 1 +ATOM 87 N NH1 . ARG A 1 8 ? 3.598 -7.690 22.490 1.00 33.53 ? ? ? ? ? ? 8 ARG A NH1 1 +ATOM 88 N NH2 . ARG A 1 8 ? 5.334 -8.947 23.322 1.00 45.16 ? ? ? ? ? ? 8 ARG A NH2 1 +ATOM 89 H H . ARG A 1 8 ? 4.761 -5.287 28.694 1.00 15.00 ? ? ? ? ? ? 8 ARG A H 1 +ATOM 90 H HE . ARG A 1 8 ? 4.684 -8.129 25.500 1.00 15.00 ? ? ? ? ? ? 8 ARG A HE 1 +ATOM 91 H HH11 . ARG A 1 8 ? 2.832 -7.063 22.626 1.00 15.00 ? ? ? ? ? ? 8 ARG A HH11 1 +ATOM 92 H HH12 . ARG A 1 8 ? 3.812 -8.029 21.574 1.00 15.00 ? ? ? ? ? ? 8 ARG A HH12 1 +ATOM 93 H HH21 . ARG A 1 8 ? 5.883 -9.253 24.101 1.00 15.00 ? ? ? ? ? ? 8 ARG A HH21 1 +ATOM 94 H HH22 . ARG A 1 8 ? 5.536 -9.289 22.407 1.00 15.00 ? ? ? ? ? ? 8 ARG A HH22 1 +ATOM 95 N N . PRO A 1 9 ? 2.957 -1.418 27.265 1.00 10.22 ? ? ? ? ? ? 9 PRO A N 1 +ATOM 96 C CA . PRO A 1 9 ? 1.838 -0.522 27.644 1.00 9.31 ? ? ? ? ? ? 9 PRO A CA 1 +ATOM 97 C C . PRO A 1 9 ? 0.443 -0.973 27.113 1.00 9.47 ? ? ? ? ? ? 9 PRO A C 1 +ATOM 98 O O . PRO A 1 9 ? -0.016 -0.531 26.071 1.00 12.70 ? ? ? ? ? ? 9 PRO A O 1 +ATOM 99 C CB . PRO A 1 9 ? 2.350 0.830 27.118 1.00 7.49 ? ? ? ? ? ? 9 PRO A CB 1 +ATOM 100 C CG . PRO A 1 9 ? 3.309 0.489 25.949 1.00 10.39 ? ? ? ? ? ? 9 PRO A CG 1 +ATOM 101 C CD . PRO A 1 9 ? 3.886 -0.881 26.272 1.00 7.83 ? ? ? ? ? ? 9 PRO A CD 1 +ATOM 102 N N . LEU A 1 10 ? -0.222 -1.893 27.855 1.00 10.28 ? ? ? ? ? ? 10 LEU A N 1 +ATOM 103 C CA . LEU A 1 10 ? -1.555 -2.420 27.472 1.00 5.59 ? ? ? ? ? ? 10 LEU A CA 1 +ATOM 104 C C . LEU A 1 10 ? -2.725 -1.865 28.254 1.00 6.30 ? ? ? ? ? ? 10 LEU A C 1 +ATOM 105 O O . LEU A 1 10 ? -2.737 -1.938 29.472 1.00 9.79 ? ? ? ? ? ? 10 LEU A O 1 +ATOM 106 C CB . LEU A 1 10 ? -1.653 -3.892 27.745 1.00 2.00 ? ? ? ? ? ? 10 LEU A CB 1 +ATOM 107 C CG . LEU A 1 10 ? -1.056 -4.838 26.734 1.00 2.00 ? ? ? ? ? ? 10 LEU A CG 1 +ATOM 108 C CD1 . LEU A 1 10 ? -1.127 -6.225 27.327 1.00 2.00 ? ? ? ? ? ? 10 LEU A CD1 1 +ATOM 109 C CD2 . LEU A 1 10 ? -1.725 -4.792 25.361 1.00 2.00 ? ? ? ? ? ? 10 LEU A CD2 1 +ATOM 110 H H . LEU A 1 10 ? 0.241 -2.213 28.683 1.00 15.00 ? ? ? ? ? ? 10 LEU A H 1 +ATOM 111 N N . VAL A 1 11 ? -3.701 -1.304 27.534 1.00 8.40 ? ? ? ? ? ? 11 VAL A N 1 +ATOM 112 C CA . VAL A 1 11 ? -4.916 -0.688 28.141 1.00 13.91 ? ? ? ? ? ? 11 VAL A CA 1 +ATOM 113 C C . VAL A 1 11 ? -6.236 -1.349 27.788 1.00 13.86 ? ? ? ? ? ? 11 VAL A C 1 +ATOM 114 O O . VAL A 1 11 ? -6.351 -2.140 26.860 1.00 17.89 ? ? ? ? ? ? 11 VAL A O 1 +ATOM 115 C CB . VAL A 1 11 ? -5.114 0.850 27.856 1.00 12.10 ? ? ? ? ? ? 11 VAL A CB 1 +ATOM 116 C CG1 . VAL A 1 11 ? -4.279 1.777 28.747 1.00 7.44 ? ? ? ? ? ? 11 VAL A CG1 1 +ATOM 117 C CG2 . VAL A 1 11 ? -5.022 1.221 26.378 1.00 11.10 ? ? ? ? ? ? 11 VAL A CG2 1 +ATOM 118 H H . VAL A 1 11 ? -3.481 -1.176 26.579 1.00 15.00 ? ? ? ? ? ? 11 VAL A H 1 +ATOM 119 N N . THR A 1 12 ? -7.266 -0.967 28.535 1.00 10.31 ? ? ? ? ? ? 12 THR A N 1 +ATOM 120 C CA . THR A 1 12 ? -8.564 -1.409 28.023 1.00 10.43 ? ? ? ? ? ? 12 THR A CA 1 +ATOM 121 C C . THR A 1 12 ? -9.308 -0.344 27.224 1.00 11.24 ? ? ? ? ? ? 12 THR A C 1 +ATOM 122 O O . THR A 1 12 ? -9.366 0.823 27.604 1.00 10.44 ? ? ? ? ? ? 12 THR A O 1 +ATOM 123 C CB . THR A 1 12 ? -9.457 -1.922 29.145 1.00 12.18 ? ? ? ? ? ? 12 THR A CB 1 +ATOM 124 O OG1 . THR A 1 12 ? -8.702 -2.710 30.069 1.00 17.40 ? ? ? ? ? ? 12 THR A OG1 1 +ATOM 125 C CG2 . THR A 1 12 ? -10.631 -2.754 28.609 1.00 17.57 ? ? ? ? ? ? 12 THR A CG2 1 +ATOM 126 H H . THR A 1 12 ? -7.147 -0.445 29.378 1.00 15.00 ? ? ? ? ? ? 12 THR A H 1 +ATOM 127 H HG1 . THR A 1 12 ? -8.439 -3.503 29.623 1.00 15.00 ? ? ? ? ? ? 12 THR A HG1 1 +ATOM 128 N N . ILE A 1 13 ? -9.871 -0.754 26.084 1.00 9.17 ? ? ? ? ? ? 13 ILE A N 1 +ATOM 129 C CA . ILE A 1 13 ? -10.756 0.212 25.415 1.00 12.06 ? ? ? ? ? ? 13 ILE A CA 1 +ATOM 130 C C . ILE A 1 13 ? -12.234 -0.216 25.366 1.00 10.83 ? ? ? ? ? ? 13 ILE A C 1 +ATOM 131 O O . ILE A 1 13 ? -12.538 -1.399 25.368 1.00 9.79 ? ? ? ? ? ? 13 ILE A O 1 +ATOM 132 C CB . ILE A 1 13 ? -10.210 0.567 24.013 1.00 12.82 ? ? ? ? ? ? 13 ILE A CB 1 +ATOM 133 C CG1 . ILE A 1 13 ? -10.268 -0.673 23.102 1.00 13.26 ? ? ? ? ? ? 13 ILE A CG1 1 +ATOM 134 C CG2 . ILE A 1 13 ? -8.775 1.089 24.152 1.00 10.61 ? ? ? ? ? ? 13 ILE A CG2 1 +ATOM 135 C CD1 . ILE A 1 13 ? -9.741 -0.448 21.680 1.00 8.04 ? ? ? ? ? ? 13 ILE A CD1 1 +ATOM 136 H H . ILE A 1 13 ? -9.726 -1.672 25.742 1.00 15.00 ? ? ? ? ? ? 13 ILE A H 1 +ATOM 137 N N . ARG A 1 14 ? -13.131 0.779 25.310 1.00 11.30 ? ? ? ? ? ? 14 ARG A N 1 +ATOM 138 C CA . ARG A 1 14 ? -14.522 0.471 24.896 1.00 12.92 ? ? ? ? ? ? 14 ARG A CA 1 +ATOM 139 C C . ARG A 1 14 ? -15.041 1.080 23.583 1.00 10.44 ? ? ? ? ? ? 14 ARG A C 1 +ATOM 140 O O . ARG A 1 14 ? -15.093 2.293 23.409 1.00 7.41 ? ? ? ? ? ? 14 ARG A O 1 +ATOM 141 C CB . ARG A 1 14 ? -15.504 0.807 26.012 1.00 14.22 ? ? ? ? ? ? 14 ARG A CB 1 +ATOM 142 C CG . ARG A 1 14 ? -16.864 0.177 25.793 1.00 17.00 ? ? ? ? ? ? 14 ARG A CG 1 +ATOM 143 C CD . ARG A 1 14 ? -17.694 0.101 27.077 1.00 26.96 ? ? ? ? ? ? 14 ARG A CD 1 +ATOM 144 N NE . ARG A 1 14 ? -18.008 1.437 27.592 1.00 36.17 ? ? ? ? ? ? 14 ARG A NE 1 +ATOM 145 C CZ . ARG A 1 14 ? -19.298 1.876 27.717 1.00 37.70 ? ? ? ? ? ? 14 ARG A CZ 1 +ATOM 146 N NH1 . ARG A 1 14 ? -20.333 1.094 27.387 1.00 32.95 ? ? ? ? ? ? 14 ARG A NH1 1 +ATOM 147 N NH2 . ARG A 1 14 ? -19.525 3.107 28.183 1.00 36.64 ? ? ? ? ? ? 14 ARG A NH2 1 +ATOM 148 H H . ARG A 1 14 ? -12.790 1.708 25.451 1.00 15.00 ? ? ? ? ? ? 14 ARG A H 1 +ATOM 149 H HE . ARG A 1 14 ? -17.264 2.048 27.861 1.00 15.00 ? ? ? ? ? ? 14 ARG A HE 1 +ATOM 150 H HH11 . ARG A 1 14 ? -20.172 0.168 27.046 1.00 15.00 ? ? ? ? ? ? 14 ARG A HH11 1 +ATOM 151 H HH12 . ARG A 1 14 ? -21.270 1.431 27.484 1.00 15.00 ? ? ? ? ? ? 14 ARG A HH12 1 +ATOM 152 H HH21 . ARG A 1 14 ? -18.757 3.696 28.432 1.00 15.00 ? ? ? ? ? ? 14 ARG A HH21 1 +ATOM 153 H HH22 . ARG A 1 14 ? -20.463 3.436 28.281 1.00 15.00 ? ? ? ? ? ? 14 ARG A HH22 1 +ATOM 154 N N . ILE A 1 15 ? -15.430 0.176 22.675 1.00 12.87 ? ? ? ? ? ? 15 ILE A N 1 +ATOM 155 C CA . ILE A 1 15 ? -15.898 0.493 21.290 1.00 15.53 ? ? ? ? ? ? 15 ILE A CA 1 +ATOM 156 C C . ILE A 1 15 ? -17.205 -0.298 20.877 1.00 18.97 ? ? ? ? ? ? 15 ILE A C 1 +ATOM 157 O O . ILE A 1 15 ? -17.352 -1.513 21.048 1.00 18.58 ? ? ? ? ? ? 15 ILE A O 1 +ATOM 158 C CB . ILE A 1 15 ? -14.683 0.289 20.287 1.00 11.75 ? ? ? ? ? ? 15 ILE A CB 1 +ATOM 159 C CG1 . ILE A 1 15 ? -14.865 0.767 18.845 1.00 16.54 ? ? ? ? ? ? 15 ILE A CG1 1 +ATOM 160 C CG2 . ILE A 1 15 ? -14.203 -1.165 20.176 1.00 8.01 ? ? ? ? ? ? 15 ILE A CG2 1 +ATOM 161 C CD1 . ILE A 1 15 ? -13.597 0.580 17.968 1.00 8.82 ? ? ? ? ? ? 15 ILE A CD1 1 +ATOM 162 H H . ILE A 1 15 ? -15.304 -0.768 22.981 1.00 15.00 ? ? ? ? ? ? 15 ILE A H 1 +ATOM 163 N N . GLY A 1 16 ? -18.222 0.426 20.372 1.00 17.76 ? ? ? ? ? ? 16 GLY A N 1 +ATOM 164 C CA . GLY A 1 16 ? -19.516 -0.259 20.088 1.00 19.38 ? ? ? ? ? ? 16 GLY A CA 1 +ATOM 165 C C . GLY A 1 16 ? -20.301 -1.000 21.233 1.00 24.46 ? ? ? ? ? ? 16 GLY A C 1 +ATOM 166 O O . GLY A 1 16 ? -20.991 -1.996 21.018 1.00 24.31 ? ? ? ? ? ? 16 GLY A O 1 +ATOM 167 H H . GLY A 1 16 ? -18.033 1.383 20.158 1.00 15.00 ? ? ? ? ? ? 16 GLY A H 1 +ATOM 168 N N . GLY A 1 17 ? -20.087 -0.491 22.484 1.00 24.55 ? ? ? ? ? ? 17 GLY A N 1 +ATOM 169 C CA . GLY A 1 17 ? -20.430 -1.299 23.661 1.00 24.34 ? ? ? ? ? ? 17 GLY A CA 1 +ATOM 170 C C . GLY A 1 17 ? -19.445 -2.433 24.070 1.00 27.45 ? ? ? ? ? ? 17 GLY A C 1 +ATOM 171 O O . GLY A 1 17 ? -19.508 -2.983 25.156 1.00 29.91 ? ? ? ? ? ? 17 GLY A O 1 +ATOM 172 H H . GLY A 1 17 ? -19.559 0.351 22.553 1.00 15.00 ? ? ? ? ? ? 17 GLY A H 1 +ATOM 173 N N . GLN A 1 18 ? -18.495 -2.765 23.170 1.00 26.11 ? ? ? ? ? ? 18 GLN A N 1 +ATOM 174 C CA . GLN A 1 18 ? -17.478 -3.803 23.456 1.00 20.99 ? ? ? ? ? ? 18 GLN A CA 1 +ATOM 175 C C . GLN A 1 18 ? -16.203 -3.371 24.218 1.00 15.25 ? ? ? ? ? ? 18 GLN A C 1 +ATOM 176 O O . GLN A 1 18 ? -15.635 -2.312 23.997 1.00 11.39 ? ? ? ? ? ? 18 GLN A O 1 +ATOM 177 C CB . GLN A 1 18 ? -17.005 -4.489 22.166 1.00 23.80 ? ? ? ? ? ? 18 GLN A CB 1 +ATOM 178 C CG . GLN A 1 18 ? -18.029 -4.623 21.041 1.00 32.40 ? ? ? ? ? ? 18 GLN A CG 1 +ATOM 179 C CD . GLN A 1 18 ? -19.152 -5.530 21.478 1.00 38.02 ? ? ? ? ? ? 18 GLN A CD 1 +ATOM 180 O OE1 . GLN A 1 18 ? -18.938 -6.689 21.796 1.00 37.03 ? ? ? ? ? ? 18 GLN A OE1 1 +ATOM 181 N NE2 . GLN A 1 18 ? -20.364 -4.962 21.485 1.00 39.34 ? ? ? ? ? ? 18 GLN A NE2 1 +ATOM 182 H H . GLN A 1 18 ? -18.474 -2.254 22.318 1.00 15.00 ? ? ? ? ? ? 18 GLN A H 1 +ATOM 183 H HE21 . GLN A 1 18 ? -21.093 -5.567 21.790 1.00 15.00 ? ? ? ? ? ? 18 GLN A HE21 1 +ATOM 184 H HE22 . GLN A 1 18 ? -20.563 -4.026 21.197 1.00 15.00 ? ? ? ? ? ? 18 GLN A HE22 1 +ATOM 185 N N . LEU A 1 19 ? -15.782 -4.293 25.086 1.00 11.19 ? ? ? ? ? ? 19 LEU A N 1 +ATOM 186 C CA . LEU A 1 19 ? -14.556 -4.231 25.893 1.00 13.09 ? ? ? ? ? ? 19 LEU A CA 1 +ATOM 187 C C . LEU A 1 19 ? -13.336 -5.013 25.346 1.00 15.36 ? ? ? ? ? ? 19 LEU A C 1 +ATOM 188 O O . LEU A 1 19 ? -13.250 -6.240 25.418 1.00 17.95 ? ? ? ? ? ? 19 LEU A O 1 +ATOM 189 C CB . LEU A 1 19 ? -14.906 -4.687 27.338 1.00 11.59 ? ? ? ? ? ? 19 LEU A CB 1 +ATOM 190 C CG . LEU A 1 19 ? -14.624 -3.661 28.457 1.00 12.93 ? ? ? ? ? ? 19 LEU A CG 1 +ATOM 191 C CD1 . LEU A 1 19 ? -14.946 -2.235 28.030 1.00 11.72 ? ? ? ? ? ? 19 LEU A CD1 1 +ATOM 192 C CD2 . LEU A 1 19 ? -15.342 -3.985 29.758 1.00 11.09 ? ? ? ? ? ? 19 LEU A CD2 1 +ATOM 193 H H . LEU A 1 19 ? -16.371 -5.096 25.148 1.00 15.00 ? ? ? ? ? ? 19 LEU A H 1 +ATOM 194 N N . LYS A 1 20 ? -12.370 -4.247 24.790 1.00 14.09 ? ? ? ? ? ? 20 LYS A N 1 +ATOM 195 C CA . LYS A 1 20 ? -11.142 -4.882 24.258 1.00 14.64 ? ? ? ? ? ? 20 LYS A CA 1 +ATOM 196 C C . LYS A 1 20 ? -9.802 -4.451 24.908 1.00 14.53 ? ? ? ? ? ? 20 LYS A C 1 +ATOM 197 O O . LYS A 1 20 ? -9.642 -3.401 25.505 1.00 12.98 ? ? ? ? ? ? 20 LYS A O 1 +ATOM 198 C CB . LYS A 1 20 ? -11.043 -4.676 22.726 1.00 17.47 ? ? ? ? ? ? 20 LYS A CB 1 +ATOM 199 C CG . LYS A 1 20 ? -12.017 -5.389 21.788 1.00 19.14 ? ? ? ? ? ? 20 LYS A CG 1 +ATOM 200 C CD . LYS A 1 20 ? -11.772 -5.048 20.311 1.00 24.53 ? ? ? ? ? ? 20 LYS A CD 1 +ATOM 201 C CE . LYS A 1 20 ? -11.560 -6.280 19.383 1.00 29.82 ? ? ? ? ? ? 20 LYS A CE 1 +ATOM 202 N NZ . LYS A 1 20 ? -11.034 -5.893 18.044 1.00 29.67 ? ? ? ? ? ? 20 LYS A NZ 1 +ATOM 203 H H . LYS A 1 20 ? -12.518 -3.255 24.813 1.00 15.00 ? ? ? ? ? ? 20 LYS A H 1 +ATOM 204 H HZ1 . LYS A 1 20 ? -11.563 -5.071 17.687 1.00 15.00 ? ? ? ? ? ? 20 LYS A HZ1 1 +ATOM 205 H HZ2 . LYS A 1 20 ? -10.029 -5.641 18.136 1.00 15.00 ? ? ? ? ? ? 20 LYS A HZ2 1 +ATOM 206 H HZ3 . LYS A 1 20 ? -11.132 -6.685 17.378 1.00 15.00 ? ? ? ? ? ? 20 LYS A HZ3 1 +ATOM 207 N N . GLU A 1 21 ? -8.793 -5.297 24.735 1.00 17.16 ? ? ? ? ? ? 21 GLU A N 1 +ATOM 208 C CA . GLU A 1 21 ? -7.435 -4.835 25.101 1.00 19.20 ? ? ? ? ? ? 21 GLU A CA 1 +ATOM 209 C C . GLU A 1 21 ? -6.558 -4.227 23.984 1.00 16.65 ? ? ? ? ? ? 21 GLU A C 1 +ATOM 210 O O . GLU A 1 21 ? -6.418 -4.773 22.892 1.00 14.72 ? ? ? ? ? ? 21 GLU A O 1 +ATOM 211 C CB . GLU A 1 21 ? -6.673 -5.991 25.757 1.00 27.98 ? ? ? ? ? ? 21 GLU A CB 1 +ATOM 212 C CG . GLU A 1 21 ? -5.828 -5.575 26.971 1.00 36.72 ? ? ? ? ? ? 21 GLU A CG 1 +ATOM 213 C CD . GLU A 1 21 ? -6.619 -5.622 28.289 1.00 40.40 ? ? ? ? ? ? 21 GLU A CD 1 +ATOM 214 O OE1 . GLU A 1 21 ? -7.802 -5.261 28.334 1.00 40.04 ? ? ? ? ? ? 21 GLU A OE1 1 +ATOM 215 O OE2 . GLU A 1 21 ? -6.026 -6.027 29.287 1.00 43.31 ? ? ? ? ? ? 21 GLU A OE2 1 +ATOM 216 H H . GLU A 1 21 ? -8.967 -6.156 24.259 1.00 15.00 ? ? ? ? ? ? 21 GLU A H 1 +ATOM 217 N N . ALA A 1 22 ? -5.972 -3.066 24.276 1.00 14.75 ? ? ? ? ? ? 22 ALA A N 1 +ATOM 218 C CA . ALA A 1 22 ? -5.100 -2.434 23.260 1.00 11.83 ? ? ? ? ? ? 22 ALA A CA 1 +ATOM 219 C C . ALA A 1 22 ? -3.705 -1.932 23.759 1.00 9.55 ? ? ? ? ? ? 22 ALA A C 1 +ATOM 220 O O . ALA A 1 22 ? -3.453 -1.775 24.948 1.00 7.28 ? ? ? ? ? ? 22 ALA A O 1 +ATOM 221 C CB . ALA A 1 22 ? -5.865 -1.280 22.617 1.00 11.78 ? ? ? ? ? ? 22 ALA A CB 1 +ATOM 222 H H . ALA A 1 22 ? -6.107 -2.677 25.179 1.00 15.00 ? ? ? ? ? ? 22 ALA A H 1 +ATOM 223 N N . LEU A 1 23 ? -2.787 -1.711 22.805 1.00 5.96 ? ? ? ? ? ? 23 LEU A N 1 +ATOM 224 C CA . LEU A 1 23 ? -1.397 -1.289 23.114 1.00 4.12 ? ? ? ? ? ? 23 LEU A CA 1 +ATOM 225 C C . LEU A 1 23 ? -1.118 0.146 22.698 1.00 2.00 ? ? ? ? ? ? 23 LEU A C 1 +ATOM 226 O O . LEU A 1 23 ? -1.441 0.552 21.586 1.00 2.00 ? ? ? ? ? ? 23 LEU A O 1 +ATOM 227 C CB . LEU A 1 23 ? -0.438 -2.253 22.366 1.00 4.90 ? ? ? ? ? ? 23 LEU A CB 1 +ATOM 228 C CG . LEU A 1 23 ? 1.083 -2.186 22.476 1.00 2.00 ? ? ? ? ? ? 23 LEU A CG 1 +ATOM 229 C CD1 . LEU A 1 23 ? 1.571 -2.706 23.809 1.00 7.34 ? ? ? ? ? ? 23 LEU A CD1 1 +ATOM 230 C CD2 . LEU A 1 23 ? 1.744 -3.023 21.405 1.00 3.18 ? ? ? ? ? ? 23 LEU A CD2 1 +ATOM 231 H H . LEU A 1 23 ? -3.068 -1.872 21.862 1.00 15.00 ? ? ? ? ? ? 23 LEU A H 1 +ATOM 232 N N . LEU A 1 24 ? -0.537 0.896 23.624 1.00 2.00 ? ? ? ? ? ? 24 LEU A N 1 +ATOM 233 C CA . LEU A 1 24 ? -0.196 2.267 23.300 1.00 2.00 ? ? ? ? ? ? 24 LEU A CA 1 +ATOM 234 C C . LEU A 1 24 ? 1.124 2.367 22.612 1.00 3.88 ? ? ? ? ? ? 24 LEU A C 1 +ATOM 235 O O . LEU A 1 24 ? 2.176 2.052 23.152 1.00 6.52 ? ? ? ? ? ? 24 LEU A O 1 +ATOM 236 C CB . LEU A 1 24 ? -0.090 3.152 24.536 1.00 9.50 ? ? ? ? ? ? 24 LEU A CB 1 +ATOM 237 C CG . LEU A 1 24 ? -1.255 3.055 25.535 1.00 15.22 ? ? ? ? ? ? 24 LEU A CG 1 +ATOM 238 C CD1 . LEU A 1 24 ? -0.973 3.913 26.770 1.00 12.11 ? ? ? ? ? ? 24 LEU A CD1 1 +ATOM 239 C CD2 . LEU A 1 24 ? -2.622 3.353 24.899 1.00 12.26 ? ? ? ? ? ? 24 LEU A CD2 1 +ATOM 240 H H . LEU A 1 24 ? -0.281 0.454 24.486 1.00 15.00 ? ? ? ? ? ? 24 LEU A H 1 +ATOM 241 N N . ASP A 1 25 ? 1.038 2.790 21.357 1.00 7.69 ? ? ? ? ? ? 25 ASP A N 1 +ATOM 242 C CA . ASP A 1 25 ? 2.150 2.485 20.441 1.00 7.59 ? ? ? ? ? ? 25 ASP A CA 1 +ATOM 243 C C . ASP A 1 25 ? 2.638 3.731 19.715 1.00 7.44 ? ? ? ? ? ? 25 ASP A C 1 +ATOM 244 O O . ASP A 1 25 ? 2.305 3.987 18.574 1.00 8.42 ? ? ? ? ? ? 25 ASP A O 1 +ATOM 245 C CB . ASP A 1 25 ? 1.693 1.332 19.491 1.00 10.29 ? ? ? ? ? ? 25 ASP A CB 1 +ATOM 246 C CG . ASP A 1 25 ? 2.634 0.934 18.354 1.00 14.25 ? ? ? ? ? ? 25 ASP A CG 1 +ATOM 247 O OD1 . ASP A 1 25 ? 3.520 1.687 17.966 1.00 15.67 ? ? ? ? ? ? 25 ASP A OD1 1 +ATOM 248 O OD2 . ASP A 1 25 ? 2.465 -0.161 17.838 1.00 16.99 ? ? ? ? ? ? 25 ASP A OD2 1 +ATOM 249 H H . ASP A 1 25 ? 0.142 3.095 21.017 1.00 15.00 ? ? ? ? ? ? 25 ASP A H 1 +ATOM 250 N N . THR A 1 26 ? 3.487 4.495 20.404 1.00 5.41 ? ? ? ? ? ? 26 THR A N 1 +ATOM 251 C CA . THR A 1 26 ? 3.974 5.754 19.819 1.00 2.13 ? ? ? ? ? ? 26 THR A CA 1 +ATOM 252 C C . THR A 1 26 ? 4.681 5.739 18.455 1.00 2.64 ? ? ? ? ? ? 26 THR A C 1 +ATOM 253 O O . THR A 1 26 ? 4.739 6.713 17.725 1.00 4.71 ? ? ? ? ? ? 26 THR A O 1 +ATOM 254 C CB . THR A 1 26 ? 4.908 6.402 20.819 1.00 3.16 ? ? ? ? ? ? 26 THR A CB 1 +ATOM 255 O OG1 . THR A 1 26 ? 6.075 5.582 21.010 1.00 10.74 ? ? ? ? ? ? 26 THR A OG1 1 +ATOM 256 C CG2 . THR A 1 26 ? 4.172 6.524 22.144 1.00 6.50 ? ? ? ? ? ? 26 THR A CG2 1 +ATOM 257 H H . THR A 1 26 ? 3.761 4.193 21.320 1.00 15.00 ? ? ? ? ? ? 26 THR A H 1 +ATOM 258 H HG1 . THR A 1 26 ? 6.833 6.097 20.712 1.00 15.00 ? ? ? ? ? ? 26 THR A HG1 1 +ATOM 259 N N . GLY A 1 27 ? 5.240 4.582 18.101 1.00 3.99 ? ? ? ? ? ? 27 GLY A N 1 +ATOM 260 C CA . GLY A 1 27 ? 5.764 4.489 16.717 1.00 5.22 ? ? ? ? ? ? 27 GLY A CA 1 +ATOM 261 C C . GLY A 1 27 ? 4.807 4.080 15.556 1.00 4.61 ? ? ? ? ? ? 27 GLY A C 1 +ATOM 262 O O . GLY A 1 27 ? 5.169 3.927 14.399 1.00 3.35 ? ? ? ? ? ? 27 GLY A O 1 +ATOM 263 H H . GLY A 1 27 ? 5.207 3.817 18.736 1.00 15.00 ? ? ? ? ? ? 27 GLY A H 1 +ATOM 264 N N . ALA A 1 28 ? 3.519 3.982 15.911 1.00 6.91 ? ? ? ? ? ? 28 ALA A N 1 +ATOM 265 C CA . ALA A 1 28 ? 2.455 3.921 14.904 1.00 3.02 ? ? ? ? ? ? 28 ALA A CA 1 +ATOM 266 C C . ALA A 1 28 ? 1.731 5.256 14.687 1.00 3.42 ? ? ? ? ? ? 28 ALA A C 1 +ATOM 267 O O . ALA A 1 28 ? 1.156 5.870 15.572 1.00 3.02 ? ? ? ? ? ? 28 ALA A O 1 +ATOM 268 C CB . ALA A 1 28 ? 1.433 2.831 15.275 1.00 2.00 ? ? ? ? ? ? 28 ALA A CB 1 +ATOM 269 H H . ALA A 1 28 ? 3.297 4.070 16.878 1.00 15.00 ? ? ? ? ? ? 28 ALA A H 1 +ATOM 270 N N . ASP A 1 29 ? 1.735 5.695 13.417 1.00 3.92 ? ? ? ? ? ? 29 ASP A N 1 +ATOM 271 C CA . ASP A 1 29 ? 0.961 6.906 13.082 1.00 6.42 ? ? ? ? ? ? 29 ASP A CA 1 +ATOM 272 C C . ASP A 1 29 ? -0.564 6.870 13.321 1.00 6.90 ? ? ? ? ? ? 29 ASP A C 1 +ATOM 273 O O . ASP A 1 29 ? -1.237 7.831 13.680 1.00 7.18 ? ? ? ? ? ? 29 ASP A O 1 +ATOM 274 C CB . ASP A 1 29 ? 1.214 7.334 11.621 1.00 10.78 ? ? ? ? ? ? 29 ASP A CB 1 +ATOM 275 C CG . ASP A 1 29 ? 2.652 7.723 11.241 1.00 16.60 ? ? ? ? ? ? 29 ASP A CG 1 +ATOM 276 O OD1 . ASP A 1 29 ? 3.473 8.024 12.119 1.00 16.61 ? ? ? ? ? ? 29 ASP A OD1 1 +ATOM 277 O OD2 . ASP A 1 29 ? 2.937 7.729 10.035 1.00 19.82 ? ? ? ? ? ? 29 ASP A OD2 1 +ATOM 278 H H . ASP A 1 29 ? 2.329 5.189 12.788 1.00 15.00 ? ? ? ? ? ? 29 ASP A H 1 +ATOM 279 N N . ASP A 1 30 ? -1.060 5.654 13.068 1.00 10.14 ? ? ? ? ? ? 30 ASP A N 1 +ATOM 280 C CA . ASP A 1 30 ? -2.488 5.277 13.093 1.00 9.04 ? ? ? ? ? ? 30 ASP A CA 1 +ATOM 281 C C . ASP A 1 30 ? -2.819 4.094 14.037 1.00 10.66 ? ? ? ? ? ? 30 ASP A C 1 +ATOM 282 O O . ASP A 1 30 ? -1.961 3.353 14.529 1.00 10.32 ? ? ? ? ? ? 30 ASP A O 1 +ATOM 283 C CB . ASP A 1 30 ? -3.013 4.874 11.694 1.00 8.49 ? ? ? ? ? ? 30 ASP A CB 1 +ATOM 284 C CG . ASP A 1 30 ? -2.604 5.771 10.511 1.00 12.48 ? ? ? ? ? ? 30 ASP A CG 1 +ATOM 285 O OD1 . ASP A 1 30 ? -2.969 6.951 10.471 1.00 13.46 ? ? ? ? ? ? 30 ASP A OD1 1 +ATOM 286 O OD2 . ASP A 1 30 ? -1.929 5.277 9.606 1.00 14.26 ? ? ? ? ? ? 30 ASP A OD2 1 +ATOM 287 H H . ASP A 1 30 ? -0.378 4.955 12.866 1.00 15.00 ? ? ? ? ? ? 30 ASP A H 1 +ATOM 288 N N . THR A 1 31 ? -4.147 3.987 14.228 1.00 10.75 ? ? ? ? ? ? 31 THR A N 1 +ATOM 289 C CA . THR A 1 31 ? -4.846 3.005 15.081 1.00 8.58 ? ? ? ? ? ? 31 THR A CA 1 +ATOM 290 C C . THR A 1 31 ? -5.458 1.897 14.250 1.00 14.08 ? ? ? ? ? ? 31 THR A C 1 +ATOM 291 O O . THR A 1 31 ? -6.255 2.173 13.366 1.00 17.64 ? ? ? ? ? ? 31 THR A O 1 +ATOM 292 C CB . THR A 1 31 ? -5.964 3.748 15.851 1.00 8.52 ? ? ? ? ? ? 31 THR A CB 1 +ATOM 293 O OG1 . THR A 1 31 ? -5.386 4.814 16.619 1.00 5.59 ? ? ? ? ? ? 31 THR A OG1 1 +ATOM 294 C CG2 . THR A 1 31 ? -6.900 2.920 16.750 1.00 5.14 ? ? ? ? ? ? 31 THR A CG2 1 +ATOM 295 H H . THR A 1 31 ? -4.696 4.667 13.750 1.00 15.00 ? ? ? ? ? ? 31 THR A H 1 +ATOM 296 H HG1 . THR A 1 31 ? -5.542 5.620 16.140 1.00 15.00 ? ? ? ? ? ? 31 THR A HG1 1 +ATOM 297 N N . VAL A 1 32 ? -5.041 0.651 14.549 1.00 14.57 ? ? ? ? ? ? 32 VAL A N 1 +ATOM 298 C CA . VAL A 1 32 ? -5.394 -0.599 13.818 1.00 11.51 ? ? ? ? ? ? 32 VAL A CA 1 +ATOM 299 C C . VAL A 1 32 ? -5.834 -1.722 14.783 1.00 12.42 ? ? ? ? ? ? 32 VAL A C 1 +ATOM 300 O O . VAL A 1 32 ? -5.219 -2.060 15.809 1.00 9.55 ? ? ? ? ? ? 32 VAL A O 1 +ATOM 301 C CB . VAL A 1 32 ? -4.226 -1.172 12.961 1.00 11.77 ? ? ? ? ? ? 32 VAL A CB 1 +ATOM 302 C CG1 . VAL A 1 32 ? -4.659 -2.391 12.146 1.00 7.51 ? ? ? ? ? ? 32 VAL A CG1 1 +ATOM 303 C CG2 . VAL A 1 32 ? -3.615 -0.156 11.996 1.00 9.56 ? ? ? ? ? ? 32 VAL A CG2 1 +ATOM 304 H H . VAL A 1 32 ? -4.480 0.606 15.379 1.00 15.00 ? ? ? ? ? ? 32 VAL A H 1 +ATOM 305 N N . LEU A 1 33 ? -6.996 -2.262 14.399 1.00 8.46 ? ? ? ? ? ? 33 LEU A N 1 +ATOM 306 C CA . LEU A 1 33 ? -7.736 -3.086 15.361 1.00 6.71 ? ? ? ? ? ? 33 LEU A CA 1 +ATOM 307 C C . LEU A 1 33 ? -8.115 -4.411 14.697 1.00 5.60 ? ? ? ? ? ? 33 LEU A C 1 +ATOM 308 O O . LEU A 1 33 ? -8.200 -4.467 13.472 1.00 5.00 ? ? ? ? ? ? 33 LEU A O 1 +ATOM 309 C CB . LEU A 1 33 ? -8.939 -2.216 15.805 1.00 9.14 ? ? ? ? ? ? 33 LEU A CB 1 +ATOM 310 C CG . LEU A 1 33 ? -9.079 -1.598 17.233 1.00 11.97 ? ? ? ? ? ? 33 LEU A CG 1 +ATOM 311 C CD1 . LEU A 1 33 ? -7.885 -0.913 17.897 1.00 8.88 ? ? ? ? ? ? 33 LEU A CD1 1 +ATOM 312 C CD2 . LEU A 1 33 ? -10.185 -0.573 17.172 1.00 15.65 ? ? ? ? ? ? 33 LEU A CD2 1 +ATOM 313 H H . LEU A 1 33 ? -7.396 -1.982 13.525 1.00 15.00 ? ? ? ? ? ? 33 LEU A H 1 +ATOM 314 N N . GLU A 1 34 ? -8.299 -5.481 15.493 1.00 6.68 ? ? ? ? ? ? 34 GLU A N 1 +ATOM 315 C CA . GLU A 1 34 ? -8.591 -6.789 14.850 1.00 10.45 ? ? ? ? ? ? 34 GLU A CA 1 +ATOM 316 C C . GLU A 1 34 ? -9.937 -6.870 14.168 1.00 11.56 ? ? ? ? ? ? 34 GLU A C 1 +ATOM 317 O O . GLU A 1 34 ? -10.780 -6.017 14.371 1.00 13.54 ? ? ? ? ? ? 34 GLU A O 1 +ATOM 318 C CB . GLU A 1 34 ? -8.470 -7.969 15.820 1.00 14.09 ? ? ? ? ? ? 34 GLU A CB 1 +ATOM 319 C CG . GLU A 1 34 ? -7.056 -8.084 16.443 1.00 24.30 ? ? ? ? ? ? 34 GLU A CG 1 +ATOM 320 C CD . GLU A 1 34 ? -7.025 -8.905 17.749 1.00 33.54 ? ? ? ? ? ? 34 GLU A CD 1 +ATOM 321 O OE1 . GLU A 1 34 ? -8.068 -9.169 18.379 1.00 35.23 ? ? ? ? ? ? 34 GLU A OE1 1 +ATOM 322 O OE2 . GLU A 1 34 ? -5.919 -9.262 18.145 1.00 34.97 ? ? ? ? ? ? 34 GLU A OE2 1 +ATOM 323 H H . GLU A 1 34 ? -8.257 -5.324 16.478 1.00 15.00 ? ? ? ? ? ? 34 GLU A H 1 +ATOM 324 N N . GLU A 1 35 ? -10.144 -7.918 13.360 1.00 15.87 ? ? ? ? ? ? 35 GLU A N 1 +ATOM 325 C CA . GLU A 1 35 ? -11.484 -8.118 12.720 1.00 20.76 ? ? ? ? ? ? 35 GLU A CA 1 +ATOM 326 C C . GLU A 1 35 ? -12.751 -7.880 13.549 1.00 19.68 ? ? ? ? ? ? 35 GLU A C 1 +ATOM 327 O O . GLU A 1 35 ? -13.089 -8.704 14.391 1.00 23.35 ? ? ? ? ? ? 35 GLU A O 1 +ATOM 328 C CB . GLU A 1 35 ? -11.714 -9.549 12.214 1.00 20.31 ? ? ? ? ? ? 35 GLU A CB 1 +ATOM 329 C CG . GLU A 1 35 ? -11.549 -9.697 10.718 1.00 30.20 ? ? ? ? ? ? 35 GLU A CG 1 +ATOM 330 C CD . GLU A 1 35 ? -12.383 -8.701 9.949 1.00 39.71 ? ? ? ? ? ? 35 GLU A CD 1 +ATOM 331 O OE1 . GLU A 1 35 ? -13.609 -8.709 10.089 1.00 43.68 ? ? ? ? ? ? 35 GLU A OE1 1 +ATOM 332 O OE2 . GLU A 1 35 ? -11.784 -7.927 9.198 1.00 46.22 ? ? ? ? ? ? 35 GLU A OE2 1 +ATOM 333 H H . GLU A 1 35 ? -9.364 -8.507 13.177 1.00 15.00 ? ? ? ? ? ? 35 GLU A H 1 +ATOM 334 N N . MET A 1 36 ? -13.447 -6.776 13.230 1.00 13.95 ? ? ? ? ? ? 36 MET A N 1 +ATOM 335 C CA . MET A 1 36 ? -14.799 -6.605 13.769 1.00 10.73 ? ? ? ? ? ? 36 MET A CA 1 +ATOM 336 C C . MET A 1 36 ? -15.834 -5.918 12.828 1.00 13.63 ? ? ? ? ? ? 36 MET A C 1 +ATOM 337 O O . MET A 1 36 ? -15.547 -5.316 11.794 1.00 11.97 ? ? ? ? ? ? 36 MET A O 1 +ATOM 338 C CB . MET A 1 36 ? -14.754 -5.925 15.136 1.00 6.21 ? ? ? ? ? ? 36 MET A CB 1 +ATOM 339 C CG . MET A 1 36 ? -14.475 -4.427 14.916 1.00 14.27 ? ? ? ? ? ? 36 MET A CG 1 +ATOM 340 S SD . MET A 1 36 ? -14.218 -3.469 16.396 1.00 15.34 ? ? ? ? ? ? 36 MET A SD 1 +ATOM 341 C CE . MET A 1 36 ? -15.640 -3.903 17.405 1.00 13.96 ? ? ? ? ? ? 36 MET A CE 1 +ATOM 342 H H . MET A 1 36 ? -13.002 -6.089 12.656 1.00 15.00 ? ? ? ? ? ? 36 MET A H 1 +ATOM 343 N N . ASN A 1 37 ? -17.086 -6.053 13.291 1.00 11.98 ? ? ? ? ? ? 37 ASN A N 1 +ATOM 344 C CA . ASN A 1 37 ? -18.179 -5.371 12.623 1.00 13.42 ? ? ? ? ? ? 37 ASN A CA 1 +ATOM 345 C C . ASN A 1 37 ? -18.578 -4.047 13.255 1.00 16.43 ? ? ? ? ? ? 37 ASN A C 1 +ATOM 346 O O . ASN A 1 37 ? -19.012 -3.954 14.394 1.00 16.51 ? ? ? ? ? ? 37 ASN A O 1 +ATOM 347 C CB . ASN A 1 37 ? -19.375 -6.301 12.537 1.00 16.24 ? ? ? ? ? ? 37 ASN A CB 1 +ATOM 348 C CG . ASN A 1 37 ? -18.994 -7.301 11.471 1.00 23.68 ? ? ? ? ? ? 37 ASN A CG 1 +ATOM 349 O OD1 . ASN A 1 37 ? -18.624 -6.954 10.357 1.00 32.36 ? ? ? ? ? ? 37 ASN A OD1 1 +ATOM 350 N ND2 . ASN A 1 37 ? -19.029 -8.579 11.848 1.00 18.92 ? ? ? ? ? ? 37 ASN A ND2 1 +ATOM 351 H H . ASN A 1 37 ? -17.210 -6.545 14.147 1.00 15.00 ? ? ? ? ? ? 37 ASN A H 1 +ATOM 352 H HD21 . ASN A 1 37 ? -18.634 -9.172 11.152 1.00 15.00 ? ? ? ? ? ? 37 ASN A HD21 1 +ATOM 353 H HD22 . ASN A 1 37 ? -19.424 -8.895 12.704 1.00 15.00 ? ? ? ? ? ? 37 ASN A HD22 1 +ATOM 354 N N . LEU A 1 38 ? -18.379 -3.018 12.440 1.00 16.56 ? ? ? ? ? ? 38 LEU A N 1 +ATOM 355 C CA . LEU A 1 38 ? -18.704 -1.681 12.902 1.00 15.78 ? ? ? ? ? ? 38 LEU A CA 1 +ATOM 356 C C . LEU A 1 38 ? -19.693 -1.009 11.938 1.00 19.85 ? ? ? ? ? ? 38 LEU A C 1 +ATOM 357 O O . LEU A 1 38 ? -19.680 -1.251 10.724 1.00 20.78 ? ? ? ? ? ? 38 LEU A O 1 +ATOM 358 C CB . LEU A 1 38 ? -17.348 -0.970 13.021 1.00 14.49 ? ? ? ? ? ? 38 LEU A CB 1 +ATOM 359 C CG . LEU A 1 38 ? -16.858 -0.246 14.307 1.00 8.64 ? ? ? ? ? ? 38 LEU A CG 1 +ATOM 360 C CD1 . LEU A 1 38 ? -17.074 -0.915 15.666 1.00 5.75 ? ? ? ? ? ? 38 LEU A CD1 1 +ATOM 361 C CD2 . LEU A 1 38 ? -15.366 -0.009 14.154 1.00 5.18 ? ? ? ? ? ? 38 LEU A CD2 1 +ATOM 362 H H . LEU A 1 38 ? -17.966 -3.206 11.549 1.00 15.00 ? ? ? ? ? ? 38 LEU A H 1 +ATOM 363 N N . PRO A 1 39 ? -20.594 -0.180 12.534 1.00 22.42 ? ? ? ? ? ? 39 PRO A N 1 +ATOM 364 C CA . PRO A 1 39 ? -21.611 0.588 11.771 1.00 26.77 ? ? ? ? ? ? 39 PRO A CA 1 +ATOM 365 C C . PRO A 1 39 ? -21.130 1.539 10.665 1.00 29.54 ? ? ? ? ? ? 39 PRO A C 1 +ATOM 366 O O . PRO A 1 39 ? -20.396 2.503 10.868 1.00 29.99 ? ? ? ? ? ? 39 PRO A O 1 +ATOM 367 C CB . PRO A 1 39 ? -22.332 1.421 12.823 1.00 24.85 ? ? ? ? ? ? 39 PRO A CB 1 +ATOM 368 C CG . PRO A 1 39 ? -22.072 0.681 14.122 1.00 28.76 ? ? ? ? ? ? 39 PRO A CG 1 +ATOM 369 C CD . PRO A 1 39 ? -20.699 0.052 13.959 1.00 21.86 ? ? ? ? ? ? 39 PRO A CD 1 +ATOM 370 N N . GLY A 1 40 ? -21.657 1.274 9.478 1.00 28.51 ? ? ? ? ? ? 40 GLY A N 1 +ATOM 371 C CA . GLY A 1 40 ? -21.516 2.378 8.526 1.00 28.87 ? ? ? ? ? ? 40 GLY A CA 1 +ATOM 372 C C . GLY A 1 40 ? -20.618 2.162 7.311 1.00 30.87 ? ? ? ? ? ? 40 GLY A C 1 +ATOM 373 O O . GLY A 1 40 ? -20.231 1.070 6.911 1.00 29.78 ? ? ? ? ? ? 40 GLY A O 1 +ATOM 374 H H . GLY A 1 40 ? -22.057 0.383 9.286 1.00 15.00 ? ? ? ? ? ? 40 GLY A H 1 +ATOM 375 N N . LYS A 1 41 ? -20.343 3.293 6.680 1.00 33.12 ? ? ? ? ? ? 41 LYS A N 1 +ATOM 376 C CA . LYS A 1 41 ? -19.625 3.137 5.415 1.00 37.91 ? ? ? ? ? ? 41 LYS A CA 1 +ATOM 377 C C . LYS A 1 41 ? -18.101 3.232 5.504 1.00 38.30 ? ? ? ? ? ? 41 LYS A C 1 +ATOM 378 O O . LYS A 1 41 ? -17.526 4.054 6.207 1.00 42.40 ? ? ? ? ? ? 41 LYS A O 1 +ATOM 379 C CB . LYS A 1 41 ? -20.195 4.083 4.341 1.00 41.89 ? ? ? ? ? ? 41 LYS A CB 1 +ATOM 380 C CG . LYS A 1 41 ? -21.035 3.347 3.297 1.00 42.36 ? ? ? ? ? ? 41 LYS A CG 1 +ATOM 381 C CD . LYS A 1 41 ? -20.669 3.854 1.902 1.00 48.74 ? ? ? ? ? ? 41 LYS A CD 1 +ATOM 382 C CE . LYS A 1 41 ? -21.210 3.011 0.734 1.00 51.48 ? ? ? ? ? ? 41 LYS A CE 1 +ATOM 383 N NZ . LYS A 1 41 ? -20.639 3.508 -0.530 1.00 50.33 ? ? ? ? ? ? 41 LYS A NZ 1 +ATOM 384 H H . LYS A 1 41 ? -20.527 4.159 7.137 1.00 15.00 ? ? ? ? ? ? 41 LYS A H 1 +ATOM 385 H HZ1 . LYS A 1 41 ? -20.796 4.534 -0.598 1.00 15.00 ? ? ? ? ? ? 41 LYS A HZ1 1 +ATOM 386 H HZ2 . LYS A 1 41 ? -19.617 3.316 -0.550 1.00 15.00 ? ? ? ? ? ? 41 LYS A HZ2 1 +ATOM 387 H HZ3 . LYS A 1 41 ? -21.094 3.036 -1.338 1.00 15.00 ? ? ? ? ? ? 41 LYS A HZ3 1 +ATOM 388 N N . TRP A 1 42 ? -17.466 2.327 4.774 1.00 34.90 ? ? ? ? ? ? 42 TRP A N 1 +ATOM 389 C CA . TRP A 1 42 ? -16.020 2.225 4.935 1.00 30.92 ? ? ? ? ? ? 42 TRP A CA 1 +ATOM 390 C C . TRP A 1 42 ? -15.259 2.241 3.615 1.00 33.72 ? ? ? ? ? ? 42 TRP A C 1 +ATOM 391 O O . TRP A 1 42 ? -15.677 1.739 2.572 1.00 35.04 ? ? ? ? ? ? 42 TRP A O 1 +ATOM 392 C CB . TRP A 1 42 ? -15.640 0.985 5.734 1.00 24.59 ? ? ? ? ? ? 42 TRP A CB 1 +ATOM 393 C CG . TRP A 1 42 ? -16.258 -0.178 5.014 1.00 26.07 ? ? ? ? ? ? 42 TRP A CG 1 +ATOM 394 C CD1 . TRP A 1 42 ? -17.588 -0.603 5.142 1.00 27.36 ? ? ? ? ? ? 42 TRP A CD1 1 +ATOM 395 C CD2 . TRP A 1 42 ? -15.682 -1.014 3.985 1.00 28.61 ? ? ? ? ? ? 42 TRP A CD2 1 +ATOM 396 N NE1 . TRP A 1 42 ? -17.863 -1.611 4.282 1.00 31.74 ? ? ? ? ? ? 42 TRP A NE1 1 +ATOM 397 C CE2 . TRP A 1 42 ? -16.714 -1.914 3.550 1.00 31.16 ? ? ? ? ? ? 42 TRP A CE2 1 +ATOM 398 C CE3 . TRP A 1 42 ? -14.401 -1.100 3.396 1.00 28.02 ? ? ? ? ? ? 42 TRP A CE3 1 +ATOM 399 C CZ2 . TRP A 1 42 ? -16.443 -2.867 2.537 1.00 24.44 ? ? ? ? ? ? 42 TRP A CZ2 1 +ATOM 400 C CZ3 . TRP A 1 42 ? -14.145 -2.056 2.386 1.00 22.00 ? ? ? ? ? ? 42 TRP A CZ3 1 +ATOM 401 C CH2 . TRP A 1 42 ? -15.154 -2.938 1.967 1.00 21.98 ? ? ? ? ? ? 42 TRP A CH2 1 +ATOM 402 H H . TRP A 1 42 ? -17.981 1.727 4.167 1.00 15.00 ? ? ? ? ? ? 42 TRP A H 1 +ATOM 403 H HE1 . TRP A 1 42 ? -18.729 -2.063 4.206 1.00 15.00 ? ? ? ? ? ? 42 TRP A HE1 1 +ATOM 404 N N . LYS A 1 43 ? -14.085 2.847 3.741 1.00 32.75 ? ? ? ? ? ? 43 LYS A N 1 +ATOM 405 C CA . LYS A 1 43 ? -13.177 2.907 2.604 1.00 30.62 ? ? ? ? ? ? 43 LYS A CA 1 +ATOM 406 C C . LYS A 1 43 ? -12.023 1.867 2.694 1.00 27.14 ? ? ? ? ? ? 43 LYS A C 1 +ATOM 407 O O . LYS A 1 43 ? -11.369 1.726 3.716 1.00 22.53 ? ? ? ? ? ? 43 LYS A O 1 +ATOM 408 C CB . LYS A 1 43 ? -12.716 4.372 2.591 1.00 33.09 ? ? ? ? ? ? 43 LYS A CB 1 +ATOM 409 C CG . LYS A 1 43 ? -11.786 4.732 1.446 1.00 41.34 ? ? ? ? ? ? 43 LYS A CG 1 +ATOM 410 C CD . LYS A 1 43 ? -10.974 5.998 1.713 1.00 49.18 ? ? ? ? ? ? 43 LYS A CD 1 +ATOM 411 C CE . LYS A 1 43 ? -9.514 5.868 1.216 1.00 54.01 ? ? ? ? ? ? 43 LYS A CE 1 +ATOM 412 N NZ . LYS A 1 43 ? -8.786 4.797 1.932 1.00 50.64 ? ? ? ? ? ? 43 LYS A NZ 1 +ATOM 413 H H . LYS A 1 43 ? -13.846 3.198 4.649 1.00 15.00 ? ? ? ? ? ? 43 LYS A H 1 +ATOM 414 H HZ1 . LYS A 1 43 ? -8.763 5.005 2.951 1.00 15.00 ? ? ? ? ? ? 43 LYS A HZ1 1 +ATOM 415 H HZ2 . LYS A 1 43 ? -9.264 3.887 1.778 1.00 15.00 ? ? ? ? ? ? 43 LYS A HZ2 1 +ATOM 416 H HZ3 . LYS A 1 43 ? -7.812 4.735 1.574 1.00 15.00 ? ? ? ? ? ? 43 LYS A HZ3 1 +ATOM 417 N N . PRO A 1 44 ? -11.769 1.125 1.599 1.00 23.46 ? ? ? ? ? ? 44 PRO A N 1 +ATOM 418 C CA . PRO A 1 44 ? -10.508 0.364 1.498 1.00 23.08 ? ? ? ? ? ? 44 PRO A CA 1 +ATOM 419 C C . PRO A 1 44 ? -9.215 1.173 1.381 1.00 22.15 ? ? ? ? ? ? 44 PRO A C 1 +ATOM 420 O O . PRO A 1 44 ? -9.090 2.205 0.739 1.00 18.72 ? ? ? ? ? ? 44 PRO A O 1 +ATOM 421 C CB . PRO A 1 44 ? -10.712 -0.506 0.266 1.00 23.78 ? ? ? ? ? ? 44 PRO A CB 1 +ATOM 422 C CG . PRO A 1 44 ? -11.689 0.298 -0.581 1.00 24.22 ? ? ? ? ? ? 44 PRO A CG 1 +ATOM 423 C CD . PRO A 1 44 ? -12.609 0.980 0.436 1.00 23.63 ? ? ? ? ? ? 44 PRO A CD 1 +ATOM 424 N N . LYS A 1 45 ? -8.216 0.598 2.050 1.00 25.28 ? ? ? ? ? ? 45 LYS A N 1 +ATOM 425 C CA . LYS A 1 45 ? -6.884 1.223 2.149 1.00 23.40 ? ? ? ? ? ? 45 LYS A CA 1 +ATOM 426 C C . LYS A 1 45 ? -5.758 0.172 2.280 1.00 20.00 ? ? ? ? ? ? 45 LYS A C 1 +ATOM 427 O O . LYS A 1 45 ? -5.897 -0.785 3.026 1.00 20.10 ? ? ? ? ? ? 45 LYS A O 1 +ATOM 428 C CB . LYS A 1 45 ? -6.924 2.167 3.363 1.00 21.78 ? ? ? ? ? ? 45 LYS A CB 1 +ATOM 429 C CG . LYS A 1 45 ? -5.932 3.322 3.377 1.00 24.75 ? ? ? ? ? ? 45 LYS A CG 1 +ATOM 430 C CD . LYS A 1 45 ? -5.897 3.959 4.769 1.00 35.26 ? ? ? ? ? ? 45 LYS A CD 1 +ATOM 431 C CE . LYS A 1 45 ? -5.082 5.271 4.942 1.00 38.29 ? ? ? ? ? ? 45 LYS A CE 1 +ATOM 432 N NZ . LYS A 1 45 ? -5.054 5.680 6.371 1.00 38.89 ? ? ? ? ? ? 45 LYS A NZ 1 +ATOM 433 H H . LYS A 1 45 ? -8.468 -0.179 2.630 1.00 15.00 ? ? ? ? ? ? 45 LYS A H 1 +ATOM 434 H HZ1 . LYS A 1 45 ? -4.624 4.919 6.935 1.00 15.00 ? ? ? ? ? ? 45 LYS A HZ1 1 +ATOM 435 H HZ2 . LYS A 1 45 ? -4.492 6.549 6.476 1.00 15.00 ? ? ? ? ? ? 45 LYS A HZ2 1 +ATOM 436 H HZ3 . LYS A 1 45 ? -6.024 5.850 6.706 1.00 15.00 ? ? ? ? ? ? 45 LYS A HZ3 1 +ATOM 437 N N . MET A 1 46 ? -4.644 0.367 1.567 1.00 20.42 ? ? ? ? ? ? 46 MET A N 1 +ATOM 438 C CA . MET A 1 46 ? -3.404 -0.401 1.915 1.00 22.45 ? ? ? ? ? ? 46 MET A CA 1 +ATOM 439 C C . MET A 1 46 ? -2.345 0.337 2.775 1.00 22.01 ? ? ? ? ? ? 46 MET A C 1 +ATOM 440 O O . MET A 1 46 ? -1.871 1.427 2.447 1.00 22.84 ? ? ? ? ? ? 46 MET A O 1 +ATOM 441 C CB . MET A 1 46 ? -2.621 -0.857 0.685 1.00 21.43 ? ? ? ? ? ? 46 MET A CB 1 +ATOM 442 C CG . MET A 1 46 ? -3.433 -1.507 -0.429 1.00 26.00 ? ? ? ? ? ? 46 MET A CG 1 +ATOM 443 S SD . MET A 1 46 ? -3.572 -3.280 -0.248 1.00 33.71 ? ? ? ? ? ? 46 MET A SD 1 +ATOM 444 C CE . MET A 1 46 ? -1.806 -3.607 -0.201 1.00 33.67 ? ? ? ? ? ? 46 MET A CE 1 +ATOM 445 H H . MET A 1 46 ? -4.635 1.130 0.924 1.00 15.00 ? ? ? ? ? ? 46 MET A H 1 +ATOM 446 N N . ILE A 1 47 ? -1.967 -0.307 3.889 1.00 19.66 ? ? ? ? ? ? 47 ILE A N 1 +ATOM 447 C CA . ILE A 1 47 ? -0.898 0.272 4.742 1.00 13.85 ? ? ? ? ? ? 47 ILE A CA 1 +ATOM 448 C C . ILE A 1 47 ? 0.461 -0.453 4.862 1.00 10.43 ? ? ? ? ? ? 47 ILE A C 1 +ATOM 449 O O . ILE A 1 47 ? 0.579 -1.641 5.090 1.00 13.68 ? ? ? ? ? ? 47 ILE A O 1 +ATOM 450 C CB . ILE A 1 47 ? -1.466 0.587 6.123 1.00 13.67 ? ? ? ? ? ? 47 ILE A CB 1 +ATOM 451 C CG1 . ILE A 1 47 ? -1.712 -0.683 6.942 1.00 10.96 ? ? ? ? ? ? 47 ILE A CG1 1 +ATOM 452 C CG2 . ILE A 1 47 ? -2.734 1.446 5.944 1.00 9.75 ? ? ? ? ? ? 47 ILE A CG2 1 +ATOM 453 C CD1 . ILE A 1 47 ? -1.279 -0.564 8.399 1.00 9.43 ? ? ? ? ? ? 47 ILE A CD1 1 +ATOM 454 H H . ILE A 1 47 ? -2.401 -1.189 4.069 1.00 15.00 ? ? ? ? ? ? 47 ILE A H 1 +ATOM 455 N N . GLY A 1 48 ? 1.541 0.287 4.685 1.00 12.48 ? ? ? ? ? ? 48 GLY A N 1 +ATOM 456 C CA . GLY A 1 48 ? 2.810 -0.455 4.774 1.00 10.79 ? ? ? ? ? ? 48 GLY A CA 1 +ATOM 457 C C . GLY A 1 48 ? 3.501 -0.450 6.124 1.00 8.62 ? ? ? ? ? ? 48 GLY A C 1 +ATOM 458 O O . GLY A 1 48 ? 3.690 0.611 6.685 1.00 10.71 ? ? ? ? ? ? 48 GLY A O 1 +ATOM 459 H H . GLY A 1 48 ? 1.467 1.275 4.566 1.00 15.00 ? ? ? ? ? ? 48 GLY A H 1 +ATOM 460 N N . GLY A 1 49 ? 3.872 -1.638 6.630 1.00 9.15 ? ? ? ? ? ? 49 GLY A N 1 +ATOM 461 C CA . GLY A 1 49 ? 4.667 -1.717 7.878 1.00 8.64 ? ? ? ? ? ? 49 GLY A CA 1 +ATOM 462 C C . GLY A 1 49 ? 6.032 -2.371 7.671 1.00 13.08 ? ? ? ? ? ? 49 GLY A C 1 +ATOM 463 O O . GLY A 1 49 ? 6.401 -2.675 6.548 1.00 11.27 ? ? ? ? ? ? 49 GLY A O 1 +ATOM 464 H H . GLY A 1 49 ? 3.656 -2.448 6.091 1.00 15.00 ? ? ? ? ? ? 49 GLY A H 1 +ATOM 465 N N . ILE A 1 50 ? 6.824 -2.604 8.737 1.00 16.21 ? ? ? ? ? ? 50 ILE A N 1 +ATOM 466 C CA . ILE A 1 50 ? 8.168 -3.023 8.290 1.00 18.38 ? ? ? ? ? ? 50 ILE A CA 1 +ATOM 467 C C . ILE A 1 50 ? 8.324 -4.364 7.545 1.00 19.29 ? ? ? ? ? ? 50 ILE A C 1 +ATOM 468 O O . ILE A 1 50 ? 9.159 -4.511 6.670 1.00 21.57 ? ? ? ? ? ? 50 ILE A O 1 +ATOM 469 C CB . ILE A 1 50 ? 9.340 -2.791 9.305 1.00 19.61 ? ? ? ? ? ? 50 ILE A CB 1 +ATOM 470 C CG1 . ILE A 1 50 ? 9.950 -4.057 9.888 1.00 21.42 ? ? ? ? ? ? 50 ILE A CG1 1 +ATOM 471 C CG2 . ILE A 1 50 ? 9.056 -1.788 10.438 1.00 13.44 ? ? ? ? ? ? 50 ILE A CG2 1 +ATOM 472 C CD1 . ILE A 1 50 ? 11.321 -3.759 10.485 1.00 27.01 ? ? ? ? ? ? 50 ILE A CD1 1 +ATOM 473 H H . ILE A 1 50 ? 6.487 -2.493 9.676 1.00 15.00 ? ? ? ? ? ? 50 ILE A H 1 +ATOM 474 N N . GLY A 1 51 ? 7.463 -5.341 7.897 1.00 19.71 ? ? ? ? ? ? 51 GLY A N 1 +ATOM 475 C CA . GLY A 1 51 ? 7.553 -6.613 7.154 1.00 14.98 ? ? ? ? ? ? 51 GLY A CA 1 +ATOM 476 C C . GLY A 1 51 ? 6.710 -6.733 5.871 1.00 14.89 ? ? ? ? ? ? 51 GLY A C 1 +ATOM 477 O O . GLY A 1 51 ? 6.612 -7.796 5.302 1.00 15.83 ? ? ? ? ? ? 51 GLY A O 1 +ATOM 478 H H . GLY A 1 51 ? 6.725 -5.156 8.547 1.00 15.00 ? ? ? ? ? ? 51 GLY A H 1 +ATOM 479 N N . GLY A 1 52 ? 6.075 -5.619 5.421 1.00 18.52 ? ? ? ? ? ? 52 GLY A N 1 +ATOM 480 C CA . GLY A 1 52 ? 5.285 -5.622 4.169 1.00 13.59 ? ? ? ? ? ? 52 GLY A CA 1 +ATOM 481 C C . GLY A 1 52 ? 3.992 -4.783 4.145 1.00 13.84 ? ? ? ? ? ? 52 GLY A C 1 +ATOM 482 O O . GLY A 1 52 ? 3.774 -3.944 5.001 1.00 14.07 ? ? ? ? ? ? 52 GLY A O 1 +ATOM 483 H H . GLY A 1 52 ? 6.253 -4.766 5.912 1.00 15.00 ? ? ? ? ? ? 52 GLY A H 1 +ATOM 484 N N . PHE A 1 53 ? 3.129 -5.045 3.137 1.00 15.75 ? ? ? ? ? ? 53 PHE A N 1 +ATOM 485 C CA . PHE A 1 53 ? 1.825 -4.369 2.984 1.00 17.32 ? ? ? ? ? ? 53 PHE A CA 1 +ATOM 486 C C . PHE A 1 53 ? 0.629 -5.087 3.565 1.00 23.07 ? ? ? ? ? ? 53 PHE A C 1 +ATOM 487 O O . PHE A 1 53 ? 0.349 -6.209 3.169 1.00 29.18 ? ? ? ? ? ? 53 PHE A O 1 +ATOM 488 C CB . PHE A 1 53 ? 1.380 -4.225 1.535 1.00 15.75 ? ? ? ? ? ? 53 PHE A CB 1 +ATOM 489 C CG . PHE A 1 53 ? 1.930 -2.972 0.914 1.00 17.91 ? ? ? ? ? ? 53 PHE A CG 1 +ATOM 490 C CD1 . PHE A 1 53 ? 1.601 -1.710 1.440 1.00 23.67 ? ? ? ? ? ? 53 PHE A CD1 1 +ATOM 491 C CD2 . PHE A 1 53 ? 2.811 -3.091 -0.166 1.00 21.23 ? ? ? ? ? ? 53 PHE A CD2 1 +ATOM 492 C CE1 . PHE A 1 53 ? 2.265 -0.559 0.964 1.00 25.07 ? ? ? ? ? ? 53 PHE A CE1 1 +ATOM 493 C CE2 . PHE A 1 53 ? 3.469 -1.951 -0.659 1.00 24.15 ? ? ? ? ? ? 53 PHE A CE2 1 +ATOM 494 C CZ . PHE A 1 53 ? 3.232 -0.704 -0.047 1.00 26.52 ? ? ? ? ? ? 53 PHE A CZ 1 +ATOM 495 H H . PHE A 1 53 ? 3.394 -5.798 2.536 1.00 15.00 ? ? ? ? ? ? 53 PHE A H 1 +ATOM 496 N N . ILE A 1 54 ? -0.129 -4.404 4.444 1.00 22.84 ? ? ? ? ? ? 54 ILE A N 1 +ATOM 497 C CA . ILE A 1 54 ? -1.485 -4.944 4.682 1.00 19.56 ? ? ? ? ? ? 54 ILE A CA 1 +ATOM 498 C C . ILE A 1 54 ? -2.705 -4.183 4.103 1.00 20.37 ? ? ? ? ? ? 54 ILE A C 1 +ATOM 499 O O . ILE A 1 54 ? -2.698 -3.007 3.755 1.00 21.02 ? ? ? ? ? ? 54 ILE A O 1 +ATOM 500 C CB . ILE A 1 54 ? -1.731 -5.333 6.163 1.00 18.04 ? ? ? ? ? ? 54 ILE A CB 1 +ATOM 501 C CG1 . ILE A 1 54 ? -1.860 -4.152 7.112 1.00 14.47 ? ? ? ? ? ? 54 ILE A CG1 1 +ATOM 502 C CG2 . ILE A 1 54 ? -0.682 -6.319 6.686 1.00 12.60 ? ? ? ? ? ? 54 ILE A CG2 1 +ATOM 503 C CD1 . ILE A 1 54 ? -2.069 -4.596 8.565 1.00 17.81 ? ? ? ? ? ? 54 ILE A CD1 1 +ATOM 504 H H . ILE A 1 54 ? 0.185 -3.510 4.767 1.00 15.00 ? ? ? ? ? ? 54 ILE A H 1 +ATOM 505 N N . LYS A 1 55 ? -3.800 -4.939 4.016 1.00 19.34 ? ? ? ? ? ? 55 LYS A N 1 +ATOM 506 C CA . LYS A 1 55 ? -5.043 -4.305 3.566 1.00 18.48 ? ? ? ? ? ? 55 LYS A CA 1 +ATOM 507 C C . LYS A 1 55 ? -6.107 -4.126 4.665 1.00 17.27 ? ? ? ? ? ? 55 LYS A C 1 +ATOM 508 O O . LYS A 1 55 ? -6.276 -4.956 5.550 1.00 14.14 ? ? ? ? ? ? 55 LYS A O 1 +ATOM 509 C CB . LYS A 1 55 ? -5.582 -5.052 2.347 1.00 22.23 ? ? ? ? ? ? 55 LYS A CB 1 +ATOM 510 C CG . LYS A 1 55 ? -6.899 -4.551 1.755 1.00 33.21 ? ? ? ? ? ? 55 LYS A CG 1 +ATOM 511 C CD . LYS A 1 55 ? -7.404 -5.499 0.663 1.00 43.72 ? ? ? ? ? ? 55 LYS A CD 1 +ATOM 512 C CE . LYS A 1 55 ? -8.898 -5.297 0.373 1.00 50.72 ? ? ? ? ? ? 55 LYS A CE 1 +ATOM 513 N NZ . LYS A 1 55 ? -9.336 -6.204 -0.702 1.00 52.98 ? ? ? ? ? ? 55 LYS A NZ 1 +ATOM 514 H H . LYS A 1 55 ? -3.763 -5.884 4.331 1.00 15.00 ? ? ? ? ? ? 55 LYS A H 1 +ATOM 515 H HZ1 . LYS A 1 55 ? -9.059 -7.180 -0.474 1.00 15.00 ? ? ? ? ? ? 55 LYS A HZ1 1 +ATOM 516 H HZ2 . LYS A 1 55 ? -10.370 -6.152 -0.805 1.00 15.00 ? ? ? ? ? ? 55 LYS A HZ2 1 +ATOM 517 H HZ3 . LYS A 1 55 ? -8.888 -5.919 -1.596 1.00 15.00 ? ? ? ? ? ? 55 LYS A HZ3 1 +ATOM 518 N N . VAL A 1 56 ? -6.764 -2.942 4.573 1.00 18.67 ? ? ? ? ? ? 56 VAL A N 1 +ATOM 519 C CA . VAL A 1 56 ? -7.550 -2.360 5.673 1.00 12.05 ? ? ? ? ? ? 56 VAL A CA 1 +ATOM 520 C C . VAL A 1 56 ? -8.917 -1.786 5.308 1.00 8.82 ? ? ? ? ? ? 56 VAL A C 1 +ATOM 521 O O . VAL A 1 56 ? -9.168 -1.353 4.196 1.00 11.63 ? ? ? ? ? ? 56 VAL A O 1 +ATOM 522 C CB . VAL A 1 56 ? -6.603 -1.392 6.391 1.00 7.83 ? ? ? ? ? ? 56 VAL A CB 1 +ATOM 523 C CG1 . VAL A 1 56 ? -6.834 0.091 6.224 1.00 2.00 ? ? ? ? ? ? 56 VAL A CG1 1 +ATOM 524 C CG2 . VAL A 1 56 ? -6.395 -1.903 7.799 1.00 6.80 ? ? ? ? ? ? 56 VAL A CG2 1 +ATOM 525 H H . VAL A 1 56 ? -6.551 -2.385 3.770 1.00 15.00 ? ? ? ? ? ? 56 VAL A H 1 +ATOM 526 N N . ARG A 1 57 ? -9.815 -1.814 6.286 1.00 10.78 ? ? ? ? ? ? 57 ARG A N 1 +ATOM 527 C CA . ARG A 1 57 ? -11.066 -1.048 6.164 1.00 8.48 ? ? ? ? ? ? 57 ARG A CA 1 +ATOM 528 C C . ARG A 1 57 ? -11.091 0.197 7.039 1.00 8.76 ? ? ? ? ? ? 57 ARG A C 1 +ATOM 529 O O . ARG A 1 57 ? -11.111 0.145 8.266 1.00 8.67 ? ? ? ? ? ? 57 ARG A O 1 +ATOM 530 C CB . ARG A 1 57 ? -12.279 -1.893 6.531 1.00 7.92 ? ? ? ? ? ? 57 ARG A CB 1 +ATOM 531 C CG . ARG A 1 57 ? -12.585 -3.018 5.549 1.00 9.23 ? ? ? ? ? ? 57 ARG A CG 1 +ATOM 532 C CD . ARG A 1 57 ? -13.825 -3.819 5.947 1.00 12.88 ? ? ? ? ? ? 57 ARG A CD 1 +ATOM 533 N NE . ARG A 1 57 ? -13.522 -4.972 6.797 1.00 19.41 ? ? ? ? ? ? 57 ARG A NE 1 +ATOM 534 C CZ . ARG A 1 57 ? -14.057 -5.084 8.049 1.00 28.57 ? ? ? ? ? ? 57 ARG A CZ 1 +ATOM 535 N NH1 . ARG A 1 57 ? -14.670 -4.055 8.653 1.00 29.23 ? ? ? ? ? ? 57 ARG A NH1 1 +ATOM 536 N NH2 . ARG A 1 57 ? -14.002 -6.251 8.702 1.00 25.99 ? ? ? ? ? ? 57 ARG A NH2 1 +ATOM 537 H H . ARG A 1 57 ? -9.580 -2.337 7.110 1.00 15.00 ? ? ? ? ? ? 57 ARG A H 1 +ATOM 538 H HE . ARG A 1 57 ? -13.012 -5.747 6.424 1.00 15.00 ? ? ? ? ? ? 57 ARG A HE 1 +ATOM 539 H HH11 . ARG A 1 57 ? -14.734 -3.165 8.198 1.00 15.00 ? ? ? ? ? ? 57 ARG A HH11 1 +ATOM 540 H HH12 . ARG A 1 57 ? -15.067 -4.176 9.562 1.00 15.00 ? ? ? ? ? ? 57 ARG A HH12 1 +ATOM 541 H HH21 . ARG A 1 57 ? -13.559 -7.042 8.279 1.00 15.00 ? ? ? ? ? ? 57 ARG A HH21 1 +ATOM 542 H HH22 . ARG A 1 57 ? -14.403 -6.332 9.613 1.00 15.00 ? ? ? ? ? ? 57 ARG A HH22 1 +ATOM 543 N N . GLN A 1 58 ? -11.083 1.339 6.349 1.00 9.36 ? ? ? ? ? ? 58 GLN A N 1 +ATOM 544 C CA . GLN A 1 58 ? -11.207 2.635 7.013 1.00 7.13 ? ? ? ? ? ? 58 GLN A CA 1 +ATOM 545 C C . GLN A 1 58 ? -12.595 3.074 7.512 1.00 7.78 ? ? ? ? ? ? 58 GLN A C 1 +ATOM 546 O O . GLN A 1 58 ? -13.454 3.367 6.691 1.00 9.82 ? ? ? ? ? ? 58 GLN A O 1 +ATOM 547 C CB . GLN A 1 58 ? -10.584 3.683 6.087 1.00 9.03 ? ? ? ? ? ? 58 GLN A CB 1 +ATOM 548 C CG . GLN A 1 58 ? -10.344 5.049 6.766 1.00 15.66 ? ? ? ? ? ? 58 GLN A CG 1 +ATOM 549 C CD . GLN A 1 58 ? -9.510 5.977 5.891 1.00 16.91 ? ? ? ? ? ? 58 GLN A CD 1 +ATOM 550 O OE1 . GLN A 1 58 ? -9.023 5.669 4.822 1.00 22.25 ? ? ? ? ? ? 58 GLN A OE1 1 +ATOM 551 N NE2 . GLN A 1 58 ? -9.320 7.175 6.380 1.00 13.90 ? ? ? ? ? ? 58 GLN A NE2 1 +ATOM 552 H H . GLN A 1 58 ? -10.980 1.249 5.365 1.00 15.00 ? ? ? ? ? ? 58 GLN A H 1 +ATOM 553 H HE21 . GLN A 1 58 ? -8.751 7.678 5.735 1.00 15.00 ? ? ? ? ? ? 58 GLN A HE21 1 +ATOM 554 H HE22 . GLN A 1 58 ? -9.668 7.526 7.238 1.00 15.00 ? ? ? ? ? ? 58 GLN A HE22 1 +ATOM 555 N N . TYR A 1 59 ? -12.765 3.179 8.860 1.00 4.58 ? ? ? ? ? ? 59 TYR A N 1 +ATOM 556 C CA . TYR A 1 59 ? -13.942 3.885 9.422 1.00 5.07 ? ? ? ? ? ? 59 TYR A CA 1 +ATOM 557 C C . TYR A 1 59 ? -13.682 5.245 10.081 1.00 7.84 ? ? ? ? ? ? 59 TYR A C 1 +ATOM 558 O O . TYR A 1 59 ? -12.843 5.379 10.961 1.00 10.41 ? ? ? ? ? ? 59 TYR A O 1 +ATOM 559 C CB . TYR A 1 59 ? -14.720 3.072 10.477 1.00 5.28 ? ? ? ? ? ? 59 TYR A CB 1 +ATOM 560 C CG . TYR A 1 59 ? -15.178 1.717 9.985 1.00 7.61 ? ? ? ? ? ? 59 TYR A CG 1 +ATOM 561 C CD1 . TYR A 1 59 ? -16.429 1.595 9.367 1.00 7.43 ? ? ? ? ? ? 59 TYR A CD1 1 +ATOM 562 C CD2 . TYR A 1 59 ? -14.333 0.601 10.167 1.00 15.35 ? ? ? ? ? ? 59 TYR A CD2 1 +ATOM 563 C CE1 . TYR A 1 59 ? -16.870 0.332 8.951 1.00 10.12 ? ? ? ? ? ? 59 TYR A CE1 1 +ATOM 564 C CE2 . TYR A 1 59 ? -14.755 -0.666 9.736 1.00 16.82 ? ? ? ? ? ? 59 TYR A CE2 1 +ATOM 565 C CZ . TYR A 1 59 ? -16.046 -0.793 9.181 1.00 16.20 ? ? ? ? ? ? 59 TYR A CZ 1 +ATOM 566 O OH . TYR A 1 59 ? -16.537 -2.052 8.909 1.00 15.62 ? ? ? ? ? ? 59 TYR A OH 1 +ATOM 567 H H . TYR A 1 59 ? -12.060 2.784 9.452 1.00 15.00 ? ? ? ? ? ? 59 TYR A H 1 +ATOM 568 H HH . TYR A 1 59 ? -17.463 -1.979 8.709 1.00 15.00 ? ? ? ? ? ? 59 TYR A HH 1 +ATOM 569 N N . ASP A 1 60 ? -14.420 6.280 9.634 1.00 8.33 ? ? ? ? ? ? 60 ASP A N 1 +ATOM 570 C CA . ASP A 1 60 ? -14.201 7.632 10.191 1.00 8.94 ? ? ? ? ? ? 60 ASP A CA 1 +ATOM 571 C C . ASP A 1 60 ? -15.146 8.076 11.297 1.00 12.12 ? ? ? ? ? ? 60 ASP A C 1 +ATOM 572 O O . ASP A 1 60 ? -16.218 7.526 11.443 1.00 12.98 ? ? ? ? ? ? 60 ASP A O 1 +ATOM 573 C CB . ASP A 1 60 ? -14.214 8.715 9.106 1.00 7.49 ? ? ? ? ? ? 60 ASP A CB 1 +ATOM 574 C CG . ASP A 1 60 ? -13.268 8.367 7.959 1.00 11.05 ? ? ? ? ? ? 60 ASP A CG 1 +ATOM 575 O OD1 . ASP A 1 60 ? -12.124 7.999 8.231 1.00 19.89 ? ? ? ? ? ? 60 ASP A OD1 1 +ATOM 576 O OD2 . ASP A 1 60 ? -13.668 8.458 6.796 1.00 11.72 ? ? ? ? ? ? 60 ASP A OD2 1 +ATOM 577 H H . ASP A 1 60 ? -15.187 6.059 9.035 1.00 15.00 ? ? ? ? ? ? 60 ASP A H 1 +ATOM 578 N N . GLN A 1 61 ? -14.742 9.086 12.089 1.00 13.98 ? ? ? ? ? ? 61 GLN A N 1 +ATOM 579 C CA . GLN A 1 61 ? -15.664 9.514 13.179 1.00 16.08 ? ? ? ? ? ? 61 GLN A CA 1 +ATOM 580 C C . GLN A 1 61 ? -16.363 8.514 14.188 1.00 14.69 ? ? ? ? ? ? 61 GLN A C 1 +ATOM 581 O O . GLN A 1 61 ? -17.532 8.604 14.552 1.00 13.55 ? ? ? ? ? ? 61 GLN A O 1 +ATOM 582 C CB . GLN A 1 61 ? -16.653 10.548 12.637 1.00 19.49 ? ? ? ? ? ? 61 GLN A CB 1 +ATOM 583 C CG . GLN A 1 61 ? -16.031 11.796 11.980 1.00 30.71 ? ? ? ? ? ? 61 GLN A CG 1 +ATOM 584 C CD . GLN A 1 61 ? -15.203 12.627 12.959 1.00 36.70 ? ? ? ? ? ? 61 GLN A CD 1 +ATOM 585 O OE1 . GLN A 1 61 ? -15.341 12.589 14.170 1.00 40.08 ? ? ? ? ? ? 61 GLN A OE1 1 +ATOM 586 N NE2 . GLN A 1 61 ? -14.260 13.384 12.397 1.00 36.53 ? ? ? ? ? ? 61 GLN A NE2 1 +ATOM 587 H H . GLN A 1 61 ? -13.853 9.505 11.941 1.00 15.00 ? ? ? ? ? ? 61 GLN A H 1 +ATOM 588 H HE21 . GLN A 1 61 ? -13.744 13.870 13.098 1.00 15.00 ? ? ? ? ? ? 61 GLN A HE21 1 +ATOM 589 H HE22 . GLN A 1 61 ? -14.115 13.472 11.420 1.00 15.00 ? ? ? ? ? ? 61 GLN A HE22 1 +ATOM 590 N N . ILE A 1 62 ? -15.544 7.560 14.664 1.00 10.58 ? ? ? ? ? ? 62 ILE A N 1 +ATOM 591 C CA . ILE A 1 62 ? -15.963 6.587 15.673 1.00 8.91 ? ? ? ? ? ? 62 ILE A CA 1 +ATOM 592 C C . ILE A 1 62 ? -15.545 6.958 17.114 1.00 12.94 ? ? ? ? ? ? 62 ILE A C 1 +ATOM 593 O O . ILE A 1 62 ? -14.431 7.393 17.403 1.00 10.33 ? ? ? ? ? ? 62 ILE A O 1 +ATOM 594 C CB . ILE A 1 62 ? -15.376 5.225 15.295 1.00 4.78 ? ? ? ? ? ? 62 ILE A CB 1 +ATOM 595 C CG1 . ILE A 1 62 ? -15.670 4.782 13.852 1.00 5.50 ? ? ? ? ? ? 62 ILE A CG1 1 +ATOM 596 C CG2 . ILE A 1 62 ? -15.760 4.140 16.303 1.00 2.00 ? ? ? ? ? ? 62 ILE A CG2 1 +ATOM 597 C CD1 . ILE A 1 62 ? -17.080 4.296 13.470 1.00 6.02 ? ? ? ? ? ? 62 ILE A CD1 1 +ATOM 598 H H . ILE A 1 62 ? -14.604 7.557 14.327 1.00 15.00 ? ? ? ? ? ? 62 ILE A H 1 +ATOM 599 N N . PRO A 1 63 ? -16.523 6.806 18.041 1.00 14.35 ? ? ? ? ? ? 63 PRO A N 1 +ATOM 600 C CA . PRO A 1 63 ? -16.248 7.063 19.462 1.00 11.42 ? ? ? ? ? ? 63 PRO A CA 1 +ATOM 601 C C . PRO A 1 63 ? -15.550 5.916 20.180 1.00 13.82 ? ? ? ? ? ? 63 PRO A C 1 +ATOM 602 O O . PRO A 1 63 ? -16.004 4.771 20.218 1.00 13.36 ? ? ? ? ? ? 63 PRO A O 1 +ATOM 603 C CB . PRO A 1 63 ? -17.636 7.378 20.025 1.00 7.57 ? ? ? ? ? ? 63 PRO A CB 1 +ATOM 604 C CG . PRO A 1 63 ? -18.554 7.567 18.809 1.00 9.23 ? ? ? ? ? ? 63 PRO A CG 1 +ATOM 605 C CD . PRO A 1 63 ? -17.942 6.610 17.786 1.00 14.61 ? ? ? ? ? ? 63 PRO A CD 1 +ATOM 606 N N . VAL A 1 64 ? -14.379 6.277 20.750 1.00 12.69 ? ? ? ? ? ? 64 VAL A N 1 +ATOM 607 C CA . VAL A 1 64 ? -13.736 5.312 21.632 1.00 9.70 ? ? ? ? ? ? 64 VAL A CA 1 +ATOM 608 C C . VAL A 1 64 ? -13.381 5.801 23.031 1.00 8.20 ? ? ? ? ? ? 64 VAL A C 1 +ATOM 609 O O . VAL A 1 64 ? -13.052 6.949 23.305 1.00 8.01 ? ? ? ? ? ? 64 VAL A O 1 +ATOM 610 C CB . VAL A 1 64 ? -12.654 4.392 20.936 1.00 9.79 ? ? ? ? ? ? 64 VAL A CB 1 +ATOM 611 C CG1 . VAL A 1 64 ? -12.700 4.364 19.396 1.00 2.00 ? ? ? ? ? ? 64 VAL A CG1 1 +ATOM 612 C CG2 . VAL A 1 64 ? -11.241 4.495 21.474 1.00 12.10 ? ? ? ? ? ? 64 VAL A CG2 1 +ATOM 613 H H . VAL A 1 64 ? -14.000 7.170 20.528 1.00 15.00 ? ? ? ? ? ? 64 VAL A H 1 +ATOM 614 N N . GLU A 1 65 ? -13.505 4.868 23.955 1.00 7.36 ? ? ? ? ? ? 65 GLU A N 1 +ATOM 615 C CA . GLU A 1 65 ? -12.972 5.193 25.262 1.00 8.29 ? ? ? ? ? ? 65 GLU A CA 1 +ATOM 616 C C . GLU A 1 65 ? -11.712 4.464 25.650 1.00 8.72 ? ? ? ? ? ? 65 GLU A C 1 +ATOM 617 O O . GLU A 1 65 ? -11.632 3.239 25.692 1.00 7.20 ? ? ? ? ? ? 65 GLU A O 1 +ATOM 618 C CB . GLU A 1 65 ? -14.009 4.958 26.331 1.00 16.21 ? ? ? ? ? ? 65 GLU A CB 1 +ATOM 619 C CG . GLU A 1 65 ? -15.173 5.917 26.227 1.00 28.95 ? ? ? ? ? ? 65 GLU A CG 1 +ATOM 620 C CD . GLU A 1 65 ? -16.036 5.762 27.457 1.00 42.00 ? ? ? ? ? ? 65 GLU A CD 1 +ATOM 621 O OE1 . GLU A 1 65 ? -15.655 6.281 28.515 1.00 41.15 ? ? ? ? ? ? 65 GLU A OE1 1 +ATOM 622 O OE2 . GLU A 1 65 ? -17.086 5.118 27.336 1.00 47.92 ? ? ? ? ? ? 65 GLU A OE2 1 +ATOM 623 H H . GLU A 1 65 ? -13.913 3.986 23.705 1.00 15.00 ? ? ? ? ? ? 65 GLU A H 1 +ATOM 624 N N . ILE A 1 66 ? -10.718 5.287 25.964 1.00 12.31 ? ? ? ? ? ? 66 ILE A N 1 +ATOM 625 C CA . ILE A 1 66 ? -9.424 4.746 26.428 1.00 15.55 ? ? ? ? ? ? 66 ILE A CA 1 +ATOM 626 C C . ILE A 1 66 ? -9.134 5.185 27.859 1.00 17.26 ? ? ? ? ? ? 66 ILE A C 1 +ATOM 627 O O . ILE A 1 66 ? -8.955 6.366 28.160 1.00 14.67 ? ? ? ? ? ? 66 ILE A O 1 +ATOM 628 C CB . ILE A 1 66 ? -8.240 5.161 25.497 1.00 14.67 ? ? ? ? ? ? 66 ILE A CB 1 +ATOM 629 C CG1 . ILE A 1 66 ? -8.601 5.198 24.012 1.00 14.16 ? ? ? ? ? ? 66 ILE A CG1 1 +ATOM 630 C CG2 . ILE A 1 66 ? -7.004 4.253 25.635 1.00 12.13 ? ? ? ? ? ? 66 ILE A CG2 1 +ATOM 631 C CD1 . ILE A 1 66 ? -7.499 5.896 23.204 1.00 12.50 ? ? ? ? ? ? 66 ILE A CD1 1 +ATOM 632 H H . ILE A 1 66 ? -10.882 6.267 25.831 1.00 15.00 ? ? ? ? ? ? 66 ILE A H 1 +ATOM 633 N N . CYS A 1 67 ? -9.142 4.196 28.776 1.00 20.80 ? ? ? ? ? ? 67 CYS A N 1 +ATOM 634 C CA . CYS A 1 67 ? -8.903 4.595 30.199 1.00 24.96 ? ? ? ? ? ? 67 CYS A CA 1 +ATOM 635 C C . CYS A 1 67 ? -9.762 5.707 30.862 1.00 25.05 ? ? ? ? ? ? 67 CYS A C 1 +ATOM 636 O O . CYS A 1 67 ? -9.280 6.561 31.606 1.00 25.64 ? ? ? ? ? ? 67 CYS A O 1 +ATOM 637 C CB . CYS A 1 67 ? -7.455 5.015 30.442 1.00 24.85 ? ? ? ? ? ? 67 CYS A CB 1 +ATOM 638 S SG . CYS A 1 67 ? -6.469 3.587 30.789 1.00 34.14 ? ? ? ? ? ? 67 CYS A SG 1 +ATOM 639 H H . CYS A 1 67 ? -9.210 3.247 28.455 1.00 15.00 ? ? ? ? ? ? 67 CYS A H 1 +ATOM 640 N N . GLY A 1 68 ? -11.058 5.710 30.508 1.00 22.38 ? ? ? ? ? ? 68 GLY A N 1 +ATOM 641 C CA . GLY A 1 68 ? -11.856 6.851 30.987 1.00 23.78 ? ? ? ? ? ? 68 GLY A CA 1 +ATOM 642 C C . GLY A 1 68 ? -11.771 8.182 30.210 1.00 25.98 ? ? ? ? ? ? 68 GLY A C 1 +ATOM 643 O O . GLY A 1 68 ? -12.465 9.153 30.491 1.00 30.44 ? ? ? ? ? ? 68 GLY A O 1 +ATOM 644 H H . GLY A 1 68 ? -11.411 5.002 29.905 1.00 15.00 ? ? ? ? ? ? 68 GLY A H 1 +ATOM 645 N N . HIS A 1 69 ? -10.906 8.176 29.182 1.00 22.38 ? ? ? ? ? ? 69 HIS A N 1 +ATOM 646 C CA . HIS A 1 69 ? -10.885 9.341 28.308 1.00 19.25 ? ? ? ? ? ? 69 HIS A CA 1 +ATOM 647 C C . HIS A 1 69 ? -11.555 9.024 27.002 1.00 19.72 ? ? ? ? ? ? 69 HIS A C 1 +ATOM 648 O O . HIS A 1 69 ? -11.320 7.998 26.375 1.00 21.73 ? ? ? ? ? ? 69 HIS A O 1 +ATOM 649 C CB . HIS A 1 69 ? -9.464 9.853 28.056 1.00 20.58 ? ? ? ? ? ? 69 HIS A CB 1 +ATOM 650 C CG . HIS A 1 69 ? -8.777 10.135 29.370 1.00 24.61 ? ? ? ? ? ? 69 HIS A CG 1 +ATOM 651 N ND1 . HIS A 1 69 ? -8.210 9.190 30.156 1.00 27.85 ? ? ? ? ? ? 69 HIS A ND1 1 +ATOM 652 C CD2 . HIS A 1 69 ? -8.662 11.363 30.018 1.00 25.43 ? ? ? ? ? ? 69 HIS A CD2 1 +ATOM 653 C CE1 . HIS A 1 69 ? -7.748 9.797 31.284 1.00 24.14 ? ? ? ? ? ? 69 HIS A CE1 1 +ATOM 654 N NE2 . HIS A 1 69 ? -8.034 11.130 31.196 1.00 22.87 ? ? ? ? ? ? 69 HIS A NE2 1 +ATOM 655 H H . HIS A 1 69 ? -10.316 7.394 29.003 1.00 15.00 ? ? ? ? ? ? 69 HIS A H 1 +ATOM 656 H HD1 . HIS A 1 69 ? -8.149 8.233 29.977 1.00 15.00 ? ? ? ? ? ? 69 HIS A HD1 1 +ATOM 657 N N . LYS A 1 70 ? -12.450 9.933 26.649 1.00 19.65 ? ? ? ? ? ? 70 LYS A N 1 +ATOM 658 C CA . LYS A 1 70 ? -13.221 9.826 25.406 1.00 17.22 ? ? ? ? ? ? 70 LYS A CA 1 +ATOM 659 C C . LYS A 1 70 ? -12.507 10.406 24.163 1.00 15.83 ? ? ? ? ? ? 70 LYS A C 1 +ATOM 660 O O . LYS A 1 70 ? -11.947 11.489 24.204 1.00 15.38 ? ? ? ? ? ? 70 LYS A O 1 +ATOM 661 C CB . LYS A 1 70 ? -14.508 10.605 25.650 1.00 20.19 ? ? ? ? ? ? 70 LYS A CB 1 +ATOM 662 C CG . LYS A 1 70 ? -15.789 9.845 25.956 1.00 30.72 ? ? ? ? ? ? 70 LYS A CG 1 +ATOM 663 C CD . LYS A 1 70 ? -16.197 9.005 24.735 1.00 39.08 ? ? ? ? ? ? 70 LYS A CD 1 +ATOM 664 C CE . LYS A 1 70 ? -16.223 9.752 23.395 1.00 39.55 ? ? ? ? ? ? 70 LYS A CE 1 +ATOM 665 N NZ . LYS A 1 70 ? -15.774 8.786 22.393 1.00 38.04 ? ? ? ? ? ? 70 LYS A NZ 1 +ATOM 666 H H . LYS A 1 70 ? -12.475 10.764 27.198 1.00 15.00 ? ? ? ? ? ? 70 LYS A H 1 +ATOM 667 H HZ1 . LYS A 1 70 ? -14.814 8.468 22.636 1.00 15.00 ? ? ? ? ? ? 70 LYS A HZ1 1 +ATOM 668 H HZ2 . LYS A 1 70 ? -16.418 7.970 22.384 1.00 15.00 ? ? ? ? ? ? 70 LYS A HZ2 1 +ATOM 669 H HZ3 . LYS A 1 70 ? -15.765 9.237 21.456 1.00 15.00 ? ? ? ? ? ? 70 LYS A HZ3 1 +ATOM 670 N N . ALA A 1 71 ? -12.581 9.669 23.053 1.00 14.11 ? ? ? ? ? ? 71 ALA A N 1 +ATOM 671 C CA . ALA A 1 71 ? -12.049 10.164 21.785 1.00 9.65 ? ? ? ? ? ? 71 ALA A CA 1 +ATOM 672 C C . ALA A 1 71 ? -12.950 9.871 20.542 1.00 14.05 ? ? ? ? ? ? 71 ALA A C 1 +ATOM 673 O O . ALA A 1 71 ? -13.774 8.960 20.525 1.00 17.33 ? ? ? ? ? ? 71 ALA A O 1 +ATOM 674 C CB . ALA A 1 71 ? -10.691 9.503 21.588 1.00 13.01 ? ? ? ? ? ? 71 ALA A CB 1 +ATOM 675 H H . ALA A 1 71 ? -12.986 8.761 23.141 1.00 15.00 ? ? ? ? ? ? 71 ALA A H 1 +ATOM 676 N N . ILE A 1 72 ? -12.793 10.673 19.468 1.00 12.13 ? ? ? ? ? ? 72 ILE A N 1 +ATOM 677 C CA . ILE A 1 72 ? -13.614 10.476 18.259 1.00 7.59 ? ? ? ? ? ? 72 ILE A CA 1 +ATOM 678 C C . ILE A 1 72 ? -12.785 10.549 16.968 1.00 7.29 ? ? ? ? ? ? 72 ILE A C 1 +ATOM 679 O O . ILE A 1 72 ? -12.084 11.503 16.658 1.00 7.41 ? ? ? ? ? ? 72 ILE A O 1 +ATOM 680 C CB . ILE A 1 72 ? -14.848 11.451 18.212 1.00 7.82 ? ? ? ? ? ? 72 ILE A CB 1 +ATOM 681 C CG1 . ILE A 1 72 ? -15.644 11.511 19.533 1.00 6.92 ? ? ? ? ? ? 72 ILE A CG1 1 +ATOM 682 C CG2 . ILE A 1 72 ? -15.821 11.024 17.111 1.00 2.99 ? ? ? ? ? ? 72 ILE A CG2 1 +ATOM 683 C CD1 . ILE A 1 72 ? -16.810 12.505 19.598 1.00 7.31 ? ? ? ? ? ? 72 ILE A CD1 1 +ATOM 684 H H . ILE A 1 72 ? -12.094 11.391 19.558 1.00 15.00 ? ? ? ? ? ? 72 ILE A H 1 +ATOM 685 N N . GLY A 1 73 ? -12.812 9.459 16.216 1.00 6.85 ? ? ? ? ? ? 73 GLY A N 1 +ATOM 686 C CA . GLY A 1 73 ? -11.802 9.477 15.165 1.00 3.66 ? ? ? ? ? ? 73 GLY A CA 1 +ATOM 687 C C . GLY A 1 73 ? -11.808 8.290 14.226 1.00 5.70 ? ? ? ? ? ? 73 GLY A C 1 +ATOM 688 O O . GLY A 1 73 ? -12.670 7.431 14.296 1.00 5.13 ? ? ? ? ? ? 73 GLY A O 1 +ATOM 689 H H . GLY A 1 73 ? -13.337 8.653 16.494 1.00 15.00 ? ? ? ? ? ? 73 GLY A H 1 +ATOM 690 N N . THR A 1 74 ? -10.814 8.304 13.326 1.00 4.83 ? ? ? ? ? ? 74 THR A N 1 +ATOM 691 C CA . THR A 1 74 ? -10.557 7.175 12.406 1.00 6.42 ? ? ? ? ? ? 74 THR A CA 1 +ATOM 692 C C . THR A 1 74 ? -9.927 5.876 12.993 1.00 8.54 ? ? ? ? ? ? 74 THR A C 1 +ATOM 693 O O . THR A 1 74 ? -8.938 5.859 13.741 1.00 11.09 ? ? ? ? ? ? 74 THR A O 1 +ATOM 694 C CB . THR A 1 74 ? -9.720 7.753 11.231 1.00 9.90 ? ? ? ? ? ? 74 THR A CB 1 +ATOM 695 O OG1 . THR A 1 74 ? -10.423 8.883 10.688 1.00 6.69 ? ? ? ? ? ? 74 THR A OG1 1 +ATOM 696 C CG2 . THR A 1 74 ? -9.271 6.796 10.104 1.00 9.55 ? ? ? ? ? ? 74 THR A CG2 1 +ATOM 697 H H . THR A 1 74 ? -10.187 9.084 13.351 1.00 15.00 ? ? ? ? ? ? 74 THR A H 1 +ATOM 698 H HG1 . THR A 1 74 ? -11.146 8.537 10.185 1.00 15.00 ? ? ? ? ? ? 74 THR A HG1 1 +ATOM 699 N N . VAL A 1 75 ? -10.581 4.751 12.619 1.00 7.45 ? ? ? ? ? ? 75 VAL A N 1 +ATOM 700 C CA . VAL A 1 75 ? -10.064 3.424 12.999 1.00 3.64 ? ? ? ? ? ? 75 VAL A CA 1 +ATOM 701 C C . VAL A 1 75 ? -10.002 2.529 11.798 1.00 5.50 ? ? ? ? ? ? 75 VAL A C 1 +ATOM 702 O O . VAL A 1 75 ? -10.908 2.484 10.966 1.00 6.60 ? ? ? ? ? ? 75 VAL A O 1 +ATOM 703 C CB . VAL A 1 75 ? -10.751 2.669 14.181 1.00 2.00 ? ? ? ? ? ? 75 VAL A CB 1 +ATOM 704 C CG1 . VAL A 1 75 ? -10.913 3.535 15.429 1.00 2.24 ? ? ? ? ? ? 75 VAL A CG1 1 +ATOM 705 C CG2 . VAL A 1 75 ? -12.074 2.028 13.818 1.00 2.67 ? ? ? ? ? ? 75 VAL A CG2 1 +ATOM 706 H H . VAL A 1 75 ? -11.433 4.856 12.105 1.00 15.00 ? ? ? ? ? ? 75 VAL A H 1 +ATOM 707 N N . LEU A 1 76 ? -8.827 1.882 11.712 1.00 7.70 ? ? ? ? ? ? 76 LEU A N 1 +ATOM 708 C CA . LEU A 1 76 ? -8.560 0.993 10.582 1.00 9.14 ? ? ? ? ? ? 76 LEU A CA 1 +ATOM 709 C C . LEU A 1 76 ? -8.758 -0.411 11.091 1.00 8.24 ? ? ? ? ? ? 76 LEU A C 1 +ATOM 710 O O . LEU A 1 76 ? -8.180 -0.689 12.133 1.00 8.98 ? ? ? ? ? ? 76 LEU A O 1 +ATOM 711 C CB . LEU A 1 76 ? -7.096 1.080 10.170 1.00 10.74 ? ? ? ? ? ? 76 LEU A CB 1 +ATOM 712 C CG . LEU A 1 76 ? -6.554 2.116 9.182 1.00 10.68 ? ? ? ? ? ? 76 LEU A CG 1 +ATOM 713 C CD1 . LEU A 1 76 ? -7.371 3.382 9.044 1.00 7.60 ? ? ? ? ? ? 76 LEU A CD1 1 +ATOM 714 C CD2 . LEU A 1 76 ? -5.065 2.380 9.472 1.00 4.59 ? ? ? ? ? ? 76 LEU A CD2 1 +ATOM 715 H H . LEU A 1 76 ? -8.164 1.978 12.458 1.00 15.00 ? ? ? ? ? ? 76 LEU A H 1 +ATOM 716 N N . VAL A 1 77 ? -9.556 -1.241 10.379 1.00 5.51 ? ? ? ? ? ? 77 VAL A N 1 +ATOM 717 C CA . VAL A 1 77 ? -9.612 -2.615 10.873 1.00 7.56 ? ? ? ? ? ? 77 VAL A CA 1 +ATOM 718 C C . VAL A 1 77 ? -9.067 -3.627 9.884 1.00 11.19 ? ? ? ? ? ? 77 VAL A C 1 +ATOM 719 O O . VAL A 1 77 ? -9.292 -3.527 8.684 1.00 15.24 ? ? ? ? ? ? 77 VAL A O 1 +ATOM 720 C CB . VAL A 1 77 ? -10.965 -3.018 11.575 1.00 10.81 ? ? ? ? ? ? 77 VAL A CB 1 +ATOM 721 C CG1 . VAL A 1 77 ? -11.992 -1.869 11.789 1.00 6.89 ? ? ? ? ? ? 77 VAL A CG1 1 +ATOM 722 C CG2 . VAL A 1 77 ? -11.605 -4.314 11.072 1.00 6.45 ? ? ? ? ? ? 77 VAL A CG2 1 +ATOM 723 H H . VAL A 1 77 ? -10.102 -0.873 9.624 1.00 15.00 ? ? ? ? ? ? 77 VAL A H 1 +ATOM 724 N N . GLY A 1 78 ? -8.247 -4.550 10.439 1.00 14.31 ? ? ? ? ? ? 78 GLY A N 1 +ATOM 725 C CA . GLY A 1 78 ? -7.421 -5.459 9.606 1.00 11.38 ? ? ? ? ? ? 78 GLY A CA 1 +ATOM 726 C C . GLY A 1 78 ? -6.549 -6.491 10.338 1.00 10.04 ? ? ? ? ? ? 78 GLY A C 1 +ATOM 727 O O . GLY A 1 78 ? -6.689 -6.696 11.536 1.00 11.54 ? ? ? ? ? ? 78 GLY A O 1 +ATOM 728 H H . GLY A 1 78 ? -8.172 -4.530 11.440 1.00 15.00 ? ? ? ? ? ? 78 GLY A H 1 +ATOM 729 N N . PRO A 1 79 ? -5.657 -7.198 9.576 1.00 10.23 ? ? ? ? ? ? 79 PRO A N 1 +ATOM 730 C CA . PRO A 1 79 ? -4.843 -8.307 10.160 1.00 8.21 ? ? ? ? ? ? 79 PRO A CA 1 +ATOM 731 C C . PRO A 1 79 ? -3.582 -7.953 10.985 1.00 13.23 ? ? ? ? ? ? 79 PRO A C 1 +ATOM 732 O O . PRO A 1 79 ? -2.449 -8.222 10.618 1.00 21.44 ? ? ? ? ? ? 79 PRO A O 1 +ATOM 733 C CB . PRO A 1 79 ? -4.516 -9.134 8.905 1.00 4.37 ? ? ? ? ? ? 79 PRO A CB 1 +ATOM 734 C CG . PRO A 1 79 ? -4.472 -8.118 7.757 1.00 2.00 ? ? ? ? ? ? 79 PRO A CG 1 +ATOM 735 C CD . PRO A 1 79 ? -5.536 -7.089 8.115 1.00 3.01 ? ? ? ? ? ? 79 PRO A CD 1 +ATOM 736 N N . THR A 1 80 ? -3.793 -7.352 12.147 1.00 16.55 ? ? ? ? ? ? 80 THR A N 1 +ATOM 737 C CA . THR A 1 80 ? -2.668 -6.967 13.039 1.00 14.33 ? ? ? ? ? ? 80 THR A CA 1 +ATOM 738 C C . THR A 1 80 ? -2.414 -7.963 14.181 1.00 14.07 ? ? ? ? ? ? 80 THR A C 1 +ATOM 739 O O . THR A 1 80 ? -3.361 -8.591 14.627 1.00 14.05 ? ? ? ? ? ? 80 THR A O 1 +ATOM 740 C CB . THR A 1 80 ? -2.984 -5.585 13.630 1.00 10.44 ? ? ? ? ? ? 80 THR A CB 1 +ATOM 741 O OG1 . THR A 1 80 ? -2.027 -5.241 14.620 1.00 12.88 ? ? ? ? ? ? 80 THR A OG1 1 +ATOM 742 C CG2 . THR A 1 80 ? -4.388 -5.503 14.223 1.00 4.82 ? ? ? ? ? ? 80 THR A CG2 1 +ATOM 743 H H . THR A 1 80 ? -4.756 -7.257 12.405 1.00 15.00 ? ? ? ? ? ? 80 THR A H 1 +ATOM 744 H HG1 . THR A 1 80 ? -2.528 -4.947 15.384 1.00 15.00 ? ? ? ? ? ? 80 THR A HG1 1 +ATOM 745 N N . PRO A 1 81 ? -1.144 -8.155 14.681 1.00 14.95 ? ? ? ? ? ? 81 PRO A N 1 +ATOM 746 C CA . PRO A 1 81 ? -0.988 -9.139 15.784 1.00 12.96 ? ? ? ? ? ? 81 PRO A CA 1 +ATOM 747 C C . PRO A 1 81 ? -1.790 -8.850 17.053 1.00 12.83 ? ? ? ? ? ? 81 PRO A C 1 +ATOM 748 O O . PRO A 1 81 ? -2.404 -9.713 17.644 1.00 16.23 ? ? ? ? ? ? 81 PRO A O 1 +ATOM 749 C CB . PRO A 1 81 ? 0.521 -9.191 16.065 1.00 7.77 ? ? ? ? ? ? 81 PRO A CB 1 +ATOM 750 C CG . PRO A 1 81 ? 1.178 -8.551 14.848 1.00 7.13 ? ? ? ? ? ? 81 PRO A CG 1 +ATOM 751 C CD . PRO A 1 81 ? 0.139 -7.587 14.270 1.00 10.90 ? ? ? ? ? ? 81 PRO A CD 1 +ATOM 752 N N . VAL A 1 82 ? -1.736 -7.570 17.453 1.00 15.40 ? ? ? ? ? ? 82 VAL A N 1 +ATOM 753 C CA . VAL A 1 82 ? -2.440 -7.017 18.624 1.00 11.41 ? ? ? ? ? ? 82 VAL A CA 1 +ATOM 754 C C . VAL A 1 82 ? -3.373 -5.845 18.241 1.00 10.53 ? ? ? ? ? ? 82 VAL A C 1 +ATOM 755 O O . VAL A 1 82 ? -3.254 -5.294 17.142 1.00 9.57 ? ? ? ? ? ? 82 VAL A O 1 +ATOM 756 C CB . VAL A 1 82 ? -1.397 -6.519 19.651 1.00 9.70 ? ? ? ? ? ? 82 VAL A CB 1 +ATOM 757 C CG1 . VAL A 1 82 ? -0.766 -7.679 20.370 1.00 5.78 ? ? ? ? ? ? 82 VAL A CG1 1 +ATOM 758 C CG2 . VAL A 1 82 ? -0.333 -5.607 19.030 1.00 10.61 ? ? ? ? ? ? 82 VAL A CG2 1 +ATOM 759 H H . VAL A 1 82 ? -1.252 -6.961 16.826 1.00 15.00 ? ? ? ? ? ? 82 VAL A H 1 +ATOM 760 N N . ASN A 1 83 ? -4.242 -5.425 19.203 1.00 5.95 ? ? ? ? ? ? 83 ASN A N 1 +ATOM 761 C CA . ASN A 1 83 ? -4.800 -4.081 18.959 1.00 3.62 ? ? ? ? ? ? 83 ASN A CA 1 +ATOM 762 C C . ASN A 1 83 ? -3.849 -2.918 19.265 1.00 3.68 ? ? ? ? ? ? 83 ASN A C 1 +ATOM 763 O O . ASN A 1 83 ? -3.264 -2.850 20.340 1.00 6.21 ? ? ? ? ? ? 83 ASN A O 1 +ATOM 764 C CB . ASN A 1 83 ? -6.103 -3.838 19.728 1.00 8.40 ? ? ? ? ? ? 83 ASN A CB 1 +ATOM 765 C CG . ASN A 1 83 ? -7.265 -4.688 19.236 1.00 9.86 ? ? ? ? ? ? 83 ASN A CG 1 +ATOM 766 O OD1 . ASN A 1 83 ? -7.744 -4.560 18.129 1.00 15.78 ? ? ? ? ? ? 83 ASN A OD1 1 +ATOM 767 N ND2 . ASN A 1 83 ? -7.765 -5.557 20.102 1.00 6.89 ? ? ? ? ? ? 83 ASN A ND2 1 +ATOM 768 H H . ASN A 1 83 ? -4.312 -5.927 20.062 1.00 15.00 ? ? ? ? ? ? 83 ASN A H 1 +ATOM 769 H HD21 . ASN A 1 83 ? -8.526 -6.068 19.715 1.00 15.00 ? ? ? ? ? ? 83 ASN A HD21 1 +ATOM 770 H HD22 . ASN A 1 83 ? -7.387 -5.635 21.026 1.00 15.00 ? ? ? ? ? ? 83 ASN A HD22 1 +ATOM 771 N N . ILE A 1 84 ? -3.733 -2.018 18.281 1.00 4.44 ? ? ? ? ? ? 84 ILE A N 1 +ATOM 772 C CA . ILE A 1 84 ? -2.820 -0.844 18.286 1.00 6.23 ? ? ? ? ? ? 84 ILE A CA 1 +ATOM 773 C C . ILE A 1 84 ? -3.530 0.548 18.348 1.00 7.54 ? ? ? ? ? ? 84 ILE A C 1 +ATOM 774 O O . ILE A 1 84 ? -4.310 0.914 17.470 1.00 10.49 ? ? ? ? ? ? 84 ILE A O 1 +ATOM 775 C CB . ILE A 1 84 ? -1.917 -0.949 17.005 1.00 9.16 ? ? ? ? ? ? 84 ILE A CB 1 +ATOM 776 C CG1 . ILE A 1 84 ? -0.878 -2.065 17.074 1.00 9.46 ? ? ? ? ? ? 84 ILE A CG1 1 +ATOM 777 C CG2 . ILE A 1 84 ? -1.171 0.325 16.564 1.00 9.37 ? ? ? ? ? ? 84 ILE A CG2 1 +ATOM 778 C CD1 . ILE A 1 84 ? -0.214 -2.279 15.708 1.00 12.32 ? ? ? ? ? ? 84 ILE A CD1 1 +ATOM 779 H H . ILE A 1 84 ? -4.302 -2.187 17.474 1.00 15.00 ? ? ? ? ? ? 84 ILE A H 1 +ATOM 780 N N . ILE A 1 85 ? -3.203 1.329 19.399 1.00 6.08 ? ? ? ? ? ? 85 ILE A N 1 +ATOM 781 C CA . ILE A 1 85 ? -3.549 2.761 19.382 1.00 3.83 ? ? ? ? ? ? 85 ILE A CA 1 +ATOM 782 C C . ILE A 1 85 ? -2.346 3.642 18.969 1.00 5.48 ? ? ? ? ? ? 85 ILE A C 1 +ATOM 783 O O . ILE A 1 85 ? -1.321 3.637 19.652 1.00 4.60 ? ? ? ? ? ? 85 ILE A O 1 +ATOM 784 C CB . ILE A 1 85 ? -4.078 3.263 20.743 1.00 3.28 ? ? ? ? ? ? 85 ILE A CB 1 +ATOM 785 C CG1 . ILE A 1 85 ? -4.993 2.265 21.468 1.00 4.75 ? ? ? ? ? ? 85 ILE A CG1 1 +ATOM 786 C CG2 . ILE A 1 85 ? -4.764 4.614 20.547 1.00 2.00 ? ? ? ? ? ? 85 ILE A CG2 1 +ATOM 787 C CD1 . ILE A 1 85 ? -6.373 2.028 20.837 1.00 10.37 ? ? ? ? ? ? 85 ILE A CD1 1 +ATOM 788 H H . ILE A 1 85 ? -2.591 0.942 20.095 1.00 15.00 ? ? ? ? ? ? 85 ILE A H 1 +ATOM 789 N N . GLY A 1 86 ? -2.519 4.356 17.827 1.00 3.63 ? ? ? ? ? ? 86 GLY A N 1 +ATOM 790 C CA . GLY A 1 86 ? -1.444 5.149 17.231 1.00 3.97 ? ? ? ? ? ? 86 GLY A CA 1 +ATOM 791 C C . GLY A 1 86 ? -1.513 6.620 17.583 1.00 6.02 ? ? ? ? ? ? 86 GLY A C 1 +ATOM 792 O O . GLY A 1 86 ? -2.415 7.044 18.307 1.00 11.53 ? ? ? ? ? ? 86 GLY A O 1 +ATOM 793 H H . GLY A 1 86 ? -3.436 4.323 17.425 1.00 15.00 ? ? ? ? ? ? 86 GLY A H 1 +ATOM 794 N N . ARG A 1 87 ? -0.582 7.434 17.053 1.00 4.10 ? ? ? ? ? ? 87 ARG A N 1 +ATOM 795 C CA . ARG A 1 87 ? -0.654 8.875 17.437 1.00 6.33 ? ? ? ? ? ? 87 ARG A CA 1 +ATOM 796 C C . ARG A 1 87 ? -1.987 9.709 17.268 1.00 6.34 ? ? ? ? ? ? 87 ARG A C 1 +ATOM 797 O O . ARG A 1 87 ? -2.248 10.670 17.993 1.00 9.00 ? ? ? ? ? ? 87 ARG A O 1 +ATOM 798 C CB . ARG A 1 87 ? 0.560 9.612 16.845 1.00 4.55 ? ? ? ? ? ? 87 ARG A CB 1 +ATOM 799 C CG . ARG A 1 87 ? 1.904 9.047 17.362 1.00 10.87 ? ? ? ? ? ? 87 ARG A CG 1 +ATOM 800 C CD . ARG A 1 87 ? 3.062 9.100 16.353 1.00 5.39 ? ? ? ? ? ? 87 ARG A CD 1 +ATOM 801 N NE . ARG A 1 87 ? 3.209 10.479 15.997 1.00 15.34 ? ? ? ? ? ? 87 ARG A NE 1 +ATOM 802 C CZ . ARG A 1 87 ? 2.792 10.872 14.795 1.00 18.04 ? ? ? ? ? ? 87 ARG A CZ 1 +ATOM 803 N NH1 . ARG A 1 87 ? 2.967 10.101 13.735 1.00 15.78 ? ? ? ? ? ? 87 ARG A NH1 1 +ATOM 804 N NH2 . ARG A 1 87 ? 2.170 12.049 14.692 1.00 19.63 ? ? ? ? ? ? 87 ARG A NH2 1 +ATOM 805 H H . ARG A 1 87 ? 0.196 7.014 16.588 1.00 15.00 ? ? ? ? ? ? 87 ARG A H 1 +ATOM 806 H HE . ARG A 1 87 ? 3.259 11.156 16.730 1.00 15.00 ? ? ? ? ? ? 87 ARG A HE 1 +ATOM 807 H HH11 . ARG A 1 87 ? 3.447 9.229 13.827 1.00 15.00 ? ? ? ? ? ? 87 ARG A HH11 1 +ATOM 808 H HH12 . ARG A 1 87 ? 2.619 10.390 12.845 1.00 15.00 ? ? ? ? ? ? 87 ARG A HH12 1 +ATOM 809 H HH21 . ARG A 1 87 ? 2.040 12.623 15.501 1.00 15.00 ? ? ? ? ? ? 87 ARG A HH21 1 +ATOM 810 H HH22 . ARG A 1 87 ? 1.829 12.357 13.805 1.00 15.00 ? ? ? ? ? ? 87 ARG A HH22 1 +ATOM 811 N N . ASN A 1 88 ? -2.846 9.320 16.284 1.00 4.71 ? ? ? ? ? ? 88 ASN A N 1 +ATOM 812 C CA . ASN A 1 88 ? -4.085 10.064 15.974 1.00 2.94 ? ? ? ? ? ? 88 ASN A CA 1 +ATOM 813 C C . ASN A 1 88 ? -5.100 10.221 17.134 1.00 8.33 ? ? ? ? ? ? 88 ASN A C 1 +ATOM 814 O O . ASN A 1 88 ? -5.814 11.204 17.328 1.00 10.61 ? ? ? ? ? ? 88 ASN A O 1 +ATOM 815 C CB . ASN A 1 88 ? -4.734 9.451 14.714 1.00 2.54 ? ? ? ? ? ? 88 ASN A CB 1 +ATOM 816 C CG . ASN A 1 88 ? -5.452 8.096 14.938 1.00 11.53 ? ? ? ? ? ? 88 ASN A CG 1 +ATOM 817 O OD1 . ASN A 1 88 ? -4.939 7.098 15.437 1.00 2.94 ? ? ? ? ? ? 88 ASN A OD1 1 +ATOM 818 N ND2 . ASN A 1 88 ? -6.728 8.083 14.558 1.00 12.71 ? ? ? ? ? ? 88 ASN A ND2 1 +ATOM 819 H H . ASN A 1 88 ? -2.520 8.580 15.694 1.00 15.00 ? ? ? ? ? ? 88 ASN A H 1 +ATOM 820 H HD21 . ASN A 1 88 ? -7.219 7.218 14.657 1.00 15.00 ? ? ? ? ? ? 88 ASN A HD21 1 +ATOM 821 H HD22 . ASN A 1 88 ? -7.217 8.883 14.213 1.00 15.00 ? ? ? ? ? ? 88 ASN A HD22 1 +ATOM 822 N N . LEU A 1 89 ? -5.100 9.142 17.928 1.00 9.42 ? ? ? ? ? ? 89 LEU A N 1 +ATOM 823 C CA . LEU A 1 89 ? -5.948 9.061 19.121 1.00 8.04 ? ? ? ? ? ? 89 LEU A CA 1 +ATOM 824 C C . LEU A 1 89 ? -5.240 9.372 20.426 1.00 5.83 ? ? ? ? ? ? 89 LEU A C 1 +ATOM 825 O O . LEU A 1 89 ? -5.720 10.079 21.282 1.00 11.22 ? ? ? ? ? ? 89 LEU A O 1 +ATOM 826 C CB . LEU A 1 89 ? -6.576 7.671 19.132 1.00 7.87 ? ? ? ? ? ? 89 LEU A CB 1 +ATOM 827 C CG . LEU A 1 89 ? -7.982 7.575 18.565 1.00 9.76 ? ? ? ? ? ? 89 LEU A CG 1 +ATOM 828 C CD1 . LEU A 1 89 ? -8.269 8.482 17.355 1.00 13.42 ? ? ? ? ? ? 89 LEU A CD1 1 +ATOM 829 C CD2 . LEU A 1 89 ? -8.334 6.110 18.331 1.00 14.63 ? ? ? ? ? ? 89 LEU A CD2 1 +ATOM 830 H H . LEU A 1 89 ? -4.531 8.374 17.626 1.00 15.00 ? ? ? ? ? ? 89 LEU A H 1 +ATOM 831 N N . LEU A 1 90 ? -4.014 8.888 20.545 1.00 8.10 ? ? ? ? ? ? 90 LEU A N 1 +ATOM 832 C CA . LEU A 1 90 ? -3.122 9.326 21.652 1.00 8.09 ? ? ? ? ? ? 90 LEU A CA 1 +ATOM 833 C C . LEU A 1 90 ? -2.996 10.851 21.908 1.00 8.64 ? ? ? ? ? ? 90 LEU A C 1 +ATOM 834 O O . LEU A 1 90 ? -2.902 11.395 23.005 1.00 9.47 ? ? ? ? ? ? 90 LEU A O 1 +ATOM 835 C CB . LEU A 1 90 ? -1.745 8.802 21.290 1.00 5.97 ? ? ? ? ? ? 90 LEU A CB 1 +ATOM 836 C CG . LEU A 1 90 ? -1.170 7.607 22.016 1.00 5.66 ? ? ? ? ? ? 90 LEU A CG 1 +ATOM 837 C CD1 . LEU A 1 90 ? -2.156 6.570 22.522 1.00 4.83 ? ? ? ? ? ? 90 LEU A CD1 1 +ATOM 838 C CD2 . LEU A 1 90 ? -0.167 6.990 21.060 1.00 7.12 ? ? ? ? ? ? 90 LEU A CD2 1 +ATOM 839 H H . LEU A 1 90 ? -3.704 8.240 19.846 1.00 15.00 ? ? ? ? ? ? 90 LEU A H 1 +ATOM 840 N N . THR A 1 91 ? -2.992 11.570 20.795 1.00 9.94 ? ? ? ? ? ? 91 THR A N 1 +ATOM 841 C CA . THR A 1 91 ? -3.029 13.029 20.978 1.00 8.71 ? ? ? ? ? ? 91 THR A CA 1 +ATOM 842 C C . THR A 1 91 ? -4.303 13.614 21.471 1.00 10.30 ? ? ? ? ? ? 91 THR A C 1 +ATOM 843 O O . THR A 1 91 ? -4.259 14.519 22.284 1.00 12.69 ? ? ? ? ? ? 91 THR A O 1 +ATOM 844 C CB . THR A 1 91 ? -2.729 13.810 19.729 1.00 10.12 ? ? ? ? ? ? 91 THR A CB 1 +ATOM 845 O OG1 . THR A 1 91 ? -3.546 13.334 18.654 1.00 9.03 ? ? ? ? ? ? 91 THR A OG1 1 +ATOM 846 C CG2 . THR A 1 91 ? -1.237 13.795 19.403 1.00 9.48 ? ? ? ? ? ? 91 THR A CG2 1 +ATOM 847 H H . THR A 1 91 ? -2.949 11.127 19.899 1.00 15.00 ? ? ? ? ? ? 91 THR A H 1 +ATOM 848 H HG1 . THR A 1 91 ? -3.051 12.631 18.233 1.00 15.00 ? ? ? ? ? ? 91 THR A HG1 1 +ATOM 849 N N . GLN A 1 92 ? -5.435 13.036 21.015 1.00 9.54 ? ? ? ? ? ? 92 GLN A N 1 +ATOM 850 C CA . GLN A 1 92 ? -6.739 13.425 21.614 1.00 8.56 ? ? ? ? ? ? 92 GLN A CA 1 +ATOM 851 C C . GLN A 1 92 ? -6.888 13.403 23.158 1.00 10.13 ? ? ? ? ? ? 92 GLN A C 1 +ATOM 852 O O . GLN A 1 92 ? -7.313 14.362 23.797 1.00 10.19 ? ? ? ? ? ? 92 GLN A O 1 +ATOM 853 C CB . GLN A 1 92 ? -7.901 12.683 20.934 1.00 7.14 ? ? ? ? ? ? 92 GLN A CB 1 +ATOM 854 C CG . GLN A 1 92 ? -8.079 13.162 19.471 1.00 4.88 ? ? ? ? ? ? 92 GLN A CG 1 +ATOM 855 C CD . GLN A 1 92 ? -9.409 12.689 18.959 1.00 4.56 ? ? ? ? ? ? 92 GLN A CD 1 +ATOM 856 O OE1 . GLN A 1 92 ? -10.324 12.409 19.699 1.00 14.03 ? ? ? ? ? ? 92 GLN A OE1 1 +ATOM 857 N NE2 . GLN A 1 92 ? -9.555 12.577 17.672 1.00 2.00 ? ? ? ? ? ? 92 GLN A NE2 1 +ATOM 858 H H . GLN A 1 92 ? -5.340 12.385 20.263 1.00 15.00 ? ? ? ? ? ? 92 GLN A H 1 +ATOM 859 H HE21 . GLN A 1 92 ? -10.464 12.281 17.383 1.00 15.00 ? ? ? ? ? ? 92 GLN A HE21 1 +ATOM 860 H HE22 . GLN A 1 92 ? -8.804 12.777 17.055 1.00 15.00 ? ? ? ? ? ? 92 GLN A HE22 1 +ATOM 861 N N . ILE A 1 93 ? -6.453 12.267 23.731 1.00 7.25 ? ? ? ? ? ? 93 ILE A N 1 +ATOM 862 C CA . ILE A 1 93 ? -6.483 12.101 25.195 1.00 7.07 ? ? ? ? ? ? 93 ILE A CA 1 +ATOM 863 C C . ILE A 1 93 ? -5.335 12.732 26.048 1.00 11.45 ? ? ? ? ? ? 93 ILE A C 1 +ATOM 864 O O . ILE A 1 93 ? -5.207 12.556 27.257 1.00 11.98 ? ? ? ? ? ? 93 ILE A O 1 +ATOM 865 C CB . ILE A 1 93 ? -6.643 10.599 25.548 1.00 8.30 ? ? ? ? ? ? 93 ILE A CB 1 +ATOM 866 C CG1 . ILE A 1 93 ? -5.341 9.820 25.286 1.00 5.63 ? ? ? ? ? ? 93 ILE A CG1 1 +ATOM 867 C CG2 . ILE A 1 93 ? -7.849 9.970 24.810 1.00 6.86 ? ? ? ? ? ? 93 ILE A CG2 1 +ATOM 868 C CD1 . ILE A 1 93 ? -5.437 8.344 25.642 1.00 6.01 ? ? ? ? ? ? 93 ILE A CD1 1 +ATOM 869 H H . ILE A 1 93 ? -6.167 11.548 23.098 1.00 15.00 ? ? ? ? ? ? 93 ILE A H 1 +ATOM 870 N N . GLY A 1 94 ? -4.464 13.486 25.366 1.00 10.82 ? ? ? ? ? ? 94 GLY A N 1 +ATOM 871 C CA . GLY A 1 94 ? -3.410 14.097 26.190 1.00 12.12 ? ? ? ? ? ? 94 GLY A CA 1 +ATOM 872 C C . GLY A 1 94 ? -2.050 13.371 26.432 1.00 15.12 ? ? ? ? ? ? 94 GLY A C 1 +ATOM 873 O O . GLY A 1 94 ? -1.236 13.833 27.223 1.00 17.26 ? ? ? ? ? ? 94 GLY A O 1 +ATOM 874 H H . GLY A 1 94 ? -4.588 13.678 24.392 1.00 15.00 ? ? ? ? ? ? 94 GLY A H 1 +ATOM 875 N N . CYS A 1 95 ? -1.790 12.267 25.687 1.00 14.55 ? ? ? ? ? ? 95 CYS A N 1 +ATOM 876 C CA . CYS A 1 95 ? -0.471 11.597 25.822 1.00 10.81 ? ? ? ? ? ? 95 CYS A CA 1 +ATOM 877 C C . CYS A 1 95 ? 0.838 12.258 25.319 1.00 11.73 ? ? ? ? ? ? 95 CYS A C 1 +ATOM 878 O O . CYS A 1 95 ? 0.949 12.839 24.228 1.00 13.70 ? ? ? ? ? ? 95 CYS A O 1 +ATOM 879 C CB . CYS A 1 95 ? -0.614 10.216 25.243 1.00 12.07 ? ? ? ? ? ? 95 CYS A CB 1 +ATOM 880 S SG . CYS A 1 95 ? 0.307 8.920 26.088 1.00 18.07 ? ? ? ? ? ? 95 CYS A SG 1 +ATOM 881 H H . CYS A 1 95 ? -2.463 12.031 24.988 1.00 15.00 ? ? ? ? ? ? 95 CYS A H 1 +ATOM 882 N N . THR A 1 96 ? 1.843 12.131 26.211 1.00 9.92 ? ? ? ? ? ? 96 THR A N 1 +ATOM 883 C CA . THR A 1 96 ? 3.255 12.544 26.016 1.00 6.70 ? ? ? ? ? ? 96 THR A CA 1 +ATOM 884 C C . THR A 1 96 ? 4.358 11.495 26.430 1.00 11.47 ? ? ? ? ? ? 96 THR A C 1 +ATOM 885 O O . THR A 1 96 ? 4.175 10.661 27.303 1.00 11.99 ? ? ? ? ? ? 96 THR A O 1 +ATOM 886 C CB . THR A 1 96 ? 3.572 13.884 26.732 1.00 3.18 ? ? ? ? ? ? 96 THR A CB 1 +ATOM 887 O OG1 . THR A 1 96 ? 3.422 13.782 28.136 1.00 2.00 ? ? ? ? ? ? 96 THR A OG1 1 +ATOM 888 C CG2 . THR A 1 96 ? 2.735 15.054 26.263 1.00 2.00 ? ? ? ? ? ? 96 THR A CG2 1 +ATOM 889 H H . THR A 1 96 ? 1.543 11.752 27.094 1.00 15.00 ? ? ? ? ? ? 96 THR A H 1 +ATOM 890 H HG1 . THR A 1 96 ? 3.325 14.669 28.470 1.00 15.00 ? ? ? ? ? ? 96 THR A HG1 1 +ATOM 891 N N . LEU A 1 97 ? 5.544 11.562 25.769 1.00 13.36 ? ? ? ? ? ? 97 LEU A N 1 +ATOM 892 C CA . LEU A 1 97 ? 6.781 10.866 26.209 1.00 11.73 ? ? ? ? ? ? 97 LEU A CA 1 +ATOM 893 C C . LEU A 1 97 ? 7.766 11.692 27.122 1.00 12.03 ? ? ? ? ? ? 97 LEU A C 1 +ATOM 894 O O . LEU A 1 97 ? 8.091 12.842 26.868 1.00 13.10 ? ? ? ? ? ? 97 LEU A O 1 +ATOM 895 C CB . LEU A 1 97 ? 7.510 10.366 24.941 1.00 12.45 ? ? ? ? ? ? 97 LEU A CB 1 +ATOM 896 C CG . LEU A 1 97 ? 7.614 8.852 24.580 1.00 12.27 ? ? ? ? ? ? 97 LEU A CG 1 +ATOM 897 C CD1 . LEU A 1 97 ? 6.313 8.199 24.173 1.00 13.18 ? ? ? ? ? ? 97 LEU A CD1 1 +ATOM 898 C CD2 . LEU A 1 97 ? 8.468 8.621 23.357 1.00 9.86 ? ? ? ? ? ? 97 LEU A CD2 1 +ATOM 899 H H . LEU A 1 97 ? 5.576 12.235 25.027 1.00 15.00 ? ? ? ? ? ? 97 LEU A H 1 +ATOM 900 N N . ASN A 1 98 ? 8.241 11.095 28.216 1.00 12.12 ? ? ? ? ? ? 98 ASN A N 1 +ATOM 901 C CA . ASN A 1 98 ? 9.072 11.924 29.137 1.00 14.38 ? ? ? ? ? ? 98 ASN A CA 1 +ATOM 902 C C . ASN A 1 98 ? 10.351 11.322 29.763 1.00 14.68 ? ? ? ? ? ? 98 ASN A C 1 +ATOM 903 O O . ASN A 1 98 ? 10.298 10.201 30.258 1.00 16.20 ? ? ? ? ? ? 98 ASN A O 1 +ATOM 904 C CB . ASN A 1 98 ? 8.278 12.403 30.337 1.00 15.85 ? ? ? ? ? ? 98 ASN A CB 1 +ATOM 905 C CG . ASN A 1 98 ? 7.192 13.386 29.979 1.00 18.15 ? ? ? ? ? ? 98 ASN A CG 1 +ATOM 906 O OD1 . ASN A 1 98 ? 7.427 14.537 29.659 1.00 17.39 ? ? ? ? ? ? 98 ASN A OD1 1 +ATOM 907 N ND2 . ASN A 1 98 ? 5.958 12.904 30.073 1.00 16.74 ? ? ? ? ? ? 98 ASN A ND2 1 +ATOM 908 H H . ASN A 1 98 ? 7.900 10.180 28.444 1.00 15.00 ? ? ? ? ? ? 98 ASN A H 1 +ATOM 909 H HD21 . ASN A 1 98 ? 5.269 13.561 29.783 1.00 15.00 ? ? ? ? ? ? 98 ASN A HD21 1 +ATOM 910 H HD22 . ASN A 1 98 ? 5.737 11.995 30.424 1.00 15.00 ? ? ? ? ? ? 98 ASN A HD22 1 +ATOM 911 N N . PHE A 1 99 ? 11.434 12.148 29.720 1.00 17.67 ? ? ? ? ? ? 99 PHE A N 1 +ATOM 912 C CA . PHE A 1 99 ? 12.828 12.065 30.252 1.00 12.46 ? ? ? ? ? ? 99 PHE A CA 1 +ATOM 913 C C . PHE A 1 99 ? 13.520 13.457 30.096 1.00 7.09 ? ? ? ? ? ? 99 PHE A C 1 +ATOM 914 O O . PHE A 1 99 ? 14.655 13.569 29.636 0.00 8.50 ? ? ? ? ? ? 99 PHE A O 1 +ATOM 915 C CB . PHE A 1 99 ? 13.592 10.871 29.623 1.00 7.80 ? ? ? ? ? ? 99 PHE A CB 1 +ATOM 916 C CG . PHE A 1 99 ? 13.829 11.100 28.161 1.00 5.94 ? ? ? ? ? ? 99 PHE A CG 1 +ATOM 917 C CD1 . PHE A 1 99 ? 12.760 11.001 27.249 1.00 12.70 ? ? ? ? ? ? 99 PHE A CD1 1 +ATOM 918 C CD2 . PHE A 1 99 ? 15.119 11.457 27.715 1.00 10.34 ? ? ? ? ? ? 99 PHE A CD2 1 +ATOM 919 C CE1 . PHE A 1 99 ? 12.961 11.344 25.896 1.00 13.79 ? ? ? ? ? ? 99 PHE A CE1 1 +ATOM 920 C CE2 . PHE A 1 99 ? 15.334 11.813 26.366 1.00 13.69 ? ? ? ? ? ? 99 PHE A CE2 1 +ATOM 921 C CZ . PHE A 1 99 ? 14.238 11.793 25.477 1.00 16.36 ? ? ? ? ? ? 99 PHE A CZ 1 +ATOM 922 O OXT . PHE A 1 99 ? 12.893 14.487 30.349 0.00 8.50 ? ? ? ? ? ? 99 PHE A OXT 1 +ATOM 923 H H . PHE A 1 99 ? 11.228 13.069 29.393 1.00 15.00 ? ? ? ? ? ? 99 PHE A H 1 +ATOM 924 N N . PRO B 1 1 ? 13.587 15.375 28.006 1.00 37.18 ? ? ? ? ? ? 1 PRO B N 1 +ATOM 925 C CA . PRO B 1 1 ? 12.429 15.782 27.190 1.00 32.66 ? ? ? ? ? ? 1 PRO B CA 1 +ATOM 926 C C . PRO B 1 1 ? 11.058 15.893 27.827 1.00 30.70 ? ? ? ? ? ? 1 PRO B C 1 +ATOM 927 O O . PRO B 1 1 ? 10.652 14.934 28.450 1.00 33.19 ? ? ? ? ? ? 1 PRO B O 1 +ATOM 928 C CB . PRO B 1 1 ? 12.884 16.920 26.297 1.00 32.98 ? ? ? ? ? ? 1 PRO B CB 1 +ATOM 929 C CG . PRO B 1 1 ? 14.194 16.250 25.886 1.00 37.01 ? ? ? ? ? ? 1 PRO B CG 1 +ATOM 930 C CD . PRO B 1 1 ? 14.771 15.729 27.210 1.00 37.71 ? ? ? ? ? ? 1 PRO B CD 1 +ATOM 931 H H2 . PRO B 1 1 ? 13.592 15.705 29.002 0.00 0.00 ? ? ? ? ? ? 1 PRO B H2 1 +ATOM 932 H H3 . PRO B 1 1 ? 13.613 14.354 28.265 0.00 0.00 ? ? ? ? ? ? 1 PRO B H3 1 +ATOM 933 N N . GLN B 1 2 ? 10.289 16.963 27.520 1.00 25.28 ? ? ? ? ? ? 2 GLN B N 1 +ATOM 934 C CA . GLN B 1 2 ? 8.951 16.454 27.183 1.00 22.03 ? ? ? ? ? ? 2 GLN B CA 1 +ATOM 935 C C . GLN B 1 2 ? 8.735 16.286 25.690 1.00 18.15 ? ? ? ? ? ? 2 GLN B C 1 +ATOM 936 O O . GLN B 1 2 ? 9.066 17.182 24.944 1.00 19.19 ? ? ? ? ? ? 2 GLN B O 1 +ATOM 937 C CB . GLN B 1 2 ? 7.858 17.317 27.754 1.00 24.59 ? ? ? ? ? ? 2 GLN B CB 1 +ATOM 938 C CG . GLN B 1 2 ? 6.487 16.636 27.780 1.00 21.41 ? ? ? ? ? ? 2 GLN B CG 1 +ATOM 939 C CD . GLN B 1 2 ? 5.550 17.497 28.592 1.00 23.66 ? ? ? ? ? ? 2 GLN B CD 1 +ATOM 940 O OE1 . GLN B 1 2 ? 5.147 17.232 29.715 1.00 17.87 ? ? ? ? ? ? 2 GLN B OE1 1 +ATOM 941 N NE2 . GLN B 1 2 ? 5.195 18.607 27.947 1.00 25.77 ? ? ? ? ? ? 2 GLN B NE2 1 +ATOM 942 H H . GLN B 1 2 ? 10.602 17.852 27.198 1.00 15.00 ? ? ? ? ? ? 2 GLN B H 1 +ATOM 943 H HE21 . GLN B 1 2 ? 4.611 19.180 28.515 1.00 15.00 ? ? ? ? ? ? 2 GLN B HE21 1 +ATOM 944 H HE22 . GLN B 1 2 ? 5.499 18.821 27.027 1.00 15.00 ? ? ? ? ? ? 2 GLN B HE22 1 +ATOM 945 N N . ILE B 1 3 ? 8.226 15.125 25.284 1.00 14.61 ? ? ? ? ? ? 3 ILE B N 1 +ATOM 946 C CA . ILE B 1 3 ? 8.003 14.894 23.853 1.00 14.42 ? ? ? ? ? ? 3 ILE B CA 1 +ATOM 947 C C . ILE B 1 3 ? 6.521 14.704 23.440 1.00 14.49 ? ? ? ? ? ? 3 ILE B C 1 +ATOM 948 O O . ILE B 1 3 ? 5.843 13.739 23.782 1.00 11.98 ? ? ? ? ? ? 3 ILE B O 1 +ATOM 949 C CB . ILE B 1 3 ? 8.908 13.730 23.358 1.00 15.82 ? ? ? ? ? ? 3 ILE B CB 1 +ATOM 950 C CG1 . ILE B 1 3 ? 10.386 13.948 23.707 1.00 17.70 ? ? ? ? ? ? 3 ILE B CG1 1 +ATOM 951 C CG2 . ILE B 1 3 ? 8.805 13.509 21.839 1.00 13.84 ? ? ? ? ? ? 3 ILE B CG2 1 +ATOM 952 C CD1 . ILE B 1 3 ? 11.258 12.860 23.102 1.00 16.91 ? ? ? ? ? ? 3 ILE B CD1 1 +ATOM 953 H H . ILE B 1 3 ? 8.033 14.449 25.996 1.00 15.00 ? ? ? ? ? ? 3 ILE B H 1 +ATOM 954 N N . THR B 1 4 ? 6.007 15.694 22.684 1.00 13.06 ? ? ? ? ? ? 4 THR B N 1 +ATOM 955 C CA . THR B 1 4 ? 4.637 15.475 22.179 1.00 11.34 ? ? ? ? ? ? 4 THR B CA 1 +ATOM 956 C C . THR B 1 4 ? 4.485 14.733 20.868 1.00 14.26 ? ? ? ? ? ? 4 THR B C 1 +ATOM 957 O O . THR B 1 4 ? 5.391 14.603 20.050 1.00 17.92 ? ? ? ? ? ? 4 THR B O 1 +ATOM 958 C CB . THR B 1 4 ? 3.842 16.757 21.981 1.00 12.43 ? ? ? ? ? ? 4 THR B CB 1 +ATOM 959 O OG1 . THR B 1 4 ? 4.477 17.558 20.973 1.00 16.86 ? ? ? ? ? ? 4 THR B OG1 1 +ATOM 960 C CG2 . THR B 1 4 ? 3.616 17.532 23.278 1.00 9.78 ? ? ? ? ? ? 4 THR B CG2 1 +ATOM 961 H H . THR B 1 4 ? 6.612 16.409 22.331 1.00 15.00 ? ? ? ? ? ? 4 THR B H 1 +ATOM 962 H HG1 . THR B 1 4 ? 4.039 18.402 20.956 1.00 15.00 ? ? ? ? ? ? 4 THR B HG1 1 +ATOM 963 N N . LEU B 1 5 ? 3.243 14.257 20.693 1.00 12.93 ? ? ? ? ? ? 5 LEU B N 1 +ATOM 964 C CA . LEU B 1 5 ? 2.994 13.361 19.550 1.00 10.05 ? ? ? ? ? ? 5 LEU B CA 1 +ATOM 965 C C . LEU B 1 5 ? 2.303 13.904 18.292 1.00 10.74 ? ? ? ? ? ? 5 LEU B C 1 +ATOM 966 O O . LEU B 1 5 ? 1.831 13.156 17.450 1.00 13.05 ? ? ? ? ? ? 5 LEU B O 1 +ATOM 967 C CB . LEU B 1 5 ? 2.233 12.124 20.046 1.00 12.05 ? ? ? ? ? ? 5 LEU B CB 1 +ATOM 968 C CG . LEU B 1 5 ? 2.952 11.008 20.841 1.00 12.23 ? ? ? ? ? ? 5 LEU B CG 1 +ATOM 969 C CD1 . LEU B 1 5 ? 4.489 11.031 20.848 1.00 11.19 ? ? ? ? ? ? 5 LEU B CD1 1 +ATOM 970 C CD2 . LEU B 1 5 ? 2.307 10.783 22.180 1.00 2.39 ? ? ? ? ? ? 5 LEU B CD2 1 +ATOM 971 H H . LEU B 1 5 ? 2.596 14.322 21.450 1.00 15.00 ? ? ? ? ? ? 5 LEU B H 1 +ATOM 972 N N . TRP B 1 6 ? 2.245 15.249 18.159 1.00 10.83 ? ? ? ? ? ? 6 TRP B N 1 +ATOM 973 C CA . TRP B 1 6 ? 1.758 15.805 16.880 1.00 8.95 ? ? ? ? ? ? 6 TRP B CA 1 +ATOM 974 C C . TRP B 1 6 ? 2.538 15.367 15.646 1.00 11.86 ? ? ? ? ? ? 6 TRP B C 1 +ATOM 975 O O . TRP B 1 6 ? 2.017 15.148 14.562 1.00 13.20 ? ? ? ? ? ? 6 TRP B O 1 +ATOM 976 C CB . TRP B 1 6 ? 1.831 17.332 16.775 1.00 9.49 ? ? ? ? ? ? 6 TRP B CB 1 +ATOM 977 C CG . TRP B 1 6 ? 1.039 18.078 17.808 1.00 7.19 ? ? ? ? ? ? 6 TRP B CG 1 +ATOM 978 C CD1 . TRP B 1 6 ? 1.619 18.811 18.841 1.00 9.16 ? ? ? ? ? ? 6 TRP B CD1 1 +ATOM 979 C CD2 . TRP B 1 6 ? -0.391 18.196 18.006 1.00 14.14 ? ? ? ? ? ? 6 TRP B CD2 1 +ATOM 980 N NE1 . TRP B 1 6 ? 0.692 19.339 19.659 1.00 7.62 ? ? ? ? ? ? 6 TRP B NE1 1 +ATOM 981 C CE2 . TRP B 1 6 ? -0.576 18.983 19.193 1.00 13.41 ? ? ? ? ? ? 6 TRP B CE2 1 +ATOM 982 C CE3 . TRP B 1 6 ? -1.528 17.737 17.295 1.00 16.58 ? ? ? ? ? ? 6 TRP B CE3 1 +ATOM 983 C CZ2 . TRP B 1 6 ? -1.887 19.274 19.659 1.00 10.89 ? ? ? ? ? ? 6 TRP B CZ2 1 +ATOM 984 C CZ3 . TRP B 1 6 ? -2.827 18.052 17.761 1.00 19.55 ? ? ? ? ? ? 6 TRP B CZ3 1 +ATOM 985 C CH2 . TRP B 1 6 ? -3.008 18.805 18.945 1.00 12.82 ? ? ? ? ? ? 6 TRP B CH2 1 +ATOM 986 H H . TRP B 1 6 ? 2.645 15.799 18.887 1.00 15.00 ? ? ? ? ? ? 6 TRP B H 1 +ATOM 987 H HE1 . TRP B 1 6 ? 0.877 19.912 20.438 1.00 15.00 ? ? ? ? ? ? 6 TRP B HE1 1 +ATOM 988 N N . LYS B 1 7 ? 3.857 15.254 15.865 1.00 15.08 ? ? ? ? ? ? 7 LYS B N 1 +ATOM 989 C CA . LYS B 1 7 ? 4.567 14.402 14.905 1.00 14.05 ? ? ? ? ? ? 7 LYS B CA 1 +ATOM 990 C C . LYS B 1 7 ? 5.265 13.130 15.437 1.00 10.87 ? ? ? ? ? ? 7 LYS B C 1 +ATOM 991 O O . LYS B 1 7 ? 5.190 12.773 16.605 1.00 8.04 ? ? ? ? ? ? 7 LYS B O 1 +ATOM 992 C CB . LYS B 1 7 ? 5.382 15.210 13.864 1.00 12.97 ? ? ? ? ? ? 7 LYS B CB 1 +ATOM 993 C CG . LYS B 1 7 ? 5.922 16.586 14.221 1.00 18.22 ? ? ? ? ? ? 7 LYS B CG 1 +ATOM 994 C CD . LYS B 1 7 ? 7.141 16.570 15.157 1.00 29.42 ? ? ? ? ? ? 7 LYS B CD 1 +ATOM 995 C CE . LYS B 1 7 ? 7.808 17.956 15.399 1.00 36.49 ? ? ? ? ? ? 7 LYS B CE 1 +ATOM 996 N NZ . LYS B 1 7 ? 8.467 18.487 14.174 1.00 41.16 ? ? ? ? ? ? 7 LYS B NZ 1 +ATOM 997 H H . LYS B 1 7 ? 4.258 15.573 16.719 1.00 15.00 ? ? ? ? ? ? 7 LYS B H 1 +ATOM 998 H HZ1 . LYS B 1 7 ? 9.010 17.725 13.719 1.00 15.00 ? ? ? ? ? ? 7 LYS B HZ1 1 +ATOM 999 H HZ2 . LYS B 1 7 ? 7.743 18.839 13.515 1.00 15.00 ? ? ? ? ? ? 7 LYS B HZ2 1 +ATOM 1000 H HZ3 . LYS B 1 7 ? 9.106 19.267 14.430 1.00 15.00 ? ? ? ? ? ? 7 LYS B HZ3 1 +ATOM 1001 N N . ARG B 1 8 ? 5.941 12.438 14.502 1.00 7.83 ? ? ? ? ? ? 8 ARG B N 1 +ATOM 1002 C CA . ARG B 1 8 ? 6.757 11.289 14.910 1.00 6.01 ? ? ? ? ? ? 8 ARG B CA 1 +ATOM 1003 C C . ARG B 1 8 ? 7.864 11.650 15.893 1.00 5.22 ? ? ? ? ? ? 8 ARG B C 1 +ATOM 1004 O O . ARG B 1 8 ? 8.538 12.670 15.755 1.00 2.00 ? ? ? ? ? ? 8 ARG B O 1 +ATOM 1005 C CB . ARG B 1 8 ? 7.392 10.626 13.672 1.00 8.34 ? ? ? ? ? ? 8 ARG B CB 1 +ATOM 1006 C CG . ARG B 1 8 ? 6.440 9.877 12.721 1.00 7.25 ? ? ? ? ? ? 8 ARG B CG 1 +ATOM 1007 C CD . ARG B 1 8 ? 7.149 9.217 11.559 1.00 4.59 ? ? ? ? ? ? 8 ARG B CD 1 +ATOM 1008 N NE . ARG B 1 8 ? 6.209 8.432 10.750 1.00 14.38 ? ? ? ? ? ? 8 ARG B NE 1 +ATOM 1009 C CZ . ARG B 1 8 ? 6.611 7.669 9.688 1.00 15.55 ? ? ? ? ? ? 8 ARG B CZ 1 +ATOM 1010 N NH1 . ARG B 1 8 ? 7.894 7.559 9.332 1.00 16.70 ? ? ? ? ? ? 8 ARG B NH1 1 +ATOM 1011 N NH2 . ARG B 1 8 ? 5.699 7.025 8.965 1.00 18.53 ? ? ? ? ? ? 8 ARG B NH2 1 +ATOM 1012 H H . ARG B 1 8 ? 5.902 12.755 13.558 1.00 15.00 ? ? ? ? ? ? 8 ARG B H 1 +ATOM 1013 H HE . ARG B 1 8 ? 5.228 8.480 10.936 1.00 15.00 ? ? ? ? ? ? 8 ARG B HE 1 +ATOM 1014 H HH11 . ARG B 1 8 ? 8.599 8.035 9.858 1.00 15.00 ? ? ? ? ? ? 8 ARG B HH11 1 +ATOM 1015 H HH12 . ARG B 1 8 ? 8.151 7.003 8.542 1.00 15.00 ? ? ? ? ? ? 8 ARG B HH12 1 +ATOM 1016 H HH21 . ARG B 1 8 ? 4.729 7.091 9.197 1.00 15.00 ? ? ? ? ? ? 8 ARG B HH21 1 +ATOM 1017 H HH22 . ARG B 1 8 ? 5.993 6.478 8.181 1.00 15.00 ? ? ? ? ? ? 8 ARG B HH22 1 +ATOM 1018 N N . PRO B 1 9 ? 8.052 10.777 16.909 1.00 7.39 ? ? ? ? ? ? 9 PRO B N 1 +ATOM 1019 C CA . PRO B 1 9 ? 9.075 11.107 17.923 1.00 8.37 ? ? ? ? ? ? 9 PRO B CA 1 +ATOM 1020 C C . PRO B 1 9 ? 10.507 10.656 17.556 1.00 5.80 ? ? ? ? ? ? 9 PRO B C 1 +ATOM 1021 O O . PRO B 1 9 ? 11.032 9.686 18.101 1.00 5.48 ? ? ? ? ? ? 9 PRO B O 1 +ATOM 1022 C CB . PRO B 1 9 ? 8.443 10.425 19.155 1.00 6.26 ? ? ? ? ? ? 9 PRO B CB 1 +ATOM 1023 C CG . PRO B 1 9 ? 7.757 9.168 18.601 1.00 3.24 ? ? ? ? ? ? 9 PRO B CG 1 +ATOM 1024 C CD . PRO B 1 9 ? 7.280 9.572 17.223 1.00 5.14 ? ? ? ? ? ? 9 PRO B CD 1 +ATOM 1025 N N . LEU B 1 10 ? 11.099 11.404 16.586 1.00 6.45 ? ? ? ? ? ? 10 LEU B N 1 +ATOM 1026 C CA . LEU B 1 10 ? 12.530 11.236 16.151 1.00 10.46 ? ? ? ? ? ? 10 LEU B CA 1 +ATOM 1027 C C . LEU B 1 10 ? 13.651 11.856 17.014 1.00 10.72 ? ? ? ? ? ? 10 LEU B C 1 +ATOM 1028 O O . LEU B 1 10 ? 13.723 13.054 17.210 1.00 11.17 ? ? ? ? ? ? 10 LEU B O 1 +ATOM 1029 C CB . LEU B 1 10 ? 12.878 11.732 14.743 1.00 7.46 ? ? ? ? ? ? 10 LEU B CB 1 +ATOM 1030 C CG . LEU B 1 10 ? 12.299 10.972 13.559 1.00 16.13 ? ? ? ? ? ? 10 LEU B CG 1 +ATOM 1031 C CD1 . LEU B 1 10 ? 12.546 9.461 13.564 1.00 18.86 ? ? ? ? ? ? 10 LEU B CD1 1 +ATOM 1032 C CD2 . LEU B 1 10 ? 10.829 11.269 13.370 1.00 23.21 ? ? ? ? ? ? 10 LEU B CD2 1 +ATOM 1033 H H . LEU B 1 10 ? 10.550 12.178 16.265 1.00 15.00 ? ? ? ? ? ? 10 LEU B H 1 +ATOM 1034 N N . VAL B 1 11 ? 14.543 11.008 17.521 1.00 12.29 ? ? ? ? ? ? 11 VAL B N 1 +ATOM 1035 C CA . VAL B 1 11 ? 15.734 11.566 18.162 1.00 12.15 ? ? ? ? ? ? 11 VAL B CA 1 +ATOM 1036 C C . VAL B 1 11 ? 17.039 11.269 17.422 1.00 14.43 ? ? ? ? ? ? 11 VAL B C 1 +ATOM 1037 O O . VAL B 1 11 ? 17.126 10.470 16.493 1.00 10.98 ? ? ? ? ? ? 11 VAL B O 1 +ATOM 1038 C CB . VAL B 1 11 ? 15.825 11.155 19.642 1.00 14.58 ? ? ? ? ? ? 11 VAL B CB 1 +ATOM 1039 C CG1 . VAL B 1 11 ? 14.809 11.938 20.469 1.00 18.20 ? ? ? ? ? ? 11 VAL B CG1 1 +ATOM 1040 C CG2 . VAL B 1 11 ? 15.703 9.641 19.871 1.00 11.13 ? ? ? ? ? ? 11 VAL B CG2 1 +ATOM 1041 H H . VAL B 1 11 ? 14.370 10.032 17.437 1.00 15.00 ? ? ? ? ? ? 11 VAL B H 1 +ATOM 1042 N N . THR B 1 12 ? 18.082 11.970 17.903 1.00 17.32 ? ? ? ? ? ? 12 THR B N 1 +ATOM 1043 C CA . THR B 1 12 ? 19.472 11.559 17.587 1.00 16.89 ? ? ? ? ? ? 12 THR B CA 1 +ATOM 1044 C C . THR B 1 12 ? 20.117 10.551 18.529 1.00 15.64 ? ? ? ? ? ? 12 THR B C 1 +ATOM 1045 O O . THR B 1 12 ? 20.067 10.620 19.752 1.00 17.75 ? ? ? ? ? ? 12 THR B O 1 +ATOM 1046 C CB . THR B 1 12 ? 20.414 12.758 17.462 1.00 18.04 ? ? ? ? ? ? 12 THR B CB 1 +ATOM 1047 O OG1 . THR B 1 12 ? 20.038 13.533 16.308 1.00 21.81 ? ? ? ? ? ? 12 THR B OG1 1 +ATOM 1048 C CG2 . THR B 1 12 ? 21.917 12.400 17.404 1.00 18.90 ? ? ? ? ? ? 12 THR B CG2 1 +ATOM 1049 H H . THR B 1 12 ? 17.865 12.659 18.592 1.00 15.00 ? ? ? ? ? ? 12 THR B H 1 +ATOM 1050 H HG1 . THR B 1 12 ? 19.091 13.514 16.241 1.00 15.00 ? ? ? ? ? ? 12 THR B HG1 1 +ATOM 1051 N N . ILE B 1 13 ? 20.736 9.600 17.861 1.00 15.87 ? ? ? ? ? ? 13 ILE B N 1 +ATOM 1052 C CA . ILE B 1 13 ? 21.551 8.582 18.500 1.00 18.13 ? ? ? ? ? ? 13 ILE B CA 1 +ATOM 1053 C C . ILE B 1 13 ? 22.966 8.447 17.862 1.00 20.14 ? ? ? ? ? ? 13 ILE B C 1 +ATOM 1054 O O . ILE B 1 13 ? 23.155 8.590 16.653 1.00 22.93 ? ? ? ? ? ? 13 ILE B O 1 +ATOM 1055 C CB . ILE B 1 13 ? 20.781 7.241 18.489 1.00 16.33 ? ? ? ? ? ? 13 ILE B CB 1 +ATOM 1056 C CG1 . ILE B 1 13 ? 20.778 6.658 17.067 1.00 14.28 ? ? ? ? ? ? 13 ILE B CG1 1 +ATOM 1057 C CG2 . ILE B 1 13 ? 19.348 7.415 19.043 1.00 7.89 ? ? ? ? ? ? 13 ILE B CG2 1 +ATOM 1058 C CD1 . ILE B 1 13 ? 20.940 5.139 17.014 1.00 14.30 ? ? ? ? ? ? 13 ILE B CD1 1 +ATOM 1059 H H . ILE B 1 13 ? 20.664 9.631 16.862 1.00 15.00 ? ? ? ? ? ? 13 ILE B H 1 +ATOM 1060 N N . ARG B 1 14 ? 23.937 8.152 18.748 1.00 18.38 ? ? ? ? ? ? 14 ARG B N 1 +ATOM 1061 C CA . ARG B 1 14 ? 25.293 7.749 18.339 1.00 18.22 ? ? ? ? ? ? 14 ARG B CA 1 +ATOM 1062 C C . ARG B 1 14 ? 25.746 6.328 18.747 1.00 19.03 ? ? ? ? ? ? 14 ARG B C 1 +ATOM 1063 O O . ARG B 1 14 ? 25.735 5.918 19.912 1.00 17.41 ? ? ? ? ? ? 14 ARG B O 1 +ATOM 1064 C CB . ARG B 1 14 ? 26.312 8.748 18.855 1.00 20.63 ? ? ? ? ? ? 14 ARG B CB 1 +ATOM 1065 C CG . ARG B 1 14 ? 25.921 10.196 18.572 1.00 19.56 ? ? ? ? ? ? 14 ARG B CG 1 +ATOM 1066 C CD . ARG B 1 14 ? 26.878 11.184 19.231 1.00 17.96 ? ? ? ? ? ? 14 ARG B CD 1 +ATOM 1067 N NE . ARG B 1 14 ? 26.288 12.520 19.271 1.00 18.75 ? ? ? ? ? ? 14 ARG B NE 1 +ATOM 1068 C CZ . ARG B 1 14 ? 26.489 13.396 18.267 1.00 17.61 ? ? ? ? ? ? 14 ARG B CZ 1 +ATOM 1069 N NH1 . ARG B 1 14 ? 27.340 13.131 17.281 1.00 21.18 ? ? ? ? ? ? 14 ARG B NH1 1 +ATOM 1070 N NH2 . ARG B 1 14 ? 25.818 14.542 18.261 1.00 13.12 ? ? ? ? ? ? 14 ARG B NH2 1 +ATOM 1071 H H . ARG B 1 14 ? 23.666 8.180 19.703 1.00 15.00 ? ? ? ? ? ? 14 ARG B H 1 +ATOM 1072 H HE . ARG B 1 14 ? 25.645 12.762 19.997 1.00 15.00 ? ? ? ? ? ? 14 ARG B HE 1 +ATOM 1073 H HH11 . ARG B 1 14 ? 27.865 12.281 17.269 1.00 15.00 ? ? ? ? ? ? 14 ARG B HH11 1 +ATOM 1074 H HH12 . ARG B 1 14 ? 27.463 13.799 16.546 1.00 15.00 ? ? ? ? ? ? 14 ARG B HH12 1 +ATOM 1075 H HH21 . ARG B 1 14 ? 25.170 14.740 18.995 1.00 15.00 ? ? ? ? ? ? 14 ARG B HH21 1 +ATOM 1076 H HH22 . ARG B 1 14 ? 25.958 15.206 17.525 1.00 15.00 ? ? ? ? ? ? 14 ARG B HH22 1 +ATOM 1077 N N . ILE B 1 15 ? 26.136 5.587 17.692 1.00 19.14 ? ? ? ? ? ? 15 ILE B N 1 +ATOM 1078 C CA . ILE B 1 15 ? 26.675 4.223 17.875 1.00 20.97 ? ? ? ? ? ? 15 ILE B CA 1 +ATOM 1079 C C . ILE B 1 15 ? 27.990 4.067 17.116 1.00 21.93 ? ? ? ? ? ? 15 ILE B C 1 +ATOM 1080 O O . ILE B 1 15 ? 28.096 4.437 15.946 1.00 21.67 ? ? ? ? ? ? 15 ILE B O 1 +ATOM 1081 C CB . ILE B 1 15 ? 25.761 3.081 17.346 1.00 21.14 ? ? ? ? ? ? 15 ILE B CB 1 +ATOM 1082 C CG1 . ILE B 1 15 ? 24.325 3.432 17.085 1.00 19.78 ? ? ? ? ? ? 15 ILE B CG1 1 +ATOM 1083 C CG2 . ILE B 1 15 ? 25.817 1.794 18.173 1.00 21.67 ? ? ? ? ? ? 15 ILE B CG2 1 +ATOM 1084 C CD1 . ILE B 1 15 ? 24.119 3.521 15.577 1.00 18.76 ? ? ? ? ? ? 15 ILE B CD1 1 +ATOM 1085 H H . ILE B 1 15 ? 26.065 6.047 16.803 1.00 15.00 ? ? ? ? ? ? 15 ILE B H 1 +ATOM 1086 N N . GLY B 1 16 ? 29.000 3.497 17.790 1.00 22.82 ? ? ? ? ? ? 16 GLY B N 1 +ATOM 1087 C CA . GLY B 1 16 ? 30.321 3.473 17.114 1.00 22.20 ? ? ? ? ? ? 16 GLY B CA 1 +ATOM 1088 C C . GLY B 1 16 ? 30.974 4.847 17.146 1.00 20.60 ? ? ? ? ? ? 16 GLY B C 1 +ATOM 1089 O O . GLY B 1 16 ? 30.938 5.546 18.147 1.00 25.71 ? ? ? ? ? ? 16 GLY B O 1 +ATOM 1090 H H . GLY B 1 16 ? 28.857 3.297 18.757 1.00 15.00 ? ? ? ? ? ? 16 GLY B H 1 +ATOM 1091 N N . GLY B 1 17 ? 31.437 5.279 15.994 1.00 18.01 ? ? ? ? ? ? 17 GLY B N 1 +ATOM 1092 C CA . GLY B 1 17 ? 31.429 6.751 15.988 1.00 19.32 ? ? ? ? ? ? 17 GLY B CA 1 +ATOM 1093 C C . GLY B 1 17 ? 30.339 7.400 15.110 1.00 23.21 ? ? ? ? ? ? 17 GLY B C 1 +ATOM 1094 O O . GLY B 1 17 ? 30.460 8.495 14.576 1.00 26.58 ? ? ? ? ? ? 17 GLY B O 1 +ATOM 1095 H H . GLY B 1 17 ? 31.595 4.698 15.200 1.00 15.00 ? ? ? ? ? ? 17 GLY B H 1 +ATOM 1096 N N . GLN B 1 18 ? 29.259 6.628 14.888 1.00 22.56 ? ? ? ? ? ? 18 GLN B N 1 +ATOM 1097 C CA . GLN B 1 18 ? 28.208 7.031 13.936 1.00 16.21 ? ? ? ? ? ? 18 GLN B CA 1 +ATOM 1098 C C . GLN B 1 18 ? 27.054 7.865 14.457 1.00 12.18 ? ? ? ? ? ? 18 GLN B C 1 +ATOM 1099 O O . GLN B 1 18 ? 26.491 7.608 15.509 1.00 9.33 ? ? ? ? ? ? 18 GLN B O 1 +ATOM 1100 C CB . GLN B 1 18 ? 27.677 5.814 13.157 1.00 18.45 ? ? ? ? ? ? 18 GLN B CB 1 +ATOM 1101 C CG . GLN B 1 18 ? 28.711 4.969 12.407 1.00 21.83 ? ? ? ? ? ? 18 GLN B CG 1 +ATOM 1102 C CD . GLN B 1 18 ? 29.484 5.767 11.340 1.00 31.86 ? ? ? ? ? ? 18 GLN B CD 1 +ATOM 1103 O OE1 . GLN B 1 18 ? 29.459 5.507 10.154 1.00 36.21 ? ? ? ? ? ? 18 GLN B OE1 1 +ATOM 1104 N NE2 . GLN B 1 18 ? 30.265 6.751 11.750 1.00 38.63 ? ? ? ? ? ? 18 GLN B NE2 1 +ATOM 1105 H H . GLN B 1 18 ? 29.143 5.839 15.481 1.00 15.00 ? ? ? ? ? ? 18 GLN B H 1 +ATOM 1106 H HE21 . GLN B 1 18 ? 30.753 7.166 10.988 1.00 15.00 ? ? ? ? ? ? 18 GLN B HE21 1 +ATOM 1107 H HE22 . GLN B 1 18 ? 30.409 7.077 12.678 1.00 15.00 ? ? ? ? ? ? 18 GLN B HE22 1 +ATOM 1108 N N . LEU B 1 19 ? 26.724 8.863 13.624 1.00 11.59 ? ? ? ? ? ? 19 LEU B N 1 +ATOM 1109 C CA . LEU B 1 19 ? 25.504 9.664 13.853 1.00 17.43 ? ? ? ? ? ? 19 LEU B CA 1 +ATOM 1110 C C . LEU B 1 19 ? 24.278 9.189 13.058 1.00 18.33 ? ? ? ? ? ? 19 LEU B C 1 +ATOM 1111 O O . LEU B 1 19 ? 24.321 9.210 11.834 1.00 15.36 ? ? ? ? ? ? 19 LEU B O 1 +ATOM 1112 C CB . LEU B 1 19 ? 25.725 11.148 13.493 1.00 19.73 ? ? ? ? ? ? 19 LEU B CB 1 +ATOM 1113 C CG . LEU B 1 19 ? 24.999 12.217 14.343 1.00 21.23 ? ? ? ? ? ? 19 LEU B CG 1 +ATOM 1114 C CD1 . LEU B 1 19 ? 25.361 13.624 13.837 1.00 21.44 ? ? ? ? ? ? 19 LEU B CD1 1 +ATOM 1115 C CD2 . LEU B 1 19 ? 23.485 12.072 14.414 1.00 18.91 ? ? ? ? ? ? 19 LEU B CD2 1 +ATOM 1116 H H . LEU B 1 19 ? 27.278 8.994 12.808 1.00 15.00 ? ? ? ? ? ? 19 LEU B H 1 +ATOM 1117 N N . LYS B 1 20 ? 23.215 8.804 13.816 1.00 16.80 ? ? ? ? ? ? 20 LYS B N 1 +ATOM 1118 C CA . LYS B 1 20 ? 21.904 8.407 13.282 1.00 15.52 ? ? ? ? ? ? 20 LYS B CA 1 +ATOM 1119 C C . LYS B 1 20 ? 20.676 9.181 13.812 1.00 17.36 ? ? ? ? ? ? 20 LYS B C 1 +ATOM 1120 O O . LYS B 1 20 ? 20.643 9.643 14.945 1.00 15.50 ? ? ? ? ? ? 20 LYS B O 1 +ATOM 1121 C CB . LYS B 1 20 ? 21.574 6.971 13.681 1.00 17.22 ? ? ? ? ? ? 20 LYS B CB 1 +ATOM 1122 C CG . LYS B 1 20 ? 22.607 5.882 13.524 1.00 13.99 ? ? ? ? ? ? 20 LYS B CG 1 +ATOM 1123 C CD . LYS B 1 20 ? 22.882 5.675 12.073 1.00 13.62 ? ? ? ? ? ? 20 LYS B CD 1 +ATOM 1124 C CE . LYS B 1 20 ? 24.025 4.717 11.895 1.00 16.99 ? ? ? ? ? ? 20 LYS B CE 1 +ATOM 1125 N NZ . LYS B 1 20 ? 24.484 4.868 10.504 1.00 24.02 ? ? ? ? ? ? 20 LYS B NZ 1 +ATOM 1126 H H . LYS B 1 20 ? 23.365 8.840 14.806 1.00 15.00 ? ? ? ? ? ? 20 LYS B H 1 +ATOM 1127 H HZ1 . LYS B 1 20 ? 24.754 5.857 10.329 1.00 15.00 ? ? ? ? ? ? 20 LYS B HZ1 1 +ATOM 1128 H HZ2 . LYS B 1 20 ? 25.303 4.247 10.342 1.00 15.00 ? ? ? ? ? ? 20 LYS B HZ2 1 +ATOM 1129 H HZ3 . LYS B 1 20 ? 23.715 4.598 9.857 1.00 15.00 ? ? ? ? ? ? 20 LYS B HZ3 1 +ATOM 1130 N N . GLU B 1 21 ? 19.602 9.192 12.983 1.00 20.16 ? ? ? ? ? ? 21 GLU B N 1 +ATOM 1131 C CA . GLU B 1 21 ? 18.268 9.421 13.598 1.00 21.51 ? ? ? ? ? ? 21 GLU B CA 1 +ATOM 1132 C C . GLU B 1 21 ? 17.361 8.190 13.818 1.00 18.01 ? ? ? ? ? ? 21 GLU B C 1 +ATOM 1133 O O . GLU B 1 21 ? 17.343 7.233 13.047 1.00 18.22 ? ? ? ? ? ? 21 GLU B O 1 +ATOM 1134 C CB . GLU B 1 21 ? 17.480 10.520 12.888 1.00 27.81 ? ? ? ? ? ? 21 GLU B CB 1 +ATOM 1135 C CG . GLU B 1 21 ? 17.066 10.131 11.457 1.00 39.64 ? ? ? ? ? ? 21 GLU B CG 1 +ATOM 1136 C CD . GLU B 1 21 ? 15.964 11.031 10.886 1.00 45.64 ? ? ? ? ? ? 21 GLU B CD 1 +ATOM 1137 O OE1 . GLU B 1 21 ? 15.654 12.058 11.515 1.00 50.60 ? ? ? ? ? ? 21 GLU B OE1 1 +ATOM 1138 O OE2 . GLU B 1 21 ? 15.421 10.685 9.817 1.00 42.07 ? ? ? ? ? ? 21 GLU B OE2 1 +ATOM 1139 H H . GLU B 1 21 ? 19.729 8.916 12.035 1.00 15.00 ? ? ? ? ? ? 21 GLU B H 1 +ATOM 1140 N N . ALA B 1 22 ? 16.616 8.230 14.925 1.00 13.80 ? ? ? ? ? ? 22 ALA B N 1 +ATOM 1141 C CA . ALA B 1 22 ? 15.823 7.055 15.287 1.00 11.87 ? ? ? ? ? ? 22 ALA B CA 1 +ATOM 1142 C C . ALA B 1 22 ? 14.518 7.381 16.019 1.00 11.18 ? ? ? ? ? ? 22 ALA B C 1 +ATOM 1143 O O . ALA B 1 22 ? 14.447 8.415 16.662 1.00 11.74 ? ? ? ? ? ? 22 ALA B O 1 +ATOM 1144 C CB . ALA B 1 22 ? 16.666 6.101 16.149 1.00 10.30 ? ? ? ? ? ? 22 ALA B CB 1 +ATOM 1145 H H . ALA B 1 22 ? 16.676 9.025 15.523 1.00 15.00 ? ? ? ? ? ? 22 ALA B H 1 +ATOM 1146 N N . LEU B 1 23 ? 13.514 6.468 15.921 1.00 10.61 ? ? ? ? ? ? 23 LEU B N 1 +ATOM 1147 C CA . LEU B 1 23 ? 12.192 6.568 16.594 1.00 9.03 ? ? ? ? ? ? 23 LEU B CA 1 +ATOM 1148 C C . LEU B 1 23 ? 12.109 6.049 18.004 1.00 4.38 ? ? ? ? ? ? 23 LEU B C 1 +ATOM 1149 O O . LEU B 1 23 ? 12.334 4.875 18.258 1.00 3.93 ? ? ? ? ? ? 23 LEU B O 1 +ATOM 1150 C CB . LEU B 1 23 ? 11.040 5.757 15.925 1.00 14.89 ? ? ? ? ? ? 23 LEU B CB 1 +ATOM 1151 C CG . LEU B 1 23 ? 10.386 6.220 14.622 1.00 15.84 ? ? ? ? ? ? 23 LEU B CG 1 +ATOM 1152 C CD1 . LEU B 1 23 ? 9.509 5.129 14.020 1.00 15.65 ? ? ? ? ? ? 23 LEU B CD1 1 +ATOM 1153 C CD2 . LEU B 1 23 ? 9.588 7.493 14.822 1.00 18.35 ? ? ? ? ? ? 23 LEU B CD2 1 +ATOM 1154 H H . LEU B 1 23 ? 13.736 5.654 15.389 1.00 15.00 ? ? ? ? ? ? 23 LEU B H 1 +ATOM 1155 N N . LEU B 1 24 ? 11.672 6.936 18.895 1.00 4.41 ? ? ? ? ? ? 24 LEU B N 1 +ATOM 1156 C CA . LEU B 1 24 ? 11.209 6.427 20.199 1.00 5.96 ? ? ? ? ? ? 24 LEU B CA 1 +ATOM 1157 C C . LEU B 1 24 ? 9.869 5.589 20.226 1.00 6.17 ? ? ? ? ? ? 24 LEU B C 1 +ATOM 1158 O O . LEU B 1 24 ? 8.750 6.062 20.072 1.00 3.94 ? ? ? ? ? ? 24 LEU B O 1 +ATOM 1159 C CB . LEU B 1 24 ? 11.234 7.643 21.120 1.00 9.00 ? ? ? ? ? ? 24 LEU B CB 1 +ATOM 1160 C CG . LEU B 1 24 ? 12.381 7.678 22.141 1.00 12.19 ? ? ? ? ? ? 24 LEU B CG 1 +ATOM 1161 C CD1 . LEU B 1 24 ? 13.719 7.199 21.578 1.00 6.06 ? ? ? ? ? ? 24 LEU B CD1 1 +ATOM 1162 C CD2 . LEU B 1 24 ? 12.451 9.015 22.873 1.00 5.03 ? ? ? ? ? ? 24 LEU B CD2 1 +ATOM 1163 H H . LEU B 1 24 ? 11.549 7.886 18.602 1.00 15.00 ? ? ? ? ? ? 24 LEU B H 1 +ATOM 1164 N N . ASP B 1 25 ? 10.009 4.262 20.364 1.00 7.45 ? ? ? ? ? ? 25 ASP B N 1 +ATOM 1165 C CA . ASP B 1 25 ? 8.798 3.452 20.120 1.00 7.91 ? ? ? ? ? ? 25 ASP B CA 1 +ATOM 1166 C C . ASP B 1 25 ? 8.248 2.587 21.300 1.00 5.74 ? ? ? ? ? ? 25 ASP B C 1 +ATOM 1167 O O . ASP B 1 25 ? 8.641 1.467 21.562 1.00 6.02 ? ? ? ? ? ? 25 ASP B O 1 +ATOM 1168 C CB . ASP B 1 25 ? 9.015 2.651 18.801 1.00 9.14 ? ? ? ? ? ? 25 ASP B CB 1 +ATOM 1169 C CG . ASP B 1 25 ? 7.778 1.925 18.308 1.00 12.45 ? ? ? ? ? ? 25 ASP B CG 1 +ATOM 1170 O OD1 . ASP B 1 25 ? 6.703 2.106 18.868 1.00 21.66 ? ? ? ? ? ? 25 ASP B OD1 1 +ATOM 1171 O OD2 . ASP B 1 25 ? 7.881 1.162 17.360 1.00 11.59 ? ? ? ? ? ? 25 ASP B OD2 1 +ATOM 1172 H H . ASP B 1 25 ? 10.914 3.852 20.515 1.00 15.00 ? ? ? ? ? ? 25 ASP B H 1 +ATOM 1173 N N . THR B 1 26 ? 7.241 3.084 22.009 1.00 6.69 ? ? ? ? ? ? 26 THR B N 1 +ATOM 1174 C CA . THR B 1 26 ? 6.714 2.258 23.143 1.00 6.27 ? ? ? ? ? ? 26 THR B CA 1 +ATOM 1175 C C . THR B 1 26 ? 6.004 0.933 22.778 1.00 7.34 ? ? ? ? ? ? 26 THR B C 1 +ATOM 1176 O O . THR B 1 26 ? 5.793 0.036 23.578 1.00 8.88 ? ? ? ? ? ? 26 THR B O 1 +ATOM 1177 C CB . THR B 1 26 ? 5.729 3.109 23.933 1.00 6.84 ? ? ? ? ? ? 26 THR B CB 1 +ATOM 1178 O OG1 . THR B 1 26 ? 4.608 3.464 23.074 1.00 9.25 ? ? ? ? ? ? 26 THR B OG1 1 +ATOM 1179 C CG2 . THR B 1 26 ? 6.425 4.368 24.451 1.00 2.00 ? ? ? ? ? ? 26 THR B CG2 1 +ATOM 1180 H H . THR B 1 26 ? 6.901 4.007 21.818 1.00 15.00 ? ? ? ? ? ? 26 THR B H 1 +ATOM 1181 H HG1 . THR B 1 26 ? 3.859 2.953 23.397 1.00 15.00 ? ? ? ? ? ? 26 THR B HG1 1 +ATOM 1182 N N . GLY B 1 27 ? 5.656 0.858 21.478 1.00 4.35 ? ? ? ? ? ? 27 GLY B N 1 +ATOM 1183 C CA . GLY B 1 27 ? 5.173 -0.400 20.906 1.00 9.46 ? ? ? ? ? ? 27 GLY B CA 1 +ATOM 1184 C C . GLY B 1 27 ? 6.203 -1.516 20.597 1.00 15.26 ? ? ? ? ? ? 27 GLY B C 1 +ATOM 1185 O O . GLY B 1 27 ? 5.877 -2.692 20.436 1.00 17.22 ? ? ? ? ? ? 27 GLY B O 1 +ATOM 1186 H H . GLY B 1 27 ? 5.801 1.683 20.945 1.00 15.00 ? ? ? ? ? ? 27 GLY B H 1 +ATOM 1187 N N . ALA B 1 28 ? 7.492 -1.103 20.522 1.00 14.40 ? ? ? ? ? ? 28 ALA B N 1 +ATOM 1188 C CA . ALA B 1 28 ? 8.551 -2.107 20.342 1.00 5.74 ? ? ? ? ? ? 28 ALA B CA 1 +ATOM 1189 C C . ALA B 1 28 ? 9.165 -2.701 21.615 1.00 2.42 ? ? ? ? ? ? 28 ALA B C 1 +ATOM 1190 O O . ALA B 1 28 ? 9.669 -2.061 22.526 1.00 2.00 ? ? ? ? ? ? 28 ALA B O 1 +ATOM 1191 C CB . ALA B 1 28 ? 9.661 -1.568 19.447 1.00 4.25 ? ? ? ? ? ? 28 ALA B CB 1 +ATOM 1192 H H . ALA B 1 28 ? 7.713 -0.156 20.744 1.00 15.00 ? ? ? ? ? ? 28 ALA B H 1 +ATOM 1193 N N . ASP B 1 29 ? 9.112 -4.029 21.619 1.00 2.74 ? ? ? ? ? ? 29 ASP B N 1 +ATOM 1194 C CA . ASP B 1 29 ? 9.838 -4.791 22.645 1.00 2.57 ? ? ? ? ? ? 29 ASP B CA 1 +ATOM 1195 C C . ASP B 1 29 ? 11.373 -4.638 22.626 1.00 3.27 ? ? ? ? ? ? 29 ASP B C 1 +ATOM 1196 O O . ASP B 1 29 ? 12.073 -4.576 23.621 1.00 7.51 ? ? ? ? ? ? 29 ASP B O 1 +ATOM 1197 C CB . ASP B 1 29 ? 9.512 -6.271 22.479 1.00 5.23 ? ? ? ? ? ? 29 ASP B CB 1 +ATOM 1198 C CG . ASP B 1 29 ? 8.133 -6.745 22.899 1.00 9.26 ? ? ? ? ? ? 29 ASP B CG 1 +ATOM 1199 O OD1 . ASP B 1 29 ? 7.455 -6.048 23.657 1.00 14.61 ? ? ? ? ? ? 29 ASP B OD1 1 +ATOM 1200 O OD2 . ASP B 1 29 ? 7.756 -7.845 22.469 1.00 8.73 ? ? ? ? ? ? 29 ASP B OD2 1 +ATOM 1201 H H . ASP B 1 29 ? 8.540 -4.432 20.905 1.00 15.00 ? ? ? ? ? ? 29 ASP B H 1 +ATOM 1202 N N . ASP B 1 30 ? 11.861 -4.594 21.390 1.00 6.36 ? ? ? ? ? ? 30 ASP B N 1 +ATOM 1203 C CA . ASP B 1 30 ? 13.280 -4.652 21.055 1.00 9.02 ? ? ? ? ? ? 30 ASP B CA 1 +ATOM 1204 C C . ASP B 1 30 ? 13.748 -3.529 20.146 1.00 8.29 ? ? ? ? ? ? 30 ASP B C 1 +ATOM 1205 O O . ASP B 1 30 ? 12.983 -2.852 19.483 1.00 11.43 ? ? ? ? ? ? 30 ASP B O 1 +ATOM 1206 C CB . ASP B 1 30 ? 13.615 -5.914 20.256 1.00 14.97 ? ? ? ? ? ? 30 ASP B CB 1 +ATOM 1207 C CG . ASP B 1 30 ? 13.403 -7.271 20.937 1.00 16.52 ? ? ? ? ? ? 30 ASP B CG 1 +ATOM 1208 O OD1 . ASP B 1 30 ? 13.879 -7.478 22.077 1.00 13.64 ? ? ? ? ? ? 30 ASP B OD1 1 +ATOM 1209 O OD2 . ASP B 1 30 ? 12.783 -8.114 20.271 1.00 16.84 ? ? ? ? ? ? 30 ASP B OD2 1 +ATOM 1210 H H . ASP B 1 30 ? 11.189 -4.560 20.656 1.00 15.00 ? ? ? ? ? ? 30 ASP B H 1 +ATOM 1211 N N . THR B 1 31 ? 15.069 -3.377 20.133 1.00 11.09 ? ? ? ? ? ? 31 THR B N 1 +ATOM 1212 C CA . THR B 1 31 ? 15.689 -2.288 19.330 1.00 10.79 ? ? ? ? ? ? 31 THR B CA 1 +ATOM 1213 C C . THR B 1 31 ? 16.168 -2.748 17.969 1.00 5.57 ? ? ? ? ? ? 31 THR B C 1 +ATOM 1214 O O . THR B 1 31 ? 16.972 -3.643 17.843 1.00 11.09 ? ? ? ? ? ? 31 THR B O 1 +ATOM 1215 C CB . THR B 1 31 ? 16.851 -1.587 20.106 1.00 7.86 ? ? ? ? ? ? 31 THR B CB 1 +ATOM 1216 O OG1 . THR B 1 31 ? 16.360 -0.962 21.300 1.00 3.89 ? ? ? ? ? ? 31 THR B OG1 1 +ATOM 1217 C CG2 . THR B 1 31 ? 17.629 -0.548 19.287 1.00 2.00 ? ? ? ? ? ? 31 THR B CG2 1 +ATOM 1218 H H . THR B 1 31 ? 15.617 -4.041 20.639 1.00 15.00 ? ? ? ? ? ? 31 THR B H 1 +ATOM 1219 H HG1 . THR B 1 31 ? 16.103 -1.648 21.915 1.00 15.00 ? ? ? ? ? ? 31 THR B HG1 1 +ATOM 1220 N N . VAL B 1 32 ? 15.612 -2.144 16.947 1.00 6.15 ? ? ? ? ? ? 32 VAL B N 1 +ATOM 1221 C CA . VAL B 1 32 ? 15.849 -2.621 15.593 1.00 6.00 ? ? ? ? ? ? 32 VAL B CA 1 +ATOM 1222 C C . VAL B 1 32 ? 16.503 -1.559 14.738 1.00 7.16 ? ? ? ? ? ? 32 VAL B C 1 +ATOM 1223 O O . VAL B 1 32 ? 15.939 -0.497 14.526 1.00 12.47 ? ? ? ? ? ? 32 VAL B O 1 +ATOM 1224 C CB . VAL B 1 32 ? 14.518 -3.116 15.014 1.00 3.33 ? ? ? ? ? ? 32 VAL B CB 1 +ATOM 1225 C CG1 . VAL B 1 32 ? 14.578 -3.566 13.547 1.00 8.75 ? ? ? ? ? ? 32 VAL B CG1 1 +ATOM 1226 C CG2 . VAL B 1 32 ? 14.063 -4.290 15.870 1.00 2.01 ? ? ? ? ? ? 32 VAL B CG2 1 +ATOM 1227 H H . VAL B 1 32 ? 15.020 -1.362 17.150 1.00 15.00 ? ? ? ? ? ? 32 VAL B H 1 +ATOM 1228 N N . LEU B 1 33 ? 17.741 -1.848 14.325 1.00 7.71 ? ? ? ? ? ? 33 LEU B N 1 +ATOM 1229 C CA . LEU B 1 33 ? 18.539 -0.837 13.600 1.00 10.06 ? ? ? ? ? ? 33 LEU B CA 1 +ATOM 1230 C C . LEU B 1 33 ? 18.820 -1.204 12.169 1.00 9.90 ? ? ? ? ? ? 33 LEU B C 1 +ATOM 1231 O O . LEU B 1 33 ? 18.788 -2.357 11.795 1.00 15.88 ? ? ? ? ? ? 33 LEU B O 1 +ATOM 1232 C CB . LEU B 1 33 ? 19.892 -0.557 14.286 1.00 11.85 ? ? ? ? ? ? 33 LEU B CB 1 +ATOM 1233 C CG . LEU B 1 33 ? 20.078 0.579 15.330 1.00 14.18 ? ? ? ? ? ? 33 LEU B CG 1 +ATOM 1234 C CD1 . LEU B 1 33 ? 18.852 0.924 16.195 1.00 13.47 ? ? ? ? ? ? 33 LEU B CD1 1 +ATOM 1235 C CD2 . LEU B 1 33 ? 21.275 0.276 16.230 1.00 12.15 ? ? ? ? ? ? 33 LEU B CD2 1 +ATOM 1236 H H . LEU B 1 33 ? 18.087 -2.770 14.499 1.00 15.00 ? ? ? ? ? ? 33 LEU B H 1 +ATOM 1237 N N . GLU B 1 34 ? 19.111 -0.206 11.360 1.00 14.19 ? ? ? ? ? ? 34 GLU B N 1 +ATOM 1238 C CA . GLU B 1 34 ? 19.536 -0.485 9.975 1.00 16.04 ? ? ? ? ? ? 34 GLU B CA 1 +ATOM 1239 C C . GLU B 1 34 ? 20.898 -1.177 9.727 1.00 15.98 ? ? ? ? ? ? 34 GLU B C 1 +ATOM 1240 O O . GLU B 1 34 ? 21.813 -1.161 10.535 1.00 15.35 ? ? ? ? ? ? 34 GLU B O 1 +ATOM 1241 C CB . GLU B 1 34 ? 19.605 0.826 9.249 1.00 19.39 ? ? ? ? ? ? 34 GLU B CB 1 +ATOM 1242 C CG . GLU B 1 34 ? 20.722 1.739 9.795 1.00 26.76 ? ? ? ? ? ? 34 GLU B CG 1 +ATOM 1243 C CD . GLU B 1 34 ? 20.801 2.877 8.814 1.00 34.63 ? ? ? ? ? ? 34 GLU B CD 1 +ATOM 1244 O OE1 . GLU B 1 34 ? 21.217 2.616 7.682 1.00 43.75 ? ? ? ? ? ? 34 GLU B OE1 1 +ATOM 1245 O OE2 . GLU B 1 34 ? 20.420 3.998 9.160 1.00 32.10 ? ? ? ? ? ? 34 GLU B OE2 1 +ATOM 1246 H H . GLU B 1 34 ? 19.139 0.709 11.757 1.00 15.00 ? ? ? ? ? ? 34 GLU B H 1 +ATOM 1247 N N . GLU B 1 35 ? 21.037 -1.752 8.535 1.00 17.85 ? ? ? ? ? ? 35 GLU B N 1 +ATOM 1248 C CA . GLU B 1 35 ? 22.295 -2.452 8.201 1.00 19.01 ? ? ? ? ? ? 35 GLU B CA 1 +ATOM 1249 C C . GLU B 1 35 ? 23.624 -1.752 8.500 1.00 20.56 ? ? ? ? ? ? 35 GLU B C 1 +ATOM 1250 O O . GLU B 1 35 ? 23.953 -0.712 7.941 1.00 22.63 ? ? ? ? ? ? 35 GLU B O 1 +ATOM 1251 C CB . GLU B 1 35 ? 22.267 -2.892 6.739 1.00 18.71 ? ? ? ? ? ? 35 GLU B CB 1 +ATOM 1252 C CG . GLU B 1 35 ? 23.137 -4.070 6.309 1.00 25.41 ? ? ? ? ? ? 35 GLU B CG 1 +ATOM 1253 C CD . GLU B 1 35 ? 23.127 -5.194 7.320 1.00 31.07 ? ? ? ? ? ? 35 GLU B CD 1 +ATOM 1254 O OE1 . GLU B 1 35 ? 22.065 -5.751 7.614 1.00 33.01 ? ? ? ? ? ? 35 GLU B OE1 1 +ATOM 1255 O OE2 . GLU B 1 35 ? 24.211 -5.505 7.809 1.00 33.12 ? ? ? ? ? ? 35 GLU B OE2 1 +ATOM 1256 H H . GLU B 1 35 ? 20.282 -1.708 7.888 1.00 15.00 ? ? ? ? ? ? 35 GLU B H 1 +ATOM 1257 N N . MET B 1 36 ? 24.359 -2.401 9.417 1.00 17.85 ? ? ? ? ? ? 36 MET B N 1 +ATOM 1258 C CA . MET B 1 36 ? 25.668 -1.889 9.802 1.00 16.22 ? ? ? ? ? ? 36 MET B CA 1 +ATOM 1259 C C . MET B 1 36 ? 26.715 -2.887 10.316 1.00 19.10 ? ? ? ? ? ? 36 MET B C 1 +ATOM 1260 O O . MET B 1 36 ? 26.436 -3.975 10.790 1.00 20.28 ? ? ? ? ? ? 36 MET B O 1 +ATOM 1261 C CB . MET B 1 36 ? 25.499 -0.745 10.786 1.00 18.45 ? ? ? ? ? ? 36 MET B CB 1 +ATOM 1262 C CG . MET B 1 36 ? 25.081 -1.138 12.201 1.00 21.13 ? ? ? ? ? ? 36 MET B CG 1 +ATOM 1263 S SD . MET B 1 36 ? 25.048 0.354 13.194 1.00 23.85 ? ? ? ? ? ? 36 MET B SD 1 +ATOM 1264 C CE . MET B 1 36 ? 23.662 1.119 12.338 1.00 23.44 ? ? ? ? ? ? 36 MET B CE 1 +ATOM 1265 H H . MET B 1 36 ? 23.929 -3.187 9.853 1.00 15.00 ? ? ? ? ? ? 36 MET B H 1 +ATOM 1266 N N . ASN B 1 37 ? 27.986 -2.485 10.207 1.00 22.03 ? ? ? ? ? ? 37 ASN B N 1 +ATOM 1267 C CA . ASN B 1 37 ? 28.949 -3.438 10.791 1.00 23.18 ? ? ? ? ? ? 37 ASN B CA 1 +ATOM 1268 C C . ASN B 1 37 ? 29.378 -3.126 12.225 1.00 19.96 ? ? ? ? ? ? 37 ASN B C 1 +ATOM 1269 O O . ASN B 1 37 ? 29.725 -2.007 12.566 1.00 20.91 ? ? ? ? ? ? 37 ASN B O 1 +ATOM 1270 C CB . ASN B 1 37 ? 30.132 -3.676 9.826 1.00 27.49 ? ? ? ? ? ? 37 ASN B CB 1 +ATOM 1271 C CG . ASN B 1 37 ? 30.702 -5.077 10.023 1.00 35.24 ? ? ? ? ? ? 37 ASN B CG 1 +ATOM 1272 O OD1 . ASN B 1 37 ? 30.397 -5.788 10.963 1.00 41.93 ? ? ? ? ? ? 37 ASN B OD1 1 +ATOM 1273 N ND2 . ASN B 1 37 ? 31.570 -5.480 9.113 1.00 36.98 ? ? ? ? ? ? 37 ASN B ND2 1 +ATOM 1274 H H . ASN B 1 37 ? 28.195 -1.569 9.874 1.00 15.00 ? ? ? ? ? ? 37 ASN B H 1 +ATOM 1275 H HD21 . ASN B 1 37 ? 31.921 -6.393 9.305 1.00 15.00 ? ? ? ? ? ? 37 ASN B HD21 1 +ATOM 1276 H HD22 . ASN B 1 37 ? 31.883 -4.926 8.350 1.00 15.00 ? ? ? ? ? ? 37 ASN B HD22 1 +ATOM 1277 N N . LEU B 1 38 ? 29.309 -4.142 13.064 1.00 16.38 ? ? ? ? ? ? 38 LEU B N 1 +ATOM 1278 C CA . LEU B 1 38 ? 29.572 -3.902 14.486 1.00 13.73 ? ? ? ? ? ? 38 LEU B CA 1 +ATOM 1279 C C . LEU B 1 38 ? 30.672 -4.815 15.041 1.00 16.59 ? ? ? ? ? ? 38 LEU B C 1 +ATOM 1280 O O . LEU B 1 38 ? 30.881 -5.966 14.639 1.00 18.31 ? ? ? ? ? ? 38 LEU B O 1 +ATOM 1281 C CB . LEU B 1 38 ? 28.261 -4.104 15.252 1.00 8.78 ? ? ? ? ? ? 38 LEU B CB 1 +ATOM 1282 C CG . LEU B 1 38 ? 27.534 -2.931 15.893 1.00 8.20 ? ? ? ? ? ? 38 LEU B CG 1 +ATOM 1283 C CD1 . LEU B 1 38 ? 27.680 -1.620 15.152 1.00 6.79 ? ? ? ? ? ? 38 LEU B CD1 1 +ATOM 1284 C CD2 . LEU B 1 38 ? 26.049 -3.255 16.082 1.00 9.67 ? ? ? ? ? ? 38 LEU B CD2 1 +ATOM 1285 H H . LEU B 1 38 ? 29.106 -5.046 12.686 1.00 15.00 ? ? ? ? ? ? 38 LEU B H 1 +ATOM 1286 N N . PRO B 1 39 ? 31.437 -4.284 16.011 1.00 16.54 ? ? ? ? ? ? 39 PRO B N 1 +ATOM 1287 C CA . PRO B 1 39 ? 32.392 -5.211 16.638 1.00 16.80 ? ? ? ? ? ? 39 PRO B CA 1 +ATOM 1288 C C . PRO B 1 39 ? 31.710 -6.381 17.333 1.00 18.98 ? ? ? ? ? ? 39 PRO B C 1 +ATOM 1289 O O . PRO B 1 39 ? 30.861 -6.185 18.187 1.00 23.65 ? ? ? ? ? ? 39 PRO B O 1 +ATOM 1290 C CB . PRO B 1 39 ? 33.194 -4.307 17.571 1.00 11.55 ? ? ? ? ? ? 39 PRO B CB 1 +ATOM 1291 C CG . PRO B 1 39 ? 32.285 -3.098 17.816 1.00 18.60 ? ? ? ? ? ? 39 PRO B CG 1 +ATOM 1292 C CD . PRO B 1 39 ? 31.499 -2.919 16.509 1.00 15.25 ? ? ? ? ? ? 39 PRO B CD 1 +ATOM 1293 N N . GLY B 1 40 ? 32.112 -7.602 16.940 1.00 19.65 ? ? ? ? ? ? 40 GLY B N 1 +ATOM 1294 C CA . GLY B 1 40 ? 31.768 -8.774 17.771 1.00 19.46 ? ? ? ? ? ? 40 GLY B CA 1 +ATOM 1295 C C . GLY B 1 40 ? 31.086 -10.008 17.131 1.00 19.70 ? ? ? ? ? ? 40 GLY B C 1 +ATOM 1296 O O . GLY B 1 40 ? 30.880 -10.132 15.928 1.00 16.77 ? ? ? ? ? ? 40 GLY B O 1 +ATOM 1297 H H . GLY B 1 40 ? 32.609 -7.655 16.081 1.00 15.00 ? ? ? ? ? ? 40 GLY B H 1 +ATOM 1298 N N . LYS B 1 41 ? 30.735 -10.942 18.032 1.00 22.02 ? ? ? ? ? ? 41 LYS B N 1 +ATOM 1299 C CA . LYS B 1 41 ? 29.912 -12.108 17.617 1.00 23.82 ? ? ? ? ? ? 41 LYS B CA 1 +ATOM 1300 C C . LYS B 1 41 ? 28.393 -11.915 17.692 1.00 21.29 ? ? ? ? ? ? 41 LYS B C 1 +ATOM 1301 O O . LYS B 1 41 ? 27.859 -11.242 18.567 1.00 25.33 ? ? ? ? ? ? 41 LYS B O 1 +ATOM 1302 C CB . LYS B 1 41 ? 30.291 -13.337 18.450 1.00 28.74 ? ? ? ? ? ? 41 LYS B CB 1 +ATOM 1303 C CG . LYS B 1 41 ? 31.518 -14.026 17.845 1.00 36.82 ? ? ? ? ? ? 41 LYS B CG 1 +ATOM 1304 C CD . LYS B 1 41 ? 32.275 -14.891 18.859 1.00 43.84 ? ? ? ? ? ? 41 LYS B CD 1 +ATOM 1305 C CE . LYS B 1 41 ? 33.584 -15.475 18.292 1.00 50.21 ? ? ? ? ? ? 41 LYS B CE 1 +ATOM 1306 N NZ . LYS B 1 41 ? 34.272 -16.305 19.307 1.00 53.29 ? ? ? ? ? ? 41 LYS B NZ 1 +ATOM 1307 H H . LYS B 1 41 ? 30.884 -10.710 18.991 1.00 15.00 ? ? ? ? ? ? 41 LYS B H 1 +ATOM 1308 H HZ1 . LYS B 1 41 ? 34.471 -15.730 20.151 1.00 15.00 ? ? ? ? ? ? 41 LYS B HZ1 1 +ATOM 1309 H HZ2 . LYS B 1 41 ? 33.664 -17.106 19.573 1.00 15.00 ? ? ? ? ? ? 41 LYS B HZ2 1 +ATOM 1310 H HZ3 . LYS B 1 41 ? 35.165 -16.665 18.913 1.00 15.00 ? ? ? ? ? ? 41 LYS B HZ3 1 +ATOM 1311 N N . TRP B 1 42 ? 27.716 -12.539 16.733 1.00 17.46 ? ? ? ? ? ? 42 TRP B N 1 +ATOM 1312 C CA . TRP B 1 42 ? 26.251 -12.403 16.649 1.00 13.49 ? ? ? ? ? ? 42 TRP B CA 1 +ATOM 1313 C C . TRP B 1 42 ? 25.510 -13.703 16.324 1.00 12.15 ? ? ? ? ? ? 42 TRP B C 1 +ATOM 1314 O O . TRP B 1 42 ? 26.051 -14.654 15.782 1.00 14.95 ? ? ? ? ? ? 42 TRP B O 1 +ATOM 1315 C CB . TRP B 1 42 ? 25.920 -11.301 15.634 1.00 12.14 ? ? ? ? ? ? 42 TRP B CB 1 +ATOM 1316 C CG . TRP B 1 42 ? 26.433 -11.709 14.276 1.00 13.33 ? ? ? ? ? ? 42 TRP B CG 1 +ATOM 1317 C CD1 . TRP B 1 42 ? 27.694 -11.399 13.751 1.00 11.85 ? ? ? ? ? ? 42 TRP B CD1 1 +ATOM 1318 C CD2 . TRP B 1 42 ? 25.816 -12.577 13.295 1.00 13.96 ? ? ? ? ? ? 42 TRP B CD2 1 +ATOM 1319 N NE1 . TRP B 1 42 ? 27.895 -12.010 12.555 1.00 15.10 ? ? ? ? ? ? 42 TRP B NE1 1 +ATOM 1320 C CE2 . TRP B 1 42 ? 26.761 -12.752 12.231 1.00 16.59 ? ? ? ? ? ? 42 TRP B CE2 1 +ATOM 1321 C CE3 . TRP B 1 42 ? 24.574 -13.230 13.225 1.00 15.64 ? ? ? ? ? ? 42 TRP B CE3 1 +ATOM 1322 C CZ2 . TRP B 1 42 ? 26.437 -13.571 11.121 1.00 13.61 ? ? ? ? ? ? 42 TRP B CZ2 1 +ATOM 1323 C CZ3 . TRP B 1 42 ? 24.267 -14.045 12.116 1.00 15.99 ? ? ? ? ? ? 42 TRP B CZ3 1 +ATOM 1324 C CH2 . TRP B 1 42 ? 25.190 -14.212 11.063 1.00 13.09 ? ? ? ? ? ? 42 TRP B CH2 1 +ATOM 1325 H H . TRP B 1 42 ? 28.224 -13.083 16.070 1.00 15.00 ? ? ? ? ? ? 42 TRP B H 1 +ATOM 1326 H HE1 . TRP B 1 42 ? 28.703 -11.932 12.009 1.00 15.00 ? ? ? ? ? ? 42 TRP B HE1 1 +ATOM 1327 N N . LYS B 1 43 ? 24.230 -13.726 16.645 1.00 14.76 ? ? ? ? ? ? 43 LYS B N 1 +ATOM 1328 C CA . LYS B 1 43 ? 23.372 -14.840 16.156 1.00 15.01 ? ? ? ? ? ? 43 LYS B CA 1 +ATOM 1329 C C . LYS B 1 43 ? 22.199 -14.340 15.321 1.00 11.60 ? ? ? ? ? ? 43 LYS B C 1 +ATOM 1330 O O . LYS B 1 43 ? 21.748 -13.221 15.518 1.00 8.57 ? ? ? ? ? ? 43 LYS B O 1 +ATOM 1331 C CB . LYS B 1 43 ? 22.767 -15.644 17.315 1.00 16.41 ? ? ? ? ? ? 43 LYS B CB 1 +ATOM 1332 C CG . LYS B 1 43 ? 23.607 -15.698 18.598 1.00 25.64 ? ? ? ? ? ? 43 LYS B CG 1 +ATOM 1333 C CD . LYS B 1 43 ? 22.793 -16.192 19.807 1.00 30.49 ? ? ? ? ? ? 43 LYS B CD 1 +ATOM 1334 C CE . LYS B 1 43 ? 23.348 -15.681 21.147 1.00 36.04 ? ? ? ? ? ? 43 LYS B CE 1 +ATOM 1335 N NZ . LYS B 1 43 ? 22.471 -16.056 22.271 1.00 38.16 ? ? ? ? ? ? 43 LYS B NZ 1 +ATOM 1336 H H . LYS B 1 43 ? 23.865 -12.950 17.161 1.00 15.00 ? ? ? ? ? ? 43 LYS B H 1 +ATOM 1337 H HZ1 . LYS B 1 43 ? 22.222 -17.062 22.183 1.00 15.00 ? ? ? ? ? ? 43 LYS B HZ1 1 +ATOM 1338 H HZ2 . LYS B 1 43 ? 22.986 -15.906 23.162 1.00 15.00 ? ? ? ? ? ? 43 LYS B HZ2 1 +ATOM 1339 H HZ3 . LYS B 1 43 ? 21.605 -15.481 22.263 1.00 15.00 ? ? ? ? ? ? 43 LYS B HZ3 1 +ATOM 1340 N N . PRO B 1 44 ? 21.685 -15.153 14.386 1.00 11.50 ? ? ? ? ? ? 44 PRO B N 1 +ATOM 1341 C CA . PRO B 1 44 ? 20.414 -14.773 13.752 1.00 10.15 ? ? ? ? ? ? 44 PRO B CA 1 +ATOM 1342 C C . PRO B 1 44 ? 19.083 -15.026 14.525 1.00 14.71 ? ? ? ? ? ? 44 PRO B C 1 +ATOM 1343 O O . PRO B 1 44 ? 18.892 -15.789 15.474 1.00 15.94 ? ? ? ? ? ? 44 PRO B O 1 +ATOM 1344 C CB . PRO B 1 44 ? 20.520 -15.507 12.434 1.00 7.39 ? ? ? ? ? ? 44 PRO B CB 1 +ATOM 1345 C CG . PRO B 1 44 ? 21.262 -16.797 12.740 1.00 10.30 ? ? ? ? ? ? 44 PRO B CG 1 +ATOM 1346 C CD . PRO B 1 44 ? 22.250 -16.379 13.839 1.00 15.80 ? ? ? ? ? ? 44 PRO B CD 1 +ATOM 1347 N N . LYS B 1 45 ? 18.106 -14.284 14.016 1.00 14.12 ? ? ? ? ? ? 45 LYS B N 1 +ATOM 1348 C CA . LYS B 1 45 ? 16.794 -14.321 14.642 1.00 7.59 ? ? ? ? ? ? 45 LYS B CA 1 +ATOM 1349 C C . LYS B 1 45 ? 15.674 -14.033 13.602 1.00 10.68 ? ? ? ? ? ? 45 LYS B C 1 +ATOM 1350 O O . LYS B 1 45 ? 15.874 -13.253 12.677 1.00 13.93 ? ? ? ? ? ? 45 LYS B O 1 +ATOM 1351 C CB . LYS B 1 45 ? 16.948 -13.268 15.700 1.00 2.27 ? ? ? ? ? ? 45 LYS B CB 1 +ATOM 1352 C CG . LYS B 1 45 ? 16.151 -13.533 16.934 1.00 10.10 ? ? ? ? ? ? 45 LYS B CG 1 +ATOM 1353 C CD . LYS B 1 45 ? 15.901 -12.228 17.660 1.00 13.52 ? ? ? ? ? ? 45 LYS B CD 1 +ATOM 1354 C CE . LYS B 1 45 ? 14.845 -12.483 18.738 1.00 22.70 ? ? ? ? ? ? 45 LYS B CE 1 +ATOM 1355 N NZ . LYS B 1 45 ? 14.288 -11.214 19.244 1.00 24.26 ? ? ? ? ? ? 45 LYS B NZ 1 +ATOM 1356 H H . LYS B 1 45 ? 18.350 -13.597 13.327 1.00 15.00 ? ? ? ? ? ? 45 LYS B H 1 +ATOM 1357 H HZ1 . LYS B 1 45 ? 13.969 -10.630 18.445 1.00 15.00 ? ? ? ? ? ? 45 LYS B HZ1 1 +ATOM 1358 H HZ2 . LYS B 1 45 ? 13.480 -11.422 19.864 1.00 15.00 ? ? ? ? ? ? 45 LYS B HZ2 1 +ATOM 1359 H HZ3 . LYS B 1 45 ? 15.017 -10.705 19.784 1.00 15.00 ? ? ? ? ? ? 45 LYS B HZ3 1 +ATOM 1360 N N . MET B 1 46 ? 14.490 -14.663 13.752 1.00 15.78 ? ? ? ? ? ? 46 MET B N 1 +ATOM 1361 C CA . MET B 1 46 ? 13.281 -14.132 13.037 1.00 13.78 ? ? ? ? ? ? 46 MET B CA 1 +ATOM 1362 C C . MET B 1 46 ? 12.336 -13.203 13.877 1.00 11.68 ? ? ? ? ? ? 46 MET B C 1 +ATOM 1363 O O . MET B 1 46 ? 11.738 -13.624 14.856 1.00 11.56 ? ? ? ? ? ? 46 MET B O 1 +ATOM 1364 C CB . MET B 1 46 ? 12.405 -15.249 12.457 1.00 7.23 ? ? ? ? ? ? 46 MET B CB 1 +ATOM 1365 C CG . MET B 1 46 ? 13.121 -16.153 11.481 1.00 10.18 ? ? ? ? ? ? 46 MET B CG 1 +ATOM 1366 S SD . MET B 1 46 ? 13.485 -15.302 9.972 1.00 15.69 ? ? ? ? ? ? 46 MET B SD 1 +ATOM 1367 C CE . MET B 1 46 ? 11.863 -15.290 9.206 1.00 8.69 ? ? ? ? ? ? 46 MET B CE 1 +ATOM 1368 H H . MET B 1 46 ? 14.423 -15.366 14.457 1.00 15.00 ? ? ? ? ? ? 46 MET B H 1 +ATOM 1369 N N . ILE B 1 47 ? 12.207 -11.923 13.471 1.00 11.05 ? ? ? ? ? ? 47 ILE B N 1 +ATOM 1370 C CA . ILE B 1 47 ? 11.224 -11.056 14.153 1.00 8.18 ? ? ? ? ? ? 47 ILE B CA 1 +ATOM 1371 C C . ILE B 1 47 ? 10.063 -10.567 13.256 1.00 6.17 ? ? ? ? ? ? 47 ILE B C 1 +ATOM 1372 O O . ILE B 1 47 ? 10.203 -10.268 12.071 1.00 4.21 ? ? ? ? ? ? 47 ILE B O 1 +ATOM 1373 C CB . ILE B 1 47 ? 11.868 -9.870 14.915 1.00 6.47 ? ? ? ? ? ? 47 ILE B CB 1 +ATOM 1374 C CG1 . ILE B 1 47 ? 12.676 -8.934 14.035 1.00 8.49 ? ? ? ? ? ? 47 ILE B CG1 1 +ATOM 1375 C CG2 . ILE B 1 47 ? 12.748 -10.294 16.084 1.00 2.00 ? ? ? ? ? ? 47 ILE B CG2 1 +ATOM 1376 C CD1 . ILE B 1 47 ? 12.795 -7.565 14.730 1.00 7.40 ? ? ? ? ? ? 47 ILE B CD1 1 +ATOM 1377 H H . ILE B 1 47 ? 12.692 -11.654 12.636 1.00 15.00 ? ? ? ? ? ? 47 ILE B H 1 +ATOM 1378 N N . GLY B 1 48 ? 8.867 -10.542 13.860 1.00 7.20 ? ? ? ? ? ? 48 GLY B N 1 +ATOM 1379 C CA . GLY B 1 48 ? 7.681 -10.220 13.032 1.00 8.57 ? ? ? ? ? ? 48 GLY B CA 1 +ATOM 1380 C C . GLY B 1 48 ? 6.758 -9.082 13.466 1.00 9.75 ? ? ? ? ? ? 48 GLY B C 1 +ATOM 1381 O O . GLY B 1 48 ? 6.748 -8.612 14.598 1.00 8.98 ? ? ? ? ? ? 48 GLY B O 1 +ATOM 1382 H H . GLY B 1 48 ? 8.821 -10.741 14.834 1.00 15.00 ? ? ? ? ? ? 48 GLY B H 1 +ATOM 1383 N N . GLY B 1 49 ? 5.941 -8.656 12.514 1.00 13.64 ? ? ? ? ? ? 49 GLY B N 1 +ATOM 1384 C CA . GLY B 1 49 ? 4.937 -7.642 12.885 1.00 12.84 ? ? ? ? ? ? 49 GLY B CA 1 +ATOM 1385 C C . GLY B 1 49 ? 4.027 -7.270 11.734 1.00 15.22 ? ? ? ? ? ? 49 GLY B C 1 +ATOM 1386 O O . GLY B 1 49 ? 3.748 -8.129 10.915 1.00 18.27 ? ? ? ? ? ? 49 GLY B O 1 +ATOM 1387 H H . GLY B 1 49 ? 5.989 -9.057 11.606 1.00 15.00 ? ? ? ? ? ? 49 GLY B H 1 +ATOM 1388 N N . ILE B 1 50 ? 3.573 -6.002 11.639 1.00 13.68 ? ? ? ? ? ? 50 ILE B N 1 +ATOM 1389 C CA . ILE B 1 50 ? 2.706 -5.646 10.491 1.00 11.58 ? ? ? ? ? ? 50 ILE B CA 1 +ATOM 1390 C C . ILE B 1 50 ? 3.278 -6.090 9.113 1.00 13.86 ? ? ? ? ? ? 50 ILE B C 1 +ATOM 1391 O O . ILE B 1 50 ? 4.400 -5.782 8.730 1.00 20.94 ? ? ? ? ? ? 50 ILE B O 1 +ATOM 1392 C CB . ILE B 1 50 ? 2.409 -4.126 10.524 1.00 10.42 ? ? ? ? ? ? 50 ILE B CB 1 +ATOM 1393 C CG1 . ILE B 1 50 ? 1.846 -3.670 11.872 1.00 7.91 ? ? ? ? ? ? 50 ILE B CG1 1 +ATOM 1394 C CG2 . ILE B 1 50 ? 1.502 -3.590 9.395 1.00 2.54 ? ? ? ? ? ? 50 ILE B CG2 1 +ATOM 1395 C CD1 . ILE B 1 50 ? 0.604 -4.431 12.287 1.00 8.46 ? ? ? ? ? ? 50 ILE B CD1 1 +ATOM 1396 H H . ILE B 1 50 ? 3.886 -5.334 12.323 1.00 15.00 ? ? ? ? ? ? 50 ILE B H 1 +ATOM 1397 N N . GLY B 1 51 ? 2.506 -6.887 8.376 1.00 12.85 ? ? ? ? ? ? 51 GLY B N 1 +ATOM 1398 C CA . GLY B 1 51 ? 3.070 -7.232 7.062 1.00 11.85 ? ? ? ? ? ? 51 GLY B CA 1 +ATOM 1399 C C . GLY B 1 51 ? 3.804 -8.561 7.004 1.00 11.64 ? ? ? ? ? ? 51 GLY B C 1 +ATOM 1400 O O . GLY B 1 51 ? 3.910 -9.207 5.975 1.00 13.97 ? ? ? ? ? ? 51 GLY B O 1 +ATOM 1401 H H . GLY B 1 51 ? 1.636 -7.226 8.725 1.00 15.00 ? ? ? ? ? ? 51 GLY B H 1 +ATOM 1402 N N . GLY B 1 52 ? 4.281 -8.956 8.192 1.00 10.16 ? ? ? ? ? ? 52 GLY B N 1 +ATOM 1403 C CA . GLY B 1 52 ? 5.063 -10.188 8.325 1.00 8.77 ? ? ? ? ? ? 52 GLY B CA 1 +ATOM 1404 C C . GLY B 1 52 ? 6.412 -10.082 9.085 1.00 10.56 ? ? ? ? ? ? 52 GLY B C 1 +ATOM 1405 O O . GLY B 1 52 ? 6.637 -9.230 9.933 1.00 11.23 ? ? ? ? ? ? 52 GLY B O 1 +ATOM 1406 H H . GLY B 1 52 ? 4.104 -8.383 8.992 1.00 15.00 ? ? ? ? ? ? 52 GLY B H 1 +ATOM 1407 N N . PHE B 1 53 ? 7.281 -11.045 8.747 1.00 11.07 ? ? ? ? ? ? 53 PHE B N 1 +ATOM 1408 C CA . PHE B 1 53 ? 8.617 -11.307 9.317 1.00 11.70 ? ? ? ? ? ? 53 PHE B CA 1 +ATOM 1409 C C . PHE B 1 53 ? 9.829 -10.842 8.488 1.00 15.80 ? ? ? ? ? ? 53 PHE B C 1 +ATOM 1410 O O . PHE B 1 53 ? 9.897 -11.013 7.274 1.00 18.07 ? ? ? ? ? ? 53 PHE B O 1 +ATOM 1411 C CB . PHE B 1 53 ? 8.808 -12.806 9.572 1.00 4.31 ? ? ? ? ? ? 53 PHE B CB 1 +ATOM 1412 C CG . PHE B 1 53 ? 8.086 -13.211 10.823 1.00 4.87 ? ? ? ? ? ? 53 PHE B CG 1 +ATOM 1413 C CD1 . PHE B 1 53 ? 6.707 -13.481 10.761 1.00 6.81 ? ? ? ? ? ? 53 PHE B CD1 1 +ATOM 1414 C CD2 . PHE B 1 53 ? 8.807 -13.338 12.023 1.00 2.00 ? ? ? ? ? ? 53 PHE B CD2 1 +ATOM 1415 C CE1 . PHE B 1 53 ? 6.043 -13.950 11.908 1.00 10.37 ? ? ? ? ? ? 53 PHE B CE1 1 +ATOM 1416 C CE2 . PHE B 1 53 ? 8.152 -13.838 13.157 1.00 4.35 ? ? ? ? ? ? 53 PHE B CE2 1 +ATOM 1417 C CZ . PHE B 1 53 ? 6.780 -14.160 13.088 1.00 4.36 ? ? ? ? ? ? 53 PHE B CZ 1 +ATOM 1418 H H . PHE B 1 53 ? 6.973 -11.592 7.970 1.00 15.00 ? ? ? ? ? ? 53 PHE B H 1 +ATOM 1419 N N . ILE B 1 54 ? 10.807 -10.278 9.234 1.00 16.52 ? ? ? ? ? ? 54 ILE B N 1 +ATOM 1420 C CA . ILE B 1 54 ? 12.170 -10.098 8.704 1.00 10.33 ? ? ? ? ? ? 54 ILE B CA 1 +ATOM 1421 C C . ILE B 1 54 ? 13.260 -10.938 9.408 1.00 9.77 ? ? ? ? ? ? 54 ILE B C 1 +ATOM 1422 O O . ILE B 1 54 ? 13.132 -11.362 10.558 1.00 7.99 ? ? ? ? ? ? 54 ILE B O 1 +ATOM 1423 C CB . ILE B 1 54 ? 12.572 -8.613 8.634 1.00 6.25 ? ? ? ? ? ? 54 ILE B CB 1 +ATOM 1424 C CG1 . ILE B 1 54 ? 12.653 -7.928 10.004 1.00 9.81 ? ? ? ? ? ? 54 ILE B CG1 1 +ATOM 1425 C CG2 . ILE B 1 54 ? 11.639 -7.857 7.703 1.00 2.00 ? ? ? ? ? ? 54 ILE B CG2 1 +ATOM 1426 C CD1 . ILE B 1 54 ? 13.384 -6.579 9.991 1.00 2.88 ? ? ? ? ? ? 54 ILE B CD1 1 +ATOM 1427 H H . ILE B 1 54 ? 10.591 -10.082 10.192 1.00 15.00 ? ? ? ? ? ? 54 ILE B H 1 +ATOM 1428 N N . LYS B 1 55 ? 14.367 -11.147 8.652 1.00 10.99 ? ? ? ? ? ? 55 LYS B N 1 +ATOM 1429 C CA . LYS B 1 55 ? 15.595 -11.645 9.329 1.00 10.11 ? ? ? ? ? ? 55 LYS B CA 1 +ATOM 1430 C C . LYS B 1 55 ? 16.630 -10.591 9.723 1.00 5.92 ? ? ? ? ? ? 55 LYS B C 1 +ATOM 1431 O O . LYS B 1 55 ? 16.878 -9.611 9.044 1.00 6.28 ? ? ? ? ? ? 55 LYS B O 1 +ATOM 1432 C CB . LYS B 1 55 ? 16.267 -12.792 8.562 1.00 12.08 ? ? ? ? ? ? 55 LYS B CB 1 +ATOM 1433 C CG . LYS B 1 55 ? 17.209 -13.621 9.428 1.00 18.95 ? ? ? ? ? ? 55 LYS B CG 1 +ATOM 1434 C CD . LYS B 1 55 ? 17.995 -14.639 8.595 1.00 26.21 ? ? ? ? ? ? 55 LYS B CD 1 +ATOM 1435 C CE . LYS B 1 55 ? 19.344 -14.978 9.238 1.00 30.94 ? ? ? ? ? ? 55 LYS B CE 1 +ATOM 1436 N NZ . LYS B 1 55 ? 20.154 -15.900 8.409 1.00 35.50 ? ? ? ? ? ? 55 LYS B NZ 1 +ATOM 1437 H H . LYS B 1 55 ? 14.363 -10.794 7.720 1.00 15.00 ? ? ? ? ? ? 55 LYS B H 1 +ATOM 1438 H HZ1 . LYS B 1 55 ? 19.567 -16.713 8.131 1.00 15.00 ? ? ? ? ? ? 55 LYS B HZ1 1 +ATOM 1439 H HZ2 . LYS B 1 55 ? 20.484 -15.400 7.560 1.00 15.00 ? ? ? ? ? ? 55 LYS B HZ2 1 +ATOM 1440 H HZ3 . LYS B 1 55 ? 20.969 -16.233 8.962 1.00 15.00 ? ? ? ? ? ? 55 LYS B HZ3 1 +ATOM 1441 N N . VAL B 1 56 ? 17.170 -10.858 10.902 1.00 8.08 ? ? ? ? ? ? 56 VAL B N 1 +ATOM 1442 C CA . VAL B 1 56 ? 17.925 -9.967 11.800 1.00 8.36 ? ? ? ? ? ? 56 VAL B CA 1 +ATOM 1443 C C . VAL B 1 56 ? 19.180 -10.675 12.405 1.00 9.26 ? ? ? ? ? ? 56 VAL B C 1 +ATOM 1444 O O . VAL B 1 56 ? 19.237 -11.905 12.504 1.00 10.25 ? ? ? ? ? ? 56 VAL B O 1 +ATOM 1445 C CB . VAL B 1 56 ? 16.825 -9.604 12.832 1.00 11.67 ? ? ? ? ? ? 56 VAL B CB 1 +ATOM 1446 C CG1 . VAL B 1 56 ? 17.084 -9.976 14.294 1.00 12.60 ? ? ? ? ? ? 56 VAL B CG1 1 +ATOM 1447 C CG2 . VAL B 1 56 ? 16.255 -8.214 12.568 1.00 14.41 ? ? ? ? ? ? 56 VAL B CG2 1 +ATOM 1448 H H . VAL B 1 56 ? 16.866 -11.733 11.281 1.00 15.00 ? ? ? ? ? ? 56 VAL B H 1 +ATOM 1449 N N . ARG B 1 57 ? 20.168 -9.866 12.832 1.00 8.70 ? ? ? ? ? ? 57 ARG B N 1 +ATOM 1450 C CA . ARG B 1 57 ? 21.337 -10.349 13.610 1.00 10.33 ? ? ? ? ? ? 57 ARG B CA 1 +ATOM 1451 C C . ARG B 1 57 ? 21.395 -9.718 14.992 1.00 10.16 ? ? ? ? ? ? 57 ARG B C 1 +ATOM 1452 O O . ARG B 1 57 ? 21.362 -8.504 15.149 1.00 9.24 ? ? ? ? ? ? 57 ARG B O 1 +ATOM 1453 C CB . ARG B 1 57 ? 22.727 -10.090 12.937 1.00 8.35 ? ? ? ? ? ? 57 ARG B CB 1 +ATOM 1454 C CG . ARG B 1 57 ? 22.713 -10.404 11.425 1.00 13.65 ? ? ? ? ? ? 57 ARG B CG 1 +ATOM 1455 C CD . ARG B 1 57 ? 24.024 -10.465 10.619 1.00 11.84 ? ? ? ? ? ? 57 ARG B CD 1 +ATOM 1456 N NE . ARG B 1 57 ? 24.804 -9.225 10.674 1.00 16.18 ? ? ? ? ? ? 57 ARG B NE 1 +ATOM 1457 C CZ . ARG B 1 57 ? 24.649 -8.242 9.749 1.00 22.99 ? ? ? ? ? ? 57 ARG B CZ 1 +ATOM 1458 N NH1 . ARG B 1 57 ? 23.787 -8.366 8.737 1.00 24.07 ? ? ? ? ? ? 57 ARG B NH1 1 +ATOM 1459 N NH2 . ARG B 1 57 ? 25.371 -7.121 9.840 1.00 19.42 ? ? ? ? ? ? 57 ARG B NH2 1 +ATOM 1460 H H . ARG B 1 57 ? 20.044 -8.904 12.610 1.00 15.00 ? ? ? ? ? ? 57 ARG B H 1 +ATOM 1461 H HE . ARG B 1 57 ? 25.451 -9.064 11.420 1.00 15.00 ? ? ? ? ? ? 57 ARG B HE 1 +ATOM 1462 H HH11 . ARG B 1 57 ? 23.234 -9.194 8.644 1.00 15.00 ? ? ? ? ? ? 57 ARG B HH11 1 +ATOM 1463 H HH12 . ARG B 1 57 ? 23.691 -7.628 8.068 1.00 15.00 ? ? ? ? ? ? 57 ARG B HH12 1 +ATOM 1464 H HH21 . ARG B 1 57 ? 26.017 -7.011 10.597 1.00 15.00 ? ? ? ? ? ? 57 ARG B HH21 1 +ATOM 1465 H HH22 . ARG B 1 57 ? 25.270 -6.397 9.158 1.00 15.00 ? ? ? ? ? ? 57 ARG B HH22 1 +ATOM 1466 N N . GLN B 1 58 ? 21.486 -10.570 15.988 1.00 7.03 ? ? ? ? ? ? 58 GLN B N 1 +ATOM 1467 C CA . GLN B 1 58 ? 21.592 -10.082 17.357 1.00 10.22 ? ? ? ? ? ? 58 GLN B CA 1 +ATOM 1468 C C . GLN B 1 58 ? 22.996 -9.771 17.916 1.00 13.31 ? ? ? ? ? ? 58 GLN B C 1 +ATOM 1469 O O . GLN B 1 58 ? 23.802 -10.678 18.113 1.00 16.89 ? ? ? ? ? ? 58 GLN B O 1 +ATOM 1470 C CB . GLN B 1 58 ? 20.886 -11.120 18.237 1.00 12.64 ? ? ? ? ? ? 58 GLN B CB 1 +ATOM 1471 C CG . GLN B 1 58 ? 21.070 -10.886 19.729 1.00 17.77 ? ? ? ? ? ? 58 GLN B CG 1 +ATOM 1472 C CD . GLN B 1 58 ? 20.058 -11.736 20.440 1.00 25.70 ? ? ? ? ? ? 58 GLN B CD 1 +ATOM 1473 O OE1 . GLN B 1 58 ? 19.913 -12.907 20.192 1.00 33.64 ? ? ? ? ? ? 58 GLN B OE1 1 +ATOM 1474 N NE2 . GLN B 1 58 ? 19.283 -11.126 21.315 1.00 30.17 ? ? ? ? ? ? 58 GLN B NE2 1 +ATOM 1475 H H . GLN B 1 58 ? 21.408 -11.533 15.773 1.00 15.00 ? ? ? ? ? ? 58 GLN B H 1 +ATOM 1476 H HE21 . GLN B 1 58 ? 18.621 -11.771 21.684 1.00 15.00 ? ? ? ? ? ? 58 GLN B HE21 1 +ATOM 1477 H HE22 . GLN B 1 58 ? 19.338 -10.167 21.559 1.00 15.00 ? ? ? ? ? ? 58 GLN B HE22 1 +ATOM 1478 N N . TYR B 1 59 ? 23.236 -8.475 18.241 1.00 11.16 ? ? ? ? ? ? 59 TYR B N 1 +ATOM 1479 C CA . TYR B 1 59 ? 24.436 -8.173 19.042 1.00 7.33 ? ? ? ? ? ? 59 TYR B CA 1 +ATOM 1480 C C . TYR B 1 59 ? 24.160 -7.804 20.484 1.00 7.47 ? ? ? ? ? ? 59 TYR B C 1 +ATOM 1481 O O . TYR B 1 59 ? 23.241 -7.060 20.840 1.00 10.58 ? ? ? ? ? ? 59 TYR B O 1 +ATOM 1482 C CB . TYR B 1 59 ? 25.371 -7.105 18.436 1.00 4.61 ? ? ? ? ? ? 59 TYR B CB 1 +ATOM 1483 C CG . TYR B 1 59 ? 25.778 -7.327 16.992 1.00 2.00 ? ? ? ? ? ? 59 TYR B CG 1 +ATOM 1484 C CD1 . TYR B 1 59 ? 24.840 -7.147 15.954 1.00 3.44 ? ? ? ? ? ? 59 TYR B CD1 1 +ATOM 1485 C CD2 . TYR B 1 59 ? 27.113 -7.657 16.698 1.00 2.40 ? ? ? ? ? ? 59 TYR B CD2 1 +ATOM 1486 C CE1 . TYR B 1 59 ? 25.261 -7.249 14.608 1.00 7.27 ? ? ? ? ? ? 59 TYR B CE1 1 +ATOM 1487 C CE2 . TYR B 1 59 ? 27.540 -7.767 15.353 1.00 2.54 ? ? ? ? ? ? 59 TYR B CE2 1 +ATOM 1488 C CZ . TYR B 1 59 ? 26.618 -7.530 14.311 1.00 7.43 ? ? ? ? ? ? 59 TYR B CZ 1 +ATOM 1489 O OH . TYR B 1 59 ? 27.042 -7.529 12.985 1.00 11.55 ? ? ? ? ? ? 59 TYR B OH 1 +ATOM 1490 H H . TYR B 1 59 ? 22.548 -7.789 17.999 1.00 15.00 ? ? ? ? ? ? 59 TYR B H 1 +ATOM 1491 H HH . TYR B 1 59 ? 27.983 -7.657 12.954 1.00 15.00 ? ? ? ? ? ? 59 TYR B HH 1 +ATOM 1492 N N . ASP B 1 60 ? 25.010 -8.383 21.321 1.00 5.52 ? ? ? ? ? ? 60 ASP B N 1 +ATOM 1493 C CA . ASP B 1 60 ? 24.952 -8.043 22.752 1.00 11.07 ? ? ? ? ? ? 60 ASP B CA 1 +ATOM 1494 C C . ASP B 1 60 ? 25.991 -7.060 23.263 1.00 13.43 ? ? ? ? ? ? 60 ASP B C 1 +ATOM 1495 O O . ASP B 1 60 ? 27.047 -6.935 22.676 1.00 20.73 ? ? ? ? ? ? 60 ASP B O 1 +ATOM 1496 C CB . ASP B 1 60 ? 25.082 -9.282 23.617 1.00 15.28 ? ? ? ? ? ? 60 ASP B CB 1 +ATOM 1497 C CG . ASP B 1 60 ? 23.954 -10.241 23.296 1.00 18.44 ? ? ? ? ? ? 60 ASP B CG 1 +ATOM 1498 O OD1 . ASP B 1 60 ? 22.860 -9.744 23.015 1.00 16.85 ? ? ? ? ? ? 60 ASP B OD1 1 +ATOM 1499 O OD2 . ASP B 1 60 ? 24.181 -11.465 23.320 1.00 19.95 ? ? ? ? ? ? 60 ASP B OD2 1 +ATOM 1500 H H . ASP B 1 60 ? 25.741 -8.939 20.927 1.00 15.00 ? ? ? ? ? ? 60 ASP B H 1 +ATOM 1501 N N . GLN B 1 61 ? 25.680 -6.359 24.359 1.00 11.99 ? ? ? ? ? ? 61 GLN B N 1 +ATOM 1502 C CA . GLN B 1 61 ? 26.655 -5.387 24.929 1.00 14.03 ? ? ? ? ? ? 61 GLN B CA 1 +ATOM 1503 C C . GLN B 1 61 ? 27.100 -4.131 24.148 1.00 12.65 ? ? ? ? ? ? 61 GLN B C 1 +ATOM 1504 O O . GLN B 1 61 ? 28.092 -3.460 24.385 1.00 9.03 ? ? ? ? ? ? 61 GLN B O 1 +ATOM 1505 C CB . GLN B 1 61 ? 27.843 -6.114 25.593 1.00 24.34 ? ? ? ? ? ? 61 GLN B CB 1 +ATOM 1506 C CG . GLN B 1 61 ? 27.531 -6.962 26.835 1.00 35.39 ? ? ? ? ? ? 61 GLN B CG 1 +ATOM 1507 C CD . GLN B 1 61 ? 26.983 -6.063 27.946 1.00 47.74 ? ? ? ? ? ? 61 GLN B CD 1 +ATOM 1508 O OE1 . GLN B 1 61 ? 26.140 -5.195 27.786 1.00 51.02 ? ? ? ? ? ? 61 GLN B OE1 1 +ATOM 1509 N NE2 . GLN B 1 61 ? 27.471 -6.306 29.148 1.00 55.07 ? ? ? ? ? ? 61 GLN B NE2 1 +ATOM 1510 H H . GLN B 1 61 ? 24.795 -6.513 24.791 1.00 15.00 ? ? ? ? ? ? 61 GLN B H 1 +ATOM 1511 H HE21 . GLN B 1 61 ? 27.031 -5.678 29.788 1.00 15.00 ? ? ? ? ? ? 61 GLN B HE21 1 +ATOM 1512 H HE22 . GLN B 1 61 ? 28.160 -6.986 29.364 1.00 15.00 ? ? ? ? ? ? 61 GLN B HE22 1 +ATOM 1513 N N . ILE B 1 62 ? 26.251 -3.796 23.179 1.00 15.70 ? ? ? ? ? ? 62 ILE B N 1 +ATOM 1514 C CA . ILE B 1 62 ? 26.481 -2.555 22.443 1.00 12.03 ? ? ? ? ? ? 62 ILE B CA 1 +ATOM 1515 C C . ILE B 1 62 ? 26.180 -1.354 23.300 1.00 14.39 ? ? ? ? ? ? 62 ILE B C 1 +ATOM 1516 O O . ILE B 1 62 ? 25.092 -1.272 23.856 1.00 12.23 ? ? ? ? ? ? 62 ILE B O 1 +ATOM 1517 C CB . ILE B 1 62 ? 25.600 -2.457 21.182 1.00 5.49 ? ? ? ? ? ? 62 ILE B CB 1 +ATOM 1518 C CG1 . ILE B 1 62 ? 25.559 -3.776 20.432 1.00 5.59 ? ? ? ? ? ? 62 ILE B CG1 1 +ATOM 1519 C CG2 . ILE B 1 62 ? 26.128 -1.327 20.278 1.00 3.31 ? ? ? ? ? ? 62 ILE B CG2 1 +ATOM 1520 C CD1 . ILE B 1 62 ? 26.921 -4.324 19.958 1.00 7.41 ? ? ? ? ? ? 62 ILE B CD1 1 +ATOM 1521 H H . ILE B 1 62 ? 25.381 -4.278 23.102 1.00 15.00 ? ? ? ? ? ? 62 ILE B H 1 +ATOM 1522 N N . PRO B 1 63 ? 27.164 -0.428 23.385 1.00 15.61 ? ? ? ? ? ? 63 PRO B N 1 +ATOM 1523 C CA . PRO B 1 63 ? 26.906 0.898 23.941 1.00 13.48 ? ? ? ? ? ? 63 PRO B CA 1 +ATOM 1524 C C . PRO B 1 63 ? 26.293 1.795 22.909 1.00 13.82 ? ? ? ? ? ? 63 PRO B C 1 +ATOM 1525 O O . PRO B 1 63 ? 26.734 1.853 21.766 1.00 15.11 ? ? ? ? ? ? 63 PRO B O 1 +ATOM 1526 C CB . PRO B 1 63 ? 28.303 1.391 24.340 1.00 14.26 ? ? ? ? ? ? 63 PRO B CB 1 +ATOM 1527 C CG . PRO B 1 63 ? 29.197 0.154 24.279 1.00 19.67 ? ? ? ? ? ? 63 PRO B CG 1 +ATOM 1528 C CD . PRO B 1 63 ? 28.572 -0.618 23.111 1.00 19.48 ? ? ? ? ? ? 63 PRO B CD 1 +ATOM 1529 N N . VAL B 1 64 ? 25.233 2.488 23.357 1.00 14.77 ? ? ? ? ? ? 64 VAL B N 1 +ATOM 1530 C CA . VAL B 1 64 ? 24.634 3.508 22.485 1.00 13.40 ? ? ? ? ? ? 64 VAL B CA 1 +ATOM 1531 C C . VAL B 1 64 ? 24.339 4.803 23.230 1.00 15.46 ? ? ? ? ? ? 64 VAL B C 1 +ATOM 1532 O O . VAL B 1 64 ? 23.944 4.810 24.387 1.00 16.60 ? ? ? ? ? ? 64 VAL B O 1 +ATOM 1533 C CB . VAL B 1 64 ? 23.501 2.988 21.503 1.00 11.21 ? ? ? ? ? ? 64 VAL B CB 1 +ATOM 1534 C CG1 . VAL B 1 64 ? 22.926 1.611 21.779 1.00 3.55 ? ? ? ? ? ? 64 VAL B CG1 1 +ATOM 1535 C CG2 . VAL B 1 64 ? 22.439 4.014 21.112 1.00 8.00 ? ? ? ? ? ? 64 VAL B CG2 1 +ATOM 1536 H H . VAL B 1 64 ? 24.918 2.327 24.293 1.00 15.00 ? ? ? ? ? ? 64 VAL B H 1 +ATOM 1537 N N . GLU B 1 65 ? 24.606 5.911 22.539 1.00 16.43 ? ? ? ? ? ? 65 GLU B N 1 +ATOM 1538 C CA . GLU B 1 65 ? 24.175 7.152 23.161 1.00 18.66 ? ? ? ? ? ? 65 GLU B CA 1 +ATOM 1539 C C . GLU B 1 65 ? 22.979 7.838 22.511 1.00 19.98 ? ? ? ? ? ? 65 GLU B C 1 +ATOM 1540 O O . GLU B 1 65 ? 22.969 8.218 21.351 1.00 20.05 ? ? ? ? ? ? 65 GLU B O 1 +ATOM 1541 C CB . GLU B 1 65 ? 25.336 8.115 23.378 1.00 21.70 ? ? ? ? ? ? 65 GLU B CB 1 +ATOM 1542 C CG . GLU B 1 65 ? 24.919 9.208 24.341 1.00 29.65 ? ? ? ? ? ? 65 GLU B CG 1 +ATOM 1543 C CD . GLU B 1 65 ? 26.083 10.070 24.736 1.00 36.74 ? ? ? ? ? ? 65 GLU B CD 1 +ATOM 1544 O OE1 . GLU B 1 65 ? 26.320 11.055 24.038 1.00 38.38 ? ? ? ? ? ? 65 GLU B OE1 1 +ATOM 1545 O OE2 . GLU B 1 65 ? 26.723 9.772 25.754 1.00 42.36 ? ? ? ? ? ? 65 GLU B OE2 1 +ATOM 1546 H H . GLU B 1 65 ? 25.013 5.841 21.629 1.00 15.00 ? ? ? ? ? ? 65 GLU B H 1 +ATOM 1547 N N . ILE B 1 66 ? 21.940 7.962 23.333 1.00 18.67 ? ? ? ? ? ? 66 ILE B N 1 +ATOM 1548 C CA . ILE B 1 66 ? 20.655 8.450 22.838 1.00 21.20 ? ? ? ? ? ? 66 ILE B CA 1 +ATOM 1549 C C . ILE B 1 66 ? 20.204 9.728 23.515 1.00 22.01 ? ? ? ? ? ? 66 ILE B C 1 +ATOM 1550 O O . ILE B 1 66 ? 20.030 9.800 24.731 1.00 17.93 ? ? ? ? ? ? 66 ILE B O 1 +ATOM 1551 C CB . ILE B 1 66 ? 19.633 7.322 22.954 1.00 29.17 ? ? ? ? ? ? 66 ILE B CB 1 +ATOM 1552 C CG1 . ILE B 1 66 ? 18.184 7.765 22.953 1.00 29.67 ? ? ? ? ? ? 66 ILE B CG1 1 +ATOM 1553 C CG2 . ILE B 1 66 ? 19.883 6.414 24.176 1.00 36.07 ? ? ? ? ? ? 66 ILE B CG2 1 +ATOM 1554 C CD1 . ILE B 1 66 ? 17.378 6.470 22.919 1.00 37.39 ? ? ? ? ? ? 66 ILE B CD1 1 +ATOM 1555 H H . ILE B 1 66 ? 22.084 7.662 24.277 1.00 15.00 ? ? ? ? ? ? 66 ILE B H 1 +ATOM 1556 N N . CYS B 1 67 ? 20.130 10.773 22.653 1.00 21.67 ? ? ? ? ? ? 67 CYS B N 1 +ATOM 1557 C CA . CYS B 1 67 ? 19.868 12.129 23.183 1.00 24.86 ? ? ? ? ? ? 67 CYS B CA 1 +ATOM 1558 C C . CYS B 1 67 ? 20.683 12.628 24.398 1.00 27.18 ? ? ? ? ? ? 67 CYS B C 1 +ATOM 1559 O O . CYS B 1 67 ? 20.158 13.217 25.331 1.00 32.07 ? ? ? ? ? ? 67 CYS B O 1 +ATOM 1560 C CB . CYS B 1 67 ? 18.379 12.323 23.536 1.00 26.01 ? ? ? ? ? ? 67 CYS B CB 1 +ATOM 1561 S SG . CYS B 1 67 ? 17.441 13.262 22.312 1.00 31.34 ? ? ? ? ? ? 67 CYS B SG 1 +ATOM 1562 H H . CYS B 1 67 ? 20.189 10.569 21.672 1.00 15.00 ? ? ? ? ? ? 67 CYS B H 1 +ATOM 1563 N N . GLY B 1 68 ? 21.999 12.356 24.407 1.00 25.32 ? ? ? ? ? ? 68 GLY B N 1 +ATOM 1564 C CA . GLY B 1 68 ? 22.716 12.679 25.663 1.00 19.59 ? ? ? ? ? ? 68 GLY B CA 1 +ATOM 1565 C C . GLY B 1 68 ? 22.794 11.604 26.757 1.00 19.67 ? ? ? ? ? ? 68 GLY B C 1 +ATOM 1566 O O . GLY B 1 68 ? 23.457 11.726 27.772 1.00 20.47 ? ? ? ? ? ? 68 GLY B O 1 +ATOM 1567 H H . GLY B 1 68 ? 22.406 11.891 23.626 1.00 15.00 ? ? ? ? ? ? 68 GLY B H 1 +ATOM 1568 N N . HIS B 1 69 ? 22.110 10.491 26.512 1.00 19.22 ? ? ? ? ? ? 69 HIS B N 1 +ATOM 1569 C CA . HIS B 1 69 ? 22.143 9.499 27.575 1.00 21.19 ? ? ? ? ? ? 69 HIS B CA 1 +ATOM 1570 C C . HIS B 1 69 ? 22.852 8.196 27.168 1.00 23.33 ? ? ? ? ? ? 69 HIS B C 1 +ATOM 1571 O O . HIS B 1 69 ? 22.624 7.632 26.113 1.00 25.34 ? ? ? ? ? ? 69 HIS B O 1 +ATOM 1572 C CB . HIS B 1 69 ? 20.703 9.191 28.092 1.00 25.56 ? ? ? ? ? ? 69 HIS B CB 1 +ATOM 1573 C CG . HIS B 1 69 ? 19.843 10.386 28.515 1.00 28.62 ? ? ? ? ? ? 69 HIS B CG 1 +ATOM 1574 N ND1 . HIS B 1 69 ? 19.325 10.554 29.754 1.00 28.41 ? ? ? ? ? ? 69 HIS B ND1 1 +ATOM 1575 C CD2 . HIS B 1 69 ? 19.453 11.490 27.750 1.00 30.83 ? ? ? ? ? ? 69 HIS B CD2 1 +ATOM 1576 C CE1 . HIS B 1 69 ? 18.641 11.738 29.777 1.00 30.39 ? ? ? ? ? ? 69 HIS B CE1 1 +ATOM 1577 N NE2 . HIS B 1 69 ? 18.726 12.315 28.538 1.00 33.59 ? ? ? ? ? ? 69 HIS B NE2 1 +ATOM 1578 H H . HIS B 1 69 ? 21.463 10.446 25.757 1.00 15.00 ? ? ? ? ? ? 69 HIS B H 1 +ATOM 1579 H HD1 . HIS B 1 69 ? 19.357 9.932 30.504 1.00 15.00 ? ? ? ? ? ? 69 HIS B HD1 1 +ATOM 1580 N N . LYS B 1 70 ? 23.683 7.692 28.070 1.00 26.10 ? ? ? ? ? ? 70 LYS B N 1 +ATOM 1581 C CA . LYS B 1 70 ? 24.147 6.296 27.941 1.00 26.44 ? ? ? ? ? ? 70 LYS B CA 1 +ATOM 1582 C C . LYS B 1 70 ? 23.153 5.138 28.154 1.00 24.20 ? ? ? ? ? ? 70 LYS B C 1 +ATOM 1583 O O . LYS B 1 70 ? 22.630 4.904 29.238 1.00 22.46 ? ? ? ? ? ? 70 LYS B O 1 +ATOM 1584 C CB . LYS B 1 70 ? 25.305 5.947 28.897 1.00 32.97 ? ? ? ? ? ? 70 LYS B CB 1 +ATOM 1585 C CG . LYS B 1 70 ? 25.920 7.049 29.766 1.00 45.39 ? ? ? ? ? ? 70 LYS B CG 1 +ATOM 1586 C CD . LYS B 1 70 ? 27.070 7.863 29.144 1.00 55.83 ? ? ? ? ? ? 70 LYS B CD 1 +ATOM 1587 C CE . LYS B 1 70 ? 27.628 8.851 30.192 1.00 61.60 ? ? ? ? ? ? 70 LYS B CE 1 +ATOM 1588 N NZ . LYS B 1 70 ? 29.049 9.144 29.936 1.00 66.82 ? ? ? ? ? ? 70 LYS B NZ 1 +ATOM 1589 H H . LYS B 1 70 ? 23.780 8.222 28.908 1.00 15.00 ? ? ? ? ? ? 70 LYS B H 1 +ATOM 1590 H HZ1 . LYS B 1 70 ? 29.401 8.506 29.193 1.00 15.00 ? ? ? ? ? ? 70 LYS B HZ1 1 +ATOM 1591 H HZ2 . LYS B 1 70 ? 29.168 10.130 29.630 1.00 15.00 ? ? ? ? ? ? 70 LYS B HZ2 1 +ATOM 1592 H HZ3 . LYS B 1 70 ? 29.597 8.979 30.806 1.00 15.00 ? ? ? ? ? ? 70 LYS B HZ3 1 +ATOM 1593 N N . ALA B 1 71 ? 23.009 4.349 27.090 1.00 21.63 ? ? ? ? ? ? 71 ALA B N 1 +ATOM 1594 C CA . ALA B 1 71 ? 22.576 2.978 27.368 1.00 18.01 ? ? ? ? ? ? 71 ALA B CA 1 +ATOM 1595 C C . ALA B 1 71 ? 23.596 1.930 26.894 1.00 16.20 ? ? ? ? ? ? 71 ALA B C 1 +ATOM 1596 O O . ALA B 1 71 ? 24.524 2.199 26.131 1.00 17.84 ? ? ? ? ? ? 71 ALA B O 1 +ATOM 1597 C CB . ALA B 1 71 ? 21.223 2.724 26.702 1.00 15.87 ? ? ? ? ? ? 71 ALA B CB 1 +ATOM 1598 H H . ALA B 1 71 ? 23.336 4.643 26.191 1.00 15.00 ? ? ? ? ? ? 71 ALA B H 1 +ATOM 1599 N N . ILE B 1 72 ? 23.382 0.708 27.363 1.00 13.59 ? ? ? ? ? ? 72 ILE B N 1 +ATOM 1600 C CA . ILE B 1 72 ? 24.104 -0.478 26.873 1.00 15.46 ? ? ? ? ? ? 72 ILE B CA 1 +ATOM 1601 C C . ILE B 1 72 ? 23.229 -1.722 26.797 1.00 13.71 ? ? ? ? ? ? 72 ILE B C 1 +ATOM 1602 O O . ILE B 1 72 ? 22.621 -2.213 27.750 1.00 16.33 ? ? ? ? ? ? 72 ILE B O 1 +ATOM 1603 C CB . ILE B 1 72 ? 25.348 -0.855 27.715 1.00 20.10 ? ? ? ? ? ? 72 ILE B CB 1 +ATOM 1604 C CG1 . ILE B 1 72 ? 26.167 0.377 28.088 1.00 26.26 ? ? ? ? ? ? 72 ILE B CG1 1 +ATOM 1605 C CG2 . ILE B 1 72 ? 26.252 -1.857 26.968 1.00 20.07 ? ? ? ? ? ? 72 ILE B CG2 1 +ATOM 1606 C CD1 . ILE B 1 72 ? 27.266 0.065 29.097 1.00 32.25 ? ? ? ? ? ? 72 ILE B CD1 1 +ATOM 1607 H H . ILE B 1 72 ? 22.708 0.658 28.101 1.00 15.00 ? ? ? ? ? ? 72 ILE B H 1 +ATOM 1608 N N . GLY B 1 73 ? 23.201 -2.239 25.596 1.00 11.67 ? ? ? ? ? ? 73 GLY B N 1 +ATOM 1609 C CA . GLY B 1 73 ? 22.655 -3.574 25.482 1.00 8.87 ? ? ? ? ? ? 73 GLY B CA 1 +ATOM 1610 C C . GLY B 1 73 ? 22.522 -4.085 24.067 1.00 6.58 ? ? ? ? ? ? 73 GLY B C 1 +ATOM 1611 O O . GLY B 1 73 ? 23.303 -3.787 23.177 1.00 5.20 ? ? ? ? ? ? 73 GLY B O 1 +ATOM 1612 H H . GLY B 1 73 ? 23.670 -1.766 24.857 1.00 15.00 ? ? ? ? ? ? 73 GLY B H 1 +ATOM 1613 N N . THR B 1 74 ? 21.478 -4.898 23.926 1.00 6.84 ? ? ? ? ? ? 74 THR B N 1 +ATOM 1614 C CA . THR B 1 74 ? 21.186 -5.594 22.663 1.00 11.08 ? ? ? ? ? ? 74 THR B CA 1 +ATOM 1615 C C . THR B 1 74 ? 20.493 -4.851 21.500 1.00 14.36 ? ? ? ? ? ? 74 THR B C 1 +ATOM 1616 O O . THR B 1 74 ? 19.344 -4.398 21.562 1.00 14.96 ? ? ? ? ? ? 74 THR B O 1 +ATOM 1617 C CB . THR B 1 74 ? 20.471 -6.889 23.036 1.00 8.01 ? ? ? ? ? ? 74 THR B CB 1 +ATOM 1618 O OG1 . THR B 1 74 ? 21.331 -7.561 23.970 1.00 8.78 ? ? ? ? ? ? 74 THR B OG1 1 +ATOM 1619 C CG2 . THR B 1 74 ? 20.123 -7.812 21.873 1.00 3.87 ? ? ? ? ? ? 74 THR B CG2 1 +ATOM 1620 H H . THR B 1 74 ? 20.903 -5.031 24.731 1.00 15.00 ? ? ? ? ? ? 74 THR B H 1 +ATOM 1621 H HG1 . THR B 1 74 ? 22.051 -7.890 23.448 1.00 15.00 ? ? ? ? ? ? 74 THR B HG1 1 +ATOM 1622 N N . VAL B 1 75 ? 21.280 -4.770 20.393 1.00 14.46 ? ? ? ? ? ? 75 VAL B N 1 +ATOM 1623 C CA . VAL B 1 75 ? 20.635 -4.294 19.154 1.00 10.05 ? ? ? ? ? ? 75 VAL B CA 1 +ATOM 1624 C C . VAL B 1 75 ? 20.396 -5.411 18.134 1.00 11.79 ? ? ? ? ? ? 75 VAL B C 1 +ATOM 1625 O O . VAL B 1 75 ? 21.175 -6.357 18.057 1.00 16.56 ? ? ? ? ? ? 75 VAL B O 1 +ATOM 1626 C CB . VAL B 1 75 ? 21.386 -3.109 18.544 1.00 5.97 ? ? ? ? ? ? 75 VAL B CB 1 +ATOM 1627 C CG1 . VAL B 1 75 ? 21.650 -2.004 19.576 1.00 2.00 ? ? ? ? ? ? 75 VAL B CG1 1 +ATOM 1628 C CG2 . VAL B 1 75 ? 22.664 -3.549 17.855 1.00 7.87 ? ? ? ? ? ? 75 VAL B CG2 1 +ATOM 1629 H H . VAL B 1 75 ? 22.195 -5.175 20.425 1.00 15.00 ? ? ? ? ? ? 75 VAL B H 1 +ATOM 1630 N N . LEU B 1 76 ? 19.274 -5.301 17.401 1.00 6.91 ? ? ? ? ? ? 76 LEU B N 1 +ATOM 1631 C CA . LEU B 1 76 ? 19.017 -6.238 16.306 1.00 3.96 ? ? ? ? ? ? 76 LEU B CA 1 +ATOM 1632 C C . LEU B 1 76 ? 19.276 -5.547 14.995 1.00 5.63 ? ? ? ? ? ? 76 LEU B C 1 +ATOM 1633 O O . LEU B 1 76 ? 18.674 -4.505 14.789 1.00 6.81 ? ? ? ? ? ? 76 LEU B O 1 +ATOM 1634 C CB . LEU B 1 76 ? 17.553 -6.658 16.291 1.00 5.49 ? ? ? ? ? ? 76 LEU B CB 1 +ATOM 1635 C CG . LEU B 1 76 ? 17.041 -7.743 17.238 1.00 6.70 ? ? ? ? ? ? 76 LEU B CG 1 +ATOM 1636 C CD1 . LEU B 1 76 ? 17.919 -8.081 18.439 1.00 9.14 ? ? ? ? ? ? 76 LEU B CD1 1 +ATOM 1637 C CD2 . LEU B 1 76 ? 15.677 -7.341 17.731 1.00 3.57 ? ? ? ? ? ? 76 LEU B CD2 1 +ATOM 1638 H H . LEU B 1 76 ? 18.652 -4.536 17.575 1.00 15.00 ? ? ? ? ? ? 76 LEU B H 1 +ATOM 1639 N N . VAL B 1 77 ? 20.185 -6.095 14.140 1.00 9.13 ? ? ? ? ? ? 77 VAL B N 1 +ATOM 1640 C CA . VAL B 1 77 ? 20.380 -5.444 12.823 1.00 5.95 ? ? ? ? ? ? 77 VAL B CA 1 +ATOM 1641 C C . VAL B 1 77 ? 19.859 -6.220 11.609 1.00 8.66 ? ? ? ? ? ? 77 VAL B C 1 +ATOM 1642 O O . VAL B 1 77 ? 19.810 -7.436 11.611 1.00 12.59 ? ? ? ? ? ? 77 VAL B O 1 +ATOM 1643 C CB . VAL B 1 77 ? 21.782 -4.796 12.651 1.00 7.05 ? ? ? ? ? ? 77 VAL B CB 1 +ATOM 1644 C CG1 . VAL B 1 77 ? 22.481 -4.562 14.004 1.00 6.71 ? ? ? ? ? ? 77 VAL B CG1 1 +ATOM 1645 C CG2 . VAL B 1 77 ? 22.699 -5.406 11.601 1.00 4.38 ? ? ? ? ? ? 77 VAL B CG2 1 +ATOM 1646 H H . VAL B 1 77 ? 20.697 -6.896 14.446 1.00 15.00 ? ? ? ? ? ? 77 VAL B H 1 +ATOM 1647 N N . GLY B 1 78 ? 19.381 -5.499 10.595 1.00 8.15 ? ? ? ? ? ? 78 GLY B N 1 +ATOM 1648 C CA . GLY B 1 78 ? 18.603 -6.169 9.534 1.00 3.81 ? ? ? ? ? ? 78 GLY B CA 1 +ATOM 1649 C C . GLY B 1 78 ? 17.921 -5.111 8.659 1.00 5.65 ? ? ? ? ? ? 78 GLY B C 1 +ATOM 1650 O O . GLY B 1 78 ? 18.077 -3.923 8.917 1.00 5.08 ? ? ? ? ? ? 78 GLY B O 1 +ATOM 1651 H H . GLY B 1 78 ? 19.401 -4.503 10.690 1.00 15.00 ? ? ? ? ? ? 78 GLY B H 1 +ATOM 1652 N N . PRO B 1 79 ? 17.158 -5.518 7.614 1.00 5.18 ? ? ? ? ? ? 79 PRO B N 1 +ATOM 1653 C CA . PRO B 1 79 ? 16.657 -4.546 6.644 1.00 2.92 ? ? ? ? ? ? 79 PRO B CA 1 +ATOM 1654 C C . PRO B 1 79 ? 15.390 -3.757 7.007 1.00 9.24 ? ? ? ? ? ? 79 PRO B C 1 +ATOM 1655 O O . PRO B 1 79 ? 14.341 -3.835 6.391 1.00 14.52 ? ? ? ? ? ? 79 PRO B O 1 +ATOM 1656 C CB . PRO B 1 79 ? 16.548 -5.391 5.396 1.00 2.02 ? ? ? ? ? ? 79 PRO B CB 1 +ATOM 1657 C CG . PRO B 1 79 ? 16.054 -6.736 5.949 1.00 2.52 ? ? ? ? ? ? 79 PRO B CG 1 +ATOM 1658 C CD . PRO B 1 79 ? 16.794 -6.881 7.274 1.00 4.34 ? ? ? ? ? ? 79 PRO B CD 1 +ATOM 1659 N N . THR B 1 80 ? 15.532 -2.889 8.004 1.00 10.43 ? ? ? ? ? ? 80 THR B N 1 +ATOM 1660 C CA . THR B 1 80 ? 14.414 -1.968 8.250 1.00 10.86 ? ? ? ? ? ? 80 THR B CA 1 +ATOM 1661 C C . THR B 1 80 ? 14.497 -0.600 7.557 1.00 13.07 ? ? ? ? ? ? 80 THR B C 1 +ATOM 1662 O O . THR B 1 80 ? 15.558 0.016 7.484 1.00 19.01 ? ? ? ? ? ? 80 THR B O 1 +ATOM 1663 C CB . THR B 1 80 ? 14.277 -1.755 9.751 1.00 9.00 ? ? ? ? ? ? 80 THR B CB 1 +ATOM 1664 O OG1 . THR B 1 80 ? 13.272 -0.766 10.037 1.00 10.99 ? ? ? ? ? ? 80 THR B OG1 1 +ATOM 1665 C CG2 . THR B 1 80 ? 15.638 -1.318 10.308 1.00 12.20 ? ? ? ? ? ? 80 THR B CG2 1 +ATOM 1666 H H . THR B 1 80 ? 16.405 -2.887 8.491 1.00 15.00 ? ? ? ? ? ? 80 THR B H 1 +ATOM 1667 H HG1 . THR B 1 80 ? 13.456 -0.448 10.925 1.00 15.00 ? ? ? ? ? ? 80 THR B HG1 1 +ATOM 1668 N N . PRO B 1 81 ? 13.357 -0.063 7.046 1.00 12.42 ? ? ? ? ? ? 81 PRO B N 1 +ATOM 1669 C CA . PRO B 1 81 ? 13.412 1.341 6.572 1.00 13.21 ? ? ? ? ? ? 81 PRO B CA 1 +ATOM 1670 C C . PRO B 1 81 ? 13.581 2.406 7.662 1.00 12.96 ? ? ? ? ? ? 81 PRO B C 1 +ATOM 1671 O O . PRO B 1 81 ? 13.811 3.579 7.400 1.00 11.59 ? ? ? ? ? ? 81 PRO B O 1 +ATOM 1672 C CB . PRO B 1 81 ? 12.105 1.495 5.796 1.00 11.64 ? ? ? ? ? ? 81 PRO B CB 1 +ATOM 1673 C CG . PRO B 1 81 ? 11.143 0.471 6.400 1.00 8.50 ? ? ? ? ? ? 81 PRO B CG 1 +ATOM 1674 C CD . PRO B 1 81 ? 12.053 -0.684 6.808 1.00 11.98 ? ? ? ? ? ? 81 PRO B CD 1 +ATOM 1675 N N . VAL B 1 82 ? 13.446 1.928 8.912 1.00 13.68 ? ? ? ? ? ? 82 VAL B N 1 +ATOM 1676 C CA . VAL B 1 82 ? 13.561 2.838 10.064 1.00 13.36 ? ? ? ? ? ? 82 VAL B CA 1 +ATOM 1677 C C . VAL B 1 82 ? 14.236 2.271 11.334 1.00 13.68 ? ? ? ? ? ? 82 VAL B C 1 +ATOM 1678 O O . VAL B 1 82 ? 14.088 1.127 11.760 1.00 16.22 ? ? ? ? ? ? 82 VAL B O 1 +ATOM 1679 C CB . VAL B 1 82 ? 12.166 3.484 10.323 1.00 14.41 ? ? ? ? ? ? 82 VAL B CB 1 +ATOM 1680 C CG1 . VAL B 1 82 ? 11.063 2.448 10.552 1.00 15.43 ? ? ? ? ? ? 82 VAL B CG1 1 +ATOM 1681 C CG2 . VAL B 1 82 ? 12.195 4.590 11.382 1.00 11.95 ? ? ? ? ? ? 82 VAL B CG2 1 +ATOM 1682 H H . VAL B 1 82 ? 13.191 0.971 9.049 1.00 15.00 ? ? ? ? ? ? 82 VAL B H 1 +ATOM 1683 N N . ASN B 1 83 ? 15.025 3.157 11.932 1.00 12.01 ? ? ? ? ? ? 83 ASN B N 1 +ATOM 1684 C CA . ASN B 1 83 ? 15.666 2.791 13.194 1.00 10.29 ? ? ? ? ? ? 83 ASN B CA 1 +ATOM 1685 C C . ASN B 1 83 ? 14.749 2.975 14.382 1.00 10.32 ? ? ? ? ? ? 83 ASN B C 1 +ATOM 1686 O O . ASN B 1 83 ? 14.326 4.076 14.683 1.00 10.57 ? ? ? ? ? ? 83 ASN B O 1 +ATOM 1687 C CB . ASN B 1 83 ? 16.893 3.665 13.454 1.00 12.27 ? ? ? ? ? ? 83 ASN B CB 1 +ATOM 1688 C CG . ASN B 1 83 ? 18.006 3.484 12.423 1.00 15.73 ? ? ? ? ? ? 83 ASN B CG 1 +ATOM 1689 O OD1 . ASN B 1 83 ? 18.331 2.413 11.945 1.00 15.61 ? ? ? ? ? ? 83 ASN B OD1 1 +ATOM 1690 N ND2 . ASN B 1 83 ? 18.625 4.608 12.090 1.00 14.21 ? ? ? ? ? ? 83 ASN B ND2 1 +ATOM 1691 H H . ASN B 1 83 ? 15.112 4.055 11.508 1.00 15.00 ? ? ? ? ? ? 83 ASN B H 1 +ATOM 1692 H HD21 . ASN B 1 83 ? 19.364 4.496 11.434 1.00 15.00 ? ? ? ? ? ? 83 ASN B HD21 1 +ATOM 1693 H HD22 . ASN B 1 83 ? 18.324 5.482 12.478 1.00 15.00 ? ? ? ? ? ? 83 ASN B HD22 1 +ATOM 1694 N N . ILE B 1 84 ? 14.477 1.868 15.060 1.00 9.64 ? ? ? ? ? ? 84 ILE B N 1 +ATOM 1695 C CA . ILE B 1 84 ? 13.566 1.901 16.204 1.00 6.41 ? ? ? ? ? ? 84 ILE B CA 1 +ATOM 1696 C C . ILE B 1 84 ? 14.247 1.541 17.523 1.00 4.30 ? ? ? ? ? ? 84 ILE B C 1 +ATOM 1697 O O . ILE B 1 84 ? 14.832 0.478 17.661 1.00 2.00 ? ? ? ? ? ? 84 ILE B O 1 +ATOM 1698 C CB . ILE B 1 84 ? 12.385 0.935 15.879 1.00 10.02 ? ? ? ? ? ? 84 ILE B CB 1 +ATOM 1699 C CG1 . ILE B 1 84 ? 11.366 1.514 14.928 1.00 8.83 ? ? ? ? ? ? 84 ILE B CG1 1 +ATOM 1700 C CG2 . ILE B 1 84 ? 11.566 0.418 17.051 1.00 13.45 ? ? ? ? ? ? 84 ILE B CG2 1 +ATOM 1701 C CD1 . ILE B 1 84 ? 10.834 0.320 14.179 1.00 13.89 ? ? ? ? ? ? 84 ILE B CD1 1 +ATOM 1702 H H . ILE B 1 84 ? 14.881 1.013 14.728 1.00 15.00 ? ? ? ? ? ? 84 ILE B H 1 +ATOM 1703 N N . ILE B 1 85 ? 14.100 2.481 18.481 1.00 2.41 ? ? ? ? ? ? 85 ILE B N 1 +ATOM 1704 C CA . ILE B 1 85 ? 14.438 2.258 19.883 1.00 2.00 ? ? ? ? ? ? 85 ILE B CA 1 +ATOM 1705 C C . ILE B 1 85 ? 13.254 1.658 20.664 1.00 4.79 ? ? ? ? ? ? 85 ILE B C 1 +ATOM 1706 O O . ILE B 1 85 ? 12.239 2.291 20.911 1.00 7.52 ? ? ? ? ? ? 85 ILE B O 1 +ATOM 1707 C CB . ILE B 1 85 ? 14.902 3.586 20.555 1.00 2.00 ? ? ? ? ? ? 85 ILE B CB 1 +ATOM 1708 C CG1 . ILE B 1 85 ? 16.010 4.266 19.743 1.00 5.76 ? ? ? ? ? ? 85 ILE B CG1 1 +ATOM 1709 C CG2 . ILE B 1 85 ? 15.426 3.416 22.009 1.00 2.00 ? ? ? ? ? ? 85 ILE B CG2 1 +ATOM 1710 C CD1 . ILE B 1 85 ? 17.379 3.572 19.680 1.00 2.00 ? ? ? ? ? ? 85 ILE B CD1 1 +ATOM 1711 H H . ILE B 1 85 ? 13.583 3.301 18.224 1.00 15.00 ? ? ? ? ? ? 85 ILE B H 1 +ATOM 1712 N N . GLY B 1 86 ? 13.433 0.396 21.043 1.00 5.77 ? ? ? ? ? ? 86 GLY B N 1 +ATOM 1713 C CA . GLY B 1 86 ? 12.423 -0.340 21.815 1.00 2.16 ? ? ? ? ? ? 86 GLY B CA 1 +ATOM 1714 C C . GLY B 1 86 ? 12.550 -0.181 23.328 1.00 4.53 ? ? ? ? ? ? 86 GLY B C 1 +ATOM 1715 O O . GLY B 1 86 ? 13.503 0.392 23.860 1.00 6.76 ? ? ? ? ? ? 86 GLY B O 1 +ATOM 1716 H H . GLY B 1 86 ? 14.339 0.022 20.849 1.00 15.00 ? ? ? ? ? ? 86 GLY B H 1 +ATOM 1717 N N . ARG B 1 87 ? 11.557 -0.749 24.017 1.00 3.38 ? ? ? ? ? ? 87 ARG B N 1 +ATOM 1718 C CA . ARG B 1 87 ? 11.510 -0.755 25.479 1.00 2.44 ? ? ? ? ? ? 87 ARG B CA 1 +ATOM 1719 C C . ARG B 1 87 ? 12.725 -1.248 26.266 1.00 5.65 ? ? ? ? ? ? 87 ARG B C 1 +ATOM 1720 O O . ARG B 1 87 ? 12.956 -0.806 27.381 1.00 13.25 ? ? ? ? ? ? 87 ARG B O 1 +ATOM 1721 C CB . ARG B 1 87 ? 10.290 -1.528 25.906 1.00 7.47 ? ? ? ? ? ? 87 ARG B CB 1 +ATOM 1722 C CG . ARG B 1 87 ? 8.917 -0.959 25.491 1.00 8.87 ? ? ? ? ? ? 87 ARG B CG 1 +ATOM 1723 C CD . ARG B 1 87 ? 7.801 -2.039 25.487 1.00 7.94 ? ? ? ? ? ? 87 ARG B CD 1 +ATOM 1724 N NE . ARG B 1 87 ? 7.774 -2.654 26.794 1.00 5.94 ? ? ? ? ? ? 87 ARG B NE 1 +ATOM 1725 C CZ . ARG B 1 87 ? 8.189 -3.922 26.991 1.00 6.37 ? ? ? ? ? ? 87 ARG B CZ 1 +ATOM 1726 N NH1 . ARG B 1 87 ? 8.179 -4.849 26.041 1.00 2.00 ? ? ? ? ? ? 87 ARG B NH1 1 +ATOM 1727 N NH2 . ARG B 1 87 ? 8.637 -4.237 28.197 1.00 10.76 ? ? ? ? ? ? 87 ARG B NH2 1 +ATOM 1728 H H . ARG B 1 87 ? 10.767 -1.026 23.480 1.00 15.00 ? ? ? ? ? ? 87 ARG B H 1 +ATOM 1729 H HE . ARG B 1 87 ? 7.682 -2.071 27.601 1.00 15.00 ? ? ? ? ? ? 87 ARG B HE 1 +ATOM 1730 H HH11 . ARG B 1 87 ? 7.853 -4.627 25.123 1.00 15.00 ? ? ? ? ? ? 87 ARG B HH11 1 +ATOM 1731 H HH12 . ARG B 1 87 ? 8.503 -5.772 26.246 1.00 15.00 ? ? ? ? ? ? 87 ARG B HH12 1 +ATOM 1732 H HH21 . ARG B 1 87 ? 8.653 -3.541 28.915 1.00 15.00 ? ? ? ? ? ? 87 ARG B HH21 1 +ATOM 1733 H HH22 . ARG B 1 87 ? 8.959 -5.165 28.391 1.00 15.00 ? ? ? ? ? ? 87 ARG B HH22 1 +ATOM 1734 N N . ASN B 1 88 ? 13.552 -2.137 25.667 1.00 4.58 ? ? ? ? ? ? 88 ASN B N 1 +ATOM 1735 C CA . ASN B 1 88 ? 14.830 -2.535 26.304 1.00 4.31 ? ? ? ? ? ? 88 ASN B CA 1 +ATOM 1736 C C . ASN B 1 88 ? 15.915 -1.471 26.592 1.00 6.99 ? ? ? ? ? ? 88 ASN B C 1 +ATOM 1737 O O . ASN B 1 88 ? 16.718 -1.548 27.513 1.00 10.50 ? ? ? ? ? ? 88 ASN B O 1 +ATOM 1738 C CB . ASN B 1 88 ? 15.458 -3.730 25.561 1.00 2.00 ? ? ? ? ? ? 88 ASN B CB 1 +ATOM 1739 C CG . ASN B 1 88 ? 16.103 -3.340 24.263 1.00 4.25 ? ? ? ? ? ? 88 ASN B CG 1 +ATOM 1740 O OD1 . ASN B 1 88 ? 15.559 -2.581 23.473 1.00 6.48 ? ? ? ? ? ? 88 ASN B OD1 1 +ATOM 1741 N ND2 . ASN B 1 88 ? 17.308 -3.865 24.045 1.00 2.00 ? ? ? ? ? ? 88 ASN B ND2 1 +ATOM 1742 H H . ASN B 1 88 ? 13.264 -2.501 24.783 1.00 15.00 ? ? ? ? ? ? 88 ASN B H 1 +ATOM 1743 H HD21 . ASN B 1 88 ? 17.747 -3.648 23.174 1.00 15.00 ? ? ? ? ? ? 88 ASN B HD21 1 +ATOM 1744 H HD22 . ASN B 1 88 ? 17.759 -4.444 24.722 1.00 15.00 ? ? ? ? ? ? 88 ASN B HD22 1 +ATOM 1745 N N . LEU B 1 89 ? 15.903 -0.476 25.702 1.00 6.35 ? ? ? ? ? ? 89 LEU B N 1 +ATOM 1746 C CA . LEU B 1 89 ? 16.787 0.686 25.809 1.00 2.00 ? ? ? ? ? ? 89 LEU B CA 1 +ATOM 1747 C C . LEU B 1 89 ? 16.077 1.846 26.476 1.00 2.18 ? ? ? ? ? ? 89 LEU B C 1 +ATOM 1748 O O . LEU B 1 89 ? 16.600 2.478 27.382 1.00 4.96 ? ? ? ? ? ? 89 LEU B O 1 +ATOM 1749 C CB . LEU B 1 89 ? 17.326 1.021 24.395 1.00 3.14 ? ? ? ? ? ? 89 LEU B CB 1 +ATOM 1750 C CG . LEU B 1 89 ? 18.799 0.609 24.116 1.00 4.86 ? ? ? ? ? ? 89 LEU B CG 1 +ATOM 1751 C CD1 . LEU B 1 89 ? 19.161 -0.777 24.667 1.00 8.03 ? ? ? ? ? ? 89 LEU B CD1 1 +ATOM 1752 C CD2 . LEU B 1 89 ? 19.205 0.739 22.651 1.00 2.06 ? ? ? ? ? ? 89 LEU B CD2 1 +ATOM 1753 H H . LEU B 1 89 ? 15.259 -0.599 24.942 1.00 15.00 ? ? ? ? ? ? 89 LEU B H 1 +ATOM 1754 N N . LEU B 1 90 ? 14.800 2.061 26.082 1.00 6.66 ? ? ? ? ? ? 90 LEU B N 1 +ATOM 1755 C CA . LEU B 1 90 ? 13.932 3.133 26.689 1.00 6.20 ? ? ? ? ? ? 90 LEU B CA 1 +ATOM 1756 C C . LEU B 1 90 ? 13.854 3.200 28.214 1.00 4.35 ? ? ? ? ? ? 90 LEU B C 1 +ATOM 1757 O O . LEU B 1 90 ? 13.775 4.235 28.869 1.00 5.39 ? ? ? ? ? ? 90 LEU B O 1 +ATOM 1758 C CB . LEU B 1 90 ? 12.465 3.015 26.184 1.00 8.53 ? ? ? ? ? ? 90 LEU B CB 1 +ATOM 1759 C CG . LEU B 1 90 ? 11.936 3.857 24.981 1.00 5.53 ? ? ? ? ? ? 90 LEU B CG 1 +ATOM 1760 C CD1 . LEU B 1 90 ? 13.007 4.601 24.193 1.00 2.00 ? ? ? ? ? ? 90 LEU B CD1 1 +ATOM 1761 C CD2 . LEU B 1 90 ? 10.944 3.065 24.112 1.00 3.50 ? ? ? ? ? ? 90 LEU B CD2 1 +ATOM 1762 H H . LEU B 1 90 ? 14.483 1.528 25.293 1.00 15.00 ? ? ? ? ? ? 90 LEU B H 1 +ATOM 1763 N N . THR B 1 91 ? 13.883 2.005 28.787 1.00 5.72 ? ? ? ? ? ? 91 THR B N 1 +ATOM 1764 C CA . THR B 1 91 ? 13.936 2.005 30.248 1.00 8.62 ? ? ? ? ? ? 91 THR B CA 1 +ATOM 1765 C C . THR B 1 91 ? 15.238 2.497 30.906 1.00 12.11 ? ? ? ? ? ? 91 THR B C 1 +ATOM 1766 O O . THR B 1 91 ? 15.268 3.135 31.946 1.00 12.10 ? ? ? ? ? ? 91 THR B O 1 +ATOM 1767 C CB . THR B 1 91 ? 13.563 0.625 30.757 1.00 8.36 ? ? ? ? ? ? 91 THR B CB 1 +ATOM 1768 O OG1 . THR B 1 91 ? 14.488 -0.364 30.335 1.00 9.15 ? ? ? ? ? ? 91 THR B OG1 1 +ATOM 1769 C CG2 . THR B 1 91 ? 12.176 0.247 30.265 1.00 2.92 ? ? ? ? ? ? 91 THR B CG2 1 +ATOM 1770 H H . THR B 1 91 ? 13.883 1.154 28.259 1.00 15.00 ? ? ? ? ? ? 91 THR B H 1 +ATOM 1771 H HG1 . THR B 1 91 ? 13.997 -1.180 30.314 1.00 15.00 ? ? ? ? ? ? 91 THR B HG1 1 +ATOM 1772 N N . GLN B 1 92 ? 16.343 2.259 30.192 1.00 13.30 ? ? ? ? ? ? 92 GLN B N 1 +ATOM 1773 C CA . GLN B 1 92 ? 17.639 2.763 30.654 1.00 13.01 ? ? ? ? ? ? 92 GLN B CA 1 +ATOM 1774 C C . GLN B 1 92 ? 17.807 4.289 30.707 1.00 16.58 ? ? ? ? ? ? 92 GLN B C 1 +ATOM 1775 O O . GLN B 1 92 ? 18.555 4.840 31.504 1.00 21.33 ? ? ? ? ? ? 92 GLN B O 1 +ATOM 1776 C CB . GLN B 1 92 ? 18.749 2.149 29.811 1.00 11.12 ? ? ? ? ? ? 92 GLN B CB 1 +ATOM 1777 C CG . GLN B 1 92 ? 18.915 0.652 30.094 1.00 7.58 ? ? ? ? ? ? 92 GLN B CG 1 +ATOM 1778 C CD . GLN B 1 92 ? 20.064 0.116 29.278 1.00 7.51 ? ? ? ? ? ? 92 GLN B CD 1 +ATOM 1779 O OE1 . GLN B 1 92 ? 21.087 0.737 29.085 1.00 9.84 ? ? ? ? ? ? 92 GLN B OE1 1 +ATOM 1780 N NE2 . GLN B 1 92 ? 19.884 -1.074 28.761 1.00 6.92 ? ? ? ? ? ? 92 GLN B NE2 1 +ATOM 1781 H H . GLN B 1 92 ? 16.253 1.748 29.339 1.00 15.00 ? ? ? ? ? ? 92 GLN B H 1 +ATOM 1782 H HE21 . GLN B 1 92 ? 20.713 -1.454 28.349 1.00 15.00 ? ? ? ? ? ? 92 GLN B HE21 1 +ATOM 1783 H HE22 . GLN B 1 92 ? 18.987 -1.510 28.793 1.00 15.00 ? ? ? ? ? ? 92 GLN B HE22 1 +ATOM 1784 N N . ILE B 1 93 ? 17.045 4.968 29.837 1.00 12.87 ? ? ? ? ? ? 93 ILE B N 1 +ATOM 1785 C CA . ILE B 1 93 ? 17.188 6.422 29.880 1.00 11.98 ? ? ? ? ? ? 93 ILE B CA 1 +ATOM 1786 C C . ILE B 1 93 ? 16.200 7.226 30.748 1.00 15.56 ? ? ? ? ? ? 93 ILE B C 1 +ATOM 1787 O O . ILE B 1 93 ? 16.194 8.452 30.763 1.00 18.42 ? ? ? ? ? ? 93 ILE B O 1 +ATOM 1788 C CB . ILE B 1 93 ? 17.265 6.997 28.459 1.00 13.13 ? ? ? ? ? ? 93 ILE B CB 1 +ATOM 1789 C CG1 . ILE B 1 93 ? 15.894 6.880 27.787 1.00 8.28 ? ? ? ? ? ? 93 ILE B CG1 1 +ATOM 1790 C CG2 . ILE B 1 93 ? 18.397 6.268 27.707 1.00 11.44 ? ? ? ? ? ? 93 ILE B CG2 1 +ATOM 1791 C CD1 . ILE B 1 93 ? 15.838 7.301 26.320 1.00 2.00 ? ? ? ? ? ? 93 ILE B CD1 1 +ATOM 1792 H H . ILE B 1 93 ? 16.524 4.453 29.159 1.00 15.00 ? ? ? ? ? ? 93 ILE B H 1 +ATOM 1793 N N . GLY B 1 94 ? 15.333 6.473 31.472 1.00 18.70 ? ? ? ? ? ? 94 GLY B N 1 +ATOM 1794 C CA . GLY B 1 94 ? 14.292 7.114 32.314 1.00 15.92 ? ? ? ? ? ? 94 GLY B CA 1 +ATOM 1795 C C . GLY B 1 94 ? 12.929 7.432 31.657 1.00 20.12 ? ? ? ? ? ? 94 GLY B C 1 +ATOM 1796 O O . GLY B 1 94 ? 12.145 8.270 32.096 1.00 21.88 ? ? ? ? ? ? 94 GLY B O 1 +ATOM 1797 H H . GLY B 1 94 ? 15.472 5.483 31.470 1.00 15.00 ? ? ? ? ? ? 94 GLY B H 1 +ATOM 1798 N N . CYS B 1 95 ? 12.677 6.696 30.551 1.00 17.65 ? ? ? ? ? ? 95 CYS B N 1 +ATOM 1799 C CA . CYS B 1 95 ? 11.518 7.078 29.755 1.00 13.90 ? ? ? ? ? ? 95 CYS B CA 1 +ATOM 1800 C C . CYS B 1 95 ? 10.172 6.552 30.232 1.00 15.16 ? ? ? ? ? ? 95 CYS B C 1 +ATOM 1801 O O . CYS B 1 95 ? 9.972 5.378 30.537 1.00 15.03 ? ? ? ? ? ? 95 CYS B O 1 +ATOM 1802 C CB . CYS B 1 95 ? 11.751 6.682 28.326 1.00 17.96 ? ? ? ? ? ? 95 CYS B CB 1 +ATOM 1803 S SG . CYS B 1 95 ? 10.719 7.651 27.244 1.00 24.85 ? ? ? ? ? ? 95 CYS B SG 1 +ATOM 1804 H H . CYS B 1 95 ? 13.302 5.956 30.306 1.00 15.00 ? ? ? ? ? ? 95 CYS B H 1 +ATOM 1805 N N . THR B 1 96 ? 9.255 7.512 30.304 1.00 14.17 ? ? ? ? ? ? 96 THR B N 1 +ATOM 1806 C CA . THR B 1 96 ? 7.892 7.277 30.822 1.00 10.50 ? ? ? ? ? ? 96 THR B CA 1 +ATOM 1807 C C . THR B 1 96 ? 6.703 7.772 29.924 1.00 10.86 ? ? ? ? ? ? 96 THR B C 1 +ATOM 1808 O O . THR B 1 96 ? 6.776 8.715 29.137 1.00 10.68 ? ? ? ? ? ? 96 THR B O 1 +ATOM 1809 C CB . THR B 1 96 ? 7.876 7.836 32.244 1.00 7.42 ? ? ? ? ? ? 96 THR B CB 1 +ATOM 1810 O OG1 . THR B 1 96 ? 7.122 7.049 33.131 1.00 18.33 ? ? ? ? ? ? 96 THR B OG1 1 +ATOM 1811 C CG2 . THR B 1 96 ? 7.423 9.268 32.346 1.00 7.05 ? ? ? ? ? ? 96 THR B CG2 1 +ATOM 1812 H H . THR B 1 96 ? 9.595 8.433 30.102 1.00 15.00 ? ? ? ? ? ? 96 THR B H 1 +ATOM 1813 H HG1 . THR B 1 96 ? 7.076 7.573 33.926 1.00 15.00 ? ? ? ? ? ? 96 THR B HG1 1 +ATOM 1814 N N . LEU B 1 97 ? 5.572 7.068 30.017 1.00 12.50 ? ? ? ? ? ? 97 LEU B N 1 +ATOM 1815 C CA . LEU B 1 97 ? 4.381 7.555 29.292 1.00 9.08 ? ? ? ? ? ? 97 LEU B CA 1 +ATOM 1816 C C . LEU B 1 97 ? 3.341 8.244 30.248 1.00 10.28 ? ? ? ? ? ? 97 LEU B C 1 +ATOM 1817 O O . LEU B 1 97 ? 2.995 7.752 31.323 1.00 4.98 ? ? ? ? ? ? 97 LEU B O 1 +ATOM 1818 C CB . LEU B 1 97 ? 3.930 6.335 28.456 1.00 6.81 ? ? ? ? ? ? 97 LEU B CB 1 +ATOM 1819 C CG . LEU B 1 97 ? 2.975 6.301 27.249 1.00 2.00 ? ? ? ? ? ? 97 LEU B CG 1 +ATOM 1820 C CD1 . LEU B 1 97 ? 3.278 7.121 25.993 1.00 2.00 ? ? ? ? ? ? 97 LEU B CD1 1 +ATOM 1821 C CD2 . LEU B 1 97 ? 3.030 4.874 26.782 1.00 2.00 ? ? ? ? ? ? 97 LEU B CD2 1 +ATOM 1822 H H . LEU B 1 97 ? 5.557 6.271 30.624 1.00 15.00 ? ? ? ? ? ? 97 LEU B H 1 +ATOM 1823 N N . ASN B 1 98 ? 2.906 9.456 29.840 1.00 11.81 ? ? ? ? ? ? 98 ASN B N 1 +ATOM 1824 C CA . ASN B 1 98 ? 2.027 10.258 30.712 1.00 14.60 ? ? ? ? ? ? 98 ASN B CA 1 +ATOM 1825 C C . ASN B 1 98 ? 0.815 10.898 30.041 1.00 17.08 ? ? ? ? ? ? 98 ASN B C 1 +ATOM 1826 O O . ASN B 1 98 ? 0.770 11.025 28.820 1.00 16.80 ? ? ? ? ? ? 98 ASN B O 1 +ATOM 1827 C CB . ASN B 1 98 ? 2.741 11.428 31.309 1.00 15.57 ? ? ? ? ? ? 98 ASN B CB 1 +ATOM 1828 C CG . ASN B 1 98 ? 3.799 10.997 32.279 1.00 18.53 ? ? ? ? ? ? 98 ASN B CG 1 +ATOM 1829 O OD1 . ASN B 1 98 ? 4.988 11.013 32.015 1.00 14.88 ? ? ? ? ? ? 98 ASN B OD1 1 +ATOM 1830 N ND2 . ASN B 1 98 ? 3.330 10.741 33.486 1.00 17.86 ? ? ? ? ? ? 98 ASN B ND2 1 +ATOM 1831 H H . ASN B 1 98 ? 3.227 9.802 28.954 1.00 15.00 ? ? ? ? ? ? 98 ASN B H 1 +ATOM 1832 H HD21 . ASN B 1 98 ? 4.036 10.609 34.175 1.00 15.00 ? ? ? ? ? ? 98 ASN B HD21 1 +ATOM 1833 H HD22 . ASN B 1 98 ? 2.344 10.686 33.628 1.00 15.00 ? ? ? ? ? ? 98 ASN B HD22 1 +ATOM 1834 N N . PHE B 1 99 ? -0.104 11.294 30.941 1.00 20.23 ? ? ? ? ? ? 99 PHE B N 1 +ATOM 1835 C CA . PHE B 1 99 ? -1.522 10.899 31.041 1.00 20.55 ? ? ? ? ? ? 99 PHE B CA 1 +ATOM 1836 C C . PHE B 1 99 ? -2.234 11.277 32.355 1.00 15.56 ? ? ? ? ? ? 99 PHE B C 1 +ATOM 1837 O O . PHE B 1 99 ? -3.448 11.150 32.489 0.00 16.69 ? ? ? ? ? ? 99 PHE B O 1 +ATOM 1838 C CB . PHE B 1 99 ? -2.373 11.019 29.759 1.00 22.25 ? ? ? ? ? ? 99 PHE B CB 1 +ATOM 1839 C CG . PHE B 1 99 ? -2.820 9.586 29.541 1.00 25.51 ? ? ? ? ? ? 99 PHE B CG 1 +ATOM 1840 C CD1 . PHE B 1 99 ? -1.892 8.647 29.026 1.00 25.13 ? ? ? ? ? ? 99 PHE B CD1 1 +ATOM 1841 C CD2 . PHE B 1 99 ? -4.113 9.170 29.940 1.00 28.47 ? ? ? ? ? ? 99 PHE B CD2 1 +ATOM 1842 C CE1 . PHE B 1 99 ? -2.222 7.274 28.976 1.00 21.04 ? ? ? ? ? ? 99 PHE B CE1 1 +ATOM 1843 C CE2 . PHE B 1 99 ? -4.446 7.799 29.894 1.00 25.86 ? ? ? ? ? ? 99 PHE B CE2 1 +ATOM 1844 C CZ . PHE B 1 99 ? -3.488 6.863 29.441 1.00 24.17 ? ? ? ? ? ? 99 PHE B CZ 1 +ATOM 1845 O OXT . PHE B 1 99 ? -1.554 11.525 33.354 0.00 16.69 ? ? ? ? ? ? 99 PHE B OXT 1 +ATOM 1846 H H . PHE B 1 99 ? 0.193 11.604 31.840 1.00 15.00 ? ? ? ? ? ? 99 PHE B H 1 +HETATM 1847 C C1 . ARQ C 2 . ? 1.474 1.321 11.354 1.00 10.36 ? ? ? ? ? ? 401 ARQ A C1 1 +HETATM 1848 C C2 . ARQ C 2 . ? 0.562 0.252 12.036 1.00 10.59 ? ? ? ? ? ? 401 ARQ A C2 1 +HETATM 1849 C C3 . ARQ C 2 . ? 0.675 2.633 11.410 1.00 7.58 ? ? ? ? ? ? 401 ARQ A C3 1 +HETATM 1850 C C4 . ARQ C 2 . ? 1.852 1.006 9.891 1.00 4.50 ? ? ? ? ? ? 401 ARQ A C4 1 +HETATM 1851 O O4 . ARQ C 2 . ? 2.664 1.554 12.108 1.00 13.55 ? ? ? ? ? ? 401 ARQ A O4 1 +HETATM 1852 C C30 . ARQ C 2 . ? 3.511 0.571 12.400 1.00 11.18 ? ? ? ? ? ? 401 ARQ A C30 1 +HETATM 1853 O O3 . ARQ C 2 . ? 3.399 -0.533 11.970 1.00 9.15 ? ? ? ? ? ? 401 ARQ A O3 1 +HETATM 1854 N N1 . ARQ C 2 . ? 4.497 0.994 13.193 1.00 11.89 ? ? ? ? ? ? 401 ARQ A N1 1 +HETATM 1855 C C5 . ARQ C 2 . ? 5.716 0.269 13.558 1.00 14.02 ? ? ? ? ? ? 401 ARQ A C5 1 +HETATM 1856 C C6 . ARQ C 2 . ? 6.953 1.163 13.346 1.00 9.73 ? ? ? ? ? ? 401 ARQ A C6 1 +HETATM 1857 C C7 . ARQ C 2 . ? 6.975 1.824 11.998 1.00 9.34 ? ? ? ? ? ? 401 ARQ A C7 1 +HETATM 1858 C C8 . ARQ C 2 . ? 6.815 1.051 10.826 1.00 8.95 ? ? ? ? ? ? 401 ARQ A C8 1 +HETATM 1859 C C9 . ARQ C 2 . ? 6.791 1.701 9.574 1.00 6.26 ? ? ? ? ? ? 401 ARQ A C9 1 +HETATM 1860 C C10 . ARQ C 2 . ? 6.927 3.110 9.519 1.00 5.40 ? ? ? ? ? ? 401 ARQ A C10 1 +HETATM 1861 C C11 . ARQ C 2 . ? 7.114 3.232 11.941 1.00 8.18 ? ? ? ? ? ? 401 ARQ A C11 1 +HETATM 1862 C C12 . ARQ C 2 . ? 7.085 3.888 10.692 1.00 5.52 ? ? ? ? ? ? 401 ARQ A C12 1 +HETATM 1863 C C13 . ARQ C 2 . ? 5.642 -0.319 14.998 1.00 12.77 ? ? ? ? ? ? 401 ARQ A C13 1 +HETATM 1864 O O1 . ARQ C 2 . ? 5.248 0.651 15.980 1.00 8.69 ? ? ? ? ? ? 401 ARQ A O1 1 +HETATM 1865 C C14 . ARQ C 2 . ? 4.669 -1.525 15.008 1.00 14.15 ? ? ? ? ? ? 401 ARQ A C14 1 +HETATM 1866 N N2 . ARQ C 2 . ? 4.998 -2.669 15.910 1.00 16.35 ? ? ? ? ? ? 401 ARQ A N2 1 +HETATM 1867 C C22 . ARQ C 2 . ? 5.441 -2.219 17.249 1.00 15.50 ? ? ? ? ? ? 401 ARQ A C22 1 +HETATM 1868 C C15 . ARQ C 2 . ? 3.718 -3.441 16.024 1.00 12.33 ? ? ? ? ? ? 401 ARQ A C15 1 +HETATM 1869 C C16 . ARQ C 2 . ? 3.724 -4.695 16.883 1.00 6.95 ? ? ? ? ? ? 401 ARQ A C16 1 +HETATM 1870 C C17 . ARQ C 2 . ? 4.055 -5.940 16.308 1.00 9.51 ? ? ? ? ? ? 401 ARQ A C17 1 +HETATM 1871 C C18 . ARQ C 2 . ? 4.162 -7.106 17.109 1.00 9.70 ? ? ? ? ? ? 401 ARQ A C18 1 +HETATM 1872 C C19 . ARQ C 2 . ? 3.957 -7.006 18.505 1.00 3.77 ? ? ? ? ? ? 401 ARQ A C19 1 +HETATM 1873 C C20 . ARQ C 2 . ? 3.386 -4.632 18.248 1.00 8.21 ? ? ? ? ? ? 401 ARQ A C20 1 +HETATM 1874 C C21 . ARQ C 2 . ? 3.502 -5.791 19.063 1.00 7.45 ? ? ? ? ? ? 401 ARQ A C21 1 +HETATM 1875 N N3 . ARQ C 2 . ? 6.121 -3.333 15.291 1.00 13.41 ? ? ? ? ? ? 401 ARQ A N3 1 +HETATM 1876 C C23 . ARQ C 2 . ? 6.067 -4.033 14.140 1.00 20.01 ? ? ? ? ? ? 401 ARQ A C23 1 +HETATM 1877 O O2 . ARQ C 2 . ? 5.015 -4.224 13.523 1.00 22.49 ? ? ? ? ? ? 401 ARQ A O2 1 +HETATM 1878 C C27 . ARQ C 2 . ? 7.360 -4.579 13.674 1.00 23.08 ? ? ? ? ? ? 401 ARQ A C27 1 +HETATM 1879 C C26 . ARQ C 2 . ? 7.343 -5.490 12.582 1.00 23.69 ? ? ? ? ? ? 401 ARQ A C26 1 +HETATM 1880 C C25 . ARQ C 2 . ? 8.521 -6.101 12.123 1.00 18.68 ? ? ? ? ? ? 401 ARQ A C25 1 +HETATM 1881 C C24 . ARQ C 2 . ? 9.714 -5.796 12.796 1.00 19.95 ? ? ? ? ? ? 401 ARQ A C24 1 +HETATM 1882 C C28 . ARQ C 2 . ? 8.593 -4.222 14.279 1.00 25.64 ? ? ? ? ? ? 401 ARQ A C28 1 +HETATM 1883 C C29 . ARQ C 2 . ? 9.781 -4.839 13.838 1.00 23.32 ? ? ? ? ? ? 401 ARQ A C29 1 +HETATM 1884 H HN1 . ARQ C 2 . ? 4.325 1.941 13.433 0.00 0.00 ? ? ? ? ? ? 401 ARQ A HN1 1 +HETATM 1885 H H5 . ARQ C 2 . ? 5.812 -0.555 12.861 0.00 0.00 ? ? ? ? ? ? 401 ARQ A H5 1 +HETATM 1886 H H13 . ARQ C 2 . ? 6.691 -0.707 15.134 0.00 0.00 ? ? ? ? ? ? 401 ARQ A H13 1 +HETATM 1887 H HO1 . ARQ C 2 . ? 4.272 0.697 16.063 0.00 0.00 ? ? ? ? ? ? 401 ARQ A HO1 1 +HETATM 1888 H HN3 . ARQ C 2 . ? 7.032 -3.144 15.636 0.00 0.00 ? ? ? ? ? ? 401 ARQ A HN3 1 +HETATM 1889 O O . HOH D 3 . ? 5.120 -2.430 11.475 1.00 17.90 ? ? ? ? ? ? 402 HOH A O 1 +HETATM 1890 H H1 . HOH D 3 . ? 4.703 -2.628 12.329 0.00 20.00 ? ? ? ? ? ? 402 HOH A H1 1 +HETATM 1891 H H2 . HOH D 3 . ? 4.811 -1.521 11.387 0.00 20.00 ? ? ? ? ? ? 402 HOH A H2 1 +HETATM 1892 O O . HOH D 3 . ? 8.333 -4.450 17.823 1.00 17.83 ? ? ? ? ? ? 403 HOH A O 1 +HETATM 1893 H H1 . HOH D 3 . ? 8.259 -3.544 17.504 0.00 20.00 ? ? ? ? ? ? 403 HOH A H1 1 +HETATM 1894 H H2 . HOH D 3 . ? 7.430 -4.770 17.707 0.00 20.00 ? ? ? ? ? ? 403 HOH A H2 1 +HETATM 1895 O O . HOH D 3 . ? -1.392 10.401 12.400 1.00 25.70 ? ? ? ? ? ? 405 HOH A O 1 +HETATM 1896 H H1 . HOH D 3 . ? -1.110 9.691 12.984 0.00 20.00 ? ? ? ? ? ? 405 HOH A H1 1 +HETATM 1897 H H2 . HOH D 3 . ? -1.196 11.201 12.890 0.00 20.00 ? ? ? ? ? ? 405 HOH A H2 1 +HETATM 1898 O O . HOH D 3 . ? -8.545 10.688 13.725 1.00 4.29 ? ? ? ? ? ? 406 HOH A O 1 +HETATM 1899 H H1 . HOH D 3 . ? -8.105 11.169 13.015 0.00 20.00 ? ? ? ? ? ? 406 HOH A H1 1 +HETATM 1900 H H2 . HOH D 3 . ? -8.992 11.385 14.219 0.00 20.00 ? ? ? ? ? ? 406 HOH A H2 1 +HETATM 1901 O O . HOH D 3 . ? 7.328 3.159 38.192 1.00 63.38 ? ? ? ? ? ? 410 HOH A O 1 +HETATM 1902 H H1 . HOH D 3 . ? 7.836 2.868 38.960 0.00 20.00 ? ? ? ? ? ? 410 HOH A H1 1 +HETATM 1903 H H2 . HOH D 3 . ? 7.292 2.360 37.640 0.00 20.00 ? ? ? ? ? ? 410 HOH A H2 1 +HETATM 1904 O O . HOH E 3 . ? 18.496 0.062 6.092 1.00 58.99 ? ? ? ? ? ? 407 HOH B O 1 +HETATM 1905 H H1 . HOH E 3 . ? 18.810 0.911 5.772 0.00 20.00 ? ? ? ? ? ? 407 HOH B H1 1 +HETATM 1906 H H2 . HOH E 3 . ? 17.595 0.283 6.369 0.00 20.00 ? ? ? ? ? ? 407 HOH B H2 1 +HETATM 1907 O O . HOH E 3 . ? 18.639 -4.883 26.553 1.00 13.69 ? ? ? ? ? ? 408 HOH B O 1 +HETATM 1908 H H1 . HOH E 3 . ? 19.047 -5.595 27.057 0.00 20.00 ? ? ? ? ? ? 408 HOH B H1 1 +HETATM 1909 H H2 . HOH E 3 . ? 18.259 -4.326 27.243 0.00 20.00 ? ? ? ? ? ? 408 HOH B H2 1 +HETATM 1910 O O . HOH E 3 . ? 10.120 3.111 32.180 1.00 13.85 ? ? ? ? ? ? 409 HOH B O 1 +HETATM 1911 H H1 . HOH E 3 . ? 10.839 3.269 32.796 0.00 20.00 ? ? ? ? ? ? 409 HOH B H1 1 +HETATM 1912 H H2 . HOH E 3 . ? 10.029 3.959 31.733 0.00 20.00 ? ? ? ? ? ? 409 HOH B H2 1 +# +loop_ +_pdbx_poly_seq_scheme.asym_id +_pdbx_poly_seq_scheme.entity_id +_pdbx_poly_seq_scheme.seq_id +_pdbx_poly_seq_scheme.mon_id +_pdbx_poly_seq_scheme.ndb_seq_num +_pdbx_poly_seq_scheme.pdb_seq_num +_pdbx_poly_seq_scheme.auth_seq_num +_pdbx_poly_seq_scheme.pdb_mon_id +_pdbx_poly_seq_scheme.auth_mon_id +_pdbx_poly_seq_scheme.pdb_strand_id +_pdbx_poly_seq_scheme.pdb_ins_code +_pdbx_poly_seq_scheme.hetero +A 1 1 PRO 1 1 1 PRO PRO A . n +A 1 2 GLN 2 2 2 GLN GLN A . n +A 1 3 ILE 3 3 3 ILE ILE A . n +A 1 4 THR 4 4 4 THR THR A . n +A 1 5 LEU 5 5 5 LEU LEU A . n +A 1 6 TRP 6 6 6 TRP TRP A . n +A 1 7 LYS 7 7 7 LYS LYS A . n +A 1 8 ARG 8 8 8 ARG ARG A . n +A 1 9 PRO 9 9 9 PRO PRO A . n +A 1 10 LEU 10 10 10 LEU LEU A . n +A 1 11 VAL 11 11 11 VAL VAL A . n +A 1 12 THR 12 12 12 THR THR A . n +A 1 13 ILE 13 13 13 ILE ILE A . n +A 1 14 ARG 14 14 14 ARG ARG A . n +A 1 15 ILE 15 15 15 ILE ILE A . n +A 1 16 GLY 16 16 16 GLY GLY A . n +A 1 17 GLY 17 17 17 GLY GLY A . n +A 1 18 GLN 18 18 18 GLN GLN A . n +A 1 19 LEU 19 19 19 LEU LEU A . n +A 1 20 LYS 20 20 20 LYS LYS A . n +A 1 21 GLU 21 21 21 GLU GLU A . n +A 1 22 ALA 22 22 22 ALA ALA A . n +A 1 23 LEU 23 23 23 LEU LEU A . n +A 1 24 LEU 24 24 24 LEU LEU A . n +A 1 25 ASP 25 25 25 ASP ASP A . n +A 1 26 THR 26 26 26 THR THR A . n +A 1 27 GLY 27 27 27 GLY GLY A . n +A 1 28 ALA 28 28 28 ALA ALA A . n +A 1 29 ASP 29 29 29 ASP ASP A . n +A 1 30 ASP 30 30 30 ASP ASP A . n +A 1 31 THR 31 31 31 THR THR A . n +A 1 32 VAL 32 32 32 VAL VAL A . n +A 1 33 LEU 33 33 33 LEU LEU A . n +A 1 34 GLU 34 34 34 GLU GLU A . n +A 1 35 GLU 35 35 35 GLU GLU A . n +A 1 36 MET 36 36 36 MET MET A . n +A 1 37 ASN 37 37 37 ASN ASN A . n +A 1 38 LEU 38 38 38 LEU LEU A . n +A 1 39 PRO 39 39 39 PRO PRO A . n +A 1 40 GLY 40 40 40 GLY GLY A . n +A 1 41 LYS 41 41 41 LYS LYS A . n +A 1 42 TRP 42 42 42 TRP TRP A . n +A 1 43 LYS 43 43 43 LYS LYS A . n +A 1 44 PRO 44 44 44 PRO PRO A . n +A 1 45 LYS 45 45 45 LYS LYS A . n +A 1 46 MET 46 46 46 MET MET A . n +A 1 47 ILE 47 47 47 ILE ILE A . n +A 1 48 GLY 48 48 48 GLY GLY A . n +A 1 49 GLY 49 49 49 GLY GLY A . n +A 1 50 ILE 50 50 50 ILE ILE A . n +A 1 51 GLY 51 51 51 GLY GLY A . n +A 1 52 GLY 52 52 52 GLY GLY A . n +A 1 53 PHE 53 53 53 PHE PHE A . n +A 1 54 ILE 54 54 54 ILE ILE A . n +A 1 55 LYS 55 55 55 LYS LYS A . n +A 1 56 VAL 56 56 56 VAL VAL A . n +A 1 57 ARG 57 57 57 ARG ARG A . n +A 1 58 GLN 58 58 58 GLN GLN A . n +A 1 59 TYR 59 59 59 TYR TYR A . n +A 1 60 ASP 60 60 60 ASP ASP A . n +A 1 61 GLN 61 61 61 GLN GLN A . n +A 1 62 ILE 62 62 62 ILE ILE A . n +A 1 63 PRO 63 63 63 PRO PRO A . n +A 1 64 VAL 64 64 64 VAL VAL A . n +A 1 65 GLU 65 65 65 GLU GLU A . n +A 1 66 ILE 66 66 66 ILE ILE A . n +A 1 67 CYS 67 67 67 CYS CYS A . n +A 1 68 GLY 68 68 68 GLY GLY A . n +A 1 69 HIS 69 69 69 HIS HIS A . n +A 1 70 LYS 70 70 70 LYS LYS A . n +A 1 71 ALA 71 71 71 ALA ALA A . n +A 1 72 ILE 72 72 72 ILE ILE A . n +A 1 73 GLY 73 73 73 GLY GLY A . n +A 1 74 THR 74 74 74 THR THR A . n +A 1 75 VAL 75 75 75 VAL VAL A . n +A 1 76 LEU 76 76 76 LEU LEU A . n +A 1 77 VAL 77 77 77 VAL VAL A . n +A 1 78 GLY 78 78 78 GLY GLY A . n +A 1 79 PRO 79 79 79 PRO PRO A . n +A 1 80 THR 80 80 80 THR THR A . n +A 1 81 PRO 81 81 81 PRO PRO A . n +A 1 82 VAL 82 82 82 VAL VAL A . n +A 1 83 ASN 83 83 83 ASN ASN A . n +A 1 84 ILE 84 84 84 ILE ILE A . n +A 1 85 ILE 85 85 85 ILE ILE A . n +A 1 86 GLY 86 86 86 GLY GLY A . n +A 1 87 ARG 87 87 87 ARG ARG A . n +A 1 88 ASN 88 88 88 ASN ASN A . n +A 1 89 LEU 89 89 89 LEU LEU A . n +A 1 90 LEU 90 90 90 LEU LEU A . n +A 1 91 THR 91 91 91 THR THR A . n +A 1 92 GLN 92 92 92 GLN GLN A . n +A 1 93 ILE 93 93 93 ILE ILE A . n +A 1 94 GLY 94 94 94 GLY GLY A . n +A 1 95 CYS 95 95 95 CYS CYS A . n +A 1 96 THR 96 96 96 THR THR A . n +A 1 97 LEU 97 97 97 LEU LEU A . n +A 1 98 ASN 98 98 98 ASN ASN A . n +A 1 99 PHE 99 99 99 PHE PHE A . n +B 1 1 PRO 1 1 1 PRO PRO B . n +B 1 2 GLN 2 2 2 GLN GLN B . n +B 1 3 ILE 3 3 3 ILE ILE B . n +B 1 4 THR 4 4 4 THR THR B . n +B 1 5 LEU 5 5 5 LEU LEU B . n +B 1 6 TRP 6 6 6 TRP TRP B . n +B 1 7 LYS 7 7 7 LYS LYS B . n +B 1 8 ARG 8 8 8 ARG ARG B . n +B 1 9 PRO 9 9 9 PRO PRO B . n +B 1 10 LEU 10 10 10 LEU LEU B . n +B 1 11 VAL 11 11 11 VAL VAL B . n +B 1 12 THR 12 12 12 THR THR B . n +B 1 13 ILE 13 13 13 ILE ILE B . n +B 1 14 ARG 14 14 14 ARG ARG B . n +B 1 15 ILE 15 15 15 ILE ILE B . n +B 1 16 GLY 16 16 16 GLY GLY B . n +B 1 17 GLY 17 17 17 GLY GLY B . n +B 1 18 GLN 18 18 18 GLN GLN B . n +B 1 19 LEU 19 19 19 LEU LEU B . n +B 1 20 LYS 20 20 20 LYS LYS B . n +B 1 21 GLU 21 21 21 GLU GLU B . n +B 1 22 ALA 22 22 22 ALA ALA B . n +B 1 23 LEU 23 23 23 LEU LEU B . n +B 1 24 LEU 24 24 24 LEU LEU B . n +B 1 25 ASP 25 25 25 ASP ASP B . n +B 1 26 THR 26 26 26 THR THR B . n +B 1 27 GLY 27 27 27 GLY GLY B . n +B 1 28 ALA 28 28 28 ALA ALA B . n +B 1 29 ASP 29 29 29 ASP ASP B . n +B 1 30 ASP 30 30 30 ASP ASP B . n +B 1 31 THR 31 31 31 THR THR B . n +B 1 32 VAL 32 32 32 VAL VAL B . n +B 1 33 LEU 33 33 33 LEU LEU B . n +B 1 34 GLU 34 34 34 GLU GLU B . n +B 1 35 GLU 35 35 35 GLU GLU B . n +B 1 36 MET 36 36 36 MET MET B . n +B 1 37 ASN 37 37 37 ASN ASN B . n +B 1 38 LEU 38 38 38 LEU LEU B . n +B 1 39 PRO 39 39 39 PRO PRO B . n +B 1 40 GLY 40 40 40 GLY GLY B . n +B 1 41 LYS 41 41 41 LYS LYS B . n +B 1 42 TRP 42 42 42 TRP TRP B . n +B 1 43 LYS 43 43 43 LYS LYS B . n +B 1 44 PRO 44 44 44 PRO PRO B . n +B 1 45 LYS 45 45 45 LYS LYS B . n +B 1 46 MET 46 46 46 MET MET B . n +B 1 47 ILE 47 47 47 ILE ILE B . n +B 1 48 GLY 48 48 48 GLY GLY B . n +B 1 49 GLY 49 49 49 GLY GLY B . n +B 1 50 ILE 50 50 50 ILE ILE B . n +B 1 51 GLY 51 51 51 GLY GLY B . n +B 1 52 GLY 52 52 52 GLY GLY B . n +B 1 53 PHE 53 53 53 PHE PHE B . n +B 1 54 ILE 54 54 54 ILE ILE B . n +B 1 55 LYS 55 55 55 LYS LYS B . n +B 1 56 VAL 56 56 56 VAL VAL B . n +B 1 57 ARG 57 57 57 ARG ARG B . n +B 1 58 GLN 58 58 58 GLN GLN B . n +B 1 59 TYR 59 59 59 TYR TYR B . n +B 1 60 ASP 60 60 60 ASP ASP B . n +B 1 61 GLN 61 61 61 GLN GLN B . n +B 1 62 ILE 62 62 62 ILE ILE B . n +B 1 63 PRO 63 63 63 PRO PRO B . n +B 1 64 VAL 64 64 64 VAL VAL B . n +B 1 65 GLU 65 65 65 GLU GLU B . n +B 1 66 ILE 66 66 66 ILE ILE B . n +B 1 67 CYS 67 67 67 CYS CYS B . n +B 1 68 GLY 68 68 68 GLY GLY B . n +B 1 69 HIS 69 69 69 HIS HIS B . n +B 1 70 LYS 70 70 70 LYS LYS B . n +B 1 71 ALA 71 71 71 ALA ALA B . n +B 1 72 ILE 72 72 72 ILE ILE B . n +B 1 73 GLY 73 73 73 GLY GLY B . n +B 1 74 THR 74 74 74 THR THR B . n +B 1 75 VAL 75 75 75 VAL VAL B . n +B 1 76 LEU 76 76 76 LEU LEU B . n +B 1 77 VAL 77 77 77 VAL VAL B . n +B 1 78 GLY 78 78 78 GLY GLY B . n +B 1 79 PRO 79 79 79 PRO PRO B . n +B 1 80 THR 80 80 80 THR THR B . n +B 1 81 PRO 81 81 81 PRO PRO B . n +B 1 82 VAL 82 82 82 VAL VAL B . n +B 1 83 ASN 83 83 83 ASN ASN B . n +B 1 84 ILE 84 84 84 ILE ILE B . n +B 1 85 ILE 85 85 85 ILE ILE B . n +B 1 86 GLY 86 86 86 GLY GLY B . n +B 1 87 ARG 87 87 87 ARG ARG B . n +B 1 88 ASN 88 88 88 ASN ASN B . n +B 1 89 LEU 89 89 89 LEU LEU B . n +B 1 90 LEU 90 90 90 LEU LEU B . n +B 1 91 THR 91 91 91 THR THR B . n +B 1 92 GLN 92 92 92 GLN GLN B . n +B 1 93 ILE 93 93 93 ILE ILE B . n +B 1 94 GLY 94 94 94 GLY GLY B . n +B 1 95 CYS 95 95 95 CYS CYS B . n +B 1 96 THR 96 96 96 THR THR B . n +B 1 97 LEU 97 97 97 LEU LEU B . n +B 1 98 ASN 98 98 98 ASN ASN B . n +B 1 99 PHE 99 99 99 PHE PHE B . n +# +loop_ +_software.name +_software.classification +_software.version +_software.citation_id +_software.pdbx_ordinal +X-PLOR 'model building' 2.0 ? 1 +X-PLOR refinement 2.0 ? 2 +# +loop_ +_pdbx_version.entry_id +_pdbx_version.revision_date +_pdbx_version.major_version +_pdbx_version.minor_version +_pdbx_version.revision_type +_pdbx_version.details +3AID 2008-03-03 3 2 'Version format compliance' 'compliance with PDB format V.3.15' +3AID 2011-07-13 4 0000 'Version format compliance' 'compliance with PDB Exchange Dictionary V4' +# +loop_ +_pdbx_unobs_or_zero_occ_atoms.id +_pdbx_unobs_or_zero_occ_atoms.polymer_flag +_pdbx_unobs_or_zero_occ_atoms.occupancy_flag +_pdbx_unobs_or_zero_occ_atoms.PDB_model_num +_pdbx_unobs_or_zero_occ_atoms.auth_asym_id +_pdbx_unobs_or_zero_occ_atoms.auth_comp_id +_pdbx_unobs_or_zero_occ_atoms.auth_seq_id +_pdbx_unobs_or_zero_occ_atoms.PDB_ins_code +_pdbx_unobs_or_zero_occ_atoms.auth_atom_id +_pdbx_unobs_or_zero_occ_atoms.label_alt_id +1 Y 0 1 A PHE 99 ? O ? +2 Y 0 1 A PHE 99 ? OXT ? +3 Y 0 1 B PHE 99 ? O ? +4 Y 0 1 B PHE 99 ? OXT ? +# +_pdbx_struct_assembly.id 1 +_pdbx_struct_assembly.details author_and_software_defined_assembly +_pdbx_struct_assembly.method_details PISA +_pdbx_struct_assembly.oligomeric_details dimeric +_pdbx_struct_assembly.oligomeric_count 2 +# +_pdbx_struct_assembly_gen.assembly_id 1 +_pdbx_struct_assembly_gen.oper_expression 1 +_pdbx_struct_assembly_gen.asym_id_list A,C,D,B,E +# +loop_ +_pdbx_struct_assembly_prop.biol_id +_pdbx_struct_assembly_prop.type +_pdbx_struct_assembly_prop.value +_pdbx_struct_assembly_prop.details +1 'ABSA (A^2)' 4910 ? +1 'SSA (A^2)' 9760 ? +1 MORE -18 ? +# +_pdbx_struct_oper_list.id 1 +_pdbx_struct_oper_list.type 'identity operation' +_pdbx_struct_oper_list.name 1_555 +_pdbx_struct_oper_list.symmetry_operation x,y,z +_pdbx_struct_oper_list.matrix[1][1] 1.0000000000 +_pdbx_struct_oper_list.matrix[1][2] 0.0000000000 +_pdbx_struct_oper_list.matrix[1][3] 0.0000000000 +_pdbx_struct_oper_list.vector[1] 0.0000000000 +_pdbx_struct_oper_list.matrix[2][1] 0.0000000000 +_pdbx_struct_oper_list.matrix[2][2] 1.0000000000 +_pdbx_struct_oper_list.matrix[2][3] 0.0000000000 +_pdbx_struct_oper_list.vector[2] 0.0000000000 +_pdbx_struct_oper_list.matrix[3][1] 0.0000000000 +_pdbx_struct_oper_list.matrix[3][2] 0.0000000000 +_pdbx_struct_oper_list.matrix[3][3] 1.0000000000 +_pdbx_struct_oper_list.vector[3] 0.0000000000 +# +loop_ +_pdbx_nonpoly_scheme.asym_id +_pdbx_nonpoly_scheme.entity_id +_pdbx_nonpoly_scheme.mon_id +_pdbx_nonpoly_scheme.ndb_seq_num +_pdbx_nonpoly_scheme.pdb_seq_num +_pdbx_nonpoly_scheme.auth_seq_num +_pdbx_nonpoly_scheme.pdb_mon_id +_pdbx_nonpoly_scheme.auth_mon_id +_pdbx_nonpoly_scheme.pdb_strand_id +_pdbx_nonpoly_scheme.pdb_ins_code +C 2 ARQ 1 401 401 ARQ ARQ A . +D 3 HOH 1 402 402 HOH HOH A . +D 3 HOH 2 403 403 HOH HOH A . +D 3 HOH 3 405 405 HOH HOH A . +D 3 HOH 4 406 406 HOH HOH A . +D 3 HOH 5 410 410 HOH HOH A . +E 3 HOH 1 407 407 HOH HOH B . +E 3 HOH 2 408 408 HOH HOH B . +E 3 HOH 3 409 409 HOH HOH B . +# +loop_ +_pdbx_validate_rmsd_angle.id +_pdbx_validate_rmsd_angle.PDB_model_num +_pdbx_validate_rmsd_angle.auth_atom_id_1 +_pdbx_validate_rmsd_angle.auth_asym_id_1 +_pdbx_validate_rmsd_angle.auth_comp_id_1 +_pdbx_validate_rmsd_angle.auth_seq_id_1 +_pdbx_validate_rmsd_angle.PDB_ins_code_1 +_pdbx_validate_rmsd_angle.label_alt_id_1 +_pdbx_validate_rmsd_angle.auth_atom_id_2 +_pdbx_validate_rmsd_angle.auth_asym_id_2 +_pdbx_validate_rmsd_angle.auth_comp_id_2 +_pdbx_validate_rmsd_angle.auth_seq_id_2 +_pdbx_validate_rmsd_angle.PDB_ins_code_2 +_pdbx_validate_rmsd_angle.label_alt_id_2 +_pdbx_validate_rmsd_angle.auth_atom_id_3 +_pdbx_validate_rmsd_angle.auth_asym_id_3 +_pdbx_validate_rmsd_angle.auth_comp_id_3 +_pdbx_validate_rmsd_angle.auth_seq_id_3 +_pdbx_validate_rmsd_angle.PDB_ins_code_3 +_pdbx_validate_rmsd_angle.label_alt_id_3 +_pdbx_validate_rmsd_angle.angle_deviation +1 1 NE A ARG 8 ? ? CZ A ARG 8 ? ? NH1 A ARG 8 ? ? 3.6 +2 1 NE A ARG 8 ? ? CZ A ARG 8 ? ? NH2 A ARG 8 ? ? -3.8 +3 1 C B GLY 16 ? ? N B GLY 17 ? ? CA B GLY 17 ? ? -13.0 +4 1 NE B ARG 87 ? ? CZ B ARG 87 ? ? NH1 B ARG 87 ? ? 3.0 +# +_pdbx_validate_torsion.id 1 +_pdbx_validate_torsion.PDB_model_num 1 +_pdbx_validate_torsion.auth_comp_id GLU +_pdbx_validate_torsion.auth_asym_id A +_pdbx_validate_torsion.auth_seq_id 35 +_pdbx_validate_torsion.PDB_ins_code ? +_pdbx_validate_torsion.phi -41.76 +_pdbx_validate_torsion.psi 108.21 +# +loop_ +_pdbx_validate_peptide_omega.id +_pdbx_validate_peptide_omega.PDB_model_num +_pdbx_validate_peptide_omega.auth_comp_id_1 +_pdbx_validate_peptide_omega.auth_asym_id_1 +_pdbx_validate_peptide_omega.auth_seq_id_1 +_pdbx_validate_peptide_omega.PDB_ins_code_1 +_pdbx_validate_peptide_omega.auth_comp_id_2 +_pdbx_validate_peptide_omega.auth_asym_id_2 +_pdbx_validate_peptide_omega.auth_seq_id_2 +_pdbx_validate_peptide_omega.PDB_ins_code_2 +_pdbx_validate_peptide_omega.omega +1 1 PRO B 1 ? GLN B 2 ? 131.857 +2 1 ASN B 98 ? PHE B 99 ? -122.454 +# +loop_ +_pdbx_validate_chiral.id +_pdbx_validate_chiral.PDB_model_num +_pdbx_validate_chiral.auth_comp_id +_pdbx_validate_chiral.auth_asym_id +_pdbx_validate_chiral.auth_seq_id +_pdbx_validate_chiral.PDB_ins_code +_pdbx_validate_chiral.details +_pdbx_validate_chiral.omega +1 1 PRO A 1 ? 'Expecting L Found D WRONG HAND' -20.210 +2 1 ILE A 50 ? 'Expecting L Found L OUTSIDE RANGE' 21.813 +3 1 GLN A 61 ? 'Expecting L Found L OUTSIDE RANGE' 23.281 +4 1 VAL A 64 ? 'Expecting L Found L OUTSIDE RANGE' 22.866 +5 1 PRO B 1 ? 'Expecting L Found D WRONG HAND' -25.807 +6 1 LYS B 7 ? 'Expecting L Found L OUTSIDE RANGE' 23.439 +7 1 GLN B 61 ? 'Expecting L Found L OUTSIDE RANGE' 23.530 +8 1 VAL B 77 ? 'Expecting L Found L OUTSIDE RANGE' 24.832 +9 1 PHE B 99 ? 'Expecting L Found D WRONG HAND' -21.536 +# +loop_ +_pdbx_validate_planes.id +_pdbx_validate_planes.PDB_model_num +_pdbx_validate_planes.auth_comp_id +_pdbx_validate_planes.auth_asym_id +_pdbx_validate_planes.auth_seq_id +_pdbx_validate_planes.PDB_ins_code +_pdbx_validate_planes.rmsd +_pdbx_validate_planes.type +1 1 ARG A 87 ? 0.198 'SIDE CHAIN' +2 1 ARG B 87 ? 0.130 'SIDE CHAIN' +# +loop_ +_pdbx_entity_nonpoly.entity_id +_pdbx_entity_nonpoly.name +_pdbx_entity_nonpoly.comp_id +2 'BENZOYLAMINO-BENZYL-METHYL-[2-HYDROXY-3-[1-METHYL-ETHYL-OXY-N-FORMAMIDYL]-4-PHENYL-BUTYL]-AMMONIUM' ARQ +3 water HOH +# diff --git a/moldesign/_tests/data/3aid.pdb b/moldesign/_tests/data/3aid.pdb new file mode 100644 index 0000000..821fd19 --- /dev/null +++ b/moldesign/_tests/data/3aid.pdb @@ -0,0 +1,2354 @@ +HEADER ASPARTYL PROTEASE 15-MAY-97 3AID +TITLE A NEW CLASS OF HIV-1 PROTEASE INHIBITOR: THE +TITLE 2 CRYSTALLOGRAPHIC STRUCTURE, INHIBITION AND CHEMICAL +TITLE 3 SYNTHESIS OF AN AMINIMIDE PEPTIDE ISOSTERE +COMPND MOL_ID: 1; +COMPND 2 MOLECULE: HUMAN IMMUNODEFICIENCY VIRUS PROTEASE; +COMPND 3 CHAIN: A, B; +COMPND 4 SYNONYM: HIV PROTEASE, HIV PR; +COMPND 5 EC: 3.4.23.16; +COMPND 6 ENGINEERED: YES; +COMPND 7 MUTATION: YES +SOURCE MOL_ID: 1; +SOURCE 2 ORGANISM_SCIENTIFIC: HUMAN IMMUNODEFICIENCY VIRUS 1; +SOURCE 3 ORGANISM_TAXID: 11676; +SOURCE 4 VARIANT: SF1 ISOLATE; +SOURCE 5 EXPRESSION_SYSTEM: ESCHERICHIA COLI; +SOURCE 6 EXPRESSION_SYSTEM_TAXID: 562 +KEYWDS ASPARTYL PROTEASE, PROTEASE, HIV, PEPTIDE ISOSTERE +KEYWDS 2 INHIBITOR, DRUG DESIGN +EXPDTA X-RAY DIFFRACTION +AUTHOR E.E.RUTENBER,R.M.STROUD +REVDAT 3 24-FEB-09 3AID 1 VERSN +REVDAT 2 01-APR-03 3AID 1 JRNL +REVDAT 1 17-SEP-97 3AID 0 +JRNL AUTH E.E.RUTENBER,F.MCPHEE,A.P.KAPLAN,S.L.GALLION, +JRNL AUTH 2 J.C.HOGAN JR.,C.S.CRAIK,R.M.STROUD +JRNL TITL A NEW CLASS OF HIV-1 PROTEASE INHIBITOR: THE +JRNL TITL 2 CRYSTALLOGRAPHIC STRUCTURE, INHIBITION AND +JRNL TITL 3 CHEMICAL SYNTHESIS OF AN AMINIMIDE PEPTIDE +JRNL TITL 4 ISOSTERE. +JRNL REF BIOORG.MED.CHEM. V. 4 1545 1996 +JRNL REFN ISSN 0968-0896 +JRNL PMID 8894111 +JRNL DOI 10.1016/0968-0896(96)00147-2 +REMARK 1 +REMARK 2 +REMARK 2 RESOLUTION. 2.50 ANGSTROMS. +REMARK 3 +REMARK 3 REFINEMENT. +REMARK 3 PROGRAM : X-PLOR 2.0 +REMARK 3 AUTHORS : BRUNGER +REMARK 3 +REMARK 3 DATA USED IN REFINEMENT. +REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 2.50 +REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : 7.00 +REMARK 3 DATA CUTOFF (SIGMA(F)) : 0.000 +REMARK 3 DATA CUTOFF HIGH (ABS(F)) : NULL +REMARK 3 DATA CUTOFF LOW (ABS(F)) : NULL +REMARK 3 COMPLETENESS (WORKING+TEST) (%) : 88.0 +REMARK 3 NUMBER OF REFLECTIONS : 6864 +REMARK 3 +REMARK 3 FIT TO DATA USED IN REFINEMENT. +REMARK 3 CROSS-VALIDATION METHOD : NULL +REMARK 3 FREE R VALUE TEST SET SELECTION : NULL +REMARK 3 R VALUE (WORKING SET) : 0.180 +REMARK 3 FREE R VALUE : NULL +REMARK 3 FREE R VALUE TEST SET SIZE (%) : NULL +REMARK 3 FREE R VALUE TEST SET COUNT : NULL +REMARK 3 ESTIMATED ERROR OF FREE R VALUE : NULL +REMARK 3 +REMARK 3 FIT IN THE HIGHEST RESOLUTION BIN. +REMARK 3 TOTAL NUMBER OF BINS USED : NULL +REMARK 3 BIN RESOLUTION RANGE HIGH (A) : NULL +REMARK 3 BIN RESOLUTION RANGE LOW (A) : NULL +REMARK 3 BIN COMPLETENESS (WORKING+TEST) (%) : NULL +REMARK 3 REFLECTIONS IN BIN (WORKING SET) : NULL +REMARK 3 BIN R VALUE (WORKING SET) : NULL +REMARK 3 BIN FREE R VALUE : NULL +REMARK 3 BIN FREE R VALUE TEST SET SIZE (%) : NULL +REMARK 3 BIN FREE R VALUE TEST SET COUNT : NULL +REMARK 3 ESTIMATED ERROR OF BIN FREE R VALUE : NULL +REMARK 3 +REMARK 3 NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT. +REMARK 3 PROTEIN ATOMS : 1846 +REMARK 3 NUCLEIC ACID ATOMS : 0 +REMARK 3 HETEROGEN ATOMS : 42 +REMARK 3 SOLVENT ATOMS : 24 +REMARK 3 +REMARK 3 B VALUES. +REMARK 3 FROM WILSON PLOT (A**2) : NULL +REMARK 3 MEAN B VALUE (OVERALL, A**2) : NULL +REMARK 3 OVERALL ANISOTROPIC B VALUE. +REMARK 3 B11 (A**2) : NULL +REMARK 3 B22 (A**2) : NULL +REMARK 3 B33 (A**2) : NULL +REMARK 3 B12 (A**2) : NULL +REMARK 3 B13 (A**2) : NULL +REMARK 3 B23 (A**2) : NULL +REMARK 3 +REMARK 3 ESTIMATED COORDINATE ERROR. +REMARK 3 ESD FROM LUZZATI PLOT (A) : NULL +REMARK 3 ESD FROM SIGMAA (A) : NULL +REMARK 3 LOW RESOLUTION CUTOFF (A) : NULL +REMARK 3 +REMARK 3 CROSS-VALIDATED ESTIMATED COORDINATE ERROR. +REMARK 3 ESD FROM C-V LUZZATI PLOT (A) : NULL +REMARK 3 ESD FROM C-V SIGMAA (A) : NULL +REMARK 3 +REMARK 3 RMS DEVIATIONS FROM IDEAL VALUES. +REMARK 3 BOND LENGTHS (A) : 0.021 +REMARK 3 BOND ANGLES (DEGREES) : 3.50 +REMARK 3 DIHEDRAL ANGLES (DEGREES) : 30.10 +REMARK 3 IMPROPER ANGLES (DEGREES) : 16.40 +REMARK 3 +REMARK 3 ISOTROPIC THERMAL MODEL : NULL +REMARK 3 +REMARK 3 ISOTROPIC THERMAL FACTOR RESTRAINTS. RMS SIGMA +REMARK 3 MAIN-CHAIN BOND (A**2) : NULL ; NULL +REMARK 3 MAIN-CHAIN ANGLE (A**2) : NULL ; NULL +REMARK 3 SIDE-CHAIN BOND (A**2) : NULL ; NULL +REMARK 3 SIDE-CHAIN ANGLE (A**2) : NULL ; NULL +REMARK 3 +REMARK 3 NCS MODEL : NULL +REMARK 3 +REMARK 3 NCS RESTRAINTS. RMS SIGMA/WEIGHT +REMARK 3 GROUP 1 POSITIONAL (A) : NULL ; NULL +REMARK 3 GROUP 1 B-FACTOR (A**2) : NULL ; NULL +REMARK 3 +REMARK 3 PARAMETER FILE 1 : PARAM19X.PRO +REMARK 3 PARAMETER FILE 2 : NULL +REMARK 3 PARAMETER FILE 3 : NULL +REMARK 3 TOPOLOGY FILE 1 : TOPH19X.PRO +REMARK 3 TOPOLOGY FILE 2 : NULL +REMARK 3 TOPOLOGY FILE 3 : NULL +REMARK 3 +REMARK 3 OTHER REFINEMENT REMARKS: NULL +REMARK 4 +REMARK 4 3AID COMPLIES WITH FORMAT V. 3.15, 01-DEC-08 +REMARK 100 +REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY BNL. +REMARK 200 +REMARK 200 EXPERIMENTAL DETAILS +REMARK 200 EXPERIMENT TYPE : X-RAY DIFFRACTION +REMARK 200 DATE OF DATA COLLECTION : JAN-95 +REMARK 200 TEMPERATURE (KELVIN) : 287 +REMARK 200 PH : 5.4 +REMARK 200 NUMBER OF CRYSTALS USED : 1 +REMARK 200 +REMARK 200 SYNCHROTRON (Y/N) : N +REMARK 200 RADIATION SOURCE : ROTATING ANODE +REMARK 200 BEAMLINE : NULL +REMARK 200 X-RAY GENERATOR MODEL : RIGAKU RUH3R +REMARK 200 MONOCHROMATIC OR LAUE (M/L) : M +REMARK 200 WAVELENGTH OR RANGE (A) : 1.5418 +REMARK 200 MONOCHROMATOR : GRAPHITE(002) +REMARK 200 OPTICS : NULL +REMARK 200 +REMARK 200 DETECTOR TYPE : AREA DETECTOR +REMARK 200 DETECTOR MANUFACTURER : SIEMENS +REMARK 200 INTENSITY-INTEGRATION SOFTWARE : SIEMENS +REMARK 200 DATA SCALING SOFTWARE : SIEMENS +REMARK 200 +REMARK 200 NUMBER OF UNIQUE REFLECTIONS : 14215 +REMARK 200 RESOLUTION RANGE HIGH (A) : 2.500 +REMARK 200 RESOLUTION RANGE LOW (A) : 100.000 +REMARK 200 REJECTION CRITERIA (SIGMA(I)) : 0.000 +REMARK 200 +REMARK 200 OVERALL. +REMARK 200 COMPLETENESS FOR RANGE (%) : 87.0 +REMARK 200 DATA REDUNDANCY : 2.200 +REMARK 200 R MERGE (I) : 0.08100 +REMARK 200 R SYM (I) : 0.08100 +REMARK 200 FOR THE DATA SET : NULL +REMARK 200 +REMARK 200 IN THE HIGHEST RESOLUTION SHELL. +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : NULL +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE LOW (A) : NULL +REMARK 200 COMPLETENESS FOR SHELL (%) : NULL +REMARK 200 DATA REDUNDANCY IN SHELL : NULL +REMARK 200 R MERGE FOR SHELL (I) : NULL +REMARK 200 R SYM FOR SHELL (I) : NULL +REMARK 200 FOR SHELL : NULL +REMARK 200 +REMARK 200 DIFFRACTION PROTOCOL: NULL +REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: MOLECULAR REPLACEMENT +REMARK 200 SOFTWARE USED: X-PLOR 2.0 +REMARK 200 STARTING MODEL: PDB ENTRY 3HVP +REMARK 200 +REMARK 200 REMARK: NULL +REMARK 280 +REMARK 280 CRYSTAL +REMARK 280 SOLVENT CONTENT, VS (%): 48.04 +REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 2.37 +REMARK 280 +REMARK 280 CRYSTALLIZATION CONDITIONS: PH 5.4 +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY +REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: P 21 21 21 +REMARK 290 +REMARK 290 SYMOP SYMMETRY +REMARK 290 NNNMMM OPERATOR +REMARK 290 1555 X,Y,Z +REMARK 290 2555 -X+1/2,-Y,Z+1/2 +REMARK 290 3555 -X,Y+1/2,-Z+1/2 +REMARK 290 4555 X+1/2,-Y+1/2,-Z +REMARK 290 +REMARK 290 WHERE NNN -> OPERATOR NUMBER +REMARK 290 MMM -> TRANSLATION VECTOR +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY TRANSFORMATIONS +REMARK 290 THE FOLLOWING TRANSFORMATIONS OPERATE ON THE ATOM/HETATM +REMARK 290 RECORDS IN THIS ENTRY TO PRODUCE CRYSTALLOGRAPHICALLY +REMARK 290 RELATED MOLECULES. +REMARK 290 SMTRY1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 290 SMTRY1 2 -1.000000 0.000000 0.000000 26.55000 +REMARK 290 SMTRY2 2 0.000000 -1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 2 0.000000 0.000000 1.000000 31.60000 +REMARK 290 SMTRY1 3 -1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 3 0.000000 1.000000 0.000000 30.50000 +REMARK 290 SMTRY3 3 0.000000 0.000000 -1.000000 31.60000 +REMARK 290 SMTRY1 4 1.000000 0.000000 0.000000 26.55000 +REMARK 290 SMTRY2 4 0.000000 -1.000000 0.000000 30.50000 +REMARK 290 SMTRY3 4 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 +REMARK 290 REMARK: NULL +REMARK 300 +REMARK 300 BIOMOLECULE: 1 +REMARK 300 SEE REMARK 350 FOR THE AUTHOR PROVIDED AND/OR PROGRAM +REMARK 300 GENERATED ASSEMBLY INFORMATION FOR THE STRUCTURE IN +REMARK 300 THIS ENTRY. THE REMARK MAY ALSO PROVIDE INFORMATION ON +REMARK 300 BURIED SURFACE AREA. +REMARK 350 +REMARK 350 COORDINATES FOR A COMPLETE MULTIMER REPRESENTING THE KNOWN +REMARK 350 BIOLOGICALLY SIGNIFICANT OLIGOMERIZATION STATE OF THE +REMARK 350 MOLECULE CAN BE GENERATED BY APPLYING BIOMT TRANSFORMATIONS +REMARK 350 GIVEN BELOW. BOTH NON-CRYSTALLOGRAPHIC AND +REMARK 350 CRYSTALLOGRAPHIC OPERATIONS ARE GIVEN. +REMARK 350 +REMARK 350 BIOMOLECULE: 1 +REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: DIMERIC +REMARK 350 SOFTWARE DETERMINED QUATERNARY STRUCTURE: DIMERIC +REMARK 350 SOFTWARE USED: PISA +REMARK 350 TOTAL BURIED SURFACE AREA: 4910 ANGSTROM**2 +REMARK 350 SURFACE AREA OF THE COMPLEX: 9760 ANGSTROM**2 +REMARK 350 CHANGE IN SOLVENT FREE ENERGY: -18.0 KCAL/MOL +REMARK 350 APPLY THE FOLLOWING TO CHAINS: A, B +REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000 +REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000 +REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 0.00000 +REMARK 480 +REMARK 480 ZERO OCCUPANCY ATOM +REMARK 480 THE FOLLOWING RESIDUES HAVE ATOMS MODELED WITH ZERO +REMARK 480 OCCUPANCY. THE LOCATION AND PROPERTIES OF THESE ATOMS +REMARK 480 MAY NOT BE RELIABLE. (M=MODEL NUMBER; RES=RESIDUE NAME; +REMARK 480 C=CHAIN IDENTIFIER; SSEQ=SEQUENCE NUMBER; I=INSERTION CODE): +REMARK 480 M RES C SSEQI ATOMS +REMARK 480 PHE A 99 O OXT +REMARK 480 PHE B 99 O OXT +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: COVALENT BOND ANGLES +REMARK 500 +REMARK 500 THE STEREOCHEMICAL PARAMETERS OF THE FOLLOWING RESIDUES +REMARK 500 HAVE VALUES WHICH DEVIATE FROM EXPECTED VALUES BY MORE +REMARK 500 THAN 6*RMSD (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN +REMARK 500 IDENTIFIER; SSEQ=SEQUENCE NUMBER; I=INSERTION CODE). +REMARK 500 +REMARK 500 STANDARD TABLE: +REMARK 500 FORMAT: (10X,I3,1X,A3,1X,A1,I4,A1,3(1X,A4,2X),12X,F5.1) +REMARK 500 +REMARK 500 EXPECTED VALUES PROTEIN: ENGH AND HUBER, 1999 +REMARK 500 EXPECTED VALUES NUCLEIC ACID: CLOWNEY ET AL 1996 +REMARK 500 +REMARK 500 M RES CSSEQI ATM1 ATM2 ATM3 +REMARK 500 ARG A 8 NE - CZ - NH1 ANGL. DEV. = 3.6 DEGREES +REMARK 500 ARG A 8 NE - CZ - NH2 ANGL. DEV. = -3.8 DEGREES +REMARK 500 GLY B 17 C - N - CA ANGL. DEV. = -13.0 DEGREES +REMARK 500 ARG B 87 NE - CZ - NH1 ANGL. DEV. = 3.0 DEGREES +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: TORSION ANGLES +REMARK 500 +REMARK 500 TORSION ANGLES OUTSIDE THE EXPECTED RAMACHANDRAN REGIONS: +REMARK 500 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER; +REMARK 500 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE). +REMARK 500 +REMARK 500 STANDARD TABLE: +REMARK 500 FORMAT:(10X,I3,1X,A3,1X,A1,I4,A1,4X,F7.2,3X,F7.2) +REMARK 500 +REMARK 500 EXPECTED VALUES: GJ KLEYWEGT AND TA JONES (1996). PHI/PSI- +REMARK 500 CHOLOGY: RAMACHANDRAN REVISITED. STRUCTURE 4, 1395 - 1400 +REMARK 500 +REMARK 500 M RES CSSEQI PSI PHI +REMARK 500 GLU A 35 108.21 -41.76 +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: NON-CIS, NON-TRANS +REMARK 500 +REMARK 500 THE FOLLOWING PEPTIDE BONDS DEVIATE SIGNIFICANTLY FROM BOTH +REMARK 500 CIS AND TRANS CONFORMATION. CIS BONDS, IF ANY, ARE LISTED +REMARK 500 ON CISPEP RECORDS. TRANS IS DEFINED AS 180 +/- 30 AND +REMARK 500 CIS IS DEFINED AS 0 +/- 30 DEGREES. +REMARK 500 MODEL OMEGA +REMARK 500 PRO B 1 GLN B 2 131.86 +REMARK 500 ASN B 98 PHE B 99 -122.45 +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: PLANAR GROUPS +REMARK 500 +REMARK 500 PLANAR GROUPS IN THE FOLLOWING RESIDUES HAVE A TOTAL +REMARK 500 RMS DISTANCE OF ALL ATOMS FROM THE BEST-FIT PLANE +REMARK 500 BY MORE THAN AN EXPECTED VALUE OF 6*RMSD, WITH AN +REMARK 500 RMSD 0.02 ANGSTROMS, OR AT LEAST ONE ATOM HAS +REMARK 500 AN RMSD GREATER THAN THIS VALUE +REMARK 500 (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN IDENTIFIER; +REMARK 500 SSEQ=SEQUENCE NUMBER; I=INSERTION CODE). +REMARK 500 +REMARK 500 M RES CSSEQI RMS TYPE +REMARK 500 ARG A 87 0.20 SIDE_CHAIN +REMARK 500 ARG B 87 0.13 SIDE_CHAIN +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: CHIRAL CENTERS +REMARK 500 +REMARK 500 UNEXPECTED CONFIGURATION OF THE FOLLOWING CHIRAL +REMARK 500 CENTER(S) USING IMPROPER CA--C--CB--N CHIRALITY +REMARK 500 M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN +REMARK 500 IDENTIFIER; SSEQ=SEQUENCE NUMBER; I=INSERTION CODE +REMARK 500 +REMARK 500 STANDARD TABLE: +REMARK 500 FORMAT: (11X,I3,1X,A3,1X,A1,I4,A1,6X,F5.1,6X,A1,10X,A1,3X,A16) +REMARK 500 +REMARK 500 M RES CSSEQI IMPROPER EXPECTED FOUND DETAILS +REMARK 500 PRO A 1 144.2 ALPHA-CARBON +REMARK 500 PRO B 1 137.7 ALPHA-CARBON +REMARK 500 PHE B 99 141.9 ALPHA-CARBON +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 800 +REMARK 800 SITE +REMARK 800 SITE_IDENTIFIER: AC1 +REMARK 800 EVIDENCE_CODE: SOFTWARE +REMARK 800 SITE_DESCRIPTION: BINDING SITE FOR RESIDUE ARQ A 401 +DBREF 3AID A 1 99 UNP P03369 POL_HV1A2 57 155 +DBREF 3AID B 1 99 UNP P03369 POL_HV1A2 57 155 +SEQADV 3AID LYS A 7 UNP P03369 GLN 63 ENGINEERED +SEQADV 3AID LYS B 7 UNP P03369 GLN 63 ENGINEERED +SEQRES 1 A 99 PRO GLN ILE THR LEU TRP LYS ARG PRO LEU VAL THR ILE +SEQRES 2 A 99 ARG ILE GLY GLY GLN LEU LYS GLU ALA LEU LEU ASP THR +SEQRES 3 A 99 GLY ALA ASP ASP THR VAL LEU GLU GLU MET ASN LEU PRO +SEQRES 4 A 99 GLY LYS TRP LYS PRO LYS MET ILE GLY GLY ILE GLY GLY +SEQRES 5 A 99 PHE ILE LYS VAL ARG GLN TYR ASP GLN ILE PRO VAL GLU +SEQRES 6 A 99 ILE CYS GLY HIS LYS ALA ILE GLY THR VAL LEU VAL GLY +SEQRES 7 A 99 PRO THR PRO VAL ASN ILE ILE GLY ARG ASN LEU LEU THR +SEQRES 8 A 99 GLN ILE GLY CYS THR LEU ASN PHE +SEQRES 1 B 99 PRO GLN ILE THR LEU TRP LYS ARG PRO LEU VAL THR ILE +SEQRES 2 B 99 ARG ILE GLY GLY GLN LEU LYS GLU ALA LEU LEU ASP THR +SEQRES 3 B 99 GLY ALA ASP ASP THR VAL LEU GLU GLU MET ASN LEU PRO +SEQRES 4 B 99 GLY LYS TRP LYS PRO LYS MET ILE GLY GLY ILE GLY GLY +SEQRES 5 B 99 PHE ILE LYS VAL ARG GLN TYR ASP GLN ILE PRO VAL GLU +SEQRES 6 B 99 ILE CYS GLY HIS LYS ALA ILE GLY THR VAL LEU VAL GLY +SEQRES 7 B 99 PRO THR PRO VAL ASN ILE ILE GLY ARG ASN LEU LEU THR +SEQRES 8 B 99 GLN ILE GLY CYS THR LEU ASN PHE +HET ARQ A 401 42 +HETNAM ARQ BENZOYLAMINO-BENZYL-METHYL-[2-HYDROXY-3-[1-METHYL- +HETNAM 2 ARQ ETHYL-OXY-N-FORMAMIDYL]-4-PHENYL-BUTYL]-AMMONIUM +FORMUL 3 ARQ C30 H38 N3 O4 1+ +FORMUL 4 HOH *8(H2 O) +HELIX 1 1 ARG A 87 LEU A 90 1 4 +HELIX 2 2 ARG B 87 LEU B 90 1 4 +SHEET 1 A 4 GLN A 18 LEU A 23 0 +SHEET 2 A 4 LEU A 10 ILE A 15 -1 N ILE A 15 O GLN A 18 +SHEET 3 A 4 ILE A 62 ILE A 66 -1 N GLU A 65 O ARG A 14 +SHEET 4 A 4 HIS A 69 GLY A 73 -1 N GLY A 73 O ILE A 62 +SHEET 1 B 3 LYS A 43 GLY A 49 0 +SHEET 2 B 3 GLY A 52 TYR A 59 -1 N GLN A 58 O LYS A 43 +SHEET 3 B 3 VAL A 75 GLY A 78 -1 N VAL A 77 O ARG A 57 +SHEET 1 C 2 THR A 96 ASN A 98 0 +SHEET 2 C 2 THR B 96 ASN B 98 -1 N ASN B 98 O THR A 96 +SHEET 1 D 2 LEU B 10 ILE B 15 0 +SHEET 2 D 2 GLN B 18 LEU B 23 -1 N ALA B 22 O VAL B 11 +SHEET 1 E 3 TRP B 42 GLY B 49 0 +SHEET 2 E 3 GLY B 52 TYR B 59 -1 N GLN B 58 O LYS B 43 +SHEET 3 E 3 VAL B 75 GLY B 78 -1 N VAL B 77 O ARG B 57 +SHEET 1 F 2 ILE B 62 ILE B 66 0 +SHEET 2 F 2 HIS B 69 GLY B 73 -1 N GLY B 73 O ILE B 62 +SITE 1 AC1 10 ASP A 25 GLY A 27 ALA A 28 ILE A 50 +SITE 2 AC1 10 HOH A 402 LEU B 23 ASP B 25 GLY B 27 +SITE 3 AC1 10 GLY B 49 ILE B 50 +CRYST1 53.100 61.000 63.200 90.00 90.00 90.00 P 21 21 21 8 +ORIGX1 1.000000 0.000000 0.000000 0.00000 +ORIGX2 0.000000 1.000000 0.000000 0.00000 +ORIGX3 0.000000 0.000000 1.000000 0.00000 +SCALE1 0.018832 0.000000 0.000000 0.00000 +SCALE2 0.000000 0.016393 0.000000 0.00000 +SCALE3 0.000000 0.000000 0.015823 0.00000 +ATOM 1 N PRO A 1 -2.555 9.253 34.411 1.00 30.60 N +ATOM 2 CA PRO A 1 -1.620 8.250 33.848 1.00 28.31 C +ATOM 3 C PRO A 1 -0.108 8.328 33.944 1.00 23.58 C +ATOM 4 O PRO A 1 0.501 8.910 33.067 1.00 29.57 O +ATOM 5 CB PRO A 1 -2.238 6.879 33.989 1.00 28.94 C +ATOM 6 CG PRO A 1 -3.624 7.314 33.540 1.00 32.55 C +ATOM 7 CD PRO A 1 -3.859 8.575 34.395 1.00 34.64 C +ATOM 8 H2 PRO A 1 -2.308 9.752 35.280 0.00 0.00 H +ATOM 9 H3 PRO A 1 -2.623 10.035 33.697 0.00 0.00 H +ATOM 10 N GLN A 2 0.519 7.674 34.926 1.00 20.68 N +ATOM 11 CA GLN A 2 1.942 7.366 34.601 1.00 22.20 C +ATOM 12 C GLN A 2 2.286 5.899 34.319 1.00 22.20 C +ATOM 13 O GLN A 2 2.239 5.053 35.212 1.00 24.91 O +ATOM 14 CB GLN A 2 3.002 7.941 35.586 1.00 22.73 C +ATOM 15 CG GLN A 2 4.462 7.592 35.145 1.00 23.29 C +ATOM 16 CD GLN A 2 5.541 8.058 36.132 1.00 23.86 C +ATOM 17 OE1 GLN A 2 6.166 9.080 35.963 1.00 21.61 O +ATOM 18 NE2 GLN A 2 5.815 7.280 37.164 1.00 21.66 N +ATOM 19 H GLN A 2 0.038 7.260 35.695 1.00 15.00 H +ATOM 20 HE21 GLN A 2 6.517 7.687 37.741 1.00 15.00 H +ATOM 21 HE22 GLN A 2 5.386 6.401 37.335 1.00 15.00 H +ATOM 22 N ILE A 3 2.606 5.658 33.030 1.00 18.27 N +ATOM 23 CA ILE A 3 2.930 4.304 32.526 1.00 14.22 C +ATOM 24 C ILE A 3 4.436 4.069 32.273 1.00 15.16 C +ATOM 25 O ILE A 3 5.020 4.591 31.332 1.00 20.12 O +ATOM 26 CB ILE A 3 2.076 3.977 31.276 1.00 8.81 C +ATOM 27 CG1 ILE A 3 0.614 4.286 31.565 1.00 6.38 C +ATOM 28 CG2 ILE A 3 2.170 2.509 30.873 1.00 3.08 C +ATOM 29 CD1 ILE A 3 -0.351 3.719 30.518 1.00 10.97 C +ATOM 30 H ILE A 3 2.634 6.454 32.436 1.00 15.00 H +ATOM 31 N THR A 4 5.050 3.270 33.166 1.00 10.39 N +ATOM 32 CA THR A 4 6.416 2.743 32.935 1.00 10.00 C +ATOM 33 C THR A 4 6.599 1.452 32.068 1.00 11.66 C +ATOM 34 O THR A 4 5.793 0.527 32.112 1.00 15.69 O +ATOM 35 CB THR A 4 7.056 2.437 34.248 1.00 4.39 C +ATOM 36 OG1 THR A 4 6.473 1.231 34.804 1.00 5.25 O +ATOM 37 CG2 THR A 4 6.920 3.635 35.165 1.00 2.00 C +ATOM 38 H THR A 4 4.492 2.965 33.935 1.00 15.00 H +ATOM 39 HG1 THR A 4 5.929 0.815 34.136 1.00 15.00 H +ATOM 40 N LEU A 5 7.715 1.398 31.321 1.00 8.84 N +ATOM 41 CA LEU A 5 7.870 0.420 30.235 1.00 7.65 C +ATOM 42 C LEU A 5 8.606 -0.903 30.466 1.00 8.47 C +ATOM 43 O LEU A 5 9.134 -1.511 29.545 1.00 9.06 O +ATOM 44 CB LEU A 5 8.534 1.094 29.034 1.00 6.66 C +ATOM 45 CG LEU A 5 7.818 2.230 28.311 1.00 9.11 C +ATOM 46 CD1 LEU A 5 6.305 2.030 28.315 1.00 10.52 C +ATOM 47 CD2 LEU A 5 8.236 3.611 28.775 1.00 10.50 C +ATOM 48 H LEU A 5 8.405 2.109 31.468 1.00 15.00 H +ATOM 49 N TRP A 6 8.646 -1.381 31.725 1.00 13.00 N +ATOM 50 CA TRP A 6 9.213 -2.750 31.877 1.00 14.24 C +ATOM 51 C TRP A 6 8.280 -3.867 31.412 1.00 14.81 C +ATOM 52 O TRP A 6 8.651 -5.001 31.168 1.00 16.96 O +ATOM 53 CB TRP A 6 9.687 -3.124 33.289 1.00 14.28 C +ATOM 54 CG TRP A 6 10.074 -1.910 34.088 1.00 20.68 C +ATOM 55 CD1 TRP A 6 9.182 -1.145 34.863 1.00 27.93 C +ATOM 56 CD2 TRP A 6 11.333 -1.208 34.201 1.00 21.72 C +ATOM 57 NE1 TRP A 6 9.777 -0.041 35.406 1.00 26.52 N +ATOM 58 CE2 TRP A 6 11.101 -0.027 35.017 1.00 22.61 C +ATOM 59 CE3 TRP A 6 12.617 -1.473 33.714 1.00 16.16 C +ATOM 60 CZ2 TRP A 6 12.128 0.887 35.290 1.00 20.31 C +ATOM 61 CZ3 TRP A 6 13.644 -0.553 34.018 1.00 17.45 C +ATOM 62 CH2 TRP A 6 13.406 0.616 34.778 1.00 18.71 C +ATOM 63 H TRP A 6 8.228 -0.834 32.447 1.00 15.00 H +ATOM 64 HE1 TRP A 6 9.317 0.632 35.960 1.00 15.00 H +ATOM 65 N LYS A 7 7.017 -3.454 31.284 1.00 12.93 N +ATOM 66 CA LYS A 7 5.990 -4.250 30.643 1.00 9.56 C +ATOM 67 C LYS A 7 5.420 -3.525 29.460 1.00 11.55 C +ATOM 68 O LYS A 7 5.478 -2.299 29.399 1.00 12.41 O +ATOM 69 CB LYS A 7 4.841 -4.432 31.607 1.00 18.71 C +ATOM 70 CG LYS A 7 5.137 -5.278 32.839 1.00 28.83 C +ATOM 71 CD LYS A 7 3.948 -5.219 33.795 1.00 36.81 C +ATOM 72 CE LYS A 7 4.209 -5.975 35.117 1.00 43.42 C +ATOM 73 NZ LYS A 7 3.160 -5.652 36.107 1.00 42.34 N +ATOM 74 H LYS A 7 6.799 -2.518 31.545 1.00 15.00 H +ATOM 75 HZ1 LYS A 7 2.887 -4.655 35.991 1.00 15.00 H +ATOM 76 HZ2 LYS A 7 2.331 -6.260 35.944 1.00 15.00 H +ATOM 77 HZ3 LYS A 7 3.527 -5.810 37.067 1.00 15.00 H +ATOM 78 N ARG A 8 4.801 -4.305 28.535 1.00 12.42 N +ATOM 79 CA ARG A 8 4.091 -3.587 27.449 1.00 10.97 C +ATOM 80 C ARG A 8 3.003 -2.612 27.887 1.00 11.55 C +ATOM 81 O ARG A 8 2.184 -2.938 28.746 1.00 13.27 O +ATOM 82 CB ARG A 8 3.384 -4.517 26.488 1.00 9.39 C +ATOM 83 CG ARG A 8 4.144 -5.748 26.107 1.00 6.80 C +ATOM 84 CD ARG A 8 3.297 -6.581 25.184 1.00 12.73 C +ATOM 85 NE ARG A 8 4.151 -7.669 24.790 1.00 28.15 N +ATOM 86 CZ ARG A 8 4.343 -8.083 23.521 1.00 36.60 C +ATOM 87 NH1 ARG A 8 3.598 -7.690 22.490 1.00 33.53 N +ATOM 88 NH2 ARG A 8 5.334 -8.947 23.322 1.00 45.16 N +ATOM 89 H ARG A 8 4.761 -5.287 28.694 1.00 15.00 H +ATOM 90 HE ARG A 8 4.684 -8.129 25.500 1.00 15.00 H +ATOM 91 HH11 ARG A 8 2.832 -7.063 22.626 1.00 15.00 H +ATOM 92 HH12 ARG A 8 3.812 -8.029 21.574 1.00 15.00 H +ATOM 93 HH21 ARG A 8 5.883 -9.253 24.101 1.00 15.00 H +ATOM 94 HH22 ARG A 8 5.536 -9.289 22.407 1.00 15.00 H +ATOM 95 N PRO A 9 2.957 -1.418 27.265 1.00 10.22 N +ATOM 96 CA PRO A 9 1.838 -0.522 27.644 1.00 9.31 C +ATOM 97 C PRO A 9 0.443 -0.973 27.113 1.00 9.47 C +ATOM 98 O PRO A 9 -0.016 -0.531 26.071 1.00 12.70 O +ATOM 99 CB PRO A 9 2.350 0.830 27.118 1.00 7.49 C +ATOM 100 CG PRO A 9 3.309 0.489 25.949 1.00 10.39 C +ATOM 101 CD PRO A 9 3.886 -0.881 26.272 1.00 7.83 C +ATOM 102 N LEU A 10 -0.222 -1.893 27.855 1.00 10.28 N +ATOM 103 CA LEU A 10 -1.555 -2.420 27.472 1.00 5.59 C +ATOM 104 C LEU A 10 -2.725 -1.865 28.254 1.00 6.30 C +ATOM 105 O LEU A 10 -2.737 -1.938 29.472 1.00 9.79 O +ATOM 106 CB LEU A 10 -1.653 -3.892 27.745 1.00 2.00 C +ATOM 107 CG LEU A 10 -1.056 -4.838 26.734 1.00 2.00 C +ATOM 108 CD1 LEU A 10 -1.127 -6.225 27.327 1.00 2.00 C +ATOM 109 CD2 LEU A 10 -1.725 -4.792 25.361 1.00 2.00 C +ATOM 110 H LEU A 10 0.241 -2.213 28.683 1.00 15.00 H +ATOM 111 N VAL A 11 -3.701 -1.304 27.534 1.00 8.40 N +ATOM 112 CA VAL A 11 -4.916 -0.688 28.141 1.00 13.91 C +ATOM 113 C VAL A 11 -6.236 -1.349 27.788 1.00 13.86 C +ATOM 114 O VAL A 11 -6.351 -2.140 26.860 1.00 17.89 O +ATOM 115 CB VAL A 11 -5.114 0.850 27.856 1.00 12.10 C +ATOM 116 CG1 VAL A 11 -4.279 1.777 28.747 1.00 7.44 C +ATOM 117 CG2 VAL A 11 -5.022 1.221 26.378 1.00 11.10 C +ATOM 118 H VAL A 11 -3.481 -1.176 26.579 1.00 15.00 H +ATOM 119 N THR A 12 -7.266 -0.967 28.535 1.00 10.31 N +ATOM 120 CA THR A 12 -8.564 -1.409 28.023 1.00 10.43 C +ATOM 121 C THR A 12 -9.308 -0.344 27.224 1.00 11.24 C +ATOM 122 O THR A 12 -9.366 0.823 27.604 1.00 10.44 O +ATOM 123 CB THR A 12 -9.457 -1.922 29.145 1.00 12.18 C +ATOM 124 OG1 THR A 12 -8.702 -2.710 30.069 1.00 17.40 O +ATOM 125 CG2 THR A 12 -10.631 -2.754 28.609 1.00 17.57 C +ATOM 126 H THR A 12 -7.147 -0.445 29.378 1.00 15.00 H +ATOM 127 HG1 THR A 12 -8.439 -3.503 29.623 1.00 15.00 H +ATOM 128 N ILE A 13 -9.871 -0.754 26.084 1.00 9.17 N +ATOM 129 CA ILE A 13 -10.756 0.212 25.415 1.00 12.06 C +ATOM 130 C ILE A 13 -12.234 -0.216 25.366 1.00 10.83 C +ATOM 131 O ILE A 13 -12.538 -1.399 25.368 1.00 9.79 O +ATOM 132 CB ILE A 13 -10.210 0.567 24.013 1.00 12.82 C +ATOM 133 CG1 ILE A 13 -10.268 -0.673 23.102 1.00 13.26 C +ATOM 134 CG2 ILE A 13 -8.775 1.089 24.152 1.00 10.61 C +ATOM 135 CD1 ILE A 13 -9.741 -0.448 21.680 1.00 8.04 C +ATOM 136 H ILE A 13 -9.726 -1.672 25.742 1.00 15.00 H +ATOM 137 N ARG A 14 -13.131 0.779 25.310 1.00 11.30 N +ATOM 138 CA ARG A 14 -14.522 0.471 24.896 1.00 12.92 C +ATOM 139 C ARG A 14 -15.041 1.080 23.583 1.00 10.44 C +ATOM 140 O ARG A 14 -15.093 2.293 23.409 1.00 7.41 O +ATOM 141 CB ARG A 14 -15.504 0.807 26.012 1.00 14.22 C +ATOM 142 CG ARG A 14 -16.864 0.177 25.793 1.00 17.00 C +ATOM 143 CD ARG A 14 -17.694 0.101 27.077 1.00 26.96 C +ATOM 144 NE ARG A 14 -18.008 1.437 27.592 1.00 36.17 N +ATOM 145 CZ ARG A 14 -19.298 1.876 27.717 1.00 37.70 C +ATOM 146 NH1 ARG A 14 -20.333 1.094 27.387 1.00 32.95 N +ATOM 147 NH2 ARG A 14 -19.525 3.107 28.183 1.00 36.64 N +ATOM 148 H ARG A 14 -12.790 1.708 25.451 1.00 15.00 H +ATOM 149 HE ARG A 14 -17.264 2.048 27.861 1.00 15.00 H +ATOM 150 HH11 ARG A 14 -20.172 0.168 27.046 1.00 15.00 H +ATOM 151 HH12 ARG A 14 -21.270 1.431 27.484 1.00 15.00 H +ATOM 152 HH21 ARG A 14 -18.757 3.696 28.432 1.00 15.00 H +ATOM 153 HH22 ARG A 14 -20.463 3.436 28.281 1.00 15.00 H +ATOM 154 N ILE A 15 -15.430 0.176 22.675 1.00 12.87 N +ATOM 155 CA ILE A 15 -15.898 0.493 21.290 1.00 15.53 C +ATOM 156 C ILE A 15 -17.205 -0.298 20.877 1.00 18.97 C +ATOM 157 O ILE A 15 -17.352 -1.513 21.048 1.00 18.58 O +ATOM 158 CB ILE A 15 -14.683 0.289 20.287 1.00 11.75 C +ATOM 159 CG1 ILE A 15 -14.865 0.767 18.845 1.00 16.54 C +ATOM 160 CG2 ILE A 15 -14.203 -1.165 20.176 1.00 8.01 C +ATOM 161 CD1 ILE A 15 -13.597 0.580 17.968 1.00 8.82 C +ATOM 162 H ILE A 15 -15.304 -0.768 22.981 1.00 15.00 H +ATOM 163 N GLY A 16 -18.222 0.426 20.372 1.00 17.76 N +ATOM 164 CA GLY A 16 -19.516 -0.259 20.088 1.00 19.38 C +ATOM 165 C GLY A 16 -20.301 -1.000 21.233 1.00 24.46 C +ATOM 166 O GLY A 16 -20.991 -1.996 21.018 1.00 24.31 O +ATOM 167 H GLY A 16 -18.033 1.383 20.158 1.00 15.00 H +ATOM 168 N GLY A 17 -20.087 -0.491 22.484 1.00 24.55 N +ATOM 169 CA GLY A 17 -20.430 -1.299 23.661 1.00 24.34 C +ATOM 170 C GLY A 17 -19.445 -2.433 24.070 1.00 27.45 C +ATOM 171 O GLY A 17 -19.508 -2.983 25.156 1.00 29.91 O +ATOM 172 H GLY A 17 -19.559 0.351 22.553 1.00 15.00 H +ATOM 173 N GLN A 18 -18.495 -2.765 23.170 1.00 26.11 N +ATOM 174 CA GLN A 18 -17.478 -3.803 23.456 1.00 20.99 C +ATOM 175 C GLN A 18 -16.203 -3.371 24.218 1.00 15.25 C +ATOM 176 O GLN A 18 -15.635 -2.312 23.997 1.00 11.39 O +ATOM 177 CB GLN A 18 -17.005 -4.489 22.166 1.00 23.80 C +ATOM 178 CG GLN A 18 -18.029 -4.623 21.041 1.00 32.40 C +ATOM 179 CD GLN A 18 -19.152 -5.530 21.478 1.00 38.02 C +ATOM 180 OE1 GLN A 18 -18.938 -6.689 21.796 1.00 37.03 O +ATOM 181 NE2 GLN A 18 -20.364 -4.962 21.485 1.00 39.34 N +ATOM 182 H GLN A 18 -18.474 -2.254 22.318 1.00 15.00 H +ATOM 183 HE21 GLN A 18 -21.093 -5.567 21.790 1.00 15.00 H +ATOM 184 HE22 GLN A 18 -20.563 -4.026 21.197 1.00 15.00 H +ATOM 185 N LEU A 19 -15.782 -4.293 25.086 1.00 11.19 N +ATOM 186 CA LEU A 19 -14.556 -4.231 25.893 1.00 13.09 C +ATOM 187 C LEU A 19 -13.336 -5.013 25.346 1.00 15.36 C +ATOM 188 O LEU A 19 -13.250 -6.240 25.418 1.00 17.95 O +ATOM 189 CB LEU A 19 -14.906 -4.687 27.338 1.00 11.59 C +ATOM 190 CG LEU A 19 -14.624 -3.661 28.457 1.00 12.93 C +ATOM 191 CD1 LEU A 19 -14.946 -2.235 28.030 1.00 11.72 C +ATOM 192 CD2 LEU A 19 -15.342 -3.985 29.758 1.00 11.09 C +ATOM 193 H LEU A 19 -16.371 -5.096 25.148 1.00 15.00 H +ATOM 194 N LYS A 20 -12.370 -4.247 24.790 1.00 14.09 N +ATOM 195 CA LYS A 20 -11.142 -4.882 24.258 1.00 14.64 C +ATOM 196 C LYS A 20 -9.802 -4.451 24.908 1.00 14.53 C +ATOM 197 O LYS A 20 -9.642 -3.401 25.505 1.00 12.98 O +ATOM 198 CB LYS A 20 -11.043 -4.676 22.726 1.00 17.47 C +ATOM 199 CG LYS A 20 -12.017 -5.389 21.788 1.00 19.14 C +ATOM 200 CD LYS A 20 -11.772 -5.048 20.311 1.00 24.53 C +ATOM 201 CE LYS A 20 -11.560 -6.280 19.383 1.00 29.82 C +ATOM 202 NZ LYS A 20 -11.034 -5.893 18.044 1.00 29.67 N +ATOM 203 H LYS A 20 -12.518 -3.255 24.813 1.00 15.00 H +ATOM 204 HZ1 LYS A 20 -11.563 -5.071 17.687 1.00 15.00 H +ATOM 205 HZ2 LYS A 20 -10.029 -5.641 18.136 1.00 15.00 H +ATOM 206 HZ3 LYS A 20 -11.132 -6.685 17.378 1.00 15.00 H +ATOM 207 N GLU A 21 -8.793 -5.297 24.735 1.00 17.16 N +ATOM 208 CA GLU A 21 -7.435 -4.835 25.101 1.00 19.20 C +ATOM 209 C GLU A 21 -6.558 -4.227 23.984 1.00 16.65 C +ATOM 210 O GLU A 21 -6.418 -4.773 22.892 1.00 14.72 O +ATOM 211 CB GLU A 21 -6.673 -5.991 25.757 1.00 27.98 C +ATOM 212 CG GLU A 21 -5.828 -5.575 26.971 1.00 36.72 C +ATOM 213 CD GLU A 21 -6.619 -5.622 28.289 1.00 40.40 C +ATOM 214 OE1 GLU A 21 -7.802 -5.261 28.334 1.00 40.04 O +ATOM 215 OE2 GLU A 21 -6.026 -6.027 29.287 1.00 43.31 O +ATOM 216 H GLU A 21 -8.967 -6.156 24.259 1.00 15.00 H +ATOM 217 N ALA A 22 -5.972 -3.066 24.276 1.00 14.75 N +ATOM 218 CA ALA A 22 -5.100 -2.434 23.260 1.00 11.83 C +ATOM 219 C ALA A 22 -3.705 -1.932 23.759 1.00 9.55 C +ATOM 220 O ALA A 22 -3.453 -1.775 24.948 1.00 7.28 O +ATOM 221 CB ALA A 22 -5.865 -1.280 22.617 1.00 11.78 C +ATOM 222 H ALA A 22 -6.107 -2.677 25.179 1.00 15.00 H +ATOM 223 N LEU A 23 -2.787 -1.711 22.805 1.00 5.96 N +ATOM 224 CA LEU A 23 -1.397 -1.289 23.114 1.00 4.12 C +ATOM 225 C LEU A 23 -1.118 0.146 22.698 1.00 2.00 C +ATOM 226 O LEU A 23 -1.441 0.552 21.586 1.00 2.00 O +ATOM 227 CB LEU A 23 -0.438 -2.253 22.366 1.00 4.90 C +ATOM 228 CG LEU A 23 1.083 -2.186 22.476 1.00 2.00 C +ATOM 229 CD1 LEU A 23 1.571 -2.706 23.809 1.00 7.34 C +ATOM 230 CD2 LEU A 23 1.744 -3.023 21.405 1.00 3.18 C +ATOM 231 H LEU A 23 -3.068 -1.872 21.862 1.00 15.00 H +ATOM 232 N LEU A 24 -0.537 0.896 23.624 1.00 2.00 N +ATOM 233 CA LEU A 24 -0.196 2.267 23.300 1.00 2.00 C +ATOM 234 C LEU A 24 1.124 2.367 22.612 1.00 3.88 C +ATOM 235 O LEU A 24 2.176 2.052 23.152 1.00 6.52 O +ATOM 236 CB LEU A 24 -0.090 3.152 24.536 1.00 9.50 C +ATOM 237 CG LEU A 24 -1.255 3.055 25.535 1.00 15.22 C +ATOM 238 CD1 LEU A 24 -0.973 3.913 26.770 1.00 12.11 C +ATOM 239 CD2 LEU A 24 -2.622 3.353 24.899 1.00 12.26 C +ATOM 240 H LEU A 24 -0.281 0.454 24.486 1.00 15.00 H +ATOM 241 N ASP A 25 1.038 2.790 21.357 1.00 7.69 N +ATOM 242 CA ASP A 25 2.150 2.485 20.441 1.00 7.59 C +ATOM 243 C ASP A 25 2.638 3.731 19.715 1.00 7.44 C +ATOM 244 O ASP A 25 2.305 3.987 18.574 1.00 8.42 O +ATOM 245 CB ASP A 25 1.693 1.332 19.491 1.00 10.29 C +ATOM 246 CG ASP A 25 2.634 0.934 18.354 1.00 14.25 C +ATOM 247 OD1 ASP A 25 3.520 1.687 17.966 1.00 15.67 O +ATOM 248 OD2 ASP A 25 2.465 -0.161 17.838 1.00 16.99 O +ATOM 249 H ASP A 25 0.142 3.095 21.017 1.00 15.00 H +ATOM 250 N THR A 26 3.487 4.495 20.404 1.00 5.41 N +ATOM 251 CA THR A 26 3.974 5.754 19.819 1.00 2.13 C +ATOM 252 C THR A 26 4.681 5.739 18.455 1.00 2.64 C +ATOM 253 O THR A 26 4.739 6.713 17.725 1.00 4.71 O +ATOM 254 CB THR A 26 4.908 6.402 20.819 1.00 3.16 C +ATOM 255 OG1 THR A 26 6.075 5.582 21.010 1.00 10.74 O +ATOM 256 CG2 THR A 26 4.172 6.524 22.144 1.00 6.50 C +ATOM 257 H THR A 26 3.761 4.193 21.320 1.00 15.00 H +ATOM 258 HG1 THR A 26 6.833 6.097 20.712 1.00 15.00 H +ATOM 259 N GLY A 27 5.240 4.582 18.101 1.00 3.99 N +ATOM 260 CA GLY A 27 5.764 4.489 16.717 1.00 5.22 C +ATOM 261 C GLY A 27 4.807 4.080 15.556 1.00 4.61 C +ATOM 262 O GLY A 27 5.169 3.927 14.399 1.00 3.35 O +ATOM 263 H GLY A 27 5.207 3.817 18.736 1.00 15.00 H +ATOM 264 N ALA A 28 3.519 3.982 15.911 1.00 6.91 N +ATOM 265 CA ALA A 28 2.455 3.921 14.904 1.00 3.02 C +ATOM 266 C ALA A 28 1.731 5.256 14.687 1.00 3.42 C +ATOM 267 O ALA A 28 1.156 5.870 15.572 1.00 3.02 O +ATOM 268 CB ALA A 28 1.433 2.831 15.275 1.00 2.00 C +ATOM 269 H ALA A 28 3.297 4.070 16.878 1.00 15.00 H +ATOM 270 N ASP A 29 1.735 5.695 13.417 1.00 3.92 N +ATOM 271 CA ASP A 29 0.961 6.906 13.082 1.00 6.42 C +ATOM 272 C ASP A 29 -0.564 6.870 13.321 1.00 6.90 C +ATOM 273 O ASP A 29 -1.237 7.831 13.680 1.00 7.18 O +ATOM 274 CB ASP A 29 1.214 7.334 11.621 1.00 10.78 C +ATOM 275 CG ASP A 29 2.652 7.723 11.241 1.00 16.60 C +ATOM 276 OD1 ASP A 29 3.473 8.024 12.119 1.00 16.61 O +ATOM 277 OD2 ASP A 29 2.937 7.729 10.035 1.00 19.82 O +ATOM 278 H ASP A 29 2.329 5.189 12.788 1.00 15.00 H +ATOM 279 N ASP A 30 -1.060 5.654 13.068 1.00 10.14 N +ATOM 280 CA ASP A 30 -2.488 5.277 13.093 1.00 9.04 C +ATOM 281 C ASP A 30 -2.819 4.094 14.037 1.00 10.66 C +ATOM 282 O ASP A 30 -1.961 3.353 14.529 1.00 10.32 O +ATOM 283 CB ASP A 30 -3.013 4.874 11.694 1.00 8.49 C +ATOM 284 CG ASP A 30 -2.604 5.771 10.511 1.00 12.48 C +ATOM 285 OD1 ASP A 30 -2.969 6.951 10.471 1.00 13.46 O +ATOM 286 OD2 ASP A 30 -1.929 5.277 9.606 1.00 14.26 O +ATOM 287 H ASP A 30 -0.378 4.955 12.866 1.00 15.00 H +ATOM 288 N THR A 31 -4.147 3.987 14.228 1.00 10.75 N +ATOM 289 CA THR A 31 -4.846 3.005 15.081 1.00 8.58 C +ATOM 290 C THR A 31 -5.458 1.897 14.250 1.00 14.08 C +ATOM 291 O THR A 31 -6.255 2.173 13.366 1.00 17.64 O +ATOM 292 CB THR A 31 -5.964 3.748 15.851 1.00 8.52 C +ATOM 293 OG1 THR A 31 -5.386 4.814 16.619 1.00 5.59 O +ATOM 294 CG2 THR A 31 -6.900 2.920 16.750 1.00 5.14 C +ATOM 295 H THR A 31 -4.696 4.667 13.750 1.00 15.00 H +ATOM 296 HG1 THR A 31 -5.542 5.620 16.140 1.00 15.00 H +ATOM 297 N VAL A 32 -5.041 0.651 14.549 1.00 14.57 N +ATOM 298 CA VAL A 32 -5.394 -0.599 13.818 1.00 11.51 C +ATOM 299 C VAL A 32 -5.834 -1.722 14.783 1.00 12.42 C +ATOM 300 O VAL A 32 -5.219 -2.060 15.809 1.00 9.55 O +ATOM 301 CB VAL A 32 -4.226 -1.172 12.961 1.00 11.77 C +ATOM 302 CG1 VAL A 32 -4.659 -2.391 12.146 1.00 7.51 C +ATOM 303 CG2 VAL A 32 -3.615 -0.156 11.996 1.00 9.56 C +ATOM 304 H VAL A 32 -4.480 0.606 15.379 1.00 15.00 H +ATOM 305 N LEU A 33 -6.996 -2.262 14.399 1.00 8.46 N +ATOM 306 CA LEU A 33 -7.736 -3.086 15.361 1.00 6.71 C +ATOM 307 C LEU A 33 -8.115 -4.411 14.697 1.00 5.60 C +ATOM 308 O LEU A 33 -8.200 -4.467 13.472 1.00 5.00 O +ATOM 309 CB LEU A 33 -8.939 -2.216 15.805 1.00 9.14 C +ATOM 310 CG LEU A 33 -9.079 -1.598 17.233 1.00 11.97 C +ATOM 311 CD1 LEU A 33 -7.885 -0.913 17.897 1.00 8.88 C +ATOM 312 CD2 LEU A 33 -10.185 -0.573 17.172 1.00 15.65 C +ATOM 313 H LEU A 33 -7.396 -1.982 13.525 1.00 15.00 H +ATOM 314 N GLU A 34 -8.299 -5.481 15.493 1.00 6.68 N +ATOM 315 CA GLU A 34 -8.591 -6.789 14.850 1.00 10.45 C +ATOM 316 C GLU A 34 -9.937 -6.870 14.168 1.00 11.56 C +ATOM 317 O GLU A 34 -10.780 -6.017 14.371 1.00 13.54 O +ATOM 318 CB GLU A 34 -8.470 -7.969 15.820 1.00 14.09 C +ATOM 319 CG GLU A 34 -7.056 -8.084 16.443 1.00 24.30 C +ATOM 320 CD GLU A 34 -7.025 -8.905 17.749 1.00 33.54 C +ATOM 321 OE1 GLU A 34 -8.068 -9.169 18.379 1.00 35.23 O +ATOM 322 OE2 GLU A 34 -5.919 -9.262 18.145 1.00 34.97 O +ATOM 323 H GLU A 34 -8.257 -5.324 16.478 1.00 15.00 H +ATOM 324 N GLU A 35 -10.144 -7.918 13.360 1.00 15.87 N +ATOM 325 CA GLU A 35 -11.484 -8.118 12.720 1.00 20.76 C +ATOM 326 C GLU A 35 -12.751 -7.880 13.549 1.00 19.68 C +ATOM 327 O GLU A 35 -13.089 -8.704 14.391 1.00 23.35 O +ATOM 328 CB GLU A 35 -11.714 -9.549 12.214 1.00 20.31 C +ATOM 329 CG GLU A 35 -11.549 -9.697 10.718 1.00 30.20 C +ATOM 330 CD GLU A 35 -12.383 -8.701 9.949 1.00 39.71 C +ATOM 331 OE1 GLU A 35 -13.609 -8.709 10.089 1.00 43.68 O +ATOM 332 OE2 GLU A 35 -11.784 -7.927 9.198 1.00 46.22 O +ATOM 333 H GLU A 35 -9.364 -8.507 13.177 1.00 15.00 H +ATOM 334 N MET A 36 -13.447 -6.776 13.230 1.00 13.95 N +ATOM 335 CA MET A 36 -14.799 -6.605 13.769 1.00 10.73 C +ATOM 336 C MET A 36 -15.834 -5.918 12.828 1.00 13.63 C +ATOM 337 O MET A 36 -15.547 -5.316 11.794 1.00 11.97 O +ATOM 338 CB MET A 36 -14.754 -5.925 15.136 1.00 6.21 C +ATOM 339 CG MET A 36 -14.475 -4.427 14.916 1.00 14.27 C +ATOM 340 SD MET A 36 -14.218 -3.469 16.396 1.00 15.34 S +ATOM 341 CE MET A 36 -15.640 -3.903 17.405 1.00 13.96 C +ATOM 342 H MET A 36 -13.002 -6.089 12.656 1.00 15.00 H +ATOM 343 N ASN A 37 -17.086 -6.053 13.291 1.00 11.98 N +ATOM 344 CA ASN A 37 -18.179 -5.371 12.623 1.00 13.42 C +ATOM 345 C ASN A 37 -18.578 -4.047 13.255 1.00 16.43 C +ATOM 346 O ASN A 37 -19.012 -3.954 14.394 1.00 16.51 O +ATOM 347 CB ASN A 37 -19.375 -6.301 12.537 1.00 16.24 C +ATOM 348 CG ASN A 37 -18.994 -7.301 11.471 1.00 23.68 C +ATOM 349 OD1 ASN A 37 -18.624 -6.954 10.357 1.00 32.36 O +ATOM 350 ND2 ASN A 37 -19.029 -8.579 11.848 1.00 18.92 N +ATOM 351 H ASN A 37 -17.210 -6.545 14.147 1.00 15.00 H +ATOM 352 HD21 ASN A 37 -18.634 -9.172 11.152 1.00 15.00 H +ATOM 353 HD22 ASN A 37 -19.424 -8.895 12.704 1.00 15.00 H +ATOM 354 N LEU A 38 -18.379 -3.018 12.440 1.00 16.56 N +ATOM 355 CA LEU A 38 -18.704 -1.681 12.902 1.00 15.78 C +ATOM 356 C LEU A 38 -19.693 -1.009 11.938 1.00 19.85 C +ATOM 357 O LEU A 38 -19.680 -1.251 10.724 1.00 20.78 O +ATOM 358 CB LEU A 38 -17.348 -0.970 13.021 1.00 14.49 C +ATOM 359 CG LEU A 38 -16.858 -0.246 14.307 1.00 8.64 C +ATOM 360 CD1 LEU A 38 -17.074 -0.915 15.666 1.00 5.75 C +ATOM 361 CD2 LEU A 38 -15.366 -0.009 14.154 1.00 5.18 C +ATOM 362 H LEU A 38 -17.966 -3.206 11.549 1.00 15.00 H +ATOM 363 N PRO A 39 -20.594 -0.180 12.534 1.00 22.42 N +ATOM 364 CA PRO A 39 -21.611 0.588 11.771 1.00 26.77 C +ATOM 365 C PRO A 39 -21.130 1.539 10.665 1.00 29.54 C +ATOM 366 O PRO A 39 -20.396 2.503 10.868 1.00 29.99 O +ATOM 367 CB PRO A 39 -22.332 1.421 12.823 1.00 24.85 C +ATOM 368 CG PRO A 39 -22.072 0.681 14.122 1.00 28.76 C +ATOM 369 CD PRO A 39 -20.699 0.052 13.959 1.00 21.86 C +ATOM 370 N GLY A 40 -21.657 1.274 9.478 1.00 28.51 N +ATOM 371 CA GLY A 40 -21.516 2.378 8.526 1.00 28.87 C +ATOM 372 C GLY A 40 -20.618 2.162 7.311 1.00 30.87 C +ATOM 373 O GLY A 40 -20.231 1.070 6.911 1.00 29.78 O +ATOM 374 H GLY A 40 -22.057 0.383 9.286 1.00 15.00 H +ATOM 375 N LYS A 41 -20.343 3.293 6.680 1.00 33.12 N +ATOM 376 CA LYS A 41 -19.625 3.137 5.415 1.00 37.91 C +ATOM 377 C LYS A 41 -18.101 3.232 5.504 1.00 38.30 C +ATOM 378 O LYS A 41 -17.526 4.054 6.207 1.00 42.40 O +ATOM 379 CB LYS A 41 -20.195 4.083 4.341 1.00 41.89 C +ATOM 380 CG LYS A 41 -21.035 3.347 3.297 1.00 42.36 C +ATOM 381 CD LYS A 41 -20.669 3.854 1.902 1.00 48.74 C +ATOM 382 CE LYS A 41 -21.210 3.011 0.734 1.00 51.48 C +ATOM 383 NZ LYS A 41 -20.639 3.508 -0.530 1.00 50.33 N +ATOM 384 H LYS A 41 -20.527 4.159 7.137 1.00 15.00 H +ATOM 385 HZ1 LYS A 41 -20.796 4.534 -0.598 1.00 15.00 H +ATOM 386 HZ2 LYS A 41 -19.617 3.316 -0.550 1.00 15.00 H +ATOM 387 HZ3 LYS A 41 -21.094 3.036 -1.338 1.00 15.00 H +ATOM 388 N TRP A 42 -17.466 2.327 4.774 1.00 34.90 N +ATOM 389 CA TRP A 42 -16.020 2.225 4.935 1.00 30.92 C +ATOM 390 C TRP A 42 -15.259 2.241 3.615 1.00 33.72 C +ATOM 391 O TRP A 42 -15.677 1.739 2.572 1.00 35.04 O +ATOM 392 CB TRP A 42 -15.640 0.985 5.734 1.00 24.59 C +ATOM 393 CG TRP A 42 -16.258 -0.178 5.014 1.00 26.07 C +ATOM 394 CD1 TRP A 42 -17.588 -0.603 5.142 1.00 27.36 C +ATOM 395 CD2 TRP A 42 -15.682 -1.014 3.985 1.00 28.61 C +ATOM 396 NE1 TRP A 42 -17.863 -1.611 4.282 1.00 31.74 N +ATOM 397 CE2 TRP A 42 -16.714 -1.914 3.550 1.00 31.16 C +ATOM 398 CE3 TRP A 42 -14.401 -1.100 3.396 1.00 28.02 C +ATOM 399 CZ2 TRP A 42 -16.443 -2.867 2.537 1.00 24.44 C +ATOM 400 CZ3 TRP A 42 -14.145 -2.056 2.386 1.00 22.00 C +ATOM 401 CH2 TRP A 42 -15.154 -2.938 1.967 1.00 21.98 C +ATOM 402 H TRP A 42 -17.981 1.727 4.167 1.00 15.00 H +ATOM 403 HE1 TRP A 42 -18.729 -2.063 4.206 1.00 15.00 H +ATOM 404 N LYS A 43 -14.085 2.847 3.741 1.00 32.75 N +ATOM 405 CA LYS A 43 -13.177 2.907 2.604 1.00 30.62 C +ATOM 406 C LYS A 43 -12.023 1.867 2.694 1.00 27.14 C +ATOM 407 O LYS A 43 -11.369 1.726 3.716 1.00 22.53 O +ATOM 408 CB LYS A 43 -12.716 4.372 2.591 1.00 33.09 C +ATOM 409 CG LYS A 43 -11.786 4.732 1.446 1.00 41.34 C +ATOM 410 CD LYS A 43 -10.974 5.998 1.713 1.00 49.18 C +ATOM 411 CE LYS A 43 -9.514 5.868 1.216 1.00 54.01 C +ATOM 412 NZ LYS A 43 -8.786 4.797 1.932 1.00 50.64 N +ATOM 413 H LYS A 43 -13.846 3.198 4.649 1.00 15.00 H +ATOM 414 HZ1 LYS A 43 -8.763 5.005 2.951 1.00 15.00 H +ATOM 415 HZ2 LYS A 43 -9.264 3.887 1.778 1.00 15.00 H +ATOM 416 HZ3 LYS A 43 -7.812 4.735 1.574 1.00 15.00 H +ATOM 417 N PRO A 44 -11.769 1.125 1.599 1.00 23.46 N +ATOM 418 CA PRO A 44 -10.508 0.364 1.498 1.00 23.08 C +ATOM 419 C PRO A 44 -9.215 1.173 1.381 1.00 22.15 C +ATOM 420 O PRO A 44 -9.090 2.205 0.739 1.00 18.72 O +ATOM 421 CB PRO A 44 -10.712 -0.506 0.266 1.00 23.78 C +ATOM 422 CG PRO A 44 -11.689 0.298 -0.581 1.00 24.22 C +ATOM 423 CD PRO A 44 -12.609 0.980 0.436 1.00 23.63 C +ATOM 424 N LYS A 45 -8.216 0.598 2.050 1.00 25.28 N +ATOM 425 CA LYS A 45 -6.884 1.223 2.149 1.00 23.40 C +ATOM 426 C LYS A 45 -5.758 0.172 2.280 1.00 20.00 C +ATOM 427 O LYS A 45 -5.897 -0.785 3.026 1.00 20.10 O +ATOM 428 CB LYS A 45 -6.924 2.167 3.363 1.00 21.78 C +ATOM 429 CG LYS A 45 -5.932 3.322 3.377 1.00 24.75 C +ATOM 430 CD LYS A 45 -5.897 3.959 4.769 1.00 35.26 C +ATOM 431 CE LYS A 45 -5.082 5.271 4.942 1.00 38.29 C +ATOM 432 NZ LYS A 45 -5.054 5.680 6.371 1.00 38.89 N +ATOM 433 H LYS A 45 -8.468 -0.179 2.630 1.00 15.00 H +ATOM 434 HZ1 LYS A 45 -4.624 4.919 6.935 1.00 15.00 H +ATOM 435 HZ2 LYS A 45 -4.492 6.549 6.476 1.00 15.00 H +ATOM 436 HZ3 LYS A 45 -6.024 5.850 6.706 1.00 15.00 H +ATOM 437 N MET A 46 -4.644 0.367 1.567 1.00 20.42 N +ATOM 438 CA MET A 46 -3.404 -0.401 1.915 1.00 22.45 C +ATOM 439 C MET A 46 -2.345 0.337 2.775 1.00 22.01 C +ATOM 440 O MET A 46 -1.871 1.427 2.447 1.00 22.84 O +ATOM 441 CB MET A 46 -2.621 -0.857 0.685 1.00 21.43 C +ATOM 442 CG MET A 46 -3.433 -1.507 -0.429 1.00 26.00 C +ATOM 443 SD MET A 46 -3.572 -3.280 -0.248 1.00 33.71 S +ATOM 444 CE MET A 46 -1.806 -3.607 -0.201 1.00 33.67 C +ATOM 445 H MET A 46 -4.635 1.130 0.924 1.00 15.00 H +ATOM 446 N ILE A 47 -1.967 -0.307 3.889 1.00 19.66 N +ATOM 447 CA ILE A 47 -0.898 0.272 4.742 1.00 13.85 C +ATOM 448 C ILE A 47 0.461 -0.453 4.862 1.00 10.43 C +ATOM 449 O ILE A 47 0.579 -1.641 5.090 1.00 13.68 O +ATOM 450 CB ILE A 47 -1.466 0.587 6.123 1.00 13.67 C +ATOM 451 CG1 ILE A 47 -1.712 -0.683 6.942 1.00 10.96 C +ATOM 452 CG2 ILE A 47 -2.734 1.446 5.944 1.00 9.75 C +ATOM 453 CD1 ILE A 47 -1.279 -0.564 8.399 1.00 9.43 C +ATOM 454 H ILE A 47 -2.401 -1.189 4.069 1.00 15.00 H +ATOM 455 N GLY A 48 1.541 0.287 4.685 1.00 12.48 N +ATOM 456 CA GLY A 48 2.810 -0.455 4.774 1.00 10.79 C +ATOM 457 C GLY A 48 3.501 -0.450 6.124 1.00 8.62 C +ATOM 458 O GLY A 48 3.690 0.611 6.685 1.00 10.71 O +ATOM 459 H GLY A 48 1.467 1.275 4.566 1.00 15.00 H +ATOM 460 N GLY A 49 3.872 -1.638 6.630 1.00 9.15 N +ATOM 461 CA GLY A 49 4.667 -1.717 7.878 1.00 8.64 C +ATOM 462 C GLY A 49 6.032 -2.371 7.671 1.00 13.08 C +ATOM 463 O GLY A 49 6.401 -2.675 6.548 1.00 11.27 O +ATOM 464 H GLY A 49 3.656 -2.448 6.091 1.00 15.00 H +ATOM 465 N ILE A 50 6.824 -2.604 8.737 1.00 16.21 N +ATOM 466 CA ILE A 50 8.168 -3.023 8.290 1.00 18.38 C +ATOM 467 C ILE A 50 8.324 -4.364 7.545 1.00 19.29 C +ATOM 468 O ILE A 50 9.159 -4.511 6.670 1.00 21.57 O +ATOM 469 CB ILE A 50 9.340 -2.791 9.305 1.00 19.61 C +ATOM 470 CG1 ILE A 50 9.950 -4.057 9.888 1.00 21.42 C +ATOM 471 CG2 ILE A 50 9.056 -1.788 10.438 1.00 13.44 C +ATOM 472 CD1 ILE A 50 11.321 -3.759 10.485 1.00 27.01 C +ATOM 473 H ILE A 50 6.487 -2.493 9.676 1.00 15.00 H +ATOM 474 N GLY A 51 7.463 -5.341 7.897 1.00 19.71 N +ATOM 475 CA GLY A 51 7.553 -6.613 7.154 1.00 14.98 C +ATOM 476 C GLY A 51 6.710 -6.733 5.871 1.00 14.89 C +ATOM 477 O GLY A 51 6.612 -7.796 5.302 1.00 15.83 O +ATOM 478 H GLY A 51 6.725 -5.156 8.547 1.00 15.00 H +ATOM 479 N GLY A 52 6.075 -5.619 5.421 1.00 18.52 N +ATOM 480 CA GLY A 52 5.285 -5.622 4.169 1.00 13.59 C +ATOM 481 C GLY A 52 3.992 -4.783 4.145 1.00 13.84 C +ATOM 482 O GLY A 52 3.774 -3.944 5.001 1.00 14.07 O +ATOM 483 H GLY A 52 6.253 -4.766 5.912 1.00 15.00 H +ATOM 484 N PHE A 53 3.129 -5.045 3.137 1.00 15.75 N +ATOM 485 CA PHE A 53 1.825 -4.369 2.984 1.00 17.32 C +ATOM 486 C PHE A 53 0.629 -5.087 3.565 1.00 23.07 C +ATOM 487 O PHE A 53 0.349 -6.209 3.169 1.00 29.18 O +ATOM 488 CB PHE A 53 1.380 -4.225 1.535 1.00 15.75 C +ATOM 489 CG PHE A 53 1.930 -2.972 0.914 1.00 17.91 C +ATOM 490 CD1 PHE A 53 1.601 -1.710 1.440 1.00 23.67 C +ATOM 491 CD2 PHE A 53 2.811 -3.091 -0.166 1.00 21.23 C +ATOM 492 CE1 PHE A 53 2.265 -0.559 0.964 1.00 25.07 C +ATOM 493 CE2 PHE A 53 3.469 -1.951 -0.659 1.00 24.15 C +ATOM 494 CZ PHE A 53 3.232 -0.704 -0.047 1.00 26.52 C +ATOM 495 H PHE A 53 3.394 -5.798 2.536 1.00 15.00 H +ATOM 496 N ILE A 54 -0.129 -4.404 4.444 1.00 22.84 N +ATOM 497 CA ILE A 54 -1.485 -4.944 4.682 1.00 19.56 C +ATOM 498 C ILE A 54 -2.705 -4.183 4.103 1.00 20.37 C +ATOM 499 O ILE A 54 -2.698 -3.007 3.755 1.00 21.02 O +ATOM 500 CB ILE A 54 -1.731 -5.333 6.163 1.00 18.04 C +ATOM 501 CG1 ILE A 54 -1.860 -4.152 7.112 1.00 14.47 C +ATOM 502 CG2 ILE A 54 -0.682 -6.319 6.686 1.00 12.60 C +ATOM 503 CD1 ILE A 54 -2.069 -4.596 8.565 1.00 17.81 C +ATOM 504 H ILE A 54 0.185 -3.510 4.767 1.00 15.00 H +ATOM 505 N LYS A 55 -3.800 -4.939 4.016 1.00 19.34 N +ATOM 506 CA LYS A 55 -5.043 -4.305 3.566 1.00 18.48 C +ATOM 507 C LYS A 55 -6.107 -4.126 4.665 1.00 17.27 C +ATOM 508 O LYS A 55 -6.276 -4.956 5.550 1.00 14.14 O +ATOM 509 CB LYS A 55 -5.582 -5.052 2.347 1.00 22.23 C +ATOM 510 CG LYS A 55 -6.899 -4.551 1.755 1.00 33.21 C +ATOM 511 CD LYS A 55 -7.404 -5.499 0.663 1.00 43.72 C +ATOM 512 CE LYS A 55 -8.898 -5.297 0.373 1.00 50.72 C +ATOM 513 NZ LYS A 55 -9.336 -6.204 -0.702 1.00 52.98 N +ATOM 514 H LYS A 55 -3.763 -5.884 4.331 1.00 15.00 H +ATOM 515 HZ1 LYS A 55 -9.059 -7.180 -0.474 1.00 15.00 H +ATOM 516 HZ2 LYS A 55 -10.370 -6.152 -0.805 1.00 15.00 H +ATOM 517 HZ3 LYS A 55 -8.888 -5.919 -1.596 1.00 15.00 H +ATOM 518 N VAL A 56 -6.764 -2.942 4.573 1.00 18.67 N +ATOM 519 CA VAL A 56 -7.550 -2.360 5.673 1.00 12.05 C +ATOM 520 C VAL A 56 -8.917 -1.786 5.308 1.00 8.82 C +ATOM 521 O VAL A 56 -9.168 -1.353 4.196 1.00 11.63 O +ATOM 522 CB VAL A 56 -6.603 -1.392 6.391 1.00 7.83 C +ATOM 523 CG1 VAL A 56 -6.834 0.091 6.224 1.00 2.00 C +ATOM 524 CG2 VAL A 56 -6.395 -1.903 7.799 1.00 6.80 C +ATOM 525 H VAL A 56 -6.551 -2.385 3.770 1.00 15.00 H +ATOM 526 N ARG A 57 -9.815 -1.814 6.286 1.00 10.78 N +ATOM 527 CA ARG A 57 -11.066 -1.048 6.164 1.00 8.48 C +ATOM 528 C ARG A 57 -11.091 0.197 7.039 1.00 8.76 C +ATOM 529 O ARG A 57 -11.111 0.145 8.266 1.00 8.67 O +ATOM 530 CB ARG A 57 -12.279 -1.893 6.531 1.00 7.92 C +ATOM 531 CG ARG A 57 -12.585 -3.018 5.549 1.00 9.23 C +ATOM 532 CD ARG A 57 -13.825 -3.819 5.947 1.00 12.88 C +ATOM 533 NE ARG A 57 -13.522 -4.972 6.797 1.00 19.41 N +ATOM 534 CZ ARG A 57 -14.057 -5.084 8.049 1.00 28.57 C +ATOM 535 NH1 ARG A 57 -14.670 -4.055 8.653 1.00 29.23 N +ATOM 536 NH2 ARG A 57 -14.002 -6.251 8.702 1.00 25.99 N +ATOM 537 H ARG A 57 -9.580 -2.337 7.110 1.00 15.00 H +ATOM 538 HE ARG A 57 -13.012 -5.747 6.424 1.00 15.00 H +ATOM 539 HH11 ARG A 57 -14.734 -3.165 8.198 1.00 15.00 H +ATOM 540 HH12 ARG A 57 -15.067 -4.176 9.562 1.00 15.00 H +ATOM 541 HH21 ARG A 57 -13.559 -7.042 8.279 1.00 15.00 H +ATOM 542 HH22 ARG A 57 -14.403 -6.332 9.613 1.00 15.00 H +ATOM 543 N GLN A 58 -11.083 1.339 6.349 1.00 9.36 N +ATOM 544 CA GLN A 58 -11.207 2.635 7.013 1.00 7.13 C +ATOM 545 C GLN A 58 -12.595 3.074 7.512 1.00 7.78 C +ATOM 546 O GLN A 58 -13.454 3.367 6.691 1.00 9.82 O +ATOM 547 CB GLN A 58 -10.584 3.683 6.087 1.00 9.03 C +ATOM 548 CG GLN A 58 -10.344 5.049 6.766 1.00 15.66 C +ATOM 549 CD GLN A 58 -9.510 5.977 5.891 1.00 16.91 C +ATOM 550 OE1 GLN A 58 -9.023 5.669 4.822 1.00 22.25 O +ATOM 551 NE2 GLN A 58 -9.320 7.175 6.380 1.00 13.90 N +ATOM 552 H GLN A 58 -10.980 1.249 5.365 1.00 15.00 H +ATOM 553 HE21 GLN A 58 -8.751 7.678 5.735 1.00 15.00 H +ATOM 554 HE22 GLN A 58 -9.668 7.526 7.238 1.00 15.00 H +ATOM 555 N TYR A 59 -12.765 3.179 8.860 1.00 4.58 N +ATOM 556 CA TYR A 59 -13.942 3.885 9.422 1.00 5.07 C +ATOM 557 C TYR A 59 -13.682 5.245 10.081 1.00 7.84 C +ATOM 558 O TYR A 59 -12.843 5.379 10.961 1.00 10.41 O +ATOM 559 CB TYR A 59 -14.720 3.072 10.477 1.00 5.28 C +ATOM 560 CG TYR A 59 -15.178 1.717 9.985 1.00 7.61 C +ATOM 561 CD1 TYR A 59 -16.429 1.595 9.367 1.00 7.43 C +ATOM 562 CD2 TYR A 59 -14.333 0.601 10.167 1.00 15.35 C +ATOM 563 CE1 TYR A 59 -16.870 0.332 8.951 1.00 10.12 C +ATOM 564 CE2 TYR A 59 -14.755 -0.666 9.736 1.00 16.82 C +ATOM 565 CZ TYR A 59 -16.046 -0.793 9.181 1.00 16.20 C +ATOM 566 OH TYR A 59 -16.537 -2.052 8.909 1.00 15.62 O +ATOM 567 H TYR A 59 -12.060 2.784 9.452 1.00 15.00 H +ATOM 568 HH TYR A 59 -17.463 -1.979 8.709 1.00 15.00 H +ATOM 569 N ASP A 60 -14.420 6.280 9.634 1.00 8.33 N +ATOM 570 CA ASP A 60 -14.201 7.632 10.191 1.00 8.94 C +ATOM 571 C ASP A 60 -15.146 8.076 11.297 1.00 12.12 C +ATOM 572 O ASP A 60 -16.218 7.526 11.443 1.00 12.98 O +ATOM 573 CB ASP A 60 -14.214 8.715 9.106 1.00 7.49 C +ATOM 574 CG ASP A 60 -13.268 8.367 7.959 1.00 11.05 C +ATOM 575 OD1 ASP A 60 -12.124 7.999 8.231 1.00 19.89 O +ATOM 576 OD2 ASP A 60 -13.668 8.458 6.796 1.00 11.72 O +ATOM 577 H ASP A 60 -15.187 6.059 9.035 1.00 15.00 H +ATOM 578 N GLN A 61 -14.742 9.086 12.089 1.00 13.98 N +ATOM 579 CA GLN A 61 -15.664 9.514 13.179 1.00 16.08 C +ATOM 580 C GLN A 61 -16.363 8.514 14.188 1.00 14.69 C +ATOM 581 O GLN A 61 -17.532 8.604 14.552 1.00 13.55 O +ATOM 582 CB GLN A 61 -16.653 10.548 12.637 1.00 19.49 C +ATOM 583 CG GLN A 61 -16.031 11.796 11.980 1.00 30.71 C +ATOM 584 CD GLN A 61 -15.203 12.627 12.959 1.00 36.70 C +ATOM 585 OE1 GLN A 61 -15.341 12.589 14.170 1.00 40.08 O +ATOM 586 NE2 GLN A 61 -14.260 13.384 12.397 1.00 36.53 N +ATOM 587 H GLN A 61 -13.853 9.505 11.941 1.00 15.00 H +ATOM 588 HE21 GLN A 61 -13.744 13.870 13.098 1.00 15.00 H +ATOM 589 HE22 GLN A 61 -14.115 13.472 11.420 1.00 15.00 H +ATOM 590 N ILE A 62 -15.544 7.560 14.664 1.00 10.58 N +ATOM 591 CA ILE A 62 -15.963 6.587 15.673 1.00 8.91 C +ATOM 592 C ILE A 62 -15.545 6.958 17.114 1.00 12.94 C +ATOM 593 O ILE A 62 -14.431 7.393 17.403 1.00 10.33 O +ATOM 594 CB ILE A 62 -15.376 5.225 15.295 1.00 4.78 C +ATOM 595 CG1 ILE A 62 -15.670 4.782 13.852 1.00 5.50 C +ATOM 596 CG2 ILE A 62 -15.760 4.140 16.303 1.00 2.00 C +ATOM 597 CD1 ILE A 62 -17.080 4.296 13.470 1.00 6.02 C +ATOM 598 H ILE A 62 -14.604 7.557 14.327 1.00 15.00 H +ATOM 599 N PRO A 63 -16.523 6.806 18.041 1.00 14.35 N +ATOM 600 CA PRO A 63 -16.248 7.063 19.462 1.00 11.42 C +ATOM 601 C PRO A 63 -15.550 5.916 20.180 1.00 13.82 C +ATOM 602 O PRO A 63 -16.004 4.771 20.218 1.00 13.36 O +ATOM 603 CB PRO A 63 -17.636 7.378 20.025 1.00 7.57 C +ATOM 604 CG PRO A 63 -18.554 7.567 18.809 1.00 9.23 C +ATOM 605 CD PRO A 63 -17.942 6.610 17.786 1.00 14.61 C +ATOM 606 N VAL A 64 -14.379 6.277 20.750 1.00 12.69 N +ATOM 607 CA VAL A 64 -13.736 5.312 21.632 1.00 9.70 C +ATOM 608 C VAL A 64 -13.381 5.801 23.031 1.00 8.20 C +ATOM 609 O VAL A 64 -13.052 6.949 23.305 1.00 8.01 O +ATOM 610 CB VAL A 64 -12.654 4.392 20.936 1.00 9.79 C +ATOM 611 CG1 VAL A 64 -12.700 4.364 19.396 1.00 2.00 C +ATOM 612 CG2 VAL A 64 -11.241 4.495 21.474 1.00 12.10 C +ATOM 613 H VAL A 64 -14.000 7.170 20.528 1.00 15.00 H +ATOM 614 N GLU A 65 -13.505 4.868 23.955 1.00 7.36 N +ATOM 615 CA GLU A 65 -12.972 5.193 25.262 1.00 8.29 C +ATOM 616 C GLU A 65 -11.712 4.464 25.650 1.00 8.72 C +ATOM 617 O GLU A 65 -11.632 3.239 25.692 1.00 7.20 O +ATOM 618 CB GLU A 65 -14.009 4.958 26.331 1.00 16.21 C +ATOM 619 CG GLU A 65 -15.173 5.917 26.227 1.00 28.95 C +ATOM 620 CD GLU A 65 -16.036 5.762 27.457 1.00 42.00 C +ATOM 621 OE1 GLU A 65 -15.655 6.281 28.515 1.00 41.15 O +ATOM 622 OE2 GLU A 65 -17.086 5.118 27.336 1.00 47.92 O +ATOM 623 H GLU A 65 -13.913 3.986 23.705 1.00 15.00 H +ATOM 624 N ILE A 66 -10.718 5.287 25.964 1.00 12.31 N +ATOM 625 CA ILE A 66 -9.424 4.746 26.428 1.00 15.55 C +ATOM 626 C ILE A 66 -9.134 5.185 27.859 1.00 17.26 C +ATOM 627 O ILE A 66 -8.955 6.366 28.160 1.00 14.67 O +ATOM 628 CB ILE A 66 -8.240 5.161 25.497 1.00 14.67 C +ATOM 629 CG1 ILE A 66 -8.601 5.198 24.012 1.00 14.16 C +ATOM 630 CG2 ILE A 66 -7.004 4.253 25.635 1.00 12.13 C +ATOM 631 CD1 ILE A 66 -7.499 5.896 23.204 1.00 12.50 C +ATOM 632 H ILE A 66 -10.882 6.267 25.831 1.00 15.00 H +ATOM 633 N CYS A 67 -9.142 4.196 28.776 1.00 20.80 N +ATOM 634 CA CYS A 67 -8.903 4.595 30.199 1.00 24.96 C +ATOM 635 C CYS A 67 -9.762 5.707 30.862 1.00 25.05 C +ATOM 636 O CYS A 67 -9.280 6.561 31.606 1.00 25.64 O +ATOM 637 CB CYS A 67 -7.455 5.015 30.442 1.00 24.85 C +ATOM 638 SG CYS A 67 -6.469 3.587 30.789 1.00 34.14 S +ATOM 639 H CYS A 67 -9.210 3.247 28.455 1.00 15.00 H +ATOM 640 N GLY A 68 -11.058 5.710 30.508 1.00 22.38 N +ATOM 641 CA GLY A 68 -11.856 6.851 30.987 1.00 23.78 C +ATOM 642 C GLY A 68 -11.771 8.182 30.210 1.00 25.98 C +ATOM 643 O GLY A 68 -12.465 9.153 30.491 1.00 30.44 O +ATOM 644 H GLY A 68 -11.411 5.002 29.905 1.00 15.00 H +ATOM 645 N HIS A 69 -10.906 8.176 29.182 1.00 22.38 N +ATOM 646 CA HIS A 69 -10.885 9.341 28.308 1.00 19.25 C +ATOM 647 C HIS A 69 -11.555 9.024 27.002 1.00 19.72 C +ATOM 648 O HIS A 69 -11.320 7.998 26.375 1.00 21.73 O +ATOM 649 CB HIS A 69 -9.464 9.853 28.056 1.00 20.58 C +ATOM 650 CG HIS A 69 -8.777 10.135 29.370 1.00 24.61 C +ATOM 651 ND1 HIS A 69 -8.210 9.190 30.156 1.00 27.85 N +ATOM 652 CD2 HIS A 69 -8.662 11.363 30.018 1.00 25.43 C +ATOM 653 CE1 HIS A 69 -7.748 9.797 31.284 1.00 24.14 C +ATOM 654 NE2 HIS A 69 -8.034 11.130 31.196 1.00 22.87 N +ATOM 655 H HIS A 69 -10.316 7.394 29.003 1.00 15.00 H +ATOM 656 HD1 HIS A 69 -8.149 8.233 29.977 1.00 15.00 H +ATOM 657 N LYS A 70 -12.450 9.933 26.649 1.00 19.65 N +ATOM 658 CA LYS A 70 -13.221 9.826 25.406 1.00 17.22 C +ATOM 659 C LYS A 70 -12.507 10.406 24.163 1.00 15.83 C +ATOM 660 O LYS A 70 -11.947 11.489 24.204 1.00 15.38 O +ATOM 661 CB LYS A 70 -14.508 10.605 25.650 1.00 20.19 C +ATOM 662 CG LYS A 70 -15.789 9.845 25.956 1.00 30.72 C +ATOM 663 CD LYS A 70 -16.197 9.005 24.735 1.00 39.08 C +ATOM 664 CE LYS A 70 -16.223 9.752 23.395 1.00 39.55 C +ATOM 665 NZ LYS A 70 -15.774 8.786 22.393 1.00 38.04 N +ATOM 666 H LYS A 70 -12.475 10.764 27.198 1.00 15.00 H +ATOM 667 HZ1 LYS A 70 -14.814 8.468 22.636 1.00 15.00 H +ATOM 668 HZ2 LYS A 70 -16.418 7.970 22.384 1.00 15.00 H +ATOM 669 HZ3 LYS A 70 -15.765 9.237 21.456 1.00 15.00 H +ATOM 670 N ALA A 71 -12.581 9.669 23.053 1.00 14.11 N +ATOM 671 CA ALA A 71 -12.049 10.164 21.785 1.00 9.65 C +ATOM 672 C ALA A 71 -12.950 9.871 20.542 1.00 14.05 C +ATOM 673 O ALA A 71 -13.774 8.960 20.525 1.00 17.33 O +ATOM 674 CB ALA A 71 -10.691 9.503 21.588 1.00 13.01 C +ATOM 675 H ALA A 71 -12.986 8.761 23.141 1.00 15.00 H +ATOM 676 N ILE A 72 -12.793 10.673 19.468 1.00 12.13 N +ATOM 677 CA ILE A 72 -13.614 10.476 18.259 1.00 7.59 C +ATOM 678 C ILE A 72 -12.785 10.549 16.968 1.00 7.29 C +ATOM 679 O ILE A 72 -12.084 11.503 16.658 1.00 7.41 O +ATOM 680 CB ILE A 72 -14.848 11.451 18.212 1.00 7.82 C +ATOM 681 CG1 ILE A 72 -15.644 11.511 19.533 1.00 6.92 C +ATOM 682 CG2 ILE A 72 -15.821 11.024 17.111 1.00 2.99 C +ATOM 683 CD1 ILE A 72 -16.810 12.505 19.598 1.00 7.31 C +ATOM 684 H ILE A 72 -12.094 11.391 19.558 1.00 15.00 H +ATOM 685 N GLY A 73 -12.812 9.459 16.216 1.00 6.85 N +ATOM 686 CA GLY A 73 -11.802 9.477 15.165 1.00 3.66 C +ATOM 687 C GLY A 73 -11.808 8.290 14.226 1.00 5.70 C +ATOM 688 O GLY A 73 -12.670 7.431 14.296 1.00 5.13 O +ATOM 689 H GLY A 73 -13.337 8.653 16.494 1.00 15.00 H +ATOM 690 N THR A 74 -10.814 8.304 13.326 1.00 4.83 N +ATOM 691 CA THR A 74 -10.557 7.175 12.406 1.00 6.42 C +ATOM 692 C THR A 74 -9.927 5.876 12.993 1.00 8.54 C +ATOM 693 O THR A 74 -8.938 5.859 13.741 1.00 11.09 O +ATOM 694 CB THR A 74 -9.720 7.753 11.231 1.00 9.90 C +ATOM 695 OG1 THR A 74 -10.423 8.883 10.688 1.00 6.69 O +ATOM 696 CG2 THR A 74 -9.271 6.796 10.104 1.00 9.55 C +ATOM 697 H THR A 74 -10.187 9.084 13.351 1.00 15.00 H +ATOM 698 HG1 THR A 74 -11.146 8.537 10.185 1.00 15.00 H +ATOM 699 N VAL A 75 -10.581 4.751 12.619 1.00 7.45 N +ATOM 700 CA VAL A 75 -10.064 3.424 12.999 1.00 3.64 C +ATOM 701 C VAL A 75 -10.002 2.529 11.798 1.00 5.50 C +ATOM 702 O VAL A 75 -10.908 2.484 10.966 1.00 6.60 O +ATOM 703 CB VAL A 75 -10.751 2.669 14.181 1.00 2.00 C +ATOM 704 CG1 VAL A 75 -10.913 3.535 15.429 1.00 2.24 C +ATOM 705 CG2 VAL A 75 -12.074 2.028 13.818 1.00 2.67 C +ATOM 706 H VAL A 75 -11.433 4.856 12.105 1.00 15.00 H +ATOM 707 N LEU A 76 -8.827 1.882 11.712 1.00 7.70 N +ATOM 708 CA LEU A 76 -8.560 0.993 10.582 1.00 9.14 C +ATOM 709 C LEU A 76 -8.758 -0.411 11.091 1.00 8.24 C +ATOM 710 O LEU A 76 -8.180 -0.689 12.133 1.00 8.98 O +ATOM 711 CB LEU A 76 -7.096 1.080 10.170 1.00 10.74 C +ATOM 712 CG LEU A 76 -6.554 2.116 9.182 1.00 10.68 C +ATOM 713 CD1 LEU A 76 -7.371 3.382 9.044 1.00 7.60 C +ATOM 714 CD2 LEU A 76 -5.065 2.380 9.472 1.00 4.59 C +ATOM 715 H LEU A 76 -8.164 1.978 12.458 1.00 15.00 H +ATOM 716 N VAL A 77 -9.556 -1.241 10.379 1.00 5.51 N +ATOM 717 CA VAL A 77 -9.612 -2.615 10.873 1.00 7.56 C +ATOM 718 C VAL A 77 -9.067 -3.627 9.884 1.00 11.19 C +ATOM 719 O VAL A 77 -9.292 -3.527 8.684 1.00 15.24 O +ATOM 720 CB VAL A 77 -10.965 -3.018 11.575 1.00 10.81 C +ATOM 721 CG1 VAL A 77 -11.992 -1.869 11.789 1.00 6.89 C +ATOM 722 CG2 VAL A 77 -11.605 -4.314 11.072 1.00 6.45 C +ATOM 723 H VAL A 77 -10.102 -0.873 9.624 1.00 15.00 H +ATOM 724 N GLY A 78 -8.247 -4.550 10.439 1.00 14.31 N +ATOM 725 CA GLY A 78 -7.421 -5.459 9.606 1.00 11.38 C +ATOM 726 C GLY A 78 -6.549 -6.491 10.338 1.00 10.04 C +ATOM 727 O GLY A 78 -6.689 -6.696 11.536 1.00 11.54 O +ATOM 728 H GLY A 78 -8.172 -4.530 11.440 1.00 15.00 H +ATOM 729 N PRO A 79 -5.657 -7.198 9.576 1.00 10.23 N +ATOM 730 CA PRO A 79 -4.843 -8.307 10.160 1.00 8.21 C +ATOM 731 C PRO A 79 -3.582 -7.953 10.985 1.00 13.23 C +ATOM 732 O PRO A 79 -2.449 -8.222 10.618 1.00 21.44 O +ATOM 733 CB PRO A 79 -4.516 -9.134 8.905 1.00 4.37 C +ATOM 734 CG PRO A 79 -4.472 -8.118 7.757 1.00 2.00 C +ATOM 735 CD PRO A 79 -5.536 -7.089 8.115 1.00 3.01 C +ATOM 736 N THR A 80 -3.793 -7.352 12.147 1.00 16.55 N +ATOM 737 CA THR A 80 -2.668 -6.967 13.039 1.00 14.33 C +ATOM 738 C THR A 80 -2.414 -7.963 14.181 1.00 14.07 C +ATOM 739 O THR A 80 -3.361 -8.591 14.627 1.00 14.05 O +ATOM 740 CB THR A 80 -2.984 -5.585 13.630 1.00 10.44 C +ATOM 741 OG1 THR A 80 -2.027 -5.241 14.620 1.00 12.88 O +ATOM 742 CG2 THR A 80 -4.388 -5.503 14.223 1.00 4.82 C +ATOM 743 H THR A 80 -4.756 -7.257 12.405 1.00 15.00 H +ATOM 744 HG1 THR A 80 -2.528 -4.947 15.384 1.00 15.00 H +ATOM 745 N PRO A 81 -1.144 -8.155 14.681 1.00 14.95 N +ATOM 746 CA PRO A 81 -0.988 -9.139 15.784 1.00 12.96 C +ATOM 747 C PRO A 81 -1.790 -8.850 17.053 1.00 12.83 C +ATOM 748 O PRO A 81 -2.404 -9.713 17.644 1.00 16.23 O +ATOM 749 CB PRO A 81 0.521 -9.191 16.065 1.00 7.77 C +ATOM 750 CG PRO A 81 1.178 -8.551 14.848 1.00 7.13 C +ATOM 751 CD PRO A 81 0.139 -7.587 14.270 1.00 10.90 C +ATOM 752 N VAL A 82 -1.736 -7.570 17.453 1.00 15.40 N +ATOM 753 CA VAL A 82 -2.440 -7.017 18.624 1.00 11.41 C +ATOM 754 C VAL A 82 -3.373 -5.845 18.241 1.00 10.53 C +ATOM 755 O VAL A 82 -3.254 -5.294 17.142 1.00 9.57 O +ATOM 756 CB VAL A 82 -1.397 -6.519 19.651 1.00 9.70 C +ATOM 757 CG1 VAL A 82 -0.766 -7.679 20.370 1.00 5.78 C +ATOM 758 CG2 VAL A 82 -0.333 -5.607 19.030 1.00 10.61 C +ATOM 759 H VAL A 82 -1.252 -6.961 16.826 1.00 15.00 H +ATOM 760 N ASN A 83 -4.242 -5.425 19.203 1.00 5.95 N +ATOM 761 CA ASN A 83 -4.800 -4.081 18.959 1.00 3.62 C +ATOM 762 C ASN A 83 -3.849 -2.918 19.265 1.00 3.68 C +ATOM 763 O ASN A 83 -3.264 -2.850 20.340 1.00 6.21 O +ATOM 764 CB ASN A 83 -6.103 -3.838 19.728 1.00 8.40 C +ATOM 765 CG ASN A 83 -7.265 -4.688 19.236 1.00 9.86 C +ATOM 766 OD1 ASN A 83 -7.744 -4.560 18.129 1.00 15.78 O +ATOM 767 ND2 ASN A 83 -7.765 -5.557 20.102 1.00 6.89 N +ATOM 768 H ASN A 83 -4.312 -5.927 20.062 1.00 15.00 H +ATOM 769 HD21 ASN A 83 -8.526 -6.068 19.715 1.00 15.00 H +ATOM 770 HD22 ASN A 83 -7.387 -5.635 21.026 1.00 15.00 H +ATOM 771 N ILE A 84 -3.733 -2.018 18.281 1.00 4.44 N +ATOM 772 CA ILE A 84 -2.820 -0.844 18.286 1.00 6.23 C +ATOM 773 C ILE A 84 -3.530 0.548 18.348 1.00 7.54 C +ATOM 774 O ILE A 84 -4.310 0.914 17.470 1.00 10.49 O +ATOM 775 CB ILE A 84 -1.917 -0.949 17.005 1.00 9.16 C +ATOM 776 CG1 ILE A 84 -0.878 -2.065 17.074 1.00 9.46 C +ATOM 777 CG2 ILE A 84 -1.171 0.325 16.564 1.00 9.37 C +ATOM 778 CD1 ILE A 84 -0.214 -2.279 15.708 1.00 12.32 C +ATOM 779 H ILE A 84 -4.302 -2.187 17.474 1.00 15.00 H +ATOM 780 N ILE A 85 -3.203 1.329 19.399 1.00 6.08 N +ATOM 781 CA ILE A 85 -3.549 2.761 19.382 1.00 3.83 C +ATOM 782 C ILE A 85 -2.346 3.642 18.969 1.00 5.48 C +ATOM 783 O ILE A 85 -1.321 3.637 19.652 1.00 4.60 O +ATOM 784 CB ILE A 85 -4.078 3.263 20.743 1.00 3.28 C +ATOM 785 CG1 ILE A 85 -4.993 2.265 21.468 1.00 4.75 C +ATOM 786 CG2 ILE A 85 -4.764 4.614 20.547 1.00 2.00 C +ATOM 787 CD1 ILE A 85 -6.373 2.028 20.837 1.00 10.37 C +ATOM 788 H ILE A 85 -2.591 0.942 20.095 1.00 15.00 H +ATOM 789 N GLY A 86 -2.519 4.356 17.827 1.00 3.63 N +ATOM 790 CA GLY A 86 -1.444 5.149 17.231 1.00 3.97 C +ATOM 791 C GLY A 86 -1.513 6.620 17.583 1.00 6.02 C +ATOM 792 O GLY A 86 -2.415 7.044 18.307 1.00 11.53 O +ATOM 793 H GLY A 86 -3.436 4.323 17.425 1.00 15.00 H +ATOM 794 N ARG A 87 -0.582 7.434 17.053 1.00 4.10 N +ATOM 795 CA ARG A 87 -0.654 8.875 17.437 1.00 6.33 C +ATOM 796 C ARG A 87 -1.987 9.709 17.268 1.00 6.34 C +ATOM 797 O ARG A 87 -2.248 10.670 17.993 1.00 9.00 O +ATOM 798 CB ARG A 87 0.560 9.612 16.845 1.00 4.55 C +ATOM 799 CG ARG A 87 1.904 9.047 17.362 1.00 10.87 C +ATOM 800 CD ARG A 87 3.062 9.100 16.353 1.00 5.39 C +ATOM 801 NE ARG A 87 3.209 10.479 15.997 1.00 15.34 N +ATOM 802 CZ ARG A 87 2.792 10.872 14.795 1.00 18.04 C +ATOM 803 NH1 ARG A 87 2.967 10.101 13.735 1.00 15.78 N +ATOM 804 NH2 ARG A 87 2.170 12.049 14.692 1.00 19.63 N +ATOM 805 H ARG A 87 0.196 7.014 16.588 1.00 15.00 H +ATOM 806 HE ARG A 87 3.259 11.156 16.730 1.00 15.00 H +ATOM 807 HH11 ARG A 87 3.447 9.229 13.827 1.00 15.00 H +ATOM 808 HH12 ARG A 87 2.619 10.390 12.845 1.00 15.00 H +ATOM 809 HH21 ARG A 87 2.040 12.623 15.501 1.00 15.00 H +ATOM 810 HH22 ARG A 87 1.829 12.357 13.805 1.00 15.00 H +ATOM 811 N ASN A 88 -2.846 9.320 16.284 1.00 4.71 N +ATOM 812 CA ASN A 88 -4.085 10.064 15.974 1.00 2.94 C +ATOM 813 C ASN A 88 -5.100 10.221 17.134 1.00 8.33 C +ATOM 814 O ASN A 88 -5.814 11.204 17.328 1.00 10.61 O +ATOM 815 CB ASN A 88 -4.734 9.451 14.714 1.00 2.54 C +ATOM 816 CG ASN A 88 -5.452 8.096 14.938 1.00 11.53 C +ATOM 817 OD1 ASN A 88 -4.939 7.098 15.437 1.00 2.94 O +ATOM 818 ND2 ASN A 88 -6.728 8.083 14.558 1.00 12.71 N +ATOM 819 H ASN A 88 -2.520 8.580 15.694 1.00 15.00 H +ATOM 820 HD21 ASN A 88 -7.219 7.218 14.657 1.00 15.00 H +ATOM 821 HD22 ASN A 88 -7.217 8.883 14.213 1.00 15.00 H +ATOM 822 N LEU A 89 -5.100 9.142 17.928 1.00 9.42 N +ATOM 823 CA LEU A 89 -5.948 9.061 19.121 1.00 8.04 C +ATOM 824 C LEU A 89 -5.240 9.372 20.426 1.00 5.83 C +ATOM 825 O LEU A 89 -5.720 10.079 21.282 1.00 11.22 O +ATOM 826 CB LEU A 89 -6.576 7.671 19.132 1.00 7.87 C +ATOM 827 CG LEU A 89 -7.982 7.575 18.565 1.00 9.76 C +ATOM 828 CD1 LEU A 89 -8.269 8.482 17.355 1.00 13.42 C +ATOM 829 CD2 LEU A 89 -8.334 6.110 18.331 1.00 14.63 C +ATOM 830 H LEU A 89 -4.531 8.374 17.626 1.00 15.00 H +ATOM 831 N LEU A 90 -4.014 8.888 20.545 1.00 8.10 N +ATOM 832 CA LEU A 90 -3.122 9.326 21.652 1.00 8.09 C +ATOM 833 C LEU A 90 -2.996 10.851 21.908 1.00 8.64 C +ATOM 834 O LEU A 90 -2.902 11.395 23.005 1.00 9.47 O +ATOM 835 CB LEU A 90 -1.745 8.802 21.290 1.00 5.97 C +ATOM 836 CG LEU A 90 -1.170 7.607 22.016 1.00 5.66 C +ATOM 837 CD1 LEU A 90 -2.156 6.570 22.522 1.00 4.83 C +ATOM 838 CD2 LEU A 90 -0.167 6.990 21.060 1.00 7.12 C +ATOM 839 H LEU A 90 -3.704 8.240 19.846 1.00 15.00 H +ATOM 840 N THR A 91 -2.992 11.570 20.795 1.00 9.94 N +ATOM 841 CA THR A 91 -3.029 13.029 20.978 1.00 8.71 C +ATOM 842 C THR A 91 -4.303 13.614 21.471 1.00 10.30 C +ATOM 843 O THR A 91 -4.259 14.519 22.284 1.00 12.69 O +ATOM 844 CB THR A 91 -2.729 13.810 19.729 1.00 10.12 C +ATOM 845 OG1 THR A 91 -3.546 13.334 18.654 1.00 9.03 O +ATOM 846 CG2 THR A 91 -1.237 13.795 19.403 1.00 9.48 C +ATOM 847 H THR A 91 -2.949 11.127 19.899 1.00 15.00 H +ATOM 848 HG1 THR A 91 -3.051 12.631 18.233 1.00 15.00 H +ATOM 849 N GLN A 92 -5.435 13.036 21.015 1.00 9.54 N +ATOM 850 CA GLN A 92 -6.739 13.425 21.614 1.00 8.56 C +ATOM 851 C GLN A 92 -6.888 13.403 23.158 1.00 10.13 C +ATOM 852 O GLN A 92 -7.313 14.362 23.797 1.00 10.19 O +ATOM 853 CB GLN A 92 -7.901 12.683 20.934 1.00 7.14 C +ATOM 854 CG GLN A 92 -8.079 13.162 19.471 1.00 4.88 C +ATOM 855 CD GLN A 92 -9.409 12.689 18.959 1.00 4.56 C +ATOM 856 OE1 GLN A 92 -10.324 12.409 19.699 1.00 14.03 O +ATOM 857 NE2 GLN A 92 -9.555 12.577 17.672 1.00 2.00 N +ATOM 858 H GLN A 92 -5.340 12.385 20.263 1.00 15.00 H +ATOM 859 HE21 GLN A 92 -10.464 12.281 17.383 1.00 15.00 H +ATOM 860 HE22 GLN A 92 -8.804 12.777 17.055 1.00 15.00 H +ATOM 861 N ILE A 93 -6.453 12.267 23.731 1.00 7.25 N +ATOM 862 CA ILE A 93 -6.483 12.101 25.195 1.00 7.07 C +ATOM 863 C ILE A 93 -5.335 12.732 26.048 1.00 11.45 C +ATOM 864 O ILE A 93 -5.207 12.556 27.257 1.00 11.98 O +ATOM 865 CB ILE A 93 -6.643 10.599 25.548 1.00 8.30 C +ATOM 866 CG1 ILE A 93 -5.341 9.820 25.286 1.00 5.63 C +ATOM 867 CG2 ILE A 93 -7.849 9.970 24.810 1.00 6.86 C +ATOM 868 CD1 ILE A 93 -5.437 8.344 25.642 1.00 6.01 C +ATOM 869 H ILE A 93 -6.167 11.548 23.098 1.00 15.00 H +ATOM 870 N GLY A 94 -4.464 13.486 25.366 1.00 10.82 N +ATOM 871 CA GLY A 94 -3.410 14.097 26.190 1.00 12.12 C +ATOM 872 C GLY A 94 -2.050 13.371 26.432 1.00 15.12 C +ATOM 873 O GLY A 94 -1.236 13.833 27.223 1.00 17.26 O +ATOM 874 H GLY A 94 -4.588 13.678 24.392 1.00 15.00 H +ATOM 875 N CYS A 95 -1.790 12.267 25.687 1.00 14.55 N +ATOM 876 CA CYS A 95 -0.471 11.597 25.822 1.00 10.81 C +ATOM 877 C CYS A 95 0.838 12.258 25.319 1.00 11.73 C +ATOM 878 O CYS A 95 0.949 12.839 24.228 1.00 13.70 O +ATOM 879 CB CYS A 95 -0.614 10.216 25.243 1.00 12.07 C +ATOM 880 SG CYS A 95 0.307 8.920 26.088 1.00 18.07 S +ATOM 881 H CYS A 95 -2.463 12.031 24.988 1.00 15.00 H +ATOM 882 N THR A 96 1.843 12.131 26.211 1.00 9.92 N +ATOM 883 CA THR A 96 3.255 12.544 26.016 1.00 6.70 C +ATOM 884 C THR A 96 4.358 11.495 26.430 1.00 11.47 C +ATOM 885 O THR A 96 4.175 10.661 27.303 1.00 11.99 O +ATOM 886 CB THR A 96 3.572 13.884 26.732 1.00 3.18 C +ATOM 887 OG1 THR A 96 3.422 13.782 28.136 1.00 2.00 O +ATOM 888 CG2 THR A 96 2.735 15.054 26.263 1.00 2.00 C +ATOM 889 H THR A 96 1.543 11.752 27.094 1.00 15.00 H +ATOM 890 HG1 THR A 96 3.325 14.669 28.470 1.00 15.00 H +ATOM 891 N LEU A 97 5.544 11.562 25.769 1.00 13.36 N +ATOM 892 CA LEU A 97 6.781 10.866 26.209 1.00 11.73 C +ATOM 893 C LEU A 97 7.766 11.692 27.122 1.00 12.03 C +ATOM 894 O LEU A 97 8.091 12.842 26.868 1.00 13.10 O +ATOM 895 CB LEU A 97 7.510 10.366 24.941 1.00 12.45 C +ATOM 896 CG LEU A 97 7.614 8.852 24.580 1.00 12.27 C +ATOM 897 CD1 LEU A 97 6.313 8.199 24.173 1.00 13.18 C +ATOM 898 CD2 LEU A 97 8.468 8.621 23.357 1.00 9.86 C +ATOM 899 H LEU A 97 5.576 12.235 25.027 1.00 15.00 H +ATOM 900 N ASN A 98 8.241 11.095 28.216 1.00 12.12 N +ATOM 901 CA ASN A 98 9.072 11.924 29.137 1.00 14.38 C +ATOM 902 C ASN A 98 10.351 11.322 29.763 1.00 14.68 C +ATOM 903 O ASN A 98 10.298 10.201 30.258 1.00 16.20 O +ATOM 904 CB ASN A 98 8.278 12.403 30.337 1.00 15.85 C +ATOM 905 CG ASN A 98 7.192 13.386 29.979 1.00 18.15 C +ATOM 906 OD1 ASN A 98 7.427 14.537 29.659 1.00 17.39 O +ATOM 907 ND2 ASN A 98 5.958 12.904 30.073 1.00 16.74 N +ATOM 908 H ASN A 98 7.900 10.180 28.444 1.00 15.00 H +ATOM 909 HD21 ASN A 98 5.269 13.561 29.783 1.00 15.00 H +ATOM 910 HD22 ASN A 98 5.737 11.995 30.424 1.00 15.00 H +ATOM 911 N PHE A 99 11.434 12.148 29.720 1.00 17.67 N +ATOM 912 CA PHE A 99 12.828 12.065 30.252 1.00 12.46 C +ATOM 913 C PHE A 99 13.520 13.457 30.096 1.00 7.09 C +ATOM 914 O PHE A 99 14.655 13.569 29.636 0.00 8.50 O +ATOM 915 CB PHE A 99 13.592 10.871 29.623 1.00 7.80 C +ATOM 916 CG PHE A 99 13.829 11.100 28.161 1.00 5.94 C +ATOM 917 CD1 PHE A 99 12.760 11.001 27.249 1.00 12.70 C +ATOM 918 CD2 PHE A 99 15.119 11.457 27.715 1.00 10.34 C +ATOM 919 CE1 PHE A 99 12.961 11.344 25.896 1.00 13.79 C +ATOM 920 CE2 PHE A 99 15.334 11.813 26.366 1.00 13.69 C +ATOM 921 CZ PHE A 99 14.238 11.793 25.477 1.00 16.36 C +ATOM 922 OXT PHE A 99 12.893 14.487 30.349 0.00 8.50 O +ATOM 923 H PHE A 99 11.228 13.069 29.393 1.00 15.00 H +TER 924 PHE A 99 +ATOM 925 N PRO B 1 13.587 15.375 28.006 1.00 37.18 N +ATOM 926 CA PRO B 1 12.429 15.782 27.190 1.00 32.66 C +ATOM 927 C PRO B 1 11.058 15.893 27.827 1.00 30.70 C +ATOM 928 O PRO B 1 10.652 14.934 28.450 1.00 33.19 O +ATOM 929 CB PRO B 1 12.884 16.920 26.297 1.00 32.98 C +ATOM 930 CG PRO B 1 14.194 16.250 25.886 1.00 37.01 C +ATOM 931 CD PRO B 1 14.771 15.729 27.210 1.00 37.71 C +ATOM 932 H2 PRO B 1 13.592 15.705 29.002 0.00 0.00 H +ATOM 933 H3 PRO B 1 13.613 14.354 28.265 0.00 0.00 H +ATOM 934 N GLN B 2 10.289 16.963 27.520 1.00 25.28 N +ATOM 935 CA GLN B 2 8.951 16.454 27.183 1.00 22.03 C +ATOM 936 C GLN B 2 8.735 16.286 25.690 1.00 18.15 C +ATOM 937 O GLN B 2 9.066 17.182 24.944 1.00 19.19 O +ATOM 938 CB GLN B 2 7.858 17.317 27.754 1.00 24.59 C +ATOM 939 CG GLN B 2 6.487 16.636 27.780 1.00 21.41 C +ATOM 940 CD GLN B 2 5.550 17.497 28.592 1.00 23.66 C +ATOM 941 OE1 GLN B 2 5.147 17.232 29.715 1.00 17.87 O +ATOM 942 NE2 GLN B 2 5.195 18.607 27.947 1.00 25.77 N +ATOM 943 H GLN B 2 10.602 17.852 27.198 1.00 15.00 H +ATOM 944 HE21 GLN B 2 4.611 19.180 28.515 1.00 15.00 H +ATOM 945 HE22 GLN B 2 5.499 18.821 27.027 1.00 15.00 H +ATOM 946 N ILE B 3 8.226 15.125 25.284 1.00 14.61 N +ATOM 947 CA ILE B 3 8.003 14.894 23.853 1.00 14.42 C +ATOM 948 C ILE B 3 6.521 14.704 23.440 1.00 14.49 C +ATOM 949 O ILE B 3 5.843 13.739 23.782 1.00 11.98 O +ATOM 950 CB ILE B 3 8.908 13.730 23.358 1.00 15.82 C +ATOM 951 CG1 ILE B 3 10.386 13.948 23.707 1.00 17.70 C +ATOM 952 CG2 ILE B 3 8.805 13.509 21.839 1.00 13.84 C +ATOM 953 CD1 ILE B 3 11.258 12.860 23.102 1.00 16.91 C +ATOM 954 H ILE B 3 8.033 14.449 25.996 1.00 15.00 H +ATOM 955 N THR B 4 6.007 15.694 22.684 1.00 13.06 N +ATOM 956 CA THR B 4 4.637 15.475 22.179 1.00 11.34 C +ATOM 957 C THR B 4 4.485 14.733 20.868 1.00 14.26 C +ATOM 958 O THR B 4 5.391 14.603 20.050 1.00 17.92 O +ATOM 959 CB THR B 4 3.842 16.757 21.981 1.00 12.43 C +ATOM 960 OG1 THR B 4 4.477 17.558 20.973 1.00 16.86 O +ATOM 961 CG2 THR B 4 3.616 17.532 23.278 1.00 9.78 C +ATOM 962 H THR B 4 6.612 16.409 22.331 1.00 15.00 H +ATOM 963 HG1 THR B 4 4.039 18.402 20.956 1.00 15.00 H +ATOM 964 N LEU B 5 3.243 14.257 20.693 1.00 12.93 N +ATOM 965 CA LEU B 5 2.994 13.361 19.550 1.00 10.05 C +ATOM 966 C LEU B 5 2.303 13.904 18.292 1.00 10.74 C +ATOM 967 O LEU B 5 1.831 13.156 17.450 1.00 13.05 O +ATOM 968 CB LEU B 5 2.233 12.124 20.046 1.00 12.05 C +ATOM 969 CG LEU B 5 2.952 11.008 20.841 1.00 12.23 C +ATOM 970 CD1 LEU B 5 4.489 11.031 20.848 1.00 11.19 C +ATOM 971 CD2 LEU B 5 2.307 10.783 22.180 1.00 2.39 C +ATOM 972 H LEU B 5 2.596 14.322 21.450 1.00 15.00 H +ATOM 973 N TRP B 6 2.245 15.249 18.159 1.00 10.83 N +ATOM 974 CA TRP B 6 1.758 15.805 16.880 1.00 8.95 C +ATOM 975 C TRP B 6 2.538 15.367 15.646 1.00 11.86 C +ATOM 976 O TRP B 6 2.017 15.148 14.562 1.00 13.20 O +ATOM 977 CB TRP B 6 1.831 17.332 16.775 1.00 9.49 C +ATOM 978 CG TRP B 6 1.039 18.078 17.808 1.00 7.19 C +ATOM 979 CD1 TRP B 6 1.619 18.811 18.841 1.00 9.16 C +ATOM 980 CD2 TRP B 6 -0.391 18.196 18.006 1.00 14.14 C +ATOM 981 NE1 TRP B 6 0.692 19.339 19.659 1.00 7.62 N +ATOM 982 CE2 TRP B 6 -0.576 18.983 19.193 1.00 13.41 C +ATOM 983 CE3 TRP B 6 -1.528 17.737 17.295 1.00 16.58 C +ATOM 984 CZ2 TRP B 6 -1.887 19.274 19.659 1.00 10.89 C +ATOM 985 CZ3 TRP B 6 -2.827 18.052 17.761 1.00 19.55 C +ATOM 986 CH2 TRP B 6 -3.008 18.805 18.945 1.00 12.82 C +ATOM 987 H TRP B 6 2.645 15.799 18.887 1.00 15.00 H +ATOM 988 HE1 TRP B 6 0.877 19.912 20.438 1.00 15.00 H +ATOM 989 N LYS B 7 3.857 15.254 15.865 1.00 15.08 N +ATOM 990 CA LYS B 7 4.567 14.402 14.905 1.00 14.05 C +ATOM 991 C LYS B 7 5.265 13.130 15.437 1.00 10.87 C +ATOM 992 O LYS B 7 5.190 12.773 16.605 1.00 8.04 O +ATOM 993 CB LYS B 7 5.382 15.210 13.864 1.00 12.97 C +ATOM 994 CG LYS B 7 5.922 16.586 14.221 1.00 18.22 C +ATOM 995 CD LYS B 7 7.141 16.570 15.157 1.00 29.42 C +ATOM 996 CE LYS B 7 7.808 17.956 15.399 1.00 36.49 C +ATOM 997 NZ LYS B 7 8.467 18.487 14.174 1.00 41.16 N +ATOM 998 H LYS B 7 4.258 15.573 16.719 1.00 15.00 H +ATOM 999 HZ1 LYS B 7 9.010 17.725 13.719 1.00 15.00 H +ATOM 1000 HZ2 LYS B 7 7.743 18.839 13.515 1.00 15.00 H +ATOM 1001 HZ3 LYS B 7 9.106 19.267 14.430 1.00 15.00 H +ATOM 1002 N ARG B 8 5.941 12.438 14.502 1.00 7.83 N +ATOM 1003 CA ARG B 8 6.757 11.289 14.910 1.00 6.01 C +ATOM 1004 C ARG B 8 7.864 11.650 15.893 1.00 5.22 C +ATOM 1005 O ARG B 8 8.538 12.670 15.755 1.00 2.00 O +ATOM 1006 CB ARG B 8 7.392 10.626 13.672 1.00 8.34 C +ATOM 1007 CG ARG B 8 6.440 9.877 12.721 1.00 7.25 C +ATOM 1008 CD ARG B 8 7.149 9.217 11.559 1.00 4.59 C +ATOM 1009 NE ARG B 8 6.209 8.432 10.750 1.00 14.38 N +ATOM 1010 CZ ARG B 8 6.611 7.669 9.688 1.00 15.55 C +ATOM 1011 NH1 ARG B 8 7.894 7.559 9.332 1.00 16.70 N +ATOM 1012 NH2 ARG B 8 5.699 7.025 8.965 1.00 18.53 N +ATOM 1013 H ARG B 8 5.902 12.755 13.558 1.00 15.00 H +ATOM 1014 HE ARG B 8 5.228 8.480 10.936 1.00 15.00 H +ATOM 1015 HH11 ARG B 8 8.599 8.035 9.858 1.00 15.00 H +ATOM 1016 HH12 ARG B 8 8.151 7.003 8.542 1.00 15.00 H +ATOM 1017 HH21 ARG B 8 4.729 7.091 9.197 1.00 15.00 H +ATOM 1018 HH22 ARG B 8 5.993 6.478 8.181 1.00 15.00 H +ATOM 1019 N PRO B 9 8.052 10.777 16.909 1.00 7.39 N +ATOM 1020 CA PRO B 9 9.075 11.107 17.923 1.00 8.37 C +ATOM 1021 C PRO B 9 10.507 10.656 17.556 1.00 5.80 C +ATOM 1022 O PRO B 9 11.032 9.686 18.101 1.00 5.48 O +ATOM 1023 CB PRO B 9 8.443 10.425 19.155 1.00 6.26 C +ATOM 1024 CG PRO B 9 7.757 9.168 18.601 1.00 3.24 C +ATOM 1025 CD PRO B 9 7.280 9.572 17.223 1.00 5.14 C +ATOM 1026 N LEU B 10 11.099 11.404 16.586 1.00 6.45 N +ATOM 1027 CA LEU B 10 12.530 11.236 16.151 1.00 10.46 C +ATOM 1028 C LEU B 10 13.651 11.856 17.014 1.00 10.72 C +ATOM 1029 O LEU B 10 13.723 13.054 17.210 1.00 11.17 O +ATOM 1030 CB LEU B 10 12.878 11.732 14.743 1.00 7.46 C +ATOM 1031 CG LEU B 10 12.299 10.972 13.559 1.00 16.13 C +ATOM 1032 CD1 LEU B 10 12.546 9.461 13.564 1.00 18.86 C +ATOM 1033 CD2 LEU B 10 10.829 11.269 13.370 1.00 23.21 C +ATOM 1034 H LEU B 10 10.550 12.178 16.265 1.00 15.00 H +ATOM 1035 N VAL B 11 14.543 11.008 17.521 1.00 12.29 N +ATOM 1036 CA VAL B 11 15.734 11.566 18.162 1.00 12.15 C +ATOM 1037 C VAL B 11 17.039 11.269 17.422 1.00 14.43 C +ATOM 1038 O VAL B 11 17.126 10.470 16.493 1.00 10.98 O +ATOM 1039 CB VAL B 11 15.825 11.155 19.642 1.00 14.58 C +ATOM 1040 CG1 VAL B 11 14.809 11.938 20.469 1.00 18.20 C +ATOM 1041 CG2 VAL B 11 15.703 9.641 19.871 1.00 11.13 C +ATOM 1042 H VAL B 11 14.370 10.032 17.437 1.00 15.00 H +ATOM 1043 N THR B 12 18.082 11.970 17.903 1.00 17.32 N +ATOM 1044 CA THR B 12 19.472 11.559 17.587 1.00 16.89 C +ATOM 1045 C THR B 12 20.117 10.551 18.529 1.00 15.64 C +ATOM 1046 O THR B 12 20.067 10.620 19.752 1.00 17.75 O +ATOM 1047 CB THR B 12 20.414 12.758 17.462 1.00 18.04 C +ATOM 1048 OG1 THR B 12 20.038 13.533 16.308 1.00 21.81 O +ATOM 1049 CG2 THR B 12 21.917 12.400 17.404 1.00 18.90 C +ATOM 1050 H THR B 12 17.865 12.659 18.592 1.00 15.00 H +ATOM 1051 HG1 THR B 12 19.091 13.514 16.241 1.00 15.00 H +ATOM 1052 N ILE B 13 20.736 9.600 17.861 1.00 15.87 N +ATOM 1053 CA ILE B 13 21.551 8.582 18.500 1.00 18.13 C +ATOM 1054 C ILE B 13 22.966 8.447 17.862 1.00 20.14 C +ATOM 1055 O ILE B 13 23.155 8.590 16.653 1.00 22.93 O +ATOM 1056 CB ILE B 13 20.781 7.241 18.489 1.00 16.33 C +ATOM 1057 CG1 ILE B 13 20.778 6.658 17.067 1.00 14.28 C +ATOM 1058 CG2 ILE B 13 19.348 7.415 19.043 1.00 7.89 C +ATOM 1059 CD1 ILE B 13 20.940 5.139 17.014 1.00 14.30 C +ATOM 1060 H ILE B 13 20.664 9.631 16.862 1.00 15.00 H +ATOM 1061 N ARG B 14 23.937 8.152 18.748 1.00 18.38 N +ATOM 1062 CA ARG B 14 25.293 7.749 18.339 1.00 18.22 C +ATOM 1063 C ARG B 14 25.746 6.328 18.747 1.00 19.03 C +ATOM 1064 O ARG B 14 25.735 5.918 19.912 1.00 17.41 O +ATOM 1065 CB ARG B 14 26.312 8.748 18.855 1.00 20.63 C +ATOM 1066 CG ARG B 14 25.921 10.196 18.572 1.00 19.56 C +ATOM 1067 CD ARG B 14 26.878 11.184 19.231 1.00 17.96 C +ATOM 1068 NE ARG B 14 26.288 12.520 19.271 1.00 18.75 N +ATOM 1069 CZ ARG B 14 26.489 13.396 18.267 1.00 17.61 C +ATOM 1070 NH1 ARG B 14 27.340 13.131 17.281 1.00 21.18 N +ATOM 1071 NH2 ARG B 14 25.818 14.542 18.261 1.00 13.12 N +ATOM 1072 H ARG B 14 23.666 8.180 19.703 1.00 15.00 H +ATOM 1073 HE ARG B 14 25.645 12.762 19.997 1.00 15.00 H +ATOM 1074 HH11 ARG B 14 27.865 12.281 17.269 1.00 15.00 H +ATOM 1075 HH12 ARG B 14 27.463 13.799 16.546 1.00 15.00 H +ATOM 1076 HH21 ARG B 14 25.170 14.740 18.995 1.00 15.00 H +ATOM 1077 HH22 ARG B 14 25.958 15.206 17.525 1.00 15.00 H +ATOM 1078 N ILE B 15 26.136 5.587 17.692 1.00 19.14 N +ATOM 1079 CA ILE B 15 26.675 4.223 17.875 1.00 20.97 C +ATOM 1080 C ILE B 15 27.990 4.067 17.116 1.00 21.93 C +ATOM 1081 O ILE B 15 28.096 4.437 15.946 1.00 21.67 O +ATOM 1082 CB ILE B 15 25.761 3.081 17.346 1.00 21.14 C +ATOM 1083 CG1 ILE B 15 24.325 3.432 17.085 1.00 19.78 C +ATOM 1084 CG2 ILE B 15 25.817 1.794 18.173 1.00 21.67 C +ATOM 1085 CD1 ILE B 15 24.119 3.521 15.577 1.00 18.76 C +ATOM 1086 H ILE B 15 26.065 6.047 16.803 1.00 15.00 H +ATOM 1087 N GLY B 16 29.000 3.497 17.790 1.00 22.82 N +ATOM 1088 CA GLY B 16 30.321 3.473 17.114 1.00 22.20 C +ATOM 1089 C GLY B 16 30.974 4.847 17.146 1.00 20.60 C +ATOM 1090 O GLY B 16 30.938 5.546 18.147 1.00 25.71 O +ATOM 1091 H GLY B 16 28.857 3.297 18.757 1.00 15.00 H +ATOM 1092 N GLY B 17 31.437 5.279 15.994 1.00 18.01 N +ATOM 1093 CA GLY B 17 31.429 6.751 15.988 1.00 19.32 C +ATOM 1094 C GLY B 17 30.339 7.400 15.110 1.00 23.21 C +ATOM 1095 O GLY B 17 30.460 8.495 14.576 1.00 26.58 O +ATOM 1096 H GLY B 17 31.595 4.698 15.200 1.00 15.00 H +ATOM 1097 N GLN B 18 29.259 6.628 14.888 1.00 22.56 N +ATOM 1098 CA GLN B 18 28.208 7.031 13.936 1.00 16.21 C +ATOM 1099 C GLN B 18 27.054 7.865 14.457 1.00 12.18 C +ATOM 1100 O GLN B 18 26.491 7.608 15.509 1.00 9.33 O +ATOM 1101 CB GLN B 18 27.677 5.814 13.157 1.00 18.45 C +ATOM 1102 CG GLN B 18 28.711 4.969 12.407 1.00 21.83 C +ATOM 1103 CD GLN B 18 29.484 5.767 11.340 1.00 31.86 C +ATOM 1104 OE1 GLN B 18 29.459 5.507 10.154 1.00 36.21 O +ATOM 1105 NE2 GLN B 18 30.265 6.751 11.750 1.00 38.63 N +ATOM 1106 H GLN B 18 29.143 5.839 15.481 1.00 15.00 H +ATOM 1107 HE21 GLN B 18 30.753 7.166 10.988 1.00 15.00 H +ATOM 1108 HE22 GLN B 18 30.409 7.077 12.678 1.00 15.00 H +ATOM 1109 N LEU B 19 26.724 8.863 13.624 1.00 11.59 N +ATOM 1110 CA LEU B 19 25.504 9.664 13.853 1.00 17.43 C +ATOM 1111 C LEU B 19 24.278 9.189 13.058 1.00 18.33 C +ATOM 1112 O LEU B 19 24.321 9.210 11.834 1.00 15.36 O +ATOM 1113 CB LEU B 19 25.725 11.148 13.493 1.00 19.73 C +ATOM 1114 CG LEU B 19 24.999 12.217 14.343 1.00 21.23 C +ATOM 1115 CD1 LEU B 19 25.361 13.624 13.837 1.00 21.44 C +ATOM 1116 CD2 LEU B 19 23.485 12.072 14.414 1.00 18.91 C +ATOM 1117 H LEU B 19 27.278 8.994 12.808 1.00 15.00 H +ATOM 1118 N LYS B 20 23.215 8.804 13.816 1.00 16.80 N +ATOM 1119 CA LYS B 20 21.904 8.407 13.282 1.00 15.52 C +ATOM 1120 C LYS B 20 20.676 9.181 13.812 1.00 17.36 C +ATOM 1121 O LYS B 20 20.643 9.643 14.945 1.00 15.50 O +ATOM 1122 CB LYS B 20 21.574 6.971 13.681 1.00 17.22 C +ATOM 1123 CG LYS B 20 22.607 5.882 13.524 1.00 13.99 C +ATOM 1124 CD LYS B 20 22.882 5.675 12.073 1.00 13.62 C +ATOM 1125 CE LYS B 20 24.025 4.717 11.895 1.00 16.99 C +ATOM 1126 NZ LYS B 20 24.484 4.868 10.504 1.00 24.02 N +ATOM 1127 H LYS B 20 23.365 8.840 14.806 1.00 15.00 H +ATOM 1128 HZ1 LYS B 20 24.754 5.857 10.329 1.00 15.00 H +ATOM 1129 HZ2 LYS B 20 25.303 4.247 10.342 1.00 15.00 H +ATOM 1130 HZ3 LYS B 20 23.715 4.598 9.857 1.00 15.00 H +ATOM 1131 N GLU B 21 19.602 9.192 12.983 1.00 20.16 N +ATOM 1132 CA GLU B 21 18.268 9.421 13.598 1.00 21.51 C +ATOM 1133 C GLU B 21 17.361 8.190 13.818 1.00 18.01 C +ATOM 1134 O GLU B 21 17.343 7.233 13.047 1.00 18.22 O +ATOM 1135 CB GLU B 21 17.480 10.520 12.888 1.00 27.81 C +ATOM 1136 CG GLU B 21 17.066 10.131 11.457 1.00 39.64 C +ATOM 1137 CD GLU B 21 15.964 11.031 10.886 1.00 45.64 C +ATOM 1138 OE1 GLU B 21 15.654 12.058 11.515 1.00 50.60 O +ATOM 1139 OE2 GLU B 21 15.421 10.685 9.817 1.00 42.07 O +ATOM 1140 H GLU B 21 19.729 8.916 12.035 1.00 15.00 H +ATOM 1141 N ALA B 22 16.616 8.230 14.925 1.00 13.80 N +ATOM 1142 CA ALA B 22 15.823 7.055 15.287 1.00 11.87 C +ATOM 1143 C ALA B 22 14.518 7.381 16.019 1.00 11.18 C +ATOM 1144 O ALA B 22 14.447 8.415 16.662 1.00 11.74 O +ATOM 1145 CB ALA B 22 16.666 6.101 16.149 1.00 10.30 C +ATOM 1146 H ALA B 22 16.676 9.025 15.523 1.00 15.00 H +ATOM 1147 N LEU B 23 13.514 6.468 15.921 1.00 10.61 N +ATOM 1148 CA LEU B 23 12.192 6.568 16.594 1.00 9.03 C +ATOM 1149 C LEU B 23 12.109 6.049 18.004 1.00 4.38 C +ATOM 1150 O LEU B 23 12.334 4.875 18.258 1.00 3.93 O +ATOM 1151 CB LEU B 23 11.040 5.757 15.925 1.00 14.89 C +ATOM 1152 CG LEU B 23 10.386 6.220 14.622 1.00 15.84 C +ATOM 1153 CD1 LEU B 23 9.509 5.129 14.020 1.00 15.65 C +ATOM 1154 CD2 LEU B 23 9.588 7.493 14.822 1.00 18.35 C +ATOM 1155 H LEU B 23 13.736 5.654 15.389 1.00 15.00 H +ATOM 1156 N LEU B 24 11.672 6.936 18.895 1.00 4.41 N +ATOM 1157 CA LEU B 24 11.209 6.427 20.199 1.00 5.96 C +ATOM 1158 C LEU B 24 9.869 5.589 20.226 1.00 6.17 C +ATOM 1159 O LEU B 24 8.750 6.062 20.072 1.00 3.94 O +ATOM 1160 CB LEU B 24 11.234 7.643 21.120 1.00 9.00 C +ATOM 1161 CG LEU B 24 12.381 7.678 22.141 1.00 12.19 C +ATOM 1162 CD1 LEU B 24 13.719 7.199 21.578 1.00 6.06 C +ATOM 1163 CD2 LEU B 24 12.451 9.015 22.873 1.00 5.03 C +ATOM 1164 H LEU B 24 11.549 7.886 18.602 1.00 15.00 H +ATOM 1165 N ASP B 25 10.009 4.262 20.364 1.00 7.45 N +ATOM 1166 CA ASP B 25 8.798 3.452 20.120 1.00 7.91 C +ATOM 1167 C ASP B 25 8.248 2.587 21.300 1.00 5.74 C +ATOM 1168 O ASP B 25 8.641 1.467 21.562 1.00 6.02 O +ATOM 1169 CB ASP B 25 9.015 2.651 18.801 1.00 9.14 C +ATOM 1170 CG ASP B 25 7.778 1.925 18.308 1.00 12.45 C +ATOM 1171 OD1 ASP B 25 6.703 2.106 18.868 1.00 21.66 O +ATOM 1172 OD2 ASP B 25 7.881 1.162 17.360 1.00 11.59 O +ATOM 1173 H ASP B 25 10.914 3.852 20.515 1.00 15.00 H +ATOM 1174 N THR B 26 7.241 3.084 22.009 1.00 6.69 N +ATOM 1175 CA THR B 26 6.714 2.258 23.143 1.00 6.27 C +ATOM 1176 C THR B 26 6.004 0.933 22.778 1.00 7.34 C +ATOM 1177 O THR B 26 5.793 0.036 23.578 1.00 8.88 O +ATOM 1178 CB THR B 26 5.729 3.109 23.933 1.00 6.84 C +ATOM 1179 OG1 THR B 26 4.608 3.464 23.074 1.00 9.25 O +ATOM 1180 CG2 THR B 26 6.425 4.368 24.451 1.00 2.00 C +ATOM 1181 H THR B 26 6.901 4.007 21.818 1.00 15.00 H +ATOM 1182 HG1 THR B 26 3.859 2.953 23.397 1.00 15.00 H +ATOM 1183 N GLY B 27 5.656 0.858 21.478 1.00 4.35 N +ATOM 1184 CA GLY B 27 5.173 -0.400 20.906 1.00 9.46 C +ATOM 1185 C GLY B 27 6.203 -1.516 20.597 1.00 15.26 C +ATOM 1186 O GLY B 27 5.877 -2.692 20.436 1.00 17.22 O +ATOM 1187 H GLY B 27 5.801 1.683 20.945 1.00 15.00 H +ATOM 1188 N ALA B 28 7.492 -1.103 20.522 1.00 14.40 N +ATOM 1189 CA ALA B 28 8.551 -2.107 20.342 1.00 5.74 C +ATOM 1190 C ALA B 28 9.165 -2.701 21.615 1.00 2.42 C +ATOM 1191 O ALA B 28 9.669 -2.061 22.526 1.00 2.00 O +ATOM 1192 CB ALA B 28 9.661 -1.568 19.447 1.00 4.25 C +ATOM 1193 H ALA B 28 7.713 -0.156 20.744 1.00 15.00 H +ATOM 1194 N ASP B 29 9.112 -4.029 21.619 1.00 2.74 N +ATOM 1195 CA ASP B 29 9.838 -4.791 22.645 1.00 2.57 C +ATOM 1196 C ASP B 29 11.373 -4.638 22.626 1.00 3.27 C +ATOM 1197 O ASP B 29 12.073 -4.576 23.621 1.00 7.51 O +ATOM 1198 CB ASP B 29 9.512 -6.271 22.479 1.00 5.23 C +ATOM 1199 CG ASP B 29 8.133 -6.745 22.899 1.00 9.26 C +ATOM 1200 OD1 ASP B 29 7.455 -6.048 23.657 1.00 14.61 O +ATOM 1201 OD2 ASP B 29 7.756 -7.845 22.469 1.00 8.73 O +ATOM 1202 H ASP B 29 8.540 -4.432 20.905 1.00 15.00 H +ATOM 1203 N ASP B 30 11.861 -4.594 21.390 1.00 6.36 N +ATOM 1204 CA ASP B 30 13.280 -4.652 21.055 1.00 9.02 C +ATOM 1205 C ASP B 30 13.748 -3.529 20.146 1.00 8.29 C +ATOM 1206 O ASP B 30 12.983 -2.852 19.483 1.00 11.43 O +ATOM 1207 CB ASP B 30 13.615 -5.914 20.256 1.00 14.97 C +ATOM 1208 CG ASP B 30 13.403 -7.271 20.937 1.00 16.52 C +ATOM 1209 OD1 ASP B 30 13.879 -7.478 22.077 1.00 13.64 O +ATOM 1210 OD2 ASP B 30 12.783 -8.114 20.271 1.00 16.84 O +ATOM 1211 H ASP B 30 11.189 -4.560 20.656 1.00 15.00 H +ATOM 1212 N THR B 31 15.069 -3.377 20.133 1.00 11.09 N +ATOM 1213 CA THR B 31 15.689 -2.288 19.330 1.00 10.79 C +ATOM 1214 C THR B 31 16.168 -2.748 17.969 1.00 5.57 C +ATOM 1215 O THR B 31 16.972 -3.643 17.843 1.00 11.09 O +ATOM 1216 CB THR B 31 16.851 -1.587 20.106 1.00 7.86 C +ATOM 1217 OG1 THR B 31 16.360 -0.962 21.300 1.00 3.89 O +ATOM 1218 CG2 THR B 31 17.629 -0.548 19.287 1.00 2.00 C +ATOM 1219 H THR B 31 15.617 -4.041 20.639 1.00 15.00 H +ATOM 1220 HG1 THR B 31 16.103 -1.648 21.915 1.00 15.00 H +ATOM 1221 N VAL B 32 15.612 -2.144 16.947 1.00 6.15 N +ATOM 1222 CA VAL B 32 15.849 -2.621 15.593 1.00 6.00 C +ATOM 1223 C VAL B 32 16.503 -1.559 14.738 1.00 7.16 C +ATOM 1224 O VAL B 32 15.939 -0.497 14.526 1.00 12.47 O +ATOM 1225 CB VAL B 32 14.518 -3.116 15.014 1.00 3.33 C +ATOM 1226 CG1 VAL B 32 14.578 -3.566 13.547 1.00 8.75 C +ATOM 1227 CG2 VAL B 32 14.063 -4.290 15.870 1.00 2.01 C +ATOM 1228 H VAL B 32 15.020 -1.362 17.150 1.00 15.00 H +ATOM 1229 N LEU B 33 17.741 -1.848 14.325 1.00 7.71 N +ATOM 1230 CA LEU B 33 18.539 -0.837 13.600 1.00 10.06 C +ATOM 1231 C LEU B 33 18.820 -1.204 12.169 1.00 9.90 C +ATOM 1232 O LEU B 33 18.788 -2.357 11.795 1.00 15.88 O +ATOM 1233 CB LEU B 33 19.892 -0.557 14.286 1.00 11.85 C +ATOM 1234 CG LEU B 33 20.078 0.579 15.330 1.00 14.18 C +ATOM 1235 CD1 LEU B 33 18.852 0.924 16.195 1.00 13.47 C +ATOM 1236 CD2 LEU B 33 21.275 0.276 16.230 1.00 12.15 C +ATOM 1237 H LEU B 33 18.087 -2.770 14.499 1.00 15.00 H +ATOM 1238 N GLU B 34 19.111 -0.206 11.360 1.00 14.19 N +ATOM 1239 CA GLU B 34 19.536 -0.485 9.975 1.00 16.04 C +ATOM 1240 C GLU B 34 20.898 -1.177 9.727 1.00 15.98 C +ATOM 1241 O GLU B 34 21.813 -1.161 10.535 1.00 15.35 O +ATOM 1242 CB GLU B 34 19.605 0.826 9.249 1.00 19.39 C +ATOM 1243 CG GLU B 34 20.722 1.739 9.795 1.00 26.76 C +ATOM 1244 CD GLU B 34 20.801 2.877 8.814 1.00 34.63 C +ATOM 1245 OE1 GLU B 34 21.217 2.616 7.682 1.00 43.75 O +ATOM 1246 OE2 GLU B 34 20.420 3.998 9.160 1.00 32.10 O +ATOM 1247 H GLU B 34 19.139 0.709 11.757 1.00 15.00 H +ATOM 1248 N GLU B 35 21.037 -1.752 8.535 1.00 17.85 N +ATOM 1249 CA GLU B 35 22.295 -2.452 8.201 1.00 19.01 C +ATOM 1250 C GLU B 35 23.624 -1.752 8.500 1.00 20.56 C +ATOM 1251 O GLU B 35 23.953 -0.712 7.941 1.00 22.63 O +ATOM 1252 CB GLU B 35 22.267 -2.892 6.739 1.00 18.71 C +ATOM 1253 CG GLU B 35 23.137 -4.070 6.309 1.00 25.41 C +ATOM 1254 CD GLU B 35 23.127 -5.194 7.320 1.00 31.07 C +ATOM 1255 OE1 GLU B 35 22.065 -5.751 7.614 1.00 33.01 O +ATOM 1256 OE2 GLU B 35 24.211 -5.505 7.809 1.00 33.12 O +ATOM 1257 H GLU B 35 20.282 -1.708 7.888 1.00 15.00 H +ATOM 1258 N MET B 36 24.359 -2.401 9.417 1.00 17.85 N +ATOM 1259 CA MET B 36 25.668 -1.889 9.802 1.00 16.22 C +ATOM 1260 C MET B 36 26.715 -2.887 10.316 1.00 19.10 C +ATOM 1261 O MET B 36 26.436 -3.975 10.790 1.00 20.28 O +ATOM 1262 CB MET B 36 25.499 -0.745 10.786 1.00 18.45 C +ATOM 1263 CG MET B 36 25.081 -1.138 12.201 1.00 21.13 C +ATOM 1264 SD MET B 36 25.048 0.354 13.194 1.00 23.85 S +ATOM 1265 CE MET B 36 23.662 1.119 12.338 1.00 23.44 C +ATOM 1266 H MET B 36 23.929 -3.187 9.853 1.00 15.00 H +ATOM 1267 N ASN B 37 27.986 -2.485 10.207 1.00 22.03 N +ATOM 1268 CA ASN B 37 28.949 -3.438 10.791 1.00 23.18 C +ATOM 1269 C ASN B 37 29.378 -3.126 12.225 1.00 19.96 C +ATOM 1270 O ASN B 37 29.725 -2.007 12.566 1.00 20.91 O +ATOM 1271 CB ASN B 37 30.132 -3.676 9.826 1.00 27.49 C +ATOM 1272 CG ASN B 37 30.702 -5.077 10.023 1.00 35.24 C +ATOM 1273 OD1 ASN B 37 30.397 -5.788 10.963 1.00 41.93 O +ATOM 1274 ND2 ASN B 37 31.570 -5.480 9.113 1.00 36.98 N +ATOM 1275 H ASN B 37 28.195 -1.569 9.874 1.00 15.00 H +ATOM 1276 HD21 ASN B 37 31.921 -6.393 9.305 1.00 15.00 H +ATOM 1277 HD22 ASN B 37 31.883 -4.926 8.350 1.00 15.00 H +ATOM 1278 N LEU B 38 29.309 -4.142 13.064 1.00 16.38 N +ATOM 1279 CA LEU B 38 29.572 -3.902 14.486 1.00 13.73 C +ATOM 1280 C LEU B 38 30.672 -4.815 15.041 1.00 16.59 C +ATOM 1281 O LEU B 38 30.881 -5.966 14.639 1.00 18.31 O +ATOM 1282 CB LEU B 38 28.261 -4.104 15.252 1.00 8.78 C +ATOM 1283 CG LEU B 38 27.534 -2.931 15.893 1.00 8.20 C +ATOM 1284 CD1 LEU B 38 27.680 -1.620 15.152 1.00 6.79 C +ATOM 1285 CD2 LEU B 38 26.049 -3.255 16.082 1.00 9.67 C +ATOM 1286 H LEU B 38 29.106 -5.046 12.686 1.00 15.00 H +ATOM 1287 N PRO B 39 31.437 -4.284 16.011 1.00 16.54 N +ATOM 1288 CA PRO B 39 32.392 -5.211 16.638 1.00 16.80 C +ATOM 1289 C PRO B 39 31.710 -6.381 17.333 1.00 18.98 C +ATOM 1290 O PRO B 39 30.861 -6.185 18.187 1.00 23.65 O +ATOM 1291 CB PRO B 39 33.194 -4.307 17.571 1.00 11.55 C +ATOM 1292 CG PRO B 39 32.285 -3.098 17.816 1.00 18.60 C +ATOM 1293 CD PRO B 39 31.499 -2.919 16.509 1.00 15.25 C +ATOM 1294 N GLY B 40 32.112 -7.602 16.940 1.00 19.65 N +ATOM 1295 CA GLY B 40 31.768 -8.774 17.771 1.00 19.46 C +ATOM 1296 C GLY B 40 31.086 -10.008 17.131 1.00 19.70 C +ATOM 1297 O GLY B 40 30.880 -10.132 15.928 1.00 16.77 O +ATOM 1298 H GLY B 40 32.609 -7.655 16.081 1.00 15.00 H +ATOM 1299 N LYS B 41 30.735 -10.942 18.032 1.00 22.02 N +ATOM 1300 CA LYS B 41 29.912 -12.108 17.617 1.00 23.82 C +ATOM 1301 C LYS B 41 28.393 -11.915 17.692 1.00 21.29 C +ATOM 1302 O LYS B 41 27.859 -11.242 18.567 1.00 25.33 O +ATOM 1303 CB LYS B 41 30.291 -13.337 18.450 1.00 28.74 C +ATOM 1304 CG LYS B 41 31.518 -14.026 17.845 1.00 36.82 C +ATOM 1305 CD LYS B 41 32.275 -14.891 18.859 1.00 43.84 C +ATOM 1306 CE LYS B 41 33.584 -15.475 18.292 1.00 50.21 C +ATOM 1307 NZ LYS B 41 34.272 -16.305 19.307 1.00 53.29 N +ATOM 1308 H LYS B 41 30.884 -10.710 18.991 1.00 15.00 H +ATOM 1309 HZ1 LYS B 41 34.471 -15.730 20.151 1.00 15.00 H +ATOM 1310 HZ2 LYS B 41 33.664 -17.106 19.573 1.00 15.00 H +ATOM 1311 HZ3 LYS B 41 35.165 -16.665 18.913 1.00 15.00 H +ATOM 1312 N TRP B 42 27.716 -12.539 16.733 1.00 17.46 N +ATOM 1313 CA TRP B 42 26.251 -12.403 16.649 1.00 13.49 C +ATOM 1314 C TRP B 42 25.510 -13.703 16.324 1.00 12.15 C +ATOM 1315 O TRP B 42 26.051 -14.654 15.782 1.00 14.95 O +ATOM 1316 CB TRP B 42 25.920 -11.301 15.634 1.00 12.14 C +ATOM 1317 CG TRP B 42 26.433 -11.709 14.276 1.00 13.33 C +ATOM 1318 CD1 TRP B 42 27.694 -11.399 13.751 1.00 11.85 C +ATOM 1319 CD2 TRP B 42 25.816 -12.577 13.295 1.00 13.96 C +ATOM 1320 NE1 TRP B 42 27.895 -12.010 12.555 1.00 15.10 N +ATOM 1321 CE2 TRP B 42 26.761 -12.752 12.231 1.00 16.59 C +ATOM 1322 CE3 TRP B 42 24.574 -13.230 13.225 1.00 15.64 C +ATOM 1323 CZ2 TRP B 42 26.437 -13.571 11.121 1.00 13.61 C +ATOM 1324 CZ3 TRP B 42 24.267 -14.045 12.116 1.00 15.99 C +ATOM 1325 CH2 TRP B 42 25.190 -14.212 11.063 1.00 13.09 C +ATOM 1326 H TRP B 42 28.224 -13.083 16.070 1.00 15.00 H +ATOM 1327 HE1 TRP B 42 28.703 -11.932 12.009 1.00 15.00 H +ATOM 1328 N LYS B 43 24.230 -13.726 16.645 1.00 14.76 N +ATOM 1329 CA LYS B 43 23.372 -14.840 16.156 1.00 15.01 C +ATOM 1330 C LYS B 43 22.199 -14.340 15.321 1.00 11.60 C +ATOM 1331 O LYS B 43 21.748 -13.221 15.518 1.00 8.57 O +ATOM 1332 CB LYS B 43 22.767 -15.644 17.315 1.00 16.41 C +ATOM 1333 CG LYS B 43 23.607 -15.698 18.598 1.00 25.64 C +ATOM 1334 CD LYS B 43 22.793 -16.192 19.807 1.00 30.49 C +ATOM 1335 CE LYS B 43 23.348 -15.681 21.147 1.00 36.04 C +ATOM 1336 NZ LYS B 43 22.471 -16.056 22.271 1.00 38.16 N +ATOM 1337 H LYS B 43 23.865 -12.950 17.161 1.00 15.00 H +ATOM 1338 HZ1 LYS B 43 22.222 -17.062 22.183 1.00 15.00 H +ATOM 1339 HZ2 LYS B 43 22.986 -15.906 23.162 1.00 15.00 H +ATOM 1340 HZ3 LYS B 43 21.605 -15.481 22.263 1.00 15.00 H +ATOM 1341 N PRO B 44 21.685 -15.153 14.386 1.00 11.50 N +ATOM 1342 CA PRO B 44 20.414 -14.773 13.752 1.00 10.15 C +ATOM 1343 C PRO B 44 19.083 -15.026 14.525 1.00 14.71 C +ATOM 1344 O PRO B 44 18.892 -15.789 15.474 1.00 15.94 O +ATOM 1345 CB PRO B 44 20.520 -15.507 12.434 1.00 7.39 C +ATOM 1346 CG PRO B 44 21.262 -16.797 12.740 1.00 10.30 C +ATOM 1347 CD PRO B 44 22.250 -16.379 13.839 1.00 15.80 C +ATOM 1348 N LYS B 45 18.106 -14.284 14.016 1.00 14.12 N +ATOM 1349 CA LYS B 45 16.794 -14.321 14.642 1.00 7.59 C +ATOM 1350 C LYS B 45 15.674 -14.033 13.602 1.00 10.68 C +ATOM 1351 O LYS B 45 15.874 -13.253 12.677 1.00 13.93 O +ATOM 1352 CB LYS B 45 16.948 -13.268 15.700 1.00 2.27 C +ATOM 1353 CG LYS B 45 16.151 -13.533 16.934 1.00 10.10 C +ATOM 1354 CD LYS B 45 15.901 -12.228 17.660 1.00 13.52 C +ATOM 1355 CE LYS B 45 14.845 -12.483 18.738 1.00 22.70 C +ATOM 1356 NZ LYS B 45 14.288 -11.214 19.244 1.00 24.26 N +ATOM 1357 H LYS B 45 18.350 -13.597 13.327 1.00 15.00 H +ATOM 1358 HZ1 LYS B 45 13.969 -10.630 18.445 1.00 15.00 H +ATOM 1359 HZ2 LYS B 45 13.480 -11.422 19.864 1.00 15.00 H +ATOM 1360 HZ3 LYS B 45 15.017 -10.705 19.784 1.00 15.00 H +ATOM 1361 N MET B 46 14.490 -14.663 13.752 1.00 15.78 N +ATOM 1362 CA MET B 46 13.281 -14.132 13.037 1.00 13.78 C +ATOM 1363 C MET B 46 12.336 -13.203 13.877 1.00 11.68 C +ATOM 1364 O MET B 46 11.738 -13.624 14.856 1.00 11.56 O +ATOM 1365 CB MET B 46 12.405 -15.249 12.457 1.00 7.23 C +ATOM 1366 CG MET B 46 13.121 -16.153 11.481 1.00 10.18 C +ATOM 1367 SD MET B 46 13.485 -15.302 9.972 1.00 15.69 S +ATOM 1368 CE MET B 46 11.863 -15.290 9.206 1.00 8.69 C +ATOM 1369 H MET B 46 14.423 -15.366 14.457 1.00 15.00 H +ATOM 1370 N ILE B 47 12.207 -11.923 13.471 1.00 11.05 N +ATOM 1371 CA ILE B 47 11.224 -11.056 14.153 1.00 8.18 C +ATOM 1372 C ILE B 47 10.063 -10.567 13.256 1.00 6.17 C +ATOM 1373 O ILE B 47 10.203 -10.268 12.071 1.00 4.21 O +ATOM 1374 CB ILE B 47 11.868 -9.870 14.915 1.00 6.47 C +ATOM 1375 CG1 ILE B 47 12.676 -8.934 14.035 1.00 8.49 C +ATOM 1376 CG2 ILE B 47 12.748 -10.294 16.084 1.00 2.00 C +ATOM 1377 CD1 ILE B 47 12.795 -7.565 14.730 1.00 7.40 C +ATOM 1378 H ILE B 47 12.692 -11.654 12.636 1.00 15.00 H +ATOM 1379 N GLY B 48 8.867 -10.542 13.860 1.00 7.20 N +ATOM 1380 CA GLY B 48 7.681 -10.220 13.032 1.00 8.57 C +ATOM 1381 C GLY B 48 6.758 -9.082 13.466 1.00 9.75 C +ATOM 1382 O GLY B 48 6.748 -8.612 14.598 1.00 8.98 O +ATOM 1383 H GLY B 48 8.821 -10.741 14.834 1.00 15.00 H +ATOM 1384 N GLY B 49 5.941 -8.656 12.514 1.00 13.64 N +ATOM 1385 CA GLY B 49 4.937 -7.642 12.885 1.00 12.84 C +ATOM 1386 C GLY B 49 4.027 -7.270 11.734 1.00 15.22 C +ATOM 1387 O GLY B 49 3.748 -8.129 10.915 1.00 18.27 O +ATOM 1388 H GLY B 49 5.989 -9.057 11.606 1.00 15.00 H +ATOM 1389 N ILE B 50 3.573 -6.002 11.639 1.00 13.68 N +ATOM 1390 CA ILE B 50 2.706 -5.646 10.491 1.00 11.58 C +ATOM 1391 C ILE B 50 3.278 -6.090 9.113 1.00 13.86 C +ATOM 1392 O ILE B 50 4.400 -5.782 8.730 1.00 20.94 O +ATOM 1393 CB ILE B 50 2.409 -4.126 10.524 1.00 10.42 C +ATOM 1394 CG1 ILE B 50 1.846 -3.670 11.872 1.00 7.91 C +ATOM 1395 CG2 ILE B 50 1.502 -3.590 9.395 1.00 2.54 C +ATOM 1396 CD1 ILE B 50 0.604 -4.431 12.287 1.00 8.46 C +ATOM 1397 H ILE B 50 3.886 -5.334 12.323 1.00 15.00 H +ATOM 1398 N GLY B 51 2.506 -6.887 8.376 1.00 12.85 N +ATOM 1399 CA GLY B 51 3.070 -7.232 7.062 1.00 11.85 C +ATOM 1400 C GLY B 51 3.804 -8.561 7.004 1.00 11.64 C +ATOM 1401 O GLY B 51 3.910 -9.207 5.975 1.00 13.97 O +ATOM 1402 H GLY B 51 1.636 -7.226 8.725 1.00 15.00 H +ATOM 1403 N GLY B 52 4.281 -8.956 8.192 1.00 10.16 N +ATOM 1404 CA GLY B 52 5.063 -10.188 8.325 1.00 8.77 C +ATOM 1405 C GLY B 52 6.412 -10.082 9.085 1.00 10.56 C +ATOM 1406 O GLY B 52 6.637 -9.230 9.933 1.00 11.23 O +ATOM 1407 H GLY B 52 4.104 -8.383 8.992 1.00 15.00 H +ATOM 1408 N PHE B 53 7.281 -11.045 8.747 1.00 11.07 N +ATOM 1409 CA PHE B 53 8.617 -11.307 9.317 1.00 11.70 C +ATOM 1410 C PHE B 53 9.829 -10.842 8.488 1.00 15.80 C +ATOM 1411 O PHE B 53 9.897 -11.013 7.274 1.00 18.07 O +ATOM 1412 CB PHE B 53 8.808 -12.806 9.572 1.00 4.31 C +ATOM 1413 CG PHE B 53 8.086 -13.211 10.823 1.00 4.87 C +ATOM 1414 CD1 PHE B 53 6.707 -13.481 10.761 1.00 6.81 C +ATOM 1415 CD2 PHE B 53 8.807 -13.338 12.023 1.00 2.00 C +ATOM 1416 CE1 PHE B 53 6.043 -13.950 11.908 1.00 10.37 C +ATOM 1417 CE2 PHE B 53 8.152 -13.838 13.157 1.00 4.35 C +ATOM 1418 CZ PHE B 53 6.780 -14.160 13.088 1.00 4.36 C +ATOM 1419 H PHE B 53 6.973 -11.592 7.970 1.00 15.00 H +ATOM 1420 N ILE B 54 10.807 -10.278 9.234 1.00 16.52 N +ATOM 1421 CA ILE B 54 12.170 -10.098 8.704 1.00 10.33 C +ATOM 1422 C ILE B 54 13.260 -10.938 9.408 1.00 9.77 C +ATOM 1423 O ILE B 54 13.132 -11.362 10.558 1.00 7.99 O +ATOM 1424 CB ILE B 54 12.572 -8.613 8.634 1.00 6.25 C +ATOM 1425 CG1 ILE B 54 12.653 -7.928 10.004 1.00 9.81 C +ATOM 1426 CG2 ILE B 54 11.639 -7.857 7.703 1.00 2.00 C +ATOM 1427 CD1 ILE B 54 13.384 -6.579 9.991 1.00 2.88 C +ATOM 1428 H ILE B 54 10.591 -10.082 10.192 1.00 15.00 H +ATOM 1429 N LYS B 55 14.367 -11.147 8.652 1.00 10.99 N +ATOM 1430 CA LYS B 55 15.595 -11.645 9.329 1.00 10.11 C +ATOM 1431 C LYS B 55 16.630 -10.591 9.723 1.00 5.92 C +ATOM 1432 O LYS B 55 16.878 -9.611 9.044 1.00 6.28 O +ATOM 1433 CB LYS B 55 16.267 -12.792 8.562 1.00 12.08 C +ATOM 1434 CG LYS B 55 17.209 -13.621 9.428 1.00 18.95 C +ATOM 1435 CD LYS B 55 17.995 -14.639 8.595 1.00 26.21 C +ATOM 1436 CE LYS B 55 19.344 -14.978 9.238 1.00 30.94 C +ATOM 1437 NZ LYS B 55 20.154 -15.900 8.409 1.00 35.50 N +ATOM 1438 H LYS B 55 14.363 -10.794 7.720 1.00 15.00 H +ATOM 1439 HZ1 LYS B 55 19.567 -16.713 8.131 1.00 15.00 H +ATOM 1440 HZ2 LYS B 55 20.484 -15.400 7.560 1.00 15.00 H +ATOM 1441 HZ3 LYS B 55 20.969 -16.233 8.962 1.00 15.00 H +ATOM 1442 N VAL B 56 17.170 -10.858 10.902 1.00 8.08 N +ATOM 1443 CA VAL B 56 17.925 -9.967 11.800 1.00 8.36 C +ATOM 1444 C VAL B 56 19.180 -10.675 12.405 1.00 9.26 C +ATOM 1445 O VAL B 56 19.237 -11.905 12.504 1.00 10.25 O +ATOM 1446 CB VAL B 56 16.825 -9.604 12.832 1.00 11.67 C +ATOM 1447 CG1 VAL B 56 17.084 -9.976 14.294 1.00 12.60 C +ATOM 1448 CG2 VAL B 56 16.255 -8.214 12.568 1.00 14.41 C +ATOM 1449 H VAL B 56 16.866 -11.733 11.281 1.00 15.00 H +ATOM 1450 N ARG B 57 20.168 -9.866 12.832 1.00 8.70 N +ATOM 1451 CA ARG B 57 21.337 -10.349 13.610 1.00 10.33 C +ATOM 1452 C ARG B 57 21.395 -9.718 14.992 1.00 10.16 C +ATOM 1453 O ARG B 57 21.362 -8.504 15.149 1.00 9.24 O +ATOM 1454 CB ARG B 57 22.727 -10.090 12.937 1.00 8.35 C +ATOM 1455 CG ARG B 57 22.713 -10.404 11.425 1.00 13.65 C +ATOM 1456 CD ARG B 57 24.024 -10.465 10.619 1.00 11.84 C +ATOM 1457 NE ARG B 57 24.804 -9.225 10.674 1.00 16.18 N +ATOM 1458 CZ ARG B 57 24.649 -8.242 9.749 1.00 22.99 C +ATOM 1459 NH1 ARG B 57 23.787 -8.366 8.737 1.00 24.07 N +ATOM 1460 NH2 ARG B 57 25.371 -7.121 9.840 1.00 19.42 N +ATOM 1461 H ARG B 57 20.044 -8.904 12.610 1.00 15.00 H +ATOM 1462 HE ARG B 57 25.451 -9.064 11.420 1.00 15.00 H +ATOM 1463 HH11 ARG B 57 23.234 -9.194 8.644 1.00 15.00 H +ATOM 1464 HH12 ARG B 57 23.691 -7.628 8.068 1.00 15.00 H +ATOM 1465 HH21 ARG B 57 26.017 -7.011 10.597 1.00 15.00 H +ATOM 1466 HH22 ARG B 57 25.270 -6.397 9.158 1.00 15.00 H +ATOM 1467 N GLN B 58 21.486 -10.570 15.988 1.00 7.03 N +ATOM 1468 CA GLN B 58 21.592 -10.082 17.357 1.00 10.22 C +ATOM 1469 C GLN B 58 22.996 -9.771 17.916 1.00 13.31 C +ATOM 1470 O GLN B 58 23.802 -10.678 18.113 1.00 16.89 O +ATOM 1471 CB GLN B 58 20.886 -11.120 18.237 1.00 12.64 C +ATOM 1472 CG GLN B 58 21.070 -10.886 19.729 1.00 17.77 C +ATOM 1473 CD GLN B 58 20.058 -11.736 20.440 1.00 25.70 C +ATOM 1474 OE1 GLN B 58 19.913 -12.907 20.192 1.00 33.64 O +ATOM 1475 NE2 GLN B 58 19.283 -11.126 21.315 1.00 30.17 N +ATOM 1476 H GLN B 58 21.408 -11.533 15.773 1.00 15.00 H +ATOM 1477 HE21 GLN B 58 18.621 -11.771 21.684 1.00 15.00 H +ATOM 1478 HE22 GLN B 58 19.338 -10.167 21.559 1.00 15.00 H +ATOM 1479 N TYR B 59 23.236 -8.475 18.241 1.00 11.16 N +ATOM 1480 CA TYR B 59 24.436 -8.173 19.042 1.00 7.33 C +ATOM 1481 C TYR B 59 24.160 -7.804 20.484 1.00 7.47 C +ATOM 1482 O TYR B 59 23.241 -7.060 20.840 1.00 10.58 O +ATOM 1483 CB TYR B 59 25.371 -7.105 18.436 1.00 4.61 C +ATOM 1484 CG TYR B 59 25.778 -7.327 16.992 1.00 2.00 C +ATOM 1485 CD1 TYR B 59 24.840 -7.147 15.954 1.00 3.44 C +ATOM 1486 CD2 TYR B 59 27.113 -7.657 16.698 1.00 2.40 C +ATOM 1487 CE1 TYR B 59 25.261 -7.249 14.608 1.00 7.27 C +ATOM 1488 CE2 TYR B 59 27.540 -7.767 15.353 1.00 2.54 C +ATOM 1489 CZ TYR B 59 26.618 -7.530 14.311 1.00 7.43 C +ATOM 1490 OH TYR B 59 27.042 -7.529 12.985 1.00 11.55 O +ATOM 1491 H TYR B 59 22.548 -7.789 17.999 1.00 15.00 H +ATOM 1492 HH TYR B 59 27.983 -7.657 12.954 1.00 15.00 H +ATOM 1493 N ASP B 60 25.010 -8.383 21.321 1.00 5.52 N +ATOM 1494 CA ASP B 60 24.952 -8.043 22.752 1.00 11.07 C +ATOM 1495 C ASP B 60 25.991 -7.060 23.263 1.00 13.43 C +ATOM 1496 O ASP B 60 27.047 -6.935 22.676 1.00 20.73 O +ATOM 1497 CB ASP B 60 25.082 -9.282 23.617 1.00 15.28 C +ATOM 1498 CG ASP B 60 23.954 -10.241 23.296 1.00 18.44 C +ATOM 1499 OD1 ASP B 60 22.860 -9.744 23.015 1.00 16.85 O +ATOM 1500 OD2 ASP B 60 24.181 -11.465 23.320 1.00 19.95 O +ATOM 1501 H ASP B 60 25.741 -8.939 20.927 1.00 15.00 H +ATOM 1502 N GLN B 61 25.680 -6.359 24.359 1.00 11.99 N +ATOM 1503 CA GLN B 61 26.655 -5.387 24.929 1.00 14.03 C +ATOM 1504 C GLN B 61 27.100 -4.131 24.148 1.00 12.65 C +ATOM 1505 O GLN B 61 28.092 -3.460 24.385 1.00 9.03 O +ATOM 1506 CB GLN B 61 27.843 -6.114 25.593 1.00 24.34 C +ATOM 1507 CG GLN B 61 27.531 -6.962 26.835 1.00 35.39 C +ATOM 1508 CD GLN B 61 26.983 -6.063 27.946 1.00 47.74 C +ATOM 1509 OE1 GLN B 61 26.140 -5.195 27.786 1.00 51.02 O +ATOM 1510 NE2 GLN B 61 27.471 -6.306 29.148 1.00 55.07 N +ATOM 1511 H GLN B 61 24.795 -6.513 24.791 1.00 15.00 H +ATOM 1512 HE21 GLN B 61 27.031 -5.678 29.788 1.00 15.00 H +ATOM 1513 HE22 GLN B 61 28.160 -6.986 29.364 1.00 15.00 H +ATOM 1514 N ILE B 62 26.251 -3.796 23.179 1.00 15.70 N +ATOM 1515 CA ILE B 62 26.481 -2.555 22.443 1.00 12.03 C +ATOM 1516 C ILE B 62 26.180 -1.354 23.300 1.00 14.39 C +ATOM 1517 O ILE B 62 25.092 -1.272 23.856 1.00 12.23 O +ATOM 1518 CB ILE B 62 25.600 -2.457 21.182 1.00 5.49 C +ATOM 1519 CG1 ILE B 62 25.559 -3.776 20.432 1.00 5.59 C +ATOM 1520 CG2 ILE B 62 26.128 -1.327 20.278 1.00 3.31 C +ATOM 1521 CD1 ILE B 62 26.921 -4.324 19.958 1.00 7.41 C +ATOM 1522 H ILE B 62 25.381 -4.278 23.102 1.00 15.00 H +ATOM 1523 N PRO B 63 27.164 -0.428 23.385 1.00 15.61 N +ATOM 1524 CA PRO B 63 26.906 0.898 23.941 1.00 13.48 C +ATOM 1525 C PRO B 63 26.293 1.795 22.909 1.00 13.82 C +ATOM 1526 O PRO B 63 26.734 1.853 21.766 1.00 15.11 O +ATOM 1527 CB PRO B 63 28.303 1.391 24.340 1.00 14.26 C +ATOM 1528 CG PRO B 63 29.197 0.154 24.279 1.00 19.67 C +ATOM 1529 CD PRO B 63 28.572 -0.618 23.111 1.00 19.48 C +ATOM 1530 N VAL B 64 25.233 2.488 23.357 1.00 14.77 N +ATOM 1531 CA VAL B 64 24.634 3.508 22.485 1.00 13.40 C +ATOM 1532 C VAL B 64 24.339 4.803 23.230 1.00 15.46 C +ATOM 1533 O VAL B 64 23.944 4.810 24.387 1.00 16.60 O +ATOM 1534 CB VAL B 64 23.501 2.988 21.503 1.00 11.21 C +ATOM 1535 CG1 VAL B 64 22.926 1.611 21.779 1.00 3.55 C +ATOM 1536 CG2 VAL B 64 22.439 4.014 21.112 1.00 8.00 C +ATOM 1537 H VAL B 64 24.918 2.327 24.293 1.00 15.00 H +ATOM 1538 N GLU B 65 24.606 5.911 22.539 1.00 16.43 N +ATOM 1539 CA GLU B 65 24.175 7.152 23.161 1.00 18.66 C +ATOM 1540 C GLU B 65 22.979 7.838 22.511 1.00 19.98 C +ATOM 1541 O GLU B 65 22.969 8.218 21.351 1.00 20.05 O +ATOM 1542 CB GLU B 65 25.336 8.115 23.378 1.00 21.70 C +ATOM 1543 CG GLU B 65 24.919 9.208 24.341 1.00 29.65 C +ATOM 1544 CD GLU B 65 26.083 10.070 24.736 1.00 36.74 C +ATOM 1545 OE1 GLU B 65 26.320 11.055 24.038 1.00 38.38 O +ATOM 1546 OE2 GLU B 65 26.723 9.772 25.754 1.00 42.36 O +ATOM 1547 H GLU B 65 25.013 5.841 21.629 1.00 15.00 H +ATOM 1548 N ILE B 66 21.940 7.962 23.333 1.00 18.67 N +ATOM 1549 CA ILE B 66 20.655 8.450 22.838 1.00 21.20 C +ATOM 1550 C ILE B 66 20.204 9.728 23.515 1.00 22.01 C +ATOM 1551 O ILE B 66 20.030 9.800 24.731 1.00 17.93 O +ATOM 1552 CB ILE B 66 19.633 7.322 22.954 1.00 29.17 C +ATOM 1553 CG1 ILE B 66 18.184 7.765 22.953 1.00 29.67 C +ATOM 1554 CG2 ILE B 66 19.883 6.414 24.176 1.00 36.07 C +ATOM 1555 CD1 ILE B 66 17.378 6.470 22.919 1.00 37.39 C +ATOM 1556 H ILE B 66 22.084 7.662 24.277 1.00 15.00 H +ATOM 1557 N CYS B 67 20.130 10.773 22.653 1.00 21.67 N +ATOM 1558 CA CYS B 67 19.868 12.129 23.183 1.00 24.86 C +ATOM 1559 C CYS B 67 20.683 12.628 24.398 1.00 27.18 C +ATOM 1560 O CYS B 67 20.158 13.217 25.331 1.00 32.07 O +ATOM 1561 CB CYS B 67 18.379 12.323 23.536 1.00 26.01 C +ATOM 1562 SG CYS B 67 17.441 13.262 22.312 1.00 31.34 S +ATOM 1563 H CYS B 67 20.189 10.569 21.672 1.00 15.00 H +ATOM 1564 N GLY B 68 21.999 12.356 24.407 1.00 25.32 N +ATOM 1565 CA GLY B 68 22.716 12.679 25.663 1.00 19.59 C +ATOM 1566 C GLY B 68 22.794 11.604 26.757 1.00 19.67 C +ATOM 1567 O GLY B 68 23.457 11.726 27.772 1.00 20.47 O +ATOM 1568 H GLY B 68 22.406 11.891 23.626 1.00 15.00 H +ATOM 1569 N HIS B 69 22.110 10.491 26.512 1.00 19.22 N +ATOM 1570 CA HIS B 69 22.143 9.499 27.575 1.00 21.19 C +ATOM 1571 C HIS B 69 22.852 8.196 27.168 1.00 23.33 C +ATOM 1572 O HIS B 69 22.624 7.632 26.113 1.00 25.34 O +ATOM 1573 CB HIS B 69 20.703 9.191 28.092 1.00 25.56 C +ATOM 1574 CG HIS B 69 19.843 10.386 28.515 1.00 28.62 C +ATOM 1575 ND1 HIS B 69 19.325 10.554 29.754 1.00 28.41 N +ATOM 1576 CD2 HIS B 69 19.453 11.490 27.750 1.00 30.83 C +ATOM 1577 CE1 HIS B 69 18.641 11.738 29.777 1.00 30.39 C +ATOM 1578 NE2 HIS B 69 18.726 12.315 28.538 1.00 33.59 N +ATOM 1579 H HIS B 69 21.463 10.446 25.757 1.00 15.00 H +ATOM 1580 HD1 HIS B 69 19.357 9.932 30.504 1.00 15.00 H +ATOM 1581 N LYS B 70 23.683 7.692 28.070 1.00 26.10 N +ATOM 1582 CA LYS B 70 24.147 6.296 27.941 1.00 26.44 C +ATOM 1583 C LYS B 70 23.153 5.138 28.154 1.00 24.20 C +ATOM 1584 O LYS B 70 22.630 4.904 29.238 1.00 22.46 O +ATOM 1585 CB LYS B 70 25.305 5.947 28.897 1.00 32.97 C +ATOM 1586 CG LYS B 70 25.920 7.049 29.766 1.00 45.39 C +ATOM 1587 CD LYS B 70 27.070 7.863 29.144 1.00 55.83 C +ATOM 1588 CE LYS B 70 27.628 8.851 30.192 1.00 61.60 C +ATOM 1589 NZ LYS B 70 29.049 9.144 29.936 1.00 66.82 N +ATOM 1590 H LYS B 70 23.780 8.222 28.908 1.00 15.00 H +ATOM 1591 HZ1 LYS B 70 29.401 8.506 29.193 1.00 15.00 H +ATOM 1592 HZ2 LYS B 70 29.168 10.130 29.630 1.00 15.00 H +ATOM 1593 HZ3 LYS B 70 29.597 8.979 30.806 1.00 15.00 H +ATOM 1594 N ALA B 71 23.009 4.349 27.090 1.00 21.63 N +ATOM 1595 CA ALA B 71 22.576 2.978 27.368 1.00 18.01 C +ATOM 1596 C ALA B 71 23.596 1.930 26.894 1.00 16.20 C +ATOM 1597 O ALA B 71 24.524 2.199 26.131 1.00 17.84 O +ATOM 1598 CB ALA B 71 21.223 2.724 26.702 1.00 15.87 C +ATOM 1599 H ALA B 71 23.336 4.643 26.191 1.00 15.00 H +ATOM 1600 N ILE B 72 23.382 0.708 27.363 1.00 13.59 N +ATOM 1601 CA ILE B 72 24.104 -0.478 26.873 1.00 15.46 C +ATOM 1602 C ILE B 72 23.229 -1.722 26.797 1.00 13.71 C +ATOM 1603 O ILE B 72 22.621 -2.213 27.750 1.00 16.33 O +ATOM 1604 CB ILE B 72 25.348 -0.855 27.715 1.00 20.10 C +ATOM 1605 CG1 ILE B 72 26.167 0.377 28.088 1.00 26.26 C +ATOM 1606 CG2 ILE B 72 26.252 -1.857 26.968 1.00 20.07 C +ATOM 1607 CD1 ILE B 72 27.266 0.065 29.097 1.00 32.25 C +ATOM 1608 H ILE B 72 22.708 0.658 28.101 1.00 15.00 H +ATOM 1609 N GLY B 73 23.201 -2.239 25.596 1.00 11.67 N +ATOM 1610 CA GLY B 73 22.655 -3.574 25.482 1.00 8.87 C +ATOM 1611 C GLY B 73 22.522 -4.085 24.067 1.00 6.58 C +ATOM 1612 O GLY B 73 23.303 -3.787 23.177 1.00 5.20 O +ATOM 1613 H GLY B 73 23.670 -1.766 24.857 1.00 15.00 H +ATOM 1614 N THR B 74 21.478 -4.898 23.926 1.00 6.84 N +ATOM 1615 CA THR B 74 21.186 -5.594 22.663 1.00 11.08 C +ATOM 1616 C THR B 74 20.493 -4.851 21.500 1.00 14.36 C +ATOM 1617 O THR B 74 19.344 -4.398 21.562 1.00 14.96 O +ATOM 1618 CB THR B 74 20.471 -6.889 23.036 1.00 8.01 C +ATOM 1619 OG1 THR B 74 21.331 -7.561 23.970 1.00 8.78 O +ATOM 1620 CG2 THR B 74 20.123 -7.812 21.873 1.00 3.87 C +ATOM 1621 H THR B 74 20.903 -5.031 24.731 1.00 15.00 H +ATOM 1622 HG1 THR B 74 22.051 -7.890 23.448 1.00 15.00 H +ATOM 1623 N VAL B 75 21.280 -4.770 20.393 1.00 14.46 N +ATOM 1624 CA VAL B 75 20.635 -4.294 19.154 1.00 10.05 C +ATOM 1625 C VAL B 75 20.396 -5.411 18.134 1.00 11.79 C +ATOM 1626 O VAL B 75 21.175 -6.357 18.057 1.00 16.56 O +ATOM 1627 CB VAL B 75 21.386 -3.109 18.544 1.00 5.97 C +ATOM 1628 CG1 VAL B 75 21.650 -2.004 19.576 1.00 2.00 C +ATOM 1629 CG2 VAL B 75 22.664 -3.549 17.855 1.00 7.87 C +ATOM 1630 H VAL B 75 22.195 -5.175 20.425 1.00 15.00 H +ATOM 1631 N LEU B 76 19.274 -5.301 17.401 1.00 6.91 N +ATOM 1632 CA LEU B 76 19.017 -6.238 16.306 1.00 3.96 C +ATOM 1633 C LEU B 76 19.276 -5.547 14.995 1.00 5.63 C +ATOM 1634 O LEU B 76 18.674 -4.505 14.789 1.00 6.81 O +ATOM 1635 CB LEU B 76 17.553 -6.658 16.291 1.00 5.49 C +ATOM 1636 CG LEU B 76 17.041 -7.743 17.238 1.00 6.70 C +ATOM 1637 CD1 LEU B 76 17.919 -8.081 18.439 1.00 9.14 C +ATOM 1638 CD2 LEU B 76 15.677 -7.341 17.731 1.00 3.57 C +ATOM 1639 H LEU B 76 18.652 -4.536 17.575 1.00 15.00 H +ATOM 1640 N VAL B 77 20.185 -6.095 14.140 1.00 9.13 N +ATOM 1641 CA VAL B 77 20.380 -5.444 12.823 1.00 5.95 C +ATOM 1642 C VAL B 77 19.859 -6.220 11.609 1.00 8.66 C +ATOM 1643 O VAL B 77 19.810 -7.436 11.611 1.00 12.59 O +ATOM 1644 CB VAL B 77 21.782 -4.796 12.651 1.00 7.05 C +ATOM 1645 CG1 VAL B 77 22.481 -4.562 14.004 1.00 6.71 C +ATOM 1646 CG2 VAL B 77 22.699 -5.406 11.601 1.00 4.38 C +ATOM 1647 H VAL B 77 20.697 -6.896 14.446 1.00 15.00 H +ATOM 1648 N GLY B 78 19.381 -5.499 10.595 1.00 8.15 N +ATOM 1649 CA GLY B 78 18.603 -6.169 9.534 1.00 3.81 C +ATOM 1650 C GLY B 78 17.921 -5.111 8.659 1.00 5.65 C +ATOM 1651 O GLY B 78 18.077 -3.923 8.917 1.00 5.08 O +ATOM 1652 H GLY B 78 19.401 -4.503 10.690 1.00 15.00 H +ATOM 1653 N PRO B 79 17.158 -5.518 7.614 1.00 5.18 N +ATOM 1654 CA PRO B 79 16.657 -4.546 6.644 1.00 2.92 C +ATOM 1655 C PRO B 79 15.390 -3.757 7.007 1.00 9.24 C +ATOM 1656 O PRO B 79 14.341 -3.835 6.391 1.00 14.52 O +ATOM 1657 CB PRO B 79 16.548 -5.391 5.396 1.00 2.02 C +ATOM 1658 CG PRO B 79 16.054 -6.736 5.949 1.00 2.52 C +ATOM 1659 CD PRO B 79 16.794 -6.881 7.274 1.00 4.34 C +ATOM 1660 N THR B 80 15.532 -2.889 8.004 1.00 10.43 N +ATOM 1661 CA THR B 80 14.414 -1.968 8.250 1.00 10.86 C +ATOM 1662 C THR B 80 14.497 -0.600 7.557 1.00 13.07 C +ATOM 1663 O THR B 80 15.558 0.016 7.484 1.00 19.01 O +ATOM 1664 CB THR B 80 14.277 -1.755 9.751 1.00 9.00 C +ATOM 1665 OG1 THR B 80 13.272 -0.766 10.037 1.00 10.99 O +ATOM 1666 CG2 THR B 80 15.638 -1.318 10.308 1.00 12.20 C +ATOM 1667 H THR B 80 16.405 -2.887 8.491 1.00 15.00 H +ATOM 1668 HG1 THR B 80 13.456 -0.448 10.925 1.00 15.00 H +ATOM 1669 N PRO B 81 13.357 -0.063 7.046 1.00 12.42 N +ATOM 1670 CA PRO B 81 13.412 1.341 6.572 1.00 13.21 C +ATOM 1671 C PRO B 81 13.581 2.406 7.662 1.00 12.96 C +ATOM 1672 O PRO B 81 13.811 3.579 7.400 1.00 11.59 O +ATOM 1673 CB PRO B 81 12.105 1.495 5.796 1.00 11.64 C +ATOM 1674 CG PRO B 81 11.143 0.471 6.400 1.00 8.50 C +ATOM 1675 CD PRO B 81 12.053 -0.684 6.808 1.00 11.98 C +ATOM 1676 N VAL B 82 13.446 1.928 8.912 1.00 13.68 N +ATOM 1677 CA VAL B 82 13.561 2.838 10.064 1.00 13.36 C +ATOM 1678 C VAL B 82 14.236 2.271 11.334 1.00 13.68 C +ATOM 1679 O VAL B 82 14.088 1.127 11.760 1.00 16.22 O +ATOM 1680 CB VAL B 82 12.166 3.484 10.323 1.00 14.41 C +ATOM 1681 CG1 VAL B 82 11.063 2.448 10.552 1.00 15.43 C +ATOM 1682 CG2 VAL B 82 12.195 4.590 11.382 1.00 11.95 C +ATOM 1683 H VAL B 82 13.191 0.971 9.049 1.00 15.00 H +ATOM 1684 N ASN B 83 15.025 3.157 11.932 1.00 12.01 N +ATOM 1685 CA ASN B 83 15.666 2.791 13.194 1.00 10.29 C +ATOM 1686 C ASN B 83 14.749 2.975 14.382 1.00 10.32 C +ATOM 1687 O ASN B 83 14.326 4.076 14.683 1.00 10.57 O +ATOM 1688 CB ASN B 83 16.893 3.665 13.454 1.00 12.27 C +ATOM 1689 CG ASN B 83 18.006 3.484 12.423 1.00 15.73 C +ATOM 1690 OD1 ASN B 83 18.331 2.413 11.945 1.00 15.61 O +ATOM 1691 ND2 ASN B 83 18.625 4.608 12.090 1.00 14.21 N +ATOM 1692 H ASN B 83 15.112 4.055 11.508 1.00 15.00 H +ATOM 1693 HD21 ASN B 83 19.364 4.496 11.434 1.00 15.00 H +ATOM 1694 HD22 ASN B 83 18.324 5.482 12.478 1.00 15.00 H +ATOM 1695 N ILE B 84 14.477 1.868 15.060 1.00 9.64 N +ATOM 1696 CA ILE B 84 13.566 1.901 16.204 1.00 6.41 C +ATOM 1697 C ILE B 84 14.247 1.541 17.523 1.00 4.30 C +ATOM 1698 O ILE B 84 14.832 0.478 17.661 1.00 2.00 O +ATOM 1699 CB ILE B 84 12.385 0.935 15.879 1.00 10.02 C +ATOM 1700 CG1 ILE B 84 11.366 1.514 14.928 1.00 8.83 C +ATOM 1701 CG2 ILE B 84 11.566 0.418 17.051 1.00 13.45 C +ATOM 1702 CD1 ILE B 84 10.834 0.320 14.179 1.00 13.89 C +ATOM 1703 H ILE B 84 14.881 1.013 14.728 1.00 15.00 H +ATOM 1704 N ILE B 85 14.100 2.481 18.481 1.00 2.41 N +ATOM 1705 CA ILE B 85 14.438 2.258 19.883 1.00 2.00 C +ATOM 1706 C ILE B 85 13.254 1.658 20.664 1.00 4.79 C +ATOM 1707 O ILE B 85 12.239 2.291 20.911 1.00 7.52 O +ATOM 1708 CB ILE B 85 14.902 3.586 20.555 1.00 2.00 C +ATOM 1709 CG1 ILE B 85 16.010 4.266 19.743 1.00 5.76 C +ATOM 1710 CG2 ILE B 85 15.426 3.416 22.009 1.00 2.00 C +ATOM 1711 CD1 ILE B 85 17.379 3.572 19.680 1.00 2.00 C +ATOM 1712 H ILE B 85 13.583 3.301 18.224 1.00 15.00 H +ATOM 1713 N GLY B 86 13.433 0.396 21.043 1.00 5.77 N +ATOM 1714 CA GLY B 86 12.423 -0.340 21.815 1.00 2.16 C +ATOM 1715 C GLY B 86 12.550 -0.181 23.328 1.00 4.53 C +ATOM 1716 O GLY B 86 13.503 0.392 23.860 1.00 6.76 O +ATOM 1717 H GLY B 86 14.339 0.022 20.849 1.00 15.00 H +ATOM 1718 N ARG B 87 11.557 -0.749 24.017 1.00 3.38 N +ATOM 1719 CA ARG B 87 11.510 -0.755 25.479 1.00 2.44 C +ATOM 1720 C ARG B 87 12.725 -1.248 26.266 1.00 5.65 C +ATOM 1721 O ARG B 87 12.956 -0.806 27.381 1.00 13.25 O +ATOM 1722 CB ARG B 87 10.290 -1.528 25.906 1.00 7.47 C +ATOM 1723 CG ARG B 87 8.917 -0.959 25.491 1.00 8.87 C +ATOM 1724 CD ARG B 87 7.801 -2.039 25.487 1.00 7.94 C +ATOM 1725 NE ARG B 87 7.774 -2.654 26.794 1.00 5.94 N +ATOM 1726 CZ ARG B 87 8.189 -3.922 26.991 1.00 6.37 C +ATOM 1727 NH1 ARG B 87 8.179 -4.849 26.041 1.00 2.00 N +ATOM 1728 NH2 ARG B 87 8.637 -4.237 28.197 1.00 10.76 N +ATOM 1729 H ARG B 87 10.767 -1.026 23.480 1.00 15.00 H +ATOM 1730 HE ARG B 87 7.682 -2.071 27.601 1.00 15.00 H +ATOM 1731 HH11 ARG B 87 7.853 -4.627 25.123 1.00 15.00 H +ATOM 1732 HH12 ARG B 87 8.503 -5.772 26.246 1.00 15.00 H +ATOM 1733 HH21 ARG B 87 8.653 -3.541 28.915 1.00 15.00 H +ATOM 1734 HH22 ARG B 87 8.959 -5.165 28.391 1.00 15.00 H +ATOM 1735 N ASN B 88 13.552 -2.137 25.667 1.00 4.58 N +ATOM 1736 CA ASN B 88 14.830 -2.535 26.304 1.00 4.31 C +ATOM 1737 C ASN B 88 15.915 -1.471 26.592 1.00 6.99 C +ATOM 1738 O ASN B 88 16.718 -1.548 27.513 1.00 10.50 O +ATOM 1739 CB ASN B 88 15.458 -3.730 25.561 1.00 2.00 C +ATOM 1740 CG ASN B 88 16.103 -3.340 24.263 1.00 4.25 C +ATOM 1741 OD1 ASN B 88 15.559 -2.581 23.473 1.00 6.48 O +ATOM 1742 ND2 ASN B 88 17.308 -3.865 24.045 1.00 2.00 N +ATOM 1743 H ASN B 88 13.264 -2.501 24.783 1.00 15.00 H +ATOM 1744 HD21 ASN B 88 17.747 -3.648 23.174 1.00 15.00 H +ATOM 1745 HD22 ASN B 88 17.759 -4.444 24.722 1.00 15.00 H +ATOM 1746 N LEU B 89 15.903 -0.476 25.702 1.00 6.35 N +ATOM 1747 CA LEU B 89 16.787 0.686 25.809 1.00 2.00 C +ATOM 1748 C LEU B 89 16.077 1.846 26.476 1.00 2.18 C +ATOM 1749 O LEU B 89 16.600 2.478 27.382 1.00 4.96 O +ATOM 1750 CB LEU B 89 17.326 1.021 24.395 1.00 3.14 C +ATOM 1751 CG LEU B 89 18.799 0.609 24.116 1.00 4.86 C +ATOM 1752 CD1 LEU B 89 19.161 -0.777 24.667 1.00 8.03 C +ATOM 1753 CD2 LEU B 89 19.205 0.739 22.651 1.00 2.06 C +ATOM 1754 H LEU B 89 15.259 -0.599 24.942 1.00 15.00 H +ATOM 1755 N LEU B 90 14.800 2.061 26.082 1.00 6.66 N +ATOM 1756 CA LEU B 90 13.932 3.133 26.689 1.00 6.20 C +ATOM 1757 C LEU B 90 13.854 3.200 28.214 1.00 4.35 C +ATOM 1758 O LEU B 90 13.775 4.235 28.869 1.00 5.39 O +ATOM 1759 CB LEU B 90 12.465 3.015 26.184 1.00 8.53 C +ATOM 1760 CG LEU B 90 11.936 3.857 24.981 1.00 5.53 C +ATOM 1761 CD1 LEU B 90 13.007 4.601 24.193 1.00 2.00 C +ATOM 1762 CD2 LEU B 90 10.944 3.065 24.112 1.00 3.50 C +ATOM 1763 H LEU B 90 14.483 1.528 25.293 1.00 15.00 H +ATOM 1764 N THR B 91 13.883 2.005 28.787 1.00 5.72 N +ATOM 1765 CA THR B 91 13.936 2.005 30.248 1.00 8.62 C +ATOM 1766 C THR B 91 15.238 2.497 30.906 1.00 12.11 C +ATOM 1767 O THR B 91 15.268 3.135 31.946 1.00 12.10 O +ATOM 1768 CB THR B 91 13.563 0.625 30.757 1.00 8.36 C +ATOM 1769 OG1 THR B 91 14.488 -0.364 30.335 1.00 9.15 O +ATOM 1770 CG2 THR B 91 12.176 0.247 30.265 1.00 2.92 C +ATOM 1771 H THR B 91 13.883 1.154 28.259 1.00 15.00 H +ATOM 1772 HG1 THR B 91 13.997 -1.180 30.314 1.00 15.00 H +ATOM 1773 N GLN B 92 16.343 2.259 30.192 1.00 13.30 N +ATOM 1774 CA GLN B 92 17.639 2.763 30.654 1.00 13.01 C +ATOM 1775 C GLN B 92 17.807 4.289 30.707 1.00 16.58 C +ATOM 1776 O GLN B 92 18.555 4.840 31.504 1.00 21.33 O +ATOM 1777 CB GLN B 92 18.749 2.149 29.811 1.00 11.12 C +ATOM 1778 CG GLN B 92 18.915 0.652 30.094 1.00 7.58 C +ATOM 1779 CD GLN B 92 20.064 0.116 29.278 1.00 7.51 C +ATOM 1780 OE1 GLN B 92 21.087 0.737 29.085 1.00 9.84 O +ATOM 1781 NE2 GLN B 92 19.884 -1.074 28.761 1.00 6.92 N +ATOM 1782 H GLN B 92 16.253 1.748 29.339 1.00 15.00 H +ATOM 1783 HE21 GLN B 92 20.713 -1.454 28.349 1.00 15.00 H +ATOM 1784 HE22 GLN B 92 18.987 -1.510 28.793 1.00 15.00 H +ATOM 1785 N ILE B 93 17.045 4.968 29.837 1.00 12.87 N +ATOM 1786 CA ILE B 93 17.188 6.422 29.880 1.00 11.98 C +ATOM 1787 C ILE B 93 16.200 7.226 30.748 1.00 15.56 C +ATOM 1788 O ILE B 93 16.194 8.452 30.763 1.00 18.42 O +ATOM 1789 CB ILE B 93 17.265 6.997 28.459 1.00 13.13 C +ATOM 1790 CG1 ILE B 93 15.894 6.880 27.787 1.00 8.28 C +ATOM 1791 CG2 ILE B 93 18.397 6.268 27.707 1.00 11.44 C +ATOM 1792 CD1 ILE B 93 15.838 7.301 26.320 1.00 2.00 C +ATOM 1793 H ILE B 93 16.524 4.453 29.159 1.00 15.00 H +ATOM 1794 N GLY B 94 15.333 6.473 31.472 1.00 18.70 N +ATOM 1795 CA GLY B 94 14.292 7.114 32.314 1.00 15.92 C +ATOM 1796 C GLY B 94 12.929 7.432 31.657 1.00 20.12 C +ATOM 1797 O GLY B 94 12.145 8.270 32.096 1.00 21.88 O +ATOM 1798 H GLY B 94 15.472 5.483 31.470 1.00 15.00 H +ATOM 1799 N CYS B 95 12.677 6.696 30.551 1.00 17.65 N +ATOM 1800 CA CYS B 95 11.518 7.078 29.755 1.00 13.90 C +ATOM 1801 C CYS B 95 10.172 6.552 30.232 1.00 15.16 C +ATOM 1802 O CYS B 95 9.972 5.378 30.537 1.00 15.03 O +ATOM 1803 CB CYS B 95 11.751 6.682 28.326 1.00 17.96 C +ATOM 1804 SG CYS B 95 10.719 7.651 27.244 1.00 24.85 S +ATOM 1805 H CYS B 95 13.302 5.956 30.306 1.00 15.00 H +ATOM 1806 N THR B 96 9.255 7.512 30.304 1.00 14.17 N +ATOM 1807 CA THR B 96 7.892 7.277 30.822 1.00 10.50 C +ATOM 1808 C THR B 96 6.703 7.772 29.924 1.00 10.86 C +ATOM 1809 O THR B 96 6.776 8.715 29.137 1.00 10.68 O +ATOM 1810 CB THR B 96 7.876 7.836 32.244 1.00 7.42 C +ATOM 1811 OG1 THR B 96 7.122 7.049 33.131 1.00 18.33 O +ATOM 1812 CG2 THR B 96 7.423 9.268 32.346 1.00 7.05 C +ATOM 1813 H THR B 96 9.595 8.433 30.102 1.00 15.00 H +ATOM 1814 HG1 THR B 96 7.076 7.573 33.926 1.00 15.00 H +ATOM 1815 N LEU B 97 5.572 7.068 30.017 1.00 12.50 N +ATOM 1816 CA LEU B 97 4.381 7.555 29.292 1.00 9.08 C +ATOM 1817 C LEU B 97 3.341 8.244 30.248 1.00 10.28 C +ATOM 1818 O LEU B 97 2.995 7.752 31.323 1.00 4.98 O +ATOM 1819 CB LEU B 97 3.930 6.335 28.456 1.00 6.81 C +ATOM 1820 CG LEU B 97 2.975 6.301 27.249 1.00 2.00 C +ATOM 1821 CD1 LEU B 97 3.278 7.121 25.993 1.00 2.00 C +ATOM 1822 CD2 LEU B 97 3.030 4.874 26.782 1.00 2.00 C +ATOM 1823 H LEU B 97 5.557 6.271 30.624 1.00 15.00 H +ATOM 1824 N ASN B 98 2.906 9.456 29.840 1.00 11.81 N +ATOM 1825 CA ASN B 98 2.027 10.258 30.712 1.00 14.60 C +ATOM 1826 C ASN B 98 0.815 10.898 30.041 1.00 17.08 C +ATOM 1827 O ASN B 98 0.770 11.025 28.820 1.00 16.80 O +ATOM 1828 CB ASN B 98 2.741 11.428 31.309 1.00 15.57 C +ATOM 1829 CG ASN B 98 3.799 10.997 32.279 1.00 18.53 C +ATOM 1830 OD1 ASN B 98 4.988 11.013 32.015 1.00 14.88 O +ATOM 1831 ND2 ASN B 98 3.330 10.741 33.486 1.00 17.86 N +ATOM 1832 H ASN B 98 3.227 9.802 28.954 1.00 15.00 H +ATOM 1833 HD21 ASN B 98 4.036 10.609 34.175 1.00 15.00 H +ATOM 1834 HD22 ASN B 98 2.344 10.686 33.628 1.00 15.00 H +ATOM 1835 N PHE B 99 -0.104 11.294 30.941 1.00 20.23 N +ATOM 1836 CA PHE B 99 -1.522 10.899 31.041 1.00 20.55 C +ATOM 1837 C PHE B 99 -2.234 11.277 32.355 1.00 15.56 C +ATOM 1838 O PHE B 99 -3.448 11.150 32.489 0.00 16.69 O +ATOM 1839 CB PHE B 99 -2.373 11.019 29.759 1.00 22.25 C +ATOM 1840 CG PHE B 99 -2.820 9.586 29.541 1.00 25.51 C +ATOM 1841 CD1 PHE B 99 -1.892 8.647 29.026 1.00 25.13 C +ATOM 1842 CD2 PHE B 99 -4.113 9.170 29.940 1.00 28.47 C +ATOM 1843 CE1 PHE B 99 -2.222 7.274 28.976 1.00 21.04 C +ATOM 1844 CE2 PHE B 99 -4.446 7.799 29.894 1.00 25.86 C +ATOM 1845 CZ PHE B 99 -3.488 6.863 29.441 1.00 24.17 C +ATOM 1846 OXT PHE B 99 -1.554 11.525 33.354 0.00 16.69 O +ATOM 1847 H PHE B 99 0.193 11.604 31.840 1.00 15.00 H +TER 1848 PHE B 99 +HETATM 1849 C1 ARQ A 401 1.474 1.321 11.354 1.00 10.36 C +HETATM 1850 C2 ARQ A 401 0.562 0.252 12.036 1.00 10.59 C +HETATM 1851 C3 ARQ A 401 0.675 2.633 11.410 1.00 7.58 C +HETATM 1852 C4 ARQ A 401 1.852 1.006 9.891 1.00 4.50 C +HETATM 1853 O4 ARQ A 401 2.664 1.554 12.108 1.00 13.55 O +HETATM 1854 C30 ARQ A 401 3.511 0.571 12.400 1.00 11.18 C +HETATM 1855 O3 ARQ A 401 3.399 -0.533 11.970 1.00 9.15 O +HETATM 1856 N1 ARQ A 401 4.497 0.994 13.193 1.00 11.89 N +HETATM 1857 C5 ARQ A 401 5.716 0.269 13.558 1.00 14.02 C +HETATM 1858 C6 ARQ A 401 6.953 1.163 13.346 1.00 9.73 C +HETATM 1859 C7 ARQ A 401 6.975 1.824 11.998 1.00 9.34 C +HETATM 1860 C8 ARQ A 401 6.815 1.051 10.826 1.00 8.95 C +HETATM 1861 C9 ARQ A 401 6.791 1.701 9.574 1.00 6.26 C +HETATM 1862 C10 ARQ A 401 6.927 3.110 9.519 1.00 5.40 C +HETATM 1863 C11 ARQ A 401 7.114 3.232 11.941 1.00 8.18 C +HETATM 1864 C12 ARQ A 401 7.085 3.888 10.692 1.00 5.52 C +HETATM 1865 C13 ARQ A 401 5.642 -0.319 14.998 1.00 12.77 C +HETATM 1866 O1 ARQ A 401 5.248 0.651 15.980 1.00 8.69 O +HETATM 1867 C14 ARQ A 401 4.669 -1.525 15.008 1.00 14.15 C +HETATM 1868 N2 ARQ A 401 4.998 -2.669 15.910 1.00 16.35 N +HETATM 1869 C22 ARQ A 401 5.441 -2.219 17.249 1.00 15.50 C +HETATM 1870 C15 ARQ A 401 3.718 -3.441 16.024 1.00 12.33 C +HETATM 1871 C16 ARQ A 401 3.724 -4.695 16.883 1.00 6.95 C +HETATM 1872 C17 ARQ A 401 4.055 -5.940 16.308 1.00 9.51 C +HETATM 1873 C18 ARQ A 401 4.162 -7.106 17.109 1.00 9.70 C +HETATM 1874 C19 ARQ A 401 3.957 -7.006 18.505 1.00 3.77 C +HETATM 1875 C20 ARQ A 401 3.386 -4.632 18.248 1.00 8.21 C +HETATM 1876 C21 ARQ A 401 3.502 -5.791 19.063 1.00 7.45 C +HETATM 1877 N3 ARQ A 401 6.121 -3.333 15.291 1.00 13.41 N +HETATM 1878 C23 ARQ A 401 6.067 -4.033 14.140 1.00 20.01 C +HETATM 1879 O2 ARQ A 401 5.015 -4.224 13.523 1.00 22.49 O +HETATM 1880 C27 ARQ A 401 7.360 -4.579 13.674 1.00 23.08 C +HETATM 1881 C26 ARQ A 401 7.343 -5.490 12.582 1.00 23.69 C +HETATM 1882 C25 ARQ A 401 8.521 -6.101 12.123 1.00 18.68 C +HETATM 1883 C24 ARQ A 401 9.714 -5.796 12.796 1.00 19.95 C +HETATM 1884 C28 ARQ A 401 8.593 -4.222 14.279 1.00 25.64 C +HETATM 1885 C29 ARQ A 401 9.781 -4.839 13.838 1.00 23.32 C +HETATM 1886 HN1 ARQ A 401 4.325 1.941 13.433 0.00 0.00 H +HETATM 1887 H5 ARQ A 401 5.812 -0.555 12.861 0.00 0.00 H +HETATM 1888 H13 ARQ A 401 6.691 -0.707 15.134 0.00 0.00 H +HETATM 1889 HO1 ARQ A 401 4.272 0.697 16.063 0.00 0.00 H +HETATM 1890 HN3 ARQ A 401 7.032 -3.144 15.636 0.00 0.00 H +HETATM 1891 O HOH A 402 5.120 -2.430 11.475 1.00 17.90 O +HETATM 1892 H1 HOH A 402 4.703 -2.628 12.329 0.00 20.00 H +HETATM 1893 H2 HOH A 402 4.811 -1.521 11.387 0.00 20.00 H +HETATM 1894 O HOH A 403 8.333 -4.450 17.823 1.00 17.83 O +HETATM 1895 H1 HOH A 403 8.259 -3.544 17.504 0.00 20.00 H +HETATM 1896 H2 HOH A 403 7.430 -4.770 17.707 0.00 20.00 H +HETATM 1897 O HOH A 405 -1.392 10.401 12.400 1.00 25.70 O +HETATM 1898 H1 HOH A 405 -1.110 9.691 12.984 0.00 20.00 H +HETATM 1899 H2 HOH A 405 -1.196 11.201 12.890 0.00 20.00 H +HETATM 1900 O HOH A 406 -8.545 10.688 13.725 1.00 4.29 O +HETATM 1901 H1 HOH A 406 -8.105 11.169 13.015 0.00 20.00 H +HETATM 1902 H2 HOH A 406 -8.992 11.385 14.219 0.00 20.00 H +HETATM 1903 O HOH A 410 7.328 3.159 38.192 1.00 63.38 O +HETATM 1904 H1 HOH A 410 7.836 2.868 38.960 0.00 20.00 H +HETATM 1905 H2 HOH A 410 7.292 2.360 37.640 0.00 20.00 H +HETATM 1906 O HOH B 407 18.496 0.062 6.092 1.00 58.99 O +HETATM 1907 H1 HOH B 407 18.810 0.911 5.772 0.00 20.00 H +HETATM 1908 H2 HOH B 407 17.595 0.283 6.369 0.00 20.00 H +HETATM 1909 O HOH B 408 18.639 -4.883 26.553 1.00 13.69 O +HETATM 1910 H1 HOH B 408 19.047 -5.595 27.057 0.00 20.00 H +HETATM 1911 H2 HOH B 408 18.259 -4.326 27.243 0.00 20.00 H +HETATM 1912 O HOH B 409 10.120 3.111 32.180 1.00 13.85 O +HETATM 1913 H1 HOH B 409 10.839 3.269 32.796 0.00 20.00 H +HETATM 1914 H2 HOH B 409 10.029 3.959 31.733 0.00 20.00 H +CONECT 1849 1850 1851 1852 1853 +CONECT 1850 1849 +CONECT 1851 1849 +CONECT 1852 1849 +CONECT 1853 1849 1854 +CONECT 1854 1853 1855 1856 +CONECT 1855 1854 +CONECT 1856 1854 1857 1886 +CONECT 1857 1856 1858 1865 1887 +CONECT 1858 1857 1859 +CONECT 1859 1858 1860 1863 +CONECT 1860 1859 1861 +CONECT 1861 1860 1862 +CONECT 1862 1861 1864 +CONECT 1863 1859 1864 +CONECT 1864 1862 1863 +CONECT 1865 1857 1866 1867 1888 +CONECT 1866 1865 1889 +CONECT 1867 1865 1868 +CONECT 1868 1867 1869 1870 1877 +CONECT 1869 1868 +CONECT 1870 1868 1871 +CONECT 1871 1870 1872 1875 +CONECT 1872 1871 1873 +CONECT 1873 1872 1874 +CONECT 1874 1873 1876 +CONECT 1875 1871 1876 +CONECT 1876 1874 1875 +CONECT 1877 1868 1878 1890 +CONECT 1878 1877 1879 1880 +CONECT 1879 1878 +CONECT 1880 1878 1881 1884 +CONECT 1881 1880 1882 +CONECT 1882 1881 1883 +CONECT 1883 1882 1885 +CONECT 1884 1880 1885 +CONECT 1885 1883 1884 +CONECT 1886 1856 +CONECT 1887 1857 +CONECT 1888 1865 +CONECT 1889 1866 +CONECT 1890 1877 +MASTER 309 0 1 2 16 0 3 6 1912 2 42 16 +END diff --git a/moldesign/_tests/data/ACTG.cif b/moldesign/_tests/data/ACTG.cif new file mode 100644 index 0000000..8338dd1 --- /dev/null +++ b/moldesign/_tests/data/ACTG.cif @@ -0,0 +1,262 @@ +# CIF file generated by openbabel 2.3.90, see http://openbabel.sf.net +data_I +_chemical_name_common '' +loop_ + _atom_site_label + _atom_site_type_symbol + _atom_site_fract_x + _atom_site_fract_y + _atom_site_fract_z + _atom_site_occupancy + H0 H -0.43000 -8.39100 -1.87700 1.000 + O1 O 0.41300 -8.02900 -1.59200 1.000 + C2 C 1.43800 -7.78900 -2.57400 1.000 + H3 H 1.07200 -7.07700 -3.31500 1.000 + H4 H 1.69600 -8.72500 -3.06800 1.000 + C5 C 2.67700 -7.21900 -1.90300 1.000 + H6 H 3.54200 -7.36800 -2.55000 1.000 + O7 O 2.53800 -5.76900 -1.80800 1.000 + C8 C 2.25000 -5.39500 -0.46800 1.000 + H9 H 3.03300 -4.73200 -0.09900 1.000 + N10 N 1.01300 -4.51200 -0.44000 1.000 + C11 C -0.32000 -4.82500 -0.46800 1.000 + H12 H -0.63100 -5.85800 -0.52000 1.000 + N13 N -1.10600 -3.79400 -0.36600 1.000 + C14 C -0.23500 -2.71600 -0.26200 1.000 + C15 C -0.44900 -1.33900 -0.12700 1.000 + N16 N -1.66600 -0.78200 -0.07000 1.000 + H17 H -1.75900 0.21900 0.02800 1.000 + H18 H -2.49100 -1.36200 -0.12600 1.000 + N19 N 0.63200 -0.55100 -0.05100 1.000 + C20 C 1.83800 -1.11000 -0.10800 1.000 + H21 H 2.72200 -0.49300 -0.04900 1.000 + N22 N 2.16100 -2.38400 -0.23300 1.000 + C23 C 1.05500 -3.15400 -0.30700 1.000 + C24 C 2.92300 -7.67400 -0.46300 1.000 + H25 H 2.52100 -8.67700 -0.32500 1.000 + C26 C 2.09700 -6.67700 0.35300 1.000 + H27 H 1.34400 -7.21400 0.92900 1.000 + H28 H 2.75300 -6.13100 1.03100 1.000 + O29 O 4.26200 -7.60100 0.00500 1.000 + P30 P 4.02800 -7.50400 1.25200 1.000 + O31 O 5.02500 -8.53700 0.89300 1.000 + O32 O 2.99400 -7.87500 2.24300 1.000 + O33 O 4.88100 -6.23000 1.71100 1.000 + C34 C 5.53800 -5.43200 0.70900 1.000 + H35 H 4.79500 -5.02900 0.02000 1.000 + H36 H 6.24600 -6.05000 0.15700 1.000 + C37 C 6.28400 -4.28300 1.36600 1.000 + H38 H 7.04500 -3.90500 0.68400 1.000 + O39 O 5.36500 -3.16300 1.54500 1.000 + C40 C 4.99600 -3.04800 2.91100 1.000 + H41 H 5.29600 -2.07100 3.28800 1.000 + N42 N 3.50800 -3.01500 2.98800 1.000 + C43 C 2.77700 -4.16000 2.94500 1.000 + H44 H 3.27300 -5.11500 2.85400 1.000 + C45 C 1.41900 -4.12700 3.01500 1.000 + H46 H 0.84800 -5.05500 2.97900 1.000 + C47 C 0.80800 -2.83900 3.13500 1.000 + N48 N -0.50500 -2.73400 3.20800 1.000 + H49 H -0.89800 -1.80700 3.29300 1.000 + H50 H -1.08500 -3.56100 3.18000 1.000 + N51 N 1.53200 -1.72400 3.17700 1.000 + C52 C 2.88900 -1.77900 3.10500 1.000 + O53 O 3.59700 -0.76200 3.14000 1.000 + C54 C 6.82500 -4.55800 2.77100 1.000 + H55 H 7.06100 -5.61800 2.86900 1.000 + C56 C 5.63300 -4.21600 3.66700 1.000 + H57 H 5.34400 -5.09700 4.23900 1.000 + H58 H 5.91000 -3.41400 4.35100 1.000 + O59 O 7.92000 -3.76000 3.19600 1.000 + P60 P 7.87200 -3.61400 4.66400 1.000 + O61 O 9.31000 -3.81800 4.38100 1.000 + O62 O 7.22600 -4.55900 5.60200 1.000 + O63 O 7.74300 -2.09400 5.14600 1.000 + C64 C 7.83100 -1.04200 4.16700 1.000 + H65 H 7.03600 -1.16200 3.43100 1.000 + H66 H 8.79800 -1.08900 3.66800 1.000 + C67 C 7.68300 0.31100 4.84500 1.000 + H68 H 8.09200 1.08800 4.19900 1.000 + O69 O 6.26300 0.63400 4.95000 1.000 + C70 C 5.82600 0.47300 6.29200 1.000 + H71 H 5.44500 1.42300 6.66700 1.000 + N72 N 4.59100 -0.43000 6.32400 1.000 + C73 C 4.66400 -1.79700 6.28100 1.000 + H74 H 5.62600 -2.28500 6.22200 1.000 + C75 C 3.56200 -2.55500 6.36600 1.000 + C76 C 3.63200 -4.05300 6.32000 1.000 + H77 H 4.24300 -4.41400 7.14700 1.000 + H78 H 2.62700 -4.46600 6.40400 1.000 + H79 H 4.07600 -4.36800 5.37600 1.000 + C80 C 2.26200 -1.95100 6.50500 1.000 + O81 O 1.19900 -2.56400 6.58900 1.000 + N82 N 2.28300 -0.57200 6.53900 1.000 + H83 H 1.32100 -0.06900 6.64300 1.000 + C84 C 3.40000 0.23400 6.45400 1.000 + O85 O 3.31700 1.45000 6.49400 1.000 + C86 C 8.20100 0.39600 6.28200 1.000 + H87 H 9.02800 -0.30200 6.41200 1.000 + C88 C 7.00000 -0.07800 7.10300 1.000 + H89 H 7.27700 -0.96400 7.67500 1.000 + H90 H 6.69200 0.71300 7.78700 1.000 + O91 O 8.55500 1.68800 6.75300 1.000 + P92 P 8.39400 1.53500 8.00900 1.000 + O93 O 9.67900 2.17200 7.64600 1.000 + O94 O 8.43800 0.44100 9.00500 1.000 + O95 O 7.43900 2.73500 8.46700 1.000 + C96 C 6.87300 3.59800 7.46300 1.000 + H97 H 6.26300 3.01000 6.77800 1.000 + H98 H 7.67500 4.08500 6.90800 1.000 + C99 C 6.00500 4.65900 8.12000 1.000 + H100 H 5.87300 5.49700 7.43400 1.000 + O101 O 4.66000 4.12200 8.30300 1.000 + C102 C 4.44300 3.80900 9.67100 1.000 + H103 H 3.60200 4.39200 10.04800 1.000 + N104 N 3.96200 2.40200 9.75300 1.000 + C105 C 4.68800 1.22900 9.72700 1.000 + H106 H 5.76400 1.26100 9.63600 1.000 + N107 N 3.95600 0.14600 9.81800 1.000 + C108 C 2.65600 0.63000 9.91100 1.000 + C109 C 1.42300 -0.06400 10.03200 1.000 + O110 O 1.22200 -1.27600 10.08300 1.000 + N111 N 0.34200 0.82400 10.09600 1.000 + H112 H -0.57300 0.42900 10.18100 1.000 + C113 C 0.43800 2.20000 10.05100 1.000 + N114 N -0.71800 2.87200 10.12600 1.000 + H115 H -1.64600 2.48000 10.20000 1.000 + H116 H -0.65800 3.88000 10.08500 1.000 + N117 N 1.59400 2.84800 9.93900 1.000 + C118 C 2.65500 1.99900 9.87600 1.000 + C119 C 6.43400 5.09700 9.52100 1.000 + H120 H 7.51600 5.00200 9.61700 1.000 + C121 C 5.75000 4.06700 10.42300 1.000 + H122 H 6.50400 3.52600 10.99500 1.000 + H123 H 5.07100 4.57600 11.10700 1.000 + O124 O 6.00500 6.38300 9.94400 1.000 + H125 H 6.28700 6.63500 10.82600 1.000 + H126 H -7.64600 -3.09100 12.08300 1.000 + O127 O -7.61100 -2.17200 11.80800 1.000 + C128 C -7.67200 -1.14000 12.81100 1.000 + H129 H -6.83500 -1.25100 13.49900 1.000 + H130 H -8.60900 -1.22400 13.36300 1.000 + C131 C -7.60100 0.22800 12.15400 1.000 + H132 H -7.99500 0.98100 12.83700 1.000 + O133 O -6.19900 0.59400 11.97600 1.000 + C134 C -5.83400 0.47000 10.60900 1.000 + H135 H -5.50100 1.43800 10.23200 1.000 + N136 N -4.61000 -0.37700 10.53100 1.000 + C137 C -4.69200 -1.73400 10.57400 1.000 + H138 H -5.65500 -2.21400 10.66500 1.000 + C139 C -3.57400 -2.50500 10.50300 1.000 + H140 H -3.65800 -3.59100 10.53800 1.000 + C141 C -2.32300 -1.82200 10.38300 1.000 + N142 N -1.19800 -2.50900 10.30900 1.000 + H143 H -0.33600 -1.99000 10.22500 1.000 + H144 H -1.21500 -3.51800 10.33700 1.000 + N145 N -2.25300 -0.49500 10.34200 1.000 + C146 C -3.38300 0.25900 10.41500 1.000 + O147 O -3.35800 1.49800 10.38000 1.000 + C148 C -8.20100 0.32400 10.74900 1.000 + H149 H -9.01500 -0.39400 10.65200 1.000 + C150 C -7.03600 -0.09900 9.85300 1.000 + H151 H -7.31900 -0.98200 9.28000 1.000 + H152 H -6.78900 0.71300 9.17000 1.000 + O153 O -8.61700 1.61400 10.32500 1.000 + P154 P -8.51200 1.73200 8.84600 1.000 + O155 O -9.79300 2.42100 9.11800 1.000 + O156 O -8.54400 0.58300 7.91400 1.000 + O157 O -7.50600 2.87800 8.36200 1.000 + C158 C -6.95900 3.78500 9.33900 1.000 + H159 H -6.39400 3.22100 10.08100 1.000 + H160 H -7.77000 4.32200 9.83100 1.000 + C161 C -6.03600 4.78400 8.66100 1.000 + H162 H -5.91000 5.65600 9.30200 1.000 + O163 O -4.70000 4.20300 8.56600 1.000 + C164 C -4.43600 3.80700 7.22800 1.000 + H165 H -3.56500 4.34500 6.85500 1.000 + N166 N -3.97700 2.35800 7.20700 1.000 + C167 C -4.68600 1.18600 7.24300 1.000 + H168 H -5.76500 1.20900 7.29700 1.000 + N169 N -3.94900 0.12000 7.14600 1.000 + C170 C -2.65500 0.61500 7.03600 1.000 + C171 C -1.41100 -0.01300 6.90200 1.000 + N172 N -1.25600 -1.34400 6.85300 1.000 + H173 H -0.33300 -1.74100 6.75500 1.000 + H174 H -2.06300 -1.94800 6.91300 1.000 + N175 N -0.32800 0.77100 6.82100 1.000 + C176 C -0.48800 2.09100 6.87000 1.000 + H177 H 0.37200 2.74200 6.80600 1.000 + N178 N -1.59900 2.79200 6.99400 1.000 + C179 C -2.67300 1.97800 7.07400 1.000 + C180 C -6.39600 5.15000 7.21900 1.000 + H181 H -7.47500 5.07600 7.08300 1.000 + C182 C -5.70300 4.05300 6.40800 1.000 + H183 H -6.44800 3.49900 5.83600 1.000 + H184 H -4.98300 4.50400 5.72600 1.000 + O185 O -5.91400 6.39800 6.74300 1.000 + P186 P -5.88900 6.17500 5.50900 1.000 + O187 O -6.55400 7.44600 5.87300 1.000 + O188 O -6.56700 5.31600 4.51300 1.000 + O189 O -4.41100 6.58400 5.05200 1.000 + C190 C -3.44600 6.95000 6.05600 1.000 + H191 H -3.29900 6.11500 6.74100 1.000 + H192 H -3.80900 7.81500 6.61200 1.000 + C193 C -2.12000 7.29900 5.40100 1.000 + H194 H -1.52100 7.89800 6.08600 1.000 + O195 O -1.34800 6.07300 5.21700 1.000 + C196 C -1.35500 5.69300 3.84900 1.000 + H197 H -0.33300 5.67000 3.47200 1.000 + N198 N -1.79300 4.27200 3.76600 1.000 + C199 C -3.07100 3.75000 3.79200 1.000 + H200 H -3.92200 4.40900 3.88300 1.000 + N201 N -3.11400 2.44400 3.70000 1.000 + C202 C -1.77900 2.07000 3.60800 1.000 + C203 C -1.18900 0.78500 3.48600 1.000 + O204 O -1.73900 -0.31400 3.43500 1.000 + N205 N 0.20700 0.86800 3.42300 1.000 + H206 H 0.71500 0.01000 3.33800 1.000 + C207 C 0.93900 2.03700 3.46900 1.000 + N208 N 2.27000 1.90200 3.39400 1.000 + H209 H 2.79000 1.03900 3.32000 1.000 + H210 H 2.81300 2.75200 3.43600 1.000 + N211 N 0.38400 3.24100 3.58100 1.000 + C212 C -0.97300 3.17800 3.64300 1.000 + C213 C -2.21000 7.90600 3.99900 1.000 + H214 H -3.14100 8.46400 3.90300 1.000 + C215 C -2.26100 6.67000 3.09700 1.000 + H216 H -3.18900 6.67700 2.52500 1.000 + H217 H -1.41300 6.68300 2.41400 1.000 + O218 O -1.10600 8.69400 3.57700 1.000 + P219 P -0.99700 8.60200 2.11500 1.000 + O220 O -0.74500 10.03300 2.39700 1.000 + O221 O -2.10000 8.27900 1.18300 1.000 + O222 O 0.40600 8.01100 1.62500 1.000 + C223 C 1.44000 7.76900 2.59700 1.000 + H224 H 1.08500 7.05000 3.33600 1.000 + H225 H 1.69700 8.70400 3.09500 1.000 + C226 C 2.67800 7.21100 1.91300 1.000 + H227 H 3.54700 7.36100 2.55400 1.000 + O228 O 2.54600 5.76100 1.80800 1.000 + C229 C 2.25000 5.39500 0.46800 1.000 + H230 H 3.03400 4.74000 0.08800 1.000 + N231 N 1.01000 4.49900 0.44300 1.000 + C232 C -0.26800 4.99000 0.49300 1.000 + H233 H -0.43500 6.05600 0.55400 1.000 + C234 C -1.32900 4.17600 0.41500 1.000 + C235 C -2.73200 4.70400 0.46900 1.000 + H236 H -2.89200 5.39700 -0.35700 1.000 + H237 H -3.43600 3.87500 0.38900 1.000 + H238 H -2.88900 5.22300 1.41400 1.000 + C239 C -1.15700 2.75300 0.27500 1.000 + O240 O -2.06800 1.93000 0.19600 1.000 + N241 N 0.16200 2.34700 0.23300 1.000 + H242 H 0.34300 1.27700 0.12800 1.000 + C243 C 1.27300 3.16100 0.31100 1.000 + O244 O 2.40500 2.70700 0.26500 1.000 + C245 C 2.91000 7.67800 0.47400 1.000 + H246 H 2.50100 8.68000 0.34600 1.000 + C247 C 2.08400 6.68200 -0.34200 1.000 + H248 H 1.32300 7.21800 -0.90900 1.000 + H249 H 2.73700 6.14400 -1.03000 1.000 + O250 O 4.24500 7.61600 -0.00500 1.000 + H251 H 4.36500 7.91400 -0.90900 1.000 diff --git a/moldesign/_tests/data/ACTG.pdb b/moldesign/_tests/data/ACTG.pdb new file mode 100644 index 0000000..a204523 --- /dev/null +++ b/moldesign/_tests/data/ACTG.pdb @@ -0,0 +1,506 @@ +COMPND UNNAMED +AUTHOR GENERATED BY OPEN BABEL 2.3.90 +ATOM 1 HO5' DA A 1 -0.430 -8.391 -1.877 1.00 0.00 H +ATOM 2 O5' DA A 1 0.413 -8.029 -1.592 1.00 0.00 O +ATOM 3 C5' DA A 1 1.438 -7.789 -2.574 1.00 0.00 C +ATOM 4 H5' DA A 1 1.072 -7.077 -3.315 1.00 0.00 H +ATOM 5 H5'' DA A 1 1.696 -8.725 -3.068 1.00 0.00 H +ATOM 6 C4' DA A 1 2.677 -7.219 -1.903 1.00 0.00 C +ATOM 7 H4' DA A 1 3.542 -7.368 -2.550 1.00 0.00 H +ATOM 8 O4' DA A 1 2.538 -5.769 -1.808 1.00 0.00 O +ATOM 9 C1' DA A 1 2.250 -5.395 -0.468 1.00 0.00 C +ATOM 10 H1' DA A 1 3.033 -4.732 -0.099 1.00 0.00 H +ATOM 11 N9 DA A 1 1.013 -4.512 -0.440 1.00 0.00 N +ATOM 12 C8 DA A 1 -0.320 -4.825 -0.468 1.00 0.00 C +ATOM 13 H8 DA A 1 -0.631 -5.858 -0.520 1.00 0.00 H +ATOM 14 N7 DA A 1 -1.106 -3.794 -0.366 1.00 0.00 N +ATOM 15 C5 DA A 1 -0.235 -2.716 -0.262 1.00 0.00 C +ATOM 16 C6 DA A 1 -0.449 -1.339 -0.127 1.00 0.00 C +ATOM 17 N6 DA A 1 -1.666 -0.782 -0.070 1.00 0.00 N +ATOM 18 H61 DA A 1 -1.759 0.219 0.028 1.00 0.00 H +ATOM 19 H62 DA A 1 -2.491 -1.362 -0.126 1.00 0.00 H +ATOM 20 N1 DA A 1 0.632 -0.551 -0.051 1.00 0.00 N +ATOM 21 C2 DA A 1 1.838 -1.110 -0.108 1.00 0.00 C +ATOM 22 H2 DA A 1 2.722 -0.493 -0.049 1.00 0.00 H +ATOM 23 N3 DA A 1 2.161 -2.384 -0.233 1.00 0.00 N +ATOM 24 C4 DA A 1 1.055 -3.154 -0.307 1.00 0.00 C +ATOM 25 C3' DA A 1 2.923 -7.674 -0.463 1.00 0.00 C +ATOM 26 H3' DA A 1 2.521 -8.677 -0.325 1.00 0.00 H +ATOM 27 C2' DA A 1 2.097 -6.677 0.353 1.00 0.00 C +ATOM 28 H2' DA A 1 1.344 -7.214 0.929 1.00 0.00 H +ATOM 29 H2'' DA A 1 2.753 -6.131 1.031 1.00 0.00 H +ATOM 30 O3' DA A 1 4.262 -7.601 0.005 1.00 0.00 O +ATOM 31 P DC A 2 4.028 -7.504 1.252 1.00 0.00 P +ATOM 32 OP1 DC A 2 5.025 -8.537 0.893 1.00 0.00 O +ATOM 33 OP2 DC A 2 2.994 -7.875 2.243 1.00 0.00 O +ATOM 34 O5' DC A 2 4.881 -6.230 1.711 1.00 0.00 O +ATOM 35 C5' DC A 2 5.538 -5.432 0.709 1.00 0.00 C +ATOM 36 H5' DC A 2 4.795 -5.029 0.020 1.00 0.00 H +ATOM 37 H5'' DC A 2 6.246 -6.050 0.157 1.00 0.00 H +ATOM 38 C4' DC A 2 6.284 -4.283 1.366 1.00 0.00 C +ATOM 39 H4' DC A 2 7.045 -3.905 0.684 1.00 0.00 H +ATOM 40 O4' DC A 2 5.365 -3.163 1.545 1.00 0.00 O +ATOM 41 C1' DC A 2 4.996 -3.048 2.911 1.00 0.00 C +ATOM 42 H1' DC A 2 5.296 -2.071 3.288 1.00 0.00 H +ATOM 43 N1 DC A 2 3.508 -3.015 2.988 1.00 0.00 N +ATOM 44 C6 DC A 2 2.777 -4.160 2.945 1.00 0.00 C +ATOM 45 H6 DC A 2 3.273 -5.115 2.854 1.00 0.00 H +ATOM 46 C5 DC A 2 1.419 -4.127 3.015 1.00 0.00 C +ATOM 47 H5 DC A 2 0.848 -5.055 2.979 1.00 0.00 H +ATOM 48 C4 DC A 2 0.808 -2.839 3.135 1.00 0.00 C +ATOM 49 N4 DC A 2 -0.505 -2.734 3.208 1.00 0.00 N +ATOM 50 H41 DC A 2 -0.898 -1.807 3.293 1.00 0.00 H +ATOM 51 H42 DC A 2 -1.085 -3.561 3.180 1.00 0.00 H +ATOM 52 N3 DC A 2 1.532 -1.724 3.177 1.00 0.00 N +ATOM 53 C2 DC A 2 2.889 -1.779 3.105 1.00 0.00 C +ATOM 54 O2 DC A 2 3.597 -0.762 3.140 1.00 0.00 O +ATOM 55 C3' DC A 2 6.825 -4.558 2.771 1.00 0.00 C +ATOM 56 H3' DC A 2 7.061 -5.618 2.869 1.00 0.00 H +ATOM 57 C2' DC A 2 5.633 -4.216 3.667 1.00 0.00 C +ATOM 58 H2' DC A 2 5.344 -5.097 4.239 1.00 0.00 H +ATOM 59 H2'' DC A 2 5.910 -3.414 4.351 1.00 0.00 H +ATOM 60 O3' DC A 2 7.920 -3.760 3.196 1.00 0.00 O +ATOM 61 P DT A 3 7.872 -3.614 4.664 1.00 0.00 P +ATOM 62 OP1 DT A 3 9.310 -3.818 4.381 1.00 0.00 O +ATOM 63 OP2 DT A 3 7.226 -4.559 5.602 1.00 0.00 O +ATOM 64 O5' DT A 3 7.743 -2.094 5.146 1.00 0.00 O +ATOM 65 C5' DT A 3 7.831 -1.042 4.167 1.00 0.00 C +ATOM 66 H5' DT A 3 7.036 -1.162 3.431 1.00 0.00 H +ATOM 67 H5'' DT A 3 8.798 -1.089 3.668 1.00 0.00 H +ATOM 68 C4' DT A 3 7.683 0.311 4.845 1.00 0.00 C +ATOM 69 H4' DT A 3 8.092 1.088 4.199 1.00 0.00 H +ATOM 70 O4' DT A 3 6.263 0.634 4.950 1.00 0.00 O +ATOM 71 C1' DT A 3 5.826 0.473 6.292 1.00 0.00 C +ATOM 72 H1' DT A 3 5.445 1.423 6.667 1.00 0.00 H +ATOM 73 N1 DT A 3 4.591 -0.430 6.324 1.00 0.00 N +ATOM 74 C6 DT A 3 4.664 -1.797 6.281 1.00 0.00 C +ATOM 75 H6 DT A 3 5.626 -2.285 6.222 1.00 0.00 H +ATOM 76 C5 DT A 3 3.562 -2.555 6.366 1.00 0.00 C +ATOM 77 C7 DT A 3 3.632 -4.053 6.320 1.00 0.00 C +ATOM 78 H71 DT A 3 4.243 -4.414 7.147 1.00 0.00 H +ATOM 79 H72 DT A 3 2.627 -4.466 6.404 1.00 0.00 H +ATOM 80 H73 DT A 3 4.076 -4.368 5.376 1.00 0.00 H +ATOM 81 C4 DT A 3 2.262 -1.951 6.505 1.00 0.00 C +ATOM 82 O4 DT A 3 1.199 -2.564 6.589 1.00 0.00 O +ATOM 83 N3 DT A 3 2.283 -0.572 6.539 1.00 0.00 N +ATOM 84 H3 DT A 3 1.321 -0.069 6.643 1.00 0.00 H +ATOM 85 C2 DT A 3 3.400 0.234 6.454 1.00 0.00 C +ATOM 86 O2 DT A 3 3.317 1.450 6.494 1.00 0.00 O +ATOM 87 C3' DT A 3 8.201 0.396 6.282 1.00 0.00 C +ATOM 88 H3' DT A 3 9.028 -0.302 6.412 1.00 0.00 H +ATOM 89 C2' DT A 3 7.000 -0.078 7.103 1.00 0.00 C +ATOM 90 H2' DT A 3 7.277 -0.964 7.675 1.00 0.00 H +ATOM 91 H2'' DT A 3 6.692 0.713 7.787 1.00 0.00 H +ATOM 92 O3' DT A 3 8.555 1.688 6.753 1.00 0.00 O +ATOM 93 P DG A 4 8.394 1.535 8.009 1.00 0.00 P +ATOM 94 OP1 DG A 4 9.679 2.172 7.646 1.00 0.00 O +ATOM 95 OP2 DG A 4 8.438 0.441 9.005 1.00 0.00 O +ATOM 96 O5' DG A 4 7.439 2.735 8.467 1.00 0.00 O +ATOM 97 C5' DG A 4 6.873 3.598 7.463 1.00 0.00 C +ATOM 98 H5' DG A 4 6.263 3.010 6.778 1.00 0.00 H +ATOM 99 H5'' DG A 4 7.675 4.085 6.908 1.00 0.00 H +ATOM 100 C4' DG A 4 6.005 4.659 8.120 1.00 0.00 C +ATOM 101 H4' DG A 4 5.873 5.497 7.434 1.00 0.00 H +ATOM 102 O4' DG A 4 4.660 4.122 8.303 1.00 0.00 O +ATOM 103 C1' DG A 4 4.443 3.809 9.671 1.00 0.00 C +ATOM 104 H1' DG A 4 3.602 4.392 10.048 1.00 0.00 H +ATOM 105 N9 DG A 4 3.962 2.402 9.753 1.00 0.00 N +ATOM 106 C8 DG A 4 4.688 1.229 9.727 1.00 0.00 C +ATOM 107 H8 DG A 4 5.764 1.261 9.636 1.00 0.00 H +ATOM 108 N7 DG A 4 3.956 0.146 9.818 1.00 0.00 N +ATOM 109 C5 DG A 4 2.656 0.630 9.911 1.00 0.00 C +ATOM 110 C6 DG A 4 1.423 -0.064 10.032 1.00 0.00 C +ATOM 111 O6 DG A 4 1.222 -1.276 10.083 1.00 0.00 O +ATOM 112 N1 DG A 4 0.342 0.824 10.096 1.00 0.00 N +ATOM 113 H1 DG A 4 -0.573 0.429 10.181 1.00 0.00 H +ATOM 114 C2 DG A 4 0.438 2.200 10.051 1.00 0.00 C +ATOM 115 N2 DG A 4 -0.718 2.872 10.126 1.00 0.00 N +ATOM 116 H21 DG A 4 -1.646 2.480 10.200 1.00 0.00 H +ATOM 117 H22 DG A 4 -0.658 3.880 10.085 1.00 0.00 H +ATOM 118 N3 DG A 4 1.594 2.848 9.939 1.00 0.00 N +ATOM 119 C4 DG A 4 2.655 1.999 9.876 1.00 0.00 C +ATOM 120 C3' DG A 4 6.434 5.097 9.521 1.00 0.00 C +ATOM 121 H3' DG A 4 7.516 5.002 9.617 1.00 0.00 H +ATOM 122 C2' DG A 4 5.750 4.067 10.423 1.00 0.00 C +ATOM 123 H2' DG A 4 6.504 3.526 10.995 1.00 0.00 H +ATOM 124 H2'' DG A 4 5.071 4.576 11.107 1.00 0.00 H +ATOM 125 O3' DG A 4 6.005 6.383 9.944 1.00 0.00 O +ATOM 126 HO3' DG A 4 6.287 6.635 10.826 1.00 0.00 H +ATOM 127 HO5' DC B 1 -7.646 -3.091 12.083 1.00 0.00 H +ATOM 128 O5' DC B 1 -7.611 -2.172 11.808 1.00 0.00 O +ATOM 129 C5' DC B 1 -7.672 -1.140 12.811 1.00 0.00 C +ATOM 130 H5' DC B 1 -6.835 -1.251 13.499 1.00 0.00 H +ATOM 131 H5'' DC B 1 -8.609 -1.224 13.363 1.00 0.00 H +ATOM 132 C4' DC B 1 -7.601 0.228 12.154 1.00 0.00 C +ATOM 133 H4' DC B 1 -7.995 0.981 12.837 1.00 0.00 H +ATOM 134 O4' DC B 1 -6.199 0.594 11.976 1.00 0.00 O +ATOM 135 C1' DC B 1 -5.834 0.470 10.609 1.00 0.00 C +ATOM 136 H1' DC B 1 -5.501 1.438 10.232 1.00 0.00 H +ATOM 137 N1 DC B 1 -4.610 -0.377 10.531 1.00 0.00 N +ATOM 138 C6 DC B 1 -4.692 -1.734 10.574 1.00 0.00 C +ATOM 139 H6 DC B 1 -5.655 -2.214 10.665 1.00 0.00 H +ATOM 140 C5 DC B 1 -3.574 -2.505 10.503 1.00 0.00 C +ATOM 141 H5 DC B 1 -3.658 -3.591 10.538 1.00 0.00 H +ATOM 142 C4 DC B 1 -2.323 -1.822 10.383 1.00 0.00 C +ATOM 143 N4 DC B 1 -1.198 -2.509 10.309 1.00 0.00 N +ATOM 144 H41 DC B 1 -0.336 -1.990 10.225 1.00 0.00 H +ATOM 145 H42 DC B 1 -1.215 -3.518 10.337 1.00 0.00 H +ATOM 146 N3 DC B 1 -2.253 -0.495 10.342 1.00 0.00 N +ATOM 147 C2 DC B 1 -3.383 0.259 10.415 1.00 0.00 C +ATOM 148 O2 DC B 1 -3.358 1.498 10.380 1.00 0.00 O +ATOM 149 C3' DC B 1 -8.201 0.324 10.749 1.00 0.00 C +ATOM 150 H3' DC B 1 -9.015 -0.394 10.652 1.00 0.00 H +ATOM 151 C2' DC B 1 -7.036 -0.099 9.853 1.00 0.00 C +ATOM 152 H2' DC B 1 -7.319 -0.982 9.280 1.00 0.00 H +ATOM 153 H2'' DC B 1 -6.789 0.713 9.170 1.00 0.00 H +ATOM 154 O3' DC B 1 -8.617 1.614 10.325 1.00 0.00 O +ATOM 155 P DA B 2 -8.512 1.732 8.846 1.00 0.00 P +ATOM 156 OP1 DA B 2 -9.793 2.421 9.118 1.00 0.00 O +ATOM 157 OP2 DA B 2 -8.544 0.583 7.914 1.00 0.00 O +ATOM 158 O5' DA B 2 -7.506 2.878 8.362 1.00 0.00 O +ATOM 159 C5' DA B 2 -6.959 3.785 9.339 1.00 0.00 C +ATOM 160 H5' DA B 2 -6.394 3.221 10.081 1.00 0.00 H +ATOM 161 H5'' DA B 2 -7.770 4.322 9.831 1.00 0.00 H +ATOM 162 C4' DA B 2 -6.036 4.784 8.661 1.00 0.00 C +ATOM 163 H4' DA B 2 -5.910 5.656 9.302 1.00 0.00 H +ATOM 164 O4' DA B 2 -4.700 4.203 8.566 1.00 0.00 O +ATOM 165 C1' DA B 2 -4.436 3.807 7.228 1.00 0.00 C +ATOM 166 H1' DA B 2 -3.565 4.345 6.855 1.00 0.00 H +ATOM 167 N9 DA B 2 -3.977 2.358 7.207 1.00 0.00 N +ATOM 168 C8 DA B 2 -4.686 1.186 7.243 1.00 0.00 C +ATOM 169 H8 DA B 2 -5.765 1.209 7.297 1.00 0.00 H +ATOM 170 N7 DA B 2 -3.949 0.120 7.146 1.00 0.00 N +ATOM 171 C5 DA B 2 -2.655 0.615 7.036 1.00 0.00 C +ATOM 172 C6 DA B 2 -1.411 -0.013 6.902 1.00 0.00 C +ATOM 173 N6 DA B 2 -1.256 -1.344 6.853 1.00 0.00 N +ATOM 174 H61 DA B 2 -0.333 -1.741 6.755 1.00 0.00 H +ATOM 175 H62 DA B 2 -2.063 -1.948 6.913 1.00 0.00 H +ATOM 176 N1 DA B 2 -0.328 0.771 6.821 1.00 0.00 N +ATOM 177 C2 DA B 2 -0.488 2.091 6.870 1.00 0.00 C +ATOM 178 H2 DA B 2 0.372 2.742 6.806 1.00 0.00 H +ATOM 179 N3 DA B 2 -1.599 2.792 6.994 1.00 0.00 N +ATOM 180 C4 DA B 2 -2.673 1.978 7.074 1.00 0.00 C +ATOM 181 C3' DA B 2 -6.396 5.150 7.219 1.00 0.00 C +ATOM 182 H3' DA B 2 -7.475 5.076 7.083 1.00 0.00 H +ATOM 183 C2' DA B 2 -5.703 4.053 6.408 1.00 0.00 C +ATOM 184 H2' DA B 2 -6.448 3.499 5.836 1.00 0.00 H +ATOM 185 H2'' DA B 2 -4.983 4.504 5.726 1.00 0.00 H +ATOM 186 O3' DA B 2 -5.914 6.398 6.743 1.00 0.00 O +ATOM 187 P DG B 3 -5.889 6.175 5.509 1.00 0.00 P +ATOM 188 OP1 DG B 3 -6.554 7.446 5.873 1.00 0.00 O +ATOM 189 OP2 DG B 3 -6.567 5.316 4.513 1.00 0.00 O +ATOM 190 O5' DG B 3 -4.411 6.584 5.052 1.00 0.00 O +ATOM 191 C5' DG B 3 -3.446 6.950 6.056 1.00 0.00 C +ATOM 192 H5' DG B 3 -3.299 6.115 6.741 1.00 0.00 H +ATOM 193 H5'' DG B 3 -3.809 7.815 6.612 1.00 0.00 H +ATOM 194 C4' DG B 3 -2.120 7.299 5.401 1.00 0.00 C +ATOM 195 H4' DG B 3 -1.521 7.898 6.086 1.00 0.00 H +ATOM 196 O4' DG B 3 -1.348 6.073 5.217 1.00 0.00 O +ATOM 197 C1' DG B 3 -1.355 5.693 3.849 1.00 0.00 C +ATOM 198 H1' DG B 3 -0.333 5.670 3.472 1.00 0.00 H +ATOM 199 N9 DG B 3 -1.793 4.272 3.766 1.00 0.00 N +ATOM 200 C8 DG B 3 -3.071 3.750 3.792 1.00 0.00 C +ATOM 201 H8 DG B 3 -3.922 4.409 3.883 1.00 0.00 H +ATOM 202 N7 DG B 3 -3.114 2.444 3.700 1.00 0.00 N +ATOM 203 C5 DG B 3 -1.779 2.070 3.608 1.00 0.00 C +ATOM 204 C6 DG B 3 -1.189 0.785 3.486 1.00 0.00 C +ATOM 205 O6 DG B 3 -1.739 -0.314 3.435 1.00 0.00 O +ATOM 206 N1 DG B 3 0.207 0.868 3.423 1.00 0.00 N +ATOM 207 H1 DG B 3 0.715 0.010 3.338 1.00 0.00 H +ATOM 208 C2 DG B 3 0.939 2.037 3.469 1.00 0.00 C +ATOM 209 N2 DG B 3 2.270 1.902 3.394 1.00 0.00 N +ATOM 210 H21 DG B 3 2.790 1.039 3.320 1.00 0.00 H +ATOM 211 H22 DG B 3 2.813 2.752 3.436 1.00 0.00 H +ATOM 212 N3 DG B 3 0.384 3.241 3.581 1.00 0.00 N +ATOM 213 C4 DG B 3 -0.973 3.178 3.643 1.00 0.00 C +ATOM 214 C3' DG B 3 -2.210 7.906 3.999 1.00 0.00 C +ATOM 215 H3' DG B 3 -3.141 8.464 3.903 1.00 0.00 H +ATOM 216 C2' DG B 3 -2.261 6.670 3.097 1.00 0.00 C +ATOM 217 H2' DG B 3 -3.189 6.677 2.525 1.00 0.00 H +ATOM 218 H2'' DG B 3 -1.413 6.683 2.414 1.00 0.00 H +ATOM 219 O3' DG B 3 -1.106 8.694 3.577 1.00 0.00 O +ATOM 220 P DT B 4 -0.997 8.602 2.115 1.00 0.00 P +ATOM 221 OP1 DT B 4 -0.745 10.033 2.397 1.00 0.00 O +ATOM 222 OP2 DT B 4 -2.100 8.279 1.183 1.00 0.00 O +ATOM 223 O5' DT B 4 0.406 8.011 1.625 1.00 0.00 O +ATOM 224 C5' DT B 4 1.440 7.769 2.597 1.00 0.00 C +ATOM 225 H5' DT B 4 1.085 7.050 3.336 1.00 0.00 H +ATOM 226 H5'' DT B 4 1.697 8.704 3.095 1.00 0.00 H +ATOM 227 C4' DT B 4 2.678 7.211 1.913 1.00 0.00 C +ATOM 228 H4' DT B 4 3.547 7.361 2.554 1.00 0.00 H +ATOM 229 O4' DT B 4 2.546 5.761 1.808 1.00 0.00 O +ATOM 230 C1' DT B 4 2.250 5.395 0.468 1.00 0.00 C +ATOM 231 H1' DT B 4 3.034 4.740 0.088 1.00 0.00 H +ATOM 232 N1 DT B 4 1.010 4.499 0.443 1.00 0.00 N +ATOM 233 C6 DT B 4 -0.268 4.990 0.493 1.00 0.00 C +ATOM 234 H6 DT B 4 -0.435 6.056 0.554 1.00 0.00 H +ATOM 235 C5 DT B 4 -1.329 4.176 0.415 1.00 0.00 C +ATOM 236 C7 DT B 4 -2.732 4.704 0.469 1.00 0.00 C +ATOM 237 H71 DT B 4 -2.892 5.397 -0.357 1.00 0.00 H +ATOM 238 H72 DT B 4 -3.436 3.875 0.389 1.00 0.00 H +ATOM 239 H73 DT B 4 -2.889 5.223 1.414 1.00 0.00 H +ATOM 240 C4 DT B 4 -1.157 2.753 0.275 1.00 0.00 C +ATOM 241 O4 DT B 4 -2.068 1.930 0.196 1.00 0.00 O +ATOM 242 N3 DT B 4 0.162 2.347 0.233 1.00 0.00 N +ATOM 243 H3 DT B 4 0.343 1.277 0.128 1.00 0.00 H +ATOM 244 C2 DT B 4 1.273 3.161 0.311 1.00 0.00 C +ATOM 245 O2 DT B 4 2.405 2.707 0.265 1.00 0.00 O +ATOM 246 C3' DT B 4 2.910 7.678 0.474 1.00 0.00 C +ATOM 247 H3' DT B 4 2.501 8.680 0.346 1.00 0.00 H +ATOM 248 C2' DT B 4 2.084 6.682 -0.342 1.00 0.00 C +ATOM 249 H2' DT B 4 1.323 7.218 -0.909 1.00 0.00 H +ATOM 250 H2'' DT B 4 2.737 6.144 -1.030 1.00 0.00 H +ATOM 251 O3' DT B 4 4.245 7.616 -0.005 1.00 0.00 O +ATOM 252 HO3' DT B 4 4.365 7.914 -0.909 1.00 0.00 H +CONECT 2 3 +CONECT 3 2 4 6 5 +CONECT 4 3 +CONECT 5 3 +CONECT 6 25 3 7 8 +CONECT 7 6 +CONECT 8 9 6 +CONECT 9 27 8 10 11 +CONECT 10 9 +CONECT 11 24 9 12 +CONECT 12 11 13 14 +CONECT 13 12 +CONECT 14 12 15 +CONECT 15 24 14 16 +CONECT 16 15 17 20 +CONECT 17 16 18 19 +CONECT 18 17 +CONECT 19 17 +CONECT 20 16 21 +CONECT 21 20 22 23 +CONECT 22 21 +CONECT 23 24 21 +CONECT 24 15 23 11 +CONECT 25 6 26 27 30 +CONECT 26 25 +CONECT 27 9 25 28 29 +CONECT 28 27 +CONECT 29 27 +CONECT 30 25 31 +CONECT 31 30 33 34 32 +CONECT 32 31 +CONECT 33 31 +CONECT 34 31 35 +CONECT 35 34 36 37 38 +CONECT 36 35 +CONECT 37 35 +CONECT 38 35 39 40 55 +CONECT 39 38 +CONECT 40 38 41 +CONECT 41 57 40 42 43 +CONECT 42 41 +CONECT 43 41 44 53 +CONECT 44 43 45 46 +CONECT 45 44 +CONECT 46 44 47 48 +CONECT 47 46 +CONECT 48 52 46 49 +CONECT 49 50 48 51 +CONECT 50 49 +CONECT 51 49 +CONECT 52 48 53 +CONECT 53 52 43 54 +CONECT 54 53 +CONECT 55 57 60 56 38 +CONECT 56 55 +CONECT 57 41 55 58 59 +CONECT 58 57 +CONECT 59 57 +CONECT 60 55 61 +CONECT 61 62 60 63 64 +CONECT 62 61 +CONECT 63 61 +CONECT 64 61 65 +CONECT 65 64 66 67 68 +CONECT 66 65 +CONECT 67 65 +CONECT 68 87 65 69 70 +CONECT 69 68 +CONECT 70 68 71 +CONECT 71 73 72 89 70 +CONECT 72 71 +CONECT 73 71 74 85 +CONECT 74 73 75 76 +CONECT 75 74 +CONECT 76 74 77 81 +CONECT 77 76 78 79 80 +CONECT 78 77 +CONECT 79 77 +CONECT 80 77 +CONECT 81 76 82 83 +CONECT 82 81 +CONECT 83 81 84 85 +CONECT 84 83 +CONECT 85 83 73 86 +CONECT 86 85 +CONECT 87 88 89 68 92 +CONECT 88 87 +CONECT 89 87 71 90 91 +CONECT 90 89 +CONECT 91 89 +CONECT 92 93 87 +CONECT 93 92 94 95 96 +CONECT 94 93 +CONECT 95 93 +CONECT 96 93 97 +CONECT 97 96 98 99 100 +CONECT 98 97 +CONECT 99 97 +CONECT 100 120 97 101 102 +CONECT 101 100 +CONECT 102 103 100 +CONECT 103 102 104 105 122 +CONECT 104 103 +CONECT 105 119 103 106 +CONECT 106 105 107 108 +CONECT 107 106 +CONECT 108 106 109 +CONECT 109 119 110 108 +CONECT 110 111 109 112 +CONECT 111 110 +CONECT 112 114 110 113 +CONECT 113 112 +CONECT 114 112 115 118 +CONECT 115 114 116 117 +CONECT 116 115 +CONECT 117 115 +CONECT 118 119 114 +CONECT 119 105 118 109 +CONECT 120 125 100 121 122 +CONECT 121 120 +CONECT 122 124 103 120 123 +CONECT 123 122 +CONECT 124 122 +CONECT 125 120 126 +CONECT 126 125 +CONECT 128 129 +CONECT 129 128 130 131 132 +CONECT 130 129 +CONECT 131 129 +CONECT 132 134 129 133 149 +CONECT 133 132 +CONECT 134 132 135 +CONECT 135 136 137 134 151 +CONECT 136 135 +CONECT 137 135 138 147 +CONECT 138 137 139 140 +CONECT 139 138 +CONECT 140 138 141 142 +CONECT 141 140 +CONECT 142 140 146 143 +CONECT 143 145 144 142 +CONECT 144 143 +CONECT 145 143 +CONECT 146 147 142 +CONECT 147 148 137 146 +CONECT 148 147 +CONECT 149 132 154 151 150 +CONECT 150 149 +CONECT 151 152 153 135 149 +CONECT 152 151 +CONECT 153 151 +CONECT 154 149 155 +CONECT 155 156 157 158 154 +CONECT 156 155 +CONECT 157 155 +CONECT 158 155 159 +CONECT 159 160 161 162 158 +CONECT 160 159 +CONECT 161 159 +CONECT 162 181 159 163 164 +CONECT 163 162 +CONECT 164 165 162 +CONECT 165 164 166 167 183 +CONECT 166 165 +CONECT 167 165 168 180 +CONECT 168 167 169 170 +CONECT 169 168 +CONECT 170 171 168 +CONECT 171 172 170 180 +CONECT 172 176 171 173 +CONECT 173 174 172 175 +CONECT 174 173 +CONECT 175 173 +CONECT 176 172 177 +CONECT 177 176 178 179 +CONECT 178 177 +CONECT 179 177 180 +CONECT 180 179 171 167 +CONECT 181 186 162 183 182 +CONECT 182 181 +CONECT 183 181 165 184 185 +CONECT 184 183 +CONECT 185 183 +CONECT 186 181 187 +CONECT 187 188 186 190 189 +CONECT 188 187 +CONECT 189 187 +CONECT 190 191 187 +CONECT 191 190 192 194 193 +CONECT 192 191 +CONECT 193 191 +CONECT 194 196 195 191 214 +CONECT 195 194 +CONECT 196 194 197 +CONECT 197 196 199 198 216 +CONECT 198 197 +CONECT 199 213 200 197 +CONECT 200 202 201 199 +CONECT 201 200 +CONECT 202 200 203 +CONECT 203 213 204 202 +CONECT 204 206 205 203 +CONECT 205 204 +CONECT 206 208 207 204 +CONECT 207 206 +CONECT 208 206 212 209 +CONECT 209 211 210 208 +CONECT 210 209 +CONECT 211 209 +CONECT 212 213 208 +CONECT 213 199 212 203 +CONECT 214 194 219 215 216 +CONECT 215 214 +CONECT 216 218 217 214 197 +CONECT 217 216 +CONECT 218 216 +CONECT 219 220 214 +CONECT 220 221 222 219 223 +CONECT 221 220 +CONECT 222 220 +CONECT 223 224 220 +CONECT 224 226 223 227 225 +CONECT 225 224 +CONECT 226 224 +CONECT 227 224 229 228 246 +CONECT 228 227 +CONECT 229 227 230 +CONECT 230 231 232 229 248 +CONECT 231 230 +CONECT 232 244 230 233 +CONECT 233 235 234 232 +CONECT 234 233 +CONECT 235 233 240 236 +CONECT 236 239 238 235 237 +CONECT 237 236 +CONECT 238 236 +CONECT 239 236 +CONECT 240 235 241 242 +CONECT 241 240 +CONECT 242 244 243 240 +CONECT 243 242 +CONECT 244 245 232 242 +CONECT 245 244 +CONECT 246 247 251 227 248 +CONECT 247 246 +CONECT 248 249 250 230 246 +CONECT 249 248 +CONECT 250 248 +CONECT 251 246 252 +CONECT 252 251 +MASTER 0 0 0 0 0 0 0 0 252 0 252 0 +END diff --git a/moldesign/_tests/data/bipyridine.mol2 b/moldesign/_tests/data/bipyridine.mol2 new file mode 100644 index 0000000..97e0f24 --- /dev/null +++ b/moldesign/_tests/data/bipyridine.mol2 @@ -0,0 +1,49 @@ +@MOLECULE +***** + 20 21 0 0 0 +SMALL +GASTEIGER + +@ATOM + 1 N0 -0.7015 -1.2104 0.0598 N.ar 1 UNL1 -0.2534 + 2 C1 -1.4095 -0.0497 0.0357 C.ar 1 UNL1 0.0891 + 3 C2 -0.7311 1.1783 0.0646 C.ar 1 UNL1 -0.0342 + 4 C3 0.6605 1.2269 -0.0027 C.ar 1 UNL1 -0.0583 + 5 C4 1.3724 0.0469 -0.0163 C.ar 1 UNL1 -0.0436 + 6 C5 0.6575 -1.1366 0.0579 C.ar 1 UNL1 0.0283 + 7 C6 -2.9039 -0.1126 -0.1283 C.ar 1 UNL1 0.0891 + 8 N7 -3.5029 -1.3283 -0.2388 N.ar 1 UNL1 -0.2534 + 9 C8 -4.8314 -1.3682 -0.5322 C.ar 1 UNL1 0.0283 + 10 C9 -5.6084 -0.2481 -0.7751 C.ar 1 UNL1 -0.0436 + 11 C10 -5.0146 0.9870 -0.6303 C.ar 1 UNL1 -0.0583 + 12 C11 -3.6706 1.0545 -0.2661 C.ar 1 UNL1 -0.0342 + 13 H12 -1.2549 2.1214 0.1109 H 1 UNL1 0.0639 + 14 H13 1.1641 2.1886 -0.0484 H 1 UNL1 0.0619 + 15 H14 2.4567 0.0509 -0.0673 H 1 UNL1 0.0633 + 16 H15 1.1771 -2.0879 0.1185 H 1 UNL1 0.0830 + 17 H16 -5.2721 -2.3596 -0.5697 H 1 UNL1 0.0830 + 18 H17 -6.6538 -0.3342 -1.0547 H 1 UNL1 0.0633 + 19 H18 -5.5730 1.9036 -0.7995 H 1 UNL1 0.0619 + 20 H19 -3.2478 2.0379 -0.1250 H 1 UNL1 0.0639 +@BOND + 1 6 5 ar + 2 6 1 ar + 3 20 12 1 + 4 11 10 ar + 5 5 4 ar + 6 9 8 ar + 7 3 2 ar + 8 7 2 1 + 9 8 7 ar + 10 10 9 ar + 11 2 1 ar + 12 12 11 ar + 13 12 7 ar + 14 16 6 1 + 15 19 11 1 + 16 14 4 1 + 17 15 5 1 + 18 17 9 1 + 19 18 10 1 + 20 4 3 ar + 21 13 3 1 diff --git a/moldesign/_tests/data/bipyridine.sdf b/moldesign/_tests/data/bipyridine.sdf new file mode 100644 index 0000000..a657614 --- /dev/null +++ b/moldesign/_tests/data/bipyridine.sdf @@ -0,0 +1,47 @@ + + OpenBabel08101621003D + + 20 21 0 0 0 0 0 0 0 0999 V2000 + -0.7015 -1.2104 0.0598 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4095 -0.0497 0.0357 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7311 1.1783 0.0646 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.6605 1.2269 -0.0027 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.3724 0.0469 -0.0163 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.6575 -1.1366 0.0579 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.9039 -0.1126 -0.1283 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.5029 -1.3283 -0.2388 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.8314 -1.3682 -0.5322 C 0 0 0 0 0 0 0 0 0 0 0 0 + -5.6084 -0.2481 -0.7751 C 0 0 0 0 0 0 0 0 0 0 0 0 + -5.0146 0.9870 -0.6303 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.6706 1.0545 -0.2661 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2549 2.1214 0.1109 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1641 2.1886 -0.0484 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4567 0.0509 -0.0673 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1771 -2.0879 0.1185 H 0 0 0 0 0 0 0 0 0 0 0 0 + -5.2721 -2.3596 -0.5697 H 0 0 0 0 0 0 0 0 0 0 0 0 + -6.6538 -0.3342 -1.0547 H 0 0 0 0 0 0 0 0 0 0 0 0 + -5.5730 1.9036 -0.7995 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.2478 2.0379 -0.1250 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2 1 2 0 0 0 0 + 3 2 1 0 0 0 0 + 4 3 2 0 0 0 0 + 5 4 1 0 0 0 0 + 6 5 2 0 0 0 0 + 6 1 1 0 0 0 0 + 7 2 1 0 0 0 0 + 8 7 2 0 0 0 0 + 9 8 1 0 0 0 0 + 10 9 2 0 0 0 0 + 11 10 1 0 0 0 0 + 12 11 2 0 0 0 0 + 12 7 1 0 0 0 0 + 13 3 1 0 0 0 0 + 14 4 1 0 0 0 0 + 15 5 1 0 0 0 0 + 16 6 1 0 0 0 0 + 17 9 1 0 0 0 0 + 18 10 1 0 0 0 0 + 19 11 1 0 0 0 0 + 20 12 1 0 0 0 0 +M END +$$$$ diff --git a/moldesign/_tests/data/bipyridine.xyz b/moldesign/_tests/data/bipyridine.xyz new file mode 100644 index 0000000..1af7c73 --- /dev/null +++ b/moldesign/_tests/data/bipyridine.xyz @@ -0,0 +1,22 @@ +20 + +N -0.70146 -1.21041 0.05981 +C -1.40947 -0.04966 0.03570 +C -0.73107 1.17826 0.06459 +C 0.66051 1.22692 -0.00267 +C 1.37237 0.04687 -0.01631 +C 0.65746 -1.13662 0.05787 +C -2.90390 -0.11263 -0.12831 +N -3.50292 -1.32833 -0.23877 +C -4.83136 -1.36820 -0.53219 +C -5.60843 -0.24807 -0.77508 +C -5.01459 0.98698 -0.63027 +C -3.67060 1.05453 -0.26612 +H -1.25489 2.12136 0.11089 +H 1.16407 2.18862 -0.04841 +H 2.45667 0.05087 -0.06733 +H 1.17706 -2.08790 0.11855 +H -5.27209 -2.35957 -0.56974 +H -6.65380 -0.33424 -1.05474 +H -5.57299 1.90361 -0.79947 +H -3.24778 2.03785 -0.12496 diff --git a/moldesign/_tests/helpers.py b/moldesign/_tests/helpers.py new file mode 100644 index 0000000..b210754 --- /dev/null +++ b/moldesign/_tests/helpers.py @@ -0,0 +1,43 @@ +import moldesign as mdt +from moldesign import units as u +import numpy as np + +DEFSTEP = 0.0000005*u.angstrom + + +def num_grad(mol, fn, step=DEFSTEP, fnargs=None, fnkwargs=None): + grad = None + origpos = mol.positions.copy() + if fnargs is None: + fnargs = tuple() + if fnkwargs is None: + fnkwargs = dict() + + for iatom, atom in enumerate(mol.atoms): + for idim in xrange(3): + atom.position[idim] += step + vplus = fn(*fnargs, **fnkwargs) + atom.position[idim] -= 2.0 * step + vminus = fn(*fnargs, **fnkwargs) + mol.positions = origpos # reset positions + + if grad is None: + grad = np.zeros(mol.positions.shape) * vplus.units/mol.positions.units + grad[iatom, idim] = (vplus - vminus) / (2.0*step) + + return grad + + +def _make_mol_with_n_hydrogens(n): + return mdt.Molecule([mdt.Atom('H') for i in xrange(n)]) + + +class ZeroEnergy(mdt.models.base.EnergyModelBase): + """ All 0, all the time + """ + def prep(self): + pass + + def calculate(self): + return dict(potential_energy=0.0*u.default.energy, + forces=np.zeros(self.mol.positions.shape)*u.default.force) \ No newline at end of file diff --git a/moldesign/_tests/test_constraints.py b/moldesign/_tests/test_constraints.py new file mode 100644 index 0000000..71be63d --- /dev/null +++ b/moldesign/_tests/test_constraints.py @@ -0,0 +1,164 @@ +""" Tests constraint routines +""" +import pytest +import numpy as np + +import moldesign as mdt +from moldesign import units as u + +from . import helpers + +registered_types = {} + +def typedfixture(*types, **kwargs): + """This is a decorator that lets us associate fixtures with one or more arbitrary types. + We'll later use this type to determine what tests to run on the result""" + + def fixture_wrapper(func): + for t in types: + registered_types.setdefault(t, []).append(func.__name__) + return pytest.fixture(**kwargs)(func) + + return fixture_wrapper + + +@pytest.fixture +def four_particle_45_twist(): + mol = helpers._make_mol_with_n_hydrogens(4) + mol.positions = u.nm*[[0.1, 0.0, -0.5], + [0.0, 0.0, -0.5], + [0.0, 0.0, 0.5], + [0.2, -0.2, 0.5]] + + for iatom in xrange(3): + mol.atoms[iatom].bond_to(mol.atoms[iatom+1], 1) + + return mol + + +@typedfixture('constraint') +def dihedral_constraint_satisfied(four_particle_45_twist): + mol = four_particle_45_twist + c = mol.constrain_dihedral(*mol.atoms) + return mol, c + + +@typedfixture('constraint') +def dihedral_constraint_unsatisfied(dihedral_constraint_satisfied): + mol, c = dihedral_constraint_satisfied + mol.atoms[0].z += 0.1*u.angstrom + mol.atoms[1].x += -1.0 * u.angstrom + mol.atoms[2].z -= -0.6 * u.angstrom + return mol, c + + +@typedfixture('constraint') +def angle_constraint_satisfied(four_particle_45_twist): + mol = four_particle_45_twist + c = mol.constrain_angle(*mol.atoms[:3]) + return mol, c + + +@typedfixture('constraint') +def angle_constraint_unsatisfied(angle_constraint_satisfied): + mol, c = angle_constraint_satisfied + mol.atoms[1].x += -1.0 * u.angstrom + mol.atoms[2].z -= -0.6 * u.angstrom + return mol, c + + +@typedfixture('constraint') +def distance_constraint_satisfied(four_particle_45_twist): + mol = four_particle_45_twist + c = mol.constrain_distance(mol.atoms[1], mol.atoms[2]) + return mol, c + + +@typedfixture('constraint') +def distance_constraint_unsatisfied(distance_constraint_satisfied): + mol, c = distance_constraint_satisfied + mol.atoms[1].x += -1.0 * u.angstrom + mol.atoms[2].z -= -0.6 * u.angstrom + return mol, c + + +@typedfixture('constraint') +def atom_position_constraint_unsatisfied(four_particle_45_twist): + mol = four_particle_45_twist + c = mol.constrain_atom(mol.atoms[2]) + mol.atoms[2].x += 1.0*u.angstrom # the gradient is singular when exactly satisfied + return mol, c + + +@typedfixture('constraint') +def atom_coordinate_constraint_satisfied(four_particle_45_twist): + mol = four_particle_45_twist + c = mdt.geom.FixedCoordinate(mol.atoms[3], vector=np.array([1,1,-1])) + return mol, c + + +@typedfixture('constraint') +def angle_constraint_unsatisfied(atom_coordinate_constraint_satisfied): + mol, c = atom_coordinate_constraint_satisfied + mol.atoms[3].x += -1.0 * u.angstrom + mol.atoms[3].y -= -1.0 * u.angstrom + return mol, c + + +def test_distance_constraint(distance_constraint_satisfied): + mol, c = distance_constraint_satisfied + + # satisfied + np.testing.assert_allclose(c.current().value_in(u.nm), + 1.0) + assert c.satisfied() + assert abs(c.error().value_in(u.nm)) <= 1e-10 + + # unsatisfied + mol.atoms[1].z = -0.6 * u.nm + assert not c.satisfied() + assert abs(c.error().value_in(u.nm) - 0.1) <= 1e-10 + + +@pytest.mark.parametrize('objkey', registered_types['constraint']) +def test_constraint_gradient(objkey, request): + mol, c = request.getfuncargvalue(objkey) + + calc_grad = c.gradient() + num_grad = helpers.num_grad(mol, c.error) + np.testing.assert_allclose(num_grad.defunits_value(), + calc_grad.defunits_value(), + atol=5.0*helpers.DEFSTEP.defunits_value()) + + + +def test_dihedral_constraint_errors(four_particle_45_twist): + mol = four_particle_45_twist + constraint = mol.constrain_dihedral(*mol.atoms) + + assert constraint.error() == 0.0 + assert constraint.satisfied() + + constraint.value = 30.0 * u.degrees + np.testing.assert_allclose(constraint.error().value_in(u.degrees), 15.0) + assert not constraint.satisfied() + + + constraint.value = 60.0 * u.degrees + np.testing.assert_allclose(constraint.error().value_in(u.degrees), -15.0) + assert not constraint.satisfied() + + + +def test_dihedral_constraint_errors_at_0(four_particle_45_twist): + mol = four_particle_45_twist + mol.atoms[3].position = [0.1, 0.0, 0.5] * u.angstrom + + constraint = mol.constrain_dihedral(*mol.atoms) + assert constraint.error() == 0.0 + assert constraint.satisfied() + + for angle in (0, -10, 10, 90, -90) * u.degrees: + constraint.value = angle + np.testing.assert_allclose(constraint.error().value_in(u.degrees), -angle.magnitude) + diff --git a/moldesign/_tests/test_data_structures.py b/moldesign/_tests/test_data_structures.py index 4a841e2..15c5849 100644 --- a/moldesign/_tests/test_data_structures.py +++ b/moldesign/_tests/test_data_structures.py @@ -1,3 +1,6 @@ +""" Tests Molecule instances and other base classes they depend on +""" + import pickle import random @@ -12,6 +15,7 @@ registered_types = {} + def typedfixture(*types, **kwargs): """This is a decorator that lets us associate fixtures with one or more arbitrary types. We'll later use this type to determine what tests to run on the result""" @@ -55,24 +59,7 @@ def test_dictlike(objkey, request): assert set(dd.values()) == {'b', 3, 'e'} -######################################## -# Test the unit system -def test_units(): - assert u.default.length == u.angstrom - assert u.default.mass == u.amu - assert u.default.energy == u.eV - - -def test_default_unit_conversions(): - my_list = [1.0*u.angstrom, 1.0*u.nm, 1.0*u.a0] - my_array = u.array(my_list).defunits() - assert my_array.get_units() == u.default.convert(my_array).get_units() - result = my_array.value_in(u.nm) - np.testing.assert_almost_equal(result[0], 0.1, 9) - np.testing.assert_almost_equal(result[1], 1.0, 9) - np.testing.assert_almost_equal(result[2], 0.05291772, 7) - - +# Some objects with units @typedfixture('object') def list_of_units(): return [1.0 * u.angstrom, 1.0 * u.nm, 1.0 * u.a0] @@ -201,14 +188,15 @@ def test_h2_hierarchy(h2): assert chain == atom1.chain == atom2.chain assert res == atom1.residue == atom2.residue + def test_h2_array_link(h2): atom1, atom2 = h2.atoms - atom2.momentum[1] = 3.0 * u.default.momentum - h2.positions[0, 1] = 0.1 * u.angstrom + atom2.momentum[1] = 3.0*u.default.momentum + h2.positions[0, 1] = 0.1*u.angstrom assert atom1.index == 0 and atom2.index == 1 - assert atom1.y == 0.1 * u.angstrom - assert h2.momenta[1, 1] == 3.0 * u.default.momentum - assert h2.atoms[1].py == 3.0 * u.default.momentum + assert atom1.y == 0.1*u.angstrom + assert h2.momenta[1, 1] == 3.0*u.default.momentum + assert h2.atoms[1].py == 3.0*u.default.momentum def test_copy_breaks_link(h2): @@ -230,10 +218,12 @@ def test_h2_harmonic_oscillator(h2_harmonic): mol = h2_harmonic atoms = h2_harmonic.atoms atoms[0].x = -1.0*u.angstrom + atoms[1].x = 0.0*u.angstrom + atoms[1].y = 0.3 * u.angstrom e1 = mol.calc_potential_energy() - f1 = mol.forces[0] + f1 = mol.forces[0,0] atoms[0].x = 1.0*u.angstrom - f2 = mol.calc_forces()[0] + f2 = mol.calc_forces()[0,0] e2 = mol.potential_energy assert e1 == e2 == 0.5*u.kcalpermol @@ -254,6 +244,7 @@ def test_h2_harmonic_copy_loses_simulation(h2_harmonic_copy, h2_harmonic): assert mol.atoms[0].bond_graph[mol.atoms[1]] == 1 assert mol.atoms[1].bond_graph[mol.atoms[0]] == 1 + def test_h2_calculation_caching(h2_harmonic): h2 = h2_harmonic h2.properties = moldesign.molecules.molecule.MolecularProperties(h2) @@ -270,6 +261,7 @@ def test_h2_calculation_caching(h2_harmonic): assert props2.potential_energy == h2.potential_energy == true_energy assert h2.calc_potential_energy() == true_energy + def test_h2_cache_flush(h2_harmonic): h2 = h2_harmonic pe = h2.calc_potential_energy() @@ -278,7 +270,8 @@ def test_h2_cache_flush(h2_harmonic): pe2 = h2.calc_potential_energy() f2 = h2.forces assert pe != pe2 - assert not np.array_equal(f,f2) + assert not np.array_equal(f, f2) + def test_h2_not_calculated_yet(h2_harmonic): h2_harmonic.calculate() @@ -288,6 +281,7 @@ def test_h2_not_calculated_yet(h2_harmonic): with pytest.raises(moldesign.exceptions.NotCalculatedError): h2_harmonic.potential_energy + def h2_properties_raises_not_calculated_yet(h2_harmonic): h2_harmonic.calculate() h2_harmonic.atoms[1].x += 0.3*u.ang @@ -296,6 +290,7 @@ def h2_properties_raises_not_calculated_yet(h2_harmonic): with pytest.raises(moldesign.exceptions.NotCalculatedError): h2_harmonic.properties.potential_energy + @typedfixture('submolecule') def copy_atoms_from_h2_harmonic(h2_harmonic): atoms = h2_harmonic.atoms.copy() @@ -376,6 +371,7 @@ def ligand3aid(ligand_residue_3aid): newmol = mdt.Molecule(ligand_residue_3aid) return newmol + @pytest.fixture def random_atoms_from_3aid(pdb3aid): atoms = moldesign.molecules.atomcollections.AtomList(random.sample(pdb3aid.atoms, 10)) @@ -402,12 +398,22 @@ def test_ligand3aid(ligand3aid): assert len(mol.residues) == 1 +def test_nucleic_build(nucleic): + mol = nucleic + assert mol.num_chains == 2 + assert mol.num_residues == 8 + assert mol.chains[0] is mol.chains['A'] + assert mol.chains[1] is mol.chains['B'] + assert len(mol.chains[0].residues) == len(mol.chains[1].residues) == 4 + + + ###################################### # Tests around a piece of DNA @typedfixture('molecule', scope='session') def nucleic(): - mol = mdt.interfaces.openmm.amber_to_mol('../notebooks/data/nuc.prmtop', - '../notebooks/data/nuc.inpcrd') + # ACTG.pdb contains a molecule generated using mdt.build_dna('ACTG') + mol = mdt.read('data/ACTG.pdb') return mol @@ -527,14 +533,6 @@ def test_pickled_equality(objkey, request): assert (y == obj).all() -@pytest.mark.parametrize('fixture_name', moldesign_objects) -def test_markdown_repr(fixture_name, request): - """Just tests whether it works, not its content""" - obj = request.getfuncargvalue(fixture_name) - result = obj._repr_markdown_() - assert bool(result) - - @pytest.mark.parametrize('fixture_key', ['h2_harmonic_atoms', 'ligand_3aid_atoms', 'random_atoms_from_3aid']) diff --git a/moldesign/_tests/test_distributed.py b/moldesign/_tests/test_distributed.py deleted file mode 100644 index 9bb8b16..0000000 --- a/moldesign/_tests/test_distributed.py +++ /dev/null @@ -1,12 +0,0 @@ -import moldesign as mdt -from moldesign import units as u - - -def test_amber_tleap(): - mol = mdt.read('../data/nuc.pdb') - model = moldesign.methods.models.OpenMMPotential(implicit_solvent='obc', - cutoff=8.0*u.angstrom, - force_field='ff14SB') - mol.set_energy_model(model) - result = mol.calculate(wait=True) - assert 'potential_energy' in result and 'forces' in result \ No newline at end of file diff --git a/moldesign/_tests/test_geometry.py b/moldesign/_tests/test_geometry.py new file mode 100644 index 0000000..42c64f7 --- /dev/null +++ b/moldesign/_tests/test_geometry.py @@ -0,0 +1,262 @@ +""" Tests geometry routines +""" +import random + +import itertools +import pytest +import numpy as np + +import moldesign as mdt +from moldesign import units as u + +from . import helpers + +registered_types = {} + +# TODO: automated method testing based on its metadata - i.e. test to make sure parameters are +# honored, test that it calcultes what it says it does, test that properties have the right +# units and array shapes, etc. + +# step for numerical derivative testing + + +def typedfixture(*types, **kwargs): + """This is a decorator that lets us associate fixtures with one or more arbitrary types. + We'll later use this type to determine what tests to run on the result""" + + def fixture_wrapper(func): + for t in types: + registered_types.setdefault(t, []).append(func.__name__) + return pytest.fixture(**kwargs)(func) + + return fixture_wrapper + + +def _make_mol_with_n_hydrogens(n): + return mdt.Molecule([mdt.Atom('H') for i in xrange(n)]) + + +def _apply_random_offsets(mol, idim): + mol.positions[:, idim] += (random.random()-0.5)*100.0*u.angstrom + + +@typedfixture('atomcontainer') +def three_particle_right_angle(): + mol = _make_mol_with_n_hydrogens(3) + mol.atoms[0].x = 1.0 * u.angstrom + mol.atoms[2].y = 1.0 * u.angstrom + + for idim in xrange(3): + _apply_random_offsets(mol, idim) + + return mol + + +@typedfixture('atomcontainer') +def four_particle_45_twist(): + mol = _make_mol_with_n_hydrogens(4) + mol.positions = u.nm*[[0.1, 0.0, -0.5], + [0.0, 0.0, -0.5], + [0.0, 0.0, 0.5], + [0.2, -0.2, 0.5]] + + for idim in xrange(3): + _apply_random_offsets(mol, idim) + + for iatom in xrange(3): + mol.atoms[iatom].bond_to(mol.atoms[iatom+1], 1) + + return mol + + +######################## +# Dihedrals # +######################## +def test_dihedral_measure(four_particle_45_twist): + mol = four_particle_45_twist + np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms).value_in(u.degrees), + 45.0, + decimal=8) + + +def test_dihedral_two_atom_selection(four_particle_45_twist): + mol = four_particle_45_twist + np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms[1:3]).value_in(u.degrees), + 45.0, + decimal=8) + + with pytest.raises(ValueError): # raises exception because it's not part of a dihedral + mdt.dihedral(mol.atoms[0], mol.atoms[1]) + + +def test_set_dihedral(four_particle_45_twist): + mol = four_particle_45_twist + mdt.set_dihedral(mol.atoms[0], mol.atoms[1], mol.atoms[2], mol.atoms[3], 10.0 * u.degrees) + np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms).value_in(u.degrees), + 10.0, + decimal=8) + + +def test_set_dihedral_sign_convention(four_particle_45_twist): + mol = four_particle_45_twist + mdt.set_dihedral(mol.atoms[0], mol.atoms[1], mol.atoms[2], mol.atoms[3], -23.0 * u.degrees) + np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms).value_in(u.degrees), + 337.0, + decimal=8) + + +def test_set_dihedral_two_atom_selection(four_particle_45_twist): + mol = four_particle_45_twist + mdt.set_dihedral(mol.atoms[1], mol.atoms[2], 10.0 * u.degrees) + np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms).value_in(u.degrees), + 10.0, + decimal=8) + + with pytest.raises(ValueError): # raises exception because it's not part of a dihedral + mdt.set_dihedral(mol.atoms[0], mol.atoms[1], 5.0 * u.degrees) + + +def test_dihedral_sign_convention(four_particle_45_twist): + mol = four_particle_45_twist + mol.atoms[-1].y += 0.4 * u.nm + np.testing.assert_almost_equal(mdt.dihedral(*mol.atoms).value_in(u.degrees), + 315.0, + decimal=8) + +# TODO: test behavior at discontinuities (180, -180) + +def test_dihedral_gradient(four_particle_45_twist): + mol = four_particle_45_twist + + dihe = mdt.DihedralMonitor(*mol.atoms) + calc_grad = dihe.gradient() + num_grad = helpers.num_grad(mol, lambda: dihe.value) + + np.testing.assert_allclose(calc_grad.defunits_value(), + num_grad.defunits_value(), + atol=5.0*helpers.DEFSTEP.defunits_value()) + + +def test_dihedral_gradient_sign_convention(four_particle_45_twist): + mol = four_particle_45_twist + mol.atoms[-1].y += 0.4 * u.nm + dihe = mdt.DihedralMonitor(*mol.atoms) + calc_grad = dihe.gradient() + num_grad = helpers.num_grad(mol, lambda: dihe.value) + + np.testing.assert_allclose(calc_grad, + num_grad, + atol=5.0*helpers.DEFSTEP.defunits_value()) + + +######################## +# Angles # +######################## +def test_angle_measure(three_particle_right_angle): + mol = three_particle_right_angle + np.testing.assert_almost_equal(mdt.angle(*mol.atoms).value_in(u.degrees), + 90.0, + decimal=8) + + +def test_angle_gradient(three_particle_right_angle): + mol = three_particle_right_angle + + ang = mdt.AngleMonitor(*mol.atoms) + assert abs(ang.value.value_in(u.degrees) - 90.0) <= 1.0e-8 + calc_grad = ang.gradient() + num_grad = helpers.num_grad(mol, lambda:ang.value) + + np.testing.assert_allclose(calc_grad.defunits_value(), + num_grad.defunits_value(), + atol=5.0*helpers.DEFSTEP.defunits_value()) + + +######################## +# Distances # +######################## +def test_distance_array(three_particle_right_angle): + mol = three_particle_right_angle + + desired_distance_array = u.angstrom*[[0.0, 1.0, np.sqrt(2)], + [1.0, 0.0, 1.0], + [np.sqrt(2), 1.0, 0.0]] + distance_array = mol.calc_distance_array() + + np.testing.assert_allclose(distance_array, + desired_distance_array, + atol=1e-8) + + +@pytest.mark.parametrize('objkey', registered_types['atomcontainer']) +def test_atomic_distance_measures_are_consistent(objkey, request): + mol = request.getfuncargvalue(objkey) + + distance_array = mol.calc_distance_array() + + for i, j in itertools.product(xrange(3), xrange(3)): + ai, aj = mol.atoms[i], mol.atoms[j] + assert ai.distance(aj) == distance_array[i, j] + assert mdt.distance(ai, aj) == distance_array[i, j] + np.testing.assert_almost_equal(np.sum((ai.position - aj.position)**2).defunits_value(), + (distance_array[i, j]**2).defunits_value(), + decimal=10) + + +def test_center_of_mass(four_particle_45_twist): + mol = four_particle_45_twist + + mol.positions = u.nm*[[0.1, 0.0, -0.5], + [0.0, 0.0, -0.5], + [0.0, 0.0, 0.5], + [0.2, -0.2, 0.5]] + + desired_com_angstroms = np.array([0.1+0.2, -0.2, 0.0]) * 10.0 / 4.0 + np.testing.assert_almost_equal(mol.center_of_mass.defunits_value(), + desired_com_angstroms) + + mol.atoms[0].mass = 5.0 * u.ureg.kilograms + mol.atoms[1].mass = 10.0 * u.ureg.kilograms + mol.atoms[2].mass = 5.0 * u.ureg.kilograms + mol.atoms[3].mass = 10.0 * u.ureg.kilograms + + desired_com_angstroms = np.array([0.1+0.4, -0.4, 0.0]) * 10.0 / 6.0 + np.testing.assert_almost_equal(mol.center_of_mass.defunits_value(), + desired_com_angstroms) + + +def test_distance_gradient(three_particle_right_angle): + mol = three_particle_right_angle + + dist = mdt.DistanceMonitor(*mol.atoms[:2]) + assert dist.value == mol.atoms[0].distance(mol.atoms[1]) + + calc_grad = dist.gradient() + num_grad = helpers.num_grad(mol, lambda:dist.value) + + np.testing.assert_allclose(calc_grad.defunits_value(), + num_grad.defunits_value(), + atol=5.0*helpers.DEFSTEP.defunits_value()) + +######################### +# Utilities # +######################### +def test_sub_angles(): + from moldesign.geom import sub_angles + np.testing.assert_allclose(sub_angles(np.pi*u.radian, np.pi/2.0*u.radian), + np.pi/2.0 * u.radian) + + np.testing.assert_allclose(sub_angles(360*u.degrees, 179*u.degrees), + -179*u.degrees) + + np.testing.assert_allclose(sub_angles(360*u.degrees, 3*u.degrees), + -3*u.degrees) + + np.testing.assert_allclose(sub_angles(720*u.degrees, -360*u.degrees), + 0*u.degrees) + + np.testing.assert_allclose(sub_angles(180*u.degrees, 270*u.degrees), + -90*u.degrees) + + np.testing.assert_allclose(sub_angles(270*u.degrees, 0*u.degrees), + -90*u.degrees) diff --git a/moldesign/_tests/test_imports.py b/moldesign/_tests/test_imports.py new file mode 100644 index 0000000..5074220 --- /dev/null +++ b/moldesign/_tests/test_imports.py @@ -0,0 +1,9 @@ +import pytest +import sys + + +def test_lazy_imports(): + import moldesign + + for mod in 'simtk simtk.openmm pyscf pdbfixer scipy': + assert mod not in sys.modules diff --git a/moldesign/_tests/test_io.py b/moldesign/_tests/test_io.py new file mode 100644 index 0000000..ba7dd34 --- /dev/null +++ b/moldesign/_tests/test_io.py @@ -0,0 +1,84 @@ +""" Tests for molecule creation and file i/o +""" +import collections + +import pytest + +import moldesign as mdt +mdt.compute.config.engine_type = 'docker' +from moldesign import units as u + + +@pytest.fixture +def bipyridine_sdf(): + return mdt.read('data/bipyridine.sdf') + + +@pytest.fixture +def bipyridine_xyz(): + return mdt.read('data/bipyridine.xyz') + + +@pytest.fixture +def bipyridine_mol2(): + return mdt.read('data/bipyridine.mol2') + + +@pytest.fixture +def bipyridine_iupac(): + return mdt.from_name('bipyridine') + + +@pytest.fixture +def bipyridine_smiles(): + return mdt.from_smiles('c1ccnc(c1)c2ccccn2') + +ATOMDATA = { # (symbol, valence, mass) + 1: ('H', 1, 1.008 * u.amu), + 6: ('C', 4, 12.000 * u.amu), + 7: ('N', 3, 14.003 * u.amu), + 8: ('O', 2, 15.995 * u.amu)} + + +@pytest.mark.parametrize('key', 'mol2 xyz sdf iupac smiles'.split()) +def test_read_bipyridine_from_format(key, request): + mol = request.getfuncargvalue('bipyridine_'+key) + + atomcounts = collections.Counter(atom.symbol for atom in mol.atoms) + assert len(atomcounts) == 3 + assert atomcounts['C'] == 10 + assert atomcounts['N'] == 2 + assert atomcounts['H'] == 8 + + assert mol.charge == 0 + assert abs(mol.mass - 156.069*u.amu) < 0.001 * u.amu + for atom in mol.atoms: + assert atom.formal_charge == 0.0 + symb, val, mss = ATOMDATA[atom.atnum] + assert atom.symbol == symb + assert atom.valence == val + assert abs(atom.mass - mss) < 0.001 * u.amu + + assert mol.num_bonds == 21 + bondorders = collections.Counter(bond.order for bond in mol.bonds) + assert bondorders[2] == 6 + assert bondorders[1] == 15 + assert len(bondorders) == 2 + + +@pytest.fixture +def dna_pdb(): + return mdt.read('data/ACTG.pdb') + +@pytest.fixture +def dna_mmcif(): + return mdt.read('data/ACTG.cif') + +@pytest.fixture +def dna_sequence(): + return mdt.build_bdna('ACTG') + + +@pytest.mark.parametrize('key', 'pdb mmcif sequence'.split()) +def test_read_dna_from_format(key, request): + mol = request.getfuncargvalue('dna_'+key) diff --git a/moldesign/_tests/test_math.py b/moldesign/_tests/test_math.py index 5e94cf6..62d71c9 100644 --- a/moldesign/_tests/test_math.py +++ b/moldesign/_tests/test_math.py @@ -1,9 +1,13 @@ +""" Tests internal math routines +""" + import random import numpy as np import numpy.testing as npt import pytest +import moldesign from moldesign import units as u registered_types = {} diff --git a/moldesign/_tests/test_openmm.py b/moldesign/_tests/test_openmm.py deleted file mode 100644 index 0875fc4..0000000 --- a/moldesign/_tests/test_openmm.py +++ /dev/null @@ -1,31 +0,0 @@ -import pytest - - -def test_openmm_retains_atom_numbering(fixture_name, request): - mol = request.getfuncargvalue(fixture_name) - assert mol.num_atoms == mol.energy_model.sim.system.getNumParticles() - for iatom, (atom, stkatom) in enumerate(zip(mol.atoms, - mol.energy_model.sim.topology.atoms())): - assert atom.elem == stkatom.element.symbol - assert iatom == atom.index == stkatom.index - - -def test_only_hydrogen_bonds_constrained(fixture_name, request): - mol = request.getfuncargvalue(fixture_name) - sim = mol.energy_model.sim - all_hydrogens = set([atom for atom in mol.atoms if atom.atnum == 1]) - for ibond in xrange(mol.num_atoms): - i, j, val = sim.system.getConstraintParameters(ibond) - ai = mol.atoms[i] - aj = mol.atoms[j] - if ai.elem == 'H': # exactly one of the atoms should be hydrogen - assert aj.elem != 'H' - h = ai - else: - assert aj.elem == 'H' - h = aj - assert h in all_hydrogens - all_hydrogens.pop(h) - assert len(all_hydrogens) == 0 - - diff --git a/moldesign/_tests/test_primary_structure.py b/moldesign/_tests/test_primary_structure.py new file mode 100644 index 0000000..a42c4cd --- /dev/null +++ b/moldesign/_tests/test_primary_structure.py @@ -0,0 +1,173 @@ +""" Tests introspection and methods for protein primary structure +""" +import itertools +import pytest + +import moldesign as mdt +from moldesign import units as u + + +fixture_types = {} + + +def typedfixture(*types, **kwargs): + """This is a decorator that lets us associate fixtures with one or more arbitrary types. + We'll later use this type to determine what tests to run on the result""" + + def fixture_wrapper(func): + for t in types: + fixture_types.setdefault(t, []).append(func.__name__) + return pytest.fixture(**kwargs)(func) + + return fixture_wrapper + + +@typedfixture('3AID', 'protein') +def protease_pdb(): + return mdt.read('data/3aid.pdb') + + +@typedfixture('3AID', 'protein') +def protease_cif(): + return mdt.read('data/3aid.cif') + + +def test_3aid_cif_chains(protease_cif): + mol = protease_cif + assert len(mol.chains) == 5 + assert mol.chains['A'].num_residues == mol.chains['B'].num_residues == 99 + + assert mol.chains['C'].num_residues == 1 + assert mol.chains['C'].type == mol.chains['C'].residues[0].type == 'unknown' + + assert mol.chains['D'].type == mol.chains['D'].type == 'water' + + +def test_3aid_cif_separate_waters(protease_cif): + mol = protease_cif + assert mol.chains['D'].num_residues == 5 + assert mol.chains['E'].num_residues == 3 + + +@pytest.mark.parametrize('fixture', fixture_types['3AID']) +def test_3aid_chain_properties(fixture, request): + mol = request.getfuncargvalue(fixture) + for chainid in 'AB': + c = mol.chains[chainid] + assert c.n_terminal == c.residues['PRO1'] + assert c.c_terminal == c.residues['PHE99'] + assert c.type == 'protein' + + +@pytest.mark.parametrize('fixture', fixture_types['3AID']) +def test_3aid_primary_structure_access_methods(fixture, request): + mol = request.getfuncargvalue(fixture) + + a1 = mol.chains['A'].residues['GLN2'].atoms['CB'] + assert a1 is mol.atoms[a1.index] + assert a1 is mol.chains.A.residues.GLN2.atoms.CB + assert a1 is mol.chains.A.GLN2.CB + assert 'GLN2' in dir(mol.chains.A) + assert 'CB' in dir(mol.chains.A.GLN2) + + + +@pytest.mark.parametrize('fixture', fixture_types['3AID']) +def test_3aid_atom_selection(fixture, request): + mol = request.getfuncargvalue(fixture) + + a1 = mol.chains['A'].residues['GLN2'].atoms['CB'] + a2 = mol.chains['B'].residues['LYS20'].atoms['O'] + assert abs(a1.distance(a2) - 27.206*u.angstrom) < 0.001 * u.angstrom + + +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_chain_lookup_by_name_and_index(fixture, request): + mol = request.getfuncargvalue(fixture) + + for ic, chain in enumerate(mol.chains): + assert mol.chains[chain.index] is chain + assert mol.chains[chain.name] is chain + assert mol.chains[ic] is chain + assert getattr(mol.chains, chain.name) is chain + + +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_residue_lookup_by_name_and_index(fixture, request): + mol = request.getfuncargvalue(fixture) + + for chain in mol.chains: + for ires, residue in enumerate(chain.residues): + assert mol.residues[residue.index] is residue + assert chain[residue.name] is residue + assert chain[ires] is residue + assert getattr(chain, residue.name) is residue + + assert chain.residues[residue.name] is residue + assert chain.residues[ires] is residue + assert getattr(chain.residues, residue.name) is residue + + assert residue.chain is chain + + +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_atom_lookup_by_name_and_index(fixture, request): + mol = request.getfuncargvalue(fixture) + + for residue in mol.residues: + for iatom, atom in enumerate(residue.atoms): + assert residue[atom.name] is atom + assert residue[iatom] is atom + assert getattr(residue,atom.name) is atom + + assert residue.atoms[atom.name] is atom + assert residue.atoms[iatom] is atom + assert getattr(residue.atoms, atom.name) is atom + + assert mol.atoms[atom.index] is atom + + assert atom.chain is residue.chain + assert atom.residue is residue + + +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_molecule_links(fixture, request): + mol = request.getfuncargvalue(fixture) + + for obj in itertools.chain(mol.atoms, mol.residues, mol.chains): + assert obj.molecule == mol + + +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_chains_iterate_in_order(fixture, request): + mol = request.getfuncargvalue(fixture) + _iter_index_order_tester(mol.chains) + + +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_residues_iterate_in_order(fixture, request): + mol = request.getfuncargvalue(fixture) + _iter_index_order_tester(mol.residues) + + for chain in mol.chains: + _iter_index_order_tester(chain.residues) + + +@pytest.mark.parametrize('fixture', fixture_types['protein']) +def test_atoms_iterate_in_order(fixture, request): + mol = request.getfuncargvalue(fixture) + _iter_index_order_tester(mol.atoms) + + for chain in mol.chains: + _iter_index_order_tester(chain.atoms) + + for residue in mol.residues: + _iter_index_order_tester(residue.atoms) + + +def _iter_index_order_tester(iterable): + iterator = iter(iterable) + lastitem = iterator.next() + for item in iterator: + assert item.index > lastitem.index + lastitem = item diff --git a/moldesign/_tests/test_qm.py b/moldesign/_tests/test_qm.py new file mode 100644 index 0000000..cc062d7 --- /dev/null +++ b/moldesign/_tests/test_qm.py @@ -0,0 +1,82 @@ +""" Tests basic QM functionality and data structures +""" + +import pytest +import numpy as np + +import moldesign as mdt +from moldesign import units as u + +registered_types = {} + +# TODO: automated method testing based on its metadata - i.e. test to make sure parameters are +# honored, test that it calcultes what it says it does, test that properties have the right +# units and array shapes, etc. + +def typedfixture(*types, **kwargs): + """This is a decorator that lets us associate fixtures with one or more arbitrary types. + We'll later use this type to determine what tests to run on the result""" + + def fixture_wrapper(func): + for t in types: + registered_types.setdefault(t, []).append(func.__name__) + return pytest.fixture(**kwargs)(func) + + return fixture_wrapper + + +@typedfixture('molecule') +def h2(): + mol = mdt.Molecule([mdt.Atom('H'), + mdt.Atom('H')]) + mol.atoms[1].z = 0.75 * u.angstrom + return mol + + +@typedfixture('molecule') +def heh_plus(): + mol = mdt.Molecule([mdt.Atom('H'), + mdt.Atom('He')]) + mol.atoms[1].z = 1.0 * u.angstrom + mol.charge = 1 * u.q_e + return mol + + +@pytest.mark.parametrize('objkey', registered_types['molecule']) +def test_pyscf_rhf_sto3g_properties(objkey, request): + mol = request.getfuncargvalue(objkey) + mol.set_energy_model(mdt.models.PySCFPotential, basis='sto-3g', theory='rhf') + + mol.calculate() + + assert 'potential_energy' in mol.properties + assert 'wfn' in mol.properties + assert 'canonical' in mol.wfn.orbitals + assert 'atomic' in mol.wfn.orbitals + assert mol.wfn.num_electrons == sum(mol.atoms.atnum) - mol.charge.value_in(u.q_e) + + +@pytest.mark.parametrize('objkey', registered_types['molecule']) +def test_pyscf_rhf_sto3g_matrices(objkey, request): + mol = request.getfuncargvalue(objkey) + mol.set_energy_model(mdt.models.PySCFPotential, basis='sto-3g', theory='rhf') + + mol.calculate() + basis = mol.wfn.aobasis + canonical = mol.wfn.orbitals.canonical + + assert (mol.wfn.aobasis.fock == mol.wfn.fock_ao).all() + assert (mol.wfn.orbitals.atomic.coeffs == np.identity(mol.wfn.nbasis)).all() + + np.testing.assert_allclose(canonical.to_ao(canonical.fock), mol.wfn.fock_ao, atol=1.e-9) + np.testing.assert_allclose(canonical.from_ao(basis.overlaps), canonical.overlaps, atol=1.e-9) + + +@pytest.mark.parametrize('objkey', registered_types['molecule']) +def test_pyscf_rhf_sto3g_forces(objkey, request): + mol = request.getfuncargvalue(objkey) + mol.set_energy_model(mdt.models.PySCFPotential, basis='sto-3g', theory='rhf') + forces = mol.calc_forces() + + assert forces.shape == (mol.num_atoms, 3) + diff --git a/moldesign/_tests/test_tools.py b/moldesign/_tests/test_tools.py new file mode 100644 index 0000000..7b8c7d5 --- /dev/null +++ b/moldesign/_tests/test_tools.py @@ -0,0 +1,94 @@ +""" Tests topology manipulation tools +""" +import collections + +import pytest + +import moldesign as mdt +from moldesign import units as u + + +registered_types = {} + + +def typedfixture(*types, **kwargs): + """This is a decorator that lets us associate fixtures with one or more arbitrary types. + We'll later use this type to determine what tests to run on the result""" + + def fixture_wrapper(func): + for t in types: + registered_types.setdefault(t, []).append(func.__name__) + return pytest.fixture(**kwargs)(func) + + return fixture_wrapper + + +@pytest.fixture +def ammonium_nocharge(): + return mdt.from_smiles('[NH4]') + + +@pytest.fixture +def ammonium_charged(): + return mdt.from_smiles('[NH4+]') + + +@pytest.mark.parametrize('objkey', + ['ammonium_nocharge', 'ammonium_charged']) +def test_ammonium_formal_charge(objkey, request): + mol = request.getfuncargvalue(objkey) + mdt.assign_formal_charges(mol) + assert mol.charge == 1 * u.q_e + + for atom in mol.atoms: + if atom.atnum == 7: + assert atom.formal_charge == 1 * u.q_e + else: + assert atom.atnum == 1 + assert atom.formal_charge == 0 * u.q_e + + +@pytest.fixture +def c2_no_hydrogen_from_smiles(): + mymol = mdt.from_smiles('[CH0][CH0]') + return mymol + + +def test_c2_no_hydrogen_from_smiles(c2_no_hydrogen_from_smiles): + mymol = c2_no_hydrogen_from_smiles + + atomcounts = collections.Counter(atom.element for atom in mymol.atoms) + assert atomcounts['C'] == 2 + assert len(atomcounts) == 1 + assert mymol.num_bonds == 1 + assert mymol.num_atoms == 2 + bonds = list(mymol.bonds) + assert len(bonds) == 1 + b = bonds[0] + assert b.order == 1 + assert b.a1.index == 0 + assert b.a2.index == 1 + + +def test_add_hydrogen_to_c2(c2_no_hydrogen_from_smiles): + newmol = mdt.add_hydrogen(c2_no_hydrogen_from_smiles) + atomcounts = collections.Counter(atom.element for atom in newmol.atoms) + assert newmol.num_atoms == 8 + assert atomcounts['C'] == 2 + assert atomcounts['H'] == 6 + assert len(atomcounts) == 2 + assert newmol.num_bonds == 7 + for atom, bondgraph in newmol.bond_graph.iteritems(): + if atom.atnum == 1: + assert len(bondgraph) == 1 + assert bondgraph.keys()[0].elem == 'C' + assert bondgraph.values()[0] == 1 + else: + assert atom.atnum == 6 + assert len(bondgraph) == 4 + for nbr in bondgraph: + assert bondgraph[nbr] == 1 + + + + diff --git a/moldesign/_tests/test_units.py b/moldesign/_tests/test_units.py new file mode 100644 index 0000000..99ad49a --- /dev/null +++ b/moldesign/_tests/test_units.py @@ -0,0 +1,131 @@ +""" Tests the unit system +""" +import pytest +import numpy as np + +from moldesign import units + + +def test_scalar_comparison_dimensionality_errors(): + with pytest.raises(units.DimensionalityError): + x = 1.0 * units.angstrom == 1.0*units.ureg.kilograms + + with pytest.raises(units.DimensionalityError): + y = 1.0 * units.fs < 1.0 * units.ureg.meter + + with pytest.raises(units.DimensionalityError): + z = 1.0 * units.ureg.hectare >= 1.0 * units.ureg.astronomical_unit + + +def test_array_comparison_dimensionality_errors(): + mylist = [0.0, -1.0, 1.0] + + with pytest.raises(units.DimensionalityError): + x = mylist * units.angstrom == mylist*units.ureg.kilograms + + with pytest.raises(units.DimensionalityError): + y = mylist * units.fs < mylist * units.ureg.meter + + with pytest.raises(units.DimensionalityError): + z = mylist * units.ureg.hectare >= mylist * units.ureg.astronomical_unit + + +def test_addition_dimensionality_errors(): + with pytest.raises(units.DimensionalityError): + x = 1.0 * units.angstrom + 1.0*units.ureg.kilograms + + with pytest.raises(units.DimensionalityError): + y = 1.0 * units.fs - 1.0 * units.ureg.meter + + +def test_compatible_units_comparison(): + num = 1.0*units.angstrom + assert abs(num-0.1*units.nm) < 1.0e-15 * units.angstrom + assert 1.0 * units.ureg.meter > 123456.0 * units.nm + + +def test_default_units(): + assert units.default.length == units.angstrom + assert units.default.mass == units.amu + assert units.default.energy == units.eV + + +def test_default_unit_conversions(): + my_list = [1.0*units.angstrom, 1.0*units.nm, 1.0*units.a0] + my_array = units.array(my_list).defunits() + assert my_array.get_units() == units.default.convert(my_array).get_units() + result = my_array.value_in(units.nm) + np.testing.assert_almost_equal(result[0], 0.1, 9) + np.testing.assert_almost_equal(result[1], 1.0, 9) + np.testing.assert_almost_equal(result[2], 0.05291772, 7) + + +def test_scalar_comparisons_to_zero_ignore_units(): + num = 1.0*units.angstrom + assert num > 0.0 + assert num > 0.0 * units.angstrom + assert num > 0.0 * units.nm + + with pytest.raises(units.DimensionalityError): + num > 0.0 * units.fs + + +def test_array_comparisons_to_zero_ignore_units(): + num = [1, -2, 0]*units.angstrom + assert ((num > 0) == [True, False, False]).all() + assert ((num == 0) == [False, False, True]).all() + + +def test_dimensionless_array_operations(): + arr = np.arange(5) * units.ureg.dimensionless + assert (arr == [0, 1, 2, 3, 4]).all() + + arr[1:5] = [100, 101, 102, 103] + assert (arr == [0, 100, 101, 102, 103]).all() + + assert arr[4].units == units.ureg.dimensionless + assert arr[:3].units == units.ureg.dimensionless + + +def test_dimensionless_array_unit_checks(): + arr = np.arange(5) * units.ureg.dimensionless + + with pytest.raises(units.DimensionalityError): + arr[0] = 5.0 * units.angstrom + + with pytest.raises(units.DimensionalityError): + arr[:] = np.arange(5, 10) * units.angstrom + + arr[:] = np.arange(5, 10) + assert (arr == np.arange(5, 10)).all() + + arr[:] = np.arange(10, 15) * units.ureg.dimensionless + assert (arr == np.arange(10, 15)).all() + + +def test_array_unit_checks(): + arr = np.arange(5) * units.ureg.nm / units.ureg.fs + + with pytest.raises(units.DimensionalityError): + arr[0] = 5.0 * units.angstrom + + with pytest.raises(units.DimensionalityError): + arr[3] = 5.0 + + with pytest.raises(units.DimensionalityError): + arr[:] = np.arange(5, 10) * units.fs + + arr[2:3] = np.arange(5, 6) * units.ureg.angstrom / units.ureg.fs + np.testing.assert_allclose(arr[2:3].magnitude, + np.arange(5, 6)/10.0) + + arr[:] = np.arange(10, 15) * units.ureg.micrometers / units.ureg.picoseconds + np.testing.assert_allclose(arr.magnitude, + np.arange(10, 15)) + +def test_default_unit_conversions(): + assert abs(10.0 - (1.0*units.nm).defunits_value()) < 1e-10 + assert abs(1000.0 - (1.0*units.ps).defunits_value()) < 1e-10 + assert abs(1.0 - 6.022140857e23/((1.0*units.ureg.grams).defunits_value())) < 1e-6 + assert abs(103.642685491 - (1.0*units.angstrom**2*units.dalton/units.fs**2).defunits_value() + ) < 1e-7 diff --git a/moldesign/compute/configuration.py b/moldesign/compute/configuration.py index 8a6c3e7..e77a7db 100644 --- a/moldesign/compute/configuration.py +++ b/moldesign/compute/configuration.py @@ -60,7 +60,8 @@ default_python_image (str): Image to run python commands in (default: ``docker.io/autodesk/moldesign:moldesign_complete-[VERSION]``, where [VERSION] is the version of MDT) - default_version_tag (str): Default version tag for docker images (default: 'latest') + default_version_tag (str): Default version tag for docker images + (default: ``moldesign.__version__``) default_docker_machine (str): Name of the docker machine to connect to; if ``engine_type=='docker'``, EITHER this OR ``default_docker_url`` (but not both) must be set. (default: 'default') @@ -91,7 +92,7 @@ default_python_image=None, default_docker_host='unix://var/run/docker.sock', default_docker_machine='default', - default_version_tag='0.7.1') + default_version_tag='0.7.3') DEF_CONFIG = CONFIG_DEFAULTS.copy() """ dict: default configuration to be written to moldesign.yml if it doesn't exist diff --git a/moldesign/data.py b/moldesign/data.py index 2951614..a4ebea1 100644 --- a/moldesign/data.py +++ b/moldesign/data.py @@ -71,21 +71,21 @@ "HO5' HO3'").split()), 'protein': set("N CA C O OXT H HA HA2 HA3 H2 H3".split())} -RESTYPES = dict( - protein=set(('ALA ARG ASN ASP ASX CYS GLU GLN GLX GLY HIS ILE LEU LYS MET ' + - 'PHE PRO SER THR TRP TYR VAL').split()), - water={'HOH', 'H2O'}, - solvent=set(), - dna=set(DBASES), - rna=set(RBASES), - unknown=set()) - RESIDUE_ONE_LETTER = dict(ALA="A", ASX="B", CYS="C", ASP="D", GLU="E", PHE="F", GLY="G", HIS="H", ILE="I", LYS="K", LEU="L", MET="M", ASN="N", PRO="P", GLN="Q", ARG="R", SER="S", THR="T", VAL="V", TRP="W", XAA="X", TYR="Y", GLX="Z") +BIOPOLYMER_TYPES = set('dna rna protein'.split()) + +CHAIN_MONOMER_NAMES = {'dna': 'dna base', + 'protein': 'amino acid', + 'unkonwn': 'small molecule', + 'water': 'water', + 'solvent': 'solvent', + 'ion': 'ion'} + # This is a very big dict, so we load it as a compressed database _bondfilename = os.path.join(PACKAGEPATH, '_static_data/residue_bonds') RESIDUE_BONDS = utils.CompressedJsonDbm(_bondfilename, 'r', dbm=utils.ReadOnlyDumb) @@ -126,6 +126,28 @@ 'T': 'Thymine', 'U': 'Uracil'} +IONS = {'NA': 'Na+', + 'K': 'K+', + 'MG': 'Mg+2', + 'CA': 'Ca+2', + 'F': 'F-', + 'Cl': 'Cl-', + 'Br': 'Br-', + 'I': 'I-'} + +RESTYPES = dict( + protein=set(AMINO_NAMES), + water={'HOH', 'H2O'}, + solvent=set(), + dna=set(DBASES), + rna=set(RBASES), + unknown=set(), + ions=set(IONS)) + +RESIDUE_TYPES = {} +for typename, namelist in RESTYPES.iteritems(): + for resname in namelist: RESIDUE_TYPES[resname] = typename + RESIDUE_DESCRIPTIONS = dict(AMINO_NAMES) for base, name in AMINO_NAMES.iteritems(): RESIDUE_DESCRIPTIONS['N' + name] = name + ' (N-terminal)' @@ -163,19 +185,37 @@ def print_environment(): """For reporting bugs - spits out the user's environment""" import sys version = {} - for pkg in 'moldesign IPython ipywidgets jupyter matplotlib numpy docker pyccc ' \ - 'nbmolviz jupyter_client jupyter_core pint Bio openbabel simtk pyscf'.split(): + for pkg in 'moldesign IPython ipywidgets jupyter matplotlib numpy docker pyccc distutils' \ + 'nbmolviz jupyter_client jupyter_core pint Bio openbabel simtk pyscf pip setuptools'\ + .split(): try: module = __import__(pkg) - except ImportError: - version[pkg] = 'FAILED' + except ImportError as e: + version[pkg] = str(e) else: try: version[pkg] = module.__version__ - except AttributeError: - version[pkg] = '???' + except AttributeError as e: + version[pkg] = str(e) env = {'platform': sys.platform, - 'version': sys.version} + 'version': sys.version, + 'prefix': sys.prefix} + + try: + import platform + env['machine'] = platform.machine() + env['linux'] = platform.linux_distribution() + env['mac'] = platform.mac_ver() + env['windows'] = platform.win32_ver() + env['impl'] = platform.python_implementation() + env['arch'] = platform.architecture() + env['system'] = platform.system() + env['python_build'] = platform.python_build() + env['platform_version'] = platform.version() + + except Exception as e: + env['platform_exception'] = str(e) + print json.dumps({'env': env, 'versions': version}) diff --git a/moldesign/exceptions.py b/moldesign/exceptions.py index 604dee6..9382481 100644 --- a/moldesign/exceptions.py +++ b/moldesign/exceptions.py @@ -12,11 +12,23 @@ # See the License for the specific language governing permissions and # limitations under the License. -class NoConvergence(Exception): - """ Raised when an iterative property calculation fails to converge """ + +class ConvergenceFailure(Exception): + """ Raised when an iterative calculation fails to converge """ pass class NotCalculatedError(Exception): """ Raised when a molecular property is requested that hasn't been calculated """ - pass \ No newline at end of file + pass + + +class UnhandledValenceError(Exception): + def __init__(self, atom): + self.message = 'Atom %s has unhandled valence: %d' % (atom, atom.valence) + + +class QMConvergenceError(Exception): + """ Raised when an iterative QM calculation (typically SCF) fails to converge + """ + pass diff --git a/moldesign/external/licenses/PYTHON b/moldesign/external/licenses/PYTHON new file mode 100644 index 0000000..e374ded --- /dev/null +++ b/moldesign/external/licenses/PYTHON @@ -0,0 +1,261 @@ +NOTE: +See molecular-design-toolkit/NOTICES for a description of the components +this license applies to. + +_______________________________________________________________________ + +A. HISTORY OF THE SOFTWARE +========================== + +Python was created in the early 1990s by Guido van Rossum at Stichting +Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +as a successor of a language called ABC. Guido remains Python's +principal author, although it includes many contributions from others. + +In 1995, Guido continued his work on Python at the Corporation for +National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +in Reston, Virginia where he released several versions of the +software. + +In May 2000, Guido and the Python core development team moved to +BeOpen.com to form the BeOpen PythonLabs team. In October of the same +year, the PythonLabs team moved to Digital Creations (now Zope +Corporation, see http://www.zope.com). In 2001, the Python Software +Foundation (PSF, see http://www.python.org/psf/) was formed, a +non-profit organization created specifically to own Python-related +Intellectual Property. Zope Corporation is a sponsoring member of +the PSF. + +All Python releases are Open Source (see http://www.opensource.org for +the Open Source Definition). Historically, most, but not all, Python +releases have also been GPL-compatible; the table below summarizes +the various releases. + + Release Derived Year Owner GPL- + from compatible? (1) + + 0.9.0 thru 1.2 1991-1995 CWI yes + 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes + 1.6 1.5.2 2000 CNRI no + 2.0 1.6 2000 BeOpen.com no + 1.6.1 1.6 2001 CNRI yes (2) + 2.1 2.0+1.6.1 2001 PSF no + 2.0.1 2.0+1.6.1 2001 PSF yes + 2.1.1 2.1+2.0.1 2001 PSF yes + 2.1.2 2.1.1 2002 PSF yes + 2.1.3 2.1.2 2002 PSF yes + 2.2 and above 2.1.1 2001-now PSF yes + +Footnotes: + +(1) GPL-compatible doesn't mean that we're distributing Python under + the GPL. All Python licenses, unlike the GPL, let you distribute + a modified version without making your changes open source. The + GPL-compatible licenses make it possible to combine Python with + other software that is released under the GPL; the others don't. + +(2) According to Richard Stallman, 1.6.1 is not GPL-compatible, + because its license has a choice of law clause. According to + CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 + is "not incompatible" with the GPL. + +Thanks to the many outside volunteers who have worked under Guido's +direction to make these releases possible. + + +B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON +=============================================================== + +PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 +-------------------------------------------- + +1. This LICENSE AGREEMENT is between the Python Software Foundation +("PSF"), and the Individual or Organization ("Licensee") accessing and +otherwise using this software ("Python") in source or binary form and +its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, PSF hereby +grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, +analyze, test, perform and/or display publicly, prepare derivative works, +distribute, and otherwise use Python alone or in any derivative version, +provided, however, that PSF's License Agreement and PSF's notice of copyright, +i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +2011, 2012, 2013, 2014, 2015, 2016 Python Software Foundation; All Rights +Reserved" are retained in Python alone or in any derivative version prepared by +Licensee. + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python. + +4. PSF is making Python available to Licensee on an "AS IS" +basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any +relationship of agency, partnership, or joint venture between PSF and +Licensee. This License Agreement does not grant permission to use PSF +trademarks or trade name in a trademark sense to endorse or promote +products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using Python, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 +------------------------------------------- + +BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 + +1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an +office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the +Individual or Organization ("Licensee") accessing and otherwise using +this software in source or binary form and its associated +documentation ("the Software"). + +2. Subject to the terms and conditions of this BeOpen Python License +Agreement, BeOpen hereby grants Licensee a non-exclusive, +royalty-free, world-wide license to reproduce, analyze, test, perform +and/or display publicly, prepare derivative works, distribute, and +otherwise use the Software alone or in any derivative version, +provided, however, that the BeOpen Python License is retained in the +Software, alone or in any derivative version prepared by Licensee. + +3. BeOpen is making the Software available to Licensee on an "AS IS" +basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE +SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS +AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY +DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +5. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +6. This License Agreement shall be governed by and interpreted in all +respects by the law of the State of California, excluding conflict of +law provisions. Nothing in this License Agreement shall be deemed to +create any relationship of agency, partnership, or joint venture +between BeOpen and Licensee. This License Agreement does not grant +permission to use BeOpen trademarks or trade names in a trademark +sense to endorse or promote products or services of Licensee, or any +third party. As an exception, the "BeOpen Python" logos available at +http://www.pythonlabs.com/logos.html may be used according to the +permissions granted on that web page. + +7. By copying, installing or otherwise using the software, Licensee +agrees to be bound by the terms and conditions of this License +Agreement. + + +CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 +--------------------------------------- + +1. This LICENSE AGREEMENT is between the Corporation for National +Research Initiatives, having an office at 1895 Preston White Drive, +Reston, VA 20191 ("CNRI"), and the Individual or Organization +("Licensee") accessing and otherwise using Python 1.6.1 software in +source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, CNRI +hereby grants Licensee a nonexclusive, royalty-free, world-wide +license to reproduce, analyze, test, perform and/or display publicly, +prepare derivative works, distribute, and otherwise use Python 1.6.1 +alone or in any derivative version, provided, however, that CNRI's +License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) +1995-2001 Corporation for National Research Initiatives; All Rights +Reserved" are retained in Python 1.6.1 alone or in any derivative +version prepared by Licensee. Alternately, in lieu of CNRI's License +Agreement, Licensee may substitute the following text (omitting the +quotes): "Python 1.6.1 is made available subject to the terms and +conditions in CNRI's License Agreement. This Agreement together with +Python 1.6.1 may be located on the Internet using the following +unique, persistent identifier (known as a handle): 1895.22/1013. This +Agreement may also be obtained from a proxy server on the Internet +using the following URL: http://hdl.handle.net/1895.22/1013". + +3. In the event Licensee prepares a derivative work that is based on +or incorporates Python 1.6.1 or any part thereof, and wants to make +the derivative work available to others as provided herein, then +Licensee hereby agrees to include in any such work a brief summary of +the changes made to Python 1.6.1. + +4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" +basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR +IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND +DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS +FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT +INFRINGE ANY THIRD PARTY RIGHTS. + +5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON +1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS +A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, +OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material +breach of its terms and conditions. + +7. This License Agreement shall be governed by the federal +intellectual property law of the United States, including without +limitation the federal copyright law, and, to the extent such +U.S. federal law does not apply, by the law of the Commonwealth of +Virginia, excluding Virginia's conflict of law provisions. +Notwithstanding the foregoing, with regard to derivative works based +on Python 1.6.1 that incorporate non-separable material that was +previously distributed under the GNU General Public License (GPL), the +law of the Commonwealth of Virginia shall govern this License +Agreement only as to issues arising under or with respect to +Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this +License Agreement shall be deemed to create any relationship of +agency, partnership, or joint venture between CNRI and Licensee. This +License Agreement does not grant permission to use CNRI trademarks or +trade name in a trademark sense to endorse or promote products or +services of Licensee, or any third party. + +8. By clicking on the "ACCEPT" button where indicated, or by copying, +installing or otherwise using Python 1.6.1, Licensee agrees to be +bound by the terms and conditions of this License Agreement. + + ACCEPT + + +CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 +-------------------------------------------------- + +Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, +The Netherlands. All rights reserved. + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Stichting Mathematisch +Centrum or CWI not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior +permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE +FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/moldesign/converters.py b/moldesign/fileio.py similarity index 63% rename from moldesign/converters.py rename to moldesign/fileio.py index b2364b4..09967f5 100644 --- a/moldesign/converters.py +++ b/moldesign/fileio.py @@ -11,50 +11,27 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import os -import cStringIO as StringIO -import cPickle as pkl # TODO: if cpickle fails, retry with regular pickle to get a better traceback -import gzip import bz2 -import string +import cPickle as pkl # TODO: if cpickle fails, retry with regular pickle to get a better traceback +import cStringIO as StringIO import functools +import gzip +import os -import moldesign as mdt -import moldesign.interfaces.openbabel as obabel -import moldesign.molecules.atomcollections -from moldesign.interfaces.opsin_interface import name_to_smiles -import moldesign.interfaces.biopython_interface as biopy -from moldesign import chemjson - -# These routines are imported here solely to make them available in this namespace -from moldesign.interfaces.openbabel import mol_to_pybel +from moldesign.interfaces import biopython_interface +import moldesign.interfaces.openbabel as openbabel_interface from moldesign.interfaces.openmm import amber_to_mol as read_amber -from moldesign.interfaces.ambertools import build_bdna - +from moldesign.helpers import pdb +from moldesign import chemjson def exports(o, name=None): __all__.append(o.__name__) return o -__all__ = ['read_amber', 'mol_to_pybel', 'build_bdna', 'from_smiles'] - +__all__ = ['from_smiles', 'read_amber'] -# NOTE - all extensions MUST be lower case here -PICKLE_EXTENSIONS = set("p pkl pickle mdt".split()) -COMPRESSION = {'gz': gzip.open, - 'gzip': gzip.open, - 'bz2': bz2.BZ2File, - 'bzip2': bz2.BZ2File, - None: open} -READERS = {'pdb': biopy.parse_pdb, - 'cif': biopy.parse_pdb, - 'json': chemjson.reader} -WRITERS = {'json': chemjson.writer} -for ext in PICKLE_EXTENSIONS: - READERS[ext] = pkl.load - WRITERS[ext] = functools.partial(pkl.dump, protocol=2) -from_smiles = obabel.from_smiles +from_smiles = openbabel_interface.from_smiles @exports @@ -82,7 +59,7 @@ def read(f, format=None): filename = None # Open a file-like object - if isinstance(f, str) and os.path.exists(f): # it's a path to a file + if isinstance(f, basestring) and os.path.exists(f): # it's a path to a file filename = f format, compression = _get_format(filename, format) fileobj = COMPRESSION[compression](filename, mode='r') @@ -90,7 +67,7 @@ def read(f, format=None): fileobj = f.open('r') elif hasattr(f, 'read'): # it's already file-like fileobj = f - elif isinstance(f, str): # it's just a string + elif isinstance(f, basestring): # it's just a string fileobj = StringIO.StringIO(f) else: raise ValueError('Parameter to moldesign.read (%s) not ' % str(f) + @@ -99,7 +76,7 @@ def read(f, format=None): if format in READERS: mol = READERS[format](fileobj) else: # default to openbabel if there's not an explicit reader for this format - mol = obabel.read_stream(fileobj, format) + mol = openbabel_interface.read_stream(fileobj, format) if filename is not None: mol.name = filename @@ -125,7 +102,15 @@ def write(obj, filename=None, format=None, mode='w'): Returns: str: if filename is none, return the output file as a string (otherwise returns ``None``) """ - # TODO: handle writing and return file-like objects + # TODO: handle writing and returning file-like objects instead of strings + + # lets users call mdt.write(obj, 'pdb') and get a string (without needing the "format" keyword + if (format is None and + filename is not None and + len(filename) < 5 and + '.' not in filename): + filename, format = None, filename + format, compression = _get_format(filename, format) # First, create an object to write to (either file handle or file-like buffer) @@ -140,7 +125,7 @@ def write(obj, filename=None, format=None, mode='w'): if format in WRITERS: WRITERS[format](obj, fileobj) else: - fileobj.write(obabel.write_string(obj, format)) + fileobj.write(openbabel_interface.write_string(obj, format)) # Return a string if necessary if return_string: @@ -168,7 +153,6 @@ def write_trajectory(traj, filename=None, format=None, overwrite=True): if format.lower() in PICKLE_EXTENSIONS: write(traj, filename=filename, format=format) - # for traditional molecular file formats, write the frames one after another else: tempmol = traj._tempmol @@ -190,6 +174,73 @@ def write_trajectory(traj, filename=None, format=None, overwrite=True): fileobj.close() +def read_pdb(f, assign_ccd_bonds=True): + """ Read a PDB file and return a molecule. + + This uses the biopython parser to get the molecular structure, but uses internal parsers + to create bonds and biomolecular assembly data. + + Note: + Users won't typically use this routine; instead, they'll use ``moldesign.read``, which will + delegate to this routine when appropriate. + + Args: + f (filelike): filelike object giving access to the PDB file (must implement seek) + assign_ccd_bonds (bool): Use the PDB Chemical Component Dictionary (CCD) to create bond + topology (note that bonds from CONECT records will always be created as well) + + Returns: + moldesign.Molecule: the parsed molecule + """ + assemblies = pdb.get_pdb_assemblies(f) + f.seek(0) + mol = biopython_interface.parse_pdb(f) + mol.properties.bioassemblies = assemblies + f.seek(0) + conect_graph = pdb.get_conect_records(f) + + # Assign bonds from residue templates + if assign_ccd_bonds: + pdb.assign_biopolymer_bonds(mol) + + # Create bonds from CONECT records + serials = {atom.pdbindex: atom for atom in mol.atoms} + for atomserial, nbrs in conect_graph.iteritems(): + atom = serials[atomserial] + for nbrserial, order in nbrs.iteritems(): + nbr = serials[nbrserial] + if nbr not in atom.bond_graph: # we already got it from CCD + mol.newbond(atom, nbr, order) + + if assemblies: + pdb.warn_assemblies(mol, assemblies) + + return mol + + +def read_mmcif(f): + """ Read an mmCIF file and return a molecule. + + This uses OpenBabel's basic structure parser along with biopython's mmCIF bioassembly parser + + Note: + Users won't typically use this routine; instead, they'll use ``moldesign.read``, which will + delegate to this routine when appropriate. + + Args: + f (filelike): file-like object that accesses the mmCIF file (must implement seek) + + Returns: + moldesign.Molecule: the parsed molecular structure + """ + mol = openbabel_interface.read_stream(f, 'cif') + f.seek(0) + assemblies = biopython_interface.get_mmcif_assemblies(f) + if assemblies: + pdb.warn_assemblies(mol, assemblies) + mol.properties.bioassemblies = assemblies + return mol + @exports def mol_to_openmm_sim(mol): @@ -200,7 +251,7 @@ def mol_to_openmm_sim(mol): @exports -def from_pdb(pdbcode): +def from_pdb(pdbcode, usecif=False): """ Import the given molecular geometry from PDB.org See Also: @@ -208,16 +259,35 @@ def from_pdb(pdbcode): Args: pdbcode (str): 4-character PDB code (e.g. 3AID, 1BNA, etc.) + usecif (bool): If False (the default), use the PDB-formatted file (default). + If True, use the mmCIF-format file from RCSB.org. Returns: moldesign.Molecule: molecule object """ - import urllib2 - assert len(pdbcode) == 4, "%s is not a valid pdb ID." % pdbcode - request = urllib2.urlopen('http://www.rcsb.org/pdb/files/%s.pdb' % pdbcode) - ":type: urllib2.req" - filestring = request.read() - mol = read(filestring, format='pdb') + import requests + assert len(pdbcode) == 4, "%s is not a valid PDB ID." % pdbcode + + fileext = 'cif' if usecif else 'pdb' + request = requests.get('http://www.rcsb.org/pdb/files/%s.%s' % (pdbcode, fileext)) + + if request.status_code == 404 and not usecif: # if not found, try the cif-format version + print 'WARNING: %s.pdb not found in rcsb.org database. Trying %s.cif...' % ( + pdbcode, pdbcode), + retval = from_pdb(pdbcode, usecif=True) + print 'success.' + return retval + + elif request.status_code != 200: + raise ValueError('Failed to download %s.%s from rcsb.org: %s %s' % ( + pdbcode, fileext, request.status_code, request.reason)) + + if usecif: + filestring = request.text + else: + filestring = request.text.encode('ascii') + + mol = read(filestring, format=fileext) mol.name = pdbcode return mol @@ -232,67 +302,14 @@ def from_name(name): Returns: moldesign.Molecule: molecule object """ + from moldesign.interfaces.opsin_interface import name_to_smiles + # TODO: fallback to http://cactus.nci.nih.gov/chemical/structure smi = name_to_smiles(name) mol = from_smiles(smi, name) return mol -@exports -def build_assembly(mol, assembly_name): - """ Create biological assembly using a bioassembly specification. - - This routine builds a biomolecular assembly using the specification from a PDB header (if - present, this data can be found in the "REMARK 350" lines in the PDB file). Assemblies are - author-assigned structures created by copying, translating, and rotating a subset of the - chains in the PDB file. - - See Also: - http://pdb101.rcsb.org/learn/guide-to-understanding-pdb-data/biological-assemblies - - Args: - mol (moldesign.Molecule): Molecule with assembly data (assembly data will be created by the - PDB parser at ``molecule.properties.bioassembly``) - assembly_name (str): name of the biomolecular assembly to build. - - Returns: - mol (moldesign.Molecule): molecule containing the complete assembly - - Raises: - AttributeError: If the molecule does not contain any biomolecular assembly data - KeyError: If the specified assembly is not present - """ - if 'bioassemblies' not in mol.properties: - raise AttributeError('This molecule does not contain any biomolecular assembly data') - try: - asm = mol.properties.bioassemblies[assembly_name] - except KeyError: - raise KeyError(('The specified assembly name ("%s") was not found. The following ' - 'assemblies are present: %s') % - (assembly_name, - ', '.join(mol.properties.bioassemblies.keys()))) - - # Make sure each chain gets a unique name - up to all the letters in the alphabet, anyway - used_chain_names = set() - alpha = iter(string.ascii_uppercase) - - # Create the new molecule by copying, transforming, and renaming the original chains - all_atoms = moldesign.molecules.atomcollections.AtomList() - for i, t in enumerate(asm.transforms): - for chain_name in asm.chains: - chain = mol.chains[chain_name].copy() - chain.transform(t) - - while chain.name in used_chain_names: - chain.name = alpha.next() - used_chain_names.add(chain.name) - chain.pdbname = chain.pdbindex = chain.name - all_atoms.extend(chain.atoms) - newmol = mdt.Molecule(all_atoms, - name="%s (bioassembly %s)" % (mol.name, assembly_name)) - return newmol - - def _get_format(filename, format): """ Determine the requested file format and optional compression library @@ -327,3 +344,26 @@ def _get_format(filename, format): format = suffix return format, compressor + +#################################### +# FILE EXTENSION HANDLERS # +#################################### + +# All extensions MUST be lower case +READERS = {'json': chemjson.reader, + 'pdb': read_pdb, + 'cif': read_mmcif, + 'mmcif': read_mmcif} + +WRITERS = {'json': chemjson.writer} + +PICKLE_EXTENSIONS = set("p pkl pickle mdt".split()) +COMPRESSION = {'gz': gzip.open, + 'gzip': gzip.open, + 'bz2': bz2.BZ2File, + 'bzip2': bz2.BZ2File, + None: open} + +for ext in PICKLE_EXTENSIONS: + READERS[ext] = pkl.load + WRITERS[ext] = functools.partial(pkl.dump, protocol=2) diff --git a/moldesign/forcefields/forcefield.py b/moldesign/forcefields/forcefield.py index 7db9026..c3d157c 100644 --- a/moldesign/forcefields/forcefield.py +++ b/moldesign/forcefields/forcefield.py @@ -58,3 +58,11 @@ def __init__(self, mol, charges, ffparams=None, minimized_mol=None): def get_ffparams(self): chargemap = {atom: self.charges[atom.pdbname] for atom in self.mol.atoms} return mdt.interfaces.ambertools.get_gaff_parameters(self.mol, chargemap) + +ffdefaults = dict(protein='ff14SB', + dna='OL15', + rna='OL3', + carbohydrate='GLYCAM_06j-1', + lipid='lipid14', + water='tip3p', + organic='gaff2') diff --git a/moldesign/geom/__init__.py b/moldesign/geom/__init__.py index 8470103..cbdc202 100644 --- a/moldesign/geom/__init__.py +++ b/moldesign/geom/__init__.py @@ -7,4 +7,6 @@ def toplevel(o): from .grads import * from .setcoord import * from .constraints import * -from .symmetry import * \ No newline at end of file +from .symmetry import * +from .monitor import * +from .shake import * diff --git a/moldesign/geom/constraints.py b/moldesign/geom/constraints.py index 85bbe64..3129852 100644 --- a/moldesign/geom/constraints.py +++ b/moldesign/geom/constraints.py @@ -18,31 +18,29 @@ from moldesign.mathutils import * from .coords import * from .grads import * +from .grads import _atom_grad_to_mol_grad -DIST_TOLERANCE = 1.0e-3 * u.angstrom +DIST_TOLERANCE = 1.0e-6 * u.angstrom DIST_FORCE_CONSTANT = 1000.0 * u.kcalpermol / (u.angstrom**2) -ANGLE_TOLERANCE = 0.75 * u.degrees +ANGLE_TOLERANCE = 1.0e-4 * u.degrees ANGLE_FORCE_CONSTANT = 1500.0 * u.kcalpermol / (u.radians**2) class GeometryConstraint(object): - """ - Base class - Keeps track of a 3D geometry constraint. + """ Base class - Keeps track of a 3D geometry constraint. The constraint is satisfied when self.current() == self.value + + Args: + atoms (List[mdt.Atom]): atoms involved + value (u.Scalar): constrain the coordinate to this value + tolerance (u.Scalar): absolute tolerance (for iterative constraint enforcement) + force_constant (u.Scalar[force]): optional, only for minimizations and/or use in + restraints) """ desc = 'base constraint' # use this to identify the constraint in interfaces dof = 1 # number of degrees of freedom constrained (so that we can properly calculate temperature) def __init__(self, atoms, value=None, tolerance=None, force_constant=None): - """ Initialization: - - Args: - atoms (List[mdt.Atom]): atoms involved - value (u.Scalar): constrain the coordinate to this value - tolerance (u.Scalar): absolute tolerance (for iterative constraint enforcement) - force_constant (u.Scalar[force]): optional, only for minimizations and/or use in - restraints) - """ self.atoms = moldesign.molecules.atomcollections.AtomList(atoms) self.mol = self.atoms[0].molecule self.tolerance = tolerance @@ -65,13 +63,7 @@ def gradient(self): .. math:: \nabla G(\mathbf r) """ - grad = np.zeros(self.mol.ndims) - atomvecs = self.atomgrad(*self.atoms) - assert len(atomvecs) == len(self.atoms) - grad = grad * atomvecs[0].get_units() - for v, a in zip(atomvecs, self.atoms): - grad[a.index] = v - return grad + return _atom_grad_to_mol_grad(self.atoms, self.atomgrad(*self.atoms)) def satisfied(self): """ @@ -109,8 +101,13 @@ def __str__(self): return 'Constraint: {self.desc}({atoms}) -> {self.value})>'.format( atoms=','.join([a.name for a in self.atoms]), self=self) + def _constraintsig(self): + """ Returns a unique key that lets us figure out if we have duplicate or conflicting + constraints + """ + return tuple([self.desc] + [atom.index for atom in self.atoms]) + -@toplevel class DistanceConstraint(GeometryConstraint): desc = 'distance' atomgrad = staticmethod(distance_gradient) @@ -128,7 +125,6 @@ def current(self): current.__doc__ = GeometryConstraint.current.__doc__ -@toplevel class AngleConstraint(GeometryConstraint): desc = 'angle' atomgrad = staticmethod(angle_gradient) @@ -151,7 +147,6 @@ def error(self): error.__doc__ = GeometryConstraint.error.__doc__ -@toplevel class DihedralConstraint(GeometryConstraint): desc = 'dihedral' atomgrad = staticmethod(dihedral_gradient) @@ -175,17 +170,27 @@ def error(self): error.__doc__ = GeometryConstraint.error.__doc__ -@toplevel class FixedPosition(GeometryConstraint): - """This constraint is different than the others because it's absolute, not relative""" + """Fixes a single atom at a given location + + Note: + The gradient of this function is singular and discontinuous when the constraint is satisfied, + leading to poor results in iterative methods such as SHAKE. + + In such cases, this constraint should be automatically replaced with three + :class:`FixedCoordinate` constraints on the atom's x, y, and z coordinates. + """ desc = 'position' dof = 3 - def __init__(self, atom, point=None, value=None, + def __init__(self, atom, value=None, tolerance=DIST_TOLERANCE, force_constant=DIST_FORCE_CONSTANT): self.atom = atom - self.point = mdt.utils.if_not_none(point, atom.position.copy()) - super(FixedPosition, self).__init__([atom], value=value, + if value is None: + self.value = mdt.utils.if_not_none(value, atom.position.copy()) + else: + self.value = value.copy() + super(FixedPosition, self).__init__([atom], value=self.value, tolerance=tolerance, force_constant=force_constant) def current(self): @@ -197,11 +202,53 @@ def error(self): return np.sqrt(diff.dot(diff)) error.__doc__ = GeometryConstraint.error.__doc__ - def atomgrad(self): + def atomgrad(self, atom=None): """ + Note: + For numerical reasons, this returns a vector in the [1,1,1] direction if the + constraint is exactly met + Returns: u.Vector[length]: unit vector from the constraint location to the atom's actual location (len=3) """ + if atom: assert atom is self.atom diff = self.atom.position - self.value - return normalized(diff) \ No newline at end of file + grad = normalized(diff) + if (grad.magnitude == np.zeros(3)).all(): + grad.magnitude[:] = np.ones(3) / np.sqrt(3) + return [grad] + + +class FixedCoordinate(GeometryConstraint): + """Fixes a single, linear degree of freedom for an atom, so that it's constrained to a plane. + + Args: + atom (moldesign.Atom): atom to constrain + vector (np.ndarray): direction to constrain + value (units.Scalar[length]): constraint value (i.e., we constrain the dot product of the + atom's position and the normalized direction vector to be this value) + """ + desc = 'coordinate' + dof = 1 + + def __init__(self, atom, vector, value=None, + tolerance=DIST_TOLERANCE, force_constant=DIST_FORCE_CONSTANT): + self.atom = atom + self.vector = normalized(vector) + if value is None: + self.value = mdt.utils.if_not_none(value, self.current()) + else: + self.value = value.copy() + super(FixedCoordinate, self).__init__([atom], value=self.value, + tolerance=tolerance, force_constant=force_constant) + + def current(self): + return self.atom.position.dot(self.vector) + current.__doc__ = GeometryConstraint.current.__doc__ + + def atomgrad(self, atom=None): + return [self.vector] * u.ureg.dimensionless # that was easy + + def _constraintsig(self): + return super(FixedCoordinate, self)._constraintsig() + (self.vector,) diff --git a/moldesign/geom/coords.py b/moldesign/geom/coords.py index 81850e4..caac191 100644 --- a/moldesign/geom/coords.py +++ b/moldesign/geom/coords.py @@ -96,13 +96,21 @@ def _join_bonds(b1, b2): @toplevel #@singledispatch -def dihedral(a1, a2, a3=None, a4=None): +def dihedral(a1, a2=None, a3=None, a4=None): """Twist angle of bonds a1-a2 and a4-a3 around around the central bond a2-a3 + Can be called as ``dihedral(a1, a2, a3, a4)`` + OR ``dihedral(a2, a2)`` + OR ``dihedral(bond)`` + Args: + a1 (mdt.Bond): the central bond in the dihedral. OR a1,a2 (mdt.Atom): the atoms describing the dihedral a3,a4 (mdt.Atom): (optional) if not passed, ``a1`` and ``a2`` will be treated as the central atoms in this bond, and a3 and a4 will be inferred. + + Returns: + (units.Scalar[angle]): angle - [0, 2 pi) radians """ if a3 is a4 is None: # infer the first and last atoms a1, a2, a3, a4 = _infer_dihedral(a1, a2) @@ -144,10 +152,13 @@ def dihedral(a1, a2, a3=None, a4=None): return (theta * u.radians) % (2.0 * u.pi * u.radians) -def _infer_dihedral(a2, a3): +def _infer_dihedral(a2, a3=None): """ Given two atoms defining the central bond in a dihedral, pick the first and last atoms in a heuristic way (see :meth:`_pick_atom`) to get a unique-ish definition. """ + if a3 is None: # assume bond-like + bond = a2 + a2, a3 = bond.a1, bond.a2 a1 = _pick_atom(a2, a3) a4 = _pick_atom(a3, a2) return a1, a2, a3, a4 diff --git a/moldesign/geom/grads.py b/moldesign/geom/grads.py index a57e9ff..0b1ea8c 100644 --- a/moldesign/geom/grads.py +++ b/moldesign/geom/grads.py @@ -96,4 +96,17 @@ def dihedral_gradient(a1, a2, a3, a4): vec2 = vec1 * (pijkj - 1.0) - vec4 * pklkj vec3 = vec4 * (pklkj - 1.0) - vec1 * pijkj - return vec1 * u.radians, vec2 * u.radians, vec3 * u.radians, vec4 * u.radians \ No newline at end of file + return -vec1 * u.radians, -vec2 * u.radians, -vec3 * u.radians, -vec4 * u.radians + + +def _atom_grad_to_mol_grad(atoms, grads): + """ Convert list of gradients on atoms to a full-dimensional Nx3 gradient list (with 0s for + uninvolved atoms) + """ + m = atoms[0].molecule + if len(grads) != len(atoms): + raise ValueError('Number of gradients does not match number of atoms') + mol_grad = np.zeros((m.num_atoms, 3))*grads[0].get_units() + for v, a in zip(grads, atoms): + mol_grad[a.index] = v + return mol_grad diff --git a/moldesign/geom/monitor.py b/moldesign/geom/monitor.py new file mode 100644 index 0000000..241ed3c --- /dev/null +++ b/moldesign/geom/monitor.py @@ -0,0 +1,115 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import moldesign as mdt + +from . import toplevel +from . import constraints, grads, coords, setcoord + + +class Monitor(object): + def __init__(self, *atoms): + if len(atoms) != self.NUM_ATOMS: + raise ValueError('%s requires %d atoms, but %d passed' % + (type(self), self.NUM_ATOMS, len(atoms))) + self.atoms = atoms + + @property + def value(self): + return self.GETTER(*self.atoms) + + @value.setter + def value(self, val): + args = self.atoms + (val,) + self.SETTER(*args) + + def gradient(self): + return grads._atom_grad_to_mol_grad(self.atoms, self.GRAD(*self.atoms)) + + @mdt.utils.kwargs_from(constraints.GeometryConstraint) + def constrain(self, **kwargs): + """ Constrain this coordinate. + + This will add a new item to the parent molecule's constraint list. + + Args: + **kwargs (dict): kwargs for constraints.GeometryConstraint + + Returns: + constraints.GeometryConstraint: the constraint object + """ + c = self.CONSTRAINT(*self.atoms, **kwargs) + mol = self.atoms[0].molecule + for atom in mol.atoms[1:]: + if atom.molecule is not mol: + raise ValueError("Can't create constraint; atoms are not part of the same Molecule") + mol.constraints.append(c) + mol._reset_methods() + return c + + def __call__(self, obj): + """ Calculate this value for the given trajectory + + Args: + obj (mdt.Molecule or mdt.Trajectory): molecule or trajectory to measure + + Returns: + moldesign.units.Quantity: this coordinate's value (for a molecule), or a list of values + (for a trajectory) + + Note: + Atoms are identified by their index only; the atoms defined in the Monitor must have + the same indices as those in the passed object + """ + return self.GETTER(*(obj.atoms[a.index] for a in self.atoms)) + + def __str__(self): + return '%s: %s' % (type(self).__name__, self.value) + + def __repr__(self): + return '<%s for atoms %s: %s>' % (type(self).__name__, + ','.join(str(atom.index) for atom in self.atoms), + self.value) + + +@toplevel +class DistanceMonitor(Monitor): + NUM_ATOMS = 2 + GETTER = staticmethod(coords.distance) + SETTER = staticmethod(setcoord.set_distance) + GRAD = staticmethod(grads.distance_gradient) + CONSTRAINT = constraints.DistanceConstraint + + +@toplevel +class AngleMonitor(Monitor): + NUM_ATOMS = 3 + GETTER = staticmethod(coords.angle) + SETTER = staticmethod(setcoord.set_angle) + GRAD = staticmethod(grads.angle_gradient) + CONSTRAINT = constraints.AngleConstraint + + +@toplevel +class DihedralMonitor(Monitor): + def __init__(self, *atoms): + if len(atoms) in (1, 2): + atoms = coords._infer_dihedral(*atoms) + super(DihedralMonitor, self).__init__(*atoms) + + NUM_ATOMS = 4 + GETTER = staticmethod(coords.dihedral) + SETTER = staticmethod(setcoord.set_dihedral) + GRAD = staticmethod(grads.dihedral_gradient) + CONSTRAINT = constraints.DihedralConstraint diff --git a/moldesign/geom/setcoord.py b/moldesign/geom/setcoord.py index 576ed74..0d0941f 100644 --- a/moldesign/geom/setcoord.py +++ b/moldesign/geom/setcoord.py @@ -13,11 +13,13 @@ # limitations under the License. import numpy as np +import moldesign as mdt import moldesign.molecules.atomcollections from moldesign import external from moldesign.mathutils import sub_angles, apply_4x4_transform from . import toplevel, angle, dihedral +from .coords import _infer_dihedral @toplevel @@ -84,20 +86,37 @@ def set_angle(a1, a2, a3, theta, adjustmol=True): @toplevel -def set_dihedral(a1, a2, a3, a4, theta, adjustmol=True): +def set_dihedral(a1, a2=None, a3=None, a4=None, theta=None, adjustmol=True): """ Set the twist angle of atoms a1 and a4 around the central bond a2-a3. The atoms will be - adjusted along the - gradient of the angle. + adjusted along the gradient of the angle. + + Can be called as ``set_dihedral(a1, a2, a3, a4, theta, adjustmol=True)`` + OR ``set_dihedral(a2, a2, theta, adjustmol=True)`` + OR ``set_dihedral(bond, theta, adjustmol=True)`` + If ``adjustmol`` is True and the topology is unambiguous, then the entire molecule's positions will be modified as well Args: - a1,a2,a3,a4 (mdt.Atom): atoms to adjust + a1 (mdt.Bond): central bond in dihedral + a1,a2 (mdt.Atom): atoms around central bond in dihedral + a3, a4 (mdt.Atom): theta (u.Scalar[angle]): new angle to set adjustmol (bool): Adjust all atoms on either side of this bond? """ # TODO: deal with co-linear a1/a4, a2, a3 - the angle is ill-defined \ # (should just an arbitrary axis normal to the central bond) + if a4 is None: + if isinstance(a1, mdt.Bond): + if theta is None: + theta = a2 + a1, a2 = a1.a1, a1.a2 + if a3 is not None and theta is None: + theta, a3 = a3, theta + elif a3 is not None or a4 is not None or theta is None: + raise ValueError('Invalid number of arguments for set_dihedral') + a1, a2, a3, a4 = _infer_dihedral(a1, a2) + current = dihedral(a1, a2, a3, a4) rotation = sub_angles(theta, current) if abs(rotation) < 1.0e-6: return diff --git a/moldesign/geom/shake.py b/moldesign/geom/shake.py new file mode 100644 index 0000000..4030cd5 --- /dev/null +++ b/moldesign/geom/shake.py @@ -0,0 +1,105 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import itertools +import numpy as np +import moldesign as mdt +from moldesign import units as u + +from .constraints import FixedCoordinate, FixedPosition + +# TODO: create dynamics wrapper that uses timestep to explicitly calculate constraint forces + + +def shake_positions(mol, prev_positions, max_cycles=100, use_masses=True): + """ Satisfy all molecular constraints using the SHAKE algorithm + + Args: + mol (moldesign.Molecule): molecule with unsatisfied constraints + prev_positions (mdt.units.Array[length]): positions prior to move + max_cycles (int): halt and raise an exception after this many cycles + + Note: + This algorithm does badly if constraint function gradients go to 0. + + References: + R. Elber, A. Ruymgaart, B. Hess: SHAKE Parallelization. + Eur Phys J Spec Top. 2011 Nov 1; 200(1): 211. + doi:10.1140/epjst/e2011-01525-9 + """ + constraints = [] + for c in mol.constraints: # Replace FixedPosition with 3 FixedCoordinates - it's better behaved + if isinstance(c, FixedPosition): + for i in xrange(3): + vec = np.zeros(3) + vec[i] = 1.0 + constraints.append(FixedCoordinate(c.atom, vec, value=c.value[i])) + else: + constraints.append(c) + + # ---array shapes--- + # prevgrad, currgrad: (num_constr, 3N) + # values: (num_constr,) + # A: (num_constr, num_constr) + # multipliers: (num_constr, ) + # delta: (3N,) + curr = mol.positions.copy() + prev = prev_positions.copy() + mol.positions = prev + prevgrad = np.array([_clean_grad_array(c.gradient()) for c in constraints]) + mol.positions = curr + + if use_masses: + dim_masses = mol.dim_masses + else: + dim_masses = np.ones((mol.num_atoms, 3)) * u.default.mass + flat_masses = dim_masses.defunits_value().flatten() + + for i in xrange(max_cycles): + for c in mol.constraints: + if not c.satisfied(): + break + else: + return # e.g., we're done + + # Get constraint derivatives + # Note: we remove units here because pint does not handle arrays with heterogeneous units + values = np.array([c.error().defunits_value() for c in constraints]) + currgrad = np.array([_clean_grad_array(c.gradient()) for c in constraints]) + + A = np.dot(currgrad/flat_masses, prevgrad.T) + multipliers = np.linalg.solve(A, values) + + # reapply units and adjust positions + delta = multipliers.dot(prevgrad).reshape(mol.num_atoms, 3) * ( + u.default.mass * u.default.length) + + mol.positions -= delta/dim_masses + + else: + raise mdt.ConvergenceFailure('SHAKE did not converge after %d iterations'% + max_cycles) + + +def _clean_grad_array(a): + """ Remove units and flatten array + """ + return a.defunits_value().flatten() + + + + + + + + diff --git a/moldesign/geom/symmetry.py b/moldesign/geom/symmetry.py index f638017..a726a15 100644 --- a/moldesign/geom/symmetry.py +++ b/moldesign/geom/symmetry.py @@ -13,7 +13,6 @@ # limitations under the License. import numpy as np -import scipy.spatial.distance import moldesign as mdt from moldesign import units as u @@ -83,6 +82,7 @@ def get_symmetrized_coords(self, elem): Symmetrize the molecule based on the symmetry operation This will work as long as the symmetry operation brings each atom closest to a symmetry relation. """ + import scipy.spatial.distance # First, apply the transformation oriented_coords = self.orientation diff --git a/moldesign/helpers/README.md b/moldesign/helpers/README.md new file mode 100644 index 0000000..0cbfa07 --- /dev/null +++ b/moldesign/helpers/README.md @@ -0,0 +1,4 @@ +## Helpers subpackage + +The `moldesign.helpers` subpackage contains molecular data processing +routines for internal MDT use \ No newline at end of file diff --git a/moldesign/helpers/__init__.py b/moldesign/helpers/__init__.py new file mode 100644 index 0000000..9d0eff5 --- /dev/null +++ b/moldesign/helpers/__init__.py @@ -0,0 +1,2 @@ +from .helpers import * +from .pdb import * diff --git a/moldesign/helpers.py b/moldesign/helpers/helpers.py similarity index 99% rename from moldesign/helpers.py rename to moldesign/helpers/helpers.py index 98122e2..ae8ff48 100644 --- a/moldesign/helpers.py +++ b/moldesign/helpers/helpers.py @@ -64,7 +64,7 @@ def get_all_atoms(*objects): List[moldesign.AtomContainer]): objects to take atoms from """ - from . import molecules + from moldesign import molecules atoms = collections.OrderedDict() diff --git a/moldesign/helpers/pdb.py b/moldesign/helpers/pdb.py new file mode 100644 index 0000000..71a3c43 --- /dev/null +++ b/moldesign/helpers/pdb.py @@ -0,0 +1,297 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" PDB file parsing utilities + +We don't yet (and hopefully will never need) an internal PDB parser or writer. For now, +routines in this module read and write data that's not necessarily parsed by other implementations. +""" +import collections +from cStringIO import StringIO + +import numpy as np + +import moldesign as mdt + +BioAssembly = collections.namedtuple('BioAssembly', 'desc chains transforms') + + +def insert_ter_records(mol, pdbfile): + """ Inserts TER records to indicate the end of the biopolymeric part of a chain + + Many common PDB writers - including OpenBabel - don't insert TER records. This can + cause a problem for situations such as forcefield assignment. This routine is one + solution to that problem. + + What it does: + This routine inserts 'TER' records + 1) after any protein residue not bound to the next residue via backbone peptide bond, and + 2) after any DNA residue not bound to the next residue via a backbone phosphate bond + + In the input PDB file, the ATOM records be formatted with the proper columns (see + http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM) and + the chain names and residue numbers must match ``chain.pdbname`` and ``residue.pdbindex``, + respectively. + + Args: + mol (moldesign.Molecule): the MDT version of the molecule that pdbfile describes + pdbfile (TextIO OR str): pdb file (file-like or string) + + Returns: + cStringIO.StringIO OR str: copy of the pdb file with added TER records - it will be + returned as the same type passed (i.e., as a filelike buffer or as a string) + """ + + is_string = False + if isinstance(pdbfile, basestring): + pdbfile = StringIO(pdbfile) + is_string = True + + # First, identify where to insert records (if anywhere) + ter_residues = set() + for chain in mol.chains: + if chain.type == 'protein': + ter_residues.add((chain.pdbname, chain.c_terminal.pdbindex)) + elif chain.type == 'dna': + ter_residues.add((chain.pdbname, chain.threeprime_end.pdbindex)) + + # insert the records (if necessary) + newf = StringIO() + pdbfile.seek(0) + watchres = None + for line in pdbfile: + fields = line.split() + if fields and fields[0] in ('ATOM','HETATM'): # line is an atom record + res = (line[21], int(line[22:26].strip())) + if watchres: + if res != watchres: + print >> newf, 'TER' + watchres = None + if res in ter_residues: + watchres = res + + elif watchres is not None: # line is not an atom record + watchres = None + if line.strip() != 'TER': + print >> newf, 'TER' + + newf.write(line) + + newf.seek(0) + if is_string: + return newf.read() + else: + return newf + +def warn_assemblies(mol, assemblies): + """ Print a warning message if the PDB structure contains a biomolecular assembly + """ + + # Don't warn if the only assembly is the asymmetric unit + if len(assemblies) > 1 or len(assemblies.values()[0].transforms) > 1: + print "WARNING: This PDB file contains the following biomolecular assemblies:" + for name, asm in assemblies.iteritems(): + print 'WARNING: Assembly "%s": %d copies of chains %s'%( + name, len(asm.transforms), ', '.join(asm.chains)) + print 'WARNING: Use ``mdt.build_assembly([molecule],[assembly_name])``' \ + ' to build one of the above assemblies' + + +def get_conect_records(pdbfile): + """Parse a PDB file, return CONECT records + + Bond orders are assigned as 1 by default. Repeated CONECT records are interpreted as + higher order bonds. + + Args: + pdbfile (file): file-like object + + Example: + > CONECT 1 2 3 + > CONECT 1 2 + > CONECT 2 1 1 + > CONECT 3 1 + These records are interpreted as a double-bond between atoms 1 and 2 + and a single bond between atoms 1 and 3 + + Note: + This only returns the covalent CONECT records (the first 4 entries) - it doesn't + return salt bridges or hydrogen bonds + + Returns: + dict: CONECT records using serial numbers - + ``{serial1: {serial2:order. serial3:order, }, ...}`` + """ + conect = {} + for line in pdbfile: + fields = line.split() + if len(fields) == 0: + continue + if fields[0] != 'CONECT': + continue + + atombonds = conect.setdefault(int(fields[1]), {}) + for f in fields[2:6]: # TODO: check the end bound + serial = int(f) + if serial not in atombonds: + atombonds[serial] = 0 + atombonds[serial] += 1 + return conect + + +def get_pdb_assemblies(fileobj): + """Parse a PDB file, return biomolecular assembly specifications + + Args: + fileobj (file-like): File-like object for the PDB file + (this object will be rewound before returning) + + Returns: + Mapping[str, BioAssembly]: dict mapping assembly ids to BioAssembly instances + """ + assemblies = {} + lineiter = iter(fileobj) + while True: # first, search for assembly transformations + line = lineiter.next() + fields = line.split() + + # Conditions that indicate we're past the "REMARK 350" section + if fields[0] in ('ATOM', 'HETATM', 'CONECT'): + break + if fields[0] == 'REMARK' and int(fields[1]) > 350: + break + + # look for start of a assembly transformation, i.e. "REMARK 350 BIOMOLECULE: [name] " + if fields[:3] == 'REMARK 350 BIOMOLECULE:'.split(): + assembly_name = fields[-1] + assemblies[assembly_name] = _read_pdb_assembly(lineiter) + + return assemblies + + +def _read_pdb_assembly(lineiter): + """Helper for get_pdb_assemblies + """ + # First, there's description lines: "REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: OCTAMERIC" + description_lines = [] + line = lineiter.next() + fields = line.split() + while fields[:7] != 'REMARK 350 APPLY THE FOLLOWING TO CHAINS:'.split(): + description_lines.append(line[len('REMARK 350 '):]) + line = lineiter.next() + fields = line.split() + description = (''.join(description_lines)).strip() + + # Next, we get the chains in this assembly: "REMARK 350 APPLY THE FOLLOWING TO CHAINS: C, D" + assert fields[:7] == 'REMARK 350 APPLY THE FOLLOWING TO CHAINS:'.split() + chain_names = [x.rstrip(',') for x in fields[7:]] + while fields[-1][-1] == ',': # deal with multi-line lists of chains + line = lineiter.next() + fields = line.split() + assert fields[2:4] == ['AND', 'CHAINS:'] + chain_names.extend(x.rstrip(',') for x in fields[4:]) + + transforms = [] + while True: # loop over each assembly transformation + # example: "REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000 " + t = np.zeros((4, 4)) + t[3, 3] = 1.0 + + for idim in xrange(3): + line = lineiter.next() + fields = line.split() + if idim == 0 and len(fields) == 2: + return BioAssembly(description, chain_names, transforms) + + assert int(fields[3]) == len(transforms)+1 + assert fields[2] == ('BIOMT%d' % (idim+1)) + t[idim, :] = map(float, fields[4:8]) + + transforms.append(t) + + +def assign_biopolymer_bonds(mol): + """ Assign bonds to all standard residues using the PDB chemical component dictionary + + Any unrecognized residues are ignored. + + References: + http://www.wwpdb.org/data/ccd + """ + for chain in mol.chains: + try: + chain.assign_biopolymer_bonds() + except KeyError: + print('WARNING: failed to assign backbone bonds for %s') % str(chain) + for residue in mol.residues: + try: + residue.assign_template_bonds() + except KeyError: + print('WARNING: failed to assign bonds for %s; use ' + '``residue.assign_distance.bonds`` to guess the topology') % str(residue) + + +def assign_unique_hydrogen_names(mol): + """ Assign unique names to all hydrogens, based on either: + 1) information in the Chemical Component Database, or + 2) newly generated, unique names + + Args: + mol (moldesign.Molecule): + """ + + for residue in mol.residues: + if residue.resname in mdt.data.RESIDUE_BONDS: + _assign_hydrogen_names_from_ccd(residue) + else: + _assign_unique_hydrogen_names_in_order(residue) + + residue.rebuild() + + +def _assign_hydrogen_names_from_ccd(residue): + ccd_bonds = mdt.data.RESIDUE_BONDS[residue.resname] + taken = set(atom.name for atom in residue.atoms) + + if 'H' not in taken: + return # nothing to do + if 'H' in ccd_bonds: + taken.remove('H') # someone will actually need to be named "H' + + for atom in residue: + if atom.atnum != 1 or atom.name != 'H': + continue + assert atom.num_bonds == 1, 'Hydrogen has more than one bond' + bond = atom.bonds[0] + other = bond.partner(atom).name + for partner in ccd_bonds[other]: + if partner[0] == 'H' and partner not in taken: + assert ccd_bonds[other][partner] == 1, 'Hydrogen bond order is not 1' + atom.name = partner + taken.add(partner) + break + + +def _assign_unique_hydrogen_names_in_order(residue): + n_hydrogen = 1 + namecounts = collections.Counter(x.name for x in residue.atoms) + if namecounts.get('H', 0) > 1: + used_names = set(atom.name for atom in residue.atoms) + for atom in residue.atoms: + if atom.name == 'H': + name = 'H%d' % n_hydrogen + while name in used_names: + n_hydrogen += 1 + name = 'H%d' % n_hydrogen + atom.name = name + used_names.add(name) diff --git a/moldesign/integrators/openmm.py b/moldesign/integrators/openmm.py index 763a045..0a07318 100644 --- a/moldesign/integrators/openmm.py +++ b/moldesign/integrators/openmm.py @@ -16,7 +16,7 @@ from moldesign import units as u from moldesign import compute -from moldesign.interfaces.openmm import OpenMMPickleMixin, force_remote, MdtReporter, pint2simtk, mm +from moldesign.interfaces.openmm import force_remote, MdtReporter, pint2simtk, OpenMMPickleMixin from .base import IntegratorBase, LangevinBase @@ -39,14 +39,18 @@ def prep(self): self._prepped = True def run(self, run_for, wait=False): - # TODO: like model.minimize, this is a hacky wrapper that we need to replace with - # something more generalizable + self.prep() + + if not self.model._constraints_ok: + raise NotImplementedError('OpenMM only supports position and bond constraints') + try: traj = self._run(run_for) except pyccc.exceptions.ProgramFailure: - raise pyccc.exceptions.ProgramFailure('OpenMM crashed silently. Please examine the output. ' - 'This may be due to large forces from, for example, ' - 'an insufficiently minimized starting geometry.') + raise pyccc.exceptions.ProgramFailure( + 'OpenMM crashed silently. Please examine the output. ' + 'This may be due to large forces from, for example, ' + 'an insufficiently minimized starting geometry.') if force_remote or (not wait): self.mol.energy_model._sync_remote(traj.mol) traj.mol = self.mol @@ -85,14 +89,17 @@ def _attach_reporters(self): @exports class OpenMMVerlet(OpenMMBaseIntegrator): def get_openmm_integrator(self): - integrator = mm.VerletIntegrator(pint2simtk(self.params.timestep)) + from simtk import openmm + integrator = openmm.VerletIntegrator(pint2simtk(self.params.timestep)) return integrator @exports class OpenMMLangevin(LangevinBase, OpenMMBaseIntegrator): def get_openmm_integrator(self): - integrator = mm.LangevinIntegrator( + from simtk import openmm + + integrator = openmm.LangevinIntegrator( pint2simtk(self.params.temperature), pint2simtk(self.params.collision_rate), pint2simtk(self.params.timestep)) diff --git a/moldesign/interfaces/ambertools.py b/moldesign/interfaces/ambertools.py index 87f461d..e546fbb 100644 --- a/moldesign/interfaces/ambertools.py +++ b/moldesign/interfaces/ambertools.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. import collections +import warnings import moldesign as mdt import pyccc @@ -22,8 +23,8 @@ AmberParameters = collections.namedtuple('AmberParameters', 'prmtop inpcrd job') -GAFFParameters = collections.namedtuple('GAFFParameters', - 'lib frcmod job') +ExtraAmberParameters = collections.namedtuple('GAFFParameters', + 'lib frcmod job') DNA_FF = {ff: 'leaprc.DNA.%s'%ff for ff in ['OL15', 'bsc1']} RNA_FF = {ff: 'leaprc.RNA.%s'%ff for ff in ['OL3', 'YIL']} @@ -47,42 +48,75 @@ LEAPRCFILES.update(ffiles) -class ParameterizationError(Exception): pass +class ParameterizationError(Exception): + pass -def am1_bcc_charges(mol, minsteps=None, wait=True): - """ Doesn't work yet ...""" - charge = utils.if_not_none(mol.charge, 0) +@utils.kwargs_from(mdt.compute.run_job) +def calc_am1_bcc_charges(mol, **kwargs): + """Calculate am1 bcc charges + + Args: + mol (moldesign.Molecule): assign partial charges to this molecule + (they will be stored at ``mol.properties['am1-bcc']``) + + Note: + This will implicity run an AM1 energy minimization before calculating the final + partial charges. For more control over this process, use the + ``moldesign.models.SQMPotential`` energy model to calculate the charges. + + Returns: + Mapping[moldesign.Atom, units.Scalar[charge]]: AM1-BCC partial charges on each atom + """ + return _antechamber_calc_charges(mol, 'bcc', 'am1-bcc', kwargs) + - engine = mdt.compute.get_engine() - image = compute.get_image_path(IMAGE, engine) - command = 'antechamber -fi pdb -i mol.pdb -fo mol2 -o out.mol2 -c bcc -an n' - if charge != 0: command += ' -nc %d' % charge - if minsteps is not None: command += ' -ek "maxcyc=%d"' % minsteps +@utils.kwargs_from(mdt.compute.run_job) +def calc_gasteiger_charges(mol, **kwargs): + """Calculate gasteiger charges - def parse_mol2(job): + Args: + mol (moldesign.Molecule): assign partial charges to this molecule + + Returns: + Mapping[moldesign.Atom, units.Scalar[charge]]: gasteiger partial charges on each atom + (they will be stored at ``mol.properties['gasteiger']``) + """ + return _antechamber_calc_charges(mol, 'gas', 'gasteiger', kwargs) + + +def _antechamber_calc_charges(mol, ambname, chargename, kwargs): + charge = utils.if_not_none(mol.charge, 0) + command = 'antechamber -fi pdb -i mol.pdb -fo mol2 -o out.mol2 -c %s -an n'%ambname + if charge != 0: + command += ' -nc %d'%charge.value_in(u.q_e) + + def finish_job(job): """Callback to complete the job""" - atom_info = utils.DotDict(job=job) lines = iter(job.get_output('out.mol2').read().split('\n')) - while True: + charges = utils.DotDict(type='atomic') + + line = lines.next() + while line.strip()[:len('@ATOM')] != '@ATOM': line = lines.next() + + line = lines.next() + while line.strip()[:len('@BOND')] != '@BOND': fields = line.split() - if fields[0] == 'ATOM': - idx = int(fields[1]) - 1 - name = fields[2] - assert mol.atoms[idx].name == name - atom_info[mol.atoms[idx]] = utils.DotDict(partialcharge=u.q_e * float(fields[-2]), - atomtype=fields[-1]) - return atom_info - - job = engine.launch(image, - command=command, - name="am1-bcc, %s" % mol.name, - inputs={'mol.pdb': mol.write(format='pdb')}, - when_finished=parse_mol2) - uibase.display_log(job.get_display_object(), job.name) - if not wait: return job() - else: job.wait() + idx = int(fields[0])-1 + assert mol.atoms[idx].name == fields[1] + charges[mol.atoms[idx]] = u.q_e*float(fields[-1]) + line = lines.next() + + mol.properties[chargename] = charges + return charges + + job = pyccc.Job(image=mdt.compute.get_image_path(IMAGE), + command=command, + name="%s, %s"%(chargename, mol.name), + inputs={'mol.pdb': mol.write(format='pdb')}, + when_finished=finish_job) + return compute.run_job(job, _return_result=True, **kwargs) @utils.kwargs_from(mdt.compute.run_job) @@ -97,36 +131,69 @@ def build_bdna(sequence, **kwargs): Returns: moldesign.Molecule: B-DNA double helix """ - infile = 'molecule m;\nm = bdna( "%s" );\nputpdb( "helix.pdb", m, "-wwpdb");\n'% \ - sequence.lower() + print('DeprecationWarning: build_bdna is deprecated. ' + "Use `build_dna_helix(sequence, helix_type='b')` instead") + return build_dna_helix(sequence, helix_type='b', **kwargs) + + +@utils.kwargs_from(mdt.compute.run_job) +def build_dna_helix(sequence, helix_type='B', **kwargs): + """ Uses Ambertools' Nucleic Acid Builder to build a 3D DNA double-helix. + + Args: + sequence (str): DNA sequence for one of the strands (a complementary sequence will + automatically be created) + helix_type (str): Type of helix - 'A'=Arnott A-DNA + 'B'=B-DNA (from standard templates and helical params), + 'LB'=Langridge B-DNA, + 'AB'=Arnott B-DNA, + 'SB'=Sasisekharan left-handed B-DNA + **kwargs: arguments for :meth:`compute.run_job` + + All helix types except 'B' are taken from fiber diffraction data (see the refernce for details) + + Returns: + moldesign.Molecule: B-DNA double helix + + References: + See NAB / AmberTools documentation: http://ambermd.org/doc12/Amber16.pdf, pg 771-2 + """ + infile = ['molecule m;'] + if helix_type.lower() == 'b': + infile.append('m = bdna( "%s" );' % sequence.lower()) + else: + infile.append('m = fd_helix( "%sdna", "%s", "dna" );' + % (helix_type.lower(), sequence.lower())) + infile.append('putpdb( "helix.pdb", m, "-wwpdb");\n') def finish_job(job): - mol = mdt.read(job.get_output('helix.pdb'), format='pdb') - mol.name = 'BDNA: %s' % sequence + mol = mdt.fileio.read_pdb(job.get_output('helix.pdb').open(), assign_ccd_bonds=False) + if mol.num_chains == 1: + assert mol.num_residues % 2 == 0 + oldchain = mol.chains[0] + oldchain.name = oldchain.pdbindex = oldchain.pdbname = 'A' + newchain = mdt.Chain('B') + for residue in mol.residues[mol.num_residues//2:]: + residue.chain = newchain + for atom in residue: + atom.chain = newchain + mol = mdt.Molecule(mol) + mdt.helpers.assign_biopolymer_bonds(mol) + + mol.name = '%s-DNA Helix: %s' % (helix_type.upper(), sequence) return mol job = pyccc.Job(command='nab -o buildbdna build.nab && ./buildbdna', image=mdt.compute.get_image_path(IMAGE), - inputs={'build.nab': infile}, - name='NAB_build_bdna', + inputs={'build.nab': '\n'.join(infile)}, + name='NAB_build_dna', when_finished=finish_job) return mdt.compute.run_job(job, _return_result=True, **kwargs) -# TODO: use a single force field specification object rather than 20 kwargs @utils.kwargs_from(compute.run_job) -def run_tleap(mol, - protein='ff14SB', - dna='OL15', - rna='OL3', - carbohydrate='GLYCAM_06j-1', - lipid='lipid14', - water='tip3p', - organic='gaff2', - off_files=(), - frcmod_files=(), - **kwargs): +def run_tleap(mol, forcefields=None, parameters=None, **kwargs): """ Drives tleap to create a prmtop and inpcrd file. Specifically uses the AmberTools 16 tleap distribution. @@ -135,15 +202,10 @@ def run_tleap(mol, Args: mol (moldesign.Molecule): Molecule to set up - protein (str): protein forcefield name (default:ff14SB) - dna (str): dna forcefield name (default: OL15) - rna (str): rna forcefield name (default: OL3) - carbohydrate (str): carbohydrate forcefield name (default: GLYCAM_06j) - lipid (str): lipid forcefield name (default: lipid14) - water (str): water forcefield name (default: tip3p) - organic (str): organic forcefield name (default: gaff2) - off_files (List[batch.FileContainer]): - frcmod_files (List[batch.FileContainer]): + forcefields (List[str]): list of the names of forcefields to use + (see AmberTools manual for descriptions) + parameters (List[ExtraAmberParameters]): (optional) list of amber parameters + for non-standard residues **kwargs: keyword arguments to :meth:`compute.run_job` References: @@ -151,23 +213,28 @@ def run_tleap(mol, recommendations. """ # Prepare input for tleap - leapstr = ['source %s' % LEAPRCFILES[ff] for ff in - (protein, dna, rna, carbohydrate, lipid, water, organic)] - - for frcmod in frcmod_files: - fname = frcmod.dumphere() - leapstr.append('loadamberparam %s' % fname) - for off in off_files: - fname = off.dumphere() - leapstr.append('loadoff %s' % fname) + if forcefields is None: forcefields = mdt.forcefields.ffdefaults.values() + leapstr = ['source %s' % LEAPRCFILES[ff] for ff in forcefields] + inputs = {'input.pdb': mdt.helpers.insert_ter_records(mol, mol.write(format='pdb'))} + + if parameters: + if isinstance(parameters, ExtraAmberParameters): + parameters = [parameters] + for ipmtr, p in enumerate(parameters): + frcname = 'res%d.frcmod' % ipmtr + libname = 'res%d.lib' % ipmtr + inputs[frcname] = p.frcmod + inputs[libname] = p.lib + leapstr.append('loadamberparam %s' % frcname) + leapstr.append('loadoff %s' % libname) + leapstr.append('mol = loadpdb input.pdb\n' "check mol\n" "saveamberparm mol output.prmtop output.inpcrd\n" + "savepdb mol output.pdb\n" "quit\n") - # Launch the job - inputs = {'input.pdb': mol.write(format='pdb'), - 'input.leap': '\n'.join(leapstr)} + inputs['input.leap'] = '\n'.join(leapstr) job = pyccc.Job(image=compute.get_image_path(IMAGE), command='tleap -f input.leap', @@ -177,7 +244,7 @@ def run_tleap(mol, return compute.run_job(job, **kwargs) -@mdt.utils.args_from(run_tleap) +@utils.args_from(run_tleap) def assign_forcefield(mol, **kwargs): """ see run_tleap docstring """ from moldesign.widgets.parameterization import ParameterizationDisplay @@ -201,42 +268,75 @@ def assign_forcefield(mol, **kwargs): raise ParameterizationError('TLeap failed to assign force field parameters for %s' % mol, job) -def get_gaff_parameters(mol, charges, image=IMAGE, engine=None): - """ Doesn't work yet""" - inputs = {} +@utils.kwargs_from(mdt.compute.run_job) +def parameterize(mol, charges='esp', ffname='gaff2', **kwargs): + """Parameterize ``mol``, typically using GAFF parameters. + + This will both assign a forcefield to the molecule (at ``mol.ff``) and produce the parameters + so that they can be used in other systems (e.g., so that this molecule can be simulated + embedded in a larger protein) - # Add charges to molecule - inputs['mol.charges'] = '\n'.join(map(str, charges)) - inputs['mol.mol2'] = mol.write(format='mol2') + Note: + 'am1-bcc' and 'gasteiger' partial charges will be automatically computed if necessary. + Other charge types must be precomputed. - # Creates a mol2 file with the passed charges - cmds.append('antechamber -i mol.mol2 -fi mol2 -o mol_charged.mol2 -fo mol2 -c rc -cf mol.charges') + Args: + mol (moldesign.Molecule): + charges (str or dict): what partial charges to use? Can be a dict (``{atom:charge}``) OR + a string, in which case charges will be read from + ``mol.properties.[charges name]``; typical values will be 'esp', 'mulliken', + 'am1-bcc', etc. Use 'zero' to set all charges to 0 (for QM/MM and testing) + ffname (str): Name of the gaff-like forcefield file (default: gaff2) - # Add missing parameters, write out library and parameter files - cmds.append('parmchk -i mol_charged.mol2 -f mol2 -o mol.frcmod') + Returns: + ExtraAmberParameters: Parameters for the molecule; this object can be used to create + forcefield parameters for other systems that contain this molecule + """ + assert mol.num_residues == 1 + resname = mol.residues[0].resname + + if charges == 'am1-bcc' and 'am1-bcc' not in mol.properties: + calc_am1_bcc_charges(mol) + elif charges == 'gasteiger' and 'gasteiger' not in mol.properties: + calc_gasteiger_charges(mol) + + if charges == 'zero': + charge_array = [0.0 for atom in mol.atoms] + elif isinstance(charges, basestring): + charge_array = u.array([mol.properties[charges][atom] for atom in mol.atoms]) + if not charge_array.dimensionless: # implicitly convert floats to fundamental charge units + charge_array = charge_array.to(u.q_e).magnitude + else: + charge_array = [charges[atom] for atom in mol.atoms] - # Create the lib file - cmds.append('tleap -f lea.in') - inputs['leap.in'] = '\n'.join(["source leaprc.%s" % ff, - "source leaprc.gaff", - "LIG = loadmol2 mol_charged.mol2", + inputs = {'mol.mol2': mol.write(format='mol2'), + 'mol.charges': '\n'.join(map(str, charge_array))} + + cmds = ['antechamber -i mol.mol2 -fi mol2 -o mol_charged.mol2 -fo mol2 -c rc -cf mol.charges', + 'parmchk -i mol_charged.mol2 -f mol2 -o mol.frcmod', 'tleap -f leap.in'] + + inputs['leap.in'] = '\n'.join(["source leaprc.%s" % ffname, + "%s = loadmol2 mol_charged.mol2" % resname, "fmod = loadamberparams mol.frcmod", - "check LIG", - "saveoff LIG mol.lib", - "saveamberparm LIG mol.prmtop mol.inpcrd", + "check %s" % resname, + "saveoff %s mol.lib" % resname, + "saveamberparm %s mol.prmtop mol.inpcrd" % resname, "quit\n"]) - # Submit the job and wait - job = engine.launch(imagename, - ' && '.join(cmds), - inputs=inputs, - name="GAFF assignments" % mol.name) - uibase.display_log(job.get_display_object(), "tleap, %s"%mol.name) - job.wait() - - param = GAFFParameters(job.get_output('mol.lib'), - job.get_output('mol.frcmod'), - job) - return param + def finish_job(j): + param = ExtraAmberParameters(j.get_output('mol.lib'), + j.get_output('mol.frcmod'), + j) + tempmol = mdt.assign_forcefield(mol, parameters=param) + mol.ff = tempmol.ff + return param + + job = pyccc.Job(image=mdt.compute.get_image_path(IMAGE), + command=' && '.join(cmds), + inputs=inputs, + when_finished=finish_job, + name="GAFF assignment: %s" % mol.name) + + return mdt.compute.run_job(job, _return_result=True, **kwargs) diff --git a/moldesign/interfaces/biopython_interface.py b/moldesign/interfaces/biopython_interface.py index 568c90d..0e99987 100644 --- a/moldesign/interfaces/biopython_interface.py +++ b/moldesign/interfaces/biopython_interface.py @@ -11,19 +11,46 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import collections + +import itertools +import string import Bio.PDB +import Bio.PDB.MMCIF2Dict import numpy as np import moldesign as mdt from moldesign import units as u +from moldesign.helpers.pdb import BioAssembly + -BioAssembly = collections.namedtuple('BioAssembly', 'desc chains transforms') +def parse_mmcif(f): + """Parse an mmCIF file (using the Biopython parser) and return a molecule + + Note: + This routine is not currently called by any part of the user-facing API! The + OpenBabel parser appears to give more accurate results for the time being. The + molecules created using this routine will NOT have any bond topology! + + Args: + f (file): file-like object containing the mmCIF file + + Returns: + moldesign.Molecule: parsed molecule + """ + return _parse_file(f, Bio.PDB.MMCIFParser) def parse_pdb(f): - """Parse a PDB file (using the Biopython parser), assign bonds, and return a molecule + """Parse a PDB file (using the Biopython parser) and return the basic structure + + Note: + This structure will be missing some key data - most notably bonds, but also + any biomolecular assembly information. Therefore, our default parser combines + this routine with a few other methods to create the final Molecule object + + See also: + moldesign.fileio.read_pdb Args: f (file): file-like object containing the PDB file @@ -34,50 +61,22 @@ def parse_pdb(f): # TODO: this needs to handle strings and streams # TODO: deal with alternate locations - # First, get the structure - parser = Bio.PDB.PDBParser() - struc = parser.get_structure('no name', f) - mol = biopy_to_mol(struc) + return _parse_file(f, Bio.PDB.PDBParser) - # Next, assign standard biopolymer bonds - for chain in mol.chains: - chain.assign_biopolymer_bonds() - for residue in mol.residues: - try: - residue.assign_template_bonds() - except KeyError: - print ('WARNING: failed to assign bonds for residue %s; use ' - '``residue.assign_distance.bonds`` to guess the topology') % str(residue) - - # Get biomolecular assembly info - f.seek(0) - assemblies = get_assemblies(f) - if assemblies: - # Don't warn if the only assembly is the asymmetric unit - if len(assemblies) > 1 or len(assemblies.values()[0].transforms) > 1: - print "WARNING: This PDB file contains the following biomolecular assemblies:" - for name, asm in assemblies.iteritems(): - print 'WARNING: Assembly "%s": %d copies of chains %s' % ( - name, len(asm.transforms), ', '.join(asm.chains)) - print 'WARNING: Use ``mdt.build_assembly([molecule],[assembly_name])``' \ - ' to build one of the above assemblies' - mol.properties.bioassemblies = assemblies - - # Finally, parse the CONECT records - conect_graph = get_conect_records(f) - serials = {atom.pdbindex: atom for atom in mol.atoms} - for atomserial, nbrs in conect_graph.iteritems(): - atom = serials[atomserial] - for nbrserial, order in nbrs.iteritems(): - nbr = serials[nbrserial] - mol.newbond(atom, nbr, order) +def _parse_file(f, parser_type): + parser = parser_type() + struc = parser.get_structure('no name', f) + mol = biopy_to_mol(struc) return mol def biopy_to_mol(struc): """Convert a biopython PDB structure to an MDT molecule. - Because Biopython doesn't assign bonds, assign connectivity using templates. + + Note: + Biopython doesn't deal with bond data, so no bonds will be present + in the Molecule Args: struc (Bio.PDB.Structure.Structure): Biopython PDB structure to convert @@ -87,9 +86,12 @@ def biopy_to_mol(struc): """ # TODO: assign bonds using 1) CONECT records, 2) residue templates, 3) distance newatoms = [] + backup_chain_names = list(string.ascii_uppercase) for chain in struc.get_chains(): tmp, pdbidx, pdbid = chain.get_full_id() + if not pdbid.strip(): + pdbid = backup_chain_names.pop() newchain = mdt.Chain(pdbname=pdbid.strip()) for residue in chain.get_residues(): @@ -99,7 +101,10 @@ def biopy_to_mol(struc): newchain.add(newresidue) for atom in residue.get_atom(): - newatom = mdt.Atom(element=atom.element, + elem = atom.element + if len(elem) == 2: + elem = elem[0] + elem[1].lower() + newatom = mdt.Atom(element=elem, name=atom.get_name(), pdbname=atom.get_name(), pdbindex=atom.get_serial_number()) @@ -112,105 +117,70 @@ def biopy_to_mol(struc): name=struc.get_full_id()[0]) -def get_conect_records(pdbfile): - """Parse a PDB file, return CONECT records - - Bond orders are assigned as 1 by default. Repeated CONECT records are interpreted as - higher order bonds. +def get_mmcif_assemblies(fileobj): + """Parse an mmCIF file, return biomolecular assembly specifications Args: - pdbfile (file): file-like object - - Example: - > CONECT 1 2 3 - > CONECT 1 2 - > CONECT 2 1 1 - > CONECT 3 1 - These records are interpreted as a double-bond between atoms 1 and 2 - and a single bond between atoms 1 and 3 - - Note: - This only returns the covalent CONECT records (the first 4 entries) - it doesn't - return salt bridges or hydrogen bonds + fileobj (file-like): File-like object for the PDB file + (this object will be rewound before returning) Returns: - dict: CONECT records using serial numbers - - ``{serial1: {serial2:order. serial3:order, }, ...}`` + Mapping[str, BioAssembly]: dict mapping assembly ids to BioAssembly instances """ - conect = {} - for line in pdbfile: - fields = line.split() - if len(fields) == 0: continue - if fields[0] != 'CONECT': continue - - atombonds = conect.setdefault(int(fields[1]), {}) - for f in fields[2:6]: # TODO: check the end bound - serial = int(f) - if serial not in atombonds: - atombonds[serial] = 0 - atombonds[serial] += 1 - return conect - - -def get_assemblies(fileobj): + mmcdata = Bio.PDB.MMCIF2Dict.MMCIF2Dict(fileobj) + fileobj.seek(0) # rewind for future access + + if '_pdbx_struct_assembly.id' not in mmcdata: + return {} # no assemblies present + + # Get assembly metadata + ids = mmcdata['_pdbx_struct_assembly.id'] + details = mmcdata['_pdbx_struct_assembly.details'] + chains = mmcdata['_pdbx_struct_assembly_gen.asym_id_list'] + opers = mmcdata['_pdbx_struct_assembly_gen.oper_expression'] + transform_ids = mmcdata['_pdbx_struct_oper_list.id'] + + # Get matrix transformations + tmat = np.zeros((4, 4)).tolist() + for i in xrange(3): # construct displacement vector + tmat[i][3] = mmcdata['_pdbx_struct_oper_list.vector[%d]' % (i+1)] + for i, j in itertools.product(xrange(0, 3), xrange(0, 3)): # construct rotation matrix + tmat[i][j] = mmcdata['_pdbx_struct_oper_list.matrix[%d][%d]' % (i+1, j+1)] + transforms = _make_transform_dict(tmat, transform_ids) + + # Make sure it's a list + if not isinstance(ids, list): + ids = [ids] + details = [details] + chains = [chains] + opers = [opers] + + # now create the assembly specifications assemblies = {} - lineiter = iter(fileobj) - while True: # first, search for assembly transformations - line = lineiter.next() - fields = line.split() - - # Conditions that indicate we're past the "REMARK 350" section - if fields[0] in ('ATOM', 'HETATM', 'CONECT'): - break - if fields[0] == 'REMARK' and int(fields[1]) > 350: - break - - # look for start of a assembly transformation, i.e. "REMARK 350 BIOMOLECULE: [name] " - if fields[:3] == 'REMARK 350 BIOMOLECULE:'.split(): - assembly_name = fields[-1] - assemblies[assembly_name] = _read_assembly(lineiter) + for id, detail, chainlist, operlist in zip(ids, details, chains, opers): + assert id not in assemblies + transforms = [transforms[i] for i in operlist.split(',')] + assemblies[id] = BioAssembly(detail, chainlist.split(','), transforms) return assemblies -def _read_assembly(lineiter): - - # First, there's description lines: "REMARK 350 AUTHOR DETERMINED BIOLOGICAL UNIT: OCTAMERIC" - description_lines = [] - line = lineiter.next() - fields = line.split() - while fields[:7] != 'REMARK 350 APPLY THE FOLLOWING TO CHAINS:'.split(): - description_lines.append(line[len('REMARK 350 '):]) - line = lineiter.next() - fields = line.split() - description = (''.join(description_lines)).strip() - - # Next, we get the chains in this assembly: "REMARK 350 APPLY THE FOLLOWING TO CHAINS: C, D" - assert fields[:7] == 'REMARK 350 APPLY THE FOLLOWING TO CHAINS:'.split() - chain_names = [x.rstrip(',') for x in fields[7:]] - transforms = [] - - while True: # loop over each assembly transformation - # example: "REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000 " - t = np.zeros((4, 4)) - t[3, 3] = 1.0 - - for idim in xrange(3): - line = lineiter.next() - fields = line.split() - if idim == 0 and len(fields) == 2: - return BioAssembly(description, chain_names, transforms) - - assert int(fields[3]) == len(transforms)+1 - assert fields[2] == ('BIOMT%d' % (idim+1)) - t[idim, :] = map(float, fields[4:8]) - - transforms.append(t) - - - - - +def _make_transform_dict(tmat, transform_ids): + if isinstance(transform_ids, list): + for i, j in itertools.product(xrange(0, 3), xrange(0, 4)): + tmat[i][j] = map(float, tmat[i][j]) + tmat[3][3] = [1.0]*len(transform_ids) + tmat[3][0] = tmat[3][1] = tmat[3][2] = [0.0]*len(transform_ids) + tmat = np.array(tmat) + transforms = {id: tmat[:, :, i] for i, id in enumerate(transform_ids)} + else: + for i, j in itertools.product(xrange(0, 4), xrange(0, 4)): + tmat[i][j] = float(tmat[i][j]) + tmat[3][3] = 1.0 + tmat = np.array(tmat) + transforms = {transform_ids: tmat} + + return transforms diff --git a/moldesign/interfaces/openbabel.py b/moldesign/interfaces/openbabel.py index bcb932a..e4e3be8 100644 --- a/moldesign/interfaces/openbabel.py +++ b/moldesign/interfaces/openbabel.py @@ -16,6 +16,7 @@ import os import string +import collections import moldesign.molecules.atomcollections try: @@ -30,8 +31,7 @@ import moldesign as mdt from moldesign.compute.runsremotely import runsremotely import moldesign.molecules.atoms -from moldesign.units import * -from moldesign.molecules import biounits +from moldesign import units as u def read_file(filename, name=None, format=None): @@ -155,20 +155,22 @@ def guess_bond_orders(mol): @runsremotely(enable=force_remote) -def add_hydrogen(mol): - """Add hydrogens to saturate atomic valences. (Does not assign formal charges or correct - for pH). +def add_hydrogen(mol, ph=None): + """Add hydrogens to saturate atomic valences. Args: mol (moldesign.Molecule): Molecule to saturate + ph (float): Assign formal charges and protonation using pH model; if None (the default), + neutral protonation will be assigned where possible. Returns: moldesign.Molecule: New molecule with all valences saturated """ - # TODO: pH, formal charges pbmol = mol_to_pybel(mol) - pbmol.addh() - newmol = pybel_to_mol(pbmol) + pbmol.OBMol.AddHydrogens(False, + ph is not None,) + newmol = pybel_to_mol(pbmol, reorder_atoms_by_residue=True) + mdt.helpers.assign_unique_hydrogen_names(newmol) return newmol @@ -193,20 +195,23 @@ def mol_to_pybel(mdtmol): obatom = obmol.NewAtom() obatom.SetAtomicNum(atom.atnum) atommap[atom] = obatom - pos = atom.position.to('angstrom')._magnitude + pos = atom.position.value_in(u.angstrom) obatom.SetVector(*pos) if atom.residue and atom.residue not in resmap: obres = obmol.NewResidue() resmap[atom.residue] = obres - obres.SetChain(atom.chain.name[0]) - obres.SetName(atom.residue.pdbname) + obres.SetChain(bytes(atom.chain.name[0])) + obres.SetName(bytes(atom.residue.pdbname)) obres.SetNum(atom.residue.pdbindex) else: obres = resmap[atom.residue] obres.AddAtom(obatom) - obres.SetAtomID(obatom, atom.pdbname) + obres.SetHetAtom(obatom, not atom.residue.is_standard_residue) + obres.SetAtomID(obatom, bytes(atom.name)) + obres.SetSerialNum(obatom, + mdt.utils.if_not_none(atom.pdbindex, atom.index+1)) for atom in mdtmol.bond_graph: a1 = atommap[atom] @@ -216,16 +221,15 @@ def mol_to_pybel(mdtmol): obmol.AddBond(a1.GetIdx(), a2.GetIdx(), order) obmol.EndModify() pbmol = pb.Molecule(obmol) - if hasattr(mdtmol.atoms[0], 'charge'): - for atom in atommap: - idx = atommap[atom].GetIdx() - obatom = obmol.GetAtom(idx) - obatom.SetPartialCharge(atom.charge) - print atommap[atom], + + for atom in atommap: + idx = atommap[atom].GetIdx() + obatom = obmol.GetAtom(idx) + obatom.SetFormalCharge(int(atom.formal_charge.value_in(u.q_e))) return pbmol -def pybel_to_mol(pbmol, atom_names=True, **kwargs): +def pybel_to_mol(pbmol, atom_names=True, reorder_atoms_by_residue=False, **kwargs): """ Translate a pybel molecule object into a moldesign object. Note: @@ -234,6 +238,8 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): Args: pbmol (pybel.Molecule): molecule to translate atom_names (bool): use pybel's atom names (default True) + reorder_atoms_by_residue (bool): change atom order so that all atoms in a residue are stored + contiguously **kwargs (dict): keyword arguments to moldesign.Molecule __init__ method Returns: @@ -254,19 +260,20 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): if pybatom.atomicnum == 67: print ("WARNING: openbabel parsed atom serial %d (name:%s) as Holmium; " - "correcting to hydrogen. ")%(pybatom.OBAtom.GetIdx(), name) + "correcting to hydrogen. ") % (pybatom.OBAtom.GetIdx(), name) atnum = 1 elif pybatom.atomicnum == 0: print "WARNING: openbabel failed to parse atom serial %d (name:%s); guessing %s. " % ( pybatom.OBAtom.GetIdx(), name, name[0]) - atnum = moldesign.core.data.ATOMIC_NUMBERS[name[0]] + atnum = moldesign.data.ATOMIC_NUMBERS[name[0]] else: atnum = pybatom.atomicnum mdtatom = moldesign.molecules.atoms.Atom(atnum=atnum, name=name, + formal_charge=pybatom.formalcharge * u.q_e, pdbname=name, pdbindex=pybatom.OBAtom.GetIdx()) newatom_map[pybatom.OBAtom.GetIdx()] = mdtatom - mdtatom.position = pybatom.coords * angstrom + mdtatom.position = pybatom.coords * u.angstrom obres = pybatom.OBAtom.GetResidue() resname = obres.GetName() residx = obres.GetIdx() @@ -275,11 +282,11 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): if chain_id_num not in newchains: # create new chain - if not mdt.utils.is_printable(chain_id.strip()): + if not mdt.utils.is_printable(chain_id.strip()) or not chain_id.strip(): chain_id = backup_chain_names.pop() print 'WARNING: assigned name %s to unnamed chain object @ %s' % ( chain_id, hex(chain_id_num)) - chn = biounits.Chain(pdbname=str(chain_id)) + chn = mdt.Chain(pdbname=str(chain_id)) newchains[chain_id_num] = chn else: chn = newchains[chain_id_num] @@ -287,8 +294,8 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): if residx not in newresidues: # Create new residue pdb_idx = obres.GetNum() - res = biounits.Residue(pdbname=resname, - pdbindex=pdb_idx) + res = mdt.Residue(pdbname=resname, + pdbindex=pdb_idx) newresidues[residx] = res chn.add(res) res.chain = chn @@ -314,6 +321,12 @@ def pybel_to_mol(pbmol, atom_names=True, **kwargs): newtopo[a1][a2] = order newtopo[a2][a1] = order + if reorder_atoms_by_residue: + resorder = {} + for atom in newatoms: + resorder.setdefault(atom.residue, len(resorder)) + newatoms.sort(key=lambda a: resorder[a.residue]) + return mdt.Molecule(newatoms, bond_graph=newtopo, **kwargs) diff --git a/moldesign/interfaces/openmm.py b/moldesign/interfaces/openmm.py index 42a277e..1127a97 100644 --- a/moldesign/interfaces/openmm.py +++ b/moldesign/interfaces/openmm.py @@ -12,31 +12,24 @@ # See the License for the specific language governing permissions and # limitations under the License. import itertools +import imp import numpy as np import pyccc +import moldesign as mdt from moldesign.utils import from_filepath +from moldesign import units as u +from moldesign import compute try: - import simtk.openmm as mm - from simtk import unit as stku - from simtk.openmm import app -except ImportError: - mm = stku = app = None + imp.find_module('simtk') +except (ImportError, OSError) as exc: + print 'OpenMM could not be imported; using remote docker container' force_remote = True else: force_remote = False -from pyccc import LocalFile - -import moldesign as mdt -from moldesign import units as u - -from moldesign import compute - -from moldesign.molecules import Trajectory, Molecule - class OpenMMPickleMixin(object): def __getstate__(self): @@ -48,6 +41,7 @@ def __getstate__(self): return mystate def __setstate__(self, state): + from simtk.openmm import app if 'sim_args' in state: assert 'sim' not in state args = state.pop('sim_args') @@ -55,12 +49,12 @@ def __setstate__(self, state): self.__dict__.update(state) -# This class needs special treatment because it inherits from an -# openmm class, but OpenMM may not be present in the user's environment -if force_remote: - MdtReporter = None -else: - class MdtReporter(app.StateDataReporter): +# This is a factory for the MdtReporter class. It's here so that we don't have to import +# simtk.openmm.app at the module level +def MdtReporter(mol, report_interval): + from simtk.openmm.app import StateDataReporter + + class MdtReporter(StateDataReporter): """ We'll use this class to capture all the information we need about a trajectory It's pretty basic - the assumption is that there will be more processing on the client side @@ -70,7 +64,7 @@ class MdtReporter(app.StateDataReporter): def __init__(self, mol, report_interval): self.mol = mol self.report_interval = report_interval - self.trajectory = Trajectory(mol) + self.trajectory = mdt.Trajectory(mol) self.annotation = None self._row_format = ("{:<%d}" % 10) + 3*("{:>%d}" % self.LEN) self._printed_header = False @@ -133,6 +127,8 @@ def describeNextReport(self, simulation): steps = self.report_interval - simulation.currentStep % self.report_interval return (steps, True, True, True, True) + return MdtReporter(mol, report_interval) + PINT_NAMES = {'mole': u.avogadro, 'degree': u.degrees, @@ -146,6 +142,8 @@ def simtk2pint(quantity, flat=False): :param quantity: :param flat: if True, flatten 3xN arrays to 3N """ + from simtk import unit as stku + mag = quantity._value if quantity.unit == stku.radian: @@ -170,6 +168,8 @@ def pint2simtk(quantity): Note SimTK appears limited, esp for energy units. May need to have pint convert to SI first """ + from simtk import unit as stku + SIMTK_NAMES = {'ang': stku.angstrom, 'fs': stku.femtosecond, 'nm': stku.nanometer, @@ -187,6 +187,8 @@ def pint2simtk(quantity): @compute.runsremotely(enable=force_remote) def _amber_to_mol(prmtop_file, inpcrd_file): + from simtk.openmm import app + prmtop = from_filepath(app.AmberPrmtopFile, prmtop_file) inpcrd = from_filepath(app.AmberInpcrdFile, inpcrd_file) @@ -199,9 +201,9 @@ def _amber_to_mol(prmtop_file, inpcrd_file): if force_remote: def amber_to_mol(prmtop_file, inpcrd_file): if not isinstance(prmtop_file, pyccc.FileContainer): - prmtop_file = LocalFile(prmtop_file) + prmtop_file = pyccc.LocalFile(prmtop_file) if not isinstance(inpcrd_file, pyccc.FileContainer): - inpcrd_file = LocalFile(inpcrd_file) + inpcrd_file = pyccc.LocalFile(inpcrd_file) return _amber_to_mol(prmtop_file, inpcrd_file) else: amber_to_mol = _amber_to_mol @@ -219,6 +221,8 @@ def topology_to_mol(topo, name=None, positions=None, velocities=None, assign_bon do not store bond orders) """ + from simtk import unit as stku + # Atoms atommap = {} newatoms = [] @@ -276,7 +280,7 @@ def topology_to_mol(topo, name=None, positions=None, velocities=None, assign_bon if name is None: name = 'Unnamed molecule from OpenMM' - newmol = Molecule(newatoms, bond_graph=bonds, name=name) + newmol = mdt.Molecule(newatoms, bond_graph=bonds, name=name) if assign_bond_orders: for residue in newmol.residues: @@ -288,5 +292,34 @@ def topology_to_mol(topo, name=None, positions=None, velocities=None, assign_bon return newmol -def mol_to_toplogy(mol): - raise NotImplementedError +def mol_to_topology(mol): + """ Create an openmm topology object from an MDT molecule + + Args: + mol (moldesign.Molecule): molecule to copy topology from + + Returns: + simtk.openmm.app.Topology: topology of the molecule + + """ + from simtk.openmm import app + + top = app.Topology() + chainmap = {chain: top.addChain(chain.name) for chain in mol.chains} + resmap = {res: top.addResidue(res.resname, chainmap[res.chain], str(res.pdbindex)) + for res in mol.residues} + atommap = {atom: top.addAtom(atom.name, + app.Element.getBySymbol(atom.element), + resmap[atom.residue], + id=str(atom.pdbindex)) + for atom in mol.atoms} + for bond in mol.bonds: + top.addBond(atommap[bond.a1], atommap[bond.a2]) + + return top + + +def mol_to_modeller(mol): + from simtk.openmm import app + return app.Modeller(mol_to_topology(mol), pint2simtk(mol.positions)) + diff --git a/moldesign/interfaces/opsin_interface.py b/moldesign/interfaces/opsin_interface.py index 8b89e8a..1dc0e0f 100644 --- a/moldesign/interfaces/opsin_interface.py +++ b/moldesign/interfaces/opsin_interface.py @@ -29,4 +29,8 @@ def name_to_smiles(name, name="opsin, %s" % name) mdt.uibase.display_log(job.get_display_object(), "opsin, %s"%name) job.wait() - return job.get_output('output.txt').read().strip() + smistring = job.get_output('output.txt').read().strip() + if not smistring: + raise ValueError('Could not parse chemical name "%s"' % name) + else: + return smistring diff --git a/moldesign/interfaces/pdbfixer_interface.py b/moldesign/interfaces/pdbfixer_interface.py index bf238b9..243f938 100644 --- a/moldesign/interfaces/pdbfixer_interface.py +++ b/moldesign/interfaces/pdbfixer_interface.py @@ -12,25 +12,34 @@ # See the License for the specific language governing permissions and # limitations under the License. +import imp + +import numpy as np + + +import moldesign as mdt +from moldesign import units as u +from moldesign import compute + +from . import openmm as opm + try: - import pdbfixer as pf -except ImportError: + imp.find_module('pdbfixer') +except (ImportError, OSError) as exc: + print 'PDBFixer could not be imported; using remote docker container' force_remote = True - pf = None else: force_remote = False -from moldesign import units as u - -from . import openmm as opm - +@compute.runsremotely(enable=force_remote) def add_hydrogen(mol, pH=7.4): fixer = _get_fixer(mol) fixer.addMissingHydrogens(pH) return _get_mol(fixer) +@compute.runsremotely(enable=force_remote) def mutate(mol, mutationmap): fixer = _get_fixer(mol) chain_mutations = {} @@ -44,17 +53,84 @@ def mutate(mol, mutationmap): return _get_mol(fixer) -def solvate(mol, padding=10.0*u.angstrom, size=None, cation='Na+', anion='Cl-'): - fixer = _get_fixer(mol) - if size is not None: size = size.to_simtk() - if padding is not None: padding = padding.to_simtk() - fixer.addSolvent(padding=padding, boxSize=size, positiveIon=cation, negativeIon=anion) - return _get_mol(fixer) +@compute.runsremotely(enable=force_remote) +def add_water(mol, min_box_size=None, padding=None, + ion_concentration=None, neutralize=True, + positive_ion='Na+', negative_ion='Cl-'): + """ Solvate a molecule in a water box with optional ions + + Args: + mol (moldesign.Molecule): solute molecule + min_box_size (u.Scalar[length] or u.Vector[length]): size of the water box - either + a vector of x,y,z dimensions, or just a uniform cube length. Either this or + ``padding`` (or both) must be passed + padding (u.Scalar[length]): distance to edge of water box from the solute in each dimension + neutralize (bool): add ions to neutralize solute charge (in + addition to specified ion concentration) + positive_ion (str): type of positive ions to add, if needed. Allowed values + (from OpenMM modeller) are Cs, K, Li, Na (the default) and Rb + negative_ion (str): type of negative ions to add, if needed. Allowed values + (from OpenMM modeller) are Cl (the default), Br, F, and I + ion_concentration (float or u.Scalar[molarity]): ionic concentration in addition to + whatever is needed to neutralize the solute. (if float is passed, we assume the + number is Molar) + + Returns: + moldesign.Molecule: new Molecule object containing both solvent and solute + """ + import pdbfixer + + if padding is None and min_box_size is None: + raise ValueError('Solvate arguments: must pass padding or min_box_size or both.') + + # add +s and -s to ion names if not already present + if positive_ion[-1] != '+': + assert positive_ion[-1] != '-' + positive_ion += '+' + if negative_ion[-1] != '-': + assert negative_ion[-1] != '+' + negative_ion += '-' + + if ion_concentration is not None: + ion_concentration = u.MdtQuantity(ion_concentration) + if ion_concentration.dimensionless: + ion_concentration *= u.molar + + # calculate box size - in each dimension, use the largest of min_box_size or + # the calculated padding + boxsize = np.zeros(3) * u.angstrom + if min_box_size: + boxsize[:] = min_box_size + if padding: + ranges = mol.positions.max(axis=0) - mol.positions.min(axis=0) + for idim, r in enumerate(ranges): + boxsize[idim] = max(boxsize[idim], r+padding) + assert (boxsize >= 0.0).all() + + modeller = opm.mol_to_modeller(mol) + + # TODO: this is like 10 bad things at once. Should probably submit a + # PR to PDBFixer to make this a public staticmethod instead of a private instancemethod + # Alternatively, PR to create Fixers directly from Topology objs + ff = pdbfixer.PDBFixer.__dict__['_createForceField'](None, modeller.getTopology(), True) + + modeller.addSolvent(ff, + boxSize=opm.pint2simtk(boxsize), + positiveIon=positive_ion, + negativeIon=negative_ion, + ionicStrength=opm.pint2simtk(ion_concentration), + neutralize=neutralize) + + return opm.topology_to_mol(modeller.getTopology(), + positions=modeller.getPositions(), + name='%s with water box' % mol.name) + def _get_fixer(mol): + import pdbfixer mol.write('/tmp/tmp.pdb', format='pdb') - fixer = pf.PDBFixer('/tmp/tmp.pdb') + fixer = pdbfixer.PDBFixer('/tmp/tmp.pdb') return fixer def _get_mol(f): diff --git a/moldesign/interfaces/pyscf_interface.py b/moldesign/interfaces/pyscf_interface.py index 34b3048..f934631 100644 --- a/moldesign/interfaces/pyscf_interface.py +++ b/moldesign/interfaces/pyscf_interface.py @@ -14,21 +14,7 @@ from cStringIO import StringIO import numpy as np - -try: - from pyscf import gto, scf, mp, mcscf, ao2mo - import pyscf.grad - from pyscf.dft import numint -except ImportError: - force_remote = True - gto = scf = mp = mcscf = ao2mo = numint = None -except OSError as exc: # TODO: on OSX, this does ... something - print 'WARNING: PySCF error on import - %s: %s' % (type(exc), exc) - print 'WARNING: Using containerized version of PySCF, not the local installation' - force_remote = True - gto = scf = mp = mcscf = ao2mo = numint = None -else: - force_remote = False +import imp import moldesign.units as u from moldesign import compute @@ -36,8 +22,18 @@ from moldesign import orbitals +try: + imp.find_module('pyscf') +except (ImportError, OSError) as exc: + print 'PySCF not installed; using remote docker container' + force_remote = True +else: + force_remote = False + + def mol_to_pyscf(mol, basis, symmetry=None, charge=0, positions=None): """Convert an MDT molecule to a PySCF "Mole" object""" + from pyscf import gto pyscfmol = gto.Mole() positions = if_not_none(positions, mol.atoms.position) @@ -91,6 +87,8 @@ def __call__(self, info): def get_eris_in_basis(basis, orbs): """ Get electron repulsion integrals transformed in (in form eri[i,j,k,l] = (ij|kl)) """ + from pyscf import ao2mo + pmol = mol_to_pyscf(basis.wfn.molecule, basis=basis.basisname) eri = ao2mo.full(pmol, orbs.T, compact=True) * u.hartree eri.defunits_inplace() @@ -112,6 +110,8 @@ def basis_values(mol, basis, coords, coeffs=None, positions=None): Array[length]: if ``coeffs`` is not passed, an array of basis fn values at each coordinate. Otherwise, a list of orbital values at each coordinate """ + from pyscf.dft import numint + # TODO: more than just create the basis by name ... pmol = mol_to_pyscf(mol, basis=basis.basisname, positions=positions) aovals = numint.eval_ao(pmol, np.ascontiguousarray(coords.value_in(u.bohr))) diff --git a/moldesign/mathutils.py b/moldesign/mathutils.py index d02f23f..158948a 100644 --- a/moldesign/mathutils.py +++ b/moldesign/mathutils.py @@ -66,7 +66,7 @@ def safe_arccos(costheta): def sub_angles(a, b): - """ Subtract two angles, keeping the result within [0,360) + """ Subtract two angles, keeping the result within [-180,180) """ c = a - b return (c + 180.0 * u.degrees) % (360.0 * u.degrees) - (180.0 * u.degrees) diff --git a/moldesign/method.py b/moldesign/method.py index d36c046..2a2155c 100644 --- a/moldesign/method.py +++ b/moldesign/method.py @@ -33,6 +33,11 @@ class Method(object): """ list: list of Parameters that can be used to configure this method """ + PARAM_SUPPORT = {} + """ Mapping(str, list): List of supported values for parameters (if a parameter is not found, + it's assumed that all possible values are supported) + """ + def __reduce__(self): return _make_method, (self.__class__, self.params, self.mol) diff --git a/moldesign/min/__init__.py b/moldesign/min/__init__.py index d4157df..57af6e3 100644 --- a/moldesign/min/__init__.py +++ b/moldesign/min/__init__.py @@ -4,6 +4,6 @@ def toplevel(o): __all__ = [] from . import base -from .bfgs import * +from .scipy import * from .descent import * from .smart import * diff --git a/moldesign/min/base.py b/moldesign/min/base.py index d8f324c..2cd367a 100644 --- a/moldesign/min/base.py +++ b/moldesign/min/base.py @@ -23,12 +23,10 @@ class MinimizerBase(object): _strip_units = True # callbacks expect and return dimensionless quantities scaled to default unit system - constraint_restraints = True # if True, add restraint penalties for both constraints and restraints def __init__(self, mol, nsteps=20, force_tolerance=data.DEFAULT_FORCE_TOLERANCE, frame_interval=None, - restraint_multiplier=1.0, _restart_from=0, _restart_energy=None): self.mol = mol @@ -51,7 +49,6 @@ def __init__(self, mol, nsteps=20, # Figure out whether we'll use gradients self.request_list = ['potential_energy'] - self.restraint_multiplier = restraint_multiplier if 'forces' in mol.energy_model.ALL_PROPERTIES: self.gradtype = 'analytical' self.request_list.append('forces') @@ -72,7 +69,7 @@ def _sync_positions(self, vector): def _coords_to_vector(self, coords): """ Convert position array to a flat vector """ - vec = coords.reshape(self.mol.num_atoms * 3) + vec = coords.reshape(self.mol.num_atoms * 3).copy() if self._strip_units: return vec.magnitude else: @@ -82,12 +79,12 @@ def objective(self, vector): """ Callback function to calculate the objective function """ self._sync_positions(vector) - self.mol.calculate(requests=self.request_list) - pot = self.mol.potential_energy + try: + self.mol.calculate(requests=self.request_list) + except mdt.QMConvergenceError: # returning infinity can help rescue some line searches + return np.inf - if self.constraint_restraints: - for constraint in self.mol.constraints: - pot += self.restraint_multiplier * constraint.restraint_penalty() + pot = self.mol.potential_energy if self._initial_energy is None: self._initial_energy = pot self._last_energy = pot @@ -101,14 +98,12 @@ def grad(self, vector): self.mol.calculate(requests=self.request_list) grad = -self.mol.forces - if self.constraint_restraints: - for constraint in self.mol.constraints: - grad -= self.restraint_multiplier * constraint.restraint_penalty_force() - grad = grad.reshape(self.mol.num_atoms * 3) self._last_grad = grad - if self._strip_units: return grad.defunits().magnitude - else: return grad.defunits() + if self._strip_units: + return grad.defunits().magnitude + else: + return grad.defunits() def __call__(self): """ Run the minimization @@ -137,8 +132,8 @@ def callback(self, *args): self.mol.calculate(self.request_list) self.traj.new_frame(minimization_step=self.current_step, - annotation='minimization steps:%d (energy=%s)' % - (self.current_step, self.mol.potential_energy)) + annotation='minimization steps:%d (energy=%s)'% + (self.current_step, self.mol.potential_energy)) if self.nsteps is None: message = ['Minimization step %d' % self.current_step] else: @@ -152,17 +147,17 @@ def callback(self, *args): force = self._last_grad message.append(u'RMS \u2207E={rmsf.magnitude:.3e}, ' - u'max \u2207E={mf.magnitude:.3e}{mf.units}'.format( + u'max \u2207E={mf.magnitude:.3e} {mf.units}'.format( rmsf=np.sqrt(force.dot(force) / self.mol.ndims), mf=np.abs(force).max())) - if self.constraint_restraints and self.mol.constraints: + if self.mol.constraints: nsatisfied = 0 for c in self.mol.constraints: if c.satisfied(): nsatisfied += 1 message.append('constraints:%d/%d' % (nsatisfied, len(self.mol.constraints))) - print ', '.join(message) + print(', '.join(message)) sys.stdout.flush() @classmethod diff --git a/moldesign/min/bfgs.py b/moldesign/min/bfgs.py deleted file mode 100644 index 993659a..0000000 --- a/moldesign/min/bfgs.py +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright 2016 Autodesk Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -import scipy.optimize - -from .base import MinimizerBase -from . import toplevel -from moldesign import utils - - -def exports(o): - __all__.append(o.__name__) - return o -__all__ = [] - - -@exports -class BFGS(MinimizerBase): - """ SciPy's implementation of the BFGS method, with gradients if available. - - Args: - bfgs_threshold (u.Scalar[force]): Maximum force on a single atom - - Note: - This implementation will fail rapidly if large forces are present (>> 1 eV/angstrom). - """ - _strip_units = True - - def run(self): - print 'Starting geometry optimization: scipy.fmin_bfgs with %s gradients' % self.gradtype - options = {'disp': True} - if self.nsteps is not None: - options['maxiter'] = self.nsteps - - if self.gradtype == 'analytical': grad = self.grad - else: grad = None - - if self.force_tolerance is not None: - options['gtol'] = self.force_tolerance.defunits().magnitude - - result = scipy.optimize.minimize(self.objective, - self._coords_to_vector(self.mol.positions), - method='bfgs', - jac=grad, - callback=self.callback, - options=options) - - options['maxiter'] = max(options['maxiter']/5, 2) # reduce number of steps if we need to enforce constraints - for i in xrange(3): # try to satisfy constraints - if all(c.satisfied() for c in self.mol.constraints): break - self.restraint_multiplier += 0.5 - print 'Constraints not satisfied - new restraint multiplier %f ...' % \ - self.restraint_multiplier - result = scipy.optimize.minimize(self.objective, - self._coords_to_vector(self.mol.positions), - method='bfgs', - jac=grad, - callback=self.callback, - options=options) - if not all(c.satisfied() for c in self.mol.constraints): - print 'WARNING! Constraints not satisfied' - self.traj.info = result - - -bfgs = BFGS._as_function('bfgs') -exports(bfgs) -toplevel(bfgs) diff --git a/moldesign/min/descent.py b/moldesign/min/descent.py index 615a432..342cbd3 100644 --- a/moldesign/min/descent.py +++ b/moldesign/min/descent.py @@ -13,6 +13,7 @@ # limitations under the License. import numpy as np +import moldesign as mdt from moldesign import utils from moldesign import units as u from .base import MinimizerBase @@ -30,77 +31,117 @@ class GradientDescent(MinimizerBase): """ A careful (perhaps overly careful) gradient descent implementation designed to relax structures far from equilibrium. - The structure is adjusted along the force direction, but the step size is capped by - ``max_atom_move`` (.075 angstrom by default). If the energy increases after a move, - the move is repeated with half the step size. + A backtracking line search is performed along the steepest gradient direction. + + The maximum move for any single atom is also limited by ``max_atom_move`` Note: This algorithm is good at stably removing large forces, but it's very poorly suited to - locating any type of critical point. + locating any type of critical point; don't use this to find a minimum! + + References: + https://www.math.washington.edu/~burke/crs/408/lectures/L7-line-search.pdf + + Args: + mol (moldesign.Molecule): molecule to minimize + max_atom_move (Scalar[length]): maximum displacement of a single atom + scaling (Scalar[length/force]): unit of displacement per unit force + gamma (float): number between 0 and 1 indicating scale factor for backtracking search + control (float): threshold for terminating line search; this is a proportion + (0<=``control``<=1) of the expected function decrease + **kwargs (dict): kwargs from :class:`MinimizerBase` """ _strip_units = False - @utils.args_from(MinimizerBase, - inject_kwargs={'max_atom_move': 0.075*u.angstrom, - 'gamma': 0.05*(u.angstrom**2)/u.eV}) - def __init__(self, mol, max_atom_move=0.075*u.angstrom, - gamma=0.05*(u.angstrom ** 2)/u.eV, + def __init__(self, mol, + max_atom_move=0.05*u.angstrom, + scaling=0.01*u.angstrom**2/u.eV, + gamma=0.4, control=0.25, **kwargs): - """ - :param max_atom_move: Maximum amount to move an atom - """ super(GradientDescent, self).__init__(mol, **kwargs) assert 'forces' in self.request_list, 'Gradient descent built-in gradients' self.max_atom_move = max_atom_move + self.scaling = scaling self.gamma = gamma + self.control = control self._last_energy = None def run(self): - self.run_once() - self.nsteps = max(self.nsteps / 5, 2) - for i in xrange(3): # try to satisfy constraints - if all(c.satisfied() for c in self.mol.constraints): break - self.restraint_multiplier += 0.5 - print '\nWarning: constraints not satisfied - new restraint multiplier %f ...' % \ - self.restraint_multiplier - self.run_once() - - if not all(c.satisfied() for c in self.mol.constraints): - print 'WARNING! Constraints not satisfied' - - def run_once(self): print 'Starting geometry optimization: built-in gradient descent' - lastproperties = self.mol.calculate() lastenergy = self.objective(self._coords_to_vector(self.mol.positions)) current = self._coords_to_vector(self.mol.positions) for i in xrange(self.nsteps): grad = self.grad(current) - if np.abs(grad.max()) < self.force_tolerance: + if np.abs(grad.max()) < self.force_tolerance: # converged return - move = -self.gamma * grad - mmax = np.abs(move).max() - if mmax > self.max_atom_move: # rescale the move - scale = self.max_atom_move / mmax - #print 'Move too big: scaling step by {scale.magnitude:.6f}'.format(scale=scale) - move *= scale - current += move - newenergy = self.objective(current) - if newenergy > lastenergy: - print 'Energy increased by {x.magnitude:.3e} {x.units}!'.format( - x=(newenergy-lastenergy)) + \ - ' Reverting to previous step and reducing step size.' - self.gamma /= 2.0 - self.max_atom_move /= 2.0 - self.mol.positions = lastproperties.positions - self.mol.properties = lastproperties - else: # update with new positions - self._sync_positions(current) - lastproperties = self.mol.calculate(self.request_list) + + move = self.scale_move(grad) + armijo_goldstein_prefac = self.control * move.norm() + + for icycle in xrange(0, 10): + g = self.gamma**icycle + newpos = self._make_move(current, g * move) + + # move direction may be different than gradient direction due to constraints + move_vec = (newpos-current).normalized() + if grad.dot(move_vec) >= 0.0: # move flipped direction! + if self._constraint_convergence(newpos, current, grad): + return # flip was because we're converged + else: # flip was because move was too big + newenergy = np.inf * u.default.energy + continue + + try: + newenergy = self.objective(newpos) + except mdt.QMConvergenceError: + continue + + if newenergy <= lastenergy + g * armijo_goldstein_prefac * grad.dot(move_vec): + break + else: + if newenergy >= lastenergy: + raise mdt.ConvergenceFailure('Line search failed') + + if self._constraint_convergence(newpos, current, grad): + return + else: + current = newpos lastenergy = newenergy + self._sync_positions(current) + self.callback() + def scale_move(self, grad): + move = -self.scaling*grad + mmax = np.abs(move).max() + if mmax > self.max_atom_move: # rescale the move + move *= self.max_atom_move/mmax + return move + + def _make_move(self, current, move): + if self.mol.constraints: + # TODO: get constraint forces from lagrange multipliers and use them to check for convergence + self._sync_positions(current) + prev = self.mol.positions.copy() + self._sync_positions(current+move) + + mdt.geom.shake_positions(self.mol, prev) + return self._coords_to_vector(self.mol.positions) + else: + return current + move + + def _constraint_convergence(self, pos, lastpos, energygrad): + """ Test for force-based convergence after projecting out constraint forces + + Until the shake method starts explicitly storing constraint forces, we calculate this + direction as the SHAKE-adjusted displacement vector from the current descent step + """ + direction = mdt.mathutils.normalized((pos - lastpos).flatten()) + proj_grad = energygrad.dot(direction) + return abs(proj_grad) < self.force_tolerance + gradient_descent = GradientDescent._as_function('gradient_descent') exports(gradient_descent) diff --git a/moldesign/min/scipy.py b/moldesign/min/scipy.py new file mode 100644 index 0000000..e321dff --- /dev/null +++ b/moldesign/min/scipy.py @@ -0,0 +1,114 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +from __future__ import absolute_import + +from moldesign import units as u + +from .base import MinimizerBase +from . import toplevel + + +def exports(o): + __all__.append(o.__name__) + return o +__all__ = [] + + +class ScipyMinimizer(MinimizerBase): + """ SciPy's implementation of the BFGS method, with gradients if available. + + Args: + bfgs_threshold (u.Scalar[force]): Maximum force on a single atom + + Note: + This implementation will fail rapidly if large forces are present (>> 1 eV/angstrom). + """ + _strip_units = True + _METHOD_NAME = None + _TAKES_FTOL = False + _TAKES_GTOL = False + + def run(self): + import scipy.optimize + + print 'Starting geometry optimization: SciPy/%s with %s gradients'%( + self._METHOD_NAME, self.gradtype) + options = {'disp': True} + if self.nsteps is not None: + options['maxiter'] = self.nsteps + + if self.gradtype == 'analytical': grad = self.grad + else: grad = None + + if self.force_tolerance is not None: + if self._TAKES_GTOL: + options['gtol'] = self.force_tolerance.defunits().magnitude + elif self._TAKES_FTOL: + print ('WARNING: this method does not use force to measure convergence; ' + 'approximating force_tolerance keyword') + options['ftol'] = (self.force_tolerance * u.angstrom / 50.0).defunits_value() + else: + print ('WARNING: no convergence criteria for this method; using defaults') + + result = scipy.optimize.minimize(self.objective, + self._coords_to_vector(self.mol.positions), + method=self._METHOD_NAME, + jac=grad, + callback=self.callback, + options=options, + constraints=self._make_constraints()) + + self.traj.info = result + + def _make_constraints(self): + constraints = [] + for constraint in self.mol.constraints: + fun, jac = self._make_constraint_funs(constraint) + constraints.append(dict(type='eq', + fun=fun, + jac=jac)) + return constraints + + def _make_constraint_funs(self, const): + def fun(v): + self._sync_positions(v) + return const.error().defunits_value() + + def jac(v): + self._sync_positions(v) + return const.gradient().defunits_value().reshape(self.mol.num_atoms*3) + + return fun, jac + + +@exports +class BFGS(ScipyMinimizer): + _METHOD_NAME = 'bfgs' + _TAKES_GTOL = True + + +bfgs = BFGS._as_function('bfgs') +exports(bfgs) +toplevel(bfgs) + + +@exports +class SequentialLeastSquares(ScipyMinimizer): + _METHOD_NAME = 'SLSQP' + _TAKES_FTOL = True + + +sequential_least_squares = SequentialLeastSquares._as_function('sequential_least_squares') +exports(sequential_least_squares) +toplevel(sequential_least_squares) diff --git a/moldesign/min/smart.py b/moldesign/min/smart.py index b48b582..a667f6b 100644 --- a/moldesign/min/smart.py +++ b/moldesign/min/smart.py @@ -13,12 +13,12 @@ # limitations under the License. from .base import MinimizerBase -from . import toplevel, BFGS, GradientDescent +from . import toplevel, BFGS, GradientDescent, SequentialLeastSquares from moldesign import utils from moldesign import units as u -BFGSTHRESH = 1.5 * u.eV / u.angstrom +GDTHRESH = 1.5*u.eV/u.angstrom def exports(o): __all__.append(o.__name__) @@ -29,45 +29,66 @@ def exports(o): @exports class SmartMin(MinimizerBase): """ Uses gradient descent until forces fall below a threshold, - then switches to BFGS. + then switches to BFGS (unconstrained) or SLSQP (constrained). Args: - bfgs_threshold (u.Scalar[force]): Maximum force on a single atom + gd_threshold (u.Scalar[force]): Use gradient descent if there are any forces larger + than this; use an approximate hessian method (BFGS or SLSQP) otherwise Note: Not really that smart. """ + # TODO: use non-gradient methods if forces aren't available _strip_units = True @utils.args_from(MinimizerBase, - inject_kwargs={'bfgs_threshold': BFGSTHRESH}) + inject_kwargs={'gd_threshold': GDTHRESH}) def __init__(self, *args, **kwargs): + self.gd_threshold = kwargs.pop('gd_threshold', GDTHRESH) self.args = args self.kwargs = kwargs super(SmartMin, self).__init__(*args, **kwargs) - self.bfgs_threshold = kwargs.get('bfgs_threshold', BFGSTHRESH) def run(self): + # If forces are already low, go directly to the quadratic convergence methods and return + forces = self.mol.calculate_forces() + if abs(forces).max() <= self.gd_threshold: + spmin = self._make_quadratic_method() + spmin.run() + self.traj = spmin.traj + self.current_step = spmin.current_step + return + + # Otherwise, remove large forces with gradient descent; exit if we pass the cycle limit descent_kwargs = self.kwargs.copy() - descent_kwargs['force_tolerance'] = self.bfgs_threshold + descent_kwargs['force_tolerance'] = self.gd_threshold descender = GradientDescent(*self.args, **descent_kwargs) descender.run() - if descender.current_step >= self.nsteps: self.traj = descender.traj return - bfgs_kwargs = self.kwargs.copy() - bfgs_kwargs['_restart_from'] = descender.current_step - bfgs_kwargs['_restart_energy'] = descender._initial_energy - bfgs_kwargs.setdefault('frame_interval', descender.frame_interval) - bfgsmin = BFGS(*self.args, **bfgs_kwargs) - bfgsmin.current_step = descender.current_step - bfgsmin.run() - - self.traj = descender.traj + bfgsmin.traj - self.current_step = bfgsmin.current_step + # Finally, use a quadratic method to converge the optimization + kwargs = dict(_restart_from=descender.current_step, + _restart_energy=descender._initial_energy) + kwargs['frame_interval'] = self.kwargs.get('frame_interval', + descender.frame_interval) + spmin = self._make_quadratic_method(kwargs) + spmin.current_step = descender.current_step + spmin.run() + self.traj = descender.traj + spmin.traj + self.current_step = spmin.current_step + + def _make_quadratic_method(self, kwargs=None): + if kwargs is None: kwargs = {} + kw = self.kwargs.copy() + kw.update(kwargs) + if self.mol.constraints: + spmin = SequentialLeastSquares(*self.args, **kw) + else: + spmin = BFGS(*self.args, **kw) + return spmin minimize = SmartMin._as_function('minimize') diff --git a/moldesign/models/__init__.py b/moldesign/models/__init__.py index e58e863..0ae4e59 100644 --- a/moldesign/models/__init__.py +++ b/moldesign/models/__init__.py @@ -2,4 +2,5 @@ from .pyscf import * from .models import * from .toys import * +from .amber import * diff --git a/moldesign/models/amber.py b/moldesign/models/amber.py new file mode 100644 index 0000000..050438b --- /dev/null +++ b/moldesign/models/amber.py @@ -0,0 +1,56 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import operator as op + +import moldesign as mdt +from moldesign.parameters import Parameter, WhenParam + +from . import ForceField + + +def exports(o): + __all__.append(o.__name__) + return o +__all__ = [] + + +@exports +class GAFF(ForceField): + """ Model the energy using the GAFF forcefield + + This is implemented as a special case of the ForceField energy model; it automates small + parameterization process + """ + PARAMETERS = [Parameter('partial_charges', + 'Partial charge model', + type=str, + default='am1-bcc', + choices=['am1-bcc', 'gasteiger', 'esp']), + Parameter('gaff_version', + 'GAFF version', + type=str, + choices='gaff gaff2'.split(), + default='gaff2') + ] + ForceField.PARAMETERS + + def prep(self, force=False): + if not self.mol.ff: + mdt.parameterize(self.mol, + charges=self.params.partial_charges, + ffname=self.params.gaff_version) + + super(GAFF, self).prep() + + # TODO: mechanism to store partial charges so they don't need to be constantly recomputed diff --git a/moldesign/models/base.py b/moldesign/models/base.py index b3c79e6..c674c5d 100644 --- a/moldesign/models/base.py +++ b/moldesign/models/base.py @@ -16,7 +16,6 @@ import moldesign as mdt from moldesign import units as u -from moldesign.parameters import mm_model_parameters as mmp, qm_model_parameters as qmp from moldesign.method import Method @@ -61,9 +60,9 @@ def get_formal_charge(self): u.Scalar[charge]: the formal charge used for this model """ if 'charge' in self.params and self.params.charge is not None: - return self.params.charge + return self.params.charge.value_in(u.q_e) elif hasattr(self.mol, 'charge'): - return self.mol.charge + return self.mol.charge.value_in(u.q_e) else: return 0 @@ -123,7 +122,8 @@ def prep(self): class MMBase(EnergyModelBase): """Common interface for molecular mechanics""" - PARAMETERS = EnergyModelBase.PARAMETERS + mmp.values() + PARAMETERS = (EnergyModelBase.PARAMETERS + + mdt.parameters.mm_model_parameters.values()) def __init__(self, *args, **kwargs): super(MMBase, self).__init__(*args, **kwargs) @@ -133,6 +133,8 @@ def __init__(self, *args, **kwargs): class QMBase(EnergyModelBase): """Common interface for quantum mechanics""" + PARAMETERS = mdt.parameters.qm_model_parameters.values() + DEFAULT_PROPERTIES = ['potential_energy', 'nuclear_repulsion', 'dipole_moment', @@ -141,8 +143,6 @@ class QMBase(EnergyModelBase): ALL_PROPERTIES = DEFAULT_PROPERTIES # properties will be a pretty long list for most packages - PARAMETERS = qmp.values() - def set_wfn_guess(self): raise NotImplementedError diff --git a/moldesign/models/models.py b/moldesign/models/models.py index f4ec389..23ab114 100644 --- a/moldesign/models/models.py +++ b/moldesign/models/models.py @@ -13,15 +13,69 @@ # limitations under the License. # TODO: look into http://molmod.github.io/ +""" +"Generic" energy models - models that can be specified directly by name, without worrying about +which specific implementation is used. + +Currently, everything here is an alias. However, more complicated logic (including runtime +dispatch) may be used to determine the best implementation in a given situation +""" +from moldesign import utils + from . import PySCFPotential +from . import OpenMMPotential + def exports(o): __all__.append(o.__name__) return o __all__ = [] + +################## +# ForceField +@exports +class ForceField(OpenMMPotential): + pass # currently an alias + + +################## +# QM generics +@exports +class RHF(PySCFPotential): + @utils.doc_inherit + def __init__(self, *args, **kwargs): + kwargs['theory'] = 'rhf' + super(RHF, self).__init__(*args, **kwargs) + + +@exports +class DFT(PySCFPotential): + @utils.doc_inherit + def __init__(self, *args, **kwargs): + kwargs['theory'] = 'rks' + super(DFT, self).__init__(*args, **kwargs) + + @exports -def RHF(**kwargs): - return PySCFPotential(theory='rhf', **kwargs) +class B3LYP(PySCFPotential): + @utils.doc_inherit + def __init__(self, *args, **kwargs): + kwargs['theory'] = 'rks' + kwargs['functional'] = 'b3lyp' + super(B3LYP, self).__init__(*args, **kwargs) + +@exports +class MP2(PySCFPotential): + @utils.doc_inherit + def __init__(self, *args, **kwargs): + kwargs['theory'] = 'mp2' + super(MP2, self).__init__(*args, **kwargs) +@exports +class CASSCF(PySCFPotential): + @utils.doc_inherit + def __init__(self, *args, **kwargs): + kwargs['theory'] = 'casscf' + super(CASSCF, self).__init__(*args, **kwargs) \ No newline at end of file diff --git a/moldesign/models/openmm.py b/moldesign/models/openmm.py index 194185f..26ef86a 100644 --- a/moldesign/models/openmm.py +++ b/moldesign/models/openmm.py @@ -46,6 +46,7 @@ class OpenMMPotential(MMBase, opm.OpenMMPickleMixin): def __init__(self, **kwargs): super(OpenMMPotential, self).__init__(**kwargs) self.sim = None + self._constraints_ok = True # can OpenMM support these constraints? def get_openmm_simulation(self): if opm.force_remote: @@ -80,6 +81,7 @@ def prep(self, force=False): This will rebuild this OpenMM simulation if: A) it's not built yet, or B) there's a new integrator """ + from simtk.openmm import app # TODO: automatically set _prepped to false if the model or integration parameters change if not force: @@ -92,19 +94,25 @@ def prep(self, force=False): integrator = self.mol.integrator.get_openmm_integrator() self._set_constraints() - self.sim = opm.app.Simulation(self.mm_topology, self.mm_system, integrator) + self.sim = app.Simulation(self.mm_topology, self.mm_system, integrator) self._prepped = True print 'Created OpenMM kernel (Platform: %s)' % self.sim.context.getPlatform().getName() self._prep_integrator = self.mol.integrator + def reset_constraints(self): + self._set_constraints() + def minimize(self, **kwargs): - traj = self._minimize(**kwargs) + if self._constraints_ok: + traj = self._minimize(**kwargs) - if opm.force_remote or (not kwargs.get('wait', False)): - self._sync_remote(traj.mol) - traj.mol = self.mol + if opm.force_remote or (not kwargs.get('wait', False)): + self._sync_remote(traj.mol) + traj.mol = self.mol - return traj + return traj + else: + return super(OpenMMPotential, self).minimize(**kwargs) def _sync_remote(self, mol): # TODO: this is a hack to update the object after a minimization @@ -177,6 +185,7 @@ def get_forcefield(self): ################################################# # "Private" methods for managing OpenMM are below def _set_constraints(self): + self._constraints_ok = True system = self.mm_system fixed_atoms = set() @@ -191,12 +200,12 @@ def _set_constraints(self): elif constraint.desc == 'distance': self.mol.assert_atom(constraint.a1) self.mol.assert_atom(constraint.a2) - system.addConstraint(constraint.a1, - constraint.a2, + system.addConstraint(constraint.a1.index, + constraint.a2.index, opm.pint2simtk(constraint.value)) else: - raise ValueError('OpenMM interface does not support "%s" constraints.' % constraint.desc) + self._constraints_ok = False # Workaround for OpenMM issue: can't have an atom that's both fixed *and* has a distance constraint. # If both atoms in the distance constraint are also fixed, then we can just remove the constraint @@ -210,21 +219,25 @@ def _set_constraints(self): if (ai in fixed_atoms) and (aj in fixed_atoms): system.removeConstraint(ic) num_constraints -= 1 - elif (ai in fixed_atoms) or (aj in fixed_atoms): #only one is fixed + elif (ai in fixed_atoms) or (aj in fixed_atoms): # only one is fixed raise ValueError('In OpenMM, fixed atoms cannot be part of a constrained ' - 'bond (%s)'%moldesign.molecules.bonds.Bond(ai, aj)) + 'bond (%s)' % moldesign.molecules.bonds.Bond(ai, aj)) else: ic += 1 @staticmethod def _make_dummy_integrator(): - return opm.mm.VerletIntegrator(2.0 * opm.stku.femtoseconds) + from simtk import unit as stku + from simtk import openmm + return openmm.VerletIntegrator(2.0 * stku.femtoseconds) def _create_system(self): + from simtk.openmm import app + # Parse the stored PRMTOP file if it's available if ('amber_params' in self.mol.ff) and not hasattr(self, 'mm_prmtop'): print 'Parsing stored PRMTOP file: %s' % self.mol.ff.amber_params.prmtop - self.mm_prmtop = from_filepath(opm.app.AmberPrmtopFile, + self.mm_prmtop = from_filepath(app.AmberPrmtopFile, self.mol.ff.amber_params.prmtop) # Create the OpenMM system @@ -234,21 +247,7 @@ def _create_system(self): self.mm_topology = self.mm_prmtop.topology print 'Created force field using embedded prmtop file' else: - self.mm_pdb = from_filepath(opm.app.PDBFile, - StringIO(self.mol.write(format='pdb'))) - self.mm_topology = self.mm_pdb.topology - ffs = self._get_forcefield_args() - self.mm_forcefield = opm.app.ForceField(*self._get_forcefield_args()) - print 'Created force field using OpenMM templates: %s' % str(ffs) - self.mm_system.createSystem(self.mm_topology, self.mol.name, - **system_params) - - def _get_forcefield_args(self): - ff = self.params.forcefield[:2] - if ff[:5] == 'amber': - return ('%s.xml' % ff, 'tip3p.xml') - else: - raise NotImplementedError() + raise NotImplementedError('OpenMM requires a PRMTOP file') def _set_openmm_state(self): # TODO: periodic state self.sim.context.setPositions(opm.pint2simtk(self.mol.positions)) @@ -290,11 +289,14 @@ def _get_system_params(self): """ Translates the spec from MMBase into system parameter keywords for createSystem """ # need cmm motion - nonbonded_names = {'nocutoff': opm.app.NoCutoff, - 'ewald': opm.app.Ewald, - 'pme': opm.app.PME, - 'cutoff': opm.app.CutoffPeriodic if self.params.periodic else opm.app.CutoffNonPeriodic} - implicit_solvent_names = {'obc': opm.app.OBC2} + from simtk.openmm import app + nonbonded_names = {'nocutoff': app.NoCutoff, + 'ewald': app.Ewald, + 'pme': app.PME, + 'cutoff': app.CutoffPeriodic if self.params.periodic else app.CutoffNonPeriodic} + implicit_solvent_names = {'obc': app.OBC2, + 'obc1': app.OBC1, + None: None} system_params = dict(nonbondedMethod=nonbonded_names[self.params.nonbonded], nonbondedCutoff=opm.pint2simtk(self.params.cutoff), @@ -306,17 +308,20 @@ def _get_system_params(self): if self.mol.integrator.params.get('constrain_water', False): system_params['rigidWater'] = True if self.mol.integrator.params.get('constrain_hbonds', False): - system_params['constraints'] = opm.app.HBonds + system_params['constraints'] = app.HBonds return system_params def list_openmmplatforms(): - return [opm.mm.Platform.getPlatform(ip).getName() - for ip in xrange(opm.mm.Platform.getNumPlatforms())] + from simtk import openmm + return [openmm.Platform.getPlatform(ip).getName() + for ip in xrange(openmm.Platform.getNumPlatforms())] def _system_to_forcefield(system, mol): + from simtk import openmm + # TODO: 1-4 bond rules # TODO: constraints forces = system.getForces() @@ -325,7 +330,7 @@ def _system_to_forcefield(system, mol): ljparameters = {} for f in forces: - if type(f) == opm.mm.HarmonicBondForce: + if type(f) == openmm.HarmonicBondForce: for ibond in xrange(f.getNumBonds()): i1, i2, d0, k = f.getBondParameters(ibond) bond = ff.HarmonicBondTerm(mol.atoms[i1], mol.atoms[i2], @@ -333,7 +338,7 @@ def _system_to_forcefield(system, mol): opm.simtk2pint(d0)) bonds.append(bond) - elif type(f) == opm.mm.HarmonicAngleForce: + elif type(f) == openmm.HarmonicAngleForce: for iangle in xrange(f.getNumAngles()): i1, i2, i3, t0, k = f.getAngleParameters(iangle) angle = ff.HarmonicAngleTerm(mol.atoms[i1], mol.atoms[i2], mol.atoms[i3], @@ -341,7 +346,7 @@ def _system_to_forcefield(system, mol): opm.simtk2pint(t0)) angles.append(angle) - elif type(f) == opm.mm.PeriodicTorsionForce: + elif type(f) == openmm.PeriodicTorsionForce: for itorsion in xrange(f.getNumTorsions()): i1, i2, i3, i4, n, t0, v_n = f.getTorsionParameters(itorsion) torsion = ff.PeriodicTorsionTerm(mol.atoms[i1], mol.atoms[i2], mol.atoms[i3], mol.atoms[i4], @@ -349,7 +354,7 @@ def _system_to_forcefield(system, mol): opm.simtk2pint(t0)) dihedrals.append(torsion) - elif type(f) == opm.mm.NonbondedForce: + elif type(f) == openmm.NonbondedForce: for i, atom in enumerate(mol.atoms): q, sigma, epsilon = f.getParticleParameters(i) charges[atom] = opm.simtk2pint(q) @@ -357,10 +362,10 @@ def _system_to_forcefield(system, mol): opm.simtk2pint(sigma), opm.simtk2pint(epsilon)) - elif type(f) == opm.mm.CMMotionRemover: + elif type(f) == openmm.CMMotionRemover: continue - elif type(f) == opm.mm.GBSAOBCForce: + elif type(f) == openmm.GBSAOBCForce: continue ffparams = ff.FFParameters(bonds, angles, dihedrals, charges, ljparameters) diff --git a/moldesign/models/pyscf.py b/moldesign/models/pyscf.py index a12eb58..47a84f3 100644 --- a/moldesign/models/pyscf.py +++ b/moldesign/models/pyscf.py @@ -11,24 +11,19 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from __future__ import absolute_import # prevent clashes between this module and the "pyscf" -# package - +from __future__ import absolute_import # prevent clashes between this and the "pyscf" package from cStringIO import StringIO -from moldesign import orbitals -from moldesign import units as u, compute, orbitals +import numpy as np + +import moldesign as mdt +from moldesign import units as u +from moldesign import compute, orbitals from moldesign.interfaces.pyscf_interface import force_remote, mol_to_pyscf, \ StatusLogger, SPHERICAL_NAMES from .base import QMBase from moldesign import uibase -from moldesign.utils import DotDict, if_not_none - -if not force_remote: - from pyscf import scf, mp, mcscf - import pyscf.grad -else: - scf = mp = mcscf = None +from moldesign.utils import DotDict def exports(o): @@ -37,6 +32,49 @@ def exports(o): __all__ = [] +class LazyClassMap(object): + """ For lazily importing classes from modules (when there's a lot of import overhead) + + Class names should be stored as their *absolute import strings* so that they can be imported + only when needed + + Example: + >>> myclasses = LazyClassMap({'od': 'collections.OrderedDict'}) + >>> myclasss['od']() + OrderedDict() + """ + def __init__(self, mapping): + self.mapping = mapping + + def __getitem__(self, key): + import importlib + fields = self.mapping[key].split('.') + cls = fields[-1] + modname = '.'.join(fields[:-1]) + mod = importlib.import_module(modname) + return getattr(mod, cls) + + def __contains__(self, item): + return item in self.mapping + + def __iter__(self): + return iter(self.mapping) + +# PySCF metadata constants +THEORIES = LazyClassMap({'hf': 'pyscf.scf.RHF', 'rhf': 'pyscf.scf.RHF', + 'uhf': 'pyscf.scf.UHF', + 'mcscf': 'pyscf.mcscf.CASSCF', 'casscf': 'pyscf.mcscf.CASSCF', + 'casci': 'pyscf.mcscf.CASCI', + 'mp2': 'pyscf.mp.MP2', + 'dft': 'pyscf.dft.RKS', 'rks': 'pyscf.dft.RKS', 'ks': 'pyscf.dft.RKS'}) + +NEEDS_REFERENCE = set('mcscf casscf casci mp2'.split()) +NEEDS_FUNCTIONAL = set('dft rks ks uks'.split()) +IS_SCF = set('rhf uhf hf dft rks ks'.split()) +FORCE_CALCULATORS = LazyClassMap({'rhf': 'pyscf.grad.RHF', 'hf': 'pyscf.grad.RHF', + 'rks': 'pyscf.grad.RKS', 'ks': 'pyscf.grad.RKS'}) + + @exports class PySCFPotential(QMBase): DEFAULT_PROPERTIES = ['potential_energy', @@ -46,17 +84,9 @@ class PySCFPotential(QMBase): 'forces', 'nuclear_forces', 'electronic_forces'] + PARAM_SUPPORT = {'theory': ['rhf', 'rks', 'mp2'], + 'functional': ['b3lyp', 'blyp', 'pbe0', 'x3lyp', 'MPW3LYP5']} - # TODO: need to store theory name (and basis name) synonyms - if scf is not None: # shielding these from failed imports - THEORIES = {'hf': scf.RHF, 'rhf': scf.RHF, - 'uhf': scf.UHF, - 'mcscf': mcscf.CASSCF, 'casscf': mcscf.CASSCF, - 'casci': mcscf.CASCI, - 'mp2': mp.MP2} - FORCE_CALCULATORS = {'rhf': pyscf.grad.RHF, 'hf': pyscf.grad.RHF} - - NEEDS_REFERENCE = set('mcscf casscf casci mp2') FORCE_UNITS = u.hartree / u.bohr def __init__(self, **kwargs): @@ -65,94 +95,179 @@ def __init__(self, **kwargs): self.reference = None self.kernel = None self.logs = StringIO() - self.last_el_state = None - self.logger = uibase.Logger('PySCF interface') # eventually, this be a child of the parent molecule + self.logger = uibase.Logger('PySCF interface') @compute.runsremotely(enable=force_remote, is_imethod=True) - def calculate(self, requests=None, guess=None): - self.logger = uibase.Logger('PySCF calc') # eventually, this be a child of the parent molecule + def calculate(self, requests=None): + self.logger = uibase.Logger('PySCF calc') do_forces = 'forces' in requests - if do_forces and self.params.theory not in self.FORCE_CALCULATORS: + if do_forces and self.params.theory not in FORCE_CALCULATORS: raise ValueError('Forces are only available for the following theories:' - ','.join(self.FORCE_CALCULATORS)) + ','.join(FORCE_CALCULATORS)) if do_forces: - force_calculator = self.FORCE_CALCULATORS[self.params.theory] + force_calculator = FORCE_CALCULATORS[self.params.theory] + + self.prep(force=True) # rebuild every time # Set up initial guess - if guess is not None: - dm0 = guess.density_matrix - elif self.last_el_state is not None: - dm0 = self.last_el_state.density_matrix + if self.params.wfn_guess == 'stored': + dm0 = self.params.initial_guess.density_matrix_ao else: dm0 = None - self.prep(force=True) # rebuild every time + + # Compute reference WFN (if needed) + refobj = self.pyscfmol + if self.params.theory in NEEDS_REFERENCE: + reference = self._build_theory(self.params.get('reference', 'rhf'), + refobj) + kernel, failures = self._converge(reference, dm0=dm0) + refobj = self.reference = kernel + else: + self.reference = None + + # Compute WFN + theory = self._build_theory(self.params['theory'], + refobj) + if self.params['theory'] not in IS_SCF: + theory.kernel() + self.kernel = theory + else: + self.kernel, failures = self._converge(theory, dm0=dm0) + + # Compute forces (if requested) + if do_forces: + grad = force_calculator(self.kernel) + else: + grad = None + + props = self._get_properties(self.reference, self.kernel, grad) + + if self.params.store_orb_guesses: + self.params.wfn_guess = 'stored' + self.params.initial_guess = props['wfn'] + + return props + + def _get_properties(self, ref, kernel, grad): + """ Analyze calculation results and return molecular properties + + Args: + ref (pyscf.Kernel): Reference kernel (can be None) + kernel (pyscf.Kernel): Theory kernel + grad (pyscf.Gradient): Gradient calculation + + Returns: + dict: Molecular property names and values + """ result = {} - # Compute wfn (with reference, if required) - if self.reference: - kernel, failures = self._converge(self.reference, dm0=dm0) - result['reference_energy'] = (kernel.e_tot * u.hartree).defunits() - # TODO: These objects can't be pickled ... need to fix that. - # result['_converged_kernel'] = kernel - # result['_convergence_failures'] = failures - kernel, failures = self._converge(self.kernel, dm0=dm0) - result['potential_energy'] = (kernel.e_tot * u.hartree).defunits() - # result['_converged_kernel'] = kernel - # result['_convergence_failures'] = failures - - # A little bit of wfn analysis if self.reference is not None: - orb_calc = self.reference + result['reference_energy'] = (ref.e_tot*u.hartree).defunits() + # TODO: check sign on correlation energy. Is this true for anything besides MP2? + if hasattr(kernel, 'e_corr'): + result['correlation_energy'] = (kernel.e_corr *u.hartree).defunits() + result['potential_energy'] = result['correlation_energy'] +\ + result['reference_energy'] + else: + result['potential_energy'] = (kernel.e_tot*u.hartree).defunits() + + orb_calc = ref + else: + result['potential_energy'] = (kernel.e_tot*u.hartree).defunits() + orb_calc = kernel + + if grad is not None: + f_e = -1.0 * grad.grad_elec() * self.FORCE_UNITS + f_n = -1.0 * grad.grad_nuc() * self.FORCE_UNITS + result['electronic_forces'] = f_e.defunits() + result['nuclear_forces'] = f_n.defunits() + result['forces'] = result['electronic_forces'] + result['nuclear_forces'] + + if self.params.theory in ('casscf', 'mcscf'): + from pyscf.mcscf import CASCI + casobj = CASCI(ref, + self.params.active_orbitals, + self.params.active_electrons) + elif self.params.theory == 'casci': + casobj = kernel + + if self.params.theory in ('casscf', 'mcscf', 'casci'): + orb_calc = kernel # get the orbs directly from the post-HF theory + casobj.fcisolver.nroots = self.params.get('num_states', + self.params.state_average) + casresult = casobj.kernel() + result['state_energies'] = (casresult[0] * u.hartree).defunits() + result['ci_vectors'] = map(self._parse_fci_vector, casresult[2]) + + # potential_energy is the energy of the molecule's assigned state + result['state_averaged_energy'] = result['potential_energy'] + result['potential_energy'] = result['state_energies'][self.mol.electronic_state_index] + # TODO: add 'reference wavefunction' to result + ao_obj = ref + dips, tdips = _get_multiconf_dipoles(self.pyscfmol, casobj, len(casobj.ci)) + result['state_dipole_moments'] = dips + result['transition_dipole_moments'] = tdips + result['dipole_moment'] = dips[0] + + # TODO: this is general, put it somewhere else + oscs = {} + nstates = len(result['state_energies']) + for i in xrange(nstates): + for j in xrange(i+1, nstates): + excitation_energy = result['state_energies'][j]-result['state_energies'][i] + tdip = result['transition_dipole_moments'][i, j].norm() + oscs[i, j] = (2.0*tdip ** 2*u.m_e*excitation_energy/ + (3.0*u.q_e ** 2*u.hbar ** 2)).to(u.ureg.dimensionless).magnitude + oscs[j, i] = -oscs[i, j] + result['oscillator_strengths'] = oscs else: - orb_calc = self.kernel - ao_matrices = self._get_ao_matrices(orb_calc) + ao_obj = orb_calc + + ao_matrices = self._get_ao_matrices(ao_obj) scf_matrices = self._get_scf_matrices(orb_calc, ao_matrices) - ao_pop, atom_pop = orb_calc.mulliken_pop(verbose=-1) + if hasattr(orb_calc, 'mulliken_pop'): + ao_pop, atom_pop = orb_calc.mulliken_pop(verbose=-1) + result['mulliken'] = DotDict({a: p for a, p in zip(self.mol.atoms, atom_pop)}) + result['mulliken'].type = 'atomic' + + if hasattr(orb_calc, 'dip_moment'): + result['dipole_moment'] = orb_calc.dip_moment() * u.debye # Build the electronic state object basis = orbitals.basis.BasisSet(self.mol, orbitals=self._get_ao_basis_functions(), h1e=ao_matrices.h1e.defunits(), - overlaps=ao_matrices.sao, + overlaps=scf_matrices.pop('sao'), name=self.params.basis) el_state = orbitals.wfn.ElectronicWfn(self.mol, self.pyscfmol.nelectron, - theory=self.params.theory, aobasis=basis, - ao_population=ao_pop, - nuclear_repulsion=(self.pyscfmol.energy_nuc()* - u.hartree).defunits(), - **scf_matrices) + fock_ao=scf_matrices['fock_ao'], + density_matrix_ao=scf_matrices['density_matrix_ao'], + description=self.theoryname) # Build and store the canonical orbitals cmos = [] - for coeffs, energy, occ in zip(orb_calc.mo_coeff.T, - orb_calc.mo_energy * u.hartree, - orb_calc.get_occ()): - cmos.append(orbitals.Orbital(coeffs, wfn=el_state, occupation=occ)) + for iorb, (coeffs, energy) in enumerate(zip(orb_calc.mo_coeff.T, + orb_calc.mo_energy * u.hartree)): + cmos.append(orbitals.Orbital(coeffs, wfn=el_state)) + if hasattr(orb_calc, 'get_occ'): + for orb, occ in zip(cmos, orb_calc.get_occ()): + orb.occupation = occ el_state.add_orbitals(cmos, orbtype='canonical') - # Calculate the forces - if do_forces: - g = force_calculator(self.kernel) - f_e = -1.0 * g.grad_elec() * self.FORCE_UNITS - f_n = -1.0 * g.grad_nuc() * self.FORCE_UNITS - result['electronic_forces'] = f_e.defunits() - result['nuclear_forces'] = f_n.defunits() - result['forces'] = result['electronic_forces'] + result['nuclear_forces'] - # Return the result result['wfn'] = el_state - self.last_el_state = el_state - result['mulliken'] = DotDict({a: p for a, p in zip(self.mol.atoms, atom_pop)}) - result['mulliken'].type = 'atomic' return result def prep(self, force=False): # TODO: spin, isotopic mass, symmetry + for p in 'basis theory'.split(): + if self.params.get(p, None) is None: + raise ValueError('Parameter "%s" is required' % p) + if self._prepped and not force: return self.pyscfmol = self._build_mol() - self.kernel, self.reference = self._build_theories() self._prepped = True def _build_mol(self): @@ -211,26 +326,92 @@ def _converge(self, method, dm0=None): if method.converged: return method, failed - raise orbitals.ConvergenceError(method) + raise mdt.QMConvergenceError(method) - def _build_theories(self): - if self.params.theory in self.NEEDS_REFERENCE: - scf_ref = if_not_none(self.params.scf_reference, 'rhf') - reference = self.THEORIES[scf_ref](self.pyscfmol) - if 'scf_cycles' in self.params: - reference.max_cycle = self.params.scf_cycles - reference.callback = StatusLogger('%s/%s reference procedure:' % (scf_ref, self.params.basis), - ['cycle', 'e_tot'], self.logger) + def _build_theory(self, name, refobj): + if name in ('mscscf', 'casci', 'casscf'): + theory = THEORIES[name](refobj, + self.params.active_orbitals, + self.params.active_electrons) + + if name != 'casci': + theory = theory.state_average_([1.0/self.params.state_average + for i in xrange(self.params.state_average)]) else: - reference = None + theory = THEORIES[name](refobj) - theory = self.THEORIES[self.params.theory](self.pyscfmol) - theory.callback = StatusLogger('%s/%s procedure:' % (self.params.theory, self.params.basis), - ['cycle', 'e_tot'], self.logger) + theory.callback = StatusLogger('%s procedure:' % self.theoryname, + ['cycle', 'e_tot'], + self.logger) if 'scf_cycles' in self.params: theory.max_cycle = self.params.scf_cycles - return theory, reference + + if 'functional' in self.params: + self._assign_functional(theory, name, + self.params.get('functional', None)) + + return theory + + _OCCMAP = {('0', '0'): '0', + ('1', '0'): 'a', + ('0', '1'): 'b', + ('1', '1'): '2'} + + @property + def theoryname(self): + p = self.params + if p.theory == 'rks': + th = 'RKS(%s)' % p.functional.upper() + elif p.theory in ('casscf', 'casci'): + th = '%s(%d,%d)' % (p.theory.upper(), p.active_orbitals, p.active_electrons) + if p.theory == 'casscf' and p.state_average > 1: + th += ' SA-%d' % p.state_average + else: + th = p.theory.upper() + + return '%s/%s' % (th, p.basis) + + def _parse_fci_vector(self, ci_vecmat): + """ Translate the PySCF FCI matrix into a dictionary of configurations and weights + + Args: + ci_vecmat (np.ndarray): ci vector from a PySCF FCI calculation + + Returns: + Mapping[str, float]: dictionary of configuration weights (normalized) organized by + configuration label. Configurations labeled by their active space orbital + occupations: 0 (unoccupied), a (alpha electron only), b (beta electron only), or '2' + (doubly occupied) + + Example: + >>> import numpy as np + >>> model = PySCFPotential(active_orbitals=2, active_electrons=2) + >>> model._parse_fci_vector(np.array([[1.0, 2.0],[3.0, 4.0]])) + {'20': 1.0, + 'ba': 2.0, + 'ab': 3.0, + '02': 4.0} + """ + from pyscf.fci import cistring + conf_bin = cistring.gen_strings4orblist(range(self.params.active_orbitals), + self.params.active_electrons/2) + civecs = {} + for i, ca in enumerate(conf_bin): + for j, cb in enumerate(conf_bin): + astring = bin(ca)[2:].zfill(self.params.active_orbitals) + bstring = bin(cb)[2:].zfill(self.params.active_orbitals) + s = ''.join(reversed([self._OCCMAP[a, b] for a, b in zip(astring, bstring)])) + civecs[s] = ci_vecmat[i, j] + return civecs + + @staticmethod + def _assign_functional(kernel, theory, fname): + if theory in NEEDS_FUNCTIONAL: + if fname is not None: + kernel.xc = fname + else: + raise ValueError('No functional specified for reference theory "%s"' % theory) def _get_ao_basis_functions(self): """ Convert pyscf basis functions into a list of atomic basis functions @@ -244,7 +425,6 @@ def _get_ao_basis_functions(self): Returns: List[moldesign.Gaussians.AtomicBasisFunction] - """ bfs = [] pmol = self.pyscfmol @@ -292,12 +472,59 @@ def _get_ao_matrices(mf): return DotDict(h1e=h1e, sao=sao) def _get_scf_matrices(self, mf, ao_mats): - # TODO: density matrix units??? (dimensionless in this wfn, I think ...) dm = mf.make_rdm1() veff = mf.get_veff(dm=dm) * u.hartree fock = ao_mats.h1e + veff - scf_matrices = dict(density_matrix=dm, + scf_matrices = dict(density_matrix_ao=dm, h2e=veff, fock_ao=fock) scf_matrices.update(ao_mats) - return scf_matrices \ No newline at end of file + return scf_matrices + + +def _get_multiconf_dipoles(basis, mcstate, nstates): + """ Compute dipoles and transition dipoles. Adapted from PySCF examples + + Note: + Dipole moments are computed using the center of the nuclear charge as the origin. Dipole + moments will need to be annotated or translated appropriately for charges systems. + + Args: + basis (): + mcstate (): + nstates (): + + Returns: + List[u.Vector[dipole]]: Dipole moments for each state + Mapping[Tuple[int, int], u.Vector[dipole]]: mapping from pairs of state ids to transition + dipole moments + + References: + https://github.com/sunqm/pyscf/blob/e4d824853c49b7c19eb35cd6f9fe6ea675de932d/examples/1-advanced/030-transition_dipole.py + """ + nuc_charges = [basis.atom_charge(i) for i in xrange(basis.natm)] + nuc_coords = [basis.atom_coord(i) for i in xrange(basis.natm)] + nuc_charge_center = np.einsum('z,zx->x', nuc_charges, nuc_coords)/sum(nuc_charges) + basis.set_common_orig_(nuc_charge_center) + nuc_dip = np.einsum('i,ix->x', nuc_charges, nuc_coords-nuc_charge_center) * u.a0 * u.q_e + + dip_ints = basis.intor('cint1e_r_sph', comp=3) + orbcas = mcstate.mo_coeff[:, mcstate.ncore:mcstate.ncore+mcstate.ncas] + + dipoles, transitions = [], {} + for istate in xrange(nstates): + for fstate in xrange(istate, nstates): + t_dm1 = mcstate.fcisolver.trans_rdm1(mcstate.ci[istate], mcstate.ci[fstate], + mcstate.ncas, mcstate.nelecas) + t_dm1_ao = reduce(np.dot, (orbcas, t_dm1, orbcas.T)) + moment = np.einsum('xij,ji->x', dip_ints, t_dm1_ao) * u.a0 * u.q_e + + if istate == fstate: + dipoles.append(moment) + else: + transitions[istate, fstate] = transitions[fstate, istate] = moment + + for idip, d in enumerate(dipoles): + dipoles[idip] = nuc_dip - d + + return dipoles, transitions diff --git a/moldesign/molecules/__init__.py b/moldesign/molecules/__init__.py index 8b08af2..b4ab73f 100644 --- a/moldesign/molecules/__init__.py +++ b/moldesign/molecules/__init__.py @@ -9,5 +9,7 @@ def toplevel(o): from .bonds import * from .atoms import * from .biounits import * +from .residue import * +from .chain import * from .molecule import * from .trajectory import * diff --git a/moldesign/molecules/atomcollections.py b/moldesign/molecules/atomcollections.py index 647f32c..b97cfe1 100644 --- a/moldesign/molecules/atomcollections.py +++ b/moldesign/molecules/atomcollections.py @@ -15,7 +15,6 @@ import copy import numpy as np -from scipy.spatial import distance as spd import moldesign as mdt from moldesign import units as u @@ -55,6 +54,12 @@ def heavy_atoms(self): """ AtomList: a list of all heavy atoms (i.e., non-hydrogen) in this object """ return AtomList([a for a in self.atoms if a.atnum != 1]) + @property + def mass(self): + """ u.Scalar[mass]: total mass of this object + """ + return sum(a.mass for a in self.atoms) + def get_atoms(self, **queries): """Allows keyword-based atom queries. @@ -98,14 +103,16 @@ def calc_distance_array(self, other=None): >>> dists = self.calc_distance_array(other) >>> dists[i, j] == self.atoms[i].distance(other.atoms[j]) """ + from scipy.spatial.distance import cdist + other = utils.if_not_none(other, self) try: - other_positions = other.positions.value_in(u.ang) + other_positions = other.positions.defunits_value() except AttributeError: - other_positions = np.array([other.position.value_in(u.ang)]) + other_positions = np.array([other.position.defunits_value()]) - distances = spd.cdist(self.position.value_in(u.ang), other_positions) - return distances * u.ang + distances = cdist(self.positions.defunits_value(), other_positions) + return distances * u.default.length def calc_displacements(self): """ Calculate an array of displacements between all atoms in this object @@ -163,7 +170,7 @@ def atoms_within(self, radius, other=None, include_self=False): def num_atoms(self): """ int: number of atoms in this object """ return len(self.atoms) - natoms = numatoms = num_atoms + natoms = num_atoms @property def center_of_mass(self): @@ -296,6 +303,8 @@ def copy(self): Returns: AtomList: list of copied atoms """ + from . import ChildList + oldatoms = self.atoms old_bond_graph = {a: {} for a in self.atoms} for atom in self.atoms: @@ -316,7 +325,7 @@ def copy(self): if atom.chain not in replaced: chain = copy.copy(atom.chain) chain.molecule = None - chain.children = {} + chain.children = ChildList(chain) replaced[atom.chain] = chain else: chain = replaced[atom.chain] @@ -328,7 +337,7 @@ def copy(self): res = copy.copy(atom.residue) res.molecule = None res.chain = atom.chain - res.children = {} + res.children = ChildList(res) res.chain.add(res) replaced[atom.residue] = res diff --git a/moldesign/molecules/atoms.py b/moldesign/molecules/atoms.py index fefb1dd..1fe4a82 100644 --- a/moldesign/molecules/atoms.py +++ b/moldesign/molecules/atoms.py @@ -198,6 +198,7 @@ def markdown_summary(self): lines.append('**Atomic number**: %d' % self.atnum) lines.append("**Mass**: %s" % self.mass) + lines.append('**Formal charge**: %s' % self.formal_charge) if self.molecule is not None: if self.molecule.is_biomolecule: @@ -311,7 +312,7 @@ class Atom(AtomDrawingMixin, AtomGeometryMixin, AtomPropertyMixin, AtomReprMixin ################################################################# # Methods for BUILDING the atom and indexing it in a molecule def __init__(self, name=None, atnum=None, mass=None, chain=None, residue=None, - pdbname=None, pdbindex=None, element=None): + formal_charge=None, pdbname=None, pdbindex=None, element=None): # Allow user to instantiate an atom as Atom(6) or Atom('C') if atnum is None and element is None: @@ -330,13 +331,14 @@ def __init__(self, name=None, atnum=None, mass=None, chain=None, residue=None, if mass is None: self.mass = data.ATOMIC_MASSES[self.atnum] else: self.mass = mass + self.formal_charge = utils.if_not_none(formal_charge, 0.0 * u.q_e) self.residue = residue self.chain = chain self.molecule = None self.index = None self._position = np.zeros(3) * u.default.length self._momentum = np.zeros(3) * (u.default.length* - u.default.mass/u.default.time) + u.default.mass/u.default.time) self._bond_graph = {} def to_json(self, parent=None): @@ -400,7 +402,6 @@ def bond_to(self, other, order): """ if self.molecule is other.molecule: self.bond_graph[other] = other.bond_graph[self] = order - if self.molecule is not None: self.molecule.num_bonds += 1 else: # allow unassigned atoms to be bonded to anything for building purposes self.bond_graph[other] = order return Bond(self, other, order) @@ -475,6 +476,13 @@ def num_bonds(self): """ int: the number of other atoms this atom is bonded to """ return len(self.bond_graph) + nbonds = num_bonds + + @property + def valence(self): + """ int: the sum of this atom's bond orders + """ + return sum(v for v in self.bond_graph.itervalues()) @property def symbol(self): diff --git a/moldesign/molecules/biounits.py b/moldesign/molecules/biounits.py index 618551d..4c31345 100644 --- a/moldesign/molecules/biounits.py +++ b/moldesign/molecules/biounits.py @@ -11,25 +11,114 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +import operator + import moldesign as mdt -from moldesign import data, utils +from moldesign import utils from . import toplevel, AtomList, AtomContainer +class ChildList(AtomContainer): + """ A list of biochemical objects that can be accessed by name or by index. + """ + __len__ = utils.Alias('_childinorder.__len__') + __iter__ = utils.Alias('_childinorder.__iter__') + + def __str__(self): + return str(self._childinorder._items) + + def __repr__(self): + try: + return '' % (self.parent, self) + except: + return '' % id(self) + + def __init__(self, parent): + super(ChildList, self).__init__() + self.parent = parent + self._childbyname = {} + self._childinorder = utils.SortedCollection(key=_sortkey) + + def __dir__(self): + return self.__dict__.keys() + self.__class__.__dict__.keys() + self._childbyname.keys() + + def __getitem__(self, item): + if isinstance(item, basestring): + return self._childbyname[item] + else: + return self._childinorder[item] + + def __setitem__(self, key, val): + if key in self._childbyname: + raise KeyError('%s already exists in %s' % (key, self.parent)) + self._childbyname[key] = val + self._childinorder.insert_right(val) + + def __contains__(self, item): + if isinstance(item, basestring): + return (item in self._childbyname) + else: + return (item in self._childinorder) + + def __getattr__(self, item): + if not hasattr(self, '_childbyname'): + raise AttributeError('Uninitialized') + + try: + return self._childbyname[item] + except KeyError: + raise AttributeError('ChildList object in %s has no attribute %s.' % ( + self.parent, item)) + + def iteratoms(self): + """Iterate over all atoms + + Yields: + Atom: all atoms in this entity and/or its children + """ + for child in self: + if isinstance(child, mdt.Atom): + yield child + else: + for atom in child.iteratoms(): + yield atom + + @property + def atoms(self): + """ AtomList: a sorted list of all atoms in this entity and/or its children + """ + return AtomList(self.iteratoms()) + + def rebuild(self): + self._childbyname = {obj.name: obj for obj in self._childinorder} + + +def _sortkey(x): + return x.pdbindex + + @toplevel -class Entity(AtomContainer, utils.DictLike): +class Entity(AtomContainer): """ Generalized storage mechanism for hierarchical representation of biomolecules, e.g. by residue, chain, etc. Permits other groupings, provided that everything is tree-like. - All children of a given entity must have unique keys. An individual child can be retrieved with + All children of a given entity must have unique names. An individual child can be retrieved with ``entity.childname`` or ``entity['childname']`` or ``entity[index]`` Yields: Entity or mdt.Atom: this entity's children, in order """ + + __getitem__ = utils.Alias('children.__getitem__') + __len__ = utils.Alias('children.__len__') + __iter__ = utils.Alias('children.__iter__') + atoms = utils.Alias('children.atoms') + iteratoms = utils.Alias('children.iteratoms') + rebuild = utils.Alias('children.rebuild') + def __init__(self, name=None, molecule=None, index=None, pdbname=None, pdbindex=None, **kwargs): """ Initialization: @@ -42,6 +131,7 @@ def __init__(self, name=None, molecule=None, index=None, pdbname=None, pdbindex= pdbindex (str): Index of this entity in PDB format """ super(Entity, self).__init__() + self.children = ChildList(self) self.molecule = molecule self.name = name self.index = index @@ -49,17 +139,9 @@ def __init__(self, name=None, molecule=None, index=None, pdbname=None, pdbindex= self.pdbname = pdbname self.pdbindex = pdbindex - self._indexlist = None - for name, val in kwargs.iteritems(): setattr(self, name, val) - @property - def mass(self): - """ u.Scalar[mass]: total mass of this object - """ - return sum(self.atoms.mass) - def add(self, item, key=None): """ Add a child to this entity. @@ -70,40 +152,24 @@ def add(self, item, key=None): item (Entity or mdt.Atom): the child object to add key (str): Key to retrieve this item (default: ``item.name`` ) """ - self._indexlist = None if key is None: key = item.name - if key in self: - raise KeyError('%s already exists in %s' % (key, self)) - self[key] = item + self.children[key] = item - def __contains__(self, item): - # TODO: O(N) lookup is bad - return item in self.children - - def __getitem__(self, item): - try: - return super(Entity, self).__getitem__(item) - except (KeyError, TypeError) as orig: - try: - return self.indexlist[item] - except (TypeError, IndexError) as exc: - raise orig + __setitem__ = add - @property - def indexlist(self): - """ list: list of all children, in order - """ - if self._indexlist is None: - self._indexlist = list(self) - return self._indexlist + def __dir__(self): + return (self.__dict__.keys() + + self.__class__.__dict__.keys() + + [x.name for x in self]) - def __iter__(self): - if self._indexlist is not None: - for item in self._indexlist: yield item - else: - keys = sorted(self.keys()) - for k in keys: yield self[k] + def __getattr__(self, item): + if not hasattr(self, 'children'): + raise AttributeError("Uninitialized") + try: + return self.children[item] + except KeyError: + raise AttributeError('%s has no attribute "%s"' % (self, item)) def __hash__(self): """ Explicitly hash by object id @@ -138,33 +204,6 @@ def __call__(self, **kwargs): retlist.append(child) return retlist - def iteratoms(self): - """Iterate over all atoms (i.e. leaf nodes) - - Yields: - Atom: all atoms in this entity and/or its children - """ - for item in self.itervalues(): - if hasattr(item,'itervalues'): - for x in item.itervalues(): yield x - else: - yield item - - @property - def atoms(self): - """ AtomList: a sorted list of all atoms in this entity and/or its children - """ - atoms = AtomList(sorted(self.iteratoms(), - key=lambda x: x.index)) - return atoms - - @property - def natoms(self): - """ int: number of atoms contained in this entity and its children - """ - return len(self.atoms) - num_atoms = numatoms = natoms - @toplevel class Instance(Entity): @@ -172,412 +211,9 @@ class Instance(Entity): PDB chains. Users won't ever really see this object. """ def __str__(self): - return "biounit container (chains: %s) for molecule %s" % (', '.join(self.keys()), self.molecule.name) - - -@toplevel -class Residue(Entity): - """ A biomolecular residue - most often an amino acid, a nucleic base, or a solvent - molecule. In PDB structures, also often refers to non-biochemical molecules. - - Its children are almost always residues. - - Attributes: - parent (mdt.Molecule): the molecule this residue belongs to - chain (Chain): the chain this residue belongs to - """ - - def copy(self): - newatoms = super(Residue, self).copy() - return newatoms[0].residue - copy.__doc__ = Entity.copy.__doc__ - - def to_json(self): - js = mdt.chemjson.jsonify(self, 'index resname name pdbindex'.split()) - js['chain'] = self.chain.index - js['atoms'] = [atom.index for atom in self.atoms] - return js - - @utils.args_from(Entity) - def __init__(self, **kwargs): - """ Initialization - Args: - **kwargs (): - """ - self.chain = kwargs.get('chain', None) - super(Residue, self).__init__(**kwargs) - if self.index is None and self.molecule is not None: - self.index = self.molecule.residues.index(self) - self.chainindex = None - self._backbone = None - self._sidechain = None - self._template_name = None - if self.name is None: self.name = self.pdbname + str(self.pdbindex) - - def add(self, atom, key=None): - """Deals with atom name clashes within a residue - common for small molecules""" - if atom.residue is not None: - assert atom.residue is self, 'Atom already assigned to a residue' - atom.residue = self - if atom.chain is None: - atom.chain = self.chain - else: - assert atom.chain == self.chain, "Atom's chain does not match residue's chain" + return str(self.children) - if key is not None or atom.name not in self: - return super(Residue, self).add(atom, key=key) - else: - return super(Residue, self).add(atom, key='%s%s' % (atom.name, len(self))) - add.__doc__ = Entity.__doc__ - - @property - def is_n_terminal(self): - """bool: this is the last residue in a peptide - - Raises: - ValueError: if this residue is not an amino acid - """ - if self.type != 'protein': - raise ValueError('This residue is not a recognized peptide monomer') - return self._is_starting_residue - - @property - def is_c_terminal(self): - """bool: this is the first residue in a peptide - - Raises: - ValueError: if this residue is not an amino acid - """ - if self.type != 'protein': - raise ValueError('This residue is not a recognized peptide monomer') - return self._is_ending_residue - - @property - def is_5prime_end(self): - """bool: this is the first base in a strand - - Raises: - ValueError: if this residue is not a DNA base - """ - if self.type != 'dna': - raise ValueError('This residue is not a recognized nucleic acid monomer') - return self._is_starting_residue - - @property - def is_3prime_end(self): - """bool: this is the last base in a strand - - Raises: - ValueError: if this residue is not a DNA base - """ - if self.type != 'dna': - raise ValueError('This residue is not a recognized nucleic acid monomer') - return self._is_ending_residue - - @property - def is_monomer(self): - """bool: this residue is not part of a biopolymer - """ - return self._is_ending_residue and self._is_starting_residue - - @property - def _is_ending_residue(self): - """bool: this is the last residue in the chain""" - for otherres in self.molecule.residues[self.index+1:]: - if otherres.chain != self.chain: - return True - elif otherres.type == self.type: - return False - return True - - @property - def _is_starting_residue(self): - """bool: this is the first residue of its type in the chain""" - for otherres in self.molecule.residues[self.index-1::-1]: - if otherres.chain != self.chain: - return True - elif otherres.type == self.type: - return False - - return True - - def assign_template_bonds(self): - """Assign bonds from bioresidue templates. - - Only assigns bonds that are internal to this residue (does not connect different residues). - The topologies here assume pH7.4 and may need to be corrected for other pHs - - See Also: - :ref:`moldesign.Chain.assign_biopolymer_bonds` - - Raises: - ValueError: if ``residue.resname`` is not in bioresidue templates - KeyError: if an atom in this residue is not recognized """ - try: - resname = self.resname - if self.type == 'protein': - if self.is_n_terminal: - resname = self.resname + '_LSN3' # the protonated form (with NH3+ on the end) - elif self.is_c_terminal: - resname = self.resname + '_LEO2H' # deprotonated form (COO-) - elif self.is_monomer: - resname = self.resname + '_LFZW' # free zwitterion form - - bonds_by_name = data.RESIDUE_BONDS[resname] - self._template_name = resname - except KeyError: - raise ValueError("No bonding template for residue '%s'" % resname) - - # intra-residue bonds - bond_graph = {atom: {} for atom in self} - for atom in self: - for nbrname, order in bonds_by_name.get(atom.name, {}).iteritems(): - try: - nbr = self[nbrname] - except KeyError: # missing atom in this structure is normal (often hydrogen) - pass - else: - bond_graph[atom][nbr] = bond_graph[nbr][atom] = order - - # copy bonds into the right structure (do this last to avoid mangling the graph) - for atom in bond_graph: - atom.bond_graph.update(bond_graph[atom]) - - @property - def next_residue(self): - """Residue: - The next residue in the chain (in the C-direction for proteins, 3' - direction for nucleic acids) - - Raises: - NotImplementedError: If we don't know how to deal with this type of biopolymer - StopIteration: If there isn't a next residue (i.e. it's a 3'- or C-terminus) - """ - if self.type == 'protein': - return self._get_neighbor('C', 'C-terminus') - elif self.type == 'dna': - return self._get_neighbor("O3'", "3' end") - else: - raise NotImplementedError('We only deal with dna and amino acids right now') - - @property - def prev_residue(self): - """Residue: - The next residue in the chain (in the N-direction for proteins, 5' direction for nucleic acids) - - Raises: - NotImplementedError: If we don't know how to deal with this type of biopolymer - StopIteration: If there isn't a previous residue (i.e. it's a 5'- or N-terminus) - """ - if self.type == 'protein': - return self._get_neighbor('N', 'N-terminus') - elif self.type == 'dna': - return self._get_neighbor("P", "5' end") - else: - raise NotImplementedError('We only deal with dna and amino acids right now') - - def _get_neighbor(self, atomname, name): - """Return the first residue found that's bound to the passed atom name - """ - conn_atom = self[atomname] - for nbr in conn_atom.bond_graph: - if nbr.residue is not self: - return nbr.residue - else: - raise StopIteration('%s reached' % name) - - @property - def resname(self): - """str: Synonym for pdbname""" - return self.pdbname - - @resname.setter - def resname(self, val): - self.pdbname = val - - @property - def type(self): - """str: Classification of the residue (protein, solvent, dna, water, unknown)""" - for restype, names in data.RESTYPES.iteritems(): - if self.pdbname in names: - return restype - return 'unknown' - - @property - def code(self): - """str: one-letter amino acid code or two letter nucleic acid code, or '?' otherwise""" - return data.RESIDUE_ONE_LETTER.get(self.pdbname, '?') - - @property - def atomnames(self): - """Residue: synonym for ```self``` for for the sake of readability: - ```molecule.chains['A'].residues[123].atomnames['CA']``` - """ - return self - - @property - def backbone(self): - """ AtomList: all backbone atoms for nucleic and protein residues - (indentified using PDB names); returns None for other residue types - """ - if self._backbone is None: - if self.type not in data.BACKBONES: - return None - self._backbone = AtomList() - for name in data.BACKBONES[self.type]: - try: self._backbone.append(self[name]) - except KeyError: pass - return self._backbone - - @property - def sidechain(self): - """ AtomList: all sidechain atoms for nucleic and protein residues - (defined as non-backbone atoms); returns None for other residue types - """ - if self._sidechain is None: - if self.backbone is None: - return None - bb = set(self.backbone) - self._sidechain = [atom for atom in self if atom not in bb] - return self._sidechain - - def __str__(self): - return 'Residue %s (index %d, chain %s)' % (self.name, self.index, - self.chain.name) - - def _repr_markdown_(self): - return self.markdown_summary() - - def markdown_summary(self): - """ Markdown-formatted information about this residue - - Returns: - str: markdown-formatted string - """ - if self.molecule is None: - lines = ["

Residue %s

" % self.name] - else: - lines = ["

Residue %s (index %d)

" % (self.name, self.index)] - - if self.type == 'protein': - lines.append('**Residue codes**: %s / %s' % (self.resname, self.code)) - else: - lines.append("**Residue code**: %s" % self.resname) - lines.append('**Type**: %s' % self.type) - if self.resname in data.RESIDUE_DESCRIPTIONS: - lines.append('**Description**: %s'%data.RESIDUE_DESCRIPTIONS[self.resname]) - - lines.append('**

Chain:** %s' % self.chain.name) - lines.append('**Sequence number**: %d' % self.pdbindex) - if self.molecule is not None: - lines.append("**Molecule**: %s" % self.molecule.name) - - lines.append("**

Number of atoms**: %s" % self.num_atoms) - if self.backbone: - lines.append("**Backbone atoms:** %s" % ', '.join(x.name for x in self.backbone)) - lines.append("**Sidechain atoms:** %s" % ', '.join(x.name for x in self.sidechain)) - else: - lines.append("**Atom:** %s" % ', '.join(x.name for x in self.atoms)) - - return '
'.join(lines) - - -@toplevel -class Chain(Entity): - """ Biomolecular chain class - its children are almost always residues. - - Attributes: - parent (mdt.Molecule): the molecule this residue belongs to - chain (Chain): the chain this residue belongs to - """ - @utils.args_from(Entity) - def __init__(self, pdbname=None, **kwargs): - super(Chain, self).__init__(pdbname=pdbname, **kwargs) - if self.name is None: self.name = self.pdbname - if self.pdbindex is not None: self.pdbindex = self.pdbname - - def to_json(self): - js = mdt.chemjson.jsonify(self, 'index name pdbindex'.split()) - js['residues'] = [res.index for res in self.residues] - return js - - def copy(self): - newatoms = super(Chain, self).copy() - return newatoms[0].chain - copy.__doc__ = Entity.copy.__doc__ - - @property - def residues(self): - """Chain: synonym for 'self' to enhance readability, - e.g. ``molecule.chains['A'].residue[123]``""" - return self - - def add(self, residue, **kwargs): - if residue.chain is None: - residue.chain = self - else: - assert residue.chain is self, "Residue is not a member of this chain" - - return super(Chain, self).add(residue, **kwargs) - - def assign_biopolymer_bonds(self): - """Connect bonds between residues in this chain. - - See Also: - :ref:`moldesign.Residue.assign_template_bonds` - - Raises: - ValueError: if ``residue.resname`` is not in bioresidue templates - KeyError: if an atom in this residue is not recognized """ - residues = list(self) - residues.sort(key=lambda x: int(x.pdbindex)) - bond_graph = {} - for ires in xrange(len(residues)-1): - r1 = residues[ires] - r2 = residues[ires+1] - - # don't assign bonds unless these are contiguous bioresidues - if r1.pdbindex + 1 != r2.pdbindex: - continue - restype = r1.type - if r2.type != restype: - continue - - # Create the bonds - if restype == 'protein': - bond_graph[r1['C']] = {r2['N']: 1} - bond_graph[r2['N']] = {r1['C']: 1} - elif restype == 'dna': - bond_graph[r1["O3'"]] = {r2['P']: 1} - bond_graph[r2['P']] = {r1["O3'"]: 1} - elif restype == 'rna': - raise NotImplementedError('RNA not yet implemented') - - # copy bonds into the right structure (do this last to avoid mangling the graph) - for atom in bond_graph: - atom.bond_graph.update(bond_graph[atom]) + def __repr__(self): + return '' % str(self.children) - @property - def sequence(self): - """str: this chain's residue sequence with one-letter residue codes - """ - missing = '.' # don't do this - outputs = [] - last_idx = None - for res in sorted(self, key=lambda x:x.pdbindex): - if res.type not in ('protein', 'dna', 'rna'): continue - if last_idx is not None: - num_missing = res.pdbindex - last_idx - 1 - if num_missing > 0: - outputs.append(missing * (res.pdbindex - last_idx - 1)) - if res.code != '?': - outputs.append(res.code) - else: - if len(outputs) > 0 and outputs[-1][-1] != ',': - outputs.append(',') - outputs.append(res.pdbname + ',') - last_idx = res.pdbindex - return ''.join(outputs) - def __str__(self): - return 'Chain %s' % self.name diff --git a/moldesign/molecules/bonds.py b/moldesign/molecules/bonds.py index 01ee940..c0460b9 100644 --- a/moldesign/molecules/bonds.py +++ b/moldesign/molecules/bonds.py @@ -27,7 +27,8 @@ class Bond(object): Notes: Comparisons and hashes involving bonds will return True if the atoms involved in the bonds - are the same. Bond orders are not compared. + are the same. Bond orders are not compared. + These objects are used to represent and pass bond data only - they are not used for storage. Attributes: diff --git a/moldesign/molecules/chain.py b/moldesign/molecules/chain.py new file mode 100644 index 0000000..abdc520 --- /dev/null +++ b/moldesign/molecules/chain.py @@ -0,0 +1,251 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import collections + +import moldesign as mdt +from moldesign import utils, data + +from . import Entity, toplevel + + +@toplevel +class Chain(Entity): + """ Biomolecular chain class - its children are almost always residues. + + Attributes: + parent (mdt.Molecule): the molecule this residue belongs to + chain (Chain): the chain this residue belongs to + """ + @utils.args_from(Entity) + def __init__(self, pdbname=None, **kwargs): + super(Chain, self).__init__(pdbname=pdbname, **kwargs) + if self.name is None: + self.name = self.pdbname + if self.pdbindex is not None: + self.pdbindex = self.pdbname + self._type = None + + self._5p_end = self._3p_end = self._n_terminal = self._c_terminal = None + + @property + def type(self): + """ str: the type of chain - protein, DNA, solvent, etc. + + This field returns the type of chain, classified by the following rules: + 1) If the chain contains only one type of residue, it is given that classification + (so a chain containing only ions has type "ion" + 2) If the chain contains a biopolymer + ligands and solvent, it is classified as a + biopolymer (i.e. 'protein', 'dna', or 'rna'). This is the most common case with .pdb + files from the PDB. + 3) If the chain contains multiple biopolymer types, it will be given a hybrid classification + (e.g. 'dna/rna', 'protein/dna') - this is rare! + 4) If it contains multiple kinds of non-biopolymer residues, it will be called "solvent" + (if all non-bio residues are water/solvent/ion) or given a hybrid name as in 3) + """ + if self._type is None: + + counts = collections.Counter(x.type for x in self.residues) + unique_types = sum(bool(v) for v in counts.itervalues()) + if unique_types == 1: + if self.num_residues == 1: + self._type = data.CHAIN_MONOMER_NAMES.get(self.residues[0].type, + self.residues[0].type) + else: + self._type = self.residues[0].type + + else: + polymer_types = sum(bool(counts[t]) for t in data.BIOPOLYMER_TYPES) + if polymer_types == 1: # the most common case - a polymer + solvent/ligands + for residue in self.residues: + if residue.type in data.BIOPOLYMER_TYPES: break + else: + assert False, "No biopolymer found but polymer_types==1" + self._type = residue.type + + elif polymer_types > 1: # for rare cases, e.g. "DNA/RNA/PROTEIN" + self._type = '/'.join(k for k in data.BIOPOLYMER_TYPES if counts[k]) + elif polymer_types == 0: + if counts['unknown'] > 0: # some molecule + solvent + self._type = '/'.join(k for k in counts if counts[k]) + else: # just solvent + self._type = 'solvent' + return self._type + + @property + def polymer_residues(self): + for res in self.residues: + if res.type in ('dna', 'protein'): + yield res + + @property + def solvent_residues(self): + for res in self.residues: + if res.type in ('water', 'solvent', 'ion'): + yield res + + @property + def unclassified_residues(self): + for res in self.residues: + if res.type == 'unknown': + yield res + + def get_ligand(self): + """ Return a (single) ligand if it exists; raises ValueError if there's not exactly one + + This is a utility routine to get a single ligand from a chain. If there's exactly one + residue, it is returned. If not, ValueError is raised - use + :meth:`Chain.unclassified_residues` to get an iterator over all unclassified residues. + + Returns: + moldesign.Residue: ligand residue + + Raises: + ValueError: if the chain does not contain exactly one unclassifiable residue + """ + iterator = self.unclassified_residues + try: + ligand = iterator.next() + except StopIteration: + raise ValueError('This chain does not appear to contain any ligands') + + try: + nextligand = iterator.next() + except StopIteration: + return ligand + else: + raise ValueError('Multiple ligands detected. Use `chain.unclassified_residues` to ' + 'iterate over them') + + def to_json(self): + js = mdt.chemjson.jsonify(self, 'index name pdbindex'.split()) + js['residues'] = [res.index for res in self.residues] + return js + + def copy(self): + newatoms = super(Chain, self).copy() + return newatoms[0].chain + copy.__doc__ = Entity.copy.__doc__ + + @property + def num_residues(self): + return len(self) + + nresidues = numresidues = num_residues + + @property + def residues(self): + """ChildList: list of residues in this chain """ + return self.children + + def add(self, residue, **kwargs): + if residue.chain is None: + residue.chain = self + else: + assert residue.chain is self, "Residue is not a member of this chain" + + return super(Chain, self).add(residue, **kwargs) + + def _get_chain_end(self, restype, selfattr, test): + currval = getattr(self, selfattr) + if currval is None or not getattr(currval, test): + for residue in self.residues: + if residue.type != restype: + continue + if getattr(residue, test): + setattr(self, selfattr, residue) + break + return getattr(self, selfattr) + + @property + def c_terminal(self): + """moldesign.Residue: The chain's C-terminus (or ``None`` if it does not exist)""" + return self._get_chain_end('protein', '_c_terminal', 'is_c_terminal') + + @property + def n_terminal(self): + """moldesign.Residue: The chain's N-terminus (or ``None`` if it does not exist)""" + return self._get_chain_end('protein', '_n_terminal', 'is_n_terminal') + + @property + def fiveprime_end(self): + """moldesign.Residue: The chain's 5' base (or ``None`` if it does not exist)""" + return self._get_chain_end('dna', '_5p_end', 'is_5prime_end') + + @property + def threeprime_end(self): + """moldesign.Residue: The chain's 3' base (or ``None`` if it does not exist)""" + return self._get_chain_end('dna', '_3p_end', 'is_3prime_end') + + def assign_biopolymer_bonds(self): + """Connect bonds between residues in this chain. + + See Also: + :ref:`moldesign.Residue.assign_template_bonds` + + Raises: + ValueError: if ``residue.resname`` is not in bioresidue templates + KeyError: if an atom in this residue is not recognized """ + residues = list(self) + residues.sort(key=lambda x: int(x.pdbindex)) + bond_graph = {} + for ires in xrange(len(residues)-1): + r1 = residues[ires] + r2 = residues[ires+1] + + # don't assign bonds unless these are contiguous bioresidues + if r1.pdbindex + 1 != r2.pdbindex: + continue + restype = r1.type + if r2.type != restype: + continue + + # Create the bonds + if restype == 'protein': + bond_graph[r1['C']] = {r2['N']: 1} + bond_graph[r2['N']] = {r1['C']: 1} + elif restype == 'dna': + bond_graph[r1["O3'"]] = {r2['P']: 1} + bond_graph[r2['P']] = {r1["O3'"]: 1} + elif restype == 'rna': + raise NotImplementedError('RNA not yet implemented') + + # copy bonds into the right structure (do this last to avoid mangling the graph) + for atom in bond_graph: + atom.bond_graph.update(bond_graph[atom]) + + @property + def sequence(self): + """str: this chain's residue sequence with one-letter residue codes + """ + missing = '.' # don't do this + outputs = [] + last_idx = None + for res in sorted(self, key=lambda x: x.pdbindex): + if res.type not in ('protein', 'dna', 'rna'): continue + if last_idx is not None: + num_missing = res.pdbindex - last_idx - 1 + if num_missing > 0: + outputs.append(missing * (res.pdbindex - last_idx - 1)) + if res.code != '?': + outputs.append(res.code) + else: + if len(outputs) > 0 and outputs[-1][-1] != ',': + outputs.append(',') + outputs.append(res.pdbname + ',') + last_idx = res.pdbindex + return ''.join(outputs) + + def __str__(self): + return 'Chain %s' % self.name diff --git a/moldesign/molecules/molecule.py b/moldesign/molecules/molecule.py index 73a450f..817bade 100644 --- a/moldesign/molecules/molecule.py +++ b/moldesign/molecules/molecule.py @@ -15,7 +15,7 @@ import numpy as np import moldesign as mdt -from moldesign import helpers, utils, data +from moldesign import helpers, utils from moldesign.exceptions import NotCalculatedError from moldesign import units as u from moldesign.compute import DummyJob @@ -62,7 +62,7 @@ def clear_constraints(self): Note: This does NOT clear integrator options - such as "constrain H bonds" """ - self.constraints = [] + self.constraints.clear() self._reset_methods() def constrain_atom(self, atom, pos=None): @@ -126,7 +126,7 @@ def constrain_dihedral(self, atom1, atom2, atom3, atom4, angle=None): angle ([angle]): angle value (default: current angle) Returns: - moldesign.geometry.AngleConstraint: constraint object + moldesign.geom.AngleConstraint: constraint object """ from moldesign import geom self.constraints.append( @@ -205,7 +205,7 @@ def dynamic_dof(self): for constraint in self.constraints: # TODO: deal with more double-counting cases if const_hbonds: - if isinstance(constraint, mdt.DistanceConstraint): + if isinstance(constraint, mdt.geom.DistanceConstraint): # don't double-count constrained hbonds if constraint.a1.atnum == 1 or constraint.a2.atnum == 1: continue df -= constraint.dof @@ -218,7 +218,7 @@ def dynamic_dof(self, val): @property def num_electrons(self): """int: The number of electrons in the system, based on the atomic numbers and self.charge""" - return sum(self.atoms.atnum)-self.charge + return sum(self.atoms.atnum) - self.charge.value_in(u.q_e) @property def homo(self): @@ -398,6 +398,8 @@ def draw_orbitals(self, **kwargs): mdt.orbitals.OrbitalViewer """ from moldesign.widgets.orbitals import OrbitalViewer + if 'wfn' not in self.properties: + self.calculate_wfn() return OrbitalViewer(self, **kwargs) @@ -429,8 +431,13 @@ def markdown_summary(self): lines = ['### Molecule: "%s" (%d atoms)' % (self.name, self.natoms), '**Mass**: {:.2f}'.format(self.mass), '**Formula**: %s' % self.get_stoichiometry(html=True), - '**Potential model**: %s' % str(self.energy_model), - '**Integrator**: %s' % self.integrator] + '**Charge**: %s'%self.charge] + + if self.energy_model: + lines.append('**Potential model**: %s' % str(self.energy_model)) + + if self.integrator: + lines.append('**Integrator**: %s' % str(self.integrator)) if self.is_biomolecule: lines.extend(self.biomol_summary_markdown()) @@ -452,10 +459,13 @@ def biomol_summary_markdown(self): # extra '|' here may be workaround for a bug in ipy.markdown? lines.append(table.markdown(replace={0: ' '}) + '|') - lines.append('### Chains') + lines.append('### Biopolymer chains') seqs = [] for chain in self.chains: seq = chain.sequence + if not seq.strip(): # don't write anything if there's no sequence + continue + # deal with extra-long sequences seqstring = [] for i in xrange(0, len(seq), 80): @@ -463,6 +473,7 @@ def biomol_summary_markdown(self): seqstring = '\n'.join(seqstring) seqs.append('**%s**: `%s`' % (chain.name, seqstring)) lines.append('
'.join(seqs)) + return lines def get_residue_table(self): @@ -470,7 +481,8 @@ def get_residue_table(self): Returns: moldesign.utils.MarkdownTable""" - table = utils.MarkdownTable(*(['chain'] + data.RESTYPES.keys())) + table = utils.MarkdownTable(*(['chain'] + + 'protein dna rna unknown water solvent'.split())) for chain in self.chains: counts = {} unk = [] @@ -545,6 +557,11 @@ def assert_atom(self, atom): assert atom.molecule is self, "Atom %s does not belong to %s" % (atom, self) return atom + def rebuild(self): + self.chains = Instance(molecule=self) + self.residues = [] + self._rebuild_topology() + def _rebuild_topology(self, bond_graph=None): """ Build the molecule's bond graph based on its atoms' bonds @@ -565,11 +582,6 @@ def _rebuild_topology(self, bond_graph=None): self._assign_atom_indices() self._assign_residue_indices() self._dof = None - num_bonds = 0 - for atom in self.bond_graph: - num_bonds += len(atom.bond_graph) - assert num_bonds % 2 == 0 - self.num_bonds = num_bonds / 2 @staticmethod def _build_bonds(atoms): @@ -685,6 +697,9 @@ def run(self, run_for): Returns: moldesign.trajectory.Trajectory """ + if self.integrator is None: + raise ValueError('Cannot simulate; no integrator set for %s' % self) + init_time = self.time traj = self.integrator.run(run_for) print 'Done - integrated "%s" from %s to %s' % (self, init_time, self.time) @@ -706,7 +721,11 @@ def calculate(self, requests=None, wait=True, use_cache=True): Returns: MolecularProperties """ - if requests is None: requests = [] + if self.energy_model is None: + raise ValueError('Cannot calculate properties; no energy model set for %s' % self) + + if requests is None: + requests = [] # Figure out what needs to be calculated, # and either launch the job or set the result @@ -790,9 +809,9 @@ def set_integrator(self, integrator, **params): allexcept=['self'], inject_kwargs={'assert_converged': False}) def minimize(self, assert_converged=False, **kwargs): - """ Run a minimization based on the potential model. + """Perform an energy minimization (aka geometry optimization or relaxation). - If force_tolerance is not specified, the program defaults are used. + If ``force_tolerance`` is not specified, the program defaults are used. If specified, the largest force component must be less than force_tolerance and the RMSD must be less than 1/3 of it. (based on GAMESS OPTTOL keyword) @@ -802,6 +821,9 @@ def minimize(self, assert_converged=False, **kwargs): Returns: moldesign.trajectory.Trajectory """ + if self.energy_model is None: + raise ValueError('Cannot minimize molecule; no energy model set for %s' % self) + try: trajectory = self.energy_model.minimize(**kwargs) except NotImplementedError: @@ -813,13 +835,13 @@ def minimize(self, assert_converged=False, **kwargs): return trajectory - def _reset_methods(self): """ Called whenever a property is changed that the energy model and/or integrator need to know about """ # TODO: what should this do with the property object? + # TODO: handle duplicate constraints (this happens a lot, and is bad) if self.energy_model is not None: self.energy_model._prepped = False if self.integrator is not None: @@ -880,6 +902,8 @@ class Molecule(AtomContainer, (they will be copied automatically if they already belong to another molecule) pdbname (str): Name of the PDB file charge (units.Scalar[charge]): molecule's formal charge + electronic_state_index (int): index of the molecule's electronic state + Examples: Use the ``Molecule`` class to create copies of other molecules and substructures thereof: @@ -905,8 +929,10 @@ class Molecule(AtomContainer, accessed as ``mol.chains[list_index]`` or ``mol.chains[chain_name]`` name (str): A descriptive name for molecule charge (units.Scalar[charge]): molecule's formal charge + constraints (List[moldesign.geom.GeometryConstraint]): list of constraints ndims (int): length of the positions, momenta, and forces arrays (usually 3*self.num_atoms) - num_atoms (int): number of atoms (synonyms: num_atoms, numatoms) + num_atoms (int): number of atoms (synonym: natoms) + num_bonds (int): number of bonds (synonym: nbonds) positions (units.Array[length]): Nx3 array of atomic positions momenta (units.Array[momentum]): Nx3 array of atomic momenta masses (units.Vector[mass]): vector of atomic masses @@ -933,8 +959,6 @@ class Molecule(AtomContainer, - :class:`moldesign.molecules.MolConstraintMixin` - :class:`moldesign.molecules.MolReprMixin` """ - - # TODO: UML diagrams, describe structure positions = ProtectedArray('_positions') momenta = ProtectedArray('_momenta') @@ -942,9 +966,8 @@ def __init__(self, atomcontainer, name=None, bond_graph=None, copy_atoms=False, pdbname=None, - charge=0): - # NEW_FEATURE: deal with random number generators per-geometry - # NEW_FEATURE: per-geometry output logging + charge=None, + electronic_state_index=0): super(Molecule, self).__init__() # copy atoms from another object (i.e., a molecule) @@ -969,10 +992,17 @@ def __init__(self, atomcontainer, self._defres = None self._defchain = None self.pdbname = pdbname - self.charge = charge - self.constraints = [] + self.constraints = utils.ExclusiveList(key=utils.methodcaller('_constraintsig')) self.energy_model = None self.integrator = None + self.electronic_state_index = electronic_state_index + + if charge is not None: + self.charge = charge + if not hasattr(charge, 'units'): # assume fundamental charge units if not explicitly set + self.charge *= u.q_e + else: + self.charge = sum(atom.formal_charge for atom in self.atoms) # Builds the internal memory structures self.chains = Instance(molecule=self) @@ -989,7 +1019,6 @@ def __init__(self, atomcontainer, self._properties = MolecularProperties(self) self.ff = utils.DotDict() - # TODO: underscores or not? Buckyball needs a global rule def newbond(self, a1, a2, order): """ Create a new bond @@ -1001,7 +1030,6 @@ def newbond(self, a1, a2, order): Returns: moldesign.Bond """ - # TODO: this should signal to the energy model that the bond structure has changed assert a1.molecule == a2.molecule == self return a1.bond_to(a2, order) @@ -1015,6 +1043,13 @@ def velocities(self): def velocities(self, value): self.momenta = value * self.dim_masses + @property + def num_bonds(self): + """int: number of chemical bonds in this molecule""" + return sum(atom.nbonds for atom in self.atoms)/2 + + nbonds = num_bonds + def addatom(self, newatom): """ Add a new atom to the molecule @@ -1088,7 +1123,7 @@ def write(self, filename=None, **kwargs): def is_small_molecule(self): """bool: True if molecule's mass is less than 500 Daltons (not mutually exclusive with :meth:`self.is_biomolecule `)""" - return sum(self.atoms.mass) <= 500.0 * u.amu + return self.mass <= 500.0 * u.amu @property def bonds(self): diff --git a/moldesign/molecules/residue.py b/moldesign/molecules/residue.py new file mode 100644 index 0000000..f9e1dfc --- /dev/null +++ b/moldesign/molecules/residue.py @@ -0,0 +1,361 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import moldesign as mdt +from moldesign import utils, data + +from . import Entity, AtomList, toplevel + + +@toplevel +class Residue(Entity): + """ A biomolecular residue - most often an amino acid, a nucleic base, or a solvent + molecule. In PDB structures, also often refers to non-biochemical molecules. + + Its children are almost always residues. + + Attributes: + parent (mdt.Molecule): the molecule this residue belongs to + chain (Chain): the chain this residue belongs to + """ + + def copy(self): + newatoms = super(Residue, self).copy() + return newatoms[0].residue + copy.__doc__ = Entity.copy.__doc__ + + def to_json(self): + js = mdt.chemjson.jsonify(self, 'index resname name pdbindex'.split()) + js['chain'] = self.chain.index + js['atoms'] = [atom.index for atom in self.atoms] + return js + + @utils.args_from(Entity) + def __init__(self, **kwargs): + """ Initialization + Args: + **kwargs (): + """ + self.chain = kwargs.get('chain', None) + super(Residue, self).__init__(**kwargs) + if self.index is None and self.molecule is not None: + self.index = self.molecule.residues.index(self) + self.chainindex = None + self._backbone = None + self._sidechain = None + self._template_name = None + if self.name is None: self.name = self.pdbname + str(self.pdbindex) + + @property + def atoms(self): + return self.children + + def add(self, atom, key=None): + """Deals with atom name clashes within a residue - common for small molecules""" + if atom.residue is not None: + assert atom.residue is self, 'Atom already assigned to a residue' + atom.residue = self + if atom.chain is None: + atom.chain = self.chain + else: + assert atom.chain == self.chain, "Atom's chain does not match residue's chain" + + if key is not None or atom.name not in self.children: + return super(Residue, self).add(atom, key=key) + else: + return super(Residue, self).add(atom, key='%s%s' % (atom.name, len(self))) + add.__doc__ = Entity.add.__doc__ + + @property + def is_n_terminal(self): + """bool: this is the last residue in a peptide + + Raises: + ValueError: if this residue is not an amino acid + """ + if self.type != 'protein': + raise ValueError('%s is not a recognized peptide monomer' % self) + return self._is_starting_residue + + @property + def is_c_terminal(self): + """bool: this is the first residue in a peptide + + Raises: + ValueError: if this residue is not an amino acid + """ + if self.type != 'protein': + raise ValueError('%s is not a recognized peptide monomer' % self) + return self._is_ending_residue + + @property + def is_5prime_end(self): + """bool: this is the first base in a strand + + Raises: + ValueError: if this residue is not a DNA base + """ + if self.type != 'dna': + raise ValueError('%s is not a recognized nucleic acid monomer' % self) + return self._is_starting_residue + + @property + def is_3prime_end(self): + """bool: this is the last base in a strand + + Raises: + ValueError: if this residue is not a DNA base + """ + if self.type != 'dna': + raise ValueError('%s is not a recognized nucleic acid monomer' % self) + return self._is_ending_residue + + @property + def is_monomer(self): + """bool: this residue is not part of a biopolymer + """ + return self._is_ending_residue and self._is_starting_residue + + @property + def _is_ending_residue(self): + """bool: this is the last residue in a polymer""" + try: + nextres = self.next_residue + except StopIteration: + return True + else: + return False + + @property + def _is_starting_residue(self): + """bool: this is the first residue in a polymer""" + try: + prevres = self.prev_residue + except StopIteration: + return True + else: + return False + + def assign_template_bonds(self): + """Assign bonds from bioresidue templates. + + Only assigns bonds that are internal to this residue (does not connect different residues). + The topologies here assume pH7.4 and may need to be corrected for other pHs + + See Also: + :ref:`moldesign.Chain.assign_biopolymer_bonds` for assigning inter-residue bonds + + Raises: + ValueError: if ``residue.resname`` is not in bioresidue templates + KeyError: if an atom in this residue is not recognized """ + try: + resname = self.resname + if self.type == 'protein': + if self.is_n_terminal: + resname = self.resname + '_LSN3' # the protonated form (with NH3+ on the end) + elif self.is_c_terminal: + resname = self.resname + '_LEO2H' # deprotonated form (COO-) + elif self.is_monomer: + resname = self.resname + '_LFZW' # free zwitterion form + + bonds_by_name = data.RESIDUE_BONDS[resname] + self._template_name = resname + except KeyError: + if len(self) == 1: + print 'INFO: no bonds assigned to residue %s' % self + return + else: + raise ValueError("No bonding template for residue '%s'" % resname) + + # intra-residue bonds + bond_graph = {atom: {} for atom in self} + for atom in self: + for nbrname, order in bonds_by_name.get(atom.name, {}).iteritems(): + try: + nbr = self[nbrname] + except KeyError: # missing atoms are normal (often hydrogen) + pass + else: + bond_graph[atom][nbr] = bond_graph[nbr][atom] = order + + # copy bonds into the right structure (do this last to avoid mangling the graph) + for atom in bond_graph: + atom.bond_graph.update(bond_graph[atom]) + + @property + def next_residue(self): + """Residue: + The next residue in the chain (in the C-direction for proteins, 3' + direction for nucleic acids) + + Raises: + NotImplementedError: If we don't know how to deal with this type of biopolymer + StopIteration: If there isn't a next residue (i.e. it's a 3'- or C-terminus) + """ + if self.chain.type == 'protein': + return self._get_neighbor('C', 'C-terminus') + elif self.chain.type == 'dna': + return self._get_neighbor("O3'", "3' end") + else: + raise NotImplementedError('We only deal with dna and amino acids right now') + + @property + def prev_residue(self): + """Residue: The next residue in the chain (in the N-direction for proteins, 5' direction for + nucleic acids) + + Raises: + NotImplementedError: If we don't know how to deal with this type of biopolymer + StopIteration: If there isn't a previous residue (i.e. it's a 5'- or N-terminus) + """ + if self.chain.type == 'protein': + return self._get_neighbor('N', 'N-terminus') + elif self.chain.type == 'dna': + return self._get_neighbor("P", "5' end") + else: + raise NotImplementedError('We only deal with dna and amino acids right now') + + def _get_neighbor(self, atomname, name): + """Return the first residue found that's bound to the passed atom name + """ + conn_atom = self[atomname] + for nbr in conn_atom.bond_graph: + if nbr.residue is not self: + return nbr.residue + else: + raise StopIteration('%s reached' % name) + + @property + def resname(self): + """str: Synonym for pdbname""" + return self.pdbname + + @resname.setter + def resname(self, val): + self.pdbname = val + + @property + def type(self): + """str: Classification of the residue (protein, solvent, dna, water, unknown)""" + return data.RESIDUE_TYPES.get(self.resname, 'unknown') + + @property + def code(self): + """str: one-letter amino acid code or two letter nucleic acid code, or '?' otherwise""" + return data.RESIDUE_ONE_LETTER.get(self.pdbname, '?') + + @property + def atomnames(self): + """Residue: synonym for ```self``` for for the sake of readability: + ```molecule.chains['A'].residues[123].atomnames['CA']``` + """ + return self + + @property + def backbone(self): + """ AtomList: all backbone atoms for nucleic and protein residues + (indentified using PDB names); returns None for other residue types + """ + if self._backbone is None: + if self.type not in data.BACKBONES: + return None + self._backbone = AtomList() + for name in data.BACKBONES[self.type]: + try: self._backbone.append(self[name]) + except KeyError: pass + return self._backbone + + @property + def sidechain(self): + """ AtomList: all sidechain atoms for nucleic and protein residues + (defined as non-backbone atoms); returns None for other residue types + """ + if self._sidechain is None: + if self.backbone is None: + return None + bb = set(self.backbone) + self._sidechain = [atom for atom in self if atom not in bb] + return self._sidechain + + @property + def is_standard_residue(self): + """ bool: this residue is a "standard residue" for the purposes of a PDB entry. + + In PDB files, this will be stored using 'ATOM' if this is a standard residue + and 'HETATM' records if not. + + Note: + We currently define "standard" residues as those whose 3 letter residue code appears in + the ``moldesign.data.RESIDUE_DESCRIPTIONS`` dictionary. Although this seems to work + well, we'd welcome a PR with a less hacky method. + + References: + PDB format guide: http://www.wwpdb.org/documentation/file-format + """ + return self.resname in mdt.data.RESIDUE_DESCRIPTIONS + + def __str__(self): + return 'Residue %s (index %d, chain %s)' % (self.name, self.index, + self.chain.name) + + def _repr_markdown_(self): + return self.markdown_summary() + + def markdown_summary(self): + """ Markdown-formatted information about this residue + + Returns: + str: markdown-formatted string + """ + if self.molecule is None: + lines = ["

Residue %s

" % self.name] + else: + lines = ["

Residue %s (index %d)

" % (self.name, self.index)] + + if self.type == 'protein': + lines.append('**Residue codes**: %s / %s' % (self.resname, self.code)) + else: + lines.append("**Residue code**: %s" % self.resname) + lines.append('**Type**: %s' % self.type) + if self.resname in data.RESIDUE_DESCRIPTIONS: + lines.append('**Description**: %s' % data.RESIDUE_DESCRIPTIONS[self.resname]) + + lines.append('**

Chain:** %s' % self.chain.name) + + lines.append('**Sequence number**: %d' % self.pdbindex) + + terminus = None + if self.type == 'dna': + if self.is_3prime_end: + terminus = "3' end" + elif self.is_5prime_end: + terminus = "5' end" + elif self.type == 'protein': + if self.is_n_terminal: + terminus = 'N-terminus' + elif self.is_c_terminal: + terminus = 'C-terminus' + if terminus is not None: + lines.append('**Terminal residue**: %s of chain %s' % (terminus, self.chain.name)) + + if self.molecule is not None: + lines.append("**Molecule**: %s" % self.molecule.name) + + lines.append("**

Number of atoms**: %s" % self.num_atoms) + if self.backbone: + lines.append("**Backbone atoms:** %s" % ', '.join(x.name for x in self.backbone)) + lines.append("**Sidechain atoms:** %s" % ', '.join(x.name for x in self.sidechain)) + else: + lines.append("**Atom:** %s" % ', '.join(x.name for x in self.atoms)) + + return '
'.join(lines) \ No newline at end of file diff --git a/moldesign/molecules/trajectory.py b/moldesign/molecules/trajectory.py index 9f231ce..9143264 100644 --- a/moldesign/molecules/trajectory.py +++ b/moldesign/molecules/trajectory.py @@ -164,16 +164,25 @@ def __len__(self): """overrides len(trajectory) to return number of frames""" return len(self.frames) - def draw3d(self): - """TrajectoryViewer: create a trajectory visualization""" - from moldesign import widgets - self._viz = widgets.trajectory.TrajectoryViewer(self) + @utils.kwargs_from(mdt.widgets.trajectory.TrajectoryViewer) + def draw3d(self, **kwargs): + """TrajectoryViewer: create a trajectory visualization + + Args: + **kwargs (dict): kwargs for :class:`moldesign.widgets.trajectory.TrajectoryViewer` + """ + self._viz = mdt.widgets.trajectory.TrajectoryViewer(self, **kwargs) return self._viz draw = draw3d # synonym for backwards compatibility def draw_orbitals(self, align=True): """TrajectoryOrbViewer: create a trajectory visualization""" from moldesign import widgets + for frame in self: + if 'wfn' not in frame: + raise ValueError("Can't draw orbitals - orbital information missing in at least " + "one frame. It must be calculated with a QM method.") + if align: self.align_orbital_phases() self._viz = widgets.trajectory.TrajectoryOrbViewer(self) return self._viz @@ -274,7 +283,7 @@ def __getattr__(self, item): if item in self._property_keys: # return a list of properties for each frame return self.slice_frames(item) else: - raise AttributeError + raise AttributeError('Frame %s has no attribute %s' % (self, item)) def rmsd(self, atoms=None, reference=None): r""" Calculate root-mean-square displacement for each frame in the trajectory. @@ -392,7 +401,7 @@ def apply_frame(self, frame): # allexcept=['traj'], # append_docstring_description=True) def write(self, *args, **kwargs): - return mdt.converters.write_trajectory(self, *args, **kwargs) + return mdt.fileio.write_trajectory(self, *args, **kwargs) def plot(self, x, y, **kwargs): """ Create a matplotlib plot of property x against property y diff --git a/moldesign/orbitals/basis.py b/moldesign/orbitals/basis.py index 4a24580..090b13f 100644 --- a/moldesign/orbitals/basis.py +++ b/moldesign/orbitals/basis.py @@ -96,4 +96,9 @@ def __repr__(self): @property def fock(self): - return self.wfn.fock_ao \ No newline at end of file + return self.wfn.fock_ao + + @property + def density_matrix(self): + return self.wfn.density_matrix_ao + diff --git a/moldesign/orbitals/gaussians.py b/moldesign/orbitals/gaussians.py index 893db5e..7e25c39 100644 --- a/moldesign/orbitals/gaussians.py +++ b/moldesign/orbitals/gaussians.py @@ -11,12 +11,15 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +"""Note: this code is currently unused and untested and will be refactored soon""" import numpy as np from .orbitals import Orbital, SHELLS, SPHERICALNAMES class AbstractFunction(object): + """ Abstract base class for basis functions + """ def normalize(self): """ Give this function unit norm by adjusting its coefficient """ diff --git a/moldesign/orbitals/orbitals.py b/moldesign/orbitals/orbitals.py index bb7cc73..188db9b 100644 --- a/moldesign/orbitals/orbitals.py +++ b/moldesign/orbitals/orbitals.py @@ -46,9 +46,6 @@ 'yz^2': (3, -1)} -class ConvergenceError(Exception): pass - - class Orbital(object): r""" Stores a single orbital and its meta-data @@ -62,8 +59,7 @@ class Orbital(object): :math:`\left| \mu \right \rangle` are stored at ``self.basis`` """ def __init__(self, coeffs, basis=None, wfn=None, - occupation=None, name='unnamed', - **kwargs): + occupation=None, name='unnamed'): """ Initialization: Args: @@ -90,10 +86,6 @@ def __init__(self, coeffs, basis=None, wfn=None, if self.basis is not None: assert len(self.coeffs) == len(self.basis) - # Assign arbitrary attributes - for k, v in kwargs.iteritems(): - setattr(self, k, v) - def overlap(self, other): """ Calculate overlap with another orbital @@ -114,7 +106,7 @@ def fock_element(self, other): Returns: u.Scalar[energy]: fock matrix element """ - return self.wfn.fock_ao.dot(other.coeffs).ldot(self.coeffs) # use ldot to preserve units + return self.wfn.fock_ao.dot(other.coeffs).ldot(self.coeffs) # uses ldot to preserve units @property def energy(self): @@ -149,8 +141,7 @@ class MolecularOrbitals(object): """ def __init__(self, orbitals, wfn=None, basis=None, canonical=False, - orbtype=None, - **kwargs): + orbtype=None): """ Initialization: Args: @@ -194,9 +185,6 @@ def __init__(self, orbitals, wfn=None, basis=None, if canonical: self._set_cmo_names() - for k, v in kwargs.iteritems(): - setattr(self, k, v) - def align_phases(self, other, threshold=0.5, assert_same_type=True): """ Flip the signs of these orbitals to bring them into maximum coincidence with another set of orbitals @@ -226,7 +214,7 @@ def overlap(self, other): other (MolecularOrbitals): Returns: - numpy.array: overlaps between the two sets of orbitals. + numpy.ndarray: overlaps between the two sets of orbitals Example: >>> canonical = mol.wfn.canonical @@ -235,7 +223,7 @@ def overlap(self, other): >>> overlaps[i, j] == canonical.orbitals[i].overlap(atomic.orbitals[j]) True """ - return self.dot(self.aobasis.overlaps.dot(other.T)) + return self.coeffs.dot(self.wfn.aobasis.overlaps.dot(other.coeffs.T)) def __iter__(self): return iter(self.orbitals) @@ -253,6 +241,10 @@ def __repr__(self): def __getitem__(self, item): return self.orbitals[item] + def _to_ao_density_matrix(self): + c = self.coeffs * self.occupations[:, None]/2.0 + return 2.0*c.T.dot(c) + @property def energies(self): """u.Vector[energy]: energies of the molecular orbitals @@ -260,6 +252,12 @@ def energies(self): This is just the diagonal of the fock matrix""" return self.fock.diagonal() + @property + def occupations(self): + """ np.ndarray: orbital occupation numbers + """ + return np.array([orb.occupation for orb in self.orbitals]) + @property def fock(self): """u.Array[energy]: Fock matrix for these orbitals""" diff --git a/moldesign/orbitals/wfn.py b/moldesign/orbitals/wfn.py index 64babcc..ca34158 100644 --- a/moldesign/orbitals/wfn.py +++ b/moldesign/orbitals/wfn.py @@ -29,29 +29,39 @@ class ElectronicWfn(object): Args: mol (moldesign.Molecule): Molecule this wavefunction belongs to num_electrons (int): number of electrons in this wavefunction - theory (moldesign.models.base.EnergyModelBase): The model this wavefunction was created with + model (moldesign.models.base.EnergyModelBase): The model this wavefunction was created with aobasis (moldesign.orbitals.BasisSet): The basis functions for the enclosed orbitals + nbasis (int): number of AO basis functions fock_ao (moldesign.units.Array[energy]): fock matrix in the AO basis positions (moldesign.units.Array[length]): positions of the nuclei for this wfn civectors (np.ndarray): CI vectors (if applicable) - **kwargs (dict): arbitrary metadata + description (str): text describing the wfn (e.g. 'RHF/STO-3G', 'CAS(2,2)/SA3/6-31G**') + density_matrix_ao (np.ndarray): density matrix in the ao basis """ def __init__(self, mol, num_electrons, model=None, aobasis=None, fock_ao=None, positions=None, - civectors=None, **kwargs): + civectors=None, + description=None, + density_matrix_ao=None): self.mol = mol self.model = model self.civectors = civectors self.aobasis = aobasis + if aobasis: + self.nbasis = len(self.aobasis) + else: + self.nbasis = None self.orbitals = DotDict() self.fock_ao = fock_ao self.num_electrons = num_electrons self.homo = self.num_electrons/2 - 1 self.lumo = self.homo + 1 self._has_canonical = False + self.density_matrix_ao = density_matrix_ao + self.description = description if positions is None: self.positions = mol.positions.copy() @@ -64,24 +74,16 @@ def __init__(self, mol, num_electrons, for orb in self.aobasis.orbitals: orb.wfn = self - for arg, val in kwargs.iteritems(): - setattr(self, arg, val) - def __repr__(self): return '' % (self.description, str(self.mol)) def __str__(self): return '%s wfn' % self.description - @property - def description(self): - return '%s/%s' % (self.model, self.aobasis.basisname) - def set_canonical_mos(self, orbs): - if orbs.wfn is None: orbs.wfn = self - if self.fock_ao is None and orbs.energy is not None: - fock_cmo = orbs.energy * np.identity(len(self.aobasis)) - self.fock_ao = orbs.to_ao(fock_cmo) + if orbs.wfn is None: + orbs.wfn = self + self._has_canonical = True def align_orbital_phases(self, other, assert_same=True): diff --git a/moldesign/parameters.py b/moldesign/parameters.py index 36a310e..eef0aac 100644 --- a/moldesign/parameters.py +++ b/moldesign/parameters.py @@ -18,44 +18,66 @@ These are used to standardize our interfaces to other codes, and automatically generate interactive notebook interfaces to configure various techniques. """ +import operator as op from moldesign import units as u -from moldesign.utils import if_not_none, DotDict +from moldesign import utils -class ForceField(object): - """Generalized force field type (blank for now)""" -class BasisSet(object): - """Generalized basis set type (blank for now""" -class ElectronicWfn(object): - """Generalized orbital storage (blank for now)""" -class QMTheory(object): - """Generalized QM type (blank for now)""" -class SymmetryGroup(object): - """Generalized symmetry type (blank for now)""" +def isin(a, b): return a in b + + +class WhenParam(object): + def __init__(self, parameter, operator, checkval): + self.operator = operator + self.parameter = parameter + self.checkval = checkval + + def __call__(self, paramset): + """ + Args: + paramset (dict): + + Returns: + bool: True if the parameter is releveant, false otherwise + """ + #TODO: anything relevant to an irrelevant parameter is also irrelevant + return self.operator(paramset[self.parameter], self.checkval) class Parameter(object): + """ A generic parameter for a computational method + + Args: + name (str): the arguments name (this is also its key in the method's ``params`` dictionary) + short_description (str): A more readable description of about 100 characters + type: The type of the param, including units if applicable. + This may be a type (``int``, ``str``, etc.); if the quantity has physical units, you may + also pass an example of this quantity (e.g., ``1.0 * units.angstrom``) + default: the default value, or None if the user is required to set this parameter manually + choices (list): A list of allowable values for the parameter + help_url (str): URL for detailed help (not currently implemented) + relevance (WhenParam): specifies when a given parameter will affect the dynamics + + Examples: + >>> Parameter('timestep', 'Dynamics timestep', type=1.0*u.fs, default=2.0*u.fs) + + >>> Parameter('functional', 'DFT XC functional', choices=['b3lyp', 'pbe0'], + >>> relevance=WhenParam('theory', op.eq, 'rks')) + + """ def __init__(self, name, short_description=None, type=None, default=None, choices=None, - select_multiple=False, - help_url=None): - """ - A method's parameter - :param default: the default value. If this does not match any spec in choices, it must be set. - :param choices: A list of allowable values for the parameter - :param types: a list of types for the parameter (does not check choices if parameter is one of these types) - :param number: Number of values (>1 should be passed in list). '+' indicates arbitrary list size - :return: - """ + help_url=None, + relevance=None): self.name = name - self.displayname = if_not_none(short_description, name) + self.displayname = utils.if_not_none(short_description, name) self.value = None self.default = default - self.choices = if_not_none(choices, []) + self.choices = utils.if_not_none(choices, []) self.type = type self.help_url = help_url if isinstance(type, u.MdtQuantity): @@ -65,12 +87,25 @@ def __init__(self, name, self.units = type else: self.units = None - self.select_multiple = select_multiple + self.relevance = relevance + + def __str__(self): + s = '%s "%s", type: %s' % (type(self).__name__, self.name, self.type.__name__) + if self.units is not None: + s += ', units: %s' % self.units + return s + + def __repr__(self): + try: + return '<%s>' % self + except: + return '<%s at %x - exc in __repr__>' % (type(self), id(self)) + # TODO - make this ordered as well as dotted def named_dict(l): - return DotDict({i.name: i for i in l}) + return utils.OrderedDotDict((i.name, i) for i in l) model_parameters = named_dict([ Parameter('subsystem') @@ -78,11 +113,11 @@ def named_dict(l): FORCEFIELDS = [] PERIODICITIES = [False, 'box'] -QMTHEORIES = [] -BASISSETS = [] + mm_model_parameters = named_dict([ - Parameter('cutoff', 'Cutoff for nonbonded interactions', default=1.0*u.nm, type=u.nm), + Parameter('cutoff', 'Cutoff for nonbonded interactions', + default=1.0*u.nm, type=u.nm), Parameter('nonbonded', 'Nonbonded interaction method', default='cutoff', type=str, choices=['cutoff', 'pme', 'ewald']), Parameter('implicit_solvent', @@ -97,14 +132,40 @@ def named_dict(l): Parameter('periodic', 'Periodicity', default=False, choices=PERIODICITIES) ]) + +QMTHEORIES = ['rhf', 'rks', 'mp2', 'casscf', 'casci', 'fci'] +BASISSETS = ['3-21g', '4-31g', '6-31g', '6-31g*', '6-31g**', + '6-311g', '6-311g*', '6-311g+', '6-311g*+', + 'sto-3g', 'sto-6g', 'minao', 'weigend', + 'dz' 'dzp', 'dtz', 'dqz', + 'aug-cc-pvdz', 'aug-cc-pvtz', 'aug-cc-pvqz'] +FUNCTIONALS = ['b3lyp', 'blyp', 'pbe0', 'x3lyp', 'mpw3lyp5'] +# This is a VERY limited set to start with; all hybrid functionals for now +# Need to think more about interface and what to offer by default +# PySCF xcs are at https://github.com/sunqm/pyscf/blob/master/dft/libxc.py for now + qm_model_parameters = named_dict([ Parameter('theory', 'QM theory', choices=QMTHEORIES), + Parameter('functional', 'DFT Functional', default='b3lyp', + choices=FUNCTIONALS, # TODO: allow separate x and c functionals + relevance=WhenParam('theory', isin, 'dft rks ks uks'.split())), + Parameter('active_electrons', 'Active electrons', type=int, default=2, + relevance=WhenParam('theory', isin, ['casscf', 'mcscf', 'casci'])), + Parameter('active_orbitals', 'Active orbitals', type=int, default=2, + relevance=WhenParam('theory', isin, ['casscf', 'mcscf', 'casci'])), + Parameter('state_average', 'States to average for SCF', type=int, default=1, + relevance=WhenParam('theory', isin, ['casscf', 'mcscf'])), + Parameter('basis', 'Basis set', choices=BASISSETS), + Parameter('wfn_guess', 'Starting guess method', default='huckel', + choices=['huckel', 'minao', 'stored']), + Parameter('store_orb_guesses', 'Automatically use orbitals for next initial guess', + default=True, type=bool), Parameter('multiplicity', 'Spin multiplicity', default=1, type=int), - Parameter('basis_set', 'Basis set', choices=BASISSETS), - Parameter('symmetry', default=None, choices=[None, 'Auto', 'Loose']), - Parameter('wfn_guess', 'Starting guess method:', default='huckel', - choices=['huckel', 'guess'] - )]) + Parameter('symmetry', 'Symmetry detection', + default=None, choices=[None, 'Auto', 'Loose']), + Parameter('initial_guess', 'Wfn for initial guess', + relevance=WhenParam('wfn_guess', op.eq, 'stored')) + ]) integrator_parameters = named_dict([ Parameter('timestep', 'Dynamics timestep', default=1.0*u.fs, type=u.default.time), diff --git a/moldesign/tools.py b/moldesign/tools.py deleted file mode 100644 index 655e224..0000000 --- a/moldesign/tools.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright 2016 Autodesk Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -This module contains various utility functions that are exposed to API users -""" - -from moldesign.interfaces.openbabel import add_hydrogen, guess_bond_orders -from moldesign.interfaces.pdbfixer_interface import mutate, solvate -from moldesign.interfaces.ambertools import assign_forcefield - - -__all__ = 'add_hydrogen guess_bond_orders mutate solvate assign_forcefield'.split() - - diff --git a/moldesign/tools/README.md b/moldesign/tools/README.md new file mode 100644 index 0000000..877d251 --- /dev/null +++ b/moldesign/tools/README.md @@ -0,0 +1,7 @@ +## Tools subpackage + + +The `moldesign.tools` subpackage collects functions for manipulating +and building molecules. These are public functions intended for +MDT users (as opposed to the `moldesign.helpers` subpackage, which +contains internal routines). \ No newline at end of file diff --git a/moldesign/tools/__init__.py b/moldesign/tools/__init__.py new file mode 100644 index 0000000..20f3710 --- /dev/null +++ b/moldesign/tools/__init__.py @@ -0,0 +1,7 @@ +def toplevel(o): + __all__.append(o.__name__) + return o +__all__ = [] + +from .topology import * +from .build import * \ No newline at end of file diff --git a/moldesign/tools/build.py b/moldesign/tools/build.py new file mode 100644 index 0000000..46c57be --- /dev/null +++ b/moldesign/tools/build.py @@ -0,0 +1,81 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import string + +import moldesign as mdt +import moldesign.molecules + +from moldesign.interfaces.ambertools import build_bdna, build_dna_helix + +from . import toplevel, __all__ as _pkgall + +_pkgall.extend(['build_bdna', 'build_dna_helix']) + + +@toplevel +def build_assembly(mol, assembly_name): + """ Create biological assembly using a bioassembly specification. + + This routine builds a biomolecular assembly using the specification from a PDB header (if + present, this data can be found in the "REMARK 350" lines in the PDB file). Assemblies are + author-assigned structures created by copying, translating, and rotating a subset of the + chains in the PDB file. + + See Also: + http://pdb101.rcsb.org/learn/guide-to-understanding-pdb-data/biological-assemblies + + Args: + mol (moldesign.Molecule): Molecule with assembly data (assembly data will be created by the + PDB parser at ``molecule.properties.bioassembly``) + assembly_name (str OR int): id of the biomolecular assembly to build. + + Returns: + mol (moldesign.Molecule): molecule containing the complete assembly + + Raises: + AttributeError: If the molecule does not contain any biomolecular assembly data + KeyError: If the specified assembly is not present + """ + if isinstance(assembly_name, int): assembly_name = str(assembly_name) + + if 'bioassemblies' not in mol.properties: + raise AttributeError('This molecule does not contain any biomolecular assembly data') + try: + asm = mol.properties.bioassemblies[assembly_name] + except KeyError: + raise KeyError(('The specified assembly name ("%s") was not found. The following ' + 'assemblies are present: %s') % + (assembly_name, + ', '.join(mol.properties.bioassemblies.keys()))) + + # Make sure each chain gets a unique name - up to all the letters in the alphabet, anyway + used_chain_names = set() + alpha = iter(string.ascii_uppercase) + + # Create the new molecule by copying, transforming, and renaming the original chains + all_atoms = moldesign.molecules.atomcollections.AtomList() + for i, t in enumerate(asm.transforms): + for chain_name in asm.chains: + chain = mol.chains[chain_name].copy() + chain.transform(t) + + while chain.name in used_chain_names: + chain.name = alpha.next() + used_chain_names.add(chain.name) + chain.pdbname = chain.pdbindex = chain.name + all_atoms.extend(chain.atoms) + newmol = mdt.Molecule(all_atoms, + name="%s (bioassembly %s)" % (mol.name, assembly_name)) + return newmol \ No newline at end of file diff --git a/moldesign/tools/topology.py b/moldesign/tools/topology.py new file mode 100644 index 0000000..44ffa57 --- /dev/null +++ b/moldesign/tools/topology.py @@ -0,0 +1,153 @@ +# Copyright 2016 Autodesk Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +This module contains various utility functions that are exposed to API users +""" +import moldesign as mdt +from moldesign import units as u + +from . import toplevel, __all__ as _pkgall + +from moldesign.interfaces.openbabel import add_hydrogen, guess_bond_orders +from moldesign.interfaces.pdbfixer_interface import mutate, add_water +from moldesign.interfaces.ambertools import assign_forcefield, parameterize +from moldesign.interfaces.ambertools import calc_am1_bcc_charges, calc_gasteiger_charges + +_pkgall.extend(('add_hydrogen guess_bond_orders mutate add_water' + ' assign_forcefield parameterize calc_am1_bcc_charges calc_gasteiger_charges').split()) + +ATNUM_VALENCE_CHARGE = {6: {3: -1, 4: 0}, + 7: {2: -1, 3: 0, 4: 1}, + 8: {1: -1, 2: 0, 3: 1}, + 9: {1: 0, 2: 1}} + +ION_CHARGE = {1: 1, # H + 11: 1, # Na+ + 19: 1, # K+ + 12: 2, # Mg 2+ + 20: 2, # Ca 2+ + 9: -1, # F- + 17: -1, # Cl- + 35: -1, # Br- + 53: -1} # I- + + +@toplevel +def assign_formal_charges(mol, ignore_nonzero=True): + """ Assign formal charges to C,N,O,F atoms in this molecule based on valence + + Args: + mol (moldesign.Molecule): Molecule to assign formal charges to. The formal charges of its + atoms and its total charge will be adjusted in place. + ignore_nonzero (bool): If formal charge is already set to a nonzero value, ignore this atom + + Note: + This method ONLY applies to C,N, O and F, based on a simple valence model. + These results should be manually inspected for consistency. + + Raises: + UnhandledValenceError: for cases not handled by the simple valence model + + References: + These assignments are illustrated by the formal charge patterns in + http://www.chem.ucla.edu/~harding/tutorials/formalcharge.pdf + """ + from moldesign.exceptions import UnhandledValenceError + + # TODO: scrape formal charge data from the PDB chem comp dictionary + + # cache these values in case we fail to assign charges + totalcharge = mol.charge + oldcharges = [atom.formal_charge for atom in mol.atoms] + + for atom in mol.atoms: + if ignore_nonzero and atom.formal_charge != 0: + continue + + v = atom.valence + newcharge = None + + if atom.atnum in ATNUM_VALENCE_CHARGE: + if v in ATNUM_VALENCE_CHARGE[atom.atnum]: + newcharge = ATNUM_VALENCE_CHARGE[atom.atnum][v] + else: + for oldcharge, a in zip(oldcharges, mol.atoms): + a.oldcharge = oldcharge + mol.charge = totalcharge + raise UnhandledValenceError(atom) + elif atom in ION_CHARGE and v == 0: + newcharge = ION_CHARGE[atom.atnum] + + if newcharge is not None: + mol.charge += newcharge * u.q_e - atom.formal_charge + atom.formal_charge = newcharge * u.q_e + + +@toplevel +def add_missing_data(mol): + """ Add missing hydrogens, bond orders, and formal charges to a structure (often from the PDB) + + Specifically, this is a convenience function that runs: + ``mdt.guess_bond_orders``, ``mdt.add_hydrogen``, and ``mdt.assign_formal_charges`` + + Note: + This does NOT add missing residues to biochemical structures. This functionality will be + available as :meth:`moldesign.add_missing_residues` + + Args: + mol (moldesign.Molecule): molecule to clean + + Returns: + moldesign.Molecule: cleaned version of the molecule + """ + m = mdt.add_hydrogen(mdt.guess_bond_orders(mol)) + assign_formal_charges(m) + return m + + +@toplevel +def guess_histidine_states(mol): + """ Attempt to assign protonation states to histidine residues. + + Note: + This function is highly unlikely to give accurate results! It is intended for convenience + when histidine states can easily be guessed from already-present hydrogens or when they are + judged to be relatively unimportant. + + This can be done simply by renaming HIS residues: + 1. If HE2 and HD1 are present, the residue is renamed to HIP + 2. If only HE2 is present, the residue is renamed to HIE + 3. Otherwise, the residue is renamed to HID (the most common form) + + Args: + mol (moldesign.Molecule): molecule to change (in place) + """ + for residue in mol.residues: + if residue.resname == 'HIS': + oldname = str(residue) + if 'HE2' in residue and 'HD1' in residue: + residue.resname = 'HIP' + elif 'HE2' in residue: + residue.resname = 'HIE' + else: + residue.resname = 'HID' + print 'Renaming %s from HIS to %s' % (oldname, residue.resname) + + + + + + + diff --git a/moldesign/uibase/components.py b/moldesign/uibase/components.py index bc77c76..a870f88 100644 --- a/moldesign/uibase/components.py +++ b/moldesign/uibase/components.py @@ -184,6 +184,24 @@ def parse_value(self, *args): self.slider.value = f +class ReadOnlyRepr(ipy.Box): + """ When a value is assigned, displays its __repr__ instead + """ + def __init__(self, *args, **kwargs): + super(ReadOnlyRepr, self).__init__(*args, **kwargs) + self.textbox = ipy.Text() + self.textbox.disabled = True + self.children = [self.textbox] + + @property + def value(self): + return self.textbox.value + + @value.setter + def value(self, v): + self.textbox.value = repr(v) + + class UnitText(ipy.Box): """Widget for a user to input a quantity with physical units. @@ -217,7 +235,8 @@ def __init__(self, value=None, units=None, **kwargs): self.validated = ipy.HTML(self.INVALID) self.children = [self.textbox, self.validated] self._is_valid = False - if value is not None: self.value = value + if value is not None: + self.value = value def _validate(self, change): self._validated_value = None @@ -248,4 +267,4 @@ def value(self): @value.setter def value(self, v): - self.textbox.value = str(v) \ No newline at end of file + self.textbox.value = str(v) diff --git a/moldesign/uibase/logwidget.py b/moldesign/uibase/logwidget.py index 4994c57..09cbafb 100644 --- a/moldesign/uibase/logwidget.py +++ b/moldesign/uibase/logwidget.py @@ -204,7 +204,15 @@ def _capture_logging_displays(display=False, **kwargs): def _finalize_logging_displays(display=True, **kwargs): - pass + import pyccc.ui + global _current_tabs + + if not _current_tabs: return + + for display in _current_tabs.children: + if isinstance(display, pyccc.ui.JobStatusDisplay): + display.update() + # FOR NOW, *always* enable the logging widgets enable_logging_widgets(True) diff --git a/moldesign/units/constants.py b/moldesign/units/constants.py index eeeaf38..59c8b0c 100644 --- a/moldesign/units/constants.py +++ b/moldesign/units/constants.py @@ -47,6 +47,8 @@ kelvin = ureg.kelvin nm = ureg.nanometers ang = angstrom = ureg.ang +molar = ureg.mole / ureg.liter +debye = ureg.debye # sets default unit systems def_length = angstrom diff --git a/moldesign/units/quantity.py b/moldesign/units/quantity.py index 12a11cb..431b1ad 100644 --- a/moldesign/units/quantity.py +++ b/moldesign/units/quantity.py @@ -14,8 +14,10 @@ """ Set up physical constants and unit systems """ +import operator import copy from os.path import join, abspath, dirname +import numbers import numpy as np from pint import UnitRegistry, set_application_registry, DimensionalityError @@ -45,7 +47,7 @@ class MdtQuantity(ureg.Quantity): This is a 'patched' version of pint's quantities that can be pickled (slightly hacky) and supports more numpy operations. Users should never need to instantiate this directly - instead, construct - BuckyBall quantities by multiplying numbers/arrays with the pre-defined units + MDT quantities by multiplying numbers/arrays with the pre-defined units Examples: >>> 5.0 * units.femtoseconds @@ -94,9 +96,10 @@ def __setitem__(self, key, value): if not hasattr(value, 'value_in'): # deal with missing `value_in` method if self.dimensionless: # case 1: this is OK if self is dimensionless self.magnitude[key] = value - else: # case 2: User tried to pass a number without units - raise DimensionalityError('%s cannot be assigned to array with dimensions %s' % - (value, self.units)) + elif not isinstance(value, numbers.Number): # case 2: this is not a number + raise TypeError('"%s" is not a valid numeric value' % value) + else: # case 3: wrong units + raise DimensionalityError(self.units, ureg.dimensionless) else: # case 3: attribute error is unrelated to this raise @@ -109,19 +112,7 @@ def to_json(self): 'units': str(self.units)} def __eq__(self, other): - """ Bug fixes and behavior changes for pint's implementation - These get removed as they are fixed in pint - - Notes: - - Allow equality test between compatible units - - Allow comparisons to 0 to ignore units - """ - if hasattr(other, 'value_in'): - return self.magnitude == other.value_in(self.units) - elif other == 0.0: # ignore units - return self.magnitude == other - else: - return super(MdtQuantity, self).__eq__(other) + return self.compare(other, operator.eq) @property def shape(self): @@ -133,12 +124,18 @@ def shape(self, value): def compare(self, other, op): """ Augments the :class:`pint._Quantity` method with the following features: - - Comparisons to 0 ignore units + - Comparisons to dimensionless 0 can proceed without unit checking """ - if other == 0.0: - return op(self.magnitude, other) + other = MdtQuantity(other) + try: + iszero = other.magnitude == 0.0 and other.dimensionless + except ValueError: + iszero = False + + if iszero: + return op(self.magnitude, other.magnitude) else: - return super(MdtQuantity, self).compare(other, op) + return op(self.magnitude, other.value_in(self.units)) def get_units(self): """ @@ -160,8 +157,12 @@ def norm(self): units = self.get_units() return units * np.linalg.norm(self._magnitude) + def normalized(self): + return self/self.norm() + def dot(self, other): - """Compute norm but respect units + """ Dot product that correctly multiplies units + Returns: MdtQuantity """ @@ -197,12 +198,11 @@ def __mod__(self, other): m = s_mag % o_mag return m * my_units - def value_in(self, units): - val = self.to(units) - return val._magnitude + # backwards-compatible name + value_in = ureg.Quantity.m_as def defunits_value(self): - return self.defunits()._magnitude + return self.defunits().magnitude # defunits = ureg.Quantity.to_base_units # replacing this with the new pint implementation def defunits(self): diff --git a/moldesign/units/tools.py b/moldesign/units/tools.py index 31ea83e..9970115 100644 --- a/moldesign/units/tools.py +++ b/moldesign/units/tools.py @@ -17,12 +17,15 @@ def units_transfer(from_var, to_var, force=False): - """ - Give the "to_var" object the same units as "from_var" - :param from_var: - :param to_var: - :param force: Transfer the units even if from_var and to_var have incompatible units - :return: + """ Give the "to_var" object the same units as "from_var" + + Args: + from_var (MdtQuantity): use this quantities units + to_var (MdtQuantity): apply units to this quantity + force (bool): Transfer the units even if from_var and to_var have incompatible units + + Returns: + MdtQuantity: to_var with from_var's units """ # If from_var is not a Quantity-like object, return a normal python scalar @@ -63,23 +66,31 @@ def array(qlist, baseunit=None): """ Facilitates creating an array with units - like numpy.array, but it also checks units for all components of the array - :param qlist: List-like object of quantity objects - :param baseunit: (optional) unit to standardize with - :return: Quantity object + Args: + qlist (List[MdtQuantity]): List-like object of quantity objects + baseunit (MdtUnit) unit to standardize with + + Returns: + MdtQuantity: array with standardized units """ if hasattr(qlist, 'units') and hasattr(qlist, 'magnitude'): return MdtQuantity(qlist) if baseunit is None: baseunit = get_units(qlist) - if baseunit == 1.0: return np.array(qlist) + try: + if baseunit == 1.0: + return np.array(qlist) + except DimensionalityError: + pass try: - newlist = [array(item, baseunit=baseunit).magnitude for item in qlist] + newlist = [array(item, baseunit=baseunit).value_in(baseunit) for item in qlist] return baseunit * newlist except TypeError as exc: return qlist.to(baseunit) + #@utils.args_from(np.broadcast_to) def broadcast_to(arr, *args, **kwargs): units = arr.units diff --git a/moldesign/units/unitsystem.py b/moldesign/units/unitsystem.py index 58be1c6..1385252 100644 --- a/moldesign/units/unitsystem.py +++ b/moldesign/units/unitsystem.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -from .quantity import * from .constants import * @@ -68,13 +67,18 @@ def momentum(self, f): self._momentum = f def convert(self, quantity): - """ - Convert a quantity into this unit system - @param quantity: moldesign.external.pint.Quantity + """ Convert a quantity into this unit system + + Args: + quantity (MdtQuantity): quantity to convert """ baseunit = self.get_baseunit(quantity) - result = quantity.to(baseunit) - return result + if isinstance(baseunit, int): + assert baseunit == 1 + return quantity * ureg.dimensionless + else: + result = quantity.to(baseunit) + return result def get_baseunit(self, quantity): # TODO: this needs to deal with angles diff --git a/moldesign/utils/classes.py b/moldesign/utils/classes.py index bd0f726..35cd2b0 100644 --- a/moldesign/utils/classes.py +++ b/moldesign/utils/classes.py @@ -11,6 +11,11 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +from bisect import bisect_left, bisect_right + +import collections + + class Categorizer(dict): """ Create a dict of lists from an iterable, with dict keys given by keyfn @@ -29,6 +34,67 @@ def add(self, item): self[key].append(item) +class ExclusiveList(object): + """ Behaves like a list, but won't allow duplicate items with duplicate keys to be added. + """ + def __init__(self, iterable=None, key=None): + self._keys = collections.OrderedDict() + if key is None: + self._keyfn = self._identity + else: + self._keyfn = key + + if iterable is not None: + self.extend(iterable) + + def append(self, obj): + k = self._keyfn(obj) + if k in self._keys: + raise KeyError("'%s' can't be added because its key '%s' already exists" % (obj, k)) + else: + self._keys[k] = obj + + def clear(self): + self._keys = collections.OrderedDict() + + @staticmethod + def _identity(obj): + return obj + + def __iter__(self): + return self._keys.itervalues() + + def __len__(self): + return len(self._keys) + + def __getitem__(self, item): + return self._keys.values()[item] + + def remove(self, obj): + k = self._keyfn(obj) + stored = self._keys[k] + if obj is not stored: + raise KeyError(obj) + else: + self._keys.pop(k) + + def extend(self, iterable): + for item in iterable: + self.append(item) + + def pop(self, index=None): + if index is None: + return self._keys.popitem()[1] + else: + k = self._keys.keys()[index] + return self._keys.pop(k) + + def __repr__(self): + return '%s(%s)' % (type(self).__name__, self._keys.values()) + + __str__ = __repr__ + + class DotDict(dict): """Dict with items accessible as attributes""" def __getstate__(self): @@ -54,6 +120,34 @@ def __dir__(self): return dir(self.__class__) + self.keys() +class OrderedDotDict(collections.OrderedDict): + """Dict with items accessible as attributes""" + def __getstate__(self): + retval = dict(__dict__=self.__dict__.copy(), + items=self.items()) + return retval + + def __setstate__(self, d): + self.__dict__.update(d['__dict__']) + self.update(d['items']) + + def __getattr__(self, item): + try: + return self[item] + except KeyError: + raise AttributeError("'%s' object has no attribute '%s'" + % (self.__class__.__name__, item)) + + def __setattr__(self, item, val): + if item.startswith('_OrderedDict__') or item.startswith('__'): + self.__dict__[item] = val + else: + self[item] = val + + def __dir__(self): + return dir(self.__class__) + self.keys() + + class Alias(object): """ Descriptor that calls a child object's method. @@ -126,4 +220,197 @@ def __get__(self, instance, cls): return getattr(instance, self.name) def __set__(self, instance, value): - return setattr(instance, self.name, value) \ No newline at end of file + return setattr(instance, self.name, value) + + +class SortedCollection(object): + """Sequence sorted by a key function. + + TAKEN WITHOUT MODIFICATION FROM: + https://code.activestate.com/recipes/577197-sortedcollection/ + (EDIT: removed ``__reduce__`` - better behavior with __dict__ states) + + SortedCollection() is much easier to work with than using bisect() directly. + It supports key functions like those use in sorted(), min(), and max(). + The result of the key function call is saved so that keys can be searched + efficiently. + + Instead of returning an insertion-point which can be hard to interpret, the + five find-methods return a specific item in the sequence. They can scan for + exact matches, the last item less-than-or-equal to a key, or the first item + greater-than-or-equal to a key. + + Once found, an item's ordinal position can be located with the index() method. + New items can be added with the insert() and insert_right() methods. + Old items can be deleted with the remove() method. + + The usual sequence methods are provided to support indexing, slicing, + length lookup, clearing, copying, forward and reverse iteration, contains + checking, item counts, item removal, and a nice looking repr. + + Finding and indexing are O(log n) operations while iteration and insertion + are O(n). The initial sort is O(n log n). + + The key function is stored in the 'key' attibute for easy introspection or + so that you can assign a new key function (triggering an automatic re-sort). + + In short, the class was designed to handle all of the common use cases for + bisect but with a simpler API and support for key functions. + + >>> from pprint import pprint + >>> from operator import itemgetter + + >>> s = SortedCollection(key=itemgetter(2)) + >>> for record in [ + ... ('roger', 'young', 30), + ... ('angela', 'jones', 28), + ... ('bill', 'smith', 22), + ... ('david', 'thomas', 32)]: + ... s.insert(record) + + >>> pprint(list(s)) # show records sorted by age + [('bill', 'smith', 22), + ('angela', 'jones', 28), + ('roger', 'young', 30), + ('david', 'thomas', 32)] + + >>> s.find_le(29) # find oldest person aged 29 or younger + ('angela', 'jones', 28) + >>> s.find_lt(28) # find oldest person under 28 + ('bill', 'smith', 22) + >>> s.find_gt(28) # find youngest person over 28 + ('roger', 'young', 30) + + >>> r = s.find_ge(32) # find youngest person aged 32 or older + >>> s.index(r) # get the index of their record + 3 + >>> s[3] # fetch the record at that index + ('david', 'thomas', 32) + + >>> s.key = itemgetter(0) # now sort by first name + >>> pprint(list(s)) + [('angela', 'jones', 28), + ('bill', 'smith', 22), + ('david', 'thomas', 32), + ('roger', 'young', 30)] + """ + + def __init__(self, iterable=(), key=None): + self._given_key = key + key = (lambda x: x) if key is None else key + decorated = sorted((key(item), item) for item in iterable) + self._keys = [k for k, item in decorated] + self._items = [item for k, item in decorated] + self._key = key + + def _getkey(self): + return self._key + + def _setkey(self, key): + if key is not self._key: + self.__init__(self._items, key=key) + + def _delkey(self): + self._setkey(None) + + key = property(_getkey, _setkey, _delkey, 'key function') + + def clear(self): + self.__init__([], self._key) + + def copy(self): + return self.__class__(self, self._key) + + def __len__(self): + return len(self._items) + + def __getitem__(self, i): + return self._items[i] + + def __iter__(self): + return iter(self._items) + + def __reversed__(self): + return reversed(self._items) + + def __repr__(self): + return '%s(%r, key=%s)' % ( + self.__class__.__name__, + self._items, + getattr(self._given_key, '__name__', repr(self._given_key)) + ) + + def __contains__(self, item): + k = self._key(item) + i = bisect_left(self._keys, k) + j = bisect_right(self._keys, k) + return item in self._items[i:j] + + def index(self, item): + 'Find the position of an item. Raise ValueError if not found.' + k = self._key(item) + i = bisect_left(self._keys, k) + j = bisect_right(self._keys, k) + return self._items[i:j].index(item) + i + + def count(self, item): + 'Return number of occurrences of item' + k = self._key(item) + i = bisect_left(self._keys, k) + j = bisect_right(self._keys, k) + return self._items[i:j].count(item) + + def insert(self, item): + 'Insert a new item. If equal keys are found, add to the left' + k = self._key(item) + i = bisect_left(self._keys, k) + self._keys.insert(i, k) + self._items.insert(i, item) + + def insert_right(self, item): + 'Insert a new item. If equal keys are found, add to the right' + k = self._key(item) + i = bisect_right(self._keys, k) + self._keys.insert(i, k) + self._items.insert(i, item) + + def remove(self, item): + 'Remove first occurence of item. Raise ValueError if not found' + i = self.index(item) + del self._keys[i] + del self._items[i] + + def find(self, k): + 'Return first item with a key == k. Raise ValueError if not found.' + i = bisect_left(self._keys, k) + if i != len(self) and self._keys[i] == k: + return self._items[i] + raise ValueError('No item found with key equal to: %r' % (k,)) + + def find_le(self, k): + 'Return last item with a key <= k. Raise ValueError if not found.' + i = bisect_right(self._keys, k) + if i: + return self._items[i-1] + raise ValueError('No item found with key at or below: %r' % (k,)) + + def find_lt(self, k): + 'Return last item with a key < k. Raise ValueError if not found.' + i = bisect_left(self._keys, k) + if i: + return self._items[i-1] + raise ValueError('No item found with key below: %r' % (k,)) + + def find_ge(self, k): + 'Return first item with a key >= equal to k. Raise ValueError if not found' + i = bisect_left(self._keys, k) + if i != len(self): + return self._items[i] + raise ValueError('No item found with key at or above: %r' % (k,)) + + def find_gt(self, k): + 'Return first item with a key > k. Raise ValueError if not found' + i = bisect_right(self._keys, k) + if i != len(self): + return self._items[i] + raise ValueError('No item found with key above: %r' % (k,)) \ No newline at end of file diff --git a/moldesign/utils/databases.py b/moldesign/utils/databases.py index 2864d2a..ab74b41 100644 --- a/moldesign/utils/databases.py +++ b/moldesign/utils/databases.py @@ -16,6 +16,8 @@ import json import zlib +from . import Alias + class CompressedJsonDbm(object): """ Quick-and-dirty interface to a DBM file @@ -44,6 +46,8 @@ def __setitem__(self, key, value): gzvalue = zlib.compress(json.dumps(value)) self.db[key] = gzvalue + __contains__ = Alias('db.__contains__') + class ReadOnlyDumb(dumbdbm._Database): """ A read-only subclass of dumbdbm diff --git a/moldesign/utils/utils.py b/moldesign/utils/utils.py index 6394ca6..909e505 100644 --- a/moldesign/utils/utils.py +++ b/moldesign/utils/utils.py @@ -54,6 +54,53 @@ def printflush(s, newline=True): sys.stdout.flush() +class methodcaller: + """The pickleable implementation of the standard library operator.methodcaller. + + This was copied without modification from: + https://github.com/python/cpython/blob/065990fa5bd30fb3ca61b90adebc7d8cb3f16b5a/Lib/operator.py + + The c-extension version is not pickleable, so we keep a copy of the pure-python standard library + code here. See https://bugs.python.org/issue22955 + + Original documentation: + Return a callable object that calls the given method on its operand. + After f = methodcaller('name'), the call f(r) returns r.name(). + After g = methodcaller('name', 'date', foo=1), the call g(r) returns + r.name('date', foo=1). + """ + __slots__ = ('_name', '_args', '_kwargs') + + def __init__(*args, **kwargs): + if len(args) < 2: + msg = "methodcaller needs at least one argument, the method name" + raise TypeError(msg) + self = args[0] + self._name = args[1] + if not isinstance(self._name, str): + raise TypeError('method name must be a string') + self._args = args[2:] + self._kwargs = kwargs + + def __call__(self, obj): + return getattr(obj, self._name)(*self._args, **self._kwargs) + + def __repr__(self): + args = [repr(self._name)] + args.extend(map(repr, self._args)) + args.extend('%s=%r' % (k, v) for k, v in self._kwargs.items()) + return '%s.%s(%s)' % (self.__class__.__module__, + self.__class__.__name__, + ', '.join(args)) + + def __reduce__(self): + if not self._kwargs: + return self.__class__, (self._name,) + self._args + else: + from functools import partial + return partial(self.__class__, self._name, **self._kwargs), self._args + + class textnotify(object): """ Print a single, immediately flushed line to log the execution of a block. diff --git a/moldesign/viewer/viewer2d.py b/moldesign/viewer/viewer2d.py index 9c1e902..2f7970e 100644 --- a/moldesign/viewer/viewer2d.py +++ b/moldesign/viewer/viewer2d.py @@ -17,10 +17,9 @@ from nbmolviz.widget2d import MolViz2DBaseWidget +import moldesign as mdt from moldesign import utils import moldesign.units as u -from moldesign.data import color_rotation -from moldesign.molecules import AtomList from . import toplevel, ColorMixin @@ -52,7 +51,7 @@ def __init__(self, mol, try: self.atoms = mol.atoms except AttributeError: - self.atoms = AtomList(mol) + self.atoms = mdt.AtomList(mol) self.mol = self.atoms else: self.mol = mol @@ -61,7 +60,15 @@ def __init__(self, mol, raise ValueError('Refusing to draw more than 200 atoms in 2D visualization. ' 'Override this with _forcebig=True') - if names is None: self.names = [atom.name for atom in self.atoms] + if names is None: + names = [] + for atom in self.atoms: + if atom.formal_charge == 0: + names.append(atom.name) + else: + names.append(atom.name + _charge_str(atom.formal_charge)) + + self.names = names self.atom_indices = {atom: i for i, atom in enumerate(self.atoms)} self.selection_group = None @@ -78,7 +85,7 @@ def __reduce__(self): def to_graph(self, atoms): nodes, links = [], [] for i1, atom1 in enumerate(atoms): - nodes.append(dict(atom=atom1.name, index=i1)) + nodes.append(dict(atom=self.names[i1], index=i1)) if atom1.atnum == 6 and not self.carbon_labels: nodes[-1].update({'atom': '', 'size': 0.5, @@ -117,6 +124,20 @@ def handle_selection_event(self, selection): [a for a in selection['atoms'] if a in self.atom_indices]) +def _charge_str(q): + q = q.value_in(u.q_e) + if q == 0: + return '' + elif q == 1: + return '+' + elif q == -1: + return '-' + elif q > 0: + return '+%d' % q + else: + return str(q) + + @toplevel class DistanceGraphViewer(ChemicalGraphViewer): """ Create a 2D graph that includes edges with 3D information. This gives a 2D chemical that diff --git a/moldesign/viewer/viewer3d.py b/moldesign/viewer/viewer3d.py index de3e9ff..769ebe2 100644 --- a/moldesign/viewer/viewer3d.py +++ b/moldesign/viewer/viewer3d.py @@ -39,7 +39,7 @@ class GeometryViewer(MolViz_3DMol, ColorMixin): DEFAULT_COLOR_MAP = colormap DEFAULT_WIDTH = 625 DEFAULT_HEIGHT = 400 - DEF_PADDING = 1.75 * u.angstrom + DEF_PADDING = 2.25 * u.angstrom def __reduce__(self): """prevent these from being pickled for now""" @@ -96,7 +96,7 @@ def autostyle(self, render=True): cartoon_atoms.extend(residue.atoms) elif residue.type in ('water', 'solvent'): line_atoms.extend(residue.atoms) - elif residue.type in ('dna', 'rna') and self.mol.numatoms > 1000: + elif residue.type in ('dna', 'rna') and self.mol.num_atoms > 1000: cartoon_atoms.extend(residue.atoms) else: # includes DNA, RNA if molecule is small enough stick_atoms.extend(residue.atoms) @@ -113,16 +113,13 @@ def autostyle(self, render=True): self.stick(atoms=stick_atoms, render=False) # Deal with unbonded atoms (they only show up in VDW rep) - if self.mol.numatoms > 1000: - print 'WARN: large structure; waters not shown by default.' - lone = [atom for atom in self.mol.atoms if - atom.num_bonds == 0 and atom.residue.type != 'water'] - self.hide(atoms=[atom for atom in self.mol.atoms if atom.num_bonds == 0 and - atom.residue.type == 'water']) - else: - self.show_unbonded() + if self.mol.num_atoms < 1000: + lone = [atom for atom in self.mol.atoms if atom.num_bonds == 0] + if lone: + self.vdw(atoms=lone, render=False, radius=0.5) - if render: self.render() + if render: + self.render() def show_unbonded(self, radius=0.5): lone = [atom for atom in self.mol.atoms if atom.num_bonds == 0] diff --git a/moldesign/widgets/computeconfig.py b/moldesign/widgets/computeconfig.py index 929724a..acf0abf 100644 --- a/moldesign/widgets/computeconfig.py +++ b/moldesign/widgets/computeconfig.py @@ -17,6 +17,7 @@ import collections import ipywidgets as ipy +from pip._vendor.packaging import version import moldesign as mdt from moldesign import compute, uibase @@ -35,15 +36,16 @@ def configure(): __packageall.append('about') - class MDTConfig(ipy.Box): def __init__(self): super(MDTConfig, self).__init__(display='flex', flex_flow='column') self.compute_config = ComputeConfig() - self.tab_list = uibase.StyledTab([ipy.Box(),self.compute_config]) + self.changelog = ChangeLog() + self.tab_list = uibase.StyledTab([ipy.Box(), self.compute_config, self.changelog]) self.tab_list.set_title(0, '^') self.tab_list.set_title(1, 'Compute configuration') + self.tab_list.set_title(2, "What's new") self.children = [self.make_header(), self.tab_list] @@ -71,6 +73,55 @@ def _makelink(url, text): text=text) +class ChangeLog(ipy.Box): + def __init__(self): + super(ChangeLog, self).__init__(orientation='vertical') + try: + current = version.parse(mdt.__version__) + latest = self.version_check() + if current >= latest: + versiontext = 'Up to date. Latest release: %s' % latest + else: + versiontext = ('New release available! ' + '(Current: %s, latest: %s
' % (current, latest) + + 'Install it: ' + 'pip install -U moldesign' + '') + except Exception as e: + versiontext = 'Failed update check: %s' % e + + self.version = ipy.HTML(versiontext) + self.textarea = ipy.Textarea(width='700px', height='300px') + + p1 = os.path.join(mdt.PACKAGEPATH, "HISTORY.rst") + p2 = os.path.join(mdt.PACKAGEPATH, "..", "HISTORY.rst") + if os.path.exists(p1): + path = p1 + elif os.path.exists(p2): + path = p2 + else: + path = None + + if path is not None: + with open(path, 'r') as infile: + self.textarea.value = infile.read() + else: + self.textarea.value = 'HISTORY.rst not found' + + self.textarea.disabled = True + self.children = (self.version, self.textarea) + + @staticmethod + def version_check(): + """ + References: + http://code.activestate.com/recipes/577708-check-for-package-updates-on-pypi-works-best-in-pi/ + """ + import xmlrpclib + pypi = xmlrpclib.ServerProxy('https://pypi.python.org/pypi') + return pypi.package_releases('moldesign') + + class ComputeConfig(ipy.Box): def __init__(self): super(ComputeConfig, self).__init__(display='flex', flex_flow='column') diff --git a/moldesign/widgets/configurator.py b/moldesign/widgets/configurator.py index ab2492c..f0929c9 100644 --- a/moldesign/widgets/configurator.py +++ b/moldesign/widgets/configurator.py @@ -16,7 +16,7 @@ import ipywidgets as ipy -from moldesign.uibase import UnitText +from moldesign.uibase import UnitText, ReadOnlyRepr from moldesign import utils @@ -74,71 +74,82 @@ def __init__(self, paramlist, paramdefs, title=None): def reset_values(self, *args): reset_params = set() for name, value in self.paramlist.iteritems(): - self.selectors[name].selector.value = value + if value is not None: + self.selectors[name].selector.value = value reset_params.add(name) for paramdef in self.paramdefs: if paramdef.name not in reset_params: # if it's not set already, make it the default self.selectors[paramdef.name].default() + self.show_relevant_fields() def apply_values(self, *args): for paramname, selector in self.selectors.iteritems(): self.paramlist[paramname] = selector.selector.value self.currentconfig.value = str(self.paramlist).replace(', ', ',\n ') + self.show_relevant_fields() + + def show_relevant_fields(self): + for s in self.selectors.itervalues(): + if s.paramdef.relevance is not None: + if s.paramdef.relevance(self.paramlist): + s.layout.visibility = 'visible' + else: + s.layout.visibility = 'hidden' class ParamSelector(ipy.Box): - WIDGETKWARGS = {'width':'200px'} + WIDGETKWARGS = {'width': '200px'} - def __init__(self, param): + def __init__(self, paramdef): super(ParamSelector, self).__init__(layout=ipy.Layout(display='flex', flex_flow='nowrap', align_content='baseline')) - self.param = param + self.paramdef = paramdef children = [] - self.name = ipy.HTML("

%s:

" % param.displayname, + self.name = ipy.HTML("

%s:

" % paramdef.displayname, width='200px') children.append(self.name) - if param.choices: - self.selector = ipy.Dropdown(options=param.choices, **self.WIDGETKWARGS) - elif param.type == bool: + if paramdef.choices: + self.selector = ipy.Dropdown(options=paramdef.choices, **self.WIDGETKWARGS) + elif paramdef.type == bool: self.selector = ipy.ToggleButtons(options=[True, False], **self.WIDGETKWARGS) - elif param.units: - self.selector = UnitText(units=param.units, **self.WIDGETKWARGS) - elif param.type == float: + elif paramdef.units: + self.selector = UnitText(units=paramdef.units, **self.WIDGETKWARGS) + elif paramdef.type == float: self.selector = ipy.FloatText(**self.WIDGETKWARGS) - elif param.type == int: + elif paramdef.type == int: self.selector = ipy.IntText(**self.WIDGETKWARGS) - elif param.type == str: + elif paramdef.type == str: self.selector = ipy.Text(**self.WIDGETKWARGS) else: - self.selector = ipy.HTML('unknown datatype') + self.selector = ReadOnlyRepr(**self.WIDGETKWARGS) children.append(self.selector) children = [self.name, self.selector] self.default_button = None - if param.default: + if paramdef.default: self.default_button = ipy.Button(description='Default', - tooltip='Set to default: %s' % self.param.default, + tooltip='Set to default: %s' % self.paramdef.default, width='75px') self.default_button.on_click(self.default) children.append(self.default_button) self.default() self.help_link = None - if param.help_url: - self.help_link = ipy.HTML('?' % param.help_url) + if paramdef.help_url: + self.help_link = ipy.HTML('?' % paramdef.help_url) children.append(self.help_link) self.children = children def default(self, *args): - self.selector.value = self.param.default + self.selector.value = self.paramdef.default @property def value(self): @@ -146,4 +157,4 @@ def value(self): @value.setter def value(self, v): - self.selector.value = v \ No newline at end of file + self.selector.value = v diff --git a/moldesign/widgets/geombuilder.py b/moldesign/widgets/geombuilder.py index 052977a..6b746f3 100644 --- a/moldesign/widgets/geombuilder.py +++ b/moldesign/widgets/geombuilder.py @@ -13,13 +13,11 @@ # limitations under the License. import ipywidgets as ipy -from moldesign.geom import set_angle, set_dihedral, set_distance -import moldesign.molecules.bonds +import moldesign as mdt +from moldesign import utils from moldesign.viewer import BondClicker from moldesign import units as u -from moldesign import geom, utils - from moldesign.uibase import ViewerToolBase, ReadoutFloatSlider def exports(o): @@ -107,21 +105,21 @@ def set_distance(self, *args): sel = self._selection assert sel.type == 'bond' dist_in_angstrom = self.length_slider.value - set_distance(sel.a1, sel.a2, dist_in_angstrom*u.angstrom, adjustmol=self.adjust_button.value) + mdt.set_distance(sel.a1, sel.a2, dist_in_angstrom*u.angstrom, adjustmol=self.adjust_button.value) self.viewer.set_positions() def set_angle(self, *args): sel = self._selection assert sel.type == 'bond' angle = self.angle_slider.value - set_angle(sel.a1, sel.a2, sel.nbr_a2, angle*u.pi/180.0, adjustmol=self.adjust_button.value) + mdt.set_angle(sel.a1, sel.a2, sel.nbr_a2, angle*u.pi/180.0, adjustmol=self.adjust_button.value) self.viewer.set_positions() def set_dihedral(self, *args): sel = self._selection assert sel.type == 'bond' angle = self.dihedral_slider.value - set_dihedral(sel.nbr_a1, sel.a1, sel.a2, sel.nbr_a2, angle*u.pi/180.0, + mdt.set_dihedral(sel.nbr_a1, sel.a1, sel.a2, sel.nbr_a2, angle*u.pi/180.0, adjustmol=self.adjust_button.value) self.viewer.set_positions() @@ -152,7 +150,7 @@ def atom_click(self, atom): return self.clear_selection() elif atom in sel.atom.bond_graph: # select the bond - return self.bond_click(moldesign.molecules.bonds.Bond(sel.atom, atom)) # turn this into a bond selection + return self.bond_click(mdt.Bond(sel.atom, atom)) # turn this into a bond selection else: # select a new atom self.clear_selection(render=False) sel = self._selection @@ -207,7 +205,7 @@ def _set_tool_state(self): # Bond angle if sel.nbr_a2: - self.angle_slider.value = geom.angle(sel.a1, sel.a2, sel.nbr_a2).value_in(u.degrees) + self.angle_slider.value = mdt.angle(sel.a1, sel.a2, sel.nbr_a2).value_in(u.degrees) # self.angle_slider.observe(self.set_angle, 'value') self.angle_slider.disabled = False self.angle_slider.description = 'Bond angle {a1.name}' \ @@ -222,7 +220,7 @@ def _set_tool_state(self): # Dihedral twist if sel.nbr_a2 and sel.nbr_a1: - self.dihedral_slider.value = geom.dihedral(sel.nbr_a1, sel.a1, sel.a2, sel.nbr_a2).value_in(u.degrees) + self.dihedral_slider.value = mdt.dihedral(sel.nbr_a1, sel.a1, sel.a2, sel.nbr_a2).value_in(u.degrees) # self.dihedral_slider.observe(self.set_dihedral, 'value') self.dihedral_slider.disabled = False self.dihedral_slider.description = 'Dihedral angle {a4.name}' \ @@ -304,12 +302,12 @@ def _redraw_selection(self): self._highlight_atoms([sel.a1, sel.a2], render=False) if sel.nbr_a1 is not None: - nmdtond = moldesign.molecules.bonds.Bond(sel.a1, sel.nbr_a1) + nmdtond = mdt.Bond(sel.a1, sel.nbr_a1) self._highlight_atoms([sel.nbr_a1], color=self.NBR1HIGHLIGHT, render=False) self.viewer.set_bond_color(self.NBR1HIGHLIGHT, nmdtond, render=False) self._highlighted_bonds.append(nmdtond) if sel.nbr_a2 is not None: - nmdtond = moldesign.molecules.bonds.Bond(sel.a2, sel.nbr_a2) + nmdtond = mdt.Bond(sel.a2, sel.nbr_a2) self._highlight_atoms([sel.nbr_a2], color=self.NBR2HIGHLIGHT, render=False) self.viewer.set_bond_color(self.NBR2HIGHLIGHT, nmdtond, render=False) self._highlighted_bonds.append(nmdtond) diff --git a/moldesign/widgets/parameterization.py b/moldesign/widgets/parameterization.py index e1fd78e..f6be813 100644 --- a/moldesign/widgets/parameterization.py +++ b/moldesign/widgets/parameterization.py @@ -47,15 +47,14 @@ def __init__(self, job, molin, molout=None): self.errorlist = ipy.Select(options=collections.OrderedDict((e.short, e) for e in self.msg)) self.errmsg = ipy.HTML('-') - self.viewerpane = self.molin.draw() - self.viewer = self.viewerpane.children[0] + self.viewer = self.molin.draw3d() self.viewer.ribbon(opacity=0.7) if self.errorlist.value is not None: self.switch_display({'old': self.errorlist.value, 'new': self.errorlist.value}) self.errorlist.observe(self.switch_display, 'value') children = (self.status, - ipy.HBox([self.viewerpane, ipy.VBox([self.listdesc, self.errorlist])]), + ipy.HBox([self.viewer, ipy.VBox([self.listdesc, self.errorlist])]), self.errmsg) super(ParameterizationDisplay, self).__init__(children=children) diff --git a/moldesign/widgets/symmetry.py b/moldesign/widgets/symmetry.py index 9c99687..c5775aa 100644 --- a/moldesign/widgets/symmetry.py +++ b/moldesign/widgets/symmetry.py @@ -16,8 +16,8 @@ import ipywidgets as ipy import numpy as np +import moldesign as mdt from moldesign import units as u -from moldesign.geom.symmetry import get_symmetry def exports(o): @@ -65,12 +65,13 @@ def __init__(self, mol): ipy.HBox([self.tolerance_chooser, self.recalculate_button]), self.tolerance_descrip], width=325) + + self.symmetry = None self.coords_changed() self.hbox = ipy.HBox([ipy.VBox([self.viewer, self.showing]), self.symm_pane]) super(Symmetrizer, self).__init__([self.hbox]) - def reset_coords(self, *args): self.mol.positions = self.original_coords self.viewer.append_frame(positions=self.original_coords) @@ -81,7 +82,7 @@ def coords_changed(self, *args): self.symm_selector.options = {} self.description.value = 'Finding symmetries ...' self.tolerance = self.tolerance_chooser.value * u.angstrom - self.symmetry = get_symmetry(self.mol, tolerance=self.tolerance) + self.symmetry = mdt.geom.get_symmetry(self.mol, tolerance=self.tolerance) options = collections.OrderedDict() for elem in self.symmetry.elems: if elem.max_diff.magnitude != 0.0: diff --git a/moldesign/widgets/trajectory.py b/moldesign/widgets/trajectory.py index 4a68d54..67c0e0c 100644 --- a/moldesign/widgets/trajectory.py +++ b/moldesign/widgets/trajectory.py @@ -25,9 +25,15 @@ class TrajectoryViewer(selector.SelectionGroup): """ 3D representation, with animation controls, for a trajectory. Users will typically instantiate this using ``trajectory.draw()`` + + Args: + display (bool): immediately display this to the notebook (default: False) + **kwargs (dict): keyword arguments for :class:`ipywidgets.Box` """ - def __init__(self, trajectory, **kwargs): + def __init__(self, trajectory, display=False, **kwargs): + from IPython.display import display as displaynow + self.default_fps = 10 self.traj = trajectory self.pane = ipy.VBox() @@ -35,12 +41,14 @@ def __init__(self, trajectory, **kwargs): self.viewer, self.view_container = self.make_viewer() for frame in self.traj.frames[1:]: self.viewer.append_frame(positions=frame.positions, - wfn=frame.get('wfn',None), + wfn=frame.get('wfn', None), render=False) self.make_controls() self.pane.children = [self.view_container, self.controls] super(TrajectoryViewer, self).__init__([self.pane, AtomInspector()], **kwargs) self.update_selections('initialization', {'framenum': 0}) + if display: + displaynow(self) def make_viewer(self): viewer = self.traj._tempmol.draw3d(style='licorice') @@ -88,7 +96,6 @@ def make_viewer(self): return viewframe.viewer, viewframe - class FrameInspector(ipy.HTML, selector.Selector): def __init__(self, traj, **kwargs): self.traj = traj diff --git a/setup.py b/setup.py index 404ded2..900e0a7 100644 --- a/setup.py +++ b/setup.py @@ -15,9 +15,6 @@ import sys from os.path import relpath, join -import imp - -import subprocess from setuptools import find_packages, setup from setuptools.command.install import install