diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..dd5487e05b7107f1ce97acd695dfc0db870047c3 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,23 @@ +# How to Contribute + +We welcome small patches related to bug fixes and documentation, but we do not +plan to make any major changes to this repository. + +## Contributor License Agreement + +Contributions to this project must be accompanied by a Contributor License +Agreement. You (or your employer) retain the copyright to your contribution, +this simply gives us permission to use and redistribute your contributions as +part of the project. Head over to <https://cla.developers.google.com/> to see +your current agreements on file or to sign a new one. + +You generally only need to submit a CLA once, so if you've already submitted one +(even if it was for a different project), you probably don't need to do it +again. + +## Code reviews + +All submissions, including submissions by project members, require review. We +use GitHub pull requests for this purpose. Consult +[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more +information on using pull requests. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..d645695673349e3947e8e5ae42332d0ac3164cd7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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. diff --git a/README.md b/README.md index ca3f96e96a27a9636c1a44c1f5a5ce22ff73c5b8..d66230534e3a28af9f6d1dab36915e078ea0944d 100644 --- a/README.md +++ b/README.md @@ -1,93 +1,819 @@ -# Alphafold + +# AlphaFold +This package provides an implementation of the inference pipeline of AlphaFold +v2. For simplicity, we refer to this model as AlphaFold throughout the rest of +this document. -## Getting started +We also provide: -To make it easy for you to get started with GitLab, here's a list of recommended next steps. +1. An implementation of AlphaFold-Multimer. This represents a work in progress + and AlphaFold-Multimer isn't expected to be as stable as our monomer + AlphaFold system. [Read the guide](#updating-existing-installation) for how + to upgrade and update code. +2. The [technical note](docs/technical_note_v2.3.0.md) containing the models + and inference procedure for an updated AlphaFold v2.3.0. +3. A [CASP15 baseline](docs/casp15_predictions.zip) set of predictions along + with documentation of any manual interventions performed. -Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! +Any publication that discloses findings arising from using this source code or +the model parameters should [cite](#citing-this-work) the +[AlphaFold paper](https://doi.org/10.1038/s41586-021-03819-2) and, if +applicable, the +[AlphaFold-Multimer paper](https://www.biorxiv.org/content/10.1101/2021.10.04.463034v1). -## Add your files +Please also refer to the +[Supplementary Information](https://static-content.springer.com/esm/art%3A10.1038%2Fs41586-021-03819-2/MediaObjects/41586_2021_3819_MOESM1_ESM.pdf) +for a detailed description of the method. -- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files -- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command: +**You can use a slightly simplified version of AlphaFold with +[this Colab notebook](https://colab.research.google.com/github/deepmind/alphafold/blob/main/notebooks/AlphaFold.ipynb)** +or community-supported versions (see below). +If you have any questions, please contact the AlphaFold team at +[alphafold@deepmind.com](mailto:alphafold@deepmind.com). + + + +## Installation and running your first prediction + +You will need a machine running Linux, AlphaFold does not support other +operating systems. Full installation requires up to 3 TB of disk space to keep +genetic databases (SSD storage is recommended) and a modern NVIDIA GPU (GPUs +with more memory can predict larger protein structures). + +Please follow these steps: + +1. Install [Docker](https://www.docker.com/). + * Install + [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) + for GPU support. + * Setup running + [Docker as a non-root user](https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user). + +1. Clone this repository and `cd` into it. + + ```bash + git clone https://github.com/deepmind/alphafold.git + cd ./alphafold + ``` + +1. Download genetic databases and model parameters: + + * Install `aria2c`. On most Linux distributions it is available via the + package manager as the `aria2` package (on Debian-based distributions this + can be installed by running `sudo apt install aria2`). + + * Please use the script `scripts/download_all_data.sh` to download + and set up full databases. This may take substantial time (download size is + 556 GB), so we recommend running this script in the background: + + ```bash + scripts/download_all_data.sh <DOWNLOAD_DIR> > download.log 2> download_all.log & + ``` + + * **Note: The download directory `<DOWNLOAD_DIR>` should *not* be a + subdirectory in the AlphaFold repository directory.** If it is, the Docker + build will be slow as the large databases will be copied into the docker + build context. + + * It is possible to run AlphaFold with reduced databases; please refer to + the [complete documentation](#genetic-databases). + + +1. Check that AlphaFold will be able to use a GPU by running: + + ```bash + docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi + ``` + + The output of this command should show a list of your GPUs. If it doesn't, + check if you followed all steps correctly when setting up the + [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html) + or take a look at the following + [NVIDIA Docker issue](https://github.com/NVIDIA/nvidia-docker/issues/1447#issuecomment-801479573). + + If you wish to run AlphaFold using Singularity (a common containerization + platform on HPC systems) we recommend using some of the third party Singularity + setups as linked in https://github.com/deepmind/alphafold/issues/10 or + https://github.com/deepmind/alphafold/issues/24. + +1. Build the Docker image: + + ```bash + docker build -f docker/Dockerfile -t alphafold . + ``` + + If you encounter the following error: + + ``` + W: GPG error: https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A4B469963BF863CC + E: The repository 'https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 InRelease' is not signed. + ``` + + use the workaround described in + https://github.com/deepmind/alphafold/issues/463#issuecomment-1124881779. + +1. Install the `run_docker.py` dependencies. Note: You may optionally wish to + create a + [Python Virtual Environment](https://docs.python.org/3/tutorial/venv.html) + to prevent conflicts with your system's Python environment. + + ```bash + pip3 install -r docker/requirements.txt + ``` + +1. Make sure that the output directory exists (the default is `/tmp/alphafold`) + and that you have sufficient permissions to write into it. + +1. Run `run_docker.py` pointing to a FASTA file containing the protein + sequence(s) for which you wish to predict the structure (`--fasta_paths` + parameter). AlphaFold will search for the available templates before the + date specified by the `--max_template_date` parameter; this could be used to + avoid certain templates during modeling. `--data_dir` is the directory with + downloaded genetic databases and `--output_dir` is the absolute path to the + output directory. + + ```bash + python3 docker/run_docker.py \ + --fasta_paths=your_protein.fasta \ + --max_template_date=2022-01-01 \ + --data_dir=$DOWNLOAD_DIR \ + --output_dir=/home/user/absolute_path_to_the_output_dir + ``` + +1. Once the run is over, the output directory shall contain predicted + structures of the target protein. Please check the documentation below for + additional options and troubleshooting tips. + +### Genetic databases + +This step requires `aria2c` to be installed on your machine. + +AlphaFold needs multiple genetic (sequence) databases to run: + +* [BFD](https://bfd.mmseqs.com/), +* [MGnify](https://www.ebi.ac.uk/metagenomics/), +* [PDB70](http://wwwuser.gwdg.de/~compbiol/data/hhsuite/databases/hhsuite_dbs/), +* [PDB](https://www.rcsb.org/) (structures in the mmCIF format), +* [PDB seqres](https://www.rcsb.org/) – only for AlphaFold-Multimer, +* [UniRef30 (FKA UniClust30)](https://uniclust.mmseqs.com/), +* [UniProt](https://www.uniprot.org/uniprot/) – only for AlphaFold-Multimer, +* [UniRef90](https://www.uniprot.org/help/uniref). + +We provide a script `scripts/download_all_data.sh` that can be used to download +and set up all of these databases: + +* Recommended default: + + ```bash + scripts/download_all_data.sh <DOWNLOAD_DIR> + ``` + + will download the full databases. + +* With `reduced_dbs` parameter: + + ```bash + scripts/download_all_data.sh <DOWNLOAD_DIR> reduced_dbs + ``` + + will download a reduced version of the databases to be used with the + `reduced_dbs` database preset. This shall be used with the corresponding + AlphaFold parameter `--db_preset=reduced_dbs` later during the AlphaFold run + (please see [AlphaFold parameters](#running-alphafold) section). + +:ledger: **Note: The download directory `<DOWNLOAD_DIR>` should *not* be a +subdirectory in the AlphaFold repository directory.** If it is, the Docker build +will be slow as the large databases will be copied during the image creation. + +We don't provide exactly the database versions used in CASP14 – see the +[note on reproducibility](#note-on-casp14-reproducibility). Some of the +databases are mirrored for speed, see [mirrored databases](#mirrored-databases). + +:ledger: **Note: The total download size for the full databases is around 556 GB +and the total size when unzipped is 2.62 TB. Please make sure you have a large +enough hard drive space, bandwidth and time to download. We recommend using an +SSD for better genetic search performance.** + +:ledger: **Note: If the download directory and datasets don't have full read and +write permissions, it can cause errors with the MSA tools, with opaque +(external) error messages. Please ensure the required permissions are applied, +e.g. with the `sudo chmod 755 --recursive "$DOWNLOAD_DIR"` command.** + +The `download_all_data.sh` script will also download the model parameter files. +Once the script has finished, you should have the following directory structure: + +``` +$DOWNLOAD_DIR/ # Total: ~ 2.62 TB (download: 556 GB) + bfd/ # ~ 1.8 TB (download: 271.6 GB) + # 6 files. + mgnify/ # ~ 120 GB (download: 67 GB) + mgy_clusters_2022_05.fa + params/ # ~ 5.3 GB (download: 5.3 GB) + # 5 CASP14 models, + # 5 pTM models, + # 5 AlphaFold-Multimer models, + # LICENSE, + # = 16 files. + pdb70/ # ~ 56 GB (download: 19.5 GB) + # 9 files. + pdb_mmcif/ # ~ 238 GB (download: 43 GB) + mmcif_files/ + # About 199,000 .cif files. + obsolete.dat + pdb_seqres/ # ~ 0.2 GB (download: 0.2 GB) + pdb_seqres.txt + small_bfd/ # ~ 17 GB (download: 9.6 GB) + bfd-first_non_consensus_sequences.fasta + uniref30/ # ~ 206 GB (download: 52.5 GB) + # 7 files. + uniprot/ # ~ 105 GB (download: 53 GB) + uniprot.fasta + uniref90/ # ~ 67 GB (download: 34 GB) + uniref90.fasta +``` + +`bfd/` is only downloaded if you download the full databases, and `small_bfd/` +is only downloaded if you download the reduced databases. + +### Model parameters + +While the AlphaFold code is licensed under the Apache 2.0 License, the AlphaFold +parameters and CASP15 prediction data are made available under the terms of the +CC BY 4.0 license. Please see the [Disclaimer](#license-and-disclaimer) below +for more detail. + +The AlphaFold parameters are available from +https://storage.googleapis.com/alphafold/alphafold_params_2022-12-06.tar, and +are downloaded as part of the `scripts/download_all_data.sh` script. This script +will download parameters for: + +* 5 models which were used during CASP14, and were extensively validated for + structure prediction quality (see Jumper et al. 2021, Suppl. Methods 1.12 + for details). +* 5 pTM models, which were fine-tuned to produce pTM (predicted TM-score) and + (PAE) predicted aligned error values alongside their structure predictions + (see Jumper et al. 2021, Suppl. Methods 1.9.7 for details). +* 5 AlphaFold-Multimer models that produce pTM and PAE values alongside their + structure predictions. + +### Updating existing installation + +If you have a previous version you can either reinstall fully from scratch +(remove everything and run the setup from scratch) or you can do an incremental +update that will be significantly faster but will require a bit more work. Make +sure you follow these steps in the exact order they are listed below: + +1. **Update the code.** + * Go to the directory with the cloned AlphaFold repository and run `git + fetch origin main` to get all code updates. +1. **Update the UniProt, UniRef, MGnify and PDB seqres databases.** + * Remove `<DOWNLOAD_DIR>/uniprot`. + * Run `scripts/download_uniprot.sh <DOWNLOAD_DIR>`. + * Remove `<DOWNLOAD_DIR>/uniclust30`. + * Run `scripts/download_uniref30.sh <DOWNLOAD_DIR>`. + * Remove `<DOWNLOAD_DIR>/uniref90`. + * Run `scripts/download_uniref90.sh <DOWNLOAD_DIR>`. + * Remove `<DOWNLOAD_DIR>/mgnify`. + * Run `scripts/download_mgnify.sh <DOWNLOAD_DIR>`. + * Remove `<DOWNLOAD_DIR>/pdb_mmcif`. It is needed to have PDB SeqRes and + PDB from exactly the same date. Failure to do this step will result in + potential errors when searching for templates when running + AlphaFold-Multimer. + * Run `scripts/download_pdb_mmcif.sh <DOWNLOAD_DIR>`. + * Run `scripts/download_pdb_seqres.sh <DOWNLOAD_DIR>`. +1. **Update the model parameters.** + * Remove the old model parameters in `<DOWNLOAD_DIR>/params`. + * Download new model parameters using + `scripts/download_alphafold_params.sh <DOWNLOAD_DIR>`. +1. **Follow [Running AlphaFold](#running-alphafold).** + +#### Using deprecated model weights + +To use the deprecated v2.2.0 AlphaFold-Multimer model weights: + +1. Change `SOURCE_URL` in `scripts/download_alphafold_params.sh` to + `https://storage.googleapis.com/alphafold/alphafold_params_2022-03-02.tar`, + and download the old parameters. +2. Change the `_v3` to `_v2` in the multimer `MODEL_PRESETS` in `config.py`. + +To use the deprecated v2.1.0 AlphaFold-Multimer model weights: + +1. Change `SOURCE_URL` in `scripts/download_alphafold_params.sh` to + `https://storage.googleapis.com/alphafold/alphafold_params_2022-01-19.tar`, + and download the old parameters. +2. Remove the `_v3` in the multimer `MODEL_PRESETS` in `config.py`. + +## Running AlphaFold + +**The simplest way to run AlphaFold is using the provided Docker script.** This +was tested on Google Cloud with a machine using the `nvidia-gpu-cloud-image` +with 12 vCPUs, 85 GB of RAM, a 100 GB boot disk, the databases on an additional +3 TB disk, and an A100 GPU. For your first run, please follow the instructions +from [Installation and running your first prediction](#installation-and-running-your-first-prediction) +section. + +1. By default, Alphafold will attempt to use all visible GPU devices. To use a + subset, specify a comma-separated list of GPU UUID(s) or index(es) using the + `--gpu_devices` flag. See + [GPU enumeration](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/user-guide.html#gpu-enumeration) + for more details. + +1. You can control which AlphaFold model to run by adding the `--model_preset=` + flag. We provide the following models: + + * **monomer**: This is the original model used at CASP14 with no + ensembling. + + * **monomer\_casp14**: This is the original model used at CASP14 with + `num_ensemble=8`, matching our CASP14 configuration. This is largely + provided for reproducibility as it is 8x more computationally expensive + for limited accuracy gain (+0.1 average GDT gain on CASP14 domains). + + * **monomer\_ptm**: This is the original CASP14 model fine tuned with the + pTM head, providing a pairwise confidence measure. It is slightly less + accurate than the normal monomer model. + + * **multimer**: This is the [AlphaFold-Multimer](#citing-this-work) model. + To use this model, provide a multi-sequence FASTA file. In addition, the + UniProt database should have been downloaded. + +1. You can control MSA speed/quality tradeoff by adding + `--db_preset=reduced_dbs` or `--db_preset=full_dbs` to the run command. We + provide the following presets: + + * **reduced\_dbs**: This preset is optimized for speed and lower hardware + requirements. It runs with a reduced version of the BFD database. It + requires 8 CPU cores (vCPUs), 8 GB of RAM, and 600 GB of disk space. + + * **full\_dbs**: This runs with all genetic databases used at CASP14. + + Running the command above with the `monomer` model preset and the + `reduced_dbs` data preset would look like this: + + ```bash + python3 docker/run_docker.py \ + --fasta_paths=T1050.fasta \ + --max_template_date=2020-05-14 \ + --model_preset=monomer \ + --db_preset=reduced_dbs \ + --data_dir=$DOWNLOAD_DIR \ + --output_dir=/home/user/absolute_path_to_the_output_dir + ``` + +1. After generating the predicted model, AlphaFold runs a relaxation + step to improve local geometry. By default, only the best model (by + pLDDT) is relaxed (`--models_to_relax=best`), but also all of the models + (`--models_to_relax=all`) or none of the models (`--models_to_relax=none`) + can be relaxed. + +1. The relaxation step can be run on GPU (faster, but could be less stable) or + CPU (slow, but stable). This can be controlled with `--enable_gpu_relax=true` + (default) or `--enable_gpu_relax=false`. + +1. AlphaFold can re-use MSAs (multiple sequence alignments) for the same + sequence via `--use_precomputed_msas=true` option; this can be useful for + trying different AlphaFold parameters. This option assumes that the + directory structure generated by the first AlphaFold run in the output + directory exists and that the protein sequence is the same. + +### Running AlphaFold-Multimer + +All steps are the same as when running the monomer system, but you will have to + +* provide an input fasta with multiple sequences, +* set `--model_preset=multimer`, + +An example that folds a protein complex `multimer.fasta`: + +```bash +python3 docker/run_docker.py \ + --fasta_paths=multimer.fasta \ + --max_template_date=2020-05-14 \ + --model_preset=multimer \ + --data_dir=$DOWNLOAD_DIR \ + --output_dir=/home/user/absolute_path_to_the_output_dir +``` + +By default the multimer system will run 5 seeds per model (25 total predictions) +for a small drop in accuracy you may wish to run a single seed per model. This +can be done via the `--num_multimer_predictions_per_model` flag, e.g. set it to +`--num_multimer_predictions_per_model=1` to run a single seed per model. + +### AlphaFold prediction speed + +The table below reports prediction runtimes for proteins of various lengths. We +only measure unrelaxed structure prediction with three recycles while +excluding runtimes from MSA and template search. When running +`docker/run_docker.py` with `--benchmark=true`, this runtime is stored in +`timings.json`. All runtimes are from a single A100 NVIDIA GPU. Prediction +speed on A100 for smaller structures can be improved by increasing +`global_config.subbatch_size` in `alphafold/model/config.py`. + +No. residues | Prediction time (s) +-----------: | ------------------: +100 | 4.9 +200 | 7.7 +300 | 13 +400 | 18 +500 | 29 +600 | 36 +700 | 53 +800 | 60 +900 | 91 +1,000 | 96 +1,100 | 140 +1,500 | 280 +2,000 | 450 +2,500 | 969 +3,000 | 1,240 +3,500 | 2,465 +4,000 | 5,660 +4,500 | 12,475 +5,000 | 18,824 + +### Examples + +Below are examples on how to use AlphaFold in different scenarios. + +#### Folding a monomer + +Say we have a monomer with the sequence `<SEQUENCE>`. The input fasta should be: + +```fasta +>sequence_name +<SEQUENCE> +``` + +Then run the following command: + +```bash +python3 docker/run_docker.py \ + --fasta_paths=monomer.fasta \ + --max_template_date=2021-11-01 \ + --model_preset=monomer \ + --data_dir=$DOWNLOAD_DIR \ + --output_dir=/home/user/absolute_path_to_the_output_dir ``` -cd existing_repo -git remote add origin https://gitlab.rc.uab.edu/rc-data-science/community-containers/alphafold.git -git branch -M main -git push -uf origin main + +#### Folding a homomer + +Say we have a homomer with 3 copies of the same sequence `<SEQUENCE>`. The input +fasta should be: + +```fasta +>sequence_1 +<SEQUENCE> +>sequence_2 +<SEQUENCE> +>sequence_3 +<SEQUENCE> +``` + +Then run the following command: + +```bash +python3 docker/run_docker.py \ + --fasta_paths=homomer.fasta \ + --max_template_date=2021-11-01 \ + --model_preset=multimer \ + --data_dir=$DOWNLOAD_DIR \ + --output_dir=/home/user/absolute_path_to_the_output_dir +``` + +#### Folding a heteromer + +Say we have an A2B3 heteromer, i.e. with 2 copies of `<SEQUENCE A>` and 3 copies +of `<SEQUENCE B>`. The input fasta should be: + +```fasta +>sequence_1 +<SEQUENCE A> +>sequence_2 +<SEQUENCE A> +>sequence_3 +<SEQUENCE B> +>sequence_4 +<SEQUENCE B> +>sequence_5 +<SEQUENCE B> +``` + +Then run the following command: + +```bash +python3 docker/run_docker.py \ + --fasta_paths=heteromer.fasta \ + --max_template_date=2021-11-01 \ + --model_preset=multimer \ + --data_dir=$DOWNLOAD_DIR \ + --output_dir=/home/user/absolute_path_to_the_output_dir +``` + +#### Folding multiple monomers one after another + +Say we have a two monomers, `monomer1.fasta` and `monomer2.fasta`. + +We can fold both sequentially by using the following command: + +```bash +python3 docker/run_docker.py \ + --fasta_paths=monomer1.fasta,monomer2.fasta \ + --max_template_date=2021-11-01 \ + --model_preset=monomer \ + --data_dir=$DOWNLOAD_DIR \ + --output_dir=/home/user/absolute_path_to_the_output_dir +``` + +#### Folding multiple multimers one after another + +Say we have a two multimers, `multimer1.fasta` and `multimer2.fasta`. + +We can fold both sequentially by using the following command: + +```bash +python3 docker/run_docker.py \ + --fasta_paths=multimer1.fasta,multimer2.fasta \ + --max_template_date=2021-11-01 \ + --model_preset=multimer \ + --data_dir=$DOWNLOAD_DIR \ + --output_dir=/home/user/absolute_path_to_the_output_dir +``` + +### AlphaFold output + +The outputs will be saved in a subdirectory of the directory provided via the +`--output_dir` flag of `run_docker.py` (defaults to `/tmp/alphafold/`). The +outputs include the computed MSAs, unrelaxed structures, relaxed structures, +ranked structures, raw model outputs, prediction metadata, and section timings. +The `--output_dir` directory will have the following structure: + +``` +<target_name>/ + features.pkl + ranked_{0,1,2,3,4}.pdb + ranking_debug.json + relax_metrics.json + relaxed_model_{1,2,3,4,5}.pdb + result_model_{1,2,3,4,5}.pkl + timings.json + unrelaxed_model_{1,2,3,4,5}.pdb + msas/ + bfd_uniref_hits.a3m + mgnify_hits.sto + uniref90_hits.sto +``` + +The contents of each output file are as follows: + +* `features.pkl` – A `pickle` file containing the input feature NumPy arrays + used by the models to produce the structures. +* `unrelaxed_model_*.pdb` – A PDB format text file containing the predicted + structure, exactly as outputted by the model. +* `relaxed_model_*.pdb` – A PDB format text file containing the predicted + structure, after performing an Amber relaxation procedure on the unrelaxed + structure prediction (see Jumper et al. 2021, Suppl. Methods 1.8.6 for + details). +* `ranked_*.pdb` – A PDB format text file containing the predicted structures, + after reordering by model confidence. Here `ranked_i.pdb` should contain + the prediction with the (`i + 1`)-th highest confidence (so that + `ranked_0.pdb` has the highest confidence). To rank model confidence, we use + predicted LDDT (pLDDT) scores (see Jumper et al. 2021, Suppl. Methods 1.9.6 + for details). If `--models_to_relax=all` then all ranked structures are + relaxed. If `--models_to_relax=best` then only `ranked_0.pdb` is relaxed + (the rest are unrelaxed). If `--models_to_relax=none`, then the ranked + structures are all unrelaxed. +* `ranking_debug.json` – A JSON format text file containing the pLDDT values + used to perform the model ranking, and a mapping back to the original model + names. +* `relax_metrics.json` – A JSON format text file containing relax metrics, for + instance remaining violations. +* `timings.json` – A JSON format text file containing the times taken to run + each section of the AlphaFold pipeline. +* `msas/` - A directory containing the files describing the various genetic + tool hits that were used to construct the input MSA. +* `result_model_*.pkl` – A `pickle` file containing a nested dictionary of the + various NumPy arrays directly produced by the model. In addition to the + output of the structure module, this includes auxiliary outputs such as: + + * Distograms (`distogram/logits` contains a NumPy array of shape [N_res, + N_res, N_bins] and `distogram/bin_edges` contains the definition of the + bins). + * Per-residue pLDDT scores (`plddt` contains a NumPy array of shape + [N_res] with the range of possible values from `0` to `100`, where `100` + means most confident). This can serve to identify sequence regions + predicted with high confidence or as an overall per-target confidence + score when averaged across residues. + * Present only if using pTM models: predicted TM-score (`ptm` field + contains a scalar). As a predictor of a global superposition metric, + this score is designed to also assess whether the model is confident in + the overall domain packing. + * Present only if using pTM models: predicted pairwise aligned errors + (`predicted_aligned_error` contains a NumPy array of shape [N_res, + N_res] with the range of possible values from `0` to + `max_predicted_aligned_error`, where `0` means most confident). This can + serve for a visualisation of domain packing confidence within the + structure. + +The pLDDT confidence measure is stored in the B-factor field of the output PDB +files (although unlike a B-factor, higher pLDDT is better, so care must be taken +when using for tasks such as molecular replacement). + +This code has been tested to match mean top-1 accuracy on a CASP14 test set with +pLDDT ranking over 5 model predictions (some CASP targets were run with earlier +versions of AlphaFold and some had manual interventions; see our forthcoming +publication for details). Some targets such as T1064 may also have high +individual run variance over random seeds. + +## Inferencing many proteins + +The provided inference script is optimized for predicting the structure of a +single protein, and it will compile the neural network to be specialized to +exactly the size of the sequence, MSA, and templates. For large proteins, the +compile time is a negligible fraction of the runtime, but it may become more +significant for small proteins or if the multi-sequence alignments are already +precomputed. In the bulk inference case, it may make sense to use our +`make_fixed_size` function to pad the inputs to a uniform size, thereby reducing +the number of compilations required. + +We do not provide a bulk inference script, but it should be straightforward to +develop on top of the `RunModel.predict` method with a parallel system for +precomputing multi-sequence alignments. Alternatively, this script can be run +repeatedly with only moderate overhead. + +## Note on CASP14 reproducibility + +AlphaFold's output for a small number of proteins has high inter-run variance, +and may be affected by changes in the input data. The CASP14 target T1064 is a +notable example; the large number of SARS-CoV-2-related sequences recently +deposited changes its MSA significantly. This variability is somewhat mitigated +by the model selection process; running 5 models and taking the most confident. + +To reproduce the results of our CASP14 system as closely as possible you must +use the same database versions we used in CASP. These may not match the default +versions downloaded by our scripts. + +For genetics: + +* UniRef90: + [v2020_01](https://ftp.uniprot.org/pub/databases/uniprot/previous_releases/release-2020_01/uniref/) +* MGnify: + [v2018_12](http://ftp.ebi.ac.uk/pub/databases/metagenomics/peptide_database/2018_12/) +* Uniclust30: [v2018_08](http://wwwuser.gwdg.de/~compbiol/uniclust/2018_08/) +* BFD: [only version available](https://bfd.mmseqs.com/) + +For templates: + +* PDB: (downloaded 2020-05-14) +* PDB70: + [2020-05-13](http://wwwuser.gwdg.de/~compbiol/data/hhsuite/databases/hhsuite_dbs/old-releases/pdb70_from_mmcif_200513.tar.gz) + +An alternative for templates is to use the latest PDB and PDB70, but pass the +flag `--max_template_date=2020-05-14`, which restricts templates only to +structures that were available at the start of CASP14. + +## Citing this work + +If you use the code or data in this package, please cite: + +```bibtex +@Article{AlphaFold2021, + author = {Jumper, John and Evans, Richard and Pritzel, Alexander and Green, Tim and Figurnov, Michael and Ronneberger, Olaf and Tunyasuvunakool, Kathryn and Bates, Russ and {\v{Z}}{\'\i}dek, Augustin and Potapenko, Anna and Bridgland, Alex and Meyer, Clemens and Kohl, Simon A A and Ballard, Andrew J and Cowie, Andrew and Romera-Paredes, Bernardino and Nikolov, Stanislav and Jain, Rishub and Adler, Jonas and Back, Trevor and Petersen, Stig and Reiman, David and Clancy, Ellen and Zielinski, Michal and Steinegger, Martin and Pacholska, Michalina and Berghammer, Tamas and Bodenstein, Sebastian and Silver, David and Vinyals, Oriol and Senior, Andrew W and Kavukcuoglu, Koray and Kohli, Pushmeet and Hassabis, Demis}, + journal = {Nature}, + title = {Highly accurate protein structure prediction with {AlphaFold}}, + year = {2021}, + volume = {596}, + number = {7873}, + pages = {583--589}, + doi = {10.1038/s41586-021-03819-2} +} +``` + +In addition, if you use the AlphaFold-Multimer mode, please cite: + + +```bibtex +@article {AlphaFold-Multimer2021, + author = {Evans, Richard and O{\textquoteright}Neill, Michael and Pritzel, Alexander and Antropova, Natasha and Senior, Andrew and Green, Tim and {\v{Z}}{\'\i}dek, Augustin and Bates, Russ and Blackwell, Sam and Yim, Jason and Ronneberger, Olaf and Bodenstein, Sebastian and Zielinski, Michal and Bridgland, Alex and Potapenko, Anna and Cowie, Andrew and Tunyasuvunakool, Kathryn and Jain, Rishub and Clancy, Ellen and Kohli, Pushmeet and Jumper, John and Hassabis, Demis}, + journal = {bioRxiv}, + title = {Protein complex prediction with AlphaFold-Multimer}, + year = {2021}, + elocation-id = {2021.10.04.463034}, + doi = {10.1101/2021.10.04.463034}, + URL = {https://www.biorxiv.org/content/early/2021/10/04/2021.10.04.463034}, + eprint = {https://www.biorxiv.org/content/early/2021/10/04/2021.10.04.463034.full.pdf}, +} ``` -## Integrate with your tools +## Community contributions -- [ ] [Set up project integrations](https://gitlab.rc.uab.edu/rc-data-science/community-containers/alphafold/-/settings/integrations) +Colab notebooks provided by the community (please note that these notebooks may +vary from our full AlphaFold system and we did not validate their accuracy): -## Collaborate with your team +* The + [ColabFold AlphaFold2 notebook](https://colab.research.google.com/github/sokrypton/ColabFold/blob/main/AlphaFold2.ipynb) + by Martin Steinegger, Sergey Ovchinnikov and Milot Mirdita, which uses an + API hosted at the Södinglab based on the MMseqs2 server + [(Mirdita et al. 2019, Bioinformatics)](https://academic.oup.com/bioinformatics/article/35/16/2856/5280135) + for the multiple sequence alignment creation. -- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/) -- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html) -- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically) -- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/) -- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html) +## Acknowledgements -## Test and Deploy +AlphaFold communicates with and/or references the following separate libraries +and packages: -Use the built-in continuous integration in GitLab. +* [Abseil](https://github.com/abseil/abseil-py) +* [Biopython](https://biopython.org) +* [Chex](https://github.com/deepmind/chex) +* [Colab](https://research.google.com/colaboratory/) +* [Docker](https://www.docker.com) +* [HH Suite](https://github.com/soedinglab/hh-suite) +* [HMMER Suite](http://eddylab.org/software/hmmer) +* [Haiku](https://github.com/deepmind/dm-haiku) +* [Immutabledict](https://github.com/corenting/immutabledict) +* [JAX](https://github.com/google/jax/) +* [Kalign](https://msa.sbc.su.se/cgi-bin/msa.cgi) +* [matplotlib](https://matplotlib.org/) +* [ML Collections](https://github.com/google/ml_collections) +* [NumPy](https://numpy.org) +* [OpenMM](https://github.com/openmm/openmm) +* [OpenStructure](https://openstructure.org) +* [pandas](https://pandas.pydata.org/) +* [pymol3d](https://github.com/avirshup/py3dmol) +* [SciPy](https://scipy.org) +* [Sonnet](https://github.com/deepmind/sonnet) +* [TensorFlow](https://github.com/tensorflow/tensorflow) +* [Tree](https://github.com/deepmind/tree) +* [tqdm](https://github.com/tqdm/tqdm) -- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html) -- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/) -- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html) -- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/) -- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) +We thank all their contributors and maintainers! -*** +## Get in Touch -# Editing this README +If you have any questions not covered in this overview, please contact the +AlphaFold team at [alphafold@deepmind.com](mailto:alphafold@deepmind.com). -When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thanks to [makeareadme.com](https://www.makeareadme.com/) for this template. +We would love to hear your feedback and understand how AlphaFold has been useful +in your research. Share your stories with us at +[alphafold@deepmind.com](mailto:alphafold@deepmind.com). -## Suggestions for a good README +## License and Disclaimer -Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. +This is not an officially supported Google product. -## Name -Choose a self-explaining name for your project. +Copyright 2022 DeepMind Technologies Limited. -## Description -Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. +### AlphaFold Code License -## Badges -On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. +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 https://www.apache.org/licenses/LICENSE-2.0. -## Visuals -Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. +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. -## Installation -Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. +### Model Parameters License -## Usage -Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. +The AlphaFold parameters are made available under the terms of the Creative +Commons Attribution 4.0 International (CC BY 4.0) license. You can find details +at: https://creativecommons.org/licenses/by/4.0/legalcode -## Support -Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. +### Third-party software -## Roadmap -If you have ideas for releases in the future, it is a good idea to list them in the README. +Use of the third-party software, libraries or code referred to in the +[Acknowledgements](#acknowledgements) section above may be governed by separate +terms and conditions or license provisions. Your use of the third-party +software, libraries or code is subject to any such terms and you should check +that you can comply with any applicable restrictions or terms and conditions +before use. -## Contributing -State if you are open to contributions and what your requirements are for accepting them. +### Mirrored Databases -For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. +The following databases have been mirrored by DeepMind, and are available with +reference to the following: -You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. +* [BFD](https://bfd.mmseqs.com/) (unmodified), by Steinegger M. and Söding J., + available under a + [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). -## Authors and acknowledgment -Show your appreciation to those who have contributed to the project. +* [BFD](https://bfd.mmseqs.com/) (modified), by Steinegger M. and Söding J., + modified by DeepMind, available under a + [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). + See the Methods section of the + [AlphaFold proteome paper](https://www.nature.com/articles/s41586-021-03828-1) + for details. -## License -For open source projects, say how it is licensed. +* [Uniref30: v2021_03](http://wwwuser.gwdg.de/~compbiol/uniclust/2021_03/) + (unmodified), by Mirdita M. et al., available under a + [Creative Commons Attribution-ShareAlike 4.0 International License](http://creativecommons.org/licenses/by-sa/4.0/). + +* [MGnify: v2022_05](http://ftp.ebi.ac.uk/pub/databases/metagenomics/peptide_database/2022_05/README.txt) + (unmodified), by Mitchell AL et al., available free of all copyright + restrictions and made fully and freely available for both non-commercial and + commercial use under + [CC0 1.0 Universal (CC0 1.0) Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/). -## Project status -If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. diff --git a/afdb/README.md b/afdb/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2471c29ee63c993d337aa863698438288ff6f747 --- /dev/null +++ b/afdb/README.md @@ -0,0 +1,390 @@ +# AlphaFold Protein Structure Database + +## Introduction + +The AlphaFold UniProt release (214M predictions) is hosted on +[Google Cloud Public Datasets](https://console.cloud.google.com/marketplace/product/bigquery-public-data/deepmind-alphafold), +and is available to download at no cost under a +[CC-BY-4.0 licence](http://creativecommons.org/licenses/by/4.0/legalcode). The +dataset is in a Cloud Storage bucket, and metadata is available on BigQuery. A +Google Cloud account is required for the download, but the data can be freely +used under the terms of the +[CC-BY 4.0 Licence](http://creativecommons.org/licenses/by/4.0/legalcode). + +This document provides an overview of how to access and download the dataset for +different use cases. Please refer to the [AlphaFold database FAQ](https://www.alphafold.com/faq) +for further information on what proteins are in the database and a changelog of +releases. + +:ledger: **Note: The full dataset is difficult to manipulate without significant +computational resources (the size of the dataset is 23 TiB, 3 * 214M files).** + +There are also alternatives to downloading the full dataset: + +1. Download a premade subset (covering important species / Swiss-Prot) via our + [download page](https://alphafold.ebi.ac.uk/download). +2. Download a custom subset of the data. See below. + +If you need to download the full dataset then please see the "Bulk download" +section. See "Creating a Google Cloud Account" below for more information on how +to avoid any surprise costs when using Google Cloud Public Datasets. + +## Licence + +Data is available for academic and commercial use, under a +[CC-BY-4.0 licence](http://creativecommons.org/licenses/by/4.0/legalcode). + +EMBL-EBI expects attribution (e.g. in publications, services or products) for +any of its online services, databases or software in accordance with good +scientific practice. + +If you make use of an AlphaFold prediction, please cite the following papers: + +* [Jumper, J et al. Highly accurate protein structure prediction with + AlphaFold. Nature + (2021).](https://www.nature.com/articles/s41586-021-03819-2) +* [Varadi, M et al. AlphaFold Protein Structure Database: massively expanding + the structural coverage of protein-sequence space with high-accuracy models. + Nucleic Acids Research + (2021).](https://academic.oup.com/nar/advance-article/doi/10.1093/nar/gkab1061/6430488) + +AlphaFold Data Copyright (2022) DeepMind Technologies Limited. + +## Disclaimer + +The AlphaFold Data and other information provided on this site is for +theoretical modelling only, caution should be exercised in its use. It is +provided 'as-is' without any warranty of any kind, whether expressed or implied. +For clarity, no warranty is given that use of the information shall not infringe +the rights of any third party. The information is not intended to be a +substitute for professional medical advice, diagnosis, or treatment, and does +not constitute medical or other professional advice. + +## Format + +Dataset file names start with a protein identifier of the form `AF-[a UniProt +accession]-F[a fragment number]`. + +Three files are provided for each entry: + +* **model_v4.cif** – contains the atomic coordinates for the predicted protein + structure, along with some metadata. Useful references for this file format + are the [ModelCIF](https://github.com/ihmwg/ModelCIF) and + [PDBx/mmCIF](https://mmcif.wwpdb.org) project sites. +* **confidence_v4.json** – contains a confidence metric output by AlphaFold + called pLDDT. This provides a number for each residue, indicating how + confident AlphaFold is in the *local* surrounding structure. pLDDT ranges + from 0 to 100, where 100 is most confident. This is also contained in the + CIF file. +* **predicted_aligned_error_v4.json** – contains a confidence metric output by + AlphaFold called PAE. This provides a number for every pair of residues, + which is lower when AlphaFold is more confident in the relative position of + the two residues. PAE is more suitable than pLDDT for judging confidence in + relative domain placements. + [See here](https://alphafold.ebi.ac.uk/faq#faq-7) for a description of the + format. + +Predictions grouped by NCBI taxonomy ID are available as +`proteomes/proteome-tax_id-[TAX ID]-[SHARD ID]_v4.tar` within the same +bucket. + +There are also two extra files stored in the bucket: + +* `accession_ids.csv` – This file contains a list of all the UniProt + accessions that have predictions in AlphaFold DB. The file is in CSV format + and includes the following columns, separated by a comma: + * UniProt accession, e.g. A8H2R3 + * First residue index (UniProt numbering), e.g. 1 + * Last residue index (UniProt numbering), e.g. 199 + * AlphaFold DB identifier, e.g. AF-A8H2R3-F1 + * Latest version, e.g. 4 +* `sequences.fasta` – This file contains sequences for all proteins in the + current database version in FASTA format. The identifier rows start with + ">AFDB", followed by the AlphaFold DB identifier and the name of the + protein. The sequence rows contain the corresponding amino acid sequences. + Each sequence is on a single line, i.e. there is no wrapping. + +## Creating a Google Cloud Account + +Downloading from the Google Cloud Public Datasets (rather than from AFDB or 3D +Beacons) requires a Google Cloud account. See the +[Google Cloud get started](https://cloud.google.com/docs/get-started) page, and +explore the [free tier account usage limits](https://cloud.google.com/free). + +**IMPORTANT: After the trial period has finished (90 days), to continue access, +you are required to upgrade to a billing account. While your free tier access +(including access to the Public Datasets storage bucket) continues, usage beyond +the free tier will incur costs – please familiarise yourself with the pricing +for the services that you use to avoid any surprises.** + +1. Go to + [https://cloud.google.com/datasets](https://cloud.google.com/datasets). +2. Create an account: + 1. Click "get started for free" in the top right corner. + 2. Agree to all terms of service. + 3. Follow the setup instructions. Note that a payment method is required, + but this will not be used unless you enable billing. + 4. Access to the Google Cloud Public Datasets storage bucket is always at + no cost and you will have access to the + [free tier.](https://cloud.google.com/free/docs/gcp-free-tier#free-tier-usage-limits) +3. Set up a project: + 1. In the top left corner, click the navigation menu (three horizontal bars + icon). + 2. Select: "Cloud overview" -> "Dashboard". + 3. In the top left corner there is a project menu bar (likely says "My + First Project"). Select this and a "Select a Project" box will appear. + 4. To keep using this project, click "Cancel" at the bottom of the box. + 5. To create a new project, click "New Project" at the top of the box: + 1. Select a project name. + 2. For location, if your organization has a Cloud account then select + this, otherwise leave as is. +4. Install `gsutil`: + 1. Follow these + [instructions](https://cloud.google.com/storage/docs/gsutil_install). + +## Accessing the dataset + +The data is available from: + +* GCS data bucket: + [gs://public-datasets-deepmind-alphafold-v4](https://console.cloud.google.com/storage/browser/public-datasets-deepmind-alphafold-v4) + +## Bulk download + +We don't recommend downloading the full dataset unless required for processing +with local computational resources, for example in an academic high performance +computing centre. + +We estimate that a 1 Gbps internet connection will allow download of the full +database in roughly 2.5 days. + +While we don’t know the exact nature of your computational infrastructure, below +are some suggested approaches for downloading the dataset. Please reach out to +[alphafold@deepmind.com](mailto:alphafold@deepmind.com) if you have any +questions. + +The recommended way of downloading the whole database is by downloading +1,015,797 sharded proteome tar files using the command below. This is +significantly faster than downloading all of the individual files because of +large constant per-file latency. + +```bash +gsutil -m cp -r gs://public-datasets-deepmind-alphafold-v4/proteomes/ . +``` + +You will then have to un-tar all of the proteomes and un-gzip all of the +individual files. Note that after un-taring, there will be about 644M files, so +make sure your filesystem can handle this. + +### Storage Transfer Service + +Some users might find the +[Storage Transfer Service](https://cloud.google.com/storage-transfer-service) a +convenient way to set up the transfer between this bucket and another bucket, or +another cloud service. *Using this service may incur costs*. Please check the +[pricing page](https://cloud.google.com/storage-transfer/pricing) for more +detail, particularly for transfers to other cloud services. + +## Downloading subsets of the data + +### AlphaFold Database search + +For simple queries, for example by protein name, gene name or UniProt accession +you can use the main search bar on +[alphafold.ebi.ac.uk](https://alphafold.ebi.ac.uk). + +### 3D Beacons + +[3D-Beacons](https://3d-beacons.org) is an international collaboration of +protein structure data providers to create a federated network with unified data +access mechanisms. The 3D-Beacons platform allows users to retrieve coordinate +files and metadata of experimentally determined and theoretical protein models +from data providers such as AlphaFold DB. + +More information about how to access AlphaFold predictions using 3D-Beacons is +available at +[3D-Beacons documentation](https://www.ebi.ac.uk/pdbe/pdbe-kb/3dbeacons/docs). + +### Other premade species subsets + +Downloads for some model organism proteomes, global health proteomes and +Swiss-Prot are available on the +[AFDB website](https://alphafold.ebi.ac.uk/download). These are generated from +[reference proteomes](https://www.uniprot.org/help/reference_proteome). If you +want other species, or *all* proteins for a particular species, please continue +reading. + +We provide 1,015,797 sharded tar files for all species in +[gs://public-datasets-deepmind-alphafold-v4/proteomes/](https://console.cloud.google.com/storage/browser/public-datasets-deepmind-alphafold-v4/proteomes/). +We shard each proteome so that each shard contains at most 10,000 proteins +(which corresponds to 30,000 files per shard, since there are 3 files per +protein). To download a proteome of your choice, you have to do the following +steps: + +1. Find the [NCBI taxonomy ID](https://www.ncbi.nlm.nih.gov/taxonomy) + (`[TAX_ID]`) of the species in question. +2. Run `gsutil -m cp + gs://public-datasets-deepmind-alphafold-v4/proteomes/proteome-tax_id-[TAX + ID]-*_v4.tar .` to download all shards for this proteome. +3. Un-tar all of the downloaded files and un-gzip all of the individual files. + +### File manifests + +Pre-made lists of files (manifests) are available at +[gs://public-datasets-deepmind-alphafold-v4/manifests](https://console.cloud.google.com/storage/browser/public-datasets-deepmind-alphafold-v4/manifests/). +Note that these filenames do not include the bucket prefix, but this can be +added once the files have been downloaded to your filesystem. + +One can also define their own list of files, for example created by BigQuery +(see below). `gsutil` can be used to download these files with + +```bash +cat [manifest file] | gsutil -m cp -I . +``` + +This will be much slower than downloading the tar files (grouped by species) +because each file has an associated overhead. + +### BigQuery + +**IMPORTANT: The +[free tier](https://cloud.google.com/bigquery/pricing#free-tier) of Google Cloud +comes with [BigQuery Sandbox](https://cloud.google.com/bigquery/docs/sandbox) +with 1 TB of free processed query data each month. Repeated queries within a +month could exceed this limit and if you have +[upgraded to a paid Cloud Billing account](https://cloud.google.com/free/docs/gcp-free-tier#how-to-upgrade) +you may be charged.** + +**This should be sufficient for running a number of queries on the metadata +table, though the usage depends on the size of the columns queried and selected. +Please look at the +[BigQuery pricing page](https://cloud.google.com/bigquery/pricing) for more +information.** + +**This is the user's responsibility so please ensure you keep track of your +billing settings and resource usage in the console.** + +BigQuery provides a serverless and highly scalable analytics tool enabling SQL +queries over large datasets. The metadata for the UniProt dataset takes up ​​113 +GiB and so can be challenging to process and analyse locally. The table name is: + +* BigQuery metadata table: + [bigquery-public-data.deepmind_alphafold.metadata](https://console.cloud.google.com/bigquery?project=bigquery-public-data&ws=!1m5!1m4!4m3!1sbigquery-public-data!2sdeepmind_alphafold!3smetadata) + +With BigQuery SQL you can do complex queries, e.g. find all high accuracy +predictions for a particular species, or even join on to other datasets, e.g. to +an experimental dataset by the `uniprotSequence`, or to the NCBI taxonomy by +`taxId`. + +If you would find additional information in the metadata useful please file a +GitHub issue. + +#### Setup + +Follow the +[BigQuery Sandbox set up guide](https://cloud.google.com/bigquery/docs/sandbox). + +#### Exploring the metadata + +The column names and associated data types available can be found using the +following query. + +```sql +SELECT column_name, data_type FROM bigquery-public-data.deepmind_alphafold.INFORMATION_SCHEMA.COLUMNS +WHERE table_name = 'metadata' +``` + +**Column name** | **Data type** | **Description** +---------------------- | --------------- | --------------- +allVersions | `ARRAY<INT64>` | An array of AFDB versions this prediction has had +entryId | `STRING` | The AFDB entry ID, e.g. "AF-Q1HGU3-F1" +fractionPlddtConfident | `FLOAT64` | Fraction of the residues in the prediction with pLDDT between 70 and 90 +fractionPlddtLow | `FLOAT64` | Fraction of the residues in the prediction with pLDDT between 50 and 70 +fractionPlddtVeryHigh | `FLOAT64` | Fraction of the residues in the prediction with pLDDT greater than 90 +fractionPlddtVeryLow | `FLOAT64` | Fraction of the residues in the prediction with pLDDT less than 50 +gene | `STRING` | The name of the gene if known, e.g. "COII" +geneSynonyms | `ARRAY<STRING>` | Additional synonyms for the gene +globalMetricValue | `FLOAT64` | The mean pLDDT of this prediction +isReferenceProteome | `BOOL` | Is this protein part of the reference proteome? +isReviewed | `BOOL` | Has this protein been reviewed, i.e. is it part of SwissProt? +latestVersion | `INT64` | The latest AFDB version for this prediction +modelCreatedDate | `DATE` | The date of creation for this entry, e.g. "2022-06-01" +organismCommonNames | `ARRAY<STRING>` | List of common organism names +organismScientificName | `STRING` | The scientific name of the organism +organismSynonyms | `ARRAY<STRING>` | List of synonyms for the organism +proteinFullNames | `ARRAY<STRING>` | Full names of the protein +proteinShortNames | `ARRAY<STRING>` | Short names of the protein +sequenceChecksum | `STRING` | [CRC64 hash](https://www.uniprot.org/help/checksum) of the sequence. Can be used for cheaper lookups. +sequenceVersionDate | `DATE` | Date when the sequence data was last modified in UniProt +taxId | `INT64` | NCBI taxonomy id of the originating species +uniprotAccession | `STRING` | Uniprot accession ID +uniprotDescription | `STRING` | The name recommended by the UniProt consortium +uniprotEnd | `INT64` | Number of the last residue in the entry relative to the UniProt entry. This is equal to the length of the protein unless we are dealing with protein fragments. +uniprotId | `STRING` | The Uniprot EntryName field +uniprotSequence | `STRING` | Amino acid sequence for this prediction +uniprotStart | `INT64` | Number of the first residue in the entry relative to the UniProt entry. This is 1 unless we are dealing with protein fragments. + +#### Producing summary statistics + +The following query gives the mean of the prediction confidence fractions per +species. + +```sql +SELECT + organismScientificName AS name, + SUM(fractionPlddtVeryLow) / COUNT(fractionPlddtVeryLow) AS mean_plddt_very_low, + SUM(fractionPlddtLow) / COUNT(fractionPlddtLow) AS mean_plddt_low, + SUM(fractionPlddtConfident) / COUNT(fractionPlddtConfident) AS mean_plddt_confident, + SUM(fractionPlddtVeryHigh) / COUNT(fractionPlddtVeryHigh) AS mean_plddt_very_high, + COUNT(organismScientificName) AS num_predictions +FROM bigquery-public-data.deepmind_alphafold.metadata +GROUP by name +ORDER BY num_predictions DESC; +``` + +#### Producing lists of files + +We expect that the most important use for the metadata will be to create subsets +of proteins according to various criteria, so that users can choose to only copy +a subset of the 214M proteins that exist in the dataset. An example query is +given below: + +```sql +with file_rows AS ( + with file_cols AS ( + SELECT + CONCAT(entryID, '-model_v4.cif') as m, + CONCAT(entryID, '-predicted_aligned_error_v4.json') as p + FROM bigquery-public-data.deepmind_alphafold.metadata + WHERE organismScientificName = "Homo sapiens" + AND (fractionPlddtVeryHigh + fractionPlddtConfident) > 0.5 + ) + SELECT * FROM file_cols UNPIVOT (files for filetype in (m, p)) +) +SELECT CONCAT('gs://public-datasets-deepmind-alphafold-v4/', files) as files +from file_rows +``` + +In this case, the list has been filtered to only include proteins from *Homo +sapiens* for which over half the residues are confident or better (>70 pLDDT). + +This creates a table with one column "files", where each row is the cloud +location of one of the two file types that has been provided for each protein. +There is an additional `confidence_v4.json` file which contains the +per-residue pLDDT. This information is already in the CIF file but may be +preferred if only this information is required. + +This allows users to bulk download the exact proteins they need, without having +to download the entire dataset. Other columns may also be used to select subsets +of proteins, and we point the user to the +[BigQuery documentation](https://cloud.google.com/bigquery/docs) to understand +other ways to filter for their desired protein lists. Likewise, the +documentation should be followed to download these file subsets locally, as the +most appropriate approach will depend on the filesize. Note that it may be +easier to download large files using [Colab](https://colab.research.google.com/) +(e.g. pandas to_csv). + +#### Previous versions +Previous versions of AFDB will remain available at +[gs://public-datasets-deepmind-alphafold](https://console.cloud.google.com/storage/browser/public-datasets-deepmind-alphafold) +to enable reproducible research. We recommend using the latest version (v4). \ No newline at end of file diff --git a/alphafold/__init__.py b/alphafold/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..a0fd7f8294b9d7be770127c356f0b6564f1baa6c --- /dev/null +++ b/alphafold/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""An implementation of the inference pipeline of AlphaFold v2.0.""" diff --git a/alphafold/common/__init__.py b/alphafold/common/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d3c65d69d5f61b7b9547153c47d84e7f545e2636 --- /dev/null +++ b/alphafold/common/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Common data types and constants used within Alphafold.""" diff --git a/alphafold/common/confidence.py b/alphafold/common/confidence.py new file mode 100644 index 0000000000000000000000000000000000000000..8745fdf6dd5d13cf3bfaee07d6915dd6c0500031 --- /dev/null +++ b/alphafold/common/confidence.py @@ -0,0 +1,233 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Functions for processing confidence metrics.""" + +import json +from typing import Dict, Optional, Tuple + +import numpy as np +import scipy.special + + +def compute_plddt(logits: np.ndarray) -> np.ndarray: + """Computes per-residue pLDDT from logits. + + Args: + logits: [num_res, num_bins] output from the PredictedLDDTHead. + + Returns: + plddt: [num_res] per-residue pLDDT. + """ + num_bins = logits.shape[-1] + bin_width = 1.0 / num_bins + bin_centers = np.arange(start=0.5 * bin_width, stop=1.0, step=bin_width) + probs = scipy.special.softmax(logits, axis=-1) + predicted_lddt_ca = np.sum(probs * bin_centers[None, :], axis=-1) + return predicted_lddt_ca * 100 + + +def _confidence_category(score: float) -> str: + """Categorizes pLDDT into: disordered (D), low (L), medium (M), high (H).""" + if 0 <= score < 50: + return 'D' + if 50 <= score < 70: + return 'L' + elif 70 <= score < 90: + return 'M' + elif 90 <= score <= 100: + return 'H' + else: + raise ValueError(f'Invalid pLDDT score {score}') + + +def confidence_json(plddt: np.ndarray) -> str: + """Returns JSON with confidence score and category for every residue. + + Args: + plddt: Per-residue confidence metric data. + + Returns: + String with a formatted JSON. + + Raises: + ValueError: If `plddt` has a rank different than 1. + """ + if plddt.ndim != 1: + raise ValueError(f'The plddt array must be rank 1, got: {plddt.shape}.') + + confidence = { + 'residueNumber': list(range(1, len(plddt) + 1)), + 'confidenceScore': [round(float(s), 2) for s in plddt], + 'confidenceCategory': [_confidence_category(s) for s in plddt], + } + return json.dumps(confidence, indent=None, separators=(',', ':')) + + +def _calculate_bin_centers(breaks: np.ndarray): + """Gets the bin centers from the bin edges. + + Args: + breaks: [num_bins - 1] the error bin edges. + + Returns: + bin_centers: [num_bins] the error bin centers. + """ + step = (breaks[1] - breaks[0]) + + # Add half-step to get the center + bin_centers = breaks + step / 2 + # Add a catch-all bin at the end. + bin_centers = np.concatenate([bin_centers, [bin_centers[-1] + step]], + axis=0) + return bin_centers + + +def _calculate_expected_aligned_error( + alignment_confidence_breaks: np.ndarray, + aligned_distance_error_probs: np.ndarray) -> Tuple[np.ndarray, np.ndarray]: + """Calculates expected aligned distance errors for every pair of residues. + + Args: + alignment_confidence_breaks: [num_bins - 1] the error bin edges. + aligned_distance_error_probs: [num_res, num_res, num_bins] the predicted + probs for each error bin, for each pair of residues. + + Returns: + predicted_aligned_error: [num_res, num_res] the expected aligned distance + error for each pair of residues. + max_predicted_aligned_error: The maximum predicted error possible. + """ + bin_centers = _calculate_bin_centers(alignment_confidence_breaks) + + # Tuple of expected aligned distance error and max possible error. + return (np.sum(aligned_distance_error_probs * bin_centers, axis=-1), + np.asarray(bin_centers[-1])) + + +def compute_predicted_aligned_error( + logits: np.ndarray, + breaks: np.ndarray) -> Dict[str, np.ndarray]: + """Computes aligned confidence metrics from logits. + + Args: + logits: [num_res, num_res, num_bins] the logits output from + PredictedAlignedErrorHead. + breaks: [num_bins - 1] the error bin edges. + + Returns: + aligned_confidence_probs: [num_res, num_res, num_bins] the predicted + aligned error probabilities over bins for each residue pair. + predicted_aligned_error: [num_res, num_res] the expected aligned distance + error for each pair of residues. + max_predicted_aligned_error: The maximum predicted error possible. + """ + aligned_confidence_probs = scipy.special.softmax( + logits, + axis=-1) + predicted_aligned_error, max_predicted_aligned_error = ( + _calculate_expected_aligned_error( + alignment_confidence_breaks=breaks, + aligned_distance_error_probs=aligned_confidence_probs)) + return { + 'aligned_confidence_probs': aligned_confidence_probs, + 'predicted_aligned_error': predicted_aligned_error, + 'max_predicted_aligned_error': max_predicted_aligned_error, + } + + +def pae_json(pae: np.ndarray, max_pae: float) -> str: + """Returns the PAE in the same format as is used in the AFDB. + + Note that the values are presented as floats to 1 decimal place, whereas AFDB + returns integer values. + + Args: + pae: The n_res x n_res PAE array. + max_pae: The maximum possible PAE value. + + Returns: + PAE output format as a JSON string. + """ + # Check the PAE array is the correct shape. + if pae.ndim != 2 or pae.shape[0] != pae.shape[1]: + raise ValueError(f'PAE must be a square matrix, got {pae.shape}') + + # Round the predicted aligned errors to 1 decimal place. + rounded_errors = np.round(pae.astype(np.float64), decimals=1) + formatted_output = [{ + 'predicted_aligned_error': rounded_errors.tolist(), + 'max_predicted_aligned_error': max_pae, + }] + return json.dumps(formatted_output, indent=None, separators=(',', ':')) + + +def predicted_tm_score( + logits: np.ndarray, + breaks: np.ndarray, + residue_weights: Optional[np.ndarray] = None, + asym_id: Optional[np.ndarray] = None, + interface: bool = False) -> np.ndarray: + """Computes predicted TM alignment or predicted interface TM alignment score. + + Args: + logits: [num_res, num_res, num_bins] the logits output from + PredictedAlignedErrorHead. + breaks: [num_bins] the error bins. + residue_weights: [num_res] the per residue weights to use for the + expectation. + asym_id: [num_res] the asymmetric unit ID - the chain ID. Only needed for + ipTM calculation, i.e. when interface=True. + interface: If True, interface predicted TM score is computed. + + Returns: + ptm_score: The predicted TM alignment or the predicted iTM score. + """ + + # residue_weights has to be in [0, 1], but can be floating-point, i.e. the + # exp. resolved head's probability. + if residue_weights is None: + residue_weights = np.ones(logits.shape[0]) + + bin_centers = _calculate_bin_centers(breaks) + + num_res = int(np.sum(residue_weights)) + # Clip num_res to avoid negative/undefined d0. + clipped_num_res = max(num_res, 19) + + # Compute d_0(num_res) as defined by TM-score, eqn. (5) in Yang & Skolnick + # "Scoring function for automated assessment of protein structure template + # quality", 2004: http://zhanglab.ccmb.med.umich.edu/papers/2004_3.pdf + d0 = 1.24 * (clipped_num_res - 15) ** (1./3) - 1.8 + + # Convert logits to probs. + probs = scipy.special.softmax(logits, axis=-1) + + # TM-Score term for every bin. + tm_per_bin = 1. / (1 + np.square(bin_centers) / np.square(d0)) + # E_distances tm(distance). + predicted_tm_term = np.sum(probs * tm_per_bin, axis=-1) + + pair_mask = np.ones(shape=(num_res, num_res), dtype=bool) + if interface: + pair_mask *= asym_id[:, None] != asym_id[None, :] + + predicted_tm_term *= pair_mask + + pair_residue_weights = pair_mask * ( + residue_weights[None, :] * residue_weights[:, None]) + normed_residue_mask = pair_residue_weights / (1e-8 + np.sum( + pair_residue_weights, axis=-1, keepdims=True)) + per_alignment = np.sum(predicted_tm_term * normed_residue_mask, axis=-1) + return np.asarray(per_alignment[(per_alignment * residue_weights).argmax()]) diff --git a/alphafold/common/confidence_test.py b/alphafold/common/confidence_test.py new file mode 100644 index 0000000000000000000000000000000000000000..7e4eef8df5dbce871cdb0f75f2ac2f28492877cf --- /dev/null +++ b/alphafold/common/confidence_test.py @@ -0,0 +1,48 @@ +# Copyright 2023 DeepMind Technologies Limited +# +# 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. + +"""Test confidence metrics.""" + + +from absl.testing import absltest +from alphafold.common import confidence +import numpy as np + + +class ConfidenceTest(absltest.TestCase): + + def test_pae_json(self): + pae = np.array([[0.01, 13.12345], [20.0987, 0.0]]) + pae_json = confidence.pae_json(pae=pae, max_pae=31.75) + self.assertEqual( + pae_json, '[{"predicted_aligned_error":[[0.0,13.1],[20.1,0.0]],' + '"max_predicted_aligned_error":31.75}]') + + def test_confidence_json(self): + plddt = np.array([42, 42.42]) + + confidence_json = confidence.confidence_json(plddt=plddt) + + print(confidence_json) + + self.assertEqual( + confidence_json, + ('{"residueNumber":[1,2],' + '"confidenceScore":[42.0,42.42],' + '"confidenceCategory":["D","D"]}'), + ) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/common/mmcif_metadata.py b/alphafold/common/mmcif_metadata.py new file mode 100644 index 0000000000000000000000000000000000000000..b5b725d5f000019e7306648fc1d18b35cc523dc5 --- /dev/null +++ b/alphafold/common/mmcif_metadata.py @@ -0,0 +1,213 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""mmCIF metadata.""" + +from typing import Mapping, Sequence +from alphafold import version +import numpy as np + + +_DISCLAIMER = """ALPHAFOLD DATA, COPYRIGHT (2021) DEEPMIND TECHNOLOGIES LIMITED. +THE INFORMATION PROVIDED IS THEORETICAL MODELLING ONLY AND CAUTION SHOULD BE +EXERCISED IN ITS USE. IT IS PROVIDED "AS-IS" WITHOUT ANY WARRANTY OF ANY KIND, +WHETHER EXPRESSED OR IMPLIED. NO WARRANTY IS GIVEN THAT USE OF THE INFORMATION +SHALL NOT INFRINGE THE RIGHTS OF ANY THIRD PARTY. DISCLAIMER: THE INFORMATION IS +NOT INTENDED TO BE A SUBSTITUTE FOR PROFESSIONAL MEDICAL ADVICE, DIAGNOSIS, OR +TREATMENT, AND DOES NOT CONSTITUTE MEDICAL OR OTHER PROFESSIONAL ADVICE. IT IS +AVAILABLE FOR ACADEMIC AND COMMERCIAL PURPOSES, UNDER CC-BY 4.0 LICENCE.""" + +# Authors of the Nature methods paper we reference in the mmCIF. +_MMCIF_PAPER_AUTHORS = ( + 'Jumper, John', + 'Evans, Richard', + 'Pritzel, Alexander', + 'Green, Tim', + 'Figurnov, Michael', + 'Ronneberger, Olaf', + 'Tunyasuvunakool, Kathryn', + 'Bates, Russ', + 'Zidek, Augustin', + 'Potapenko, Anna', + 'Bridgland, Alex', + 'Meyer, Clemens', + 'Kohl, Simon A. A.', + 'Ballard, Andrew J.', + 'Cowie, Andrew', + 'Romera-Paredes, Bernardino', + 'Nikolov, Stanislav', + 'Jain, Rishub', + 'Adler, Jonas', + 'Back, Trevor', + 'Petersen, Stig', + 'Reiman, David', + 'Clancy, Ellen', + 'Zielinski, Michal', + 'Steinegger, Martin', + 'Pacholska, Michalina', + 'Berghammer, Tamas', + 'Silver, David', + 'Vinyals, Oriol', + 'Senior, Andrew W.', + 'Kavukcuoglu, Koray', + 'Kohli, Pushmeet', + 'Hassabis, Demis', +) + +# Authors of the mmCIF - we set them to be equal to the authors of the paper. +_MMCIF_AUTHORS = _MMCIF_PAPER_AUTHORS + + +def add_metadata_to_mmcif( + old_cif: Mapping[str, Sequence[str]], model_type: str +) -> Mapping[str, Sequence[str]]: + """Adds AlphaFold metadata in the given mmCIF.""" + cif = {} + + # ModelCIF conformation dictionary. + cif['_audit_conform.dict_name'] = ['mmcif_ma.dic'] + cif['_audit_conform.dict_version'] = ['1.3.9'] + cif['_audit_conform.dict_location'] = [ + 'https://raw.githubusercontent.com/ihmwg/ModelCIF/master/dist/' + 'mmcif_ma.dic' + ] + + # License and disclaimer. + cif['_pdbx_data_usage.id'] = ['1', '2'] + cif['_pdbx_data_usage.type'] = ['license', 'disclaimer'] + cif['_pdbx_data_usage.details'] = [ + 'Data in this file is available under a CC-BY-4.0 license.', + _DISCLAIMER, + ] + cif['_pdbx_data_usage.url'] = [ + 'https://creativecommons.org/licenses/by/4.0/', + '?', + ] + cif['_pdbx_data_usage.name'] = ['CC-BY-4.0', '?'] + + # Structure author details. + cif['_audit_author.name'] = [] + cif['_audit_author.pdbx_ordinal'] = [] + for author_index, author_name in enumerate(_MMCIF_AUTHORS, start=1): + cif['_audit_author.name'].append(author_name) + cif['_audit_author.pdbx_ordinal'].append(str(author_index)) + + # Paper author details. + cif['_citation_author.citation_id'] = [] + cif['_citation_author.name'] = [] + cif['_citation_author.ordinal'] = [] + for author_index, author_name in enumerate(_MMCIF_PAPER_AUTHORS, start=1): + cif['_citation_author.citation_id'].append('primary') + cif['_citation_author.name'].append(author_name) + cif['_citation_author.ordinal'].append(str(author_index)) + + # Paper citation details. + cif['_citation.id'] = ['primary'] + cif['_citation.title'] = [ + 'Highly accurate protein structure prediction with AlphaFold' + ] + cif['_citation.journal_full'] = ['Nature'] + cif['_citation.journal_volume'] = ['596'] + cif['_citation.page_first'] = ['583'] + cif['_citation.page_last'] = ['589'] + cif['_citation.year'] = ['2021'] + cif['_citation.journal_id_ASTM'] = ['NATUAS'] + cif['_citation.country'] = ['UK'] + cif['_citation.journal_id_ISSN'] = ['0028-0836'] + cif['_citation.journal_id_CSD'] = ['0006'] + cif['_citation.book_publisher'] = ['?'] + cif['_citation.pdbx_database_id_PubMed'] = ['34265844'] + cif['_citation.pdbx_database_id_DOI'] = ['10.1038/s41586-021-03819-2'] + + # Type of data in the dataset including data used in the model generation. + cif['_ma_data.id'] = ['1'] + cif['_ma_data.name'] = ['Model'] + cif['_ma_data.content_type'] = ['model coordinates'] + + # Description of number of instances for each entity. + cif['_ma_target_entity_instance.asym_id'] = old_cif['_struct_asym.id'] + cif['_ma_target_entity_instance.entity_id'] = old_cif[ + '_struct_asym.entity_id' + ] + cif['_ma_target_entity_instance.details'] = ['.'] * len( + cif['_ma_target_entity_instance.entity_id'] + ) + + # Details about the target entities. + cif['_ma_target_entity.entity_id'] = cif[ + '_ma_target_entity_instance.entity_id' + ] + cif['_ma_target_entity.data_id'] = ['1'] * len( + cif['_ma_target_entity.entity_id'] + ) + cif['_ma_target_entity.origin'] = ['.'] * len( + cif['_ma_target_entity.entity_id'] + ) + + # Details of the models being deposited. + cif['_ma_model_list.ordinal_id'] = ['1'] + cif['_ma_model_list.model_id'] = ['1'] + cif['_ma_model_list.model_group_id'] = ['1'] + cif['_ma_model_list.model_name'] = ['Top ranked model'] + + cif['_ma_model_list.model_group_name'] = [ + f'AlphaFold {model_type} v{version.__version__} model' + ] + cif['_ma_model_list.data_id'] = ['1'] + cif['_ma_model_list.model_type'] = ['Ab initio model'] + + # Software used. + cif['_software.pdbx_ordinal'] = ['1'] + cif['_software.name'] = ['AlphaFold'] + cif['_software.version'] = [f'v{version.__version__}'] + cif['_software.type'] = ['package'] + cif['_software.description'] = ['Structure prediction'] + cif['_software.classification'] = ['other'] + cif['_software.date'] = ['?'] + + # Collection of software into groups. + cif['_ma_software_group.ordinal_id'] = ['1'] + cif['_ma_software_group.group_id'] = ['1'] + cif['_ma_software_group.software_id'] = ['1'] + + # Method description to conform with ModelCIF. + cif['_ma_protocol_step.ordinal_id'] = ['1', '2', '3'] + cif['_ma_protocol_step.protocol_id'] = ['1', '1', '1'] + cif['_ma_protocol_step.step_id'] = ['1', '2', '3'] + cif['_ma_protocol_step.method_type'] = [ + 'coevolution MSA', + 'template search', + 'modeling', + ] + + # Details of the metrics use to assess model confidence. + cif['_ma_qa_metric.id'] = ['1', '2'] + cif['_ma_qa_metric.name'] = ['pLDDT', 'pLDDT'] + # Accepted values are distance, energy, normalised score, other, zscore. + cif['_ma_qa_metric.type'] = ['pLDDT', 'pLDDT'] + cif['_ma_qa_metric.mode'] = ['global', 'local'] + cif['_ma_qa_metric.software_group_id'] = ['1', '1'] + + # Global model confidence metric value. + cif['_ma_qa_metric_global.ordinal_id'] = ['1'] + cif['_ma_qa_metric_global.model_id'] = ['1'] + cif['_ma_qa_metric_global.metric_id'] = ['1'] + global_plddt = np.mean( + [float(v) for v in old_cif['_atom_site.B_iso_or_equiv']] + ) + cif['_ma_qa_metric_global.metric_value'] = [f'{global_plddt:.2f}'] + + cif['_atom_type.symbol'] = sorted(set(old_cif['_atom_site.type_symbol'])) + + return cif diff --git a/alphafold/common/protein.py b/alphafold/common/protein.py new file mode 100644 index 0000000000000000000000000000000000000000..681086132cf4bb8f3dcb489f25b631d4812e8685 --- /dev/null +++ b/alphafold/common/protein.py @@ -0,0 +1,579 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Protein data type.""" + +import collections +import dataclasses +import functools +import io +from typing import Any, Dict, List, Mapping, Optional, Tuple +from alphafold.common import mmcif_metadata +from alphafold.common import residue_constants +from Bio.PDB import MMCIFParser +from Bio.PDB import PDBParser +from Bio.PDB.mmcifio import MMCIFIO +from Bio.PDB.Structure import Structure +import numpy as np + +FeatureDict = Mapping[str, np.ndarray] +ModelOutput = Mapping[str, Any] # Is a nested dict. + +# Complete sequence of chain IDs supported by the PDB format. +PDB_CHAIN_IDS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' +PDB_MAX_CHAINS = len(PDB_CHAIN_IDS) # := 62. + +# Data to fill the _chem_comp table when writing mmCIFs. +_CHEM_COMP: Mapping[str, Tuple[Tuple[str, str], ...]] = { + 'L-peptide linking': ( + ('ALA', 'ALANINE'), + ('ARG', 'ARGININE'), + ('ASN', 'ASPARAGINE'), + ('ASP', 'ASPARTIC ACID'), + ('CYS', 'CYSTEINE'), + ('GLN', 'GLUTAMINE'), + ('GLU', 'GLUTAMIC ACID'), + ('HIS', 'HISTIDINE'), + ('ILE', 'ISOLEUCINE'), + ('LEU', 'LEUCINE'), + ('LYS', 'LYSINE'), + ('MET', 'METHIONINE'), + ('PHE', 'PHENYLALANINE'), + ('PRO', 'PROLINE'), + ('SER', 'SERINE'), + ('THR', 'THREONINE'), + ('TRP', 'TRYPTOPHAN'), + ('TYR', 'TYROSINE'), + ('VAL', 'VALINE'), + ), + 'peptide linking': (('GLY', 'GLYCINE'),), +} + + +@dataclasses.dataclass(frozen=True) +class Protein: + """Protein structure representation.""" + + # Cartesian coordinates of atoms in angstroms. The atom types correspond to + # residue_constants.atom_types, i.e. the first three are N, CA, CB. + atom_positions: np.ndarray # [num_res, num_atom_type, 3] + + # Amino-acid type for each residue represented as an integer between 0 and + # 20, where 20 is 'X'. + aatype: np.ndarray # [num_res] + + # Binary float mask to indicate presence of a particular atom. 1.0 if an atom + # is present and 0.0 if not. This should be used for loss masking. + atom_mask: np.ndarray # [num_res, num_atom_type] + + # Residue index as used in PDB. It is not necessarily continuous or 0-indexed. + residue_index: np.ndarray # [num_res] + + # 0-indexed number corresponding to the chain in the protein that this residue + # belongs to. + chain_index: np.ndarray # [num_res] + + # B-factors, or temperature factors, of each residue (in sq. angstroms units), + # representing the displacement of the residue from its ground truth mean + # value. + b_factors: np.ndarray # [num_res, num_atom_type] + + def __post_init__(self): + if len(np.unique(self.chain_index)) > PDB_MAX_CHAINS: + raise ValueError( + f'Cannot build an instance with more than {PDB_MAX_CHAINS} chains ' + 'because these cannot be written to PDB format.') + + +def _from_bio_structure( + structure: Structure, chain_id: Optional[str] = None +) -> Protein: + """Takes a Biopython structure and creates a `Protein` instance. + + WARNING: All non-standard residue types will be converted into UNK. All + non-standard atoms will be ignored. + + Args: + structure: Structure from the Biopython library. + chain_id: If chain_id is specified (e.g. A), then only that chain is parsed. + Otherwise all chains are parsed. + + Returns: + A new `Protein` created from the structure contents. + + Raises: + ValueError: If the number of models included in the structure is not 1. + ValueError: If insertion code is detected at a residue. + """ + models = list(structure.get_models()) + if len(models) != 1: + raise ValueError( + 'Only single model PDBs/mmCIFs are supported. Found' + f' {len(models)} models.' + ) + model = models[0] + + atom_positions = [] + aatype = [] + atom_mask = [] + residue_index = [] + chain_ids = [] + b_factors = [] + + for chain in model: + if chain_id is not None and chain.id != chain_id: + continue + for res in chain: + if res.id[2] != ' ': + raise ValueError( + f'PDB/mmCIF contains an insertion code at chain {chain.id} and' + f' residue index {res.id[1]}. These are not supported.' + ) + res_shortname = residue_constants.restype_3to1.get(res.resname, 'X') + restype_idx = residue_constants.restype_order.get( + res_shortname, residue_constants.restype_num) + pos = np.zeros((residue_constants.atom_type_num, 3)) + mask = np.zeros((residue_constants.atom_type_num,)) + res_b_factors = np.zeros((residue_constants.atom_type_num,)) + for atom in res: + if atom.name not in residue_constants.atom_types: + continue + pos[residue_constants.atom_order[atom.name]] = atom.coord + mask[residue_constants.atom_order[atom.name]] = 1. + res_b_factors[residue_constants.atom_order[atom.name]] = atom.bfactor + if np.sum(mask) < 0.5: + # If no known atom positions are reported for the residue then skip it. + continue + aatype.append(restype_idx) + atom_positions.append(pos) + atom_mask.append(mask) + residue_index.append(res.id[1]) + chain_ids.append(chain.id) + b_factors.append(res_b_factors) + + # Chain IDs are usually characters so map these to ints. + unique_chain_ids = np.unique(chain_ids) + chain_id_mapping = {cid: n for n, cid in enumerate(unique_chain_ids)} + chain_index = np.array([chain_id_mapping[cid] for cid in chain_ids]) + + return Protein( + atom_positions=np.array(atom_positions), + atom_mask=np.array(atom_mask), + aatype=np.array(aatype), + residue_index=np.array(residue_index), + chain_index=chain_index, + b_factors=np.array(b_factors)) + + +def from_pdb_string(pdb_str: str, chain_id: Optional[str] = None) -> Protein: + """Takes a PDB string and constructs a `Protein` object. + + WARNING: All non-standard residue types will be converted into UNK. All + non-standard atoms will be ignored. + + Args: + pdb_str: The contents of the pdb file + chain_id: If chain_id is specified (e.g. A), then only that chain is parsed. + Otherwise all chains are parsed. + + Returns: + A new `Protein` parsed from the pdb contents. + """ + with io.StringIO(pdb_str) as pdb_fh: + parser = PDBParser(QUIET=True) + structure = parser.get_structure(id='none', file=pdb_fh) + return _from_bio_structure(structure, chain_id) + + +def from_mmcif_string( + mmcif_str: str, chain_id: Optional[str] = None +) -> Protein: + """Takes a mmCIF string and constructs a `Protein` object. + + WARNING: All non-standard residue types will be converted into UNK. All + non-standard atoms will be ignored. + + Args: + mmcif_str: The contents of the mmCIF file + chain_id: If chain_id is specified (e.g. A), then only that chain is parsed. + Otherwise all chains are parsed. + + Returns: + A new `Protein` parsed from the mmCIF contents. + """ + with io.StringIO(mmcif_str) as mmcif_fh: + parser = MMCIFParser(QUIET=True) + structure = parser.get_structure(structure_id='none', filename=mmcif_fh) + return _from_bio_structure(structure, chain_id) + + +def _chain_end(atom_index, end_resname, chain_name, residue_index) -> str: + chain_end = 'TER' + return (f'{chain_end:<6}{atom_index:>5} {end_resname:>3} ' + f'{chain_name:>1}{residue_index:>4}') + + +def to_pdb(prot: Protein) -> str: + """Converts a `Protein` instance to a PDB string. + + Args: + prot: The protein to convert to PDB. + + Returns: + PDB string. + """ + restypes = residue_constants.restypes + ['X'] + res_1to3 = lambda r: residue_constants.restype_1to3.get(restypes[r], 'UNK') + atom_types = residue_constants.atom_types + + pdb_lines = [] + + atom_mask = prot.atom_mask + aatype = prot.aatype + atom_positions = prot.atom_positions + residue_index = prot.residue_index.astype(np.int32) + chain_index = prot.chain_index.astype(np.int32) + b_factors = prot.b_factors + + if np.any(aatype > residue_constants.restype_num): + raise ValueError('Invalid aatypes.') + + # Construct a mapping from chain integer indices to chain ID strings. + chain_ids = {} + for i in np.unique(chain_index): # np.unique gives sorted output. + if i >= PDB_MAX_CHAINS: + raise ValueError( + f'The PDB format supports at most {PDB_MAX_CHAINS} chains.') + chain_ids[i] = PDB_CHAIN_IDS[i] + + pdb_lines.append('MODEL 1') + atom_index = 1 + last_chain_index = chain_index[0] + # Add all atom sites. + for i in range(aatype.shape[0]): + # Close the previous chain if in a multichain PDB. + if last_chain_index != chain_index[i]: + pdb_lines.append(_chain_end( + atom_index, res_1to3(aatype[i - 1]), chain_ids[chain_index[i - 1]], + residue_index[i - 1])) + last_chain_index = chain_index[i] + atom_index += 1 # Atom index increases at the TER symbol. + + res_name_3 = res_1to3(aatype[i]) + for atom_name, pos, mask, b_factor in zip( + atom_types, atom_positions[i], atom_mask[i], b_factors[i]): + if mask < 0.5: + continue + + record_type = 'ATOM' + name = atom_name if len(atom_name) == 4 else f' {atom_name}' + alt_loc = '' + insertion_code = '' + occupancy = 1.00 + element = atom_name[0] # Protein supports only C, N, O, S, this works. + charge = '' + # PDB is a columnar format, every space matters here! + atom_line = (f'{record_type:<6}{atom_index:>5} {name:<4}{alt_loc:>1}' + f'{res_name_3:>3} {chain_ids[chain_index[i]]:>1}' + f'{residue_index[i]:>4}{insertion_code:>1} ' + f'{pos[0]:>8.3f}{pos[1]:>8.3f}{pos[2]:>8.3f}' + f'{occupancy:>6.2f}{b_factor:>6.2f} ' + f'{element:>2}{charge:>2}') + pdb_lines.append(atom_line) + atom_index += 1 + + # Close the final chain. + pdb_lines.append(_chain_end(atom_index, res_1to3(aatype[-1]), + chain_ids[chain_index[-1]], residue_index[-1])) + pdb_lines.append('ENDMDL') + pdb_lines.append('END') + + # Pad all lines to 80 characters. + pdb_lines = [line.ljust(80) for line in pdb_lines] + return '\n'.join(pdb_lines) + '\n' # Add terminating newline. + + +def ideal_atom_mask(prot: Protein) -> np.ndarray: + """Computes an ideal atom mask. + + `Protein.atom_mask` typically is defined according to the atoms that are + reported in the PDB. This function computes a mask according to heavy atoms + that should be present in the given sequence of amino acids. + + Args: + prot: `Protein` whose fields are `numpy.ndarray` objects. + + Returns: + An ideal atom mask. + """ + return residue_constants.STANDARD_ATOM_MASK[prot.aatype] + + +def from_prediction( + features: FeatureDict, + result: ModelOutput, + b_factors: Optional[np.ndarray] = None, + remove_leading_feature_dimension: bool = True) -> Protein: + """Assembles a protein from a prediction. + + Args: + features: Dictionary holding model inputs. + result: Dictionary holding model outputs. + b_factors: (Optional) B-factors to use for the protein. + remove_leading_feature_dimension: Whether to remove the leading dimension + of the `features` values. + + Returns: + A protein instance. + """ + fold_output = result['structure_module'] + + def _maybe_remove_leading_dim(arr: np.ndarray) -> np.ndarray: + return arr[0] if remove_leading_feature_dimension else arr + + if 'asym_id' in features: + chain_index = _maybe_remove_leading_dim(features['asym_id']) + else: + chain_index = np.zeros_like(_maybe_remove_leading_dim(features['aatype'])) + + if b_factors is None: + b_factors = np.zeros_like(fold_output['final_atom_mask']) + + return Protein( + aatype=_maybe_remove_leading_dim(features['aatype']), + atom_positions=fold_output['final_atom_positions'], + atom_mask=fold_output['final_atom_mask'], + residue_index=_maybe_remove_leading_dim(features['residue_index']) + 1, + chain_index=chain_index, + b_factors=b_factors) + + +def to_mmcif( + prot: Protein, + file_id: str, + model_type: str, +) -> str: + """Converts a `Protein` instance to an mmCIF string. + + WARNING 1: The _entity_poly_seq is filled with unknown (UNK) residues for any + missing residue indices in the range from min(1, min(residue_index)) to + max(residue_index). E.g. for a protein object with positions for residues + 2 (MET), 3 (LYS), 6 (GLY), this method would set the _entity_poly_seq to: + 1 UNK + 2 MET + 3 LYS + 4 UNK + 5 UNK + 6 GLY + This is done to preserve the residue numbering. + + WARNING 2: Converting ground truth mmCIF file to Protein and then back to + mmCIF using this method will convert all non-standard residue types to UNK. + If you need this behaviour, you need to store more mmCIF metadata in the + Protein object (e.g. all fields except for the _atom_site loop). + + WARNING 3: Converting ground truth mmCIF file to Protein and then back to + mmCIF using this method will not retain the original chain indices. + + WARNING 4: In case of multiple identical chains, they are assigned different + `_atom_site.label_entity_id` values. + + Args: + prot: A protein to convert to mmCIF string. + file_id: The file ID (usually the PDB ID) to be used in the mmCIF. + model_type: 'Multimer' or 'Monomer'. + + Returns: + A valid mmCIF string. + + Raises: + ValueError: If aminoacid types array contains entries with too many protein + types. + """ + atom_mask = prot.atom_mask + aatype = prot.aatype + atom_positions = prot.atom_positions + residue_index = prot.residue_index.astype(np.int32) + chain_index = prot.chain_index.astype(np.int32) + b_factors = prot.b_factors + + # Construct a mapping from chain integer indices to chain ID strings. + chain_ids = {} + # We count unknown residues as protein residues. + for entity_id in np.unique(chain_index): # np.unique gives sorted output. + chain_ids[entity_id] = _int_id_to_str_id(entity_id + 1) + + mmcif_dict = collections.defaultdict(list) + + mmcif_dict['data_'] = file_id.upper() + mmcif_dict['_entry.id'] = file_id.upper() + + label_asym_id_to_entity_id = {} + # Entity and chain information. + for entity_id, chain_id in chain_ids.items(): + # Add all chain information to the _struct_asym table. + label_asym_id_to_entity_id[str(chain_id)] = str(entity_id) + mmcif_dict['_struct_asym.id'].append(chain_id) + mmcif_dict['_struct_asym.entity_id'].append(str(entity_id)) + # Add information about the entity to the _entity_poly table. + mmcif_dict['_entity_poly.entity_id'].append(str(entity_id)) + mmcif_dict['_entity_poly.type'].append(residue_constants.PROTEIN_CHAIN) + mmcif_dict['_entity_poly.pdbx_strand_id'].append(chain_id) + # Generate the _entity table. + mmcif_dict['_entity.id'].append(str(entity_id)) + mmcif_dict['_entity.type'].append(residue_constants.POLYMER_CHAIN) + + # Add the residues to the _entity_poly_seq table. + for entity_id, (res_ids, aas) in _get_entity_poly_seq( + aatype, residue_index, chain_index + ).items(): + for res_id, aa in zip(res_ids, aas): + mmcif_dict['_entity_poly_seq.entity_id'].append(str(entity_id)) + mmcif_dict['_entity_poly_seq.num'].append(str(res_id)) + mmcif_dict['_entity_poly_seq.mon_id'].append( + residue_constants.resnames[aa] + ) + + # Populate the chem comp table. + for chem_type, chem_comp in _CHEM_COMP.items(): + for chem_id, chem_name in chem_comp: + mmcif_dict['_chem_comp.id'].append(chem_id) + mmcif_dict['_chem_comp.type'].append(chem_type) + mmcif_dict['_chem_comp.name'].append(chem_name) + + # Add all atom sites. + atom_index = 1 + for i in range(aatype.shape[0]): + res_name_3 = residue_constants.resnames[aatype[i]] + if aatype[i] <= len(residue_constants.restypes): + atom_names = residue_constants.atom_types + else: + raise ValueError( + 'Amino acid types array contains entries with too many protein types.' + ) + for atom_name, pos, mask, b_factor in zip( + atom_names, atom_positions[i], atom_mask[i], b_factors[i] + ): + if mask < 0.5: + continue + type_symbol = residue_constants.atom_id_to_type(atom_name) + + mmcif_dict['_atom_site.group_PDB'].append('ATOM') + mmcif_dict['_atom_site.id'].append(str(atom_index)) + mmcif_dict['_atom_site.type_symbol'].append(type_symbol) + mmcif_dict['_atom_site.label_atom_id'].append(atom_name) + mmcif_dict['_atom_site.label_alt_id'].append('.') + mmcif_dict['_atom_site.label_comp_id'].append(res_name_3) + mmcif_dict['_atom_site.label_asym_id'].append(chain_ids[chain_index[i]]) + mmcif_dict['_atom_site.label_entity_id'].append( + label_asym_id_to_entity_id[chain_ids[chain_index[i]]] + ) + mmcif_dict['_atom_site.label_seq_id'].append(str(residue_index[i])) + mmcif_dict['_atom_site.pdbx_PDB_ins_code'].append('.') + mmcif_dict['_atom_site.Cartn_x'].append(f'{pos[0]:.3f}') + mmcif_dict['_atom_site.Cartn_y'].append(f'{pos[1]:.3f}') + mmcif_dict['_atom_site.Cartn_z'].append(f'{pos[2]:.3f}') + mmcif_dict['_atom_site.occupancy'].append('1.00') + mmcif_dict['_atom_site.B_iso_or_equiv'].append(f'{b_factor:.2f}') + mmcif_dict['_atom_site.auth_seq_id'].append(str(residue_index[i])) + mmcif_dict['_atom_site.auth_asym_id'].append(chain_ids[chain_index[i]]) + mmcif_dict['_atom_site.pdbx_PDB_model_num'].append('1') + + atom_index += 1 + + metadata_dict = mmcif_metadata.add_metadata_to_mmcif(mmcif_dict, model_type) + mmcif_dict.update(metadata_dict) + + return _create_mmcif_string(mmcif_dict) + + +@functools.lru_cache(maxsize=256) +def _int_id_to_str_id(num: int) -> str: + """Encodes a number as a string, using reverse spreadsheet style naming. + + Args: + num: A positive integer. + + Returns: + A string that encodes the positive integer using reverse spreadsheet style, + naming e.g. 1 = A, 2 = B, ..., 27 = AA, 28 = BA, 29 = CA, ... This is the + usual way to encode chain IDs in mmCIF files. + """ + if num <= 0: + raise ValueError(f'Only positive integers allowed, got {num}.') + + num = num - 1 # 1-based indexing. + output = [] + while num >= 0: + output.append(chr(num % 26 + ord('A'))) + num = num // 26 - 1 + return ''.join(output) + + +def _get_entity_poly_seq( + aatypes: np.ndarray, residue_indices: np.ndarray, chain_indices: np.ndarray +) -> Dict[int, Tuple[List[int], List[int]]]: + """Constructs gapless residue index and aatype lists for each chain. + + Args: + aatypes: A numpy array with aatypes. + residue_indices: A numpy array with residue indices. + chain_indices: A numpy array with chain indices. + + Returns: + A dictionary mapping chain indices to a tuple with list of residue indices + and a list of aatypes. Missing residues are filled with UNK residue type. + """ + if ( + aatypes.shape[0] != residue_indices.shape[0] + or aatypes.shape[0] != chain_indices.shape[0] + ): + raise ValueError( + 'aatypes, residue_indices, chain_indices must have the same length.' + ) + + # Group the present residues by chain index. + present = collections.defaultdict(list) + for chain_id, res_id, aa in zip(chain_indices, residue_indices, aatypes): + present[chain_id].append((res_id, aa)) + + # Add any missing residues (from 1 to the first residue and for any gaps). + entity_poly_seq = {} + for chain_id, present_residues in present.items(): + present_residue_indices = set([x[0] for x in present_residues]) + min_res_id = min(present_residue_indices) # Could be negative. + max_res_id = max(present_residue_indices) + + new_residue_indices = [] + new_aatypes = [] + present_index = 0 + for i in range(min(1, min_res_id), max_res_id + 1): + new_residue_indices.append(i) + if i in present_residue_indices: + new_aatypes.append(present_residues[present_index][1]) + present_index += 1 + else: + new_aatypes.append(20) # Unknown amino acid type. + entity_poly_seq[chain_id] = (new_residue_indices, new_aatypes) + return entity_poly_seq + + +def _create_mmcif_string(mmcif_dict: Dict[str, Any]) -> str: + """Converts mmCIF dictionary into mmCIF string.""" + mmcifio = MMCIFIO() + mmcifio.set_dict(mmcif_dict) + + with io.StringIO() as file_handle: + mmcifio.save(file_handle) + return file_handle.getvalue() diff --git a/alphafold/common/protein_test.py b/alphafold/common/protein_test.py new file mode 100644 index 0000000000000000000000000000000000000000..279566b8606983341861c8ee725b9387b8e00bb1 --- /dev/null +++ b/alphafold/common/protein_test.py @@ -0,0 +1,153 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for protein.""" + +import os + +from absl.testing import absltest +from absl.testing import parameterized +from alphafold.common import protein +from alphafold.common import residue_constants +import numpy as np +# Internal import (7716). + +TEST_DATA_DIR = 'alphafold/common/testdata/' + + +class ProteinTest(parameterized.TestCase): + + def _check_shapes(self, prot, num_res): + """Check that the processed shapes are correct.""" + num_atoms = residue_constants.atom_type_num + self.assertEqual((num_res, num_atoms, 3), prot.atom_positions.shape) + self.assertEqual((num_res,), prot.aatype.shape) + self.assertEqual((num_res, num_atoms), prot.atom_mask.shape) + self.assertEqual((num_res,), prot.residue_index.shape) + self.assertEqual((num_res,), prot.chain_index.shape) + self.assertEqual((num_res, num_atoms), prot.b_factors.shape) + + @parameterized.named_parameters( + dict(testcase_name='chain_A', + pdb_file='2rbg.pdb', chain_id='A', num_res=282, num_chains=1), + dict(testcase_name='chain_B', + pdb_file='2rbg.pdb', chain_id='B', num_res=282, num_chains=1), + dict(testcase_name='multichain', + pdb_file='2rbg.pdb', chain_id=None, num_res=564, num_chains=2)) + def test_from_pdb_str(self, pdb_file, chain_id, num_res, num_chains): + pdb_file = os.path.join(absltest.get_default_test_srcdir(), TEST_DATA_DIR, + pdb_file) + with open(pdb_file) as f: + pdb_string = f.read() + prot = protein.from_pdb_string(pdb_string, chain_id) + self._check_shapes(prot, num_res) + self.assertGreaterEqual(prot.aatype.min(), 0) + # Allow equal since unknown restypes have index equal to restype_num. + self.assertLessEqual(prot.aatype.max(), residue_constants.restype_num) + self.assertLen(np.unique(prot.chain_index), num_chains) + + def test_to_pdb(self): + with open( + os.path.join(absltest.get_default_test_srcdir(), TEST_DATA_DIR, + '2rbg.pdb')) as f: + pdb_string = f.read() + prot = protein.from_pdb_string(pdb_string) + pdb_string_reconstr = protein.to_pdb(prot) + + for line in pdb_string_reconstr.splitlines(): + self.assertLen(line, 80) + + prot_reconstr = protein.from_pdb_string(pdb_string_reconstr) + + np.testing.assert_array_equal(prot_reconstr.aatype, prot.aatype) + np.testing.assert_array_almost_equal( + prot_reconstr.atom_positions, prot.atom_positions) + np.testing.assert_array_almost_equal( + prot_reconstr.atom_mask, prot.atom_mask) + np.testing.assert_array_equal( + prot_reconstr.residue_index, prot.residue_index) + np.testing.assert_array_equal( + prot_reconstr.chain_index, prot.chain_index) + np.testing.assert_array_almost_equal( + prot_reconstr.b_factors, prot.b_factors) + + @parameterized.named_parameters( + dict( + testcase_name='glucagon', + pdb_file='glucagon.pdb', + model_type='Monomer', + ), + dict(testcase_name='7bui', pdb_file='5nmu.pdb', model_type='Multimer'), + ) + def test_to_mmcif(self, pdb_file, model_type): + with open( + os.path.join( + absltest.get_default_test_srcdir(), TEST_DATA_DIR, pdb_file + ) + ) as f: + pdb_string = f.read() + prot = protein.from_pdb_string(pdb_string) + + file_id = 'test' + mmcif_string = protein.to_mmcif(prot, file_id, model_type) + prot_reconstr = protein.from_mmcif_string(mmcif_string) + + np.testing.assert_array_equal(prot_reconstr.aatype, prot.aatype) + np.testing.assert_array_almost_equal( + prot_reconstr.atom_positions, prot.atom_positions + ) + np.testing.assert_array_almost_equal( + prot_reconstr.atom_mask, prot.atom_mask + ) + np.testing.assert_array_equal( + prot_reconstr.residue_index, prot.residue_index + ) + np.testing.assert_array_equal(prot_reconstr.chain_index, prot.chain_index) + np.testing.assert_array_almost_equal( + prot_reconstr.b_factors, prot.b_factors + ) + + def test_ideal_atom_mask(self): + with open( + os.path.join( + absltest.get_default_test_srcdir(), TEST_DATA_DIR, '2rbg.pdb' + ) + ) as f: + pdb_string = f.read() + prot = protein.from_pdb_string(pdb_string) + ideal_mask = protein.ideal_atom_mask(prot) + non_ideal_residues = set([102] + list(range(127, 286))) + for i, (res, atom_mask) in enumerate( + zip(prot.residue_index, prot.atom_mask) + ): + if res in non_ideal_residues: + self.assertFalse(np.all(atom_mask == ideal_mask[i]), msg=f'{res}') + else: + self.assertTrue(np.all(atom_mask == ideal_mask[i]), msg=f'{res}') + + def test_too_many_chains(self): + num_res = protein.PDB_MAX_CHAINS + 1 + num_atom_type = residue_constants.atom_type_num + with self.assertRaises(ValueError): + _ = protein.Protein( + atom_positions=np.random.random([num_res, num_atom_type, 3]), + aatype=np.random.randint(0, 21, [num_res]), + atom_mask=np.random.randint(0, 2, [num_res]).astype(np.float32), + residue_index=np.arange(1, num_res+1), + chain_index=np.arange(num_res), + b_factors=np.random.uniform(1, 100, [num_res])) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/common/residue_constants.py b/alphafold/common/residue_constants.py new file mode 100644 index 0000000000000000000000000000000000000000..826629e218956c4c55a4198228a1f54df4c3c78e --- /dev/null +++ b/alphafold/common/residue_constants.py @@ -0,0 +1,927 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Constants used in AlphaFold.""" + +import collections +import functools +import os +from typing import Final, List, Mapping, Tuple + +import numpy as np +import tree + +# Internal import (35fd). + + +# Distance from one CA to next CA [trans configuration: omega = 180]. +ca_ca = 3.80209737096 + +# Format: The list for each AA type contains chi1, chi2, chi3, chi4 in +# this order (or a relevant subset from chi1 onwards). ALA and GLY don't have +# chi angles so their chi angle lists are empty. +chi_angles_atoms = { + 'ALA': [], + # Chi5 in arginine is always 0 +- 5 degrees, so ignore it. + 'ARG': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD'], + ['CB', 'CG', 'CD', 'NE'], ['CG', 'CD', 'NE', 'CZ']], + 'ASN': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'OD1']], + 'ASP': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'OD1']], + 'CYS': [['N', 'CA', 'CB', 'SG']], + 'GLN': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD'], + ['CB', 'CG', 'CD', 'OE1']], + 'GLU': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD'], + ['CB', 'CG', 'CD', 'OE1']], + 'GLY': [], + 'HIS': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'ND1']], + 'ILE': [['N', 'CA', 'CB', 'CG1'], ['CA', 'CB', 'CG1', 'CD1']], + 'LEU': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD1']], + 'LYS': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD'], + ['CB', 'CG', 'CD', 'CE'], ['CG', 'CD', 'CE', 'NZ']], + 'MET': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'SD'], + ['CB', 'CG', 'SD', 'CE']], + 'PHE': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD1']], + 'PRO': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD']], + 'SER': [['N', 'CA', 'CB', 'OG']], + 'THR': [['N', 'CA', 'CB', 'OG1']], + 'TRP': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD1']], + 'TYR': [['N', 'CA', 'CB', 'CG'], ['CA', 'CB', 'CG', 'CD1']], + 'VAL': [['N', 'CA', 'CB', 'CG1']], +} + +# If chi angles given in fixed-length array, this matrix determines how to mask +# them for each AA type. The order is as per restype_order (see below). +chi_angles_mask = [ + [0.0, 0.0, 0.0, 0.0], # ALA + [1.0, 1.0, 1.0, 1.0], # ARG + [1.0, 1.0, 0.0, 0.0], # ASN + [1.0, 1.0, 0.0, 0.0], # ASP + [1.0, 0.0, 0.0, 0.0], # CYS + [1.0, 1.0, 1.0, 0.0], # GLN + [1.0, 1.0, 1.0, 0.0], # GLU + [0.0, 0.0, 0.0, 0.0], # GLY + [1.0, 1.0, 0.0, 0.0], # HIS + [1.0, 1.0, 0.0, 0.0], # ILE + [1.0, 1.0, 0.0, 0.0], # LEU + [1.0, 1.0, 1.0, 1.0], # LYS + [1.0, 1.0, 1.0, 0.0], # MET + [1.0, 1.0, 0.0, 0.0], # PHE + [1.0, 1.0, 0.0, 0.0], # PRO + [1.0, 0.0, 0.0, 0.0], # SER + [1.0, 0.0, 0.0, 0.0], # THR + [1.0, 1.0, 0.0, 0.0], # TRP + [1.0, 1.0, 0.0, 0.0], # TYR + [1.0, 0.0, 0.0, 0.0], # VAL +] + +# The following chi angles are pi periodic: they can be rotated by a multiple +# of pi without affecting the structure. +chi_pi_periodic = [ + [0.0, 0.0, 0.0, 0.0], # ALA + [0.0, 0.0, 0.0, 0.0], # ARG + [0.0, 0.0, 0.0, 0.0], # ASN + [0.0, 1.0, 0.0, 0.0], # ASP + [0.0, 0.0, 0.0, 0.0], # CYS + [0.0, 0.0, 0.0, 0.0], # GLN + [0.0, 0.0, 1.0, 0.0], # GLU + [0.0, 0.0, 0.0, 0.0], # GLY + [0.0, 0.0, 0.0, 0.0], # HIS + [0.0, 0.0, 0.0, 0.0], # ILE + [0.0, 0.0, 0.0, 0.0], # LEU + [0.0, 0.0, 0.0, 0.0], # LYS + [0.0, 0.0, 0.0, 0.0], # MET + [0.0, 1.0, 0.0, 0.0], # PHE + [0.0, 0.0, 0.0, 0.0], # PRO + [0.0, 0.0, 0.0, 0.0], # SER + [0.0, 0.0, 0.0, 0.0], # THR + [0.0, 0.0, 0.0, 0.0], # TRP + [0.0, 1.0, 0.0, 0.0], # TYR + [0.0, 0.0, 0.0, 0.0], # VAL + [0.0, 0.0, 0.0, 0.0], # UNK +] + +# Atoms positions relative to the 8 rigid groups, defined by the pre-omega, phi, +# psi and chi angles: +# 0: 'backbone group', +# 1: 'pre-omega-group', (empty) +# 2: 'phi-group', (currently empty, because it defines only hydrogens) +# 3: 'psi-group', +# 4,5,6,7: 'chi1,2,3,4-group' +# The atom positions are relative to the axis-end-atom of the corresponding +# rotation axis. The x-axis is in direction of the rotation axis, and the y-axis +# is defined such that the dihedral-angle-defining atom (the last entry in +# chi_angles_atoms above) is in the xy-plane (with a positive y-coordinate). +# format: [atomname, group_idx, rel_position] +rigid_group_atom_positions = { + 'ALA': [ + ['N', 0, (-0.525, 1.363, 0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.526, -0.000, -0.000)], + ['CB', 0, (-0.529, -0.774, -1.205)], + ['O', 3, (0.627, 1.062, 0.000)], + ], + 'ARG': [ + ['N', 0, (-0.524, 1.362, -0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.525, -0.000, -0.000)], + ['CB', 0, (-0.524, -0.778, -1.209)], + ['O', 3, (0.626, 1.062, 0.000)], + ['CG', 4, (0.616, 1.390, -0.000)], + ['CD', 5, (0.564, 1.414, 0.000)], + ['NE', 6, (0.539, 1.357, -0.000)], + ['NH1', 7, (0.206, 2.301, 0.000)], + ['NH2', 7, (2.078, 0.978, -0.000)], + ['CZ', 7, (0.758, 1.093, -0.000)], + ], + 'ASN': [ + ['N', 0, (-0.536, 1.357, 0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.526, -0.000, -0.000)], + ['CB', 0, (-0.531, -0.787, -1.200)], + ['O', 3, (0.625, 1.062, 0.000)], + ['CG', 4, (0.584, 1.399, 0.000)], + ['ND2', 5, (0.593, -1.188, 0.001)], + ['OD1', 5, (0.633, 1.059, 0.000)], + ], + 'ASP': [ + ['N', 0, (-0.525, 1.362, -0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.527, 0.000, -0.000)], + ['CB', 0, (-0.526, -0.778, -1.208)], + ['O', 3, (0.626, 1.062, -0.000)], + ['CG', 4, (0.593, 1.398, -0.000)], + ['OD1', 5, (0.610, 1.091, 0.000)], + ['OD2', 5, (0.592, -1.101, -0.003)], + ], + 'CYS': [ + ['N', 0, (-0.522, 1.362, -0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.524, 0.000, 0.000)], + ['CB', 0, (-0.519, -0.773, -1.212)], + ['O', 3, (0.625, 1.062, -0.000)], + ['SG', 4, (0.728, 1.653, 0.000)], + ], + 'GLN': [ + ['N', 0, (-0.526, 1.361, -0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.526, 0.000, 0.000)], + ['CB', 0, (-0.525, -0.779, -1.207)], + ['O', 3, (0.626, 1.062, -0.000)], + ['CG', 4, (0.615, 1.393, 0.000)], + ['CD', 5, (0.587, 1.399, -0.000)], + ['NE2', 6, (0.593, -1.189, -0.001)], + ['OE1', 6, (0.634, 1.060, 0.000)], + ], + 'GLU': [ + ['N', 0, (-0.528, 1.361, 0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.526, -0.000, -0.000)], + ['CB', 0, (-0.526, -0.781, -1.207)], + ['O', 3, (0.626, 1.062, 0.000)], + ['CG', 4, (0.615, 1.392, 0.000)], + ['CD', 5, (0.600, 1.397, 0.000)], + ['OE1', 6, (0.607, 1.095, -0.000)], + ['OE2', 6, (0.589, -1.104, -0.001)], + ], + 'GLY': [ + ['N', 0, (-0.572, 1.337, 0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.517, -0.000, -0.000)], + ['O', 3, (0.626, 1.062, -0.000)], + ], + 'HIS': [ + ['N', 0, (-0.527, 1.360, 0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.525, 0.000, 0.000)], + ['CB', 0, (-0.525, -0.778, -1.208)], + ['O', 3, (0.625, 1.063, 0.000)], + ['CG', 4, (0.600, 1.370, -0.000)], + ['CD2', 5, (0.889, -1.021, 0.003)], + ['ND1', 5, (0.744, 1.160, -0.000)], + ['CE1', 5, (2.030, 0.851, 0.002)], + ['NE2', 5, (2.145, -0.466, 0.004)], + ], + 'ILE': [ + ['N', 0, (-0.493, 1.373, -0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.527, -0.000, -0.000)], + ['CB', 0, (-0.536, -0.793, -1.213)], + ['O', 3, (0.627, 1.062, -0.000)], + ['CG1', 4, (0.534, 1.437, -0.000)], + ['CG2', 4, (0.540, -0.785, -1.199)], + ['CD1', 5, (0.619, 1.391, 0.000)], + ], + 'LEU': [ + ['N', 0, (-0.520, 1.363, 0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.525, -0.000, -0.000)], + ['CB', 0, (-0.522, -0.773, -1.214)], + ['O', 3, (0.625, 1.063, -0.000)], + ['CG', 4, (0.678, 1.371, 0.000)], + ['CD1', 5, (0.530, 1.430, -0.000)], + ['CD2', 5, (0.535, -0.774, 1.200)], + ], + 'LYS': [ + ['N', 0, (-0.526, 1.362, -0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.526, 0.000, 0.000)], + ['CB', 0, (-0.524, -0.778, -1.208)], + ['O', 3, (0.626, 1.062, -0.000)], + ['CG', 4, (0.619, 1.390, 0.000)], + ['CD', 5, (0.559, 1.417, 0.000)], + ['CE', 6, (0.560, 1.416, 0.000)], + ['NZ', 7, (0.554, 1.387, 0.000)], + ], + 'MET': [ + ['N', 0, (-0.521, 1.364, -0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.525, 0.000, 0.000)], + ['CB', 0, (-0.523, -0.776, -1.210)], + ['O', 3, (0.625, 1.062, -0.000)], + ['CG', 4, (0.613, 1.391, -0.000)], + ['SD', 5, (0.703, 1.695, 0.000)], + ['CE', 6, (0.320, 1.786, -0.000)], + ], + 'PHE': [ + ['N', 0, (-0.518, 1.363, 0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.524, 0.000, -0.000)], + ['CB', 0, (-0.525, -0.776, -1.212)], + ['O', 3, (0.626, 1.062, -0.000)], + ['CG', 4, (0.607, 1.377, 0.000)], + ['CD1', 5, (0.709, 1.195, -0.000)], + ['CD2', 5, (0.706, -1.196, 0.000)], + ['CE1', 5, (2.102, 1.198, -0.000)], + ['CE2', 5, (2.098, -1.201, -0.000)], + ['CZ', 5, (2.794, -0.003, -0.001)], + ], + 'PRO': [ + ['N', 0, (-0.566, 1.351, -0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.527, -0.000, 0.000)], + ['CB', 0, (-0.546, -0.611, -1.293)], + ['O', 3, (0.621, 1.066, 0.000)], + ['CG', 4, (0.382, 1.445, 0.0)], + # ['CD', 5, (0.427, 1.440, 0.0)], + ['CD', 5, (0.477, 1.424, 0.0)], # manually made angle 2 degrees larger + ], + 'SER': [ + ['N', 0, (-0.529, 1.360, -0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.525, -0.000, -0.000)], + ['CB', 0, (-0.518, -0.777, -1.211)], + ['O', 3, (0.626, 1.062, -0.000)], + ['OG', 4, (0.503, 1.325, 0.000)], + ], + 'THR': [ + ['N', 0, (-0.517, 1.364, 0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.526, 0.000, -0.000)], + ['CB', 0, (-0.516, -0.793, -1.215)], + ['O', 3, (0.626, 1.062, 0.000)], + ['CG2', 4, (0.550, -0.718, -1.228)], + ['OG1', 4, (0.472, 1.353, 0.000)], + ], + 'TRP': [ + ['N', 0, (-0.521, 1.363, 0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.525, -0.000, 0.000)], + ['CB', 0, (-0.523, -0.776, -1.212)], + ['O', 3, (0.627, 1.062, 0.000)], + ['CG', 4, (0.609, 1.370, -0.000)], + ['CD1', 5, (0.824, 1.091, 0.000)], + ['CD2', 5, (0.854, -1.148, -0.005)], + ['CE2', 5, (2.186, -0.678, -0.007)], + ['CE3', 5, (0.622, -2.530, -0.007)], + ['NE1', 5, (2.140, 0.690, -0.004)], + ['CH2', 5, (3.028, -2.890, -0.013)], + ['CZ2', 5, (3.283, -1.543, -0.011)], + ['CZ3', 5, (1.715, -3.389, -0.011)], + ], + 'TYR': [ + ['N', 0, (-0.522, 1.362, 0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.524, -0.000, -0.000)], + ['CB', 0, (-0.522, -0.776, -1.213)], + ['O', 3, (0.627, 1.062, -0.000)], + ['CG', 4, (0.607, 1.382, -0.000)], + ['CD1', 5, (0.716, 1.195, -0.000)], + ['CD2', 5, (0.713, -1.194, -0.001)], + ['CE1', 5, (2.107, 1.200, -0.002)], + ['CE2', 5, (2.104, -1.201, -0.003)], + ['OH', 5, (4.168, -0.002, -0.005)], + ['CZ', 5, (2.791, -0.001, -0.003)], + ], + 'VAL': [ + ['N', 0, (-0.494, 1.373, -0.000)], + ['CA', 0, (0.000, 0.000, 0.000)], + ['C', 0, (1.527, -0.000, -0.000)], + ['CB', 0, (-0.533, -0.795, -1.213)], + ['O', 3, (0.627, 1.062, -0.000)], + ['CG1', 4, (0.540, 1.429, -0.000)], + ['CG2', 4, (0.533, -0.776, 1.203)], + ], +} + +# A list of atoms (excluding hydrogen) for each AA type. PDB naming convention. +residue_atoms = { + 'ALA': ['C', 'CA', 'CB', 'N', 'O'], + 'ARG': ['C', 'CA', 'CB', 'CG', 'CD', 'CZ', 'N', 'NE', 'O', 'NH1', 'NH2'], + 'ASP': ['C', 'CA', 'CB', 'CG', 'N', 'O', 'OD1', 'OD2'], + 'ASN': ['C', 'CA', 'CB', 'CG', 'N', 'ND2', 'O', 'OD1'], + 'CYS': ['C', 'CA', 'CB', 'N', 'O', 'SG'], + 'GLU': ['C', 'CA', 'CB', 'CG', 'CD', 'N', 'O', 'OE1', 'OE2'], + 'GLN': ['C', 'CA', 'CB', 'CG', 'CD', 'N', 'NE2', 'O', 'OE1'], + 'GLY': ['C', 'CA', 'N', 'O'], + 'HIS': ['C', 'CA', 'CB', 'CG', 'CD2', 'CE1', 'N', 'ND1', 'NE2', 'O'], + 'ILE': ['C', 'CA', 'CB', 'CG1', 'CG2', 'CD1', 'N', 'O'], + 'LEU': ['C', 'CA', 'CB', 'CG', 'CD1', 'CD2', 'N', 'O'], + 'LYS': ['C', 'CA', 'CB', 'CG', 'CD', 'CE', 'N', 'NZ', 'O'], + 'MET': ['C', 'CA', 'CB', 'CG', 'CE', 'N', 'O', 'SD'], + 'PHE': ['C', 'CA', 'CB', 'CG', 'CD1', 'CD2', 'CE1', 'CE2', 'CZ', 'N', 'O'], + 'PRO': ['C', 'CA', 'CB', 'CG', 'CD', 'N', 'O'], + 'SER': ['C', 'CA', 'CB', 'N', 'O', 'OG'], + 'THR': ['C', 'CA', 'CB', 'CG2', 'N', 'O', 'OG1'], + 'TRP': ['C', 'CA', 'CB', 'CG', 'CD1', 'CD2', 'CE2', 'CE3', 'CZ2', 'CZ3', + 'CH2', 'N', 'NE1', 'O'], + 'TYR': ['C', 'CA', 'CB', 'CG', 'CD1', 'CD2', 'CE1', 'CE2', 'CZ', 'N', 'O', + 'OH'], + 'VAL': ['C', 'CA', 'CB', 'CG1', 'CG2', 'N', 'O'] +} + +# Naming swaps for ambiguous atom names. +# Due to symmetries in the amino acids the naming of atoms is ambiguous in +# 4 of the 20 amino acids. +# (The LDDT paper lists 7 amino acids as ambiguous, but the naming ambiguities +# in LEU, VAL and ARG can be resolved by using the 3d constellations of +# the 'ambiguous' atoms and their neighbours) +residue_atom_renaming_swaps = { + 'ASP': {'OD1': 'OD2'}, + 'GLU': {'OE1': 'OE2'}, + 'PHE': {'CD1': 'CD2', 'CE1': 'CE2'}, + 'TYR': {'CD1': 'CD2', 'CE1': 'CE2'}, +} + +# Van der Waals radii [Angstroem] of the atoms (from Wikipedia) +van_der_waals_radius = { + 'C': 1.7, + 'N': 1.55, + 'O': 1.52, + 'S': 1.8, +} + +Bond = collections.namedtuple( + 'Bond', ['atom1_name', 'atom2_name', 'length', 'stddev']) +BondAngle = collections.namedtuple( + 'BondAngle', + ['atom1_name', 'atom2_name', 'atom3name', 'angle_rad', 'stddev']) + + +@functools.lru_cache(maxsize=None) +def load_stereo_chemical_props() -> Tuple[Mapping[str, List[Bond]], + Mapping[str, List[Bond]], + Mapping[str, List[BondAngle]]]: + """Load stereo_chemical_props.txt into a nice structure. + + Load literature values for bond lengths and bond angles and translate + bond angles into the length of the opposite edge of the triangle + ("residue_virtual_bonds"). + + Returns: + residue_bonds: Dict that maps resname -> list of Bond tuples. + residue_virtual_bonds: Dict that maps resname -> list of Bond tuples. + residue_bond_angles: Dict that maps resname -> list of BondAngle tuples. + """ + stereo_chemical_props_path = os.path.join( + os.path.dirname(os.path.abspath(__file__)), 'stereo_chemical_props.txt' + ) + with open(stereo_chemical_props_path, 'rt') as f: + stereo_chemical_props = f.read() + lines_iter = iter(stereo_chemical_props.splitlines()) + # Load bond lengths. + residue_bonds = {} + next(lines_iter) # Skip header line. + for line in lines_iter: + if line.strip() == '-': + break + bond, resname, length, stddev = line.split() + atom1, atom2 = bond.split('-') + if resname not in residue_bonds: + residue_bonds[resname] = [] + residue_bonds[resname].append( + Bond(atom1, atom2, float(length), float(stddev))) + residue_bonds['UNK'] = [] + + # Load bond angles. + residue_bond_angles = {} + next(lines_iter) # Skip empty line. + next(lines_iter) # Skip header line. + for line in lines_iter: + if line.strip() == '-': + break + bond, resname, angle_degree, stddev_degree = line.split() + atom1, atom2, atom3 = bond.split('-') + if resname not in residue_bond_angles: + residue_bond_angles[resname] = [] + residue_bond_angles[resname].append( + BondAngle(atom1, atom2, atom3, + float(angle_degree) / 180. * np.pi, + float(stddev_degree) / 180. * np.pi)) + residue_bond_angles['UNK'] = [] + + def make_bond_key(atom1_name, atom2_name): + """Unique key to lookup bonds.""" + return '-'.join(sorted([atom1_name, atom2_name])) + + # Translate bond angles into distances ("virtual bonds"). + residue_virtual_bonds = {} + for resname, bond_angles in residue_bond_angles.items(): + # Create a fast lookup dict for bond lengths. + bond_cache = {} + for b in residue_bonds[resname]: + bond_cache[make_bond_key(b.atom1_name, b.atom2_name)] = b + residue_virtual_bonds[resname] = [] + for ba in bond_angles: + bond1 = bond_cache[make_bond_key(ba.atom1_name, ba.atom2_name)] + bond2 = bond_cache[make_bond_key(ba.atom2_name, ba.atom3name)] + + # Compute distance between atom1 and atom3 using the law of cosines + # c^2 = a^2 + b^2 - 2ab*cos(gamma). + gamma = ba.angle_rad + length = np.sqrt(bond1.length**2 + bond2.length**2 + - 2 * bond1.length * bond2.length * np.cos(gamma)) + + # Propagation of uncertainty assuming uncorrelated errors. + dl_outer = 0.5 / length + dl_dgamma = (2 * bond1.length * bond2.length * np.sin(gamma)) * dl_outer + dl_db1 = (2 * bond1.length - 2 * bond2.length * np.cos(gamma)) * dl_outer + dl_db2 = (2 * bond2.length - 2 * bond1.length * np.cos(gamma)) * dl_outer + stddev = np.sqrt((dl_dgamma * ba.stddev)**2 + + (dl_db1 * bond1.stddev)**2 + + (dl_db2 * bond2.stddev)**2) + residue_virtual_bonds[resname].append( + Bond(ba.atom1_name, ba.atom3name, length, stddev)) + + return (residue_bonds, + residue_virtual_bonds, + residue_bond_angles) + + +# Between-residue bond lengths for general bonds (first element) and for Proline +# (second element). +between_res_bond_length_c_n = [1.329, 1.341] +between_res_bond_length_stddev_c_n = [0.014, 0.016] + +# Between-residue cos_angles. +between_res_cos_angles_c_n_ca = [-0.5203, 0.0353] # degrees: 121.352 +- 2.315 +between_res_cos_angles_ca_c_n = [-0.4473, 0.0311] # degrees: 116.568 +- 1.995 + +# This mapping is used when we need to store atom data in a format that requires +# fixed atom data size for every residue (e.g. a numpy array). +atom_types = [ + 'N', 'CA', 'C', 'CB', 'O', 'CG', 'CG1', 'CG2', 'OG', 'OG1', 'SG', 'CD', + 'CD1', 'CD2', 'ND1', 'ND2', 'OD1', 'OD2', 'SD', 'CE', 'CE1', 'CE2', 'CE3', + 'NE', 'NE1', 'NE2', 'OE1', 'OE2', 'CH2', 'NH1', 'NH2', 'OH', 'CZ', 'CZ2', + 'CZ3', 'NZ', 'OXT' +] +atom_order = {atom_type: i for i, atom_type in enumerate(atom_types)} +atom_type_num = len(atom_types) # := 37. + + +# A compact atom encoding with 14 columns +# pylint: disable=line-too-long +# pylint: disable=bad-whitespace +restype_name_to_atom14_names = { + 'ALA': ['N', 'CA', 'C', 'O', 'CB', '', '', '', '', '', '', '', '', ''], + 'ARG': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD', 'NE', 'CZ', 'NH1', 'NH2', '', '', ''], + 'ASN': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'OD1', 'ND2', '', '', '', '', '', ''], + 'ASP': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'OD1', 'OD2', '', '', '', '', '', ''], + 'CYS': ['N', 'CA', 'C', 'O', 'CB', 'SG', '', '', '', '', '', '', '', ''], + 'GLN': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD', 'OE1', 'NE2', '', '', '', '', ''], + 'GLU': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD', 'OE1', 'OE2', '', '', '', '', ''], + 'GLY': ['N', 'CA', 'C', 'O', '', '', '', '', '', '', '', '', '', ''], + 'HIS': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'ND1', 'CD2', 'CE1', 'NE2', '', '', '', ''], + 'ILE': ['N', 'CA', 'C', 'O', 'CB', 'CG1', 'CG2', 'CD1', '', '', '', '', '', ''], + 'LEU': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD1', 'CD2', '', '', '', '', '', ''], + 'LYS': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD', 'CE', 'NZ', '', '', '', '', ''], + 'MET': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'SD', 'CE', '', '', '', '', '', ''], + 'PHE': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD1', 'CD2', 'CE1', 'CE2', 'CZ', '', '', ''], + 'PRO': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD', '', '', '', '', '', '', ''], + 'SER': ['N', 'CA', 'C', 'O', 'CB', 'OG', '', '', '', '', '', '', '', ''], + 'THR': ['N', 'CA', 'C', 'O', 'CB', 'OG1', 'CG2', '', '', '', '', '', '', ''], + 'TRP': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD1', 'CD2', 'NE1', 'CE2', 'CE3', 'CZ2', 'CZ3', 'CH2'], + 'TYR': ['N', 'CA', 'C', 'O', 'CB', 'CG', 'CD1', 'CD2', 'CE1', 'CE2', 'CZ', 'OH', '', ''], + 'VAL': ['N', 'CA', 'C', 'O', 'CB', 'CG1', 'CG2', '', '', '', '', '', '', ''], + 'UNK': ['', '', '', '', '', '', '', '', '', '', '', '', '', ''], + +} +# pylint: enable=line-too-long +# pylint: enable=bad-whitespace + + +# This is the standard residue order when coding AA type as a number. +# Reproduce it by taking 3-letter AA codes and sorting them alphabetically. +restypes = [ + 'A', 'R', 'N', 'D', 'C', 'Q', 'E', 'G', 'H', 'I', 'L', 'K', 'M', 'F', 'P', + 'S', 'T', 'W', 'Y', 'V' +] +restype_order = {restype: i for i, restype in enumerate(restypes)} +restype_num = len(restypes) # := 20. +unk_restype_index = restype_num # Catch-all index for unknown restypes. + +restypes_with_x = restypes + ['X'] +restype_order_with_x = {restype: i for i, restype in enumerate(restypes_with_x)} + + +def sequence_to_onehot( + sequence: str, + mapping: Mapping[str, int], + map_unknown_to_x: bool = False) -> np.ndarray: + """Maps the given sequence into a one-hot encoded matrix. + + Args: + sequence: An amino acid sequence. + mapping: A dictionary mapping amino acids to integers. + map_unknown_to_x: If True, any amino acid that is not in the mapping will be + mapped to the unknown amino acid 'X'. If the mapping doesn't contain + amino acid 'X', an error will be thrown. If False, any amino acid not in + the mapping will throw an error. + + Returns: + A numpy array of shape (seq_len, num_unique_aas) with one-hot encoding of + the sequence. + + Raises: + ValueError: If the mapping doesn't contain values from 0 to + num_unique_aas - 1 without any gaps. + """ + num_entries = max(mapping.values()) + 1 + + if sorted(set(mapping.values())) != list(range(num_entries)): + raise ValueError('The mapping must have values from 0 to num_unique_aas-1 ' + 'without any gaps. Got: %s' % sorted(mapping.values())) + + one_hot_arr = np.zeros((len(sequence), num_entries), dtype=np.int32) + + for aa_index, aa_type in enumerate(sequence): + if map_unknown_to_x: + if aa_type.isalpha() and aa_type.isupper(): + aa_id = mapping.get(aa_type, mapping['X']) + else: + raise ValueError(f'Invalid character in the sequence: {aa_type}') + else: + aa_id = mapping[aa_type] + one_hot_arr[aa_index, aa_id] = 1 + + return one_hot_arr + + +restype_1to3 = { + 'A': 'ALA', + 'R': 'ARG', + 'N': 'ASN', + 'D': 'ASP', + 'C': 'CYS', + 'Q': 'GLN', + 'E': 'GLU', + 'G': 'GLY', + 'H': 'HIS', + 'I': 'ILE', + 'L': 'LEU', + 'K': 'LYS', + 'M': 'MET', + 'F': 'PHE', + 'P': 'PRO', + 'S': 'SER', + 'T': 'THR', + 'W': 'TRP', + 'Y': 'TYR', + 'V': 'VAL', +} + +PROTEIN_CHAIN: Final[str] = 'polypeptide(L)' +POLYMER_CHAIN: Final[str] = 'polymer' + + +def atom_id_to_type(atom_id: str) -> str: + """Convert atom ID to atom type, works only for standard protein residues. + + Args: + atom_id: Atom ID to be converted. + + Returns: + String corresponding to atom type. + + Raises: + ValueError: If atom ID not recognized. + """ + + if atom_id.startswith('C'): + return 'C' + elif atom_id.startswith('N'): + return 'N' + elif atom_id.startswith('O'): + return 'O' + elif atom_id.startswith('H'): + return 'H' + elif atom_id.startswith('S'): + return 'S' + raise ValueError('Atom ID not recognized.') + + +# NB: restype_3to1 differs from Bio.PDB.protein_letters_3to1 by being a simple +# 1-to-1 mapping of 3 letter names to one letter names. The latter contains +# many more, and less common, three letter names as keys and maps many of these +# to the same one letter name (including 'X' and 'U' which we don't use here). +restype_3to1 = {v: k for k, v in restype_1to3.items()} + +# Define a restype name for all unknown residues. +unk_restype = 'UNK' + +resnames = [restype_1to3[r] for r in restypes] + [unk_restype] +resname_to_idx = {resname: i for i, resname in enumerate(resnames)} + + +# The mapping here uses hhblits convention, so that B is mapped to D, J and O +# are mapped to X, U is mapped to C, and Z is mapped to E. Other than that the +# remaining 20 amino acids are kept in alphabetical order. +# There are 2 non-amino acid codes, X (representing any amino acid) and +# "-" representing a missing amino acid in an alignment. The id for these +# codes is put at the end (20 and 21) so that they can easily be ignored if +# desired. +HHBLITS_AA_TO_ID = { + 'A': 0, + 'B': 2, + 'C': 1, + 'D': 2, + 'E': 3, + 'F': 4, + 'G': 5, + 'H': 6, + 'I': 7, + 'J': 20, + 'K': 8, + 'L': 9, + 'M': 10, + 'N': 11, + 'O': 20, + 'P': 12, + 'Q': 13, + 'R': 14, + 'S': 15, + 'T': 16, + 'U': 1, + 'V': 17, + 'W': 18, + 'X': 20, + 'Y': 19, + 'Z': 3, + '-': 21, +} + +# Partial inversion of HHBLITS_AA_TO_ID. +ID_TO_HHBLITS_AA = { + 0: 'A', + 1: 'C', # Also U. + 2: 'D', # Also B. + 3: 'E', # Also Z. + 4: 'F', + 5: 'G', + 6: 'H', + 7: 'I', + 8: 'K', + 9: 'L', + 10: 'M', + 11: 'N', + 12: 'P', + 13: 'Q', + 14: 'R', + 15: 'S', + 16: 'T', + 17: 'V', + 18: 'W', + 19: 'Y', + 20: 'X', # Includes J and O. + 21: '-', +} + +restypes_with_x_and_gap = restypes + ['X', '-'] +MAP_HHBLITS_AATYPE_TO_OUR_AATYPE = tuple( + restypes_with_x_and_gap.index(ID_TO_HHBLITS_AA[i]) + for i in range(len(restypes_with_x_and_gap))) + + +def _make_standard_atom_mask() -> np.ndarray: + """Returns [num_res_types, num_atom_types] mask array.""" + # +1 to account for unknown (all 0s). + mask = np.zeros([restype_num + 1, atom_type_num], dtype=np.int32) + for restype, restype_letter in enumerate(restypes): + restype_name = restype_1to3[restype_letter] + atom_names = residue_atoms[restype_name] + for atom_name in atom_names: + atom_type = atom_order[atom_name] + mask[restype, atom_type] = 1 + return mask + + +STANDARD_ATOM_MASK = _make_standard_atom_mask() + + +# A one hot representation for the first and second atoms defining the axis +# of rotation for each chi-angle in each residue. +def chi_angle_atom(atom_index: int) -> np.ndarray: + """Define chi-angle rigid groups via one-hot representations.""" + chi_angles_index = {} + one_hots = [] + + for k, v in chi_angles_atoms.items(): + indices = [atom_types.index(s[atom_index]) for s in v] + indices.extend([-1]*(4-len(indices))) + chi_angles_index[k] = indices + + for r in restypes: + res3 = restype_1to3[r] + one_hot = np.eye(atom_type_num)[chi_angles_index[res3]] + one_hots.append(one_hot) + + one_hots.append(np.zeros([4, atom_type_num])) # Add zeros for residue `X`. + one_hot = np.stack(one_hots, axis=0) + one_hot = np.transpose(one_hot, [0, 2, 1]) + + return one_hot + +chi_atom_1_one_hot = chi_angle_atom(1) +chi_atom_2_one_hot = chi_angle_atom(2) + +# An array like chi_angles_atoms but using indices rather than names. +chi_angles_atom_indices = [chi_angles_atoms[restype_1to3[r]] for r in restypes] +chi_angles_atom_indices = tree.map_structure( + lambda atom_name: atom_order[atom_name], chi_angles_atom_indices) +chi_angles_atom_indices = np.array([ + chi_atoms + ([[0, 0, 0, 0]] * (4 - len(chi_atoms))) + for chi_atoms in chi_angles_atom_indices]) + +# Mapping from (res_name, atom_name) pairs to the atom's chi group index +# and atom index within that group. +chi_groups_for_atom = collections.defaultdict(list) +for res_name, chi_angle_atoms_for_res in chi_angles_atoms.items(): + for chi_group_i, chi_group in enumerate(chi_angle_atoms_for_res): + for atom_i, atom in enumerate(chi_group): + chi_groups_for_atom[(res_name, atom)].append((chi_group_i, atom_i)) +chi_groups_for_atom = dict(chi_groups_for_atom) + + +def _make_rigid_transformation_4x4(ex, ey, translation): + """Create a rigid 4x4 transformation matrix from two axes and transl.""" + # Normalize ex. + ex_normalized = ex / np.linalg.norm(ex) + + # make ey perpendicular to ex + ey_normalized = ey - np.dot(ey, ex_normalized) * ex_normalized + ey_normalized /= np.linalg.norm(ey_normalized) + + # compute ez as cross product + eznorm = np.cross(ex_normalized, ey_normalized) + m = np.stack([ex_normalized, ey_normalized, eznorm, translation]).transpose() + m = np.concatenate([m, [[0., 0., 0., 1.]]], axis=0) + return m + + +# create an array with (restype, atomtype) --> rigid_group_idx +# and an array with (restype, atomtype, coord) for the atom positions +# and compute affine transformation matrices (4,4) from one rigid group to the +# previous group +restype_atom37_to_rigid_group = np.zeros([21, 37], dtype=int) +restype_atom37_mask = np.zeros([21, 37], dtype=np.float32) +restype_atom37_rigid_group_positions = np.zeros([21, 37, 3], dtype=np.float32) +restype_atom14_to_rigid_group = np.zeros([21, 14], dtype=int) +restype_atom14_mask = np.zeros([21, 14], dtype=np.float32) +restype_atom14_rigid_group_positions = np.zeros([21, 14, 3], dtype=np.float32) +restype_rigid_group_default_frame = np.zeros([21, 8, 4, 4], dtype=np.float32) + + +def _make_rigid_group_constants(): + """Fill the arrays above.""" + for restype, restype_letter in enumerate(restypes): + resname = restype_1to3[restype_letter] + for atomname, group_idx, atom_position in rigid_group_atom_positions[ + resname]: + atomtype = atom_order[atomname] + restype_atom37_to_rigid_group[restype, atomtype] = group_idx + restype_atom37_mask[restype, atomtype] = 1 + restype_atom37_rigid_group_positions[restype, atomtype, :] = atom_position + + atom14idx = restype_name_to_atom14_names[resname].index(atomname) + restype_atom14_to_rigid_group[restype, atom14idx] = group_idx + restype_atom14_mask[restype, atom14idx] = 1 + restype_atom14_rigid_group_positions[restype, + atom14idx, :] = atom_position + + for restype, restype_letter in enumerate(restypes): + resname = restype_1to3[restype_letter] + atom_positions = {name: np.array(pos) for name, _, pos + in rigid_group_atom_positions[resname]} + + # backbone to backbone is the identity transform + restype_rigid_group_default_frame[restype, 0, :, :] = np.eye(4) + + # pre-omega-frame to backbone (currently dummy identity matrix) + restype_rigid_group_default_frame[restype, 1, :, :] = np.eye(4) + + # phi-frame to backbone + mat = _make_rigid_transformation_4x4( + ex=atom_positions['N'] - atom_positions['CA'], + ey=np.array([1., 0., 0.]), + translation=atom_positions['N']) + restype_rigid_group_default_frame[restype, 2, :, :] = mat + + # psi-frame to backbone + mat = _make_rigid_transformation_4x4( + ex=atom_positions['C'] - atom_positions['CA'], + ey=atom_positions['CA'] - atom_positions['N'], + translation=atom_positions['C']) + restype_rigid_group_default_frame[restype, 3, :, :] = mat + + # chi1-frame to backbone + if chi_angles_mask[restype][0]: + base_atom_names = chi_angles_atoms[resname][0] + base_atom_positions = [atom_positions[name] for name in base_atom_names] + mat = _make_rigid_transformation_4x4( + ex=base_atom_positions[2] - base_atom_positions[1], + ey=base_atom_positions[0] - base_atom_positions[1], + translation=base_atom_positions[2]) + restype_rigid_group_default_frame[restype, 4, :, :] = mat + + # chi2-frame to chi1-frame + # chi3-frame to chi2-frame + # chi4-frame to chi3-frame + # luckily all rotation axes for the next frame start at (0,0,0) of the + # previous frame + for chi_idx in range(1, 4): + if chi_angles_mask[restype][chi_idx]: + axis_end_atom_name = chi_angles_atoms[resname][chi_idx][2] + axis_end_atom_position = atom_positions[axis_end_atom_name] + mat = _make_rigid_transformation_4x4( + ex=axis_end_atom_position, + ey=np.array([-1., 0., 0.]), + translation=axis_end_atom_position) + restype_rigid_group_default_frame[restype, 4 + chi_idx, :, :] = mat + + +_make_rigid_group_constants() + + +def make_atom14_dists_bounds(overlap_tolerance=1.5, + bond_length_tolerance_factor=15): + """compute upper and lower bounds for bonds to assess violations.""" + restype_atom14_bond_lower_bound = np.zeros([21, 14, 14], np.float32) + restype_atom14_bond_upper_bound = np.zeros([21, 14, 14], np.float32) + restype_atom14_bond_stddev = np.zeros([21, 14, 14], np.float32) + residue_bonds, residue_virtual_bonds, _ = load_stereo_chemical_props() + for restype, restype_letter in enumerate(restypes): + resname = restype_1to3[restype_letter] + atom_list = restype_name_to_atom14_names[resname] + + # create lower and upper bounds for clashes + for atom1_idx, atom1_name in enumerate(atom_list): + if not atom1_name: + continue + atom1_radius = van_der_waals_radius[atom1_name[0]] + for atom2_idx, atom2_name in enumerate(atom_list): + if (not atom2_name) or atom1_idx == atom2_idx: + continue + atom2_radius = van_der_waals_radius[atom2_name[0]] + lower = atom1_radius + atom2_radius - overlap_tolerance + upper = 1e10 + restype_atom14_bond_lower_bound[restype, atom1_idx, atom2_idx] = lower + restype_atom14_bond_lower_bound[restype, atom2_idx, atom1_idx] = lower + restype_atom14_bond_upper_bound[restype, atom1_idx, atom2_idx] = upper + restype_atom14_bond_upper_bound[restype, atom2_idx, atom1_idx] = upper + + # overwrite lower and upper bounds for bonds and angles + for b in residue_bonds[resname] + residue_virtual_bonds[resname]: + atom1_idx = atom_list.index(b.atom1_name) + atom2_idx = atom_list.index(b.atom2_name) + lower = b.length - bond_length_tolerance_factor * b.stddev + upper = b.length + bond_length_tolerance_factor * b.stddev + restype_atom14_bond_lower_bound[restype, atom1_idx, atom2_idx] = lower + restype_atom14_bond_lower_bound[restype, atom2_idx, atom1_idx] = lower + restype_atom14_bond_upper_bound[restype, atom1_idx, atom2_idx] = upper + restype_atom14_bond_upper_bound[restype, atom2_idx, atom1_idx] = upper + restype_atom14_bond_stddev[restype, atom1_idx, atom2_idx] = b.stddev + restype_atom14_bond_stddev[restype, atom2_idx, atom1_idx] = b.stddev + return {'lower_bound': restype_atom14_bond_lower_bound, # shape (21,14,14) + 'upper_bound': restype_atom14_bond_upper_bound, # shape (21,14,14) + 'stddev': restype_atom14_bond_stddev, # shape (21,14,14) + } diff --git a/alphafold/common/residue_constants_test.py b/alphafold/common/residue_constants_test.py new file mode 100644 index 0000000000000000000000000000000000000000..3a7981e0d1bb59b58274194b69e23afe9da89bf4 --- /dev/null +++ b/alphafold/common/residue_constants_test.py @@ -0,0 +1,190 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Test that residue_constants generates correct values.""" + +from absl.testing import absltest +from absl.testing import parameterized +from alphafold.common import residue_constants +import numpy as np + + +class ResidueConstantsTest(parameterized.TestCase): + + @parameterized.parameters( + ('ALA', 0), + ('CYS', 1), + ('HIS', 2), + ('MET', 3), + ('LYS', 4), + ('ARG', 4), + ) + def testChiAnglesAtoms(self, residue_name, chi_num): + chi_angles_atoms = residue_constants.chi_angles_atoms[residue_name] + self.assertLen(chi_angles_atoms, chi_num) + for chi_angle_atoms in chi_angles_atoms: + self.assertLen(chi_angle_atoms, 4) + + def testChiGroupsForAtom(self): + for k, chi_groups in residue_constants.chi_groups_for_atom.items(): + res_name, atom_name = k + for chi_group_i, atom_i in chi_groups: + self.assertEqual( + atom_name, + residue_constants.chi_angles_atoms[res_name][chi_group_i][atom_i]) + + @parameterized.parameters( + ('ALA', 5), ('ARG', 11), ('ASN', 8), ('ASP', 8), ('CYS', 6), ('GLN', 9), + ('GLU', 9), ('GLY', 4), ('HIS', 10), ('ILE', 8), ('LEU', 8), ('LYS', 9), + ('MET', 8), ('PHE', 11), ('PRO', 7), ('SER', 6), ('THR', 7), ('TRP', 14), + ('TYR', 12), ('VAL', 7) + ) + def testResidueAtoms(self, atom_name, num_residue_atoms): + residue_atoms = residue_constants.residue_atoms[atom_name] + self.assertLen(residue_atoms, num_residue_atoms) + + def testStandardAtomMask(self): + with self.subTest('Check shape'): + self.assertEqual(residue_constants.STANDARD_ATOM_MASK.shape, (21, 37,)) + + with self.subTest('Check values'): + str_to_row = lambda s: [c == '1' for c in s] # More clear/concise. + np.testing.assert_array_equal( + residue_constants.STANDARD_ATOM_MASK, + np.array([ + # NB This was defined by c+p but looks sane. + str_to_row('11111 '), # ALA + str_to_row('111111 1 1 11 1 '), # ARG + str_to_row('111111 11 '), # ASP + str_to_row('111111 11 '), # ASN + str_to_row('11111 1 '), # CYS + str_to_row('111111 1 11 '), # GLU + str_to_row('111111 1 11 '), # GLN + str_to_row('111 1 '), # GLY + str_to_row('111111 11 1 1 '), # HIS + str_to_row('11111 11 1 '), # ILE + str_to_row('111111 11 '), # LEU + str_to_row('111111 1 1 1 '), # LYS + str_to_row('111111 11 '), # MET + str_to_row('111111 11 11 1 '), # PHE + str_to_row('111111 1 '), # PRO + str_to_row('11111 1 '), # SER + str_to_row('11111 1 1 '), # THR + str_to_row('111111 11 11 1 1 11 '), # TRP + str_to_row('111111 11 11 11 '), # TYR + str_to_row('11111 11 '), # VAL + str_to_row(' '), # UNK + ])) + + with self.subTest('Check row totals'): + # Check each row has the right number of atoms. + for row, restype in enumerate(residue_constants.restypes): # A, R, ... + long_restype = residue_constants.restype_1to3[restype] # ALA, ARG, ... + atoms_names = residue_constants.residue_atoms[ + long_restype] # ['C', 'CA', 'CB', 'N', 'O'], ... + self.assertLen(atoms_names, + residue_constants.STANDARD_ATOM_MASK[row, :].sum(), + long_restype) + + def testAtomTypes(self): + self.assertEqual(residue_constants.atom_type_num, 37) + + self.assertEqual(residue_constants.atom_types[0], 'N') + self.assertEqual(residue_constants.atom_types[1], 'CA') + self.assertEqual(residue_constants.atom_types[2], 'C') + self.assertEqual(residue_constants.atom_types[3], 'CB') + self.assertEqual(residue_constants.atom_types[4], 'O') + + self.assertEqual(residue_constants.atom_order['N'], 0) + self.assertEqual(residue_constants.atom_order['CA'], 1) + self.assertEqual(residue_constants.atom_order['C'], 2) + self.assertEqual(residue_constants.atom_order['CB'], 3) + self.assertEqual(residue_constants.atom_order['O'], 4) + self.assertEqual(residue_constants.atom_type_num, 37) + + def testRestypes(self): + three_letter_restypes = [ + residue_constants.restype_1to3[r] for r in residue_constants.restypes] + for restype, exp_restype in zip( + three_letter_restypes, sorted(residue_constants.restype_1to3.values())): + self.assertEqual(restype, exp_restype) + self.assertEqual(residue_constants.restype_num, 20) + + def testSequenceToOneHotHHBlits(self): + one_hot = residue_constants.sequence_to_onehot( + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ-', residue_constants.HHBLITS_AA_TO_ID) + exp_one_hot = np.array( + [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0], + [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], + [0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]]) + np.testing.assert_array_equal(one_hot, exp_one_hot) + + def testSequenceToOneHotStandard(self): + one_hot = residue_constants.sequence_to_onehot( + 'ARNDCQEGHILKMFPSTWYV', residue_constants.restype_order) + np.testing.assert_array_equal(one_hot, np.eye(20)) + + def testSequenceToOneHotUnknownMapping(self): + seq = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + expected_out = np.zeros([26, 21]) + for row, position in enumerate( + [0, 20, 4, 3, 6, 13, 7, 8, 9, 20, 11, 10, 12, 2, 20, 14, 5, 1, 15, 16, + 20, 19, 17, 20, 18, 20]): + expected_out[row, position] = 1 + aa_types = residue_constants.sequence_to_onehot( + sequence=seq, + mapping=residue_constants.restype_order_with_x, + map_unknown_to_x=True) + self.assertTrue((aa_types == expected_out).all()) + + @parameterized.named_parameters( + ('lowercase', 'aaa'), # Insertions in A3M. + ('gaps', '---'), # Gaps in A3M. + ('dots', '...'), # Gaps in A3M. + ('metadata', '>TEST'), # FASTA metadata line. + ) + def testSequenceToOneHotUnknownMappingError(self, seq): + with self.assertRaises(ValueError): + residue_constants.sequence_to_onehot( + sequence=seq, + mapping=residue_constants.restype_order_with_x, + map_unknown_to_x=True) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/common/testdata/2rbg.pdb b/alphafold/common/testdata/2rbg.pdb new file mode 100755 index 0000000000000000000000000000000000000000..f480d512dc2991f7168d99cb78407db314042a54 --- /dev/null +++ b/alphafold/common/testdata/2rbg.pdb @@ -0,0 +1,2784 @@ +HEADER STRUCTURAL GENOMICS, UNKNOWN FUNCTION 19-SEP-07 2RBG +TITLE CRYSTAL STRUCTURE OF HYPOTHETICAL PROTEIN(ST0493) FROM +TITLE 2 SULFOLOBUS TOKODAII +COMPND MOL_ID: 1; +COMPND 2 MOLECULE: PUTATIVE UNCHARACTERIZED PROTEIN ST0493; +COMPND 3 CHAIN: A, B; +COMPND 4 ENGINEERED: YES +SOURCE MOL_ID: 1; +SOURCE 2 ORGANISM_SCIENTIFIC: SULFOLOBUS TOKODAII; +SOURCE 3 ORGANISM_TAXID: 111955; +SOURCE 4 STRAIN: STRAIN 7; +SOURCE 5 EXPRESSION_SYSTEM: ESCHERICHIA COLI; +SOURCE 6 EXPRESSION_SYSTEM_TAXID: 562; +SOURCE 7 EXPRESSION_SYSTEM_STRAIN: ROSETTA834(DE3); +SOURCE 8 EXPRESSION_SYSTEM_VECTOR_TYPE: PLASMID; +SOURCE 9 EXPRESSION_SYSTEM_PLASMID: PET-21A +KEYWDS HYPOTHETICAL PROTEIN, STRUCTURAL GENOMICS, UNKNOWN FUNCTION, +KEYWDS 2 NPPSFA, NATIONAL PROJECT ON PROTEIN STRUCTURAL AND +KEYWDS 3 FUNCTIONAL ANALYSES, RIKEN STRUCTURAL GENOMICS/PROTEOMICS +KEYWDS 4 INITIATIVE, RSGI +EXPDTA X-RAY DIFFRACTION +AUTHOR J.JEYAKANTHAN,S.KURAMITSU,S.YOKOYAMA,RIKEN STRUCTURAL +AUTHOR 2 GENOMICS/PROTEOMICS INITIATIVE (RSGI) +REVDAT 2 24-FEB-09 2RBG 1 VERSN +REVDAT 1 30-SEP-08 2RBG 0 +JRNL AUTH J.JEYAKANTHAN,S.KURAMITSU,S.YOKOYAMA +JRNL TITL CRYSTAL STRUCTURE OF HYPOTHETICAL PROTEIN(ST0493) +JRNL TITL 2 FROM SULFOLOBUS TOKODAII +JRNL REF TO BE PUBLISHED +JRNL REFN +REMARK 1 +REMARK 2 +REMARK 2 RESOLUTION. 1.75 ANGSTROMS. +REMARK 3 +REMARK 3 REFINEMENT. +REMARK 3 PROGRAM : CNS 1.1 +REMARK 3 AUTHORS : BRUNGER,ADAMS,CLORE,DELANO,GROS,GROSSE- +REMARK 3 : KUNSTLEVE,JIANG,KUSZEWSKI,NILGES, PANNU, +REMARK 3 : READ,RICE,SIMONSON,WARREN +REMARK 3 +REMARK 3 REFINEMENT TARGET : ENGH & HUBER +REMARK 3 +REMARK 3 DATA USED IN REFINEMENT. +REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 1.75 +REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : 33.49 +REMARK 3 DATA CUTOFF (SIGMA(F)) : 0.000 +REMARK 3 DATA CUTOFF HIGH (ABS(F)) : 2067291.840 +REMARK 3 DATA CUTOFF LOW (ABS(F)) : 0.0000 +REMARK 3 COMPLETENESS (WORKING+TEST) (%) : 99.3 +REMARK 3 NUMBER OF REFLECTIONS : 25029 +REMARK 3 +REMARK 3 FIT TO DATA USED IN REFINEMENT. +REMARK 3 CROSS-VALIDATION METHOD : THROUGHOUT +REMARK 3 FREE R VALUE TEST SET SELECTION : RANDOM +REMARK 3 R VALUE (WORKING SET) : 0.173 +REMARK 3 FREE R VALUE : 0.196 +REMARK 3 FREE R VALUE TEST SET SIZE (%) : 4.900 +REMARK 3 FREE R VALUE TEST SET COUNT : 1216 +REMARK 3 ESTIMATED ERROR OF FREE R VALUE : 0.006 +REMARK 3 +REMARK 3 FIT IN THE HIGHEST RESOLUTION BIN. +REMARK 3 TOTAL NUMBER OF BINS USED : 8 +REMARK 3 BIN RESOLUTION RANGE HIGH (A) : 1.75 +REMARK 3 BIN RESOLUTION RANGE LOW (A) : 1.83 +REMARK 3 BIN COMPLETENESS (WORKING+TEST) (%) : 96.80 +REMARK 3 REFLECTIONS IN BIN (WORKING SET) : 2906 +REMARK 3 BIN R VALUE (WORKING SET) : 0.1980 +REMARK 3 BIN FREE R VALUE : 0.2420 +REMARK 3 BIN FREE R VALUE TEST SET SIZE (%) : 5.10 +REMARK 3 BIN FREE R VALUE TEST SET COUNT : 156 +REMARK 3 ESTIMATED ERROR OF BIN FREE R VALUE : 0.019 +REMARK 3 +REMARK 3 NUMBER OF NON-HYDROGEN ATOMS USED IN REFINEMENT. +REMARK 3 PROTEIN ATOMS : 2060 +REMARK 3 NUCLEIC ACID ATOMS : 0 +REMARK 3 HETEROGEN ATOMS : 5 +REMARK 3 SOLVENT ATOMS : 316 +REMARK 3 +REMARK 3 B VALUES. +REMARK 3 FROM WILSON PLOT (A**2) : 13.30 +REMARK 3 MEAN B VALUE (OVERALL, A**2) : 16.90 +REMARK 3 OVERALL ANISOTROPIC B VALUE. +REMARK 3 B11 (A**2) : 2.81000 +REMARK 3 B22 (A**2) : -1.00000 +REMARK 3 B33 (A**2) : -1.81000 +REMARK 3 B12 (A**2) : 0.00000 +REMARK 3 B13 (A**2) : -1.31000 +REMARK 3 B23 (A**2) : 0.00000 +REMARK 3 +REMARK 3 ESTIMATED COORDINATE ERROR. +REMARK 3 ESD FROM LUZZATI PLOT (A) : 0.16 +REMARK 3 ESD FROM SIGMAA (A) : 0.06 +REMARK 3 LOW RESOLUTION CUTOFF (A) : 5.00 +REMARK 3 +REMARK 3 CROSS-VALIDATED ESTIMATED COORDINATE ERROR. +REMARK 3 ESD FROM C-V LUZZATI PLOT (A) : 0.19 +REMARK 3 ESD FROM C-V SIGMAA (A) : 0.14 +REMARK 3 +REMARK 3 RMS DEVIATIONS FROM IDEAL VALUES. +REMARK 3 BOND LENGTHS (A) : 0.005 +REMARK 3 BOND ANGLES (DEGREES) : 1.10 +REMARK 3 DIHEDRAL ANGLES (DEGREES) : 22.00 +REMARK 3 IMPROPER ANGLES (DEGREES) : 0.70 +REMARK 3 +REMARK 3 ISOTROPIC THERMAL MODEL : RESTRAINED +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 BULK SOLVENT MODELING. +REMARK 3 METHOD USED : FLAT MODEL +REMARK 3 KSOL : 0.37 +REMARK 3 BSOL : 51.20 +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 : PROTEIN_REP.PARAM +REMARK 3 PARAMETER FILE 2 : LIGAND.PARAM +REMARK 3 PARAMETER FILE 3 : ION.PARAM +REMARK 3 PARAMETER FILE 5 : WATER_REP.PARAM +REMARK 3 PARAMETER FILE 6 : NULL +REMARK 3 TOPOLOGY FILE 1 : PROTEIN.TOP +REMARK 3 TOPOLOGY FILE 2 : LIGAND.TOP +REMARK 3 TOPOLOGY FILE 3 : ION.TOP +REMARK 3 TOPOLOGY FILE 5 : WATER_PROTIN.TOP +REMARK 3 TOPOLOGY FILE 6 : NULL +REMARK 3 +REMARK 3 OTHER REFINEMENT REMARKS: NULL +REMARK 4 +REMARK 4 2RBG COMPLIES WITH FORMAT V. 3.15, 01-DEC-08 +REMARK 100 +REMARK 100 THIS ENTRY HAS BEEN PROCESSED BY PDBJ ON 27-SEP-07. +REMARK 100 THE RCSB ID CODE IS RCSB044658. +REMARK 200 +REMARK 200 EXPERIMENTAL DETAILS +REMARK 200 EXPERIMENT TYPE : X-RAY DIFFRACTION +REMARK 200 DATE OF DATA COLLECTION : 16-JUN-07 +REMARK 200 TEMPERATURE (KELVIN) : 100 +REMARK 200 PH : 7.5 +REMARK 200 NUMBER OF CRYSTALS USED : 1 +REMARK 200 +REMARK 200 SYNCHROTRON (Y/N) : Y +REMARK 200 RADIATION SOURCE : SPRING-8 +REMARK 200 BEAMLINE : BL26B2 +REMARK 200 X-RAY GENERATOR MODEL : NULL +REMARK 200 MONOCHROMATIC OR LAUE (M/L) : M +REMARK 200 WAVELENGTH OR RANGE (A) : 0.97899, 0.9, 0.97931 +REMARK 200 MONOCHROMATOR : SI-1 1 1 DOUBLE CRYSTAL +REMARK 200 MONOCHROMATOR +REMARK 200 OPTICS : RH COATED BENT-CYRINDRICAL +REMARK 200 MIRROR +REMARK 200 +REMARK 200 DETECTOR TYPE : CCD +REMARK 200 DETECTOR MANUFACTURER : MARMOSAIC 225 MM CCD +REMARK 200 INTENSITY-INTEGRATION SOFTWARE : HKL-2000 +REMARK 200 DATA SCALING SOFTWARE : SCALEPACK +REMARK 200 +REMARK 200 NUMBER OF UNIQUE REFLECTIONS : 25105 +REMARK 200 RESOLUTION RANGE HIGH (A) : 1.750 +REMARK 200 RESOLUTION RANGE LOW (A) : 50.000 +REMARK 200 REJECTION CRITERIA (SIGMA(I)) : NULL +REMARK 200 +REMARK 200 OVERALL. +REMARK 200 COMPLETENESS FOR RANGE (%) : 99.6 +REMARK 200 DATA REDUNDANCY : NULL +REMARK 200 R MERGE (I) : 0.05900 +REMARK 200 R SYM (I) : 0.06300 +REMARK 200 <I/SIGMA(I)> FOR THE DATA SET : NULL +REMARK 200 +REMARK 200 IN THE HIGHEST RESOLUTION SHELL. +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE HIGH (A) : 1.75 +REMARK 200 HIGHEST RESOLUTION SHELL, RANGE LOW (A) : 1.81 +REMARK 200 COMPLETENESS FOR SHELL (%) : 96.9 +REMARK 200 DATA REDUNDANCY IN SHELL : NULL +REMARK 200 R MERGE FOR SHELL (I) : 0.14300 +REMARK 200 R SYM FOR SHELL (I) : 0.13300 +REMARK 200 <I/SIGMA(I)> FOR SHELL : NULL +REMARK 200 +REMARK 200 DIFFRACTION PROTOCOL: MAD +REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: MAD +REMARK 200 SOFTWARE USED: SOLVE +REMARK 200 STARTING MODEL: NULL +REMARK 200 +REMARK 200 REMARK: NULL +REMARK 280 +REMARK 280 CRYSTAL +REMARK 280 SOLVENT CONTENT, VS (%): 41.69 +REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 2.11 +REMARK 280 +REMARK 280 CRYSTALLIZATION CONDITIONS: 30% PEG 4K, 0.2M AMMONIUM SULFATE, +REMARK 280 PH 7.5, MICROBATCH, TEMPERATURE 293K +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY +REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: P 1 21 1 +REMARK 290 +REMARK 290 SYMOP SYMMETRY +REMARK 290 NNNMMM OPERATOR +REMARK 290 1555 X,Y,Z +REMARK 290 2555 -X,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 0.00000 +REMARK 290 SMTRY2 2 0.000000 1.000000 0.000000 32.59200 +REMARK 290 SMTRY3 2 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 +REMARK 290 REMARK: NULL +REMARK 300 +REMARK 300 BIOMOLECULE: 1, 2, 3 +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 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 350 +REMARK 350 BIOMOLECULE: 2 +REMARK 350 SOFTWARE DETERMINED QUATERNARY STRUCTURE: MONOMERIC +REMARK 350 SOFTWARE USED: PISA +REMARK 350 APPLY THE FOLLOWING TO CHAINS: A +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 350 +REMARK 350 BIOMOLECULE: 3 +REMARK 350 SOFTWARE DETERMINED QUATERNARY STRUCTURE: MONOMERIC +REMARK 350 SOFTWARE USED: PISA +REMARK 350 APPLY THE FOLLOWING TO CHAINS: 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 465 +REMARK 465 MISSING RESIDUES +REMARK 465 THE FOLLOWING RESIDUES WERE NOT LOCATED IN THE +REMARK 465 EXPERIMENT. (M=MODEL NUMBER; RES=RESIDUE NAME; C=CHAIN +REMARK 465 IDENTIFIER; SSSEQ=SEQUENCE NUMBER; I=INSERTION CODE.) +REMARK 465 +REMARK 465 M RES C SSSEQI +REMARK 465 MSE A 1 +REMARK 465 PRO A 2 +REMARK 465 MSE B 1 +REMARK 465 PRO B 2 +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 PHE A 121 76.88 -102.11 +REMARK 500 CYS A 122 -73.41 -165.90 +REMARK 500 CYS B 122 -70.28 -161.68 +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 SO4 B 127 +REMARK 900 +REMARK 900 RELATED ENTRIES +REMARK 900 RELATED ID: STO001000493.1 RELATED DB: TARGETDB +DBREF 2RBG A 1 126 UNP Q975B5 Q975B5_SULTO 1 126 +DBREF 2RBG B 1 126 UNP Q975B5 Q975B5_SULTO 1 126 +SEQRES 1 A 126 MSE PRO TYR LYS ASN ILE LEU THR LEU ILE SER VAL ASN +SEQRES 2 A 126 ASN ASP ASN PHE GLU ASN TYR PHE ARG LYS ILE PHE LEU +SEQRES 3 A 126 ASP VAL ARG SER SER GLY SER LYS LYS THR THR ILE ASN +SEQRES 4 A 126 VAL PHE THR GLU ILE GLN TYR GLN GLU LEU VAL THR LEU +SEQRES 5 A 126 ILE ARG GLU ALA LEU LEU GLU ASN ILE ASP ILE GLY TYR +SEQRES 6 A 126 GLU LEU PHE LEU TRP LYS LYS ASN GLU VAL ASP ILE PHE +SEQRES 7 A 126 LEU LYS ASN LEU GLU LYS SER GLU VAL ASP GLY LEU LEU +SEQRES 8 A 126 VAL TYR CYS ASP ASP GLU ASN LYS VAL PHE MSE SER LYS +SEQRES 9 A 126 ILE VAL ASP ASN LEU PRO THR ALA ILE LYS ARG ASN LEU +SEQRES 10 A 126 ILE LYS ASP PHE CYS ARG LYS LEU SER +SEQRES 1 B 126 MSE PRO TYR LYS ASN ILE LEU THR LEU ILE SER VAL ASN +SEQRES 2 B 126 ASN ASP ASN PHE GLU ASN TYR PHE ARG LYS ILE PHE LEU +SEQRES 3 B 126 ASP VAL ARG SER SER GLY SER LYS LYS THR THR ILE ASN +SEQRES 4 B 126 VAL PHE THR GLU ILE GLN TYR GLN GLU LEU VAL THR LEU +SEQRES 5 B 126 ILE ARG GLU ALA LEU LEU GLU ASN ILE ASP ILE GLY TYR +SEQRES 6 B 126 GLU LEU PHE LEU TRP LYS LYS ASN GLU VAL ASP ILE PHE +SEQRES 7 B 126 LEU LYS ASN LEU GLU LYS SER GLU VAL ASP GLY LEU LEU +SEQRES 8 B 126 VAL TYR CYS ASP ASP GLU ASN LYS VAL PHE MSE SER LYS +SEQRES 9 B 126 ILE VAL ASP ASN LEU PRO THR ALA ILE LYS ARG ASN LEU +SEQRES 10 B 126 ILE LYS ASP PHE CYS ARG LYS LEU SER +MODRES 2RBG MSE A 102 MET SELENOMETHIONINE +MODRES 2RBG MSE B 102 MET SELENOMETHIONINE +HET MSE A 102 8 +HET MSE B 102 8 +HET SO4 B 127 5 +HETNAM MSE SELENOMETHIONINE +HETNAM SO4 SULFATE ION +FORMUL 1 MSE 2(C5 H11 N O2 SE) +FORMUL 3 SO4 O4 S 2- +FORMUL 4 HOH *316(H2 O) +HELIX 1 1 ASN A 13 ASP A 15 5 3 +HELIX 2 2 ASN A 16 GLY A 32 1 17 +HELIX 3 3 GLN A 45 ILE A 53 1 9 +HELIX 4 4 ILE A 53 ASN A 60 1 8 +HELIX 5 5 LYS A 71 ASN A 73 5 3 +HELIX 6 6 GLU A 74 GLU A 83 1 10 +HELIX 7 7 ASN A 98 ASN A 108 1 11 +HELIX 8 8 PRO A 110 ARG A 115 1 6 +HELIX 9 9 ASN B 13 ASP B 15 5 3 +HELIX 10 10 ASN B 16 GLY B 32 1 17 +HELIX 11 11 GLN B 45 ILE B 53 1 9 +HELIX 12 12 ILE B 53 GLU B 59 1 7 +HELIX 13 13 LYS B 71 ASN B 73 5 3 +HELIX 14 14 GLU B 74 LEU B 82 1 9 +HELIX 15 15 GLU B 83 SER B 85 5 3 +HELIX 16 16 ASN B 98 ASN B 108 1 11 +HELIX 17 17 PRO B 110 ASN B 116 1 7 +SHEET 1 A 5 GLY A 64 TRP A 70 0 +SHEET 2 A 5 LYS A 35 PHE A 41 1 N VAL A 40 O PHE A 68 +SHEET 3 A 5 ILE A 6 SER A 11 1 N THR A 8 O ASN A 39 +SHEET 4 A 5 GLY A 89 CYS A 94 1 O GLY A 89 N LEU A 7 +SHEET 5 A 5 LEU A 117 PHE A 121 1 O ILE A 118 N LEU A 90 +SHEET 1 B 5 GLY B 64 TRP B 70 0 +SHEET 2 B 5 LYS B 35 PHE B 41 1 N VAL B 40 O TRP B 70 +SHEET 3 B 5 ILE B 6 SER B 11 1 N THR B 8 O ASN B 39 +SHEET 4 B 5 GLY B 89 CYS B 94 1 O GLY B 89 N LEU B 7 +SHEET 5 B 5 LEU B 117 PHE B 121 1 O ILE B 118 N LEU B 90 +SSBOND 1 CYS A 94 CYS A 122 1555 1555 2.03 +SSBOND 2 CYS B 94 CYS B 122 1555 1555 2.03 +LINK C PHE A 101 N MSE A 102 1555 1555 1.33 +LINK C MSE A 102 N SER A 103 1555 1555 1.33 +LINK C PHE B 101 N MSE B 102 1555 1555 1.33 +LINK C MSE B 102 N SER B 103 1555 1555 1.33 +SITE 1 AC1 5 GLU B 18 ARG B 22 GLU B 55 HOH B 217 +SITE 2 AC1 5 HOH B 234 +CRYST1 39.444 65.184 49.604 90.00 98.19 90.00 P 1 21 1 4 +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.025352 0.000000 0.003650 0.00000 +SCALE2 0.000000 0.015341 0.000000 0.00000 +SCALE3 0.000000 0.000000 0.020368 0.00000 +ATOM 1 N TYR A 3 33.471 9.062 24.101 1.00 24.34 N +ATOM 2 CA TYR A 3 32.068 8.798 23.671 1.00 22.76 C +ATOM 3 C TYR A 3 31.421 10.059 23.108 1.00 22.12 C +ATOM 4 O TYR A 3 31.551 11.144 23.678 1.00 23.86 O +ATOM 5 CB TYR A 3 31.252 8.265 24.852 1.00 22.59 C +ATOM 6 CG TYR A 3 31.720 6.909 25.338 1.00 23.54 C +ATOM 7 CD1 TYR A 3 32.254 6.746 26.616 1.00 23.82 C +ATOM 8 CD2 TYR A 3 31.647 5.792 24.508 1.00 23.93 C +ATOM 9 CE1 TYR A 3 32.705 5.500 27.055 1.00 25.31 C +ATOM 10 CE2 TYR A 3 32.095 4.544 24.936 1.00 22.68 C +ATOM 11 CZ TYR A 3 32.622 4.405 26.208 1.00 25.21 C +ATOM 12 OH TYR A 3 33.070 3.171 26.625 1.00 27.53 O +ATOM 13 N LYS A 4 30.720 9.903 21.989 1.00 18.90 N +ATOM 14 CA LYS A 4 30.060 11.019 21.317 1.00 18.65 C +ATOM 15 C LYS A 4 28.537 10.918 21.313 1.00 15.20 C +ATOM 16 O LYS A 4 27.850 11.932 21.232 1.00 13.13 O +ATOM 17 CB LYS A 4 30.555 11.114 19.870 1.00 21.41 C +ATOM 18 CG LYS A 4 32.064 11.283 19.734 1.00 32.01 C +ATOM 19 CD LYS A 4 32.527 12.652 20.213 1.00 36.58 C +ATOM 20 CE LYS A 4 32.002 13.760 19.311 1.00 39.57 C +ATOM 21 NZ LYS A 4 32.463 15.105 19.752 1.00 43.99 N +ATOM 22 N ASN A 5 28.009 9.699 21.374 1.00 13.77 N +ATOM 23 CA ASN A 5 26.560 9.508 21.373 1.00 13.94 C +ATOM 24 C ASN A 5 26.217 8.213 22.092 1.00 14.07 C +ATOM 25 O ASN A 5 26.368 7.121 21.548 1.00 13.93 O +ATOM 26 CB ASN A 5 26.022 9.489 19.936 1.00 15.07 C +ATOM 27 CG ASN A 5 24.503 9.457 19.879 1.00 19.05 C +ATOM 28 OD1 ASN A 5 23.826 10.028 20.734 1.00 18.93 O +ATOM 29 ND2 ASN A 5 23.960 8.805 18.857 1.00 23.13 N +ATOM 30 N ILE A 6 25.749 8.359 23.324 1.00 12.56 N +ATOM 31 CA ILE A 6 25.398 7.232 24.174 1.00 10.81 C +ATOM 32 C ILE A 6 24.026 6.636 23.871 1.00 9.05 C +ATOM 33 O ILE A 6 23.032 7.360 23.784 1.00 10.03 O +ATOM 34 CB ILE A 6 25.409 7.661 25.661 1.00 10.42 C +ATOM 35 CG1 ILE A 6 26.761 8.291 26.015 1.00 14.05 C +ATOM 36 CG2 ILE A 6 25.114 6.465 26.555 1.00 10.54 C +ATOM 37 CD1 ILE A 6 27.942 7.352 25.864 1.00 13.83 C +ATOM 38 N LEU A 7 23.978 5.317 23.695 1.00 7.97 N +ATOM 39 CA LEU A 7 22.708 4.638 23.468 1.00 7.84 C +ATOM 40 C LEU A 7 22.167 4.341 24.862 1.00 6.49 C +ATOM 41 O LEU A 7 22.786 3.598 25.623 1.00 7.93 O +ATOM 42 CB LEU A 7 22.901 3.315 22.724 1.00 7.80 C +ATOM 43 CG LEU A 7 21.627 2.465 22.610 1.00 8.47 C +ATOM 44 CD1 LEU A 7 20.587 3.198 21.769 1.00 8.00 C +ATOM 45 CD2 LEU A 7 21.961 1.115 21.988 1.00 10.59 C +ATOM 46 N THR A 8 21.029 4.936 25.201 1.00 5.70 N +ATOM 47 CA THR A 8 20.419 4.719 26.508 1.00 6.42 C +ATOM 48 C THR A 8 19.137 3.917 26.352 1.00 6.87 C +ATOM 49 O THR A 8 18.243 4.298 25.595 1.00 7.76 O +ATOM 50 CB THR A 8 20.101 6.061 27.208 1.00 6.58 C +ATOM 51 OG1 THR A 8 21.328 6.729 27.538 1.00 7.53 O +ATOM 52 CG2 THR A 8 19.310 5.826 28.490 1.00 7.99 C +ATOM 53 N LEU A 9 19.067 2.792 27.057 1.00 7.67 N +ATOM 54 CA LEU A 9 17.898 1.930 27.012 1.00 8.24 C +ATOM 55 C LEU A 9 17.289 1.878 28.404 1.00 8.48 C +ATOM 56 O LEU A 9 18.000 1.681 29.391 1.00 7.88 O +ATOM 57 CB LEU A 9 18.293 0.514 26.583 1.00 9.90 C +ATOM 58 CG LEU A 9 19.140 0.391 25.315 1.00 11.56 C +ATOM 59 CD1 LEU A 9 19.413 -1.082 25.031 1.00 10.95 C +ATOM 60 CD2 LEU A 9 18.418 1.039 24.145 1.00 10.46 C +ATOM 61 N ILE A 10 15.976 2.056 28.484 1.00 7.53 N +ATOM 62 CA ILE A 10 15.301 2.010 29.771 1.00 7.34 C +ATOM 63 C ILE A 10 13.911 1.408 29.690 1.00 8.82 C +ATOM 64 O ILE A 10 13.146 1.683 28.767 1.00 10.17 O +ATOM 65 CB ILE A 10 15.190 3.420 30.412 1.00 8.96 C +ATOM 66 CG1 ILE A 10 14.388 3.338 31.717 1.00 7.62 C +ATOM 67 CG2 ILE A 10 14.524 4.392 29.433 1.00 9.63 C +ATOM 68 CD1 ILE A 10 14.445 4.613 32.566 1.00 11.33 C +ATOM 69 N SER A 11 13.605 0.560 30.664 1.00 8.33 N +ATOM 70 CA SER A 11 12.297 -0.060 30.761 1.00 10.47 C +ATOM 71 C SER A 11 11.962 -0.145 32.245 1.00 9.11 C +ATOM 72 O SER A 11 12.520 -0.964 32.972 1.00 11.58 O +ATOM 73 CB SER A 11 12.300 -1.457 30.143 1.00 13.19 C +ATOM 74 OG SER A 11 10.990 -1.998 30.156 1.00 19.72 O +ATOM 75 N VAL A 12 11.067 0.730 32.687 1.00 11.21 N +ATOM 76 CA VAL A 12 10.643 0.770 34.081 1.00 11.41 C +ATOM 77 C VAL A 12 9.161 1.098 34.156 1.00 15.63 C +ATOM 78 O VAL A 12 8.563 1.528 33.170 1.00 16.75 O +ATOM 79 CB VAL A 12 11.402 1.858 34.886 1.00 11.30 C +ATOM 80 CG1 VAL A 12 12.884 1.530 34.945 1.00 8.11 C +ATOM 81 CG2 VAL A 12 11.178 3.230 34.255 1.00 12.03 C +ATOM 82 N ASN A 13 8.575 0.887 35.330 1.00 17.25 N +ATOM 83 CA ASN A 13 7.170 1.200 35.547 1.00 20.47 C +ATOM 84 C ASN A 13 7.075 2.724 35.563 1.00 19.38 C +ATOM 85 O ASN A 13 8.061 3.404 35.845 1.00 18.17 O +ATOM 86 CB ASN A 13 6.700 0.622 36.885 1.00 23.13 C +ATOM 87 CG ASN A 13 6.713 -0.895 36.900 1.00 31.36 C +ATOM 88 OD1 ASN A 13 6.035 -1.541 36.099 1.00 36.96 O +ATOM 89 ND2 ASN A 13 7.484 -1.472 37.817 1.00 34.18 N +ATOM 90 N ASN A 14 5.896 3.259 35.266 1.00 18.03 N +ATOM 91 CA ASN A 14 5.707 4.707 35.224 1.00 19.51 C +ATOM 92 C ASN A 14 6.148 5.468 36.472 1.00 20.09 C +ATOM 93 O ASN A 14 6.659 6.582 36.372 1.00 20.91 O +ATOM 94 CB ASN A 14 4.242 5.048 34.941 1.00 20.73 C +ATOM 95 CG ASN A 14 3.742 4.437 33.653 1.00 23.53 C +ATOM 96 OD1 ASN A 14 4.496 4.276 32.696 1.00 22.26 O +ATOM 97 ND2 ASN A 14 2.456 4.108 33.615 1.00 26.38 N +ATOM 98 N ASP A 15 5.954 4.876 37.645 1.00 20.00 N +ATOM 99 CA ASP A 15 6.319 5.543 38.890 1.00 23.11 C +ATOM 100 C ASP A 15 7.828 5.697 39.071 1.00 20.27 C +ATOM 101 O ASP A 15 8.275 6.420 39.958 1.00 21.58 O +ATOM 102 CB ASP A 15 5.736 4.783 40.086 1.00 23.65 C +ATOM 103 CG ASP A 15 6.495 3.509 40.394 1.00 33.42 C +ATOM 104 OD1 ASP A 15 6.862 2.787 39.443 1.00 37.24 O +ATOM 105 OD2 ASP A 15 6.719 3.222 41.591 1.00 40.07 O +ATOM 106 N ASN A 16 8.607 5.025 38.228 1.00 17.28 N +ATOM 107 CA ASN A 16 10.063 5.089 38.322 1.00 16.22 C +ATOM 108 C ASN A 16 10.757 6.035 37.343 1.00 17.13 C +ATOM 109 O ASN A 16 11.960 6.258 37.458 1.00 15.71 O +ATOM 110 CB ASN A 16 10.670 3.691 38.150 1.00 18.31 C +ATOM 111 CG ASN A 16 10.692 2.896 39.440 1.00 21.25 C +ATOM 112 OD1 ASN A 16 11.056 3.416 40.495 1.00 23.56 O +ATOM 113 ND2 ASN A 16 10.323 1.623 39.357 1.00 19.07 N +ATOM 114 N PHE A 17 10.020 6.598 36.392 1.00 14.63 N +ATOM 115 CA PHE A 17 10.641 7.486 35.409 1.00 14.77 C +ATOM 116 C PHE A 17 11.409 8.670 35.984 1.00 14.87 C +ATOM 117 O PHE A 17 12.552 8.913 35.604 1.00 9.25 O +ATOM 118 CB PHE A 17 9.602 7.998 34.404 1.00 12.16 C +ATOM 119 CG PHE A 17 9.216 6.987 33.365 1.00 11.38 C +ATOM 120 CD1 PHE A 17 10.192 6.337 32.614 1.00 13.83 C +ATOM 121 CD2 PHE A 17 7.878 6.680 33.135 1.00 14.52 C +ATOM 122 CE1 PHE A 17 9.842 5.393 31.649 1.00 14.54 C +ATOM 123 CE2 PHE A 17 7.518 5.740 32.174 1.00 14.67 C +ATOM 124 CZ PHE A 17 8.500 5.095 31.429 1.00 14.46 C +ATOM 125 N GLU A 18 10.792 9.411 36.897 1.00 16.23 N +ATOM 126 CA GLU A 18 11.464 10.565 37.475 1.00 16.73 C +ATOM 127 C GLU A 18 12.805 10.207 38.106 1.00 16.00 C +ATOM 128 O GLU A 18 13.818 10.842 37.814 1.00 16.65 O +ATOM 129 CB GLU A 18 10.557 11.247 38.505 1.00 23.36 C +ATOM 130 CG GLU A 18 9.338 11.909 37.879 1.00 30.35 C +ATOM 131 CD GLU A 18 8.469 12.633 38.889 1.00 37.35 C +ATOM 132 OE1 GLU A 18 8.971 13.562 39.558 1.00 37.02 O +ATOM 133 OE2 GLU A 18 7.280 12.273 39.010 1.00 40.39 O +ATOM 134 N ASN A 19 12.816 9.184 38.954 1.00 16.87 N +ATOM 135 CA ASN A 19 14.049 8.770 39.618 1.00 15.97 C +ATOM 136 C ASN A 19 15.094 8.227 38.649 1.00 15.31 C +ATOM 137 O ASN A 19 16.278 8.557 38.756 1.00 13.61 O +ATOM 138 CB ASN A 19 13.761 7.713 40.690 1.00 19.94 C +ATOM 139 CG ASN A 19 12.921 8.251 41.831 1.00 26.59 C +ATOM 140 OD1 ASN A 19 13.143 9.361 42.313 1.00 28.74 O +ATOM 141 ND2 ASN A 19 11.958 7.454 42.283 1.00 31.96 N +ATOM 142 N TYR A 20 14.667 7.395 37.705 1.00 9.62 N +ATOM 143 CA TYR A 20 15.612 6.830 36.750 1.00 8.42 C +ATOM 144 C TYR A 20 16.193 7.835 35.765 1.00 10.15 C +ATOM 145 O TYR A 20 17.354 7.718 35.390 1.00 8.97 O +ATOM 146 CB TYR A 20 14.988 5.667 35.975 1.00 8.90 C +ATOM 147 CG TYR A 20 15.099 4.331 36.683 1.00 11.47 C +ATOM 148 CD1 TYR A 20 14.377 4.074 37.848 1.00 11.36 C +ATOM 149 CD2 TYR A 20 15.916 3.319 36.178 1.00 9.86 C +ATOM 150 CE1 TYR A 20 14.461 2.838 38.488 1.00 10.09 C +ATOM 151 CE2 TYR A 20 16.008 2.080 36.808 1.00 11.95 C +ATOM 152 CZ TYR A 20 15.272 1.847 37.965 1.00 10.22 C +ATOM 153 OH TYR A 20 15.329 0.615 38.579 1.00 12.19 O +ATOM 154 N PHE A 21 15.407 8.817 35.331 1.00 10.83 N +ATOM 155 CA PHE A 21 15.961 9.786 34.396 1.00 10.37 C +ATOM 156 C PHE A 21 17.015 10.652 35.066 1.00 9.86 C +ATOM 157 O PHE A 21 17.893 11.207 34.403 1.00 10.68 O +ATOM 158 CB PHE A 21 14.863 10.640 33.760 1.00 10.02 C +ATOM 159 CG PHE A 21 14.380 10.090 32.448 1.00 9.94 C +ATOM 160 CD1 PHE A 21 13.536 8.984 32.413 1.00 10.87 C +ATOM 161 CD2 PHE A 21 14.844 10.618 31.247 1.00 11.58 C +ATOM 162 CE1 PHE A 21 13.166 8.405 31.199 1.00 10.52 C +ATOM 163 CE2 PHE A 21 14.479 10.046 30.021 1.00 12.43 C +ATOM 164 CZ PHE A 21 13.640 8.937 29.999 1.00 11.64 C +ATOM 165 N ARG A 22 16.937 10.756 36.386 1.00 10.63 N +ATOM 166 CA ARG A 22 17.930 11.519 37.121 1.00 12.46 C +ATOM 167 C ARG A 22 19.243 10.741 36.990 1.00 12.16 C +ATOM 168 O ARG A 22 20.314 11.326 36.831 1.00 12.50 O +ATOM 169 CB ARG A 22 17.521 11.653 38.592 1.00 12.81 C +ATOM 170 CG ARG A 22 18.512 12.441 39.436 1.00 17.97 C +ATOM 171 CD ARG A 22 18.033 12.635 40.873 1.00 15.56 C +ATOM 172 NE ARG A 22 16.944 13.605 40.993 1.00 15.48 N +ATOM 173 CZ ARG A 22 16.484 14.056 42.158 1.00 17.00 C +ATOM 174 NH1 ARG A 22 17.020 13.622 43.293 1.00 13.10 N +ATOM 175 NH2 ARG A 22 15.495 14.941 42.195 1.00 16.86 N +ATOM 176 N LYS A 23 19.150 9.414 37.040 1.00 9.11 N +ATOM 177 CA LYS A 23 20.330 8.562 36.910 1.00 8.13 C +ATOM 178 C LYS A 23 20.899 8.647 35.497 1.00 8.65 C +ATOM 179 O LYS A 23 22.109 8.744 35.305 1.00 11.79 O +ATOM 180 CB LYS A 23 19.983 7.099 37.206 1.00 10.36 C +ATOM 181 CG LYS A 23 19.601 6.794 38.646 1.00 10.87 C +ATOM 182 CD LYS A 23 19.398 5.289 38.832 1.00 14.62 C +ATOM 183 CE LYS A 23 19.222 4.926 40.294 1.00 23.04 C +ATOM 184 NZ LYS A 23 20.438 5.264 41.088 1.00 16.09 N +ATOM 185 N ILE A 24 20.015 8.600 34.505 1.00 7.43 N +ATOM 186 CA ILE A 24 20.443 8.660 33.116 1.00 6.12 C +ATOM 187 C ILE A 24 21.374 9.834 32.842 1.00 8.47 C +ATOM 188 O ILE A 24 22.446 9.661 32.271 1.00 9.39 O +ATOM 189 CB ILE A 24 19.226 8.750 32.168 1.00 6.49 C +ATOM 190 CG1 ILE A 24 18.475 7.414 32.183 1.00 5.04 C +ATOM 191 CG2 ILE A 24 19.684 9.104 30.748 1.00 7.14 C +ATOM 192 CD1 ILE A 24 17.160 7.432 31.432 1.00 5.89 C +ATOM 193 N PHE A 25 20.976 11.031 33.254 1.00 8.27 N +ATOM 194 CA PHE A 25 21.814 12.192 32.991 1.00 10.11 C +ATOM 195 C PHE A 25 23.098 12.230 33.813 1.00 8.55 C +ATOM 196 O PHE A 25 24.106 12.772 33.361 1.00 9.67 O +ATOM 197 CB PHE A 25 20.985 13.470 33.142 1.00 9.31 C +ATOM 198 CG PHE A 25 20.000 13.667 32.016 1.00 11.97 C +ATOM 199 CD1 PHE A 25 20.452 13.926 30.721 1.00 13.37 C +ATOM 200 CD2 PHE A 25 18.635 13.523 32.230 1.00 12.47 C +ATOM 201 CE1 PHE A 25 19.556 14.034 29.657 1.00 12.22 C +ATOM 202 CE2 PHE A 25 17.728 13.627 31.173 1.00 15.03 C +ATOM 203 CZ PHE A 25 18.193 13.883 29.883 1.00 13.24 C +ATOM 204 N LEU A 26 23.077 11.647 35.008 1.00 8.53 N +ATOM 205 CA LEU A 26 24.284 11.592 35.825 1.00 10.27 C +ATOM 206 C LEU A 26 25.305 10.752 35.054 1.00 7.43 C +ATOM 207 O LEU A 26 26.474 11.116 34.935 1.00 8.43 O +ATOM 208 CB LEU A 26 24.005 10.915 37.172 1.00 12.37 C +ATOM 209 CG LEU A 26 23.874 11.773 38.432 1.00 23.05 C +ATOM 210 CD1 LEU A 26 22.666 12.653 38.319 1.00 28.50 C +ATOM 211 CD2 LEU A 26 23.748 10.880 39.654 1.00 23.45 C +ATOM 212 N ASP A 27 24.847 9.626 34.519 1.00 8.78 N +ATOM 213 CA ASP A 27 25.724 8.732 33.779 1.00 6.87 C +ATOM 214 C ASP A 27 26.167 9.306 32.439 1.00 7.47 C +ATOM 215 O ASP A 27 27.331 9.171 32.059 1.00 8.28 O +ATOM 216 CB ASP A 27 25.053 7.370 33.581 1.00 10.81 C +ATOM 217 CG ASP A 27 24.911 6.601 34.882 1.00 11.54 C +ATOM 218 OD1 ASP A 27 25.857 6.645 35.699 1.00 9.76 O +ATOM 219 OD2 ASP A 27 23.868 5.947 35.086 1.00 10.25 O +ATOM 220 N VAL A 28 25.251 9.952 31.723 1.00 6.57 N +ATOM 221 CA VAL A 28 25.619 10.536 30.437 1.00 8.12 C +ATOM 222 C VAL A 28 26.681 11.616 30.644 1.00 10.25 C +ATOM 223 O VAL A 28 27.683 11.663 29.928 1.00 9.64 O +ATOM 224 CB VAL A 28 24.399 11.150 29.718 1.00 8.01 C +ATOM 225 CG1 VAL A 28 24.862 11.969 28.515 1.00 9.50 C +ATOM 226 CG2 VAL A 28 23.457 10.034 29.253 1.00 8.04 C +ATOM 227 N ARG A 29 26.475 12.475 31.636 1.00 10.05 N +ATOM 228 CA ARG A 29 27.444 13.536 31.898 1.00 11.15 C +ATOM 229 C ARG A 29 28.827 12.967 32.214 1.00 11.79 C +ATOM 230 O ARG A 29 29.835 13.455 31.704 1.00 12.01 O +ATOM 231 CB ARG A 29 26.970 14.422 33.053 1.00 9.99 C +ATOM 232 CG ARG A 29 25.831 15.367 32.695 1.00 10.18 C +ATOM 233 CD ARG A 29 25.445 16.189 33.912 1.00 10.25 C +ATOM 234 NE ARG A 29 24.425 17.192 33.628 1.00 14.64 N +ATOM 235 CZ ARG A 29 24.640 18.502 33.651 1.00 20.85 C +ATOM 236 NH1 ARG A 29 25.844 18.976 33.943 1.00 20.73 N +ATOM 237 NH2 ARG A 29 23.645 19.341 33.398 1.00 23.29 N +ATOM 238 N SER A 30 28.875 11.926 33.040 1.00 10.27 N +ATOM 239 CA SER A 30 30.149 11.310 33.406 1.00 10.98 C +ATOM 240 C SER A 30 30.842 10.609 32.239 1.00 13.07 C +ATOM 241 O SER A 30 32.064 10.454 32.245 1.00 12.79 O +ATOM 242 CB SER A 30 29.953 10.298 34.543 1.00 8.79 C +ATOM 243 OG SER A 30 29.665 10.953 35.765 1.00 12.96 O +ATOM 244 N SER A 31 30.067 10.189 31.243 1.00 12.07 N +ATOM 245 CA SER A 31 30.625 9.488 30.087 1.00 12.63 C +ATOM 246 C SER A 31 31.478 10.385 29.197 1.00 14.41 C +ATOM 247 O SER A 31 32.286 9.894 28.411 1.00 16.95 O +ATOM 248 CB SER A 31 29.507 8.879 29.237 1.00 15.15 C +ATOM 249 OG SER A 31 28.857 9.877 28.469 1.00 12.95 O +ATOM 250 N GLY A 32 31.289 11.694 29.312 1.00 16.32 N +ATOM 251 CA GLY A 32 32.051 12.623 28.496 1.00 17.33 C +ATOM 252 C GLY A 32 31.281 13.013 27.251 1.00 17.70 C +ATOM 253 O GLY A 32 31.649 13.951 26.540 1.00 16.74 O +ATOM 254 N SER A 33 30.205 12.284 26.981 1.00 14.11 N +ATOM 255 CA SER A 33 29.375 12.562 25.818 1.00 12.55 C +ATOM 256 C SER A 33 28.436 13.717 26.128 1.00 16.51 C +ATOM 257 O SER A 33 28.044 13.919 27.281 1.00 17.01 O +ATOM 258 CB SER A 33 28.557 11.324 25.442 1.00 12.31 C +ATOM 259 OG SER A 33 27.756 11.569 24.299 1.00 11.59 O +ATOM 260 N LYS A 34 28.081 14.476 25.099 1.00 15.42 N +ATOM 261 CA LYS A 34 27.176 15.601 25.267 1.00 17.53 C +ATOM 262 C LYS A 34 25.871 15.259 24.559 1.00 17.01 C +ATOM 263 O LYS A 34 24.970 16.090 24.465 1.00 17.51 O +ATOM 264 CB LYS A 34 27.785 16.869 24.656 1.00 21.02 C +ATOM 265 CG LYS A 34 29.250 17.100 25.025 1.00 25.18 C +ATOM 266 CD LYS A 34 29.463 17.088 26.533 1.00 29.46 C +ATOM 267 CE LYS A 34 30.942 17.190 26.884 1.00 31.20 C +ATOM 268 NZ LYS A 34 31.184 17.073 28.353 1.00 29.05 N +ATOM 269 N LYS A 35 25.781 14.020 24.078 1.00 16.37 N +ATOM 270 CA LYS A 35 24.604 13.544 23.358 1.00 13.55 C +ATOM 271 C LYS A 35 24.222 12.119 23.748 1.00 10.82 C +ATOM 272 O LYS A 35 25.074 11.303 24.092 1.00 12.00 O +ATOM 273 CB LYS A 35 24.861 13.551 21.851 1.00 14.65 C +ATOM 274 CG LYS A 35 25.180 14.899 21.239 1.00 23.77 C +ATOM 275 CD LYS A 35 25.571 14.724 19.774 1.00 29.96 C +ATOM 276 CE LYS A 35 25.766 16.063 19.075 1.00 34.03 C +ATOM 277 NZ LYS A 35 24.495 16.835 18.986 1.00 39.83 N +ATOM 278 N THR A 36 22.932 11.825 23.676 1.00 11.15 N +ATOM 279 CA THR A 36 22.449 10.487 23.972 1.00 9.64 C +ATOM 280 C THR A 36 21.129 10.278 23.253 1.00 8.90 C +ATOM 281 O THR A 36 20.336 11.211 23.103 1.00 11.37 O +ATOM 282 CB THR A 36 22.235 10.255 25.494 1.00 9.30 C +ATOM 283 OG1 THR A 36 21.808 8.903 25.714 1.00 11.46 O +ATOM 284 CG2 THR A 36 21.178 11.205 26.049 1.00 10.57 C +ATOM 285 N THR A 37 20.918 9.064 22.766 1.00 8.09 N +ATOM 286 CA THR A 37 19.669 8.733 22.098 1.00 8.90 C +ATOM 287 C THR A 37 18.999 7.773 23.072 1.00 9.34 C +ATOM 288 O THR A 37 19.467 6.652 23.292 1.00 10.35 O +ATOM 289 CB THR A 37 19.916 8.084 20.710 1.00 16.76 C +ATOM 290 OG1 THR A 37 18.661 7.702 20.136 1.00 18.76 O +ATOM 291 CG2 THR A 37 20.828 6.875 20.819 1.00 17.18 C +ATOM 292 N ILE A 38 17.924 8.254 23.685 1.00 8.42 N +ATOM 293 CA ILE A 38 17.186 7.508 24.697 1.00 9.46 C +ATOM 294 C ILE A 38 16.015 6.715 24.137 1.00 10.38 C +ATOM 295 O ILE A 38 15.143 7.264 23.462 1.00 11.66 O +ATOM 296 CB ILE A 38 16.668 8.472 25.778 1.00 9.91 C +ATOM 297 CG1 ILE A 38 17.829 9.320 26.300 1.00 12.94 C +ATOM 298 CG2 ILE A 38 16.015 7.697 26.913 1.00 9.08 C +ATOM 299 CD1 ILE A 38 17.408 10.432 27.235 1.00 11.43 C +ATOM 300 N ASN A 39 15.999 5.422 24.441 1.00 6.80 N +ATOM 301 CA ASN A 39 14.946 4.527 23.976 1.00 8.56 C +ATOM 302 C ASN A 39 14.206 3.962 25.172 1.00 8.17 C +ATOM 303 O ASN A 39 14.772 3.221 25.977 1.00 12.28 O +ATOM 304 CB ASN A 39 15.563 3.409 23.141 1.00 6.67 C +ATOM 305 CG ASN A 39 16.136 3.923 21.841 1.00 11.85 C +ATOM 306 OD1 ASN A 39 15.430 4.038 20.838 1.00 10.25 O +ATOM 307 ND2 ASN A 39 17.416 4.264 21.856 1.00 11.82 N +ATOM 308 N VAL A 40 12.932 4.318 25.272 1.00 9.81 N +ATOM 309 CA VAL A 40 12.091 3.905 26.380 1.00 10.60 C +ATOM 310 C VAL A 40 11.061 2.874 25.947 1.00 11.33 C +ATOM 311 O VAL A 40 10.274 3.117 25.035 1.00 13.32 O +ATOM 312 CB VAL A 40 11.351 5.120 26.969 1.00 10.53 C +ATOM 313 CG1 VAL A 40 10.654 4.734 28.265 1.00 9.46 C +ATOM 314 CG2 VAL A 40 12.328 6.266 27.186 1.00 10.11 C +ATOM 315 N PHE A 41 11.073 1.724 26.609 1.00 10.47 N +ATOM 316 CA PHE A 41 10.134 0.655 26.303 1.00 10.56 C +ATOM 317 C PHE A 41 9.024 0.767 27.336 1.00 14.51 C +ATOM 318 O PHE A 41 9.169 0.343 28.482 1.00 12.82 O +ATOM 319 CB PHE A 41 10.880 -0.674 26.364 1.00 11.18 C +ATOM 320 CG PHE A 41 12.024 -0.741 25.393 1.00 13.39 C +ATOM 321 CD1 PHE A 41 11.798 -1.046 24.052 1.00 11.41 C +ATOM 322 CD2 PHE A 41 13.314 -0.401 25.795 1.00 13.82 C +ATOM 323 CE1 PHE A 41 12.837 -1.005 23.125 1.00 12.58 C +ATOM 324 CE2 PHE A 41 14.361 -0.357 24.875 1.00 16.09 C +ATOM 325 CZ PHE A 41 14.120 -0.659 23.535 1.00 13.07 C +ATOM 326 N THR A 42 7.918 1.371 26.909 1.00 15.02 N +ATOM 327 CA THR A 42 6.788 1.623 27.790 1.00 14.54 C +ATOM 328 C THR A 42 5.495 1.721 26.988 1.00 15.87 C +ATOM 329 O THR A 42 5.521 1.803 25.764 1.00 14.97 O +ATOM 330 CB THR A 42 7.011 2.962 28.532 1.00 16.35 C +ATOM 331 OG1 THR A 42 5.902 3.242 29.391 1.00 16.32 O +ATOM 332 CG2 THR A 42 7.166 4.098 27.525 1.00 15.89 C +ATOM 333 N GLU A 43 4.366 1.718 27.689 1.00 18.33 N +ATOM 334 CA GLU A 43 3.063 1.834 27.041 1.00 22.06 C +ATOM 335 C GLU A 43 2.551 3.265 27.188 1.00 23.02 C +ATOM 336 O GLU A 43 1.500 3.621 26.656 1.00 22.29 O +ATOM 337 CB GLU A 43 2.065 0.859 27.673 1.00 21.32 C +ATOM 338 CG GLU A 43 2.461 -0.607 27.557 1.00 26.43 C +ATOM 339 CD GLU A 43 2.665 -1.048 26.118 1.00 31.13 C +ATOM 340 OE1 GLU A 43 1.763 -0.802 25.290 1.00 33.47 O +ATOM 341 OE2 GLU A 43 3.724 -1.642 25.815 1.00 32.35 O +ATOM 342 N ILE A 44 3.311 4.083 27.910 1.00 23.91 N +ATOM 343 CA ILE A 44 2.948 5.476 28.149 1.00 26.52 C +ATOM 344 C ILE A 44 3.168 6.328 26.894 1.00 27.74 C +ATOM 345 O ILE A 44 3.974 5.976 26.033 1.00 24.73 O +ATOM 346 CB ILE A 44 3.783 6.040 29.326 1.00 28.12 C +ATOM 347 CG1 ILE A 44 2.971 7.072 30.104 1.00 28.57 C +ATOM 348 CG2 ILE A 44 5.080 6.650 28.810 1.00 24.21 C +ATOM 349 CD1 ILE A 44 3.649 7.523 31.384 1.00 31.00 C +ATOM 350 N GLN A 45 2.447 7.444 26.787 1.00 29.19 N +ATOM 351 CA GLN A 45 2.580 8.334 25.633 1.00 30.61 C +ATOM 352 C GLN A 45 3.693 9.358 25.823 1.00 28.49 C +ATOM 353 O GLN A 45 4.030 9.722 26.950 1.00 29.37 O +ATOM 354 CB GLN A 45 1.258 9.058 25.363 1.00 36.95 C +ATOM 355 CG GLN A 45 0.165 8.172 24.788 1.00 48.09 C +ATOM 356 CD GLN A 45 0.496 7.672 23.394 1.00 54.95 C +ATOM 357 OE1 GLN A 45 0.715 8.463 22.477 1.00 59.19 O +ATOM 358 NE2 GLN A 45 0.531 6.354 23.229 1.00 59.21 N +ATOM 359 N TYR A 46 4.248 9.823 24.708 1.00 24.28 N +ATOM 360 CA TYR A 46 5.337 10.793 24.713 1.00 24.71 C +ATOM 361 C TYR A 46 5.090 11.982 25.639 1.00 25.54 C +ATOM 362 O TYR A 46 5.881 12.250 26.541 1.00 22.81 O +ATOM 363 CB TYR A 46 5.583 11.314 23.296 1.00 23.11 C +ATOM 364 CG TYR A 46 6.881 12.075 23.142 1.00 27.98 C +ATOM 365 CD1 TYR A 46 8.087 11.399 22.962 1.00 31.13 C +ATOM 366 CD2 TYR A 46 6.910 13.468 23.200 1.00 28.93 C +ATOM 367 CE1 TYR A 46 9.291 12.088 22.845 1.00 32.93 C +ATOM 368 CE2 TYR A 46 8.113 14.169 23.086 1.00 32.03 C +ATOM 369 CZ TYR A 46 9.298 13.470 22.909 1.00 32.08 C +ATOM 370 OH TYR A 46 10.492 14.148 22.803 1.00 33.47 O +ATOM 371 N GLN A 47 3.994 12.697 25.406 1.00 24.63 N +ATOM 372 CA GLN A 47 3.667 13.870 26.208 1.00 25.17 C +ATOM 373 C GLN A 47 3.568 13.610 27.706 1.00 23.21 C +ATOM 374 O GLN A 47 3.976 14.450 28.507 1.00 24.07 O +ATOM 375 CB GLN A 47 2.370 14.508 25.706 1.00 28.35 C +ATOM 376 CG GLN A 47 2.495 15.121 24.321 1.00 36.99 C +ATOM 377 CD GLN A 47 3.718 16.012 24.190 1.00 43.34 C +ATOM 378 OE1 GLN A 47 3.944 16.904 25.011 1.00 46.34 O +ATOM 379 NE2 GLN A 47 4.514 15.776 23.152 1.00 45.64 N +ATOM 380 N GLU A 48 3.025 12.459 28.091 1.00 23.97 N +ATOM 381 CA GLU A 48 2.911 12.138 29.507 1.00 22.97 C +ATOM 382 C GLU A 48 4.296 11.901 30.099 1.00 22.51 C +ATOM 383 O GLU A 48 4.583 12.325 31.217 1.00 17.54 O +ATOM 384 CB GLU A 48 2.029 10.903 29.720 1.00 27.75 C +ATOM 385 CG GLU A 48 2.033 10.402 31.160 1.00 35.85 C +ATOM 386 CD GLU A 48 0.862 9.493 31.483 1.00 42.98 C +ATOM 387 OE1 GLU A 48 0.527 8.621 30.652 1.00 46.34 O +ATOM 388 OE2 GLU A 48 0.281 9.645 32.578 1.00 44.85 O +ATOM 389 N LEU A 49 5.157 11.228 29.342 1.00 18.62 N +ATOM 390 CA LEU A 49 6.510 10.961 29.811 1.00 18.78 C +ATOM 391 C LEU A 49 7.267 12.268 30.002 1.00 17.00 C +ATOM 392 O LEU A 49 7.848 12.511 31.058 1.00 16.05 O +ATOM 393 CB LEU A 49 7.269 10.084 28.811 1.00 16.29 C +ATOM 394 CG LEU A 49 8.755 9.895 29.139 1.00 16.44 C +ATOM 395 CD1 LEU A 49 8.901 9.183 30.479 1.00 17.18 C +ATOM 396 CD2 LEU A 49 9.432 9.102 28.033 1.00 19.52 C +ATOM 397 N VAL A 50 7.262 13.102 28.967 1.00 16.87 N +ATOM 398 CA VAL A 50 7.953 14.385 29.010 1.00 15.59 C +ATOM 399 C VAL A 50 7.490 15.214 30.201 1.00 17.36 C +ATOM 400 O VAL A 50 8.260 15.984 30.771 1.00 15.94 O +ATOM 401 CB VAL A 50 7.715 15.185 27.712 1.00 20.49 C +ATOM 402 CG1 VAL A 50 8.450 16.511 27.775 1.00 22.89 C +ATOM 403 CG2 VAL A 50 8.186 14.373 26.511 1.00 20.90 C +ATOM 404 N THR A 51 6.222 15.061 30.568 1.00 16.58 N +ATOM 405 CA THR A 51 5.677 15.789 31.705 1.00 13.61 C +ATOM 406 C THR A 51 6.308 15.251 32.989 1.00 13.20 C +ATOM 407 O THR A 51 6.723 16.020 33.856 1.00 14.98 O +ATOM 408 CB THR A 51 4.147 15.633 31.774 1.00 16.56 C +ATOM 409 OG1 THR A 51 3.559 16.293 30.645 1.00 19.12 O +ATOM 410 CG2 THR A 51 3.597 16.237 33.060 1.00 17.52 C +ATOM 411 N LEU A 52 6.396 13.929 33.099 1.00 13.91 N +ATOM 412 CA LEU A 52 6.985 13.303 34.279 1.00 13.78 C +ATOM 413 C LEU A 52 8.467 13.623 34.464 1.00 16.52 C +ATOM 414 O LEU A 52 8.925 13.837 35.587 1.00 20.03 O +ATOM 415 CB LEU A 52 6.814 11.781 34.219 1.00 15.00 C +ATOM 416 CG LEU A 52 5.407 11.210 34.404 1.00 18.12 C +ATOM 417 CD1 LEU A 52 5.443 9.698 34.229 1.00 19.35 C +ATOM 418 CD2 LEU A 52 4.885 11.576 35.785 1.00 20.14 C +ATOM 419 N ILE A 53 9.220 13.657 33.371 1.00 13.70 N +ATOM 420 CA ILE A 53 10.653 13.921 33.466 1.00 15.34 C +ATOM 421 C ILE A 53 11.051 15.357 33.146 1.00 16.08 C +ATOM 422 O ILE A 53 12.228 15.643 32.926 1.00 12.68 O +ATOM 423 CB ILE A 53 11.451 12.979 32.540 1.00 13.70 C +ATOM 424 CG1 ILE A 53 11.137 13.288 31.076 1.00 12.89 C +ATOM 425 CG2 ILE A 53 11.112 11.530 32.859 1.00 15.48 C +ATOM 426 CD1 ILE A 53 11.973 12.498 30.092 1.00 17.37 C +ATOM 427 N ARG A 54 10.075 16.259 33.133 1.00 14.93 N +ATOM 428 CA ARG A 54 10.339 17.663 32.831 1.00 17.46 C +ATOM 429 C ARG A 54 11.521 18.227 33.615 1.00 15.05 C +ATOM 430 O ARG A 54 12.396 18.875 33.043 1.00 13.17 O +ATOM 431 CB ARG A 54 9.100 18.515 33.120 1.00 21.33 C +ATOM 432 CG ARG A 54 9.292 19.993 32.805 1.00 27.86 C +ATOM 433 CD ARG A 54 8.119 20.838 33.282 1.00 38.40 C +ATOM 434 NE ARG A 54 7.921 20.738 34.727 1.00 45.55 N +ATOM 435 CZ ARG A 54 6.935 20.058 35.304 1.00 48.28 C +ATOM 436 NH1 ARG A 54 6.838 20.021 36.627 1.00 49.43 N +ATOM 437 NH2 ARG A 54 6.037 19.424 34.560 1.00 44.89 N +ATOM 438 N GLU A 55 11.542 17.982 34.922 1.00 14.40 N +ATOM 439 CA GLU A 55 12.616 18.484 35.777 1.00 18.96 C +ATOM 440 C GLU A 55 13.983 17.950 35.365 1.00 15.03 C +ATOM 441 O GLU A 55 14.967 18.691 35.337 1.00 13.65 O +ATOM 442 CB GLU A 55 12.335 18.123 37.240 1.00 20.18 C +ATOM 443 CG GLU A 55 13.348 18.673 38.231 1.00 27.21 C +ATOM 444 CD GLU A 55 13.525 20.176 38.117 1.00 30.48 C +ATOM 445 OE1 GLU A 55 12.515 20.882 37.911 1.00 32.00 O +ATOM 446 OE2 GLU A 55 14.673 20.653 38.246 1.00 30.82 O +ATOM 447 N ALA A 56 14.046 16.664 35.041 1.00 15.12 N +ATOM 448 CA ALA A 56 15.308 16.061 34.628 1.00 13.23 C +ATOM 449 C ALA A 56 15.794 16.704 33.334 1.00 12.47 C +ATOM 450 O ALA A 56 16.980 16.980 33.175 1.00 12.54 O +ATOM 451 CB ALA A 56 15.137 14.559 34.439 1.00 12.68 C +ATOM 452 N LEU A 57 14.873 16.938 32.404 1.00 8.74 N +ATOM 453 CA LEU A 57 15.230 17.554 31.136 1.00 7.77 C +ATOM 454 C LEU A 57 15.739 18.981 31.332 1.00 8.61 C +ATOM 455 O LEU A 57 16.717 19.390 30.700 1.00 9.52 O +ATOM 456 CB LEU A 57 14.023 17.558 30.189 1.00 10.14 C +ATOM 457 CG LEU A 57 13.440 16.175 29.888 1.00 9.25 C +ATOM 458 CD1 LEU A 57 12.287 16.312 28.914 1.00 10.72 C +ATOM 459 CD2 LEU A 57 14.518 15.277 29.300 1.00 10.29 C +ATOM 460 N LEU A 58 15.081 19.731 32.211 1.00 9.14 N +ATOM 461 CA LEU A 58 15.472 21.111 32.480 1.00 10.13 C +ATOM 462 C LEU A 58 16.850 21.191 33.132 1.00 9.44 C +ATOM 463 O LEU A 58 17.678 22.021 32.756 1.00 9.82 O +ATOM 464 CB LEU A 58 14.433 21.785 33.386 1.00 13.24 C +ATOM 465 CG LEU A 58 14.756 23.201 33.871 1.00 18.30 C +ATOM 466 CD1 LEU A 58 14.880 24.140 32.686 1.00 21.51 C +ATOM 467 CD2 LEU A 58 13.657 23.679 34.814 1.00 25.65 C +ATOM 468 N GLU A 59 17.090 20.322 34.107 1.00 8.78 N +ATOM 469 CA GLU A 59 18.364 20.302 34.818 1.00 11.12 C +ATOM 470 C GLU A 59 19.538 19.936 33.920 1.00 11.69 C +ATOM 471 O GLU A 59 20.687 20.279 34.210 1.00 12.28 O +ATOM 472 CB GLU A 59 18.304 19.309 35.980 1.00 13.15 C +ATOM 473 CG GLU A 59 17.497 19.777 37.170 1.00 17.13 C +ATOM 474 CD GLU A 59 17.449 18.742 38.275 1.00 18.20 C +ATOM 475 OE1 GLU A 59 18.404 17.944 38.381 1.00 18.34 O +ATOM 476 OE2 GLU A 59 16.466 18.734 39.045 1.00 19.18 O +ATOM 477 N ASN A 60 19.249 19.245 32.826 1.00 9.78 N +ATOM 478 CA ASN A 60 20.295 18.811 31.914 1.00 10.61 C +ATOM 479 C ASN A 60 20.108 19.363 30.509 1.00 12.44 C +ATOM 480 O ASN A 60 20.324 18.670 29.515 1.00 10.50 O +ATOM 481 CB ASN A 60 20.327 17.286 31.914 1.00 11.88 C +ATOM 482 CG ASN A 60 20.659 16.731 33.279 1.00 11.93 C +ATOM 483 OD1 ASN A 60 21.817 16.741 33.693 1.00 13.53 O +ATOM 484 ND2 ASN A 60 19.640 16.277 34.007 1.00 9.60 N +ATOM 485 N ILE A 61 19.726 20.634 30.453 1.00 14.87 N +ATOM 486 CA ILE A 61 19.486 21.340 29.203 1.00 14.76 C +ATOM 487 C ILE A 61 20.688 21.322 28.253 1.00 15.03 C +ATOM 488 O ILE A 61 20.517 21.351 27.035 1.00 13.45 O +ATOM 489 CB ILE A 61 19.085 22.812 29.492 1.00 15.88 C +ATOM 490 CG1 ILE A 61 18.626 23.505 28.208 1.00 20.00 C +ATOM 491 CG2 ILE A 61 20.250 23.555 30.119 1.00 19.27 C +ATOM 492 CD1 ILE A 61 17.277 23.039 27.718 1.00 24.49 C +ATOM 493 N ASP A 62 21.900 21.274 28.803 1.00 13.67 N +ATOM 494 CA ASP A 62 23.103 21.264 27.972 1.00 14.54 C +ATOM 495 C ASP A 62 23.280 19.967 27.191 1.00 14.65 C +ATOM 496 O ASP A 62 23.929 19.953 26.146 1.00 18.15 O +ATOM 497 CB ASP A 62 24.359 21.499 28.819 1.00 17.19 C +ATOM 498 CG ASP A 62 24.426 22.899 29.397 1.00 23.32 C +ATOM 499 OD1 ASP A 62 23.613 23.757 28.991 1.00 22.32 O +ATOM 500 OD2 ASP A 62 25.304 23.141 30.253 1.00 23.74 O +ATOM 501 N ILE A 63 22.711 18.880 27.699 1.00 12.30 N +ATOM 502 CA ILE A 63 22.830 17.585 27.038 1.00 12.18 C +ATOM 503 C ILE A 63 21.861 17.474 25.867 1.00 14.22 C +ATOM 504 O ILE A 63 20.675 17.746 26.010 1.00 18.15 O +ATOM 505 CB ILE A 63 22.543 16.420 28.018 1.00 13.92 C +ATOM 506 CG1 ILE A 63 23.548 16.441 29.172 1.00 17.28 C +ATOM 507 CG2 ILE A 63 22.620 15.091 27.280 1.00 14.00 C +ATOM 508 CD1 ILE A 63 24.995 16.287 28.735 1.00 17.06 C +ATOM 509 N GLY A 64 22.375 17.081 24.708 1.00 14.14 N +ATOM 510 CA GLY A 64 21.516 16.922 23.552 1.00 16.94 C +ATOM 511 C GLY A 64 20.961 15.515 23.593 1.00 18.30 C +ATOM 512 O GLY A 64 21.693 14.568 23.869 1.00 20.02 O +ATOM 513 N TYR A 65 19.673 15.357 23.331 1.00 18.65 N +ATOM 514 CA TYR A 65 19.100 14.024 23.372 1.00 18.31 C +ATOM 515 C TYR A 65 17.954 13.851 22.395 1.00 20.44 C +ATOM 516 O TYR A 65 17.351 14.821 21.934 1.00 19.03 O +ATOM 517 CB TYR A 65 18.598 13.718 24.790 1.00 22.93 C +ATOM 518 CG TYR A 65 17.282 14.393 25.118 1.00 22.93 C +ATOM 519 CD1 TYR A 65 16.071 13.842 24.693 1.00 27.91 C +ATOM 520 CD2 TYR A 65 17.249 15.608 25.797 1.00 24.79 C +ATOM 521 CE1 TYR A 65 14.862 14.486 24.929 1.00 26.74 C +ATOM 522 CE2 TYR A 65 16.042 16.264 26.040 1.00 26.83 C +ATOM 523 CZ TYR A 65 14.853 15.695 25.600 1.00 28.42 C +ATOM 524 OH TYR A 65 13.655 16.334 25.824 1.00 30.78 O +ATOM 525 N GLU A 66 17.679 12.593 22.080 1.00 19.35 N +ATOM 526 CA GLU A 66 16.576 12.221 21.212 1.00 18.13 C +ATOM 527 C GLU A 66 15.814 11.238 22.081 1.00 17.07 C +ATOM 528 O GLU A 66 16.422 10.477 22.836 1.00 13.89 O +ATOM 529 CB GLU A 66 17.066 11.523 19.944 1.00 22.10 C +ATOM 530 CG GLU A 66 17.781 12.427 18.959 1.00 31.96 C +ATOM 531 CD GLU A 66 18.028 11.743 17.627 1.00 38.40 C +ATOM 532 OE1 GLU A 66 18.679 10.676 17.616 1.00 42.11 O +ATOM 533 OE2 GLU A 66 17.569 12.272 16.592 1.00 43.89 O +ATOM 534 N LEU A 67 14.491 11.264 21.992 1.00 15.56 N +ATOM 535 CA LEU A 67 13.666 10.376 22.794 1.00 14.40 C +ATOM 536 C LEU A 67 12.745 9.543 21.909 1.00 14.70 C +ATOM 537 O LEU A 67 11.996 10.080 21.093 1.00 15.80 O +ATOM 538 CB LEU A 67 12.839 11.203 23.785 1.00 16.90 C +ATOM 539 CG LEU A 67 11.914 10.470 24.757 1.00 19.24 C +ATOM 540 CD1 LEU A 67 12.727 9.532 25.637 1.00 21.66 C +ATOM 541 CD2 LEU A 67 11.172 11.489 25.610 1.00 20.68 C +ATOM 542 N PHE A 68 12.818 8.227 22.076 1.00 11.13 N +ATOM 543 CA PHE A 68 11.996 7.298 21.314 1.00 12.93 C +ATOM 544 C PHE A 68 11.285 6.355 22.272 1.00 12.63 C +ATOM 545 O PHE A 68 11.911 5.759 23.149 1.00 12.01 O +ATOM 546 CB PHE A 68 12.866 6.479 20.355 1.00 12.05 C +ATOM 547 CG PHE A 68 13.523 7.296 19.285 1.00 14.59 C +ATOM 548 CD1 PHE A 68 12.792 7.756 18.195 1.00 14.07 C +ATOM 549 CD2 PHE A 68 14.870 7.625 19.375 1.00 15.16 C +ATOM 550 CE1 PHE A 68 13.394 8.532 17.208 1.00 15.37 C +ATOM 551 CE2 PHE A 68 15.482 8.401 18.393 1.00 17.63 C +ATOM 552 CZ PHE A 68 14.744 8.856 17.308 1.00 18.22 C +ATOM 553 N LEU A 69 9.974 6.232 22.112 1.00 12.84 N +ATOM 554 CA LEU A 69 9.198 5.334 22.955 1.00 13.24 C +ATOM 555 C LEU A 69 8.765 4.137 22.123 1.00 14.32 C +ATOM 556 O LEU A 69 8.332 4.289 20.978 1.00 13.65 O +ATOM 557 CB LEU A 69 7.968 6.046 23.526 1.00 14.24 C +ATOM 558 CG LEU A 69 8.206 6.979 24.718 1.00 18.28 C +ATOM 559 CD1 LEU A 69 9.175 8.085 24.331 1.00 18.52 C +ATOM 560 CD2 LEU A 69 6.879 7.565 25.175 1.00 19.14 C +ATOM 561 N TRP A 70 8.900 2.949 22.702 1.00 12.36 N +ATOM 562 CA TRP A 70 8.536 1.716 22.025 1.00 13.82 C +ATOM 563 C TRP A 70 7.665 0.826 22.889 1.00 14.23 C +ATOM 564 O TRP A 70 7.958 0.612 24.063 1.00 14.03 O +ATOM 565 CB TRP A 70 9.783 0.908 21.663 1.00 10.85 C +ATOM 566 CG TRP A 70 10.830 1.673 20.944 1.00 10.51 C +ATOM 567 CD1 TRP A 70 12.000 2.158 21.461 1.00 11.33 C +ATOM 568 CD2 TRP A 70 10.815 2.036 19.565 1.00 9.50 C +ATOM 569 NE1 TRP A 70 12.718 2.801 20.477 1.00 10.64 N +ATOM 570 CE2 TRP A 70 12.012 2.740 19.305 1.00 9.79 C +ATOM 571 CE3 TRP A 70 9.905 1.834 18.520 1.00 12.09 C +ATOM 572 CZ2 TRP A 70 12.322 3.243 18.038 1.00 11.85 C +ATOM 573 CZ3 TRP A 70 10.215 2.336 17.259 1.00 12.80 C +ATOM 574 CH2 TRP A 70 11.414 3.031 17.031 1.00 14.03 C +ATOM 575 N LYS A 71 6.585 0.311 22.315 1.00 16.48 N +ATOM 576 CA LYS A 71 5.751 -0.615 23.057 1.00 18.93 C +ATOM 577 C LYS A 71 6.589 -1.886 22.981 1.00 22.72 C +ATOM 578 O LYS A 71 7.369 -2.052 22.045 1.00 20.37 O +ATOM 579 CB LYS A 71 4.404 -0.808 22.362 1.00 21.31 C +ATOM 580 CG LYS A 71 3.515 0.422 22.417 1.00 26.79 C +ATOM 581 CD LYS A 71 2.153 0.147 21.800 1.00 34.56 C +ATOM 582 CE LYS A 71 1.226 1.341 21.964 1.00 38.54 C +ATOM 583 NZ LYS A 71 1.787 2.569 21.336 1.00 42.94 N +ATOM 584 N LYS A 72 6.453 -2.775 23.957 1.00 25.48 N +ATOM 585 CA LYS A 72 7.250 -3.995 23.956 1.00 28.37 C +ATOM 586 C LYS A 72 7.172 -4.780 22.646 1.00 25.79 C +ATOM 587 O LYS A 72 8.112 -5.485 22.282 1.00 26.09 O +ATOM 588 CB LYS A 72 6.847 -4.875 25.142 1.00 33.91 C +ATOM 589 CG LYS A 72 7.142 -4.215 26.484 1.00 41.92 C +ATOM 590 CD LYS A 72 6.760 -5.093 27.661 1.00 49.29 C +ATOM 591 CE LYS A 72 7.062 -4.389 28.976 1.00 53.30 C +ATOM 592 NZ LYS A 72 6.675 -5.210 30.154 1.00 56.26 N +ATOM 593 N ASN A 73 6.063 -4.638 21.929 1.00 22.90 N +ATOM 594 CA ASN A 73 5.882 -5.339 20.663 1.00 22.29 C +ATOM 595 C ASN A 73 6.590 -4.636 19.501 1.00 18.11 C +ATOM 596 O ASN A 73 6.606 -5.141 18.379 1.00 16.58 O +ATOM 597 CB ASN A 73 4.388 -5.471 20.351 1.00 26.17 C +ATOM 598 CG ASN A 73 3.713 -4.126 20.148 1.00 30.05 C +ATOM 599 OD1 ASN A 73 3.996 -3.417 19.182 1.00 34.23 O +ATOM 600 ND2 ASN A 73 2.815 -3.767 21.060 1.00 33.29 N +ATOM 601 N GLU A 74 7.181 -3.476 19.774 1.00 15.76 N +ATOM 602 CA GLU A 74 7.876 -2.716 18.737 1.00 12.60 C +ATOM 603 C GLU A 74 9.394 -2.799 18.865 1.00 10.48 C +ATOM 604 O GLU A 74 10.123 -2.059 18.200 1.00 9.42 O +ATOM 605 CB GLU A 74 7.441 -1.250 18.779 1.00 16.35 C +ATOM 606 CG GLU A 74 5.944 -1.042 18.607 1.00 17.92 C +ATOM 607 CD GLU A 74 5.549 0.420 18.673 1.00 20.34 C +ATOM 608 OE1 GLU A 74 5.999 1.117 19.606 1.00 16.46 O +ATOM 609 OE2 GLU A 74 4.782 0.874 17.800 1.00 19.67 O +ATOM 610 N VAL A 75 9.871 -3.700 19.715 1.00 9.06 N +ATOM 611 CA VAL A 75 11.307 -3.853 19.904 1.00 10.52 C +ATOM 612 C VAL A 75 12.000 -4.150 18.577 1.00 10.22 C +ATOM 613 O VAL A 75 13.149 -3.753 18.366 1.00 11.77 O +ATOM 614 CB VAL A 75 11.630 -4.984 20.903 1.00 11.34 C +ATOM 615 CG1 VAL A 75 13.144 -5.106 21.081 1.00 15.60 C +ATOM 616 CG2 VAL A 75 10.972 -4.693 22.241 1.00 17.33 C +ATOM 617 N ASP A 76 11.312 -4.838 17.672 1.00 9.91 N +ATOM 618 CA ASP A 76 11.929 -5.147 16.387 1.00 12.34 C +ATOM 619 C ASP A 76 12.226 -3.892 15.563 1.00 9.21 C +ATOM 620 O ASP A 76 13.214 -3.852 14.831 1.00 9.36 O +ATOM 621 CB ASP A 76 11.070 -6.145 15.589 1.00 14.04 C +ATOM 622 CG ASP A 76 9.660 -5.646 15.307 1.00 17.54 C +ATOM 623 OD1 ASP A 76 9.238 -4.607 15.857 1.00 13.26 O +ATOM 624 OD2 ASP A 76 8.960 -6.325 14.525 1.00 15.98 O +ATOM 625 N ILE A 77 11.388 -2.865 15.690 1.00 7.60 N +ATOM 626 CA ILE A 77 11.612 -1.620 14.956 1.00 8.71 C +ATOM 627 C ILE A 77 12.832 -0.927 15.568 1.00 9.62 C +ATOM 628 O ILE A 77 13.683 -0.391 14.857 1.00 8.90 O +ATOM 629 CB ILE A 77 10.393 -0.676 15.051 1.00 10.93 C +ATOM 630 CG1 ILE A 77 9.149 -1.364 14.476 1.00 10.71 C +ATOM 631 CG2 ILE A 77 10.673 0.611 14.282 1.00 10.85 C +ATOM 632 CD1 ILE A 77 7.862 -0.594 14.705 1.00 12.30 C +ATOM 633 N PHE A 78 12.907 -0.944 16.894 1.00 7.81 N +ATOM 634 CA PHE A 78 14.037 -0.347 17.592 1.00 8.65 C +ATOM 635 C PHE A 78 15.349 -0.969 17.115 1.00 11.53 C +ATOM 636 O PHE A 78 16.296 -0.264 16.767 1.00 11.69 O +ATOM 637 CB PHE A 78 13.900 -0.555 19.101 1.00 8.63 C +ATOM 638 CG PHE A 78 15.210 -0.506 19.831 1.00 10.37 C +ATOM 639 CD1 PHE A 78 15.906 0.690 19.962 1.00 13.42 C +ATOM 640 CD2 PHE A 78 15.776 -1.673 20.335 1.00 11.53 C +ATOM 641 CE1 PHE A 78 17.155 0.722 20.581 1.00 15.39 C +ATOM 642 CE2 PHE A 78 17.025 -1.651 20.955 1.00 11.81 C +ATOM 643 CZ PHE A 78 17.713 -0.451 21.077 1.00 14.87 C +ATOM 644 N LEU A 79 15.400 -2.296 17.108 1.00 10.16 N +ATOM 645 CA LEU A 79 16.603 -3.000 16.689 1.00 9.69 C +ATOM 646 C LEU A 79 16.961 -2.733 15.231 1.00 10.98 C +ATOM 647 O LEU A 79 18.139 -2.623 14.893 1.00 10.05 O +ATOM 648 CB LEU A 79 16.443 -4.500 16.940 1.00 11.59 C +ATOM 649 CG LEU A 79 16.470 -4.879 18.425 1.00 9.25 C +ATOM 650 CD1 LEU A 79 15.977 -6.304 18.620 1.00 13.42 C +ATOM 651 CD2 LEU A 79 17.888 -4.720 18.953 1.00 12.07 C +ATOM 652 N LYS A 80 15.954 -2.620 14.369 1.00 10.41 N +ATOM 653 CA LYS A 80 16.218 -2.349 12.958 1.00 10.15 C +ATOM 654 C LYS A 80 16.780 -0.939 12.799 1.00 10.76 C +ATOM 655 O LYS A 80 17.782 -0.733 12.114 1.00 10.37 O +ATOM 656 CB LYS A 80 14.940 -2.495 12.126 1.00 12.27 C +ATOM 657 CG LYS A 80 15.145 -2.238 10.633 1.00 16.44 C +ATOM 658 CD LYS A 80 16.171 -3.193 10.040 1.00 20.17 C +ATOM 659 CE LYS A 80 16.448 -2.877 8.575 1.00 24.66 C +ATOM 660 NZ LYS A 80 17.426 -3.837 7.977 1.00 25.43 N +ATOM 661 N ASN A 81 16.134 0.032 13.438 1.00 8.82 N +ATOM 662 CA ASN A 81 16.580 1.417 13.367 1.00 9.52 C +ATOM 663 C ASN A 81 17.985 1.579 13.938 1.00 9.21 C +ATOM 664 O ASN A 81 18.736 2.458 13.516 1.00 8.16 O +ATOM 665 CB ASN A 81 15.615 2.325 14.133 1.00 6.26 C +ATOM 666 CG ASN A 81 14.281 2.498 13.423 1.00 9.62 C +ATOM 667 OD1 ASN A 81 14.035 1.894 12.378 1.00 9.19 O +ATOM 668 ND2 ASN A 81 13.414 3.328 13.993 1.00 6.70 N +ATOM 669 N LEU A 82 18.331 0.736 14.904 1.00 8.29 N +ATOM 670 CA LEU A 82 19.650 0.796 15.531 1.00 9.25 C +ATOM 671 C LEU A 82 20.761 0.619 14.493 1.00 10.59 C +ATOM 672 O LEU A 82 21.870 1.130 14.661 1.00 9.88 O +ATOM 673 CB LEU A 82 19.762 -0.282 16.614 1.00 9.95 C +ATOM 674 CG LEU A 82 21.043 -0.292 17.456 1.00 14.09 C +ATOM 675 CD1 LEU A 82 21.245 1.066 18.111 1.00 13.71 C +ATOM 676 CD2 LEU A 82 20.950 -1.389 18.509 1.00 10.74 C +ATOM 677 N GLU A 83 20.458 -0.095 13.413 1.00 9.50 N +ATOM 678 CA GLU A 83 21.448 -0.317 12.362 1.00 11.88 C +ATOM 679 C GLU A 83 21.947 0.992 11.755 1.00 12.86 C +ATOM 680 O GLU A 83 23.071 1.058 11.257 1.00 13.04 O +ATOM 681 CB GLU A 83 20.865 -1.191 11.249 1.00 12.61 C +ATOM 682 CG GLU A 83 20.452 -2.577 11.705 1.00 14.42 C +ATOM 683 CD GLU A 83 19.991 -3.454 10.558 1.00 18.48 C +ATOM 684 OE1 GLU A 83 19.859 -2.939 9.430 1.00 18.66 O +ATOM 685 OE2 GLU A 83 19.754 -4.658 10.787 1.00 22.59 O +ATOM 686 N LYS A 84 21.115 2.030 11.799 1.00 11.63 N +ATOM 687 CA LYS A 84 21.477 3.330 11.232 1.00 14.14 C +ATOM 688 C LYS A 84 21.896 4.374 12.268 1.00 16.24 C +ATOM 689 O LYS A 84 22.274 5.489 11.911 1.00 17.54 O +ATOM 690 CB LYS A 84 20.302 3.900 10.431 1.00 13.67 C +ATOM 691 CG LYS A 84 19.888 3.087 9.219 1.00 18.74 C +ATOM 692 CD LYS A 84 18.672 3.720 8.549 1.00 19.43 C +ATOM 693 CE LYS A 84 18.253 2.953 7.308 1.00 25.40 C +ATOM 694 NZ LYS A 84 19.315 2.959 6.266 1.00 30.14 N +ATOM 695 N SER A 85 21.823 4.016 13.544 1.00 12.83 N +ATOM 696 CA SER A 85 22.165 4.943 14.616 1.00 16.34 C +ATOM 697 C SER A 85 23.641 4.895 14.983 1.00 17.60 C +ATOM 698 O SER A 85 24.186 3.830 15.267 1.00 14.60 O +ATOM 699 CB SER A 85 21.316 4.638 15.855 1.00 18.24 C +ATOM 700 OG SER A 85 21.550 5.583 16.885 1.00 25.32 O +ATOM 701 N GLU A 86 24.281 6.058 14.976 1.00 16.65 N +ATOM 702 CA GLU A 86 25.691 6.148 15.318 1.00 20.54 C +ATOM 703 C GLU A 86 25.847 6.356 16.818 1.00 19.99 C +ATOM 704 O GLU A 86 25.795 7.484 17.308 1.00 23.78 O +ATOM 705 CB GLU A 86 26.349 7.301 14.555 1.00 25.96 C +ATOM 706 CG GLU A 86 27.754 7.656 15.035 1.00 39.12 C +ATOM 707 CD GLU A 86 28.656 6.445 15.179 1.00 45.75 C +ATOM 708 OE1 GLU A 86 28.753 5.654 14.216 1.00 50.19 O +ATOM 709 OE2 GLU A 86 29.275 6.290 16.256 1.00 50.06 O +ATOM 710 N VAL A 87 26.020 5.254 17.540 1.00 20.16 N +ATOM 711 CA VAL A 87 26.198 5.286 18.989 1.00 18.68 C +ATOM 712 C VAL A 87 27.523 4.612 19.338 1.00 18.77 C +ATOM 713 O VAL A 87 27.977 3.724 18.616 1.00 17.50 O +ATOM 714 CB VAL A 87 25.051 4.552 19.704 1.00 18.06 C +ATOM 715 CG1 VAL A 87 23.748 5.309 19.504 1.00 20.67 C +ATOM 716 CG2 VAL A 87 24.926 3.138 19.163 1.00 18.82 C +ATOM 717 N ASP A 88 28.144 5.031 20.439 1.00 16.11 N +ATOM 718 CA ASP A 88 29.428 4.461 20.846 1.00 16.31 C +ATOM 719 C ASP A 88 29.521 4.009 22.300 1.00 20.76 C +ATOM 720 O ASP A 88 30.507 3.385 22.698 1.00 25.38 O +ATOM 721 CB ASP A 88 30.556 5.454 20.570 1.00 19.28 C +ATOM 722 CG ASP A 88 30.224 6.857 21.036 1.00 18.16 C +ATOM 723 OD1 ASP A 88 29.422 7.004 21.984 1.00 19.26 O +ATOM 724 OD2 ASP A 88 30.779 7.813 20.458 1.00 20.16 O +ATOM 725 N GLY A 89 28.514 4.344 23.094 1.00 14.98 N +ATOM 726 CA GLY A 89 28.505 3.944 24.492 1.00 11.49 C +ATOM 727 C GLY A 89 27.131 3.392 24.807 1.00 11.28 C +ATOM 728 O GLY A 89 26.179 3.676 24.081 1.00 11.07 O +ATOM 729 N LEU A 90 27.014 2.623 25.887 1.00 7.86 N +ATOM 730 CA LEU A 90 25.732 2.028 26.248 1.00 8.27 C +ATOM 731 C LEU A 90 25.364 2.179 27.720 1.00 6.84 C +ATOM 732 O LEU A 90 26.191 1.947 28.599 1.00 8.06 O +ATOM 733 CB LEU A 90 25.743 0.539 25.897 1.00 9.22 C +ATOM 734 CG LEU A 90 24.518 -0.287 26.296 1.00 7.17 C +ATOM 735 CD1 LEU A 90 23.307 0.167 25.493 1.00 7.45 C +ATOM 736 CD2 LEU A 90 24.793 -1.763 26.048 1.00 10.76 C +ATOM 737 N LEU A 91 24.115 2.563 27.969 1.00 6.67 N +ATOM 738 CA LEU A 91 23.578 2.701 29.323 1.00 5.88 C +ATOM 739 C LEU A 91 22.297 1.877 29.362 1.00 7.65 C +ATOM 740 O LEU A 91 21.460 1.981 28.461 1.00 7.92 O +ATOM 741 CB LEU A 91 23.271 4.165 29.649 1.00 6.06 C +ATOM 742 CG LEU A 91 24.490 5.069 29.862 1.00 7.72 C +ATOM 743 CD1 LEU A 91 24.037 6.516 30.030 1.00 9.04 C +ATOM 744 CD2 LEU A 91 25.261 4.604 31.098 1.00 11.40 C +ATOM 745 N VAL A 92 22.147 1.056 30.397 1.00 7.74 N +ATOM 746 CA VAL A 92 20.973 0.196 30.526 1.00 9.41 C +ATOM 747 C VAL A 92 20.280 0.360 31.876 1.00 8.85 C +ATOM 748 O VAL A 92 20.929 0.302 32.920 1.00 9.80 O +ATOM 749 CB VAL A 92 21.368 -1.292 30.351 1.00 9.33 C +ATOM 750 CG1 VAL A 92 20.167 -2.188 30.602 1.00 11.21 C +ATOM 751 CG2 VAL A 92 21.923 -1.520 28.949 1.00 9.68 C +ATOM 752 N TYR A 93 18.962 0.546 31.846 1.00 8.30 N +ATOM 753 CA TYR A 93 18.179 0.713 33.072 1.00 7.46 C +ATOM 754 C TYR A 93 16.867 -0.059 33.053 1.00 9.64 C +ATOM 755 O TYR A 93 16.169 -0.096 32.039 1.00 9.58 O +ATOM 756 CB TYR A 93 17.833 2.185 33.292 1.00 7.49 C +ATOM 757 CG TYR A 93 19.013 3.115 33.250 1.00 7.32 C +ATOM 758 CD1 TYR A 93 19.727 3.425 34.408 1.00 10.22 C +ATOM 759 CD2 TYR A 93 19.428 3.677 32.045 1.00 8.50 C +ATOM 760 CE1 TYR A 93 20.827 4.275 34.363 1.00 7.50 C +ATOM 761 CE2 TYR A 93 20.519 4.520 31.989 1.00 10.65 C +ATOM 762 CZ TYR A 93 21.217 4.818 33.149 1.00 9.17 C +ATOM 763 OH TYR A 93 22.297 5.665 33.083 1.00 9.81 O +ATOM 764 N CYS A 94 16.525 -0.652 34.191 1.00 9.58 N +ATOM 765 CA CYS A 94 15.270 -1.383 34.321 1.00 11.58 C +ATOM 766 C CYS A 94 14.964 -1.598 35.795 1.00 11.27 C +ATOM 767 O CYS A 94 15.816 -1.357 36.656 1.00 12.83 O +ATOM 768 CB CYS A 94 15.356 -2.754 33.632 1.00 11.71 C +ATOM 769 SG CYS A 94 16.168 -4.070 34.608 1.00 12.06 S +ATOM 770 N ASP A 95 13.733 -2.008 36.085 1.00 13.29 N +ATOM 771 CA ASP A 95 13.353 -2.344 37.450 1.00 15.28 C +ATOM 772 C ASP A 95 13.033 -3.840 37.408 1.00 15.81 C +ATOM 773 O ASP A 95 13.032 -4.440 36.335 1.00 14.16 O +ATOM 774 CB ASP A 95 12.152 -1.522 37.960 1.00 14.63 C +ATOM 775 CG ASP A 95 11.055 -1.342 36.927 1.00 16.19 C +ATOM 776 OD1 ASP A 95 10.946 -2.160 35.993 1.00 16.16 O +ATOM 777 OD2 ASP A 95 10.279 -0.370 37.074 1.00 16.66 O +ATOM 778 N ASP A 96 12.781 -4.451 38.561 1.00 18.96 N +ATOM 779 CA ASP A 96 12.504 -5.884 38.602 1.00 20.56 C +ATOM 780 C ASP A 96 11.413 -6.363 37.654 1.00 20.25 C +ATOM 781 O ASP A 96 11.549 -7.411 37.027 1.00 19.79 O +ATOM 782 CB ASP A 96 12.154 -6.317 40.026 1.00 25.74 C +ATOM 783 CG ASP A 96 13.353 -6.310 40.945 1.00 27.79 C +ATOM 784 OD1 ASP A 96 14.408 -6.847 40.547 1.00 33.13 O +ATOM 785 OD2 ASP A 96 13.237 -5.779 42.067 1.00 35.26 O +ATOM 786 N GLU A 97 10.333 -5.599 37.556 1.00 20.92 N +ATOM 787 CA GLU A 97 9.216 -5.962 36.693 1.00 22.17 C +ATOM 788 C GLU A 97 9.593 -6.037 35.216 1.00 22.07 C +ATOM 789 O GLU A 97 8.908 -6.691 34.431 1.00 21.21 O +ATOM 790 CB GLU A 97 8.068 -4.964 36.869 1.00 25.44 C +ATOM 791 CG GLU A 97 7.371 -5.031 38.219 1.00 37.78 C +ATOM 792 CD GLU A 97 8.317 -4.805 39.384 1.00 43.22 C +ATOM 793 OE1 GLU A 97 9.043 -3.786 39.372 1.00 45.28 O +ATOM 794 OE2 GLU A 97 8.330 -5.642 40.314 1.00 42.89 O +ATOM 795 N ASN A 98 10.685 -5.380 34.840 1.00 17.80 N +ATOM 796 CA ASN A 98 11.110 -5.371 33.443 1.00 15.94 C +ATOM 797 C ASN A 98 12.511 -5.926 33.204 1.00 16.06 C +ATOM 798 O ASN A 98 13.054 -5.792 32.104 1.00 13.18 O +ATOM 799 CB ASN A 98 11.031 -3.942 32.901 1.00 16.46 C +ATOM 800 CG ASN A 98 9.621 -3.391 32.918 1.00 19.73 C +ATOM 801 OD1 ASN A 98 8.775 -3.797 32.120 1.00 23.19 O +ATOM 802 ND2 ASN A 98 9.354 -2.468 33.837 1.00 17.02 N +ATOM 803 N LYS A 99 13.088 -6.561 34.218 1.00 13.73 N +ATOM 804 CA LYS A 99 14.437 -7.107 34.102 1.00 14.87 C +ATOM 805 C LYS A 99 14.580 -8.218 33.063 1.00 14.96 C +ATOM 806 O LYS A 99 15.552 -8.238 32.307 1.00 14.14 O +ATOM 807 CB LYS A 99 14.920 -7.605 35.468 1.00 16.79 C +ATOM 808 CG LYS A 99 16.342 -8.144 35.460 1.00 18.70 C +ATOM 809 CD LYS A 99 16.878 -8.325 36.875 1.00 25.73 C +ATOM 810 CE LYS A 99 16.023 -9.280 37.685 1.00 30.36 C +ATOM 811 NZ LYS A 99 16.496 -9.377 39.094 1.00 34.03 N +ATOM 812 N VAL A 100 13.628 -9.147 33.025 1.00 15.47 N +ATOM 813 CA VAL A 100 13.688 -10.233 32.049 1.00 14.52 C +ATOM 814 C VAL A 100 13.612 -9.647 30.641 1.00 13.62 C +ATOM 815 O VAL A 100 14.373 -10.028 29.752 1.00 13.40 O +ATOM 816 CB VAL A 100 12.520 -11.229 32.240 1.00 17.58 C +ATOM 817 CG1 VAL A 100 12.531 -12.268 31.124 1.00 14.99 C +ATOM 818 CG2 VAL A 100 12.641 -11.914 33.593 1.00 18.88 C +ATOM 819 N PHE A 101 12.694 -8.707 30.454 1.00 14.49 N +ATOM 820 CA PHE A 101 12.518 -8.053 29.166 1.00 16.41 C +ATOM 821 C PHE A 101 13.790 -7.329 28.728 1.00 16.42 C +ATOM 822 O PHE A 101 14.326 -7.593 27.650 1.00 13.50 O +ATOM 823 CB PHE A 101 11.368 -7.052 29.243 1.00 16.85 C +ATOM 824 CG PHE A 101 11.188 -6.238 27.995 1.00 21.20 C +ATOM 825 CD1 PHE A 101 10.807 -6.843 26.801 1.00 22.47 C +ATOM 826 CD2 PHE A 101 11.394 -4.864 28.013 1.00 24.04 C +ATOM 827 CE1 PHE A 101 10.633 -6.091 25.642 1.00 24.25 C +ATOM 828 CE2 PHE A 101 11.224 -4.101 26.861 1.00 28.34 C +ATOM 829 CZ PHE A 101 10.842 -4.716 25.672 1.00 27.51 C +HETATM 830 N MSE A 102 14.271 -6.413 29.562 1.00 15.07 N +HETATM 831 CA MSE A 102 15.471 -5.656 29.229 1.00 15.73 C +HETATM 832 C MSE A 102 16.697 -6.542 29.030 1.00 15.29 C +HETATM 833 O MSE A 102 17.510 -6.291 28.138 1.00 14.86 O +HETATM 834 CB MSE A 102 15.761 -4.609 30.308 1.00 16.50 C +HETATM 835 CG MSE A 102 16.999 -3.766 30.031 1.00 12.98 C +HETATM 836 SE MSE A 102 16.938 -2.880 28.300 1.00 27.13 SE +HETATM 837 CE MSE A 102 15.668 -1.533 28.732 1.00 8.64 C +ATOM 838 N SER A 103 16.835 -7.578 29.852 1.00 17.48 N +ATOM 839 CA SER A 103 17.978 -8.478 29.733 1.00 17.27 C +ATOM 840 C SER A 103 18.018 -9.139 28.360 1.00 17.75 C +ATOM 841 O SER A 103 19.089 -9.324 27.783 1.00 18.72 O +ATOM 842 CB SER A 103 17.930 -9.555 30.822 1.00 17.33 C +ATOM 843 OG SER A 103 18.125 -8.986 32.103 1.00 22.22 O +ATOM 844 N LYS A 104 16.848 -9.489 27.836 1.00 18.40 N +ATOM 845 CA LYS A 104 16.772 -10.126 26.526 1.00 17.38 C +ATOM 846 C LYS A 104 17.196 -9.150 25.431 1.00 17.58 C +ATOM 847 O LYS A 104 17.929 -9.518 24.512 1.00 19.01 O +ATOM 848 CB LYS A 104 15.349 -10.623 26.261 1.00 18.69 C +ATOM 849 CG LYS A 104 15.172 -11.313 24.916 1.00 22.54 C +ATOM 850 CD LYS A 104 13.791 -11.952 24.792 1.00 23.95 C +ATOM 851 CE LYS A 104 12.674 -10.929 24.964 1.00 27.27 C +ATOM 852 NZ LYS A 104 11.319 -11.539 24.823 1.00 29.03 N +ATOM 853 N ILE A 105 16.734 -7.906 25.533 1.00 16.37 N +ATOM 854 CA ILE A 105 17.081 -6.884 24.551 1.00 16.07 C +ATOM 855 C ILE A 105 18.596 -6.688 24.526 1.00 14.20 C +ATOM 856 O ILE A 105 19.206 -6.640 23.458 1.00 15.34 O +ATOM 857 CB ILE A 105 16.404 -5.529 24.878 1.00 15.75 C +ATOM 858 CG1 ILE A 105 14.885 -5.662 24.757 1.00 18.48 C +ATOM 859 CG2 ILE A 105 16.901 -4.445 23.925 1.00 16.56 C +ATOM 860 CD1 ILE A 105 14.134 -4.377 25.044 1.00 22.69 C +ATOM 861 N VAL A 106 19.198 -6.572 25.706 1.00 11.65 N +ATOM 862 CA VAL A 106 20.641 -6.388 25.798 1.00 13.23 C +ATOM 863 C VAL A 106 21.380 -7.546 25.132 1.00 17.19 C +ATOM 864 O VAL A 106 22.370 -7.336 24.431 1.00 15.73 O +ATOM 865 CB VAL A 106 21.103 -6.275 27.268 1.00 14.34 C +ATOM 866 CG1 VAL A 106 22.621 -6.188 27.332 1.00 14.51 C +ATOM 867 CG2 VAL A 106 20.482 -5.042 27.909 1.00 12.30 C +ATOM 868 N ASP A 107 20.894 -8.767 25.344 1.00 15.92 N +ATOM 869 CA ASP A 107 21.528 -9.939 24.748 1.00 19.28 C +ATOM 870 C ASP A 107 21.531 -9.877 23.224 1.00 18.25 C +ATOM 871 O ASP A 107 22.408 -10.453 22.581 1.00 19.40 O +ATOM 872 CB ASP A 107 20.820 -11.232 25.174 1.00 21.10 C +ATOM 873 CG ASP A 107 20.957 -11.522 26.654 1.00 24.44 C +ATOM 874 OD1 ASP A 107 22.031 -11.238 27.225 1.00 24.29 O +ATOM 875 OD2 ASP A 107 19.993 -12.057 27.244 1.00 26.54 O +ATOM 876 N ASN A 108 20.550 -9.187 22.650 1.00 16.67 N +ATOM 877 CA ASN A 108 20.448 -9.090 21.196 1.00 16.97 C +ATOM 878 C ASN A 108 21.076 -7.848 20.570 1.00 15.91 C +ATOM 879 O ASN A 108 20.954 -7.636 19.366 1.00 13.39 O +ATOM 880 CB ASN A 108 18.984 -9.189 20.759 1.00 19.30 C +ATOM 881 CG ASN A 108 18.415 -10.582 20.944 1.00 23.83 C +ATOM 882 OD1 ASN A 108 18.184 -11.032 22.068 1.00 26.90 O +ATOM 883 ND2 ASN A 108 18.194 -11.278 19.835 1.00 22.68 N +ATOM 884 N LEU A 109 21.741 -7.026 21.374 1.00 14.98 N +ATOM 885 CA LEU A 109 22.385 -5.828 20.840 1.00 14.18 C +ATOM 886 C LEU A 109 23.672 -6.221 20.135 1.00 16.48 C +ATOM 887 O LEU A 109 24.253 -7.265 20.431 1.00 14.47 O +ATOM 888 CB LEU A 109 22.727 -4.847 21.963 1.00 11.94 C +ATOM 889 CG LEU A 109 21.578 -4.194 22.728 1.00 9.62 C +ATOM 890 CD1 LEU A 109 22.146 -3.384 23.887 1.00 8.05 C +ATOM 891 CD2 LEU A 109 20.769 -3.304 21.795 1.00 8.93 C +ATOM 892 N PRO A 110 24.137 -5.388 19.190 1.00 16.03 N +ATOM 893 CA PRO A 110 25.377 -5.682 18.467 1.00 18.68 C +ATOM 894 C PRO A 110 26.539 -5.848 19.445 1.00 18.36 C +ATOM 895 O PRO A 110 26.588 -5.189 20.486 1.00 16.80 O +ATOM 896 CB PRO A 110 25.551 -4.459 17.572 1.00 17.68 C +ATOM 897 CG PRO A 110 24.137 -4.055 17.288 1.00 20.90 C +ATOM 898 CD PRO A 110 23.488 -4.181 18.649 1.00 17.75 C +ATOM 899 N THR A 111 27.473 -6.725 19.102 1.00 17.87 N +ATOM 900 CA THR A 111 28.631 -6.987 19.946 1.00 19.17 C +ATOM 901 C THR A 111 29.378 -5.717 20.354 1.00 18.59 C +ATOM 902 O THR A 111 29.683 -5.518 21.529 1.00 15.29 O +ATOM 903 CB THR A 111 29.625 -7.918 19.230 1.00 18.45 C +ATOM 904 OG1 THR A 111 28.975 -9.154 18.913 1.00 26.33 O +ATOM 905 CG2 THR A 111 30.828 -8.193 20.116 1.00 22.32 C +ATOM 906 N ALA A 112 29.671 -4.864 19.377 1.00 16.37 N +ATOM 907 CA ALA A 112 30.402 -3.627 19.631 1.00 18.47 C +ATOM 908 C ALA A 112 29.717 -2.716 20.643 1.00 17.46 C +ATOM 909 O ALA A 112 30.381 -2.010 21.401 1.00 19.35 O +ATOM 910 CB ALA A 112 30.624 -2.875 18.321 1.00 18.49 C +ATOM 911 N ILE A 113 28.390 -2.731 20.658 1.00 12.89 N +ATOM 912 CA ILE A 113 27.644 -1.887 21.583 1.00 16.15 C +ATOM 913 C ILE A 113 27.695 -2.444 23.001 1.00 15.76 C +ATOM 914 O ILE A 113 27.925 -1.706 23.959 1.00 17.40 O +ATOM 915 CB ILE A 113 26.179 -1.734 21.130 1.00 15.62 C +ATOM 916 CG1 ILE A 113 26.143 -1.026 19.771 1.00 16.32 C +ATOM 917 CG2 ILE A 113 25.391 -0.936 22.162 1.00 15.49 C +ATOM 918 CD1 ILE A 113 24.753 -0.743 19.245 1.00 16.88 C +ATOM 919 N LYS A 114 27.491 -3.749 23.134 1.00 16.40 N +ATOM 920 CA LYS A 114 27.527 -4.383 24.446 1.00 17.88 C +ATOM 921 C LYS A 114 28.898 -4.255 25.099 1.00 18.65 C +ATOM 922 O LYS A 114 29.004 -4.206 26.323 1.00 19.90 O +ATOM 923 CB LYS A 114 27.149 -5.863 24.332 1.00 20.13 C +ATOM 924 CG LYS A 114 25.693 -6.097 23.967 1.00 23.14 C +ATOM 925 CD LYS A 114 25.324 -7.573 24.001 1.00 28.04 C +ATOM 926 CE LYS A 114 25.952 -8.340 22.854 1.00 31.86 C +ATOM 927 NZ LYS A 114 25.460 -9.747 22.805 1.00 36.71 N +ATOM 928 N ARG A 115 29.946 -4.185 24.285 1.00 19.13 N +ATOM 929 CA ARG A 115 31.299 -4.081 24.819 1.00 21.63 C +ATOM 930 C ARG A 115 31.620 -2.708 25.393 1.00 21.69 C +ATOM 931 O ARG A 115 32.625 -2.540 26.082 1.00 19.57 O +ATOM 932 CB ARG A 115 32.322 -4.458 23.745 1.00 29.14 C +ATOM 933 CG ARG A 115 32.066 -5.832 23.150 1.00 40.81 C +ATOM 934 CD ARG A 115 33.338 -6.510 22.674 1.00 51.82 C +ATOM 935 NE ARG A 115 33.045 -7.808 22.070 1.00 60.88 N +ATOM 936 CZ ARG A 115 33.959 -8.734 21.800 1.00 65.54 C +ATOM 937 NH1 ARG A 115 35.235 -8.513 22.083 1.00 68.77 N +ATOM 938 NH2 ARG A 115 33.595 -9.882 21.242 1.00 67.23 N +ATOM 939 N ASN A 116 30.768 -1.727 25.116 1.00 16.60 N +ATOM 940 CA ASN A 116 30.983 -0.385 25.639 1.00 13.28 C +ATOM 941 C ASN A 116 29.921 -0.012 26.664 1.00 13.98 C +ATOM 942 O ASN A 116 29.466 1.131 26.721 1.00 11.77 O +ATOM 943 CB ASN A 116 31.011 0.644 24.508 1.00 17.96 C +ATOM 944 CG ASN A 116 32.280 0.560 23.682 1.00 23.95 C +ATOM 945 OD1 ASN A 116 32.393 -0.258 22.771 1.00 27.65 O +ATOM 946 ND2 ASN A 116 33.253 1.399 24.014 1.00 24.96 N +ATOM 947 N LEU A 117 29.532 -0.993 27.472 1.00 14.76 N +ATOM 948 CA LEU A 117 28.539 -0.790 28.520 1.00 16.01 C +ATOM 949 C LEU A 117 29.169 0.082 29.606 1.00 16.50 C +ATOM 950 O LEU A 117 30.149 -0.311 30.238 1.00 19.94 O +ATOM 951 CB LEU A 117 28.119 -2.142 29.100 1.00 13.89 C +ATOM 952 CG LEU A 117 27.156 -2.147 30.288 1.00 15.07 C +ATOM 953 CD1 LEU A 117 25.825 -1.532 29.881 1.00 13.69 C +ATOM 954 CD2 LEU A 117 26.961 -3.579 30.766 1.00 16.68 C +ATOM 955 N ILE A 118 28.601 1.266 29.813 1.00 11.74 N +ATOM 956 CA ILE A 118 29.109 2.215 30.801 1.00 13.36 C +ATOM 957 C ILE A 118 28.505 1.995 32.180 1.00 12.53 C +ATOM 958 O ILE A 118 29.206 2.033 33.191 1.00 12.37 O +ATOM 959 CB ILE A 118 28.810 3.664 30.367 1.00 14.81 C +ATOM 960 CG1 ILE A 118 29.505 3.958 29.037 1.00 17.20 C +ATOM 961 CG2 ILE A 118 29.273 4.644 31.445 1.00 16.33 C +ATOM 962 CD1 ILE A 118 29.137 5.297 28.442 1.00 15.95 C +ATOM 963 N LYS A 119 27.196 1.782 32.216 1.00 9.94 N +ATOM 964 CA LYS A 119 26.491 1.553 33.470 1.00 8.83 C +ATOM 965 C LYS A 119 25.264 0.711 33.185 1.00 12.00 C +ATOM 966 O LYS A 119 24.547 0.953 32.216 1.00 9.96 O +ATOM 967 CB LYS A 119 26.062 2.883 34.105 1.00 10.54 C +ATOM 968 CG LYS A 119 25.176 2.742 35.358 1.00 12.68 C +ATOM 969 CD LYS A 119 25.904 2.066 36.516 1.00 12.97 C +ATOM 970 CE LYS A 119 25.005 1.904 37.747 1.00 9.78 C +ATOM 971 NZ LYS A 119 24.704 3.205 38.415 1.00 9.17 N +ATOM 972 N ASP A 120 25.043 -0.291 34.025 1.00 11.88 N +ATOM 973 CA ASP A 120 23.892 -1.164 33.887 1.00 12.15 C +ATOM 974 C ASP A 120 23.189 -1.204 35.238 1.00 13.35 C +ATOM 975 O ASP A 120 23.647 -1.875 36.158 1.00 13.72 O +ATOM 976 CB ASP A 120 24.332 -2.579 33.492 1.00 13.47 C +ATOM 977 CG ASP A 120 23.156 -3.506 33.216 1.00 18.79 C +ATOM 978 OD1 ASP A 120 22.239 -3.586 34.061 1.00 19.37 O +ATOM 979 OD2 ASP A 120 23.149 -4.162 32.155 1.00 26.90 O +ATOM 980 N PHE A 121 22.112 -0.440 35.374 1.00 9.12 N +ATOM 981 CA PHE A 121 21.345 -0.460 36.612 1.00 8.53 C +ATOM 982 C PHE A 121 20.158 -1.323 36.233 1.00 10.99 C +ATOM 983 O PHE A 121 19.062 -0.820 35.976 1.00 12.01 O +ATOM 984 CB PHE A 121 20.864 0.938 37.000 1.00 8.25 C +ATOM 985 CG PHE A 121 20.292 1.008 38.388 1.00 9.71 C +ATOM 986 CD1 PHE A 121 21.126 1.167 39.490 1.00 9.45 C +ATOM 987 CD2 PHE A 121 18.926 0.875 38.597 1.00 13.08 C +ATOM 988 CE1 PHE A 121 20.606 1.190 40.781 1.00 10.63 C +ATOM 989 CE2 PHE A 121 18.394 0.895 39.887 1.00 11.99 C +ATOM 990 CZ PHE A 121 19.238 1.054 40.981 1.00 12.89 C +ATOM 991 N CYS A 122 20.385 -2.631 36.182 1.00 12.06 N +ATOM 992 CA CYS A 122 19.331 -3.542 35.781 1.00 13.91 C +ATOM 993 C CYS A 122 19.612 -5.009 36.086 1.00 15.31 C +ATOM 994 O CYS A 122 19.032 -5.583 37.008 1.00 15.62 O +ATOM 995 CB CYS A 122 19.078 -3.364 34.280 1.00 13.84 C +ATOM 996 SG CYS A 122 17.857 -4.508 33.568 1.00 13.88 S +ATOM 997 N ARG A 123 20.511 -5.611 35.318 1.00 16.09 N +ATOM 998 CA ARG A 123 20.827 -7.025 35.485 1.00 18.40 C +ATOM 999 C ARG A 123 21.351 -7.484 36.846 1.00 17.94 C +ATOM 1000 O ARG A 123 21.097 -8.621 37.244 1.00 17.65 O +ATOM 1001 CB ARG A 123 21.772 -7.468 34.366 1.00 19.65 C +ATOM 1002 CG ARG A 123 21.072 -7.500 33.007 1.00 28.18 C +ATOM 1003 CD ARG A 123 22.004 -7.899 31.879 1.00 29.84 C +ATOM 1004 NE ARG A 123 23.045 -6.901 31.658 1.00 32.33 N +ATOM 1005 CZ ARG A 123 24.006 -7.013 30.748 1.00 29.90 C +ATOM 1006 NH1 ARG A 123 24.060 -8.083 29.967 1.00 27.70 N +ATOM 1007 NH2 ARG A 123 24.913 -6.056 30.619 1.00 29.83 N +ATOM 1008 N LYS A 124 22.063 -6.621 37.567 1.00 13.84 N +ATOM 1009 CA LYS A 124 22.574 -7.010 38.881 1.00 12.49 C +ATOM 1010 C LYS A 124 21.558 -6.778 40.004 1.00 10.77 C +ATOM 1011 O LYS A 124 21.839 -7.074 41.164 1.00 12.23 O +ATOM 1012 CB LYS A 124 23.877 -6.264 39.210 1.00 15.02 C +ATOM 1013 CG LYS A 124 25.124 -6.785 38.485 1.00 17.86 C +ATOM 1014 CD LYS A 124 26.376 -6.035 38.942 1.00 21.21 C +ATOM 1015 CE LYS A 124 27.647 -6.566 38.282 1.00 24.54 C +ATOM 1016 NZ LYS A 124 28.878 -5.873 38.791 1.00 21.46 N +ATOM 1017 N LEU A 125 20.385 -6.246 39.670 1.00 9.74 N +ATOM 1018 CA LEU A 125 19.359 -6.009 40.684 1.00 11.32 C +ATOM 1019 C LEU A 125 18.803 -7.337 41.180 1.00 14.53 C +ATOM 1020 O LEU A 125 18.539 -8.239 40.388 1.00 14.63 O +ATOM 1021 CB LEU A 125 18.213 -5.171 40.115 1.00 11.72 C +ATOM 1022 CG LEU A 125 18.482 -3.693 39.848 1.00 13.13 C +ATOM 1023 CD1 LEU A 125 17.307 -3.105 39.084 1.00 13.14 C +ATOM 1024 CD2 LEU A 125 18.690 -2.955 41.168 1.00 13.06 C +ATOM 1025 N SER A 126 18.630 -7.454 42.493 1.00 13.97 N +ATOM 1026 CA SER A 126 18.095 -8.673 43.087 1.00 18.03 C +ATOM 1027 C SER A 126 16.570 -8.624 43.178 1.00 20.57 C +ATOM 1028 O SER A 126 15.954 -9.708 43.269 1.00 24.85 O +ATOM 1029 CB SER A 126 18.697 -8.899 44.479 1.00 18.07 C +ATOM 1030 OG SER A 126 18.407 -7.823 45.351 1.00 15.78 O +TER 1031 SER A 126 +ATOM 1032 N TYR B 3 24.874 -14.238 65.592 1.00 21.36 N +ATOM 1033 CA TYR B 3 24.778 -13.845 64.154 1.00 14.51 C +ATOM 1034 C TYR B 3 24.644 -15.062 63.250 1.00 13.36 C +ATOM 1035 O TYR B 3 25.275 -16.090 63.494 1.00 14.59 O +ATOM 1036 CB TYR B 3 26.025 -13.057 63.736 1.00 14.32 C +ATOM 1037 CG TYR B 3 26.252 -11.805 64.544 1.00 12.05 C +ATOM 1038 CD1 TYR B 3 27.202 -11.769 65.564 1.00 12.30 C +ATOM 1039 CD2 TYR B 3 25.492 -10.662 64.309 1.00 10.81 C +ATOM 1040 CE1 TYR B 3 27.388 -10.616 66.331 1.00 14.06 C +ATOM 1041 CE2 TYR B 3 25.667 -9.512 65.069 1.00 13.41 C +ATOM 1042 CZ TYR B 3 26.614 -9.496 66.076 1.00 15.79 C +ATOM 1043 OH TYR B 3 26.781 -8.356 66.825 1.00 14.76 O +ATOM 1044 N LYS B 4 23.823 -14.950 62.210 1.00 11.22 N +ATOM 1045 CA LYS B 4 23.663 -16.057 61.274 1.00 13.45 C +ATOM 1046 C LYS B 4 23.831 -15.659 59.804 1.00 10.36 C +ATOM 1047 O LYS B 4 23.870 -16.522 58.933 1.00 10.86 O +ATOM 1048 CB LYS B 4 22.316 -16.761 61.471 1.00 16.58 C +ATOM 1049 CG LYS B 4 21.093 -15.942 61.128 1.00 16.48 C +ATOM 1050 CD LYS B 4 19.882 -16.859 61.028 1.00 21.17 C +ATOM 1051 CE LYS B 4 18.595 -16.085 60.822 1.00 27.98 C +ATOM 1052 NZ LYS B 4 18.247 -15.263 62.014 1.00 29.87 N +ATOM 1053 N ASN B 5 23.921 -14.359 59.523 1.00 8.93 N +ATOM 1054 CA ASN B 5 24.134 -13.899 58.150 1.00 8.93 C +ATOM 1055 C ASN B 5 24.842 -12.553 58.160 1.00 8.91 C +ATOM 1056 O ASN B 5 24.222 -11.500 58.322 1.00 10.65 O +ATOM 1057 CB ASN B 5 22.820 -13.791 57.372 1.00 11.88 C +ATOM 1058 CG ASN B 5 23.049 -13.491 55.898 1.00 13.66 C +ATOM 1059 OD1 ASN B 5 24.105 -13.815 55.347 1.00 19.21 O +ATOM 1060 ND2 ASN B 5 22.060 -12.887 55.250 1.00 22.41 N +ATOM 1061 N ILE B 6 26.152 -12.612 57.965 1.00 8.00 N +ATOM 1062 CA ILE B 6 27.003 -11.433 57.994 1.00 9.10 C +ATOM 1063 C ILE B 6 27.177 -10.713 56.666 1.00 8.01 C +ATOM 1064 O ILE B 6 27.518 -11.327 55.654 1.00 9.10 O +ATOM 1065 CB ILE B 6 28.416 -11.809 58.500 1.00 9.03 C +ATOM 1066 CG1 ILE B 6 28.320 -12.480 59.874 1.00 9.90 C +ATOM 1067 CG2 ILE B 6 29.303 -10.572 58.544 1.00 10.80 C +ATOM 1068 CD1 ILE B 6 27.770 -11.591 60.966 1.00 9.93 C +ATOM 1069 N LEU B 7 26.941 -9.405 56.678 1.00 8.14 N +ATOM 1070 CA LEU B 7 27.147 -8.591 55.489 1.00 6.09 C +ATOM 1071 C LEU B 7 28.588 -8.124 55.596 1.00 6.79 C +ATOM 1072 O LEU B 7 28.950 -7.434 56.551 1.00 7.97 O +ATOM 1073 CB LEU B 7 26.225 -7.367 55.478 1.00 7.81 C +ATOM 1074 CG LEU B 7 26.529 -6.349 54.369 1.00 8.36 C +ATOM 1075 CD1 LEU B 7 26.304 -6.988 53.002 1.00 9.26 C +ATOM 1076 CD2 LEU B 7 25.638 -5.118 54.545 1.00 7.47 C +ATOM 1077 N THR B 8 29.417 -8.518 54.635 1.00 6.69 N +ATOM 1078 CA THR B 8 30.821 -8.123 54.639 1.00 7.81 C +ATOM 1079 C THR B 8 31.088 -7.181 53.468 1.00 6.38 C +ATOM 1080 O THR B 8 30.726 -7.481 52.328 1.00 6.46 O +ATOM 1081 CB THR B 8 31.759 -9.352 54.501 1.00 10.09 C +ATOM 1082 OG1 THR B 8 31.631 -10.194 55.656 1.00 7.20 O +ATOM 1083 CG2 THR B 8 33.214 -8.901 54.370 1.00 8.79 C +ATOM 1084 N LEU B 9 31.706 -6.039 53.757 1.00 4.35 N +ATOM 1085 CA LEU B 9 32.043 -5.062 52.729 1.00 5.78 C +ATOM 1086 C LEU B 9 33.558 -4.900 52.689 1.00 6.78 C +ATOM 1087 O LEU B 9 34.209 -4.773 53.731 1.00 6.68 O +ATOM 1088 CB LEU B 9 31.407 -3.701 53.039 1.00 6.10 C +ATOM 1089 CG LEU B 9 29.928 -3.657 53.430 1.00 6.69 C +ATOM 1090 CD1 LEU B 9 29.491 -2.202 53.589 1.00 7.98 C +ATOM 1091 CD2 LEU B 9 29.087 -4.351 52.367 1.00 8.90 C +ATOM 1092 N ILE B 10 34.125 -4.911 51.490 1.00 5.68 N +ATOM 1093 CA ILE B 10 35.562 -4.744 51.369 1.00 6.72 C +ATOM 1094 C ILE B 10 35.965 -4.002 50.110 1.00 7.62 C +ATOM 1095 O ILE B 10 35.402 -4.206 49.037 1.00 5.59 O +ATOM 1096 CB ILE B 10 36.308 -6.109 51.406 1.00 6.91 C +ATOM 1097 CG1 ILE B 10 37.820 -5.882 51.274 1.00 7.02 C +ATOM 1098 CG2 ILE B 10 35.802 -7.021 50.297 1.00 6.03 C +ATOM 1099 CD1 ILE B 10 38.662 -7.130 51.515 1.00 8.43 C +ATOM 1100 N SER B 11 36.934 -3.110 50.267 1.00 7.10 N +ATOM 1101 CA SER B 11 37.476 -2.363 49.148 1.00 6.62 C +ATOM 1102 C SER B 11 38.942 -2.164 49.466 1.00 8.26 C +ATOM 1103 O SER B 11 39.288 -1.400 50.368 1.00 7.92 O +ATOM 1104 CB SER B 11 36.790 -1.008 48.984 1.00 6.11 C +ATOM 1105 OG SER B 11 37.256 -0.365 47.808 1.00 9.34 O +ATOM 1106 N VAL B 12 39.792 -2.885 48.742 1.00 7.09 N +ATOM 1107 CA VAL B 12 41.239 -2.801 48.918 1.00 10.34 C +ATOM 1108 C VAL B 12 41.924 -2.927 47.557 1.00 12.03 C +ATOM 1109 O VAL B 12 41.310 -3.347 46.576 1.00 10.61 O +ATOM 1110 CB VAL B 12 41.782 -3.938 49.832 1.00 10.18 C +ATOM 1111 CG1 VAL B 12 41.208 -3.817 51.237 1.00 7.55 C +ATOM 1112 CG2 VAL B 12 41.446 -5.301 49.234 1.00 11.44 C +ATOM 1113 N ASN B 13 43.197 -2.553 47.500 1.00 11.33 N +ATOM 1114 CA ASN B 13 43.973 -2.680 46.275 1.00 11.60 C +ATOM 1115 C ASN B 13 44.161 -4.169 46.021 1.00 10.16 C +ATOM 1116 O ASN B 13 44.092 -4.971 46.953 1.00 11.25 O +ATOM 1117 CB ASN B 13 45.327 -1.996 46.446 1.00 14.31 C +ATOM 1118 CG ASN B 13 45.205 -0.496 46.587 1.00 19.40 C +ATOM 1119 OD1 ASN B 13 46.076 0.158 47.157 1.00 27.47 O +ATOM 1120 ND2 ASN B 13 44.121 0.060 46.054 1.00 20.72 N +ATOM 1121 N ASN B 14 44.410 -4.534 44.769 1.00 10.10 N +ATOM 1122 CA ASN B 14 44.581 -5.938 44.400 1.00 11.06 C +ATOM 1123 C ASN B 14 45.570 -6.732 45.250 1.00 10.81 C +ATOM 1124 O ASN B 14 45.307 -7.888 45.580 1.00 10.95 O +ATOM 1125 CB ASN B 14 44.995 -6.057 42.930 1.00 10.61 C +ATOM 1126 CG ASN B 14 43.954 -5.496 41.982 1.00 15.18 C +ATOM 1127 OD1 ASN B 14 42.782 -5.372 42.330 1.00 14.69 O +ATOM 1128 ND2 ASN B 14 44.378 -5.164 40.769 1.00 19.56 N +ATOM 1129 N ASP B 15 46.702 -6.125 45.602 1.00 10.94 N +ATOM 1130 CA ASP B 15 47.705 -6.838 46.383 1.00 10.98 C +ATOM 1131 C ASP B 15 47.330 -7.096 47.836 1.00 10.19 C +ATOM 1132 O ASP B 15 48.071 -7.759 48.557 1.00 10.38 O +ATOM 1133 CB ASP B 15 49.065 -6.124 46.325 1.00 14.95 C +ATOM 1134 CG ASP B 15 49.000 -4.684 46.787 1.00 21.05 C +ATOM 1135 OD1 ASP B 15 48.229 -4.376 47.719 1.00 22.00 O +ATOM 1136 OD2 ASP B 15 49.746 -3.853 46.223 1.00 30.99 O +ATOM 1137 N ASN B 16 46.183 -6.581 48.267 1.00 11.48 N +ATOM 1138 CA ASN B 16 45.732 -6.790 49.641 1.00 7.76 C +ATOM 1139 C ASN B 16 44.579 -7.784 49.751 1.00 8.08 C +ATOM 1140 O ASN B 16 44.177 -8.141 50.855 1.00 8.44 O +ATOM 1141 CB ASN B 16 45.291 -5.466 50.279 1.00 10.28 C +ATOM 1142 CG ASN B 16 46.462 -4.627 50.763 1.00 15.33 C +ATOM 1143 OD1 ASN B 16 47.456 -5.156 51.263 1.00 15.34 O +ATOM 1144 ND2 ASN B 16 46.339 -3.308 50.640 1.00 12.76 N +ATOM 1145 N PHE B 17 44.050 -8.238 48.619 1.00 7.20 N +ATOM 1146 CA PHE B 17 42.923 -9.167 48.655 1.00 8.00 C +ATOM 1147 C PHE B 17 43.147 -10.464 49.434 1.00 8.33 C +ATOM 1148 O PHE B 17 42.342 -10.807 50.296 1.00 7.68 O +ATOM 1149 CB PHE B 17 42.446 -9.503 47.237 1.00 9.52 C +ATOM 1150 CG PHE B 17 41.524 -8.472 46.637 1.00 8.82 C +ATOM 1151 CD1 PHE B 17 40.442 -7.979 47.362 1.00 9.39 C +ATOM 1152 CD2 PHE B 17 41.709 -8.030 45.330 1.00 9.79 C +ATOM 1153 CE1 PHE B 17 39.554 -7.063 46.793 1.00 11.35 C +ATOM 1154 CE2 PHE B 17 40.827 -7.116 44.753 1.00 9.80 C +ATOM 1155 CZ PHE B 17 39.746 -6.631 45.487 1.00 12.77 C +ATOM 1156 N GLU B 18 44.218 -11.194 49.136 1.00 8.33 N +ATOM 1157 CA GLU B 18 44.467 -12.456 49.833 1.00 9.72 C +ATOM 1158 C GLU B 18 44.568 -12.297 51.348 1.00 6.59 C +ATOM 1159 O GLU B 18 43.893 -13.004 52.094 1.00 7.10 O +ATOM 1160 CB GLU B 18 45.735 -13.128 49.290 1.00 9.13 C +ATOM 1161 CG GLU B 18 46.238 -14.336 50.100 1.00 9.85 C +ATOM 1162 CD GLU B 18 45.206 -15.448 50.289 1.00 8.42 C +ATOM 1163 OE1 GLU B 18 44.234 -15.524 49.511 1.00 9.56 O +ATOM 1164 OE2 GLU B 18 45.382 -16.271 51.218 1.00 8.00 O +ATOM 1165 N ASN B 19 45.401 -11.369 51.806 1.00 9.24 N +ATOM 1166 CA ASN B 19 45.557 -11.164 53.242 1.00 9.87 C +ATOM 1167 C ASN B 19 44.248 -10.732 53.898 1.00 8.85 C +ATOM 1168 O ASN B 19 43.897 -11.222 54.976 1.00 8.14 O +ATOM 1169 CB ASN B 19 46.644 -10.121 53.523 1.00 14.61 C +ATOM 1170 CG ASN B 19 48.006 -10.540 52.996 1.00 22.00 C +ATOM 1171 OD1 ASN B 19 48.394 -11.704 53.106 1.00 25.40 O +ATOM 1172 ND2 ASN B 19 48.743 -9.590 52.434 1.00 24.63 N +ATOM 1173 N TYR B 20 43.531 -9.813 53.257 1.00 8.18 N +ATOM 1174 CA TYR B 20 42.266 -9.340 53.804 1.00 8.95 C +ATOM 1175 C TYR B 20 41.182 -10.413 53.812 1.00 6.99 C +ATOM 1176 O TYR B 20 40.396 -10.486 54.756 1.00 6.01 O +ATOM 1177 CB TYR B 20 41.754 -8.112 53.038 1.00 7.13 C +ATOM 1178 CG TYR B 20 42.236 -6.785 53.592 1.00 10.34 C +ATOM 1179 CD1 TYR B 20 43.548 -6.365 53.404 1.00 10.74 C +ATOM 1180 CD2 TYR B 20 41.368 -5.940 54.287 1.00 8.51 C +ATOM 1181 CE1 TYR B 20 43.987 -5.135 53.886 1.00 12.05 C +ATOM 1182 CE2 TYR B 20 41.797 -4.704 54.778 1.00 10.80 C +ATOM 1183 CZ TYR B 20 43.110 -4.309 54.569 1.00 8.47 C +ATOM 1184 OH TYR B 20 43.553 -3.083 55.017 1.00 8.55 O +ATOM 1185 N PHE B 21 41.125 -11.248 52.780 1.00 5.65 N +ATOM 1186 CA PHE B 21 40.097 -12.284 52.766 1.00 7.22 C +ATOM 1187 C PHE B 21 40.299 -13.326 53.856 1.00 6.90 C +ATOM 1188 O PHE B 21 39.324 -13.832 54.410 1.00 8.49 O +ATOM 1189 CB PHE B 21 39.983 -12.952 51.392 1.00 5.51 C +ATOM 1190 CG PHE B 21 38.875 -12.384 50.547 1.00 7.65 C +ATOM 1191 CD1 PHE B 21 39.053 -11.194 49.852 1.00 6.57 C +ATOM 1192 CD2 PHE B 21 37.629 -13.008 50.502 1.00 8.14 C +ATOM 1193 CE1 PHE B 21 38.005 -10.630 49.123 1.00 8.19 C +ATOM 1194 CE2 PHE B 21 36.577 -12.451 49.778 1.00 7.92 C +ATOM 1195 CZ PHE B 21 36.765 -11.262 49.089 1.00 7.63 C +ATOM 1196 N ARG B 22 41.545 -13.654 54.184 1.00 8.64 N +ATOM 1197 CA ARG B 22 41.753 -14.615 55.260 1.00 7.68 C +ATOM 1198 C ARG B 22 41.218 -13.986 56.546 1.00 9.23 C +ATOM 1199 O ARG B 22 40.626 -14.672 57.380 1.00 9.14 O +ATOM 1200 CB ARG B 22 43.234 -14.984 55.408 1.00 9.83 C +ATOM 1201 CG ARG B 22 43.737 -15.893 54.292 1.00 10.47 C +ATOM 1202 CD ARG B 22 45.028 -16.626 54.665 1.00 13.14 C +ATOM 1203 NE ARG B 22 46.093 -15.705 55.047 1.00 13.85 N +ATOM 1204 CZ ARG B 22 46.393 -15.381 56.301 1.00 16.65 C +ATOM 1205 NH1 ARG B 22 47.374 -14.525 56.546 1.00 19.74 N +ATOM 1206 NH2 ARG B 22 45.724 -15.926 57.310 1.00 16.23 N +ATOM 1207 N LYS B 23 41.398 -12.673 56.692 1.00 7.74 N +ATOM 1208 CA LYS B 23 40.906 -11.974 57.875 1.00 7.68 C +ATOM 1209 C LYS B 23 39.377 -11.989 57.872 1.00 5.61 C +ATOM 1210 O LYS B 23 38.747 -12.230 58.905 1.00 7.57 O +ATOM 1211 CB LYS B 23 41.417 -10.528 57.899 1.00 9.24 C +ATOM 1212 CG LYS B 23 41.097 -9.790 59.192 1.00 11.93 C +ATOM 1213 CD LYS B 23 41.651 -8.368 59.170 1.00 14.74 C +ATOM 1214 CE LYS B 23 41.414 -7.664 60.495 1.00 14.38 C +ATOM 1215 NZ LYS B 23 42.184 -8.300 61.608 1.00 14.94 N +ATOM 1216 N ILE B 24 38.780 -11.740 56.710 1.00 5.67 N +ATOM 1217 CA ILE B 24 37.320 -11.754 56.607 1.00 7.29 C +ATOM 1218 C ILE B 24 36.753 -13.062 57.160 1.00 6.15 C +ATOM 1219 O ILE B 24 35.866 -13.060 58.012 1.00 5.44 O +ATOM 1220 CB ILE B 24 36.851 -11.614 55.145 1.00 7.36 C +ATOM 1221 CG1 ILE B 24 37.094 -10.182 54.655 1.00 8.85 C +ATOM 1222 CG2 ILE B 24 35.367 -11.981 55.032 1.00 6.64 C +ATOM 1223 CD1 ILE B 24 36.766 -9.965 53.187 1.00 10.23 C +ATOM 1224 N PHE B 25 37.273 -14.181 56.675 1.00 7.30 N +ATOM 1225 CA PHE B 25 36.786 -15.477 57.122 1.00 6.63 C +ATOM 1226 C PHE B 25 37.036 -15.736 58.600 1.00 6.31 C +ATOM 1227 O PHE B 25 36.211 -16.363 59.267 1.00 8.06 O +ATOM 1228 CB PHE B 25 37.379 -16.585 56.248 1.00 6.24 C +ATOM 1229 CG PHE B 25 36.784 -16.631 54.864 1.00 7.17 C +ATOM 1230 CD1 PHE B 25 35.424 -16.880 54.690 1.00 10.68 C +ATOM 1231 CD2 PHE B 25 37.574 -16.405 53.740 1.00 8.30 C +ATOM 1232 CE1 PHE B 25 34.854 -16.902 53.414 1.00 9.57 C +ATOM 1233 CE2 PHE B 25 37.018 -16.424 52.459 1.00 9.90 C +ATOM 1234 CZ PHE B 25 35.653 -16.674 52.295 1.00 9.39 C +ATOM 1235 N LEU B 26 38.160 -15.256 59.125 1.00 6.24 N +ATOM 1236 CA LEU B 26 38.429 -15.438 60.548 1.00 7.07 C +ATOM 1237 C LEU B 26 37.368 -14.669 61.341 1.00 8.61 C +ATOM 1238 O LEU B 26 36.790 -15.187 62.301 1.00 5.92 O +ATOM 1239 CB LEU B 26 39.826 -14.922 60.903 1.00 9.61 C +ATOM 1240 CG LEU B 26 40.979 -15.783 60.382 1.00 11.99 C +ATOM 1241 CD1 LEU B 26 42.318 -15.135 60.716 1.00 15.65 C +ATOM 1242 CD2 LEU B 26 40.888 -17.159 61.010 1.00 15.48 C +ATOM 1243 N ASP B 27 37.096 -13.436 60.929 1.00 8.13 N +ATOM 1244 CA ASP B 27 36.103 -12.634 61.626 1.00 7.07 C +ATOM 1245 C ASP B 27 34.694 -13.209 61.508 1.00 7.64 C +ATOM 1246 O ASP B 27 33.921 -13.169 62.470 1.00 7.91 O +ATOM 1247 CB ASP B 27 36.155 -11.187 61.136 1.00 7.16 C +ATOM 1248 CG ASP B 27 37.445 -10.494 61.533 1.00 11.83 C +ATOM 1249 OD1 ASP B 27 38.008 -10.859 62.590 1.00 13.94 O +ATOM 1250 OD2 ASP B 27 37.894 -9.586 60.805 1.00 9.25 O +ATOM 1251 N VAL B 28 34.356 -13.751 60.342 1.00 7.89 N +ATOM 1252 CA VAL B 28 33.037 -14.357 60.160 1.00 7.06 C +ATOM 1253 C VAL B 28 32.926 -15.562 61.097 1.00 9.16 C +ATOM 1254 O VAL B 28 31.903 -15.760 61.754 1.00 7.46 O +ATOM 1255 CB VAL B 28 32.816 -14.809 58.693 1.00 6.73 C +ATOM 1256 CG1 VAL B 28 31.580 -15.694 58.589 1.00 7.73 C +ATOM 1257 CG2 VAL B 28 32.634 -13.586 57.804 1.00 7.11 C +ATOM 1258 N ARG B 29 33.987 -16.359 61.174 1.00 8.79 N +ATOM 1259 CA ARG B 29 33.973 -17.523 62.054 1.00 7.46 C +ATOM 1260 C ARG B 29 33.776 -17.098 63.509 1.00 8.15 C +ATOM 1261 O ARG B 29 33.002 -17.712 64.242 1.00 9.77 O +ATOM 1262 CB ARG B 29 35.277 -18.318 61.898 1.00 8.24 C +ATOM 1263 CG ARG B 29 35.368 -19.078 60.575 1.00 9.41 C +ATOM 1264 CD ARG B 29 36.749 -19.682 60.375 1.00 8.70 C +ATOM 1265 NE ARG B 29 36.866 -20.456 59.139 1.00 8.62 N +ATOM 1266 CZ ARG B 29 36.483 -21.722 59.003 1.00 8.78 C +ATOM 1267 NH1 ARG B 29 35.950 -22.369 60.030 1.00 9.82 N +ATOM 1268 NH2 ARG B 29 36.656 -22.349 57.843 1.00 7.70 N +ATOM 1269 N SER B 30 34.465 -16.037 63.918 1.00 8.47 N +ATOM 1270 CA SER B 30 34.359 -15.538 65.287 1.00 8.70 C +ATOM 1271 C SER B 30 32.961 -15.039 65.643 1.00 11.97 C +ATOM 1272 O SER B 30 32.552 -15.105 66.807 1.00 10.24 O +ATOM 1273 CB SER B 30 35.365 -14.405 65.520 1.00 10.41 C +ATOM 1274 OG SER B 30 36.696 -14.894 65.528 1.00 11.54 O +ATOM 1275 N SER B 31 32.233 -14.544 64.644 1.00 9.60 N +ATOM 1276 CA SER B 31 30.889 -14.011 64.854 1.00 10.45 C +ATOM 1277 C SER B 31 29.856 -15.081 65.192 1.00 14.38 C +ATOM 1278 O SER B 31 28.767 -14.765 65.677 1.00 12.30 O +ATOM 1279 CB SER B 31 30.422 -13.255 63.607 1.00 11.04 C +ATOM 1280 OG SER B 31 30.032 -14.161 62.589 1.00 12.20 O +ATOM 1281 N GLY B 32 30.193 -16.340 64.928 1.00 10.52 N +ATOM 1282 CA GLY B 32 29.270 -17.425 65.206 1.00 11.98 C +ATOM 1283 C GLY B 32 28.446 -17.773 63.980 1.00 13.86 C +ATOM 1284 O GLY B 32 27.744 -18.785 63.947 1.00 12.72 O +ATOM 1285 N SER B 33 28.535 -16.928 62.959 1.00 10.25 N +ATOM 1286 CA SER B 33 27.795 -17.154 61.730 1.00 10.12 C +ATOM 1287 C SER B 33 28.492 -18.175 60.842 1.00 13.27 C +ATOM 1288 O SER B 33 29.716 -18.303 60.857 1.00 14.12 O +ATOM 1289 CB SER B 33 27.634 -15.844 60.953 1.00 11.43 C +ATOM 1290 OG SER B 33 26.877 -16.052 59.770 1.00 9.60 O +ATOM 1291 N LYS B 34 27.692 -18.904 60.075 1.00 12.90 N +ATOM 1292 CA LYS B 34 28.201 -19.903 59.151 1.00 16.28 C +ATOM 1293 C LYS B 34 28.040 -19.350 57.738 1.00 15.90 C +ATOM 1294 O LYS B 34 28.468 -19.973 56.766 1.00 17.22 O +ATOM 1295 CB LYS B 34 27.387 -21.195 59.265 1.00 20.08 C +ATOM 1296 CG LYS B 34 27.424 -21.879 60.621 1.00 26.09 C +ATOM 1297 CD LYS B 34 28.788 -22.475 60.911 1.00 34.94 C +ATOM 1298 CE LYS B 34 28.685 -23.580 61.956 1.00 40.70 C +ATOM 1299 NZ LYS B 34 27.976 -23.125 63.184 1.00 42.62 N +ATOM 1300 N LYS B 35 27.418 -18.177 57.635 1.00 15.00 N +ATOM 1301 CA LYS B 35 27.156 -17.559 56.339 1.00 11.11 C +ATOM 1302 C LYS B 35 27.487 -16.076 56.267 1.00 10.39 C +ATOM 1303 O LYS B 35 27.381 -15.347 57.255 1.00 11.24 O +ATOM 1304 CB LYS B 35 25.683 -17.740 55.977 1.00 15.77 C +ATOM 1305 CG LYS B 35 25.189 -19.176 56.068 1.00 20.51 C +ATOM 1306 CD LYS B 35 23.718 -19.269 55.693 1.00 27.36 C +ATOM 1307 CE LYS B 35 23.207 -20.698 55.805 1.00 30.29 C +ATOM 1308 NZ LYS B 35 21.767 -20.799 55.436 1.00 32.88 N +ATOM 1309 N THR B 36 27.878 -15.635 55.080 1.00 9.45 N +ATOM 1310 CA THR B 36 28.195 -14.235 54.860 1.00 6.93 C +ATOM 1311 C THR B 36 28.056 -13.890 53.388 1.00 9.04 C +ATOM 1312 O THR B 36 28.339 -14.711 52.515 1.00 8.55 O +ATOM 1313 CB THR B 36 29.639 -13.890 55.312 1.00 8.94 C +ATOM 1314 OG1 THR B 36 29.877 -12.488 55.108 1.00 7.64 O +ATOM 1315 CG2 THR B 36 30.668 -14.686 54.509 1.00 8.11 C +ATOM 1316 N THR B 37 27.575 -12.685 53.116 1.00 6.55 N +ATOM 1317 CA THR B 37 27.456 -12.220 51.747 1.00 7.22 C +ATOM 1318 C THR B 37 28.550 -11.157 51.653 1.00 8.96 C +ATOM 1319 O THR B 37 28.499 -10.132 52.332 1.00 10.00 O +ATOM 1320 CB THR B 37 26.045 -11.642 51.461 1.00 9.54 C +ATOM 1321 OG1 THR B 37 26.030 -11.052 50.157 1.00 19.34 O +ATOM 1322 CG2 THR B 37 25.651 -10.610 52.505 1.00 10.53 C +ATOM 1323 N ILE B 38 29.562 -11.441 50.837 1.00 8.16 N +ATOM 1324 CA ILE B 38 30.718 -10.567 50.672 1.00 8.94 C +ATOM 1325 C ILE B 38 30.612 -9.660 49.451 1.00 10.05 C +ATOM 1326 O ILE B 38 30.499 -10.126 48.319 1.00 9.73 O +ATOM 1327 CB ILE B 38 32.004 -11.415 50.574 1.00 7.92 C +ATOM 1328 CG1 ILE B 38 32.062 -12.379 51.763 1.00 9.45 C +ATOM 1329 CG2 ILE B 38 33.238 -10.515 50.565 1.00 8.79 C +ATOM 1330 CD1 ILE B 38 33.220 -13.372 51.715 1.00 7.50 C +ATOM 1331 N ASN B 39 30.662 -8.357 49.696 1.00 6.83 N +ATOM 1332 CA ASN B 39 30.555 -7.375 48.632 1.00 7.60 C +ATOM 1333 C ASN B 39 31.892 -6.676 48.469 1.00 7.50 C +ATOM 1334 O ASN B 39 32.391 -6.020 49.387 1.00 7.74 O +ATOM 1335 CB ASN B 39 29.431 -6.397 48.972 1.00 6.86 C +ATOM 1336 CG ASN B 39 28.067 -7.076 48.974 1.00 9.10 C +ATOM 1337 OD1 ASN B 39 27.369 -7.091 47.962 1.00 8.69 O +ATOM 1338 ND2 ASN B 39 27.695 -7.661 50.108 1.00 7.52 N +ATOM 1339 N VAL B 40 32.458 -6.839 47.279 1.00 7.15 N +ATOM 1340 CA VAL B 40 33.767 -6.311 46.936 1.00 7.12 C +ATOM 1341 C VAL B 40 33.661 -5.146 45.967 1.00 5.32 C +ATOM 1342 O VAL B 40 33.176 -5.295 44.850 1.00 7.18 O +ATOM 1343 CB VAL B 40 34.619 -7.420 46.298 1.00 7.37 C +ATOM 1344 CG1 VAL B 40 36.071 -6.974 46.193 1.00 8.05 C +ATOM 1345 CG2 VAL B 40 34.495 -8.707 47.128 1.00 8.26 C +ATOM 1346 N PHE B 41 34.125 -3.985 46.407 1.00 6.40 N +ATOM 1347 CA PHE B 41 34.074 -2.781 45.595 1.00 7.08 C +ATOM 1348 C PHE B 41 35.436 -2.650 44.936 1.00 8.59 C +ATOM 1349 O PHE B 41 36.407 -2.182 45.533 1.00 9.38 O +ATOM 1350 CB PHE B 41 33.711 -1.605 46.501 1.00 7.78 C +ATOM 1351 CG PHE B 41 32.379 -1.790 47.188 1.00 6.03 C +ATOM 1352 CD1 PHE B 41 31.199 -1.394 46.565 1.00 7.43 C +ATOM 1353 CD2 PHE B 41 32.299 -2.440 48.419 1.00 9.83 C +ATOM 1354 CE1 PHE B 41 29.961 -1.645 47.155 1.00 7.05 C +ATOM 1355 CE2 PHE B 41 31.067 -2.696 49.017 1.00 6.67 C +ATOM 1356 CZ PHE B 41 29.894 -2.297 48.381 1.00 8.89 C +ATOM 1357 N THR B 42 35.482 -3.107 43.690 1.00 7.50 N +ATOM 1358 CA THR B 42 36.710 -3.151 42.912 1.00 8.15 C +ATOM 1359 C THR B 42 36.402 -3.075 41.421 1.00 9.00 C +ATOM 1360 O THR B 42 35.268 -3.300 40.997 1.00 9.92 O +ATOM 1361 CB THR B 42 37.437 -4.487 43.196 1.00 8.93 C +ATOM 1362 OG1 THR B 42 38.652 -4.557 42.448 1.00 10.65 O +ATOM 1363 CG2 THR B 42 36.541 -5.666 42.806 1.00 11.87 C +ATOM 1364 N GLU B 43 37.422 -2.775 40.624 1.00 10.57 N +ATOM 1365 CA GLU B 43 37.249 -2.693 39.181 1.00 12.53 C +ATOM 1366 C GLU B 43 37.648 -3.989 38.483 1.00 14.07 C +ATOM 1367 O GLU B 43 37.383 -4.157 37.293 1.00 16.11 O +ATOM 1368 CB GLU B 43 38.075 -1.536 38.611 1.00 16.12 C +ATOM 1369 CG GLU B 43 37.726 -0.181 39.197 1.00 15.81 C +ATOM 1370 CD GLU B 43 36.268 0.189 38.986 1.00 23.61 C +ATOM 1371 OE1 GLU B 43 35.846 0.301 37.816 1.00 24.60 O +ATOM 1372 OE2 GLU B 43 35.545 0.365 39.989 1.00 18.58 O +ATOM 1373 N ILE B 44 38.278 -4.910 39.208 1.00 14.38 N +ATOM 1374 CA ILE B 44 38.701 -6.163 38.588 1.00 13.44 C +ATOM 1375 C ILE B 44 37.572 -7.170 38.400 1.00 15.13 C +ATOM 1376 O ILE B 44 36.524 -7.074 39.036 1.00 15.84 O +ATOM 1377 CB ILE B 44 39.841 -6.843 39.375 1.00 14.02 C +ATOM 1378 CG1 ILE B 44 39.340 -7.340 40.733 1.00 11.19 C +ATOM 1379 CG2 ILE B 44 40.994 -5.866 39.553 1.00 16.33 C +ATOM 1380 CD1 ILE B 44 40.359 -8.210 41.455 1.00 15.68 C +ATOM 1381 N GLN B 45 37.807 -8.134 37.514 1.00 16.76 N +ATOM 1382 CA GLN B 45 36.832 -9.174 37.202 1.00 19.24 C +ATOM 1383 C GLN B 45 36.789 -10.271 38.260 1.00 16.19 C +ATOM 1384 O GLN B 45 37.752 -10.479 38.996 1.00 14.16 O +ATOM 1385 CB GLN B 45 37.155 -9.808 35.845 1.00 24.48 C +ATOM 1386 CG GLN B 45 37.228 -8.825 34.687 1.00 36.32 C +ATOM 1387 CD GLN B 45 35.945 -8.039 34.503 1.00 44.19 C +ATOM 1388 OE1 GLN B 45 35.594 -7.194 35.328 1.00 48.12 O +ATOM 1389 NE2 GLN B 45 35.232 -8.317 33.416 1.00 48.87 N +ATOM 1390 N TYR B 46 35.667 -10.979 38.312 1.00 14.44 N +ATOM 1391 CA TYR B 46 35.469 -12.063 39.267 1.00 15.86 C +ATOM 1392 C TYR B 46 36.586 -13.102 39.193 1.00 15.61 C +ATOM 1393 O TYR B 46 37.147 -13.498 40.215 1.00 13.79 O +ATOM 1394 CB TYR B 46 34.119 -12.740 39.004 1.00 18.12 C +ATOM 1395 CG TYR B 46 33.872 -13.978 39.836 1.00 21.54 C +ATOM 1396 CD1 TYR B 46 33.393 -13.885 41.142 1.00 25.49 C +ATOM 1397 CD2 TYR B 46 34.141 -15.242 39.324 1.00 25.07 C +ATOM 1398 CE1 TYR B 46 33.190 -15.030 41.917 1.00 27.73 C +ATOM 1399 CE2 TYR B 46 33.944 -16.387 40.088 1.00 28.82 C +ATOM 1400 CZ TYR B 46 33.470 -16.274 41.381 1.00 26.16 C +ATOM 1401 OH TYR B 46 33.292 -17.410 42.136 1.00 35.66 O +ATOM 1402 N GLN B 47 36.904 -13.545 37.980 1.00 14.94 N +ATOM 1403 CA GLN B 47 37.942 -14.550 37.785 1.00 16.78 C +ATOM 1404 C GLN B 47 39.307 -14.112 38.297 1.00 13.48 C +ATOM 1405 O GLN B 47 40.060 -14.923 38.834 1.00 14.27 O +ATOM 1406 CB GLN B 47 38.049 -14.931 36.306 1.00 22.36 C +ATOM 1407 CG GLN B 47 36.854 -15.712 35.777 1.00 35.45 C +ATOM 1408 CD GLN B 47 36.478 -16.881 36.668 1.00 40.51 C +ATOM 1409 OE1 GLN B 47 37.328 -17.687 37.049 1.00 47.75 O +ATOM 1410 NE2 GLN B 47 35.195 -16.982 37.001 1.00 44.08 N +ATOM 1411 N GLU B 48 39.635 -12.835 38.127 1.00 14.84 N +ATOM 1412 CA GLU B 48 40.919 -12.340 38.598 1.00 15.28 C +ATOM 1413 C GLU B 48 40.953 -12.332 40.122 1.00 11.23 C +ATOM 1414 O GLU B 48 41.966 -12.685 40.728 1.00 12.95 O +ATOM 1415 CB GLU B 48 41.194 -10.929 38.068 1.00 19.97 C +ATOM 1416 CG GLU B 48 42.401 -10.274 38.728 1.00 27.02 C +ATOM 1417 CD GLU B 48 42.936 -9.080 37.961 1.00 35.49 C +ATOM 1418 OE1 GLU B 48 42.132 -8.218 37.548 1.00 40.04 O +ATOM 1419 OE2 GLU B 48 44.169 -8.997 37.783 1.00 40.61 O +ATOM 1420 N LEU B 49 39.846 -11.926 40.736 1.00 11.02 N +ATOM 1421 CA LEU B 49 39.762 -11.885 42.193 1.00 11.31 C +ATOM 1422 C LEU B 49 39.961 -13.280 42.770 1.00 10.26 C +ATOM 1423 O LEU B 49 40.787 -13.481 43.656 1.00 9.70 O +ATOM 1424 CB LEU B 49 38.404 -11.336 42.644 1.00 10.72 C +ATOM 1425 CG LEU B 49 38.112 -11.444 44.146 1.00 11.65 C +ATOM 1426 CD1 LEU B 49 39.136 -10.645 44.939 1.00 10.78 C +ATOM 1427 CD2 LEU B 49 36.704 -10.938 44.434 1.00 11.81 C +ATOM 1428 N VAL B 50 39.202 -14.244 42.261 1.00 10.32 N +ATOM 1429 CA VAL B 50 39.306 -15.613 42.748 1.00 10.38 C +ATOM 1430 C VAL B 50 40.726 -16.154 42.600 1.00 10.88 C +ATOM 1431 O VAL B 50 41.206 -16.896 43.455 1.00 13.41 O +ATOM 1432 CB VAL B 50 38.310 -16.535 42.016 1.00 13.49 C +ATOM 1433 CG1 VAL B 50 38.539 -17.985 42.420 1.00 17.72 C +ATOM 1434 CG2 VAL B 50 36.884 -16.117 42.361 1.00 15.41 C +ATOM 1435 N THR B 51 41.407 -15.783 41.523 1.00 11.07 N +ATOM 1436 CA THR B 51 42.776 -16.248 41.341 1.00 10.86 C +ATOM 1437 C THR B 51 43.654 -15.720 42.478 1.00 11.23 C +ATOM 1438 O THR B 51 44.450 -16.459 43.060 1.00 10.30 O +ATOM 1439 CB THR B 51 43.347 -15.788 39.984 1.00 12.39 C +ATOM 1440 OG1 THR B 51 42.631 -16.439 38.926 1.00 15.79 O +ATOM 1441 CG2 THR B 51 44.827 -16.145 39.877 1.00 18.33 C +ATOM 1442 N LEU B 52 43.487 -14.445 42.810 1.00 9.34 N +ATOM 1443 CA LEU B 52 44.268 -13.828 43.879 1.00 9.57 C +ATOM 1444 C LEU B 52 43.998 -14.404 45.271 1.00 11.04 C +ATOM 1445 O LEU B 52 44.922 -14.555 46.074 1.00 9.13 O +ATOM 1446 CB LEU B 52 44.007 -12.317 43.913 1.00 10.77 C +ATOM 1447 CG LEU B 52 44.517 -11.502 42.726 1.00 12.17 C +ATOM 1448 CD1 LEU B 52 43.986 -10.074 42.826 1.00 9.44 C +ATOM 1449 CD2 LEU B 52 46.042 -11.518 42.710 1.00 12.47 C +ATOM 1450 N ILE B 53 42.737 -14.722 45.555 1.00 9.03 N +ATOM 1451 CA ILE B 53 42.364 -15.239 46.870 1.00 7.73 C +ATOM 1452 C ILE B 53 42.152 -16.749 46.942 1.00 7.93 C +ATOM 1453 O ILE B 53 41.464 -17.244 47.836 1.00 8.40 O +ATOM 1454 CB ILE B 53 41.103 -14.523 47.406 1.00 5.70 C +ATOM 1455 CG1 ILE B 53 39.873 -14.863 46.556 1.00 6.12 C +ATOM 1456 CG2 ILE B 53 41.334 -13.011 47.401 1.00 9.05 C +ATOM 1457 CD1 ILE B 53 38.572 -14.312 47.139 1.00 8.25 C +ATOM 1458 N ARG B 54 42.758 -17.477 46.014 1.00 9.29 N +ATOM 1459 CA ARG B 54 42.631 -18.928 45.974 1.00 9.99 C +ATOM 1460 C ARG B 54 42.875 -19.572 47.327 1.00 8.02 C +ATOM 1461 O ARG B 54 42.100 -20.417 47.756 1.00 9.00 O +ATOM 1462 CB ARG B 54 43.621 -19.514 44.970 1.00 10.84 C +ATOM 1463 CG ARG B 54 43.545 -21.034 44.825 1.00 15.54 C +ATOM 1464 CD ARG B 54 44.889 -21.574 44.350 1.00 25.54 C +ATOM 1465 NE ARG B 54 45.874 -21.548 45.431 1.00 35.40 N +ATOM 1466 CZ ARG B 54 45.931 -22.444 46.417 1.00 35.95 C +ATOM 1467 NH1 ARG B 54 46.855 -22.337 47.363 1.00 34.18 N +ATOM 1468 NH2 ARG B 54 45.084 -23.463 46.445 1.00 36.89 N +ATOM 1469 N GLU B 55 43.955 -19.179 48.001 1.00 7.65 N +ATOM 1470 CA GLU B 55 44.280 -19.755 49.306 1.00 8.27 C +ATOM 1471 C GLU B 55 43.230 -19.447 50.378 1.00 8.18 C +ATOM 1472 O GLU B 55 42.825 -20.334 51.128 1.00 7.81 O +ATOM 1473 CB GLU B 55 45.660 -19.268 49.765 1.00 7.59 C +ATOM 1474 CG GLU B 55 46.121 -19.813 51.110 1.00 9.10 C +ATOM 1475 CD GLU B 55 46.189 -21.334 51.151 1.00 11.01 C +ATOM 1476 OE1 GLU B 55 46.581 -21.942 50.133 1.00 11.02 O +ATOM 1477 OE2 GLU B 55 45.871 -21.924 52.210 1.00 14.73 O +ATOM 1478 N ALA B 56 42.780 -18.197 50.450 1.00 5.58 N +ATOM 1479 CA ALA B 56 41.766 -17.826 51.441 1.00 8.49 C +ATOM 1480 C ALA B 56 40.509 -18.678 51.253 1.00 6.38 C +ATOM 1481 O ALA B 56 39.930 -19.169 52.222 1.00 7.61 O +ATOM 1482 CB ALA B 56 41.421 -16.341 51.305 1.00 7.15 C +ATOM 1483 N LEU B 57 40.087 -18.854 50.003 1.00 6.97 N +ATOM 1484 CA LEU B 57 38.895 -19.654 49.723 1.00 6.21 C +ATOM 1485 C LEU B 57 39.125 -21.130 50.040 1.00 6.89 C +ATOM 1486 O LEU B 57 38.231 -21.810 50.550 1.00 7.94 O +ATOM 1487 CB LEU B 57 38.481 -19.495 48.256 1.00 6.42 C +ATOM 1488 CG LEU B 57 38.129 -18.065 47.838 1.00 5.28 C +ATOM 1489 CD1 LEU B 57 37.753 -18.044 46.360 1.00 9.60 C +ATOM 1490 CD2 LEU B 57 36.975 -17.546 48.688 1.00 8.97 C +ATOM 1491 N LEU B 58 40.328 -21.617 49.746 1.00 7.19 N +ATOM 1492 CA LEU B 58 40.682 -23.014 50.003 1.00 6.27 C +ATOM 1493 C LEU B 58 40.545 -23.373 51.479 1.00 7.53 C +ATOM 1494 O LEU B 58 40.129 -24.481 51.820 1.00 8.25 O +ATOM 1495 CB LEU B 58 42.121 -23.282 49.548 1.00 6.35 C +ATOM 1496 CG LEU B 58 42.717 -24.658 49.858 1.00 7.35 C +ATOM 1497 CD1 LEU B 58 41.888 -25.747 49.182 1.00 7.89 C +ATOM 1498 CD2 LEU B 58 44.163 -24.708 49.380 1.00 10.98 C +ATOM 1499 N GLU B 59 40.896 -22.431 52.349 1.00 7.39 N +ATOM 1500 CA GLU B 59 40.833 -22.649 53.795 1.00 5.78 C +ATOM 1501 C GLU B 59 39.439 -22.459 54.377 1.00 7.88 C +ATOM 1502 O GLU B 59 39.225 -22.688 55.567 1.00 7.81 O +ATOM 1503 CB GLU B 59 41.794 -21.689 54.508 1.00 7.90 C +ATOM 1504 CG GLU B 59 43.269 -21.913 54.189 1.00 9.78 C +ATOM 1505 CD GLU B 59 44.161 -20.852 54.813 1.00 14.31 C +ATOM 1506 OE1 GLU B 59 43.781 -20.303 55.868 1.00 14.64 O +ATOM 1507 OE2 GLU B 59 45.246 -20.578 54.261 1.00 12.79 O +ATOM 1508 N ASN B 60 38.487 -22.056 53.543 1.00 7.83 N +ATOM 1509 CA ASN B 60 37.139 -21.803 54.034 1.00 6.84 C +ATOM 1510 C ASN B 60 36.024 -22.395 53.193 1.00 9.20 C +ATOM 1511 O ASN B 60 34.979 -21.777 52.989 1.00 7.74 O +ATOM 1512 CB ASN B 60 36.959 -20.295 54.187 1.00 7.58 C +ATOM 1513 CG ASN B 60 37.812 -19.737 55.302 1.00 7.35 C +ATOM 1514 OD1 ASN B 60 37.463 -19.854 56.474 1.00 8.74 O +ATOM 1515 ND2 ASN B 60 38.955 -19.151 54.947 1.00 7.82 N +ATOM 1516 N ILE B 61 36.254 -23.612 52.716 1.00 7.19 N +ATOM 1517 CA ILE B 61 35.274 -24.308 51.903 1.00 8.45 C +ATOM 1518 C ILE B 61 33.970 -24.537 52.664 1.00 6.57 C +ATOM 1519 O ILE B 61 32.893 -24.505 52.067 1.00 7.89 O +ATOM 1520 CB ILE B 61 35.847 -25.659 51.421 1.00 5.90 C +ATOM 1521 CG1 ILE B 61 36.984 -25.406 50.425 1.00 9.41 C +ATOM 1522 CG2 ILE B 61 34.754 -26.509 50.796 1.00 8.75 C +ATOM 1523 CD1 ILE B 61 37.798 -26.654 50.073 1.00 8.14 C +ATOM 1524 N ASP B 62 34.053 -24.753 53.977 1.00 7.51 N +ATOM 1525 CA ASP B 62 32.839 -24.992 54.752 1.00 7.54 C +ATOM 1526 C ASP B 62 32.080 -23.742 55.198 1.00 8.49 C +ATOM 1527 O ASP B 62 31.092 -23.839 55.927 1.00 9.19 O +ATOM 1528 CB ASP B 62 33.125 -25.913 55.954 1.00 8.95 C +ATOM 1529 CG ASP B 62 34.151 -25.345 56.931 1.00 11.12 C +ATOM 1530 OD1 ASP B 62 34.862 -24.373 56.603 1.00 11.35 O +ATOM 1531 OD2 ASP B 62 34.250 -25.905 58.043 1.00 12.08 O +ATOM 1532 N ILE B 63 32.526 -22.570 54.754 1.00 6.73 N +ATOM 1533 CA ILE B 63 31.831 -21.333 55.099 1.00 7.47 C +ATOM 1534 C ILE B 63 30.831 -21.025 53.983 1.00 6.96 C +ATOM 1535 O ILE B 63 31.175 -21.080 52.801 1.00 8.12 O +ATOM 1536 CB ILE B 63 32.812 -20.143 55.247 1.00 7.47 C +ATOM 1537 CG1 ILE B 63 33.789 -20.415 56.397 1.00 8.97 C +ATOM 1538 CG2 ILE B 63 32.041 -18.852 55.484 1.00 9.26 C +ATOM 1539 CD1 ILE B 63 33.126 -20.594 57.752 1.00 13.96 C +ATOM 1540 N GLY B 64 29.594 -20.718 54.361 1.00 8.71 N +ATOM 1541 CA GLY B 64 28.574 -20.414 53.371 1.00 9.81 C +ATOM 1542 C GLY B 64 28.652 -18.974 52.900 1.00 11.60 C +ATOM 1543 O GLY B 64 27.928 -18.109 53.392 1.00 16.00 O +ATOM 1544 N TYR B 65 29.521 -18.716 51.931 1.00 9.38 N +ATOM 1545 CA TYR B 65 29.691 -17.360 51.422 1.00 9.58 C +ATOM 1546 C TYR B 65 29.271 -17.191 49.968 1.00 9.17 C +ATOM 1547 O TYR B 65 29.208 -18.152 49.198 1.00 10.42 O +ATOM 1548 CB TYR B 65 31.159 -16.940 51.560 1.00 8.00 C +ATOM 1549 CG TYR B 65 32.102 -17.727 50.671 1.00 8.44 C +ATOM 1550 CD1 TYR B 65 32.355 -17.325 49.358 1.00 8.81 C +ATOM 1551 CD2 TYR B 65 32.707 -18.900 51.130 1.00 7.86 C +ATOM 1552 CE1 TYR B 65 33.186 -18.072 48.522 1.00 9.11 C +ATOM 1553 CE2 TYR B 65 33.542 -19.655 50.300 1.00 7.54 C +ATOM 1554 CZ TYR B 65 33.773 -19.233 48.997 1.00 8.70 C +ATOM 1555 OH TYR B 65 34.584 -19.970 48.162 1.00 8.32 O +ATOM 1556 N GLU B 66 28.971 -15.950 49.609 1.00 9.95 N +ATOM 1557 CA GLU B 66 28.626 -15.599 48.244 1.00 10.88 C +ATOM 1558 C GLU B 66 29.390 -14.316 47.987 1.00 10.98 C +ATOM 1559 O GLU B 66 29.493 -13.463 48.869 1.00 11.96 O +ATOM 1560 CB GLU B 66 27.117 -15.390 48.066 1.00 16.40 C +ATOM 1561 CG GLU B 66 26.420 -14.541 49.113 1.00 22.87 C +ATOM 1562 CD GLU B 66 24.932 -14.377 48.814 1.00 29.66 C +ATOM 1563 OE1 GLU B 66 24.317 -15.340 48.309 1.00 28.07 O +ATOM 1564 OE2 GLU B 66 24.372 -13.294 49.089 1.00 28.91 O +ATOM 1565 N LEU B 67 29.958 -14.200 46.793 1.00 10.09 N +ATOM 1566 CA LEU B 67 30.736 -13.023 46.438 1.00 9.45 C +ATOM 1567 C LEU B 67 30.013 -12.174 45.404 1.00 9.82 C +ATOM 1568 O LEU B 67 29.510 -12.684 44.405 1.00 9.58 O +ATOM 1569 CB LEU B 67 32.098 -13.436 45.864 1.00 10.31 C +ATOM 1570 CG LEU B 67 33.024 -14.359 46.663 1.00 12.61 C +ATOM 1571 CD1 LEU B 67 34.260 -14.652 45.824 1.00 14.54 C +ATOM 1572 CD2 LEU B 67 33.416 -13.716 47.986 1.00 16.56 C +ATOM 1573 N PHE B 68 29.965 -10.874 45.655 1.00 7.13 N +ATOM 1574 CA PHE B 68 29.349 -9.941 44.731 1.00 8.35 C +ATOM 1575 C PHE B 68 30.373 -8.842 44.496 1.00 8.15 C +ATOM 1576 O PHE B 68 30.893 -8.265 45.452 1.00 9.87 O +ATOM 1577 CB PHE B 68 28.079 -9.342 45.338 1.00 6.56 C +ATOM 1578 CG PHE B 68 26.940 -10.313 45.438 1.00 11.63 C +ATOM 1579 CD1 PHE B 68 26.211 -10.667 44.306 1.00 15.37 C +ATOM 1580 CD2 PHE B 68 26.596 -10.875 46.662 1.00 12.83 C +ATOM 1581 CE1 PHE B 68 25.152 -11.568 44.393 1.00 13.27 C +ATOM 1582 CE2 PHE B 68 25.539 -11.778 46.760 1.00 15.36 C +ATOM 1583 CZ PHE B 68 24.817 -12.124 45.626 1.00 16.24 C +ATOM 1584 N LEU B 69 30.692 -8.578 43.234 1.00 5.68 N +ATOM 1585 CA LEU B 69 31.650 -7.527 42.914 1.00 4.44 C +ATOM 1586 C LEU B 69 30.907 -6.317 42.384 1.00 6.39 C +ATOM 1587 O LEU B 69 29.952 -6.459 41.617 1.00 7.09 O +ATOM 1588 CB LEU B 69 32.661 -8.008 41.873 1.00 5.18 C +ATOM 1589 CG LEU B 69 33.798 -8.882 42.412 1.00 10.26 C +ATOM 1590 CD1 LEU B 69 33.221 -10.151 43.019 1.00 11.61 C +ATOM 1591 CD2 LEU B 69 34.768 -9.215 41.286 1.00 11.86 C +ATOM 1592 N TRP B 70 31.340 -5.130 42.800 1.00 6.32 N +ATOM 1593 CA TRP B 70 30.705 -3.894 42.360 1.00 6.17 C +ATOM 1594 C TRP B 70 31.718 -2.869 41.889 1.00 6.61 C +ATOM 1595 O TRP B 70 32.664 -2.547 42.611 1.00 7.06 O +ATOM 1596 CB TRP B 70 29.895 -3.267 43.501 1.00 7.19 C +ATOM 1597 CG TRP B 70 28.922 -4.198 44.142 1.00 8.42 C +ATOM 1598 CD1 TRP B 70 29.044 -4.803 45.358 1.00 9.62 C +ATOM 1599 CD2 TRP B 70 27.671 -4.631 43.600 1.00 10.62 C +ATOM 1600 NE1 TRP B 70 27.941 -5.588 45.610 1.00 8.49 N +ATOM 1601 CE2 TRP B 70 27.083 -5.499 44.545 1.00 7.83 C +ATOM 1602 CE3 TRP B 70 26.989 -4.369 42.403 1.00 11.10 C +ATOM 1603 CZ2 TRP B 70 25.840 -6.108 44.333 1.00 10.76 C +ATOM 1604 CZ3 TRP B 70 25.756 -4.974 42.191 1.00 13.52 C +ATOM 1605 CH2 TRP B 70 25.194 -5.835 43.152 1.00 12.87 C +ATOM 1606 N LYS B 71 31.529 -2.358 40.679 1.00 7.61 N +ATOM 1607 CA LYS B 71 32.419 -1.326 40.172 1.00 6.82 C +ATOM 1608 C LYS B 71 32.048 -0.038 40.905 1.00 7.46 C +ATOM 1609 O LYS B 71 30.964 0.055 41.489 1.00 8.76 O +ATOM 1610 CB LYS B 71 32.262 -1.184 38.657 1.00 10.45 C +ATOM 1611 CG LYS B 71 32.688 -2.447 37.920 1.00 14.60 C +ATOM 1612 CD LYS B 71 32.776 -2.235 36.424 1.00 21.45 C +ATOM 1613 CE LYS B 71 33.170 -3.528 35.718 1.00 28.85 C +ATOM 1614 NZ LYS B 71 34.417 -4.119 36.279 1.00 29.47 N +ATOM 1615 N LYS B 72 32.934 0.952 40.881 1.00 10.20 N +ATOM 1616 CA LYS B 72 32.683 2.190 41.615 1.00 10.67 C +ATOM 1617 C LYS B 72 31.363 2.895 41.325 1.00 11.13 C +ATOM 1618 O LYS B 72 30.823 3.562 42.204 1.00 12.36 O +ATOM 1619 CB LYS B 72 33.845 3.175 41.423 1.00 12.82 C +ATOM 1620 CG LYS B 72 34.057 3.639 40.001 1.00 18.96 C +ATOM 1621 CD LYS B 72 35.183 4.664 39.913 1.00 28.19 C +ATOM 1622 CE LYS B 72 36.520 4.078 40.352 1.00 32.59 C +ATOM 1623 NZ LYS B 72 37.623 5.080 40.287 1.00 35.96 N +ATOM 1624 N ASN B 73 30.832 2.751 40.113 1.00 8.90 N +ATOM 1625 CA ASN B 73 29.574 3.414 39.788 1.00 9.56 C +ATOM 1626 C ASN B 73 28.354 2.527 40.037 1.00 10.10 C +ATOM 1627 O ASN B 73 27.233 2.896 39.693 1.00 10.34 O +ATOM 1628 CB ASN B 73 29.592 3.918 38.328 1.00 8.81 C +ATOM 1629 CG ASN B 73 29.639 2.794 37.304 1.00 10.55 C +ATOM 1630 OD1 ASN B 73 29.998 1.660 37.616 1.00 12.03 O +ATOM 1631 ND2 ASN B 73 29.290 3.117 36.060 1.00 9.29 N +ATOM 1632 N GLU B 74 28.569 1.373 40.666 1.00 9.00 N +ATOM 1633 CA GLU B 74 27.469 0.454 40.940 1.00 6.85 C +ATOM 1634 C GLU B 74 27.067 0.383 42.410 1.00 8.04 C +ATOM 1635 O GLU B 74 26.327 -0.515 42.811 1.00 7.33 O +ATOM 1636 CB GLU B 74 27.822 -0.950 40.445 1.00 9.08 C +ATOM 1637 CG GLU B 74 28.150 -1.011 38.957 1.00 8.15 C +ATOM 1638 CD GLU B 74 28.526 -2.404 38.503 1.00 12.67 C +ATOM 1639 OE1 GLU B 74 29.315 -3.068 39.207 1.00 10.13 O +ATOM 1640 OE2 GLU B 74 28.042 -2.832 37.435 1.00 15.47 O +ATOM 1641 N VAL B 75 27.546 1.323 43.217 1.00 6.01 N +ATOM 1642 CA VAL B 75 27.194 1.309 44.628 1.00 6.91 C +ATOM 1643 C VAL B 75 25.682 1.445 44.799 1.00 6.67 C +ATOM 1644 O VAL B 75 25.110 0.892 45.736 1.00 8.26 O +ATOM 1645 CB VAL B 75 27.912 2.439 45.412 1.00 7.12 C +ATOM 1646 CG1 VAL B 75 27.420 2.463 46.858 1.00 5.38 C +ATOM 1647 CG2 VAL B 75 29.418 2.209 45.390 1.00 6.09 C +ATOM 1648 N ASP B 76 25.025 2.163 43.893 1.00 6.82 N +ATOM 1649 CA ASP B 76 23.583 2.319 44.020 1.00 7.89 C +ATOM 1650 C ASP B 76 22.834 1.000 43.830 1.00 7.12 C +ATOM 1651 O ASP B 76 21.776 0.803 44.422 1.00 8.14 O +ATOM 1652 CB ASP B 76 23.051 3.404 43.064 1.00 7.64 C +ATOM 1653 CG ASP B 76 23.365 3.132 41.602 1.00 11.13 C +ATOM 1654 OD1 ASP B 76 24.132 2.203 41.297 1.00 10.63 O +ATOM 1655 OD2 ASP B 76 22.837 3.878 40.751 1.00 13.20 O +ATOM 1656 N ILE B 77 23.387 0.092 43.028 1.00 6.11 N +ATOM 1657 CA ILE B 77 22.744 -1.205 42.808 1.00 8.01 C +ATOM 1658 C ILE B 77 22.865 -2.010 44.101 1.00 8.15 C +ATOM 1659 O ILE B 77 21.906 -2.637 44.558 1.00 9.44 O +ATOM 1660 CB ILE B 77 23.425 -2.003 41.673 1.00 9.58 C +ATOM 1661 CG1 ILE B 77 23.411 -1.197 40.376 1.00 7.88 C +ATOM 1662 CG2 ILE B 77 22.686 -3.322 41.452 1.00 8.83 C +ATOM 1663 CD1 ILE B 77 24.174 -1.865 39.240 1.00 12.83 C +ATOM 1664 N PHE B 78 24.063 -1.987 44.677 1.00 6.79 N +ATOM 1665 CA PHE B 78 24.345 -2.679 45.931 1.00 8.25 C +ATOM 1666 C PHE B 78 23.391 -2.195 47.028 1.00 8.65 C +ATOM 1667 O PHE B 78 22.766 -2.994 47.732 1.00 7.35 O +ATOM 1668 CB PHE B 78 25.797 -2.404 46.343 1.00 8.13 C +ATOM 1669 CG PHE B 78 26.064 -2.614 47.804 1.00 9.18 C +ATOM 1670 CD1 PHE B 78 26.089 -3.896 48.347 1.00 11.50 C +ATOM 1671 CD2 PHE B 78 26.260 -1.525 48.647 1.00 9.14 C +ATOM 1672 CE1 PHE B 78 26.302 -4.091 49.710 1.00 12.70 C +ATOM 1673 CE2 PHE B 78 26.472 -1.709 50.011 1.00 8.09 C +ATOM 1674 CZ PHE B 78 26.492 -2.997 50.543 1.00 8.89 C +ATOM 1675 N LEU B 79 23.280 -0.879 47.174 1.00 6.99 N +ATOM 1676 CA LEU B 79 22.406 -0.309 48.195 1.00 8.19 C +ATOM 1677 C LEU B 79 20.935 -0.653 47.975 1.00 9.19 C +ATOM 1678 O LEU B 79 20.199 -0.903 48.933 1.00 10.56 O +ATOM 1679 CB LEU B 79 22.586 1.212 48.258 1.00 7.77 C +ATOM 1680 CG LEU B 79 23.921 1.718 48.820 1.00 5.84 C +ATOM 1681 CD1 LEU B 79 23.942 3.241 48.802 1.00 6.51 C +ATOM 1682 CD2 LEU B 79 24.111 1.209 50.245 1.00 8.59 C +ATOM 1683 N LYS B 80 20.506 -0.667 46.717 1.00 8.80 N +ATOM 1684 CA LYS B 80 19.117 -0.992 46.399 1.00 11.21 C +ATOM 1685 C LYS B 80 18.807 -2.433 46.794 1.00 10.33 C +ATOM 1686 O LYS B 80 17.754 -2.720 47.370 1.00 11.42 O +ATOM 1687 CB LYS B 80 18.856 -0.805 44.901 1.00 8.58 C +ATOM 1688 CG LYS B 80 17.441 -1.174 44.457 1.00 13.04 C +ATOM 1689 CD LYS B 80 16.393 -0.278 45.106 1.00 19.56 C +ATOM 1690 CE LYS B 80 14.994 -0.616 44.612 1.00 20.22 C +ATOM 1691 NZ LYS B 80 14.629 -2.024 44.919 1.00 31.99 N +ATOM 1692 N ASN B 81 19.731 -3.335 46.486 1.00 7.78 N +ATOM 1693 CA ASN B 81 19.559 -4.746 46.801 1.00 8.85 C +ATOM 1694 C ASN B 81 19.494 -5.008 48.302 1.00 11.79 C +ATOM 1695 O ASN B 81 18.920 -6.005 48.733 1.00 13.02 O +ATOM 1696 CB ASN B 81 20.695 -5.571 46.195 1.00 8.56 C +ATOM 1697 CG ASN B 81 20.609 -5.668 44.686 1.00 11.64 C +ATOM 1698 OD1 ASN B 81 19.701 -5.116 44.060 1.00 10.80 O +ATOM 1699 ND2 ASN B 81 21.561 -6.377 44.091 1.00 10.75 N +ATOM 1700 N LEU B 82 20.082 -4.120 49.098 1.00 9.55 N +ATOM 1701 CA LEU B 82 20.057 -4.301 50.545 1.00 10.33 C +ATOM 1702 C LEU B 82 18.641 -4.223 51.100 1.00 11.86 C +ATOM 1703 O LEU B 82 18.372 -4.695 52.203 1.00 13.00 O +ATOM 1704 CB LEU B 82 20.930 -3.254 51.240 1.00 9.26 C +ATOM 1705 CG LEU B 82 22.442 -3.431 51.116 1.00 9.05 C +ATOM 1706 CD1 LEU B 82 23.140 -2.329 51.907 1.00 8.92 C +ATOM 1707 CD2 LEU B 82 22.851 -4.799 51.646 1.00 10.02 C +ATOM 1708 N GLU B 83 17.731 -3.629 50.339 1.00 14.53 N +ATOM 1709 CA GLU B 83 16.353 -3.521 50.798 1.00 19.28 C +ATOM 1710 C GLU B 83 15.740 -4.909 50.969 1.00 16.91 C +ATOM 1711 O GLU B 83 14.796 -5.087 51.740 1.00 22.85 O +ATOM 1712 CB GLU B 83 15.523 -2.705 49.806 1.00 17.82 C +ATOM 1713 CG GLU B 83 16.124 -1.348 49.480 1.00 20.84 C +ATOM 1714 CD GLU B 83 15.169 -0.450 48.720 1.00 24.65 C +ATOM 1715 OE1 GLU B 83 14.455 -0.957 47.831 1.00 24.44 O +ATOM 1716 OE2 GLU B 83 15.143 0.766 49.008 1.00 29.53 O +ATOM 1717 N LYS B 84 16.288 -5.890 50.257 1.00 18.37 N +ATOM 1718 CA LYS B 84 15.791 -7.263 50.318 1.00 19.92 C +ATOM 1719 C LYS B 84 16.692 -8.213 51.104 1.00 21.36 C +ATOM 1720 O LYS B 84 16.516 -9.429 51.038 1.00 22.42 O +ATOM 1721 CB LYS B 84 15.623 -7.824 48.905 1.00 19.42 C +ATOM 1722 CG LYS B 84 14.672 -7.046 48.012 1.00 20.23 C +ATOM 1723 CD LYS B 84 14.571 -7.707 46.647 1.00 19.41 C +ATOM 1724 CE LYS B 84 13.602 -6.969 45.739 1.00 21.89 C +ATOM 1725 NZ LYS B 84 13.462 -7.655 44.424 1.00 22.51 N +ATOM 1726 N SER B 85 17.653 -7.668 51.842 1.00 20.41 N +ATOM 1727 CA SER B 85 18.573 -8.503 52.610 1.00 23.07 C +ATOM 1728 C SER B 85 18.061 -8.818 54.011 1.00 23.57 C +ATOM 1729 O SER B 85 17.211 -8.109 54.546 1.00 24.14 O +ATOM 1730 CB SER B 85 19.933 -7.813 52.728 1.00 21.57 C +ATOM 1731 OG SER B 85 19.832 -6.638 53.513 1.00 25.20 O +ATOM 1732 N GLU B 86 18.589 -9.890 54.595 1.00 26.07 N +ATOM 1733 CA GLU B 86 18.218 -10.297 55.947 1.00 27.12 C +ATOM 1734 C GLU B 86 19.449 -10.455 56.833 1.00 25.62 C +ATOM 1735 O GLU B 86 19.457 -11.265 57.761 1.00 29.42 O +ATOM 1736 CB GLU B 86 17.442 -11.616 55.932 1.00 33.85 C +ATOM 1737 CG GLU B 86 15.974 -11.483 55.572 1.00 46.71 C +ATOM 1738 CD GLU B 86 15.149 -12.647 56.094 1.00 55.10 C +ATOM 1739 OE1 GLU B 86 15.076 -12.816 57.331 1.00 58.77 O +ATOM 1740 OE2 GLU B 86 14.577 -13.393 55.272 1.00 60.31 O +ATOM 1741 N VAL B 87 20.487 -9.678 56.549 1.00 19.87 N +ATOM 1742 CA VAL B 87 21.721 -9.739 57.325 1.00 15.79 C +ATOM 1743 C VAL B 87 21.506 -9.220 58.747 1.00 15.58 C +ATOM 1744 O VAL B 87 20.686 -8.329 58.969 1.00 16.78 O +ATOM 1745 CB VAL B 87 22.835 -8.920 56.642 1.00 13.99 C +ATOM 1746 CG1 VAL B 87 23.189 -9.550 55.304 1.00 14.84 C +ATOM 1747 CG2 VAL B 87 22.378 -7.485 56.435 1.00 15.74 C +ATOM 1748 N ASP B 88 22.243 -9.777 59.707 1.00 12.15 N +ATOM 1749 CA ASP B 88 22.111 -9.363 61.103 1.00 12.58 C +ATOM 1750 C ASP B 88 23.424 -8.891 61.719 1.00 12.85 C +ATOM 1751 O ASP B 88 23.489 -8.607 62.913 1.00 12.10 O +ATOM 1752 CB ASP B 88 21.535 -10.510 61.946 1.00 12.92 C +ATOM 1753 CG ASP B 88 22.373 -11.778 61.865 1.00 16.42 C +ATOM 1754 OD1 ASP B 88 23.456 -11.748 61.248 1.00 13.85 O +ATOM 1755 OD2 ASP B 88 21.945 -12.809 62.426 1.00 18.60 O +ATOM 1756 N GLY B 89 24.465 -8.810 60.898 1.00 9.61 N +ATOM 1757 CA GLY B 89 25.765 -8.370 61.375 1.00 8.63 C +ATOM 1758 C GLY B 89 26.526 -7.749 60.220 1.00 8.43 C +ATOM 1759 O GLY B 89 26.303 -8.118 59.068 1.00 9.07 O +ATOM 1760 N LEU B 90 27.431 -6.824 60.526 1.00 6.06 N +ATOM 1761 CA LEU B 90 28.197 -6.125 59.495 1.00 7.92 C +ATOM 1762 C LEU B 90 29.699 -6.040 59.755 1.00 8.64 C +ATOM 1763 O LEU B 90 30.126 -5.642 60.839 1.00 8.63 O +ATOM 1764 CB LEU B 90 27.641 -4.703 59.335 1.00 6.14 C +ATOM 1765 CG LEU B 90 28.462 -3.683 58.540 1.00 7.39 C +ATOM 1766 CD1 LEU B 90 28.459 -4.048 57.061 1.00 8.17 C +ATOM 1767 CD2 LEU B 90 27.865 -2.287 58.742 1.00 7.67 C +ATOM 1768 N LEU B 91 30.488 -6.410 58.747 1.00 8.03 N +ATOM 1769 CA LEU B 91 31.948 -6.346 58.821 1.00 7.73 C +ATOM 1770 C LEU B 91 32.418 -5.421 57.696 1.00 7.16 C +ATOM 1771 O LEU B 91 31.980 -5.560 56.556 1.00 7.44 O +ATOM 1772 CB LEU B 91 32.566 -7.739 58.630 1.00 8.30 C +ATOM 1773 CG LEU B 91 32.297 -8.804 59.697 1.00 9.27 C +ATOM 1774 CD1 LEU B 91 32.918 -10.122 59.253 1.00 8.84 C +ATOM 1775 CD2 LEU B 91 32.879 -8.366 61.036 1.00 9.26 C +ATOM 1776 N VAL B 92 33.300 -4.476 58.020 1.00 5.28 N +ATOM 1777 CA VAL B 92 33.805 -3.528 57.030 1.00 7.29 C +ATOM 1778 C VAL B 92 35.331 -3.537 56.959 1.00 8.28 C +ATOM 1779 O VAL B 92 36.003 -3.466 57.991 1.00 8.12 O +ATOM 1780 CB VAL B 92 33.333 -2.097 57.360 1.00 6.10 C +ATOM 1781 CG1 VAL B 92 33.953 -1.102 56.387 1.00 9.80 C +ATOM 1782 CG2 VAL B 92 31.810 -2.031 57.295 1.00 8.41 C +ATOM 1783 N TYR B 93 35.865 -3.613 55.739 1.00 7.56 N +ATOM 1784 CA TYR B 93 37.314 -3.644 55.512 1.00 8.52 C +ATOM 1785 C TYR B 93 37.751 -2.746 54.368 1.00 8.93 C +ATOM 1786 O TYR B 93 37.059 -2.635 53.356 1.00 8.79 O +ATOM 1787 CB TYR B 93 37.777 -5.054 55.143 1.00 6.28 C +ATOM 1788 CG TYR B 93 37.401 -6.110 56.135 1.00 7.75 C +ATOM 1789 CD1 TYR B 93 38.258 -6.448 57.178 1.00 8.54 C +ATOM 1790 CD2 TYR B 93 36.173 -6.760 56.047 1.00 6.62 C +ATOM 1791 CE1 TYR B 93 37.899 -7.410 58.112 1.00 7.93 C +ATOM 1792 CE2 TYR B 93 35.805 -7.720 56.973 1.00 7.24 C +ATOM 1793 CZ TYR B 93 36.668 -8.041 58.001 1.00 6.95 C +ATOM 1794 OH TYR B 93 36.297 -8.983 58.924 1.00 8.30 O +ATOM 1795 N CYS B 94 38.916 -2.126 54.519 1.00 10.13 N +ATOM 1796 CA CYS B 94 39.474 -1.296 53.458 1.00 6.30 C +ATOM 1797 C CYS B 94 40.934 -1.012 53.768 1.00 9.34 C +ATOM 1798 O CYS B 94 41.413 -1.327 54.855 1.00 9.31 O +ATOM 1799 CB CYS B 94 38.720 0.038 53.327 1.00 9.03 C +ATOM 1800 SG CYS B 94 39.178 1.336 54.530 1.00 9.87 S +ATOM 1801 N ASP B 95 41.650 -0.461 52.793 1.00 8.48 N +ATOM 1802 CA ASP B 95 43.035 -0.071 53.012 1.00 10.08 C +ATOM 1803 C ASP B 95 43.051 1.444 52.844 1.00 11.80 C +ATOM 1804 O ASP B 95 42.013 2.040 52.560 1.00 10.63 O +ATOM 1805 CB ASP B 95 44.006 -0.766 52.039 1.00 10.61 C +ATOM 1806 CG ASP B 95 43.580 -0.672 50.585 1.00 8.45 C +ATOM 1807 OD1 ASP B 95 42.664 0.111 50.255 1.00 12.75 O +ATOM 1808 OD2 ASP B 95 44.191 -1.392 49.765 1.00 11.59 O +ATOM 1809 N ASP B 96 44.202 2.080 53.024 1.00 12.83 N +ATOM 1810 CA ASP B 96 44.246 3.534 52.912 1.00 12.81 C +ATOM 1811 C ASP B 96 43.786 4.116 51.581 1.00 12.83 C +ATOM 1812 O ASP B 96 43.073 5.124 51.555 1.00 12.12 O +ATOM 1813 CB ASP B 96 45.646 4.051 53.243 1.00 14.63 C +ATOM 1814 CG ASP B 96 45.965 3.940 54.717 1.00 18.00 C +ATOM 1815 OD1 ASP B 96 45.036 4.107 55.539 1.00 20.62 O +ATOM 1816 OD2 ASP B 96 47.142 3.704 55.055 1.00 20.71 O +ATOM 1817 N GLU B 97 44.181 3.493 50.480 1.00 13.53 N +ATOM 1818 CA GLU B 97 43.797 3.990 49.165 1.00 16.29 C +ATOM 1819 C GLU B 97 42.293 3.999 48.910 1.00 15.06 C +ATOM 1820 O GLU B 97 41.811 4.738 48.053 1.00 13.57 O +ATOM 1821 CB GLU B 97 44.491 3.177 48.068 1.00 19.19 C +ATOM 1822 CG GLU B 97 45.967 3.506 47.915 1.00 33.67 C +ATOM 1823 CD GLU B 97 46.597 2.839 46.710 1.00 39.74 C +ATOM 1824 OE1 GLU B 97 46.065 3.000 45.590 1.00 44.51 O +ATOM 1825 OE2 GLU B 97 47.631 2.159 46.883 1.00 45.30 O +ATOM 1826 N ASN B 98 41.549 3.195 49.661 1.00 12.17 N +ATOM 1827 CA ASN B 98 40.107 3.113 49.459 1.00 11.15 C +ATOM 1828 C ASN B 98 39.261 3.487 50.674 1.00 11.99 C +ATOM 1829 O ASN B 98 38.048 3.275 50.679 1.00 10.72 O +ATOM 1830 CB ASN B 98 39.754 1.699 48.991 1.00 11.64 C +ATOM 1831 CG ASN B 98 40.408 1.347 47.664 1.00 10.09 C +ATOM 1832 OD1 ASN B 98 39.992 1.828 46.607 1.00 13.42 O +ATOM 1833 ND2 ASN B 98 41.447 0.520 47.713 1.00 8.18 N +ATOM 1834 N LYS B 99 39.896 4.064 51.689 1.00 10.70 N +ATOM 1835 CA LYS B 99 39.202 4.453 52.914 1.00 9.28 C +ATOM 1836 C LYS B 99 38.101 5.505 52.754 1.00 10.44 C +ATOM 1837 O LYS B 99 37.004 5.350 53.298 1.00 9.09 O +ATOM 1838 CB LYS B 99 40.223 4.933 53.946 1.00 14.04 C +ATOM 1839 CG LYS B 99 39.622 5.373 55.271 1.00 15.01 C +ATOM 1840 CD LYS B 99 40.712 5.559 56.327 1.00 19.90 C +ATOM 1841 CE LYS B 99 41.761 6.564 55.878 1.00 26.11 C +ATOM 1842 NZ LYS B 99 42.944 6.571 56.785 1.00 26.96 N +ATOM 1843 N VAL B 100 38.390 6.580 52.030 1.00 9.93 N +ATOM 1844 CA VAL B 100 37.398 7.632 51.838 1.00 7.71 C +ATOM 1845 C VAL B 100 36.164 7.083 51.128 1.00 6.80 C +ATOM 1846 O VAL B 100 35.033 7.363 51.524 1.00 8.22 O +ATOM 1847 CB VAL B 100 37.983 8.805 51.019 1.00 9.27 C +ATOM 1848 CG1 VAL B 100 36.916 9.865 50.786 1.00 11.14 C +ATOM 1849 CG2 VAL B 100 39.168 9.414 51.769 1.00 15.69 C +ATOM 1850 N PHE B 101 36.398 6.280 50.097 1.00 7.70 N +ATOM 1851 CA PHE B 101 35.322 5.675 49.312 1.00 8.14 C +ATOM 1852 C PHE B 101 34.479 4.742 50.180 1.00 8.71 C +ATOM 1853 O PHE B 101 33.250 4.853 50.224 1.00 7.41 O +ATOM 1854 CB PHE B 101 35.927 4.907 48.130 1.00 5.31 C +ATOM 1855 CG PHE B 101 34.907 4.246 47.230 1.00 7.28 C +ATOM 1856 CD1 PHE B 101 33.906 4.989 46.616 1.00 8.36 C +ATOM 1857 CD2 PHE B 101 34.976 2.880 46.976 1.00 8.23 C +ATOM 1858 CE1 PHE B 101 32.985 4.381 45.754 1.00 12.37 C +ATOM 1859 CE2 PHE B 101 34.066 2.261 46.120 1.00 9.85 C +ATOM 1860 CZ PHE B 101 33.068 3.012 45.506 1.00 11.79 C +HETATM 1861 N MSE B 102 35.133 3.819 50.878 1.00 8.34 N +HETATM 1862 CA MSE B 102 34.399 2.889 51.728 1.00 7.79 C +HETATM 1863 C MSE B 102 33.624 3.614 52.821 1.00 8.44 C +HETATM 1864 O MSE B 102 32.502 3.230 53.152 1.00 7.89 O +HETATM 1865 CB MSE B 102 35.342 1.866 52.363 1.00 7.74 C +HETATM 1866 CG MSE B 102 34.653 0.952 53.367 1.00 7.13 C +HETATM 1867 SE MSE B 102 33.179 -0.057 52.589 1.00 21.70 SE +HETATM 1868 CE MSE B 102 34.237 -1.244 51.580 1.00 3.62 C +ATOM 1869 N SER B 103 34.214 4.667 53.379 1.00 10.25 N +ATOM 1870 CA SER B 103 33.543 5.428 54.423 1.00 9.15 C +ATOM 1871 C SER B 103 32.213 5.987 53.913 1.00 9.43 C +ATOM 1872 O SER B 103 31.223 6.000 54.643 1.00 8.98 O +ATOM 1873 CB SER B 103 34.438 6.569 54.911 1.00 12.94 C +ATOM 1874 OG SER B 103 35.597 6.055 55.542 1.00 22.39 O +ATOM 1875 N LYS B 104 32.194 6.449 52.664 1.00 9.19 N +ATOM 1876 CA LYS B 104 30.970 6.986 52.078 1.00 8.57 C +ATOM 1877 C LYS B 104 29.930 5.884 51.887 1.00 8.03 C +ATOM 1878 O LYS B 104 28.731 6.110 52.064 1.00 8.00 O +ATOM 1879 CB LYS B 104 31.268 7.676 50.740 1.00 8.00 C +ATOM 1880 CG LYS B 104 31.871 9.067 50.906 1.00 9.99 C +ATOM 1881 CD LYS B 104 32.200 9.726 49.569 1.00 7.11 C +ATOM 1882 CE LYS B 104 33.320 8.997 48.840 1.00 6.13 C +ATOM 1883 NZ LYS B 104 33.713 9.685 47.577 1.00 5.13 N +ATOM 1884 N ILE B 105 30.384 4.688 51.531 1.00 6.44 N +ATOM 1885 CA ILE B 105 29.462 3.573 51.353 1.00 6.44 C +ATOM 1886 C ILE B 105 28.830 3.272 52.708 1.00 6.86 C +ATOM 1887 O ILE B 105 27.612 3.161 52.822 1.00 6.84 O +ATOM 1888 CB ILE B 105 30.192 2.306 50.833 1.00 7.27 C +ATOM 1889 CG1 ILE B 105 30.792 2.582 49.447 1.00 6.29 C +ATOM 1890 CG2 ILE B 105 29.221 1.133 50.772 1.00 8.00 C +ATOM 1891 CD1 ILE B 105 31.576 1.404 48.858 1.00 7.28 C +ATOM 1892 N VAL B 106 29.661 3.163 53.743 1.00 7.24 N +ATOM 1893 CA VAL B 106 29.164 2.872 55.084 1.00 9.20 C +ATOM 1894 C VAL B 106 28.161 3.927 55.551 1.00 7.38 C +ATOM 1895 O VAL B 106 27.119 3.595 56.122 1.00 8.51 O +ATOM 1896 CB VAL B 106 30.323 2.788 56.108 1.00 7.67 C +ATOM 1897 CG1 VAL B 106 29.766 2.577 57.510 1.00 11.73 C +ATOM 1898 CG2 VAL B 106 31.254 1.633 55.740 1.00 12.47 C +ATOM 1899 N ASP B 107 28.473 5.195 55.298 1.00 7.77 N +ATOM 1900 CA ASP B 107 27.600 6.297 55.700 1.00 9.68 C +ATOM 1901 C ASP B 107 26.195 6.181 55.132 1.00 9.43 C +ATOM 1902 O ASP B 107 25.243 6.702 55.715 1.00 10.12 O +ATOM 1903 CB ASP B 107 28.160 7.649 55.246 1.00 11.43 C +ATOM 1904 CG ASP B 107 29.454 8.021 55.935 1.00 14.81 C +ATOM 1905 OD1 ASP B 107 29.679 7.575 57.079 1.00 13.62 O +ATOM 1906 OD2 ASP B 107 30.238 8.783 55.327 1.00 15.91 O +ATOM 1907 N ASN B 108 26.071 5.508 53.992 1.00 6.57 N +ATOM 1908 CA ASN B 108 24.786 5.373 53.330 1.00 6.46 C +ATOM 1909 C ASN B 108 24.078 4.036 53.473 1.00 7.81 C +ATOM 1910 O ASN B 108 23.088 3.775 52.787 1.00 6.91 O +ATOM 1911 CB ASN B 108 24.944 5.724 51.854 1.00 5.98 C +ATOM 1912 CG ASN B 108 25.294 7.180 51.656 1.00 11.56 C +ATOM 1913 OD1 ASN B 108 26.455 7.536 51.435 1.00 13.06 O +ATOM 1914 ND2 ASN B 108 24.288 8.038 51.762 1.00 7.03 N +ATOM 1915 N LEU B 109 24.574 3.193 54.367 1.00 8.14 N +ATOM 1916 CA LEU B 109 23.942 1.902 54.592 1.00 9.38 C +ATOM 1917 C LEU B 109 22.630 2.122 55.329 1.00 9.65 C +ATOM 1918 O LEU B 109 22.479 3.106 56.056 1.00 11.76 O +ATOM 1919 CB LEU B 109 24.843 1.007 55.443 1.00 7.90 C +ATOM 1920 CG LEU B 109 26.133 0.519 54.786 1.00 9.37 C +ATOM 1921 CD1 LEU B 109 27.005 -0.174 55.820 1.00 11.40 C +ATOM 1922 CD2 LEU B 109 25.797 -0.421 53.642 1.00 9.65 C +ATOM 1923 N PRO B 110 21.658 1.219 55.136 1.00 9.50 N +ATOM 1924 CA PRO B 110 20.372 1.357 55.826 1.00 11.16 C +ATOM 1925 C PRO B 110 20.658 1.400 57.325 1.00 11.60 C +ATOM 1926 O PRO B 110 21.537 0.692 57.816 1.00 11.71 O +ATOM 1927 CB PRO B 110 19.628 0.090 55.417 1.00 9.96 C +ATOM 1928 CG PRO B 110 20.142 -0.164 54.034 1.00 14.79 C +ATOM 1929 CD PRO B 110 21.629 0.087 54.192 1.00 12.17 C +ATOM 1930 N THR B 111 19.915 2.230 58.045 1.00 10.64 N +ATOM 1931 CA THR B 111 20.094 2.385 59.485 1.00 11.86 C +ATOM 1932 C THR B 111 20.244 1.077 60.269 1.00 12.74 C +ATOM 1933 O THR B 111 21.185 0.923 61.051 1.00 15.22 O +ATOM 1934 CB THR B 111 18.921 3.195 60.078 1.00 14.73 C +ATOM 1935 OG1 THR B 111 18.902 4.497 59.480 1.00 19.58 O +ATOM 1936 CG2 THR B 111 19.062 3.336 61.581 1.00 15.13 C +ATOM 1937 N ALA B 112 19.323 0.142 60.053 1.00 12.23 N +ATOM 1938 CA ALA B 112 19.331 -1.141 60.754 1.00 11.14 C +ATOM 1939 C ALA B 112 20.574 -1.979 60.483 1.00 12.34 C +ATOM 1940 O ALA B 112 21.040 -2.715 61.355 1.00 13.84 O +ATOM 1941 CB ALA B 112 18.080 -1.932 60.391 1.00 12.37 C +ATOM 1942 N ILE B 113 21.111 -1.869 59.274 1.00 9.34 N +ATOM 1943 CA ILE B 113 22.304 -2.621 58.913 1.00 9.05 C +ATOM 1944 C ILE B 113 23.555 -1.956 59.482 1.00 7.74 C +ATOM 1945 O ILE B 113 24.417 -2.625 60.057 1.00 11.19 O +ATOM 1946 CB ILE B 113 22.432 -2.740 57.378 1.00 10.56 C +ATOM 1947 CG1 ILE B 113 21.304 -3.629 56.844 1.00 10.65 C +ATOM 1948 CG2 ILE B 113 23.796 -3.307 57.002 1.00 13.59 C +ATOM 1949 CD1 ILE B 113 21.297 -3.801 55.332 1.00 15.03 C +ATOM 1950 N LYS B 114 23.645 -0.639 59.327 1.00 10.63 N +ATOM 1951 CA LYS B 114 24.794 0.124 59.815 1.00 11.86 C +ATOM 1952 C LYS B 114 24.963 -0.081 61.318 1.00 11.42 C +ATOM 1953 O LYS B 114 26.074 -0.212 61.827 1.00 11.28 O +ATOM 1954 CB LYS B 114 24.588 1.614 59.527 1.00 14.01 C +ATOM 1955 CG LYS B 114 25.802 2.487 59.815 1.00 17.21 C +ATOM 1956 CD LYS B 114 25.454 3.972 59.759 1.00 21.95 C +ATOM 1957 CE LYS B 114 24.861 4.377 58.417 1.00 22.79 C +ATOM 1958 NZ LYS B 114 24.536 5.835 58.380 1.00 25.75 N +ATOM 1959 N ARG B 115 23.831 -0.098 62.012 1.00 11.17 N +ATOM 1960 CA ARG B 115 23.769 -0.271 63.455 1.00 12.50 C +ATOM 1961 C ARG B 115 24.406 -1.587 63.920 1.00 13.03 C +ATOM 1962 O ARG B 115 24.989 -1.654 65.005 1.00 12.52 O +ATOM 1963 CB ARG B 115 22.293 -0.205 63.865 1.00 17.05 C +ATOM 1964 CG ARG B 115 21.964 -0.530 65.299 1.00 24.23 C +ATOM 1965 CD ARG B 115 20.478 -0.855 65.396 1.00 17.93 C +ATOM 1966 NE ARG B 115 19.625 0.260 64.986 1.00 17.89 N +ATOM 1967 CZ ARG B 115 18.384 0.122 64.528 1.00 15.78 C +ATOM 1968 NH1 ARG B 115 17.848 -1.084 64.406 1.00 18.02 N +ATOM 1969 NH2 ARG B 115 17.665 1.191 64.219 1.00 16.37 N +ATOM 1970 N ASN B 116 24.299 -2.623 63.091 1.00 11.67 N +ATOM 1971 CA ASN B 116 24.841 -3.943 63.414 1.00 11.83 C +ATOM 1972 C ASN B 116 26.324 -4.121 63.093 1.00 10.94 C +ATOM 1973 O ASN B 116 26.787 -5.246 62.882 1.00 8.87 O +ATOM 1974 CB ASN B 116 24.043 -5.033 62.688 1.00 16.10 C +ATOM 1975 CG ASN B 116 22.639 -5.197 63.240 1.00 25.97 C +ATOM 1976 OD1 ASN B 116 22.443 -5.273 64.453 1.00 29.95 O +ATOM 1977 ND2 ASN B 116 21.656 -5.268 62.348 1.00 29.56 N +ATOM 1978 N LEU B 117 27.063 -3.018 63.057 1.00 11.88 N +ATOM 1979 CA LEU B 117 28.491 -3.063 62.772 1.00 12.36 C +ATOM 1980 C LEU B 117 29.195 -3.846 63.874 1.00 14.22 C +ATOM 1981 O LEU B 117 29.126 -3.479 65.049 1.00 15.46 O +ATOM 1982 CB LEU B 117 29.061 -1.640 62.696 1.00 14.10 C +ATOM 1983 CG LEU B 117 30.572 -1.486 62.471 1.00 14.06 C +ATOM 1984 CD1 LEU B 117 30.963 -2.022 61.099 1.00 11.30 C +ATOM 1985 CD2 LEU B 117 30.951 -0.014 62.586 1.00 15.66 C +ATOM 1986 N ILE B 118 29.860 -4.931 63.487 1.00 11.99 N +ATOM 1987 CA ILE B 118 30.584 -5.786 64.424 1.00 14.24 C +ATOM 1988 C ILE B 118 32.050 -5.387 64.479 1.00 14.47 C +ATOM 1989 O ILE B 118 32.655 -5.317 65.551 1.00 15.41 O +ATOM 1990 CB ILE B 118 30.537 -7.271 63.985 1.00 13.78 C +ATOM 1991 CG1 ILE B 118 29.107 -7.801 64.047 1.00 17.05 C +ATOM 1992 CG2 ILE B 118 31.464 -8.106 64.863 1.00 21.57 C +ATOM 1993 CD1 ILE B 118 28.975 -9.211 63.506 1.00 13.64 C +ATOM 1994 N LYS B 119 32.617 -5.133 63.307 1.00 12.50 N +ATOM 1995 CA LYS B 119 34.020 -4.779 63.206 1.00 13.01 C +ATOM 1996 C LYS B 119 34.268 -3.873 62.013 1.00 13.28 C +ATOM 1997 O LYS B 119 33.690 -4.068 60.943 1.00 10.47 O +ATOM 1998 CB LYS B 119 34.845 -6.058 63.061 1.00 15.90 C +ATOM 1999 CG LYS B 119 36.341 -5.859 62.985 1.00 20.79 C +ATOM 2000 CD LYS B 119 37.027 -7.195 62.754 1.00 22.35 C +ATOM 2001 CE LYS B 119 38.522 -7.087 62.940 1.00 23.28 C +ATOM 2002 NZ LYS B 119 38.848 -6.704 64.340 1.00 21.74 N +ATOM 2003 N ASP B 120 35.123 -2.875 62.207 1.00 11.74 N +ATOM 2004 CA ASP B 120 35.468 -1.949 61.143 1.00 13.09 C +ATOM 2005 C ASP B 120 36.980 -1.826 61.068 1.00 15.64 C +ATOM 2006 O ASP B 120 37.588 -1.076 61.830 1.00 18.59 O +ATOM 2007 CB ASP B 120 34.859 -0.566 61.395 1.00 14.18 C +ATOM 2008 CG ASP B 120 35.133 0.406 60.255 1.00 21.36 C +ATOM 2009 OD1 ASP B 120 36.318 0.667 59.958 1.00 18.80 O +ATOM 2010 OD2 ASP B 120 34.162 0.905 59.651 1.00 24.72 O +ATOM 2011 N PHE B 121 37.586 -2.590 60.165 1.00 10.68 N +ATOM 2012 CA PHE B 121 39.028 -2.547 59.977 1.00 8.67 C +ATOM 2013 C PHE B 121 39.187 -1.661 58.755 1.00 9.80 C +ATOM 2014 O PHE B 121 39.505 -2.131 57.658 1.00 10.45 O +ATOM 2015 CB PHE B 121 39.567 -3.948 59.690 1.00 11.06 C +ATOM 2016 CG PHE B 121 41.064 -4.048 59.755 1.00 8.57 C +ATOM 2017 CD1 PHE B 121 41.720 -4.053 60.981 1.00 7.88 C +ATOM 2018 CD2 PHE B 121 41.819 -4.133 58.589 1.00 11.03 C +ATOM 2019 CE1 PHE B 121 43.108 -4.144 61.049 1.00 9.29 C +ATOM 2020 CE2 PHE B 121 43.210 -4.224 58.644 1.00 12.45 C +ATOM 2021 CZ PHE B 121 43.857 -4.230 59.876 1.00 11.76 C +ATOM 2022 N CYS B 122 38.954 -0.368 58.952 1.00 9.68 N +ATOM 2023 CA CYS B 122 39.012 0.558 57.842 1.00 11.76 C +ATOM 2024 C CYS B 122 39.164 2.035 58.195 1.00 12.00 C +ATOM 2025 O CYS B 122 40.214 2.631 57.964 1.00 11.46 O +ATOM 2026 CB CYS B 122 37.749 0.362 56.999 1.00 10.50 C +ATOM 2027 SG CYS B 122 37.515 1.575 55.670 1.00 12.06 S +ATOM 2028 N ARG B 123 38.109 2.618 58.753 1.00 13.81 N +ATOM 2029 CA ARG B 123 38.098 4.038 59.077 1.00 13.54 C +ATOM 2030 C ARG B 123 39.199 4.550 60.003 1.00 15.49 C +ATOM 2031 O ARG B 123 39.665 5.677 59.835 1.00 15.89 O +ATOM 2032 CB ARG B 123 36.724 4.424 59.631 1.00 17.36 C +ATOM 2033 CG ARG B 123 35.592 4.061 58.678 1.00 27.63 C +ATOM 2034 CD ARG B 123 34.225 4.502 59.180 1.00 35.34 C +ATOM 2035 NE ARG B 123 34.042 5.948 59.100 1.00 40.69 N +ATOM 2036 CZ ARG B 123 32.965 6.534 58.583 1.00 43.50 C +ATOM 2037 NH1 ARG B 123 32.876 7.856 58.550 1.00 44.75 N +ATOM 2038 NH2 ARG B 123 31.979 5.797 58.087 1.00 40.61 N +ATOM 2039 N LYS B 124 39.622 3.735 60.964 1.00 12.28 N +ATOM 2040 CA LYS B 124 40.664 4.165 61.897 1.00 10.38 C +ATOM 2041 C LYS B 124 42.094 3.826 61.471 1.00 11.81 C +ATOM 2042 O LYS B 124 43.044 4.116 62.200 1.00 10.66 O +ATOM 2043 CB LYS B 124 40.400 3.591 63.293 1.00 12.36 C +ATOM 2044 CG LYS B 124 39.249 4.256 64.030 1.00 15.36 C +ATOM 2045 CD LYS B 124 39.132 3.712 65.448 1.00 24.54 C +ATOM 2046 CE LYS B 124 38.082 4.458 66.251 1.00 31.08 C +ATOM 2047 NZ LYS B 124 38.118 4.064 67.691 1.00 36.16 N +ATOM 2048 N LEU B 125 42.251 3.215 60.301 1.00 10.78 N +ATOM 2049 CA LEU B 125 43.581 2.873 59.807 1.00 9.35 C +ATOM 2050 C LEU B 125 44.342 4.140 59.430 1.00 13.02 C +ATOM 2051 O LEU B 125 43.768 5.079 58.880 1.00 16.48 O +ATOM 2052 CB LEU B 125 43.482 1.964 58.579 1.00 12.38 C +ATOM 2053 CG LEU B 125 43.052 0.517 58.828 1.00 9.98 C +ATOM 2054 CD1 LEU B 125 42.807 -0.166 57.488 1.00 15.34 C +ATOM 2055 CD2 LEU B 125 44.125 -0.216 59.624 1.00 10.78 C +ATOM 2056 N SER B 126 45.634 4.162 59.737 1.00 10.00 N +ATOM 2057 CA SER B 126 46.478 5.305 59.416 1.00 14.06 C +ATOM 2058 C SER B 126 47.202 5.060 58.094 1.00 16.28 C +ATOM 2059 O SER B 126 47.689 6.043 57.498 1.00 15.23 O +ATOM 2060 CB SER B 126 47.498 5.546 60.535 1.00 15.40 C +ATOM 2061 OG SER B 126 48.333 4.419 60.724 1.00 18.55 O +TER 2062 SER B 126 +HETATM 2063 S SO4 B 127 48.867 -16.604 52.271 1.00 25.56 S +HETATM 2064 O1 SO4 B 127 49.341 -16.224 50.947 1.00 28.92 O +HETATM 2065 O2 SO4 B 127 48.593 -18.036 52.303 1.00 28.08 O +HETATM 2066 O3 SO4 B 127 47.644 -15.882 52.588 1.00 25.89 O +HETATM 2067 O4 SO4 B 127 49.897 -16.287 53.254 1.00 29.35 O +HETATM 2068 O HOH A 127 28.458 6.021 35.670 1.00 18.16 O +HETATM 2069 O HOH A 128 15.890 4.410 18.138 1.00 20.16 O +HETATM 2070 O HOH A 129 27.529 3.101 15.774 1.00 15.18 O +HETATM 2071 O HOH A 130 32.450 11.412 36.797 1.00 19.18 O +HETATM 2072 O HOH A 131 8.531 7.793 20.199 1.00 17.77 O +HETATM 2073 O HOH A 132 14.364 5.265 15.973 1.00 14.05 O +HETATM 2074 O HOH A 133 21.168 -10.826 39.672 1.00 40.57 O +HETATM 2075 O HOH A 134 13.915 13.483 37.608 1.00 27.78 O +HETATM 2076 O HOH A 135 26.790 -7.651 16.405 1.00 24.21 O +HETATM 2077 O HOH A 136 6.144 2.232 31.847 1.00 13.55 O +HETATM 2078 O HOH A 137 23.212 5.252 37.469 1.00 16.16 O +HETATM 2079 O HOH A 138 32.876 14.054 31.321 1.00 14.52 O +HETATM 2080 O HOH A 139 18.750 15.727 36.860 1.00 13.89 O +HETATM 2081 O HOH A 140 20.509 13.974 37.699 1.00 18.12 O +HETATM 2082 O HOH A 141 12.567 16.103 40.950 1.00 47.04 O +HETATM 2083 O HOH A 142 9.021 -9.289 16.267 1.00 17.98 O +HETATM 2084 O HOH A 143 17.666 0.546 9.599 1.00 17.59 O +HETATM 2085 O HOH A 144 20.509 19.781 39.096 1.00 16.70 O +HETATM 2086 O HOH A 145 29.542 14.893 29.222 1.00 19.74 O +HETATM 2087 O HOH A 146 24.207 0.245 8.979 1.00 13.69 O +HETATM 2088 O HOH A 147 19.424 -0.651 7.809 1.00 27.68 O +HETATM 2089 O HOH A 148 9.795 2.207 30.687 1.00 15.45 O +HETATM 2090 O HOH A 149 18.090 5.197 13.129 1.00 16.39 O +HETATM 2091 O HOH A 150 10.390 8.107 40.116 1.00 22.43 O +HETATM 2092 O HOH A 151 9.065 -6.856 18.209 1.00 15.48 O +HETATM 2093 O HOH A 152 0.569 7.297 34.180 1.00 59.53 O +HETATM 2094 O HOH A 153 15.795 -12.274 29.582 1.00 22.45 O +HETATM 2095 O HOH A 154 0.364 8.593 28.085 1.00 32.19 O +HETATM 2096 O HOH A 155 14.526 -6.119 13.878 1.00 17.77 O +HETATM 2097 O HOH A 156 32.185 -6.589 38.208 1.00 18.38 O +HETATM 2098 O HOH A 157 7.829 8.695 37.464 1.00 26.42 O +HETATM 2099 O HOH A 158 34.392 10.333 26.308 1.00 36.60 O +HETATM 2100 O HOH A 159 23.565 -8.918 42.385 1.00 17.23 O +HETATM 2101 O HOH A 160 13.468 -2.601 41.021 1.00 31.02 O +HETATM 2102 O HOH A 161 15.974 -11.974 39.259 1.00 46.44 O +HETATM 2103 O HOH A 162 20.465 -3.746 15.557 1.00 19.08 O +HETATM 2104 O HOH A 163 10.423 -8.380 32.230 1.00 20.38 O +HETATM 2105 O HOH A 164 26.461 20.839 31.209 1.00 31.39 O +HETATM 2106 O HOH A 165 29.295 -9.281 16.094 1.00 23.95 O +HETATM 2107 O HOH A 166 26.125 5.967 38.272 1.00 11.91 O +HETATM 2108 O HOH A 167 29.108 7.237 33.084 1.00 20.47 O +HETATM 2109 O HOH A 168 34.636 11.173 33.949 1.00 30.19 O +HETATM 2110 O HOH A 169 6.420 -3.918 15.489 1.00 25.60 O +HETATM 2111 O HOH A 170 23.472 24.694 26.504 1.00 26.33 O +HETATM 2112 O HOH A 171 34.478 14.634 27.057 1.00 37.21 O +HETATM 2113 O HOH A 172 18.881 4.081 43.149 1.00 24.39 O +HETATM 2114 O HOH A 173 28.866 14.402 22.340 1.00 18.69 O +HETATM 2115 O HOH A 174 4.439 4.023 24.306 1.00 23.70 O +HETATM 2116 O HOH A 175 31.755 2.603 33.263 1.00 16.38 O +HETATM 2117 O HOH A 176 23.200 -4.358 36.680 1.00 31.65 O +HETATM 2118 O HOH A 177 21.150 21.348 36.961 1.00 26.97 O +HETATM 2119 O HOH A 178 11.925 20.572 30.823 1.00 22.88 O +HETATM 2120 O HOH A 179 16.017 -13.071 21.195 1.00 25.75 O +HETATM 2121 O HOH A 180 14.731 -0.038 41.120 1.00 26.44 O +HETATM 2122 O HOH A 181 11.300 -9.182 34.868 1.00 21.65 O +HETATM 2123 O HOH A 182 18.427 8.411 15.853 1.00 38.01 O +HETATM 2124 O HOH A 183 14.795 -4.039 42.949 1.00 21.73 O +HETATM 2125 O HOH A 184 21.308 0.911 6.430 1.00 32.59 O +HETATM 2126 O HOH A 185 4.527 0.507 15.147 1.00 25.41 O +HETATM 2127 O HOH A 186 29.661 0.827 20.631 1.00 25.66 O +HETATM 2128 O HOH A 187 21.751 11.717 19.933 1.00 32.92 O +HETATM 2129 O HOH A 188 21.736 -9.779 17.752 1.00 27.30 O +HETATM 2130 O HOH A 189 11.316 -12.582 27.378 1.00 29.15 O +HETATM 2131 O HOH A 190 9.669 5.484 18.610 1.00 26.69 O +HETATM 2132 O HOH A 191 19.318 3.820 18.119 1.00 38.74 O +HETATM 2133 O HOH A 192 18.070 -13.805 22.871 1.00 25.31 O +HETATM 2134 O HOH A 193 22.731 8.761 14.625 1.00 41.11 O +HETATM 2135 O HOH A 194 4.385 2.690 38.102 1.00 35.23 O +HETATM 2136 O HOH A 195 23.645 19.112 17.947 1.00 46.35 O +HETATM 2137 O HOH A 196 30.774 3.605 16.864 1.00 28.90 O +HETATM 2138 O HOH A 197 19.222 -10.903 33.649 1.00 28.13 O +HETATM 2139 O HOH A 198 17.347 9.215 41.145 1.00 22.51 O +HETATM 2140 O HOH A 199 21.370 8.664 17.154 1.00 38.09 O +HETATM 2141 O HOH A 200 18.365 -12.649 29.262 1.00 33.71 O +HETATM 2142 O HOH A 201 2.634 2.625 18.276 1.00 42.51 O +HETATM 2143 O HOH A 202 13.378 13.206 20.148 1.00 35.17 O +HETATM 2144 O HOH A 203 8.441 -6.718 31.351 1.00 38.20 O +HETATM 2145 O HOH A 204 21.225 -5.776 17.077 1.00 25.88 O +HETATM 2146 O HOH A 205 9.449 -9.504 24.578 1.00 41.50 O +HETATM 2147 O HOH A 206 33.653 8.582 34.021 1.00 37.11 O +HETATM 2148 O HOH A 207 32.071 -2.237 29.668 1.00 38.24 O +HETATM 2149 O HOH A 208 22.846 20.908 31.331 1.00 24.85 O +HETATM 2150 O HOH A 209 9.709 16.523 36.392 1.00 34.23 O +HETATM 2151 O HOH A 210 19.545 -8.901 47.793 1.00 19.93 O +HETATM 2152 O HOH A 211 3.834 1.410 34.546 1.00 29.83 O +HETATM 2153 O HOH A 212 9.928 10.065 19.432 1.00 23.37 O +HETATM 2154 O HOH A 213 17.316 2.456 17.331 1.00 23.33 O +HETATM 2155 O HOH A 214 18.932 -10.214 38.460 1.00 51.98 O +HETATM 2156 O HOH A 215 12.017 14.522 36.271 1.00 20.10 O +HETATM 2157 O HOH A 216 16.337 6.663 14.598 1.00 20.86 O +HETATM 2158 O HOH A 217 11.392 -9.367 14.836 1.00 24.37 O +HETATM 2159 O HOH A 218 24.178 -2.514 8.091 1.00 29.18 O +HETATM 2160 O HOH A 219 19.046 7.405 11.509 1.00 24.46 O +HETATM 2161 O HOH A 220 13.723 -7.995 15.643 1.00 19.27 O +HETATM 2162 O HOH A 221 16.915 -6.210 12.855 1.00 34.03 O +HETATM 2163 O HOH A 222 15.213 -12.334 36.436 1.00 43.21 O +HETATM 2164 O HOH A 223 16.447 -11.679 34.274 1.00 31.98 O +HETATM 2165 O HOH A 224 22.688 -2.690 14.501 1.00 17.55 O +HETATM 2166 O HOH A 225 9.995 -10.442 28.308 1.00 27.23 O +HETATM 2167 O HOH A 226 31.864 6.950 32.720 1.00 21.11 O +HETATM 2168 O HOH A 227 4.229 -2.360 15.587 1.00 23.38 O +HETATM 2169 O HOH A 228 4.505 0.687 30.549 1.00 23.25 O +HETATM 2170 O HOH A 229 6.174 9.648 39.470 1.00 41.45 O +HETATM 2171 O HOH A 230 4.610 12.718 39.742 1.00 35.21 O +HETATM 2172 O HOH A 231 15.402 10.740 42.875 1.00 36.92 O +HETATM 2173 O HOH A 232 16.260 14.730 38.071 1.00 25.76 O +HETATM 2174 O HOH A 233 15.127 16.485 39.592 1.00 30.08 O +HETATM 2175 O HOH A 234 28.618 7.242 38.403 1.00 15.53 O +HETATM 2176 O HOH A 235 28.047 16.891 29.963 1.00 23.89 O +HETATM 2177 O HOH A 236 27.988 19.477 29.092 1.00 28.80 O +HETATM 2178 O HOH A 237 26.753 23.936 32.222 1.00 31.67 O +HETATM 2179 O HOH A 238 28.048 21.800 33.174 1.00 21.45 O +HETATM 2180 O HOH A 239 33.571 13.322 35.119 1.00 15.52 O +HETATM 2181 O HOH A 240 32.541 8.637 36.660 1.00 36.94 O +HETATM 2182 O HOH A 241 34.452 16.574 29.303 1.00 48.18 O +HETATM 2183 O HOH A 242 18.024 5.361 19.430 1.00 47.32 O +HETATM 2184 O HOH A 243 14.592 11.263 14.709 1.00 42.99 O +HETATM 2185 O HOH A 244 14.557 12.387 17.278 1.00 40.04 O +HETATM 2186 O HOH A 245 5.402 11.533 19.367 1.00 37.99 O +HETATM 2187 O HOH A 246 1.547 10.483 34.966 1.00 50.86 O +HETATM 2188 O HOH A 247 8.347 19.301 29.971 1.00 34.22 O +HETATM 2189 O HOH A 248 4.474 5.156 21.778 1.00 35.03 O +HETATM 2190 O HOH A 249 4.468 -6.497 29.200 1.00 55.94 O +HETATM 2191 O HOH A 250 19.651 -5.640 13.417 1.00 36.65 O +HETATM 2192 O HOH A 251 21.605 -7.187 12.499 1.00 40.70 O +HETATM 2193 O HOH A 252 23.453 -4.868 12.762 1.00 29.49 O +HETATM 2194 O HOH A 253 23.477 2.365 7.143 1.00 32.07 O +HETATM 2195 O HOH A 254 9.360 -11.007 35.370 1.00 34.26 O +HETATM 2196 O HOH A 255 13.398 -14.109 27.878 1.00 35.77 O +HETATM 2197 O HOH A 256 21.048 -13.292 21.921 1.00 33.01 O +HETATM 2198 O HOH A 257 33.756 -0.353 28.616 1.00 50.01 O +HETATM 2199 O HOH A 258 23.567 -10.992 38.444 1.00 31.78 O +HETATM 2200 O HOH A 259 17.284 -11.906 42.550 1.00 54.66 O +HETATM 2201 O HOH A 260 30.748 19.823 29.133 1.00 25.39 O +HETATM 2202 O HOH A 261 25.043 -8.497 14.937 1.00 41.33 O +HETATM 2203 O HOH A 262 19.440 8.016 41.932 1.00 35.29 O +HETATM 2204 O HOH A 263 29.159 5.342 11.721 1.00 43.86 O +HETATM 2205 O HOH A 264 10.175 16.614 23.367 1.00 47.96 O +HETATM 2206 O HOH A 265 8.888 19.630 27.509 1.00 45.65 O +HETATM 2207 O HOH A 266 15.171 8.791 13.449 1.00 28.77 O +HETATM 2208 O HOH A 267 17.008 9.159 11.329 1.00 40.73 O +HETATM 2209 O HOH A 268 20.272 -10.986 36.161 1.00 41.24 O +HETATM 2210 O HOH A 269 21.708 -11.083 42.464 1.00 33.85 O +HETATM 2211 O HOH A 270 34.883 19.761 29.704 1.00 42.92 O +HETATM 2212 O HOH A 271 33.870 21.990 30.733 1.00 43.19 O +HETATM 2213 O HOH A 272 10.579 -15.293 33.494 1.00 39.64 O +HETATM 2214 O HOH A 273 9.508 -13.518 35.159 1.00 38.76 O +HETATM 2215 O HOH A 274 12.930 -11.463 37.352 1.00 43.18 O +HETATM 2216 O HOH A 275 16.007 -13.401 32.247 1.00 39.13 O +HETATM 2217 O HOH A 276 9.398 -14.257 28.668 1.00 33.79 O +HETATM 2218 O HOH A 277 1.835 11.932 23.571 1.00 30.16 O +HETATM 2219 O HOH A 278 9.119 -10.573 30.966 1.00 37.25 O +HETATM 2220 O HOH A 279 7.930 -9.110 27.143 1.00 42.11 O +HETATM 2221 O HOH A 280 26.814 17.987 16.451 1.00 51.41 O +HETATM 2222 O HOH A 281 9.758 9.876 16.768 1.00 40.33 O +HETATM 2223 O HOH A 282 7.752 12.854 19.320 1.00 35.83 O +HETATM 2224 O HOH A 283 6.752 15.361 19.555 1.00 39.15 O +HETATM 2225 O HOH A 284 12.304 -3.776 44.474 1.00 42.18 O +HETATM 2226 O HOH B 128 21.749 7.845 52.818 1.00 14.25 O +HETATM 2227 O HOH B 129 35.392 -13.107 35.614 1.00 25.17 O +HETATM 2228 O HOH B 130 35.727 8.326 46.410 1.00 12.99 O +HETATM 2229 O HOH B 131 23.311 -8.504 45.288 1.00 12.61 O +HETATM 2230 O HOH B 132 29.110 -18.789 46.047 1.00 23.45 O +HETATM 2231 O HOH B 133 47.502 1.457 58.755 1.00 14.50 O +HETATM 2232 O HOH B 134 27.493 10.307 51.644 1.00 12.27 O +HETATM 2233 O HOH B 135 24.522 10.723 51.950 1.00 10.99 O +HETATM 2234 O HOH B 136 39.003 6.377 48.604 1.00 14.10 O +HETATM 2235 O HOH B 137 27.459 -7.921 41.927 1.00 18.41 O +HETATM 2236 O HOH B 138 27.538 1.783 63.090 1.00 19.30 O +HETATM 2237 O HOH B 139 24.761 -7.627 47.446 1.00 12.74 O +HETATM 2238 O HOH B 140 39.216 4.896 46.269 1.00 19.66 O +HETATM 2239 O HOH B 141 29.205 10.791 53.689 1.00 15.87 O +HETATM 2240 O HOH B 142 19.940 2.678 45.179 1.00 13.59 O +HETATM 2241 O HOH B 143 29.698 -20.740 49.396 1.00 16.97 O +HETATM 2242 O HOH B 144 41.100 6.919 50.486 1.00 10.64 O +HETATM 2243 O HOH B 145 20.931 5.078 51.843 1.00 29.27 O +HETATM 2244 O HOH B 146 27.235 -1.233 35.422 1.00 19.56 O +HETATM 2245 O HOH B 147 46.212 1.487 50.336 1.00 23.03 O +HETATM 2246 O HOH B 148 22.198 -11.958 48.612 1.00 24.32 O +HETATM 2247 O HOH B 149 29.694 -10.191 41.013 1.00 18.37 O +HETATM 2248 O HOH B 150 33.598 -20.124 45.598 1.00 15.74 O +HETATM 2249 O HOH B 151 36.668 7.905 57.359 1.00 28.27 O +HETATM 2250 O HOH B 152 22.383 3.251 62.407 1.00 21.39 O +HETATM 2251 O HOH B 153 30.112 -16.483 44.979 1.00 20.97 O +HETATM 2252 O HOH B 154 34.356 -5.386 39.413 1.00 16.41 O +HETATM 2253 O HOH B 155 15.656 -4.125 46.248 1.00 18.93 O +HETATM 2254 O HOH B 156 16.874 -4.983 44.105 1.00 17.87 O +HETATM 2255 O HOH B 157 33.806 -0.151 43.682 1.00 16.12 O +HETATM 2256 O HOH B 158 15.326 3.157 46.586 1.00 41.28 O +HETATM 2257 O HOH B 159 32.716 9.399 55.235 1.00 21.01 O +HETATM 2258 O HOH B 160 34.643 9.442 53.256 1.00 16.07 O +HETATM 2259 O HOH B 161 29.968 -0.287 35.588 1.00 19.95 O +HETATM 2260 O HOH B 162 23.577 9.066 55.922 1.00 30.60 O +HETATM 2261 O HOH B 163 29.571 -4.628 36.083 1.00 31.15 O +HETATM 2262 O HOH B 164 28.896 -12.583 41.636 1.00 33.44 O +HETATM 2263 O HOH B 165 46.622 0.764 53.966 1.00 19.11 O +HETATM 2264 O HOH B 166 22.306 5.686 56.691 1.00 29.21 O +HETATM 2265 O HOH B 167 36.992 7.644 39.802 1.00 35.51 O +HETATM 2266 O HOH B 168 25.761 -3.624 36.491 1.00 38.29 O +HETATM 2267 O HOH B 169 18.592 1.549 49.716 1.00 27.31 O +HETATM 2268 O HOH B 170 42.868 7.188 46.987 1.00 35.86 O +HETATM 2269 O HOH B 171 27.292 -14.274 43.160 1.00 37.43 O +HETATM 2270 O HOH B 172 25.362 -15.750 45.104 1.00 30.52 O +HETATM 2271 O HOH B 173 43.076 9.501 56.562 1.00 43.34 O +HETATM 2272 O HOH B 174 32.204 2.950 60.662 1.00 32.82 O +HETATM 2273 O HOH B 175 33.831 1.926 37.009 1.00 29.41 O +HETATM 2274 O HOH B 176 47.425 8.687 58.230 1.00 35.83 O +HETATM 2275 O HOH B 177 43.492 7.252 53.386 1.00 29.73 O +HETATM 2276 O HOH B 178 32.958 -17.842 44.639 1.00 36.54 O +HETATM 2277 O HOH B 179 23.971 6.496 39.400 1.00 31.56 O +HETATM 2278 O HOH B 180 38.250 8.614 47.381 1.00 19.44 O +HETATM 2279 O HOH B 181 21.536 -10.246 46.303 1.00 20.07 O +HETATM 2280 O HOH B 182 30.890 -20.716 46.247 1.00 18.53 O +HETATM 2281 O HOH B 183 26.565 -19.302 45.680 1.00 34.84 O +HETATM 2282 O HOH B 184 46.915 -0.253 56.738 1.00 18.35 O +HETATM 2283 O HOH B 185 45.975 -2.818 56.285 1.00 19.90 O +HETATM 2284 O HOH B 186 25.009 3.263 63.422 1.00 16.72 O +HETATM 2285 O HOH B 187 25.048 -8.829 50.066 1.00 15.00 O +HETATM 2286 O HOH B 188 17.988 2.155 47.022 1.00 26.39 O +HETATM 2287 O HOH B 189 20.881 4.644 46.848 1.00 14.77 O +HETATM 2288 O HOH B 190 23.050 5.646 45.819 1.00 13.73 O +HETATM 2289 O HOH B 191 19.937 4.058 49.511 1.00 15.75 O +HETATM 2290 O HOH B 192 17.160 1.434 51.955 1.00 32.82 O +HETATM 2291 O HOH B 193 48.590 -1.720 48.336 1.00 27.63 O +HETATM 2292 O HOH B 194 47.845 -3.678 44.065 1.00 28.54 O +HETATM 2293 O HOH B 195 44.564 -2.291 42.836 1.00 25.85 O +HETATM 2294 O HOH B 196 40.878 -3.749 43.732 1.00 11.38 O +HETATM 2295 O HOH B 197 38.402 -3.964 46.400 1.00 14.57 O +HETATM 2296 O HOH B 198 18.847 -6.953 56.593 1.00 25.01 O +HETATM 2297 O HOH B 199 17.606 -2.703 54.515 1.00 27.07 O +HETATM 2298 O HOH B 200 35.941 -22.085 49.046 1.00 8.69 O +HETATM 2299 O HOH B 201 36.529 9.884 55.225 1.00 34.94 O +HETATM 2300 O HOH B 202 21.808 7.078 43.858 1.00 15.74 O +HETATM 2301 O HOH B 203 33.310 -10.259 36.870 1.00 28.74 O +HETATM 2302 O HOH B 204 24.861 -18.928 59.731 1.00 19.32 O +HETATM 2303 O HOH B 205 32.609 0.477 35.005 1.00 33.68 O +HETATM 2304 O HOH B 206 25.908 -5.820 34.938 1.00 32.89 O +HETATM 2305 O HOH B 207 25.406 -5.983 66.383 1.00 18.21 O +HETATM 2306 O HOH B 208 22.532 -12.430 65.714 1.00 21.91 O +HETATM 2307 O HOH B 209 36.385 0.150 42.555 1.00 21.29 O +HETATM 2308 O HOH B 210 40.011 -1.866 41.602 1.00 16.46 O +HETATM 2309 O HOH B 211 45.990 -10.409 46.937 1.00 15.14 O +HETATM 2310 O HOH B 212 47.299 -12.855 46.122 1.00 37.65 O +HETATM 2311 O HOH B 213 47.300 -10.021 50.070 1.00 11.57 O +HETATM 2312 O HOH B 214 49.415 -11.742 49.384 1.00 25.56 O +HETATM 2313 O HOH B 215 50.432 -8.592 48.180 1.00 34.76 O +HETATM 2314 O HOH B 216 45.950 -17.117 47.140 1.00 11.91 O +HETATM 2315 O HOH B 217 48.209 -16.855 48.400 1.00 20.67 O +HETATM 2316 O HOH B 218 49.622 -19.497 48.902 1.00 36.91 O +HETATM 2317 O HOH B 219 41.472 -19.513 42.460 1.00 22.18 O +HETATM 2318 O HOH B 220 41.314 -19.608 39.815 1.00 29.27 O +HETATM 2319 O HOH B 221 39.856 -17.844 38.429 1.00 27.86 O +HETATM 2320 O HOH B 222 42.340 -15.231 36.539 1.00 36.18 O +HETATM 2321 O HOH B 223 44.862 -13.117 36.832 1.00 31.70 O +HETATM 2322 O HOH B 224 40.127 -8.641 36.131 1.00 26.48 O +HETATM 2323 O HOH B 225 51.919 -10.132 49.666 1.00 40.48 O +HETATM 2324 O HOH B 226 45.494 -11.393 57.214 1.00 17.13 O +HETATM 2325 O HOH B 227 40.907 -17.643 56.706 1.00 12.60 O +HETATM 2326 O HOH B 228 43.628 -18.106 57.649 1.00 17.39 O +HETATM 2327 O HOH B 229 44.061 -22.668 57.601 1.00 21.34 O +HETATM 2328 O HOH B 230 40.771 -24.364 57.020 1.00 20.20 O +HETATM 2329 O HOH B 231 45.333 -24.598 53.420 1.00 28.40 O +HETATM 2330 O HOH B 232 46.233 -26.590 51.909 1.00 21.65 O +HETATM 2331 O HOH B 233 47.659 -24.550 50.161 1.00 20.60 O +HETATM 2332 O HOH B 234 49.724 -20.577 51.545 1.00 34.06 O +HETATM 2333 O HOH B 235 40.623 -10.464 63.091 1.00 15.64 O +HETATM 2334 O HOH B 236 33.734 -11.034 64.366 1.00 21.79 O +HETATM 2335 O HOH B 237 26.492 -22.373 55.525 1.00 23.99 O +HETATM 2336 O HOH B 238 25.286 -19.773 52.394 1.00 35.79 O +HETATM 2337 O HOH B 239 25.742 -17.045 51.744 1.00 29.50 O +HETATM 2338 O HOH B 240 20.699 -11.436 52.346 1.00 31.96 O +HETATM 2339 O HOH B 241 17.839 -12.847 51.084 1.00 53.96 O +HETATM 2340 O HOH B 242 17.325 -14.512 53.143 1.00 48.01 O +HETATM 2341 O HOH B 243 35.255 -19.515 41.312 1.00 31.47 O +HETATM 2342 O HOH B 244 33.856 -21.721 40.045 1.00 48.42 O +HETATM 2343 O HOH B 245 39.732 -21.420 43.520 1.00 21.00 O +HETATM 2344 O HOH B 246 46.284 -18.521 42.584 1.00 31.72 O +HETATM 2345 O HOH B 247 48.066 -14.706 42.752 1.00 40.32 O +HETATM 2346 O HOH B 248 26.797 -21.029 50.222 1.00 33.09 O +HETATM 2347 O HOH B 249 25.231 -19.819 48.034 1.00 34.56 O +HETATM 2348 O HOH B 250 26.390 -12.057 40.877 1.00 38.86 O +HETATM 2349 O HOH B 251 18.719 -5.241 58.774 1.00 33.80 O +HETATM 2350 O HOH B 252 28.694 -8.590 68.622 1.00 44.04 O +HETATM 2351 O HOH B 253 46.080 7.186 51.268 1.00 44.97 O +HETATM 2352 O HOH B 254 28.373 6.487 59.114 1.00 33.05 O +HETATM 2353 O HOH B 255 27.450 11.405 55.672 1.00 31.86 O +HETATM 2354 O HOH B 256 16.075 -0.438 53.582 1.00 38.00 O +HETATM 2355 O HOH B 257 19.558 -3.430 63.621 1.00 18.86 O +HETATM 2356 O HOH B 258 25.992 0.299 66.754 1.00 27.95 O +HETATM 2357 O HOH B 259 28.314 0.884 65.617 1.00 32.35 O +HETATM 2358 O HOH B 260 38.082 1.529 62.092 1.00 20.93 O +HETATM 2359 O HOH B 261 43.837 6.147 64.045 1.00 24.66 O +HETATM 2360 O HOH B 262 41.759 6.912 65.427 1.00 32.58 O +HETATM 2361 O HOH B 263 36.427 5.947 43.277 1.00 54.89 O +HETATM 2362 O HOH B 264 28.281 6.171 42.732 1.00 30.95 O +HETATM 2363 O HOH B 265 28.532 3.758 42.855 1.00 31.26 O +HETATM 2364 O HOH B 266 26.279 4.488 42.304 1.00 18.18 O +HETATM 2365 O HOH B 267 38.450 -25.374 53.625 1.00 11.50 O +HETATM 2366 O HOH B 268 33.268 -11.967 34.839 1.00 44.52 O +HETATM 2367 O HOH B 269 21.291 7.640 55.382 1.00 37.07 O +HETATM 2368 O HOH B 270 40.543 -6.191 35.086 1.00 46.78 O +HETATM 2369 O HOH B 271 36.278 8.494 43.716 1.00 39.94 O +HETATM 2370 O HOH B 272 38.077 0.885 44.425 1.00 37.70 O +HETATM 2371 O HOH B 273 36.624 2.995 44.072 1.00 44.84 O +HETATM 2372 O HOH B 274 47.680 -3.802 54.241 1.00 29.52 O +HETATM 2373 O HOH B 275 47.542 -25.183 47.426 1.00 44.28 O +HETATM 2374 O HOH B 276 47.958 -0.641 51.434 1.00 41.18 O +HETATM 2375 O HOH B 277 48.773 -1.142 45.731 1.00 47.19 O +HETATM 2376 O HOH B 278 52.432 -3.449 47.286 1.00 34.07 O +HETATM 2377 O HOH B 279 22.927 -20.727 46.764 1.00 43.74 O +HETATM 2378 O HOH B 280 19.895 -12.192 66.540 1.00 37.79 O +HETATM 2379 O HOH B 281 41.198 10.198 58.267 1.00 48.98 O +HETATM 2380 O HOH B 282 44.205 11.703 55.646 1.00 52.92 O +HETATM 2381 O HOH B 283 42.359 7.497 60.196 1.00 46.88 O +HETATM 2382 O HOH B 284 43.862 -18.935 38.363 1.00 32.12 O +HETATM 2383 O HOH B 285 44.692 -12.023 39.188 1.00 33.96 O +CONECT 769 996 +CONECT 821 830 +CONECT 830 821 831 +CONECT 831 830 832 834 +CONECT 832 831 833 838 +CONECT 833 832 +CONECT 834 831 835 +CONECT 835 834 836 +CONECT 836 835 837 +CONECT 837 836 +CONECT 838 832 +CONECT 996 769 +CONECT 1800 2027 +CONECT 1852 1861 +CONECT 1861 1852 1862 +CONECT 1862 1861 1863 1865 +CONECT 1863 1862 1864 1869 +CONECT 1864 1863 +CONECT 1865 1862 1866 +CONECT 1866 1865 1867 +CONECT 1867 1866 1868 +CONECT 1868 1867 +CONECT 1869 1863 +CONECT 2027 1800 +CONECT 2063 2064 2065 2066 2067 +CONECT 2064 2063 +CONECT 2065 2063 +CONECT 2066 2063 +CONECT 2067 2063 +MASTER 266 0 3 17 10 0 2 6 2381 2 29 20 +END diff --git a/alphafold/common/testdata/5nmu.pdb b/alphafold/common/testdata/5nmu.pdb new file mode 100644 index 0000000000000000000000000000000000000000..d7232194699469d4141516ddbb212dacb4263d55 --- /dev/null +++ b/alphafold/common/testdata/5nmu.pdb @@ -0,0 +1,9729 @@ +MODEL 1 +ATOM 1 N GLY B 1 -13.429 -31.688 20.141 1.00 38.44 N +ATOM 2 CA GLY B 1 -12.662 -31.377 18.945 1.00 38.44 C +ATOM 3 C GLY B 1 -11.200 -31.093 19.231 1.00 38.44 C +ATOM 4 O GLY B 1 -10.829 -30.806 20.371 1.00 38.44 O +ATOM 5 N PRO B 2 -10.243 -31.505 18.368 1.00 50.86 N +ATOM 6 CA PRO B 2 -8.816 -31.416 18.688 1.00 50.86 C +ATOM 7 C PRO B 2 -8.413 -30.038 19.208 1.00 50.86 C +ATOM 8 CB PRO B 2 -8.136 -31.715 17.350 1.00 50.86 C +ATOM 9 O PRO B 2 -8.956 -29.023 18.763 1.00 50.86 O +ATOM 10 CG PRO B 2 -9.241 -31.687 16.344 1.00 50.86 C +ATOM 11 CD PRO B 2 -10.542 -31.504 17.071 1.00 50.86 C +ATOM 12 N MET B 3 -7.921 -29.907 20.481 1.00 59.36 N +ATOM 13 CA MET B 3 -7.548 -28.696 21.206 1.00 59.36 C +ATOM 14 C MET B 3 -6.474 -27.919 20.451 1.00 59.36 C +ATOM 15 CB MET B 3 -7.053 -29.041 22.612 1.00 59.36 C +ATOM 16 O MET B 3 -5.371 -28.425 20.237 1.00 59.36 O +ATOM 17 CG MET B 3 -8.139 -28.989 23.674 1.00 59.36 C +ATOM 18 SD MET B 3 -7.476 -29.226 25.369 1.00 59.36 S +ATOM 19 CE MET B 3 -6.129 -30.392 25.025 1.00 59.36 C +ATOM 20 N VAL B 4 -6.728 -27.005 19.518 1.00 78.49 N +ATOM 21 CA VAL B 4 -5.824 -26.125 18.784 1.00 78.49 C +ATOM 22 C VAL B 4 -5.220 -25.095 19.735 1.00 78.49 C +ATOM 23 CB VAL B 4 -6.546 -25.415 17.617 1.00 78.49 C +ATOM 24 O VAL B 4 -5.874 -24.661 20.687 1.00 78.49 O +ATOM 25 CG1 VAL B 4 -5.550 -24.637 16.759 1.00 78.49 C +ATOM 26 CG2 VAL B 4 -7.311 -26.429 16.768 1.00 78.49 C +ATOM 27 N LEU B 5 -3.804 -25.032 19.704 1.00 91.32 N +ATOM 28 CA LEU B 5 -3.105 -24.026 20.496 1.00 91.32 C +ATOM 29 C LEU B 5 -3.709 -22.644 20.275 1.00 91.32 C +ATOM 30 CB LEU B 5 -1.615 -24.007 20.143 1.00 91.32 C +ATOM 31 O LEU B 5 -3.924 -22.230 19.134 1.00 91.32 O +ATOM 32 CG LEU B 5 -0.684 -23.359 21.169 1.00 91.32 C +ATOM 33 CD1 LEU B 5 -0.564 -24.240 22.408 1.00 91.32 C +ATOM 34 CD2 LEU B 5 0.688 -23.099 20.556 1.00 91.32 C +ATOM 35 N GLN B 6 -4.013 -22.010 21.428 1.00 95.12 N +ATOM 36 CA GLN B 6 -4.759 -20.760 21.344 1.00 95.12 C +ATOM 37 C GLN B 6 -3.872 -19.566 21.685 1.00 95.12 C +ATOM 38 CB GLN B 6 -5.973 -20.795 22.273 1.00 95.12 C +ATOM 39 O GLN B 6 -2.798 -19.730 22.267 1.00 95.12 O +ATOM 40 CG GLN B 6 -6.956 -21.914 21.958 1.00 95.12 C +ATOM 41 CD GLN B 6 -8.118 -21.967 22.933 1.00 95.12 C +ATOM 42 NE2 GLN B 6 -9.178 -22.673 22.555 1.00 95.12 N +ATOM 43 OE1 GLN B 6 -8.063 -21.377 24.017 1.00 95.12 O +ATOM 44 N ALA B 7 -4.341 -18.393 21.405 1.00 96.17 N +ATOM 45 CA ALA B 7 -3.606 -17.148 21.609 1.00 96.17 C +ATOM 46 C ALA B 7 -3.248 -16.956 23.080 1.00 96.17 C +ATOM 47 CB ALA B 7 -4.421 -15.960 21.104 1.00 96.17 C +ATOM 48 O ALA B 7 -2.114 -16.600 23.409 1.00 96.17 O +ATOM 49 N GLN B 8 -4.162 -17.234 23.970 1.00 96.39 N +ATOM 50 CA GLN B 8 -3.947 -16.995 25.393 1.00 96.39 C +ATOM 51 C GLN B 8 -2.836 -17.888 25.939 1.00 96.39 C +ATOM 52 CB GLN B 8 -5.239 -17.225 26.179 1.00 96.39 C +ATOM 53 O GLN B 8 -2.228 -17.575 26.965 1.00 96.39 O +ATOM 54 CG GLN B 8 -5.738 -18.663 26.133 1.00 96.39 C +ATOM 55 CD GLN B 8 -7.043 -18.855 26.883 1.00 96.39 C +ATOM 56 NE2 GLN B 8 -7.231 -20.041 27.452 1.00 96.39 N +ATOM 57 OE1 GLN B 8 -7.875 -17.945 26.951 1.00 96.39 O +ATOM 58 N GLU B 9 -2.552 -18.927 25.259 1.00 96.86 N +ATOM 59 CA GLU B 9 -1.562 -19.888 25.736 1.00 96.86 C +ATOM 60 C GLU B 9 -0.147 -19.447 25.375 1.00 96.86 C +ATOM 61 CB GLU B 9 -1.842 -21.279 25.162 1.00 96.86 C +ATOM 62 O GLU B 9 0.827 -19.928 25.958 1.00 96.86 O +ATOM 63 CG GLU B 9 -3.156 -21.885 25.632 1.00 96.86 C +ATOM 64 CD GLU B 9 -3.503 -23.187 24.927 1.00 96.86 C +ATOM 65 OE1 GLU B 9 -3.241 -24.272 25.494 1.00 96.86 O +ATOM 66 OE2 GLU B 9 -4.039 -23.121 23.798 1.00 96.86 O +ATOM 67 N ILE B 10 -0.047 -18.558 24.432 1.00 97.16 N +ATOM 68 CA ILE B 10 1.308 -18.207 24.019 1.00 97.16 C +ATOM 69 C ILE B 10 1.508 -16.698 24.132 1.00 97.16 C +ATOM 70 CB ILE B 10 1.599 -18.681 22.577 1.00 97.16 C +ATOM 71 O ILE B 10 2.586 -16.183 23.827 1.00 97.16 O +ATOM 72 CG1 ILE B 10 0.663 -17.980 21.586 1.00 97.16 C +ATOM 73 CG2 ILE B 10 1.469 -20.203 22.472 1.00 97.16 C +ATOM 74 CD1 ILE B 10 1.148 -18.018 20.143 1.00 97.16 C +ATOM 75 N MET B 11 0.534 -15.951 24.523 1.00 97.15 N +ATOM 76 CA MET B 11 0.624 -14.499 24.639 1.00 97.15 C +ATOM 77 C MET B 11 1.581 -14.100 25.758 1.00 97.15 C +ATOM 78 CB MET B 11 -0.758 -13.893 24.894 1.00 97.15 C +ATOM 79 O MET B 11 1.918 -14.920 26.614 1.00 97.15 O +ATOM 80 CG MET B 11 -1.330 -14.224 26.262 1.00 97.15 C +ATOM 81 SD MET B 11 -2.990 -13.489 26.527 1.00 97.15 S +ATOM 82 CE MET B 11 -3.326 -14.055 28.218 1.00 97.15 C +ATOM 83 N THR B 12 2.058 -12.889 25.676 1.00 94.07 N +ATOM 84 CA THR B 12 2.781 -12.288 26.791 1.00 94.07 C +ATOM 85 C THR B 12 1.812 -11.667 27.793 1.00 94.07 C +ATOM 86 CB THR B 12 3.773 -11.217 26.301 1.00 94.07 C +ATOM 87 O THR B 12 0.938 -10.884 27.415 1.00 94.07 O +ATOM 88 CG2 THR B 12 4.580 -10.643 27.461 1.00 94.07 C +ATOM 89 OG1 THR B 12 4.672 -11.805 25.353 1.00 94.07 O +ATOM 90 N GLN B 13 1.874 -12.022 29.014 1.00 91.53 N +ATOM 91 CA GLN B 13 0.911 -11.594 30.023 1.00 91.53 C +ATOM 92 C GLN B 13 1.345 -10.286 30.678 1.00 91.53 C +ATOM 93 CB GLN B 13 0.730 -12.679 31.086 1.00 91.53 C +ATOM 94 O GLN B 13 0.508 -9.517 31.154 1.00 91.53 O +ATOM 95 CG GLN B 13 0.074 -13.950 30.563 1.00 91.53 C +ATOM 96 CD GLN B 13 -0.024 -15.037 31.617 1.00 91.53 C +ATOM 97 NE2 GLN B 13 -0.180 -16.279 31.174 1.00 91.53 N +ATOM 98 OE1 GLN B 13 0.042 -14.762 32.819 1.00 91.53 O +ATOM 99 N ASN B 14 2.624 -10.106 30.853 1.00 83.95 N +ATOM 100 CA ASN B 14 3.098 -8.857 31.440 1.00 83.95 C +ATOM 101 C ASN B 14 2.902 -7.680 30.489 1.00 83.95 C +ATOM 102 CB ASN B 14 4.569 -8.977 31.841 1.00 83.95 C +ATOM 103 O ASN B 14 3.795 -7.357 29.703 1.00 83.95 O +ATOM 104 CG ASN B 14 4.970 -7.969 32.901 1.00 83.95 C +ATOM 105 ND2 ASN B 14 6.215 -8.050 33.355 1.00 83.95 N +ATOM 106 OD1 ASN B 14 4.167 -7.126 33.307 1.00 83.95 O +ATOM 107 N VAL B 15 1.720 -7.063 30.605 1.00 88.01 N +ATOM 108 CA VAL B 15 1.397 -5.945 29.724 1.00 88.01 C +ATOM 109 C VAL B 15 1.580 -4.627 30.473 1.00 88.01 C +ATOM 110 CB VAL B 15 -0.044 -6.052 29.177 1.00 88.01 C +ATOM 111 O VAL B 15 1.172 -4.501 31.630 1.00 88.01 O +ATOM 112 CG1 VAL B 15 -0.334 -4.918 28.195 1.00 88.01 C +ATOM 113 CG2 VAL B 15 -0.262 -7.409 28.511 1.00 88.01 C +ATOM 114 N VAL B 16 2.304 -3.718 29.912 1.00 95.07 N +ATOM 115 CA VAL B 16 2.489 -2.385 30.476 1.00 95.07 C +ATOM 116 C VAL B 16 1.652 -1.373 29.696 1.00 95.07 C +ATOM 117 CB VAL B 16 3.976 -1.966 30.468 1.00 95.07 C +ATOM 118 O VAL B 16 1.564 -1.446 28.468 1.00 95.07 O +ATOM 119 CG1 VAL B 16 4.142 -0.553 31.025 1.00 95.07 C +ATOM 120 CG2 VAL B 16 4.814 -2.961 31.268 1.00 95.07 C +ATOM 121 N THR B 17 1.030 -0.552 30.420 1.00 96.28 N +ATOM 122 CA THR B 17 0.158 0.441 29.801 1.00 96.28 C +ATOM 123 C THR B 17 0.768 1.836 29.905 1.00 96.28 C +ATOM 124 CB THR B 17 -1.239 0.439 30.449 1.00 96.28 C +ATOM 125 O THR B 17 1.687 2.060 30.695 1.00 96.28 O +ATOM 126 CG2 THR B 17 -1.846 -0.960 30.443 1.00 96.28 C +ATOM 127 OG1 THR B 17 -1.131 0.895 31.804 1.00 96.28 O +ATOM 128 N ILE B 18 0.278 2.763 29.035 1.00 97.93 N +ATOM 129 CA ILE B 18 0.697 4.160 29.022 1.00 97.93 C +ATOM 130 C ILE B 18 -0.486 5.051 28.652 1.00 97.93 C +ATOM 131 CB ILE B 18 1.868 4.389 28.040 1.00 97.93 C +ATOM 132 O ILE B 18 -1.436 4.597 28.010 1.00 97.93 O +ATOM 133 CG1 ILE B 18 2.508 5.761 28.282 1.00 97.93 C +ATOM 134 CG2 ILE B 18 1.392 4.255 26.590 1.00 97.93 C +ATOM 135 CD1 ILE B 18 3.868 5.936 27.620 1.00 97.93 C +ATOM 136 N ARG B 19 -0.399 6.234 29.112 1.00 96.93 N +ATOM 137 CA ARG B 19 -1.435 7.189 28.730 1.00 96.93 C +ATOM 138 C ARG B 19 -1.145 7.793 27.360 1.00 96.93 C +ATOM 139 CB ARG B 19 -1.555 8.299 29.777 1.00 96.93 C +ATOM 140 O ARG B 19 0.017 7.985 26.994 1.00 96.93 O +ATOM 141 CG ARG B 19 -2.096 7.826 31.117 1.00 96.93 C +ATOM 142 CD ARG B 19 -2.357 8.990 32.062 1.00 96.93 C +ATOM 143 NE ARG B 19 -3.032 8.554 33.281 1.00 96.93 N +ATOM 144 NH1 ARG B 19 -3.141 10.661 34.222 1.00 96.93 N +ATOM 145 NH2 ARG B 19 -4.000 8.855 35.342 1.00 96.93 N +ATOM 146 CZ ARG B 19 -3.390 9.358 34.279 1.00 96.93 C +ATOM 147 N GLY B 20 -2.200 8.158 26.706 1.00 97.51 N +ATOM 148 CA GLY B 20 -2.028 8.813 25.418 1.00 97.51 C +ATOM 149 C GLY B 20 -1.341 10.161 25.522 1.00 97.51 C +ATOM 150 O GLY B 20 -0.659 10.589 24.588 1.00 97.51 O +ATOM 151 N SER B 21 -1.487 10.844 26.590 1.00 97.13 N +ATOM 152 CA SER B 21 -0.939 12.182 26.789 1.00 97.13 C +ATOM 153 C SER B 21 0.543 12.125 27.141 1.00 97.13 C +ATOM 154 CB SER B 21 -1.705 12.916 27.890 1.00 97.13 C +ATOM 155 O SER B 21 1.223 13.153 27.154 1.00 97.13 O +ATOM 156 OG SER B 21 -1.651 12.194 29.108 1.00 97.13 O +ATOM 157 N ALA B 22 1.055 10.944 27.377 1.00 98.10 N +ATOM 158 CA ALA B 22 2.475 10.822 27.697 1.00 98.10 C +ATOM 159 C ALA B 22 3.342 11.234 26.511 1.00 98.10 C +ATOM 160 CB ALA B 22 2.803 9.393 28.122 1.00 98.10 C +ATOM 161 O ALA B 22 2.884 11.223 25.365 1.00 98.10 O +ATOM 162 N THR B 23 4.556 11.629 26.816 1.00 98.36 N +ATOM 163 CA THR B 23 5.488 11.926 25.733 1.00 98.36 C +ATOM 164 C THR B 23 6.032 10.639 25.119 1.00 98.36 C +ATOM 165 CB THR B 23 6.659 12.796 26.227 1.00 98.36 C +ATOM 166 O THR B 23 6.006 9.583 25.754 1.00 98.36 O +ATOM 167 CG2 THR B 23 6.153 14.060 26.915 1.00 98.36 C +ATOM 168 OG1 THR B 23 7.448 12.043 27.156 1.00 98.36 O +ATOM 169 N VAL B 24 6.508 10.766 23.973 1.00 98.81 N +ATOM 170 CA VAL B 24 7.162 9.638 23.319 1.00 98.81 C +ATOM 171 C VAL B 24 8.417 9.247 24.096 1.00 98.81 C +ATOM 172 CB VAL B 24 7.523 9.963 21.852 1.00 98.81 C +ATOM 173 O VAL B 24 8.748 8.063 24.198 1.00 98.81 O +ATOM 174 CG1 VAL B 24 8.371 8.847 21.244 1.00 98.81 C +ATOM 175 CG2 VAL B 24 6.256 10.185 21.028 1.00 98.81 C +ATOM 176 N ALA B 25 9.067 10.212 24.657 1.00 98.66 N +ATOM 177 CA ALA B 25 10.238 9.939 25.487 1.00 98.66 C +ATOM 178 C ALA B 25 9.877 9.035 26.663 1.00 98.66 C +ATOM 179 CB ALA B 25 10.849 11.244 25.990 1.00 98.66 C +ATOM 180 O ALA B 25 10.613 8.099 26.982 1.00 98.66 O +ATOM 181 N ASP B 26 8.751 9.305 27.295 1.00 98.48 N +ATOM 182 CA ASP B 26 8.273 8.462 28.386 1.00 98.48 C +ATOM 183 C ASP B 26 8.047 7.028 27.914 1.00 98.48 C +ATOM 184 CB ASP B 26 6.982 9.031 28.978 1.00 98.48 C +ATOM 185 O ASP B 26 8.405 6.076 28.610 1.00 98.48 O +ATOM 186 CG ASP B 26 7.193 10.345 29.709 1.00 98.48 C +ATOM 187 OD1 ASP B 26 8.292 10.565 30.263 1.00 98.48 O +ATOM 188 OD2 ASP B 26 6.251 11.166 29.734 1.00 98.48 O +ATOM 189 N ALA B 27 7.471 6.935 26.777 1.00 98.74 N +ATOM 190 CA ALA B 27 7.205 5.613 26.216 1.00 98.74 C +ATOM 191 C ALA B 27 8.503 4.849 25.972 1.00 98.74 C +ATOM 192 CB ALA B 27 6.412 5.736 24.918 1.00 98.74 C +ATOM 193 O ALA B 27 8.614 3.673 26.325 1.00 98.74 O +ATOM 194 N VAL B 28 9.481 5.515 25.378 1.00 98.75 N +ATOM 195 CA VAL B 28 10.772 4.888 25.110 1.00 98.75 C +ATOM 196 C VAL B 28 11.416 4.449 26.423 1.00 98.75 C +ATOM 197 CB VAL B 28 11.717 5.841 24.345 1.00 98.75 C +ATOM 198 O VAL B 28 11.917 3.327 26.531 1.00 98.75 O +ATOM 199 CG1 VAL B 28 13.111 5.230 24.216 1.00 98.75 C +ATOM 200 CG2 VAL B 28 11.144 6.168 22.967 1.00 98.75 C +ATOM 201 N LYS B 29 11.370 5.313 27.366 1.00 98.49 N +ATOM 202 CA LYS B 29 11.925 4.993 28.678 1.00 98.49 C +ATOM 203 C LYS B 29 11.269 3.746 29.263 1.00 98.49 C +ATOM 204 CB LYS B 29 11.755 6.173 29.635 1.00 98.49 C +ATOM 205 O LYS B 29 11.958 2.837 29.731 1.00 98.49 O +ATOM 206 CG LYS B 29 12.350 5.941 31.016 1.00 98.49 C +ATOM 207 CD LYS B 29 12.132 7.142 31.928 1.00 98.49 C +ATOM 208 CE LYS B 29 12.660 6.882 33.332 1.00 98.49 C +ATOM 209 NZ LYS B 29 12.405 8.038 34.243 1.00 98.49 N +ATOM 210 N LEU B 30 10.035 3.740 29.241 1.00 98.22 N +ATOM 211 CA LEU B 30 9.281 2.614 29.782 1.00 98.22 C +ATOM 212 C LEU B 30 9.601 1.331 29.023 1.00 98.22 C +ATOM 213 CB LEU B 30 7.778 2.896 29.720 1.00 98.22 C +ATOM 214 O LEU B 30 9.792 0.275 29.632 1.00 98.22 O +ATOM 215 CG LEU B 30 6.873 1.918 30.471 1.00 98.22 C +ATOM 216 CD1 LEU B 30 7.316 1.798 31.926 1.00 98.22 C +ATOM 217 CD2 LEU B 30 5.417 2.362 30.385 1.00 98.22 C +ATOM 218 N MET B 31 9.701 1.379 27.739 1.00 97.87 N +ATOM 219 CA MET B 31 10.031 0.215 26.922 1.00 97.87 C +ATOM 220 C MET B 31 11.433 -0.294 27.241 1.00 97.87 C +ATOM 221 CB MET B 31 9.923 0.554 25.434 1.00 97.87 C +ATOM 222 O MET B 31 11.653 -1.503 27.330 1.00 97.87 O +ATOM 223 CG MET B 31 8.493 0.705 24.942 1.00 97.87 C +ATOM 224 SD MET B 31 8.404 1.088 23.149 1.00 97.87 S +ATOM 225 CE MET B 31 6.617 1.344 22.966 1.00 97.87 C +ATOM 226 N LYS B 32 12.357 0.614 27.411 1.00 97.65 N +ATOM 227 CA LYS B 32 13.721 0.235 27.770 1.00 97.65 C +ATOM 228 C LYS B 32 13.763 -0.434 29.141 1.00 97.65 C +ATOM 229 CB LYS B 32 14.639 1.458 27.755 1.00 97.65 C +ATOM 230 O LYS B 32 14.346 -1.509 29.295 1.00 97.65 O +ATOM 231 CG LYS B 32 14.967 1.969 26.360 1.00 97.65 C +ATOM 232 CD LYS B 32 15.931 3.148 26.408 1.00 97.65 C +ATOM 233 CE LYS B 32 16.336 3.598 25.011 1.00 97.65 C +ATOM 234 NZ LYS B 32 17.323 4.718 25.054 1.00 97.65 N +ATOM 235 N GLU B 33 13.084 0.159 30.107 1.00 97.19 N +ATOM 236 CA GLU B 33 13.089 -0.341 31.478 1.00 97.19 C +ATOM 237 C GLU B 33 12.450 -1.724 31.564 1.00 97.19 C +ATOM 238 CB GLU B 33 12.363 0.632 32.410 1.00 97.19 C +ATOM 239 O GLU B 33 12.946 -2.601 32.274 1.00 97.19 O +ATOM 240 CG GLU B 33 13.142 1.908 32.696 1.00 97.19 C +ATOM 241 CD GLU B 33 12.365 2.911 33.532 1.00 97.19 C +ATOM 242 OE1 GLU B 33 12.940 3.954 33.918 1.00 97.19 O +ATOM 243 OE2 GLU B 33 11.172 2.652 33.805 1.00 97.19 O +ATOM 244 N LYS B 34 11.415 -1.876 30.809 1.00 96.31 N +ATOM 245 CA LYS B 34 10.650 -3.115 30.917 1.00 96.31 C +ATOM 246 C LYS B 34 11.026 -4.092 29.807 1.00 96.31 C +ATOM 247 CB LYS B 34 9.149 -2.824 30.872 1.00 96.31 C +ATOM 248 O LYS B 34 10.509 -5.210 29.754 1.00 96.31 O +ATOM 249 CG LYS B 34 8.658 -1.931 32.001 1.00 96.31 C +ATOM 250 CD LYS B 34 8.803 -2.612 33.356 1.00 96.31 C +ATOM 251 CE LYS B 34 8.212 -1.765 34.475 1.00 96.31 C +ATOM 252 NZ LYS B 34 8.342 -2.434 35.804 1.00 96.31 N +ATOM 253 N LYS B 35 11.950 -3.656 28.866 1.00 94.24 N +ATOM 254 CA LYS B 35 12.416 -4.464 27.743 1.00 94.24 C +ATOM 255 C LYS B 35 11.247 -4.936 26.883 1.00 94.24 C +ATOM 256 CB LYS B 35 13.217 -5.667 28.243 1.00 94.24 C +ATOM 257 O LYS B 35 11.123 -6.128 26.593 1.00 94.24 O +ATOM 258 CG LYS B 35 14.475 -5.296 29.014 1.00 94.24 C +ATOM 259 CD LYS B 35 15.260 -6.532 29.433 1.00 94.24 C +ATOM 260 CE LYS B 35 16.510 -6.162 30.219 1.00 94.24 C +ATOM 261 NZ LYS B 35 17.285 -7.371 30.629 1.00 94.24 N +ATOM 262 N LEU B 36 10.446 -4.002 26.533 1.00 94.80 N +ATOM 263 CA LEU B 36 9.262 -4.281 25.729 1.00 94.80 C +ATOM 264 C LEU B 36 9.342 -3.573 24.381 1.00 94.80 C +ATOM 265 CB LEU B 36 7.995 -3.847 26.472 1.00 94.80 C +ATOM 266 O LEU B 36 10.055 -2.577 24.239 1.00 94.80 O +ATOM 267 CG LEU B 36 7.692 -4.580 27.779 1.00 94.80 C +ATOM 268 CD1 LEU B 36 6.566 -3.878 28.532 1.00 94.80 C +ATOM 269 CD2 LEU B 36 7.331 -6.036 27.505 1.00 94.80 C +ATOM 270 N ARG B 37 8.646 -4.096 23.418 1.00 95.22 N +ATOM 271 CA ARG B 37 8.673 -3.537 22.070 1.00 95.22 C +ATOM 272 C ARG B 37 7.332 -2.904 21.713 1.00 95.22 C +ATOM 273 CB ARG B 37 9.032 -4.617 21.047 1.00 95.22 C +ATOM 274 O ARG B 37 7.143 -2.430 20.591 1.00 95.22 O +ATOM 275 CG ARG B 37 10.445 -5.159 21.194 1.00 95.22 C +ATOM 276 CD ARG B 37 10.709 -6.312 20.235 1.00 95.22 C +ATOM 277 NE ARG B 37 12.016 -6.919 20.469 1.00 95.22 N +ATOM 278 NH1 ARG B 37 11.348 -9.063 19.924 1.00 95.22 N +ATOM 279 NH2 ARG B 37 13.514 -8.658 20.557 1.00 95.22 N +ATOM 280 CZ ARG B 37 12.290 -8.212 20.316 1.00 95.22 C +ATOM 281 N GLY B 38 6.364 -2.908 22.580 1.00 96.40 N +ATOM 282 CA GLY B 38 5.055 -2.285 22.466 1.00 96.40 C +ATOM 283 C GLY B 38 4.397 -2.030 23.809 1.00 96.40 C +ATOM 284 O GLY B 38 4.602 -2.787 24.760 1.00 96.40 O +ATOM 285 N LEU B 39 3.586 -0.972 23.799 1.00 98.10 N +ATOM 286 CA LEU B 39 2.814 -0.601 24.980 1.00 98.10 C +ATOM 287 C LEU B 39 1.335 -0.459 24.641 1.00 98.10 C +ATOM 288 CB LEU B 39 3.342 0.707 25.576 1.00 98.10 C +ATOM 289 O LEU B 39 0.985 -0.012 23.546 1.00 98.10 O +ATOM 290 CG LEU B 39 4.839 0.756 25.884 1.00 98.10 C +ATOM 291 CD1 LEU B 39 5.261 2.179 26.237 1.00 98.10 C +ATOM 292 CD2 LEU B 39 5.184 -0.205 27.017 1.00 98.10 C +ATOM 293 N ILE B 40 0.520 -0.811 25.600 1.00 97.89 N +ATOM 294 CA ILE B 40 -0.917 -0.625 25.428 1.00 97.89 C +ATOM 295 C ILE B 40 -1.321 0.762 25.924 1.00 97.89 C +ATOM 296 CB ILE B 40 -1.720 -1.715 26.171 1.00 97.89 C +ATOM 297 O ILE B 40 -0.861 1.210 26.976 1.00 97.89 O +ATOM 298 CG1 ILE B 40 -1.403 -3.100 25.594 1.00 97.89 C +ATOM 299 CG2 ILE B 40 -3.222 -1.423 26.099 1.00 97.89 C +ATOM 300 CD1 ILE B 40 -1.729 -3.242 24.113 1.00 97.89 C +ATOM 301 N VAL B 41 -2.035 1.483 25.146 1.00 97.86 N +ATOM 302 CA VAL B 41 -2.584 2.771 25.556 1.00 97.86 C +ATOM 303 C VAL B 41 -3.930 2.563 26.246 1.00 97.86 C +ATOM 304 CB VAL B 41 -2.743 3.729 24.354 1.00 97.86 C +ATOM 305 O VAL B 41 -4.864 2.022 25.648 1.00 97.86 O +ATOM 306 CG1 VAL B 41 -3.292 5.080 24.809 1.00 97.86 C +ATOM 307 CG2 VAL B 41 -1.407 3.906 23.634 1.00 97.86 C +ATOM 308 N GLU B 42 -4.102 3.043 27.341 1.00 93.50 N +ATOM 309 CA GLU B 42 -5.257 2.786 28.197 1.00 93.50 C +ATOM 310 C GLU B 42 -6.486 3.548 27.709 1.00 93.50 C +ATOM 311 CB GLU B 42 -4.946 3.163 29.648 1.00 93.50 C +ATOM 312 O GLU B 42 -6.372 4.678 27.229 1.00 93.50 O +ATOM 313 CG GLU B 42 -3.861 2.309 30.286 1.00 93.50 C +ATOM 314 CD GLU B 42 -3.502 2.750 31.696 1.00 93.50 C +ATOM 315 OE1 GLU B 42 -2.712 2.049 32.369 1.00 93.50 O +ATOM 316 OE2 GLU B 42 -4.015 3.805 32.132 1.00 93.50 O +ATOM 317 N PRO B 43 -7.640 2.899 27.934 1.00 92.04 N +ATOM 318 CA PRO B 43 -8.868 3.662 27.702 1.00 92.04 C +ATOM 319 C PRO B 43 -9.100 4.744 28.755 1.00 92.04 C +ATOM 320 CB PRO B 43 -9.964 2.595 27.765 1.00 92.04 C +ATOM 321 O PRO B 43 -8.675 4.593 29.903 1.00 92.04 O +ATOM 322 CG PRO B 43 -9.233 1.293 27.710 1.00 92.04 C +ATOM 323 CD PRO B 43 -7.824 1.517 28.181 1.00 92.04 C +ATOM 324 N ARG B 44 -9.694 5.794 28.390 1.00 86.25 N +ATOM 325 CA ARG B 44 -9.976 6.882 29.321 1.00 86.25 C +ATOM 326 C ARG B 44 -11.243 6.603 30.122 1.00 86.25 C +ATOM 327 CB ARG B 44 -10.111 8.210 28.572 1.00 86.25 C +ATOM 328 O ARG B 44 -11.372 7.048 31.264 1.00 86.25 O +ATOM 329 CG ARG B 44 -8.838 8.651 27.866 1.00 86.25 C +ATOM 330 CD ARG B 44 -7.868 9.328 28.824 1.00 86.25 C +ATOM 331 NE ARG B 44 -8.356 10.636 29.250 1.00 86.25 N +ATOM 332 NH1 ARG B 44 -6.289 11.418 29.924 1.00 86.25 N +ATOM 333 NH2 ARG B 44 -8.143 12.752 30.117 1.00 86.25 N +ATOM 334 CZ ARG B 44 -7.595 11.599 29.762 1.00 86.25 C +ATOM 335 N HIS B 45 -12.203 5.951 29.493 1.00 82.21 N +ATOM 336 CA HIS B 45 -13.462 5.554 30.114 1.00 82.21 C +ATOM 337 C HIS B 45 -13.980 4.247 29.523 1.00 82.21 C +ATOM 338 CB HIS B 45 -14.511 6.655 29.950 1.00 82.21 C +ATOM 339 O HIS B 45 -13.359 3.679 28.621 1.00 82.21 O +ATOM 340 CG HIS B 45 -14.688 7.110 28.536 1.00 82.21 C +ATOM 341 CD2 HIS B 45 -14.244 8.217 27.896 1.00 82.21 C +ATOM 342 ND1 HIS B 45 -15.404 6.387 27.606 1.00 82.21 N +ATOM 343 CE1 HIS B 45 -15.390 7.031 26.451 1.00 82.21 C +ATOM 344 NE2 HIS B 45 -14.693 8.145 26.600 1.00 82.21 N +ATOM 345 N GLU B 46 -14.986 3.764 29.964 1.00 75.72 N +ATOM 346 CA GLU B 46 -15.494 2.435 29.637 1.00 75.72 C +ATOM 347 C GLU B 46 -15.814 2.316 28.150 1.00 75.72 C +ATOM 348 CB GLU B 46 -16.738 2.115 30.470 1.00 75.72 C +ATOM 349 O GLU B 46 -15.682 1.239 27.565 1.00 75.72 O +ATOM 350 CG GLU B 46 -16.431 1.714 31.905 1.00 75.72 C +ATOM 351 CD GLU B 46 -17.665 1.299 32.690 1.00 75.72 C +ATOM 352 OE1 GLU B 46 -17.526 0.865 33.856 1.00 75.72 O +ATOM 353 OE2 GLU B 46 -18.781 1.407 32.133 1.00 75.72 O +ATOM 354 N GLN B 47 -16.196 3.344 27.536 1.00 76.14 N +ATOM 355 CA GLN B 47 -16.576 3.303 26.127 1.00 76.14 C +ATOM 356 C GLN B 47 -15.377 3.581 25.226 1.00 76.14 C +ATOM 357 CB GLN B 47 -17.691 4.310 25.843 1.00 76.14 C +ATOM 358 O GLN B 47 -15.483 3.503 24.000 1.00 76.14 O +ATOM 359 CG GLN B 47 -19.001 3.994 26.552 1.00 76.14 C +ATOM 360 CD GLN B 47 -19.932 5.189 26.627 1.00 76.14 C +ATOM 361 NE2 GLN B 47 -21.105 4.991 27.218 1.00 76.14 N +ATOM 362 OE1 GLN B 47 -19.599 6.283 26.158 1.00 76.14 O +ATOM 363 N ASP B 48 -14.282 3.943 25.810 1.00 87.25 N +ATOM 364 CA ASP B 48 -13.053 4.224 25.072 1.00 87.25 C +ATOM 365 C ASP B 48 -12.275 2.941 24.794 1.00 87.25 C +ATOM 366 CB ASP B 48 -12.178 5.214 25.844 1.00 87.25 C +ATOM 367 O ASP B 48 -12.162 2.075 25.665 1.00 87.25 O +ATOM 368 CG ASP B 48 -11.024 5.754 25.019 1.00 87.25 C +ATOM 369 OD1 ASP B 48 -11.194 5.968 23.799 1.00 87.25 O +ATOM 370 OD2 ASP B 48 -9.933 5.965 25.592 1.00 87.25 O +ATOM 371 N PRO B 49 -11.756 2.734 23.614 1.00 92.67 N +ATOM 372 CA PRO B 49 -11.035 1.508 23.263 1.00 92.67 C +ATOM 373 C PRO B 49 -9.565 1.549 23.674 1.00 92.67 C +ATOM 374 CB PRO B 49 -11.175 1.439 21.740 1.00 92.67 C +ATOM 375 O PRO B 49 -9.033 2.623 23.968 1.00 92.67 O +ATOM 376 CG PRO B 49 -11.189 2.866 21.294 1.00 92.67 C +ATOM 377 CD PRO B 49 -11.940 3.676 22.310 1.00 92.67 C +ATOM 378 N TYR B 50 -8.980 0.390 23.661 1.00 94.30 N +ATOM 379 CA TYR B 50 -7.536 0.294 23.844 1.00 94.30 C +ATOM 380 C TYR B 50 -6.796 0.759 22.595 1.00 94.30 C +ATOM 381 CB TYR B 50 -7.132 -1.143 24.185 1.00 94.30 C +ATOM 382 O TYR B 50 -7.332 0.690 21.486 1.00 94.30 O +ATOM 383 CG TYR B 50 -7.571 -1.588 25.558 1.00 94.30 C +ATOM 384 CD1 TYR B 50 -6.822 -1.268 26.688 1.00 94.30 C +ATOM 385 CD2 TYR B 50 -8.736 -2.329 25.729 1.00 94.30 C +ATOM 386 CE1 TYR B 50 -7.222 -1.678 27.956 1.00 94.30 C +ATOM 387 CE2 TYR B 50 -9.145 -2.744 26.992 1.00 94.30 C +ATOM 388 OH TYR B 50 -8.784 -2.821 29.350 1.00 94.30 O +ATOM 389 CZ TYR B 50 -8.384 -2.413 28.098 1.00 94.30 C +ATOM 390 N GLY B 51 -5.649 1.322 22.842 1.00 96.72 N +ATOM 391 CA GLY B 51 -4.696 1.608 21.781 1.00 96.72 C +ATOM 392 C GLY B 51 -3.364 0.908 21.970 1.00 96.72 C +ATOM 393 O GLY B 51 -3.170 0.186 22.951 1.00 96.72 O +ATOM 394 N ILE B 52 -2.498 1.084 20.995 1.00 98.36 N +ATOM 395 CA ILE B 52 -1.171 0.485 21.079 1.00 98.36 C +ATOM 396 C ILE B 52 -0.144 1.414 20.436 1.00 98.36 C +ATOM 397 CB ILE B 52 -1.134 -0.904 20.403 1.00 98.36 C +ATOM 398 O ILE B 52 -0.443 2.093 19.451 1.00 98.36 O +ATOM 399 CG1 ILE B 52 0.208 -1.594 20.672 1.00 98.36 C +ATOM 400 CG2 ILE B 52 -1.394 -0.780 18.899 1.00 98.36 C +ATOM 401 CD1 ILE B 52 0.224 -3.076 20.323 1.00 98.36 C +ATOM 402 N VAL B 53 1.018 1.517 21.038 1.00 98.58 N +ATOM 403 CA VAL B 53 2.182 2.182 20.461 1.00 98.58 C +ATOM 404 C VAL B 53 3.372 1.226 20.453 1.00 98.58 C +ATOM 405 CB VAL B 53 2.539 3.471 21.234 1.00 98.58 C +ATOM 406 O VAL B 53 3.640 0.549 21.449 1.00 98.58 O +ATOM 407 CG1 VAL B 53 2.913 3.149 22.680 1.00 98.58 C +ATOM 408 CG2 VAL B 53 3.679 4.212 20.537 1.00 98.58 C +ATOM 409 N THR B 54 4.068 1.131 19.318 1.00 98.20 N +ATOM 410 CA THR B 54 5.138 0.152 19.160 1.00 98.20 C +ATOM 411 C THR B 54 6.460 0.843 18.834 1.00 98.20 C +ATOM 412 CB THR B 54 4.804 -0.868 18.056 1.00 98.20 C +ATOM 413 O THR B 54 6.484 2.041 18.543 1.00 98.20 O +ATOM 414 CG2 THR B 54 3.410 -1.454 18.253 1.00 98.20 C +ATOM 415 OG1 THR B 54 4.861 -0.218 16.780 1.00 98.20 O +ATOM 416 N GLU B 55 7.522 0.076 18.873 1.00 98.01 N +ATOM 417 CA GLU B 55 8.839 0.577 18.492 1.00 98.01 C +ATOM 418 C GLU B 55 8.860 1.020 17.032 1.00 98.01 C +ATOM 419 CB GLU B 55 9.911 -0.489 18.734 1.00 98.01 C +ATOM 420 O GLU B 55 9.551 1.978 16.678 1.00 98.01 O +ATOM 421 CG GLU B 55 9.692 -1.771 17.945 1.00 98.01 C +ATOM 422 CD GLU B 55 10.726 -2.845 18.246 1.00 98.01 C +ATOM 423 OE1 GLU B 55 10.735 -3.889 17.556 1.00 98.01 O +ATOM 424 OE2 GLU B 55 11.534 -2.640 19.179 1.00 98.01 O +ATOM 425 N THR B 56 8.086 0.327 16.278 1.00 98.02 N +ATOM 426 CA THR B 56 8.022 0.692 14.868 1.00 98.02 C +ATOM 427 C THR B 56 7.363 2.058 14.692 1.00 98.02 C +ATOM 428 CB THR B 56 7.252 -0.361 14.051 1.00 98.02 C +ATOM 429 O THR B 56 7.821 2.875 13.890 1.00 98.02 O +ATOM 430 CG2 THR B 56 7.253 -0.016 12.566 1.00 98.02 C +ATOM 431 OG1 THR B 56 7.868 -1.642 14.233 1.00 98.02 O +ATOM 432 N ASP B 57 6.317 2.370 15.409 1.00 98.44 N +ATOM 433 CA ASP B 57 5.691 3.688 15.367 1.00 98.44 C +ATOM 434 C ASP B 57 6.698 4.786 15.703 1.00 98.44 C +ATOM 435 CB ASP B 57 4.505 3.750 16.331 1.00 98.44 C +ATOM 436 O ASP B 57 6.797 5.785 14.988 1.00 98.44 O +ATOM 437 CG ASP B 57 3.352 2.856 15.911 1.00 98.44 C +ATOM 438 OD1 ASP B 57 3.062 2.764 14.698 1.00 98.44 O +ATOM 439 OD2 ASP B 57 2.726 2.239 16.800 1.00 98.44 O +ATOM 440 N ILE B 58 7.442 4.562 16.719 1.00 98.77 N +ATOM 441 CA ILE B 58 8.380 5.559 17.223 1.00 98.77 C +ATOM 442 C ILE B 58 9.492 5.785 16.201 1.00 98.77 C +ATOM 443 CB ILE B 58 8.979 5.136 18.583 1.00 98.77 C +ATOM 444 O ILE B 58 9.807 6.927 15.858 1.00 98.77 O +ATOM 445 CG1 ILE B 58 7.898 5.149 19.670 1.00 98.77 C +ATOM 446 CG2 ILE B 58 10.149 6.047 18.964 1.00 98.77 C +ATOM 447 CD1 ILE B 58 8.345 4.548 20.995 1.00 98.77 C +ATOM 448 N VAL B 59 10.002 4.728 15.691 1.00 98.59 N +ATOM 449 CA VAL B 59 11.124 4.850 14.766 1.00 98.59 C +ATOM 450 C VAL B 59 10.642 5.447 13.446 1.00 98.59 C +ATOM 451 CB VAL B 59 11.806 3.487 14.517 1.00 98.59 C +ATOM 452 O VAL B 59 11.260 6.373 12.913 1.00 98.59 O +ATOM 453 CG1 VAL B 59 12.809 3.586 13.369 1.00 98.59 C +ATOM 454 CG2 VAL B 59 12.493 2.994 15.790 1.00 98.59 C +ATOM 455 N TYR B 60 9.506 5.023 12.984 1.00 98.23 N +ATOM 456 CA TYR B 60 8.996 5.445 11.684 1.00 98.23 C +ATOM 457 C TYR B 60 8.505 6.887 11.733 1.00 98.23 C +ATOM 458 CB TYR B 60 7.862 4.523 11.226 1.00 98.23 C +ATOM 459 O TYR B 60 8.631 7.626 10.754 1.00 98.23 O +ATOM 460 CG TYR B 60 8.342 3.259 10.553 1.00 98.23 C +ATOM 461 CD1 TYR B 60 9.657 2.824 10.702 1.00 98.23 C +ATOM 462 CD2 TYR B 60 7.482 2.500 9.767 1.00 98.23 C +ATOM 463 CE1 TYR B 60 10.103 1.661 10.082 1.00 98.23 C +ATOM 464 CE2 TYR B 60 7.918 1.336 9.143 1.00 98.23 C +ATOM 465 OH TYR B 60 9.665 -0.227 8.690 1.00 98.23 O +ATOM 466 CZ TYR B 60 9.228 0.925 9.306 1.00 98.23 C +ATOM 467 N LYS B 61 7.915 7.281 12.825 1.00 98.15 N +ATOM 468 CA LYS B 61 7.173 8.538 12.838 1.00 98.15 C +ATOM 469 C LYS B 61 7.928 9.614 13.614 1.00 98.15 C +ATOM 470 CB LYS B 61 5.783 8.335 13.443 1.00 98.15 C +ATOM 471 O LYS B 61 7.636 10.804 13.480 1.00 98.15 O +ATOM 472 CG LYS B 61 4.896 7.385 12.652 1.00 98.15 C +ATOM 473 CD LYS B 61 3.544 7.190 13.326 1.00 98.15 C +ATOM 474 CE LYS B 61 2.701 6.151 12.599 1.00 98.15 C +ATOM 475 NZ LYS B 61 1.386 5.935 13.273 1.00 98.15 N +ATOM 476 N VAL B 62 8.876 9.236 14.420 1.00 98.39 N +ATOM 477 CA VAL B 62 9.558 10.220 15.255 1.00 98.39 C +ATOM 478 C VAL B 62 11.039 10.272 14.886 1.00 98.39 C +ATOM 479 CB VAL B 62 9.394 9.900 16.758 1.00 98.39 C +ATOM 480 O VAL B 62 11.500 11.244 14.283 1.00 98.39 O +ATOM 481 CG1 VAL B 62 9.999 11.011 17.615 1.00 98.39 C +ATOM 482 CG2 VAL B 62 7.919 9.699 17.102 1.00 98.39 C +ATOM 483 N ALA B 63 11.770 9.207 15.081 1.00 97.85 N +ATOM 484 CA ALA B 63 13.210 9.182 14.838 1.00 97.85 C +ATOM 485 C ALA B 63 13.524 9.473 13.373 1.00 97.85 C +ATOM 486 CB ALA B 63 13.795 7.832 15.247 1.00 97.85 C +ATOM 487 O ALA B 63 14.438 10.243 13.069 1.00 97.85 O +ATOM 488 N ALA B 64 12.769 8.960 12.549 1.00 97.14 N +ATOM 489 CA ALA B 64 13.001 9.067 11.111 1.00 97.14 C +ATOM 490 C ALA B 64 12.873 10.513 10.641 1.00 97.14 C +ATOM 491 CB ALA B 64 12.027 8.174 10.347 1.00 97.14 C +ATOM 492 O ALA B 64 13.397 10.878 9.586 1.00 97.14 O +ATOM 493 N PHE B 65 12.175 11.286 11.433 1.00 95.87 N +ATOM 494 CA PHE B 65 11.890 12.644 10.986 1.00 95.87 C +ATOM 495 C PHE B 65 12.555 13.666 11.901 1.00 95.87 C +ATOM 496 CB PHE B 65 10.378 12.889 10.936 1.00 95.87 C +ATOM 497 O PHE B 65 12.360 14.872 11.738 1.00 95.87 O +ATOM 498 CG PHE B 65 9.657 12.031 9.933 1.00 95.87 C +ATOM 499 CD1 PHE B 65 9.646 12.372 8.586 1.00 95.87 C +ATOM 500 CD2 PHE B 65 8.990 10.881 10.336 1.00 95.87 C +ATOM 501 CE1 PHE B 65 8.979 11.579 7.654 1.00 95.87 C +ATOM 502 CE2 PHE B 65 8.321 10.084 9.412 1.00 95.87 C +ATOM 503 CZ PHE B 65 8.316 10.435 8.071 1.00 95.87 C +ATOM 504 N GLY B 66 13.218 13.186 12.848 1.00 93.44 N +ATOM 505 CA GLY B 66 13.952 14.063 13.746 1.00 93.44 C +ATOM 506 C GLY B 66 13.054 14.827 14.700 1.00 93.44 C +ATOM 507 O GLY B 66 13.409 15.915 15.159 1.00 93.44 O +ATOM 508 N HIS B 67 11.894 14.427 14.929 1.00 96.19 N +ATOM 509 CA HIS B 67 11.017 15.061 15.907 1.00 96.19 C +ATOM 510 C HIS B 67 11.544 14.869 17.325 1.00 96.19 C +ATOM 511 CB HIS B 67 9.597 14.503 15.795 1.00 96.19 C +ATOM 512 O HIS B 67 12.248 13.896 17.604 1.00 96.19 O +ATOM 513 CG HIS B 67 8.935 14.806 14.489 1.00 96.19 C +ATOM 514 CD2 HIS B 67 8.235 14.015 13.642 1.00 96.19 C +ATOM 515 ND1 HIS B 67 8.955 16.060 13.918 1.00 96.19 N +ATOM 516 CE1 HIS B 67 8.294 16.027 12.773 1.00 96.19 C +ATOM 517 NE2 HIS B 67 7.847 14.798 12.583 1.00 96.19 N +ATOM 518 N ASP B 68 11.160 15.720 18.188 1.00 96.03 N +ATOM 519 CA ASP B 68 11.597 15.630 19.578 1.00 96.03 C +ATOM 520 C ASP B 68 10.661 14.740 20.392 1.00 96.03 C +ATOM 521 CB ASP B 68 11.678 17.023 20.206 1.00 96.03 C +ATOM 522 O ASP B 68 9.512 15.109 20.648 1.00 96.03 O +ATOM 523 CG ASP B 68 12.251 17.007 21.612 1.00 96.03 C +ATOM 524 OD1 ASP B 68 12.515 15.910 22.151 1.00 96.03 O +ATOM 525 OD2 ASP B 68 12.437 18.100 22.188 1.00 96.03 O +ATOM 526 N PRO B 69 11.178 13.663 20.851 1.00 98.04 N +ATOM 527 CA PRO B 69 10.326 12.747 21.612 1.00 98.04 C +ATOM 528 C PRO B 69 9.858 13.342 22.938 1.00 98.04 C +ATOM 529 CB PRO B 69 11.233 11.536 21.848 1.00 98.04 C +ATOM 530 O PRO B 69 8.914 12.833 23.548 1.00 98.04 O +ATOM 531 CG PRO B 69 12.319 11.668 20.830 1.00 98.04 C +ATOM 532 CD PRO B 69 12.550 13.129 20.566 1.00 98.04 C +ATOM 533 N LYS B 70 10.480 14.341 23.397 1.00 97.02 N +ATOM 534 CA LYS B 70 10.105 14.959 24.665 1.00 97.02 C +ATOM 535 C LYS B 70 8.906 15.887 24.492 1.00 97.02 C +ATOM 536 CB LYS B 70 11.286 15.734 25.254 1.00 97.02 C +ATOM 537 O LYS B 70 8.248 16.249 25.470 1.00 97.02 O +ATOM 538 CG LYS B 70 12.465 14.857 25.651 1.00 97.02 C +ATOM 539 CD LYS B 70 13.648 15.692 26.123 1.00 97.02 C +ATOM 540 CE LYS B 70 14.885 14.834 26.348 1.00 97.02 C +ATOM 541 NZ LYS B 70 16.085 15.663 26.668 1.00 97.02 N +ATOM 542 N THR B 71 8.616 16.272 23.269 1.00 96.30 N +ATOM 543 CA THR B 71 7.494 17.160 22.986 1.00 96.30 C +ATOM 544 C THR B 71 6.357 16.397 22.312 1.00 96.30 C +ATOM 545 CB THR B 71 7.925 18.337 22.092 1.00 96.30 C +ATOM 546 O THR B 71 5.184 16.628 22.613 1.00 96.30 O +ATOM 547 CG2 THR B 71 9.064 19.125 22.732 1.00 96.30 C +ATOM 548 OG1 THR B 71 8.363 17.832 20.824 1.00 96.30 O +ATOM 549 N MET B 72 6.684 15.485 21.501 1.00 97.90 N +ATOM 550 CA MET B 72 5.657 14.702 20.820 1.00 97.90 C +ATOM 551 C MET B 72 4.989 13.726 21.784 1.00 97.90 C +ATOM 552 CB MET B 72 6.256 13.941 19.636 1.00 97.90 C +ATOM 553 O MET B 72 5.643 13.185 22.677 1.00 97.90 O +ATOM 554 CG MET B 72 5.218 13.402 18.665 1.00 97.90 C +ATOM 555 SD MET B 72 5.971 12.723 17.136 1.00 97.90 S +ATOM 556 CE MET B 72 6.431 14.264 16.295 1.00 97.90 C +ATOM 557 N ARG B 73 3.721 13.541 21.581 1.00 98.46 N +ATOM 558 CA ARG B 73 2.947 12.734 22.519 1.00 98.46 C +ATOM 559 C ARG B 73 2.540 11.405 21.892 1.00 98.46 C +ATOM 560 CB ARG B 73 1.704 13.496 22.985 1.00 98.46 C +ATOM 561 O ARG B 73 2.481 11.283 20.667 1.00 98.46 O +ATOM 562 CG ARG B 73 2.005 14.866 23.571 1.00 98.46 C +ATOM 563 CD ARG B 73 2.727 14.762 24.907 1.00 98.46 C +ATOM 564 NE ARG B 73 2.921 16.073 25.519 1.00 98.46 N +ATOM 565 NH1 ARG B 73 2.633 15.333 27.688 1.00 98.46 N +ATOM 566 NH2 ARG B 73 3.062 17.547 27.275 1.00 98.46 N +ATOM 567 CZ ARG B 73 2.872 16.315 26.826 1.00 98.46 C +ATOM 568 N VAL B 74 2.204 10.455 22.690 1.00 98.72 N +ATOM 569 CA VAL B 74 1.860 9.097 22.284 1.00 98.72 C +ATOM 570 C VAL B 74 0.596 9.118 21.426 1.00 98.72 C +ATOM 571 CB VAL B 74 1.658 8.172 23.505 1.00 98.72 C +ATOM 572 O VAL B 74 0.515 8.422 20.411 1.00 98.72 O +ATOM 573 CG1 VAL B 74 0.944 6.885 23.097 1.00 98.72 C +ATOM 574 CG2 VAL B 74 3.001 7.856 24.162 1.00 98.72 C +ATOM 575 N TYR B 75 -0.361 9.939 21.725 1.00 97.51 N +ATOM 576 CA TYR B 75 -1.621 9.947 20.991 1.00 97.51 C +ATOM 577 C TYR B 75 -1.415 10.428 19.560 1.00 97.51 C +ATOM 578 CB TYR B 75 -2.649 10.835 21.697 1.00 97.51 C +ATOM 579 O TYR B 75 -2.283 10.240 18.704 1.00 97.51 O +ATOM 580 CG TYR B 75 -2.337 12.310 21.614 1.00 97.51 C +ATOM 581 CD1 TYR B 75 -1.816 12.994 22.710 1.00 97.51 C +ATOM 582 CD2 TYR B 75 -2.562 13.021 20.440 1.00 97.51 C +ATOM 583 CE1 TYR B 75 -1.529 14.353 22.639 1.00 97.51 C +ATOM 584 CE2 TYR B 75 -2.278 14.380 20.358 1.00 97.51 C +ATOM 585 OH TYR B 75 -1.479 16.382 21.384 1.00 97.51 O +ATOM 586 CZ TYR B 75 -1.762 15.036 21.460 1.00 97.51 C +ATOM 587 N GLU B 76 -0.279 11.056 19.276 1.00 97.86 N +ATOM 588 CA GLU B 76 0.005 11.559 17.935 1.00 97.86 C +ATOM 589 C GLU B 76 0.502 10.443 17.020 1.00 97.86 C +ATOM 590 CB GLU B 76 1.034 12.691 17.991 1.00 97.86 C +ATOM 591 O GLU B 76 0.447 10.567 15.795 1.00 97.86 O +ATOM 592 CG GLU B 76 0.553 13.924 18.742 1.00 97.86 C +ATOM 593 CD GLU B 76 1.628 14.986 18.904 1.00 97.86 C +ATOM 594 OE1 GLU B 76 1.904 15.724 17.931 1.00 97.86 O +ATOM 595 OE2 GLU B 76 2.201 15.080 20.013 1.00 97.86 O +ATOM 596 N ILE B 77 0.973 9.300 17.576 1.00 98.28 N +ATOM 597 CA ILE B 77 1.613 8.303 16.725 1.00 98.28 C +ATOM 598 C ILE B 77 0.998 6.930 16.986 1.00 98.28 C +ATOM 599 CB ILE B 77 3.140 8.258 16.957 1.00 98.28 C +ATOM 600 O ILE B 77 1.281 5.969 16.266 1.00 98.28 O +ATOM 601 CG1 ILE B 77 3.449 7.879 18.410 1.00 98.28 C +ATOM 602 CG2 ILE B 77 3.781 9.601 16.593 1.00 98.28 C +ATOM 603 CD1 ILE B 77 4.873 7.388 18.633 1.00 98.28 C +ATOM 604 N MET B 78 0.173 6.767 17.932 1.00 98.18 N +ATOM 605 CA MET B 78 -0.395 5.487 18.347 1.00 98.18 C +ATOM 606 C MET B 78 -1.464 5.022 17.363 1.00 98.18 C +ATOM 607 CB MET B 78 -0.988 5.591 19.753 1.00 98.18 C +ATOM 608 O MET B 78 -1.952 5.810 16.552 1.00 98.18 O +ATOM 609 CG MET B 78 -2.226 6.469 19.833 1.00 98.18 C +ATOM 610 SD MET B 78 -2.917 6.557 21.531 1.00 98.18 S +ATOM 611 CE MET B 78 -4.380 7.587 21.227 1.00 98.18 C +ATOM 612 N ALA B 79 -1.784 3.701 17.457 1.00 97.69 N +ATOM 613 CA ALA B 79 -2.986 3.150 16.838 1.00 97.69 C +ATOM 614 C ALA B 79 -4.109 2.997 17.860 1.00 97.69 C +ATOM 615 CB ALA B 79 -2.679 1.805 16.184 1.00 97.69 C +ATOM 616 O ALA B 79 -3.985 2.227 18.816 1.00 97.69 O +ATOM 617 N LYS B 80 -5.137 3.753 17.672 1.00 96.64 N +ATOM 618 CA LYS B 80 -6.307 3.698 18.544 1.00 96.64 C +ATOM 619 C LYS B 80 -7.587 3.987 17.764 1.00 96.64 C +ATOM 620 CB LYS B 80 -6.162 4.690 19.699 1.00 96.64 C +ATOM 621 O LYS B 80 -7.739 5.066 17.189 1.00 96.64 O +ATOM 622 CG LYS B 80 -7.255 4.578 20.751 1.00 96.64 C +ATOM 623 CD LYS B 80 -6.921 5.392 21.994 1.00 96.64 C +ATOM 624 CE LYS B 80 -7.977 5.221 23.077 1.00 96.64 C +ATOM 625 NZ LYS B 80 -7.543 5.821 24.374 1.00 96.64 N +ATOM 626 N PRO B 81 -8.577 3.093 17.720 1.00 95.26 N +ATOM 627 CA PRO B 81 -8.557 1.735 18.269 1.00 95.26 C +ATOM 628 C PRO B 81 -7.574 0.819 17.542 1.00 95.26 C +ATOM 629 CB PRO B 81 -9.997 1.254 18.074 1.00 95.26 C +ATOM 630 O PRO B 81 -7.112 1.149 16.446 1.00 95.26 O +ATOM 631 CG PRO B 81 -10.494 2.010 16.884 1.00 95.26 C +ATOM 632 CD PRO B 81 -9.811 3.346 16.848 1.00 95.26 C +ATOM 633 N CYS B 82 -7.167 -0.163 18.176 1.00 95.09 N +ATOM 634 CA CYS B 82 -6.296 -1.157 17.558 1.00 95.09 C +ATOM 635 C CYS B 82 -7.040 -2.466 17.325 1.00 95.09 C +ATOM 636 CB CYS B 82 -5.065 -1.407 18.429 1.00 95.09 C +ATOM 637 O CYS B 82 -8.103 -2.692 17.906 1.00 95.09 O +ATOM 638 SG CYS B 82 -5.458 -1.961 20.103 1.00 95.09 S +ATOM 639 N VAL B 83 -6.552 -3.301 16.336 1.00 95.52 N +ATOM 640 CA VAL B 83 -7.060 -4.653 16.129 1.00 95.52 C +ATOM 641 C VAL B 83 -6.820 -5.492 17.382 1.00 95.52 C +ATOM 642 CB VAL B 83 -6.401 -5.326 14.904 1.00 95.52 C +ATOM 643 O VAL B 83 -5.751 -5.416 17.993 1.00 95.52 O +ATOM 644 CG1 VAL B 83 -6.877 -6.770 14.760 1.00 95.52 C +ATOM 645 CG2 VAL B 83 -6.703 -4.531 13.634 1.00 95.52 C +ATOM 646 N VAL B 84 -7.799 -6.204 17.754 1.00 94.98 N +ATOM 647 CA VAL B 84 -7.685 -7.016 18.961 1.00 94.98 C +ATOM 648 C VAL B 84 -7.831 -8.494 18.605 1.00 94.98 C +ATOM 649 CB VAL B 84 -8.740 -6.615 20.016 1.00 94.98 C +ATOM 650 O VAL B 84 -8.405 -8.836 17.568 1.00 94.98 O +ATOM 651 CG1 VAL B 84 -8.564 -5.155 20.429 1.00 94.98 C +ATOM 652 CG2 VAL B 84 -10.150 -6.855 19.479 1.00 94.98 C +ATOM 653 N VAL B 85 -7.276 -9.368 19.460 1.00 95.45 N +ATOM 654 CA VAL B 85 -7.307 -10.809 19.235 1.00 95.45 C +ATOM 655 C VAL B 85 -8.135 -11.485 20.325 1.00 95.45 C +ATOM 656 CB VAL B 85 -5.884 -11.409 19.198 1.00 95.45 C +ATOM 657 O VAL B 85 -7.981 -11.179 21.510 1.00 95.45 O +ATOM 658 CG1 VAL B 85 -5.941 -12.935 19.192 1.00 95.45 C +ATOM 659 CG2 VAL B 85 -5.120 -10.895 17.978 1.00 95.45 C +ATOM 660 N ASN B 86 -9.011 -12.408 19.950 1.00 93.17 N +ATOM 661 CA ASN B 86 -9.717 -13.282 20.881 1.00 93.17 C +ATOM 662 C ASN B 86 -8.773 -14.294 21.524 1.00 93.17 C +ATOM 663 CB ASN B 86 -10.867 -14.002 20.175 1.00 93.17 C +ATOM 664 O ASN B 86 -7.992 -14.948 20.831 1.00 93.17 O +ATOM 665 CG ASN B 86 -11.705 -14.836 21.125 1.00 93.17 C +ATOM 666 ND2 ASN B 86 -13.015 -14.838 20.913 1.00 93.17 N +ATOM 667 OD1 ASN B 86 -11.178 -15.473 22.041 1.00 93.17 O +ATOM 668 N PRO B 87 -8.874 -14.403 22.868 1.00 94.79 N +ATOM 669 CA PRO B 87 -7.950 -15.315 23.547 1.00 94.79 C +ATOM 670 C PRO B 87 -8.110 -16.764 23.092 1.00 94.79 C +ATOM 671 CB PRO B 87 -8.326 -15.161 25.023 1.00 94.79 C +ATOM 672 O PRO B 87 -7.157 -17.544 23.160 1.00 94.79 O +ATOM 673 CG PRO B 87 -9.715 -14.608 25.009 1.00 94.79 C +ATOM 674 CD PRO B 87 -9.876 -13.758 23.781 1.00 94.79 C +ATOM 675 N GLU B 88 -9.200 -17.130 22.542 1.00 93.09 N +ATOM 676 CA GLU B 88 -9.465 -18.513 22.159 1.00 93.09 C +ATOM 677 C GLU B 88 -9.161 -18.744 20.681 1.00 93.09 C +ATOM 678 CB GLU B 88 -10.918 -18.887 22.461 1.00 93.09 C +ATOM 679 O GLU B 88 -9.341 -19.852 20.171 1.00 93.09 O +ATOM 680 CG GLU B 88 -11.275 -18.821 23.939 1.00 93.09 C +ATOM 681 CD GLU B 88 -12.751 -19.063 24.211 1.00 93.09 C +ATOM 682 OE1 GLU B 88 -13.144 -19.148 25.397 1.00 93.09 O +ATOM 683 OE2 GLU B 88 -13.521 -19.169 23.230 1.00 93.09 O +ATOM 684 N LEU B 89 -8.750 -17.702 20.033 1.00 93.12 N +ATOM 685 CA LEU B 89 -8.421 -17.836 18.618 1.00 93.12 C +ATOM 686 C LEU B 89 -7.200 -18.730 18.426 1.00 93.12 C +ATOM 687 CB LEU B 89 -8.164 -16.461 17.995 1.00 93.12 C +ATOM 688 O LEU B 89 -6.213 -18.604 19.154 1.00 93.12 O +ATOM 689 CG LEU B 89 -8.124 -16.406 16.467 1.00 93.12 C +ATOM 690 CD1 LEU B 89 -9.472 -16.817 15.886 1.00 93.12 C +ATOM 691 CD2 LEU B 89 -7.734 -15.011 15.992 1.00 93.12 C +ATOM 692 N GLY B 90 -7.257 -19.624 17.391 1.00 92.81 N +ATOM 693 CA GLY B 90 -6.111 -20.462 17.073 1.00 92.81 C +ATOM 694 C GLY B 90 -4.916 -19.673 16.572 1.00 92.81 C +ATOM 695 O GLY B 90 -5.076 -18.664 15.883 1.00 92.81 O +ATOM 696 N VAL B 91 -3.789 -20.163 16.813 1.00 94.83 N +ATOM 697 CA VAL B 91 -2.540 -19.456 16.550 1.00 94.83 C +ATOM 698 C VAL B 91 -2.377 -19.237 15.047 1.00 94.83 C +ATOM 699 CB VAL B 91 -1.323 -20.224 17.112 1.00 94.83 C +ATOM 700 O VAL B 91 -1.882 -18.193 14.616 1.00 94.83 O +ATOM 701 CG1 VAL B 91 -0.017 -19.588 16.639 1.00 94.83 C +ATOM 702 CG2 VAL B 91 -1.379 -20.266 18.638 1.00 94.83 C +ATOM 703 N GLU B 92 -2.732 -20.185 14.262 1.00 94.28 N +ATOM 704 CA GLU B 92 -2.615 -20.024 12.815 1.00 94.28 C +ATOM 705 C GLU B 92 -3.517 -18.902 12.310 1.00 94.28 C +ATOM 706 CB GLU B 92 -2.953 -21.334 12.099 1.00 94.28 C +ATOM 707 O GLU B 92 -3.144 -18.162 11.398 1.00 94.28 O +ATOM 708 CG GLU B 92 -1.956 -22.454 12.361 1.00 94.28 C +ATOM 709 CD GLU B 92 -2.225 -23.208 13.653 1.00 94.28 C +ATOM 710 OE1 GLU B 92 -1.500 -24.185 13.949 1.00 94.28 O +ATOM 711 OE2 GLU B 92 -3.170 -22.819 14.376 1.00 94.28 O +ATOM 712 N TYR B 93 -4.642 -18.815 12.905 1.00 95.14 N +ATOM 713 CA TYR B 93 -5.560 -17.745 12.530 1.00 95.14 C +ATOM 714 C TYR B 93 -5.039 -16.391 12.996 1.00 95.14 C +ATOM 715 CB TYR B 93 -6.951 -18.000 13.118 1.00 95.14 C +ATOM 716 O TYR B 93 -5.258 -15.373 12.335 1.00 95.14 O +ATOM 717 CG TYR B 93 -7.733 -19.064 12.387 1.00 95.14 C +ATOM 718 CD1 TYR B 93 -7.989 -18.955 11.022 1.00 95.14 C +ATOM 719 CD2 TYR B 93 -8.218 -20.181 13.060 1.00 95.14 C +ATOM 720 CE1 TYR B 93 -8.711 -19.932 10.345 1.00 95.14 C +ATOM 721 CE2 TYR B 93 -8.941 -21.164 12.393 1.00 95.14 C +ATOM 722 OH TYR B 93 -9.897 -22.002 10.372 1.00 95.14 O +ATOM 723 CZ TYR B 93 -9.182 -21.032 11.038 1.00 95.14 C +ATOM 724 N VAL B 94 -4.359 -16.348 14.145 1.00 96.78 N +ATOM 725 CA VAL B 94 -3.698 -15.116 14.562 1.00 96.78 C +ATOM 726 C VAL B 94 -2.663 -14.705 13.517 1.00 96.78 C +ATOM 727 CB VAL B 94 -3.027 -15.272 15.945 1.00 96.78 C +ATOM 728 O VAL B 94 -2.624 -13.547 13.095 1.00 96.78 O +ATOM 729 CG1 VAL B 94 -2.360 -13.965 16.372 1.00 96.78 C +ATOM 730 CG2 VAL B 94 -4.051 -15.719 16.987 1.00 96.78 C +ATOM 731 N ALA B 95 -1.893 -15.701 13.105 1.00 98.05 N +ATOM 732 CA ALA B 95 -0.902 -15.442 12.064 1.00 98.05 C +ATOM 733 C ALA B 95 -1.561 -14.886 10.805 1.00 98.05 C +ATOM 734 CB ALA B 95 -0.128 -16.717 11.737 1.00 98.05 C +ATOM 735 O ALA B 95 -1.073 -13.918 10.217 1.00 98.05 O +ATOM 736 N ARG B 96 -2.627 -15.477 10.409 1.00 97.77 N +ATOM 737 CA ARG B 96 -3.337 -15.050 9.207 1.00 97.77 C +ATOM 738 C ARG B 96 -3.907 -13.646 9.378 1.00 97.77 C +ATOM 739 CB ARG B 96 -4.459 -16.033 8.868 1.00 97.77 C +ATOM 740 O ARG B 96 -3.869 -12.837 8.448 1.00 97.77 O +ATOM 741 CG ARG B 96 -5.108 -15.785 7.515 1.00 97.77 C +ATOM 742 CD ARG B 96 -6.058 -16.910 7.130 1.00 97.77 C +ATOM 743 NE ARG B 96 -6.880 -16.550 5.978 1.00 97.77 N +ATOM 744 NH1 ARG B 96 -5.421 -17.409 4.407 1.00 97.77 N +ATOM 745 NH2 ARG B 96 -7.381 -16.425 3.740 1.00 97.77 N +ATOM 746 CZ ARG B 96 -6.559 -16.796 4.711 1.00 97.77 C +ATOM 747 N LEU B 97 -4.420 -13.333 10.557 1.00 97.57 N +ATOM 748 CA LEU B 97 -4.918 -11.994 10.852 1.00 97.57 C +ATOM 749 C LEU B 97 -3.805 -10.959 10.722 1.00 97.57 C +ATOM 750 CB LEU B 97 -5.518 -11.942 12.260 1.00 97.57 C +ATOM 751 O LEU B 97 -3.999 -9.906 10.112 1.00 97.57 O +ATOM 752 CG LEU B 97 -6.143 -10.612 12.682 1.00 97.57 C +ATOM 753 CD1 LEU B 97 -7.328 -10.274 11.782 1.00 97.57 C +ATOM 754 CD2 LEU B 97 -6.573 -10.663 14.144 1.00 97.57 C +ATOM 755 N PHE B 98 -2.650 -11.264 11.246 1.00 98.07 N +ATOM 756 CA PHE B 98 -1.499 -10.376 11.141 1.00 98.07 C +ATOM 757 C PHE B 98 -1.103 -10.173 9.683 1.00 98.07 C +ATOM 758 CB PHE B 98 -0.313 -10.935 11.934 1.00 98.07 C +ATOM 759 O PHE B 98 -0.863 -9.044 9.251 1.00 98.07 O +ATOM 760 CG PHE B 98 -0.449 -10.773 13.424 1.00 98.07 C +ATOM 761 CD1 PHE B 98 -1.510 -10.059 13.966 1.00 98.07 C +ATOM 762 CD2 PHE B 98 0.486 -11.336 14.283 1.00 98.07 C +ATOM 763 CE1 PHE B 98 -1.638 -9.907 15.344 1.00 98.07 C +ATOM 764 CE2 PHE B 98 0.364 -11.189 15.662 1.00 98.07 C +ATOM 765 CZ PHE B 98 -0.698 -10.474 16.190 1.00 98.07 C +ATOM 766 N ALA B 99 -1.100 -11.268 8.967 1.00 97.78 N +ATOM 767 CA ALA B 99 -0.732 -11.186 7.556 1.00 97.78 C +ATOM 768 C ALA B 99 -1.722 -10.321 6.780 1.00 97.78 C +ATOM 769 CB ALA B 99 -0.658 -12.582 6.943 1.00 97.78 C +ATOM 770 O ALA B 99 -1.320 -9.480 5.972 1.00 97.78 O +ATOM 771 N GLN B 100 -2.973 -10.445 7.026 1.00 96.01 N +ATOM 772 CA GLN B 100 -4.022 -9.736 6.300 1.00 96.01 C +ATOM 773 C GLN B 100 -4.033 -8.253 6.660 1.00 96.01 C +ATOM 774 CB GLN B 100 -5.390 -10.357 6.590 1.00 96.01 C +ATOM 775 O GLN B 100 -4.271 -7.403 5.800 1.00 96.01 O +ATOM 776 CG GLN B 100 -5.606 -11.708 5.923 1.00 96.01 C +ATOM 777 CD GLN B 100 -6.885 -12.387 6.373 1.00 96.01 C +ATOM 778 NE2 GLN B 100 -7.290 -13.428 5.653 1.00 96.01 N +ATOM 779 OE1 GLN B 100 -7.505 -11.981 7.362 1.00 96.01 O +ATOM 780 N THR B 101 -3.783 -7.944 7.910 1.00 96.58 N +ATOM 781 CA THR B 101 -3.877 -6.567 8.383 1.00 96.58 C +ATOM 782 C THR B 101 -2.504 -5.900 8.384 1.00 96.58 C +ATOM 783 CB THR B 101 -4.484 -6.502 9.797 1.00 96.58 C +ATOM 784 O THR B 101 -2.393 -4.698 8.634 1.00 96.58 O +ATOM 785 CG2 THR B 101 -5.905 -7.055 9.812 1.00 96.58 C +ATOM 786 OG1 THR B 101 -3.674 -7.273 10.694 1.00 96.58 O +ATOM 787 N ARG B 102 -1.437 -6.684 8.270 1.00 95.88 N +ATOM 788 CA ARG B 102 -0.055 -6.217 8.209 1.00 95.88 C +ATOM 789 C ARG B 102 0.379 -5.617 9.542 1.00 95.88 C +ATOM 790 CB ARG B 102 0.116 -5.188 7.090 1.00 95.88 C +ATOM 791 O ARG B 102 1.066 -4.593 9.573 1.00 95.88 O +ATOM 792 CG ARG B 102 -0.139 -5.744 5.698 1.00 95.88 C +ATOM 793 CD ARG B 102 0.974 -6.682 5.252 1.00 95.88 C +ATOM 794 NE ARG B 102 0.815 -7.084 3.858 1.00 95.88 N +ATOM 795 NH1 ARG B 102 2.939 -7.968 3.654 1.00 95.88 N +ATOM 796 NH2 ARG B 102 1.500 -8.007 1.870 1.00 95.88 N +ATOM 797 CZ ARG B 102 1.752 -7.685 3.130 1.00 95.88 C +ATOM 798 N ILE B 103 -0.153 -6.185 10.599 1.00 96.39 N +ATOM 799 CA ILE B 103 0.332 -5.837 11.930 1.00 96.39 C +ATOM 800 C ILE B 103 1.166 -6.985 12.493 1.00 96.39 C +ATOM 801 CB ILE B 103 -0.835 -5.503 12.887 1.00 96.39 C +ATOM 802 O ILE B 103 1.170 -8.087 11.939 1.00 96.39 O +ATOM 803 CG1 ILE B 103 -1.720 -6.736 13.100 1.00 96.39 C +ATOM 804 CG2 ILE B 103 -1.654 -4.326 12.350 1.00 96.39 C +ATOM 805 CD1 ILE B 103 -2.806 -6.545 14.150 1.00 96.39 C +ATOM 806 N ARG B 104 1.904 -6.737 13.549 1.00 96.57 N +ATOM 807 CA ARG B 104 2.830 -7.744 14.056 1.00 96.57 C +ATOM 808 C ARG B 104 2.545 -8.063 15.519 1.00 96.57 C +ATOM 809 CB ARG B 104 4.277 -7.275 13.894 1.00 96.57 C +ATOM 810 O ARG B 104 3.152 -8.969 16.093 1.00 96.57 O +ATOM 811 CG ARG B 104 4.708 -7.091 12.447 1.00 96.57 C +ATOM 812 CD ARG B 104 6.035 -6.354 12.343 1.00 96.57 C +ATOM 813 NE ARG B 104 6.370 -6.040 10.956 1.00 96.57 N +ATOM 814 NH1 ARG B 104 8.338 -4.942 11.463 1.00 96.57 N +ATOM 815 NH2 ARG B 104 7.663 -5.146 9.282 1.00 96.57 N +ATOM 816 CZ ARG B 104 7.456 -5.377 10.570 1.00 96.57 C +ATOM 817 N ARG B 105 1.699 -7.248 16.087 1.00 97.31 N +ATOM 818 CA ARG B 105 1.305 -7.455 17.477 1.00 97.31 C +ATOM 819 C ARG B 105 -0.073 -6.862 17.750 1.00 97.31 C +ATOM 820 CB ARG B 105 2.338 -6.841 18.425 1.00 97.31 C +ATOM 821 O ARG B 105 -0.490 -5.915 17.081 1.00 97.31 O +ATOM 822 CG ARG B 105 2.417 -5.324 18.350 1.00 97.31 C +ATOM 823 CD ARG B 105 3.600 -4.782 19.140 1.00 97.31 C +ATOM 824 NE ARG B 105 4.855 -5.405 18.728 1.00 97.31 N +ATOM 825 NH1 ARG B 105 5.870 -5.210 20.794 1.00 97.31 N +ATOM 826 NH2 ARG B 105 6.996 -6.172 19.045 1.00 97.31 N +ATOM 827 CZ ARG B 105 5.904 -5.594 19.523 1.00 97.31 C +ATOM 828 N ALA B 106 -0.707 -7.431 18.715 1.00 97.60 N +ATOM 829 CA ALA B 106 -2.048 -6.984 19.083 1.00 97.60 C +ATOM 830 C ALA B 106 -2.385 -7.382 20.517 1.00 97.60 C +ATOM 831 CB ALA B 106 -3.083 -7.556 18.118 1.00 97.60 C +ATOM 832 O ALA B 106 -1.887 -8.392 21.020 1.00 97.60 O +ATOM 833 N PRO B 107 -3.186 -6.560 21.171 1.00 97.39 N +ATOM 834 CA PRO B 107 -3.659 -6.980 22.493 1.00 97.39 C +ATOM 835 C PRO B 107 -4.650 -8.139 22.424 1.00 97.39 C +ATOM 836 CB PRO B 107 -4.330 -5.719 23.044 1.00 97.39 C +ATOM 837 O PRO B 107 -5.412 -8.249 21.460 1.00 97.39 O +ATOM 838 CG PRO B 107 -4.725 -4.936 21.833 1.00 97.39 C +ATOM 839 CD PRO B 107 -3.779 -5.275 20.717 1.00 97.39 C +ATOM 840 N VAL B 108 -4.560 -9.017 23.372 1.00 96.93 N +ATOM 841 CA VAL B 108 -5.527 -10.091 23.572 1.00 96.93 C +ATOM 842 C VAL B 108 -6.557 -9.672 24.619 1.00 96.93 C +ATOM 843 CB VAL B 108 -4.836 -11.405 24.000 1.00 96.93 C +ATOM 844 O VAL B 108 -6.218 -9.478 25.789 1.00 96.93 O +ATOM 845 CG1 VAL B 108 -5.855 -12.536 24.122 1.00 96.93 C +ATOM 846 CG2 VAL B 108 -3.736 -11.777 23.007 1.00 96.93 C +ATOM 847 N ILE B 109 -7.765 -9.544 24.206 1.00 92.98 N +ATOM 848 CA ILE B 109 -8.800 -8.995 25.075 1.00 92.98 C +ATOM 849 C ILE B 109 -9.969 -9.972 25.166 1.00 92.98 C +ATOM 850 CB ILE B 109 -9.289 -7.618 24.572 1.00 92.98 C +ATOM 851 O ILE B 109 -10.406 -10.524 24.153 1.00 92.98 O +ATOM 852 CG1 ILE B 109 -8.134 -6.611 24.563 1.00 92.98 C +ATOM 853 CG2 ILE B 109 -10.451 -7.111 25.431 1.00 92.98 C +ATOM 854 CD1 ILE B 109 -8.508 -5.245 24.003 1.00 92.98 C +ATOM 855 N GLN B 110 -10.490 -10.249 26.361 1.00 90.40 N +ATOM 856 CA GLN B 110 -11.716 -10.990 26.639 1.00 90.40 C +ATOM 857 C GLN B 110 -12.786 -10.080 27.235 1.00 90.40 C +ATOM 858 CB GLN B 110 -11.434 -12.159 27.583 1.00 90.40 C +ATOM 859 O GLN B 110 -12.677 -9.658 28.389 1.00 90.40 O +ATOM 860 CG GLN B 110 -12.625 -13.087 27.786 1.00 90.40 C +ATOM 861 CD GLN B 110 -12.250 -14.378 28.489 1.00 90.40 C +ATOM 862 NE2 GLN B 110 -12.824 -15.488 28.038 1.00 90.40 N +ATOM 863 OE1 GLN B 110 -11.450 -14.378 29.430 1.00 90.40 O +ATOM 864 N GLY B 111 -13.793 -9.766 26.412 1.00 83.40 N +ATOM 865 CA GLY B 111 -14.731 -8.750 26.862 1.00 83.40 C +ATOM 866 C GLY B 111 -14.109 -7.371 26.972 1.00 83.40 C +ATOM 867 O GLY B 111 -13.678 -6.797 25.970 1.00 83.40 O +ATOM 868 N LYS B 112 -14.037 -6.951 28.272 1.00 83.17 N +ATOM 869 CA LYS B 112 -13.435 -5.643 28.513 1.00 83.17 C +ATOM 870 C LYS B 112 -12.094 -5.778 29.228 1.00 83.17 C +ATOM 871 CB LYS B 112 -14.378 -4.760 29.331 1.00 83.17 C +ATOM 872 O LYS B 112 -11.466 -4.776 29.576 1.00 83.17 O +ATOM 873 CG LYS B 112 -15.645 -4.355 28.591 1.00 83.17 C +ATOM 874 CD LYS B 112 -16.441 -3.318 29.372 1.00 83.17 C +ATOM 875 CE LYS B 112 -17.672 -2.860 28.601 1.00 83.17 C +ATOM 876 NZ LYS B 112 -18.434 -1.813 29.346 1.00 83.17 N +ATOM 877 N THR B 113 -11.663 -6.982 29.276 1.00 90.06 N +ATOM 878 CA THR B 113 -10.469 -7.218 30.081 1.00 90.06 C +ATOM 879 C THR B 113 -9.261 -7.486 29.188 1.00 90.06 C +ATOM 880 CB THR B 113 -10.670 -8.400 31.046 1.00 90.06 C +ATOM 881 O THR B 113 -9.318 -8.333 28.294 1.00 90.06 O +ATOM 882 CG2 THR B 113 -9.480 -8.551 31.987 1.00 90.06 C +ATOM 883 OG1 THR B 113 -11.854 -8.179 31.823 1.00 90.06 O +ATOM 884 N LEU B 114 -8.274 -6.769 29.428 1.00 94.06 N +ATOM 885 CA LEU B 114 -7.001 -6.978 28.747 1.00 94.06 C +ATOM 886 C LEU B 114 -6.242 -8.149 29.362 1.00 94.06 C +ATOM 887 CB LEU B 114 -6.145 -5.711 28.809 1.00 94.06 C +ATOM 888 O LEU B 114 -5.891 -8.115 30.544 1.00 94.06 O +ATOM 889 CG LEU B 114 -4.751 -5.803 28.185 1.00 94.06 C +ATOM 890 CD1 LEU B 114 -4.858 -6.006 26.677 1.00 94.06 C +ATOM 891 CD2 LEU B 114 -3.938 -4.554 28.505 1.00 94.06 C +ATOM 892 N LEU B 115 -5.890 -9.206 28.612 1.00 95.95 N +ATOM 893 CA LEU B 115 -5.234 -10.403 29.125 1.00 95.95 C +ATOM 894 C LEU B 115 -3.738 -10.371 28.831 1.00 95.95 C +ATOM 895 CB LEU B 115 -5.859 -11.661 28.516 1.00 95.95 C +ATOM 896 O LEU B 115 -2.937 -10.903 29.604 1.00 95.95 O +ATOM 897 CG LEU B 115 -7.329 -11.917 28.849 1.00 95.95 C +ATOM 898 CD1 LEU B 115 -7.782 -13.248 28.259 1.00 95.95 C +ATOM 899 CD2 LEU B 115 -7.547 -11.893 30.358 1.00 95.95 C +ATOM 900 N GLY B 116 -3.374 -9.778 27.675 1.00 96.57 N +ATOM 901 CA GLY B 116 -1.982 -9.755 27.255 1.00 96.57 C +ATOM 902 C GLY B 116 -1.787 -9.174 25.867 1.00 96.57 C +ATOM 903 O GLY B 116 -2.627 -8.413 25.384 1.00 96.57 O +ATOM 904 N ILE B 117 -0.577 -9.398 25.306 1.00 97.20 N +ATOM 905 CA ILE B 117 -0.206 -9.013 23.948 1.00 97.20 C +ATOM 906 C ILE B 117 0.347 -10.224 23.201 1.00 97.20 C +ATOM 907 CB ILE B 117 0.828 -7.865 23.949 1.00 97.20 C +ATOM 908 O ILE B 117 1.100 -11.020 23.767 1.00 97.20 O +ATOM 909 CG1 ILE B 117 0.204 -6.583 24.512 1.00 97.20 C +ATOM 910 CG2 ILE B 117 1.377 -7.632 22.538 1.00 97.20 C +ATOM 911 CD1 ILE B 117 1.184 -5.426 24.652 1.00 97.20 C +ATOM 912 N ILE B 118 -0.040 -10.445 22.049 1.00 97.87 N +ATOM 913 CA ILE B 118 0.504 -11.510 21.213 1.00 97.87 C +ATOM 914 C ILE B 118 1.218 -10.904 20.006 1.00 97.87 C +ATOM 915 CB ILE B 118 -0.602 -12.483 20.748 1.00 97.87 C +ATOM 916 O ILE B 118 0.748 -9.922 19.427 1.00 97.87 O +ATOM 917 CG1 ILE B 118 0.012 -13.666 19.989 1.00 97.87 C +ATOM 918 CG2 ILE B 118 -1.635 -11.755 19.883 1.00 97.87 C +ATOM 919 CD1 ILE B 118 -0.932 -14.848 19.818 1.00 97.87 C +ATOM 920 N SER B 119 2.321 -11.434 19.618 1.00 97.51 N +ATOM 921 CA SER B 119 3.122 -10.903 18.520 1.00 97.51 C +ATOM 922 C SER B 119 3.588 -12.016 17.587 1.00 97.51 C +ATOM 923 CB SER B 119 4.331 -10.137 19.058 1.00 97.51 C +ATOM 924 O SER B 119 3.431 -13.199 17.897 1.00 97.51 O +ATOM 925 OG SER B 119 5.274 -11.026 19.632 1.00 97.51 O +ATOM 926 N VAL B 120 4.168 -11.670 16.496 1.00 98.01 N +ATOM 927 CA VAL B 120 4.773 -12.620 15.569 1.00 98.01 C +ATOM 928 C VAL B 120 5.882 -13.397 16.275 1.00 98.01 C +ATOM 929 CB VAL B 120 5.334 -11.911 14.315 1.00 98.01 C +ATOM 930 O VAL B 120 6.102 -14.576 15.989 1.00 98.01 O +ATOM 931 CG1 VAL B 120 4.201 -11.336 13.468 1.00 98.01 C +ATOM 932 CG2 VAL B 120 6.315 -10.813 14.719 1.00 98.01 C +ATOM 933 N SER B 121 6.561 -12.754 17.213 1.00 97.00 N +ATOM 934 CA SER B 121 7.604 -13.429 17.979 1.00 97.00 C +ATOM 935 C SER B 121 7.023 -14.546 18.839 1.00 97.00 C +ATOM 936 CB SER B 121 8.352 -12.430 18.863 1.00 97.00 C +ATOM 937 O SER B 121 7.598 -15.633 18.925 1.00 97.00 O +ATOM 938 OG SER B 121 9.026 -11.465 18.073 1.00 97.00 O +ATOM 939 N ASP B 122 5.922 -14.239 19.423 1.00 97.48 N +ATOM 940 CA ASP B 122 5.268 -15.271 20.221 1.00 97.48 C +ATOM 941 C ASP B 122 4.902 -16.480 19.363 1.00 97.48 C +ATOM 942 CB ASP B 122 4.018 -14.711 20.903 1.00 97.48 C +ATOM 943 O ASP B 122 5.111 -17.624 19.771 1.00 97.48 O +ATOM 944 CG ASP B 122 4.337 -13.701 21.991 1.00 97.48 C +ATOM 945 OD1 ASP B 122 5.300 -13.916 22.758 1.00 97.48 O +ATOM 946 OD2 ASP B 122 3.618 -12.683 22.083 1.00 97.48 O +ATOM 947 N ILE B 123 4.378 -16.216 18.190 1.00 98.11 N +ATOM 948 CA ILE B 123 3.987 -17.297 17.292 1.00 98.11 C +ATOM 949 C ILE B 123 5.218 -18.111 16.897 1.00 98.11 C +ATOM 950 CB ILE B 123 3.276 -16.756 16.031 1.00 98.11 C +ATOM 951 O ILE B 123 5.196 -19.343 16.945 1.00 98.11 O +ATOM 952 CG1 ILE B 123 1.950 -16.088 16.412 1.00 98.11 C +ATOM 953 CG2 ILE B 123 3.052 -17.878 15.014 1.00 98.11 C +ATOM 954 CD1 ILE B 123 1.271 -15.359 15.260 1.00 98.11 C +ATOM 955 N LEU B 124 6.269 -17.458 16.604 1.00 98.24 N +ATOM 956 CA LEU B 124 7.477 -18.137 16.148 1.00 98.24 C +ATOM 957 C LEU B 124 8.100 -18.954 17.275 1.00 98.24 C +ATOM 958 CB LEU B 124 8.493 -17.123 15.615 1.00 98.24 C +ATOM 959 O LEU B 124 8.441 -20.123 17.084 1.00 98.24 O +ATOM 960 CG LEU B 124 9.741 -17.701 14.947 1.00 98.24 C +ATOM 961 CD1 LEU B 124 9.444 -18.072 13.498 1.00 98.24 C +ATOM 962 CD2 LEU B 124 10.897 -16.709 15.024 1.00 98.24 C +ATOM 963 N PHE B 125 8.210 -18.428 18.452 1.00 97.65 N +ATOM 964 CA PHE B 125 9.023 -19.011 19.514 1.00 97.65 C +ATOM 965 C PHE B 125 8.194 -19.960 20.371 1.00 97.65 C +ATOM 966 CB PHE B 125 9.634 -17.912 20.389 1.00 97.65 C +ATOM 967 O PHE B 125 8.732 -20.892 20.972 1.00 97.65 O +ATOM 968 CG PHE B 125 10.790 -17.196 19.745 1.00 97.65 C +ATOM 969 CD1 PHE B 125 12.038 -17.801 19.655 1.00 97.65 C +ATOM 970 CD2 PHE B 125 10.629 -15.917 19.228 1.00 97.65 C +ATOM 971 CE1 PHE B 125 13.110 -17.141 19.059 1.00 97.65 C +ATOM 972 CE2 PHE B 125 11.696 -15.251 18.631 1.00 97.65 C +ATOM 973 CZ PHE B 125 12.935 -15.864 18.549 1.00 97.65 C +ATOM 974 N LYS B 126 6.891 -19.754 20.431 1.00 97.44 N +ATOM 975 CA LYS B 126 6.139 -20.467 21.460 1.00 97.44 C +ATOM 976 C LYS B 126 5.087 -21.381 20.838 1.00 97.44 C +ATOM 977 CB LYS B 126 5.473 -19.479 22.420 1.00 97.44 C +ATOM 978 O LYS B 126 4.557 -22.271 21.507 1.00 97.44 O +ATOM 979 CG LYS B 126 6.449 -18.545 23.121 1.00 97.44 C +ATOM 980 CD LYS B 126 5.724 -17.562 24.032 1.00 97.44 C +ATOM 981 CE LYS B 126 6.673 -16.505 24.581 1.00 97.44 C +ATOM 982 NZ LYS B 126 5.940 -15.434 25.320 1.00 97.44 N +ATOM 983 N SER B 127 4.794 -21.220 19.581 1.00 96.41 N +ATOM 984 CA SER B 127 3.711 -22.004 18.995 1.00 96.41 C +ATOM 985 C SER B 127 4.226 -23.329 18.440 1.00 96.41 C +ATOM 986 CB SER B 127 3.015 -21.214 17.887 1.00 96.41 C +ATOM 987 O SER B 127 5.416 -23.633 18.549 1.00 96.41 O +ATOM 988 OG SER B 127 3.734 -21.314 16.669 1.00 96.41 O +ATOM 989 N ASP B 128 3.272 -24.123 17.935 1.00 95.83 N +ATOM 990 CA ASP B 128 3.616 -25.453 17.444 1.00 95.83 C +ATOM 991 C ASP B 128 3.355 -25.570 15.944 1.00 95.83 C +ATOM 992 CB ASP B 128 2.829 -26.525 18.200 1.00 95.83 C +ATOM 993 O ASP B 128 3.060 -26.657 15.443 1.00 95.83 O +ATOM 994 CG ASP B 128 1.325 -26.366 18.059 1.00 95.83 C +ATOM 995 OD1 ASP B 128 0.871 -25.382 17.436 1.00 95.83 O +ATOM 996 OD2 ASP B 128 0.587 -27.232 18.577 1.00 95.83 O +ATOM 997 N PHE B 129 3.449 -24.482 15.229 1.00 95.39 N +ATOM 998 CA PHE B 129 3.100 -24.501 13.813 1.00 95.39 C +ATOM 999 C PHE B 129 4.122 -25.302 13.015 1.00 95.39 C +ATOM 1000 CB PHE B 129 3.005 -23.074 13.263 1.00 95.39 C +ATOM 1001 O PHE B 129 3.828 -25.770 11.913 1.00 95.39 O +ATOM 1002 CG PHE B 129 4.339 -22.400 13.091 1.00 95.39 C +ATOM 1003 CD1 PHE B 129 4.930 -21.717 14.147 1.00 95.39 C +ATOM 1004 CD2 PHE B 129 5.003 -22.448 11.872 1.00 95.39 C +ATOM 1005 CE1 PHE B 129 6.165 -21.091 13.991 1.00 95.39 C +ATOM 1006 CE2 PHE B 129 6.237 -21.826 11.708 1.00 95.39 C +ATOM 1007 CZ PHE B 129 6.816 -21.147 12.768 1.00 95.39 C +ATOM 1008 N VAL B 130 5.353 -25.413 13.539 1.00 96.78 N +ATOM 1009 CA VAL B 130 6.362 -26.222 12.862 1.00 96.78 C +ATOM 1010 C VAL B 130 6.043 -27.704 13.043 1.00 96.78 C +ATOM 1011 CB VAL B 130 7.782 -25.914 13.387 1.00 96.78 C +ATOM 1012 O VAL B 130 6.068 -28.473 12.079 1.00 96.78 O +ATOM 1013 CG1 VAL B 130 8.799 -26.888 12.795 1.00 96.78 C +ATOM 1014 CG2 VAL B 130 8.169 -24.472 13.065 1.00 96.78 C +ATOM 1015 N GLU B 131 5.678 -28.100 14.261 1.00 94.59 N +ATOM 1016 CA GLU B 131 5.416 -29.496 14.598 1.00 94.59 C +ATOM 1017 C GLU B 131 4.069 -29.954 14.047 1.00 94.59 C +ATOM 1018 CB GLU B 131 5.461 -29.701 16.114 1.00 94.59 C +ATOM 1019 O GLU B 131 3.931 -31.094 13.599 1.00 94.59 O +ATOM 1020 CG GLU B 131 6.832 -29.455 16.728 1.00 94.59 C +ATOM 1021 CD GLU B 131 7.149 -27.980 16.916 1.00 94.59 C +ATOM 1022 OE1 GLU B 131 8.336 -27.634 17.114 1.00 94.59 O +ATOM 1023 OE2 GLU B 131 6.202 -27.163 16.867 1.00 94.59 O +ATOM 1024 N LYS B 132 3.139 -29.050 14.088 1.00 92.55 N +ATOM 1025 CA LYS B 132 1.785 -29.395 13.663 1.00 92.55 C +ATOM 1026 C LYS B 132 1.252 -28.384 12.652 1.00 92.55 C +ATOM 1027 CB LYS B 132 0.848 -29.475 14.868 1.00 92.55 C +ATOM 1028 O LYS B 132 0.270 -27.689 12.920 1.00 92.55 O +ATOM 1029 CG LYS B 132 1.263 -30.504 15.908 1.00 92.55 C +ATOM 1030 CD LYS B 132 0.296 -30.533 17.085 1.00 92.55 C +ATOM 1031 CE LYS B 132 0.756 -31.502 18.165 1.00 92.55 C +ATOM 1032 NZ LYS B 132 -0.137 -31.462 19.362 1.00 92.55 N +ATOM 1033 N PRO B 133 1.824 -28.521 11.499 1.00 90.92 N +ATOM 1034 CA PRO B 133 1.255 -27.628 10.487 1.00 90.92 C +ATOM 1035 C PRO B 133 -0.197 -27.963 10.153 1.00 90.92 C +ATOM 1036 CB PRO B 133 2.160 -27.849 9.273 1.00 90.92 C +ATOM 1037 O PRO B 133 -0.570 -29.139 10.116 1.00 90.92 O +ATOM 1038 CG PRO B 133 2.750 -29.207 9.478 1.00 90.92 C +ATOM 1039 CD PRO B 133 2.768 -29.501 10.951 1.00 90.92 C +ATOM 1040 N LYS B 134 -1.037 -26.882 9.954 1.00 86.66 N +ATOM 1041 CA LYS B 134 -2.465 -27.111 9.754 1.00 86.66 C +ATOM 1042 C LYS B 134 -2.947 -26.479 8.451 1.00 86.66 C +ATOM 1043 CB LYS B 134 -3.268 -26.558 10.932 1.00 86.66 C +ATOM 1044 O LYS B 134 -2.687 -25.303 8.192 1.00 86.66 O +ATOM 1045 CG LYS B 134 -3.007 -27.273 12.250 1.00 86.66 C +ATOM 1046 CD LYS B 134 -3.829 -26.674 13.384 1.00 86.66 C +ATOM 1047 CE LYS B 134 -3.500 -27.328 14.719 1.00 86.66 C +ATOM 1048 NZ LYS B 134 -4.255 -26.699 15.844 1.00 86.66 N +ATOM 1049 N ARG B 135 -3.637 -27.301 7.643 1.00 88.81 N +ATOM 1050 CA ARG B 135 -4.381 -26.770 6.505 1.00 88.81 C +ATOM 1051 C ARG B 135 -5.669 -26.092 6.962 1.00 88.81 C +ATOM 1052 CB ARG B 135 -4.701 -27.882 5.504 1.00 88.81 C +ATOM 1053 O ARG B 135 -6.632 -26.765 7.335 1.00 88.81 O +ATOM 1054 CG ARG B 135 -5.119 -27.376 4.133 1.00 88.81 C +ATOM 1055 CD ARG B 135 -5.094 -28.484 3.091 1.00 88.81 C +ATOM 1056 NE ARG B 135 -5.404 -27.977 1.757 1.00 88.81 N +ATOM 1057 NH1 ARG B 135 -4.794 -29.913 0.654 1.00 88.81 N +ATOM 1058 NH2 ARG B 135 -5.567 -28.109 -0.530 1.00 88.81 N +ATOM 1059 CZ ARG B 135 -5.254 -28.668 0.630 1.00 88.81 C +ATOM 1060 N LEU B 136 -5.788 -24.917 6.909 1.00 87.53 N +ATOM 1061 CA LEU B 136 -6.779 -24.102 7.603 1.00 87.53 C +ATOM 1062 C LEU B 136 -8.184 -24.402 7.094 1.00 87.53 C +ATOM 1063 CB LEU B 136 -6.467 -22.613 7.427 1.00 87.53 C +ATOM 1064 O LEU B 136 -9.124 -24.515 7.884 1.00 87.53 O +ATOM 1065 CG LEU B 136 -5.195 -22.102 8.105 1.00 87.53 C +ATOM 1066 CD1 LEU B 136 -4.926 -20.655 7.705 1.00 87.53 C +ATOM 1067 CD2 LEU B 136 -5.307 -22.231 9.620 1.00 87.53 C +ATOM 1068 N PHE B 137 -8.395 -24.688 5.824 1.00 92.95 N +ATOM 1069 CA PHE B 137 -9.743 -24.813 5.281 1.00 92.95 C +ATOM 1070 C PHE B 137 -9.981 -26.217 4.741 1.00 92.95 C +ATOM 1071 CB PHE B 137 -9.976 -23.778 4.176 1.00 92.95 C +ATOM 1072 O PHE B 137 -10.693 -26.395 3.750 1.00 92.95 O +ATOM 1073 CG PHE B 137 -9.705 -22.361 4.604 1.00 92.95 C +ATOM 1074 CD1 PHE B 137 -10.324 -21.830 5.729 1.00 92.95 C +ATOM 1075 CD2 PHE B 137 -8.832 -21.560 3.880 1.00 92.95 C +ATOM 1076 CE1 PHE B 137 -10.075 -20.518 6.127 1.00 92.95 C +ATOM 1077 CE2 PHE B 137 -8.578 -20.248 4.272 1.00 92.95 C +ATOM 1078 CZ PHE B 137 -9.202 -19.729 5.395 1.00 92.95 C +ATOM 1079 N ILE B 138 -9.373 -27.181 5.358 1.00 92.92 N +ATOM 1080 CA ILE B 138 -9.420 -28.555 4.871 1.00 92.92 C +ATOM 1081 C ILE B 138 -10.855 -29.073 4.927 1.00 92.92 C +ATOM 1082 CB ILE B 138 -8.485 -29.476 5.686 1.00 92.92 C +ATOM 1083 O ILE B 138 -11.288 -29.818 4.044 1.00 92.92 O +ATOM 1084 CG1 ILE B 138 -8.410 -30.865 5.042 1.00 92.92 C +ATOM 1085 CG2 ILE B 138 -8.956 -29.572 7.141 1.00 92.92 C +ATOM 1086 CD1 ILE B 138 -7.715 -30.883 3.688 1.00 92.92 C +ATOM 1087 N GLU B 139 -11.586 -28.645 5.958 1.00 93.13 N +ATOM 1088 CA GLU B 139 -12.968 -29.103 6.064 1.00 93.13 C +ATOM 1089 C GLU B 139 -13.821 -28.553 4.924 1.00 93.13 C +ATOM 1090 CB GLU B 139 -13.567 -28.697 7.413 1.00 93.13 C +ATOM 1091 O GLU B 139 -14.637 -29.275 4.348 1.00 93.13 O +ATOM 1092 CG GLU B 139 -12.893 -29.355 8.608 1.00 93.13 C +ATOM 1093 CD GLU B 139 -12.997 -30.872 8.596 1.00 93.13 C +ATOM 1094 OE1 GLU B 139 -12.073 -31.548 9.103 1.00 93.13 O +ATOM 1095 OE2 GLU B 139 -14.011 -31.388 8.075 1.00 93.13 O +ATOM 1096 N ASP B 140 -13.661 -27.313 4.592 1.00 94.97 N +ATOM 1097 CA ASP B 140 -14.357 -26.727 3.451 1.00 94.97 C +ATOM 1098 C ASP B 140 -13.955 -27.416 2.149 1.00 94.97 C +ATOM 1099 CB ASP B 140 -14.072 -25.226 3.362 1.00 94.97 C +ATOM 1100 O ASP B 140 -14.803 -27.688 1.296 1.00 94.97 O +ATOM 1101 CG ASP B 140 -14.776 -24.424 4.442 1.00 94.97 C +ATOM 1102 OD1 ASP B 140 -15.935 -24.746 4.783 1.00 94.97 O +ATOM 1103 OD2 ASP B 140 -14.168 -23.460 4.954 1.00 94.97 O +ATOM 1104 N GLU B 141 -12.736 -27.696 2.013 1.00 96.11 N +ATOM 1105 CA GLU B 141 -12.231 -28.356 0.812 1.00 96.11 C +ATOM 1106 C GLU B 141 -12.847 -29.742 0.644 1.00 96.11 C +ATOM 1107 CB GLU B 141 -10.705 -28.460 0.856 1.00 96.11 C +ATOM 1108 O GLU B 141 -13.181 -30.148 -0.471 1.00 96.11 O +ATOM 1109 CG GLU B 141 -9.993 -27.118 0.758 1.00 96.11 C +ATOM 1110 CD GLU B 141 -8.482 -27.230 0.881 1.00 96.11 C +ATOM 1111 OE1 GLU B 141 -7.865 -26.392 1.576 1.00 96.11 O +ATOM 1112 OE2 GLU B 141 -7.909 -28.164 0.275 1.00 96.11 O +ATOM 1113 N ILE B 142 -12.928 -30.471 1.786 1.00 96.33 N +ATOM 1114 CA ILE B 142 -13.514 -31.807 1.760 1.00 96.33 C +ATOM 1115 C ILE B 142 -14.971 -31.722 1.311 1.00 96.33 C +ATOM 1116 CB ILE B 142 -13.417 -32.494 3.141 1.00 96.33 C +ATOM 1117 O ILE B 142 -15.404 -32.480 0.440 1.00 96.33 O +ATOM 1118 CG1 ILE B 142 -11.962 -32.858 3.455 1.00 96.33 C +ATOM 1119 CG2 ILE B 142 -14.315 -33.733 3.191 1.00 96.33 C +ATOM 1120 CD1 ILE B 142 -11.727 -33.278 4.899 1.00 96.33 C +ATOM 1121 N GLU B 143 -15.677 -30.800 1.864 1.00 96.24 N +ATOM 1122 CA GLU B 143 -17.080 -30.638 1.493 1.00 96.24 C +ATOM 1123 C GLU B 143 -17.222 -30.259 0.022 1.00 96.24 C +ATOM 1124 CB GLU B 143 -17.751 -29.583 2.376 1.00 96.24 C +ATOM 1125 O GLU B 143 -18.065 -30.810 -0.688 1.00 96.24 O +ATOM 1126 CG GLU B 143 -19.264 -29.529 2.227 1.00 96.24 C +ATOM 1127 CD GLU B 143 -19.932 -28.594 3.223 1.00 96.24 C +ATOM 1128 OE1 GLU B 143 -21.167 -28.404 3.143 1.00 96.24 O +ATOM 1129 OE2 GLU B 143 -19.214 -28.046 4.089 1.00 96.24 O +ATOM 1130 N ALA B 144 -16.441 -29.405 -0.426 1.00 96.25 N +ATOM 1131 CA ALA B 144 -16.457 -29.011 -1.832 1.00 96.25 C +ATOM 1132 C ALA B 144 -16.124 -30.194 -2.737 1.00 96.25 C +ATOM 1133 CB ALA B 144 -15.476 -27.867 -2.076 1.00 96.25 C +ATOM 1134 O ALA B 144 -16.788 -30.412 -3.753 1.00 96.25 O +ATOM 1135 N ALA B 145 -15.119 -30.925 -2.354 1.00 96.97 N +ATOM 1136 CA ALA B 145 -14.713 -32.089 -3.138 1.00 96.97 C +ATOM 1137 C ALA B 145 -15.828 -33.129 -3.191 1.00 96.97 C +ATOM 1138 CB ALA B 145 -13.442 -32.704 -2.559 1.00 96.97 C +ATOM 1139 O ALA B 145 -16.025 -33.786 -4.216 1.00 96.97 O +ATOM 1140 N ARG B 146 -16.534 -33.309 -2.080 1.00 97.62 N +ATOM 1141 CA ARG B 146 -17.665 -34.230 -2.045 1.00 97.62 C +ATOM 1142 C ARG B 146 -18.749 -33.805 -3.030 1.00 97.62 C +ATOM 1143 CB ARG B 146 -18.245 -34.317 -0.632 1.00 97.62 C +ATOM 1144 O ARG B 146 -19.278 -34.632 -3.775 1.00 97.62 O +ATOM 1145 CG ARG B 146 -17.435 -35.189 0.314 1.00 97.62 C +ATOM 1146 CD ARG B 146 -18.031 -35.205 1.715 1.00 97.62 C +ATOM 1147 NE ARG B 146 -17.284 -36.086 2.608 1.00 97.62 N +ATOM 1148 NH1 ARG B 146 -18.329 -35.360 4.536 1.00 97.62 N +ATOM 1149 NH2 ARG B 146 -16.710 -36.980 4.645 1.00 97.62 N +ATOM 1150 CZ ARG B 146 -17.443 -36.140 3.928 1.00 97.62 C +ATOM 1151 N GLU B 147 -19.031 -32.560 -3.010 1.00 96.13 N +ATOM 1152 CA GLU B 147 -20.040 -32.042 -3.929 1.00 96.13 C +ATOM 1153 C GLU B 147 -19.597 -32.203 -5.381 1.00 96.13 C +ATOM 1154 CB GLU B 147 -20.336 -30.570 -3.630 1.00 96.13 C +ATOM 1155 O GLU B 147 -20.395 -32.582 -6.240 1.00 96.13 O +ATOM 1156 CG GLU B 147 -21.093 -30.348 -2.329 1.00 96.13 C +ATOM 1157 CD GLU B 147 -21.364 -28.881 -2.035 1.00 96.13 C +ATOM 1158 OE1 GLU B 147 -21.924 -28.570 -0.959 1.00 96.13 O +ATOM 1159 OE2 GLU B 147 -21.015 -28.035 -2.889 1.00 96.13 O +ATOM 1160 N ASP B 148 -18.375 -31.973 -5.627 1.00 95.80 N +ATOM 1161 CA ASP B 148 -17.839 -32.145 -6.973 1.00 95.80 C +ATOM 1162 C ASP B 148 -17.914 -33.606 -7.412 1.00 95.80 C +ATOM 1163 CB ASP B 148 -16.393 -31.649 -7.042 1.00 95.80 C +ATOM 1164 O ASP B 148 -18.289 -33.899 -8.549 1.00 95.80 O +ATOM 1165 CG ASP B 148 -16.282 -30.136 -6.986 1.00 95.80 C +ATOM 1166 OD1 ASP B 148 -17.317 -29.444 -7.092 1.00 95.80 O +ATOM 1167 OD2 ASP B 148 -15.148 -29.631 -6.838 1.00 95.80 O +ATOM 1168 N ALA B 149 -17.518 -34.507 -6.486 1.00 96.23 N +ATOM 1169 CA ALA B 149 -17.565 -35.932 -6.801 1.00 96.23 C +ATOM 1170 C ALA B 149 -18.988 -36.376 -7.127 1.00 96.23 C +ATOM 1171 CB ALA B 149 -17.008 -36.752 -5.639 1.00 96.23 C +ATOM 1172 O ALA B 149 -19.213 -37.093 -8.105 1.00 96.23 O +ATOM 1173 N ARG B 150 -19.912 -35.879 -6.364 1.00 96.58 N +ATOM 1174 CA ARG B 150 -21.310 -36.211 -6.616 1.00 96.58 C +ATOM 1175 C ARG B 150 -21.756 -35.699 -7.982 1.00 96.58 C +ATOM 1176 CB ARG B 150 -22.207 -35.631 -5.521 1.00 96.58 C +ATOM 1177 O ARG B 150 -22.420 -36.416 -8.733 1.00 96.58 O +ATOM 1178 CG ARG B 150 -22.125 -36.377 -4.198 1.00 96.58 C +ATOM 1179 CD ARG B 150 -23.004 -35.736 -3.133 1.00 96.58 C +ATOM 1180 NE ARG B 150 -22.768 -36.321 -1.816 1.00 96.58 N +ATOM 1181 NH1 ARG B 150 -23.672 -34.550 -0.640 1.00 96.58 N +ATOM 1182 NH2 ARG B 150 -22.831 -36.366 0.479 1.00 96.58 N +ATOM 1183 CZ ARG B 150 -23.091 -35.744 -0.662 1.00 96.58 C +ATOM 1184 N ALA B 151 -21.382 -34.526 -8.312 1.00 95.20 N +ATOM 1185 CA ALA B 151 -21.771 -33.918 -9.582 1.00 95.20 C +ATOM 1186 C ALA B 151 -21.137 -34.653 -10.759 1.00 95.20 C +ATOM 1187 CB ALA B 151 -21.379 -32.442 -9.607 1.00 95.20 C +ATOM 1188 O ALA B 151 -21.803 -34.925 -11.761 1.00 95.20 O +ATOM 1189 N ILE B 152 -19.870 -34.978 -10.685 1.00 95.93 N +ATOM 1190 CA ILE B 152 -19.151 -35.668 -11.750 1.00 95.93 C +ATOM 1191 C ILE B 152 -19.747 -37.058 -11.959 1.00 95.93 C +ATOM 1192 CB ILE B 152 -17.641 -35.773 -11.437 1.00 95.93 C +ATOM 1193 O ILE B 152 -19.954 -37.487 -13.096 1.00 95.93 O +ATOM 1194 CG1 ILE B 152 -16.983 -34.390 -11.507 1.00 95.93 C +ATOM 1195 CG2 ILE B 152 -16.958 -36.754 -12.394 1.00 95.93 C +ATOM 1196 CD1 ILE B 152 -15.573 -34.346 -10.934 1.00 95.93 C +ATOM 1197 N CYS B 153 -20.084 -37.802 -10.822 1.00 95.18 N +ATOM 1198 CA CYS B 153 -20.669 -39.134 -10.924 1.00 95.18 C +ATOM 1199 C CYS B 153 -22.061 -39.073 -11.540 1.00 95.18 C +ATOM 1200 CB CYS B 153 -20.739 -39.795 -9.548 1.00 95.18 C +ATOM 1201 O CYS B 153 -22.441 -39.951 -12.316 1.00 95.18 O +ATOM 1202 SG CYS B 153 -19.123 -40.207 -8.854 1.00 95.18 S +ATOM 1203 N ALA B 154 -22.794 -38.047 -11.276 1.00 96.36 N +ATOM 1204 CA ALA B 154 -24.119 -37.869 -11.863 1.00 96.36 C +ATOM 1205 C ALA B 154 -24.023 -37.599 -13.362 1.00 96.36 C +ATOM 1206 CB ALA B 154 -24.862 -36.731 -11.167 1.00 96.36 C +ATOM 1207 O ALA B 154 -24.828 -38.110 -14.144 1.00 96.36 O +ATOM 1208 N ALA B 155 -23.047 -36.865 -13.770 1.00 94.84 N +ATOM 1209 CA ALA B 155 -22.904 -36.462 -15.167 1.00 94.84 C +ATOM 1210 C ALA B 155 -22.259 -37.570 -15.994 1.00 94.84 C +ATOM 1211 CB ALA B 155 -22.082 -35.179 -15.268 1.00 94.84 C +ATOM 1212 O ALA B 155 -22.650 -37.805 -17.140 1.00 94.84 O +ATOM 1213 N LYS B 156 -21.279 -38.271 -15.435 1.00 95.47 N +ATOM 1214 CA LYS B 156 -20.476 -39.192 -16.234 1.00 95.47 C +ATOM 1215 C LYS B 156 -20.791 -40.643 -15.883 1.00 95.47 C +ATOM 1216 CB LYS B 156 -18.985 -38.916 -16.034 1.00 95.47 C +ATOM 1217 O LYS B 156 -20.338 -41.565 -16.565 1.00 95.47 O +ATOM 1218 CG LYS B 156 -18.543 -37.537 -16.500 1.00 95.47 C +ATOM 1219 CD LYS B 156 -17.039 -37.482 -16.737 1.00 95.47 C +ATOM 1220 CE LYS B 156 -16.611 -36.137 -17.309 1.00 95.47 C +ATOM 1221 NZ LYS B 156 -15.142 -36.092 -17.578 1.00 95.47 N +ATOM 1222 N GLY B 157 -21.540 -40.885 -14.839 1.00 94.83 N +ATOM 1223 CA GLY B 157 -21.904 -42.224 -14.405 1.00 94.83 C +ATOM 1224 C GLY B 157 -21.163 -42.670 -13.159 1.00 94.83 C +ATOM 1225 O GLY B 157 -19.995 -42.325 -12.968 1.00 94.83 O +ATOM 1226 N GLU B 158 -21.739 -43.433 -12.245 1.00 92.86 N +ATOM 1227 CA GLU B 158 -21.216 -43.859 -10.950 1.00 92.86 C +ATOM 1228 C GLU B 158 -20.022 -44.794 -11.118 1.00 92.86 C +ATOM 1229 CB GLU B 158 -22.310 -44.546 -10.128 1.00 92.86 C +ATOM 1230 O GLU B 158 -19.154 -44.865 -10.245 1.00 92.86 O +ATOM 1231 CG GLU B 158 -23.367 -43.591 -9.593 1.00 92.86 C +ATOM 1232 CD GLU B 158 -24.347 -44.255 -8.639 1.00 92.86 C +ATOM 1233 OE1 GLU B 158 -25.190 -43.546 -8.044 1.00 92.86 O +ATOM 1234 OE2 GLU B 158 -24.271 -45.495 -8.485 1.00 92.86 O +ATOM 1235 N THR B 159 -19.972 -45.528 -12.286 1.00 93.44 N +ATOM 1236 CA THR B 159 -18.892 -46.490 -12.476 1.00 93.44 C +ATOM 1237 C THR B 159 -17.826 -45.929 -13.413 1.00 93.44 C +ATOM 1238 CB THR B 159 -19.423 -47.822 -13.039 1.00 93.44 C +ATOM 1239 O THR B 159 -16.912 -46.647 -13.824 1.00 93.44 O +ATOM 1240 CG2 THR B 159 -20.429 -48.459 -12.087 1.00 93.44 C +ATOM 1241 OG1 THR B 159 -20.060 -47.581 -14.299 1.00 93.44 O +ATOM 1242 N SER B 160 -17.889 -44.662 -13.793 1.00 94.78 N +ATOM 1243 CA SER B 160 -16.935 -44.040 -14.705 1.00 94.78 C +ATOM 1244 C SER B 160 -15.594 -43.796 -14.021 1.00 94.78 C +ATOM 1245 CB SER B 160 -17.489 -42.720 -15.243 1.00 94.78 C +ATOM 1246 O SER B 160 -15.537 -43.611 -12.804 1.00 94.78 O +ATOM 1247 OG SER B 160 -17.434 -41.710 -14.251 1.00 94.78 O +ATOM 1248 N PRO B 161 -14.441 -43.891 -14.819 1.00 96.06 N +ATOM 1249 CA PRO B 161 -13.129 -43.562 -14.256 1.00 96.06 C +ATOM 1250 C PRO B 161 -13.072 -42.148 -13.680 1.00 96.06 C +ATOM 1251 CB PRO B 161 -12.186 -43.702 -15.453 1.00 96.06 C +ATOM 1252 O PRO B 161 -12.379 -41.909 -12.689 1.00 96.06 O +ATOM 1253 CG PRO B 161 -12.933 -44.553 -16.430 1.00 96.06 C +ATOM 1254 CD PRO B 161 -14.404 -44.400 -16.168 1.00 96.06 C +ATOM 1255 N ASP B 162 -13.785 -41.267 -14.227 1.00 95.08 N +ATOM 1256 CA ASP B 162 -13.809 -39.886 -13.755 1.00 95.08 C +ATOM 1257 C ASP B 162 -14.445 -39.791 -12.370 1.00 95.08 C +ATOM 1258 CB ASP B 162 -14.564 -38.994 -14.743 1.00 95.08 C +ATOM 1259 O ASP B 162 -13.973 -39.038 -11.515 1.00 95.08 O +ATOM 1260 CG ASP B 162 -13.851 -38.851 -16.076 1.00 95.08 C +ATOM 1261 OD1 ASP B 162 -12.624 -39.077 -16.139 1.00 95.08 O +ATOM 1262 OD2 ASP B 162 -14.523 -38.506 -17.072 1.00 95.08 O +ATOM 1263 N CYS B 163 -15.512 -40.522 -12.173 1.00 93.27 N +ATOM 1264 CA CYS B 163 -16.175 -40.561 -10.874 1.00 93.27 C +ATOM 1265 C CYS B 163 -15.248 -41.128 -9.806 1.00 93.27 C +ATOM 1266 CB CYS B 163 -17.453 -41.396 -10.949 1.00 93.27 C +ATOM 1267 O CYS B 163 -15.105 -40.547 -8.729 1.00 93.27 O +ATOM 1268 SG CYS B 163 -18.377 -41.453 -9.399 1.00 93.27 S +ATOM 1269 N ALA B 164 -14.566 -42.228 -10.171 1.00 95.64 N +ATOM 1270 CA ALA B 164 -13.635 -42.847 -9.231 1.00 95.64 C +ATOM 1271 C ALA B 164 -12.516 -41.882 -8.852 1.00 95.64 C +ATOM 1272 CB ALA B 164 -13.051 -44.127 -9.825 1.00 95.64 C +ATOM 1273 O ALA B 164 -12.154 -41.771 -7.678 1.00 95.64 O +ATOM 1274 N ALA B 165 -11.998 -41.188 -9.807 1.00 96.29 N +ATOM 1275 CA ALA B 165 -10.930 -40.223 -9.562 1.00 96.29 C +ATOM 1276 C ALA B 165 -11.404 -39.100 -8.644 1.00 96.29 C +ATOM 1277 CB ALA B 165 -10.420 -39.647 -10.881 1.00 96.29 C +ATOM 1278 O ALA B 165 -10.658 -38.643 -7.775 1.00 96.29 O +ATOM 1279 N ALA B 166 -12.606 -38.621 -8.811 1.00 95.88 N +ATOM 1280 CA ALA B 166 -13.164 -37.551 -7.989 1.00 95.88 C +ATOM 1281 C ALA B 166 -13.270 -37.980 -6.528 1.00 95.88 C +ATOM 1282 CB ALA B 166 -14.534 -37.133 -8.518 1.00 95.88 C +ATOM 1283 O ALA B 166 -12.945 -37.208 -5.623 1.00 95.88 O +ATOM 1284 N TRP B 167 -13.691 -39.180 -6.313 1.00 96.41 N +ATOM 1285 CA TRP B 167 -13.821 -39.664 -4.943 1.00 96.41 C +ATOM 1286 C TRP B 167 -12.452 -39.933 -4.328 1.00 96.41 C +ATOM 1287 CB TRP B 167 -14.672 -40.937 -4.901 1.00 96.41 C +ATOM 1288 O TRP B 167 -12.277 -39.821 -3.112 1.00 96.41 O +ATOM 1289 CG TRP B 167 -16.149 -40.681 -4.896 1.00 96.41 C +ATOM 1290 CD1 TRP B 167 -17.032 -40.926 -5.911 1.00 96.41 C +ATOM 1291 CD2 TRP B 167 -16.916 -40.126 -3.823 1.00 96.41 C +ATOM 1292 CE2 TRP B 167 -18.259 -40.063 -4.258 1.00 96.41 C +ATOM 1293 CE3 TRP B 167 -16.599 -39.675 -2.535 1.00 96.41 C +ATOM 1294 NE1 TRP B 167 -18.302 -40.556 -5.534 1.00 96.41 N +ATOM 1295 CH2 TRP B 167 -18.945 -39.133 -2.193 1.00 96.41 C +ATOM 1296 CZ2 TRP B 167 -19.283 -39.566 -3.448 1.00 96.41 C +ATOM 1297 CZ3 TRP B 167 -17.620 -39.182 -1.731 1.00 96.41 C +ATOM 1298 N ASP B 168 -11.522 -40.259 -5.163 1.00 96.50 N +ATOM 1299 CA ASP B 168 -10.155 -40.400 -4.671 1.00 96.50 C +ATOM 1300 C ASP B 168 -9.652 -39.093 -4.063 1.00 96.50 C +ATOM 1301 CB ASP B 168 -9.223 -40.849 -5.799 1.00 96.50 C +ATOM 1302 O ASP B 168 -8.950 -39.104 -3.050 1.00 96.50 O +ATOM 1303 CG ASP B 168 -9.403 -42.310 -6.171 1.00 96.50 C +ATOM 1304 OD1 ASP B 168 -10.096 -43.046 -5.436 1.00 96.50 O +ATOM 1305 OD2 ASP B 168 -8.844 -42.730 -7.207 1.00 96.50 O +ATOM 1306 N VAL B 169 -9.989 -38.027 -4.686 1.00 96.59 N +ATOM 1307 CA VAL B 169 -9.603 -36.719 -4.167 1.00 96.59 C +ATOM 1308 C VAL B 169 -10.212 -36.512 -2.782 1.00 96.59 C +ATOM 1309 CB VAL B 169 -10.039 -35.580 -5.116 1.00 96.59 C +ATOM 1310 O VAL B 169 -9.529 -36.065 -1.857 1.00 96.59 O +ATOM 1311 CG1 VAL B 169 -9.786 -34.217 -4.476 1.00 96.59 C +ATOM 1312 CG2 VAL B 169 -9.307 -35.691 -6.452 1.00 96.59 C +ATOM 1313 N VAL B 170 -11.440 -36.832 -2.594 1.00 96.64 N +ATOM 1314 CA VAL B 170 -12.122 -36.719 -1.309 1.00 96.64 C +ATOM 1315 C VAL B 170 -11.397 -37.565 -0.264 1.00 96.64 C +ATOM 1316 CB VAL B 170 -13.602 -37.151 -1.411 1.00 96.64 C +ATOM 1317 O VAL B 170 -11.117 -37.092 0.841 1.00 96.64 O +ATOM 1318 CG1 VAL B 170 -14.255 -37.173 -0.030 1.00 96.64 C +ATOM 1319 CG2 VAL B 170 -14.365 -36.220 -2.351 1.00 96.64 C +ATOM 1320 N GLU B 171 -11.089 -38.765 -0.658 1.00 96.26 N +ATOM 1321 CA GLU B 171 -10.430 -39.685 0.263 1.00 96.26 C +ATOM 1322 C GLU B 171 -9.050 -39.171 0.663 1.00 96.26 C +ATOM 1323 CB GLU B 171 -10.311 -41.079 -0.360 1.00 96.26 C +ATOM 1324 O GLU B 171 -8.655 -39.277 1.826 1.00 96.26 O +ATOM 1325 CG GLU B 171 -11.629 -41.837 -0.424 1.00 96.26 C +ATOM 1326 CD GLU B 171 -11.490 -43.231 -1.015 1.00 96.26 C +ATOM 1327 OE1 GLU B 171 -12.493 -43.981 -1.042 1.00 96.26 O +ATOM 1328 OE2 GLU B 171 -10.370 -43.577 -1.452 1.00 96.26 O +ATOM 1329 N GLU B 172 -8.419 -38.625 -0.275 1.00 95.45 N +ATOM 1330 CA GLU B 172 -7.101 -38.070 0.019 1.00 95.45 C +ATOM 1331 C GLU B 172 -7.198 -36.910 1.005 1.00 95.45 C +ATOM 1332 CB GLU B 172 -6.412 -37.610 -1.268 1.00 95.45 C +ATOM 1333 O GLU B 172 -6.417 -36.829 1.955 1.00 95.45 O +ATOM 1334 CG GLU B 172 -4.969 -37.169 -1.070 1.00 95.45 C +ATOM 1335 CD GLU B 172 -4.270 -36.800 -2.368 1.00 95.45 C +ATOM 1336 OE1 GLU B 172 -3.080 -36.414 -2.329 1.00 95.45 O +ATOM 1337 OE2 GLU B 172 -4.918 -36.896 -3.434 1.00 95.45 O +ATOM 1338 N LEU B 173 -8.120 -36.070 0.810 1.00 95.31 N +ATOM 1339 CA LEU B 173 -8.322 -34.934 1.703 1.00 95.31 C +ATOM 1340 C LEU B 173 -8.744 -35.402 3.091 1.00 95.31 C +ATOM 1341 CB LEU B 173 -9.375 -33.982 1.130 1.00 95.31 C +ATOM 1342 O LEU B 173 -8.275 -34.871 4.100 1.00 95.31 O +ATOM 1343 CG LEU B 173 -8.950 -33.150 -0.081 1.00 95.31 C +ATOM 1344 CD1 LEU B 173 -10.159 -32.451 -0.695 1.00 95.31 C +ATOM 1345 CD2 LEU B 173 -7.883 -32.135 0.315 1.00 95.31 C +ATOM 1346 N GLN B 174 -9.606 -36.358 3.147 1.00 95.11 N +ATOM 1347 CA GLN B 174 -10.047 -36.907 4.425 1.00 95.11 C +ATOM 1348 C GLN B 174 -8.888 -37.559 5.173 1.00 95.11 C +ATOM 1349 CB GLN B 174 -11.173 -37.921 4.214 1.00 95.11 C +ATOM 1350 O GLN B 174 -8.789 -37.445 6.396 1.00 95.11 O +ATOM 1351 CG GLN B 174 -12.518 -37.287 3.885 1.00 95.11 C +ATOM 1352 CD GLN B 174 -13.599 -38.315 3.609 1.00 95.11 C +ATOM 1353 NE2 GLN B 174 -14.797 -38.070 4.129 1.00 95.11 N +ATOM 1354 OE1 GLN B 174 -13.360 -39.321 2.932 1.00 95.11 O +ATOM 1355 N ALA B 175 -8.069 -38.211 4.395 1.00 92.96 N +ATOM 1356 CA ALA B 175 -6.885 -38.812 5.005 1.00 92.96 C +ATOM 1357 C ALA B 175 -5.980 -37.746 5.615 1.00 92.96 C +ATOM 1358 CB ALA B 175 -6.115 -39.633 3.974 1.00 92.96 C +ATOM 1359 O ALA B 175 -5.483 -37.909 6.731 1.00 92.96 O +ATOM 1360 N GLU B 176 -5.846 -36.727 4.904 1.00 90.82 N +ATOM 1361 CA GLU B 176 -5.031 -35.628 5.413 1.00 90.82 C +ATOM 1362 C GLU B 176 -5.658 -35.006 6.658 1.00 90.82 C +ATOM 1363 CB GLU B 176 -4.834 -34.560 4.334 1.00 90.82 C +ATOM 1364 O GLU B 176 -4.959 -34.707 7.628 1.00 90.82 O +ATOM 1365 CG GLU B 176 -3.930 -33.413 4.762 1.00 90.82 C +ATOM 1366 CD GLU B 176 -3.069 -32.873 3.631 1.00 90.82 C +ATOM 1367 OE1 GLU B 176 -2.236 -31.973 3.879 1.00 90.82 O +ATOM 1368 OE2 GLU B 176 -3.230 -33.354 2.487 1.00 90.82 O +ATOM 1369 N ALA B 177 -6.916 -34.810 6.644 1.00 90.06 N +ATOM 1370 CA ALA B 177 -7.624 -34.259 7.797 1.00 90.06 C +ATOM 1371 C ALA B 177 -7.473 -35.162 9.017 1.00 90.06 C +ATOM 1372 CB ALA B 177 -9.102 -34.058 7.467 1.00 90.06 C +ATOM 1373 O ALA B 177 -7.280 -34.678 10.135 1.00 90.06 O +ATOM 1374 N SER B 178 -7.550 -36.455 8.783 1.00 88.13 N +ATOM 1375 CA SER B 178 -7.392 -37.416 9.869 1.00 88.13 C +ATOM 1376 C SER B 178 -5.974 -37.389 10.430 1.00 88.13 C +ATOM 1377 CB SER B 178 -7.734 -38.828 9.391 1.00 88.13 C +ATOM 1378 O SER B 178 -5.779 -37.460 11.645 1.00 88.13 O +ATOM 1379 OG SER B 178 -9.091 -38.908 8.990 1.00 88.13 O +ATOM 1380 N HIS B 179 -5.056 -37.294 9.488 1.00 85.92 N +ATOM 1381 CA HIS B 179 -3.664 -37.200 9.915 1.00 85.92 C +ATOM 1382 C HIS B 179 -3.436 -35.965 10.780 1.00 85.92 C +ATOM 1383 CB HIS B 179 -2.733 -37.170 8.702 1.00 85.92 C +ATOM 1384 O HIS B 179 -2.746 -36.035 11.799 1.00 85.92 O +ATOM 1385 CG HIS B 179 -1.281 -37.150 9.060 1.00 85.92 C +ATOM 1386 CD2 HIS B 179 -0.415 -38.158 9.319 1.00 85.92 C +ATOM 1387 ND1 HIS B 179 -0.563 -35.981 9.191 1.00 85.92 N +ATOM 1388 CE1 HIS B 179 0.686 -36.273 9.514 1.00 85.92 C +ATOM 1389 NE2 HIS B 179 0.802 -37.587 9.598 1.00 85.92 N +ATOM 1390 N GLN B 180 -4.045 -34.937 10.439 1.00 81.24 N +ATOM 1391 CA GLN B 180 -3.920 -33.696 11.197 1.00 81.24 C +ATOM 1392 C GLN B 180 -4.535 -33.836 12.587 1.00 81.24 C +ATOM 1393 CB GLN B 180 -4.578 -32.538 10.446 1.00 81.24 C +ATOM 1394 O GLN B 180 -3.973 -33.351 13.572 1.00 81.24 O +ATOM 1395 CG GLN B 180 -3.784 -32.058 9.238 1.00 81.24 C +ATOM 1396 CD GLN B 180 -4.314 -30.757 8.667 1.00 81.24 C +ATOM 1397 NE2 GLN B 180 -4.310 -30.646 7.343 1.00 81.24 N +ATOM 1398 OE1 GLN B 180 -4.726 -29.859 9.409 1.00 81.24 O +ATOM 1399 N ARG B 181 -5.641 -34.543 12.638 1.00 77.27 N +ATOM 1400 CA ARG B 181 -6.315 -34.757 13.915 1.00 77.27 C +ATOM 1401 C ARG B 181 -5.520 -35.711 14.800 1.00 77.27 C +ATOM 1402 CB ARG B 181 -7.727 -35.302 13.693 1.00 77.27 C +ATOM 1403 O ARG B 181 -5.452 -35.525 16.017 1.00 77.27 O +ATOM 1404 CG ARG B 181 -8.699 -34.282 13.120 1.00 77.27 C +ATOM 1405 CD ARG B 181 -10.061 -34.899 12.835 1.00 77.27 C +ATOM 1406 NE ARG B 181 -10.901 -34.005 12.042 1.00 77.27 N +ATOM 1407 NH1 ARG B 181 -12.297 -35.673 11.264 1.00 77.27 N +ATOM 1408 NH2 ARG B 181 -12.641 -33.497 10.632 1.00 77.27 N +ATOM 1409 CZ ARG B 181 -11.945 -34.394 11.314 1.00 77.27 C +ATOM 1410 N ALA B 182 -4.914 -36.702 14.198 1.00 69.55 N +ATOM 1411 CA ALA B 182 -4.137 -37.696 14.935 1.00 69.55 C +ATOM 1412 C ALA B 182 -2.881 -37.073 15.538 1.00 69.55 C +ATOM 1413 CB ALA B 182 -3.764 -38.862 14.023 1.00 69.55 C +ATOM 1414 O ALA B 182 -2.519 -37.371 16.678 1.00 69.55 O +ATOM 1415 N LYS B 183 -2.164 -36.323 14.777 1.00 64.59 N +ATOM 1416 CA LYS B 183 -0.965 -35.656 15.274 1.00 64.59 C +ATOM 1417 C LYS B 183 -1.291 -34.746 16.454 1.00 64.59 C +ATOM 1418 CB LYS B 183 -0.298 -34.849 14.159 1.00 64.59 C +ATOM 1419 O LYS B 183 -0.485 -34.602 17.376 1.00 64.59 O +ATOM 1420 CG LYS B 183 0.619 -35.670 13.264 1.00 64.59 C +ATOM 1421 CD LYS B 183 1.413 -34.783 12.314 1.00 64.59 C +ATOM 1422 CE LYS B 183 2.351 -35.602 11.437 1.00 64.59 C +ATOM 1423 NZ LYS B 183 3.110 -34.740 10.482 1.00 64.59 N +ATOM 1424 N LYS B 184 -2.461 -34.254 16.520 1.00 59.43 N +ATOM 1425 CA LYS B 184 -2.886 -33.380 17.609 1.00 59.43 C +ATOM 1426 C LYS B 184 -3.199 -34.184 18.868 1.00 59.43 C +ATOM 1427 CB LYS B 184 -4.108 -32.560 17.194 1.00 59.43 C +ATOM 1428 O LYS B 184 -2.915 -33.738 19.982 1.00 59.43 O +ATOM 1429 CG LYS B 184 -3.774 -31.324 16.372 1.00 59.43 C +ATOM 1430 CD LYS B 184 -5.017 -30.494 16.079 1.00 59.43 C +ATOM 1431 CE LYS B 184 -4.690 -29.279 15.223 1.00 59.43 C +ATOM 1432 NZ LYS B 184 -5.912 -28.481 14.904 1.00 59.43 N +ATOM 1433 N GLN B 185 -3.837 -35.402 18.692 1.00 55.76 N +ATOM 1434 CA GLN B 185 -4.172 -36.273 19.814 1.00 55.76 C +ATOM 1435 C GLN B 185 -2.918 -36.893 20.423 1.00 55.76 C +ATOM 1436 CB GLN B 185 -5.139 -37.372 19.372 1.00 55.76 C +ATOM 1437 O GLN B 185 -2.839 -37.079 21.639 1.00 55.76 O +ATOM 1438 CG GLN B 185 -6.598 -36.936 19.352 1.00 55.76 C +ATOM 1439 CD GLN B 185 -7.528 -38.021 18.844 1.00 55.76 C +ATOM 1440 NE2 GLN B 185 -8.828 -37.750 18.873 1.00 55.76 N +ATOM 1441 OE1 GLN B 185 -7.082 -39.095 18.426 1.00 55.76 O +ATOM 1442 N GLY B 186 -1.870 -37.216 19.637 1.00 49.70 N +ATOM 1443 CA GLY B 186 -0.647 -37.820 20.141 1.00 49.70 C +ATOM 1444 C GLY B 186 0.178 -36.873 20.993 1.00 49.70 C +ATOM 1445 O GLY B 186 0.790 -37.290 21.979 1.00 49.70 O +ATOM 1446 N SER B 187 0.267 -35.631 20.672 1.00 50.44 N +ATOM 1447 CA SER B 187 0.985 -34.660 21.491 1.00 50.44 C +ATOM 1448 C SER B 187 0.293 -34.450 22.834 1.00 50.44 C +ATOM 1449 CB SER B 187 1.107 -33.324 20.757 1.00 50.44 C +ATOM 1450 O SER B 187 0.952 -34.372 23.873 1.00 50.44 O +ATOM 1451 OG SER B 187 0.278 -32.343 21.356 1.00 50.44 O +ATOM 1452 N ASN B 188 -1.013 -34.448 22.894 1.00 48.06 N +ATOM 1453 CA ASN B 188 -1.754 -34.352 24.147 1.00 48.06 C +ATOM 1454 C ASN B 188 -1.578 -35.606 25.000 1.00 48.06 C +ATOM 1455 CB ASN B 188 -3.238 -34.099 23.875 1.00 48.06 C +ATOM 1456 O ASN B 188 -1.458 -35.518 26.223 1.00 48.06 O +ATOM 1457 CG ASN B 188 -3.659 -32.681 24.207 1.00 48.06 C +ATOM 1458 ND2 ASN B 188 -4.894 -32.334 23.865 1.00 48.06 N +ATOM 1459 OD1 ASN B 188 -2.881 -31.903 24.765 1.00 48.06 O +ATOM 1460 N SER B 189 -1.523 -36.774 24.377 1.00 50.24 N +ATOM 1461 CA SER B 189 -1.277 -38.006 25.119 1.00 50.24 C +ATOM 1462 C SER B 189 0.124 -38.018 25.722 1.00 50.24 C +ATOM 1463 CB SER B 189 -1.461 -39.224 24.212 1.00 50.24 C +ATOM 1464 O SER B 189 0.312 -38.456 26.859 1.00 50.24 O +ATOM 1465 OG SER B 189 -0.266 -39.983 24.141 1.00 50.24 O +ATOM 1466 N PHE B 190 1.099 -37.500 25.052 1.00 50.43 N +ATOM 1467 CA PHE B 190 2.448 -37.414 25.597 1.00 50.43 C +ATOM 1468 C PHE B 190 2.519 -36.369 26.704 1.00 50.43 C +ATOM 1469 CB PHE B 190 3.455 -37.079 24.493 1.00 50.43 C +ATOM 1470 O PHE B 190 3.114 -36.611 27.756 1.00 50.43 O +ATOM 1471 CG PHE B 190 4.885 -37.061 24.961 1.00 50.43 C +ATOM 1472 CD1 PHE B 190 5.558 -35.858 25.137 1.00 50.43 C +ATOM 1473 CD2 PHE B 190 5.558 -38.247 25.225 1.00 50.43 C +ATOM 1474 CE1 PHE B 190 6.882 -35.838 25.570 1.00 50.43 C +ATOM 1475 CE2 PHE B 190 6.880 -38.235 25.658 1.00 50.43 C +ATOM 1476 CZ PHE B 190 7.541 -37.029 25.829 1.00 50.43 C +ATOM 1477 N GLN B 191 1.897 -35.210 26.560 1.00 51.22 N +ATOM 1478 CA GLN B 191 1.815 -34.206 27.615 1.00 51.22 C +ATOM 1479 C GLN B 191 1.014 -34.723 28.806 1.00 51.22 C +ATOM 1480 CB GLN B 191 1.190 -32.915 27.083 1.00 51.22 C +ATOM 1481 O GLN B 191 1.420 -34.550 29.957 1.00 51.22 O +ATOM 1482 CG GLN B 191 1.663 -31.660 27.803 1.00 51.22 C +ATOM 1483 CD GLN B 191 1.468 -30.401 26.979 1.00 51.22 C +ATOM 1484 NE2 GLN B 191 1.961 -29.277 27.487 1.00 51.22 N +ATOM 1485 OE1 GLN B 191 0.879 -30.439 25.894 1.00 51.22 O +ATOM 1486 N ALA B 192 -0.133 -35.340 28.533 1.00 54.63 N +ATOM 1487 CA ALA B 192 -0.896 -35.986 29.598 1.00 54.63 C +ATOM 1488 C ALA B 192 -0.088 -37.106 30.249 1.00 54.63 C +ATOM 1489 CB ALA B 192 -2.213 -36.533 29.053 1.00 54.63 C +ATOM 1490 O ALA B 192 -0.106 -37.262 31.472 1.00 54.63 O +ATOM 1491 N TYR B 193 0.583 -37.883 29.398 1.00 52.50 N +ATOM 1492 CA TYR B 193 1.492 -38.902 29.912 1.00 52.50 C +ATOM 1493 C TYR B 193 2.606 -38.272 30.739 1.00 52.50 C +ATOM 1494 CB TYR B 193 2.092 -39.716 28.761 1.00 52.50 C +ATOM 1495 O TYR B 193 2.897 -38.727 31.848 1.00 52.50 O +ATOM 1496 CG TYR B 193 3.091 -40.755 29.210 1.00 52.50 C +ATOM 1497 CD1 TYR B 193 4.460 -40.534 29.081 1.00 52.50 C +ATOM 1498 CD2 TYR B 193 2.667 -41.959 29.762 1.00 52.50 C +ATOM 1499 CE1 TYR B 193 5.384 -41.490 29.491 1.00 52.50 C +ATOM 1500 CE2 TYR B 193 3.583 -42.922 30.175 1.00 52.50 C +ATOM 1501 OH TYR B 193 5.847 -43.627 30.444 1.00 52.50 O +ATOM 1502 CZ TYR B 193 4.937 -42.678 30.037 1.00 52.50 C +ATOM 1503 N CYS B 194 3.174 -37.209 30.226 1.00 57.39 N +ATOM 1504 CA CYS B 194 4.242 -36.554 30.974 1.00 57.39 C +ATOM 1505 C CYS B 194 3.689 -35.833 32.197 1.00 57.39 C +ATOM 1506 CB CYS B 194 4.992 -35.565 30.083 1.00 57.39 C +ATOM 1507 O CYS B 194 4.369 -35.723 33.219 1.00 57.39 O +ATOM 1508 SG CYS B 194 6.159 -36.347 28.948 1.00 57.39 S +ATOM 1509 N GLU B 195 2.491 -35.226 32.195 1.00 59.70 N +ATOM 1510 CA GLU B 195 1.815 -34.678 33.367 1.00 59.70 C +ATOM 1511 C GLU B 195 1.485 -35.775 34.376 1.00 59.70 C +ATOM 1512 CB GLU B 195 0.539 -33.940 32.956 1.00 59.70 C +ATOM 1513 O GLU B 195 1.602 -35.568 35.586 1.00 59.70 O +ATOM 1514 CG GLU B 195 0.776 -32.504 32.512 1.00 59.70 C +ATOM 1515 CD GLU B 195 -0.489 -31.808 32.034 1.00 59.70 C +ATOM 1516 OE1 GLU B 195 -0.425 -30.609 31.679 1.00 59.70 O +ATOM 1517 OE2 GLU B 195 -1.553 -32.466 32.016 1.00 59.70 O +ATOM 1518 N ALA B 196 1.107 -37.049 33.929 1.00 64.85 N +ATOM 1519 CA ALA B 196 0.790 -38.191 34.782 1.00 64.85 C +ATOM 1520 C ALA B 196 2.059 -38.908 35.234 1.00 64.85 C +ATOM 1521 CB ALA B 196 -0.134 -39.162 34.050 1.00 64.85 C +ATOM 1522 O ALA B 196 2.080 -39.539 36.293 1.00 64.85 O +ATOM 1523 N ASN B 197 3.034 -38.968 34.270 1.00 52.85 N +ATOM 1524 CA ASN B 197 4.302 -39.607 34.607 1.00 52.85 C +ATOM 1525 C ASN B 197 5.474 -38.642 34.455 1.00 52.85 C +ATOM 1526 CB ASN B 197 4.522 -40.851 33.744 1.00 52.85 C +ATOM 1527 O ASN B 197 6.270 -38.768 33.523 1.00 52.85 O +ATOM 1528 CG ASN B 197 3.583 -41.985 34.103 1.00 52.85 C +ATOM 1529 ND2 ASN B 197 3.061 -42.666 33.090 1.00 52.85 N +ATOM 1530 OD1 ASN B 197 3.327 -42.246 35.282 1.00 52.85 O +ATOM 1531 N PRO B 198 5.532 -37.570 35.293 1.00 57.52 N +ATOM 1532 CA PRO B 198 6.522 -36.496 35.175 1.00 57.52 C +ATOM 1533 C PRO B 198 7.959 -37.012 35.210 1.00 57.52 C +ATOM 1534 CB PRO B 198 6.230 -35.612 36.390 1.00 57.52 C +ATOM 1535 O PRO B 198 8.856 -36.391 34.635 1.00 57.52 O +ATOM 1536 CG PRO B 198 5.230 -36.382 37.191 1.00 57.52 C +ATOM 1537 CD PRO B 198 4.839 -37.607 36.416 1.00 57.52 C +ATOM 1538 N ASP B 199 8.165 -38.126 35.876 1.00 53.86 N +ATOM 1539 CA ASP B 199 9.496 -38.685 36.090 1.00 53.86 C +ATOM 1540 C ASP B 199 9.900 -39.598 34.934 1.00 53.86 C +ATOM 1541 CB ASP B 199 9.550 -39.453 37.412 1.00 53.86 C +ATOM 1542 O ASP B 199 10.983 -40.187 34.951 1.00 53.86 O +ATOM 1543 CG ASP B 199 9.402 -38.555 38.627 1.00 53.86 C +ATOM 1544 OD1 ASP B 199 9.840 -37.385 38.577 1.00 53.86 O +ATOM 1545 OD2 ASP B 199 8.846 -39.021 39.644 1.00 53.86 O +ATOM 1546 N ALA B 200 9.002 -39.756 33.994 1.00 54.36 N +ATOM 1547 CA ALA B 200 9.318 -40.657 32.889 1.00 54.36 C +ATOM 1548 C ALA B 200 10.399 -40.065 31.990 1.00 54.36 C +ATOM 1549 CB ALA B 200 8.062 -40.961 32.076 1.00 54.36 C +ATOM 1550 O ALA B 200 10.432 -38.853 31.764 1.00 54.36 O +ATOM 1551 N LEU B 201 11.599 -40.794 31.561 1.00 53.95 N +ATOM 1552 CA LEU B 201 12.788 -40.396 30.817 1.00 53.95 C +ATOM 1553 C LEU B 201 12.408 -39.632 29.553 1.00 53.95 C +ATOM 1554 CB LEU B 201 13.628 -41.622 30.452 1.00 53.95 C +ATOM 1555 O LEU B 201 13.045 -38.633 29.211 1.00 53.95 O +ATOM 1556 CG LEU B 201 14.890 -41.852 31.286 1.00 53.95 C +ATOM 1557 CD1 LEU B 201 15.093 -43.342 31.539 1.00 53.95 C +ATOM 1558 CD2 LEU B 201 16.107 -41.252 30.592 1.00 53.95 C +ATOM 1559 N GLU B 202 11.430 -40.078 28.977 1.00 56.75 N +ATOM 1560 CA GLU B 202 11.006 -39.529 27.692 1.00 56.75 C +ATOM 1561 C GLU B 202 10.477 -38.106 27.849 1.00 56.75 C +ATOM 1562 CB GLU B 202 9.937 -40.419 27.053 1.00 56.75 C +ATOM 1563 O GLU B 202 10.579 -37.295 26.925 1.00 56.75 O +ATOM 1564 CG GLU B 202 10.481 -41.723 26.488 1.00 56.75 C +ATOM 1565 CD GLU B 202 9.491 -42.874 26.574 1.00 56.75 C +ATOM 1566 OE1 GLU B 202 9.787 -43.970 26.047 1.00 56.75 O +ATOM 1567 OE2 GLU B 202 8.409 -42.676 27.171 1.00 56.75 O +ATOM 1568 N CYS B 203 9.877 -37.840 29.067 1.00 50.08 N +ATOM 1569 CA CYS B 203 9.304 -36.530 29.357 1.00 50.08 C +ATOM 1570 C CYS B 203 10.384 -35.549 29.798 1.00 50.08 C +ATOM 1571 CB CYS B 203 8.231 -36.642 30.440 1.00 50.08 C +ATOM 1572 O CYS B 203 10.211 -34.335 29.679 1.00 50.08 O +ATOM 1573 SG CYS B 203 6.785 -37.599 29.935 1.00 50.08 S +ATOM 1574 N ARG B 204 11.530 -35.883 30.373 1.00 46.34 N +ATOM 1575 CA ARG B 204 12.634 -35.062 30.859 1.00 46.34 C +ATOM 1576 C ARG B 204 13.453 -34.504 29.700 1.00 46.34 C +ATOM 1577 CB ARG B 204 13.534 -35.870 31.796 1.00 46.34 C +ATOM 1578 O ARG B 204 14.160 -33.506 29.855 1.00 46.34 O +ATOM 1579 CG ARG B 204 13.119 -35.806 33.257 1.00 46.34 C +ATOM 1580 CD ARG B 204 14.145 -36.469 34.165 1.00 46.34 C +ATOM 1581 NE ARG B 204 13.775 -36.353 35.572 1.00 46.34 N +ATOM 1582 NH1 ARG B 204 15.436 -37.763 36.340 1.00 46.34 N +ATOM 1583 NH2 ARG B 204 13.975 -36.794 37.817 1.00 46.34 N +ATOM 1584 CZ ARG B 204 14.396 -36.970 36.573 1.00 46.34 C +ATOM 1585 N ILE B 205 13.503 -35.147 28.528 1.00 42.42 N +ATOM 1586 CA ILE B 205 14.344 -34.672 27.435 1.00 42.42 C +ATOM 1587 C ILE B 205 13.778 -33.368 26.877 1.00 42.42 C +ATOM 1588 CB ILE B 205 14.463 -35.729 26.314 1.00 42.42 C +ATOM 1589 O ILE B 205 14.527 -32.515 26.396 1.00 42.42 O +ATOM 1590 CG1 ILE B 205 15.131 -37.001 26.847 1.00 42.42 C +ATOM 1591 CG2 ILE B 205 15.235 -35.164 25.118 1.00 42.42 C +ATOM 1592 CD1 ILE B 205 15.138 -38.158 25.858 1.00 42.42 C +ATOM 1593 N TYR B 206 12.511 -33.226 27.037 1.00 36.67 N +ATOM 1594 CA TYR B 206 11.937 -32.032 26.425 1.00 36.67 C +ATOM 1595 C TYR B 206 12.002 -30.846 27.379 1.00 36.67 C +ATOM 1596 CB TYR B 206 10.486 -32.287 26.006 1.00 36.67 C +ATOM 1597 O TYR B 206 11.614 -29.731 27.021 1.00 36.67 O +ATOM 1598 CG TYR B 206 10.320 -32.568 24.533 1.00 36.67 C +ATOM 1599 CD1 TYR B 206 10.078 -31.535 23.630 1.00 36.67 C +ATOM 1600 CD2 TYR B 206 10.403 -33.866 24.041 1.00 36.67 C +ATOM 1601 CE1 TYR B 206 9.922 -31.790 22.271 1.00 36.67 C +ATOM 1602 CE2 TYR B 206 10.249 -34.132 22.684 1.00 36.67 C +ATOM 1603 OH TYR B 206 9.856 -33.347 20.464 1.00 36.67 O +ATOM 1604 CZ TYR B 206 10.010 -33.089 21.808 1.00 36.67 C +ATOM 1605 N ASP B 207 12.230 -31.001 28.750 1.00 33.70 N +ATOM 1606 CA ASP B 207 12.302 -29.873 29.674 1.00 33.70 C +ATOM 1607 C ASP B 207 13.663 -29.184 29.595 1.00 33.70 C +ATOM 1608 CB ASP B 207 12.028 -30.334 31.106 1.00 33.70 C +ATOM 1609 O ASP B 207 13.873 -28.141 30.218 1.00 33.70 O +ATOM 1610 CG ASP B 207 10.547 -30.441 31.422 1.00 33.70 C +ATOM 1611 OD1 ASP B 207 9.718 -29.920 30.645 1.00 33.70 O +ATOM 1612 OD2 ASP B 207 10.205 -31.049 32.460 1.00 33.70 O +ATOM 1613 N ASP B 208 14.746 -29.869 29.058 1.00 27.72 N +ATOM 1614 CA ASP B 208 15.954 -29.050 29.049 1.00 27.72 C +ATOM 1615 C ASP B 208 15.965 -28.100 27.854 1.00 27.72 C +ATOM 1616 CB ASP B 208 17.202 -29.935 29.030 1.00 27.72 C +ATOM 1617 O ASP B 208 15.637 -28.499 26.735 1.00 27.72 O +ATOM 1618 CG ASP B 208 17.575 -30.464 30.404 1.00 27.72 C +ATOM 1619 OD1 ASP B 208 16.977 -30.026 31.410 1.00 27.72 O +ATOM 1620 OD2 ASP B 208 18.478 -31.326 30.481 1.00 27.72 O +TER 1621 ASP B 208 +ATOM 1622 N GLY C 1 33.491 17.421 12.054 1.00 38.13 N +ATOM 1623 CA GLY C 1 32.051 17.582 12.180 1.00 38.13 C +ATOM 1624 C GLY C 1 31.451 16.733 13.285 1.00 38.13 C +ATOM 1625 O GLY C 1 32.070 15.769 13.740 1.00 38.13 O +ATOM 1626 N PRO C 2 30.465 17.227 14.040 1.00 50.65 N +ATOM 1627 CA PRO C 2 29.988 16.513 15.227 1.00 50.65 C +ATOM 1628 C PRO C 2 29.714 15.035 14.956 1.00 50.65 C +ATOM 1629 CB PRO C 2 28.696 17.251 15.587 1.00 50.65 C +ATOM 1630 O PRO C 2 29.292 14.674 13.855 1.00 50.65 O +ATOM 1631 CG PRO C 2 28.428 18.144 14.419 1.00 50.65 C +ATOM 1632 CD PRO C 2 29.595 18.061 13.477 1.00 50.65 C +ATOM 1633 N MET C 3 30.395 14.069 15.672 1.00 59.35 N +ATOM 1634 CA MET C 3 30.366 12.615 15.535 1.00 59.35 C +ATOM 1635 C MET C 3 28.952 12.079 15.732 1.00 59.35 C +ATOM 1636 CB MET C 3 31.317 11.961 16.539 1.00 59.35 C +ATOM 1637 O MET C 3 28.368 12.232 16.806 1.00 59.35 O +ATOM 1638 CG MET C 3 32.658 11.563 15.943 1.00 59.35 C +ATOM 1639 SD MET C 3 33.684 10.587 17.109 1.00 59.35 S +ATOM 1640 CE MET C 3 33.079 11.240 18.691 1.00 59.35 C +ATOM 1641 N VAL C 4 28.049 11.949 14.748 1.00 78.26 N +ATOM 1642 CA VAL C 4 26.707 11.375 14.763 1.00 78.26 C +ATOM 1643 C VAL C 4 26.793 9.864 14.970 1.00 78.26 C +ATOM 1644 CB VAL C 4 25.941 11.691 13.459 1.00 78.26 C +ATOM 1645 O VAL C 4 27.747 9.223 14.523 1.00 78.26 O +ATOM 1646 CG1 VAL C 4 24.482 11.251 13.570 1.00 78.26 C +ATOM 1647 CG2 VAL C 4 26.030 13.181 13.136 1.00 78.26 C +ATOM 1648 N LEU C 5 25.991 9.396 16.032 1.00 91.20 N +ATOM 1649 CA LEU C 5 25.917 7.961 16.282 1.00 91.20 C +ATOM 1650 C LEU C 5 25.618 7.200 14.995 1.00 91.20 C +ATOM 1651 CB LEU C 5 24.844 7.654 17.331 1.00 91.20 C +ATOM 1652 O LEU C 5 24.703 7.563 14.252 1.00 91.20 O +ATOM 1653 CG LEU C 5 24.949 6.299 18.032 1.00 91.20 C +ATOM 1654 CD1 LEU C 5 26.140 6.287 18.985 1.00 91.20 C +ATOM 1655 CD2 LEU C 5 23.658 5.981 18.778 1.00 91.20 C +ATOM 1656 N GLN C 6 26.480 6.185 14.773 1.00 95.13 N +ATOM 1657 CA GLN C 6 26.406 5.499 13.487 1.00 95.13 C +ATOM 1658 C GLN C 6 25.820 4.099 13.643 1.00 95.13 C +ATOM 1659 CB GLN C 6 27.790 5.420 12.840 1.00 95.13 C +ATOM 1660 O GLN C 6 25.759 3.566 14.752 1.00 95.13 O +ATOM 1661 CG GLN C 6 28.424 6.779 12.577 1.00 95.13 C +ATOM 1662 CD GLN C 6 29.830 6.672 12.017 1.00 95.13 C +ATOM 1663 NE2 GLN C 6 30.336 7.771 11.468 1.00 95.13 N +ATOM 1664 OE1 GLN C 6 30.458 5.610 12.078 1.00 95.13 O +ATOM 1665 N ALA C 7 25.483 3.486 12.568 1.00 96.36 N +ATOM 1666 CA ALA C 7 24.849 2.171 12.535 1.00 96.36 C +ATOM 1667 C ALA C 7 25.749 1.112 13.167 1.00 96.36 C +ATOM 1668 CB ALA C 7 24.503 1.783 11.100 1.00 96.36 C +ATOM 1669 O ALA C 7 25.288 0.292 13.964 1.00 96.36 O +ATOM 1670 N GLN C 8 27.017 1.148 12.864 1.00 96.36 N +ATOM 1671 CA GLN C 8 27.942 0.127 13.342 1.00 96.36 C +ATOM 1672 C GLN C 8 28.069 0.168 14.862 1.00 96.36 C +ATOM 1673 CB GLN C 8 29.317 0.302 12.696 1.00 96.36 C +ATOM 1674 O GLN C 8 28.453 -0.824 15.486 1.00 96.36 O +ATOM 1675 CG GLN C 8 30.007 1.609 13.062 1.00 96.36 C +ATOM 1676 CD GLN C 8 31.349 1.778 12.374 1.00 96.36 C +ATOM 1677 NE2 GLN C 8 32.272 2.466 13.036 1.00 96.36 N +ATOM 1678 OE1 GLN C 8 31.554 1.292 11.257 1.00 96.36 O +ATOM 1679 N GLU C 9 27.712 1.249 15.444 1.00 96.73 N +ATOM 1680 CA GLU C 9 27.870 1.416 16.886 1.00 96.73 C +ATOM 1681 C GLU C 9 26.694 0.805 17.644 1.00 96.73 C +ATOM 1682 CB GLU C 9 28.014 2.897 17.244 1.00 96.73 C +ATOM 1683 O GLU C 9 26.791 0.546 18.845 1.00 96.73 O +ATOM 1684 CG GLU C 9 29.274 3.544 16.687 1.00 96.73 C +ATOM 1685 CD GLU C 9 29.323 5.048 16.905 1.00 96.73 C +ATOM 1686 OE1 GLU C 9 29.956 5.499 17.886 1.00 96.73 O +ATOM 1687 OE2 GLU C 9 28.722 5.781 16.088 1.00 96.73 O +ATOM 1688 N ILE C 10 25.637 0.603 16.970 1.00 97.23 N +ATOM 1689 CA ILE C 10 24.483 0.112 17.714 1.00 97.23 C +ATOM 1690 C ILE C 10 23.981 -1.189 17.090 1.00 97.23 C +ATOM 1691 CB ILE C 10 23.348 1.160 17.753 1.00 97.23 C +ATOM 1692 O ILE C 10 23.008 -1.778 17.565 1.00 97.23 O +ATOM 1693 CG1 ILE C 10 22.839 1.449 16.336 1.00 97.23 C +ATOM 1694 CG2 ILE C 10 23.823 2.445 18.438 1.00 97.23 C +ATOM 1695 CD1 ILE C 10 21.460 2.093 16.293 1.00 97.23 C +ATOM 1696 N MET C 11 24.562 -1.660 16.049 1.00 97.20 N +ATOM 1697 CA MET C 11 24.141 -2.881 15.367 1.00 97.20 C +ATOM 1698 C MET C 11 24.380 -4.105 16.246 1.00 97.20 C +ATOM 1699 CB MET C 11 24.882 -3.039 14.039 1.00 97.20 C +ATOM 1700 O MET C 11 25.140 -4.040 17.214 1.00 97.20 O +ATOM 1701 CG MET C 11 26.364 -3.341 14.195 1.00 97.20 C +ATOM 1702 SD MET C 11 27.222 -3.504 12.581 1.00 97.20 S +ATOM 1703 CE MET C 11 28.903 -3.881 13.150 1.00 97.20 C +ATOM 1704 N THR C 12 23.665 -5.138 15.920 1.00 94.11 N +ATOM 1705 CA THR C 12 23.962 -6.440 16.509 1.00 94.11 C +ATOM 1706 C THR C 12 25.061 -7.150 15.724 1.00 94.11 C +ATOM 1707 CB THR C 12 22.706 -7.330 16.559 1.00 94.11 C +ATOM 1708 O THR C 12 24.978 -7.272 14.500 1.00 94.11 O +ATOM 1709 CG2 THR C 12 23.006 -8.665 17.232 1.00 94.11 C +ATOM 1710 OG1 THR C 12 21.679 -6.655 17.296 1.00 94.11 O +ATOM 1711 N GLN C 13 26.095 -7.580 16.354 1.00 91.31 N +ATOM 1712 CA GLN C 13 27.258 -8.146 15.680 1.00 91.31 C +ATOM 1713 C GLN C 13 27.122 -9.658 15.523 1.00 91.31 C +ATOM 1714 CB GLN C 13 28.539 -7.811 16.446 1.00 91.31 C +ATOM 1715 O GLN C 13 27.687 -10.245 14.598 1.00 91.31 O +ATOM 1716 CG GLN C 13 28.883 -6.327 16.450 1.00 91.31 C +ATOM 1717 CD GLN C 13 30.119 -6.014 17.272 1.00 91.31 C +ATOM 1718 NE2 GLN C 13 30.264 -4.754 17.668 1.00 91.31 N +ATOM 1719 OE1 GLN C 13 30.937 -6.897 17.549 1.00 91.31 O +ATOM 1720 N ASN C 14 26.531 -10.284 16.476 1.00 83.65 N +ATOM 1721 CA ASN C 14 26.333 -11.725 16.362 1.00 83.65 C +ATOM 1722 C ASN C 14 25.304 -12.066 15.288 1.00 83.65 C +ATOM 1723 CB ASN C 14 25.912 -12.317 17.709 1.00 83.65 C +ATOM 1724 O ASN C 14 24.109 -12.161 15.576 1.00 83.65 O +ATOM 1725 CG ASN C 14 26.176 -13.807 17.799 1.00 83.65 C +ATOM 1726 ND2 ASN C 14 25.904 -14.388 18.962 1.00 83.65 N +ATOM 1727 OD1 ASN C 14 26.621 -14.432 16.832 1.00 83.65 O +ATOM 1728 N VAL C 15 25.828 -12.268 14.055 1.00 87.98 N +ATOM 1729 CA VAL C 15 24.937 -12.560 12.937 1.00 87.98 C +ATOM 1730 C VAL C 15 25.006 -14.047 12.596 1.00 87.98 C +ATOM 1731 CB VAL C 15 25.289 -11.712 11.695 1.00 87.98 C +ATOM 1732 O VAL C 15 26.090 -14.633 12.563 1.00 87.98 O +ATOM 1733 CG1 VAL C 15 24.279 -11.949 10.574 1.00 87.98 C +ATOM 1734 CG2 VAL C 15 25.348 -10.230 12.061 1.00 87.98 C +ATOM 1735 N VAL C 16 23.894 -14.661 12.494 1.00 94.84 N +ATOM 1736 CA VAL C 16 23.815 -16.062 12.095 1.00 94.84 C +ATOM 1737 C VAL C 16 23.324 -16.161 10.652 1.00 94.84 C +ATOM 1738 CB VAL C 16 22.888 -16.868 13.031 1.00 94.84 C +ATOM 1739 O VAL C 16 22.437 -15.410 10.239 1.00 94.84 O +ATOM 1740 CG1 VAL C 16 22.784 -18.320 12.568 1.00 94.84 C +ATOM 1741 CG2 VAL C 16 23.392 -16.797 14.471 1.00 94.84 C +ATOM 1742 N THR C 17 23.946 -17.002 9.955 1.00 96.21 N +ATOM 1743 CA THR C 17 23.608 -17.160 8.545 1.00 96.21 C +ATOM 1744 C THR C 17 22.913 -18.497 8.302 1.00 96.21 C +ATOM 1745 CB THR C 17 24.861 -17.060 7.655 1.00 96.21 C +ATOM 1746 O THR C 17 22.968 -19.393 9.146 1.00 96.21 O +ATOM 1747 CG2 THR C 17 25.630 -15.772 7.931 1.00 96.21 C +ATOM 1748 OG1 THR C 17 25.716 -18.180 7.917 1.00 96.21 O +ATOM 1749 N ILE C 18 22.203 -18.595 7.146 1.00 97.92 N +ATOM 1750 CA ILE C 18 21.517 -19.810 6.719 1.00 97.92 C +ATOM 1751 C ILE C 18 21.564 -19.921 5.197 1.00 97.92 C +ATOM 1752 CB ILE C 18 20.054 -19.836 7.214 1.00 97.92 C +ATOM 1753 O ILE C 18 21.708 -18.914 4.499 1.00 97.92 O +ATOM 1754 CG1 ILE C 18 19.459 -21.239 7.047 1.00 97.92 C +ATOM 1755 CG2 ILE C 18 19.214 -18.793 6.473 1.00 97.92 C +ATOM 1756 CD1 ILE C 18 18.163 -21.458 7.816 1.00 97.92 C +ATOM 1757 N ARG C 19 21.485 -21.115 4.753 1.00 96.95 N +ATOM 1758 CA ARG C 19 21.428 -21.316 3.308 1.00 96.95 C +ATOM 1759 C ARG C 19 20.006 -21.137 2.787 1.00 96.95 C +ATOM 1760 CB ARG C 19 21.952 -22.705 2.937 1.00 96.95 C +ATOM 1761 O ARG C 19 19.040 -21.463 3.479 1.00 96.95 O +ATOM 1762 CG ARG C 19 23.438 -22.892 3.194 1.00 96.95 C +ATOM 1763 CD ARG C 19 23.938 -24.230 2.666 1.00 96.95 C +ATOM 1764 NE ARG C 19 25.390 -24.341 2.768 1.00 96.95 N +ATOM 1765 NH1 ARG C 19 25.500 -26.457 1.848 1.00 96.95 N +ATOM 1766 NH2 ARG C 19 27.417 -25.391 2.516 1.00 96.95 N +ATOM 1767 CZ ARG C 19 26.099 -25.396 2.377 1.00 96.95 C +ATOM 1768 N GLY C 20 19.946 -20.728 1.574 1.00 97.65 N +ATOM 1769 CA GLY C 20 18.636 -20.596 0.956 1.00 97.65 C +ATOM 1770 C GLY C 20 17.915 -21.921 0.796 1.00 97.65 C +ATOM 1771 O GLY C 20 16.683 -21.969 0.808 1.00 97.65 O +ATOM 1772 N SER C 21 18.618 -22.973 0.645 1.00 97.15 N +ATOM 1773 CA SER C 21 18.049 -24.296 0.411 1.00 97.15 C +ATOM 1774 C SER C 21 17.551 -24.921 1.710 1.00 97.15 C +ATOM 1775 CB SER C 21 19.082 -25.215 -0.243 1.00 97.15 C +ATOM 1776 O SER C 21 16.869 -25.948 1.690 1.00 97.15 O +ATOM 1777 OG SER C 21 20.238 -25.331 0.568 1.00 97.15 O +ATOM 1778 N ALA C 22 17.837 -24.311 2.831 1.00 98.12 N +ATOM 1779 CA ALA C 22 17.369 -24.847 4.106 1.00 98.12 C +ATOM 1780 C ALA C 22 15.846 -24.802 4.194 1.00 98.12 C +ATOM 1781 CB ALA C 22 17.989 -24.074 5.268 1.00 98.12 C +ATOM 1782 O ALA C 22 15.199 -24.028 3.485 1.00 98.12 O +ATOM 1783 N THR C 23 15.311 -25.663 5.029 1.00 98.41 N +ATOM 1784 CA THR C 23 13.872 -25.608 5.262 1.00 98.41 C +ATOM 1785 C THR C 23 13.518 -24.452 6.193 1.00 98.41 C +ATOM 1786 CB THR C 23 13.352 -26.929 5.858 1.00 98.41 C +ATOM 1787 O THR C 23 14.372 -23.964 6.937 1.00 98.41 O +ATOM 1788 CG2 THR C 23 13.751 -28.119 4.992 1.00 98.41 C +ATOM 1789 OG1 THR C 23 13.900 -27.103 7.171 1.00 98.41 O +ATOM 1790 N VAL C 24 12.324 -24.076 6.135 1.00 98.80 N +ATOM 1791 CA VAL C 24 11.831 -23.055 7.053 1.00 98.80 C +ATOM 1792 C VAL C 24 11.897 -23.574 8.487 1.00 98.80 C +ATOM 1793 CB VAL C 24 10.387 -22.628 6.706 1.00 98.80 C +ATOM 1794 O VAL C 24 12.185 -22.816 9.416 1.00 98.80 O +ATOM 1795 CG1 VAL C 24 9.823 -21.704 7.783 1.00 98.80 C +ATOM 1796 CG2 VAL C 24 10.346 -21.948 5.339 1.00 98.80 C +ATOM 1797 N ALA C 25 11.679 -24.856 8.656 1.00 98.69 N +ATOM 1798 CA ALA C 25 11.795 -25.470 9.976 1.00 98.69 C +ATOM 1799 C ALA C 25 13.201 -25.293 10.542 1.00 98.69 C +ATOM 1800 CB ALA C 25 11.436 -26.952 9.906 1.00 98.69 C +ATOM 1801 O ALA C 25 13.367 -24.978 11.722 1.00 98.69 O +ATOM 1802 N ASP C 26 14.201 -25.473 9.708 1.00 98.49 N +ATOM 1803 CA ASP C 26 15.583 -25.255 10.123 1.00 98.49 C +ATOM 1804 C ASP C 26 15.799 -23.814 10.580 1.00 98.49 C +ATOM 1805 CB ASP C 26 16.546 -25.595 8.984 1.00 98.49 C +ATOM 1806 O ASP C 26 16.467 -23.569 11.586 1.00 98.49 O +ATOM 1807 CG ASP C 26 16.580 -27.078 8.659 1.00 98.49 C +ATOM 1808 OD1 ASP C 26 16.362 -27.907 9.569 1.00 98.49 O +ATOM 1809 OD2 ASP C 26 16.829 -27.421 7.483 1.00 98.49 O +ATOM 1810 N ALA C 27 15.249 -22.949 9.840 1.00 98.74 N +ATOM 1811 CA ALA C 27 15.380 -21.532 10.173 1.00 98.74 C +ATOM 1812 C ALA C 27 14.747 -21.226 11.527 1.00 98.74 C +ATOM 1813 CB ALA C 27 14.746 -20.669 9.085 1.00 98.74 C +ATOM 1814 O ALA C 27 15.345 -20.539 12.358 1.00 98.74 O +ATOM 1815 N VAL C 28 13.547 -21.729 11.742 1.00 98.75 N +ATOM 1816 CA VAL C 28 12.853 -21.511 13.007 1.00 98.75 C +ATOM 1817 C VAL C 28 13.678 -22.087 14.156 1.00 98.75 C +ATOM 1818 CB VAL C 28 11.442 -22.140 12.996 1.00 98.75 C +ATOM 1819 O VAL C 28 13.862 -21.434 15.185 1.00 98.75 O +ATOM 1820 CG1 VAL C 28 10.798 -22.048 14.378 1.00 98.75 C +ATOM 1821 CG2 VAL C 28 10.563 -21.461 11.948 1.00 98.75 C +ATOM 1822 N LYS C 29 14.163 -23.258 13.953 1.00 98.51 N +ATOM 1823 CA LYS C 29 14.999 -23.899 14.964 1.00 98.51 C +ATOM 1824 C LYS C 29 16.210 -23.035 15.305 1.00 98.51 C +ATOM 1825 CB LYS C 29 15.457 -25.278 14.487 1.00 98.51 C +ATOM 1826 O LYS C 29 16.503 -22.804 16.480 1.00 98.51 O +ATOM 1827 CG LYS C 29 16.300 -26.035 15.503 1.00 98.51 C +ATOM 1828 CD LYS C 29 16.740 -27.391 14.964 1.00 98.51 C +ATOM 1829 CE LYS C 29 17.651 -28.115 15.946 1.00 98.51 C +ATOM 1830 NZ LYS C 29 18.139 -29.414 15.395 1.00 98.51 N +ATOM 1831 N LEU C 30 16.848 -22.621 14.333 1.00 98.22 N +ATOM 1832 CA LEU C 30 18.036 -21.795 14.518 1.00 98.22 C +ATOM 1833 C LEU C 30 17.686 -20.490 15.226 1.00 98.22 C +ATOM 1834 CB LEU C 30 18.696 -21.496 13.169 1.00 98.22 C +ATOM 1835 O LEU C 30 18.404 -20.059 16.131 1.00 98.22 O +ATOM 1836 CG LEU C 30 20.082 -20.852 13.221 1.00 98.22 C +ATOM 1837 CD1 LEU C 30 21.023 -21.688 14.082 1.00 98.22 C +ATOM 1838 CD2 LEU C 30 20.646 -20.683 11.814 1.00 98.22 C +ATOM 1839 N MET C 31 16.617 -19.876 14.889 1.00 97.81 N +ATOM 1840 CA MET C 31 16.178 -18.635 15.520 1.00 97.81 C +ATOM 1841 C MET C 31 15.846 -18.861 16.991 1.00 97.81 C +ATOM 1842 CB MET C 31 14.962 -18.060 14.792 1.00 97.81 C +ATOM 1843 O MET C 31 16.192 -18.040 17.843 1.00 97.81 O +ATOM 1844 CG MET C 31 15.290 -17.451 13.438 1.00 97.81 C +ATOM 1845 SD MET C 31 13.810 -16.760 12.601 1.00 97.81 S +ATOM 1846 CE MET C 31 14.538 -16.281 11.010 1.00 97.81 C +ATOM 1847 N LYS C 32 15.188 -19.952 17.279 1.00 97.71 N +ATOM 1848 CA LYS C 32 14.864 -20.291 18.662 1.00 97.71 C +ATOM 1849 C LYS C 32 16.130 -20.528 19.480 1.00 97.71 C +ATOM 1850 CB LYS C 32 13.966 -21.528 18.715 1.00 97.71 C +ATOM 1851 O LYS C 32 16.290 -19.963 20.564 1.00 97.71 O +ATOM 1852 CG LYS C 32 12.534 -21.273 18.270 1.00 97.71 C +ATOM 1853 CD LYS C 32 11.676 -22.525 18.402 1.00 97.71 C +ATOM 1854 CE LYS C 32 10.222 -22.247 18.047 1.00 97.71 C +ATOM 1855 NZ LYS C 32 9.364 -23.455 18.236 1.00 97.71 N +ATOM 1856 N GLU C 33 17.052 -21.286 18.924 1.00 97.27 N +ATOM 1857 CA GLU C 33 18.284 -21.639 19.622 1.00 97.27 C +ATOM 1858 C GLU C 33 19.137 -20.404 19.896 1.00 97.27 C +ATOM 1859 CB GLU C 33 19.086 -22.663 18.814 1.00 97.27 C +ATOM 1860 O GLU C 33 19.713 -20.268 20.977 1.00 97.27 O +ATOM 1861 CG GLU C 33 18.484 -24.061 18.823 1.00 97.27 C +ATOM 1862 CD GLU C 33 19.232 -25.042 17.935 1.00 97.27 C +ATOM 1863 OE1 GLU C 33 18.897 -26.248 17.946 1.00 97.27 O +ATOM 1864 OE2 GLU C 33 20.161 -24.601 17.222 1.00 97.27 O +ATOM 1865 N LYS C 34 19.151 -19.535 18.930 1.00 96.25 N +ATOM 1866 CA LYS C 34 20.041 -18.382 19.033 1.00 96.25 C +ATOM 1867 C LYS C 34 19.286 -17.146 19.513 1.00 96.25 C +ATOM 1868 CB LYS C 34 20.710 -18.098 17.688 1.00 96.25 C +ATOM 1869 O LYS C 34 19.880 -16.082 19.697 1.00 96.25 O +ATOM 1870 CG LYS C 34 21.565 -19.244 17.167 1.00 96.25 C +ATOM 1871 CD LYS C 34 22.771 -19.493 18.063 1.00 96.25 C +ATOM 1872 CE LYS C 34 23.688 -20.562 17.484 1.00 96.25 C +ATOM 1873 NZ LYS C 34 24.881 -20.798 18.352 1.00 96.25 N +ATOM 1874 N LYS C 35 17.919 -17.275 19.697 1.00 94.23 N +ATOM 1875 CA LYS C 35 17.053 -16.190 20.148 1.00 94.23 C +ATOM 1876 C LYS C 35 17.157 -14.982 19.220 1.00 94.23 C +ATOM 1877 CB LYS C 35 17.403 -15.782 21.580 1.00 94.23 C +ATOM 1878 O LYS C 35 17.381 -13.859 19.677 1.00 94.23 O +ATOM 1879 CG LYS C 35 17.212 -16.892 22.603 1.00 94.23 C +ATOM 1880 CD LYS C 35 17.517 -16.408 24.015 1.00 94.23 C +ATOM 1881 CE LYS C 35 17.339 -17.522 25.039 1.00 94.23 C +ATOM 1882 NZ LYS C 35 17.635 -17.051 26.425 1.00 94.23 N +ATOM 1883 N LEU C 36 17.022 -15.254 17.972 1.00 94.81 N +ATOM 1884 CA LEU C 36 17.113 -14.220 16.946 1.00 94.81 C +ATOM 1885 C LEU C 36 15.787 -14.071 16.207 1.00 94.81 C +ATOM 1886 CB LEU C 36 18.231 -14.547 15.953 1.00 94.81 C +ATOM 1887 O LEU C 36 14.983 -15.005 16.172 1.00 94.81 O +ATOM 1888 CG LEU C 36 19.651 -14.586 16.520 1.00 94.81 C +ATOM 1889 CD1 LEU C 36 20.616 -15.167 15.492 1.00 94.81 C +ATOM 1890 CD2 LEU C 36 20.094 -13.192 16.949 1.00 94.81 C +ATOM 1891 N ARG C 37 15.567 -12.922 15.663 1.00 95.29 N +ATOM 1892 CA ARG C 37 14.318 -12.637 14.965 1.00 95.29 C +ATOM 1893 C ARG C 37 14.548 -12.506 13.463 1.00 95.29 C +ATOM 1894 CB ARG C 37 13.676 -11.360 15.510 1.00 95.29 C +ATOM 1895 O ARG C 37 13.618 -12.206 12.711 1.00 95.29 O +ATOM 1896 CG ARG C 37 13.209 -11.473 16.953 1.00 95.29 C +ATOM 1897 CD ARG C 37 12.701 -10.141 17.487 1.00 95.29 C +ATOM 1898 NE ARG C 37 12.398 -10.213 18.913 1.00 95.29 N +ATOM 1899 NH1 ARG C 37 12.866 -7.990 19.335 1.00 95.29 N +ATOM 1900 NH2 ARG C 37 12.183 -9.366 21.037 1.00 95.29 N +ATOM 1901 CZ ARG C 37 12.483 -9.189 19.759 1.00 95.29 C +ATOM 1902 N GLY C 38 15.713 -12.660 12.965 1.00 96.42 N +ATOM 1903 CA GLY C 38 16.121 -12.661 11.569 1.00 96.42 C +ATOM 1904 C GLY C 38 17.438 -13.375 11.333 1.00 96.42 C +ATOM 1905 O GLY C 38 18.320 -13.363 12.195 1.00 96.42 O +ATOM 1906 N LEU C 39 17.540 -13.903 10.123 1.00 98.05 N +ATOM 1907 CA LEU C 39 18.755 -14.584 9.688 1.00 98.05 C +ATOM 1908 C LEU C 39 19.232 -14.039 8.346 1.00 98.05 C +ATOM 1909 CB LEU C 39 18.515 -16.092 9.583 1.00 98.05 C +ATOM 1910 O LEU C 39 18.418 -13.698 7.484 1.00 98.05 O +ATOM 1911 CG LEU C 39 17.940 -16.775 10.825 1.00 98.05 C +ATOM 1912 CD1 LEU C 39 17.528 -18.207 10.499 1.00 98.05 C +ATOM 1913 CD2 LEU C 39 18.951 -16.750 11.966 1.00 98.05 C +ATOM 1914 N ILE C 40 20.516 -14.022 8.201 1.00 97.82 N +ATOM 1915 CA ILE C 40 21.087 -13.612 6.922 1.00 97.82 C +ATOM 1916 C ILE C 40 21.240 -14.828 6.012 1.00 97.82 C +ATOM 1917 CB ILE C 40 22.450 -12.910 7.111 1.00 97.82 C +ATOM 1918 O ILE C 40 21.673 -15.894 6.456 1.00 97.82 O +ATOM 1919 CG1 ILE C 40 22.278 -11.622 7.925 1.00 97.82 C +ATOM 1920 CG2 ILE C 40 23.100 -12.618 5.756 1.00 97.82 C +ATOM 1921 CD1 ILE C 40 21.347 -10.603 7.283 1.00 97.82 C +ATOM 1922 N VAL C 41 20.777 -14.740 4.827 1.00 97.86 N +ATOM 1923 CA VAL C 41 20.975 -15.786 3.829 1.00 97.86 C +ATOM 1924 C VAL C 41 22.297 -15.559 3.097 1.00 97.86 C +ATOM 1925 CB VAL C 41 19.808 -15.834 2.817 1.00 97.86 C +ATOM 1926 O VAL C 41 22.493 -14.519 2.465 1.00 97.86 O +ATOM 1927 CG1 VAL C 41 20.023 -16.951 1.798 1.00 97.86 C +ATOM 1928 CG2 VAL C 41 18.479 -16.020 3.547 1.00 97.86 C +ATOM 1929 N GLU C 42 23.095 -16.460 3.039 1.00 93.37 N +ATOM 1930 CA GLU C 42 24.462 -16.343 2.540 1.00 93.37 C +ATOM 1931 C GLU C 42 24.489 -16.277 1.016 1.00 93.37 C +ATOM 1932 CB GLU C 42 25.316 -17.514 3.032 1.00 93.37 C +ATOM 1933 O GLU C 42 23.690 -16.936 0.347 1.00 93.37 O +ATOM 1934 CG GLU C 42 25.509 -17.544 4.541 1.00 93.37 C +ATOM 1935 CD GLU C 42 26.279 -18.763 5.023 1.00 93.37 C +ATOM 1936 OE1 GLU C 42 26.602 -18.838 6.231 1.00 93.37 O +ATOM 1937 OE2 GLU C 42 26.564 -19.649 4.187 1.00 93.37 O +ATOM 1938 N PRO C 43 25.494 -15.523 0.532 1.00 91.97 N +ATOM 1939 CA PRO C 43 25.719 -15.595 -0.913 1.00 91.97 C +ATOM 1940 C PRO C 43 26.313 -16.931 -1.352 1.00 91.97 C +ATOM 1941 CB PRO C 43 26.701 -14.449 -1.175 1.00 91.97 C +ATOM 1942 O PRO C 43 27.044 -17.567 -0.588 1.00 91.97 O +ATOM 1943 CG PRO C 43 26.689 -13.642 0.083 1.00 91.97 C +ATOM 1944 CD PRO C 43 26.228 -14.521 1.210 1.00 91.97 C +ATOM 1945 N ARG C 44 25.999 -17.350 -2.503 1.00 86.28 N +ATOM 1946 CA ARG C 44 26.524 -18.610 -3.020 1.00 86.28 C +ATOM 1947 C ARG C 44 27.918 -18.421 -3.611 1.00 86.28 C +ATOM 1948 CB ARG C 44 25.582 -19.192 -4.076 1.00 86.28 C +ATOM 1949 O ARG C 44 28.732 -19.346 -3.602 1.00 86.28 O +ATOM 1950 CG ARG C 44 24.210 -19.566 -3.539 1.00 86.28 C +ATOM 1951 CD ARG C 44 24.226 -20.921 -2.845 1.00 86.28 C +ATOM 1952 NE ARG C 44 24.418 -22.011 -3.797 1.00 86.28 N +ATOM 1953 NH1 ARG C 44 23.597 -23.655 -2.396 1.00 86.28 N +ATOM 1954 NH2 ARG C 44 24.331 -24.196 -4.499 1.00 86.28 N +ATOM 1955 CZ ARG C 44 24.115 -23.285 -3.562 1.00 86.28 C +ATOM 1956 N HIS C 45 28.146 -17.270 -4.216 1.00 82.59 N +ATOM 1957 CA HIS C 45 29.436 -16.895 -4.786 1.00 82.59 C +ATOM 1958 C HIS C 45 29.676 -15.394 -4.665 1.00 82.59 C +ATOM 1959 CB HIS C 45 29.518 -17.324 -6.252 1.00 82.59 C +ATOM 1960 O HIS C 45 28.827 -14.664 -4.150 1.00 82.59 O +ATOM 1961 CG HIS C 45 28.364 -16.856 -7.080 1.00 82.59 C +ATOM 1962 CD2 HIS C 45 27.273 -17.514 -7.538 1.00 82.59 C +ATOM 1963 ND1 HIS C 45 28.251 -15.559 -7.533 1.00 82.59 N +ATOM 1964 CE1 HIS C 45 27.137 -15.440 -8.236 1.00 82.59 C +ATOM 1965 NE2 HIS C 45 26.525 -16.612 -8.254 1.00 82.59 N +ATOM 1966 N GLU C 46 30.727 -14.926 -5.065 1.00 75.63 N +ATOM 1967 CA GLU C 46 31.173 -13.554 -4.841 1.00 75.63 C +ATOM 1968 C GLU C 46 30.220 -12.552 -5.484 1.00 75.63 C +ATOM 1969 CB GLU C 46 32.591 -13.355 -5.383 1.00 75.63 C +ATOM 1970 O GLU C 46 30.046 -11.440 -4.979 1.00 75.63 O +ATOM 1971 CG GLU C 46 33.677 -13.956 -4.502 1.00 75.63 C +ATOM 1972 CD GLU C 46 35.084 -13.629 -4.977 1.00 75.63 C +ATOM 1973 OE1 GLU C 46 36.058 -13.975 -4.271 1.00 75.63 O +ATOM 1974 OE2 GLU C 46 35.213 -13.022 -6.064 1.00 75.63 O +ATOM 1975 N GLN C 47 29.631 -12.903 -6.524 1.00 76.19 N +ATOM 1976 CA GLN C 47 28.749 -11.984 -7.237 1.00 76.19 C +ATOM 1977 C GLN C 47 27.313 -12.097 -6.733 1.00 76.19 C +ATOM 1978 CB GLN C 47 28.799 -12.251 -8.742 1.00 76.19 C +ATOM 1979 O GLN C 47 26.444 -11.324 -7.141 1.00 76.19 O +ATOM 1980 CG GLN C 47 30.156 -11.968 -9.372 1.00 76.19 C +ATOM 1981 CD GLN C 47 30.336 -12.653 -10.714 1.00 76.19 C +ATOM 1982 NE2 GLN C 47 31.488 -12.441 -11.339 1.00 76.19 N +ATOM 1983 OE1 GLN C 47 29.445 -13.369 -11.184 1.00 76.19 O +ATOM 1984 N ASP C 48 27.111 -13.051 -5.892 1.00 87.73 N +ATOM 1985 CA ASP C 48 25.785 -13.265 -5.322 1.00 87.73 C +ATOM 1986 C ASP C 48 25.555 -12.363 -4.111 1.00 87.73 C +ATOM 1987 CB ASP C 48 25.600 -14.732 -4.929 1.00 87.73 C +ATOM 1988 O ASP C 48 26.452 -12.187 -3.283 1.00 87.73 O +ATOM 1989 CG ASP C 48 24.160 -15.079 -4.594 1.00 87.73 C +ATOM 1990 OD1 ASP C 48 23.236 -14.533 -5.235 1.00 87.73 O +ATOM 1991 OD2 ASP C 48 23.947 -15.903 -3.678 1.00 87.73 O +ATOM 1992 N PRO C 49 24.380 -11.753 -3.956 1.00 92.97 N +ATOM 1993 CA PRO C 49 24.118 -10.844 -2.838 1.00 92.97 C +ATOM 1994 C PRO C 49 23.640 -11.573 -1.584 1.00 92.97 C +ATOM 1995 CB PRO C 49 23.024 -9.921 -3.383 1.00 92.97 C +ATOM 1996 O PRO C 49 23.254 -12.742 -1.655 1.00 92.97 O +ATOM 1997 CG PRO C 49 22.221 -10.782 -4.303 1.00 92.97 C +ATOM 1998 CD PRO C 49 23.154 -11.722 -5.012 1.00 92.97 C +ATOM 1999 N TYR C 50 23.679 -10.856 -0.470 1.00 94.31 N +ATOM 2000 CA TYR C 50 23.084 -11.349 0.768 1.00 94.31 C +ATOM 2001 C TYR C 50 21.563 -11.280 0.706 1.00 94.31 C +ATOM 2002 CB TYR C 50 23.595 -10.546 1.967 1.00 94.31 C +ATOM 2003 O TYR C 50 21.001 -10.458 -0.022 1.00 94.31 O +ATOM 2004 CG TYR C 50 25.046 -10.802 2.296 1.00 94.31 C +ATOM 2005 CD1 TYR C 50 25.423 -11.903 3.061 1.00 94.31 C +ATOM 2006 CD2 TYR C 50 26.042 -9.944 1.843 1.00 94.31 C +ATOM 2007 CE1 TYR C 50 26.759 -12.142 3.368 1.00 94.31 C +ATOM 2008 CE2 TYR C 50 27.380 -10.173 2.143 1.00 94.31 C +ATOM 2009 OH TYR C 50 29.052 -11.505 3.206 1.00 94.31 O +ATOM 2010 CZ TYR C 50 27.729 -11.273 2.905 1.00 94.31 C +ATOM 2011 N GLY C 51 20.969 -12.215 1.383 1.00 96.82 N +ATOM 2012 CA GLY C 51 19.539 -12.171 1.647 1.00 96.82 C +ATOM 2013 C GLY C 51 19.206 -12.162 3.127 1.00 96.82 C +ATOM 2014 O GLY C 51 20.104 -12.202 3.971 1.00 96.82 O +ATOM 2015 N ILE C 52 17.932 -12.058 3.420 1.00 98.38 N +ATOM 2016 CA ILE C 52 17.488 -12.073 4.810 1.00 98.38 C +ATOM 2017 C ILE C 52 16.137 -12.777 4.912 1.00 98.38 C +ATOM 2018 CB ILE C 52 17.392 -10.643 5.388 1.00 98.38 C +ATOM 2019 O ILE C 52 15.304 -12.670 4.010 1.00 98.38 O +ATOM 2020 CG1 ILE C 52 17.121 -10.694 6.896 1.00 98.38 C +ATOM 2021 CG2 ILE C 52 16.308 -9.839 4.663 1.00 98.38 C +ATOM 2022 CD1 ILE C 52 17.324 -9.362 7.606 1.00 98.38 C +ATOM 2023 N VAL C 53 15.948 -13.556 5.947 1.00 98.60 N +ATOM 2024 CA VAL C 53 14.662 -14.136 6.320 1.00 98.60 C +ATOM 2025 C VAL C 53 14.328 -13.768 7.764 1.00 98.60 C +ATOM 2026 CB VAL C 53 14.660 -15.671 6.148 1.00 98.60 C +ATOM 2027 O VAL C 53 15.181 -13.866 8.649 1.00 98.60 O +ATOM 2028 CG1 VAL C 53 15.694 -16.319 7.067 1.00 98.60 C +ATOM 2029 CG2 VAL C 53 13.268 -16.237 6.422 1.00 98.60 C +ATOM 2030 N THR C 54 13.107 -13.310 8.011 1.00 98.23 N +ATOM 2031 CA THR C 54 12.730 -12.804 9.326 1.00 98.23 C +ATOM 2032 C THR C 54 11.549 -13.589 9.890 1.00 98.23 C +ATOM 2033 CB THR C 54 12.373 -11.307 9.267 1.00 98.23 C +ATOM 2034 O THR C 54 10.919 -14.371 9.175 1.00 98.23 O +ATOM 2035 CG2 THR C 54 13.460 -10.511 8.553 1.00 98.23 C +ATOM 2036 OG1 THR C 54 11.136 -11.144 8.563 1.00 98.23 O +ATOM 2037 N GLU C 55 11.279 -13.366 11.137 1.00 98.06 N +ATOM 2038 CA GLU C 55 10.117 -13.975 11.778 1.00 98.06 C +ATOM 2039 C GLU C 55 8.821 -13.536 11.102 1.00 98.06 C +ATOM 2040 CB GLU C 55 10.078 -13.622 13.267 1.00 98.06 C +ATOM 2041 O GLU C 55 7.870 -14.315 11.007 1.00 98.06 O +ATOM 2042 CG GLU C 55 9.994 -12.128 13.543 1.00 98.06 C +ATOM 2043 CD GLU C 55 10.025 -11.789 15.025 1.00 98.06 C +ATOM 2044 OE1 GLU C 55 9.834 -10.604 15.381 1.00 98.06 O +ATOM 2045 OE2 GLU C 55 10.244 -12.715 15.837 1.00 98.06 O +ATOM 2046 N THR C 56 8.834 -12.340 10.611 1.00 98.06 N +ATOM 2047 CA THR C 56 7.647 -11.839 9.926 1.00 98.06 C +ATOM 2048 C THR C 56 7.421 -12.590 8.617 1.00 98.06 C +ATOM 2049 CB THR C 56 7.762 -10.330 9.642 1.00 98.06 C +ATOM 2050 O THR C 56 6.286 -12.936 8.282 1.00 98.06 O +ATOM 2051 CG2 THR C 56 6.494 -9.797 8.983 1.00 98.06 C +ATOM 2052 OG1 THR C 56 7.976 -9.632 10.875 1.00 98.06 O +ATOM 2053 N ASP C 57 8.462 -12.878 7.901 1.00 98.52 N +ATOM 2054 CA ASP C 57 8.337 -13.674 6.683 1.00 98.52 C +ATOM 2055 C ASP C 57 7.707 -15.034 6.978 1.00 98.52 C +ATOM 2056 CB ASP C 57 9.704 -13.861 6.021 1.00 98.52 C +ATOM 2057 O ASP C 57 6.774 -15.454 6.291 1.00 98.52 O +ATOM 2058 CG ASP C 57 10.276 -12.567 5.470 1.00 98.52 C +ATOM 2059 OD1 ASP C 57 9.509 -11.742 4.928 1.00 98.52 O +ATOM 2060 OD2 ASP C 57 11.507 -12.371 5.575 1.00 98.52 O +ATOM 2061 N ILE C 58 8.174 -15.645 7.987 1.00 98.78 N +ATOM 2062 CA ILE C 58 7.745 -16.995 8.335 1.00 98.78 C +ATOM 2063 C ILE C 58 6.281 -16.975 8.769 1.00 98.78 C +ATOM 2064 CB ILE C 58 8.627 -17.599 9.450 1.00 98.78 C +ATOM 2065 O ILE C 58 5.474 -17.777 8.292 1.00 98.78 O +ATOM 2066 CG1 ILE C 58 10.049 -17.845 8.933 1.00 98.78 C +ATOM 2067 CG2 ILE C 58 8.008 -18.892 9.988 1.00 98.78 C +ATOM 2068 CD1 ILE C 58 11.042 -18.243 10.016 1.00 98.78 C +ATOM 2069 N VAL C 59 5.950 -16.054 9.576 1.00 98.62 N +ATOM 2070 CA VAL C 59 4.589 -16.013 10.102 1.00 98.62 C +ATOM 2071 C VAL C 59 3.618 -15.609 8.995 1.00 98.62 C +ATOM 2072 CB VAL C 59 4.472 -15.039 11.296 1.00 98.62 C +ATOM 2073 O VAL C 59 2.574 -16.240 8.817 1.00 98.62 O +ATOM 2074 CG1 VAL C 59 3.008 -14.820 11.672 1.00 98.62 C +ATOM 2075 CG2 VAL C 59 5.262 -15.565 12.493 1.00 98.62 C +ATOM 2076 N TYR C 60 3.981 -14.649 8.180 1.00 98.29 N +ATOM 2077 CA TYR C 60 3.098 -14.115 7.149 1.00 98.29 C +ATOM 2078 C TYR C 60 2.934 -15.107 6.004 1.00 98.29 C +ATOM 2079 CB TYR C 60 3.637 -12.785 6.615 1.00 98.29 C +ATOM 2080 O TYR C 60 1.861 -15.198 5.402 1.00 98.29 O +ATOM 2081 CG TYR C 60 3.256 -11.593 7.457 1.00 98.29 C +ATOM 2082 CD1 TYR C 60 2.808 -11.755 8.767 1.00 98.29 C +ATOM 2083 CD2 TYR C 60 3.341 -10.302 6.947 1.00 98.29 C +ATOM 2084 CE1 TYR C 60 2.454 -10.659 9.547 1.00 98.29 C +ATOM 2085 CE2 TYR C 60 2.989 -9.199 7.717 1.00 98.29 C +ATOM 2086 OH TYR C 60 2.198 -8.298 9.782 1.00 98.29 O +ATOM 2087 CZ TYR C 60 2.548 -9.387 9.014 1.00 98.29 C +ATOM 2088 N LYS C 61 3.984 -15.814 5.671 1.00 98.13 N +ATOM 2089 CA LYS C 61 3.983 -16.562 4.417 1.00 98.13 C +ATOM 2090 C LYS C 61 3.845 -18.060 4.671 1.00 98.13 C +ATOM 2091 CB LYS C 61 5.260 -16.281 3.623 1.00 98.13 C +ATOM 2092 O LYS C 61 3.514 -18.821 3.760 1.00 98.13 O +ATOM 2093 CG LYS C 61 5.414 -14.829 3.193 1.00 98.13 C +ATOM 2094 CD LYS C 61 6.722 -14.604 2.444 1.00 98.13 C +ATOM 2095 CE LYS C 61 6.932 -13.133 2.114 1.00 98.13 C +ATOM 2096 NZ LYS C 61 8.228 -12.903 1.408 1.00 98.13 N +ATOM 2097 N VAL C 62 4.090 -18.501 5.872 1.00 98.39 N +ATOM 2098 CA VAL C 62 4.060 -19.936 6.134 1.00 98.39 C +ATOM 2099 C VAL C 62 2.966 -20.253 7.151 1.00 98.39 C +ATOM 2100 CB VAL C 62 5.426 -20.449 6.643 1.00 98.39 C +ATOM 2101 O VAL C 62 1.934 -20.832 6.802 1.00 98.39 O +ATOM 2102 CG1 VAL C 62 5.412 -21.970 6.788 1.00 98.39 C +ATOM 2103 CG2 VAL C 62 6.545 -20.009 5.701 1.00 98.39 C +ATOM 2104 N ALA C 63 3.075 -19.783 8.358 1.00 97.94 N +ATOM 2105 CA ALA C 63 2.125 -20.096 9.423 1.00 97.94 C +ATOM 2106 C ALA C 63 0.719 -19.631 9.057 1.00 97.94 C +ATOM 2107 CB ALA C 63 2.569 -19.456 10.736 1.00 97.94 C +ATOM 2108 O ALA C 63 -0.255 -20.361 9.257 1.00 97.94 O +ATOM 2109 N ALA C 64 0.634 -18.531 8.497 1.00 97.29 N +ATOM 2110 CA ALA C 64 -0.651 -17.916 8.173 1.00 97.29 C +ATOM 2111 C ALA C 64 -1.412 -18.746 7.143 1.00 97.29 C +ATOM 2112 CB ALA C 64 -0.446 -16.493 7.659 1.00 97.29 C +ATOM 2113 O ALA C 64 -2.635 -18.634 7.027 1.00 97.29 O +ATOM 2114 N PHE C 65 -0.664 -19.538 6.417 1.00 96.00 N +ATOM 2115 CA PHE C 65 -1.297 -20.261 5.321 1.00 96.00 C +ATOM 2116 C PHE C 65 -1.265 -21.764 5.574 1.00 96.00 C +ATOM 2117 CB PHE C 65 -0.607 -19.938 3.992 1.00 96.00 C +ATOM 2118 O PHE C 65 -1.673 -22.552 4.719 1.00 96.00 O +ATOM 2119 CG PHE C 65 -0.729 -18.496 3.580 1.00 96.00 C +ATOM 2120 CD1 PHE C 65 -1.882 -18.031 2.960 1.00 96.00 C +ATOM 2121 CD2 PHE C 65 0.310 -17.604 3.814 1.00 96.00 C +ATOM 2122 CE1 PHE C 65 -1.998 -16.697 2.577 1.00 96.00 C +ATOM 2123 CE2 PHE C 65 0.201 -16.269 3.434 1.00 96.00 C +ATOM 2124 CZ PHE C 65 -0.953 -15.818 2.815 1.00 96.00 C +ATOM 2125 N GLY C 66 -0.743 -22.123 6.642 1.00 93.55 N +ATOM 2126 CA GLY C 66 -0.710 -23.526 7.022 1.00 93.55 C +ATOM 2127 C GLY C 66 0.267 -24.344 6.199 1.00 93.55 C +ATOM 2128 O GLY C 66 0.087 -25.552 6.033 1.00 93.55 O +ATOM 2129 N HIS C 67 1.202 -23.809 5.573 1.00 96.32 N +ATOM 2130 CA HIS C 67 2.227 -24.546 4.843 1.00 96.32 C +ATOM 2131 C HIS C 67 3.120 -25.336 5.794 1.00 96.32 C +ATOM 2132 CB HIS C 67 3.073 -23.593 3.998 1.00 96.32 C +ATOM 2133 O HIS C 67 3.285 -24.957 6.956 1.00 96.32 O +ATOM 2134 CG HIS C 67 2.302 -22.904 2.917 1.00 96.32 C +ATOM 2135 CD2 HIS C 67 2.264 -21.603 2.543 1.00 96.32 C +ATOM 2136 ND1 HIS C 67 1.440 -23.573 2.076 1.00 96.32 N +ATOM 2137 CE1 HIS C 67 0.903 -22.711 1.229 1.00 96.32 C +ATOM 2138 NE2 HIS C 67 1.387 -21.509 1.491 1.00 96.32 N +ATOM 2139 N ASP C 68 3.732 -26.354 5.294 1.00 96.26 N +ATOM 2140 CA ASP C 68 4.613 -27.182 6.112 1.00 96.26 C +ATOM 2141 C ASP C 68 6.038 -26.633 6.114 1.00 96.26 C +ATOM 2142 CB ASP C 68 4.607 -28.628 5.612 1.00 96.26 C +ATOM 2143 O ASP C 68 6.729 -26.683 5.094 1.00 96.26 O +ATOM 2144 CG ASP C 68 5.400 -29.567 6.504 1.00 96.26 C +ATOM 2145 OD1 ASP C 68 6.047 -29.095 7.464 1.00 96.26 O +ATOM 2146 OD2 ASP C 68 5.380 -30.789 6.243 1.00 96.26 O +ATOM 2147 N PRO C 69 6.457 -26.170 7.255 1.00 98.10 N +ATOM 2148 CA PRO C 69 7.802 -25.595 7.321 1.00 98.10 C +ATOM 2149 C PRO C 69 8.897 -26.623 7.044 1.00 98.10 C +ATOM 2150 CB PRO C 69 7.893 -25.074 8.758 1.00 98.10 C +ATOM 2151 O PRO C 69 10.042 -26.253 6.772 1.00 98.10 O +ATOM 2152 CG PRO C 69 6.474 -24.973 9.217 1.00 98.10 C +ATOM 2153 CD PRO C 69 5.672 -26.039 8.529 1.00 98.10 C +ATOM 2154 N LYS C 70 8.609 -27.837 7.117 1.00 97.03 N +ATOM 2155 CA LYS C 70 9.600 -28.882 6.883 1.00 97.03 C +ATOM 2156 C LYS C 70 9.804 -29.124 5.390 1.00 97.03 C +ATOM 2157 CB LYS C 70 9.182 -30.182 7.572 1.00 97.03 C +ATOM 2158 O LYS C 70 10.803 -29.720 4.983 1.00 97.03 O +ATOM 2159 CG LYS C 70 9.147 -30.095 9.090 1.00 97.03 C +ATOM 2160 CD LYS C 70 8.614 -31.380 9.712 1.00 97.03 C +ATOM 2161 CE LYS C 70 8.403 -31.231 11.213 1.00 97.03 C +ATOM 2162 NZ LYS C 70 7.744 -32.434 11.802 1.00 97.03 N +ATOM 2163 N THR C 71 8.886 -28.663 4.574 1.00 96.32 N +ATOM 2164 CA THR C 71 8.973 -28.838 3.128 1.00 96.32 C +ATOM 2165 C THR C 71 9.296 -27.514 2.442 1.00 96.32 C +ATOM 2166 CB THR C 71 7.664 -29.410 2.555 1.00 96.32 C +ATOM 2167 O THR C 71 10.076 -27.477 1.488 1.00 96.32 O +ATOM 2168 CG2 THR C 71 7.306 -30.736 3.217 1.00 96.32 C +ATOM 2169 OG1 THR C 71 6.601 -28.475 2.779 1.00 96.32 O +ATOM 2170 N MET C 72 8.769 -26.480 2.962 1.00 97.95 N +ATOM 2171 CA MET C 72 9.037 -25.171 2.371 1.00 97.95 C +ATOM 2172 C MET C 72 10.461 -24.719 2.676 1.00 97.95 C +ATOM 2173 CB MET C 72 8.038 -24.134 2.884 1.00 97.95 C +ATOM 2174 O MET C 72 10.984 -24.986 3.759 1.00 97.95 O +ATOM 2175 CG MET C 72 8.003 -22.856 2.062 1.00 97.95 C +ATOM 2176 SD MET C 72 6.623 -21.747 2.543 1.00 97.95 S +ATOM 2177 CE MET C 72 5.221 -22.654 1.833 1.00 97.95 C +ATOM 2178 N ARG C 73 11.048 -24.044 1.701 1.00 98.49 N +ATOM 2179 CA ARG C 73 12.454 -23.673 1.818 1.00 98.49 C +ATOM 2180 C ARG C 73 12.608 -22.170 2.028 1.00 98.49 C +ATOM 2181 CB ARG C 73 13.232 -24.110 0.575 1.00 98.49 C +ATOM 2182 O ARG C 73 11.719 -21.394 1.671 1.00 98.49 O +ATOM 2183 CG ARG C 73 13.088 -25.588 0.247 1.00 98.49 C +ATOM 2184 CD ARG C 73 13.787 -26.464 1.277 1.00 98.49 C +ATOM 2185 NE ARG C 73 13.743 -27.875 0.903 1.00 98.49 N +ATOM 2186 NH1 ARG C 73 15.838 -28.376 1.738 1.00 98.49 N +ATOM 2187 NH2 ARG C 73 14.572 -30.011 0.749 1.00 98.49 N +ATOM 2188 CZ ARG C 73 14.718 -28.751 1.131 1.00 98.49 C +ATOM 2189 N VAL C 74 13.724 -21.757 2.541 1.00 98.71 N +ATOM 2190 CA VAL C 74 14.025 -20.370 2.878 1.00 98.71 C +ATOM 2191 C VAL C 74 14.018 -19.517 1.612 1.00 98.71 C +ATOM 2192 CB VAL C 74 15.386 -20.244 3.599 1.00 98.71 C +ATOM 2193 O VAL C 74 13.491 -18.402 1.609 1.00 98.71 O +ATOM 2194 CG1 VAL C 74 15.863 -18.793 3.602 1.00 98.71 C +ATOM 2195 CG2 VAL C 74 15.285 -20.779 5.026 1.00 98.71 C +ATOM 2196 N TYR C 75 14.498 -20.016 0.501 1.00 97.56 N +ATOM 2197 CA TYR C 75 14.592 -19.219 -0.717 1.00 97.56 C +ATOM 2198 C TYR C 75 13.208 -18.882 -1.257 1.00 97.56 C +ATOM 2199 CB TYR C 75 15.403 -19.960 -1.784 1.00 97.56 C +ATOM 2200 O TYR C 75 13.062 -17.989 -2.095 1.00 97.56 O +ATOM 2201 CG TYR C 75 14.692 -21.159 -2.362 1.00 97.56 C +ATOM 2202 CD1 TYR C 75 15.040 -22.453 -1.979 1.00 97.56 C +ATOM 2203 CD2 TYR C 75 13.671 -21.002 -3.294 1.00 97.56 C +ATOM 2204 CE1 TYR C 75 14.388 -23.560 -2.511 1.00 97.56 C +ATOM 2205 CE2 TYR C 75 13.013 -22.102 -3.833 1.00 97.56 C +ATOM 2206 OH TYR C 75 12.729 -24.469 -3.965 1.00 97.56 O +ATOM 2207 CZ TYR C 75 13.378 -23.376 -3.435 1.00 97.56 C +ATOM 2208 N GLU C 76 12.188 -19.574 -0.796 1.00 97.98 N +ATOM 2209 CA GLU C 76 10.824 -19.332 -1.259 1.00 97.98 C +ATOM 2210 C GLU C 76 10.206 -18.131 -0.549 1.00 97.98 C +ATOM 2211 CB GLU C 76 9.956 -20.574 -1.046 1.00 97.98 C +ATOM 2212 O GLU C 76 9.238 -17.545 -1.038 1.00 97.98 O +ATOM 2213 CG GLU C 76 10.400 -21.782 -1.858 1.00 97.98 C +ATOM 2214 CD GLU C 76 9.610 -23.042 -1.541 1.00 97.98 C +ATOM 2215 OE1 GLU C 76 10.115 -23.900 -0.783 1.00 97.98 O +ATOM 2216 OE2 GLU C 76 8.477 -23.172 -2.056 1.00 97.98 O +ATOM 2217 N ILE C 77 10.746 -17.707 0.618 1.00 98.34 N +ATOM 2218 CA ILE C 77 10.062 -16.681 1.397 1.00 98.34 C +ATOM 2219 C ILE C 77 11.038 -15.558 1.742 1.00 98.34 C +ATOM 2220 CB ILE C 77 9.443 -17.267 2.685 1.00 98.34 C +ATOM 2221 O ILE C 77 10.634 -14.511 2.253 1.00 98.34 O +ATOM 2222 CG1 ILE C 77 10.536 -17.856 3.583 1.00 98.34 C +ATOM 2223 CG2 ILE C 77 8.386 -18.322 2.345 1.00 98.34 C +ATOM 2224 CD1 ILE C 77 10.109 -18.053 5.031 1.00 98.34 C +ATOM 2225 N MET C 78 12.280 -15.666 1.471 1.00 98.22 N +ATOM 2226 CA MET C 78 13.318 -14.711 1.849 1.00 98.22 C +ATOM 2227 C MET C 78 13.266 -13.472 0.962 1.00 98.22 C +ATOM 2228 CB MET C 78 14.701 -15.358 1.764 1.00 98.22 C +ATOM 2229 O MET C 78 12.637 -13.488 -0.098 1.00 98.22 O +ATOM 2230 CG MET C 78 15.141 -15.681 0.345 1.00 98.22 C +ATOM 2231 SD MET C 78 16.810 -16.441 0.282 1.00 98.22 S +ATOM 2232 CE MET C 78 17.019 -16.603 -1.513 1.00 98.22 C +ATOM 2233 N ALA C 79 13.912 -12.396 1.451 1.00 97.74 N +ATOM 2234 CA ALA C 79 14.242 -11.243 0.617 1.00 97.74 C +ATOM 2235 C ALA C 79 15.688 -11.313 0.132 1.00 97.74 C +ATOM 2236 CB ALA C 79 14.005 -9.945 1.385 1.00 97.74 C +ATOM 2237 O ALA C 79 16.622 -11.265 0.936 1.00 97.74 O +ATOM 2238 N LYS C 80 15.867 -11.441 -1.136 1.00 96.68 N +ATOM 2239 CA LYS C 80 17.187 -11.496 -1.759 1.00 96.68 C +ATOM 2240 C LYS C 80 17.159 -10.891 -3.160 1.00 96.68 C +ATOM 2241 CB LYS C 80 17.692 -12.938 -1.821 1.00 96.68 C +ATOM 2242 O LYS C 80 16.436 -11.371 -4.035 1.00 96.68 O +ATOM 2243 CG LYS C 80 19.129 -13.070 -2.302 1.00 96.68 C +ATOM 2244 CD LYS C 80 19.658 -14.484 -2.101 1.00 96.68 C +ATOM 2245 CE LYS C 80 21.118 -14.601 -2.518 1.00 96.68 C +ATOM 2246 NZ LYS C 80 21.710 -15.908 -2.104 1.00 96.68 N +ATOM 2247 N PRO C 81 17.929 -9.867 -3.494 1.00 95.52 N +ATOM 2248 CA PRO C 81 18.783 -9.126 -2.562 1.00 95.52 C +ATOM 2249 C PRO C 81 17.983 -8.349 -1.520 1.00 95.52 C +ATOM 2250 CB PRO C 81 19.560 -8.174 -3.475 1.00 95.52 C +ATOM 2251 O PRO C 81 16.769 -8.181 -1.667 1.00 95.52 O +ATOM 2252 CG PRO C 81 18.652 -7.935 -4.638 1.00 95.52 C +ATOM 2253 CD PRO C 81 17.816 -9.164 -4.852 1.00 95.52 C +ATOM 2254 N CYS C 82 18.588 -8.044 -0.463 1.00 95.15 N +ATOM 2255 CA CYS C 82 17.959 -7.221 0.564 1.00 95.15 C +ATOM 2256 C CYS C 82 18.595 -5.837 0.619 1.00 95.15 C +ATOM 2257 CB CYS C 82 18.065 -7.896 1.931 1.00 95.15 C +ATOM 2258 O CYS C 82 19.692 -5.632 0.097 1.00 95.15 O +ATOM 2259 SG CYS C 82 19.762 -8.251 2.438 1.00 95.15 S +ATOM 2260 N VAL C 83 17.835 -4.817 1.137 1.00 95.52 N +ATOM 2261 CA VAL C 83 18.381 -3.491 1.410 1.00 95.52 C +ATOM 2262 C VAL C 83 19.506 -3.597 2.437 1.00 95.52 C +ATOM 2263 CB VAL C 83 17.289 -2.521 1.915 1.00 95.52 C +ATOM 2264 O VAL C 83 19.390 -4.331 3.421 1.00 95.52 O +ATOM 2265 CG1 VAL C 83 17.897 -1.171 2.288 1.00 95.52 C +ATOM 2266 CG2 VAL C 83 16.201 -2.347 0.857 1.00 95.52 C +ATOM 2267 N VAL C 84 20.537 -2.920 2.151 1.00 95.10 N +ATOM 2268 CA VAL C 84 21.684 -2.974 3.051 1.00 95.10 C +ATOM 2269 C VAL C 84 21.962 -1.584 3.619 1.00 95.10 C +ATOM 2270 CB VAL C 84 22.941 -3.518 2.336 1.00 95.10 C +ATOM 2271 O VAL C 84 21.565 -0.575 3.030 1.00 95.10 O +ATOM 2272 CG1 VAL C 84 22.698 -4.935 1.820 1.00 95.10 C +ATOM 2273 CG2 VAL C 84 23.346 -2.592 1.191 1.00 95.10 C +ATOM 2274 N VAL C 85 22.632 -1.539 4.792 1.00 95.60 N +ATOM 2275 CA VAL C 85 22.938 -0.286 5.473 1.00 95.60 C +ATOM 2276 C VAL C 85 24.451 -0.083 5.527 1.00 95.60 C +ATOM 2277 CB VAL C 85 22.345 -0.256 6.899 1.00 95.60 C +ATOM 2278 O VAL C 85 25.197 -1.014 5.841 1.00 95.60 O +ATOM 2279 CG1 VAL C 85 22.870 0.950 7.677 1.00 95.60 C +ATOM 2280 CG2 VAL C 85 20.819 -0.236 6.842 1.00 95.60 C +ATOM 2281 N ASN C 86 24.929 1.110 5.227 1.00 93.40 N +ATOM 2282 CA ASN C 86 26.316 1.513 5.435 1.00 93.40 C +ATOM 2283 C ASN C 86 26.644 1.648 6.919 1.00 93.40 C +ATOM 2284 CB ASN C 86 26.609 2.825 4.705 1.00 93.40 C +ATOM 2285 O ASN C 86 25.899 2.281 7.669 1.00 93.40 O +ATOM 2286 CG ASN C 86 28.069 3.224 4.786 1.00 93.40 C +ATOM 2287 ND2 ASN C 86 28.592 3.785 3.702 1.00 93.40 N +ATOM 2288 OD1 ASN C 86 28.723 3.029 5.815 1.00 93.40 O +ATOM 2289 N PRO C 87 27.759 1.053 7.341 1.00 94.80 N +ATOM 2290 CA PRO C 87 28.094 1.104 8.766 1.00 94.80 C +ATOM 2291 C PRO C 87 28.287 2.530 9.276 1.00 94.80 C +ATOM 2292 CB PRO C 87 29.402 0.313 8.849 1.00 94.80 C +ATOM 2293 O PRO C 87 28.081 2.799 10.462 1.00 94.80 O +ATOM 2294 CG PRO C 87 29.951 0.336 7.459 1.00 94.80 C +ATOM 2295 CD PRO C 87 28.802 0.384 6.493 1.00 94.80 C +ATOM 2296 N GLU C 88 28.556 3.452 8.424 1.00 93.21 N +ATOM 2297 CA GLU C 88 28.841 4.823 8.838 1.00 93.21 C +ATOM 2298 C GLU C 88 27.596 5.699 8.742 1.00 93.21 C +ATOM 2299 CB GLU C 88 29.969 5.416 7.989 1.00 93.21 C +ATOM 2300 O GLU C 88 27.648 6.895 9.035 1.00 93.21 O +ATOM 2301 CG GLU C 88 31.296 4.685 8.133 1.00 93.21 C +ATOM 2302 CD GLU C 88 32.368 5.198 7.184 1.00 93.21 C +ATOM 2303 OE1 GLU C 88 33.543 4.785 7.316 1.00 93.21 O +ATOM 2304 OE2 GLU C 88 32.031 6.019 6.302 1.00 93.21 O +ATOM 2305 N LEU C 89 26.542 5.112 8.323 1.00 93.23 N +ATOM 2306 CA LEU C 89 25.301 5.872 8.215 1.00 93.23 C +ATOM 2307 C LEU C 89 24.786 6.271 9.593 1.00 93.23 C +ATOM 2308 CB LEU C 89 24.237 5.058 7.475 1.00 93.23 C +ATOM 2309 O LEU C 89 24.787 5.457 10.520 1.00 93.23 O +ATOM 2310 CG LEU C 89 22.999 5.825 7.007 1.00 93.23 C +ATOM 2311 CD1 LEU C 89 23.392 6.900 5.999 1.00 93.23 C +ATOM 2312 CD2 LEU C 89 21.973 4.871 6.407 1.00 93.23 C +ATOM 2313 N GLY C 90 24.278 7.529 9.713 1.00 92.86 N +ATOM 2314 CA GLY C 90 23.691 7.979 10.965 1.00 92.86 C +ATOM 2315 C GLY C 90 22.408 7.250 11.318 1.00 92.86 C +ATOM 2316 O GLY C 90 21.629 6.891 10.434 1.00 92.86 O +ATOM 2317 N VAL C 91 22.173 7.153 12.536 1.00 94.81 N +ATOM 2318 CA VAL C 91 21.073 6.343 13.049 1.00 94.81 C +ATOM 2319 C VAL C 91 19.740 6.934 12.597 1.00 94.81 C +ATOM 2320 CB VAL C 91 21.115 6.239 14.590 1.00 94.81 C +ATOM 2321 O VAL C 91 18.801 6.198 12.285 1.00 94.81 O +ATOM 2322 CG1 VAL C 91 19.847 5.575 15.121 1.00 94.81 C +ATOM 2323 CG2 VAL C 91 22.355 5.468 15.039 1.00 94.81 C +ATOM 2324 N GLU C 92 19.615 8.195 12.581 1.00 94.36 N +ATOM 2325 CA GLU C 92 18.370 8.815 12.138 1.00 94.36 C +ATOM 2326 C GLU C 92 18.093 8.509 10.669 1.00 94.36 C +ATOM 2327 CB GLU C 92 18.413 10.329 12.362 1.00 94.36 C +ATOM 2328 O GLU C 92 16.941 8.311 10.277 1.00 94.36 O +ATOM 2329 CG GLU C 92 18.444 10.733 13.828 1.00 94.36 C +ATOM 2330 CD GLU C 92 19.840 10.704 14.430 1.00 94.36 C +ATOM 2331 OE1 GLU C 92 19.996 11.065 15.619 1.00 94.36 O +ATOM 2332 OE2 GLU C 92 20.785 10.319 13.706 1.00 94.36 O +ATOM 2333 N TYR C 93 19.132 8.496 9.926 1.00 95.11 N +ATOM 2334 CA TYR C 93 18.980 8.164 8.514 1.00 95.11 C +ATOM 2335 C TYR C 93 18.630 6.692 8.334 1.00 95.11 C +ATOM 2336 CB TYR C 93 20.262 8.494 7.743 1.00 95.11 C +ATOM 2337 O TYR C 93 17.896 6.330 7.411 1.00 95.11 O +ATOM 2338 CG TYR C 93 20.446 9.968 7.474 1.00 95.11 C +ATOM 2339 CD1 TYR C 93 19.474 10.699 6.794 1.00 95.11 C +ATOM 2340 CD2 TYR C 93 21.592 10.632 7.897 1.00 95.11 C +ATOM 2341 CE1 TYR C 93 19.640 12.057 6.542 1.00 95.11 C +ATOM 2342 CE2 TYR C 93 21.769 11.990 7.651 1.00 95.11 C +ATOM 2343 OH TYR C 93 20.959 14.037 6.727 1.00 95.11 O +ATOM 2344 CZ TYR C 93 20.789 12.692 6.974 1.00 95.11 C +ATOM 2345 N VAL C 94 19.159 5.821 9.200 1.00 96.87 N +ATOM 2346 CA VAL C 94 18.733 4.425 9.180 1.00 96.87 C +ATOM 2347 C VAL C 94 17.233 4.338 9.450 1.00 96.87 C +ATOM 2348 CB VAL C 94 19.511 3.580 10.213 1.00 96.87 C +ATOM 2349 O VAL C 94 16.505 3.654 8.727 1.00 96.87 O +ATOM 2350 CG1 VAL C 94 19.063 2.120 10.163 1.00 96.87 C +ATOM 2351 CG2 VAL C 94 21.015 3.689 9.968 1.00 96.87 C +ATOM 2352 N ALA C 95 16.831 5.073 10.474 1.00 98.08 N +ATOM 2353 CA ALA C 95 15.405 5.115 10.791 1.00 98.08 C +ATOM 2354 C ALA C 95 14.589 5.577 9.587 1.00 98.08 C +ATOM 2355 CB ALA C 95 15.152 6.031 11.985 1.00 98.08 C +ATOM 2356 O ALA C 95 13.557 4.984 9.264 1.00 98.08 O +ATOM 2357 N ARG C 96 15.013 6.595 8.938 1.00 97.77 N +ATOM 2358 CA ARG C 96 14.312 7.138 7.779 1.00 97.77 C +ATOM 2359 C ARG C 96 14.297 6.136 6.629 1.00 97.77 C +ATOM 2360 CB ARG C 96 14.958 8.448 7.324 1.00 97.77 C +ATOM 2361 O ARG C 96 13.287 5.993 5.937 1.00 97.77 O +ATOM 2362 CG ARG C 96 14.164 9.190 6.262 1.00 97.77 C +ATOM 2363 CD ARG C 96 14.728 10.580 6.004 1.00 97.77 C +ATOM 2364 NE ARG C 96 14.143 11.188 4.812 1.00 97.77 N +ATOM 2365 NH1 ARG C 96 12.453 12.280 5.946 1.00 97.77 N +ATOM 2366 NH2 ARG C 96 12.627 12.479 3.669 1.00 97.77 N +ATOM 2367 CZ ARG C 96 13.076 11.981 4.812 1.00 97.77 C +ATOM 2368 N LEU C 97 15.418 5.445 6.428 1.00 97.62 N +ATOM 2369 CA LEU C 97 15.481 4.406 5.406 1.00 97.62 C +ATOM 2370 C LEU C 97 14.454 3.313 5.678 1.00 97.62 C +ATOM 2371 CB LEU C 97 16.885 3.799 5.344 1.00 97.62 C +ATOM 2372 O LEU C 97 13.737 2.888 4.769 1.00 97.62 O +ATOM 2373 CG LEU C 97 17.120 2.742 4.264 1.00 97.62 C +ATOM 2374 CD1 LEU C 97 16.941 3.351 2.878 1.00 97.62 C +ATOM 2375 CD2 LEU C 97 18.509 2.129 4.409 1.00 97.62 C +ATOM 2376 N PHE C 98 14.354 2.887 6.913 1.00 98.14 N +ATOM 2377 CA PHE C 98 13.373 1.881 7.301 1.00 98.14 C +ATOM 2378 C PHE C 98 11.955 2.383 7.052 1.00 98.14 C +ATOM 2379 CB PHE C 98 13.544 1.503 8.775 1.00 98.14 C +ATOM 2380 O PHE C 98 11.125 1.662 6.495 1.00 98.14 O +ATOM 2381 CG PHE C 98 14.730 0.616 9.041 1.00 98.14 C +ATOM 2382 CD1 PHE C 98 15.489 0.114 7.991 1.00 98.14 C +ATOM 2383 CD2 PHE C 98 15.088 0.286 10.341 1.00 98.14 C +ATOM 2384 CE1 PHE C 98 16.588 -0.707 8.233 1.00 98.14 C +ATOM 2385 CE2 PHE C 98 16.185 -0.534 10.592 1.00 98.14 C +ATOM 2386 CZ PHE C 98 16.933 -1.030 9.536 1.00 98.14 C +ATOM 2387 N ALA C 99 11.751 3.610 7.430 1.00 97.84 N +ATOM 2388 CA ALA C 99 10.424 4.189 7.235 1.00 97.84 C +ATOM 2389 C ALA C 99 10.066 4.256 5.753 1.00 97.84 C +ATOM 2390 CB ALA C 99 10.354 5.581 7.859 1.00 97.84 C +ATOM 2391 O ALA C 99 8.950 3.908 5.362 1.00 97.84 O +ATOM 2392 N GLN C 100 10.953 4.623 4.909 1.00 96.04 N +ATOM 2393 CA GLN C 100 10.714 4.802 3.481 1.00 96.04 C +ATOM 2394 C GLN C 100 10.524 3.459 2.783 1.00 96.04 C +ATOM 2395 CB GLN C 100 11.867 5.571 2.835 1.00 96.04 C +ATOM 2396 O GLN C 100 9.704 3.338 1.870 1.00 96.04 O +ATOM 2397 CG GLN C 100 11.894 7.052 3.189 1.00 96.04 C +ATOM 2398 CD GLN C 100 13.144 7.752 2.691 1.00 96.04 C +ATOM 2399 NE2 GLN C 100 13.133 9.081 2.725 1.00 96.04 N +ATOM 2400 OE1 GLN C 100 14.112 7.105 2.280 1.00 96.04 O +ATOM 2401 N THR C 101 11.273 2.455 3.225 1.00 96.60 N +ATOM 2402 CA THR C 101 11.249 1.160 2.554 1.00 96.60 C +ATOM 2403 C THR C 101 10.308 0.196 3.271 1.00 96.60 C +ATOM 2404 CB THR C 101 12.659 0.544 2.478 1.00 96.60 C +ATOM 2405 O THR C 101 10.056 -0.909 2.786 1.00 96.60 O +ATOM 2406 CG2 THR C 101 13.601 1.426 1.664 1.00 96.60 C +ATOM 2407 OG1 THR C 101 13.183 0.401 3.804 1.00 96.60 O +ATOM 2408 N ARG C 102 9.878 0.508 4.476 1.00 95.93 N +ATOM 2409 CA ARG C 102 8.947 -0.266 5.290 1.00 95.93 C +ATOM 2410 C ARG C 102 9.567 -1.592 5.719 1.00 95.93 C +ATOM 2411 CB ARG C 102 7.646 -0.520 4.526 1.00 95.93 C +ATOM 2412 O ARG C 102 8.893 -2.624 5.731 1.00 95.93 O +ATOM 2413 CG ARG C 102 6.870 0.745 4.194 1.00 95.93 C +ATOM 2414 CD ARG C 102 6.244 1.364 5.435 1.00 95.93 C +ATOM 2415 NE ARG C 102 5.360 2.476 5.096 1.00 95.93 N +ATOM 2416 NH1 ARG C 102 4.380 2.606 7.184 1.00 95.93 N +ATOM 2417 NH2 ARG C 102 3.738 4.046 5.521 1.00 95.93 N +ATOM 2418 CZ ARG C 102 4.495 3.040 5.934 1.00 95.93 C +ATOM 2419 N ILE C 103 10.861 -1.538 5.938 1.00 96.47 N +ATOM 2420 CA ILE C 103 11.535 -2.683 6.540 1.00 96.47 C +ATOM 2421 C ILE C 103 11.896 -2.365 7.989 1.00 96.47 C +ATOM 2422 CB ILE C 103 12.800 -3.077 5.746 1.00 96.47 C +ATOM 2423 O ILE C 103 11.813 -1.212 8.418 1.00 96.47 O +ATOM 2424 CG1 ILE C 103 13.833 -1.945 5.791 1.00 96.47 C +ATOM 2425 CG2 ILE C 103 12.442 -3.435 4.301 1.00 96.47 C +ATOM 2426 CD1 ILE C 103 15.174 -2.305 5.166 1.00 96.47 C +ATOM 2427 N ARG C 104 12.257 -3.375 8.747 1.00 96.60 N +ATOM 2428 CA ARG C 104 12.486 -3.170 10.173 1.00 96.60 C +ATOM 2429 C ARG C 104 13.887 -3.620 10.573 1.00 96.60 C +ATOM 2430 CB ARG C 104 11.439 -3.921 10.999 1.00 96.60 C +ATOM 2431 O ARG C 104 14.309 -3.413 11.713 1.00 96.60 O +ATOM 2432 CG ARG C 104 10.019 -3.414 10.802 1.00 96.60 C +ATOM 2433 CD ARG C 104 8.992 -4.367 11.397 1.00 96.60 C +ATOM 2434 NE ARG C 104 7.629 -3.974 11.053 1.00 96.60 N +ATOM 2435 NH1 ARG C 104 6.620 -5.722 12.178 1.00 96.60 N +ATOM 2436 NH2 ARG C 104 5.342 -4.181 11.061 1.00 96.60 N +ATOM 2437 CZ ARG C 104 6.533 -4.627 11.431 1.00 96.60 C +ATOM 2438 N ARG C 105 14.506 -4.278 9.652 1.00 97.34 N +ATOM 2439 CA ARG C 105 15.870 -4.739 9.889 1.00 97.34 C +ATOM 2440 C ARG C 105 16.629 -4.899 8.576 1.00 97.34 C +ATOM 2441 CB ARG C 105 15.865 -6.062 10.657 1.00 97.34 C +ATOM 2442 O ARG C 105 16.024 -5.140 7.529 1.00 97.34 O +ATOM 2443 CG ARG C 105 15.274 -7.225 9.876 1.00 97.34 C +ATOM 2444 CD ARG C 105 15.082 -8.454 10.754 1.00 97.34 C +ATOM 2445 NE ARG C 105 14.288 -8.150 11.941 1.00 97.34 N +ATOM 2446 NH1 ARG C 105 15.344 -9.693 13.297 1.00 97.34 N +ATOM 2447 NH2 ARG C 105 13.654 -8.391 14.136 1.00 97.34 N +ATOM 2448 CZ ARG C 105 14.431 -8.745 13.122 1.00 97.34 C +ATOM 2449 N ALA C 106 17.910 -4.778 8.687 1.00 97.65 N +ATOM 2450 CA ALA C 106 18.772 -4.888 7.513 1.00 97.65 C +ATOM 2451 C ALA C 106 20.199 -5.252 7.912 1.00 97.65 C +ATOM 2452 CB ALA C 106 18.761 -3.583 6.720 1.00 97.65 C +ATOM 2453 O ALA C 106 20.654 -4.900 9.003 1.00 97.65 O +ATOM 2454 N PRO C 107 20.868 -5.970 7.015 1.00 97.37 N +ATOM 2455 CA PRO C 107 22.289 -6.205 7.278 1.00 97.37 C +ATOM 2456 C PRO C 107 23.137 -4.947 7.109 1.00 97.37 C +ATOM 2457 CB PRO C 107 22.669 -7.264 6.240 1.00 97.37 C +ATOM 2458 O PRO C 107 22.822 -4.093 6.276 1.00 97.37 O +ATOM 2459 CG PRO C 107 21.676 -7.090 5.137 1.00 97.37 C +ATOM 2460 CD PRO C 107 20.409 -6.532 5.718 1.00 97.37 C +ATOM 2461 N VAL C 108 24.123 -4.808 7.956 1.00 96.99 N +ATOM 2462 CA VAL C 108 25.141 -3.770 7.840 1.00 96.99 C +ATOM 2463 C VAL C 108 26.373 -4.329 7.132 1.00 96.99 C +ATOM 2464 CB VAL C 108 25.533 -3.202 9.222 1.00 96.99 C +ATOM 2465 O VAL C 108 27.047 -5.220 7.655 1.00 96.99 O +ATOM 2466 CG1 VAL C 108 26.535 -2.058 9.073 1.00 96.99 C +ATOM 2467 CG2 VAL C 108 24.291 -2.734 9.978 1.00 96.99 C +ATOM 2468 N ILE C 109 26.641 -3.809 5.974 1.00 92.93 N +ATOM 2469 CA ILE C 109 27.695 -4.369 5.136 1.00 92.93 C +ATOM 2470 C ILE C 109 28.702 -3.279 4.776 1.00 92.93 C +ATOM 2471 CB ILE C 109 27.118 -5.009 3.853 1.00 92.93 C +ATOM 2472 O ILE C 109 28.317 -2.163 4.420 1.00 92.93 O +ATOM 2473 CG1 ILE C 109 26.175 -6.164 4.211 1.00 92.93 C +ATOM 2474 CG2 ILE C 109 28.245 -5.487 2.934 1.00 92.93 C +ATOM 2475 CD1 ILE C 109 25.493 -6.801 3.008 1.00 92.93 C +ATOM 2476 N GLN C 110 30.014 -3.533 4.883 1.00 90.32 N +ATOM 2477 CA GLN C 110 31.121 -2.710 4.408 1.00 90.32 C +ATOM 2478 C GLN C 110 31.864 -3.394 3.264 1.00 90.32 C +ATOM 2479 CB GLN C 110 32.089 -2.400 5.550 1.00 90.32 C +ATOM 2480 O GLN C 110 32.568 -4.383 3.477 1.00 90.32 O +ATOM 2481 CG GLN C 110 33.180 -1.404 5.179 1.00 90.32 C +ATOM 2482 CD GLN C 110 33.946 -0.896 6.386 1.00 90.32 C +ATOM 2483 NE2 GLN C 110 34.270 0.393 6.383 1.00 90.32 N +ATOM 2484 OE1 GLN C 110 34.244 -1.655 7.314 1.00 90.32 O +ATOM 2485 N GLY C 111 31.685 -2.842 2.047 1.00 83.11 N +ATOM 2486 CA GLY C 111 32.207 -3.571 0.902 1.00 83.11 C +ATOM 2487 C GLY C 111 31.516 -4.902 0.677 1.00 83.11 C +ATOM 2488 O GLY C 111 30.320 -4.944 0.381 1.00 83.11 O +ATOM 2489 N LYS C 112 32.347 -5.969 0.941 1.00 83.12 N +ATOM 2490 CA LYS C 112 31.792 -7.309 0.773 1.00 83.12 C +ATOM 2491 C LYS C 112 31.678 -8.028 2.114 1.00 83.12 C +ATOM 2492 CB LYS C 112 32.650 -8.129 -0.191 1.00 83.12 C +ATOM 2493 O LYS C 112 31.289 -9.197 2.166 1.00 83.12 O +ATOM 2494 CG LYS C 112 32.621 -7.625 -1.627 1.00 83.12 C +ATOM 2495 CD LYS C 112 33.320 -8.594 -2.573 1.00 83.12 C +ATOM 2496 CE LYS C 112 33.230 -8.126 -4.019 1.00 83.12 C +ATOM 2497 NZ LYS C 112 33.877 -9.094 -4.955 1.00 83.12 N +ATOM 2498 N THR C 113 31.880 -7.273 3.131 1.00 89.79 N +ATOM 2499 CA THR C 113 31.947 -7.916 4.439 1.00 89.79 C +ATOM 2500 C THR C 113 30.691 -7.618 5.253 1.00 89.79 C +ATOM 2501 CB THR C 113 33.191 -7.459 5.223 1.00 89.79 C +ATOM 2502 O THR C 113 30.296 -6.458 5.392 1.00 89.79 O +ATOM 2503 CG2 THR C 113 33.337 -8.239 6.526 1.00 89.79 C +ATOM 2504 OG1 THR C 113 34.359 -7.669 4.420 1.00 89.79 O +ATOM 2505 N LEU C 114 30.113 -8.627 5.706 1.00 94.10 N +ATOM 2506 CA LEU C 114 28.971 -8.506 6.606 1.00 94.10 C +ATOM 2507 C LEU C 114 29.428 -8.166 8.021 1.00 94.10 C +ATOM 2508 CB LEU C 114 28.157 -9.802 6.618 1.00 94.10 C +ATOM 2509 O LEU C 114 30.161 -8.938 8.643 1.00 94.10 O +ATOM 2510 CG LEU C 114 26.961 -9.844 7.571 1.00 94.10 C +ATOM 2511 CD1 LEU C 114 25.901 -8.838 7.134 1.00 94.10 C +ATOM 2512 CD2 LEU C 114 26.377 -11.251 7.635 1.00 94.10 C +ATOM 2513 N LEU C 115 28.990 -7.057 8.643 1.00 95.81 N +ATOM 2514 CA LEU C 115 29.432 -6.612 9.960 1.00 95.81 C +ATOM 2515 C LEU C 115 28.397 -6.956 11.025 1.00 95.81 C +ATOM 2516 CB LEU C 115 29.695 -5.104 9.956 1.00 95.81 C +ATOM 2517 O LEU C 115 28.748 -7.207 12.180 1.00 95.81 O +ATOM 2518 CG LEU C 115 30.818 -4.614 9.041 1.00 95.81 C +ATOM 2519 CD1 LEU C 115 31.032 -3.114 9.219 1.00 95.81 C +ATOM 2520 CD2 LEU C 115 32.107 -5.379 9.319 1.00 95.81 C +ATOM 2521 N GLY C 116 27.137 -6.905 10.618 1.00 96.58 N +ATOM 2522 CA GLY C 116 26.062 -7.144 11.568 1.00 96.58 C +ATOM 2523 C GLY C 116 24.683 -6.913 10.980 1.00 96.58 C +ATOM 2524 O GLY C 116 24.504 -6.973 9.762 1.00 96.58 O +ATOM 2525 N ILE C 117 23.650 -6.828 11.882 1.00 97.31 N +ATOM 2526 CA ILE C 117 22.266 -6.518 11.544 1.00 97.31 C +ATOM 2527 C ILE C 117 21.774 -5.352 12.399 1.00 97.31 C +ATOM 2528 CB ILE C 117 21.348 -7.746 11.735 1.00 97.31 C +ATOM 2529 O ILE C 117 22.075 -5.279 13.593 1.00 97.31 O +ATOM 2530 CG1 ILE C 117 21.706 -8.842 10.724 1.00 97.31 C +ATOM 2531 CG2 ILE C 117 19.876 -7.345 11.610 1.00 97.31 C +ATOM 2532 CD1 ILE C 117 20.921 -10.134 10.909 1.00 97.31 C +ATOM 2533 N ILE C 118 21.137 -4.441 11.853 1.00 97.98 N +ATOM 2534 CA ILE C 118 20.537 -3.336 12.594 1.00 97.98 C +ATOM 2535 C ILE C 118 19.018 -3.386 12.455 1.00 97.98 C +ATOM 2536 CB ILE C 118 21.076 -1.972 12.108 1.00 97.98 C +ATOM 2537 O ILE C 118 18.496 -3.682 11.377 1.00 97.98 O +ATOM 2538 CG1 ILE C 118 20.536 -0.840 12.990 1.00 97.98 C +ATOM 2539 CG2 ILE C 118 20.713 -1.741 10.638 1.00 97.98 C +ATOM 2540 CD1 ILE C 118 21.288 0.475 12.838 1.00 97.98 C +ATOM 2541 N SER C 119 18.321 -3.112 13.498 1.00 97.75 N +ATOM 2542 CA SER C 119 16.864 -3.189 13.497 1.00 97.75 C +ATOM 2543 C SER C 119 16.246 -1.972 14.177 1.00 97.75 C +ATOM 2544 CB SER C 119 16.395 -4.466 14.196 1.00 97.75 C +ATOM 2545 O SER C 119 16.955 -1.165 14.781 1.00 97.75 O +ATOM 2546 OG SER C 119 16.626 -4.389 15.592 1.00 97.75 O +ATOM 2547 N VAL C 120 14.955 -1.853 14.080 1.00 97.87 N +ATOM 2548 CA VAL C 120 14.213 -0.809 14.779 1.00 97.87 C +ATOM 2549 C VAL C 120 14.425 -0.945 16.285 1.00 97.87 C +ATOM 2550 CB VAL C 120 12.706 -0.865 14.446 1.00 97.87 C +ATOM 2551 O VAL C 120 14.462 0.055 17.006 1.00 97.87 O +ATOM 2552 CG1 VAL C 120 12.462 -0.499 12.983 1.00 97.87 C +ATOM 2553 CG2 VAL C 120 12.142 -2.250 14.755 1.00 97.87 C +ATOM 2554 N SER C 121 14.612 -2.143 16.780 1.00 97.12 N +ATOM 2555 CA SER C 121 14.875 -2.367 18.197 1.00 97.12 C +ATOM 2556 C SER C 121 16.217 -1.774 18.611 1.00 97.12 C +ATOM 2557 CB SER C 121 14.847 -3.862 18.518 1.00 97.12 C +ATOM 2558 O SER C 121 16.329 -1.159 19.674 1.00 97.12 O +ATOM 2559 OG SER C 121 13.558 -4.402 18.285 1.00 97.12 O +ATOM 2560 N ASP C 122 17.142 -1.986 17.757 1.00 97.47 N +ATOM 2561 CA ASP C 122 18.448 -1.402 18.045 1.00 97.47 C +ATOM 2562 C ASP C 122 18.359 0.119 18.144 1.00 97.47 C +ATOM 2563 CB ASP C 122 19.463 -1.802 16.973 1.00 97.47 C +ATOM 2564 O ASP C 122 18.941 0.723 19.047 1.00 97.47 O +ATOM 2565 CG ASP C 122 19.820 -3.277 17.015 1.00 97.47 C +ATOM 2566 OD1 ASP C 122 19.987 -3.833 18.122 1.00 97.47 O +ATOM 2567 OD2 ASP C 122 19.938 -3.889 15.931 1.00 97.47 O +ATOM 2568 N ILE C 123 17.640 0.701 17.228 1.00 98.06 N +ATOM 2569 CA ILE C 123 17.491 2.153 17.225 1.00 98.06 C +ATOM 2570 C ILE C 123 16.792 2.602 18.506 1.00 98.06 C +ATOM 2571 CB ILE C 123 16.706 2.638 15.987 1.00 98.06 C +ATOM 2572 O ILE C 123 17.237 3.544 19.166 1.00 98.06 O +ATOM 2573 CG1 ILE C 123 17.493 2.341 14.705 1.00 98.06 C +ATOM 2574 CG2 ILE C 123 16.389 4.132 16.100 1.00 98.06 C +ATOM 2575 CD1 ILE C 123 16.715 2.611 13.424 1.00 98.06 C +ATOM 2576 N LEU C 124 15.797 1.915 18.887 1.00 98.25 N +ATOM 2577 CA LEU C 124 15.015 2.299 20.058 1.00 98.25 C +ATOM 2578 C LEU C 124 15.828 2.122 21.336 1.00 98.25 C +ATOM 2579 CB LEU C 124 13.729 1.471 20.139 1.00 98.25 C +ATOM 2580 O LEU C 124 15.876 3.024 22.176 1.00 98.25 O +ATOM 2581 CG LEU C 124 12.727 1.880 21.219 1.00 98.25 C +ATOM 2582 CD1 LEU C 124 11.869 3.044 20.733 1.00 98.25 C +ATOM 2583 CD2 LEU C 124 11.854 0.694 21.615 1.00 98.25 C +ATOM 2584 N PHE C 125 16.512 1.055 21.508 1.00 97.68 N +ATOM 2585 CA PHE C 125 17.100 0.672 22.786 1.00 97.68 C +ATOM 2586 C PHE C 125 18.518 1.216 22.914 1.00 97.68 C +ATOM 2587 CB PHE C 125 17.107 -0.852 22.941 1.00 97.68 C +ATOM 2588 O PHE C 125 19.004 1.442 24.025 1.00 97.68 O +ATOM 2589 CG PHE C 125 15.758 -1.436 23.265 1.00 97.68 C +ATOM 2590 CD1 PHE C 125 15.219 -1.309 24.539 1.00 97.68 C +ATOM 2591 CD2 PHE C 125 15.029 -2.111 22.295 1.00 97.68 C +ATOM 2592 CE1 PHE C 125 13.971 -1.848 24.842 1.00 97.68 C +ATOM 2593 CE2 PHE C 125 13.781 -2.652 22.590 1.00 97.68 C +ATOM 2594 CZ PHE C 125 13.254 -2.520 23.865 1.00 97.68 C +ATOM 2595 N LYS C 126 19.172 1.433 21.788 1.00 97.41 N +ATOM 2596 CA LYS C 126 20.608 1.674 21.899 1.00 97.41 C +ATOM 2597 C LYS C 126 20.974 3.060 21.376 1.00 97.41 C +ATOM 2598 CB LYS C 126 21.392 0.603 21.139 1.00 97.41 C +ATOM 2599 O LYS C 126 22.069 3.560 21.643 1.00 97.41 O +ATOM 2600 CG LYS C 126 21.120 -0.817 21.614 1.00 97.41 C +ATOM 2601 CD LYS C 126 21.898 -1.839 20.795 1.00 97.41 C +ATOM 2602 CE LYS C 126 21.481 -3.264 21.135 1.00 97.41 C +ATOM 2603 NZ LYS C 126 22.101 -4.258 20.209 1.00 97.41 N +ATOM 2604 N SER C 127 20.112 3.717 20.680 1.00 96.38 N +ATOM 2605 CA SER C 127 20.480 4.993 20.077 1.00 96.38 C +ATOM 2606 C SER C 127 20.198 6.155 21.024 1.00 96.38 C +ATOM 2607 CB SER C 127 19.727 5.203 18.762 1.00 96.38 C +ATOM 2608 O SER C 127 19.752 5.946 22.154 1.00 96.38 O +ATOM 2609 OG SER C 127 18.423 5.702 19.003 1.00 96.38 O +ATOM 2610 N ASP C 128 20.553 7.339 20.544 1.00 95.76 N +ATOM 2611 CA ASP C 128 20.414 8.526 21.382 1.00 95.76 C +ATOM 2612 C ASP C 128 19.420 9.513 20.776 1.00 95.76 C +ATOM 2613 CB ASP C 128 21.771 9.203 21.585 1.00 95.76 C +ATOM 2614 O ASP C 128 19.539 10.724 20.975 1.00 95.76 O +ATOM 2615 CG ASP C 128 22.419 9.633 20.281 1.00 95.76 C +ATOM 2616 OD1 ASP C 128 21.851 9.365 19.200 1.00 95.76 O +ATOM 2617 OD2 ASP C 128 23.509 10.243 20.334 1.00 95.76 O +ATOM 2618 N PHE C 129 18.465 9.025 20.058 1.00 95.24 N +ATOM 2619 CA PHE C 129 17.551 9.919 19.356 1.00 95.24 C +ATOM 2620 C PHE C 129 16.640 10.644 20.340 1.00 95.24 C +ATOM 2621 CB PHE C 129 16.711 9.140 18.339 1.00 95.24 C +ATOM 2622 O PHE C 129 16.082 11.695 20.019 1.00 95.24 O +ATOM 2623 CG PHE C 129 15.643 8.283 18.963 1.00 95.24 C +ATOM 2624 CD1 PHE C 129 15.928 6.987 19.378 1.00 95.24 C +ATOM 2625 CD2 PHE C 129 14.355 8.772 19.134 1.00 95.24 C +ATOM 2626 CE1 PHE C 129 14.942 6.191 19.956 1.00 95.24 C +ATOM 2627 CE2 PHE C 129 13.364 7.982 19.711 1.00 95.24 C +ATOM 2628 CZ PHE C 129 13.659 6.692 20.120 1.00 95.24 C +ATOM 2629 N VAL C 130 16.444 10.073 21.527 1.00 96.79 N +ATOM 2630 CA VAL C 130 15.640 10.742 22.544 1.00 96.79 C +ATOM 2631 C VAL C 130 16.430 11.900 23.149 1.00 96.79 C +ATOM 2632 CB VAL C 130 15.197 9.762 23.653 1.00 96.79 C +ATOM 2633 O VAL C 130 15.908 13.009 23.289 1.00 96.79 O +ATOM 2634 CG1 VAL C 130 14.508 10.510 24.792 1.00 96.79 C +ATOM 2635 CG2 VAL C 130 14.274 8.688 23.079 1.00 96.79 C +ATOM 2636 N GLU C 131 17.691 11.658 23.443 1.00 94.46 N +ATOM 2637 CA GLU C 131 18.545 12.644 24.097 1.00 94.46 C +ATOM 2638 C GLU C 131 18.979 13.733 23.119 1.00 94.46 C +ATOM 2639 CB GLU C 131 19.775 11.969 24.711 1.00 94.46 C +ATOM 2640 O GLU C 131 19.074 14.905 23.490 1.00 94.46 O +ATOM 2641 CG GLU C 131 19.446 11.001 25.838 1.00 94.46 C +ATOM 2642 CD GLU C 131 18.953 9.650 25.344 1.00 94.46 C +ATOM 2643 OE1 GLU C 131 18.368 8.887 26.146 1.00 94.46 O +ATOM 2644 OE2 GLU C 131 19.154 9.352 24.146 1.00 94.46 O +ATOM 2645 N LYS C 132 19.225 13.303 21.896 1.00 92.26 N +ATOM 2646 CA LYS C 132 19.721 14.240 20.892 1.00 92.26 C +ATOM 2647 C LYS C 132 18.884 14.173 19.618 1.00 92.26 C +ATOM 2648 CB LYS C 132 21.189 13.955 20.571 1.00 92.26 C +ATOM 2649 O LYS C 132 19.392 13.809 18.554 1.00 92.26 O +ATOM 2650 CG LYS C 132 22.116 14.055 21.774 1.00 92.26 C +ATOM 2651 CD LYS C 132 23.558 13.745 21.395 1.00 92.26 C +ATOM 2652 CE LYS C 132 24.472 13.757 22.612 1.00 92.26 C +ATOM 2653 NZ LYS C 132 25.869 13.361 22.261 1.00 92.26 N +ATOM 2654 N PRO C 133 17.713 14.713 19.784 1.00 90.82 N +ATOM 2655 CA PRO C 133 16.932 14.749 18.546 1.00 90.82 C +ATOM 2656 C PRO C 133 17.549 15.658 17.485 1.00 90.82 C +ATOM 2657 CB PRO C 133 15.573 15.286 19.002 1.00 90.82 C +ATOM 2658 O PRO C 133 18.102 16.710 17.815 1.00 90.82 O +ATOM 2659 CG PRO C 133 15.863 16.041 20.259 1.00 90.82 C +ATOM 2660 CD PRO C 133 17.108 15.475 20.879 1.00 90.82 C +ATOM 2661 N LYS C 134 17.506 15.197 16.183 1.00 86.36 N +ATOM 2662 CA LYS C 134 18.184 15.943 15.127 1.00 86.36 C +ATOM 2663 C LYS C 134 17.215 16.313 14.008 1.00 86.36 C +ATOM 2664 CB LYS C 134 19.353 15.134 14.563 1.00 86.36 C +ATOM 2665 O LYS C 134 16.496 15.455 13.493 1.00 86.36 O +ATOM 2666 CG LYS C 134 20.478 14.895 15.559 1.00 86.36 C +ATOM 2667 CD LYS C 134 21.607 14.080 14.942 1.00 86.36 C +ATOM 2668 CE LYS C 134 22.690 13.760 15.963 1.00 86.36 C +ATOM 2669 NZ LYS C 134 23.766 12.903 15.380 1.00 86.36 N +ATOM 2670 N ARG C 135 17.212 17.602 13.664 1.00 88.55 N +ATOM 2671 CA ARG C 135 16.544 18.045 12.444 1.00 88.55 C +ATOM 2672 C ARG C 135 17.366 17.689 11.210 1.00 88.55 C +ATOM 2673 CB ARG C 135 16.289 19.553 12.487 1.00 88.55 C +ATOM 2674 O ARG C 135 18.386 18.323 10.933 1.00 88.55 O +ATOM 2675 CG ARG C 135 15.282 20.037 11.456 1.00 88.55 C +ATOM 2676 CD ARG C 135 14.811 21.455 11.751 1.00 88.55 C +ATOM 2677 NE ARG C 135 13.772 21.882 10.819 1.00 88.55 N +ATOM 2678 NH1 ARG C 135 13.208 23.787 11.998 1.00 88.55 N +ATOM 2679 NH2 ARG C 135 12.114 23.274 10.050 1.00 88.55 N +ATOM 2680 CZ ARG C 135 13.034 22.980 10.958 1.00 88.55 C +ATOM 2681 N LEU C 136 17.003 16.845 10.465 1.00 87.38 N +ATOM 2682 CA LEU C 136 17.810 16.155 9.464 1.00 87.38 C +ATOM 2683 C LEU C 136 18.250 17.116 8.365 1.00 87.38 C +ATOM 2684 CB LEU C 136 17.026 14.989 8.855 1.00 87.38 C +ATOM 2685 O LEU C 136 19.405 17.084 7.932 1.00 87.38 O +ATOM 2686 CG LEU C 136 16.717 13.819 9.790 1.00 87.38 C +ATOM 2687 CD1 LEU C 136 15.806 12.812 9.095 1.00 87.38 C +ATOM 2688 CD2 LEU C 136 18.007 13.150 10.254 1.00 87.38 C +ATOM 2689 N PHE C 137 17.459 18.076 7.965 1.00 92.83 N +ATOM 2690 CA PHE C 137 17.788 18.900 6.808 1.00 92.83 C +ATOM 2691 C PHE C 137 17.945 20.361 7.212 1.00 92.83 C +ATOM 2692 CB PHE C 137 16.710 18.768 5.727 1.00 92.83 C +ATOM 2693 O PHE C 137 17.602 21.263 6.445 1.00 92.83 O +ATOM 2694 CG PHE C 137 16.443 17.347 5.307 1.00 92.83 C +ATOM 2695 CD1 PHE C 137 17.480 16.529 4.877 1.00 92.83 C +ATOM 2696 CD2 PHE C 137 15.155 16.831 5.343 1.00 92.83 C +ATOM 2697 CE1 PHE C 137 17.237 15.214 4.487 1.00 92.83 C +ATOM 2698 CE2 PHE C 137 14.903 15.518 4.955 1.00 92.83 C +ATOM 2699 CZ PHE C 137 15.945 14.711 4.527 1.00 92.83 C +ATOM 2700 N ILE C 138 18.411 20.584 8.396 1.00 92.99 N +ATOM 2701 CA ILE C 138 18.498 21.930 8.952 1.00 92.99 C +ATOM 2702 C ILE C 138 19.471 22.768 8.126 1.00 92.99 C +ATOM 2703 CB ILE C 138 18.938 21.902 10.433 1.00 92.99 C +ATOM 2704 O ILE C 138 19.248 23.963 7.918 1.00 92.99 O +ATOM 2705 CG1 ILE C 138 18.838 23.304 11.046 1.00 92.99 C +ATOM 2706 CG2 ILE C 138 20.359 21.347 10.564 1.00 92.99 C +ATOM 2707 CD1 ILE C 138 17.411 23.811 11.203 1.00 92.99 C +ATOM 2708 N GLU C 139 20.522 22.116 7.628 1.00 93.05 N +ATOM 2709 CA GLU C 139 21.486 22.863 6.827 1.00 93.05 C +ATOM 2710 C GLU C 139 20.869 23.325 5.510 1.00 93.05 C +ATOM 2711 CB GLU C 139 22.732 22.016 6.555 1.00 93.05 C +ATOM 2712 O GLU C 139 21.082 24.462 5.083 1.00 93.05 O +ATOM 2713 CG GLU C 139 23.531 21.679 7.806 1.00 93.05 C +ATOM 2714 CD GLU C 139 24.066 22.907 8.525 1.00 93.05 C +ATOM 2715 OE1 GLU C 139 24.204 22.870 9.769 1.00 93.05 O +ATOM 2716 OE2 GLU C 139 24.348 23.915 7.839 1.00 93.05 O +ATOM 2717 N ASP C 140 20.146 22.485 4.873 1.00 95.04 N +ATOM 2718 CA ASP C 140 19.434 22.869 3.658 1.00 95.04 C +ATOM 2719 C ASP C 140 18.418 23.973 3.941 1.00 95.04 C +ATOM 2720 CB ASP C 140 18.734 21.656 3.041 1.00 95.04 C +ATOM 2721 O ASP C 140 18.287 24.918 3.161 1.00 95.04 O +ATOM 2722 CG ASP C 140 19.700 20.682 2.388 1.00 95.04 C +ATOM 2723 OD1 ASP C 140 20.695 21.127 1.776 1.00 95.04 O +ATOM 2724 OD2 ASP C 140 19.462 19.459 2.485 1.00 95.04 O +ATOM 2725 N GLU C 141 17.758 23.849 5.011 1.00 96.36 N +ATOM 2726 CA GLU C 141 16.760 24.844 5.391 1.00 96.36 C +ATOM 2727 C GLU C 141 17.399 26.213 5.605 1.00 96.36 C +ATOM 2728 CB GLU C 141 16.019 24.406 6.657 1.00 96.36 C +ATOM 2729 O GLU C 141 16.831 27.236 5.216 1.00 96.36 O +ATOM 2730 CG GLU C 141 15.137 23.182 6.461 1.00 96.36 C +ATOM 2731 CD GLU C 141 14.469 22.712 7.743 1.00 96.36 C +ATOM 2732 OE1 GLU C 141 14.397 21.484 7.976 1.00 96.36 O +ATOM 2733 OE2 GLU C 141 14.012 23.579 8.521 1.00 96.36 O +ATOM 2734 N ILE C 142 18.555 26.204 6.286 1.00 96.38 N +ATOM 2735 CA ILE C 142 19.273 27.447 6.542 1.00 96.38 C +ATOM 2736 C ILE C 142 19.670 28.096 5.218 1.00 96.38 C +ATOM 2737 CB ILE C 142 20.523 27.208 7.418 1.00 96.38 C +ATOM 2738 O ILE C 142 19.461 29.295 5.020 1.00 96.38 O +ATOM 2739 CG1 ILE C 142 20.111 26.848 8.850 1.00 96.38 C +ATOM 2740 CG2 ILE C 142 21.436 28.438 7.403 1.00 96.38 C +ATOM 2741 CD1 ILE C 142 21.253 26.321 9.708 1.00 96.38 C +ATOM 2742 N GLU C 143 20.170 27.299 4.333 1.00 96.35 N +ATOM 2743 CA GLU C 143 20.574 27.828 3.033 1.00 96.35 C +ATOM 2744 C GLU C 143 19.375 28.373 2.262 1.00 96.35 C +ATOM 2745 CB GLU C 143 21.283 26.749 2.210 1.00 96.35 C +ATOM 2746 O GLU C 143 19.445 29.458 1.681 1.00 96.35 O +ATOM 2747 CG GLU C 143 21.954 27.277 0.951 1.00 96.35 C +ATOM 2748 CD GLU C 143 22.792 26.231 0.233 1.00 96.35 C +ATOM 2749 OE1 GLU C 143 23.337 26.531 -0.853 1.00 96.35 O +ATOM 2750 OE2 GLU C 143 22.903 25.102 0.761 1.00 96.35 O +ATOM 2751 N ALA C 144 18.350 27.697 2.277 1.00 96.54 N +ATOM 2752 CA ALA C 144 17.129 28.154 1.617 1.00 96.54 C +ATOM 2753 C ALA C 144 16.626 29.455 2.236 1.00 96.54 C +ATOM 2754 CB ALA C 144 16.048 27.079 1.695 1.00 96.54 C +ATOM 2755 O ALA C 144 16.254 30.387 1.519 1.00 96.54 O +ATOM 2756 N ALA C 145 16.639 29.491 3.547 1.00 97.07 N +ATOM 2757 CA ALA C 145 16.187 30.689 4.250 1.00 97.07 C +ATOM 2758 C ALA C 145 17.072 31.887 3.920 1.00 97.07 C +ATOM 2759 CB ALA C 145 16.167 30.444 5.757 1.00 97.07 C +ATOM 2760 O ALA C 145 16.584 33.013 3.801 1.00 97.07 O +ATOM 2761 N ARG C 146 18.355 31.663 3.809 1.00 97.64 N +ATOM 2762 CA ARG C 146 19.280 32.727 3.431 1.00 97.64 C +ATOM 2763 C ARG C 146 18.948 33.275 2.048 1.00 97.64 C +ATOM 2764 CB ARG C 146 20.723 32.220 3.462 1.00 97.64 C +ATOM 2765 O ARG C 146 18.911 34.491 1.848 1.00 97.64 O +ATOM 2766 CG ARG C 146 21.315 32.128 4.859 1.00 97.64 C +ATOM 2767 CD ARG C 146 22.734 31.578 4.836 1.00 97.64 C +ATOM 2768 NE ARG C 146 23.319 31.539 6.174 1.00 97.64 N +ATOM 2769 NH1 ARG C 146 25.156 30.281 5.558 1.00 97.64 N +ATOM 2770 NH2 ARG C 146 24.897 30.951 7.735 1.00 97.64 N +ATOM 2771 CZ ARG C 146 24.456 30.924 6.486 1.00 97.64 C +ATOM 2772 N GLU C 147 18.738 32.384 1.165 1.00 96.27 N +ATOM 2773 CA GLU C 147 18.387 32.801 -0.190 1.00 96.27 C +ATOM 2774 C GLU C 147 17.067 33.566 -0.207 1.00 96.27 C +ATOM 2775 CB GLU C 147 18.305 31.589 -1.122 1.00 96.27 C +ATOM 2776 O GLU C 147 16.942 34.583 -0.892 1.00 96.27 O +ATOM 2777 CG GLU C 147 19.656 30.963 -1.436 1.00 96.27 C +ATOM 2778 CD GLU C 147 19.557 29.744 -2.339 1.00 96.27 C +ATOM 2779 OE1 GLU C 147 20.598 29.104 -2.612 1.00 96.27 O +ATOM 2780 OE2 GLU C 147 18.429 29.427 -2.779 1.00 96.27 O +ATOM 2781 N ASP C 148 16.156 33.115 0.545 1.00 95.97 N +ATOM 2782 CA ASP C 148 14.871 33.800 0.640 1.00 95.97 C +ATOM 2783 C ASP C 148 15.036 35.198 1.233 1.00 95.97 C +ATOM 2784 CB ASP C 148 13.889 32.984 1.484 1.00 95.97 C +ATOM 2785 O ASP C 148 14.437 36.159 0.746 1.00 95.97 O +ATOM 2786 CG ASP C 148 13.388 31.740 0.772 1.00 95.97 C +ATOM 2787 OD1 ASP C 148 13.632 31.593 -0.445 1.00 95.97 O +ATOM 2788 OD2 ASP C 148 12.740 30.900 1.433 1.00 95.97 O +ATOM 2789 N ALA C 149 15.833 35.273 2.326 1.00 96.26 N +ATOM 2790 CA ALA C 149 16.070 36.567 2.961 1.00 96.26 C +ATOM 2791 C ALA C 149 16.712 37.547 1.983 1.00 96.26 C +ATOM 2792 CB ALA C 149 16.950 36.400 4.197 1.00 96.26 C +ATOM 2793 O ALA C 149 16.294 38.704 1.890 1.00 96.26 O +ATOM 2794 N ARG C 150 17.636 37.057 1.228 1.00 96.60 N +ATOM 2795 CA ARG C 150 18.287 37.903 0.232 1.00 96.60 C +ATOM 2796 C ARG C 150 17.288 38.385 -0.814 1.00 96.60 C +ATOM 2797 CB ARG C 150 19.435 37.151 -0.445 1.00 96.60 C +ATOM 2798 O ARG C 150 17.282 39.562 -1.179 1.00 96.60 O +ATOM 2799 CG ARG C 150 20.670 36.996 0.428 1.00 96.60 C +ATOM 2800 CD ARG C 150 21.762 36.204 -0.277 1.00 96.60 C +ATOM 2801 NE ARG C 150 22.861 35.878 0.628 1.00 96.60 N +ATOM 2802 NH1 ARG C 150 23.704 34.169 -0.678 1.00 96.60 N +ATOM 2803 NH2 ARG C 150 24.717 34.708 1.306 1.00 96.60 N +ATOM 2804 CZ ARG C 150 23.758 34.919 0.417 1.00 96.60 C +ATOM 2805 N ALA C 151 16.471 37.523 -1.259 1.00 95.41 N +ATOM 2806 CA ALA C 151 15.486 37.859 -2.284 1.00 95.41 C +ATOM 2807 C ALA C 151 14.463 38.859 -1.755 1.00 95.41 C +ATOM 2808 CB ALA C 151 14.785 36.597 -2.781 1.00 95.41 C +ATOM 2809 O ALA C 151 14.117 39.825 -2.441 1.00 95.41 O +ATOM 2810 N ILE C 152 13.960 38.659 -0.562 1.00 96.05 N +ATOM 2811 CA ILE C 152 12.964 39.535 0.044 1.00 96.05 C +ATOM 2812 C ILE C 152 13.562 40.923 0.262 1.00 96.05 C +ATOM 2813 CB ILE C 152 12.443 38.960 1.380 1.00 96.05 C +ATOM 2814 O ILE C 152 12.917 41.935 -0.019 1.00 96.05 O +ATOM 2815 CG1 ILE C 152 11.596 37.707 1.128 1.00 96.05 C +ATOM 2816 CG2 ILE C 152 11.643 40.016 2.147 1.00 96.05 C +ATOM 2817 CD1 ILE C 152 11.283 36.908 2.386 1.00 96.05 C +ATOM 2818 N CYS C 153 14.853 41.015 0.752 1.00 95.32 N +ATOM 2819 CA CYS C 153 15.512 42.296 0.981 1.00 95.32 C +ATOM 2820 C CYS C 153 15.752 43.028 -0.334 1.00 95.32 C +ATOM 2821 CB CYS C 153 16.839 42.093 1.711 1.00 95.32 C +ATOM 2822 O CYS C 153 15.629 44.252 -0.400 1.00 95.32 O +ATOM 2823 SG CYS C 153 16.652 41.512 3.411 1.00 95.32 S +ATOM 2824 N ALA C 154 16.020 42.326 -1.387 1.00 96.43 N +ATOM 2825 CA ALA C 154 16.207 42.931 -2.704 1.00 96.43 C +ATOM 2826 C ALA C 154 14.896 43.499 -3.238 1.00 96.43 C +ATOM 2827 CB ALA C 154 16.779 41.909 -3.683 1.00 96.43 C +ATOM 2828 O ALA C 154 14.877 44.577 -3.836 1.00 96.43 O +ATOM 2829 N ALA C 155 13.833 42.829 -2.992 1.00 94.95 N +ATOM 2830 CA ALA C 155 12.533 43.222 -3.530 1.00 94.95 C +ATOM 2831 C ALA C 155 11.899 44.322 -2.683 1.00 94.95 C +ATOM 2832 CB ALA C 155 11.602 42.014 -3.609 1.00 94.95 C +ATOM 2833 O ALA C 155 11.288 45.251 -3.218 1.00 94.95 O +ATOM 2834 N LYS C 156 12.039 44.245 -1.353 1.00 95.51 N +ATOM 2835 CA LYS C 156 11.282 45.133 -0.475 1.00 95.51 C +ATOM 2836 C LYS C 156 12.192 46.175 0.169 1.00 95.51 C +ATOM 2837 CB LYS C 156 10.559 44.329 0.607 1.00 95.51 C +ATOM 2838 O LYS C 156 11.714 47.110 0.815 1.00 95.51 O +ATOM 2839 CG LYS C 156 9.516 43.362 0.066 1.00 95.51 C +ATOM 2840 CD LYS C 156 8.529 42.942 1.148 1.00 95.51 C +ATOM 2841 CE LYS C 156 7.421 42.063 0.585 1.00 95.51 C +ATOM 2842 NZ LYS C 156 6.432 41.676 1.635 1.00 95.51 N +ATOM 2843 N GLY C 157 13.467 46.059 0.030 1.00 94.90 N +ATOM 2844 CA GLY C 157 14.431 46.986 0.602 1.00 94.90 C +ATOM 2845 C GLY C 157 15.155 46.423 1.811 1.00 94.90 C +ATOM 2846 O GLY C 157 14.571 45.675 2.598 1.00 94.90 O +ATOM 2847 N GLU C 158 16.419 46.691 2.061 1.00 92.78 N +ATOM 2848 CA GLU C 158 17.292 46.156 3.101 1.00 92.78 C +ATOM 2849 C GLU C 158 16.827 46.588 4.488 1.00 92.78 C +ATOM 2850 CB GLU C 158 18.739 46.599 2.870 1.00 92.78 C +ATOM 2851 O GLU C 158 17.073 45.893 5.476 1.00 92.78 O +ATOM 2852 CG GLU C 158 19.414 45.905 1.696 1.00 92.78 C +ATOM 2853 CD GLU C 158 20.896 46.228 1.579 1.00 92.78 C +ATOM 2854 OE1 GLU C 158 21.582 45.628 0.721 1.00 92.78 O +ATOM 2855 OE2 GLU C 158 21.374 47.087 2.354 1.00 92.78 O +ATOM 2856 N THR C 159 16.128 47.771 4.555 1.00 93.51 N +ATOM 2857 CA THR C 159 15.713 48.272 5.861 1.00 93.51 C +ATOM 2858 C THR C 159 14.232 47.993 6.101 1.00 93.51 C +ATOM 2859 CB THR C 159 15.982 49.782 5.992 1.00 93.51 C +ATOM 2860 O THR C 159 13.654 48.477 7.076 1.00 93.51 O +ATOM 2861 CG2 THR C 159 17.469 50.090 5.853 1.00 93.51 C +ATOM 2862 OG1 THR C 159 15.262 50.480 4.968 1.00 93.51 O +ATOM 2863 N SER C 160 13.563 47.240 5.248 1.00 94.91 N +ATOM 2864 CA SER C 160 12.142 46.937 5.374 1.00 94.91 C +ATOM 2865 C SER C 160 11.885 45.948 6.506 1.00 94.91 C +ATOM 2866 CB SER C 160 11.595 46.375 4.061 1.00 94.91 C +ATOM 2867 O SER C 160 12.749 45.131 6.831 1.00 94.91 O +ATOM 2868 OG SER C 160 12.022 45.037 3.870 1.00 94.91 O +ATOM 2869 N PRO C 161 10.690 46.082 7.224 1.00 96.07 N +ATOM 2870 CA PRO C 161 10.327 45.099 8.248 1.00 96.07 C +ATOM 2871 C PRO C 161 10.294 43.671 7.710 1.00 96.07 C +ATOM 2872 CB PRO C 161 8.931 45.549 8.687 1.00 96.07 C +ATOM 2873 O PRO C 161 10.628 42.727 8.432 1.00 96.07 O +ATOM 2874 CG PRO C 161 8.838 46.978 8.260 1.00 96.07 C +ATOM 2875 CD PRO C 161 9.776 47.194 7.108 1.00 96.07 C +ATOM 2876 N ASP C 162 9.943 43.508 6.512 1.00 95.25 N +ATOM 2877 CA ASP C 162 9.886 42.185 5.898 1.00 95.25 C +ATOM 2878 C ASP C 162 11.280 41.574 5.778 1.00 95.25 C +ATOM 2879 CB ASP C 162 9.225 42.262 4.520 1.00 95.25 C +ATOM 2880 O ASP C 162 11.460 40.376 6.006 1.00 95.25 O +ATOM 2881 CG ASP C 162 7.754 42.633 4.587 1.00 95.25 C +ATOM 2882 OD1 ASP C 162 7.127 42.450 5.653 1.00 95.25 O +ATOM 2883 OD2 ASP C 162 7.216 43.110 3.564 1.00 95.25 O +ATOM 2884 N CYS C 163 12.221 42.383 5.391 1.00 93.23 N +ATOM 2885 CA CYS C 163 13.604 41.930 5.296 1.00 93.23 C +ATOM 2886 C CYS C 163 14.132 41.499 6.659 1.00 93.23 C +ATOM 2887 CB CYS C 163 14.491 43.035 4.721 1.00 93.23 C +ATOM 2888 O CYS C 163 14.715 40.421 6.791 1.00 93.23 O +ATOM 2889 SG CYS C 163 16.216 42.545 4.507 1.00 93.23 S +ATOM 2890 N ALA C 164 13.830 42.312 7.671 1.00 95.60 N +ATOM 2891 CA ALA C 164 14.269 41.985 9.025 1.00 95.60 C +ATOM 2892 C ALA C 164 13.662 40.665 9.494 1.00 95.60 C +ATOM 2893 CB ALA C 164 13.900 43.109 9.990 1.00 95.60 C +ATOM 2894 O ALA C 164 14.354 39.830 10.081 1.00 95.60 O +ATOM 2895 N ALA C 165 12.439 40.492 9.237 1.00 96.36 N +ATOM 2896 CA ALA C 165 11.756 39.262 9.628 1.00 96.36 C +ATOM 2897 C ALA C 165 12.369 38.049 8.935 1.00 96.36 C +ATOM 2898 CB ALA C 165 10.266 39.356 9.309 1.00 96.36 C +ATOM 2899 O ALA C 165 12.508 36.984 9.541 1.00 96.36 O +ATOM 2900 N ALA C 166 12.724 38.156 7.677 1.00 95.98 N +ATOM 2901 CA ALA C 166 13.326 37.063 6.917 1.00 95.98 C +ATOM 2902 C ALA C 166 14.664 36.647 7.522 1.00 95.98 C +ATOM 2903 CB ALA C 166 13.508 37.466 5.456 1.00 95.98 C +ATOM 2904 O ALA C 166 14.953 35.454 7.643 1.00 95.98 O +ATOM 2905 N TRP C 167 15.431 37.591 7.892 1.00 96.45 N +ATOM 2906 CA TRP C 167 16.729 37.273 8.480 1.00 96.45 C +ATOM 2907 C TRP C 167 16.566 36.711 9.888 1.00 96.45 C +ATOM 2908 CB TRP C 167 17.623 38.516 8.513 1.00 96.45 C +ATOM 2909 O TRP C 167 17.387 35.911 10.342 1.00 96.45 O +ATOM 2910 CG TRP C 167 18.332 38.791 7.221 1.00 96.45 C +ATOM 2911 CD1 TRP C 167 18.089 39.815 6.349 1.00 96.45 C +ATOM 2912 CD2 TRP C 167 19.400 38.026 6.654 1.00 96.45 C +ATOM 2913 CE2 TRP C 167 19.757 38.645 5.436 1.00 96.45 C +ATOM 2914 CE3 TRP C 167 20.092 36.876 7.059 1.00 96.45 C +ATOM 2915 NE1 TRP C 167 18.942 39.733 5.273 1.00 96.45 N +ATOM 2916 CH2 TRP C 167 21.436 37.026 5.037 1.00 96.45 C +ATOM 2917 CZ2 TRP C 167 20.776 38.151 4.618 1.00 96.45 C +ATOM 2918 CZ3 TRP C 167 21.106 36.387 6.244 1.00 96.45 C +ATOM 2919 N ASP C 168 15.521 37.094 10.547 1.00 96.44 N +ATOM 2920 CA ASP C 168 15.222 36.497 11.845 1.00 96.44 C +ATOM 2921 C ASP C 168 15.009 34.990 11.721 1.00 96.44 C +ATOM 2922 CB ASP C 168 13.987 37.153 12.467 1.00 96.44 C +ATOM 2923 O ASP C 168 15.430 34.225 12.591 1.00 96.44 O +ATOM 2924 CG ASP C 168 14.261 38.550 12.997 1.00 96.44 C +ATOM 2925 OD1 ASP C 168 15.443 38.948 13.085 1.00 96.44 O +ATOM 2926 OD2 ASP C 168 13.287 39.257 13.333 1.00 96.44 O +ATOM 2927 N VAL C 169 14.356 34.631 10.678 1.00 96.70 N +ATOM 2928 CA VAL C 169 14.138 33.208 10.435 1.00 96.70 C +ATOM 2929 C VAL C 169 15.482 32.500 10.277 1.00 96.70 C +ATOM 2930 CB VAL C 169 13.261 32.973 9.185 1.00 96.70 C +ATOM 2931 O VAL C 169 15.700 31.433 10.856 1.00 96.70 O +ATOM 2932 CG1 VAL C 169 13.197 31.486 8.843 1.00 96.70 C +ATOM 2933 CG2 VAL C 169 11.858 33.535 9.405 1.00 96.70 C +ATOM 2934 N VAL C 170 16.384 33.045 9.549 1.00 96.62 N +ATOM 2935 CA VAL C 170 17.717 32.485 9.354 1.00 96.62 C +ATOM 2936 C VAL C 170 18.422 32.346 10.701 1.00 96.62 C +ATOM 2937 CB VAL C 170 18.563 33.356 8.397 1.00 96.62 C +ATOM 2938 O VAL C 170 18.985 31.293 11.009 1.00 96.62 O +ATOM 2939 CG1 VAL C 170 19.999 32.840 8.326 1.00 96.62 C +ATOM 2940 CG2 VAL C 170 17.933 33.385 7.006 1.00 96.62 C +ATOM 2941 N GLU C 171 18.327 33.382 11.473 1.00 96.20 N +ATOM 2942 CA GLU C 171 18.991 33.384 12.773 1.00 96.20 C +ATOM 2943 C GLU C 171 18.402 32.321 13.696 1.00 96.20 C +ATOM 2944 CB GLU C 171 18.888 34.764 13.427 1.00 96.20 C +ATOM 2945 O GLU C 171 19.135 31.648 14.424 1.00 96.20 O +ATOM 2946 CG GLU C 171 19.780 35.817 12.786 1.00 96.20 C +ATOM 2947 CD GLU C 171 19.685 37.176 13.461 1.00 96.20 C +ATOM 2948 OE1 GLU C 171 20.437 38.100 13.075 1.00 96.20 O +ATOM 2949 OE2 GLU C 171 18.854 37.318 14.385 1.00 96.20 O +ATOM 2950 N GLU C 172 17.169 32.202 13.606 1.00 95.35 N +ATOM 2951 CA GLU C 172 16.518 31.186 14.428 1.00 95.35 C +ATOM 2952 C GLU C 172 16.965 29.783 14.029 1.00 95.35 C +ATOM 2953 CB GLU C 172 14.995 31.303 14.321 1.00 95.35 C +ATOM 2954 O GLU C 172 17.267 28.954 14.890 1.00 95.35 O +ATOM 2955 CG GLU C 172 14.240 30.391 15.276 1.00 95.35 C +ATOM 2956 CD GLU C 172 12.731 30.572 15.213 1.00 95.35 C +ATOM 2957 OE1 GLU C 172 12.003 29.863 15.944 1.00 95.35 O +ATOM 2958 OE2 GLU C 172 12.274 31.430 14.425 1.00 95.35 O +ATOM 2959 N LEU C 173 17.032 29.547 12.789 1.00 95.39 N +ATOM 2960 CA LEU C 173 17.472 28.247 12.293 1.00 95.39 C +ATOM 2961 C LEU C 173 18.935 27.999 12.646 1.00 95.39 C +ATOM 2962 CB LEU C 173 17.278 28.158 10.777 1.00 95.39 C +ATOM 2963 O LEU C 173 19.303 26.889 13.038 1.00 95.39 O +ATOM 2964 CG LEU C 173 15.836 28.027 10.285 1.00 95.39 C +ATOM 2965 CD1 LEU C 173 15.774 28.206 8.772 1.00 95.39 C +ATOM 2966 CD2 LEU C 173 15.251 26.679 10.694 1.00 95.39 C +ATOM 2967 N GLN C 174 19.747 28.984 12.491 1.00 95.02 N +ATOM 2968 CA GLN C 174 21.160 28.864 12.837 1.00 95.02 C +ATOM 2969 C GLN C 174 21.341 28.594 14.327 1.00 95.02 C +ATOM 2970 CB GLN C 174 21.920 30.130 12.437 1.00 95.02 C +ATOM 2971 O GLN C 174 22.209 27.812 14.721 1.00 95.02 O +ATOM 2972 CG GLN C 174 22.170 30.250 10.940 1.00 95.02 C +ATOM 2973 CD GLN C 174 22.858 31.548 10.561 1.00 95.02 C +ATOM 2974 NE2 GLN C 174 23.827 31.465 9.656 1.00 95.02 N +ATOM 2975 OE1 GLN C 174 22.521 32.618 11.078 1.00 95.02 O +ATOM 2976 N ALA C 175 20.498 29.239 15.100 1.00 92.82 N +ATOM 2977 CA ALA C 175 20.541 28.993 16.539 1.00 92.82 C +ATOM 2978 C ALA C 175 20.194 27.542 16.858 1.00 92.82 C +ATOM 2979 CB ALA C 175 19.590 29.938 17.269 1.00 92.82 C +ATOM 2980 O ALA C 175 20.856 26.905 17.682 1.00 92.82 O +ATOM 2981 N GLU C 176 19.248 27.104 16.196 1.00 90.77 N +ATOM 2982 CA GLU C 176 18.860 25.712 16.399 1.00 90.77 C +ATOM 2983 C GLU C 176 19.967 24.760 15.956 1.00 90.77 C +ATOM 2984 CB GLU C 176 17.565 25.399 15.644 1.00 90.77 C +ATOM 2985 O GLU C 176 20.262 23.780 16.643 1.00 90.77 O +ATOM 2986 CG GLU C 176 17.048 23.985 15.869 1.00 90.77 C +ATOM 2987 CD GLU C 176 15.540 23.866 15.718 1.00 90.77 C +ATOM 2988 OE1 GLU C 176 14.996 22.756 15.913 1.00 90.77 O +ATOM 2989 OE2 GLU C 176 14.897 24.892 15.402 1.00 90.77 O +ATOM 2990 N ALA C 177 20.551 25.023 14.861 1.00 89.99 N +ATOM 2991 CA ALA C 177 21.652 24.202 14.364 1.00 89.99 C +ATOM 2992 C ALA C 177 22.821 24.200 15.345 1.00 89.99 C +ATOM 2993 CB ALA C 177 22.111 24.700 12.996 1.00 89.99 C +ATOM 2994 O ALA C 177 23.441 23.160 15.579 1.00 89.99 O +ATOM 2995 N SER C 178 23.093 25.352 15.905 1.00 87.91 N +ATOM 2996 CA SER C 178 24.173 25.464 16.880 1.00 87.91 C +ATOM 2997 C SER C 178 23.853 24.682 18.150 1.00 87.91 C +ATOM 2998 CB SER C 178 24.433 26.930 17.227 1.00 87.91 C +ATOM 2999 O SER C 178 24.727 24.020 18.714 1.00 87.91 O +ATOM 3000 OG SER C 178 24.862 27.649 16.083 1.00 87.91 O +ATOM 3001 N HIS C 179 22.607 24.828 18.550 1.00 85.80 N +ATOM 3002 CA HIS C 179 22.177 24.074 19.722 1.00 85.80 C +ATOM 3003 C HIS C 179 22.335 22.574 19.501 1.00 85.80 C +ATOM 3004 CB HIS C 179 20.723 24.403 20.067 1.00 85.80 C +ATOM 3005 O HIS C 179 22.793 21.855 20.392 1.00 85.80 O +ATOM 3006 CG HIS C 179 20.238 23.738 21.316 1.00 85.80 C +ATOM 3007 CD2 HIS C 179 20.285 24.133 22.610 1.00 85.80 C +ATOM 3008 ND1 HIS C 179 19.617 22.508 21.310 1.00 85.80 N +ATOM 3009 CE1 HIS C 179 19.302 22.175 22.551 1.00 85.80 C +ATOM 3010 NE2 HIS C 179 19.697 23.144 23.358 1.00 85.80 N +ATOM 3011 N GLN C 180 22.048 22.169 18.339 1.00 80.98 N +ATOM 3012 CA GLN C 180 22.177 20.755 18.003 1.00 80.98 C +ATOM 3013 C GLN C 180 23.638 20.315 18.024 1.00 80.98 C +ATOM 3014 CB GLN C 180 21.562 20.470 16.632 1.00 80.98 C +ATOM 3015 O GLN C 180 23.958 19.226 18.505 1.00 80.98 O +ATOM 3016 CG GLN C 180 20.039 20.479 16.627 1.00 80.98 C +ATOM 3017 CD GLN C 180 19.453 19.953 15.330 1.00 80.98 C +ATOM 3018 NE2 GLN C 180 18.369 20.571 14.876 1.00 80.98 N +ATOM 3019 OE1 GLN C 180 19.972 19.000 14.741 1.00 80.98 O +ATOM 3020 N ARG C 181 24.487 21.193 17.553 1.00 76.60 N +ATOM 3021 CA ARG C 181 25.914 20.892 17.530 1.00 76.60 C +ATOM 3022 C ARG C 181 26.499 20.901 18.938 1.00 76.60 C +ATOM 3023 CB ARG C 181 26.661 21.894 16.647 1.00 76.60 C +ATOM 3024 O ARG C 181 27.360 20.081 19.264 1.00 76.60 O +ATOM 3025 CG ARG C 181 26.403 21.716 15.159 1.00 76.60 C +ATOM 3026 CD ARG C 181 27.093 22.793 14.334 1.00 76.60 C +ATOM 3027 NE ARG C 181 26.622 22.798 12.952 1.00 76.60 N +ATOM 3028 NH1 ARG C 181 27.131 25.018 12.568 1.00 76.60 N +ATOM 3029 NH2 ARG C 181 26.195 23.749 10.905 1.00 76.60 N +ATOM 3030 CZ ARG C 181 26.651 23.855 12.145 1.00 76.60 C +ATOM 3031 N ALA C 182 26.047 21.793 19.780 1.00 69.37 N +ATOM 3032 CA ALA C 182 26.538 21.917 21.149 1.00 69.37 C +ATOM 3033 C ALA C 182 26.146 20.703 21.986 1.00 69.37 C +ATOM 3034 CB ALA C 182 26.006 23.196 21.792 1.00 69.37 C +ATOM 3035 O ALA C 182 26.945 20.205 22.782 1.00 69.37 O +ATOM 3036 N LYS C 183 24.926 20.321 21.927 1.00 64.06 N +ATOM 3037 CA LYS C 183 24.470 19.147 22.666 1.00 64.06 C +ATOM 3038 C LYS C 183 25.278 17.910 22.285 1.00 64.06 C +ATOM 3039 CB LYS C 183 22.982 18.899 22.414 1.00 64.06 C +ATOM 3040 O LYS C 183 25.527 17.042 23.124 1.00 64.06 O +ATOM 3041 CG LYS C 183 22.059 19.727 23.296 1.00 64.06 C +ATOM 3042 CD LYS C 183 20.607 19.289 23.152 1.00 64.06 C +ATOM 3043 CE LYS C 183 19.686 20.094 24.059 1.00 64.06 C +ATOM 3044 NZ LYS C 183 18.257 19.691 23.896 1.00 64.06 N +ATOM 3045 N LYS C 184 25.797 17.891 21.120 1.00 59.49 N +ATOM 3046 CA LYS C 184 26.605 16.766 20.656 1.00 59.49 C +ATOM 3047 C LYS C 184 28.015 16.826 21.237 1.00 59.49 C +ATOM 3048 CB LYS C 184 26.668 16.745 19.128 1.00 59.49 C +ATOM 3049 O LYS C 184 28.606 15.791 21.553 1.00 59.49 O +ATOM 3050 CG LYS C 184 25.444 16.128 18.467 1.00 59.49 C +ATOM 3051 CD LYS C 184 25.613 16.034 16.956 1.00 59.49 C +ATOM 3052 CE LYS C 184 24.367 15.468 16.288 1.00 59.49 C +ATOM 3053 NZ LYS C 184 24.491 15.461 14.799 1.00 59.49 N +ATOM 3054 N GLN C 185 28.617 18.063 21.327 1.00 55.13 N +ATOM 3055 CA GLN C 185 29.955 18.253 21.878 1.00 55.13 C +ATOM 3056 C GLN C 185 29.969 18.012 23.385 1.00 55.13 C +ATOM 3057 CB GLN C 185 30.469 19.660 21.567 1.00 55.13 C +ATOM 3058 O GLN C 185 30.949 17.498 23.927 1.00 55.13 O +ATOM 3059 CG GLN C 185 31.085 19.797 20.181 1.00 55.13 C +ATOM 3060 CD GLN C 185 31.523 21.216 19.871 1.00 55.13 C +ATOM 3061 NE2 GLN C 185 32.142 21.405 18.711 1.00 55.13 N +ATOM 3062 OE1 GLN C 185 31.305 22.135 20.667 1.00 55.13 O +ATOM 3063 N GLY C 186 28.942 18.345 24.180 1.00 48.51 N +ATOM 3064 CA GLY C 186 28.878 18.161 25.622 1.00 48.51 C +ATOM 3065 C GLY C 186 28.801 16.704 26.034 1.00 48.51 C +ATOM 3066 O GLY C 186 29.380 16.309 27.049 1.00 48.51 O +ATOM 3067 N SER C 187 28.073 15.843 25.363 1.00 49.95 N +ATOM 3068 CA SER C 187 28.031 14.415 25.663 1.00 49.95 C +ATOM 3069 C SER C 187 29.388 13.760 25.425 1.00 49.95 C +ATOM 3070 CB SER C 187 26.965 13.721 24.815 1.00 49.95 C +ATOM 3071 O SER C 187 29.818 12.910 26.207 1.00 49.95 O +ATOM 3072 OG SER C 187 27.563 12.932 23.801 1.00 49.95 O +ATOM 3073 N ASN C 188 30.122 14.191 24.370 1.00 46.54 N +ATOM 3074 CA ASN C 188 31.471 13.686 24.137 1.00 46.54 C +ATOM 3075 C ASN C 188 32.445 14.173 25.206 1.00 46.54 C +ATOM 3076 CB ASN C 188 31.963 14.092 22.746 1.00 46.54 C +ATOM 3077 O ASN C 188 33.333 13.430 25.628 1.00 46.54 O +ATOM 3078 CG ASN C 188 31.996 12.928 21.775 1.00 46.54 C +ATOM 3079 ND2 ASN C 188 32.269 13.220 20.509 1.00 46.54 N +ATOM 3080 OD1 ASN C 188 31.778 11.777 22.160 1.00 46.54 O +ATOM 3081 N SER C 189 32.255 15.388 25.636 1.00 48.96 N +ATOM 3082 CA SER C 189 33.105 15.895 26.709 1.00 48.96 C +ATOM 3083 C SER C 189 32.856 15.143 28.013 1.00 48.96 C +ATOM 3084 CB SER C 189 32.867 17.391 26.921 1.00 48.96 C +ATOM 3085 O SER C 189 33.798 14.834 28.746 1.00 48.96 O +ATOM 3086 OG SER C 189 32.522 17.660 28.269 1.00 48.96 O +ATOM 3087 N PHE C 190 31.643 14.749 28.296 1.00 50.30 N +ATOM 3088 CA PHE C 190 31.350 13.946 29.477 1.00 50.30 C +ATOM 3089 C PHE C 190 31.864 12.522 29.306 1.00 50.30 C +ATOM 3090 CB PHE C 190 29.844 13.931 29.758 1.00 50.30 C +ATOM 3091 O PHE C 190 32.469 11.961 30.222 1.00 50.30 O +ATOM 3092 CG PHE C 190 29.469 13.194 31.015 1.00 50.30 C +ATOM 3093 CD1 PHE C 190 28.875 11.940 30.952 1.00 50.30 C +ATOM 3094 CD2 PHE C 190 29.710 13.757 32.262 1.00 50.30 C +ATOM 3095 CE1 PHE C 190 28.526 11.256 32.114 1.00 50.30 C +ATOM 3096 CE2 PHE C 190 29.365 13.079 33.428 1.00 50.30 C +ATOM 3097 CZ PHE C 190 28.772 11.829 33.352 1.00 50.30 C +ATOM 3098 N GLN C 191 31.678 11.889 28.150 1.00 51.25 N +ATOM 3099 CA GLN C 191 32.242 10.574 27.866 1.00 51.25 C +ATOM 3100 C GLN C 191 33.768 10.616 27.875 1.00 51.25 C +ATOM 3101 CB GLN C 191 31.739 10.053 26.519 1.00 51.25 C +ATOM 3102 O GLN C 191 34.415 9.740 28.451 1.00 51.25 O +ATOM 3103 CG GLN C 191 31.663 8.534 26.436 1.00 51.25 C +ATOM 3104 CD GLN C 191 30.733 8.052 25.339 1.00 51.25 C +ATOM 3105 NE2 GLN C 191 30.520 6.742 25.276 1.00 51.25 N +ATOM 3106 OE1 GLN C 191 30.210 8.850 24.555 1.00 51.25 O +ATOM 3107 N ALA C 192 34.349 11.623 27.224 1.00 54.29 N +ATOM 3108 CA ALA C 192 35.796 11.814 27.288 1.00 54.29 C +ATOM 3109 C ALA C 192 36.251 12.079 28.720 1.00 54.29 C +ATOM 3110 CB ALA C 192 36.223 12.961 26.376 1.00 54.29 C +ATOM 3111 O ALA C 192 37.280 11.560 29.158 1.00 54.29 O +ATOM 3112 N TYR C 193 35.462 12.934 29.412 1.00 52.22 N +ATOM 3113 CA TYR C 193 35.725 13.158 30.828 1.00 52.22 C +ATOM 3114 C TYR C 193 35.603 11.861 31.618 1.00 52.22 C +ATOM 3115 CB TYR C 193 34.763 14.207 31.395 1.00 52.22 C +ATOM 3116 O TYR C 193 36.475 11.535 32.427 1.00 52.22 O +ATOM 3117 CG TYR C 193 34.937 14.454 32.874 1.00 52.22 C +ATOM 3118 CD1 TYR C 193 34.059 13.899 33.801 1.00 52.22 C +ATOM 3119 CD2 TYR C 193 35.980 15.244 33.347 1.00 52.22 C +ATOM 3120 CE1 TYR C 193 34.214 14.126 35.165 1.00 52.22 C +ATOM 3121 CE2 TYR C 193 36.145 15.478 34.708 1.00 52.22 C +ATOM 3122 OH TYR C 193 35.417 15.143 36.956 1.00 52.22 O +ATOM 3123 CZ TYR C 193 35.259 14.915 35.608 1.00 52.22 C +ATOM 3124 N CYS C 194 34.562 11.122 31.345 1.00 57.34 N +ATOM 3125 CA CYS C 194 34.395 9.864 32.064 1.00 57.34 C +ATOM 3126 C CYS C 194 35.429 8.838 31.616 1.00 57.34 C +ATOM 3127 CB CYS C 194 32.987 9.309 31.853 1.00 57.34 C +ATOM 3128 O CYS C 194 35.850 7.990 32.405 1.00 57.34 O +ATOM 3129 SG CYS C 194 31.722 10.137 32.840 1.00 57.34 S +ATOM 3130 N GLU C 195 35.875 8.761 30.347 1.00 59.93 N +ATOM 3131 CA GLU C 195 36.987 7.938 29.882 1.00 59.93 C +ATOM 3132 C GLU C 195 38.302 8.375 30.522 1.00 59.93 C +ATOM 3133 CB GLU C 195 37.100 7.999 28.357 1.00 59.93 C +ATOM 3134 O GLU C 195 39.134 7.537 30.876 1.00 59.93 O +ATOM 3135 CG GLU C 195 36.165 7.041 27.633 1.00 59.93 C +ATOM 3136 CD GLU C 195 36.234 7.164 26.119 1.00 59.93 C +ATOM 3137 OE1 GLU C 195 35.539 6.397 25.415 1.00 59.93 O +ATOM 3138 OE2 GLU C 195 36.989 8.036 25.633 1.00 59.93 O +ATOM 3139 N ALA C 196 38.545 9.739 30.756 1.00 64.42 N +ATOM 3140 CA ALA C 196 39.751 10.285 31.374 1.00 64.42 C +ATOM 3141 C ALA C 196 39.676 10.195 32.896 1.00 64.42 C +ATOM 3142 CB ALA C 196 39.964 11.733 30.940 1.00 64.42 C +ATOM 3143 O ALA C 196 40.706 10.123 33.571 1.00 64.42 O +ATOM 3144 N ASN C 197 38.422 10.439 33.427 1.00 52.36 N +ATOM 3145 CA ASN C 197 38.229 10.340 34.870 1.00 52.36 C +ATOM 3146 C ASN C 197 37.193 9.278 35.226 1.00 52.36 C +ATOM 3147 CB ASN C 197 37.822 11.695 35.452 1.00 52.36 C +ATOM 3148 O ASN C 197 36.079 9.605 35.638 1.00 52.36 O +ATOM 3149 CG ASN C 197 38.947 12.711 35.410 1.00 52.36 C +ATOM 3150 ND2 ASN C 197 38.620 13.942 35.036 1.00 52.36 N +ATOM 3151 OD1 ASN C 197 40.100 12.391 35.710 1.00 52.36 O +ATOM 3152 N PRO C 198 37.487 7.983 34.957 1.00 57.18 N +ATOM 3153 CA PRO C 198 36.540 6.878 35.126 1.00 57.18 C +ATOM 3154 C PRO C 198 35.979 6.794 36.544 1.00 57.18 C +ATOM 3155 CB PRO C 198 37.379 5.641 34.796 1.00 57.18 C +ATOM 3156 O PRO C 198 34.860 6.315 36.741 1.00 57.18 O +ATOM 3157 CG PRO C 198 38.776 6.154 34.652 1.00 57.18 C +ATOM 3158 CD PRO C 198 38.749 7.650 34.776 1.00 57.18 C +ATOM 3159 N ASP C 199 36.757 7.247 37.504 1.00 53.89 N +ATOM 3160 CA ASP C 199 36.401 7.135 38.915 1.00 53.89 C +ATOM 3161 C ASP C 199 35.557 8.326 39.365 1.00 53.89 C +ATOM 3162 CB ASP C 199 37.659 7.026 39.779 1.00 53.89 C +ATOM 3163 O ASP C 199 35.191 8.427 40.538 1.00 53.89 O +ATOM 3164 CG ASP C 199 38.425 5.735 39.551 1.00 53.89 C +ATOM 3165 OD1 ASP C 199 37.796 4.698 39.249 1.00 53.89 O +ATOM 3166 OD2 ASP C 199 39.669 5.754 39.677 1.00 53.89 O +ATOM 3167 N ALA C 200 35.331 9.249 38.469 1.00 53.34 N +ATOM 3168 CA ALA C 200 34.568 10.431 38.859 1.00 53.34 C +ATOM 3169 C ALA C 200 33.106 10.080 39.119 1.00 53.34 C +ATOM 3170 CB ALA C 200 34.668 11.509 37.782 1.00 53.34 C +ATOM 3171 O ALA C 200 32.523 9.257 38.409 1.00 53.34 O +ATOM 3172 N LEU C 201 32.381 10.462 40.318 1.00 54.15 N +ATOM 3173 CA LEU C 201 31.049 10.141 40.820 1.00 54.15 C +ATOM 3174 C LEU C 201 29.998 10.331 39.731 1.00 54.15 C +ATOM 3175 CB LEU C 201 30.709 11.012 42.032 1.00 54.15 C +ATOM 3176 O LEU C 201 29.083 9.515 39.597 1.00 54.15 O +ATOM 3177 CG LEU C 201 30.806 10.337 43.401 1.00 54.15 C +ATOM 3178 CD1 LEU C 201 31.371 11.309 44.432 1.00 54.15 C +ATOM 3179 CD2 LEU C 201 29.441 9.818 43.840 1.00 54.15 C +ATOM 3180 N GLU C 202 30.171 11.322 39.021 1.00 56.19 N +ATOM 3181 CA GLU C 202 29.197 11.705 38.003 1.00 56.19 C +ATOM 3182 C GLU C 202 29.143 10.677 36.877 1.00 56.19 C +ATOM 3183 CB GLU C 202 29.525 13.089 37.438 1.00 56.19 C +ATOM 3184 O GLU C 202 28.100 10.493 36.247 1.00 56.19 O +ATOM 3185 CG GLU C 202 29.210 14.233 38.390 1.00 56.19 C +ATOM 3186 CD GLU C 202 30.123 15.435 38.206 1.00 56.19 C +ATOM 3187 OE1 GLU C 202 29.898 16.475 38.867 1.00 56.19 O +ATOM 3188 OE2 GLU C 202 31.069 15.337 37.394 1.00 56.19 O +ATOM 3189 N CYS C 203 30.326 10.025 36.608 1.00 49.83 N +ATOM 3190 CA CYS C 203 30.434 9.032 35.545 1.00 49.83 C +ATOM 3191 C CYS C 203 29.905 7.679 36.007 1.00 49.83 C +ATOM 3192 CB CYS C 203 31.885 8.893 35.086 1.00 49.83 C +ATOM 3193 O CYS C 203 29.507 6.851 35.186 1.00 49.83 O +ATOM 3194 SG CYS C 203 32.544 10.377 34.295 1.00 49.83 S +ATOM 3195 N ARG C 204 29.879 7.259 37.274 1.00 46.80 N +ATOM 3196 CA ARG C 204 29.431 5.996 37.852 1.00 46.80 C +ATOM 3197 C ARG C 204 27.909 5.903 37.851 1.00 46.80 C +ATOM 3198 CB ARG C 204 29.965 5.837 39.277 1.00 46.80 C +ATOM 3199 O ARG C 204 27.349 4.806 37.907 1.00 46.80 O +ATOM 3200 CG ARG C 204 31.321 5.154 39.354 1.00 46.80 C +ATOM 3201 CD ARG C 204 31.721 4.853 40.792 1.00 46.80 C +ATOM 3202 NE ARG C 204 32.998 4.150 40.860 1.00 46.80 N +ATOM 3203 NH1 ARG C 204 33.187 4.289 43.158 1.00 46.80 N +ATOM 3204 NH2 ARG C 204 34.820 3.250 41.930 1.00 46.80 N +ATOM 3205 CZ ARG C 204 33.666 3.898 41.983 1.00 46.80 C +ATOM 3206 N ILE C 205 27.152 7.004 37.871 1.00 42.44 N +ATOM 3207 CA ILE C 205 25.698 6.935 37.956 1.00 42.44 C +ATOM 3208 C ILE C 205 25.130 6.394 36.646 1.00 42.44 C +ATOM 3209 CB ILE C 205 25.084 8.316 38.277 1.00 42.44 C +ATOM 3210 O ILE C 205 24.080 5.747 36.637 1.00 42.44 O +ATOM 3211 CG1 ILE C 205 25.570 8.812 39.644 1.00 42.44 C +ATOM 3212 CG2 ILE C 205 23.554 8.251 38.230 1.00 42.44 C +ATOM 3213 CD1 ILE C 205 25.151 10.239 39.969 1.00 42.44 C +ATOM 3214 N TYR C 206 25.874 6.587 35.614 1.00 36.66 N +ATOM 3215 CA TYR C 206 25.309 6.160 34.339 1.00 36.66 C +ATOM 3216 C TYR C 206 25.635 4.697 34.061 1.00 36.66 C +ATOM 3217 CB TYR C 206 25.834 7.037 33.198 1.00 36.66 C +ATOM 3218 O TYR C 206 25.186 4.134 33.060 1.00 36.66 O +ATOM 3219 CG TYR C 206 24.856 8.094 32.746 1.00 36.66 C +ATOM 3220 CD1 TYR C 206 23.944 7.837 31.725 1.00 36.66 C +ATOM 3221 CD2 TYR C 206 24.842 9.352 33.340 1.00 36.66 C +ATOM 3222 CE1 TYR C 206 23.042 8.810 31.304 1.00 36.66 C +ATOM 3223 CE2 TYR C 206 23.945 10.332 32.927 1.00 36.66 C +ATOM 3224 OH TYR C 206 22.160 11.018 31.499 1.00 36.66 O +ATOM 3225 CZ TYR C 206 23.050 10.051 31.911 1.00 36.66 C +ATOM 3226 N ASP C 207 26.647 4.020 34.728 1.00 34.09 N +ATOM 3227 CA ASP C 207 26.969 2.618 34.478 1.00 34.09 C +ATOM 3228 C ASP C 207 25.964 1.694 35.162 1.00 34.09 C +ATOM 3229 CB ASP C 207 28.387 2.299 34.956 1.00 34.09 C +ATOM 3230 O ASP C 207 25.995 0.478 34.961 1.00 34.09 O +ATOM 3231 CG ASP C 207 29.453 2.677 33.943 1.00 34.09 C +ATOM 3232 OD1 ASP C 207 29.116 2.923 32.765 1.00 34.09 O +ATOM 3233 OD2 ASP C 207 30.642 2.726 34.325 1.00 34.09 O +ATOM 3234 N ASP C 208 25.195 2.187 36.212 1.00 27.68 N +ATOM 3235 CA ASP C 208 24.286 1.169 36.732 1.00 27.68 C +ATOM 3236 C ASP C 208 23.025 1.071 35.877 1.00 27.68 C +ATOM 3237 CB ASP C 208 23.914 1.474 38.184 1.00 27.68 C +ATOM 3238 O ASP C 208 22.415 2.088 35.541 1.00 27.68 O +ATOM 3239 CG ASP C 208 25.006 1.093 39.169 1.00 27.68 C +ATOM 3240 OD1 ASP C 208 25.958 0.383 38.779 1.00 27.68 O +ATOM 3241 OD2 ASP C 208 24.912 1.505 40.345 1.00 27.68 O +TER 3242 ASP C 208 +ATOM 3243 N GLY D 1 33.614 -18.501 -11.988 1.00 38.10 N +ATOM 3244 CA GLY D 1 32.177 -18.650 -12.155 1.00 38.10 C +ATOM 3245 C GLY D 1 31.612 -17.787 -13.267 1.00 38.10 C +ATOM 3246 O GLY D 1 32.248 -16.821 -13.694 1.00 38.10 O +ATOM 3247 N PRO D 2 30.643 -18.260 -14.043 1.00 50.60 N +ATOM 3248 CA PRO D 2 30.208 -17.535 -15.239 1.00 50.60 C +ATOM 3249 C PRO D 2 29.937 -16.057 -14.966 1.00 50.60 C +ATOM 3250 CB PRO D 2 28.922 -18.260 -15.643 1.00 50.60 C +ATOM 3251 O PRO D 2 29.479 -15.700 -13.878 1.00 50.60 O +ATOM 3252 CG PRO D 2 28.607 -19.153 -14.486 1.00 50.60 C +ATOM 3253 CD PRO D 2 29.745 -19.085 -13.508 1.00 50.60 C +ATOM 3254 N MET D 3 30.649 -15.095 -15.662 1.00 59.17 N +ATOM 3255 CA MET D 3 30.634 -13.642 -15.516 1.00 59.17 C +ATOM 3256 C MET D 3 29.234 -13.086 -15.753 1.00 59.17 C +ATOM 3257 CB MET D 3 31.625 -12.994 -16.484 1.00 59.17 C +ATOM 3258 O MET D 3 28.682 -13.227 -16.846 1.00 59.17 O +ATOM 3259 CG MET D 3 33.002 -12.758 -15.885 1.00 59.17 C +ATOM 3260 SD MET D 3 34.108 -11.822 -17.011 1.00 59.17 S +ATOM 3261 CE MET D 3 33.697 -12.612 -18.592 1.00 59.17 C +ATOM 3262 N VAL D 4 28.304 -12.951 -14.802 1.00 78.30 N +ATOM 3263 CA VAL D 4 26.973 -12.355 -14.856 1.00 78.30 C +ATOM 3264 C VAL D 4 27.091 -10.846 -15.060 1.00 78.30 C +ATOM 3265 CB VAL D 4 26.163 -12.657 -13.576 1.00 78.30 C +ATOM 3266 O VAL D 4 28.041 -10.221 -14.582 1.00 78.30 O +ATOM 3267 CG1 VAL D 4 24.716 -12.193 -13.730 1.00 78.30 C +ATOM 3268 CG2 VAL D 4 26.217 -14.149 -13.251 1.00 78.30 C +ATOM 3269 N LEU D 5 26.341 -10.361 -16.158 1.00 91.22 N +ATOM 3270 CA LEU D 5 26.299 -8.925 -16.410 1.00 91.22 C +ATOM 3271 C LEU D 5 25.970 -8.158 -15.133 1.00 91.22 C +ATOM 3272 CB LEU D 5 25.268 -8.601 -17.494 1.00 91.22 C +ATOM 3273 O LEU D 5 25.026 -8.508 -14.420 1.00 91.22 O +ATOM 3274 CG LEU D 5 25.417 -7.246 -18.189 1.00 91.22 C +ATOM 3275 CD1 LEU D 5 26.642 -7.250 -19.098 1.00 91.22 C +ATOM 3276 CD2 LEU D 5 24.158 -6.909 -18.980 1.00 91.22 C +ATOM 3277 N GLN D 6 26.843 -7.155 -14.878 1.00 95.18 N +ATOM 3278 CA GLN D 6 26.739 -6.469 -13.595 1.00 95.18 C +ATOM 3279 C GLN D 6 26.182 -5.059 -13.768 1.00 95.18 C +ATOM 3280 CB GLN D 6 28.101 -6.414 -12.902 1.00 95.18 C +ATOM 3281 O GLN D 6 26.165 -4.525 -14.880 1.00 95.18 O +ATOM 3282 CG GLN D 6 28.703 -7.784 -12.619 1.00 95.18 C +ATOM 3283 CD GLN D 6 30.091 -7.702 -12.012 1.00 95.18 C +ATOM 3284 NE2 GLN D 6 30.561 -8.812 -11.454 1.00 95.18 N +ATOM 3285 OE1 GLN D 6 30.736 -6.649 -12.045 1.00 95.18 O +ATOM 3286 N ALA D 7 25.826 -4.434 -12.705 1.00 96.36 N +ATOM 3287 CA ALA D 7 25.216 -3.107 -12.692 1.00 96.36 C +ATOM 3288 C ALA D 7 26.156 -2.065 -13.292 1.00 96.36 C +ATOM 3289 CB ALA D 7 24.829 -2.712 -11.269 1.00 96.36 C +ATOM 3290 O ALA D 7 25.737 -1.236 -14.104 1.00 96.36 O +ATOM 3291 N GLN D 8 27.407 -2.124 -12.950 1.00 96.35 N +ATOM 3292 CA GLN D 8 28.366 -1.120 -13.397 1.00 96.35 C +ATOM 3293 C GLN D 8 28.542 -1.163 -14.912 1.00 96.35 C +ATOM 3294 CB GLN D 8 29.716 -1.320 -12.707 1.00 96.35 C +ATOM 3295 O GLN D 8 28.961 -0.177 -15.522 1.00 96.35 O +ATOM 3296 CG GLN D 8 30.394 -2.639 -13.053 1.00 96.35 C +ATOM 3297 CD GLN D 8 31.710 -2.832 -12.323 1.00 96.35 C +ATOM 3298 NE2 GLN D 8 32.648 -3.521 -12.964 1.00 96.35 N +ATOM 3299 OE1 GLN D 8 31.883 -2.364 -11.193 1.00 96.35 O +ATOM 3300 N GLU D 9 28.186 -2.233 -15.502 1.00 96.76 N +ATOM 3301 CA GLU D 9 28.389 -2.405 -16.937 1.00 96.76 C +ATOM 3302 C GLU D 9 27.250 -1.778 -17.735 1.00 96.76 C +ATOM 3303 CB GLU D 9 28.523 -3.889 -17.287 1.00 96.76 C +ATOM 3304 O GLU D 9 27.391 -1.523 -18.933 1.00 96.76 O +ATOM 3305 CG GLU D 9 29.752 -4.555 -16.687 1.00 96.76 C +ATOM 3306 CD GLU D 9 29.784 -6.060 -16.900 1.00 96.76 C +ATOM 3307 OE1 GLU D 9 30.456 -6.524 -17.849 1.00 96.76 O +ATOM 3308 OE2 GLU D 9 29.131 -6.780 -16.113 1.00 96.76 O +ATOM 3309 N ILE D 10 26.172 -1.565 -17.097 1.00 97.20 N +ATOM 3310 CA ILE D 10 25.049 -1.058 -17.878 1.00 97.20 C +ATOM 3311 C ILE D 10 24.545 0.249 -17.270 1.00 97.20 C +ATOM 3312 CB ILE D 10 23.902 -2.091 -17.955 1.00 97.20 C +ATOM 3313 O ILE D 10 23.591 0.847 -17.772 1.00 97.20 O +ATOM 3314 CG1 ILE D 10 23.349 -2.380 -16.555 1.00 97.20 C +ATOM 3315 CG2 ILE D 10 24.380 -3.379 -18.632 1.00 97.20 C +ATOM 3316 CD1 ILE D 10 21.958 -2.999 -16.554 1.00 97.20 C +ATOM 3317 N MET D 11 25.104 0.716 -16.208 1.00 97.16 N +ATOM 3318 CA MET D 11 24.680 1.946 -15.544 1.00 97.16 C +ATOM 3319 C MET D 11 24.964 3.162 -16.418 1.00 97.16 C +ATOM 3320 CB MET D 11 25.382 2.097 -14.193 1.00 97.16 C +ATOM 3321 O MET D 11 25.747 3.082 -17.366 1.00 97.16 O +ATOM 3322 CG MET D 11 26.871 2.379 -14.304 1.00 97.16 C +ATOM 3323 SD MET D 11 27.682 2.537 -12.666 1.00 97.16 S +ATOM 3324 CE MET D 11 29.384 2.893 -13.183 1.00 97.16 C +ATOM 3325 N THR D 12 24.256 4.211 -16.128 1.00 94.13 N +ATOM 3326 CA THR D 12 24.592 5.507 -16.707 1.00 94.13 C +ATOM 3327 C THR D 12 25.678 6.199 -15.889 1.00 94.13 C +ATOM 3328 CB THR D 12 23.353 6.417 -16.796 1.00 94.13 C +ATOM 3329 O THR D 12 25.559 6.323 -14.668 1.00 94.13 O +ATOM 3330 CG2 THR D 12 23.695 7.748 -17.459 1.00 94.13 C +ATOM 3331 OG1 THR D 12 22.338 5.760 -17.564 1.00 94.13 O +ATOM 3332 N GLN D 13 26.736 6.600 -16.475 1.00 91.26 N +ATOM 3333 CA GLN D 13 27.886 7.150 -15.766 1.00 91.26 C +ATOM 3334 C GLN D 13 27.767 8.663 -15.614 1.00 91.26 C +ATOM 3335 CB GLN D 13 29.185 6.796 -16.492 1.00 91.26 C +ATOM 3336 O GLN D 13 28.311 9.243 -14.672 1.00 91.26 O +ATOM 3337 CG GLN D 13 29.510 5.308 -16.480 1.00 91.26 C +ATOM 3338 CD GLN D 13 30.760 4.974 -17.273 1.00 91.26 C +ATOM 3339 NE2 GLN D 13 30.900 3.710 -17.656 1.00 91.26 N +ATOM 3340 OE1 GLN D 13 31.593 5.846 -17.540 1.00 91.26 O +ATOM 3341 N ASN D 14 27.206 9.297 -16.585 1.00 83.66 N +ATOM 3342 CA ASN D 14 27.028 10.741 -16.476 1.00 83.66 C +ATOM 3343 C ASN D 14 25.975 11.099 -15.432 1.00 83.66 C +ATOM 3344 CB ASN D 14 26.654 11.339 -17.834 1.00 83.66 C +ATOM 3345 O ASN D 14 24.791 11.219 -15.753 1.00 83.66 O +ATOM 3346 CG ASN D 14 26.966 12.820 -17.926 1.00 83.66 C +ATOM 3347 ND2 ASN D 14 26.731 13.404 -19.095 1.00 83.66 N +ATOM 3348 OD1 ASN D 14 27.415 13.433 -16.954 1.00 83.66 O +ATOM 3349 N VAL D 15 26.469 11.276 -14.184 1.00 87.99 N +ATOM 3350 CA VAL D 15 25.552 11.585 -13.092 1.00 87.99 C +ATOM 3351 C VAL D 15 25.639 13.071 -12.749 1.00 87.99 C +ATOM 3352 CB VAL D 15 25.852 10.731 -11.840 1.00 87.99 C +ATOM 3353 O VAL D 15 26.733 13.636 -12.682 1.00 87.99 O +ATOM 3354 CG1 VAL D 15 24.816 10.990 -10.748 1.00 87.99 C +ATOM 3355 CG2 VAL D 15 25.891 9.248 -12.204 1.00 87.99 C +ATOM 3356 N VAL D 16 24.544 13.716 -12.689 1.00 94.92 N +ATOM 3357 CA VAL D 16 24.480 15.119 -12.292 1.00 94.92 C +ATOM 3358 C VAL D 16 23.943 15.229 -10.867 1.00 94.92 C +ATOM 3359 CB VAL D 16 23.598 15.941 -13.259 1.00 94.92 C +ATOM 3360 O VAL D 16 23.028 14.497 -10.483 1.00 94.92 O +ATOM 3361 CG1 VAL D 16 23.505 17.395 -12.799 1.00 94.92 C +ATOM 3362 CG2 VAL D 16 24.150 15.862 -14.681 1.00 94.92 C +ATOM 3363 N THR D 17 24.558 16.051 -10.143 1.00 96.23 N +ATOM 3364 CA THR D 17 24.177 16.218 -8.745 1.00 96.23 C +ATOM 3365 C THR D 17 23.497 17.566 -8.527 1.00 96.23 C +ATOM 3366 CB THR D 17 25.399 16.100 -7.815 1.00 96.23 C +ATOM 3367 O THR D 17 23.597 18.462 -9.368 1.00 96.23 O +ATOM 3368 CG2 THR D 17 26.155 14.799 -8.063 1.00 96.23 C +ATOM 3369 OG1 THR D 17 26.281 17.204 -8.052 1.00 96.23 O +ATOM 3370 N ILE D 18 22.751 17.686 -7.404 1.00 97.93 N +ATOM 3371 CA ILE D 18 22.073 18.912 -6.999 1.00 97.93 C +ATOM 3372 C ILE D 18 22.073 19.024 -5.476 1.00 97.93 C +ATOM 3373 CB ILE D 18 20.626 18.962 -7.540 1.00 97.93 C +ATOM 3374 O ILE D 18 22.176 18.015 -4.774 1.00 97.93 O +ATOM 3375 CG1 ILE D 18 20.049 20.375 -7.392 1.00 97.93 C +ATOM 3376 CG2 ILE D 18 19.746 17.934 -6.823 1.00 97.93 C +ATOM 3377 CD1 ILE D 18 18.780 20.613 -8.198 1.00 97.93 C +ATOM 3378 N ARG D 19 22.008 20.215 -5.031 1.00 96.94 N +ATOM 3379 CA ARG D 19 21.907 20.417 -3.589 1.00 96.94 C +ATOM 3380 C ARG D 19 20.466 20.266 -3.115 1.00 96.94 C +ATOM 3381 CB ARG D 19 22.445 21.795 -3.200 1.00 96.94 C +ATOM 3382 O ARG D 19 19.529 20.610 -3.839 1.00 96.94 O +ATOM 3383 CG ARG D 19 23.943 21.953 -3.407 1.00 96.94 C +ATOM 3384 CD ARG D 19 24.451 23.283 -2.867 1.00 96.94 C +ATOM 3385 NE ARG D 19 25.908 23.366 -2.921 1.00 96.94 N +ATOM 3386 NH1 ARG D 19 26.027 25.485 -2.010 1.00 96.94 N +ATOM 3387 NH2 ARG D 19 27.944 24.380 -2.608 1.00 96.94 N +ATOM 3388 CZ ARG D 19 26.623 24.410 -2.513 1.00 96.94 C +ATOM 3389 N GLY D 20 20.362 19.861 -1.903 1.00 97.61 N +ATOM 3390 CA GLY D 20 19.031 19.752 -1.329 1.00 97.61 C +ATOM 3391 C GLY D 20 18.328 21.090 -1.192 1.00 97.61 C +ATOM 3392 O GLY D 20 17.099 21.159 -1.245 1.00 97.61 O +ATOM 3393 N SER D 21 19.044 22.129 -1.014 1.00 97.13 N +ATOM 3394 CA SER D 21 18.491 23.463 -0.800 1.00 97.13 C +ATOM 3395 C SER D 21 18.049 24.096 -2.115 1.00 97.13 C +ATOM 3396 CB SER D 21 19.516 24.364 -0.110 1.00 97.13 C +ATOM 3397 O SER D 21 17.385 25.135 -2.118 1.00 97.13 O +ATOM 3398 OG SER D 21 20.702 24.459 -0.881 1.00 97.13 O +ATOM 3399 N ALA D 22 18.366 23.479 -3.222 1.00 98.12 N +ATOM 3400 CA ALA D 22 17.948 24.020 -4.513 1.00 98.12 C +ATOM 3401 C ALA D 22 16.428 24.001 -4.649 1.00 98.12 C +ATOM 3402 CB ALA D 22 18.591 23.234 -5.652 1.00 98.12 C +ATOM 3403 O ALA D 22 15.746 23.235 -3.965 1.00 98.12 O +ATOM 3404 N THR D 23 15.935 24.868 -5.499 1.00 98.40 N +ATOM 3405 CA THR D 23 14.503 24.838 -5.776 1.00 98.40 C +ATOM 3406 C THR D 23 14.159 23.690 -6.721 1.00 98.40 C +ATOM 3407 CB THR D 23 14.023 26.169 -6.384 1.00 98.40 C +ATOM 3408 O THR D 23 15.026 23.191 -7.441 1.00 98.40 O +ATOM 3409 CG2 THR D 23 14.414 27.349 -5.501 1.00 98.40 C +ATOM 3410 OG1 THR D 23 14.615 26.338 -7.678 1.00 98.40 O +ATOM 3411 N VAL D 24 12.952 23.342 -6.701 1.00 98.80 N +ATOM 3412 CA VAL D 24 12.470 22.331 -7.635 1.00 98.80 C +ATOM 3413 C VAL D 24 12.590 22.850 -9.067 1.00 98.80 C +ATOM 3414 CB VAL D 24 11.008 21.931 -7.334 1.00 98.80 C +ATOM 3415 O VAL D 24 12.893 22.086 -9.987 1.00 98.80 O +ATOM 3416 CG1 VAL D 24 10.461 21.020 -8.431 1.00 98.80 C +ATOM 3417 CG2 VAL D 24 10.912 21.249 -5.971 1.00 98.80 C +ATOM 3418 N ALA D 25 12.404 24.131 -9.245 1.00 98.67 N +ATOM 3419 CA ALA D 25 12.574 24.743 -10.560 1.00 98.67 C +ATOM 3420 C ALA D 25 13.994 24.538 -11.081 1.00 98.67 C +ATOM 3421 CB ALA D 25 12.241 26.231 -10.502 1.00 98.67 C +ATOM 3422 O ALA D 25 14.191 24.219 -12.255 1.00 98.67 O +ATOM 3423 N ASP D 26 14.975 24.704 -10.219 1.00 98.49 N +ATOM 3424 CA ASP D 26 16.366 24.459 -10.590 1.00 98.49 C +ATOM 3425 C ASP D 26 16.568 23.014 -11.039 1.00 98.49 C +ATOM 3426 CB ASP D 26 17.298 24.782 -9.420 1.00 98.49 C +ATOM 3427 O ASP D 26 17.261 22.756 -12.026 1.00 98.49 O +ATOM 3428 CG ASP D 26 17.349 26.264 -9.094 1.00 98.49 C +ATOM 3429 OD1 ASP D 26 17.170 27.096 -10.009 1.00 98.49 O +ATOM 3430 OD2 ASP D 26 17.574 26.602 -7.912 1.00 98.49 O +ATOM 3431 N ALA D 27 15.976 22.155 -10.309 1.00 98.75 N +ATOM 3432 CA ALA D 27 16.091 20.736 -10.638 1.00 98.75 C +ATOM 3433 C ALA D 27 15.496 20.441 -12.012 1.00 98.75 C +ATOM 3434 CB ALA D 27 15.407 19.885 -9.571 1.00 98.75 C +ATOM 3435 O ALA D 27 16.108 19.744 -12.824 1.00 98.75 O +ATOM 3436 N VAL D 28 14.311 20.967 -12.268 1.00 98.75 N +ATOM 3437 CA VAL D 28 13.655 20.763 -13.555 1.00 98.75 C +ATOM 3438 C VAL D 28 14.528 21.324 -14.675 1.00 98.75 C +ATOM 3439 CB VAL D 28 12.256 21.419 -13.590 1.00 98.75 C +ATOM 3440 O VAL D 28 14.735 20.666 -15.698 1.00 98.75 O +ATOM 3441 CG1 VAL D 28 11.655 21.333 -14.992 1.00 98.75 C +ATOM 3442 CG2 VAL D 28 11.333 20.760 -12.567 1.00 98.75 C +ATOM 3443 N LYS D 29 15.029 22.488 -14.463 1.00 98.51 N +ATOM 3444 CA LYS D 29 15.908 23.113 -15.447 1.00 98.51 C +ATOM 3445 C LYS D 29 17.114 22.226 -15.747 1.00 98.51 C +ATOM 3446 CB LYS D 29 16.375 24.484 -14.956 1.00 98.51 C +ATOM 3447 O LYS D 29 17.442 21.989 -16.911 1.00 98.51 O +ATOM 3448 CG LYS D 29 17.266 25.224 -15.943 1.00 98.51 C +ATOM 3449 CD LYS D 29 17.713 26.572 -15.391 1.00 98.51 C +ATOM 3450 CE LYS D 29 18.670 27.277 -16.342 1.00 98.51 C +ATOM 3451 NZ LYS D 29 19.161 28.569 -15.777 1.00 98.51 N +ATOM 3452 N LEU D 30 17.710 21.801 -14.753 1.00 98.22 N +ATOM 3453 CA LEU D 30 18.888 20.953 -14.899 1.00 98.22 C +ATOM 3454 C LEU D 30 18.538 19.656 -15.621 1.00 98.22 C +ATOM 3455 CB LEU D 30 19.497 20.641 -13.530 1.00 98.22 C +ATOM 3456 O LEU D 30 19.277 19.213 -16.503 1.00 98.22 O +ATOM 3457 CG LEU D 30 20.874 19.975 -13.536 1.00 98.22 C +ATOM 3458 CD1 LEU D 30 21.856 20.795 -14.364 1.00 98.22 C +ATOM 3459 CD2 LEU D 30 21.387 19.795 -12.111 1.00 98.22 C +ATOM 3460 N MET D 31 17.445 19.054 -15.314 1.00 97.79 N +ATOM 3461 CA MET D 31 17.005 17.821 -15.960 1.00 97.79 C +ATOM 3462 C MET D 31 16.727 18.052 -17.441 1.00 97.79 C +ATOM 3463 CB MET D 31 15.756 17.269 -15.272 1.00 97.79 C +ATOM 3464 O MET D 31 17.084 17.224 -18.281 1.00 97.79 O +ATOM 3465 CG MET D 31 16.027 16.656 -13.908 1.00 97.79 C +ATOM 3466 SD MET D 31 14.507 15.994 -13.120 1.00 97.79 S +ATOM 3467 CE MET D 31 15.174 15.497 -11.507 1.00 97.79 C +ATOM 3468 N LYS D 32 16.095 19.159 -17.748 1.00 97.69 N +ATOM 3469 CA LYS D 32 15.822 19.503 -19.140 1.00 97.69 C +ATOM 3470 C LYS D 32 17.118 19.717 -19.918 1.00 97.69 C +ATOM 3471 CB LYS D 32 14.949 20.756 -19.223 1.00 97.69 C +ATOM 3472 O LYS D 32 17.303 19.147 -20.995 1.00 97.69 O +ATOM 3473 CG LYS D 32 13.499 20.528 -18.823 1.00 97.69 C +ATOM 3474 CD LYS D 32 12.668 21.794 -18.983 1.00 97.69 C +ATOM 3475 CE LYS D 32 11.199 21.543 -18.673 1.00 97.69 C +ATOM 3476 NZ LYS D 32 10.370 22.767 -18.889 1.00 97.69 N +ATOM 3477 N GLU D 33 18.044 20.465 -19.327 1.00 97.25 N +ATOM 3478 CA GLU D 33 19.304 20.795 -19.985 1.00 97.25 C +ATOM 3479 C GLU D 33 20.143 19.544 -20.231 1.00 97.25 C +ATOM 3480 CB GLU D 33 20.097 21.806 -19.153 1.00 97.25 C +ATOM 3481 O GLU D 33 20.753 19.398 -21.292 1.00 97.25 O +ATOM 3482 CG GLU D 33 19.521 23.214 -19.182 1.00 97.25 C +ATOM 3483 CD GLU D 33 20.257 24.182 -18.269 1.00 97.25 C +ATOM 3484 OE1 GLU D 33 19.944 25.394 -18.292 1.00 97.25 O +ATOM 3485 OE2 GLU D 33 21.155 23.725 -17.527 1.00 97.25 O +ATOM 3486 N LYS D 34 20.101 18.680 -19.269 1.00 96.25 N +ATOM 3487 CA LYS D 34 20.973 17.512 -19.343 1.00 96.25 C +ATOM 3488 C LYS D 34 20.213 16.289 -19.847 1.00 96.25 C +ATOM 3489 CB LYS D 34 21.592 17.217 -17.976 1.00 96.25 C +ATOM 3490 O LYS D 34 20.794 15.214 -20.011 1.00 96.25 O +ATOM 3491 CG LYS D 34 22.450 18.348 -17.427 1.00 96.25 C +ATOM 3492 CD LYS D 34 23.689 18.575 -18.283 1.00 96.25 C +ATOM 3493 CE LYS D 34 24.605 19.629 -17.675 1.00 96.25 C +ATOM 3494 NZ LYS D 34 25.831 19.842 -18.500 1.00 96.25 N +ATOM 3495 N LYS D 35 18.851 16.437 -20.078 1.00 94.16 N +ATOM 3496 CA LYS D 35 17.982 15.367 -20.558 1.00 94.16 C +ATOM 3497 C LYS D 35 18.033 14.158 -19.628 1.00 94.16 C +ATOM 3498 CB LYS D 35 18.372 14.953 -21.977 1.00 94.16 C +ATOM 3499 O LYS D 35 18.251 13.031 -20.077 1.00 94.16 O +ATOM 3500 CG LYS D 35 18.239 16.066 -23.006 1.00 94.16 C +ATOM 3501 CD LYS D 35 18.583 15.577 -24.407 1.00 94.16 C +ATOM 3502 CE LYS D 35 18.463 16.694 -25.435 1.00 94.16 C +ATOM 3503 NZ LYS D 35 18.796 16.219 -26.811 1.00 94.16 N +ATOM 3504 N LEU D 36 17.860 14.427 -18.387 1.00 94.69 N +ATOM 3505 CA LEU D 36 17.898 13.392 -17.360 1.00 94.69 C +ATOM 3506 C LEU D 36 16.546 13.267 -16.664 1.00 94.69 C +ATOM 3507 CB LEU D 36 18.988 13.698 -16.329 1.00 94.69 C +ATOM 3508 O LEU D 36 15.754 14.212 -16.663 1.00 94.69 O +ATOM 3509 CG LEU D 36 20.427 13.708 -16.848 1.00 94.69 C +ATOM 3510 CD1 LEU D 36 21.368 14.273 -15.789 1.00 94.69 C +ATOM 3511 CD2 LEU D 36 20.857 12.304 -17.259 1.00 94.69 C +ATOM 3512 N ARG D 37 16.296 12.124 -16.114 1.00 95.25 N +ATOM 3513 CA ARG D 37 15.021 11.863 -15.454 1.00 95.25 C +ATOM 3514 C ARG D 37 15.202 11.732 -13.946 1.00 95.25 C +ATOM 3515 CB ARG D 37 14.374 10.595 -16.017 1.00 95.25 C +ATOM 3516 O ARG D 37 14.245 11.449 -13.223 1.00 95.25 O +ATOM 3517 CG ARG D 37 13.960 10.710 -17.475 1.00 95.25 C +ATOM 3518 CD ARG D 37 13.446 9.385 -18.021 1.00 95.25 C +ATOM 3519 NE ARG D 37 13.183 9.459 -19.456 1.00 95.25 N +ATOM 3520 NH1 ARG D 37 13.665 7.237 -19.868 1.00 95.25 N +ATOM 3521 NH2 ARG D 37 13.030 8.615 -21.586 1.00 95.25 N +ATOM 3522 CZ ARG D 37 13.293 8.437 -20.300 1.00 95.25 C +ATOM 3523 N GLY D 38 16.357 11.867 -13.420 1.00 96.38 N +ATOM 3524 CA GLY D 38 16.719 11.861 -12.012 1.00 96.38 C +ATOM 3525 C GLY D 38 18.039 12.552 -11.732 1.00 96.38 C +ATOM 3526 O GLY D 38 18.946 12.532 -12.567 1.00 96.38 O +ATOM 3527 N LEU D 39 18.107 13.082 -10.528 1.00 98.05 N +ATOM 3528 CA LEU D 39 19.318 13.741 -10.051 1.00 98.05 C +ATOM 3529 C LEU D 39 19.740 13.186 -8.695 1.00 98.05 C +ATOM 3530 CB LEU D 39 19.101 15.253 -9.952 1.00 98.05 C +ATOM 3531 O LEU D 39 18.892 12.856 -7.863 1.00 98.05 O +ATOM 3532 CG LEU D 39 18.579 15.947 -11.210 1.00 98.05 C +ATOM 3533 CD1 LEU D 39 18.183 17.386 -10.896 1.00 98.05 C +ATOM 3534 CD2 LEU D 39 19.625 15.905 -12.318 1.00 98.05 C +ATOM 3535 N ILE D 40 21.024 13.146 -8.502 1.00 97.83 N +ATOM 3536 CA ILE D 40 21.545 12.725 -7.206 1.00 97.83 C +ATOM 3537 C ILE D 40 21.691 13.938 -6.290 1.00 97.83 C +ATOM 3538 CB ILE D 40 22.900 11.997 -7.350 1.00 97.83 C +ATOM 3539 O ILE D 40 22.155 14.997 -6.720 1.00 97.83 O +ATOM 3540 CG1 ILE D 40 22.733 10.717 -8.176 1.00 97.83 C +ATOM 3541 CG2 ILE D 40 23.497 11.687 -5.974 1.00 97.83 C +ATOM 3542 CD1 ILE D 40 21.766 9.710 -7.569 1.00 97.83 C +ATOM 3543 N VAL D 41 21.196 13.860 -5.129 1.00 97.87 N +ATOM 3544 CA VAL D 41 21.381 14.902 -4.124 1.00 97.87 C +ATOM 3545 C VAL D 41 22.674 14.653 -3.352 1.00 97.87 C +ATOM 3546 CB VAL D 41 20.183 14.970 -3.150 1.00 97.87 C +ATOM 3547 O VAL D 41 22.834 13.607 -2.718 1.00 97.87 O +ATOM 3548 CG1 VAL D 41 20.386 16.082 -2.122 1.00 97.87 C +ATOM 3549 CG2 VAL D 41 18.881 15.182 -3.920 1.00 97.87 C +ATOM 3550 N GLU D 42 23.481 15.539 -3.272 1.00 93.35 N +ATOM 3551 CA GLU D 42 24.829 15.402 -2.727 1.00 93.35 C +ATOM 3552 C GLU D 42 24.803 15.336 -1.203 1.00 93.35 C +ATOM 3553 CB GLU D 42 25.717 16.560 -3.189 1.00 93.35 C +ATOM 3554 O GLU D 42 23.995 16.011 -0.561 1.00 93.35 O +ATOM 3555 CG GLU D 42 25.963 16.585 -4.691 1.00 93.35 C +ATOM 3556 CD GLU D 42 26.773 17.788 -5.146 1.00 93.35 C +ATOM 3557 OE1 GLU D 42 27.149 17.851 -6.338 1.00 93.35 O +ATOM 3558 OE2 GLU D 42 27.034 18.675 -4.303 1.00 93.35 O +ATOM 3559 N PRO D 43 25.784 14.558 -0.679 1.00 91.88 N +ATOM 3560 CA PRO D 43 25.962 14.628 0.773 1.00 91.88 C +ATOM 3561 C PRO D 43 26.566 15.954 1.231 1.00 91.88 C +ATOM 3562 CB PRO D 43 26.913 13.465 1.068 1.00 91.88 C +ATOM 3563 O PRO D 43 27.333 16.575 0.491 1.00 91.88 O +ATOM 3564 CG PRO D 43 26.929 12.657 -0.189 1.00 91.88 C +ATOM 3565 CD PRO D 43 26.521 13.542 -1.331 1.00 91.88 C +ATOM 3566 N ARG D 44 26.212 16.375 2.368 1.00 86.13 N +ATOM 3567 CA ARG D 44 26.742 17.626 2.901 1.00 86.13 C +ATOM 3568 C ARG D 44 28.110 17.413 3.540 1.00 86.13 C +ATOM 3569 CB ARG D 44 25.775 18.229 3.922 1.00 86.13 C +ATOM 3570 O ARG D 44 28.941 18.323 3.559 1.00 86.13 O +ATOM 3571 CG ARG D 44 24.434 18.639 3.334 1.00 86.13 C +ATOM 3572 CD ARG D 44 24.508 20.001 2.658 1.00 86.13 C +ATOM 3573 NE ARG D 44 24.681 21.077 3.630 1.00 86.13 N +ATOM 3574 NH1 ARG D 44 23.972 22.755 2.209 1.00 86.13 N +ATOM 3575 NH2 ARG D 44 24.615 23.256 4.352 1.00 86.13 N +ATOM 3576 CZ ARG D 44 24.422 22.360 3.395 1.00 86.13 C +ATOM 3577 N HIS D 45 28.284 16.246 4.155 1.00 81.89 N +ATOM 3578 CA HIS D 45 29.544 15.849 4.773 1.00 81.89 C +ATOM 3579 C HIS D 45 29.764 14.345 4.660 1.00 81.89 C +ATOM 3580 CB HIS D 45 29.579 16.276 6.242 1.00 81.89 C +ATOM 3581 O HIS D 45 28.921 13.629 4.113 1.00 81.89 O +ATOM 3582 CG HIS D 45 28.388 15.823 7.026 1.00 81.89 C +ATOM 3583 CD2 HIS D 45 27.290 16.496 7.442 1.00 81.89 C +ATOM 3584 ND1 HIS D 45 28.241 14.529 7.475 1.00 81.89 N +ATOM 3585 CE1 HIS D 45 27.100 14.425 8.135 1.00 81.89 C +ATOM 3586 NE2 HIS D 45 26.504 15.605 8.130 1.00 81.89 N +ATOM 3587 N GLU D 46 30.799 13.872 5.103 1.00 74.94 N +ATOM 3588 CA GLU D 46 31.230 12.492 4.896 1.00 74.94 C +ATOM 3589 C GLU D 46 30.237 11.507 5.506 1.00 74.94 C +ATOM 3590 CB GLU D 46 32.623 12.269 5.489 1.00 74.94 C +ATOM 3591 O GLU D 46 30.061 10.399 4.995 1.00 74.94 O +ATOM 3592 CG GLU D 46 33.752 12.825 4.633 1.00 74.94 C +ATOM 3593 CD GLU D 46 35.134 12.489 5.170 1.00 74.94 C +ATOM 3594 OE1 GLU D 46 36.141 12.805 4.496 1.00 74.94 O +ATOM 3595 OE2 GLU D 46 35.211 11.904 6.273 1.00 74.94 O +ATOM 3596 N GLN D 47 29.624 11.868 6.524 1.00 75.70 N +ATOM 3597 CA GLN D 47 28.701 10.966 7.206 1.00 75.70 C +ATOM 3598 C GLN D 47 27.287 11.104 6.651 1.00 75.70 C +ATOM 3599 CB GLN D 47 28.703 11.234 8.712 1.00 75.70 C +ATOM 3600 O GLN D 47 26.390 10.345 7.026 1.00 75.70 O +ATOM 3601 CG GLN D 47 30.031 10.927 9.390 1.00 75.70 C +ATOM 3602 CD GLN D 47 30.163 11.588 10.749 1.00 75.70 C +ATOM 3603 NE2 GLN D 47 31.289 11.355 11.415 1.00 75.70 N +ATOM 3604 OE1 GLN D 47 29.261 12.302 11.197 1.00 75.70 O +ATOM 3605 N ASP D 48 27.137 12.043 5.797 1.00 87.46 N +ATOM 3606 CA ASP D 48 25.836 12.283 5.179 1.00 87.46 C +ATOM 3607 C ASP D 48 25.633 11.385 3.961 1.00 87.46 C +ATOM 3608 CB ASP D 48 25.695 13.753 4.779 1.00 87.46 C +ATOM 3609 O ASP D 48 26.557 11.183 3.170 1.00 87.46 O +ATOM 3610 CG ASP D 48 24.275 14.128 4.391 1.00 87.46 C +ATOM 3611 OD1 ASP D 48 23.318 13.594 4.991 1.00 87.46 O +ATOM 3612 OD2 ASP D 48 24.113 14.963 3.475 1.00 87.46 O +ATOM 3613 N PRO D 49 24.447 10.799 3.771 1.00 92.92 N +ATOM 3614 CA PRO D 49 24.208 9.897 2.642 1.00 92.92 C +ATOM 3615 C PRO D 49 23.785 10.636 1.375 1.00 92.92 C +ATOM 3616 CB PRO D 49 23.083 8.990 3.148 1.00 92.92 C +ATOM 3617 O PRO D 49 23.419 11.813 1.435 1.00 92.92 O +ATOM 3618 CG PRO D 49 22.262 9.863 4.042 1.00 92.92 C +ATOM 3619 CD PRO D 49 23.185 10.787 4.783 1.00 92.92 C +ATOM 3620 N TYR D 50 23.848 9.925 0.265 1.00 94.38 N +ATOM 3621 CA TYR D 50 23.302 10.431 -0.990 1.00 94.38 C +ATOM 3622 C TYR D 50 21.779 10.387 -0.980 1.00 94.38 C +ATOM 3623 CB TYR D 50 23.840 9.622 -2.174 1.00 94.38 C +ATOM 3624 O TYR D 50 21.180 9.578 -0.268 1.00 94.38 O +ATOM 3625 CG TYR D 50 25.305 9.854 -2.453 1.00 94.38 C +ATOM 3626 CD1 TYR D 50 25.726 10.949 -3.204 1.00 94.38 C +ATOM 3627 CD2 TYR D 50 26.271 8.978 -1.968 1.00 94.38 C +ATOM 3628 CE1 TYR D 50 27.075 11.166 -3.465 1.00 94.38 C +ATOM 3629 CE2 TYR D 50 27.622 9.186 -2.223 1.00 94.38 C +ATOM 3630 OH TYR D 50 29.351 10.491 -3.226 1.00 94.38 O +ATOM 3631 CZ TYR D 50 28.014 10.281 -2.971 1.00 94.38 C +ATOM 3632 N GLY D 51 21.223 11.339 -1.676 1.00 96.82 N +ATOM 3633 CA GLY D 51 19.803 11.319 -1.986 1.00 96.82 C +ATOM 3634 C GLY D 51 19.518 11.314 -3.476 1.00 96.82 C +ATOM 3635 O GLY D 51 20.443 11.336 -4.290 1.00 96.82 O +ATOM 3636 N ILE D 52 18.249 11.229 -3.809 1.00 98.38 N +ATOM 3637 CA ILE D 52 17.849 11.250 -5.212 1.00 98.38 C +ATOM 3638 C ILE D 52 16.514 11.977 -5.358 1.00 98.38 C +ATOM 3639 CB ILE D 52 17.747 9.821 -5.792 1.00 98.38 C +ATOM 3640 O ILE D 52 15.649 11.880 -4.484 1.00 98.38 O +ATOM 3641 CG1 ILE D 52 17.518 9.874 -7.307 1.00 98.38 C +ATOM 3642 CG2 ILE D 52 16.632 9.034 -5.097 1.00 98.38 C +ATOM 3643 CD1 ILE D 52 17.706 8.536 -8.009 1.00 98.38 C +ATOM 3644 N VAL D 53 16.376 12.759 -6.397 1.00 98.59 N +ATOM 3645 CA VAL D 53 15.113 13.359 -6.813 1.00 98.59 C +ATOM 3646 C VAL D 53 14.822 12.998 -8.267 1.00 98.59 C +ATOM 3647 CB VAL D 53 15.129 14.894 -6.638 1.00 98.59 C +ATOM 3648 O VAL D 53 15.706 13.080 -9.123 1.00 98.59 O +ATOM 3649 CG1 VAL D 53 16.202 15.527 -7.523 1.00 98.59 C +ATOM 3650 CG2 VAL D 53 13.755 15.482 -6.956 1.00 98.59 C +ATOM 3651 N THR D 54 13.599 12.571 -8.553 1.00 98.22 N +ATOM 3652 CA THR D 54 13.256 12.073 -9.881 1.00 98.22 C +ATOM 3653 C THR D 54 12.110 12.881 -10.482 1.00 98.22 C +ATOM 3654 CB THR D 54 12.869 10.583 -9.836 1.00 98.22 C +ATOM 3655 O THR D 54 11.470 13.673 -9.788 1.00 98.22 O +ATOM 3656 CG2 THR D 54 13.914 9.766 -9.084 1.00 98.22 C +ATOM 3657 OG1 THR D 54 11.604 10.443 -9.177 1.00 98.22 O +ATOM 3658 N GLU D 55 11.878 12.658 -11.738 1.00 98.04 N +ATOM 3659 CA GLU D 55 10.749 13.288 -12.417 1.00 98.04 C +ATOM 3660 C GLU D 55 9.424 12.875 -11.784 1.00 98.04 C +ATOM 3661 CB GLU D 55 10.753 12.934 -13.907 1.00 98.04 C +ATOM 3662 O GLU D 55 8.482 13.670 -11.729 1.00 98.04 O +ATOM 3663 CG GLU D 55 10.650 11.441 -14.185 1.00 98.04 C +ATOM 3664 CD GLU D 55 10.722 11.100 -15.664 1.00 98.04 C +ATOM 3665 OE1 GLU D 55 10.525 9.917 -16.025 1.00 98.04 O +ATOM 3666 OE2 GLU D 55 10.979 12.023 -16.470 1.00 98.04 O +ATOM 3667 N THR D 56 9.401 11.675 -11.286 1.00 98.05 N +ATOM 3668 CA THR D 56 8.184 11.197 -10.641 1.00 98.05 C +ATOM 3669 C THR D 56 7.928 11.953 -9.340 1.00 98.05 C +ATOM 3670 CB THR D 56 8.261 9.686 -10.353 1.00 98.05 C +ATOM 3671 O THR D 56 6.789 12.321 -9.044 1.00 98.05 O +ATOM 3672 CG2 THR D 56 6.962 9.177 -9.736 1.00 98.05 C +ATOM 3673 OG1 THR D 56 8.502 8.984 -11.579 1.00 98.05 O +ATOM 3674 N ASP D 57 8.946 12.231 -8.593 1.00 98.51 N +ATOM 3675 CA ASP D 57 8.797 13.031 -7.381 1.00 98.51 C +ATOM 3676 C ASP D 57 8.201 14.401 -7.698 1.00 98.51 C +ATOM 3677 CB ASP D 57 10.145 13.194 -6.676 1.00 98.51 C +ATOM 3678 O ASP D 57 7.254 14.838 -7.041 1.00 98.51 O +ATOM 3679 CG ASP D 57 10.675 11.892 -6.102 1.00 98.51 C +ATOM 3680 OD1 ASP D 57 9.875 11.083 -5.585 1.00 98.51 O +ATOM 3681 OD2 ASP D 57 11.904 11.674 -6.165 1.00 98.51 O +ATOM 3682 N ILE D 58 8.714 14.999 -8.687 1.00 98.77 N +ATOM 3683 CA ILE D 58 8.321 16.355 -9.051 1.00 98.77 C +ATOM 3684 C ILE D 58 6.871 16.361 -9.532 1.00 98.77 C +ATOM 3685 CB ILE D 58 9.249 16.940 -10.140 1.00 98.77 C +ATOM 3686 O ILE D 58 6.065 17.178 -9.082 1.00 98.77 O +ATOM 3687 CG1 ILE D 58 10.657 17.164 -9.577 1.00 98.77 C +ATOM 3688 CG2 ILE D 58 8.670 18.242 -10.700 1.00 98.77 C +ATOM 3689 CD1 ILE D 58 11.691 17.543 -10.628 1.00 98.77 C +ATOM 3690 N VAL D 59 6.553 15.446 -10.349 1.00 98.61 N +ATOM 3691 CA VAL D 59 5.211 15.428 -10.920 1.00 98.61 C +ATOM 3692 C VAL D 59 4.197 15.042 -9.846 1.00 98.61 C +ATOM 3693 CB VAL D 59 5.116 14.454 -12.117 1.00 98.61 C +ATOM 3694 O VAL D 59 3.159 15.691 -9.701 1.00 98.61 O +ATOM 3695 CG1 VAL D 59 3.661 14.263 -12.543 1.00 98.61 C +ATOM 3696 CG2 VAL D 59 5.956 14.964 -13.286 1.00 98.61 C +ATOM 3697 N TYR D 60 4.520 14.078 -9.016 1.00 98.25 N +ATOM 3698 CA TYR D 60 3.596 13.559 -8.015 1.00 98.25 C +ATOM 3699 C TYR D 60 3.411 14.554 -6.875 1.00 98.25 C +ATOM 3700 CB TYR D 60 4.096 12.221 -7.463 1.00 98.25 C +ATOM 3701 O TYR D 60 2.322 14.662 -6.307 1.00 98.25 O +ATOM 3702 CG TYR D 60 3.720 11.034 -8.316 1.00 98.25 C +ATOM 3703 CD1 TYR D 60 3.317 11.202 -9.639 1.00 98.25 C +ATOM 3704 CD2 TYR D 60 3.766 9.743 -7.801 1.00 98.25 C +ATOM 3705 CE1 TYR D 60 2.968 10.111 -10.428 1.00 98.25 C +ATOM 3706 CE2 TYR D 60 3.419 8.644 -8.581 1.00 98.25 C +ATOM 3707 OH TYR D 60 2.677 7.755 -10.669 1.00 98.25 O +ATOM 3708 CZ TYR D 60 3.022 8.838 -9.892 1.00 98.25 C +ATOM 3709 N LYS D 61 4.459 15.240 -6.510 1.00 98.11 N +ATOM 3710 CA LYS D 61 4.431 15.989 -5.257 1.00 98.11 C +ATOM 3711 C LYS D 61 4.325 17.489 -5.515 1.00 98.11 C +ATOM 3712 CB LYS D 61 5.678 15.688 -4.423 1.00 98.11 C +ATOM 3713 O LYS D 61 3.976 18.256 -4.614 1.00 98.11 O +ATOM 3714 CG LYS D 61 5.797 14.234 -3.991 1.00 98.11 C +ATOM 3715 CD LYS D 61 7.076 13.989 -3.200 1.00 98.11 C +ATOM 3716 CE LYS D 61 7.254 12.514 -2.867 1.00 98.11 C +ATOM 3717 NZ LYS D 61 8.523 12.264 -2.120 1.00 98.11 N +ATOM 3718 N VAL D 62 4.616 17.925 -6.708 1.00 98.37 N +ATOM 3719 CA VAL D 62 4.622 19.360 -6.969 1.00 98.37 C +ATOM 3720 C VAL D 62 3.569 19.698 -8.022 1.00 98.37 C +ATOM 3721 CB VAL D 62 6.013 19.847 -7.432 1.00 98.37 C +ATOM 3722 O VAL D 62 2.537 20.296 -7.707 1.00 98.37 O +ATOM 3723 CG1 VAL D 62 6.034 21.368 -7.572 1.00 98.37 C +ATOM 3724 CG2 VAL D 62 7.092 19.383 -6.455 1.00 98.37 C +ATOM 3725 N ALA D 63 3.705 19.219 -9.222 1.00 97.90 N +ATOM 3726 CA ALA D 63 2.797 19.547 -10.317 1.00 97.90 C +ATOM 3727 C ALA D 63 1.371 19.109 -9.998 1.00 97.90 C +ATOM 3728 CB ALA D 63 3.272 18.898 -11.615 1.00 97.90 C +ATOM 3729 O ALA D 63 0.418 19.856 -10.233 1.00 97.90 O +ATOM 3730 N ALA D 64 1.252 18.020 -9.435 1.00 97.25 N +ATOM 3731 CA ALA D 64 -0.053 17.427 -9.155 1.00 97.25 C +ATOM 3732 C ALA D 64 -0.836 18.272 -8.154 1.00 97.25 C +ATOM 3733 CB ALA D 64 0.112 16.003 -8.630 1.00 97.25 C +ATOM 3734 O ALA D 64 -2.064 18.180 -8.081 1.00 97.25 O +ATOM 3735 N PHE D 65 -0.103 19.049 -7.408 1.00 95.91 N +ATOM 3736 CA PHE D 65 -0.762 19.783 -6.334 1.00 95.91 C +ATOM 3737 C PHE D 65 -0.691 21.285 -6.581 1.00 95.91 C +ATOM 3738 CB PHE D 65 -0.128 19.444 -4.981 1.00 95.91 C +ATOM 3739 O PHE D 65 -1.115 22.079 -5.739 1.00 95.91 O +ATOM 3740 CG PHE D 65 -0.295 18.004 -4.577 1.00 95.91 C +ATOM 3741 CD1 PHE D 65 -1.483 17.559 -4.011 1.00 95.91 C +ATOM 3742 CD2 PHE D 65 0.738 17.094 -4.763 1.00 95.91 C +ATOM 3743 CE1 PHE D 65 -1.641 16.227 -3.636 1.00 95.91 C +ATOM 3744 CE2 PHE D 65 0.588 15.761 -4.391 1.00 95.91 C +ATOM 3745 CZ PHE D 65 -0.601 15.330 -3.827 1.00 95.91 C +ATOM 3746 N GLY D 66 -0.113 21.640 -7.641 1.00 93.46 N +ATOM 3747 CA GLY D 66 -0.042 23.043 -8.018 1.00 93.46 C +ATOM 3748 C GLY D 66 0.922 23.842 -7.162 1.00 93.46 C +ATOM 3749 O GLY D 66 0.758 25.053 -6.999 1.00 93.46 O +ATOM 3750 N HIS D 67 1.820 23.280 -6.506 1.00 96.20 N +ATOM 3751 CA HIS D 67 2.835 23.998 -5.744 1.00 96.20 C +ATOM 3752 C HIS D 67 3.774 24.769 -6.666 1.00 96.20 C +ATOM 3753 CB HIS D 67 3.636 23.029 -4.872 1.00 96.20 C +ATOM 3754 O HIS D 67 3.971 24.384 -7.821 1.00 96.20 O +ATOM 3755 CG HIS D 67 2.819 22.360 -3.813 1.00 96.20 C +ATOM 3756 CD2 HIS D 67 2.746 21.063 -3.433 1.00 96.20 C +ATOM 3757 ND1 HIS D 67 1.940 23.049 -3.005 1.00 96.20 N +ATOM 3758 CE1 HIS D 67 1.362 22.201 -2.170 1.00 96.20 C +ATOM 3759 NE2 HIS D 67 1.833 20.990 -2.410 1.00 96.20 N +ATOM 3760 N ASP D 68 4.381 25.774 -6.144 1.00 96.18 N +ATOM 3761 CA ASP D 68 5.302 26.585 -6.934 1.00 96.18 C +ATOM 3762 C ASP D 68 6.716 26.010 -6.891 1.00 96.18 C +ATOM 3763 CB ASP D 68 5.307 28.031 -6.435 1.00 96.18 C +ATOM 3764 O ASP D 68 7.375 26.046 -5.850 1.00 96.18 O +ATOM 3765 CG ASP D 68 6.144 28.955 -7.303 1.00 96.18 C +ATOM 3766 OD1 ASP D 68 6.811 28.470 -8.242 1.00 96.18 O +ATOM 3767 OD2 ASP D 68 6.140 30.177 -7.042 1.00 96.18 O +ATOM 3768 N PRO D 69 7.160 25.544 -8.021 1.00 98.07 N +ATOM 3769 CA PRO D 69 8.496 24.943 -8.044 1.00 98.07 C +ATOM 3770 C PRO D 69 9.601 25.949 -7.731 1.00 98.07 C +ATOM 3771 CB PRO D 69 8.623 24.421 -9.478 1.00 98.07 C +ATOM 3772 O PRO D 69 10.729 25.556 -7.421 1.00 98.07 O +ATOM 3773 CG PRO D 69 7.218 24.347 -9.983 1.00 98.07 C +ATOM 3774 CD PRO D 69 6.415 25.429 -9.320 1.00 98.07 C +ATOM 3775 N LYS D 70 9.343 27.162 -7.816 1.00 97.02 N +ATOM 3776 CA LYS D 70 10.348 28.188 -7.550 1.00 97.02 C +ATOM 3777 C LYS D 70 10.508 28.424 -6.051 1.00 97.02 C +ATOM 3778 CB LYS D 70 9.978 29.497 -8.250 1.00 97.02 C +ATOM 3779 O LYS D 70 11.506 28.999 -5.611 1.00 97.02 O +ATOM 3780 CG LYS D 70 9.989 29.411 -9.769 1.00 97.02 C +ATOM 3781 CD LYS D 70 9.502 30.706 -10.405 1.00 97.02 C +ATOM 3782 CE LYS D 70 9.342 30.564 -11.913 1.00 97.02 C +ATOM 3783 NZ LYS D 70 8.721 31.779 -12.521 1.00 97.02 N +ATOM 3784 N THR D 71 9.548 27.985 -5.261 1.00 96.22 N +ATOM 3785 CA THR D 71 9.593 28.157 -3.813 1.00 96.22 C +ATOM 3786 C THR D 71 9.872 26.828 -3.119 1.00 96.22 C +ATOM 3787 CB THR D 71 8.277 28.752 -3.280 1.00 96.22 C +ATOM 3788 O THR D 71 10.622 26.777 -2.142 1.00 96.22 O +ATOM 3789 CG2 THR D 71 7.963 30.085 -3.951 1.00 96.22 C +ATOM 3790 OG1 THR D 71 7.206 27.835 -3.539 1.00 96.22 O +ATOM 3791 N MET D 72 9.353 25.808 -3.651 1.00 97.93 N +ATOM 3792 CA MET D 72 9.578 24.495 -3.052 1.00 97.93 C +ATOM 3793 C MET D 72 11.004 24.018 -3.307 1.00 97.93 C +ATOM 3794 CB MET D 72 8.579 23.475 -3.600 1.00 97.93 C +ATOM 3795 O MET D 72 11.568 24.275 -4.372 1.00 97.93 O +ATOM 3796 CG MET D 72 8.496 22.197 -2.781 1.00 97.93 C +ATOM 3797 SD MET D 72 7.114 21.112 -3.308 1.00 97.93 S +ATOM 3798 CE MET D 72 5.707 22.029 -2.620 1.00 97.93 C +ATOM 3799 N ARG D 73 11.543 23.342 -2.321 1.00 98.48 N +ATOM 3800 CA ARG D 73 12.946 22.944 -2.391 1.00 98.48 C +ATOM 3801 C ARG D 73 13.079 21.439 -2.594 1.00 98.48 C +ATOM 3802 CB ARG D 73 13.690 23.371 -1.124 1.00 98.48 C +ATOM 3803 O ARG D 73 12.166 20.679 -2.261 1.00 98.48 O +ATOM 3804 CG ARG D 73 13.567 24.853 -0.807 1.00 98.48 C +ATOM 3805 CD ARG D 73 14.321 25.710 -1.813 1.00 98.48 C +ATOM 3806 NE ARG D 73 14.293 27.123 -1.447 1.00 98.48 N +ATOM 3807 NH1 ARG D 73 16.407 27.588 -2.255 1.00 98.48 N +ATOM 3808 NH2 ARG D 73 15.153 29.247 -1.291 1.00 98.48 N +ATOM 3809 CZ ARG D 73 15.284 27.982 -1.665 1.00 98.48 C +ATOM 3810 N VAL D 74 14.195 21.004 -3.069 1.00 98.71 N +ATOM 3811 CA VAL D 74 14.482 19.611 -3.396 1.00 98.71 C +ATOM 3812 C VAL D 74 14.420 18.760 -2.129 1.00 98.71 C +ATOM 3813 CB VAL D 74 15.862 19.459 -4.073 1.00 98.71 C +ATOM 3814 O VAL D 74 13.874 17.654 -2.142 1.00 98.71 O +ATOM 3815 CG1 VAL D 74 16.311 17.999 -4.063 1.00 98.71 C +ATOM 3816 CG2 VAL D 74 15.817 19.998 -5.502 1.00 98.71 C +ATOM 3817 N TYR D 75 14.874 19.246 -1.003 1.00 97.53 N +ATOM 3818 CA TYR D 75 14.916 18.448 0.217 1.00 97.53 C +ATOM 3819 C TYR D 75 13.509 18.138 0.714 1.00 97.53 C +ATOM 3820 CB TYR D 75 15.707 19.175 1.309 1.00 97.53 C +ATOM 3821 O TYR D 75 13.321 17.251 1.550 1.00 97.53 O +ATOM 3822 CG TYR D 75 14.999 20.386 1.866 1.00 97.53 C +ATOM 3823 CD1 TYR D 75 15.389 21.674 1.505 1.00 97.53 C +ATOM 3824 CD2 TYR D 75 13.939 20.246 2.756 1.00 97.53 C +ATOM 3825 CE1 TYR D 75 14.741 22.792 2.017 1.00 97.53 C +ATOM 3826 CE2 TYR D 75 13.284 21.357 3.276 1.00 97.53 C +ATOM 3827 OH TYR D 75 13.046 23.729 3.411 1.00 97.53 O +ATOM 3828 CZ TYR D 75 13.691 22.624 2.900 1.00 97.53 C +ATOM 3829 N GLU D 76 12.516 18.849 0.216 1.00 97.92 N +ATOM 3830 CA GLU D 76 11.135 18.631 0.637 1.00 97.92 C +ATOM 3831 C GLU D 76 10.517 17.442 -0.093 1.00 97.92 C +ATOM 3832 CB GLU D 76 10.296 19.889 0.399 1.00 97.92 C +ATOM 3833 O GLU D 76 9.523 16.875 0.364 1.00 97.92 O +ATOM 3834 CG GLU D 76 10.737 21.088 1.225 1.00 97.92 C +ATOM 3835 CD GLU D 76 9.980 22.362 0.886 1.00 97.92 C +ATOM 3836 OE1 GLU D 76 10.524 23.213 0.147 1.00 97.92 O +ATOM 3837 OE2 GLU D 76 8.833 22.510 1.363 1.00 97.92 O +ATOM 3838 N ILE D 77 11.084 17.005 -1.235 1.00 98.32 N +ATOM 3839 CA ILE D 77 10.406 15.990 -2.033 1.00 98.32 C +ATOM 3840 C ILE D 77 11.370 14.848 -2.345 1.00 98.32 C +ATOM 3841 CB ILE D 77 9.840 16.585 -3.342 1.00 98.32 C +ATOM 3842 O ILE D 77 10.963 13.807 -2.866 1.00 98.32 O +ATOM 3843 CG1 ILE D 77 10.973 17.155 -4.203 1.00 98.32 C +ATOM 3844 CG2 ILE D 77 8.791 17.659 -3.038 1.00 98.32 C +ATOM 3845 CD1 ILE D 77 10.597 17.359 -5.664 1.00 98.32 C +ATOM 3846 N MET D 78 12.610 14.934 -2.049 1.00 98.18 N +ATOM 3847 CA MET D 78 13.642 13.959 -2.391 1.00 98.18 C +ATOM 3848 C MET D 78 13.539 12.724 -1.503 1.00 98.18 C +ATOM 3849 CB MET D 78 15.034 14.580 -2.265 1.00 98.18 C +ATOM 3850 O MET D 78 12.877 12.754 -0.464 1.00 98.18 O +ATOM 3851 CG MET D 78 15.436 14.897 -0.833 1.00 98.18 C +ATOM 3852 SD MET D 78 17.116 15.624 -0.720 1.00 98.18 S +ATOM 3853 CE MET D 78 17.272 15.791 1.080 1.00 98.18 C +ATOM 3854 N ALA D 79 14.181 11.638 -1.978 1.00 97.71 N +ATOM 3855 CA ALA D 79 14.463 10.481 -1.131 1.00 97.71 C +ATOM 3856 C ALA D 79 15.894 10.525 -0.601 1.00 97.71 C +ATOM 3857 CB ALA D 79 14.225 9.186 -1.904 1.00 97.71 C +ATOM 3858 O ALA D 79 16.851 10.453 -1.375 1.00 97.71 O +ATOM 3859 N LYS D 80 16.032 10.661 0.682 1.00 96.64 N +ATOM 3860 CA LYS D 80 17.331 10.689 1.346 1.00 96.64 C +ATOM 3861 C LYS D 80 17.246 10.088 2.746 1.00 96.64 C +ATOM 3862 CB LYS D 80 17.865 12.120 1.422 1.00 96.64 C +ATOM 3863 O LYS D 80 16.501 10.583 3.595 1.00 96.64 O +ATOM 3864 CG LYS D 80 19.290 12.223 1.945 1.00 96.64 C +ATOM 3865 CD LYS D 80 19.856 13.624 1.753 1.00 96.64 C +ATOM 3866 CE LYS D 80 21.307 13.709 2.209 1.00 96.64 C +ATOM 3867 NZ LYS D 80 21.934 15.008 1.821 1.00 96.64 N +ATOM 3868 N PRO D 81 17.989 9.049 3.101 1.00 95.42 N +ATOM 3869 CA PRO D 81 18.861 8.293 2.199 1.00 95.42 C +ATOM 3870 C PRO D 81 18.084 7.530 1.129 1.00 95.42 C +ATOM 3871 CB PRO D 81 19.588 7.328 3.138 1.00 95.42 C +ATOM 3872 O PRO D 81 16.864 7.380 1.235 1.00 95.42 O +ATOM 3873 CG PRO D 81 18.639 7.110 4.272 1.00 95.42 C +ATOM 3874 CD PRO D 81 17.819 8.355 4.453 1.00 95.42 C +ATOM 3875 N CYS D 82 18.721 7.202 0.096 1.00 95.14 N +ATOM 3876 CA CYS D 82 18.113 6.390 -0.952 1.00 95.14 C +ATOM 3877 C CYS D 82 18.727 4.995 -0.985 1.00 95.14 C +ATOM 3878 CB CYS D 82 18.278 7.062 -2.315 1.00 95.14 C +ATOM 3879 O CYS D 82 19.802 4.771 -0.425 1.00 95.14 O +ATOM 3880 SG CYS D 82 19.998 7.384 -2.764 1.00 95.14 S +ATOM 3881 N VAL D 83 17.962 3.995 -1.536 1.00 95.48 N +ATOM 3882 CA VAL D 83 18.493 2.660 -1.790 1.00 95.48 C +ATOM 3883 C VAL D 83 19.653 2.745 -2.780 1.00 95.48 C +ATOM 3884 CB VAL D 83 17.402 1.708 -2.328 1.00 95.48 C +ATOM 3885 O VAL D 83 19.580 3.478 -3.770 1.00 95.48 O +ATOM 3886 CG1 VAL D 83 17.998 0.345 -2.675 1.00 95.48 C +ATOM 3887 CG2 VAL D 83 16.275 1.558 -1.307 1.00 95.48 C +ATOM 3888 N VAL D 84 20.662 2.054 -2.458 1.00 95.09 N +ATOM 3889 CA VAL D 84 21.837 2.088 -3.323 1.00 95.09 C +ATOM 3890 C VAL D 84 22.108 0.693 -3.881 1.00 95.09 C +ATOM 3891 CB VAL D 84 23.081 2.612 -2.571 1.00 95.09 C +ATOM 3892 O VAL D 84 21.677 -0.308 -3.304 1.00 95.09 O +ATOM 3893 CG1 VAL D 84 22.845 4.033 -2.062 1.00 95.09 C +ATOM 3894 CG2 VAL D 84 23.437 1.679 -1.415 1.00 95.09 C +ATOM 3895 N VAL D 85 22.815 0.640 -5.033 1.00 95.64 N +ATOM 3896 CA VAL D 85 23.121 -0.620 -5.703 1.00 95.64 C +ATOM 3897 C VAL D 85 24.630 -0.851 -5.706 1.00 95.64 C +ATOM 3898 CB VAL D 85 22.575 -0.641 -7.148 1.00 95.64 C +ATOM 3899 O VAL D 85 25.404 0.066 -5.994 1.00 95.64 O +ATOM 3900 CG1 VAL D 85 23.103 -1.858 -7.907 1.00 95.64 C +ATOM 3901 CG2 VAL D 85 21.047 -0.633 -7.142 1.00 95.64 C +ATOM 3902 N ASN D 86 25.072 -2.050 -5.390 1.00 93.46 N +ATOM 3903 CA ASN D 86 26.458 -2.479 -5.550 1.00 93.46 C +ATOM 3904 C ASN D 86 26.834 -2.622 -7.023 1.00 93.46 C +ATOM 3905 CB ASN D 86 26.701 -3.796 -4.810 1.00 93.46 C +ATOM 3906 O ASN D 86 26.105 -3.245 -7.796 1.00 93.46 O +ATOM 3907 CG ASN D 86 28.155 -4.224 -4.843 1.00 93.46 C +ATOM 3908 ND2 ASN D 86 28.630 -4.796 -3.743 1.00 93.46 N +ATOM 3909 OD1 ASN D 86 28.846 -4.041 -5.849 1.00 93.46 O +ATOM 3910 N PRO D 87 27.969 -2.053 -7.408 1.00 94.83 N +ATOM 3911 CA PRO D 87 28.351 -2.110 -8.821 1.00 94.83 C +ATOM 3912 C PRO D 87 28.534 -3.539 -9.325 1.00 94.83 C +ATOM 3913 CB PRO D 87 29.675 -1.343 -8.859 1.00 94.83 C +ATOM 3914 O PRO D 87 28.364 -3.804 -10.518 1.00 94.83 O +ATOM 3915 CG PRO D 87 30.176 -1.375 -7.451 1.00 94.83 C +ATOM 3916 CD PRO D 87 28.994 -1.401 -6.525 1.00 94.83 C +ATOM 3917 N GLU D 88 28.763 -4.458 -8.468 1.00 93.29 N +ATOM 3918 CA GLU D 88 29.039 -5.833 -8.874 1.00 93.29 C +ATOM 3919 C GLU D 88 27.777 -6.689 -8.823 1.00 93.29 C +ATOM 3920 CB GLU D 88 30.127 -6.447 -7.989 1.00 93.29 C +ATOM 3921 O GLU D 88 27.818 -7.884 -9.122 1.00 93.29 O +ATOM 3922 CG GLU D 88 31.470 -5.736 -8.083 1.00 93.29 C +ATOM 3923 CD GLU D 88 32.504 -6.277 -7.109 1.00 93.29 C +ATOM 3924 OE1 GLU D 88 33.689 -5.883 -7.201 1.00 93.29 O +ATOM 3925 OE2 GLU D 88 32.127 -7.103 -6.248 1.00 93.29 O +ATOM 3926 N LEU D 89 26.721 -6.093 -8.435 1.00 93.33 N +ATOM 3927 CA LEU D 89 25.465 -6.832 -8.368 1.00 93.33 C +ATOM 3928 C LEU D 89 24.989 -7.224 -9.763 1.00 93.33 C +ATOM 3929 CB LEU D 89 24.390 -6.000 -7.664 1.00 93.33 C +ATOM 3930 O LEU D 89 25.038 -6.413 -10.690 1.00 93.33 O +ATOM 3931 CG LEU D 89 23.124 -6.747 -7.239 1.00 93.33 C +ATOM 3932 CD1 LEU D 89 23.464 -7.827 -6.218 1.00 93.33 C +ATOM 3933 CD2 LEU D 89 22.093 -5.775 -6.675 1.00 93.33 C +ATOM 3934 N GLY D 90 24.457 -8.470 -9.900 1.00 93.00 N +ATOM 3935 CA GLY D 90 23.903 -8.911 -11.170 1.00 93.00 C +ATOM 3936 C GLY D 90 22.645 -8.159 -11.565 1.00 93.00 C +ATOM 3937 O GLY D 90 21.845 -7.784 -10.706 1.00 93.00 O +ATOM 3938 N VAL D 91 22.453 -8.058 -12.783 1.00 94.89 N +ATOM 3939 CA VAL D 91 21.387 -7.226 -13.332 1.00 94.89 C +ATOM 3940 C VAL D 91 20.028 -7.793 -12.925 1.00 94.89 C +ATOM 3941 CB VAL D 91 21.482 -7.123 -14.870 1.00 94.89 C +ATOM 3942 O VAL D 91 19.093 -7.039 -12.643 1.00 94.89 O +ATOM 3943 CG1 VAL D 91 20.244 -6.436 -15.443 1.00 94.89 C +ATOM 3944 CG2 VAL D 91 22.749 -6.374 -15.277 1.00 94.89 C +ATOM 3945 N GLU D 92 19.876 -9.053 -12.918 1.00 94.40 N +ATOM 3946 CA GLU D 92 18.606 -9.651 -12.517 1.00 94.40 C +ATOM 3947 C GLU D 92 18.285 -9.338 -11.059 1.00 94.40 C +ATOM 3948 CB GLU D 92 18.632 -11.165 -12.737 1.00 94.40 C +ATOM 3949 O GLU D 92 17.125 -9.118 -10.706 1.00 94.40 O +ATOM 3950 CG GLU D 92 18.707 -11.573 -14.201 1.00 94.40 C +ATOM 3951 CD GLU D 92 20.124 -11.567 -14.754 1.00 94.40 C +ATOM 3952 OE1 GLU D 92 20.315 -11.925 -15.938 1.00 94.40 O +ATOM 3953 OE2 GLU D 92 21.050 -11.203 -13.996 1.00 94.40 O +ATOM 3954 N TYR D 93 19.301 -9.343 -10.279 1.00 95.25 N +ATOM 3955 CA TYR D 93 19.111 -9.008 -8.872 1.00 95.25 C +ATOM 3956 C TYR D 93 18.780 -7.530 -8.703 1.00 95.25 C +ATOM 3957 CB TYR D 93 20.362 -9.359 -8.061 1.00 95.25 C +ATOM 3958 O TYR D 93 18.024 -7.156 -7.803 1.00 95.25 O +ATOM 3959 CG TYR D 93 20.513 -10.835 -7.784 1.00 95.25 C +ATOM 3960 CD1 TYR D 93 19.504 -11.549 -7.142 1.00 95.25 C +ATOM 3961 CD2 TYR D 93 21.663 -11.518 -8.163 1.00 95.25 C +ATOM 3962 CE1 TYR D 93 19.638 -12.909 -6.883 1.00 95.25 C +ATOM 3963 CE2 TYR D 93 21.809 -12.878 -7.909 1.00 95.25 C +ATOM 3964 OH TYR D 93 20.931 -14.910 -7.016 1.00 95.25 O +ATOM 3965 CZ TYR D 93 20.792 -13.564 -7.270 1.00 95.25 C +ATOM 3966 N VAL D 94 19.348 -6.671 -9.560 1.00 96.96 N +ATOM 3967 CA VAL D 94 18.950 -5.267 -9.551 1.00 96.96 C +ATOM 3968 C VAL D 94 17.461 -5.151 -9.869 1.00 96.96 C +ATOM 3969 CB VAL D 94 19.776 -4.436 -10.559 1.00 96.96 C +ATOM 3970 O VAL D 94 16.723 -4.453 -9.169 1.00 96.96 O +ATOM 3971 CG1 VAL D 94 19.357 -2.968 -10.520 1.00 96.96 C +ATOM 3972 CG2 VAL D 94 21.269 -4.577 -10.267 1.00 96.96 C +ATOM 3973 N ALA D 95 17.077 -5.880 -10.896 1.00 98.10 N +ATOM 3974 CA ALA D 95 15.662 -5.895 -11.258 1.00 98.10 C +ATOM 3975 C ALA D 95 14.800 -6.342 -10.081 1.00 98.10 C +ATOM 3976 CB ALA D 95 15.430 -6.807 -12.460 1.00 98.10 C +ATOM 3977 O ALA D 95 13.768 -5.732 -9.792 1.00 98.10 O +ATOM 3978 N ARG D 96 15.191 -7.364 -9.423 1.00 97.79 N +ATOM 3979 CA ARG D 96 14.443 -7.895 -8.288 1.00 97.79 C +ATOM 3980 C ARG D 96 14.408 -6.893 -7.138 1.00 97.79 C +ATOM 3981 CB ARG D 96 15.052 -9.216 -7.814 1.00 97.79 C +ATOM 3982 O ARG D 96 13.379 -6.733 -6.479 1.00 97.79 O +ATOM 3983 CG ARG D 96 14.210 -9.947 -6.780 1.00 97.79 C +ATOM 3984 CD ARG D 96 14.739 -11.348 -6.510 1.00 97.79 C +ATOM 3985 NE ARG D 96 14.107 -11.946 -5.337 1.00 97.79 N +ATOM 3986 NH1 ARG D 96 12.412 -12.978 -6.521 1.00 97.79 N +ATOM 3987 NH2 ARG D 96 12.525 -13.200 -4.242 1.00 97.79 N +ATOM 3988 CZ ARG D 96 13.016 -12.707 -5.369 1.00 97.79 C +ATOM 3989 N LEU D 97 15.531 -6.215 -6.899 1.00 97.66 N +ATOM 3990 CA LEU D 97 15.581 -5.177 -5.875 1.00 97.66 C +ATOM 3991 C LEU D 97 14.583 -4.065 -6.180 1.00 97.66 C +ATOM 3992 CB LEU D 97 16.994 -4.597 -5.769 1.00 97.66 C +ATOM 3993 O LEU D 97 13.848 -3.625 -5.293 1.00 97.66 O +ATOM 3994 CG LEU D 97 17.213 -3.542 -4.683 1.00 97.66 C +ATOM 3995 CD1 LEU D 97 16.978 -4.145 -3.302 1.00 97.66 C +ATOM 3996 CD2 LEU D 97 18.617 -2.955 -4.783 1.00 97.66 C +ATOM 3997 N PHE D 98 14.526 -3.650 -7.415 1.00 98.15 N +ATOM 3998 CA PHE D 98 13.575 -2.626 -7.834 1.00 98.15 C +ATOM 3999 C PHE D 98 12.142 -3.102 -7.628 1.00 98.15 C +ATOM 4000 CB PHE D 98 13.799 -2.253 -9.303 1.00 98.15 C +ATOM 4001 O PHE D 98 11.309 -2.365 -7.097 1.00 98.15 O +ATOM 4002 CG PHE D 98 15.008 -1.387 -9.532 1.00 98.15 C +ATOM 4003 CD1 PHE D 98 15.740 -0.894 -8.459 1.00 98.15 C +ATOM 4004 CD2 PHE D 98 15.411 -1.065 -10.821 1.00 98.15 C +ATOM 4005 CE1 PHE D 98 16.860 -0.092 -8.668 1.00 98.15 C +ATOM 4006 CE2 PHE D 98 16.529 -0.264 -11.038 1.00 98.15 C +ATOM 4007 CZ PHE D 98 17.251 0.223 -9.960 1.00 98.15 C +ATOM 4008 N ALA D 99 11.928 -4.318 -8.012 1.00 97.88 N +ATOM 4009 CA ALA D 99 10.586 -4.872 -7.858 1.00 97.88 C +ATOM 4010 C ALA D 99 10.182 -4.930 -6.387 1.00 97.88 C +ATOM 4011 CB ALA D 99 10.510 -6.263 -8.482 1.00 97.88 C +ATOM 4012 O ALA D 99 9.061 -4.560 -6.030 1.00 97.88 O +ATOM 4013 N GLN D 100 11.033 -5.319 -5.516 1.00 96.09 N +ATOM 4014 CA GLN D 100 10.747 -5.493 -4.096 1.00 96.09 C +ATOM 4015 C GLN D 100 10.564 -4.146 -3.402 1.00 96.09 C +ATOM 4016 CB GLN D 100 11.864 -6.285 -3.416 1.00 96.09 C +ATOM 4017 O GLN D 100 9.720 -4.008 -2.514 1.00 96.09 O +ATOM 4018 CG GLN D 100 11.872 -7.766 -3.771 1.00 96.09 C +ATOM 4019 CD GLN D 100 13.090 -8.493 -3.232 1.00 96.09 C +ATOM 4020 NE2 GLN D 100 13.052 -9.821 -3.267 1.00 96.09 N +ATOM 4021 OE1 GLN D 100 14.058 -7.866 -2.790 1.00 96.09 O +ATOM 4022 N THR D 101 11.350 -3.152 -3.815 1.00 96.65 N +ATOM 4023 CA THR D 101 11.333 -1.855 -3.146 1.00 96.65 C +ATOM 4024 C THR D 101 10.431 -0.874 -3.890 1.00 96.65 C +ATOM 4025 CB THR D 101 12.752 -1.267 -3.032 1.00 96.65 C +ATOM 4026 O THR D 101 10.186 0.236 -3.413 1.00 96.65 O +ATOM 4027 CG2 THR D 101 13.653 -2.163 -2.188 1.00 96.65 C +ATOM 4028 OG1 THR D 101 13.316 -1.140 -4.343 1.00 96.65 O +ATOM 4029 N ARG D 102 10.024 -1.187 -5.116 1.00 95.94 N +ATOM 4030 CA ARG D 102 9.131 -0.396 -5.956 1.00 95.94 C +ATOM 4031 C ARG D 102 9.788 0.917 -6.368 1.00 95.94 C +ATOM 4032 CB ARG D 102 7.815 -0.117 -5.228 1.00 95.94 C +ATOM 4033 O ARG D 102 9.133 1.961 -6.402 1.00 95.94 O +ATOM 4034 CG ARG D 102 7.004 -1.366 -4.921 1.00 95.94 C +ATOM 4035 CD ARG D 102 6.394 -1.966 -6.180 1.00 95.94 C +ATOM 4036 NE ARG D 102 5.481 -3.061 -5.867 1.00 95.94 N +ATOM 4037 NH1 ARG D 102 4.527 -3.141 -7.970 1.00 95.94 N +ATOM 4038 NH2 ARG D 102 3.830 -4.589 -6.335 1.00 95.94 N +ATOM 4039 CZ ARG D 102 4.615 -3.594 -6.725 1.00 95.94 C +ATOM 4040 N ILE D 103 11.087 0.849 -6.545 1.00 96.40 N +ATOM 4041 CA ILE D 103 11.798 1.981 -7.128 1.00 96.40 C +ATOM 4042 C ILE D 103 12.199 1.654 -8.565 1.00 96.40 C +ATOM 4043 CB ILE D 103 13.044 2.356 -6.295 1.00 96.40 C +ATOM 4044 O ILE D 103 12.108 0.501 -8.994 1.00 96.40 O +ATOM 4045 CG1 ILE D 103 14.058 1.206 -6.305 1.00 96.40 C +ATOM 4046 CG2 ILE D 103 12.646 2.723 -4.863 1.00 96.40 C +ATOM 4047 CD1 ILE D 103 15.384 1.544 -5.637 1.00 96.40 C +ATOM 4048 N ARG D 104 12.603 2.651 -9.317 1.00 96.61 N +ATOM 4049 CA ARG D 104 12.875 2.438 -10.734 1.00 96.61 C +ATOM 4050 C ARG D 104 14.297 2.861 -11.088 1.00 96.61 C +ATOM 4051 CB ARG D 104 11.870 3.205 -11.596 1.00 96.61 C +ATOM 4052 O ARG D 104 14.754 2.643 -12.212 1.00 96.61 O +ATOM 4053 CG ARG D 104 10.435 2.731 -11.438 1.00 96.61 C +ATOM 4054 CD ARG D 104 9.448 3.696 -12.080 1.00 96.61 C +ATOM 4055 NE ARG D 104 8.066 3.334 -11.778 1.00 96.61 N +ATOM 4056 NH1 ARG D 104 7.132 5.094 -12.948 1.00 96.61 N +ATOM 4057 NH2 ARG D 104 5.785 3.589 -11.864 1.00 96.61 N +ATOM 4058 CZ ARG D 104 6.997 4.006 -12.197 1.00 96.61 C +ATOM 4059 N ARG D 105 14.900 3.512 -10.148 1.00 97.36 N +ATOM 4060 CA ARG D 105 16.280 3.945 -10.338 1.00 97.36 C +ATOM 4061 C ARG D 105 16.996 4.097 -9.000 1.00 97.36 C +ATOM 4062 CB ARG D 105 16.327 5.266 -11.110 1.00 97.36 C +ATOM 4063 O ARG D 105 16.360 4.348 -7.975 1.00 97.36 O +ATOM 4064 CG ARG D 105 15.730 6.442 -10.355 1.00 97.36 C +ATOM 4065 CD ARG D 105 15.599 7.673 -11.242 1.00 97.36 C +ATOM 4066 NE ARG D 105 14.834 7.386 -12.452 1.00 97.36 N +ATOM 4067 NH1 ARG D 105 16.074 8.781 -13.814 1.00 97.36 N +ATOM 4068 NH2 ARG D 105 14.320 7.588 -14.681 1.00 97.36 N +ATOM 4069 CZ ARG D 105 15.078 7.919 -13.646 1.00 97.36 C +ATOM 4070 N ALA D 106 18.282 3.952 -9.066 1.00 97.65 N +ATOM 4071 CA ALA D 106 19.107 4.048 -7.864 1.00 97.65 C +ATOM 4072 C ALA D 106 20.552 4.387 -8.216 1.00 97.65 C +ATOM 4073 CB ALA D 106 19.047 2.745 -7.072 1.00 97.65 C +ATOM 4074 O ALA D 106 21.036 4.028 -9.292 1.00 97.65 O +ATOM 4075 N PRO D 107 21.196 5.099 -7.312 1.00 97.39 N +ATOM 4076 CA PRO D 107 22.629 5.310 -7.530 1.00 97.39 C +ATOM 4077 C PRO D 107 23.449 4.038 -7.333 1.00 97.39 C +ATOM 4078 CB PRO D 107 22.993 6.363 -6.479 1.00 97.39 C +ATOM 4079 O PRO D 107 23.093 3.190 -6.511 1.00 97.39 O +ATOM 4080 CG PRO D 107 21.961 6.208 -5.409 1.00 97.39 C +ATOM 4081 CD PRO D 107 20.705 5.670 -6.032 1.00 97.39 C +ATOM 4082 N VAL D 108 24.464 3.876 -8.147 1.00 96.98 N +ATOM 4083 CA VAL D 108 25.460 2.821 -7.997 1.00 96.98 C +ATOM 4084 C VAL D 108 26.677 3.361 -7.249 1.00 96.98 C +ATOM 4085 CB VAL D 108 25.888 2.246 -9.366 1.00 96.98 C +ATOM 4086 O VAL D 108 27.381 4.241 -7.750 1.00 96.98 O +ATOM 4087 CG1 VAL D 108 26.865 1.086 -9.184 1.00 96.98 C +ATOM 4088 CG2 VAL D 108 24.664 1.798 -10.162 1.00 96.98 C +ATOM 4089 N ILE D 109 26.896 2.841 -6.087 1.00 92.92 N +ATOM 4090 CA ILE D 109 27.931 3.384 -5.215 1.00 92.92 C +ATOM 4091 C ILE D 109 28.909 2.277 -4.825 1.00 92.92 C +ATOM 4092 CB ILE D 109 27.323 4.032 -3.951 1.00 92.92 C +ATOM 4093 O ILE D 109 28.495 1.166 -4.485 1.00 92.92 O +ATOM 4094 CG1 ILE D 109 26.409 5.200 -4.337 1.00 92.92 C +ATOM 4095 CG2 ILE D 109 28.428 4.493 -2.996 1.00 92.92 C +ATOM 4096 CD1 ILE D 109 25.699 5.847 -3.156 1.00 92.92 C +ATOM 4097 N GLN D 110 30.224 2.506 -4.889 1.00 90.31 N +ATOM 4098 CA GLN D 110 31.302 1.665 -4.379 1.00 90.31 C +ATOM 4099 C GLN D 110 32.020 2.337 -3.212 1.00 90.31 C +ATOM 4100 CB GLN D 110 32.300 1.337 -5.491 1.00 90.31 C +ATOM 4101 O GLN D 110 32.747 3.314 -3.404 1.00 90.31 O +ATOM 4102 CG GLN D 110 33.356 0.317 -5.089 1.00 90.31 C +ATOM 4103 CD GLN D 110 34.152 -0.201 -6.271 1.00 90.31 C +ATOM 4104 NE2 GLN D 110 34.450 -1.496 -6.264 1.00 90.31 N +ATOM 4105 OE1 GLN D 110 34.496 0.555 -7.185 1.00 90.31 O +ATOM 4106 N GLY D 111 31.802 1.782 -2.001 1.00 83.09 N +ATOM 4107 CA GLY D 111 32.302 2.502 -0.841 1.00 83.09 C +ATOM 4108 C GLY D 111 31.626 3.845 -0.635 1.00 83.09 C +ATOM 4109 O GLY D 111 30.423 3.907 -0.374 1.00 83.09 O +ATOM 4110 N LYS D 112 32.470 4.897 -0.869 1.00 83.13 N +ATOM 4111 CA LYS D 112 31.932 6.247 -0.718 1.00 83.13 C +ATOM 4112 C LYS D 112 31.872 6.967 -2.062 1.00 83.13 C +ATOM 4113 CB LYS D 112 32.774 7.053 0.272 1.00 83.13 C +ATOM 4114 O LYS D 112 31.502 8.141 -2.127 1.00 83.13 O +ATOM 4115 CG LYS D 112 32.692 6.551 1.706 1.00 83.13 C +ATOM 4116 CD LYS D 112 33.381 7.506 2.672 1.00 83.13 C +ATOM 4117 CE LYS D 112 33.238 7.042 4.116 1.00 83.13 C +ATOM 4118 NZ LYS D 112 33.876 7.997 5.070 1.00 83.13 N +ATOM 4119 N THR D 113 32.100 6.208 -3.074 1.00 89.76 N +ATOM 4120 CA THR D 113 32.219 6.848 -4.379 1.00 89.76 C +ATOM 4121 C THR D 113 30.985 6.570 -5.232 1.00 89.76 C +ATOM 4122 CB THR D 113 33.479 6.370 -5.123 1.00 89.76 C +ATOM 4123 O THR D 113 30.574 5.417 -5.382 1.00 89.76 O +ATOM 4124 CG2 THR D 113 33.679 7.144 -6.422 1.00 89.76 C +ATOM 4125 OG1 THR D 113 34.625 6.562 -4.284 1.00 89.76 O +ATOM 4126 N LEU D 114 30.431 7.589 -5.707 1.00 94.06 N +ATOM 4127 CA LEU D 114 29.317 7.486 -6.643 1.00 94.06 C +ATOM 4128 C LEU D 114 29.813 7.139 -8.043 1.00 94.06 C +ATOM 4129 CB LEU D 114 28.526 8.796 -6.681 1.00 94.06 C +ATOM 4130 O LEU D 114 30.579 7.898 -8.641 1.00 94.06 O +ATOM 4131 CG LEU D 114 27.362 8.858 -7.671 1.00 94.06 C +ATOM 4132 CD1 LEU D 114 26.272 7.870 -7.270 1.00 94.06 C +ATOM 4133 CD2 LEU D 114 26.804 10.274 -7.754 1.00 94.06 C +ATOM 4134 N LEU D 115 29.381 6.048 -8.672 1.00 95.79 N +ATOM 4135 CA LEU D 115 29.857 5.594 -9.974 1.00 95.79 C +ATOM 4136 C LEU D 115 28.864 5.957 -11.073 1.00 95.79 C +ATOM 4137 CB LEU D 115 30.092 4.081 -9.961 1.00 95.79 C +ATOM 4138 O LEU D 115 29.259 6.207 -12.214 1.00 95.79 O +ATOM 4139 CG LEU D 115 31.175 3.571 -9.010 1.00 95.79 C +ATOM 4140 CD1 LEU D 115 31.364 2.067 -9.179 1.00 95.79 C +ATOM 4141 CD2 LEU D 115 32.487 4.311 -9.247 1.00 95.79 C +ATOM 4142 N GLY D 116 27.591 5.916 -10.706 1.00 96.54 N +ATOM 4143 CA GLY D 116 26.552 6.171 -11.691 1.00 96.54 C +ATOM 4144 C GLY D 116 25.151 5.964 -11.148 1.00 96.54 C +ATOM 4145 O GLY D 116 24.932 6.032 -9.937 1.00 96.54 O +ATOM 4146 N ILE D 117 24.153 5.895 -12.080 1.00 97.27 N +ATOM 4147 CA ILE D 117 22.754 5.608 -11.787 1.00 97.27 C +ATOM 4148 C ILE D 117 22.272 4.449 -12.657 1.00 97.27 C +ATOM 4149 CB ILE D 117 21.863 6.851 -12.008 1.00 97.27 C +ATOM 4150 O ILE D 117 22.610 4.371 -13.841 1.00 97.27 O +ATOM 4151 CG1 ILE D 117 22.203 7.940 -10.985 1.00 97.27 C +ATOM 4152 CG2 ILE D 117 20.381 6.473 -11.934 1.00 97.27 C +ATOM 4153 CD1 ILE D 117 21.447 9.245 -11.195 1.00 97.27 C +ATOM 4154 N ILE D 118 21.598 3.557 -12.130 1.00 97.96 N +ATOM 4155 CA ILE D 118 21.005 2.462 -12.890 1.00 97.96 C +ATOM 4156 C ILE D 118 19.482 2.535 -12.798 1.00 97.96 C +ATOM 4157 CB ILE D 118 21.506 1.089 -12.388 1.00 97.96 C +ATOM 4158 O ILE D 118 18.932 2.838 -11.736 1.00 97.96 O +ATOM 4159 CG1 ILE D 118 20.974 -0.034 -13.285 1.00 97.96 C +ATOM 4160 CG2 ILE D 118 21.098 0.865 -10.929 1.00 97.96 C +ATOM 4161 CD1 ILE D 118 21.701 -1.361 -13.113 1.00 97.96 C +ATOM 4162 N SER D 119 18.802 2.269 -13.859 1.00 97.70 N +ATOM 4163 CA SER D 119 17.347 2.369 -13.902 1.00 97.70 C +ATOM 4164 C SER D 119 16.730 1.162 -14.602 1.00 97.70 C +ATOM 4165 CB SER D 119 16.919 3.654 -14.612 1.00 97.70 C +ATOM 4166 O SER D 119 17.444 0.346 -15.188 1.00 97.70 O +ATOM 4167 OG SER D 119 17.185 3.574 -16.002 1.00 97.70 O +ATOM 4168 N VAL D 120 15.439 1.067 -14.555 1.00 97.84 N +ATOM 4169 CA VAL D 120 14.703 0.037 -15.281 1.00 97.84 C +ATOM 4170 C VAL D 120 14.969 0.169 -16.778 1.00 97.84 C +ATOM 4171 CB VAL D 120 13.186 0.119 -15.000 1.00 97.84 C +ATOM 4172 O VAL D 120 15.016 -0.832 -17.498 1.00 97.84 O +ATOM 4173 CG1 VAL D 120 12.886 -0.236 -13.544 1.00 97.84 C +ATOM 4174 CG2 VAL D 120 12.657 1.513 -15.332 1.00 97.84 C +ATOM 4175 N SER D 121 15.195 1.366 -17.263 1.00 97.05 N +ATOM 4176 CA SER D 121 15.509 1.584 -18.672 1.00 97.05 C +ATOM 4177 C SER D 121 16.855 0.969 -19.039 1.00 97.05 C +ATOM 4178 CB SER D 121 15.517 3.078 -18.995 1.00 97.05 C +ATOM 4179 O SER D 121 16.993 0.350 -20.096 1.00 97.05 O +ATOM 4180 OG SER D 121 14.230 3.640 -18.808 1.00 97.05 O +ATOM 4181 N ASP D 122 17.760 1.170 -18.155 1.00 97.43 N +ATOM 4182 CA ASP D 122 19.064 0.562 -18.402 1.00 97.43 C +ATOM 4183 C ASP D 122 18.951 -0.957 -18.504 1.00 97.43 C +ATOM 4184 CB ASP D 122 20.051 0.943 -17.297 1.00 97.43 C +ATOM 4185 O ASP D 122 19.552 -1.571 -19.388 1.00 97.43 O +ATOM 4186 CG ASP D 122 20.438 2.412 -17.327 1.00 97.43 C +ATOM 4187 OD1 ASP D 122 20.651 2.964 -18.429 1.00 97.43 O +ATOM 4188 OD2 ASP D 122 20.533 3.021 -16.240 1.00 97.43 O +ATOM 4189 N ILE D 123 18.188 -1.535 -17.619 1.00 98.07 N +ATOM 4190 CA ILE D 123 18.014 -2.983 -17.623 1.00 98.07 C +ATOM 4191 C ILE D 123 17.349 -3.419 -18.927 1.00 98.07 C +ATOM 4192 CB ILE D 123 17.179 -3.456 -16.412 1.00 98.07 C +ATOM 4193 O ILE D 123 17.801 -4.366 -19.575 1.00 98.07 O +ATOM 4194 CG1 ILE D 123 17.927 -3.172 -15.104 1.00 98.07 C +ATOM 4195 CG2 ILE D 123 16.840 -4.944 -16.537 1.00 98.07 C +ATOM 4196 CD1 ILE D 123 17.102 -3.428 -13.851 1.00 98.07 C +ATOM 4197 N LEU D 124 16.373 -2.705 -19.340 1.00 98.25 N +ATOM 4198 CA LEU D 124 15.626 -3.076 -20.537 1.00 98.25 C +ATOM 4199 C LEU D 124 16.485 -2.915 -21.786 1.00 98.25 C +ATOM 4200 CB LEU D 124 14.358 -2.227 -20.662 1.00 98.25 C +ATOM 4201 O LEU D 124 16.546 -3.817 -22.624 1.00 98.25 O +ATOM 4202 CG LEU D 124 13.388 -2.617 -21.778 1.00 98.25 C +ATOM 4203 CD1 LEU D 124 12.497 -3.770 -21.327 1.00 98.25 C +ATOM 4204 CD2 LEU D 124 12.547 -1.417 -22.200 1.00 98.25 C +ATOM 4205 N PHE D 125 17.191 -1.855 -21.936 1.00 97.67 N +ATOM 4206 CA PHE D 125 17.829 -1.483 -23.193 1.00 97.67 C +ATOM 4207 C PHE D 125 19.240 -2.053 -23.273 1.00 97.67 C +ATOM 4208 CB PHE D 125 17.869 0.041 -23.347 1.00 97.67 C +ATOM 4209 O PHE D 125 19.759 -2.290 -24.367 1.00 97.67 O +ATOM 4210 CG PHE D 125 16.544 0.648 -23.721 1.00 97.67 C +ATOM 4211 CD1 PHE D 125 16.057 0.544 -25.018 1.00 97.67 C +ATOM 4212 CD2 PHE D 125 15.785 1.324 -22.774 1.00 97.67 C +ATOM 4213 CE1 PHE D 125 14.830 1.105 -25.366 1.00 97.67 C +ATOM 4214 CE2 PHE D 125 14.559 1.887 -23.115 1.00 97.67 C +ATOM 4215 CZ PHE D 125 14.084 1.777 -24.411 1.00 97.67 C +ATOM 4216 N LYS D 126 19.855 -2.282 -22.129 1.00 97.41 N +ATOM 4217 CA LYS D 126 21.289 -2.550 -22.194 1.00 97.41 C +ATOM 4218 C LYS D 126 21.612 -3.943 -21.659 1.00 97.41 C +ATOM 4219 CB LYS D 126 22.069 -1.494 -21.409 1.00 97.41 C +ATOM 4220 O LYS D 126 22.704 -4.465 -21.893 1.00 97.41 O +ATOM 4221 CG LYS D 126 21.844 -0.070 -21.895 1.00 97.41 C +ATOM 4222 CD LYS D 126 22.625 0.936 -21.060 1.00 97.41 C +ATOM 4223 CE LYS D 126 22.257 2.369 -21.421 1.00 97.41 C +ATOM 4224 NZ LYS D 126 22.881 3.353 -20.487 1.00 97.41 N +ATOM 4225 N SER D 127 20.714 -4.583 -20.979 1.00 96.41 N +ATOM 4226 CA SER D 127 21.040 -5.865 -20.363 1.00 96.41 C +ATOM 4227 C SER D 127 20.771 -7.023 -21.319 1.00 96.41 C +ATOM 4228 CB SER D 127 20.240 -6.061 -19.074 1.00 96.41 C +ATOM 4229 O SER D 127 20.362 -6.808 -22.462 1.00 96.41 O +ATOM 4230 OG SER D 127 18.936 -6.537 -19.360 1.00 96.41 O +ATOM 4231 N ASP D 128 21.092 -8.211 -20.830 1.00 95.76 N +ATOM 4232 CA ASP D 128 20.961 -9.395 -21.674 1.00 95.76 C +ATOM 4233 C ASP D 128 19.928 -10.364 -21.104 1.00 95.76 C +ATOM 4234 CB ASP D 128 22.312 -10.097 -21.826 1.00 95.76 C +ATOM 4235 O ASP D 128 20.030 -11.576 -21.302 1.00 95.76 O +ATOM 4236 CG ASP D 128 22.903 -10.541 -20.500 1.00 95.76 C +ATOM 4237 OD1 ASP D 128 22.300 -10.264 -19.440 1.00 95.76 O +ATOM 4238 OD2 ASP D 128 23.983 -11.170 -20.514 1.00 95.76 O +ATOM 4239 N PHE D 129 18.963 -9.862 -20.413 1.00 95.30 N +ATOM 4240 CA PHE D 129 18.009 -10.740 -19.745 1.00 95.30 C +ATOM 4241 C PHE D 129 17.120 -11.447 -20.762 1.00 95.30 C +ATOM 4242 CB PHE D 129 17.149 -9.948 -18.756 1.00 95.30 C +ATOM 4243 O PHE D 129 16.538 -12.491 -20.464 1.00 95.30 O +ATOM 4244 CG PHE D 129 16.121 -9.068 -19.414 1.00 95.30 C +ATOM 4245 CD1 PHE D 129 16.445 -7.779 -19.818 1.00 95.30 C +ATOM 4246 CD2 PHE D 129 14.829 -9.531 -19.630 1.00 95.30 C +ATOM 4247 CE1 PHE D 129 15.496 -6.962 -20.428 1.00 95.30 C +ATOM 4248 CE2 PHE D 129 13.875 -8.720 -20.239 1.00 95.30 C +ATOM 4249 CZ PHE D 129 14.210 -7.436 -20.636 1.00 95.30 C +ATOM 4250 N VAL D 130 16.964 -10.862 -21.939 1.00 96.85 N +ATOM 4251 CA VAL D 130 16.181 -11.515 -22.983 1.00 96.85 C +ATOM 4252 C VAL D 130 16.968 -12.689 -23.562 1.00 96.85 C +ATOM 4253 CB VAL D 130 15.796 -10.527 -24.106 1.00 96.85 C +ATOM 4254 O VAL D 130 16.431 -13.789 -23.716 1.00 96.85 O +ATOM 4255 CG1 VAL D 130 15.127 -11.262 -25.266 1.00 96.85 C +ATOM 4256 CG2 VAL D 130 14.878 -9.434 -23.562 1.00 96.85 C +ATOM 4257 N GLU D 131 18.244 -12.468 -23.827 1.00 94.49 N +ATOM 4258 CA GLU D 131 19.099 -13.472 -24.451 1.00 94.49 C +ATOM 4259 C GLU D 131 19.478 -14.568 -23.460 1.00 94.49 C +ATOM 4260 CB GLU D 131 20.361 -12.823 -25.025 1.00 94.49 C +ATOM 4261 O GLU D 131 19.561 -15.743 -23.825 1.00 94.49 O +ATOM 4262 CG GLU D 131 20.088 -11.845 -26.159 1.00 94.49 C +ATOM 4263 CD GLU D 131 19.607 -10.486 -25.676 1.00 94.49 C +ATOM 4264 OE1 GLU D 131 19.069 -9.707 -26.495 1.00 94.49 O +ATOM 4265 OE2 GLU D 131 19.771 -10.197 -24.470 1.00 94.49 O +ATOM 4266 N LYS D 132 19.700 -14.138 -22.236 1.00 92.34 N +ATOM 4267 CA LYS D 132 20.145 -15.083 -21.216 1.00 92.34 C +ATOM 4268 C LYS D 132 19.269 -14.999 -19.969 1.00 92.34 C +ATOM 4269 CB LYS D 132 21.607 -14.826 -20.847 1.00 92.34 C +ATOM 4270 O LYS D 132 19.747 -14.641 -18.891 1.00 92.34 O +ATOM 4271 CG LYS D 132 22.571 -14.945 -22.018 1.00 92.34 C +ATOM 4272 CD LYS D 132 24.006 -14.663 -21.593 1.00 92.34 C +ATOM 4273 CE LYS D 132 24.959 -14.694 -22.780 1.00 92.34 C +ATOM 4274 NZ LYS D 132 26.349 -14.320 -22.384 1.00 92.34 N +ATOM 4275 N PRO D 133 18.098 -15.519 -20.170 1.00 90.98 N +ATOM 4276 CA PRO D 133 17.277 -15.540 -18.958 1.00 90.98 C +ATOM 4277 C PRO D 133 17.843 -16.458 -17.877 1.00 90.98 C +ATOM 4278 CB PRO D 133 15.924 -16.055 -19.457 1.00 90.98 C +ATOM 4279 O PRO D 133 18.389 -17.521 -18.188 1.00 90.98 O +ATOM 4280 CG PRO D 133 16.242 -16.814 -20.705 1.00 90.98 C +ATOM 4281 CD PRO D 133 17.508 -16.260 -21.292 1.00 90.98 C +ATOM 4282 N LYS D 134 17.758 -15.998 -16.578 1.00 86.50 N +ATOM 4283 CA LYS D 134 18.386 -16.756 -15.500 1.00 86.50 C +ATOM 4284 C LYS D 134 17.374 -17.108 -14.414 1.00 86.50 C +ATOM 4285 CB LYS D 134 19.550 -15.969 -14.897 1.00 86.50 C +ATOM 4286 O LYS D 134 16.649 -16.237 -13.928 1.00 86.50 O +ATOM 4287 CG LYS D 134 20.711 -15.749 -15.855 1.00 86.50 C +ATOM 4288 CD LYS D 134 21.833 -14.953 -15.201 1.00 86.50 C +ATOM 4289 CE LYS D 134 22.955 -14.653 -16.186 1.00 86.50 C +ATOM 4290 NZ LYS D 134 24.034 -13.829 -15.563 1.00 86.50 N +ATOM 4291 N ARG D 135 17.335 -18.401 -14.069 1.00 88.89 N +ATOM 4292 CA ARG D 135 16.618 -18.832 -12.873 1.00 88.89 C +ATOM 4293 C ARG D 135 17.406 -18.494 -11.611 1.00 88.89 C +ATOM 4294 CB ARG D 135 16.335 -20.334 -12.927 1.00 88.89 C +ATOM 4295 O ARG D 135 18.401 -19.152 -11.299 1.00 88.89 O +ATOM 4296 CG ARG D 135 15.281 -20.799 -11.935 1.00 88.89 C +ATOM 4297 CD ARG D 135 14.791 -22.206 -12.250 1.00 88.89 C +ATOM 4298 NE ARG D 135 13.706 -22.610 -11.361 1.00 88.89 N +ATOM 4299 NH1 ARG D 135 13.159 -24.511 -12.555 1.00 88.89 N +ATOM 4300 NH2 ARG D 135 11.995 -23.970 -10.655 1.00 88.89 N +ATOM 4301 CZ ARG D 135 12.956 -23.696 -11.526 1.00 88.89 C +ATOM 4302 N LEU D 136 17.041 -17.641 -10.879 1.00 87.56 N +ATOM 4303 CA LEU D 136 17.829 -16.968 -9.852 1.00 87.56 C +ATOM 4304 C LEU D 136 18.219 -17.939 -8.743 1.00 87.56 C +ATOM 4305 CB LEU D 136 17.049 -15.789 -9.264 1.00 87.56 C +ATOM 4306 O LEU D 136 19.361 -17.928 -8.276 1.00 87.56 O +ATOM 4307 CG LEU D 136 16.793 -14.609 -10.203 1.00 87.56 C +ATOM 4308 CD1 LEU D 136 15.874 -13.591 -9.537 1.00 87.56 C +ATOM 4309 CD2 LEU D 136 18.109 -13.959 -10.616 1.00 87.56 C +ATOM 4310 N PHE D 137 17.390 -18.890 -8.366 1.00 93.02 N +ATOM 4311 CA PHE D 137 17.670 -19.722 -7.202 1.00 93.02 C +ATOM 4312 C PHE D 137 17.818 -21.185 -7.605 1.00 93.02 C +ATOM 4313 CB PHE D 137 16.561 -19.576 -6.156 1.00 93.02 C +ATOM 4314 O PHE D 137 17.441 -22.083 -6.851 1.00 93.02 O +ATOM 4315 CG PHE D 137 16.303 -18.153 -5.739 1.00 93.02 C +ATOM 4316 CD1 PHE D 137 17.342 -17.348 -5.288 1.00 93.02 C +ATOM 4317 CD2 PHE D 137 15.022 -17.621 -5.799 1.00 93.02 C +ATOM 4318 CE1 PHE D 137 17.106 -16.030 -4.901 1.00 93.02 C +ATOM 4319 CE2 PHE D 137 14.779 -16.305 -5.414 1.00 93.02 C +ATOM 4320 CZ PHE D 137 15.822 -15.512 -4.965 1.00 93.02 C +ATOM 4321 N ILE D 138 18.315 -21.413 -8.780 1.00 93.11 N +ATOM 4322 CA ILE D 138 18.395 -22.759 -9.337 1.00 93.11 C +ATOM 4323 C ILE D 138 19.327 -23.616 -8.483 1.00 93.11 C +ATOM 4324 CB ILE D 138 18.883 -22.735 -10.803 1.00 93.11 C +ATOM 4325 O ILE D 138 19.077 -24.807 -8.284 1.00 93.11 O +ATOM 4326 CG1 ILE D 138 18.779 -24.134 -11.422 1.00 93.11 C +ATOM 4327 CG2 ILE D 138 20.316 -22.204 -10.887 1.00 93.11 C +ATOM 4328 CD1 ILE D 138 17.350 -24.616 -11.626 1.00 93.11 C +ATOM 4329 N GLU D 139 20.381 -22.984 -7.959 1.00 93.20 N +ATOM 4330 CA GLU D 139 21.304 -23.751 -7.128 1.00 93.20 C +ATOM 4331 C GLU D 139 20.636 -24.202 -5.832 1.00 93.20 C +ATOM 4332 CB GLU D 139 22.556 -22.927 -6.815 1.00 93.20 C +ATOM 4333 O GLU D 139 20.816 -25.342 -5.399 1.00 93.20 O +ATOM 4334 CG GLU D 139 23.400 -22.602 -8.039 1.00 93.20 C +ATOM 4335 CD GLU D 139 23.931 -23.838 -8.748 1.00 93.20 C +ATOM 4336 OE1 GLU D 139 24.107 -23.798 -9.987 1.00 93.20 O +ATOM 4337 OE2 GLU D 139 24.171 -24.854 -8.059 1.00 93.20 O +ATOM 4338 N ASP D 140 19.905 -23.357 -5.214 1.00 95.21 N +ATOM 4339 CA ASP D 140 19.149 -23.730 -4.022 1.00 95.21 C +ATOM 4340 C ASP D 140 18.125 -24.818 -4.339 1.00 95.21 C +ATOM 4341 CB ASP D 140 18.449 -22.507 -3.426 1.00 95.21 C +ATOM 4342 O ASP D 140 17.955 -25.762 -3.565 1.00 95.21 O +ATOM 4343 CG ASP D 140 19.410 -21.548 -2.745 1.00 95.21 C +ATOM 4344 OD1 ASP D 140 20.376 -22.008 -2.099 1.00 95.21 O +ATOM 4345 OD2 ASP D 140 19.197 -20.321 -2.852 1.00 95.21 O +ATOM 4346 N GLU D 141 17.499 -24.689 -5.421 1.00 96.49 N +ATOM 4347 CA GLU D 141 16.496 -25.667 -5.832 1.00 96.49 C +ATOM 4348 C GLU D 141 17.118 -27.047 -6.027 1.00 96.49 C +ATOM 4349 CB GLU D 141 15.801 -25.216 -7.120 1.00 96.49 C +ATOM 4350 O GLU D 141 16.524 -28.060 -5.654 1.00 96.49 O +ATOM 4351 CG GLU D 141 14.932 -23.979 -6.949 1.00 96.49 C +ATOM 4352 CD GLU D 141 14.310 -23.498 -8.250 1.00 96.49 C +ATOM 4353 OE1 GLU D 141 14.274 -22.270 -8.489 1.00 96.49 O +ATOM 4354 OE2 GLU D 141 13.854 -24.357 -9.038 1.00 96.49 O +ATOM 4355 N ILE D 142 18.293 -27.048 -6.683 1.00 96.47 N +ATOM 4356 CA ILE D 142 18.997 -28.304 -6.915 1.00 96.47 C +ATOM 4357 C ILE D 142 19.339 -28.959 -5.579 1.00 96.47 C +ATOM 4358 CB ILE D 142 20.280 -28.087 -7.749 1.00 96.47 C +ATOM 4359 O ILE D 142 19.106 -30.155 -5.390 1.00 96.47 O +ATOM 4360 CG1 ILE D 142 19.922 -27.721 -9.194 1.00 96.47 C +ATOM 4361 CG2 ILE D 142 21.171 -29.332 -7.703 1.00 96.47 C +ATOM 4362 CD1 ILE D 142 21.100 -27.213 -10.014 1.00 96.47 C +ATOM 4363 N GLU D 143 19.826 -28.175 -4.667 1.00 96.42 N +ATOM 4364 CA GLU D 143 20.177 -28.711 -3.355 1.00 96.42 C +ATOM 4365 C GLU D 143 18.944 -29.234 -2.624 1.00 96.42 C +ATOM 4366 CB GLU D 143 20.878 -27.645 -2.508 1.00 96.42 C +ATOM 4367 O GLU D 143 18.975 -30.321 -2.043 1.00 96.42 O +ATOM 4368 CG GLU D 143 21.494 -28.185 -1.226 1.00 96.42 C +ATOM 4369 CD GLU D 143 22.322 -27.153 -0.478 1.00 96.42 C +ATOM 4370 OE1 GLU D 143 22.820 -27.461 0.629 1.00 96.42 O +ATOM 4371 OE2 GLU D 143 22.474 -26.027 -1.002 1.00 96.42 O +ATOM 4372 N ALA D 144 17.932 -28.540 -2.674 1.00 96.59 N +ATOM 4373 CA ALA D 144 16.683 -28.976 -2.053 1.00 96.59 C +ATOM 4374 C ALA D 144 16.177 -30.268 -2.688 1.00 96.59 C +ATOM 4375 CB ALA D 144 15.624 -27.882 -2.163 1.00 96.59 C +ATOM 4376 O ALA D 144 15.765 -31.194 -1.985 1.00 96.59 O +ATOM 4377 N ALA D 145 16.229 -30.306 -4.001 1.00 97.20 N +ATOM 4378 CA ALA D 145 15.777 -31.494 -4.719 1.00 97.20 C +ATOM 4379 C ALA D 145 16.629 -32.709 -4.361 1.00 97.20 C +ATOM 4380 CB ALA D 145 15.810 -31.251 -6.226 1.00 97.20 C +ATOM 4381 O ALA D 145 16.116 -33.826 -4.257 1.00 97.20 O +ATOM 4382 N ARG D 146 17.913 -32.507 -4.215 1.00 97.69 N +ATOM 4383 CA ARG D 146 18.805 -33.587 -3.807 1.00 97.69 C +ATOM 4384 C ARG D 146 18.417 -34.130 -2.436 1.00 97.69 C +ATOM 4385 CB ARG D 146 20.258 -33.107 -3.788 1.00 97.69 C +ATOM 4386 O ARG D 146 18.352 -35.345 -2.238 1.00 97.69 O +ATOM 4387 CG ARG D 146 20.898 -33.026 -5.165 1.00 97.69 C +ATOM 4388 CD ARG D 146 22.325 -32.500 -5.093 1.00 97.69 C +ATOM 4389 NE ARG D 146 22.956 -32.473 -6.410 1.00 97.69 N +ATOM 4390 NH1 ARG D 146 24.797 -31.254 -5.731 1.00 97.69 N +ATOM 4391 NH2 ARG D 146 24.598 -31.917 -7.916 1.00 97.69 N +ATOM 4392 CZ ARG D 146 24.116 -31.881 -6.682 1.00 97.69 C +ATOM 4393 N GLU D 147 18.191 -33.244 -1.547 1.00 96.33 N +ATOM 4394 CA GLU D 147 17.788 -33.656 -0.206 1.00 96.33 C +ATOM 4395 C GLU D 147 16.455 -34.398 -0.234 1.00 96.33 C +ATOM 4396 CB GLU D 147 17.695 -32.443 0.724 1.00 96.33 C +ATOM 4397 O GLU D 147 16.289 -35.414 0.444 1.00 96.33 O +ATOM 4398 CG GLU D 147 19.044 -31.840 1.085 1.00 96.33 C +ATOM 4399 CD GLU D 147 18.935 -30.620 1.986 1.00 96.33 C +ATOM 4400 OE1 GLU D 147 19.976 -29.995 2.291 1.00 96.33 O +ATOM 4401 OE2 GLU D 147 17.799 -30.287 2.391 1.00 96.33 O +ATOM 4402 N ASP D 148 15.572 -33.932 -1.016 1.00 96.05 N +ATOM 4403 CA ASP D 148 14.279 -34.595 -1.154 1.00 96.05 C +ATOM 4404 C ASP D 148 14.439 -35.995 -1.742 1.00 96.05 C +ATOM 4405 CB ASP D 148 13.339 -33.762 -2.028 1.00 96.05 C +ATOM 4406 O ASP D 148 13.810 -36.947 -1.275 1.00 96.05 O +ATOM 4407 CG ASP D 148 12.836 -32.510 -1.332 1.00 96.05 C +ATOM 4408 OD1 ASP D 148 13.044 -32.368 -0.107 1.00 96.05 O +ATOM 4409 OD2 ASP D 148 12.224 -31.659 -2.013 1.00 96.05 O +ATOM 4410 N ALA D 149 15.269 -36.079 -2.817 1.00 96.41 N +ATOM 4411 CA ALA D 149 15.505 -37.377 -3.445 1.00 96.41 C +ATOM 4412 C ALA D 149 16.096 -38.370 -2.449 1.00 96.41 C +ATOM 4413 CB ALA D 149 16.429 -37.224 -4.652 1.00 96.41 C +ATOM 4414 O ALA D 149 15.656 -39.519 -2.372 1.00 96.41 O +ATOM 4415 N ARG D 150 17.007 -37.888 -1.661 1.00 96.70 N +ATOM 4416 CA ARG D 150 17.609 -38.747 -0.646 1.00 96.70 C +ATOM 4417 C ARG D 150 16.567 -39.211 0.366 1.00 96.70 C +ATOM 4418 CB ARG D 150 18.746 -38.016 0.071 1.00 96.70 C +ATOM 4419 O ARG D 150 16.529 -40.388 0.731 1.00 96.70 O +ATOM 4420 CG ARG D 150 20.011 -37.879 -0.762 1.00 96.70 C +ATOM 4421 CD ARG D 150 21.096 -37.115 -0.017 1.00 96.70 C +ATOM 4422 NE ARG D 150 22.226 -36.798 -0.886 1.00 96.70 N +ATOM 4423 NH1 ARG D 150 23.012 -35.063 0.422 1.00 96.70 N +ATOM 4424 NH2 ARG D 150 24.099 -35.628 -1.516 1.00 96.70 N +ATOM 4425 CZ ARG D 150 23.110 -35.830 -0.658 1.00 96.70 C +ATOM 4426 N ALA D 151 15.751 -38.343 0.789 1.00 95.48 N +ATOM 4427 CA ALA D 151 14.728 -38.663 1.781 1.00 95.48 C +ATOM 4428 C ALA D 151 13.706 -39.646 1.217 1.00 95.48 C +ATOM 4429 CB ALA D 151 14.031 -37.390 2.256 1.00 95.48 C +ATOM 4430 O ALA D 151 13.322 -40.606 1.890 1.00 95.48 O +ATOM 4431 N ILE D 152 13.249 -39.433 0.004 1.00 96.18 N +ATOM 4432 CA ILE D 152 12.260 -40.293 -0.636 1.00 96.18 C +ATOM 4433 C ILE D 152 12.843 -41.690 -0.835 1.00 96.18 C +ATOM 4434 CB ILE D 152 11.793 -39.708 -1.988 1.00 96.18 C +ATOM 4435 O ILE D 152 12.173 -42.692 -0.574 1.00 96.18 O +ATOM 4436 CG1 ILE D 152 10.958 -38.443 -1.763 1.00 96.18 C +ATOM 4437 CG2 ILE D 152 11.003 -40.752 -2.783 1.00 96.18 C +ATOM 4438 CD1 ILE D 152 10.698 -37.639 -3.030 1.00 96.18 C +ATOM 4439 N CYS D 153 14.145 -41.802 -1.277 1.00 95.46 N +ATOM 4440 CA CYS D 153 14.790 -43.093 -1.485 1.00 95.46 C +ATOM 4441 C CYS D 153 14.971 -43.831 -0.164 1.00 95.46 C +ATOM 4442 CB CYS D 153 16.144 -42.912 -2.169 1.00 95.46 C +ATOM 4443 O CYS D 153 14.823 -45.053 -0.105 1.00 95.46 O +ATOM 4444 SG CYS D 153 16.027 -42.331 -3.875 1.00 95.46 S +ATOM 4445 N ALA D 154 15.216 -43.129 0.900 1.00 96.59 N +ATOM 4446 CA ALA D 154 15.350 -43.739 2.221 1.00 96.59 C +ATOM 4447 C ALA D 154 14.012 -44.284 2.711 1.00 96.59 C +ATOM 4448 CB ALA D 154 15.908 -42.728 3.220 1.00 96.59 C +ATOM 4449 O ALA D 154 13.955 -45.363 3.306 1.00 96.59 O +ATOM 4450 N ALA D 155 12.973 -43.600 2.423 1.00 95.10 N +ATOM 4451 CA ALA D 155 11.650 -43.971 2.918 1.00 95.10 C +ATOM 4452 C ALA D 155 11.026 -45.060 2.051 1.00 95.10 C +ATOM 4453 CB ALA D 155 10.738 -42.747 2.968 1.00 95.10 C +ATOM 4454 O ALA D 155 10.379 -45.977 2.564 1.00 95.10 O +ATOM 4455 N LYS D 156 11.212 -44.986 0.726 1.00 95.61 N +ATOM 4456 CA LYS D 156 10.471 -45.861 -0.177 1.00 95.61 C +ATOM 4457 C LYS D 156 11.385 -46.917 -0.792 1.00 95.61 C +ATOM 4458 CB LYS D 156 9.796 -45.046 -1.281 1.00 95.61 C +ATOM 4459 O LYS D 156 10.914 -47.844 -1.455 1.00 95.61 O +ATOM 4460 CG LYS D 156 8.751 -44.063 -0.773 1.00 95.61 C +ATOM 4461 CD LYS D 156 7.810 -43.622 -1.888 1.00 95.61 C +ATOM 4462 CE LYS D 156 6.699 -42.725 -1.360 1.00 95.61 C +ATOM 4463 NZ LYS D 156 5.753 -42.320 -2.442 1.00 95.61 N +ATOM 4464 N GLY D 157 12.667 -46.821 -0.615 1.00 95.03 N +ATOM 4465 CA GLY D 157 13.634 -47.762 -1.157 1.00 95.03 C +ATOM 4466 C GLY D 157 14.405 -47.210 -2.342 1.00 95.03 C +ATOM 4467 O GLY D 157 13.858 -46.453 -3.147 1.00 95.03 O +ATOM 4468 N GLU D 158 15.667 -47.502 -2.557 1.00 92.93 N +ATOM 4469 CA GLU D 158 16.582 -46.980 -3.568 1.00 92.93 C +ATOM 4470 C GLU D 158 16.154 -47.404 -4.970 1.00 92.93 C +ATOM 4471 CB GLU D 158 18.013 -47.446 -3.291 1.00 92.93 C +ATOM 4472 O GLU D 158 16.445 -46.714 -5.949 1.00 92.93 O +ATOM 4473 CG GLU D 158 18.661 -46.767 -2.093 1.00 92.93 C +ATOM 4474 CD GLU D 158 20.136 -47.101 -1.938 1.00 92.93 C +ATOM 4475 OE1 GLU D 158 20.803 -46.511 -1.058 1.00 92.93 O +ATOM 4476 OE2 GLU D 158 20.629 -47.959 -2.704 1.00 92.93 O +ATOM 4477 N THR D 159 15.432 -48.578 -5.061 1.00 93.57 N +ATOM 4478 CA THR D 159 15.052 -49.072 -6.379 1.00 93.57 C +ATOM 4479 C THR D 159 13.584 -48.767 -6.668 1.00 93.57 C +ATOM 4480 CB THR D 159 15.298 -50.587 -6.501 1.00 93.57 C +ATOM 4481 O THR D 159 13.030 -49.244 -7.660 1.00 93.57 O +ATOM 4482 CG2 THR D 159 16.773 -50.921 -6.309 1.00 93.57 C +ATOM 4483 OG1 THR D 159 14.530 -51.272 -5.504 1.00 93.57 O +ATOM 4484 N SER D 160 12.903 -48.001 -5.840 1.00 94.95 N +ATOM 4485 CA SER D 160 11.491 -47.674 -6.013 1.00 94.95 C +ATOM 4486 C SER D 160 11.289 -46.677 -7.149 1.00 94.95 C +ATOM 4487 CB SER D 160 10.908 -47.108 -4.717 1.00 94.95 C +ATOM 4488 O SER D 160 12.176 -45.872 -7.440 1.00 94.95 O +ATOM 4489 OG SER D 160 11.359 -45.782 -4.501 1.00 94.95 O +ATOM 4490 N PRO D 161 10.106 -46.783 -7.903 1.00 96.14 N +ATOM 4491 CA PRO D 161 9.794 -45.792 -8.936 1.00 96.14 C +ATOM 4492 C PRO D 161 9.768 -44.364 -8.395 1.00 96.14 C +ATOM 4493 CB PRO D 161 8.406 -46.217 -9.424 1.00 96.14 C +ATOM 4494 O PRO D 161 10.142 -43.426 -9.103 1.00 96.14 O +ATOM 4495 CG PRO D 161 8.272 -47.643 -8.999 1.00 96.14 C +ATOM 4496 CD PRO D 161 9.168 -47.876 -7.817 1.00 96.14 C +ATOM 4497 N ASP D 162 9.397 -44.204 -7.198 1.00 95.35 N +ATOM 4498 CA ASP D 162 9.343 -42.881 -6.583 1.00 95.35 C +ATOM 4499 C ASP D 162 10.743 -42.295 -6.417 1.00 95.35 C +ATOM 4500 CB ASP D 162 8.636 -42.947 -5.227 1.00 95.35 C +ATOM 4501 O ASP D 162 10.951 -41.100 -6.637 1.00 95.35 O +ATOM 4502 CG ASP D 162 7.161 -43.290 -5.343 1.00 95.35 C +ATOM 4503 OD1 ASP D 162 6.571 -43.087 -6.426 1.00 95.35 O +ATOM 4504 OD2 ASP D 162 6.583 -43.764 -4.341 1.00 95.35 O +ATOM 4505 N CYS D 163 11.665 -43.119 -5.999 1.00 93.40 N +ATOM 4506 CA CYS D 163 13.052 -42.691 -5.858 1.00 93.40 C +ATOM 4507 C CYS D 163 13.632 -42.268 -7.203 1.00 93.40 C +ATOM 4508 CB CYS D 163 13.900 -43.811 -5.256 1.00 93.40 C +ATOM 4509 O CYS D 163 14.236 -41.200 -7.315 1.00 93.40 O +ATOM 4510 SG CYS D 163 15.626 -43.351 -4.986 1.00 93.40 S +ATOM 4511 N ALA D 164 13.341 -43.076 -8.229 1.00 95.65 N +ATOM 4512 CA ALA D 164 13.829 -42.756 -9.568 1.00 95.65 C +ATOM 4513 C ALA D 164 13.261 -41.426 -10.056 1.00 95.65 C +ATOM 4514 CB ALA D 164 13.474 -43.873 -10.546 1.00 95.65 C +ATOM 4515 O ALA D 164 13.985 -40.604 -10.621 1.00 95.65 O +ATOM 4516 N ALA D 165 12.033 -41.233 -9.832 1.00 96.37 N +ATOM 4517 CA ALA D 165 11.383 -39.992 -10.244 1.00 96.37 C +ATOM 4518 C ALA D 165 11.993 -38.790 -9.528 1.00 96.37 C +ATOM 4519 CB ALA D 165 9.882 -40.062 -9.975 1.00 96.37 C +ATOM 4520 O ALA D 165 12.167 -37.725 -10.127 1.00 96.37 O +ATOM 4521 N ALA D 166 12.306 -38.905 -8.263 1.00 96.05 N +ATOM 4522 CA ALA D 166 12.900 -37.824 -7.482 1.00 96.05 C +ATOM 4523 C ALA D 166 14.264 -37.429 -8.041 1.00 96.05 C +ATOM 4524 CB ALA D 166 13.028 -38.233 -6.016 1.00 96.05 C +ATOM 4525 O ALA D 166 14.578 -36.241 -8.148 1.00 96.05 O +ATOM 4526 N TRP D 167 15.027 -38.378 -8.396 1.00 96.51 N +ATOM 4527 CA TRP D 167 16.348 -38.081 -8.941 1.00 96.51 C +ATOM 4528 C TRP D 167 16.239 -37.513 -10.352 1.00 96.51 C +ATOM 4529 CB TRP D 167 17.222 -39.338 -8.949 1.00 96.51 C +ATOM 4530 O TRP D 167 17.088 -36.726 -10.778 1.00 96.51 O +ATOM 4531 CG TRP D 167 17.880 -39.631 -7.634 1.00 96.51 C +ATOM 4532 CD1 TRP D 167 17.590 -40.657 -6.777 1.00 96.51 C +ATOM 4533 CD2 TRP D 167 18.937 -38.885 -7.023 1.00 96.51 C +ATOM 4534 CE2 TRP D 167 19.239 -39.516 -5.796 1.00 96.51 C +ATOM 4535 CE3 TRP D 167 19.659 -37.743 -7.394 1.00 96.51 C +ATOM 4536 NE1 TRP D 167 18.404 -40.593 -5.670 1.00 96.51 N +ATOM 4537 CH2 TRP D 167 20.925 -37.924 -5.325 1.00 96.51 C +ATOM 4538 CZ2 TRP D 167 20.234 -39.042 -4.938 1.00 96.51 C +ATOM 4539 CZ3 TRP D 167 20.649 -37.273 -6.539 1.00 96.51 C +ATOM 4540 N ASP D 168 15.206 -37.880 -11.044 1.00 96.48 N +ATOM 4541 CA ASP D 168 14.959 -37.277 -12.349 1.00 96.48 C +ATOM 4542 C ASP D 168 14.766 -35.767 -12.229 1.00 96.48 C +ATOM 4543 CB ASP D 168 13.734 -37.912 -13.011 1.00 96.48 C +ATOM 4544 O ASP D 168 15.224 -35.007 -13.084 1.00 96.48 O +ATOM 4545 CG ASP D 168 14.003 -39.311 -13.538 1.00 96.48 C +ATOM 4546 OD1 ASP D 168 15.181 -39.725 -13.593 1.00 96.48 O +ATOM 4547 OD2 ASP D 168 13.029 -40.003 -13.904 1.00 96.48 O +ATOM 4548 N VAL D 169 14.089 -35.396 -11.199 1.00 96.70 N +ATOM 4549 CA VAL D 169 13.887 -33.970 -10.960 1.00 96.70 C +ATOM 4550 C VAL D 169 15.236 -33.283 -10.758 1.00 96.70 C +ATOM 4551 CB VAL D 169 12.975 -33.723 -9.737 1.00 96.70 C +ATOM 4552 O VAL D 169 15.489 -32.220 -11.329 1.00 96.70 O +ATOM 4553 CG1 VAL D 169 12.923 -32.236 -9.395 1.00 96.70 C +ATOM 4554 CG2 VAL D 169 11.571 -34.264 -10.002 1.00 96.70 C +ATOM 4555 N VAL D 170 16.104 -33.842 -10.012 1.00 96.64 N +ATOM 4556 CA VAL D 170 17.439 -33.305 -9.774 1.00 96.64 C +ATOM 4557 C VAL D 170 18.188 -33.176 -11.099 1.00 96.64 C +ATOM 4558 CB VAL D 170 18.241 -34.189 -8.792 1.00 96.64 C +ATOM 4559 O VAL D 170 18.778 -32.132 -11.386 1.00 96.64 O +ATOM 4560 CG1 VAL D 170 19.681 -33.694 -8.672 1.00 96.64 C +ATOM 4561 CG2 VAL D 170 17.564 -34.213 -7.423 1.00 96.64 C +ATOM 4562 N GLU D 171 18.103 -34.213 -11.878 1.00 96.22 N +ATOM 4563 CA GLU D 171 18.808 -34.226 -13.157 1.00 96.22 C +ATOM 4564 C GLU D 171 18.266 -33.152 -14.096 1.00 96.22 C +ATOM 4565 CB GLU D 171 18.702 -35.603 -13.816 1.00 96.22 C +ATOM 4566 O GLU D 171 19.032 -32.492 -14.801 1.00 96.22 O +ATOM 4567 CG GLU D 171 19.562 -36.670 -13.153 1.00 96.22 C +ATOM 4568 CD GLU D 171 19.463 -38.027 -13.831 1.00 96.22 C +ATOM 4569 OE1 GLU D 171 20.184 -38.964 -13.421 1.00 96.22 O +ATOM 4570 OE2 GLU D 171 18.659 -38.153 -14.782 1.00 96.22 O +ATOM 4571 N GLU D 172 17.033 -33.014 -14.038 1.00 95.37 N +ATOM 4572 CA GLU D 172 16.424 -31.986 -14.877 1.00 95.37 C +ATOM 4573 C GLU D 172 16.885 -30.591 -14.464 1.00 95.37 C +ATOM 4574 CB GLU D 172 14.897 -32.075 -14.814 1.00 95.37 C +ATOM 4575 O GLU D 172 17.226 -29.767 -15.314 1.00 95.37 O +ATOM 4576 CG GLU D 172 14.186 -31.152 -15.793 1.00 95.37 C +ATOM 4577 CD GLU D 172 12.674 -31.316 -15.782 1.00 95.37 C +ATOM 4578 OE1 GLU D 172 11.981 -30.601 -16.541 1.00 95.37 O +ATOM 4579 OE2 GLU D 172 12.179 -32.165 -15.008 1.00 95.37 O +ATOM 4580 N LEU D 173 16.916 -30.353 -13.223 1.00 95.40 N +ATOM 4581 CA LEU D 173 17.366 -29.062 -12.712 1.00 95.40 C +ATOM 4582 C LEU D 173 18.843 -28.841 -13.020 1.00 95.40 C +ATOM 4583 CB LEU D 173 17.127 -28.971 -11.203 1.00 95.40 C +ATOM 4584 O LEU D 173 19.244 -27.739 -13.398 1.00 95.40 O +ATOM 4585 CG LEU D 173 15.673 -28.813 -10.755 1.00 95.40 C +ATOM 4586 CD1 LEU D 173 15.562 -28.993 -9.244 1.00 95.40 C +ATOM 4587 CD2 LEU D 173 15.127 -27.454 -11.178 1.00 95.40 C +ATOM 4588 N GLN D 174 19.632 -29.840 -12.851 1.00 95.08 N +ATOM 4589 CA GLN D 174 21.057 -29.746 -13.154 1.00 95.08 C +ATOM 4590 C GLN D 174 21.287 -29.478 -14.638 1.00 95.08 C +ATOM 4591 CB GLN D 174 21.781 -31.026 -12.733 1.00 95.08 C +ATOM 4592 O GLN D 174 22.182 -28.714 -15.005 1.00 95.08 O +ATOM 4593 CG GLN D 174 21.982 -31.152 -11.229 1.00 95.08 C +ATOM 4594 CD GLN D 174 22.635 -32.463 -10.832 1.00 95.08 C +ATOM 4595 NE2 GLN D 174 23.578 -32.398 -9.899 1.00 95.08 N +ATOM 4596 OE1 GLN D 174 22.293 -33.527 -11.359 1.00 95.08 O +ATOM 4597 N ALA D 175 20.453 -30.107 -15.430 1.00 92.89 N +ATOM 4598 CA ALA D 175 20.543 -29.863 -16.867 1.00 92.89 C +ATOM 4599 C ALA D 175 20.234 -28.405 -17.196 1.00 92.89 C +ATOM 4600 CB ALA D 175 19.595 -30.789 -17.625 1.00 92.89 C +ATOM 4601 O ALA D 175 20.935 -27.781 -17.996 1.00 92.89 O +ATOM 4602 N GLU D 176 19.277 -27.952 -16.548 1.00 90.80 N +ATOM 4603 CA GLU D 176 18.923 -26.553 -16.762 1.00 90.80 C +ATOM 4604 C GLU D 176 20.034 -25.623 -16.285 1.00 90.80 C +ATOM 4605 CB GLU D 176 17.611 -26.215 -16.048 1.00 90.80 C +ATOM 4606 O GLU D 176 20.367 -24.646 -16.960 1.00 90.80 O +ATOM 4607 CG GLU D 176 17.128 -24.792 -16.290 1.00 90.80 C +ATOM 4608 CD GLU D 176 15.665 -24.587 -15.932 1.00 90.80 C +ATOM 4609 OE1 GLU D 176 15.161 -23.448 -16.066 1.00 90.80 O +ATOM 4610 OE2 GLU D 176 15.017 -25.572 -15.511 1.00 90.80 O +ATOM 4611 N ALA D 177 20.583 -25.896 -15.183 1.00 90.10 N +ATOM 4612 CA ALA D 177 21.684 -25.096 -14.652 1.00 90.10 C +ATOM 4613 C ALA D 177 22.880 -25.113 -15.599 1.00 90.10 C +ATOM 4614 CB ALA D 177 22.093 -25.604 -13.272 1.00 90.10 C +ATOM 4615 O ALA D 177 23.526 -24.084 -15.812 1.00 90.10 O +ATOM 4616 N SER D 178 23.141 -26.267 -16.165 1.00 87.98 N +ATOM 4617 CA SER D 178 24.246 -26.397 -17.109 1.00 87.98 C +ATOM 4618 C SER D 178 23.976 -25.608 -18.387 1.00 87.98 C +ATOM 4619 CB SER D 178 24.491 -27.867 -17.450 1.00 87.98 C +ATOM 4620 O SER D 178 24.878 -24.964 -18.927 1.00 87.98 O +ATOM 4621 OG SER D 178 24.867 -28.595 -16.294 1.00 87.98 O +ATOM 4622 N HIS D 179 22.741 -25.726 -18.813 1.00 85.78 N +ATOM 4623 CA HIS D 179 22.356 -24.963 -19.995 1.00 85.78 C +ATOM 4624 C HIS D 179 22.533 -23.465 -19.766 1.00 85.78 C +ATOM 4625 CB HIS D 179 20.907 -25.267 -20.381 1.00 85.78 C +ATOM 4626 O HIS D 179 23.029 -22.753 -20.642 1.00 85.78 O +ATOM 4627 CG HIS D 179 20.459 -24.572 -21.627 1.00 85.78 C +ATOM 4628 CD2 HIS D 179 20.558 -24.930 -22.929 1.00 85.78 C +ATOM 4629 ND1 HIS D 179 19.825 -23.349 -21.610 1.00 85.78 N +ATOM 4630 CE1 HIS D 179 19.551 -22.984 -22.851 1.00 85.78 C +ATOM 4631 NE2 HIS D 179 19.986 -23.926 -23.671 1.00 85.78 N +ATOM 4632 N GLN D 180 22.228 -23.056 -18.620 1.00 81.14 N +ATOM 4633 CA GLN D 180 22.371 -21.645 -18.278 1.00 81.14 C +ATOM 4634 C GLN D 180 23.839 -21.231 -18.254 1.00 81.14 C +ATOM 4635 CB GLN D 180 21.721 -21.352 -16.925 1.00 81.14 C +ATOM 4636 O GLN D 180 24.192 -20.147 -18.723 1.00 81.14 O +ATOM 4637 CG GLN D 180 20.198 -21.342 -16.963 1.00 81.14 C +ATOM 4638 CD GLN D 180 19.583 -20.799 -15.687 1.00 81.14 C +ATOM 4639 NE2 GLN D 180 18.472 -21.394 -15.265 1.00 81.14 N +ATOM 4640 OE1 GLN D 180 20.101 -19.854 -15.085 1.00 81.14 O +ATOM 4641 N ARG D 181 24.657 -22.124 -17.763 1.00 76.70 N +ATOM 4642 CA ARG D 181 26.088 -21.846 -17.696 1.00 76.70 C +ATOM 4643 C ARG D 181 26.715 -21.863 -19.087 1.00 76.70 C +ATOM 4644 CB ARG D 181 26.791 -22.862 -16.792 1.00 76.70 C +ATOM 4645 O ARG D 181 27.599 -21.058 -19.385 1.00 76.70 O +ATOM 4646 CG ARG D 181 26.492 -22.680 -15.313 1.00 76.70 C +ATOM 4647 CD ARG D 181 27.149 -23.762 -14.468 1.00 76.70 C +ATOM 4648 NE ARG D 181 26.626 -23.772 -13.104 1.00 76.70 N +ATOM 4649 NH1 ARG D 181 27.051 -26.014 -12.738 1.00 76.70 N +ATOM 4650 NH2 ARG D 181 26.095 -24.739 -11.090 1.00 76.70 N +ATOM 4651 CZ ARG D 181 26.592 -24.842 -12.314 1.00 76.70 C +ATOM 4652 N ALA D 182 26.271 -22.741 -19.931 1.00 69.50 N +ATOM 4653 CA ALA D 182 26.801 -22.869 -21.286 1.00 69.50 C +ATOM 4654 C ALA D 182 26.455 -21.644 -22.128 1.00 69.50 C +ATOM 4655 CB ALA D 182 26.265 -24.135 -21.949 1.00 69.50 C +ATOM 4656 O ALA D 182 27.286 -21.157 -22.898 1.00 69.50 O +ATOM 4657 N LYS D 183 25.246 -21.236 -22.096 1.00 64.21 N +ATOM 4658 CA LYS D 183 24.833 -20.050 -22.841 1.00 64.21 C +ATOM 4659 C LYS D 183 25.647 -18.828 -22.425 1.00 64.21 C +ATOM 4660 CB LYS D 183 23.341 -19.781 -22.638 1.00 64.21 C +ATOM 4661 O LYS D 183 25.944 -17.963 -23.251 1.00 64.21 O +ATOM 4662 CG LYS D 183 22.435 -20.589 -23.555 1.00 64.21 C +ATOM 4663 CD LYS D 183 20.987 -20.128 -23.459 1.00 64.21 C +ATOM 4664 CE LYS D 183 20.085 -20.915 -24.400 1.00 64.21 C +ATOM 4665 NZ LYS D 183 18.658 -20.490 -24.284 1.00 64.21 N +ATOM 4666 N LYS D 184 26.124 -18.817 -21.232 1.00 59.71 N +ATOM 4667 CA LYS D 184 26.929 -17.707 -20.730 1.00 59.71 C +ATOM 4668 C LYS D 184 28.359 -17.782 -21.258 1.00 59.71 C +ATOM 4669 CB LYS D 184 26.935 -17.697 -19.201 1.00 59.71 C +ATOM 4670 O LYS D 184 28.972 -16.754 -21.555 1.00 59.71 O +ATOM 4671 CG LYS D 184 25.696 -17.069 -18.581 1.00 59.71 C +ATOM 4672 CD LYS D 184 25.806 -16.996 -17.063 1.00 59.71 C +ATOM 4673 CE LYS D 184 24.544 -16.417 -16.438 1.00 59.71 C +ATOM 4674 NZ LYS D 184 24.612 -16.423 -14.946 1.00 59.71 N +ATOM 4675 N GLN D 185 28.948 -19.036 -21.320 1.00 55.22 N +ATOM 4676 CA GLN D 185 30.303 -19.243 -21.821 1.00 55.22 C +ATOM 4677 C GLN D 185 30.376 -18.995 -23.325 1.00 55.22 C +ATOM 4678 CB GLN D 185 30.785 -20.658 -21.499 1.00 55.22 C +ATOM 4679 O GLN D 185 31.380 -18.484 -23.827 1.00 55.22 O +ATOM 4680 CG GLN D 185 31.319 -20.818 -20.082 1.00 55.22 C +ATOM 4681 CD GLN D 185 31.735 -22.243 -19.768 1.00 55.22 C +ATOM 4682 NE2 GLN D 185 32.332 -22.443 -18.598 1.00 55.22 N +ATOM 4683 OE1 GLN D 185 31.521 -23.157 -20.571 1.00 55.22 O +ATOM 4684 N GLY D 186 29.366 -19.284 -24.132 1.00 48.91 N +ATOM 4685 CA GLY D 186 29.359 -19.091 -25.573 1.00 48.91 C +ATOM 4686 C GLY D 186 29.323 -17.630 -25.979 1.00 48.91 C +ATOM 4687 O GLY D 186 29.937 -17.241 -26.975 1.00 48.91 O +ATOM 4688 N SER D 187 28.567 -16.778 -25.345 1.00 50.45 N +ATOM 4689 CA SER D 187 28.563 -15.351 -25.653 1.00 50.45 C +ATOM 4690 C SER D 187 29.925 -14.723 -25.377 1.00 50.45 C +ATOM 4691 CB SER D 187 27.486 -14.630 -24.841 1.00 50.45 C +ATOM 4692 O SER D 187 30.408 -13.904 -26.162 1.00 50.45 O +ATOM 4693 OG SER D 187 28.066 -13.896 -23.776 1.00 50.45 O +ATOM 4694 N ASN D 188 30.621 -15.111 -24.339 1.00 46.74 N +ATOM 4695 CA ASN D 188 31.974 -14.652 -24.044 1.00 46.74 C +ATOM 4696 C ASN D 188 32.976 -15.159 -25.078 1.00 46.74 C +ATOM 4697 CB ASN D 188 32.395 -15.089 -22.639 1.00 46.74 C +ATOM 4698 O ASN D 188 33.901 -14.438 -25.456 1.00 46.74 O +ATOM 4699 CG ASN D 188 32.391 -13.944 -21.645 1.00 46.74 C +ATOM 4700 ND2 ASN D 188 32.598 -14.261 -20.373 1.00 46.74 N +ATOM 4701 OD1 ASN D 188 32.202 -12.783 -22.018 1.00 46.74 O +ATOM 4702 N SER D 189 32.823 -16.422 -25.531 1.00 49.26 N +ATOM 4703 CA SER D 189 33.693 -16.920 -26.591 1.00 49.26 C +ATOM 4704 C SER D 189 33.487 -16.142 -27.887 1.00 49.26 C +ATOM 4705 CB SER D 189 33.443 -18.409 -26.835 1.00 49.26 C +ATOM 4706 O SER D 189 34.449 -15.837 -28.594 1.00 49.26 O +ATOM 4707 OG SER D 189 33.006 -18.634 -28.165 1.00 49.26 O +ATOM 4708 N PHE D 190 32.259 -15.748 -28.226 1.00 49.14 N +ATOM 4709 CA PHE D 190 32.005 -14.939 -29.412 1.00 49.14 C +ATOM 4710 C PHE D 190 32.537 -13.523 -29.226 1.00 49.14 C +ATOM 4711 CB PHE D 190 30.507 -14.900 -29.728 1.00 49.14 C +ATOM 4712 O PHE D 190 33.169 -12.968 -30.127 1.00 49.14 O +ATOM 4713 CG PHE D 190 30.175 -14.183 -31.009 1.00 49.14 C +ATOM 4714 CD1 PHE D 190 29.625 -12.907 -30.985 1.00 49.14 C +ATOM 4715 CD2 PHE D 190 30.413 -14.785 -32.237 1.00 49.14 C +ATOM 4716 CE1 PHE D 190 29.316 -12.241 -32.169 1.00 49.14 C +ATOM 4717 CE2 PHE D 190 30.108 -14.126 -33.424 1.00 49.14 C +ATOM 4718 CZ PHE D 190 29.558 -12.855 -33.388 1.00 49.14 C +ATOM 4719 N GLN D 191 32.368 -12.895 -28.051 1.00 51.31 N +ATOM 4720 CA GLN D 191 32.954 -11.592 -27.753 1.00 51.31 C +ATOM 4721 C GLN D 191 34.477 -11.670 -27.710 1.00 51.31 C +ATOM 4722 CB GLN D 191 32.418 -11.053 -26.425 1.00 51.31 C +ATOM 4723 O GLN D 191 35.164 -10.812 -28.267 1.00 51.31 O +ATOM 4724 CG GLN D 191 32.356 -9.533 -26.359 1.00 51.31 C +ATOM 4725 CD GLN D 191 31.354 -9.031 -25.337 1.00 51.31 C +ATOM 4726 NE2 GLN D 191 31.142 -7.719 -25.309 1.00 51.31 N +ATOM 4727 OE1 GLN D 191 30.774 -9.815 -24.578 1.00 51.31 O +ATOM 4728 N ALA D 192 35.010 -12.693 -27.033 1.00 54.63 N +ATOM 4729 CA ALA D 192 36.453 -12.917 -27.059 1.00 54.63 C +ATOM 4730 C ALA D 192 36.939 -13.199 -28.478 1.00 54.63 C +ATOM 4731 CB ALA D 192 36.829 -14.071 -26.133 1.00 54.63 C +ATOM 4732 O ALA D 192 37.991 -12.706 -28.890 1.00 54.63 O +ATOM 4733 N TYR D 193 36.149 -14.020 -29.172 1.00 52.20 N +ATOM 4734 CA TYR D 193 36.448 -14.257 -30.580 1.00 52.20 C +ATOM 4735 C TYR D 193 36.373 -12.961 -31.378 1.00 52.20 C +ATOM 4736 CB TYR D 193 35.481 -15.289 -31.168 1.00 52.20 C +ATOM 4737 O TYR D 193 37.273 -12.656 -32.164 1.00 52.20 O +ATOM 4738 CG TYR D 193 35.708 -15.566 -32.635 1.00 52.20 C +ATOM 4739 CD1 TYR D 193 34.888 -14.998 -33.606 1.00 52.20 C +ATOM 4740 CD2 TYR D 193 36.743 -16.397 -33.051 1.00 52.20 C +ATOM 4741 CE1 TYR D 193 35.092 -15.252 -34.959 1.00 52.20 C +ATOM 4742 CE2 TYR D 193 36.956 -16.659 -34.401 1.00 52.20 C +ATOM 4743 OH TYR D 193 36.334 -16.337 -36.683 1.00 52.20 O +ATOM 4744 CZ TYR D 193 36.127 -16.082 -35.346 1.00 52.20 C +ATOM 4745 N CYS D 194 35.339 -12.188 -31.145 1.00 57.32 N +ATOM 4746 CA CYS D 194 35.215 -10.929 -31.870 1.00 57.32 C +ATOM 4747 C CYS D 194 36.252 -9.920 -31.393 1.00 57.32 C +ATOM 4748 CB CYS D 194 33.811 -10.349 -31.700 1.00 57.32 C +ATOM 4749 O CYS D 194 36.711 -9.080 -32.170 1.00 57.32 O +ATOM 4750 SG CYS D 194 32.562 -11.154 -32.727 1.00 57.32 S +ATOM 4751 N GLU D 195 36.661 -9.858 -30.111 1.00 60.29 N +ATOM 4752 CA GLU D 195 37.774 -9.053 -29.617 1.00 60.29 C +ATOM 4753 C GLU D 195 39.099 -9.519 -30.213 1.00 60.29 C +ATOM 4754 CB GLU D 195 37.838 -9.104 -28.088 1.00 60.29 C +ATOM 4755 O GLU D 195 39.958 -8.700 -30.547 1.00 60.29 O +ATOM 4756 CG GLU D 195 36.913 -8.110 -27.401 1.00 60.29 C +ATOM 4757 CD GLU D 195 36.928 -8.226 -25.885 1.00 60.29 C +ATOM 4758 OE1 GLU D 195 36.230 -7.436 -25.209 1.00 60.29 O +ATOM 4759 OE2 GLU D 195 37.643 -9.114 -25.369 1.00 60.29 O +ATOM 4760 N ALA D 196 39.320 -10.893 -30.434 1.00 64.61 N +ATOM 4761 CA ALA D 196 40.530 -11.465 -31.017 1.00 64.61 C +ATOM 4762 C ALA D 196 40.501 -11.374 -32.540 1.00 64.61 C +ATOM 4763 CB ALA D 196 40.697 -12.918 -30.578 1.00 64.61 C +ATOM 4764 O ALA D 196 41.551 -11.330 -33.186 1.00 64.61 O +ATOM 4765 N ASN D 197 39.269 -11.579 -33.095 1.00 52.06 N +ATOM 4766 CA ASN D 197 39.124 -11.481 -34.543 1.00 52.06 C +ATOM 4767 C ASN D 197 38.121 -10.399 -34.935 1.00 52.06 C +ATOM 4768 CB ASN D 197 38.707 -12.829 -35.134 1.00 52.06 C +ATOM 4769 O ASN D 197 37.016 -10.705 -35.386 1.00 52.06 O +ATOM 4770 CG ASN D 197 39.821 -13.857 -35.086 1.00 52.06 C +ATOM 4771 ND2 ASN D 197 39.474 -15.091 -34.742 1.00 52.06 N +ATOM 4772 OD1 ASN D 197 40.983 -13.543 -35.356 1.00 52.06 O +ATOM 4773 N PRO D 198 38.437 -9.108 -34.640 1.00 57.40 N +ATOM 4774 CA PRO D 198 37.518 -7.984 -34.837 1.00 57.40 C +ATOM 4775 C PRO D 198 37.001 -7.890 -36.271 1.00 57.40 C +ATOM 4776 CB PRO D 198 38.372 -6.764 -34.484 1.00 57.40 C +ATOM 4777 O PRO D 198 35.898 -7.386 -36.501 1.00 57.40 O +ATOM 4778 CG PRO D 198 39.755 -7.304 -34.308 1.00 57.40 C +ATOM 4779 CD PRO D 198 39.701 -8.800 -34.425 1.00 57.40 C +ATOM 4780 N ASP D 199 37.803 -8.350 -37.192 1.00 53.72 N +ATOM 4781 CA ASP D 199 37.493 -8.229 -38.613 1.00 53.72 C +ATOM 4782 C ASP D 199 36.639 -9.402 -39.090 1.00 53.72 C +ATOM 4783 CB ASP D 199 38.778 -8.144 -39.439 1.00 53.72 C +ATOM 4784 O ASP D 199 36.306 -9.493 -40.274 1.00 53.72 O +ATOM 4785 CG ASP D 199 39.565 -6.871 -39.181 1.00 53.72 C +ATOM 4786 OD1 ASP D 199 38.951 -5.825 -38.879 1.00 53.72 O +ATOM 4787 OD2 ASP D 199 40.810 -6.914 -39.283 1.00 53.72 O +ATOM 4788 N ALA D 200 36.375 -10.315 -38.191 1.00 53.53 N +ATOM 4789 CA ALA D 200 35.599 -11.479 -38.608 1.00 53.53 C +ATOM 4790 C ALA D 200 34.153 -11.095 -38.911 1.00 53.53 C +ATOM 4791 CB ALA D 200 35.644 -12.562 -37.534 1.00 53.53 C +ATOM 4792 O ALA D 200 33.578 -10.239 -38.234 1.00 53.53 O +ATOM 4793 N LEU D 201 33.438 -11.475 -40.126 1.00 53.64 N +ATOM 4794 CA LEU D 201 32.126 -11.131 -40.661 1.00 53.64 C +ATOM 4795 C LEU D 201 31.045 -11.299 -39.599 1.00 53.64 C +ATOM 4796 CB LEU D 201 31.799 -11.997 -41.880 1.00 53.64 C +ATOM 4797 O LEU D 201 30.144 -10.464 -39.485 1.00 53.64 O +ATOM 4798 CG LEU D 201 31.924 -11.320 -43.246 1.00 53.64 C +ATOM 4799 CD1 LEU D 201 32.530 -12.284 -44.261 1.00 53.64 C +ATOM 4800 CD2 LEU D 201 30.565 -10.819 -43.721 1.00 53.64 C +ATOM 4801 N GLU D 202 31.172 -12.293 -38.878 1.00 56.84 N +ATOM 4802 CA GLU D 202 30.164 -12.653 -37.887 1.00 56.84 C +ATOM 4803 C GLU D 202 30.104 -11.624 -36.762 1.00 56.84 C +ATOM 4804 CB GLU D 202 30.446 -14.044 -37.313 1.00 56.84 C +ATOM 4805 O GLU D 202 29.052 -11.424 -36.151 1.00 56.84 O +ATOM 4806 CG GLU D 202 30.136 -15.181 -38.276 1.00 56.84 C +ATOM 4807 CD GLU D 202 31.075 -16.368 -38.124 1.00 56.84 C +ATOM 4808 OE1 GLU D 202 30.853 -17.406 -38.788 1.00 56.84 O +ATOM 4809 OE2 GLU D 202 32.039 -16.259 -37.334 1.00 56.84 O +ATOM 4810 N CYS D 203 31.294 -11.007 -36.504 1.00 50.19 N +ATOM 4811 CA CYS D 203 31.409 -10.013 -35.443 1.00 50.19 C +ATOM 4812 C CYS D 203 30.930 -8.648 -35.921 1.00 50.19 C +ATOM 4813 CB CYS D 203 32.855 -9.915 -34.957 1.00 50.19 C +ATOM 4814 O CYS D 203 30.541 -7.804 -35.111 1.00 50.19 O +ATOM 4815 SG CYS D 203 33.457 -11.416 -34.153 1.00 50.19 S +ATOM 4816 N ARG D 204 30.931 -8.214 -37.159 1.00 46.63 N +ATOM 4817 CA ARG D 204 30.529 -6.940 -37.746 1.00 46.63 C +ATOM 4818 C ARG D 204 29.010 -6.810 -37.784 1.00 46.63 C +ATOM 4819 CB ARG D 204 31.103 -6.793 -39.157 1.00 46.63 C +ATOM 4820 O ARG D 204 28.479 -5.701 -37.868 1.00 46.63 O +ATOM 4821 CG ARG D 204 32.487 -6.164 -39.197 1.00 46.63 C +ATOM 4822 CD ARG D 204 32.913 -5.828 -40.619 1.00 46.63 C +ATOM 4823 NE ARG D 204 34.229 -5.197 -40.652 1.00 46.63 N +ATOM 4824 NH1 ARG D 204 34.418 -5.235 -42.955 1.00 46.63 N +ATOM 4825 NH2 ARG D 204 36.104 -4.353 -41.676 1.00 46.63 N +ATOM 4826 CZ ARG D 204 34.914 -4.930 -41.761 1.00 46.63 C +ATOM 4827 N ILE D 205 28.222 -7.904 -37.843 1.00 42.20 N +ATOM 4828 CA ILE D 205 26.772 -7.796 -37.960 1.00 42.20 C +ATOM 4829 C ILE D 205 26.189 -7.237 -36.664 1.00 42.20 C +ATOM 4830 CB ILE D 205 26.129 -9.161 -38.291 1.00 42.20 C +ATOM 4831 O ILE D 205 25.164 -6.551 -36.682 1.00 42.20 O +ATOM 4832 CG1 ILE D 205 26.625 -9.670 -39.650 1.00 42.20 C +ATOM 4833 CG2 ILE D 205 24.601 -9.058 -38.270 1.00 42.20 C +ATOM 4834 CD1 ILE D 205 26.176 -11.086 -39.982 1.00 42.20 C +ATOM 4835 N TYR D 206 26.897 -7.473 -35.611 1.00 36.82 N +ATOM 4836 CA TYR D 206 26.309 -7.027 -34.352 1.00 36.82 C +ATOM 4837 C TYR D 206 26.680 -5.578 -34.060 1.00 36.82 C +ATOM 4838 CB TYR D 206 26.765 -7.925 -33.198 1.00 36.82 C +ATOM 4839 O TYR D 206 26.229 -5.004 -33.066 1.00 36.82 O +ATOM 4840 CG TYR D 206 25.739 -8.953 -32.787 1.00 36.82 C +ATOM 4841 CD1 TYR D 206 24.801 -8.671 -31.796 1.00 36.82 C +ATOM 4842 CD2 TYR D 206 25.705 -10.207 -33.387 1.00 36.82 C +ATOM 4843 CE1 TYR D 206 23.855 -9.615 -31.412 1.00 36.82 C +ATOM 4844 CE2 TYR D 206 24.763 -11.159 -33.011 1.00 36.82 C +ATOM 4845 OH TYR D 206 22.908 -11.793 -31.648 1.00 36.82 O +ATOM 4846 CZ TYR D 206 23.843 -10.854 -32.024 1.00 36.82 C +ATOM 4847 N ASP D 207 27.736 -4.939 -34.704 1.00 33.87 N +ATOM 4848 CA ASP D 207 28.102 -3.553 -34.433 1.00 33.87 C +ATOM 4849 C ASP D 207 27.153 -2.586 -35.138 1.00 33.87 C +ATOM 4850 CB ASP D 207 29.545 -3.283 -34.868 1.00 33.87 C +ATOM 4851 O ASP D 207 27.226 -1.373 -34.929 1.00 33.87 O +ATOM 4852 CG ASP D 207 30.566 -3.707 -33.827 1.00 33.87 C +ATOM 4853 OD1 ASP D 207 30.184 -3.957 -32.664 1.00 33.87 O +ATOM 4854 OD2 ASP D 207 31.765 -3.788 -34.173 1.00 33.87 O +ATOM 4855 N ASP D 208 26.408 -3.029 -36.230 1.00 27.62 N +ATOM 4856 CA ASP D 208 25.552 -1.972 -36.758 1.00 27.62 C +ATOM 4857 C ASP D 208 24.273 -1.838 -35.933 1.00 27.62 C +ATOM 4858 CB ASP D 208 25.206 -2.242 -38.224 1.00 27.62 C +ATOM 4859 O ASP D 208 23.584 -2.828 -35.682 1.00 27.62 O +ATOM 4860 CG ASP D 208 26.340 -1.898 -39.173 1.00 27.62 C +ATOM 4861 OD1 ASP D 208 27.313 -1.238 -38.748 1.00 27.62 O +ATOM 4862 OD2 ASP D 208 26.260 -2.289 -40.358 1.00 27.62 O +TER 4863 ASP D 208 +ATOM 4864 N GLY E 1 -12.272 31.313 -21.502 1.00 38.46 N +ATOM 4865 CA GLY E 1 -11.509 31.048 -20.293 1.00 38.46 C +ATOM 4866 C GLY E 1 -10.049 30.739 -20.566 1.00 38.46 C +ATOM 4867 O GLY E 1 -9.681 30.393 -21.691 1.00 38.46 O +ATOM 4868 N PRO E 2 -9.101 31.186 -19.714 1.00 50.71 N +ATOM 4869 CA PRO E 2 -7.676 31.078 -20.036 1.00 50.71 C +ATOM 4870 C PRO E 2 -7.279 29.676 -20.492 1.00 50.71 C +ATOM 4871 CB PRO E 2 -6.988 31.439 -18.717 1.00 50.71 C +ATOM 4872 O PRO E 2 -7.831 28.685 -20.006 1.00 50.71 O +ATOM 4873 CG PRO E 2 -8.088 31.456 -17.705 1.00 50.71 C +ATOM 4874 CD PRO E 2 -9.396 31.277 -18.419 1.00 50.71 C +ATOM 4875 N MET E 3 -6.742 29.493 -21.748 1.00 59.35 N +ATOM 4876 CA MET E 3 -6.379 28.258 -22.437 1.00 59.35 C +ATOM 4877 C MET E 3 -5.339 27.476 -21.642 1.00 59.35 C +ATOM 4878 CB MET E 3 -5.847 28.561 -23.839 1.00 59.35 C +ATOM 4879 O MET E 3 -4.233 27.966 -21.410 1.00 59.35 O +ATOM 4880 CG MET E 3 -6.875 28.362 -24.941 1.00 59.35 C +ATOM 4881 SD MET E 3 -6.147 28.523 -26.618 1.00 59.35 S +ATOM 4882 CE MET E 3 -4.736 29.603 -26.253 1.00 59.35 C +ATOM 4883 N VAL E 4 -5.634 26.582 -20.702 1.00 78.50 N +ATOM 4884 CA VAL E 4 -4.762 25.696 -19.938 1.00 78.50 C +ATOM 4885 C VAL E 4 -4.143 24.654 -20.867 1.00 78.50 C +ATOM 4886 CB VAL E 4 -5.526 25.000 -18.790 1.00 78.50 C +ATOM 4887 O VAL E 4 -4.770 24.228 -21.839 1.00 78.50 O +ATOM 4888 CG1 VAL E 4 -4.563 24.225 -17.893 1.00 78.50 C +ATOM 4889 CG2 VAL E 4 -6.313 26.025 -17.975 1.00 78.50 C +ATOM 4890 N LEU E 5 -2.731 24.575 -20.779 1.00 91.36 N +ATOM 4891 CA LEU E 5 -2.022 23.558 -21.548 1.00 91.36 C +ATOM 4892 C LEU E 5 -2.654 22.185 -21.346 1.00 91.36 C +ATOM 4893 CB LEU E 5 -0.545 23.517 -21.148 1.00 91.36 C +ATOM 4894 O LEU E 5 -2.910 21.775 -20.211 1.00 91.36 O +ATOM 4895 CG LEU E 5 0.409 22.854 -22.143 1.00 91.36 C +ATOM 4896 CD1 LEU E 5 0.582 23.732 -23.377 1.00 91.36 C +ATOM 4897 CD2 LEU E 5 1.757 22.573 -21.487 1.00 91.36 C +ATOM 4898 N GLN E 6 -2.934 21.558 -22.508 1.00 95.19 N +ATOM 4899 CA GLN E 6 -3.703 20.319 -22.446 1.00 95.19 C +ATOM 4900 C GLN E 6 -2.825 19.111 -22.760 1.00 95.19 C +ATOM 4901 CB GLN E 6 -4.887 20.372 -23.413 1.00 95.19 C +ATOM 4902 O GLN E 6 -1.730 19.258 -23.308 1.00 95.19 O +ATOM 4903 CG GLN E 6 -5.859 21.510 -23.132 1.00 95.19 C +ATOM 4904 CD GLN E 6 -6.976 21.594 -24.155 1.00 95.19 C +ATOM 4905 NE2 GLN E 6 -8.023 22.344 -23.830 1.00 95.19 N +ATOM 4906 OE1 GLN E 6 -6.897 20.992 -25.231 1.00 95.19 O +ATOM 4907 N ALA E 7 -3.323 17.945 -22.500 1.00 96.24 N +ATOM 4908 CA ALA E 7 -2.602 16.687 -22.680 1.00 96.24 C +ATOM 4909 C ALA E 7 -2.203 16.488 -24.139 1.00 96.24 C +ATOM 4910 CB ALA E 7 -3.451 15.514 -22.198 1.00 96.24 C +ATOM 4911 O ALA E 7 -1.066 16.111 -24.432 1.00 96.24 O +ATOM 4912 N GLN E 8 -3.094 16.773 -25.051 1.00 96.39 N +ATOM 4913 CA GLN E 8 -2.839 16.530 -26.466 1.00 96.39 C +ATOM 4914 C GLN E 8 -1.697 17.404 -26.978 1.00 96.39 C +ATOM 4915 CB GLN E 8 -4.102 16.781 -27.291 1.00 96.39 C +ATOM 4916 O GLN E 8 -1.066 17.082 -27.987 1.00 96.39 O +ATOM 4917 CG GLN E 8 -4.579 18.227 -27.261 1.00 96.39 C +ATOM 4918 CD GLN E 8 -5.854 18.441 -28.055 1.00 96.39 C +ATOM 4919 NE2 GLN E 8 -6.000 19.628 -28.634 1.00 96.39 N +ATOM 4920 OE1 GLN E 8 -6.701 17.547 -28.148 1.00 96.39 O +ATOM 4921 N GLU E 9 -1.411 18.442 -26.291 1.00 96.82 N +ATOM 4922 CA GLU E 9 -0.391 19.386 -26.738 1.00 96.82 C +ATOM 4923 C GLU E 9 1.006 18.923 -26.333 1.00 96.82 C +ATOM 4924 CB GLU E 9 -0.666 20.783 -26.173 1.00 96.82 C +ATOM 4925 O GLU E 9 2.004 19.387 -26.887 1.00 96.82 O +ATOM 4926 CG GLU E 9 -1.956 21.409 -26.684 1.00 96.82 C +ATOM 4927 CD GLU E 9 -2.298 22.722 -25.997 1.00 96.82 C +ATOM 4928 OE1 GLU E 9 -1.995 23.798 -26.560 1.00 96.82 O +ATOM 4929 OE2 GLU E 9 -2.872 22.673 -24.886 1.00 96.82 O +ATOM 4930 N ILE E 10 1.061 18.041 -25.392 1.00 97.19 N +ATOM 4931 CA ILE E 10 2.396 17.668 -24.938 1.00 97.19 C +ATOM 4932 C ILE E 10 2.573 16.155 -25.044 1.00 97.19 C +ATOM 4933 CB ILE E 10 2.652 18.137 -23.488 1.00 97.19 C +ATOM 4934 O ILE E 10 3.631 15.622 -24.702 1.00 97.19 O +ATOM 4935 CG1 ILE E 10 1.672 17.455 -22.526 1.00 97.19 C +ATOM 4936 CG2 ILE E 10 2.547 19.661 -23.387 1.00 97.19 C +ATOM 4937 CD1 ILE E 10 2.117 17.478 -21.070 1.00 97.19 C +ATOM 4938 N MET E 11 1.602 15.427 -25.456 1.00 97.10 N +ATOM 4939 CA MET E 11 1.670 13.972 -25.570 1.00 97.10 C +ATOM 4940 C MET E 11 2.657 13.557 -26.657 1.00 97.10 C +ATOM 4941 CB MET E 11 0.288 13.391 -25.870 1.00 97.10 C +ATOM 4942 O MET E 11 3.037 14.371 -27.500 1.00 97.10 O +ATOM 4943 CG MET E 11 -0.234 13.732 -27.256 1.00 97.10 C +ATOM 4944 SD MET E 11 -1.900 13.032 -27.573 1.00 97.10 S +ATOM 4945 CE MET E 11 -2.167 13.599 -29.276 1.00 97.10 C +ATOM 4946 N THR E 12 3.103 12.343 -26.561 1.00 94.08 N +ATOM 4947 CA THR E 12 3.853 11.732 -27.653 1.00 94.08 C +ATOM 4948 C THR E 12 2.907 11.124 -28.685 1.00 94.08 C +ATOM 4949 CB THR E 12 4.814 10.647 -27.131 1.00 94.08 C +ATOM 4950 O THR E 12 2.008 10.356 -28.334 1.00 94.08 O +ATOM 4951 CG2 THR E 12 5.646 10.058 -28.266 1.00 94.08 C +ATOM 4952 OG1 THR E 12 5.694 11.224 -26.158 1.00 94.08 O +ATOM 4953 N GLN E 13 3.031 11.474 -29.911 1.00 91.54 N +ATOM 4954 CA GLN E 13 2.095 11.059 -30.950 1.00 91.54 C +ATOM 4955 C GLN E 13 2.534 9.746 -31.593 1.00 91.54 C +ATOM 4956 CB GLN E 13 1.959 12.147 -32.017 1.00 91.54 C +ATOM 4957 O GLN E 13 1.704 8.991 -32.104 1.00 91.54 O +ATOM 4958 CG GLN E 13 1.308 13.427 -31.511 1.00 91.54 C +ATOM 4959 CD GLN E 13 1.241 14.510 -32.571 1.00 91.54 C +ATOM 4960 NE2 GLN E 13 1.035 15.750 -32.140 1.00 91.54 N +ATOM 4961 OE1 GLN E 13 1.376 14.236 -33.768 1.00 91.54 O +ATOM 4962 N ASN E 14 3.808 9.546 -31.714 1.00 84.00 N +ATOM 4963 CA ASN E 14 4.281 8.291 -32.288 1.00 84.00 C +ATOM 4964 C ASN E 14 4.038 7.116 -31.344 1.00 84.00 C +ATOM 4965 CB ASN E 14 5.767 8.388 -32.641 1.00 84.00 C +ATOM 4966 O ASN E 14 4.898 6.782 -30.527 1.00 84.00 O +ATOM 4967 CG ASN E 14 6.186 7.374 -33.686 1.00 84.00 C +ATOM 4968 ND2 ASN E 14 7.447 7.434 -34.099 1.00 84.00 N +ATOM 4969 OD1 ASN E 14 5.384 6.543 -34.121 1.00 84.00 O +ATOM 4970 N VAL E 15 2.861 6.509 -31.497 1.00 88.18 N +ATOM 4971 CA VAL E 15 2.494 5.397 -30.626 1.00 88.18 C +ATOM 4972 C VAL E 15 2.678 4.076 -31.370 1.00 88.18 C +ATOM 4973 CB VAL E 15 1.039 5.526 -30.123 1.00 88.18 C +ATOM 4974 O VAL E 15 2.313 3.959 -32.542 1.00 88.18 O +ATOM 4975 CG1 VAL E 15 0.704 4.402 -29.144 1.00 88.18 C +ATOM 4976 CG2 VAL E 15 0.820 6.890 -29.470 1.00 88.18 C +ATOM 4977 N VAL E 16 3.355 3.153 -30.783 1.00 95.02 N +ATOM 4978 CA VAL E 16 3.534 1.818 -31.344 1.00 95.02 C +ATOM 4979 C VAL E 16 2.654 0.821 -30.595 1.00 95.02 C +ATOM 4980 CB VAL E 16 5.012 1.372 -31.288 1.00 95.02 C +ATOM 4981 O VAL E 16 2.524 0.895 -29.371 1.00 95.02 O +ATOM 4982 CG1 VAL E 16 5.170 -0.044 -31.840 1.00 95.02 C +ATOM 4983 CG2 VAL E 16 5.894 2.352 -32.060 1.00 95.02 C +ATOM 4984 N THR E 17 2.044 0.005 -31.345 1.00 96.25 N +ATOM 4985 CA THR E 17 1.135 -0.972 -30.756 1.00 96.25 C +ATOM 4986 C THR E 17 1.723 -2.377 -30.838 1.00 96.25 C +ATOM 4987 CB THR E 17 -0.239 -0.946 -31.451 1.00 96.25 C +ATOM 4988 O THR E 17 2.665 -2.618 -31.595 1.00 96.25 O +ATOM 4989 CG2 THR E 17 -0.822 0.463 -31.465 1.00 96.25 C +ATOM 4990 OG1 THR E 17 -0.094 -1.404 -32.801 1.00 96.25 O +ATOM 4991 N ILE E 18 1.181 -3.291 -29.990 1.00 97.93 N +ATOM 4992 CA ILE E 18 1.577 -4.695 -29.961 1.00 97.93 C +ATOM 4993 C ILE E 18 0.368 -5.566 -29.626 1.00 97.93 C +ATOM 4994 CB ILE E 18 2.713 -4.941 -28.943 1.00 97.93 C +ATOM 4995 O ILE E 18 -0.594 -5.094 -29.015 1.00 97.93 O +ATOM 4996 CG1 ILE E 18 3.334 -6.326 -29.160 1.00 97.93 C +ATOM 4997 CG2 ILE E 18 2.195 -4.792 -27.509 1.00 97.93 C +ATOM 4998 CD1 ILE E 18 4.669 -6.523 -28.455 1.00 97.93 C +ATOM 4999 N ARG E 19 0.445 -6.755 -30.077 1.00 96.98 N +ATOM 5000 CA ARG E 19 -0.619 -7.691 -29.726 1.00 96.98 C +ATOM 5001 C ARG E 19 -0.381 -8.299 -28.348 1.00 96.98 C +ATOM 5002 CB ARG E 19 -0.728 -8.798 -30.776 1.00 96.98 C +ATOM 5003 O ARG E 19 0.765 -8.512 -27.947 1.00 96.98 O +ATOM 5004 CG ARG E 19 -1.214 -8.315 -32.134 1.00 96.98 C +ATOM 5005 CD ARG E 19 -1.460 -9.473 -33.090 1.00 96.98 C +ATOM 5006 NE ARG E 19 -2.072 -9.022 -34.337 1.00 96.98 N +ATOM 5007 NH1 ARG E 19 -2.197 -11.128 -35.278 1.00 96.98 N +ATOM 5008 NH2 ARG E 19 -2.958 -9.303 -36.437 1.00 96.98 N +ATOM 5009 CZ ARG E 19 -2.408 -9.819 -35.348 1.00 96.98 C +ATOM 5010 N GLY E 20 -1.456 -8.642 -27.736 1.00 97.56 N +ATOM 5011 CA GLY E 20 -1.334 -9.299 -26.444 1.00 97.56 C +ATOM 5012 C GLY E 20 -0.667 -10.659 -26.526 1.00 97.56 C +ATOM 5013 O GLY E 20 -0.020 -11.097 -25.572 1.00 97.56 O +ATOM 5014 N SER E 21 -0.798 -11.337 -27.593 1.00 97.16 N +ATOM 5015 CA SER E 21 -0.266 -12.684 -27.773 1.00 97.16 C +ATOM 5016 C SER E 21 1.228 -12.652 -28.078 1.00 97.16 C +ATOM 5017 CB SER E 21 -1.009 -13.408 -28.896 1.00 97.16 C +ATOM 5018 O SER E 21 1.891 -13.691 -28.070 1.00 97.16 O +ATOM 5019 OG SER E 21 -0.905 -12.690 -30.113 1.00 97.16 O +ATOM 5020 N ALA E 22 1.769 -11.488 -28.307 1.00 98.13 N +ATOM 5021 CA ALA E 22 3.201 -11.390 -28.578 1.00 98.13 C +ATOM 5022 C ALA E 22 4.020 -11.812 -27.362 1.00 98.13 C +ATOM 5023 CB ALA E 22 3.567 -9.968 -28.995 1.00 98.13 C +ATOM 5024 O ALA E 22 3.523 -11.790 -26.233 1.00 98.13 O +ATOM 5025 N THR E 23 5.236 -12.224 -27.628 1.00 98.36 N +ATOM 5026 CA THR E 23 6.124 -12.536 -26.513 1.00 98.36 C +ATOM 5027 C THR E 23 6.670 -11.258 -25.883 1.00 98.36 C +ATOM 5028 CB THR E 23 7.294 -13.430 -26.964 1.00 98.36 C +ATOM 5029 O THR E 23 6.686 -10.203 -26.520 1.00 98.36 O +ATOM 5030 CG2 THR E 23 6.788 -14.686 -27.665 1.00 98.36 C +ATOM 5031 OG1 THR E 23 8.128 -12.695 -27.868 1.00 98.36 O +ATOM 5032 N VAL E 24 7.103 -11.389 -24.719 1.00 98.81 N +ATOM 5033 CA VAL E 24 7.753 -10.271 -24.044 1.00 98.81 C +ATOM 5034 C VAL E 24 9.040 -9.902 -24.778 1.00 98.81 C +ATOM 5035 CB VAL E 24 8.058 -10.600 -22.566 1.00 98.81 C +ATOM 5036 O VAL E 24 9.393 -8.724 -24.870 1.00 98.81 O +ATOM 5037 CG1 VAL E 24 8.906 -9.499 -21.931 1.00 98.81 C +ATOM 5038 CG2 VAL E 24 6.761 -10.798 -21.784 1.00 98.81 C +ATOM 5039 N ALA E 25 9.692 -10.878 -25.315 1.00 98.66 N +ATOM 5040 CA ALA E 25 10.894 -10.627 -26.106 1.00 98.66 C +ATOM 5041 C ALA E 25 10.588 -9.722 -27.297 1.00 98.66 C +ATOM 5042 CB ALA E 25 11.500 -11.944 -26.585 1.00 98.66 C +ATOM 5043 O ALA E 25 11.350 -8.800 -27.595 1.00 98.66 O +ATOM 5044 N ASP E 26 9.479 -9.972 -27.964 1.00 98.48 N +ATOM 5045 CA ASP E 26 9.050 -9.123 -29.071 1.00 98.48 C +ATOM 5046 C ASP E 26 8.836 -7.683 -28.609 1.00 98.48 C +ATOM 5047 CB ASP E 26 7.766 -9.669 -29.700 1.00 98.48 C +ATOM 5048 O ASP E 26 9.231 -6.740 -29.297 1.00 98.48 O +ATOM 5049 CG ASP E 26 7.975 -10.990 -30.421 1.00 98.48 C +ATOM 5050 OD1 ASP E 26 9.086 -11.232 -30.941 1.00 98.48 O +ATOM 5051 OD2 ASP E 26 7.019 -11.793 -30.473 1.00 98.48 O +ATOM 5052 N ALA E 27 8.226 -7.590 -27.494 1.00 98.74 N +ATOM 5053 CA ALA E 27 7.965 -6.263 -26.944 1.00 98.74 C +ATOM 5054 C ALA E 27 9.269 -5.522 -26.658 1.00 98.74 C +ATOM 5055 CB ALA E 27 7.128 -6.369 -25.672 1.00 98.74 C +ATOM 5056 O ALA E 27 9.412 -4.348 -27.007 1.00 98.74 O +ATOM 5057 N VAL E 28 10.211 -6.196 -26.032 1.00 98.75 N +ATOM 5058 CA VAL E 28 11.502 -5.592 -25.722 1.00 98.75 C +ATOM 5059 C VAL E 28 12.197 -5.166 -27.014 1.00 98.75 C +ATOM 5060 CB VAL E 28 12.406 -6.560 -24.926 1.00 98.75 C +ATOM 5061 O VAL E 28 12.720 -4.053 -27.107 1.00 98.75 O +ATOM 5062 CG1 VAL E 28 13.805 -5.974 -24.752 1.00 98.75 C +ATOM 5063 CG2 VAL E 28 11.782 -6.875 -23.567 1.00 98.75 C +ATOM 5064 N LYS E 29 12.168 -6.027 -27.956 1.00 98.49 N +ATOM 5065 CA LYS E 29 12.770 -5.720 -29.250 1.00 98.49 C +ATOM 5066 C LYS E 29 12.155 -4.463 -29.858 1.00 98.49 C +ATOM 5067 CB LYS E 29 12.608 -6.899 -30.211 1.00 98.49 C +ATOM 5068 O LYS E 29 12.875 -3.567 -30.305 1.00 98.49 O +ATOM 5069 CG LYS E 29 13.248 -6.680 -31.574 1.00 98.49 C +ATOM 5070 CD LYS E 29 13.038 -7.879 -32.490 1.00 98.49 C +ATOM 5071 CE LYS E 29 13.613 -7.631 -33.878 1.00 98.49 C +ATOM 5072 NZ LYS E 29 13.369 -8.786 -34.793 1.00 98.49 N +ATOM 5073 N LEU E 30 10.925 -4.443 -29.875 1.00 98.21 N +ATOM 5074 CA LEU E 30 10.207 -3.306 -30.442 1.00 98.21 C +ATOM 5075 C LEU E 30 10.523 -2.026 -29.674 1.00 98.21 C +ATOM 5076 CB LEU E 30 8.698 -3.563 -30.429 1.00 98.21 C +ATOM 5077 O LEU E 30 10.749 -0.975 -30.277 1.00 98.21 O +ATOM 5078 CG LEU E 30 7.835 -2.574 -31.214 1.00 98.21 C +ATOM 5079 CD1 LEU E 30 8.331 -2.462 -32.652 1.00 98.21 C +ATOM 5080 CD2 LEU E 30 6.371 -2.996 -31.178 1.00 98.21 C +ATOM 5081 N MET E 31 10.588 -2.077 -28.393 1.00 97.85 N +ATOM 5082 CA MET E 31 10.911 -0.917 -27.567 1.00 97.85 C +ATOM 5083 C MET E 31 12.331 -0.433 -27.839 1.00 97.85 C +ATOM 5084 CB MET E 31 10.747 -1.250 -26.083 1.00 97.85 C +ATOM 5085 O MET E 31 12.575 0.772 -27.921 1.00 97.85 O +ATOM 5086 CG MET E 31 9.299 -1.370 -25.638 1.00 97.85 C +ATOM 5087 SD MET E 31 9.142 -1.747 -23.849 1.00 97.85 S +ATOM 5088 CE MET E 31 7.345 -1.959 -23.722 1.00 97.85 C +ATOM 5089 N LYS E 32 13.240 -1.347 -27.974 1.00 97.65 N +ATOM 5090 CA LYS E 32 14.622 -0.994 -28.288 1.00 97.65 C +ATOM 5091 C LYS E 32 14.722 -0.330 -29.658 1.00 97.65 C +ATOM 5092 CB LYS E 32 15.517 -2.233 -28.240 1.00 97.65 C +ATOM 5093 O LYS E 32 15.327 0.735 -29.795 1.00 97.65 O +ATOM 5094 CG LYS E 32 15.792 -2.744 -26.834 1.00 97.65 C +ATOM 5095 CD LYS E 32 16.735 -3.940 -26.848 1.00 97.65 C +ATOM 5096 CE LYS E 32 17.089 -4.391 -25.437 1.00 97.65 C +ATOM 5097 NZ LYS E 32 18.064 -5.523 -25.445 1.00 97.65 N +ATOM 5098 N GLU E 33 14.065 -0.913 -30.644 1.00 97.19 N +ATOM 5099 CA GLU E 33 14.123 -0.414 -32.015 1.00 97.19 C +ATOM 5100 C GLU E 33 13.510 0.980 -32.121 1.00 97.19 C +ATOM 5101 CB GLU E 33 13.410 -1.376 -32.968 1.00 97.19 C +ATOM 5102 O GLU E 33 14.043 1.847 -32.817 1.00 97.19 O +ATOM 5103 CG GLU E 33 14.177 -2.665 -33.228 1.00 97.19 C +ATOM 5104 CD GLU E 33 13.411 -3.655 -34.091 1.00 97.19 C +ATOM 5105 OE1 GLU E 33 13.984 -4.704 -34.465 1.00 97.19 O +ATOM 5106 OE2 GLU E 33 12.230 -3.379 -34.397 1.00 97.19 O +ATOM 5107 N LYS E 34 12.456 1.148 -31.400 1.00 96.29 N +ATOM 5108 CA LYS E 34 11.715 2.398 -31.532 1.00 96.29 C +ATOM 5109 C LYS E 34 12.073 3.371 -30.412 1.00 96.29 C +ATOM 5110 CB LYS E 34 10.208 2.132 -31.532 1.00 96.29 C +ATOM 5111 O LYS E 34 11.572 4.497 -30.376 1.00 96.29 O +ATOM 5112 CG LYS E 34 9.737 1.245 -32.675 1.00 96.29 C +ATOM 5113 CD LYS E 34 9.932 1.922 -34.025 1.00 96.29 C +ATOM 5114 CE LYS E 34 9.360 1.083 -35.160 1.00 96.29 C +ATOM 5115 NZ LYS E 34 9.534 1.750 -36.485 1.00 96.29 N +ATOM 5116 N LYS E 35 12.955 2.918 -29.436 1.00 94.22 N +ATOM 5117 CA LYS E 35 13.399 3.721 -28.299 1.00 94.22 C +ATOM 5118 C LYS E 35 12.211 4.214 -27.478 1.00 94.22 C +ATOM 5119 CB LYS E 35 14.237 4.908 -28.775 1.00 94.22 C +ATOM 5120 O LYS E 35 12.100 5.409 -27.193 1.00 94.22 O +ATOM 5121 CG LYS E 35 15.512 4.513 -29.504 1.00 94.22 C +ATOM 5122 CD LYS E 35 16.333 5.735 -29.898 1.00 94.22 C +ATOM 5123 CE LYS E 35 17.603 5.342 -30.640 1.00 94.22 C +ATOM 5124 NZ LYS E 35 18.413 6.536 -31.022 1.00 94.22 N +ATOM 5125 N LEU E 36 11.382 3.294 -27.158 1.00 94.77 N +ATOM 5126 CA LEU E 36 10.177 3.595 -26.392 1.00 94.77 C +ATOM 5127 C LEU E 36 10.201 2.887 -25.041 1.00 94.77 C +ATOM 5128 CB LEU E 36 8.927 3.184 -27.174 1.00 94.77 C +ATOM 5129 O LEU E 36 10.890 1.877 -24.877 1.00 94.77 O +ATOM 5130 CG LEU E 36 8.677 3.923 -28.490 1.00 94.77 C +ATOM 5131 CD1 LEU E 36 7.552 3.251 -29.270 1.00 94.77 C +ATOM 5132 CD2 LEU E 36 8.350 5.389 -28.226 1.00 94.77 C +ATOM 5133 N ARG E 37 9.485 3.427 -24.095 1.00 95.21 N +ATOM 5134 CA ARG E 37 9.458 2.870 -22.747 1.00 95.21 C +ATOM 5135 C ARG E 37 8.096 2.257 -22.435 1.00 95.21 C +ATOM 5136 CB ARG E 37 9.798 3.945 -21.713 1.00 95.21 C +ATOM 5137 O ARG E 37 7.864 1.783 -21.321 1.00 95.21 O +ATOM 5138 CG ARG E 37 11.220 4.473 -21.819 1.00 95.21 C +ATOM 5139 CD ARG E 37 11.470 5.618 -20.848 1.00 95.21 C +ATOM 5140 NE ARG E 37 12.800 6.195 -21.025 1.00 95.21 N +ATOM 5141 NH1 ARG E 37 12.157 8.355 -20.518 1.00 95.21 N +ATOM 5142 NH2 ARG E 37 14.339 7.899 -21.052 1.00 95.21 N +ATOM 5143 CZ ARG E 37 13.096 7.482 -20.864 1.00 95.21 C +ATOM 5144 N GLY E 38 7.160 2.274 -23.327 1.00 96.37 N +ATOM 5145 CA GLY E 38 5.837 1.674 -23.256 1.00 96.37 C +ATOM 5146 C GLY E 38 5.218 1.432 -24.620 1.00 96.37 C +ATOM 5147 O GLY E 38 5.464 2.188 -25.562 1.00 96.37 O +ATOM 5148 N LEU E 39 4.385 0.392 -24.641 1.00 98.07 N +ATOM 5149 CA LEU E 39 3.647 0.034 -25.847 1.00 98.07 C +ATOM 5150 C LEU E 39 2.155 -0.084 -25.557 1.00 98.07 C +ATOM 5151 CB LEU E 39 4.172 -1.282 -26.427 1.00 98.07 C +ATOM 5152 O LEU E 39 1.762 -0.534 -24.478 1.00 98.07 O +ATOM 5153 CG LEU E 39 5.678 -1.356 -26.685 1.00 98.07 C +ATOM 5154 CD1 LEU E 39 6.086 -2.783 -27.035 1.00 98.07 C +ATOM 5155 CD2 LEU E 39 6.078 -0.392 -27.797 1.00 98.07 C +ATOM 5156 N ILE E 40 1.374 0.279 -26.536 1.00 97.87 N +ATOM 5157 CA ILE E 40 -0.070 0.117 -26.410 1.00 97.87 C +ATOM 5158 C ILE E 40 -0.481 -1.263 -26.917 1.00 97.87 C +ATOM 5159 CB ILE E 40 -0.832 1.220 -27.180 1.00 97.87 C +ATOM 5160 O ILE E 40 0.002 -1.719 -27.956 1.00 97.87 O +ATOM 5161 CG1 ILE E 40 -0.512 2.599 -26.594 1.00 97.87 C +ATOM 5162 CG2 ILE E 40 -2.339 0.951 -27.157 1.00 97.87 C +ATOM 5163 CD1 ILE E 40 -0.889 2.751 -25.126 1.00 97.87 C +ATOM 5164 N VAL E 41 -1.230 -1.967 -26.171 1.00 97.89 N +ATOM 5165 CA VAL E 41 -1.789 -3.246 -26.598 1.00 97.89 C +ATOM 5166 C VAL E 41 -3.110 -3.015 -27.328 1.00 97.89 C +ATOM 5167 CB VAL E 41 -2.001 -4.201 -25.401 1.00 97.89 C +ATOM 5168 O VAL E 41 -4.054 -2.464 -26.756 1.00 97.89 O +ATOM 5169 CG1 VAL E 41 -2.557 -5.543 -25.873 1.00 97.89 C +ATOM 5170 CG2 VAL E 41 -0.691 -4.399 -24.640 1.00 97.89 C +ATOM 5171 N GLU E 42 -3.253 -3.483 -28.424 1.00 93.51 N +ATOM 5172 CA GLU E 42 -4.375 -3.201 -29.314 1.00 93.51 C +ATOM 5173 C GLU E 42 -5.632 -3.945 -28.871 1.00 93.51 C +ATOM 5174 CB GLU E 42 -4.024 -3.573 -30.757 1.00 93.51 C +ATOM 5175 O GLU E 42 -5.552 -5.079 -28.393 1.00 93.51 O +ATOM 5176 CG GLU E 42 -2.903 -2.734 -31.353 1.00 93.51 C +ATOM 5177 CD GLU E 42 -2.503 -3.175 -32.752 1.00 93.51 C +ATOM 5178 OE1 GLU E 42 -1.680 -2.484 -33.394 1.00 93.51 O +ATOM 5179 OE2 GLU E 42 -3.017 -4.221 -33.210 1.00 93.51 O +ATOM 5180 N PRO E 43 -6.765 -3.282 -29.133 1.00 92.09 N +ATOM 5181 CA PRO E 43 -8.013 -4.026 -28.945 1.00 92.09 C +ATOM 5182 C PRO E 43 -8.223 -5.102 -30.007 1.00 92.09 C +ATOM 5183 CB PRO E 43 -9.088 -2.941 -29.046 1.00 92.09 C +ATOM 5184 O PRO E 43 -7.763 -4.954 -31.142 1.00 92.09 O +ATOM 5185 CG PRO E 43 -8.339 -1.651 -28.963 1.00 92.09 C +ATOM 5186 CD PRO E 43 -6.917 -1.898 -29.378 1.00 92.09 C +ATOM 5187 N ARG E 44 -8.855 -6.146 -29.675 1.00 86.50 N +ATOM 5188 CA ARG E 44 -9.119 -7.229 -30.617 1.00 86.50 C +ATOM 5189 C ARG E 44 -10.352 -6.931 -31.463 1.00 86.50 C +ATOM 5190 CB ARG E 44 -9.301 -8.555 -29.874 1.00 86.50 C +ATOM 5191 O ARG E 44 -10.449 -7.380 -32.607 1.00 86.50 O +ATOM 5192 CG ARG E 44 -8.058 -9.023 -29.134 1.00 86.50 C +ATOM 5193 CD ARG E 44 -7.089 -9.746 -30.060 1.00 86.50 C +ATOM 5194 NE ARG E 44 -7.615 -11.039 -30.486 1.00 86.50 N +ATOM 5195 NH1 ARG E 44 -5.566 -11.895 -31.122 1.00 86.50 N +ATOM 5196 NH2 ARG E 44 -7.461 -13.167 -31.338 1.00 86.50 N +ATOM 5197 CZ ARG E 44 -6.879 -12.031 -30.981 1.00 86.50 C +ATOM 5198 N HIS E 45 -11.317 -6.258 -30.868 1.00 82.46 N +ATOM 5199 CA HIS E 45 -12.546 -5.839 -31.532 1.00 82.46 C +ATOM 5200 C HIS E 45 -13.059 -4.521 -30.961 1.00 82.46 C +ATOM 5201 CB HIS E 45 -13.620 -6.920 -31.405 1.00 82.46 C +ATOM 5202 O HIS E 45 -12.459 -3.964 -30.038 1.00 82.46 O +ATOM 5203 CG HIS E 45 -13.852 -7.373 -29.998 1.00 82.46 C +ATOM 5204 CD2 HIS E 45 -13.459 -8.494 -29.349 1.00 82.46 C +ATOM 5205 ND1 HIS E 45 -14.573 -6.632 -29.087 1.00 82.46 N +ATOM 5206 CE1 HIS E 45 -14.612 -7.280 -27.935 1.00 82.46 C +ATOM 5207 NE2 HIS E 45 -13.944 -8.412 -28.067 1.00 82.46 N +ATOM 5208 N GLU E 46 -14.040 -4.015 -31.440 1.00 75.71 N +ATOM 5209 CA GLU E 46 -14.533 -2.675 -31.133 1.00 75.71 C +ATOM 5210 C GLU E 46 -14.902 -2.548 -29.658 1.00 75.71 C +ATOM 5211 CB GLU E 46 -15.741 -2.332 -32.009 1.00 75.71 C +ATOM 5212 O GLU E 46 -14.767 -1.473 -29.069 1.00 75.71 O +ATOM 5213 CG GLU E 46 -15.376 -1.947 -33.435 1.00 75.71 C +ATOM 5214 CD GLU E 46 -16.569 -1.480 -34.254 1.00 75.71 C +ATOM 5215 OE1 GLU E 46 -16.377 -1.037 -35.409 1.00 75.71 O +ATOM 5216 OE2 GLU E 46 -17.706 -1.557 -33.736 1.00 75.71 O +ATOM 5217 N GLN E 47 -15.327 -3.561 -29.052 1.00 76.13 N +ATOM 5218 CA GLN E 47 -15.758 -3.510 -27.659 1.00 76.13 C +ATOM 5219 C GLN E 47 -14.599 -3.809 -26.713 1.00 76.13 C +ATOM 5220 CB GLN E 47 -16.903 -4.494 -27.415 1.00 76.13 C +ATOM 5221 O GLN E 47 -14.749 -3.719 -25.492 1.00 76.13 O +ATOM 5222 CG GLN E 47 -18.179 -4.153 -28.172 1.00 76.13 C +ATOM 5223 CD GLN E 47 -19.109 -5.343 -28.320 1.00 76.13 C +ATOM 5224 NE2 GLN E 47 -20.250 -5.127 -28.967 1.00 76.13 N +ATOM 5225 OE1 GLN E 47 -18.805 -6.447 -27.858 1.00 76.13 O +ATOM 5226 N ASP E 48 -13.502 -4.194 -27.261 1.00 87.64 N +ATOM 5227 CA ASP E 48 -12.310 -4.497 -26.475 1.00 87.64 C +ATOM 5228 C ASP E 48 -11.521 -3.228 -26.162 1.00 87.64 C +ATOM 5229 CB ASP E 48 -11.422 -5.501 -27.213 1.00 87.64 C +ATOM 5230 O ASP E 48 -11.369 -2.358 -27.022 1.00 87.64 O +ATOM 5231 CG ASP E 48 -10.315 -6.067 -26.341 1.00 87.64 C +ATOM 5232 OD1 ASP E 48 -10.538 -6.270 -25.127 1.00 87.64 O +ATOM 5233 OD2 ASP E 48 -9.209 -6.309 -26.871 1.00 87.64 O +ATOM 5234 N PRO E 49 -11.019 -3.042 -24.969 1.00 92.77 N +ATOM 5235 CA PRO E 49 -10.287 -1.831 -24.587 1.00 92.77 C +ATOM 5236 C PRO E 49 -8.804 -1.901 -24.944 1.00 92.77 C +ATOM 5237 CB PRO E 49 -10.482 -1.765 -23.070 1.00 92.77 C +ATOM 5238 O PRO E 49 -8.285 -2.982 -25.232 1.00 92.77 O +ATOM 5239 CG PRO E 49 -10.545 -3.193 -22.631 1.00 92.77 C +ATOM 5240 CD PRO E 49 -11.264 -3.985 -23.685 1.00 92.77 C +ATOM 5241 N TYR E 50 -8.193 -0.757 -24.903 1.00 94.35 N +ATOM 5242 CA TYR E 50 -6.742 -0.688 -25.040 1.00 94.35 C +ATOM 5243 C TYR E 50 -6.052 -1.171 -23.770 1.00 94.35 C +ATOM 5244 CB TYR E 50 -6.300 0.742 -25.363 1.00 94.35 C +ATOM 5245 O TYR E 50 -6.622 -1.097 -22.679 1.00 94.35 O +ATOM 5246 CG TYR E 50 -6.676 1.195 -26.753 1.00 94.35 C +ATOM 5247 CD1 TYR E 50 -5.888 0.861 -27.852 1.00 94.35 C +ATOM 5248 CD2 TYR E 50 -7.818 1.957 -26.970 1.00 94.35 C +ATOM 5249 CE1 TYR E 50 -6.230 1.277 -29.135 1.00 94.35 C +ATOM 5250 CE2 TYR E 50 -8.170 2.379 -28.248 1.00 94.35 C +ATOM 5251 OH TYR E 50 -7.714 2.449 -30.590 1.00 94.35 O +ATOM 5252 CZ TYR E 50 -7.371 2.034 -29.322 1.00 94.35 C +ATOM 5253 N GLY E 51 -4.908 -1.740 -23.986 1.00 96.78 N +ATOM 5254 CA GLY E 51 -3.993 -2.043 -22.897 1.00 96.78 C +ATOM 5255 C GLY E 51 -2.644 -1.364 -23.044 1.00 96.78 C +ATOM 5256 O GLY E 51 -2.407 -0.648 -24.019 1.00 96.78 O +ATOM 5257 N ILE E 52 -1.808 -1.557 -22.052 1.00 98.38 N +ATOM 5258 CA ILE E 52 -0.468 -0.981 -22.093 1.00 98.38 C +ATOM 5259 C ILE E 52 0.521 -1.926 -21.414 1.00 98.38 C +ATOM 5260 CB ILE E 52 -0.430 0.409 -21.419 1.00 98.38 C +ATOM 5261 O ILE E 52 0.179 -2.594 -20.436 1.00 98.38 O +ATOM 5262 CG1 ILE E 52 0.931 1.077 -21.649 1.00 98.38 C +ATOM 5263 CG2 ILE E 52 -0.738 0.293 -19.924 1.00 98.38 C +ATOM 5264 CD1 ILE E 52 0.959 2.559 -21.303 1.00 98.38 C +ATOM 5265 N VAL E 53 1.697 -2.052 -21.971 1.00 98.59 N +ATOM 5266 CA VAL E 53 2.829 -2.736 -21.355 1.00 98.59 C +ATOM 5267 C VAL E 53 4.035 -1.799 -21.306 1.00 98.59 C +ATOM 5268 CB VAL E 53 3.191 -4.032 -22.114 1.00 98.59 C +ATOM 5269 O VAL E 53 4.347 -1.128 -22.292 1.00 98.59 O +ATOM 5270 CG1 VAL E 53 3.622 -3.717 -23.545 1.00 98.59 C +ATOM 5271 CG2 VAL E 53 4.292 -4.792 -21.376 1.00 98.59 C +ATOM 5272 N THR E 54 4.694 -1.717 -20.161 1.00 98.20 N +ATOM 5273 CA THR E 54 5.774 -0.755 -19.966 1.00 98.20 C +ATOM 5274 C THR E 54 7.072 -1.466 -19.598 1.00 98.20 C +ATOM 5275 CB THR E 54 5.419 0.270 -18.873 1.00 98.20 C +ATOM 5276 O THR E 54 7.069 -2.665 -19.308 1.00 98.20 O +ATOM 5277 CG2 THR E 54 4.042 0.879 -19.117 1.00 98.20 C +ATOM 5278 OG1 THR E 54 5.421 -0.382 -17.597 1.00 98.20 O +ATOM 5279 N GLU E 55 8.138 -0.709 -19.599 1.00 98.00 N +ATOM 5280 CA GLU E 55 9.434 -1.233 -19.176 1.00 98.00 C +ATOM 5281 C GLU E 55 9.399 -1.676 -17.716 1.00 98.00 C +ATOM 5282 CB GLU E 55 10.531 -0.185 -19.381 1.00 98.00 C +ATOM 5283 O GLU E 55 10.061 -2.646 -17.340 1.00 98.00 O +ATOM 5284 CG GLU E 55 10.306 1.102 -18.600 1.00 98.00 C +ATOM 5285 CD GLU E 55 11.365 2.159 -18.868 1.00 98.00 C +ATOM 5286 OE1 GLU E 55 11.361 3.209 -18.186 1.00 98.00 O +ATOM 5287 OE2 GLU E 55 12.205 1.936 -19.769 1.00 98.00 O +ATOM 5288 N THR E 56 8.611 -0.973 -16.985 1.00 98.00 N +ATOM 5289 CA THR E 56 8.495 -1.342 -15.579 1.00 98.00 C +ATOM 5290 C THR E 56 7.808 -2.696 -15.429 1.00 98.00 C +ATOM 5291 CB THR E 56 7.715 -0.277 -14.785 1.00 98.00 C +ATOM 5292 O THR E 56 8.227 -3.525 -14.618 1.00 98.00 O +ATOM 5293 CG2 THR E 56 7.658 -0.629 -13.302 1.00 98.00 C +ATOM 5294 OG1 THR E 56 8.360 0.993 -14.939 1.00 98.00 O +ATOM 5295 N ASP E 57 6.780 -2.988 -16.176 1.00 98.45 N +ATOM 5296 CA ASP E 57 6.131 -4.295 -16.154 1.00 98.45 C +ATOM 5297 C ASP E 57 7.130 -5.409 -16.457 1.00 98.45 C +ATOM 5298 CB ASP E 57 4.975 -4.337 -17.155 1.00 98.45 C +ATOM 5299 O ASP E 57 7.189 -6.409 -15.739 1.00 98.45 O +ATOM 5300 CG ASP E 57 3.822 -3.427 -16.769 1.00 98.45 C +ATOM 5301 OD1 ASP E 57 3.499 -3.330 -15.566 1.00 98.45 O +ATOM 5302 OD2 ASP E 57 3.230 -2.804 -17.677 1.00 98.45 O +ATOM 5303 N ILE E 58 7.910 -5.200 -17.448 1.00 98.78 N +ATOM 5304 CA ILE E 58 8.849 -6.213 -17.918 1.00 98.78 C +ATOM 5305 C ILE E 58 9.921 -6.455 -16.858 1.00 98.78 C +ATOM 5306 CB ILE E 58 9.503 -5.799 -19.256 1.00 98.78 C +ATOM 5307 O ILE E 58 10.206 -7.602 -16.505 1.00 98.78 O +ATOM 5308 CG1 ILE E 58 8.461 -5.796 -20.381 1.00 98.78 C +ATOM 5309 CG2 ILE E 58 10.672 -6.729 -19.596 1.00 98.78 C +ATOM 5310 CD1 ILE E 58 8.965 -5.205 -21.690 1.00 98.78 C +ATOM 5311 N VAL E 59 10.435 -5.407 -16.332 1.00 98.59 N +ATOM 5312 CA VAL E 59 11.523 -5.550 -15.369 1.00 98.59 C +ATOM 5313 C VAL E 59 10.986 -6.137 -14.066 1.00 98.59 C +ATOM 5314 CB VAL E 59 12.221 -4.198 -15.097 1.00 98.59 C +ATOM 5315 O VAL E 59 11.567 -7.075 -13.515 1.00 98.59 O +ATOM 5316 CG1 VAL E 59 13.186 -4.317 -13.919 1.00 98.59 C +ATOM 5317 CG2 VAL E 59 12.955 -3.716 -16.347 1.00 98.59 C +ATOM 5318 N TYR E 60 9.842 -5.700 -13.639 1.00 98.25 N +ATOM 5319 CA TYR E 60 9.282 -6.113 -12.357 1.00 98.25 C +ATOM 5320 C TYR E 60 8.766 -7.546 -12.424 1.00 98.25 C +ATOM 5321 CB TYR E 60 8.152 -5.170 -11.935 1.00 98.25 C +ATOM 5322 O TYR E 60 8.849 -8.288 -11.443 1.00 98.25 O +ATOM 5323 CG TYR E 60 8.632 -3.922 -11.237 1.00 98.25 C +ATOM 5324 CD1 TYR E 60 9.959 -3.511 -11.335 1.00 98.25 C +ATOM 5325 CD2 TYR E 60 7.760 -3.150 -10.476 1.00 98.25 C +ATOM 5326 CE1 TYR E 60 10.407 -2.362 -10.692 1.00 98.25 C +ATOM 5327 CE2 TYR E 60 8.196 -1.999 -9.828 1.00 98.25 C +ATOM 5328 OH TYR E 60 9.957 -0.476 -9.302 1.00 98.25 O +ATOM 5329 CZ TYR E 60 9.520 -1.614 -9.942 1.00 98.25 C +ATOM 5330 N LYS E 61 8.199 -7.927 -13.534 1.00 98.15 N +ATOM 5331 CA LYS E 61 7.438 -9.172 -13.571 1.00 98.15 C +ATOM 5332 C LYS E 61 8.200 -10.260 -14.322 1.00 98.15 C +ATOM 5333 CB LYS E 61 6.071 -8.947 -14.219 1.00 98.15 C +ATOM 5334 O LYS E 61 7.883 -11.445 -14.198 1.00 98.15 O +ATOM 5335 CG LYS E 61 5.175 -7.982 -13.456 1.00 98.15 C +ATOM 5336 CD LYS E 61 3.848 -7.767 -14.172 1.00 98.15 C +ATOM 5337 CE LYS E 61 2.999 -6.713 -13.473 1.00 98.15 C +ATOM 5338 NZ LYS E 61 1.711 -6.475 -14.190 1.00 98.15 N +ATOM 5339 N VAL E 62 9.179 -9.897 -15.096 1.00 98.41 N +ATOM 5340 CA VAL E 62 9.872 -10.895 -15.905 1.00 98.41 C +ATOM 5341 C VAL E 62 11.338 -10.972 -15.485 1.00 98.41 C +ATOM 5342 CB VAL E 62 9.765 -10.577 -17.413 1.00 98.41 C +ATOM 5343 O VAL E 62 11.762 -11.949 -14.863 1.00 98.41 O +ATOM 5344 CG1 VAL E 62 10.382 -11.699 -18.246 1.00 98.41 C +ATOM 5345 CG2 VAL E 62 8.307 -10.353 -17.808 1.00 98.41 C +ATOM 5346 N ALA E 63 12.100 -9.917 -15.668 1.00 97.89 N +ATOM 5347 CA ALA E 63 13.531 -9.918 -15.374 1.00 97.89 C +ATOM 5348 C ALA E 63 13.788 -10.215 -13.900 1.00 97.89 C +ATOM 5349 CB ALA E 63 14.154 -8.579 -15.762 1.00 97.89 C +ATOM 5350 O ALA E 63 14.675 -11.004 -13.564 1.00 97.89 O +ATOM 5351 N ALA E 64 13.022 -9.682 -13.090 1.00 97.22 N +ATOM 5352 CA ALA E 64 13.205 -9.795 -11.645 1.00 97.22 C +ATOM 5353 C ALA E 64 13.032 -11.239 -11.182 1.00 97.22 C +ATOM 5354 CB ALA E 64 12.225 -8.883 -10.912 1.00 97.22 C +ATOM 5355 O ALA E 64 13.517 -11.617 -10.113 1.00 97.22 O +ATOM 5356 N PHE E 65 12.338 -12.008 -12.002 1.00 95.94 N +ATOM 5357 CA PHE E 65 12.013 -13.360 -11.566 1.00 95.94 C +ATOM 5358 C PHE E 65 12.686 -14.394 -12.460 1.00 95.94 C +ATOM 5359 CB PHE E 65 10.496 -13.576 -11.564 1.00 95.94 C +ATOM 5360 O PHE E 65 12.458 -15.596 -12.309 1.00 95.94 O +ATOM 5361 CG PHE E 65 9.761 -12.706 -10.581 1.00 95.94 C +ATOM 5362 CD1 PHE E 65 9.700 -13.051 -9.236 1.00 95.94 C +ATOM 5363 CD2 PHE E 65 9.130 -11.542 -11.001 1.00 95.94 C +ATOM 5364 CE1 PHE E 65 9.020 -12.248 -8.323 1.00 95.94 C +ATOM 5365 CE2 PHE E 65 8.448 -10.735 -10.095 1.00 95.94 C +ATOM 5366 CZ PHE E 65 8.394 -11.090 -8.757 1.00 95.94 C +ATOM 5367 N GLY E 66 13.389 -13.924 -13.382 1.00 93.60 N +ATOM 5368 CA GLY E 66 14.136 -14.813 -14.258 1.00 93.60 C +ATOM 5369 C GLY E 66 13.254 -15.561 -15.240 1.00 93.60 C +ATOM 5370 O GLY E 66 13.608 -16.652 -15.693 1.00 93.60 O +ATOM 5371 N HIS E 67 12.107 -15.142 -15.495 1.00 96.32 N +ATOM 5372 CA HIS E 67 11.252 -15.761 -16.503 1.00 96.32 C +ATOM 5373 C HIS E 67 11.832 -15.579 -17.902 1.00 96.32 C +ATOM 5374 CB HIS E 67 9.840 -15.176 -16.440 1.00 96.32 C +ATOM 5375 O HIS E 67 12.560 -14.618 -18.157 1.00 96.32 O +ATOM 5376 CG HIS E 67 9.127 -15.468 -15.157 1.00 96.32 C +ATOM 5377 CD2 HIS E 67 8.414 -14.664 -14.334 1.00 96.32 C +ATOM 5378 ND1 HIS E 67 9.104 -16.722 -14.588 1.00 96.32 N +ATOM 5379 CE1 HIS E 67 8.404 -16.677 -13.466 1.00 96.32 C +ATOM 5380 NE2 HIS E 67 7.975 -15.439 -13.289 1.00 96.32 N +ATOM 5381 N ASP E 68 11.462 -16.414 -18.777 1.00 96.07 N +ATOM 5382 CA ASP E 68 11.951 -16.334 -20.150 1.00 96.07 C +ATOM 5383 C ASP E 68 11.060 -15.429 -20.999 1.00 96.07 C +ATOM 5384 CB ASP E 68 12.029 -17.729 -20.774 1.00 96.07 C +ATOM 5385 O ASP E 68 9.915 -15.777 -21.294 1.00 96.07 O +ATOM 5386 CG ASP E 68 12.655 -17.726 -22.158 1.00 96.07 C +ATOM 5387 OD1 ASP E 68 12.949 -16.635 -22.691 1.00 96.07 O +ATOM 5388 OD2 ASP E 68 12.852 -18.824 -22.721 1.00 96.07 O +ATOM 5389 N PRO E 69 11.607 -14.369 -21.444 1.00 98.04 N +ATOM 5390 CA PRO E 69 10.800 -13.437 -22.236 1.00 98.04 C +ATOM 5391 C PRO E 69 10.366 -14.025 -23.577 1.00 98.04 C +ATOM 5392 CB PRO E 69 11.737 -12.244 -22.440 1.00 98.04 C +ATOM 5393 O PRO E 69 9.455 -13.498 -24.221 1.00 98.04 O +ATOM 5394 CG PRO E 69 12.783 -12.395 -21.383 1.00 98.04 C +ATOM 5395 CD PRO E 69 12.978 -13.859 -21.110 1.00 98.04 C +ATOM 5396 N LYS E 70 10.988 -15.027 -24.009 1.00 97.01 N +ATOM 5397 CA LYS E 70 10.647 -15.639 -25.290 1.00 97.01 C +ATOM 5398 C LYS E 70 9.426 -16.546 -25.158 1.00 97.01 C +ATOM 5399 CB LYS E 70 11.833 -16.434 -25.838 1.00 97.01 C +ATOM 5400 O LYS E 70 8.796 -16.897 -26.157 1.00 97.01 O +ATOM 5401 CG LYS E 70 13.040 -15.579 -26.195 1.00 97.01 C +ATOM 5402 CD LYS E 70 14.225 -16.435 -26.623 1.00 97.01 C +ATOM 5403 CE LYS E 70 15.485 -15.599 -26.800 1.00 97.01 C +ATOM 5404 NZ LYS E 70 16.681 -16.450 -27.072 1.00 97.01 N +ATOM 5405 N THR E 71 9.081 -16.929 -23.947 1.00 96.29 N +ATOM 5406 CA THR E 71 7.934 -17.796 -23.700 1.00 96.29 C +ATOM 5407 C THR E 71 6.789 -17.011 -23.066 1.00 96.29 C +ATOM 5408 CB THR E 71 8.314 -18.980 -22.792 1.00 96.29 C +ATOM 5409 O THR E 71 5.622 -17.225 -23.401 1.00 96.29 O +ATOM 5410 CG2 THR E 71 9.456 -19.791 -23.394 1.00 96.29 C +ATOM 5411 OG1 THR E 71 8.719 -18.482 -21.511 1.00 96.29 O +ATOM 5412 N MET E 72 7.113 -16.107 -22.247 1.00 97.93 N +ATOM 5413 CA MET E 72 6.078 -15.303 -21.602 1.00 97.93 C +ATOM 5414 C MET E 72 5.461 -14.317 -22.587 1.00 97.93 C +ATOM 5415 CB MET E 72 6.652 -14.552 -20.399 1.00 97.93 C +ATOM 5416 O MET E 72 6.155 -13.783 -23.454 1.00 97.93 O +ATOM 5417 CG MET E 72 5.594 -13.993 -19.463 1.00 97.93 C +ATOM 5418 SD MET E 72 6.309 -13.331 -17.908 1.00 97.93 S +ATOM 5419 CE MET E 72 6.715 -14.881 -17.057 1.00 97.93 C +ATOM 5420 N ARG E 73 4.183 -14.109 -22.425 1.00 98.48 N +ATOM 5421 CA ARG E 73 3.453 -13.289 -23.387 1.00 98.48 C +ATOM 5422 C ARG E 73 3.051 -11.952 -22.773 1.00 98.48 C +ATOM 5423 CB ARG E 73 2.211 -14.028 -23.891 1.00 98.48 C +ATOM 5424 O ARG E 73 2.954 -11.828 -21.550 1.00 98.48 O +ATOM 5425 CG ARG E 73 2.506 -15.401 -24.474 1.00 98.48 C +ATOM 5426 CD ARG E 73 3.272 -15.305 -25.786 1.00 98.48 C +ATOM 5427 NE ARG E 73 3.456 -16.617 -26.400 1.00 98.48 N +ATOM 5428 NH1 ARG E 73 3.264 -15.856 -28.573 1.00 98.48 N +ATOM 5429 NH2 ARG E 73 3.626 -18.082 -28.161 1.00 98.48 N +ATOM 5430 CZ ARG E 73 3.448 -16.848 -27.710 1.00 98.48 C +ATOM 5431 N VAL E 74 2.768 -11.007 -23.580 1.00 98.73 N +ATOM 5432 CA VAL E 74 2.436 -9.642 -23.183 1.00 98.73 C +ATOM 5433 C VAL E 74 1.144 -9.640 -22.369 1.00 98.73 C +ATOM 5434 CB VAL E 74 2.295 -8.713 -24.410 1.00 98.73 C +ATOM 5435 O VAL E 74 1.042 -8.943 -21.357 1.00 98.73 O +ATOM 5436 CG1 VAL E 74 1.587 -7.415 -24.025 1.00 98.73 C +ATOM 5437 CG2 VAL E 74 3.665 -8.419 -25.016 1.00 98.73 C +ATOM 5438 N TYR E 75 0.180 -10.438 -22.695 1.00 97.54 N +ATOM 5439 CA TYR E 75 -1.104 -10.422 -22.003 1.00 97.54 C +ATOM 5440 C TYR E 75 -0.955 -10.903 -20.565 1.00 97.54 C +ATOM 5441 CB TYR E 75 -2.124 -11.293 -22.743 1.00 97.54 C +ATOM 5442 O TYR E 75 -1.848 -10.698 -19.740 1.00 97.54 O +ATOM 5443 CG TYR E 75 -1.844 -12.773 -22.642 1.00 97.54 C +ATOM 5444 CD1 TYR E 75 -1.298 -13.474 -23.715 1.00 97.54 C +ATOM 5445 CD2 TYR E 75 -2.125 -13.474 -21.474 1.00 97.54 C +ATOM 5446 CE1 TYR E 75 -1.040 -14.838 -23.628 1.00 97.54 C +ATOM 5447 CE2 TYR E 75 -1.871 -14.838 -21.375 1.00 97.54 C +ATOM 5448 OH TYR E 75 -1.076 -16.861 -22.363 1.00 97.54 O +ATOM 5449 CZ TYR E 75 -1.329 -15.510 -22.455 1.00 97.54 C +ATOM 5450 N GLU E 76 0.158 -11.550 -20.252 1.00 97.89 N +ATOM 5451 CA GLU E 76 0.387 -12.057 -18.903 1.00 97.89 C +ATOM 5452 C GLU E 76 0.874 -10.949 -17.972 1.00 97.89 C +ATOM 5453 CB GLU E 76 1.397 -13.207 -18.925 1.00 97.89 C +ATOM 5454 O GLU E 76 0.775 -11.071 -16.750 1.00 97.89 O +ATOM 5455 CG GLU E 76 0.920 -14.430 -19.695 1.00 97.89 C +ATOM 5456 CD GLU E 76 1.982 -15.511 -19.820 1.00 97.89 C +ATOM 5457 OE1 GLU E 76 2.617 -15.616 -20.894 1.00 97.89 O +ATOM 5458 OE2 GLU E 76 2.179 -16.260 -18.838 1.00 97.89 O +ATOM 5459 N ILE E 77 1.390 -9.820 -18.505 1.00 98.31 N +ATOM 5460 CA ILE E 77 2.019 -8.833 -17.635 1.00 98.31 C +ATOM 5461 C ILE E 77 1.436 -7.450 -17.917 1.00 98.31 C +ATOM 5462 CB ILE E 77 3.553 -8.816 -17.816 1.00 98.31 C +ATOM 5463 O ILE E 77 1.708 -6.494 -17.187 1.00 98.31 O +ATOM 5464 CG1 ILE E 77 3.916 -8.441 -19.257 1.00 98.31 C +ATOM 5465 CG2 ILE E 77 4.157 -10.170 -17.433 1.00 98.31 C +ATOM 5466 CD1 ILE E 77 5.356 -7.977 -19.432 1.00 98.31 C +ATOM 5467 N MET E 78 0.645 -7.272 -18.890 1.00 98.19 N +ATOM 5468 CA MET E 78 0.113 -5.984 -19.325 1.00 98.19 C +ATOM 5469 C MET E 78 -0.976 -5.496 -18.376 1.00 98.19 C +ATOM 5470 CB MET E 78 -0.439 -6.082 -20.748 1.00 98.19 C +ATOM 5471 O MET E 78 -1.501 -6.272 -17.576 1.00 98.19 O +ATOM 5472 CG MET E 78 -1.690 -6.939 -20.863 1.00 98.19 C +ATOM 5473 SD MET E 78 -2.335 -7.017 -22.579 1.00 98.19 S +ATOM 5474 CE MET E 78 -3.822 -8.022 -22.317 1.00 98.19 C +ATOM 5475 N ALA E 79 -1.271 -4.170 -18.485 1.00 97.73 N +ATOM 5476 CA ALA E 79 -2.483 -3.595 -17.908 1.00 97.73 C +ATOM 5477 C ALA E 79 -3.569 -3.428 -18.968 1.00 97.73 C +ATOM 5478 CB ALA E 79 -2.175 -2.252 -17.251 1.00 97.73 C +ATOM 5479 O ALA E 79 -3.401 -2.667 -19.923 1.00 97.73 O +ATOM 5480 N LYS E 80 -4.623 -4.163 -18.805 1.00 96.69 N +ATOM 5481 CA LYS E 80 -5.761 -4.096 -19.717 1.00 96.69 C +ATOM 5482 C LYS E 80 -7.071 -4.364 -18.981 1.00 96.69 C +ATOM 5483 CB LYS E 80 -5.590 -5.094 -20.863 1.00 96.69 C +ATOM 5484 O LYS E 80 -7.260 -5.441 -18.411 1.00 96.69 O +ATOM 5485 CG LYS E 80 -6.646 -4.973 -21.952 1.00 96.69 C +ATOM 5486 CD LYS E 80 -6.285 -5.804 -23.176 1.00 96.69 C +ATOM 5487 CE LYS E 80 -7.307 -5.631 -24.292 1.00 96.69 C +ATOM 5488 NZ LYS E 80 -6.836 -6.238 -25.573 1.00 96.69 N +ATOM 5489 N PRO E 81 -8.040 -3.458 -18.977 1.00 95.37 N +ATOM 5490 CA PRO E 81 -7.978 -2.099 -19.521 1.00 95.37 C +ATOM 5491 C PRO E 81 -7.006 -1.202 -18.759 1.00 95.37 C +ATOM 5492 CB PRO E 81 -9.416 -1.595 -19.374 1.00 95.37 C +ATOM 5493 O PRO E 81 -6.583 -1.544 -17.651 1.00 95.37 O +ATOM 5494 CG PRO E 81 -9.967 -2.346 -18.205 1.00 95.37 C +ATOM 5495 CD PRO E 81 -9.307 -3.694 -18.151 1.00 95.37 C +ATOM 5496 N CYS E 82 -6.555 -0.238 -19.371 1.00 95.03 N +ATOM 5497 CA CYS E 82 -5.688 0.738 -18.719 1.00 95.03 C +ATOM 5498 C CYS E 82 -6.415 2.062 -18.514 1.00 95.03 C +ATOM 5499 CB CYS E 82 -4.421 0.963 -19.543 1.00 95.03 C +ATOM 5500 O CYS E 82 -7.443 2.315 -19.145 1.00 95.03 O +ATOM 5501 SG CYS E 82 -4.739 1.521 -21.231 1.00 95.03 S +ATOM 5502 N VAL E 83 -5.961 2.897 -17.508 1.00 95.51 N +ATOM 5503 CA VAL E 83 -6.448 4.259 -17.319 1.00 95.51 C +ATOM 5504 C VAL E 83 -6.150 5.092 -18.563 1.00 95.51 C +ATOM 5505 CB VAL E 83 -5.817 4.919 -16.072 1.00 95.51 C +ATOM 5506 O VAL E 83 -5.061 4.999 -19.135 1.00 95.51 O +ATOM 5507 CG1 VAL E 83 -6.280 6.368 -15.935 1.00 95.51 C +ATOM 5508 CG2 VAL E 83 -6.163 4.123 -14.815 1.00 95.51 C +ATOM 5509 N VAL E 84 -7.102 5.812 -18.977 1.00 95.00 N +ATOM 5510 CA VAL E 84 -6.932 6.624 -20.178 1.00 95.00 C +ATOM 5511 C VAL E 84 -7.070 8.103 -19.826 1.00 95.00 C +ATOM 5512 CB VAL E 84 -7.953 6.239 -21.272 1.00 95.00 C +ATOM 5513 O VAL E 84 -7.674 8.452 -18.809 1.00 95.00 O +ATOM 5514 CG1 VAL E 84 -7.783 4.776 -21.679 1.00 95.00 C +ATOM 5515 CG2 VAL E 84 -9.378 6.501 -20.788 1.00 95.00 C +ATOM 5516 N VAL E 85 -6.472 8.975 -20.655 1.00 95.47 N +ATOM 5517 CA VAL E 85 -6.488 10.417 -20.426 1.00 95.47 C +ATOM 5518 C VAL E 85 -7.268 11.108 -21.542 1.00 95.47 C +ATOM 5519 CB VAL E 85 -5.057 10.994 -20.340 1.00 95.47 C +ATOM 5520 O VAL E 85 -7.080 10.802 -22.722 1.00 95.47 O +ATOM 5521 CG1 VAL E 85 -5.090 12.521 -20.340 1.00 95.47 C +ATOM 5522 CG2 VAL E 85 -4.346 10.471 -19.093 1.00 95.47 C +ATOM 5523 N ASN E 86 -8.138 12.041 -21.199 1.00 93.31 N +ATOM 5524 CA ASN E 86 -8.797 12.928 -22.152 1.00 93.31 C +ATOM 5525 C ASN E 86 -7.815 13.923 -22.763 1.00 93.31 C +ATOM 5526 CB ASN E 86 -9.957 13.668 -21.483 1.00 93.31 C +ATOM 5527 O ASN E 86 -7.047 14.565 -22.043 1.00 93.31 O +ATOM 5528 CG ASN E 86 -10.747 14.519 -22.458 1.00 93.31 C +ATOM 5529 ND2 ASN E 86 -12.061 14.566 -22.274 1.00 93.31 N +ATOM 5530 OD1 ASN E 86 -10.181 15.128 -23.369 1.00 93.31 O +ATOM 5531 N PRO E 87 -7.868 14.034 -24.109 1.00 94.84 N +ATOM 5532 CA PRO E 87 -6.909 14.930 -24.759 1.00 94.84 C +ATOM 5533 C PRO E 87 -7.059 16.382 -24.307 1.00 94.84 C +ATOM 5534 CB PRO E 87 -7.240 14.784 -26.246 1.00 94.84 C +ATOM 5535 O PRO E 87 -6.091 17.145 -24.340 1.00 94.84 O +ATOM 5536 CG PRO E 87 -8.636 14.250 -26.276 1.00 94.84 C +ATOM 5537 CD PRO E 87 -8.848 13.402 -25.055 1.00 94.84 C +ATOM 5538 N GLU E 88 -8.155 16.764 -23.796 1.00 93.17 N +ATOM 5539 CA GLU E 88 -8.410 18.151 -23.422 1.00 93.17 C +ATOM 5540 C GLU E 88 -8.150 18.379 -21.936 1.00 93.17 C +ATOM 5541 CB GLU E 88 -9.848 18.547 -23.771 1.00 93.17 C +ATOM 5542 O GLU E 88 -8.329 19.490 -21.432 1.00 93.17 O +ATOM 5543 CG GLU E 88 -10.161 18.476 -25.259 1.00 93.17 C +ATOM 5544 CD GLU E 88 -11.621 18.755 -25.578 1.00 93.17 C +ATOM 5545 OE1 GLU E 88 -11.961 18.917 -26.772 1.00 93.17 O +ATOM 5546 OE2 GLU E 88 -12.432 18.813 -24.626 1.00 93.17 O +ATOM 5547 N LEU E 89 -7.782 17.325 -21.270 1.00 93.23 N +ATOM 5548 CA LEU E 89 -7.496 17.456 -19.846 1.00 93.23 C +ATOM 5549 C LEU E 89 -6.265 18.327 -19.617 1.00 93.23 C +ATOM 5550 CB LEU E 89 -7.286 16.078 -19.213 1.00 93.23 C +ATOM 5551 O LEU E 89 -5.259 18.183 -20.314 1.00 93.23 O +ATOM 5552 CG LEU E 89 -7.296 16.026 -17.684 1.00 93.23 C +ATOM 5553 CD1 LEU E 89 -8.656 16.461 -17.148 1.00 93.23 C +ATOM 5554 CD2 LEU E 89 -6.947 14.625 -17.195 1.00 93.23 C +ATOM 5555 N GLY E 90 -6.330 19.222 -18.580 1.00 92.93 N +ATOM 5556 CA GLY E 90 -5.180 20.040 -18.229 1.00 92.93 C +ATOM 5557 C GLY E 90 -4.015 19.233 -17.688 1.00 92.93 C +ATOM 5558 O GLY E 90 -4.215 18.226 -17.005 1.00 92.93 O +ATOM 5559 N VAL E 91 -2.887 19.703 -17.887 1.00 94.86 N +ATOM 5560 CA VAL E 91 -1.660 18.975 -17.582 1.00 94.86 C +ATOM 5561 C VAL E 91 -1.550 18.757 -16.074 1.00 94.86 C +ATOM 5562 CB VAL E 91 -0.412 19.720 -18.106 1.00 94.86 C +ATOM 5563 O VAL E 91 -1.088 17.706 -15.625 1.00 94.86 O +ATOM 5564 CG1 VAL E 91 0.866 19.060 -17.593 1.00 94.86 C +ATOM 5565 CG2 VAL E 91 -0.420 19.765 -19.632 1.00 94.86 C +ATOM 5566 N GLU E 92 -1.916 19.710 -15.300 1.00 94.33 N +ATOM 5567 CA GLU E 92 -1.850 19.549 -13.851 1.00 94.33 C +ATOM 5568 C GLU E 92 -2.786 18.442 -13.375 1.00 94.33 C +ATOM 5569 CB GLU E 92 -2.191 20.866 -13.148 1.00 94.33 C +ATOM 5570 O GLU E 92 -2.456 17.697 -12.450 1.00 94.33 O +ATOM 5571 CG GLU E 92 -1.168 21.969 -13.379 1.00 94.33 C +ATOM 5572 CD GLU E 92 -1.382 22.721 -14.682 1.00 94.33 C +ATOM 5573 OE1 GLU E 92 -0.627 23.681 -14.960 1.00 94.33 O +ATOM 5574 OE2 GLU E 92 -2.312 22.349 -15.432 1.00 94.33 O +ATOM 5575 N TYR E 93 -3.892 18.373 -14.007 1.00 95.24 N +ATOM 5576 CA TYR E 93 -4.839 17.318 -13.661 1.00 95.24 C +ATOM 5577 C TYR E 93 -4.325 15.955 -14.108 1.00 95.24 C +ATOM 5578 CB TYR E 93 -6.206 17.594 -14.294 1.00 95.24 C +ATOM 5579 O TYR E 93 -4.580 14.943 -13.451 1.00 95.24 O +ATOM 5580 CG TYR E 93 -6.998 18.667 -13.586 1.00 95.24 C +ATOM 5581 CD1 TYR E 93 -7.296 18.559 -12.229 1.00 95.24 C +ATOM 5582 CD2 TYR E 93 -7.449 19.789 -14.272 1.00 95.24 C +ATOM 5583 CE1 TYR E 93 -8.027 19.544 -11.573 1.00 95.24 C +ATOM 5584 CE2 TYR E 93 -8.181 20.781 -13.626 1.00 95.24 C +ATOM 5585 OH TYR E 93 -9.188 21.628 -11.634 1.00 95.24 O +ATOM 5586 CZ TYR E 93 -8.464 20.650 -12.279 1.00 95.24 C +ATOM 5587 N VAL E 94 -3.613 15.908 -15.233 1.00 96.84 N +ATOM 5588 CA VAL E 94 -2.960 14.664 -15.626 1.00 96.84 C +ATOM 5589 C VAL E 94 -1.965 14.239 -14.549 1.00 96.84 C +ATOM 5590 CB VAL E 94 -2.243 14.805 -16.988 1.00 96.84 C +ATOM 5591 O VAL E 94 -1.957 13.080 -14.125 1.00 96.84 O +ATOM 5592 CG1 VAL E 94 -1.585 13.487 -17.391 1.00 96.84 C +ATOM 5593 CG2 VAL E 94 -3.225 15.266 -18.063 1.00 96.84 C +ATOM 5594 N ALA E 95 -1.187 15.214 -14.114 1.00 98.04 N +ATOM 5595 CA ALA E 95 -0.235 14.939 -13.041 1.00 98.04 C +ATOM 5596 C ALA E 95 -0.944 14.395 -11.805 1.00 98.04 C +ATOM 5597 CB ALA E 95 0.549 16.201 -12.690 1.00 98.04 C +ATOM 5598 O ALA E 95 -0.493 13.419 -11.201 1.00 98.04 O +ATOM 5599 N ARG E 96 -2.012 15.004 -11.439 1.00 97.77 N +ATOM 5600 CA ARG E 96 -2.767 14.586 -10.262 1.00 97.77 C +ATOM 5601 C ARG E 96 -3.352 13.191 -10.454 1.00 97.77 C +ATOM 5602 CB ARG E 96 -3.885 15.586 -9.958 1.00 97.77 C +ATOM 5603 O ARG E 96 -3.357 12.381 -9.525 1.00 97.77 O +ATOM 5604 CG ARG E 96 -4.583 15.343 -8.629 1.00 97.77 C +ATOM 5605 CD ARG E 96 -5.531 16.480 -8.275 1.00 97.77 C +ATOM 5606 NE ARG E 96 -6.393 16.133 -7.148 1.00 97.77 N +ATOM 5607 NH1 ARG E 96 -4.986 17.004 -5.536 1.00 97.77 N +ATOM 5608 NH2 ARG E 96 -6.969 16.029 -4.927 1.00 97.77 N +ATOM 5609 CZ ARG E 96 -6.114 16.389 -5.873 1.00 97.77 C +ATOM 5610 N LEU E 97 -3.833 12.899 -11.653 1.00 97.61 N +ATOM 5611 CA LEU E 97 -4.343 11.568 -11.963 1.00 97.61 C +ATOM 5612 C LEU E 97 -3.251 10.516 -11.796 1.00 97.61 C +ATOM 5613 CB LEU E 97 -4.896 11.524 -13.390 1.00 97.61 C +ATOM 5614 O LEU E 97 -3.482 9.467 -11.191 1.00 97.61 O +ATOM 5615 CG LEU E 97 -5.533 10.205 -13.830 1.00 97.61 C +ATOM 5616 CD1 LEU E 97 -6.754 9.894 -12.971 1.00 97.61 C +ATOM 5617 CD2 LEU E 97 -5.912 10.261 -15.306 1.00 97.61 C +ATOM 5618 N PHE E 98 -2.080 10.801 -12.288 1.00 98.08 N +ATOM 5619 CA PHE E 98 -0.948 9.894 -12.142 1.00 98.08 C +ATOM 5620 C PHE E 98 -0.605 9.688 -10.672 1.00 98.08 C +ATOM 5621 CB PHE E 98 0.274 10.430 -12.896 1.00 98.08 C +ATOM 5622 O PHE E 98 -0.396 8.556 -10.230 1.00 98.08 O +ATOM 5623 CG PHE E 98 0.185 10.268 -14.389 1.00 98.08 C +ATOM 5624 CD1 PHE E 98 -0.867 9.566 -14.965 1.00 98.08 C +ATOM 5625 CD2 PHE E 98 1.153 10.819 -15.218 1.00 98.08 C +ATOM 5626 CE1 PHE E 98 -0.952 9.414 -16.347 1.00 98.08 C +ATOM 5627 CE2 PHE E 98 1.075 10.671 -16.600 1.00 98.08 C +ATOM 5628 CZ PHE E 98 0.022 9.968 -17.163 1.00 98.08 C +ATOM 5629 N ALA E 99 -0.601 10.778 -9.959 1.00 97.82 N +ATOM 5630 CA ALA E 99 -0.283 10.688 -8.536 1.00 97.82 C +ATOM 5631 C ALA E 99 -1.313 9.839 -7.797 1.00 97.82 C +ATOM 5632 CB ALA E 99 -0.206 12.083 -7.919 1.00 97.82 C +ATOM 5633 O ALA E 99 -0.954 8.997 -6.970 1.00 97.82 O +ATOM 5634 N GLN E 100 -2.555 9.975 -8.080 1.00 96.07 N +ATOM 5635 CA GLN E 100 -3.637 9.280 -7.391 1.00 96.07 C +ATOM 5636 C GLN E 100 -3.659 7.798 -7.754 1.00 96.07 C +ATOM 5637 CB GLN E 100 -4.985 9.922 -7.723 1.00 96.07 C +ATOM 5638 O GLN E 100 -3.932 6.949 -6.904 1.00 96.07 O +ATOM 5639 CG GLN E 100 -5.203 11.274 -7.058 1.00 96.07 C +ATOM 5640 CD GLN E 100 -6.458 11.973 -7.545 1.00 96.07 C +ATOM 5641 NE2 GLN E 100 -6.857 13.030 -6.847 1.00 96.07 N +ATOM 5642 OE1 GLN E 100 -7.064 11.566 -8.542 1.00 96.07 O +ATOM 5643 N THR E 101 -3.364 7.501 -8.996 1.00 96.58 N +ATOM 5644 CA THR E 101 -3.465 6.126 -9.474 1.00 96.58 C +ATOM 5645 C THR E 101 -2.104 5.437 -9.428 1.00 96.58 C +ATOM 5646 CB THR E 101 -4.022 6.073 -10.909 1.00 96.58 C +ATOM 5647 O THR E 101 -2.006 4.230 -9.660 1.00 96.58 O +ATOM 5648 CG2 THR E 101 -5.433 6.649 -10.972 1.00 96.58 C +ATOM 5649 OG1 THR E 101 -3.169 6.832 -11.775 1.00 96.58 O +ATOM 5650 N ARG E 102 -1.022 6.201 -9.284 1.00 95.86 N +ATOM 5651 CA ARG E 102 0.349 5.713 -9.176 1.00 95.86 C +ATOM 5652 C ARG E 102 0.821 5.109 -10.495 1.00 95.86 C +ATOM 5653 CB ARG E 102 0.464 4.678 -8.055 1.00 95.86 C +ATOM 5654 O ARG E 102 1.511 4.088 -10.504 1.00 95.86 O +ATOM 5655 CG ARG E 102 0.175 5.235 -6.670 1.00 95.86 C +ATOM 5656 CD ARG E 102 1.291 6.151 -6.187 1.00 95.86 C +ATOM 5657 NE ARG E 102 1.103 6.540 -4.792 1.00 95.86 N +ATOM 5658 NH1 ARG E 102 3.250 7.346 -4.512 1.00 95.86 N +ATOM 5659 NH2 ARG E 102 1.759 7.412 -2.772 1.00 95.86 N +ATOM 5660 CZ ARG E 102 2.038 7.099 -4.029 1.00 95.86 C +ATOM 5661 N ILE E 103 0.313 5.672 -11.576 1.00 96.37 N +ATOM 5662 CA ILE E 103 0.839 5.318 -12.890 1.00 96.37 C +ATOM 5663 C ILE E 103 1.716 6.451 -13.417 1.00 96.37 C +ATOM 5664 CB ILE E 103 -0.299 5.010 -13.889 1.00 96.37 C +ATOM 5665 O ILE E 103 1.722 7.551 -12.860 1.00 96.37 O +ATOM 5666 CG1 ILE E 103 -1.154 6.260 -14.127 1.00 96.37 C +ATOM 5667 CG2 ILE E 103 -1.158 3.846 -13.388 1.00 96.37 C +ATOM 5668 CD1 ILE E 103 -2.204 6.094 -15.216 1.00 96.37 C +ATOM 5669 N ARG E 104 2.485 6.184 -14.454 1.00 96.48 N +ATOM 5670 CA ARG E 104 3.447 7.173 -14.929 1.00 96.48 C +ATOM 5671 C ARG E 104 3.215 7.500 -16.400 1.00 96.48 C +ATOM 5672 CB ARG E 104 4.879 6.674 -14.723 1.00 96.48 C +ATOM 5673 O ARG E 104 3.856 8.397 -16.951 1.00 96.48 O +ATOM 5674 CG ARG E 104 5.259 6.481 -13.263 1.00 96.48 C +ATOM 5675 CD ARG E 104 6.574 5.727 -13.119 1.00 96.48 C +ATOM 5676 NE ARG E 104 6.857 5.399 -11.724 1.00 96.48 N +ATOM 5677 NH1 ARG E 104 8.815 4.259 -12.173 1.00 96.48 N +ATOM 5678 NH2 ARG E 104 8.074 4.467 -10.014 1.00 96.48 N +ATOM 5679 CZ ARG E 104 7.915 4.709 -11.307 1.00 96.48 C +ATOM 5680 N ARG E 105 2.369 6.706 -16.997 1.00 97.31 N +ATOM 5681 CA ARG E 105 2.020 6.925 -18.398 1.00 97.31 C +ATOM 5682 C ARG E 105 0.641 6.355 -18.714 1.00 97.31 C +ATOM 5683 CB ARG E 105 3.070 6.297 -19.317 1.00 97.31 C +ATOM 5684 O ARG E 105 0.184 5.420 -18.053 1.00 97.31 O +ATOM 5685 CG ARG E 105 3.131 4.780 -19.238 1.00 97.31 C +ATOM 5686 CD ARG E 105 4.337 4.225 -19.983 1.00 97.31 C +ATOM 5687 NE ARG E 105 5.584 4.823 -19.513 1.00 97.31 N +ATOM 5688 NH1 ARG E 105 6.610 4.813 -21.583 1.00 97.31 N +ATOM 5689 NH2 ARG E 105 7.719 5.633 -19.752 1.00 97.31 N +ATOM 5690 CZ ARG E 105 6.635 5.088 -20.284 1.00 97.31 C +ATOM 5691 N ALA E 106 0.045 6.925 -19.693 1.00 97.61 N +ATOM 5692 CA ALA E 106 -1.291 6.502 -20.105 1.00 97.61 C +ATOM 5693 C ALA E 106 -1.571 6.902 -21.551 1.00 97.61 C +ATOM 5694 CB ALA E 106 -2.348 7.097 -19.177 1.00 97.61 C +ATOM 5695 O ALA E 106 -1.043 7.904 -22.038 1.00 97.61 O +ATOM 5696 N PRO E 107 -2.369 6.095 -22.229 1.00 97.36 N +ATOM 5697 CA PRO E 107 -2.793 6.521 -23.565 1.00 97.36 C +ATOM 5698 C PRO E 107 -3.766 7.696 -23.529 1.00 97.36 C +ATOM 5699 CB PRO E 107 -3.467 5.271 -24.136 1.00 97.36 C +ATOM 5700 O PRO E 107 -4.557 7.819 -22.591 1.00 97.36 O +ATOM 5701 CG PRO E 107 -3.907 4.493 -22.938 1.00 97.36 C +ATOM 5702 CD PRO E 107 -2.989 4.818 -21.795 1.00 97.36 C +ATOM 5703 N VAL E 108 -3.633 8.570 -24.477 1.00 96.95 N +ATOM 5704 CA VAL E 108 -4.575 9.661 -24.707 1.00 96.95 C +ATOM 5705 C VAL E 108 -5.576 9.260 -25.788 1.00 96.95 C +ATOM 5706 CB VAL E 108 -3.848 10.963 -25.111 1.00 96.95 C +ATOM 5707 O VAL E 108 -5.202 9.057 -26.946 1.00 96.95 O +ATOM 5708 CG1 VAL E 108 -4.842 12.112 -25.264 1.00 96.95 C +ATOM 5709 CG2 VAL E 108 -2.774 11.315 -24.083 1.00 96.95 C +ATOM 5710 N ILE E 109 -6.802 9.157 -25.412 1.00 92.95 N +ATOM 5711 CA ILE E 109 -7.818 8.628 -26.316 1.00 92.95 C +ATOM 5712 C ILE E 109 -8.967 9.625 -26.441 1.00 92.95 C +ATOM 5713 CB ILE E 109 -8.347 7.259 -25.832 1.00 92.95 C +ATOM 5714 O ILE E 109 -9.424 10.184 -25.441 1.00 92.95 O +ATOM 5715 CG1 ILE E 109 -7.209 6.232 -25.790 1.00 92.95 C +ATOM 5716 CG2 ILE E 109 -9.490 6.774 -26.729 1.00 92.95 C +ATOM 5717 CD1 ILE E 109 -7.624 4.871 -25.247 1.00 92.95 C +ATOM 5718 N GLN E 110 -9.448 9.907 -27.651 1.00 90.43 N +ATOM 5719 CA GLN E 110 -10.654 10.666 -27.964 1.00 90.43 C +ATOM 5720 C GLN E 110 -11.720 9.773 -28.592 1.00 90.43 C +ATOM 5721 CB GLN E 110 -10.328 11.831 -28.899 1.00 90.43 C +ATOM 5722 O GLN E 110 -11.580 9.344 -29.739 1.00 90.43 O +ATOM 5723 CG GLN E 110 -11.498 12.776 -29.136 1.00 90.43 C +ATOM 5724 CD GLN E 110 -11.085 14.061 -29.829 1.00 90.43 C +ATOM 5725 NE2 GLN E 110 -11.692 15.173 -29.429 1.00 90.43 N +ATOM 5726 OE1 GLN E 110 -10.226 14.054 -30.717 1.00 90.43 O +ATOM 5727 N GLY E 111 -12.768 9.487 -27.808 1.00 83.34 N +ATOM 5728 CA GLY E 111 -13.707 8.483 -28.282 1.00 83.34 C +ATOM 5729 C GLY E 111 -13.103 7.094 -28.370 1.00 83.34 C +ATOM 5730 O GLY E 111 -12.721 6.513 -27.352 1.00 83.34 O +ATOM 5731 N LYS E 112 -12.989 6.671 -29.668 1.00 83.28 N +ATOM 5732 CA LYS E 112 -12.400 5.353 -29.886 1.00 83.28 C +ATOM 5733 C LYS E 112 -11.035 5.466 -30.559 1.00 83.28 C +ATOM 5734 CB LYS E 112 -13.331 4.482 -30.730 1.00 83.28 C +ATOM 5735 O LYS E 112 -10.410 4.453 -30.878 1.00 83.28 O +ATOM 5736 CG LYS E 112 -14.627 4.101 -30.029 1.00 83.28 C +ATOM 5737 CD LYS E 112 -15.415 3.073 -30.831 1.00 83.28 C +ATOM 5738 CE LYS E 112 -16.677 2.638 -30.098 1.00 83.28 C +ATOM 5739 NZ LYS E 112 -17.431 1.599 -30.861 1.00 83.28 N +ATOM 5740 N THR E 113 -10.578 6.668 -30.606 1.00 90.07 N +ATOM 5741 CA THR E 113 -9.356 6.883 -31.373 1.00 90.07 C +ATOM 5742 C THR E 113 -8.171 7.130 -30.444 1.00 90.07 C +ATOM 5743 CB THR E 113 -9.507 8.070 -32.343 1.00 90.07 C +ATOM 5744 O THR E 113 -8.240 7.978 -29.552 1.00 90.07 O +ATOM 5745 CG2 THR E 113 -8.285 8.201 -33.246 1.00 90.07 C +ATOM 5746 OG1 THR E 113 -10.670 7.870 -33.156 1.00 90.07 O +ATOM 5747 N LEU E 114 -7.186 6.387 -30.654 1.00 94.03 N +ATOM 5748 CA LEU E 114 -5.931 6.577 -29.933 1.00 94.03 C +ATOM 5749 C LEU E 114 -5.136 7.737 -30.523 1.00 94.03 C +ATOM 5750 CB LEU E 114 -5.093 5.296 -29.972 1.00 94.03 C +ATOM 5751 O LEU E 114 -4.750 7.700 -31.693 1.00 94.03 O +ATOM 5752 CG LEU E 114 -3.718 5.366 -29.306 1.00 94.03 C +ATOM 5753 CD1 LEU E 114 -3.867 5.569 -27.801 1.00 94.03 C +ATOM 5754 CD2 LEU E 114 -2.914 4.105 -29.603 1.00 94.03 C +ATOM 5755 N LEU E 115 -4.790 8.790 -29.759 1.00 95.89 N +ATOM 5756 CA LEU E 115 -4.099 9.977 -30.249 1.00 95.89 C +ATOM 5757 C LEU E 115 -2.614 9.922 -29.908 1.00 95.89 C +ATOM 5758 CB LEU E 115 -4.724 11.243 -29.656 1.00 95.89 C +ATOM 5759 O LEU E 115 -1.781 10.440 -30.656 1.00 95.89 O +ATOM 5760 CG LEU E 115 -6.179 11.523 -30.035 1.00 95.89 C +ATOM 5761 CD1 LEU E 115 -6.630 12.860 -29.457 1.00 95.89 C +ATOM 5762 CD2 LEU E 115 -6.351 11.504 -31.550 1.00 95.89 C +ATOM 5763 N GLY E 116 -2.298 9.318 -28.745 1.00 96.55 N +ATOM 5764 CA GLY E 116 -0.921 9.271 -28.281 1.00 96.55 C +ATOM 5765 C GLY E 116 -0.779 8.686 -26.889 1.00 96.55 C +ATOM 5766 O GLY E 116 -1.646 7.936 -26.434 1.00 96.55 O +ATOM 5767 N ILE E 117 0.422 8.892 -26.281 1.00 97.18 N +ATOM 5768 CA ILE E 117 0.743 8.500 -24.912 1.00 97.18 C +ATOM 5769 C ILE E 117 1.290 9.702 -24.146 1.00 97.18 C +ATOM 5770 CB ILE E 117 1.759 7.336 -24.881 1.00 97.18 C +ATOM 5771 O ILE E 117 2.074 10.486 -24.687 1.00 97.18 O +ATOM 5772 CG1 ILE E 117 1.131 6.063 -25.460 1.00 97.18 C +ATOM 5773 CG2 ILE E 117 2.263 7.098 -23.454 1.00 97.18 C +ATOM 5774 CD1 ILE E 117 2.096 4.890 -25.566 1.00 97.18 C +ATOM 5775 N ILE E 118 0.866 9.923 -23.011 1.00 97.87 N +ATOM 5776 CA ILE E 118 1.398 10.979 -22.157 1.00 97.87 C +ATOM 5777 C ILE E 118 2.064 10.363 -20.929 1.00 97.87 C +ATOM 5778 CB ILE E 118 0.292 11.969 -21.727 1.00 97.87 C +ATOM 5779 O ILE E 118 1.561 9.387 -20.367 1.00 97.87 O +ATOM 5780 CG1 ILE E 118 0.899 13.142 -20.948 1.00 97.87 C +ATOM 5781 CG2 ILE E 118 -0.778 11.256 -20.896 1.00 97.87 C +ATOM 5782 CD1 ILE E 118 -0.031 14.339 -20.808 1.00 97.87 C +ATOM 5783 N SER E 119 3.159 10.879 -20.507 1.00 97.58 N +ATOM 5784 CA SER E 119 3.915 10.338 -19.383 1.00 97.58 C +ATOM 5785 C SER E 119 4.370 11.445 -18.438 1.00 97.58 C +ATOM 5786 CB SER E 119 5.128 9.551 -19.881 1.00 97.58 C +ATOM 5787 O SER E 119 4.245 12.630 -18.756 1.00 97.58 O +ATOM 5788 OG SER E 119 6.106 10.423 -20.422 1.00 97.58 O +ATOM 5789 N VAL E 120 4.911 11.086 -17.315 1.00 97.96 N +ATOM 5790 CA VAL E 120 5.502 12.026 -16.369 1.00 97.96 C +ATOM 5791 C VAL E 120 6.647 12.782 -17.038 1.00 97.96 C +ATOM 5792 CB VAL E 120 6.007 11.309 -15.097 1.00 97.96 C +ATOM 5793 O VAL E 120 6.878 13.958 -16.745 1.00 97.96 O +ATOM 5794 CG1 VAL E 120 4.837 10.743 -14.294 1.00 97.96 C +ATOM 5795 CG2 VAL E 120 6.992 10.202 -15.465 1.00 97.96 C +ATOM 5796 N SER E 121 7.333 12.136 -17.964 1.00 96.99 N +ATOM 5797 CA SER E 121 8.412 12.792 -18.695 1.00 96.99 C +ATOM 5798 C SER E 121 7.879 13.918 -19.574 1.00 96.99 C +ATOM 5799 CB SER E 121 9.170 11.779 -19.555 1.00 96.99 C +ATOM 5800 O SER E 121 8.475 14.995 -19.641 1.00 96.99 O +ATOM 5801 OG SER E 121 9.805 10.806 -18.743 1.00 96.99 O +ATOM 5802 N ASP E 122 6.801 13.626 -20.186 1.00 97.45 N +ATOM 5803 CA ASP E 122 6.189 14.668 -21.005 1.00 97.45 C +ATOM 5804 C ASP E 122 5.816 15.883 -20.159 1.00 97.45 C +ATOM 5805 CB ASP E 122 4.951 14.127 -21.723 1.00 97.45 C +ATOM 5806 O ASP E 122 6.057 17.023 -20.560 1.00 97.45 O +ATOM 5807 CG ASP E 122 5.288 13.113 -22.802 1.00 97.45 C +ATOM 5808 OD1 ASP E 122 6.275 13.313 -23.541 1.00 97.45 O +ATOM 5809 OD2 ASP E 122 4.557 12.105 -22.916 1.00 97.45 O +ATOM 5810 N ILE E 123 5.254 15.617 -19.005 1.00 98.10 N +ATOM 5811 CA ILE E 123 4.853 16.704 -18.118 1.00 98.10 C +ATOM 5812 C ILE E 123 6.084 17.498 -17.686 1.00 98.10 C +ATOM 5813 CB ILE E 123 4.095 16.174 -16.881 1.00 98.10 C +ATOM 5814 O ILE E 123 6.083 18.730 -17.730 1.00 98.10 O +ATOM 5815 CG1 ILE E 123 2.770 15.528 -17.303 1.00 98.10 C +ATOM 5816 CG2 ILE E 123 3.857 17.299 -15.870 1.00 98.10 C +ATOM 5817 CD1 ILE E 123 2.045 14.809 -16.174 1.00 98.10 C +ATOM 5818 N LEU E 124 7.108 16.838 -17.366 1.00 98.22 N +ATOM 5819 CA LEU E 124 8.312 17.496 -16.871 1.00 98.22 C +ATOM 5820 C LEU E 124 8.985 18.301 -17.978 1.00 98.22 C +ATOM 5821 CB LEU E 124 9.293 16.466 -16.305 1.00 98.22 C +ATOM 5822 O LEU E 124 9.340 19.465 -17.778 1.00 98.22 O +ATOM 5823 CG LEU E 124 10.524 17.023 -15.590 1.00 98.22 C +ATOM 5824 CD1 LEU E 124 10.180 17.389 -14.150 1.00 98.22 C +ATOM 5825 CD2 LEU E 124 11.669 16.016 -15.632 1.00 98.22 C +ATOM 5826 N PHE E 125 9.124 17.774 -19.147 1.00 97.63 N +ATOM 5827 CA PHE E 125 9.979 18.342 -20.184 1.00 97.63 C +ATOM 5828 C PHE E 125 9.193 19.306 -21.065 1.00 97.63 C +ATOM 5829 CB PHE E 125 10.597 17.233 -21.040 1.00 97.63 C +ATOM 5830 O PHE E 125 9.765 20.230 -21.647 1.00 97.63 O +ATOM 5831 CG PHE E 125 11.725 16.501 -20.364 1.00 97.63 C +ATOM 5832 CD1 PHE E 125 12.978 17.088 -20.242 1.00 97.63 C +ATOM 5833 CD2 PHE E 125 11.530 15.226 -19.850 1.00 97.63 C +ATOM 5834 CE1 PHE E 125 14.024 16.412 -19.616 1.00 97.63 C +ATOM 5835 CE2 PHE E 125 12.570 14.545 -19.223 1.00 97.63 C +ATOM 5836 CZ PHE E 125 13.816 15.139 -19.108 1.00 97.63 C +ATOM 5837 N LYS E 126 7.893 19.115 -21.162 1.00 97.42 N +ATOM 5838 CA LYS E 126 7.184 19.839 -22.213 1.00 97.42 C +ATOM 5839 C LYS E 126 6.129 20.771 -21.623 1.00 97.42 C +ATOM 5840 CB LYS E 126 6.531 18.862 -23.192 1.00 97.42 C +ATOM 5841 O LYS E 126 5.635 21.670 -22.307 1.00 97.42 O +ATOM 5842 CG LYS E 126 7.511 17.910 -23.862 1.00 97.42 C +ATOM 5843 CD LYS E 126 6.798 16.938 -24.794 1.00 97.42 C +ATOM 5844 CE LYS E 126 7.744 15.865 -25.314 1.00 97.42 C +ATOM 5845 NZ LYS E 126 7.016 14.805 -26.075 1.00 97.42 N +ATOM 5846 N SER E 127 5.794 20.611 -20.375 1.00 96.39 N +ATOM 5847 CA SER E 127 4.708 21.414 -19.822 1.00 96.39 C +ATOM 5848 C SER E 127 5.228 22.730 -19.253 1.00 96.39 C +ATOM 5849 CB SER E 127 3.967 20.636 -18.734 1.00 96.39 C +ATOM 5850 O SER E 127 6.427 23.009 -19.316 1.00 96.39 O +ATOM 5851 OG SER E 127 4.655 20.720 -17.498 1.00 96.39 O +ATOM 5852 N ASP E 128 4.282 23.545 -18.789 1.00 95.79 N +ATOM 5853 CA ASP E 128 4.634 24.870 -18.290 1.00 95.79 C +ATOM 5854 C ASP E 128 4.331 24.994 -16.798 1.00 95.79 C +ATOM 5855 CB ASP E 128 3.888 25.954 -19.070 1.00 95.79 C +ATOM 5856 O ASP E 128 4.042 26.087 -16.307 1.00 95.79 O +ATOM 5857 CG ASP E 128 2.378 25.814 -18.983 1.00 95.79 C +ATOM 5858 OD1 ASP E 128 1.890 24.844 -18.363 1.00 95.79 O +ATOM 5859 OD2 ASP E 128 1.670 26.679 -19.541 1.00 95.79 O +ATOM 5860 N PHE E 129 4.384 23.908 -16.078 1.00 95.38 N +ATOM 5861 CA PHE E 129 3.992 23.937 -14.674 1.00 95.38 C +ATOM 5862 C PHE E 129 5.003 24.720 -13.845 1.00 95.38 C +ATOM 5863 CB PHE E 129 3.852 22.514 -14.124 1.00 95.38 C +ATOM 5864 O PHE E 129 4.684 25.194 -12.753 1.00 95.38 O +ATOM 5865 CG PHE E 129 5.167 21.814 -13.911 1.00 95.38 C +ATOM 5866 CD1 PHE E 129 5.774 21.114 -14.946 1.00 95.38 C +ATOM 5867 CD2 PHE E 129 5.797 21.857 -12.674 1.00 95.38 C +ATOM 5868 CE1 PHE E 129 6.991 20.465 -14.751 1.00 95.38 C +ATOM 5869 CE2 PHE E 129 7.013 21.211 -12.471 1.00 95.38 C +ATOM 5870 CZ PHE E 129 7.608 20.515 -13.511 1.00 95.38 C +ATOM 5871 N VAL E 130 6.247 24.811 -14.332 1.00 96.78 N +ATOM 5872 CA VAL E 130 7.249 25.601 -13.625 1.00 96.78 C +ATOM 5873 C VAL E 130 6.964 27.089 -13.816 1.00 96.78 C +ATOM 5874 CB VAL E 130 8.679 25.266 -14.107 1.00 96.78 C +ATOM 5875 O VAL E 130 6.976 27.858 -12.853 1.00 96.78 O +ATOM 5876 CG1 VAL E 130 9.696 26.221 -13.486 1.00 96.78 C +ATOM 5877 CG2 VAL E 130 9.028 23.817 -13.773 1.00 96.78 C +ATOM 5878 N GLU E 131 6.643 27.479 -15.038 1.00 94.61 N +ATOM 5879 CA GLU E 131 6.417 28.880 -15.384 1.00 94.61 C +ATOM 5880 C GLU E 131 5.061 29.362 -14.879 1.00 94.61 C +ATOM 5881 CB GLU E 131 6.517 29.083 -16.898 1.00 94.61 C +ATOM 5882 O GLU E 131 4.926 30.506 -14.441 1.00 94.61 O +ATOM 5883 CG GLU E 131 7.902 28.807 -17.466 1.00 94.61 C +ATOM 5884 CD GLU E 131 8.192 27.326 -17.648 1.00 94.61 C +ATOM 5885 OE1 GLU E 131 9.376 26.955 -17.817 1.00 94.61 O +ATOM 5886 OE2 GLU E 131 7.227 26.530 -17.623 1.00 94.61 O +ATOM 5887 N LYS E 132 4.115 28.479 -14.951 1.00 92.50 N +ATOM 5888 CA LYS E 132 2.755 28.848 -14.571 1.00 92.50 C +ATOM 5889 C LYS E 132 2.170 27.846 -13.579 1.00 92.50 C +ATOM 5890 CB LYS E 132 1.859 28.945 -15.807 1.00 92.50 C +ATOM 5891 O LYS E 132 1.184 27.170 -13.880 1.00 92.50 O +ATOM 5892 CG LYS E 132 2.330 29.964 -16.834 1.00 92.50 C +ATOM 5893 CD LYS E 132 1.408 30.003 -18.046 1.00 92.50 C +ATOM 5894 CE LYS E 132 1.925 30.959 -19.112 1.00 92.50 C +ATOM 5895 NZ LYS E 132 1.079 30.928 -20.342 1.00 92.50 N +ATOM 5896 N PRO E 133 2.700 27.975 -12.396 1.00 90.98 N +ATOM 5897 CA PRO E 133 2.082 27.093 -11.404 1.00 90.98 C +ATOM 5898 C PRO E 133 0.625 27.453 -11.121 1.00 90.98 C +ATOM 5899 CB PRO E 133 2.947 27.301 -10.159 1.00 90.98 C +ATOM 5900 O PRO E 133 0.270 28.635 -11.098 1.00 90.98 O +ATOM 5901 CG PRO E 133 3.569 28.647 -10.346 1.00 90.98 C +ATOM 5902 CD PRO E 133 3.642 28.938 -11.818 1.00 90.98 C +ATOM 5903 N LYS E 134 -0.239 26.386 -10.944 1.00 86.60 N +ATOM 5904 CA LYS E 134 -1.669 26.641 -10.796 1.00 86.60 C +ATOM 5905 C LYS E 134 -2.208 26.020 -9.510 1.00 86.60 C +ATOM 5906 CB LYS E 134 -2.438 26.101 -12.002 1.00 86.60 C +ATOM 5907 O LYS E 134 -1.975 24.840 -9.240 1.00 86.60 O +ATOM 5908 CG LYS E 134 -2.114 26.807 -13.310 1.00 86.60 C +ATOM 5909 CD LYS E 134 -2.907 26.223 -14.472 1.00 86.60 C +ATOM 5910 CE LYS E 134 -2.516 26.865 -15.796 1.00 86.60 C +ATOM 5911 NZ LYS E 134 -3.247 26.254 -16.946 1.00 86.60 N +ATOM 5912 N ARG E 135 -2.918 26.849 -8.733 1.00 88.73 N +ATOM 5913 CA ARG E 135 -3.708 26.332 -7.620 1.00 88.73 C +ATOM 5914 C ARG E 135 -4.991 25.676 -8.118 1.00 88.73 C +ATOM 5915 CB ARG E 135 -4.042 27.452 -6.632 1.00 88.73 C +ATOM 5916 O ARG E 135 -5.931 26.364 -8.521 1.00 88.73 O +ATOM 5917 CG ARG E 135 -4.508 26.955 -5.273 1.00 88.73 C +ATOM 5918 CD ARG E 135 -4.495 28.066 -4.231 1.00 88.73 C +ATOM 5919 NE ARG E 135 -4.851 27.566 -2.906 1.00 88.73 N +ATOM 5920 NH1 ARG E 135 -4.262 29.502 -1.791 1.00 88.73 N +ATOM 5921 NH2 ARG E 135 -5.087 27.708 -0.626 1.00 88.73 N +ATOM 5922 CZ ARG E 135 -4.733 28.260 -1.778 1.00 88.73 C +ATOM 5923 N LEU E 136 -5.124 24.502 -8.063 1.00 87.60 N +ATOM 5924 CA LEU E 136 -6.107 23.702 -8.786 1.00 87.60 C +ATOM 5925 C LEU E 136 -7.521 24.025 -8.317 1.00 87.60 C +ATOM 5926 CB LEU E 136 -5.823 22.209 -8.601 1.00 87.60 C +ATOM 5927 O LEU E 136 -8.436 24.159 -9.134 1.00 87.60 O +ATOM 5928 CG LEU E 136 -4.542 21.677 -9.246 1.00 87.60 C +ATOM 5929 CD1 LEU E 136 -4.310 20.225 -8.843 1.00 87.60 C +ATOM 5930 CD2 LEU E 136 -4.612 21.812 -10.764 1.00 87.60 C +ATOM 5931 N PHE E 137 -7.766 24.304 -7.058 1.00 93.01 N +ATOM 5932 CA PHE E 137 -9.126 24.452 -6.553 1.00 93.01 C +ATOM 5933 C PHE E 137 -9.354 25.861 -6.019 1.00 93.01 C +ATOM 5934 CB PHE E 137 -9.408 23.421 -5.455 1.00 93.01 C +ATOM 5935 O PHE E 137 -10.088 26.049 -5.046 1.00 93.01 O +ATOM 5936 CG PHE E 137 -9.153 22.000 -5.878 1.00 93.01 C +ATOM 5937 CD1 PHE E 137 -9.775 21.472 -7.002 1.00 93.01 C +ATOM 5938 CD2 PHE E 137 -8.291 21.190 -5.149 1.00 93.01 C +ATOM 5939 CE1 PHE E 137 -9.542 20.156 -7.395 1.00 93.01 C +ATOM 5940 CE2 PHE E 137 -8.053 19.875 -5.536 1.00 93.01 C +ATOM 5941 CZ PHE E 137 -8.680 19.359 -6.658 1.00 93.01 C +ATOM 5942 N ILE E 138 -8.713 26.809 -6.613 1.00 92.97 N +ATOM 5943 CA ILE E 138 -8.752 28.183 -6.126 1.00 92.97 C +ATOM 5944 C ILE E 138 -10.175 28.728 -6.229 1.00 92.97 C +ATOM 5945 CB ILE E 138 -7.773 29.088 -6.908 1.00 92.97 C +ATOM 5946 O ILE E 138 -10.622 29.482 -5.362 1.00 92.97 O +ATOM 5947 CG1 ILE E 138 -7.687 30.472 -6.254 1.00 92.97 C +ATOM 5948 CG2 ILE E 138 -8.198 29.201 -8.375 1.00 92.97 C +ATOM 5949 CD1 ILE E 138 -6.842 30.507 -4.988 1.00 92.97 C +ATOM 5950 N GLU E 139 -10.873 28.325 -7.283 1.00 93.20 N +ATOM 5951 CA GLU E 139 -12.243 28.808 -7.434 1.00 93.20 C +ATOM 5952 C GLU E 139 -13.142 28.271 -6.324 1.00 93.20 C +ATOM 5953 CB GLU E 139 -12.804 28.415 -8.803 1.00 93.20 C +ATOM 5954 O GLU E 139 -13.964 29.006 -5.774 1.00 93.20 O +ATOM 5955 CG GLU E 139 -12.090 29.076 -9.973 1.00 93.20 C +ATOM 5956 CD GLU E 139 -12.177 30.593 -9.950 1.00 93.20 C +ATOM 5957 OE1 GLU E 139 -11.232 31.263 -10.424 1.00 93.20 O +ATOM 5958 OE2 GLU E 139 -13.199 31.117 -9.452 1.00 93.20 O +ATOM 5959 N ASP E 140 -13.014 27.031 -5.999 1.00 95.04 N +ATOM 5960 CA ASP E 140 -13.757 26.457 -4.881 1.00 95.04 C +ATOM 5961 C ASP E 140 -13.386 27.140 -3.566 1.00 95.04 C +ATOM 5962 CB ASP E 140 -13.501 24.952 -4.782 1.00 95.04 C +ATOM 5963 O ASP E 140 -14.257 27.429 -2.743 1.00 95.04 O +ATOM 5964 CG ASP E 140 -14.184 24.161 -5.884 1.00 95.04 C +ATOM 5965 OD1 ASP E 140 -15.323 24.505 -6.265 1.00 95.04 O +ATOM 5966 OD2 ASP E 140 -13.578 23.183 -6.373 1.00 95.04 O +ATOM 5967 N GLU E 141 -12.173 27.387 -3.402 1.00 96.28 N +ATOM 5968 CA GLU E 141 -11.697 28.039 -2.186 1.00 96.28 C +ATOM 5969 C GLU E 141 -12.294 29.435 -2.038 1.00 96.28 C +ATOM 5970 CB GLU E 141 -10.168 28.118 -2.181 1.00 96.28 C +ATOM 5971 O GLU E 141 -12.659 29.847 -0.935 1.00 96.28 O +ATOM 5972 CG GLU E 141 -9.483 26.764 -2.057 1.00 96.28 C +ATOM 5973 CD GLU E 141 -7.966 26.851 -2.128 1.00 96.28 C +ATOM 5974 OE1 GLU E 141 -7.340 25.992 -2.789 1.00 96.28 O +ATOM 5975 OE2 GLU E 141 -7.400 27.784 -1.516 1.00 96.28 O +ATOM 5976 N ILE E 142 -12.322 30.168 -3.170 1.00 96.43 N +ATOM 5977 CA ILE E 142 -12.885 31.514 -3.164 1.00 96.43 C +ATOM 5978 C ILE E 142 -14.358 31.455 -2.766 1.00 96.43 C +ATOM 5979 CB ILE E 142 -12.728 32.199 -4.540 1.00 96.43 C +ATOM 5980 O ILE E 142 -14.807 32.223 -1.911 1.00 96.43 O +ATOM 5981 CG1 ILE E 142 -11.256 32.536 -4.805 1.00 96.43 C +ATOM 5982 CG2 ILE E 142 -13.601 33.454 -4.621 1.00 96.43 C +ATOM 5983 CD1 ILE E 142 -10.963 32.943 -6.242 1.00 96.43 C +ATOM 5984 N GLU E 143 -15.054 30.541 -3.336 1.00 96.36 N +ATOM 5985 CA GLU E 143 -16.471 30.403 -3.014 1.00 96.36 C +ATOM 5986 C GLU E 143 -16.670 30.027 -1.548 1.00 96.36 C +ATOM 5987 CB GLU E 143 -17.130 29.358 -3.919 1.00 96.36 C +ATOM 5988 O GLU E 143 -17.528 30.594 -0.868 1.00 96.36 O +ATOM 5989 CG GLU E 143 -18.648 29.330 -3.821 1.00 96.36 C +ATOM 5990 CD GLU E 143 -19.298 28.413 -4.845 1.00 96.36 C +ATOM 5991 OE1 GLU E 143 -20.541 28.264 -4.825 1.00 96.36 O +ATOM 5992 OE2 GLU E 143 -18.558 27.837 -5.674 1.00 96.36 O +ATOM 5993 N ALA E 144 -15.922 29.163 -1.080 1.00 96.40 N +ATOM 5994 CA ALA E 144 -15.991 28.772 0.325 1.00 96.40 C +ATOM 5995 C ALA E 144 -15.672 29.951 1.239 1.00 96.40 C +ATOM 5996 CB ALA E 144 -15.035 27.614 0.602 1.00 96.40 C +ATOM 5997 O ALA E 144 -16.367 30.181 2.231 1.00 96.40 O +ATOM 5998 N ALA E 145 -14.649 30.665 0.891 1.00 97.04 N +ATOM 5999 CA ALA E 145 -14.254 31.824 1.688 1.00 97.04 C +ATOM 6000 C ALA E 145 -15.355 32.880 1.703 1.00 97.04 C +ATOM 6001 CB ALA E 145 -12.955 32.421 1.151 1.00 97.04 C +ATOM 6002 O ALA E 145 -15.576 33.540 2.721 1.00 97.04 O +ATOM 6003 N ARG E 146 -16.008 33.075 0.579 1.00 97.61 N +ATOM 6004 CA ARG E 146 -17.123 34.014 0.503 1.00 97.61 C +ATOM 6005 C ARG E 146 -18.247 33.605 1.449 1.00 97.61 C +ATOM 6006 CB ARG E 146 -17.652 34.107 -0.930 1.00 97.61 C +ATOM 6007 O ARG E 146 -18.790 34.442 2.174 1.00 97.61 O +ATOM 6008 CG ARG E 146 -16.799 34.970 -1.846 1.00 97.61 C +ATOM 6009 CD ARG E 146 -17.346 34.996 -3.266 1.00 97.61 C +ATOM 6010 NE ARG E 146 -16.553 35.862 -4.134 1.00 97.61 N +ATOM 6011 NH1 ARG E 146 -17.601 35.213 -6.087 1.00 97.61 N +ATOM 6012 NH2 ARG E 146 -15.917 36.767 -6.147 1.00 97.61 N +ATOM 6013 CZ ARG E 146 -16.692 35.945 -5.454 1.00 97.61 C +ATOM 6014 N GLU E 147 -18.546 32.373 1.419 1.00 96.20 N +ATOM 6015 CA GLU E 147 -19.594 31.870 2.303 1.00 96.20 C +ATOM 6016 C GLU E 147 -19.200 32.027 3.770 1.00 96.20 C +ATOM 6017 CB GLU E 147 -19.900 30.402 1.995 1.00 96.20 C +ATOM 6018 O GLU E 147 -20.022 32.419 4.600 1.00 96.20 O +ATOM 6019 CG GLU E 147 -20.617 30.189 0.670 1.00 96.20 C +ATOM 6020 CD GLU E 147 -20.885 28.725 0.361 1.00 96.20 C +ATOM 6021 OE1 GLU E 147 -21.414 28.422 -0.732 1.00 96.20 O +ATOM 6022 OE2 GLU E 147 -20.563 27.874 1.220 1.00 96.20 O +ATOM 6023 N ASP E 148 -17.995 31.766 4.050 1.00 95.82 N +ATOM 6024 CA ASP E 148 -17.503 31.932 5.415 1.00 95.82 C +ATOM 6025 C ASP E 148 -17.573 33.394 5.850 1.00 95.82 C +ATOM 6026 CB ASP E 148 -16.068 31.415 5.535 1.00 95.82 C +ATOM 6027 O ASP E 148 -17.983 33.694 6.973 1.00 95.82 O +ATOM 6028 CG ASP E 148 -15.977 29.900 5.484 1.00 95.82 C +ATOM 6029 OD1 ASP E 148 -17.025 29.223 5.557 1.00 95.82 O +ATOM 6030 OD2 ASP E 148 -14.846 29.379 5.374 1.00 95.82 O +ATOM 6031 N ALA E 149 -17.133 34.290 4.943 1.00 96.31 N +ATOM 6032 CA ALA E 149 -17.172 35.717 5.254 1.00 96.31 C +ATOM 6033 C ALA E 149 -18.600 36.179 5.529 1.00 96.31 C +ATOM 6034 CB ALA E 149 -16.564 36.527 4.112 1.00 96.31 C +ATOM 6035 O ALA E 149 -18.850 36.900 6.498 1.00 96.31 O +ATOM 6036 N ARG E 150 -19.494 35.697 4.735 1.00 96.58 N +ATOM 6037 CA ARG E 150 -20.895 36.049 4.936 1.00 96.58 C +ATOM 6038 C ARG E 150 -21.398 35.546 6.285 1.00 96.58 C +ATOM 6039 CB ARG E 150 -21.760 35.480 3.809 1.00 96.58 C +ATOM 6040 O ARG E 150 -22.077 36.275 7.012 1.00 96.58 O +ATOM 6041 CG ARG E 150 -21.624 36.225 2.492 1.00 96.58 C +ATOM 6042 CD ARG E 150 -22.470 35.593 1.395 1.00 96.58 C +ATOM 6043 NE ARG E 150 -22.173 36.167 0.086 1.00 96.58 N +ATOM 6044 NH1 ARG E 150 -23.026 34.389 -1.117 1.00 96.58 N +ATOM 6045 NH2 ARG E 150 -22.131 36.194 -2.210 1.00 96.58 N +ATOM 6046 CZ ARG E 150 -22.444 35.582 -1.077 1.00 96.58 C +ATOM 6047 N ALA E 151 -21.055 34.372 6.621 1.00 95.33 N +ATOM 6048 CA ALA E 151 -21.496 33.772 7.878 1.00 95.33 C +ATOM 6049 C ALA E 151 -20.894 34.501 9.075 1.00 95.33 C +ATOM 6050 CB ALA E 151 -21.125 32.291 7.919 1.00 95.33 C +ATOM 6051 O ALA E 151 -21.591 34.785 10.052 1.00 95.33 O +ATOM 6052 N ILE E 152 -19.624 34.797 9.045 1.00 96.02 N +ATOM 6053 CA ILE E 152 -18.934 35.480 10.134 1.00 96.02 C +ATOM 6054 C ILE E 152 -19.517 36.879 10.318 1.00 96.02 C +ATOM 6055 CB ILE E 152 -17.413 35.563 9.874 1.00 96.02 C +ATOM 6056 O ILE E 152 -19.758 37.315 11.446 1.00 96.02 O +ATOM 6057 CG1 ILE E 152 -16.778 34.171 9.971 1.00 96.02 C +ATOM 6058 CG2 ILE E 152 -16.750 36.537 10.852 1.00 96.02 C +ATOM 6059 CD1 ILE E 152 -15.349 34.105 9.450 1.00 96.02 C +ATOM 6060 N CYS E 153 -19.808 37.640 9.183 1.00 95.38 N +ATOM 6061 CA CYS E 153 -20.379 38.980 9.261 1.00 95.38 C +ATOM 6062 C CYS E 153 -21.793 38.939 9.826 1.00 95.38 C +ATOM 6063 CB CYS E 153 -20.390 39.639 7.882 1.00 95.38 C +ATOM 6064 O CYS E 153 -22.187 39.823 10.589 1.00 95.38 O +ATOM 6065 SG CYS E 153 -18.744 40.018 7.242 1.00 95.38 S +ATOM 6066 N ALA E 154 -22.515 37.923 9.526 1.00 96.41 N +ATOM 6067 CA ALA E 154 -23.863 37.765 10.065 1.00 96.41 C +ATOM 6068 C ALA E 154 -23.826 37.496 11.567 1.00 96.41 C +ATOM 6069 CB ALA E 154 -24.596 36.636 9.344 1.00 96.41 C +ATOM 6070 O ALA E 154 -24.651 38.021 12.319 1.00 96.41 O +ATOM 6071 N ALA E 155 -22.880 36.743 12.021 1.00 94.88 N +ATOM 6072 CA ALA E 155 -22.792 36.339 13.422 1.00 94.88 C +ATOM 6073 C ALA E 155 -22.163 37.440 14.271 1.00 94.88 C +ATOM 6074 CB ALA E 155 -21.991 35.046 13.554 1.00 94.88 C +ATOM 6075 O ALA E 155 -22.594 37.684 15.400 1.00 94.88 O +ATOM 6076 N LYS E 156 -21.150 38.129 13.742 1.00 95.42 N +ATOM 6077 CA LYS E 156 -20.365 39.041 14.568 1.00 95.42 C +ATOM 6078 C LYS E 156 -20.647 40.496 14.201 1.00 95.42 C +ATOM 6079 CB LYS E 156 -18.871 38.745 14.424 1.00 95.42 C +ATOM 6080 O LYS E 156 -20.206 41.413 14.896 1.00 95.42 O +ATOM 6081 CG LYS E 156 -18.465 37.360 14.907 1.00 95.42 C +ATOM 6082 CD LYS E 156 -16.970 37.282 15.187 1.00 95.42 C +ATOM 6083 CE LYS E 156 -16.581 35.932 15.775 1.00 95.42 C +ATOM 6084 NZ LYS E 156 -15.121 35.862 16.082 1.00 95.42 N +ATOM 6085 N GLY E 157 -21.355 40.742 13.140 1.00 94.89 N +ATOM 6086 CA GLY E 157 -21.684 42.084 12.687 1.00 94.89 C +ATOM 6087 C GLY E 157 -20.884 42.516 11.473 1.00 94.89 C +ATOM 6088 O GLY E 157 -19.713 42.156 11.334 1.00 94.89 O +ATOM 6089 N GLU E 158 -21.407 43.279 10.531 1.00 92.84 N +ATOM 6090 CA GLU E 158 -20.825 43.694 9.258 1.00 92.84 C +ATOM 6091 C GLU E 158 -19.623 44.610 9.473 1.00 92.84 C +ATOM 6092 CB GLU E 158 -21.873 44.396 8.391 1.00 92.84 C +ATOM 6093 O GLU E 158 -18.722 44.668 8.633 1.00 92.84 O +ATOM 6094 CG GLU E 158 -22.923 43.457 7.815 1.00 92.84 C +ATOM 6095 CD GLU E 158 -23.848 44.132 6.814 1.00 92.84 C +ATOM 6096 OE1 GLU E 158 -24.676 43.434 6.186 1.00 92.84 O +ATOM 6097 OE2 GLU E 158 -23.742 45.369 6.656 1.00 92.84 O +ATOM 6098 N THR E 159 -19.617 45.344 10.628 1.00 93.42 N +ATOM 6099 CA THR E 159 -18.531 46.290 10.859 1.00 93.42 C +ATOM 6100 C THR E 159 -17.508 45.711 11.832 1.00 93.42 C +ATOM 6101 CB THR E 159 -19.062 47.628 11.403 1.00 93.42 C +ATOM 6102 O THR E 159 -16.597 46.415 12.274 1.00 93.42 O +ATOM 6103 CG2 THR E 159 -20.019 48.284 10.413 1.00 93.42 C +ATOM 6104 OG1 THR E 159 -19.754 47.395 12.636 1.00 93.42 O +ATOM 6105 N SER E 160 -17.604 44.450 12.225 1.00 94.80 N +ATOM 6106 CA SER E 160 -16.694 43.813 13.171 1.00 94.80 C +ATOM 6107 C SER E 160 -15.333 43.549 12.536 1.00 94.80 C +ATOM 6108 CB SER E 160 -17.288 42.502 13.688 1.00 94.80 C +ATOM 6109 O SER E 160 -15.234 43.361 11.322 1.00 94.80 O +ATOM 6110 OG SER E 160 -17.204 41.488 12.701 1.00 94.80 O +ATOM 6111 N PRO E 161 -14.215 43.630 13.369 1.00 96.07 N +ATOM 6112 CA PRO E 161 -12.888 43.281 12.855 1.00 96.07 C +ATOM 6113 C PRO E 161 -12.831 41.867 12.282 1.00 96.07 C +ATOM 6114 CB PRO E 161 -11.988 43.410 14.086 1.00 96.07 C +ATOM 6115 O PRO E 161 -12.105 41.617 11.317 1.00 96.07 O +ATOM 6116 CG PRO E 161 -12.758 44.270 15.035 1.00 96.07 C +ATOM 6117 CD PRO E 161 -14.220 44.141 14.717 1.00 96.07 C +ATOM 6118 N ASP E 162 -13.555 40.993 12.805 1.00 95.16 N +ATOM 6119 CA ASP E 162 -13.581 39.612 12.333 1.00 95.16 C +ATOM 6120 C ASP E 162 -14.170 39.524 10.927 1.00 95.16 C +ATOM 6121 CB ASP E 162 -14.380 38.731 13.294 1.00 95.16 C +ATOM 6122 O ASP E 162 -13.681 38.763 10.090 1.00 95.16 O +ATOM 6123 CG ASP E 162 -13.717 38.583 14.653 1.00 95.16 C +ATOM 6124 OD1 ASP E 162 -12.490 38.792 14.758 1.00 95.16 O +ATOM 6125 OD2 ASP E 162 -14.429 38.251 15.625 1.00 95.16 O +ATOM 6126 N CYS E 163 -15.226 40.262 10.691 1.00 93.29 N +ATOM 6127 CA CYS E 163 -15.841 40.308 9.370 1.00 93.29 C +ATOM 6128 C CYS E 163 -14.869 40.860 8.334 1.00 93.29 C +ATOM 6129 CB CYS E 163 -17.109 41.162 9.398 1.00 93.29 C +ATOM 6130 O CYS E 163 -14.697 40.275 7.264 1.00 93.29 O +ATOM 6131 SG CYS E 163 -17.974 41.234 7.814 1.00 93.29 S +ATOM 6132 N ALA E 164 -14.187 41.959 8.712 1.00 95.60 N +ATOM 6133 CA ALA E 164 -13.214 42.562 7.804 1.00 95.60 C +ATOM 6134 C ALA E 164 -12.097 41.579 7.466 1.00 95.60 C +ATOM 6135 CB ALA E 164 -12.633 43.834 8.416 1.00 95.60 C +ATOM 6136 O ALA E 164 -11.697 41.460 6.305 1.00 95.60 O +ATOM 6137 N ALA E 165 -11.629 40.891 8.438 1.00 96.32 N +ATOM 6138 CA ALA E 165 -10.566 39.911 8.233 1.00 96.32 C +ATOM 6139 C ALA E 165 -11.022 38.794 7.298 1.00 96.32 C +ATOM 6140 CB ALA E 165 -10.112 39.330 9.570 1.00 96.32 C +ATOM 6141 O ALA E 165 -10.252 38.326 6.457 1.00 96.32 O +ATOM 6142 N ALA E 166 -12.234 38.328 7.432 1.00 95.95 N +ATOM 6143 CA ALA E 166 -12.777 37.265 6.590 1.00 95.95 C +ATOM 6144 C ALA E 166 -12.827 37.696 5.127 1.00 95.95 C +ATOM 6145 CB ALA E 166 -14.169 36.864 7.071 1.00 95.95 C +ATOM 6146 O ALA E 166 -12.480 36.921 4.233 1.00 95.95 O +ATOM 6147 N TRP E 167 -13.229 38.894 4.894 1.00 96.44 N +ATOM 6148 CA TRP E 167 -13.304 39.381 3.520 1.00 96.44 C +ATOM 6149 C TRP E 167 -11.910 39.630 2.954 1.00 96.44 C +ATOM 6150 CB TRP E 167 -14.134 40.666 3.450 1.00 96.44 C +ATOM 6151 O TRP E 167 -11.693 39.510 1.746 1.00 96.44 O +ATOM 6152 CG TRP E 167 -15.614 40.432 3.390 1.00 96.44 C +ATOM 6153 CD1 TRP E 167 -16.529 40.693 4.371 1.00 96.44 C +ATOM 6154 CD2 TRP E 167 -16.348 39.885 2.291 1.00 96.44 C +ATOM 6155 CE2 TRP E 167 -17.707 39.843 2.676 1.00 96.44 C +ATOM 6156 CE3 TRP E 167 -15.990 39.427 1.016 1.00 96.44 C +ATOM 6157 NE1 TRP E 167 -17.790 40.341 3.948 1.00 96.44 N +ATOM 6158 CH2 TRP E 167 -18.330 38.918 0.588 1.00 96.44 C +ATOM 6159 CZ2 TRP E 167 -18.708 39.360 1.829 1.00 96.44 C +ATOM 6160 CZ3 TRP E 167 -16.987 38.946 0.176 1.00 96.44 C +ATOM 6161 N ASP E 168 -11.000 39.946 3.813 1.00 96.50 N +ATOM 6162 CA ASP E 168 -9.615 40.068 3.370 1.00 96.50 C +ATOM 6163 C ASP E 168 -9.109 38.753 2.781 1.00 96.50 C +ATOM 6164 CB ASP E 168 -8.717 40.506 4.528 1.00 96.50 C +ATOM 6165 O ASP E 168 -8.370 38.752 1.794 1.00 96.50 O +ATOM 6166 CG ASP E 168 -8.889 41.970 4.891 1.00 96.50 C +ATOM 6167 OD1 ASP E 168 -9.539 42.716 4.127 1.00 96.50 O +ATOM 6168 OD2 ASP E 168 -8.367 42.383 5.949 1.00 96.50 O +ATOM 6169 N VAL E 169 -9.487 37.690 3.395 1.00 96.57 N +ATOM 6170 CA VAL E 169 -9.099 36.376 2.892 1.00 96.57 C +ATOM 6171 C VAL E 169 -9.662 36.173 1.487 1.00 96.57 C +ATOM 6172 CB VAL E 169 -9.582 35.245 3.827 1.00 96.57 C +ATOM 6173 O VAL E 169 -8.953 35.716 0.587 1.00 96.57 O +ATOM 6174 CG1 VAL E 169 -9.325 33.877 3.198 1.00 96.57 C +ATOM 6175 CG2 VAL E 169 -8.894 35.348 5.187 1.00 96.57 C +ATOM 6176 N VAL E 170 -10.883 36.510 1.260 1.00 96.65 N +ATOM 6177 CA VAL E 170 -11.519 36.403 -0.049 1.00 96.65 C +ATOM 6178 C VAL E 170 -10.746 37.236 -1.069 1.00 96.65 C +ATOM 6179 CB VAL E 170 -12.996 36.856 -0.001 1.00 96.65 C +ATOM 6180 O VAL E 170 -10.432 36.757 -2.161 1.00 96.65 O +ATOM 6181 CG1 VAL E 170 -13.599 36.880 -1.404 1.00 96.65 C +ATOM 6182 CG2 VAL E 170 -13.805 35.939 0.915 1.00 96.65 C +ATOM 6183 N GLU E 171 -10.424 38.441 -0.666 1.00 96.27 N +ATOM 6184 CA GLU E 171 -9.719 39.348 -1.566 1.00 96.27 C +ATOM 6185 C GLU E 171 -8.334 38.813 -1.915 1.00 96.27 C +ATOM 6186 CB GLU E 171 -9.603 40.742 -0.942 1.00 96.27 C +ATOM 6187 O GLU E 171 -7.895 38.913 -3.063 1.00 96.27 O +ATOM 6188 CG GLU E 171 -10.911 41.518 -0.922 1.00 96.27 C +ATOM 6189 CD GLU E 171 -10.772 42.913 -0.334 1.00 96.27 C +ATOM 6190 OE1 GLU E 171 -11.765 43.676 -0.339 1.00 96.27 O +ATOM 6191 OE2 GLU E 171 -9.661 43.247 0.134 1.00 96.27 O +ATOM 6192 N GLU E 172 -7.752 38.254 -0.963 1.00 95.47 N +ATOM 6193 CA GLU E 172 -6.433 37.679 -1.210 1.00 95.47 C +ATOM 6194 C GLU E 172 -6.513 36.519 -2.199 1.00 95.47 C +ATOM 6195 CB GLU E 172 -5.797 37.209 0.101 1.00 95.47 C +ATOM 6196 O GLU E 172 -5.703 36.429 -3.124 1.00 95.47 O +ATOM 6197 CG GLU E 172 -4.352 36.755 -0.044 1.00 95.47 C +ATOM 6198 CD GLU E 172 -3.710 36.365 1.278 1.00 95.47 C +ATOM 6199 OE1 GLU E 172 -2.526 35.958 1.280 1.00 95.47 O +ATOM 6200 OE2 GLU E 172 -4.396 36.468 2.319 1.00 95.47 O +ATOM 6201 N LEU E 173 -7.451 35.700 -2.033 1.00 95.33 N +ATOM 6202 CA LEU E 173 -7.640 34.566 -2.931 1.00 95.33 C +ATOM 6203 C LEU E 173 -8.008 35.039 -4.334 1.00 95.33 C +ATOM 6204 CB LEU E 173 -8.726 33.631 -2.394 1.00 95.33 C +ATOM 6205 O LEU E 173 -7.513 34.499 -5.326 1.00 95.33 O +ATOM 6206 CG LEU E 173 -8.355 32.794 -1.169 1.00 95.33 C +ATOM 6207 CD1 LEU E 173 -9.594 32.113 -0.597 1.00 95.33 C +ATOM 6208 CD2 LEU E 173 -7.290 31.763 -1.528 1.00 95.33 C +ATOM 6209 N GLN E 174 -8.862 35.998 -4.416 1.00 95.10 N +ATOM 6210 CA GLN E 174 -9.251 36.551 -5.709 1.00 95.10 C +ATOM 6211 C GLN E 174 -8.058 37.185 -6.418 1.00 95.10 C +ATOM 6212 CB GLN E 174 -10.369 37.582 -5.537 1.00 95.10 C +ATOM 6213 O GLN E 174 -7.920 37.068 -7.637 1.00 95.10 O +ATOM 6214 CG GLN E 174 -11.733 36.968 -5.254 1.00 95.10 C +ATOM 6215 CD GLN E 174 -12.808 38.012 -5.016 1.00 95.10 C +ATOM 6216 NE2 GLN E 174 -13.987 37.789 -5.586 1.00 95.10 N +ATOM 6217 OE1 GLN E 174 -12.581 39.009 -4.324 1.00 95.10 O +ATOM 6218 N ALA E 175 -7.248 37.832 -5.615 1.00 92.88 N +ATOM 6219 CA ALA E 175 -6.037 38.415 -6.185 1.00 92.88 C +ATOM 6220 C ALA E 175 -5.128 37.335 -6.765 1.00 92.88 C +ATOM 6221 CB ALA E 175 -5.289 39.226 -5.130 1.00 92.88 C +ATOM 6222 O ALA E 175 -4.593 37.490 -7.866 1.00 92.88 O +ATOM 6223 N GLU E 176 -5.041 36.315 -6.061 1.00 90.76 N +ATOM 6224 CA GLU E 176 -4.226 35.204 -6.542 1.00 90.76 C +ATOM 6225 C GLU E 176 -4.820 34.590 -7.806 1.00 90.76 C +ATOM 6226 CB GLU E 176 -4.078 34.135 -5.457 1.00 90.76 C +ATOM 6227 O GLU E 176 -4.094 34.282 -8.754 1.00 90.76 O +ATOM 6228 CG GLU E 176 -3.181 32.972 -5.856 1.00 90.76 C +ATOM 6229 CD GLU E 176 -2.397 32.391 -4.690 1.00 90.76 C +ATOM 6230 OE1 GLU E 176 -1.585 31.463 -4.907 1.00 90.76 O +ATOM 6231 OE2 GLU E 176 -2.598 32.866 -3.550 1.00 90.76 O +ATOM 6232 N ALA E 177 -6.069 34.408 -7.830 1.00 90.02 N +ATOM 6233 CA ALA E 177 -6.746 33.865 -9.005 1.00 90.02 C +ATOM 6234 C ALA E 177 -6.542 34.764 -10.221 1.00 90.02 C +ATOM 6235 CB ALA E 177 -8.236 33.684 -8.724 1.00 90.02 C +ATOM 6236 O ALA E 177 -6.321 34.276 -11.331 1.00 90.02 O +ATOM 6237 N SER E 178 -6.607 36.061 -9.986 1.00 88.11 N +ATOM 6238 CA SER E 178 -6.402 37.017 -11.069 1.00 88.11 C +ATOM 6239 C SER E 178 -4.966 36.970 -11.583 1.00 88.11 C +ATOM 6240 CB SER E 178 -6.739 38.434 -10.605 1.00 88.11 C +ATOM 6241 O SER E 178 -4.732 37.038 -12.791 1.00 88.11 O +ATOM 6242 OG SER E 178 -8.106 38.533 -10.243 1.00 88.11 O +ATOM 6243 N HIS E 179 -4.086 36.873 -10.618 1.00 85.80 N +ATOM 6244 CA HIS E 179 -2.684 36.759 -11.001 1.00 85.80 C +ATOM 6245 C HIS E 179 -2.446 35.519 -11.857 1.00 85.80 C +ATOM 6246 CB HIS E 179 -1.790 36.719 -9.760 1.00 85.80 C +ATOM 6247 O HIS E 179 -1.726 35.578 -12.856 1.00 85.80 O +ATOM 6248 CG HIS E 179 -0.329 36.684 -10.074 1.00 85.80 C +ATOM 6249 CD2 HIS E 179 0.560 37.683 -10.284 1.00 85.80 C +ATOM 6250 ND1 HIS E 179 0.375 35.507 -10.208 1.00 85.80 N +ATOM 6251 CE1 HIS E 179 1.638 35.785 -10.486 1.00 85.80 C +ATOM 6252 NE2 HIS E 179 1.777 37.099 -10.537 1.00 85.80 N +ATOM 6253 N GLN E 180 -3.080 34.496 -11.526 1.00 81.12 N +ATOM 6254 CA GLN E 180 -2.947 33.253 -12.278 1.00 81.12 C +ATOM 6255 C GLN E 180 -3.516 33.397 -13.686 1.00 81.12 C +ATOM 6256 CB GLN E 180 -3.642 32.104 -11.545 1.00 81.12 C +ATOM 6257 O GLN E 180 -2.934 32.899 -14.651 1.00 81.12 O +ATOM 6258 CG GLN E 180 -2.889 31.613 -10.317 1.00 81.12 C +ATOM 6259 CD GLN E 180 -3.455 30.320 -9.760 1.00 81.12 C +ATOM 6260 NE2 GLN E 180 -3.466 30.198 -8.437 1.00 81.12 N +ATOM 6261 OE1 GLN E 180 -3.880 29.438 -10.513 1.00 81.12 O +ATOM 6262 N ARG E 181 -4.608 34.113 -13.772 1.00 76.93 N +ATOM 6263 CA ARG E 181 -5.237 34.335 -15.070 1.00 76.93 C +ATOM 6264 C ARG E 181 -4.401 35.277 -15.930 1.00 76.93 C +ATOM 6265 CB ARG E 181 -6.648 34.900 -14.894 1.00 76.93 C +ATOM 6266 O ARG E 181 -4.298 35.090 -17.144 1.00 76.93 O +ATOM 6267 CG ARG E 181 -7.654 33.892 -14.363 1.00 76.93 C +ATOM 6268 CD ARG E 181 -9.018 34.526 -14.126 1.00 76.93 C +ATOM 6269 NE ARG E 181 -9.887 33.657 -13.338 1.00 76.93 N +ATOM 6270 NH1 ARG E 181 -11.197 35.371 -12.511 1.00 76.93 N +ATOM 6271 NH2 ARG E 181 -11.628 33.200 -11.912 1.00 76.93 N +ATOM 6272 CZ ARG E 181 -10.902 34.078 -12.589 1.00 76.93 C +ATOM 6273 N ALA E 182 -3.801 36.269 -15.316 1.00 69.39 N +ATOM 6274 CA ALA E 182 -2.988 37.252 -16.028 1.00 69.39 C +ATOM 6275 C ALA E 182 -1.721 36.613 -16.589 1.00 69.39 C +ATOM 6276 CB ALA E 182 -2.631 38.415 -15.107 1.00 69.39 C +ATOM 6277 O ALA E 182 -1.318 36.905 -17.717 1.00 69.39 O +ATOM 6278 N LYS E 183 -1.044 35.860 -15.810 1.00 64.42 N +ATOM 6279 CA LYS E 183 0.161 35.176 -16.269 1.00 64.42 C +ATOM 6280 C LYS E 183 -0.142 34.270 -17.460 1.00 64.42 C +ATOM 6281 CB LYS E 183 0.780 34.359 -15.134 1.00 64.42 C +ATOM 6282 O LYS E 183 0.690 34.115 -18.356 1.00 64.42 O +ATOM 6283 CG LYS E 183 1.674 35.168 -14.206 1.00 64.42 C +ATOM 6284 CD LYS E 183 2.422 34.272 -13.228 1.00 64.42 C +ATOM 6285 CE LYS E 183 3.337 35.078 -12.316 1.00 64.42 C +ATOM 6286 NZ LYS E 183 4.042 34.207 -11.329 1.00 64.42 N +ATOM 6287 N LYS E 184 -1.313 33.800 -17.557 1.00 59.54 N +ATOM 6288 CA LYS E 184 -1.720 32.935 -18.661 1.00 59.54 C +ATOM 6289 C LYS E 184 -1.981 33.746 -19.928 1.00 59.54 C +ATOM 6290 CB LYS E 184 -2.969 32.136 -18.285 1.00 59.54 C +ATOM 6291 O LYS E 184 -1.676 33.295 -21.034 1.00 59.54 O +ATOM 6292 CG LYS E 184 -2.683 30.903 -17.440 1.00 59.54 C +ATOM 6293 CD LYS E 184 -3.948 30.095 -17.184 1.00 59.54 C +ATOM 6294 CE LYS E 184 -3.674 28.892 -16.292 1.00 59.54 C +ATOM 6295 NZ LYS E 184 -4.926 28.146 -15.967 1.00 59.54 N +ATOM 6296 N GLN E 185 -2.604 34.973 -19.774 1.00 55.44 N +ATOM 6297 CA GLN E 185 -2.888 35.850 -20.905 1.00 55.44 C +ATOM 6298 C GLN E 185 -1.604 36.450 -21.471 1.00 55.44 C +ATOM 6299 CB GLN E 185 -3.851 36.964 -20.492 1.00 55.44 C +ATOM 6300 O GLN E 185 -1.483 36.639 -22.683 1.00 55.44 O +ATOM 6301 CG GLN E 185 -5.317 36.555 -20.528 1.00 55.44 C +ATOM 6302 CD GLN E 185 -6.246 37.655 -20.050 1.00 55.44 C +ATOM 6303 NE2 GLN E 185 -7.549 37.405 -20.124 1.00 55.44 N +ATOM 6304 OE1 GLN E 185 -5.796 38.721 -19.618 1.00 55.44 O +ATOM 6305 N GLY E 186 -0.576 36.744 -20.663 1.00 49.82 N +ATOM 6306 CA GLY E 186 0.671 37.333 -21.123 1.00 49.82 C +ATOM 6307 C GLY E 186 1.514 36.378 -21.947 1.00 49.82 C +ATOM 6308 O GLY E 186 2.170 36.790 -22.906 1.00 49.82 O +ATOM 6309 N SER E 187 1.582 35.122 -21.637 1.00 50.58 N +ATOM 6310 CA SER E 187 2.313 34.148 -22.441 1.00 50.58 C +ATOM 6311 C SER E 187 1.671 33.970 -23.812 1.00 50.58 C +ATOM 6312 CB SER E 187 2.380 32.800 -21.721 1.00 50.58 C +ATOM 6313 O SER E 187 2.369 33.889 -24.825 1.00 50.58 O +ATOM 6314 OG SER E 187 1.546 31.848 -22.358 1.00 50.58 O +ATOM 6315 N ASN E 188 0.368 33.994 -23.928 1.00 48.21 N +ATOM 6316 CA ASN E 188 -0.325 33.932 -25.210 1.00 48.21 C +ATOM 6317 C ASN E 188 -0.088 35.192 -26.037 1.00 48.21 C +ATOM 6318 CB ASN E 188 -1.824 33.708 -25.000 1.00 48.21 C +ATOM 6319 O ASN E 188 0.072 35.118 -27.257 1.00 48.21 O +ATOM 6320 CG ASN E 188 -2.273 32.323 -25.422 1.00 48.21 C +ATOM 6321 ND2 ASN E 188 -3.530 31.998 -25.148 1.00 48.21 N +ATOM 6322 OD1 ASN E 188 -1.495 31.551 -25.990 1.00 48.21 O +ATOM 6323 N SER E 189 -0.022 36.338 -25.404 1.00 50.20 N +ATOM 6324 CA SER E 189 0.279 37.572 -26.122 1.00 50.20 C +ATOM 6325 C SER E 189 1.702 37.559 -26.670 1.00 50.20 C +ATOM 6326 CB SER E 189 0.087 38.784 -25.209 1.00 50.20 C +ATOM 6327 O SER E 189 1.944 38.006 -27.794 1.00 50.20 O +ATOM 6328 OG SER E 189 1.292 39.520 -25.090 1.00 50.20 O +ATOM 6329 N PHE E 190 2.644 37.021 -25.978 1.00 50.31 N +ATOM 6330 CA PHE E 190 4.011 36.912 -26.474 1.00 50.31 C +ATOM 6331 C PHE E 190 4.100 35.877 -27.589 1.00 50.31 C +ATOM 6332 CB PHE E 190 4.969 36.543 -25.337 1.00 50.31 C +ATOM 6333 O PHE E 190 4.739 36.117 -28.616 1.00 50.31 O +ATOM 6334 CG PHE E 190 6.415 36.501 -25.752 1.00 50.31 C +ATOM 6335 CD1 PHE E 190 7.070 35.286 -25.915 1.00 50.31 C +ATOM 6336 CD2 PHE E 190 7.119 37.676 -25.978 1.00 50.31 C +ATOM 6337 CE1 PHE E 190 8.408 35.243 -26.299 1.00 50.31 C +ATOM 6338 CE2 PHE E 190 8.457 37.641 -26.362 1.00 50.31 C +ATOM 6339 CZ PHE E 190 9.100 36.424 -26.521 1.00 50.31 C +ATOM 6340 N GLN E 191 3.447 34.726 -27.483 1.00 51.30 N +ATOM 6341 CA GLN E 191 3.384 33.737 -28.554 1.00 51.30 C +ATOM 6342 C GLN E 191 2.638 34.285 -29.767 1.00 51.30 C +ATOM 6343 CB GLN E 191 2.715 32.453 -28.061 1.00 51.30 C +ATOM 6344 O GLN E 191 3.083 34.118 -30.904 1.00 51.30 O +ATOM 6345 CG GLN E 191 3.204 31.195 -28.765 1.00 51.30 C +ATOM 6346 CD GLN E 191 2.928 29.932 -27.970 1.00 51.30 C +ATOM 6347 NE2 GLN E 191 3.425 28.802 -28.460 1.00 51.30 N +ATOM 6348 OE1 GLN E 191 2.275 29.973 -26.923 1.00 51.30 O +ATOM 6349 N ALA E 192 1.500 34.924 -29.525 1.00 54.91 N +ATOM 6350 CA ALA E 192 0.793 35.599 -30.611 1.00 54.91 C +ATOM 6351 C ALA E 192 1.649 36.709 -31.215 1.00 54.91 C +ATOM 6352 CB ALA E 192 -0.533 36.166 -30.111 1.00 54.91 C +ATOM 6353 O ALA E 192 1.682 36.881 -32.436 1.00 54.91 O +ATOM 6354 N TYR E 193 2.307 37.460 -30.333 1.00 52.80 N +ATOM 6355 CA TYR E 193 3.257 38.464 -30.799 1.00 52.80 C +ATOM 6356 C TYR E 193 4.390 37.818 -31.589 1.00 52.80 C +ATOM 6357 CB TYR E 193 3.829 39.252 -29.617 1.00 52.80 C +ATOM 6358 O TYR E 193 4.737 38.280 -32.678 1.00 52.80 O +ATOM 6359 CG TYR E 193 4.867 40.274 -30.014 1.00 52.80 C +ATOM 6360 CD1 TYR E 193 6.225 40.023 -29.832 1.00 52.80 C +ATOM 6361 CD2 TYR E 193 4.492 41.492 -30.571 1.00 52.80 C +ATOM 6362 CE1 TYR E 193 7.185 40.962 -30.194 1.00 52.80 C +ATOM 6363 CE2 TYR E 193 5.444 42.438 -30.938 1.00 52.80 C +ATOM 6364 OH TYR E 193 7.732 43.097 -31.107 1.00 52.80 O +ATOM 6365 CZ TYR E 193 6.786 42.164 -30.746 1.00 52.80 C +ATOM 6366 N CYS E 194 4.906 36.739 -31.075 1.00 57.65 N +ATOM 6367 CA CYS E 194 5.988 36.069 -31.789 1.00 57.65 C +ATOM 6368 C CYS E 194 5.467 35.372 -33.039 1.00 57.65 C +ATOM 6369 CB CYS E 194 6.683 35.056 -30.880 1.00 57.65 C +ATOM 6370 O CYS E 194 6.182 35.260 -34.037 1.00 57.65 O +ATOM 6371 SG CYS E 194 7.822 35.802 -29.694 1.00 57.65 S +ATOM 6372 N GLU E 195 4.254 34.791 -33.087 1.00 59.97 N +ATOM 6373 CA GLU E 195 3.612 34.271 -34.290 1.00 59.97 C +ATOM 6374 C GLU E 195 3.341 35.386 -35.297 1.00 59.97 C +ATOM 6375 CB GLU E 195 2.306 33.554 -33.937 1.00 59.97 C +ATOM 6376 O GLU E 195 3.502 35.193 -36.504 1.00 59.97 O +ATOM 6377 CG GLU E 195 2.497 32.109 -33.500 1.00 59.97 C +ATOM 6378 CD GLU E 195 1.202 31.433 -33.078 1.00 59.97 C +ATOM 6379 OE1 GLU E 195 1.230 30.230 -32.734 1.00 59.97 O +ATOM 6380 OE2 GLU E 195 0.151 32.112 -33.094 1.00 59.97 O +ATOM 6381 N ALA E 196 2.968 36.664 -34.843 1.00 64.99 N +ATOM 6382 CA ALA E 196 2.706 37.822 -35.693 1.00 64.99 C +ATOM 6383 C ALA E 196 4.005 38.519 -36.085 1.00 64.99 C +ATOM 6384 CB ALA E 196 1.773 38.802 -34.984 1.00 64.99 C +ATOM 6385 O ALA E 196 4.079 39.164 -37.134 1.00 64.99 O +ATOM 6386 N ASN E 197 4.950 38.540 -35.097 1.00 52.80 N +ATOM 6387 CA ASN E 197 6.243 39.153 -35.378 1.00 52.80 C +ATOM 6388 C ASN E 197 7.387 38.160 -35.193 1.00 52.80 C +ATOM 6389 CB ASN E 197 6.458 40.382 -34.492 1.00 52.80 C +ATOM 6390 O ASN E 197 8.153 38.261 -34.233 1.00 52.80 O +ATOM 6391 CG ASN E 197 5.567 41.545 -34.881 1.00 52.80 C +ATOM 6392 ND2 ASN E 197 5.003 42.218 -33.885 1.00 52.80 N +ATOM 6393 OD1 ASN E 197 5.386 41.836 -36.066 1.00 52.80 O +ATOM 6394 N PRO E 198 7.441 37.092 -36.040 1.00 57.44 N +ATOM 6395 CA PRO E 198 8.403 35.997 -35.902 1.00 57.44 C +ATOM 6396 C PRO E 198 9.851 36.483 -35.879 1.00 57.44 C +ATOM 6397 CB PRO E 198 8.136 35.135 -37.138 1.00 57.44 C +ATOM 6398 O PRO E 198 10.714 35.835 -35.281 1.00 57.44 O +ATOM 6399 CG PRO E 198 7.184 35.937 -37.965 1.00 57.44 C +ATOM 6400 CD PRO E 198 6.790 37.160 -37.187 1.00 57.44 C +ATOM 6401 N ASP E 199 10.090 37.592 -36.534 1.00 53.62 N +ATOM 6402 CA ASP E 199 11.439 38.127 -36.692 1.00 53.62 C +ATOM 6403 C ASP E 199 11.820 39.014 -35.510 1.00 53.62 C +ATOM 6404 CB ASP E 199 11.553 38.915 -37.999 1.00 53.62 C +ATOM 6405 O ASP E 199 12.912 39.586 -35.483 1.00 53.62 O +ATOM 6406 CG ASP E 199 11.424 38.039 -39.233 1.00 53.62 C +ATOM 6407 OD1 ASP E 199 11.833 36.858 -39.189 1.00 53.62 O +ATOM 6408 OD2 ASP E 199 10.911 38.534 -40.260 1.00 53.62 O +ATOM 6409 N ALA E 200 10.892 39.170 -34.603 1.00 54.21 N +ATOM 6410 CA ALA E 200 11.192 40.045 -33.473 1.00 54.21 C +ATOM 6411 C ALA E 200 12.228 39.412 -32.549 1.00 54.21 C +ATOM 6412 CB ALA E 200 9.918 40.368 -32.696 1.00 54.21 C +ATOM 6413 O ALA E 200 12.219 38.197 -32.336 1.00 54.21 O +ATOM 6414 N LEU E 201 13.417 40.089 -32.075 1.00 53.85 N +ATOM 6415 CA LEU E 201 14.573 39.652 -31.299 1.00 53.85 C +ATOM 6416 C LEU E 201 14.135 38.884 -30.057 1.00 53.85 C +ATOM 6417 CB LEU E 201 15.432 40.853 -30.895 1.00 53.85 C +ATOM 6418 O LEU E 201 14.739 37.868 -29.705 1.00 53.85 O +ATOM 6419 CG LEU E 201 16.724 41.060 -31.688 1.00 53.85 C +ATOM 6420 CD1 LEU E 201 16.964 42.547 -31.930 1.00 53.85 C +ATOM 6421 CD2 LEU E 201 17.906 40.434 -30.956 1.00 53.85 C +ATOM 6422 N GLU E 202 13.144 39.346 -29.499 1.00 56.98 N +ATOM 6423 CA GLU E 202 12.666 38.796 -28.234 1.00 56.98 C +ATOM 6424 C GLU E 202 12.114 37.385 -28.419 1.00 56.98 C +ATOM 6425 CB GLU E 202 11.596 39.704 -27.622 1.00 56.98 C +ATOM 6426 O GLU E 202 12.154 36.571 -27.494 1.00 56.98 O +ATOM 6427 CG GLU E 202 12.147 40.998 -27.041 1.00 56.98 C +ATOM 6428 CD GLU E 202 11.179 42.165 -27.153 1.00 56.98 C +ATOM 6429 OE1 GLU E 202 11.483 43.258 -26.623 1.00 56.98 O +ATOM 6430 OE2 GLU E 202 10.108 41.985 -27.773 1.00 56.98 O +ATOM 6431 N CYS E 203 11.575 37.162 -29.670 1.00 49.95 N +ATOM 6432 CA CYS E 203 10.983 35.870 -30.002 1.00 49.95 C +ATOM 6433 C CYS E 203 12.054 34.872 -30.427 1.00 49.95 C +ATOM 6434 CB CYS E 203 9.947 36.026 -31.115 1.00 49.95 C +ATOM 6435 O CYS E 203 11.842 33.661 -30.356 1.00 49.95 O +ATOM 6436 SG CYS E 203 8.505 37.002 -30.635 1.00 49.95 S +ATOM 6437 N ARG E 204 13.217 35.167 -30.946 1.00 45.98 N +ATOM 6438 CA ARG E 204 14.314 34.329 -31.420 1.00 45.98 C +ATOM 6439 C ARG E 204 15.084 33.723 -30.251 1.00 45.98 C +ATOM 6440 CB ARG E 204 15.262 35.135 -32.310 1.00 45.98 C +ATOM 6441 O ARG E 204 15.799 32.732 -30.419 1.00 45.98 O +ATOM 6442 CG ARG E 204 14.877 35.133 -33.781 1.00 45.98 C +ATOM 6443 CD ARG E 204 15.950 35.779 -34.646 1.00 45.98 C +ATOM 6444 NE ARG E 204 15.606 35.722 -36.064 1.00 45.98 N +ATOM 6445 NH1 ARG E 204 17.349 37.073 -36.753 1.00 45.98 N +ATOM 6446 NH2 ARG E 204 15.878 36.219 -38.290 1.00 45.98 N +ATOM 6447 CZ ARG E 204 16.278 36.338 -37.032 1.00 45.98 C +ATOM 6448 N ILE E 205 15.087 34.319 -29.047 1.00 41.88 N +ATOM 6449 CA ILE E 205 15.889 33.798 -27.946 1.00 41.88 C +ATOM 6450 C ILE E 205 15.304 32.471 -27.465 1.00 41.88 C +ATOM 6451 CB ILE E 205 15.967 34.805 -26.777 1.00 41.88 C +ATOM 6452 O ILE E 205 16.039 31.590 -27.013 1.00 41.88 O +ATOM 6453 CG1 ILE E 205 16.667 36.092 -27.226 1.00 41.88 C +ATOM 6454 CG2 ILE E 205 16.683 34.182 -25.575 1.00 41.88 C +ATOM 6455 CD1 ILE E 205 16.656 37.200 -26.182 1.00 41.88 C +ATOM 6456 N TYR E 206 14.038 32.326 -27.686 1.00 36.38 N +ATOM 6457 CA TYR E 206 13.455 31.107 -27.137 1.00 36.38 C +ATOM 6458 C TYR E 206 13.535 29.963 -28.141 1.00 36.38 C +ATOM 6459 CB TYR E 206 11.998 31.343 -26.730 1.00 36.38 C +ATOM 6460 O TYR E 206 13.109 28.843 -27.851 1.00 36.38 O +ATOM 6461 CG TYR E 206 11.815 31.608 -25.255 1.00 36.38 C +ATOM 6462 CD1 TYR E 206 11.577 30.565 -24.364 1.00 36.38 C +ATOM 6463 CD2 TYR E 206 11.878 32.903 -24.751 1.00 36.38 C +ATOM 6464 CE1 TYR E 206 11.405 30.804 -23.005 1.00 36.38 C +ATOM 6465 CE2 TYR E 206 11.708 33.154 -23.393 1.00 36.38 C +ATOM 6466 OH TYR E 206 11.304 32.344 -21.185 1.00 36.38 O +ATOM 6467 CZ TYR E 206 11.473 32.100 -22.529 1.00 36.38 C +ATOM 6468 N ASP E 207 13.809 30.189 -29.493 1.00 33.41 N +ATOM 6469 CA ASP E 207 13.889 29.095 -30.457 1.00 33.41 C +ATOM 6470 C ASP E 207 15.224 28.363 -30.347 1.00 33.41 C +ATOM 6471 CB ASP E 207 13.692 29.619 -31.881 1.00 33.41 C +ATOM 6472 O ASP E 207 15.434 27.341 -31.004 1.00 33.41 O +ATOM 6473 CG ASP E 207 12.230 29.784 -32.255 1.00 33.41 C +ATOM 6474 OD1 ASP E 207 11.353 29.256 -31.537 1.00 33.41 O +ATOM 6475 OD2 ASP E 207 11.952 30.445 -33.279 1.00 33.41 O +ATOM 6476 N ASP E 208 16.318 28.997 -29.740 1.00 27.03 N +ATOM 6477 CA ASP E 208 17.492 28.130 -29.725 1.00 27.03 C +ATOM 6478 C ASP E 208 17.413 27.119 -28.583 1.00 27.03 C +ATOM 6479 CB ASP E 208 18.772 28.960 -29.605 1.00 27.03 C +ATOM 6480 O ASP E 208 17.053 27.472 -27.458 1.00 27.03 O +ATOM 6481 CG ASP E 208 19.219 29.555 -30.929 1.00 27.03 C +ATOM 6482 OD1 ASP E 208 18.657 29.187 -31.984 1.00 27.03 O +ATOM 6483 OD2 ASP E 208 20.144 30.396 -30.918 1.00 27.03 O +TER 6484 ASP E 208 +ATOM 6485 N GLY F 1 -19.945 -9.516 -33.708 1.00 37.95 N +ATOM 6486 CA GLY F 1 -19.318 -10.205 -32.591 1.00 37.95 C +ATOM 6487 C GLY F 1 -20.208 -10.287 -31.366 1.00 37.95 C +ATOM 6488 O GLY F 1 -21.175 -9.532 -31.243 1.00 37.95 O +ATOM 6489 N PRO F 2 -20.209 -11.386 -30.604 1.00 50.65 N +ATOM 6490 CA PRO F 2 -21.183 -11.583 -29.528 1.00 50.65 C +ATOM 6491 C PRO F 2 -21.300 -10.369 -28.609 1.00 50.65 C +ATOM 6492 CB PRO F 2 -20.629 -12.792 -28.768 1.00 50.65 C +ATOM 6493 O PRO F 2 -20.308 -9.678 -28.363 1.00 50.65 O +ATOM 6494 CG PRO F 2 -19.263 -13.006 -29.335 1.00 50.65 C +ATOM 6495 CD PRO F 2 -19.071 -12.062 -30.487 1.00 50.65 C +ATOM 6496 N MET F 3 -22.522 -9.742 -28.467 1.00 59.32 N +ATOM 6497 CA MET F 3 -22.859 -8.528 -27.729 1.00 59.32 C +ATOM 6498 C MET F 3 -22.529 -8.683 -26.248 1.00 59.32 C +ATOM 6499 CB MET F 3 -24.340 -8.186 -27.902 1.00 59.32 C +ATOM 6500 O MET F 3 -23.085 -9.550 -25.571 1.00 59.32 O +ATOM 6501 CG MET F 3 -24.605 -7.134 -28.966 1.00 59.32 C +ATOM 6502 SD MET F 3 -26.357 -6.589 -28.994 1.00 59.32 S +ATOM 6503 CE MET F 3 -27.180 -8.130 -28.504 1.00 59.32 C +ATOM 6504 N VAL F 4 -21.345 -8.385 -25.698 1.00 78.42 N +ATOM 6505 CA VAL F 4 -20.917 -8.386 -24.303 1.00 78.42 C +ATOM 6506 C VAL F 4 -21.634 -7.273 -23.542 1.00 78.42 C +ATOM 6507 CB VAL F 4 -19.386 -8.216 -24.179 1.00 78.42 C +ATOM 6508 O VAL F 4 -21.925 -6.215 -24.104 1.00 78.42 O +ATOM 6509 CG1 VAL F 4 -18.937 -8.409 -22.732 1.00 78.42 C +ATOM 6510 CG2 VAL F 4 -18.665 -9.197 -25.101 1.00 78.42 C +ATOM 6511 N LEU F 5 -22.285 -7.713 -22.358 1.00 91.39 N +ATOM 6512 CA LEU F 5 -22.932 -6.736 -21.490 1.00 91.39 C +ATOM 6513 C LEU F 5 -21.993 -5.574 -21.184 1.00 91.39 C +ATOM 6514 CB LEU F 5 -23.388 -7.396 -20.186 1.00 91.39 C +ATOM 6515 O LEU F 5 -20.835 -5.786 -20.817 1.00 91.39 O +ATOM 6516 CG LEU F 5 -24.463 -6.654 -19.390 1.00 91.39 C +ATOM 6517 CD1 LEU F 5 -25.806 -6.738 -20.108 1.00 91.39 C +ATOM 6518 CD2 LEU F 5 -24.570 -7.221 -17.978 1.00 91.39 C +ATOM 6519 N GLN F 6 -22.547 -4.381 -21.431 1.00 95.24 N +ATOM 6520 CA GLN F 6 -21.689 -3.203 -21.349 1.00 95.24 C +ATOM 6521 C GLN F 6 -22.011 -2.373 -20.110 1.00 95.24 C +ATOM 6522 CB GLN F 6 -21.834 -2.345 -22.608 1.00 95.24 C +ATOM 6523 O GLN F 6 -23.068 -2.545 -19.499 1.00 95.24 O +ATOM 6524 CG GLN F 6 -21.460 -3.071 -23.893 1.00 95.24 C +ATOM 6525 CD GLN F 6 -21.694 -2.228 -25.132 1.00 95.24 C +ATOM 6526 NE2 GLN F 6 -21.127 -2.655 -26.256 1.00 95.24 N +ATOM 6527 OE1 GLN F 6 -22.379 -1.202 -25.081 1.00 95.24 O +ATOM 6528 N ALA F 7 -21.178 -1.444 -19.799 1.00 96.36 N +ATOM 6529 CA ALA F 7 -21.298 -0.598 -18.615 1.00 96.36 C +ATOM 6530 C ALA F 7 -22.588 0.216 -18.650 1.00 96.36 C +ATOM 6531 CB ALA F 7 -20.090 0.330 -18.499 1.00 96.36 C +ATOM 6532 O ALA F 7 -23.302 0.304 -17.648 1.00 96.36 O +ATOM 6533 N GLN F 8 -22.906 0.769 -19.795 1.00 96.43 N +ATOM 6534 CA GLN F 8 -24.073 1.638 -19.907 1.00 96.43 C +ATOM 6535 C GLN F 8 -25.362 0.866 -19.642 1.00 96.43 C +ATOM 6536 CB GLN F 8 -24.126 2.289 -21.290 1.00 96.43 C +ATOM 6537 O GLN F 8 -26.384 1.457 -19.285 1.00 96.43 O +ATOM 6538 CG GLN F 8 -24.309 1.297 -22.431 1.00 96.43 C +ATOM 6539 CD GLN F 8 -24.311 1.963 -23.794 1.00 96.43 C +ATOM 6540 NE2 GLN F 8 -25.064 1.396 -24.730 1.00 96.43 N +ATOM 6541 OE1 GLN F 8 -23.643 2.980 -24.003 1.00 96.43 O +ATOM 6542 N GLU F 9 -25.321 -0.392 -19.747 1.00 96.72 N +ATOM 6543 CA GLU F 9 -26.517 -1.214 -19.592 1.00 96.72 C +ATOM 6544 C GLU F 9 -26.792 -1.518 -18.122 1.00 96.72 C +ATOM 6545 CB GLU F 9 -26.379 -2.519 -20.382 1.00 96.72 C +ATOM 6546 O GLU F 9 -27.907 -1.899 -17.760 1.00 96.72 O +ATOM 6547 CG GLU F 9 -26.295 -2.320 -21.888 1.00 96.72 C +ATOM 6548 CD GLU F 9 -25.989 -3.602 -22.646 1.00 96.72 C +ATOM 6549 OE1 GLU F 9 -26.936 -4.256 -23.139 1.00 96.72 O +ATOM 6550 OE2 GLU F 9 -24.793 -3.956 -22.747 1.00 96.72 O +ATOM 6551 N ILE F 10 -25.820 -1.367 -17.306 1.00 97.12 N +ATOM 6552 CA ILE F 10 -26.053 -1.754 -15.918 1.00 97.12 C +ATOM 6553 C ILE F 10 -25.743 -0.577 -14.996 1.00 97.12 C +ATOM 6554 CB ILE F 10 -25.203 -2.982 -15.524 1.00 97.12 C +ATOM 6555 O ILE F 10 -25.871 -0.686 -13.775 1.00 97.12 O +ATOM 6556 CG1 ILE F 10 -23.709 -2.654 -15.628 1.00 97.12 C +ATOM 6557 CG2 ILE F 10 -25.560 -4.189 -16.396 1.00 97.12 C +ATOM 6558 CD1 ILE F 10 -22.811 -3.596 -14.837 1.00 97.12 C +ATOM 6559 N MET F 11 -25.305 0.522 -15.511 1.00 97.20 N +ATOM 6560 CA MET F 11 -24.962 1.693 -14.709 1.00 97.20 C +ATOM 6561 C MET F 11 -26.205 2.285 -14.052 1.00 97.20 C +ATOM 6562 CB MET F 11 -24.272 2.752 -15.571 1.00 97.20 C +ATOM 6563 O MET F 11 -27.329 1.986 -14.458 1.00 97.20 O +ATOM 6564 CG MET F 11 -25.190 3.407 -16.590 1.00 97.20 C +ATOM 6565 SD MET F 11 -24.324 4.660 -17.613 1.00 97.20 S +ATOM 6566 CE MET F 11 -25.698 5.230 -18.652 1.00 97.20 C +ATOM 6567 N THR F 12 -25.983 3.035 -12.978 1.00 93.92 N +ATOM 6568 CA THR F 12 -27.040 3.856 -12.397 1.00 93.92 C +ATOM 6569 C THR F 12 -27.153 5.189 -13.130 1.00 93.92 C +ATOM 6570 CB THR F 12 -26.790 4.110 -10.899 1.00 93.92 C +ATOM 6571 O THR F 12 -26.155 5.890 -13.312 1.00 93.92 O +ATOM 6572 CG2 THR F 12 -27.931 4.909 -10.278 1.00 93.92 C +ATOM 6573 OG1 THR F 12 -26.676 2.853 -10.219 1.00 93.92 O +ATOM 6574 N GLN F 13 -28.265 5.556 -13.605 1.00 91.17 N +ATOM 6575 CA GLN F 13 -28.447 6.742 -14.434 1.00 91.17 C +ATOM 6576 C GLN F 13 -28.760 7.967 -13.580 1.00 91.17 C +ATOM 6577 CB GLN F 13 -29.562 6.517 -15.457 1.00 91.17 C +ATOM 6578 O GLN F 13 -28.475 9.098 -13.979 1.00 91.17 O +ATOM 6579 CG GLN F 13 -29.231 5.465 -16.506 1.00 91.17 C +ATOM 6580 CD GLN F 13 -30.380 5.207 -17.462 1.00 91.17 C +ATOM 6581 NE2 GLN F 13 -30.359 4.051 -18.117 1.00 91.17 N +ATOM 6582 OE1 GLN F 13 -31.281 6.039 -17.610 1.00 91.17 O +ATOM 6583 N ASN F 14 -29.475 7.783 -12.494 1.00 84.23 N +ATOM 6584 CA ASN F 14 -29.771 8.909 -11.614 1.00 84.23 C +ATOM 6585 C ASN F 14 -28.522 9.393 -10.883 1.00 84.23 C +ATOM 6586 CB ASN F 14 -30.862 8.532 -10.610 1.00 84.23 C +ATOM 6587 O ASN F 14 -28.236 8.945 -9.771 1.00 84.23 O +ATOM 6588 CG ASN F 14 -31.540 9.744 -10.002 1.00 84.23 C +ATOM 6589 ND2 ASN F 14 -32.534 9.506 -9.155 1.00 84.23 N +ATOM 6590 OD1 ASN F 14 -31.173 10.886 -10.291 1.00 84.23 O +ATOM 6591 N VAL F 15 -27.854 10.329 -11.570 1.00 87.82 N +ATOM 6592 CA VAL F 15 -26.615 10.842 -10.994 1.00 87.82 C +ATOM 6593 C VAL F 15 -26.865 12.212 -10.367 1.00 87.82 C +ATOM 6594 CB VAL F 15 -25.493 10.937 -12.052 1.00 87.82 C +ATOM 6595 O VAL F 15 -27.554 13.052 -10.951 1.00 87.82 O +ATOM 6596 CG1 VAL F 15 -24.183 11.390 -11.411 1.00 87.82 C +ATOM 6597 CG2 VAL F 15 -25.310 9.594 -12.757 1.00 87.82 C +ATOM 6598 N VAL F 16 -26.447 12.391 -9.167 1.00 95.01 N +ATOM 6599 CA VAL F 16 -26.554 13.672 -8.478 1.00 95.01 C +ATOM 6600 C VAL F 16 -25.178 14.331 -8.394 1.00 95.01 C +ATOM 6601 CB VAL F 16 -27.152 13.508 -7.063 1.00 95.01 C +ATOM 6602 O VAL F 16 -24.174 13.657 -8.154 1.00 95.01 O +ATOM 6603 CG1 VAL F 16 -27.215 14.854 -6.343 1.00 95.01 C +ATOM 6604 CG2 VAL F 16 -28.540 12.875 -7.141 1.00 95.01 C +ATOM 6605 N THR F 17 -25.177 15.555 -8.676 1.00 96.31 N +ATOM 6606 CA THR F 17 -23.920 16.295 -8.682 1.00 96.31 C +ATOM 6607 C THR F 17 -23.844 17.243 -7.489 1.00 96.31 C +ATOM 6608 CB THR F 17 -23.749 17.094 -9.987 1.00 96.31 C +ATOM 6609 O THR F 17 -24.861 17.536 -6.857 1.00 96.31 O +ATOM 6610 CG2 THR F 17 -23.889 16.191 -11.208 1.00 96.31 C +ATOM 6611 OG1 THR F 17 -24.749 18.119 -10.048 1.00 96.31 O +ATOM 6612 N ILE F 18 -22.605 17.679 -7.146 1.00 97.92 N +ATOM 6613 CA ILE F 18 -22.340 18.628 -6.071 1.00 97.92 C +ATOM 6614 C ILE F 18 -21.155 19.515 -6.445 1.00 97.92 C +ATOM 6615 CB ILE F 18 -22.066 17.904 -4.733 1.00 97.92 C +ATOM 6616 O ILE F 18 -20.313 19.126 -7.258 1.00 97.92 O +ATOM 6617 CG1 ILE F 18 -22.115 18.898 -3.568 1.00 97.92 C +ATOM 6618 CG2 ILE F 18 -20.717 17.179 -4.778 1.00 97.92 C +ATOM 6619 CD1 ILE F 18 -22.203 18.242 -2.197 1.00 97.92 C +ATOM 6620 N ARG F 19 -21.170 20.661 -5.897 1.00 96.98 N +ATOM 6621 CA ARG F 19 -20.028 21.543 -6.117 1.00 96.98 C +ATOM 6622 C ARG F 19 -18.880 21.197 -5.175 1.00 96.98 C +ATOM 6623 CB ARG F 19 -20.435 23.006 -5.931 1.00 96.98 C +ATOM 6624 O ARG F 19 -19.107 20.779 -4.038 1.00 96.98 O +ATOM 6625 CG ARG F 19 -21.393 23.519 -6.995 1.00 96.98 C +ATOM 6626 CD ARG F 19 -21.642 25.014 -6.857 1.00 96.98 C +ATOM 6627 NE ARG F 19 -22.433 25.534 -7.969 1.00 96.98 N +ATOM 6628 NH1 ARG F 19 -22.447 27.716 -7.209 1.00 96.98 N +ATOM 6629 NH2 ARG F 19 -23.517 27.170 -9.161 1.00 96.98 N +ATOM 6630 CZ ARG F 19 -22.797 26.806 -8.110 1.00 96.98 C +ATOM 6631 N GLY F 20 -17.709 21.471 -5.647 1.00 97.62 N +ATOM 6632 CA GLY F 20 -16.550 21.245 -4.798 1.00 97.62 C +ATOM 6633 C GLY F 20 -16.527 22.135 -3.570 1.00 97.62 C +ATOM 6634 O GLY F 20 -15.982 21.755 -2.531 1.00 97.62 O +ATOM 6635 N SER F 21 -17.077 23.286 -3.636 1.00 97.15 N +ATOM 6636 CA SER F 21 -17.066 24.261 -2.550 1.00 97.15 C +ATOM 6637 C SER F 21 -18.110 23.921 -1.491 1.00 97.15 C +ATOM 6638 CB SER F 21 -17.317 25.669 -3.091 1.00 97.15 C +ATOM 6639 O SER F 21 -18.124 24.515 -0.411 1.00 97.15 O +ATOM 6640 OG SER F 21 -18.556 25.732 -3.775 1.00 97.15 O +ATOM 6641 N ALA F 22 -18.948 22.941 -1.752 1.00 98.12 N +ATOM 6642 CA ALA F 22 -19.952 22.549 -0.767 1.00 98.12 C +ATOM 6643 C ALA F 22 -19.298 21.959 0.479 1.00 98.12 C +ATOM 6644 CB ALA F 22 -20.931 21.547 -1.375 1.00 98.12 C +ATOM 6645 O ALA F 22 -18.158 21.491 0.427 1.00 98.12 O +ATOM 6646 N THR F 23 -20.021 22.047 1.571 1.00 98.35 N +ATOM 6647 CA THR F 23 -19.518 21.404 2.780 1.00 98.35 C +ATOM 6648 C THR F 23 -19.725 19.893 2.714 1.00 98.35 C +ATOM 6649 CB THR F 23 -20.206 21.965 4.038 1.00 98.35 C +ATOM 6650 O THR F 23 -20.574 19.409 1.963 1.00 98.35 O +ATOM 6651 CG2 THR F 23 -20.085 23.484 4.100 1.00 98.35 C +ATOM 6652 OG1 THR F 23 -21.593 21.608 4.017 1.00 98.35 O +ATOM 6653 N VAL F 24 -18.997 19.235 3.488 1.00 98.80 N +ATOM 6654 CA VAL F 24 -19.175 17.791 3.603 1.00 98.80 C +ATOM 6655 C VAL F 24 -20.553 17.485 4.186 1.00 98.80 C +ATOM 6656 CB VAL F 24 -18.073 17.151 4.477 1.00 98.80 C +ATOM 6657 O VAL F 24 -21.193 16.505 3.799 1.00 98.80 O +ATOM 6658 CG1 VAL F 24 -18.380 15.678 4.740 1.00 98.80 C +ATOM 6659 CG2 VAL F 24 -16.707 17.304 3.809 1.00 98.80 C +ATOM 6660 N ALA F 25 -21.017 18.323 5.065 1.00 98.67 N +ATOM 6661 CA ALA F 25 -22.357 18.166 5.626 1.00 98.67 C +ATOM 6662 C ALA F 25 -23.418 18.203 4.530 1.00 98.67 C +ATOM 6663 CB ALA F 25 -22.630 19.252 6.664 1.00 98.67 C +ATOM 6664 O ALA F 25 -24.354 17.400 4.536 1.00 98.67 O +ATOM 6665 N ASP F 26 -23.268 19.117 3.579 1.00 98.48 N +ATOM 6666 CA ASP F 26 -24.181 19.191 2.443 1.00 98.48 C +ATOM 6667 C ASP F 26 -24.169 17.891 1.642 1.00 98.48 C +ATOM 6668 CB ASP F 26 -23.817 20.370 1.538 1.00 98.48 C +ATOM 6669 O ASP F 26 -25.221 17.400 1.230 1.00 98.48 O +ATOM 6670 CG ASP F 26 -24.071 21.718 2.189 1.00 98.48 C +ATOM 6671 OD1 ASP F 26 -24.992 21.827 3.027 1.00 98.48 O +ATOM 6672 OD2 ASP F 26 -23.346 22.681 1.859 1.00 98.48 O +ATOM 6673 N ALA F 27 -23.015 17.411 1.457 1.00 98.72 N +ATOM 6674 CA ALA F 27 -22.874 16.165 0.708 1.00 98.72 C +ATOM 6675 C ALA F 27 -23.580 15.015 1.419 1.00 98.72 C +ATOM 6676 CB ALA F 27 -21.398 15.833 0.502 1.00 98.72 C +ATOM 6677 O ALA F 27 -24.308 14.242 0.791 1.00 98.72 O +ATOM 6678 N VAL F 28 -23.367 14.903 2.720 1.00 98.74 N +ATOM 6679 CA VAL F 28 -24.005 13.850 3.502 1.00 98.74 C +ATOM 6680 C VAL F 28 -25.523 13.990 3.417 1.00 98.74 C +ATOM 6681 CB VAL F 28 -23.549 13.883 4.978 1.00 98.74 C +ATOM 6682 O VAL F 28 -26.232 13.006 3.197 1.00 98.74 O +ATOM 6683 CG1 VAL F 28 -24.348 12.884 5.813 1.00 98.74 C +ATOM 6684 CG2 VAL F 28 -22.052 13.593 5.080 1.00 98.74 C +ATOM 6685 N LYS F 29 -25.969 15.173 3.572 1.00 98.49 N +ATOM 6686 CA LYS F 29 -27.402 15.436 3.477 1.00 98.49 C +ATOM 6687 C LYS F 29 -27.957 14.981 2.130 1.00 98.49 C +ATOM 6688 CB LYS F 29 -27.690 16.923 3.687 1.00 98.49 C +ATOM 6689 O LYS F 29 -28.978 14.293 2.073 1.00 98.49 O +ATOM 6690 CG LYS F 29 -29.169 17.279 3.647 1.00 98.49 C +ATOM 6691 CD LYS F 29 -29.390 18.774 3.843 1.00 98.49 C +ATOM 6692 CE LYS F 29 -30.862 19.143 3.723 1.00 98.49 C +ATOM 6693 NZ LYS F 29 -31.076 20.615 3.848 1.00 98.49 N +ATOM 6694 N LEU F 30 -27.316 15.366 1.143 1.00 98.19 N +ATOM 6695 CA LEU F 30 -27.745 15.015 -0.207 1.00 98.19 C +ATOM 6696 C LEU F 30 -27.724 13.504 -0.409 1.00 98.19 C +ATOM 6697 CB LEU F 30 -26.849 15.694 -1.247 1.00 98.19 C +ATOM 6698 O LEU F 30 -28.657 12.937 -0.982 1.00 98.19 O +ATOM 6699 CG LEU F 30 -27.322 15.621 -2.700 1.00 98.19 C +ATOM 6700 CD1 LEU F 30 -28.746 16.153 -2.820 1.00 98.19 C +ATOM 6701 CD2 LEU F 30 -26.377 16.398 -3.610 1.00 98.19 C +ATOM 6702 N MET F 31 -26.735 12.835 0.060 1.00 97.75 N +ATOM 6703 CA MET F 31 -26.634 11.383 -0.056 1.00 97.75 C +ATOM 6704 C MET F 31 -27.757 10.696 0.713 1.00 97.75 C +ATOM 6705 CB MET F 31 -25.276 10.896 0.454 1.00 97.75 C +ATOM 6706 O MET F 31 -28.340 9.723 0.232 1.00 97.75 O +ATOM 6707 CG MET F 31 -24.121 11.214 -0.481 1.00 97.75 C +ATOM 6708 SD MET F 31 -22.513 10.598 0.154 1.00 97.75 S +ATOM 6709 CE MET F 31 -21.391 11.287 -1.094 1.00 97.75 C +ATOM 6710 N LYS F 32 -28.056 11.191 1.890 1.00 97.65 N +ATOM 6711 CA LYS F 32 -29.151 10.641 2.685 1.00 97.65 C +ATOM 6712 C LYS F 32 -30.490 10.829 1.979 1.00 97.65 C +ATOM 6713 CB LYS F 32 -29.191 11.294 4.068 1.00 97.65 C +ATOM 6714 O LYS F 32 -31.261 9.878 1.836 1.00 97.65 O +ATOM 6715 CG LYS F 32 -28.073 10.844 4.997 1.00 97.65 C +ATOM 6716 CD LYS F 32 -28.199 11.484 6.374 1.00 97.65 C +ATOM 6717 CE LYS F 32 -27.138 10.963 7.333 1.00 97.65 C +ATOM 6718 NZ LYS F 32 -27.297 11.539 8.702 1.00 97.65 N +ATOM 6719 N GLU F 33 -30.720 12.026 1.466 1.00 97.20 N +ATOM 6720 CA GLU F 33 -31.985 12.355 0.816 1.00 97.20 C +ATOM 6721 C GLU F 33 -32.190 11.522 -0.446 1.00 97.20 C +ATOM 6722 CB GLU F 33 -32.043 13.847 0.476 1.00 97.20 C +ATOM 6723 O GLU F 33 -33.298 11.050 -0.711 1.00 97.20 O +ATOM 6724 CG GLU F 33 -32.242 14.746 1.688 1.00 97.20 C +ATOM 6725 CD GLU F 33 -32.190 16.227 1.350 1.00 97.20 C +ATOM 6726 OE1 GLU F 33 -32.450 17.063 2.246 1.00 97.20 O +ATOM 6727 OE2 GLU F 33 -31.890 16.555 0.181 1.00 97.20 O +ATOM 6728 N LYS F 34 -31.127 11.331 -1.137 1.00 96.16 N +ATOM 6729 CA LYS F 34 -31.238 10.666 -2.432 1.00 96.16 C +ATOM 6730 C LYS F 34 -30.861 9.191 -2.327 1.00 96.16 C +ATOM 6731 CB LYS F 34 -30.355 11.361 -3.470 1.00 96.16 C +ATOM 6732 O LYS F 34 -30.928 8.457 -3.315 1.00 96.16 O +ATOM 6733 CG LYS F 34 -30.717 12.818 -3.715 1.00 96.16 C +ATOM 6734 CD LYS F 34 -32.097 12.953 -4.346 1.00 96.16 C +ATOM 6735 CE LYS F 34 -32.413 14.401 -4.696 1.00 96.16 C +ATOM 6736 NZ LYS F 34 -33.758 14.536 -5.331 1.00 96.16 N +ATOM 6737 N LYS F 35 -30.431 8.743 -1.101 1.00 94.06 N +ATOM 6738 CA LYS F 35 -30.033 7.364 -0.831 1.00 94.06 C +ATOM 6739 C LYS F 35 -28.915 6.921 -1.770 1.00 94.06 C +ATOM 6740 CB LYS F 35 -31.232 6.424 -0.963 1.00 94.06 C +ATOM 6741 O LYS F 35 -29.015 5.873 -2.411 1.00 94.06 O +ATOM 6742 CG LYS F 35 -32.356 6.712 0.021 1.00 94.06 C +ATOM 6743 CD LYS F 35 -33.492 5.706 -0.117 1.00 94.06 C +ATOM 6744 CE LYS F 35 -34.623 6.001 0.858 1.00 94.06 C +ATOM 6745 NZ LYS F 35 -35.738 5.015 0.728 1.00 94.06 N +ATOM 6746 N LEU F 36 -27.935 7.731 -1.828 1.00 94.64 N +ATOM 6747 CA LEU F 36 -26.790 7.474 -2.694 1.00 94.64 C +ATOM 6748 C LEU F 36 -25.518 7.291 -1.874 1.00 94.64 C +ATOM 6749 CB LEU F 36 -26.607 8.619 -3.694 1.00 94.64 C +ATOM 6750 O LEU F 36 -25.436 7.757 -0.735 1.00 94.64 O +ATOM 6751 CG LEU F 36 -27.742 8.833 -4.696 1.00 94.64 C +ATOM 6752 CD1 LEU F 36 -27.545 10.145 -5.449 1.00 94.64 C +ATOM 6753 CD2 LEU F 36 -27.828 7.661 -5.667 1.00 94.64 C +ATOM 6754 N ARG F 37 -24.577 6.611 -2.441 1.00 95.13 N +ATOM 6755 CA ARG F 37 -23.327 6.327 -1.744 1.00 95.13 C +ATOM 6756 C ARG F 37 -22.160 7.066 -2.389 1.00 95.13 C +ATOM 6757 CB ARG F 37 -23.050 4.822 -1.728 1.00 95.13 C +ATOM 6758 O ARG F 37 -21.010 6.905 -1.974 1.00 95.13 O +ATOM 6759 CG ARG F 37 -24.056 4.018 -0.920 1.00 95.13 C +ATOM 6760 CD ARG F 37 -23.802 2.521 -1.031 1.00 95.13 C +ATOM 6761 NE ARG F 37 -24.831 1.747 -0.342 1.00 95.13 N +ATOM 6762 NH1 ARG F 37 -24.899 0.052 -1.909 1.00 95.13 N +ATOM 6763 NH2 ARG F 37 -26.261 -0.028 -0.067 1.00 95.13 N +ATOM 6764 CZ ARG F 37 -25.328 0.592 -0.774 1.00 95.13 C +ATOM 6765 N GLY F 38 -22.340 7.837 -3.400 1.00 96.39 N +ATOM 6766 CA GLY F 38 -21.388 8.689 -4.094 1.00 96.39 C +ATOM 6767 C GLY F 38 -22.049 9.815 -4.867 1.00 96.39 C +ATOM 6768 O GLY F 38 -23.164 9.659 -5.369 1.00 96.39 O +ATOM 6769 N LEU F 39 -21.297 10.892 -4.971 1.00 98.04 N +ATOM 6770 CA LEU F 39 -21.736 12.060 -5.727 1.00 98.04 C +ATOM 6771 C LEU F 39 -20.679 12.478 -6.744 1.00 98.04 C +ATOM 6772 CB LEU F 39 -22.043 13.225 -4.784 1.00 98.04 C +ATOM 6773 O LEU F 39 -19.480 12.373 -6.477 1.00 98.04 O +ATOM 6774 CG LEU F 39 -23.019 12.935 -3.642 1.00 98.04 C +ATOM 6775 CD1 LEU F 39 -23.042 14.099 -2.657 1.00 98.04 C +ATOM 6776 CD2 LEU F 39 -24.416 12.663 -4.189 1.00 98.04 C +ATOM 6777 N ILE F 40 -21.153 12.967 -7.856 1.00 97.83 N +ATOM 6778 CA ILE F 40 -20.238 13.491 -8.864 1.00 97.83 C +ATOM 6779 C ILE F 40 -19.969 14.970 -8.598 1.00 97.83 C +ATOM 6780 CB ILE F 40 -20.797 13.296 -10.291 1.00 97.83 C +ATOM 6781 O ILE F 40 -20.891 15.730 -8.292 1.00 97.83 O +ATOM 6782 CG1 ILE F 40 -20.954 11.803 -10.603 1.00 97.83 C +ATOM 6783 CG2 ILE F 40 -19.894 13.978 -11.323 1.00 97.83 C +ATOM 6784 CD1 ILE F 40 -19.654 11.015 -10.531 1.00 97.83 C +ATOM 6785 N VAL F 41 -18.759 15.359 -8.565 1.00 97.81 N +ATOM 6786 CA VAL F 41 -18.385 16.764 -8.448 1.00 97.81 C +ATOM 6787 C VAL F 41 -18.329 17.402 -9.834 1.00 97.81 C +ATOM 6788 CB VAL F 41 -17.028 16.932 -7.728 1.00 97.81 C +ATOM 6789 O VAL F 41 -17.554 16.971 -10.691 1.00 97.81 O +ATOM 6790 CG1 VAL F 41 -16.668 18.411 -7.592 1.00 97.81 C +ATOM 6791 CG2 VAL F 41 -17.065 16.260 -6.357 1.00 97.81 C +ATOM 6792 N GLU F 42 -18.949 18.403 -10.045 1.00 93.41 N +ATOM 6793 CA GLU F 42 -19.137 19.024 -11.353 1.00 93.41 C +ATOM 6794 C GLU F 42 -17.881 19.768 -11.796 1.00 93.41 C +ATOM 6795 CB GLU F 42 -20.333 19.980 -11.327 1.00 93.41 C +ATOM 6796 O GLU F 42 -17.181 20.362 -10.973 1.00 93.41 O +ATOM 6797 CG GLU F 42 -21.667 19.290 -11.081 1.00 93.41 C +ATOM 6798 CD GLU F 42 -22.832 20.260 -10.971 1.00 93.41 C +ATOM 6799 OE1 GLU F 42 -23.996 19.805 -10.902 1.00 93.41 O +ATOM 6800 OE2 GLU F 42 -22.579 21.485 -10.953 1.00 93.41 O +ATOM 6801 N PRO F 43 -17.701 19.763 -13.134 1.00 92.01 N +ATOM 6802 CA PRO F 43 -16.648 20.641 -13.650 1.00 92.01 C +ATOM 6803 C PRO F 43 -17.017 22.120 -13.558 1.00 92.01 C +ATOM 6804 CB PRO F 43 -16.509 20.203 -15.110 1.00 92.01 C +ATOM 6805 O PRO F 43 -18.198 22.471 -13.622 1.00 92.01 O +ATOM 6806 CG PRO F 43 -17.259 18.913 -15.196 1.00 92.01 C +ATOM 6807 CD PRO F 43 -18.262 18.870 -14.078 1.00 92.01 C +ATOM 6808 N ARG F 44 -16.071 22.944 -13.370 1.00 86.19 N +ATOM 6809 CA ARG F 44 -16.316 24.380 -13.284 1.00 86.19 C +ATOM 6810 C ARG F 44 -16.422 25.001 -14.673 1.00 86.19 C +ATOM 6811 CB ARG F 44 -15.207 25.068 -12.485 1.00 86.19 C +ATOM 6812 O ARG F 44 -17.129 25.994 -14.862 1.00 86.19 O +ATOM 6813 CG ARG F 44 -15.137 24.635 -11.030 1.00 86.19 C +ATOM 6814 CD ARG F 44 -16.156 25.372 -10.172 1.00 86.19 C +ATOM 6815 NE ARG F 44 -15.806 26.781 -10.010 1.00 86.19 N +ATOM 6816 NH1 ARG F 44 -17.119 27.105 -8.137 1.00 86.19 N +ATOM 6817 NH2 ARG F 44 -15.887 28.838 -8.994 1.00 86.19 N +ATOM 6818 CZ ARG F 44 -16.272 27.572 -9.047 1.00 86.19 C +ATOM 6819 N HIS F 45 -15.644 24.471 -15.619 1.00 81.94 N +ATOM 6820 CA HIS F 45 -15.650 24.901 -17.012 1.00 81.94 C +ATOM 6821 C HIS F 45 -15.360 23.734 -17.951 1.00 81.94 C +ATOM 6822 CB HIS F 45 -14.630 26.019 -17.233 1.00 81.94 C +ATOM 6823 O HIS F 45 -15.138 22.609 -17.498 1.00 81.94 O +ATOM 6824 CG HIS F 45 -13.258 25.685 -16.740 1.00 81.94 C +ATOM 6825 CD2 HIS F 45 -12.598 26.065 -15.620 1.00 81.94 C +ATOM 6826 ND1 HIS F 45 -12.397 24.863 -17.435 1.00 81.94 N +ATOM 6827 CE1 HIS F 45 -11.264 24.752 -16.762 1.00 81.94 C +ATOM 6828 NE2 HIS F 45 -11.360 25.471 -15.657 1.00 81.94 N +ATOM 6829 N GLU F 46 -15.365 23.934 -19.130 1.00 75.95 N +ATOM 6830 CA GLU F 46 -15.299 22.886 -20.145 1.00 75.95 C +ATOM 6831 C GLU F 46 -13.993 22.104 -20.047 1.00 75.95 C +ATOM 6832 CB GLU F 46 -15.450 23.484 -21.546 1.00 75.95 C +ATOM 6833 O GLU F 46 -13.955 20.908 -20.345 1.00 75.95 O +ATOM 6834 CG GLU F 46 -16.882 23.854 -21.906 1.00 75.95 C +ATOM 6835 CD GLU F 46 -17.036 24.326 -23.343 1.00 75.95 C +ATOM 6836 OE1 GLU F 46 -18.184 24.563 -23.784 1.00 75.95 O +ATOM 6837 OE2 GLU F 46 -16.001 24.459 -24.034 1.00 75.95 O +ATOM 6838 N GLN F 47 -12.986 22.706 -19.626 1.00 75.88 N +ATOM 6839 CA GLN F 47 -11.683 22.054 -19.560 1.00 75.88 C +ATOM 6840 C GLN F 47 -11.466 21.397 -18.200 1.00 75.88 C +ATOM 6841 CB GLN F 47 -10.564 23.057 -19.843 1.00 75.88 C +ATOM 6842 O GLN F 47 -10.478 20.688 -17.997 1.00 75.88 O +ATOM 6843 CG GLN F 47 -10.568 23.597 -21.267 1.00 75.88 C +ATOM 6844 CD GLN F 47 -9.598 24.747 -21.461 1.00 75.88 C +ATOM 6845 NE2 GLN F 47 -9.508 25.246 -22.689 1.00 75.88 N +ATOM 6846 OE1 GLN F 47 -8.934 25.183 -20.515 1.00 75.88 O +ATOM 6847 N ASP F 48 -12.367 21.641 -17.365 1.00 87.10 N +ATOM 6848 CA ASP F 48 -12.294 21.068 -16.024 1.00 87.10 C +ATOM 6849 C ASP F 48 -12.876 19.656 -15.997 1.00 87.10 C +ATOM 6850 CB ASP F 48 -13.028 21.958 -15.019 1.00 87.10 C +ATOM 6851 O ASP F 48 -13.896 19.388 -16.635 1.00 87.10 O +ATOM 6852 CG ASP F 48 -12.764 21.566 -13.576 1.00 87.10 C +ATOM 6853 OD1 ASP F 48 -11.634 21.138 -13.257 1.00 87.10 O +ATOM 6854 OD2 ASP F 48 -13.696 21.683 -12.751 1.00 87.10 O +ATOM 6855 N PRO F 49 -12.245 18.719 -15.302 1.00 92.85 N +ATOM 6856 CA PRO F 49 -12.732 17.338 -15.270 1.00 92.85 C +ATOM 6857 C PRO F 49 -13.780 17.108 -14.183 1.00 92.85 C +ATOM 6858 CB PRO F 49 -11.467 16.523 -14.990 1.00 92.85 C +ATOM 6859 O PRO F 49 -13.939 17.941 -13.287 1.00 92.85 O +ATOM 6860 CG PRO F 49 -10.628 17.406 -14.123 1.00 92.85 C +ATOM 6861 CD PRO F 49 -10.799 18.826 -14.581 1.00 92.85 C +ATOM 6862 N TYR F 50 -14.452 15.959 -14.285 1.00 94.35 N +ATOM 6863 CA TYR F 50 -15.352 15.511 -13.228 1.00 94.35 C +ATOM 6864 C TYR F 50 -14.567 14.979 -12.034 1.00 94.35 C +ATOM 6865 CB TYR F 50 -16.302 14.430 -13.752 1.00 94.35 C +ATOM 6866 O TYR F 50 -13.435 14.515 -12.185 1.00 94.35 O +ATOM 6867 CG TYR F 50 -17.332 14.948 -14.726 1.00 94.35 C +ATOM 6868 CD1 TYR F 50 -18.504 15.551 -14.275 1.00 94.35 C +ATOM 6869 CD2 TYR F 50 -17.136 14.835 -16.098 1.00 94.35 C +ATOM 6870 CE1 TYR F 50 -19.457 16.028 -15.169 1.00 94.35 C +ATOM 6871 CE2 TYR F 50 -18.082 15.309 -17.001 1.00 94.35 C +ATOM 6872 OH TYR F 50 -20.178 16.373 -17.417 1.00 94.35 O +ATOM 6873 CZ TYR F 50 -19.237 15.903 -16.528 1.00 94.35 C +ATOM 6874 N GLY F 51 -15.159 15.183 -10.892 1.00 96.76 N +ATOM 6875 CA GLY F 51 -14.693 14.534 -9.677 1.00 96.76 C +ATOM 6876 C GLY F 51 -15.744 13.651 -9.031 1.00 96.76 C +ATOM 6877 O GLY F 51 -16.865 13.543 -9.532 1.00 96.76 O +ATOM 6878 N ILE F 52 -15.345 13.002 -7.966 1.00 98.33 N +ATOM 6879 CA ILE F 52 -16.276 12.147 -7.238 1.00 98.33 C +ATOM 6880 C ILE F 52 -15.966 12.199 -5.744 1.00 98.33 C +ATOM 6881 CB ILE F 52 -16.220 10.689 -7.747 1.00 98.33 C +ATOM 6882 O ILE F 52 -14.802 12.299 -5.349 1.00 98.33 O +ATOM 6883 CG1 ILE F 52 -17.337 9.857 -7.108 1.00 98.33 C +ATOM 6884 CG2 ILE F 52 -14.847 10.071 -7.465 1.00 98.33 C +ATOM 6885 CD1 ILE F 52 -17.565 8.508 -7.776 1.00 98.33 C +ATOM 6886 N VAL F 53 -17.001 12.231 -4.930 1.00 98.57 N +ATOM 6887 CA VAL F 53 -16.899 12.066 -3.483 1.00 98.57 C +ATOM 6888 C VAL F 53 -17.800 10.921 -3.029 1.00 98.57 C +ATOM 6889 CB VAL F 53 -17.271 13.366 -2.736 1.00 98.57 C +ATOM 6890 O VAL F 53 -18.956 10.828 -3.449 1.00 98.57 O +ATOM 6891 CG1 VAL F 53 -18.722 13.752 -3.013 1.00 98.57 C +ATOM 6892 CG2 VAL F 53 -17.035 13.205 -1.236 1.00 98.57 C +ATOM 6893 N THR F 54 -17.268 10.026 -2.214 1.00 98.17 N +ATOM 6894 CA THR F 54 -17.997 8.824 -1.825 1.00 98.17 C +ATOM 6895 C THR F 54 -18.168 8.762 -0.310 1.00 98.17 C +ATOM 6896 CB THR F 54 -17.279 7.553 -2.316 1.00 98.17 C +ATOM 6897 O THR F 54 -17.550 9.538 0.422 1.00 98.17 O +ATOM 6898 CG2 THR F 54 -16.931 7.654 -3.797 1.00 98.17 C +ATOM 6899 OG1 THR F 54 -16.072 7.372 -1.564 1.00 98.17 O +ATOM 6900 N GLU F 55 -19.003 7.824 0.124 1.00 98.02 N +ATOM 6901 CA GLU F 55 -19.187 7.587 1.552 1.00 98.02 C +ATOM 6902 C GLU F 55 -17.880 7.159 2.214 1.00 98.02 C +ATOM 6903 CB GLU F 55 -20.268 6.529 1.787 1.00 98.02 C +ATOM 6904 O GLU F 55 -17.621 7.504 3.369 1.00 98.02 O +ATOM 6905 CG GLU F 55 -19.952 5.179 1.159 1.00 98.02 C +ATOM 6906 CD GLU F 55 -21.066 4.159 1.339 1.00 98.02 C +ATOM 6907 OE1 GLU F 55 -20.868 2.975 0.982 1.00 98.02 O +ATOM 6908 OE2 GLU F 55 -22.145 4.547 1.839 1.00 98.02 O +ATOM 6909 N THR F 56 -17.100 6.479 1.487 1.00 98.06 N +ATOM 6910 CA THR F 56 -15.816 6.041 2.023 1.00 98.06 C +ATOM 6911 C THR F 56 -14.894 7.234 2.259 1.00 98.06 C +ATOM 6912 CB THR F 56 -15.129 5.037 1.079 1.00 98.06 C +ATOM 6913 O THR F 56 -14.211 7.305 3.283 1.00 98.06 O +ATOM 6914 CG2 THR F 56 -13.823 4.524 1.677 1.00 98.06 C +ATOM 6915 OG1 THR F 56 -16.007 3.927 0.852 1.00 98.06 O +ATOM 6916 N ASP F 57 -14.865 8.200 1.351 1.00 98.43 N +ATOM 6917 CA ASP F 57 -14.082 9.416 1.551 1.00 98.43 C +ATOM 6918 C ASP F 57 -14.487 10.124 2.842 1.00 98.43 C +ATOM 6919 CB ASP F 57 -14.244 10.361 0.359 1.00 98.43 C +ATOM 6920 O ASP F 57 -13.631 10.497 3.647 1.00 98.43 O +ATOM 6921 CG ASP F 57 -13.623 9.819 -0.916 1.00 98.43 C +ATOM 6922 OD1 ASP F 57 -12.538 9.202 -0.852 1.00 98.43 O +ATOM 6923 OD2 ASP F 57 -14.223 10.014 -1.996 1.00 98.43 O +ATOM 6924 N ILE F 58 -15.744 10.232 3.037 1.00 98.76 N +ATOM 6925 CA ILE F 58 -16.283 10.971 4.173 1.00 98.76 C +ATOM 6926 C ILE F 58 -15.942 10.243 5.472 1.00 98.76 C +ATOM 6927 CB ILE F 58 -17.812 11.160 4.050 1.00 98.76 C +ATOM 6928 O ILE F 58 -15.447 10.854 6.421 1.00 98.76 O +ATOM 6929 CG1 ILE F 58 -18.142 12.098 2.883 1.00 98.76 C +ATOM 6930 CG2 ILE F 58 -18.398 11.691 5.362 1.00 98.76 C +ATOM 6931 CD1 ILE F 58 -19.626 12.180 2.555 1.00 98.76 C +ATOM 6932 N VAL F 59 -16.134 8.989 5.479 1.00 98.59 N +ATOM 6933 CA VAL F 59 -15.913 8.229 6.705 1.00 98.59 C +ATOM 6934 C VAL F 59 -14.418 8.156 7.006 1.00 98.59 C +ATOM 6935 CB VAL F 59 -16.507 6.807 6.607 1.00 98.59 C +ATOM 6936 O VAL F 59 -13.993 8.399 8.138 1.00 98.59 O +ATOM 6937 CG1 VAL F 59 -16.061 5.952 7.791 1.00 98.59 C +ATOM 6938 CG2 VAL F 59 -18.032 6.869 6.534 1.00 98.59 C +ATOM 6939 N TYR F 60 -13.603 7.951 6.006 1.00 98.25 N +ATOM 6940 CA TYR F 60 -12.167 7.767 6.184 1.00 98.25 C +ATOM 6941 C TYR F 60 -11.487 9.086 6.533 1.00 98.25 C +ATOM 6942 CB TYR F 60 -11.539 7.174 4.919 1.00 98.25 C +ATOM 6943 O TYR F 60 -10.524 9.110 7.303 1.00 98.25 O +ATOM 6944 CG TYR F 60 -11.649 5.671 4.834 1.00 98.25 C +ATOM 6945 CD1 TYR F 60 -12.562 4.974 5.622 1.00 98.25 C +ATOM 6946 CD2 TYR F 60 -10.840 4.945 3.966 1.00 98.25 C +ATOM 6947 CE1 TYR F 60 -12.666 3.589 5.548 1.00 98.25 C +ATOM 6948 CE2 TYR F 60 -10.935 3.560 3.885 1.00 98.25 C +ATOM 6949 OH TYR F 60 -11.948 1.520 4.601 1.00 98.25 O +ATOM 6950 CZ TYR F 60 -11.850 2.892 4.678 1.00 98.25 C +ATOM 6951 N LYS F 61 -11.945 10.157 5.956 1.00 98.16 N +ATOM 6952 CA LYS F 61 -11.171 11.394 6.015 1.00 98.16 C +ATOM 6953 C LYS F 61 -11.813 12.399 6.967 1.00 98.16 C +ATOM 6954 CB LYS F 61 -11.031 12.007 4.621 1.00 98.16 C +ATOM 6955 O LYS F 61 -11.167 13.358 7.394 1.00 98.16 O +ATOM 6956 CG LYS F 61 -10.267 11.135 3.636 1.00 98.16 C +ATOM 6957 CD LYS F 61 -10.194 11.781 2.258 1.00 98.16 C +ATOM 6958 CE LYS F 61 -9.533 10.860 1.242 1.00 98.16 C +ATOM 6959 NZ LYS F 61 -9.486 11.477 -0.117 1.00 98.16 N +ATOM 6960 N VAL F 62 -13.060 12.214 7.300 1.00 98.37 N +ATOM 6961 CA VAL F 62 -13.742 13.205 8.126 1.00 98.37 C +ATOM 6962 C VAL F 62 -14.170 12.569 9.447 1.00 98.37 C +ATOM 6963 CB VAL F 62 -14.969 13.801 7.401 1.00 98.37 C +ATOM 6964 O VAL F 62 -13.595 12.861 10.499 1.00 98.37 O +ATOM 6965 CG1 VAL F 62 -15.589 14.928 8.225 1.00 98.37 C +ATOM 6966 CG2 VAL F 62 -14.574 14.305 6.014 1.00 98.37 C +ATOM 6967 N ALA F 63 -15.048 11.592 9.420 1.00 97.88 N +ATOM 6968 CA ALA F 63 -15.577 10.972 10.632 1.00 97.88 C +ATOM 6969 C ALA F 63 -14.462 10.327 11.450 1.00 97.88 C +ATOM 6970 CB ALA F 63 -16.642 9.936 10.279 1.00 97.88 C +ATOM 6971 O ALA F 63 -14.416 10.475 12.674 1.00 97.88 O +ATOM 6972 N ALA F 64 -13.587 9.746 10.815 1.00 97.26 N +ATOM 6973 CA ALA F 64 -12.517 8.995 11.465 1.00 97.26 C +ATOM 6974 C ALA F 64 -11.593 9.924 12.249 1.00 97.26 C +ATOM 6975 CB ALA F 64 -11.718 8.204 10.432 1.00 97.26 C +ATOM 6976 O ALA F 64 -10.885 9.483 13.157 1.00 97.26 O +ATOM 6977 N PHE F 65 -11.618 11.167 11.866 1.00 96.02 N +ATOM 6978 CA PHE F 65 -10.668 12.091 12.473 1.00 96.02 C +ATOM 6979 C PHE F 65 -11.393 13.159 13.283 1.00 96.02 C +ATOM 6980 CB PHE F 65 -9.795 12.749 11.400 1.00 96.02 C +ATOM 6981 O PHE F 65 -10.765 14.084 13.804 1.00 96.02 O +ATOM 6982 CG PHE F 65 -8.915 11.781 10.656 1.00 96.02 C +ATOM 6983 CD1 PHE F 65 -7.715 11.347 11.206 1.00 96.02 C +ATOM 6984 CD2 PHE F 65 -9.288 11.305 9.405 1.00 96.02 C +ATOM 6985 CE1 PHE F 65 -6.898 10.451 10.520 1.00 96.02 C +ATOM 6986 CE2 PHE F 65 -8.477 10.410 8.714 1.00 96.02 C +ATOM 6987 CZ PHE F 65 -7.282 9.985 9.272 1.00 96.02 C +ATOM 6988 N GLY F 66 -12.648 13.072 13.305 1.00 93.53 N +ATOM 6989 CA GLY F 66 -13.443 13.996 14.099 1.00 93.53 C +ATOM 6990 C GLY F 66 -13.504 15.391 13.507 1.00 93.53 C +ATOM 6991 O GLY F 66 -13.689 16.371 14.232 1.00 93.53 O +ATOM 6992 N HIS F 67 -13.246 15.587 12.305 1.00 96.27 N +ATOM 6993 CA HIS F 67 -13.381 16.886 11.655 1.00 96.27 C +ATOM 6994 C HIS F 67 -14.843 17.312 11.576 1.00 96.27 C +ATOM 6995 CB HIS F 67 -12.768 16.851 10.254 1.00 96.27 C +ATOM 6996 O HIS F 67 -15.741 16.467 11.557 1.00 96.27 O +ATOM 6997 CG HIS F 67 -11.290 16.621 10.252 1.00 96.27 C +ATOM 6998 CD2 HIS F 67 -10.521 15.784 9.517 1.00 96.27 C +ATOM 6999 ND1 HIS F 67 -10.430 17.301 11.088 1.00 96.27 N +ATOM 7000 CE1 HIS F 67 -9.193 16.890 10.864 1.00 96.27 C +ATOM 7001 NE2 HIS F 67 -9.221 15.970 9.916 1.00 96.27 N +ATOM 7002 N ASP F 68 -15.064 18.579 11.467 1.00 96.13 N +ATOM 7003 CA ASP F 68 -16.424 19.102 11.382 1.00 96.13 C +ATOM 7004 C ASP F 68 -16.907 19.143 9.934 1.00 96.13 C +ATOM 7005 CB ASP F 68 -16.501 20.500 12.001 1.00 96.13 C +ATOM 7006 O ASP F 68 -16.415 19.939 9.132 1.00 96.13 O +ATOM 7007 CG ASP F 68 -17.918 21.044 12.061 1.00 96.13 C +ATOM 7008 OD1 ASP F 68 -18.846 20.388 11.542 1.00 96.13 O +ATOM 7009 OD2 ASP F 68 -18.106 22.141 12.630 1.00 96.13 O +ATOM 7010 N PRO F 69 -17.884 18.345 9.642 1.00 98.07 N +ATOM 7011 CA PRO F 69 -18.375 18.307 8.262 1.00 98.07 C +ATOM 7012 C PRO F 69 -19.004 19.627 7.823 1.00 98.07 C +ATOM 7013 CB PRO F 69 -19.419 17.188 8.291 1.00 98.07 C +ATOM 7014 O PRO F 69 -19.193 19.857 6.626 1.00 98.07 O +ATOM 7015 CG PRO F 69 -19.099 16.398 9.519 1.00 98.07 C +ATOM 7016 CD PRO F 69 -18.515 17.326 10.545 1.00 98.07 C +ATOM 7017 N LYS F 70 -19.327 20.447 8.715 1.00 97.02 N +ATOM 7018 CA LYS F 70 -19.950 21.723 8.379 1.00 97.02 C +ATOM 7019 C LYS F 70 -18.905 22.750 7.951 1.00 97.02 C +ATOM 7020 CB LYS F 70 -20.753 22.257 9.566 1.00 97.02 C +ATOM 7021 O LYS F 70 -19.239 23.763 7.334 1.00 97.02 O +ATOM 7022 CG LYS F 70 -21.946 21.392 9.946 1.00 97.02 C +ATOM 7023 CD LYS F 70 -22.640 21.915 11.197 1.00 97.02 C +ATOM 7024 CE LYS F 70 -23.722 20.958 11.678 1.00 97.02 C +ATOM 7025 NZ LYS F 70 -24.302 21.389 12.985 1.00 97.02 N +ATOM 7026 N THR F 71 -17.657 22.505 8.262 1.00 96.26 N +ATOM 7027 CA THR F 71 -16.575 23.417 7.909 1.00 96.26 C +ATOM 7028 C THR F 71 -15.722 22.837 6.785 1.00 96.26 C +ATOM 7029 CB THR F 71 -15.683 23.724 9.127 1.00 96.26 C +ATOM 7030 O THR F 71 -15.299 23.562 5.882 1.00 96.26 O +ATOM 7031 CG2 THR F 71 -16.501 24.308 10.274 1.00 96.26 C +ATOM 7032 OG1 THR F 71 -15.057 22.513 9.569 1.00 96.26 O +ATOM 7033 N MET F 72 -15.541 21.577 6.802 1.00 97.92 N +ATOM 7034 CA MET F 72 -14.744 20.940 5.758 1.00 97.92 C +ATOM 7035 C MET F 72 -15.508 20.899 4.439 1.00 97.92 C +ATOM 7036 CB MET F 72 -14.343 19.524 6.175 1.00 97.92 C +ATOM 7037 O MET F 72 -16.728 20.724 4.429 1.00 97.92 O +ATOM 7038 CG MET F 72 -13.228 18.929 5.330 1.00 97.92 C +ATOM 7039 SD MET F 72 -12.596 17.348 6.014 1.00 97.92 S +ATOM 7040 CE MET F 72 -11.636 17.969 7.423 1.00 97.92 C +ATOM 7041 N ARG F 73 -14.778 21.060 3.371 1.00 98.47 N +ATOM 7042 CA ARG F 73 -15.411 21.174 2.061 1.00 98.47 C +ATOM 7043 C ARG F 73 -15.149 19.932 1.216 1.00 98.47 C +ATOM 7044 CB ARG F 73 -14.910 22.421 1.329 1.00 98.47 C +ATOM 7045 O ARG F 73 -14.178 19.210 1.449 1.00 98.47 O +ATOM 7046 CG ARG F 73 -15.080 23.709 2.119 1.00 98.47 C +ATOM 7047 CD ARG F 73 -16.546 24.093 2.263 1.00 98.47 C +ATOM 7048 NE ARG F 73 -16.703 25.386 2.923 1.00 98.47 N +ATOM 7049 NH1 ARG F 73 -18.546 26.027 1.688 1.00 98.47 N +ATOM 7050 NH2 ARG F 73 -17.699 27.421 3.298 1.00 98.47 N +ATOM 7051 CZ ARG F 73 -17.649 26.275 2.635 1.00 98.47 C +ATOM 7052 N VAL F 74 -15.946 19.710 0.217 1.00 98.72 N +ATOM 7053 CA VAL F 74 -15.897 18.542 -0.656 1.00 98.72 C +ATOM 7054 C VAL F 74 -14.573 18.520 -1.416 1.00 98.72 C +ATOM 7055 CB VAL F 74 -17.082 18.525 -1.648 1.00 98.72 C +ATOM 7056 O VAL F 74 -13.950 17.465 -1.559 1.00 98.72 O +ATOM 7057 CG1 VAL F 74 -16.824 17.532 -2.780 1.00 98.72 C +ATOM 7058 CG2 VAL F 74 -18.382 18.186 -0.921 1.00 98.72 C +ATOM 7059 N TYR F 75 -14.065 19.649 -1.824 1.00 97.54 N +ATOM 7060 CA TYR F 75 -12.848 19.681 -2.627 1.00 97.54 C +ATOM 7061 C TYR F 75 -11.642 19.234 -1.808 1.00 97.54 C +ATOM 7062 CB TYR F 75 -12.607 21.088 -3.183 1.00 97.54 C +ATOM 7063 O TYR F 75 -10.590 18.913 -2.366 1.00 97.54 O +ATOM 7064 CG TYR F 75 -12.196 22.093 -2.135 1.00 97.54 C +ATOM 7065 CD1 TYR F 75 -13.103 23.033 -1.650 1.00 97.54 C +ATOM 7066 CD2 TYR F 75 -10.901 22.106 -1.629 1.00 97.54 C +ATOM 7067 CE1 TYR F 75 -12.728 23.963 -0.685 1.00 97.54 C +ATOM 7068 CE2 TYR F 75 -10.515 23.031 -0.665 1.00 97.54 C +ATOM 7069 OH TYR F 75 -11.057 24.872 0.755 1.00 97.54 O +ATOM 7070 CZ TYR F 75 -11.434 23.954 -0.200 1.00 97.54 C +ATOM 7071 N GLU F 76 -11.763 19.193 -0.492 1.00 97.89 N +ATOM 7072 CA GLU F 76 -10.663 18.786 0.378 1.00 97.89 C +ATOM 7073 C GLU F 76 -10.551 17.266 0.452 1.00 97.89 C +ATOM 7074 CB GLU F 76 -10.843 19.370 1.781 1.00 97.89 C +ATOM 7075 O GLU F 76 -9.501 16.734 0.817 1.00 97.89 O +ATOM 7076 CG GLU F 76 -10.793 20.890 1.827 1.00 97.89 C +ATOM 7077 CD GLU F 76 -11.099 21.460 3.203 1.00 97.89 C +ATOM 7078 OE1 GLU F 76 -12.246 21.905 3.434 1.00 97.89 O +ATOM 7079 OE2 GLU F 76 -10.185 21.461 4.057 1.00 97.89 O +ATOM 7080 N ILE F 77 -11.609 16.517 0.096 1.00 98.29 N +ATOM 7081 CA ILE F 77 -11.578 15.078 0.332 1.00 98.29 C +ATOM 7082 C ILE F 77 -11.939 14.336 -0.953 1.00 98.29 C +ATOM 7083 CB ILE F 77 -12.538 14.672 1.473 1.00 98.29 C +ATOM 7084 O ILE F 77 -11.817 13.111 -1.025 1.00 98.29 O +ATOM 7085 CG1 ILE F 77 -13.982 15.039 1.112 1.00 98.29 C +ATOM 7086 CG2 ILE F 77 -12.118 15.329 2.791 1.00 98.29 C +ATOM 7087 CD1 ILE F 77 -15.031 14.305 1.935 1.00 98.29 C +ATOM 7088 N MET F 78 -12.348 14.973 -1.988 1.00 98.21 N +ATOM 7089 CA MET F 78 -12.820 14.370 -3.231 1.00 98.21 C +ATOM 7090 C MET F 78 -11.654 13.832 -4.052 1.00 98.21 C +ATOM 7091 CB MET F 78 -13.616 15.385 -4.053 1.00 98.21 C +ATOM 7092 O MET F 78 -10.499 14.181 -3.801 1.00 98.21 O +ATOM 7093 CG MET F 78 -12.770 16.516 -4.614 1.00 98.21 C +ATOM 7094 SD MET F 78 -13.755 17.706 -5.605 1.00 98.21 S +ATOM 7095 CE MET F 78 -12.440 18.827 -6.159 1.00 98.21 C +ATOM 7096 N ALA F 79 -11.983 12.957 -5.027 1.00 97.74 N +ATOM 7097 CA ALA F 79 -11.068 12.587 -6.104 1.00 97.74 C +ATOM 7098 C ALA F 79 -11.373 13.372 -7.377 1.00 97.74 C +ATOM 7099 CB ALA F 79 -11.144 11.087 -6.376 1.00 97.74 C +ATOM 7100 O ALA F 79 -12.447 13.219 -7.965 1.00 97.74 O +ATOM 7101 N LYS F 80 -10.493 14.203 -7.750 1.00 96.58 N +ATOM 7102 CA LYS F 80 -10.620 15.004 -8.964 1.00 96.58 C +ATOM 7103 C LYS F 80 -9.258 15.242 -9.611 1.00 96.58 C +ATOM 7104 CB LYS F 80 -11.294 16.342 -8.657 1.00 96.58 C +ATOM 7105 O LYS F 80 -8.368 15.834 -8.996 1.00 96.58 O +ATOM 7106 CG LYS F 80 -11.615 17.172 -9.891 1.00 96.58 C +ATOM 7107 CD LYS F 80 -12.509 18.357 -9.551 1.00 96.58 C +ATOM 7108 CE LYS F 80 -12.883 19.152 -10.795 1.00 96.58 C +ATOM 7109 NZ LYS F 80 -13.944 20.162 -10.509 1.00 96.58 N +ATOM 7110 N PRO F 81 -8.992 14.843 -10.858 1.00 95.46 N +ATOM 7111 CA PRO F 81 -9.896 14.064 -11.707 1.00 95.46 C +ATOM 7112 C PRO F 81 -10.113 12.643 -11.191 1.00 95.46 C +ATOM 7113 CB PRO F 81 -9.182 14.050 -13.062 1.00 95.46 C +ATOM 7114 O PRO F 81 -9.392 12.190 -10.299 1.00 95.46 O +ATOM 7115 CG PRO F 81 -7.730 14.168 -12.729 1.00 95.46 C +ATOM 7116 CD PRO F 81 -7.593 14.968 -11.466 1.00 95.46 C +ATOM 7117 N CYS F 82 -11.141 12.014 -11.616 1.00 95.01 N +ATOM 7118 CA CYS F 82 -11.409 10.625 -11.260 1.00 95.01 C +ATOM 7119 C CYS F 82 -11.288 9.717 -12.477 1.00 95.01 C +ATOM 7120 CB CYS F 82 -12.803 10.488 -10.647 1.00 95.01 C +ATOM 7121 O CYS F 82 -11.303 10.191 -13.615 1.00 95.01 O +ATOM 7122 SG CYS F 82 -14.131 11.077 -11.720 1.00 95.01 S +ATOM 7123 N VAL F 83 -11.033 8.450 -12.206 1.00 96.00 N +ATOM 7124 CA VAL F 83 -11.061 7.445 -13.264 1.00 96.00 C +ATOM 7125 C VAL F 83 -12.461 7.368 -13.868 1.00 96.00 C +ATOM 7126 CB VAL F 83 -10.629 6.057 -12.740 1.00 96.00 C +ATOM 7127 O VAL F 83 -13.459 7.393 -13.143 1.00 96.00 O +ATOM 7128 CG1 VAL F 83 -10.759 5.002 -13.836 1.00 96.00 C +ATOM 7129 CG2 VAL F 83 -9.197 6.109 -12.210 1.00 96.00 C +ATOM 7130 N VAL F 84 -12.487 7.325 -15.133 1.00 95.06 N +ATOM 7131 CA VAL F 84 -13.778 7.285 -15.812 1.00 95.06 C +ATOM 7132 C VAL F 84 -13.904 5.987 -16.607 1.00 95.06 C +ATOM 7133 CB VAL F 84 -13.967 8.502 -16.744 1.00 95.06 C +ATOM 7134 O VAL F 84 -12.898 5.362 -16.949 1.00 95.06 O +ATOM 7135 CG1 VAL F 84 -13.909 9.806 -15.950 1.00 95.06 C +ATOM 7136 CG2 VAL F 84 -12.911 8.498 -17.848 1.00 95.06 C +ATOM 7137 N VAL F 85 -15.180 5.582 -16.874 1.00 95.53 N +ATOM 7138 CA VAL F 85 -15.457 4.343 -17.593 1.00 95.53 C +ATOM 7139 C VAL F 85 -16.140 4.658 -18.922 1.00 95.53 C +ATOM 7140 CB VAL F 85 -16.335 3.386 -16.757 1.00 95.53 C +ATOM 7141 O VAL F 85 -17.066 5.471 -18.974 1.00 95.53 O +ATOM 7142 CG1 VAL F 85 -16.807 2.206 -17.605 1.00 95.53 C +ATOM 7143 CG2 VAL F 85 -15.568 2.893 -15.531 1.00 95.53 C +ATOM 7144 N ASN F 86 -15.699 4.030 -19.998 1.00 93.44 N +ATOM 7145 CA ASN F 86 -16.382 4.067 -21.286 1.00 93.44 C +ATOM 7146 C ASN F 86 -17.701 3.301 -21.243 1.00 93.44 C +ATOM 7147 CB ASN F 86 -15.480 3.509 -22.389 1.00 93.44 C +ATOM 7148 O ASN F 86 -17.750 2.166 -20.765 1.00 93.44 O +ATOM 7149 CG ASN F 86 -16.098 3.633 -23.768 1.00 93.44 C +ATOM 7150 ND2 ASN F 86 -15.275 3.954 -24.759 1.00 93.44 N +ATOM 7151 OD1 ASN F 86 -17.305 3.444 -23.940 1.00 93.44 O +ATOM 7152 N PRO F 87 -18.764 3.935 -21.772 1.00 94.89 N +ATOM 7153 CA PRO F 87 -20.069 3.275 -21.703 1.00 94.89 C +ATOM 7154 C PRO F 87 -20.100 1.949 -22.460 1.00 94.89 C +ATOM 7155 CB PRO F 87 -21.014 4.293 -22.346 1.00 94.89 C +ATOM 7156 O PRO F 87 -20.885 1.059 -22.123 1.00 94.89 O +ATOM 7157 CG PRO F 87 -20.127 5.172 -23.166 1.00 94.89 C +ATOM 7158 CD PRO F 87 -18.782 5.247 -22.501 1.00 94.89 C +ATOM 7159 N GLU F 88 -19.240 1.741 -23.359 1.00 93.30 N +ATOM 7160 CA GLU F 88 -19.257 0.540 -24.189 1.00 93.30 C +ATOM 7161 C GLU F 88 -18.306 -0.521 -23.645 1.00 93.30 C +ATOM 7162 CB GLU F 88 -18.892 0.881 -25.636 1.00 93.30 C +ATOM 7163 O GLU F 88 -18.177 -1.602 -24.223 1.00 93.30 O +ATOM 7164 CG GLU F 88 -19.874 1.827 -26.312 1.00 93.30 C +ATOM 7165 CD GLU F 88 -19.429 2.266 -27.697 1.00 93.30 C +ATOM 7166 OE1 GLU F 88 -20.212 2.942 -28.401 1.00 93.30 O +ATOM 7167 OE2 GLU F 88 -18.287 1.929 -28.083 1.00 93.30 O +ATOM 7168 N LEU F 89 -17.649 -0.190 -22.575 1.00 93.34 N +ATOM 7169 CA LEU F 89 -16.726 -1.149 -21.979 1.00 93.34 C +ATOM 7170 C LEU F 89 -17.479 -2.348 -21.411 1.00 93.34 C +ATOM 7171 CB LEU F 89 -15.898 -0.483 -20.877 1.00 93.34 C +ATOM 7172 O LEU F 89 -18.512 -2.185 -20.759 1.00 93.34 O +ATOM 7173 CG LEU F 89 -14.678 -1.261 -20.382 1.00 93.34 C +ATOM 7174 CD1 LEU F 89 -13.674 -1.449 -21.515 1.00 93.34 C +ATOM 7175 CD2 LEU F 89 -14.030 -0.545 -19.201 1.00 93.34 C +ATOM 7176 N GLY F 90 -16.924 -3.574 -21.624 1.00 92.94 N +ATOM 7177 CA GLY F 90 -17.522 -4.772 -21.054 1.00 92.94 C +ATOM 7178 C GLY F 90 -17.454 -4.810 -19.539 1.00 92.94 C +ATOM 7179 O GLY F 90 -16.486 -4.333 -18.944 1.00 92.94 O +ATOM 7180 N VAL F 91 -18.383 -5.438 -18.967 1.00 94.89 N +ATOM 7181 CA VAL F 91 -18.557 -5.431 -17.518 1.00 94.89 C +ATOM 7182 C VAL F 91 -17.364 -6.111 -16.850 1.00 94.89 C +ATOM 7183 CB VAL F 91 -19.871 -6.129 -17.101 1.00 94.89 C +ATOM 7184 O VAL F 91 -16.918 -5.687 -15.781 1.00 94.89 O +ATOM 7185 CG1 VAL F 91 -19.934 -6.300 -15.584 1.00 94.89 C +ATOM 7186 CG2 VAL F 91 -21.078 -5.339 -17.603 1.00 94.89 C +ATOM 7187 N GLU F 92 -16.877 -7.150 -17.421 1.00 94.38 N +ATOM 7188 CA GLU F 92 -15.725 -7.829 -16.837 1.00 94.38 C +ATOM 7189 C GLU F 92 -14.497 -6.922 -16.828 1.00 94.38 C +ATOM 7190 CB GLU F 92 -15.419 -9.121 -17.598 1.00 94.38 C +ATOM 7191 O GLU F 92 -13.707 -6.948 -15.882 1.00 94.38 O +ATOM 7192 CG GLU F 92 -16.497 -10.186 -17.460 1.00 94.38 C +ATOM 7193 CD GLU F 92 -17.651 -10.001 -18.433 1.00 94.38 C +ATOM 7194 OE1 GLU F 92 -18.577 -10.844 -18.443 1.00 94.38 O +ATOM 7195 OE2 GLU F 92 -17.628 -9.006 -19.191 1.00 94.38 O +ATOM 7196 N TYR F 93 -14.373 -6.180 -17.847 1.00 95.26 N +ATOM 7197 CA TYR F 93 -13.258 -5.241 -17.917 1.00 95.26 C +ATOM 7198 C TYR F 93 -13.441 -4.103 -16.921 1.00 95.26 C +ATOM 7199 CB TYR F 93 -13.118 -4.678 -19.334 1.00 95.26 C +ATOM 7200 O TYR F 93 -12.464 -3.586 -16.374 1.00 95.26 O +ATOM 7201 CG TYR F 93 -12.484 -5.640 -20.310 1.00 95.26 C +ATOM 7202 CD1 TYR F 93 -11.229 -6.191 -20.060 1.00 95.26 C +ATOM 7203 CD2 TYR F 93 -13.138 -5.998 -21.484 1.00 95.26 C +ATOM 7204 CE1 TYR F 93 -10.641 -7.076 -20.957 1.00 95.26 C +ATOM 7205 CE2 TYR F 93 -12.558 -6.883 -22.388 1.00 95.26 C +ATOM 7206 OH TYR F 93 -10.734 -8.292 -23.008 1.00 95.26 O +ATOM 7207 CZ TYR F 93 -11.312 -7.416 -22.116 1.00 95.26 C +ATOM 7208 N VAL F 94 -14.697 -3.678 -16.680 1.00 96.91 N +ATOM 7209 CA VAL F 94 -14.948 -2.708 -15.619 1.00 96.91 C +ATOM 7210 C VAL F 94 -14.495 -3.280 -14.278 1.00 96.91 C +ATOM 7211 CB VAL F 94 -16.440 -2.312 -15.553 1.00 96.91 C +ATOM 7212 O VAL F 94 -13.792 -2.611 -13.516 1.00 96.91 O +ATOM 7213 CG1 VAL F 94 -16.679 -1.286 -14.447 1.00 96.91 C +ATOM 7214 CG2 VAL F 94 -16.907 -1.767 -16.902 1.00 96.91 C +ATOM 7215 N ALA F 95 -14.886 -4.528 -14.072 1.00 98.04 N +ATOM 7216 CA ALA F 95 -14.462 -5.201 -12.847 1.00 98.04 C +ATOM 7217 C ALA F 95 -12.941 -5.218 -12.729 1.00 98.04 C +ATOM 7218 CB ALA F 95 -15.011 -6.625 -12.806 1.00 98.04 C +ATOM 7219 O ALA F 95 -12.392 -4.931 -11.662 1.00 98.04 O +ATOM 7220 N ARG F 96 -12.274 -5.544 -13.765 1.00 97.83 N +ATOM 7221 CA ARG F 96 -10.816 -5.613 -13.769 1.00 97.83 C +ATOM 7222 C ARG F 96 -10.202 -4.237 -13.537 1.00 97.83 C +ATOM 7223 CB ARG F 96 -10.309 -6.197 -15.089 1.00 97.83 C +ATOM 7224 O ARG F 96 -9.210 -4.107 -12.817 1.00 97.83 O +ATOM 7225 CG ARG F 96 -8.820 -6.506 -15.094 1.00 97.83 C +ATOM 7226 CD ARG F 96 -8.410 -7.286 -16.336 1.00 97.83 C +ATOM 7227 NE ARG F 96 -6.958 -7.354 -16.475 1.00 97.83 N +ATOM 7228 NH1 ARG F 96 -6.739 -9.363 -15.354 1.00 97.83 N +ATOM 7229 NH2 ARG F 96 -4.886 -8.302 -16.187 1.00 97.83 N +ATOM 7230 CZ ARG F 96 -6.198 -8.339 -16.005 1.00 97.83 C +ATOM 7231 N LEU F 97 -10.794 -3.208 -14.133 1.00 97.63 N +ATOM 7232 CA LEU F 97 -10.335 -1.841 -13.912 1.00 97.63 C +ATOM 7233 C LEU F 97 -10.445 -1.462 -12.439 1.00 97.63 C +ATOM 7234 CB LEU F 97 -11.143 -0.860 -14.765 1.00 97.63 C +ATOM 7235 O LEU F 97 -9.510 -0.898 -11.867 1.00 97.63 O +ATOM 7236 CG LEU F 97 -10.722 0.609 -14.692 1.00 97.63 C +ATOM 7237 CD1 LEU F 97 -9.300 0.780 -15.215 1.00 97.63 C +ATOM 7238 CD2 LEU F 97 -11.695 1.484 -15.475 1.00 97.63 C +ATOM 7239 N PHE F 98 -11.554 -1.792 -11.821 1.00 98.08 N +ATOM 7240 CA PHE F 98 -11.749 -1.529 -10.400 1.00 98.08 C +ATOM 7241 C PHE F 98 -10.711 -2.271 -9.566 1.00 98.08 C +ATOM 7242 CB PHE F 98 -13.160 -1.936 -9.965 1.00 98.08 C +ATOM 7243 O PHE F 98 -10.112 -1.694 -8.655 1.00 98.08 O +ATOM 7244 CG PHE F 98 -14.231 -0.976 -10.406 1.00 98.08 C +ATOM 7245 CD1 PHE F 98 -13.898 0.218 -11.036 1.00 98.08 C +ATOM 7246 CD2 PHE F 98 -15.572 -1.266 -10.191 1.00 98.08 C +ATOM 7247 CE1 PHE F 98 -14.888 1.108 -11.445 1.00 98.08 C +ATOM 7248 CE2 PHE F 98 -16.567 -0.381 -10.598 1.00 98.08 C +ATOM 7249 CZ PHE F 98 -16.222 0.806 -11.223 1.00 98.08 C +ATOM 7250 N ALA F 99 -10.502 -3.510 -9.944 1.00 97.80 N +ATOM 7251 CA ALA F 99 -9.529 -4.314 -9.209 1.00 97.80 C +ATOM 7252 C ALA F 99 -8.127 -3.722 -9.327 1.00 97.80 C +ATOM 7253 CB ALA F 99 -9.539 -5.755 -9.714 1.00 97.80 C +ATOM 7254 O ALA F 99 -7.399 -3.633 -8.335 1.00 97.80 O +ATOM 7255 N GLN F 100 -7.732 -3.274 -10.443 1.00 96.17 N +ATOM 7256 CA GLN F 100 -6.394 -2.757 -10.706 1.00 96.17 C +ATOM 7257 C GLN F 100 -6.188 -1.399 -10.041 1.00 96.17 C +ATOM 7258 CB GLN F 100 -6.147 -2.646 -12.212 1.00 96.17 C +ATOM 7259 O GLN F 100 -5.099 -1.105 -9.543 1.00 96.17 O +ATOM 7260 CG GLN F 100 -5.951 -3.989 -12.903 1.00 96.17 C +ATOM 7261 CD GLN F 100 -5.897 -3.868 -14.414 1.00 96.17 C +ATOM 7262 NE2 GLN F 100 -5.466 -4.935 -15.079 1.00 96.17 N +ATOM 7263 OE1 GLN F 100 -6.240 -2.825 -14.980 1.00 96.17 O +ATOM 7264 N THR F 101 -7.220 -0.585 -10.020 1.00 96.59 N +ATOM 7265 CA THR F 101 -7.096 0.777 -9.513 1.00 96.59 C +ATOM 7266 C THR F 101 -7.566 0.860 -8.063 1.00 96.59 C +ATOM 7267 CB THR F 101 -7.900 1.769 -10.373 1.00 96.59 C +ATOM 7268 O THR F 101 -7.420 1.899 -7.416 1.00 96.59 O +ATOM 7269 CG2 THR F 101 -7.380 1.801 -11.807 1.00 96.59 C +ATOM 7270 OG1 THR F 101 -9.277 1.374 -10.385 1.00 96.59 O +ATOM 7271 N ARG F 102 -8.260 -0.156 -7.564 1.00 95.73 N +ATOM 7272 CA ARG F 102 -8.751 -0.270 -6.195 1.00 95.73 C +ATOM 7273 C ARG F 102 -9.839 0.762 -5.916 1.00 95.73 C +ATOM 7274 CB ARG F 102 -7.604 -0.105 -5.196 1.00 95.73 C +ATOM 7275 O ARG F 102 -9.879 1.352 -4.835 1.00 95.73 O +ATOM 7276 CG ARG F 102 -6.547 -1.194 -5.286 1.00 95.73 C +ATOM 7277 CD ARG F 102 -7.063 -2.525 -4.758 1.00 95.73 C +ATOM 7278 NE ARG F 102 -6.001 -3.524 -4.684 1.00 95.73 N +ATOM 7279 NH1 ARG F 102 -7.192 -4.994 -3.358 1.00 95.73 N +ATOM 7280 NH2 ARG F 102 -5.059 -5.511 -4.020 1.00 95.73 N +ATOM 7281 CZ ARG F 102 -6.086 -4.674 -4.021 1.00 95.73 C +ATOM 7282 N ILE F 103 -10.595 1.032 -6.957 1.00 96.45 N +ATOM 7283 CA ILE F 103 -11.788 1.850 -6.767 1.00 96.45 C +ATOM 7284 C ILE F 103 -13.034 0.971 -6.854 1.00 96.45 C +ATOM 7285 CB ILE F 103 -11.863 2.991 -7.806 1.00 96.45 C +ATOM 7286 O ILE F 103 -12.957 -0.187 -7.270 1.00 96.45 O +ATOM 7287 CG1 ILE F 103 -11.993 2.417 -9.222 1.00 96.45 C +ATOM 7288 CG2 ILE F 103 -10.639 3.904 -7.695 1.00 96.45 C +ATOM 7289 CD1 ILE F 103 -12.236 3.467 -10.296 1.00 96.45 C +ATOM 7290 N ARG F 104 -14.165 1.512 -6.436 1.00 96.56 N +ATOM 7291 CA ARG F 104 -15.369 0.690 -6.360 1.00 96.56 C +ATOM 7292 C ARG F 104 -16.502 1.303 -7.175 1.00 96.56 C +ATOM 7293 CB ARG F 104 -15.806 0.511 -4.905 1.00 96.56 C +ATOM 7294 O ARG F 104 -17.560 0.690 -7.336 1.00 96.56 O +ATOM 7295 CG ARG F 104 -14.812 -0.263 -4.053 1.00 96.56 C +ATOM 7296 CD ARG F 104 -15.121 -0.133 -2.568 1.00 96.56 C +ATOM 7297 NE ARG F 104 -14.071 -0.726 -1.745 1.00 96.56 N +ATOM 7298 NH1 ARG F 104 -15.061 -0.189 0.272 1.00 96.56 N +ATOM 7299 NH2 ARG F 104 -13.060 -1.306 0.233 1.00 96.56 N +ATOM 7300 CZ ARG F 104 -14.066 -0.739 -0.415 1.00 96.56 C +ATOM 7301 N ARG F 105 -16.270 2.512 -7.562 1.00 97.29 N +ATOM 7302 CA ARG F 105 -17.254 3.207 -8.385 1.00 97.29 C +ATOM 7303 C ARG F 105 -16.588 4.264 -9.260 1.00 97.29 C +ATOM 7304 CB ARG F 105 -18.329 3.853 -7.508 1.00 97.29 C +ATOM 7305 O ARG F 105 -15.528 4.789 -8.910 1.00 97.29 O +ATOM 7306 CG ARG F 105 -17.808 4.972 -6.620 1.00 97.29 C +ATOM 7307 CD ARG F 105 -18.853 5.422 -5.609 1.00 97.29 C +ATOM 7308 NE ARG F 105 -19.354 4.302 -4.817 1.00 97.29 N +ATOM 7309 NH1 ARG F 105 -21.494 5.145 -4.599 1.00 97.29 N +ATOM 7310 NH2 ARG F 105 -20.947 3.134 -3.645 1.00 97.29 N +ATOM 7311 CZ ARG F 105 -20.597 4.196 -4.356 1.00 97.29 C +ATOM 7312 N ALA F 106 -17.228 4.536 -10.361 1.00 97.58 N +ATOM 7313 CA ALA F 106 -16.705 5.515 -11.311 1.00 97.58 C +ATOM 7314 C ALA F 106 -17.820 6.075 -12.190 1.00 97.58 C +ATOM 7315 CB ALA F 106 -15.615 4.887 -12.175 1.00 97.58 C +ATOM 7316 O ALA F 106 -18.810 5.390 -12.460 1.00 97.58 O +ATOM 7317 N PRO F 107 -17.644 7.333 -12.582 1.00 97.27 N +ATOM 7318 CA PRO F 107 -18.602 7.860 -13.556 1.00 97.27 C +ATOM 7319 C PRO F 107 -18.438 7.240 -14.941 1.00 97.27 C +ATOM 7320 CB PRO F 107 -18.285 9.357 -13.587 1.00 97.27 C +ATOM 7321 O PRO F 107 -17.322 6.893 -15.338 1.00 97.27 O +ATOM 7322 CG PRO F 107 -16.861 9.456 -13.143 1.00 97.27 C +ATOM 7323 CD PRO F 107 -16.559 8.289 -12.247 1.00 97.27 C +ATOM 7324 N VAL F 108 -19.542 7.026 -15.609 1.00 96.88 N +ATOM 7325 CA VAL F 108 -19.575 6.609 -17.007 1.00 96.88 C +ATOM 7326 C VAL F 108 -19.759 7.829 -17.907 1.00 96.88 C +ATOM 7327 CB VAL F 108 -20.698 5.581 -17.266 1.00 96.88 C +ATOM 7328 O VAL F 108 -20.799 8.489 -17.862 1.00 96.88 O +ATOM 7329 CG1 VAL F 108 -20.660 5.093 -18.714 1.00 96.88 C +ATOM 7330 CG2 VAL F 108 -20.578 4.404 -16.300 1.00 96.88 C +ATOM 7331 N ILE F 109 -18.773 8.108 -18.683 1.00 92.76 N +ATOM 7332 CA ILE F 109 -18.770 9.336 -19.471 1.00 92.76 C +ATOM 7333 C ILE F 109 -18.584 9.000 -20.948 1.00 92.76 C +ATOM 7334 CB ILE F 109 -17.665 10.307 -18.999 1.00 92.76 C +ATOM 7335 O ILE F 109 -17.741 8.172 -21.302 1.00 92.76 O +ATOM 7336 CG1 ILE F 109 -17.899 10.714 -17.539 1.00 92.76 C +ATOM 7337 CG2 ILE F 109 -17.605 11.539 -19.907 1.00 92.76 C +ATOM 7338 CD1 ILE F 109 -16.809 11.607 -16.963 1.00 92.76 C +ATOM 7339 N GLN F 110 -19.360 9.571 -21.866 1.00 90.14 N +ATOM 7340 CA GLN F 110 -19.216 9.535 -23.317 1.00 90.14 C +ATOM 7341 C GLN F 110 -18.854 10.912 -23.867 1.00 90.14 C +ATOM 7342 CB GLN F 110 -20.502 9.030 -23.973 1.00 90.14 C +ATOM 7343 O GLN F 110 -19.685 11.822 -23.875 1.00 90.14 O +ATOM 7344 CG GLN F 110 -20.378 8.800 -25.473 1.00 90.14 C +ATOM 7345 CD GLN F 110 -21.559 8.042 -26.050 1.00 90.14 C +ATOM 7346 NE2 GLN F 110 -21.286 7.144 -26.990 1.00 90.14 N +ATOM 7347 OE1 GLN F 110 -22.708 8.263 -25.654 1.00 90.14 O +ATOM 7348 N GLY F 111 -17.597 11.045 -24.300 1.00 83.24 N +ATOM 7349 CA GLY F 111 -17.148 12.384 -24.648 1.00 83.24 C +ATOM 7350 C GLY F 111 -17.087 13.322 -23.458 1.00 83.24 C +ATOM 7351 O GLY F 111 -16.298 13.110 -22.534 1.00 83.24 O +ATOM 7352 N LYS F 112 -18.044 14.300 -23.533 1.00 83.31 N +ATOM 7353 CA LYS F 112 -18.099 15.258 -22.432 1.00 83.31 C +ATOM 7354 C LYS F 112 -19.385 15.095 -21.626 1.00 83.31 C +ATOM 7355 CB LYS F 112 -17.989 16.689 -22.959 1.00 83.31 C +ATOM 7356 O LYS F 112 -19.638 15.856 -20.690 1.00 83.31 O +ATOM 7357 CG LYS F 112 -16.631 17.026 -23.557 1.00 83.31 C +ATOM 7358 CD LYS F 112 -16.514 18.510 -23.878 1.00 83.31 C +ATOM 7359 CE LYS F 112 -15.132 18.860 -24.412 1.00 83.31 C +ATOM 7360 NZ LYS F 112 -14.999 20.322 -24.690 1.00 83.31 N +ATOM 7361 N THR F 113 -20.048 14.047 -21.931 1.00 89.76 N +ATOM 7362 CA THR F 113 -21.365 13.901 -21.321 1.00 89.76 C +ATOM 7363 C THR F 113 -21.343 12.828 -20.237 1.00 89.76 C +ATOM 7364 CB THR F 113 -22.432 13.549 -22.374 1.00 89.76 C +ATOM 7365 O THR F 113 -20.878 11.710 -20.471 1.00 89.76 O +ATOM 7366 CG2 THR F 113 -23.829 13.543 -21.760 1.00 89.76 C +ATOM 7367 OG1 THR F 113 -22.391 14.517 -23.430 1.00 89.76 O +ATOM 7368 N LEU F 114 -21.796 13.205 -19.130 1.00 94.01 N +ATOM 7369 CA LEU F 114 -21.957 12.264 -18.027 1.00 94.01 C +ATOM 7370 C LEU F 114 -23.214 11.421 -18.211 1.00 94.01 C +ATOM 7371 CB LEU F 114 -22.019 13.009 -16.691 1.00 94.01 C +ATOM 7372 O LEU F 114 -24.324 11.955 -18.255 1.00 94.01 O +ATOM 7373 CG LEU F 114 -22.250 12.151 -15.446 1.00 94.01 C +ATOM 7374 CD1 LEU F 114 -21.058 11.231 -15.208 1.00 94.01 C +ATOM 7375 CD2 LEU F 114 -22.502 13.033 -14.228 1.00 94.01 C +ATOM 7376 N LEU F 115 -23.137 10.087 -18.262 1.00 95.79 N +ATOM 7377 CA LEU F 115 -24.271 9.204 -18.513 1.00 95.79 C +ATOM 7378 C LEU F 115 -24.774 8.583 -17.215 1.00 95.79 C +ATOM 7379 CB LEU F 115 -23.883 8.103 -19.503 1.00 95.79 C +ATOM 7380 O LEU F 115 -25.968 8.309 -17.076 1.00 95.79 O +ATOM 7381 CG LEU F 115 -23.495 8.561 -20.910 1.00 95.79 C +ATOM 7382 CD1 LEU F 115 -23.234 7.356 -21.807 1.00 95.79 C +ATOM 7383 CD2 LEU F 115 -24.584 9.449 -21.503 1.00 95.79 C +ATOM 7384 N GLY F 116 -23.838 8.303 -16.294 1.00 96.43 N +ATOM 7385 CA GLY F 116 -24.192 7.644 -15.048 1.00 96.43 C +ATOM 7386 C GLY F 116 -22.988 7.306 -14.188 1.00 96.43 C +ATOM 7387 O GLY F 116 -21.930 7.923 -14.324 1.00 96.43 O +ATOM 7388 N ILE F 117 -23.217 6.433 -13.161 1.00 97.18 N +ATOM 7389 CA ILE F 117 -22.190 5.898 -12.274 1.00 97.18 C +ATOM 7390 C ILE F 117 -22.268 4.373 -12.254 1.00 97.18 C +ATOM 7391 CB ILE F 117 -22.332 6.460 -10.841 1.00 97.18 C +ATOM 7392 O ILE F 117 -23.360 3.801 -12.230 1.00 97.18 O +ATOM 7393 CG1 ILE F 117 -22.040 7.965 -10.827 1.00 97.18 C +ATOM 7394 CG2 ILE F 117 -21.408 5.713 -9.875 1.00 97.18 C +ATOM 7395 CD1 ILE F 117 -22.257 8.625 -9.472 1.00 97.18 C +ATOM 7396 N ILE F 118 -21.220 3.728 -12.353 1.00 97.85 N +ATOM 7397 CA ILE F 118 -21.174 2.275 -12.241 1.00 97.85 C +ATOM 7398 C ILE F 118 -20.364 1.878 -11.008 1.00 97.85 C +ATOM 7399 CB ILE F 118 -20.571 1.629 -13.509 1.00 97.85 C +ATOM 7400 O ILE F 118 -19.333 2.487 -10.713 1.00 97.85 O +ATOM 7401 CG1 ILE F 118 -20.654 0.101 -13.420 1.00 97.85 C +ATOM 7402 CG2 ILE F 118 -19.125 2.088 -13.713 1.00 97.85 C +ATOM 7403 CD1 ILE F 118 -20.442 -0.608 -14.751 1.00 97.85 C +ATOM 7404 N SER F 119 -20.808 0.896 -10.277 1.00 97.67 N +ATOM 7405 CA SER F 119 -20.152 0.467 -9.046 1.00 97.67 C +ATOM 7406 C SER F 119 -20.009 -1.050 -8.996 1.00 97.67 C +ATOM 7407 CB SER F 119 -20.934 0.954 -7.825 1.00 97.67 C +ATOM 7408 O SER F 119 -20.562 -1.759 -9.839 1.00 97.67 O +ATOM 7409 OG SER F 119 -22.159 0.252 -7.699 1.00 97.67 O +ATOM 7410 N VAL F 120 -19.266 -1.544 -8.030 1.00 97.81 N +ATOM 7411 CA VAL F 120 -19.145 -2.977 -7.785 1.00 97.81 C +ATOM 7412 C VAL F 120 -20.523 -3.573 -7.506 1.00 97.81 C +ATOM 7413 CB VAL F 120 -18.188 -3.272 -6.608 1.00 97.81 C +ATOM 7414 O VAL F 120 -20.793 -4.722 -7.862 1.00 97.81 O +ATOM 7415 CG1 VAL F 120 -16.751 -2.907 -6.975 1.00 97.81 C +ATOM 7416 CG2 VAL F 120 -18.633 -2.516 -5.357 1.00 97.81 C +ATOM 7417 N SER F 121 -21.431 -2.804 -6.922 1.00 97.03 N +ATOM 7418 CA SER F 121 -22.790 -3.265 -6.655 1.00 97.03 C +ATOM 7419 C SER F 121 -23.560 -3.494 -7.951 1.00 97.03 C +ATOM 7420 CB SER F 121 -23.536 -2.258 -5.780 1.00 97.03 C +ATOM 7421 O SER F 121 -24.279 -4.487 -8.085 1.00 97.03 O +ATOM 7422 OG SER F 121 -22.918 -2.140 -4.510 1.00 97.03 O +ATOM 7423 N ASP F 122 -23.351 -2.579 -8.824 1.00 97.40 N +ATOM 7424 CA ASP F 122 -24.004 -2.751 -10.118 1.00 97.40 C +ATOM 7425 C ASP F 122 -23.536 -4.033 -10.804 1.00 97.40 C +ATOM 7426 CB ASP F 122 -23.736 -1.545 -11.020 1.00 97.40 C +ATOM 7427 O ASP F 122 -24.347 -4.779 -11.357 1.00 97.40 O +ATOM 7428 CG ASP F 122 -24.428 -0.281 -10.540 1.00 97.40 C +ATOM 7429 OD1 ASP F 122 -25.598 -0.353 -10.104 1.00 97.40 O +ATOM 7430 OD2 ASP F 122 -23.799 0.798 -10.600 1.00 97.40 O +ATOM 7431 N ILE F 123 -22.255 -4.277 -10.752 1.00 98.06 N +ATOM 7432 CA ILE F 123 -21.702 -5.473 -11.377 1.00 98.06 C +ATOM 7433 C ILE F 123 -22.274 -6.719 -10.704 1.00 98.06 C +ATOM 7434 CB ILE F 123 -20.158 -5.486 -11.305 1.00 98.06 C +ATOM 7435 O ILE F 123 -22.713 -7.652 -11.381 1.00 98.06 O +ATOM 7436 CG1 ILE F 123 -19.575 -4.335 -12.132 1.00 98.06 C +ATOM 7437 CG2 ILE F 123 -19.607 -6.835 -11.777 1.00 98.06 C +ATOM 7438 CD1 ILE F 123 -18.073 -4.153 -11.966 1.00 98.06 C +ATOM 7439 N LEU F 124 -22.349 -6.702 -9.431 1.00 98.23 N +ATOM 7440 CA LEU F 124 -22.816 -7.868 -8.689 1.00 98.23 C +ATOM 7441 C LEU F 124 -24.301 -8.111 -8.937 1.00 98.23 C +ATOM 7442 CB LEU F 124 -22.560 -7.686 -7.190 1.00 98.23 C +ATOM 7443 O LEU F 124 -24.709 -9.238 -9.228 1.00 98.23 O +ATOM 7444 CG LEU F 124 -22.849 -8.898 -6.302 1.00 98.23 C +ATOM 7445 CD1 LEU F 124 -21.662 -9.855 -6.310 1.00 98.23 C +ATOM 7446 CD2 LEU F 124 -23.174 -8.453 -4.880 1.00 98.23 C +ATOM 7447 N PHE F 125 -25.110 -7.116 -8.891 1.00 97.62 N +ATOM 7448 CA PHE F 125 -26.560 -7.272 -8.847 1.00 97.62 C +ATOM 7449 C PHE F 125 -27.144 -7.297 -10.254 1.00 97.62 C +ATOM 7450 CB PHE F 125 -27.198 -6.141 -8.034 1.00 97.62 C +ATOM 7451 O PHE F 125 -28.204 -7.885 -10.481 1.00 97.62 O +ATOM 7452 CG PHE F 125 -27.033 -6.295 -6.546 1.00 97.62 C +ATOM 7453 CD1 PHE F 125 -27.793 -7.221 -5.841 1.00 97.62 C +ATOM 7454 CD2 PHE F 125 -26.118 -5.515 -5.853 1.00 97.62 C +ATOM 7455 CE1 PHE F 125 -27.642 -7.366 -4.464 1.00 97.62 C +ATOM 7456 CE2 PHE F 125 -25.962 -5.654 -4.476 1.00 97.62 C +ATOM 7457 CZ PHE F 125 -26.726 -6.579 -3.784 1.00 97.62 C +ATOM 7458 N LYS F 126 -26.461 -6.669 -11.206 1.00 97.41 N +ATOM 7459 CA LYS F 126 -27.143 -6.438 -12.475 1.00 97.41 C +ATOM 7460 C LYS F 126 -26.425 -7.142 -13.622 1.00 97.41 C +ATOM 7461 CB LYS F 126 -27.247 -4.939 -12.764 1.00 97.41 C +ATOM 7462 O LYS F 126 -26.991 -7.314 -14.704 1.00 97.41 O +ATOM 7463 CG LYS F 126 -27.982 -4.151 -11.689 1.00 97.41 C +ATOM 7464 CD LYS F 126 -28.017 -2.663 -12.012 1.00 97.41 C +ATOM 7465 CE LYS F 126 -28.577 -1.851 -10.852 1.00 97.41 C +ATOM 7466 NZ LYS F 126 -28.444 -0.383 -11.089 1.00 97.41 N +ATOM 7467 N SER F 127 -25.224 -7.589 -13.439 1.00 96.44 N +ATOM 7468 CA SER F 127 -24.476 -8.161 -14.554 1.00 96.44 C +ATOM 7469 C SER F 127 -24.731 -9.660 -14.679 1.00 96.44 C +ATOM 7470 CB SER F 127 -22.979 -7.902 -14.385 1.00 96.44 C +ATOM 7471 O SER F 127 -25.509 -10.229 -13.911 1.00 96.44 O +ATOM 7472 OG SER F 127 -22.397 -8.862 -13.520 1.00 96.44 O +ATOM 7473 N ASP F 128 -24.103 -10.233 -15.699 1.00 95.85 N +ATOM 7474 CA ASP F 128 -24.327 -11.647 -15.981 1.00 95.85 C +ATOM 7475 C ASP F 128 -23.036 -12.449 -15.827 1.00 95.85 C +ATOM 7476 CB ASP F 128 -24.894 -11.830 -17.391 1.00 95.85 C +ATOM 7477 O ASP F 128 -22.849 -13.469 -16.493 1.00 95.85 O +ATOM 7478 CG ASP F 128 -23.980 -11.283 -18.473 1.00 95.85 C +ATOM 7479 OD1 ASP F 128 -22.922 -10.705 -18.144 1.00 95.85 O +ATOM 7480 OD2 ASP F 128 -24.323 -11.428 -19.667 1.00 95.85 O +ATOM 7481 N PHE F 129 -22.164 -12.010 -14.982 1.00 95.42 N +ATOM 7482 CA PHE F 129 -20.865 -12.662 -14.871 1.00 95.42 C +ATOM 7483 C PHE F 129 -21.005 -14.044 -14.244 1.00 95.42 C +ATOM 7484 CB PHE F 129 -19.901 -11.806 -14.044 1.00 95.42 C +ATOM 7485 O PHE F 129 -20.133 -14.899 -14.411 1.00 95.42 O +ATOM 7486 CG PHE F 129 -20.202 -11.805 -12.569 1.00 95.42 C +ATOM 7487 CD1 PHE F 129 -21.109 -10.901 -12.031 1.00 95.42 C +ATOM 7488 CD2 PHE F 129 -19.576 -12.709 -11.721 1.00 95.42 C +ATOM 7489 CE1 PHE F 129 -21.390 -10.898 -10.667 1.00 95.42 C +ATOM 7490 CE2 PHE F 129 -19.851 -12.713 -10.356 1.00 95.42 C +ATOM 7491 CZ PHE F 129 -20.758 -11.806 -9.831 1.00 95.42 C +ATOM 7492 N VAL F 130 -22.078 -14.262 -13.472 1.00 96.77 N +ATOM 7493 CA VAL F 130 -22.312 -15.581 -12.894 1.00 96.77 C +ATOM 7494 C VAL F 130 -22.787 -16.544 -13.978 1.00 96.77 C +ATOM 7495 CB VAL F 130 -23.343 -15.521 -11.744 1.00 96.77 C +ATOM 7496 O VAL F 130 -22.287 -17.667 -14.083 1.00 96.77 O +ATOM 7497 CG1 VAL F 130 -23.701 -16.927 -11.267 1.00 96.77 C +ATOM 7498 CG2 VAL F 130 -22.803 -14.682 -10.587 1.00 96.77 C +ATOM 7499 N GLU F 131 -23.700 -16.072 -14.820 1.00 94.52 N +ATOM 7500 CA GLU F 131 -24.301 -16.903 -15.859 1.00 94.52 C +ATOM 7501 C GLU F 131 -23.336 -17.114 -17.023 1.00 94.52 C +ATOM 7502 CB GLU F 131 -25.603 -16.275 -16.363 1.00 94.52 C +ATOM 7503 O GLU F 131 -23.288 -18.199 -17.607 1.00 94.52 O +ATOM 7504 CG GLU F 131 -26.699 -16.202 -15.310 1.00 94.52 C +ATOM 7505 CD GLU F 131 -26.519 -15.049 -14.335 1.00 94.52 C +ATOM 7506 OE1 GLU F 131 -27.168 -15.052 -13.265 1.00 94.52 O +ATOM 7507 OE2 GLU F 131 -25.723 -14.135 -14.645 1.00 94.52 O +ATOM 7508 N LYS F 132 -22.616 -16.085 -17.321 1.00 92.47 N +ATOM 7509 CA LYS F 132 -21.713 -16.138 -18.467 1.00 92.47 C +ATOM 7510 C LYS F 132 -20.302 -15.706 -18.076 1.00 92.47 C +ATOM 7511 CB LYS F 132 -22.235 -15.258 -19.603 1.00 92.47 C +ATOM 7512 O LYS F 132 -19.796 -14.699 -18.575 1.00 92.47 O +ATOM 7513 CG LYS F 132 -23.615 -15.653 -20.107 1.00 92.47 C +ATOM 7514 CD LYS F 132 -24.081 -14.739 -21.233 1.00 92.47 C +ATOM 7515 CE LYS F 132 -25.497 -15.078 -21.680 1.00 92.47 C +ATOM 7516 NZ LYS F 132 -25.995 -14.123 -22.715 1.00 92.47 N +ATOM 7517 N PRO F 133 -19.709 -16.615 -17.356 1.00 91.05 N +ATOM 7518 CA PRO F 133 -18.318 -16.267 -17.055 1.00 91.05 C +ATOM 7519 C PRO F 133 -17.436 -16.230 -18.301 1.00 91.05 C +ATOM 7520 CB PRO F 133 -17.873 -17.382 -16.105 1.00 91.05 C +ATOM 7521 O PRO F 133 -17.611 -17.046 -19.210 1.00 91.05 O +ATOM 7522 CG PRO F 133 -18.786 -18.527 -16.406 1.00 91.05 C +ATOM 7523 CD PRO F 133 -20.071 -17.981 -16.957 1.00 91.05 C +ATOM 7524 N LYS F 134 -16.501 -15.205 -18.353 1.00 86.55 N +ATOM 7525 CA LYS F 134 -15.705 -15.023 -19.563 1.00 86.55 C +ATOM 7526 C LYS F 134 -14.212 -15.061 -19.249 1.00 86.55 C +ATOM 7527 CB LYS F 134 -16.063 -13.703 -20.247 1.00 86.55 C +ATOM 7528 O LYS F 134 -13.743 -14.363 -18.348 1.00 86.55 O +ATOM 7529 CG LYS F 134 -17.485 -13.650 -20.786 1.00 86.55 C +ATOM 7530 CD LYS F 134 -17.782 -12.312 -21.450 1.00 86.55 C +ATOM 7531 CE LYS F 134 -19.232 -12.222 -21.904 1.00 86.55 C +ATOM 7532 NZ LYS F 134 -19.546 -10.887 -22.495 1.00 86.55 N +ATOM 7533 N ARG F 135 -13.486 -15.910 -19.991 1.00 88.72 N +ATOM 7534 CA ARG F 135 -12.028 -15.858 -19.987 1.00 88.72 C +ATOM 7535 C ARG F 135 -11.521 -14.669 -20.796 1.00 88.72 C +ATOM 7536 CB ARG F 135 -11.441 -17.158 -20.543 1.00 88.72 C +ATOM 7537 O ARG F 135 -11.561 -14.686 -22.028 1.00 88.72 O +ATOM 7538 CG ARG F 135 -9.966 -17.350 -20.230 1.00 88.72 C +ATOM 7539 CD ARG F 135 -9.516 -18.780 -20.495 1.00 88.72 C +ATOM 7540 NE ARG F 135 -8.127 -18.990 -20.097 1.00 88.72 N +ATOM 7541 NH1 ARG F 135 -8.196 -21.289 -20.311 1.00 88.72 N +ATOM 7542 NH2 ARG F 135 -6.263 -20.254 -19.645 1.00 88.72 N +ATOM 7543 CZ ARG F 135 -7.532 -20.177 -20.019 1.00 88.72 C +ATOM 7544 N LEU F 136 -11.017 -13.730 -20.261 1.00 87.69 N +ATOM 7545 CA LEU F 136 -10.805 -12.402 -20.826 1.00 87.69 C +ATOM 7546 C LEU F 136 -9.791 -12.450 -21.964 1.00 87.69 C +ATOM 7547 CB LEU F 136 -10.329 -11.428 -19.745 1.00 87.69 C +ATOM 7548 O LEU F 136 -9.991 -11.823 -23.007 1.00 87.69 O +ATOM 7549 CG LEU F 136 -11.338 -11.089 -18.647 1.00 87.69 C +ATOM 7550 CD1 LEU F 136 -10.681 -10.234 -17.568 1.00 87.69 C +ATOM 7551 CD2 LEU F 136 -12.551 -10.376 -19.236 1.00 87.69 C +ATOM 7552 N PHE F 137 -8.759 -13.276 -21.918 1.00 92.99 N +ATOM 7553 CA PHE F 137 -7.691 -13.226 -22.911 1.00 92.99 C +ATOM 7554 C PHE F 137 -7.611 -14.536 -23.685 1.00 92.99 C +ATOM 7555 CB PHE F 137 -6.346 -12.929 -22.241 1.00 92.99 C +ATOM 7556 O PHE F 137 -6.523 -14.972 -24.066 1.00 92.99 O +ATOM 7557 CG PHE F 137 -6.347 -11.677 -21.405 1.00 92.99 C +ATOM 7558 CD1 PHE F 137 -6.776 -10.469 -21.940 1.00 92.99 C +ATOM 7559 CD2 PHE F 137 -5.920 -11.710 -20.084 1.00 92.99 C +ATOM 7560 CE1 PHE F 137 -6.778 -9.308 -21.169 1.00 92.99 C +ATOM 7561 CE2 PHE F 137 -5.920 -10.554 -19.308 1.00 92.99 C +ATOM 7562 CZ PHE F 137 -6.348 -9.355 -19.852 1.00 92.99 C +ATOM 7563 N ILE F 138 -8.732 -15.164 -23.875 1.00 93.02 N +ATOM 7564 CA ILE F 138 -8.777 -16.484 -24.493 1.00 93.02 C +ATOM 7565 C ILE F 138 -8.276 -16.398 -25.933 1.00 93.02 C +ATOM 7566 CB ILE F 138 -10.204 -17.077 -24.456 1.00 93.02 C +ATOM 7567 O ILE F 138 -7.603 -17.310 -26.418 1.00 93.02 O +ATOM 7568 CG1 ILE F 138 -10.190 -18.534 -24.933 1.00 93.02 C +ATOM 7569 CG2 ILE F 138 -11.161 -16.233 -25.303 1.00 93.02 C +ATOM 7570 CD1 ILE F 138 -9.528 -19.498 -23.958 1.00 93.02 C +ATOM 7571 N GLU F 139 -8.583 -15.278 -26.603 1.00 93.26 N +ATOM 7572 CA GLU F 139 -8.125 -15.133 -27.982 1.00 93.26 C +ATOM 7573 C GLU F 139 -6.604 -15.024 -28.049 1.00 93.26 C +ATOM 7574 CB GLU F 139 -8.770 -13.910 -28.638 1.00 93.26 C +ATOM 7575 O GLU F 139 -5.970 -15.630 -28.915 1.00 93.26 O +ATOM 7576 CG GLU F 139 -10.280 -14.020 -28.792 1.00 93.26 C +ATOM 7577 CD GLU F 139 -10.710 -15.182 -29.672 1.00 93.26 C +ATOM 7578 OE1 GLU F 139 -11.801 -15.751 -29.437 1.00 93.26 O +ATOM 7579 OE2 GLU F 139 -9.950 -15.528 -30.604 1.00 93.26 O +ATOM 7580 N ASP F 140 -6.023 -14.282 -27.176 1.00 95.13 N +ATOM 7581 CA ASP F 140 -4.568 -14.198 -27.100 1.00 95.13 C +ATOM 7582 C ASP F 140 -3.955 -15.556 -26.767 1.00 95.13 C +ATOM 7583 CB ASP F 140 -4.145 -13.160 -26.057 1.00 95.13 C +ATOM 7584 O ASP F 140 -2.940 -15.944 -27.348 1.00 95.13 O +ATOM 7585 CG ASP F 140 -4.389 -11.731 -26.509 1.00 95.13 C +ATOM 7586 OD1 ASP F 140 -4.186 -11.426 -27.704 1.00 95.13 O +ATOM 7587 OD2 ASP F 140 -4.787 -10.902 -25.662 1.00 95.13 O +ATOM 7588 N GLU F 141 -4.553 -16.225 -25.896 1.00 96.32 N +ATOM 7589 CA GLU F 141 -4.062 -17.540 -25.495 1.00 96.32 C +ATOM 7590 C GLU F 141 -4.078 -18.517 -26.667 1.00 96.32 C +ATOM 7591 CB GLU F 141 -4.895 -18.094 -24.336 1.00 96.32 C +ATOM 7592 O GLU F 141 -3.152 -19.314 -26.830 1.00 96.32 O +ATOM 7593 CG GLU F 141 -4.729 -17.323 -23.035 1.00 96.32 C +ATOM 7594 CD GLU F 141 -5.618 -17.839 -21.914 1.00 96.32 C +ATOM 7595 OE1 GLU F 141 -6.214 -17.014 -21.184 1.00 96.32 O +ATOM 7596 OE2 GLU F 141 -5.720 -19.077 -21.765 1.00 96.32 O +ATOM 7597 N ILE F 142 -5.176 -18.471 -27.433 1.00 96.46 N +ATOM 7598 CA ILE F 142 -5.303 -19.343 -28.596 1.00 96.46 C +ATOM 7599 C ILE F 142 -4.187 -19.039 -29.593 1.00 96.46 C +ATOM 7600 CB ILE F 142 -6.683 -19.185 -29.272 1.00 96.46 C +ATOM 7601 O ILE F 142 -3.525 -19.953 -30.090 1.00 96.46 O +ATOM 7602 CG1 ILE F 142 -7.783 -19.781 -28.386 1.00 96.46 C +ATOM 7603 CG2 ILE F 142 -6.683 -19.838 -30.658 1.00 96.46 C +ATOM 7604 CD1 ILE F 142 -9.196 -19.418 -28.825 1.00 96.46 C +ATOM 7605 N GLU F 143 -3.978 -17.793 -29.831 1.00 96.44 N +ATOM 7606 CA GLU F 143 -2.926 -17.406 -30.766 1.00 96.44 C +ATOM 7607 C GLU F 143 -1.552 -17.837 -30.260 1.00 96.44 C +ATOM 7608 CB GLU F 143 -2.948 -15.894 -31.004 1.00 96.44 C +ATOM 7609 O GLU F 143 -0.745 -18.372 -31.023 1.00 96.44 O +ATOM 7610 CG GLU F 143 -2.053 -15.438 -32.148 1.00 96.44 C +ATOM 7611 CD GLU F 143 -2.211 -13.963 -32.482 1.00 96.44 C +ATOM 7612 OE1 GLU F 143 -1.477 -13.458 -33.361 1.00 96.44 O +ATOM 7613 OE2 GLU F 143 -3.074 -13.307 -31.858 1.00 96.44 O +ATOM 7614 N ALA F 144 -1.307 -17.650 -29.055 1.00 96.51 N +ATOM 7615 CA ALA F 144 -0.044 -18.076 -28.460 1.00 96.51 C +ATOM 7616 C ALA F 144 0.124 -19.590 -28.555 1.00 96.51 C +ATOM 7617 CB ALA F 144 0.036 -17.626 -27.003 1.00 96.51 C +ATOM 7618 O ALA F 144 1.197 -20.081 -28.914 1.00 96.51 O +ATOM 7619 N ALA F 145 -0.933 -20.291 -28.245 1.00 97.01 N +ATOM 7620 CA ALA F 145 -0.891 -21.750 -28.305 1.00 97.01 C +ATOM 7621 C ALA F 145 -0.634 -22.232 -29.730 1.00 97.01 C +ATOM 7622 CB ALA F 145 -2.194 -22.342 -27.773 1.00 97.01 C +ATOM 7623 O ALA F 145 0.070 -23.223 -29.939 1.00 97.01 O +ATOM 7624 N ARG F 146 -1.221 -21.574 -30.702 1.00 97.69 N +ATOM 7625 CA ARG F 146 -0.987 -21.912 -32.102 1.00 97.69 C +ATOM 7626 C ARG F 146 0.484 -21.743 -32.467 1.00 97.69 C +ATOM 7627 CB ARG F 146 -1.857 -21.048 -33.017 1.00 97.69 C +ATOM 7628 O ARG F 146 1.073 -22.612 -33.114 1.00 97.69 O +ATOM 7629 CG ARG F 146 -3.306 -21.501 -33.098 1.00 97.69 C +ATOM 7630 CD ARG F 146 -4.136 -20.583 -33.983 1.00 97.69 C +ATOM 7631 NE ARG F 146 -5.515 -21.048 -34.100 1.00 97.69 N +ATOM 7632 NH1 ARG F 146 -6.284 -19.147 -35.164 1.00 97.69 N +ATOM 7633 NH2 ARG F 146 -7.722 -20.875 -34.712 1.00 97.69 N +ATOM 7634 CZ ARG F 146 -6.504 -20.356 -34.658 1.00 97.69 C +ATOM 7635 N GLU F 147 0.999 -20.665 -32.067 1.00 96.27 N +ATOM 7636 CA GLU F 147 2.410 -20.414 -32.342 1.00 96.27 C +ATOM 7637 C GLU F 147 3.298 -21.448 -31.656 1.00 96.27 C +ATOM 7638 CB GLU F 147 2.803 -19.004 -31.894 1.00 96.27 C +ATOM 7639 O GLU F 147 4.261 -21.939 -32.249 1.00 96.27 O +ATOM 7640 CG GLU F 147 2.213 -17.898 -32.758 1.00 96.27 C +ATOM 7641 CD GLU F 147 2.585 -16.503 -32.282 1.00 96.27 C +ATOM 7642 OE1 GLU F 147 2.107 -15.511 -32.878 1.00 96.27 O +ATOM 7643 OE2 GLU F 147 3.362 -16.400 -31.306 1.00 96.27 O +ATOM 7644 N ASP F 148 2.970 -21.775 -30.472 1.00 95.90 N +ATOM 7645 CA ASP F 148 3.723 -22.794 -29.747 1.00 95.90 C +ATOM 7646 C ASP F 148 3.632 -24.147 -30.448 1.00 95.90 C +ATOM 7647 CB ASP F 148 3.217 -22.912 -28.308 1.00 95.90 C +ATOM 7648 O ASP F 148 4.634 -24.853 -30.579 1.00 95.90 O +ATOM 7649 CG ASP F 148 3.614 -21.730 -27.441 1.00 95.90 C +ATOM 7650 OD1 ASP F 148 4.447 -20.906 -27.877 1.00 95.90 O +ATOM 7651 OD2 ASP F 148 3.091 -21.623 -26.311 1.00 95.90 O +ATOM 7652 N ALA F 149 2.406 -24.508 -30.859 1.00 96.28 N +ATOM 7653 CA ALA F 149 2.213 -25.778 -31.555 1.00 96.28 C +ATOM 7654 C ALA F 149 3.042 -25.833 -32.835 1.00 96.28 C +ATOM 7655 CB ALA F 149 0.735 -25.991 -31.872 1.00 96.28 C +ATOM 7656 O ALA F 149 3.702 -26.837 -33.111 1.00 96.28 O +ATOM 7657 N ARG F 150 3.041 -24.738 -33.542 1.00 96.63 N +ATOM 7658 CA ARG F 150 3.835 -24.676 -34.765 1.00 96.63 C +ATOM 7659 C ARG F 150 5.320 -24.848 -34.464 1.00 96.63 C +ATOM 7660 CB ARG F 150 3.598 -23.351 -35.493 1.00 96.63 C +ATOM 7661 O ARG F 150 6.018 -25.589 -35.158 1.00 96.63 O +ATOM 7662 CG ARG F 150 2.255 -23.270 -36.202 1.00 96.63 C +ATOM 7663 CD ARG F 150 2.053 -21.919 -36.875 1.00 96.63 C +ATOM 7664 NE ARG F 150 0.687 -21.759 -37.363 1.00 96.63 N +ATOM 7665 NH1 ARG F 150 0.801 -19.459 -37.545 1.00 96.63 N +ATOM 7666 NH2 ARG F 150 -1.128 -20.563 -38.107 1.00 96.63 N +ATOM 7667 CZ ARG F 150 0.123 -20.594 -37.671 1.00 96.63 C +ATOM 7668 N ALA F 151 5.773 -24.222 -33.456 1.00 95.31 N +ATOM 7669 CA ALA F 151 7.185 -24.287 -33.085 1.00 95.31 C +ATOM 7670 C ALA F 151 7.567 -25.692 -32.627 1.00 95.31 C +ATOM 7671 CB ALA F 151 7.494 -23.271 -31.989 1.00 95.31 C +ATOM 7672 O ALA F 151 8.614 -26.215 -33.016 1.00 95.31 O +ATOM 7673 N ILE F 152 6.766 -26.308 -31.797 1.00 95.97 N +ATOM 7674 CA ILE F 152 7.031 -27.647 -31.281 1.00 95.97 C +ATOM 7675 C ILE F 152 7.037 -28.652 -32.430 1.00 95.97 C +ATOM 7676 CB ILE F 152 5.990 -28.058 -30.215 1.00 95.97 C +ATOM 7677 O ILE F 152 7.910 -29.520 -32.500 1.00 95.97 O +ATOM 7678 CG1 ILE F 152 6.172 -27.224 -28.942 1.00 95.97 C +ATOM 7679 CG2 ILE F 152 6.092 -29.555 -29.910 1.00 95.97 C +ATOM 7680 CD1 ILE F 152 5.024 -27.351 -27.950 1.00 95.97 C +ATOM 7681 N CYS F 153 6.072 -28.563 -33.409 1.00 95.27 N +ATOM 7682 CA CYS F 153 6.010 -29.468 -34.551 1.00 95.27 C +ATOM 7683 C CYS F 153 7.222 -29.288 -35.457 1.00 95.27 C +ATOM 7684 CB CYS F 153 4.727 -29.236 -35.349 1.00 95.27 C +ATOM 7685 O CYS F 153 7.745 -30.261 -36.001 1.00 95.27 O +ATOM 7686 SG CYS F 153 3.224 -29.704 -34.463 1.00 95.27 S +ATOM 7687 N ALA F 154 7.690 -28.083 -35.593 1.00 96.52 N +ATOM 7688 CA ALA F 154 8.883 -27.818 -36.394 1.00 96.52 C +ATOM 7689 C ALA F 154 10.124 -28.427 -35.747 1.00 96.52 C +ATOM 7690 CB ALA F 154 9.071 -26.316 -36.588 1.00 96.52 C +ATOM 7691 O ALA F 154 10.986 -28.975 -36.437 1.00 96.52 O +ATOM 7692 N ALA F 155 10.210 -28.399 -34.456 1.00 94.82 N +ATOM 7693 CA ALA F 155 11.388 -28.863 -33.730 1.00 94.82 C +ATOM 7694 C ALA F 155 11.366 -30.379 -33.559 1.00 94.82 C +ATOM 7695 CB ALA F 155 11.477 -28.179 -32.368 1.00 94.82 C +ATOM 7696 O ALA F 155 12.402 -31.038 -33.669 1.00 94.82 O +ATOM 7697 N LYS F 156 10.184 -30.965 -33.306 1.00 95.40 N +ATOM 7698 CA LYS F 156 10.119 -32.371 -32.920 1.00 95.40 C +ATOM 7699 C LYS F 156 9.516 -33.220 -34.035 1.00 95.40 C +ATOM 7700 CB LYS F 156 9.305 -32.538 -31.636 1.00 95.40 C +ATOM 7701 O LYS F 156 9.528 -34.451 -33.961 1.00 95.40 O +ATOM 7702 CG LYS F 156 9.912 -31.848 -30.423 1.00 95.40 C +ATOM 7703 CD LYS F 156 9.358 -32.414 -29.122 1.00 95.40 C +ATOM 7704 CE LYS F 156 10.045 -31.802 -27.908 1.00 95.40 C +ATOM 7705 NZ LYS F 156 9.526 -32.375 -26.631 1.00 95.40 N +ATOM 7706 N GLY F 157 8.981 -32.617 -35.062 1.00 94.92 N +ATOM 7707 CA GLY F 157 8.373 -33.317 -36.182 1.00 94.92 C +ATOM 7708 C GLY F 157 6.858 -33.251 -36.176 1.00 94.92 C +ATOM 7709 O GLY F 157 6.235 -33.263 -35.113 1.00 94.92 O +ATOM 7710 N GLU F 158 6.166 -33.170 -37.286 1.00 92.93 N +ATOM 7711 CA GLU F 158 4.727 -32.991 -37.459 1.00 92.93 C +ATOM 7712 C GLU F 158 3.955 -34.203 -36.946 1.00 92.93 C +ATOM 7713 CB GLU F 158 4.391 -32.737 -38.931 1.00 92.93 C +ATOM 7714 O GLU F 158 2.798 -34.081 -36.537 1.00 92.93 O +ATOM 7715 CG GLU F 158 4.805 -31.359 -39.427 1.00 92.93 C +ATOM 7716 CD GLU F 158 4.316 -31.057 -40.834 1.00 92.93 C +ATOM 7717 OE1 GLU F 158 4.500 -29.912 -41.308 1.00 92.93 O +ATOM 7718 OE2 GLU F 158 3.743 -31.971 -41.468 1.00 92.93 O +ATOM 7719 N THR F 159 4.629 -35.405 -36.943 1.00 93.49 N +ATOM 7720 CA THR F 159 3.922 -36.612 -36.529 1.00 93.49 C +ATOM 7721 C THR F 159 4.324 -37.015 -35.113 1.00 93.49 C +ATOM 7722 CB THR F 159 4.197 -37.779 -37.495 1.00 93.49 C +ATOM 7723 O THR F 159 3.959 -38.094 -34.642 1.00 93.49 O +ATOM 7724 CG2 THR F 159 3.723 -37.449 -38.906 1.00 93.49 C +ATOM 7725 OG1 THR F 159 5.605 -38.044 -37.526 1.00 93.49 O +ATOM 7726 N SER F 160 5.072 -36.208 -34.392 1.00 94.81 N +ATOM 7727 CA SER F 160 5.532 -36.514 -33.042 1.00 94.81 C +ATOM 7728 C SER F 160 4.394 -36.404 -32.032 1.00 94.81 C +ATOM 7729 CB SER F 160 6.674 -35.581 -32.639 1.00 94.81 C +ATOM 7730 O SER F 160 3.451 -35.635 -32.233 1.00 94.81 O +ATOM 7731 OG SER F 160 6.184 -34.285 -32.344 1.00 94.81 O +ATOM 7732 N PRO F 161 4.419 -37.280 -30.944 1.00 96.07 N +ATOM 7733 CA PRO F 161 3.422 -37.154 -29.878 1.00 96.07 C +ATOM 7734 C PRO F 161 3.399 -35.760 -29.254 1.00 96.07 C +ATOM 7735 CB PRO F 161 3.865 -38.203 -28.855 1.00 96.07 C +ATOM 7736 O PRO F 161 2.338 -35.278 -28.852 1.00 96.07 O +ATOM 7737 CG PRO F 161 4.745 -39.137 -29.622 1.00 96.07 C +ATOM 7738 CD PRO F 161 5.312 -38.399 -30.801 1.00 96.07 C +ATOM 7739 N ASP F 162 4.475 -35.125 -29.198 1.00 95.16 N +ATOM 7740 CA ASP F 162 4.560 -33.784 -28.628 1.00 95.16 C +ATOM 7741 C ASP F 162 3.802 -32.774 -29.486 1.00 95.16 C +ATOM 7742 CB ASP F 162 6.022 -33.356 -28.479 1.00 95.16 C +ATOM 7743 O ASP F 162 3.130 -31.885 -28.959 1.00 95.16 O +ATOM 7744 CG ASP F 162 6.778 -34.175 -27.448 1.00 95.16 C +ATOM 7745 OD1 ASP F 162 6.137 -34.787 -26.566 1.00 95.16 O +ATOM 7746 OD2 ASP F 162 8.025 -34.208 -27.516 1.00 95.16 O +ATOM 7747 N CYS F 163 3.951 -32.896 -30.792 1.00 93.29 N +ATOM 7748 CA CYS F 163 3.230 -32.027 -31.716 1.00 93.29 C +ATOM 7749 C CYS F 163 1.724 -32.214 -31.577 1.00 93.29 C +ATOM 7750 CB CYS F 163 3.657 -32.306 -33.157 1.00 93.29 C +ATOM 7751 O CYS F 163 0.981 -31.237 -31.466 1.00 93.29 O +ATOM 7752 SG CYS F 163 2.861 -31.232 -34.372 1.00 93.29 S +ATOM 7753 N ALA F 164 1.316 -33.471 -31.494 1.00 95.58 N +ATOM 7754 CA ALA F 164 -0.106 -33.765 -31.339 1.00 95.58 C +ATOM 7755 C ALA F 164 -0.651 -33.171 -30.043 1.00 95.58 C +ATOM 7756 CB ALA F 164 -0.345 -35.272 -31.372 1.00 95.58 C +ATOM 7757 O ALA F 164 -1.736 -32.585 -30.030 1.00 95.58 O +ATOM 7758 N ALA F 165 0.064 -33.314 -29.009 1.00 96.30 N +ATOM 7759 CA ALA F 165 -0.348 -32.775 -27.716 1.00 96.30 C +ATOM 7760 C ALA F 165 -0.475 -31.255 -27.771 1.00 96.30 C +ATOM 7761 CB ALA F 165 0.642 -33.184 -26.628 1.00 96.30 C +ATOM 7762 O ALA F 165 -1.392 -30.680 -27.178 1.00 96.30 O +ATOM 7763 N ALA F 166 0.424 -30.565 -28.432 1.00 95.95 N +ATOM 7764 CA ALA F 166 0.396 -29.110 -28.556 1.00 95.95 C +ATOM 7765 C ALA F 166 -0.863 -28.646 -29.282 1.00 95.95 C +ATOM 7766 CB ALA F 166 1.641 -28.614 -29.286 1.00 95.95 C +ATOM 7767 O ALA F 166 -1.498 -27.670 -28.875 1.00 95.95 O +ATOM 7768 N TRP F 167 -1.208 -29.323 -30.313 1.00 96.46 N +ATOM 7769 CA TRP F 167 -2.400 -28.942 -31.063 1.00 96.46 C +ATOM 7770 C TRP F 167 -3.665 -29.279 -30.281 1.00 96.46 C +ATOM 7771 CB TRP F 167 -2.426 -29.641 -32.425 1.00 96.46 C +ATOM 7772 O TRP F 167 -4.691 -28.609 -30.429 1.00 96.46 O +ATOM 7773 CG TRP F 167 -1.606 -28.955 -33.477 1.00 96.46 C +ATOM 7774 CD1 TRP F 167 -0.434 -29.396 -34.026 1.00 96.46 C +ATOM 7775 CD2 TRP F 167 -1.897 -27.702 -34.103 1.00 96.46 C +ATOM 7776 CE2 TRP F 167 -0.857 -27.444 -35.024 1.00 96.46 C +ATOM 7777 CE3 TRP F 167 -2.937 -26.772 -33.976 1.00 96.46 C +ATOM 7778 NE1 TRP F 167 0.022 -28.492 -34.957 1.00 96.46 N +ATOM 7779 CH2 TRP F 167 -1.857 -25.399 -35.670 1.00 96.46 C +ATOM 7780 CZ2 TRP F 167 -0.827 -26.292 -35.814 1.00 96.46 C +ATOM 7781 CZ3 TRP F 167 -2.906 -25.626 -34.763 1.00 96.46 C +ATOM 7782 N ASP F 168 -3.585 -30.279 -29.447 1.00 96.43 N +ATOM 7783 CA ASP F 168 -4.707 -30.575 -28.562 1.00 96.43 C +ATOM 7784 C ASP F 168 -5.010 -29.393 -27.644 1.00 96.43 C +ATOM 7785 CB ASP F 168 -4.417 -31.827 -27.730 1.00 96.43 C +ATOM 7786 O ASP F 168 -6.174 -29.097 -27.368 1.00 96.43 O +ATOM 7787 CG ASP F 168 -4.515 -33.110 -28.535 1.00 96.43 C +ATOM 7788 OD1 ASP F 168 -5.009 -33.074 -29.683 1.00 96.43 O +ATOM 7789 OD2 ASP F 168 -4.098 -34.168 -28.016 1.00 96.43 O +ATOM 7790 N VAL F 169 -3.978 -28.782 -27.187 1.00 96.57 N +ATOM 7791 CA VAL F 169 -4.153 -27.608 -26.338 1.00 96.57 C +ATOM 7792 C VAL F 169 -4.888 -26.516 -27.112 1.00 96.57 C +ATOM 7793 CB VAL F 169 -2.797 -27.074 -25.822 1.00 96.57 C +ATOM 7794 O VAL F 169 -5.820 -25.898 -26.592 1.00 96.57 O +ATOM 7795 CG1 VAL F 169 -2.983 -25.746 -25.090 1.00 96.57 C +ATOM 7796 CG2 VAL F 169 -2.133 -28.103 -24.909 1.00 96.57 C +ATOM 7797 N VAL F 170 -4.522 -26.269 -28.328 1.00 96.63 N +ATOM 7798 CA VAL F 170 -5.173 -25.279 -29.180 1.00 96.63 C +ATOM 7799 C VAL F 170 -6.651 -25.627 -29.341 1.00 96.63 C +ATOM 7800 CB VAL F 170 -4.494 -25.188 -30.565 1.00 96.63 C +ATOM 7801 O VAL F 170 -7.519 -24.766 -29.179 1.00 96.63 O +ATOM 7802 CG1 VAL F 170 -5.279 -24.262 -31.492 1.00 96.63 C +ATOM 7803 CG2 VAL F 170 -3.051 -24.706 -30.420 1.00 96.63 C +ATOM 7804 N GLU F 171 -6.895 -26.871 -29.602 1.00 96.21 N +ATOM 7805 CA GLU F 171 -8.267 -27.320 -29.816 1.00 96.21 C +ATOM 7806 C GLU F 171 -9.106 -27.156 -28.552 1.00 96.21 C +ATOM 7807 CB GLU F 171 -8.289 -28.781 -30.276 1.00 96.21 C +ATOM 7808 O GLU F 171 -10.270 -26.756 -28.621 1.00 96.21 O +ATOM 7809 CG GLU F 171 -7.833 -28.980 -31.714 1.00 96.21 C +ATOM 7810 CD GLU F 171 -7.882 -30.432 -32.163 1.00 96.21 C +ATOM 7811 OE1 GLU F 171 -7.601 -30.709 -33.351 1.00 96.21 O +ATOM 7812 OE2 GLU F 171 -8.205 -31.298 -31.320 1.00 96.21 O +ATOM 7813 N GLU F 172 -8.506 -27.421 -27.492 1.00 95.32 N +ATOM 7814 CA GLU F 172 -9.214 -27.259 -26.226 1.00 95.32 C +ATOM 7815 C GLU F 172 -9.571 -25.796 -25.977 1.00 95.32 C +ATOM 7816 CB GLU F 172 -8.374 -27.800 -25.066 1.00 95.32 C +ATOM 7817 O GLU F 172 -10.696 -25.485 -25.580 1.00 95.32 O +ATOM 7818 CG GLU F 172 -9.110 -27.829 -23.735 1.00 95.32 C +ATOM 7819 CD GLU F 172 -8.292 -28.442 -22.610 1.00 95.32 C +ATOM 7820 OE1 GLU F 172 -8.788 -28.504 -21.462 1.00 95.32 O +ATOM 7821 OE2 GLU F 172 -7.145 -28.864 -22.878 1.00 95.32 O +ATOM 7822 N LEU F 173 -8.662 -24.950 -26.212 1.00 95.25 N +ATOM 7823 CA LEU F 173 -8.900 -23.522 -26.036 1.00 95.25 C +ATOM 7824 C LEU F 173 -9.954 -23.021 -27.017 1.00 95.25 C +ATOM 7825 CB LEU F 173 -7.599 -22.735 -26.220 1.00 95.25 C +ATOM 7826 O LEU F 173 -10.820 -22.224 -26.651 1.00 95.25 O +ATOM 7827 CG LEU F 173 -6.568 -22.857 -25.096 1.00 95.25 C +ATOM 7828 CD1 LEU F 173 -5.241 -22.241 -25.526 1.00 95.25 C +ATOM 7829 CD2 LEU F 173 -7.083 -22.195 -23.823 1.00 95.25 C +ATOM 7830 N GLN F 174 -9.882 -23.451 -28.241 1.00 95.03 N +ATOM 7831 CA GLN F 174 -10.863 -23.064 -29.249 1.00 95.03 C +ATOM 7832 C GLN F 174 -12.258 -23.561 -28.878 1.00 95.03 C +ATOM 7833 CB GLN F 174 -10.463 -23.603 -30.623 1.00 95.03 C +ATOM 7834 O GLN F 174 -13.249 -22.858 -29.088 1.00 95.03 O +ATOM 7835 CG GLN F 174 -9.318 -22.837 -31.274 1.00 95.03 C +ATOM 7836 CD GLN F 174 -8.889 -23.438 -32.599 1.00 95.03 C +ATOM 7837 NE2 GLN F 174 -8.636 -22.582 -33.584 1.00 95.03 N +ATOM 7838 OE1 GLN F 174 -8.784 -24.661 -32.737 1.00 95.03 O +ATOM 7839 N ALA F 175 -12.275 -24.746 -28.326 1.00 92.84 N +ATOM 7840 CA ALA F 175 -13.554 -25.280 -27.866 1.00 92.84 C +ATOM 7841 C ALA F 175 -14.144 -24.414 -26.757 1.00 92.84 C +ATOM 7842 CB ALA F 175 -13.387 -26.718 -27.382 1.00 92.84 C +ATOM 7843 O ALA F 175 -15.340 -24.115 -26.764 1.00 92.84 O +ATOM 7844 N GLU F 176 -13.315 -24.036 -25.925 1.00 90.69 N +ATOM 7845 CA GLU F 176 -13.768 -23.168 -24.842 1.00 90.69 C +ATOM 7846 C GLU F 176 -14.244 -21.821 -25.377 1.00 90.69 C +ATOM 7847 CB GLU F 176 -12.653 -22.962 -23.814 1.00 90.69 C +ATOM 7848 O GLU F 176 -15.273 -21.302 -24.940 1.00 90.69 O +ATOM 7849 CG GLU F 176 -13.071 -22.129 -22.611 1.00 90.69 C +ATOM 7850 CD GLU F 176 -12.259 -22.432 -21.361 1.00 90.69 C +ATOM 7851 OE1 GLU F 176 -12.522 -21.815 -20.304 1.00 90.69 O +ATOM 7852 OE2 GLU F 176 -11.354 -23.291 -21.441 1.00 90.69 O +ATOM 7853 N ALA F 177 -13.530 -21.278 -26.271 1.00 89.99 N +ATOM 7854 CA ALA F 177 -13.913 -20.008 -26.882 1.00 89.99 C +ATOM 7855 C ALA F 177 -15.262 -20.123 -27.586 1.00 89.99 C +ATOM 7856 CB ALA F 177 -12.841 -19.545 -27.865 1.00 89.99 C +ATOM 7857 O ALA F 177 -16.095 -19.218 -27.496 1.00 89.99 O +ATOM 7858 N SER F 178 -15.454 -21.224 -28.260 1.00 88.13 N +ATOM 7859 CA SER F 178 -16.718 -21.456 -28.952 1.00 88.13 C +ATOM 7860 C SER F 178 -17.871 -21.602 -27.964 1.00 88.13 C +ATOM 7861 CB SER F 178 -16.627 -22.704 -29.831 1.00 88.13 C +ATOM 7862 O SER F 178 -18.964 -21.082 -28.197 1.00 88.13 O +ATOM 7863 OG SER F 178 -15.652 -22.536 -30.845 1.00 88.13 O +ATOM 7864 N HIS F 179 -17.565 -22.331 -26.907 1.00 85.57 N +ATOM 7865 CA HIS F 179 -18.575 -22.483 -25.866 1.00 85.57 C +ATOM 7866 C HIS F 179 -18.971 -21.131 -25.281 1.00 85.57 C +ATOM 7867 CB HIS F 179 -18.067 -23.406 -24.757 1.00 85.57 C +ATOM 7868 O HIS F 179 -20.156 -20.870 -25.057 1.00 85.57 O +ATOM 7869 CG HIS F 179 -19.079 -23.673 -23.688 1.00 85.57 C +ATOM 7870 CD2 HIS F 179 -20.049 -24.613 -23.597 1.00 85.57 C +ATOM 7871 ND1 HIS F 179 -19.165 -22.917 -22.539 1.00 85.57 N +ATOM 7872 CE1 HIS F 179 -20.147 -23.383 -21.786 1.00 85.57 C +ATOM 7873 NE2 HIS F 179 -20.700 -24.412 -22.405 1.00 85.57 N +ATOM 7874 N GLN F 180 -18.041 -20.312 -25.125 1.00 80.89 N +ATOM 7875 CA GLN F 180 -18.301 -18.979 -24.592 1.00 80.89 C +ATOM 7876 C GLN F 180 -19.148 -18.156 -25.558 1.00 80.89 C +ATOM 7877 CB GLN F 180 -16.988 -18.253 -24.296 1.00 80.89 C +ATOM 7878 O GLN F 180 -20.056 -17.436 -25.137 1.00 80.89 O +ATOM 7879 CG GLN F 180 -16.275 -18.756 -23.048 1.00 80.89 C +ATOM 7880 CD GLN F 180 -15.121 -17.864 -22.631 1.00 80.89 C +ATOM 7881 NE2 GLN F 180 -14.055 -18.472 -22.122 1.00 80.89 N +ATOM 7882 OE1 GLN F 180 -15.187 -16.638 -22.766 1.00 80.89 O +ATOM 7883 N ARG F 181 -18.869 -18.325 -26.832 1.00 76.85 N +ATOM 7884 CA ARG F 181 -19.621 -17.601 -27.852 1.00 76.85 C +ATOM 7885 C ARG F 181 -21.041 -18.143 -27.974 1.00 76.85 C +ATOM 7886 CB ARG F 181 -18.910 -17.684 -29.205 1.00 76.85 C +ATOM 7887 O ARG F 181 -21.987 -17.380 -28.177 1.00 76.85 O +ATOM 7888 CG ARG F 181 -17.632 -16.865 -29.281 1.00 76.85 C +ATOM 7889 CD ARG F 181 -16.914 -17.062 -30.609 1.00 76.85 C +ATOM 7890 NE ARG F 181 -15.570 -16.491 -30.584 1.00 76.85 N +ATOM 7891 NH1 ARG F 181 -14.752 -17.821 -32.287 1.00 76.85 N +ATOM 7892 NH2 ARG F 181 -13.390 -16.279 -31.275 1.00 76.85 N +ATOM 7893 CZ ARG F 181 -14.574 -16.865 -31.382 1.00 76.85 C +ATOM 7894 N ALA F 182 -21.210 -19.433 -27.844 1.00 69.52 N +ATOM 7895 CA ALA F 182 -22.517 -20.077 -27.957 1.00 69.52 C +ATOM 7896 C ALA F 182 -23.424 -19.683 -26.795 1.00 69.52 C +ATOM 7897 CB ALA F 182 -22.359 -21.595 -28.013 1.00 69.52 C +ATOM 7898 O ALA F 182 -24.617 -19.435 -26.987 1.00 69.52 O +ATOM 7899 N LYS F 183 -22.937 -19.745 -25.607 1.00 63.80 N +ATOM 7900 CA LYS F 183 -23.719 -19.351 -24.439 1.00 63.80 C +ATOM 7901 C LYS F 183 -24.205 -17.910 -24.564 1.00 63.80 C +ATOM 7902 CB LYS F 183 -22.897 -19.518 -23.161 1.00 63.80 C +ATOM 7903 O LYS F 183 -25.300 -17.576 -24.105 1.00 63.80 O +ATOM 7904 CG LYS F 183 -22.909 -20.932 -22.598 1.00 63.80 C +ATOM 7905 CD LYS F 183 -22.256 -20.991 -21.223 1.00 63.80 C +ATOM 7906 CE LYS F 183 -22.298 -22.399 -20.643 1.00 63.80 C +ATOM 7907 NZ LYS F 183 -21.630 -22.469 -19.309 1.00 63.80 N +ATOM 7908 N LYS F 184 -23.518 -17.103 -25.261 1.00 59.15 N +ATOM 7909 CA LYS F 184 -23.897 -15.708 -25.464 1.00 59.15 C +ATOM 7910 C LYS F 184 -25.013 -15.585 -26.497 1.00 59.15 C +ATOM 7911 CB LYS F 184 -22.686 -14.881 -25.899 1.00 59.15 C +ATOM 7912 O LYS F 184 -25.892 -14.731 -26.371 1.00 59.15 O +ATOM 7913 CG LYS F 184 -21.785 -14.450 -24.751 1.00 59.15 C +ATOM 7914 CD LYS F 184 -20.660 -13.543 -25.233 1.00 59.15 C +ATOM 7915 CE LYS F 184 -19.723 -13.160 -24.096 1.00 59.15 C +ATOM 7916 NZ LYS F 184 -18.575 -12.335 -24.578 1.00 59.15 N +ATOM 7917 N GLN F 185 -24.977 -16.424 -27.612 1.00 54.78 N +ATOM 7918 CA GLN F 185 -25.997 -16.416 -28.656 1.00 54.78 C +ATOM 7919 C GLN F 185 -27.312 -16.997 -28.145 1.00 54.78 C +ATOM 7920 CB GLN F 185 -25.518 -17.197 -29.881 1.00 54.78 C +ATOM 7921 O GLN F 185 -28.390 -16.549 -28.541 1.00 54.78 O +ATOM 7922 CG GLN F 185 -24.630 -16.388 -30.817 1.00 54.78 C +ATOM 7923 CD GLN F 185 -24.117 -17.203 -31.989 1.00 54.78 C +ATOM 7924 NE2 GLN F 185 -23.388 -16.553 -32.890 1.00 54.78 N +ATOM 7925 OE1 GLN F 185 -24.373 -18.408 -32.084 1.00 54.78 O +ATOM 7926 N GLY F 186 -27.351 -18.003 -27.246 1.00 48.26 N +ATOM 7927 CA GLY F 186 -28.553 -18.625 -26.715 1.00 48.26 C +ATOM 7928 C GLY F 186 -29.344 -17.711 -25.799 1.00 48.26 C +ATOM 7929 O GLY F 186 -30.576 -17.754 -25.782 1.00 48.26 O +ATOM 7930 N SER F 187 -28.725 -16.931 -24.944 1.00 49.55 N +ATOM 7931 CA SER F 187 -29.435 -15.963 -24.113 1.00 49.55 C +ATOM 7932 C SER F 187 -30.095 -14.883 -24.964 1.00 49.55 C +ATOM 7933 CB SER F 187 -28.480 -15.318 -23.107 1.00 49.55 C +ATOM 7934 O SER F 187 -31.231 -14.485 -24.699 1.00 49.55 O +ATOM 7935 OG SER F 187 -28.228 -13.966 -23.448 1.00 49.55 O +ATOM 7936 N ASN F 188 -29.467 -14.410 -26.025 1.00 46.44 N +ATOM 7937 CA ASN F 188 -30.056 -13.439 -26.940 1.00 46.44 C +ATOM 7938 C ASN F 188 -31.224 -14.038 -27.719 1.00 46.44 C +ATOM 7939 CB ASN F 188 -28.998 -12.898 -27.904 1.00 46.44 C +ATOM 7940 O ASN F 188 -32.216 -13.356 -27.981 1.00 46.44 O +ATOM 7941 CG ASN F 188 -28.467 -11.540 -27.486 1.00 46.44 C +ATOM 7942 ND2 ASN F 188 -27.403 -11.093 -28.142 1.00 46.44 N +ATOM 7943 OD1 ASN F 188 -29.009 -10.900 -26.582 1.00 46.44 O +ATOM 7944 N SER F 189 -31.126 -15.306 -28.104 1.00 49.35 N +ATOM 7945 CA SER F 189 -32.242 -15.976 -28.763 1.00 49.35 C +ATOM 7946 C SER F 189 -33.426 -16.140 -27.817 1.00 49.35 C +ATOM 7947 CB SER F 189 -31.809 -17.344 -29.292 1.00 49.35 C +ATOM 7948 O SER F 189 -34.578 -15.961 -28.218 1.00 49.35 O +ATOM 7949 OG SER F 189 -32.609 -18.374 -28.737 1.00 49.35 O +ATOM 7950 N PHE F 190 -33.196 -16.408 -26.534 1.00 49.36 N +ATOM 7951 CA PHE F 190 -34.281 -16.498 -25.564 1.00 49.36 C +ATOM 7952 C PHE F 190 -34.872 -15.121 -25.285 1.00 49.36 C +ATOM 7953 CB PHE F 190 -33.786 -17.131 -24.259 1.00 49.36 C +ATOM 7954 O PHE F 190 -36.094 -14.963 -25.235 1.00 49.36 O +ATOM 7955 CG PHE F 190 -34.872 -17.349 -23.241 1.00 49.36 C +ATOM 7956 CD1 PHE F 190 -34.976 -16.524 -22.127 1.00 49.36 C +ATOM 7957 CD2 PHE F 190 -35.790 -18.380 -23.397 1.00 49.36 C +ATOM 7958 CE1 PHE F 190 -35.980 -16.724 -21.183 1.00 49.36 C +ATOM 7959 CE2 PHE F 190 -36.796 -18.585 -22.458 1.00 49.36 C +ATOM 7960 CZ PHE F 190 -36.889 -17.757 -21.351 1.00 49.36 C +ATOM 7961 N GLN F 191 -34.077 -14.072 -25.143 1.00 50.77 N +ATOM 7962 CA GLN F 191 -34.568 -12.706 -25.001 1.00 50.77 C +ATOM 7963 C GLN F 191 -35.283 -12.244 -26.267 1.00 50.77 C +ATOM 7964 CB GLN F 191 -33.418 -11.753 -24.670 1.00 50.77 C +ATOM 7965 O GLN F 191 -36.359 -11.646 -26.196 1.00 50.77 O +ATOM 7966 CG GLN F 191 -33.839 -10.545 -23.843 1.00 50.77 C +ATOM 7967 CD GLN F 191 -32.685 -9.929 -23.075 1.00 50.77 C +ATOM 7968 NE2 GLN F 191 -32.988 -8.936 -22.245 1.00 50.77 N +ATOM 7969 OE1 GLN F 191 -31.531 -10.343 -23.224 1.00 50.77 O +ATOM 7970 N ALA F 192 -34.698 -12.513 -27.450 1.00 54.21 N +ATOM 7971 CA ALA F 192 -35.379 -12.228 -28.710 1.00 54.21 C +ATOM 7972 C ALA F 192 -36.658 -13.051 -28.840 1.00 54.21 C +ATOM 7973 CB ALA F 192 -34.451 -12.504 -29.890 1.00 54.21 C +ATOM 7974 O ALA F 192 -37.686 -12.543 -29.295 1.00 54.21 O +ATOM 7975 N TYR F 193 -36.538 -14.318 -28.439 1.00 52.80 N +ATOM 7976 CA TYR F 193 -37.729 -15.158 -28.397 1.00 52.80 C +ATOM 7977 C TYR F 193 -38.756 -14.599 -27.419 1.00 52.80 C +ATOM 7978 CB TYR F 193 -37.363 -16.593 -28.005 1.00 52.80 C +ATOM 7979 O TYR F 193 -39.940 -14.488 -27.748 1.00 52.80 O +ATOM 7980 CG TYR F 193 -38.553 -17.514 -27.890 1.00 52.80 C +ATOM 7981 CD1 TYR F 193 -39.073 -17.859 -26.645 1.00 52.80 C +ATOM 7982 CD2 TYR F 193 -39.159 -18.040 -29.026 1.00 52.80 C +ATOM 7983 CE1 TYR F 193 -40.169 -18.709 -26.534 1.00 52.80 C +ATOM 7984 CE2 TYR F 193 -40.255 -18.891 -28.927 1.00 52.80 C +ATOM 7985 OH TYR F 193 -41.837 -20.061 -27.575 1.00 52.80 O +ATOM 7986 CZ TYR F 193 -40.752 -19.219 -27.679 1.00 52.80 C +ATOM 7987 N CYS F 194 -38.301 -14.207 -26.257 1.00 57.00 N +ATOM 7988 CA CYS F 194 -39.233 -13.654 -25.281 1.00 57.00 C +ATOM 7989 C CYS F 194 -39.712 -12.272 -25.708 1.00 57.00 C +ATOM 7990 CB CYS F 194 -38.580 -13.574 -23.901 1.00 57.00 C +ATOM 7991 O CYS F 194 -40.840 -11.879 -25.402 1.00 57.00 O +ATOM 7992 SG CYS F 194 -38.521 -15.155 -23.031 1.00 57.00 S +ATOM 7993 N GLU F 195 -38.936 -11.402 -26.377 1.00 59.64 N +ATOM 7994 CA GLU F 195 -39.374 -10.145 -26.977 1.00 59.64 C +ATOM 7995 C GLU F 195 -40.366 -10.391 -28.110 1.00 59.64 C +ATOM 7996 CB GLU F 195 -38.172 -9.349 -27.493 1.00 59.64 C +ATOM 7997 O GLU F 195 -41.340 -9.650 -28.260 1.00 59.64 O +ATOM 7998 CG GLU F 195 -37.484 -8.513 -26.425 1.00 59.64 C +ATOM 7999 CD GLU F 195 -36.249 -7.786 -26.935 1.00 59.64 C +ATOM 8000 OE1 GLU F 195 -35.620 -7.037 -26.154 1.00 59.64 O +ATOM 8001 OE2 GLU F 195 -35.909 -7.967 -28.125 1.00 59.64 O +ATOM 8002 N ALA F 196 -40.206 -11.501 -28.950 1.00 64.74 N +ATOM 8003 CA ALA F 196 -41.092 -11.856 -30.056 1.00 64.74 C +ATOM 8004 C ALA F 196 -42.316 -12.618 -29.555 1.00 64.74 C +ATOM 8005 CB ALA F 196 -40.341 -12.684 -31.095 1.00 64.74 C +ATOM 8006 O ALA F 196 -43.377 -12.581 -30.181 1.00 64.74 O +ATOM 8007 N ASN F 197 -42.062 -13.507 -28.519 1.00 52.03 N +ATOM 8008 CA ASN F 197 -43.170 -14.256 -27.937 1.00 52.03 C +ATOM 8009 C ASN F 197 -43.332 -13.952 -26.450 1.00 52.03 C +ATOM 8010 CB ASN F 197 -42.975 -15.758 -28.154 1.00 52.03 C +ATOM 8011 O ASN F 197 -43.024 -14.793 -25.603 1.00 52.03 O +ATOM 8012 CG ASN F 197 -43.129 -16.163 -29.606 1.00 52.03 C +ATOM 8013 ND2 ASN F 197 -42.267 -17.062 -30.066 1.00 52.03 N +ATOM 8014 OD1 ASN F 197 -44.016 -15.672 -30.310 1.00 52.03 O +ATOM 8015 N PRO F 198 -43.709 -12.696 -26.093 1.00 57.19 N +ATOM 8016 CA PRO F 198 -43.777 -12.230 -24.706 1.00 57.19 C +ATOM 8017 C PRO F 198 -44.686 -13.097 -23.836 1.00 57.19 C +ATOM 8018 CB PRO F 198 -44.338 -10.812 -24.838 1.00 57.19 C +ATOM 8019 O PRO F 198 -44.478 -13.193 -22.624 1.00 57.19 O +ATOM 8020 CG PRO F 198 -44.706 -10.679 -26.280 1.00 57.19 C +ATOM 8021 CD PRO F 198 -44.276 -11.926 -26.999 1.00 57.19 C +ATOM 8022 N ASP F 199 -45.673 -13.695 -24.427 1.00 53.19 N +ATOM 8023 CA ASP F 199 -46.684 -14.467 -23.711 1.00 53.19 C +ATOM 8024 C ASP F 199 -46.237 -15.915 -23.522 1.00 53.19 C +ATOM 8025 CB ASP F 199 -48.020 -14.421 -24.455 1.00 53.19 C +ATOM 8026 O ASP F 199 -46.979 -16.732 -22.972 1.00 53.19 O +ATOM 8027 CG ASP F 199 -48.641 -13.035 -24.474 1.00 53.19 C +ATOM 8028 OD1 ASP F 199 -48.431 -12.259 -23.517 1.00 53.19 O +ATOM 8029 OD2 ASP F 199 -49.349 -12.718 -25.455 1.00 53.19 O +ATOM 8030 N ALA F 200 -45.086 -16.250 -24.031 1.00 53.32 N +ATOM 8031 CA ALA F 200 -44.633 -17.634 -23.919 1.00 53.32 C +ATOM 8032 C ALA F 200 -44.258 -17.973 -22.479 1.00 53.32 C +ATOM 8033 CB ALA F 200 -43.446 -17.883 -24.847 1.00 53.32 C +ATOM 8034 O ALA F 200 -43.703 -17.138 -21.762 1.00 53.32 O +ATOM 8035 N LEU F 201 -44.747 -19.139 -21.752 1.00 53.59 N +ATOM 8036 CA LEU F 201 -44.622 -19.583 -20.368 1.00 53.59 C +ATOM 8037 C LEU F 201 -43.172 -19.507 -19.901 1.00 53.59 C +ATOM 8038 CB LEU F 201 -45.146 -21.013 -20.214 1.00 53.59 C +ATOM 8039 O LEU F 201 -42.900 -19.095 -18.771 1.00 53.59 O +ATOM 8040 CG LEU F 201 -46.522 -21.164 -19.564 1.00 53.59 C +ATOM 8041 CD1 LEU F 201 -47.316 -22.268 -20.254 1.00 53.59 C +ATOM 8042 CD2 LEU F 201 -46.381 -21.453 -18.073 1.00 53.59 C +ATOM 8043 N GLU F 202 -42.357 -19.845 -20.724 1.00 55.89 N +ATOM 8044 CA GLU F 202 -40.937 -19.930 -20.400 1.00 55.89 C +ATOM 8045 C GLU F 202 -40.348 -18.547 -20.135 1.00 55.89 C +ATOM 8046 CB GLU F 202 -40.167 -20.622 -21.528 1.00 55.89 C +ATOM 8047 O GLU F 202 -39.396 -18.409 -19.364 1.00 55.89 O +ATOM 8048 CG GLU F 202 -40.396 -22.125 -21.596 1.00 55.89 C +ATOM 8049 CD GLU F 202 -40.295 -22.683 -23.007 1.00 55.89 C +ATOM 8050 OE1 GLU F 202 -40.360 -23.922 -23.175 1.00 55.89 O +ATOM 8051 OE2 GLU F 202 -40.150 -21.876 -23.951 1.00 55.89 O +ATOM 8052 N CYS F 203 -40.927 -17.507 -20.836 1.00 49.48 N +ATOM 8053 CA CYS F 203 -40.456 -16.133 -20.702 1.00 49.48 C +ATOM 8054 C CYS F 203 -41.037 -15.477 -19.455 1.00 49.48 C +ATOM 8055 CB CYS F 203 -40.826 -15.316 -21.939 1.00 49.48 C +ATOM 8056 O CYS F 203 -40.470 -14.515 -18.934 1.00 49.48 O +ATOM 8057 SG CYS F 203 -39.996 -15.863 -23.448 1.00 49.48 S +ATOM 8058 N ARG F 204 -42.183 -15.809 -18.864 1.00 46.22 N +ATOM 8059 CA ARG F 204 -42.863 -15.260 -17.695 1.00 46.22 C +ATOM 8060 C ARG F 204 -42.169 -15.690 -16.406 1.00 46.22 C +ATOM 8061 CB ARG F 204 -44.329 -15.697 -17.672 1.00 46.22 C +ATOM 8062 O ARG F 204 -42.355 -15.068 -15.358 1.00 46.22 O +ATOM 8063 CG ARG F 204 -45.265 -14.750 -18.405 1.00 46.22 C +ATOM 8064 CD ARG F 204 -46.726 -15.126 -18.195 1.00 46.22 C +ATOM 8065 NE ARG F 204 -47.625 -14.177 -18.846 1.00 46.22 N +ATOM 8066 NH1 ARG F 204 -49.534 -15.431 -18.496 1.00 46.22 N +ATOM 8067 NH2 ARG F 204 -49.663 -13.417 -19.583 1.00 46.22 N +ATOM 8068 CZ ARG F 204 -48.939 -14.344 -18.973 1.00 46.22 C +ATOM 8069 N ILE F 205 -41.445 -16.810 -16.348 1.00 41.80 N +ATOM 8070 CA ILE F 205 -40.855 -17.273 -15.096 1.00 41.80 C +ATOM 8071 C ILE F 205 -39.722 -16.336 -14.683 1.00 41.80 C +ATOM 8072 CB ILE F 205 -40.334 -18.722 -15.218 1.00 41.80 C +ATOM 8073 O ILE F 205 -39.452 -16.166 -13.492 1.00 41.80 O +ATOM 8074 CG1 ILE F 205 -41.490 -19.680 -15.529 1.00 41.80 C +ATOM 8075 CG2 ILE F 205 -39.603 -19.143 -13.940 1.00 41.80 C +ATOM 8076 CD1 ILE F 205 -41.049 -21.108 -15.822 1.00 41.80 C +ATOM 8077 N TYR F 206 -39.159 -15.692 -15.652 1.00 36.19 N +ATOM 8078 CA TYR F 206 -38.010 -14.876 -15.273 1.00 36.19 C +ATOM 8079 C TYR F 206 -38.447 -13.472 -14.872 1.00 36.19 C +ATOM 8080 CB TYR F 206 -37.001 -14.801 -16.423 1.00 36.19 C +ATOM 8081 O TYR F 206 -37.617 -12.641 -14.495 1.00 36.19 O +ATOM 8082 CG TYR F 206 -35.824 -15.732 -16.259 1.00 36.19 C +ATOM 8083 CD1 TYR F 206 -34.661 -15.310 -15.619 1.00 36.19 C +ATOM 8084 CD2 TYR F 206 -35.872 -17.034 -16.745 1.00 36.19 C +ATOM 8085 CE1 TYR F 206 -33.573 -16.164 -15.468 1.00 36.19 C +ATOM 8086 CE2 TYR F 206 -34.790 -17.896 -16.600 1.00 36.19 C +ATOM 8087 OH TYR F 206 -32.573 -18.302 -15.813 1.00 36.19 O +ATOM 8088 CZ TYR F 206 -33.647 -17.453 -15.960 1.00 36.19 C +ATOM 8089 N ASP F 207 -39.714 -12.970 -15.173 1.00 33.25 N +ATOM 8090 CA ASP F 207 -40.143 -11.630 -14.786 1.00 33.25 C +ATOM 8091 C ASP F 207 -40.531 -11.582 -13.310 1.00 33.25 C +ATOM 8092 CB ASP F 207 -41.317 -11.171 -15.653 1.00 33.25 C +ATOM 8093 O ASP F 207 -40.815 -10.510 -12.771 1.00 33.25 O +ATOM 8094 CG ASP F 207 -40.878 -10.603 -16.992 1.00 33.25 C +ATOM 8095 OD1 ASP F 207 -39.675 -10.311 -17.166 1.00 33.25 O +ATOM 8096 OD2 ASP F 207 -41.744 -10.443 -17.879 1.00 33.25 O +ATOM 8097 N ASP F 208 -40.831 -12.766 -12.650 1.00 27.22 N +ATOM 8098 CA ASP F 208 -41.145 -12.513 -11.247 1.00 27.22 C +ATOM 8099 C ASP F 208 -39.872 -12.364 -10.417 1.00 27.22 C +ATOM 8100 CB ASP F 208 -42.014 -13.638 -10.680 1.00 27.22 C +ATOM 8101 O ASP F 208 -38.930 -13.145 -10.570 1.00 27.22 O +ATOM 8102 CG ASP F 208 -43.484 -13.484 -11.026 1.00 27.22 C +ATOM 8103 OD1 ASP F 208 -43.880 -12.420 -11.549 1.00 27.22 O +ATOM 8104 OD2 ASP F 208 -44.255 -14.434 -10.771 1.00 27.22 O +TER 8105 ASP F 208 +ATOM 8106 N GLY G 1 -20.796 9.345 32.073 1.00 38.05 N +ATOM 8107 CA GLY G 1 -20.116 10.007 30.971 1.00 38.05 C +ATOM 8108 C GLY G 1 -20.970 10.113 29.721 1.00 38.05 C +ATOM 8109 O GLY G 1 -21.959 9.392 29.576 1.00 38.05 O +ATOM 8110 N PRO G 2 -20.904 11.211 28.967 1.00 50.65 N +ATOM 8111 CA PRO G 2 -21.844 11.434 27.866 1.00 50.65 C +ATOM 8112 C PRO G 2 -21.974 10.222 26.946 1.00 50.65 C +ATOM 8113 CB PRO G 2 -21.235 12.623 27.119 1.00 50.65 C +ATOM 8114 O PRO G 2 -21.000 9.495 26.735 1.00 50.65 O +ATOM 8115 CG PRO G 2 -19.873 12.790 27.711 1.00 50.65 C +ATOM 8116 CD PRO G 2 -19.739 11.846 28.871 1.00 50.65 C +ATOM 8117 N MET G 3 -23.201 9.622 26.779 1.00 59.17 N +ATOM 8118 CA MET G 3 -23.558 8.423 26.026 1.00 59.17 C +ATOM 8119 C MET G 3 -23.181 8.571 24.555 1.00 59.17 C +ATOM 8120 CB MET G 3 -25.054 8.131 26.156 1.00 59.17 C +ATOM 8121 O MET G 3 -23.695 9.453 23.865 1.00 59.17 O +ATOM 8122 CG MET G 3 -25.383 7.062 27.185 1.00 59.17 C +ATOM 8123 SD MET G 3 -27.156 6.590 27.166 1.00 59.17 S +ATOM 8124 CE MET G 3 -27.885 8.111 26.498 1.00 59.17 C +ATOM 8125 N VAL G 4 -21.990 8.254 24.041 1.00 78.46 N +ATOM 8126 CA VAL G 4 -21.522 8.249 22.659 1.00 78.46 C +ATOM 8127 C VAL G 4 -22.233 7.147 21.876 1.00 78.46 C +ATOM 8128 CB VAL G 4 -19.991 8.057 22.579 1.00 78.46 C +ATOM 8129 O VAL G 4 -22.560 6.095 22.431 1.00 78.46 O +ATOM 8130 CG1 VAL G 4 -19.496 8.249 21.147 1.00 78.46 C +ATOM 8131 CG2 VAL G 4 -19.282 9.023 23.527 1.00 78.46 C +ATOM 8132 N LEU G 5 -22.848 7.593 20.677 1.00 91.44 N +ATOM 8133 CA LEU G 5 -23.484 6.626 19.790 1.00 91.44 C +ATOM 8134 C LEU G 5 -22.555 5.447 19.516 1.00 91.44 C +ATOM 8135 CB LEU G 5 -23.886 7.291 18.471 1.00 91.44 C +ATOM 8136 O LEU G 5 -21.384 5.639 19.182 1.00 91.44 O +ATOM 8137 CG LEU G 5 -24.941 6.562 17.638 1.00 91.44 C +ATOM 8138 CD1 LEU G 5 -26.307 6.661 18.309 1.00 91.44 C +ATOM 8139 CD2 LEU G 5 -24.992 7.129 16.224 1.00 91.44 C +ATOM 8140 N GLN G 6 -23.148 4.264 19.748 1.00 95.20 N +ATOM 8141 CA GLN G 6 -22.308 3.072 19.693 1.00 95.20 C +ATOM 8142 C GLN G 6 -22.605 2.248 18.443 1.00 95.20 C +ATOM 8143 CB GLN G 6 -22.507 2.216 20.945 1.00 95.20 C +ATOM 8144 O GLN G 6 -23.640 2.436 17.800 1.00 95.20 O +ATOM 8145 CG GLN G 6 -22.161 2.935 22.242 1.00 95.20 C +ATOM 8146 CD GLN G 6 -22.449 2.096 23.473 1.00 95.20 C +ATOM 8147 NE2 GLN G 6 -21.892 2.501 24.610 1.00 95.20 N +ATOM 8148 OE1 GLN G 6 -23.166 1.094 23.403 1.00 95.20 O +ATOM 8149 N ALA G 7 -21.770 1.306 18.159 1.00 96.25 N +ATOM 8150 CA ALA G 7 -21.867 0.464 16.969 1.00 96.25 C +ATOM 8151 C ALA G 7 -23.171 -0.327 16.962 1.00 96.25 C +ATOM 8152 CB ALA G 7 -20.672 -0.483 16.889 1.00 96.25 C +ATOM 8153 O ALA G 7 -23.854 -0.401 15.937 1.00 96.25 O +ATOM 8154 N GLN G 8 -23.543 -0.868 18.100 1.00 96.39 N +ATOM 8155 CA GLN G 8 -24.728 -1.716 18.172 1.00 96.39 C +ATOM 8156 C GLN G 8 -25.993 -0.921 17.865 1.00 96.39 C +ATOM 8157 CB GLN G 8 -24.839 -2.368 19.551 1.00 96.39 C +ATOM 8158 O GLN G 8 -27.013 -1.494 17.476 1.00 96.39 O +ATOM 8159 CG GLN G 8 -25.041 -1.373 20.687 1.00 96.39 C +ATOM 8160 CD GLN G 8 -25.103 -2.041 22.048 1.00 96.39 C +ATOM 8161 NE2 GLN G 8 -25.865 -1.452 22.963 1.00 96.39 N +ATOM 8162 OE1 GLN G 8 -24.472 -3.078 22.275 1.00 96.39 O +ATOM 8163 N GLU G 9 -25.936 0.336 17.973 1.00 96.72 N +ATOM 8164 CA GLU G 9 -27.112 1.179 17.780 1.00 96.72 C +ATOM 8165 C GLU G 9 -27.333 1.488 16.302 1.00 96.72 C +ATOM 8166 CB GLU G 9 -26.976 2.480 18.575 1.00 96.72 C +ATOM 8167 O GLU G 9 -28.428 1.890 15.904 1.00 96.72 O +ATOM 8168 CG GLU G 9 -26.942 2.279 20.083 1.00 96.72 C +ATOM 8169 CD GLU G 9 -26.634 3.554 20.852 1.00 96.72 C +ATOM 8170 OE1 GLU G 9 -27.581 4.219 21.329 1.00 96.72 O +ATOM 8171 OE2 GLU G 9 -25.435 3.891 20.977 1.00 96.72 O +ATOM 8172 N ILE G 10 -26.338 1.314 15.508 1.00 97.09 N +ATOM 8173 CA ILE G 10 -26.519 1.702 14.113 1.00 97.09 C +ATOM 8174 C ILE G 10 -26.199 0.519 13.202 1.00 97.09 C +ATOM 8175 CB ILE G 10 -25.635 2.916 13.745 1.00 97.09 C +ATOM 8176 O ILE G 10 -26.282 0.631 11.977 1.00 97.09 O +ATOM 8177 CG1 ILE G 10 -24.151 2.561 13.894 1.00 97.09 C +ATOM 8178 CG2 ILE G 10 -25.997 4.128 14.608 1.00 97.09 C +ATOM 8179 CD1 ILE G 10 -23.213 3.494 13.141 1.00 97.09 C +ATOM 8180 N MET G 11 -25.795 -0.584 13.734 1.00 97.16 N +ATOM 8181 CA MET G 11 -25.449 -1.762 12.944 1.00 97.16 C +ATOM 8182 C MET G 11 -26.680 -2.332 12.249 1.00 97.16 C +ATOM 8183 CB MET G 11 -24.805 -2.832 13.827 1.00 97.16 C +ATOM 8184 O MET G 11 -27.811 -2.009 12.616 1.00 97.16 O +ATOM 8185 CG MET G 11 -25.765 -3.466 14.821 1.00 97.16 C +ATOM 8186 SD MET G 11 -24.954 -4.733 15.872 1.00 97.16 S +ATOM 8187 CE MET G 11 -26.369 -5.273 16.871 1.00 97.16 C +ATOM 8188 N THR G 12 -26.430 -3.090 11.195 1.00 93.86 N +ATOM 8189 CA THR G 12 -27.483 -3.891 10.581 1.00 93.86 C +ATOM 8190 C THR G 12 -27.643 -5.223 11.309 1.00 93.86 C +ATOM 8191 CB THR G 12 -27.192 -4.149 9.091 1.00 93.86 C +ATOM 8192 O THR G 12 -26.665 -5.942 11.520 1.00 93.86 O +ATOM 8193 CG2 THR G 12 -28.326 -4.931 8.436 1.00 93.86 C +ATOM 8194 OG1 THR G 12 -27.039 -2.895 8.416 1.00 93.86 O +ATOM 8195 N GLN G 13 -28.776 -5.574 11.748 1.00 90.96 N +ATOM 8196 CA GLN G 13 -29.006 -6.756 12.572 1.00 90.96 C +ATOM 8197 C GLN G 13 -29.314 -7.977 11.709 1.00 90.96 C +ATOM 8198 CB GLN G 13 -30.149 -6.509 13.558 1.00 90.96 C +ATOM 8199 O GLN G 13 -29.073 -9.113 12.123 1.00 90.96 O +ATOM 8200 CG GLN G 13 -29.830 -5.465 14.620 1.00 90.96 C +ATOM 8201 CD GLN G 13 -31.003 -5.185 15.539 1.00 90.96 C +ATOM 8202 NE2 GLN G 13 -30.980 -4.031 16.196 1.00 90.96 N +ATOM 8203 OE1 GLN G 13 -31.924 -6.000 15.658 1.00 90.96 O +ATOM 8204 N ASN G 14 -29.979 -7.792 10.598 1.00 83.96 N +ATOM 8205 CA ASN G 14 -30.265 -8.915 9.711 1.00 83.96 C +ATOM 8206 C ASN G 14 -29.002 -9.415 9.015 1.00 83.96 C +ATOM 8207 CB ASN G 14 -31.323 -8.526 8.677 1.00 83.96 C +ATOM 8208 O ASN G 14 -28.669 -8.958 7.920 1.00 83.96 O +ATOM 8209 CG ASN G 14 -32.049 -9.727 8.104 1.00 83.96 C +ATOM 8210 ND2 ASN G 14 -33.029 -9.474 7.245 1.00 83.96 N +ATOM 8211 OD1 ASN G 14 -31.731 -10.874 8.431 1.00 83.96 O +ATOM 8212 N VAL G 15 -28.366 -10.366 9.710 1.00 87.82 N +ATOM 8213 CA VAL G 15 -27.119 -10.896 9.167 1.00 87.82 C +ATOM 8214 C VAL G 15 -27.371 -12.263 8.534 1.00 87.82 C +ATOM 8215 CB VAL G 15 -26.027 -11.005 10.254 1.00 87.82 C +ATOM 8216 O VAL G 15 -28.090 -13.092 9.098 1.00 87.82 O +ATOM 8217 CG1 VAL G 15 -24.707 -11.477 9.648 1.00 87.82 C +ATOM 8218 CG2 VAL G 15 -25.844 -9.664 10.962 1.00 87.82 C +ATOM 8219 N VAL G 16 -26.935 -12.448 7.352 1.00 94.95 N +ATOM 8220 CA VAL G 16 -27.040 -13.728 6.660 1.00 94.95 C +ATOM 8221 C VAL G 16 -25.673 -14.407 6.619 1.00 94.95 C +ATOM 8222 CB VAL G 16 -27.591 -13.555 5.227 1.00 94.95 C +ATOM 8223 O VAL G 16 -24.651 -13.749 6.412 1.00 94.95 O +ATOM 8224 CG1 VAL G 16 -27.649 -14.899 4.504 1.00 94.95 C +ATOM 8225 CG2 VAL G 16 -28.973 -12.904 5.263 1.00 94.95 C +ATOM 8226 N THR G 17 -25.703 -15.624 6.902 1.00 96.27 N +ATOM 8227 CA THR G 17 -24.457 -16.382 6.948 1.00 96.27 C +ATOM 8228 C THR G 17 -24.359 -17.334 5.759 1.00 96.27 C +ATOM 8229 CB THR G 17 -24.337 -17.181 8.259 1.00 96.27 C +ATOM 8230 O THR G 17 -25.361 -17.613 5.097 1.00 96.27 O +ATOM 8231 CG2 THR G 17 -24.513 -16.274 9.473 1.00 96.27 C +ATOM 8232 OG1 THR G 17 -25.346 -18.198 8.287 1.00 96.27 O +ATOM 8233 N ILE G 18 -23.116 -17.791 5.454 1.00 97.90 N +ATOM 8234 CA ILE G 18 -22.833 -18.744 4.387 1.00 97.90 C +ATOM 8235 C ILE G 18 -21.674 -19.649 4.797 1.00 97.90 C +ATOM 8236 CB ILE G 18 -22.506 -18.024 3.059 1.00 97.90 C +ATOM 8237 O ILE G 18 -20.855 -19.276 5.640 1.00 97.90 O +ATOM 8238 CG1 ILE G 18 -22.541 -19.017 1.891 1.00 97.90 C +ATOM 8239 CG2 ILE G 18 -21.145 -17.326 3.143 1.00 97.90 C +ATOM 8240 CD1 ILE G 18 -22.581 -18.358 0.519 1.00 97.90 C +ATOM 8241 N ARG G 19 -21.692 -20.790 4.232 1.00 96.91 N +ATOM 8242 CA ARG G 19 -20.573 -21.692 4.488 1.00 96.91 C +ATOM 8243 C ARG G 19 -19.389 -21.365 3.584 1.00 96.91 C +ATOM 8244 CB ARG G 19 -21.000 -23.148 4.287 1.00 96.91 C +ATOM 8245 O ARG G 19 -19.573 -20.939 2.442 1.00 96.91 O +ATOM 8246 CG ARG G 19 -21.999 -23.645 5.320 1.00 96.91 C +ATOM 8247 CD ARG G 19 -22.266 -25.136 5.174 1.00 96.91 C +ATOM 8248 NE ARG G 19 -23.104 -25.642 6.258 1.00 96.91 N +ATOM 8249 NH1 ARG G 19 -23.141 -27.821 5.489 1.00 96.91 N +ATOM 8250 NH2 ARG G 19 -24.261 -27.258 7.409 1.00 96.91 N +ATOM 8251 CZ ARG G 19 -23.500 -26.906 6.383 1.00 96.91 C +ATOM 8252 N GLY G 20 -18.236 -21.666 4.094 1.00 97.55 N +ATOM 8253 CA GLY G 20 -17.046 -21.462 3.282 1.00 97.55 C +ATOM 8254 C GLY G 20 -17.002 -22.352 2.054 1.00 97.55 C +ATOM 8255 O GLY G 20 -16.416 -21.982 1.034 1.00 97.55 O +ATOM 8256 N SER G 21 -17.570 -23.494 2.103 1.00 97.09 N +ATOM 8257 CA SER G 21 -17.544 -24.468 1.018 1.00 97.09 C +ATOM 8258 C SER G 21 -18.547 -24.108 -0.073 1.00 97.09 C +ATOM 8259 CB SER G 21 -17.837 -25.872 1.549 1.00 97.09 C +ATOM 8260 O SER G 21 -18.534 -24.698 -1.155 1.00 97.09 O +ATOM 8261 OG SER G 21 -19.102 -25.914 2.187 1.00 97.09 O +ATOM 8262 N ALA G 22 -19.380 -23.115 0.165 1.00 98.07 N +ATOM 8263 CA ALA G 22 -20.347 -22.705 -0.850 1.00 98.07 C +ATOM 8264 C ALA G 22 -19.644 -22.128 -2.076 1.00 98.07 C +ATOM 8265 CB ALA G 22 -21.326 -21.686 -0.273 1.00 98.07 C +ATOM 8266 O ALA G 22 -18.497 -21.683 -1.989 1.00 98.07 O +ATOM 8267 N THR G 23 -20.333 -22.199 -3.200 1.00 98.34 N +ATOM 8268 CA THR G 23 -19.781 -21.565 -4.392 1.00 98.34 C +ATOM 8269 C THR G 23 -19.962 -20.051 -4.334 1.00 98.34 C +ATOM 8270 CB THR G 23 -20.438 -22.114 -5.672 1.00 98.34 C +ATOM 8271 O THR G 23 -20.823 -19.552 -3.606 1.00 98.34 O +ATOM 8272 CG2 THR G 23 -20.341 -23.635 -5.732 1.00 98.34 C +ATOM 8273 OG1 THR G 23 -21.820 -21.734 -5.694 1.00 98.34 O +ATOM 8274 N VAL G 24 -19.197 -19.408 -5.077 1.00 98.80 N +ATOM 8275 CA VAL G 24 -19.346 -17.962 -5.200 1.00 98.80 C +ATOM 8276 C VAL G 24 -20.698 -17.633 -5.828 1.00 98.80 C +ATOM 8277 CB VAL G 24 -18.204 -17.343 -6.038 1.00 98.80 C +ATOM 8278 O VAL G 24 -21.333 -16.640 -5.464 1.00 98.80 O +ATOM 8279 CG1 VAL G 24 -18.477 -15.866 -6.314 1.00 98.80 C +ATOM 8280 CG2 VAL G 24 -16.865 -17.518 -5.325 1.00 98.80 C +ATOM 8281 N ALA G 25 -21.145 -18.462 -6.718 1.00 98.67 N +ATOM 8282 CA ALA G 25 -22.462 -18.283 -7.322 1.00 98.67 C +ATOM 8283 C ALA G 25 -23.559 -18.300 -6.262 1.00 98.67 C +ATOM 8284 CB ALA G 25 -22.720 -19.366 -8.367 1.00 98.67 C +ATOM 8285 O ALA G 25 -24.481 -17.481 -6.299 1.00 98.67 O +ATOM 8286 N ASP G 26 -23.460 -19.211 -5.313 1.00 98.46 N +ATOM 8287 CA ASP G 26 -24.410 -19.269 -4.206 1.00 98.46 C +ATOM 8288 C ASP G 26 -24.400 -17.969 -3.405 1.00 98.46 C +ATOM 8289 CB ASP G 26 -24.096 -20.453 -3.290 1.00 98.46 C +ATOM 8290 O ASP G 26 -25.456 -17.459 -3.026 1.00 98.46 O +ATOM 8291 CG ASP G 26 -24.351 -21.797 -3.950 1.00 98.46 C +ATOM 8292 OD1 ASP G 26 -25.244 -21.890 -4.820 1.00 98.46 O +ATOM 8293 OD2 ASP G 26 -23.655 -22.773 -3.595 1.00 98.46 O +ATOM 8294 N ALA G 27 -23.244 -17.515 -3.179 1.00 98.73 N +ATOM 8295 CA ALA G 27 -23.103 -16.271 -2.425 1.00 98.73 C +ATOM 8296 C ALA G 27 -23.767 -15.108 -3.157 1.00 98.73 C +ATOM 8297 CB ALA G 27 -21.629 -15.965 -2.173 1.00 98.73 C +ATOM 8298 O ALA G 27 -24.500 -14.323 -2.552 1.00 98.73 O +ATOM 8299 N VAL G 28 -23.513 -14.997 -4.449 1.00 98.75 N +ATOM 8300 CA VAL G 28 -24.107 -13.933 -5.252 1.00 98.75 C +ATOM 8301 C VAL G 28 -25.629 -14.047 -5.215 1.00 98.75 C +ATOM 8302 CB VAL G 28 -23.604 -13.975 -6.712 1.00 98.75 C +ATOM 8303 O VAL G 28 -26.328 -13.050 -5.017 1.00 98.75 O +ATOM 8304 CG1 VAL G 28 -24.358 -12.962 -7.572 1.00 98.75 C +ATOM 8305 CG2 VAL G 28 -22.100 -13.712 -6.766 1.00 98.75 C +ATOM 8306 N LYS G 29 -26.092 -15.215 -5.379 1.00 98.49 N +ATOM 8307 CA LYS G 29 -27.532 -15.453 -5.331 1.00 98.49 C +ATOM 8308 C LYS G 29 -28.122 -14.991 -4.002 1.00 98.49 C +ATOM 8309 CB LYS G 29 -27.839 -16.934 -5.554 1.00 98.49 C +ATOM 8310 O LYS G 29 -29.132 -14.285 -3.977 1.00 98.49 O +ATOM 8311 CG LYS G 29 -29.324 -17.264 -5.564 1.00 98.49 C +ATOM 8312 CD LYS G 29 -29.565 -18.754 -5.772 1.00 98.49 C +ATOM 8313 CE LYS G 29 -31.047 -19.097 -5.701 1.00 98.49 C +ATOM 8314 NZ LYS G 29 -31.283 -20.565 -5.839 1.00 98.49 N +ATOM 8315 N LEU G 30 -27.523 -15.395 -2.996 1.00 98.20 N +ATOM 8316 CA LEU G 30 -27.989 -15.040 -1.660 1.00 98.20 C +ATOM 8317 C LEU G 30 -27.947 -13.529 -1.454 1.00 98.20 C +ATOM 8318 CB LEU G 30 -27.140 -15.736 -0.593 1.00 98.20 C +ATOM 8319 O LEU G 30 -28.886 -12.947 -0.907 1.00 98.20 O +ATOM 8320 CG LEU G 30 -27.659 -15.659 0.844 1.00 98.20 C +ATOM 8321 CD1 LEU G 30 -29.097 -16.164 0.916 1.00 98.20 C +ATOM 8322 CD2 LEU G 30 -26.759 -16.455 1.782 1.00 98.20 C +ATOM 8323 N MET G 31 -26.931 -12.876 -1.892 1.00 97.78 N +ATOM 8324 CA MET G 31 -26.807 -11.426 -1.771 1.00 97.78 C +ATOM 8325 C MET G 31 -27.894 -10.718 -2.573 1.00 97.78 C +ATOM 8326 CB MET G 31 -25.426 -10.963 -2.239 1.00 97.78 C +ATOM 8327 O MET G 31 -28.476 -9.737 -2.107 1.00 97.78 O +ATOM 8328 CG MET G 31 -24.305 -11.303 -1.270 1.00 97.78 C +ATOM 8329 SD MET G 31 -22.668 -10.715 -1.856 1.00 97.78 S +ATOM 8330 CE MET G 31 -21.598 -11.418 -0.570 1.00 97.78 C +ATOM 8331 N LYS G 32 -28.161 -11.201 -3.751 1.00 97.65 N +ATOM 8332 CA LYS G 32 -29.220 -10.632 -4.579 1.00 97.65 C +ATOM 8333 C LYS G 32 -30.585 -10.797 -3.917 1.00 97.65 C +ATOM 8334 CB LYS G 32 -29.228 -11.282 -5.963 1.00 97.65 C +ATOM 8335 O LYS G 32 -31.343 -9.832 -3.796 1.00 97.65 O +ATOM 8336 CG LYS G 32 -28.073 -10.852 -6.856 1.00 97.65 C +ATOM 8337 CD LYS G 32 -28.168 -11.486 -8.238 1.00 97.65 C +ATOM 8338 CE LYS G 32 -27.068 -10.981 -9.162 1.00 97.65 C +ATOM 8339 NZ LYS G 32 -27.197 -11.549 -10.538 1.00 97.65 N +ATOM 8340 N GLU G 33 -30.853 -11.988 -3.412 1.00 97.19 N +ATOM 8341 CA GLU G 33 -32.143 -12.296 -2.803 1.00 97.19 C +ATOM 8342 C GLU G 33 -32.374 -11.461 -1.547 1.00 97.19 C +ATOM 8343 CB GLU G 33 -32.237 -13.787 -2.467 1.00 97.19 C +ATOM 8344 O GLU G 33 -33.482 -10.971 -1.316 1.00 97.19 O +ATOM 8345 CG GLU G 33 -32.411 -14.682 -3.686 1.00 97.19 C +ATOM 8346 CD GLU G 33 -32.395 -16.164 -3.349 1.00 97.19 C +ATOM 8347 OE1 GLU G 33 -32.637 -16.995 -4.254 1.00 97.19 O +ATOM 8348 OE2 GLU G 33 -32.139 -16.498 -2.170 1.00 97.19 O +ATOM 8349 N LYS G 34 -31.337 -11.300 -0.824 1.00 96.17 N +ATOM 8350 CA LYS G 34 -31.478 -10.634 0.468 1.00 96.17 C +ATOM 8351 C LYS G 34 -31.072 -9.165 0.376 1.00 96.17 C +ATOM 8352 CB LYS G 34 -30.641 -11.343 1.532 1.00 96.17 C +ATOM 8353 O LYS G 34 -31.158 -8.430 1.361 1.00 96.17 O +ATOM 8354 CG LYS G 34 -31.036 -12.794 1.766 1.00 96.17 C +ATOM 8355 CD LYS G 34 -32.437 -12.903 2.354 1.00 96.17 C +ATOM 8356 CE LYS G 34 -32.792 -14.345 2.692 1.00 96.17 C +ATOM 8357 NZ LYS G 34 -34.161 -14.456 3.279 1.00 96.17 N +ATOM 8358 N LYS G 35 -30.593 -8.709 -0.839 1.00 94.15 N +ATOM 8359 CA LYS G 35 -30.159 -7.339 -1.094 1.00 94.15 C +ATOM 8360 C LYS G 35 -29.064 -6.918 -0.119 1.00 94.15 C +ATOM 8361 CB LYS G 35 -31.343 -6.375 -1.000 1.00 94.15 C +ATOM 8362 O LYS G 35 -29.164 -5.870 0.522 1.00 94.15 O +ATOM 8363 CG LYS G 35 -32.435 -6.633 -2.027 1.00 94.15 C +ATOM 8364 CD LYS G 35 -33.552 -5.602 -1.927 1.00 94.15 C +ATOM 8365 CE LYS G 35 -34.650 -5.865 -2.949 1.00 94.15 C +ATOM 8366 NZ LYS G 35 -35.746 -4.854 -2.857 1.00 94.15 N +ATOM 8367 N LEU G 36 -28.098 -7.746 -0.032 1.00 94.62 N +ATOM 8368 CA LEU G 36 -26.977 -7.513 0.872 1.00 94.62 C +ATOM 8369 C LEU G 36 -25.675 -7.354 0.094 1.00 94.62 C +ATOM 8370 CB LEU G 36 -26.849 -8.663 1.874 1.00 94.62 C +ATOM 8371 O LEU G 36 -25.560 -7.832 -1.037 1.00 94.62 O +ATOM 8372 CG LEU G 36 -28.021 -8.856 2.838 1.00 94.62 C +ATOM 8373 CD1 LEU G 36 -27.874 -10.172 3.595 1.00 94.62 C +ATOM 8374 CD2 LEU G 36 -28.115 -7.683 3.808 1.00 94.62 C +ATOM 8375 N ARG G 37 -24.744 -6.679 0.686 1.00 95.09 N +ATOM 8376 CA ARG G 37 -23.468 -6.419 0.028 1.00 95.09 C +ATOM 8377 C ARG G 37 -22.336 -7.182 0.707 1.00 95.09 C +ATOM 8378 CB ARG G 37 -23.161 -4.920 0.023 1.00 95.09 C +ATOM 8379 O ARG G 37 -21.172 -7.046 0.326 1.00 95.09 O +ATOM 8380 CG ARG G 37 -24.122 -4.097 -0.820 1.00 95.09 C +ATOM 8381 CD ARG G 37 -23.846 -2.605 -0.695 1.00 95.09 C +ATOM 8382 NE ARG G 37 -24.842 -1.811 -1.409 1.00 95.09 N +ATOM 8383 NH1 ARG G 37 -24.803 -0.045 0.081 1.00 95.09 N +ATOM 8384 NH2 ARG G 37 -26.183 0.022 -1.749 1.00 95.09 N +ATOM 8385 CZ ARG G 37 -25.274 -0.613 -1.024 1.00 95.09 C +ATOM 8386 N GLY G 38 -22.567 -7.950 1.713 1.00 96.37 N +ATOM 8387 CA GLY G 38 -21.652 -8.819 2.436 1.00 96.37 C +ATOM 8388 C GLY G 38 -22.354 -9.934 3.186 1.00 96.37 C +ATOM 8389 O GLY G 38 -23.482 -9.761 3.653 1.00 96.37 O +ATOM 8390 N LEU G 39 -21.619 -11.026 3.319 1.00 98.03 N +ATOM 8391 CA LEU G 39 -22.101 -12.187 4.059 1.00 98.03 C +ATOM 8392 C LEU G 39 -21.084 -12.623 5.109 1.00 98.03 C +ATOM 8393 CB LEU G 39 -22.397 -13.347 3.105 1.00 98.03 C +ATOM 8394 O LEU G 39 -19.875 -12.539 4.880 1.00 98.03 O +ATOM 8395 CG LEU G 39 -23.333 -13.040 1.935 1.00 98.03 C +ATOM 8396 CD1 LEU G 39 -23.341 -14.201 0.945 1.00 98.03 C +ATOM 8397 CD2 LEU G 39 -24.742 -12.750 2.439 1.00 98.03 C +ATOM 8398 N ILE G 40 -21.610 -13.109 6.202 1.00 97.83 N +ATOM 8399 CA ILE G 40 -20.736 -13.647 7.239 1.00 97.83 C +ATOM 8400 C ILE G 40 -20.487 -15.132 6.983 1.00 97.83 C +ATOM 8401 CB ILE G 40 -21.335 -13.439 8.648 1.00 97.83 C +ATOM 8402 O ILE G 40 -21.412 -15.874 6.646 1.00 97.83 O +ATOM 8403 CG1 ILE G 40 -21.476 -11.943 8.952 1.00 97.83 C +ATOM 8404 CG2 ILE G 40 -20.477 -14.135 9.708 1.00 97.83 C +ATOM 8405 CD1 ILE G 40 -20.160 -11.178 8.917 1.00 97.83 C +ATOM 8406 N VAL G 41 -19.272 -15.539 6.992 1.00 97.77 N +ATOM 8407 CA VAL G 41 -18.920 -16.951 6.884 1.00 97.77 C +ATOM 8408 C VAL G 41 -18.917 -17.590 8.271 1.00 97.77 C +ATOM 8409 CB VAL G 41 -17.545 -17.143 6.206 1.00 97.77 C +ATOM 8410 O VAL G 41 -18.165 -17.170 9.153 1.00 97.77 O +ATOM 8411 CG1 VAL G 41 -17.208 -18.627 6.080 1.00 97.77 C +ATOM 8412 CG2 VAL G 41 -17.528 -16.470 4.835 1.00 97.77 C +ATOM 8413 N GLU G 42 -19.569 -18.585 8.464 1.00 93.39 N +ATOM 8414 CA GLU G 42 -19.807 -19.204 9.765 1.00 93.39 C +ATOM 8415 C GLU G 42 -18.577 -19.968 10.246 1.00 93.39 C +ATOM 8416 CB GLU G 42 -21.016 -20.141 9.701 1.00 93.39 C +ATOM 8417 O GLU G 42 -17.863 -20.574 9.444 1.00 93.39 O +ATOM 8418 CG GLU G 42 -22.332 -19.429 9.421 1.00 93.39 C +ATOM 8419 CD GLU G 42 -23.509 -20.380 9.271 1.00 93.39 C +ATOM 8420 OE1 GLU G 42 -24.663 -19.905 9.165 1.00 93.39 O +ATOM 8421 OE2 GLU G 42 -23.275 -21.609 9.261 1.00 93.39 O +ATOM 8422 N PRO G 43 -18.431 -19.965 11.588 1.00 91.81 N +ATOM 8423 CA PRO G 43 -17.408 -20.858 12.136 1.00 91.81 C +ATOM 8424 C PRO G 43 -17.795 -22.332 12.034 1.00 91.81 C +ATOM 8425 CB PRO G 43 -17.306 -20.421 13.600 1.00 91.81 C +ATOM 8426 O PRO G 43 -18.982 -22.665 12.060 1.00 91.81 O +ATOM 8427 CG PRO G 43 -18.037 -19.119 13.662 1.00 91.81 C +ATOM 8428 CD PRO G 43 -19.006 -19.061 12.516 1.00 91.81 C +ATOM 8429 N ARG G 44 -16.847 -23.168 11.877 1.00 85.96 N +ATOM 8430 CA ARG G 44 -17.109 -24.600 11.784 1.00 85.96 C +ATOM 8431 C ARG G 44 -17.277 -25.217 13.169 1.00 85.96 C +ATOM 8432 CB ARG G 44 -15.982 -25.306 11.029 1.00 85.96 C +ATOM 8433 O ARG G 44 -18.009 -26.195 13.334 1.00 85.96 O +ATOM 8434 CG ARG G 44 -15.859 -24.887 9.572 1.00 85.96 C +ATOM 8435 CD ARG G 44 -16.840 -25.639 8.684 1.00 85.96 C +ATOM 8436 NE ARG G 44 -16.476 -27.047 8.552 1.00 85.96 N +ATOM 8437 NH1 ARG G 44 -17.712 -27.399 6.632 1.00 85.96 N +ATOM 8438 NH2 ARG G 44 -16.507 -29.116 7.555 1.00 85.96 N +ATOM 8439 CZ ARG G 44 -16.899 -27.851 7.580 1.00 85.96 C +ATOM 8440 N HIS G 45 -16.526 -24.699 14.132 1.00 81.67 N +ATOM 8441 CA HIS G 45 -16.590 -25.127 15.525 1.00 81.67 C +ATOM 8442 C HIS G 45 -16.314 -23.964 16.472 1.00 81.67 C +ATOM 8443 CB HIS G 45 -15.598 -26.261 15.783 1.00 81.67 C +ATOM 8444 O HIS G 45 -16.055 -22.843 16.027 1.00 81.67 O +ATOM 8445 CG HIS G 45 -14.203 -25.951 15.340 1.00 81.67 C +ATOM 8446 CD2 HIS G 45 -13.509 -26.346 14.247 1.00 81.67 C +ATOM 8447 ND1 HIS G 45 -13.355 -25.141 16.064 1.00 81.67 N +ATOM 8448 CE1 HIS G 45 -12.197 -25.051 15.433 1.00 81.67 C +ATOM 8449 NE2 HIS G 45 -12.264 -25.773 14.327 1.00 81.67 N +ATOM 8450 N GLU G 46 -16.374 -24.161 17.653 1.00 75.76 N +ATOM 8451 CA GLU G 46 -16.327 -23.114 18.669 1.00 75.76 C +ATOM 8452 C GLU G 46 -15.005 -22.354 18.619 1.00 75.76 C +ATOM 8453 CB GLU G 46 -16.539 -23.709 20.064 1.00 75.76 C +ATOM 8454 O GLU G 46 -14.957 -21.160 18.922 1.00 75.76 O +ATOM 8455 CG GLU G 46 -17.990 -24.048 20.374 1.00 75.76 C +ATOM 8456 CD GLU G 46 -18.205 -24.512 21.806 1.00 75.76 C +ATOM 8457 OE1 GLU G 46 -19.372 -24.719 22.208 1.00 75.76 O +ATOM 8458 OE2 GLU G 46 -17.197 -24.668 22.532 1.00 75.76 O +ATOM 8459 N GLN G 47 -13.987 -22.969 18.224 1.00 75.65 N +ATOM 8460 CA GLN G 47 -12.673 -22.336 18.202 1.00 75.65 C +ATOM 8461 C GLN G 47 -12.397 -21.690 16.847 1.00 75.65 C +ATOM 8462 CB GLN G 47 -11.580 -23.354 18.531 1.00 75.65 C +ATOM 8463 O GLN G 47 -11.392 -20.997 16.677 1.00 75.65 O +ATOM 8464 CG GLN G 47 -11.647 -23.889 19.955 1.00 75.65 C +ATOM 8465 CD GLN G 47 -10.695 -25.046 20.192 1.00 75.65 C +ATOM 8466 NE2 GLN G 47 -10.641 -25.525 21.430 1.00 75.65 N +ATOM 8467 OE1 GLN G 47 -10.014 -25.506 19.270 1.00 75.65 O +ATOM 8468 N ASP G 48 -13.281 -21.913 15.974 1.00 86.91 N +ATOM 8469 CA ASP G 48 -13.157 -21.344 14.636 1.00 86.91 C +ATOM 8470 C ASP G 48 -13.715 -19.923 14.589 1.00 86.91 C +ATOM 8471 CB ASP G 48 -13.873 -22.224 13.610 1.00 86.91 C +ATOM 8472 O ASP G 48 -14.750 -19.637 15.194 1.00 86.91 O +ATOM 8473 CG ASP G 48 -13.559 -21.837 12.175 1.00 86.91 C +ATOM 8474 OD1 ASP G 48 -12.415 -21.424 11.891 1.00 86.91 O +ATOM 8475 OD2 ASP G 48 -14.467 -21.944 11.321 1.00 86.91 O +ATOM 8476 N PRO G 49 -13.040 -19.002 13.921 1.00 92.76 N +ATOM 8477 CA PRO G 49 -13.504 -17.613 13.875 1.00 92.76 C +ATOM 8478 C PRO G 49 -14.514 -17.365 12.757 1.00 92.76 C +ATOM 8479 CB PRO G 49 -12.218 -16.819 13.636 1.00 92.76 C +ATOM 8480 O PRO G 49 -14.653 -18.191 11.851 1.00 92.76 O +ATOM 8481 CG PRO G 49 -11.367 -17.714 12.794 1.00 92.76 C +ATOM 8482 CD PRO G 49 -11.573 -19.131 13.245 1.00 92.76 C +ATOM 8483 N TYR G 50 -15.178 -16.211 12.850 1.00 94.24 N +ATOM 8484 CA TYR G 50 -16.033 -15.745 11.764 1.00 94.24 C +ATOM 8485 C TYR G 50 -15.201 -15.225 10.598 1.00 94.24 C +ATOM 8486 CB TYR G 50 -16.981 -14.648 12.259 1.00 94.24 C +ATOM 8487 O TYR G 50 -14.068 -14.775 10.788 1.00 94.24 O +ATOM 8488 CG TYR G 50 -18.052 -15.149 13.197 1.00 94.24 C +ATOM 8489 CD1 TYR G 50 -19.217 -15.734 12.706 1.00 94.24 C +ATOM 8490 CD2 TYR G 50 -17.902 -15.037 14.575 1.00 94.24 C +ATOM 8491 CE1 TYR G 50 -20.208 -16.195 13.567 1.00 94.24 C +ATOM 8492 CE2 TYR G 50 -18.886 -15.495 15.445 1.00 94.24 C +ATOM 8493 OH TYR G 50 -21.011 -16.526 15.789 1.00 94.24 O +ATOM 8494 CZ TYR G 50 -20.034 -16.072 14.932 1.00 94.24 C +ATOM 8495 N GLY G 51 -15.747 -15.426 9.423 1.00 96.68 N +ATOM 8496 CA GLY G 51 -15.229 -14.784 8.225 1.00 96.68 C +ATOM 8497 C GLY G 51 -16.242 -13.882 7.546 1.00 96.68 C +ATOM 8498 O GLY G 51 -17.377 -13.756 8.009 1.00 96.68 O +ATOM 8499 N ILE G 52 -15.801 -13.222 6.506 1.00 98.31 N +ATOM 8500 CA ILE G 52 -16.691 -12.349 5.750 1.00 98.31 C +ATOM 8501 C ILE G 52 -16.334 -12.406 4.266 1.00 98.31 C +ATOM 8502 CB ILE G 52 -16.623 -10.892 6.262 1.00 98.31 C +ATOM 8503 O ILE G 52 -15.160 -12.523 3.908 1.00 98.31 O +ATOM 8504 CG1 ILE G 52 -17.701 -10.037 5.586 1.00 98.31 C +ATOM 8505 CG2 ILE G 52 -15.229 -10.303 6.027 1.00 98.31 C +ATOM 8506 CD1 ILE G 52 -17.915 -8.680 6.241 1.00 98.31 C +ATOM 8507 N VAL G 53 -17.341 -12.430 3.413 1.00 98.55 N +ATOM 8508 CA VAL G 53 -17.190 -12.270 1.971 1.00 98.55 C +ATOM 8509 C VAL G 53 -18.058 -11.112 1.485 1.00 98.55 C +ATOM 8510 CB VAL G 53 -17.558 -13.567 1.215 1.00 98.55 C +ATOM 8511 O VAL G 53 -19.226 -11.001 1.866 1.00 98.55 O +ATOM 8512 CG1 VAL G 53 -19.024 -13.929 1.447 1.00 98.55 C +ATOM 8513 CG2 VAL G 53 -17.273 -13.413 -0.278 1.00 98.55 C +ATOM 8514 N THR G 54 -17.495 -10.217 0.685 1.00 98.18 N +ATOM 8515 CA THR G 54 -18.193 -9.005 0.272 1.00 98.18 C +ATOM 8516 C THR G 54 -18.315 -8.943 -1.248 1.00 98.18 C +ATOM 8517 CB THR G 54 -17.474 -7.743 0.783 1.00 98.18 C +ATOM 8518 O THR G 54 -17.686 -9.729 -1.959 1.00 98.18 O +ATOM 8519 CG2 THR G 54 -17.176 -7.847 2.276 1.00 98.18 C +ATOM 8520 OG1 THR G 54 -16.240 -7.582 0.072 1.00 98.18 O +ATOM 8521 N GLU G 55 -19.111 -7.997 -1.703 1.00 98.04 N +ATOM 8522 CA GLU G 55 -19.243 -7.757 -3.137 1.00 98.04 C +ATOM 8523 C GLU G 55 -17.908 -7.351 -3.755 1.00 98.04 C +ATOM 8524 CB GLU G 55 -20.297 -6.680 -3.408 1.00 98.04 C +ATOM 8525 O GLU G 55 -17.617 -7.699 -4.901 1.00 98.04 O +ATOM 8526 CG GLU G 55 -19.980 -5.336 -2.769 1.00 98.04 C +ATOM 8527 CD GLU G 55 -21.069 -4.297 -2.985 1.00 98.04 C +ATOM 8528 OE1 GLU G 55 -20.861 -3.115 -2.629 1.00 98.04 O +ATOM 8529 OE2 GLU G 55 -22.141 -4.668 -3.514 1.00 98.04 O +ATOM 8530 N THR G 56 -17.132 -6.690 -2.992 1.00 98.06 N +ATOM 8531 CA THR G 56 -15.823 -6.275 -3.485 1.00 98.06 C +ATOM 8532 C THR G 56 -14.915 -7.484 -3.694 1.00 98.06 C +ATOM 8533 CB THR G 56 -15.149 -5.286 -2.516 1.00 98.06 C +ATOM 8534 O THR G 56 -14.205 -7.568 -4.699 1.00 98.06 O +ATOM 8535 CG2 THR G 56 -13.815 -4.796 -3.070 1.00 98.06 C +ATOM 8536 OG1 THR G 56 -16.012 -4.160 -2.315 1.00 98.06 O +ATOM 8537 N ASP G 57 -14.939 -8.447 -2.802 1.00 98.46 N +ATOM 8538 CA ASP G 57 -14.171 -9.675 -2.979 1.00 98.46 C +ATOM 8539 C ASP G 57 -14.548 -10.375 -4.283 1.00 98.46 C +ATOM 8540 CB ASP G 57 -14.387 -10.619 -1.794 1.00 98.46 C +ATOM 8541 O ASP G 57 -13.673 -10.764 -5.060 1.00 98.46 O +ATOM 8542 CG ASP G 57 -13.800 -10.087 -0.498 1.00 98.46 C +ATOM 8543 OD1 ASP G 57 -12.702 -9.490 -0.525 1.00 98.46 O +ATOM 8544 OD2 ASP G 57 -14.440 -10.269 0.560 1.00 98.46 O +ATOM 8545 N ILE G 58 -15.795 -10.463 -4.507 1.00 98.76 N +ATOM 8546 CA ILE G 58 -16.312 -11.193 -5.660 1.00 98.76 C +ATOM 8547 C ILE G 58 -15.916 -10.471 -6.947 1.00 98.76 C +ATOM 8548 CB ILE G 58 -17.847 -11.354 -5.586 1.00 98.76 C +ATOM 8549 O ILE G 58 -15.402 -11.091 -7.881 1.00 98.76 O +ATOM 8550 CG1 ILE G 58 -18.231 -12.285 -4.431 1.00 98.76 C +ATOM 8551 CG2 ILE G 58 -18.400 -11.874 -6.916 1.00 98.76 C +ATOM 8552 CD1 ILE G 58 -19.726 -12.341 -4.151 1.00 98.76 C +ATOM 8553 N VAL G 59 -16.090 -9.209 -6.960 1.00 98.60 N +ATOM 8554 CA VAL G 59 -15.815 -8.454 -8.179 1.00 98.60 C +ATOM 8555 C VAL G 59 -14.310 -8.408 -8.431 1.00 98.60 C +ATOM 8556 CB VAL G 59 -16.387 -7.021 -8.099 1.00 98.60 C +ATOM 8557 O VAL G 59 -13.853 -8.659 -9.548 1.00 98.60 O +ATOM 8558 CG1 VAL G 59 -15.885 -6.174 -9.267 1.00 98.60 C +ATOM 8559 CG2 VAL G 59 -17.914 -7.056 -8.078 1.00 98.60 C +ATOM 8560 N TYR G 60 -13.522 -8.221 -7.403 1.00 98.28 N +ATOM 8561 CA TYR G 60 -12.078 -8.059 -7.536 1.00 98.28 C +ATOM 8562 C TYR G 60 -11.408 -9.387 -7.863 1.00 98.28 C +ATOM 8563 CB TYR G 60 -11.482 -7.475 -6.251 1.00 98.28 C +ATOM 8564 O TYR G 60 -10.417 -9.426 -8.597 1.00 98.28 O +ATOM 8565 CG TYR G 60 -11.565 -5.970 -6.172 1.00 98.28 C +ATOM 8566 CD1 TYR G 60 -12.435 -5.257 -6.994 1.00 98.28 C +ATOM 8567 CD2 TYR G 60 -10.774 -5.259 -5.277 1.00 98.28 C +ATOM 8568 CE1 TYR G 60 -12.514 -3.870 -6.925 1.00 98.28 C +ATOM 8569 CE2 TYR G 60 -10.845 -3.872 -5.200 1.00 98.28 C +ATOM 8570 OH TYR G 60 -11.790 -1.814 -5.955 1.00 98.28 O +ATOM 8571 CZ TYR G 60 -11.717 -3.187 -6.027 1.00 98.28 C +ATOM 8572 N LYS G 61 -11.901 -10.455 -7.306 1.00 98.18 N +ATOM 8573 CA LYS G 61 -11.145 -11.703 -7.344 1.00 98.18 C +ATOM 8574 C LYS G 61 -11.775 -12.698 -8.314 1.00 98.18 C +ATOM 8575 CB LYS G 61 -11.055 -12.319 -5.946 1.00 98.18 C +ATOM 8576 O LYS G 61 -11.132 -13.668 -8.722 1.00 98.18 O +ATOM 8577 CG LYS G 61 -10.309 -11.459 -4.937 1.00 98.18 C +ATOM 8578 CD LYS G 61 -10.288 -12.106 -3.559 1.00 98.18 C +ATOM 8579 CE LYS G 61 -9.646 -11.193 -2.522 1.00 98.18 C +ATOM 8580 NZ LYS G 61 -9.652 -11.810 -1.162 1.00 98.18 N +ATOM 8581 N VAL G 62 -13.008 -12.491 -8.684 1.00 98.39 N +ATOM 8582 CA VAL G 62 -13.681 -13.468 -9.533 1.00 98.39 C +ATOM 8583 C VAL G 62 -14.054 -12.823 -10.866 1.00 98.39 C +ATOM 8584 CB VAL G 62 -14.941 -14.044 -8.849 1.00 98.39 C +ATOM 8585 O VAL G 62 -13.452 -13.125 -11.899 1.00 98.39 O +ATOM 8586 CG1 VAL G 62 -15.554 -15.158 -9.695 1.00 98.39 C +ATOM 8587 CG2 VAL G 62 -14.600 -14.556 -7.450 1.00 98.39 C +ATOM 8588 N ALA G 63 -14.920 -11.839 -10.863 1.00 97.89 N +ATOM 8589 CA ALA G 63 -15.400 -11.209 -12.090 1.00 97.89 C +ATOM 8590 C ALA G 63 -14.249 -10.583 -12.872 1.00 97.89 C +ATOM 8591 CB ALA G 63 -16.457 -10.155 -11.769 1.00 97.89 C +ATOM 8592 O ALA G 63 -14.169 -10.729 -14.094 1.00 97.89 O +ATOM 8593 N ALA G 64 -13.390 -10.016 -12.208 1.00 97.27 N +ATOM 8594 CA ALA G 64 -12.285 -9.286 -12.824 1.00 97.27 C +ATOM 8595 C ALA G 64 -11.357 -10.232 -13.580 1.00 97.27 C +ATOM 8596 CB ALA G 64 -11.504 -8.511 -11.767 1.00 97.27 C +ATOM 8597 O ALA G 64 -10.618 -9.807 -14.471 1.00 97.27 O +ATOM 8598 N PHE G 65 -11.405 -11.478 -13.196 1.00 96.11 N +ATOM 8599 CA PHE G 65 -10.451 -12.417 -13.775 1.00 96.11 C +ATOM 8600 C PHE G 65 -11.169 -13.473 -14.608 1.00 96.11 C +ATOM 8601 CB PHE G 65 -9.622 -13.090 -12.676 1.00 96.11 C +ATOM 8602 O PHE G 65 -10.542 -14.410 -15.106 1.00 96.11 O +ATOM 8603 CG PHE G 65 -8.747 -12.137 -11.907 1.00 96.11 C +ATOM 8604 CD1 PHE G 65 -7.525 -11.724 -12.422 1.00 96.11 C +ATOM 8605 CD2 PHE G 65 -9.148 -11.654 -10.669 1.00 96.11 C +ATOM 8606 CE1 PHE G 65 -6.713 -10.843 -11.713 1.00 96.11 C +ATOM 8607 CE2 PHE G 65 -8.342 -10.772 -9.953 1.00 96.11 C +ATOM 8608 CZ PHE G 65 -7.125 -10.369 -10.477 1.00 96.11 C +ATOM 8609 N GLY G 66 -12.422 -13.354 -14.666 1.00 93.62 N +ATOM 8610 CA GLY G 66 -13.209 -14.261 -15.487 1.00 93.62 C +ATOM 8611 C GLY G 66 -13.314 -15.656 -14.902 1.00 93.62 C +ATOM 8612 O GLY G 66 -13.503 -16.630 -15.635 1.00 93.62 O +ATOM 8613 N HIS G 67 -13.089 -15.859 -13.699 1.00 96.35 N +ATOM 8614 CA HIS G 67 -13.269 -17.157 -13.059 1.00 96.35 C +ATOM 8615 C HIS G 67 -14.740 -17.557 -13.027 1.00 96.35 C +ATOM 8616 CB HIS G 67 -12.699 -17.139 -11.640 1.00 96.35 C +ATOM 8617 O HIS G 67 -15.622 -16.696 -13.029 1.00 96.35 O +ATOM 8618 CG HIS G 67 -11.218 -16.934 -11.591 1.00 96.35 C +ATOM 8619 CD2 HIS G 67 -10.459 -16.110 -10.830 1.00 96.35 C +ATOM 8620 ND1 HIS G 67 -10.344 -17.628 -12.399 1.00 96.35 N +ATOM 8621 CE1 HIS G 67 -9.107 -17.238 -12.136 1.00 96.35 C +ATOM 8622 NE2 HIS G 67 -9.150 -16.318 -11.188 1.00 96.35 N +ATOM 8623 N ASP G 68 -14.995 -18.820 -12.928 1.00 96.12 N +ATOM 8624 CA ASP G 68 -16.366 -19.321 -12.889 1.00 96.12 C +ATOM 8625 C ASP G 68 -16.897 -19.356 -11.457 1.00 96.12 C +ATOM 8626 CB ASP G 68 -16.446 -20.715 -13.514 1.00 96.12 C +ATOM 8627 O ASP G 68 -16.447 -20.164 -10.642 1.00 96.12 O +ATOM 8628 CG ASP G 68 -17.869 -21.233 -13.625 1.00 96.12 C +ATOM 8629 OD1 ASP G 68 -18.802 -20.566 -13.129 1.00 96.12 O +ATOM 8630 OD2 ASP G 68 -18.059 -22.321 -14.212 1.00 96.12 O +ATOM 8631 N PRO G 69 -17.857 -18.539 -11.196 1.00 98.06 N +ATOM 8632 CA PRO G 69 -18.391 -18.494 -9.833 1.00 98.06 C +ATOM 8633 C PRO G 69 -19.058 -19.804 -9.417 1.00 98.06 C +ATOM 8634 CB PRO G 69 -19.413 -17.356 -9.893 1.00 98.06 C +ATOM 8635 O PRO G 69 -19.288 -20.033 -8.227 1.00 98.06 O +ATOM 8636 CG PRO G 69 -19.037 -16.568 -11.105 1.00 98.06 C +ATOM 8637 CD PRO G 69 -18.438 -17.503 -12.116 1.00 98.06 C +ATOM 8638 N LYS G 70 -19.375 -20.608 -10.322 1.00 97.01 N +ATOM 8639 CA LYS G 70 -20.034 -21.873 -10.009 1.00 97.01 C +ATOM 8640 C LYS G 70 -19.024 -22.919 -9.546 1.00 97.01 C +ATOM 8641 CB LYS G 70 -20.805 -22.391 -11.224 1.00 97.01 C +ATOM 8642 O LYS G 70 -19.398 -23.926 -8.942 1.00 97.01 O +ATOM 8643 CG LYS G 70 -21.971 -21.507 -11.640 1.00 97.01 C +ATOM 8644 CD LYS G 70 -22.628 -22.012 -12.918 1.00 97.01 C +ATOM 8645 CE LYS G 70 -23.673 -21.033 -13.436 1.00 97.01 C +ATOM 8646 NZ LYS G 70 -24.208 -21.447 -14.767 1.00 97.01 N +ATOM 8647 N THR G 71 -17.762 -22.700 -9.815 1.00 96.23 N +ATOM 8648 CA THR G 71 -16.712 -23.634 -9.425 1.00 96.23 C +ATOM 8649 C THR G 71 -15.885 -23.068 -8.273 1.00 96.23 C +ATOM 8650 CB THR G 71 -15.787 -23.962 -10.611 1.00 96.23 C +ATOM 8651 O THR G 71 -15.505 -23.800 -7.357 1.00 96.23 O +ATOM 8652 CG2 THR G 71 -16.577 -24.536 -11.782 1.00 96.23 C +ATOM 8653 OG1 THR G 71 -15.124 -22.766 -11.038 1.00 96.23 O +ATOM 8654 N MET G 72 -15.667 -21.819 -8.287 1.00 97.90 N +ATOM 8655 CA MET G 72 -14.892 -21.194 -7.218 1.00 97.90 C +ATOM 8656 C MET G 72 -15.697 -21.140 -5.924 1.00 97.90 C +ATOM 8657 CB MET G 72 -14.456 -19.785 -7.623 1.00 97.90 C +ATOM 8658 O MET G 72 -16.913 -20.942 -5.951 1.00 97.90 O +ATOM 8659 CG MET G 72 -13.356 -19.209 -6.746 1.00 97.90 C +ATOM 8660 SD MET G 72 -12.677 -17.639 -7.410 1.00 97.90 S +ATOM 8661 CE MET G 72 -11.683 -18.277 -8.787 1.00 97.90 C +ATOM 8662 N ARG G 73 -15.013 -21.314 -4.833 1.00 98.44 N +ATOM 8663 CA ARG G 73 -15.689 -21.417 -3.543 1.00 98.44 C +ATOM 8664 C ARG G 73 -15.432 -20.179 -2.690 1.00 98.44 C +ATOM 8665 CB ARG G 73 -15.234 -22.672 -2.796 1.00 98.44 C +ATOM 8666 O ARG G 73 -14.443 -19.472 -2.895 1.00 98.44 O +ATOM 8667 CG ARG G 73 -15.396 -23.957 -3.593 1.00 98.44 C +ATOM 8668 CD ARG G 73 -16.862 -24.319 -3.786 1.00 98.44 C +ATOM 8669 NE ARG G 73 -17.014 -25.608 -4.457 1.00 98.44 N +ATOM 8670 NH1 ARG G 73 -18.921 -26.216 -3.303 1.00 98.44 N +ATOM 8671 NH2 ARG G 73 -18.033 -27.622 -4.880 1.00 98.44 N +ATOM 8672 CZ ARG G 73 -17.989 -26.479 -4.212 1.00 98.44 C +ATOM 8673 N VAL G 74 -16.250 -19.943 -1.713 1.00 98.70 N +ATOM 8674 CA VAL G 74 -16.209 -18.776 -0.838 1.00 98.70 C +ATOM 8675 C VAL G 74 -14.909 -18.778 -0.036 1.00 98.70 C +ATOM 8676 CB VAL G 74 -17.424 -18.738 0.116 1.00 98.70 C +ATOM 8677 O VAL G 74 -14.274 -17.734 0.131 1.00 98.70 O +ATOM 8678 CG1 VAL G 74 -17.184 -17.752 1.257 1.00 98.70 C +ATOM 8679 CG2 VAL G 74 -18.693 -18.374 -0.652 1.00 98.70 C +ATOM 8680 N TYR G 75 -14.433 -19.913 0.387 1.00 97.52 N +ATOM 8681 CA TYR G 75 -13.242 -19.967 1.227 1.00 97.52 C +ATOM 8682 C TYR G 75 -12.005 -19.540 0.446 1.00 97.52 C +ATOM 8683 CB TYR G 75 -13.043 -21.379 1.787 1.00 97.52 C +ATOM 8684 O TYR G 75 -10.964 -19.238 1.035 1.00 97.52 O +ATOM 8685 CG TYR G 75 -12.626 -22.391 0.749 1.00 97.52 C +ATOM 8686 CD1 TYR G 75 -13.539 -23.313 0.240 1.00 97.52 C +ATOM 8687 CD2 TYR G 75 -11.319 -22.430 0.275 1.00 97.52 C +ATOM 8688 CE1 TYR G 75 -13.159 -24.249 -0.715 1.00 97.52 C +ATOM 8689 CE2 TYR G 75 -10.928 -23.362 -0.681 1.00 97.52 C +ATOM 8690 OH TYR G 75 -11.472 -25.191 -2.116 1.00 97.52 O +ATOM 8691 CZ TYR G 75 -11.853 -24.266 -1.169 1.00 97.52 C +ATOM 8692 N GLU G 76 -12.077 -19.494 -0.878 1.00 97.88 N +ATOM 8693 CA GLU G 76 -10.944 -19.106 -1.713 1.00 97.88 C +ATOM 8694 C GLU G 76 -10.803 -17.588 -1.781 1.00 97.88 C +ATOM 8695 CB GLU G 76 -11.091 -19.684 -3.123 1.00 97.88 C +ATOM 8696 O GLU G 76 -9.734 -17.072 -2.115 1.00 97.88 O +ATOM 8697 CG GLU G 76 -11.064 -21.205 -3.169 1.00 97.88 C +ATOM 8698 CD GLU G 76 -11.339 -21.768 -4.554 1.00 97.88 C +ATOM 8699 OE1 GLU G 76 -10.424 -21.750 -5.409 1.00 97.88 O +ATOM 8700 OE2 GLU G 76 -12.478 -22.230 -4.787 1.00 97.88 O +ATOM 8701 N ILE G 77 -11.865 -16.820 -1.448 1.00 98.25 N +ATOM 8702 CA ILE G 77 -11.804 -15.381 -1.678 1.00 98.25 C +ATOM 8703 C ILE G 77 -12.191 -14.637 -0.402 1.00 98.25 C +ATOM 8704 CB ILE G 77 -12.721 -14.955 -2.846 1.00 98.25 C +ATOM 8705 O ILE G 77 -12.052 -13.414 -0.323 1.00 98.25 O +ATOM 8706 CG1 ILE G 77 -14.182 -15.299 -2.530 1.00 98.25 C +ATOM 8707 CG2 ILE G 77 -12.273 -15.617 -4.153 1.00 98.25 C +ATOM 8708 CD1 ILE G 77 -15.193 -14.547 -3.384 1.00 98.25 C +ATOM 8709 N MET G 78 -12.639 -15.268 0.618 1.00 98.18 N +ATOM 8710 CA MET G 78 -13.141 -14.660 1.847 1.00 98.18 C +ATOM 8711 C MET G 78 -11.993 -14.145 2.709 1.00 98.18 C +ATOM 8712 CB MET G 78 -13.981 -15.663 2.640 1.00 98.18 C +ATOM 8713 O MET G 78 -10.837 -14.517 2.496 1.00 98.18 O +ATOM 8714 CG MET G 78 -13.174 -16.810 3.227 1.00 98.18 C +ATOM 8715 SD MET G 78 -14.212 -17.984 4.181 1.00 98.18 S +ATOM 8716 CE MET G 78 -12.935 -19.127 4.779 1.00 98.18 C +ATOM 8717 N ALA G 79 -12.328 -13.262 3.670 1.00 97.74 N +ATOM 8718 CA ALA G 79 -11.442 -12.908 4.775 1.00 97.74 C +ATOM 8719 C ALA G 79 -11.803 -13.685 6.038 1.00 97.74 C +ATOM 8720 CB ALA G 79 -11.499 -11.406 5.043 1.00 97.74 C +ATOM 8721 O ALA G 79 -12.891 -13.511 6.592 1.00 97.74 O +ATOM 8722 N LYS G 80 -10.964 -14.524 6.446 1.00 96.57 N +ATOM 8723 CA LYS G 80 -11.146 -15.322 7.654 1.00 96.57 C +ATOM 8724 C LYS G 80 -9.811 -15.583 8.347 1.00 96.57 C +ATOM 8725 CB LYS G 80 -11.832 -16.649 7.324 1.00 96.57 C +ATOM 8726 O LYS G 80 -8.912 -16.192 7.764 1.00 96.57 O +ATOM 8727 CG LYS G 80 -12.212 -17.471 8.546 1.00 96.57 C +ATOM 8728 CD LYS G 80 -13.111 -18.643 8.174 1.00 96.57 C +ATOM 8729 CE LYS G 80 -13.545 -19.429 9.404 1.00 96.57 C +ATOM 8730 NZ LYS G 80 -14.604 -20.430 9.077 1.00 96.57 N +ATOM 8731 N PRO G 81 -9.577 -15.177 9.602 1.00 95.42 N +ATOM 8732 CA PRO G 81 -10.503 -14.385 10.416 1.00 95.42 C +ATOM 8733 C PRO G 81 -10.682 -12.963 9.890 1.00 95.42 C +ATOM 8734 CB PRO G 81 -9.841 -14.378 11.796 1.00 95.42 C +ATOM 8735 O PRO G 81 -9.924 -12.521 9.023 1.00 95.42 O +ATOM 8736 CG PRO G 81 -8.379 -14.519 11.520 1.00 95.42 C +ATOM 8737 CD PRO G 81 -8.206 -15.322 10.263 1.00 95.42 C +ATOM 8738 N CYS G 82 -11.706 -12.322 10.271 1.00 94.89 N +ATOM 8739 CA CYS G 82 -11.941 -10.929 9.909 1.00 94.89 C +ATOM 8740 C CYS G 82 -11.838 -10.024 11.131 1.00 94.89 C +ATOM 8741 CB CYS G 82 -13.315 -10.769 9.259 1.00 94.89 C +ATOM 8742 O CYS G 82 -11.894 -10.498 12.267 1.00 94.89 O +ATOM 8743 SG CYS G 82 -14.682 -11.335 10.295 1.00 94.89 S +ATOM 8744 N VAL G 83 -11.551 -8.759 10.876 1.00 95.85 N +ATOM 8745 CA VAL G 83 -11.593 -7.755 11.934 1.00 95.85 C +ATOM 8746 C VAL G 83 -13.009 -7.656 12.497 1.00 95.85 C +ATOM 8747 CB VAL G 83 -11.125 -6.374 11.425 1.00 95.85 C +ATOM 8748 O VAL G 83 -13.985 -7.666 11.744 1.00 95.85 O +ATOM 8749 CG1 VAL G 83 -11.273 -5.316 12.518 1.00 95.85 C +ATOM 8750 CG2 VAL G 83 -9.678 -6.447 10.940 1.00 95.85 C +ATOM 8751 N VAL G 84 -13.088 -7.604 13.764 1.00 94.99 N +ATOM 8752 CA VAL G 84 -14.398 -7.545 14.403 1.00 94.99 C +ATOM 8753 C VAL G 84 -14.530 -6.244 15.192 1.00 94.99 C +ATOM 8754 CB VAL G 84 -14.631 -8.757 15.333 1.00 94.99 C +ATOM 8755 O VAL G 84 -13.527 -5.630 15.561 1.00 94.99 O +ATOM 8756 CG1 VAL G 84 -14.578 -10.062 14.541 1.00 94.99 C +ATOM 8757 CG2 VAL G 84 -13.601 -8.770 16.460 1.00 94.99 C +ATOM 8758 N VAL G 85 -15.798 -5.817 15.411 1.00 95.43 N +ATOM 8759 CA VAL G 85 -16.079 -4.572 16.119 1.00 95.43 C +ATOM 8760 C VAL G 85 -16.807 -4.875 17.427 1.00 95.43 C +ATOM 8761 CB VAL G 85 -16.917 -3.604 15.254 1.00 95.43 C +ATOM 8762 O VAL G 85 -17.745 -5.675 17.452 1.00 95.43 O +ATOM 8763 CG1 VAL G 85 -17.396 -2.415 16.085 1.00 95.43 C +ATOM 8764 CG2 VAL G 85 -16.106 -3.127 14.050 1.00 95.43 C +ATOM 8765 N ASN G 86 -16.395 -4.238 18.518 1.00 93.33 N +ATOM 8766 CA ASN G 86 -17.118 -4.261 19.786 1.00 93.33 C +ATOM 8767 C ASN G 86 -18.424 -3.476 19.700 1.00 93.33 C +ATOM 8768 CB ASN G 86 -16.242 -3.712 20.913 1.00 93.33 C +ATOM 8769 O ASN G 86 -18.441 -2.341 19.220 1.00 93.33 O +ATOM 8770 CG ASN G 86 -16.903 -3.823 22.273 1.00 93.33 C +ATOM 8771 ND2 ASN G 86 -16.108 -4.107 23.298 1.00 93.33 N +ATOM 8772 OD1 ASN G 86 -18.118 -3.655 22.402 1.00 93.33 O +ATOM 8773 N PRO G 87 -19.509 -4.106 20.192 1.00 94.82 N +ATOM 8774 CA PRO G 87 -20.801 -3.424 20.085 1.00 94.82 C +ATOM 8775 C PRO G 87 -20.833 -2.099 20.843 1.00 94.82 C +ATOM 8776 CB PRO G 87 -21.782 -4.427 20.697 1.00 94.82 C +ATOM 8777 O PRO G 87 -21.592 -1.195 20.483 1.00 94.82 O +ATOM 8778 CG PRO G 87 -20.933 -5.328 21.536 1.00 94.82 C +ATOM 8779 CD PRO G 87 -19.571 -5.418 20.910 1.00 94.82 C +ATOM 8780 N GLU G 88 -19.999 -1.894 21.768 1.00 93.28 N +ATOM 8781 CA GLU G 88 -20.021 -0.695 22.600 1.00 93.28 C +ATOM 8782 C GLU G 88 -19.033 0.350 22.088 1.00 93.28 C +ATOM 8783 CB GLU G 88 -19.708 -1.045 24.057 1.00 93.28 C +ATOM 8784 O GLU G 88 -18.902 1.427 22.673 1.00 93.28 O +ATOM 8785 CG GLU G 88 -20.727 -1.975 24.698 1.00 93.28 C +ATOM 8786 CD GLU G 88 -20.333 -2.425 26.096 1.00 93.28 C +ATOM 8787 OE1 GLU G 88 -21.154 -3.081 26.777 1.00 93.28 O +ATOM 8788 OE2 GLU G 88 -19.195 -2.118 26.514 1.00 93.28 O +ATOM 8789 N LEU G 89 -18.352 0.007 21.040 1.00 93.26 N +ATOM 8790 CA LEU G 89 -17.394 0.950 20.475 1.00 93.26 C +ATOM 8791 C LEU G 89 -18.107 2.162 19.885 1.00 93.26 C +ATOM 8792 CB LEU G 89 -16.543 0.271 19.399 1.00 93.26 C +ATOM 8793 O LEU G 89 -19.121 2.017 19.198 1.00 93.26 O +ATOM 8794 CG LEU G 89 -15.296 1.029 18.941 1.00 93.26 C +ATOM 8795 CD1 LEU G 89 -14.325 1.204 20.104 1.00 93.26 C +ATOM 8796 CD2 LEU G 89 -14.623 0.303 17.781 1.00 93.26 C +ATOM 8797 N GLY G 90 -17.548 3.385 20.119 1.00 92.82 N +ATOM 8798 CA GLY G 90 -18.107 4.592 19.530 1.00 92.82 C +ATOM 8799 C GLY G 90 -17.991 4.627 18.018 1.00 92.82 C +ATOM 8800 O GLY G 90 -17.013 4.132 17.454 1.00 92.82 O +ATOM 8801 N VAL G 91 -18.886 5.265 17.412 1.00 94.80 N +ATOM 8802 CA VAL G 91 -19.014 5.259 15.959 1.00 94.80 C +ATOM 8803 C VAL G 91 -17.788 5.916 15.329 1.00 94.80 C +ATOM 8804 CB VAL G 91 -20.301 5.980 15.499 1.00 94.80 C +ATOM 8805 O VAL G 91 -17.315 5.481 14.276 1.00 94.80 O +ATOM 8806 CG1 VAL G 91 -20.314 6.146 13.981 1.00 94.80 C +ATOM 8807 CG2 VAL G 91 -21.537 5.215 15.967 1.00 94.80 C +ATOM 8808 N GLU G 92 -17.299 6.955 15.915 1.00 94.32 N +ATOM 8809 CA GLU G 92 -16.115 7.610 15.367 1.00 94.32 C +ATOM 8810 C GLU G 92 -14.906 6.680 15.397 1.00 94.32 C +ATOM 8811 CB GLU G 92 -15.808 8.897 16.138 1.00 94.32 C +ATOM 8812 O GLU G 92 -14.086 6.689 14.476 1.00 94.32 O +ATOM 8813 CG GLU G 92 -16.861 9.982 15.968 1.00 94.32 C +ATOM 8814 CD GLU G 92 -18.046 9.820 16.907 1.00 94.32 C +ATOM 8815 OE1 GLU G 92 -18.955 10.680 16.891 1.00 94.32 O +ATOM 8816 OE2 GLU G 92 -18.065 8.824 17.665 1.00 94.32 O +ATOM 8817 N TYR G 93 -14.826 5.930 16.409 1.00 95.18 N +ATOM 8818 CA TYR G 93 -13.730 4.973 16.514 1.00 95.18 C +ATOM 8819 C TYR G 93 -13.901 3.837 15.512 1.00 95.18 C +ATOM 8820 CB TYR G 93 -13.644 4.407 17.935 1.00 95.18 C +ATOM 8821 O TYR G 93 -12.916 3.301 14.998 1.00 95.18 O +ATOM 8822 CG TYR G 93 -13.034 5.361 18.932 1.00 95.18 C +ATOM 8823 CD1 TYR G 93 -11.760 5.888 18.731 1.00 95.18 C +ATOM 8824 CD2 TYR G 93 -13.728 5.736 20.077 1.00 95.18 C +ATOM 8825 CE1 TYR G 93 -11.192 6.766 19.649 1.00 95.18 C +ATOM 8826 CE2 TYR G 93 -13.170 6.614 21.001 1.00 95.18 C +ATOM 8827 OH TYR G 93 -11.346 7.992 21.690 1.00 95.18 O +ATOM 8828 CZ TYR G 93 -11.904 7.123 20.778 1.00 95.18 C +ATOM 8829 N VAL G 94 -15.162 3.433 15.234 1.00 96.79 N +ATOM 8830 CA VAL G 94 -15.396 2.468 14.165 1.00 96.79 C +ATOM 8831 C VAL G 94 -14.889 3.030 12.839 1.00 96.79 C +ATOM 8832 CB VAL G 94 -16.893 2.101 14.051 1.00 96.79 C +ATOM 8833 O VAL G 94 -14.175 2.348 12.101 1.00 96.79 O +ATOM 8834 CG1 VAL G 94 -17.114 1.073 12.942 1.00 96.79 C +ATOM 8835 CG2 VAL G 94 -17.416 1.572 15.385 1.00 96.79 C +ATOM 8836 N ALA G 95 -15.257 4.287 12.617 1.00 98.01 N +ATOM 8837 CA ALA G 95 -14.782 4.950 11.405 1.00 98.01 C +ATOM 8838 C ALA G 95 -13.257 4.939 11.336 1.00 98.01 C +ATOM 8839 CB ALA G 95 -15.304 6.384 11.344 1.00 98.01 C +ATOM 8840 O ALA G 95 -12.680 4.641 10.288 1.00 98.01 O +ATOM 8841 N ARG G 96 -12.610 5.253 12.402 1.00 97.79 N +ATOM 8842 CA ARG G 96 -11.152 5.296 12.453 1.00 97.79 C +ATOM 8843 C ARG G 96 -10.556 3.909 12.243 1.00 97.79 C +ATOM 8844 CB ARG G 96 -10.678 5.874 13.788 1.00 97.79 C +ATOM 8845 O ARG G 96 -9.543 3.761 11.555 1.00 97.79 O +ATOM 8846 CG ARG G 96 -9.185 6.156 13.841 1.00 97.79 C +ATOM 8847 CD ARG G 96 -8.801 6.926 15.097 1.00 97.79 C +ATOM 8848 NE ARG G 96 -7.353 6.968 15.282 1.00 97.79 N +ATOM 8849 NH1 ARG G 96 -7.060 8.968 14.165 1.00 97.79 N +ATOM 8850 NH2 ARG G 96 -5.255 7.875 15.060 1.00 97.79 N +ATOM 8851 CZ ARG G 96 -6.559 7.937 14.835 1.00 97.79 C +ATOM 8852 N LEU G 97 -11.188 2.888 12.810 1.00 97.60 N +ATOM 8853 CA LEU G 97 -10.746 1.513 12.606 1.00 97.60 C +ATOM 8854 C LEU G 97 -10.813 1.134 11.131 1.00 97.60 C +ATOM 8855 CB LEU G 97 -11.598 0.547 13.433 1.00 97.60 C +ATOM 8856 O LEU G 97 -9.869 0.554 10.591 1.00 97.60 O +ATOM 8857 CG LEU G 97 -11.203 -0.929 13.371 1.00 97.60 C +ATOM 8858 CD1 LEU G 97 -9.802 -1.127 13.940 1.00 97.60 C +ATOM 8859 CD2 LEU G 97 -12.216 -1.786 14.122 1.00 97.60 C +ATOM 8860 N PHE G 98 -11.898 1.481 10.477 1.00 98.05 N +ATOM 8861 CA PHE G 98 -12.050 1.219 9.051 1.00 98.05 C +ATOM 8862 C PHE G 98 -10.974 1.942 8.250 1.00 98.05 C +ATOM 8863 CB PHE G 98 -13.440 1.648 8.570 1.00 98.05 C +ATOM 8864 O PHE G 98 -10.357 1.356 7.359 1.00 98.05 O +ATOM 8865 CG PHE G 98 -14.541 0.707 8.978 1.00 98.05 C +ATOM 8866 CD1 PHE G 98 -14.249 -0.490 9.620 1.00 98.05 C +ATOM 8867 CD2 PHE G 98 -15.869 1.021 8.720 1.00 98.05 C +ATOM 8868 CE1 PHE G 98 -15.266 -1.363 9.999 1.00 98.05 C +ATOM 8869 CE2 PHE G 98 -16.891 0.153 9.096 1.00 98.05 C +ATOM 8870 CZ PHE G 98 -16.587 -1.038 9.734 1.00 98.05 C +ATOM 8871 N ALA G 99 -10.750 3.180 8.631 1.00 97.78 N +ATOM 8872 CA ALA G 99 -9.739 3.965 7.927 1.00 97.78 C +ATOM 8873 C ALA G 99 -8.353 3.350 8.093 1.00 97.78 C +ATOM 8874 CB ALA G 99 -9.741 5.407 8.428 1.00 97.78 C +ATOM 8875 O ALA G 99 -7.598 3.235 7.125 1.00 97.78 O +ATOM 8876 N GLN G 100 -7.999 2.892 9.229 1.00 96.12 N +ATOM 8877 CA GLN G 100 -6.678 2.352 9.533 1.00 96.12 C +ATOM 8878 C GLN G 100 -6.476 0.990 8.874 1.00 96.12 C +ATOM 8879 CB GLN G 100 -6.480 2.238 11.045 1.00 96.12 C +ATOM 8880 O GLN G 100 -5.379 0.679 8.405 1.00 96.12 O +ATOM 8881 CG GLN G 100 -6.279 3.577 11.742 1.00 96.12 C +ATOM 8882 CD GLN G 100 -6.256 3.454 13.254 1.00 96.12 C +ATOM 8883 NE2 GLN G 100 -5.831 4.517 13.928 1.00 96.12 N +ATOM 8884 OE1 GLN G 100 -6.617 2.413 13.811 1.00 96.12 O +ATOM 8885 N THR G 101 -7.523 0.191 8.825 1.00 96.61 N +ATOM 8886 CA THR G 101 -7.407 -1.173 8.322 1.00 96.61 C +ATOM 8887 C THR G 101 -7.829 -1.248 6.858 1.00 96.61 C +ATOM 8888 CB THR G 101 -8.258 -2.150 9.155 1.00 96.61 C +ATOM 8889 O THR G 101 -7.681 -2.290 6.216 1.00 96.61 O +ATOM 8890 CG2 THR G 101 -7.793 -2.184 10.607 1.00 96.61 C +ATOM 8891 OG1 THR G 101 -9.629 -1.735 9.114 1.00 96.61 O +ATOM 8892 N ARG G 102 -8.483 -0.224 6.335 1.00 95.75 N +ATOM 8893 CA ARG G 102 -8.926 -0.101 4.949 1.00 95.75 C +ATOM 8894 C ARG G 102 -10.019 -1.116 4.632 1.00 95.75 C +ATOM 8895 CB ARG G 102 -7.748 -0.282 3.990 1.00 95.75 C +ATOM 8896 O ARG G 102 -10.020 -1.718 3.556 1.00 95.75 O +ATOM 8897 CG ARG G 102 -6.679 0.792 4.117 1.00 95.75 C +ATOM 8898 CD ARG G 102 -7.157 2.130 3.571 1.00 95.75 C +ATOM 8899 NE ARG G 102 -6.077 3.111 3.526 1.00 95.75 N +ATOM 8900 NH1 ARG G 102 -7.199 4.591 2.152 1.00 95.75 N +ATOM 8901 NH2 ARG G 102 -5.081 5.077 2.880 1.00 95.75 N +ATOM 8902 CZ ARG G 102 -6.121 4.258 2.853 1.00 95.75 C +ATOM 8903 N ILE G 103 -10.827 -1.353 5.641 1.00 96.44 N +ATOM 8904 CA ILE G 103 -12.028 -2.149 5.411 1.00 96.44 C +ATOM 8905 C ILE G 103 -13.261 -1.249 5.460 1.00 96.44 C +ATOM 8906 CB ILE G 103 -12.156 -3.290 6.445 1.00 96.44 C +ATOM 8907 O ILE G 103 -13.175 -0.090 5.874 1.00 96.44 O +ATOM 8908 CG1 ILE G 103 -12.327 -2.716 7.856 1.00 96.44 C +ATOM 8909 CG2 ILE G 103 -10.941 -4.220 6.376 1.00 96.44 C +ATOM 8910 CD1 ILE G 103 -12.617 -3.766 8.920 1.00 96.44 C +ATOM 8911 N ARG G 104 -14.395 -1.769 5.009 1.00 96.47 N +ATOM 8912 CA ARG G 104 -15.582 -0.928 4.896 1.00 96.47 C +ATOM 8913 C ARG G 104 -16.752 -1.523 5.671 1.00 96.47 C +ATOM 8914 CB ARG G 104 -15.969 -0.738 3.427 1.00 96.47 C +ATOM 8915 O ARG G 104 -17.805 -0.895 5.795 1.00 96.47 O +ATOM 8916 CG ARG G 104 -14.930 0.012 2.608 1.00 96.47 C +ATOM 8917 CD ARG G 104 -15.208 -0.092 1.115 1.00 96.47 C +ATOM 8918 NE ARG G 104 -14.127 0.491 0.324 1.00 96.47 N +ATOM 8919 NH1 ARG G 104 -15.096 0.028 -1.721 1.00 96.47 N +ATOM 8920 NH2 ARG G 104 -13.066 1.089 -1.623 1.00 96.47 N +ATOM 8921 CZ ARG G 104 -14.099 0.535 -1.005 1.00 96.47 C +ATOM 8922 N ARG G 105 -16.548 -2.733 6.073 1.00 97.22 N +ATOM 8923 CA ARG G 105 -17.569 -3.412 6.864 1.00 97.22 C +ATOM 8924 C ARG G 105 -16.948 -4.480 7.758 1.00 97.22 C +ATOM 8925 CB ARG G 105 -18.625 -4.040 5.953 1.00 97.22 C +ATOM 8926 O ARG G 105 -15.886 -5.021 7.442 1.00 97.22 O +ATOM 8927 CG ARG G 105 -18.095 -5.168 5.082 1.00 97.22 C +ATOM 8928 CD ARG G 105 -19.115 -5.600 4.037 1.00 97.22 C +ATOM 8929 NE ARG G 105 -19.562 -4.475 3.222 1.00 97.22 N +ATOM 8930 NH1 ARG G 105 -21.724 -5.248 2.970 1.00 97.22 N +ATOM 8931 NH2 ARG G 105 -21.090 -3.269 2.003 1.00 97.22 N +ATOM 8932 CZ ARG G 105 -20.791 -4.333 2.733 1.00 97.22 C +ATOM 8933 N ALA G 106 -17.620 -4.742 8.832 1.00 97.53 N +ATOM 8934 CA ALA G 106 -17.145 -5.732 9.796 1.00 97.53 C +ATOM 8935 C ALA G 106 -18.296 -6.271 10.641 1.00 97.53 C +ATOM 8936 CB ALA G 106 -16.068 -5.127 10.693 1.00 97.53 C +ATOM 8937 O ALA G 106 -19.278 -5.567 10.885 1.00 97.53 O +ATOM 8938 N PRO G 107 -18.160 -7.529 11.055 1.00 97.18 N +ATOM 8939 CA PRO G 107 -19.159 -8.040 11.997 1.00 97.18 C +ATOM 8940 C PRO G 107 -19.028 -7.423 13.388 1.00 97.18 C +ATOM 8941 CB PRO G 107 -18.870 -9.543 12.037 1.00 97.18 C +ATOM 8942 O PRO G 107 -17.920 -7.095 13.820 1.00 97.18 O +ATOM 8943 CG PRO G 107 -17.434 -9.666 11.641 1.00 97.18 C +ATOM 8944 CD PRO G 107 -17.082 -8.506 10.754 1.00 97.18 C +ATOM 8945 N VAL G 108 -20.149 -7.198 14.010 1.00 96.88 N +ATOM 8946 CA VAL G 108 -20.219 -6.778 15.406 1.00 96.88 C +ATOM 8947 C VAL G 108 -20.453 -7.994 16.300 1.00 96.88 C +ATOM 8948 CB VAL G 108 -21.332 -5.730 15.628 1.00 96.88 C +ATOM 8949 O VAL G 108 -21.502 -8.637 16.221 1.00 96.88 O +ATOM 8950 CG1 VAL G 108 -21.331 -5.241 17.075 1.00 96.88 C +ATOM 8951 CG2 VAL G 108 -21.160 -4.557 14.664 1.00 96.88 C +ATOM 8952 N ILE G 109 -19.501 -8.282 17.119 1.00 92.73 N +ATOM 8953 CA ILE G 109 -19.545 -9.510 17.906 1.00 92.73 C +ATOM 8954 C ILE G 109 -19.402 -9.178 19.389 1.00 92.73 C +ATOM 8955 CB ILE G 109 -18.443 -10.501 17.469 1.00 92.73 C +ATOM 8956 O ILE G 109 -18.556 -8.365 19.771 1.00 92.73 O +ATOM 8957 CG1 ILE G 109 -18.635 -10.902 16.002 1.00 92.73 C +ATOM 8958 CG2 ILE G 109 -18.434 -11.734 18.377 1.00 92.73 C +ATOM 8959 CD1 ILE G 109 -17.543 -11.815 15.462 1.00 92.73 C +ATOM 8960 N GLN G 110 -20.223 -9.750 20.273 1.00 90.04 N +ATOM 8961 CA GLN G 110 -20.126 -9.716 21.729 1.00 90.04 C +ATOM 8962 C GLN G 110 -19.809 -11.099 22.291 1.00 90.04 C +ATOM 8963 CB GLN G 110 -21.423 -9.185 22.341 1.00 90.04 C +ATOM 8964 O GLN G 110 -20.660 -11.992 22.273 1.00 90.04 O +ATOM 8965 CG GLN G 110 -21.345 -8.958 23.845 1.00 90.04 C +ATOM 8966 CD GLN G 110 -22.529 -8.177 24.383 1.00 90.04 C +ATOM 8967 NE2 GLN G 110 -22.266 -7.267 25.315 1.00 90.04 N +ATOM 8968 OE1 GLN G 110 -23.672 -8.390 23.964 1.00 90.04 O +ATOM 8969 N GLY G 111 -18.568 -11.247 22.762 1.00 83.15 N +ATOM 8970 CA GLY G 111 -18.156 -12.595 23.124 1.00 83.15 C +ATOM 8971 C GLY G 111 -18.068 -13.531 21.934 1.00 83.15 C +ATOM 8972 O GLY G 111 -17.249 -13.326 21.035 1.00 83.15 O +ATOM 8973 N LYS G 112 -19.033 -14.504 21.979 1.00 83.10 N +ATOM 8974 CA LYS G 112 -19.068 -15.457 20.873 1.00 83.10 C +ATOM 8975 C LYS G 112 -20.324 -15.270 20.027 1.00 83.10 C +ATOM 8976 CB LYS G 112 -18.998 -16.892 21.398 1.00 83.10 C +ATOM 8977 O LYS G 112 -20.555 -16.020 19.075 1.00 83.10 O +ATOM 8978 CG LYS G 112 -17.662 -17.256 22.029 1.00 83.10 C +ATOM 8979 CD LYS G 112 -17.579 -18.744 22.342 1.00 83.10 C +ATOM 8980 CE LYS G 112 -16.217 -19.122 22.907 1.00 83.10 C +ATOM 8981 NZ LYS G 112 -16.116 -20.588 23.176 1.00 83.10 N +ATOM 8982 N THR G 113 -20.979 -14.219 20.318 1.00 89.64 N +ATOM 8983 CA THR G 113 -22.274 -14.051 19.667 1.00 89.64 C +ATOM 8984 C THR G 113 -22.199 -12.977 18.585 1.00 89.64 C +ATOM 8985 CB THR G 113 -23.368 -13.680 20.686 1.00 89.64 C +ATOM 8986 O THR G 113 -21.723 -11.868 18.835 1.00 89.64 O +ATOM 8987 CG2 THR G 113 -24.744 -13.655 20.030 1.00 89.64 C +ATOM 8988 OG1 THR G 113 -23.373 -14.646 21.744 1.00 89.64 O +ATOM 8989 N LEU G 114 -22.624 -13.343 17.462 1.00 93.99 N +ATOM 8990 CA LEU G 114 -22.733 -12.400 16.355 1.00 93.99 C +ATOM 8991 C LEU G 114 -23.982 -11.535 16.499 1.00 93.99 C +ATOM 8992 CB LEU G 114 -22.765 -13.143 15.018 1.00 93.99 C +ATOM 8993 O LEU G 114 -25.102 -12.051 16.499 1.00 93.99 O +ATOM 8994 CG LEU G 114 -22.937 -12.281 13.766 1.00 93.99 C +ATOM 8995 CD1 LEU G 114 -21.718 -11.386 13.567 1.00 93.99 C +ATOM 8996 CD2 LEU G 114 -23.168 -13.158 12.540 1.00 93.99 C +ATOM 8997 N LEU G 115 -23.880 -10.194 16.574 1.00 95.77 N +ATOM 8998 CA LEU G 115 -25.007 -9.292 16.785 1.00 95.77 C +ATOM 8999 C LEU G 115 -25.457 -8.667 15.468 1.00 95.77 C +ATOM 9000 CB LEU G 115 -24.633 -8.193 17.783 1.00 95.77 C +ATOM 9001 O LEU G 115 -26.643 -8.381 15.286 1.00 95.77 O +ATOM 9002 CG LEU G 115 -24.298 -8.652 19.203 1.00 95.77 C +ATOM 9003 CD1 LEU G 115 -24.049 -7.447 20.104 1.00 95.77 C +ATOM 9004 CD2 LEU G 115 -25.418 -9.522 19.762 1.00 95.77 C +ATOM 9005 N GLY G 116 -24.491 -8.397 14.572 1.00 96.39 N +ATOM 9006 CA GLY G 116 -24.794 -7.736 13.313 1.00 96.39 C +ATOM 9007 C GLY G 116 -23.558 -7.418 12.494 1.00 96.39 C +ATOM 9008 O GLY G 116 -22.514 -8.050 12.664 1.00 96.39 O +ATOM 9009 N ILE G 117 -23.740 -6.540 11.453 1.00 97.19 N +ATOM 9010 CA ILE G 117 -22.676 -6.023 10.598 1.00 97.19 C +ATOM 9011 C ILE G 117 -22.730 -4.497 10.573 1.00 97.19 C +ATOM 9012 CB ILE G 117 -22.780 -6.587 9.163 1.00 97.19 C +ATOM 9013 O ILE G 117 -23.812 -3.909 10.514 1.00 97.19 O +ATOM 9014 CG1 ILE G 117 -22.519 -8.097 9.163 1.00 97.19 C +ATOM 9015 CG2 ILE G 117 -21.808 -5.863 8.227 1.00 97.19 C +ATOM 9016 CD1 ILE G 117 -22.704 -8.757 7.804 1.00 97.19 C +ATOM 9017 N ILE G 118 -21.670 -3.865 10.703 1.00 97.84 N +ATOM 9018 CA ILE G 118 -21.598 -2.412 10.592 1.00 97.84 C +ATOM 9019 C ILE G 118 -20.742 -2.028 9.388 1.00 97.84 C +ATOM 9020 CB ILE G 118 -21.029 -1.775 11.879 1.00 97.84 C +ATOM 9021 O ILE G 118 -19.712 -2.652 9.126 1.00 97.84 O +ATOM 9022 CG1 ILE G 118 -21.088 -0.245 11.789 1.00 97.84 C +ATOM 9023 CG2 ILE G 118 -19.597 -2.254 12.132 1.00 97.84 C +ATOM 9024 CD1 ILE G 118 -20.912 0.461 13.126 1.00 97.84 C +ATOM 9025 N SER G 119 -21.150 -1.043 8.637 1.00 97.64 N +ATOM 9026 CA SER G 119 -20.449 -0.625 7.428 1.00 97.64 C +ATOM 9027 C SER G 119 -20.276 0.890 7.385 1.00 97.64 C +ATOM 9028 CB SER G 119 -21.200 -1.095 6.181 1.00 97.64 C +ATOM 9029 O SER G 119 -20.843 1.608 8.211 1.00 97.64 O +ATOM 9030 OG SER G 119 -22.407 -0.371 6.018 1.00 97.64 O +ATOM 9031 N VAL G 120 -19.491 1.371 6.447 1.00 97.79 N +ATOM 9032 CA VAL G 120 -19.333 2.802 6.206 1.00 97.79 C +ATOM 9033 C VAL G 120 -20.690 3.424 5.884 1.00 97.79 C +ATOM 9034 CB VAL G 120 -18.335 3.077 5.060 1.00 97.79 C +ATOM 9035 O VAL G 120 -20.949 4.579 6.232 1.00 97.79 O +ATOM 9036 CG1 VAL G 120 -16.918 2.679 5.470 1.00 97.79 C +ATOM 9037 CG2 VAL G 120 -18.757 2.333 3.794 1.00 97.79 C +ATOM 9038 N SER G 121 -21.600 2.679 5.274 1.00 97.03 N +ATOM 9039 CA SER G 121 -22.939 3.166 4.962 1.00 97.03 C +ATOM 9040 C SER G 121 -23.748 3.408 6.232 1.00 97.03 C +ATOM 9041 CB SER G 121 -23.675 2.173 4.061 1.00 97.03 C +ATOM 9042 O SER G 121 -24.456 4.411 6.342 1.00 97.03 O +ATOM 9043 OG SER G 121 -23.017 2.045 2.812 1.00 97.03 O +ATOM 9044 N ASP G 122 -23.578 2.491 7.115 1.00 97.39 N +ATOM 9045 CA ASP G 122 -24.268 2.673 8.388 1.00 97.39 C +ATOM 9046 C ASP G 122 -23.799 3.945 9.090 1.00 97.39 C +ATOM 9047 CB ASP G 122 -24.050 1.461 9.295 1.00 97.39 C +ATOM 9048 O ASP G 122 -24.613 4.704 9.621 1.00 97.39 O +ATOM 9049 CG ASP G 122 -24.748 0.210 8.792 1.00 97.39 C +ATOM 9050 OD1 ASP G 122 -25.901 0.304 8.317 1.00 97.39 O +ATOM 9051 OD2 ASP G 122 -24.141 -0.880 8.873 1.00 97.39 O +ATOM 9052 N ILE G 123 -22.511 4.163 9.072 1.00 98.04 N +ATOM 9053 CA ILE G 123 -21.955 5.349 9.714 1.00 98.04 C +ATOM 9054 C ILE G 123 -22.483 6.605 9.023 1.00 98.04 C +ATOM 9055 CB ILE G 123 -20.410 5.334 9.689 1.00 98.04 C +ATOM 9056 O ILE G 123 -22.925 7.546 9.686 1.00 98.04 O +ATOM 9057 CG1 ILE G 123 -19.874 4.171 10.533 1.00 98.04 C +ATOM 9058 CG2 ILE G 123 -19.849 6.671 10.181 1.00 98.04 C +ATOM 9059 CD1 ILE G 123 -18.371 3.961 10.413 1.00 98.04 C +ATOM 9060 N LEU G 124 -22.524 6.593 7.753 1.00 98.19 N +ATOM 9061 CA LEU G 124 -22.944 7.766 6.994 1.00 98.19 C +ATOM 9062 C LEU G 124 -24.431 8.039 7.194 1.00 98.19 C +ATOM 9063 CB LEU G 124 -22.644 7.576 5.505 1.00 98.19 C +ATOM 9064 O LEU G 124 -24.827 9.174 7.467 1.00 98.19 O +ATOM 9065 CG LEU G 124 -22.867 8.795 4.608 1.00 98.19 C +ATOM 9066 CD1 LEU G 124 -21.659 9.723 4.664 1.00 98.19 C +ATOM 9067 CD2 LEU G 124 -23.147 8.359 3.173 1.00 98.19 C +ATOM 9068 N PHE G 125 -25.256 7.060 7.129 1.00 97.57 N +ATOM 9069 CA PHE G 125 -26.700 7.243 7.039 1.00 97.57 C +ATOM 9070 C PHE G 125 -27.328 7.278 8.427 1.00 97.57 C +ATOM 9071 CB PHE G 125 -27.334 6.126 6.204 1.00 97.57 C +ATOM 9072 O PHE G 125 -28.383 7.886 8.622 1.00 97.57 O +ATOM 9073 CG PHE G 125 -27.116 6.277 4.723 1.00 97.57 C +ATOM 9074 CD1 PHE G 125 -27.829 7.221 3.994 1.00 97.57 C +ATOM 9075 CD2 PHE G 125 -26.197 5.475 4.059 1.00 97.57 C +ATOM 9076 CE1 PHE G 125 -27.630 7.363 2.623 1.00 97.57 C +ATOM 9077 CE2 PHE G 125 -25.992 5.612 2.689 1.00 97.57 C +ATOM 9078 CZ PHE G 125 -26.710 6.556 1.973 1.00 97.57 C +ATOM 9079 N LYS G 126 -26.689 6.638 9.395 1.00 97.37 N +ATOM 9080 CA LYS G 126 -27.415 6.418 10.642 1.00 97.37 C +ATOM 9081 C LYS G 126 -26.720 7.109 11.812 1.00 97.37 C +ATOM 9082 CB LYS G 126 -27.554 4.921 10.925 1.00 97.37 C +ATOM 9083 O LYS G 126 -27.316 7.290 12.876 1.00 97.37 O +ATOM 9084 CG LYS G 126 -28.274 4.149 9.830 1.00 97.37 C +ATOM 9085 CD LYS G 126 -28.344 2.661 10.149 1.00 97.37 C +ATOM 9086 CE LYS G 126 -28.887 1.861 8.972 1.00 97.37 C +ATOM 9087 NZ LYS G 126 -28.787 0.390 9.210 1.00 97.37 N +ATOM 9088 N SER G 127 -25.509 7.536 11.664 1.00 96.39 N +ATOM 9089 CA SER G 127 -24.785 8.093 12.803 1.00 96.39 C +ATOM 9090 C SER G 127 -25.015 9.596 12.923 1.00 96.39 C +ATOM 9091 CB SER G 127 -23.288 7.806 12.679 1.00 96.39 C +ATOM 9092 O SER G 127 -25.763 10.180 12.135 1.00 96.39 O +ATOM 9093 OG SER G 127 -22.664 8.753 11.829 1.00 96.39 O +ATOM 9094 N ASP G 128 -24.405 10.160 13.970 1.00 95.84 N +ATOM 9095 CA ASP G 128 -24.610 11.578 14.249 1.00 95.84 C +ATOM 9096 C ASP G 128 -23.301 12.356 14.133 1.00 95.84 C +ATOM 9097 CB ASP G 128 -25.213 11.769 15.642 1.00 95.84 C +ATOM 9098 O ASP G 128 -23.115 13.372 14.805 1.00 95.84 O +ATOM 9099 CG ASP G 128 -24.341 11.202 16.749 1.00 95.84 C +ATOM 9100 OD1 ASP G 128 -23.283 10.609 16.448 1.00 95.84 O +ATOM 9101 OD2 ASP G 128 -24.717 11.348 17.932 1.00 95.84 O +ATOM 9102 N PHE G 129 -22.418 11.910 13.307 1.00 95.33 N +ATOM 9103 CA PHE G 129 -21.104 12.537 13.233 1.00 95.33 C +ATOM 9104 C PHE G 129 -21.199 13.920 12.601 1.00 95.33 C +ATOM 9105 CB PHE G 129 -20.132 11.661 12.437 1.00 95.33 C +ATOM 9106 O PHE G 129 -20.316 14.759 12.793 1.00 95.33 O +ATOM 9107 CG PHE G 129 -20.386 11.666 10.954 1.00 95.33 C +ATOM 9108 CD1 PHE G 129 -21.295 10.782 10.387 1.00 95.33 C +ATOM 9109 CD2 PHE G 129 -19.715 12.557 10.126 1.00 95.33 C +ATOM 9110 CE1 PHE G 129 -21.532 10.785 9.014 1.00 95.33 C +ATOM 9111 CE2 PHE G 129 -19.946 12.566 8.753 1.00 95.33 C +ATOM 9112 CZ PHE G 129 -20.855 11.678 8.199 1.00 95.33 C +ATOM 9113 N VAL G 130 -22.247 14.158 11.800 1.00 96.75 N +ATOM 9114 CA VAL G 130 -22.438 15.481 11.214 1.00 96.75 C +ATOM 9115 C VAL G 130 -22.930 16.454 12.283 1.00 96.75 C +ATOM 9116 CB VAL G 130 -23.433 15.439 10.033 1.00 96.75 C +ATOM 9117 O VAL G 130 -22.413 17.567 12.402 1.00 96.75 O +ATOM 9118 CG1 VAL G 130 -23.751 16.851 9.544 1.00 96.75 C +ATOM 9119 CG2 VAL G 130 -22.873 14.590 8.893 1.00 96.75 C +ATOM 9120 N GLU G 131 -23.870 16.010 13.103 1.00 94.49 N +ATOM 9121 CA GLU G 131 -24.488 16.852 14.124 1.00 94.49 C +ATOM 9122 C GLU G 131 -23.556 17.045 15.317 1.00 94.49 C +ATOM 9123 CB GLU G 131 -25.817 16.248 14.587 1.00 94.49 C +ATOM 9124 O GLU G 131 -23.508 18.129 15.904 1.00 94.49 O +ATOM 9125 CG GLU G 131 -26.880 16.197 13.500 1.00 94.49 C +ATOM 9126 CD GLU G 131 -26.692 15.041 12.530 1.00 94.49 C +ATOM 9127 OE1 GLU G 131 -27.307 15.057 11.440 1.00 94.49 O +ATOM 9128 OE2 GLU G 131 -25.925 14.111 12.865 1.00 94.49 O +ATOM 9129 N LYS G 132 -22.851 15.991 15.632 1.00 92.46 N +ATOM 9130 CA LYS G 132 -21.983 16.028 16.806 1.00 92.46 C +ATOM 9131 C LYS G 132 -20.569 15.570 16.460 1.00 92.46 C +ATOM 9132 CB LYS G 132 -22.556 15.158 17.926 1.00 92.46 C +ATOM 9133 O LYS G 132 -20.097 14.555 16.974 1.00 92.46 O +ATOM 9134 CG LYS G 132 -23.945 15.576 18.385 1.00 92.46 C +ATOM 9135 CD LYS G 132 -24.467 14.665 19.489 1.00 92.46 C +ATOM 9136 CE LYS G 132 -25.891 15.027 19.888 1.00 92.46 C +ATOM 9137 NZ LYS G 132 -26.442 14.076 20.899 1.00 92.46 N +ATOM 9138 N PRO G 133 -19.944 16.468 15.763 1.00 90.99 N +ATOM 9139 CA PRO G 133 -18.551 16.096 15.505 1.00 90.99 C +ATOM 9140 C PRO G 133 -17.709 16.044 16.778 1.00 90.99 C +ATOM 9141 CB PRO G 133 -18.058 17.202 14.569 1.00 90.99 C +ATOM 9142 O PRO G 133 -17.898 16.862 17.682 1.00 90.99 O +ATOM 9143 CG PRO G 133 -18.961 18.363 14.841 1.00 90.99 C +ATOM 9144 CD PRO G 133 -20.270 17.838 15.355 1.00 90.99 C +ATOM 9145 N LYS G 134 -16.785 15.009 16.858 1.00 86.46 N +ATOM 9146 CA LYS G 134 -16.031 14.812 18.092 1.00 86.46 C +ATOM 9147 C LYS G 134 -14.528 14.828 17.827 1.00 86.46 C +ATOM 9148 CB LYS G 134 -16.432 13.497 18.762 1.00 86.46 C +ATOM 9149 O LYS G 134 -14.042 14.122 16.941 1.00 86.46 O +ATOM 9150 CG LYS G 134 -17.872 13.466 19.253 1.00 86.46 C +ATOM 9151 CD LYS G 134 -18.212 12.130 19.902 1.00 86.46 C +ATOM 9152 CE LYS G 134 -19.677 12.064 20.312 1.00 86.46 C +ATOM 9153 NZ LYS G 134 -20.026 10.741 20.911 1.00 86.46 N +ATOM 9154 N ARG G 135 -13.817 15.657 18.599 1.00 88.61 N +ATOM 9155 CA ARG G 135 -12.360 15.580 18.643 1.00 88.61 C +ATOM 9156 C ARG G 135 -11.900 14.381 19.465 1.00 88.61 C +ATOM 9157 CB ARG G 135 -11.770 16.869 19.220 1.00 88.61 C +ATOM 9158 O ARG G 135 -11.978 14.398 20.695 1.00 88.61 O +ATOM 9159 CG ARG G 135 -10.280 17.032 18.965 1.00 88.61 C +ATOM 9160 CD ARG G 135 -9.811 18.452 19.251 1.00 88.61 C +ATOM 9161 NE ARG G 135 -8.401 18.631 18.916 1.00 88.61 N +ATOM 9162 NH1 ARG G 135 -8.434 20.933 19.118 1.00 88.61 N +ATOM 9163 NH2 ARG G 135 -6.493 19.855 18.545 1.00 88.61 N +ATOM 9164 CZ ARG G 135 -7.779 19.806 18.861 1.00 88.61 C +ATOM 9165 N LEU G 136 -11.390 13.439 18.944 1.00 87.39 N +ATOM 9166 CA LEU G 136 -11.219 12.106 19.512 1.00 87.39 C +ATOM 9167 C LEU G 136 -10.243 12.134 20.683 1.00 87.39 C +ATOM 9168 CB LEU G 136 -10.724 11.127 18.443 1.00 87.39 C +ATOM 9169 O LEU G 136 -10.487 11.504 21.715 1.00 87.39 O +ATOM 9170 CG LEU G 136 -11.705 10.803 17.314 1.00 87.39 C +ATOM 9171 CD1 LEU G 136 -11.026 9.941 16.255 1.00 87.39 C +ATOM 9172 CD2 LEU G 136 -12.944 10.106 17.866 1.00 87.39 C +ATOM 9173 N PHE G 137 -9.209 12.938 20.677 1.00 92.85 N +ATOM 9174 CA PHE G 137 -8.176 12.866 21.703 1.00 92.85 C +ATOM 9175 C PHE G 137 -8.094 14.172 22.483 1.00 92.85 C +ATOM 9176 CB PHE G 137 -6.816 12.542 21.076 1.00 92.85 C +ATOM 9177 O PHE G 137 -7.009 14.587 22.899 1.00 92.85 O +ATOM 9178 CG PHE G 137 -6.816 11.293 20.237 1.00 92.85 C +ATOM 9179 CD1 PHE G 137 -7.276 10.090 20.757 1.00 92.85 C +ATOM 9180 CD2 PHE G 137 -6.355 11.323 18.927 1.00 92.85 C +ATOM 9181 CE1 PHE G 137 -7.278 8.932 19.982 1.00 92.85 C +ATOM 9182 CE2 PHE G 137 -6.354 10.170 18.147 1.00 92.85 C +ATOM 9183 CZ PHE G 137 -6.814 8.975 18.677 1.00 92.85 C +ATOM 9184 N ILE G 138 -9.213 14.815 22.633 1.00 92.78 N +ATOM 9185 CA ILE G 138 -9.254 16.135 23.254 1.00 92.78 C +ATOM 9186 C ILE G 138 -8.804 16.035 24.709 1.00 92.78 C +ATOM 9187 CB ILE G 138 -10.668 16.754 23.171 1.00 92.78 C +ATOM 9188 O ILE G 138 -8.131 16.933 25.221 1.00 92.78 O +ATOM 9189 CG1 ILE G 138 -10.641 18.210 23.651 1.00 92.78 C +ATOM 9190 CG2 ILE G 138 -11.668 15.927 23.983 1.00 92.78 C +ATOM 9191 CD1 ILE G 138 -9.936 19.164 22.697 1.00 92.78 C +ATOM 9192 N GLU G 139 -9.144 14.912 25.364 1.00 93.05 N +ATOM 9193 CA GLU G 139 -8.737 14.755 26.757 1.00 93.05 C +ATOM 9194 C GLU G 139 -7.222 14.619 26.877 1.00 93.05 C +ATOM 9195 CB GLU G 139 -9.425 13.540 27.385 1.00 93.05 C +ATOM 9196 O GLU G 139 -6.609 15.212 27.767 1.00 93.05 O +ATOM 9197 CG GLU G 139 -10.936 13.680 27.499 1.00 93.05 C +ATOM 9198 CD GLU G 139 -11.367 14.841 28.381 1.00 93.05 C +ATOM 9199 OE1 GLU G 139 -12.446 15.424 28.133 1.00 93.05 O +ATOM 9200 OE2 GLU G 139 -10.618 15.170 29.328 1.00 93.05 O +ATOM 9201 N ASP G 140 -6.629 13.886 26.021 1.00 94.87 N +ATOM 9202 CA ASP G 140 -5.174 13.773 25.994 1.00 94.87 C +ATOM 9203 C ASP G 140 -4.525 15.120 25.682 1.00 94.87 C +ATOM 9204 CB ASP G 140 -4.735 12.728 24.966 1.00 94.87 C +ATOM 9205 O ASP G 140 -3.520 15.488 26.295 1.00 94.87 O +ATOM 9206 CG ASP G 140 -5.025 11.304 25.408 1.00 94.87 C +ATOM 9207 OD1 ASP G 140 -4.864 10.993 26.608 1.00 94.87 O +ATOM 9208 OD2 ASP G 140 -5.415 10.485 24.548 1.00 94.87 O +ATOM 9209 N GLU G 141 -5.084 15.818 24.795 1.00 96.08 N +ATOM 9210 CA GLU G 141 -4.555 17.124 24.412 1.00 96.08 C +ATOM 9211 C GLU G 141 -4.594 18.101 25.583 1.00 96.08 C +ATOM 9212 CB GLU G 141 -5.337 17.693 23.225 1.00 96.08 C +ATOM 9213 O GLU G 141 -3.661 18.883 25.777 1.00 96.08 O +ATOM 9214 CG GLU G 141 -5.139 16.919 21.930 1.00 96.08 C +ATOM 9215 CD GLU G 141 -5.978 17.452 20.779 1.00 96.08 C +ATOM 9216 OE1 GLU G 141 -6.563 16.639 20.028 1.00 96.08 O +ATOM 9217 OE2 GLU G 141 -6.049 18.692 20.626 1.00 96.08 O +ATOM 9218 N ILE G 142 -5.713 18.064 26.316 1.00 96.27 N +ATOM 9219 CA ILE G 142 -5.864 18.936 27.475 1.00 96.27 C +ATOM 9220 C ILE G 142 -4.789 18.611 28.509 1.00 96.27 C +ATOM 9221 CB ILE G 142 -7.270 18.803 28.103 1.00 96.27 C +ATOM 9222 O ILE G 142 -4.129 19.512 29.032 1.00 96.27 O +ATOM 9223 CG1 ILE G 142 -8.328 19.418 27.180 1.00 96.27 C +ATOM 9224 CG2 ILE G 142 -7.306 19.454 29.489 1.00 96.27 C +ATOM 9225 CD1 ILE G 142 -9.760 19.086 27.573 1.00 96.27 C +ATOM 9226 N GLU G 143 -4.608 17.359 28.749 1.00 96.25 N +ATOM 9227 CA GLU G 143 -3.595 16.952 29.718 1.00 96.25 C +ATOM 9228 C GLU G 143 -2.198 17.361 29.262 1.00 96.25 C +ATOM 9229 CB GLU G 143 -3.651 15.440 29.952 1.00 96.25 C +ATOM 9230 O GLU G 143 -1.407 17.878 30.053 1.00 96.25 O +ATOM 9231 CG GLU G 143 -2.808 14.967 31.127 1.00 96.25 C +ATOM 9232 CD GLU G 143 -2.999 13.494 31.449 1.00 96.25 C +ATOM 9233 OE1 GLU G 143 -2.296 12.972 32.344 1.00 96.25 O +ATOM 9234 OE2 GLU G 143 -3.858 12.856 30.800 1.00 96.25 O +ATOM 9235 N ALA G 144 -1.917 17.187 28.061 1.00 96.33 N +ATOM 9236 CA ALA G 144 -0.627 17.592 27.509 1.00 96.33 C +ATOM 9237 C ALA G 144 -0.434 19.102 27.615 1.00 96.33 C +ATOM 9238 CB ALA G 144 -0.506 17.145 26.054 1.00 96.33 C +ATOM 9239 O ALA G 144 0.636 19.572 28.009 1.00 96.33 O +ATOM 9240 N ALA G 145 -1.470 19.824 27.281 1.00 96.92 N +ATOM 9241 CA ALA G 145 -1.406 21.281 27.349 1.00 96.92 C +ATOM 9242 C ALA G 145 -1.188 21.754 28.783 1.00 96.92 C +ATOM 9243 CB ALA G 145 -2.680 21.897 26.776 1.00 96.92 C +ATOM 9244 O ALA G 145 -0.475 22.733 29.019 1.00 96.92 O +ATOM 9245 N ARG G 146 -1.814 21.084 29.735 1.00 97.64 N +ATOM 9246 CA ARG G 146 -1.619 21.411 31.144 1.00 97.64 C +ATOM 9247 C ARG G 146 -0.164 21.213 31.556 1.00 97.64 C +ATOM 9248 CB ARG G 146 -2.533 20.557 32.026 1.00 97.64 C +ATOM 9249 O ARG G 146 0.418 22.068 32.227 1.00 97.64 O +ATOM 9250 CG ARG G 146 -3.975 21.037 32.064 1.00 97.64 C +ATOM 9251 CD ARG G 146 -4.847 20.136 32.928 1.00 97.64 C +ATOM 9252 NE ARG G 146 -6.221 20.625 33.002 1.00 97.64 N +ATOM 9253 NH1 ARG G 146 -7.065 18.718 33.997 1.00 97.64 N +ATOM 9254 NH2 ARG G 146 -8.452 20.481 33.526 1.00 97.64 N +ATOM 9255 CZ ARG G 146 -7.243 19.940 33.508 1.00 97.64 C +ATOM 9256 N GLU G 147 0.361 20.137 31.153 1.00 96.18 N +ATOM 9257 CA GLU G 147 1.759 19.862 31.471 1.00 96.18 C +ATOM 9258 C GLU G 147 2.685 20.886 30.821 1.00 96.18 C +ATOM 9259 CB GLU G 147 2.144 18.448 31.027 1.00 96.18 C +ATOM 9260 O GLU G 147 3.635 21.358 31.449 1.00 96.18 O +ATOM 9261 CG GLU G 147 1.515 17.347 31.867 1.00 96.18 C +ATOM 9262 CD GLU G 147 1.878 15.949 31.393 1.00 96.18 C +ATOM 9263 OE1 GLU G 147 1.367 14.961 31.968 1.00 96.18 O +ATOM 9264 OE2 GLU G 147 2.680 15.840 30.439 1.00 96.18 O +ATOM 9265 N ASP G 148 2.387 21.233 29.638 1.00 95.84 N +ATOM 9266 CA ASP G 148 3.179 22.243 28.945 1.00 95.84 C +ATOM 9267 C ASP G 148 3.087 23.594 29.652 1.00 95.84 C +ATOM 9268 CB ASP G 148 2.722 22.379 27.491 1.00 95.84 C +ATOM 9269 O ASP G 148 4.095 24.284 29.817 1.00 95.84 O +ATOM 9270 CG ASP G 148 3.130 21.197 26.629 1.00 95.84 C +ATOM 9271 OD1 ASP G 148 3.935 20.358 27.085 1.00 95.84 O +ATOM 9272 OD2 ASP G 148 2.642 21.106 25.481 1.00 95.84 O +ATOM 9273 N ALA G 149 1.852 23.974 30.025 1.00 96.21 N +ATOM 9274 CA ALA G 149 1.655 25.242 30.722 1.00 96.21 C +ATOM 9275 C ALA G 149 2.442 25.278 32.029 1.00 96.21 C +ATOM 9276 CB ALA G 149 0.171 25.476 30.991 1.00 96.21 C +ATOM 9277 O ALA G 149 3.108 26.271 32.332 1.00 96.21 O +ATOM 9278 N ARG G 150 2.410 24.173 32.724 1.00 96.65 N +ATOM 9279 CA ARG G 150 3.161 24.093 33.973 1.00 96.65 C +ATOM 9280 C ARG G 150 4.658 24.239 33.722 1.00 96.65 C +ATOM 9281 CB ARG G 150 2.876 22.770 34.688 1.00 96.65 C +ATOM 9282 O ARG G 150 5.346 24.964 34.443 1.00 96.65 O +ATOM 9283 CG ARG G 150 1.509 22.709 35.349 1.00 96.65 C +ATOM 9284 CD ARG G 150 1.262 21.361 36.011 1.00 96.65 C +ATOM 9285 NE ARG G 150 -0.122 21.225 36.457 1.00 96.65 N +ATOM 9286 NH1 ARG G 150 -0.054 18.923 36.639 1.00 96.65 N +ATOM 9287 NH2 ARG G 150 -1.979 20.061 37.142 1.00 96.65 N +ATOM 9288 CZ ARG G 150 -0.715 20.070 36.745 1.00 96.65 C +ATOM 9289 N ALA G 151 5.140 23.609 32.718 1.00 95.27 N +ATOM 9290 CA ALA G 151 6.563 23.649 32.393 1.00 95.27 C +ATOM 9291 C ALA G 151 6.986 25.048 31.954 1.00 95.27 C +ATOM 9292 CB ALA G 151 6.890 22.632 31.303 1.00 95.27 C +ATOM 9293 O ALA G 151 8.028 25.551 32.380 1.00 95.27 O +ATOM 9294 N ILE G 152 6.220 25.708 31.125 1.00 95.88 N +ATOM 9295 CA ILE G 152 6.526 27.043 30.622 1.00 95.88 C +ATOM 9296 C ILE G 152 6.511 28.044 31.775 1.00 95.88 C +ATOM 9297 CB ILE G 152 5.528 27.475 29.524 1.00 95.88 C +ATOM 9298 O ILE G 152 7.394 28.899 31.874 1.00 95.88 O +ATOM 9299 CG1 ILE G 152 5.740 26.645 28.253 1.00 95.88 C +ATOM 9300 CG2 ILE G 152 5.664 28.972 29.230 1.00 95.88 C +ATOM 9301 CD1 ILE G 152 4.629 26.795 27.223 1.00 95.88 C +ATOM 9302 N CYS G 153 5.517 27.940 32.722 1.00 95.38 N +ATOM 9303 CA CYS G 153 5.431 28.842 33.865 1.00 95.38 C +ATOM 9304 C CYS G 153 6.610 28.638 34.810 1.00 95.38 C +ATOM 9305 CB CYS G 153 4.119 28.628 34.619 1.00 95.38 C +ATOM 9306 O CYS G 153 7.131 29.601 35.376 1.00 95.38 O +ATOM 9307 SG CYS G 153 2.656 29.145 33.694 1.00 95.38 S +ATOM 9308 N ALA G 154 7.065 27.438 34.953 1.00 96.43 N +ATOM 9309 CA ALA G 154 8.226 27.152 35.792 1.00 96.43 C +ATOM 9310 C ALA G 154 9.497 27.743 35.189 1.00 96.43 C +ATOM 9311 CB ALA G 154 8.384 25.646 35.987 1.00 96.43 C +ATOM 9312 O ALA G 154 10.344 28.276 35.910 1.00 96.43 O +ATOM 9313 N ALA G 155 9.618 27.713 33.891 1.00 94.73 N +ATOM 9314 CA ALA G 155 10.826 28.163 33.205 1.00 94.73 C +ATOM 9315 C ALA G 155 10.831 29.680 33.042 1.00 94.73 C +ATOM 9316 CB ALA G 155 10.950 27.484 31.843 1.00 94.73 C +ATOM 9317 O ALA G 155 11.872 30.324 33.191 1.00 94.73 O +ATOM 9318 N LYS G 156 9.668 30.290 32.747 1.00 95.42 N +ATOM 9319 CA LYS G 156 9.637 31.698 32.364 1.00 95.42 C +ATOM 9320 C LYS G 156 9.008 32.553 33.461 1.00 95.42 C +ATOM 9321 CB LYS G 156 8.871 31.882 31.053 1.00 95.42 C +ATOM 9322 O LYS G 156 9.036 33.783 33.389 1.00 95.42 O +ATOM 9323 CG LYS G 156 9.512 31.188 29.859 1.00 95.42 C +ATOM 9324 CD LYS G 156 9.006 31.762 28.542 1.00 95.42 C +ATOM 9325 CE LYS G 156 9.724 31.143 27.350 1.00 95.42 C +ATOM 9326 NZ LYS G 156 9.253 31.724 26.057 1.00 95.42 N +ATOM 9327 N GLY G 157 8.437 31.951 34.475 1.00 94.91 N +ATOM 9328 CA GLY G 157 7.803 32.658 35.576 1.00 94.91 C +ATOM 9329 C GLY G 157 6.288 32.616 35.519 1.00 94.91 C +ATOM 9330 O GLY G 157 5.702 32.637 34.434 1.00 94.91 O +ATOM 9331 N GLU G 158 5.550 32.545 36.605 1.00 92.94 N +ATOM 9332 CA GLU G 158 4.104 32.388 36.730 1.00 92.94 C +ATOM 9333 C GLU G 158 3.368 33.614 36.196 1.00 92.94 C +ATOM 9334 CB GLU G 158 3.714 32.135 38.189 1.00 92.94 C +ATOM 9335 O GLU G 158 2.223 33.512 35.750 1.00 92.94 O +ATOM 9336 CG GLU G 158 4.096 30.752 38.696 1.00 92.94 C +ATOM 9337 CD GLU G 158 3.529 30.439 40.071 1.00 92.94 C +ATOM 9338 OE1 GLU G 158 3.674 29.287 40.540 1.00 92.94 O +ATOM 9339 OE2 GLU G 158 2.935 31.353 40.685 1.00 92.94 O +ATOM 9340 N THR G 159 4.067 34.806 36.227 1.00 93.51 N +ATOM 9341 CA THR G 159 3.395 36.026 35.795 1.00 93.51 C +ATOM 9342 C THR G 159 3.849 36.426 34.394 1.00 93.51 C +ATOM 9343 CB THR G 159 3.657 37.186 36.773 1.00 93.51 C +ATOM 9344 O THR G 159 3.521 37.514 33.916 1.00 93.51 O +ATOM 9345 CG2 THR G 159 3.131 36.859 38.167 1.00 93.51 C +ATOM 9346 OG1 THR G 159 5.067 37.428 36.851 1.00 93.51 O +ATOM 9347 N SER G 160 4.608 35.606 33.681 1.00 94.83 N +ATOM 9348 CA SER G 160 5.117 35.909 32.348 1.00 94.83 C +ATOM 9349 C SER G 160 4.012 35.818 31.300 1.00 94.83 C +ATOM 9350 CB SER G 160 6.258 34.959 31.980 1.00 94.83 C +ATOM 9351 O SER G 160 3.051 35.065 31.468 1.00 94.83 O +ATOM 9352 OG SER G 160 5.757 33.676 31.648 1.00 94.83 O +ATOM 9353 N PRO G 161 4.086 36.696 30.236 1.00 96.10 N +ATOM 9354 CA PRO G 161 3.123 36.591 29.137 1.00 96.10 C +ATOM 9355 C PRO G 161 3.098 35.201 28.506 1.00 96.10 C +ATOM 9356 CB PRO G 161 3.618 37.637 28.135 1.00 96.10 C +ATOM 9357 O PRO G 161 2.042 34.737 28.068 1.00 96.10 O +ATOM 9358 CG PRO G 161 4.482 38.556 28.937 1.00 96.10 C +ATOM 9359 CD PRO G 161 5.001 37.804 30.128 1.00 96.10 C +ATOM 9360 N ASP G 162 4.170 34.540 28.479 1.00 95.23 N +ATOM 9361 CA ASP G 162 4.252 33.200 27.905 1.00 95.23 C +ATOM 9362 C ASP G 162 3.450 32.198 28.732 1.00 95.23 C +ATOM 9363 CB ASP G 162 5.710 32.749 27.801 1.00 95.23 C +ATOM 9364 O ASP G 162 2.781 31.323 28.179 1.00 95.23 O +ATOM 9365 CG ASP G 162 6.510 33.555 26.793 1.00 95.23 C +ATOM 9366 OD1 ASP G 162 5.908 34.168 25.886 1.00 95.23 O +ATOM 9367 OD2 ASP G 162 7.755 33.576 26.906 1.00 95.23 O +ATOM 9368 N CYS G 163 3.548 32.316 30.029 1.00 93.34 N +ATOM 9369 CA CYS G 163 2.783 31.455 30.924 1.00 93.34 C +ATOM 9370 C CYS G 163 1.285 31.664 30.736 1.00 93.34 C +ATOM 9371 CB CYS G 163 3.165 31.720 32.380 1.00 93.34 C +ATOM 9372 O CYS G 163 0.533 30.699 30.591 1.00 93.34 O +ATOM 9373 SG CYS G 163 2.313 30.654 33.563 1.00 93.34 S +ATOM 9374 N ALA G 164 0.903 32.937 30.652 1.00 95.61 N +ATOM 9375 CA ALA G 164 -0.508 33.254 30.452 1.00 95.61 C +ATOM 9376 C ALA G 164 -1.019 32.676 29.135 1.00 95.61 C +ATOM 9377 CB ALA G 164 -0.725 34.765 30.486 1.00 95.61 C +ATOM 9378 O ALA G 164 -2.112 32.109 29.081 1.00 95.61 O +ATOM 9379 N ALA G 165 -0.265 32.808 28.126 1.00 96.33 N +ATOM 9380 CA ALA G 165 -0.643 32.284 26.816 1.00 96.33 C +ATOM 9381 C ALA G 165 -0.796 30.766 26.856 1.00 96.33 C +ATOM 9382 CB ALA G 165 0.389 32.684 25.765 1.00 96.33 C +ATOM 9383 O ALA G 165 -1.703 30.211 26.231 1.00 96.33 O +ATOM 9384 N ALA G 166 0.066 30.059 27.542 1.00 95.83 N +ATOM 9385 CA ALA G 166 0.010 28.604 27.655 1.00 95.83 C +ATOM 9386 C ALA G 166 -1.280 28.156 28.336 1.00 95.83 C +ATOM 9387 CB ALA G 166 1.222 28.082 28.423 1.00 95.83 C +ATOM 9388 O ALA G 166 -1.918 27.194 27.901 1.00 95.83 O +ATOM 9389 N TRP G 167 -1.644 28.832 29.362 1.00 96.44 N +ATOM 9390 CA TRP G 167 -2.867 28.466 30.070 1.00 96.44 C +ATOM 9391 C TRP G 167 -4.100 28.827 29.248 1.00 96.44 C +ATOM 9392 CB TRP G 167 -2.926 29.159 31.434 1.00 96.44 C +ATOM 9393 O TRP G 167 -5.139 28.173 29.358 1.00 96.44 O +ATOM 9394 CG TRP G 167 -2.156 28.453 32.509 1.00 96.44 C +ATOM 9395 CD1 TRP G 167 -0.994 28.869 33.099 1.00 96.44 C +ATOM 9396 CD2 TRP G 167 -2.490 27.203 33.119 1.00 96.44 C +ATOM 9397 CE2 TRP G 167 -1.487 26.921 34.073 1.00 96.44 C +ATOM 9398 CE3 TRP G 167 -3.543 26.292 32.953 1.00 96.44 C +ATOM 9399 NE1 TRP G 167 -0.587 27.952 34.040 1.00 96.44 N +ATOM 9400 CH2 TRP G 167 -2.546 24.892 34.674 1.00 96.44 C +ATOM 9401 CZ2 TRP G 167 -1.506 25.765 34.857 1.00 96.44 C +ATOM 9402 CZ3 TRP G 167 -3.560 25.143 33.735 1.00 96.44 C +ATOM 9403 N ASP G 168 -3.980 29.826 28.416 1.00 96.47 N +ATOM 9404 CA ASP G 168 -5.067 30.146 27.497 1.00 96.47 C +ATOM 9405 C ASP G 168 -5.361 28.973 26.564 1.00 96.47 C +ATOM 9406 CB ASP G 168 -4.730 31.395 26.680 1.00 96.47 C +ATOM 9407 O ASP G 168 -6.521 28.698 26.249 1.00 96.47 O +ATOM 9408 CG ASP G 168 -4.832 32.677 27.488 1.00 96.47 C +ATOM 9409 OD1 ASP G 168 -5.367 32.645 28.618 1.00 96.47 O +ATOM 9410 OD2 ASP G 168 -4.377 33.729 26.990 1.00 96.47 O +ATOM 9411 N VAL G 169 -4.326 28.343 26.140 1.00 96.52 N +ATOM 9412 CA VAL G 169 -4.496 27.175 25.281 1.00 96.52 C +ATOM 9413 C VAL G 169 -5.277 26.095 26.026 1.00 96.52 C +ATOM 9414 CB VAL G 169 -3.136 26.618 24.806 1.00 96.52 C +ATOM 9415 O VAL G 169 -6.204 25.498 25.475 1.00 96.52 O +ATOM 9416 CG1 VAL G 169 -3.325 25.304 24.050 1.00 96.52 C +ATOM 9417 CG2 VAL G 169 -2.417 27.642 23.930 1.00 96.52 C +ATOM 9418 N VAL G 170 -4.959 25.850 27.257 1.00 96.62 N +ATOM 9419 CA VAL G 170 -5.656 24.871 28.085 1.00 96.62 C +ATOM 9420 C VAL G 170 -7.132 25.245 28.196 1.00 96.62 C +ATOM 9421 CB VAL G 170 -5.026 24.765 29.491 1.00 96.62 C +ATOM 9422 O VAL G 170 -8.010 24.399 28.004 1.00 96.62 O +ATOM 9423 CG1 VAL G 170 -5.856 23.849 30.388 1.00 96.62 C +ATOM 9424 CG2 VAL G 170 -3.587 24.261 29.394 1.00 96.62 C +ATOM 9425 N GLU G 171 -7.365 26.495 28.460 1.00 96.27 N +ATOM 9426 CA GLU G 171 -8.735 26.969 28.632 1.00 96.27 C +ATOM 9427 C GLU G 171 -9.534 26.825 27.340 1.00 96.27 C +ATOM 9428 CB GLU G 171 -8.746 28.427 29.097 1.00 96.27 C +ATOM 9429 O GLU G 171 -10.708 26.448 27.368 1.00 96.27 O +ATOM 9430 CG GLU G 171 -8.329 28.612 30.549 1.00 96.27 C +ATOM 9431 CD GLU G 171 -8.381 30.060 31.009 1.00 96.27 C +ATOM 9432 OE1 GLU G 171 -8.147 30.325 32.210 1.00 96.27 O +ATOM 9433 OE2 GLU G 171 -8.658 30.938 30.160 1.00 96.27 O +ATOM 9434 N GLU G 172 -8.888 27.082 26.298 1.00 95.35 N +ATOM 9435 CA GLU G 172 -9.558 26.938 25.009 1.00 95.35 C +ATOM 9436 C GLU G 172 -9.933 25.483 24.742 1.00 95.35 C +ATOM 9437 CB GLU G 172 -8.671 27.469 23.880 1.00 95.35 C +ATOM 9438 O GLU G 172 -11.050 25.194 24.308 1.00 95.35 O +ATOM 9439 CG GLU G 172 -9.363 27.517 22.526 1.00 95.35 C +ATOM 9440 CD GLU G 172 -8.500 28.126 21.432 1.00 95.35 C +ATOM 9441 OE1 GLU G 172 -8.960 28.209 20.271 1.00 95.35 O +ATOM 9442 OE2 GLU G 172 -7.353 28.522 21.739 1.00 95.35 O +ATOM 9443 N LEU G 173 -9.050 24.612 25.000 1.00 95.23 N +ATOM 9444 CA LEU G 173 -9.310 23.189 24.808 1.00 95.23 C +ATOM 9445 C LEU G 173 -10.405 22.704 25.753 1.00 95.23 C +ATOM 9446 CB LEU G 173 -8.031 22.376 25.030 1.00 95.23 C +ATOM 9447 O LEU G 173 -11.273 21.924 25.355 1.00 95.23 O +ATOM 9448 CG LEU G 173 -6.964 22.481 23.940 1.00 95.23 C +ATOM 9449 CD1 LEU G 173 -5.664 21.835 24.408 1.00 95.23 C +ATOM 9450 CD2 LEU G 173 -7.453 21.836 22.648 1.00 95.23 C +ATOM 9451 N GLN G 174 -10.357 23.137 26.988 1.00 95.07 N +ATOM 9452 CA GLN G 174 -11.379 22.766 27.962 1.00 95.07 C +ATOM 9453 C GLN G 174 -12.752 23.287 27.544 1.00 95.07 C +ATOM 9454 CB GLN G 174 -11.016 23.295 29.350 1.00 95.07 C +ATOM 9455 O GLN G 174 -13.761 22.601 27.719 1.00 95.07 O +ATOM 9456 CG GLN G 174 -9.908 22.508 30.038 1.00 95.07 C +ATOM 9457 CD GLN G 174 -9.518 23.096 31.381 1.00 95.07 C +ATOM 9458 NE2 GLN G 174 -9.310 22.232 32.368 1.00 95.07 N +ATOM 9459 OE1 GLN G 174 -9.403 24.317 31.529 1.00 95.07 O +ATOM 9460 N ALA G 175 -12.727 24.477 26.987 1.00 93.04 N +ATOM 9461 CA ALA G 175 -13.981 25.034 26.487 1.00 93.04 C +ATOM 9462 C ALA G 175 -14.547 24.182 25.355 1.00 93.04 C +ATOM 9463 CB ALA G 175 -13.773 26.471 26.013 1.00 93.04 C +ATOM 9464 O ALA G 175 -15.748 23.903 25.321 1.00 93.04 O +ATOM 9465 N GLU G 176 -13.697 23.781 24.547 1.00 90.75 N +ATOM 9466 CA GLU G 176 -14.130 22.924 23.447 1.00 90.75 C +ATOM 9467 C GLU G 176 -14.647 21.584 23.962 1.00 90.75 C +ATOM 9468 CB GLU G 176 -12.985 22.700 22.457 1.00 90.75 C +ATOM 9469 O GLU G 176 -15.669 21.083 23.488 1.00 90.75 O +ATOM 9470 CG GLU G 176 -13.380 21.887 21.233 1.00 90.75 C +ATOM 9471 CD GLU G 176 -12.370 21.978 20.100 1.00 90.75 C +ATOM 9472 OE1 GLU G 176 -12.557 21.300 19.064 1.00 90.75 O +ATOM 9473 OE2 GLU G 176 -11.383 22.733 20.250 1.00 90.75 O +ATOM 9474 N ALA G 177 -13.977 21.022 24.884 1.00 90.03 N +ATOM 9475 CA ALA G 177 -14.403 19.757 25.477 1.00 90.03 C +ATOM 9476 C ALA G 177 -15.774 19.893 26.135 1.00 90.03 C +ATOM 9477 CB ALA G 177 -13.374 19.273 26.496 1.00 90.03 C +ATOM 9478 O ALA G 177 -16.616 19.000 26.021 1.00 90.03 O +ATOM 9479 N SER G 178 -15.971 21.005 26.814 1.00 88.28 N +ATOM 9480 CA SER G 178 -17.255 21.257 27.462 1.00 88.28 C +ATOM 9481 C SER G 178 -18.369 21.425 26.435 1.00 88.28 C +ATOM 9482 CB SER G 178 -17.174 22.502 28.347 1.00 88.28 C +ATOM 9483 O SER G 178 -19.478 20.922 26.627 1.00 88.28 O +ATOM 9484 OG SER G 178 -16.233 22.318 29.390 1.00 88.28 O +ATOM 9485 N HIS G 179 -18.012 22.146 25.378 1.00 86.04 N +ATOM 9486 CA HIS G 179 -18.982 22.318 24.303 1.00 86.04 C +ATOM 9487 C HIS G 179 -19.380 20.975 23.701 1.00 86.04 C +ATOM 9488 CB HIS G 179 -18.419 23.235 23.215 1.00 86.04 C +ATOM 9489 O HIS G 179 -20.561 20.734 23.437 1.00 86.04 O +ATOM 9490 CG HIS G 179 -19.389 23.527 22.115 1.00 86.04 C +ATOM 9491 CD2 HIS G 179 -20.332 24.490 21.994 1.00 86.04 C +ATOM 9492 ND1 HIS G 179 -19.457 22.772 20.964 1.00 86.04 N +ATOM 9493 CE1 HIS G 179 -20.403 23.262 20.180 1.00 86.04 C +ATOM 9494 NE2 HIS G 179 -20.950 24.304 20.782 1.00 86.04 N +ATOM 9495 N GLN G 180 -18.463 20.138 23.576 1.00 81.18 N +ATOM 9496 CA GLN G 180 -18.726 18.811 23.029 1.00 81.18 C +ATOM 9497 C GLN G 180 -19.618 17.998 23.962 1.00 81.18 C +ATOM 9498 CB GLN G 180 -17.414 18.066 22.775 1.00 81.18 C +ATOM 9499 O GLN G 180 -20.523 17.296 23.508 1.00 81.18 O +ATOM 9500 CG GLN G 180 -16.649 18.566 21.557 1.00 81.18 C +ATOM 9501 CD GLN G 180 -15.489 17.663 21.181 1.00 81.18 C +ATOM 9502 NE2 GLN G 180 -14.377 18.264 20.773 1.00 81.18 N +ATOM 9503 OE1 GLN G 180 -15.592 16.434 21.258 1.00 81.18 O +ATOM 9504 N ARG G 181 -19.372 18.153 25.251 1.00 77.01 N +ATOM 9505 CA ARG G 181 -20.170 17.435 26.240 1.00 77.01 C +ATOM 9506 C ARG G 181 -21.584 17.999 26.316 1.00 77.01 C +ATOM 9507 CB ARG G 181 -19.505 17.501 27.617 1.00 77.01 C +ATOM 9508 O ARG G 181 -22.549 17.250 26.482 1.00 77.01 O +ATOM 9509 CG ARG G 181 -18.250 16.651 27.737 1.00 77.01 C +ATOM 9510 CD ARG G 181 -17.575 16.829 29.089 1.00 77.01 C +ATOM 9511 NE ARG G 181 -16.252 16.211 29.117 1.00 77.01 N +ATOM 9512 NH1 ARG G 181 -15.432 17.558 30.805 1.00 77.01 N +ATOM 9513 NH2 ARG G 181 -14.100 15.941 29.873 1.00 77.01 N +ATOM 9514 CZ ARG G 181 -15.264 16.571 29.932 1.00 77.01 C +ATOM 9515 N ALA G 182 -21.727 19.291 26.187 1.00 69.60 N +ATOM 9516 CA ALA G 182 -23.026 19.954 26.258 1.00 69.60 C +ATOM 9517 C ALA G 182 -23.900 19.576 25.065 1.00 69.60 C +ATOM 9518 CB ALA G 182 -22.848 21.469 26.323 1.00 69.60 C +ATOM 9519 O ALA G 182 -25.103 19.348 25.217 1.00 69.60 O +ATOM 9520 N LYS G 183 -23.367 19.624 23.892 1.00 64.28 N +ATOM 9521 CA LYS G 183 -24.116 19.242 22.698 1.00 64.28 C +ATOM 9522 C LYS G 183 -24.625 17.807 22.803 1.00 64.28 C +ATOM 9523 CB LYS G 183 -23.250 19.401 21.447 1.00 64.28 C +ATOM 9524 O LYS G 183 -25.705 17.488 22.302 1.00 64.28 O +ATOM 9525 CG LYS G 183 -23.224 20.816 20.888 1.00 64.28 C +ATOM 9526 CD LYS G 183 -22.529 20.868 19.534 1.00 64.28 C +ATOM 9527 CE LYS G 183 -22.529 22.278 18.959 1.00 64.28 C +ATOM 9528 NZ LYS G 183 -21.809 22.344 17.651 1.00 64.28 N +ATOM 9529 N LYS G 184 -23.970 16.989 23.536 1.00 59.37 N +ATOM 9530 CA LYS G 184 -24.371 15.598 23.724 1.00 59.37 C +ATOM 9531 C LYS G 184 -25.522 15.487 24.719 1.00 59.37 C +ATOM 9532 CB LYS G 184 -23.185 14.757 24.199 1.00 59.37 C +ATOM 9533 O LYS G 184 -26.407 14.643 24.561 1.00 59.37 O +ATOM 9534 CG LYS G 184 -22.242 14.330 23.084 1.00 59.37 C +ATOM 9535 CD LYS G 184 -21.148 13.404 23.600 1.00 59.37 C +ATOM 9536 CE LYS G 184 -20.174 13.019 22.495 1.00 59.37 C +ATOM 9537 NZ LYS G 184 -19.045 12.192 23.017 1.00 59.37 N +ATOM 9538 N GLN G 185 -25.521 16.318 25.831 1.00 55.05 N +ATOM 9539 CA GLN G 185 -26.571 16.321 26.843 1.00 55.05 C +ATOM 9540 C GLN G 185 -27.862 16.922 26.295 1.00 55.05 C +ATOM 9541 CB GLN G 185 -26.119 17.091 28.085 1.00 55.05 C +ATOM 9542 O GLN G 185 -28.958 16.484 26.651 1.00 55.05 O +ATOM 9543 CG GLN G 185 -25.251 16.275 29.033 1.00 55.05 C +ATOM 9544 CD GLN G 185 -24.768 17.079 30.226 1.00 55.05 C +ATOM 9545 NE2 GLN G 185 -24.113 16.408 31.167 1.00 55.05 N +ATOM 9546 OE1 GLN G 185 -24.982 18.293 30.300 1.00 55.05 O +ATOM 9547 N GLY G 186 -27.871 17.924 25.399 1.00 48.53 N +ATOM 9548 CA GLY G 186 -29.049 18.566 24.838 1.00 48.53 C +ATOM 9549 C GLY G 186 -29.828 17.666 23.897 1.00 48.53 C +ATOM 9550 O GLY G 186 -31.059 17.723 23.853 1.00 48.53 O +ATOM 9551 N SER G 187 -29.193 16.884 23.063 1.00 49.60 N +ATOM 9552 CA SER G 187 -29.895 15.933 22.206 1.00 49.60 C +ATOM 9553 C SER G 187 -30.602 14.863 23.031 1.00 49.60 C +ATOM 9554 CB SER G 187 -28.923 15.274 21.227 1.00 49.60 C +ATOM 9555 O SER G 187 -31.735 14.485 22.727 1.00 49.60 O +ATOM 9556 OG SER G 187 -28.642 13.941 21.617 1.00 49.60 O +ATOM 9557 N ASN G 188 -30.024 14.366 24.104 1.00 45.89 N +ATOM 9558 CA ASN G 188 -30.663 13.405 24.997 1.00 45.89 C +ATOM 9559 C ASN G 188 -31.843 14.026 25.739 1.00 45.89 C +ATOM 9560 CB ASN G 188 -29.648 12.839 25.992 1.00 45.89 C +ATOM 9561 O ASN G 188 -32.865 13.371 25.947 1.00 45.89 O +ATOM 9562 CG ASN G 188 -29.296 11.392 25.709 1.00 45.89 C +ATOM 9563 ND2 ASN G 188 -28.322 10.864 26.441 1.00 45.89 N +ATOM 9564 OD1 ASN G 188 -29.894 10.754 24.839 1.00 45.89 O +ATOM 9565 N SER G 189 -31.710 15.286 26.091 1.00 49.99 N +ATOM 9566 CA SER G 189 -32.836 15.967 26.723 1.00 49.99 C +ATOM 9567 C SER G 189 -33.995 16.141 25.747 1.00 49.99 C +ATOM 9568 CB SER G 189 -32.403 17.331 27.262 1.00 49.99 C +ATOM 9569 O SER G 189 -35.158 15.975 26.121 1.00 49.99 O +ATOM 9570 OG SER G 189 -33.023 18.378 26.536 1.00 49.99 O +ATOM 9571 N PHE G 190 -33.733 16.384 24.483 1.00 49.88 N +ATOM 9572 CA PHE G 190 -34.792 16.481 23.485 1.00 49.88 C +ATOM 9573 C PHE G 190 -35.389 15.109 23.195 1.00 49.88 C +ATOM 9574 CB PHE G 190 -34.258 17.105 22.192 1.00 49.88 C +ATOM 9575 O PHE G 190 -36.611 14.962 23.116 1.00 49.88 O +ATOM 9576 CG PHE G 190 -35.316 17.333 21.146 1.00 49.88 C +ATOM 9577 CD1 PHE G 190 -35.400 16.509 20.031 1.00 49.88 C +ATOM 9578 CD2 PHE G 190 -36.227 18.373 21.279 1.00 49.88 C +ATOM 9579 CE1 PHE G 190 -36.379 16.717 19.062 1.00 49.88 C +ATOM 9580 CE2 PHE G 190 -37.208 18.588 20.314 1.00 49.88 C +ATOM 9581 CZ PHE G 190 -37.281 17.759 19.206 1.00 49.88 C +ATOM 9582 N GLN G 191 -34.598 14.060 23.077 1.00 50.96 N +ATOM 9583 CA GLN G 191 -35.098 12.698 22.919 1.00 50.96 C +ATOM 9584 C GLN G 191 -35.856 12.243 24.163 1.00 50.96 C +ATOM 9585 CB GLN G 191 -33.947 11.734 22.624 1.00 50.96 C +ATOM 9586 O GLN G 191 -36.936 11.658 24.058 1.00 50.96 O +ATOM 9587 CG GLN G 191 -34.349 10.540 21.770 1.00 50.96 C +ATOM 9588 CD GLN G 191 -33.165 9.878 21.092 1.00 50.96 C +ATOM 9589 NE2 GLN G 191 -33.441 8.897 20.240 1.00 50.96 N +ATOM 9590 OE1 GLN G 191 -32.010 10.246 21.331 1.00 50.96 O +ATOM 9591 N ALA G 192 -35.291 12.503 25.356 1.00 54.08 N +ATOM 9592 CA ALA G 192 -36.011 12.228 26.597 1.00 54.08 C +ATOM 9593 C ALA G 192 -37.290 13.056 26.684 1.00 54.08 C +ATOM 9594 CB ALA G 192 -35.118 12.507 27.803 1.00 54.08 C +ATOM 9595 O ALA G 192 -38.334 12.554 27.109 1.00 54.08 O +ATOM 9596 N TYR G 193 -37.131 14.326 26.287 1.00 52.78 N +ATOM 9597 CA TYR G 193 -38.314 15.175 26.204 1.00 52.78 C +ATOM 9598 C TYR G 193 -39.319 14.615 25.204 1.00 52.78 C +ATOM 9599 CB TYR G 193 -37.925 16.603 25.809 1.00 52.78 C +ATOM 9600 O TYR G 193 -40.511 14.515 25.502 1.00 52.78 O +ATOM 9601 CG TYR G 193 -39.105 17.532 25.654 1.00 52.78 C +ATOM 9602 CD1 TYR G 193 -39.588 17.871 24.393 1.00 52.78 C +ATOM 9603 CD2 TYR G 193 -39.737 18.074 26.769 1.00 52.78 C +ATOM 9604 CE1 TYR G 193 -40.673 18.729 24.245 1.00 52.78 C +ATOM 9605 CE2 TYR G 193 -40.822 18.933 26.633 1.00 52.78 C +ATOM 9606 OH TYR G 193 -42.358 20.103 25.229 1.00 52.78 O +ATOM 9607 CZ TYR G 193 -41.283 19.253 25.369 1.00 52.78 C +ATOM 9608 N CYS G 194 -38.827 14.215 24.058 1.00 57.33 N +ATOM 9609 CA CYS G 194 -39.735 13.663 23.059 1.00 57.33 C +ATOM 9610 C CYS G 194 -40.240 12.289 23.481 1.00 57.33 C +ATOM 9611 CB CYS G 194 -39.044 13.568 21.699 1.00 57.33 C +ATOM 9612 O CYS G 194 -41.365 11.907 23.151 1.00 57.33 O +ATOM 9613 SG CYS G 194 -38.949 15.142 20.819 1.00 57.33 S +ATOM 9614 N GLU G 195 -39.481 11.416 24.174 1.00 59.54 N +ATOM 9615 CA GLU G 195 -39.946 10.167 24.771 1.00 59.54 C +ATOM 9616 C GLU G 195 -40.972 10.428 25.870 1.00 59.54 C +ATOM 9617 CB GLU G 195 -38.766 9.368 25.332 1.00 59.54 C +ATOM 9618 O GLU G 195 -41.954 9.694 25.997 1.00 59.54 O +ATOM 9619 CG GLU G 195 -38.041 8.529 24.290 1.00 59.54 C +ATOM 9620 CD GLU G 195 -36.826 7.802 24.845 1.00 59.54 C +ATOM 9621 OE1 GLU G 195 -36.171 7.050 24.088 1.00 59.54 O +ATOM 9622 OE2 GLU G 195 -36.528 7.986 26.046 1.00 59.54 O +ATOM 9623 N ALA G 196 -40.816 11.540 26.693 1.00 64.39 N +ATOM 9624 CA ALA G 196 -41.731 11.913 27.768 1.00 64.39 C +ATOM 9625 C ALA G 196 -42.935 12.677 27.224 1.00 64.39 C +ATOM 9626 CB ALA G 196 -41.005 12.750 28.819 1.00 64.39 C +ATOM 9627 O ALA G 196 -44.014 12.654 27.821 1.00 64.39 O +ATOM 9628 N ASN G 197 -42.649 13.545 26.189 1.00 52.10 N +ATOM 9629 CA ASN G 197 -43.733 14.300 25.571 1.00 52.10 C +ATOM 9630 C ASN G 197 -43.859 13.984 24.083 1.00 52.10 C +ATOM 9631 CB ASN G 197 -43.529 15.802 25.779 1.00 52.10 C +ATOM 9632 O ASN G 197 -43.521 14.813 23.237 1.00 52.10 O +ATOM 9633 CG ASN G 197 -43.728 16.224 27.221 1.00 52.10 C +ATOM 9634 ND2 ASN G 197 -42.863 17.108 27.705 1.00 52.10 N +ATOM 9635 OD1 ASN G 197 -44.651 15.760 27.895 1.00 52.10 O +ATOM 9636 N PRO G 198 -44.234 12.732 23.733 1.00 57.36 N +ATOM 9637 CA PRO G 198 -44.271 12.252 22.349 1.00 57.36 C +ATOM 9638 C PRO G 198 -45.151 13.117 21.448 1.00 57.36 C +ATOM 9639 CB PRO G 198 -44.847 10.840 22.481 1.00 57.36 C +ATOM 9640 O PRO G 198 -44.911 13.199 20.241 1.00 57.36 O +ATOM 9641 CG PRO G 198 -45.267 10.730 23.912 1.00 57.36 C +ATOM 9642 CD PRO G 198 -44.837 11.976 24.631 1.00 57.36 C +ATOM 9643 N ASP G 199 -46.149 13.728 22.028 1.00 53.09 N +ATOM 9644 CA ASP G 199 -47.136 14.502 21.282 1.00 53.09 C +ATOM 9645 C ASP G 199 -46.674 15.946 21.094 1.00 53.09 C +ATOM 9646 CB ASP G 199 -48.490 14.472 21.994 1.00 53.09 C +ATOM 9647 O ASP G 199 -47.395 16.764 20.520 1.00 53.09 O +ATOM 9648 CG ASP G 199 -49.125 13.093 22.003 1.00 53.09 C +ATOM 9649 OD1 ASP G 199 -48.919 12.320 21.042 1.00 53.09 O +ATOM 9650 OD2 ASP G 199 -49.839 12.776 22.979 1.00 53.09 O +ATOM 9651 N ALA G 200 -45.523 16.262 21.625 1.00 53.50 N +ATOM 9652 CA ALA G 200 -45.056 17.642 21.512 1.00 53.50 C +ATOM 9653 C ALA G 200 -44.645 17.967 20.079 1.00 53.50 C +ATOM 9654 CB ALA G 200 -43.889 17.888 22.466 1.00 53.50 C +ATOM 9655 O ALA G 200 -44.083 17.119 19.381 1.00 53.50 O +ATOM 9656 N LEU G 201 -45.101 19.137 19.341 1.00 53.79 N +ATOM 9657 CA LEU G 201 -44.937 19.572 17.958 1.00 53.79 C +ATOM 9658 C LEU G 201 -43.478 19.478 17.527 1.00 53.79 C +ATOM 9659 CB LEU G 201 -45.441 21.007 17.784 1.00 53.79 C +ATOM 9660 O LEU G 201 -43.183 19.055 16.407 1.00 53.79 O +ATOM 9661 CG LEU G 201 -46.798 21.171 17.097 1.00 53.79 C +ATOM 9662 CD1 LEU G 201 -47.593 22.293 17.756 1.00 53.79 C +ATOM 9663 CD2 LEU G 201 -46.614 21.442 15.608 1.00 53.79 C +ATOM 9664 N GLU G 202 -42.685 19.816 18.385 1.00 56.18 N +ATOM 9665 CA GLU G 202 -41.255 19.888 18.097 1.00 56.18 C +ATOM 9666 C GLU G 202 -40.671 18.499 17.851 1.00 56.18 C +ATOM 9667 CB GLU G 202 -40.510 20.575 19.244 1.00 56.18 C +ATOM 9668 O GLU G 202 -39.705 18.351 17.099 1.00 56.18 O +ATOM 9669 CG GLU G 202 -40.731 22.080 19.306 1.00 56.18 C +ATOM 9670 CD GLU G 202 -40.695 22.633 20.722 1.00 56.18 C +ATOM 9671 OE1 GLU G 202 -40.761 23.872 20.891 1.00 56.18 O +ATOM 9672 OE2 GLU G 202 -40.600 21.822 21.669 1.00 56.18 O +ATOM 9673 N CYS G 203 -41.279 17.468 18.521 1.00 49.50 N +ATOM 9674 CA CYS G 203 -40.819 16.089 18.404 1.00 49.50 C +ATOM 9675 C CYS G 203 -41.375 15.434 17.146 1.00 49.50 C +ATOM 9676 CB CYS G 203 -41.230 15.281 19.635 1.00 49.50 C +ATOM 9677 O CYS G 203 -40.801 14.470 16.637 1.00 49.50 O +ATOM 9678 SG CYS G 203 -40.435 15.826 21.162 1.00 49.50 S +ATOM 9679 N ARG G 204 -42.504 15.771 16.533 1.00 46.33 N +ATOM 9680 CA ARG G 204 -43.166 15.223 15.353 1.00 46.33 C +ATOM 9681 C ARG G 204 -42.439 15.634 14.077 1.00 46.33 C +ATOM 9682 CB ARG G 204 -44.626 15.679 15.295 1.00 46.33 C +ATOM 9683 O ARG G 204 -42.597 14.997 13.034 1.00 46.33 O +ATOM 9684 CG ARG G 204 -45.590 14.752 16.018 1.00 46.33 C +ATOM 9685 CD ARG G 204 -47.040 15.143 15.772 1.00 46.33 C +ATOM 9686 NE ARG G 204 -47.966 14.217 16.418 1.00 46.33 N +ATOM 9687 NH1 ARG G 204 -49.852 15.483 15.997 1.00 46.33 N +ATOM 9688 NH2 ARG G 204 -50.029 13.493 17.120 1.00 46.33 N +ATOM 9689 CZ ARG G 204 -49.280 14.400 16.510 1.00 46.33 C +ATOM 9690 N ILE G 205 -41.711 16.743 14.028 1.00 41.81 N +ATOM 9691 CA ILE G 205 -41.088 17.189 12.787 1.00 41.81 C +ATOM 9692 C ILE G 205 -39.960 16.234 12.403 1.00 41.81 C +ATOM 9693 CB ILE G 205 -40.549 18.632 12.912 1.00 41.81 C +ATOM 9694 O ILE G 205 -39.683 16.035 11.218 1.00 41.81 O +ATOM 9695 CG1 ILE G 205 -41.698 19.609 13.188 1.00 41.81 C +ATOM 9696 CG2 ILE G 205 -39.780 19.033 11.649 1.00 41.81 C +ATOM 9697 CD1 ILE G 205 -41.243 21.033 13.479 1.00 41.81 C +ATOM 9698 N TYR G 206 -39.417 15.590 13.387 1.00 36.33 N +ATOM 9699 CA TYR G 206 -38.272 14.755 13.040 1.00 36.33 C +ATOM 9700 C TYR G 206 -38.720 13.354 12.641 1.00 36.33 C +ATOM 9701 CB TYR G 206 -37.290 14.675 14.213 1.00 36.33 C +ATOM 9702 O TYR G 206 -37.894 12.510 12.284 1.00 36.33 O +ATOM 9703 CG TYR G 206 -36.105 15.601 14.076 1.00 36.33 C +ATOM 9704 CD1 TYR G 206 -34.933 15.177 13.453 1.00 36.33 C +ATOM 9705 CD2 TYR G 206 -36.154 16.900 14.571 1.00 36.33 C +ATOM 9706 CE1 TYR G 206 -33.839 16.026 13.327 1.00 36.33 C +ATOM 9707 CE2 TYR G 206 -35.066 17.757 14.450 1.00 36.33 C +ATOM 9708 OH TYR G 206 -32.833 18.156 13.705 1.00 36.33 O +ATOM 9709 CZ TYR G 206 -33.914 17.312 13.827 1.00 36.33 C +ATOM 9710 N ASP G 207 -39.991 12.867 12.933 1.00 33.55 N +ATOM 9711 CA ASP G 207 -40.430 11.527 12.557 1.00 33.55 C +ATOM 9712 C ASP G 207 -40.799 11.465 11.076 1.00 33.55 C +ATOM 9713 CB ASP G 207 -41.620 11.091 13.414 1.00 33.55 C +ATOM 9714 O ASP G 207 -41.063 10.386 10.542 1.00 33.55 O +ATOM 9715 CG ASP G 207 -41.205 10.526 14.761 1.00 33.55 C +ATOM 9716 OD1 ASP G 207 -40.010 10.210 14.948 1.00 33.55 O +ATOM 9717 OD2 ASP G 207 -42.081 10.394 15.643 1.00 33.55 O +ATOM 9718 N ASP G 208 -41.085 12.646 10.393 1.00 27.53 N +ATOM 9719 CA ASP G 208 -41.388 12.382 8.990 1.00 27.53 C +ATOM 9720 C ASP G 208 -40.108 12.208 8.175 1.00 27.53 C +ATOM 9721 CB ASP G 208 -42.236 13.512 8.402 1.00 27.53 C +ATOM 9722 O ASP G 208 -39.176 13.006 8.296 1.00 27.53 O +ATOM 9723 CG ASP G 208 -43.699 13.423 8.799 1.00 27.53 C +ATOM 9724 OD1 ASP G 208 -44.126 12.372 9.323 1.00 27.53 O +ATOM 9725 OD2 ASP G 208 -44.432 14.412 8.582 1.00 27.53 O +TER 9726 ASP G 208 +ENDMDL +END \ No newline at end of file diff --git a/alphafold/common/testdata/glucagon.pdb b/alphafold/common/testdata/glucagon.pdb new file mode 100644 index 0000000000000000000000000000000000000000..448d01c059b71785014677cd1f86f722f3e00ee2 --- /dev/null +++ b/alphafold/common/testdata/glucagon.pdb @@ -0,0 +1,633 @@ +HEADER HORMONE 17-OCT-77 1GCN +TITLE X-RAY ANALYSIS OF GLUCAGON AND ITS RELATIONSHIP TO RECEPTOR +TITLE 2 BINDING +COMPND MOL_ID: 1; +COMPND 2 MOLECULE: GLUCAGON; +COMPND 3 CHAIN: A; +COMPND 4 ENGINEERED: YES +SOURCE MOL_ID: 1; +SOURCE 2 ORGANISM_SCIENTIFIC: SUS SCROFA; +SOURCE 3 ORGANISM_COMMON: PIG; +SOURCE 4 ORGANISM_TAXID: 9823 +KEYWDS HORMONE +EXPDTA X-RAY DIFFRACTION +AUTHOR T.L.BLUNDELL,K.SASAKI,S.DOCKERILL,I.J.TICKLE +REVDAT 6 24-FEB-09 1GCN 1 VERSN +REVDAT 5 30-SEP-83 1GCN 1 REVDAT +REVDAT 4 31-DEC-80 1GCN 1 REMARK +REVDAT 3 22-OCT-79 1GCN 3 ATOM +REVDAT 2 29-AUG-79 1GCN 3 CRYST1 +REVDAT 1 28-NOV-77 1GCN 0 +JRNL AUTH K.SASAKI,S.DOCKERILL,D.A.ADAMIAK,I.J.TICKLE, +JRNL AUTH 2 T.BLUNDELL +JRNL TITL X-RAY ANALYSIS OF GLUCAGON AND ITS RELATIONSHIP TO +JRNL TITL 2 RECEPTOR BINDING. +JRNL REF NATURE V. 257 751 1975 +JRNL REFN ISSN 0028-0836 +JRNL PMID 171582 +JRNL DOI 10.1038/257751A0 +REMARK 1 +REMARK 1 REFERENCE 1 +REMARK 1 EDIT M.O.DAYHOFF +REMARK 1 REF ATLAS OF PROTEIN SEQUENCE V. 5 125 1976 +REMARK 1 REF 2 AND STRUCTURE,SUPPLEMENT 2 +REMARK 1 PUBL NATIONAL BIOMEDICAL RESEARCH FOUNDATION, SILVER +REMARK 1 PUBL 2 SPRING,MD. +REMARK 1 REFN ISSN 0-912466-05-7 +REMARK 2 +REMARK 2 RESOLUTION. 3.00 ANGSTROMS. +REMARK 3 +REMARK 3 REFINEMENT. +REMARK 3 PROGRAM : NULL +REMARK 3 AUTHORS : NULL +REMARK 3 +REMARK 3 DATA USED IN REFINEMENT. +REMARK 3 RESOLUTION RANGE HIGH (ANGSTROMS) : 3.00 +REMARK 3 RESOLUTION RANGE LOW (ANGSTROMS) : NULL +REMARK 3 DATA CUTOFF (SIGMA(F)) : NULL +REMARK 3 DATA CUTOFF HIGH (ABS(F)) : NULL +REMARK 3 DATA CUTOFF LOW (ABS(F)) : NULL +REMARK 3 COMPLETENESS (WORKING+TEST) (%) : NULL +REMARK 3 NUMBER OF REFLECTIONS : NULL +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) : NULL +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 : 246 +REMARK 3 NUCLEIC ACID ATOMS : 0 +REMARK 3 HETEROGEN ATOMS : 0 +REMARK 3 SOLVENT ATOMS : 0 +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) : NULL +REMARK 3 BOND ANGLES (DEGREES) : NULL +REMARK 3 DIHEDRAL ANGLES (DEGREES) : NULL +REMARK 3 IMPROPER ANGLES (DEGREES) : NULL +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 : NULL +REMARK 3 TOPOLOGY FILE 1 : NULL +REMARK 3 +REMARK 3 OTHER REFINEMENT REMARKS: NULL +REMARK 4 +REMARK 4 1GCN 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 : NULL +REMARK 200 TEMPERATURE (KELVIN) : NULL +REMARK 200 PH : NULL +REMARK 200 NUMBER OF CRYSTALS USED : NULL +REMARK 200 +REMARK 200 SYNCHROTRON (Y/N) : NULL +REMARK 200 RADIATION SOURCE : NULL +REMARK 200 BEAMLINE : NULL +REMARK 200 X-RAY GENERATOR MODEL : NULL +REMARK 200 MONOCHROMATIC OR LAUE (M/L) : NULL +REMARK 200 WAVELENGTH OR RANGE (A) : NULL +REMARK 200 MONOCHROMATOR : NULL +REMARK 200 OPTICS : NULL +REMARK 200 +REMARK 200 DETECTOR TYPE : NULL +REMARK 200 DETECTOR MANUFACTURER : NULL +REMARK 200 INTENSITY-INTEGRATION SOFTWARE : NULL +REMARK 200 DATA SCALING SOFTWARE : NULL +REMARK 200 +REMARK 200 NUMBER OF UNIQUE REFLECTIONS : NULL +REMARK 200 RESOLUTION RANGE HIGH (A) : NULL +REMARK 200 RESOLUTION RANGE LOW (A) : NULL +REMARK 200 REJECTION CRITERIA (SIGMA(I)) : NULL +REMARK 200 +REMARK 200 OVERALL. +REMARK 200 COMPLETENESS FOR RANGE (%) : NULL +REMARK 200 DATA REDUNDANCY : NULL +REMARK 200 R MERGE (I) : NULL +REMARK 200 R SYM (I) : NULL +REMARK 200 <I/SIGMA(I)> 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 <I/SIGMA(I)> FOR SHELL : NULL +REMARK 200 +REMARK 200 DIFFRACTION PROTOCOL: NULL +REMARK 200 METHOD USED TO DETERMINE THE STRUCTURE: NULL +REMARK 200 SOFTWARE USED: NULL +REMARK 200 STARTING MODEL: NULL +REMARK 200 +REMARK 200 REMARK: NULL +REMARK 280 +REMARK 280 CRYSTAL +REMARK 280 SOLVENT CONTENT, VS (%): 50.74 +REMARK 280 MATTHEWS COEFFICIENT, VM (ANGSTROMS**3/DA): 2.50 +REMARK 280 +REMARK 280 CRYSTALLIZATION CONDITIONS: NULL +REMARK 290 +REMARK 290 CRYSTALLOGRAPHIC SYMMETRY +REMARK 290 SYMMETRY OPERATORS FOR SPACE GROUP: P 21 3 +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 5555 Z,X,Y +REMARK 290 6555 Z+1/2,-X+1/2,-Y +REMARK 290 7555 -Z+1/2,-X,Y+1/2 +REMARK 290 8555 -Z,X+1/2,-Y+1/2 +REMARK 290 9555 Y,Z,X +REMARK 290 10555 -Y,Z+1/2,-X+1/2 +REMARK 290 11555 Y+1/2,-Z+1/2,-X +REMARK 290 12555 -Y+1/2,-Z,X+1/2 +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 23.55000 +REMARK 290 SMTRY2 2 0.000000 -1.000000 0.000000 0.00000 +REMARK 290 SMTRY3 2 0.000000 0.000000 1.000000 23.55000 +REMARK 290 SMTRY1 3 -1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY2 3 0.000000 1.000000 0.000000 23.55000 +REMARK 290 SMTRY3 3 0.000000 0.000000 -1.000000 23.55000 +REMARK 290 SMTRY1 4 1.000000 0.000000 0.000000 23.55000 +REMARK 290 SMTRY2 4 0.000000 -1.000000 0.000000 23.55000 +REMARK 290 SMTRY3 4 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 SMTRY1 5 0.000000 0.000000 1.000000 0.00000 +REMARK 290 SMTRY2 5 1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY3 5 0.000000 1.000000 0.000000 0.00000 +REMARK 290 SMTRY1 6 0.000000 0.000000 1.000000 23.55000 +REMARK 290 SMTRY2 6 -1.000000 0.000000 0.000000 23.55000 +REMARK 290 SMTRY3 6 0.000000 -1.000000 0.000000 0.00000 +REMARK 290 SMTRY1 7 0.000000 0.000000 -1.000000 23.55000 +REMARK 290 SMTRY2 7 -1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY3 7 0.000000 1.000000 0.000000 23.55000 +REMARK 290 SMTRY1 8 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 SMTRY2 8 1.000000 0.000000 0.000000 23.55000 +REMARK 290 SMTRY3 8 0.000000 -1.000000 0.000000 23.55000 +REMARK 290 SMTRY1 9 0.000000 1.000000 0.000000 0.00000 +REMARK 290 SMTRY2 9 0.000000 0.000000 1.000000 0.00000 +REMARK 290 SMTRY3 9 1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY1 10 0.000000 -1.000000 0.000000 0.00000 +REMARK 290 SMTRY2 10 0.000000 0.000000 1.000000 23.55000 +REMARK 290 SMTRY3 10 -1.000000 0.000000 0.000000 23.55000 +REMARK 290 SMTRY1 11 0.000000 1.000000 0.000000 23.55000 +REMARK 290 SMTRY2 11 0.000000 0.000000 -1.000000 23.55000 +REMARK 290 SMTRY3 11 -1.000000 0.000000 0.000000 0.00000 +REMARK 290 SMTRY1 12 0.000000 -1.000000 0.000000 23.55000 +REMARK 290 SMTRY2 12 0.000000 0.000000 -1.000000 0.00000 +REMARK 290 SMTRY3 12 1.000000 0.000000 0.000000 23.55000 +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: MONOMERIC +REMARK 350 APPLY THE FOLLOWING TO CHAINS: A +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 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: COVALENT BOND LENGTHS +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,2(A3,1X,A1,I4,A1,1X,A4,3X),1X,F6.3) +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 RES CSSEQI ATM2 DEVIATION +REMARK 500 TYR A 10 CZ TYR A 10 OH -0.387 +REMARK 500 TRP A 25 CD1 TRP A 25 NE1 0.287 +REMARK 500 TRP A 25 NE1 TRP A 25 CE2 0.109 +REMARK 500 +REMARK 500 REMARK: NULL +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 TRP A 25 CG - CD1 - NE1 ANGL. DEV. = 6.7 DEGREES +REMARK 500 TRP A 25 CD1 - NE1 - CE2 ANGL. DEV. = -21.5 DEGREES +REMARK 500 TRP A 25 NE1 - CE2 - CZ2 ANGL. DEV. = -11.0 DEGREES +REMARK 500 TRP A 25 NE1 - CE2 - CD2 ANGL. DEV. = 9.6 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 SER A 2 -57.57 -21.14 +REMARK 500 THR A 5 54.62 -63.85 +REMARK 500 SER A 11 9.62 -51.97 +REMARK 500 MET A 27 -93.98 -145.30 +REMARK 500 ASN A 28 64.02 15.67 +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 ASN A 28 0.08 SIDE_CHAIN +REMARK 500 +REMARK 500 REMARK: NULL +REMARK 500 +REMARK 500 GEOMETRY AND STEREOCHEMISTRY +REMARK 500 SUBTOPIC: MAIN CHAIN PLANARITY +REMARK 500 +REMARK 500 THE FOLLOWING RESIDUES HAVE A PSEUDO PLANARITY +REMARK 500 TORSION, C(I) - CA(I) - N(I+1) - O(I), GREATER +REMARK 500 10.0 DEGREES. (M=MODEL NUMBER; RES=RESIDUE NAME; +REMARK 500 C=CHAIN IDENTIFIER; SSEQ=SEQUENCE NUMBER; +REMARK 500 I=INSERTION CODE). +REMARK 500 +REMARK 500 M RES CSSEQI ANGLE +REMARK 500 HIS A 1 19.48 +REMARK 500 GLN A 3 -15.78 +REMARK 500 GLY A 4 -17.23 +REMARK 500 THR A 5 -10.38 +REMARK 500 PHE A 6 -12.06 +REMARK 500 THR A 7 -14.66 +REMARK 500 SER A 11 -15.10 +REMARK 500 LYS A 12 14.46 +REMARK 500 ALA A 19 -10.92 +REMARK 500 GLN A 20 -13.40 +REMARK 500 VAL A 23 -15.87 +REMARK 500 LEU A 26 -14.56 +REMARK 500 MET A 27 -16.22 +REMARK 500 +REMARK 500 REMARK: NULL +DBREF 1GCN A 1 29 UNP P01274 GLUC_PIG 33 61 +SEQRES 1 A 29 HIS SER GLN GLY THR PHE THR SER ASP TYR SER LYS TYR +SEQRES 2 A 29 LEU ASP SER ARG ARG ALA GLN ASP PHE VAL GLN TRP LEU +SEQRES 3 A 29 MET ASN THR +HELIX 1 A PHE A 6 LEU A 26 1 21 +CRYST1 47.100 47.100 47.100 90.00 90.00 90.00 P 21 3 12 +ORIGX1 0.021231 0.000000 0.000000 0.00000 +ORIGX2 0.000000 0.021231 0.000000 0.00000 +ORIGX3 0.000000 0.000000 0.021231 0.00000 +SCALE1 0.021231 0.000000 0.000000 0.00000 +SCALE2 0.000000 0.021231 0.000000 0.00000 +SCALE3 0.000000 0.000000 0.021231 0.00000 +ATOM 1 N HIS A 1 49.668 24.248 10.436 1.00 25.00 N +ATOM 2 CA HIS A 1 50.197 25.578 10.784 1.00 16.00 C +ATOM 3 C HIS A 1 49.169 26.701 10.917 1.00 16.00 C +ATOM 4 O HIS A 1 48.241 26.524 11.749 1.00 16.00 O +ATOM 5 CB HIS A 1 51.312 26.048 9.843 1.00 16.00 C +ATOM 6 CG HIS A 1 50.958 26.068 8.340 1.00 16.00 C +ATOM 7 ND1 HIS A 1 49.636 26.144 7.860 1.00 16.00 N +ATOM 8 CD2 HIS A 1 51.797 26.043 7.286 1.00 16.00 C +ATOM 9 CE1 HIS A 1 49.691 26.152 6.454 1.00 17.00 C +ATOM 10 NE2 HIS A 1 51.046 26.090 6.098 1.00 17.00 N +ATOM 11 N SER A 2 49.788 27.850 10.784 1.00 16.00 N +ATOM 12 CA SER A 2 49.138 29.147 10.620 1.00 15.00 C +ATOM 13 C SER A 2 47.713 29.006 10.110 1.00 15.00 C +ATOM 14 O SER A 2 46.740 29.251 10.864 1.00 15.00 O +ATOM 15 CB SER A 2 49.875 29.930 9.569 1.00 16.00 C +ATOM 16 OG SER A 2 49.145 31.057 9.176 1.00 19.00 O +ATOM 17 N GLN A 3 47.620 28.367 8.973 1.00 15.00 N +ATOM 18 CA GLN A 3 46.287 28.193 8.308 1.00 14.00 C +ATOM 19 C GLN A 3 45.406 27.172 8.963 1.00 14.00 C +ATOM 20 O GLN A 3 44.198 27.508 9.014 1.00 14.00 O +ATOM 21 CB GLN A 3 46.489 27.963 6.806 1.00 18.00 C +ATOM 22 CG GLN A 3 45.138 27.800 6.111 1.00 21.00 C +ATOM 23 CD GLN A 3 45.304 27.952 4.603 1.00 24.00 C +ATOM 24 OE1 GLN A 3 46.432 28.202 4.112 1.00 24.00 O +ATOM 25 NE2 GLN A 3 44.233 27.647 3.897 1.00 26.00 N +ATOM 26 N GLY A 4 46.014 26.394 9.871 1.00 14.00 N +ATOM 27 CA GLY A 4 45.422 25.287 10.680 1.00 14.00 C +ATOM 28 C GLY A 4 43.892 25.215 10.719 1.00 14.00 C +ATOM 29 O GLY A 4 43.287 26.155 11.288 1.00 14.00 O +ATOM 30 N THR A 5 43.406 23.993 10.767 1.00 14.00 N +ATOM 31 CA THR A 5 42.004 23.642 10.443 1.00 12.00 C +ATOM 32 C THR A 5 40.788 24.146 11.252 1.00 12.00 C +ATOM 33 O THR A 5 39.804 23.384 11.410 1.00 12.00 O +ATOM 34 CB THR A 5 41.934 22.202 9.889 1.00 14.00 C +ATOM 35 OG1 THR A 5 41.080 21.317 10.609 1.00 15.00 O +ATOM 36 CG2 THR A 5 43.317 21.556 9.849 1.00 15.00 C +ATOM 37 N PHE A 6 40.628 25.463 11.441 1.00 12.00 N +ATOM 38 CA PHE A 6 39.381 25.950 12.104 1.00 12.00 C +ATOM 39 C PHE A 6 38.156 25.684 11.232 1.00 12.00 C +ATOM 40 O PHE A 6 37.231 25.002 11.719 1.00 12.00 O +ATOM 41 CB PHE A 6 39.407 27.425 12.584 1.00 12.00 C +ATOM 42 CG PHE A 6 38.187 27.923 13.430 1.00 12.00 C +ATOM 43 CD1 PHE A 6 36.889 27.518 13.163 1.00 12.00 C +ATOM 44 CD2 PHE A 6 38.386 28.862 14.419 1.00 12.00 C +ATOM 45 CE1 PHE A 6 35.813 27.967 13.909 1.00 12.00 C +ATOM 46 CE2 PHE A 6 37.306 29.328 15.177 1.00 12.00 C +ATOM 47 CZ PHE A 6 36.019 28.871 14.928 1.00 12.00 C +ATOM 48 N THR A 7 38.341 25.794 9.956 1.00 12.00 N +ATOM 49 CA THR A 7 37.249 25.666 8.991 1.00 12.00 C +ATOM 50 C THR A 7 36.324 24.452 9.101 1.00 12.00 C +ATOM 51 O THR A 7 35.111 24.637 9.387 1.00 12.00 O +ATOM 52 CB THR A 7 37.884 25.743 7.628 1.00 13.00 C +ATOM 53 OG1 THR A 7 37.940 27.122 7.317 1.00 14.00 O +ATOM 54 CG2 THR A 7 37.073 25.003 6.585 1.00 14.00 C +ATOM 55 N SER A 8 36.964 23.356 9.442 1.00 12.00 N +ATOM 56 CA SER A 8 36.286 22.063 9.486 1.00 12.00 C +ATOM 57 C SER A 8 35.575 21.813 10.813 1.00 11.00 C +ATOM 58 O SER A 8 35.203 20.650 11.111 1.00 10.00 O +ATOM 59 CB SER A 8 37.291 20.958 9.189 1.00 16.00 C +ATOM 60 OG SER A 8 37.917 21.247 7.943 1.00 20.00 O +ATOM 61 N ASP A 9 35.723 22.783 11.694 1.00 10.00 N +ATOM 62 CA ASP A 9 35.004 22.803 12.977 1.00 10.00 C +ATOM 63 C ASP A 9 33.532 23.121 12.749 1.00 10.00 C +ATOM 64 O ASP A 9 32.645 22.360 13.210 1.00 10.00 O +ATOM 65 CB ASP A 9 35.556 23.874 13.919 1.00 11.00 C +ATOM 66 CG ASP A 9 36.280 23.230 15.096 1.00 13.00 C +ATOM 67 OD1 ASP A 9 36.088 22.010 15.324 1.00 16.00 O +ATOM 68 OD2 ASP A 9 36.821 23.974 15.951 1.00 16.00 O +ATOM 69 N TYR A 10 33.316 24.220 12.040 1.00 10.00 N +ATOM 70 CA TYR A 10 31.967 24.742 11.748 1.00 10.00 C +ATOM 71 C TYR A 10 31.203 23.973 10.685 1.00 10.00 C +ATOM 72 O TYR A 10 29.980 23.772 10.885 1.00 10.00 O +ATOM 73 CB TYR A 10 31.951 26.230 11.367 1.00 10.00 C +ATOM 74 CG TYR A 10 30.613 26.678 10.713 1.00 10.00 C +ATOM 75 CD1 TYR A 10 30.563 26.886 9.350 1.00 10.00 C +ATOM 76 CD2 TYR A 10 29.463 26.824 11.461 1.00 10.00 C +ATOM 77 CE1 TYR A 10 29.377 27.275 8.733 1.00 10.00 C +ATOM 78 CE2 TYR A 10 28.272 27.214 10.848 1.00 10.00 C +ATOM 79 CZ TYR A 10 28.226 27.452 9.483 1.00 10.00 C +ATOM 80 OH TYR A 10 27.365 27.683 9.060 1.00 11.00 O +ATOM 81 N SER A 11 31.796 23.909 9.491 1.00 10.00 N +ATOM 82 CA SER A 11 31.146 23.418 8.250 1.00 10.00 C +ATOM 83 C SER A 11 30.463 22.048 8.303 1.00 10.00 C +ATOM 84 O SER A 11 29.615 21.759 7.422 1.00 10.00 O +ATOM 85 CB SER A 11 32.004 23.615 6.998 1.00 14.00 C +ATOM 86 OG SER A 11 32.013 24.995 6.632 1.00 19.00 O +ATOM 87 N LYS A 12 30.402 21.619 9.544 1.00 10.00 N +ATOM 88 CA LYS A 12 29.792 20.460 10.189 1.00 9.00 C +ATOM 89 C LYS A 12 28.494 20.817 10.932 1.00 9.00 C +ATOM 90 O LYS A 12 27.597 19.943 10.980 1.00 9.00 O +ATOM 91 CB LYS A 12 30.811 20.013 11.224 1.00 10.00 C +ATOM 92 CG LYS A 12 30.482 18.661 11.833 1.00 14.00 C +ATOM 93 CD LYS A 12 31.413 18.365 12.999 1.00 18.00 C +ATOM 94 CE LYS A 12 31.243 16.937 13.498 1.00 22.00 C +ATOM 95 NZ LYS A 12 32.121 16.717 14.652 1.00 26.00 N +ATOM 96 N TYR A 13 28.583 21.742 11.894 1.00 9.00 N +ATOM 97 CA TYR A 13 27.396 22.283 12.612 1.00 8.00 C +ATOM 98 C TYR A 13 26.214 22.497 11.670 1.00 8.00 C +ATOM 99 O TYR A 13 25.037 22.245 12.029 1.00 8.00 O +ATOM 100 CB TYR A 13 27.730 23.578 13.385 1.00 8.00 C +ATOM 101 CG TYR A 13 26.516 24.500 13.692 1.00 8.00 C +ATOM 102 CD1 TYR A 13 25.798 24.377 14.867 1.00 8.00 C +ATOM 103 CD2 TYR A 13 26.185 25.498 12.796 1.00 8.00 C +ATOM 104 CE1 TYR A 13 24.713 25.228 15.120 1.00 8.00 C +ATOM 105 CE2 TYR A 13 25.108 26.342 13.035 1.00 8.00 C +ATOM 106 CZ TYR A 13 24.370 26.210 14.196 1.00 8.00 C +ATOM 107 OH TYR A 13 23.202 26.933 14.347 1.00 10.00 O +ATOM 108 N LEU A 14 26.522 22.993 10.494 1.00 8.00 N +ATOM 109 CA LEU A 14 25.461 23.263 9.523 1.00 8.00 C +ATOM 110 C LEU A 14 24.912 21.978 8.907 1.00 8.00 C +ATOM 111 O LEU A 14 24.122 22.025 7.933 1.00 8.00 O +ATOM 112 CB LEU A 14 25.923 24.242 8.447 1.00 13.00 C +ATOM 113 CG LEU A 14 25.064 25.509 8.412 1.00 19.00 C +ATOM 114 CD1 LEU A 14 25.564 26.496 7.505 1.00 25.00 C +ATOM 115 CD2 LEU A 14 23.582 25.209 8.199 1.00 25.00 C +ATOM 116 N ASP A 15 25.556 20.886 9.263 1.00 8.00 N +ATOM 117 CA ASP A 15 25.075 19.552 8.885 1.00 8.00 C +ATOM 118 C ASP A 15 24.208 19.002 10.009 1.00 8.00 C +ATOM 119 O ASP A 15 23.550 17.940 9.861 1.00 8.00 O +ATOM 120 CB ASP A 15 26.246 18.601 8.644 1.00 11.00 C +ATOM 121 CG ASP A 15 26.260 18.121 7.196 1.00 16.00 C +ATOM 122 OD1 ASP A 15 26.021 18.946 6.280 1.00 21.00 O +ATOM 123 OD2 ASP A 15 26.732 16.984 6.946 1.00 21.00 O +ATOM 124 N SER A 16 24.015 19.861 10.986 1.00 8.00 N +ATOM 125 CA SER A 16 23.180 19.548 12.149 1.00 7.00 C +ATOM 126 C SER A 16 21.923 20.414 12.167 1.00 7.00 C +ATOM 127 O SER A 16 20.841 19.941 12.598 1.00 7.00 O +ATOM 128 CB SER A 16 23.981 19.746 13.437 1.00 9.00 C +ATOM 129 OG SER A 16 23.327 19.102 14.524 1.00 11.00 O +ATOM 130 N ARG A 17 22.037 21.605 11.597 1.00 7.00 N +ATOM 131 CA ARG A 17 20.875 22.504 11.583 1.00 6.00 C +ATOM 132 C ARG A 17 19.868 22.156 10.491 1.00 6.00 C +ATOM 133 O ARG A 17 18.665 22.015 10.809 1.00 6.00 O +ATOM 134 CB ARG A 17 21.214 23.997 11.557 1.00 7.00 C +ATOM 135 CG ARG A 17 20.010 24.800 12.063 1.00 9.00 C +ATOM 136 CD ARG A 17 19.570 25.929 11.132 1.00 11.00 C +ATOM 137 NE ARG A 17 20.149 27.218 11.537 1.00 12.00 N +ATOM 138 CZ ARG A 17 19.828 28.351 10.936 1.00 13.00 C +ATOM 139 NH1 ARG A 17 19.319 28.304 9.720 1.00 14.00 N +ATOM 140 NH2 ARG A 17 20.351 29.485 11.362 1.00 14.00 N +ATOM 141 N ARG A 18 20.378 21.725 9.348 1.00 6.00 N +ATOM 142 CA ARG A 18 19.530 21.258 8.235 1.00 5.00 C +ATOM 143 C ARG A 18 19.148 19.796 8.478 1.00 5.00 C +ATOM 144 O ARG A 18 18.326 19.189 7.741 1.00 5.00 O +ATOM 145 CB ARG A 18 20.237 21.481 6.888 1.00 8.00 C +ATOM 146 CG ARG A 18 19.384 21.236 5.634 1.00 9.00 C +ATOM 147 CD ARG A 18 19.623 19.860 5.005 1.00 11.00 C +ATOM 148 NE ARG A 18 20.029 19.997 3.600 1.00 12.00 N +ATOM 149 CZ ARG A 18 19.398 19.415 2.597 1.00 13.00 C +ATOM 150 NH1 ARG A 18 18.483 18.493 2.835 1.00 14.00 N +ATOM 151 NH2 ARG A 18 19.831 19.597 1.364 1.00 14.00 N +ATOM 152 N ALA A 19 19.560 19.319 9.623 1.00 6.00 N +ATOM 153 CA ALA A 19 19.126 17.991 10.053 1.00 6.00 C +ATOM 154 C ALA A 19 18.002 18.136 11.071 1.00 6.00 C +ATOM 155 O ALA A 19 16.933 17.494 10.922 1.00 7.00 O +ATOM 156 CB ALA A 19 20.285 17.187 10.629 1.00 15.00 C +ATOM 157 N GLN A 20 18.094 19.241 11.783 1.00 7.00 N +ATOM 158 CA GLN A 20 17.013 19.632 12.689 1.00 7.00 C +ATOM 159 C GLN A 20 15.897 20.314 11.905 1.00 7.00 C +ATOM 160 O GLN A 20 14.701 20.031 12.162 1.00 7.00 O +ATOM 161 CB GLN A 20 17.513 20.538 13.821 1.00 11.00 C +ATOM 162 CG GLN A 20 16.699 21.829 13.936 1.00 16.00 C +ATOM 163 CD GLN A 20 16.591 22.277 15.393 1.00 22.00 C +ATOM 164 OE1 GLN A 20 17.533 22.060 16.194 1.00 24.00 O +ATOM 165 NE2 GLN A 20 15.356 22.544 15.773 1.00 24.00 N +ATOM 166 N ASP A 21 16.292 20.724 10.714 1.00 7.00 N +ATOM 167 CA ASP A 21 15.405 21.490 9.835 1.00 7.00 C +ATOM 168 C ASP A 21 14.451 20.565 9.120 1.00 7.00 C +ATOM 169 O ASP A 21 13.245 20.850 8.962 1.00 7.00 O +ATOM 170 CB ASP A 21 16.212 22.278 8.809 1.00 14.00 C +ATOM 171 CG ASP A 21 15.427 23.525 8.413 1.00 21.00 C +ATOM 172 OD1 ASP A 21 15.031 24.298 9.321 1.00 28.00 O +ATOM 173 OD2 ASP A 21 15.316 23.827 7.200 1.00 28.00 O +ATOM 174 N PHE A 22 14.987 19.373 8.843 1.00 7.00 N +ATOM 175 CA PHE A 22 14.216 18.253 8.289 1.00 7.00 C +ATOM 176 C PHE A 22 13.098 17.860 9.246 1.00 7.00 C +ATOM 177 O PHE A 22 11.956 17.556 8.818 1.00 7.00 O +ATOM 178 CB PHE A 22 15.134 17.038 8.105 1.00 8.00 C +ATOM 179 CG PHE A 22 14.349 15.761 7.724 1.00 10.00 C +ATOM 180 CD1 PHE A 22 14.022 15.527 6.410 1.00 12.00 C +ATOM 181 CD2 PHE A 22 13.992 14.842 8.689 1.00 12.00 C +ATOM 182 CE1 PHE A 22 13.302 14.391 6.050 1.00 14.00 C +ATOM 183 CE2 PHE A 22 13.269 13.708 8.340 1.00 14.00 C +ATOM 184 CZ PHE A 22 12.917 13.483 7.018 1.00 16.00 C +ATOM 185 N VAL A 23 13.455 17.883 10.517 1.00 7.00 N +ATOM 186 CA VAL A 23 12.574 17.403 11.589 1.00 7.00 C +ATOM 187 C VAL A 23 11.283 18.205 11.729 1.00 7.00 C +ATOM 188 O VAL A 23 10.233 17.600 12.052 1.00 7.00 O +ATOM 189 CB VAL A 23 13.339 17.278 12.906 1.00 10.00 C +ATOM 190 CG1 VAL A 23 12.441 17.004 14.108 1.00 13.00 C +ATOM 191 CG2 VAL A 23 14.455 16.248 12.794 1.00 13.00 C +ATOM 192 N GLN A 24 11.255 19.253 10.941 1.00 8.00 N +ATOM 193 CA GLN A 24 10.082 20.114 10.818 1.00 8.00 C +ATOM 194 C GLN A 24 9.158 19.638 9.692 1.00 8.00 C +ATOM 195 O GLN A 24 7.959 19.990 9.663 1.00 8.00 O +ATOM 196 CB GLN A 24 10.575 21.521 10.498 1.00 14.00 C +ATOM 197 CG GLN A 24 9.505 22.591 10.661 1.00 20.00 C +ATOM 198 CD GLN A 24 9.964 23.862 9.956 1.00 26.00 C +ATOM 199 OE1 GLN A 24 10.079 24.941 10.587 1.00 32.00 O +ATOM 200 NE2 GLN A 24 10.086 23.739 8.649 1.00 32.00 N +ATOM 201 N TRP A 25 9.723 19.074 8.651 1.00 8.00 N +ATOM 202 CA TRP A 25 8.899 18.676 7.495 1.00 9.00 C +ATOM 203 C TRP A 25 8.118 17.395 7.751 1.00 9.00 C +ATOM 204 O TRP A 25 6.860 17.395 7.725 1.00 9.00 O +ATOM 205 CB TRP A 25 9.761 18.442 6.262 1.00 11.00 C +ATOM 206 CG TRP A 25 8.871 18.331 5.004 1.00 12.00 C +ATOM 207 CD1 TRP A 25 8.097 19.279 4.442 1.00 12.00 C +ATOM 208 CD2 TRP A 25 8.640 17.180 4.249 1.00 12.00 C +ATOM 209 NE1 TRP A 25 7.041 18.780 3.259 1.00 12.00 N +ATOM 210 CE2 TRP A 25 7.873 17.564 3.121 1.00 12.00 C +ATOM 211 CE3 TRP A 25 9.124 15.884 4.378 1.00 12.00 C +ATOM 212 CZ2 TRP A 25 7.726 16.765 2.003 1.00 12.00 C +ATOM 213 CZ3 TRP A 25 8.870 15.038 3.296 1.00 12.00 C +ATOM 214 CH2 TRP A 25 8.216 15.469 2.140 1.00 12.00 C +ATOM 215 N LEU A 26 8.857 16.484 8.346 1.00 9.00 N +ATOM 216 CA LEU A 26 8.377 15.159 8.741 1.00 10.00 C +ATOM 217 C LEU A 26 7.534 15.279 10.012 1.00 11.00 C +ATOM 218 O LEU A 26 6.755 14.347 10.331 1.00 11.00 O +ATOM 219 CB LEU A 26 9.611 14.267 8.924 1.00 10.00 C +ATOM 220 CG LEU A 26 9.342 12.810 9.303 1.00 10.00 C +ATOM 221 CD1 LEU A 26 8.223 12.149 8.505 1.00 10.00 C +ATOM 222 CD2 LEU A 26 10.637 11.982 9.250 1.00 10.00 C +ATOM 223 N MET A 27 7.281 16.544 10.320 1.00 11.00 N +ATOM 224 CA MET A 27 6.446 16.959 11.451 1.00 11.00 C +ATOM 225 C MET A 27 5.607 18.227 11.219 1.00 13.00 C +ATOM 226 O MET A 27 4.823 18.240 10.244 1.00 13.00 O +ATOM 227 CB MET A 27 7.327 17.118 12.679 1.00 11.00 C +ATOM 228 CG MET A 27 6.518 17.289 13.953 1.00 11.00 C +ATOM 229 SD MET A 27 7.301 18.326 15.196 1.00 11.00 S +ATOM 230 CE MET A 27 5.833 18.677 16.178 1.00 11.00 C +ATOM 231 N ASN A 28 6.147 19.366 11.620 1.00 14.00 N +ATOM 232 CA ASN A 28 5.399 20.637 11.728 1.00 14.00 C +ATOM 233 C ASN A 28 3.878 20.587 11.716 1.00 17.00 C +ATOM 234 O ASN A 28 3.252 21.114 10.763 1.00 19.00 O +ATOM 235 CB ASN A 28 5.874 21.774 10.843 1.00 14.00 C +ATOM 236 CG ASN A 28 6.246 22.905 11.791 1.00 14.00 C +ATOM 237 OD1 ASN A 28 6.929 22.629 12.807 1.00 14.00 O +ATOM 238 ND2 ASN A 28 6.271 24.085 11.229 1.00 14.00 N +ATOM 239 N THR A 29 3.391 19.940 12.762 1.00 21.00 N +ATOM 240 CA THR A 29 2.014 19.761 13.283 1.00 21.00 C +ATOM 241 C THR A 29 0.826 19.943 12.332 1.00 23.00 C +ATOM 242 O THR A 29 0.932 19.600 11.133 1.00 30.00 O +ATOM 243 CB THR A 29 1.845 20.667 14.505 1.00 21.00 C +ATOM 244 OG1 THR A 29 1.214 21.893 14.153 1.00 21.00 O +ATOM 245 CG2 THR A 29 3.180 20.968 15.185 1.00 21.00 C +ATOM 246 OXT THR A 29 -0.317 20.109 12.824 1.00 25.00 O +TER 247 THR A 29 +MASTER 344 1 0 1 0 0 0 6 246 1 0 3 +END diff --git a/alphafold/data/__init__.py b/alphafold/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9821d212c3c7781e601ea8d2137493942d0937d4 --- /dev/null +++ b/alphafold/data/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Data pipeline for model features.""" diff --git a/alphafold/data/feature_processing.py b/alphafold/data/feature_processing.py new file mode 100644 index 0000000000000000000000000000000000000000..dfcf8af3a896b470dc197e00b819b5471e96a3d0 --- /dev/null +++ b/alphafold/data/feature_processing.py @@ -0,0 +1,229 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Feature processing logic for multimer data pipeline.""" + +from typing import Iterable, MutableMapping, List + +from alphafold.common import residue_constants +from alphafold.data import msa_pairing +from alphafold.data import pipeline +import numpy as np + +REQUIRED_FEATURES = frozenset({ + 'aatype', 'all_atom_mask', 'all_atom_positions', 'all_chains_entity_ids', + 'all_crops_all_chains_mask', 'all_crops_all_chains_positions', + 'all_crops_all_chains_residue_ids', 'assembly_num_chains', 'asym_id', + 'bert_mask', 'cluster_bias_mask', 'deletion_matrix', 'deletion_mean', + 'entity_id', 'entity_mask', 'mem_peak', 'msa', 'msa_mask', 'num_alignments', + 'num_templates', 'queue_size', 'residue_index', 'resolution', + 'seq_length', 'seq_mask', 'sym_id', 'template_aatype', + 'template_all_atom_mask', 'template_all_atom_positions' +}) + +MAX_TEMPLATES = 4 +MSA_CROP_SIZE = 2048 + + +def _is_homomer_or_monomer(chains: Iterable[pipeline.FeatureDict]) -> bool: + """Checks if a list of chains represents a homomer/monomer example.""" + # Note that an entity_id of 0 indicates padding. + num_unique_chains = len(np.unique(np.concatenate( + [np.unique(chain['entity_id'][chain['entity_id'] > 0]) for + chain in chains]))) + return num_unique_chains == 1 + + +def pair_and_merge( + all_chain_features: MutableMapping[str, pipeline.FeatureDict] + ) -> pipeline.FeatureDict: + """Runs processing on features to augment, pair and merge. + + Args: + all_chain_features: A MutableMap of dictionaries of features for each chain. + + Returns: + A dictionary of features. + """ + + process_unmerged_features(all_chain_features) + + np_chains_list = list(all_chain_features.values()) + + pair_msa_sequences = not _is_homomer_or_monomer(np_chains_list) + + if pair_msa_sequences: + np_chains_list = msa_pairing.create_paired_features( + chains=np_chains_list) + np_chains_list = msa_pairing.deduplicate_unpaired_sequences(np_chains_list) + np_chains_list = crop_chains( + np_chains_list, + msa_crop_size=MSA_CROP_SIZE, + pair_msa_sequences=pair_msa_sequences, + max_templates=MAX_TEMPLATES) + np_example = msa_pairing.merge_chain_features( + np_chains_list=np_chains_list, pair_msa_sequences=pair_msa_sequences, + max_templates=MAX_TEMPLATES) + np_example = process_final(np_example) + return np_example + + +def crop_chains( + chains_list: List[pipeline.FeatureDict], + msa_crop_size: int, + pair_msa_sequences: bool, + max_templates: int) -> List[pipeline.FeatureDict]: + """Crops the MSAs for a set of chains. + + Args: + chains_list: A list of chains to be cropped. + msa_crop_size: The total number of sequences to crop from the MSA. + pair_msa_sequences: Whether we are operating in sequence-pairing mode. + max_templates: The maximum templates to use per chain. + + Returns: + The chains cropped. + """ + + # Apply the cropping. + cropped_chains = [] + for chain in chains_list: + cropped_chain = _crop_single_chain( + chain, + msa_crop_size=msa_crop_size, + pair_msa_sequences=pair_msa_sequences, + max_templates=max_templates) + cropped_chains.append(cropped_chain) + + return cropped_chains + + +def _crop_single_chain(chain: pipeline.FeatureDict, + msa_crop_size: int, + pair_msa_sequences: bool, + max_templates: int) -> pipeline.FeatureDict: + """Crops msa sequences to `msa_crop_size`.""" + msa_size = chain['num_alignments'] + + if pair_msa_sequences: + msa_size_all_seq = chain['num_alignments_all_seq'] + msa_crop_size_all_seq = np.minimum(msa_size_all_seq, msa_crop_size // 2) + + # We reduce the number of un-paired sequences, by the number of times a + # sequence from this chain's MSA is included in the paired MSA. This keeps + # the MSA size for each chain roughly constant. + msa_all_seq = chain['msa_all_seq'][:msa_crop_size_all_seq, :] + num_non_gapped_pairs = np.sum( + np.any(msa_all_seq != msa_pairing.MSA_GAP_IDX, axis=1)) + num_non_gapped_pairs = np.minimum(num_non_gapped_pairs, + msa_crop_size_all_seq) + + # Restrict the unpaired crop size so that paired+unpaired sequences do not + # exceed msa_seqs_per_chain for each chain. + max_msa_crop_size = np.maximum(msa_crop_size - num_non_gapped_pairs, 0) + msa_crop_size = np.minimum(msa_size, max_msa_crop_size) + else: + msa_crop_size = np.minimum(msa_size, msa_crop_size) + + include_templates = 'template_aatype' in chain and max_templates + if include_templates: + num_templates = chain['template_aatype'].shape[0] + templates_crop_size = np.minimum(num_templates, max_templates) + + for k in chain: + k_split = k.split('_all_seq')[0] + if k_split in msa_pairing.TEMPLATE_FEATURES: + chain[k] = chain[k][:templates_crop_size, :] + elif k_split in msa_pairing.MSA_FEATURES: + if '_all_seq' in k and pair_msa_sequences: + chain[k] = chain[k][:msa_crop_size_all_seq, :] + else: + chain[k] = chain[k][:msa_crop_size, :] + + chain['num_alignments'] = np.asarray(msa_crop_size, dtype=np.int32) + if include_templates: + chain['num_templates'] = np.asarray(templates_crop_size, dtype=np.int32) + if pair_msa_sequences: + chain['num_alignments_all_seq'] = np.asarray( + msa_crop_size_all_seq, dtype=np.int32) + return chain + + +def process_final(np_example: pipeline.FeatureDict) -> pipeline.FeatureDict: + """Final processing steps in data pipeline, after merging and pairing.""" + np_example = _correct_msa_restypes(np_example) + np_example = _make_seq_mask(np_example) + np_example = _make_msa_mask(np_example) + np_example = _filter_features(np_example) + return np_example + + +def _correct_msa_restypes(np_example): + """Correct MSA restype to have the same order as residue_constants.""" + new_order_list = residue_constants.MAP_HHBLITS_AATYPE_TO_OUR_AATYPE + np_example['msa'] = np.take(new_order_list, np_example['msa'], axis=0) + np_example['msa'] = np_example['msa'].astype(np.int32) + return np_example + + +def _make_seq_mask(np_example): + np_example['seq_mask'] = (np_example['entity_id'] > 0).astype(np.float32) + return np_example + + +def _make_msa_mask(np_example): + """Mask features are all ones, but will later be zero-padded.""" + + np_example['msa_mask'] = np.ones_like(np_example['msa'], dtype=np.float32) + + seq_mask = (np_example['entity_id'] > 0).astype(np.float32) + np_example['msa_mask'] *= seq_mask[None] + + return np_example + + +def _filter_features(np_example: pipeline.FeatureDict) -> pipeline.FeatureDict: + """Filters features of example to only those requested.""" + return {k: v for (k, v) in np_example.items() if k in REQUIRED_FEATURES} + + +def process_unmerged_features( + all_chain_features: MutableMapping[str, pipeline.FeatureDict]): + """Postprocessing stage for per-chain features before merging.""" + num_chains = len(all_chain_features) + for chain_features in all_chain_features.values(): + # Convert deletion matrices to float. + chain_features['deletion_matrix'] = np.asarray( + chain_features.pop('deletion_matrix_int'), dtype=np.float32) + if 'deletion_matrix_int_all_seq' in chain_features: + chain_features['deletion_matrix_all_seq'] = np.asarray( + chain_features.pop('deletion_matrix_int_all_seq'), dtype=np.float32) + + chain_features['deletion_mean'] = np.mean( + chain_features['deletion_matrix'], axis=0) + + # Add all_atom_mask and dummy all_atom_positions based on aatype. + all_atom_mask = residue_constants.STANDARD_ATOM_MASK[ + chain_features['aatype']] + chain_features['all_atom_mask'] = all_atom_mask + chain_features['all_atom_positions'] = np.zeros( + list(all_atom_mask.shape) + [3]) + + # Add assembly_num_chains. + chain_features['assembly_num_chains'] = np.asarray(num_chains) + + # Add entity_mask. + for chain_features in all_chain_features.values(): + chain_features['entity_mask'] = ( + chain_features['entity_id'] != 0).astype(np.int32) diff --git a/alphafold/data/mmcif_parsing.py b/alphafold/data/mmcif_parsing.py new file mode 100644 index 0000000000000000000000000000000000000000..74c3ad50dd45384abee78b0d6b3283c469bb519e --- /dev/null +++ b/alphafold/data/mmcif_parsing.py @@ -0,0 +1,387 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Parses the mmCIF file format.""" +import collections +import dataclasses +import functools +import io +from typing import Any, Mapping, Optional, Sequence, Tuple + +from absl import logging +from Bio import PDB +from Bio.Data import SCOPData + +# Type aliases: +ChainId = str +PdbHeader = Mapping[str, Any] +PdbStructure = PDB.Structure.Structure +SeqRes = str +MmCIFDict = Mapping[str, Sequence[str]] + + +@dataclasses.dataclass(frozen=True) +class Monomer: + id: str + num: int + + +# Note - mmCIF format provides no guarantees on the type of author-assigned +# sequence numbers. They need not be integers. +@dataclasses.dataclass(frozen=True) +class AtomSite: + residue_name: str + author_chain_id: str + mmcif_chain_id: str + author_seq_num: str + mmcif_seq_num: int + insertion_code: str + hetatm_atom: str + model_num: int + + +# Used to map SEQRES index to a residue in the structure. +@dataclasses.dataclass(frozen=True) +class ResiduePosition: + chain_id: str + residue_number: int + insertion_code: str + + +@dataclasses.dataclass(frozen=True) +class ResidueAtPosition: + position: Optional[ResiduePosition] + name: str + is_missing: bool + hetflag: str + + +@dataclasses.dataclass(frozen=True) +class MmcifObject: + """Representation of a parsed mmCIF file. + + Contains: + file_id: A meaningful name, e.g. a pdb_id. Should be unique amongst all + files being processed. + header: Biopython header. + structure: Biopython structure. + chain_to_seqres: Dict mapping chain_id to 1 letter amino acid sequence. E.g. + {'A': 'ABCDEFG'} + seqres_to_structure: Dict; for each chain_id contains a mapping between + SEQRES index and a ResidueAtPosition. e.g. {'A': {0: ResidueAtPosition, + 1: ResidueAtPosition, + ...}} + raw_string: The raw string used to construct the MmcifObject. + """ + file_id: str + header: PdbHeader + structure: PdbStructure + chain_to_seqres: Mapping[ChainId, SeqRes] + seqres_to_structure: Mapping[ChainId, Mapping[int, ResidueAtPosition]] + raw_string: Any + + +@dataclasses.dataclass(frozen=True) +class ParsingResult: + """Returned by the parse function. + + Contains: + mmcif_object: A MmcifObject, may be None if no chain could be successfully + parsed. + errors: A dict mapping (file_id, chain_id) to any exception generated. + """ + mmcif_object: Optional[MmcifObject] + errors: Mapping[Tuple[str, str], Any] + + +class ParseError(Exception): + """An error indicating that an mmCIF file could not be parsed.""" + + +def mmcif_loop_to_list(prefix: str, + parsed_info: MmCIFDict) -> Sequence[Mapping[str, str]]: + """Extracts loop associated with a prefix from mmCIF data as a list. + + Reference for loop_ in mmCIF: + http://mmcif.wwpdb.org/docs/tutorials/mechanics/pdbx-mmcif-syntax.html + + Args: + prefix: Prefix shared by each of the data items in the loop. + e.g. '_entity_poly_seq.', where the data items are _entity_poly_seq.num, + _entity_poly_seq.mon_id. Should include the trailing period. + parsed_info: A dict of parsed mmCIF data, e.g. _mmcif_dict from a Biopython + parser. + + Returns: + Returns a list of dicts; each dict represents 1 entry from an mmCIF loop. + """ + cols = [] + data = [] + for key, value in parsed_info.items(): + if key.startswith(prefix): + cols.append(key) + data.append(value) + + assert all([len(xs) == len(data[0]) for xs in data]), ( + 'mmCIF error: Not all loops are the same length: %s' % cols) + + return [dict(zip(cols, xs)) for xs in zip(*data)] + + +def mmcif_loop_to_dict(prefix: str, + index: str, + parsed_info: MmCIFDict, + ) -> Mapping[str, Mapping[str, str]]: + """Extracts loop associated with a prefix from mmCIF data as a dictionary. + + Args: + prefix: Prefix shared by each of the data items in the loop. + e.g. '_entity_poly_seq.', where the data items are _entity_poly_seq.num, + _entity_poly_seq.mon_id. Should include the trailing period. + index: Which item of loop data should serve as the key. + parsed_info: A dict of parsed mmCIF data, e.g. _mmcif_dict from a Biopython + parser. + + Returns: + Returns a dict of dicts; each dict represents 1 entry from an mmCIF loop, + indexed by the index column. + """ + entries = mmcif_loop_to_list(prefix, parsed_info) + return {entry[index]: entry for entry in entries} + + +@functools.lru_cache(16, typed=False) +def parse(*, + file_id: str, + mmcif_string: str, + catch_all_errors: bool = True) -> ParsingResult: + """Entry point, parses an mmcif_string. + + Args: + file_id: A string identifier for this file. Should be unique within the + collection of files being processed. + mmcif_string: Contents of an mmCIF file. + catch_all_errors: If True, all exceptions are caught and error messages are + returned as part of the ParsingResult. If False exceptions will be allowed + to propagate. + + Returns: + A ParsingResult. + """ + errors = {} + try: + parser = PDB.MMCIFParser(QUIET=True) + handle = io.StringIO(mmcif_string) + full_structure = parser.get_structure('', handle) + first_model_structure = _get_first_model(full_structure) + # Extract the _mmcif_dict from the parser, which contains useful fields not + # reflected in the Biopython structure. + parsed_info = parser._mmcif_dict # pylint:disable=protected-access + + # Ensure all values are lists, even if singletons. + for key, value in parsed_info.items(): + if not isinstance(value, list): + parsed_info[key] = [value] + + header = _get_header(parsed_info) + + # Determine the protein chains, and their start numbers according to the + # internal mmCIF numbering scheme (likely but not guaranteed to be 1). + valid_chains = _get_protein_chains(parsed_info=parsed_info) + if not valid_chains: + return ParsingResult( + None, {(file_id, ''): 'No protein chains found in this file.'}) + seq_start_num = {chain_id: min([monomer.num for monomer in seq]) + for chain_id, seq in valid_chains.items()} + + # Loop over the atoms for which we have coordinates. Populate two mappings: + # -mmcif_to_author_chain_id (maps internal mmCIF chain ids to chain ids used + # the authors / Biopython). + # -seq_to_structure_mappings (maps idx into sequence to ResidueAtPosition). + mmcif_to_author_chain_id = {} + seq_to_structure_mappings = {} + for atom in _get_atom_site_list(parsed_info): + if atom.model_num != '1': + # We only process the first model at the moment. + continue + + mmcif_to_author_chain_id[atom.mmcif_chain_id] = atom.author_chain_id + + if atom.mmcif_chain_id in valid_chains: + hetflag = ' ' + if atom.hetatm_atom == 'HETATM': + # Water atoms are assigned a special hetflag of W in Biopython. We + # need to do the same, so that this hetflag can be used to fetch + # a residue from the Biopython structure by id. + if atom.residue_name in ('HOH', 'WAT'): + hetflag = 'W' + else: + hetflag = 'H_' + atom.residue_name + insertion_code = atom.insertion_code + if not _is_set(atom.insertion_code): + insertion_code = ' ' + position = ResiduePosition(chain_id=atom.author_chain_id, + residue_number=int(atom.author_seq_num), + insertion_code=insertion_code) + seq_idx = int(atom.mmcif_seq_num) - seq_start_num[atom.mmcif_chain_id] + current = seq_to_structure_mappings.get(atom.author_chain_id, {}) + current[seq_idx] = ResidueAtPosition(position=position, + name=atom.residue_name, + is_missing=False, + hetflag=hetflag) + seq_to_structure_mappings[atom.author_chain_id] = current + + # Add missing residue information to seq_to_structure_mappings. + for chain_id, seq_info in valid_chains.items(): + author_chain = mmcif_to_author_chain_id[chain_id] + current_mapping = seq_to_structure_mappings[author_chain] + for idx, monomer in enumerate(seq_info): + if idx not in current_mapping: + current_mapping[idx] = ResidueAtPosition(position=None, + name=monomer.id, + is_missing=True, + hetflag=' ') + + author_chain_to_sequence = {} + for chain_id, seq_info in valid_chains.items(): + author_chain = mmcif_to_author_chain_id[chain_id] + seq = [] + for monomer in seq_info: + code = SCOPData.protein_letters_3to1.get(monomer.id, 'X') + seq.append(code if len(code) == 1 else 'X') + seq = ''.join(seq) + author_chain_to_sequence[author_chain] = seq + + mmcif_object = MmcifObject( + file_id=file_id, + header=header, + structure=first_model_structure, + chain_to_seqres=author_chain_to_sequence, + seqres_to_structure=seq_to_structure_mappings, + raw_string=parsed_info) + + return ParsingResult(mmcif_object=mmcif_object, errors=errors) + except Exception as e: # pylint:disable=broad-except + errors[(file_id, '')] = e + if not catch_all_errors: + raise + return ParsingResult(mmcif_object=None, errors=errors) + + +def _get_first_model(structure: PdbStructure) -> PdbStructure: + """Returns the first model in a Biopython structure.""" + return next(structure.get_models()) + +_MIN_LENGTH_OF_CHAIN_TO_BE_COUNTED_AS_PEPTIDE = 21 + + +def get_release_date(parsed_info: MmCIFDict) -> str: + """Returns the oldest revision date.""" + revision_dates = parsed_info['_pdbx_audit_revision_history.revision_date'] + return min(revision_dates) + + +def _get_header(parsed_info: MmCIFDict) -> PdbHeader: + """Returns a basic header containing method, release date and resolution.""" + header = {} + + experiments = mmcif_loop_to_list('_exptl.', parsed_info) + header['structure_method'] = ','.join([ + experiment['_exptl.method'].lower() for experiment in experiments]) + + # Note: The release_date here corresponds to the oldest revision. We prefer to + # use this for dataset filtering over the deposition_date. + if '_pdbx_audit_revision_history.revision_date' in parsed_info: + header['release_date'] = get_release_date(parsed_info) + else: + logging.warning('Could not determine release_date: %s', + parsed_info['_entry.id']) + + header['resolution'] = 0.00 + for res_key in ('_refine.ls_d_res_high', '_em_3d_reconstruction.resolution', + '_reflns.d_resolution_high'): + if res_key in parsed_info: + try: + raw_resolution = parsed_info[res_key][0] + header['resolution'] = float(raw_resolution) + break + except ValueError: + logging.debug('Invalid resolution format: %s', parsed_info[res_key]) + + return header + + +def _get_atom_site_list(parsed_info: MmCIFDict) -> Sequence[AtomSite]: + """Returns list of atom sites; contains data not present in the structure.""" + return [AtomSite(*site) for site in zip( # pylint:disable=g-complex-comprehension + parsed_info['_atom_site.label_comp_id'], + parsed_info['_atom_site.auth_asym_id'], + parsed_info['_atom_site.label_asym_id'], + parsed_info['_atom_site.auth_seq_id'], + parsed_info['_atom_site.label_seq_id'], + parsed_info['_atom_site.pdbx_PDB_ins_code'], + parsed_info['_atom_site.group_PDB'], + parsed_info['_atom_site.pdbx_PDB_model_num'], + )] + + +def _get_protein_chains( + *, parsed_info: Mapping[str, Any]) -> Mapping[ChainId, Sequence[Monomer]]: + """Extracts polymer information for protein chains only. + + Args: + parsed_info: _mmcif_dict produced by the Biopython parser. + + Returns: + A dict mapping mmcif chain id to a list of Monomers. + """ + # Get polymer information for each entity in the structure. + entity_poly_seqs = mmcif_loop_to_list('_entity_poly_seq.', parsed_info) + + polymers = collections.defaultdict(list) + for entity_poly_seq in entity_poly_seqs: + polymers[entity_poly_seq['_entity_poly_seq.entity_id']].append( + Monomer(id=entity_poly_seq['_entity_poly_seq.mon_id'], + num=int(entity_poly_seq['_entity_poly_seq.num']))) + + # Get chemical compositions. Will allow us to identify which of these polymers + # are proteins. + chem_comps = mmcif_loop_to_dict('_chem_comp.', '_chem_comp.id', parsed_info) + + # Get chains information for each entity. Necessary so that we can return a + # dict keyed on chain id rather than entity. + struct_asyms = mmcif_loop_to_list('_struct_asym.', parsed_info) + + entity_to_mmcif_chains = collections.defaultdict(list) + for struct_asym in struct_asyms: + chain_id = struct_asym['_struct_asym.id'] + entity_id = struct_asym['_struct_asym.entity_id'] + entity_to_mmcif_chains[entity_id].append(chain_id) + + # Identify and return the valid protein chains. + valid_chains = {} + for entity_id, seq_info in polymers.items(): + chain_ids = entity_to_mmcif_chains[entity_id] + + # Reject polymers without any peptide-like components, such as DNA/RNA. + if any(['peptide' in chem_comps[monomer.id]['_chem_comp.type'].lower() + for monomer in seq_info]): + for chain_id in chain_ids: + valid_chains[chain_id] = seq_info + return valid_chains + + +def _is_set(data: str) -> bool: + """Returns False if data is a special mmCIF character indicating 'unset'.""" + return data not in ('.', '?') diff --git a/alphafold/data/msa_identifiers.py b/alphafold/data/msa_identifiers.py new file mode 100644 index 0000000000000000000000000000000000000000..def169f67ba496f3ee13aff57915f0271a4f2a1f --- /dev/null +++ b/alphafold/data/msa_identifiers.py @@ -0,0 +1,90 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Utilities for extracting identifiers from MSA sequence descriptions.""" + +import dataclasses +import re +from typing import Optional + + +# Sequences coming from UniProtKB database come in the +# `db|UniqueIdentifier|EntryName` format, e.g. `tr|A0A146SKV9|A0A146SKV9_FUNHE` +# or `sp|P0C2L1|A3X1_LOXLA` (for TREMBL/Swiss-Prot respectively). +_UNIPROT_PATTERN = re.compile( + r""" + ^ + # UniProtKB/TrEMBL or UniProtKB/Swiss-Prot + (?:tr|sp) + \| + # A primary accession number of the UniProtKB entry. + (?P<AccessionIdentifier>[A-Za-z0-9]{6,10}) + # Occasionally there is a _0 or _1 isoform suffix, which we ignore. + (?:_\d)? + \| + # TREMBL repeats the accession ID here. Swiss-Prot has a mnemonic + # protein ID code. + (?:[A-Za-z0-9]+) + _ + # A mnemonic species identification code. + (?P<SpeciesIdentifier>([A-Za-z0-9]){1,5}) + # Small BFD uses a final value after an underscore, which we ignore. + (?:_\d+)? + $ + """, + re.VERBOSE) + + +@dataclasses.dataclass(frozen=True) +class Identifiers: + species_id: str = '' + + +def _parse_sequence_identifier(msa_sequence_identifier: str) -> Identifiers: + """Gets species from an msa sequence identifier. + + The sequence identifier has the format specified by + _UNIPROT_TREMBL_ENTRY_NAME_PATTERN or _UNIPROT_SWISSPROT_ENTRY_NAME_PATTERN. + An example of a sequence identifier: `tr|A0A146SKV9|A0A146SKV9_FUNHE` + + Args: + msa_sequence_identifier: a sequence identifier. + + Returns: + An `Identifiers` instance with species_id. These + can be empty in the case where no identifier was found. + """ + matches = re.search(_UNIPROT_PATTERN, msa_sequence_identifier.strip()) + if matches: + return Identifiers( + species_id=matches.group('SpeciesIdentifier')) + return Identifiers() + + +def _extract_sequence_identifier(description: str) -> Optional[str]: + """Extracts sequence identifier from description. Returns None if no match.""" + split_description = description.split() + if split_description: + return split_description[0].partition('/')[0] + else: + return None + + +def get_identifiers(description: str) -> Identifiers: + """Computes extra MSA features from the description.""" + sequence_identifier = _extract_sequence_identifier(description) + if sequence_identifier is None: + return Identifiers() + else: + return _parse_sequence_identifier(sequence_identifier) diff --git a/alphafold/data/msa_pairing.py b/alphafold/data/msa_pairing.py new file mode 100644 index 0000000000000000000000000000000000000000..bfe12051652c0fb62c019dfc594b6fcb7bafb6be --- /dev/null +++ b/alphafold/data/msa_pairing.py @@ -0,0 +1,459 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Pairing logic for multimer data pipeline.""" + +import collections +from typing import cast, Dict, Iterable, List, Sequence + +from alphafold.common import residue_constants +from alphafold.data import pipeline +import numpy as np +import pandas as pd +import scipy.linalg + +MSA_GAP_IDX = residue_constants.restypes_with_x_and_gap.index('-') +SEQUENCE_GAP_CUTOFF = 0.5 +SEQUENCE_SIMILARITY_CUTOFF = 0.9 + +MSA_PAD_VALUES = {'msa_all_seq': MSA_GAP_IDX, + 'msa_mask_all_seq': 1, + 'deletion_matrix_all_seq': 0, + 'deletion_matrix_int_all_seq': 0, + 'msa': MSA_GAP_IDX, + 'msa_mask': 1, + 'deletion_matrix': 0, + 'deletion_matrix_int': 0} + +MSA_FEATURES = ('msa', 'msa_mask', 'deletion_matrix', 'deletion_matrix_int') +SEQ_FEATURES = ('residue_index', 'aatype', 'all_atom_positions', + 'all_atom_mask', 'seq_mask', 'between_segment_residues', + 'has_alt_locations', 'has_hetatoms', 'asym_id', 'entity_id', + 'sym_id', 'entity_mask', 'deletion_mean', + 'prediction_atom_mask', + 'literature_positions', 'atom_indices_to_group_indices', + 'rigid_group_default_frame') +TEMPLATE_FEATURES = ('template_aatype', 'template_all_atom_positions', + 'template_all_atom_mask') +CHAIN_FEATURES = ('num_alignments', 'seq_length') + + +def create_paired_features( + chains: Iterable[pipeline.FeatureDict]) -> List[pipeline.FeatureDict]: + """Returns the original chains with paired NUM_SEQ features. + + Args: + chains: A list of feature dictionaries for each chain. + + Returns: + A list of feature dictionaries with sequence features including only + rows to be paired. + """ + chains = list(chains) + chain_keys = chains[0].keys() + + if len(chains) < 2: + return chains + else: + updated_chains = [] + paired_chains_to_paired_row_indices = pair_sequences(chains) + paired_rows = reorder_paired_rows( + paired_chains_to_paired_row_indices) + + for chain_num, chain in enumerate(chains): + new_chain = {k: v for k, v in chain.items() if '_all_seq' not in k} + for feature_name in chain_keys: + if feature_name.endswith('_all_seq'): + feats_padded = pad_features(chain[feature_name], feature_name) + new_chain[feature_name] = feats_padded[paired_rows[:, chain_num]] + new_chain['num_alignments_all_seq'] = np.asarray( + len(paired_rows[:, chain_num])) + updated_chains.append(new_chain) + return updated_chains + + +def pad_features(feature: np.ndarray, feature_name: str) -> np.ndarray: + """Add a 'padding' row at the end of the features list. + + The padding row will be selected as a 'paired' row in the case of partial + alignment - for the chain that doesn't have paired alignment. + + Args: + feature: The feature to be padded. + feature_name: The name of the feature to be padded. + + Returns: + The feature with an additional padding row. + """ + assert feature.dtype != np.dtype(np.string_) + if feature_name in ('msa_all_seq', 'msa_mask_all_seq', + 'deletion_matrix_all_seq', 'deletion_matrix_int_all_seq'): + num_res = feature.shape[1] + padding = MSA_PAD_VALUES[feature_name] * np.ones([1, num_res], + feature.dtype) + elif feature_name == 'msa_species_identifiers_all_seq': + padding = [b''] + else: + return feature + feats_padded = np.concatenate([feature, padding], axis=0) + return feats_padded + + +def _make_msa_df(chain_features: pipeline.FeatureDict) -> pd.DataFrame: + """Makes dataframe with msa features needed for msa pairing.""" + chain_msa = chain_features['msa_all_seq'] + query_seq = chain_msa[0] + per_seq_similarity = np.sum( + query_seq[None] == chain_msa, axis=-1) / float(len(query_seq)) + per_seq_gap = np.sum(chain_msa == 21, axis=-1) / float(len(query_seq)) + msa_df = pd.DataFrame({ + 'msa_species_identifiers': + chain_features['msa_species_identifiers_all_seq'], + 'msa_row': + np.arange(len( + chain_features['msa_species_identifiers_all_seq'])), + 'msa_similarity': per_seq_similarity, + 'gap': per_seq_gap + }) + return msa_df + + +def _create_species_dict(msa_df: pd.DataFrame) -> Dict[bytes, pd.DataFrame]: + """Creates mapping from species to msa dataframe of that species.""" + species_lookup = {} + for species, species_df in msa_df.groupby('msa_species_identifiers'): + species_lookup[cast(bytes, species)] = species_df + return species_lookup + + +def _match_rows_by_sequence_similarity(this_species_msa_dfs: List[pd.DataFrame] + ) -> List[List[int]]: + """Finds MSA sequence pairings across chains based on sequence similarity. + + Each chain's MSA sequences are first sorted by their sequence similarity to + their respective target sequence. The sequences are then paired, starting + from the sequences most similar to their target sequence. + + Args: + this_species_msa_dfs: a list of dataframes containing MSA features for + sequences for a specific species. + + Returns: + A list of lists, each containing M indices corresponding to paired MSA rows, + where M is the number of chains. + """ + all_paired_msa_rows = [] + + num_seqs = [len(species_df) for species_df in this_species_msa_dfs + if species_df is not None] + take_num_seqs = np.min(num_seqs) + + sort_by_similarity = ( + lambda x: x.sort_values('msa_similarity', axis=0, ascending=False)) + + for species_df in this_species_msa_dfs: + if species_df is not None: + species_df_sorted = sort_by_similarity(species_df) + msa_rows = species_df_sorted.msa_row.iloc[:take_num_seqs].values + else: + msa_rows = [-1] * take_num_seqs # take the last 'padding' row + all_paired_msa_rows.append(msa_rows) + all_paired_msa_rows = list(np.array(all_paired_msa_rows).transpose()) + return all_paired_msa_rows + + +def pair_sequences(examples: List[pipeline.FeatureDict] + ) -> Dict[int, np.ndarray]: + """Returns indices for paired MSA sequences across chains.""" + + num_examples = len(examples) + + all_chain_species_dict = [] + common_species = set() + for chain_features in examples: + msa_df = _make_msa_df(chain_features) + species_dict = _create_species_dict(msa_df) + all_chain_species_dict.append(species_dict) + common_species.update(set(species_dict)) + + common_species = sorted(common_species) + common_species.remove(b'') # Remove target sequence species. + + all_paired_msa_rows = [np.zeros(len(examples), int)] + all_paired_msa_rows_dict = {k: [] for k in range(num_examples)} + all_paired_msa_rows_dict[num_examples] = [np.zeros(len(examples), int)] + + for species in common_species: + if not species: + continue + this_species_msa_dfs = [] + species_dfs_present = 0 + for species_dict in all_chain_species_dict: + if species in species_dict: + this_species_msa_dfs.append(species_dict[species]) + species_dfs_present += 1 + else: + this_species_msa_dfs.append(None) + + # Skip species that are present in only one chain. + if species_dfs_present <= 1: + continue + + if np.any( + np.array([len(species_df) for species_df in + this_species_msa_dfs if + isinstance(species_df, pd.DataFrame)]) > 600): + continue + + paired_msa_rows = _match_rows_by_sequence_similarity(this_species_msa_dfs) + all_paired_msa_rows.extend(paired_msa_rows) + all_paired_msa_rows_dict[species_dfs_present].extend(paired_msa_rows) + all_paired_msa_rows_dict = { + num_examples: np.array(paired_msa_rows) for + num_examples, paired_msa_rows in all_paired_msa_rows_dict.items() + } + return all_paired_msa_rows_dict + + +def reorder_paired_rows(all_paired_msa_rows_dict: Dict[int, np.ndarray] + ) -> np.ndarray: + """Creates a list of indices of paired MSA rows across chains. + + Args: + all_paired_msa_rows_dict: a mapping from the number of paired chains to the + paired indices. + + Returns: + a list of lists, each containing indices of paired MSA rows across chains. + The paired-index lists are ordered by: + 1) the number of chains in the paired alignment, i.e, all-chain pairings + will come first. + 2) e-values + """ + all_paired_msa_rows = [] + + for num_pairings in sorted(all_paired_msa_rows_dict, reverse=True): + paired_rows = all_paired_msa_rows_dict[num_pairings] + paired_rows_product = abs(np.array([np.prod(rows) for rows in paired_rows])) + paired_rows_sort_index = np.argsort(paired_rows_product) + all_paired_msa_rows.extend(paired_rows[paired_rows_sort_index]) + + return np.array(all_paired_msa_rows) + + +def block_diag(*arrs: np.ndarray, pad_value: float = 0.0) -> np.ndarray: + """Like scipy.linalg.block_diag but with an optional padding value.""" + ones_arrs = [np.ones_like(x) for x in arrs] + off_diag_mask = 1.0 - scipy.linalg.block_diag(*ones_arrs) + diag = scipy.linalg.block_diag(*arrs) + diag += (off_diag_mask * pad_value).astype(diag.dtype) + return diag + + +def _correct_post_merged_feats( + np_example: pipeline.FeatureDict, + np_chains_list: Sequence[pipeline.FeatureDict], + pair_msa_sequences: bool) -> pipeline.FeatureDict: + """Adds features that need to be computed/recomputed post merging.""" + + np_example['seq_length'] = np.asarray(np_example['aatype'].shape[0], + dtype=np.int32) + np_example['num_alignments'] = np.asarray(np_example['msa'].shape[0], + dtype=np.int32) + + if not pair_msa_sequences: + # Generate a bias that is 1 for the first row of every block in the + # block diagonal MSA - i.e. make sure the cluster stack always includes + # the query sequences for each chain (since the first row is the query + # sequence). + cluster_bias_masks = [] + for chain in np_chains_list: + mask = np.zeros(chain['msa'].shape[0]) + mask[0] = 1 + cluster_bias_masks.append(mask) + np_example['cluster_bias_mask'] = np.concatenate(cluster_bias_masks) + + # Initialize Bert mask with masked out off diagonals. + msa_masks = [np.ones(x['msa'].shape, dtype=np.float32) + for x in np_chains_list] + + np_example['bert_mask'] = block_diag( + *msa_masks, pad_value=0) + else: + np_example['cluster_bias_mask'] = np.zeros(np_example['msa'].shape[0]) + np_example['cluster_bias_mask'][0] = 1 + + # Initialize Bert mask with masked out off diagonals. + msa_masks = [np.ones(x['msa'].shape, dtype=np.float32) for + x in np_chains_list] + msa_masks_all_seq = [np.ones(x['msa_all_seq'].shape, dtype=np.float32) for + x in np_chains_list] + + msa_mask_block_diag = block_diag( + *msa_masks, pad_value=0) + msa_mask_all_seq = np.concatenate(msa_masks_all_seq, axis=1) + np_example['bert_mask'] = np.concatenate( + [msa_mask_all_seq, msa_mask_block_diag], axis=0) + return np_example + + +def _pad_templates(chains: Sequence[pipeline.FeatureDict], + max_templates: int) -> Sequence[pipeline.FeatureDict]: + """For each chain pad the number of templates to a fixed size. + + Args: + chains: A list of protein chains. + max_templates: Each chain will be padded to have this many templates. + + Returns: + The list of chains, updated to have template features padded to + max_templates. + """ + for chain in chains: + for k, v in chain.items(): + if k in TEMPLATE_FEATURES: + padding = np.zeros_like(v.shape) + padding[0] = max_templates - v.shape[0] + padding = [(0, p) for p in padding] + chain[k] = np.pad(v, padding, mode='constant') + return chains + + +def _merge_features_from_multiple_chains( + chains: Sequence[pipeline.FeatureDict], + pair_msa_sequences: bool) -> pipeline.FeatureDict: + """Merge features from multiple chains. + + Args: + chains: A list of feature dictionaries that we want to merge. + pair_msa_sequences: Whether to concatenate MSA features along the + num_res dimension (if True), or to block diagonalize them (if False). + + Returns: + A feature dictionary for the merged example. + """ + merged_example = {} + for feature_name in chains[0]: + feats = [x[feature_name] for x in chains] + feature_name_split = feature_name.split('_all_seq')[0] + if feature_name_split in MSA_FEATURES: + if pair_msa_sequences or '_all_seq' in feature_name: + merged_example[feature_name] = np.concatenate(feats, axis=1) + else: + merged_example[feature_name] = block_diag( + *feats, pad_value=MSA_PAD_VALUES[feature_name]) + elif feature_name_split in SEQ_FEATURES: + merged_example[feature_name] = np.concatenate(feats, axis=0) + elif feature_name_split in TEMPLATE_FEATURES: + merged_example[feature_name] = np.concatenate(feats, axis=1) + elif feature_name_split in CHAIN_FEATURES: + merged_example[feature_name] = np.sum(x for x in feats).astype(np.int32) + else: + merged_example[feature_name] = feats[0] + return merged_example + + +def _merge_homomers_dense_msa( + chains: Iterable[pipeline.FeatureDict]) -> Sequence[pipeline.FeatureDict]: + """Merge all identical chains, making the resulting MSA dense. + + Args: + chains: An iterable of features for each chain. + + Returns: + A list of feature dictionaries. All features with the same entity_id + will be merged - MSA features will be concatenated along the num_res + dimension - making them dense. + """ + entity_chains = collections.defaultdict(list) + for chain in chains: + entity_id = chain['entity_id'][0] + entity_chains[entity_id].append(chain) + + grouped_chains = [] + for entity_id in sorted(entity_chains): + chains = entity_chains[entity_id] + grouped_chains.append(chains) + chains = [ + _merge_features_from_multiple_chains(chains, pair_msa_sequences=True) + for chains in grouped_chains] + return chains + + +def _concatenate_paired_and_unpaired_features( + example: pipeline.FeatureDict) -> pipeline.FeatureDict: + """Merges paired and block-diagonalised features.""" + features = MSA_FEATURES + for feature_name in features: + if feature_name in example: + feat = example[feature_name] + feat_all_seq = example[feature_name + '_all_seq'] + merged_feat = np.concatenate([feat_all_seq, feat], axis=0) + example[feature_name] = merged_feat + example['num_alignments'] = np.array(example['msa'].shape[0], + dtype=np.int32) + return example + + +def merge_chain_features(np_chains_list: List[pipeline.FeatureDict], + pair_msa_sequences: bool, + max_templates: int) -> pipeline.FeatureDict: + """Merges features for multiple chains to single FeatureDict. + + Args: + np_chains_list: List of FeatureDicts for each chain. + pair_msa_sequences: Whether to merge paired MSAs. + max_templates: The maximum number of templates to include. + + Returns: + Single FeatureDict for entire complex. + """ + np_chains_list = _pad_templates( + np_chains_list, max_templates=max_templates) + np_chains_list = _merge_homomers_dense_msa(np_chains_list) + # Unpaired MSA features will be always block-diagonalised; paired MSA + # features will be concatenated. + np_example = _merge_features_from_multiple_chains( + np_chains_list, pair_msa_sequences=False) + if pair_msa_sequences: + np_example = _concatenate_paired_and_unpaired_features(np_example) + np_example = _correct_post_merged_feats( + np_example=np_example, + np_chains_list=np_chains_list, + pair_msa_sequences=pair_msa_sequences) + + return np_example + + +def deduplicate_unpaired_sequences( + np_chains: List[pipeline.FeatureDict]) -> List[pipeline.FeatureDict]: + """Removes unpaired sequences which duplicate a paired sequence.""" + + feature_names = np_chains[0].keys() + msa_features = MSA_FEATURES + + for chain in np_chains: + # Convert the msa_all_seq numpy array to a tuple for hashing. + sequence_set = set(tuple(s) for s in chain['msa_all_seq']) + keep_rows = [] + # Go through unpaired MSA seqs and remove any rows that correspond to the + # sequences that are already present in the paired MSA. + for row_num, seq in enumerate(chain['msa']): + if tuple(seq) not in sequence_set: + keep_rows.append(row_num) + for feature_name in feature_names: + if feature_name in msa_features: + chain[feature_name] = chain[feature_name][keep_rows] + chain['num_alignments'] = np.array(chain['msa'].shape[0], dtype=np.int32) + return np_chains diff --git a/alphafold/data/parsers.py b/alphafold/data/parsers.py new file mode 100644 index 0000000000000000000000000000000000000000..0d865fab8c91f575e2c45c986170a0b65197534c --- /dev/null +++ b/alphafold/data/parsers.py @@ -0,0 +1,613 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Functions for parsing various file formats.""" +import collections +import dataclasses +import itertools +import re +import string +from typing import Dict, Iterable, List, Optional, Sequence, Tuple, Set + +# Internal import (7716). + + +DeletionMatrix = Sequence[Sequence[int]] + + +@dataclasses.dataclass(frozen=True) +class Msa: + """Class representing a parsed MSA file.""" + sequences: Sequence[str] + deletion_matrix: DeletionMatrix + descriptions: Sequence[str] + + def __post_init__(self): + if not (len(self.sequences) == + len(self.deletion_matrix) == + len(self.descriptions)): + raise ValueError( + 'All fields for an MSA must have the same length. ' + f'Got {len(self.sequences)} sequences, ' + f'{len(self.deletion_matrix)} rows in the deletion matrix and ' + f'{len(self.descriptions)} descriptions.') + + def __len__(self): + return len(self.sequences) + + def truncate(self, max_seqs: int): + return Msa(sequences=self.sequences[:max_seqs], + deletion_matrix=self.deletion_matrix[:max_seqs], + descriptions=self.descriptions[:max_seqs]) + + +@dataclasses.dataclass(frozen=True) +class TemplateHit: + """Class representing a template hit.""" + index: int + name: str + aligned_cols: int + sum_probs: Optional[float] + query: str + hit_sequence: str + indices_query: List[int] + indices_hit: List[int] + + +def parse_fasta(fasta_string: str) -> Tuple[Sequence[str], Sequence[str]]: + """Parses FASTA string and returns list of strings with amino-acid sequences. + + Arguments: + fasta_string: The string contents of a FASTA file. + + Returns: + A tuple of two lists: + * A list of sequences. + * A list of sequence descriptions taken from the comment lines. In the + same order as the sequences. + """ + sequences = [] + descriptions = [] + index = -1 + for line in fasta_string.splitlines(): + line = line.strip() + if line.startswith('>'): + index += 1 + descriptions.append(line[1:]) # Remove the '>' at the beginning. + sequences.append('') + continue + elif not line: + continue # Skip blank lines. + sequences[index] += line + + return sequences, descriptions + + +def parse_stockholm(stockholm_string: str) -> Msa: + """Parses sequences and deletion matrix from stockholm format alignment. + + Args: + stockholm_string: The string contents of a stockholm file. The first + sequence in the file should be the query sequence. + + Returns: + A tuple of: + * A list of sequences that have been aligned to the query. These + might contain duplicates. + * The deletion matrix for the alignment as a list of lists. The element + at `deletion_matrix[i][j]` is the number of residues deleted from + the aligned sequence i at residue position j. + * The names of the targets matched, including the jackhmmer subsequence + suffix. + """ + name_to_sequence = collections.OrderedDict() + for line in stockholm_string.splitlines(): + line = line.strip() + if not line or line.startswith(('#', '//')): + continue + name, sequence = line.split() + if name not in name_to_sequence: + name_to_sequence[name] = '' + name_to_sequence[name] += sequence + + msa = [] + deletion_matrix = [] + + query = '' + keep_columns = [] + for seq_index, sequence in enumerate(name_to_sequence.values()): + if seq_index == 0: + # Gather the columns with gaps from the query + query = sequence + keep_columns = [i for i, res in enumerate(query) if res != '-'] + + # Remove the columns with gaps in the query from all sequences. + aligned_sequence = ''.join([sequence[c] for c in keep_columns]) + + msa.append(aligned_sequence) + + # Count the number of deletions w.r.t. query. + deletion_vec = [] + deletion_count = 0 + for seq_res, query_res in zip(sequence, query): + if seq_res != '-' or query_res != '-': + if query_res == '-': + deletion_count += 1 + else: + deletion_vec.append(deletion_count) + deletion_count = 0 + deletion_matrix.append(deletion_vec) + + return Msa(sequences=msa, + deletion_matrix=deletion_matrix, + descriptions=list(name_to_sequence.keys())) + + +def parse_a3m(a3m_string: str) -> Msa: + """Parses sequences and deletion matrix from a3m format alignment. + + Args: + a3m_string: The string contents of a a3m file. The first sequence in the + file should be the query sequence. + + Returns: + A tuple of: + * A list of sequences that have been aligned to the query. These + might contain duplicates. + * The deletion matrix for the alignment as a list of lists. The element + at `deletion_matrix[i][j]` is the number of residues deleted from + the aligned sequence i at residue position j. + * A list of descriptions, one per sequence, from the a3m file. + """ + sequences, descriptions = parse_fasta(a3m_string) + deletion_matrix = [] + for msa_sequence in sequences: + deletion_vec = [] + deletion_count = 0 + for j in msa_sequence: + if j.islower(): + deletion_count += 1 + else: + deletion_vec.append(deletion_count) + deletion_count = 0 + deletion_matrix.append(deletion_vec) + + # Make the MSA matrix out of aligned (deletion-free) sequences. + deletion_table = str.maketrans('', '', string.ascii_lowercase) + aligned_sequences = [s.translate(deletion_table) for s in sequences] + return Msa(sequences=aligned_sequences, + deletion_matrix=deletion_matrix, + descriptions=descriptions) + + +def _convert_sto_seq_to_a3m( + query_non_gaps: Sequence[bool], sto_seq: str) -> Iterable[str]: + for is_query_res_non_gap, sequence_res in zip(query_non_gaps, sto_seq): + if is_query_res_non_gap: + yield sequence_res + elif sequence_res != '-': + yield sequence_res.lower() + + +def convert_stockholm_to_a3m(stockholm_format: str, + max_sequences: Optional[int] = None, + remove_first_row_gaps: bool = True) -> str: + """Converts MSA in Stockholm format to the A3M format.""" + descriptions = {} + sequences = {} + reached_max_sequences = False + + for line in stockholm_format.splitlines(): + reached_max_sequences = max_sequences and len(sequences) >= max_sequences + if line.strip() and not line.startswith(('#', '//')): + # Ignore blank lines, markup and end symbols - remainder are alignment + # sequence parts. + seqname, aligned_seq = line.split(maxsplit=1) + if seqname not in sequences: + if reached_max_sequences: + continue + sequences[seqname] = '' + sequences[seqname] += aligned_seq + + for line in stockholm_format.splitlines(): + if line[:4] == '#=GS': + # Description row - example format is: + # #=GS UniRef90_Q9H5Z4/4-78 DE [subseq from] cDNA: FLJ22755 ... + columns = line.split(maxsplit=3) + seqname, feature = columns[1:3] + value = columns[3] if len(columns) == 4 else '' + if feature != 'DE': + continue + if reached_max_sequences and seqname not in sequences: + continue + descriptions[seqname] = value + if len(descriptions) == len(sequences): + break + + # Convert sto format to a3m line by line + a3m_sequences = {} + if remove_first_row_gaps: + # query_sequence is assumed to be the first sequence + query_sequence = next(iter(sequences.values())) + query_non_gaps = [res != '-' for res in query_sequence] + for seqname, sto_sequence in sequences.items(): + # Dots are optional in a3m format and are commonly removed. + out_sequence = sto_sequence.replace('.', '') + if remove_first_row_gaps: + out_sequence = ''.join( + _convert_sto_seq_to_a3m(query_non_gaps, out_sequence)) + a3m_sequences[seqname] = out_sequence + + fasta_chunks = (f">{k} {descriptions.get(k, '')}\n{a3m_sequences[k]}" + for k in a3m_sequences) + return '\n'.join(fasta_chunks) + '\n' # Include terminating newline. + + +def _keep_line(line: str, seqnames: Set[str]) -> bool: + """Function to decide which lines to keep.""" + if not line.strip(): + return True + if line.strip() == '//': # End tag + return True + if line.startswith('# STOCKHOLM'): # Start tag + return True + if line.startswith('#=GC RF'): # Reference Annotation Line + return True + if line[:4] == '#=GS': # Description lines - keep if sequence in list. + _, seqname, _ = line.split(maxsplit=2) + return seqname in seqnames + elif line.startswith('#'): # Other markup - filter out + return False + else: # Alignment data - keep if sequence in list. + seqname = line.partition(' ')[0] + return seqname in seqnames + + +def truncate_stockholm_msa(stockholm_msa_path: str, max_sequences: int) -> str: + """Reads + truncates a Stockholm file while preventing excessive RAM usage.""" + seqnames = set() + filtered_lines = [] + + with open(stockholm_msa_path) as f: + for line in f: + if line.strip() and not line.startswith(('#', '//')): + # Ignore blank lines, markup and end symbols - remainder are alignment + # sequence parts. + seqname = line.partition(' ')[0] + seqnames.add(seqname) + if len(seqnames) >= max_sequences: + break + + f.seek(0) + for line in f: + if _keep_line(line, seqnames): + filtered_lines.append(line) + + return ''.join(filtered_lines) + + +def remove_empty_columns_from_stockholm_msa(stockholm_msa: str) -> str: + """Removes empty columns (dashes-only) from a Stockholm MSA.""" + processed_lines = {} + unprocessed_lines = {} + for i, line in enumerate(stockholm_msa.splitlines()): + if line.startswith('#=GC RF'): + reference_annotation_i = i + reference_annotation_line = line + # Reached the end of this chunk of the alignment. Process chunk. + _, _, first_alignment = line.rpartition(' ') + mask = [] + for j in range(len(first_alignment)): + for _, unprocessed_line in unprocessed_lines.items(): + prefix, _, alignment = unprocessed_line.rpartition(' ') + if alignment[j] != '-': + mask.append(True) + break + else: # Every row contained a hyphen - empty column. + mask.append(False) + # Add reference annotation for processing with mask. + unprocessed_lines[reference_annotation_i] = reference_annotation_line + + if not any(mask): # All columns were empty. Output empty lines for chunk. + for line_index in unprocessed_lines: + processed_lines[line_index] = '' + else: + for line_index, unprocessed_line in unprocessed_lines.items(): + prefix, _, alignment = unprocessed_line.rpartition(' ') + masked_alignment = ''.join(itertools.compress(alignment, mask)) + processed_lines[line_index] = f'{prefix} {masked_alignment}' + + # Clear raw_alignments. + unprocessed_lines = {} + elif line.strip() and not line.startswith(('#', '//')): + unprocessed_lines[i] = line + else: + processed_lines[i] = line + return '\n'.join((processed_lines[i] for i in range(len(processed_lines)))) + + +def deduplicate_stockholm_msa(stockholm_msa: str) -> str: + """Remove duplicate sequences (ignoring insertions wrt query).""" + sequence_dict = collections.defaultdict(str) + + # First we must extract all sequences from the MSA. + for line in stockholm_msa.splitlines(): + # Only consider the alignments - ignore reference annotation, empty lines, + # descriptions or markup. + if line.strip() and not line.startswith(('#', '//')): + line = line.strip() + seqname, alignment = line.split() + sequence_dict[seqname] += alignment + + seen_sequences = set() + seqnames = set() + # First alignment is the query. + query_align = next(iter(sequence_dict.values())) + mask = [c != '-' for c in query_align] # Mask is False for insertions. + for seqname, alignment in sequence_dict.items(): + # Apply mask to remove all insertions from the string. + masked_alignment = ''.join(itertools.compress(alignment, mask)) + if masked_alignment in seen_sequences: + continue + else: + seen_sequences.add(masked_alignment) + seqnames.add(seqname) + + filtered_lines = [] + for line in stockholm_msa.splitlines(): + if _keep_line(line, seqnames): + filtered_lines.append(line) + + return '\n'.join(filtered_lines) + '\n' + + +def _get_hhr_line_regex_groups( + regex_pattern: str, line: str) -> Sequence[Optional[str]]: + match = re.match(regex_pattern, line) + if match is None: + raise RuntimeError(f'Could not parse query line {line}') + return match.groups() + + +def _update_hhr_residue_indices_list( + sequence: str, start_index: int, indices_list: List[int]): + """Computes the relative indices for each residue with respect to the original sequence.""" + counter = start_index + for symbol in sequence: + if symbol == '-': + indices_list.append(-1) + else: + indices_list.append(counter) + counter += 1 + + +def _parse_hhr_hit(detailed_lines: Sequence[str]) -> TemplateHit: + """Parses the detailed HMM HMM comparison section for a single Hit. + + This works on .hhr files generated from both HHBlits and HHSearch. + + Args: + detailed_lines: A list of lines from a single comparison section between 2 + sequences (which each have their own HMM's) + + Returns: + A dictionary with the information from that detailed comparison section + + Raises: + RuntimeError: If a certain line cannot be processed + """ + # Parse first 2 lines. + number_of_hit = int(detailed_lines[0].split()[-1]) + name_hit = detailed_lines[1][1:] + + # Parse the summary line. + pattern = ( + 'Probab=(.*)[\t ]*E-value=(.*)[\t ]*Score=(.*)[\t ]*Aligned_cols=(.*)[\t' + ' ]*Identities=(.*)%[\t ]*Similarity=(.*)[\t ]*Sum_probs=(.*)[\t ' + ']*Template_Neff=(.*)') + match = re.match(pattern, detailed_lines[2]) + if match is None: + raise RuntimeError( + 'Could not parse section: %s. Expected this: \n%s to contain summary.' % + (detailed_lines, detailed_lines[2])) + (_, _, _, aligned_cols, _, _, sum_probs, _) = [float(x) + for x in match.groups()] + + # The next section reads the detailed comparisons. These are in a 'human + # readable' format which has a fixed length. The strategy employed is to + # assume that each block starts with the query sequence line, and to parse + # that with a regexp in order to deduce the fixed length used for that block. + query = '' + hit_sequence = '' + indices_query = [] + indices_hit = [] + length_block = None + + for line in detailed_lines[3:]: + # Parse the query sequence line + if (line.startswith('Q ') and not line.startswith('Q ss_dssp') and + not line.startswith('Q ss_pred') and + not line.startswith('Q Consensus')): + # Thus the first 17 characters must be 'Q <query_name> ', and we can parse + # everything after that. + # start sequence end total_sequence_length + patt = r'[\t ]*([0-9]*) ([A-Z-]*)[\t ]*([0-9]*) \([0-9]*\)' + groups = _get_hhr_line_regex_groups(patt, line[17:]) + + # Get the length of the parsed block using the start and finish indices, + # and ensure it is the same as the actual block length. + start = int(groups[0]) - 1 # Make index zero based. + delta_query = groups[1] + end = int(groups[2]) + num_insertions = len([x for x in delta_query if x == '-']) + length_block = end - start + num_insertions + assert length_block == len(delta_query) + + # Update the query sequence and indices list. + query += delta_query + _update_hhr_residue_indices_list(delta_query, start, indices_query) + + elif line.startswith('T '): + # Parse the hit sequence. + if (not line.startswith('T ss_dssp') and + not line.startswith('T ss_pred') and + not line.startswith('T Consensus')): + # Thus the first 17 characters must be 'T <hit_name> ', and we can + # parse everything after that. + # start sequence end total_sequence_length + patt = r'[\t ]*([0-9]*) ([A-Z-]*)[\t ]*[0-9]* \([0-9]*\)' + groups = _get_hhr_line_regex_groups(patt, line[17:]) + start = int(groups[0]) - 1 # Make index zero based. + delta_hit_sequence = groups[1] + assert length_block == len(delta_hit_sequence) + + # Update the hit sequence and indices list. + hit_sequence += delta_hit_sequence + _update_hhr_residue_indices_list(delta_hit_sequence, start, indices_hit) + + return TemplateHit( + index=number_of_hit, + name=name_hit, + aligned_cols=int(aligned_cols), + sum_probs=sum_probs, + query=query, + hit_sequence=hit_sequence, + indices_query=indices_query, + indices_hit=indices_hit, + ) + + +def parse_hhr(hhr_string: str) -> Sequence[TemplateHit]: + """Parses the content of an entire HHR file.""" + lines = hhr_string.splitlines() + + # Each .hhr file starts with a results table, then has a sequence of hit + # "paragraphs", each paragraph starting with a line 'No <hit number>'. We + # iterate through each paragraph to parse each hit. + + block_starts = [i for i, line in enumerate(lines) if line.startswith('No ')] + + hits = [] + if block_starts: + block_starts.append(len(lines)) # Add the end of the final block. + for i in range(len(block_starts) - 1): + hits.append(_parse_hhr_hit(lines[block_starts[i]:block_starts[i + 1]])) + return hits + + +def parse_e_values_from_tblout(tblout: str) -> Dict[str, float]: + """Parse target to e-value mapping parsed from Jackhmmer tblout string.""" + e_values = {'query': 0} + lines = [line for line in tblout.splitlines() if line[0] != '#'] + # As per http://eddylab.org/software/hmmer/Userguide.pdf fields are + # space-delimited. Relevant fields are (1) target name: and + # (5) E-value (full sequence) (numbering from 1). + for line in lines: + fields = line.split() + e_value = fields[4] + target_name = fields[0] + e_values[target_name] = float(e_value) + return e_values + + +def _get_indices(sequence: str, start: int) -> List[int]: + """Returns indices for non-gap/insert residues starting at the given index.""" + indices = [] + counter = start + for symbol in sequence: + # Skip gaps but add a placeholder so that the alignment is preserved. + if symbol == '-': + indices.append(-1) + # Skip deleted residues, but increase the counter. + elif symbol.islower(): + counter += 1 + # Normal aligned residue. Increase the counter and append to indices. + else: + indices.append(counter) + counter += 1 + return indices + + +@dataclasses.dataclass(frozen=True) +class HitMetadata: + pdb_id: str + chain: str + start: int + end: int + length: int + text: str + + +def _parse_hmmsearch_description(description: str) -> HitMetadata: + """Parses the hmmsearch A3M sequence description line.""" + # Example 1: >4pqx_A/2-217 [subseq from] mol:protein length:217 Free text + # Example 2: >5g3r_A/1-55 [subseq from] mol:protein length:352 + match = re.match( + r'^>?([a-z0-9]+)_(\w+)/([0-9]+)-([0-9]+).*protein length:([0-9]+) *(.*)$', + description.strip()) + + if not match: + raise ValueError(f'Could not parse description: "{description}".') + + return HitMetadata( + pdb_id=match[1], + chain=match[2], + start=int(match[3]), + end=int(match[4]), + length=int(match[5]), + text=match[6]) + + +def parse_hmmsearch_a3m(query_sequence: str, + a3m_string: str, + skip_first: bool = True) -> Sequence[TemplateHit]: + """Parses an a3m string produced by hmmsearch. + + Args: + query_sequence: The query sequence. + a3m_string: The a3m string produced by hmmsearch. + skip_first: Whether to skip the first sequence in the a3m string. + + Returns: + A sequence of `TemplateHit` results. + """ + # Zip the descriptions and MSAs together, skip the first query sequence. + parsed_a3m = list(zip(*parse_fasta(a3m_string))) + if skip_first: + parsed_a3m = parsed_a3m[1:] + + indices_query = _get_indices(query_sequence, start=0) + + hits = [] + for i, (hit_sequence, hit_description) in enumerate(parsed_a3m, start=1): + if 'mol:protein' not in hit_description: + continue # Skip non-protein chains. + metadata = _parse_hmmsearch_description(hit_description) + # Aligned columns are only the match states. + aligned_cols = sum([r.isupper() and r != '-' for r in hit_sequence]) + indices_hit = _get_indices(hit_sequence, start=metadata.start - 1) + + hit = TemplateHit( + index=i, + name=f'{metadata.pdb_id}_{metadata.chain}', + aligned_cols=aligned_cols, + sum_probs=None, + query=query_sequence, + hit_sequence=hit_sequence.upper(), + indices_query=indices_query, + indices_hit=indices_hit, + ) + hits.append(hit) + + return hits diff --git a/alphafold/data/pipeline.py b/alphafold/data/pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..a90eb5776b9594667474eb47fff83d1011a50ed1 --- /dev/null +++ b/alphafold/data/pipeline.py @@ -0,0 +1,243 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Functions for building the input features for the AlphaFold model.""" + +import os +from typing import Any, Mapping, MutableMapping, Optional, Sequence, Union +from absl import logging +from alphafold.common import residue_constants +from alphafold.data import msa_identifiers +from alphafold.data import parsers +from alphafold.data import templates +from alphafold.data.tools import hhblits +from alphafold.data.tools import hhsearch +from alphafold.data.tools import hmmsearch +from alphafold.data.tools import jackhmmer +import numpy as np + +# Internal import (7716). + +FeatureDict = MutableMapping[str, np.ndarray] +TemplateSearcher = Union[hhsearch.HHSearch, hmmsearch.Hmmsearch] + + +def make_sequence_features( + sequence: str, description: str, num_res: int) -> FeatureDict: + """Constructs a feature dict of sequence features.""" + features = {} + features['aatype'] = residue_constants.sequence_to_onehot( + sequence=sequence, + mapping=residue_constants.restype_order_with_x, + map_unknown_to_x=True) + features['between_segment_residues'] = np.zeros((num_res,), dtype=np.int32) + features['domain_name'] = np.array([description.encode('utf-8')], + dtype=np.object_) + features['residue_index'] = np.array(range(num_res), dtype=np.int32) + features['seq_length'] = np.array([num_res] * num_res, dtype=np.int32) + features['sequence'] = np.array([sequence.encode('utf-8')], dtype=np.object_) + return features + + +def make_msa_features(msas: Sequence[parsers.Msa]) -> FeatureDict: + """Constructs a feature dict of MSA features.""" + if not msas: + raise ValueError('At least one MSA must be provided.') + + int_msa = [] + deletion_matrix = [] + species_ids = [] + seen_sequences = set() + for msa_index, msa in enumerate(msas): + if not msa: + raise ValueError(f'MSA {msa_index} must contain at least one sequence.') + for sequence_index, sequence in enumerate(msa.sequences): + if sequence in seen_sequences: + continue + seen_sequences.add(sequence) + int_msa.append( + [residue_constants.HHBLITS_AA_TO_ID[res] for res in sequence]) + deletion_matrix.append(msa.deletion_matrix[sequence_index]) + identifiers = msa_identifiers.get_identifiers( + msa.descriptions[sequence_index]) + species_ids.append(identifiers.species_id.encode('utf-8')) + + num_res = len(msas[0].sequences[0]) + num_alignments = len(int_msa) + features = {} + features['deletion_matrix_int'] = np.array(deletion_matrix, dtype=np.int32) + features['msa'] = np.array(int_msa, dtype=np.int32) + features['num_alignments'] = np.array( + [num_alignments] * num_res, dtype=np.int32) + features['msa_species_identifiers'] = np.array(species_ids, dtype=np.object_) + return features + + +def run_msa_tool(msa_runner, input_fasta_path: str, msa_out_path: str, + msa_format: str, use_precomputed_msas: bool, + max_sto_sequences: Optional[int] = None + ) -> Mapping[str, Any]: + """Runs an MSA tool, checking if output already exists first.""" + if not use_precomputed_msas or not os.path.exists(msa_out_path): + if msa_format == 'sto' and max_sto_sequences is not None: + result = msa_runner.query(input_fasta_path, max_sto_sequences)[0] # pytype: disable=wrong-arg-count + else: + result = msa_runner.query(input_fasta_path)[0] + with open(msa_out_path, 'w') as f: + f.write(result[msa_format]) + else: + logging.warning('Reading MSA from file %s', msa_out_path) + if msa_format == 'sto' and max_sto_sequences is not None: + precomputed_msa = parsers.truncate_stockholm_msa( + msa_out_path, max_sto_sequences) + result = {'sto': precomputed_msa} + else: + with open(msa_out_path, 'r') as f: + result = {msa_format: f.read()} + return result + + +class DataPipeline: + """Runs the alignment tools and assembles the input features.""" + + def __init__(self, + jackhmmer_binary_path: str, + hhblits_binary_path: str, + uniref90_database_path: str, + mgnify_database_path: str, + bfd_database_path: Optional[str], + uniref30_database_path: Optional[str], + small_bfd_database_path: Optional[str], + template_searcher: TemplateSearcher, + template_featurizer: templates.TemplateHitFeaturizer, + use_small_bfd: bool, + mgnify_max_hits: int = 501, + uniref_max_hits: int = 10000, + use_precomputed_msas: bool = False): + """Initializes the data pipeline.""" + self._use_small_bfd = use_small_bfd + self.jackhmmer_uniref90_runner = jackhmmer.Jackhmmer( + binary_path=jackhmmer_binary_path, + database_path=uniref90_database_path) + if use_small_bfd: + self.jackhmmer_small_bfd_runner = jackhmmer.Jackhmmer( + binary_path=jackhmmer_binary_path, + database_path=small_bfd_database_path) + else: + self.hhblits_bfd_uniref_runner = hhblits.HHBlits( + binary_path=hhblits_binary_path, + databases=[bfd_database_path, uniref30_database_path]) + self.jackhmmer_mgnify_runner = jackhmmer.Jackhmmer( + binary_path=jackhmmer_binary_path, + database_path=mgnify_database_path) + self.template_searcher = template_searcher + self.template_featurizer = template_featurizer + self.mgnify_max_hits = mgnify_max_hits + self.uniref_max_hits = uniref_max_hits + self.use_precomputed_msas = use_precomputed_msas + + def process(self, input_fasta_path: str, msa_output_dir: str) -> FeatureDict: + """Runs alignment tools on the input sequence and creates features.""" + with open(input_fasta_path) as f: + input_fasta_str = f.read() + input_seqs, input_descs = parsers.parse_fasta(input_fasta_str) + if len(input_seqs) != 1: + raise ValueError( + f'More than one input sequence found in {input_fasta_path}.') + input_sequence = input_seqs[0] + input_description = input_descs[0] + num_res = len(input_sequence) + + uniref90_out_path = os.path.join(msa_output_dir, 'uniref90_hits.sto') + jackhmmer_uniref90_result = run_msa_tool( + msa_runner=self.jackhmmer_uniref90_runner, + input_fasta_path=input_fasta_path, + msa_out_path=uniref90_out_path, + msa_format='sto', + use_precomputed_msas=self.use_precomputed_msas, + max_sto_sequences=self.uniref_max_hits) + mgnify_out_path = os.path.join(msa_output_dir, 'mgnify_hits.sto') + jackhmmer_mgnify_result = run_msa_tool( + msa_runner=self.jackhmmer_mgnify_runner, + input_fasta_path=input_fasta_path, + msa_out_path=mgnify_out_path, + msa_format='sto', + use_precomputed_msas=self.use_precomputed_msas, + max_sto_sequences=self.mgnify_max_hits) + + msa_for_templates = jackhmmer_uniref90_result['sto'] + msa_for_templates = parsers.deduplicate_stockholm_msa(msa_for_templates) + msa_for_templates = parsers.remove_empty_columns_from_stockholm_msa( + msa_for_templates) + + if self.template_searcher.input_format == 'sto': + pdb_templates_result = self.template_searcher.query(msa_for_templates) + elif self.template_searcher.input_format == 'a3m': + uniref90_msa_as_a3m = parsers.convert_stockholm_to_a3m(msa_for_templates) + pdb_templates_result = self.template_searcher.query(uniref90_msa_as_a3m) + else: + raise ValueError('Unrecognized template input format: ' + f'{self.template_searcher.input_format}') + + pdb_hits_out_path = os.path.join( + msa_output_dir, f'pdb_hits.{self.template_searcher.output_format}') + with open(pdb_hits_out_path, 'w') as f: + f.write(pdb_templates_result) + + uniref90_msa = parsers.parse_stockholm(jackhmmer_uniref90_result['sto']) + mgnify_msa = parsers.parse_stockholm(jackhmmer_mgnify_result['sto']) + + pdb_template_hits = self.template_searcher.get_template_hits( + output_string=pdb_templates_result, input_sequence=input_sequence) + + if self._use_small_bfd: + bfd_out_path = os.path.join(msa_output_dir, 'small_bfd_hits.sto') + jackhmmer_small_bfd_result = run_msa_tool( + msa_runner=self.jackhmmer_small_bfd_runner, + input_fasta_path=input_fasta_path, + msa_out_path=bfd_out_path, + msa_format='sto', + use_precomputed_msas=self.use_precomputed_msas) + bfd_msa = parsers.parse_stockholm(jackhmmer_small_bfd_result['sto']) + else: + bfd_out_path = os.path.join(msa_output_dir, 'bfd_uniref_hits.a3m') + hhblits_bfd_uniref_result = run_msa_tool( + msa_runner=self.hhblits_bfd_uniref_runner, + input_fasta_path=input_fasta_path, + msa_out_path=bfd_out_path, + msa_format='a3m', + use_precomputed_msas=self.use_precomputed_msas) + bfd_msa = parsers.parse_a3m(hhblits_bfd_uniref_result['a3m']) + + templates_result = self.template_featurizer.get_templates( + query_sequence=input_sequence, + hits=pdb_template_hits) + + sequence_features = make_sequence_features( + sequence=input_sequence, + description=input_description, + num_res=num_res) + + msa_features = make_msa_features((uniref90_msa, bfd_msa, mgnify_msa)) + + logging.info('Uniref90 MSA size: %d sequences.', len(uniref90_msa)) + logging.info('BFD MSA size: %d sequences.', len(bfd_msa)) + logging.info('MGnify MSA size: %d sequences.', len(mgnify_msa)) + logging.info('Final (deduplicated) MSA size: %d sequences.', + msa_features['num_alignments'][0]) + logging.info('Total number of templates (NB: this can include bad ' + 'templates and is later filtered to top 4): %d.', + templates_result.features['template_domain_names'].shape[0]) + + return {**sequence_features, **msa_features, **templates_result.features} diff --git a/alphafold/data/pipeline_multimer.py b/alphafold/data/pipeline_multimer.py new file mode 100644 index 0000000000000000000000000000000000000000..33145980333323028df775126b7efdba52599aa1 --- /dev/null +++ b/alphafold/data/pipeline_multimer.py @@ -0,0 +1,284 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Functions for building the features for the AlphaFold multimer model.""" + +import collections +import contextlib +import copy +import dataclasses +import json +import os +import tempfile +from typing import Mapping, MutableMapping, Sequence + +from absl import logging +from alphafold.common import protein +from alphafold.common import residue_constants +from alphafold.data import feature_processing +from alphafold.data import msa_pairing +from alphafold.data import parsers +from alphafold.data import pipeline +from alphafold.data.tools import jackhmmer +import numpy as np + +# Internal import (7716). + + +@dataclasses.dataclass(frozen=True) +class _FastaChain: + sequence: str + description: str + + +def _make_chain_id_map(*, + sequences: Sequence[str], + descriptions: Sequence[str], + ) -> Mapping[str, _FastaChain]: + """Makes a mapping from PDB-format chain ID to sequence and description.""" + if len(sequences) != len(descriptions): + raise ValueError('sequences and descriptions must have equal length. ' + f'Got {len(sequences)} != {len(descriptions)}.') + if len(sequences) > protein.PDB_MAX_CHAINS: + raise ValueError('Cannot process more chains than the PDB format supports. ' + f'Got {len(sequences)} chains.') + chain_id_map = {} + for chain_id, sequence, description in zip( + protein.PDB_CHAIN_IDS, sequences, descriptions): + chain_id_map[chain_id] = _FastaChain( + sequence=sequence, description=description) + return chain_id_map + + +@contextlib.contextmanager +def temp_fasta_file(fasta_str: str): + with tempfile.NamedTemporaryFile('w', suffix='.fasta') as fasta_file: + fasta_file.write(fasta_str) + fasta_file.seek(0) + yield fasta_file.name + + +def convert_monomer_features( + monomer_features: pipeline.FeatureDict, + chain_id: str) -> pipeline.FeatureDict: + """Reshapes and modifies monomer features for multimer models.""" + converted = {} + converted['auth_chain_id'] = np.asarray(chain_id, dtype=np.object_) + unnecessary_leading_dim_feats = { + 'sequence', 'domain_name', 'num_alignments', 'seq_length'} + for feature_name, feature in monomer_features.items(): + if feature_name in unnecessary_leading_dim_feats: + # asarray ensures it's a np.ndarray. + feature = np.asarray(feature[0], dtype=feature.dtype) + elif feature_name == 'aatype': + # The multimer model performs the one-hot operation itself. + feature = np.argmax(feature, axis=-1).astype(np.int32) + elif feature_name == 'template_aatype': + feature = np.argmax(feature, axis=-1).astype(np.int32) + new_order_list = residue_constants.MAP_HHBLITS_AATYPE_TO_OUR_AATYPE + feature = np.take(new_order_list, feature.astype(np.int32), axis=0) + elif feature_name == 'template_all_atom_masks': + feature_name = 'template_all_atom_mask' + converted[feature_name] = feature + return converted + + +def int_id_to_str_id(num: int) -> str: + """Encodes a number as a string, using reverse spreadsheet style naming. + + Args: + num: A positive integer. + + Returns: + A string that encodes the positive integer using reverse spreadsheet style, + naming e.g. 1 = A, 2 = B, ..., 27 = AA, 28 = BA, 29 = CA, ... This is the + usual way to encode chain IDs in mmCIF files. + """ + if num <= 0: + raise ValueError(f'Only positive integers allowed, got {num}.') + + num = num - 1 # 1-based indexing. + output = [] + while num >= 0: + output.append(chr(num % 26 + ord('A'))) + num = num // 26 - 1 + return ''.join(output) + + +def add_assembly_features( + all_chain_features: MutableMapping[str, pipeline.FeatureDict], + ) -> MutableMapping[str, pipeline.FeatureDict]: + """Add features to distinguish between chains. + + Args: + all_chain_features: A dictionary which maps chain_id to a dictionary of + features for each chain. + + Returns: + all_chain_features: A dictionary which maps strings of the form + `<seq_id>_<sym_id>` to the corresponding chain features. E.g. two + chains from a homodimer would have keys A_1 and A_2. Two chains from a + heterodimer would have keys A_1 and B_1. + """ + # Group the chains by sequence + seq_to_entity_id = {} + grouped_chains = collections.defaultdict(list) + for chain_id, chain_features in all_chain_features.items(): + seq = str(chain_features['sequence']) + if seq not in seq_to_entity_id: + seq_to_entity_id[seq] = len(seq_to_entity_id) + 1 + grouped_chains[seq_to_entity_id[seq]].append(chain_features) + + new_all_chain_features = {} + chain_id = 1 + for entity_id, group_chain_features in grouped_chains.items(): + for sym_id, chain_features in enumerate(group_chain_features, start=1): + new_all_chain_features[ + f'{int_id_to_str_id(entity_id)}_{sym_id}'] = chain_features + seq_length = chain_features['seq_length'] + chain_features['asym_id'] = chain_id * np.ones(seq_length) + chain_features['sym_id'] = sym_id * np.ones(seq_length) + chain_features['entity_id'] = entity_id * np.ones(seq_length) + chain_id += 1 + + return new_all_chain_features + + +def pad_msa(np_example, min_num_seq): + np_example = dict(np_example) + num_seq = np_example['msa'].shape[0] + if num_seq < min_num_seq: + for feat in ('msa', 'deletion_matrix', 'bert_mask', 'msa_mask'): + np_example[feat] = np.pad( + np_example[feat], ((0, min_num_seq - num_seq), (0, 0))) + np_example['cluster_bias_mask'] = np.pad( + np_example['cluster_bias_mask'], ((0, min_num_seq - num_seq),)) + return np_example + + +class DataPipeline: + """Runs the alignment tools and assembles the input features.""" + + def __init__(self, + monomer_data_pipeline: pipeline.DataPipeline, + jackhmmer_binary_path: str, + uniprot_database_path: str, + max_uniprot_hits: int = 50000, + use_precomputed_msas: bool = False): + """Initializes the data pipeline. + + Args: + monomer_data_pipeline: An instance of pipeline.DataPipeline - that runs + the data pipeline for the monomer AlphaFold system. + jackhmmer_binary_path: Location of the jackhmmer binary. + uniprot_database_path: Location of the unclustered uniprot sequences, that + will be searched with jackhmmer and used for MSA pairing. + max_uniprot_hits: The maximum number of hits to return from uniprot. + use_precomputed_msas: Whether to use pre-existing MSAs; see run_alphafold. + """ + self._monomer_data_pipeline = monomer_data_pipeline + self._uniprot_msa_runner = jackhmmer.Jackhmmer( + binary_path=jackhmmer_binary_path, + database_path=uniprot_database_path) + self._max_uniprot_hits = max_uniprot_hits + self.use_precomputed_msas = use_precomputed_msas + + def _process_single_chain( + self, + chain_id: str, + sequence: str, + description: str, + msa_output_dir: str, + is_homomer_or_monomer: bool) -> pipeline.FeatureDict: + """Runs the monomer pipeline on a single chain.""" + chain_fasta_str = f'>chain_{chain_id}\n{sequence}\n' + chain_msa_output_dir = os.path.join(msa_output_dir, chain_id) + if not os.path.exists(chain_msa_output_dir): + os.makedirs(chain_msa_output_dir) + with temp_fasta_file(chain_fasta_str) as chain_fasta_path: + logging.info('Running monomer pipeline on chain %s: %s', + chain_id, description) + chain_features = self._monomer_data_pipeline.process( + input_fasta_path=chain_fasta_path, + msa_output_dir=chain_msa_output_dir) + + # We only construct the pairing features if there are 2 or more unique + # sequences. + if not is_homomer_or_monomer: + all_seq_msa_features = self._all_seq_msa_features(chain_fasta_path, + chain_msa_output_dir) + chain_features.update(all_seq_msa_features) + return chain_features + + def _all_seq_msa_features(self, input_fasta_path, msa_output_dir): + """Get MSA features for unclustered uniprot, for pairing.""" + out_path = os.path.join(msa_output_dir, 'uniprot_hits.sto') + result = pipeline.run_msa_tool( + self._uniprot_msa_runner, input_fasta_path, out_path, 'sto', + self.use_precomputed_msas) + msa = parsers.parse_stockholm(result['sto']) + msa = msa.truncate(max_seqs=self._max_uniprot_hits) + all_seq_features = pipeline.make_msa_features([msa]) + valid_feats = msa_pairing.MSA_FEATURES + ( + 'msa_species_identifiers', + ) + feats = {f'{k}_all_seq': v for k, v in all_seq_features.items() + if k in valid_feats} + return feats + + def process(self, + input_fasta_path: str, + msa_output_dir: str) -> pipeline.FeatureDict: + """Runs alignment tools on the input sequences and creates features.""" + with open(input_fasta_path) as f: + input_fasta_str = f.read() + input_seqs, input_descs = parsers.parse_fasta(input_fasta_str) + + chain_id_map = _make_chain_id_map(sequences=input_seqs, + descriptions=input_descs) + chain_id_map_path = os.path.join(msa_output_dir, 'chain_id_map.json') + with open(chain_id_map_path, 'w') as f: + chain_id_map_dict = {chain_id: dataclasses.asdict(fasta_chain) + for chain_id, fasta_chain in chain_id_map.items()} + json.dump(chain_id_map_dict, f, indent=4, sort_keys=True) + + all_chain_features = {} + sequence_features = {} + is_homomer_or_monomer = len(set(input_seqs)) == 1 + for chain_id, fasta_chain in chain_id_map.items(): + if fasta_chain.sequence in sequence_features: + all_chain_features[chain_id] = copy.deepcopy( + sequence_features[fasta_chain.sequence]) + continue + chain_features = self._process_single_chain( + chain_id=chain_id, + sequence=fasta_chain.sequence, + description=fasta_chain.description, + msa_output_dir=msa_output_dir, + is_homomer_or_monomer=is_homomer_or_monomer) + + chain_features = convert_monomer_features(chain_features, + chain_id=chain_id) + all_chain_features[chain_id] = chain_features + sequence_features[fasta_chain.sequence] = chain_features + + all_chain_features = add_assembly_features(all_chain_features) + + np_example = feature_processing.pair_and_merge( + all_chain_features=all_chain_features) + + # Pad MSA to avoid zero-sized extra_msa. + np_example = pad_msa(np_example, 512) + + return np_example diff --git a/alphafold/data/templates.py b/alphafold/data/templates.py new file mode 100644 index 0000000000000000000000000000000000000000..3830cee6952ab0ab372d0b9d98b8eb602943d990 --- /dev/null +++ b/alphafold/data/templates.py @@ -0,0 +1,1011 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Functions for getting templates and calculating template features.""" +import abc +import dataclasses +import datetime +import functools +import glob +import os +import re +from typing import Any, Dict, Mapping, Optional, Sequence, Tuple + +from absl import logging +from alphafold.common import residue_constants +from alphafold.data import mmcif_parsing +from alphafold.data import parsers +from alphafold.data.tools import kalign +import numpy as np + +# Internal import (7716). + + +class Error(Exception): + """Base class for exceptions.""" + + +class NoChainsError(Error): + """An error indicating that template mmCIF didn't have any chains.""" + + +class SequenceNotInTemplateError(Error): + """An error indicating that template mmCIF didn't contain the sequence.""" + + +class NoAtomDataInTemplateError(Error): + """An error indicating that template mmCIF didn't contain atom positions.""" + + +class TemplateAtomMaskAllZerosError(Error): + """An error indicating that template mmCIF had all atom positions masked.""" + + +class QueryToTemplateAlignError(Error): + """An error indicating that the query can't be aligned to the template.""" + + +class CaDistanceError(Error): + """An error indicating that a CA atom distance exceeds a threshold.""" + + +class MultipleChainsError(Error): + """An error indicating that multiple chains were found for a given ID.""" + + +# Prefilter exceptions. +class PrefilterError(Exception): + """A base class for template prefilter exceptions.""" + + +class DateError(PrefilterError): + """An error indicating that the hit date was after the max allowed date.""" + + +class AlignRatioError(PrefilterError): + """An error indicating that the hit align ratio to the query was too small.""" + + +class DuplicateError(PrefilterError): + """An error indicating that the hit was an exact subsequence of the query.""" + + +class LengthError(PrefilterError): + """An error indicating that the hit was too short.""" + + +TEMPLATE_FEATURES = { + 'template_aatype': np.float32, + 'template_all_atom_masks': np.float32, + 'template_all_atom_positions': np.float32, + 'template_domain_names': object, + 'template_sequence': object, + 'template_sum_probs': np.float32, +} + + +def _get_pdb_id_and_chain(hit: parsers.TemplateHit) -> Tuple[str, str]: + """Returns PDB id and chain id for an HHSearch Hit.""" + # PDB ID: 4 letters. Chain ID: 1+ alphanumeric letters or "." if unknown. + id_match = re.match(r'[a-zA-Z\d]{4}_[a-zA-Z0-9.]+', hit.name) + if not id_match: + raise ValueError(f'hit.name did not start with PDBID_chain: {hit.name}') + pdb_id, chain_id = id_match.group(0).split('_') + return pdb_id.lower(), chain_id + + +def _is_after_cutoff( + pdb_id: str, + release_dates: Mapping[str, datetime.datetime], + release_date_cutoff: Optional[datetime.datetime]) -> bool: + """Checks if the template date is after the release date cutoff. + + Args: + pdb_id: 4 letter pdb code. + release_dates: Dictionary mapping PDB ids to their structure release dates. + release_date_cutoff: Max release date that is valid for this query. + + Returns: + True if the template release date is after the cutoff, False otherwise. + """ + if release_date_cutoff is None: + raise ValueError('The release_date_cutoff must not be None.') + if pdb_id in release_dates: + return release_dates[pdb_id] > release_date_cutoff + else: + # Since this is just a quick prefilter to reduce the number of mmCIF files + # we need to parse, we don't have to worry about returning True here. + return False + + +def _parse_obsolete(obsolete_file_path: str) -> Mapping[str, Optional[str]]: + """Parses the data file from PDB that lists which pdb_ids are obsolete.""" + with open(obsolete_file_path) as f: + result = {} + for line in f: + line = line.strip() + # Format: Date From To + # 'OBSLTE 06-NOV-19 6G9Y' - Removed, rare + # 'OBSLTE 31-JUL-94 116L 216L' - Replaced, common + # 'OBSLTE 26-SEP-06 2H33 2JM5 2OWI' - Replaced by multiple, rare + if line.startswith('OBSLTE'): + if len(line) > 30: + # Replaced by at least one structure. + from_id = line[20:24].lower() + to_id = line[29:33].lower() + result[from_id] = to_id + elif len(line) == 24: + # Removed. + from_id = line[20:24].lower() + result[from_id] = None + return result + + +def _parse_release_dates(path: str) -> Mapping[str, datetime.datetime]: + """Parses release dates file, returns a mapping from PDBs to release dates.""" + if path.endswith('txt'): + release_dates = {} + with open(path, 'r') as f: + for line in f: + pdb_id, date = line.split(':') + date = date.strip() + # Python 3.6 doesn't have datetime.date.fromisoformat() which is about + # 90x faster than strptime. However, splitting the string manually is + # about 10x faster than strptime. + release_dates[pdb_id.strip()] = datetime.datetime( + year=int(date[:4]), month=int(date[5:7]), day=int(date[8:10])) + return release_dates + else: + raise ValueError('Invalid format of the release date file %s.' % path) + + +def _assess_hhsearch_hit( + hit: parsers.TemplateHit, + hit_pdb_code: str, + query_sequence: str, + release_dates: Mapping[str, datetime.datetime], + release_date_cutoff: datetime.datetime, + max_subsequence_ratio: float = 0.95, + min_align_ratio: float = 0.1) -> bool: + """Determines if template is valid (without parsing the template mmcif file). + + Args: + hit: HhrHit for the template. + hit_pdb_code: The 4 letter pdb code of the template hit. This might be + different from the value in the actual hit since the original pdb might + have become obsolete. + query_sequence: Amino acid sequence of the query. + release_dates: Dictionary mapping pdb codes to their structure release + dates. + release_date_cutoff: Max release date that is valid for this query. + max_subsequence_ratio: Exclude any exact matches with this much overlap. + min_align_ratio: Minimum overlap between the template and query. + + Returns: + True if the hit passed the prefilter. Raises an exception otherwise. + + Raises: + DateError: If the hit date was after the max allowed date. + AlignRatioError: If the hit align ratio to the query was too small. + DuplicateError: If the hit was an exact subsequence of the query. + LengthError: If the hit was too short. + """ + aligned_cols = hit.aligned_cols + align_ratio = aligned_cols / len(query_sequence) + + template_sequence = hit.hit_sequence.replace('-', '') + length_ratio = float(len(template_sequence)) / len(query_sequence) + + # Check whether the template is a large subsequence or duplicate of original + # query. This can happen due to duplicate entries in the PDB database. + duplicate = (template_sequence in query_sequence and + length_ratio > max_subsequence_ratio) + + if _is_after_cutoff(hit_pdb_code, release_dates, release_date_cutoff): + raise DateError(f'Date ({release_dates[hit_pdb_code]}) > max template date ' + f'({release_date_cutoff}).') + + if align_ratio <= min_align_ratio: + raise AlignRatioError('Proportion of residues aligned to query too small. ' + f'Align ratio: {align_ratio}.') + + if duplicate: + raise DuplicateError('Template is an exact subsequence of query with large ' + f'coverage. Length ratio: {length_ratio}.') + + if len(template_sequence) < 10: + raise LengthError(f'Template too short. Length: {len(template_sequence)}.') + + return True + + +def _find_template_in_pdb( + template_chain_id: str, + template_sequence: str, + mmcif_object: mmcif_parsing.MmcifObject) -> Tuple[str, str, int]: + """Tries to find the template chain in the given pdb file. + + This method tries the three following things in order: + 1. Tries if there is an exact match in both the chain ID and the sequence. + If yes, the chain sequence is returned. Otherwise: + 2. Tries if there is an exact match only in the sequence. + If yes, the chain sequence is returned. Otherwise: + 3. Tries if there is a fuzzy match (X = wildcard) in the sequence. + If yes, the chain sequence is returned. + If none of these succeed, a SequenceNotInTemplateError is thrown. + + Args: + template_chain_id: The template chain ID. + template_sequence: The template chain sequence. + mmcif_object: The PDB object to search for the template in. + + Returns: + A tuple with: + * The chain sequence that was found to match the template in the PDB object. + * The ID of the chain that is being returned. + * The offset where the template sequence starts in the chain sequence. + + Raises: + SequenceNotInTemplateError: If no match is found after the steps described + above. + """ + # Try if there is an exact match in both the chain ID and the (sub)sequence. + pdb_id = mmcif_object.file_id + chain_sequence = mmcif_object.chain_to_seqres.get(template_chain_id) + if chain_sequence and (template_sequence in chain_sequence): + logging.info( + 'Found an exact template match %s_%s.', pdb_id, template_chain_id) + mapping_offset = chain_sequence.find(template_sequence) + return chain_sequence, template_chain_id, mapping_offset + + # Try if there is an exact match in the (sub)sequence only. + for chain_id, chain_sequence in mmcif_object.chain_to_seqres.items(): + if chain_sequence and (template_sequence in chain_sequence): + logging.info('Found a sequence-only match %s_%s.', pdb_id, chain_id) + mapping_offset = chain_sequence.find(template_sequence) + return chain_sequence, chain_id, mapping_offset + + # Return a chain sequence that fuzzy matches (X = wildcard) the template. + # Make parentheses unnamed groups (?:_) to avoid the 100 named groups limit. + regex = ['.' if aa == 'X' else '(?:%s|X)' % aa for aa in template_sequence] + regex = re.compile(''.join(regex)) + for chain_id, chain_sequence in mmcif_object.chain_to_seqres.items(): + match = re.search(regex, chain_sequence) + if match: + logging.info('Found a fuzzy sequence-only match %s_%s.', pdb_id, chain_id) + mapping_offset = match.start() + return chain_sequence, chain_id, mapping_offset + + # No hits, raise an error. + raise SequenceNotInTemplateError( + 'Could not find the template sequence in %s_%s. Template sequence: %s, ' + 'chain_to_seqres: %s' % (pdb_id, template_chain_id, template_sequence, + mmcif_object.chain_to_seqres)) + + +def _realign_pdb_template_to_query( + old_template_sequence: str, + template_chain_id: str, + mmcif_object: mmcif_parsing.MmcifObject, + old_mapping: Mapping[int, int], + kalign_binary_path: str) -> Tuple[str, Mapping[int, int]]: + """Aligns template from the mmcif_object to the query. + + In case PDB70 contains a different version of the template sequence, we need + to perform a realignment to the actual sequence that is in the mmCIF file. + This method performs such realignment, but returns the new sequence and + mapping only if the sequence in the mmCIF file is 90% identical to the old + sequence. + + Note that the old_template_sequence comes from the hit, and contains only that + part of the chain that matches with the query while the new_template_sequence + is the full chain. + + Args: + old_template_sequence: The template sequence that was returned by the PDB + template search (typically done using HHSearch). + template_chain_id: The template chain id was returned by the PDB template + search (typically done using HHSearch). This is used to find the right + chain in the mmcif_object chain_to_seqres mapping. + mmcif_object: A mmcif_object which holds the actual template data. + old_mapping: A mapping from the query sequence to the template sequence. + This mapping will be used to compute the new mapping from the query + sequence to the actual mmcif_object template sequence by aligning the + old_template_sequence and the actual template sequence. + kalign_binary_path: The path to a kalign executable. + + Returns: + A tuple (new_template_sequence, new_query_to_template_mapping) where: + * new_template_sequence is the actual template sequence that was found in + the mmcif_object. + * new_query_to_template_mapping is the new mapping from the query to the + actual template found in the mmcif_object. + + Raises: + QueryToTemplateAlignError: + * If there was an error thrown by the alignment tool. + * Or if the actual template sequence differs by more than 10% from the + old_template_sequence. + """ + aligner = kalign.Kalign(binary_path=kalign_binary_path) + new_template_sequence = mmcif_object.chain_to_seqres.get( + template_chain_id, '') + + # Sometimes the template chain id is unknown. But if there is only a single + # sequence within the mmcif_object, it is safe to assume it is that one. + if not new_template_sequence: + if len(mmcif_object.chain_to_seqres) == 1: + logging.info('Could not find %s in %s, but there is only 1 sequence, so ' + 'using that one.', + template_chain_id, + mmcif_object.file_id) + new_template_sequence = list(mmcif_object.chain_to_seqres.values())[0] + else: + raise QueryToTemplateAlignError( + f'Could not find chain {template_chain_id} in {mmcif_object.file_id}. ' + 'If there are no mmCIF parsing errors, it is possible it was not a ' + 'protein chain.') + + try: + parsed_a3m = parsers.parse_a3m( + aligner.align([old_template_sequence, new_template_sequence])) + old_aligned_template, new_aligned_template = parsed_a3m.sequences + except Exception as e: + raise QueryToTemplateAlignError( + 'Could not align old template %s to template %s (%s_%s). Error: %s' % + (old_template_sequence, new_template_sequence, mmcif_object.file_id, + template_chain_id, str(e))) + + logging.info('Old aligned template: %s\nNew aligned template: %s', + old_aligned_template, new_aligned_template) + + old_to_new_template_mapping = {} + old_template_index = -1 + new_template_index = -1 + num_same = 0 + for old_template_aa, new_template_aa in zip( + old_aligned_template, new_aligned_template): + if old_template_aa != '-': + old_template_index += 1 + if new_template_aa != '-': + new_template_index += 1 + if old_template_aa != '-' and new_template_aa != '-': + old_to_new_template_mapping[old_template_index] = new_template_index + if old_template_aa == new_template_aa: + num_same += 1 + + # Require at least 90 % sequence identity wrt to the shorter of the sequences. + if float(num_same) / min( + len(old_template_sequence), len(new_template_sequence)) < 0.9: + raise QueryToTemplateAlignError( + 'Insufficient similarity of the sequence in the database: %s to the ' + 'actual sequence in the mmCIF file %s_%s: %s. We require at least ' + '90 %% similarity wrt to the shorter of the sequences. This is not a ' + 'problem unless you think this is a template that should be included.' % + (old_template_sequence, mmcif_object.file_id, template_chain_id, + new_template_sequence)) + + new_query_to_template_mapping = {} + for query_index, old_template_index in old_mapping.items(): + new_query_to_template_mapping[query_index] = ( + old_to_new_template_mapping.get(old_template_index, -1)) + + new_template_sequence = new_template_sequence.replace('-', '') + + return new_template_sequence, new_query_to_template_mapping + + +def _check_residue_distances(all_positions: np.ndarray, + all_positions_mask: np.ndarray, + max_ca_ca_distance: float): + """Checks if the distance between unmasked neighbor residues is ok.""" + ca_position = residue_constants.atom_order['CA'] + prev_is_unmasked = False + prev_calpha = None + for i, (coords, mask) in enumerate(zip(all_positions, all_positions_mask)): + this_is_unmasked = bool(mask[ca_position]) + if this_is_unmasked: + this_calpha = coords[ca_position] + if prev_is_unmasked: + distance = np.linalg.norm(this_calpha - prev_calpha) + if distance > max_ca_ca_distance: + raise CaDistanceError( + 'The distance between residues %d and %d is %f > limit %f.' % ( + i, i + 1, distance, max_ca_ca_distance)) + prev_calpha = this_calpha + prev_is_unmasked = this_is_unmasked + + +def _get_atom_positions( + mmcif_object: mmcif_parsing.MmcifObject, + auth_chain_id: str, + max_ca_ca_distance: float) -> Tuple[np.ndarray, np.ndarray]: + """Gets atom positions and mask from a list of Biopython Residues.""" + num_res = len(mmcif_object.chain_to_seqres[auth_chain_id]) + + relevant_chains = [c for c in mmcif_object.structure.get_chains() + if c.id == auth_chain_id] + if len(relevant_chains) != 1: + raise MultipleChainsError( + f'Expected exactly one chain in structure with id {auth_chain_id}.') + chain = relevant_chains[0] + + all_positions = np.zeros([num_res, residue_constants.atom_type_num, 3]) + all_positions_mask = np.zeros([num_res, residue_constants.atom_type_num], + dtype=np.int64) + for res_index in range(num_res): + pos = np.zeros([residue_constants.atom_type_num, 3], dtype=np.float32) + mask = np.zeros([residue_constants.atom_type_num], dtype=np.float32) + res_at_position = mmcif_object.seqres_to_structure[auth_chain_id][res_index] + if not res_at_position.is_missing: + assert res_at_position.position is not None + res = chain[(res_at_position.hetflag, + res_at_position.position.residue_number, + res_at_position.position.insertion_code)] + for atom in res.get_atoms(): + atom_name = atom.get_name() + x, y, z = atom.get_coord() + if atom_name in residue_constants.atom_order.keys(): + pos[residue_constants.atom_order[atom_name]] = [x, y, z] + mask[residue_constants.atom_order[atom_name]] = 1.0 + elif atom_name.upper() == 'SE' and res.get_resname() == 'MSE': + # Put the coordinates of the selenium atom in the sulphur column. + pos[residue_constants.atom_order['SD']] = [x, y, z] + mask[residue_constants.atom_order['SD']] = 1.0 + + # Fix naming errors in arginine residues where NH2 is incorrectly + # assigned to be closer to CD than NH1. + cd = residue_constants.atom_order['CD'] + nh1 = residue_constants.atom_order['NH1'] + nh2 = residue_constants.atom_order['NH2'] + if (res.get_resname() == 'ARG' and + all(mask[atom_index] for atom_index in (cd, nh1, nh2)) and + (np.linalg.norm(pos[nh1] - pos[cd]) > + np.linalg.norm(pos[nh2] - pos[cd]))): + pos[nh1], pos[nh2] = pos[nh2].copy(), pos[nh1].copy() + mask[nh1], mask[nh2] = mask[nh2].copy(), mask[nh1].copy() + + all_positions[res_index] = pos + all_positions_mask[res_index] = mask + _check_residue_distances( + all_positions, all_positions_mask, max_ca_ca_distance) + return all_positions, all_positions_mask + + +def _extract_template_features( + mmcif_object: mmcif_parsing.MmcifObject, + pdb_id: str, + mapping: Mapping[int, int], + template_sequence: str, + query_sequence: str, + template_chain_id: str, + kalign_binary_path: str) -> Tuple[Dict[str, Any], Optional[str]]: + """Parses atom positions in the target structure and aligns with the query. + + Atoms for each residue in the template structure are indexed to coincide + with their corresponding residue in the query sequence, according to the + alignment mapping provided. + + Args: + mmcif_object: mmcif_parsing.MmcifObject representing the template. + pdb_id: PDB code for the template. + mapping: Dictionary mapping indices in the query sequence to indices in + the template sequence. + template_sequence: String describing the amino acid sequence for the + template protein. + query_sequence: String describing the amino acid sequence for the query + protein. + template_chain_id: String ID describing which chain in the structure proto + should be used. + kalign_binary_path: The path to a kalign executable used for template + realignment. + + Returns: + A tuple with: + * A dictionary containing the extra features derived from the template + protein structure. + * A warning message if the hit was realigned to the actual mmCIF sequence. + Otherwise None. + + Raises: + NoChainsError: If the mmcif object doesn't contain any chains. + SequenceNotInTemplateError: If the given chain id / sequence can't + be found in the mmcif object. + QueryToTemplateAlignError: If the actual template in the mmCIF file + can't be aligned to the query. + NoAtomDataInTemplateError: If the mmcif object doesn't contain + atom positions. + TemplateAtomMaskAllZerosError: If the mmcif object doesn't have any + unmasked residues. + """ + if mmcif_object is None or not mmcif_object.chain_to_seqres: + raise NoChainsError('No chains in PDB: %s_%s' % (pdb_id, template_chain_id)) + + warning = None + try: + seqres, chain_id, mapping_offset = _find_template_in_pdb( + template_chain_id=template_chain_id, + template_sequence=template_sequence, + mmcif_object=mmcif_object) + except SequenceNotInTemplateError: + # If PDB70 contains a different version of the template, we use the sequence + # from the mmcif_object. + chain_id = template_chain_id + warning = ( + f'The exact sequence {template_sequence} was not found in ' + f'{pdb_id}_{chain_id}. Realigning the template to the actual sequence.') + logging.warning(warning) + # This throws an exception if it fails to realign the hit. + seqres, mapping = _realign_pdb_template_to_query( + old_template_sequence=template_sequence, + template_chain_id=template_chain_id, + mmcif_object=mmcif_object, + old_mapping=mapping, + kalign_binary_path=kalign_binary_path) + logging.info('Sequence in %s_%s: %s successfully realigned to %s', + pdb_id, chain_id, template_sequence, seqres) + # The template sequence changed. + template_sequence = seqres + # No mapping offset, the query is aligned to the actual sequence. + mapping_offset = 0 + + try: + # Essentially set to infinity - we don't want to reject templates unless + # they're really really bad. + all_atom_positions, all_atom_mask = _get_atom_positions( + mmcif_object, chain_id, max_ca_ca_distance=150.0) + except (CaDistanceError, KeyError) as ex: + raise NoAtomDataInTemplateError( + 'Could not get atom data (%s_%s): %s' % (pdb_id, chain_id, str(ex)) + ) from ex + + all_atom_positions = np.split(all_atom_positions, all_atom_positions.shape[0]) + all_atom_masks = np.split(all_atom_mask, all_atom_mask.shape[0]) + + output_templates_sequence = [] + templates_all_atom_positions = [] + templates_all_atom_masks = [] + + for _ in query_sequence: + # Residues in the query_sequence that are not in the template_sequence: + templates_all_atom_positions.append( + np.zeros((residue_constants.atom_type_num, 3))) + templates_all_atom_masks.append(np.zeros(residue_constants.atom_type_num)) + output_templates_sequence.append('-') + + for k, v in mapping.items(): + template_index = v + mapping_offset + templates_all_atom_positions[k] = all_atom_positions[template_index][0] + templates_all_atom_masks[k] = all_atom_masks[template_index][0] + output_templates_sequence[k] = template_sequence[v] + + # Alanine (AA with the lowest number of atoms) has 5 atoms (C, CA, CB, N, O). + if np.sum(templates_all_atom_masks) < 5: + raise TemplateAtomMaskAllZerosError( + 'Template all atom mask was all zeros: %s_%s. Residue range: %d-%d' % + (pdb_id, chain_id, min(mapping.values()) + mapping_offset, + max(mapping.values()) + mapping_offset)) + + output_templates_sequence = ''.join(output_templates_sequence) + + templates_aatype = residue_constants.sequence_to_onehot( + output_templates_sequence, residue_constants.HHBLITS_AA_TO_ID) + + return ( + { + 'template_all_atom_positions': np.array(templates_all_atom_positions), + 'template_all_atom_masks': np.array(templates_all_atom_masks), + 'template_sequence': output_templates_sequence.encode(), + 'template_aatype': np.array(templates_aatype), + 'template_domain_names': f'{pdb_id.lower()}_{chain_id}'.encode(), + }, + warning) + + +def _build_query_to_hit_index_mapping( + hit_query_sequence: str, + hit_sequence: str, + indices_hit: Sequence[int], + indices_query: Sequence[int], + original_query_sequence: str) -> Mapping[int, int]: + """Gets mapping from indices in original query sequence to indices in the hit. + + hit_query_sequence and hit_sequence are two aligned sequences containing gap + characters. hit_query_sequence contains only the part of the original query + sequence that matched the hit. When interpreting the indices from the .hhr, we + need to correct for this to recover a mapping from original query sequence to + the hit sequence. + + Args: + hit_query_sequence: The portion of the query sequence that is in the .hhr + hit + hit_sequence: The portion of the hit sequence that is in the .hhr + indices_hit: The indices for each aminoacid relative to the hit sequence + indices_query: The indices for each aminoacid relative to the original query + sequence + original_query_sequence: String describing the original query sequence. + + Returns: + Dictionary with indices in the original query sequence as keys and indices + in the hit sequence as values. + """ + # If the hit is empty (no aligned residues), return empty mapping + if not hit_query_sequence: + return {} + + # Remove gaps and find the offset of hit.query relative to original query. + hhsearch_query_sequence = hit_query_sequence.replace('-', '') + hit_sequence = hit_sequence.replace('-', '') + hhsearch_query_offset = original_query_sequence.find(hhsearch_query_sequence) + + # Index of -1 used for gap characters. Subtract the min index ignoring gaps. + min_idx = min(x for x in indices_hit if x > -1) + fixed_indices_hit = [ + x - min_idx if x > -1 else -1 for x in indices_hit + ] + + min_idx = min(x for x in indices_query if x > -1) + fixed_indices_query = [x - min_idx if x > -1 else -1 for x in indices_query] + + # Zip the corrected indices, ignore case where both seqs have gap characters. + mapping = {} + for q_i, q_t in zip(fixed_indices_query, fixed_indices_hit): + if q_t != -1 and q_i != -1: + if (q_t >= len(hit_sequence) or + q_i + hhsearch_query_offset >= len(original_query_sequence)): + continue + mapping[q_i + hhsearch_query_offset] = q_t + + return mapping + + +@dataclasses.dataclass(frozen=True) +class SingleHitResult: + features: Optional[Mapping[str, Any]] + error: Optional[str] + warning: Optional[str] + + +@functools.lru_cache(16, typed=False) +def _read_file(path): + with open(path, 'r') as f: + file_data = f.read() + return file_data + + +def _process_single_hit( + query_sequence: str, + hit: parsers.TemplateHit, + mmcif_dir: str, + max_template_date: datetime.datetime, + release_dates: Mapping[str, datetime.datetime], + obsolete_pdbs: Mapping[str, Optional[str]], + kalign_binary_path: str, + strict_error_check: bool = False) -> SingleHitResult: + """Tries to extract template features from a single HHSearch hit.""" + # Fail hard if we can't get the PDB ID and chain name from the hit. + hit_pdb_code, hit_chain_id = _get_pdb_id_and_chain(hit) + + # This hit has been removed (obsoleted) from PDB, skip it. + if hit_pdb_code in obsolete_pdbs and obsolete_pdbs[hit_pdb_code] is None: + return SingleHitResult( + features=None, error=None, warning=f'Hit {hit_pdb_code} is obsolete.') + + if hit_pdb_code not in release_dates: + if hit_pdb_code in obsolete_pdbs: + hit_pdb_code = obsolete_pdbs[hit_pdb_code] + + # Pass hit_pdb_code since it might have changed due to the pdb being obsolete. + try: + _assess_hhsearch_hit( + hit=hit, + hit_pdb_code=hit_pdb_code, + query_sequence=query_sequence, + release_dates=release_dates, + release_date_cutoff=max_template_date) + except PrefilterError as e: + msg = f'hit {hit_pdb_code}_{hit_chain_id} did not pass prefilter: {str(e)}' + logging.info(msg) + if strict_error_check and isinstance(e, (DateError, DuplicateError)): + # In strict mode we treat some prefilter cases as errors. + return SingleHitResult(features=None, error=msg, warning=None) + + return SingleHitResult(features=None, error=None, warning=None) + + mapping = _build_query_to_hit_index_mapping( + hit.query, hit.hit_sequence, hit.indices_hit, hit.indices_query, + query_sequence) + + # The mapping is from the query to the actual hit sequence, so we need to + # remove gaps (which regardless have a missing confidence score). + template_sequence = hit.hit_sequence.replace('-', '') + + cif_path = os.path.join(mmcif_dir, hit_pdb_code + '.cif') + logging.debug('Reading PDB entry from %s. Query: %s, template: %s', cif_path, + query_sequence, template_sequence) + # Fail if we can't find the mmCIF file. + cif_string = _read_file(cif_path) + + parsing_result = mmcif_parsing.parse( + file_id=hit_pdb_code, mmcif_string=cif_string) + + if parsing_result.mmcif_object is not None: + hit_release_date = datetime.datetime.strptime( + parsing_result.mmcif_object.header['release_date'], '%Y-%m-%d') + if hit_release_date > max_template_date: + error = ('Template %s date (%s) > max template date (%s).' % + (hit_pdb_code, hit_release_date, max_template_date)) + if strict_error_check: + return SingleHitResult(features=None, error=error, warning=None) + else: + logging.debug(error) + return SingleHitResult(features=None, error=None, warning=None) + + try: + features, realign_warning = _extract_template_features( + mmcif_object=parsing_result.mmcif_object, + pdb_id=hit_pdb_code, + mapping=mapping, + template_sequence=template_sequence, + query_sequence=query_sequence, + template_chain_id=hit_chain_id, + kalign_binary_path=kalign_binary_path) + if hit.sum_probs is None: + features['template_sum_probs'] = [0] + else: + features['template_sum_probs'] = [hit.sum_probs] + + # It is possible there were some errors when parsing the other chains in the + # mmCIF file, but the template features for the chain we want were still + # computed. In such case the mmCIF parsing errors are not relevant. + return SingleHitResult( + features=features, error=None, warning=realign_warning) + except (NoChainsError, NoAtomDataInTemplateError, + TemplateAtomMaskAllZerosError) as e: + # These 3 errors indicate missing mmCIF experimental data rather than a + # problem with the template search, so turn them into warnings. + warning = ('%s_%s (sum_probs: %s, rank: %s): feature extracting errors: ' + '%s, mmCIF parsing errors: %s' + % (hit_pdb_code, hit_chain_id, hit.sum_probs, hit.index, + str(e), parsing_result.errors)) + if strict_error_check: + return SingleHitResult(features=None, error=warning, warning=None) + else: + return SingleHitResult(features=None, error=None, warning=warning) + except Error as e: + error = ('%s_%s (sum_probs: %.2f, rank: %d): feature extracting errors: ' + '%s, mmCIF parsing errors: %s' + % (hit_pdb_code, hit_chain_id, hit.sum_probs, hit.index, + str(e), parsing_result.errors)) + return SingleHitResult(features=None, error=error, warning=None) + + +@dataclasses.dataclass(frozen=True) +class TemplateSearchResult: + features: Mapping[str, Any] + errors: Sequence[str] + warnings: Sequence[str] + + +class TemplateHitFeaturizer(abc.ABC): + """An abstract base class for turning template hits to template features.""" + + def __init__( + self, + mmcif_dir: str, + max_template_date: str, + max_hits: int, + kalign_binary_path: str, + release_dates_path: Optional[str], + obsolete_pdbs_path: Optional[str], + strict_error_check: bool = False): + """Initializes the Template Search. + + Args: + mmcif_dir: Path to a directory with mmCIF structures. Once a template ID + is found by HHSearch, this directory is used to retrieve the template + data. + max_template_date: The maximum date permitted for template structures. No + template with date higher than this date will be returned. In ISO8601 + date format, YYYY-MM-DD. + max_hits: The maximum number of templates that will be returned. + kalign_binary_path: The path to a kalign executable used for template + realignment. + release_dates_path: An optional path to a file with a mapping from PDB IDs + to their release dates. Thanks to this we don't have to redundantly + parse mmCIF files to get that information. + obsolete_pdbs_path: An optional path to a file containing a mapping from + obsolete PDB IDs to the PDB IDs of their replacements. + strict_error_check: If True, then the following will be treated as errors: + * If any template date is after the max_template_date. + * If any template has identical PDB ID to the query. + * If any template is a duplicate of the query. + * Any feature computation errors. + """ + self._mmcif_dir = mmcif_dir + if not glob.glob(os.path.join(self._mmcif_dir, '*.cif')): + logging.error('Could not find CIFs in %s', self._mmcif_dir) + raise ValueError(f'Could not find CIFs in {self._mmcif_dir}') + + try: + self._max_template_date = datetime.datetime.strptime( + max_template_date, '%Y-%m-%d') + except ValueError: + raise ValueError( + 'max_template_date must be set and have format YYYY-MM-DD.') + self._max_hits = max_hits + self._kalign_binary_path = kalign_binary_path + self._strict_error_check = strict_error_check + + if release_dates_path: + logging.info('Using precomputed release dates %s.', release_dates_path) + self._release_dates = _parse_release_dates(release_dates_path) + else: + self._release_dates = {} + + if obsolete_pdbs_path: + logging.info('Using precomputed obsolete pdbs %s.', obsolete_pdbs_path) + self._obsolete_pdbs = _parse_obsolete(obsolete_pdbs_path) + else: + self._obsolete_pdbs = {} + + @abc.abstractmethod + def get_templates( + self, + query_sequence: str, + hits: Sequence[parsers.TemplateHit]) -> TemplateSearchResult: + """Computes the templates for given query sequence.""" + + +class HhsearchHitFeaturizer(TemplateHitFeaturizer): + """A class for turning a3m hits from hhsearch to template features.""" + + def get_templates( + self, + query_sequence: str, + hits: Sequence[parsers.TemplateHit]) -> TemplateSearchResult: + """Computes the templates for given query sequence (more details above).""" + logging.info('Searching for template for: %s', query_sequence) + + template_features = {} + for template_feature_name in TEMPLATE_FEATURES: + template_features[template_feature_name] = [] + + num_hits = 0 + errors = [] + warnings = [] + + for hit in sorted(hits, key=lambda x: x.sum_probs, reverse=True): + # We got all the templates we wanted, stop processing hits. + if num_hits >= self._max_hits: + break + + result = _process_single_hit( + query_sequence=query_sequence, + hit=hit, + mmcif_dir=self._mmcif_dir, + max_template_date=self._max_template_date, + release_dates=self._release_dates, + obsolete_pdbs=self._obsolete_pdbs, + strict_error_check=self._strict_error_check, + kalign_binary_path=self._kalign_binary_path) + + if result.error: + errors.append(result.error) + + # There could be an error even if there are some results, e.g. thrown by + # other unparsable chains in the same mmCIF file. + if result.warning: + warnings.append(result.warning) + + if result.features is None: + logging.info('Skipped invalid hit %s, error: %s, warning: %s', + hit.name, result.error, result.warning) + else: + # Increment the hit counter, since we got features out of this hit. + num_hits += 1 + for k in template_features: + template_features[k].append(result.features[k]) + + for name in template_features: + if num_hits > 0: + template_features[name] = np.stack( + template_features[name], axis=0).astype(TEMPLATE_FEATURES[name]) + else: + # Make sure the feature has correct dtype even if empty. + template_features[name] = np.array([], dtype=TEMPLATE_FEATURES[name]) + + return TemplateSearchResult( + features=template_features, errors=errors, warnings=warnings) + + +class HmmsearchHitFeaturizer(TemplateHitFeaturizer): + """A class for turning a3m hits from hmmsearch to template features.""" + + def get_templates( + self, + query_sequence: str, + hits: Sequence[parsers.TemplateHit]) -> TemplateSearchResult: + """Computes the templates for given query sequence (more details above).""" + logging.info('Searching for template for: %s', query_sequence) + + template_features = {} + for template_feature_name in TEMPLATE_FEATURES: + template_features[template_feature_name] = [] + + already_seen = set() + errors = [] + warnings = [] + + if not hits or hits[0].sum_probs is None: + sorted_hits = hits + else: + sorted_hits = sorted(hits, key=lambda x: x.sum_probs, reverse=True) + + for hit in sorted_hits: + # We got all the templates we wanted, stop processing hits. + if len(already_seen) >= self._max_hits: + break + + result = _process_single_hit( + query_sequence=query_sequence, + hit=hit, + mmcif_dir=self._mmcif_dir, + max_template_date=self._max_template_date, + release_dates=self._release_dates, + obsolete_pdbs=self._obsolete_pdbs, + strict_error_check=self._strict_error_check, + kalign_binary_path=self._kalign_binary_path) + + if result.error: + errors.append(result.error) + + # There could be an error even if there are some results, e.g. thrown by + # other unparsable chains in the same mmCIF file. + if result.warning: + warnings.append(result.warning) + + if result.features is None: + logging.debug('Skipped invalid hit %s, error: %s, warning: %s', + hit.name, result.error, result.warning) + else: + already_seen_key = result.features['template_sequence'] + if already_seen_key in already_seen: + continue + # Increment the hit counter, since we got features out of this hit. + already_seen.add(already_seen_key) + for k in template_features: + template_features[k].append(result.features[k]) + + if already_seen: + for name in template_features: + template_features[name] = np.stack( + template_features[name], axis=0).astype(TEMPLATE_FEATURES[name]) + else: + num_res = len(query_sequence) + # Construct a default template with all zeros. + template_features = { + 'template_aatype': np.zeros( + (1, num_res, len(residue_constants.restypes_with_x_and_gap)), + np.float32), + 'template_all_atom_masks': np.zeros( + (1, num_res, residue_constants.atom_type_num), np.float32), + 'template_all_atom_positions': np.zeros( + (1, num_res, residue_constants.atom_type_num, 3), np.float32), + 'template_domain_names': np.array([''.encode()], dtype=object), + 'template_sequence': np.array([''.encode()], dtype=object), + 'template_sum_probs': np.array([0], dtype=np.float32) + } + return TemplateSearchResult( + features=template_features, errors=errors, warnings=warnings) diff --git a/alphafold/data/tools/__init__.py b/alphafold/data/tools/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..903d09793c39d08491dd9a6fecefd463b058a251 --- /dev/null +++ b/alphafold/data/tools/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Python wrappers for third party tools.""" diff --git a/alphafold/data/tools/hhblits.py b/alphafold/data/tools/hhblits.py new file mode 100644 index 0000000000000000000000000000000000000000..1d8c180d871d311ef9c57a33a2b0c57deff2dbef --- /dev/null +++ b/alphafold/data/tools/hhblits.py @@ -0,0 +1,155 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Library to run HHblits from Python.""" + +import glob +import os +import subprocess +from typing import Any, List, Mapping, Optional, Sequence + +from absl import logging +from alphafold.data.tools import utils +# Internal import (7716). + + +_HHBLITS_DEFAULT_P = 20 +_HHBLITS_DEFAULT_Z = 500 + + +class HHBlits: + """Python wrapper of the HHblits binary.""" + + def __init__(self, + *, + binary_path: str, + databases: Sequence[str], + n_cpu: int = 4, + n_iter: int = 3, + e_value: float = 0.001, + maxseq: int = 1_000_000, + realign_max: int = 100_000, + maxfilt: int = 100_000, + min_prefilter_hits: int = 1000, + all_seqs: bool = False, + alt: Optional[int] = None, + p: int = _HHBLITS_DEFAULT_P, + z: int = _HHBLITS_DEFAULT_Z): + """Initializes the Python HHblits wrapper. + + Args: + binary_path: The path to the HHblits executable. + databases: A sequence of HHblits database paths. This should be the + common prefix for the database files (i.e. up to but not including + _hhm.ffindex etc.) + n_cpu: The number of CPUs to give HHblits. + n_iter: The number of HHblits iterations. + e_value: The E-value, see HHblits docs for more details. + maxseq: The maximum number of rows in an input alignment. Note that this + parameter is only supported in HHBlits version 3.1 and higher. + realign_max: Max number of HMM-HMM hits to realign. HHblits default: 500. + maxfilt: Max number of hits allowed to pass the 2nd prefilter. + HHblits default: 20000. + min_prefilter_hits: Min number of hits to pass prefilter. + HHblits default: 100. + all_seqs: Return all sequences in the MSA / Do not filter the result MSA. + HHblits default: False. + alt: Show up to this many alternative alignments. + p: Minimum Prob for a hit to be included in the output hhr file. + HHblits default: 20. + z: Hard cap on number of hits reported in the hhr file. + HHblits default: 500. NB: The relevant HHblits flag is -Z not -z. + + Raises: + RuntimeError: If HHblits binary not found within the path. + """ + self.binary_path = binary_path + self.databases = databases + + for database_path in self.databases: + if not glob.glob(database_path + '_*'): + logging.error('Could not find HHBlits database %s', database_path) + raise ValueError(f'Could not find HHBlits database {database_path}') + + self.n_cpu = n_cpu + self.n_iter = n_iter + self.e_value = e_value + self.maxseq = maxseq + self.realign_max = realign_max + self.maxfilt = maxfilt + self.min_prefilter_hits = min_prefilter_hits + self.all_seqs = all_seqs + self.alt = alt + self.p = p + self.z = z + + def query(self, input_fasta_path: str) -> List[Mapping[str, Any]]: + """Queries the database using HHblits.""" + with utils.tmpdir_manager() as query_tmp_dir: + a3m_path = os.path.join(query_tmp_dir, 'output.a3m') + + db_cmd = [] + for db_path in self.databases: + db_cmd.append('-d') + db_cmd.append(db_path) + cmd = [ + self.binary_path, + '-i', input_fasta_path, + '-cpu', str(self.n_cpu), + '-oa3m', a3m_path, + '-o', '/dev/null', + '-n', str(self.n_iter), + '-e', str(self.e_value), + '-maxseq', str(self.maxseq), + '-realign_max', str(self.realign_max), + '-maxfilt', str(self.maxfilt), + '-min_prefilter_hits', str(self.min_prefilter_hits)] + if self.all_seqs: + cmd += ['-all'] + if self.alt: + cmd += ['-alt', str(self.alt)] + if self.p != _HHBLITS_DEFAULT_P: + cmd += ['-p', str(self.p)] + if self.z != _HHBLITS_DEFAULT_Z: + cmd += ['-Z', str(self.z)] + cmd += db_cmd + + logging.info('Launching subprocess "%s"', ' '.join(cmd)) + process = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + with utils.timing('HHblits query'): + stdout, stderr = process.communicate() + retcode = process.wait() + + if retcode: + # Logs have a 15k character limit, so log HHblits error line by line. + logging.error('HHblits failed. HHblits stderr begin:') + for error_line in stderr.decode('utf-8').splitlines(): + if error_line.strip(): + logging.error(error_line.strip()) + logging.error('HHblits stderr end') + raise RuntimeError('HHblits failed\nstdout:\n%s\n\nstderr:\n%s\n' % ( + stdout.decode('utf-8'), stderr[:500_000].decode('utf-8'))) + + with open(a3m_path) as f: + a3m = f.read() + + raw_output = dict( + a3m=a3m, + output=stdout, + stderr=stderr, + n_iter=self.n_iter, + e_value=self.e_value) + return [raw_output] diff --git a/alphafold/data/tools/hhsearch.py b/alphafold/data/tools/hhsearch.py new file mode 100644 index 0000000000000000000000000000000000000000..696d42d87754aaf306b19a26e7ad3483379a046c --- /dev/null +++ b/alphafold/data/tools/hhsearch.py @@ -0,0 +1,107 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Library to run HHsearch from Python.""" + +import glob +import os +import subprocess +from typing import Sequence + +from absl import logging + +from alphafold.data import parsers +from alphafold.data.tools import utils +# Internal import (7716). + + +class HHSearch: + """Python wrapper of the HHsearch binary.""" + + def __init__(self, + *, + binary_path: str, + databases: Sequence[str], + maxseq: int = 1_000_000): + """Initializes the Python HHsearch wrapper. + + Args: + binary_path: The path to the HHsearch executable. + databases: A sequence of HHsearch database paths. This should be the + common prefix for the database files (i.e. up to but not including + _hhm.ffindex etc.) + maxseq: The maximum number of rows in an input alignment. Note that this + parameter is only supported in HHBlits version 3.1 and higher. + + Raises: + RuntimeError: If HHsearch binary not found within the path. + """ + self.binary_path = binary_path + self.databases = databases + self.maxseq = maxseq + + for database_path in self.databases: + if not glob.glob(database_path + '_*'): + logging.error('Could not find HHsearch database %s', database_path) + raise ValueError(f'Could not find HHsearch database {database_path}') + + @property + def output_format(self) -> str: + return 'hhr' + + @property + def input_format(self) -> str: + return 'a3m' + + def query(self, a3m: str) -> str: + """Queries the database using HHsearch using a given a3m.""" + with utils.tmpdir_manager() as query_tmp_dir: + input_path = os.path.join(query_tmp_dir, 'query.a3m') + hhr_path = os.path.join(query_tmp_dir, 'output.hhr') + with open(input_path, 'w') as f: + f.write(a3m) + + db_cmd = [] + for db_path in self.databases: + db_cmd.append('-d') + db_cmd.append(db_path) + cmd = [self.binary_path, + '-i', input_path, + '-o', hhr_path, + '-maxseq', str(self.maxseq) + ] + db_cmd + + logging.info('Launching subprocess "%s"', ' '.join(cmd)) + process = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + with utils.timing('HHsearch query'): + stdout, stderr = process.communicate() + retcode = process.wait() + + if retcode: + # Stderr is truncated to prevent proto size errors in Beam. + raise RuntimeError( + 'HHSearch failed:\nstdout:\n%s\n\nstderr:\n%s\n' % ( + stdout.decode('utf-8'), stderr[:100_000].decode('utf-8'))) + + with open(hhr_path) as f: + hhr = f.read() + return hhr + + def get_template_hits(self, + output_string: str, + input_sequence: str) -> Sequence[parsers.TemplateHit]: + """Gets parsed template hits from the raw string output by the tool.""" + del input_sequence # Used by hmmseach but not needed for hhsearch. + return parsers.parse_hhr(output_string) diff --git a/alphafold/data/tools/hmmbuild.py b/alphafold/data/tools/hmmbuild.py new file mode 100644 index 0000000000000000000000000000000000000000..f8f331da01eb97da93fd003ba78b24b50c701c3b --- /dev/null +++ b/alphafold/data/tools/hmmbuild.py @@ -0,0 +1,138 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""A Python wrapper for hmmbuild - construct HMM profiles from MSA.""" + +import os +import re +import subprocess + +from absl import logging +from alphafold.data.tools import utils +# Internal import (7716). + + +class Hmmbuild(object): + """Python wrapper of the hmmbuild binary.""" + + def __init__(self, + *, + binary_path: str, + singlemx: bool = False): + """Initializes the Python hmmbuild wrapper. + + Args: + binary_path: The path to the hmmbuild executable. + singlemx: Whether to use --singlemx flag. If True, it forces HMMBuild to + just use a common substitution score matrix. + + Raises: + RuntimeError: If hmmbuild binary not found within the path. + """ + self.binary_path = binary_path + self.singlemx = singlemx + + def build_profile_from_sto(self, sto: str, model_construction='fast') -> str: + """Builds a HHM for the aligned sequences given as an A3M string. + + Args: + sto: A string with the aligned sequences in the Stockholm format. + model_construction: Whether to use reference annotation in the msa to + determine consensus columns ('hand') or default ('fast'). + + Returns: + A string with the profile in the HMM format. + + Raises: + RuntimeError: If hmmbuild fails. + """ + return self._build_profile(sto, model_construction=model_construction) + + def build_profile_from_a3m(self, a3m: str) -> str: + """Builds a HHM for the aligned sequences given as an A3M string. + + Args: + a3m: A string with the aligned sequences in the A3M format. + + Returns: + A string with the profile in the HMM format. + + Raises: + RuntimeError: If hmmbuild fails. + """ + lines = [] + for line in a3m.splitlines(): + if not line.startswith('>'): + line = re.sub('[a-z]+', '', line) # Remove inserted residues. + lines.append(line + '\n') + msa = ''.join(lines) + return self._build_profile(msa, model_construction='fast') + + def _build_profile(self, msa: str, model_construction: str = 'fast') -> str: + """Builds a HMM for the aligned sequences given as an MSA string. + + Args: + msa: A string with the aligned sequences, in A3M or STO format. + model_construction: Whether to use reference annotation in the msa to + determine consensus columns ('hand') or default ('fast'). + + Returns: + A string with the profile in the HMM format. + + Raises: + RuntimeError: If hmmbuild fails. + ValueError: If unspecified arguments are provided. + """ + if model_construction not in {'hand', 'fast'}: + raise ValueError(f'Invalid model_construction {model_construction} - only' + 'hand and fast supported.') + + with utils.tmpdir_manager() as query_tmp_dir: + input_query = os.path.join(query_tmp_dir, 'query.msa') + output_hmm_path = os.path.join(query_tmp_dir, 'output.hmm') + + with open(input_query, 'w') as f: + f.write(msa) + + cmd = [self.binary_path] + # If adding flags, we have to do so before the output and input: + + if model_construction == 'hand': + cmd.append(f'--{model_construction}') + if self.singlemx: + cmd.append('--singlemx') + cmd.extend([ + '--amino', + output_hmm_path, + input_query, + ]) + + logging.info('Launching subprocess %s', cmd) + process = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + + with utils.timing('hmmbuild query'): + stdout, stderr = process.communicate() + retcode = process.wait() + logging.info('hmmbuild stdout:\n%s\n\nstderr:\n%s\n', + stdout.decode('utf-8'), stderr.decode('utf-8')) + + if retcode: + raise RuntimeError('hmmbuild failed\nstdout:\n%s\n\nstderr:\n%s\n' + % (stdout.decode('utf-8'), stderr.decode('utf-8'))) + + with open(output_hmm_path, encoding='utf-8') as f: + hmm = f.read() + + return hmm diff --git a/alphafold/data/tools/hmmsearch.py b/alphafold/data/tools/hmmsearch.py new file mode 100644 index 0000000000000000000000000000000000000000..08f0b8d4792ba3b4cf88d040435c3f2fb6b39a13 --- /dev/null +++ b/alphafold/data/tools/hmmsearch.py @@ -0,0 +1,131 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""A Python wrapper for hmmsearch - search profile against a sequence db.""" + +import os +import subprocess +from typing import Optional, Sequence + +from absl import logging +from alphafold.data import parsers +from alphafold.data.tools import hmmbuild +from alphafold.data.tools import utils +# Internal import (7716). + + +class Hmmsearch(object): + """Python wrapper of the hmmsearch binary.""" + + def __init__(self, + *, + binary_path: str, + hmmbuild_binary_path: str, + database_path: str, + flags: Optional[Sequence[str]] = None): + """Initializes the Python hmmsearch wrapper. + + Args: + binary_path: The path to the hmmsearch executable. + hmmbuild_binary_path: The path to the hmmbuild executable. Used to build + an hmm from an input a3m. + database_path: The path to the hmmsearch database (FASTA format). + flags: List of flags to be used by hmmsearch. + + Raises: + RuntimeError: If hmmsearch binary not found within the path. + """ + self.binary_path = binary_path + self.hmmbuild_runner = hmmbuild.Hmmbuild(binary_path=hmmbuild_binary_path) + self.database_path = database_path + if flags is None: + # Default hmmsearch run settings. + flags = ['--F1', '0.1', + '--F2', '0.1', + '--F3', '0.1', + '--incE', '100', + '-E', '100', + '--domE', '100', + '--incdomE', '100'] + self.flags = flags + + if not os.path.exists(self.database_path): + logging.error('Could not find hmmsearch database %s', database_path) + raise ValueError(f'Could not find hmmsearch database {database_path}') + + @property + def output_format(self) -> str: + return 'sto' + + @property + def input_format(self) -> str: + return 'sto' + + def query(self, msa_sto: str) -> str: + """Queries the database using hmmsearch using a given stockholm msa.""" + hmm = self.hmmbuild_runner.build_profile_from_sto(msa_sto, + model_construction='hand') + return self.query_with_hmm(hmm) + + def query_with_hmm(self, hmm: str) -> str: + """Queries the database using hmmsearch using a given hmm.""" + with utils.tmpdir_manager() as query_tmp_dir: + hmm_input_path = os.path.join(query_tmp_dir, 'query.hmm') + out_path = os.path.join(query_tmp_dir, 'output.sto') + with open(hmm_input_path, 'w') as f: + f.write(hmm) + + cmd = [ + self.binary_path, + '--noali', # Don't include the alignment in stdout. + '--cpu', '8' + ] + # If adding flags, we have to do so before the output and input: + if self.flags: + cmd.extend(self.flags) + cmd.extend([ + '-A', out_path, + hmm_input_path, + self.database_path, + ]) + + logging.info('Launching sub-process %s', cmd) + process = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + with utils.timing( + f'hmmsearch ({os.path.basename(self.database_path)}) query'): + stdout, stderr = process.communicate() + retcode = process.wait() + + if retcode: + raise RuntimeError( + 'hmmsearch failed:\nstdout:\n%s\n\nstderr:\n%s\n' % ( + stdout.decode('utf-8'), stderr.decode('utf-8'))) + + with open(out_path) as f: + out_msa = f.read() + + return out_msa + + def get_template_hits(self, + output_string: str, + input_sequence: str) -> Sequence[parsers.TemplateHit]: + """Gets parsed template hits from the raw string output by the tool.""" + a3m_string = parsers.convert_stockholm_to_a3m(output_string, + remove_first_row_gaps=False) + template_hits = parsers.parse_hmmsearch_a3m( + query_sequence=input_sequence, + a3m_string=a3m_string, + skip_first=False) + return template_hits diff --git a/alphafold/data/tools/jackhmmer.py b/alphafold/data/tools/jackhmmer.py new file mode 100644 index 0000000000000000000000000000000000000000..68997f857f2c4fd3a69a59205310828a4cf08fd2 --- /dev/null +++ b/alphafold/data/tools/jackhmmer.py @@ -0,0 +1,221 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Library to run Jackhmmer from Python.""" + +from concurrent import futures +import glob +import os +import subprocess +from typing import Any, Callable, Mapping, Optional, Sequence +from urllib import request + +from absl import logging + +from alphafold.data import parsers +from alphafold.data.tools import utils +# Internal import (7716). + + +class Jackhmmer: + """Python wrapper of the Jackhmmer binary.""" + + def __init__(self, + *, + binary_path: str, + database_path: str, + n_cpu: int = 8, + n_iter: int = 1, + e_value: float = 0.0001, + z_value: Optional[int] = None, + get_tblout: bool = False, + filter_f1: float = 0.0005, + filter_f2: float = 0.00005, + filter_f3: float = 0.0000005, + incdom_e: Optional[float] = None, + dom_e: Optional[float] = None, + num_streamed_chunks: Optional[int] = None, + streaming_callback: Optional[Callable[[int], None]] = None): + """Initializes the Python Jackhmmer wrapper. + + Args: + binary_path: The path to the jackhmmer executable. + database_path: The path to the jackhmmer database (FASTA format). + n_cpu: The number of CPUs to give Jackhmmer. + n_iter: The number of Jackhmmer iterations. + e_value: The E-value, see Jackhmmer docs for more details. + z_value: The Z-value, see Jackhmmer docs for more details. + get_tblout: Whether to save tblout string. + filter_f1: MSV and biased composition pre-filter, set to >1.0 to turn off. + filter_f2: Viterbi pre-filter, set to >1.0 to turn off. + filter_f3: Forward pre-filter, set to >1.0 to turn off. + incdom_e: Domain e-value criteria for inclusion of domains in MSA/next + round. + dom_e: Domain e-value criteria for inclusion in tblout. + num_streamed_chunks: Number of database chunks to stream over. + streaming_callback: Callback function run after each chunk iteration with + the iteration number as argument. + """ + self.binary_path = binary_path + self.database_path = database_path + self.num_streamed_chunks = num_streamed_chunks + + if not os.path.exists(self.database_path) and num_streamed_chunks is None: + logging.error('Could not find Jackhmmer database %s', database_path) + raise ValueError(f'Could not find Jackhmmer database {database_path}') + + self.n_cpu = n_cpu + self.n_iter = n_iter + self.e_value = e_value + self.z_value = z_value + self.filter_f1 = filter_f1 + self.filter_f2 = filter_f2 + self.filter_f3 = filter_f3 + self.incdom_e = incdom_e + self.dom_e = dom_e + self.get_tblout = get_tblout + self.streaming_callback = streaming_callback + + def _query_chunk(self, + input_fasta_path: str, + database_path: str, + max_sequences: Optional[int] = None) -> Mapping[str, Any]: + """Queries the database chunk using Jackhmmer.""" + with utils.tmpdir_manager() as query_tmp_dir: + sto_path = os.path.join(query_tmp_dir, 'output.sto') + + # The F1/F2/F3 are the expected proportion to pass each of the filtering + # stages (which get progressively more expensive), reducing these + # speeds up the pipeline at the expensive of sensitivity. They are + # currently set very low to make querying Mgnify run in a reasonable + # amount of time. + cmd_flags = [ + # Don't pollute stdout with Jackhmmer output. + '-o', '/dev/null', + '-A', sto_path, + '--noali', + '--F1', str(self.filter_f1), + '--F2', str(self.filter_f2), + '--F3', str(self.filter_f3), + '--incE', str(self.e_value), + # Report only sequences with E-values <= x in per-sequence output. + '-E', str(self.e_value), + '--cpu', str(self.n_cpu), + '-N', str(self.n_iter) + ] + if self.get_tblout: + tblout_path = os.path.join(query_tmp_dir, 'tblout.txt') + cmd_flags.extend(['--tblout', tblout_path]) + + if self.z_value: + cmd_flags.extend(['-Z', str(self.z_value)]) + + if self.dom_e is not None: + cmd_flags.extend(['--domE', str(self.dom_e)]) + + if self.incdom_e is not None: + cmd_flags.extend(['--incdomE', str(self.incdom_e)]) + + cmd = [self.binary_path] + cmd_flags + [input_fasta_path, + database_path] + + logging.info('Launching subprocess "%s"', ' '.join(cmd)) + process = subprocess.Popen( + cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + with utils.timing( + f'Jackhmmer ({os.path.basename(database_path)}) query'): + _, stderr = process.communicate() + retcode = process.wait() + + if retcode: + raise RuntimeError( + 'Jackhmmer failed\nstderr:\n%s\n' % stderr.decode('utf-8')) + + # Get e-values for each target name + tbl = '' + if self.get_tblout: + with open(tblout_path) as f: + tbl = f.read() + + if max_sequences is None: + with open(sto_path) as f: + sto = f.read() + else: + sto = parsers.truncate_stockholm_msa(sto_path, max_sequences) + + raw_output = dict( + sto=sto, + tbl=tbl, + stderr=stderr, + n_iter=self.n_iter, + e_value=self.e_value) + + return raw_output + + def query(self, + input_fasta_path: str, + max_sequences: Optional[int] = None) -> Sequence[Mapping[str, Any]]: + """Queries the database using Jackhmmer.""" + return self.query_multiple([input_fasta_path], max_sequences)[0] + + def query_multiple( + self, + input_fasta_paths: Sequence[str], + max_sequences: Optional[int] = None, + ) -> Sequence[Sequence[Mapping[str, Any]]]: + """Queries the database for multiple queries using Jackhmmer.""" + if self.num_streamed_chunks is None: + single_chunk_results = [] + for input_fasta_path in input_fasta_paths: + single_chunk_results.append([self._query_chunk( + input_fasta_path, self.database_path, max_sequences)]) + return single_chunk_results + + db_basename = os.path.basename(self.database_path) + db_remote_chunk = lambda db_idx: f'{self.database_path}.{db_idx}' + db_local_chunk = lambda db_idx: f'/tmp/ramdisk/{db_basename}.{db_idx}' + + # Remove existing files to prevent OOM + for f in glob.glob(db_local_chunk('[0-9]*')): + try: + os.remove(f) + except OSError: + print(f'OSError while deleting {f}') + + # Download the (i+1)-th chunk while Jackhmmer is running on the i-th chunk + with futures.ThreadPoolExecutor(max_workers=2) as executor: + chunked_outputs = [[] for _ in range(len(input_fasta_paths))] + for i in range(1, self.num_streamed_chunks + 1): + # Copy the chunk locally + if i == 1: + future = executor.submit( + request.urlretrieve, db_remote_chunk(i), db_local_chunk(i)) + if i < self.num_streamed_chunks: + next_future = executor.submit( + request.urlretrieve, db_remote_chunk(i+1), db_local_chunk(i+1)) + + # Run Jackhmmer with the chunk + future.result() + for fasta_index, input_fasta_path in enumerate(input_fasta_paths): + chunked_outputs[fasta_index].append(self._query_chunk( + input_fasta_path, db_local_chunk(i), max_sequences)) + # Remove the local copy of the chunk + os.remove(db_local_chunk(i)) + # Do not set next_future for the last chunk so that this works even for + # databases with only 1 chunk. + if i < self.num_streamed_chunks: + future = next_future + if self.streaming_callback: + self.streaming_callback(i) + return chunked_outputs diff --git a/alphafold/data/tools/kalign.py b/alphafold/data/tools/kalign.py new file mode 100644 index 0000000000000000000000000000000000000000..21ce1a361b49e68935eaf06f587fbdb75f3a70a9 --- /dev/null +++ b/alphafold/data/tools/kalign.py @@ -0,0 +1,104 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""A Python wrapper for Kalign.""" +import os +import subprocess +from typing import Sequence + +from absl import logging + +from alphafold.data.tools import utils +# Internal import (7716). + + +def _to_a3m(sequences: Sequence[str]) -> str: + """Converts sequences to an a3m file.""" + names = ['sequence %d' % i for i in range(1, len(sequences) + 1)] + a3m = [] + for sequence, name in zip(sequences, names): + a3m.append(u'>' + name + u'\n') + a3m.append(sequence + u'\n') + return ''.join(a3m) + + +class Kalign: + """Python wrapper of the Kalign binary.""" + + def __init__(self, *, binary_path: str): + """Initializes the Python Kalign wrapper. + + Args: + binary_path: The path to the Kalign binary. + + Raises: + RuntimeError: If Kalign binary not found within the path. + """ + self.binary_path = binary_path + + def align(self, sequences: Sequence[str]) -> str: + """Aligns the sequences and returns the alignment in A3M string. + + Args: + sequences: A list of query sequence strings. The sequences have to be at + least 6 residues long (Kalign requires this). Note that the order in + which you give the sequences might alter the output slightly as + different alignment tree might get constructed. + + Returns: + A string with the alignment in a3m format. + + Raises: + RuntimeError: If Kalign fails. + ValueError: If any of the sequences is less than 6 residues long. + """ + logging.info('Aligning %d sequences', len(sequences)) + + for s in sequences: + if len(s) < 6: + raise ValueError('Kalign requires all sequences to be at least 6 ' + 'residues long. Got %s (%d residues).' % (s, len(s))) + + with utils.tmpdir_manager() as query_tmp_dir: + input_fasta_path = os.path.join(query_tmp_dir, 'input.fasta') + output_a3m_path = os.path.join(query_tmp_dir, 'output.a3m') + + with open(input_fasta_path, 'w') as f: + f.write(_to_a3m(sequences)) + + cmd = [ + self.binary_path, + '-i', input_fasta_path, + '-o', output_a3m_path, + '-format', 'fasta', + ] + + logging.info('Launching subprocess "%s"', ' '.join(cmd)) + process = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + + with utils.timing('Kalign query'): + stdout, stderr = process.communicate() + retcode = process.wait() + logging.info('Kalign stdout:\n%s\n\nstderr:\n%s\n', + stdout.decode('utf-8'), stderr.decode('utf-8')) + + if retcode: + raise RuntimeError('Kalign failed\nstdout:\n%s\n\nstderr:\n%s\n' + % (stdout.decode('utf-8'), stderr.decode('utf-8'))) + + with open(output_a3m_path) as f: + a3m = f.read() + + return a3m diff --git a/alphafold/data/tools/utils.py b/alphafold/data/tools/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..e65b8824d3f240e869ca073a8264f32cb224813c --- /dev/null +++ b/alphafold/data/tools/utils.py @@ -0,0 +1,40 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Common utilities for data pipeline tools.""" +import contextlib +import shutil +import tempfile +import time +from typing import Optional + +from absl import logging + + +@contextlib.contextmanager +def tmpdir_manager(base_dir: Optional[str] = None): + """Context manager that deletes a temporary directory on exit.""" + tmpdir = tempfile.mkdtemp(dir=base_dir) + try: + yield tmpdir + finally: + shutil.rmtree(tmpdir, ignore_errors=True) + + +@contextlib.contextmanager +def timing(msg: str): + logging.info('Started %s', msg) + tic = time.time() + yield + toc = time.time() + logging.info('Finished %s in %.3f seconds', msg, toc - tic) diff --git a/alphafold/model/__init__.py b/alphafold/model/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..fc2efc8d3e1439f8d264268adcde82231f784636 --- /dev/null +++ b/alphafold/model/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Alphafold model.""" diff --git a/alphafold/model/all_atom.py b/alphafold/model/all_atom.py new file mode 100644 index 0000000000000000000000000000000000000000..c8ebe8b08c068876d8903fb5b1cc861e71e9095c --- /dev/null +++ b/alphafold/model/all_atom.py @@ -0,0 +1,1141 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Ops for all atom representations. + +Generally we employ two different representations for all atom coordinates, +one is atom37 where each heavy atom corresponds to a given position in a 37 +dimensional array, This mapping is non amino acid specific, but each slot +corresponds to an atom of a given name, for example slot 12 always corresponds +to 'C delta 1', positions that are not present for a given amino acid are +zeroed out and denoted by a mask. +The other representation we employ is called atom14, this is a more dense way +of representing atoms with 14 slots. Here a given slot will correspond to a +different kind of atom depending on amino acid type, for example slot 5 +corresponds to 'N delta 2' for Aspargine, but to 'C delta 1' for Isoleucine. +14 is chosen because it is the maximum number of heavy atoms for any standard +amino acid. +The order of slots can be found in 'residue_constants.residue_atoms'. +Internally the model uses the atom14 representation because it is +computationally more efficient. +The internal atom14 representation is turned into the atom37 at the output of +the network to facilitate easier conversion to existing protein datastructures. +""" + +from typing import Dict, Optional +from alphafold.common import residue_constants + +from alphafold.model import r3 +from alphafold.model import utils +import jax +import jax.numpy as jnp +import numpy as np + + +def squared_difference(x, y): + return jnp.square(x - y) + + +def get_chi_atom_indices(): + """Returns atom indices needed to compute chi angles for all residue types. + + Returns: + A tensor of shape [residue_types=21, chis=4, atoms=4]. The residue types are + in the order specified in residue_constants.restypes + unknown residue type + at the end. For chi angles which are not defined on the residue, the + positions indices are by default set to 0. + """ + chi_atom_indices = [] + for residue_name in residue_constants.restypes: + residue_name = residue_constants.restype_1to3[residue_name] + residue_chi_angles = residue_constants.chi_angles_atoms[residue_name] + atom_indices = [] + for chi_angle in residue_chi_angles: + atom_indices.append( + [residue_constants.atom_order[atom] for atom in chi_angle]) + for _ in range(4 - len(atom_indices)): + atom_indices.append([0, 0, 0, 0]) # For chi angles not defined on the AA. + chi_atom_indices.append(atom_indices) + + chi_atom_indices.append([[0, 0, 0, 0]] * 4) # For UNKNOWN residue. + + return jnp.asarray(chi_atom_indices) + + +def atom14_to_atom37(atom14_data: jnp.ndarray, # (N, 14, ...) + batch: Dict[str, jnp.ndarray] + ) -> jnp.ndarray: # (N, 37, ...) + """Convert atom14 to atom37 representation.""" + assert len(atom14_data.shape) in [2, 3] + assert 'residx_atom37_to_atom14' in batch + assert 'atom37_atom_exists' in batch + + atom37_data = utils.batched_gather(atom14_data, + batch['residx_atom37_to_atom14'], + batch_dims=1) + if len(atom14_data.shape) == 2: + atom37_data *= batch['atom37_atom_exists'] + elif len(atom14_data.shape) == 3: + atom37_data *= batch['atom37_atom_exists'][:, :, + None].astype(atom37_data.dtype) + return atom37_data + + +def atom37_to_atom14( + atom37_data: jnp.ndarray, # (N, 37, ...) + batch: Dict[str, jnp.ndarray]) -> jnp.ndarray: # (N, 14, ...) + """Convert atom14 to atom37 representation.""" + assert len(atom37_data.shape) in [2, 3] + assert 'residx_atom14_to_atom37' in batch + assert 'atom14_atom_exists' in batch + + atom14_data = utils.batched_gather(atom37_data, + batch['residx_atom14_to_atom37'], + batch_dims=1) + if len(atom37_data.shape) == 2: + atom14_data *= batch['atom14_atom_exists'].astype(atom14_data.dtype) + elif len(atom37_data.shape) == 3: + atom14_data *= batch['atom14_atom_exists'][:, :, + None].astype(atom14_data.dtype) + return atom14_data + + +def atom37_to_frames( + aatype: jnp.ndarray, # (...) + all_atom_positions: jnp.ndarray, # (..., 37, 3) + all_atom_mask: jnp.ndarray, # (..., 37) +) -> Dict[str, jnp.ndarray]: + """Computes the frames for the up to 8 rigid groups for each residue. + + The rigid groups are defined by the possible torsions in a given amino acid. + We group the atoms according to their dependence on the torsion angles into + "rigid groups". E.g., the position of atoms in the chi2-group depend on + chi1 and chi2, but do not depend on chi3 or chi4. + Jumper et al. (2021) Suppl. Table 2 and corresponding text. + + Args: + aatype: Amino acid type, given as array with integers. + all_atom_positions: atom37 representation of all atom coordinates. + all_atom_mask: atom37 representation of mask on all atom coordinates. + Returns: + Dictionary containing: + * 'rigidgroups_gt_frames': 8 Frames corresponding to 'all_atom_positions' + represented as flat 12 dimensional array. + * 'rigidgroups_gt_exists': Mask denoting whether the atom positions for + the given frame are available in the ground truth, e.g. if they were + resolved in the experiment. + * 'rigidgroups_group_exists': Mask denoting whether given group is in + principle present for given amino acid type. + * 'rigidgroups_group_is_ambiguous': Mask denoting whether frame is + affected by naming ambiguity. + * 'rigidgroups_alt_gt_frames': 8 Frames with alternative atom renaming + corresponding to 'all_atom_positions' represented as flat + 12 dimensional array. + """ + # 0: 'backbone group', + # 1: 'pre-omega-group', (empty) + # 2: 'phi-group', (currently empty, because it defines only hydrogens) + # 3: 'psi-group', + # 4,5,6,7: 'chi1,2,3,4-group' + aatype_in_shape = aatype.shape + + # If there is a batch axis, just flatten it away, and reshape everything + # back at the end of the function. + aatype = jnp.reshape(aatype, [-1]) + all_atom_positions = jnp.reshape(all_atom_positions, [-1, 37, 3]) + all_atom_mask = jnp.reshape(all_atom_mask, [-1, 37]) + + # Create an array with the atom names. + # shape (num_restypes, num_rigidgroups, 3_atoms): (21, 8, 3) + restype_rigidgroup_base_atom_names = np.full([21, 8, 3], '', dtype=object) + + # 0: backbone frame + restype_rigidgroup_base_atom_names[:, 0, :] = ['C', 'CA', 'N'] + + # 3: 'psi-group' + restype_rigidgroup_base_atom_names[:, 3, :] = ['CA', 'C', 'O'] + + # 4,5,6,7: 'chi1,2,3,4-group' + for restype, restype_letter in enumerate(residue_constants.restypes): + resname = residue_constants.restype_1to3[restype_letter] + for chi_idx in range(4): + if residue_constants.chi_angles_mask[restype][chi_idx]: + atom_names = residue_constants.chi_angles_atoms[resname][chi_idx] + restype_rigidgroup_base_atom_names[ + restype, chi_idx + 4, :] = atom_names[1:] + + # Create mask for existing rigid groups. + restype_rigidgroup_mask = np.zeros([21, 8], dtype=np.float32) + restype_rigidgroup_mask[:, 0] = 1 + restype_rigidgroup_mask[:, 3] = 1 + restype_rigidgroup_mask[:20, 4:] = residue_constants.chi_angles_mask + + # Translate atom names into atom37 indices. + lookuptable = residue_constants.atom_order.copy() + lookuptable[''] = 0 + restype_rigidgroup_base_atom37_idx = np.vectorize(lambda x: lookuptable[x])( + restype_rigidgroup_base_atom_names) + + # Compute the gather indices for all residues in the chain. + # shape (N, 8, 3) + residx_rigidgroup_base_atom37_idx = utils.batched_gather( + restype_rigidgroup_base_atom37_idx, aatype) + + # Gather the base atom positions for each rigid group. + base_atom_pos = utils.batched_gather( + all_atom_positions, + residx_rigidgroup_base_atom37_idx, + batch_dims=1) + + # Compute the Rigids. + gt_frames = r3.rigids_from_3_points( + point_on_neg_x_axis=r3.vecs_from_tensor(base_atom_pos[:, :, 0, :]), + origin=r3.vecs_from_tensor(base_atom_pos[:, :, 1, :]), + point_on_xy_plane=r3.vecs_from_tensor(base_atom_pos[:, :, 2, :]) + ) + + # Compute a mask whether the group exists. + # (N, 8) + group_exists = utils.batched_gather(restype_rigidgroup_mask, aatype) + + # Compute a mask whether ground truth exists for the group + gt_atoms_exist = utils.batched_gather( # shape (N, 8, 3) + all_atom_mask.astype(jnp.float32), + residx_rigidgroup_base_atom37_idx, + batch_dims=1) + gt_exists = jnp.min(gt_atoms_exist, axis=-1) * group_exists # (N, 8) + + # Adapt backbone frame to old convention (mirror x-axis and z-axis). + rots = np.tile(np.eye(3, dtype=np.float32), [8, 1, 1]) + rots[0, 0, 0] = -1 + rots[0, 2, 2] = -1 + gt_frames = r3.rigids_mul_rots(gt_frames, r3.rots_from_tensor3x3(rots)) + + # The frames for ambiguous rigid groups are just rotated by 180 degree around + # the x-axis. The ambiguous group is always the last chi-group. + restype_rigidgroup_is_ambiguous = np.zeros([21, 8], dtype=np.float32) + restype_rigidgroup_rots = np.tile(np.eye(3, dtype=np.float32), [21, 8, 1, 1]) + + for resname, _ in residue_constants.residue_atom_renaming_swaps.items(): + restype = residue_constants.restype_order[ + residue_constants.restype_3to1[resname]] + chi_idx = int(sum(residue_constants.chi_angles_mask[restype]) - 1) + restype_rigidgroup_is_ambiguous[restype, chi_idx + 4] = 1 + restype_rigidgroup_rots[restype, chi_idx + 4, 1, 1] = -1 + restype_rigidgroup_rots[restype, chi_idx + 4, 2, 2] = -1 + + # Gather the ambiguity information for each residue. + residx_rigidgroup_is_ambiguous = utils.batched_gather( + restype_rigidgroup_is_ambiguous, aatype) + residx_rigidgroup_ambiguity_rot = utils.batched_gather( + restype_rigidgroup_rots, aatype) + + # Create the alternative ground truth frames. + alt_gt_frames = r3.rigids_mul_rots( + gt_frames, r3.rots_from_tensor3x3(residx_rigidgroup_ambiguity_rot)) + + gt_frames_flat12 = r3.rigids_to_tensor_flat12(gt_frames) + alt_gt_frames_flat12 = r3.rigids_to_tensor_flat12(alt_gt_frames) + + # reshape back to original residue layout + gt_frames_flat12 = jnp.reshape(gt_frames_flat12, aatype_in_shape + (8, 12)) + gt_exists = jnp.reshape(gt_exists, aatype_in_shape + (8,)) + group_exists = jnp.reshape(group_exists, aatype_in_shape + (8,)) + gt_frames_flat12 = jnp.reshape(gt_frames_flat12, aatype_in_shape + (8, 12)) + residx_rigidgroup_is_ambiguous = jnp.reshape(residx_rigidgroup_is_ambiguous, + aatype_in_shape + (8,)) + alt_gt_frames_flat12 = jnp.reshape(alt_gt_frames_flat12, + aatype_in_shape + (8, 12,)) + + return { + 'rigidgroups_gt_frames': gt_frames_flat12, # (..., 8, 12) + 'rigidgroups_gt_exists': gt_exists, # (..., 8) + 'rigidgroups_group_exists': group_exists, # (..., 8) + 'rigidgroups_group_is_ambiguous': + residx_rigidgroup_is_ambiguous, # (..., 8) + 'rigidgroups_alt_gt_frames': alt_gt_frames_flat12, # (..., 8, 12) + } + + +def atom37_to_torsion_angles( + aatype: jnp.ndarray, # (B, N) + all_atom_pos: jnp.ndarray, # (B, N, 37, 3) + all_atom_mask: jnp.ndarray, # (B, N, 37) + placeholder_for_undefined=False, +) -> Dict[str, jnp.ndarray]: + """Computes the 7 torsion angles (in sin, cos encoding) for each residue. + + The 7 torsion angles are in the order + '[pre_omega, phi, psi, chi_1, chi_2, chi_3, chi_4]', + here pre_omega denotes the omega torsion angle between the given amino acid + and the previous amino acid. + + Args: + aatype: Amino acid type, given as array with integers. + all_atom_pos: atom37 representation of all atom coordinates. + all_atom_mask: atom37 representation of mask on all atom coordinates. + placeholder_for_undefined: flag denoting whether to set masked torsion + angles to zero. + Returns: + Dict containing: + * 'torsion_angles_sin_cos': Array with shape (B, N, 7, 2) where the final + 2 dimensions denote sin and cos respectively + * 'alt_torsion_angles_sin_cos': same as 'torsion_angles_sin_cos', but + with the angle shifted by pi for all chi angles affected by the naming + ambiguities. + * 'torsion_angles_mask': Mask for which chi angles are present. + """ + + # Map aatype > 20 to 'Unknown' (20). + aatype = jnp.minimum(aatype, 20) + + # Compute the backbone angles. + num_batch, num_res = aatype.shape + + pad = jnp.zeros([num_batch, 1, 37, 3], jnp.float32) + prev_all_atom_pos = jnp.concatenate([pad, all_atom_pos[:, :-1, :, :]], axis=1) + + pad = jnp.zeros([num_batch, 1, 37], jnp.float32) + prev_all_atom_mask = jnp.concatenate([pad, all_atom_mask[:, :-1, :]], axis=1) + + # For each torsion angle collect the 4 atom positions that define this angle. + # shape (B, N, atoms=4, xyz=3) + pre_omega_atom_pos = jnp.concatenate( + [prev_all_atom_pos[:, :, 1:3, :], # prev CA, C + all_atom_pos[:, :, 0:2, :] # this N, CA + ], axis=-2) + phi_atom_pos = jnp.concatenate( + [prev_all_atom_pos[:, :, 2:3, :], # prev C + all_atom_pos[:, :, 0:3, :] # this N, CA, C + ], axis=-2) + psi_atom_pos = jnp.concatenate( + [all_atom_pos[:, :, 0:3, :], # this N, CA, C + all_atom_pos[:, :, 4:5, :] # this O + ], axis=-2) + + # Collect the masks from these atoms. + # Shape [batch, num_res] + pre_omega_mask = ( + jnp.prod(prev_all_atom_mask[:, :, 1:3], axis=-1) # prev CA, C + * jnp.prod(all_atom_mask[:, :, 0:2], axis=-1)) # this N, CA + phi_mask = ( + prev_all_atom_mask[:, :, 2] # prev C + * jnp.prod(all_atom_mask[:, :, 0:3], axis=-1)) # this N, CA, C + psi_mask = ( + jnp.prod(all_atom_mask[:, :, 0:3], axis=-1) * # this N, CA, C + all_atom_mask[:, :, 4]) # this O + + # Collect the atoms for the chi-angles. + # Compute the table of chi angle indices. Shape: [restypes, chis=4, atoms=4]. + chi_atom_indices = get_chi_atom_indices() + # Select atoms to compute chis. Shape: [batch, num_res, chis=4, atoms=4]. + atom_indices = utils.batched_gather( + params=chi_atom_indices, indices=aatype, axis=0, batch_dims=0) + # Gather atom positions. Shape: [batch, num_res, chis=4, atoms=4, xyz=3]. + chis_atom_pos = utils.batched_gather( + params=all_atom_pos, indices=atom_indices, axis=-2, + batch_dims=2) + + # Copy the chi angle mask, add the UNKNOWN residue. Shape: [restypes, 4]. + chi_angles_mask = list(residue_constants.chi_angles_mask) + chi_angles_mask.append([0.0, 0.0, 0.0, 0.0]) + chi_angles_mask = jnp.asarray(chi_angles_mask) + + # Compute the chi angle mask. I.e. which chis angles exist according to the + # aatype. Shape [batch, num_res, chis=4]. + chis_mask = utils.batched_gather(params=chi_angles_mask, indices=aatype, + axis=0, batch_dims=0) + + # Constrain the chis_mask to those chis, where the ground truth coordinates of + # all defining four atoms are available. + # Gather the chi angle atoms mask. Shape: [batch, num_res, chis=4, atoms=4]. + chi_angle_atoms_mask = utils.batched_gather( + params=all_atom_mask, indices=atom_indices, axis=-1, + batch_dims=2) + # Check if all 4 chi angle atoms were set. Shape: [batch, num_res, chis=4]. + chi_angle_atoms_mask = jnp.prod(chi_angle_atoms_mask, axis=[-1]) + chis_mask = chis_mask * (chi_angle_atoms_mask).astype(jnp.float32) + + # Stack all torsion angle atom positions. + # Shape (B, N, torsions=7, atoms=4, xyz=3) + torsions_atom_pos = jnp.concatenate( + [pre_omega_atom_pos[:, :, None, :, :], + phi_atom_pos[:, :, None, :, :], + psi_atom_pos[:, :, None, :, :], + chis_atom_pos + ], axis=2) + + # Stack up masks for all torsion angles. + # shape (B, N, torsions=7) + torsion_angles_mask = jnp.concatenate( + [pre_omega_mask[:, :, None], + phi_mask[:, :, None], + psi_mask[:, :, None], + chis_mask + ], axis=2) + + # Create a frame from the first three atoms: + # First atom: point on x-y-plane + # Second atom: point on negative x-axis + # Third atom: origin + # r3.Rigids (B, N, torsions=7) + torsion_frames = r3.rigids_from_3_points( + point_on_neg_x_axis=r3.vecs_from_tensor(torsions_atom_pos[:, :, :, 1, :]), + origin=r3.vecs_from_tensor(torsions_atom_pos[:, :, :, 2, :]), + point_on_xy_plane=r3.vecs_from_tensor(torsions_atom_pos[:, :, :, 0, :])) + + # Compute the position of the forth atom in this frame (y and z coordinate + # define the chi angle) + # r3.Vecs (B, N, torsions=7) + forth_atom_rel_pos = r3.rigids_mul_vecs( + r3.invert_rigids(torsion_frames), + r3.vecs_from_tensor(torsions_atom_pos[:, :, :, 3, :])) + + # Normalize to have the sin and cos of the torsion angle. + # jnp.ndarray (B, N, torsions=7, sincos=2) + torsion_angles_sin_cos = jnp.stack( + [forth_atom_rel_pos.z, forth_atom_rel_pos.y], axis=-1) + torsion_angles_sin_cos /= jnp.sqrt( + jnp.sum(jnp.square(torsion_angles_sin_cos), axis=-1, keepdims=True) + + 1e-8) + + # Mirror psi, because we computed it from the Oxygen-atom. + torsion_angles_sin_cos *= jnp.asarray( + [1., 1., -1., 1., 1., 1., 1.])[None, None, :, None] + + # Create alternative angles for ambiguous atom names. + chi_is_ambiguous = utils.batched_gather( + jnp.asarray(residue_constants.chi_pi_periodic), aatype) + mirror_torsion_angles = jnp.concatenate( + [jnp.ones([num_batch, num_res, 3]), + 1.0 - 2.0 * chi_is_ambiguous], axis=-1) + alt_torsion_angles_sin_cos = ( + torsion_angles_sin_cos * mirror_torsion_angles[:, :, :, None]) + + if placeholder_for_undefined: + # Add placeholder torsions in place of undefined torsion angles + # (e.g. N-terminus pre-omega) + placeholder_torsions = jnp.stack([ + jnp.ones(torsion_angles_sin_cos.shape[:-1]), + jnp.zeros(torsion_angles_sin_cos.shape[:-1]) + ], axis=-1) + torsion_angles_sin_cos = torsion_angles_sin_cos * torsion_angles_mask[ + ..., None] + placeholder_torsions * (1 - torsion_angles_mask[..., None]) + alt_torsion_angles_sin_cos = alt_torsion_angles_sin_cos * torsion_angles_mask[ + ..., None] + placeholder_torsions * (1 - torsion_angles_mask[..., None]) + + return { + 'torsion_angles_sin_cos': torsion_angles_sin_cos, # (B, N, 7, 2) + 'alt_torsion_angles_sin_cos': alt_torsion_angles_sin_cos, # (B, N, 7, 2) + 'torsion_angles_mask': torsion_angles_mask # (B, N, 7) + } + + +def torsion_angles_to_frames( + aatype: jnp.ndarray, # (N) + backb_to_global: r3.Rigids, # (N) + torsion_angles_sin_cos: jnp.ndarray # (N, 7, 2) +) -> r3.Rigids: # (N, 8) + """Compute rigid group frames from torsion angles. + + Jumper et al. (2021) Suppl. Alg. 24 "computeAllAtomCoordinates" lines 2-10 + Jumper et al. (2021) Suppl. Alg. 25 "makeRotX" + + Args: + aatype: aatype for each residue + backb_to_global: Rigid transformations describing transformation from + backbone frame to global frame. + torsion_angles_sin_cos: sin and cosine of the 7 torsion angles + Returns: + Frames corresponding to all the Sidechain Rigid Transforms + """ + assert len(aatype.shape) == 1 + assert len(backb_to_global.rot.xx.shape) == 1 + assert len(torsion_angles_sin_cos.shape) == 3 + assert torsion_angles_sin_cos.shape[1] == 7 + assert torsion_angles_sin_cos.shape[2] == 2 + + # Gather the default frames for all rigid groups. + # r3.Rigids with shape (N, 8) + m = utils.batched_gather(residue_constants.restype_rigid_group_default_frame, + aatype) + default_frames = r3.rigids_from_tensor4x4(m) + + # Create the rotation matrices according to the given angles (each frame is + # defined such that its rotation is around the x-axis). + sin_angles = torsion_angles_sin_cos[..., 0] + cos_angles = torsion_angles_sin_cos[..., 1] + + # insert zero rotation for backbone group. + num_residues, = aatype.shape + sin_angles = jnp.concatenate([jnp.zeros([num_residues, 1]), sin_angles], + axis=-1) + cos_angles = jnp.concatenate([jnp.ones([num_residues, 1]), cos_angles], + axis=-1) + zeros = jnp.zeros_like(sin_angles) + ones = jnp.ones_like(sin_angles) + + # all_rots are r3.Rots with shape (N, 8) + all_rots = r3.Rots(ones, zeros, zeros, + zeros, cos_angles, -sin_angles, + zeros, sin_angles, cos_angles) + + # Apply rotations to the frames. + all_frames = r3.rigids_mul_rots(default_frames, all_rots) + + # chi2, chi3, and chi4 frames do not transform to the backbone frame but to + # the previous frame. So chain them up accordingly. + chi2_frame_to_frame = jax.tree_map(lambda x: x[:, 5], all_frames) + chi3_frame_to_frame = jax.tree_map(lambda x: x[:, 6], all_frames) + chi4_frame_to_frame = jax.tree_map(lambda x: x[:, 7], all_frames) + + chi1_frame_to_backb = jax.tree_map(lambda x: x[:, 4], all_frames) + chi2_frame_to_backb = r3.rigids_mul_rigids(chi1_frame_to_backb, + chi2_frame_to_frame) + chi3_frame_to_backb = r3.rigids_mul_rigids(chi2_frame_to_backb, + chi3_frame_to_frame) + chi4_frame_to_backb = r3.rigids_mul_rigids(chi3_frame_to_backb, + chi4_frame_to_frame) + + # Recombine them to a r3.Rigids with shape (N, 8). + def _concat_frames(xall, x5, x6, x7): + return jnp.concatenate( + [xall[:, 0:5], x5[:, None], x6[:, None], x7[:, None]], axis=-1) + + all_frames_to_backb = jax.tree_map( + _concat_frames, + all_frames, + chi2_frame_to_backb, + chi3_frame_to_backb, + chi4_frame_to_backb) + + # Create the global frames. + # shape (N, 8) + all_frames_to_global = r3.rigids_mul_rigids( + jax.tree_map(lambda x: x[:, None], backb_to_global), + all_frames_to_backb) + + return all_frames_to_global + + +def frames_and_literature_positions_to_atom14_pos( + aatype: jnp.ndarray, # (N) + all_frames_to_global: r3.Rigids # (N, 8) +) -> r3.Vecs: # (N, 14) + """Put atom literature positions (atom14 encoding) in each rigid group. + + Jumper et al. (2021) Suppl. Alg. 24 "computeAllAtomCoordinates" line 11 + + Args: + aatype: aatype for each residue. + all_frames_to_global: All per residue coordinate frames. + Returns: + Positions of all atom coordinates in global frame. + """ + + # Pick the appropriate transform for every atom. + residx_to_group_idx = utils.batched_gather( + residue_constants.restype_atom14_to_rigid_group, aatype) + group_mask = jax.nn.one_hot( + residx_to_group_idx, num_classes=8) # shape (N, 14, 8) + + # r3.Rigids with shape (N, 14) + map_atoms_to_global = jax.tree_map( + lambda x: jnp.sum(x[:, None, :] * group_mask, axis=-1), + all_frames_to_global) + + # Gather the literature atom positions for each residue. + # r3.Vecs with shape (N, 14) + lit_positions = r3.vecs_from_tensor( + utils.batched_gather( + residue_constants.restype_atom14_rigid_group_positions, aatype)) + + # Transform each atom from its local frame to the global frame. + # r3.Vecs with shape (N, 14) + pred_positions = r3.rigids_mul_vecs(map_atoms_to_global, lit_positions) + + # Mask out non-existing atoms. + mask = utils.batched_gather(residue_constants.restype_atom14_mask, aatype) + pred_positions = jax.tree_map(lambda x: x * mask, pred_positions) + + return pred_positions + + +def extreme_ca_ca_distance_violations( + pred_atom_positions: jnp.ndarray, # (N, 37(14), 3) + pred_atom_mask: jnp.ndarray, # (N, 37(14)) + residue_index: jnp.ndarray, # (N) + max_angstrom_tolerance=1.5 + ) -> jnp.ndarray: + """Counts residues whose Ca is a large distance from its neighbour. + + Measures the fraction of CA-CA pairs between consecutive amino acids that are + more than 'max_angstrom_tolerance' apart. + + Args: + pred_atom_positions: Atom positions in atom37/14 representation + pred_atom_mask: Atom mask in atom37/14 representation + residue_index: Residue index for given amino acid, this is assumed to be + monotonically increasing. + max_angstrom_tolerance: Maximum distance allowed to not count as violation. + Returns: + Fraction of consecutive CA-CA pairs with violation. + """ + this_ca_pos = pred_atom_positions[:-1, 1, :] # (N - 1, 3) + this_ca_mask = pred_atom_mask[:-1, 1] # (N - 1) + next_ca_pos = pred_atom_positions[1:, 1, :] # (N - 1, 3) + next_ca_mask = pred_atom_mask[1:, 1] # (N - 1) + has_no_gap_mask = ((residue_index[1:] - residue_index[:-1]) == 1.0).astype( + jnp.float32) + ca_ca_distance = jnp.sqrt( + 1e-6 + jnp.sum(squared_difference(this_ca_pos, next_ca_pos), axis=-1)) + violations = (ca_ca_distance - + residue_constants.ca_ca) > max_angstrom_tolerance + mask = this_ca_mask * next_ca_mask * has_no_gap_mask + return utils.mask_mean(mask=mask, value=violations) + + +def between_residue_bond_loss( + pred_atom_positions: jnp.ndarray, # (N, 37(14), 3) + pred_atom_mask: jnp.ndarray, # (N, 37(14)) + residue_index: jnp.ndarray, # (N) + aatype: jnp.ndarray, # (N) + tolerance_factor_soft=12.0, + tolerance_factor_hard=12.0 +) -> Dict[str, jnp.ndarray]: + """Flat-bottom loss to penalize structural violations between residues. + + This is a loss penalizing any violation of the geometry around the peptide + bond between consecutive amino acids. This loss corresponds to + Jumper et al. (2021) Suppl. Sec. 1.9.11, eq 44, 45. + + Args: + pred_atom_positions: Atom positions in atom37/14 representation + pred_atom_mask: Atom mask in atom37/14 representation + residue_index: Residue index for given amino acid, this is assumed to be + monotonically increasing. + aatype: Amino acid type of given residue + tolerance_factor_soft: soft tolerance factor measured in standard deviations + of pdb distributions + tolerance_factor_hard: hard tolerance factor measured in standard deviations + of pdb distributions + + Returns: + Dict containing: + * 'c_n_loss_mean': Loss for peptide bond length violations + * 'ca_c_n_loss_mean': Loss for violations of bond angle around C spanned + by CA, C, N + * 'c_n_ca_loss_mean': Loss for violations of bond angle around N spanned + by C, N, CA + * 'per_residue_loss_sum': sum of all losses for each residue + * 'per_residue_violation_mask': mask denoting all residues with violation + present. + """ + assert len(pred_atom_positions.shape) == 3 + assert len(pred_atom_mask.shape) == 2 + assert len(residue_index.shape) == 1 + assert len(aatype.shape) == 1 + + # Get the positions of the relevant backbone atoms. + this_ca_pos = pred_atom_positions[:-1, 1, :] # (N - 1, 3) + this_ca_mask = pred_atom_mask[:-1, 1] # (N - 1) + this_c_pos = pred_atom_positions[:-1, 2, :] # (N - 1, 3) + this_c_mask = pred_atom_mask[:-1, 2] # (N - 1) + next_n_pos = pred_atom_positions[1:, 0, :] # (N - 1, 3) + next_n_mask = pred_atom_mask[1:, 0] # (N - 1) + next_ca_pos = pred_atom_positions[1:, 1, :] # (N - 1, 3) + next_ca_mask = pred_atom_mask[1:, 1] # (N - 1) + has_no_gap_mask = ((residue_index[1:] - residue_index[:-1]) == 1.0).astype( + jnp.float32) + + # Compute loss for the C--N bond. + c_n_bond_length = jnp.sqrt( + 1e-6 + jnp.sum(squared_difference(this_c_pos, next_n_pos), axis=-1)) + + # The C-N bond to proline has slightly different length because of the ring. + next_is_proline = ( + aatype[1:] == residue_constants.resname_to_idx['PRO']).astype(jnp.float32) + gt_length = ( + (1. - next_is_proline) * residue_constants.between_res_bond_length_c_n[0] + + next_is_proline * residue_constants.between_res_bond_length_c_n[1]) + gt_stddev = ( + (1. - next_is_proline) * + residue_constants.between_res_bond_length_stddev_c_n[0] + + next_is_proline * residue_constants.between_res_bond_length_stddev_c_n[1]) + c_n_bond_length_error = jnp.sqrt(1e-6 + + jnp.square(c_n_bond_length - gt_length)) + c_n_loss_per_residue = jax.nn.relu( + c_n_bond_length_error - tolerance_factor_soft * gt_stddev) + mask = this_c_mask * next_n_mask * has_no_gap_mask + c_n_loss = jnp.sum(mask * c_n_loss_per_residue) / (jnp.sum(mask) + 1e-6) + c_n_violation_mask = mask * ( + c_n_bond_length_error > (tolerance_factor_hard * gt_stddev)) + + # Compute loss for the angles. + ca_c_bond_length = jnp.sqrt(1e-6 + jnp.sum( + squared_difference(this_ca_pos, this_c_pos), axis=-1)) + n_ca_bond_length = jnp.sqrt(1e-6 + jnp.sum( + squared_difference(next_n_pos, next_ca_pos), axis=-1)) + + c_ca_unit_vec = (this_ca_pos - this_c_pos) / ca_c_bond_length[:, None] + c_n_unit_vec = (next_n_pos - this_c_pos) / c_n_bond_length[:, None] + n_ca_unit_vec = (next_ca_pos - next_n_pos) / n_ca_bond_length[:, None] + + ca_c_n_cos_angle = jnp.sum(c_ca_unit_vec * c_n_unit_vec, axis=-1) + gt_angle = residue_constants.between_res_cos_angles_ca_c_n[0] + gt_stddev = residue_constants.between_res_bond_length_stddev_c_n[0] + ca_c_n_cos_angle_error = jnp.sqrt( + 1e-6 + jnp.square(ca_c_n_cos_angle - gt_angle)) + ca_c_n_loss_per_residue = jax.nn.relu( + ca_c_n_cos_angle_error - tolerance_factor_soft * gt_stddev) + mask = this_ca_mask * this_c_mask * next_n_mask * has_no_gap_mask + ca_c_n_loss = jnp.sum(mask * ca_c_n_loss_per_residue) / (jnp.sum(mask) + 1e-6) + ca_c_n_violation_mask = mask * (ca_c_n_cos_angle_error > + (tolerance_factor_hard * gt_stddev)) + + c_n_ca_cos_angle = jnp.sum((-c_n_unit_vec) * n_ca_unit_vec, axis=-1) + gt_angle = residue_constants.between_res_cos_angles_c_n_ca[0] + gt_stddev = residue_constants.between_res_cos_angles_c_n_ca[1] + c_n_ca_cos_angle_error = jnp.sqrt( + 1e-6 + jnp.square(c_n_ca_cos_angle - gt_angle)) + c_n_ca_loss_per_residue = jax.nn.relu( + c_n_ca_cos_angle_error - tolerance_factor_soft * gt_stddev) + mask = this_c_mask * next_n_mask * next_ca_mask * has_no_gap_mask + c_n_ca_loss = jnp.sum(mask * c_n_ca_loss_per_residue) / (jnp.sum(mask) + 1e-6) + c_n_ca_violation_mask = mask * ( + c_n_ca_cos_angle_error > (tolerance_factor_hard * gt_stddev)) + + # Compute a per residue loss (equally distribute the loss to both + # neighbouring residues). + per_residue_loss_sum = (c_n_loss_per_residue + + ca_c_n_loss_per_residue + + c_n_ca_loss_per_residue) + per_residue_loss_sum = 0.5 * (jnp.pad(per_residue_loss_sum, [[0, 1]]) + + jnp.pad(per_residue_loss_sum, [[1, 0]])) + + # Compute hard violations. + violation_mask = jnp.max( + jnp.stack([c_n_violation_mask, + ca_c_n_violation_mask, + c_n_ca_violation_mask]), axis=0) + violation_mask = jnp.maximum( + jnp.pad(violation_mask, [[0, 1]]), + jnp.pad(violation_mask, [[1, 0]])) + + return {'c_n_loss_mean': c_n_loss, # shape () + 'ca_c_n_loss_mean': ca_c_n_loss, # shape () + 'c_n_ca_loss_mean': c_n_ca_loss, # shape () + 'per_residue_loss_sum': per_residue_loss_sum, # shape (N) + 'per_residue_violation_mask': violation_mask # shape (N) + } + + +def between_residue_clash_loss( + atom14_pred_positions: jnp.ndarray, # (N, 14, 3) + atom14_atom_exists: jnp.ndarray, # (N, 14) + atom14_atom_radius: jnp.ndarray, # (N, 14) + residue_index: jnp.ndarray, # (N) + overlap_tolerance_soft=1.5, + overlap_tolerance_hard=1.5 +) -> Dict[str, jnp.ndarray]: + """Loss to penalize steric clashes between residues. + + This is a loss penalizing any steric clashes due to non bonded atoms in + different peptides coming too close. This loss corresponds to the part with + different residues of + Jumper et al. (2021) Suppl. Sec. 1.9.11, eq 46. + + Args: + atom14_pred_positions: Predicted positions of atoms in + global prediction frame + atom14_atom_exists: Mask denoting whether atom at positions exists for given + amino acid type + atom14_atom_radius: Van der Waals radius for each atom. + residue_index: Residue index for given amino acid. + overlap_tolerance_soft: Soft tolerance factor. + overlap_tolerance_hard: Hard tolerance factor. + + Returns: + Dict containing: + * 'mean_loss': average clash loss + * 'per_atom_loss_sum': sum of all clash losses per atom, shape (N, 14) + * 'per_atom_clash_mask': mask whether atom clashes with any other atom + shape (N, 14) + """ + assert len(atom14_pred_positions.shape) == 3 + assert len(atom14_atom_exists.shape) == 2 + assert len(atom14_atom_radius.shape) == 2 + assert len(residue_index.shape) == 1 + + # Create the distance matrix. + # (N, N, 14, 14) + dists = jnp.sqrt(1e-10 + jnp.sum( + squared_difference( + atom14_pred_positions[:, None, :, None, :], + atom14_pred_positions[None, :, None, :, :]), + axis=-1)) + + # Create the mask for valid distances. + # shape (N, N, 14, 14) + dists_mask = (atom14_atom_exists[:, None, :, None] * + atom14_atom_exists[None, :, None, :]) + + # Mask out all the duplicate entries in the lower triangular matrix. + # Also mask out the diagonal (atom-pairs from the same residue) -- these atoms + # are handled separately. + dists_mask *= ( + residue_index[:, None, None, None] < residue_index[None, :, None, None]) + + # Backbone C--N bond between subsequent residues is no clash. + c_one_hot = jax.nn.one_hot(2, num_classes=14) + n_one_hot = jax.nn.one_hot(0, num_classes=14) + neighbour_mask = ((residue_index[:, None, None, None] + + 1) == residue_index[None, :, None, None]) + c_n_bonds = neighbour_mask * c_one_hot[None, None, :, + None] * n_one_hot[None, None, None, :] + dists_mask *= (1. - c_n_bonds) + + # Disulfide bridge between two cysteines is no clash. + cys_sg_idx = residue_constants.restype_name_to_atom14_names['CYS'].index('SG') + cys_sg_one_hot = jax.nn.one_hot(cys_sg_idx, num_classes=14) + disulfide_bonds = (cys_sg_one_hot[None, None, :, None] * + cys_sg_one_hot[None, None, None, :]) + dists_mask *= (1. - disulfide_bonds) + + # Compute the lower bound for the allowed distances. + # shape (N, N, 14, 14) + dists_lower_bound = dists_mask * (atom14_atom_radius[:, None, :, None] + + atom14_atom_radius[None, :, None, :]) + + # Compute the error. + # shape (N, N, 14, 14) + dists_to_low_error = dists_mask * jax.nn.relu( + dists_lower_bound - overlap_tolerance_soft - dists) + + # Compute the mean loss. + # shape () + mean_loss = (jnp.sum(dists_to_low_error) + / (1e-6 + jnp.sum(dists_mask))) + + # Compute the per atom loss sum. + # shape (N, 14) + per_atom_loss_sum = (jnp.sum(dists_to_low_error, axis=[0, 2]) + + jnp.sum(dists_to_low_error, axis=[1, 3])) + + # Compute the hard clash mask. + # shape (N, N, 14, 14) + clash_mask = dists_mask * ( + dists < (dists_lower_bound - overlap_tolerance_hard)) + + # Compute the per atom clash. + # shape (N, 14) + per_atom_clash_mask = jnp.maximum( + jnp.max(clash_mask, axis=[0, 2]), + jnp.max(clash_mask, axis=[1, 3])) + + return {'mean_loss': mean_loss, # shape () + 'per_atom_loss_sum': per_atom_loss_sum, # shape (N, 14) + 'per_atom_clash_mask': per_atom_clash_mask # shape (N, 14) + } + + +def within_residue_violations( + atom14_pred_positions: jnp.ndarray, # (N, 14, 3) + atom14_atom_exists: jnp.ndarray, # (N, 14) + atom14_dists_lower_bound: jnp.ndarray, # (N, 14, 14) + atom14_dists_upper_bound: jnp.ndarray, # (N, 14, 14) + tighten_bounds_for_loss=0.0, +) -> Dict[str, jnp.ndarray]: + """Loss to penalize steric clashes within residues. + + This is a loss penalizing any steric violations or clashes of non-bonded atoms + in a given peptide. This loss corresponds to the part with + the same residues of + Jumper et al. (2021) Suppl. Sec. 1.9.11, eq 46. + + Args: + atom14_pred_positions: Predicted positions of atoms in + global prediction frame + atom14_atom_exists: Mask denoting whether atom at positions exists for given + amino acid type + atom14_dists_lower_bound: Lower bound on allowed distances. + atom14_dists_upper_bound: Upper bound on allowed distances + tighten_bounds_for_loss: Extra factor to tighten loss + + Returns: + Dict containing: + * 'per_atom_loss_sum': sum of all clash losses per atom, shape (N, 14) + * 'per_atom_clash_mask': mask whether atom clashes with any other atom + shape (N, 14) + """ + assert len(atom14_pred_positions.shape) == 3 + assert len(atom14_atom_exists.shape) == 2 + assert len(atom14_dists_lower_bound.shape) == 3 + assert len(atom14_dists_upper_bound.shape) == 3 + + # Compute the mask for each residue. + # shape (N, 14, 14) + dists_masks = (1. - jnp.eye(14, 14)[None]) + dists_masks *= (atom14_atom_exists[:, :, None] * + atom14_atom_exists[:, None, :]) + + # Distance matrix + # shape (N, 14, 14) + dists = jnp.sqrt(1e-10 + jnp.sum( + squared_difference( + atom14_pred_positions[:, :, None, :], + atom14_pred_positions[:, None, :, :]), + axis=-1)) + + # Compute the loss. + # shape (N, 14, 14) + dists_to_low_error = jax.nn.relu( + atom14_dists_lower_bound + tighten_bounds_for_loss - dists) + dists_to_high_error = jax.nn.relu( + dists - (atom14_dists_upper_bound - tighten_bounds_for_loss)) + loss = dists_masks * (dists_to_low_error + dists_to_high_error) + + # Compute the per atom loss sum. + # shape (N, 14) + per_atom_loss_sum = (jnp.sum(loss, axis=1) + + jnp.sum(loss, axis=2)) + + # Compute the violations mask. + # shape (N, 14, 14) + violations = dists_masks * ((dists < atom14_dists_lower_bound) | + (dists > atom14_dists_upper_bound)) + + # Compute the per atom violations. + # shape (N, 14) + per_atom_violations = jnp.maximum( + jnp.max(violations, axis=1), jnp.max(violations, axis=2)) + + return {'per_atom_loss_sum': per_atom_loss_sum, # shape (N, 14) + 'per_atom_violations': per_atom_violations # shape (N, 14) + } + + +def find_optimal_renaming( + atom14_gt_positions: jnp.ndarray, # (N, 14, 3) + atom14_alt_gt_positions: jnp.ndarray, # (N, 14, 3) + atom14_atom_is_ambiguous: jnp.ndarray, # (N, 14) + atom14_gt_exists: jnp.ndarray, # (N, 14) + atom14_pred_positions: jnp.ndarray, # (N, 14, 3) + atom14_atom_exists: jnp.ndarray, # (N, 14) +) -> jnp.ndarray: # (N): + """Find optimal renaming for ground truth that maximizes LDDT. + + Jumper et al. (2021) Suppl. Alg. 26 + "renameSymmetricGroundTruthAtoms" lines 1-5 + + Args: + atom14_gt_positions: Ground truth positions in global frame of ground truth. + atom14_alt_gt_positions: Alternate ground truth positions in global frame of + ground truth with coordinates of ambiguous atoms swapped relative to + 'atom14_gt_positions'. + atom14_atom_is_ambiguous: Mask denoting whether atom is among ambiguous + atoms, see Jumper et al. (2021) Suppl. Table 3 + atom14_gt_exists: Mask denoting whether atom at positions exists in ground + truth. + atom14_pred_positions: Predicted positions of atoms in + global prediction frame + atom14_atom_exists: Mask denoting whether atom at positions exists for given + amino acid type + + Returns: + Float array of shape [N] with 1. where atom14_alt_gt_positions is closer to + prediction and 0. otherwise + """ + assert len(atom14_gt_positions.shape) == 3 + assert len(atom14_alt_gt_positions.shape) == 3 + assert len(atom14_atom_is_ambiguous.shape) == 2 + assert len(atom14_gt_exists.shape) == 2 + assert len(atom14_pred_positions.shape) == 3 + assert len(atom14_atom_exists.shape) == 2 + + # Create the pred distance matrix. + # shape (N, N, 14, 14) + pred_dists = jnp.sqrt(1e-10 + jnp.sum( + squared_difference( + atom14_pred_positions[:, None, :, None, :], + atom14_pred_positions[None, :, None, :, :]), + axis=-1)) + + # Compute distances for ground truth with original and alternative names. + # shape (N, N, 14, 14) + gt_dists = jnp.sqrt(1e-10 + jnp.sum( + squared_difference( + atom14_gt_positions[:, None, :, None, :], + atom14_gt_positions[None, :, None, :, :]), + axis=-1)) + alt_gt_dists = jnp.sqrt(1e-10 + jnp.sum( + squared_difference( + atom14_alt_gt_positions[:, None, :, None, :], + atom14_alt_gt_positions[None, :, None, :, :]), + axis=-1)) + + # Compute LDDT's. + # shape (N, N, 14, 14) + lddt = jnp.sqrt(1e-10 + squared_difference(pred_dists, gt_dists)) + alt_lddt = jnp.sqrt(1e-10 + squared_difference(pred_dists, alt_gt_dists)) + + # Create a mask for ambiguous atoms in rows vs. non-ambiguous atoms + # in cols. + # shape (N ,N, 14, 14) + mask = (atom14_gt_exists[:, None, :, None] * # rows + atom14_atom_is_ambiguous[:, None, :, None] * # rows + atom14_gt_exists[None, :, None, :] * # cols + (1. - atom14_atom_is_ambiguous[None, :, None, :])) # cols + + # Aggregate distances for each residue to the non-amibuguous atoms. + # shape (N) + per_res_lddt = jnp.sum(mask * lddt, axis=[1, 2, 3]) + alt_per_res_lddt = jnp.sum(mask * alt_lddt, axis=[1, 2, 3]) + + # Decide for each residue, whether alternative naming is better. + # shape (N) + alt_naming_is_better = (alt_per_res_lddt < per_res_lddt).astype(jnp.float32) + + return alt_naming_is_better # shape (N) + + +def frame_aligned_point_error( + pred_frames: r3.Rigids, # shape (num_frames) + target_frames: r3.Rigids, # shape (num_frames) + frames_mask: jnp.ndarray, # shape (num_frames) + pred_positions: r3.Vecs, # shape (num_positions) + target_positions: r3.Vecs, # shape (num_positions) + positions_mask: jnp.ndarray, # shape (num_positions) + length_scale: float, + l1_clamp_distance: Optional[float] = None, + epsilon=1e-4) -> jnp.ndarray: # shape () + """Measure point error under different alignments. + + Jumper et al. (2021) Suppl. Alg. 28 "computeFAPE" + + Computes error between two structures with B points under A alignments derived + from the given pairs of frames. + Args: + pred_frames: num_frames reference frames for 'pred_positions'. + target_frames: num_frames reference frames for 'target_positions'. + frames_mask: Mask for frame pairs to use. + pred_positions: num_positions predicted positions of the structure. + target_positions: num_positions target positions of the structure. + positions_mask: Mask on which positions to score. + length_scale: length scale to divide loss by. + l1_clamp_distance: Distance cutoff on error beyond which gradients will + be zero. + epsilon: small value used to regularize denominator for masked average. + Returns: + Masked Frame Aligned Point Error. + """ + assert pred_frames.rot.xx.ndim == 1 + assert target_frames.rot.xx.ndim == 1 + assert frames_mask.ndim == 1, frames_mask.ndim + assert pred_positions.x.ndim == 1 + assert target_positions.x.ndim == 1 + assert positions_mask.ndim == 1 + + # Compute array of predicted positions in the predicted frames. + # r3.Vecs (num_frames, num_positions) + local_pred_pos = r3.rigids_mul_vecs( + jax.tree_map(lambda r: r[:, None], r3.invert_rigids(pred_frames)), + jax.tree_map(lambda x: x[None, :], pred_positions)) + + # Compute array of target positions in the target frames. + # r3.Vecs (num_frames, num_positions) + local_target_pos = r3.rigids_mul_vecs( + jax.tree_map(lambda r: r[:, None], r3.invert_rigids(target_frames)), + jax.tree_map(lambda x: x[None, :], target_positions)) + + # Compute errors between the structures. + # jnp.ndarray (num_frames, num_positions) + error_dist = jnp.sqrt( + r3.vecs_squared_distance(local_pred_pos, local_target_pos) + + epsilon) + + if l1_clamp_distance: + error_dist = jnp.clip(error_dist, 0, l1_clamp_distance) + + normed_error = error_dist / length_scale + normed_error *= jnp.expand_dims(frames_mask, axis=-1) + normed_error *= jnp.expand_dims(positions_mask, axis=-2) + + normalization_factor = ( + jnp.sum(frames_mask, axis=-1) * + jnp.sum(positions_mask, axis=-1)) + return (jnp.sum(normed_error, axis=(-2, -1)) / + (epsilon + normalization_factor)) + + +def _make_renaming_matrices(): + """Matrices to map atoms to symmetry partners in ambiguous case.""" + # As the atom naming is ambiguous for 7 of the 20 amino acids, provide + # alternative groundtruth coordinates where the naming is swapped + restype_3 = [ + residue_constants.restype_1to3[res] for res in residue_constants.restypes + ] + restype_3 += ['UNK'] + # Matrices for renaming ambiguous atoms. + all_matrices = {res: np.eye(14, dtype=np.float32) for res in restype_3} + for resname, swap in residue_constants.residue_atom_renaming_swaps.items(): + correspondences = np.arange(14) + for source_atom_swap, target_atom_swap in swap.items(): + source_index = residue_constants.restype_name_to_atom14_names[ + resname].index(source_atom_swap) + target_index = residue_constants.restype_name_to_atom14_names[ + resname].index(target_atom_swap) + correspondences[source_index] = target_index + correspondences[target_index] = source_index + renaming_matrix = np.zeros((14, 14), dtype=np.float32) + for index, correspondence in enumerate(correspondences): + renaming_matrix[index, correspondence] = 1. + all_matrices[resname] = renaming_matrix.astype(np.float32) + renaming_matrices = np.stack([all_matrices[restype] for restype in restype_3]) + return renaming_matrices + + +RENAMING_MATRICES = _make_renaming_matrices() + + +def get_alt_atom14(aatype, positions, mask): + """Get alternative atom14 positions. + + Constructs renamed atom positions for ambiguous residues. + + Jumper et al. (2021) Suppl. Table 3 "Ambiguous atom names due to 180 degree- + rotation-symmetry" + + Args: + aatype: Amino acid at given position + positions: Atom positions as r3.Vecs in atom14 representation, (N, 14) + mask: Atom masks in atom14 representation, (N, 14) + Returns: + renamed atom positions, renamed atom mask + """ + # pick the transformation matrices for the given residue sequence + # shape (num_res, 14, 14) + renaming_transform = utils.batched_gather( + jnp.asarray(RENAMING_MATRICES), aatype) + + positions = jax.tree_map(lambda x: x[:, :, None], positions) + alternative_positions = jax.tree_map( + lambda x: jnp.sum(x, axis=1), positions * renaming_transform) + + # Create the mask for the alternative ground truth (differs from the + # ground truth mask, if only one of the atoms in an ambiguous pair has a + # ground truth position) + alternative_mask = jnp.sum(mask[..., None] * renaming_transform, axis=1) + + return alternative_positions, alternative_mask diff --git a/alphafold/model/all_atom_multimer.py b/alphafold/model/all_atom_multimer.py new file mode 100644 index 0000000000000000000000000000000000000000..50945927620b7c88aa0d8ddc3d052d089dc35912 --- /dev/null +++ b/alphafold/model/all_atom_multimer.py @@ -0,0 +1,968 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Ops for all atom representations.""" + +from typing import Dict, Optional + +from alphafold.common import residue_constants +from alphafold.model import geometry +from alphafold.model import utils +import jax +import jax.numpy as jnp +import numpy as np + + +def squared_difference(x, y): + return jnp.square(x - y) + + +def _make_chi_atom_indices(): + """Returns atom indices needed to compute chi angles for all residue types. + + Returns: + A tensor of shape [residue_types=21, chis=4, atoms=4]. The residue types are + in the order specified in residue_constants.restypes + unknown residue type + at the end. For chi angles which are not defined on the residue, the + positions indices are by default set to 0. + """ + chi_atom_indices = [] + for residue_name in residue_constants.restypes: + residue_name = residue_constants.restype_1to3[residue_name] + residue_chi_angles = residue_constants.chi_angles_atoms[residue_name] + atom_indices = [] + for chi_angle in residue_chi_angles: + atom_indices.append( + [residue_constants.atom_order[atom] for atom in chi_angle]) + for _ in range(4 - len(atom_indices)): + atom_indices.append([0, 0, 0, 0]) # For chi angles not defined on the AA. + chi_atom_indices.append(atom_indices) + + chi_atom_indices.append([[0, 0, 0, 0]] * 4) # For UNKNOWN residue. + + return np.array(chi_atom_indices) + + +def _make_renaming_matrices(): + """Matrices to map atoms to symmetry partners in ambiguous case.""" + # As the atom naming is ambiguous for 7 of the 20 amino acids, provide + # alternative groundtruth coordinates where the naming is swapped + restype_3 = [ + residue_constants.restype_1to3[res] for res in residue_constants.restypes + ] + restype_3 += ['UNK'] + # Matrices for renaming ambiguous atoms. + all_matrices = {res: np.eye(14, dtype=np.float32) for res in restype_3} + for resname, swap in residue_constants.residue_atom_renaming_swaps.items(): + correspondences = np.arange(14) + for source_atom_swap, target_atom_swap in swap.items(): + source_index = residue_constants.restype_name_to_atom14_names[ + resname].index(source_atom_swap) + target_index = residue_constants.restype_name_to_atom14_names[ + resname].index(target_atom_swap) + correspondences[source_index] = target_index + correspondences[target_index] = source_index + renaming_matrix = np.zeros((14, 14), dtype=np.float32) + for index, correspondence in enumerate(correspondences): + renaming_matrix[index, correspondence] = 1. + all_matrices[resname] = renaming_matrix.astype(np.float32) + renaming_matrices = np.stack([all_matrices[restype] for restype in restype_3]) + return renaming_matrices + + +def _make_restype_atom37_mask(): + """Mask of which atoms are present for which residue type in atom37.""" + # create the corresponding mask + restype_atom37_mask = np.zeros([21, 37], dtype=np.float32) + for restype, restype_letter in enumerate(residue_constants.restypes): + restype_name = residue_constants.restype_1to3[restype_letter] + atom_names = residue_constants.residue_atoms[restype_name] + for atom_name in atom_names: + atom_type = residue_constants.atom_order[atom_name] + restype_atom37_mask[restype, atom_type] = 1 + return restype_atom37_mask + + +def _make_restype_atom14_mask(): + """Mask of which atoms are present for which residue type in atom14.""" + restype_atom14_mask = [] + + for rt in residue_constants.restypes: + atom_names = residue_constants.restype_name_to_atom14_names[ + residue_constants.restype_1to3[rt]] + restype_atom14_mask.append([(1. if name else 0.) for name in atom_names]) + + restype_atom14_mask.append([0.] * 14) + restype_atom14_mask = np.array(restype_atom14_mask, dtype=np.float32) + return restype_atom14_mask + + +def _make_restype_atom37_to_atom14(): + """Map from atom37 to atom14 per residue type.""" + restype_atom37_to_atom14 = [] # mapping (restype, atom37) --> atom14 + for rt in residue_constants.restypes: + atom_names = residue_constants.restype_name_to_atom14_names[ + residue_constants.restype_1to3[rt]] + atom_name_to_idx14 = {name: i for i, name in enumerate(atom_names)} + restype_atom37_to_atom14.append([ + (atom_name_to_idx14[name] if name in atom_name_to_idx14 else 0) + for name in residue_constants.atom_types + ]) + + restype_atom37_to_atom14.append([0] * 37) + restype_atom37_to_atom14 = np.array(restype_atom37_to_atom14, dtype=np.int32) + return restype_atom37_to_atom14 + + +def _make_restype_atom14_to_atom37(): + """Map from atom14 to atom37 per residue type.""" + restype_atom14_to_atom37 = [] # mapping (restype, atom14) --> atom37 + for rt in residue_constants.restypes: + atom_names = residue_constants.restype_name_to_atom14_names[ + residue_constants.restype_1to3[rt]] + restype_atom14_to_atom37.append([ + (residue_constants.atom_order[name] if name else 0) + for name in atom_names + ]) + # Add dummy mapping for restype 'UNK' + restype_atom14_to_atom37.append([0] * 14) + restype_atom14_to_atom37 = np.array(restype_atom14_to_atom37, dtype=np.int32) + return restype_atom14_to_atom37 + + +def _make_restype_atom14_is_ambiguous(): + """Mask which atoms are ambiguous in atom14.""" + # create an ambiguous atoms mask. shape: (21, 14) + restype_atom14_is_ambiguous = np.zeros((21, 14), dtype=np.float32) + for resname, swap in residue_constants.residue_atom_renaming_swaps.items(): + for atom_name1, atom_name2 in swap.items(): + restype = residue_constants.restype_order[ + residue_constants.restype_3to1[resname]] + atom_idx1 = residue_constants.restype_name_to_atom14_names[resname].index( + atom_name1) + atom_idx2 = residue_constants.restype_name_to_atom14_names[resname].index( + atom_name2) + restype_atom14_is_ambiguous[restype, atom_idx1] = 1 + restype_atom14_is_ambiguous[restype, atom_idx2] = 1 + + return restype_atom14_is_ambiguous + + +def _make_restype_rigidgroup_base_atom37_idx(): + """Create Map from rigidgroups to atom37 indices.""" + # Create an array with the atom names. + # shape (num_restypes, num_rigidgroups, 3_atoms): (21, 8, 3) + base_atom_names = np.full([21, 8, 3], '', dtype=object) + + # 0: backbone frame + base_atom_names[:, 0, :] = ['C', 'CA', 'N'] + + # 3: 'psi-group' + base_atom_names[:, 3, :] = ['CA', 'C', 'O'] + + # 4,5,6,7: 'chi1,2,3,4-group' + for restype, restype_letter in enumerate(residue_constants.restypes): + resname = residue_constants.restype_1to3[restype_letter] + for chi_idx in range(4): + if residue_constants.chi_angles_mask[restype][chi_idx]: + atom_names = residue_constants.chi_angles_atoms[resname][chi_idx] + base_atom_names[restype, chi_idx + 4, :] = atom_names[1:] + + # Translate atom names into atom37 indices. + lookuptable = residue_constants.atom_order.copy() + lookuptable[''] = 0 + restype_rigidgroup_base_atom37_idx = np.vectorize(lambda x: lookuptable[x])( + base_atom_names) + return restype_rigidgroup_base_atom37_idx + + +CHI_ATOM_INDICES = _make_chi_atom_indices() +RENAMING_MATRICES = _make_renaming_matrices() +RESTYPE_ATOM14_TO_ATOM37 = _make_restype_atom14_to_atom37() +RESTYPE_ATOM37_TO_ATOM14 = _make_restype_atom37_to_atom14() +RESTYPE_ATOM37_MASK = _make_restype_atom37_mask() +RESTYPE_ATOM14_MASK = _make_restype_atom14_mask() +RESTYPE_ATOM14_IS_AMBIGUOUS = _make_restype_atom14_is_ambiguous() +RESTYPE_RIGIDGROUP_BASE_ATOM37_IDX = _make_restype_rigidgroup_base_atom37_idx() + +# Create mask for existing rigid groups. +RESTYPE_RIGIDGROUP_MASK = np.zeros([21, 8], dtype=np.float32) +RESTYPE_RIGIDGROUP_MASK[:, 0] = 1 +RESTYPE_RIGIDGROUP_MASK[:, 3] = 1 +RESTYPE_RIGIDGROUP_MASK[:20, 4:] = residue_constants.chi_angles_mask + + +def get_atom37_mask(aatype): + return utils.batched_gather(jnp.asarray(RESTYPE_ATOM37_MASK), aatype) + + +def get_atom14_mask(aatype): + return utils.batched_gather(jnp.asarray(RESTYPE_ATOM14_MASK), aatype) + + +def get_atom14_is_ambiguous(aatype): + return utils.batched_gather(jnp.asarray(RESTYPE_ATOM14_IS_AMBIGUOUS), aatype) + + +def get_atom14_to_atom37_map(aatype): + return utils.batched_gather(jnp.asarray(RESTYPE_ATOM14_TO_ATOM37), aatype) + + +def get_atom37_to_atom14_map(aatype): + return utils.batched_gather(jnp.asarray(RESTYPE_ATOM37_TO_ATOM14), aatype) + + +def atom14_to_atom37(atom14_data: jnp.ndarray, # (N, 14, ...) + aatype: jnp.ndarray + ) -> jnp.ndarray: # (N, 37, ...) + """Convert atom14 to atom37 representation.""" + assert len(atom14_data.shape) in [2, 3] + idx_atom37_to_atom14 = get_atom37_to_atom14_map(aatype) + atom37_data = utils.batched_gather( + atom14_data, idx_atom37_to_atom14, batch_dims=1) + atom37_mask = get_atom37_mask(aatype) + if len(atom14_data.shape) == 2: + atom37_data *= atom37_mask + elif len(atom14_data.shape) == 3: + atom37_data *= atom37_mask[:, :, None].astype(atom37_data.dtype) + return atom37_data + + +def atom37_to_atom14(aatype, all_atom_pos, all_atom_mask): + """Convert Atom37 positions to Atom14 positions.""" + residx_atom14_to_atom37 = utils.batched_gather( + jnp.asarray(RESTYPE_ATOM14_TO_ATOM37), aatype) + atom14_mask = utils.batched_gather( + all_atom_mask, residx_atom14_to_atom37, batch_dims=1).astype(jnp.float32) + # create a mask for known groundtruth positions + atom14_mask *= utils.batched_gather(jnp.asarray(RESTYPE_ATOM14_MASK), aatype) + # gather the groundtruth positions + atom14_positions = jax.tree_map( + lambda x: utils.batched_gather(x, residx_atom14_to_atom37, batch_dims=1), + all_atom_pos) + atom14_positions = atom14_mask * atom14_positions + return atom14_positions, atom14_mask + + +def get_alt_atom14(aatype, positions: geometry.Vec3Array, mask): + """Get alternative atom14 positions.""" + # pick the transformation matrices for the given residue sequence + # shape (num_res, 14, 14) + renaming_transform = utils.batched_gather( + jnp.asarray(RENAMING_MATRICES), aatype) + + alternative_positions = jax.tree_map( + lambda x: jnp.sum(x, axis=1), positions[:, :, None] * renaming_transform) + + # Create the mask for the alternative ground truth (differs from the + # ground truth mask, if only one of the atoms in an ambiguous pair has a + # ground truth position) + alternative_mask = jnp.sum(mask[..., None] * renaming_transform, axis=1) + + return alternative_positions, alternative_mask + + +def atom37_to_frames( + aatype: jnp.ndarray, # (...) + all_atom_positions: geometry.Vec3Array, # (..., 37) + all_atom_mask: jnp.ndarray, # (..., 37) +) -> Dict[str, jnp.ndarray]: + """Computes the frames for the up to 8 rigid groups for each residue.""" + # 0: 'backbone group', + # 1: 'pre-omega-group', (empty) + # 2: 'phi-group', (currently empty, because it defines only hydrogens) + # 3: 'psi-group', + # 4,5,6,7: 'chi1,2,3,4-group' + aatype_in_shape = aatype.shape + + # If there is a batch axis, just flatten it away, and reshape everything + # back at the end of the function. + aatype = jnp.reshape(aatype, [-1]) + all_atom_positions = jax.tree_map(lambda x: jnp.reshape(x, [-1, 37]), + all_atom_positions) + all_atom_mask = jnp.reshape(all_atom_mask, [-1, 37]) + + # Compute the gather indices for all residues in the chain. + # shape (N, 8, 3) + residx_rigidgroup_base_atom37_idx = utils.batched_gather( + RESTYPE_RIGIDGROUP_BASE_ATOM37_IDX, aatype) + + # Gather the base atom positions for each rigid group. + base_atom_pos = jax.tree_map( + lambda x: utils.batched_gather( # pylint: disable=g-long-lambda + x, residx_rigidgroup_base_atom37_idx, batch_dims=1), + all_atom_positions) + + # Compute the Rigids. + point_on_neg_x_axis = base_atom_pos[:, :, 0] + origin = base_atom_pos[:, :, 1] + point_on_xy_plane = base_atom_pos[:, :, 2] + gt_rotation = geometry.Rot3Array.from_two_vectors( + origin - point_on_neg_x_axis, point_on_xy_plane - origin) + + gt_frames = geometry.Rigid3Array(gt_rotation, origin) + + # Compute a mask whether the group exists. + # (N, 8) + group_exists = utils.batched_gather(RESTYPE_RIGIDGROUP_MASK, aatype) + + # Compute a mask whether ground truth exists for the group + gt_atoms_exist = utils.batched_gather( # shape (N, 8, 3) + all_atom_mask.astype(jnp.float32), + residx_rigidgroup_base_atom37_idx, + batch_dims=1) + gt_exists = jnp.min(gt_atoms_exist, axis=-1) * group_exists # (N, 8) + + # Adapt backbone frame to old convention (mirror x-axis and z-axis). + rots = np.tile(np.eye(3, dtype=np.float32), [8, 1, 1]) + rots[0, 0, 0] = -1 + rots[0, 2, 2] = -1 + gt_frames = gt_frames.compose_rotation( + geometry.Rot3Array.from_array(rots)) + + # The frames for ambiguous rigid groups are just rotated by 180 degree around + # the x-axis. The ambiguous group is always the last chi-group. + restype_rigidgroup_is_ambiguous = np.zeros([21, 8], dtype=np.float32) + restype_rigidgroup_rots = np.tile(np.eye(3, dtype=np.float32), [21, 8, 1, 1]) + + for resname, _ in residue_constants.residue_atom_renaming_swaps.items(): + restype = residue_constants.restype_order[ + residue_constants.restype_3to1[resname]] + chi_idx = int(sum(residue_constants.chi_angles_mask[restype]) - 1) + restype_rigidgroup_is_ambiguous[restype, chi_idx + 4] = 1 + restype_rigidgroup_rots[restype, chi_idx + 4, 1, 1] = -1 + restype_rigidgroup_rots[restype, chi_idx + 4, 2, 2] = -1 + + # Gather the ambiguity information for each residue. + residx_rigidgroup_is_ambiguous = utils.batched_gather( + restype_rigidgroup_is_ambiguous, aatype) + ambiguity_rot = utils.batched_gather(restype_rigidgroup_rots, aatype) + ambiguity_rot = geometry.Rot3Array.from_array(ambiguity_rot) + + # Create the alternative ground truth frames. + alt_gt_frames = gt_frames.compose_rotation(ambiguity_rot) + + fix_shape = lambda x: jnp.reshape(x, aatype_in_shape + (8,)) + + # reshape back to original residue layout + gt_frames = jax.tree_map(fix_shape, gt_frames) + gt_exists = fix_shape(gt_exists) + group_exists = fix_shape(group_exists) + residx_rigidgroup_is_ambiguous = fix_shape(residx_rigidgroup_is_ambiguous) + alt_gt_frames = jax.tree_map(fix_shape, alt_gt_frames) + + return { + 'rigidgroups_gt_frames': gt_frames, # Rigid (..., 8) + 'rigidgroups_gt_exists': gt_exists, # (..., 8) + 'rigidgroups_group_exists': group_exists, # (..., 8) + 'rigidgroups_group_is_ambiguous': + residx_rigidgroup_is_ambiguous, # (..., 8) + 'rigidgroups_alt_gt_frames': alt_gt_frames, # Rigid (..., 8) + } + + +def torsion_angles_to_frames( + aatype: jnp.ndarray, # (N) + backb_to_global: geometry.Rigid3Array, # (N) + torsion_angles_sin_cos: jnp.ndarray # (N, 7, 2) +) -> geometry.Rigid3Array: # (N, 8) + """Compute rigid group frames from torsion angles.""" + assert len(aatype.shape) == 1, ( + f'Expected array of rank 1, got array with shape: {aatype.shape}.') + assert len(backb_to_global.rotation.shape) == 1, ( + f'Expected array of rank 1, got array with shape: ' + f'{backb_to_global.rotation.shape}') + assert len(torsion_angles_sin_cos.shape) == 3, ( + f'Expected array of rank 3, got array with shape: ' + f'{torsion_angles_sin_cos.shape}') + assert torsion_angles_sin_cos.shape[1] == 7, ( + f'wrong shape {torsion_angles_sin_cos.shape}') + assert torsion_angles_sin_cos.shape[2] == 2, ( + f'wrong shape {torsion_angles_sin_cos.shape}') + + # Gather the default frames for all rigid groups. + # geometry.Rigid3Array with shape (N, 8) + m = utils.batched_gather(residue_constants.restype_rigid_group_default_frame, + aatype) + default_frames = geometry.Rigid3Array.from_array4x4(m) + + # Create the rotation matrices according to the given angles (each frame is + # defined such that its rotation is around the x-axis). + sin_angles = torsion_angles_sin_cos[..., 0] + cos_angles = torsion_angles_sin_cos[..., 1] + + # insert zero rotation for backbone group. + num_residues, = aatype.shape + sin_angles = jnp.concatenate([jnp.zeros([num_residues, 1]), sin_angles], + axis=-1) + cos_angles = jnp.concatenate([jnp.ones([num_residues, 1]), cos_angles], + axis=-1) + zeros = jnp.zeros_like(sin_angles) + ones = jnp.ones_like(sin_angles) + + # all_rots are geometry.Rot3Array with shape (N, 8) + all_rots = geometry.Rot3Array(ones, zeros, zeros, + zeros, cos_angles, -sin_angles, + zeros, sin_angles, cos_angles) + + # Apply rotations to the frames. + all_frames = default_frames.compose_rotation(all_rots) + + # chi2, chi3, and chi4 frames do not transform to the backbone frame but to + # the previous frame. So chain them up accordingly. + + chi1_frame_to_backb = all_frames[:, 4] + chi2_frame_to_backb = chi1_frame_to_backb @ all_frames[:, 5] + chi3_frame_to_backb = chi2_frame_to_backb @ all_frames[:, 6] + chi4_frame_to_backb = chi3_frame_to_backb @ all_frames[:, 7] + + all_frames_to_backb = jax.tree_map( + lambda *x: jnp.concatenate(x, axis=-1), all_frames[:, 0:5], + chi2_frame_to_backb[:, None], chi3_frame_to_backb[:, None], + chi4_frame_to_backb[:, None]) + + # Create the global frames. + # shape (N, 8) + all_frames_to_global = backb_to_global[:, None] @ all_frames_to_backb + + return all_frames_to_global + + +def frames_and_literature_positions_to_atom14_pos( + aatype: jnp.ndarray, # (N) + all_frames_to_global: geometry.Rigid3Array # (N, 8) +) -> geometry.Vec3Array: # (N, 14) + """Put atom literature positions (atom14 encoding) in each rigid group.""" + + # Pick the appropriate transform for every atom. + residx_to_group_idx = utils.batched_gather( + residue_constants.restype_atom14_to_rigid_group, aatype) + group_mask = jax.nn.one_hot( + residx_to_group_idx, num_classes=8) # shape (N, 14, 8) + + # geometry.Rigid3Array with shape (N, 14) + map_atoms_to_global = jax.tree_map( + lambda x: jnp.sum(x[:, None, :] * group_mask, axis=-1), + all_frames_to_global) + + # Gather the literature atom positions for each residue. + # geometry.Vec3Array with shape (N, 14) + lit_positions = geometry.Vec3Array.from_array( + utils.batched_gather( + residue_constants.restype_atom14_rigid_group_positions, aatype)) + + # Transform each atom from its local frame to the global frame. + # geometry.Vec3Array with shape (N, 14) + pred_positions = map_atoms_to_global.apply_to_point(lit_positions) + + # Mask out non-existing atoms. + mask = utils.batched_gather(residue_constants.restype_atom14_mask, aatype) + pred_positions = pred_positions * mask + + return pred_positions + + +def extreme_ca_ca_distance_violations( + positions: geometry.Vec3Array, # (N, 37(14)) + mask: jnp.ndarray, # (N, 37(14)) + residue_index: jnp.ndarray, # (N) + max_angstrom_tolerance=1.5 + ) -> jnp.ndarray: + """Counts residues whose Ca is a large distance from its neighbor.""" + this_ca_pos = positions[:-1, 1] # (N - 1,) + this_ca_mask = mask[:-1, 1] # (N - 1) + next_ca_pos = positions[1:, 1] # (N - 1,) + next_ca_mask = mask[1:, 1] # (N - 1) + has_no_gap_mask = ((residue_index[1:] - residue_index[:-1]) == 1.0).astype( + jnp.float32) + ca_ca_distance = geometry.euclidean_distance(this_ca_pos, next_ca_pos, 1e-6) + violations = (ca_ca_distance - + residue_constants.ca_ca) > max_angstrom_tolerance + mask = this_ca_mask * next_ca_mask * has_no_gap_mask + return utils.mask_mean(mask=mask, value=violations) + + +def between_residue_bond_loss( + pred_atom_positions: geometry.Vec3Array, # (N, 37(14)) + pred_atom_mask: jnp.ndarray, # (N, 37(14)) + residue_index: jnp.ndarray, # (N) + aatype: jnp.ndarray, # (N) + tolerance_factor_soft=12.0, + tolerance_factor_hard=12.0) -> Dict[str, jnp.ndarray]: + """Flat-bottom loss to penalize structural violations between residues.""" + assert len(pred_atom_positions.shape) == 2 + assert len(pred_atom_mask.shape) == 2 + assert len(residue_index.shape) == 1 + assert len(aatype.shape) == 1 + + # Get the positions of the relevant backbone atoms. + this_ca_pos = pred_atom_positions[:-1, 1] # (N - 1) + this_ca_mask = pred_atom_mask[:-1, 1] # (N - 1) + this_c_pos = pred_atom_positions[:-1, 2] # (N - 1) + this_c_mask = pred_atom_mask[:-1, 2] # (N - 1) + next_n_pos = pred_atom_positions[1:, 0] # (N - 1) + next_n_mask = pred_atom_mask[1:, 0] # (N - 1) + next_ca_pos = pred_atom_positions[1:, 1] # (N - 1) + next_ca_mask = pred_atom_mask[1:, 1] # (N - 1) + has_no_gap_mask = ((residue_index[1:] - residue_index[:-1]) == 1.0).astype( + jnp.float32) + + # Compute loss for the C--N bond. + c_n_bond_length = geometry.euclidean_distance(this_c_pos, next_n_pos, 1e-6) + + # The C-N bond to proline has slightly different length because of the ring. + next_is_proline = ( + aatype[1:] == residue_constants.restype_order['P']).astype(jnp.float32) + gt_length = ( + (1. - next_is_proline) * residue_constants.between_res_bond_length_c_n[0] + + next_is_proline * residue_constants.between_res_bond_length_c_n[1]) + gt_stddev = ( + (1. - next_is_proline) * + residue_constants.between_res_bond_length_stddev_c_n[0] + + next_is_proline * residue_constants.between_res_bond_length_stddev_c_n[1]) + c_n_bond_length_error = jnp.sqrt(1e-6 + + jnp.square(c_n_bond_length - gt_length)) + c_n_loss_per_residue = jax.nn.relu( + c_n_bond_length_error - tolerance_factor_soft * gt_stddev) + mask = this_c_mask * next_n_mask * has_no_gap_mask + c_n_loss = jnp.sum(mask * c_n_loss_per_residue) / (jnp.sum(mask) + 1e-6) + c_n_violation_mask = mask * ( + c_n_bond_length_error > (tolerance_factor_hard * gt_stddev)) + + # Compute loss for the angles. + c_ca_unit_vec = (this_ca_pos - this_c_pos).normalized(1e-6) + c_n_unit_vec = (next_n_pos - this_c_pos) / c_n_bond_length + n_ca_unit_vec = (next_ca_pos - next_n_pos).normalized(1e-6) + + ca_c_n_cos_angle = c_ca_unit_vec.dot(c_n_unit_vec) + gt_angle = residue_constants.between_res_cos_angles_ca_c_n[0] + gt_stddev = residue_constants.between_res_bond_length_stddev_c_n[0] + ca_c_n_cos_angle_error = jnp.sqrt( + 1e-6 + jnp.square(ca_c_n_cos_angle - gt_angle)) + ca_c_n_loss_per_residue = jax.nn.relu( + ca_c_n_cos_angle_error - tolerance_factor_soft * gt_stddev) + mask = this_ca_mask * this_c_mask * next_n_mask * has_no_gap_mask + ca_c_n_loss = jnp.sum(mask * ca_c_n_loss_per_residue) / (jnp.sum(mask) + 1e-6) + ca_c_n_violation_mask = mask * (ca_c_n_cos_angle_error > + (tolerance_factor_hard * gt_stddev)) + + c_n_ca_cos_angle = (-c_n_unit_vec).dot(n_ca_unit_vec) + gt_angle = residue_constants.between_res_cos_angles_c_n_ca[0] + gt_stddev = residue_constants.between_res_cos_angles_c_n_ca[1] + c_n_ca_cos_angle_error = jnp.sqrt( + 1e-6 + jnp.square(c_n_ca_cos_angle - gt_angle)) + c_n_ca_loss_per_residue = jax.nn.relu( + c_n_ca_cos_angle_error - tolerance_factor_soft * gt_stddev) + mask = this_c_mask * next_n_mask * next_ca_mask * has_no_gap_mask + c_n_ca_loss = jnp.sum(mask * c_n_ca_loss_per_residue) / (jnp.sum(mask) + 1e-6) + c_n_ca_violation_mask = mask * ( + c_n_ca_cos_angle_error > (tolerance_factor_hard * gt_stddev)) + + # Compute a per residue loss (equally distribute the loss to both + # neighbouring residues). + per_residue_loss_sum = (c_n_loss_per_residue + + ca_c_n_loss_per_residue + + c_n_ca_loss_per_residue) + per_residue_loss_sum = 0.5 * (jnp.pad(per_residue_loss_sum, [[0, 1]]) + + jnp.pad(per_residue_loss_sum, [[1, 0]])) + + # Compute hard violations. + violation_mask = jnp.max( + jnp.stack([c_n_violation_mask, + ca_c_n_violation_mask, + c_n_ca_violation_mask]), axis=0) + violation_mask = jnp.maximum( + jnp.pad(violation_mask, [[0, 1]]), + jnp.pad(violation_mask, [[1, 0]])) + + return {'c_n_loss_mean': c_n_loss, # shape () + 'ca_c_n_loss_mean': ca_c_n_loss, # shape () + 'c_n_ca_loss_mean': c_n_ca_loss, # shape () + 'per_residue_loss_sum': per_residue_loss_sum, # shape (N) + 'per_residue_violation_mask': violation_mask # shape (N) + } + + +def between_residue_clash_loss( + pred_positions: geometry.Vec3Array, # (N, 14) + atom_exists: jnp.ndarray, # (N, 14) + atom_radius: jnp.ndarray, # (N, 14) + residue_index: jnp.ndarray, # (N) + asym_id: jnp.ndarray, # (N) + overlap_tolerance_soft=1.5, + overlap_tolerance_hard=1.5) -> Dict[str, jnp.ndarray]: + """Loss to penalize steric clashes between residues.""" + assert len(pred_positions.shape) == 2 + assert len(atom_exists.shape) == 2 + assert len(atom_radius.shape) == 2 + assert len(residue_index.shape) == 1 + + # Create the distance matrix. + # (N, N, 14, 14) + dists = geometry.euclidean_distance(pred_positions[:, None, :, None], + pred_positions[None, :, None, :], 1e-10) + + # Create the mask for valid distances. + # shape (N, N, 14, 14) + dists_mask = (atom_exists[:, None, :, None] * atom_exists[None, :, None, :]) + + # Mask out all the duplicate entries in the lower triangular matrix. + # Also mask out the diagonal (atom-pairs from the same residue) -- these atoms + # are handled separately. + dists_mask *= ( + residue_index[:, None, None, None] < residue_index[None, :, None, None]) + + # Backbone C--N bond between subsequent residues is no clash. + c_one_hot = jax.nn.one_hot(2, num_classes=14) + n_one_hot = jax.nn.one_hot(0, num_classes=14) + neighbour_mask = ((residue_index[:, None] + 1) == residue_index[None, :]) + neighbour_mask &= (asym_id[:, None] == asym_id[None, :]) + neighbour_mask = neighbour_mask[..., None, None] + c_n_bonds = neighbour_mask * c_one_hot[None, None, :, + None] * n_one_hot[None, None, None, :] + dists_mask *= (1. - c_n_bonds) + + # Disulfide bridge between two cysteines is no clash. + cys_sg_idx = residue_constants.restype_name_to_atom14_names['CYS'].index('SG') + cys_sg_one_hot = jax.nn.one_hot(cys_sg_idx, num_classes=14) + disulfide_bonds = (cys_sg_one_hot[None, None, :, None] * + cys_sg_one_hot[None, None, None, :]) + dists_mask *= (1. - disulfide_bonds) + + # Compute the lower bound for the allowed distances. + # shape (N, N, 14, 14) + dists_lower_bound = dists_mask * ( + atom_radius[:, None, :, None] + atom_radius[None, :, None, :]) + + # Compute the error. + # shape (N, N, 14, 14) + dists_to_low_error = dists_mask * jax.nn.relu( + dists_lower_bound - overlap_tolerance_soft - dists) + + # Compute the mean loss. + # shape () + mean_loss = (jnp.sum(dists_to_low_error) + / (1e-6 + jnp.sum(dists_mask))) + + # Compute the per atom loss sum. + # shape (N, 14) + per_atom_loss_sum = (jnp.sum(dists_to_low_error, axis=[0, 2]) + + jnp.sum(dists_to_low_error, axis=[1, 3])) + + # Compute the hard clash mask. + # shape (N, N, 14, 14) + clash_mask = dists_mask * ( + dists < (dists_lower_bound - overlap_tolerance_hard)) + + # Compute the per atom clash. + # shape (N, 14) + per_atom_clash_mask = jnp.maximum( + jnp.max(clash_mask, axis=[0, 2]), + jnp.max(clash_mask, axis=[1, 3])) + + return {'mean_loss': mean_loss, # shape () + 'per_atom_loss_sum': per_atom_loss_sum, # shape (N, 14) + 'per_atom_clash_mask': per_atom_clash_mask # shape (N, 14) + } + + +def within_residue_violations( + pred_positions: geometry.Vec3Array, # (N, 14) + atom_exists: jnp.ndarray, # (N, 14) + dists_lower_bound: jnp.ndarray, # (N, 14, 14) + dists_upper_bound: jnp.ndarray, # (N, 14, 14) + tighten_bounds_for_loss=0.0, +) -> Dict[str, jnp.ndarray]: + """Find within-residue violations.""" + assert len(pred_positions.shape) == 2 + assert len(atom_exists.shape) == 2 + assert len(dists_lower_bound.shape) == 3 + assert len(dists_upper_bound.shape) == 3 + + # Compute the mask for each residue. + # shape (N, 14, 14) + dists_masks = (1. - jnp.eye(14, 14)[None]) + dists_masks *= (atom_exists[:, :, None] * atom_exists[:, None, :]) + + # Distance matrix + # shape (N, 14, 14) + dists = geometry.euclidean_distance(pred_positions[:, :, None], + pred_positions[:, None, :], 1e-10) + + # Compute the loss. + # shape (N, 14, 14) + dists_to_low_error = jax.nn.relu( + dists_lower_bound + tighten_bounds_for_loss - dists) + dists_to_high_error = jax.nn.relu( + dists + tighten_bounds_for_loss - dists_upper_bound) + loss = dists_masks * (dists_to_low_error + dists_to_high_error) + + # Compute the per atom loss sum. + # shape (N, 14) + per_atom_loss_sum = (jnp.sum(loss, axis=1) + + jnp.sum(loss, axis=2)) + + # Compute the violations mask. + # shape (N, 14, 14) + violations = dists_masks * ((dists < dists_lower_bound) | + (dists > dists_upper_bound)) + + # Compute the per atom violations. + # shape (N, 14) + per_atom_violations = jnp.maximum( + jnp.max(violations, axis=1), jnp.max(violations, axis=2)) + + return {'per_atom_loss_sum': per_atom_loss_sum, # shape (N, 14) + 'per_atom_violations': per_atom_violations # shape (N, 14) + } + + +def find_optimal_renaming( + gt_positions: geometry.Vec3Array, # (N, 14) + alt_gt_positions: geometry.Vec3Array, # (N, 14) + atom_is_ambiguous: jnp.ndarray, # (N, 14) + gt_exists: jnp.ndarray, # (N, 14) + pred_positions: geometry.Vec3Array, # (N, 14) +) -> jnp.ndarray: # (N): + """Find optimal renaming for ground truth that maximizes LDDT.""" + assert len(gt_positions.shape) == 2 + assert len(alt_gt_positions.shape) == 2 + assert len(atom_is_ambiguous.shape) == 2 + assert len(gt_exists.shape) == 2 + assert len(pred_positions.shape) == 2 + + # Create the pred distance matrix. + # shape (N, N, 14, 14) + pred_dists = geometry.euclidean_distance(pred_positions[:, None, :, None], + pred_positions[None, :, None, :], + 1e-10) + + # Compute distances for ground truth with original and alternative names. + # shape (N, N, 14, 14) + gt_dists = geometry.euclidean_distance(gt_positions[:, None, :, None], + gt_positions[None, :, None, :], 1e-10) + + alt_gt_dists = geometry.euclidean_distance(alt_gt_positions[:, None, :, None], + alt_gt_positions[None, :, None, :], + 1e-10) + + # Compute LDDT's. + # shape (N, N, 14, 14) + lddt = jnp.sqrt(1e-10 + squared_difference(pred_dists, gt_dists)) + alt_lddt = jnp.sqrt(1e-10 + squared_difference(pred_dists, alt_gt_dists)) + + # Create a mask for ambiguous atoms in rows vs. non-ambiguous atoms + # in cols. + # shape (N ,N, 14, 14) + mask = ( + gt_exists[:, None, :, None] * # rows + atom_is_ambiguous[:, None, :, None] * # rows + gt_exists[None, :, None, :] * # cols + (1. - atom_is_ambiguous[None, :, None, :])) # cols + + # Aggregate distances for each residue to the non-amibuguous atoms. + # shape (N) + per_res_lddt = jnp.sum(mask * lddt, axis=[1, 2, 3]) + alt_per_res_lddt = jnp.sum(mask * alt_lddt, axis=[1, 2, 3]) + + # Decide for each residue, whether alternative naming is better. + # shape (N) + alt_naming_is_better = (alt_per_res_lddt < per_res_lddt).astype(jnp.float32) + + return alt_naming_is_better # shape (N) + + +def frame_aligned_point_error( + pred_frames: geometry.Rigid3Array, # shape (num_frames) + target_frames: geometry.Rigid3Array, # shape (num_frames) + frames_mask: jnp.ndarray, # shape (num_frames) + pred_positions: geometry.Vec3Array, # shape (num_positions) + target_positions: geometry.Vec3Array, # shape (num_positions) + positions_mask: jnp.ndarray, # shape (num_positions) + pair_mask: Optional[jnp.ndarray], # shape (num_frames, num_posiitons) + l1_clamp_distance: float, + length_scale=20., + epsilon=1e-4) -> jnp.ndarray: # shape () + """Measure point error under different alignements. + + Computes error between two structures with B points + under A alignments derived form the given pairs of frames. + Args: + pred_frames: num_frames reference frames for 'pred_positions'. + target_frames: num_frames reference frames for 'target_positions'. + frames_mask: Mask for frame pairs to use. + pred_positions: num_positions predicted positions of the structure. + target_positions: num_positions target positions of the structure. + positions_mask: Mask on which positions to score. + pair_mask: A (num_frames, num_positions) mask to use in the loss, useful + for separating intra from inter chain losses. + l1_clamp_distance: Distance cutoff on error beyond which gradients will + be zero. + length_scale: length scale to divide loss by. + epsilon: small value used to regularize denominator for masked average. + Returns: + Masked Frame aligned point error. + """ + # For now we do not allow any batch dimensions. + assert len(pred_frames.rotation.shape) == 1 + assert len(target_frames.rotation.shape) == 1 + assert frames_mask.ndim == 1 + assert pred_positions.x.ndim == 1 + assert target_positions.x.ndim == 1 + assert positions_mask.ndim == 1 + + # Compute array of predicted positions in the predicted frames. + # geometry.Vec3Array (num_frames, num_positions) + local_pred_pos = pred_frames[:, None].inverse().apply_to_point( + pred_positions[None, :]) + + # Compute array of target positions in the target frames. + # geometry.Vec3Array (num_frames, num_positions) + local_target_pos = target_frames[:, None].inverse().apply_to_point( + target_positions[None, :]) + + # Compute errors between the structures. + # jnp.ndarray (num_frames, num_positions) + error_dist = geometry.euclidean_distance(local_pred_pos, local_target_pos, + epsilon) + + clipped_error_dist = jnp.clip(error_dist, 0, l1_clamp_distance) + + normed_error = clipped_error_dist / length_scale + normed_error *= jnp.expand_dims(frames_mask, axis=-1) + normed_error *= jnp.expand_dims(positions_mask, axis=-2) + if pair_mask is not None: + normed_error *= pair_mask + + mask = (jnp.expand_dims(frames_mask, axis=-1) * + jnp.expand_dims(positions_mask, axis=-2)) + if pair_mask is not None: + mask *= pair_mask + normalization_factor = jnp.sum(mask, axis=(-1, -2)) + return (jnp.sum(normed_error, axis=(-2, -1)) / + (epsilon + normalization_factor)) + + +def get_chi_atom_indices(): + """Returns atom indices needed to compute chi angles for all residue types. + + Returns: + A tensor of shape [residue_types=21, chis=4, atoms=4]. The residue types are + in the order specified in residue_constants.restypes + unknown residue type + at the end. For chi angles which are not defined on the residue, the + positions indices are by default set to 0. + """ + chi_atom_indices = [] + for residue_name in residue_constants.restypes: + residue_name = residue_constants.restype_1to3[residue_name] + residue_chi_angles = residue_constants.chi_angles_atoms[residue_name] + atom_indices = [] + for chi_angle in residue_chi_angles: + atom_indices.append( + [residue_constants.atom_order[atom] for atom in chi_angle]) + for _ in range(4 - len(atom_indices)): + atom_indices.append([0, 0, 0, 0]) # For chi angles not defined on the AA. + chi_atom_indices.append(atom_indices) + + chi_atom_indices.append([[0, 0, 0, 0]] * 4) # For UNKNOWN residue. + + return jnp.asarray(chi_atom_indices) + + +def compute_chi_angles(positions: geometry.Vec3Array, + mask: geometry.Vec3Array, + aatype: geometry.Vec3Array): + """Computes the chi angles given all atom positions and the amino acid type. + + Args: + positions: A Vec3Array of shape + [num_res, residue_constants.atom_type_num], with positions of + atoms needed to calculate chi angles. Supports up to 1 batch dimension. + mask: An optional tensor of shape + [num_res, residue_constants.atom_type_num] that masks which atom + positions are set for each residue. If given, then the chi mask will be + set to 1 for a chi angle only if the amino acid has that chi angle and all + the chi atoms needed to calculate that chi angle are set. If not given + (set to None), the chi mask will be set to 1 for a chi angle if the amino + acid has that chi angle and whether the actual atoms needed to calculate + it were set will be ignored. + aatype: A tensor of shape [num_res] with amino acid type integer + code (0 to 21). Supports up to 1 batch dimension. + + Returns: + A tuple of tensors (chi_angles, mask), where both have shape + [num_res, 4]. The mask masks out unused chi angles for amino acid + types that have less than 4 chi angles. If atom_positions_mask is set, the + chi mask will also mask out uncomputable chi angles. + """ + + # Don't assert on the num_res and batch dimensions as they might be unknown. + assert positions.shape[-1] == residue_constants.atom_type_num + assert mask.shape[-1] == residue_constants.atom_type_num + + # Compute the table of chi angle indices. Shape: [restypes, chis=4, atoms=4]. + chi_atom_indices = get_chi_atom_indices() + # Select atoms to compute chis. Shape: [num_res, chis=4, atoms=4]. + atom_indices = utils.batched_gather( + params=chi_atom_indices, indices=aatype, axis=0) + # Gather atom positions. Shape: [num_res, chis=4, atoms=4, xyz=3]. + chi_angle_atoms = jax.tree_map( + lambda x: utils.batched_gather( # pylint: disable=g-long-lambda + params=x, indices=atom_indices, axis=-1, batch_dims=1), positions) + a, b, c, d = [chi_angle_atoms[..., i] for i in range(4)] + + chi_angles = geometry.dihedral_angle(a, b, c, d) + + # Copy the chi angle mask, add the UNKNOWN residue. Shape: [restypes, 4]. + chi_angles_mask = list(residue_constants.chi_angles_mask) + chi_angles_mask.append([0.0, 0.0, 0.0, 0.0]) + chi_angles_mask = jnp.asarray(chi_angles_mask) + # Compute the chi angle mask. Shape [num_res, chis=4]. + chi_mask = utils.batched_gather(params=chi_angles_mask, indices=aatype, + axis=0) + + # The chi_mask is set to 1 only when all necessary chi angle atoms were set. + # Gather the chi angle atoms mask. Shape: [num_res, chis=4, atoms=4]. + chi_angle_atoms_mask = utils.batched_gather( + params=mask, indices=atom_indices, axis=-1, batch_dims=1) + # Check if all 4 chi angle atoms were set. Shape: [num_res, chis=4]. + chi_angle_atoms_mask = jnp.prod(chi_angle_atoms_mask, axis=[-1]) + chi_mask = chi_mask * chi_angle_atoms_mask.astype(jnp.float32) + + return chi_angles, chi_mask + + +def make_transform_from_reference( + a_xyz: geometry.Vec3Array, + b_xyz: geometry.Vec3Array, + c_xyz: geometry.Vec3Array) -> geometry.Rigid3Array: + """Returns rotation and translation matrices to convert from reference. + + Note that this method does not take care of symmetries. If you provide the + coordinates in the non-standard way, the A atom will end up in the negative + y-axis rather than in the positive y-axis. You need to take care of such + cases in your code. + + Args: + a_xyz: A Vec3Array. + b_xyz: A Vec3Array. + c_xyz: A Vec3Array. + + Returns: + A Rigid3Array which, when applied to coordinates in a canonicalized + reference frame, will give coordinates approximately equal + the original coordinates (in the global frame). + """ + rotation = geometry.Rot3Array.from_two_vectors(c_xyz - b_xyz, + a_xyz - b_xyz) + return geometry.Rigid3Array(rotation, b_xyz) diff --git a/alphafold/model/all_atom_test.py b/alphafold/model/all_atom_test.py new file mode 100644 index 0000000000000000000000000000000000000000..36ba45fe3d828d22614b021ad0deefe3e99bdcca --- /dev/null +++ b/alphafold/model/all_atom_test.py @@ -0,0 +1,135 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for all_atom.""" + +from absl.testing import absltest +from absl.testing import parameterized +from alphafold.model import all_atom +from alphafold.model import r3 +import numpy as np + +L1_CLAMP_DISTANCE = 10 + + +def get_identity_rigid(shape): + """Returns identity rigid transform.""" + + ones = np.ones(shape) + zeros = np.zeros(shape) + rot = r3.Rots(ones, zeros, zeros, + zeros, ones, zeros, + zeros, zeros, ones) + trans = r3.Vecs(zeros, zeros, zeros) + return r3.Rigids(rot, trans) + + +def get_global_rigid_transform(rot_angle, translation, bcast_dims): + """Returns rigid transform that globally rotates/translates by same amount.""" + + rot_angle = np.asarray(rot_angle) + translation = np.asarray(translation) + if bcast_dims: + for _ in range(bcast_dims): + rot_angle = np.expand_dims(rot_angle, 0) + translation = np.expand_dims(translation, 0) + sin_angle = np.sin(np.deg2rad(rot_angle)) + cos_angle = np.cos(np.deg2rad(rot_angle)) + ones = np.ones_like(sin_angle) + zeros = np.zeros_like(sin_angle) + rot = r3.Rots(ones, zeros, zeros, + zeros, cos_angle, -sin_angle, + zeros, sin_angle, cos_angle) + trans = r3.Vecs(translation[..., 0], translation[..., 1], translation[..., 2]) + return r3.Rigids(rot, trans) + + +class AllAtomTest(parameterized.TestCase, absltest.TestCase): + + @parameterized.named_parameters( + ('identity', 0, [0, 0, 0]), + ('rot_90', 90, [0, 0, 0]), + ('trans_10', 0, [0, 0, 10]), + ('rot_174_trans_1', 174, [1, 1, 1])) + def test_frame_aligned_point_error_perfect_on_global_transform( + self, rot_angle, translation): + """Tests global transform between target and preds gives perfect score.""" + + # pylint: disable=bad-whitespace + target_positions = np.array( + [[ 21.182, 23.095, 19.731], + [ 22.055, 20.919, 17.294], + [ 24.599, 20.005, 15.041], + [ 25.567, 18.214, 12.166], + [ 28.063, 17.082, 10.043], + [ 28.779, 15.569, 6.985], + [ 30.581, 13.815, 4.612], + [ 29.258, 12.193, 2.296]]) + # pylint: enable=bad-whitespace + global_rigid_transform = get_global_rigid_transform( + rot_angle, translation, 1) + + target_positions = r3.vecs_from_tensor(target_positions) + pred_positions = r3.rigids_mul_vecs( + global_rigid_transform, target_positions) + positions_mask = np.ones(target_positions.x.shape[0]) + + target_frames = get_identity_rigid(10) + pred_frames = r3.rigids_mul_rigids(global_rigid_transform, target_frames) + frames_mask = np.ones(10) + + fape = all_atom.frame_aligned_point_error( + pred_frames, target_frames, frames_mask, pred_positions, + target_positions, positions_mask, L1_CLAMP_DISTANCE, + L1_CLAMP_DISTANCE, epsilon=0) + self.assertAlmostEqual(fape, 0.) + + @parameterized.named_parameters( + ('identity', + [[0, 0, 0], [5, 0, 0], [10, 0, 0]], + [[0, 0, 0], [5, 0, 0], [10, 0, 0]], + 0.), + ('shift_2.5', + [[0, 0, 0], [5, 0, 0], [10, 0, 0]], + [[2.5, 0, 0], [7.5, 0, 0], [7.5, 0, 0]], + 0.25), + ('shift_5', + [[0, 0, 0], [5, 0, 0], [10, 0, 0]], + [[5, 0, 0], [10, 0, 0], [15, 0, 0]], + 0.5), + ('shift_10', + [[0, 0, 0], [5, 0, 0], [10, 0, 0]], + [[10, 0, 0], [15, 0, 0], [0, 0, 0]], + 1.)) + def test_frame_aligned_point_error_matches_expected( + self, target_positions, pred_positions, expected_alddt): + """Tests score matches expected.""" + + target_frames = get_identity_rigid(2) + pred_frames = target_frames + frames_mask = np.ones(2) + + target_positions = r3.vecs_from_tensor(np.array(target_positions)) + pred_positions = r3.vecs_from_tensor(np.array(pred_positions)) + positions_mask = np.ones(target_positions.x.shape[0]) + + alddt = all_atom.frame_aligned_point_error( + pred_frames, target_frames, frames_mask, pred_positions, + target_positions, positions_mask, L1_CLAMP_DISTANCE, + L1_CLAMP_DISTANCE, epsilon=0) + self.assertAlmostEqual(alddt, expected_alddt) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/model/common_modules.py b/alphafold/model/common_modules.py new file mode 100644 index 0000000000000000000000000000000000000000..0b5cd07d5b6d643fceb865591c80001f67387ef1 --- /dev/null +++ b/alphafold/model/common_modules.py @@ -0,0 +1,191 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""A collection of common Haiku modules for use in protein folding.""" +import numbers +from typing import Union, Sequence + +import haiku as hk +import jax.numpy as jnp +import numpy as np + + +# Constant from scipy.stats.truncnorm.std(a=-2, b=2, loc=0., scale=1.) +TRUNCATED_NORMAL_STDDEV_FACTOR = np.asarray(.87962566103423978, + dtype=np.float32) + + +def get_initializer_scale(initializer_name, input_shape): + """Get Initializer for weights and scale to multiply activations by.""" + + if initializer_name == 'zeros': + w_init = hk.initializers.Constant(0.0) + else: + # fan-in scaling + scale = 1. + for channel_dim in input_shape: + scale /= channel_dim + if initializer_name == 'relu': + scale *= 2 + + noise_scale = scale + + stddev = np.sqrt(noise_scale) + # Adjust stddev for truncation. + stddev = stddev / TRUNCATED_NORMAL_STDDEV_FACTOR + w_init = hk.initializers.TruncatedNormal(mean=0.0, stddev=stddev) + + return w_init + + +class Linear(hk.Module): + """Protein folding specific Linear module. + + This differs from the standard Haiku Linear in a few ways: + * It supports inputs and outputs of arbitrary rank + * Initializers are specified by strings + """ + + def __init__(self, + num_output: Union[int, Sequence[int]], + initializer: str = 'linear', + num_input_dims: int = 1, + use_bias: bool = True, + bias_init: float = 0., + precision = None, + name: str = 'linear'): + """Constructs Linear Module. + + Args: + num_output: Number of output channels. Can be tuple when outputting + multiple dimensions. + initializer: What initializer to use, should be one of {'linear', 'relu', + 'zeros'} + num_input_dims: Number of dimensions from the end to project. + use_bias: Whether to include trainable bias + bias_init: Value used to initialize bias. + precision: What precision to use for matrix multiplication, defaults + to None. + name: Name of module, used for name scopes. + """ + super().__init__(name=name) + if isinstance(num_output, numbers.Integral): + self.output_shape = (num_output,) + else: + self.output_shape = tuple(num_output) + self.initializer = initializer + self.use_bias = use_bias + self.bias_init = bias_init + self.num_input_dims = num_input_dims + self.num_output_dims = len(self.output_shape) + self.precision = precision + + def __call__(self, inputs): + """Connects Module. + + Args: + inputs: Tensor with at least num_input_dims dimensions. + + Returns: + output of shape [...] + num_output. + """ + + num_input_dims = self.num_input_dims + + if self.num_input_dims > 0: + in_shape = inputs.shape[-self.num_input_dims:] + else: + in_shape = () + + weight_init = get_initializer_scale(self.initializer, in_shape) + + in_letters = 'abcde'[:self.num_input_dims] + out_letters = 'hijkl'[:self.num_output_dims] + + weight_shape = in_shape + self.output_shape + weights = hk.get_parameter('weights', weight_shape, inputs.dtype, + weight_init) + + equation = f'...{in_letters}, {in_letters}{out_letters}->...{out_letters}' + + output = jnp.einsum(equation, inputs, weights, precision=self.precision) + + if self.use_bias: + bias = hk.get_parameter('bias', self.output_shape, inputs.dtype, + hk.initializers.Constant(self.bias_init)) + output += bias + + return output + + +class LayerNorm(hk.LayerNorm): + """LayerNorm module. + + Equivalent to hk.LayerNorm but with different parameter shapes: they are + always vectors rather than possibly higher-rank tensors. This makes it easier + to change the layout whilst keep the model weight-compatible. + """ + + def __init__(self, + axis, + create_scale: bool, + create_offset: bool, + eps: float = 1e-5, + scale_init=None, + offset_init=None, + use_fast_variance: bool = False, + name=None, + param_axis=None): + super().__init__( + axis=axis, + create_scale=False, + create_offset=False, + eps=eps, + scale_init=None, + offset_init=None, + use_fast_variance=use_fast_variance, + name=name, + param_axis=param_axis) + self._temp_create_scale = create_scale + self._temp_create_offset = create_offset + + def __call__(self, x: jnp.ndarray) -> jnp.ndarray: + is_bf16 = (x.dtype == jnp.bfloat16) + if is_bf16: + x = x.astype(jnp.float32) + + param_axis = self.param_axis[0] if self.param_axis else -1 + param_shape = (x.shape[param_axis],) + + param_broadcast_shape = [1] * x.ndim + param_broadcast_shape[param_axis] = x.shape[param_axis] + scale = None + offset = None + if self._temp_create_scale: + scale = hk.get_parameter( + 'scale', param_shape, x.dtype, init=self.scale_init) + scale = scale.reshape(param_broadcast_shape) + + if self._temp_create_offset: + offset = hk.get_parameter( + 'offset', param_shape, x.dtype, init=self.offset_init) + offset = offset.reshape(param_broadcast_shape) + + out = super().__call__(x, scale=scale, offset=offset) + + if is_bf16: + out = out.astype(jnp.bfloat16) + + return out + \ No newline at end of file diff --git a/alphafold/model/config.py b/alphafold/model/config.py new file mode 100644 index 0000000000000000000000000000000000000000..447c3e34bb1b5698858a2c6b43fc8eee36a3e398 --- /dev/null +++ b/alphafold/model/config.py @@ -0,0 +1,699 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Model config.""" + +import copy +from alphafold.model.tf import shape_placeholders +import ml_collections + +NUM_RES = shape_placeholders.NUM_RES +NUM_MSA_SEQ = shape_placeholders.NUM_MSA_SEQ +NUM_EXTRA_SEQ = shape_placeholders.NUM_EXTRA_SEQ +NUM_TEMPLATES = shape_placeholders.NUM_TEMPLATES + + +def model_config(name: str) -> ml_collections.ConfigDict: + """Get the ConfigDict of a CASP14 model.""" + + if name not in CONFIG_DIFFS: + raise ValueError(f'Invalid model name {name}.') + if 'multimer' in name: + cfg = copy.deepcopy(CONFIG_MULTIMER) + else: + cfg = copy.deepcopy(CONFIG) + cfg.update_from_flattened_dict(CONFIG_DIFFS[name]) + return cfg + + +MODEL_PRESETS = { + 'monomer': ( + 'model_1', + 'model_2', + 'model_3', + 'model_4', + 'model_5', + ), + 'monomer_ptm': ( + 'model_1_ptm', + 'model_2_ptm', + 'model_3_ptm', + 'model_4_ptm', + 'model_5_ptm', + ), + 'multimer': ( + 'model_1_multimer_v3', + 'model_2_multimer_v3', + 'model_3_multimer_v3', + 'model_4_multimer_v3', + 'model_5_multimer_v3', + ), +} +MODEL_PRESETS['monomer_casp14'] = MODEL_PRESETS['monomer'] + + +CONFIG_DIFFS = { + 'model_1': { + # Jumper et al. (2021) Suppl. Table 5, Model 1.1.1 + 'data.common.max_extra_msa': 5120, + 'data.common.reduce_msa_clusters_by_max_templates': True, + 'data.common.use_templates': True, + 'model.embeddings_and_evoformer.template.embed_torsion_angles': True, + 'model.embeddings_and_evoformer.template.enabled': True + }, + 'model_2': { + # Jumper et al. (2021) Suppl. Table 5, Model 1.1.2 + 'data.common.reduce_msa_clusters_by_max_templates': True, + 'data.common.use_templates': True, + 'model.embeddings_and_evoformer.template.embed_torsion_angles': True, + 'model.embeddings_and_evoformer.template.enabled': True + }, + 'model_3': { + # Jumper et al. (2021) Suppl. Table 5, Model 1.2.1 + 'data.common.max_extra_msa': 5120, + }, + 'model_4': { + # Jumper et al. (2021) Suppl. Table 5, Model 1.2.2 + 'data.common.max_extra_msa': 5120, + }, + 'model_5': { + # Jumper et al. (2021) Suppl. Table 5, Model 1.2.3 + }, + + # The following models are fine-tuned from the corresponding models above + # with an additional predicted_aligned_error head that can produce + # predicted TM-score (pTM) and predicted aligned errors. + 'model_1_ptm': { + 'data.common.max_extra_msa': 5120, + 'data.common.reduce_msa_clusters_by_max_templates': True, + 'data.common.use_templates': True, + 'model.embeddings_and_evoformer.template.embed_torsion_angles': True, + 'model.embeddings_and_evoformer.template.enabled': True, + 'model.heads.predicted_aligned_error.weight': 0.1 + }, + 'model_2_ptm': { + 'data.common.reduce_msa_clusters_by_max_templates': True, + 'data.common.use_templates': True, + 'model.embeddings_and_evoformer.template.embed_torsion_angles': True, + 'model.embeddings_and_evoformer.template.enabled': True, + 'model.heads.predicted_aligned_error.weight': 0.1 + }, + 'model_3_ptm': { + 'data.common.max_extra_msa': 5120, + 'model.heads.predicted_aligned_error.weight': 0.1 + }, + 'model_4_ptm': { + 'data.common.max_extra_msa': 5120, + 'model.heads.predicted_aligned_error.weight': 0.1 + }, + 'model_5_ptm': { + 'model.heads.predicted_aligned_error.weight': 0.1 + }, + 'model_1_multimer_v3': {}, + 'model_2_multimer_v3': {}, + 'model_3_multimer_v3': {}, + 'model_4_multimer_v3': { + 'model.embeddings_and_evoformer.num_extra_msa': 1152 + }, + 'model_5_multimer_v3': { + 'model.embeddings_and_evoformer.num_extra_msa': 1152 + }, +} +# Key differences between multimer v1/v2 and v3, mostly due to numerical +# optimisations in the TriangleMultiplication module. +common_updates = { + 'model.embeddings_and_evoformer.num_msa': 252, + 'model.embeddings_and_evoformer.num_extra_msa': 1152, + 'model.embeddings_and_evoformer.evoformer.triangle_multiplication_incoming.fuse_projection_weights': False, + 'model.embeddings_and_evoformer.evoformer.triangle_multiplication_outgoing.fuse_projection_weights': False, + 'model.embeddings_and_evoformer.template.template_pair_stack.triangle_multiplication_incoming.fuse_projection_weights': False, + 'model.embeddings_and_evoformer.template.template_pair_stack.triangle_multiplication_outgoing.fuse_projection_weights': False, +} +CONFIG_DIFFS.update( + {f'model_{i}_multimer': common_updates for i in range(1, 6)}) +CONFIG_DIFFS.update( + {f'model_{i}_multimer_v2': common_updates for i in range(1, 6)}) + + +CONFIG = ml_collections.ConfigDict({ + 'data': { + 'common': { + 'masked_msa': { + 'profile_prob': 0.1, + 'same_prob': 0.1, + 'uniform_prob': 0.1 + }, + 'max_extra_msa': 1024, + 'msa_cluster_features': True, + 'num_recycle': 3, + 'reduce_msa_clusters_by_max_templates': False, + 'resample_msa_in_recycling': True, + 'template_features': [ + 'template_all_atom_positions', 'template_sum_probs', + 'template_aatype', 'template_all_atom_masks', + 'template_domain_names' + ], + 'unsupervised_features': [ + 'aatype', 'residue_index', 'sequence', 'msa', 'domain_name', + 'num_alignments', 'seq_length', 'between_segment_residues', + 'deletion_matrix' + ], + 'use_templates': False, + }, + 'eval': { + 'feat': { + 'aatype': [NUM_RES], + 'all_atom_mask': [NUM_RES, None], + 'all_atom_positions': [NUM_RES, None, None], + 'alt_chi_angles': [NUM_RES, None], + 'atom14_alt_gt_exists': [NUM_RES, None], + 'atom14_alt_gt_positions': [NUM_RES, None, None], + 'atom14_atom_exists': [NUM_RES, None], + 'atom14_atom_is_ambiguous': [NUM_RES, None], + 'atom14_gt_exists': [NUM_RES, None], + 'atom14_gt_positions': [NUM_RES, None, None], + 'atom37_atom_exists': [NUM_RES, None], + 'backbone_affine_mask': [NUM_RES], + 'backbone_affine_tensor': [NUM_RES, None], + 'bert_mask': [NUM_MSA_SEQ, NUM_RES], + 'chi_angles': [NUM_RES, None], + 'chi_mask': [NUM_RES, None], + 'extra_deletion_value': [NUM_EXTRA_SEQ, NUM_RES], + 'extra_has_deletion': [NUM_EXTRA_SEQ, NUM_RES], + 'extra_msa': [NUM_EXTRA_SEQ, NUM_RES], + 'extra_msa_mask': [NUM_EXTRA_SEQ, NUM_RES], + 'extra_msa_row_mask': [NUM_EXTRA_SEQ], + 'is_distillation': [], + 'msa_feat': [NUM_MSA_SEQ, NUM_RES, None], + 'msa_mask': [NUM_MSA_SEQ, NUM_RES], + 'msa_row_mask': [NUM_MSA_SEQ], + 'pseudo_beta': [NUM_RES, None], + 'pseudo_beta_mask': [NUM_RES], + 'random_crop_to_size_seed': [None], + 'residue_index': [NUM_RES], + 'residx_atom14_to_atom37': [NUM_RES, None], + 'residx_atom37_to_atom14': [NUM_RES, None], + 'resolution': [], + 'rigidgroups_alt_gt_frames': [NUM_RES, None, None], + 'rigidgroups_group_exists': [NUM_RES, None], + 'rigidgroups_group_is_ambiguous': [NUM_RES, None], + 'rigidgroups_gt_exists': [NUM_RES, None], + 'rigidgroups_gt_frames': [NUM_RES, None, None], + 'seq_length': [], + 'seq_mask': [NUM_RES], + 'target_feat': [NUM_RES, None], + 'template_aatype': [NUM_TEMPLATES, NUM_RES], + 'template_all_atom_masks': [NUM_TEMPLATES, NUM_RES, None], + 'template_all_atom_positions': [ + NUM_TEMPLATES, NUM_RES, None, None], + 'template_backbone_affine_mask': [NUM_TEMPLATES, NUM_RES], + 'template_backbone_affine_tensor': [ + NUM_TEMPLATES, NUM_RES, None], + 'template_mask': [NUM_TEMPLATES], + 'template_pseudo_beta': [NUM_TEMPLATES, NUM_RES, None], + 'template_pseudo_beta_mask': [NUM_TEMPLATES, NUM_RES], + 'template_sum_probs': [NUM_TEMPLATES, None], + 'true_msa': [NUM_MSA_SEQ, NUM_RES] + }, + 'fixed_size': True, + 'subsample_templates': False, # We want top templates. + 'masked_msa_replace_fraction': 0.15, + 'max_msa_clusters': 512, + 'max_templates': 4, + 'num_ensemble': 1, + }, + }, + 'model': { + 'embeddings_and_evoformer': { + 'evoformer_num_block': 48, + 'evoformer': { + 'msa_row_attention_with_pair_bias': { + 'dropout_rate': 0.15, + 'gating': True, + 'num_head': 8, + 'orientation': 'per_row', + 'shared_dropout': True + }, + 'msa_column_attention': { + 'dropout_rate': 0.0, + 'gating': True, + 'num_head': 8, + 'orientation': 'per_column', + 'shared_dropout': True + }, + 'msa_transition': { + 'dropout_rate': 0.0, + 'num_intermediate_factor': 4, + 'orientation': 'per_row', + 'shared_dropout': True + }, + 'outer_product_mean': { + 'first': False, + 'chunk_size': 128, + 'dropout_rate': 0.0, + 'num_outer_channel': 32, + 'orientation': 'per_row', + 'shared_dropout': True + }, + 'triangle_attention_starting_node': { + 'dropout_rate': 0.25, + 'gating': True, + 'num_head': 4, + 'orientation': 'per_row', + 'shared_dropout': True + }, + 'triangle_attention_ending_node': { + 'dropout_rate': 0.25, + 'gating': True, + 'num_head': 4, + 'orientation': 'per_column', + 'shared_dropout': True + }, + 'triangle_multiplication_outgoing': { + 'dropout_rate': 0.25, + 'equation': 'ikc,jkc->ijc', + 'num_intermediate_channel': 128, + 'orientation': 'per_row', + 'shared_dropout': True, + 'fuse_projection_weights': False, + }, + 'triangle_multiplication_incoming': { + 'dropout_rate': 0.25, + 'equation': 'kjc,kic->ijc', + 'num_intermediate_channel': 128, + 'orientation': 'per_row', + 'shared_dropout': True, + 'fuse_projection_weights': False, + }, + 'pair_transition': { + 'dropout_rate': 0.0, + 'num_intermediate_factor': 4, + 'orientation': 'per_row', + 'shared_dropout': True + } + }, + 'extra_msa_channel': 64, + 'extra_msa_stack_num_block': 4, + 'max_relative_feature': 32, + 'msa_channel': 256, + 'pair_channel': 128, + 'prev_pos': { + 'min_bin': 3.25, + 'max_bin': 20.75, + 'num_bins': 15 + }, + 'recycle_features': True, + 'recycle_pos': True, + 'seq_channel': 384, + 'template': { + 'attention': { + 'gating': False, + 'key_dim': 64, + 'num_head': 4, + 'value_dim': 64 + }, + 'dgram_features': { + 'min_bin': 3.25, + 'max_bin': 50.75, + 'num_bins': 39 + }, + 'embed_torsion_angles': False, + 'enabled': False, + 'template_pair_stack': { + 'num_block': 2, + 'triangle_attention_starting_node': { + 'dropout_rate': 0.25, + 'gating': True, + 'key_dim': 64, + 'num_head': 4, + 'orientation': 'per_row', + 'shared_dropout': True, + 'value_dim': 64 + }, + 'triangle_attention_ending_node': { + 'dropout_rate': 0.25, + 'gating': True, + 'key_dim': 64, + 'num_head': 4, + 'orientation': 'per_column', + 'shared_dropout': True, + 'value_dim': 64 + }, + 'triangle_multiplication_outgoing': { + 'dropout_rate': 0.25, + 'equation': 'ikc,jkc->ijc', + 'num_intermediate_channel': 64, + 'orientation': 'per_row', + 'shared_dropout': True, + 'fuse_projection_weights': False, + }, + 'triangle_multiplication_incoming': { + 'dropout_rate': 0.25, + 'equation': 'kjc,kic->ijc', + 'num_intermediate_channel': 64, + 'orientation': 'per_row', + 'shared_dropout': True, + 'fuse_projection_weights': False, + }, + 'pair_transition': { + 'dropout_rate': 0.0, + 'num_intermediate_factor': 2, + 'orientation': 'per_row', + 'shared_dropout': True + } + }, + 'max_templates': 4, + 'subbatch_size': 128, + 'use_template_unit_vector': False, + } + }, + 'global_config': { + 'deterministic': False, + 'multimer_mode': False, + 'subbatch_size': 4, + 'use_remat': False, + 'zero_init': True, + 'eval_dropout': False, + }, + 'heads': { + 'distogram': { + 'first_break': 2.3125, + 'last_break': 21.6875, + 'num_bins': 64, + 'weight': 0.3 + }, + 'predicted_aligned_error': { + # `num_bins - 1` bins uniformly space the + # [0, max_error_bin A] range. + # The final bin covers [max_error_bin A, +infty] + # 31A gives bins with 0.5A width. + 'max_error_bin': 31., + 'num_bins': 64, + 'num_channels': 128, + 'filter_by_resolution': True, + 'min_resolution': 0.1, + 'max_resolution': 3.0, + 'weight': 0.0, + }, + 'experimentally_resolved': { + 'filter_by_resolution': True, + 'max_resolution': 3.0, + 'min_resolution': 0.1, + 'weight': 0.01 + }, + 'structure_module': { + 'num_layer': 8, + 'fape': { + 'clamp_distance': 10.0, + 'clamp_type': 'relu', + 'loss_unit_distance': 10.0 + }, + 'angle_norm_weight': 0.01, + 'chi_weight': 0.5, + 'clash_overlap_tolerance': 1.5, + 'compute_in_graph_metrics': True, + 'dropout': 0.1, + 'num_channel': 384, + 'num_head': 12, + 'num_layer_in_transition': 3, + 'num_point_qk': 4, + 'num_point_v': 8, + 'num_scalar_qk': 16, + 'num_scalar_v': 16, + 'position_scale': 10.0, + 'sidechain': { + 'atom_clamp_distance': 10.0, + 'num_channel': 128, + 'num_residual_block': 2, + 'weight_frac': 0.5, + 'length_scale': 10., + }, + 'structural_violation_loss_weight': 1.0, + 'violation_tolerance_factor': 12.0, + 'weight': 1.0 + }, + 'predicted_lddt': { + 'filter_by_resolution': True, + 'max_resolution': 3.0, + 'min_resolution': 0.1, + 'num_bins': 50, + 'num_channels': 128, + 'weight': 0.01 + }, + 'masked_msa': { + 'num_output': 23, + 'weight': 2.0 + }, + }, + 'num_recycle': 3, + 'resample_msa_in_recycling': True + }, +}) + + +CONFIG_MULTIMER = ml_collections.ConfigDict({ + 'model': { + 'embeddings_and_evoformer': { + 'evoformer_num_block': 48, + 'evoformer': { + 'msa_column_attention': { + 'dropout_rate': 0.0, + 'gating': True, + 'num_head': 8, + 'orientation': 'per_column', + 'shared_dropout': True + }, + 'msa_row_attention_with_pair_bias': { + 'dropout_rate': 0.15, + 'gating': True, + 'num_head': 8, + 'orientation': 'per_row', + 'shared_dropout': True + }, + 'msa_transition': { + 'dropout_rate': 0.0, + 'num_intermediate_factor': 4, + 'orientation': 'per_row', + 'shared_dropout': True + }, + 'outer_product_mean': { + 'chunk_size': 128, + 'dropout_rate': 0.0, + 'first': True, + 'num_outer_channel': 32, + 'orientation': 'per_row', + 'shared_dropout': True + }, + 'pair_transition': { + 'dropout_rate': 0.0, + 'num_intermediate_factor': 4, + 'orientation': 'per_row', + 'shared_dropout': True + }, + 'triangle_attention_ending_node': { + 'dropout_rate': 0.25, + 'gating': True, + 'num_head': 4, + 'orientation': 'per_column', + 'shared_dropout': True + }, + 'triangle_attention_starting_node': { + 'dropout_rate': 0.25, + 'gating': True, + 'num_head': 4, + 'orientation': 'per_row', + 'shared_dropout': True, + }, + 'triangle_multiplication_incoming': { + 'dropout_rate': 0.25, + 'equation': 'kjc,kic->ijc', + 'num_intermediate_channel': 128, + 'orientation': 'per_row', + 'shared_dropout': True, + 'fuse_projection_weights': True, + }, + 'triangle_multiplication_outgoing': { + 'dropout_rate': 0.25, + 'equation': 'ikc,jkc->ijc', + 'num_intermediate_channel': 128, + 'orientation': 'per_row', + 'shared_dropout': True, + 'fuse_projection_weights': True, + } + }, + 'extra_msa_channel': 64, + 'extra_msa_stack_num_block': 4, + 'num_msa': 508, + 'num_extra_msa': 2048, + 'masked_msa': { + 'profile_prob': 0.1, + 'replace_fraction': 0.15, + 'same_prob': 0.1, + 'uniform_prob': 0.1 + }, + 'use_chain_relative': True, + 'max_relative_chain': 2, + 'max_relative_idx': 32, + 'seq_channel': 384, + 'msa_channel': 256, + 'pair_channel': 128, + 'prev_pos': { + 'max_bin': 20.75, + 'min_bin': 3.25, + 'num_bins': 15 + }, + 'recycle_features': True, + 'recycle_pos': True, + 'template': { + 'attention': { + 'gating': False, + 'num_head': 4 + }, + 'dgram_features': { + 'max_bin': 50.75, + 'min_bin': 3.25, + 'num_bins': 39 + }, + 'enabled': True, + 'max_templates': 4, + 'num_channels': 64, + 'subbatch_size': 128, + 'template_pair_stack': { + 'num_block': 2, + 'pair_transition': { + 'dropout_rate': 0.0, + 'num_intermediate_factor': 2, + 'orientation': 'per_row', + 'shared_dropout': True + }, + 'triangle_attention_ending_node': { + 'dropout_rate': 0.25, + 'gating': True, + 'num_head': 4, + 'orientation': 'per_column', + 'shared_dropout': True + }, + 'triangle_attention_starting_node': { + 'dropout_rate': 0.25, + 'gating': True, + 'num_head': 4, + 'orientation': 'per_row', + 'shared_dropout': True + }, + 'triangle_multiplication_incoming': { + 'dropout_rate': 0.25, + 'equation': 'kjc,kic->ijc', + 'num_intermediate_channel': 64, + 'orientation': 'per_row', + 'shared_dropout': True, + 'fuse_projection_weights': True, + }, + 'triangle_multiplication_outgoing': { + 'dropout_rate': 0.25, + 'equation': 'ikc,jkc->ijc', + 'num_intermediate_channel': 64, + 'orientation': 'per_row', + 'shared_dropout': True, + 'fuse_projection_weights': True, + } + } + }, + }, + 'global_config': { + 'bfloat16': True, + 'bfloat16_output': False, + 'deterministic': False, + 'multimer_mode': True, + 'subbatch_size': 4, + 'use_remat': False, + 'zero_init': True, + 'eval_dropout': False, + }, + 'heads': { + 'distogram': { + 'first_break': 2.3125, + 'last_break': 21.6875, + 'num_bins': 64, + 'weight': 0.3 + }, + 'experimentally_resolved': { + 'filter_by_resolution': True, + 'max_resolution': 3.0, + 'min_resolution': 0.1, + 'weight': 0.01 + }, + 'masked_msa': { + 'weight': 2.0 + }, + 'predicted_aligned_error': { + 'filter_by_resolution': True, + 'max_error_bin': 31.0, + 'max_resolution': 3.0, + 'min_resolution': 0.1, + 'num_bins': 64, + 'num_channels': 128, + 'weight': 0.1 + }, + 'predicted_lddt': { + 'filter_by_resolution': True, + 'max_resolution': 3.0, + 'min_resolution': 0.1, + 'num_bins': 50, + 'num_channels': 128, + 'weight': 0.01 + }, + 'structure_module': { + 'angle_norm_weight': 0.01, + 'chi_weight': 0.5, + 'clash_overlap_tolerance': 1.5, + 'dropout': 0.1, + 'interface_fape': { + 'atom_clamp_distance': 1000.0, + 'loss_unit_distance': 20.0 + }, + 'intra_chain_fape': { + 'atom_clamp_distance': 10.0, + 'loss_unit_distance': 10.0 + }, + 'num_channel': 384, + 'num_head': 12, + 'num_layer': 8, + 'num_layer_in_transition': 3, + 'num_point_qk': 4, + 'num_point_v': 8, + 'num_scalar_qk': 16, + 'num_scalar_v': 16, + 'position_scale': 20.0, + 'sidechain': { + 'atom_clamp_distance': 10.0, + 'loss_unit_distance': 10.0, + 'num_channel': 128, + 'num_residual_block': 2, + 'weight_frac': 0.5 + }, + 'structural_violation_loss_weight': 1.0, + 'violation_tolerance_factor': 12.0, + 'weight': 1.0 + } + }, + 'num_ensemble_eval': 1, + 'num_recycle': 20, + # A negative value indicates that no early stopping will occur, i.e. + # the model will always run `num_recycle` number of recycling + # iterations. A positive value will enable early stopping if the + # difference in pairwise distances is less than the tolerance between + # recycling steps. + 'recycle_early_stop_tolerance': 0.5, + 'resample_msa_in_recycling': True + } +}) diff --git a/alphafold/model/data.py b/alphafold/model/data.py new file mode 100644 index 0000000000000000000000000000000000000000..55472bf62db4ded6215389d28fafbde5e53b43c0 --- /dev/null +++ b/alphafold/model/data.py @@ -0,0 +1,33 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Convenience functions for reading data.""" + +import io +import os +from alphafold.model import utils +import haiku as hk +import numpy as np +# Internal import (7716). + + +def get_model_haiku_params(model_name: str, data_dir: str) -> hk.Params: + """Get the Haiku parameters from a model name.""" + + path = os.path.join(data_dir, 'params', f'params_{model_name}.npz') + + with open(path, 'rb') as f: + params = np.load(io.BytesIO(f.read()), allow_pickle=False) + + return utils.flat_params_to_haiku(params) diff --git a/alphafold/model/features.py b/alphafold/model/features.py new file mode 100644 index 0000000000000000000000000000000000000000..c261cef1970407881a0b3e3106e448006648d607 --- /dev/null +++ b/alphafold/model/features.py @@ -0,0 +1,104 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Code to generate processed features.""" +import copy +from typing import List, Mapping, Tuple + +from alphafold.model.tf import input_pipeline +from alphafold.model.tf import proteins_dataset + +import ml_collections +import numpy as np +import tensorflow.compat.v1 as tf + +FeatureDict = Mapping[str, np.ndarray] + + +def make_data_config( + config: ml_collections.ConfigDict, + num_res: int, + ) -> Tuple[ml_collections.ConfigDict, List[str]]: + """Makes a data config for the input pipeline.""" + cfg = copy.deepcopy(config.data) + + feature_names = cfg.common.unsupervised_features + if cfg.common.use_templates: + feature_names += cfg.common.template_features + + with cfg.unlocked(): + cfg.eval.crop_size = num_res + + return cfg, feature_names + + +def tf_example_to_features(tf_example: tf.train.Example, + config: ml_collections.ConfigDict, + random_seed: int = 0) -> FeatureDict: + """Converts tf_example to numpy feature dictionary.""" + num_res = int(tf_example.features.feature['seq_length'].int64_list.value[0]) + cfg, feature_names = make_data_config(config, num_res=num_res) + + if 'deletion_matrix_int' in set(tf_example.features.feature): + deletion_matrix_int = ( + tf_example.features.feature['deletion_matrix_int'].int64_list.value) + feat = tf.train.Feature(float_list=tf.train.FloatList( + value=map(float, deletion_matrix_int))) + tf_example.features.feature['deletion_matrix'].CopyFrom(feat) + del tf_example.features.feature['deletion_matrix_int'] + + tf_graph = tf.Graph() + with tf_graph.as_default(), tf.device('/device:CPU:0'): + tf.compat.v1.set_random_seed(random_seed) + tensor_dict = proteins_dataset.create_tensor_dict( + raw_data=tf_example.SerializeToString(), + features=feature_names) + processed_batch = input_pipeline.process_tensors_from_config( + tensor_dict, cfg) + + tf_graph.finalize() + + with tf.Session(graph=tf_graph) as sess: + features = sess.run(processed_batch) + + return {k: v for k, v in features.items() if v.dtype != 'O'} + + +def np_example_to_features(np_example: FeatureDict, + config: ml_collections.ConfigDict, + random_seed: int = 0) -> FeatureDict: + """Preprocesses NumPy feature dict using TF pipeline.""" + np_example = dict(np_example) + num_res = int(np_example['seq_length'][0]) + cfg, feature_names = make_data_config(config, num_res=num_res) + + if 'deletion_matrix_int' in np_example: + np_example['deletion_matrix'] = ( + np_example.pop('deletion_matrix_int').astype(np.float32)) + + tf_graph = tf.Graph() + with tf_graph.as_default(), tf.device('/device:CPU:0'): + tf.compat.v1.set_random_seed(random_seed) + tensor_dict = proteins_dataset.np_to_tensor_dict( + np_example=np_example, features=feature_names) + + processed_batch = input_pipeline.process_tensors_from_config( + tensor_dict, cfg) + + tf_graph.finalize() + + with tf.Session(graph=tf_graph) as sess: + features = sess.run(processed_batch) + + return {k: v for k, v in features.items() if v.dtype != 'O'} diff --git a/alphafold/model/folding.py b/alphafold/model/folding.py new file mode 100644 index 0000000000000000000000000000000000000000..e73266489190f7df63632be126443cf1c8a62422 --- /dev/null +++ b/alphafold/model/folding.py @@ -0,0 +1,1009 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Modules and utilities for the structure module.""" + +import functools +from typing import Dict +from alphafold.common import residue_constants +from alphafold.model import all_atom +from alphafold.model import common_modules +from alphafold.model import prng +from alphafold.model import quat_affine +from alphafold.model import r3 +from alphafold.model import utils +import haiku as hk +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np + + +def squared_difference(x, y): + return jnp.square(x - y) + + +class InvariantPointAttention(hk.Module): + """Invariant Point attention module. + + The high-level idea is that this attention module works over a set of points + and associated orientations in 3D space (e.g. protein residues). + + Each residue outputs a set of queries and keys as points in their local + reference frame. The attention is then defined as the euclidean distance + between the queries and keys in the global frame. + + Jumper et al. (2021) Suppl. Alg. 22 "InvariantPointAttention" + """ + + def __init__(self, + config, + global_config, + dist_epsilon=1e-8, + name='invariant_point_attention'): + """Initialize. + + Args: + config: Structure Module Config + global_config: Global Config of Model. + dist_epsilon: Small value to avoid NaN in distance calculation. + name: Haiku Module name. + """ + super().__init__(name=name) + + self._dist_epsilon = dist_epsilon + self._zero_initialize_last = global_config.zero_init + + self.config = config + + self.global_config = global_config + + def __call__(self, inputs_1d, inputs_2d, mask, affine): + """Compute geometry-aware attention. + + Given a set of query residues (defined by affines and associated scalar + features), this function computes geometry-aware attention between the + query residues and target residues. + + The residues produce points in their local reference frame, which + are converted into the global frame in order to compute attention via + euclidean distance. + + Equivalently, the target residues produce points in their local frame to be + used as attention values, which are converted into the query residues' + local frames. + + Args: + inputs_1d: (N, C) 1D input embedding that is the basis for the + scalar queries. + inputs_2d: (N, M, C') 2D input embedding, used for biases and values. + mask: (N, 1) mask to indicate which elements of inputs_1d participate + in the attention. + affine: QuatAffine object describing the position and orientation of + every element in inputs_1d. + + Returns: + Transformation of the input embedding. + """ + num_residues, _ = inputs_1d.shape + + # Improve readability by removing a large number of 'self's. + num_head = self.config.num_head + num_scalar_qk = self.config.num_scalar_qk + num_point_qk = self.config.num_point_qk + num_scalar_v = self.config.num_scalar_v + num_point_v = self.config.num_point_v + num_output = self.config.num_channel + + assert num_scalar_qk > 0 + assert num_point_qk > 0 + assert num_point_v > 0 + + # Construct scalar queries of shape: + # [num_query_residues, num_head, num_points] + q_scalar = common_modules.Linear( + num_head * num_scalar_qk, name='q_scalar')( + inputs_1d) + q_scalar = jnp.reshape( + q_scalar, [num_residues, num_head, num_scalar_qk]) + + # Construct scalar keys/values of shape: + # [num_target_residues, num_head, num_points] + kv_scalar = common_modules.Linear( + num_head * (num_scalar_v + num_scalar_qk), name='kv_scalar')( + inputs_1d) + kv_scalar = jnp.reshape(kv_scalar, + [num_residues, num_head, + num_scalar_v + num_scalar_qk]) + k_scalar, v_scalar = jnp.split(kv_scalar, [num_scalar_qk], axis=-1) + + # Construct query points of shape: + # [num_residues, num_head, num_point_qk] + + # First construct query points in local frame. + q_point_local = common_modules.Linear( + num_head * 3 * num_point_qk, name='q_point_local')( + inputs_1d) + q_point_local = jnp.split(q_point_local, 3, axis=-1) + # Project query points into global frame. + q_point_global = affine.apply_to_point(q_point_local, extra_dims=1) + # Reshape query point for later use. + q_point = [ + jnp.reshape(x, [num_residues, num_head, num_point_qk]) + for x in q_point_global] + + # Construct key and value points. + # Key points have shape [num_residues, num_head, num_point_qk] + # Value points have shape [num_residues, num_head, num_point_v] + + # Construct key and value points in local frame. + kv_point_local = common_modules.Linear( + num_head * 3 * (num_point_qk + num_point_v), name='kv_point_local')( + inputs_1d) + kv_point_local = jnp.split(kv_point_local, 3, axis=-1) + # Project key and value points into global frame. + kv_point_global = affine.apply_to_point(kv_point_local, extra_dims=1) + kv_point_global = [ + jnp.reshape(x, [num_residues, + num_head, (num_point_qk + num_point_v)]) + for x in kv_point_global] + # Split key and value points. + k_point, v_point = list( + zip(*[ + jnp.split(x, [num_point_qk,], axis=-1) + for x in kv_point_global + ])) + + # We assume that all queries and keys come iid from N(0, 1) distribution + # and compute the variances of the attention logits. + # Each scalar pair (q, k) contributes Var q*k = 1 + scalar_variance = max(num_scalar_qk, 1) * 1. + # Each point pair (q, k) contributes Var [0.5 ||q||^2 - <q, k>] = 9 / 2 + point_variance = max(num_point_qk, 1) * 9. / 2 + + # Allocate equal variance to scalar, point and attention 2d parts so that + # the sum is 1. + + num_logit_terms = 3 + + scalar_weights = np.sqrt(1.0 / (num_logit_terms * scalar_variance)) + point_weights = np.sqrt(1.0 / (num_logit_terms * point_variance)) + attention_2d_weights = np.sqrt(1.0 / (num_logit_terms)) + + # Trainable per-head weights for points. + trainable_point_weights = jax.nn.softplus(hk.get_parameter( + 'trainable_point_weights', shape=[num_head], + # softplus^{-1} (1) + init=hk.initializers.Constant(np.log(np.exp(1.) - 1.)))) + point_weights *= jnp.expand_dims(trainable_point_weights, axis=1) + + v_point = [jnp.swapaxes(x, -2, -3) for x in v_point] + + q_point = [jnp.swapaxes(x, -2, -3) for x in q_point] + k_point = [jnp.swapaxes(x, -2, -3) for x in k_point] + dist2 = [ + squared_difference(qx[:, :, None, :], kx[:, None, :, :]) + for qx, kx in zip(q_point, k_point) + ] + dist2 = sum(dist2) + attn_qk_point = -0.5 * jnp.sum( + point_weights[:, None, None, :] * dist2, axis=-1) + + v = jnp.swapaxes(v_scalar, -2, -3) + q = jnp.swapaxes(scalar_weights * q_scalar, -2, -3) + k = jnp.swapaxes(k_scalar, -2, -3) + attn_qk_scalar = jnp.matmul(q, jnp.swapaxes(k, -2, -1)) + attn_logits = attn_qk_scalar + attn_qk_point + + attention_2d = common_modules.Linear( + num_head, name='attention_2d')( + inputs_2d) + + attention_2d = jnp.transpose(attention_2d, [2, 0, 1]) + attention_2d = attention_2d_weights * attention_2d + attn_logits += attention_2d + + mask_2d = mask * jnp.swapaxes(mask, -1, -2) + attn_logits -= 1e5 * (1. - mask_2d) + + # [num_head, num_query_residues, num_target_residues] + attn = jax.nn.softmax(attn_logits) + + # [num_head, num_query_residues, num_head * num_scalar_v] + result_scalar = jnp.matmul(attn, v) + + # For point result, implement matmul manually so that it will be a float32 + # on TPU. This is equivalent to + # result_point_global = [jnp.einsum('bhqk,bhkc->bhqc', attn, vx) + # for vx in v_point] + # but on the TPU, doing the multiply and reduce_sum ensures the + # computation happens in float32 instead of bfloat16. + result_point_global = [jnp.sum( + attn[:, :, :, None] * vx[:, None, :, :], + axis=-2) for vx in v_point] + + # [num_query_residues, num_head, num_head * num_(scalar|point)_v] + result_scalar = jnp.swapaxes(result_scalar, -2, -3) + result_point_global = [ + jnp.swapaxes(x, -2, -3) + for x in result_point_global] + + # Features used in the linear output projection. Should have the size + # [num_query_residues, ?] + output_features = [] + + result_scalar = jnp.reshape( + result_scalar, [num_residues, num_head * num_scalar_v]) + output_features.append(result_scalar) + + result_point_global = [ + jnp.reshape(r, [num_residues, num_head * num_point_v]) + for r in result_point_global] + result_point_local = affine.invert_point(result_point_global, extra_dims=1) + output_features.extend(result_point_local) + + output_features.append(jnp.sqrt(self._dist_epsilon + + jnp.square(result_point_local[0]) + + jnp.square(result_point_local[1]) + + jnp.square(result_point_local[2]))) + + # Dimensions: h = heads, i and j = residues, + # c = inputs_2d channels + # Contraction happens over the second residue dimension, similarly to how + # the usual attention is performed. + result_attention_over_2d = jnp.einsum('hij, ijc->ihc', attn, inputs_2d) + num_out = num_head * result_attention_over_2d.shape[-1] + output_features.append( + jnp.reshape(result_attention_over_2d, + [num_residues, num_out])) + + final_init = 'zeros' if self._zero_initialize_last else 'linear' + + final_act = jnp.concatenate(output_features, axis=-1) + + return common_modules.Linear( + num_output, + initializer=final_init, + name='output_projection')(final_act) + + +class FoldIteration(hk.Module): + """A single iteration of the main structure module loop. + + Jumper et al. (2021) Suppl. Alg. 20 "StructureModule" lines 6-21 + + First, each residue attends to all residues using InvariantPointAttention. + Then, we apply transition layers to update the hidden representations. + Finally, we use the hidden representations to produce an update to the + affine of each residue. + """ + + def __init__(self, config, global_config, + name='fold_iteration'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, + activations, + sequence_mask, + update_affine, + is_training, + initial_act, + safe_key=None, + static_feat_2d=None, + aatype=None): + c = self.config + + if safe_key is None: + safe_key = prng.SafeKey(hk.next_rng_key()) + + def safe_dropout_fn(tensor, safe_key): + return prng.safe_dropout( + tensor=tensor, + safe_key=safe_key, + rate=c.dropout, + is_deterministic=self.global_config.deterministic, + is_training=is_training) + + affine = quat_affine.QuatAffine.from_tensor(activations['affine']) + + act = activations['act'] + attention_module = InvariantPointAttention(self.config, self.global_config) + # Attention + attn = attention_module( + inputs_1d=act, + inputs_2d=static_feat_2d, + mask=sequence_mask, + affine=affine) + act += attn + safe_key, *sub_keys = safe_key.split(3) + sub_keys = iter(sub_keys) + act = safe_dropout_fn(act, next(sub_keys)) + act = common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='attention_layer_norm')( + act) + + final_init = 'zeros' if self.global_config.zero_init else 'linear' + + # Transition + input_act = act + for i in range(c.num_layer_in_transition): + init = 'relu' if i < c.num_layer_in_transition - 1 else final_init + act = common_modules.Linear( + c.num_channel, + initializer=init, + name='transition')( + act) + if i < c.num_layer_in_transition - 1: + act = jax.nn.relu(act) + act += input_act + act = safe_dropout_fn(act, next(sub_keys)) + act = common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='transition_layer_norm')(act) + + if update_affine: + # This block corresponds to + # Jumper et al. (2021) Alg. 23 "Backbone update" + affine_update_size = 6 + + # Affine update + affine_update = common_modules.Linear( + affine_update_size, + initializer=final_init, + name='affine_update')( + act) + + affine = affine.pre_compose(affine_update) + + sc = MultiRigidSidechain(c.sidechain, self.global_config)( + affine.scale_translation(c.position_scale), [act, initial_act], aatype) + + outputs = {'affine': affine.to_tensor(), 'sc': sc} + + affine = affine.apply_rotation_tensor_fn(jax.lax.stop_gradient) + + new_activations = { + 'act': act, + 'affine': affine.to_tensor() + } + return new_activations, outputs + + +def generate_affines(representations, batch, config, global_config, + is_training, safe_key): + """Generate predicted affines for a single chain. + + Jumper et al. (2021) Suppl. Alg. 20 "StructureModule" + + This is the main part of the structure module - it iteratively applies + folding to produce a set of predicted residue positions. + + Args: + representations: Representations dictionary. + batch: Batch dictionary. + config: Config for the structure module. + global_config: Global config. + is_training: Whether the model is being trained. + safe_key: A prng.SafeKey object that wraps a PRNG key. + + Returns: + A dictionary containing residue affines and sidechain positions. + """ + c = config + sequence_mask = batch['seq_mask'][:, None] + + act = common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='single_layer_norm')( + representations['single']) + + initial_act = act + act = common_modules.Linear( + c.num_channel, name='initial_projection')( + act) + + affine = generate_new_affine(sequence_mask) + + fold_iteration = FoldIteration( + c, global_config, name='fold_iteration') + + assert len(batch['seq_mask'].shape) == 1 + + activations = {'act': act, + 'affine': affine.to_tensor(), + } + + act_2d = common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='pair_layer_norm')( + representations['pair']) + + outputs = [] + safe_keys = safe_key.split(c.num_layer) + for sub_key in safe_keys: + activations, output = fold_iteration( + activations, + initial_act=initial_act, + static_feat_2d=act_2d, + safe_key=sub_key, + sequence_mask=sequence_mask, + update_affine=True, + is_training=is_training, + aatype=batch['aatype']) + outputs.append(output) + + output = jax.tree_map(lambda *x: jnp.stack(x), *outputs) + # Include the activations in the output dict for use by the LDDT-Head. + output['act'] = activations['act'] + + return output + + +class StructureModule(hk.Module): + """StructureModule as a network head. + + Jumper et al. (2021) Suppl. Alg. 20 "StructureModule" + """ + + def __init__(self, config, global_config, compute_loss=True, + name='structure_module'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + self.compute_loss = compute_loss + + def __call__(self, representations, batch, is_training, + safe_key=None): + c = self.config + ret = {} + + if safe_key is None: + safe_key = prng.SafeKey(hk.next_rng_key()) + + output = generate_affines( + representations=representations, + batch=batch, + config=self.config, + global_config=self.global_config, + is_training=is_training, + safe_key=safe_key) + + ret['representations'] = {'structure_module': output['act']} + + ret['traj'] = output['affine'] * jnp.array([1.] * 4 + + [c.position_scale] * 3) + + ret['sidechains'] = output['sc'] + + atom14_pred_positions = r3.vecs_to_tensor(output['sc']['atom_pos'])[-1] + ret['final_atom14_positions'] = atom14_pred_positions # (N, 14, 3) + ret['final_atom14_mask'] = batch['atom14_atom_exists'] # (N, 14) + + atom37_pred_positions = all_atom.atom14_to_atom37(atom14_pred_positions, + batch) + atom37_pred_positions *= batch['atom37_atom_exists'][:, :, None] + ret['final_atom_positions'] = atom37_pred_positions # (N, 37, 3) + + ret['final_atom_mask'] = batch['atom37_atom_exists'] # (N, 37) + ret['final_affines'] = ret['traj'][-1] + + if self.compute_loss: + return ret + else: + no_loss_features = ['final_atom_positions', 'final_atom_mask', + 'representations'] + no_loss_ret = {k: ret[k] for k in no_loss_features} + return no_loss_ret + + def loss(self, value, batch): + ret = {'loss': 0.} + + ret['metrics'] = {} + # If requested, compute in-graph metrics. + if self.config.compute_in_graph_metrics: + atom14_pred_positions = value['final_atom14_positions'] + # Compute renaming and violations. + value.update(compute_renamed_ground_truth(batch, atom14_pred_positions)) + value['violations'] = find_structural_violations( + batch, atom14_pred_positions, self.config) + + # Several violation metrics: + violation_metrics = compute_violation_metrics( + batch=batch, + atom14_pred_positions=atom14_pred_positions, + violations=value['violations']) + ret['metrics'].update(violation_metrics) + + backbone_loss(ret, batch, value, self.config) + + if 'renamed_atom14_gt_positions' not in value: + value.update(compute_renamed_ground_truth( + batch, value['final_atom14_positions'])) + sc_loss = sidechain_loss(batch, value, self.config) + + ret['loss'] = ((1 - self.config.sidechain.weight_frac) * ret['loss'] + + self.config.sidechain.weight_frac * sc_loss['loss']) + ret['sidechain_fape'] = sc_loss['fape'] + + supervised_chi_loss(ret, batch, value, self.config) + + if self.config.structural_violation_loss_weight: + if 'violations' not in value: + value['violations'] = find_structural_violations( + batch, value['final_atom14_positions'], self.config) + structural_violation_loss(ret, batch, value, self.config) + + return ret + + +def compute_renamed_ground_truth( + batch: Dict[str, jnp.ndarray], + atom14_pred_positions: jnp.ndarray, + ) -> Dict[str, jnp.ndarray]: + """Find optimal renaming of ground truth based on the predicted positions. + + Jumper et al. (2021) Suppl. Alg. 26 "renameSymmetricGroundTruthAtoms" + + This renamed ground truth is then used for all losses, + such that each loss moves the atoms in the same direction. + Shape (N). + + Args: + batch: Dictionary containing: + * atom14_gt_positions: Ground truth positions. + * atom14_alt_gt_positions: Ground truth positions with renaming swaps. + * atom14_atom_is_ambiguous: 1.0 for atoms that are affected by + renaming swaps. + * atom14_gt_exists: Mask for which atoms exist in ground truth. + * atom14_alt_gt_exists: Mask for which atoms exist in ground truth + after renaming. + * atom14_atom_exists: Mask for whether each atom is part of the given + amino acid type. + atom14_pred_positions: Array of atom positions in global frame with shape + (N, 14, 3). + Returns: + Dictionary containing: + alt_naming_is_better: Array with 1.0 where alternative swap is better. + renamed_atom14_gt_positions: Array of optimal ground truth positions + after renaming swaps are performed. + renamed_atom14_gt_exists: Mask after renaming swap is performed. + """ + alt_naming_is_better = all_atom.find_optimal_renaming( + atom14_gt_positions=batch['atom14_gt_positions'], + atom14_alt_gt_positions=batch['atom14_alt_gt_positions'], + atom14_atom_is_ambiguous=batch['atom14_atom_is_ambiguous'], + atom14_gt_exists=batch['atom14_gt_exists'], + atom14_pred_positions=atom14_pred_positions, + atom14_atom_exists=batch['atom14_atom_exists']) + + renamed_atom14_gt_positions = ( + (1. - alt_naming_is_better[:, None, None]) + * batch['atom14_gt_positions'] + + alt_naming_is_better[:, None, None] + * batch['atom14_alt_gt_positions']) + + renamed_atom14_gt_mask = ( + (1. - alt_naming_is_better[:, None]) * batch['atom14_gt_exists'] + + alt_naming_is_better[:, None] * batch['atom14_alt_gt_exists']) + + return { + 'alt_naming_is_better': alt_naming_is_better, # (N) + 'renamed_atom14_gt_positions': renamed_atom14_gt_positions, # (N, 14, 3) + 'renamed_atom14_gt_exists': renamed_atom14_gt_mask, # (N, 14) + } + + +def backbone_loss(ret, batch, value, config): + """Backbone FAPE Loss. + + Jumper et al. (2021) Suppl. Alg. 20 "StructureModule" line 17 + + Args: + ret: Dictionary to write outputs into, needs to contain 'loss'. + batch: Batch, needs to contain 'backbone_affine_tensor', + 'backbone_affine_mask'. + value: Dictionary containing structure module output, needs to contain + 'traj', a trajectory of rigids. + config: Configuration of loss, should contain 'fape.clamp_distance' and + 'fape.loss_unit_distance'. + """ + affine_trajectory = quat_affine.QuatAffine.from_tensor(value['traj']) + rigid_trajectory = r3.rigids_from_quataffine(affine_trajectory) + + gt_affine = quat_affine.QuatAffine.from_tensor( + batch['backbone_affine_tensor']) + gt_rigid = r3.rigids_from_quataffine(gt_affine) + backbone_mask = batch['backbone_affine_mask'] + + fape_loss_fn = functools.partial( + all_atom.frame_aligned_point_error, + l1_clamp_distance=config.fape.clamp_distance, + length_scale=config.fape.loss_unit_distance) + + fape_loss_fn = jax.vmap(fape_loss_fn, (0, None, None, 0, None, None)) + fape_loss = fape_loss_fn(rigid_trajectory, gt_rigid, backbone_mask, + rigid_trajectory.trans, gt_rigid.trans, + backbone_mask) + + if 'use_clamped_fape' in batch: + # Jumper et al. (2021) Suppl. Sec. 1.11.5 "Loss clamping details" + use_clamped_fape = jnp.asarray(batch['use_clamped_fape'], jnp.float32) + unclamped_fape_loss_fn = functools.partial( + all_atom.frame_aligned_point_error, + l1_clamp_distance=None, + length_scale=config.fape.loss_unit_distance) + unclamped_fape_loss_fn = jax.vmap(unclamped_fape_loss_fn, + (0, None, None, 0, None, None)) + fape_loss_unclamped = unclamped_fape_loss_fn(rigid_trajectory, gt_rigid, + backbone_mask, + rigid_trajectory.trans, + gt_rigid.trans, + backbone_mask) + + fape_loss = (fape_loss * use_clamped_fape + + fape_loss_unclamped * (1 - use_clamped_fape)) + + ret['fape'] = fape_loss[-1] + ret['loss'] += jnp.mean(fape_loss) + + +def sidechain_loss(batch, value, config): + """All Atom FAPE Loss using renamed rigids.""" + # Rename Frames + # Jumper et al. (2021) Suppl. Alg. 26 "renameSymmetricGroundTruthAtoms" line 7 + alt_naming_is_better = value['alt_naming_is_better'] + renamed_gt_frames = ( + (1. - alt_naming_is_better[:, None, None]) + * batch['rigidgroups_gt_frames'] + + alt_naming_is_better[:, None, None] + * batch['rigidgroups_alt_gt_frames']) + + flat_gt_frames = r3.rigids_from_tensor_flat12( + jnp.reshape(renamed_gt_frames, [-1, 12])) + flat_frames_mask = jnp.reshape(batch['rigidgroups_gt_exists'], [-1]) + + flat_gt_positions = r3.vecs_from_tensor( + jnp.reshape(value['renamed_atom14_gt_positions'], [-1, 3])) + flat_positions_mask = jnp.reshape(value['renamed_atom14_gt_exists'], [-1]) + + # Compute frame_aligned_point_error score for the final layer. + pred_frames = value['sidechains']['frames'] + pred_positions = value['sidechains']['atom_pos'] + + def _slice_last_layer_and_flatten(x): + return jnp.reshape(x[-1], [-1]) + flat_pred_frames = jax.tree_map( + _slice_last_layer_and_flatten, pred_frames) + flat_pred_positions = jax.tree_map( + _slice_last_layer_and_flatten, pred_positions) + # FAPE Loss on sidechains + fape = all_atom.frame_aligned_point_error( + pred_frames=flat_pred_frames, + target_frames=flat_gt_frames, + frames_mask=flat_frames_mask, + pred_positions=flat_pred_positions, + target_positions=flat_gt_positions, + positions_mask=flat_positions_mask, + l1_clamp_distance=config.sidechain.atom_clamp_distance, + length_scale=config.sidechain.length_scale) + + return { + 'fape': fape, + 'loss': fape} + + +def structural_violation_loss(ret, batch, value, config): + """Computes loss for structural violations.""" + assert config.sidechain.weight_frac + + # Put all violation losses together to one large loss. + violations = value['violations'] + num_atoms = jnp.sum(batch['atom14_atom_exists']).astype(jnp.float32) + ret['loss'] += (config.structural_violation_loss_weight * ( + violations['between_residues']['bonds_c_n_loss_mean'] + + violations['between_residues']['angles_ca_c_n_loss_mean'] + + violations['between_residues']['angles_c_n_ca_loss_mean'] + + jnp.sum( + violations['between_residues']['clashes_per_atom_loss_sum'] + + violations['within_residues']['per_atom_loss_sum']) / + (1e-6 + num_atoms))) + + +def find_structural_violations( + batch: Dict[str, jnp.ndarray], + atom14_pred_positions: jnp.ndarray, # (N, 14, 3) + config: ml_collections.ConfigDict + ): + """Computes several checks for structural violations.""" + + # Compute between residue backbone violations of bonds and angles. + connection_violations = all_atom.between_residue_bond_loss( + pred_atom_positions=atom14_pred_positions, + pred_atom_mask=batch['atom14_atom_exists'].astype(jnp.float32), + residue_index=batch['residue_index'].astype(jnp.float32), + aatype=batch['aatype'], + tolerance_factor_soft=config.violation_tolerance_factor, + tolerance_factor_hard=config.violation_tolerance_factor) + + # Compute the Van der Waals radius for every atom + # (the first letter of the atom name is the element type). + # Shape: (N, 14). + atomtype_radius = jnp.array([ + residue_constants.van_der_waals_radius[name[0]] + for name in residue_constants.atom_types + ]) + atom14_atom_radius = batch['atom14_atom_exists'] * utils.batched_gather( + atomtype_radius, batch['residx_atom14_to_atom37']) + + # Compute the between residue clash loss. + between_residue_clashes = all_atom.between_residue_clash_loss( + atom14_pred_positions=atom14_pred_positions, + atom14_atom_exists=batch['atom14_atom_exists'], + atom14_atom_radius=atom14_atom_radius, + residue_index=batch['residue_index'], + overlap_tolerance_soft=config.clash_overlap_tolerance, + overlap_tolerance_hard=config.clash_overlap_tolerance) + + # Compute all within-residue violations (clashes, + # bond length and angle violations). + restype_atom14_bounds = residue_constants.make_atom14_dists_bounds( + overlap_tolerance=config.clash_overlap_tolerance, + bond_length_tolerance_factor=config.violation_tolerance_factor) + atom14_dists_lower_bound = utils.batched_gather( + restype_atom14_bounds['lower_bound'], batch['aatype']) + atom14_dists_upper_bound = utils.batched_gather( + restype_atom14_bounds['upper_bound'], batch['aatype']) + within_residue_violations = all_atom.within_residue_violations( + atom14_pred_positions=atom14_pred_positions, + atom14_atom_exists=batch['atom14_atom_exists'], + atom14_dists_lower_bound=atom14_dists_lower_bound, + atom14_dists_upper_bound=atom14_dists_upper_bound, + tighten_bounds_for_loss=0.0) + + # Combine them to a single per-residue violation mask (used later for LDDT). + per_residue_violations_mask = jnp.max(jnp.stack([ + connection_violations['per_residue_violation_mask'], + jnp.max(between_residue_clashes['per_atom_clash_mask'], axis=-1), + jnp.max(within_residue_violations['per_atom_violations'], + axis=-1)]), axis=0) + + return { + 'between_residues': { + 'bonds_c_n_loss_mean': + connection_violations['c_n_loss_mean'], # () + 'angles_ca_c_n_loss_mean': + connection_violations['ca_c_n_loss_mean'], # () + 'angles_c_n_ca_loss_mean': + connection_violations['c_n_ca_loss_mean'], # () + 'connections_per_residue_loss_sum': + connection_violations['per_residue_loss_sum'], # (N) + 'connections_per_residue_violation_mask': + connection_violations['per_residue_violation_mask'], # (N) + 'clashes_mean_loss': + between_residue_clashes['mean_loss'], # () + 'clashes_per_atom_loss_sum': + between_residue_clashes['per_atom_loss_sum'], # (N, 14) + 'clashes_per_atom_clash_mask': + between_residue_clashes['per_atom_clash_mask'], # (N, 14) + }, + 'within_residues': { + 'per_atom_loss_sum': + within_residue_violations['per_atom_loss_sum'], # (N, 14) + 'per_atom_violations': + within_residue_violations['per_atom_violations'], # (N, 14), + }, + 'total_per_residue_violations_mask': + per_residue_violations_mask, # (N) + } + + +def compute_violation_metrics( + batch: Dict[str, jnp.ndarray], + atom14_pred_positions: jnp.ndarray, # (N, 14, 3) + violations: Dict[str, jnp.ndarray], + ) -> Dict[str, jnp.ndarray]: + """Compute several metrics to assess the structural violations.""" + + ret = {} + extreme_ca_ca_violations = all_atom.extreme_ca_ca_distance_violations( + pred_atom_positions=atom14_pred_positions, + pred_atom_mask=batch['atom14_atom_exists'].astype(jnp.float32), + residue_index=batch['residue_index'].astype(jnp.float32)) + ret['violations_extreme_ca_ca_distance'] = extreme_ca_ca_violations + ret['violations_between_residue_bond'] = utils.mask_mean( + mask=batch['seq_mask'], + value=violations['between_residues'][ + 'connections_per_residue_violation_mask']) + ret['violations_between_residue_clash'] = utils.mask_mean( + mask=batch['seq_mask'], + value=jnp.max( + violations['between_residues']['clashes_per_atom_clash_mask'], + axis=-1)) + ret['violations_within_residue'] = utils.mask_mean( + mask=batch['seq_mask'], + value=jnp.max( + violations['within_residues']['per_atom_violations'], axis=-1)) + ret['violations_per_residue'] = utils.mask_mean( + mask=batch['seq_mask'], + value=violations['total_per_residue_violations_mask']) + return ret + + +def supervised_chi_loss(ret, batch, value, config): + """Computes loss for direct chi angle supervision. + + Jumper et al. (2021) Suppl. Alg. 27 "torsionAngleLoss" + + Args: + ret: Dictionary to write outputs into, needs to contain 'loss'. + batch: Batch, needs to contain 'seq_mask', 'chi_mask', 'chi_angles'. + value: Dictionary containing structure module output, needs to contain + value['sidechains']['angles_sin_cos'] for angles and + value['sidechains']['unnormalized_angles_sin_cos'] for unnormalized + angles. + config: Configuration of loss, should contain 'chi_weight' and + 'angle_norm_weight', 'angle_norm_weight' scales angle norm term, + 'chi_weight' scales torsion term. + """ + eps = 1e-6 + + sequence_mask = batch['seq_mask'] + num_res = sequence_mask.shape[0] + chi_mask = batch['chi_mask'].astype(jnp.float32) + pred_angles = jnp.reshape( + value['sidechains']['angles_sin_cos'], [-1, num_res, 7, 2]) + pred_angles = pred_angles[:, :, 3:] + + residue_type_one_hot = jax.nn.one_hot( + batch['aatype'], residue_constants.restype_num + 1, + dtype=jnp.float32)[None] + chi_pi_periodic = jnp.einsum('ijk, kl->ijl', residue_type_one_hot, + jnp.asarray(residue_constants.chi_pi_periodic)) + + true_chi = batch['chi_angles'][None] + sin_true_chi = jnp.sin(true_chi) + cos_true_chi = jnp.cos(true_chi) + sin_cos_true_chi = jnp.stack([sin_true_chi, cos_true_chi], axis=-1) + + # This is -1 if chi is pi-periodic and +1 if it's 2pi-periodic + shifted_mask = (1 - 2 * chi_pi_periodic)[..., None] + sin_cos_true_chi_shifted = shifted_mask * sin_cos_true_chi + + sq_chi_error = jnp.sum( + squared_difference(sin_cos_true_chi, pred_angles), -1) + sq_chi_error_shifted = jnp.sum( + squared_difference(sin_cos_true_chi_shifted, pred_angles), -1) + sq_chi_error = jnp.minimum(sq_chi_error, sq_chi_error_shifted) + + sq_chi_loss = utils.mask_mean(mask=chi_mask[None], value=sq_chi_error) + ret['chi_loss'] = sq_chi_loss + ret['loss'] += config.chi_weight * sq_chi_loss + unnormed_angles = jnp.reshape( + value['sidechains']['unnormalized_angles_sin_cos'], [-1, num_res, 7, 2]) + angle_norm = jnp.sqrt(jnp.sum(jnp.square(unnormed_angles), axis=-1) + eps) + norm_error = jnp.abs(angle_norm - 1.) + angle_norm_loss = utils.mask_mean(mask=sequence_mask[None, :, None], + value=norm_error) + + ret['angle_norm_loss'] = angle_norm_loss + ret['loss'] += config.angle_norm_weight * angle_norm_loss + + +def generate_new_affine(sequence_mask): + num_residues, _ = sequence_mask.shape + quaternion = jnp.tile( + jnp.reshape(jnp.asarray([1., 0., 0., 0.]), [1, 4]), + [num_residues, 1]) + + translation = jnp.zeros([num_residues, 3]) + return quat_affine.QuatAffine(quaternion, translation, unstack_inputs=True) + + +def l2_normalize(x, axis=-1, epsilon=1e-12): + return x / jnp.sqrt( + jnp.maximum(jnp.sum(x**2, axis=axis, keepdims=True), epsilon)) + + +class MultiRigidSidechain(hk.Module): + """Class to make side chain atoms.""" + + def __init__(self, config, global_config, name='rigid_sidechain'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, affine, representations_list, aatype): + """Predict side chains using multi-rigid representations. + + Args: + affine: The affines for each residue (translations in angstroms). + representations_list: A list of activations to predict side chains from. + aatype: Amino acid types. + + Returns: + Dict containing atom positions and frames (in angstroms). + """ + act = [ + common_modules.Linear( # pylint: disable=g-complex-comprehension + self.config.num_channel, + name='input_projection')(jax.nn.relu(x)) + for x in representations_list + ] + # Sum the activation list (equivalent to concat then Linear). + act = sum(act) + + final_init = 'zeros' if self.global_config.zero_init else 'linear' + + # Mapping with some residual blocks. + for _ in range(self.config.num_residual_block): + old_act = act + act = common_modules.Linear( + self.config.num_channel, + initializer='relu', + name='resblock1')( + jax.nn.relu(act)) + act = common_modules.Linear( + self.config.num_channel, + initializer=final_init, + name='resblock2')( + jax.nn.relu(act)) + act += old_act + + # Map activations to torsion angles. Shape: (num_res, 14). + num_res = act.shape[0] + unnormalized_angles = common_modules.Linear( + 14, name='unnormalized_angles')( + jax.nn.relu(act)) + unnormalized_angles = jnp.reshape( + unnormalized_angles, [num_res, 7, 2]) + angles = l2_normalize(unnormalized_angles, axis=-1) + + outputs = { + 'angles_sin_cos': angles, # jnp.ndarray (N, 7, 2) + 'unnormalized_angles_sin_cos': + unnormalized_angles, # jnp.ndarray (N, 7, 2) + } + + # Map torsion angles to frames. + backb_to_global = r3.rigids_from_quataffine(affine) + + # Jumper et al. (2021) Suppl. Alg. 24 "computeAllAtomCoordinates" + + # r3.Rigids with shape (N, 8). + all_frames_to_global = all_atom.torsion_angles_to_frames( + aatype, + backb_to_global, + angles) + + # Use frames and literature positions to create the final atom coordinates. + # r3.Vecs with shape (N, 14). + pred_positions = all_atom.frames_and_literature_positions_to_atom14_pos( + aatype, all_frames_to_global) + + outputs.update({ + 'atom_pos': pred_positions, # r3.Vecs (N, 14) + 'frames': all_frames_to_global, # r3.Rigids (N, 8) + }) + return outputs diff --git a/alphafold/model/folding_multimer.py b/alphafold/model/folding_multimer.py new file mode 100644 index 0000000000000000000000000000000000000000..1c0d689b0262a3663535b84e25436f04a70d6687 --- /dev/null +++ b/alphafold/model/folding_multimer.py @@ -0,0 +1,1162 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Modules and utilities for the structure module in the multimer system.""" + +import functools +import numbers +from typing import Any, Dict, Iterable, Mapping, Optional, Tuple, Union + +from alphafold.common import residue_constants +from alphafold.model import all_atom_multimer +from alphafold.model import common_modules +from alphafold.model import geometry +from alphafold.model import modules +from alphafold.model import prng +from alphafold.model import utils +from alphafold.model.geometry import utils as geometry_utils +import haiku as hk +import jax +import jax.numpy as jnp +import ml_collections +import numpy as np + + +EPSILON = 1e-8 +Float = Union[float, jnp.ndarray] + + +def squared_difference(x: jnp.ndarray, y: jnp.ndarray) -> jnp.ndarray: + """Computes Squared difference between two arrays.""" + return jnp.square(x - y) + + +def make_backbone_affine( + positions: geometry.Vec3Array, + mask: jnp.ndarray, + aatype: jnp.ndarray, + ) -> Tuple[geometry.Rigid3Array, jnp.ndarray]: + """Make backbone Rigid3Array and mask.""" + del aatype + a = residue_constants.atom_order['N'] + b = residue_constants.atom_order['CA'] + c = residue_constants.atom_order['C'] + + rigid_mask = (mask[:, a] * mask[:, b] * mask[:, c]).astype( + jnp.float32) + + rigid = all_atom_multimer.make_transform_from_reference( + a_xyz=positions[:, a], b_xyz=positions[:, b], c_xyz=positions[:, c]) + + return rigid, rigid_mask + + +class QuatRigid(hk.Module): + """Module for projecting Rigids via a quaternion.""" + + def __init__(self, + global_config: ml_collections.ConfigDict, + rigid_shape: Union[int, Iterable[int]] = tuple(), + full_quat: bool = False, + init: str = 'zeros', + name: str = 'quat_rigid'): + """Module projecting a Rigid Object. + + For this Module the Rotation is parametrized as a quaternion, + If 'full_quat' is True a 4 vector is produced for the rotation which is + normalized and treated as a quaternion. + When 'full_quat' is False a 3 vector is produced and the 1st component of + the quaternion is set to 1. + + Args: + global_config: Global Config, used to set certain properties of underlying + Linear module, see common_modules.Linear for details. + rigid_shape: Shape of Rigids relative to shape of activations, e.g. when + activations have shape (n,) and this is (m,) output will be (n, m) + full_quat: Whether to parametrize rotation using full quaternion. + init: initializer to use, see common_modules.Linear for details + name: Name to use for module. + """ + self.init = init + self.global_config = global_config + if isinstance(rigid_shape, int): + self.rigid_shape = (rigid_shape,) + else: + self.rigid_shape = tuple(rigid_shape) + self.full_quat = full_quat + super(QuatRigid, self).__init__(name=name) + + def __call__(self, activations: jnp.ndarray) -> geometry.Rigid3Array: + """Executes Module. + + This returns a set of rigid with the same shape as activations, projecting + the channel dimension, rigid_shape controls the trailing dimensions. + For example when activations is shape (12, 5) and rigid_shape is (3, 2) + then the shape of the output rigids will be (12, 3, 2). + This also supports passing in an empty tuple for rigid shape, in that case + the example would produce a rigid of shape (12,). + + Args: + activations: Activations to use for projection, shape [..., num_channel] + Returns: + Rigid transformations with shape [...] + rigid_shape + """ + if self.full_quat: + rigid_dim = 7 + else: + rigid_dim = 6 + linear_dims = self.rigid_shape + (rigid_dim,) + rigid_flat = common_modules.Linear( + linear_dims, + initializer=self.init, + precision=jax.lax.Precision.HIGHEST, + name='rigid')( + activations) + rigid_flat = geometry_utils.unstack(rigid_flat) + if self.full_quat: + qw, qx, qy, qz = rigid_flat[:4] + translation = rigid_flat[4:] + else: + qx, qy, qz = rigid_flat[:3] + qw = jnp.ones_like(qx) + translation = rigid_flat[3:] + rotation = geometry.Rot3Array.from_quaternion( + qw, qx, qy, qz, normalize=True) + translation = geometry.Vec3Array(*translation) + return geometry.Rigid3Array(rotation, translation) + + +class PointProjection(hk.Module): + """Given input reprensentation and frame produces points in global frame.""" + + def __init__(self, + num_points: Union[Iterable[int], int], + global_config: ml_collections.ConfigDict, + return_local_points: bool = False, + name: str = 'point_projection'): + """Constructs Linear Module. + + Args: + num_points: number of points to project. Can be tuple when outputting + multiple dimensions + global_config: Global Config, passed through to underlying Linear + return_local_points: Whether to return points in local frame as well. + name: name of module, used for name scopes. + """ + if isinstance(num_points, numbers.Integral): + self.num_points = (num_points,) + else: + self.num_points = tuple(num_points) + + self.return_local_points = return_local_points + + self.global_config = global_config + + super().__init__(name=name) + + def __call__( + self, activations: jnp.ndarray, rigids: geometry.Rigid3Array + ) -> Union[geometry.Vec3Array, Tuple[geometry.Vec3Array, geometry.Vec3Array]]: + output_shape = self.num_points + output_shape = output_shape[:-1] + (3 * output_shape[-1],) + points_local = common_modules.Linear( + output_shape, + precision=jax.lax.Precision.HIGHEST, + name='point_projection')( + activations) + points_local = jnp.split(points_local, 3, axis=-1) + points_local = geometry.Vec3Array(*points_local) + rigids = rigids[(...,) + (None,) * len(output_shape)] + points_global = rigids.apply_to_point(points_local) + if self.return_local_points: + return points_global, points_local + else: + return points_global + + +class InvariantPointAttention(hk.Module): + """Invariant point attention module. + + The high-level idea is that this attention module works over a set of points + and associated orientations in 3D space (e.g. protein residues). + + Each residue outputs a set of queries and keys as points in their local + reference frame. The attention is then defined as the euclidean distance + between the queries and keys in the global frame. + """ + + def __init__(self, + config: ml_collections.ConfigDict, + global_config: ml_collections.ConfigDict, + dist_epsilon: float = 1e-8, + name: str = 'invariant_point_attention'): + """Initialize. + + Args: + config: iterative Fold Head Config + global_config: Global Config of Model. + dist_epsilon: Small value to avoid NaN in distance calculation. + name: Sonnet name. + """ + super().__init__(name=name) + + self._dist_epsilon = dist_epsilon + self._zero_initialize_last = global_config.zero_init + + self.config = config + + self.global_config = global_config + + def __call__( + self, + inputs_1d: jnp.ndarray, + inputs_2d: jnp.ndarray, + mask: jnp.ndarray, + rigid: geometry.Rigid3Array, + ) -> jnp.ndarray: + """Compute geometric aware attention. + + Given a set of query residues (defined by affines and associated scalar + features), this function computes geometric aware attention between the + query residues and target residues. + + The residues produce points in their local reference frame, which + are converted into the global frame to get attention via euclidean distance. + + Equivalently the target residues produce points in their local frame to be + used as attention values, which are converted into the query residues local + frames. + + Args: + inputs_1d: (N, C) 1D input embedding that is the basis for the + scalar queries. + inputs_2d: (N, M, C') 2D input embedding, used for biases values in the + attention between query_inputs_1d and target_inputs_1d. + mask: (N, 1) mask to indicate query_inputs_1d that participate in + the attention. + rigid: Rigid object describing the position and orientation of + every element in query_inputs_1d. + + Returns: + Transformation of the input embedding. + """ + + num_head = self.config.num_head + + attn_logits = 0. + + num_point_qk = self.config.num_point_qk + # Each point pair (q, k) contributes Var [0.5 ||q||^2 - <q, k>] = 9 / 2 + point_variance = max(num_point_qk, 1) * 9. / 2 + point_weights = np.sqrt(1.0 / point_variance) + + # This is equivalent to jax.nn.softplus, but avoids a bug in the test... + softplus = lambda x: jnp.logaddexp(x, jnp.zeros_like(x)) + raw_point_weights = hk.get_parameter( + 'trainable_point_weights', + shape=[num_head], + # softplus^{-1} (1) + init=hk.initializers.Constant(np.log(np.exp(1.) - 1.))) + + # Trainable per-head weights for points. + trainable_point_weights = softplus(raw_point_weights) + point_weights *= trainable_point_weights + q_point = PointProjection([num_head, num_point_qk], + self.global_config, + name='q_point_projection')(inputs_1d, + rigid) + + k_point = PointProjection([num_head, num_point_qk], + self.global_config, + name='k_point_projection')(inputs_1d, + rigid) + + dist2 = geometry.square_euclidean_distance( + q_point[:, None, :, :], k_point[None, :, :, :], epsilon=0.) + attn_qk_point = -0.5 * jnp.sum(point_weights[:, None] * dist2, axis=-1) + attn_logits += attn_qk_point + + num_scalar_qk = self.config.num_scalar_qk + # We assume that all queries and keys come iid from N(0, 1) distribution + # and compute the variances of the attention logits. + # Each scalar pair (q, k) contributes Var q*k = 1 + scalar_variance = max(num_scalar_qk, 1) * 1. + scalar_weights = np.sqrt(1.0 / scalar_variance) + q_scalar = common_modules.Linear([num_head, num_scalar_qk], + use_bias=False, + name='q_scalar_projection')( + inputs_1d) + + k_scalar = common_modules.Linear([num_head, num_scalar_qk], + use_bias=False, + name='k_scalar_projection')( + inputs_1d) + q_scalar *= scalar_weights + attn_logits += jnp.einsum('qhc,khc->qkh', q_scalar, k_scalar) + + attention_2d = common_modules.Linear( + num_head, name='attention_2d')(inputs_2d) + attn_logits += attention_2d + + mask_2d = mask * jnp.swapaxes(mask, -1, -2) + attn_logits -= 1e5 * (1. - mask_2d[..., None]) + + attn_logits *= np.sqrt(1. / 3) # Normalize by number of logit terms (3) + attn = jax.nn.softmax(attn_logits, axis=-2) + + num_scalar_v = self.config.num_scalar_v + + v_scalar = common_modules.Linear([num_head, num_scalar_v], + use_bias=False, + name='v_scalar_projection')( + inputs_1d) + + # [num_query_residues, num_head, num_scalar_v] + result_scalar = jnp.einsum('qkh, khc->qhc', attn, v_scalar) + + num_point_v = self.config.num_point_v + v_point = PointProjection([num_head, num_point_v], + self.global_config, + name='v_point_projection')(inputs_1d, + rigid) + + result_point_global = jax.tree_map( + lambda x: jnp.sum(attn[..., None] * x, axis=-3), v_point[None]) + + # Features used in the linear output projection. Should have the size + # [num_query_residues, ?] + output_features = [] + num_query_residues, _ = inputs_1d.shape + + flat_shape = [num_query_residues, -1] + + result_scalar = jnp.reshape(result_scalar, flat_shape) + output_features.append(result_scalar) + + result_point_global = jax.tree_map(lambda r: jnp.reshape(r, flat_shape), + result_point_global) + result_point_local = rigid[..., None].apply_inverse_to_point( + result_point_global) + output_features.extend( + [result_point_local.x, result_point_local.y, result_point_local.z]) + + point_norms = result_point_local.norm(self._dist_epsilon) + output_features.append(point_norms) + + # Dimensions: h = heads, i and j = residues, + # c = inputs_2d channels + # Contraction happens over the second residue dimension, similarly to how + # the usual attention is performed. + result_attention_over_2d = jnp.einsum('ijh, ijc->ihc', attn, inputs_2d) + output_features.append(jnp.reshape(result_attention_over_2d, flat_shape)) + + final_init = 'zeros' if self._zero_initialize_last else 'linear' + + final_act = jnp.concatenate(output_features, axis=-1) + + return common_modules.Linear( + self.config.num_channel, + initializer=final_init, + name='output_projection')(final_act) + + +class FoldIteration(hk.Module): + """A single iteration of iterative folding. + + First, each residue attends to all residues using InvariantPointAttention. + Then, we apply transition layers to update the hidden representations. + Finally, we use the hidden representations to produce an update to the + affine of each residue. + """ + + def __init__(self, + config: ml_collections.ConfigDict, + global_config: ml_collections.ConfigDict, + name: str = 'fold_iteration'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__( + self, + activations: Mapping[str, Any], + aatype: jnp.ndarray, + sequence_mask: jnp.ndarray, + update_rigid: bool, + is_training: bool, + initial_act: jnp.ndarray, + safe_key: Optional[prng.SafeKey] = None, + static_feat_2d: Optional[jnp.ndarray] = None, + ) -> Tuple[Dict[str, Any], Dict[str, Any]]: + + c = self.config + + if safe_key is None: + safe_key = prng.SafeKey(hk.next_rng_key()) + + def safe_dropout_fn(tensor, safe_key): + return modules.apply_dropout( + tensor=tensor, + safe_key=safe_key, + rate=0.0 if self.global_config.deterministic else c.dropout, + is_training=is_training) + + rigid = activations['rigid'] + + act = activations['act'] + attention_module = InvariantPointAttention( + self.config, self.global_config) + # Attention + act += attention_module( + inputs_1d=act, + inputs_2d=static_feat_2d, + mask=sequence_mask, + rigid=rigid) + + safe_key, *sub_keys = safe_key.split(3) + sub_keys = iter(sub_keys) + act = safe_dropout_fn(act, next(sub_keys)) + act = common_modules.LayerNorm( + axis=-1, + create_scale=True, + create_offset=True, + name='attention_layer_norm')( + act) + final_init = 'zeros' if self.global_config.zero_init else 'linear' + + # Transition + input_act = act + for i in range(c.num_layer_in_transition): + init = 'relu' if i < c.num_layer_in_transition - 1 else final_init + act = common_modules.Linear( + c.num_channel, + initializer=init, + name='transition')( + act) + if i < c.num_layer_in_transition - 1: + act = jax.nn.relu(act) + act += input_act + act = safe_dropout_fn(act, next(sub_keys)) + act = common_modules.LayerNorm( + axis=-1, + create_scale=True, + create_offset=True, + name='transition_layer_norm')(act) + if update_rigid: + # Rigid update + rigid_update = QuatRigid( + self.global_config, init=final_init)( + act) + rigid = rigid @ rigid_update + + sc = MultiRigidSidechain(c.sidechain, self.global_config)( + rigid.scale_translation(c.position_scale), [act, initial_act], aatype) + + outputs = {'rigid': rigid, 'sc': sc} + + rotation = jax.tree_map(jax.lax.stop_gradient, rigid.rotation) + rigid = geometry.Rigid3Array(rotation, rigid.translation) + + new_activations = { + 'act': act, + 'rigid': rigid + } + return new_activations, outputs + + +def generate_monomer_rigids(representations: Mapping[str, jnp.ndarray], + batch: Mapping[str, jnp.ndarray], + config: ml_collections.ConfigDict, + global_config: ml_collections.ConfigDict, + is_training: bool, + safe_key: prng.SafeKey + ) -> Dict[str, Any]: + """Generate predicted Rigid's for a single chain. + + This is the main part of the iterative fold head - it iteratively applies + folding to produce a set of predicted residue positions. + + Args: + representations: Embeddings dictionary. + batch: Batch dictionary. + config: config for the iterative fold head. + global_config: global config. + is_training: is training. + safe_key: A prng.SafeKey object that wraps a PRNG key. + + Returns: + A dictionary containing residue Rigid's and sidechain positions. + """ + c = config + sequence_mask = batch['seq_mask'][:, None] + act = common_modules.LayerNorm( + axis=-1, create_scale=True, create_offset=True, name='single_layer_norm')( + representations['single']) + + initial_act = act + act = common_modules.Linear( + c.num_channel, name='initial_projection')(act) + + # Sequence Mask has extra 1 at the end. + rigid = geometry.Rigid3Array.identity(sequence_mask.shape[:-1]) + + fold_iteration = FoldIteration( + c, global_config, name='fold_iteration') + + assert len(batch['seq_mask'].shape) == 1 + + activations = { + 'act': + act, + 'rigid': + rigid + } + + act_2d = common_modules.LayerNorm( + axis=-1, + create_scale=True, + create_offset=True, + name='pair_layer_norm')( + representations['pair']) + + safe_keys = safe_key.split(c.num_layer) + outputs = [] + for key in safe_keys: + + activations, output = fold_iteration( + activations, + initial_act=initial_act, + static_feat_2d=act_2d, + aatype=batch['aatype'], + safe_key=key, + sequence_mask=sequence_mask, + update_rigid=True, + is_training=is_training, + ) + outputs.append(output) + + output = jax.tree_map(lambda *x: jnp.stack(x), *outputs) + # Pass along for LDDT-Head. + output['act'] = activations['act'] + + return output + + +class StructureModule(hk.Module): + """StructureModule as a network head. + + Jumper et al. (2021) Suppl. Alg. 20 "StructureModule" + """ + + def __init__(self, + config: ml_collections.ConfigDict, + global_config: ml_collections.ConfigDict, + name: str = 'structure_module'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, + representations: Mapping[str, jnp.ndarray], + batch: Mapping[str, Any], + is_training: bool, + safe_key: Optional[prng.SafeKey] = None, + compute_loss: bool = False + ) -> Dict[str, Any]: + c = self.config + ret = {} + + if safe_key is None: + safe_key = prng.SafeKey(hk.next_rng_key()) + + output = generate_monomer_rigids( + representations=representations, + batch=batch, + config=self.config, + global_config=self.global_config, + is_training=is_training, + safe_key=safe_key) + + ret['traj'] = output['rigid'].scale_translation(c.position_scale).to_array() + ret['sidechains'] = output['sc'] + ret['sidechains']['atom_pos'] = ret['sidechains']['atom_pos'].to_array() + ret['sidechains']['frames'] = ret['sidechains']['frames'].to_array() + if 'local_atom_pos' in ret['sidechains']: + ret['sidechains']['local_atom_pos'] = ret['sidechains'][ + 'local_atom_pos'].to_array() + ret['sidechains']['local_frames'] = ret['sidechains'][ + 'local_frames'].to_array() + + aatype = batch['aatype'] + seq_mask = batch['seq_mask'] + + atom14_pred_mask = all_atom_multimer.get_atom14_mask( + aatype) * seq_mask[:, None] + atom14_pred_positions = output['sc']['atom_pos'][-1] + ret['final_atom14_positions'] = atom14_pred_positions # (N, 14, 3) + ret['final_atom14_mask'] = atom14_pred_mask # (N, 14) + + atom37_mask = all_atom_multimer.get_atom37_mask(aatype) * seq_mask[:, None] + atom37_pred_positions = all_atom_multimer.atom14_to_atom37( + atom14_pred_positions, aatype) + atom37_pred_positions *= atom37_mask[:, :, None] + ret['final_atom_positions'] = atom37_pred_positions # (N, 37, 3) + ret['final_atom_mask'] = atom37_mask # (N, 37) + ret['final_rigids'] = ret['traj'][-1] + + ret['act'] = output['act'] + + if compute_loss: + return ret + else: + no_loss_features = ['final_atom_positions', 'final_atom_mask', 'act'] + no_loss_ret = {k: ret[k] for k in no_loss_features} + return no_loss_ret + + def loss(self, + value: Mapping[str, Any], + batch: Mapping[str, Any] + ) -> Dict[str, Any]: + + raise NotImplementedError( + 'This function should be called on a batch with reordered chains (see ' + 'Evans et al (2021) Section 7.3. Multi-Chain Permutation Alignment.') + + ret = {'loss': 0.} + + ret['metrics'] = {} + + aatype = batch['aatype'] + all_atom_positions = batch['all_atom_positions'] + all_atom_positions = geometry.Vec3Array.from_array(all_atom_positions) + all_atom_mask = batch['all_atom_mask'] + seq_mask = batch['seq_mask'] + residue_index = batch['residue_index'] + + gt_rigid, gt_affine_mask = make_backbone_affine(all_atom_positions, + all_atom_mask, + aatype) + + chi_angles, chi_mask = all_atom_multimer.compute_chi_angles( + all_atom_positions, all_atom_mask, aatype) + + pred_mask = all_atom_multimer.get_atom14_mask(aatype) + pred_mask *= seq_mask[:, None] + pred_positions = value['final_atom14_positions'] + pred_positions = geometry.Vec3Array.from_array(pred_positions) + + gt_positions, gt_mask, alt_naming_is_better = compute_atom14_gt( + aatype, all_atom_positions, all_atom_mask, pred_positions) + + violations = find_structural_violations( + aatype=aatype, + residue_index=residue_index, + mask=pred_mask, + pred_positions=pred_positions, + config=self.config, + asym_id=batch['asym_id']) + + sidechains = value['sidechains'] + + gt_chi_angles = get_renamed_chi_angles(aatype, chi_angles, + alt_naming_is_better) + + # Several violation metrics: + violation_metrics = compute_violation_metrics( + residue_index=residue_index, + mask=pred_mask, + seq_mask=seq_mask, + pred_positions=pred_positions, + violations=violations) + ret['metrics'].update(violation_metrics) + + target_rigid = geometry.Rigid3Array.from_array(value['traj']) + gt_frames_mask = gt_affine_mask + + # Split the loss into within-chain and between-chain components. + intra_chain_mask = batch['asym_id'][:, None] == batch['asym_id'][None, :] + intra_chain_bb_loss, intra_chain_fape = backbone_loss( + gt_rigid=gt_rigid, + gt_frames_mask=gt_frames_mask, + gt_positions_mask=gt_affine_mask, + target_rigid=target_rigid, + config=self.config.intra_chain_fape, + pair_mask=intra_chain_mask) + interface_bb_loss, interface_fape = backbone_loss( + gt_rigid=gt_rigid, + gt_frames_mask=gt_frames_mask, + gt_positions_mask=gt_affine_mask, + target_rigid=target_rigid, + config=self.config.interface_fape, + pair_mask=1. - intra_chain_mask) + + bb_loss = intra_chain_bb_loss + interface_bb_loss + ret['fape'] = intra_chain_fape + interface_fape + ret['bb_loss'] = bb_loss + ret['loss'] += bb_loss + + pred_frames = geometry.Rigid3Array.from_array(sidechains['frames']) + pred_positions = geometry.Vec3Array.from_array(sidechains['atom_pos']) + gt_sc_frames, gt_sc_frames_mask = compute_frames( + aatype=aatype, + all_atom_positions=all_atom_positions, + all_atom_mask=all_atom_mask, + use_alt=alt_naming_is_better) + + sc_loss = sidechain_loss( + gt_frames=gt_sc_frames, + gt_frames_mask=gt_sc_frames_mask, + gt_positions=gt_positions, + gt_mask=gt_mask, + pred_frames=pred_frames, + pred_positions=pred_positions, + config=self.config) + + ret['loss'] = ((1 - self.config.sidechain.weight_frac) * ret['loss'] + + self.config.sidechain.weight_frac * sc_loss['loss']) + ret['sidechain_fape'] = sc_loss['fape'] + + unnormed_angles = sidechains['unnormalized_angles_sin_cos'] + pred_angles = sidechains['angles_sin_cos'] + + sup_chi_loss, ret['chi_loss'], ret[ + 'angle_norm_loss'] = supervised_chi_loss( + sequence_mask=seq_mask, + target_chi_mask=chi_mask, + target_chi_angles=gt_chi_angles, + aatype=aatype, + pred_angles=pred_angles, + unnormed_angles=unnormed_angles, + config=self.config) + ret['loss'] += sup_chi_loss + + if self.config.structural_violation_loss_weight: + + ret['loss'] += structural_violation_loss( + mask=pred_mask, violations=violations, config=self.config) + + return ret + + +def compute_atom14_gt( + aatype: jnp.ndarray, + all_atom_positions: geometry.Vec3Array, + all_atom_mask: jnp.ndarray, + pred_pos: geometry.Vec3Array +) -> Tuple[geometry.Vec3Array, jnp.ndarray, jnp.ndarray]: + """Find atom14 positions, this includes finding the correct renaming.""" + gt_positions, gt_mask = all_atom_multimer.atom37_to_atom14( + aatype, all_atom_positions, + all_atom_mask) + alt_gt_positions, alt_gt_mask = all_atom_multimer.get_alt_atom14( + aatype, gt_positions, gt_mask) + atom_is_ambiguous = all_atom_multimer.get_atom14_is_ambiguous(aatype) + + alt_naming_is_better = all_atom_multimer.find_optimal_renaming( + gt_positions=gt_positions, + alt_gt_positions=alt_gt_positions, + atom_is_ambiguous=atom_is_ambiguous, + gt_exists=gt_mask, + pred_positions=pred_pos) + + use_alt = alt_naming_is_better[:, None] + + gt_mask = (1. - use_alt) * gt_mask + use_alt * alt_gt_mask + gt_positions = (1. - use_alt) * gt_positions + use_alt * alt_gt_positions + + return gt_positions, gt_mask, alt_naming_is_better + + +def backbone_loss(gt_rigid: geometry.Rigid3Array, + gt_frames_mask: jnp.ndarray, + gt_positions_mask: jnp.ndarray, + target_rigid: geometry.Rigid3Array, + config: ml_collections.ConfigDict, + pair_mask: jnp.ndarray + ) -> Tuple[Float, jnp.ndarray]: + """Backbone FAPE Loss.""" + loss_fn = functools.partial( + all_atom_multimer.frame_aligned_point_error, + l1_clamp_distance=config.atom_clamp_distance, + length_scale=config.loss_unit_distance) + + loss_fn = jax.vmap(loss_fn, (0, None, None, 0, None, None, None)) + fape = loss_fn(target_rigid, gt_rigid, gt_frames_mask, + target_rigid.translation, gt_rigid.translation, + gt_positions_mask, pair_mask) + + return jnp.mean(fape), fape[-1] + + +def compute_frames( + aatype: jnp.ndarray, + all_atom_positions: geometry.Vec3Array, + all_atom_mask: jnp.ndarray, + use_alt: jnp.ndarray + ) -> Tuple[geometry.Rigid3Array, jnp.ndarray]: + """Compute Frames from all atom positions. + + Args: + aatype: array of aatypes, int of [N] + all_atom_positions: Vector of all atom positions, shape [N, 37] + all_atom_mask: mask, shape [N] + use_alt: whether to use alternative orientation for ambiguous aatypes + shape [N] + Returns: + Rigid corresponding to Frames w shape [N, 8], + mask which Rigids are present w shape [N, 8] + """ + frames_batch = all_atom_multimer.atom37_to_frames(aatype, all_atom_positions, + all_atom_mask) + gt_frames = frames_batch['rigidgroups_gt_frames'] + alt_gt_frames = frames_batch['rigidgroups_alt_gt_frames'] + use_alt = use_alt[:, None] + + renamed_gt_frames = jax.tree_map( + lambda x, y: (1. - use_alt) * x + use_alt * y, gt_frames, alt_gt_frames) + + return renamed_gt_frames, frames_batch['rigidgroups_gt_exists'] + + +def sidechain_loss(gt_frames: geometry.Rigid3Array, + gt_frames_mask: jnp.ndarray, + gt_positions: geometry.Vec3Array, + gt_mask: jnp.ndarray, + pred_frames: geometry.Rigid3Array, + pred_positions: geometry.Vec3Array, + config: ml_collections.ConfigDict + ) -> Dict[str, jnp.ndarray]: + """Sidechain Loss using cleaned up rigids.""" + + flat_gt_frames = jax.tree_map(jnp.ravel, gt_frames) + flat_frames_mask = jnp.ravel(gt_frames_mask) + + flat_gt_positions = jax.tree_map(jnp.ravel, gt_positions) + flat_positions_mask = jnp.ravel(gt_mask) + + # Compute frame_aligned_point_error score for the final layer. + def _slice_last_layer_and_flatten(x): + return jnp.ravel(x[-1]) + + flat_pred_frames = jax.tree_map(_slice_last_layer_and_flatten, pred_frames) + flat_pred_positions = jax.tree_map(_slice_last_layer_and_flatten, + pred_positions) + fape = all_atom_multimer.frame_aligned_point_error( + pred_frames=flat_pred_frames, + target_frames=flat_gt_frames, + frames_mask=flat_frames_mask, + pred_positions=flat_pred_positions, + target_positions=flat_gt_positions, + positions_mask=flat_positions_mask, + pair_mask=None, + length_scale=config.sidechain.loss_unit_distance, + l1_clamp_distance=config.sidechain.atom_clamp_distance) + + return { + 'fape': fape, + 'loss': fape} + + +def structural_violation_loss(mask: jnp.ndarray, + violations: Mapping[str, Float], + config: ml_collections.ConfigDict + ) -> Float: + """Computes Loss for structural Violations.""" + # Put all violation losses together to one large loss. + num_atoms = jnp.sum(mask).astype(jnp.float32) + 1e-6 + between_residues = violations['between_residues'] + within_residues = violations['within_residues'] + return (config.structural_violation_loss_weight * + (between_residues['bonds_c_n_loss_mean'] + + between_residues['angles_ca_c_n_loss_mean'] + + between_residues['angles_c_n_ca_loss_mean'] + + jnp.sum(between_residues['clashes_per_atom_loss_sum'] + + within_residues['per_atom_loss_sum']) / num_atoms + )) + + +def find_structural_violations( + aatype: jnp.ndarray, + residue_index: jnp.ndarray, + mask: jnp.ndarray, + pred_positions: geometry.Vec3Array, # (N, 14) + config: ml_collections.ConfigDict, + asym_id: jnp.ndarray, + ) -> Dict[str, Any]: + """Computes several checks for structural Violations.""" + + # Compute between residue backbone violations of bonds and angles. + connection_violations = all_atom_multimer.between_residue_bond_loss( + pred_atom_positions=pred_positions, + pred_atom_mask=mask.astype(jnp.float32), + residue_index=residue_index.astype(jnp.float32), + aatype=aatype, + tolerance_factor_soft=config.violation_tolerance_factor, + tolerance_factor_hard=config.violation_tolerance_factor) + + # Compute the van der Waals radius for every atom + # (the first letter of the atom name is the element type). + # shape (N, 14) + atomtype_radius = jnp.array([ + residue_constants.van_der_waals_radius[name[0]] + for name in residue_constants.atom_types + ]) + residx_atom14_to_atom37 = all_atom_multimer.get_atom14_to_atom37_map(aatype) + atom_radius = mask * utils.batched_gather(atomtype_radius, + residx_atom14_to_atom37) + + # Compute the between residue clash loss. + between_residue_clashes = all_atom_multimer.between_residue_clash_loss( + pred_positions=pred_positions, + atom_exists=mask, + atom_radius=atom_radius, + residue_index=residue_index, + overlap_tolerance_soft=config.clash_overlap_tolerance, + overlap_tolerance_hard=config.clash_overlap_tolerance, + asym_id=asym_id) + + # Compute all within-residue violations (clashes, + # bond length and angle violations). + restype_atom14_bounds = residue_constants.make_atom14_dists_bounds( + overlap_tolerance=config.clash_overlap_tolerance, + bond_length_tolerance_factor=config.violation_tolerance_factor) + dists_lower_bound = utils.batched_gather(restype_atom14_bounds['lower_bound'], + aatype) + dists_upper_bound = utils.batched_gather(restype_atom14_bounds['upper_bound'], + aatype) + within_residue_violations = all_atom_multimer.within_residue_violations( + pred_positions=pred_positions, + atom_exists=mask, + dists_lower_bound=dists_lower_bound, + dists_upper_bound=dists_upper_bound, + tighten_bounds_for_loss=0.0) + + # Combine them to a single per-residue violation mask (used later for LDDT). + per_residue_violations_mask = jnp.max(jnp.stack([ + connection_violations['per_residue_violation_mask'], + jnp.max(between_residue_clashes['per_atom_clash_mask'], axis=-1), + jnp.max(within_residue_violations['per_atom_violations'], + axis=-1)]), axis=0) + + return { + 'between_residues': { + 'bonds_c_n_loss_mean': + connection_violations['c_n_loss_mean'], # () + 'angles_ca_c_n_loss_mean': + connection_violations['ca_c_n_loss_mean'], # () + 'angles_c_n_ca_loss_mean': + connection_violations['c_n_ca_loss_mean'], # () + 'connections_per_residue_loss_sum': + connection_violations['per_residue_loss_sum'], # (N) + 'connections_per_residue_violation_mask': + connection_violations['per_residue_violation_mask'], # (N) + 'clashes_mean_loss': + between_residue_clashes['mean_loss'], # () + 'clashes_per_atom_loss_sum': + between_residue_clashes['per_atom_loss_sum'], # (N, 14) + 'clashes_per_atom_clash_mask': + between_residue_clashes['per_atom_clash_mask'], # (N, 14) + }, + 'within_residues': { + 'per_atom_loss_sum': + within_residue_violations['per_atom_loss_sum'], # (N, 14) + 'per_atom_violations': + within_residue_violations['per_atom_violations'], # (N, 14), + }, + 'total_per_residue_violations_mask': + per_residue_violations_mask, # (N) + } + + +def compute_violation_metrics( + residue_index: jnp.ndarray, + mask: jnp.ndarray, + seq_mask: jnp.ndarray, + pred_positions: geometry.Vec3Array, # (N, 14) + violations: Mapping[str, jnp.ndarray], +) -> Dict[str, jnp.ndarray]: + """Compute several metrics to assess the structural violations.""" + ret = {} + between_residues = violations['between_residues'] + within_residues = violations['within_residues'] + extreme_ca_ca_violations = all_atom_multimer.extreme_ca_ca_distance_violations( + positions=pred_positions, + mask=mask.astype(jnp.float32), + residue_index=residue_index.astype(jnp.float32)) + ret['violations_extreme_ca_ca_distance'] = extreme_ca_ca_violations + ret['violations_between_residue_bond'] = utils.mask_mean( + mask=seq_mask, + value=between_residues['connections_per_residue_violation_mask']) + ret['violations_between_residue_clash'] = utils.mask_mean( + mask=seq_mask, + value=jnp.max(between_residues['clashes_per_atom_clash_mask'], axis=-1)) + ret['violations_within_residue'] = utils.mask_mean( + mask=seq_mask, + value=jnp.max(within_residues['per_atom_violations'], axis=-1)) + ret['violations_per_residue'] = utils.mask_mean( + mask=seq_mask, value=violations['total_per_residue_violations_mask']) + return ret + + +def supervised_chi_loss( + sequence_mask: jnp.ndarray, + target_chi_mask: jnp.ndarray, + aatype: jnp.ndarray, + target_chi_angles: jnp.ndarray, + pred_angles: jnp.ndarray, + unnormed_angles: jnp.ndarray, + config: ml_collections.ConfigDict) -> Tuple[Float, Float, Float]: + """Computes loss for direct chi angle supervision.""" + eps = 1e-6 + chi_mask = target_chi_mask.astype(jnp.float32) + + pred_angles = pred_angles[:, :, 3:] + + residue_type_one_hot = jax.nn.one_hot( + aatype, residue_constants.restype_num + 1, dtype=jnp.float32)[None] + chi_pi_periodic = jnp.einsum('ijk, kl->ijl', residue_type_one_hot, + jnp.asarray(residue_constants.chi_pi_periodic)) + + true_chi = target_chi_angles[None] + sin_true_chi = jnp.sin(true_chi) + cos_true_chi = jnp.cos(true_chi) + sin_cos_true_chi = jnp.stack([sin_true_chi, cos_true_chi], axis=-1) + + # This is -1 if chi is pi periodic and +1 if it's 2 pi periodic + shifted_mask = (1 - 2 * chi_pi_periodic)[..., None] + sin_cos_true_chi_shifted = shifted_mask * sin_cos_true_chi + + sq_chi_error = jnp.sum( + squared_difference(sin_cos_true_chi, pred_angles), -1) + sq_chi_error_shifted = jnp.sum( + squared_difference(sin_cos_true_chi_shifted, pred_angles), -1) + sq_chi_error = jnp.minimum(sq_chi_error, sq_chi_error_shifted) + + sq_chi_loss = utils.mask_mean(mask=chi_mask[None], value=sq_chi_error) + angle_norm = jnp.sqrt(jnp.sum(jnp.square(unnormed_angles), axis=-1) + eps) + norm_error = jnp.abs(angle_norm - 1.) + angle_norm_loss = utils.mask_mean(mask=sequence_mask[None, :, None], + value=norm_error) + loss = (config.chi_weight * sq_chi_loss + + config.angle_norm_weight * angle_norm_loss) + return loss, sq_chi_loss, angle_norm_loss + + +def l2_normalize(x: jnp.ndarray, + axis: int = -1, + epsilon: float = 1e-12 + ) -> jnp.ndarray: + return x / jnp.sqrt( + jnp.maximum(jnp.sum(x**2, axis=axis, keepdims=True), epsilon)) + + +def get_renamed_chi_angles(aatype: jnp.ndarray, + chi_angles: jnp.ndarray, + alt_is_better: jnp.ndarray + ) -> jnp.ndarray: + """Return renamed chi angles.""" + chi_angle_is_ambiguous = utils.batched_gather( + jnp.array(residue_constants.chi_pi_periodic, dtype=jnp.float32), aatype) + alt_chi_angles = chi_angles + np.pi * chi_angle_is_ambiguous + # Map back to [-pi, pi]. + alt_chi_angles = alt_chi_angles - 2 * np.pi * (alt_chi_angles > np.pi).astype( + jnp.float32) + alt_is_better = alt_is_better[:, None] + return (1. - alt_is_better) * chi_angles + alt_is_better * alt_chi_angles + + +class MultiRigidSidechain(hk.Module): + """Class to make side chain atoms.""" + + def __init__(self, + config: ml_collections.ConfigDict, + global_config: ml_collections.ConfigDict, + name: str = 'rigid_sidechain'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, + rigid: geometry.Rigid3Array, + representations_list: Iterable[jnp.ndarray], + aatype: jnp.ndarray + ) -> Dict[str, Any]: + """Predict sidechains using multi-rigid representations. + + Args: + rigid: The Rigid's for each residue (translations in angstoms) + representations_list: A list of activations to predict sidechains from. + aatype: amino acid types. + + Returns: + dict containing atom positions and frames (in angstrom) + """ + act = [ + common_modules.Linear( # pylint: disable=g-complex-comprehension + self.config.num_channel, + name='input_projection')(jax.nn.relu(x)) + for x in representations_list] + # Sum the activation list (equivalent to concat then Conv1D) + act = sum(act) + + final_init = 'zeros' if self.global_config.zero_init else 'linear' + + # Mapping with some residual blocks. + for _ in range(self.config.num_residual_block): + old_act = act + act = common_modules.Linear( + self.config.num_channel, + initializer='relu', + name='resblock1')( + jax.nn.relu(act)) + act = common_modules.Linear( + self.config.num_channel, + initializer=final_init, + name='resblock2')( + jax.nn.relu(act)) + act += old_act + + # Map activations to torsion angles. + # [batch_size, num_res, 14] + num_res = act.shape[0] + unnormalized_angles = common_modules.Linear( + 14, name='unnormalized_angles')( + jax.nn.relu(act)) + unnormalized_angles = jnp.reshape( + unnormalized_angles, [num_res, 7, 2]) + angles = l2_normalize(unnormalized_angles, axis=-1) + + outputs = { + 'angles_sin_cos': angles, # jnp.ndarray (N, 7, 2) + 'unnormalized_angles_sin_cos': + unnormalized_angles, # jnp.ndarray (N, 7, 2) + } + + # Map torsion angles to frames. + # geometry.Rigid3Array with shape (N, 8) + all_frames_to_global = all_atom_multimer.torsion_angles_to_frames( + aatype, + rigid, + angles) + + # Use frames and literature positions to create the final atom coordinates. + # geometry.Vec3Array with shape (N, 14) + pred_positions = all_atom_multimer.frames_and_literature_positions_to_atom14_pos( + aatype, all_frames_to_global) + + outputs.update({ + 'atom_pos': pred_positions, # geometry.Vec3Array (N, 14) + 'frames': all_frames_to_global, # geometry.Rigid3Array (N, 8) + }) + return outputs diff --git a/alphafold/model/geometry/__init__.py b/alphafold/model/geometry/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..671d07eed68cfdc58570f30eaa56da46ff99a292 --- /dev/null +++ b/alphafold/model/geometry/__init__.py @@ -0,0 +1,31 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Geometry Module.""" + +from alphafold.model.geometry import rigid_matrix_vector +from alphafold.model.geometry import rotation_matrix +from alphafold.model.geometry import struct_of_array +from alphafold.model.geometry import vector + +Rot3Array = rotation_matrix.Rot3Array +Rigid3Array = rigid_matrix_vector.Rigid3Array + +StructOfArray = struct_of_array.StructOfArray + +Vec3Array = vector.Vec3Array +square_euclidean_distance = vector.square_euclidean_distance +euclidean_distance = vector.euclidean_distance +dihedral_angle = vector.dihedral_angle +dot = vector.dot +cross = vector.cross diff --git a/alphafold/model/geometry/rigid_matrix_vector.py b/alphafold/model/geometry/rigid_matrix_vector.py new file mode 100644 index 0000000000000000000000000000000000000000..4f2c0f006b0a64f399abb28d4297395cd1b9cf1f --- /dev/null +++ b/alphafold/model/geometry/rigid_matrix_vector.py @@ -0,0 +1,106 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Rigid3Array Transformations represented by a Matrix and a Vector.""" + +from __future__ import annotations +from typing import Union + +from alphafold.model.geometry import rotation_matrix +from alphafold.model.geometry import struct_of_array +from alphafold.model.geometry import vector +import jax +import jax.numpy as jnp + +Float = Union[float, jnp.ndarray] + +VERSION = '0.1' + + +@struct_of_array.StructOfArray(same_dtype=True) +class Rigid3Array: + """Rigid Transformation, i.e. element of special euclidean group.""" + + rotation: rotation_matrix.Rot3Array + translation: vector.Vec3Array + + def __matmul__(self, other: Rigid3Array) -> Rigid3Array: + new_rotation = self.rotation @ other.rotation + new_translation = self.apply_to_point(other.translation) + return Rigid3Array(new_rotation, new_translation) + + def inverse(self) -> Rigid3Array: + """Return Rigid3Array corresponding to inverse transform.""" + inv_rotation = self.rotation.inverse() + inv_translation = inv_rotation.apply_to_point(-self.translation) + return Rigid3Array(inv_rotation, inv_translation) + + def apply_to_point(self, point: vector.Vec3Array) -> vector.Vec3Array: + """Apply Rigid3Array transform to point.""" + return self.rotation.apply_to_point(point) + self.translation + + def apply_inverse_to_point(self, point: vector.Vec3Array) -> vector.Vec3Array: + """Apply inverse Rigid3Array transform to point.""" + new_point = point - self.translation + return self.rotation.apply_inverse_to_point(new_point) + + def compose_rotation(self, other_rotation): + rot = self.rotation @ other_rotation + trans = jax.tree_map(lambda x: jnp.broadcast_to(x, rot.shape), + self.translation) + return Rigid3Array(rot, trans) + + @classmethod + def identity(cls, shape, dtype=jnp.float32) -> Rigid3Array: + """Return identity Rigid3Array of given shape.""" + return cls( + rotation_matrix.Rot3Array.identity(shape, dtype=dtype), + vector.Vec3Array.zeros(shape, dtype=dtype)) # pytype: disable=wrong-arg-count # trace-all-classes + + def scale_translation(self, factor: Float) -> Rigid3Array: + """Scale translation in Rigid3Array by 'factor'.""" + return Rigid3Array(self.rotation, self.translation * factor) + + def to_array(self): + rot_array = self.rotation.to_array() + vec_array = self.translation.to_array() + return jnp.concatenate([rot_array, vec_array[..., None]], axis=-1) + + @classmethod + def from_array(cls, array): + rot = rotation_matrix.Rot3Array.from_array(array[..., :3]) + vec = vector.Vec3Array.from_array(array[..., -1]) + return cls(rot, vec) # pytype: disable=wrong-arg-count # trace-all-classes + + @classmethod + def from_array4x4(cls, array: jnp.ndarray) -> Rigid3Array: + """Construct Rigid3Array from homogeneous 4x4 array.""" + assert array.shape[-1] == 4 + assert array.shape[-2] == 4 + rotation = rotation_matrix.Rot3Array( + array[..., 0, 0], array[..., 0, 1], array[..., 0, 2], + array[..., 1, 0], array[..., 1, 1], array[..., 1, 2], + array[..., 2, 0], array[..., 2, 1], array[..., 2, 2] + ) + translation = vector.Vec3Array( + array[..., 0, 3], array[..., 1, 3], array[..., 2, 3]) + return cls(rotation, translation) # pytype: disable=wrong-arg-count # trace-all-classes + + def __getstate__(self): + return (VERSION, (self.rotation, self.translation)) + + def __setstate__(self, state): + version, (rot, trans) = state + del version + object.__setattr__(self, 'rotation', rot) + object.__setattr__(self, 'translation', trans) diff --git a/alphafold/model/geometry/rotation_matrix.py b/alphafold/model/geometry/rotation_matrix.py new file mode 100644 index 0000000000000000000000000000000000000000..ccb211110024df5ce21dd39b7beb2ece7f5bfc83 --- /dev/null +++ b/alphafold/model/geometry/rotation_matrix.py @@ -0,0 +1,157 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Rot3Array Matrix Class.""" + +from __future__ import annotations +import dataclasses + +from alphafold.model.geometry import struct_of_array +from alphafold.model.geometry import utils +from alphafold.model.geometry import vector +import jax +import jax.numpy as jnp +import numpy as np + +COMPONENTS = ['xx', 'xy', 'xz', 'yx', 'yy', 'yz', 'zx', 'zy', 'zz'] + +VERSION = '0.1' + + +@struct_of_array.StructOfArray(same_dtype=True) +class Rot3Array: + """Rot3Array Matrix in 3 dimensional Space implemented as struct of arrays.""" + + xx: jnp.ndarray = dataclasses.field(metadata={'dtype': jnp.float32}) + xy: jnp.ndarray + xz: jnp.ndarray + yx: jnp.ndarray + yy: jnp.ndarray + yz: jnp.ndarray + zx: jnp.ndarray + zy: jnp.ndarray + zz: jnp.ndarray + + __array_ufunc__ = None + + def inverse(self) -> Rot3Array: + """Returns inverse of Rot3Array.""" + return Rot3Array(self.xx, self.yx, self.zx, + self.xy, self.yy, self.zy, + self.xz, self.yz, self.zz) + + def apply_to_point(self, point: vector.Vec3Array) -> vector.Vec3Array: + """Applies Rot3Array to point.""" + return vector.Vec3Array( + self.xx * point.x + self.xy * point.y + self.xz * point.z, + self.yx * point.x + self.yy * point.y + self.yz * point.z, + self.zx * point.x + self.zy * point.y + self.zz * point.z) + + def apply_inverse_to_point(self, point: vector.Vec3Array) -> vector.Vec3Array: + """Applies inverse Rot3Array to point.""" + return self.inverse().apply_to_point(point) + + def __matmul__(self, other: Rot3Array) -> Rot3Array: + """Composes two Rot3Arrays.""" + c0 = self.apply_to_point(vector.Vec3Array(other.xx, other.yx, other.zx)) + c1 = self.apply_to_point(vector.Vec3Array(other.xy, other.yy, other.zy)) + c2 = self.apply_to_point(vector.Vec3Array(other.xz, other.yz, other.zz)) + return Rot3Array(c0.x, c1.x, c2.x, c0.y, c1.y, c2.y, c0.z, c1.z, c2.z) + + @classmethod + def identity(cls, shape, dtype=jnp.float32) -> Rot3Array: + """Returns identity of given shape.""" + ones = jnp.ones(shape, dtype=dtype) + zeros = jnp.zeros(shape, dtype=dtype) + return cls(ones, zeros, zeros, zeros, ones, zeros, zeros, zeros, ones) # pytype: disable=wrong-arg-count # trace-all-classes + + @classmethod + def from_two_vectors(cls, e0: vector.Vec3Array, + e1: vector.Vec3Array) -> Rot3Array: + """Construct Rot3Array from two Vectors. + + Rot3Array is constructed such that in the corresponding frame 'e0' lies on + the positive x-Axis and 'e1' lies in the xy plane with positive sign of y. + + Args: + e0: Vector + e1: Vector + Returns: + Rot3Array + """ + # Normalize the unit vector for the x-axis, e0. + e0 = e0.normalized() + # make e1 perpendicular to e0. + c = e1.dot(e0) + e1 = (e1 - c * e0).normalized() + # Compute e2 as cross product of e0 and e1. + e2 = e0.cross(e1) + return cls(e0.x, e1.x, e2.x, e0.y, e1.y, e2.y, e0.z, e1.z, e2.z) # pytype: disable=wrong-arg-count # trace-all-classes + + @classmethod + def from_array(cls, array: jnp.ndarray) -> Rot3Array: + """Construct Rot3Array Matrix from array of shape. [..., 3, 3].""" + unstacked = utils.unstack(array, axis=-2) + unstacked = sum([utils.unstack(x, axis=-1) for x in unstacked], []) + return cls(*unstacked) + + def to_array(self) -> jnp.ndarray: + """Convert Rot3Array to array of shape [..., 3, 3].""" + return jnp.stack( + [jnp.stack([self.xx, self.xy, self.xz], axis=-1), + jnp.stack([self.yx, self.yy, self.yz], axis=-1), + jnp.stack([self.zx, self.zy, self.zz], axis=-1)], + axis=-2) + + @classmethod + def from_quaternion(cls, + w: jnp.ndarray, + x: jnp.ndarray, + y: jnp.ndarray, + z: jnp.ndarray, + normalize: bool = True, + epsilon: float = 1e-6) -> Rot3Array: + """Construct Rot3Array from components of quaternion.""" + if normalize: + inv_norm = jax.lax.rsqrt(jnp.maximum(epsilon, w**2 + x**2 + y**2 + z**2)) + w *= inv_norm + x *= inv_norm + y *= inv_norm + z *= inv_norm + xx = 1 - 2 * (jnp.square(y) + jnp.square(z)) + xy = 2 * (x * y - w * z) + xz = 2 * (x * z + w * y) + yx = 2 * (x * y + w * z) + yy = 1 - 2 * (jnp.square(x) + jnp.square(z)) + yz = 2 * (y * z - w * x) + zx = 2 * (x * z - w * y) + zy = 2 * (y * z + w * x) + zz = 1 - 2 * (jnp.square(x) + jnp.square(y)) + return cls(xx, xy, xz, yx, yy, yz, zx, zy, zz) # pytype: disable=wrong-arg-count # trace-all-classes + + @classmethod + def random_uniform(cls, key, shape, dtype=jnp.float32) -> Rot3Array: + """Samples uniform random Rot3Array according to Haar Measure.""" + quat_array = jax.random.normal(key, tuple(shape) + (4,), dtype=dtype) + quats = utils.unstack(quat_array) + return cls.from_quaternion(*quats) + + def __getstate__(self): + return (VERSION, + [np.asarray(getattr(self, field)) for field in COMPONENTS]) + + def __setstate__(self, state): + version, state = state + del version + for i, field in enumerate(COMPONENTS): + object.__setattr__(self, field, state[i]) diff --git a/alphafold/model/geometry/struct_of_array.py b/alphafold/model/geometry/struct_of_array.py new file mode 100644 index 0000000000000000000000000000000000000000..562743b327dcd6872d60df202e8862967674b915 --- /dev/null +++ b/alphafold/model/geometry/struct_of_array.py @@ -0,0 +1,220 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Class decorator to represent (nested) struct of arrays.""" + +import dataclasses + +import jax + + +def get_item(instance, key): + sliced = {} + for field in get_array_fields(instance): + num_trailing_dims = field.metadata.get('num_trailing_dims', 0) + this_key = key + if isinstance(key, tuple) and Ellipsis in this_key: + this_key += (slice(None),) * num_trailing_dims + sliced[field.name] = getattr(instance, field.name)[this_key] + return dataclasses.replace(instance, **sliced) + + +@property +def get_shape(instance): + """Returns Shape for given instance of dataclass.""" + first_field = dataclasses.fields(instance)[0] + num_trailing_dims = first_field.metadata.get('num_trailing_dims', None) + value = getattr(instance, first_field.name) + if num_trailing_dims: + return value.shape[:-num_trailing_dims] + else: + return value.shape + + +def get_len(instance): + """Returns length for given instance of dataclass.""" + shape = instance.shape + if shape: + return shape[0] + else: + raise TypeError('len() of unsized object') # Match jax.numpy behavior. + + +@property +def get_dtype(instance): + """Returns Dtype for given instance of dataclass.""" + fields = dataclasses.fields(instance) + sets_dtype = [ + field.name for field in fields if field.metadata.get('sets_dtype', False) + ] + if sets_dtype: + assert len(sets_dtype) == 1, 'at most field can set dtype' + field_value = getattr(instance, sets_dtype[0]) + elif instance.same_dtype: + field_value = getattr(instance, fields[0].name) + else: + # Should this be Value Error? + raise AttributeError('Trying to access Dtype on Struct of Array without' + 'either "same_dtype" or field setting dtype') + + if hasattr(field_value, 'dtype'): + return field_value.dtype + else: + # Should this be Value Error? + raise AttributeError(f'field_value {field_value} does not have dtype') + + +def replace(instance, **kwargs): + return dataclasses.replace(instance, **kwargs) + + +def post_init(instance): + """Validate instance has same shapes & dtypes.""" + array_fields = get_array_fields(instance) + arrays = list(get_array_fields(instance, return_values=True).values()) + first_field = array_fields[0] + # These slightly weird constructions about checking whether the leaves are + # actual arrays is since e.g. vmap internally relies on being able to + # construct pytree's with object() as leaves, this would break the checking + # as such we are only validating the object when the entries in the dataclass + # Are arrays or other dataclasses of arrays. + try: + dtype = instance.dtype + except AttributeError: + dtype = None + if dtype is not None: + first_shape = instance.shape + for array, field in zip(arrays, array_fields): + field_shape = array.shape + num_trailing_dims = field.metadata.get('num_trailing_dims', None) + if num_trailing_dims: + array_shape = array.shape + field_shape = array_shape[:-num_trailing_dims] + msg = (f'field {field} should have number of trailing dims' + ' {num_trailing_dims}') + assert len(array_shape) == len(first_shape) + num_trailing_dims, msg + else: + field_shape = array.shape + + shape_msg = (f"Stripped Shape {field_shape} of field {field} doesn't " + f"match shape {first_shape} of field {first_field}") + assert field_shape == first_shape, shape_msg + + field_dtype = array.dtype + + allowed_metadata_dtypes = field.metadata.get('allowed_dtypes', []) + if allowed_metadata_dtypes: + msg = f'Dtype is {field_dtype} but must be in {allowed_metadata_dtypes}' + assert field_dtype in allowed_metadata_dtypes, msg + + if 'dtype' in field.metadata: + target_dtype = field.metadata['dtype'] + else: + target_dtype = dtype + + msg = f'Dtype is {field_dtype} but must be {target_dtype}' + assert field_dtype == target_dtype, msg + + +def flatten(instance): + """Flatten Struct of Array instance.""" + array_likes = list(get_array_fields(instance, return_values=True).values()) + flat_array_likes = [] + inner_treedefs = [] + num_arrays = [] + for array_like in array_likes: + flat_array_like, inner_treedef = jax.tree_util.tree_flatten(array_like) + inner_treedefs.append(inner_treedef) + flat_array_likes += flat_array_like + num_arrays.append(len(flat_array_like)) + metadata = get_metadata_fields(instance, return_values=True) + metadata = type(instance).metadata_cls(**metadata) + return flat_array_likes, (inner_treedefs, metadata, num_arrays) + + +def make_metadata_class(cls): + metadata_fields = get_fields(cls, + lambda x: x.metadata.get('is_metadata', False)) + metadata_cls = dataclasses.make_dataclass( + cls_name='Meta' + cls.__name__, + fields=[(field.name, field.type, field) for field in metadata_fields], + frozen=True, + eq=True) + return metadata_cls + + +def get_fields(cls_or_instance, filterfn, return_values=False): + fields = dataclasses.fields(cls_or_instance) + fields = [field for field in fields if filterfn(field)] + if return_values: + return { + field.name: getattr(cls_or_instance, field.name) for field in fields + } + else: + return fields + + +def get_array_fields(cls, return_values=False): + return get_fields( + cls, + lambda x: not x.metadata.get('is_metadata', False), + return_values=return_values) + + +def get_metadata_fields(cls, return_values=False): + return get_fields( + cls, + lambda x: x.metadata.get('is_metadata', False), + return_values=return_values) + + +class StructOfArray: + """Class Decorator for Struct Of Arrays.""" + + def __init__(self, same_dtype=True): + self.same_dtype = same_dtype + + def __call__(self, cls): + cls.__array_ufunc__ = None + cls.replace = replace + cls.same_dtype = self.same_dtype + cls.dtype = get_dtype + cls.shape = get_shape + cls.__len__ = get_len + cls.__getitem__ = get_item + cls.__post_init__ = post_init + new_cls = dataclasses.dataclass(cls, frozen=True, eq=False) # pytype: disable=wrong-keyword-args + # pytree claims to require metadata to be hashable, not sure why, + # But making derived dataclass that can just hold metadata + new_cls.metadata_cls = make_metadata_class(new_cls) + + def unflatten(aux, data): + inner_treedefs, metadata, num_arrays = aux + array_fields = [field.name for field in get_array_fields(new_cls)] + value_dict = {} + array_start = 0 + for num_array, inner_treedef, array_field in zip(num_arrays, + inner_treedefs, + array_fields): + value_dict[array_field] = jax.tree_util.tree_unflatten( + inner_treedef, data[array_start:array_start + num_array]) + array_start += num_array + metadata_fields = get_metadata_fields(new_cls) + for field in metadata_fields: + value_dict[field.name] = getattr(metadata, field.name) + + return new_cls(**value_dict) + + jax.tree_util.register_pytree_node( + nodetype=new_cls, flatten_func=flatten, unflatten_func=unflatten) + return new_cls diff --git a/alphafold/model/geometry/test_utils.py b/alphafold/model/geometry/test_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..de3dd93acfa0a44ea126597f6d8e6304ec92f0d9 --- /dev/null +++ b/alphafold/model/geometry/test_utils.py @@ -0,0 +1,98 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Shared utils for tests.""" + +import dataclasses + +from alphafold.model.geometry import rigid_matrix_vector +from alphafold.model.geometry import rotation_matrix +from alphafold.model.geometry import vector +import jax.numpy as jnp +import numpy as np + + +def assert_rotation_matrix_equal(matrix1: rotation_matrix.Rot3Array, + matrix2: rotation_matrix.Rot3Array): + for field in dataclasses.fields(rotation_matrix.Rot3Array): + field = field.name + np.testing.assert_array_equal( + getattr(matrix1, field), getattr(matrix2, field)) + + +def assert_rotation_matrix_close(mat1: rotation_matrix.Rot3Array, + mat2: rotation_matrix.Rot3Array): + np.testing.assert_array_almost_equal(mat1.to_array(), mat2.to_array(), 6) + + +def assert_array_equal_to_rotation_matrix(array: jnp.ndarray, + matrix: rotation_matrix.Rot3Array): + """Check that array and Matrix match.""" + np.testing.assert_array_equal(matrix.xx, array[..., 0, 0]) + np.testing.assert_array_equal(matrix.xy, array[..., 0, 1]) + np.testing.assert_array_equal(matrix.xz, array[..., 0, 2]) + np.testing.assert_array_equal(matrix.yx, array[..., 1, 0]) + np.testing.assert_array_equal(matrix.yy, array[..., 1, 1]) + np.testing.assert_array_equal(matrix.yz, array[..., 1, 2]) + np.testing.assert_array_equal(matrix.zx, array[..., 2, 0]) + np.testing.assert_array_equal(matrix.zy, array[..., 2, 1]) + np.testing.assert_array_equal(matrix.zz, array[..., 2, 2]) + + +def assert_array_close_to_rotation_matrix(array: jnp.ndarray, + matrix: rotation_matrix.Rot3Array): + np.testing.assert_array_almost_equal(matrix.to_array(), array, 6) + + +def assert_vectors_equal(vec1: vector.Vec3Array, vec2: vector.Vec3Array): + np.testing.assert_array_equal(vec1.x, vec2.x) + np.testing.assert_array_equal(vec1.y, vec2.y) + np.testing.assert_array_equal(vec1.z, vec2.z) + + +def assert_vectors_close(vec1: vector.Vec3Array, vec2: vector.Vec3Array): + np.testing.assert_allclose(vec1.x, vec2.x, atol=1e-5, rtol=0.) + np.testing.assert_allclose(vec1.y, vec2.y, atol=1e-5, rtol=0.) + np.testing.assert_allclose(vec1.z, vec2.z, atol=1e-5, rtol=0.) + + +def assert_array_close_to_vector(array: jnp.ndarray, vec: vector.Vec3Array): + np.testing.assert_allclose(vec.to_array(), array, atol=1e-6, rtol=0.) + + +def assert_array_equal_to_vector(array: jnp.ndarray, vec: vector.Vec3Array): + np.testing.assert_array_equal(vec.to_array(), array) + + +def assert_rigid_equal_to_rigid(rigid1: rigid_matrix_vector.Rigid3Array, + rigid2: rigid_matrix_vector.Rigid3Array): + assert_rot_trans_equal_to_rigid(rigid1.rotation, rigid1.translation, rigid2) + + +def assert_rigid_close_to_rigid(rigid1: rigid_matrix_vector.Rigid3Array, + rigid2: rigid_matrix_vector.Rigid3Array): + assert_rot_trans_close_to_rigid(rigid1.rotation, rigid1.translation, rigid2) + + +def assert_rot_trans_equal_to_rigid(rot: rotation_matrix.Rot3Array, + trans: vector.Vec3Array, + rigid: rigid_matrix_vector.Rigid3Array): + assert_rotation_matrix_equal(rot, rigid.rotation) + assert_vectors_equal(trans, rigid.translation) + + +def assert_rot_trans_close_to_rigid(rot: rotation_matrix.Rot3Array, + trans: vector.Vec3Array, + rigid: rigid_matrix_vector.Rigid3Array): + assert_rotation_matrix_close(rot, rigid.rotation) + assert_vectors_close(trans, rigid.translation) diff --git a/alphafold/model/geometry/utils.py b/alphafold/model/geometry/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..64c4a649dc0bc07353726f271150dd1a9c593c72 --- /dev/null +++ b/alphafold/model/geometry/utils.py @@ -0,0 +1,23 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Utils for geometry library.""" + +from typing import List + +import jax.numpy as jnp + + +def unstack(value: jnp.ndarray, axis: int = -1) -> List[jnp.ndarray]: + return [jnp.squeeze(v, axis=axis) + for v in jnp.split(value, value.shape[axis], axis=axis)] diff --git a/alphafold/model/geometry/vector.py b/alphafold/model/geometry/vector.py new file mode 100644 index 0000000000000000000000000000000000000000..8f22cc54ba4c1596101a14522e77c7ddc06bfd02 --- /dev/null +++ b/alphafold/model/geometry/vector.py @@ -0,0 +1,217 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Vec3Array Class.""" + +from __future__ import annotations +import dataclasses +from typing import Union + +from alphafold.model.geometry import struct_of_array +from alphafold.model.geometry import utils +import jax +import jax.numpy as jnp +import numpy as np + +Float = Union[float, jnp.ndarray] + +VERSION = '0.1' + + +@struct_of_array.StructOfArray(same_dtype=True) +class Vec3Array: + """Vec3Array in 3 dimensional Space implemented as struct of arrays. + + This is done in order to improve performance and precision. + On TPU small matrix multiplications are very suboptimal and will waste large + compute ressources, furthermore any matrix multiplication on tpu happen in + mixed bfloat16/float32 precision, which is often undesirable when handling + physical coordinates. + In most cases this will also be faster on cpu's/gpu's since it allows for + easier use of vector instructions. + """ + + x: jnp.ndarray = dataclasses.field(metadata={'dtype': jnp.float32}) + y: jnp.ndarray + z: jnp.ndarray + + def __post_init__(self): + if hasattr(self.x, 'dtype'): + assert self.x.dtype == self.y.dtype + assert self.x.dtype == self.z.dtype + assert all([x == y for x, y in zip(self.x.shape, self.y.shape)]) + assert all([x == z for x, z in zip(self.x.shape, self.z.shape)]) + + def __add__(self, other: Vec3Array) -> Vec3Array: + return jax.tree_map(lambda x, y: x + y, self, other) + + def __sub__(self, other: Vec3Array) -> Vec3Array: + return jax.tree_map(lambda x, y: x - y, self, other) + + def __mul__(self, other: Float) -> Vec3Array: + return jax.tree_map(lambda x: x * other, self) + + def __rmul__(self, other: Float) -> Vec3Array: + return self * other + + def __truediv__(self, other: Float) -> Vec3Array: + return jax.tree_map(lambda x: x / other, self) + + def __neg__(self) -> Vec3Array: + return jax.tree_map(lambda x: -x, self) + + def __pos__(self) -> Vec3Array: + return jax.tree_map(lambda x: x, self) + + def cross(self, other: Vec3Array) -> Vec3Array: + """Compute cross product between 'self' and 'other'.""" + new_x = self.y * other.z - self.z * other.y + new_y = self.z * other.x - self.x * other.z + new_z = self.x * other.y - self.y * other.x + return Vec3Array(new_x, new_y, new_z) + + def dot(self, other: Vec3Array) -> Float: + """Compute dot product between 'self' and 'other'.""" + return self.x * other.x + self.y * other.y + self.z * other.z + + def norm(self, epsilon: float = 1e-6) -> Float: + """Compute Norm of Vec3Array, clipped to epsilon.""" + # To avoid NaN on the backward pass, we must use maximum before the sqrt + norm2 = self.dot(self) + if epsilon: + norm2 = jnp.maximum(norm2, epsilon**2) + return jnp.sqrt(norm2) + + def norm2(self): + return self.dot(self) + + def normalized(self, epsilon: float = 1e-6) -> Vec3Array: + """Return unit vector with optional clipping.""" + return self / self.norm(epsilon) + + @classmethod + def zeros(cls, shape, dtype=jnp.float32): + """Return Vec3Array corresponding to zeros of given shape.""" + return cls( + jnp.zeros(shape, dtype), jnp.zeros(shape, dtype), + jnp.zeros(shape, dtype)) # pytype: disable=wrong-arg-count # trace-all-classes + + def to_array(self) -> jnp.ndarray: + return jnp.stack([self.x, self.y, self.z], axis=-1) + + @classmethod + def from_array(cls, array): + return cls(*utils.unstack(array)) + + def __getstate__(self): + return (VERSION, + [np.asarray(self.x), + np.asarray(self.y), + np.asarray(self.z)]) + + def __setstate__(self, state): + version, state = state + del version + for i, letter in enumerate('xyz'): + object.__setattr__(self, letter, state[i]) + + +def square_euclidean_distance(vec1: Vec3Array, + vec2: Vec3Array, + epsilon: float = 1e-6) -> Float: + """Computes square of euclidean distance between 'vec1' and 'vec2'. + + Args: + vec1: Vec3Array to compute distance to + vec2: Vec3Array to compute distance from, should be + broadcast compatible with 'vec1' + epsilon: distance is clipped from below to be at least epsilon + + Returns: + Array of square euclidean distances; + shape will be result of broadcasting 'vec1' and 'vec2' + """ + difference = vec1 - vec2 + distance = difference.dot(difference) + if epsilon: + distance = jnp.maximum(distance, epsilon) + return distance + + +def dot(vector1: Vec3Array, vector2: Vec3Array) -> Float: + return vector1.dot(vector2) + + +def cross(vector1: Vec3Array, vector2: Vec3Array) -> Float: + return vector1.cross(vector2) + + +def norm(vector: Vec3Array, epsilon: float = 1e-6) -> Float: + return vector.norm(epsilon) + + +def normalized(vector: Vec3Array, epsilon: float = 1e-6) -> Vec3Array: + return vector.normalized(epsilon) + + +def euclidean_distance(vec1: Vec3Array, + vec2: Vec3Array, + epsilon: float = 1e-6) -> Float: + """Computes euclidean distance between 'vec1' and 'vec2'. + + Args: + vec1: Vec3Array to compute euclidean distance to + vec2: Vec3Array to compute euclidean distance from, should be + broadcast compatible with 'vec1' + epsilon: distance is clipped from below to be at least epsilon + + Returns: + Array of euclidean distances; + shape will be result of broadcasting 'vec1' and 'vec2' + """ + distance_sq = square_euclidean_distance(vec1, vec2, epsilon**2) + distance = jnp.sqrt(distance_sq) + return distance + + +def dihedral_angle(a: Vec3Array, b: Vec3Array, c: Vec3Array, + d: Vec3Array) -> Float: + """Computes torsion angle for a quadruple of points. + + For points (a, b, c, d), this is the angle between the planes defined by + points (a, b, c) and (b, c, d). It is also known as the dihedral angle. + + Arguments: + a: A Vec3Array of coordinates. + b: A Vec3Array of coordinates. + c: A Vec3Array of coordinates. + d: A Vec3Array of coordinates. + + Returns: + A tensor of angles in radians: [-pi, pi]. + """ + v1 = a - b + v2 = b - c + v3 = d - c + + c1 = v1.cross(v2) + c2 = v3.cross(v2) + c3 = c2.cross(c1) + + v2_mag = v2.norm() + return jnp.arctan2(c3.dot(v2), v2_mag * c1.dot(c2)) + + +def random_gaussian_vector(shape, key, dtype=jnp.float32): + vec_array = jax.random.normal(key, shape + (3,), dtype) + return Vec3Array.from_array(vec_array) diff --git a/alphafold/model/layer_stack.py b/alphafold/model/layer_stack.py new file mode 100644 index 0000000000000000000000000000000000000000..cbbb0dcb26445ec8ce57149f31aba9fc4de2863c --- /dev/null +++ b/alphafold/model/layer_stack.py @@ -0,0 +1,274 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Function to stack repeats of a layer function without shared parameters.""" + +import collections +import contextlib +import functools +import inspect +from typing import Any, Callable, Optional, Tuple, Union + +import haiku as hk +import jax +import jax.numpy as jnp + +LayerStackCarry = collections.namedtuple('LayerStackCarry', ['x', 'rng']) +LayerStackScanned = collections.namedtuple('LayerStackScanned', + ['i', 'args_ys']) + +# WrappedFn should take in arbitrarily nested `jnp.ndarray`, and return the +# exact same type. We cannot express this with `typing`. So we just use it +# to inform the user. In reality, the typing below will accept anything. +NestedArray = Any +WrappedFn = Callable[..., Union[NestedArray, Tuple[NestedArray]]] + + +def _check_no_varargs(f): + if list(inspect.signature( + f).parameters.values())[0].kind == inspect.Parameter.VAR_POSITIONAL: + raise ValueError( + 'The function `f` should not have any `varargs` (that is *args) ' + 'argument. Instead, it should only use explicit positional' + 'arguments.') + + +@contextlib.contextmanager +def nullcontext(): + yield + + +def maybe_with_rng(key): + if key is not None: + return hk.with_rng(key) + else: + return nullcontext() + + +def maybe_fold_in(key, data): + if key is not None: + return jax.random.fold_in(key, data) + else: + return None + + +class _LayerStack(hk.Module): + """Module to compose parameterized functions, implemented as a scan.""" + + def __init__(self, + count: int, + unroll: int, + name: Optional[str] = None): + """Iterate a function `f` `count` times, with non-shared parameters.""" + super().__init__(name=name) + self._count = count + self._unroll = unroll + + def __call__(self, x, *args_ys): + count = self._count + if hk.running_init(): + # At initialization time, we run just one layer but add an extra first + # dimension to every initialized tensor, making sure to use different + # random keys for different slices. + def creator(next_creator, shape, dtype, init, context): + del context + + def multi_init(shape, dtype): + assert shape[0] == count + key = hk.maybe_next_rng_key() + + def rng_context_init(slice_idx): + slice_key = maybe_fold_in(key, slice_idx) + with maybe_with_rng(slice_key): + return init(shape[1:], dtype) + + return jax.vmap(rng_context_init)(jnp.arange(count)) + + return next_creator((count,) + tuple(shape), dtype, multi_init) + + def getter(next_getter, value, context): + trailing_dims = len(context.original_shape) + 1 + sliced_value = jax.lax.index_in_dim( + value, index=0, axis=value.ndim - trailing_dims, keepdims=False) + return next_getter(sliced_value) + + with hk.experimental.custom_creator( + creator), hk.experimental.custom_getter(getter): + if len(args_ys) == 1 and args_ys[0] is None: + args0 = (None,) + else: + args0 = [ + jax.lax.dynamic_index_in_dim(ys, 0, keepdims=False) + for ys in args_ys + ] + x, z = self._call_wrapped(x, *args0) + if z is None: + return x, z + + # Broadcast state to hold each layer state. + def broadcast_state(layer_state): + return jnp.broadcast_to( + layer_state, [count,] + list(layer_state.shape)) + zs = jax.tree_util.tree_map(broadcast_state, z) + return x, zs + else: + # Use scan during apply, threading through random seed so that it's + # unique for each layer. + def layer(carry: LayerStackCarry, scanned: LayerStackScanned): + rng = carry.rng + + def getter(next_getter, value, context): + # Getter slices the full param at the current loop index. + trailing_dims = len(context.original_shape) + 1 + assert value.shape[value.ndim - trailing_dims] == count, ( + f'Attempting to use a parameter stack of size ' + f'{value.shape[value.ndim - trailing_dims]} for a LayerStack of ' + f'size {count}.') + + sliced_value = jax.lax.dynamic_index_in_dim( + value, scanned.i, axis=value.ndim - trailing_dims, keepdims=False) + return next_getter(sliced_value) + + with hk.experimental.custom_getter(getter): + if rng is None: + out_x, z = self._call_wrapped(carry.x, *scanned.args_ys) + else: + rng, rng_ = jax.random.split(rng) + with hk.with_rng(rng_): + out_x, z = self._call_wrapped(carry.x, *scanned.args_ys) + return LayerStackCarry(x=out_x, rng=rng), z + + carry = LayerStackCarry(x=x, rng=hk.maybe_next_rng_key()) + scanned = LayerStackScanned(i=jnp.arange(count, dtype=jnp.int32), + args_ys=args_ys) + + carry, zs = hk.scan( + layer, carry, scanned, length=count, unroll=self._unroll) + return carry.x, zs + + def _call_wrapped(self, + x: jnp.ndarray, + *args, + ) -> Tuple[jnp.ndarray, Optional[jnp.ndarray]]: + raise NotImplementedError() + + +class _LayerStackNoState(_LayerStack): + """_LayerStack impl with no per-layer state provided to the function.""" + + def __init__(self, + f: WrappedFn, + count: int, + unroll: int, + name: Optional[str] = None): + super().__init__(count=count, unroll=unroll, name=name) + _check_no_varargs(f) + self._f = f + + @hk.transparent + def _call_wrapped(self, args, y): + del y + ret = self._f(*args) + if len(args) == 1: + # If the function takes a single argument, the wrapped function receives + # a tuple of length 1, and therefore it must return a tuple of length 1. + ret = (ret,) + return ret, None + + +class _LayerStackWithState(_LayerStack): + """_LayerStack impl with per-layer state provided to the function.""" + + def __init__(self, + f: WrappedFn, + count: int, + unroll: int, + name: Optional[str] = None): + super().__init__(count=count, unroll=unroll, name=name) + self._f = f + + @hk.transparent + def _call_wrapped(self, x, *args): + return self._f(x, *args) + + +def layer_stack(num_layers: int, + with_state=False, + unroll: int = 1, + name: Optional[str] = None): + """Utility to wrap a Haiku function and recursively apply it to an input. + + A function is valid if it uses only explicit position parameters, and + its return type matches its input type. The position parameters can be + arbitrarily nested structures with `jnp.ndarray` at the leaf nodes. Note + that kwargs are not supported, neither are functions with variable number + of parameters (specified by `*args`). + + If `with_state=False` then the new, wrapped function can be understood as + performing the following: + ``` + for i in range(num_layers): + x = f(x) + return x + ``` + + And if `with_state=True`, assuming `f` takes two arguments on top of `x`: + ``` + for i in range(num_layers): + x, zs[i] = f(x, ys_0[i], ys_1[i]) + return x, zs + ``` + The code using `layer_stack` for the above function would be: + ``` + def f(x, y_0, y_1): + ... + return new_x, z + x, zs = layer_stack.layer_stack(num_layers, + with_state=True)(f)(x, ys_0, ys_1) + ``` + + Crucially, any parameters created inside `f` will not be shared across + iterations. + + Args: + num_layers: The number of times to iterate the wrapped function. + with_state: Whether or not to pass per-layer state to the wrapped function. + unroll: the unroll used by `scan`. + name: Name of the Haiku context. + + Returns: + Callable that will produce a layer stack when called with a valid function. + """ + def iterate(f): + if with_state: + @functools.wraps(f) + def wrapped(x, *args): + for ys in args: + assert ys.shape[0] == num_layers + return _LayerStackWithState( + f, num_layers, unroll=unroll, name=name)(x, *args) + else: + _check_no_varargs(f) + @functools.wraps(f) + def wrapped(*args): + ret = _LayerStackNoState( + f, num_layers, unroll=unroll, name=name)(args, None)[0] + if len(args) == 1: + # If the function takes a single argument, we must also return a + # single value, and not a tuple of length 1. + ret = ret[0] + return ret + + return wrapped + return iterate diff --git a/alphafold/model/layer_stack_test.py b/alphafold/model/layer_stack_test.py new file mode 100644 index 0000000000000000000000000000000000000000..40c7a194eb657b92fe3228ac4603285e60f1e358 --- /dev/null +++ b/alphafold/model/layer_stack_test.py @@ -0,0 +1,335 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for layer_stack.""" + +import functools +from absl.testing import absltest +from absl.testing import parameterized +from alphafold.model import layer_stack +import haiku as hk +import jax +import jax.numpy as jnp +import numpy as np +import scipy.stats + + +# Suffixes applied by Haiku for repeated module names. +suffixes = [''] + [f'_{i}' for i in range(1, 100)] + + +def _slice_layers_params(layers_params): + sliced_layers_params = {} + for k, v in layers_params.items(): + for inner_k in v: + for var_slice, suffix in zip(v[inner_k], suffixes): + k_new = k.split('/')[-1] + suffix + if k_new not in sliced_layers_params: + sliced_layers_params[k_new] = {} + sliced_layers_params[k_new][inner_k] = var_slice + return sliced_layers_params + + +class LayerStackTest(parameterized.TestCase): + + @parameterized.parameters([1, 2, 4]) + def test_layer_stack(self, unroll): + """Compare layer_stack to the equivalent unrolled stack. + + Tests that the layer_stack application of a Haiku layer function is + equivalent to repeatedly applying the layer function in an unrolled loop. + + Args: + unroll: Number of unrolled layers. + """ + num_layers = 20 + + def inner_fn(x): + x += hk.Linear(100, name='linear1')(x) + x += hk.Linear(100, name='linear2')(x) + return x + + def outer_fn_unrolled(x): + for _ in range(num_layers): + x = inner_fn(x) + return x + + def outer_fn_layer_stack(x): + stack = layer_stack.layer_stack(num_layers, unroll=unroll)(inner_fn) + return stack(x) + + unrolled_fn = hk.transform(outer_fn_unrolled) + layer_stack_fn = hk.transform(outer_fn_layer_stack) + + x = jax.random.uniform(jax.random.PRNGKey(0), [10, 256, 100]) + + rng_init = jax.random.PRNGKey(42) + + params = layer_stack_fn.init(rng_init, x) + + sliced_params = _slice_layers_params(params) + + unrolled_pred = unrolled_fn.apply(sliced_params, None, x) + layer_stack_pred = layer_stack_fn.apply(params, None, x) + + np.testing.assert_allclose(unrolled_pred, layer_stack_pred) + + def test_layer_stack_multi_args(self): + """Compare layer_stack to the equivalent unrolled stack. + + Similar to `test_layer_stack`, but use a function that takes more than one + argument. + """ + num_layers = 20 + + def inner_fn(x, y): + x_out = x + hk.Linear(100, name='linear1')(y) + y_out = y + hk.Linear(100, name='linear2')(x) + return x_out, y_out + + def outer_fn_unrolled(x, y): + for _ in range(num_layers): + x, y = inner_fn(x, y) + return x, y + + def outer_fn_layer_stack(x, y): + stack = layer_stack.layer_stack(num_layers)(inner_fn) + return stack(x, y) + + unrolled_fn = hk.transform(outer_fn_unrolled) + layer_stack_fn = hk.transform(outer_fn_layer_stack) + + x = jax.random.uniform(jax.random.PRNGKey(0), [10, 256, 100]) + y = jax.random.uniform(jax.random.PRNGKey(1), [10, 256, 100]) + + rng_init = jax.random.PRNGKey(42) + + params = layer_stack_fn.init(rng_init, x, y) + + sliced_params = _slice_layers_params(params) + + unrolled_x, unrolled_y = unrolled_fn.apply(sliced_params, None, x, y) + layer_stack_x, layer_stack_y = layer_stack_fn.apply(params, None, x, y) + + np.testing.assert_allclose(unrolled_x, layer_stack_x) + np.testing.assert_allclose(unrolled_y, layer_stack_y) + + def test_layer_stack_no_varargs(self): + """Test an error is raised when using a function with varargs.""" + + class VarArgsModule(hk.Module): + """When used, this module should cause layer_stack to raise an Error.""" + + def __call__(self, *args): + return args + + class NoVarArgsModule(hk.Module): + """This module should be fine to use with layer_stack.""" + + def __call__(self, x): + return x + + def build_and_init_stack(module_class): + def stack_fn(x): + module = module_class() + return layer_stack.layer_stack(1)(module)(x) + + stack = hk.without_apply_rng(hk.transform(stack_fn)) + stack.init(jax.random.PRNGKey(1729), jnp.ones([5])) + + build_and_init_stack(NoVarArgsModule) + with self.assertRaisesRegex( + ValueError, 'The function `f` should not have any `varargs`'): + build_and_init_stack(VarArgsModule) + + @parameterized.parameters([1, 2, 4]) + def test_layer_stack_grads(self, unroll): + """Compare layer_stack gradients to the equivalent unrolled stack. + + Tests that the layer_stack application of a Haiku layer function is + equivalent to repeatedly applying the layer function in an unrolled loop. + + Args: + unroll: Number of unrolled layers. + """ + num_layers = 20 + + def inner_fn(x): + x += hk.Linear(100, name='linear1')(x) + x += hk.Linear(100, name='linear2')(x) + return x + + def outer_fn_unrolled(x): + for _ in range(num_layers): + x = inner_fn(x) + return x + + def outer_fn_layer_stack(x): + stack = layer_stack.layer_stack(num_layers, unroll=unroll)(inner_fn) + return stack(x) + + unrolled_fn = hk.transform(outer_fn_unrolled) + layer_stack_fn = hk.transform(outer_fn_layer_stack) + + x = jax.random.uniform(jax.random.PRNGKey(0), [10, 256, 100]) + + rng_init = jax.random.PRNGKey(42) + + params = layer_stack_fn.init(rng_init, x) + + sliced_params = _slice_layers_params(params) + + unrolled_grad = jax.grad( + lambda p, x: jnp.mean(unrolled_fn.apply(p, None, x)))(sliced_params, x) + layer_stack_grad = jax.grad( + lambda p, x: jnp.mean(layer_stack_fn.apply(p, None, x)))(params, x) + + assert_fn = functools.partial( + np.testing.assert_allclose, atol=1e-4, rtol=1e-4) + + jax.tree_map(assert_fn, unrolled_grad, + _slice_layers_params(layer_stack_grad)) + + def test_random(self): + """Random numbers should be handled correctly.""" + n = 100 + + @hk.transform + @layer_stack.layer_stack(n) + def add_random(x): + x = x + jax.random.normal(hk.next_rng_key()) + return x + + # Evaluate a bunch of times + key, *keys = jax.random.split(jax.random.PRNGKey(7), 1024 + 1) + params = add_random.init(key, 0.) + apply_fn = jax.jit(add_random.apply) + values = [apply_fn(params, key, 0.) for key in keys] + + # Should be roughly N(0, sqrt(n)) + cdf = scipy.stats.norm(scale=np.sqrt(n)).cdf + _, p = scipy.stats.kstest(values, cdf) + self.assertLess(0.3, p) + + def test_threading(self): + """Test @layer_stack when the function gets per-layer state.""" + n = 5 + + @layer_stack.layer_stack(n, with_state=True) + def f(x, y): + x = x + y * jax.nn.one_hot(y, len(x)) / 10 + return x, 2 * y + + @hk.without_apply_rng + @hk.transform + def g(x, ys): + x, zs = f(x, ys) + # Check here to catch issues at init time + self.assertEqual(zs.shape, (n,)) + return x, zs + + rng = jax.random.PRNGKey(7) + x = np.zeros(n) + ys = np.arange(n).astype(np.float32) + params = g.init(rng, x, ys) + x, zs = g.apply(params, x, ys) + self.assertTrue(np.allclose(x, [0, .1, .2, .3, .4])) + self.assertTrue(np.all(zs == 2 * ys)) + + def test_nested_stacks(self): + def stack_fn(x): + def layer_fn(x): + return hk.Linear(100)(x) + + outer_fn = layer_stack.layer_stack(10)(layer_fn) + + layer_outer = layer_stack.layer_stack(20)(outer_fn) + return layer_outer(x) + + hk_mod = hk.transform(stack_fn) + apply_rng, init_rng = jax.random.split(jax.random.PRNGKey(0)) + + params = hk_mod.init(init_rng, jnp.zeros([10, 100])) + + hk_mod.apply(params, apply_rng, jnp.zeros([10, 100])) + + p, = params.values() + + assert p['w'].shape == (10, 20, 100, 100) + assert p['b'].shape == (10, 20, 100) + + def test_with_state_multi_args(self): + """Test layer_stack with state with multiple arguments.""" + width = 4 + batch_size = 5 + stack_height = 3 + + def f_with_multi_args(x, a, b): + return hk.Linear( + width, w_init=hk.initializers.Constant( + jnp.eye(width)))(x) * a + b, None + + @hk.without_apply_rng + @hk.transform + def hk_fn(x): + return layer_stack.layer_stack( + stack_height, + with_state=True)(f_with_multi_args)(x, jnp.full([stack_height], 2.), + jnp.ones([stack_height])) + + x = jnp.zeros([batch_size, width]) + key_seq = hk.PRNGSequence(19) + params = hk_fn.init(next(key_seq), x) + output, z = hk_fn.apply(params, x) + self.assertIsNone(z) + self.assertEqual(output.shape, (batch_size, width)) + np.testing.assert_equal(output, np.full([batch_size, width], 7.)) + + def test_with_container_state(self): + width = 2 + batch_size = 2 + stack_height = 3 + + def f_with_container_state(x): + hk_layer = hk.Linear( + width, w_init=hk.initializers.Constant(jnp.eye(width))) + layer_output = hk_layer(x) + layer_state = { + 'raw_output': layer_output, + 'output_projection': jnp.sum(layer_output) + } + return layer_output + jnp.ones_like(layer_output), layer_state + + @hk.without_apply_rng + @hk.transform + def hk_fn(x): + return layer_stack.layer_stack( + stack_height, + with_state=True)(f_with_container_state)(x) + + x = jnp.zeros([batch_size, width]) + key_seq = hk.PRNGSequence(19) + params = hk_fn.init(next(key_seq), x) + output, z = hk_fn.apply(params, x) + self.assertEqual(z['raw_output'].shape, (stack_height, batch_size, width)) + self.assertEqual(output.shape, (batch_size, width)) + self.assertEqual(z['output_projection'].shape, (stack_height,)) + np.testing.assert_equal(np.sum(z['output_projection']), np.array(12.)) + np.testing.assert_equal( + np.all(z['raw_output'] == np.array([0., 1., 2.])[..., None, None]), + np.array(True)) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/model/lddt.py b/alphafold/model/lddt.py new file mode 100644 index 0000000000000000000000000000000000000000..6b2a3f9c9c427b8da547cabf75ff48a7b9fc1844 --- /dev/null +++ b/alphafold/model/lddt.py @@ -0,0 +1,88 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""lDDT protein distance score.""" +import jax.numpy as jnp + + +def lddt(predicted_points, + true_points, + true_points_mask, + cutoff=15., + per_residue=False): + """Measure (approximate) lDDT for a batch of coordinates. + + lDDT reference: + Mariani, V., Biasini, M., Barbato, A. & Schwede, T. lDDT: A local + superposition-free score for comparing protein structures and models using + distance difference tests. Bioinformatics 29, 2722–2728 (2013). + + lDDT is a measure of the difference between the true distance matrix and the + distance matrix of the predicted points. The difference is computed only on + points closer than cutoff *in the true structure*. + + This function does not compute the exact lDDT value that the original paper + describes because it does not include terms for physical feasibility + (e.g. bond length violations). Therefore this is only an approximate + lDDT score. + + Args: + predicted_points: (batch, length, 3) array of predicted 3D points + true_points: (batch, length, 3) array of true 3D points + true_points_mask: (batch, length, 1) binary-valued float array. This mask + should be 1 for points that exist in the true points. + cutoff: Maximum distance for a pair of points to be included + per_residue: If true, return score for each residue. Note that the overall + lDDT is not exactly the mean of the per_residue lDDT's because some + residues have more contacts than others. + + Returns: + An (approximate, see above) lDDT score in the range 0-1. + """ + + assert len(predicted_points.shape) == 3 + assert predicted_points.shape[-1] == 3 + assert true_points_mask.shape[-1] == 1 + assert len(true_points_mask.shape) == 3 + + # Compute true and predicted distance matrices. + dmat_true = jnp.sqrt(1e-10 + jnp.sum( + (true_points[:, :, None] - true_points[:, None, :])**2, axis=-1)) + + dmat_predicted = jnp.sqrt(1e-10 + jnp.sum( + (predicted_points[:, :, None] - + predicted_points[:, None, :])**2, axis=-1)) + + dists_to_score = ( + (dmat_true < cutoff).astype(jnp.float32) * true_points_mask * + jnp.transpose(true_points_mask, [0, 2, 1]) * + (1. - jnp.eye(dmat_true.shape[1])) # Exclude self-interaction. + ) + + # Shift unscored distances to be far away. + dist_l1 = jnp.abs(dmat_true - dmat_predicted) + + # True lDDT uses a number of fixed bins. + # We ignore the physical plausibility correction to lDDT, though. + score = 0.25 * ((dist_l1 < 0.5).astype(jnp.float32) + + (dist_l1 < 1.0).astype(jnp.float32) + + (dist_l1 < 2.0).astype(jnp.float32) + + (dist_l1 < 4.0).astype(jnp.float32)) + + # Normalize over the appropriate axes. + reduce_axes = (-1,) if per_residue else (-2, -1) + norm = 1. / (1e-10 + jnp.sum(dists_to_score, axis=reduce_axes)) + score = norm * (1e-10 + jnp.sum(dists_to_score * score, axis=reduce_axes)) + + return score diff --git a/alphafold/model/lddt_test.py b/alphafold/model/lddt_test.py new file mode 100644 index 0000000000000000000000000000000000000000..8b4f050f05e3c786987d0151de0acb0ec2c54fee --- /dev/null +++ b/alphafold/model/lddt_test.py @@ -0,0 +1,79 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for lddt.""" + +from absl.testing import absltest +from absl.testing import parameterized +from alphafold.model import lddt +import numpy as np + + +class LddtTest(parameterized.TestCase, absltest.TestCase): + + @parameterized.named_parameters( + ('same', + [[0, 0, 0], [5, 0, 0], [10, 0, 0]], + [[0, 0, 0], [5, 0, 0], [10, 0, 0]], + [1, 1, 1]), + ('all_shifted', + [[0, 0, 0], [5, 0, 0], [10, 0, 0]], + [[-1, 0, 0], [4, 0, 0], [9, 0, 0]], + [1, 1, 1]), + ('all_rotated', + [[0, 0, 0], [5, 0, 0], [10, 0, 0]], + [[0, 0, 0], [0, 5, 0], [0, 10, 0]], + [1, 1, 1]), + ('half_a_dist', + [[0, 0, 0], [5, 0, 0]], + [[0, 0, 0], [5.5-1e-5, 0, 0]], + [1, 1]), + ('one_a_dist', + [[0, 0, 0], [5, 0, 0]], + [[0, 0, 0], [6-1e-5, 0, 0]], + [0.75, 0.75]), + ('two_a_dist', + [[0, 0, 0], [5, 0, 0]], + [[0, 0, 0], [7-1e-5, 0, 0]], + [0.5, 0.5]), + ('four_a_dist', + [[0, 0, 0], [5, 0, 0]], + [[0, 0, 0], [9-1e-5, 0, 0]], + [0.25, 0.25],), + ('five_a_dist', + [[0, 0, 0], [16-1e-5, 0, 0]], + [[0, 0, 0], [11, 0, 0]], + [0, 0]), + ('no_pairs', + [[0, 0, 0], [20, 0, 0]], + [[0, 0, 0], [25-1e-5, 0, 0]], + [1, 1]), + ) + def test_lddt( + self, predicted_pos, true_pos, exp_lddt): + predicted_pos = np.array([predicted_pos], dtype=np.float32) + true_points_mask = np.array([[[1]] * len(true_pos)], dtype=np.float32) + true_pos = np.array([true_pos], dtype=np.float32) + cutoff = 15.0 + per_residue = True + + result = lddt.lddt( + predicted_pos, true_pos, true_points_mask, cutoff, + per_residue) + + np.testing.assert_almost_equal(result, [exp_lddt], decimal=4) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/model/mapping.py b/alphafold/model/mapping.py new file mode 100644 index 0000000000000000000000000000000000000000..0e736d521b5bd0ab1ef7d98a33be6c79008e45b0 --- /dev/null +++ b/alphafold/model/mapping.py @@ -0,0 +1,223 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Specialized mapping functions.""" + +import functools +import inspect + +from typing import Any, Callable, Optional, Sequence, Union + +import haiku as hk +import jax +import jax.numpy as jnp + + +PYTREE = Any +PYTREE_JAX_ARRAY = Any + +partial = functools.partial +PROXY = object() + + +def _maybe_slice(array, i, slice_size, axis): + if axis is PROXY: + return array + else: + return jax.lax.dynamic_slice_in_dim( + array, i, slice_size=slice_size, axis=axis) + + +def _maybe_get_size(array, axis): + if axis == PROXY: + return -1 + else: + return array.shape[axis] + + +def _expand_axes(axes, values, name='sharded_apply'): + values_tree_def = jax.tree_util.tree_flatten(values)[1] + flat_axes = jax.api_util.flatten_axes(name, values_tree_def, axes) + # Replace None's with PROXY + flat_axes = [PROXY if x is None else x for x in flat_axes] + return jax.tree_util.tree_unflatten(values_tree_def, flat_axes) + + +def sharded_map( + fun: Callable[..., PYTREE_JAX_ARRAY], + shard_size: Union[int, None] = 1, + in_axes: Union[int, PYTREE] = 0, + out_axes: Union[int, PYTREE] = 0) -> Callable[..., PYTREE_JAX_ARRAY]: + """Sharded vmap. + + Maps `fun` over axes, in a way similar to vmap, but does so in shards of + `shard_size`. This allows a smooth trade-off between memory usage + (as in a plain map) vs higher throughput (as in a vmap). + + Args: + fun: Function to apply smap transform to. + shard_size: Integer denoting shard size. + in_axes: Either integer or pytree describing which axis to map over for each + input to `fun`, None denotes broadcasting. + out_axes: integer or pytree denoting to what axis in the output the mapped + over axis maps. + + Returns: + function with smap applied. + """ + if 'split_rng' in inspect.signature(hk.vmap).parameters: + vmapped_fun = hk.vmap(fun, in_axes, out_axes, split_rng=False) + else: + # TODO(tomhennigan): Remove this when older versions of Haiku aren't used. + vmapped_fun = hk.vmap(fun, in_axes, out_axes) + return sharded_apply(vmapped_fun, shard_size, in_axes, out_axes) + + +def sharded_apply( + fun: Callable[..., PYTREE_JAX_ARRAY], # pylint: disable=g-bare-generic + shard_size: Union[int, None] = 1, + in_axes: Union[int, PYTREE] = 0, + out_axes: Union[int, PYTREE] = 0, + new_out_axes: bool = False) -> Callable[..., PYTREE_JAX_ARRAY]: + """Sharded apply. + + Applies `fun` over shards to axes, in a way similar to vmap, + but does so in shards of `shard_size`. Shards are stacked after. + This allows a smooth trade-off between + memory usage (as in a plain map) vs higher throughput (as in a vmap). + + Args: + fun: Function to apply smap transform to. + shard_size: Integer denoting shard size. + in_axes: Either integer or pytree describing which axis to map over for each + input to `fun`, None denotes broadcasting. + out_axes: integer or pytree denoting to what axis in the output the mapped + over axis maps. + new_out_axes: whether to stack outputs on new axes. This assumes that the + output sizes for each shard (including the possible remainder shard) are + the same. + + Returns: + function with smap applied. + """ + docstr = ('Mapped version of {fun}. Takes similar arguments to {fun} ' + 'but with additional array axes over which {fun} is mapped.') + if new_out_axes: + raise NotImplementedError('New output axes not yet implemented.') + + # shard size None denotes no sharding + if shard_size is None: + return fun + + @jax.util.wraps(fun, docstr=docstr) + def mapped_fn(*args): + # Expand in axes and Determine Loop range + in_axes_ = _expand_axes(in_axes, args) + + in_sizes = jax.tree_map(_maybe_get_size, args, in_axes_) + flat_sizes = jax.tree_util.tree_flatten(in_sizes)[0] + in_size = max(flat_sizes) + assert all(i in {in_size, -1} for i in flat_sizes) + + num_extra_shards = (in_size - 1) // shard_size + + # Fix Up if necessary + last_shard_size = in_size % shard_size + last_shard_size = shard_size if last_shard_size == 0 else last_shard_size + + def apply_fun_to_slice(slice_start, slice_size): + input_slice = jax.tree_map( + lambda array, axis: _maybe_slice(array, slice_start, slice_size, axis + ), args, in_axes_) + return fun(*input_slice) + + remainder_shape_dtype = hk.eval_shape( + partial(apply_fun_to_slice, 0, last_shard_size)) + out_dtypes = jax.tree_map(lambda x: x.dtype, remainder_shape_dtype) + out_shapes = jax.tree_map(lambda x: x.shape, remainder_shape_dtype) + out_axes_ = _expand_axes(out_axes, remainder_shape_dtype) + + if num_extra_shards > 0: + regular_shard_shape_dtype = hk.eval_shape( + partial(apply_fun_to_slice, 0, shard_size)) + shard_shapes = jax.tree_map(lambda x: x.shape, regular_shard_shape_dtype) + + def make_output_shape(axis, shard_shape, remainder_shape): + return shard_shape[:axis] + ( + shard_shape[axis] * num_extra_shards + + remainder_shape[axis],) + shard_shape[axis + 1:] + + out_shapes = jax.tree_map(make_output_shape, out_axes_, shard_shapes, + out_shapes) + + # Calls dynamic Update slice with different argument order + # This is here since tree_map only works with positional arguments + def dynamic_update_slice_in_dim(full_array, update, axis, i): + return jax.lax.dynamic_update_slice_in_dim(full_array, update, i, axis) + + def compute_shard(outputs, slice_start, slice_size): + slice_out = apply_fun_to_slice(slice_start, slice_size) + update_slice = partial( + dynamic_update_slice_in_dim, i=slice_start) + return jax.tree_map(update_slice, outputs, slice_out, out_axes_) + + def scan_iteration(outputs, i): + new_outputs = compute_shard(outputs, i, shard_size) + return new_outputs, () + + slice_starts = jnp.arange(0, in_size - shard_size + 1, shard_size) + + def allocate_buffer(dtype, shape): + return jnp.zeros(shape, dtype=dtype) + + outputs = jax.tree_map(allocate_buffer, out_dtypes, out_shapes) + + if slice_starts.shape[0] > 0: + outputs, _ = hk.scan(scan_iteration, outputs, slice_starts) + + if last_shard_size != shard_size: + remainder_start = in_size - last_shard_size + outputs = compute_shard(outputs, remainder_start, last_shard_size) + + return outputs + + return mapped_fn + + +def inference_subbatch( + module: Callable[..., PYTREE_JAX_ARRAY], + subbatch_size: int, + batched_args: Sequence[PYTREE_JAX_ARRAY], + nonbatched_args: Sequence[PYTREE_JAX_ARRAY], + low_memory: bool = True, + input_subbatch_dim: int = 0, + output_subbatch_dim: Optional[int] = None) -> PYTREE_JAX_ARRAY: + """Run through subbatches (like batch apply but with split and concat).""" + assert len(batched_args) > 0 # pylint: disable=g-explicit-length-test + + if not low_memory: + args = list(batched_args) + list(nonbatched_args) + return module(*args) + + if output_subbatch_dim is None: + output_subbatch_dim = input_subbatch_dim + + def run_module(*batched_args): + args = list(batched_args) + list(nonbatched_args) + return module(*args) + sharded_module = sharded_apply(run_module, + shard_size=subbatch_size, + in_axes=input_subbatch_dim, + out_axes=output_subbatch_dim) + return sharded_module(*batched_args) diff --git a/alphafold/model/model.py b/alphafold/model/model.py new file mode 100644 index 0000000000000000000000000000000000000000..072355acdcdca9f1737f0cd8dfeed18131ed7fbe --- /dev/null +++ b/alphafold/model/model.py @@ -0,0 +1,177 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Code for constructing the model.""" +from typing import Any, Mapping, Optional, Union + +from absl import logging +from alphafold.common import confidence +from alphafold.model import features +from alphafold.model import modules +from alphafold.model import modules_multimer +import haiku as hk +import jax +import ml_collections +import numpy as np +import tensorflow.compat.v1 as tf +import tree + + +def get_confidence_metrics( + prediction_result: Mapping[str, Any], + multimer_mode: bool) -> Mapping[str, Any]: + """Post processes prediction_result to get confidence metrics.""" + confidence_metrics = {} + confidence_metrics['plddt'] = confidence.compute_plddt( + prediction_result['predicted_lddt']['logits']) + if 'predicted_aligned_error' in prediction_result: + confidence_metrics.update(confidence.compute_predicted_aligned_error( + logits=prediction_result['predicted_aligned_error']['logits'], + breaks=prediction_result['predicted_aligned_error']['breaks'])) + confidence_metrics['ptm'] = confidence.predicted_tm_score( + logits=prediction_result['predicted_aligned_error']['logits'], + breaks=prediction_result['predicted_aligned_error']['breaks'], + asym_id=None) + if multimer_mode: + # Compute the ipTM only for the multimer model. + confidence_metrics['iptm'] = confidence.predicted_tm_score( + logits=prediction_result['predicted_aligned_error']['logits'], + breaks=prediction_result['predicted_aligned_error']['breaks'], + asym_id=prediction_result['predicted_aligned_error']['asym_id'], + interface=True) + confidence_metrics['ranking_confidence'] = ( + 0.8 * confidence_metrics['iptm'] + 0.2 * confidence_metrics['ptm']) + + if not multimer_mode: + # Monomer models use mean pLDDT for model ranking. + confidence_metrics['ranking_confidence'] = np.mean( + confidence_metrics['plddt']) + + return confidence_metrics + + +class RunModel: + """Container for JAX model.""" + + def __init__(self, + config: ml_collections.ConfigDict, + params: Optional[Mapping[str, Mapping[str, jax.Array]]] = None): + self.config = config + self.params = params + self.multimer_mode = config.model.global_config.multimer_mode + + if self.multimer_mode: + def _forward_fn(batch): + model = modules_multimer.AlphaFold(self.config.model) + return model( + batch, + is_training=False) + else: + def _forward_fn(batch): + model = modules.AlphaFold(self.config.model) + return model( + batch, + is_training=False, + compute_loss=False, + ensemble_representations=True) + + self.apply = jax.jit(hk.transform(_forward_fn).apply) + self.init = jax.jit(hk.transform(_forward_fn).init) + + def init_params(self, feat: features.FeatureDict, random_seed: int = 0): + """Initializes the model parameters. + + If none were provided when this class was instantiated then the parameters + are randomly initialized. + + Args: + feat: A dictionary of NumPy feature arrays as output by + RunModel.process_features. + random_seed: A random seed to use to initialize the parameters if none + were set when this class was initialized. + """ + if not self.params: + # Init params randomly. + rng = jax.random.PRNGKey(random_seed) + self.params = hk.data_structures.to_mutable_dict( + self.init(rng, feat)) + logging.warning('Initialized parameters randomly') + + def process_features( + self, + raw_features: Union[tf.train.Example, features.FeatureDict], + random_seed: int) -> features.FeatureDict: + """Processes features to prepare for feeding them into the model. + + Args: + raw_features: The output of the data pipeline either as a dict of NumPy + arrays or as a tf.train.Example. + random_seed: The random seed to use when processing the features. + + Returns: + A dict of NumPy feature arrays suitable for feeding into the model. + """ + + if self.multimer_mode: + return raw_features + + # Single-chain mode. + if isinstance(raw_features, dict): + return features.np_example_to_features( + np_example=raw_features, + config=self.config, + random_seed=random_seed) + else: + return features.tf_example_to_features( + tf_example=raw_features, + config=self.config, + random_seed=random_seed) + + def eval_shape(self, feat: features.FeatureDict) -> jax.ShapeDtypeStruct: + self.init_params(feat) + logging.info('Running eval_shape with shape(feat) = %s', + tree.map_structure(lambda x: x.shape, feat)) + shape = jax.eval_shape(self.apply, self.params, jax.random.PRNGKey(0), feat) + logging.info('Output shape was %s', shape) + return shape + + def predict(self, + feat: features.FeatureDict, + random_seed: int, + ) -> Mapping[str, Any]: + """Makes a prediction by inferencing the model on the provided features. + + Args: + feat: A dictionary of NumPy feature arrays as output by + RunModel.process_features. + random_seed: The random seed to use when running the model. In the + multimer model this controls the MSA sampling. + + Returns: + A dictionary of model outputs. + """ + self.init_params(feat) + logging.info('Running predict with shape(feat) = %s', + tree.map_structure(lambda x: x.shape, feat)) + result = self.apply(self.params, jax.random.PRNGKey(random_seed), feat) + + # This block is to ensure benchmark timings are accurate. Some blocking is + # already happening when computing get_confidence_metrics, and this ensures + # all outputs are blocked on. + jax.tree_map(lambda x: x.block_until_ready(), result) + result.update( + get_confidence_metrics(result, multimer_mode=self.multimer_mode)) + logging.info('Output shape was %s', + tree.map_structure(lambda x: x.shape, result)) + return result diff --git a/alphafold/model/modules.py b/alphafold/model/modules.py new file mode 100644 index 0000000000000000000000000000000000000000..554c078c06e58d4baef9b2d96124ea93ab1ba837 --- /dev/null +++ b/alphafold/model/modules.py @@ -0,0 +1,2195 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Modules and code used in the core part of AlphaFold. + +The structure generation code is in 'folding.py'. +""" +import functools +from alphafold.common import residue_constants +from alphafold.model import all_atom +from alphafold.model import common_modules +from alphafold.model import folding +from alphafold.model import layer_stack +from alphafold.model import lddt +from alphafold.model import mapping +from alphafold.model import prng +from alphafold.model import quat_affine +from alphafold.model import utils +import haiku as hk +import jax +import jax.numpy as jnp + + +_SOFTMAX_MASK = -1e9 + + +def softmax_cross_entropy(logits, labels): + """Computes softmax cross entropy given logits and one-hot class labels.""" + loss = -jnp.sum(labels * jax.nn.log_softmax(logits), axis=-1) + return jnp.asarray(loss) + + +def sigmoid_cross_entropy(logits, labels): + """Computes sigmoid cross entropy given logits and multiple class labels.""" + log_p = jax.nn.log_sigmoid(logits) + # log(1 - sigmoid(x)) = log_sigmoid(-x), the latter is more numerically stable + log_not_p = jax.nn.log_sigmoid(-logits) + loss = -labels * log_p - (1. - labels) * log_not_p + return jnp.asarray(loss) + + +def apply_dropout(*, tensor, safe_key, rate, is_training, broadcast_dim=None): + """Applies dropout to a tensor.""" + if is_training and rate != 0.0: + shape = list(tensor.shape) + if broadcast_dim is not None: + shape[broadcast_dim] = 1 + keep_rate = 1.0 - rate + keep = jax.random.bernoulli(safe_key.get(), keep_rate, shape=shape) + return keep * tensor / keep_rate + else: + return tensor + + +def dropout_wrapper(module, + input_act, + mask, + safe_key, + global_config, + output_act=None, + is_training=True, + **kwargs): + """Applies module + dropout + residual update.""" + if output_act is None: + output_act = input_act + + gc = global_config + residual = module(input_act, mask, is_training=is_training, **kwargs) + dropout_rate = 0.0 if gc.deterministic else module.config.dropout_rate + + # Will override `is_training` to True if want to use dropout. + should_apply_dropout = True if gc.eval_dropout else is_training + + if module.config.shared_dropout: + if module.config.orientation == 'per_row': + broadcast_dim = 0 + else: + broadcast_dim = 1 + else: + broadcast_dim = None + + residual = apply_dropout(tensor=residual, + safe_key=safe_key, + rate=dropout_rate, + is_training=should_apply_dropout, + broadcast_dim=broadcast_dim) + + new_act = output_act + residual + + return new_act + + +def create_extra_msa_feature(batch): + """Expand extra_msa into 1hot and concat with other extra msa features. + + We do this as late as possible as the one_hot extra msa can be very large. + + Arguments: + batch: a dictionary with the following keys: + * 'extra_msa': [N_extra_seq, N_res] MSA that wasn't selected as a cluster + centre. Note, that this is not one-hot encoded. + * 'extra_has_deletion': [N_extra_seq, N_res] Whether there is a deletion to + the left of each position in the extra MSA. + * 'extra_deletion_value': [N_extra_seq, N_res] The number of deletions to + the left of each position in the extra MSA. + + Returns: + Concatenated tensor of extra MSA features. + """ + # 23 = 20 amino acids + 'X' for unknown + gap + bert mask + msa_1hot = jax.nn.one_hot(batch['extra_msa'], 23) + msa_feat = [msa_1hot, + jnp.expand_dims(batch['extra_has_deletion'], axis=-1), + jnp.expand_dims(batch['extra_deletion_value'], axis=-1)] + return jnp.concatenate(msa_feat, axis=-1) + + +class AlphaFoldIteration(hk.Module): + """A single recycling iteration of AlphaFold architecture. + + Computes ensembled (averaged) representations from the provided features. + These representations are then passed to the various heads + that have been requested by the configuration file. Each head also returns a + loss which is combined as a weighted sum to produce the total loss. + + Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 3-22 + """ + + def __init__(self, config, global_config, name='alphafold_iteration'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, + ensembled_batch, + non_ensembled_batch, + is_training, + compute_loss=False, + ensemble_representations=False, + return_representations=False): + + num_ensemble = jnp.asarray(ensembled_batch['seq_length'].shape[0]) + + if not ensemble_representations: + assert ensembled_batch['seq_length'].shape[0] == 1 + + def slice_batch(i): + b = {k: v[i] for k, v in ensembled_batch.items()} + b.update(non_ensembled_batch) + return b + + # Compute representations for each batch element and average. + evoformer_module = EmbeddingsAndEvoformer( + self.config.embeddings_and_evoformer, self.global_config) + batch0 = slice_batch(0) + representations = evoformer_module(batch0, is_training) + + # MSA representations are not ensembled so + # we don't pass tensor into the loop. + msa_representation = representations['msa'] + del representations['msa'] + + # Average the representations (except MSA) over the batch dimension. + if ensemble_representations: + def body(x): + """Add one element to the representations ensemble.""" + i, current_representations = x + feats = slice_batch(i) + representations_update = evoformer_module( + feats, is_training) + + new_representations = {} + for k in current_representations: + new_representations[k] = ( + current_representations[k] + representations_update[k]) + return i+1, new_representations + + if hk.running_init(): + # When initializing the Haiku module, run one iteration of the + # while_loop to initialize the Haiku modules used in `body`. + _, representations = body((1, representations)) + else: + _, representations = hk.while_loop( + lambda x: x[0] < num_ensemble, + body, + (1, representations)) + + for k in representations: + if k != 'msa': + representations[k] /= num_ensemble.astype(representations[k].dtype) + + representations['msa'] = msa_representation + batch = batch0 # We are not ensembled from here on. + + heads = {} + for head_name, head_config in sorted(self.config.heads.items()): + if not head_config.weight: + continue # Do not instantiate zero-weight heads. + + head_factory = { + 'masked_msa': MaskedMsaHead, + 'distogram': DistogramHead, + 'structure_module': functools.partial( + folding.StructureModule, compute_loss=compute_loss), + 'predicted_lddt': PredictedLDDTHead, + 'predicted_aligned_error': PredictedAlignedErrorHead, + 'experimentally_resolved': ExperimentallyResolvedHead, + }[head_name] + heads[head_name] = (head_config, + head_factory(head_config, self.global_config)) + + total_loss = 0. + ret = {} + ret['representations'] = representations + + def loss(module, head_config, ret, name, filter_ret=True): + if filter_ret: + value = ret[name] + else: + value = ret + loss_output = module.loss(value, batch) + ret[name].update(loss_output) + loss = head_config.weight * ret[name]['loss'] + return loss + + for name, (head_config, module) in heads.items(): + # Skip PredictedLDDTHead and PredictedAlignedErrorHead until + # StructureModule is executed. + if name in ('predicted_lddt', 'predicted_aligned_error'): + continue + else: + ret[name] = module(representations, batch, is_training) + if 'representations' in ret[name]: + # Extra representations from the head. Used by the structure module + # to provide activations for the PredictedLDDTHead. + representations.update(ret[name].pop('representations')) + if compute_loss: + total_loss += loss(module, head_config, ret, name) + + if self.config.heads.get('predicted_lddt.weight', 0.0): + # Add PredictedLDDTHead after StructureModule executes. + name = 'predicted_lddt' + # Feed all previous results to give access to structure_module result. + head_config, module = heads[name] + ret[name] = module(representations, batch, is_training) + if compute_loss: + total_loss += loss(module, head_config, ret, name, filter_ret=False) + + if ('predicted_aligned_error' in self.config.heads + and self.config.heads.get('predicted_aligned_error.weight', 0.0)): + # Add PredictedAlignedErrorHead after StructureModule executes. + name = 'predicted_aligned_error' + # Feed all previous results to give access to structure_module result. + head_config, module = heads[name] + ret[name] = module(representations, batch, is_training) + if compute_loss: + total_loss += loss(module, head_config, ret, name, filter_ret=False) + + if compute_loss: + return ret, total_loss + else: + return ret + + +class AlphaFold(hk.Module): + """AlphaFold model with recycling. + + Jumper et al. (2021) Suppl. Alg. 2 "Inference" + """ + + def __init__(self, config, name='alphafold'): + super().__init__(name=name) + self.config = config + self.global_config = config.global_config + + def __call__( + self, + batch, + is_training, + compute_loss=False, + ensemble_representations=False, + return_representations=False): + """Run the AlphaFold model. + + Arguments: + batch: Dictionary with inputs to the AlphaFold model. + is_training: Whether the system is in training or inference mode. + compute_loss: Whether to compute losses (requires extra features + to be present in the batch and knowing the true structure). + ensemble_representations: Whether to use ensembling of representations. + return_representations: Whether to also return the intermediate + representations. + + Returns: + When compute_loss is True: + a tuple of loss and output of AlphaFoldIteration. + When compute_loss is False: + just output of AlphaFoldIteration. + + The output of AlphaFoldIteration is a nested dictionary containing + predictions from the various heads. + """ + + impl = AlphaFoldIteration(self.config, self.global_config) + batch_size, num_residues = batch['aatype'].shape + + def get_prev(ret): + new_prev = { + 'prev_pos': + ret['structure_module']['final_atom_positions'], + 'prev_msa_first_row': ret['representations']['msa_first_row'], + 'prev_pair': ret['representations']['pair'], + } + return jax.tree_map(jax.lax.stop_gradient, new_prev) + + def do_call(prev, + recycle_idx, + compute_loss=compute_loss): + if self.config.resample_msa_in_recycling: + num_ensemble = batch_size // (self.config.num_recycle + 1) + def slice_recycle_idx(x): + start = recycle_idx * num_ensemble + size = num_ensemble + return jax.lax.dynamic_slice_in_dim(x, start, size, axis=0) + ensembled_batch = jax.tree_map(slice_recycle_idx, batch) + else: + num_ensemble = batch_size + ensembled_batch = batch + + non_ensembled_batch = jax.tree_map(lambda x: x, prev) + + return impl( + ensembled_batch=ensembled_batch, + non_ensembled_batch=non_ensembled_batch, + is_training=is_training, + compute_loss=compute_loss, + ensemble_representations=ensemble_representations) + + prev = {} + emb_config = self.config.embeddings_and_evoformer + if emb_config.recycle_pos: + prev['prev_pos'] = jnp.zeros( + [num_residues, residue_constants.atom_type_num, 3]) + if emb_config.recycle_features: + prev['prev_msa_first_row'] = jnp.zeros( + [num_residues, emb_config.msa_channel]) + prev['prev_pair'] = jnp.zeros( + [num_residues, num_residues, emb_config.pair_channel]) + + if self.config.num_recycle: + if 'num_iter_recycling' in batch: + # Training time: num_iter_recycling is in batch. + # The value for each ensemble batch is the same, so arbitrarily taking + # 0-th. + num_iter = batch['num_iter_recycling'][0] + + # Add insurance that we will not run more + # recyclings than the model is configured to run. + num_iter = jnp.minimum(num_iter, self.config.num_recycle) + else: + # Eval mode or tests: use the maximum number of iterations. + num_iter = self.config.num_recycle + + body = lambda x: (x[0] + 1, # pylint: disable=g-long-lambda + get_prev(do_call(x[1], recycle_idx=x[0], + compute_loss=False))) + if hk.running_init(): + # When initializing the Haiku module, run one iteration of the + # while_loop to initialize the Haiku modules used in `body`. + _, prev = body((0, prev)) + else: + _, prev = hk.while_loop( + lambda x: x[0] < num_iter, + body, + (0, prev)) + else: + num_iter = 0 + + ret = do_call(prev=prev, recycle_idx=num_iter) + if compute_loss: + ret = ret[0], [ret[1]] + + if not return_representations: + del (ret[0] if compute_loss else ret)['representations'] # pytype: disable=unsupported-operands + return ret + + +class TemplatePairStack(hk.Module): + """Pair stack for the templates. + + Jumper et al. (2021) Suppl. Alg. 16 "TemplatePairStack" + """ + + def __init__(self, config, global_config, name='template_pair_stack'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, pair_act, pair_mask, is_training, safe_key=None): + """Builds TemplatePairStack module. + + Arguments: + pair_act: Pair activations for single template, shape [N_res, N_res, c_t]. + pair_mask: Pair mask, shape [N_res, N_res]. + is_training: Whether the module is in training mode. + safe_key: Safe key object encapsulating the random number generation key. + + Returns: + Updated pair_act, shape [N_res, N_res, c_t]. + """ + + if safe_key is None: + safe_key = prng.SafeKey(hk.next_rng_key()) + + gc = self.global_config + c = self.config + + if not c.num_block: + return pair_act + + def block(x): + """One block of the template pair stack.""" + pair_act, safe_key = x + + dropout_wrapper_fn = functools.partial( + dropout_wrapper, is_training=is_training, global_config=gc) + + safe_key, *sub_keys = safe_key.split(6) + sub_keys = iter(sub_keys) + + pair_act = dropout_wrapper_fn( + TriangleAttention(c.triangle_attention_starting_node, gc, + name='triangle_attention_starting_node'), + pair_act, + pair_mask, + next(sub_keys)) + pair_act = dropout_wrapper_fn( + TriangleAttention(c.triangle_attention_ending_node, gc, + name='triangle_attention_ending_node'), + pair_act, + pair_mask, + next(sub_keys)) + pair_act = dropout_wrapper_fn( + TriangleMultiplication(c.triangle_multiplication_outgoing, gc, + name='triangle_multiplication_outgoing'), + pair_act, + pair_mask, + next(sub_keys)) + pair_act = dropout_wrapper_fn( + TriangleMultiplication(c.triangle_multiplication_incoming, gc, + name='triangle_multiplication_incoming'), + pair_act, + pair_mask, + next(sub_keys)) + pair_act = dropout_wrapper_fn( + Transition(c.pair_transition, gc, name='pair_transition'), + pair_act, + pair_mask, + next(sub_keys)) + + return pair_act, safe_key + + if gc.use_remat: + block = hk.remat(block) + + res_stack = layer_stack.layer_stack(c.num_block)(block) + pair_act, safe_key = res_stack((pair_act, safe_key)) + return pair_act + + +class Transition(hk.Module): + """Transition layer. + + Jumper et al. (2021) Suppl. Alg. 9 "MSATransition" + Jumper et al. (2021) Suppl. Alg. 15 "PairTransition" + """ + + def __init__(self, config, global_config, name='transition_block'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, act, mask, is_training=True): + """Builds Transition module. + + Arguments: + act: A tensor of queries of size [batch_size, N_res, N_channel]. + mask: A tensor denoting the mask of size [batch_size, N_res]. + is_training: Whether the module is in training mode. + + Returns: + A float32 tensor of size [batch_size, N_res, N_channel]. + """ + _, _, nc = act.shape + + num_intermediate = int(nc * self.config.num_intermediate_factor) + mask = jnp.expand_dims(mask, axis=-1) + + act = common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='input_layer_norm')( + act) + + transition_module = hk.Sequential([ + common_modules.Linear( + num_intermediate, + initializer='relu', + name='transition1'), jax.nn.relu, + common_modules.Linear( + nc, + initializer=utils.final_init(self.global_config), + name='transition2') + ]) + + act = mapping.inference_subbatch( + transition_module, + self.global_config.subbatch_size, + batched_args=[act], + nonbatched_args=[], + low_memory=not is_training) + + return act + + +def glorot_uniform(): + return hk.initializers.VarianceScaling(scale=1.0, + mode='fan_avg', + distribution='uniform') + + +class Attention(hk.Module): + """Multihead attention.""" + + def __init__(self, config, global_config, output_dim, name='attention'): + super().__init__(name=name) + + self.config = config + self.global_config = global_config + self.output_dim = output_dim + + def __call__(self, q_data, m_data, mask, nonbatched_bias=None): + """Builds Attention module. + + Arguments: + q_data: A tensor of queries, shape [batch_size, N_queries, q_channels]. + m_data: A tensor of memories from which the keys and values are + projected, shape [batch_size, N_keys, m_channels]. + mask: A mask for the attention, shape [batch_size, N_queries, N_keys]. + nonbatched_bias: Shared bias, shape [N_queries, N_keys]. + + Returns: + A float32 tensor of shape [batch_size, N_queries, output_dim]. + """ + # Sensible default for when the config keys are missing + key_dim = self.config.get('key_dim', int(q_data.shape[-1])) + value_dim = self.config.get('value_dim', int(m_data.shape[-1])) + num_head = self.config.num_head + assert key_dim % num_head == 0 + assert value_dim % num_head == 0 + key_dim = key_dim // num_head + value_dim = value_dim // num_head + + q_weights = hk.get_parameter( + 'query_w', shape=(q_data.shape[-1], num_head, key_dim), + dtype=q_data.dtype, + init=glorot_uniform()) + k_weights = hk.get_parameter( + 'key_w', shape=(m_data.shape[-1], num_head, key_dim), + dtype=q_data.dtype, + init=glorot_uniform()) + v_weights = hk.get_parameter( + 'value_w', shape=(m_data.shape[-1], num_head, value_dim), + dtype=q_data.dtype, + init=glorot_uniform()) + + q = jnp.einsum('bqa,ahc->bqhc', q_data, q_weights) * key_dim**(-0.5) + k = jnp.einsum('bka,ahc->bkhc', m_data, k_weights) + v = jnp.einsum('bka,ahc->bkhc', m_data, v_weights) + logits = jnp.einsum('bqhc,bkhc->bhqk', q, k) + if nonbatched_bias is not None: + logits += jnp.expand_dims(nonbatched_bias, axis=0) + logits = jnp.where(mask, logits, _SOFTMAX_MASK) + weights = utils.stable_softmax(logits) + weighted_avg = jnp.einsum('bhqk,bkhc->bqhc', weights, v) + + if self.global_config.zero_init: + init = hk.initializers.Constant(0.0) + else: + init = glorot_uniform() + + if self.config.gating: + gating_weights = hk.get_parameter( + 'gating_w', + shape=(q_data.shape[-1], num_head, value_dim), + dtype=q_data.dtype, + init=hk.initializers.Constant(0.0)) + gating_bias = hk.get_parameter( + 'gating_b', + shape=(num_head, value_dim), + dtype=q_data.dtype, + init=hk.initializers.Constant(1.0)) + + gate_values = jnp.einsum('bqc, chv->bqhv', q_data, + gating_weights) + gating_bias + + gate_values = jax.nn.sigmoid(gate_values) + + weighted_avg *= gate_values + + o_weights = hk.get_parameter( + 'output_w', shape=(num_head, value_dim, self.output_dim), + dtype=q_data.dtype, + init=init) + o_bias = hk.get_parameter( + 'output_b', shape=(self.output_dim,), + dtype=q_data.dtype, + init=hk.initializers.Constant(0.0)) + + output = jnp.einsum('bqhc,hco->bqo', weighted_avg, o_weights) + o_bias + + return output + + +class GlobalAttention(hk.Module): + """Global attention. + + Jumper et al. (2021) Suppl. Alg. 19 "MSAColumnGlobalAttention" lines 2-7 + """ + + def __init__(self, config, global_config, output_dim, name='attention'): + super().__init__(name=name) + + self.config = config + self.global_config = global_config + self.output_dim = output_dim + + def __call__(self, q_data, m_data, q_mask): + """Builds GlobalAttention module. + + Arguments: + q_data: A tensor of queries with size [batch_size, N_queries, + q_channels] + m_data: A tensor of memories from which the keys and values + projected. Size [batch_size, N_keys, m_channels] + q_mask: A binary mask for q_data with zeros in the padded sequence + elements and ones otherwise. Size [batch_size, N_queries, q_channels] + (or broadcastable to this shape). + + Returns: + A float32 tensor of size [batch_size, N_queries, output_dim]. + """ + # Sensible default for when the config keys are missing + key_dim = self.config.get('key_dim', int(q_data.shape[-1])) + value_dim = self.config.get('value_dim', int(m_data.shape[-1])) + num_head = self.config.num_head + assert key_dim % num_head == 0 + assert value_dim % num_head == 0 + key_dim = key_dim // num_head + value_dim = value_dim // num_head + + q_weights = hk.get_parameter( + 'query_w', shape=(q_data.shape[-1], num_head, key_dim), + dtype=q_data.dtype, + init=glorot_uniform()) + k_weights = hk.get_parameter( + 'key_w', shape=(m_data.shape[-1], key_dim), + dtype=q_data.dtype, + init=glorot_uniform()) + v_weights = hk.get_parameter( + 'value_w', shape=(m_data.shape[-1], value_dim), + dtype=q_data.dtype, + init=glorot_uniform()) + + v = jnp.einsum('bka,ac->bkc', m_data, v_weights) + + q_avg = utils.mask_mean(q_mask, q_data, axis=1) + + q = jnp.einsum('ba,ahc->bhc', q_avg, q_weights) * key_dim**(-0.5) + k = jnp.einsum('bka,ac->bkc', m_data, k_weights) + bias = q_mask[:, None, :, 0] + logits = jnp.einsum('bhc,bkc->bhk', q, k) + logits = jnp.where(bias, logits, _SOFTMAX_MASK) + weights = utils.stable_softmax(logits) + weighted_avg = jnp.einsum('bhk,bkc->bhc', weights, v) + + if self.global_config.zero_init: + init = hk.initializers.Constant(0.0) + else: + init = glorot_uniform() + + o_weights = hk.get_parameter( + 'output_w', shape=(num_head, value_dim, self.output_dim), + dtype=q_data.dtype, + init=init) + o_bias = hk.get_parameter( + 'output_b', shape=(self.output_dim,), + dtype=q_data.dtype, + init=hk.initializers.Constant(0.0)) + + if self.config.gating: + gating_weights = hk.get_parameter( + 'gating_w', + shape=(q_data.shape[-1], num_head, value_dim), + dtype=q_data.dtype, + init=hk.initializers.Constant(0.0)) + gating_bias = hk.get_parameter( + 'gating_b', + shape=(num_head, value_dim), + dtype=q_data.dtype, + init=hk.initializers.Constant(1.0)) + + gate_values = jnp.einsum('bqc, chv->bqhv', q_data, gating_weights) + gate_values = jax.nn.sigmoid(gate_values + gating_bias) + weighted_avg = weighted_avg[:, None] * gate_values + output = jnp.einsum('bqhc,hco->bqo', weighted_avg, o_weights) + o_bias + else: + output = jnp.einsum('bhc,hco->bo', weighted_avg, o_weights) + o_bias + output = output[:, None] + return output + + +class MSARowAttentionWithPairBias(hk.Module): + """MSA per-row attention biased by the pair representation. + + Jumper et al. (2021) Suppl. Alg. 7 "MSARowAttentionWithPairBias" + """ + + def __init__(self, config, global_config, + name='msa_row_attention_with_pair_bias'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, + msa_act, + msa_mask, + pair_act, + is_training=False): + """Builds MSARowAttentionWithPairBias module. + + Arguments: + msa_act: [N_seq, N_res, c_m] MSA representation. + msa_mask: [N_seq, N_res] mask of non-padded regions. + pair_act: [N_res, N_res, c_z] pair representation. + is_training: Whether the module is in training mode. + + Returns: + Update to msa_act, shape [N_seq, N_res, c_m]. + """ + c = self.config + + assert len(msa_act.shape) == 3 + assert len(msa_mask.shape) == 2 + assert c.orientation == 'per_row' + + mask = msa_mask[:, None, None, :] + assert len(mask.shape) == 4 + + msa_act = common_modules.LayerNorm( + axis=[-1], create_scale=True, create_offset=True, name='query_norm')( + msa_act) + + pair_act = common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='feat_2d_norm')( + pair_act) + + init_factor = 1. / jnp.sqrt(int(pair_act.shape[-1])) + weights = hk.get_parameter( + 'feat_2d_weights', + shape=(pair_act.shape[-1], c.num_head), + dtype=msa_act.dtype, + init=hk.initializers.RandomNormal(stddev=init_factor)) + nonbatched_bias = jnp.einsum('qkc,ch->hqk', pair_act, weights) + + attn_mod = Attention( + c, self.global_config, msa_act.shape[-1]) + msa_act = mapping.inference_subbatch( + attn_mod, + self.global_config.subbatch_size, + batched_args=[msa_act, msa_act, mask], + nonbatched_args=[nonbatched_bias], + low_memory=not is_training) + + return msa_act + + +class MSAColumnAttention(hk.Module): + """MSA per-column attention. + + Jumper et al. (2021) Suppl. Alg. 8 "MSAColumnAttention" + """ + + def __init__(self, config, global_config, name='msa_column_attention'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, + msa_act, + msa_mask, + is_training=False): + """Builds MSAColumnAttention module. + + Arguments: + msa_act: [N_seq, N_res, c_m] MSA representation. + msa_mask: [N_seq, N_res] mask of non-padded regions. + is_training: Whether the module is in training mode. + + Returns: + Update to msa_act, shape [N_seq, N_res, c_m] + """ + c = self.config + + assert len(msa_act.shape) == 3 + assert len(msa_mask.shape) == 2 + assert c.orientation == 'per_column' + + msa_act = jnp.swapaxes(msa_act, -2, -3) + msa_mask = jnp.swapaxes(msa_mask, -1, -2) + + mask = msa_mask[:, None, None, :] + assert len(mask.shape) == 4 + + msa_act = common_modules.LayerNorm( + axis=[-1], create_scale=True, create_offset=True, name='query_norm')( + msa_act) + + attn_mod = Attention( + c, self.global_config, msa_act.shape[-1]) + msa_act = mapping.inference_subbatch( + attn_mod, + self.global_config.subbatch_size, + batched_args=[msa_act, msa_act, mask], + nonbatched_args=[], + low_memory=not is_training) + + msa_act = jnp.swapaxes(msa_act, -2, -3) + + return msa_act + + +class MSAColumnGlobalAttention(hk.Module): + """MSA per-column global attention. + + Jumper et al. (2021) Suppl. Alg. 19 "MSAColumnGlobalAttention" + """ + + def __init__(self, config, global_config, name='msa_column_global_attention'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, + msa_act, + msa_mask, + is_training=False): + """Builds MSAColumnGlobalAttention module. + + Arguments: + msa_act: [N_seq, N_res, c_m] MSA representation. + msa_mask: [N_seq, N_res] mask of non-padded regions. + is_training: Whether the module is in training mode. + + Returns: + Update to msa_act, shape [N_seq, N_res, c_m]. + """ + c = self.config + + assert len(msa_act.shape) == 3 + assert len(msa_mask.shape) == 2 + assert c.orientation == 'per_column' + + msa_act = jnp.swapaxes(msa_act, -2, -3) + msa_mask = jnp.swapaxes(msa_mask, -1, -2) + + msa_act = common_modules.LayerNorm( + axis=[-1], create_scale=True, create_offset=True, name='query_norm')( + msa_act) + + attn_mod = GlobalAttention( + c, self.global_config, msa_act.shape[-1], + name='attention') + # [N_seq, N_res, 1] + msa_mask = jnp.expand_dims(msa_mask, axis=-1) + msa_act = mapping.inference_subbatch( + attn_mod, + self.global_config.subbatch_size, + batched_args=[msa_act, msa_act, msa_mask], + nonbatched_args=[], + low_memory=not is_training) + + msa_act = jnp.swapaxes(msa_act, -2, -3) + + return msa_act + + +class TriangleAttention(hk.Module): + """Triangle Attention. + + Jumper et al. (2021) Suppl. Alg. 13 "TriangleAttentionStartingNode" + Jumper et al. (2021) Suppl. Alg. 14 "TriangleAttentionEndingNode" + """ + + def __init__(self, config, global_config, name='triangle_attention'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, pair_act, pair_mask, is_training=False): + """Builds TriangleAttention module. + + Arguments: + pair_act: [N_res, N_res, c_z] pair activations tensor + pair_mask: [N_res, N_res] mask of non-padded regions in the tensor. + is_training: Whether the module is in training mode. + + Returns: + Update to pair_act, shape [N_res, N_res, c_z]. + """ + c = self.config + + assert len(pair_act.shape) == 3 + assert len(pair_mask.shape) == 2 + assert c.orientation in ['per_row', 'per_column'] + + if c.orientation == 'per_column': + pair_act = jnp.swapaxes(pair_act, -2, -3) + pair_mask = jnp.swapaxes(pair_mask, -1, -2) + + mask = pair_mask[:, None, None, :] + assert len(mask.shape) == 4 + + pair_act = common_modules.LayerNorm( + axis=[-1], create_scale=True, create_offset=True, name='query_norm')( + pair_act) + + init_factor = 1. / jnp.sqrt(int(pair_act.shape[-1])) + weights = hk.get_parameter( + 'feat_2d_weights', + shape=(pair_act.shape[-1], c.num_head), + dtype=pair_act.dtype, + init=hk.initializers.RandomNormal(stddev=init_factor)) + nonbatched_bias = jnp.einsum('qkc,ch->hqk', pair_act, weights) + + attn_mod = Attention( + c, self.global_config, pair_act.shape[-1]) + pair_act = mapping.inference_subbatch( + attn_mod, + self.global_config.subbatch_size, + batched_args=[pair_act, pair_act, mask], + nonbatched_args=[nonbatched_bias], + low_memory=not is_training) + + if c.orientation == 'per_column': + pair_act = jnp.swapaxes(pair_act, -2, -3) + + return pair_act + + +class MaskedMsaHead(hk.Module): + """Head to predict MSA at the masked locations. + + The MaskedMsaHead employs a BERT-style objective to reconstruct a masked + version of the full MSA, based on a linear projection of + the MSA representation. + Jumper et al. (2021) Suppl. Sec. 1.9.9 "Masked MSA prediction" + """ + + def __init__(self, config, global_config, name='masked_msa_head'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + if global_config.multimer_mode: + self.num_output = len(residue_constants.restypes_with_x_and_gap) + else: + self.num_output = config.num_output + + def __call__(self, representations, batch, is_training): + """Builds MaskedMsaHead module. + + Arguments: + representations: Dictionary of representations, must contain: + * 'msa': MSA representation, shape [N_seq, N_res, c_m]. + batch: Batch, unused. + is_training: Whether the module is in training mode. + + Returns: + Dictionary containing: + * 'logits': logits of shape [N_seq, N_res, N_aatype] with + (unnormalized) log probabilies of predicted aatype at position. + """ + del batch + logits = common_modules.Linear( + self.num_output, + initializer=utils.final_init(self.global_config), + name='logits')( + representations['msa']) + return dict(logits=logits) + + def loss(self, value, batch): + errors = softmax_cross_entropy( + labels=jax.nn.one_hot(batch['true_msa'], num_classes=self.num_output), + logits=value['logits']) + loss = (jnp.sum(errors * batch['bert_mask'], axis=(-2, -1)) / + (1e-8 + jnp.sum(batch['bert_mask'], axis=(-2, -1)))) + return {'loss': loss} + + +class PredictedLDDTHead(hk.Module): + """Head to predict the per-residue LDDT to be used as a confidence measure. + + Jumper et al. (2021) Suppl. Sec. 1.9.6 "Model confidence prediction (pLDDT)" + Jumper et al. (2021) Suppl. Alg. 29 "predictPerResidueLDDT_Ca" + """ + + def __init__(self, config, global_config, name='predicted_lddt_head'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, representations, batch, is_training): + """Builds PredictedLDDTHead module. + + Arguments: + representations: Dictionary of representations, must contain: + * 'structure_module': Single representation from the structure module, + shape [N_res, c_s]. + batch: Batch, unused. + is_training: Whether the module is in training mode. + + Returns: + Dictionary containing : + * 'logits': logits of shape [N_res, N_bins] with + (unnormalized) log probabilies of binned predicted lDDT. + """ + act = representations['structure_module'] + + act = common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='input_layer_norm')( + act) + + act = common_modules.Linear( + self.config.num_channels, + initializer='relu', + name='act_0')( + act) + act = jax.nn.relu(act) + + act = common_modules.Linear( + self.config.num_channels, + initializer='relu', + name='act_1')( + act) + act = jax.nn.relu(act) + + logits = common_modules.Linear( + self.config.num_bins, + initializer=utils.final_init(self.global_config), + name='logits')( + act) + # Shape (batch_size, num_res, num_bins) + return dict(logits=logits) + + def loss(self, value, batch): + # Shape (num_res, 37, 3) + pred_all_atom_pos = value['structure_module']['final_atom_positions'] + # Shape (num_res, 37, 3) + true_all_atom_pos = batch['all_atom_positions'] + # Shape (num_res, 37) + all_atom_mask = batch['all_atom_mask'] + + # Shape (num_res,) + lddt_ca = lddt.lddt( + # Shape (batch_size, num_res, 3) + predicted_points=pred_all_atom_pos[None, :, 1, :], + # Shape (batch_size, num_res, 3) + true_points=true_all_atom_pos[None, :, 1, :], + # Shape (batch_size, num_res, 1) + true_points_mask=all_atom_mask[None, :, 1:2].astype(jnp.float32), + cutoff=15., + per_residue=True) + lddt_ca = jax.lax.stop_gradient(lddt_ca) + + num_bins = self.config.num_bins + bin_index = jnp.floor(lddt_ca * num_bins).astype(jnp.int32) + + # protect against out of range for lddt_ca == 1 + bin_index = jnp.minimum(bin_index, num_bins - 1) + lddt_ca_one_hot = jax.nn.one_hot(bin_index, num_classes=num_bins) + + # Shape (num_res, num_channel) + logits = value['predicted_lddt']['logits'] + errors = softmax_cross_entropy(labels=lddt_ca_one_hot, logits=logits) + + # Shape (num_res,) + mask_ca = all_atom_mask[:, residue_constants.atom_order['CA']] + mask_ca = mask_ca.astype(jnp.float32) + loss = jnp.sum(errors * mask_ca) / (jnp.sum(mask_ca) + 1e-8) + + if self.config.filter_by_resolution: + # NMR & distillation have resolution = 0 + loss *= ((batch['resolution'] >= self.config.min_resolution) + & (batch['resolution'] <= self.config.max_resolution)).astype( + jnp.float32) + + output = {'loss': loss} + return output + + +class PredictedAlignedErrorHead(hk.Module): + """Head to predict the distance errors in the backbone alignment frames. + + Can be used to compute predicted TM-Score. + Jumper et al. (2021) Suppl. Sec. 1.9.7 "TM-score prediction" + """ + + def __init__(self, config, global_config, + name='predicted_aligned_error_head'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, representations, batch, is_training): + """Builds PredictedAlignedErrorHead module. + + Arguments: + representations: Dictionary of representations, must contain: + * 'pair': pair representation, shape [N_res, N_res, c_z]. + batch: Batch, unused. + is_training: Whether the module is in training mode. + + Returns: + Dictionary containing: + * logits: logits for aligned error, shape [N_res, N_res, N_bins]. + * bin_breaks: array containing bin breaks, shape [N_bins - 1]. + """ + + act = representations['pair'] + + # Shape (num_res, num_res, num_bins) + logits = common_modules.Linear( + self.config.num_bins, + initializer=utils.final_init(self.global_config), + name='logits')(act) + # Shape (num_bins,) + breaks = jnp.linspace( + 0., self.config.max_error_bin, self.config.num_bins - 1) + return dict(logits=logits, breaks=breaks) + + def loss(self, value, batch): + # Shape (num_res, 7) + predicted_affine = quat_affine.QuatAffine.from_tensor( + value['structure_module']['final_affines']) + # Shape (num_res, 7) + true_affine = quat_affine.QuatAffine.from_tensor( + batch['backbone_affine_tensor']) + # Shape (num_res) + mask = batch['backbone_affine_mask'] + # Shape (num_res, num_res) + square_mask = mask[:, None] * mask[None, :] + num_bins = self.config.num_bins + # (1, num_bins - 1) + breaks = value['predicted_aligned_error']['breaks'] + # (1, num_bins) + logits = value['predicted_aligned_error']['logits'] + + # Compute the squared error for each alignment. + def _local_frame_points(affine): + points = [jnp.expand_dims(x, axis=-2) for x in affine.translation] + return affine.invert_point(points, extra_dims=1) + error_dist2_xyz = [ + jnp.square(a - b) + for a, b in zip(_local_frame_points(predicted_affine), + _local_frame_points(true_affine))] + error_dist2 = sum(error_dist2_xyz) + # Shape (num_res, num_res) + # First num_res are alignment frames, second num_res are the residues. + error_dist2 = jax.lax.stop_gradient(error_dist2) + + sq_breaks = jnp.square(breaks) + true_bins = jnp.sum(( + error_dist2[..., None] > sq_breaks).astype(jnp.int32), axis=-1) + + errors = softmax_cross_entropy( + labels=jax.nn.one_hot(true_bins, num_bins, axis=-1), logits=logits) + + loss = (jnp.sum(errors * square_mask, axis=(-2, -1)) / + (1e-8 + jnp.sum(square_mask, axis=(-2, -1)))) + + if self.config.filter_by_resolution: + # NMR & distillation have resolution = 0 + loss *= ((batch['resolution'] >= self.config.min_resolution) + & (batch['resolution'] <= self.config.max_resolution)).astype( + jnp.float32) + + output = {'loss': loss} + return output + + +class ExperimentallyResolvedHead(hk.Module): + """Predicts if an atom is experimentally resolved in a high-res structure. + + Only trained on high-resolution X-ray crystals & cryo-EM. + Jumper et al. (2021) Suppl. Sec. 1.9.10 '"Experimentally resolved" prediction' + """ + + def __init__(self, config, global_config, + name='experimentally_resolved_head'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, representations, batch, is_training): + """Builds ExperimentallyResolvedHead module. + + Arguments: + representations: Dictionary of representations, must contain: + * 'single': Single representation, shape [N_res, c_s]. + batch: Batch, unused. + is_training: Whether the module is in training mode. + + Returns: + Dictionary containing: + * 'logits': logits of shape [N_res, 37], + log probability that an atom is resolved in atom37 representation, + can be converted to probability by applying sigmoid. + """ + logits = common_modules.Linear( + 37, # atom_exists.shape[-1] + initializer=utils.final_init(self.global_config), + name='logits')(representations['single']) + return dict(logits=logits) + + def loss(self, value, batch): + logits = value['logits'] + assert len(logits.shape) == 2 + + # Does the atom appear in the amino acid? + atom_exists = batch['atom37_atom_exists'] + # Is the atom resolved in the experiment? Subset of atom_exists, + # *except for OXT* + all_atom_mask = batch['all_atom_mask'].astype(jnp.float32) + + xent = sigmoid_cross_entropy(labels=all_atom_mask, logits=logits) + loss = jnp.sum(xent * atom_exists) / (1e-8 + jnp.sum(atom_exists)) + + if self.config.filter_by_resolution: + # NMR & distillation examples have resolution = 0. + loss *= ((batch['resolution'] >= self.config.min_resolution) + & (batch['resolution'] <= self.config.max_resolution)).astype( + jnp.float32) + + output = {'loss': loss} + return output + + +def _layer_norm(axis=-1, name='layer_norm'): + return common_modules.LayerNorm( + axis=axis, + create_scale=True, + create_offset=True, + eps=1e-5, + use_fast_variance=True, + scale_init=hk.initializers.Constant(1.), + offset_init=hk.initializers.Constant(0.), + param_axis=axis, + name=name) + + +class TriangleMultiplication(hk.Module): + """Triangle multiplication layer ("outgoing" or "incoming"). + + Jumper et al. (2021) Suppl. Alg. 11 "TriangleMultiplicationOutgoing" + Jumper et al. (2021) Suppl. Alg. 12 "TriangleMultiplicationIncoming" + """ + + def __init__(self, config, global_config, name='triangle_multiplication'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, left_act, left_mask, is_training=True): + """Builds TriangleMultiplication module. + + Arguments: + left_act: Pair activations, shape [N_res, N_res, c_z] + left_mask: Pair mask, shape [N_res, N_res]. + is_training: Whether the module is in training mode. + + Returns: + Outputs, same shape/type as left_act. + """ + del is_training + + if self.config.fuse_projection_weights: + return self._fused_triangle_multiplication(left_act, left_mask) + else: + return self._triangle_multiplication(left_act, left_mask) + + @hk.transparent + def _triangle_multiplication(self, left_act, left_mask): + """Implementation of TriangleMultiplication used in AF2 and AF-M<2.3.""" + c = self.config + gc = self.global_config + + mask = left_mask[..., None] + + act = common_modules.LayerNorm(axis=[-1], create_scale=True, create_offset=True, + name='layer_norm_input')(left_act) + input_act = act + + left_projection = common_modules.Linear( + c.num_intermediate_channel, + name='left_projection') + left_proj_act = mask * left_projection(act) + + right_projection = common_modules.Linear( + c.num_intermediate_channel, + name='right_projection') + right_proj_act = mask * right_projection(act) + + left_gate_values = jax.nn.sigmoid(common_modules.Linear( + c.num_intermediate_channel, + bias_init=1., + initializer=utils.final_init(gc), + name='left_gate')(act)) + + right_gate_values = jax.nn.sigmoid(common_modules.Linear( + c.num_intermediate_channel, + bias_init=1., + initializer=utils.final_init(gc), + name='right_gate')(act)) + + left_proj_act *= left_gate_values + right_proj_act *= right_gate_values + + # "Outgoing" edges equation: 'ikc,jkc->ijc' + # "Incoming" edges equation: 'kjc,kic->ijc' + # Note on the Suppl. Alg. 11 & 12 notation: + # For the "outgoing" edges, a = left_proj_act and b = right_proj_act + # For the "incoming" edges, it's swapped: + # b = left_proj_act and a = right_proj_act + act = jnp.einsum(c.equation, left_proj_act, right_proj_act) + + act = common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='center_layer_norm')( + act) + + output_channel = int(input_act.shape[-1]) + + act = common_modules.Linear( + output_channel, + initializer=utils.final_init(gc), + name='output_projection')(act) + + gate_values = jax.nn.sigmoid(common_modules.Linear( + output_channel, + bias_init=1., + initializer=utils.final_init(gc), + name='gating_linear')(input_act)) + act *= gate_values + + return act + + @hk.transparent + def _fused_triangle_multiplication(self, left_act, left_mask): + """TriangleMultiplication with fused projection weights.""" + mask = left_mask[..., None] + c = self.config + gc = self.global_config + + left_act = _layer_norm(axis=-1, name='left_norm_input')(left_act) + + # Both left and right projections are fused into projection. + projection = common_modules.Linear( + 2*c.num_intermediate_channel, name='projection') + proj_act = mask * projection(left_act) + + # Both left + right gate are fused into gate_values. + gate_values = common_modules.Linear( + 2 * c.num_intermediate_channel, + name='gate', + bias_init=1., + initializer=utils.final_init(gc))(left_act) + proj_act *= jax.nn.sigmoid(gate_values) + + left_proj_act = proj_act[:, :, :c.num_intermediate_channel] + right_proj_act = proj_act[:, :, c.num_intermediate_channel:] + act = jnp.einsum(c.equation, left_proj_act, right_proj_act) + + act = _layer_norm(axis=-1, name='center_norm')(act) + + output_channel = int(left_act.shape[-1]) + + act = common_modules.Linear( + output_channel, + initializer=utils.final_init(gc), + name='output_projection')(act) + + gate_values = common_modules.Linear( + output_channel, + bias_init=1., + initializer=utils.final_init(gc), + name='gating_linear')(left_act) + act *= jax.nn.sigmoid(gate_values) + + return act + + +class DistogramHead(hk.Module): + """Head to predict a distogram. + + Jumper et al. (2021) Suppl. Sec. 1.9.8 "Distogram prediction" + """ + + def __init__(self, config, global_config, name='distogram_head'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, representations, batch, is_training): + """Builds DistogramHead module. + + Arguments: + representations: Dictionary of representations, must contain: + * 'pair': pair representation, shape [N_res, N_res, c_z]. + batch: Batch, unused. + is_training: Whether the module is in training mode. + + Returns: + Dictionary containing: + * logits: logits for distogram, shape [N_res, N_res, N_bins]. + * bin_breaks: array containing bin breaks, shape [N_bins - 1,]. + """ + half_logits = common_modules.Linear( + self.config.num_bins, + initializer=utils.final_init(self.global_config), + name='half_logits')( + representations['pair']) + + logits = half_logits + jnp.swapaxes(half_logits, -2, -3) + breaks = jnp.linspace(self.config.first_break, self.config.last_break, + self.config.num_bins - 1) + + return dict(logits=logits, bin_edges=breaks) + + def loss(self, value, batch): + return _distogram_log_loss(value['logits'], value['bin_edges'], + batch, self.config.num_bins) + + +def _distogram_log_loss(logits, bin_edges, batch, num_bins): + """Log loss of a distogram.""" + + assert len(logits.shape) == 3 + positions = batch['pseudo_beta'] + mask = batch['pseudo_beta_mask'] + + assert positions.shape[-1] == 3 + + sq_breaks = jnp.square(bin_edges) + + dist2 = jnp.sum( + jnp.square( + jnp.expand_dims(positions, axis=-2) - + jnp.expand_dims(positions, axis=-3)), + axis=-1, + keepdims=True) + + true_bins = jnp.sum(dist2 > sq_breaks, axis=-1) + + errors = softmax_cross_entropy( + labels=jax.nn.one_hot(true_bins, num_bins), logits=logits) + + square_mask = jnp.expand_dims(mask, axis=-2) * jnp.expand_dims(mask, axis=-1) + + avg_error = ( + jnp.sum(errors * square_mask, axis=(-2, -1)) / + (1e-6 + jnp.sum(square_mask, axis=(-2, -1)))) + dist2 = dist2[..., 0] + return dict(loss=avg_error, true_dist=jnp.sqrt(1e-6 + dist2)) + + +class OuterProductMean(hk.Module): + """Computes mean outer product. + + Jumper et al. (2021) Suppl. Alg. 10 "OuterProductMean" + """ + + def __init__(self, + config, + global_config, + num_output_channel, + name='outer_product_mean'): + super().__init__(name=name) + self.global_config = global_config + self.config = config + self.num_output_channel = num_output_channel + + def __call__(self, act, mask, is_training=True): + """Builds OuterProductMean module. + + Arguments: + act: MSA representation, shape [N_seq, N_res, c_m]. + mask: MSA mask, shape [N_seq, N_res]. + is_training: Whether the module is in training mode. + + Returns: + Update to pair representation, shape [N_res, N_res, c_z]. + """ + gc = self.global_config + c = self.config + + mask = mask[..., None] + act = common_modules.LayerNorm([-1], True, True, name='layer_norm_input')(act) + + left_act = mask * common_modules.Linear( + c.num_outer_channel, + initializer='linear', + name='left_projection')( + act) + + right_act = mask * common_modules.Linear( + c.num_outer_channel, + initializer='linear', + name='right_projection')( + act) + + if gc.zero_init: + init_w = hk.initializers.Constant(0.0) + else: + init_w = hk.initializers.VarianceScaling(scale=2., mode='fan_in') + + output_w = hk.get_parameter( + 'output_w', + shape=(c.num_outer_channel, c.num_outer_channel, + self.num_output_channel), + dtype=act.dtype, + init=init_w) + output_b = hk.get_parameter( + 'output_b', shape=(self.num_output_channel,), + dtype=act.dtype, + init=hk.initializers.Constant(0.0)) + + def compute_chunk(left_act): + # This is equivalent to + # + # act = jnp.einsum('abc,ade->dceb', left_act, right_act) + # act = jnp.einsum('dceb,cef->bdf', act, output_w) + output_b + # + # but faster. + left_act = jnp.transpose(left_act, [0, 2, 1]) + act = jnp.einsum('acb,ade->dceb', left_act, right_act) + act = jnp.einsum('dceb,cef->dbf', act, output_w) + output_b + return jnp.transpose(act, [1, 0, 2]) + + act = mapping.inference_subbatch( + compute_chunk, + c.chunk_size, + batched_args=[left_act], + nonbatched_args=[], + low_memory=True, + input_subbatch_dim=1, + output_subbatch_dim=0) + + epsilon = 1e-3 + norm = jnp.einsum('abc,adc->bdc', mask, mask) + act /= epsilon + norm + + return act + + +def dgram_from_positions(positions, num_bins, min_bin, max_bin): + """Compute distogram from amino acid positions. + + Arguments: + positions: [N_res, 3] Position coordinates. + num_bins: The number of bins in the distogram. + min_bin: The left edge of the first bin. + max_bin: The left edge of the final bin. The final bin catches + everything larger than `max_bin`. + + Returns: + Distogram with the specified number of bins. + """ + + def squared_difference(x, y): + return jnp.square(x - y) + + lower_breaks = jnp.linspace(min_bin, max_bin, num_bins) + lower_breaks = jnp.square(lower_breaks) + upper_breaks = jnp.concatenate([lower_breaks[1:], + jnp.array([1e8], dtype=jnp.float32)], axis=-1) + dist2 = jnp.sum( + squared_difference( + jnp.expand_dims(positions, axis=-2), + jnp.expand_dims(positions, axis=-3)), + axis=-1, keepdims=True) + + dgram = ((dist2 > lower_breaks).astype(jnp.float32) * + (dist2 < upper_breaks).astype(jnp.float32)) + return dgram + + +def pseudo_beta_fn(aatype, all_atom_positions, all_atom_masks): + """Create pseudo beta features.""" + + is_gly = jnp.equal(aatype, residue_constants.restype_order['G']) + ca_idx = residue_constants.atom_order['CA'] + cb_idx = residue_constants.atom_order['CB'] + pseudo_beta = jnp.where( + jnp.tile(is_gly[..., None], [1] * len(is_gly.shape) + [3]), + all_atom_positions[..., ca_idx, :], + all_atom_positions[..., cb_idx, :]) + + if all_atom_masks is not None: + pseudo_beta_mask = jnp.where( + is_gly, all_atom_masks[..., ca_idx], all_atom_masks[..., cb_idx]) + pseudo_beta_mask = pseudo_beta_mask.astype(jnp.float32) + return pseudo_beta, pseudo_beta_mask + else: + return pseudo_beta + + +class EvoformerIteration(hk.Module): + """Single iteration (block) of Evoformer stack. + + Jumper et al. (2021) Suppl. Alg. 6 "EvoformerStack" lines 2-10 + """ + + def __init__(self, config, global_config, is_extra_msa, + name='evoformer_iteration'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + self.is_extra_msa = is_extra_msa + + def __call__(self, activations, masks, is_training=True, safe_key=None): + """Builds EvoformerIteration module. + + Arguments: + activations: Dictionary containing activations: + * 'msa': MSA activations, shape [N_seq, N_res, c_m]. + * 'pair': pair activations, shape [N_res, N_res, c_z]. + masks: Dictionary of masks: + * 'msa': MSA mask, shape [N_seq, N_res]. + * 'pair': pair mask, shape [N_res, N_res]. + is_training: Whether the module is in training mode. + safe_key: prng.SafeKey encapsulating rng key. + + Returns: + Outputs, same shape/type as act. + """ + c = self.config + gc = self.global_config + + msa_act, pair_act = activations['msa'], activations['pair'] + + if safe_key is None: + safe_key = prng.SafeKey(hk.next_rng_key()) + + msa_mask, pair_mask = masks['msa'], masks['pair'] + + dropout_wrapper_fn = functools.partial( + dropout_wrapper, + is_training=is_training, + global_config=gc) + + safe_key, *sub_keys = safe_key.split(10) + sub_keys = iter(sub_keys) + + outer_module = OuterProductMean( + config=c.outer_product_mean, + global_config=self.global_config, + num_output_channel=int(pair_act.shape[-1]), + name='outer_product_mean') + if c.outer_product_mean.first: + pair_act = dropout_wrapper_fn( + outer_module, + msa_act, + msa_mask, + safe_key=next(sub_keys), + output_act=pair_act) + + msa_act = dropout_wrapper_fn( + MSARowAttentionWithPairBias( + c.msa_row_attention_with_pair_bias, gc, + name='msa_row_attention_with_pair_bias'), + msa_act, + msa_mask, + safe_key=next(sub_keys), + pair_act=pair_act) + + if not self.is_extra_msa: + attn_mod = MSAColumnAttention( + c.msa_column_attention, gc, name='msa_column_attention') + else: + attn_mod = MSAColumnGlobalAttention( + c.msa_column_attention, gc, name='msa_column_global_attention') + msa_act = dropout_wrapper_fn( + attn_mod, + msa_act, + msa_mask, + safe_key=next(sub_keys)) + + msa_act = dropout_wrapper_fn( + Transition(c.msa_transition, gc, name='msa_transition'), + msa_act, + msa_mask, + safe_key=next(sub_keys)) + + if not c.outer_product_mean.first: + pair_act = dropout_wrapper_fn( + outer_module, + msa_act, + msa_mask, + safe_key=next(sub_keys), + output_act=pair_act) + + pair_act = dropout_wrapper_fn( + TriangleMultiplication(c.triangle_multiplication_outgoing, gc, + name='triangle_multiplication_outgoing'), + pair_act, + pair_mask, + safe_key=next(sub_keys)) + pair_act = dropout_wrapper_fn( + TriangleMultiplication(c.triangle_multiplication_incoming, gc, + name='triangle_multiplication_incoming'), + pair_act, + pair_mask, + safe_key=next(sub_keys)) + + pair_act = dropout_wrapper_fn( + TriangleAttention(c.triangle_attention_starting_node, gc, + name='triangle_attention_starting_node'), + pair_act, + pair_mask, + safe_key=next(sub_keys)) + pair_act = dropout_wrapper_fn( + TriangleAttention(c.triangle_attention_ending_node, gc, + name='triangle_attention_ending_node'), + pair_act, + pair_mask, + safe_key=next(sub_keys)) + + pair_act = dropout_wrapper_fn( + Transition(c.pair_transition, gc, name='pair_transition'), + pair_act, + pair_mask, + safe_key=next(sub_keys)) + + return {'msa': msa_act, 'pair': pair_act} + + +class EmbeddingsAndEvoformer(hk.Module): + """Embeds the input data and runs Evoformer. + + Produces the MSA, single and pair representations. + Jumper et al. (2021) Suppl. Alg. 2 "Inference" line 5-18 + """ + + def __init__(self, config, global_config, name='evoformer'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, batch, is_training, safe_key=None): + + c = self.config + gc = self.global_config + + if safe_key is None: + safe_key = prng.SafeKey(hk.next_rng_key()) + + # Embed clustered MSA. + # Jumper et al. (2021) Suppl. Alg. 2 "Inference" line 5 + # Jumper et al. (2021) Suppl. Alg. 3 "InputEmbedder" + preprocess_1d = common_modules.Linear( + c.msa_channel, name='preprocess_1d')( + batch['target_feat']) + + preprocess_msa = common_modules.Linear( + c.msa_channel, name='preprocess_msa')( + batch['msa_feat']) + + msa_activations = jnp.expand_dims(preprocess_1d, axis=0) + preprocess_msa + + left_single = common_modules.Linear( + c.pair_channel, name='left_single')( + batch['target_feat']) + right_single = common_modules.Linear( + c.pair_channel, name='right_single')( + batch['target_feat']) + pair_activations = left_single[:, None] + right_single[None] + mask_2d = batch['seq_mask'][:, None] * batch['seq_mask'][None, :] + + # Inject previous outputs for recycling. + # Jumper et al. (2021) Suppl. Alg. 2 "Inference" line 6 + # Jumper et al. (2021) Suppl. Alg. 32 "RecyclingEmbedder" + if c.recycle_pos: + prev_pseudo_beta = pseudo_beta_fn( + batch['aatype'], batch['prev_pos'], None) + dgram = dgram_from_positions(prev_pseudo_beta, **self.config.prev_pos) + pair_activations += common_modules.Linear( + c.pair_channel, name='prev_pos_linear')( + dgram) + + if c.recycle_features: + prev_msa_first_row = common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='prev_msa_first_row_norm')( + batch['prev_msa_first_row']) + msa_activations = msa_activations.at[0].add(prev_msa_first_row) + + pair_activations += common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='prev_pair_norm')( + batch['prev_pair']) + + # Relative position encoding. + # Jumper et al. (2021) Suppl. Alg. 4 "relpos" + # Jumper et al. (2021) Suppl. Alg. 5 "one_hot" + if c.max_relative_feature: + # Add one-hot-encoded clipped residue distances to the pair activations. + pos = batch['residue_index'] + offset = pos[:, None] - pos[None, :] + rel_pos = jax.nn.one_hot( + jnp.clip( + offset + c.max_relative_feature, + a_min=0, + a_max=2 * c.max_relative_feature), + 2 * c.max_relative_feature + 1) + pair_activations += common_modules.Linear( + c.pair_channel, name='pair_activiations')( + rel_pos) + + # Embed templates into the pair activations. + # Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 9-13 + if c.template.enabled: + template_batch = {k: batch[k] for k in batch if k.startswith('template_')} + template_pair_representation = TemplateEmbedding(c.template, gc)( + pair_activations, + template_batch, + mask_2d, + is_training=is_training) + + pair_activations += template_pair_representation + + # Embed extra MSA features. + # Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 14-16 + extra_msa_feat = create_extra_msa_feature(batch) + extra_msa_activations = common_modules.Linear( + c.extra_msa_channel, + name='extra_msa_activations')( + extra_msa_feat) + + # Extra MSA Stack. + # Jumper et al. (2021) Suppl. Alg. 18 "ExtraMsaStack" + extra_msa_stack_input = { + 'msa': extra_msa_activations, + 'pair': pair_activations, + } + + extra_msa_stack_iteration = EvoformerIteration( + c.evoformer, gc, is_extra_msa=True, name='extra_msa_stack') + + def extra_msa_stack_fn(x): + act, safe_key = x + safe_key, safe_subkey = safe_key.split() + extra_evoformer_output = extra_msa_stack_iteration( + activations=act, + masks={ + 'msa': batch['extra_msa_mask'], + 'pair': mask_2d + }, + is_training=is_training, + safe_key=safe_subkey) + return (extra_evoformer_output, safe_key) + + if gc.use_remat: + extra_msa_stack_fn = hk.remat(extra_msa_stack_fn) + + extra_msa_stack = layer_stack.layer_stack( + c.extra_msa_stack_num_block)( + extra_msa_stack_fn) + extra_msa_output, safe_key = extra_msa_stack( + (extra_msa_stack_input, safe_key)) + + pair_activations = extra_msa_output['pair'] + + evoformer_input = { + 'msa': msa_activations, + 'pair': pair_activations, + } + + evoformer_masks = {'msa': batch['msa_mask'], 'pair': mask_2d} + + # Append num_templ rows to msa_activations with template embeddings. + # Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 7-8 + if c.template.enabled and c.template.embed_torsion_angles: + num_templ, num_res = batch['template_aatype'].shape + + # Embed the templates aatypes. + aatype_one_hot = jax.nn.one_hot(batch['template_aatype'], 22, axis=-1) + + # Embed the templates aatype, torsion angles and masks. + # Shape (templates, residues, msa_channels) + ret = all_atom.atom37_to_torsion_angles( + aatype=batch['template_aatype'], + all_atom_pos=batch['template_all_atom_positions'], + all_atom_mask=batch['template_all_atom_masks'], + # Ensure consistent behaviour during testing: + placeholder_for_undefined=not gc.zero_init) + + template_features = jnp.concatenate([ + aatype_one_hot, + jnp.reshape( + ret['torsion_angles_sin_cos'], [num_templ, num_res, 14]), + jnp.reshape( + ret['alt_torsion_angles_sin_cos'], [num_templ, num_res, 14]), + ret['torsion_angles_mask']], axis=-1) + + template_activations = common_modules.Linear( + c.msa_channel, + initializer='relu', + name='template_single_embedding')( + template_features) + template_activations = jax.nn.relu(template_activations) + template_activations = common_modules.Linear( + c.msa_channel, + initializer='relu', + name='template_projection')( + template_activations) + + # Concatenate the templates to the msa. + evoformer_input['msa'] = jnp.concatenate( + [evoformer_input['msa'], template_activations], axis=0) + # Concatenate templates masks to the msa masks. + # Use mask from the psi angle, as it only depends on the backbone atoms + # from a single residue. + torsion_angle_mask = ret['torsion_angles_mask'][:, :, 2] + torsion_angle_mask = torsion_angle_mask.astype( + evoformer_masks['msa'].dtype) + evoformer_masks['msa'] = jnp.concatenate( + [evoformer_masks['msa'], torsion_angle_mask], axis=0) + + # Main trunk of the network + # Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 17-18 + evoformer_iteration = EvoformerIteration( + c.evoformer, gc, is_extra_msa=False, name='evoformer_iteration') + + def evoformer_fn(x): + act, safe_key = x + safe_key, safe_subkey = safe_key.split() + evoformer_output = evoformer_iteration( + activations=act, + masks=evoformer_masks, + is_training=is_training, + safe_key=safe_subkey) + return (evoformer_output, safe_key) + + if gc.use_remat: + evoformer_fn = hk.remat(evoformer_fn) + + evoformer_stack = layer_stack.layer_stack(c.evoformer_num_block)( + evoformer_fn) + evoformer_output, safe_key = evoformer_stack( + (evoformer_input, safe_key)) + + msa_activations = evoformer_output['msa'] + pair_activations = evoformer_output['pair'] + + single_activations = common_modules.Linear( + c.seq_channel, name='single_activations')( + msa_activations[0]) + + num_sequences = batch['msa_feat'].shape[0] + output = { + 'single': single_activations, + 'pair': pair_activations, + # Crop away template rows such that they are not used in MaskedMsaHead. + 'msa': msa_activations[:num_sequences, :, :], + 'msa_first_row': msa_activations[0], + } + + return output + + +class SingleTemplateEmbedding(hk.Module): + """Embeds a single template. + + Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 9+11 + """ + + def __init__(self, config, global_config, name='single_template_embedding'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, query_embedding, batch, mask_2d, is_training): + """Build the single template embedding. + + Arguments: + query_embedding: Query pair representation, shape [N_res, N_res, c_z]. + batch: A batch of template features (note the template dimension has been + stripped out as this module only runs over a single template). + mask_2d: Padding mask (Note: this doesn't care if a template exists, + unlike the template_pseudo_beta_mask). + is_training: Whether the module is in training mode. + + Returns: + A template embedding [N_res, N_res, c_z]. + """ + assert mask_2d.dtype == query_embedding.dtype + dtype = query_embedding.dtype + num_res = batch['template_aatype'].shape[0] + num_channels = (self.config.template_pair_stack + .triangle_attention_ending_node.value_dim) + template_mask = batch['template_pseudo_beta_mask'] + template_mask_2d = template_mask[:, None] * template_mask[None, :] + template_mask_2d = template_mask_2d.astype(dtype) + + template_dgram = dgram_from_positions(batch['template_pseudo_beta'], + **self.config.dgram_features) + template_dgram = template_dgram.astype(dtype) + + to_concat = [template_dgram, template_mask_2d[:, :, None]] + + aatype = jax.nn.one_hot(batch['template_aatype'], 22, axis=-1, dtype=dtype) + + to_concat.append(jnp.tile(aatype[None, :, :], [num_res, 1, 1])) + to_concat.append(jnp.tile(aatype[:, None, :], [1, num_res, 1])) + + n, ca, c = [residue_constants.atom_order[a] for a in ('N', 'CA', 'C')] + rot, trans = quat_affine.make_transform_from_reference( + n_xyz=batch['template_all_atom_positions'][:, n], + ca_xyz=batch['template_all_atom_positions'][:, ca], + c_xyz=batch['template_all_atom_positions'][:, c]) + affines = quat_affine.QuatAffine( + quaternion=quat_affine.rot_to_quat(rot, unstack_inputs=True), + translation=trans, + rotation=rot, + unstack_inputs=True) + points = [jnp.expand_dims(x, axis=-2) for x in affines.translation] + affine_vec = affines.invert_point(points, extra_dims=1) + inv_distance_scalar = jax.lax.rsqrt( + 1e-6 + sum([jnp.square(x) for x in affine_vec])) + + # Backbone affine mask: whether the residue has C, CA, N + # (the template mask defined above only considers pseudo CB). + template_mask = ( + batch['template_all_atom_masks'][..., n] * + batch['template_all_atom_masks'][..., ca] * + batch['template_all_atom_masks'][..., c]) + template_mask_2d = template_mask[:, None] * template_mask[None, :] + + inv_distance_scalar *= template_mask_2d.astype(inv_distance_scalar.dtype) + + unit_vector = [(x * inv_distance_scalar)[..., None] for x in affine_vec] + + unit_vector = [x.astype(dtype) for x in unit_vector] + template_mask_2d = template_mask_2d.astype(dtype) + if not self.config.use_template_unit_vector: + unit_vector = [jnp.zeros_like(x) for x in unit_vector] + to_concat.extend(unit_vector) + + to_concat.append(template_mask_2d[..., None]) + + act = jnp.concatenate(to_concat, axis=-1) + + # Mask out non-template regions so we don't get arbitrary values in the + # distogram for these regions. + act *= template_mask_2d[..., None] + + # Jumper et al. (2021) Suppl. Alg. 2 "Inference" line 9 + act = common_modules.Linear( + num_channels, + initializer='relu', + name='embedding2d')( + act) + + # Jumper et al. (2021) Suppl. Alg. 2 "Inference" line 11 + act = TemplatePairStack( + self.config.template_pair_stack, self.global_config)( + act, mask_2d, is_training) + + act = common_modules.LayerNorm([-1], True, True, name='output_layer_norm')(act) + return act + + +class TemplateEmbedding(hk.Module): + """Embeds a set of templates. + + Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 9-12 + Jumper et al. (2021) Suppl. Alg. 17 "TemplatePointwiseAttention" + """ + + def __init__(self, config, global_config, name='template_embedding'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, query_embedding, template_batch, mask_2d, is_training): + """Build TemplateEmbedding module. + + Arguments: + query_embedding: Query pair representation, shape [N_res, N_res, c_z]. + template_batch: A batch of template features. + mask_2d: Padding mask (Note: this doesn't care if a template exists, + unlike the template_pseudo_beta_mask). + is_training: Whether the module is in training mode. + + Returns: + A template embedding [N_res, N_res, c_z]. + """ + + num_templates = template_batch['template_mask'].shape[0] + num_channels = (self.config.template_pair_stack + .triangle_attention_ending_node.value_dim) + num_res = query_embedding.shape[0] + + dtype = query_embedding.dtype + template_mask = template_batch['template_mask'] + template_mask = template_mask.astype(dtype) + + query_num_channels = query_embedding.shape[-1] + + # Make sure the weights are shared across templates by constructing the + # embedder here. + # Jumper et al. (2021) Suppl. Alg. 2 "Inference" lines 9-12 + template_embedder = SingleTemplateEmbedding(self.config, self.global_config) + + def map_fn(batch): + return template_embedder(query_embedding, batch, mask_2d, is_training) + + template_pair_representation = mapping.sharded_map(map_fn, in_axes=0)( + template_batch) + + # Cross attend from the query to the templates along the residue + # dimension by flattening everything else into the batch dimension. + # Jumper et al. (2021) Suppl. Alg. 17 "TemplatePointwiseAttention" + flat_query = jnp.reshape(query_embedding, + [num_res * num_res, 1, query_num_channels]) + + flat_templates = jnp.reshape( + jnp.transpose(template_pair_representation, [1, 2, 0, 3]), + [num_res * num_res, num_templates, num_channels]) + + mask = template_mask[None, None, None, :] + + template_pointwise_attention_module = Attention( + self.config.attention, self.global_config, query_num_channels) + nonbatched_args = [mask] + batched_args = [flat_query, flat_templates] + + embedding = mapping.inference_subbatch( + template_pointwise_attention_module, + self.config.subbatch_size, + batched_args=batched_args, + nonbatched_args=nonbatched_args, + low_memory=not is_training) + embedding = jnp.reshape(embedding, + [num_res, num_res, query_num_channels]) + + # No gradients if no templates. + embedding *= (jnp.sum(template_mask) > 0.).astype(embedding.dtype) + + return embedding diff --git a/alphafold/model/modules_multimer.py b/alphafold/model/modules_multimer.py new file mode 100644 index 0000000000000000000000000000000000000000..7d61bb50fca9fc99ccdf79737e595c3b5b84e9e8 --- /dev/null +++ b/alphafold/model/modules_multimer.py @@ -0,0 +1,1178 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Core modules, which have been refactored in AlphaFold-Multimer. + +The main difference is that MSA sampling pipeline is moved inside the JAX model +for easier implementation of recycling and ensembling. + +Lower-level modules up to EvoformerIteration are reused from modules.py. +""" + +import functools +from typing import Sequence + +from alphafold.common import residue_constants +from alphafold.model import all_atom_multimer +from alphafold.model import common_modules +from alphafold.model import folding_multimer +from alphafold.model import geometry +from alphafold.model import layer_stack +from alphafold.model import modules +from alphafold.model import prng +from alphafold.model import utils + +import haiku as hk +import jax +import jax.numpy as jnp +import numpy as np + + +def reduce_fn(x, mode): + if mode == 'none' or mode is None: + return jnp.asarray(x) + elif mode == 'sum': + return jnp.asarray(x).sum() + elif mode == 'mean': + return jnp.mean(jnp.asarray(x)) + else: + raise ValueError('Unsupported reduction option.') + + +def gumbel_noise(key: jnp.ndarray, shape: Sequence[int]) -> jnp.ndarray: + """Generate Gumbel Noise of given Shape. + + This generates samples from Gumbel(0, 1). + + Args: + key: Jax random number key. + shape: Shape of noise to return. + + Returns: + Gumbel noise of given shape. + """ + epsilon = 1e-6 + uniform = utils.padding_consistent_rng(jax.random.uniform) + uniform_noise = uniform( + key, shape=shape, dtype=jnp.float32, minval=0., maxval=1.) + gumbel = -jnp.log(-jnp.log(uniform_noise + epsilon) + epsilon) + return gumbel + + +def gumbel_max_sample(key: jnp.ndarray, logits: jnp.ndarray) -> jnp.ndarray: + """Samples from a probability distribution given by 'logits'. + + This uses Gumbel-max trick to implement the sampling in an efficient manner. + + Args: + key: prng key. + logits: Logarithm of probabilities to sample from, probabilities can be + unnormalized. + + Returns: + Sample from logprobs in one-hot form. + """ + z = gumbel_noise(key, logits.shape) + return jax.nn.one_hot( + jnp.argmax(logits + z, axis=-1), + logits.shape[-1], + dtype=logits.dtype) + + +def gumbel_argsort_sample_idx(key: jnp.ndarray, + logits: jnp.ndarray) -> jnp.ndarray: + """Samples with replacement from a distribution given by 'logits'. + + This uses Gumbel trick to implement the sampling an efficient manner. For a + distribution over k items this samples k times without replacement, so this + is effectively sampling a random permutation with probabilities over the + permutations derived from the logprobs. + + Args: + key: prng key. + logits: Logarithm of probabilities to sample from, probabilities can be + unnormalized. + + Returns: + Sample from logprobs in one-hot form. + """ + z = gumbel_noise(key, logits.shape) + # This construction is equivalent to jnp.argsort, but using a non stable sort, + # since stable sort's aren't supported by jax2tf. + axis = len(logits.shape) - 1 + iota = jax.lax.broadcasted_iota(jnp.int64, logits.shape, axis) + _, perm = jax.lax.sort_key_val( + logits + z, iota, dimension=-1, is_stable=False) + return perm[::-1] + + +def make_masked_msa(batch, key, config, epsilon=1e-6): + """Create data for BERT on raw MSA.""" + # Add a random amino acid uniformly. + random_aa = jnp.array([0.05] * 20 + [0., 0.], dtype=jnp.float32) + + categorical_probs = ( + config.uniform_prob * random_aa + + config.profile_prob * batch['msa_profile'] + + config.same_prob * jax.nn.one_hot(batch['msa'], 22)) + + # Put all remaining probability on [MASK] which is a new column. + pad_shapes = [[0, 0] for _ in range(len(categorical_probs.shape))] + pad_shapes[-1][1] = 1 + mask_prob = 1. - config.profile_prob - config.same_prob - config.uniform_prob + assert mask_prob >= 0. + categorical_probs = jnp.pad( + categorical_probs, pad_shapes, constant_values=mask_prob) + sh = batch['msa'].shape + key, mask_subkey, gumbel_subkey = key.split(3) + uniform = utils.padding_consistent_rng(jax.random.uniform) + mask_position = uniform(mask_subkey.get(), sh) < config.replace_fraction + mask_position *= batch['msa_mask'] + + logits = jnp.log(categorical_probs + epsilon) + bert_msa = gumbel_max_sample(gumbel_subkey.get(), logits) + bert_msa = jnp.where(mask_position, + jnp.argmax(bert_msa, axis=-1), batch['msa']) + bert_msa *= batch['msa_mask'] + + # Mix real and masked MSA. + if 'bert_mask' in batch: + batch['bert_mask'] *= mask_position.astype(jnp.float32) + else: + batch['bert_mask'] = mask_position.astype(jnp.float32) + batch['true_msa'] = batch['msa'] + batch['msa'] = bert_msa + + return batch + + +def nearest_neighbor_clusters(batch, gap_agreement_weight=0.): + """Assign each extra MSA sequence to its nearest neighbor in sampled MSA.""" + + # Determine how much weight we assign to each agreement. In theory, we could + # use a full blosum matrix here, but right now let's just down-weight gap + # agreement because it could be spurious. + # Never put weight on agreeing on BERT mask. + + weights = jnp.array( + [1.] * 21 + [gap_agreement_weight] + [0.], dtype=jnp.float32) + + msa_mask = batch['msa_mask'] + msa_one_hot = jax.nn.one_hot(batch['msa'], 23) + + extra_mask = batch['extra_msa_mask'] + extra_one_hot = jax.nn.one_hot(batch['extra_msa'], 23) + + msa_one_hot_masked = msa_mask[:, :, None] * msa_one_hot + extra_one_hot_masked = extra_mask[:, :, None] * extra_one_hot + + agreement = jnp.einsum('mrc, nrc->nm', extra_one_hot_masked, + weights * msa_one_hot_masked) + + cluster_assignment = jax.nn.softmax(1e3 * agreement, axis=0) + cluster_assignment *= jnp.einsum('mr, nr->mn', msa_mask, extra_mask) + + cluster_count = jnp.sum(cluster_assignment, axis=-1) + cluster_count += 1. # We always include the sequence itself. + + msa_sum = jnp.einsum('nm, mrc->nrc', cluster_assignment, extra_one_hot_masked) + msa_sum += msa_one_hot_masked + + cluster_profile = msa_sum / cluster_count[:, None, None] + + extra_deletion_matrix = batch['extra_deletion_matrix'] + deletion_matrix = batch['deletion_matrix'] + + del_sum = jnp.einsum('nm, mc->nc', cluster_assignment, + extra_mask * extra_deletion_matrix) + del_sum += deletion_matrix # Original sequence. + cluster_deletion_mean = del_sum / cluster_count[:, None] + + return cluster_profile, cluster_deletion_mean + + +def create_msa_feat(batch): + """Create and concatenate MSA features.""" + msa_1hot = jax.nn.one_hot(batch['msa'], 23) + deletion_matrix = batch['deletion_matrix'] + has_deletion = jnp.clip(deletion_matrix, 0., 1.)[..., None] + deletion_value = (jnp.arctan(deletion_matrix / 3.) * (2. / jnp.pi))[..., None] + + deletion_mean_value = (jnp.arctan(batch['cluster_deletion_mean'] / 3.) * + (2. / jnp.pi))[..., None] + + msa_feat = [ + msa_1hot, + has_deletion, + deletion_value, + batch['cluster_profile'], + deletion_mean_value + ] + + return jnp.concatenate(msa_feat, axis=-1) + + +def create_extra_msa_feature(batch, num_extra_msa): + """Expand extra_msa into 1hot and concat with other extra msa features. + + We do this as late as possible as the one_hot extra msa can be very large. + + Args: + batch: a dictionary with the following keys: + * 'extra_msa': [num_seq, num_res] MSA that wasn't selected as a cluster + centre. Note - This isn't one-hotted. + * 'extra_deletion_matrix': [num_seq, num_res] Number of deletions at given + position. + num_extra_msa: Number of extra msa to use. + + Returns: + Concatenated tensor of extra MSA features. + """ + # 23 = 20 amino acids + 'X' for unknown + gap + bert mask + extra_msa = batch['extra_msa'][:num_extra_msa] + deletion_matrix = batch['extra_deletion_matrix'][:num_extra_msa] + msa_1hot = jax.nn.one_hot(extra_msa, 23) + has_deletion = jnp.clip(deletion_matrix, 0., 1.)[..., None] + deletion_value = (jnp.arctan(deletion_matrix / 3.) * (2. / jnp.pi))[..., None] + extra_msa_mask = batch['extra_msa_mask'][:num_extra_msa] + return jnp.concatenate([msa_1hot, has_deletion, deletion_value], + axis=-1), extra_msa_mask + + +def sample_msa(key, batch, max_seq): + """Sample MSA randomly, remaining sequences are stored as `extra_*`. + + Args: + key: safe key for random number generation. + batch: batch to sample msa from. + max_seq: number of sequences to sample. + Returns: + Protein with sampled msa. + """ + # Sample uniformly among sequences with at least one non-masked position. + logits = (jnp.clip(jnp.sum(batch['msa_mask'], axis=-1), 0., 1.) - 1.) * 1e6 + # The cluster_bias_mask can be used to preserve the first row (target + # sequence) for each chain, for example. + if 'cluster_bias_mask' not in batch: + cluster_bias_mask = jnp.pad( + jnp.zeros(batch['msa'].shape[0] - 1), (1, 0), constant_values=1.) + else: + cluster_bias_mask = batch['cluster_bias_mask'] + + logits += cluster_bias_mask * 1e6 + index_order = gumbel_argsort_sample_idx(key.get(), logits) + sel_idx = index_order[:max_seq] + extra_idx = index_order[max_seq:] + + for k in ['msa', 'deletion_matrix', 'msa_mask', 'bert_mask']: + if k in batch: + batch['extra_' + k] = batch[k][extra_idx] + batch[k] = batch[k][sel_idx] + + return batch + + +def make_msa_profile(batch): + """Compute the MSA profile.""" + + # Compute the profile for every residue (over all MSA sequences). + return utils.mask_mean( + batch['msa_mask'][:, :, None], jax.nn.one_hot(batch['msa'], 22), axis=0) + + +class AlphaFoldIteration(hk.Module): + """A single recycling iteration of AlphaFold architecture. + + Computes ensembled (averaged) representations from the provided features. + These representations are then passed to the various heads + that have been requested by the configuration file. + """ + + def __init__(self, config, global_config, name='alphafold_iteration'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, + batch, + is_training, + return_representations=False, + safe_key=None): + + if is_training: + num_ensemble = np.asarray(self.config.num_ensemble_train) + else: + num_ensemble = np.asarray(self.config.num_ensemble_eval) + + # Compute representations for each MSA sample and average. + embedding_module = EmbeddingsAndEvoformer( + self.config.embeddings_and_evoformer, self.global_config) + repr_shape = hk.eval_shape( + lambda: embedding_module(batch, is_training)) + representations = { + k: jnp.zeros(v.shape, v.dtype) for (k, v) in repr_shape.items() + } + + def ensemble_body(x, unused_y): + """Add into representations ensemble.""" + del unused_y + representations, safe_key = x + safe_key, safe_subkey = safe_key.split() + representations_update = embedding_module( + batch, is_training, safe_key=safe_subkey) + + for k in representations: + if k not in {'msa', 'true_msa', 'bert_mask'}: + representations[k] += representations_update[k] * ( + 1. / num_ensemble).astype(representations[k].dtype) + else: + representations[k] = representations_update[k] + + return (representations, safe_key), None + + (representations, _), _ = hk.scan( + ensemble_body, (representations, safe_key), None, length=num_ensemble) + + self.representations = representations + self.batch = batch + self.heads = {} + for head_name, head_config in sorted(self.config.heads.items()): + if not head_config.weight: + continue # Do not instantiate zero-weight heads. + + head_factory = { + 'masked_msa': + modules.MaskedMsaHead, + 'distogram': + modules.DistogramHead, + 'structure_module': + folding_multimer.StructureModule, + 'predicted_aligned_error': + modules.PredictedAlignedErrorHead, + 'predicted_lddt': + modules.PredictedLDDTHead, + 'experimentally_resolved': + modules.ExperimentallyResolvedHead, + }[head_name] + self.heads[head_name] = (head_config, + head_factory(head_config, self.global_config)) + + structure_module_output = None + if 'entity_id' in batch and 'all_atom_positions' in batch: + _, fold_module = self.heads['structure_module'] + structure_module_output = fold_module(representations, batch, is_training) + + ret = {} + ret['representations'] = representations + + for name, (head_config, module) in self.heads.items(): + if name == 'structure_module' and structure_module_output is not None: + ret[name] = structure_module_output + representations['structure_module'] = structure_module_output.pop('act') + # Skip confidence heads until StructureModule is executed. + elif name in {'predicted_lddt', 'predicted_aligned_error', + 'experimentally_resolved'}: + continue + else: + ret[name] = module(representations, batch, is_training) + + # Add confidence heads after StructureModule is executed. + if self.config.heads.get('predicted_lddt.weight', 0.0): + name = 'predicted_lddt' + head_config, module = self.heads[name] + ret[name] = module(representations, batch, is_training) + + if self.config.heads.experimentally_resolved.weight: + name = 'experimentally_resolved' + head_config, module = self.heads[name] + ret[name] = module(representations, batch, is_training) + + if self.config.heads.get('predicted_aligned_error.weight', 0.0): + name = 'predicted_aligned_error' + head_config, module = self.heads[name] + ret[name] = module(representations, batch, is_training) + # Will be used for ipTM computation. + ret[name]['asym_id'] = batch['asym_id'] + + return ret + + +class AlphaFold(hk.Module): + """AlphaFold-Multimer model with recycling. + """ + + def __init__(self, config, name='alphafold'): + super().__init__(name=name) + self.config = config + self.global_config = config.global_config + + def __call__( + self, + batch, + is_training, + return_representations=False, + safe_key=None): + + c = self.config + impl = AlphaFoldIteration(c, self.global_config) + + if safe_key is None: + safe_key = prng.SafeKey(hk.next_rng_key()) + elif isinstance(safe_key, jnp.ndarray): + safe_key = prng.SafeKey(safe_key) + + assert isinstance(batch, dict) + num_res = batch['aatype'].shape[0] + + def get_prev(ret): + new_prev = { + 'prev_pos': + ret['structure_module']['final_atom_positions'], + 'prev_msa_first_row': ret['representations']['msa_first_row'], + 'prev_pair': ret['representations']['pair'], + } + return jax.tree_map(jax.lax.stop_gradient, new_prev) + + def apply_network(prev, safe_key): + recycled_batch = {**batch, **prev} + return impl( + batch=recycled_batch, + is_training=is_training, + safe_key=safe_key) + + prev = {} + emb_config = self.config.embeddings_and_evoformer + if emb_config.recycle_pos: + prev['prev_pos'] = jnp.zeros( + [num_res, residue_constants.atom_type_num, 3]) + if emb_config.recycle_features: + prev['prev_msa_first_row'] = jnp.zeros( + [num_res, emb_config.msa_channel]) + prev['prev_pair'] = jnp.zeros( + [num_res, num_res, emb_config.pair_channel]) + + if self.config.num_recycle: + if 'num_iter_recycling' in batch: + # Training time: num_iter_recycling is in batch. + # Value for each ensemble batch is the same, so arbitrarily taking 0-th. + num_iter = batch['num_iter_recycling'][0] + + # Add insurance that even when ensembling, we will not run more + # recyclings than the model is configured to run. + num_iter = jnp.minimum(num_iter, c.num_recycle) + else: + # Eval mode or tests: use the maximum number of iterations. + num_iter = c.num_recycle + + def distances(points): + """Compute all pairwise distances for a set of points.""" + return jnp.sqrt(jnp.sum((points[:, None] - points[None, :])**2, + axis=-1)) + + def recycle_body(x): + i, _, prev, safe_key = x + safe_key1, safe_key2 = safe_key.split() if c.resample_msa_in_recycling else safe_key.duplicate() # pylint: disable=line-too-long + ret = apply_network(prev=prev, safe_key=safe_key2) + return i+1, prev, get_prev(ret), safe_key1 + + def recycle_cond(x): + i, prev, next_in, _ = x + ca_idx = residue_constants.atom_order['CA'] + sq_diff = jnp.square(distances(prev['prev_pos'][:, ca_idx, :]) - + distances(next_in['prev_pos'][:, ca_idx, :])) + mask = batch['seq_mask'][:, None] * batch['seq_mask'][None, :] + sq_diff = utils.mask_mean(mask, sq_diff) + # Early stopping criteria based on criteria used in + # AF2Complex: https://www.nature.com/articles/s41467-022-29394-2 + diff = jnp.sqrt(sq_diff + 1e-8) # avoid bad numerics giving negatives + less_than_max_recycles = (i < num_iter) + has_exceeded_tolerance = ( + (i == 0) | (diff > c.recycle_early_stop_tolerance)) + return less_than_max_recycles & has_exceeded_tolerance + + if hk.running_init(): + num_recycles, _, prev, safe_key = recycle_body( + (0, prev, prev, safe_key)) + else: + num_recycles, _, prev, safe_key = hk.while_loop( + recycle_cond, + recycle_body, + (0, prev, prev, safe_key)) + else: + # No recycling. + num_recycles = 0 + + # Run extra iteration. + ret = apply_network(prev=prev, safe_key=safe_key) + + if not return_representations: + del ret['representations'] + ret['num_recycles'] = num_recycles + + return ret + + +class EmbeddingsAndEvoformer(hk.Module): + """Embeds the input data and runs Evoformer. + + Produces the MSA, single and pair representations. + """ + + def __init__(self, config, global_config, name='evoformer'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def _relative_encoding(self, batch): + """Add relative position encodings. + + For position (i, j), the value is (i-j) clipped to [-k, k] and one-hotted. + + When not using 'use_chain_relative' the residue indices are used as is, e.g. + for heteromers relative positions will be computed using the positions in + the corresponding chains. + + When using 'use_chain_relative' we add an extra bin that denotes + 'different chain'. Furthermore we also provide the relative chain index + (i.e. sym_id) clipped and one-hotted to the network. And an extra feature + which denotes whether they belong to the same chain type, i.e. it's 0 if + they are in different heteromer chains and 1 otherwise. + + Args: + batch: batch. + Returns: + Feature embedding using the features as described before. + """ + c = self.config + gc = self.global_config + rel_feats = [] + pos = batch['residue_index'] + asym_id = batch['asym_id'] + asym_id_same = jnp.equal(asym_id[:, None], asym_id[None, :]) + offset = pos[:, None] - pos[None, :] + dtype = jnp.bfloat16 if gc.bfloat16 else jnp.float32 + + clipped_offset = jnp.clip( + offset + c.max_relative_idx, a_min=0, a_max=2 * c.max_relative_idx) + + if c.use_chain_relative: + + final_offset = jnp.where(asym_id_same, clipped_offset, + (2 * c.max_relative_idx + 1) * + jnp.ones_like(clipped_offset)) + + rel_pos = jax.nn.one_hot(final_offset, 2 * c.max_relative_idx + 2) + + rel_feats.append(rel_pos) + + entity_id = batch['entity_id'] + entity_id_same = jnp.equal(entity_id[:, None], entity_id[None, :]) + rel_feats.append(entity_id_same.astype(rel_pos.dtype)[..., None]) + + sym_id = batch['sym_id'] + rel_sym_id = sym_id[:, None] - sym_id[None, :] + + max_rel_chain = c.max_relative_chain + + clipped_rel_chain = jnp.clip( + rel_sym_id + max_rel_chain, a_min=0, a_max=2 * max_rel_chain) + + final_rel_chain = jnp.where(entity_id_same, clipped_rel_chain, + (2 * max_rel_chain + 1) * + jnp.ones_like(clipped_rel_chain)) + rel_chain = jax.nn.one_hot(final_rel_chain, 2 * c.max_relative_chain + 2) + + rel_feats.append(rel_chain) + + else: + rel_pos = jax.nn.one_hot(clipped_offset, 2 * c.max_relative_idx + 1) + rel_feats.append(rel_pos) + + rel_feat = jnp.concatenate(rel_feats, axis=-1) + + rel_feat = rel_feat.astype(dtype) + return common_modules.Linear( + c.pair_channel, + name='position_activations')( + rel_feat) + + def __call__(self, batch, is_training, safe_key=None): + + c = self.config + gc = self.global_config + + batch = dict(batch) + dtype = jnp.bfloat16 if gc.bfloat16 else jnp.float32 + + if safe_key is None: + safe_key = prng.SafeKey(hk.next_rng_key()) + + output = {} + + batch['msa_profile'] = make_msa_profile(batch) + + with utils.bfloat16_context(): + target_feat = jax.nn.one_hot(batch['aatype'], 21).astype(dtype) + + preprocess_1d = common_modules.Linear( + c.msa_channel, name='preprocess_1d')( + target_feat) + + safe_key, sample_key, mask_key = safe_key.split(3) + batch = sample_msa(sample_key, batch, c.num_msa) + batch = make_masked_msa(batch, mask_key, c.masked_msa) + + (batch['cluster_profile'], + batch['cluster_deletion_mean']) = nearest_neighbor_clusters(batch) + + msa_feat = create_msa_feat(batch).astype(dtype) + + preprocess_msa = common_modules.Linear( + c.msa_channel, name='preprocess_msa')( + msa_feat) + msa_activations = jnp.expand_dims(preprocess_1d, axis=0) + preprocess_msa + + left_single = common_modules.Linear( + c.pair_channel, name='left_single')( + target_feat) + right_single = common_modules.Linear( + c.pair_channel, name='right_single')( + target_feat) + pair_activations = left_single[:, None] + right_single[None] + mask_2d = batch['seq_mask'][:, None] * batch['seq_mask'][None, :] + mask_2d = mask_2d.astype(dtype) + + if c.recycle_pos: + prev_pseudo_beta = modules.pseudo_beta_fn( + batch['aatype'], batch['prev_pos'], None) + + dgram = modules.dgram_from_positions( + prev_pseudo_beta, **self.config.prev_pos) + dgram = dgram.astype(dtype) + pair_activations += common_modules.Linear( + c.pair_channel, name='prev_pos_linear')( + dgram) + if c.recycle_features: + prev_msa_first_row = common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='prev_msa_first_row_norm')( + batch['prev_msa_first_row']).astype(dtype) + msa_activations = msa_activations.at[0].add(prev_msa_first_row) + + pair_activations += common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='prev_pair_norm')( + batch['prev_pair']).astype(dtype) + + if c.max_relative_idx: + pair_activations += self._relative_encoding(batch) + + if c.template.enabled: + template_module = TemplateEmbedding(c.template, gc) + template_batch = { + 'template_aatype': batch['template_aatype'], + 'template_all_atom_positions': batch['template_all_atom_positions'], + 'template_all_atom_mask': batch['template_all_atom_mask'] + } + # Construct a mask such that only intra-chain template features are + # computed, since all templates are for each chain individually. + multichain_mask = batch['asym_id'][:, None] == batch['asym_id'][None, :] + safe_key, safe_subkey = safe_key.split() + template_act = template_module( + query_embedding=pair_activations, + template_batch=template_batch, + padding_mask_2d=mask_2d, + multichain_mask_2d=multichain_mask, + is_training=is_training, + safe_key=safe_subkey) + pair_activations += template_act + + # Extra MSA stack. + (extra_msa_feat, + extra_msa_mask) = create_extra_msa_feature(batch, c.num_extra_msa) + extra_msa_activations = common_modules.Linear( + c.extra_msa_channel, + name='extra_msa_activations')( + extra_msa_feat).astype(dtype) + extra_msa_mask = extra_msa_mask.astype(dtype) + + extra_evoformer_input = { + 'msa': extra_msa_activations, + 'pair': pair_activations, + } + extra_masks = {'msa': extra_msa_mask, 'pair': mask_2d} + + extra_evoformer_iteration = modules.EvoformerIteration( + c.evoformer, gc, is_extra_msa=True, name='extra_msa_stack') + + def extra_evoformer_fn(x): + act, safe_key = x + safe_key, safe_subkey = safe_key.split() + extra_evoformer_output = extra_evoformer_iteration( + activations=act, + masks=extra_masks, + is_training=is_training, + safe_key=safe_subkey) + return (extra_evoformer_output, safe_key) + + if gc.use_remat: + extra_evoformer_fn = hk.remat(extra_evoformer_fn) + + safe_key, safe_subkey = safe_key.split() + extra_evoformer_stack = layer_stack.layer_stack( + c.extra_msa_stack_num_block)( + extra_evoformer_fn) + extra_evoformer_output, safe_key = extra_evoformer_stack( + (extra_evoformer_input, safe_subkey)) + + pair_activations = extra_evoformer_output['pair'] + + # Get the size of the MSA before potentially adding templates, so we + # can crop out the templates later. + num_msa_sequences = msa_activations.shape[0] + evoformer_input = { + 'msa': msa_activations, + 'pair': pair_activations, + } + evoformer_masks = { + 'msa': batch['msa_mask'].astype(dtype), + 'pair': mask_2d + } + if c.template.enabled: + template_features, template_masks = ( + template_embedding_1d( + batch=batch, num_channel=c.msa_channel, global_config=gc)) + + evoformer_input['msa'] = jnp.concatenate( + [evoformer_input['msa'], template_features], axis=0) + evoformer_masks['msa'] = jnp.concatenate( + [evoformer_masks['msa'], template_masks], axis=0) + evoformer_iteration = modules.EvoformerIteration( + c.evoformer, gc, is_extra_msa=False, name='evoformer_iteration') + + def evoformer_fn(x): + act, safe_key = x + safe_key, safe_subkey = safe_key.split() + evoformer_output = evoformer_iteration( + activations=act, + masks=evoformer_masks, + is_training=is_training, + safe_key=safe_subkey) + return (evoformer_output, safe_key) + + if gc.use_remat: + evoformer_fn = hk.remat(evoformer_fn) + + safe_key, safe_subkey = safe_key.split() + evoformer_stack = layer_stack.layer_stack(c.evoformer_num_block)( + evoformer_fn) + + def run_evoformer(evoformer_input): + evoformer_output, _ = evoformer_stack((evoformer_input, safe_subkey)) + return evoformer_output + + evoformer_output = run_evoformer(evoformer_input) + + msa_activations = evoformer_output['msa'] + pair_activations = evoformer_output['pair'] + + single_activations = common_modules.Linear( + c.seq_channel, name='single_activations')( + msa_activations[0]) + + output.update({ + 'single': + single_activations, + 'pair': + pair_activations, + # Crop away template rows such that they are not used in MaskedMsaHead. + 'msa': + msa_activations[:num_msa_sequences, :, :], + 'msa_first_row': + msa_activations[0], + }) + + # Convert back to float32 if we're not saving memory. + if not gc.bfloat16_output: + for k, v in output.items(): + if v.dtype == jnp.bfloat16: + output[k] = v.astype(jnp.float32) + + return output + + +class TemplateEmbedding(hk.Module): + """Embed a set of templates.""" + + def __init__(self, config, global_config, name='template_embedding'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, query_embedding, template_batch, padding_mask_2d, + multichain_mask_2d, is_training, + safe_key=None): + """Generate an embedding for a set of templates. + + Args: + query_embedding: [num_res, num_res, num_channel] a query tensor that will + be used to attend over the templates to remove the num_templates + dimension. + template_batch: A dictionary containing: + `template_aatype`: [num_templates, num_res] aatype for each template. + `template_all_atom_positions`: [num_templates, num_res, 37, 3] atom + positions for all templates. + `template_all_atom_mask`: [num_templates, num_res, 37] mask for each + template. + padding_mask_2d: [num_res, num_res] Pair mask for attention operations. + multichain_mask_2d: [num_res, num_res] Mask indicating which residue pairs + are intra-chain, used to mask out residue distance based features + between chains. + is_training: bool indicating where we are running in training mode. + safe_key: random key generator. + + Returns: + An embedding of size [num_res, num_res, num_channels] + """ + c = self.config + if safe_key is None: + safe_key = prng.SafeKey(hk.next_rng_key()) + + num_templates = template_batch['template_aatype'].shape[0] + num_res, _, query_num_channels = query_embedding.shape + + # Embed each template separately. + template_embedder = SingleTemplateEmbedding(self.config, self.global_config) + def partial_template_embedder(template_aatype, + template_all_atom_positions, + template_all_atom_mask, + unsafe_key): + safe_key = prng.SafeKey(unsafe_key) + return template_embedder(query_embedding, + template_aatype, + template_all_atom_positions, + template_all_atom_mask, + padding_mask_2d, + multichain_mask_2d, + is_training, + safe_key) + + safe_key, unsafe_key = safe_key.split() + unsafe_keys = jax.random.split(unsafe_key._key, num_templates) + + def scan_fn(carry, x): + return carry + partial_template_embedder(*x), None + + scan_init = jnp.zeros((num_res, num_res, c.num_channels), + dtype=query_embedding.dtype) + summed_template_embeddings, _ = hk.scan( + scan_fn, scan_init, + (template_batch['template_aatype'], + template_batch['template_all_atom_positions'], + template_batch['template_all_atom_mask'], unsafe_keys)) + + embedding = summed_template_embeddings / num_templates + embedding = jax.nn.relu(embedding) + embedding = common_modules.Linear( + query_num_channels, + initializer='relu', + name='output_linear')(embedding) + + return embedding + + +class SingleTemplateEmbedding(hk.Module): + """Embed a single template.""" + + def __init__(self, config, global_config, name='single_template_embedding'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, query_embedding, template_aatype, + template_all_atom_positions, template_all_atom_mask, + padding_mask_2d, multichain_mask_2d, is_training, + safe_key): + """Build the single template embedding graph. + + Args: + query_embedding: (num_res, num_res, num_channels) - embedding of the + query sequence/msa. + template_aatype: [num_res] aatype for each template. + template_all_atom_positions: [num_res, 37, 3] atom positions for all + templates. + template_all_atom_mask: [num_res, 37] mask for each template. + padding_mask_2d: Padding mask (Note: this doesn't care if a template + exists, unlike the template_pseudo_beta_mask). + multichain_mask_2d: A mask indicating intra-chain residue pairs, used + to mask out between chain distances/features when templates are for + single chains. + is_training: Are we in training mode. + safe_key: Random key generator. + + Returns: + A template embedding (num_res, num_res, num_channels). + """ + gc = self.global_config + c = self.config + assert padding_mask_2d.dtype == query_embedding.dtype + dtype = query_embedding.dtype + num_channels = self.config.num_channels + + def construct_input(query_embedding, template_aatype, + template_all_atom_positions, template_all_atom_mask, + multichain_mask_2d): + + # Compute distogram feature for the template. + template_positions, pseudo_beta_mask = modules.pseudo_beta_fn( + template_aatype, template_all_atom_positions, template_all_atom_mask) + pseudo_beta_mask_2d = (pseudo_beta_mask[:, None] * + pseudo_beta_mask[None, :]) + pseudo_beta_mask_2d *= multichain_mask_2d + template_dgram = modules.dgram_from_positions( + template_positions, **self.config.dgram_features) + template_dgram *= pseudo_beta_mask_2d[..., None] + template_dgram = template_dgram.astype(dtype) + pseudo_beta_mask_2d = pseudo_beta_mask_2d.astype(dtype) + to_concat = [(template_dgram, 1), (pseudo_beta_mask_2d, 0)] + + aatype = jax.nn.one_hot(template_aatype, 22, axis=-1, dtype=dtype) + to_concat.append((aatype[None, :, :], 1)) + to_concat.append((aatype[:, None, :], 1)) + + # Compute a feature representing the normalized vector between each + # backbone affine - i.e. in each residues local frame, what direction are + # each of the other residues. + raw_atom_pos = template_all_atom_positions + if gc.bfloat16: + # Vec3Arrays are required to be float32 + raw_atom_pos = raw_atom_pos.astype(jnp.float32) + + atom_pos = geometry.Vec3Array.from_array(raw_atom_pos) + rigid, backbone_mask = folding_multimer.make_backbone_affine( + atom_pos, + template_all_atom_mask, + template_aatype) + points = rigid.translation + rigid_vec = rigid[:, None].inverse().apply_to_point(points) + unit_vector = rigid_vec.normalized() + unit_vector = [unit_vector.x, unit_vector.y, unit_vector.z] + + if gc.bfloat16: + unit_vector = [x.astype(jnp.bfloat16) for x in unit_vector] + backbone_mask = backbone_mask.astype(jnp.bfloat16) + + backbone_mask_2d = backbone_mask[:, None] * backbone_mask[None, :] + backbone_mask_2d *= multichain_mask_2d + unit_vector = [x*backbone_mask_2d for x in unit_vector] + + # Note that the backbone_mask takes into account C, CA and N (unlike + # pseudo beta mask which just needs CB) so we add both masks as features. + to_concat.extend([(x, 0) for x in unit_vector]) + to_concat.append((backbone_mask_2d, 0)) + + query_embedding = common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='query_embedding_norm')( + query_embedding) + # Allow the template embedder to see the query embedding. Note this + # contains the position relative feature, so this is how the network knows + # which residues are next to each other. + to_concat.append((query_embedding, 1)) + + act = 0 + + for i, (x, n_input_dims) in enumerate(to_concat): + + act += common_modules.Linear( + num_channels, + num_input_dims=n_input_dims, + initializer='relu', + name=f'template_pair_embedding_{i}')(x) + return act + + act = construct_input(query_embedding, template_aatype, + template_all_atom_positions, template_all_atom_mask, + multichain_mask_2d) + + template_iteration = TemplateEmbeddingIteration( + c.template_pair_stack, gc, name='template_embedding_iteration') + + def template_iteration_fn(x): + act, safe_key = x + + safe_key, safe_subkey = safe_key.split() + act = template_iteration( + act=act, + pair_mask=padding_mask_2d, + is_training=is_training, + safe_key=safe_subkey) + return (act, safe_key) + + if gc.use_remat: + template_iteration_fn = hk.remat(template_iteration_fn) + + safe_key, safe_subkey = safe_key.split() + template_stack = layer_stack.layer_stack( + c.template_pair_stack.num_block)( + template_iteration_fn) + act, safe_key = template_stack((act, safe_subkey)) + + act = common_modules.LayerNorm( + axis=[-1], + create_scale=True, + create_offset=True, + name='output_layer_norm')( + act) + + return act + + +class TemplateEmbeddingIteration(hk.Module): + """Single Iteration of Template Embedding.""" + + def __init__(self, config, global_config, + name='template_embedding_iteration'): + super().__init__(name=name) + self.config = config + self.global_config = global_config + + def __call__(self, act, pair_mask, is_training=True, + safe_key=None): + """Build a single iteration of the template embedder. + + Args: + act: [num_res, num_res, num_channel] Input pairwise activations. + pair_mask: [num_res, num_res] padding mask. + is_training: Whether to run in training mode. + safe_key: Safe pseudo-random generator key. + + Returns: + [num_res, num_res, num_channel] tensor of activations. + """ + c = self.config + gc = self.global_config + + if safe_key is None: + safe_key = prng.SafeKey(hk.next_rng_key()) + + dropout_wrapper_fn = functools.partial( + modules.dropout_wrapper, + is_training=is_training, + global_config=gc) + + safe_key, *sub_keys = safe_key.split(20) + sub_keys = iter(sub_keys) + + act = dropout_wrapper_fn( + modules.TriangleMultiplication(c.triangle_multiplication_outgoing, gc, + name='triangle_multiplication_outgoing'), + act, + pair_mask, + safe_key=next(sub_keys)) + + act = dropout_wrapper_fn( + modules.TriangleMultiplication(c.triangle_multiplication_incoming, gc, + name='triangle_multiplication_incoming'), + act, + pair_mask, + safe_key=next(sub_keys)) + act = dropout_wrapper_fn( + modules.TriangleAttention(c.triangle_attention_starting_node, gc, + name='triangle_attention_starting_node'), + act, + pair_mask, + safe_key=next(sub_keys)) + act = dropout_wrapper_fn( + modules.TriangleAttention(c.triangle_attention_ending_node, gc, + name='triangle_attention_ending_node'), + act, + pair_mask, + safe_key=next(sub_keys)) + act = dropout_wrapper_fn( + modules.Transition(c.pair_transition, gc, + name='pair_transition'), + act, + pair_mask, + safe_key=next(sub_keys)) + + return act + + +def template_embedding_1d(batch, num_channel, global_config): + """Embed templates into an (num_res, num_templates, num_channels) embedding. + + Args: + batch: A batch containing: + template_aatype, (num_templates, num_res) aatype for the templates. + template_all_atom_positions, (num_templates, num_residues, 37, 3) atom + positions for the templates. + template_all_atom_mask, (num_templates, num_residues, 37) atom mask for + each template. + num_channel: The number of channels in the output. + global_config: The global_config. + + Returns: + An embedding of shape (num_templates, num_res, num_channels) and a mask of + shape (num_templates, num_res). + """ + + # Embed the templates aatypes. + aatype_one_hot = jax.nn.one_hot(batch['template_aatype'], 22, axis=-1) + + num_templates = batch['template_aatype'].shape[0] + all_chi_angles = [] + all_chi_masks = [] + for i in range(num_templates): + atom_pos = geometry.Vec3Array.from_array( + batch['template_all_atom_positions'][i, :, :, :]) + template_chi_angles, template_chi_mask = all_atom_multimer.compute_chi_angles( + atom_pos, + batch['template_all_atom_mask'][i, :, :], + batch['template_aatype'][i, :]) + all_chi_angles.append(template_chi_angles) + all_chi_masks.append(template_chi_mask) + chi_angles = jnp.stack(all_chi_angles, axis=0) + chi_mask = jnp.stack(all_chi_masks, axis=0) + + template_features = jnp.concatenate([ + aatype_one_hot, + jnp.sin(chi_angles) * chi_mask, + jnp.cos(chi_angles) * chi_mask, + chi_mask], axis=-1) + + template_mask = chi_mask[:, :, 0] + + if global_config.bfloat16: + template_features = template_features.astype(jnp.bfloat16) + template_mask = template_mask.astype(jnp.bfloat16) + + template_activations = common_modules.Linear( + num_channel, + initializer='relu', + name='template_single_embedding')( + template_features) + template_activations = jax.nn.relu(template_activations) + template_activations = common_modules.Linear( + num_channel, + initializer='relu', + name='template_projection')( + template_activations) + return template_activations, template_mask diff --git a/alphafold/model/prng.py b/alphafold/model/prng.py new file mode 100644 index 0000000000000000000000000000000000000000..2dde12965c4b10203801a198a4d73fe610d1059d --- /dev/null +++ b/alphafold/model/prng.py @@ -0,0 +1,69 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""A collection of utilities surrounding PRNG usage in protein folding.""" + +import haiku as hk +import jax + + +def safe_dropout(*, tensor, safe_key, rate, is_deterministic, is_training): + if is_training and rate != 0.0 and not is_deterministic: + return hk.dropout(safe_key.get(), rate, tensor) + else: + return tensor + + +class SafeKey: + """Safety wrapper for PRNG keys.""" + + def __init__(self, key): + self._key = key + self._used = False + + def _assert_not_used(self): + if self._used: + raise RuntimeError('Random key has been used previously.') + + def get(self): + self._assert_not_used() + self._used = True + return self._key + + def split(self, num_keys=2): + self._assert_not_used() + self._used = True + new_keys = jax.random.split(self._key, num_keys) + return jax.tree_map(SafeKey, tuple(new_keys)) + + def duplicate(self, num_keys=2): + self._assert_not_used() + self._used = True + return tuple(SafeKey(self._key) for _ in range(num_keys)) + + +def _safe_key_flatten(safe_key): + # Flatten transfers "ownership" to the tree + return (safe_key._key,), safe_key._used # pylint: disable=protected-access + + +def _safe_key_unflatten(aux_data, children): + ret = SafeKey(children[0]) + ret._used = aux_data # pylint: disable=protected-access + return ret + + +jax.tree_util.register_pytree_node( + SafeKey, _safe_key_flatten, _safe_key_unflatten) + diff --git a/alphafold/model/prng_test.py b/alphafold/model/prng_test.py new file mode 100644 index 0000000000000000000000000000000000000000..b6431df3af41195e8a566744b677c67552b6424b --- /dev/null +++ b/alphafold/model/prng_test.py @@ -0,0 +1,45 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for prng.""" + +from absl.testing import absltest +from alphafold.model import prng +import jax + + +class PrngTest(absltest.TestCase): + + def test_key_reuse(self): + + init_key = jax.random.PRNGKey(42) + safe_key = prng.SafeKey(init_key) + _, safe_key = safe_key.split() + + raw_key = safe_key.get() + + self.assertFalse((raw_key == init_key).all()) + + with self.assertRaises(RuntimeError): + safe_key.get() + + with self.assertRaises(RuntimeError): + safe_key.split() + + with self.assertRaises(RuntimeError): + safe_key.duplicate() + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/model/quat_affine.py b/alphafold/model/quat_affine.py new file mode 100644 index 0000000000000000000000000000000000000000..9ebcd20f3e2948c905242dc3e09df6684b99ace7 --- /dev/null +++ b/alphafold/model/quat_affine.py @@ -0,0 +1,459 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Quaternion geometry modules. + +This introduces a representation of coordinate frames that is based around a +‘QuatAffine’ object. This object describes an array of coordinate frames. +It consists of vectors corresponding to the +origin of the frames as well as orientations which are stored in two +ways, as unit quaternions as well as a rotation matrices. +The rotation matrices are derived from the unit quaternions and the two are kept +in sync. +For an explanation of the relation between unit quaternions and rotations see +https://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation + +This representation is used in the model for the backbone frames. + +One important thing to note here, is that while we update both representations +the jit compiler is going to ensure that only the parts that are +actually used are executed. +""" + + +import functools +from typing import Tuple + +import jax +import jax.numpy as jnp +import numpy as np + +# pylint: disable=bad-whitespace +QUAT_TO_ROT = np.zeros((4, 4, 3, 3), dtype=np.float32) + +QUAT_TO_ROT[0, 0] = [[ 1, 0, 0], [ 0, 1, 0], [ 0, 0, 1]] # rr +QUAT_TO_ROT[1, 1] = [[ 1, 0, 0], [ 0,-1, 0], [ 0, 0,-1]] # ii +QUAT_TO_ROT[2, 2] = [[-1, 0, 0], [ 0, 1, 0], [ 0, 0,-1]] # jj +QUAT_TO_ROT[3, 3] = [[-1, 0, 0], [ 0,-1, 0], [ 0, 0, 1]] # kk + +QUAT_TO_ROT[1, 2] = [[ 0, 2, 0], [ 2, 0, 0], [ 0, 0, 0]] # ij +QUAT_TO_ROT[1, 3] = [[ 0, 0, 2], [ 0, 0, 0], [ 2, 0, 0]] # ik +QUAT_TO_ROT[2, 3] = [[ 0, 0, 0], [ 0, 0, 2], [ 0, 2, 0]] # jk + +QUAT_TO_ROT[0, 1] = [[ 0, 0, 0], [ 0, 0,-2], [ 0, 2, 0]] # ir +QUAT_TO_ROT[0, 2] = [[ 0, 0, 2], [ 0, 0, 0], [-2, 0, 0]] # jr +QUAT_TO_ROT[0, 3] = [[ 0,-2, 0], [ 2, 0, 0], [ 0, 0, 0]] # kr + +QUAT_MULTIPLY = np.zeros((4, 4, 4), dtype=np.float32) +QUAT_MULTIPLY[:, :, 0] = [[ 1, 0, 0, 0], + [ 0,-1, 0, 0], + [ 0, 0,-1, 0], + [ 0, 0, 0,-1]] + +QUAT_MULTIPLY[:, :, 1] = [[ 0, 1, 0, 0], + [ 1, 0, 0, 0], + [ 0, 0, 0, 1], + [ 0, 0,-1, 0]] + +QUAT_MULTIPLY[:, :, 2] = [[ 0, 0, 1, 0], + [ 0, 0, 0,-1], + [ 1, 0, 0, 0], + [ 0, 1, 0, 0]] + +QUAT_MULTIPLY[:, :, 3] = [[ 0, 0, 0, 1], + [ 0, 0, 1, 0], + [ 0,-1, 0, 0], + [ 1, 0, 0, 0]] + +QUAT_MULTIPLY_BY_VEC = QUAT_MULTIPLY[:, 1:, :] +# pylint: enable=bad-whitespace + + +def rot_to_quat(rot, unstack_inputs=False): + """Convert rotation matrix to quaternion. + + Note that this function calls self_adjoint_eig which is extremely expensive on + the GPU. If at all possible, this function should run on the CPU. + + Args: + rot: rotation matrix (see below for format). + unstack_inputs: If true, rotation matrix should be shape (..., 3, 3) + otherwise the rotation matrix should be a list of lists of tensors. + + Returns: + Quaternion as (..., 4) tensor. + """ + if unstack_inputs: + rot = [jnp.moveaxis(x, -1, 0) for x in jnp.moveaxis(rot, -2, 0)] + + [[xx, xy, xz], [yx, yy, yz], [zx, zy, zz]] = rot + + # pylint: disable=bad-whitespace + k = [[ xx + yy + zz, zy - yz, xz - zx, yx - xy,], + [ zy - yz, xx - yy - zz, xy + yx, xz + zx,], + [ xz - zx, xy + yx, yy - xx - zz, yz + zy,], + [ yx - xy, xz + zx, yz + zy, zz - xx - yy,]] + # pylint: enable=bad-whitespace + + k = (1./3.) * jnp.stack([jnp.stack(x, axis=-1) for x in k], + axis=-2) + + # Get eigenvalues in non-decreasing order and associated. + _, qs = jnp.linalg.eigh(k) + return qs[..., -1] + + +def rot_list_to_tensor(rot_list): + """Convert list of lists to rotation tensor.""" + return jnp.stack( + [jnp.stack(rot_list[0], axis=-1), + jnp.stack(rot_list[1], axis=-1), + jnp.stack(rot_list[2], axis=-1)], + axis=-2) + + +def vec_list_to_tensor(vec_list): + """Convert list to vector tensor.""" + return jnp.stack(vec_list, axis=-1) + + +def quat_to_rot(normalized_quat): + """Convert a normalized quaternion to a rotation matrix.""" + rot_tensor = jnp.sum( + np.reshape(QUAT_TO_ROT, (4, 4, 9)) * + normalized_quat[..., :, None, None] * + normalized_quat[..., None, :, None], + axis=(-3, -2)) + rot = jnp.moveaxis(rot_tensor, -1, 0) # Unstack. + return [[rot[0], rot[1], rot[2]], + [rot[3], rot[4], rot[5]], + [rot[6], rot[7], rot[8]]] + + +def quat_multiply_by_vec(quat, vec): + """Multiply a quaternion by a pure-vector quaternion.""" + return jnp.sum( + QUAT_MULTIPLY_BY_VEC * + quat[..., :, None, None] * + vec[..., None, :, None], + axis=(-3, -2)) + + +def quat_multiply(quat1, quat2): + """Multiply a quaternion by another quaternion.""" + return jnp.sum( + QUAT_MULTIPLY * + quat1[..., :, None, None] * + quat2[..., None, :, None], + axis=(-3, -2)) + + +def apply_rot_to_vec(rot, vec, unstack=False): + """Multiply rotation matrix by a vector.""" + if unstack: + x, y, z = [vec[:, i] for i in range(3)] + else: + x, y, z = vec + return [rot[0][0] * x + rot[0][1] * y + rot[0][2] * z, + rot[1][0] * x + rot[1][1] * y + rot[1][2] * z, + rot[2][0] * x + rot[2][1] * y + rot[2][2] * z] + + +def apply_inverse_rot_to_vec(rot, vec): + """Multiply the inverse of a rotation matrix by a vector.""" + # Inverse rotation is just transpose + return [rot[0][0] * vec[0] + rot[1][0] * vec[1] + rot[2][0] * vec[2], + rot[0][1] * vec[0] + rot[1][1] * vec[1] + rot[2][1] * vec[2], + rot[0][2] * vec[0] + rot[1][2] * vec[1] + rot[2][2] * vec[2]] + + +class QuatAffine(object): + """Affine transformation represented by quaternion and vector.""" + + def __init__(self, quaternion, translation, rotation=None, normalize=True, + unstack_inputs=False): + """Initialize from quaternion and translation. + + Args: + quaternion: Rotation represented by a quaternion, to be applied + before translation. Must be a unit quaternion unless normalize==True. + translation: Translation represented as a vector. + rotation: Same rotation as the quaternion, represented as a (..., 3, 3) + tensor. If None, rotation will be calculated from the quaternion. + normalize: If True, l2 normalize the quaternion on input. + unstack_inputs: If True, translation is a vector with last component 3 + """ + + if quaternion is not None: + assert quaternion.shape[-1] == 4 + + if unstack_inputs: + if rotation is not None: + rotation = [jnp.moveaxis(x, -1, 0) # Unstack. + for x in jnp.moveaxis(rotation, -2, 0)] # Unstack. + translation = jnp.moveaxis(translation, -1, 0) # Unstack. + + if normalize and quaternion is not None: + quaternion = quaternion / jnp.linalg.norm(quaternion, axis=-1, + keepdims=True) + + if rotation is None: + rotation = quat_to_rot(quaternion) + + self.quaternion = quaternion + self.rotation = [list(row) for row in rotation] + self.translation = list(translation) + + assert all(len(row) == 3 for row in self.rotation) + assert len(self.translation) == 3 + + def to_tensor(self): + return jnp.concatenate( + [self.quaternion] + + [jnp.expand_dims(x, axis=-1) for x in self.translation], + axis=-1) + + def apply_tensor_fn(self, tensor_fn): + """Return a new QuatAffine with tensor_fn applied (e.g. stop_gradient).""" + return QuatAffine( + tensor_fn(self.quaternion), + [tensor_fn(x) for x in self.translation], + rotation=[[tensor_fn(x) for x in row] for row in self.rotation], + normalize=False) + + def apply_rotation_tensor_fn(self, tensor_fn): + """Return a new QuatAffine with tensor_fn applied to the rotation part.""" + return QuatAffine( + tensor_fn(self.quaternion), + [x for x in self.translation], + rotation=[[tensor_fn(x) for x in row] for row in self.rotation], + normalize=False) + + def scale_translation(self, position_scale): + """Return a new quat affine with a different scale for translation.""" + + return QuatAffine( + self.quaternion, + [x * position_scale for x in self.translation], + rotation=[[x for x in row] for row in self.rotation], + normalize=False) + + @classmethod + def from_tensor(cls, tensor, normalize=False): + quaternion, tx, ty, tz = jnp.split(tensor, [4, 5, 6], axis=-1) + return cls(quaternion, + [tx[..., 0], ty[..., 0], tz[..., 0]], + normalize=normalize) + + def pre_compose(self, update): + """Return a new QuatAffine which applies the transformation update first. + + Args: + update: Length-6 vector. 3-vector of x, y, and z such that the quaternion + update is (1, x, y, z) and zero for the 3-vector is the identity + quaternion. 3-vector for translation concatenated. + + Returns: + New QuatAffine object. + """ + vector_quaternion_update, x, y, z = jnp.split(update, [3, 4, 5], axis=-1) + trans_update = [jnp.squeeze(x, axis=-1), + jnp.squeeze(y, axis=-1), + jnp.squeeze(z, axis=-1)] + + new_quaternion = (self.quaternion + + quat_multiply_by_vec(self.quaternion, + vector_quaternion_update)) + + trans_update = apply_rot_to_vec(self.rotation, trans_update) + new_translation = [ + self.translation[0] + trans_update[0], + self.translation[1] + trans_update[1], + self.translation[2] + trans_update[2]] + + return QuatAffine(new_quaternion, new_translation) + + def apply_to_point(self, point, extra_dims=0): + """Apply affine to a point. + + Args: + point: List of 3 tensors to apply affine. + extra_dims: Number of dimensions at the end of the transformed_point + shape that are not present in the rotation and translation. The most + common use is rotation N points at once with extra_dims=1 for use in a + network. + + Returns: + Transformed point after applying affine. + """ + rotation = self.rotation + translation = self.translation + for _ in range(extra_dims): + expand_fn = functools.partial(jnp.expand_dims, axis=-1) + rotation = jax.tree_map(expand_fn, rotation) + translation = jax.tree_map(expand_fn, translation) + + rot_point = apply_rot_to_vec(rotation, point) + return [ + rot_point[0] + translation[0], + rot_point[1] + translation[1], + rot_point[2] + translation[2]] + + def invert_point(self, transformed_point, extra_dims=0): + """Apply inverse of transformation to a point. + + Args: + transformed_point: List of 3 tensors to apply affine + extra_dims: Number of dimensions at the end of the transformed_point + shape that are not present in the rotation and translation. The most + common use is rotation N points at once with extra_dims=1 for use in a + network. + + Returns: + Transformed point after applying affine. + """ + rotation = self.rotation + translation = self.translation + for _ in range(extra_dims): + expand_fn = functools.partial(jnp.expand_dims, axis=-1) + rotation = jax.tree_map(expand_fn, rotation) + translation = jax.tree_map(expand_fn, translation) + + rot_point = [ + transformed_point[0] - translation[0], + transformed_point[1] - translation[1], + transformed_point[2] - translation[2]] + + return apply_inverse_rot_to_vec(rotation, rot_point) + + def __repr__(self): + return 'QuatAffine(%r, %r)' % (self.quaternion, self.translation) + + +def _multiply(a, b): + return jnp.stack([ + jnp.array([a[0][0]*b[0][0] + a[0][1]*b[1][0] + a[0][2]*b[2][0], + a[0][0]*b[0][1] + a[0][1]*b[1][1] + a[0][2]*b[2][1], + a[0][0]*b[0][2] + a[0][1]*b[1][2] + a[0][2]*b[2][2]]), + + jnp.array([a[1][0]*b[0][0] + a[1][1]*b[1][0] + a[1][2]*b[2][0], + a[1][0]*b[0][1] + a[1][1]*b[1][1] + a[1][2]*b[2][1], + a[1][0]*b[0][2] + a[1][1]*b[1][2] + a[1][2]*b[2][2]]), + + jnp.array([a[2][0]*b[0][0] + a[2][1]*b[1][0] + a[2][2]*b[2][0], + a[2][0]*b[0][1] + a[2][1]*b[1][1] + a[2][2]*b[2][1], + a[2][0]*b[0][2] + a[2][1]*b[1][2] + a[2][2]*b[2][2]])]) + + +def make_canonical_transform( + n_xyz: jnp.ndarray, + ca_xyz: jnp.ndarray, + c_xyz: jnp.ndarray) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Returns translation and rotation matrices to canonicalize residue atoms. + + Note that this method does not take care of symmetries. If you provide the + atom positions in the non-standard way, the N atom will end up not at + [-0.527250, 1.359329, 0.0] but instead at [-0.527250, -1.359329, 0.0]. You + need to take care of such cases in your code. + + Args: + n_xyz: An array of shape [batch, 3] of nitrogen xyz coordinates. + ca_xyz: An array of shape [batch, 3] of carbon alpha xyz coordinates. + c_xyz: An array of shape [batch, 3] of carbon xyz coordinates. + + Returns: + A tuple (translation, rotation) where: + translation is an array of shape [batch, 3] defining the translation. + rotation is an array of shape [batch, 3, 3] defining the rotation. + After applying the translation and rotation to all atoms in a residue: + * All atoms will be shifted so that CA is at the origin, + * All atoms will be rotated so that C is at the x-axis, + * All atoms will be shifted so that N is in the xy plane. + """ + assert len(n_xyz.shape) == 2, n_xyz.shape + assert n_xyz.shape[-1] == 3, n_xyz.shape + assert n_xyz.shape == ca_xyz.shape == c_xyz.shape, ( + n_xyz.shape, ca_xyz.shape, c_xyz.shape) + + # Place CA at the origin. + translation = -ca_xyz + n_xyz = n_xyz + translation + c_xyz = c_xyz + translation + + # Place C on the x-axis. + c_x, c_y, c_z = [c_xyz[:, i] for i in range(3)] + # Rotate by angle c1 in the x-y plane (around the z-axis). + sin_c1 = -c_y / jnp.sqrt(1e-20 + c_x**2 + c_y**2) + cos_c1 = c_x / jnp.sqrt(1e-20 + c_x**2 + c_y**2) + zeros = jnp.zeros_like(sin_c1) + ones = jnp.ones_like(sin_c1) + # pylint: disable=bad-whitespace + c1_rot_matrix = jnp.stack([jnp.array([cos_c1, -sin_c1, zeros]), + jnp.array([sin_c1, cos_c1, zeros]), + jnp.array([zeros, zeros, ones])]) + + # Rotate by angle c2 in the x-z plane (around the y-axis). + sin_c2 = c_z / jnp.sqrt(1e-20 + c_x**2 + c_y**2 + c_z**2) + cos_c2 = jnp.sqrt(c_x**2 + c_y**2) / jnp.sqrt( + 1e-20 + c_x**2 + c_y**2 + c_z**2) + c2_rot_matrix = jnp.stack([jnp.array([cos_c2, zeros, sin_c2]), + jnp.array([zeros, ones, zeros]), + jnp.array([-sin_c2, zeros, cos_c2])]) + + c_rot_matrix = _multiply(c2_rot_matrix, c1_rot_matrix) + n_xyz = jnp.stack(apply_rot_to_vec(c_rot_matrix, n_xyz, unstack=True)).T + + # Place N in the x-y plane. + _, n_y, n_z = [n_xyz[:, i] for i in range(3)] + # Rotate by angle alpha in the y-z plane (around the x-axis). + sin_n = -n_z / jnp.sqrt(1e-20 + n_y**2 + n_z**2) + cos_n = n_y / jnp.sqrt(1e-20 + n_y**2 + n_z**2) + n_rot_matrix = jnp.stack([jnp.array([ones, zeros, zeros]), + jnp.array([zeros, cos_n, -sin_n]), + jnp.array([zeros, sin_n, cos_n])]) + # pylint: enable=bad-whitespace + + return (translation, + jnp.transpose(_multiply(n_rot_matrix, c_rot_matrix), [2, 0, 1])) + + +def make_transform_from_reference( + n_xyz: jnp.ndarray, + ca_xyz: jnp.ndarray, + c_xyz: jnp.ndarray) -> Tuple[jnp.ndarray, jnp.ndarray]: + """Returns rotation and translation matrices to convert from reference. + + Note that this method does not take care of symmetries. If you provide the + atom positions in the non-standard way, the N atom will end up not at + [-0.527250, 1.359329, 0.0] but instead at [-0.527250, -1.359329, 0.0]. You + need to take care of such cases in your code. + + Args: + n_xyz: An array of shape [batch, 3] of nitrogen xyz coordinates. + ca_xyz: An array of shape [batch, 3] of carbon alpha xyz coordinates. + c_xyz: An array of shape [batch, 3] of carbon xyz coordinates. + + Returns: + A tuple (rotation, translation) where: + rotation is an array of shape [batch, 3, 3] defining the rotation. + translation is an array of shape [batch, 3] defining the translation. + After applying the translation and rotation to the reference backbone, + the coordinates will approximately equal to the input coordinates. + + The order of translation and rotation differs from make_canonical_transform + because the rotation from this function should be applied before the + translation, unlike make_canonical_transform. + """ + translation, rotation = make_canonical_transform(n_xyz, ca_xyz, c_xyz) + return np.transpose(rotation, (0, 2, 1)), -translation diff --git a/alphafold/model/quat_affine_test.py b/alphafold/model/quat_affine_test.py new file mode 100644 index 0000000000000000000000000000000000000000..6a477b2d0634af1d1ab47a4c0d41bc5991d6c89a --- /dev/null +++ b/alphafold/model/quat_affine_test.py @@ -0,0 +1,150 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for quat_affine.""" + +from absl import logging +from absl.testing import absltest +from alphafold.model import quat_affine +import jax +import jax.numpy as jnp +import numpy as np + +VERBOSE = False +np.set_printoptions(precision=3, suppress=True) + +r2t = quat_affine.rot_list_to_tensor +v2t = quat_affine.vec_list_to_tensor + +q2r = lambda q: r2t(quat_affine.quat_to_rot(q)) + + +class QuatAffineTest(absltest.TestCase): + + def _assert_check(self, to_check, tol=1e-5): + for k, (correct, generated) in to_check.items(): + if VERBOSE: + logging.info(k) + logging.info('Correct %s', correct) + logging.info('Predicted %s', generated) + self.assertLess(np.max(np.abs(correct - generated)), tol) + + def test_conversion(self): + quat = jnp.array([-2., 5., -1., 4.]) + + rotation = jnp.array([ + [0.26087, 0.130435, 0.956522], + [-0.565217, -0.782609, 0.26087], + [0.782609, -0.608696, -0.130435]]) + + translation = jnp.array([1., -3., 4.]) + point = jnp.array([0.7, 3.2, -2.9]) + + a = quat_affine.QuatAffine(quat, translation, unstack_inputs=True) + true_new_point = jnp.matmul(rotation, point[:, None])[:, 0] + translation + + self._assert_check({ + 'rot': (rotation, r2t(a.rotation)), + 'trans': (translation, v2t(a.translation)), + 'point': (true_new_point, + v2t(a.apply_to_point(jnp.moveaxis(point, -1, 0)))), + # Because of the double cover, we must be careful and compare rotations + 'quat': (q2r(a.quaternion), + q2r(quat_affine.rot_to_quat(a.rotation))), + + }) + + def test_double_cover(self): + """Test that -q is the same rotation as q.""" + rng = jax.random.PRNGKey(42) + keys = jax.random.split(rng) + q = jax.random.normal(keys[0], (2, 4)) + trans = jax.random.normal(keys[1], (2, 3)) + a1 = quat_affine.QuatAffine(q, trans, unstack_inputs=True) + a2 = quat_affine.QuatAffine(-q, trans, unstack_inputs=True) + + self._assert_check({ + 'rot': (r2t(a1.rotation), + r2t(a2.rotation)), + 'trans': (v2t(a1.translation), + v2t(a2.translation)), + }) + + def test_homomorphism(self): + rng = jax.random.PRNGKey(42) + keys = jax.random.split(rng, 4) + vec_q1 = jax.random.normal(keys[0], (2, 3)) + + q1 = jnp.concatenate([ + jnp.ones_like(vec_q1)[:, :1], + vec_q1], axis=-1) + + q2 = jax.random.normal(keys[1], (2, 4)) + t1 = jax.random.normal(keys[2], (2, 3)) + t2 = jax.random.normal(keys[3], (2, 3)) + + a1 = quat_affine.QuatAffine(q1, t1, unstack_inputs=True) + a2 = quat_affine.QuatAffine(q2, t2, unstack_inputs=True) + a21 = a2.pre_compose(jnp.concatenate([vec_q1, t1], axis=-1)) + + rng, key = jax.random.split(rng) + x = jax.random.normal(key, (2, 3)) + new_x = a21.apply_to_point(jnp.moveaxis(x, -1, 0)) + new_x_apply2 = a2.apply_to_point(a1.apply_to_point(jnp.moveaxis(x, -1, 0))) + + self._assert_check({ + 'quat': (q2r(quat_affine.quat_multiply(a2.quaternion, a1.quaternion)), + q2r(a21.quaternion)), + 'rot': (jnp.matmul(r2t(a2.rotation), r2t(a1.rotation)), + r2t(a21.rotation)), + 'point': (v2t(new_x_apply2), + v2t(new_x)), + 'inverse': (x, v2t(a21.invert_point(new_x))), + }) + + def test_batching(self): + """Test that affine applies batchwise.""" + rng = jax.random.PRNGKey(42) + keys = jax.random.split(rng, 3) + q = jax.random.uniform(keys[0], (5, 2, 4)) + t = jax.random.uniform(keys[1], (2, 3)) + x = jax.random.uniform(keys[2], (5, 1, 3)) + + a = quat_affine.QuatAffine(q, t, unstack_inputs=True) + y = v2t(a.apply_to_point(jnp.moveaxis(x, -1, 0))) + + y_list = [] + for i in range(5): + for j in range(2): + a_local = quat_affine.QuatAffine(q[i, j], t[j], + unstack_inputs=True) + y_local = v2t(a_local.apply_to_point(jnp.moveaxis(x[i, 0], -1, 0))) + y_list.append(y_local) + y_combine = jnp.reshape(jnp.stack(y_list, axis=0), (5, 2, 3)) + + self._assert_check({ + 'batch': (y_combine, y), + 'quat': (q2r(a.quaternion), + q2r(quat_affine.rot_to_quat(a.rotation))), + }) + + def assertAllClose(self, a, b, rtol=1e-06, atol=1e-06): + self.assertTrue(np.allclose(a, b, rtol=rtol, atol=atol)) + + def assertAllEqual(self, a, b): + self.assertTrue(np.all(np.array(a) == np.array(b))) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/model/r3.py b/alphafold/model/r3.py new file mode 100644 index 0000000000000000000000000000000000000000..1e775ab39e529c6086938adbb1d6c2cd3fb6cc8e --- /dev/null +++ b/alphafold/model/r3.py @@ -0,0 +1,320 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Transformations for 3D coordinates. + +This Module contains objects for representing Vectors (Vecs), Rotation Matrices +(Rots) and proper Rigid transformation (Rigids). These are represented as +named tuples with arrays for each entry, for example a set of +[N, M] points would be represented as a Vecs object with arrays of shape [N, M] +for x, y and z. + +This is being done to improve readability by making it very clear what objects +are geometric objects rather than relying on comments and array shapes. +Another reason for this is to avoid using matrix +multiplication primitives like matmul or einsum, on modern accelerator hardware +these can end up on specialized cores such as tensor cores on GPU or the MXU on +cloud TPUs, this often involves lower computational precision which can be +problematic for coordinate geometry. Also these cores are typically optimized +for larger matrices than 3 dimensional, this code is written to avoid any +unintended use of these cores on both GPUs and TPUs. +""" + +import collections +from typing import List +from alphafold.model import quat_affine +import jax.numpy as jnp +import tree + +# Array of 3-component vectors, stored as individual array for +# each component. +Vecs = collections.namedtuple('Vecs', ['x', 'y', 'z']) + +# Array of 3x3 rotation matrices, stored as individual array for +# each component. +Rots = collections.namedtuple('Rots', ['xx', 'xy', 'xz', + 'yx', 'yy', 'yz', + 'zx', 'zy', 'zz']) +# Array of rigid 3D transformations, stored as array of rotations and +# array of translations. +Rigids = collections.namedtuple('Rigids', ['rot', 'trans']) + + +def squared_difference(x, y): + return jnp.square(x - y) + + +def invert_rigids(r: Rigids) -> Rigids: + """Computes group inverse of rigid transformations 'r'.""" + inv_rots = invert_rots(r.rot) + t = rots_mul_vecs(inv_rots, r.trans) + inv_trans = Vecs(-t.x, -t.y, -t.z) + return Rigids(inv_rots, inv_trans) + + +def invert_rots(m: Rots) -> Rots: + """Computes inverse of rotations 'm'.""" + return Rots(m.xx, m.yx, m.zx, + m.xy, m.yy, m.zy, + m.xz, m.yz, m.zz) + + +def rigids_from_3_points( + point_on_neg_x_axis: Vecs, # shape (...) + origin: Vecs, # shape (...) + point_on_xy_plane: Vecs, # shape (...) +) -> Rigids: # shape (...) + """Create Rigids from 3 points. + + Jumper et al. (2021) Suppl. Alg. 21 "rigidFrom3Points" + This creates a set of rigid transformations from 3 points by Gram Schmidt + orthogonalization. + + Args: + point_on_neg_x_axis: Vecs corresponding to points on the negative x axis + origin: Origin of resulting rigid transformations + point_on_xy_plane: Vecs corresponding to points in the xy plane + Returns: + Rigid transformations from global frame to local frames derived from + the input points. + """ + m = rots_from_two_vecs( + e0_unnormalized=vecs_sub(origin, point_on_neg_x_axis), + e1_unnormalized=vecs_sub(point_on_xy_plane, origin)) + + return Rigids(rot=m, trans=origin) + + +def rigids_from_list(l: List[jnp.ndarray]) -> Rigids: + """Converts flat list of arrays to rigid transformations.""" + assert len(l) == 12 + return Rigids(Rots(*(l[:9])), Vecs(*(l[9:]))) + + +def rigids_from_quataffine(a: quat_affine.QuatAffine) -> Rigids: + """Converts QuatAffine object to the corresponding Rigids object.""" + return Rigids(Rots(*tree.flatten(a.rotation)), + Vecs(*a.translation)) + + +def rigids_from_tensor4x4( + m: jnp.ndarray # shape (..., 4, 4) +) -> Rigids: # shape (...) + """Construct Rigids object from an 4x4 array. + + Here the 4x4 is representing the transformation in homogeneous coordinates. + + Args: + m: Array representing transformations in homogeneous coordinates. + Returns: + Rigids object corresponding to transformations m + """ + assert m.shape[-1] == 4 + assert m.shape[-2] == 4 + return Rigids( + Rots(m[..., 0, 0], m[..., 0, 1], m[..., 0, 2], + m[..., 1, 0], m[..., 1, 1], m[..., 1, 2], + m[..., 2, 0], m[..., 2, 1], m[..., 2, 2]), + Vecs(m[..., 0, 3], m[..., 1, 3], m[..., 2, 3])) + + +def rigids_from_tensor_flat9( + m: jnp.ndarray # shape (..., 9) +) -> Rigids: # shape (...) + """Flat9 encoding: first two columns of rotation matrix + translation.""" + assert m.shape[-1] == 9 + e0 = Vecs(m[..., 0], m[..., 1], m[..., 2]) + e1 = Vecs(m[..., 3], m[..., 4], m[..., 5]) + trans = Vecs(m[..., 6], m[..., 7], m[..., 8]) + return Rigids(rot=rots_from_two_vecs(e0, e1), + trans=trans) + + +def rigids_from_tensor_flat12( + m: jnp.ndarray # shape (..., 12) +) -> Rigids: # shape (...) + """Flat12 encoding: rotation matrix (9 floats) + translation (3 floats).""" + assert m.shape[-1] == 12 + x = jnp.moveaxis(m, -1, 0) # Unstack + return Rigids(Rots(*x[:9]), Vecs(*x[9:])) + + +def rigids_mul_rigids(a: Rigids, b: Rigids) -> Rigids: + """Group composition of Rigids 'a' and 'b'.""" + return Rigids( + rots_mul_rots(a.rot, b.rot), + vecs_add(a.trans, rots_mul_vecs(a.rot, b.trans))) + + +def rigids_mul_rots(r: Rigids, m: Rots) -> Rigids: + """Compose rigid transformations 'r' with rotations 'm'.""" + return Rigids(rots_mul_rots(r.rot, m), r.trans) + + +def rigids_mul_vecs(r: Rigids, v: Vecs) -> Vecs: + """Apply rigid transforms 'r' to points 'v'.""" + return vecs_add(rots_mul_vecs(r.rot, v), r.trans) + + +def rigids_to_list(r: Rigids) -> List[jnp.ndarray]: + """Turn Rigids into flat list, inverse of 'rigids_from_list'.""" + return list(r.rot) + list(r.trans) + + +def rigids_to_quataffine(r: Rigids) -> quat_affine.QuatAffine: + """Convert Rigids r into QuatAffine, inverse of 'rigids_from_quataffine'.""" + return quat_affine.QuatAffine( + quaternion=None, + rotation=[[r.rot.xx, r.rot.xy, r.rot.xz], + [r.rot.yx, r.rot.yy, r.rot.yz], + [r.rot.zx, r.rot.zy, r.rot.zz]], + translation=[r.trans.x, r.trans.y, r.trans.z]) + + +def rigids_to_tensor_flat9( + r: Rigids # shape (...) +) -> jnp.ndarray: # shape (..., 9) + """Flat9 encoding: first two columns of rotation matrix + translation.""" + return jnp.stack( + [r.rot.xx, r.rot.yx, r.rot.zx, r.rot.xy, r.rot.yy, r.rot.zy] + + list(r.trans), axis=-1) + + +def rigids_to_tensor_flat12( + r: Rigids # shape (...) +) -> jnp.ndarray: # shape (..., 12) + """Flat12 encoding: rotation matrix (9 floats) + translation (3 floats).""" + return jnp.stack(list(r.rot) + list(r.trans), axis=-1) + + +def rots_from_tensor3x3( + m: jnp.ndarray, # shape (..., 3, 3) +) -> Rots: # shape (...) + """Convert rotations represented as (3, 3) array to Rots.""" + assert m.shape[-1] == 3 + assert m.shape[-2] == 3 + return Rots(m[..., 0, 0], m[..., 0, 1], m[..., 0, 2], + m[..., 1, 0], m[..., 1, 1], m[..., 1, 2], + m[..., 2, 0], m[..., 2, 1], m[..., 2, 2]) + + +def rots_from_two_vecs(e0_unnormalized: Vecs, e1_unnormalized: Vecs) -> Rots: + """Create rotation matrices from unnormalized vectors for the x and y-axes. + + This creates a rotation matrix from two vectors using Gram-Schmidt + orthogonalization. + + Args: + e0_unnormalized: vectors lying along x-axis of resulting rotation + e1_unnormalized: vectors lying in xy-plane of resulting rotation + Returns: + Rotations resulting from Gram-Schmidt procedure. + """ + # Normalize the unit vector for the x-axis, e0. + e0 = vecs_robust_normalize(e0_unnormalized) + + # make e1 perpendicular to e0. + c = vecs_dot_vecs(e1_unnormalized, e0) + e1 = Vecs(e1_unnormalized.x - c * e0.x, + e1_unnormalized.y - c * e0.y, + e1_unnormalized.z - c * e0.z) + e1 = vecs_robust_normalize(e1) + + # Compute e2 as cross product of e0 and e1. + e2 = vecs_cross_vecs(e0, e1) + + return Rots(e0.x, e1.x, e2.x, e0.y, e1.y, e2.y, e0.z, e1.z, e2.z) + + +def rots_mul_rots(a: Rots, b: Rots) -> Rots: + """Composition of rotations 'a' and 'b'.""" + c0 = rots_mul_vecs(a, Vecs(b.xx, b.yx, b.zx)) + c1 = rots_mul_vecs(a, Vecs(b.xy, b.yy, b.zy)) + c2 = rots_mul_vecs(a, Vecs(b.xz, b.yz, b.zz)) + return Rots(c0.x, c1.x, c2.x, c0.y, c1.y, c2.y, c0.z, c1.z, c2.z) + + +def rots_mul_vecs(m: Rots, v: Vecs) -> Vecs: + """Apply rotations 'm' to vectors 'v'.""" + return Vecs(m.xx * v.x + m.xy * v.y + m.xz * v.z, + m.yx * v.x + m.yy * v.y + m.yz * v.z, + m.zx * v.x + m.zy * v.y + m.zz * v.z) + + +def vecs_add(v1: Vecs, v2: Vecs) -> Vecs: + """Add two vectors 'v1' and 'v2'.""" + return Vecs(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z) + + +def vecs_dot_vecs(v1: Vecs, v2: Vecs) -> jnp.ndarray: + """Dot product of vectors 'v1' and 'v2'.""" + return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z + + +def vecs_cross_vecs(v1: Vecs, v2: Vecs) -> Vecs: + """Cross product of vectors 'v1' and 'v2'.""" + return Vecs(v1.y * v2.z - v1.z * v2.y, + v1.z * v2.x - v1.x * v2.z, + v1.x * v2.y - v1.y * v2.x) + + +def vecs_from_tensor(x: jnp.ndarray # shape (..., 3) + ) -> Vecs: # shape (...) + """Converts from tensor of shape (3,) to Vecs.""" + num_components = x.shape[-1] + assert num_components == 3 + return Vecs(x[..., 0], x[..., 1], x[..., 2]) + + +def vecs_robust_normalize(v: Vecs, epsilon: float = 1e-8) -> Vecs: + """Normalizes vectors 'v'. + + Args: + v: vectors to be normalized. + epsilon: small regularizer added to squared norm before taking square root. + Returns: + normalized vectors + """ + norms = vecs_robust_norm(v, epsilon) + return Vecs(v.x / norms, v.y / norms, v.z / norms) + + +def vecs_robust_norm(v: Vecs, epsilon: float = 1e-8) -> jnp.ndarray: + """Computes norm of vectors 'v'. + + Args: + v: vectors to be normalized. + epsilon: small regularizer added to squared norm before taking square root. + Returns: + norm of 'v' + """ + return jnp.sqrt(jnp.square(v.x) + jnp.square(v.y) + jnp.square(v.z) + epsilon) + + +def vecs_sub(v1: Vecs, v2: Vecs) -> Vecs: + """Computes v1 - v2.""" + return Vecs(v1.x - v2.x, v1.y - v2.y, v1.z - v2.z) + + +def vecs_squared_distance(v1: Vecs, v2: Vecs) -> jnp.ndarray: + """Computes squared euclidean difference between 'v1' and 'v2'.""" + return (squared_difference(v1.x, v2.x) + + squared_difference(v1.y, v2.y) + + squared_difference(v1.z, v2.z)) + + +def vecs_to_tensor(v: Vecs # shape (...) + ) -> jnp.ndarray: # shape(..., 3) + """Converts 'v' to tensor with shape 3, inverse of 'vecs_from_tensor'.""" + return jnp.stack([v.x, v.y, v.z], axis=-1) diff --git a/alphafold/model/tf/__init__.py b/alphafold/model/tf/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6c520687f67754b0488690287f941854c8cf6133 --- /dev/null +++ b/alphafold/model/tf/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Alphafold model TensorFlow code.""" diff --git a/alphafold/model/tf/data_transforms.py b/alphafold/model/tf/data_transforms.py new file mode 100644 index 0000000000000000000000000000000000000000..7af966ef4b7cb469f2b817a16ad42eea50f31e18 --- /dev/null +++ b/alphafold/model/tf/data_transforms.py @@ -0,0 +1,625 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Data for AlphaFold.""" + +from alphafold.common import residue_constants +from alphafold.model.tf import shape_helpers +from alphafold.model.tf import shape_placeholders +from alphafold.model.tf import utils +import numpy as np +import tensorflow.compat.v1 as tf + +# Pylint gets confused by the curry1 decorator because it changes the number +# of arguments to the function. +# pylint:disable=no-value-for-parameter + + +NUM_RES = shape_placeholders.NUM_RES +NUM_MSA_SEQ = shape_placeholders.NUM_MSA_SEQ +NUM_EXTRA_SEQ = shape_placeholders.NUM_EXTRA_SEQ +NUM_TEMPLATES = shape_placeholders.NUM_TEMPLATES + + +def cast_64bit_ints(protein): + + for k, v in protein.items(): + if v.dtype == tf.int64: + protein[k] = tf.cast(v, tf.int32) + return protein + + +_MSA_FEATURE_NAMES = [ + 'msa', 'deletion_matrix', 'msa_mask', 'msa_row_mask', 'bert_mask', + 'true_msa' +] + + +def make_seq_mask(protein): + protein['seq_mask'] = tf.ones( + shape_helpers.shape_list(protein['aatype']), dtype=tf.float32) + return protein + + +def make_template_mask(protein): + protein['template_mask'] = tf.ones( + shape_helpers.shape_list(protein['template_domain_names']), + dtype=tf.float32) + return protein + + +def curry1(f): + """Supply all arguments but the first.""" + + def fc(*args, **kwargs): + return lambda x: f(x, *args, **kwargs) + + return fc + + +@curry1 +def add_distillation_flag(protein, distillation): + protein['is_distillation'] = tf.constant(float(distillation), + shape=[], + dtype=tf.float32) + return protein + + +def make_all_atom_aatype(protein): + protein['all_atom_aatype'] = protein['aatype'] + return protein + + +def fix_templates_aatype(protein): + """Fixes aatype encoding of templates.""" + # Map one-hot to indices. + protein['template_aatype'] = tf.argmax( + protein['template_aatype'], output_type=tf.int32, axis=-1) + # Map hhsearch-aatype to our aatype. + new_order_list = residue_constants.MAP_HHBLITS_AATYPE_TO_OUR_AATYPE + new_order = tf.constant(new_order_list, dtype=tf.int32) + protein['template_aatype'] = tf.gather(params=new_order, + indices=protein['template_aatype']) + return protein + + +def correct_msa_restypes(protein): + """Correct MSA restype to have the same order as residue_constants.""" + new_order_list = residue_constants.MAP_HHBLITS_AATYPE_TO_OUR_AATYPE + new_order = tf.constant(new_order_list, dtype=protein['msa'].dtype) + protein['msa'] = tf.gather(new_order, protein['msa'], axis=0) + + perm_matrix = np.zeros((22, 22), dtype=np.float32) + perm_matrix[range(len(new_order_list)), new_order_list] = 1. + + for k in protein: + if 'profile' in k: # Include both hhblits and psiblast profiles + num_dim = protein[k].shape.as_list()[-1] + assert num_dim in [20, 21, 22], ( + 'num_dim for %s out of expected range: %s' % (k, num_dim)) + protein[k] = tf.tensordot(protein[k], perm_matrix[:num_dim, :num_dim], 1) + return protein + + +def squeeze_features(protein): + """Remove singleton and repeated dimensions in protein features.""" + protein['aatype'] = tf.argmax( + protein['aatype'], axis=-1, output_type=tf.int32) + for k in [ + 'domain_name', 'msa', 'num_alignments', 'seq_length', 'sequence', + 'superfamily', 'deletion_matrix', 'resolution', + 'between_segment_residues', 'residue_index', 'template_all_atom_masks']: + if k in protein: + final_dim = shape_helpers.shape_list(protein[k])[-1] + if isinstance(final_dim, int) and final_dim == 1: + protein[k] = tf.squeeze(protein[k], axis=-1) + + for k in ['seq_length', 'num_alignments']: + if k in protein: + protein[k] = protein[k][0] # Remove fake sequence dimension + return protein + + +def make_random_crop_to_size_seed(protein): + """Random seed for cropping residues and templates.""" + protein['random_crop_to_size_seed'] = utils.make_random_seed() + return protein + + +@curry1 +def randomly_replace_msa_with_unknown(protein, replace_proportion): + """Replace a proportion of the MSA with 'X'.""" + msa_mask = (tf.random.uniform(shape_helpers.shape_list(protein['msa'])) < + replace_proportion) + x_idx = 20 + gap_idx = 21 + msa_mask = tf.logical_and(msa_mask, protein['msa'] != gap_idx) + protein['msa'] = tf.where(msa_mask, + tf.ones_like(protein['msa']) * x_idx, + protein['msa']) + aatype_mask = ( + tf.random.uniform(shape_helpers.shape_list(protein['aatype'])) < + replace_proportion) + + protein['aatype'] = tf.where(aatype_mask, + tf.ones_like(protein['aatype']) * x_idx, + protein['aatype']) + return protein + + +@curry1 +def sample_msa(protein, max_seq, keep_extra): + """Sample MSA randomly, remaining sequences are stored as `extra_*`. + + Args: + protein: batch to sample msa from. + max_seq: number of sequences to sample. + keep_extra: When True sequences not sampled are put into fields starting + with 'extra_*'. + + Returns: + Protein with sampled msa. + """ + num_seq = tf.shape(protein['msa'])[0] + shuffled = tf.random_shuffle(tf.range(1, num_seq)) + index_order = tf.concat([[0], shuffled], axis=0) + num_sel = tf.minimum(max_seq, num_seq) + + sel_seq, not_sel_seq = tf.split(index_order, [num_sel, num_seq - num_sel]) + + for k in _MSA_FEATURE_NAMES: + if k in protein: + if keep_extra: + protein['extra_' + k] = tf.gather(protein[k], not_sel_seq) + protein[k] = tf.gather(protein[k], sel_seq) + + return protein + + +@curry1 +def crop_extra_msa(protein, max_extra_msa): + """MSA features are cropped so only `max_extra_msa` sequences are kept.""" + num_seq = tf.shape(protein['extra_msa'])[0] + num_sel = tf.minimum(max_extra_msa, num_seq) + select_indices = tf.random_shuffle(tf.range(0, num_seq))[:num_sel] + for k in _MSA_FEATURE_NAMES: + if 'extra_' + k in protein: + protein['extra_' + k] = tf.gather(protein['extra_' + k], select_indices) + + return protein + + +def delete_extra_msa(protein): + for k in _MSA_FEATURE_NAMES: + if 'extra_' + k in protein: + del protein['extra_' + k] + return protein + + +@curry1 +def block_delete_msa(protein, config): + """Sample MSA by deleting contiguous blocks. + + Jumper et al. (2021) Suppl. Alg. 1 "MSABlockDeletion" + + Arguments: + protein: batch dict containing the msa + config: ConfigDict with parameters + + Returns: + updated protein + """ + num_seq = shape_helpers.shape_list(protein['msa'])[0] + block_num_seq = tf.cast( + tf.floor(tf.cast(num_seq, tf.float32) * config.msa_fraction_per_block), + tf.int32) + + if config.randomize_num_blocks: + nb = tf.random.uniform([], 0, config.num_blocks + 1, dtype=tf.int32) + else: + nb = config.num_blocks + + del_block_starts = tf.random.uniform([nb], 0, num_seq, dtype=tf.int32) + del_blocks = del_block_starts[:, None] + tf.range(block_num_seq) + del_blocks = tf.clip_by_value(del_blocks, 0, num_seq - 1) + del_indices = tf.unique(tf.sort(tf.reshape(del_blocks, [-1])))[0] + + # Make sure we keep the original sequence + sparse_diff = tf.sets.difference(tf.range(1, num_seq)[None], + del_indices[None]) + keep_indices = tf.squeeze(tf.sparse.to_dense(sparse_diff), 0) + keep_indices = tf.concat([[0], keep_indices], axis=0) + + for k in _MSA_FEATURE_NAMES: + if k in protein: + protein[k] = tf.gather(protein[k], keep_indices) + + return protein + + +@curry1 +def nearest_neighbor_clusters(protein, gap_agreement_weight=0.): + """Assign each extra MSA sequence to its nearest neighbor in sampled MSA.""" + + # Determine how much weight we assign to each agreement. In theory, we could + # use a full blosum matrix here, but right now let's just down-weight gap + # agreement because it could be spurious. + # Never put weight on agreeing on BERT mask + weights = tf.concat([ + tf.ones(21), + gap_agreement_weight * tf.ones(1), + np.zeros(1)], 0) + + # Make agreement score as weighted Hamming distance + sample_one_hot = (protein['msa_mask'][:, :, None] * + tf.one_hot(protein['msa'], 23)) + extra_one_hot = (protein['extra_msa_mask'][:, :, None] * + tf.one_hot(protein['extra_msa'], 23)) + + num_seq, num_res, _ = shape_helpers.shape_list(sample_one_hot) + extra_num_seq, _, _ = shape_helpers.shape_list(extra_one_hot) + + # Compute tf.einsum('mrc,nrc,c->mn', sample_one_hot, extra_one_hot, weights) + # in an optimized fashion to avoid possible memory or computation blowup. + agreement = tf.matmul( + tf.reshape(extra_one_hot, [extra_num_seq, num_res * 23]), + tf.reshape(sample_one_hot * weights, [num_seq, num_res * 23]), + transpose_b=True) + + # Assign each sequence in the extra sequences to the closest MSA sample + protein['extra_cluster_assignment'] = tf.argmax( + agreement, axis=1, output_type=tf.int32) + + return protein + + +@curry1 +def summarize_clusters(protein): + """Produce profile and deletion_matrix_mean within each cluster.""" + num_seq = shape_helpers.shape_list(protein['msa'])[0] + def csum(x): + return tf.math.unsorted_segment_sum( + x, protein['extra_cluster_assignment'], num_seq) + + mask = protein['extra_msa_mask'] + mask_counts = 1e-6 + protein['msa_mask'] + csum(mask) # Include center + + msa_sum = csum(mask[:, :, None] * tf.one_hot(protein['extra_msa'], 23)) + msa_sum += tf.one_hot(protein['msa'], 23) # Original sequence + protein['cluster_profile'] = msa_sum / mask_counts[:, :, None] + + del msa_sum + + del_sum = csum(mask * protein['extra_deletion_matrix']) + del_sum += protein['deletion_matrix'] # Original sequence + protein['cluster_deletion_mean'] = del_sum / mask_counts + del del_sum + + return protein + + +def make_msa_mask(protein): + """Mask features are all ones, but will later be zero-padded.""" + protein['msa_mask'] = tf.ones( + shape_helpers.shape_list(protein['msa']), dtype=tf.float32) + protein['msa_row_mask'] = tf.ones( + shape_helpers.shape_list(protein['msa'])[0], dtype=tf.float32) + return protein + + +def pseudo_beta_fn(aatype, all_atom_positions, all_atom_masks): + """Create pseudo beta features.""" + is_gly = tf.equal(aatype, residue_constants.restype_order['G']) + ca_idx = residue_constants.atom_order['CA'] + cb_idx = residue_constants.atom_order['CB'] + pseudo_beta = tf.where( + tf.tile(is_gly[..., None], [1] * len(is_gly.shape) + [3]), + all_atom_positions[..., ca_idx, :], + all_atom_positions[..., cb_idx, :]) + + if all_atom_masks is not None: + pseudo_beta_mask = tf.where( + is_gly, all_atom_masks[..., ca_idx], all_atom_masks[..., cb_idx]) + pseudo_beta_mask = tf.cast(pseudo_beta_mask, tf.float32) + return pseudo_beta, pseudo_beta_mask + else: + return pseudo_beta + + +@curry1 +def make_pseudo_beta(protein, prefix=''): + """Create pseudo-beta (alpha for glycine) position and mask.""" + assert prefix in ['', 'template_'] + protein[prefix + 'pseudo_beta'], protein[prefix + 'pseudo_beta_mask'] = ( + pseudo_beta_fn( + protein['template_aatype' if prefix else 'all_atom_aatype'], + protein[prefix + 'all_atom_positions'], + protein['template_all_atom_masks' if prefix else 'all_atom_mask'])) + return protein + + +@curry1 +def add_constant_field(protein, key, value): + protein[key] = tf.convert_to_tensor(value) + return protein + + +def shaped_categorical(probs, epsilon=1e-10): + ds = shape_helpers.shape_list(probs) + num_classes = ds[-1] + counts = tf.random.categorical( + tf.reshape(tf.log(probs + epsilon), [-1, num_classes]), + 1, + dtype=tf.int32) + return tf.reshape(counts, ds[:-1]) + + +def make_hhblits_profile(protein): + """Compute the HHblits MSA profile if not already present.""" + if 'hhblits_profile' in protein: + return protein + + # Compute the profile for every residue (over all MSA sequences). + protein['hhblits_profile'] = tf.reduce_mean( + tf.one_hot(protein['msa'], 22), axis=0) + return protein + + +@curry1 +def make_masked_msa(protein, config, replace_fraction): + """Create data for BERT on raw MSA.""" + # Add a random amino acid uniformly + random_aa = tf.constant([0.05] * 20 + [0., 0.], dtype=tf.float32) + + categorical_probs = ( + config.uniform_prob * random_aa + + config.profile_prob * protein['hhblits_profile'] + + config.same_prob * tf.one_hot(protein['msa'], 22)) + + # Put all remaining probability on [MASK] which is a new column + pad_shapes = [[0, 0] for _ in range(len(categorical_probs.shape))] + pad_shapes[-1][1] = 1 + mask_prob = 1. - config.profile_prob - config.same_prob - config.uniform_prob + assert mask_prob >= 0. + categorical_probs = tf.pad( + categorical_probs, pad_shapes, constant_values=mask_prob) + + sh = shape_helpers.shape_list(protein['msa']) + mask_position = tf.random.uniform(sh) < replace_fraction + + bert_msa = shaped_categorical(categorical_probs) + bert_msa = tf.where(mask_position, bert_msa, protein['msa']) + + # Mix real and masked MSA + protein['bert_mask'] = tf.cast(mask_position, tf.float32) + protein['true_msa'] = protein['msa'] + protein['msa'] = bert_msa + + return protein + + +@curry1 +def make_fixed_size(protein, shape_schema, msa_cluster_size, extra_msa_size, + num_res, num_templates=0): + """Guess at the MSA and sequence dimensions to make fixed size.""" + + pad_size_map = { + NUM_RES: num_res, + NUM_MSA_SEQ: msa_cluster_size, + NUM_EXTRA_SEQ: extra_msa_size, + NUM_TEMPLATES: num_templates, + } + + for k, v in protein.items(): + # Don't transfer this to the accelerator. + if k == 'extra_cluster_assignment': + continue + shape = v.shape.as_list() + schema = shape_schema[k] + assert len(shape) == len(schema), ( + f'Rank mismatch between shape and shape schema for {k}: ' + f'{shape} vs {schema}') + pad_size = [ + pad_size_map.get(s2, None) or s1 for (s1, s2) in zip(shape, schema) + ] + padding = [(0, p - tf.shape(v)[i]) for i, p in enumerate(pad_size)] + if padding: + protein[k] = tf.pad( + v, padding, name=f'pad_to_fixed_{k}') + protein[k].set_shape(pad_size) + + return protein + + +@curry1 +def make_msa_feat(protein): + """Create and concatenate MSA features.""" + # Whether there is a domain break. Always zero for chains, but keeping + # for compatibility with domain datasets. + has_break = tf.clip_by_value( + tf.cast(protein['between_segment_residues'], tf.float32), + 0, 1) + aatype_1hot = tf.one_hot(protein['aatype'], 21, axis=-1) + + target_feat = [ + tf.expand_dims(has_break, axis=-1), + aatype_1hot, # Everyone gets the original sequence. + ] + + msa_1hot = tf.one_hot(protein['msa'], 23, axis=-1) + has_deletion = tf.clip_by_value(protein['deletion_matrix'], 0., 1.) + deletion_value = tf.atan(protein['deletion_matrix'] / 3.) * (2. / np.pi) + + msa_feat = [ + msa_1hot, + tf.expand_dims(has_deletion, axis=-1), + tf.expand_dims(deletion_value, axis=-1), + ] + + if 'cluster_profile' in protein: + deletion_mean_value = ( + tf.atan(protein['cluster_deletion_mean'] / 3.) * (2. / np.pi)) + msa_feat.extend([ + protein['cluster_profile'], + tf.expand_dims(deletion_mean_value, axis=-1), + ]) + + if 'extra_deletion_matrix' in protein: + protein['extra_has_deletion'] = tf.clip_by_value( + protein['extra_deletion_matrix'], 0., 1.) + protein['extra_deletion_value'] = tf.atan( + protein['extra_deletion_matrix'] / 3.) * (2. / np.pi) + + protein['msa_feat'] = tf.concat(msa_feat, axis=-1) + protein['target_feat'] = tf.concat(target_feat, axis=-1) + return protein + + +@curry1 +def select_feat(protein, feature_list): + return {k: v for k, v in protein.items() if k in feature_list} + + +@curry1 +def crop_templates(protein, max_templates): + for k, v in protein.items(): + if k.startswith('template_'): + protein[k] = v[:max_templates] + return protein + + +@curry1 +def random_crop_to_size(protein, crop_size, max_templates, shape_schema, + subsample_templates=False): + """Crop randomly to `crop_size`, or keep as is if shorter than that.""" + seq_length = protein['seq_length'] + if 'template_mask' in protein: + num_templates = tf.cast( + shape_helpers.shape_list(protein['template_mask'])[0], tf.int32) + else: + num_templates = tf.constant(0, dtype=tf.int32) + num_res_crop_size = tf.math.minimum(seq_length, crop_size) + + # Ensures that the cropping of residues and templates happens in the same way + # across ensembling iterations. + # Do not use for randomness that should vary in ensembling. + seed_maker = utils.SeedMaker(initial_seed=protein['random_crop_to_size_seed']) + + if subsample_templates: + templates_crop_start = tf.random.stateless_uniform( + shape=(), minval=0, maxval=num_templates + 1, dtype=tf.int32, + seed=seed_maker()) + else: + templates_crop_start = 0 + + num_templates_crop_size = tf.math.minimum( + num_templates - templates_crop_start, max_templates) + + num_res_crop_start = tf.random.stateless_uniform( + shape=(), minval=0, maxval=seq_length - num_res_crop_size + 1, + dtype=tf.int32, seed=seed_maker()) + + templates_select_indices = tf.argsort(tf.random.stateless_uniform( + [num_templates], seed=seed_maker())) + + for k, v in protein.items(): + if k not in shape_schema or ( + 'template' not in k and NUM_RES not in shape_schema[k]): + continue + + # randomly permute the templates before cropping them. + if k.startswith('template') and subsample_templates: + v = tf.gather(v, templates_select_indices) + + crop_sizes = [] + crop_starts = [] + for i, (dim_size, dim) in enumerate(zip(shape_schema[k], + shape_helpers.shape_list(v))): + is_num_res = (dim_size == NUM_RES) + if i == 0 and k.startswith('template'): + crop_size = num_templates_crop_size + crop_start = templates_crop_start + else: + crop_start = num_res_crop_start if is_num_res else 0 + crop_size = (num_res_crop_size if is_num_res else + (-1 if dim is None else dim)) + crop_sizes.append(crop_size) + crop_starts.append(crop_start) + protein[k] = tf.slice(v, crop_starts, crop_sizes) + + protein['seq_length'] = num_res_crop_size + return protein + + +def make_atom14_masks(protein): + """Construct denser atom positions (14 dimensions instead of 37).""" + restype_atom14_to_atom37 = [] # mapping (restype, atom14) --> atom37 + restype_atom37_to_atom14 = [] # mapping (restype, atom37) --> atom14 + restype_atom14_mask = [] + + for rt in residue_constants.restypes: + atom_names = residue_constants.restype_name_to_atom14_names[ + residue_constants.restype_1to3[rt]] + + restype_atom14_to_atom37.append([ + (residue_constants.atom_order[name] if name else 0) + for name in atom_names + ]) + + atom_name_to_idx14 = {name: i for i, name in enumerate(atom_names)} + restype_atom37_to_atom14.append([ + (atom_name_to_idx14[name] if name in atom_name_to_idx14 else 0) + for name in residue_constants.atom_types + ]) + + restype_atom14_mask.append([(1. if name else 0.) for name in atom_names]) + + # Add dummy mapping for restype 'UNK' + restype_atom14_to_atom37.append([0] * 14) + restype_atom37_to_atom14.append([0] * 37) + restype_atom14_mask.append([0.] * 14) + + restype_atom14_to_atom37 = np.array(restype_atom14_to_atom37, dtype=np.int32) + restype_atom37_to_atom14 = np.array(restype_atom37_to_atom14, dtype=np.int32) + restype_atom14_mask = np.array(restype_atom14_mask, dtype=np.float32) + + # create the mapping for (residx, atom14) --> atom37, i.e. an array + # with shape (num_res, 14) containing the atom37 indices for this protein + residx_atom14_to_atom37 = tf.gather(restype_atom14_to_atom37, + protein['aatype']) + residx_atom14_mask = tf.gather(restype_atom14_mask, + protein['aatype']) + + protein['atom14_atom_exists'] = residx_atom14_mask + protein['residx_atom14_to_atom37'] = residx_atom14_to_atom37 + + # create the gather indices for mapping back + residx_atom37_to_atom14 = tf.gather(restype_atom37_to_atom14, + protein['aatype']) + protein['residx_atom37_to_atom14'] = residx_atom37_to_atom14 + + # create the corresponding mask + restype_atom37_mask = np.zeros([21, 37], dtype=np.float32) + for restype, restype_letter in enumerate(residue_constants.restypes): + restype_name = residue_constants.restype_1to3[restype_letter] + atom_names = residue_constants.residue_atoms[restype_name] + for atom_name in atom_names: + atom_type = residue_constants.atom_order[atom_name] + restype_atom37_mask[restype, atom_type] = 1 + + residx_atom37_mask = tf.gather(restype_atom37_mask, + protein['aatype']) + protein['atom37_atom_exists'] = residx_atom37_mask + + return protein diff --git a/alphafold/model/tf/input_pipeline.py b/alphafold/model/tf/input_pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..e9a9bc3a8aa15316aa88c3947120883be869331e --- /dev/null +++ b/alphafold/model/tf/input_pipeline.py @@ -0,0 +1,166 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Feature pre-processing input pipeline for AlphaFold.""" + +from alphafold.model.tf import data_transforms +from alphafold.model.tf import shape_placeholders +import tensorflow.compat.v1 as tf +import tree + +# Pylint gets confused by the curry1 decorator because it changes the number +# of arguments to the function. +# pylint:disable=no-value-for-parameter + + +NUM_RES = shape_placeholders.NUM_RES +NUM_MSA_SEQ = shape_placeholders.NUM_MSA_SEQ +NUM_EXTRA_SEQ = shape_placeholders.NUM_EXTRA_SEQ +NUM_TEMPLATES = shape_placeholders.NUM_TEMPLATES + + +def nonensembled_map_fns(data_config): + """Input pipeline functions which are not ensembled.""" + common_cfg = data_config.common + + map_fns = [ + data_transforms.correct_msa_restypes, + data_transforms.add_distillation_flag(False), + data_transforms.cast_64bit_ints, + data_transforms.squeeze_features, + # Keep to not disrupt RNG. + data_transforms.randomly_replace_msa_with_unknown(0.0), + data_transforms.make_seq_mask, + data_transforms.make_msa_mask, + # Compute the HHblits profile if it's not set. This has to be run before + # sampling the MSA. + data_transforms.make_hhblits_profile, + data_transforms.make_random_crop_to_size_seed, + ] + if common_cfg.use_templates: + map_fns.extend([ + data_transforms.fix_templates_aatype, + data_transforms.make_template_mask, + data_transforms.make_pseudo_beta('template_') + ]) + map_fns.extend([ + data_transforms.make_atom14_masks, + ]) + + return map_fns + + +def ensembled_map_fns(data_config): + """Input pipeline functions that can be ensembled and averaged.""" + common_cfg = data_config.common + eval_cfg = data_config.eval + + map_fns = [] + + if common_cfg.reduce_msa_clusters_by_max_templates: + pad_msa_clusters = eval_cfg.max_msa_clusters - eval_cfg.max_templates + else: + pad_msa_clusters = eval_cfg.max_msa_clusters + + max_msa_clusters = pad_msa_clusters + max_extra_msa = common_cfg.max_extra_msa + + map_fns.append( + data_transforms.sample_msa( + max_msa_clusters, + keep_extra=True)) + + if 'masked_msa' in common_cfg: + # Masked MSA should come *before* MSA clustering so that + # the clustering and full MSA profile do not leak information about + # the masked locations and secret corrupted locations. + map_fns.append( + data_transforms.make_masked_msa(common_cfg.masked_msa, + eval_cfg.masked_msa_replace_fraction)) + + if common_cfg.msa_cluster_features: + map_fns.append(data_transforms.nearest_neighbor_clusters()) + map_fns.append(data_transforms.summarize_clusters()) + + # Crop after creating the cluster profiles. + if max_extra_msa: + map_fns.append(data_transforms.crop_extra_msa(max_extra_msa)) + else: + map_fns.append(data_transforms.delete_extra_msa) + + map_fns.append(data_transforms.make_msa_feat()) + + crop_feats = dict(eval_cfg.feat) + + if eval_cfg.fixed_size: + map_fns.append(data_transforms.select_feat(list(crop_feats))) + map_fns.append(data_transforms.random_crop_to_size( + eval_cfg.crop_size, + eval_cfg.max_templates, + crop_feats, + eval_cfg.subsample_templates)) + map_fns.append(data_transforms.make_fixed_size( + crop_feats, + pad_msa_clusters, + common_cfg.max_extra_msa, + eval_cfg.crop_size, + eval_cfg.max_templates)) + else: + map_fns.append(data_transforms.crop_templates(eval_cfg.max_templates)) + + return map_fns + + +def process_tensors_from_config(tensors, data_config): + """Apply filters and maps to an existing dataset, based on the config.""" + + def wrap_ensemble_fn(data, i): + """Function to be mapped over the ensemble dimension.""" + d = data.copy() + fns = ensembled_map_fns(data_config) + fn = compose(fns) + d['ensemble_index'] = i + return fn(d) + + eval_cfg = data_config.eval + tensors = compose( + nonensembled_map_fns( + data_config))( + tensors) + + tensors_0 = wrap_ensemble_fn(tensors, tf.constant(0)) + num_ensemble = eval_cfg.num_ensemble + if data_config.common.resample_msa_in_recycling: + # Separate batch per ensembling & recycling step. + num_ensemble *= data_config.common.num_recycle + 1 + + if isinstance(num_ensemble, tf.Tensor) or num_ensemble > 1: + fn_output_signature = tree.map_structure( + tf.TensorSpec.from_tensor, tensors_0) + tensors = tf.map_fn( + lambda x: wrap_ensemble_fn(tensors, x), + tf.range(num_ensemble), + parallel_iterations=1, + fn_output_signature=fn_output_signature) + else: + tensors = tree.map_structure(lambda x: x[None], + tensors_0) + return tensors + + +@data_transforms.curry1 +def compose(x, fs): + for f in fs: + x = f(x) + return x diff --git a/alphafold/model/tf/protein_features.py b/alphafold/model/tf/protein_features.py new file mode 100644 index 0000000000000000000000000000000000000000..c78cfa5ea50baa63f9fabcb3bc7c7b66d10a1fa0 --- /dev/null +++ b/alphafold/model/tf/protein_features.py @@ -0,0 +1,129 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Contains descriptions of various protein features.""" +import enum +from typing import Dict, Optional, Sequence, Tuple, Union +from alphafold.common import residue_constants +import tensorflow.compat.v1 as tf + +# Type aliases. +FeaturesMetadata = Dict[str, Tuple[tf.dtypes.DType, Sequence[Union[str, int]]]] + + +class FeatureType(enum.Enum): + ZERO_DIM = 0 # Shape [x] + ONE_DIM = 1 # Shape [num_res, x] + TWO_DIM = 2 # Shape [num_res, num_res, x] + MSA = 3 # Shape [msa_length, num_res, x] + + +# Placeholder values that will be replaced with their true value at runtime. +NUM_RES = "num residues placeholder" +NUM_SEQ = "length msa placeholder" +NUM_TEMPLATES = "num templates placeholder" +# Sizes of the protein features, NUM_RES and NUM_SEQ are allowed as placeholders +# to be replaced with the number of residues and the number of sequences in the +# multiple sequence alignment, respectively. + + +FEATURES = { + #### Static features of a protein sequence #### + "aatype": (tf.float32, [NUM_RES, 21]), + "between_segment_residues": (tf.int64, [NUM_RES, 1]), + "deletion_matrix": (tf.float32, [NUM_SEQ, NUM_RES, 1]), + "domain_name": (tf.string, [1]), + "msa": (tf.int64, [NUM_SEQ, NUM_RES, 1]), + "num_alignments": (tf.int64, [NUM_RES, 1]), + "residue_index": (tf.int64, [NUM_RES, 1]), + "seq_length": (tf.int64, [NUM_RES, 1]), + "sequence": (tf.string, [1]), + "all_atom_positions": (tf.float32, + [NUM_RES, residue_constants.atom_type_num, 3]), + "all_atom_mask": (tf.int64, [NUM_RES, residue_constants.atom_type_num]), + "resolution": (tf.float32, [1]), + "template_domain_names": (tf.string, [NUM_TEMPLATES]), + "template_sum_probs": (tf.float32, [NUM_TEMPLATES, 1]), + "template_aatype": (tf.float32, [NUM_TEMPLATES, NUM_RES, 22]), + "template_all_atom_positions": (tf.float32, [ + NUM_TEMPLATES, NUM_RES, residue_constants.atom_type_num, 3 + ]), + "template_all_atom_masks": (tf.float32, [ + NUM_TEMPLATES, NUM_RES, residue_constants.atom_type_num, 1 + ]), +} + +FEATURE_TYPES = {k: v[0] for k, v in FEATURES.items()} +FEATURE_SIZES = {k: v[1] for k, v in FEATURES.items()} + + +def register_feature(name: str, + type_: tf.dtypes.DType, + shape_: Tuple[Union[str, int]]): + """Register extra features used in custom datasets.""" + FEATURES[name] = (type_, shape_) + FEATURE_TYPES[name] = type_ + FEATURE_SIZES[name] = shape_ + + +def shape(feature_name: str, + num_residues: int, + msa_length: int, + num_templates: Optional[int] = None, + features: Optional[FeaturesMetadata] = None): + """Get the shape for the given feature name. + + This is near identical to _get_tf_shape_no_placeholders() but with 2 + differences: + * This method does not calculate a single placeholder from the total number of + elements (eg given <NUM_RES, 3> and size := 12, this won't deduce NUM_RES + must be 4) + * This method will work with tensors + + Args: + feature_name: String identifier for the feature. If the feature name ends + with "_unnormalized", this suffix is stripped off. + num_residues: The number of residues in the current domain - some elements + of the shape can be dynamic and will be replaced by this value. + msa_length: The number of sequences in the multiple sequence alignment, some + elements of the shape can be dynamic and will be replaced by this value. + If the number of alignments is unknown / not read, please pass None for + msa_length. + num_templates (optional): The number of templates in this tfexample. + features: A feature_name to (tf_dtype, shape) lookup; defaults to FEATURES. + + Returns: + List of ints representation the tensor size. + + Raises: + ValueError: If a feature is requested but no concrete placeholder value is + given. + """ + features = features or FEATURES + if feature_name.endswith("_unnormalized"): + feature_name = feature_name[:-13] + + unused_dtype, raw_sizes = features[feature_name] + replacements = {NUM_RES: num_residues, + NUM_SEQ: msa_length} + + if num_templates is not None: + replacements[NUM_TEMPLATES] = num_templates + + sizes = [replacements.get(dimension, dimension) for dimension in raw_sizes] + for dimension in sizes: + if isinstance(dimension, str): + raise ValueError("Could not parse %s (shape: %s) with values: %s" % ( + feature_name, raw_sizes, replacements)) + return sizes diff --git a/alphafold/model/tf/protein_features_test.py b/alphafold/model/tf/protein_features_test.py new file mode 100644 index 0000000000000000000000000000000000000000..f5a351ba863584222272318f10304e9707fe3edf --- /dev/null +++ b/alphafold/model/tf/protein_features_test.py @@ -0,0 +1,54 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for protein_features.""" +import uuid + +from absl.testing import absltest +from absl.testing import parameterized +from alphafold.model.tf import protein_features +import tensorflow.compat.v1 as tf + + +def _random_bytes(): + return str(uuid.uuid4()).encode('utf-8') + + +class FeaturesTest(parameterized.TestCase, tf.test.TestCase): + + def setUp(self): + super().setUp() + tf.disable_v2_behavior() + + def testFeatureNames(self): + self.assertEqual(len(protein_features.FEATURE_SIZES), + len(protein_features.FEATURE_TYPES)) + sorted_size_names = sorted(protein_features.FEATURE_SIZES.keys()) + sorted_type_names = sorted(protein_features.FEATURE_TYPES.keys()) + for i, size_name in enumerate(sorted_size_names): + self.assertEqual(size_name, sorted_type_names[i]) + + def testReplacement(self): + for name in protein_features.FEATURE_SIZES.keys(): + sizes = protein_features.shape(name, + num_residues=12, + msa_length=24, + num_templates=3) + for x in sizes: + self.assertEqual(type(x), int) + self.assertGreater(x, 0) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/model/tf/proteins_dataset.py b/alphafold/model/tf/proteins_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..e0b1c038a41c6e276275a7904e748ea9e31e6083 --- /dev/null +++ b/alphafold/model/tf/proteins_dataset.py @@ -0,0 +1,166 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Datasets consisting of proteins.""" +from typing import Dict, Mapping, Optional, Sequence +from alphafold.model.tf import protein_features +import numpy as np +import tensorflow.compat.v1 as tf + +TensorDict = Dict[str, tf.Tensor] + + +def parse_tfexample( + raw_data: bytes, + features: protein_features.FeaturesMetadata, + key: Optional[str] = None) -> Dict[str, tf.train.Feature]: + """Read a single TF Example proto and return a subset of its features. + + Args: + raw_data: A serialized tf.Example proto. + features: A dictionary of features, mapping string feature names to a tuple + (dtype, shape). This dictionary should be a subset of + protein_features.FEATURES (or the dictionary itself for all features). + key: Optional string with the SSTable key of that tf.Example. This will be + added into features as a 'key' but only if requested in features. + + Returns: + A dictionary of features mapping feature names to features. Only the given + features are returned, all other ones are filtered out. + """ + feature_map = { + k: tf.io.FixedLenSequenceFeature(shape=(), dtype=v[0], allow_missing=True) + for k, v in features.items() + } + parsed_features = tf.io.parse_single_example(raw_data, feature_map) + reshaped_features = parse_reshape_logic(parsed_features, features, key=key) + + return reshaped_features + + +def _first(tensor: tf.Tensor) -> tf.Tensor: + """Returns the 1st element - the input can be a tensor or a scalar.""" + return tf.reshape(tensor, shape=(-1,))[0] + + +def parse_reshape_logic( + parsed_features: TensorDict, + features: protein_features.FeaturesMetadata, + key: Optional[str] = None) -> TensorDict: + """Transforms parsed serial features to the correct shape.""" + # Find out what is the number of sequences and the number of alignments. + num_residues = tf.cast(_first(parsed_features["seq_length"]), dtype=tf.int32) + + if "num_alignments" in parsed_features: + num_msa = tf.cast(_first(parsed_features["num_alignments"]), dtype=tf.int32) + else: + num_msa = 0 + + if "template_domain_names" in parsed_features: + num_templates = tf.cast( + tf.shape(parsed_features["template_domain_names"])[0], dtype=tf.int32) + else: + num_templates = 0 + + if key is not None and "key" in features: + parsed_features["key"] = [key] # Expand dims from () to (1,). + + # Reshape the tensors according to the sequence length and num alignments. + for k, v in parsed_features.items(): + new_shape = protein_features.shape( + feature_name=k, + num_residues=num_residues, + msa_length=num_msa, + num_templates=num_templates, + features=features) + new_shape_size = tf.constant(1, dtype=tf.int32) + for dim in new_shape: + new_shape_size *= tf.cast(dim, tf.int32) + + assert_equal = tf.assert_equal( + tf.size(v), new_shape_size, + name="assert_%s_shape_correct" % k, + message="The size of feature %s (%s) could not be reshaped " + "into %s" % (k, tf.size(v), new_shape)) + if "template" not in k: + # Make sure the feature we are reshaping is not empty. + assert_non_empty = tf.assert_greater( + tf.size(v), 0, name="assert_%s_non_empty" % k, + message="The feature %s is not set in the tf.Example. Either do not " + "request the feature or use a tf.Example that has the " + "feature set." % k) + with tf.control_dependencies([assert_non_empty, assert_equal]): + parsed_features[k] = tf.reshape(v, new_shape, name="reshape_%s" % k) + else: + with tf.control_dependencies([assert_equal]): + parsed_features[k] = tf.reshape(v, new_shape, name="reshape_%s" % k) + + return parsed_features + + +def _make_features_metadata( + feature_names: Sequence[str]) -> protein_features.FeaturesMetadata: + """Makes a feature name to type and shape mapping from a list of names.""" + # Make sure these features are always read. + required_features = ["aatype", "sequence", "seq_length"] + feature_names = list(set(feature_names) | set(required_features)) + + features_metadata = {name: protein_features.FEATURES[name] + for name in feature_names} + return features_metadata + + +def create_tensor_dict( + raw_data: bytes, + features: Sequence[str], + key: Optional[str] = None, + ) -> TensorDict: + """Creates a dictionary of tensor features. + + Args: + raw_data: A serialized tf.Example proto. + features: A list of strings of feature names to be returned in the dataset. + key: Optional string with the SSTable key of that tf.Example. This will be + added into features as a 'key' but only if requested in features. + + Returns: + A dictionary of features mapping feature names to features. Only the given + features are returned, all other ones are filtered out. + """ + features_metadata = _make_features_metadata(features) + return parse_tfexample(raw_data, features_metadata, key) + + +def np_to_tensor_dict( + np_example: Mapping[str, np.ndarray], + features: Sequence[str], + ) -> TensorDict: + """Creates dict of tensors from a dict of NumPy arrays. + + Args: + np_example: A dict of NumPy feature arrays. + features: A list of strings of feature names to be returned in the dataset. + + Returns: + A dictionary of features mapping feature names to features. Only the given + features are returned, all other ones are filtered out. + """ + features_metadata = _make_features_metadata(features) + tensor_dict = {k: tf.constant(v) for k, v in np_example.items() + if k in features_metadata} + + # Ensures shapes are as expected. Needed for setting size of empty features + # e.g. when no template hits were found. + tensor_dict = parse_reshape_logic(tensor_dict, features_metadata) + return tensor_dict diff --git a/alphafold/model/tf/shape_helpers.py b/alphafold/model/tf/shape_helpers.py new file mode 100644 index 0000000000000000000000000000000000000000..be2926a63bce7ca5db3effe63d5264620aa1dcf8 --- /dev/null +++ b/alphafold/model/tf/shape_helpers.py @@ -0,0 +1,47 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Utilities for dealing with shapes of TensorFlow tensors.""" +import tensorflow.compat.v1 as tf + + +def shape_list(x): + """Return list of dimensions of a tensor, statically where possible. + + Like `x.shape.as_list()` but with tensors instead of `None`s. + + Args: + x: A tensor. + Returns: + A list with length equal to the rank of the tensor. The n-th element of the + list is an integer when that dimension is statically known otherwise it is + the n-th element of `tf.shape(x)`. + """ + x = tf.convert_to_tensor(x) + + # If unknown rank, return dynamic shape + if x.get_shape().dims is None: + return tf.shape(x) + + static = x.get_shape().as_list() + shape = tf.shape(x) + + ret = [] + for i in range(len(static)): + dim = static[i] + if dim is None: + dim = shape[i] + ret.append(dim) + return ret + diff --git a/alphafold/model/tf/shape_helpers_test.py b/alphafold/model/tf/shape_helpers_test.py new file mode 100644 index 0000000000000000000000000000000000000000..16c032bae89db6320f27920f1715159f2319231d --- /dev/null +++ b/alphafold/model/tf/shape_helpers_test.py @@ -0,0 +1,42 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for shape_helpers.""" + +from alphafold.model.tf import shape_helpers +import numpy as np +import tensorflow.compat.v1 as tf + + +class ShapeTest(tf.test.TestCase): + + def setUp(self): + super().setUp() + tf.disable_v2_behavior() + + def test_shape_list(self): + """Test that shape_list can allow for reshaping to dynamic shapes.""" + a = tf.zeros([10, 4, 4, 2]) + p = tf.placeholder(tf.float32, shape=[None, None, 1, 4, 4]) + shape_dyn = shape_helpers.shape_list(p)[:2] + [4, 4] + + b = tf.reshape(a, shape_dyn) + with self.session() as sess: + out = sess.run(b, feed_dict={p: np.ones((20, 1, 1, 4, 4))}) + + self.assertAllEqual(out.shape, (20, 1, 4, 4)) + + +if __name__ == '__main__': + tf.test.main() diff --git a/alphafold/model/tf/shape_placeholders.py b/alphafold/model/tf/shape_placeholders.py new file mode 100644 index 0000000000000000000000000000000000000000..cffdeb5e1fa9691eb74680b8c9aeb8bab6123fa8 --- /dev/null +++ b/alphafold/model/tf/shape_placeholders.py @@ -0,0 +1,20 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Placeholder values for run-time varying dimension sizes.""" + +NUM_RES = 'num residues placeholder' +NUM_MSA_SEQ = 'msa placeholder' +NUM_EXTRA_SEQ = 'extra msa placeholder' +NUM_TEMPLATES = 'num templates placeholder' diff --git a/alphafold/model/tf/utils.py b/alphafold/model/tf/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..fc40a2ceb2de1c2d56c17697393713804d7da350 --- /dev/null +++ b/alphafold/model/tf/utils.py @@ -0,0 +1,47 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Shared utilities for various components.""" +import tensorflow.compat.v1 as tf + + +def tf_combine_mask(*masks): + """Take the intersection of float-valued masks.""" + ret = 1 + for m in masks: + ret *= m + return ret + + +class SeedMaker(object): + """Return unique seeds.""" + + def __init__(self, initial_seed=0): + self.next_seed = initial_seed + + def __call__(self): + i = self.next_seed + self.next_seed += 1 + return i + +seed_maker = SeedMaker() + + +def make_random_seed(): + return tf.random.uniform([2], + tf.int32.min, + tf.int32.max, + tf.int32, + seed=seed_maker()) + diff --git a/alphafold/model/utils.py b/alphafold/model/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..634f0388ae6e944f300dac05af7d7747144122aa --- /dev/null +++ b/alphafold/model/utils.py @@ -0,0 +1,173 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""A collection of JAX utility functions for use in protein folding.""" + +import collections +import contextlib +import functools +import numbers +from typing import Mapping + +import haiku as hk +import jax +import jax.numpy as jnp +import numpy as np + + +def stable_softmax(logits: jax.Array) -> jax.Array: + """Numerically stable softmax for (potential) bfloat 16.""" + if logits.dtype == jnp.float32: + output = jax.nn.softmax(logits) + elif logits.dtype == jnp.bfloat16: + # Need to explicitly do softmax in float32 to avoid numerical issues + # with large negatives. Large negatives can occur if trying to mask + # by adding on large negative logits so that things softmax to zero. + output = jax.nn.softmax(logits.astype(jnp.float32)).astype(jnp.bfloat16) + else: + raise ValueError(f'Unexpected input dtype {logits.dtype}') + return output + + +def bfloat16_creator(next_creator, shape, dtype, init, context): + """Creates float32 variables when bfloat16 is requested.""" + if context.original_dtype == jnp.bfloat16: + dtype = jnp.float32 + return next_creator(shape, dtype, init) + + +def bfloat16_getter(next_getter, value, context): + """Casts float32 to bfloat16 when bfloat16 was originally requested.""" + if context.original_dtype == jnp.bfloat16: + assert value.dtype == jnp.float32 + value = value.astype(jnp.bfloat16) + return next_getter(value) + + +@contextlib.contextmanager +def bfloat16_context(): + with hk.custom_creator(bfloat16_creator), hk.custom_getter(bfloat16_getter): + yield + + +def final_init(config): + if config.zero_init: + return 'zeros' + else: + return 'linear' + + +def batched_gather(params, indices, axis=0, batch_dims=0): + """Implements a JAX equivalent of `tf.gather` with `axis` and `batch_dims`.""" + take_fn = lambda p, i: jnp.take(p, i, axis=axis, mode='clip') + for _ in range(batch_dims): + take_fn = jax.vmap(take_fn) + return take_fn(params, indices) + + +def mask_mean(mask, value, axis=None, drop_mask_channel=False, eps=1e-10): + """Masked mean.""" + if drop_mask_channel: + mask = mask[..., 0] + + mask_shape = mask.shape + value_shape = value.shape + + assert len(mask_shape) == len(value_shape) + + if isinstance(axis, numbers.Integral): + axis = [axis] + elif axis is None: + axis = list(range(len(mask_shape))) + assert isinstance(axis, collections.abc.Iterable), ( + 'axis needs to be either an iterable, integer or "None"') + + broadcast_factor = 1. + for axis_ in axis: + value_size = value_shape[axis_] + mask_size = mask_shape[axis_] + if mask_size == 1: + broadcast_factor *= value_size + else: + assert mask_size == value_size + + return (jnp.sum(mask * value, axis=axis) / + (jnp.sum(mask, axis=axis) * broadcast_factor + eps)) + + +def flat_params_to_haiku(params: Mapping[str, np.ndarray]) -> hk.Params: + """Convert a dictionary of NumPy arrays to Haiku parameters.""" + hk_params = {} + for path, array in params.items(): + scope, name = path.split('//') + if scope not in hk_params: + hk_params[scope] = {} + hk_params[scope][name] = jnp.array(array) + + return hk_params + + +def padding_consistent_rng(f): + """Modify any element-wise random function to be consistent with padding. + + Normally if you take a function like jax.random.normal and generate an array, + say of size (10,10), you will get a different set of random numbers to if you + add padding and take the first (10,10) sub-array. + + This function makes a random function that is consistent regardless of the + amount of padding added. + + Note: The padding-consistent function is likely to be slower to compile and + run than the function it is wrapping, but these slowdowns are likely to be + negligible in a large network. + + Args: + f: Any element-wise function that takes (PRNG key, shape) as the first 2 + arguments. + + Returns: + An equivalent function to f, that is now consistent for different amounts of + padding. + """ + def grid_keys(key, shape): + """Generate a grid of rng keys that is consistent with different padding. + + Generate random keys such that the keys will be identical, regardless of + how much padding is added to any dimension. + + Args: + key: A PRNG key. + shape: The shape of the output array of keys that will be generated. + + Returns: + An array of shape `shape` consisting of random keys. + """ + if not shape: + return key + new_keys = jax.vmap(functools.partial(jax.random.fold_in, key))( + jnp.arange(shape[0])) + return jax.vmap(functools.partial(grid_keys, shape=shape[1:]))(new_keys) + + def inner(key, shape, **kwargs): + keys = grid_keys(key, shape) + signature = ( + '()->()' + if jax.dtypes.issubdtype(keys.dtype, jax.dtypes.prng_key) + else '(2)->()' + ) + return jnp.vectorize( + functools.partial(f, shape=(), **kwargs), signature=signature + )(keys) + + return inner diff --git a/alphafold/notebooks/__init__.py b/alphafold/notebooks/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..cea1fea36cb1f997b5eb39e08804d7fe88c209d8 --- /dev/null +++ b/alphafold/notebooks/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""AlphaFold Colab notebook.""" diff --git a/alphafold/notebooks/notebook_utils.py b/alphafold/notebooks/notebook_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..aa2840574a031eb36ec3624db8e014356b7c1378 --- /dev/null +++ b/alphafold/notebooks/notebook_utils.py @@ -0,0 +1,163 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Helper methods for the AlphaFold Colab notebook.""" +from typing import AbstractSet, Any, Mapping, Optional, Sequence + +from alphafold.common import residue_constants +from alphafold.data import parsers +from matplotlib import pyplot as plt +import numpy as np + + +def clean_and_validate_single_sequence( + input_sequence: str, min_length: int, max_length: int) -> str: + """Checks that the input sequence is ok and returns a clean version of it.""" + # Remove all whitespaces, tabs and end lines; upper-case. + clean_sequence = input_sequence.translate( + str.maketrans('', '', ' \n\t')).upper() + aatypes = set(residue_constants.restypes) # 20 standard aatypes. + if not set(clean_sequence).issubset(aatypes): + raise ValueError( + f'Input sequence contains non-amino acid letters: ' + f'{set(clean_sequence) - aatypes}. AlphaFold only supports 20 standard ' + 'amino acids as inputs.') + if len(clean_sequence) < min_length: + raise ValueError( + f'Input sequence is too short: {len(clean_sequence)} amino acids, ' + f'while the minimum is {min_length}') + if len(clean_sequence) > max_length: + raise ValueError( + f'Input sequence is too long: {len(clean_sequence)} amino acids, while ' + f'the maximum is {max_length}. You may be able to run it with the full ' + f'AlphaFold system depending on your resources (system memory, ' + f'GPU memory).') + return clean_sequence + + +def clean_and_validate_input_sequences( + input_sequences: Sequence[str], + min_sequence_length: int, + max_sequence_length: int) -> Sequence[str]: + """Validates and cleans input sequences.""" + sequences = [] + + for input_sequence in input_sequences: + if input_sequence.strip(): + input_sequence = clean_and_validate_single_sequence( + input_sequence=input_sequence, + min_length=min_sequence_length, + max_length=max_sequence_length) + sequences.append(input_sequence) + + if sequences: + return sequences + else: + raise ValueError('No input amino acid sequence provided, please provide at ' + 'least one sequence.') + + +def merge_chunked_msa( + results: Sequence[Mapping[str, Any]], + max_hits: Optional[int] = None + ) -> parsers.Msa: + """Merges chunked database hits together into hits for the full database.""" + unsorted_results = [] + for chunk_index, chunk in enumerate(results): + msa = parsers.parse_stockholm(chunk['sto']) + e_values_dict = parsers.parse_e_values_from_tblout(chunk['tbl']) + # Jackhmmer lists sequences as <sequence name>/<residue from>-<residue to>. + e_values = [e_values_dict[t.partition('/')[0]] for t in msa.descriptions] + chunk_results = zip( + msa.sequences, msa.deletion_matrix, msa.descriptions, e_values) + if chunk_index != 0: + next(chunk_results) # Only take query (first hit) from the first chunk. + unsorted_results.extend(chunk_results) + + sorted_by_evalue = sorted(unsorted_results, key=lambda x: x[-1]) + merged_sequences, merged_deletion_matrix, merged_descriptions, _ = zip( + *sorted_by_evalue) + merged_msa = parsers.Msa(sequences=merged_sequences, + deletion_matrix=merged_deletion_matrix, + descriptions=merged_descriptions) + if max_hits is not None: + merged_msa = merged_msa.truncate(max_seqs=max_hits) + + return merged_msa + + +def show_msa_info( + single_chain_msas: Sequence[parsers.Msa], + sequence_index: int): + """Prints info and shows a plot of the deduplicated single chain MSA.""" + full_single_chain_msa = [] + for single_chain_msa in single_chain_msas: + full_single_chain_msa.extend(single_chain_msa.sequences) + + # Deduplicate but preserve order (hence can't use set). + deduped_full_single_chain_msa = list(dict.fromkeys(full_single_chain_msa)) + total_msa_size = len(deduped_full_single_chain_msa) + print(f'\n{total_msa_size} unique sequences found in total for sequence ' + f'{sequence_index}\n') + + aa_map = {res: i for i, res in enumerate('ABCDEFGHIJKLMNOPQRSTUVWXYZ-')} + msa_arr = np.array( + [[aa_map[aa] for aa in seq] for seq in deduped_full_single_chain_msa]) + + plt.figure(figsize=(12, 3)) + plt.title(f'Per-Residue Count of Non-Gap Amino Acids in the MSA for Sequence ' + f'{sequence_index}') + plt.plot(np.sum(msa_arr != aa_map['-'], axis=0), color='black') + plt.ylabel('Non-Gap Count') + plt.yticks(range(0, total_msa_size + 1, max(1, int(total_msa_size / 3)))) + plt.show() + + +def empty_placeholder_template_features( + num_templates: int, num_res: int) -> Mapping[str, np.ndarray]: + return { + 'template_aatype': np.zeros( + (num_templates, num_res, + len(residue_constants.restypes_with_x_and_gap)), dtype=np.float32), + 'template_all_atom_masks': np.zeros( + (num_templates, num_res, residue_constants.atom_type_num), + dtype=np.float32), + 'template_all_atom_positions': np.zeros( + (num_templates, num_res, residue_constants.atom_type_num, 3), + dtype=np.float32), + 'template_domain_names': np.zeros([num_templates], dtype=object), + 'template_sequence': np.zeros([num_templates], dtype=object), + 'template_sum_probs': np.zeros([num_templates], dtype=np.float32), + } + + +def check_cell_execution_order( + cells_ran: AbstractSet[int], cell_number: int) -> None: + """Check that the cell execution order is correct. + + Args: + cells_ran: Set of cell numbers that have been executed. + cell_number: The number of the cell that this check is called in. + + Raises: + If <1:cell_number> cells haven't been executed, raise error. + """ + previous_cells = set(range(1, cell_number)) + cells_not_ran = previous_cells - cells_ran + if cells_not_ran != set(): + cells_not_ran_str = ', '.join([str(x) for x in sorted(cells_not_ran)]) + raise ValueError( + f'You did not execute the cells: {cells_not_ran_str}. Your Colab ' + 'runtime may have died during execution. Please restart the runtime ' + 'and run from the first cell!') diff --git a/alphafold/notebooks/notebook_utils_test.py b/alphafold/notebooks/notebook_utils_test.py new file mode 100644 index 0000000000000000000000000000000000000000..a67ceec4df5c2f83882fa3e707cbbc8858e66af9 --- /dev/null +++ b/alphafold/notebooks/notebook_utils_test.py @@ -0,0 +1,201 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for notebook_utils.""" +import io + +from absl.testing import absltest +from absl.testing import parameterized +from alphafold.data import parsers +from alphafold.data import templates +from alphafold.notebooks import notebook_utils + +import mock +import numpy as np + + +ONLY_QUERY_HIT = { + 'sto': ( + '# STOCKHOLM 1.0\n' + '#=GF ID query-i1\n' + 'query MAAHKGAEHHHKAAEHHEQAAKHHHAAAEHHEKGEHEQAAHHADTAYAHHKHAEEH\n' + '//\n'), + 'tbl': '', + 'stderr': b'', + 'n_iter': 1, + 'e_value': 0.0001} + +# pylint: disable=line-too-long +MULTI_SEQUENCE_HIT_1 = { + 'sto': ( + '# STOCKHOLM 1.0\n' + '#=GF ID query-i1\n' + '#=GS ERR1700680_4602609/41-109 DE [subseq from] ERR1700680_4602609\n' + '#=GS ERR1019366_5760491/40-105 DE [subseq from] ERR1019366_5760491\n' + '#=GS SRR5580704_12853319/61-125 DE [subseq from] SRR5580704_12853319\n' + 'query MAAHKGAEHHHKAAEHHEQAAKHHHAAAEHHEKGEHEQAAHHADTAYAHHKHAEEHAAQAAKHDAEHHAPKPH\n' + 'ERR1700680_4602609/41-109 --INKGAEYHKKAAEHHELAAKHHREAAKHHEAGSHEKAAHHSEIAAGHGLTAVHHTEEATK-HHPEEHTEK--\n' + 'ERR1019366_5760491/40-105 ---RSGAQHHDAAAQHYEEAARHHRMAAKQYQASHHEKAAHYAQLAYAHHMYAEQHAAEAAK-AHAKNHG----\n' + 'SRR5580704_12853319/61-125 ----PAADHHMKAAEHHEEAAKHHRAAAEHHTAGDHQKAGHHAHVANGHHVNAVHHAEEASK-HHATDHS----\n' + '//\n'), + 'tbl': ( + 'ERR1700680_4602609 - query - 7.7e-09 47.7 33.8 1.1e-08 47.2 33.8 1.2 1 0 0 1 1 1 1 -\n' + 'ERR1019366_5760491 - query - 1.7e-08 46.6 33.1 2.5e-08 46.1 33.1 1.3 1 0 0 1 1 1 1 -\n' + 'SRR5580704_12853319 - query - 1.1e-07 44.0 41.6 2e-07 43.1 41.6 1.4 1 0 0 1 1 1 1 -\n'), + 'stderr': b'', + 'n_iter': 1, + 'e_value': 0.0001} + +MULTI_SEQUENCE_HIT_2 = { + 'sto': ( + '# STOCKHOLM 1.0\n' + '#=GF ID query-i1\n' + '#=GS ERR1700719_3476944/70-137 DE [subseq from] ERR1700719_3476944\n' + '#=GS ERR1700761_4254522/72-138 DE [subseq from] ERR1700761_4254522\n' + '#=GS SRR5438477_9761204/64-132 DE [subseq from] SRR5438477_9761204\n' + 'query MAAHKGAEHHHKAAEHHEQAAKHHHAAAEHHEKGEHEQAAHHADTAYAHHKHAEEHAAQAAKHDAEHHAPKPH\n' + 'ERR1700719_3476944/70-137 ---KQAAEHHHQAAEHHEHAARHHREAAKHHEAGDHESAAHHAHTAQGHLHQATHHASEAAKLHVEHHGQK--\n' + 'ERR1700761_4254522/72-138 ----QASEHHNLAAEHHEHAARHHRDAAKHHKAGDHEKAAHHAHVAHGHHLHATHHATEAAKHHVEAHGEK--\n' + 'SRR5438477_9761204/64-132 MPKHEGAEHHKKAAEHNEHAARHHKEAARHHEEGSHEKVGHHAHIAHGHHLHATHHAEEAAKTHSNQHE----\n' + '//\n'), + 'tbl': ( + 'ERR1700719_3476944 - query - 2e-07 43.2 47.5 3.5e-07 42.4 47.5 1.4 1 0 0 1 1 1 1 -\n' + 'ERR1700761_4254522 - query - 6.1e-07 41.6 48.1 8.1e-07 41.3 48.1 1.2 1 0 0 1 1 1 1 -\n' + 'SRR5438477_9761204 - query - 1.8e-06 40.2 46.9 2.3e-06 39.8 46.9 1.2 1 0 0 1 1 1 1 -\n'), + 'stderr': b'', + 'n_iter': 1, + 'e_value': 0.0001} +# pylint: enable=line-too-long + + +class NotebookUtilsTest(parameterized.TestCase): + + @parameterized.parameters( + ('DeepMind', 'DEEPMIND'), ('A ', 'A'), ('\tA', 'A'), (' A\t\n', 'A'), + ('ACDEFGHIKLMNPQRSTVWY', 'ACDEFGHIKLMNPQRSTVWY')) + def test_clean_and_validate_sequence_ok(self, sequence, exp_clean): + clean = notebook_utils.clean_and_validate_single_sequence( + sequence, min_length=1, max_length=100) + self.assertEqual(clean, exp_clean) + + @parameterized.named_parameters( + ('too_short', 'AA', 'too short'), + ('too_long', 'AAAAAAAAAA', 'too long'), + ('bad_amino_acids_B', 'BBBB', 'non-amino acid'), + ('bad_amino_acids_J', 'JJJJ', 'non-amino acid'), + ('bad_amino_acids_O', 'OOOO', 'non-amino acid'), + ('bad_amino_acids_U', 'UUUU', 'non-amino acid'), + ('bad_amino_acids_X', 'XXXX', 'non-amino acid'), + ('bad_amino_acids_Z', 'ZZZZ', 'non-amino acid')) + def test_clean_and_validate_sequence_bad(self, sequence, exp_error): + with self.assertRaisesRegex(ValueError, f'.*{exp_error}.*'): + notebook_utils.clean_and_validate_single_sequence( + sequence, min_length=4, max_length=8) + + @parameterized.parameters( + (['A', '', '', ' ', '\t', ' \t\n', '', ''], ['A']), + (['', 'A'], ['A']), + (['A', 'C ', ''], ['A', 'C']), + (['', 'A', '', 'C '], ['A', 'C'])) + def test_validate_input_ok(self, input_sequences, exp_sequences): + sequences = notebook_utils.clean_and_validate_input_sequences( + input_sequences=input_sequences, + min_sequence_length=1, max_sequence_length=100) + self.assertSequenceEqual(sequences, exp_sequences) + + @parameterized.named_parameters( + ('no_input_sequence', ['', '\t', '\n'], 'No input amino acid sequence'), + ('too_long_single', ['AAAAAAAAA', 'AAAA'], 'Input sequence is too long'), + ('too_short_single', ['AAA', 'AAAA'], 'Input sequence is too short')) + def test_validate_input_bad(self, input_sequences, exp_error): + with self.assertRaisesRegex(ValueError, f'.*{exp_error}.*'): + notebook_utils.clean_and_validate_input_sequences( + input_sequences=input_sequences, min_sequence_length=4, + max_sequence_length=8) + + def test_merge_chunked_msa_no_hits(self): + results = [ONLY_QUERY_HIT, ONLY_QUERY_HIT] + merged_msa = notebook_utils.merge_chunked_msa( + results=results) + self.assertSequenceEqual( + merged_msa.sequences, + ('MAAHKGAEHHHKAAEHHEQAAKHHHAAAEHHEKGEHEQAAHHADTAYAHHKHAEEH',)) + self.assertSequenceEqual(merged_msa.deletion_matrix, ([0] * 56,)) + + def test_merge_chunked_msa(self): + results = [MULTI_SEQUENCE_HIT_1, MULTI_SEQUENCE_HIT_2] + merged_msa = notebook_utils.merge_chunked_msa( + results=results) + self.assertLen(merged_msa.sequences, 7) + # The 1st one is the query. + self.assertEqual( + merged_msa.sequences[0], + 'MAAHKGAEHHHKAAEHHEQAAKHHHAAAEHHEKGEHEQAAHHADTAYAHHKHAEEHAAQAAKHDAEHHAP' + 'KPH') + # The 2nd one is the one with the lowest e-value: ERR1700680_4602609. + self.assertEqual( + merged_msa.sequences[1], + '--INKGAEYHKKAAEHHELAAKHHREAAKHHEAGSHEKAAHHSEIAAGHGLTAVHHTEEATK-HHPEEHT' + 'EK-') + # The last one is the one with the largest e-value: SRR5438477_9761204. + self.assertEqual( + merged_msa.sequences[-1], + 'MPKHEGAEHHKKAAEHNEHAARHHKEAARHHEEGSHEKVGHHAHIAHGHHLHATHHAEEAAKTHSNQHE-' + '---') + self.assertLen(merged_msa.deletion_matrix, 7) + + @mock.patch('sys.stdout', new_callable=io.StringIO) + def test_show_msa_info(self, mocked_stdout): + single_chain_msas = [ + parsers.Msa(sequences=['A', 'B', 'C', 'C'], + deletion_matrix=[None] * 4, + descriptions=[''] * 4), + parsers.Msa(sequences=['A', 'A', 'A', 'D'], + deletion_matrix=[None] * 4, + descriptions=[''] * 4) + ] + notebook_utils.show_msa_info( + single_chain_msas=single_chain_msas, sequence_index=1) + self.assertEqual(mocked_stdout.getvalue(), + '\n4 unique sequences found in total for sequence 1\n\n') + + @parameterized.named_parameters( + ('some_templates', 4), ('no_templates', 0)) + def test_empty_placeholder_template_features(self, num_templates): + template_features = notebook_utils.empty_placeholder_template_features( + num_templates=num_templates, num_res=16) + self.assertCountEqual(template_features.keys(), + templates.TEMPLATE_FEATURES.keys()) + self.assertSameElements( + [v.shape[0] for v in template_features.values()], [num_templates]) + self.assertSequenceEqual( + [t.dtype for t in template_features.values()], + [np.array([], dtype=templates.TEMPLATE_FEATURES[feat_name]).dtype + for feat_name in template_features]) + + def test_check_cell_execution_order_correct(self): + notebook_utils.check_cell_execution_order({1, 2}, 3) + + @parameterized.named_parameters( + ('One missing', 4, {1, 2}, '3'), + ('Two missing', 5, {1, 2}, '3, 4'), + ) + def test_check_cell_execution_order_missing( + self, cell_num, cells_ran, cells_missing): + with self.assertRaisesRegex(ValueError, f'.+{cells_missing}'): + notebook_utils.check_cell_execution_order(cells_ran, cell_num) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/relax/__init__.py b/alphafold/relax/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..98feaf80700f21bf7c1c5e7f755d3c38d0008dba --- /dev/null +++ b/alphafold/relax/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Amber relaxation.""" diff --git a/alphafold/relax/amber_minimize.py b/alphafold/relax/amber_minimize.py new file mode 100644 index 0000000000000000000000000000000000000000..c97e0fc654f40fc09a778b93ec9c296dac41bbfc --- /dev/null +++ b/alphafold/relax/amber_minimize.py @@ -0,0 +1,505 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Restrained Amber Minimization of a structure.""" + +import io +import time +from typing import Collection, Optional, Sequence + +from absl import logging +from alphafold.common import protein +from alphafold.common import residue_constants +from alphafold.model import folding +from alphafold.relax import cleanup +from alphafold.relax import utils +import ml_collections +import numpy as np +import jax +import openmm +from openmm import unit +from openmm import app as openmm_app +from openmm.app.internal.pdbstructure import PdbStructure + + +ENERGY = unit.kilocalories_per_mole +LENGTH = unit.angstroms + + +def will_restrain(atom: openmm_app.Atom, rset: str) -> bool: + """Returns True if the atom will be restrained by the given restraint set.""" + + if rset == "non_hydrogen": + return atom.element.name != "hydrogen" + elif rset == "c_alpha": + return atom.name == "CA" + + +def _add_restraints( + system: openmm.System, + reference_pdb: openmm_app.PDBFile, + stiffness: unit.Unit, + rset: str, + exclude_residues: Sequence[int]): + """Adds a harmonic potential that restrains the system to a structure.""" + assert rset in ["non_hydrogen", "c_alpha"] + + force = openmm.CustomExternalForce( + "0.5 * k * ((x-x0)^2 + (y-y0)^2 + (z-z0)^2)") + force.addGlobalParameter("k", stiffness) + for p in ["x0", "y0", "z0"]: + force.addPerParticleParameter(p) + + for i, atom in enumerate(reference_pdb.topology.atoms()): + if atom.residue.index in exclude_residues: + continue + if will_restrain(atom, rset): + force.addParticle(i, reference_pdb.positions[i]) + logging.info("Restraining %d / %d particles.", + force.getNumParticles(), system.getNumParticles()) + system.addForce(force) + + +def _openmm_minimize( + pdb_str: str, + max_iterations: int, + tolerance: unit.Unit, + stiffness: unit.Unit, + restraint_set: str, + exclude_residues: Sequence[int], + use_gpu: bool): + """Minimize energy via openmm.""" + + pdb_file = io.StringIO(pdb_str) + pdb = openmm_app.PDBFile(pdb_file) + + force_field = openmm_app.ForceField("amber99sb.xml") + constraints = openmm_app.HBonds + system = force_field.createSystem( + pdb.topology, constraints=constraints) + if stiffness > 0 * ENERGY / (LENGTH**2): + _add_restraints(system, pdb, stiffness, restraint_set, exclude_residues) + + integrator = openmm.LangevinIntegrator(0, 0.01, 0.0) + platform = openmm.Platform.getPlatformByName("CUDA" if use_gpu else "CPU") + simulation = openmm_app.Simulation( + pdb.topology, system, integrator, platform) + simulation.context.setPositions(pdb.positions) + + ret = {} + state = simulation.context.getState(getEnergy=True, getPositions=True) + ret["einit"] = state.getPotentialEnergy().value_in_unit(ENERGY) + ret["posinit"] = state.getPositions(asNumpy=True).value_in_unit(LENGTH) + simulation.minimizeEnergy(maxIterations=max_iterations, + tolerance=tolerance) + state = simulation.context.getState(getEnergy=True, getPositions=True) + ret["efinal"] = state.getPotentialEnergy().value_in_unit(ENERGY) + ret["pos"] = state.getPositions(asNumpy=True).value_in_unit(LENGTH) + ret["min_pdb"] = _get_pdb_string(simulation.topology, state.getPositions()) + return ret + + +def _get_pdb_string(topology: openmm_app.Topology, positions: unit.Quantity): + """Returns a pdb string provided OpenMM topology and positions.""" + with io.StringIO() as f: + openmm_app.PDBFile.writeFile(topology, positions, f) + return f.getvalue() + + +def _check_cleaned_atoms(pdb_cleaned_string: str, pdb_ref_string: str): + """Checks that no atom positions have been altered by cleaning.""" + cleaned = openmm_app.PDBFile(io.StringIO(pdb_cleaned_string)) + reference = openmm_app.PDBFile(io.StringIO(pdb_ref_string)) + + cl_xyz = np.array(cleaned.getPositions().value_in_unit(LENGTH)) + ref_xyz = np.array(reference.getPositions().value_in_unit(LENGTH)) + + for ref_res, cl_res in zip(reference.topology.residues(), + cleaned.topology.residues()): + assert ref_res.name == cl_res.name + for rat in ref_res.atoms(): + for cat in cl_res.atoms(): + if cat.name == rat.name: + if not np.array_equal(cl_xyz[cat.index], ref_xyz[rat.index]): + raise ValueError(f"Coordinates of cleaned atom {cat} do not match " + f"coordinates of reference atom {rat}.") + + +def _check_residues_are_well_defined(prot: protein.Protein): + """Checks that all residues contain non-empty atom sets.""" + if (prot.atom_mask.sum(axis=-1) == 0).any(): + raise ValueError("Amber minimization can only be performed on proteins with" + " well-defined residues. This protein contains at least" + " one residue with no atoms.") + + +def _check_atom_mask_is_ideal(prot): + """Sanity-check the atom mask is ideal, up to a possible OXT.""" + atom_mask = prot.atom_mask + ideal_atom_mask = protein.ideal_atom_mask(prot) + utils.assert_equal_nonterminal_atom_types(atom_mask, ideal_atom_mask) + + +def clean_protein( + prot: protein.Protein, + checks: bool = True): + """Adds missing atoms to Protein instance. + + Args: + prot: A `protein.Protein` instance. + checks: A `bool` specifying whether to add additional checks to the cleaning + process. + + Returns: + pdb_string: A string of the cleaned protein. + """ + _check_atom_mask_is_ideal(prot) + + # Clean pdb. + prot_pdb_string = protein.to_pdb(prot) + pdb_file = io.StringIO(prot_pdb_string) + alterations_info = {} + fixed_pdb = cleanup.fix_pdb(pdb_file, alterations_info) + fixed_pdb_file = io.StringIO(fixed_pdb) + pdb_structure = PdbStructure(fixed_pdb_file) + cleanup.clean_structure(pdb_structure, alterations_info) + + logging.info("alterations info: %s", alterations_info) + + # Write pdb file of cleaned structure. + as_file = openmm_app.PDBFile(pdb_structure) + pdb_string = _get_pdb_string(as_file.getTopology(), as_file.getPositions()) + if checks: + _check_cleaned_atoms(pdb_string, prot_pdb_string) + return pdb_string + + +def make_atom14_positions(prot): + """Constructs denser atom positions (14 dimensions instead of 37).""" + restype_atom14_to_atom37 = [] # mapping (restype, atom14) --> atom37 + restype_atom37_to_atom14 = [] # mapping (restype, atom37) --> atom14 + restype_atom14_mask = [] + + for rt in residue_constants.restypes: + atom_names = residue_constants.restype_name_to_atom14_names[ + residue_constants.restype_1to3[rt]] + + restype_atom14_to_atom37.append([ + (residue_constants.atom_order[name] if name else 0) + for name in atom_names + ]) + + atom_name_to_idx14 = {name: i for i, name in enumerate(atom_names)} + restype_atom37_to_atom14.append([ + (atom_name_to_idx14[name] if name in atom_name_to_idx14 else 0) + for name in residue_constants.atom_types + ]) + + restype_atom14_mask.append([(1. if name else 0.) for name in atom_names]) + + # Add dummy mapping for restype 'UNK'. + restype_atom14_to_atom37.append([0] * 14) + restype_atom37_to_atom14.append([0] * 37) + restype_atom14_mask.append([0.] * 14) + + restype_atom14_to_atom37 = np.array(restype_atom14_to_atom37, dtype=np.int32) + restype_atom37_to_atom14 = np.array(restype_atom37_to_atom14, dtype=np.int32) + restype_atom14_mask = np.array(restype_atom14_mask, dtype=np.float32) + + # Create the mapping for (residx, atom14) --> atom37, i.e. an array + # with shape (num_res, 14) containing the atom37 indices for this protein. + residx_atom14_to_atom37 = restype_atom14_to_atom37[prot["aatype"]] + residx_atom14_mask = restype_atom14_mask[prot["aatype"]] + + # Create a mask for known ground truth positions. + residx_atom14_gt_mask = residx_atom14_mask * np.take_along_axis( + prot["all_atom_mask"], residx_atom14_to_atom37, axis=1).astype(np.float32) + + # Gather the ground truth positions. + residx_atom14_gt_positions = residx_atom14_gt_mask[:, :, None] * ( + np.take_along_axis(prot["all_atom_positions"], + residx_atom14_to_atom37[..., None], + axis=1)) + + prot["atom14_atom_exists"] = residx_atom14_mask + prot["atom14_gt_exists"] = residx_atom14_gt_mask + prot["atom14_gt_positions"] = residx_atom14_gt_positions + + prot["residx_atom14_to_atom37"] = residx_atom14_to_atom37 + + # Create the gather indices for mapping back. + residx_atom37_to_atom14 = restype_atom37_to_atom14[prot["aatype"]] + prot["residx_atom37_to_atom14"] = residx_atom37_to_atom14 + + # Create the corresponding mask. + restype_atom37_mask = np.zeros([21, 37], dtype=np.float32) + for restype, restype_letter in enumerate(residue_constants.restypes): + restype_name = residue_constants.restype_1to3[restype_letter] + atom_names = residue_constants.residue_atoms[restype_name] + for atom_name in atom_names: + atom_type = residue_constants.atom_order[atom_name] + restype_atom37_mask[restype, atom_type] = 1 + + residx_atom37_mask = restype_atom37_mask[prot["aatype"]] + prot["atom37_atom_exists"] = residx_atom37_mask + + # As the atom naming is ambiguous for 7 of the 20 amino acids, provide + # alternative ground truth coordinates where the naming is swapped + restype_3 = [ + residue_constants.restype_1to3[res] for res in residue_constants.restypes + ] + restype_3 += ["UNK"] + + # Matrices for renaming ambiguous atoms. + all_matrices = {res: np.eye(14, dtype=np.float32) for res in restype_3} + for resname, swap in residue_constants.residue_atom_renaming_swaps.items(): + correspondences = np.arange(14) + for source_atom_swap, target_atom_swap in swap.items(): + source_index = residue_constants.restype_name_to_atom14_names[ + resname].index(source_atom_swap) + target_index = residue_constants.restype_name_to_atom14_names[ + resname].index(target_atom_swap) + correspondences[source_index] = target_index + correspondences[target_index] = source_index + renaming_matrix = np.zeros((14, 14), dtype=np.float32) + for index, correspondence in enumerate(correspondences): + renaming_matrix[index, correspondence] = 1. + all_matrices[resname] = renaming_matrix.astype(np.float32) + renaming_matrices = np.stack([all_matrices[restype] for restype in restype_3]) + + # Pick the transformation matrices for the given residue sequence + # shape (num_res, 14, 14). + renaming_transform = renaming_matrices[prot["aatype"]] + + # Apply it to the ground truth positions. shape (num_res, 14, 3). + alternative_gt_positions = np.einsum("rac,rab->rbc", + residx_atom14_gt_positions, + renaming_transform) + prot["atom14_alt_gt_positions"] = alternative_gt_positions + + # Create the mask for the alternative ground truth (differs from the + # ground truth mask, if only one of the atoms in an ambiguous pair has a + # ground truth position). + alternative_gt_mask = np.einsum("ra,rab->rb", + residx_atom14_gt_mask, + renaming_transform) + + prot["atom14_alt_gt_exists"] = alternative_gt_mask + + # Create an ambiguous atoms mask. shape: (21, 14). + restype_atom14_is_ambiguous = np.zeros((21, 14), dtype=np.float32) + for resname, swap in residue_constants.residue_atom_renaming_swaps.items(): + for atom_name1, atom_name2 in swap.items(): + restype = residue_constants.restype_order[ + residue_constants.restype_3to1[resname]] + atom_idx1 = residue_constants.restype_name_to_atom14_names[resname].index( + atom_name1) + atom_idx2 = residue_constants.restype_name_to_atom14_names[resname].index( + atom_name2) + restype_atom14_is_ambiguous[restype, atom_idx1] = 1 + restype_atom14_is_ambiguous[restype, atom_idx2] = 1 + + # From this create an ambiguous_mask for the given sequence. + prot["atom14_atom_is_ambiguous"] = ( + restype_atom14_is_ambiguous[prot["aatype"]]) + + return prot + + +def find_violations(prot_np: protein.Protein): + """Analyzes a protein and returns structural violation information. + + Args: + prot_np: A protein. + + Returns: + violations: A `dict` of structure components with structural violations. + violation_metrics: A `dict` of violation metrics. + """ + batch = { + "aatype": prot_np.aatype, + "all_atom_positions": prot_np.atom_positions.astype(np.float32), + "all_atom_mask": prot_np.atom_mask.astype(np.float32), + "residue_index": prot_np.residue_index, + } + + batch["seq_mask"] = np.ones_like(batch["aatype"], np.float32) + batch = make_atom14_positions(batch) + + violations = folding.find_structural_violations( + batch=batch, + atom14_pred_positions=batch["atom14_gt_positions"], + config=ml_collections.ConfigDict( + {"violation_tolerance_factor": 12, # Taken from model config. + "clash_overlap_tolerance": 1.5, # Taken from model config. + })) + violation_metrics = folding.compute_violation_metrics( + batch=batch, + atom14_pred_positions=batch["atom14_gt_positions"], + violations=violations, + ) + + return violations, violation_metrics + + +def get_violation_metrics(prot: protein.Protein): + """Computes violation and alignment metrics.""" + structural_violations, struct_metrics = find_violations(prot) + violation_idx = np.flatnonzero( + structural_violations["total_per_residue_violations_mask"]) + + struct_metrics["residue_violations"] = violation_idx + struct_metrics["num_residue_violations"] = len(violation_idx) + struct_metrics["structural_violations"] = structural_violations + return struct_metrics + + +def _run_one_iteration( + *, + pdb_string: str, + max_iterations: int, + tolerance: float, + stiffness: float, + restraint_set: str, + max_attempts: int, + use_gpu: bool, + exclude_residues: Optional[Collection[int]] = None): + """Runs the minimization pipeline. + + Args: + pdb_string: A pdb string. + max_iterations: An `int` specifying the maximum number of L-BFGS iterations. + A value of 0 specifies no limit. + tolerance: kcal/mol, the energy tolerance of L-BFGS. + stiffness: kcal/mol A**2, spring constant of heavy atom restraining + potential. + restraint_set: The set of atoms to restrain. + max_attempts: The maximum number of minimization attempts. + use_gpu: Whether to run on GPU. + exclude_residues: An optional list of zero-indexed residues to exclude from + restraints. + + Returns: + A `dict` of minimization info. + """ + exclude_residues = exclude_residues or [] + + # Assign physical dimensions. + tolerance = tolerance * ENERGY + stiffness = stiffness * ENERGY / (LENGTH**2) + + start = time.time() + minimized = False + attempts = 0 + while not minimized and attempts < max_attempts: + attempts += 1 + try: + logging.info("Minimizing protein, attempt %d of %d.", + attempts, max_attempts) + ret = _openmm_minimize( + pdb_string, max_iterations=max_iterations, + tolerance=tolerance, stiffness=stiffness, + restraint_set=restraint_set, + exclude_residues=exclude_residues, + use_gpu=use_gpu) + minimized = True + except Exception as e: # pylint: disable=broad-except + logging.info(e) + if not minimized: + raise ValueError(f"Minimization failed after {max_attempts} attempts.") + ret["opt_time"] = time.time() - start + ret["min_attempts"] = attempts + return ret + + +def run_pipeline( + prot: protein.Protein, + stiffness: float, + use_gpu: bool, + max_outer_iterations: int = 1, + place_hydrogens_every_iteration: bool = True, + max_iterations: int = 0, + tolerance: float = 2.39, + restraint_set: str = "non_hydrogen", + max_attempts: int = 100, + checks: bool = True, + exclude_residues: Optional[Sequence[int]] = None): + """Run iterative amber relax. + + Successive relax iterations are performed until all violations have been + resolved. Each iteration involves a restrained Amber minimization, with + restraint exclusions determined by violation-participating residues. + + Args: + prot: A protein to be relaxed. + stiffness: kcal/mol A**2, the restraint stiffness. + use_gpu: Whether to run on GPU. + max_outer_iterations: The maximum number of iterative minimization. + place_hydrogens_every_iteration: Whether hydrogens are re-initialized + prior to every minimization. + max_iterations: An `int` specifying the maximum number of L-BFGS steps + per relax iteration. A value of 0 specifies no limit. + tolerance: kcal/mol, the energy tolerance of L-BFGS. + The default value is the OpenMM default. + restraint_set: The set of atoms to restrain. + max_attempts: The maximum number of minimization attempts per iteration. + checks: Whether to perform cleaning checks. + exclude_residues: An optional list of zero-indexed residues to exclude from + restraints. + + Returns: + out: A dictionary of output values. + """ + + # `protein.to_pdb` will strip any poorly-defined residues so we need to + # perform this check before `clean_protein`. + _check_residues_are_well_defined(prot) + pdb_string = clean_protein(prot, checks=checks) + + exclude_residues = exclude_residues or [] + exclude_residues = set(exclude_residues) + violations = np.inf + iteration = 0 + + while violations > 0 and iteration < max_outer_iterations: + ret = _run_one_iteration( + pdb_string=pdb_string, + exclude_residues=exclude_residues, + max_iterations=max_iterations, + tolerance=tolerance, + stiffness=stiffness, + restraint_set=restraint_set, + max_attempts=max_attempts, + use_gpu=use_gpu) + prot = protein.from_pdb_string(ret["min_pdb"]) + if place_hydrogens_every_iteration: + pdb_string = clean_protein(prot, checks=True) + else: + pdb_string = ret["min_pdb"] + # Calculation of violations can cause CUDA errors for some JAX versions. + with jax.default_device(jax.local_devices(backend="cpu")[0]): + ret.update(get_violation_metrics(prot)) + ret.update({ + "num_exclusions": len(exclude_residues), + "iteration": iteration, + }) + violations = ret["violations_per_residue"] + exclude_residues = exclude_residues.union(ret["residue_violations"]) + + logging.info("Iteration completed: Einit %.2f Efinal %.2f Time %.2f s " + "num residue violations %d num residue exclusions %d ", + ret["einit"], ret["efinal"], ret["opt_time"], + ret["num_residue_violations"], ret["num_exclusions"]) + iteration += 1 + return ret diff --git a/alphafold/relax/amber_minimize_test.py b/alphafold/relax/amber_minimize_test.py new file mode 100644 index 0000000000000000000000000000000000000000..dc7e6ea5a6d275c9a32a701574655eb05cd976dd --- /dev/null +++ b/alphafold/relax/amber_minimize_test.py @@ -0,0 +1,133 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for amber_minimize.""" +import os + +from absl.testing import absltest +from alphafold.common import protein +from alphafold.relax import amber_minimize +import numpy as np +# Internal import (7716). + +_USE_GPU = False + + +def _load_test_protein(data_path): + pdb_path = os.path.join(absltest.get_default_test_srcdir(), data_path) + with open(pdb_path, 'r') as f: + return protein.from_pdb_string(f.read()) + + +class AmberMinimizeTest(absltest.TestCase): + + def test_multiple_disulfides_target(self): + prot = _load_test_protein( + 'alphafold/relax/testdata/multiple_disulfides_target.pdb' + ) + ret = amber_minimize.run_pipeline(prot, max_iterations=10, max_attempts=1, + stiffness=10., use_gpu=_USE_GPU) + self.assertIn('opt_time', ret) + self.assertIn('min_attempts', ret) + + def test_raises_invalid_protein_assertion(self): + prot = _load_test_protein( + 'alphafold/relax/testdata/multiple_disulfides_target.pdb' + ) + prot.atom_mask[4, :] = 0 + with self.assertRaisesRegex( + ValueError, + 'Amber minimization can only be performed on proteins with well-defined' + ' residues. This protein contains at least one residue with no atoms.'): + amber_minimize.run_pipeline(prot, max_iterations=10, + stiffness=1., + max_attempts=1, + use_gpu=_USE_GPU) + + def test_iterative_relax(self): + prot = _load_test_protein( + 'alphafold/relax/testdata/with_violations.pdb' + ) + violations = amber_minimize.get_violation_metrics(prot) + self.assertGreater(violations['num_residue_violations'], 0) + out = amber_minimize.run_pipeline( + prot=prot, max_outer_iterations=10, stiffness=10., use_gpu=_USE_GPU) + self.assertLess(out['efinal'], out['einit']) + self.assertEqual(0, out['num_residue_violations']) + + def test_find_violations(self): + prot = _load_test_protein( + 'alphafold/relax/testdata/multiple_disulfides_target.pdb' + ) + viols, _ = amber_minimize.find_violations(prot) + + expected_between_residues_connection_mask = np.zeros((191,), np.float32) + for residue in (42, 43, 59, 60, 135, 136): + expected_between_residues_connection_mask[residue] = 1.0 + + expected_clash_indices = np.array([ + [8, 4], + [8, 5], + [13, 3], + [14, 1], + [14, 4], + [26, 4], + [26, 5], + [31, 8], + [31, 10], + [39, 0], + [39, 1], + [39, 2], + [39, 3], + [39, 4], + [42, 5], + [42, 6], + [42, 7], + [42, 8], + [47, 7], + [47, 8], + [47, 9], + [47, 10], + [64, 4], + [85, 5], + [102, 4], + [102, 5], + [109, 13], + [111, 5], + [118, 6], + [118, 7], + [118, 8], + [124, 4], + [124, 5], + [131, 5], + [139, 7], + [147, 4], + [152, 7]], dtype=np.int32) + expected_between_residues_clash_mask = np.zeros([191, 14]) + expected_between_residues_clash_mask[expected_clash_indices[:, 0], + expected_clash_indices[:, 1]] += 1 + expected_per_atom_violations = np.zeros([191, 14]) + np.testing.assert_array_equal( + viols['between_residues']['connections_per_residue_violation_mask'], + expected_between_residues_connection_mask) + np.testing.assert_array_equal( + viols['between_residues']['clashes_per_atom_clash_mask'], + expected_between_residues_clash_mask) + np.testing.assert_array_equal( + viols['within_residues']['per_atom_violations'], + expected_per_atom_violations) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/relax/cleanup.py b/alphafold/relax/cleanup.py new file mode 100644 index 0000000000000000000000000000000000000000..0778d67cabb440133168920b7e8a7b2fa06ea5bb --- /dev/null +++ b/alphafold/relax/cleanup.py @@ -0,0 +1,127 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Cleans up a PDB file using pdbfixer in preparation for OpenMM simulations. + +fix_pdb uses a third-party tool. We also support fixing some additional edge +cases like removing chains of length one (see clean_structure). +""" +import io + +import pdbfixer +from openmm import app +from openmm.app import element + + +def fix_pdb(pdbfile, alterations_info): + """Apply pdbfixer to the contents of a PDB file; return a PDB string result. + + 1) Replaces nonstandard residues. + 2) Removes heterogens (non protein residues) including water. + 3) Adds missing residues and missing atoms within existing residues. + 4) Adds hydrogens assuming pH=7.0. + 5) KeepIds is currently true, so the fixer must keep the existing chain and + residue identifiers. This will fail for some files in wider PDB that have + invalid IDs. + + Args: + pdbfile: Input PDB file handle. + alterations_info: A dict that will store details of changes made. + + Returns: + A PDB string representing the fixed structure. + """ + fixer = pdbfixer.PDBFixer(pdbfile=pdbfile) + fixer.findNonstandardResidues() + alterations_info['nonstandard_residues'] = fixer.nonstandardResidues + fixer.replaceNonstandardResidues() + _remove_heterogens(fixer, alterations_info, keep_water=False) + fixer.findMissingResidues() + alterations_info['missing_residues'] = fixer.missingResidues + fixer.findMissingAtoms() + alterations_info['missing_heavy_atoms'] = fixer.missingAtoms + alterations_info['missing_terminals'] = fixer.missingTerminals + fixer.addMissingAtoms(seed=0) + fixer.addMissingHydrogens() + out_handle = io.StringIO() + app.PDBFile.writeFile(fixer.topology, fixer.positions, out_handle, + keepIds=True) + return out_handle.getvalue() + + +def clean_structure(pdb_structure, alterations_info): + """Applies additional fixes to an OpenMM structure, to handle edge cases. + + Args: + pdb_structure: An OpenMM structure to modify and fix. + alterations_info: A dict that will store details of changes made. + """ + _replace_met_se(pdb_structure, alterations_info) + _remove_chains_of_length_one(pdb_structure, alterations_info) + + +def _remove_heterogens(fixer, alterations_info, keep_water): + """Removes the residues that Pdbfixer considers to be heterogens. + + Args: + fixer: A Pdbfixer instance. + alterations_info: A dict that will store details of changes made. + keep_water: If True, water (HOH) is not considered to be a heterogen. + """ + initial_resnames = set() + for chain in fixer.topology.chains(): + for residue in chain.residues(): + initial_resnames.add(residue.name) + fixer.removeHeterogens(keepWater=keep_water) + final_resnames = set() + for chain in fixer.topology.chains(): + for residue in chain.residues(): + final_resnames.add(residue.name) + alterations_info['removed_heterogens'] = ( + initial_resnames.difference(final_resnames)) + + +def _replace_met_se(pdb_structure, alterations_info): + """Replace the Se in any MET residues that were not marked as modified.""" + modified_met_residues = [] + for res in pdb_structure.iter_residues(): + name = res.get_name_with_spaces().strip() + if name == 'MET': + s_atom = res.get_atom('SD') + if s_atom.element_symbol == 'Se': + s_atom.element_symbol = 'S' + s_atom.element = element.get_by_symbol('S') + modified_met_residues.append(s_atom.residue_number) + alterations_info['Se_in_MET'] = modified_met_residues + + +def _remove_chains_of_length_one(pdb_structure, alterations_info): + """Removes chains that correspond to a single amino acid. + + A single amino acid in a chain is both N and C terminus. There is no force + template for this case. + + Args: + pdb_structure: An OpenMM pdb_structure to modify and fix. + alterations_info: A dict that will store details of changes made. + """ + removed_chains = {} + for model in pdb_structure.iter_models(): + valid_chains = [c for c in model.iter_chains() if len(c) > 1] + invalid_chain_ids = [c.chain_id for c in model.iter_chains() if len(c) <= 1] + model.chains = valid_chains + for chain_id in invalid_chain_ids: + model.chains_by_id.pop(chain_id) + removed_chains[model.number] = invalid_chain_ids + alterations_info['removed_chains'] = removed_chains diff --git a/alphafold/relax/cleanup_test.py b/alphafold/relax/cleanup_test.py new file mode 100644 index 0000000000000000000000000000000000000000..874882cdeafa69d293aeaa2abe1e2fb7f0630d4a --- /dev/null +++ b/alphafold/relax/cleanup_test.py @@ -0,0 +1,137 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for relax.cleanup.""" +import io + +from absl.testing import absltest +from alphafold.relax import cleanup +from openmm.app.internal import pdbstructure + + +def _pdb_to_structure(pdb_str): + handle = io.StringIO(pdb_str) + return pdbstructure.PdbStructure(handle) + + +def _lines_to_structure(pdb_lines): + return _pdb_to_structure('\n'.join(pdb_lines)) + + +class CleanupTest(absltest.TestCase): + + def test_missing_residues(self): + pdb_lines = ['SEQRES 1 C 3 CYS GLY LEU', + 'ATOM 1 N CYS C 1 -12.262 20.115 60.959 1.00 ' + '19.08 N', + 'ATOM 2 CA CYS C 1 -11.065 20.934 60.773 1.00 ' + '17.23 C', + 'ATOM 3 C CYS C 1 -10.002 20.742 61.844 1.00 ' + '15.38 C', + 'ATOM 4 O CYS C 1 -10.284 20.225 62.929 1.00 ' + '16.04 O', + 'ATOM 5 N LEU C 3 -7.688 18.700 62.045 1.00 ' + '14.75 N', + 'ATOM 6 CA LEU C 3 -7.256 17.320 62.234 1.00 ' + '16.81 C', + 'ATOM 7 C LEU C 3 -6.380 16.864 61.070 1.00 ' + '16.95 C', + 'ATOM 8 O LEU C 3 -6.551 17.332 59.947 1.00 ' + '16.97 O'] + input_handle = io.StringIO('\n'.join(pdb_lines)) + alterations = {} + result = cleanup.fix_pdb(input_handle, alterations) + structure = _pdb_to_structure(result) + residue_names = [r.get_name() for r in structure.iter_residues()] + self.assertCountEqual(residue_names, ['CYS', 'GLY', 'LEU']) + self.assertCountEqual(alterations['missing_residues'].values(), [['GLY']]) + + def test_missing_atoms(self): + pdb_lines = ['SEQRES 1 A 1 PRO', + 'ATOM 1 CA PRO A 1 1.000 1.000 1.000 1.00 ' + ' 0.00 C'] + input_handle = io.StringIO('\n'.join(pdb_lines)) + alterations = {} + result = cleanup.fix_pdb(input_handle, alterations) + structure = _pdb_to_structure(result) + atom_names = [a.get_name() for a in structure.iter_atoms()] + self.assertCountEqual(atom_names, ['N', 'CD', 'HD2', 'HD3', 'CG', 'HG2', + 'HG3', 'CB', 'HB2', 'HB3', 'CA', 'HA', + 'C', 'O', 'H2', 'H3', 'OXT']) + missing_atoms_by_residue = list(alterations['missing_heavy_atoms'].values()) + self.assertLen(missing_atoms_by_residue, 1) + atoms_added = [a.name for a in missing_atoms_by_residue[0]] + self.assertCountEqual(atoms_added, ['N', 'CD', 'CG', 'CB', 'C', 'O']) + missing_terminals_by_residue = alterations['missing_terminals'] + self.assertLen(missing_terminals_by_residue, 1) + has_missing_terminal = [r.name for r in missing_terminals_by_residue.keys()] + self.assertCountEqual(has_missing_terminal, ['PRO']) + self.assertCountEqual([t for t in missing_terminals_by_residue.values()], + [['OXT']]) + + def test_remove_heterogens(self): + pdb_lines = ['SEQRES 1 A 1 GLY', + 'ATOM 1 CA GLY A 1 0.000 0.000 0.000 1.00 ' + ' 0.00 C', + 'ATOM 2 O HOH A 2 0.000 0.000 0.000 1.00 ' + ' 0.00 O'] + input_handle = io.StringIO('\n'.join(pdb_lines)) + alterations = {} + result = cleanup.fix_pdb(input_handle, alterations) + structure = _pdb_to_structure(result) + self.assertCountEqual([res.get_name() for res in structure.iter_residues()], + ['GLY']) + self.assertEqual(alterations['removed_heterogens'], set(['HOH'])) + + def test_fix_nonstandard_residues(self): + pdb_lines = ['SEQRES 1 A 1 DAL', + 'ATOM 1 CA DAL A 1 0.000 0.000 0.000 1.00 ' + ' 0.00 C'] + input_handle = io.StringIO('\n'.join(pdb_lines)) + alterations = {} + result = cleanup.fix_pdb(input_handle, alterations) + structure = _pdb_to_structure(result) + residue_names = [res.get_name() for res in structure.iter_residues()] + self.assertCountEqual(residue_names, ['ALA']) + self.assertLen(alterations['nonstandard_residues'], 1) + original_res, new_name = alterations['nonstandard_residues'][0] + self.assertEqual(original_res.id, '1') + self.assertEqual(new_name, 'ALA') + + def test_replace_met_se(self): + pdb_lines = ['SEQRES 1 A 1 MET', + 'ATOM 1 SD MET A 1 0.000 0.000 0.000 1.00 ' + ' 0.00 Se'] + structure = _lines_to_structure(pdb_lines) + alterations = {} + cleanup._replace_met_se(structure, alterations) + sd = [a for a in structure.iter_atoms() if a.get_name() == 'SD'] + self.assertLen(sd, 1) + self.assertEqual(sd[0].element_symbol, 'S') + self.assertCountEqual(alterations['Se_in_MET'], [sd[0].residue_number]) + + def test_remove_chains_of_length_one(self): + pdb_lines = ['SEQRES 1 A 1 GLY', + 'ATOM 1 CA GLY A 1 0.000 0.000 0.000 1.00 ' + ' 0.00 C'] + structure = _lines_to_structure(pdb_lines) + alterations = {} + cleanup._remove_chains_of_length_one(structure, alterations) + chains = list(structure.iter_chains()) + self.assertEmpty(chains) + self.assertCountEqual(alterations['removed_chains'].values(), [['A']]) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/relax/relax.py b/alphafold/relax/relax.py new file mode 100644 index 0000000000000000000000000000000000000000..ebbd72d0247b624c6830dee9c0a01ec5a5d6ae61 --- /dev/null +++ b/alphafold/relax/relax.py @@ -0,0 +1,84 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Amber relaxation.""" +from typing import Any, Dict, Sequence, Tuple +from alphafold.common import protein +from alphafold.relax import amber_minimize +from alphafold.relax import utils +import numpy as np + + +class AmberRelaxation(object): + """Amber relaxation.""" + + def __init__(self, + *, + max_iterations: int, + tolerance: float, + stiffness: float, + exclude_residues: Sequence[int], + max_outer_iterations: int, + use_gpu: bool): + """Initialize Amber Relaxer. + + Args: + max_iterations: Maximum number of L-BFGS iterations. 0 means no max. + tolerance: kcal/mol, the energy tolerance of L-BFGS. + stiffness: kcal/mol A**2, spring constant of heavy atom restraining + potential. + exclude_residues: Residues to exclude from per-atom restraining. + Zero-indexed. + max_outer_iterations: Maximum number of violation-informed relax + iterations. A value of 1 will run the non-iterative procedure used in + CASP14. Use 20 so that >95% of the bad cases are relaxed. Relax finishes + as soon as there are no violations, hence in most cases this causes no + slowdown. In the worst case we do 20 outer iterations. + use_gpu: Whether to run on GPU. + """ + + self._max_iterations = max_iterations + self._tolerance = tolerance + self._stiffness = stiffness + self._exclude_residues = exclude_residues + self._max_outer_iterations = max_outer_iterations + self._use_gpu = use_gpu + + def process(self, *, + prot: protein.Protein + ) -> Tuple[str, Dict[str, Any], Sequence[float]]: + """Runs Amber relax on a prediction, adds hydrogens, returns PDB string.""" + out = amber_minimize.run_pipeline( + prot=prot, max_iterations=self._max_iterations, + tolerance=self._tolerance, stiffness=self._stiffness, + exclude_residues=self._exclude_residues, + max_outer_iterations=self._max_outer_iterations, + use_gpu=self._use_gpu) + min_pos = out['pos'] + start_pos = out['posinit'] + rmsd = np.sqrt(np.sum((start_pos - min_pos)**2) / start_pos.shape[0]) + debug_data = { + 'initial_energy': out['einit'], + 'final_energy': out['efinal'], + 'attempts': out['min_attempts'], + 'rmsd': rmsd + } + min_pdb = out['min_pdb'] + min_pdb = utils.overwrite_b_factors(min_pdb, prot.b_factors) + utils.assert_equal_nonterminal_atom_types( + protein.from_pdb_string(min_pdb).atom_mask, + prot.atom_mask) + violations = out['structural_violations'][ + 'total_per_residue_violations_mask'].tolist() + return min_pdb, debug_data, violations diff --git a/alphafold/relax/relax_test.py b/alphafold/relax/relax_test.py new file mode 100644 index 0000000000000000000000000000000000000000..8ab5142e31f4955863f4b75c8c5eb8042bdcdb1c --- /dev/null +++ b/alphafold/relax/relax_test.py @@ -0,0 +1,89 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for relax.""" +import os + +from absl.testing import absltest +from alphafold.common import protein +from alphafold.relax import relax +import numpy as np +# Internal import (7716). + + +class RunAmberRelaxTest(absltest.TestCase): + + def setUp(self): + super().setUp() + self.test_dir = os.path.join( + absltest.get_default_test_srcdir(), + 'alphafold/relax/testdata/') + self.test_config = { + 'max_iterations': 1, + 'tolerance': 2.39, + 'stiffness': 10.0, + 'exclude_residues': [], + 'max_outer_iterations': 1, + 'use_gpu': False} + + def test_process(self): + amber_relax = relax.AmberRelaxation(**self.test_config) + + with open(os.path.join(self.test_dir, 'model_output.pdb')) as f: + test_prot = protein.from_pdb_string(f.read()) + pdb_min, debug_info, num_violations = amber_relax.process(prot=test_prot) + + self.assertCountEqual(debug_info.keys(), + set({'initial_energy', 'final_energy', + 'attempts', 'rmsd'})) + self.assertLess(debug_info['final_energy'], debug_info['initial_energy']) + self.assertGreater(debug_info['rmsd'], 0) + + prot_min = protein.from_pdb_string(pdb_min) + # Most protein properties should be unchanged. + np.testing.assert_almost_equal(test_prot.aatype, prot_min.aatype) + np.testing.assert_almost_equal(test_prot.residue_index, + prot_min.residue_index) + # Atom mask and bfactors identical except for terminal OXT of last residue. + np.testing.assert_almost_equal(test_prot.atom_mask[:-1, :], + prot_min.atom_mask[:-1, :]) + np.testing.assert_almost_equal(test_prot.b_factors[:-1, :], + prot_min.b_factors[:-1, :]) + np.testing.assert_almost_equal(test_prot.atom_mask[:, :-1], + prot_min.atom_mask[:, :-1]) + np.testing.assert_almost_equal(test_prot.b_factors[:, :-1], + prot_min.b_factors[:, :-1]) + # There are no residues with violations. + np.testing.assert_equal(num_violations, np.zeros_like(num_violations)) + + def test_unresolved_violations(self): + amber_relax = relax.AmberRelaxation(**self.test_config) + with open(os.path.join(self.test_dir, + 'with_violations_casp14.pdb')) as f: + test_prot = protein.from_pdb_string(f.read()) + _, _, num_violations = amber_relax.process(prot=test_prot) + exp_num_violations = np.array( + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 0, 0, 0]) + # Check no violations were added. Can't check exactly due to stochasticity. + self.assertTrue(np.all(np.array(num_violations) <= exp_num_violations)) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/relax/testdata/model_output.pdb b/alphafold/relax/testdata/model_output.pdb new file mode 100644 index 0000000000000000000000000000000000000000..f6e00beec4a5c55441d28e7bf3af48dcc0db87f6 --- /dev/null +++ b/alphafold/relax/testdata/model_output.pdb @@ -0,0 +1,98 @@ +ATOM 1 C MET A 1 1.921 -46.152 7.786 1.00 4.39 C +ATOM 2 CA MET A 1 1.631 -46.829 9.131 1.00 4.39 C +ATOM 3 CB MET A 1 2.759 -47.768 9.578 1.00 4.39 C +ATOM 4 CE MET A 1 3.466 -49.770 13.198 1.00 4.39 C +ATOM 5 CG MET A 1 2.581 -48.221 11.034 1.00 4.39 C +ATOM 6 H MET A 1 0.234 -48.249 8.549 1.00 4.39 H +ATOM 7 H2 MET A 1 -0.424 -46.789 8.952 1.00 4.39 H +ATOM 8 H3 MET A 1 0.111 -47.796 10.118 1.00 4.39 H +ATOM 9 HA MET A 1 1.628 -46.009 9.849 1.00 4.39 H +ATOM 10 HB2 MET A 1 3.701 -47.225 9.500 1.00 4.39 H +ATOM 11 HB3 MET A 1 2.807 -48.640 8.926 1.00 4.39 H +ATOM 12 HE1 MET A 1 2.747 -50.537 12.910 1.00 4.39 H +ATOM 13 HE2 MET A 1 4.296 -50.241 13.725 1.00 4.39 H +ATOM 14 HE3 MET A 1 2.988 -49.052 13.864 1.00 4.39 H +ATOM 15 HG2 MET A 1 1.791 -48.971 11.083 1.00 4.39 H +ATOM 16 HG3 MET A 1 2.295 -47.368 11.650 1.00 4.39 H +ATOM 17 N MET A 1 0.291 -47.464 9.182 1.00 4.39 N +ATOM 18 O MET A 1 2.091 -44.945 7.799 1.00 4.39 O +ATOM 19 SD MET A 1 4.096 -48.921 11.725 1.00 4.39 S +ATOM 20 C LYS A 2 1.366 -45.033 4.898 1.00 2.92 C +ATOM 21 CA LYS A 2 2.235 -46.242 5.308 1.00 2.92 C +ATOM 22 CB LYS A 2 2.206 -47.314 4.196 1.00 2.92 C +ATOM 23 CD LYS A 2 3.331 -49.342 3.134 1.00 2.92 C +ATOM 24 CE LYS A 2 4.434 -50.403 3.293 1.00 2.92 C +ATOM 25 CG LYS A 2 3.294 -48.395 4.349 1.00 2.92 C +ATOM 26 H LYS A 2 1.832 -47.853 6.656 1.00 2.92 H +ATOM 27 HA LYS A 2 3.248 -45.841 5.355 1.00 2.92 H +ATOM 28 HB2 LYS A 2 1.223 -47.785 4.167 1.00 2.92 H +ATOM 29 HB3 LYS A 2 2.363 -46.812 3.241 1.00 2.92 H +ATOM 30 HD2 LYS A 2 3.524 -48.754 2.237 1.00 2.92 H +ATOM 31 HD3 LYS A 2 2.364 -49.833 3.031 1.00 2.92 H +ATOM 32 HE2 LYS A 2 5.383 -49.891 3.455 1.00 2.92 H +ATOM 33 HE3 LYS A 2 4.225 -51.000 4.180 1.00 2.92 H +ATOM 34 HG2 LYS A 2 3.102 -48.977 5.250 1.00 2.92 H +ATOM 35 HG3 LYS A 2 4.264 -47.909 4.446 1.00 2.92 H +ATOM 36 HZ1 LYS A 2 4.763 -50.747 1.274 1.00 2.92 H +ATOM 37 HZ2 LYS A 2 3.681 -51.785 1.931 1.00 2.92 H +ATOM 38 HZ3 LYS A 2 5.280 -51.965 2.224 1.00 2.92 H +ATOM 39 N LYS A 2 1.907 -46.846 6.629 1.00 2.92 N +ATOM 40 NZ LYS A 2 4.542 -51.286 2.100 1.00 2.92 N +ATOM 41 O LYS A 2 1.882 -44.093 4.312 1.00 2.92 O +ATOM 42 C PHE A 3 -0.511 -42.597 5.624 1.00 4.39 C +ATOM 43 CA PHE A 3 -0.853 -43.933 4.929 1.00 4.39 C +ATOM 44 CB PHE A 3 -2.271 -44.408 5.285 1.00 4.39 C +ATOM 45 CD1 PHE A 3 -3.760 -43.542 3.432 1.00 4.39 C +ATOM 46 CD2 PHE A 3 -4.050 -42.638 5.675 1.00 4.39 C +ATOM 47 CE1 PHE A 3 -4.797 -42.715 2.965 1.00 4.39 C +ATOM 48 CE2 PHE A 3 -5.091 -41.818 5.207 1.00 4.39 C +ATOM 49 CG PHE A 3 -3.382 -43.505 4.788 1.00 4.39 C +ATOM 50 CZ PHE A 3 -5.463 -41.853 3.853 1.00 4.39 C +ATOM 51 H PHE A 3 -0.311 -45.868 5.655 1.00 4.39 H +ATOM 52 HA PHE A 3 -0.817 -43.746 3.856 1.00 4.39 H +ATOM 53 HB2 PHE A 3 -2.353 -44.512 6.367 1.00 4.39 H +ATOM 54 HB3 PHE A 3 -2.432 -45.393 4.848 1.00 4.39 H +ATOM 55 HD1 PHE A 3 -3.255 -44.198 2.739 1.00 4.39 H +ATOM 56 HD2 PHE A 3 -3.768 -42.590 6.716 1.00 4.39 H +ATOM 57 HE1 PHE A 3 -5.083 -42.735 1.923 1.00 4.39 H +ATOM 58 HE2 PHE A 3 -5.604 -41.151 5.885 1.00 4.39 H +ATOM 59 HZ PHE A 3 -6.257 -41.215 3.493 1.00 4.39 H +ATOM 60 N PHE A 3 0.079 -45.027 5.253 1.00 4.39 N +ATOM 61 O PHE A 3 -0.633 -41.541 5.014 1.00 4.39 O +ATOM 62 C LEU A 4 1.598 -40.732 7.042 1.00 4.39 C +ATOM 63 CA LEU A 4 0.367 -41.437 7.633 1.00 4.39 C +ATOM 64 CB LEU A 4 0.628 -41.823 9.104 1.00 4.39 C +ATOM 65 CD1 LEU A 4 -0.319 -42.778 11.228 1.00 4.39 C +ATOM 66 CD2 LEU A 4 -1.300 -40.694 10.309 1.00 4.39 C +ATOM 67 CG LEU A 4 -0.650 -42.027 9.937 1.00 4.39 C +ATOM 68 H LEU A 4 0.163 -43.538 7.292 1.00 4.39 H +ATOM 69 HA LEU A 4 -0.445 -40.712 7.588 1.00 4.39 H +ATOM 70 HB2 LEU A 4 1.213 -41.034 9.576 1.00 4.39 H +ATOM 71 HB3 LEU A 4 1.235 -42.728 9.127 1.00 4.39 H +ATOM 72 HD11 LEU A 4 0.380 -42.191 11.824 1.00 4.39 H +ATOM 73 HD12 LEU A 4 0.127 -43.747 11.002 1.00 4.39 H +ATOM 74 HD13 LEU A 4 -1.230 -42.927 11.808 1.00 4.39 H +ATOM 75 HD21 LEU A 4 -0.606 -40.080 10.883 1.00 4.39 H +ATOM 76 HD22 LEU A 4 -2.193 -40.869 10.909 1.00 4.39 H +ATOM 77 HD23 LEU A 4 -1.593 -40.147 9.413 1.00 4.39 H +ATOM 78 HG LEU A 4 -1.359 -42.630 9.370 1.00 4.39 H +ATOM 79 N LEU A 4 -0.012 -42.638 6.869 1.00 4.39 N +ATOM 80 O LEU A 4 1.655 -39.508 7.028 1.00 4.39 O +ATOM 81 C VAL A 5 3.372 -40.190 4.573 1.00 4.39 C +ATOM 82 CA VAL A 5 3.752 -40.956 5.845 1.00 4.39 C +ATOM 83 CB VAL A 5 4.757 -42.083 5.528 1.00 4.39 C +ATOM 84 CG1 VAL A 5 6.019 -41.568 4.827 1.00 4.39 C +ATOM 85 CG2 VAL A 5 5.199 -42.807 6.810 1.00 4.39 C +ATOM 86 H VAL A 5 2.440 -42.503 6.548 1.00 4.39 H +ATOM 87 HA VAL A 5 4.234 -40.242 6.512 1.00 4.39 H +ATOM 88 HB VAL A 5 4.279 -42.813 4.875 1.00 4.39 H +ATOM 89 HG11 VAL A 5 6.494 -40.795 5.431 1.00 4.39 H +ATOM 90 HG12 VAL A 5 5.770 -41.145 3.853 1.00 4.39 H +ATOM 91 HG13 VAL A 5 6.725 -42.383 4.670 1.00 4.39 H +ATOM 92 HG21 VAL A 5 4.347 -43.283 7.297 1.00 4.39 H +ATOM 93 HG22 VAL A 5 5.933 -43.575 6.568 1.00 4.39 H +ATOM 94 HG23 VAL A 5 5.651 -42.093 7.498 1.00 4.39 H +ATOM 95 N VAL A 5 2.554 -41.501 6.509 1.00 4.39 N +ATOM 96 O VAL A 5 3.937 -39.138 4.297 1.00 4.39 O +TER 96 VAL A 5 +END diff --git a/alphafold/relax/testdata/multiple_disulfides_target.pdb b/alphafold/relax/testdata/multiple_disulfides_target.pdb new file mode 100644 index 0000000000000000000000000000000000000000..9e01f8d4b17f4dc704802b7afae28850ee7e39e4 --- /dev/null +++ b/alphafold/relax/testdata/multiple_disulfides_target.pdb @@ -0,0 +1,1478 @@ +MODEL 0 +ATOM 1 N MET A 1 19.164 -28.457 26.130 1.00 0.00 N +ATOM 2 CA MET A 1 19.746 -27.299 25.456 1.00 0.00 C +ATOM 3 C MET A 1 19.080 -26.008 25.921 1.00 0.00 C +ATOM 4 CB MET A 1 19.615 -27.438 23.938 1.00 0.00 C +ATOM 5 O MET A 1 17.853 -25.899 25.913 1.00 0.00 O +ATOM 6 CG MET A 1 19.873 -28.846 23.427 1.00 0.00 C +ATOM 7 SD MET A 1 21.636 -29.126 23.002 1.00 0.00 S +ATOM 8 CE MET A 1 22.302 -27.462 23.284 1.00 0.00 C +ATOM 9 N ALA A 2 19.679 -25.354 27.019 1.00 0.00 N +ATOM 10 CA ALA A 2 19.241 -24.061 27.539 1.00 0.00 C +ATOM 11 C ALA A 2 18.629 -23.204 26.434 1.00 0.00 C +ATOM 12 CB ALA A 2 20.410 -23.326 28.192 1.00 0.00 C +ATOM 13 O ALA A 2 19.158 -23.145 25.322 1.00 0.00 O +ATOM 14 N HIS A 3 17.369 -23.382 26.161 1.00 0.00 N +ATOM 15 CA HIS A 3 16.748 -22.427 25.250 1.00 0.00 C +ATOM 16 C HIS A 3 17.419 -21.061 25.342 1.00 0.00 C +ATOM 17 CB HIS A 3 15.252 -22.299 25.547 1.00 0.00 C +ATOM 18 O HIS A 3 17.896 -20.669 26.409 1.00 0.00 O +ATOM 19 CG HIS A 3 14.464 -23.520 25.196 1.00 0.00 C +ATOM 20 CD2 HIS A 3 13.848 -24.436 25.979 1.00 0.00 C +ATOM 21 ND1 HIS A 3 14.242 -23.914 23.894 1.00 0.00 N +ATOM 22 CE1 HIS A 3 13.520 -25.022 23.892 1.00 0.00 C +ATOM 23 NE2 HIS A 3 13.268 -25.360 25.145 1.00 0.00 N +ATOM 24 N GLU A 4 18.306 -20.798 24.429 1.00 0.00 N +ATOM 25 CA GLU A 4 18.907 -19.505 24.115 1.00 0.00 C +ATOM 26 C GLU A 4 18.392 -18.415 25.050 1.00 0.00 C +ATOM 27 CB GLU A 4 18.631 -19.123 22.659 1.00 0.00 C +ATOM 28 O GLU A 4 17.240 -18.458 25.486 1.00 0.00 O +ATOM 29 CG GLU A 4 19.253 -20.072 21.645 1.00 0.00 C +ATOM 30 CD GLU A 4 20.767 -19.956 21.564 1.00 0.00 C +ATOM 31 OE1 GLU A 4 21.330 -18.981 22.111 1.00 0.00 O +ATOM 32 OE2 GLU A 4 21.394 -20.846 20.948 1.00 0.00 O +ATOM 33 N GLU A 5 19.093 -18.090 26.026 1.00 0.00 N +ATOM 34 CA GLU A 5 19.080 -16.885 26.849 1.00 0.00 C +ATOM 35 C GLU A 5 17.938 -15.956 26.449 1.00 0.00 C +ATOM 36 CB GLU A 5 20.418 -16.148 26.746 1.00 0.00 C +ATOM 37 O GLU A 5 17.774 -15.636 25.269 1.00 0.00 O +ATOM 38 CG GLU A 5 21.604 -16.952 27.257 1.00 0.00 C +ATOM 39 CD GLU A 5 21.641 -17.070 28.772 1.00 0.00 C +ATOM 40 OE1 GLU A 5 20.899 -16.330 29.457 1.00 0.00 O +ATOM 41 OE2 GLU A 5 22.419 -17.909 29.279 1.00 0.00 O +ATOM 42 N ASP A 6 16.721 -16.161 26.857 1.00 0.00 N +ATOM 43 CA ASP A 6 15.629 -15.196 26.948 1.00 0.00 C +ATOM 44 C ASP A 6 16.107 -13.791 26.591 1.00 0.00 C +ATOM 45 CB ASP A 6 15.022 -15.204 28.353 1.00 0.00 C +ATOM 46 O ASP A 6 17.144 -13.339 27.079 1.00 0.00 O +ATOM 47 CG ASP A 6 14.317 -16.507 28.687 1.00 0.00 C +ATOM 48 OD1 ASP A 6 14.123 -16.805 29.885 1.00 0.00 O +ATOM 49 OD2 ASP A 6 13.956 -17.243 27.744 1.00 0.00 O +ATOM 50 N GLY A 7 16.251 -13.433 25.339 1.00 0.00 N +ATOM 51 CA GLY A 7 16.311 -11.996 25.123 1.00 0.00 C +ATOM 52 C GLY A 7 15.833 -11.192 26.317 1.00 0.00 C +ATOM 53 O GLY A 7 15.023 -11.674 27.112 1.00 0.00 O +ATOM 54 N VAL A 8 16.762 -10.664 27.143 1.00 0.00 N +ATOM 55 CA VAL A 8 16.521 -9.756 28.260 1.00 0.00 C +ATOM 56 C VAL A 8 15.307 -8.880 27.960 1.00 0.00 C +ATOM 57 CB VAL A 8 17.755 -8.875 28.552 1.00 0.00 C +ATOM 58 O VAL A 8 15.173 -8.351 26.854 1.00 0.00 O +ATOM 59 CG1 VAL A 8 17.461 -7.891 29.683 1.00 0.00 C +ATOM 60 CG2 VAL A 8 18.962 -9.745 28.898 1.00 0.00 C +ATOM 61 N CYS A 9 14.157 -9.255 28.398 1.00 0.00 N +ATOM 62 CA CYS A 9 13.010 -8.353 28.403 1.00 0.00 C +ATOM 63 C CYS A 9 13.310 -7.095 29.209 1.00 0.00 C +ATOM 64 CB CYS A 9 11.779 -9.055 28.975 1.00 0.00 C +ATOM 65 O CYS A 9 14.058 -7.142 30.187 1.00 0.00 O +ATOM 66 SG CYS A 9 11.197 -10.439 27.970 1.00 0.00 S +ATOM 67 N ASN A 10 13.304 -5.993 28.589 1.00 0.00 N +ATOM 68 CA ASN A 10 13.371 -4.703 29.267 1.00 0.00 C +ATOM 69 C ASN A 10 12.018 -3.997 29.264 1.00 0.00 C +ATOM 70 CB ASN A 10 14.436 -3.812 28.624 1.00 0.00 C +ATOM 71 O ASN A 10 11.047 -4.510 28.706 1.00 0.00 O +ATOM 72 CG ASN A 10 14.149 -3.521 27.164 1.00 0.00 C +ATOM 73 ND2 ASN A 10 15.189 -3.547 26.338 1.00 0.00 N +ATOM 74 OD1 ASN A 10 13.003 -3.275 26.781 1.00 0.00 O +ATOM 75 N SER A 11 11.830 -2.986 30.142 1.00 0.00 N +ATOM 76 CA SER A 11 10.597 -2.233 30.343 1.00 0.00 C +ATOM 77 C SER A 11 10.027 -1.741 29.017 1.00 0.00 C +ATOM 78 CB SER A 11 10.840 -1.044 31.274 1.00 0.00 C +ATOM 79 O SER A 11 8.847 -1.392 28.933 1.00 0.00 O +ATOM 80 OG SER A 11 11.841 -0.190 30.748 1.00 0.00 O +ATOM 81 N ASN A 12 10.789 -1.874 27.933 1.00 0.00 N +ATOM 82 CA ASN A 12 10.334 -1.422 26.622 1.00 0.00 C +ATOM 83 C ASN A 12 9.775 -2.576 25.795 1.00 0.00 C +ATOM 84 CB ASN A 12 11.472 -0.730 25.868 1.00 0.00 C +ATOM 85 O ASN A 12 9.262 -2.365 24.694 1.00 0.00 O +ATOM 86 CG ASN A 12 11.875 0.587 26.501 1.00 0.00 C +ATOM 87 ND2 ASN A 12 13.170 0.882 26.482 1.00 0.00 N +ATOM 88 OD1 ASN A 12 11.031 1.333 27.004 1.00 0.00 O +ATOM 89 N ALA A 13 10.045 -3.775 26.303 1.00 0.00 N +ATOM 90 CA ALA A 13 9.523 -4.930 25.578 1.00 0.00 C +ATOM 91 C ALA A 13 8.001 -4.994 25.671 1.00 0.00 C +ATOM 92 CB ALA A 13 10.140 -6.219 26.115 1.00 0.00 C +ATOM 93 O ALA A 13 7.423 -4.684 26.715 1.00 0.00 O +ATOM 94 N PRO A 14 7.310 -5.193 24.591 1.00 0.00 N +ATOM 95 CA PRO A 14 5.846 -5.238 24.577 1.00 0.00 C +ATOM 96 C PRO A 14 5.280 -6.316 25.499 1.00 0.00 C +ATOM 97 CB PRO A 14 5.517 -5.544 23.113 1.00 0.00 C +ATOM 98 O PRO A 14 4.127 -6.222 25.929 1.00 0.00 O +ATOM 99 CG PRO A 14 6.757 -6.177 22.568 1.00 0.00 C +ATOM 100 CD PRO A 14 7.941 -5.617 23.303 1.00 0.00 C +ATOM 101 N CYS A 15 6.076 -7.229 25.793 1.00 0.00 N +ATOM 102 CA CYS A 15 5.597 -8.339 26.610 1.00 0.00 C +ATOM 103 C CYS A 15 6.142 -8.245 28.030 1.00 0.00 C +ATOM 104 CB CYS A 15 5.999 -9.676 25.987 1.00 0.00 C +ATOM 105 O CYS A 15 6.205 -9.249 28.743 1.00 0.00 O +ATOM 106 SG CYS A 15 7.766 -9.813 25.636 1.00 0.00 S +ATOM 107 N TYR A 16 6.510 -6.994 28.366 1.00 0.00 N +ATOM 108 CA TYR A 16 7.076 -6.735 29.685 1.00 0.00 C +ATOM 109 C TYR A 16 5.978 -6.589 30.731 1.00 0.00 C +ATOM 110 CB TYR A 16 7.944 -5.473 29.659 1.00 0.00 C +ATOM 111 O TYR A 16 5.053 -5.791 30.563 1.00 0.00 O +ATOM 112 CG TYR A 16 8.545 -5.122 30.998 1.00 0.00 C +ATOM 113 CD1 TYR A 16 8.126 -3.993 31.698 1.00 0.00 C +ATOM 114 CD2 TYR A 16 9.534 -5.918 31.566 1.00 0.00 C +ATOM 115 CE1 TYR A 16 8.678 -3.665 32.932 1.00 0.00 C +ATOM 116 CE2 TYR A 16 10.093 -5.600 32.799 1.00 0.00 C +ATOM 117 OH TYR A 16 10.210 -4.153 34.695 1.00 0.00 O +ATOM 118 CZ TYR A 16 9.660 -4.473 33.474 1.00 0.00 C +ATOM 119 N HIS A 17 5.834 -7.548 31.703 1.00 0.00 N +ATOM 120 CA HIS A 17 4.846 -7.504 32.775 1.00 0.00 C +ATOM 121 C HIS A 17 5.518 -7.493 34.143 1.00 0.00 C +ATOM 122 CB HIS A 17 3.888 -8.692 32.669 1.00 0.00 C +ATOM 123 O HIS A 17 6.482 -8.228 34.372 1.00 0.00 O +ATOM 124 CG HIS A 17 2.782 -8.661 33.675 1.00 0.00 C +ATOM 125 CD2 HIS A 17 2.548 -9.432 34.764 1.00 0.00 C +ATOM 126 ND1 HIS A 17 1.748 -7.752 33.617 1.00 0.00 N +ATOM 127 CE1 HIS A 17 0.924 -7.965 34.630 1.00 0.00 C +ATOM 128 NE2 HIS A 17 1.387 -8.979 35.341 1.00 0.00 N +ATOM 129 N CYS A 18 5.067 -6.579 34.995 1.00 0.00 N +ATOM 130 CA CYS A 18 5.599 -6.487 36.350 1.00 0.00 C +ATOM 131 C CYS A 18 4.501 -6.711 37.383 1.00 0.00 C +ATOM 132 CB CYS A 18 6.255 -5.126 36.577 1.00 0.00 C +ATOM 133 O CYS A 18 3.325 -6.465 37.109 1.00 0.00 O +ATOM 134 SG CYS A 18 7.757 -4.870 35.607 1.00 0.00 S +ATOM 135 N ASP A 19 4.791 -7.344 38.476 1.00 0.00 N +ATOM 136 CA ASP A 19 3.829 -7.460 39.568 1.00 0.00 C +ATOM 137 C ASP A 19 3.430 -6.084 40.096 1.00 0.00 C +ATOM 138 CB ASP A 19 4.403 -8.313 40.701 1.00 0.00 C +ATOM 139 O ASP A 19 3.960 -5.064 39.651 1.00 0.00 O +ATOM 140 CG ASP A 19 5.572 -7.650 41.408 1.00 0.00 C +ATOM 141 OD1 ASP A 19 6.325 -8.345 42.124 1.00 0.00 O +ATOM 142 OD2 ASP A 19 5.741 -6.422 41.250 1.00 0.00 O +ATOM 143 N ALA A 20 2.383 -5.908 40.933 1.00 0.00 N +ATOM 144 CA ALA A 20 1.776 -4.676 41.429 1.00 0.00 C +ATOM 145 C ALA A 20 2.806 -3.807 42.144 1.00 0.00 C +ATOM 146 CB ALA A 20 0.612 -4.995 42.363 1.00 0.00 C +ATOM 147 O ALA A 20 2.714 -2.577 42.119 1.00 0.00 O +ATOM 148 N ASN A 21 3.841 -4.457 42.638 1.00 0.00 N +ATOM 149 CA ASN A 21 4.863 -3.719 43.373 1.00 0.00 C +ATOM 150 C ASN A 21 6.048 -3.362 42.480 1.00 0.00 C +ATOM 151 CB ASN A 21 5.335 -4.521 44.588 1.00 0.00 C +ATOM 152 O ASN A 21 6.980 -2.686 42.919 1.00 0.00 O +ATOM 153 CG ASN A 21 4.246 -4.704 45.626 1.00 0.00 C +ATOM 154 ND2 ASN A 21 4.183 -5.892 46.216 1.00 0.00 N +ATOM 155 OD1 ASN A 21 3.467 -3.786 45.895 1.00 0.00 O +ATOM 156 N GLY A 22 5.989 -3.893 41.230 1.00 0.00 N +ATOM 157 CA GLY A 22 7.093 -3.614 40.325 1.00 0.00 C +ATOM 158 C GLY A 22 8.376 -4.324 40.712 1.00 0.00 C +ATOM 159 O GLY A 22 9.456 -3.972 40.234 1.00 0.00 O +ATOM 160 N GLU A 23 8.305 -5.221 41.664 1.00 0.00 N +ATOM 161 CA GLU A 23 9.501 -5.877 42.183 1.00 0.00 C +ATOM 162 C GLU A 23 9.861 -7.105 41.352 1.00 0.00 C +ATOM 163 CB GLU A 23 9.306 -6.272 43.649 1.00 0.00 C +ATOM 164 O GLU A 23 11.038 -7.361 41.089 1.00 0.00 O +ATOM 165 CG GLU A 23 9.200 -5.085 44.596 1.00 0.00 C +ATOM 166 CD GLU A 23 9.074 -5.493 46.055 1.00 0.00 C +ATOM 167 OE1 GLU A 23 9.075 -6.710 46.348 1.00 0.00 O +ATOM 168 OE2 GLU A 23 8.972 -4.587 46.913 1.00 0.00 O +ATOM 169 N ASN A 24 8.853 -7.853 40.844 1.00 0.00 N +ATOM 170 CA ASN A 24 9.050 -9.077 40.075 1.00 0.00 C +ATOM 171 C ASN A 24 8.522 -8.936 38.651 1.00 0.00 C +ATOM 172 CB ASN A 24 8.381 -10.263 40.774 1.00 0.00 C +ATOM 173 O ASN A 24 7.317 -9.045 38.417 1.00 0.00 O +ATOM 174 CG ASN A 24 8.973 -10.546 42.140 1.00 0.00 C +ATOM 175 ND2 ASN A 24 8.125 -10.569 43.162 1.00 0.00 N +ATOM 176 OD1 ASN A 24 10.184 -10.741 42.277 1.00 0.00 O +ATOM 177 N CYS A 25 9.371 -8.554 37.764 1.00 0.00 N +ATOM 178 CA CYS A 25 8.978 -8.390 36.369 1.00 0.00 C +ATOM 179 C CYS A 25 9.448 -9.572 35.529 1.00 0.00 C +ATOM 180 CB CYS A 25 9.548 -7.091 35.800 1.00 0.00 C +ATOM 181 O CYS A 25 10.486 -10.171 35.816 1.00 0.00 O +ATOM 182 SG CYS A 25 8.933 -5.605 36.623 1.00 0.00 S +ATOM 183 N SER A 26 8.561 -10.102 34.701 1.00 0.00 N +ATOM 184 CA SER A 26 8.921 -11.145 33.746 1.00 0.00 C +ATOM 185 C SER A 26 8.422 -10.808 32.345 1.00 0.00 C +ATOM 186 CB SER A 26 8.353 -12.495 34.187 1.00 0.00 C +ATOM 187 O SER A 26 7.563 -9.940 32.178 1.00 0.00 O +ATOM 188 OG SER A 26 6.936 -12.470 34.186 1.00 0.00 O +ATOM 189 N CYS A 27 9.208 -11.265 31.277 1.00 0.00 N +ATOM 190 CA CYS A 27 8.779 -11.211 29.884 1.00 0.00 C +ATOM 191 C CYS A 27 7.948 -12.436 29.521 1.00 0.00 C +ATOM 192 CB CYS A 27 9.988 -11.110 28.954 1.00 0.00 C +ATOM 193 O CYS A 27 8.470 -13.551 29.464 1.00 0.00 O +ATOM 194 SG CYS A 27 10.970 -9.614 29.197 1.00 0.00 S +ATOM 195 N ASN A 28 6.768 -12.360 29.728 1.00 0.00 N +ATOM 196 CA ASN A 28 5.905 -13.476 29.355 1.00 0.00 C +ATOM 197 C ASN A 28 5.123 -13.178 28.079 1.00 0.00 C +ATOM 198 CB ASN A 28 4.946 -13.817 30.498 1.00 0.00 C +ATOM 199 O ASN A 28 4.074 -12.532 28.125 1.00 0.00 O +ATOM 200 CG ASN A 28 4.239 -15.142 30.291 1.00 0.00 C +ATOM 201 ND2 ASN A 28 3.472 -15.568 31.288 1.00 0.00 N +ATOM 202 OD1 ASN A 28 4.381 -15.779 29.243 1.00 0.00 O +ATOM 203 N CYS A 29 5.741 -13.488 26.787 1.00 0.00 N +ATOM 204 CA CYS A 29 5.086 -13.282 25.500 1.00 0.00 C +ATOM 205 C CYS A 29 3.880 -14.201 25.348 1.00 0.00 C +ATOM 206 CB CYS A 29 6.070 -13.522 24.355 1.00 0.00 C +ATOM 207 O CYS A 29 3.011 -13.958 24.510 1.00 0.00 O +ATOM 208 SG CYS A 29 7.446 -12.353 24.319 1.00 0.00 S +ATOM 209 N GLU A 30 3.849 -15.077 26.140 1.00 0.00 N +ATOM 210 CA GLU A 30 2.725 -16.005 26.063 1.00 0.00 C +ATOM 211 C GLU A 30 1.452 -15.379 26.627 1.00 0.00 C +ATOM 212 CB GLU A 30 3.047 -17.303 26.808 1.00 0.00 C +ATOM 213 O GLU A 30 0.344 -15.770 26.255 1.00 0.00 O +ATOM 214 CG GLU A 30 4.161 -18.119 26.169 1.00 0.00 C +ATOM 215 CD GLU A 30 4.469 -19.405 26.919 1.00 0.00 C +ATOM 216 OE1 GLU A 30 3.822 -19.672 27.957 1.00 0.00 O +ATOM 217 OE2 GLU A 30 5.366 -20.150 26.466 1.00 0.00 O +ATOM 218 N LEU A 31 1.743 -14.305 27.387 1.00 0.00 N +ATOM 219 CA LEU A 31 0.622 -13.672 28.074 1.00 0.00 C +ATOM 220 C LEU A 31 0.044 -12.536 27.237 1.00 0.00 C +ATOM 221 CB LEU A 31 1.061 -13.142 29.441 1.00 0.00 C +ATOM 222 O LEU A 31 -0.996 -11.971 27.584 1.00 0.00 O +ATOM 223 CG LEU A 31 1.437 -14.194 30.487 1.00 0.00 C +ATOM 224 CD1 LEU A 31 1.920 -13.520 31.766 1.00 0.00 C +ATOM 225 CD2 LEU A 31 0.252 -15.110 30.774 1.00 0.00 C +ATOM 226 N PHE A 32 0.769 -12.166 26.008 1.00 0.00 N +ATOM 227 CA PHE A 32 0.157 -11.063 25.278 1.00 0.00 C +ATOM 228 C PHE A 32 -1.020 -11.553 24.443 1.00 0.00 C +ATOM 229 CB PHE A 32 1.188 -10.374 24.378 1.00 0.00 C +ATOM 230 O PHE A 32 -0.898 -12.531 23.702 1.00 0.00 O +ATOM 231 CG PHE A 32 2.115 -9.447 25.117 1.00 0.00 C +ATOM 232 CD1 PHE A 32 3.383 -9.869 25.499 1.00 0.00 C +ATOM 233 CD2 PHE A 32 1.719 -8.153 25.429 1.00 0.00 C +ATOM 234 CE1 PHE A 32 4.243 -9.014 26.183 1.00 0.00 C +ATOM 235 CE2 PHE A 32 2.574 -7.293 26.112 1.00 0.00 C +ATOM 236 CZ PHE A 32 3.835 -7.725 26.489 1.00 0.00 C +ATOM 237 N ASP A 33 -2.070 -11.361 25.097 1.00 0.00 N +ATOM 238 CA ASP A 33 -3.364 -11.602 24.466 1.00 0.00 C +ATOM 239 C ASP A 33 -3.423 -10.975 23.075 1.00 0.00 C +ATOM 240 CB ASP A 33 -4.496 -11.055 25.339 1.00 0.00 C +ATOM 241 O ASP A 33 -3.225 -9.767 22.924 1.00 0.00 O +ATOM 242 CG ASP A 33 -5.861 -11.590 24.943 1.00 0.00 C +ATOM 243 OD1 ASP A 33 -6.769 -11.638 25.800 1.00 0.00 O +ATOM 244 OD2 ASP A 33 -6.029 -11.969 23.764 1.00 0.00 O +ATOM 245 N CYS A 34 -3.021 -11.756 22.063 1.00 0.00 N +ATOM 246 CA CYS A 34 -3.371 -11.337 20.711 1.00 0.00 C +ATOM 247 C CYS A 34 -4.691 -10.576 20.700 1.00 0.00 C +ATOM 248 CB CYS A 34 -3.461 -12.547 19.781 1.00 0.00 C +ATOM 249 O CYS A 34 -4.986 -9.851 19.748 1.00 0.00 O +ATOM 250 SG CYS A 34 -1.909 -13.455 19.615 1.00 0.00 S +ATOM 251 N GLU A 35 -5.284 -10.672 21.987 1.00 0.00 N +ATOM 252 CA GLU A 35 -6.617 -10.086 22.085 1.00 0.00 C +ATOM 253 C GLU A 35 -6.556 -8.667 22.644 1.00 0.00 C +ATOM 254 CB GLU A 35 -7.525 -10.956 22.958 1.00 0.00 C +ATOM 255 O GLU A 35 -7.592 -8.032 22.853 1.00 0.00 O +ATOM 256 CG GLU A 35 -7.790 -12.339 22.381 1.00 0.00 C +ATOM 257 CD GLU A 35 -8.779 -13.152 23.202 1.00 0.00 C +ATOM 258 OE1 GLU A 35 -9.290 -12.636 24.222 1.00 0.00 O +ATOM 259 OE2 GLU A 35 -9.046 -14.314 22.821 1.00 0.00 O +ATOM 260 N ALA A 36 -5.315 -8.202 22.860 1.00 0.00 N +ATOM 261 CA ALA A 36 -5.282 -6.884 23.489 1.00 0.00 C +ATOM 262 C ALA A 36 -5.714 -5.797 22.509 1.00 0.00 C +ATOM 263 CB ALA A 36 -3.884 -6.586 24.027 1.00 0.00 C +ATOM 264 O ALA A 36 -5.299 -5.799 21.348 1.00 0.00 O +ATOM 265 N LYS A 37 -6.942 -5.271 22.819 1.00 0.00 N +ATOM 266 CA LYS A 37 -7.519 -4.143 22.094 1.00 0.00 C +ATOM 267 C LYS A 37 -6.974 -2.817 22.617 1.00 0.00 C +ATOM 268 CB LYS A 37 -9.045 -4.160 22.200 1.00 0.00 C +ATOM 269 O LYS A 37 -6.897 -2.606 23.829 1.00 0.00 O +ATOM 270 CG LYS A 37 -9.701 -5.341 21.499 1.00 0.00 C +ATOM 271 CD LYS A 37 -11.220 -5.239 21.536 1.00 0.00 C +ATOM 272 CE LYS A 37 -11.877 -6.385 20.778 1.00 0.00 C +ATOM 273 NZ LYS A 37 -13.353 -6.194 20.656 1.00 0.00 N +ATOM 274 N LYS A 38 -6.207 -2.111 21.604 1.00 0.00 N +ATOM 275 CA LYS A 38 -5.876 -0.745 21.998 1.00 0.00 C +ATOM 276 C LYS A 38 -7.131 0.118 22.100 1.00 0.00 C +ATOM 277 CB LYS A 38 -4.892 -0.123 21.007 1.00 0.00 C +ATOM 278 O LYS A 38 -8.188 -0.253 21.585 1.00 0.00 O +ATOM 279 CG LYS A 38 -3.518 -0.776 21.006 1.00 0.00 C +ATOM 280 CD LYS A 38 -2.564 -0.072 20.049 1.00 0.00 C +ATOM 281 CE LYS A 38 -1.196 -0.740 20.029 1.00 0.00 C +ATOM 282 NZ LYS A 38 -0.234 -0.007 19.153 1.00 0.00 N +ATOM 283 N PRO A 39 -7.175 1.097 22.994 1.00 0.00 N +ATOM 284 CA PRO A 39 -8.319 2.000 23.133 1.00 0.00 C +ATOM 285 C PRO A 39 -8.863 2.474 21.787 1.00 0.00 C +ATOM 286 CB PRO A 39 -7.748 3.173 23.934 1.00 0.00 C +ATOM 287 O PRO A 39 -10.057 2.762 21.666 1.00 0.00 O +ATOM 288 CG PRO A 39 -6.594 2.594 24.688 1.00 0.00 C +ATOM 289 CD PRO A 39 -6.004 1.478 23.874 1.00 0.00 C +ATOM 290 N ASP A 40 -8.068 2.468 20.731 1.00 0.00 N +ATOM 291 CA ASP A 40 -8.452 2.969 19.415 1.00 0.00 C +ATOM 292 C ASP A 40 -9.034 1.852 18.551 1.00 0.00 C +ATOM 293 CB ASP A 40 -7.252 3.607 18.712 1.00 0.00 C +ATOM 294 O ASP A 40 -9.337 2.064 17.375 1.00 0.00 O +ATOM 295 CG ASP A 40 -6.113 2.630 18.480 1.00 0.00 C +ATOM 296 OD1 ASP A 40 -5.040 3.049 17.994 1.00 0.00 O +ATOM 297 OD2 ASP A 40 -6.290 1.431 18.784 1.00 0.00 O +ATOM 298 N GLY A 41 -9.199 0.638 19.013 1.00 0.00 N +ATOM 299 CA GLY A 41 -9.761 -0.484 18.279 1.00 0.00 C +ATOM 300 C GLY A 41 -8.723 -1.268 17.500 1.00 0.00 C +ATOM 301 O GLY A 41 -9.019 -2.338 16.963 1.00 0.00 O +ATOM 302 N SER A 42 -7.510 -0.651 17.403 1.00 0.00 N +ATOM 303 CA SER A 42 -6.433 -1.355 16.714 1.00 0.00 C +ATOM 304 C SER A 42 -5.824 -2.436 17.601 1.00 0.00 C +ATOM 305 CB SER A 42 -5.346 -0.373 16.274 1.00 0.00 C +ATOM 306 O SER A 42 -6.031 -2.440 18.816 1.00 0.00 O +ATOM 307 OG SER A 42 -4.758 0.262 17.396 1.00 0.00 O +ATOM 308 N TYR A 43 -5.412 -3.575 16.938 1.00 0.00 N +ATOM 309 CA TYR A 43 -4.705 -4.628 17.660 1.00 0.00 C +ATOM 310 C TYR A 43 -3.244 -4.254 17.877 1.00 0.00 C +ATOM 311 CB TYR A 43 -4.798 -5.955 16.901 1.00 0.00 C +ATOM 312 O TYR A 43 -2.651 -3.542 17.063 1.00 0.00 O +ATOM 313 CG TYR A 43 -6.184 -6.551 16.887 1.00 0.00 C +ATOM 314 CD1 TYR A 43 -7.022 -6.388 15.786 1.00 0.00 C +ATOM 315 CD2 TYR A 43 -6.659 -7.277 17.974 1.00 0.00 C +ATOM 316 CE1 TYR A 43 -8.302 -6.934 15.769 1.00 0.00 C +ATOM 317 CE2 TYR A 43 -7.937 -7.827 17.968 1.00 0.00 C +ATOM 318 OH TYR A 43 -10.015 -8.194 16.852 1.00 0.00 O +ATOM 319 CZ TYR A 43 -8.749 -7.651 16.863 1.00 0.00 C +ATOM 320 N ALA A 44 -3.024 -4.415 19.155 1.00 0.00 N +ATOM 321 CA ALA A 44 -1.659 -4.137 19.595 1.00 0.00 C +ATOM 322 C ALA A 44 -0.642 -4.865 18.721 1.00 0.00 C +ATOM 323 CB ALA A 44 -1.480 -4.536 21.058 1.00 0.00 C +ATOM 324 O ALA A 44 0.477 -4.383 18.527 1.00 0.00 O +ATOM 325 N HIS A 45 -1.081 -5.938 17.989 1.00 0.00 N +ATOM 326 CA HIS A 45 -0.065 -6.665 17.236 1.00 0.00 C +ATOM 327 C HIS A 45 -0.455 -6.795 15.768 1.00 0.00 C +ATOM 328 CB HIS A 45 0.163 -8.051 17.843 1.00 0.00 C +ATOM 329 O HIS A 45 -1.558 -7.246 15.452 1.00 0.00 O +ATOM 330 CG HIS A 45 1.501 -8.634 17.520 1.00 0.00 C +ATOM 331 CD2 HIS A 45 2.577 -8.880 18.304 1.00 0.00 C +ATOM 332 ND1 HIS A 45 1.850 -9.037 16.249 1.00 0.00 N +ATOM 333 CE1 HIS A 45 3.086 -9.508 16.266 1.00 0.00 C +ATOM 334 NE2 HIS A 45 3.550 -9.423 17.502 1.00 0.00 N +ATOM 335 N PRO A 46 0.267 -6.191 14.776 1.00 0.00 N +ATOM 336 CA PRO A 46 0.007 -6.193 13.334 1.00 0.00 C +ATOM 337 C PRO A 46 -0.224 -7.596 12.778 1.00 0.00 C +ATOM 338 CB PRO A 46 1.278 -5.574 12.747 1.00 0.00 C +ATOM 339 O PRO A 46 -0.835 -7.750 11.717 1.00 0.00 O +ATOM 340 CG PRO A 46 2.320 -5.770 13.800 1.00 0.00 C +ATOM 341 CD PRO A 46 1.648 -5.768 15.143 1.00 0.00 C +ATOM 342 N CYS A 47 0.238 -8.592 13.354 1.00 0.00 N +ATOM 343 CA CYS A 47 0.115 -9.950 12.835 1.00 0.00 C +ATOM 344 C CYS A 47 -1.253 -10.537 13.163 1.00 0.00 C +ATOM 345 CB CYS A 47 1.214 -10.844 13.408 1.00 0.00 C +ATOM 346 O CYS A 47 -1.515 -11.707 12.880 1.00 0.00 O +ATOM 347 SG CYS A 47 1.222 -10.923 15.212 1.00 0.00 S +ATOM 348 N ARG A 48 -2.155 -9.724 13.452 1.00 0.00 N +ATOM 349 CA ARG A 48 -3.422 -10.192 14.005 1.00 0.00 C +ATOM 350 C ARG A 48 -4.542 -10.086 12.974 1.00 0.00 C +ATOM 351 CB ARG A 48 -3.788 -9.396 15.260 1.00 0.00 C +ATOM 352 O ARG A 48 -4.649 -9.082 12.268 1.00 0.00 O +ATOM 353 CG ARG A 48 -5.032 -9.905 15.970 1.00 0.00 C +ATOM 354 CD ARG A 48 -5.909 -8.761 16.460 1.00 0.00 C +ATOM 355 NE ARG A 48 -6.344 -7.906 15.359 1.00 0.00 N +ATOM 356 NH1 ARG A 48 -6.885 -6.103 16.700 1.00 0.00 N +ATOM 357 NH2 ARG A 48 -7.167 -5.974 14.429 1.00 0.00 N +ATOM 358 CZ ARG A 48 -6.798 -6.663 15.499 1.00 0.00 C +ATOM 359 N ARG A 49 -5.146 -11.174 12.527 1.00 0.00 N +ATOM 360 CA ARG A 49 -6.391 -11.158 11.765 1.00 0.00 C +ATOM 361 C ARG A 49 -7.546 -11.713 12.593 1.00 0.00 C +ATOM 362 CB ARG A 49 -6.241 -11.962 10.472 1.00 0.00 C +ATOM 363 O ARG A 49 -7.402 -12.739 13.261 1.00 0.00 O +ATOM 364 CG ARG A 49 -5.303 -11.327 9.458 1.00 0.00 C +ATOM 365 CD ARG A 49 -5.887 -10.048 8.873 1.00 0.00 C +ATOM 366 NE ARG A 49 -5.349 -9.769 7.544 1.00 0.00 N +ATOM 367 NH1 ARG A 49 -6.902 -8.137 7.033 1.00 0.00 N +ATOM 368 NH2 ARG A 49 -5.276 -8.694 5.516 1.00 0.00 N +ATOM 369 CZ ARG A 49 -5.843 -8.867 6.701 1.00 0.00 C +ATOM 370 N CYS A 50 -8.427 -10.800 12.832 1.00 0.00 N +ATOM 371 CA CYS A 50 -9.591 -11.226 13.601 1.00 0.00 C +ATOM 372 C CYS A 50 -10.795 -11.442 12.692 1.00 0.00 C +ATOM 373 CB CYS A 50 -9.931 -10.193 14.675 1.00 0.00 C +ATOM 374 O CYS A 50 -11.034 -10.657 11.773 1.00 0.00 O +ATOM 375 SG CYS A 50 -8.684 -10.057 15.975 1.00 0.00 S +ATOM 376 N ASP A 51 -11.409 -12.618 12.691 1.00 0.00 N +ATOM 377 CA ASP A 51 -12.641 -12.851 11.943 1.00 0.00 C +ATOM 378 C ASP A 51 -13.818 -12.115 12.580 1.00 0.00 C +ATOM 379 CB ASP A 51 -12.942 -14.349 11.858 1.00 0.00 C +ATOM 380 O ASP A 51 -13.640 -11.361 13.539 1.00 0.00 O +ATOM 381 CG ASP A 51 -13.232 -14.974 13.211 1.00 0.00 C +ATOM 382 OD1 ASP A 51 -13.125 -16.212 13.347 1.00 0.00 O +ATOM 383 OD2 ASP A 51 -13.573 -14.221 14.150 1.00 0.00 O +ATOM 384 N ALA A 52 -15.076 -12.051 11.991 1.00 0.00 N +ATOM 385 CA ALA A 52 -16.275 -11.314 12.381 1.00 0.00 C +ATOM 386 C ALA A 52 -16.730 -11.710 13.783 1.00 0.00 C +ATOM 387 CB ALA A 52 -17.397 -11.550 11.374 1.00 0.00 C +ATOM 388 O ALA A 52 -17.439 -10.952 14.450 1.00 0.00 O +ATOM 389 N ASN A 53 -16.263 -12.790 14.290 1.00 0.00 N +ATOM 390 CA ASN A 53 -16.638 -13.257 15.620 1.00 0.00 C +ATOM 391 C ASN A 53 -15.557 -12.943 16.650 1.00 0.00 C +ATOM 392 CB ASN A 53 -16.930 -14.759 15.599 1.00 0.00 C +ATOM 393 O ASN A 53 -15.602 -13.442 17.776 1.00 0.00 O +ATOM 394 CG ASN A 53 -18.169 -15.101 14.795 1.00 0.00 C +ATOM 395 ND2 ASN A 53 -18.098 -16.183 14.029 1.00 0.00 N +ATOM 396 OD1 ASN A 53 -19.181 -14.399 14.862 1.00 0.00 O +ATOM 397 N ASN A 54 -14.551 -12.153 16.191 1.00 0.00 N +ATOM 398 CA ASN A 54 -13.470 -11.666 17.041 1.00 0.00 C +ATOM 399 C ASN A 54 -12.543 -12.798 17.474 1.00 0.00 C +ATOM 400 CB ASN A 54 -14.034 -10.943 18.266 1.00 0.00 C +ATOM 401 O ASN A 54 -11.968 -12.753 18.563 1.00 0.00 O +ATOM 402 CG ASN A 54 -14.752 -9.657 17.906 1.00 0.00 C +ATOM 403 ND2 ASN A 54 -15.894 -9.418 18.540 1.00 0.00 N +ATOM 404 OD1 ASN A 54 -14.285 -8.885 17.065 1.00 0.00 O +ATOM 405 N ILE A 55 -12.428 -13.839 16.751 1.00 0.00 N +ATOM 406 CA ILE A 55 -11.423 -14.875 16.963 1.00 0.00 C +ATOM 407 C ILE A 55 -10.158 -14.536 16.179 1.00 0.00 C +ATOM 408 CB ILE A 55 -11.952 -16.268 16.552 1.00 0.00 C +ATOM 409 O ILE A 55 -10.162 -14.552 14.946 1.00 0.00 O +ATOM 410 CG1 ILE A 55 -13.233 -16.602 17.325 1.00 0.00 C +ATOM 411 CG2 ILE A 55 -10.881 -17.340 16.777 1.00 0.00 C +ATOM 412 CD1 ILE A 55 -13.942 -17.857 16.834 1.00 0.00 C +ATOM 413 N CYS A 56 -9.197 -14.050 16.887 1.00 0.00 N +ATOM 414 CA CYS A 56 -7.960 -13.587 16.266 1.00 0.00 C +ATOM 415 C CYS A 56 -6.914 -14.694 16.244 1.00 0.00 C +ATOM 416 CB CYS A 56 -7.411 -12.369 17.009 1.00 0.00 C +ATOM 417 O CYS A 56 -6.807 -15.473 17.192 1.00 0.00 O +ATOM 418 SG CYS A 56 -8.495 -10.925 16.941 1.00 0.00 S +ATOM 419 N LYS A 57 -6.417 -14.976 15.112 1.00 0.00 N +ATOM 420 CA LYS A 57 -5.263 -15.861 14.977 1.00 0.00 C +ATOM 421 C LYS A 57 -4.007 -15.075 14.612 1.00 0.00 C +ATOM 422 CB LYS A 57 -5.532 -16.937 13.924 1.00 0.00 C +ATOM 423 O LYS A 57 -4.077 -14.092 13.873 1.00 0.00 O +ATOM 424 CG LYS A 57 -6.672 -17.880 14.280 1.00 0.00 C +ATOM 425 CD LYS A 57 -6.811 -19.000 13.257 1.00 0.00 C +ATOM 426 CE LYS A 57 -7.903 -19.986 13.651 1.00 0.00 C +ATOM 427 NZ LYS A 57 -7.947 -21.161 12.730 1.00 0.00 N +ATOM 428 N CYS A 58 -2.976 -15.105 15.608 1.00 0.00 N +ATOM 429 CA CYS A 58 -1.644 -14.583 15.328 1.00 0.00 C +ATOM 430 C CYS A 58 -0.938 -15.425 14.272 1.00 0.00 C +ATOM 431 CB CYS A 58 -0.804 -14.543 16.605 1.00 0.00 C +ATOM 432 O CYS A 58 -0.662 -16.605 14.495 1.00 0.00 O +ATOM 433 SG CYS A 58 -1.471 -13.452 17.881 1.00 0.00 S +ATOM 434 N SER A 59 -1.100 -15.266 13.105 1.00 0.00 N +ATOM 435 CA SER A 59 -0.317 -16.194 12.296 1.00 0.00 C +ATOM 436 C SER A 59 0.363 -15.475 11.135 1.00 0.00 C +ATOM 437 CB SER A 59 -1.204 -17.319 11.760 1.00 0.00 C +ATOM 438 O SER A 59 -0.281 -15.151 10.135 1.00 0.00 O +ATOM 439 OG SER A 59 -0.425 -18.302 11.100 1.00 0.00 O +ATOM 440 N CYS A 60 1.699 -14.861 11.329 1.00 0.00 N +ATOM 441 CA CYS A 60 2.405 -14.577 10.084 1.00 0.00 C +ATOM 442 C CYS A 60 2.585 -15.845 9.258 1.00 0.00 C +ATOM 443 CB CYS A 60 3.768 -13.947 10.372 1.00 0.00 C +ATOM 444 O CYS A 60 2.717 -15.781 8.035 1.00 0.00 O +ATOM 445 SG CYS A 60 4.863 -14.997 11.352 1.00 0.00 S +ATOM 446 N THR A 61 2.370 -16.747 10.083 1.00 0.00 N +ATOM 447 CA THR A 61 2.549 -18.025 9.403 1.00 0.00 C +ATOM 448 C THR A 61 1.237 -18.493 8.779 1.00 0.00 C +ATOM 449 CB THR A 61 3.075 -19.103 10.369 1.00 0.00 C +ATOM 450 O THR A 61 1.241 -19.301 7.848 1.00 0.00 O +ATOM 451 CG2 THR A 61 4.474 -18.758 10.869 1.00 0.00 C +ATOM 452 OG1 THR A 61 2.190 -19.204 11.491 1.00 0.00 O +ATOM 453 N ALA A 62 0.127 -17.759 9.279 1.00 0.00 N +ATOM 454 CA ALA A 62 -1.157 -18.259 8.792 1.00 0.00 C +ATOM 455 C ALA A 62 -1.490 -17.673 7.423 1.00 0.00 C +ATOM 456 CB ALA A 62 -2.266 -17.936 9.790 1.00 0.00 C +ATOM 457 O ALA A 62 -2.183 -18.305 6.623 1.00 0.00 O +ATOM 458 N ILE A 63 -0.953 -16.508 7.207 1.00 0.00 N +ATOM 459 CA ILE A 63 -1.310 -15.966 5.900 1.00 0.00 C +ATOM 460 C ILE A 63 -0.123 -16.091 4.948 1.00 0.00 C +ATOM 461 CB ILE A 63 -1.761 -14.492 6.004 1.00 0.00 C +ATOM 462 O ILE A 63 0.973 -15.611 5.246 1.00 0.00 O +ATOM 463 CG1 ILE A 63 -2.978 -14.369 6.929 1.00 0.00 C +ATOM 464 CG2 ILE A 63 -2.068 -13.922 4.616 1.00 0.00 C +ATOM 465 CD1 ILE A 63 -3.430 -12.936 7.171 1.00 0.00 C +ATOM 466 N PRO A 64 -0.261 -17.160 4.081 1.00 0.00 N +ATOM 467 CA PRO A 64 0.812 -17.254 3.088 1.00 0.00 C +ATOM 468 C PRO A 64 1.182 -15.899 2.489 1.00 0.00 C +ATOM 469 CB PRO A 64 0.224 -18.181 2.021 1.00 0.00 C +ATOM 470 O PRO A 64 0.304 -15.069 2.242 1.00 0.00 O +ATOM 471 CG PRO A 64 -1.257 -18.050 2.175 1.00 0.00 C +ATOM 472 CD PRO A 64 -1.560 -17.707 3.605 1.00 0.00 C +ATOM 473 N CYS A 65 2.470 -15.492 2.721 1.00 0.00 N +ATOM 474 CA CYS A 65 2.970 -14.283 2.076 1.00 0.00 C +ATOM 475 C CYS A 65 2.884 -14.399 0.559 1.00 0.00 C +ATOM 476 CB CYS A 65 4.415 -14.011 2.494 1.00 0.00 C +ATOM 477 O CYS A 65 3.627 -15.170 -0.052 1.00 0.00 O +ATOM 478 SG CYS A 65 4.983 -12.341 2.107 1.00 0.00 S +ATOM 479 N ASN A 66 1.810 -14.008 0.034 1.00 0.00 N +ATOM 480 CA ASN A 66 1.657 -13.952 -1.416 1.00 0.00 C +ATOM 481 C ASN A 66 1.636 -12.512 -1.922 1.00 0.00 C +ATOM 482 CB ASN A 66 0.388 -14.686 -1.851 1.00 0.00 C +ATOM 483 O ASN A 66 1.843 -11.575 -1.149 1.00 0.00 O +ATOM 484 CG ASN A 66 -0.864 -14.121 -1.209 1.00 0.00 C +ATOM 485 ND2 ASN A 66 -1.787 -14.999 -0.835 1.00 0.00 N +ATOM 486 OD1 ASN A 66 -0.999 -12.905 -1.050 1.00 0.00 O +ATOM 487 N GLU A 67 1.630 -12.346 -3.214 1.00 0.00 N +ATOM 488 CA GLU A 67 1.700 -11.038 -3.857 1.00 0.00 C +ATOM 489 C GLU A 67 0.657 -10.083 -3.284 1.00 0.00 C +ATOM 490 CB GLU A 67 1.515 -11.172 -5.371 1.00 0.00 C +ATOM 491 O GLU A 67 0.820 -8.863 -3.353 1.00 0.00 O +ATOM 492 CG GLU A 67 0.220 -11.863 -5.773 1.00 0.00 C +ATOM 493 CD GLU A 67 0.104 -12.095 -7.271 1.00 0.00 C +ATOM 494 OE1 GLU A 67 -1.026 -12.040 -7.808 1.00 0.00 O +ATOM 495 OE2 GLU A 67 1.151 -12.333 -7.914 1.00 0.00 O +ATOM 496 N ASP A 68 -0.317 -10.492 -2.553 1.00 0.00 N +ATOM 497 CA ASP A 68 -1.388 -9.666 -2.004 1.00 0.00 C +ATOM 498 C ASP A 68 -1.103 -9.292 -0.551 1.00 0.00 C +ATOM 499 CB ASP A 68 -2.731 -10.391 -2.108 1.00 0.00 C +ATOM 500 O ASP A 68 -1.847 -8.517 0.053 1.00 0.00 O +ATOM 501 CG ASP A 68 -3.195 -10.578 -3.541 1.00 0.00 C +ATOM 502 OD1 ASP A 68 -3.828 -11.611 -3.848 1.00 0.00 O +ATOM 503 OD2 ASP A 68 -2.923 -9.685 -4.373 1.00 0.00 O +ATOM 504 N HIS A 69 -0.167 -9.956 0.090 1.00 0.00 N +ATOM 505 CA HIS A 69 0.211 -9.683 1.472 1.00 0.00 C +ATOM 506 C HIS A 69 1.044 -8.410 1.574 1.00 0.00 C +ATOM 507 CB HIS A 69 0.985 -10.865 2.059 1.00 0.00 C +ATOM 508 O HIS A 69 2.031 -8.249 0.852 1.00 0.00 O +ATOM 509 CG HIS A 69 1.021 -10.875 3.555 1.00 0.00 C +ATOM 510 CD2 HIS A 69 0.448 -11.711 4.452 1.00 0.00 C +ATOM 511 ND1 HIS A 69 1.712 -9.936 4.288 1.00 0.00 N +ATOM 512 CE1 HIS A 69 1.562 -10.195 5.577 1.00 0.00 C +ATOM 513 NE2 HIS A 69 0.800 -11.267 5.703 1.00 0.00 N +ATOM 514 N PRO A 70 0.701 -7.489 2.427 1.00 0.00 N +ATOM 515 CA PRO A 70 1.384 -6.197 2.516 1.00 0.00 C +ATOM 516 C PRO A 70 2.882 -6.337 2.776 1.00 0.00 C +ATOM 517 CB PRO A 70 0.687 -5.510 3.693 1.00 0.00 C +ATOM 518 O PRO A 70 3.663 -5.461 2.397 1.00 0.00 O +ATOM 519 CG PRO A 70 -0.046 -6.606 4.396 1.00 0.00 C +ATOM 520 CD PRO A 70 -0.242 -7.742 3.433 1.00 0.00 C +ATOM 521 N CYS A 71 3.295 -7.400 3.302 1.00 0.00 N +ATOM 522 CA CYS A 71 4.698 -7.619 3.633 1.00 0.00 C +ATOM 523 C CYS A 71 5.402 -8.407 2.534 1.00 0.00 C +ATOM 524 CB CYS A 71 4.825 -8.359 4.965 1.00 0.00 C +ATOM 525 O CYS A 71 6.576 -8.754 2.669 1.00 0.00 O +ATOM 526 SG CYS A 71 4.149 -7.448 6.371 1.00 0.00 S +ATOM 527 N HIS A 72 4.559 -8.757 1.576 1.00 0.00 N +ATOM 528 CA HIS A 72 5.119 -9.541 0.482 1.00 0.00 C +ATOM 529 C HIS A 72 6.010 -8.684 -0.411 1.00 0.00 C +ATOM 530 CB HIS A 72 4.003 -10.179 -0.347 1.00 0.00 C +ATOM 531 O HIS A 72 5.596 -7.614 -0.864 1.00 0.00 O +ATOM 532 CG HIS A 72 4.498 -10.942 -1.534 1.00 0.00 C +ATOM 533 CD2 HIS A 72 4.508 -10.627 -2.851 1.00 0.00 C +ATOM 534 ND1 HIS A 72 5.064 -12.194 -1.431 1.00 0.00 N +ATOM 535 CE1 HIS A 72 5.402 -12.618 -2.638 1.00 0.00 C +ATOM 536 NE2 HIS A 72 5.076 -11.686 -3.517 1.00 0.00 N +ATOM 537 N HIS A 73 7.276 -9.193 -0.608 1.00 0.00 N +ATOM 538 CA HIS A 73 8.219 -8.528 -1.500 1.00 0.00 C +ATOM 539 C HIS A 73 8.888 -9.527 -2.439 1.00 0.00 C +ATOM 540 CB HIS A 73 9.278 -7.774 -0.695 1.00 0.00 C +ATOM 541 O HIS A 73 9.246 -10.632 -2.024 1.00 0.00 O +ATOM 542 CG HIS A 73 8.715 -6.693 0.172 1.00 0.00 C +ATOM 543 CD2 HIS A 73 8.550 -6.625 1.514 1.00 0.00 C +ATOM 544 ND1 HIS A 73 8.240 -5.504 -0.336 1.00 0.00 N +ATOM 545 CE1 HIS A 73 7.806 -4.749 0.660 1.00 0.00 C +ATOM 546 NE2 HIS A 73 7.983 -5.406 1.793 1.00 0.00 N +ATOM 547 N CYS A 74 8.907 -9.137 -3.729 1.00 0.00 N +ATOM 548 CA CYS A 74 9.582 -9.976 -4.713 1.00 0.00 C +ATOM 549 C CYS A 74 10.677 -9.199 -5.433 1.00 0.00 C +ATOM 550 CB CYS A 74 8.580 -10.523 -5.729 1.00 0.00 C +ATOM 551 O CYS A 74 10.529 -8.003 -5.689 1.00 0.00 O +ATOM 552 SG CYS A 74 7.391 -11.686 -5.025 1.00 0.00 S +ATOM 553 N HIS A 75 11.715 -9.738 -5.575 1.00 0.00 N +ATOM 554 CA HIS A 75 12.772 -9.115 -6.364 1.00 0.00 C +ATOM 555 C HIS A 75 13.308 -10.074 -7.422 1.00 0.00 C +ATOM 556 CB HIS A 75 13.910 -8.643 -5.458 1.00 0.00 C +ATOM 557 O HIS A 75 13.275 -11.292 -7.235 1.00 0.00 O +ATOM 558 CG HIS A 75 14.605 -9.755 -4.740 1.00 0.00 C +ATOM 559 CD2 HIS A 75 15.789 -10.366 -4.981 1.00 0.00 C +ATOM 560 ND1 HIS A 75 14.075 -10.368 -3.625 1.00 0.00 N +ATOM 561 CE1 HIS A 75 14.905 -11.310 -3.211 1.00 0.00 C +ATOM 562 NE2 HIS A 75 15.954 -11.330 -4.016 1.00 0.00 N +ATOM 563 N GLU A 76 13.647 -9.546 -8.538 1.00 0.00 N +ATOM 564 CA GLU A 76 14.228 -10.322 -9.630 1.00 0.00 C +ATOM 565 C GLU A 76 15.753 -10.283 -9.585 1.00 0.00 C +ATOM 566 CB GLU A 76 13.727 -9.806 -10.981 1.00 0.00 C +ATOM 567 O GLU A 76 16.350 -9.205 -9.546 1.00 0.00 O +ATOM 568 CG GLU A 76 14.060 -10.722 -12.150 1.00 0.00 C +ATOM 569 CD GLU A 76 13.399 -10.297 -13.452 1.00 0.00 C +ATOM 570 OE1 GLU A 76 12.554 -9.373 -13.430 1.00 0.00 O +ATOM 571 OE2 GLU A 76 13.727 -10.894 -14.501 1.00 0.00 O +ATOM 572 N GLU A 77 16.313 -11.414 -9.551 1.00 0.00 N +ATOM 573 CA GLU A 77 17.769 -11.510 -9.570 1.00 0.00 C +ATOM 574 C GLU A 77 18.310 -11.423 -10.994 1.00 0.00 C +ATOM 575 CB GLU A 77 18.231 -12.812 -8.911 1.00 0.00 C +ATOM 576 O GLU A 77 17.548 -11.510 -11.959 1.00 0.00 O +ATOM 577 CG GLU A 77 17.844 -12.929 -7.444 1.00 0.00 C +ATOM 578 CD GLU A 77 18.639 -12.003 -6.537 1.00 0.00 C +ATOM 579 OE1 GLU A 77 19.776 -11.626 -6.901 1.00 0.00 O +ATOM 580 OE2 GLU A 77 18.120 -11.651 -5.454 1.00 0.00 O +ATOM 581 N ASP A 78 19.573 -11.066 -11.091 1.00 0.00 N +ATOM 582 CA ASP A 78 20.266 -10.915 -12.367 1.00 0.00 C +ATOM 583 C ASP A 78 20.084 -12.153 -13.241 1.00 0.00 C +ATOM 584 CB ASP A 78 21.755 -10.645 -12.140 1.00 0.00 C +ATOM 585 O ASP A 78 20.095 -12.059 -14.470 1.00 0.00 O +ATOM 586 CG ASP A 78 22.029 -9.254 -11.597 1.00 0.00 C +ATOM 587 OD1 ASP A 78 23.114 -9.028 -11.018 1.00 0.00 O +ATOM 588 OD2 ASP A 78 21.152 -8.376 -11.747 1.00 0.00 O +ATOM 589 N ASP A 79 19.875 -13.279 -12.572 1.00 0.00 N +ATOM 590 CA ASP A 79 19.730 -14.515 -13.335 1.00 0.00 C +ATOM 591 C ASP A 79 18.288 -14.708 -13.799 1.00 0.00 C +ATOM 592 CB ASP A 79 20.180 -15.716 -12.501 1.00 0.00 C +ATOM 593 O ASP A 79 17.946 -15.750 -14.363 1.00 0.00 O +ATOM 594 CG ASP A 79 19.357 -15.903 -11.238 1.00 0.00 C +ATOM 595 OD1 ASP A 79 19.656 -16.822 -10.446 1.00 0.00 O +ATOM 596 OD2 ASP A 79 18.399 -15.127 -11.036 1.00 0.00 O +ATOM 597 N GLY A 80 17.414 -13.715 -13.581 1.00 0.00 N +ATOM 598 CA GLY A 80 16.044 -13.776 -14.063 1.00 0.00 C +ATOM 599 C GLY A 80 15.095 -14.439 -13.081 1.00 0.00 C +ATOM 600 O GLY A 80 13.881 -14.444 -13.291 1.00 0.00 O +ATOM 601 N ASP A 81 15.662 -15.063 -12.040 1.00 0.00 N +ATOM 602 CA ASP A 81 14.823 -15.721 -11.043 1.00 0.00 C +ATOM 603 C ASP A 81 14.161 -14.699 -10.121 1.00 0.00 C +ATOM 604 CB ASP A 81 15.646 -16.715 -10.221 1.00 0.00 C +ATOM 605 O ASP A 81 14.715 -13.625 -9.878 1.00 0.00 O +ATOM 606 CG ASP A 81 16.113 -17.911 -11.031 1.00 0.00 C +ATOM 607 OD1 ASP A 81 17.118 -18.550 -10.652 1.00 0.00 O +ATOM 608 OD2 ASP A 81 15.472 -18.216 -12.060 1.00 0.00 O +ATOM 609 N THR A 82 12.968 -14.929 -9.764 1.00 0.00 N +ATOM 610 CA THR A 82 12.231 -14.082 -8.832 1.00 0.00 C +ATOM 611 C THR A 82 12.233 -14.689 -7.432 1.00 0.00 C +ATOM 612 CB THR A 82 10.780 -13.868 -9.299 1.00 0.00 C +ATOM 613 O THR A 82 11.931 -15.872 -7.262 1.00 0.00 O +ATOM 614 CG2 THR A 82 10.028 -12.938 -8.352 1.00 0.00 C +ATOM 615 OG1 THR A 82 10.786 -13.291 -10.611 1.00 0.00 O +ATOM 616 N HIS A 83 12.679 -13.936 -6.510 1.00 0.00 N +ATOM 617 CA HIS A 83 12.653 -14.347 -5.110 1.00 0.00 C +ATOM 618 C HIS A 83 11.661 -13.511 -4.309 1.00 0.00 C +ATOM 619 CB HIS A 83 14.049 -14.239 -4.494 1.00 0.00 C +ATOM 620 O HIS A 83 11.675 -12.280 -4.387 1.00 0.00 O +ATOM 621 CG HIS A 83 15.047 -15.170 -5.104 1.00 0.00 C +ATOM 622 CD2 HIS A 83 15.925 -14.991 -6.119 1.00 0.00 C +ATOM 623 ND1 HIS A 83 15.219 -16.466 -4.669 1.00 0.00 N +ATOM 624 CE1 HIS A 83 16.163 -17.046 -5.391 1.00 0.00 C +ATOM 625 NE2 HIS A 83 16.608 -16.172 -6.279 1.00 0.00 N +ATOM 626 N CYS A 84 10.791 -14.185 -3.722 1.00 0.00 N +ATOM 627 CA CYS A 84 9.793 -13.514 -2.896 1.00 0.00 C +ATOM 628 C CYS A 84 10.017 -13.813 -1.419 1.00 0.00 C +ATOM 629 CB CYS A 84 8.384 -13.942 -3.305 1.00 0.00 C +ATOM 630 O CYS A 84 10.408 -14.924 -1.059 1.00 0.00 O +ATOM 631 SG CYS A 84 7.968 -13.539 -5.016 1.00 0.00 S +ATOM 632 N HIS A 85 9.909 -12.859 -0.708 1.00 0.00 N +ATOM 633 CA HIS A 85 9.975 -13.070 0.733 1.00 0.00 C +ATOM 634 C HIS A 85 8.927 -12.236 1.461 1.00 0.00 C +ATOM 635 CB HIS A 85 11.372 -12.734 1.260 1.00 0.00 C +ATOM 636 O HIS A 85 8.377 -11.289 0.894 1.00 0.00 O +ATOM 637 CG HIS A 85 11.748 -11.296 1.089 1.00 0.00 C +ATOM 638 CD2 HIS A 85 11.777 -10.273 1.975 1.00 0.00 C +ATOM 639 ND1 HIS A 85 12.152 -10.772 -0.120 1.00 0.00 N +ATOM 640 CE1 HIS A 85 12.415 -9.485 0.031 1.00 0.00 C +ATOM 641 NE2 HIS A 85 12.196 -9.157 1.293 1.00 0.00 N +ATOM 642 N CYS A 86 8.500 -12.728 2.583 1.00 0.00 N +ATOM 643 CA CYS A 86 7.596 -12.021 3.484 1.00 0.00 C +ATOM 644 C CYS A 86 8.373 -11.290 4.572 1.00 0.00 C +ATOM 645 CB CYS A 86 6.603 -12.993 4.119 1.00 0.00 C +ATOM 646 O CYS A 86 8.939 -11.920 5.467 1.00 0.00 O +ATOM 647 SG CYS A 86 5.473 -13.757 2.934 1.00 0.00 S +ATOM 648 N SER A 87 8.541 -10.143 4.355 1.00 0.00 N +ATOM 649 CA SER A 87 9.296 -9.406 5.363 1.00 0.00 C +ATOM 650 C SER A 87 8.570 -8.129 5.774 1.00 0.00 C +ATOM 651 CB SER A 87 10.692 -9.064 4.843 1.00 0.00 C +ATOM 652 O SER A 87 8.018 -7.424 4.927 1.00 0.00 O +ATOM 653 OG SER A 87 11.410 -8.297 5.794 1.00 0.00 O +ATOM 654 N CYS A 88 8.324 -8.020 6.956 1.00 0.00 N +ATOM 655 CA CYS A 88 7.764 -6.786 7.497 1.00 0.00 C +ATOM 656 C CYS A 88 8.869 -5.829 7.928 1.00 0.00 C +ATOM 657 CB CYS A 88 6.847 -7.088 8.681 1.00 0.00 C +ATOM 658 O CYS A 88 8.600 -4.816 8.576 1.00 0.00 O +ATOM 659 SG CYS A 88 5.414 -8.102 8.253 1.00 0.00 S +ATOM 660 N GLU A 89 9.941 -6.277 7.427 1.00 0.00 N +ATOM 661 CA GLU A 89 11.079 -5.417 7.736 1.00 0.00 C +ATOM 662 C GLU A 89 11.164 -4.244 6.763 1.00 0.00 C +ATOM 663 CB GLU A 89 12.382 -6.219 7.709 1.00 0.00 C +ATOM 664 O GLU A 89 10.884 -4.397 5.572 1.00 0.00 O +ATOM 665 CG GLU A 89 12.497 -7.244 8.828 1.00 0.00 C +ATOM 666 CD GLU A 89 12.821 -6.626 10.178 1.00 0.00 C +ATOM 667 OE1 GLU A 89 13.318 -5.477 10.216 1.00 0.00 O +ATOM 668 OE2 GLU A 89 12.577 -7.295 11.207 1.00 0.00 O +ATOM 669 N HIS A 90 10.877 -2.882 7.151 1.00 0.00 N +ATOM 670 CA HIS A 90 11.037 -1.634 6.414 1.00 0.00 C +ATOM 671 C HIS A 90 12.477 -1.452 5.945 1.00 0.00 C +ATOM 672 CB HIS A 90 10.611 -0.444 7.276 1.00 0.00 C +ATOM 673 O HIS A 90 13.291 -0.847 6.647 1.00 0.00 O +ATOM 674 CG HIS A 90 9.172 -0.482 7.682 1.00 0.00 C +ATOM 675 CD2 HIS A 90 8.592 -0.729 8.880 1.00 0.00 C +ATOM 676 ND1 HIS A 90 8.143 -0.249 6.795 1.00 0.00 N +ATOM 677 CE1 HIS A 90 6.989 -0.350 7.434 1.00 0.00 C +ATOM 678 NE2 HIS A 90 7.234 -0.641 8.700 1.00 0.00 N +ATOM 679 N SER A 91 13.113 -2.415 5.257 1.00 0.00 N +ATOM 680 CA SER A 91 14.468 -1.999 4.909 1.00 0.00 C +ATOM 681 C SER A 91 14.482 -1.180 3.623 1.00 0.00 C +ATOM 682 CB SER A 91 15.380 -3.217 4.758 1.00 0.00 C +ATOM 683 O SER A 91 13.868 -1.568 2.627 1.00 0.00 O +ATOM 684 OG SER A 91 15.023 -3.974 3.614 1.00 0.00 O +ATOM 685 N HIS A 92 14.296 0.148 3.642 1.00 0.00 N +ATOM 686 CA HIS A 92 14.603 1.170 2.647 1.00 0.00 C +ATOM 687 C HIS A 92 15.930 0.882 1.953 1.00 0.00 C +ATOM 688 CB HIS A 92 14.638 2.555 3.295 1.00 0.00 C +ATOM 689 O HIS A 92 16.284 1.551 0.979 1.00 0.00 O +ATOM 690 CG HIS A 92 13.324 2.984 3.866 1.00 0.00 C +ATOM 691 CD2 HIS A 92 12.943 3.213 5.145 1.00 0.00 C +ATOM 692 ND1 HIS A 92 12.216 3.224 3.084 1.00 0.00 N +ATOM 693 CE1 HIS A 92 11.207 3.584 3.859 1.00 0.00 C +ATOM 694 NE2 HIS A 92 11.621 3.585 5.114 1.00 0.00 N +ATOM 695 N ASP A 93 16.676 -0.193 2.168 1.00 0.00 N +ATOM 696 CA ASP A 93 18.015 -0.132 1.589 1.00 0.00 C +ATOM 697 C ASP A 93 18.097 -0.954 0.305 1.00 0.00 C +ATOM 698 CB ASP A 93 19.058 -0.622 2.596 1.00 0.00 C +ATOM 699 O ASP A 93 19.179 -1.132 -0.256 1.00 0.00 O +ATOM 700 CG ASP A 93 19.487 0.454 3.577 1.00 0.00 C +ATOM 701 OD1 ASP A 93 20.370 0.192 4.423 1.00 0.00 O +ATOM 702 OD2 ASP A 93 18.935 1.573 3.507 1.00 0.00 O +ATOM 703 N HIS A 94 17.467 -0.634 -0.758 1.00 0.00 N +ATOM 704 CA HIS A 94 18.140 -1.057 -1.982 1.00 0.00 C +ATOM 705 C HIS A 94 17.627 -0.280 -3.189 1.00 0.00 C +ATOM 706 CB HIS A 94 17.951 -2.559 -2.205 1.00 0.00 C +ATOM 707 O HIS A 94 16.419 -0.075 -3.334 1.00 0.00 O +ATOM 708 CG HIS A 94 18.800 -3.409 -1.315 1.00 0.00 C +ATOM 709 CD2 HIS A 94 18.467 -4.255 -0.312 1.00 0.00 C +ATOM 710 ND1 HIS A 94 20.175 -3.442 -1.407 1.00 0.00 N +ATOM 711 CE1 HIS A 94 20.651 -4.276 -0.497 1.00 0.00 C +ATOM 712 NE2 HIS A 94 19.635 -4.782 0.181 1.00 0.00 N +ATOM 713 N HIS A 95 18.249 0.957 -3.481 1.00 0.00 N +ATOM 714 CA HIS A 95 18.496 1.578 -4.778 1.00 0.00 C +ATOM 715 C HIS A 95 18.041 0.672 -5.918 1.00 0.00 C +ATOM 716 CB HIS A 95 19.979 1.916 -4.936 1.00 0.00 C +ATOM 717 O HIS A 95 18.521 0.799 -7.046 1.00 0.00 O +ATOM 718 CG HIS A 95 20.458 2.973 -3.992 1.00 0.00 C +ATOM 719 CD2 HIS A 95 21.388 2.932 -3.010 1.00 0.00 C +ATOM 720 ND1 HIS A 95 19.959 4.258 -3.999 1.00 0.00 N +ATOM 721 CE1 HIS A 95 20.565 4.963 -3.059 1.00 0.00 C +ATOM 722 NE2 HIS A 95 21.437 4.182 -2.444 1.00 0.00 N +ATOM 723 N ASP A 96 16.923 0.136 -5.980 1.00 0.00 N +ATOM 724 CA ASP A 96 16.554 -0.218 -7.347 1.00 0.00 C +ATOM 725 C ASP A 96 15.459 0.705 -7.877 1.00 0.00 C +ATOM 726 CB ASP A 96 16.093 -1.676 -7.418 1.00 0.00 C +ATOM 727 O ASP A 96 14.655 1.230 -7.104 1.00 0.00 O +ATOM 728 CG ASP A 96 17.246 -2.663 -7.414 1.00 0.00 C +ATOM 729 OD1 ASP A 96 17.024 -3.859 -7.125 1.00 0.00 O +ATOM 730 OD2 ASP A 96 18.388 -2.242 -7.699 1.00 0.00 O +ATOM 731 N ASP A 97 15.890 1.837 -8.509 1.00 0.00 N +ATOM 732 CA ASP A 97 15.081 2.551 -9.491 1.00 0.00 C +ATOM 733 C ASP A 97 13.874 1.718 -9.918 1.00 0.00 C +ATOM 734 CB ASP A 97 15.923 2.923 -10.713 1.00 0.00 C +ATOM 735 O ASP A 97 13.369 1.874 -11.032 1.00 0.00 O +ATOM 736 CG ASP A 97 16.981 3.969 -10.409 1.00 0.00 C +ATOM 737 OD1 ASP A 97 18.049 3.963 -11.058 1.00 0.00 O +ATOM 738 OD2 ASP A 97 16.746 4.804 -9.509 1.00 0.00 O +ATOM 739 N ASP A 98 13.468 0.802 -9.181 1.00 0.00 N +ATOM 740 CA ASP A 98 12.224 0.241 -9.699 1.00 0.00 C +ATOM 741 C ASP A 98 11.093 1.266 -9.639 1.00 0.00 C +ATOM 742 CB ASP A 98 11.837 -1.017 -8.920 1.00 0.00 C +ATOM 743 O ASP A 98 10.974 2.010 -8.663 1.00 0.00 O +ATOM 744 CG ASP A 98 12.688 -2.222 -9.278 1.00 0.00 C +ATOM 745 OD1 ASP A 98 12.775 -3.170 -8.468 1.00 0.00 O +ATOM 746 OD2 ASP A 98 13.280 -2.223 -10.379 1.00 0.00 O +ATOM 747 N THR A 99 11.132 2.146 -10.695 1.00 0.00 N +ATOM 748 CA THR A 99 9.998 2.959 -11.120 1.00 0.00 C +ATOM 749 C THR A 99 8.685 2.355 -10.628 1.00 0.00 C +ATOM 750 CB THR A 99 9.957 3.102 -12.653 1.00 0.00 C +ATOM 751 O THR A 99 7.730 2.223 -11.396 1.00 0.00 O +ATOM 752 CG2 THR A 99 11.214 3.791 -13.174 1.00 0.00 C +ATOM 753 OG1 THR A 99 9.857 1.802 -13.246 1.00 0.00 O +ATOM 754 N HIS A 100 8.653 1.675 -9.540 1.00 0.00 N +ATOM 755 CA HIS A 100 7.234 1.548 -9.228 1.00 0.00 C +ATOM 756 C HIS A 100 6.625 2.899 -8.870 1.00 0.00 C +ATOM 757 CB HIS A 100 7.024 0.557 -8.082 1.00 0.00 C +ATOM 758 O HIS A 100 7.154 3.617 -8.019 1.00 0.00 O +ATOM 759 CG HIS A 100 7.437 -0.842 -8.414 1.00 0.00 C +ATOM 760 CD2 HIS A 100 8.446 -1.607 -7.937 1.00 0.00 C +ATOM 761 ND1 HIS A 100 6.777 -1.610 -9.349 1.00 0.00 N +ATOM 762 CE1 HIS A 100 7.365 -2.793 -9.431 1.00 0.00 C +ATOM 763 NE2 HIS A 100 8.380 -2.816 -8.585 1.00 0.00 N +ATOM 764 N GLY A 101 6.381 3.654 -9.900 1.00 0.00 N +ATOM 765 CA GLY A 101 5.487 4.753 -9.574 1.00 0.00 C +ATOM 766 C GLY A 101 4.744 4.550 -8.267 1.00 0.00 C +ATOM 767 O GLY A 101 3.522 4.386 -8.261 1.00 0.00 O +ATOM 768 N GLU A 102 5.430 3.707 -7.432 1.00 0.00 N +ATOM 769 CA GLU A 102 4.594 3.693 -6.235 1.00 0.00 C +ATOM 770 C GLU A 102 4.478 5.087 -5.627 1.00 0.00 C +ATOM 771 CB GLU A 102 5.153 2.712 -5.201 1.00 0.00 C +ATOM 772 O GLU A 102 5.392 5.905 -5.757 1.00 0.00 O +ATOM 773 CG GLU A 102 5.195 1.269 -5.681 1.00 0.00 C +ATOM 774 CD GLU A 102 3.815 0.668 -5.897 1.00 0.00 C +ATOM 775 OE1 GLU A 102 2.810 1.292 -5.486 1.00 0.00 O +ATOM 776 OE2 GLU A 102 3.738 -0.436 -6.481 1.00 0.00 O +ATOM 777 N CYS A 103 3.304 5.585 -5.881 1.00 0.00 N +ATOM 778 CA CYS A 103 2.937 6.733 -5.061 1.00 0.00 C +ATOM 779 C CYS A 103 3.767 6.778 -3.783 1.00 0.00 C +ATOM 780 CB CYS A 103 1.449 6.690 -4.712 1.00 0.00 C +ATOM 781 O CYS A 103 3.803 5.806 -3.027 1.00 0.00 O +ATOM 782 SG CYS A 103 0.362 6.999 -6.121 1.00 0.00 S +ATOM 783 N THR A 104 4.856 7.423 -3.910 1.00 0.00 N +ATOM 784 CA THR A 104 5.617 7.650 -2.686 1.00 0.00 C +ATOM 785 C THR A 104 5.025 8.808 -1.888 1.00 0.00 C +ATOM 786 CB THR A 104 7.098 7.939 -2.995 1.00 0.00 C +ATOM 787 O THR A 104 4.142 9.517 -2.375 1.00 0.00 O +ATOM 788 CG2 THR A 104 7.686 6.875 -3.916 1.00 0.00 C +ATOM 789 OG1 THR A 104 7.206 9.219 -3.631 1.00 0.00 O +ATOM 790 N LYS A 105 5.301 8.726 -0.683 1.00 0.00 N +ATOM 791 CA LYS A 105 4.870 9.830 0.169 1.00 0.00 C +ATOM 792 C LYS A 105 5.196 11.178 -0.469 1.00 0.00 C +ATOM 793 CB LYS A 105 5.523 9.731 1.548 1.00 0.00 C +ATOM 794 O LYS A 105 4.534 12.179 -0.190 1.00 0.00 O +ATOM 795 CG LYS A 105 4.955 8.625 2.425 1.00 0.00 C +ATOM 796 CD LYS A 105 5.514 8.690 3.840 1.00 0.00 C +ATOM 797 CE LYS A 105 4.894 7.627 4.736 1.00 0.00 C +ATOM 798 NZ LYS A 105 5.487 7.643 6.107 1.00 0.00 N +ATOM 799 N LYS A 106 6.132 11.170 -1.417 1.00 0.00 N +ATOM 800 CA LYS A 106 6.565 12.408 -2.059 1.00 0.00 C +ATOM 801 C LYS A 106 5.727 12.707 -3.298 1.00 0.00 C +ATOM 802 CB LYS A 106 8.046 12.329 -2.434 1.00 0.00 C +ATOM 803 O LYS A 106 5.794 13.808 -3.849 1.00 0.00 O +ATOM 804 CG LYS A 106 8.986 12.274 -1.239 1.00 0.00 C +ATOM 805 CD LYS A 106 10.445 12.262 -1.676 1.00 0.00 C +ATOM 806 CE LYS A 106 11.387 12.222 -0.480 1.00 0.00 C +ATOM 807 NZ LYS A 106 12.817 12.151 -0.903 1.00 0.00 N +ATOM 808 N ALA A 107 5.009 11.655 -3.672 1.00 0.00 N +ATOM 809 CA ALA A 107 4.208 11.854 -4.877 1.00 0.00 C +ATOM 810 C ALA A 107 3.004 12.748 -4.594 1.00 0.00 C +ATOM 811 CB ALA A 107 3.749 10.511 -5.439 1.00 0.00 C +ATOM 812 O ALA A 107 2.358 12.618 -3.552 1.00 0.00 O +ATOM 813 N PRO A 108 2.750 13.735 -5.350 1.00 0.00 N +ATOM 814 CA PRO A 108 1.593 14.609 -5.140 1.00 0.00 C +ATOM 815 C PRO A 108 0.271 13.845 -5.124 1.00 0.00 C +ATOM 816 CB PRO A 108 1.656 15.568 -6.331 1.00 0.00 C +ATOM 817 O PRO A 108 -0.730 14.348 -4.607 1.00 0.00 O +ATOM 818 CG PRO A 108 2.473 14.851 -7.356 1.00 0.00 C +ATOM 819 CD PRO A 108 3.398 13.901 -6.650 1.00 0.00 C +ATOM 820 N CYS A 109 0.245 12.652 -5.681 1.00 0.00 N +ATOM 821 CA CYS A 109 -1.009 11.911 -5.770 1.00 0.00 C +ATOM 822 C CYS A 109 -1.162 10.954 -4.594 1.00 0.00 C +ATOM 823 CB CYS A 109 -1.079 11.134 -7.084 1.00 0.00 C +ATOM 824 O CYS A 109 -2.174 10.261 -4.480 1.00 0.00 O +ATOM 825 SG CYS A 109 0.290 9.980 -7.322 1.00 0.00 S +ATOM 826 N TRP A 110 -0.068 10.925 -3.822 1.00 0.00 N +ATOM 827 CA TRP A 110 -0.125 10.100 -2.621 1.00 0.00 C +ATOM 828 C TRP A 110 -1.071 10.704 -1.589 1.00 0.00 C +ATOM 829 CB TRP A 110 1.272 9.934 -2.016 1.00 0.00 C +ATOM 830 O TRP A 110 -0.962 11.887 -1.255 1.00 0.00 O +ATOM 831 CG TRP A 110 1.322 8.997 -0.846 1.00 0.00 C +ATOM 832 CD1 TRP A 110 1.696 7.682 -0.859 1.00 0.00 C +ATOM 833 CD2 TRP A 110 0.980 9.304 0.509 1.00 0.00 C +ATOM 834 CE2 TRP A 110 1.172 8.127 1.266 1.00 0.00 C +ATOM 835 CE3 TRP A 110 0.531 10.462 1.158 1.00 0.00 C +ATOM 836 NE1 TRP A 110 1.608 7.153 0.408 1.00 0.00 N +ATOM 837 CH2 TRP A 110 0.491 9.222 3.250 1.00 0.00 C +ATOM 838 CZ2 TRP A 110 0.929 8.075 2.640 1.00 0.00 C +ATOM 839 CZ3 TRP A 110 0.290 10.409 2.526 1.00 0.00 C +ATOM 840 N ARG A 111 -2.102 9.880 -1.162 1.00 0.00 N +ATOM 841 CA ARG A 111 -3.086 10.357 -0.197 1.00 0.00 C +ATOM 842 C ARG A 111 -3.345 9.313 0.884 1.00 0.00 C +ATOM 843 CB ARG A 111 -4.397 10.720 -0.899 1.00 0.00 C +ATOM 844 O ARG A 111 -3.329 8.111 0.610 1.00 0.00 O +ATOM 845 CG ARG A 111 -5.466 11.263 0.034 1.00 0.00 C +ATOM 846 CD ARG A 111 -5.180 12.701 0.443 1.00 0.00 C +ATOM 847 NE ARG A 111 -6.289 13.277 1.200 1.00 0.00 N +ATOM 848 NH1 ARG A 111 -5.313 15.357 1.444 1.00 0.00 N +ATOM 849 NH2 ARG A 111 -7.384 14.946 2.335 1.00 0.00 N +ATOM 850 CZ ARG A 111 -6.326 14.525 1.658 1.00 0.00 C +ATOM 851 N CYS A 112 -3.365 9.888 2.033 1.00 0.00 N +ATOM 852 CA CYS A 112 -3.705 9.030 3.162 1.00 0.00 C +ATOM 853 C CYS A 112 -5.019 9.463 3.801 1.00 0.00 C +ATOM 854 CB CYS A 112 -2.589 9.051 4.206 1.00 0.00 C +ATOM 855 O CYS A 112 -5.318 10.657 3.866 1.00 0.00 O +ATOM 856 SG CYS A 112 -1.031 8.349 3.621 1.00 0.00 S +ATOM 857 N GLU A 113 -5.830 8.580 3.951 1.00 0.00 N +ATOM 858 CA GLU A 113 -7.053 8.822 4.710 1.00 0.00 C +ATOM 859 C GLU A 113 -7.031 8.080 6.044 1.00 0.00 C +ATOM 860 CB GLU A 113 -8.282 8.407 3.897 1.00 0.00 C +ATOM 861 O GLU A 113 -6.553 6.947 6.122 1.00 0.00 O +ATOM 862 CG GLU A 113 -8.500 9.241 2.643 1.00 0.00 C +ATOM 863 CD GLU A 113 -9.731 8.826 1.853 1.00 0.00 C +ATOM 864 OE1 GLU A 113 -10.458 7.909 2.299 1.00 0.00 O +ATOM 865 OE2 GLU A 113 -9.971 9.422 0.780 1.00 0.00 O +ATOM 866 N TYR A 114 -7.305 8.869 7.059 1.00 0.00 N +ATOM 867 CA TYR A 114 -7.411 8.262 8.381 1.00 0.00 C +ATOM 868 C TYR A 114 -8.671 7.412 8.491 1.00 0.00 C +ATOM 869 CB TYR A 114 -7.412 9.340 9.469 1.00 0.00 C +ATOM 870 O TYR A 114 -9.775 7.889 8.219 1.00 0.00 O +ATOM 871 CG TYR A 114 -7.392 8.785 10.872 1.00 0.00 C +ATOM 872 CD1 TYR A 114 -8.527 8.834 11.678 1.00 0.00 C +ATOM 873 CD2 TYR A 114 -6.238 8.213 11.396 1.00 0.00 C +ATOM 874 CE1 TYR A 114 -8.513 8.326 12.973 1.00 0.00 C +ATOM 875 CE2 TYR A 114 -6.212 7.702 12.690 1.00 0.00 C +ATOM 876 OH TYR A 114 -7.333 7.258 14.750 1.00 0.00 O +ATOM 877 CZ TYR A 114 -7.353 7.762 13.469 1.00 0.00 C +ATOM 878 N ASN A 115 -8.439 6.137 8.704 1.00 0.00 N +ATOM 879 CA ASN A 115 -9.527 5.202 8.972 1.00 0.00 C +ATOM 880 C ASN A 115 -9.770 5.039 10.469 1.00 0.00 C +ATOM 881 CB ASN A 115 -9.238 3.844 8.330 1.00 0.00 C +ATOM 882 O ASN A 115 -8.953 4.443 11.174 1.00 0.00 O +ATOM 883 CG ASN A 115 -10.442 2.922 8.345 1.00 0.00 C +ATOM 884 ND2 ASN A 115 -10.511 2.021 7.373 1.00 0.00 N +ATOM 885 OD1 ASN A 115 -11.302 3.020 9.224 1.00 0.00 O +ATOM 886 N ALA A 116 -10.796 5.699 10.920 1.00 0.00 N +ATOM 887 CA ALA A 116 -11.108 5.723 12.347 1.00 0.00 C +ATOM 888 C ALA A 116 -11.283 4.310 12.894 1.00 0.00 C +ATOM 889 CB ALA A 116 -12.366 6.549 12.603 1.00 0.00 C +ATOM 890 O ALA A 116 -10.898 4.025 14.031 1.00 0.00 O +ATOM 891 N ASP A 117 -11.725 3.414 12.007 1.00 0.00 N +ATOM 892 CA ASP A 117 -11.929 2.033 12.433 1.00 0.00 C +ATOM 893 C ASP A 117 -10.595 1.313 12.619 1.00 0.00 C +ATOM 894 CB ASP A 117 -12.796 1.281 11.421 1.00 0.00 C +ATOM 895 O ASP A 117 -10.432 0.529 13.557 1.00 0.00 O +ATOM 896 CG ASP A 117 -14.225 1.793 11.369 1.00 0.00 C +ATOM 897 OD1 ASP A 117 -14.898 1.618 10.331 1.00 0.00 O +ATOM 898 OD2 ASP A 117 -14.681 2.378 12.375 1.00 0.00 O +ATOM 899 N LEU A 118 -9.664 1.666 11.738 1.00 0.00 N +ATOM 900 CA LEU A 118 -8.349 1.035 11.785 1.00 0.00 C +ATOM 901 C LEU A 118 -7.364 1.891 12.575 1.00 0.00 C +ATOM 902 CB LEU A 118 -7.816 0.800 10.369 1.00 0.00 C +ATOM 903 O LEU A 118 -6.231 1.472 12.822 1.00 0.00 O +ATOM 904 CG LEU A 118 -8.639 -0.135 9.481 1.00 0.00 C +ATOM 905 CD1 LEU A 118 -8.022 -0.225 8.090 1.00 0.00 C +ATOM 906 CD2 LEU A 118 -8.746 -1.518 10.115 1.00 0.00 C +ATOM 907 N LYS A 119 -7.828 3.091 12.895 1.00 0.00 N +ATOM 908 CA LYS A 119 -6.988 4.069 13.580 1.00 0.00 C +ATOM 909 C LYS A 119 -5.640 4.222 12.882 1.00 0.00 C +ATOM 910 CB LYS A 119 -6.780 3.668 15.041 1.00 0.00 C +ATOM 911 O LYS A 119 -4.596 4.257 13.537 1.00 0.00 O +ATOM 912 CG LYS A 119 -8.064 3.604 15.855 1.00 0.00 C +ATOM 913 CD LYS A 119 -7.786 3.255 17.311 1.00 0.00 C +ATOM 914 CE LYS A 119 -9.062 3.263 18.143 1.00 0.00 C +ATOM 915 NZ LYS A 119 -8.786 2.979 19.583 1.00 0.00 N +ATOM 916 N HIS A 120 -5.544 4.099 11.731 1.00 0.00 N +ATOM 917 CA HIS A 120 -4.341 4.353 10.946 1.00 0.00 C +ATOM 918 C HIS A 120 -4.690 4.898 9.565 1.00 0.00 C +ATOM 919 CB HIS A 120 -3.510 3.075 10.811 1.00 0.00 C +ATOM 920 O HIS A 120 -5.853 4.869 9.156 1.00 0.00 O +ATOM 921 CG HIS A 120 -4.217 1.973 10.089 1.00 0.00 C +ATOM 922 CD2 HIS A 120 -4.107 1.532 8.813 1.00 0.00 C +ATOM 923 ND1 HIS A 120 -5.174 1.183 10.689 1.00 0.00 N +ATOM 924 CE1 HIS A 120 -5.622 0.301 9.811 1.00 0.00 C +ATOM 925 NE2 HIS A 120 -4.990 0.491 8.666 1.00 0.00 N +ATOM 926 N ASP A 121 -3.704 5.475 9.017 1.00 0.00 N +ATOM 927 CA ASP A 121 -3.873 6.009 7.669 1.00 0.00 C +ATOM 928 C ASP A 121 -3.838 4.892 6.628 1.00 0.00 C +ATOM 929 CB ASP A 121 -2.792 7.047 7.363 1.00 0.00 C +ATOM 930 O ASP A 121 -3.053 3.949 6.747 1.00 0.00 O +ATOM 931 CG ASP A 121 -2.917 8.301 8.210 1.00 0.00 C +ATOM 932 OD1 ASP A 121 -1.936 9.069 8.312 1.00 0.00 O +ATOM 933 OD2 ASP A 121 -4.006 8.521 8.784 1.00 0.00 O +ATOM 934 N VAL A 122 -4.829 4.935 5.875 1.00 0.00 N +ATOM 935 CA VAL A 122 -4.775 4.123 4.663 1.00 0.00 C +ATOM 936 C VAL A 122 -4.276 4.971 3.495 1.00 0.00 C +ATOM 937 CB VAL A 122 -6.154 3.511 4.328 1.00 0.00 C +ATOM 938 O VAL A 122 -4.857 6.013 3.184 1.00 0.00 O +ATOM 939 CG1 VAL A 122 -6.063 2.625 3.087 1.00 0.00 C +ATOM 940 CG2 VAL A 122 -6.688 2.717 5.518 1.00 0.00 C +ATOM 941 N CYS A 123 -3.142 4.531 3.102 1.00 0.00 N +ATOM 942 CA CYS A 123 -2.472 5.318 2.073 1.00 0.00 C +ATOM 943 C CYS A 123 -2.628 4.669 0.702 1.00 0.00 C +ATOM 944 CB CYS A 123 -0.988 5.481 2.403 1.00 0.00 C +ATOM 945 O CYS A 123 -2.671 3.443 0.593 1.00 0.00 O +ATOM 946 SG CYS A 123 -0.681 6.285 3.991 1.00 0.00 S +ATOM 947 N GLY A 124 -2.924 5.462 -0.260 1.00 0.00 N +ATOM 948 CA GLY A 124 -2.940 5.028 -1.648 1.00 0.00 C +ATOM 949 C GLY A 124 -2.699 6.159 -2.630 1.00 0.00 C +ATOM 950 O GLY A 124 -2.463 7.299 -2.225 1.00 0.00 O +ATOM 951 N CYS A 125 -2.378 5.820 -3.813 1.00 0.00 N +ATOM 952 CA CYS A 125 -2.283 6.770 -4.916 1.00 0.00 C +ATOM 953 C CYS A 125 -3.667 7.160 -5.421 1.00 0.00 C +ATOM 954 CB CYS A 125 -1.458 6.183 -6.061 1.00 0.00 C +ATOM 955 O CYS A 125 -4.425 6.307 -5.886 1.00 0.00 O +ATOM 956 SG CYS A 125 0.275 5.900 -5.639 1.00 0.00 S +ATOM 957 N GLU A 126 -4.004 8.323 -5.203 1.00 0.00 N +ATOM 958 CA GLU A 126 -5.332 8.779 -5.604 1.00 0.00 C +ATOM 959 C GLU A 126 -5.243 9.988 -6.530 1.00 0.00 C +ATOM 960 CB GLU A 126 -6.177 9.119 -4.374 1.00 0.00 C +ATOM 961 O GLU A 126 -5.752 11.064 -6.206 1.00 0.00 O +ATOM 962 CG GLU A 126 -6.467 7.924 -3.478 1.00 0.00 C +ATOM 963 CD GLU A 126 -7.488 6.964 -4.068 1.00 0.00 C +ATOM 964 OE1 GLU A 126 -8.228 7.361 -4.997 1.00 0.00 O +ATOM 965 OE2 GLU A 126 -7.550 5.807 -3.597 1.00 0.00 O +ATOM 966 N CYS A 127 -4.822 9.841 -7.699 1.00 0.00 N +ATOM 967 CA CYS A 127 -4.615 10.948 -8.626 1.00 0.00 C +ATOM 968 C CYS A 127 -5.940 11.598 -9.005 1.00 0.00 C +ATOM 969 CB CYS A 127 -3.895 10.466 -9.885 1.00 0.00 C +ATOM 970 O CYS A 127 -5.987 12.790 -9.312 1.00 0.00 O +ATOM 971 SG CYS A 127 -2.217 9.868 -9.581 1.00 0.00 S +ATOM 972 N SER A 128 -6.846 10.833 -8.955 1.00 0.00 N +ATOM 973 CA SER A 128 -8.150 11.305 -9.408 1.00 0.00 C +ATOM 974 C SER A 128 -8.755 12.293 -8.417 1.00 0.00 C +ATOM 975 CB SER A 128 -9.104 10.128 -9.616 1.00 0.00 C +ATOM 976 O SER A 128 -9.642 13.073 -8.772 1.00 0.00 O +ATOM 977 OG SER A 128 -9.249 9.381 -8.420 1.00 0.00 O +ATOM 978 N LYS A 129 -8.286 12.254 -7.213 1.00 0.00 N +ATOM 979 CA LYS A 129 -8.887 13.076 -6.166 1.00 0.00 C +ATOM 980 C LYS A 129 -8.020 14.294 -5.859 1.00 0.00 C +ATOM 981 CB LYS A 129 -9.104 12.253 -4.896 1.00 0.00 C +ATOM 982 O LYS A 129 -8.420 15.169 -5.089 1.00 0.00 O +ATOM 983 CG LYS A 129 -10.151 11.158 -5.039 1.00 0.00 C +ATOM 984 CD LYS A 129 -10.395 10.441 -3.717 1.00 0.00 C +ATOM 985 CE LYS A 129 -11.490 9.392 -3.843 1.00 0.00 C +ATOM 986 NZ LYS A 129 -11.820 8.774 -2.524 1.00 0.00 N +ATOM 987 N LEU A 130 -6.820 14.391 -6.394 1.00 0.00 N +ATOM 988 CA LEU A 130 -5.922 15.506 -6.110 1.00 0.00 C +ATOM 989 C LEU A 130 -6.255 16.708 -6.987 1.00 0.00 C +ATOM 990 CB LEU A 130 -4.465 15.089 -6.326 1.00 0.00 C +ATOM 991 O LEU A 130 -6.713 16.548 -8.120 1.00 0.00 O +ATOM 992 CG LEU A 130 -3.879 14.117 -5.300 1.00 0.00 C +ATOM 993 CD1 LEU A 130 -2.476 13.689 -5.718 1.00 0.00 C +ATOM 994 CD2 LEU A 130 -3.859 14.751 -3.913 1.00 0.00 C +ATOM 995 N PRO A 131 -6.218 17.878 -6.321 1.00 0.00 N +ATOM 996 CA PRO A 131 -6.403 19.088 -7.125 1.00 0.00 C +ATOM 997 C PRO A 131 -5.423 19.176 -8.293 1.00 0.00 C +ATOM 998 CB PRO A 131 -6.159 20.219 -6.123 1.00 0.00 C +ATOM 999 O PRO A 131 -4.287 18.706 -8.188 1.00 0.00 O +ATOM 1000 CG PRO A 131 -5.279 19.617 -5.075 1.00 0.00 C +ATOM 1001 CD PRO A 131 -5.586 18.150 -4.979 1.00 0.00 C +ATOM 1002 N CYS A 132 -5.915 19.530 -9.527 1.00 0.00 N +ATOM 1003 CA CYS A 132 -5.087 19.711 -10.714 1.00 0.00 C +ATOM 1004 C CYS A 132 -4.132 20.886 -10.540 1.00 0.00 C +ATOM 1005 CB CYS A 132 -5.960 19.930 -11.949 1.00 0.00 C +ATOM 1006 O CYS A 132 -4.531 22.042 -10.690 1.00 0.00 O +ATOM 1007 SG CYS A 132 -6.896 18.468 -12.448 1.00 0.00 S +ATOM 1008 N ASN A 133 -3.080 20.705 -9.927 1.00 0.00 N +ATOM 1009 CA ASN A 133 -2.027 21.708 -9.810 1.00 0.00 C +ATOM 1010 C ASN A 133 -0.764 21.283 -10.553 1.00 0.00 C +ATOM 1011 CB ASN A 133 -1.710 21.986 -8.339 1.00 0.00 C +ATOM 1012 O ASN A 133 -0.740 20.230 -11.194 1.00 0.00 O +ATOM 1013 CG ASN A 133 -1.260 20.744 -7.595 1.00 0.00 C +ATOM 1014 ND2 ASN A 133 -1.758 20.570 -6.376 1.00 0.00 N +ATOM 1015 OD1 ASN A 133 -0.470 19.949 -8.110 1.00 0.00 O +ATOM 1016 N ASP A 134 0.201 22.148 -10.651 1.00 0.00 N +ATOM 1017 CA ASP A 134 1.408 21.962 -11.451 1.00 0.00 C +ATOM 1018 C ASP A 134 2.162 20.705 -11.023 1.00 0.00 C +ATOM 1019 CB ASP A 134 2.320 23.185 -11.338 1.00 0.00 C +ATOM 1020 O ASP A 134 2.999 20.192 -11.768 1.00 0.00 O +ATOM 1021 CG ASP A 134 1.789 24.392 -12.091 1.00 0.00 C +ATOM 1022 OD1 ASP A 134 2.250 25.525 -11.832 1.00 0.00 O +ATOM 1023 OD2 ASP A 134 0.898 24.210 -12.950 1.00 0.00 O +ATOM 1024 N GLU A 135 1.732 20.132 -9.899 1.00 0.00 N +ATOM 1025 CA GLU A 135 2.429 18.946 -9.410 1.00 0.00 C +ATOM 1026 C GLU A 135 1.714 17.669 -9.840 1.00 0.00 C +ATOM 1027 CB GLU A 135 2.559 18.988 -7.885 1.00 0.00 C +ATOM 1028 O GLU A 135 2.282 16.577 -9.766 1.00 0.00 O +ATOM 1029 CG GLU A 135 3.439 20.120 -7.374 1.00 0.00 C +ATOM 1030 CD GLU A 135 3.561 20.146 -5.859 1.00 0.00 C +ATOM 1031 OE1 GLU A 135 2.885 19.340 -5.181 1.00 0.00 O +ATOM 1032 OE2 GLU A 135 4.339 20.981 -5.346 1.00 0.00 O +ATOM 1033 N HIS A 136 0.480 17.885 -10.293 1.00 0.00 N +ATOM 1034 CA HIS A 136 -0.314 16.733 -10.704 1.00 0.00 C +ATOM 1035 C HIS A 136 0.053 16.287 -12.116 1.00 0.00 C +ATOM 1036 CB HIS A 136 -1.807 17.057 -10.628 1.00 0.00 C +ATOM 1037 O HIS A 136 0.114 17.107 -13.035 1.00 0.00 O +ATOM 1038 CG HIS A 136 -2.685 15.846 -10.645 1.00 0.00 C +ATOM 1039 CD2 HIS A 136 -3.469 15.303 -9.684 1.00 0.00 C +ATOM 1040 ND1 HIS A 136 -2.822 15.042 -11.756 1.00 0.00 N +ATOM 1041 CE1 HIS A 136 -3.655 14.054 -11.476 1.00 0.00 C +ATOM 1042 NE2 HIS A 136 -4.062 14.189 -10.225 1.00 0.00 N +ATOM 1043 N PRO A 137 0.226 15.184 -12.322 1.00 0.00 N +ATOM 1044 CA PRO A 137 0.690 14.688 -13.619 1.00 0.00 C +ATOM 1045 C PRO A 137 -0.331 14.908 -14.734 1.00 0.00 C +ATOM 1046 CB PRO A 137 0.910 13.194 -13.368 1.00 0.00 C +ATOM 1047 O PRO A 137 0.032 14.929 -15.913 1.00 0.00 O +ATOM 1048 CG PRO A 137 0.170 12.907 -12.101 1.00 0.00 C +ATOM 1049 CD PRO A 137 0.003 14.193 -11.344 1.00 0.00 C +ATOM 1050 N CYS A 138 -1.650 15.096 -14.399 1.00 0.00 N +ATOM 1051 CA CYS A 138 -2.702 15.293 -15.390 1.00 0.00 C +ATOM 1052 C CYS A 138 -2.947 16.776 -15.639 1.00 0.00 C +ATOM 1053 CB CYS A 138 -3.998 14.621 -14.937 1.00 0.00 C +ATOM 1054 O CYS A 138 -3.870 17.144 -16.368 1.00 0.00 O +ATOM 1055 SG CYS A 138 -3.887 12.822 -14.830 1.00 0.00 S +ATOM 1056 N TYR A 139 -2.050 17.530 -14.923 1.00 0.00 N +ATOM 1057 CA TYR A 139 -2.147 18.977 -15.082 1.00 0.00 C +ATOM 1058 C TYR A 139 -1.580 19.417 -16.427 1.00 0.00 C +ATOM 1059 CB TYR A 139 -1.411 19.693 -13.946 1.00 0.00 C +ATOM 1060 O TYR A 139 -0.470 19.029 -16.796 1.00 0.00 O +ATOM 1061 CG TYR A 139 -1.400 21.197 -14.083 1.00 0.00 C +ATOM 1062 CD1 TYR A 139 -0.320 21.854 -14.668 1.00 0.00 C +ATOM 1063 CD2 TYR A 139 -2.468 21.962 -13.627 1.00 0.00 C +ATOM 1064 CE1 TYR A 139 -0.305 23.239 -14.795 1.00 0.00 C +ATOM 1065 CE2 TYR A 139 -2.463 23.348 -13.748 1.00 0.00 C +ATOM 1066 OH TYR A 139 -1.369 25.348 -14.456 1.00 0.00 O +ATOM 1067 CZ TYR A 139 -1.379 23.976 -14.333 1.00 0.00 C +ATOM 1068 N ARG A 140 -2.489 20.100 -17.284 1.00 0.00 N +ATOM 1069 CA ARG A 140 -2.036 20.668 -18.550 1.00 0.00 C +ATOM 1070 C ARG A 140 -2.355 22.157 -18.626 1.00 0.00 C +ATOM 1071 CB ARG A 140 -2.678 19.934 -19.729 1.00 0.00 C +ATOM 1072 O ARG A 140 -3.435 22.589 -18.217 1.00 0.00 O +ATOM 1073 CG ARG A 140 -2.260 18.477 -19.849 1.00 0.00 C +ATOM 1074 CD ARG A 140 -2.856 17.819 -21.086 1.00 0.00 C +ATOM 1075 NE ARG A 140 -2.303 16.486 -21.307 1.00 0.00 N +ATOM 1076 NH1 ARG A 140 -1.510 16.942 -23.429 1.00 0.00 N +ATOM 1077 NH2 ARG A 140 -1.212 14.863 -22.510 1.00 0.00 N +ATOM 1078 CZ ARG A 140 -1.676 16.100 -22.415 1.00 0.00 C +ATOM 1079 N LYS A 141 -1.270 22.911 -18.875 1.00 0.00 N +ATOM 1080 CA LYS A 141 -1.432 24.343 -19.105 1.00 0.00 C +ATOM 1081 C LYS A 141 -1.210 24.693 -20.574 1.00 0.00 C +ATOM 1082 CB LYS A 141 -0.468 25.141 -18.226 1.00 0.00 C +ATOM 1083 O LYS A 141 -0.111 24.513 -21.101 1.00 0.00 O +ATOM 1084 CG LYS A 141 -0.749 26.636 -18.196 1.00 0.00 C +ATOM 1085 CD LYS A 141 0.167 27.359 -17.217 1.00 0.00 C +ATOM 1086 CE LYS A 141 -0.124 28.853 -17.175 1.00 0.00 C +ATOM 1087 NZ LYS A 141 0.783 29.568 -16.230 1.00 0.00 N +ATOM 1088 N GLU A 142 -2.285 24.849 -21.311 1.00 0.00 N +ATOM 1089 CA GLU A 142 -2.217 25.247 -22.713 1.00 0.00 C +ATOM 1090 C GLU A 142 -2.920 26.583 -22.942 1.00 0.00 C +ATOM 1091 CB GLU A 142 -2.832 24.169 -23.609 1.00 0.00 C +ATOM 1092 O GLU A 142 -4.113 26.718 -22.665 1.00 0.00 O +ATOM 1093 CG GLU A 142 -2.588 24.391 -25.095 1.00 0.00 C +ATOM 1094 CD GLU A 142 -3.160 23.287 -25.969 1.00 0.00 C +ATOM 1095 OE1 GLU A 142 -3.890 22.415 -25.445 1.00 0.00 O +ATOM 1096 OE2 GLU A 142 -2.875 23.292 -27.187 1.00 0.00 O +ATOM 1097 N GLY A 143 -2.182 27.579 -23.469 1.00 0.00 N +ATOM 1098 CA GLY A 143 -2.758 28.882 -23.764 1.00 0.00 C +ATOM 1099 C GLY A 143 -3.342 29.566 -22.543 1.00 0.00 C +ATOM 1100 O GLY A 143 -4.385 30.217 -22.629 1.00 0.00 O +ATOM 1101 N GLY A 144 -2.777 29.290 -21.354 1.00 0.00 N +ATOM 1102 CA GLY A 144 -3.245 29.947 -20.144 1.00 0.00 C +ATOM 1103 C GLY A 144 -4.395 29.217 -19.476 1.00 0.00 C +ATOM 1104 O GLY A 144 -4.892 29.651 -18.435 1.00 0.00 O +ATOM 1105 N VAL A 145 -4.936 28.140 -20.164 1.00 0.00 N +ATOM 1106 CA VAL A 145 -6.039 27.365 -19.605 1.00 0.00 C +ATOM 1107 C VAL A 145 -5.504 26.079 -18.980 1.00 0.00 C +ATOM 1108 CB VAL A 145 -7.101 27.035 -20.678 1.00 0.00 C +ATOM 1109 O VAL A 145 -4.666 25.395 -19.573 1.00 0.00 O +ATOM 1110 CG1 VAL A 145 -8.253 26.236 -20.071 1.00 0.00 C +ATOM 1111 CG2 VAL A 145 -7.619 28.316 -21.328 1.00 0.00 C +ATOM 1112 N VAL A 146 -5.959 25.837 -17.763 1.00 0.00 N +ATOM 1113 CA VAL A 146 -5.574 24.626 -17.045 1.00 0.00 C +ATOM 1114 C VAL A 146 -6.593 23.521 -17.311 1.00 0.00 C +ATOM 1115 CB VAL A 146 -5.450 24.882 -15.526 1.00 0.00 C +ATOM 1116 O VAL A 146 -7.803 23.758 -17.264 1.00 0.00 O +ATOM 1117 CG1 VAL A 146 -5.098 23.592 -14.788 1.00 0.00 C +ATOM 1118 CG2 VAL A 146 -4.405 25.962 -15.251 1.00 0.00 C +ATOM 1119 N SER A 147 -6.150 22.494 -17.818 1.00 0.00 N +ATOM 1120 CA SER A 147 -7.007 21.324 -17.979 1.00 0.00 C +ATOM 1121 C SER A 147 -6.522 20.161 -17.121 1.00 0.00 C +ATOM 1122 CB SER A 147 -7.062 20.898 -19.447 1.00 0.00 C +ATOM 1123 O SER A 147 -5.316 19.946 -16.982 1.00 0.00 O +ATOM 1124 OG SER A 147 -7.912 19.776 -19.614 1.00 0.00 O +ATOM 1125 N CYS A 148 -7.409 19.637 -16.271 1.00 0.00 N +ATOM 1126 CA CYS A 148 -7.135 18.448 -15.471 1.00 0.00 C +ATOM 1127 C CYS A 148 -7.876 17.237 -16.024 1.00 0.00 C +ATOM 1128 CB CYS A 148 -7.534 18.680 -14.014 1.00 0.00 C +ATOM 1129 O CYS A 148 -8.941 16.873 -15.523 1.00 0.00 O +ATOM 1130 SG CYS A 148 -6.884 17.438 -12.875 1.00 0.00 S +ATOM 1131 N ASP A 149 -7.699 16.869 -17.159 1.00 0.00 N +ATOM 1132 CA ASP A 149 -8.393 15.760 -17.806 1.00 0.00 C +ATOM 1133 C ASP A 149 -7.445 14.590 -18.056 1.00 0.00 C +ATOM 1134 CB ASP A 149 -9.023 16.217 -19.124 1.00 0.00 C +ATOM 1135 O ASP A 149 -6.548 14.679 -18.896 1.00 0.00 O +ATOM 1136 CG ASP A 149 -9.976 15.192 -19.713 1.00 0.00 C +ATOM 1137 OD1 ASP A 149 -10.762 15.540 -20.620 1.00 0.00 O +ATOM 1138 OD2 ASP A 149 -9.941 14.025 -19.265 1.00 0.00 O +ATOM 1139 N CYS A 150 -7.567 13.519 -17.222 1.00 0.00 N +ATOM 1140 CA CYS A 150 -6.727 12.334 -17.354 1.00 0.00 C +ATOM 1141 C CYS A 150 -7.054 11.573 -18.634 1.00 0.00 C +ATOM 1142 CB CYS A 150 -6.900 11.416 -16.145 1.00 0.00 C +ATOM 1143 O CYS A 150 -6.244 10.777 -19.112 1.00 0.00 O +ATOM 1144 SG CYS A 150 -6.406 12.171 -14.581 1.00 0.00 S +ATOM 1145 N LYS A 151 -8.188 11.835 -19.161 1.00 0.00 N +ATOM 1146 CA LYS A 151 -8.679 11.063 -20.298 1.00 0.00 C +ATOM 1147 C LYS A 151 -8.050 11.543 -21.603 1.00 0.00 C +ATOM 1148 CB LYS A 151 -10.204 11.151 -20.388 1.00 0.00 C +ATOM 1149 O LYS A 151 -7.990 10.796 -22.581 1.00 0.00 O +ATOM 1150 CG LYS A 151 -10.931 10.505 -19.219 1.00 0.00 C +ATOM 1151 CD LYS A 151 -12.443 10.620 -19.368 1.00 0.00 C +ATOM 1152 CE LYS A 151 -13.172 9.972 -18.199 1.00 0.00 C +ATOM 1153 NZ LYS A 151 -14.653 10.132 -18.313 1.00 0.00 N +ATOM 1154 N THR A 152 -7.674 12.782 -21.597 1.00 0.00 N +ATOM 1155 CA THR A 152 -7.207 13.367 -22.850 1.00 0.00 C +ATOM 1156 C THR A 152 -5.688 13.279 -22.954 1.00 0.00 C +ATOM 1157 CB THR A 152 -7.649 14.836 -22.979 1.00 0.00 C +ATOM 1158 O THR A 152 -5.115 13.562 -24.008 1.00 0.00 O +ATOM 1159 CG2 THR A 152 -9.168 14.950 -23.052 1.00 0.00 C +ATOM 1160 OG1 THR A 152 -7.180 15.572 -21.843 1.00 0.00 O +ATOM 1161 N ILE A 153 -5.064 12.924 -21.810 1.00 0.00 N +ATOM 1162 CA ILE A 153 -3.608 12.834 -21.820 1.00 0.00 C +ATOM 1163 C ILE A 153 -3.181 11.435 -22.259 1.00 0.00 C +ATOM 1164 CB ILE A 153 -3.011 13.167 -20.435 1.00 0.00 C +ATOM 1165 O ILE A 153 -3.826 10.444 -21.909 1.00 0.00 O +ATOM 1166 CG1 ILE A 153 -3.390 14.593 -20.018 1.00 0.00 C +ATOM 1167 CG2 ILE A 153 -1.490 12.986 -20.444 1.00 0.00 C +ATOM 1168 CD1 ILE A 153 -2.744 15.679 -20.868 1.00 0.00 C +ATOM 1169 N THR A 154 -2.270 11.363 -23.110 1.00 0.00 N +ATOM 1170 CA THR A 154 -1.713 10.090 -23.553 1.00 0.00 C +ATOM 1171 C THR A 154 -1.160 9.301 -22.370 1.00 0.00 C +ATOM 1172 CB THR A 154 -0.603 10.299 -24.599 1.00 0.00 C +ATOM 1173 O THR A 154 -0.336 9.812 -21.607 1.00 0.00 O +ATOM 1174 CG2 THR A 154 -0.102 8.965 -25.144 1.00 0.00 C +ATOM 1175 OG1 THR A 154 -1.117 11.082 -25.683 1.00 0.00 O +ATOM 1176 N CYS A 155 -1.859 8.148 -22.092 1.00 0.00 N +ATOM 1177 CA CYS A 155 -1.409 7.282 -21.008 1.00 0.00 C +ATOM 1178 C CYS A 155 -0.060 6.653 -21.338 1.00 0.00 C +ATOM 1179 CB CYS A 155 -2.439 6.187 -20.734 1.00 0.00 C +ATOM 1180 O CYS A 155 0.086 5.991 -22.367 1.00 0.00 O +ATOM 1181 SG CYS A 155 -4.010 6.809 -20.095 1.00 0.00 S +ATOM 1182 N ASN A 156 0.893 7.176 -20.743 1.00 0.00 N +ATOM 1183 CA ASN A 156 2.201 6.536 -20.836 1.00 0.00 C +ATOM 1184 C ASN A 156 2.611 5.904 -19.509 1.00 0.00 C +ATOM 1185 CB ASN A 156 3.259 7.541 -21.294 1.00 0.00 C +ATOM 1186 O ASN A 156 1.841 5.916 -18.546 1.00 0.00 O +ATOM 1187 CG ASN A 156 3.393 8.721 -20.351 1.00 0.00 C +ATOM 1188 ND2 ASN A 156 3.554 9.913 -20.912 1.00 0.00 N +ATOM 1189 OD1 ASN A 156 3.352 8.561 -19.128 1.00 0.00 O +ATOM 1190 N GLU A 157 3.624 5.165 -19.538 1.00 0.00 N +ATOM 1191 CA GLU A 157 4.078 4.402 -18.379 1.00 0.00 C +ATOM 1192 C GLU A 157 4.196 5.291 -17.145 1.00 0.00 C +ATOM 1193 CB GLU A 157 5.421 3.727 -18.672 1.00 0.00 C +ATOM 1194 O GLU A 157 4.169 4.799 -16.014 1.00 0.00 O +ATOM 1195 CG GLU A 157 5.336 2.611 -19.703 1.00 0.00 C +ATOM 1196 CD GLU A 157 6.670 1.925 -19.955 1.00 0.00 C +ATOM 1197 OE1 GLU A 157 7.660 2.250 -19.261 1.00 0.00 O +ATOM 1198 OE2 GLU A 157 6.725 1.058 -20.855 1.00 0.00 O +ATOM 1199 N ASP A 158 4.203 6.614 -17.357 1.00 0.00 N +ATOM 1200 CA ASP A 158 4.344 7.540 -16.237 1.00 0.00 C +ATOM 1201 C ASP A 158 2.979 8.001 -15.731 1.00 0.00 C +ATOM 1202 CB ASP A 158 5.190 8.748 -16.643 1.00 0.00 C +ATOM 1203 O ASP A 158 2.882 8.629 -14.675 1.00 0.00 O +ATOM 1204 CG ASP A 158 6.638 8.390 -16.927 1.00 0.00 C +ATOM 1205 OD1 ASP A 158 7.251 8.999 -17.830 1.00 0.00 O +ATOM 1206 OD2 ASP A 158 7.169 7.487 -16.244 1.00 0.00 O +ATOM 1207 N HIS A 159 2.048 7.688 -16.589 1.00 0.00 N +ATOM 1208 CA HIS A 159 0.697 8.104 -16.230 1.00 0.00 C +ATOM 1209 C HIS A 159 0.098 7.180 -15.176 1.00 0.00 C +ATOM 1210 CB HIS A 159 -0.199 8.139 -17.469 1.00 0.00 C +ATOM 1211 O HIS A 159 0.148 5.956 -15.317 1.00 0.00 O +ATOM 1212 CG HIS A 159 -1.463 8.914 -17.273 1.00 0.00 C +ATOM 1213 CD2 HIS A 159 -1.859 10.110 -17.769 1.00 0.00 C +ATOM 1214 ND1 HIS A 159 -2.495 8.466 -16.477 1.00 0.00 N +ATOM 1215 CE1 HIS A 159 -3.474 9.356 -16.493 1.00 0.00 C +ATOM 1216 NE2 HIS A 159 -3.113 10.363 -17.270 1.00 0.00 N +ATOM 1217 N PRO A 160 -0.393 7.607 -14.171 1.00 0.00 N +ATOM 1218 CA PRO A 160 -0.882 6.789 -13.059 1.00 0.00 C +ATOM 1219 C PRO A 160 -2.041 5.880 -13.461 1.00 0.00 C +ATOM 1220 CB PRO A 160 -1.334 7.828 -12.030 1.00 0.00 C +ATOM 1221 O PRO A 160 -2.326 4.896 -12.773 1.00 0.00 O +ATOM 1222 CG PRO A 160 -1.619 9.058 -12.828 1.00 0.00 C +ATOM 1223 CD PRO A 160 -0.678 9.096 -13.998 1.00 0.00 C +ATOM 1224 N CYS A 161 -2.737 6.193 -14.475 1.00 0.00 N +ATOM 1225 CA CYS A 161 -3.885 5.408 -14.913 1.00 0.00 C +ATOM 1226 C CYS A 161 -3.470 4.357 -15.936 1.00 0.00 C +ATOM 1227 CB CYS A 161 -4.960 6.317 -15.509 1.00 0.00 C +ATOM 1228 O CYS A 161 -4.312 3.621 -16.453 1.00 0.00 O +ATOM 1229 SG CYS A 161 -5.656 7.493 -14.328 1.00 0.00 S +ATOM 1230 N TYR A 162 -2.132 4.465 -16.183 1.00 0.00 N +ATOM 1231 CA TYR A 162 -1.573 3.516 -17.140 1.00 0.00 C +ATOM 1232 C TYR A 162 -1.452 2.127 -16.525 1.00 0.00 C +ATOM 1233 CB TYR A 162 -0.201 3.992 -17.629 1.00 0.00 C +ATOM 1234 O TYR A 162 -0.908 1.972 -15.429 1.00 0.00 O +ATOM 1235 CG TYR A 162 0.469 3.033 -18.583 1.00 0.00 C +ATOM 1236 CD1 TYR A 162 1.424 2.124 -18.131 1.00 0.00 C +ATOM 1237 CD2 TYR A 162 0.151 3.035 -19.936 1.00 0.00 C +ATOM 1238 CE1 TYR A 162 2.046 1.240 -19.007 1.00 0.00 C +ATOM 1239 CE2 TYR A 162 0.766 2.155 -20.821 1.00 0.00 C +ATOM 1240 OH TYR A 162 2.323 0.390 -21.219 1.00 0.00 O +ATOM 1241 CZ TYR A 162 1.710 1.263 -20.348 1.00 0.00 C +ATOM 1242 N HIS A 163 -2.235 1.147 -17.118 1.00 0.00 N +ATOM 1243 CA HIS A 163 -2.129 -0.243 -16.689 1.00 0.00 C +ATOM 1244 C HIS A 163 -1.553 -1.119 -17.797 1.00 0.00 C +ATOM 1245 CB HIS A 163 -3.496 -0.776 -16.256 1.00 0.00 C +ATOM 1246 O HIS A 163 -1.953 -1.002 -18.957 1.00 0.00 O +ATOM 1247 CG HIS A 163 -4.058 -0.081 -15.057 1.00 0.00 C +ATOM 1248 CD2 HIS A 163 -5.018 0.867 -14.948 1.00 0.00 C +ATOM 1249 ND1 HIS A 163 -3.625 -0.342 -13.775 1.00 0.00 N +ATOM 1250 CE1 HIS A 163 -4.297 0.419 -12.926 1.00 0.00 C +ATOM 1251 NE2 HIS A 163 -5.148 1.162 -13.613 1.00 0.00 N +ATOM 1252 N SER A 164 -0.416 -1.652 -17.433 1.00 0.00 N +ATOM 1253 CA SER A 164 0.122 -2.646 -18.356 1.00 0.00 C +ATOM 1254 C SER A 164 -0.175 -4.063 -17.877 1.00 0.00 C +ATOM 1255 CB SER A 164 1.630 -2.462 -18.523 1.00 0.00 C +ATOM 1256 O SER A 164 -0.055 -4.360 -16.687 1.00 0.00 O +ATOM 1257 OG SER A 164 2.304 -2.686 -17.297 1.00 0.00 O +ATOM 1258 N TYR A 165 -0.841 -4.799 -18.656 1.00 0.00 N +ATOM 1259 CA TYR A 165 -1.123 -6.182 -18.287 1.00 0.00 C +ATOM 1260 C TYR A 165 -0.783 -7.132 -19.429 1.00 0.00 C +ATOM 1261 CB TYR A 165 -2.594 -6.345 -17.894 1.00 0.00 C +ATOM 1262 O TYR A 165 -0.643 -6.705 -20.578 1.00 0.00 O +ATOM 1263 CG TYR A 165 -3.559 -6.039 -19.013 1.00 0.00 C +ATOM 1264 CD1 TYR A 165 -3.953 -4.730 -19.282 1.00 0.00 C +ATOM 1265 CD2 TYR A 165 -4.080 -7.058 -19.804 1.00 0.00 C +ATOM 1266 CE1 TYR A 165 -4.843 -4.444 -20.312 1.00 0.00 C +ATOM 1267 CE2 TYR A 165 -4.971 -6.783 -20.836 1.00 0.00 C +ATOM 1268 OH TYR A 165 -6.228 -5.197 -22.103 1.00 0.00 O +ATOM 1269 CZ TYR A 165 -5.346 -5.475 -21.082 1.00 0.00 C +ATOM 1270 N GLU A 166 -0.437 -8.271 -19.075 1.00 0.00 N +ATOM 1271 CA GLU A 166 -0.092 -9.311 -20.039 1.00 0.00 C +ATOM 1272 C GLU A 166 -1.292 -10.203 -20.342 1.00 0.00 C +ATOM 1273 CB GLU A 166 1.075 -10.158 -19.523 1.00 0.00 C +ATOM 1274 O GLU A 166 -1.951 -10.699 -19.426 1.00 0.00 O +ATOM 1275 CG GLU A 166 1.667 -11.091 -20.569 1.00 0.00 C +ATOM 1276 CD GLU A 166 2.944 -11.776 -20.108 1.00 0.00 C +ATOM 1277 OE1 GLU A 166 3.581 -11.289 -19.146 1.00 0.00 O +ATOM 1278 OE2 GLU A 166 3.310 -12.808 -20.713 1.00 0.00 O +ATOM 1279 N GLU A 167 -1.701 -10.268 -21.599 1.00 0.00 N +ATOM 1280 CA GLU A 167 -2.770 -11.135 -22.087 1.00 0.00 C +ATOM 1281 C GLU A 167 -2.310 -11.956 -23.288 1.00 0.00 C +ATOM 1282 CB GLU A 167 -4.006 -10.310 -22.455 1.00 0.00 C +ATOM 1283 O GLU A 167 -1.837 -11.400 -24.282 1.00 0.00 O +ATOM 1284 CG GLU A 167 -5.232 -11.150 -22.780 1.00 0.00 C +ATOM 1285 CD GLU A 167 -6.476 -10.318 -23.048 1.00 0.00 C +ATOM 1286 OE1 GLU A 167 -6.367 -9.075 -23.139 1.00 0.00 O +ATOM 1287 OE2 GLU A 167 -7.570 -10.915 -23.165 1.00 0.00 O +ATOM 1288 N ASP A 168 -2.308 -13.235 -23.226 1.00 0.00 N +ATOM 1289 CA ASP A 168 -1.919 -14.168 -24.278 1.00 0.00 C +ATOM 1290 C ASP A 168 -0.472 -13.938 -24.708 1.00 0.00 C +ATOM 1291 CB ASP A 168 -2.852 -14.039 -25.483 1.00 0.00 C +ATOM 1292 O ASP A 168 -0.162 -13.963 -25.901 1.00 0.00 O +ATOM 1293 CG ASP A 168 -4.284 -14.437 -25.170 1.00 0.00 C +ATOM 1294 OD1 ASP A 168 -5.222 -13.831 -25.730 1.00 0.00 O +ATOM 1295 OD2 ASP A 168 -4.475 -15.363 -24.352 1.00 0.00 O +ATOM 1296 N GLY A 169 0.378 -13.615 -23.661 1.00 0.00 N +ATOM 1297 CA GLY A 169 1.802 -13.483 -23.928 1.00 0.00 C +ATOM 1298 C GLY A 169 2.181 -12.123 -24.482 1.00 0.00 C +ATOM 1299 O GLY A 169 3.340 -11.889 -24.830 1.00 0.00 O +ATOM 1300 N VAL A 170 1.173 -11.220 -24.645 1.00 0.00 N +ATOM 1301 CA VAL A 170 1.451 -9.891 -25.180 1.00 0.00 C +ATOM 1302 C VAL A 170 1.131 -8.832 -24.128 1.00 0.00 C +ATOM 1303 CB VAL A 170 0.648 -9.620 -26.472 1.00 0.00 C +ATOM 1304 O VAL A 170 0.124 -8.932 -23.423 1.00 0.00 O +ATOM 1305 CG1 VAL A 170 0.954 -8.226 -27.016 1.00 0.00 C +ATOM 1306 CG2 VAL A 170 0.952 -10.686 -27.523 1.00 0.00 C +ATOM 1307 N THR A 171 2.053 -7.976 -23.977 1.00 0.00 N +ATOM 1308 CA THR A 171 1.846 -6.867 -23.053 1.00 0.00 C +ATOM 1309 C THR A 171 0.857 -5.859 -23.631 1.00 0.00 C +ATOM 1310 CB THR A 171 3.173 -6.158 -22.725 1.00 0.00 C +ATOM 1311 O THR A 171 1.042 -5.370 -24.747 1.00 0.00 O +ATOM 1312 CG2 THR A 171 2.958 -5.020 -21.732 1.00 0.00 C +ATOM 1313 OG1 THR A 171 4.087 -7.105 -22.158 1.00 0.00 O +ATOM 1314 N LYS A 172 -0.220 -5.669 -22.883 1.00 0.00 N +ATOM 1315 CA LYS A 172 -1.215 -4.669 -23.260 1.00 0.00 C +ATOM 1316 C LYS A 172 -1.232 -3.510 -22.267 1.00 0.00 C +ATOM 1317 CB LYS A 172 -2.604 -5.301 -23.351 1.00 0.00 C +ATOM 1318 O LYS A 172 -0.846 -3.673 -21.107 1.00 0.00 O +ATOM 1319 CG LYS A 172 -2.720 -6.393 -24.405 1.00 0.00 C +ATOM 1320 CD LYS A 172 -4.154 -6.886 -24.543 1.00 0.00 C +ATOM 1321 CE LYS A 172 -4.280 -7.941 -25.634 1.00 0.00 C +ATOM 1322 NZ LYS A 172 -5.700 -8.358 -25.841 1.00 0.00 N +ATOM 1323 N SER A 173 -1.325 -2.368 -22.806 1.00 0.00 N +ATOM 1324 CA SER A 173 -1.442 -1.178 -21.969 1.00 0.00 C +ATOM 1325 C SER A 173 -2.815 -0.530 -22.119 1.00 0.00 C +ATOM 1326 CB SER A 173 -0.350 -0.167 -22.320 1.00 0.00 C +ATOM 1327 O SER A 173 -3.418 -0.584 -23.193 1.00 0.00 O +ATOM 1328 OG SER A 173 -0.430 0.207 -23.684 1.00 0.00 O +ATOM 1329 N ASP A 174 -3.338 -0.380 -21.075 1.00 0.00 N +ATOM 1330 CA ASP A 174 -4.630 0.300 -21.062 1.00 0.00 C +ATOM 1331 C ASP A 174 -4.627 1.467 -20.077 1.00 0.00 C +ATOM 1332 CB ASP A 174 -5.749 -0.682 -20.712 1.00 0.00 C +ATOM 1333 O ASP A 174 -3.834 1.488 -19.134 1.00 0.00 O +ATOM 1334 CG ASP A 174 -7.118 -0.209 -21.168 1.00 0.00 C +ATOM 1335 OD1 ASP A 174 -8.137 -0.811 -20.767 1.00 0.00 O +ATOM 1336 OD2 ASP A 174 -7.178 0.774 -21.938 1.00 0.00 O +ATOM 1337 N CYS A 175 -5.254 2.474 -20.569 1.00 0.00 N +ATOM 1338 CA CYS A 175 -5.511 3.614 -19.696 1.00 0.00 C +ATOM 1339 C CYS A 175 -6.886 3.506 -19.049 1.00 0.00 C +ATOM 1340 CB CYS A 175 -5.407 4.922 -20.479 1.00 0.00 C +ATOM 1341 O CYS A 175 -7.906 3.530 -19.740 1.00 0.00 O +ATOM 1342 SG CYS A 175 -5.469 6.399 -19.441 1.00 0.00 S +ATOM 1343 N ASP A 176 -6.926 3.117 -17.897 1.00 0.00 N +ATOM 1344 CA ASP A 176 -8.216 2.947 -17.236 1.00 0.00 C +ATOM 1345 C ASP A 176 -8.579 4.181 -16.413 1.00 0.00 C +ATOM 1346 CB ASP A 176 -8.202 1.705 -16.343 1.00 0.00 C +ATOM 1347 O ASP A 176 -8.390 4.199 -15.195 1.00 0.00 O +ATOM 1348 CG ASP A 176 -9.574 1.352 -15.795 1.00 0.00 C +ATOM 1349 OD1 ASP A 176 -9.681 0.413 -14.978 1.00 0.00 O +ATOM 1350 OD2 ASP A 176 -10.557 2.018 -16.187 1.00 0.00 O +ATOM 1351 N CYS A 177 -8.999 5.207 -17.129 1.00 0.00 N +ATOM 1352 CA CYS A 177 -9.425 6.426 -16.450 1.00 0.00 C +ATOM 1353 C CYS A 177 -10.930 6.422 -16.214 1.00 0.00 C +ATOM 1354 CB CYS A 177 -9.030 7.658 -17.264 1.00 0.00 C +ATOM 1355 O CYS A 177 -11.489 7.406 -15.726 1.00 0.00 O +ATOM 1356 SG CYS A 177 -7.251 7.814 -17.535 1.00 0.00 S +ATOM 1357 N GLU A 178 -11.529 5.450 -16.815 1.00 0.00 N +ATOM 1358 CA GLU A 178 -12.986 5.385 -16.754 1.00 0.00 C +ATOM 1359 C GLU A 178 -13.473 5.263 -15.313 1.00 0.00 C +ATOM 1360 CB GLU A 178 -13.508 4.211 -17.586 1.00 0.00 C +ATOM 1361 O GLU A 178 -14.584 5.686 -14.990 1.00 0.00 O +ATOM 1362 CG GLU A 178 -13.379 4.417 -19.089 1.00 0.00 C +ATOM 1363 CD GLU A 178 -13.985 3.285 -19.903 1.00 0.00 C +ATOM 1364 OE1 GLU A 178 -14.377 2.254 -19.312 1.00 0.00 O +ATOM 1365 OE2 GLU A 178 -14.069 3.431 -21.143 1.00 0.00 O +ATOM 1366 N HIS A 179 -12.602 4.539 -14.596 1.00 0.00 N +ATOM 1367 CA HIS A 179 -13.083 4.370 -13.230 1.00 0.00 C +ATOM 1368 C HIS A 179 -12.913 5.654 -12.423 1.00 0.00 C +ATOM 1369 CB HIS A 179 -12.350 3.217 -12.542 1.00 0.00 C +ATOM 1370 O HIS A 179 -13.259 5.699 -11.241 1.00 0.00 O +ATOM 1371 CG HIS A 179 -12.672 1.874 -13.117 1.00 0.00 C +ATOM 1372 CD2 HIS A 179 -11.913 1.007 -13.828 1.00 0.00 C +ATOM 1373 ND1 HIS A 179 -13.911 1.286 -12.986 1.00 0.00 N +ATOM 1374 CE1 HIS A 179 -13.900 0.111 -13.593 1.00 0.00 C +ATOM 1375 NE2 HIS A 179 -12.700 -0.082 -14.113 1.00 0.00 N +ATOM 1376 N SER A 180 -12.761 6.762 -13.153 1.00 0.00 N +ATOM 1377 CA SER A 180 -12.625 8.074 -12.529 1.00 0.00 C +ATOM 1378 C SER A 180 -13.967 8.797 -12.465 1.00 0.00 C +ATOM 1379 CB SER A 180 -11.612 8.928 -13.291 1.00 0.00 C +ATOM 1380 O SER A 180 -14.740 8.767 -13.424 1.00 0.00 O +ATOM 1381 OG SER A 180 -12.114 9.284 -14.568 1.00 0.00 O +ATOM 1382 N PRO A 181 -14.719 8.802 -11.393 1.00 0.00 N +ATOM 1383 CA PRO A 181 -15.790 9.799 -11.316 1.00 0.00 C +ATOM 1384 C PRO A 181 -15.334 11.190 -11.748 1.00 0.00 C +ATOM 1385 CB PRO A 181 -16.178 9.786 -9.836 1.00 0.00 C +ATOM 1386 O PRO A 181 -14.337 11.704 -11.233 1.00 0.00 O +ATOM 1387 CG PRO A 181 -14.965 9.275 -9.127 1.00 0.00 C +ATOM 1388 CD PRO A 181 -14.184 8.416 -10.079 1.00 0.00 C +ATOM 1389 N GLY A 182 -15.240 11.453 -13.029 1.00 0.00 N +ATOM 1390 CA GLY A 182 -15.037 12.822 -13.476 1.00 0.00 C +ATOM 1391 C GLY A 182 -15.937 13.820 -12.770 1.00 0.00 C +ATOM 1392 O GLY A 182 -16.871 13.431 -12.066 1.00 0.00 O +ATOM 1393 N PRO A 183 -15.396 14.822 -12.165 1.00 0.00 N +ATOM 1394 CA PRO A 183 -16.219 15.888 -11.589 1.00 0.00 C +ATOM 1395 C PRO A 183 -17.636 15.913 -12.158 1.00 0.00 C +ATOM 1396 CB PRO A 183 -15.458 17.162 -11.964 1.00 0.00 C +ATOM 1397 O PRO A 183 -17.838 15.604 -13.335 1.00 0.00 O +ATOM 1398 CG PRO A 183 -14.695 16.803 -13.198 1.00 0.00 C +ATOM 1399 CD PRO A 183 -14.401 15.330 -13.164 1.00 0.00 C +ATOM 1400 N SER A 184 -18.521 15.085 -11.531 1.00 0.00 N +ATOM 1401 CA SER A 184 -19.918 15.360 -11.852 1.00 0.00 C +ATOM 1402 C SER A 184 -20.093 16.779 -12.385 1.00 0.00 C +ATOM 1403 CB SER A 184 -20.801 15.157 -10.620 1.00 0.00 C +ATOM 1404 O SER A 184 -19.543 17.730 -11.826 1.00 0.00 O +ATOM 1405 OG SER A 184 -20.375 15.985 -9.553 1.00 0.00 O +ATOM 1406 N GLU A 185 -19.658 16.958 -13.662 1.00 0.00 N +ATOM 1407 CA GLU A 185 -20.167 18.200 -14.237 1.00 0.00 C +ATOM 1408 C GLU A 185 -21.492 18.603 -13.597 1.00 0.00 C +ATOM 1409 CB GLU A 185 -20.336 18.061 -15.752 1.00 0.00 C +ATOM 1410 O GLU A 185 -22.450 17.827 -13.598 1.00 0.00 O +ATOM 1411 CG GLU A 185 -19.029 17.836 -16.499 1.00 0.00 C +ATOM 1412 CD GLU A 185 -18.110 19.046 -16.478 1.00 0.00 C +ATOM 1413 OE1 GLU A 185 -18.546 20.132 -16.032 1.00 0.00 O +ATOM 1414 OE2 GLU A 185 -16.944 18.908 -16.911 1.00 0.00 O +ATOM 1415 N HIS A 186 -21.419 18.961 -12.324 1.00 0.00 N +ATOM 1416 CA HIS A 186 -22.672 19.612 -11.958 1.00 0.00 C +ATOM 1417 C HIS A 186 -23.102 20.617 -13.022 1.00 0.00 C +ATOM 1418 CB HIS A 186 -22.539 20.307 -10.602 1.00 0.00 C +ATOM 1419 O HIS A 186 -22.311 21.471 -13.430 1.00 0.00 O +ATOM 1420 CG HIS A 186 -22.402 19.359 -9.453 1.00 0.00 C +ATOM 1421 CD2 HIS A 186 -21.354 19.097 -8.637 1.00 0.00 C +ATOM 1422 ND1 HIS A 186 -23.431 18.543 -9.034 1.00 0.00 N +ATOM 1423 CE1 HIS A 186 -23.020 17.819 -8.007 1.00 0.00 C +ATOM 1424 NE2 HIS A 186 -21.763 18.136 -7.746 1.00 0.00 N +ATOM 1425 N HIS A 187 -23.592 20.072 -14.139 1.00 0.00 N +ATOM 1426 CA HIS A 187 -24.308 20.983 -15.025 1.00 0.00 C +ATOM 1427 C HIS A 187 -24.996 22.092 -14.235 1.00 0.00 C +ATOM 1428 CB HIS A 187 -25.335 20.219 -15.862 1.00 0.00 C +ATOM 1429 O HIS A 187 -25.860 21.819 -13.399 1.00 0.00 O +ATOM 1430 CG HIS A 187 -24.723 19.267 -16.840 1.00 0.00 C +ATOM 1431 CD2 HIS A 187 -24.703 17.913 -16.868 1.00 0.00 C +ATOM 1432 ND1 HIS A 187 -24.026 19.687 -17.952 1.00 0.00 N +ATOM 1433 CE1 HIS A 187 -23.603 18.630 -18.624 1.00 0.00 C +ATOM 1434 NE2 HIS A 187 -24.000 17.541 -17.988 1.00 0.00 N +ATOM 1435 N HIS A 188 -24.187 22.915 -13.610 1.00 0.00 N +ATOM 1436 CA HIS A 188 -24.905 24.094 -13.140 1.00 0.00 C +ATOM 1437 C HIS A 188 -25.814 24.656 -14.228 1.00 0.00 C +ATOM 1438 CB HIS A 188 -23.923 25.168 -12.669 1.00 0.00 C +ATOM 1439 O HIS A 188 -25.380 24.849 -15.366 1.00 0.00 O +ATOM 1440 CG HIS A 188 -23.207 24.814 -11.404 1.00 0.00 C +ATOM 1441 CD2 HIS A 188 -21.913 24.489 -11.176 1.00 0.00 C +ATOM 1442 ND1 HIS A 188 -23.839 24.765 -10.181 1.00 0.00 N +ATOM 1443 CE1 HIS A 188 -22.961 24.425 -9.252 1.00 0.00 C +ATOM 1444 NE2 HIS A 188 -21.785 24.251 -9.830 1.00 0.00 N +ATOM 1445 N HIS A 189 -26.993 24.045 -14.412 1.00 0.00 N +ATOM 1446 CA HIS A 189 -28.031 24.708 -15.193 1.00 0.00 C +ATOM 1447 C HIS A 189 -28.031 26.213 -14.944 1.00 0.00 C +ATOM 1448 CB HIS A 189 -29.406 24.122 -14.865 1.00 0.00 C +ATOM 1449 O HIS A 189 -27.980 26.656 -13.795 1.00 0.00 O +ATOM 1450 CG HIS A 189 -29.586 22.714 -15.335 1.00 0.00 C +ATOM 1451 CD2 HIS A 189 -29.619 21.546 -14.652 1.00 0.00 C +ATOM 1452 ND1 HIS A 189 -29.755 22.390 -16.664 1.00 0.00 N +ATOM 1453 CE1 HIS A 189 -29.887 21.079 -16.778 1.00 0.00 C +ATOM 1454 NE2 HIS A 189 -29.808 20.543 -15.572 1.00 0.00 N +ATOM 1455 N HIS A 190 -27.150 26.911 -15.639 1.00 0.00 N +ATOM 1456 CA HIS A 190 -27.271 28.363 -15.688 1.00 0.00 C +ATOM 1457 C HIS A 190 -28.733 28.796 -15.667 1.00 0.00 C +ATOM 1458 CB HIS A 190 -26.577 28.917 -16.934 1.00 0.00 C +ATOM 1459 O HIS A 190 -29.546 28.288 -16.443 1.00 0.00 O +ATOM 1460 CG HIS A 190 -25.087 28.794 -16.896 1.00 0.00 C +ATOM 1461 CD2 HIS A 190 -24.243 27.997 -17.592 1.00 0.00 C +ATOM 1462 ND1 HIS A 190 -24.299 29.553 -16.058 1.00 0.00 N +ATOM 1463 CE1 HIS A 190 -23.030 29.227 -16.242 1.00 0.00 C +ATOM 1464 NE2 HIS A 190 -22.969 28.285 -17.168 1.00 0.00 N +ATOM 1465 N HIS A 191 -29.301 28.820 -14.496 1.00 0.00 N +ATOM 1466 CA HIS A 191 -30.497 29.651 -14.423 1.00 0.00 C +ATOM 1467 C HIS A 191 -30.240 31.039 -15.001 1.00 0.00 C +ATOM 1468 CB HIS A 191 -30.981 29.766 -12.976 1.00 0.00 C +ATOM 1469 O HIS A 191 -29.144 31.584 -14.855 1.00 0.00 O +ATOM 1470 CG HIS A 191 -31.644 28.528 -12.465 1.00 0.00 C +ATOM 1471 CD2 HIS A 191 -31.230 27.603 -11.566 1.00 0.00 C +ATOM 1472 ND1 HIS A 191 -32.892 28.123 -12.888 1.00 0.00 N +ATOM 1473 CE1 HIS A 191 -33.217 27.000 -12.270 1.00 0.00 C +ATOM 1474 NE2 HIS A 191 -32.226 26.664 -11.462 1.00 0.00 N +TER 1475 HIS A 191 +ENDMDL +END diff --git a/alphafold/relax/testdata/with_violations.pdb b/alphafold/relax/testdata/with_violations.pdb new file mode 100644 index 0000000000000000000000000000000000000000..92f4a2a8703956bbd56642da6ebb518c7a588ef0 --- /dev/null +++ b/alphafold/relax/testdata/with_violations.pdb @@ -0,0 +1,1193 @@ +MODEL 0 +ATOM 1 N SER A 1 23.291 1.505 0.613 1.00 6.08 N +ATOM 2 CA SER A 1 22.518 0.883 -0.457 1.00 6.08 C +ATOM 3 C SER A 1 21.020 1.015 -0.206 1.00 6.08 C +ATOM 4 CB SER A 1 22.891 -0.593 -0.601 1.00 6.08 C +ATOM 5 O SER A 1 20.593 1.246 0.928 1.00 6.08 O +ATOM 6 OG SER A 1 22.364 -1.352 0.474 1.00 6.08 O +ATOM 7 N PHE A 2 20.180 1.317 -1.280 1.00 6.08 N +ATOM 8 CA PHE A 2 18.725 1.321 -1.187 1.00 6.08 C +ATOM 9 C PHE A 2 18.244 0.288 -0.175 1.00 6.08 C +ATOM 10 CB PHE A 2 18.097 1.046 -2.557 1.00 6.08 C +ATOM 11 O PHE A 2 17.437 0.600 0.703 1.00 6.08 O +ATOM 12 CG PHE A 2 16.601 0.880 -2.517 1.00 6.08 C +ATOM 13 CD1 PHE A 2 15.765 1.989 -2.519 1.00 6.08 C +ATOM 14 CD2 PHE A 2 16.033 -0.386 -2.478 1.00 6.08 C +ATOM 15 CE1 PHE A 2 14.380 1.838 -2.482 1.00 6.08 C +ATOM 16 CE2 PHE A 2 14.650 -0.545 -2.441 1.00 6.08 C +ATOM 17 CZ PHE A 2 13.826 0.569 -2.442 1.00 6.08 C +ATOM 18 N GLU A 3 18.695 -0.904 -0.178 1.00 6.08 N +ATOM 19 CA GLU A 3 18.305 -2.028 0.668 1.00 6.08 C +ATOM 20 C GLU A 3 18.535 -1.714 2.144 1.00 6.08 C +ATOM 21 CB GLU A 3 19.073 -3.291 0.273 1.00 6.08 C +ATOM 22 O GLU A 3 17.664 -1.961 2.980 1.00 6.08 O +ATOM 23 CG GLU A 3 18.413 -4.088 -0.843 1.00 6.08 C +ATOM 24 CD GLU A 3 19.408 -4.840 -1.713 1.00 6.08 C +ATOM 25 OE1 GLU A 3 18.977 -5.585 -2.622 1.00 6.08 O +ATOM 26 OE2 GLU A 3 20.628 -4.683 -1.482 1.00 6.08 O +ATOM 27 N GLU A 4 19.823 -1.305 2.459 1.00 6.08 N +ATOM 28 CA GLU A 4 20.190 -1.047 3.848 1.00 6.08 C +ATOM 29 C GLU A 4 19.315 0.044 4.456 1.00 6.08 C +ATOM 30 CB GLU A 4 21.666 -0.656 3.950 1.00 6.08 C +ATOM 31 O GLU A 4 18.868 -0.076 5.599 1.00 6.08 O +ATOM 32 CG GLU A 4 22.621 -1.841 3.913 1.00 6.08 C +ATOM 33 CD GLU A 4 24.085 -1.434 3.973 1.00 6.08 C +ATOM 34 OE1 GLU A 4 24.957 -2.324 4.094 1.00 6.08 O +ATOM 35 OE2 GLU A 4 24.361 -0.216 3.899 1.00 6.08 O +ATOM 36 N GLN A 5 19.061 1.102 3.590 1.00 6.08 N +ATOM 37 CA GLN A 5 18.207 2.189 4.056 1.00 6.08 C +ATOM 38 C GLN A 5 16.771 1.714 4.255 1.00 6.08 C +ATOM 39 CB GLN A 5 18.241 3.359 3.071 1.00 6.08 C +ATOM 40 O GLN A 5 16.113 2.097 5.225 1.00 6.08 O +ATOM 41 CG GLN A 5 19.395 4.326 3.304 1.00 6.08 C +ATOM 42 CD GLN A 5 19.384 5.496 2.338 1.00 6.08 C +ATOM 43 NE2 GLN A 5 20.565 6.022 2.031 1.00 6.08 N +ATOM 44 OE1 GLN A 5 18.323 5.922 1.871 1.00 6.08 O +ATOM 45 N PHE A 6 16.354 0.831 3.208 1.00 5.36 N +ATOM 46 CA PHE A 6 15.014 0.260 3.283 1.00 5.36 C +ATOM 47 C PHE A 6 14.844 -0.555 4.559 1.00 5.36 C +ATOM 48 CB PHE A 6 14.732 -0.616 2.059 1.00 5.36 C +ATOM 49 O PHE A 6 13.859 -0.388 5.282 1.00 5.36 O +ATOM 50 CG PHE A 6 13.331 -1.164 2.014 1.00 5.36 C +ATOM 51 CD1 PHE A 6 12.278 -0.379 1.561 1.00 5.36 C +ATOM 52 CD2 PHE A 6 13.068 -2.464 2.424 1.00 5.36 C +ATOM 53 CE1 PHE A 6 10.980 -0.884 1.518 1.00 5.36 C +ATOM 54 CE2 PHE A 6 11.774 -2.975 2.384 1.00 5.36 C +ATOM 55 CZ PHE A 6 10.731 -2.183 1.932 1.00 5.36 C +ATOM 56 N ILE A 7 15.772 -1.382 4.937 1.00 6.08 N +ATOM 57 CA ILE A 7 15.726 -2.220 6.131 1.00 6.08 C +ATOM 58 C ILE A 7 15.811 -1.345 7.379 1.00 6.08 C +ATOM 59 CB ILE A 7 16.864 -3.266 6.130 1.00 6.08 C +ATOM 60 O ILE A 7 15.052 -1.538 8.332 1.00 6.08 O +ATOM 61 CG1 ILE A 7 16.652 -4.286 5.006 1.00 6.08 C +ATOM 62 CG2 ILE A 7 16.957 -3.962 7.491 1.00 6.08 C +ATOM 63 CD1 ILE A 7 17.837 -5.214 4.781 1.00 6.08 C +ATOM 64 N LYS A 8 16.750 -0.406 7.403 1.00 6.08 N +ATOM 65 CA LYS A 8 16.953 0.493 8.535 1.00 6.08 C +ATOM 66 C LYS A 8 15.689 1.294 8.836 1.00 6.08 C +ATOM 67 CB LYS A 8 18.122 1.442 8.265 1.00 6.08 C +ATOM 68 O LYS A 8 15.304 1.443 9.997 1.00 6.08 O +ATOM 69 CG LYS A 8 18.564 2.242 9.481 1.00 6.08 C +ATOM 70 CD LYS A 8 19.735 3.159 9.151 1.00 6.08 C +ATOM 71 CE LYS A 8 20.102 4.046 10.333 1.00 6.08 C +ATOM 72 NZ LYS A 8 21.192 5.007 9.987 1.00 6.08 N +ATOM 73 N ASN A 9 14.988 1.804 7.750 1.00 6.08 N +ATOM 74 CA ASN A 9 13.799 2.629 7.937 1.00 6.08 C +ATOM 75 C ASN A 9 12.593 1.788 8.349 1.00 6.08 C +ATOM 76 CB ASN A 9 13.486 3.416 6.663 1.00 6.08 C +ATOM 77 O ASN A 9 11.581 2.327 8.801 1.00 6.08 O +ATOM 78 CG ASN A 9 14.404 4.608 6.473 1.00 6.08 C +ATOM 79 ND2 ASN A 9 14.484 5.105 5.244 1.00 6.08 N +ATOM 80 OD1 ASN A 9 15.036 5.078 7.423 1.00 6.08 O +ATOM 81 N ASN A 10 12.800 0.438 8.337 1.00 6.08 N +ATOM 82 CA ASN A 10 11.572 -0.311 8.581 1.00 6.08 C +ATOM 83 C ASN A 10 11.753 -1.335 9.699 1.00 6.08 C +ATOM 84 CB ASN A 10 11.100 -1.002 7.300 1.00 6.08 C +ATOM 85 O ASN A 10 10.808 -2.039 10.060 1.00 6.08 O +ATOM 86 CG ASN A 10 10.549 -0.025 6.280 1.00 6.08 C +ATOM 87 ND2 ASN A 10 11.285 0.176 5.193 1.00 6.08 N +ATOM 88 OD1 ASN A 10 9.471 0.545 6.467 1.00 6.08 O +ATOM 89 N SER A 11 12.959 -1.512 10.211 1.00 6.08 N +ATOM 90 CA SER A 11 13.197 -2.465 11.291 1.00 6.08 C +ATOM 91 C SER A 11 12.666 -1.938 12.620 1.00 6.08 C +ATOM 92 CB SER A 11 14.690 -2.772 11.415 1.00 6.08 C +ATOM 93 O SER A 11 12.451 -2.709 13.557 1.00 6.08 O +ATOM 94 OG SER A 11 15.435 -1.581 11.601 1.00 6.08 O +ATOM 95 N ASP A 12 12.220 -0.675 12.710 1.00 6.08 N +ATOM 96 CA ASP A 12 11.747 -0.267 14.029 1.00 6.08 C +ATOM 97 C ASP A 12 10.304 -0.711 14.256 1.00 6.08 C +ATOM 98 CB ASP A 12 11.864 1.249 14.196 1.00 6.08 C +ATOM 99 O ASP A 12 9.847 -0.792 15.398 1.00 6.08 O +ATOM 100 CG ASP A 12 13.206 1.682 14.760 1.00 6.08 C +ATOM 101 OD1 ASP A 12 13.586 2.861 14.592 1.00 6.08 O +ATOM 102 OD2 ASP A 12 13.890 0.837 15.376 1.00 6.08 O +ATOM 103 N SER A 13 9.678 -1.277 13.274 1.00 6.08 N +ATOM 104 CA SER A 13 8.274 -1.520 13.587 1.00 6.08 C +ATOM 105 C SER A 13 8.041 -2.973 13.988 1.00 6.08 C +ATOM 106 CB SER A 13 7.389 -1.164 12.393 1.00 6.08 C +ATOM 107 O SER A 13 8.569 -3.889 13.355 1.00 6.08 O +ATOM 108 OG SER A 13 7.871 -1.776 11.209 1.00 6.08 O +ATOM 109 N ASN A 14 8.368 -3.385 15.178 1.00 6.08 N +ATOM 110 CA ASN A 14 7.591 -4.466 15.775 1.00 6.08 C +ATOM 111 C ASN A 14 6.843 -5.271 14.716 1.00 6.08 C +ATOM 112 CB ASN A 14 6.610 -3.912 16.812 1.00 6.08 C +ATOM 113 O ASN A 14 6.016 -6.122 15.047 1.00 6.08 O +ATOM 114 CG ASN A 14 7.250 -3.709 18.171 1.00 6.08 C +ATOM 115 ND2 ASN A 14 6.608 -2.910 19.015 1.00 6.08 N +ATOM 116 OD1 ASN A 14 8.313 -4.265 18.460 1.00 6.08 O +ATOM 117 N ILE A 15 7.204 -5.229 13.474 1.00 6.08 N +ATOM 118 CA ILE A 15 6.430 -5.995 12.502 1.00 6.08 C +ATOM 119 C ILE A 15 7.095 -7.349 12.265 1.00 6.08 C +ATOM 120 CB ILE A 15 6.282 -5.229 11.168 1.00 6.08 C +ATOM 121 O ILE A 15 8.306 -7.422 12.045 1.00 6.08 O +ATOM 122 CG1 ILE A 15 5.583 -3.885 11.398 1.00 6.08 C +ATOM 123 CG2 ILE A 15 5.520 -6.074 10.143 1.00 6.08 C +ATOM 124 CD1 ILE A 15 5.473 -3.022 10.149 1.00 6.08 C +ATOM 125 N LEU A 16 6.669 -8.397 13.068 1.00 6.08 N +ATOM 126 CA LEU A 16 6.808 -9.846 12.972 1.00 6.08 C +ATOM 127 C LEU A 16 6.967 -10.281 11.519 1.00 6.08 C +ATOM 128 CB LEU A 16 5.597 -10.544 13.596 1.00 6.08 C +ATOM 129 O LEU A 16 6.238 -9.812 10.643 1.00 6.08 O +ATOM 130 CG LEU A 16 5.559 -10.598 15.125 1.00 6.08 C +ATOM 131 CD1 LEU A 16 4.134 -10.839 15.611 1.00 6.08 C +ATOM 132 CD2 LEU A 16 6.498 -11.682 15.644 1.00 6.08 C +ATOM 133 N ALA A 17 8.248 -10.386 11.036 1.00 6.08 N +ATOM 134 CA ALA A 17 8.700 -10.996 9.788 1.00 6.08 C +ATOM 135 C ALA A 17 7.863 -12.224 9.444 1.00 6.08 C +ATOM 136 CB ALA A 17 10.177 -11.372 9.884 1.00 6.08 C +ATOM 137 O ALA A 17 7.473 -12.986 10.332 1.00 6.08 O +ATOM 138 N PRO A 18 7.023 -12.218 8.206 1.00 6.08 N +ATOM 139 CA PRO A 18 6.298 -13.437 7.841 1.00 6.08 C +ATOM 140 C PRO A 18 7.204 -14.499 7.222 1.00 6.08 C +ATOM 141 CB PRO A 18 5.264 -12.942 6.826 1.00 6.08 C +ATOM 142 O PRO A 18 8.307 -14.186 6.767 1.00 6.08 O +ATOM 143 CG PRO A 18 5.663 -11.532 6.531 1.00 6.08 C +ATOM 144 CD PRO A 18 6.762 -11.140 7.476 1.00 6.08 C +ATOM 145 N LYS A 19 6.910 -15.813 7.261 1.00 6.08 N +ATOM 146 CA LYS A 19 7.401 -17.032 6.627 1.00 6.08 C +ATOM 147 C LYS A 19 6.700 -17.279 5.294 1.00 6.08 C +ATOM 148 CB LYS A 19 7.206 -18.235 7.552 1.00 6.08 C +ATOM 149 O LYS A 19 5.494 -17.054 5.170 1.00 6.08 O +ATOM 150 CG LYS A 19 8.289 -18.383 8.610 1.00 6.08 C +ATOM 151 CD LYS A 19 8.149 -19.695 9.372 1.00 6.08 C +ATOM 152 CE LYS A 19 9.213 -19.830 10.454 1.00 6.08 C +ATOM 153 NZ LYS A 19 9.104 -21.132 11.178 1.00 6.08 N +ATOM 154 N VAL A 20 7.272 -17.218 4.055 1.00 6.08 N +ATOM 155 CA VAL A 20 6.741 -17.404 2.708 1.00 6.08 C +ATOM 156 C VAL A 20 7.061 -18.814 2.217 1.00 6.08 C +ATOM 157 CB VAL A 20 7.307 -16.355 1.725 1.00 6.08 C +ATOM 158 O VAL A 20 8.148 -19.336 2.476 1.00 6.08 O +ATOM 159 CG1 VAL A 20 6.686 -16.524 0.339 1.00 6.08 C +ATOM 160 CG2 VAL A 20 7.064 -14.943 2.254 1.00 6.08 C +ATOM 161 N SER A 21 6.082 -19.480 1.504 1.00 6.08 N +ATOM 162 CA SER A 21 6.281 -20.787 0.888 1.00 6.08 C +ATOM 163 C SER A 21 7.315 -20.720 -0.230 1.00 6.08 C +ATOM 164 CB SER A 21 4.960 -21.329 0.340 1.00 6.08 C +ATOM 165 O SER A 21 7.458 -19.688 -0.889 1.00 6.08 O +ATOM 166 OG SER A 21 4.811 -20.999 -1.030 1.00 6.08 O +ATOM 167 N GLN A 22 8.094 -21.778 -0.457 1.00 6.08 N +ATOM 168 CA GLN A 22 9.146 -22.023 -1.437 1.00 6.08 C +ATOM 169 C GLN A 22 8.608 -21.912 -2.861 1.00 6.08 C +ATOM 170 CB GLN A 22 9.774 -23.400 -1.218 1.00 6.08 C +ATOM 171 O GLN A 22 9.307 -21.436 -3.758 1.00 6.08 O +ATOM 172 CG GLN A 22 11.028 -23.375 -0.356 1.00 6.08 C +ATOM 173 CD GLN A 22 11.900 -24.601 -0.550 1.00 6.08 C +ATOM 174 NE2 GLN A 22 13.017 -24.654 0.167 1.00 6.08 N +ATOM 175 OE1 GLN A 22 11.570 -25.495 -1.337 1.00 6.08 O +ATOM 176 N SER A 23 7.326 -22.350 -3.087 1.00 6.08 N +ATOM 177 CA SER A 23 6.818 -22.344 -4.455 1.00 6.08 C +ATOM 178 C SER A 23 6.627 -20.921 -4.968 1.00 6.08 C +ATOM 179 CB SER A 23 5.494 -23.106 -4.539 1.00 6.08 C +ATOM 180 O SER A 23 6.916 -20.631 -6.131 1.00 6.08 O +ATOM 181 OG SER A 23 4.496 -22.467 -3.762 1.00 6.08 O +ATOM 182 N VAL A 24 6.156 -19.987 -4.125 1.00 6.08 N +ATOM 183 CA VAL A 24 5.987 -18.582 -4.483 1.00 6.08 C +ATOM 184 C VAL A 24 7.353 -17.938 -4.708 1.00 6.08 C +ATOM 185 CB VAL A 24 5.206 -17.809 -3.397 1.00 6.08 C +ATOM 186 O VAL A 24 7.534 -17.165 -5.652 1.00 6.08 O +ATOM 187 CG1 VAL A 24 5.211 -16.310 -3.691 1.00 6.08 C +ATOM 188 CG2 VAL A 24 3.775 -18.332 -3.296 1.00 6.08 C +ATOM 189 N ILE A 25 8.365 -18.356 -3.827 1.00 6.08 N +ATOM 190 CA ILE A 25 9.724 -17.836 -3.937 1.00 6.08 C +ATOM 191 C ILE A 25 10.325 -18.244 -5.280 1.00 6.08 C +ATOM 192 CB ILE A 25 10.616 -18.332 -2.777 1.00 6.08 C +ATOM 193 O ILE A 25 11.011 -17.450 -5.928 1.00 6.08 O +ATOM 194 CG1 ILE A 25 10.127 -17.755 -1.444 1.00 6.08 C +ATOM 195 CG2 ILE A 25 12.081 -17.966 -3.028 1.00 6.08 C +ATOM 196 CD1 ILE A 25 10.848 -18.316 -0.226 1.00 6.08 C +ATOM 197 N LYS A 26 9.942 -19.394 -5.728 1.00 6.08 N +ATOM 198 CA LYS A 26 10.533 -19.885 -6.969 1.00 6.08 C +ATOM 199 C LYS A 26 9.961 -19.150 -8.178 1.00 6.08 C +ATOM 200 CB LYS A 26 10.303 -21.391 -7.115 1.00 6.08 C +ATOM 201 O LYS A 26 10.615 -19.055 -9.219 1.00 6.08 O +ATOM 202 CG LYS A 26 11.247 -22.244 -6.281 1.00 6.08 C +ATOM 203 CD LYS A 26 11.022 -23.730 -6.527 1.00 6.08 C +ATOM 204 CE LYS A 26 11.909 -24.587 -5.634 1.00 6.08 C +ATOM 205 NZ LYS A 26 11.672 -26.045 -5.852 1.00 6.08 N +ATOM 206 N SER A 27 8.716 -18.585 -8.016 1.00 6.08 N +ATOM 207 CA SER A 27 8.115 -17.884 -9.146 1.00 6.08 C +ATOM 208 C SER A 27 8.597 -16.439 -9.220 1.00 6.08 C +ATOM 209 CB SER A 27 6.589 -17.917 -9.047 1.00 6.08 C +ATOM 210 O SER A 27 8.389 -15.761 -10.229 1.00 6.08 O +ATOM 211 OG SER A 27 6.145 -17.239 -7.885 1.00 6.08 O +ATOM 212 N ILE A 28 9.326 -16.021 -8.127 1.00 6.08 N +ATOM 213 CA ILE A 28 9.655 -14.600 -8.095 1.00 6.08 C +ATOM 214 C ILE A 28 11.013 -14.370 -8.753 1.00 6.08 C +ATOM 215 CB ILE A 28 9.660 -14.055 -6.649 1.00 6.08 C +ATOM 216 O ILE A 28 12.005 -15.000 -8.381 1.00 6.08 O +ATOM 217 CG1 ILE A 28 8.282 -14.238 -6.004 1.00 6.08 C +ATOM 218 CG2 ILE A 28 10.082 -12.583 -6.629 1.00 6.08 C +ATOM 219 CD1 ILE A 28 8.241 -13.892 -4.522 1.00 6.08 C +ATOM 220 N LYS A 29 11.102 -13.748 -9.982 1.00 6.08 N +ATOM 221 CA LYS A 29 12.253 -13.354 -10.790 1.00 6.08 C +ATOM 222 C LYS A 29 12.954 -12.137 -10.192 1.00 6.08 C +ATOM 223 CB LYS A 29 11.825 -13.058 -12.228 1.00 6.08 C +ATOM 224 O LYS A 29 12.302 -11.156 -9.829 1.00 6.08 O +ATOM 225 CG LYS A 29 11.657 -14.299 -13.092 1.00 6.08 C +ATOM 226 CD LYS A 29 11.456 -13.937 -14.557 1.00 6.08 C +ATOM 227 CE LYS A 29 11.272 -15.178 -15.421 1.00 6.08 C +ATOM 228 NZ LYS A 29 11.145 -14.832 -16.868 1.00 6.08 N +ATOM 229 N GLY A 30 13.888 -12.322 -9.217 1.00 6.08 N +ATOM 230 CA GLY A 30 14.719 -11.185 -8.854 1.00 6.08 C +ATOM 231 C GLY A 30 14.960 -11.074 -7.361 1.00 6.08 C +ATOM 232 O GLY A 30 14.940 -9.975 -6.804 1.00 6.08 O +ATOM 233 N ILE A 31 15.279 -12.138 -6.638 1.00 6.08 N +ATOM 234 CA ILE A 31 15.591 -12.164 -5.214 1.00 6.08 C +ATOM 235 C ILE A 31 16.885 -11.396 -4.954 1.00 6.08 C +ATOM 236 CB ILE A 31 15.713 -13.612 -4.689 1.00 6.08 C +ATOM 237 O ILE A 31 17.945 -11.761 -5.468 1.00 6.08 O +ATOM 238 CG1 ILE A 31 14.396 -14.369 -4.897 1.00 6.08 C +ATOM 239 CG2 ILE A 31 16.121 -13.619 -3.212 1.00 6.08 C +ATOM 240 CD1 ILE A 31 14.475 -15.853 -4.565 1.00 6.08 C +ATOM 241 N LYS A 32 16.933 -10.089 -4.574 1.00 6.08 N +ATOM 242 CA LYS A 32 18.183 -9.378 -4.323 1.00 6.08 C +ATOM 243 C LYS A 32 18.755 -9.738 -2.954 1.00 6.08 C +ATOM 244 CB LYS A 32 17.970 -7.867 -4.420 1.00 6.08 C +ATOM 245 O LYS A 32 19.969 -9.892 -2.804 1.00 6.08 O +ATOM 246 CG LYS A 32 18.023 -7.324 -5.841 1.00 6.08 C +ATOM 247 CD LYS A 32 18.626 -5.926 -5.883 1.00 6.08 C +ATOM 248 CE LYS A 32 18.645 -5.367 -7.300 1.00 6.08 C +ATOM 249 NZ LYS A 32 19.320 -4.036 -7.361 1.00 6.08 N +ATOM 250 N SER A 33 17.909 -10.205 -1.893 1.00 6.08 N +ATOM 251 CA SER A 33 18.320 -10.572 -0.542 1.00 6.08 C +ATOM 252 C SER A 33 17.215 -11.331 0.185 1.00 6.08 C +ATOM 253 CB SER A 33 18.707 -9.328 0.258 1.00 6.08 C +ATOM 254 O SER A 33 16.099 -11.450 -0.324 1.00 6.08 O +ATOM 255 OG SER A 33 17.560 -8.560 0.581 1.00 6.08 O +ATOM 256 N LYS A 34 17.506 -12.068 1.188 1.00 6.08 N +ATOM 257 CA LYS A 34 16.610 -12.918 1.967 1.00 6.08 C +ATOM 258 C LYS A 34 15.403 -12.131 2.468 1.00 6.08 C +ATOM 259 CB LYS A 34 17.356 -13.542 3.148 1.00 6.08 C +ATOM 260 O LYS A 34 14.341 -12.706 2.718 1.00 6.08 O +ATOM 261 CG LYS A 34 18.074 -14.840 2.810 1.00 6.08 C +ATOM 262 CD LYS A 34 18.733 -15.451 4.040 1.00 6.08 C +ATOM 263 CE LYS A 34 19.519 -16.707 3.689 1.00 6.08 C +ATOM 264 NZ LYS A 34 20.155 -17.318 4.894 1.00 6.08 N +ATOM 265 N HIS A 35 15.371 -10.863 2.266 1.00 5.36 N +ATOM 266 CA HIS A 35 14.261 -10.259 2.994 1.00 5.36 C +ATOM 267 C HIS A 35 13.500 -9.270 2.117 1.00 5.36 C +ATOM 268 CB HIS A 35 14.765 -9.560 4.258 1.00 5.36 C +ATOM 269 O HIS A 35 12.451 -8.760 2.515 1.00 5.36 O +ATOM 270 CG HIS A 35 15.436 -10.482 5.225 1.00 5.36 C +ATOM 271 CD2 HIS A 35 16.730 -10.574 5.614 1.00 5.36 C +ATOM 272 ND1 HIS A 35 14.755 -11.461 5.916 1.00 5.36 N +ATOM 273 CE1 HIS A 35 15.604 -12.116 6.691 1.00 5.36 C +ATOM 274 NE2 HIS A 35 16.808 -11.597 6.526 1.00 5.36 N +ATOM 275 N VAL A 36 14.059 -8.954 0.978 1.00 5.36 N +ATOM 276 CA VAL A 36 13.407 -7.973 0.118 1.00 5.36 C +ATOM 277 C VAL A 36 13.086 -8.603 -1.235 1.00 5.36 C +ATOM 278 CB VAL A 36 14.284 -6.715 -0.074 1.00 5.36 C +ATOM 279 O VAL A 36 13.962 -9.187 -1.878 1.00 5.36 O +ATOM 280 CG1 VAL A 36 13.591 -5.709 -0.992 1.00 5.36 C +ATOM 281 CG2 VAL A 36 14.605 -6.078 1.277 1.00 5.36 C +ATOM 282 N PHE A 37 11.770 -8.603 -1.484 1.00 5.36 N +ATOM 283 CA PHE A 37 11.361 -9.204 -2.749 1.00 5.36 C +ATOM 284 C PHE A 37 10.980 -8.129 -3.760 1.00 5.36 C +ATOM 285 CB PHE A 37 10.186 -10.163 -2.535 1.00 5.36 C +ATOM 286 O PHE A 37 10.245 -7.195 -3.434 1.00 5.36 O +ATOM 287 CG PHE A 37 10.500 -11.311 -1.614 1.00 5.36 C +ATOM 288 CD1 PHE A 37 10.346 -11.180 -0.239 1.00 5.36 C +ATOM 289 CD2 PHE A 37 10.949 -12.522 -2.124 1.00 5.36 C +ATOM 290 CE1 PHE A 37 10.636 -12.242 0.616 1.00 5.36 C +ATOM 291 CE2 PHE A 37 11.241 -13.587 -1.276 1.00 5.36 C +ATOM 292 CZ PHE A 37 11.084 -13.445 0.093 1.00 5.36 C +ATOM 293 N GLU A 38 11.560 -8.160 -4.884 1.00 5.36 N +ATOM 294 CA GLU A 38 11.250 -7.279 -6.006 1.00 5.36 C +ATOM 295 C GLU A 38 10.193 -7.897 -6.917 1.00 5.36 C +ATOM 296 CB GLU A 38 12.516 -6.965 -6.808 1.00 5.36 C +ATOM 297 O GLU A 38 10.363 -9.016 -7.405 1.00 5.36 O +ATOM 298 CG GLU A 38 12.298 -5.965 -7.934 1.00 5.36 C +ATOM 299 CD GLU A 38 13.552 -5.698 -8.751 1.00 5.36 C +ATOM 300 OE1 GLU A 38 13.571 -6.025 -9.960 1.00 5.36 O +ATOM 301 OE2 GLU A 38 14.525 -5.158 -8.178 1.00 5.36 O +ATOM 302 N LEU A 39 9.040 -7.269 -6.940 1.00 5.36 N +ATOM 303 CA LEU A 39 7.988 -7.741 -7.834 1.00 5.36 C +ATOM 304 C LEU A 39 7.842 -6.816 -9.038 1.00 5.36 C +ATOM 305 CB LEU A 39 6.655 -7.839 -7.087 1.00 5.36 C +ATOM 306 O LEU A 39 7.250 -5.740 -8.931 1.00 5.36 O +ATOM 307 CG LEU A 39 6.571 -8.896 -5.984 1.00 5.36 C +ATOM 308 CD1 LEU A 39 5.425 -8.577 -5.030 1.00 5.36 C +ATOM 309 CD2 LEU A 39 6.401 -10.286 -6.587 1.00 5.36 C +ATOM 310 N PRO A 40 8.487 -7.251 -10.143 1.00 6.08 N +ATOM 311 CA PRO A 40 8.346 -6.359 -11.296 1.00 6.08 C +ATOM 312 C PRO A 40 6.896 -6.208 -11.751 1.00 6.08 C +ATOM 313 CB PRO A 40 9.189 -7.043 -12.376 1.00 6.08 C +ATOM 314 O PRO A 40 6.198 -7.207 -11.942 1.00 6.08 O +ATOM 315 CG PRO A 40 9.550 -8.371 -11.794 1.00 6.08 C +ATOM 316 CD PRO A 40 9.068 -8.416 -10.373 1.00 6.08 C +ATOM 317 N ILE A 41 6.243 -4.982 -11.734 1.00 6.08 N +ATOM 318 CA ILE A 41 4.884 -4.747 -12.210 1.00 6.08 C +ATOM 319 C ILE A 41 4.900 -4.508 -13.718 1.00 6.08 C +ATOM 320 CB ILE A 41 4.229 -3.551 -11.484 1.00 6.08 C +ATOM 321 O ILE A 41 4.158 -5.153 -14.463 1.00 6.08 O +ATOM 322 CG1 ILE A 41 4.176 -3.807 -9.974 1.00 6.08 C +ATOM 323 CG2 ILE A 41 2.829 -3.280 -12.044 1.00 6.08 C +ATOM 324 CD1 ILE A 41 3.647 -2.630 -9.165 1.00 6.08 C +ATOM 325 N ASN A 42 5.810 -3.703 -14.250 1.00 6.08 N +ATOM 326 CA ASN A 42 6.141 -3.456 -15.649 1.00 6.08 C +ATOM 327 C ASN A 42 7.598 -3.034 -15.814 1.00 6.08 C +ATOM 328 CB ASN A 42 5.210 -2.396 -16.242 1.00 6.08 C +ATOM 329 O ASN A 42 8.396 -3.167 -14.885 1.00 6.08 O +ATOM 330 CG ASN A 42 5.303 -1.067 -15.518 1.00 6.08 C +ATOM 331 ND2 ASN A 42 4.156 -0.448 -15.267 1.00 6.08 N +ATOM 332 OD1 ASN A 42 6.397 -0.600 -15.189 1.00 6.08 O +ATOM 333 N ASP A 43 7.989 -2.622 -17.089 1.00 6.08 N +ATOM 334 CA ASP A 43 9.387 -2.328 -17.387 1.00 6.08 C +ATOM 335 C ASP A 43 9.898 -1.169 -16.534 1.00 6.08 C +ATOM 336 CB ASP A 43 9.563 -2.005 -18.873 1.00 6.08 C +ATOM 337 O ASP A 43 11.101 -1.051 -16.294 1.00 6.08 O +ATOM 338 CG ASP A 43 9.350 -3.211 -19.771 1.00 6.08 C +ATOM 339 OD1 ASP A 43 9.124 -3.033 -20.987 1.00 6.08 O +ATOM 340 OD2 ASP A 43 9.406 -4.349 -19.257 1.00 6.08 O +ATOM 341 N LYS A 44 8.964 -0.340 -16.036 1.00 6.08 N +ATOM 342 CA LYS A 44 9.421 0.879 -15.374 1.00 6.08 C +ATOM 343 C LYS A 44 9.078 0.858 -13.887 1.00 6.08 C +ATOM 344 CB LYS A 44 8.806 2.113 -16.036 1.00 6.08 C +ATOM 345 O LYS A 44 9.523 1.723 -13.130 1.00 6.08 O +ATOM 346 CG LYS A 44 9.329 2.388 -17.438 1.00 6.08 C +ATOM 347 CD LYS A 44 8.792 3.704 -17.986 1.00 6.08 C +ATOM 348 CE LYS A 44 9.281 3.960 -19.405 1.00 6.08 C +ATOM 349 NZ LYS A 44 8.775 5.260 -19.939 1.00 6.08 N +ATOM 350 N THR A 45 8.261 -0.019 -13.522 1.00 6.08 N +ATOM 351 CA THR A 45 7.740 0.030 -12.161 1.00 6.08 C +ATOM 352 C THR A 45 8.037 -1.272 -11.421 1.00 6.08 C +ATOM 353 CB THR A 45 6.223 0.293 -12.152 1.00 6.08 C +ATOM 354 O THR A 45 7.755 -2.359 -11.929 1.00 6.08 O +ATOM 355 CG2 THR A 45 5.716 0.544 -10.736 1.00 6.08 C +ATOM 356 OG1 THR A 45 5.938 1.442 -12.960 1.00 6.08 O +ATOM 357 N LYS A 46 8.731 -1.136 -10.322 1.00 5.36 N +ATOM 358 CA LYS A 46 9.040 -2.324 -9.532 1.00 5.36 C +ATOM 359 C LYS A 46 8.519 -2.186 -8.104 1.00 5.36 C +ATOM 360 CB LYS A 46 10.548 -2.581 -9.517 1.00 5.36 C +ATOM 361 O LYS A 46 8.374 -1.073 -7.595 1.00 5.36 O +ATOM 362 CG LYS A 46 11.163 -2.738 -10.899 1.00 5.36 C +ATOM 363 CD LYS A 46 12.677 -2.883 -10.824 1.00 5.36 C +ATOM 364 CE LYS A 46 13.302 -2.960 -12.211 1.00 5.36 C +ATOM 365 NZ LYS A 46 14.790 -2.843 -12.156 1.00 5.36 N +ATOM 366 N ARG A 47 8.105 -3.267 -7.558 1.00 5.36 N +ATOM 367 CA ARG A 47 7.620 -3.302 -6.182 1.00 5.36 C +ATOM 368 C ARG A 47 8.642 -3.956 -5.258 1.00 5.36 C +ATOM 369 CB ARG A 47 6.286 -4.047 -6.100 1.00 5.36 C +ATOM 370 O ARG A 47 9.291 -4.934 -5.635 1.00 5.36 O +ATOM 371 CG ARG A 47 5.588 -3.915 -4.756 1.00 5.36 C +ATOM 372 CD ARG A 47 4.227 -4.596 -4.758 1.00 5.36 C +ATOM 373 NE ARG A 47 3.162 -3.674 -4.374 1.00 5.36 N +ATOM 374 NH1 ARG A 47 1.449 -5.188 -4.705 1.00 5.36 N +ATOM 375 NH2 ARG A 47 0.983 -3.060 -3.991 1.00 5.36 N +ATOM 376 CZ ARG A 47 1.867 -3.976 -4.358 1.00 5.36 C +ATOM 377 N TYR A 48 8.748 -3.477 -3.978 1.00 5.36 N +ATOM 378 CA TYR A 48 9.593 -4.175 -3.016 1.00 5.36 C +ATOM 379 C TYR A 48 8.779 -4.649 -1.818 1.00 5.36 C +ATOM 380 CB TYR A 48 10.734 -3.268 -2.546 1.00 5.36 C +ATOM 381 O TYR A 48 7.943 -3.908 -1.295 1.00 5.36 O +ATOM 382 CG TYR A 48 11.694 -2.881 -3.645 1.00 5.36 C +ATOM 383 CD1 TYR A 48 11.441 -1.781 -4.462 1.00 5.36 C +ATOM 384 CD2 TYR A 48 12.854 -3.613 -3.869 1.00 5.36 C +ATOM 385 CE1 TYR A 48 12.321 -1.421 -5.477 1.00 5.36 C +ATOM 386 CE2 TYR A 48 13.742 -3.263 -4.881 1.00 5.36 C +ATOM 387 OH TYR A 48 14.342 -1.815 -6.682 1.00 5.36 O +ATOM 388 CZ TYR A 48 13.467 -2.167 -5.678 1.00 5.36 C +ATOM 389 N ILE A 49 8.717 -5.888 -1.613 1.00 5.36 N +ATOM 390 CA ILE A 49 7.989 -6.430 -0.471 1.00 5.36 C +ATOM 391 C ILE A 49 8.975 -6.856 0.614 1.00 5.36 C +ATOM 392 CB ILE A 49 7.097 -7.622 -0.882 1.00 5.36 C +ATOM 393 O ILE A 49 10.017 -7.445 0.318 1.00 5.36 O +ATOM 394 CG1 ILE A 49 6.166 -7.220 -2.032 1.00 5.36 C +ATOM 395 CG2 ILE A 49 6.296 -8.136 0.317 1.00 5.36 C +ATOM 396 CD1 ILE A 49 5.367 -8.378 -2.615 1.00 5.36 C +ATOM 397 N LEU A 50 8.862 -6.262 1.857 1.00 5.36 N +ATOM 398 CA LEU A 50 9.614 -6.778 2.996 1.00 5.36 C +ATOM 399 C LEU A 50 8.946 -8.023 3.570 1.00 5.36 C +ATOM 400 CB LEU A 50 9.742 -5.707 4.083 1.00 5.36 C +ATOM 401 O LEU A 50 7.743 -8.018 3.842 1.00 5.36 O +ATOM 402 CG LEU A 50 11.100 -5.606 4.779 1.00 5.36 C +ATOM 403 CD1 LEU A 50 11.885 -4.416 4.238 1.00 5.36 C +ATOM 404 CD2 LEU A 50 10.920 -5.493 6.289 1.00 5.36 C +ATOM 405 N GLY A 51 9.463 -9.224 3.543 1.00 5.36 N +ATOM 406 CA GLY A 51 9.015 -10.310 4.400 1.00 5.36 C +ATOM 407 C GLY A 51 7.865 -11.102 3.807 1.00 5.36 C +ATOM 408 O GLY A 51 6.957 -10.529 3.200 1.00 5.36 O +ATOM 409 N ALA A 52 8.049 -12.344 3.364 1.00 5.36 N +ATOM 410 CA ALA A 52 6.949 -13.257 3.063 1.00 5.36 C +ATOM 411 C ALA A 52 6.954 -14.454 4.009 1.00 5.36 C +ATOM 412 CB ALA A 52 7.031 -13.728 1.613 1.00 5.36 C +ATOM 413 O ALA A 52 8.016 -14.901 4.449 1.00 5.36 O +ATOM 414 N THR A 53 5.741 -14.626 4.821 1.00 6.08 N +ATOM 415 CA THR A 53 5.638 -15.818 5.655 1.00 6.08 C +ATOM 416 C THR A 53 4.816 -16.898 4.956 1.00 6.08 C +ATOM 417 CB THR A 53 5.005 -15.492 7.020 1.00 6.08 C +ATOM 418 O THR A 53 4.163 -16.631 3.944 1.00 6.08 O +ATOM 419 CG2 THR A 53 5.758 -14.364 7.719 1.00 6.08 C +ATOM 420 OG1 THR A 53 3.643 -15.093 6.826 1.00 6.08 O +ATOM 421 N GLU A 54 4.971 -18.204 5.377 1.00 6.08 N +ATOM 422 CA GLU A 54 4.419 -19.510 5.031 1.00 6.08 C +ATOM 423 C GLU A 54 2.894 -19.498 5.093 1.00 6.08 C +ATOM 424 CB GLU A 54 4.974 -20.593 5.960 1.00 6.08 C +ATOM 425 O GLU A 54 2.229 -20.148 4.283 1.00 6.08 O +ATOM 426 CG GLU A 54 6.145 -21.367 5.371 1.00 6.08 C +ATOM 427 CD GLU A 54 6.620 -22.505 6.261 1.00 6.08 C +ATOM 428 OE1 GLU A 54 7.586 -23.207 5.885 1.00 6.08 O +ATOM 429 OE2 GLU A 54 6.021 -22.696 7.343 1.00 6.08 O +ATOM 430 N THR A 55 2.284 -18.768 6.100 1.00 6.08 N +ATOM 431 CA THR A 55 0.931 -19.163 6.472 1.00 6.08 C +ATOM 432 C THR A 55 -0.065 -18.051 6.153 1.00 6.08 C +ATOM 433 CB THR A 55 0.844 -19.519 7.968 1.00 6.08 C +ATOM 434 O THR A 55 -1.275 -18.282 6.132 1.00 6.08 O +ATOM 435 CG2 THR A 55 1.686 -20.749 8.290 1.00 6.08 C +ATOM 436 OG1 THR A 55 1.318 -18.412 8.745 1.00 6.08 O +ATOM 437 N LYS A 56 0.188 -16.955 5.564 1.00 6.08 N +ATOM 438 CA LYS A 56 -0.870 -15.980 5.311 1.00 6.08 C +ATOM 439 C LYS A 56 -0.294 -14.671 4.777 1.00 6.08 C +ATOM 440 CB LYS A 56 -1.676 -15.719 6.584 1.00 6.08 C +ATOM 441 O LYS A 56 0.578 -14.069 5.406 1.00 6.08 O +ATOM 442 CG LYS A 56 -2.640 -16.838 6.947 1.00 6.08 C +ATOM 443 CD LYS A 56 -3.584 -16.421 8.067 1.00 6.08 C +ATOM 444 CE LYS A 56 -4.524 -17.554 8.458 1.00 6.08 C +ATOM 445 NZ LYS A 56 -5.505 -17.125 9.499 1.00 6.08 N +ATOM 446 N GLU A 57 -0.274 -14.530 3.508 1.00 6.08 N +ATOM 447 CA GLU A 57 -0.600 -13.449 2.582 1.00 6.08 C +ATOM 448 C GLU A 57 -0.543 -12.092 3.276 1.00 6.08 C +ATOM 449 CB GLU A 57 -1.984 -13.668 1.966 1.00 6.08 C +ATOM 450 O GLU A 57 -0.932 -11.075 2.696 1.00 6.08 O +ATOM 451 CG GLU A 57 -1.976 -14.563 0.735 1.00 6.08 C +ATOM 452 CD GLU A 57 -3.338 -14.683 0.071 1.00 6.08 C +ATOM 453 OE1 GLU A 57 -3.423 -15.253 -1.040 1.00 6.08 O +ATOM 454 OE2 GLU A 57 -4.328 -14.203 0.667 1.00 6.08 O +ATOM 455 N GLU A 58 0.126 -11.928 4.480 1.00 6.08 N +ATOM 456 CA GLU A 58 -0.009 -10.492 4.706 1.00 6.08 C +ATOM 457 C GLU A 58 1.168 -9.726 4.108 1.00 6.08 C +ATOM 458 CB GLU A 58 -0.125 -10.192 6.203 1.00 6.08 C +ATOM 459 O GLU A 58 2.323 -10.126 4.271 1.00 6.08 O +ATOM 460 CG GLU A 58 -1.553 -9.953 6.673 1.00 6.08 C +ATOM 461 CD GLU A 58 -1.648 -9.595 8.147 1.00 6.08 C +ATOM 462 OE1 GLU A 58 -2.761 -9.279 8.625 1.00 6.08 O +ATOM 463 OE2 GLU A 58 -0.600 -9.629 8.830 1.00 6.08 O +ATOM 464 N VAL A 59 0.923 -8.970 3.115 1.00 5.36 N +ATOM 465 CA VAL A 59 1.676 -8.056 2.262 1.00 5.36 C +ATOM 466 C VAL A 59 1.616 -6.644 2.838 1.00 5.36 C +ATOM 467 CB VAL A 59 1.141 -8.064 0.812 1.00 5.36 C +ATOM 468 O VAL A 59 0.550 -6.026 2.875 1.00 5.36 O +ATOM 469 CG1 VAL A 59 2.113 -7.351 -0.126 1.00 5.36 C +ATOM 470 CG2 VAL A 59 0.894 -9.496 0.342 1.00 5.36 C +ATOM 471 N LEU A 60 2.134 -6.382 4.062 1.00 5.36 N +ATOM 472 CA LEU A 60 2.206 -4.926 4.093 1.00 5.36 C +ATOM 473 C LEU A 60 3.467 -4.459 4.813 1.00 5.36 C +ATOM 474 CB LEU A 60 0.968 -4.342 4.778 1.00 5.36 C +ATOM 475 O LEU A 60 3.645 -4.732 6.002 1.00 5.36 O +ATOM 476 CG LEU A 60 -0.362 -4.523 4.044 1.00 5.36 C +ATOM 477 CD1 LEU A 60 -1.528 -4.217 4.977 1.00 5.36 C +ATOM 478 CD2 LEU A 60 -0.414 -3.635 2.805 1.00 5.36 C +ATOM 479 N PRO A 61 4.690 -3.899 4.294 1.00 5.36 N +ATOM 480 CA PRO A 61 4.413 -2.559 3.771 1.00 5.36 C +ATOM 481 C PRO A 61 4.305 -2.531 2.248 1.00 5.36 C +ATOM 482 CB PRO A 61 5.614 -1.739 4.248 1.00 5.36 C +ATOM 483 O PRO A 61 4.930 -3.348 1.566 1.00 5.36 O +ATOM 484 CG PRO A 61 6.588 -2.750 4.760 1.00 5.36 C +ATOM 485 CD PRO A 61 5.908 -4.089 4.803 1.00 5.36 C +ATOM 486 N ASN A 62 3.352 -1.777 1.774 1.00 4.42 N +ATOM 487 CA ASN A 62 2.773 -1.209 0.561 1.00 4.42 C +ATOM 488 C ASN A 62 3.673 -0.134 -0.041 1.00 4.42 C +ATOM 489 CB ASN A 62 1.382 -0.637 0.847 1.00 4.42 C +ATOM 490 O ASN A 62 3.461 1.058 0.186 1.00 4.42 O +ATOM 491 CG ASN A 62 0.321 -1.714 0.963 1.00 4.42 C +ATOM 492 ND2 ASN A 62 -0.756 -1.410 1.679 1.00 4.42 N +ATOM 493 OD1 ASN A 62 0.468 -2.809 0.415 1.00 4.42 O +ATOM 494 N TYR A 63 4.982 -0.411 -0.311 1.00 4.42 N +ATOM 495 CA TYR A 63 5.766 0.563 -1.062 1.00 4.42 C +ATOM 496 C TYR A 63 5.569 0.381 -2.563 1.00 4.42 C +ATOM 497 CB TYR A 63 7.252 0.442 -0.712 1.00 4.42 C +ATOM 498 O TYR A 63 5.291 -0.726 -3.029 1.00 4.42 O +ATOM 499 CG TYR A 63 7.556 0.705 0.743 1.00 4.42 C +ATOM 500 CD1 TYR A 63 7.564 -0.333 1.672 1.00 4.42 C +ATOM 501 CD2 TYR A 63 7.835 1.992 1.191 1.00 4.42 C +ATOM 502 CE1 TYR A 63 7.842 -0.094 3.014 1.00 4.42 C +ATOM 503 CE2 TYR A 63 8.114 2.242 2.531 1.00 4.42 C +ATOM 504 OH TYR A 63 8.392 1.435 4.760 1.00 4.42 O +ATOM 505 CZ TYR A 63 8.116 1.194 3.433 1.00 4.42 C +ATOM 506 N VAL A 64 5.361 1.479 -3.257 1.00 4.42 N +ATOM 507 CA VAL A 64 5.323 1.484 -4.716 1.00 4.42 C +ATOM 508 C VAL A 64 6.456 2.350 -5.260 1.00 4.42 C +ATOM 509 CB VAL A 64 3.963 1.991 -5.246 1.00 4.42 C +ATOM 510 O VAL A 64 6.668 3.472 -4.794 1.00 4.42 O +ATOM 511 CG1 VAL A 64 4.005 2.161 -6.764 1.00 4.42 C +ATOM 512 CG2 VAL A 64 2.843 1.034 -4.844 1.00 4.42 C +ATOM 513 N LYS A 65 7.501 1.678 -5.944 1.00 5.36 N +ATOM 514 CA LYS A 65 8.535 2.445 -6.634 1.00 5.36 C +ATOM 515 C LYS A 65 8.078 2.847 -8.033 1.00 5.36 C +ATOM 516 CB LYS A 65 9.834 1.643 -6.717 1.00 5.36 C +ATOM 517 O LYS A 65 7.631 2.004 -8.812 1.00 5.36 O +ATOM 518 CG LYS A 65 11.017 2.434 -7.256 1.00 5.36 C +ATOM 519 CD LYS A 65 12.295 1.605 -7.245 1.00 5.36 C +ATOM 520 CE LYS A 65 13.479 2.395 -7.786 1.00 5.36 C +ATOM 521 NZ LYS A 65 14.742 1.599 -7.745 1.00 5.36 N +ATOM 522 N VAL A 66 8.093 4.091 -8.333 1.00 5.36 N +ATOM 523 CA VAL A 66 7.778 4.641 -9.647 1.00 5.36 C +ATOM 524 C VAL A 66 9.008 5.340 -10.223 1.00 5.36 C +ATOM 525 CB VAL A 66 6.589 5.625 -9.580 1.00 5.36 C +ATOM 526 O VAL A 66 9.375 6.430 -9.779 1.00 5.36 O +ATOM 527 CG1 VAL A 66 6.222 6.125 -10.977 1.00 5.36 C +ATOM 528 CG2 VAL A 66 5.385 4.962 -8.914 1.00 5.36 C +ATOM 529 N GLY A 67 9.659 4.635 -11.193 1.00 5.36 N +ATOM 530 CA GLY A 67 10.950 5.142 -11.630 1.00 5.36 C +ATOM 531 C GLY A 67 12.012 5.081 -10.548 1.00 5.36 C +ATOM 532 O GLY A 67 12.305 4.007 -10.019 1.00 5.36 O +ATOM 533 N SER A 68 12.514 6.343 -10.271 1.00 5.36 N +ATOM 534 CA SER A 68 13.526 6.411 -9.222 1.00 5.36 C +ATOM 535 C SER A 68 12.902 6.759 -7.874 1.00 5.36 C +ATOM 536 CB SER A 68 14.598 7.442 -9.577 1.00 5.36 C +ATOM 537 O SER A 68 13.608 6.894 -6.873 1.00 5.36 O +ATOM 538 OG SER A 68 14.006 8.654 -10.011 1.00 5.36 O +ATOM 539 N ASP A 69 11.527 6.878 -7.937 1.00 5.36 N +ATOM 540 CA ASP A 69 10.872 7.348 -6.720 1.00 5.36 C +ATOM 541 C ASP A 69 10.208 6.193 -5.973 1.00 5.36 C +ATOM 542 CB ASP A 69 9.837 8.425 -7.049 1.00 5.36 C +ATOM 543 O ASP A 69 9.669 5.274 -6.594 1.00 5.36 O +ATOM 544 CG ASP A 69 10.453 9.672 -7.660 1.00 5.36 C +ATOM 545 OD1 ASP A 69 9.841 10.271 -8.571 1.00 5.36 O +ATOM 546 OD2 ASP A 69 11.561 10.057 -7.229 1.00 5.36 O +ATOM 547 N LEU A 70 10.310 6.167 -4.690 1.00 4.42 N +ATOM 548 CA LEU A 70 9.712 5.170 -3.810 1.00 4.42 C +ATOM 549 C LEU A 70 8.614 5.789 -2.952 1.00 4.42 C +ATOM 550 CB LEU A 70 10.780 4.537 -2.914 1.00 4.42 C +ATOM 551 O LEU A 70 8.810 6.853 -2.359 1.00 4.42 O +ATOM 552 CG LEU A 70 10.378 3.255 -2.182 1.00 4.42 C +ATOM 553 CD1 LEU A 70 10.240 2.102 -3.170 1.00 4.42 C +ATOM 554 CD2 LEU A 70 11.395 2.918 -1.097 1.00 4.42 C +ATOM 555 N TYR A 71 7.500 5.181 -2.953 1.00 4.42 N +ATOM 556 CA TYR A 71 6.370 5.703 -2.192 1.00 4.42 C +ATOM 557 C TYR A 71 5.940 4.719 -1.110 1.00 4.42 C +ATOM 558 CB TYR A 71 5.190 6.006 -3.121 1.00 4.42 C +ATOM 559 O TYR A 71 5.994 3.504 -1.311 1.00 4.42 O +ATOM 560 CG TYR A 71 5.502 7.031 -4.184 1.00 4.42 C +ATOM 561 CD1 TYR A 71 6.112 6.661 -5.380 1.00 4.42 C +ATOM 562 CD2 TYR A 71 5.190 8.373 -3.993 1.00 4.42 C +ATOM 563 CE1 TYR A 71 6.403 7.603 -6.361 1.00 4.42 C +ATOM 564 CE2 TYR A 71 5.476 9.324 -4.967 1.00 4.42 C +ATOM 565 OH TYR A 71 6.367 9.867 -7.114 1.00 4.42 O +ATOM 566 CZ TYR A 71 6.081 8.930 -6.146 1.00 4.42 C +ATOM 567 N ARG A 72 5.750 5.231 0.077 1.00 4.42 N +ATOM 568 CA ARG A 72 5.102 4.470 1.140 1.00 4.42 C +ATOM 569 C ARG A 72 3.588 4.648 1.097 1.00 4.42 C +ATOM 570 CB ARG A 72 5.641 4.892 2.509 1.00 4.42 C +ATOM 571 O ARG A 72 3.093 5.772 0.987 1.00 4.42 O +ATOM 572 CG ARG A 72 5.185 4.000 3.652 1.00 4.42 C +ATOM 573 CD ARG A 72 5.797 4.427 4.979 1.00 4.42 C +ATOM 574 NE ARG A 72 5.284 3.630 6.090 1.00 4.42 N +ATOM 575 NH1 ARG A 72 6.305 4.890 7.736 1.00 4.42 N +ATOM 576 NH2 ARG A 72 5.019 3.079 8.304 1.00 4.42 N +ATOM 577 CZ ARG A 72 5.538 3.868 7.374 1.00 4.42 C +ATOM 578 N LEU A 73 2.852 3.545 1.039 1.00 3.21 N +ATOM 579 CA LEU A 73 1.395 3.610 1.029 1.00 3.21 C +ATOM 580 C LEU A 73 0.833 3.435 2.436 1.00 3.21 C +ATOM 581 CB LEU A 73 0.816 2.541 0.099 1.00 3.21 C +ATOM 582 O LEU A 73 1.261 2.544 3.173 1.00 3.21 O +ATOM 583 CG LEU A 73 1.212 2.639 -1.375 1.00 3.21 C +ATOM 584 CD1 LEU A 73 1.030 1.291 -2.064 1.00 3.21 C +ATOM 585 CD2 LEU A 73 0.396 3.719 -2.078 1.00 3.21 C +ATOM 586 N LYS A 74 0.064 4.404 2.921 1.00 4.42 N +ATOM 587 CA LYS A 74 -0.627 4.299 4.203 1.00 4.42 C +ATOM 588 C LYS A 74 -2.140 4.374 4.020 1.00 4.42 C +ATOM 589 CB LYS A 74 -0.159 5.400 5.156 1.00 4.42 C +ATOM 590 O LYS A 74 -2.643 5.256 3.320 1.00 4.42 O +ATOM 591 CG LYS A 74 -0.498 5.139 6.617 1.00 4.42 C +ATOM 592 CD LYS A 74 0.083 6.214 7.526 1.00 4.42 C +ATOM 593 CE LYS A 74 -0.315 5.993 8.979 1.00 4.42 C +ATOM 594 NZ LYS A 74 0.270 7.033 9.878 1.00 4.42 N +ATOM 595 N ALA A 75 -2.781 3.329 4.523 1.00 4.42 N +ATOM 596 CA ALA A 75 -4.241 3.343 4.479 1.00 4.42 C +ATOM 597 C ALA A 75 -4.826 3.741 5.831 1.00 4.42 C +ATOM 598 CB ALA A 75 -4.774 1.977 4.053 1.00 4.42 C +ATOM 599 O ALA A 75 -4.275 3.396 6.879 1.00 4.42 O +ATOM 600 N TYR A 76 -5.770 4.597 5.772 1.00 5.36 N +ATOM 601 CA TYR A 76 -6.435 4.990 7.009 1.00 5.36 C +ATOM 602 C TYR A 76 -7.924 5.215 6.781 1.00 5.36 C +ATOM 603 CB TYR A 76 -5.797 6.259 7.583 1.00 5.36 C +ATOM 604 O TYR A 76 -8.375 5.314 5.637 1.00 5.36 O +ATOM 605 CG TYR A 76 -5.887 7.453 6.665 1.00 5.36 C +ATOM 606 CD1 TYR A 76 -6.916 8.382 6.798 1.00 5.36 C +ATOM 607 CD2 TYR A 76 -4.946 7.653 5.661 1.00 5.36 C +ATOM 608 CE1 TYR A 76 -7.005 9.483 5.952 1.00 5.36 C +ATOM 609 CE2 TYR A 76 -5.024 8.750 4.809 1.00 5.36 C +ATOM 610 OH TYR A 76 -6.138 10.746 4.123 1.00 5.36 O +ATOM 611 CZ TYR A 76 -6.055 9.659 4.963 1.00 5.36 C +ATOM 612 N ARG A 77 -8.726 5.218 7.799 1.00 5.36 N +ATOM 613 CA ARG A 77 -10.169 5.419 7.723 1.00 5.36 C +ATOM 614 C ARG A 77 -10.570 6.753 8.344 1.00 5.36 C +ATOM 615 CB ARG A 77 -10.909 4.274 8.418 1.00 5.36 C +ATOM 616 O ARG A 77 -10.028 7.151 9.377 1.00 5.36 O +ATOM 617 CG ARG A 77 -12.424 4.372 8.322 1.00 5.36 C +ATOM 618 CD ARG A 77 -13.109 3.207 9.024 1.00 5.36 C +ATOM 619 NE ARG A 77 -13.016 1.977 8.244 1.00 5.36 N +ATOM 620 NH1 ARG A 77 -14.417 0.756 9.616 1.00 5.36 N +ATOM 621 NH2 ARG A 77 -13.484 -0.219 7.763 1.00 5.36 N +ATOM 622 CZ ARG A 77 -13.639 0.841 8.542 1.00 5.36 C +ATOM 623 N GLU A 78 -11.384 7.464 7.705 1.00 5.36 N +ATOM 624 CA GLU A 78 -12.045 8.659 8.221 1.00 5.36 C +ATOM 625 C GLU A 78 -13.563 8.519 8.164 1.00 5.36 C +ATOM 626 CB GLU A 78 -11.601 9.899 7.439 1.00 5.36 C +ATOM 627 O GLU A 78 -14.081 7.514 7.673 1.00 5.36 O +ATOM 628 CG GLU A 78 -10.154 10.298 7.690 1.00 5.36 C +ATOM 629 CD GLU A 78 -9.792 11.648 7.092 1.00 5.36 C +ATOM 630 OE1 GLU A 78 -8.647 12.113 7.291 1.00 5.36 O +ATOM 631 OE2 GLU A 78 -10.661 12.247 6.420 1.00 5.36 O +ATOM 632 N LYS A 79 -14.255 9.510 8.676 1.00 5.36 N +ATOM 633 CA LYS A 79 -15.715 9.478 8.716 1.00 5.36 C +ATOM 634 C LYS A 79 -16.297 9.210 7.332 1.00 5.36 C +ATOM 635 CB LYS A 79 -16.265 10.793 9.271 1.00 5.36 C +ATOM 636 O LYS A 79 -17.266 8.460 7.195 1.00 5.36 O +ATOM 637 CG LYS A 79 -16.312 10.853 10.790 1.00 5.36 C +ATOM 638 CD LYS A 79 -16.955 12.144 11.279 1.00 5.36 C +ATOM 639 CE LYS A 79 -16.920 12.247 12.798 1.00 5.36 C +ATOM 640 NZ LYS A 79 -17.524 13.525 13.281 1.00 5.36 N +ATOM 641 N SER A 80 -15.615 9.685 6.280 1.00 5.36 N +ATOM 642 CA SER A 80 -16.194 9.676 4.940 1.00 5.36 C +ATOM 643 C SER A 80 -15.768 8.435 4.163 1.00 5.36 C +ATOM 644 CB SER A 80 -15.787 10.934 4.171 1.00 5.36 C +ATOM 645 O SER A 80 -16.312 8.148 3.094 1.00 5.36 O +ATOM 646 OG SER A 80 -14.376 11.064 4.131 1.00 5.36 O +ATOM 647 N GLY A 81 -14.790 7.696 4.700 1.00 5.36 N +ATOM 648 CA GLY A 81 -14.368 6.508 3.975 1.00 5.36 C +ATOM 649 C GLY A 81 -12.932 6.112 4.264 1.00 5.36 C +ATOM 650 O GLY A 81 -12.367 6.508 5.285 1.00 5.36 O +ATOM 651 N VAL A 82 -12.402 5.137 3.681 1.00 5.36 N +ATOM 652 CA VAL A 82 -11.030 4.653 3.791 1.00 5.36 C +ATOM 653 C VAL A 82 -10.148 5.364 2.767 1.00 5.36 C +ATOM 654 CB VAL A 82 -10.951 3.123 3.591 1.00 5.36 C +ATOM 655 O VAL A 82 -10.540 5.531 1.610 1.00 5.36 O +ATOM 656 CG1 VAL A 82 -9.503 2.642 3.674 1.00 5.36 C +ATOM 657 CG2 VAL A 82 -11.816 2.405 4.626 1.00 5.36 C +ATOM 658 N TYR A 83 -9.046 5.835 3.278 1.00 5.36 N +ATOM 659 CA TYR A 83 -8.137 6.587 2.421 1.00 5.36 C +ATOM 660 C TYR A 83 -6.784 5.894 2.319 1.00 5.36 C +ATOM 661 CB TYR A 83 -7.955 8.013 2.949 1.00 5.36 C +ATOM 662 O TYR A 83 -6.401 5.132 3.211 1.00 5.36 O +ATOM 663 CG TYR A 83 -9.240 8.802 3.021 1.00 5.36 C +ATOM 664 CD1 TYR A 83 -10.101 8.671 4.108 1.00 5.36 C +ATOM 665 CD2 TYR A 83 -9.595 9.680 2.003 1.00 5.36 C +ATOM 666 CE1 TYR A 83 -11.287 9.395 4.177 1.00 5.36 C +ATOM 667 CE2 TYR A 83 -10.778 10.409 2.062 1.00 5.36 C +ATOM 668 OH TYR A 83 -12.789 10.979 3.215 1.00 5.36 O +ATOM 669 CZ TYR A 83 -11.616 10.260 3.151 1.00 5.36 C +ATOM 670 N VAL A 84 -6.217 5.977 1.159 1.00 4.42 N +ATOM 671 CA VAL A 84 -4.820 5.583 1.013 1.00 4.42 C +ATOM 672 C VAL A 84 -3.961 6.815 0.737 1.00 4.42 C +ATOM 673 CB VAL A 84 -4.638 4.544 -0.116 1.00 4.42 C +ATOM 674 O VAL A 84 -4.300 7.638 -0.117 1.00 4.42 O +ATOM 675 CG1 VAL A 84 -3.161 4.207 -0.308 1.00 4.42 C +ATOM 676 CG2 VAL A 84 -5.442 3.281 0.188 1.00 4.42 C +ATOM 677 N ARG A 85 -3.015 6.909 1.573 1.00 4.42 N +ATOM 678 CA ARG A 85 -2.052 8.001 1.472 1.00 4.42 C +ATOM 679 C ARG A 85 -0.722 7.508 0.912 1.00 4.42 C +ATOM 680 CB ARG A 85 -1.835 8.655 2.838 1.00 4.42 C +ATOM 681 O ARG A 85 -0.256 6.423 1.268 1.00 4.42 O +ATOM 682 CG ARG A 85 -1.113 9.992 2.773 1.00 4.42 C +ATOM 683 CD ARG A 85 -0.941 10.607 4.154 1.00 4.42 C +ATOM 684 NE ARG A 85 -2.049 11.496 4.491 1.00 4.42 N +ATOM 685 NH1 ARG A 85 -1.423 11.780 6.696 1.00 4.42 N +ATOM 686 NH2 ARG A 85 -3.293 12.829 5.887 1.00 4.42 N +ATOM 687 CZ ARG A 85 -2.252 12.033 5.691 1.00 4.42 C +ATOM 688 N THR A 86 -0.152 8.200 -0.153 1.00 4.42 N +ATOM 689 CA THR A 86 1.170 7.866 -0.672 1.00 4.42 C +ATOM 690 C THR A 86 2.192 8.924 -0.269 1.00 4.42 C +ATOM 691 CB THR A 86 1.148 7.726 -2.205 1.00 4.42 C +ATOM 692 O THR A 86 1.918 10.123 -0.351 1.00 4.42 O +ATOM 693 CG2 THR A 86 0.290 6.542 -2.638 1.00 4.42 C +ATOM 694 OG1 THR A 86 0.614 8.925 -2.781 1.00 4.42 O +ATOM 695 N ASN A 87 3.286 8.434 0.354 1.00 5.36 N +ATOM 696 CA ASN A 87 4.370 9.361 0.664 1.00 5.36 C +ATOM 697 C ASN A 87 5.610 9.075 -0.179 1.00 5.36 C +ATOM 698 CB ASN A 87 4.716 9.304 2.153 1.00 5.36 C +ATOM 699 O ASN A 87 6.062 7.932 -0.258 1.00 5.36 O +ATOM 700 CG ASN A 87 3.662 9.959 3.024 1.00 5.36 C +ATOM 701 ND2 ASN A 87 3.845 9.882 4.336 1.00 5.36 N +ATOM 702 OD1 ASN A 87 2.690 10.529 2.520 1.00 5.36 O +ATOM 703 N LYS A 88 6.095 10.057 -0.960 1.00 5.36 N +ATOM 704 CA LYS A 88 7.392 9.866 -1.603 1.00 5.36 C +ATOM 705 C LYS A 88 8.509 9.764 -0.569 1.00 5.36 C +ATOM 706 CB LYS A 88 7.682 11.009 -2.577 1.00 5.36 C +ATOM 707 O LYS A 88 8.639 10.630 0.299 1.00 5.36 O +ATOM 708 CG LYS A 88 8.904 10.780 -3.454 1.00 5.36 C +ATOM 709 CD LYS A 88 9.096 11.914 -4.452 1.00 5.36 C +ATOM 710 CE LYS A 88 10.325 11.692 -5.323 1.00 5.36 C +ATOM 711 NZ LYS A 88 10.494 12.781 -6.331 1.00 5.36 N +ATOM 712 N LEU A 89 9.164 8.645 -0.576 1.00 5.36 N +ATOM 713 CA LEU A 89 10.225 8.484 0.412 1.00 5.36 C +ATOM 714 C LEU A 89 11.425 9.361 0.069 1.00 5.36 C +ATOM 715 CB LEU A 89 10.658 7.018 0.498 1.00 5.36 C +ATOM 716 O LEU A 89 11.670 9.653 -1.104 1.00 5.36 O +ATOM 717 CG LEU A 89 9.718 6.077 1.253 1.00 5.36 C +ATOM 718 CD1 LEU A 89 10.100 4.624 0.990 1.00 5.36 C +ATOM 719 CD2 LEU A 89 9.744 6.380 2.747 1.00 5.36 C +ATOM 720 N GLY A 90 12.223 9.812 1.163 1.00 5.36 N +ATOM 721 CA GLY A 90 13.408 10.650 1.084 1.00 5.36 C +ATOM 722 C GLY A 90 13.092 12.133 1.100 1.00 5.36 C +ATOM 723 O GLY A 90 13.993 12.967 0.984 1.00 5.36 O +ATOM 724 N PHE A 91 11.852 12.465 1.066 1.00 6.08 N +ATOM 725 CA PHE A 91 11.399 13.841 1.233 1.00 6.08 C +ATOM 726 C PHE A 91 10.518 13.974 2.470 1.00 6.08 C +ATOM 727 CB PHE A 91 10.634 14.312 -0.008 1.00 6.08 C +ATOM 728 O PHE A 91 9.318 13.699 2.417 1.00 6.08 O +ATOM 729 CG PHE A 91 11.519 14.611 -1.188 1.00 6.08 C +ATOM 730 CD1 PHE A 91 11.797 13.630 -2.132 1.00 6.08 C +ATOM 731 CD2 PHE A 91 12.073 15.874 -1.353 1.00 6.08 C +ATOM 732 CE1 PHE A 91 12.615 13.904 -3.226 1.00 6.08 C +ATOM 733 CE2 PHE A 91 12.891 16.155 -2.443 1.00 6.08 C +ATOM 734 CZ PHE A 91 13.162 15.168 -3.378 1.00 6.08 C +ATOM 735 N GLU A 92 11.137 13.459 3.617 1.00 6.08 N +ATOM 736 CA GLU A 92 10.535 13.509 4.945 1.00 6.08 C +ATOM 737 C GLU A 92 10.313 14.950 5.397 1.00 6.08 C +ATOM 738 CB GLU A 92 11.409 12.768 5.960 1.00 6.08 C +ATOM 739 O GLU A 92 11.270 15.664 5.704 1.00 6.08 O +ATOM 740 CG GLU A 92 10.998 11.320 6.186 1.00 6.08 C +ATOM 741 CD GLU A 92 11.819 10.623 7.259 1.00 6.08 C +ATOM 742 OE1 GLU A 92 11.506 9.461 7.604 1.00 6.08 O +ATOM 743 OE2 GLU A 92 12.783 11.245 7.759 1.00 6.08 O +ATOM 744 N ASP A 93 9.620 15.891 4.677 1.00 6.08 N +ATOM 745 CA ASP A 93 9.157 16.934 5.587 1.00 6.08 C +ATOM 746 C ASP A 93 7.745 16.640 6.087 1.00 6.08 C +ATOM 747 CB ASP A 93 9.199 18.302 4.902 1.00 6.08 C +ATOM 748 O ASP A 93 6.797 16.602 5.299 1.00 6.08 O +ATOM 749 CG ASP A 93 8.970 19.454 5.864 1.00 6.08 C +ATOM 750 OD1 ASP A 93 9.176 20.624 5.475 1.00 6.08 O +ATOM 751 OD2 ASP A 93 8.583 19.190 7.023 1.00 6.08 O +ATOM 752 N PRO A 94 7.665 15.732 7.134 1.00 6.08 N +ATOM 753 CA PRO A 94 6.298 15.546 7.627 1.00 6.08 C +ATOM 754 C PRO A 94 5.438 16.798 7.468 1.00 6.08 C +ATOM 755 CB PRO A 94 6.500 15.207 9.106 1.00 6.08 C +ATOM 756 O PRO A 94 4.211 16.701 7.386 1.00 6.08 O +ATOM 757 CG PRO A 94 7.963 15.397 9.346 1.00 6.08 C +ATOM 758 CD PRO A 94 8.633 15.652 8.026 1.00 6.08 C +ATOM 759 N LYS A 95 6.057 18.015 7.264 1.00 6.08 N +ATOM 760 CA LYS A 95 5.244 19.214 7.077 1.00 6.08 C +ATOM 761 C LYS A 95 5.046 19.517 5.595 1.00 6.08 C +ATOM 762 CB LYS A 95 5.887 20.413 7.776 1.00 6.08 C +ATOM 763 O LYS A 95 4.278 20.413 5.236 1.00 6.08 O +ATOM 764 CG LYS A 95 5.879 20.321 9.295 1.00 6.08 C +ATOM 765 CD LYS A 95 6.403 21.600 9.935 1.00 6.08 C +ATOM 766 CE LYS A 95 6.462 21.483 11.452 1.00 6.08 C +ATOM 767 NZ LYS A 95 6.972 22.736 12.085 1.00 6.08 N +ATOM 768 N SER A 96 5.718 18.813 4.741 1.00 6.08 N +ATOM 769 CA SER A 96 5.637 19.195 3.335 1.00 6.08 C +ATOM 770 C SER A 96 4.505 18.459 2.626 1.00 6.08 C +ATOM 771 CB SER A 96 6.963 18.912 2.626 1.00 6.08 C +ATOM 772 O SER A 96 4.417 17.231 2.696 1.00 6.08 O +ATOM 773 OG SER A 96 6.791 17.942 1.607 1.00 6.08 O +ATOM 774 N PHE A 97 3.312 18.985 2.701 1.00 6.08 N +ATOM 775 CA PHE A 97 2.069 18.645 2.019 1.00 6.08 C +ATOM 776 C PHE A 97 2.310 18.435 0.529 1.00 6.08 C +ATOM 777 CB PHE A 97 1.020 19.741 2.232 1.00 6.08 C +ATOM 778 O PHE A 97 1.445 17.913 -0.178 1.00 6.08 O +ATOM 779 CG PHE A 97 0.311 19.653 3.556 1.00 6.08 C +ATOM 780 CD1 PHE A 97 0.741 20.404 4.643 1.00 6.08 C +ATOM 781 CD2 PHE A 97 -0.787 18.817 3.714 1.00 6.08 C +ATOM 782 CE1 PHE A 97 0.086 20.325 5.869 1.00 6.08 C +ATOM 783 CE2 PHE A 97 -1.447 18.732 4.937 1.00 6.08 C +ATOM 784 CZ PHE A 97 -1.008 19.486 6.014 1.00 6.08 C +ATOM 785 N LEU A 98 3.513 18.640 0.039 1.00 6.08 N +ATOM 786 CA LEU A 98 3.587 18.842 -1.404 1.00 6.08 C +ATOM 787 C LEU A 98 3.826 17.520 -2.126 1.00 6.08 C +ATOM 788 CB LEU A 98 4.699 19.835 -1.751 1.00 6.08 C +ATOM 789 O LEU A 98 3.478 17.377 -3.300 1.00 6.08 O +ATOM 790 CG LEU A 98 4.372 21.315 -1.552 1.00 6.08 C +ATOM 791 CD1 LEU A 98 5.651 22.145 -1.553 1.00 6.08 C +ATOM 792 CD2 LEU A 98 3.413 21.801 -2.634 1.00 6.08 C +ATOM 793 N SER A 99 3.933 16.395 -1.418 1.00 6.08 N +ATOM 794 CA SER A 99 3.847 15.299 -2.377 1.00 6.08 C +ATOM 795 C SER A 99 2.856 14.236 -1.915 1.00 6.08 C +ATOM 796 CB SER A 99 5.222 14.666 -2.593 1.00 6.08 C +ATOM 797 O SER A 99 3.126 13.039 -2.024 1.00 6.08 O +ATOM 798 OG SER A 99 6.045 14.848 -1.453 1.00 6.08 O +ATOM 799 N ILE A 100 1.863 14.672 -1.135 1.00 6.08 N +ATOM 800 CA ILE A 100 0.897 13.774 -0.510 1.00 6.08 C +ATOM 801 C ILE A 100 -0.327 13.626 -1.411 1.00 6.08 C +ATOM 802 CB ILE A 100 0.475 14.281 0.887 1.00 6.08 C +ATOM 803 O ILE A 100 -0.866 14.619 -1.905 1.00 6.08 O +ATOM 804 CG1 ILE A 100 1.693 14.364 1.815 1.00 6.08 C +ATOM 805 CG2 ILE A 100 -0.608 13.379 1.485 1.00 6.08 C +ATOM 806 CD1 ILE A 100 1.410 15.041 3.149 1.00 6.08 C +ATOM 807 N LYS A 101 -0.627 12.452 -2.003 1.00 6.08 N +ATOM 808 CA LYS A 101 -1.914 12.267 -2.668 1.00 6.08 C +ATOM 809 C LYS A 101 -2.834 11.369 -1.846 1.00 6.08 C +ATOM 810 CB LYS A 101 -1.717 11.677 -4.065 1.00 6.08 C +ATOM 811 O LYS A 101 -2.372 10.433 -1.190 1.00 6.08 O +ATOM 812 CG LYS A 101 -1.039 12.621 -5.046 1.00 6.08 C +ATOM 813 CD LYS A 101 -1.055 12.062 -6.463 1.00 6.08 C +ATOM 814 CE LYS A 101 -0.350 12.992 -7.441 1.00 6.08 C +ATOM 815 NZ LYS A 101 -0.430 12.486 -8.844 1.00 6.08 N +ATOM 816 N GLU A 102 -3.972 11.868 -1.441 1.00 6.08 N +ATOM 817 CA GLU A 102 -5.024 11.157 -0.721 1.00 6.08 C +ATOM 818 C GLU A 102 -6.074 10.605 -1.681 1.00 6.08 C +ATOM 819 CB GLU A 102 -5.686 12.076 0.310 1.00 6.08 C +ATOM 820 O GLU A 102 -6.525 11.308 -2.587 1.00 6.08 O +ATOM 821 CG GLU A 102 -6.179 11.350 1.553 1.00 6.08 C +ATOM 822 CD GLU A 102 -6.742 12.286 2.611 1.00 6.08 C +ATOM 823 OE1 GLU A 102 -7.929 12.141 2.980 1.00 6.08 O +ATOM 824 OE2 GLU A 102 -5.989 13.172 3.073 1.00 6.08 O +ATOM 825 N TYR A 103 -6.415 9.341 -1.509 1.00 5.36 N +ATOM 826 CA TYR A 103 -7.466 8.743 -2.325 1.00 5.36 C +ATOM 827 C TYR A 103 -8.614 8.244 -1.456 1.00 5.36 C +ATOM 828 CB TYR A 103 -6.906 7.589 -3.163 1.00 5.36 C +ATOM 829 O TYR A 103 -8.406 7.443 -0.541 1.00 5.36 O +ATOM 830 CG TYR A 103 -5.758 7.990 -4.057 1.00 5.36 C +ATOM 831 CD1 TYR A 103 -4.440 7.899 -3.614 1.00 5.36 C +ATOM 832 CD2 TYR A 103 -5.988 8.459 -5.345 1.00 5.36 C +ATOM 833 CE1 TYR A 103 -3.379 8.269 -4.434 1.00 5.36 C +ATOM 834 CE2 TYR A 103 -4.935 8.832 -6.174 1.00 5.36 C +ATOM 835 OH TYR A 103 -2.589 9.101 -6.526 1.00 5.36 O +ATOM 836 CZ TYR A 103 -3.636 8.733 -5.710 1.00 5.36 C +ATOM 837 N LYS A 104 -9.836 8.844 -1.571 1.00 6.08 N +ATOM 838 CA LYS A 104 -11.038 8.471 -0.832 1.00 6.08 C +ATOM 839 C LYS A 104 -11.649 7.188 -1.387 1.00 6.08 C +ATOM 840 CB LYS A 104 -12.066 9.602 -0.872 1.00 6.08 C +ATOM 841 O LYS A 104 -11.782 7.033 -2.603 1.00 6.08 O +ATOM 842 CG LYS A 104 -13.244 9.402 0.070 1.00 6.08 C +ATOM 843 CD LYS A 104 -14.209 10.579 0.017 1.00 6.08 C +ATOM 844 CE LYS A 104 -15.411 10.360 0.925 1.00 6.08 C +ATOM 845 NZ LYS A 104 -16.346 11.524 0.898 1.00 6.08 N +ATOM 846 N PHE A 105 -11.952 6.243 -0.555 1.00 6.08 N +ATOM 847 CA PHE A 105 -12.601 4.981 -0.891 1.00 6.08 C +ATOM 848 C PHE A 105 -14.029 4.948 -0.359 1.00 6.08 C +ATOM 849 CB PHE A 105 -11.804 3.799 -0.330 1.00 6.08 C +ATOM 850 O PHE A 105 -14.252 5.098 0.844 1.00 6.08 O +ATOM 851 CG PHE A 105 -11.481 2.744 -1.354 1.00 6.08 C +ATOM 852 CD1 PHE A 105 -10.418 2.913 -2.234 1.00 6.08 C +ATOM 853 CD2 PHE A 105 -12.239 1.584 -1.436 1.00 6.08 C +ATOM 854 CE1 PHE A 105 -10.116 1.938 -3.182 1.00 6.08 C +ATOM 855 CE2 PHE A 105 -11.944 0.606 -2.382 1.00 6.08 C +ATOM 856 CZ PHE A 105 -10.883 0.785 -3.254 1.00 6.08 C +ATOM 857 N GLY A 106 -15.105 4.749 -1.141 1.00 6.08 N +ATOM 858 CA GLY A 106 -16.469 4.462 -0.727 1.00 6.08 C +ATOM 859 C GLY A 106 -17.097 5.584 0.078 1.00 6.08 C +ATOM 860 O GLY A 106 -16.419 6.547 0.445 1.00 6.08 O +ATOM 861 N THR A 107 -18.460 5.770 -0.034 1.00 6.08 N +ATOM 862 CA THR A 107 -19.388 6.728 0.555 1.00 6.08 C +ATOM 863 C THR A 107 -20.150 6.098 1.717 1.00 6.08 C +ATOM 864 CB THR A 107 -20.386 7.256 -0.492 1.00 6.08 C +ATOM 865 O THR A 107 -21.036 5.267 1.507 1.00 6.08 O +ATOM 866 CG2 THR A 107 -19.699 8.182 -1.490 1.00 6.08 C +ATOM 867 OG1 THR A 107 -20.957 6.148 -1.200 1.00 6.08 O +ATOM 868 N ARG A 108 -19.518 5.476 2.709 1.00 6.08 N +ATOM 869 CA ARG A 108 -20.503 5.366 3.780 1.00 6.08 C +ATOM 870 C ARG A 108 -20.263 6.422 4.855 1.00 6.08 C +ATOM 871 CB ARG A 108 -20.469 3.968 4.402 1.00 6.08 C +ATOM 872 O ARG A 108 -19.123 6.646 5.268 1.00 6.08 O +ATOM 873 CG ARG A 108 -21.303 2.941 3.653 1.00 6.08 C +ATOM 874 CD ARG A 108 -21.351 1.609 4.389 1.00 6.08 C +ATOM 875 NE ARG A 108 -22.338 0.706 3.804 1.00 6.08 N +ATOM 876 NH1 ARG A 108 -22.022 -0.977 5.356 1.00 6.08 N +ATOM 877 NH2 ARG A 108 -23.549 -1.241 3.667 1.00 6.08 N +ATOM 878 CZ ARG A 108 -22.634 -0.502 4.277 1.00 6.08 C +ATOM 879 N THR A 109 -21.000 7.550 4.650 1.00 6.08 N +ATOM 880 CA THR A 109 -21.263 8.726 5.472 1.00 6.08 C +ATOM 881 C THR A 109 -21.852 8.323 6.821 1.00 6.08 C +ATOM 882 CB THR A 109 -22.219 9.702 4.762 1.00 6.08 C +ATOM 883 O THR A 109 -22.761 7.492 6.883 1.00 6.08 O +ATOM 884 CG2 THR A 109 -21.477 10.545 3.730 1.00 6.08 C +ATOM 885 OG1 THR A 109 -23.249 8.956 4.102 1.00 6.08 O +ATOM 886 N GLY A 110 -21.151 8.030 7.805 1.00 6.08 N +ATOM 887 CA GLY A 110 -21.715 8.302 9.117 1.00 6.08 C +ATOM 888 C GLY A 110 -20.888 7.731 10.253 1.00 6.08 C +ATOM 889 O GLY A 110 -20.720 6.514 10.354 1.00 6.08 O +ATOM 890 N GLY A 111 -20.142 8.505 10.862 1.00 6.08 N +ATOM 891 CA GLY A 111 -19.936 8.533 12.301 1.00 6.08 C +ATOM 892 C GLY A 111 -18.518 8.904 12.693 1.00 6.08 C +ATOM 893 O GLY A 111 -17.638 9.007 11.836 1.00 6.08 O +ATOM 894 N ASN A 112 -18.313 9.718 13.747 1.00 6.08 N +ATOM 895 CA ASN A 112 -17.174 10.179 14.534 1.00 6.08 C +ATOM 896 C ASN A 112 -16.127 9.082 14.702 1.00 6.08 C +ATOM 897 CB ASN A 112 -17.637 10.685 15.902 1.00 6.08 C +ATOM 898 O ASN A 112 -16.444 7.978 15.149 1.00 6.08 O +ATOM 899 CG ASN A 112 -18.364 12.013 15.817 1.00 6.08 C +ATOM 900 ND2 ASN A 112 -19.255 12.262 16.770 1.00 6.08 N +ATOM 901 OD1 ASN A 112 -18.128 12.807 14.904 1.00 6.08 O +ATOM 902 N PHE A 113 -14.987 8.972 14.050 1.00 6.08 N +ATOM 903 CA PHE A 113 -14.107 7.891 14.478 1.00 6.08 C +ATOM 904 C PHE A 113 -12.665 8.373 14.576 1.00 6.08 C +ATOM 905 CB PHE A 113 -14.201 6.706 13.512 1.00 6.08 C +ATOM 906 O PHE A 113 -12.245 9.251 13.819 1.00 6.08 O +ATOM 907 CG PHE A 113 -15.131 5.617 13.975 1.00 6.08 C +ATOM 908 CD1 PHE A 113 -16.472 5.629 13.613 1.00 6.08 C +ATOM 909 CD2 PHE A 113 -14.664 4.581 14.774 1.00 6.08 C +ATOM 910 CE1 PHE A 113 -17.336 4.623 14.040 1.00 6.08 C +ATOM 911 CE2 PHE A 113 -15.520 3.572 15.204 1.00 6.08 C +ATOM 912 CZ PHE A 113 -16.856 3.595 14.837 1.00 6.08 C +ATOM 913 N THR A 114 -11.825 7.651 15.237 1.00 6.08 N +ATOM 914 CA THR A 114 -10.413 7.467 15.554 1.00 6.08 C +ATOM 915 C THR A 114 -10.065 5.983 15.631 1.00 6.08 C +ATOM 916 CB THR A 114 -10.044 8.154 16.882 1.00 6.08 C +ATOM 917 O THR A 114 -10.307 5.336 16.652 1.00 6.08 O +ATOM 918 CG2 THR A 114 -10.124 9.672 16.757 1.00 6.08 C +ATOM 919 OG1 THR A 114 -10.951 7.722 17.904 1.00 6.08 O +ATOM 920 N GLY A 115 -10.385 5.096 14.476 1.00 6.08 N +ATOM 921 CA GLY A 115 -9.894 3.756 14.757 1.00 6.08 C +ATOM 922 C GLY A 115 -9.108 3.156 13.607 1.00 6.08 C +ATOM 923 O GLY A 115 -8.864 3.823 12.600 1.00 6.08 O +ATOM 924 N GLU A 116 -8.292 2.078 13.803 1.00 6.08 N +ATOM 925 CA GLU A 116 -7.455 1.166 13.029 1.00 6.08 C +ATOM 926 C GLU A 116 -8.271 0.435 11.966 1.00 6.08 C +ATOM 927 CB GLU A 116 -6.766 0.156 13.950 1.00 6.08 C +ATOM 928 O GLU A 116 -9.471 0.214 12.141 1.00 6.08 O +ATOM 929 CG GLU A 116 -5.620 0.745 14.760 1.00 6.08 C +ATOM 930 CD GLU A 116 -4.833 -0.301 15.533 1.00 6.08 C +ATOM 931 OE1 GLU A 116 -3.793 0.046 16.138 1.00 6.08 O +ATOM 932 OE2 GLU A 116 -5.258 -1.478 15.533 1.00 6.08 O +ATOM 933 N LEU A 117 -7.867 0.276 10.616 1.00 5.36 N +ATOM 934 CA LEU A 117 -8.515 -0.475 9.546 1.00 5.36 C +ATOM 935 C LEU A 117 -8.722 -1.930 9.952 1.00 5.36 C +ATOM 936 CB LEU A 117 -7.684 -0.404 8.263 1.00 5.36 C +ATOM 937 O LEU A 117 -7.933 -2.483 10.723 1.00 5.36 O +ATOM 938 CG LEU A 117 -7.563 0.973 7.608 1.00 5.36 C +ATOM 939 CD1 LEU A 117 -6.504 0.947 6.511 1.00 5.36 C +ATOM 940 CD2 LEU A 117 -8.910 1.418 7.048 1.00 5.36 C +ATOM 941 N THR A 118 -9.851 -2.455 9.647 1.00 5.36 N +ATOM 942 CA THR A 118 -10.035 -3.895 9.790 1.00 5.36 C +ATOM 943 C THR A 118 -9.157 -4.654 8.798 1.00 5.36 C +ATOM 944 CB THR A 118 -11.508 -4.294 9.584 1.00 5.36 C +ATOM 945 O THR A 118 -8.605 -4.060 7.869 1.00 5.36 O +ATOM 946 CG2 THR A 118 -12.428 -3.487 10.493 1.00 5.36 C +ATOM 947 OG1 THR A 118 -11.875 -4.057 8.219 1.00 5.36 O +ATOM 948 N LYS A 119 -8.889 -5.923 9.112 1.00 6.08 N +ATOM 949 CA LYS A 119 -8.123 -6.769 8.201 1.00 6.08 C +ATOM 950 C LYS A 119 -8.726 -6.753 6.799 1.00 6.08 C +ATOM 951 CB LYS A 119 -8.057 -8.204 8.727 1.00 6.08 C +ATOM 952 O LYS A 119 -8.000 -6.675 5.806 1.00 6.08 O +ATOM 953 CG LYS A 119 -7.022 -9.073 8.027 1.00 6.08 C +ATOM 954 CD LYS A 119 -6.951 -10.463 8.644 1.00 6.08 C +ATOM 955 CE LYS A 119 -6.004 -11.371 7.872 1.00 6.08 C +ATOM 956 NZ LYS A 119 -5.944 -12.741 8.463 1.00 6.08 N +ATOM 957 N GLN A 120 -10.033 -6.874 6.687 1.00 6.08 N +ATOM 958 CA GLN A 120 -10.739 -6.867 5.410 1.00 6.08 C +ATOM 959 C GLN A 120 -10.510 -5.558 4.661 1.00 6.08 C +ATOM 960 CB GLN A 120 -12.236 -7.096 5.623 1.00 6.08 C +ATOM 961 O GLN A 120 -10.287 -5.560 3.449 1.00 6.08 O +ATOM 962 CG GLN A 120 -12.965 -7.594 4.383 1.00 6.08 C +ATOM 963 CD GLN A 120 -14.269 -8.298 4.711 1.00 6.08 C +ATOM 964 NE2 GLN A 120 -14.806 -9.032 3.742 1.00 6.08 N +ATOM 965 OE1 GLN A 120 -14.788 -8.184 5.826 1.00 6.08 O +ATOM 966 N GLU A 121 -10.563 -4.457 5.339 1.00 5.36 N +ATOM 967 CA GLU A 121 -10.315 -3.150 4.738 1.00 5.36 C +ATOM 968 C GLU A 121 -8.891 -3.052 4.198 1.00 5.36 C +ATOM 969 CB GLU A 121 -10.571 -2.034 5.753 1.00 5.36 C +ATOM 970 O GLU A 121 -8.667 -2.500 3.119 1.00 5.36 O +ATOM 971 CG GLU A 121 -12.041 -1.836 6.092 1.00 5.36 C +ATOM 972 CD GLU A 121 -12.266 -0.891 7.262 1.00 5.36 C +ATOM 973 OE1 GLU A 121 -13.256 -0.126 7.243 1.00 5.36 O +ATOM 974 OE2 GLU A 121 -11.443 -0.916 8.205 1.00 5.36 O +ATOM 975 N LEU A 122 -7.942 -3.571 4.960 1.00 5.36 N +ATOM 976 CA LEU A 122 -6.554 -3.544 4.512 1.00 5.36 C +ATOM 977 C LEU A 122 -6.385 -4.331 3.217 1.00 5.36 C +ATOM 978 CB LEU A 122 -5.632 -4.115 5.593 1.00 5.36 C +ATOM 979 O LEU A 122 -5.705 -3.876 2.294 1.00 5.36 O +ATOM 980 CG LEU A 122 -5.295 -3.183 6.758 1.00 5.36 C +ATOM 981 CD1 LEU A 122 -4.667 -3.971 7.903 1.00 5.36 C +ATOM 982 CD2 LEU A 122 -4.365 -2.066 6.298 1.00 5.36 C +ATOM 983 N VAL A 123 -6.991 -5.567 3.232 1.00 5.36 N +ATOM 984 CA VAL A 123 -6.926 -6.409 2.042 1.00 5.36 C +ATOM 985 C VAL A 123 -7.518 -5.664 0.848 1.00 5.36 C +ATOM 986 CB VAL A 123 -7.667 -7.749 2.255 1.00 5.36 C +ATOM 987 O VAL A 123 -6.921 -5.633 -0.230 1.00 5.36 O +ATOM 988 CG1 VAL A 123 -7.796 -8.509 0.936 1.00 5.36 C +ATOM 989 CG2 VAL A 123 -6.942 -8.599 3.296 1.00 5.36 C +ATOM 990 N TYR A 124 -8.671 -5.070 1.043 1.00 5.36 N +ATOM 991 CA TYR A 124 -9.359 -4.338 -0.015 1.00 5.36 C +ATOM 992 C TYR A 124 -8.521 -3.160 -0.496 1.00 5.36 C +ATOM 993 CB TYR A 124 -10.724 -3.844 0.473 1.00 5.36 C +ATOM 994 O TYR A 124 -8.387 -2.937 -1.702 1.00 5.36 O +ATOM 995 CG TYR A 124 -11.884 -4.667 -0.033 1.00 5.36 C +ATOM 996 CD1 TYR A 124 -12.554 -5.552 0.808 1.00 5.36 C +ATOM 997 CD2 TYR A 124 -12.312 -4.561 -1.352 1.00 5.36 C +ATOM 998 CE1 TYR A 124 -13.622 -6.314 0.346 1.00 5.36 C +ATOM 999 CE2 TYR A 124 -13.379 -5.318 -1.825 1.00 5.36 C +ATOM 1000 OH TYR A 124 -15.084 -6.942 -1.432 1.00 5.36 O +ATOM 1001 CZ TYR A 124 -14.027 -6.190 -0.969 1.00 5.36 C +ATOM 1002 N THR A 125 -8.064 -2.317 0.476 1.00 5.36 N +ATOM 1003 CA THR A 125 -7.230 -1.175 0.117 1.00 5.36 C +ATOM 1004 C THR A 125 -6.008 -1.626 -0.679 1.00 5.36 C +ATOM 1005 CB THR A 125 -6.774 -0.402 1.368 1.00 5.36 C +ATOM 1006 O THR A 125 -5.643 -0.999 -1.675 1.00 5.36 O +ATOM 1007 CG2 THR A 125 -7.392 0.992 1.408 1.00 5.36 C +ATOM 1008 OG1 THR A 125 -7.173 -1.123 2.540 1.00 5.36 O +ATOM 1009 N ASN A 126 -5.437 -2.705 -0.271 1.00 5.36 N +ATOM 1010 CA ASN A 126 -4.265 -3.214 -0.977 1.00 5.36 C +ATOM 1011 C ASN A 126 -4.614 -3.656 -2.395 1.00 5.36 C +ATOM 1012 CB ASN A 126 -3.631 -4.370 -0.201 1.00 5.36 C +ATOM 1013 O ASN A 126 -3.866 -3.384 -3.336 1.00 5.36 O +ATOM 1014 CG ASN A 126 -2.693 -3.896 0.891 1.00 5.36 C +ATOM 1015 ND2 ASN A 126 -2.429 -4.760 1.864 1.00 5.36 N +ATOM 1016 OD1 ASN A 126 -2.209 -2.761 0.861 1.00 5.36 O +ATOM 1017 N GLN A 127 -5.691 -4.483 -2.497 1.00 5.36 N +ATOM 1018 CA GLN A 127 -6.138 -4.897 -3.823 1.00 5.36 C +ATOM 1019 C GLN A 127 -6.385 -3.689 -4.722 1.00 5.36 C +ATOM 1020 CB GLN A 127 -7.407 -5.744 -3.721 1.00 5.36 C +ATOM 1021 O GLN A 127 -5.973 -3.679 -5.884 1.00 5.36 O +ATOM 1022 CG GLN A 127 -7.729 -6.525 -4.989 1.00 5.36 C +ATOM 1023 CD GLN A 127 -8.927 -7.440 -4.826 1.00 5.36 C +ATOM 1024 NE2 GLN A 127 -9.350 -8.064 -5.921 1.00 5.36 N +ATOM 1025 OE1 GLN A 127 -9.468 -7.587 -3.726 1.00 5.36 O +ATOM 1026 N TRP A 128 -7.149 -2.688 -4.151 1.00 5.36 N +ATOM 1027 CA TRP A 128 -7.418 -1.471 -4.911 1.00 5.36 C +ATOM 1028 C TRP A 128 -6.119 -0.818 -5.371 1.00 5.36 C +ATOM 1029 CB TRP A 128 -8.232 -0.482 -4.072 1.00 5.36 C +ATOM 1030 O TRP A 128 -5.992 -0.427 -6.534 1.00 5.36 O +ATOM 1031 CG TRP A 128 -8.637 0.757 -4.813 1.00 5.36 C +ATOM 1032 CD1 TRP A 128 -9.759 0.931 -5.576 1.00 5.36 C +ATOM 1033 CD2 TRP A 128 -7.919 1.993 -4.866 1.00 5.36 C +ATOM 1034 CE2 TRP A 128 -8.665 2.875 -5.680 1.00 5.36 C +ATOM 1035 CE3 TRP A 128 -6.717 2.442 -4.304 1.00 5.36 C +ATOM 1036 NE1 TRP A 128 -9.781 2.203 -6.099 1.00 5.36 N +ATOM 1037 CH2 TRP A 128 -7.067 4.595 -5.381 1.00 5.36 C +ATOM 1038 CZ2 TRP A 128 -8.247 4.181 -5.944 1.00 5.36 C +ATOM 1039 CZ3 TRP A 128 -6.302 3.742 -4.568 1.00 5.36 C +ATOM 1040 N VAL A 129 -5.185 -0.613 -4.368 1.00 4.42 N +ATOM 1041 CA VAL A 129 -3.899 -0.000 -4.687 1.00 4.42 C +ATOM 1042 C VAL A 129 -3.213 -0.789 -5.800 1.00 4.42 C +ATOM 1043 CB VAL A 129 -2.983 0.077 -3.446 1.00 4.42 C +ATOM 1044 O VAL A 129 -2.691 -0.205 -6.753 1.00 4.42 O +ATOM 1045 CG1 VAL A 129 -1.562 0.471 -3.846 1.00 4.42 C +ATOM 1046 CG2 VAL A 129 -3.548 1.065 -2.427 1.00 4.42 C +ATOM 1047 N ASN A 130 -3.323 -2.084 -5.765 1.00 5.36 N +ATOM 1048 CA ASN A 130 -2.699 -2.948 -6.762 1.00 5.36 C +ATOM 1049 C ASN A 130 -3.320 -2.751 -8.142 1.00 5.36 C +ATOM 1050 CB ASN A 130 -2.799 -4.415 -6.339 1.00 5.36 C +ATOM 1051 O ASN A 130 -2.613 -2.751 -9.151 1.00 5.36 O +ATOM 1052 CG ASN A 130 -1.767 -4.793 -5.294 1.00 5.36 C +ATOM 1053 ND2 ASN A 130 -2.027 -5.874 -4.568 1.00 5.36 N +ATOM 1054 OD1 ASN A 130 -0.746 -4.118 -5.140 1.00 5.36 O +ATOM 1055 N GLU A 131 -4.600 -2.603 -8.153 1.00 5.36 N +ATOM 1056 CA GLU A 131 -5.337 -2.535 -9.412 1.00 5.36 C +ATOM 1057 C GLU A 131 -5.256 -1.140 -10.024 1.00 5.36 C +ATOM 1058 CB GLU A 131 -6.800 -2.932 -9.200 1.00 5.36 C +ATOM 1059 O GLU A 131 -5.324 -0.988 -11.246 1.00 5.36 O +ATOM 1060 CG GLU A 131 -7.000 -4.413 -8.911 1.00 5.36 C +ATOM 1061 CD GLU A 131 -8.445 -4.776 -8.611 1.00 5.36 C +ATOM 1062 OE1 GLU A 131 -8.733 -5.970 -8.365 1.00 5.36 O +ATOM 1063 OE2 GLU A 131 -9.297 -3.860 -8.623 1.00 5.36 O +ATOM 1064 N ASN A 132 -5.147 -0.162 -9.186 1.00 5.36 N +ATOM 1065 CA ASN A 132 -5.357 1.190 -9.693 1.00 5.36 C +ATOM 1066 C ASN A 132 -4.037 1.936 -9.863 1.00 5.36 C +ATOM 1067 CB ASN A 132 -6.292 1.971 -8.767 1.00 5.36 C +ATOM 1068 O ASN A 132 -3.931 2.838 -10.696 1.00 5.36 O +ATOM 1069 CG ASN A 132 -7.729 1.494 -8.851 1.00 5.36 C +ATOM 1070 ND2 ASN A 132 -8.165 0.745 -7.845 1.00 5.36 N +ATOM 1071 OD1 ASN A 132 -8.441 1.795 -9.813 1.00 5.36 O +ATOM 1072 N ILE A 133 -3.015 1.608 -8.992 1.00 5.36 N +ATOM 1073 CA ILE A 133 -1.781 2.384 -9.062 1.00 5.36 C +ATOM 1074 C ILE A 133 -0.907 1.861 -10.200 1.00 5.36 C +ATOM 1075 CB ILE A 133 -1.007 2.336 -7.726 1.00 5.36 C +ATOM 1076 O ILE A 133 -0.112 2.609 -10.773 1.00 5.36 O +ATOM 1077 CG1 ILE A 133 -1.777 3.089 -6.635 1.00 5.36 C +ATOM 1078 CG2 ILE A 133 0.402 2.911 -7.897 1.00 5.36 C +ATOM 1079 CD1 ILE A 133 -1.113 3.045 -5.266 1.00 5.36 C +ATOM 1080 N THR A 134 -1.214 0.937 -10.975 1.00 6.08 N +ATOM 1081 CA THR A 134 -0.412 0.479 -12.104 1.00 6.08 C +ATOM 1082 C THR A 134 -0.466 1.485 -13.250 1.00 6.08 C +ATOM 1083 CB THR A 134 -0.887 -0.898 -12.605 1.00 6.08 C +ATOM 1084 O THR A 134 0.513 1.656 -13.980 1.00 6.08 O +ATOM 1085 CG2 THR A 134 0.024 -2.012 -12.097 1.00 6.08 C +ATOM 1086 OG1 THR A 134 -2.220 -1.137 -12.137 1.00 6.08 O +ATOM 1087 N LEU A 135 -1.656 2.194 -13.502 1.00 6.08 N +ATOM 1088 CA LEU A 135 -2.187 2.386 -14.847 1.00 6.08 C +ATOM 1089 C LEU A 135 -2.051 3.841 -15.283 1.00 6.08 C +ATOM 1090 CB LEU A 135 -3.656 1.958 -14.908 1.00 6.08 C +ATOM 1091 O LEU A 135 -2.144 4.147 -16.474 1.00 6.08 O +ATOM 1092 CG LEU A 135 -3.923 0.452 -14.925 1.00 6.08 C +ATOM 1093 CD1 LEU A 135 -5.388 0.171 -14.609 1.00 6.08 C +ATOM 1094 CD2 LEU A 135 -3.538 -0.144 -16.274 1.00 6.08 C +ATOM 1095 N ALA A 136 -1.314 4.761 -14.697 1.00 6.08 N +ATOM 1096 CA ALA A 136 -1.322 5.912 -15.597 1.00 6.08 C +ATOM 1097 C ALA A 136 0.036 6.607 -15.610 1.00 6.08 C +ATOM 1098 CB ALA A 136 -2.417 6.896 -15.193 1.00 6.08 C +ATOM 1099 O ALA A 136 0.626 6.851 -14.555 1.00 6.08 O +ATOM 1100 N ASN A 137 1.001 6.147 -16.376 1.00 6.08 N +ATOM 1101 CA ASN A 137 1.962 7.100 -16.923 1.00 6.08 C +ATOM 1102 C ASN A 137 2.561 7.982 -15.832 1.00 6.08 C +ATOM 1103 CB ASN A 137 1.305 7.963 -18.003 1.00 6.08 C +ATOM 1104 O ASN A 137 2.685 9.196 -16.007 1.00 6.08 O +ATOM 1105 CG ASN A 137 1.244 7.267 -19.349 1.00 6.08 C +ATOM 1106 ND2 ASN A 137 0.354 7.734 -20.218 1.00 6.08 N +ATOM 1107 OD1 ASN A 137 1.989 6.318 -19.606 1.00 6.08 O +ATOM 1108 N GLY A 138 2.939 7.445 -14.762 1.00 6.08 N +ATOM 1109 CA GLY A 138 3.642 8.286 -13.808 1.00 6.08 C +ATOM 1110 C GLY A 138 2.721 9.212 -13.036 1.00 6.08 C +ATOM 1111 O GLY A 138 3.179 10.003 -12.209 1.00 6.08 O +ATOM 1112 N TYR A 139 1.463 9.234 -13.302 1.00 6.08 N +ATOM 1113 CA TYR A 139 0.469 10.113 -12.696 1.00 6.08 C +ATOM 1114 C TYR A 139 -0.736 9.318 -12.207 1.00 6.08 C +ATOM 1115 CB TYR A 139 0.019 11.184 -13.694 1.00 6.08 C +ATOM 1116 O TYR A 139 -1.121 8.321 -12.822 1.00 6.08 O +ATOM 1117 CG TYR A 139 0.919 12.395 -13.732 1.00 6.08 C +ATOM 1118 CD1 TYR A 139 1.986 12.467 -14.625 1.00 6.08 C +ATOM 1119 CD2 TYR A 139 0.705 13.469 -12.874 1.00 6.08 C +ATOM 1120 CE1 TYR A 139 2.819 13.580 -14.662 1.00 6.08 C +ATOM 1121 CE2 TYR A 139 1.532 14.587 -12.903 1.00 6.08 C +ATOM 1122 OH TYR A 139 3.406 15.738 -13.831 1.00 6.08 O +ATOM 1123 CZ TYR A 139 2.584 14.634 -13.799 1.00 6.08 C +ATOM 1124 N ILE A 140 -0.939 9.058 -10.837 1.00 6.08 N +ATOM 1125 CA ILE A 140 -2.155 8.654 -10.138 1.00 6.08 C +ATOM 1126 C ILE A 140 -3.276 9.645 -10.440 1.00 6.08 C +ATOM 1127 CB ILE A 140 -1.924 8.553 -8.614 1.00 6.08 C +ATOM 1128 O ILE A 140 -3.182 10.824 -10.091 1.00 6.08 O +ATOM 1129 CG1 ILE A 140 -0.789 7.569 -8.310 1.00 6.08 C +ATOM 1130 CG2 ILE A 140 -3.213 8.140 -7.899 1.00 6.08 C +ATOM 1131 CD1 ILE A 140 -0.415 7.492 -6.836 1.00 6.08 C +ATOM 1132 N SER A 141 -3.684 9.839 -11.715 1.00 6.08 N +ATOM 1133 CA SER A 141 -4.883 10.669 -11.786 1.00 6.08 C +ATOM 1134 C SER A 141 -6.105 9.922 -11.262 1.00 6.08 C +ATOM 1135 CB SER A 141 -5.133 11.127 -13.224 1.00 6.08 C +ATOM 1136 O SER A 141 -6.378 8.796 -11.682 1.00 6.08 O +ATOM 1137 OG SER A 141 -6.496 10.963 -13.574 1.00 6.08 O +ATOM 1138 N ALA A 142 -6.198 9.687 -9.878 1.00 6.08 N +ATOM 1139 CA ALA A 142 -7.356 9.155 -9.164 1.00 6.08 C +ATOM 1140 C ALA A 142 -8.656 9.539 -9.865 1.00 6.08 C +ATOM 1141 CB ALA A 142 -7.366 9.651 -7.721 1.00 6.08 C +ATOM 1142 O ALA A 142 -8.874 10.710 -10.184 1.00 6.08 O +ATOM 1143 N ASP A 143 -9.016 8.898 -10.877 1.00 6.08 N +ATOM 1144 CA ASP A 143 -10.425 8.964 -11.253 1.00 6.08 C +ATOM 1145 C ASP A 143 -11.295 9.345 -10.057 1.00 6.08 C +ATOM 1146 CB ASP A 143 -10.889 7.628 -11.836 1.00 6.08 C +ATOM 1147 O ASP A 143 -11.158 8.769 -8.975 1.00 6.08 O +ATOM 1148 CG ASP A 143 -11.385 7.746 -13.267 1.00 6.08 C +ATOM 1149 OD1 ASP A 143 -11.573 6.706 -13.934 1.00 6.08 O +ATOM 1150 OD2 ASP A 143 -11.586 8.889 -13.731 1.00 6.08 O +ATOM 1151 N SER A 144 -11.432 10.610 -9.724 1.00 6.08 N +ATOM 1152 CA SER A 144 -12.633 11.251 -9.197 1.00 6.08 C +ATOM 1153 C SER A 144 -13.803 10.274 -9.147 1.00 6.08 C +ATOM 1154 CB SER A 144 -13.009 12.466 -10.046 1.00 6.08 C +ATOM 1155 O SER A 144 -14.946 10.678 -8.919 1.00 6.08 O +ATOM 1156 OG SER A 144 -12.987 12.143 -11.426 1.00 6.08 O +ATOM 1157 N ARG A 145 -13.625 8.971 -9.055 1.00 6.08 N +ATOM 1158 CA ARG A 145 -14.877 8.231 -8.942 1.00 6.08 C +ATOM 1159 C ARG A 145 -15.517 8.442 -7.574 1.00 6.08 C +ATOM 1160 CB ARG A 145 -14.644 6.738 -9.187 1.00 6.08 C +ATOM 1161 O ARG A 145 -14.826 8.444 -6.554 1.00 6.08 O +ATOM 1162 CG ARG A 145 -14.402 6.383 -10.645 1.00 6.08 C +ATOM 1163 CD ARG A 145 -14.336 4.877 -10.856 1.00 6.08 C +ATOM 1164 NE ARG A 145 -13.186 4.497 -11.671 1.00 6.08 N +ATOM 1165 NH1 ARG A 145 -13.735 2.255 -11.769 1.00 6.08 N +ATOM 1166 NH2 ARG A 145 -11.852 3.025 -12.824 1.00 6.08 N +ATOM 1167 CZ ARG A 145 -12.927 3.260 -12.086 1.00 6.08 C +ATOM 1168 N THR A 146 -16.379 9.419 -7.415 1.00 6.08 N +ATOM 1169 CA THR A 146 -17.507 9.485 -6.494 1.00 6.08 C +ATOM 1170 C THR A 146 -18.280 8.169 -6.491 1.00 6.08 C +ATOM 1171 CB THR A 146 -18.458 10.641 -6.856 1.00 6.08 C +ATOM 1172 O THR A 146 -18.534 7.590 -7.549 1.00 6.08 O +ATOM 1173 CG2 THR A 146 -18.028 11.939 -6.180 1.00 6.08 C +ATOM 1174 OG1 THR A 146 -18.451 10.830 -8.276 1.00 6.08 O +ATOM 1175 N VAL A 147 -17.785 7.142 -5.708 1.00 6.08 N +ATOM 1176 CA VAL A 147 -18.621 5.978 -5.435 1.00 6.08 C +ATOM 1177 C VAL A 147 -20.048 6.427 -5.126 1.00 6.08 C +ATOM 1178 CB VAL A 147 -18.061 5.139 -4.264 1.00 6.08 C +ATOM 1179 O VAL A 147 -20.261 7.305 -4.287 1.00 6.08 O +ATOM 1180 CG1 VAL A 147 -18.638 3.725 -4.289 1.00 6.08 C +ATOM 1181 CG2 VAL A 147 -16.535 5.098 -4.321 1.00 6.08 C +ATOM 1182 N ASP A 148 -20.960 6.728 -6.190 1.00 6.08 N +ATOM 1183 CA ASP A 148 -22.394 6.829 -5.938 1.00 6.08 C +ATOM 1184 C ASP A 148 -22.901 5.619 -5.157 1.00 6.08 C +ATOM 1185 CB ASP A 148 -23.162 6.965 -7.254 1.00 6.08 C +ATOM 1186 O ASP A 148 -22.505 4.485 -5.432 1.00 6.08 O +ATOM 1187 CG ASP A 148 -22.902 8.285 -7.959 1.00 6.08 C +ATOM 1188 OD1 ASP A 148 -23.140 8.380 -9.182 1.00 6.08 O +ATOM 1189 OD2 ASP A 148 -22.451 9.237 -7.286 1.00 6.08 O +TER 1190 ASP A 148 +ENDMDL +END diff --git a/alphafold/relax/testdata/with_violations_casp14.pdb b/alphafold/relax/testdata/with_violations_casp14.pdb new file mode 100644 index 0000000000000000000000000000000000000000..1a1aeb1f3437c7e3eabff6f0b1e183f0fee05fc6 --- /dev/null +++ b/alphafold/relax/testdata/with_violations_casp14.pdb @@ -0,0 +1,1193 @@ +MODEL 0 +ATOM 1 N SER A 1 27.311 -3.395 37.375 1.00 8.64 N +ATOM 2 CA SER A 1 26.072 -4.109 37.084 1.00 8.64 C +ATOM 3 C SER A 1 26.047 -4.608 35.643 1.00 8.64 C +ATOM 4 CB SER A 1 24.862 -3.211 37.342 1.00 8.64 C +ATOM 5 O SER A 1 26.782 -4.101 34.792 1.00 8.64 O +ATOM 6 OG SER A 1 24.740 -2.228 36.329 1.00 8.64 O +ATOM 7 N PHE A 2 25.619 -5.987 35.357 1.00 8.64 N +ATOM 8 CA PHE A 2 25.448 -6.479 33.995 1.00 8.64 C +ATOM 9 C PHE A 2 25.049 -5.347 33.056 1.00 8.64 C +ATOM 10 CB PHE A 2 24.395 -7.591 33.953 1.00 8.64 C +ATOM 11 O PHE A 2 25.590 -5.226 31.955 1.00 8.64 O +ATOM 12 CG PHE A 2 24.140 -8.134 32.573 1.00 8.64 C +ATOM 13 CD1 PHE A 2 25.003 -9.063 32.006 1.00 8.64 C +ATOM 14 CD2 PHE A 2 23.036 -7.714 31.842 1.00 8.64 C +ATOM 15 CE1 PHE A 2 24.770 -9.567 30.728 1.00 8.64 C +ATOM 16 CE2 PHE A 2 22.796 -8.214 30.565 1.00 8.64 C +ATOM 17 CZ PHE A 2 23.665 -9.139 30.010 1.00 8.64 C +ATOM 18 N GLU A 3 24.279 -4.453 33.583 1.00 8.64 N +ATOM 19 CA GLU A 3 23.756 -3.316 32.831 1.00 8.64 C +ATOM 20 C GLU A 3 24.858 -2.308 32.517 1.00 8.64 C +ATOM 21 CB GLU A 3 22.624 -2.635 33.604 1.00 8.64 C +ATOM 22 O GLU A 3 24.963 -1.828 31.387 1.00 8.64 O +ATOM 23 CG GLU A 3 21.251 -3.239 33.345 1.00 8.64 C +ATOM 24 CD GLU A 3 20.291 -3.067 34.511 1.00 8.64 C +ATOM 25 OE1 GLU A 3 19.129 -3.525 34.413 1.00 8.64 O +ATOM 26 OE2 GLU A 3 20.702 -2.469 35.530 1.00 8.64 O +ATOM 27 N GLU A 4 25.795 -2.118 33.499 1.00 8.64 N +ATOM 28 CA GLU A 4 26.873 -1.150 33.321 1.00 8.64 C +ATOM 29 C GLU A 4 27.923 -1.667 32.341 1.00 8.64 C +ATOM 30 CB GLU A 4 27.526 -0.820 34.666 1.00 8.64 C +ATOM 31 O GLU A 4 28.401 -0.920 31.485 1.00 8.64 O +ATOM 32 CG GLU A 4 26.709 0.130 35.529 1.00 8.64 C +ATOM 33 CD GLU A 4 27.351 0.416 36.878 1.00 8.64 C +ATOM 34 OE1 GLU A 4 26.801 1.234 37.650 1.00 8.64 O +ATOM 35 OE2 GLU A 4 28.412 -0.182 37.164 1.00 8.64 O +ATOM 36 N GLN A 5 28.078 -2.983 32.335 1.00 8.64 N +ATOM 37 CA GLN A 5 29.050 -3.614 31.449 1.00 8.64 C +ATOM 38 C GLN A 5 28.520 -3.696 30.020 1.00 8.64 C +ATOM 39 CB GLN A 5 29.410 -5.012 31.956 1.00 8.64 C +ATOM 40 O GLN A 5 29.268 -3.487 29.063 1.00 8.64 O +ATOM 41 CG GLN A 5 30.587 -5.031 32.922 1.00 8.64 C +ATOM 42 CD GLN A 5 30.906 -6.425 33.430 1.00 8.64 C +ATOM 43 NE2 GLN A 5 31.803 -6.509 34.407 1.00 8.64 N +ATOM 44 OE1 GLN A 5 30.350 -7.418 32.950 1.00 8.64 O +ATOM 45 N PHE A 6 27.127 -3.824 29.849 1.00 8.64 N +ATOM 46 CA PHE A 6 26.442 -3.868 28.562 1.00 8.64 C +ATOM 47 C PHE A 6 26.501 -2.512 27.870 1.00 8.64 C +ATOM 48 CB PHE A 6 24.983 -4.302 28.744 1.00 8.64 C +ATOM 49 O PHE A 6 26.819 -2.429 26.682 1.00 8.64 O +ATOM 50 CG PHE A 6 24.232 -4.461 27.450 1.00 8.64 C +ATOM 51 CD1 PHE A 6 24.326 -5.636 26.715 1.00 8.64 C +ATOM 52 CD2 PHE A 6 23.431 -3.434 26.968 1.00 8.64 C +ATOM 53 CE1 PHE A 6 23.631 -5.786 25.517 1.00 8.64 C +ATOM 54 CE2 PHE A 6 22.734 -3.576 25.771 1.00 8.64 C +ATOM 55 CZ PHE A 6 22.836 -4.753 25.047 1.00 8.64 C +ATOM 56 N ILE A 7 26.367 -1.421 28.620 1.00 8.64 N +ATOM 57 CA ILE A 7 26.395 -0.058 28.103 1.00 8.64 C +ATOM 58 C ILE A 7 27.816 0.304 27.677 1.00 8.64 C +ATOM 59 CB ILE A 7 25.874 0.954 29.148 1.00 8.64 C +ATOM 60 O ILE A 7 28.020 0.896 26.614 1.00 8.64 O +ATOM 61 CG1 ILE A 7 24.383 0.725 29.417 1.00 8.64 C +ATOM 62 CG2 ILE A 7 26.133 2.391 28.685 1.00 8.64 C +ATOM 63 CD1 ILE A 7 23.831 1.540 30.579 1.00 8.64 C +ATOM 64 N LYS A 8 28.765 -0.137 28.420 1.00 8.64 N +ATOM 65 CA LYS A 8 30.171 0.158 28.160 1.00 8.64 C +ATOM 66 C LYS A 8 30.668 -0.584 26.922 1.00 8.64 C +ATOM 67 CB LYS A 8 31.030 -0.210 29.371 1.00 8.64 C +ATOM 68 O LYS A 8 31.368 -0.008 26.086 1.00 8.64 O +ATOM 69 CG LYS A 8 32.396 0.462 29.387 1.00 8.64 C +ATOM 70 CD LYS A 8 33.170 0.123 30.655 1.00 8.64 C +ATOM 71 CE LYS A 8 34.584 0.686 30.615 1.00 8.64 C +ATOM 72 NZ LYS A 8 35.350 0.348 31.852 1.00 8.64 N +ATOM 73 N ASN A 9 30.138 -1.772 26.738 1.00 8.64 N +ATOM 74 CA ASN A 9 30.622 -2.602 25.640 1.00 8.64 C +ATOM 75 C ASN A 9 29.908 -2.274 24.332 1.00 8.64 C +ATOM 76 CB ASN A 9 30.461 -4.086 25.976 1.00 8.64 C +ATOM 77 O ASN A 9 30.396 -2.610 23.252 1.00 8.64 O +ATOM 78 CG ASN A 9 31.429 -4.551 27.046 1.00 8.64 C +ATOM 79 ND2 ASN A 9 31.123 -5.682 27.670 1.00 8.64 N +ATOM 80 OD1 ASN A 9 32.442 -3.898 27.310 1.00 8.64 O +ATOM 81 N ASN A 10 28.860 -1.389 24.447 1.00 8.64 N +ATOM 82 CA ASN A 10 28.104 -1.128 23.227 1.00 8.64 C +ATOM 83 C ASN A 10 28.029 0.366 22.923 1.00 8.64 C +ATOM 84 CB ASN A 10 26.697 -1.720 23.330 1.00 8.64 C +ATOM 85 O ASN A 10 27.356 0.778 21.977 1.00 8.64 O +ATOM 86 CG ASN A 10 26.693 -3.234 23.250 1.00 8.64 C +ATOM 87 ND2 ASN A 10 26.544 -3.888 24.396 1.00 8.64 N +ATOM 88 OD1 ASN A 10 26.823 -3.811 22.167 1.00 8.64 O +ATOM 89 N SER A 11 28.833 1.149 23.636 1.00 8.64 N +ATOM 90 CA SER A 11 28.835 2.602 23.500 1.00 8.64 C +ATOM 91 C SER A 11 29.617 3.040 22.266 1.00 8.64 C +ATOM 92 CB SER A 11 29.427 3.257 24.748 1.00 8.64 C +ATOM 93 O SER A 11 29.395 4.132 21.740 1.00 8.64 O +ATOM 94 OG SER A 11 30.701 2.712 25.046 1.00 8.64 O +ATOM 95 N ASP A 12 30.212 2.067 21.630 1.00 8.64 N +ATOM 96 CA ASP A 12 30.855 2.541 20.408 1.00 8.64 C +ATOM 97 C ASP A 12 29.975 2.284 19.188 1.00 8.64 C +ATOM 98 CB ASP A 12 32.218 1.871 20.224 1.00 8.64 C +ATOM 99 O ASP A 12 30.218 2.836 18.113 1.00 8.64 O +ATOM 100 CG ASP A 12 33.270 2.391 21.189 1.00 8.64 C +ATOM 101 OD1 ASP A 12 34.250 1.668 21.471 1.00 8.64 O +ATOM 102 OD2 ASP A 12 33.116 3.533 21.673 1.00 8.64 O +ATOM 103 N SER A 13 28.711 1.753 19.485 1.00 8.64 N +ATOM 104 CA SER A 13 27.850 1.458 18.344 1.00 8.64 C +ATOM 105 C SER A 13 26.738 2.492 18.209 1.00 8.64 C +ATOM 106 CB SER A 13 27.245 0.060 18.477 1.00 8.64 C +ATOM 107 O SER A 13 26.268 3.040 19.208 1.00 8.64 O +ATOM 108 OG SER A 13 26.522 -0.062 19.690 1.00 8.64 O +ATOM 109 N ASN A 14 26.876 3.556 17.578 1.00 8.64 N +ATOM 110 CA ASN A 14 25.876 4.507 17.103 1.00 8.64 C +ATOM 111 C ASN A 14 24.502 3.857 16.973 1.00 8.64 C +ATOM 112 CB ASN A 14 26.306 5.114 15.766 1.00 8.64 C +ATOM 113 O ASN A 14 23.638 4.361 16.252 1.00 8.64 O +ATOM 114 CG ASN A 14 27.367 6.185 15.925 1.00 8.64 C +ATOM 115 ND2 ASN A 14 28.105 6.452 14.854 1.00 8.64 N +ATOM 116 OD1 ASN A 14 27.523 6.767 17.002 1.00 8.64 O +ATOM 117 N ILE A 15 24.147 2.876 17.739 1.00 8.64 N +ATOM 118 CA ILE A 15 22.782 2.392 17.562 1.00 8.64 C +ATOM 119 C ILE A 15 21.867 3.040 18.600 1.00 8.64 C +ATOM 120 CB ILE A 15 22.709 0.853 17.670 1.00 8.64 C +ATOM 121 O ILE A 15 22.173 3.037 19.794 1.00 8.64 O +ATOM 122 CG1 ILE A 15 23.583 0.200 16.594 1.00 8.64 C +ATOM 123 CG2 ILE A 15 21.259 0.372 17.564 1.00 8.64 C +ATOM 124 CD1 ILE A 15 23.694 -1.313 16.720 1.00 8.64 C +ATOM 125 N LEU A 16 21.054 3.988 18.304 1.00 8.64 N +ATOM 126 CA LEU A 16 19.978 4.667 19.017 1.00 8.64 C +ATOM 127 C LEU A 16 18.932 3.668 19.501 1.00 8.64 C +ATOM 128 CB LEU A 16 19.320 5.718 18.120 1.00 8.64 C +ATOM 129 O LEU A 16 18.483 2.813 18.734 1.00 8.64 O +ATOM 130 CG LEU A 16 20.096 7.021 17.921 1.00 8.64 C +ATOM 131 CD1 LEU A 16 19.696 7.681 16.605 1.00 8.64 C +ATOM 132 CD2 LEU A 16 19.860 7.968 19.093 1.00 8.64 C +ATOM 133 N ALA A 17 18.869 3.238 20.703 1.00 8.64 N +ATOM 134 CA ALA A 17 17.774 2.555 21.387 1.00 8.64 C +ATOM 135 C ALA A 17 16.496 3.388 21.343 1.00 8.64 C +ATOM 136 CB ALA A 17 18.158 2.251 22.833 1.00 8.64 C +ATOM 137 O ALA A 17 16.550 4.620 21.358 1.00 8.64 O +ATOM 138 N PRO A 18 15.357 2.800 20.785 1.00 8.64 N +ATOM 139 CA PRO A 18 14.061 3.472 20.894 1.00 8.64 C +ATOM 140 C PRO A 18 13.755 3.936 22.317 1.00 8.64 C +ATOM 141 CB PRO A 18 13.067 2.397 20.446 1.00 8.64 C +ATOM 142 O PRO A 18 14.149 3.277 23.283 1.00 8.64 O +ATOM 143 CG PRO A 18 13.852 1.125 20.452 1.00 8.64 C +ATOM 144 CD PRO A 18 15.296 1.456 20.699 1.00 8.64 C +ATOM 145 N LYS A 19 13.655 5.179 22.533 1.00 8.64 N +ATOM 146 CA LYS A 19 13.091 5.770 23.743 1.00 8.64 C +ATOM 147 C LYS A 19 11.590 5.512 23.832 1.00 8.64 C +ATOM 148 CB LYS A 19 13.369 7.273 23.786 1.00 8.64 C +ATOM 149 O LYS A 19 10.851 5.783 22.884 1.00 8.64 O +ATOM 150 CG LYS A 19 14.728 7.635 24.367 1.00 8.64 C +ATOM 151 CD LYS A 19 14.887 9.143 24.519 1.00 8.64 C +ATOM 152 CE LYS A 19 16.267 9.509 25.048 1.00 8.64 C +ATOM 153 NZ LYS A 19 16.425 10.986 25.206 1.00 8.64 N +ATOM 154 N VAL A 20 11.044 4.381 24.383 1.00 8.64 N +ATOM 155 CA VAL A 20 9.629 4.231 24.706 1.00 8.64 C +ATOM 156 C VAL A 20 9.274 5.116 25.898 1.00 8.64 C +ATOM 157 CB VAL A 20 9.268 2.759 25.009 1.00 8.64 C +ATOM 158 O VAL A 20 9.977 5.115 26.911 1.00 8.64 O +ATOM 159 CG1 VAL A 20 7.753 2.575 25.067 1.00 8.64 C +ATOM 160 CG2 VAL A 20 9.882 1.833 23.960 1.00 8.64 C +ATOM 161 N SER A 21 8.650 6.317 25.693 1.00 8.64 N +ATOM 162 CA SER A 21 8.096 7.229 26.687 1.00 8.64 C +ATOM 163 C SER A 21 7.175 6.497 27.657 1.00 8.64 C +ATOM 164 CB SER A 21 7.332 8.365 26.005 1.00 8.64 C +ATOM 165 O SER A 21 6.372 5.657 27.245 1.00 8.64 O +ATOM 166 OG SER A 21 5.963 8.343 26.373 1.00 8.64 O +ATOM 167 N GLN A 22 7.597 6.311 28.856 1.00 8.64 N +ATOM 168 CA GLN A 22 6.871 5.820 30.022 1.00 8.64 C +ATOM 169 C GLN A 22 5.495 6.472 30.128 1.00 8.64 C +ATOM 170 CB GLN A 22 7.672 6.073 31.300 1.00 8.64 C +ATOM 171 O GLN A 22 4.544 5.852 30.609 1.00 8.64 O +ATOM 172 CG GLN A 22 8.650 4.958 31.644 1.00 8.64 C +ATOM 173 CD GLN A 22 9.489 5.270 32.869 1.00 8.64 C +ATOM 174 NE2 GLN A 22 10.341 4.329 33.260 1.00 8.64 N +ATOM 175 OE1 GLN A 22 9.372 6.349 33.460 1.00 8.64 O +ATOM 176 N SER A 23 5.264 7.531 29.349 1.00 8.64 N +ATOM 177 CA SER A 23 4.000 8.243 29.506 1.00 8.64 C +ATOM 178 C SER A 23 2.897 7.603 28.670 1.00 8.64 C +ATOM 179 CB SER A 23 4.160 9.713 29.115 1.00 8.64 C +ATOM 180 O SER A 23 1.719 7.671 29.029 1.00 8.64 O +ATOM 181 OG SER A 23 4.522 9.834 27.751 1.00 8.64 O +ATOM 182 N VAL A 24 3.264 6.700 27.791 1.00 8.64 N +ATOM 183 CA VAL A 24 2.305 6.038 26.913 1.00 8.64 C +ATOM 184 C VAL A 24 1.784 4.767 27.581 1.00 8.64 C +ATOM 185 CB VAL A 24 2.931 5.700 25.541 1.00 8.64 C +ATOM 186 O VAL A 24 0.599 4.443 27.474 1.00 8.64 O +ATOM 187 CG1 VAL A 24 1.954 4.895 24.686 1.00 8.64 C +ATOM 188 CG2 VAL A 24 3.350 6.979 24.818 1.00 8.64 C +ATOM 189 N ILE A 25 2.491 4.247 28.597 1.00 8.64 N +ATOM 190 CA ILE A 25 2.093 2.989 29.220 1.00 8.64 C +ATOM 191 C ILE A 25 1.071 3.261 30.322 1.00 8.64 C +ATOM 192 CB ILE A 25 3.311 2.231 29.793 1.00 8.64 C +ATOM 193 O ILE A 25 0.106 2.509 30.482 1.00 8.64 O +ATOM 194 CG1 ILE A 25 4.253 1.802 28.662 1.00 8.64 C +ATOM 195 CG2 ILE A 25 2.856 1.021 30.615 1.00 8.64 C +ATOM 196 CD1 ILE A 25 5.548 1.162 29.144 1.00 8.64 C +ATOM 197 N LYS A 26 0.966 4.583 30.669 1.00 8.64 N +ATOM 198 CA LYS A 26 0.057 4.828 31.785 1.00 8.64 C +ATOM 199 C LYS A 26 -1.334 5.210 31.288 1.00 8.64 C +ATOM 200 CB LYS A 26 0.608 5.928 32.694 1.00 8.64 C +ATOM 201 O LYS A 26 -2.335 4.927 31.951 1.00 8.64 O +ATOM 202 CG LYS A 26 1.656 5.444 33.686 1.00 8.64 C +ATOM 203 CD LYS A 26 2.100 6.562 34.621 1.00 8.64 C +ATOM 204 CE LYS A 26 3.222 6.107 35.544 1.00 8.64 C +ATOM 205 NZ LYS A 26 3.671 7.205 36.452 1.00 8.64 N +ATOM 206 N SER A 27 -1.519 5.405 29.984 1.00 8.64 N +ATOM 207 CA SER A 27 -2.818 5.830 29.472 1.00 8.64 C +ATOM 208 C SER A 27 -3.593 4.654 28.886 1.00 8.64 C +ATOM 209 CB SER A 27 -2.647 6.918 28.412 1.00 8.64 C +ATOM 210 O SER A 27 -4.818 4.714 28.757 1.00 8.64 O +ATOM 211 OG SER A 27 -1.783 7.941 28.876 1.00 8.64 O +ATOM 212 N ILE A 28 -3.005 3.525 29.012 1.00 8.64 N +ATOM 213 CA ILE A 28 -3.699 2.421 28.358 1.00 8.64 C +ATOM 214 C ILE A 28 -4.341 1.519 29.410 1.00 8.64 C +ATOM 215 CB ILE A 28 -2.741 1.603 27.463 1.00 8.64 C +ATOM 216 O ILE A 28 -5.121 0.624 29.076 1.00 8.64 O +ATOM 217 CG1 ILE A 28 -2.140 2.495 26.370 1.00 8.64 C +ATOM 218 CG2 ILE A 28 -3.468 0.402 26.851 1.00 8.64 C +ATOM 219 CD1 ILE A 28 -1.059 1.814 25.541 1.00 8.64 C +ATOM 220 N LYS A 29 -4.577 2.107 30.648 1.00 8.64 N +ATOM 221 CA LYS A 29 -5.233 1.333 31.698 1.00 8.64 C +ATOM 222 C LYS A 29 -6.750 1.358 31.533 1.00 8.64 C +ATOM 223 CB LYS A 29 -4.847 1.867 33.078 1.00 8.64 C +ATOM 224 O LYS A 29 -7.358 2.430 31.493 1.00 8.64 O +ATOM 225 CG LYS A 29 -3.666 1.147 33.712 1.00 8.64 C +ATOM 226 CD LYS A 29 -3.402 1.645 35.127 1.00 8.64 C +ATOM 227 CE LYS A 29 -2.190 0.960 35.745 1.00 8.64 C +ATOM 228 NZ LYS A 29 -1.924 1.448 37.131 1.00 8.64 N +ATOM 229 N GLY A 30 -7.229 1.083 30.294 1.00 8.64 N +ATOM 230 CA GLY A 30 -8.601 0.618 30.176 1.00 8.64 C +ATOM 231 C GLY A 30 -8.899 -0.029 28.837 1.00 8.64 C +ATOM 232 O GLY A 30 -9.937 -0.674 28.670 1.00 8.64 O +ATOM 233 N ILE A 31 -7.830 -0.266 28.050 1.00 8.64 N +ATOM 234 CA ILE A 31 -8.106 -0.892 26.762 1.00 8.64 C +ATOM 235 C ILE A 31 -7.458 -2.274 26.711 1.00 8.64 C +ATOM 236 CB ILE A 31 -7.601 -0.021 25.590 1.00 8.64 C +ATOM 237 O ILE A 31 -6.281 -2.428 27.045 1.00 8.64 O +ATOM 238 CG1 ILE A 31 -8.334 1.326 25.572 1.00 8.64 C +ATOM 239 CG2 ILE A 31 -7.773 -0.756 24.258 1.00 8.64 C +ATOM 240 CD1 ILE A 31 -7.778 2.319 24.562 1.00 8.64 C +ATOM 241 N LYS A 32 -8.177 -3.230 27.032 1.00 8.64 N +ATOM 242 CA LYS A 32 -7.883 -4.648 26.851 1.00 8.64 C +ATOM 243 C LYS A 32 -7.261 -4.910 25.482 1.00 8.64 C +ATOM 244 CB LYS A 32 -9.152 -5.485 27.018 1.00 8.64 C +ATOM 245 O LYS A 32 -7.777 -4.449 24.461 1.00 8.64 O +ATOM 246 CG LYS A 32 -9.602 -5.645 28.463 1.00 8.64 C +ATOM 247 CD LYS A 32 -10.735 -6.656 28.587 1.00 8.64 C +ATOM 248 CE LYS A 32 -11.232 -6.767 30.022 1.00 8.64 C +ATOM 249 NZ LYS A 32 -12.323 -7.777 30.154 1.00 8.64 N +ATOM 250 N SER A 33 -5.945 -4.505 25.154 1.00 8.64 N +ATOM 251 CA SER A 33 -4.816 -4.797 24.277 1.00 8.64 C +ATOM 252 C SER A 33 -5.289 -5.219 22.890 1.00 8.64 C +ATOM 253 CB SER A 33 -3.937 -5.894 24.880 1.00 8.64 C +ATOM 254 O SER A 33 -6.134 -6.107 22.759 1.00 8.64 O +ATOM 255 OG SER A 33 -4.706 -7.046 25.181 1.00 8.64 O +ATOM 256 N LYS A 34 -5.506 -4.290 21.907 1.00 8.64 N +ATOM 257 CA LYS A 34 -5.176 -4.717 20.550 1.00 8.64 C +ATOM 258 C LYS A 34 -3.963 -3.963 20.015 1.00 8.64 C +ATOM 259 CB LYS A 34 -6.372 -4.514 19.618 1.00 8.64 C +ATOM 260 O LYS A 34 -3.833 -2.755 20.227 1.00 8.64 O +ATOM 261 CG LYS A 34 -7.490 -5.528 19.815 1.00 8.64 C +ATOM 262 CD LYS A 34 -8.616 -5.321 18.811 1.00 8.64 C +ATOM 263 CE LYS A 34 -9.773 -6.278 19.062 1.00 8.64 C +ATOM 264 NZ LYS A 34 -10.875 -6.087 18.072 1.00 8.64 N +ATOM 265 N HIS A 35 -2.824 -4.493 19.949 1.00 8.64 N +ATOM 266 CA HIS A 35 -1.491 -4.114 19.495 1.00 8.64 C +ATOM 267 C HIS A 35 -1.527 -3.581 18.066 1.00 8.64 C +ATOM 268 CB HIS A 35 -0.535 -5.304 19.588 1.00 8.64 C +ATOM 269 O HIS A 35 -2.122 -4.202 17.182 1.00 8.64 O +ATOM 270 CG HIS A 35 -0.328 -5.799 20.983 1.00 8.64 C +ATOM 271 CD2 HIS A 35 -0.455 -7.038 21.515 1.00 8.64 C +ATOM 272 ND1 HIS A 35 0.057 -4.973 22.017 1.00 8.64 N +ATOM 273 CE1 HIS A 35 0.158 -5.684 23.127 1.00 8.64 C +ATOM 274 NE2 HIS A 35 -0.147 -6.940 22.850 1.00 8.64 N +ATOM 275 N VAL A 36 -1.503 -2.286 17.829 1.00 8.64 N +ATOM 276 CA VAL A 36 -1.192 -1.701 16.529 1.00 8.64 C +ATOM 277 C VAL A 36 0.304 -1.410 16.437 1.00 8.64 C +ATOM 278 CB VAL A 36 -2.002 -0.410 16.279 1.00 8.64 C +ATOM 279 O VAL A 36 0.894 -0.861 17.371 1.00 8.64 O +ATOM 280 CG1 VAL A 36 -1.660 0.188 14.915 1.00 8.64 C +ATOM 281 CG2 VAL A 36 -3.500 -0.692 16.381 1.00 8.64 C +ATOM 282 N PHE A 37 1.020 -2.124 15.486 1.00 8.64 N +ATOM 283 CA PHE A 37 2.422 -1.855 15.187 1.00 8.64 C +ATOM 284 C PHE A 37 2.551 -0.928 13.985 1.00 8.64 C +ATOM 285 CB PHE A 37 3.177 -3.162 14.926 1.00 8.64 C +ATOM 286 O PHE A 37 1.807 -1.060 13.010 1.00 8.64 O +ATOM 287 CG PHE A 37 3.251 -4.071 16.124 1.00 8.64 C +ATOM 288 CD1 PHE A 37 2.301 -5.066 16.318 1.00 8.64 C +ATOM 289 CD2 PHE A 37 4.270 -3.928 17.057 1.00 8.64 C +ATOM 290 CE1 PHE A 37 2.367 -5.908 17.426 1.00 8.64 C +ATOM 291 CE2 PHE A 37 4.342 -4.766 18.166 1.00 8.64 C +ATOM 292 CZ PHE A 37 3.389 -5.755 18.349 1.00 8.64 C +ATOM 293 N GLU A 38 3.248 0.202 14.094 1.00 8.64 N +ATOM 294 CA GLU A 38 3.645 1.092 13.007 1.00 8.64 C +ATOM 295 C GLU A 38 5.086 0.830 12.578 1.00 8.64 C +ATOM 296 CB GLU A 38 3.477 2.556 13.421 1.00 8.64 C +ATOM 297 O GLU A 38 5.981 0.731 13.419 1.00 8.64 O +ATOM 298 CG GLU A 38 2.545 3.348 12.515 1.00 8.64 C +ATOM 299 CD GLU A 38 2.381 4.798 12.943 1.00 8.64 C +ATOM 300 OE1 GLU A 38 1.724 5.575 12.214 1.00 8.64 O +ATOM 301 OE2 GLU A 38 2.914 5.159 14.016 1.00 8.64 O +ATOM 302 N LEU A 39 5.280 0.263 11.288 1.00 8.64 N +ATOM 303 CA LEU A 39 6.615 0.024 10.751 1.00 8.64 C +ATOM 304 C LEU A 39 7.133 1.253 10.013 1.00 8.64 C +ATOM 305 CB LEU A 39 6.607 -1.185 9.811 1.00 8.64 C +ATOM 306 O LEU A 39 6.371 1.936 9.324 1.00 8.64 O +ATOM 307 CG LEU A 39 6.486 -2.558 10.474 1.00 8.64 C +ATOM 308 CD1 LEU A 39 5.969 -3.586 9.473 1.00 8.64 C +ATOM 309 CD2 LEU A 39 7.829 -2.994 11.050 1.00 8.64 C +ATOM 310 N PRO A 40 8.338 1.782 10.282 1.00 8.64 N +ATOM 311 CA PRO A 40 8.943 2.928 9.599 1.00 8.64 C +ATOM 312 C PRO A 40 9.200 2.662 8.117 1.00 8.64 C +ATOM 313 CB PRO A 40 10.259 3.133 10.353 1.00 8.64 C +ATOM 314 O PRO A 40 9.522 1.534 7.735 1.00 8.64 O +ATOM 315 CG PRO A 40 10.482 1.852 11.090 1.00 8.64 C +ATOM 316 CD PRO A 40 9.238 1.017 10.981 1.00 8.64 C +ATOM 317 N ILE A 41 8.660 3.312 7.012 1.00 8.64 N +ATOM 318 CA ILE A 41 8.626 3.183 5.560 1.00 8.64 C +ATOM 319 C ILE A 41 9.887 3.798 4.958 1.00 8.64 C +ATOM 320 CB ILE A 41 7.367 3.850 4.962 1.00 8.64 C +ATOM 321 O ILE A 41 10.222 4.950 5.244 1.00 8.64 O +ATOM 322 CG1 ILE A 41 6.099 3.238 5.570 1.00 8.64 C +ATOM 323 CG2 ILE A 41 7.360 3.722 3.436 1.00 8.64 C +ATOM 324 CD1 ILE A 41 4.813 3.939 5.155 1.00 8.64 C +ATOM 325 N ASN A 42 10.941 3.063 4.710 1.00 8.64 N +ATOM 326 CA ASN A 42 11.934 3.552 3.759 1.00 8.64 C +ATOM 327 C ASN A 42 11.614 3.106 2.335 1.00 8.64 C +ATOM 328 CB ASN A 42 13.336 3.085 4.159 1.00 8.64 C +ATOM 329 O ASN A 42 10.806 2.198 2.131 1.00 8.64 O +ATOM 330 CG ASN A 42 13.525 1.591 3.986 1.00 8.64 C +ATOM 331 ND2 ASN A 42 14.569 1.051 4.604 1.00 8.64 N +ATOM 332 OD1 ASN A 42 12.741 0.928 3.303 1.00 8.64 O +ATOM 333 N ASP A 43 11.701 4.001 1.461 1.00 8.64 N +ATOM 334 CA ASP A 43 11.331 4.253 0.072 1.00 8.64 C +ATOM 335 C ASP A 43 11.757 3.096 -0.829 1.00 8.64 C +ATOM 336 CB ASP A 43 11.956 5.561 -0.421 1.00 8.64 C +ATOM 337 O ASP A 43 11.082 2.788 -1.813 1.00 8.64 O +ATOM 338 CG ASP A 43 11.313 6.793 0.191 1.00 8.64 C +ATOM 339 OD1 ASP A 43 11.900 7.893 0.108 1.00 8.64 O +ATOM 340 OD2 ASP A 43 10.210 6.661 0.764 1.00 8.64 O +ATOM 341 N LYS A 44 12.353 2.046 -0.514 1.00 8.64 N +ATOM 342 CA LYS A 44 12.727 0.989 -1.449 1.00 8.64 C +ATOM 343 C LYS A 44 11.978 -0.305 -1.142 1.00 8.64 C +ATOM 344 CB LYS A 44 14.236 0.744 -1.407 1.00 8.64 C +ATOM 345 O LYS A 44 11.810 -1.154 -2.021 1.00 8.64 O +ATOM 346 CG LYS A 44 15.059 1.832 -2.080 1.00 8.64 C +ATOM 347 CD LYS A 44 16.537 1.468 -2.124 1.00 8.64 C +ATOM 348 CE LYS A 44 17.370 2.584 -2.741 1.00 8.64 C +ATOM 349 NZ LYS A 44 18.820 2.229 -2.793 1.00 8.64 N +ATOM 350 N THR A 45 11.103 -0.291 -0.142 1.00 8.64 N +ATOM 351 CA THR A 45 10.454 -1.552 0.197 1.00 8.64 C +ATOM 352 C THR A 45 8.939 -1.437 0.054 1.00 8.64 C +ATOM 353 CB THR A 45 10.805 -1.993 1.630 1.00 8.64 C +ATOM 354 O THR A 45 8.223 -2.436 0.149 1.00 8.64 O +ATOM 355 CG2 THR A 45 12.095 -2.806 1.656 1.00 8.64 C +ATOM 356 OG1 THR A 45 10.968 -0.832 2.454 1.00 8.64 O +ATOM 357 N LYS A 46 8.412 -0.546 -0.642 1.00 8.64 N +ATOM 358 CA LYS A 46 6.961 -0.392 -0.700 1.00 8.64 C +ATOM 359 C LYS A 46 6.386 -1.066 -1.942 1.00 8.64 C +ATOM 360 CB LYS A 46 6.578 1.089 -0.682 1.00 8.64 C +ATOM 361 O LYS A 46 6.699 -0.675 -3.068 1.00 8.64 O +ATOM 362 CG LYS A 46 6.727 1.750 0.680 1.00 8.64 C +ATOM 363 CD LYS A 46 6.243 3.195 0.656 1.00 8.64 C +ATOM 364 CE LYS A 46 6.459 3.880 1.998 1.00 8.64 C +ATOM 365 NZ LYS A 46 6.003 5.302 1.974 1.00 8.64 N +ATOM 366 N ARG A 47 6.500 -2.491 -2.290 1.00 8.64 N +ATOM 367 CA ARG A 47 5.304 -2.979 -2.968 1.00 8.64 C +ATOM 368 C ARG A 47 5.112 -4.474 -2.731 1.00 8.64 C +ATOM 369 CB ARG A 47 5.382 -2.692 -4.469 1.00 8.64 C +ATOM 370 O ARG A 47 5.990 -5.276 -3.055 1.00 8.64 O +ATOM 371 CG ARG A 47 4.430 -1.603 -4.938 1.00 8.64 C +ATOM 372 CD ARG A 47 4.526 -1.379 -6.440 1.00 8.64 C +ATOM 373 NE ARG A 47 4.838 0.011 -6.759 1.00 8.64 N +ATOM 374 NH1 ARG A 47 4.576 -0.237 -9.041 1.00 8.64 N +ATOM 375 NH2 ARG A 47 5.152 1.801 -8.164 1.00 8.64 N +ATOM 376 CZ ARG A 47 4.854 0.522 -7.987 1.00 8.64 C +ATOM 377 N TYR A 48 4.776 -5.036 -1.672 1.00 8.64 N +ATOM 378 CA TYR A 48 4.245 -6.394 -1.657 1.00 8.64 C +ATOM 379 C TYR A 48 2.731 -6.390 -1.828 1.00 8.64 C +ATOM 380 CB TYR A 48 4.621 -7.104 -0.353 1.00 8.64 C +ATOM 381 O TYR A 48 2.027 -5.622 -1.168 1.00 8.64 O +ATOM 382 CG TYR A 48 6.098 -7.385 -0.219 1.00 8.64 C +ATOM 383 CD1 TYR A 48 6.931 -6.518 0.484 1.00 8.64 C +ATOM 384 CD2 TYR A 48 6.663 -8.518 -0.795 1.00 8.64 C +ATOM 385 CE1 TYR A 48 8.293 -6.772 0.609 1.00 8.64 C +ATOM 386 CE2 TYR A 48 8.024 -8.782 -0.677 1.00 8.64 C +ATOM 387 OH TYR A 48 10.177 -8.161 0.146 1.00 8.64 O +ATOM 388 CZ TYR A 48 8.829 -7.905 0.026 1.00 8.64 C +ATOM 389 N ILE A 49 2.115 -6.489 -3.067 1.00 8.64 N +ATOM 390 CA ILE A 49 0.852 -6.880 -3.684 1.00 8.64 C +ATOM 391 C ILE A 49 0.101 -7.837 -2.761 1.00 8.64 C +ATOM 392 CB ILE A 49 1.076 -7.534 -5.066 1.00 8.64 C +ATOM 393 O ILE A 49 0.588 -8.929 -2.459 1.00 8.64 O +ATOM 394 CG1 ILE A 49 1.810 -6.567 -6.002 1.00 8.64 C +ATOM 395 CG2 ILE A 49 -0.256 -7.981 -5.674 1.00 8.64 C +ATOM 396 CD1 ILE A 49 2.101 -7.142 -7.381 1.00 8.64 C +ATOM 397 N LEU A 50 -0.593 -7.592 -1.660 1.00 8.64 N +ATOM 398 CA LEU A 50 -1.573 -8.173 -0.750 1.00 8.64 C +ATOM 399 C LEU A 50 -2.949 -8.245 -1.405 1.00 8.64 C +ATOM 400 CB LEU A 50 -1.653 -7.358 0.544 1.00 8.64 C +ATOM 401 O LEU A 50 -3.384 -7.289 -2.050 1.00 8.64 O +ATOM 402 CG LEU A 50 -0.484 -7.515 1.517 1.00 8.64 C +ATOM 403 CD1 LEU A 50 -0.441 -6.339 2.488 1.00 8.64 C +ATOM 404 CD2 LEU A 50 -0.591 -8.835 2.273 1.00 8.64 C +ATOM 405 N GLY A 51 -3.407 -9.384 -2.202 1.00 8.64 N +ATOM 406 CA GLY A 51 -4.655 -10.100 -1.989 1.00 8.64 C +ATOM 407 C GLY A 51 -5.574 -10.070 -3.195 1.00 8.64 C +ATOM 408 O GLY A 51 -6.476 -9.233 -3.274 1.00 8.64 O +ATOM 409 N ALA A 52 -5.228 -10.625 -4.456 1.00 8.64 N +ATOM 410 CA ALA A 52 -6.350 -10.631 -5.391 1.00 8.64 C +ATOM 411 C ALA A 52 -6.952 -12.027 -5.518 1.00 8.64 C +ATOM 412 CB ALA A 52 -5.905 -10.121 -6.760 1.00 8.64 C +ATOM 413 O ALA A 52 -6.245 -12.989 -5.829 1.00 8.64 O +ATOM 414 N THR A 53 -7.821 -12.550 -4.658 1.00 8.64 N +ATOM 415 CA THR A 53 -8.645 -13.723 -4.929 1.00 8.64 C +ATOM 416 C THR A 53 -9.877 -13.343 -5.745 1.00 8.64 C +ATOM 417 CB THR A 53 -9.083 -14.411 -3.622 1.00 8.64 C +ATOM 418 O THR A 53 -10.285 -12.180 -5.756 1.00 8.64 O +ATOM 419 CG2 THR A 53 -7.877 -14.908 -2.831 1.00 8.64 C +ATOM 420 OG1 THR A 53 -9.815 -13.477 -2.820 1.00 8.64 O +ATOM 421 N GLU A 54 -10.028 -13.989 -6.922 1.00 8.64 N +ATOM 422 CA GLU A 54 -11.170 -13.968 -7.831 1.00 8.64 C +ATOM 423 C GLU A 54 -12.473 -13.725 -7.074 1.00 8.64 C +ATOM 424 CB GLU A 54 -11.256 -15.279 -8.618 1.00 8.64 C +ATOM 425 O GLU A 54 -13.399 -13.109 -7.604 1.00 8.64 O +ATOM 426 CG GLU A 54 -10.288 -15.357 -9.789 1.00 8.64 C +ATOM 427 CD GLU A 54 -10.430 -16.635 -10.601 1.00 8.64 C +ATOM 428 OE1 GLU A 54 -9.704 -16.798 -11.608 1.00 8.64 O +ATOM 429 OE2 GLU A 54 -11.276 -17.478 -10.228 1.00 8.64 O +ATOM 430 N THR A 55 -12.360 -13.799 -5.890 1.00 8.64 N +ATOM 431 CA THR A 55 -13.448 -13.571 -4.946 1.00 8.64 C +ATOM 432 C THR A 55 -13.101 -12.439 -3.983 1.00 8.64 C +ATOM 433 CB THR A 55 -13.771 -14.847 -4.146 1.00 8.64 C +ATOM 434 O THR A 55 -11.941 -12.282 -3.594 1.00 8.64 O +ATOM 435 CG2 THR A 55 -14.391 -15.915 -5.041 1.00 8.64 C +ATOM 436 OG1 THR A 55 -12.563 -15.363 -3.573 1.00 8.64 O +ATOM 437 N LYS A 56 -13.303 -11.292 -4.478 1.00 8.64 N +ATOM 438 CA LYS A 56 -13.121 -9.990 -3.842 1.00 8.64 C +ATOM 439 C LYS A 56 -12.513 -10.138 -2.450 1.00 8.64 C +ATOM 440 CB LYS A 56 -14.454 -9.244 -3.755 1.00 8.64 C +ATOM 441 O LYS A 56 -13.231 -10.124 -1.449 1.00 8.64 O +ATOM 442 CG LYS A 56 -15.022 -8.833 -5.105 1.00 8.64 C +ATOM 443 CD LYS A 56 -16.241 -7.932 -4.948 1.00 8.64 C +ATOM 444 CE LYS A 56 -16.839 -7.558 -6.298 1.00 8.64 C +ATOM 445 NZ LYS A 56 -18.009 -6.643 -6.150 1.00 8.64 N +ATOM 446 N GLU A 57 -11.444 -10.923 -2.365 1.00 8.64 N +ATOM 447 CA GLU A 57 -10.922 -10.869 -1.003 1.00 8.64 C +ATOM 448 C GLU A 57 -9.945 -9.710 -0.832 1.00 8.64 C +ATOM 449 CB GLU A 57 -10.241 -12.190 -0.635 1.00 8.64 C +ATOM 450 O GLU A 57 -9.129 -9.443 -1.717 1.00 8.64 O +ATOM 451 CG GLU A 57 -11.101 -13.108 0.221 1.00 8.64 C +ATOM 452 CD GLU A 57 -10.378 -14.373 0.656 1.00 8.64 C +ATOM 453 OE1 GLU A 57 -10.943 -15.149 1.461 1.00 8.64 O +ATOM 454 OE2 GLU A 57 -9.238 -14.590 0.190 1.00 8.64 O +ATOM 455 N GLU A 58 -10.407 -8.718 -0.201 1.00 8.64 N +ATOM 456 CA GLU A 58 -9.599 -7.616 0.312 1.00 8.64 C +ATOM 457 C GLU A 58 -8.294 -8.124 0.918 1.00 8.64 C +ATOM 458 CB GLU A 58 -10.384 -6.812 1.352 1.00 8.64 C +ATOM 459 O GLU A 58 -8.299 -9.054 1.728 1.00 8.64 O +ATOM 460 CG GLU A 58 -10.114 -5.315 1.303 1.00 8.64 C +ATOM 461 CD GLU A 58 -10.947 -4.523 2.298 1.00 8.64 C +ATOM 462 OE1 GLU A 58 -10.733 -3.296 2.428 1.00 8.64 O +ATOM 463 OE2 GLU A 58 -11.819 -5.134 2.955 1.00 8.64 O +ATOM 464 N VAL A 59 -7.183 -8.070 0.289 1.00 6.72 N +ATOM 465 CA VAL A 59 -5.863 -8.557 0.675 1.00 6.72 C +ATOM 466 C VAL A 59 -5.151 -7.505 1.523 1.00 6.72 C +ATOM 467 CB VAL A 59 -5.006 -8.915 -0.560 1.00 6.72 C +ATOM 468 O VAL A 59 -4.402 -7.842 2.442 1.00 6.72 O +ATOM 469 CG1 VAL A 59 -3.820 -9.790 -0.159 1.00 6.72 C +ATOM 470 CG2 VAL A 59 -5.860 -9.616 -1.615 1.00 6.72 C +ATOM 471 N LEU A 60 -5.923 -6.877 2.559 1.00 6.72 N +ATOM 472 CA LEU A 60 -5.509 -6.065 3.699 1.00 6.72 C +ATOM 473 C LEU A 60 -5.287 -4.615 3.281 1.00 6.72 C +ATOM 474 CB LEU A 60 -4.231 -6.631 4.324 1.00 6.72 C +ATOM 475 O LEU A 60 -4.724 -4.351 2.216 1.00 6.72 O +ATOM 476 CG LEU A 60 -4.398 -7.870 5.205 1.00 6.72 C +ATOM 477 CD1 LEU A 60 -3.064 -8.591 5.363 1.00 6.72 C +ATOM 478 CD2 LEU A 60 -4.969 -7.486 6.565 1.00 6.72 C +ATOM 479 N PRO A 61 -6.061 -3.706 3.745 1.00 6.72 N +ATOM 480 CA PRO A 61 -5.827 -2.294 3.434 1.00 6.72 C +ATOM 481 C PRO A 61 -4.391 -1.859 3.717 1.00 6.72 C +ATOM 482 CB PRO A 61 -6.810 -1.563 4.353 1.00 6.72 C +ATOM 483 O PRO A 61 -3.782 -2.317 4.687 1.00 6.72 O +ATOM 484 CG PRO A 61 -7.183 -2.571 5.392 1.00 6.72 C +ATOM 485 CD PRO A 61 -6.789 -3.933 4.898 1.00 6.72 C +ATOM 486 N ASN A 62 -3.671 -1.566 2.620 1.00 6.72 N +ATOM 487 CA ASN A 62 -2.420 -0.834 2.785 1.00 6.72 C +ATOM 488 C ASN A 62 -2.630 0.672 2.655 1.00 6.72 C +ATOM 489 CB ASN A 62 -1.379 -1.315 1.772 1.00 6.72 C +ATOM 490 O ASN A 62 -3.578 1.117 2.004 1.00 6.72 O +ATOM 491 CG ASN A 62 -0.729 -2.622 2.178 1.00 6.72 C +ATOM 492 ND2 ASN A 62 -0.250 -3.376 1.195 1.00 6.72 N +ATOM 493 OD1 ASN A 62 -0.659 -2.953 3.364 1.00 6.72 O +ATOM 494 N TYR A 63 -2.223 1.347 3.620 1.00 6.72 N +ATOM 495 CA TYR A 63 -2.253 2.806 3.627 1.00 6.72 C +ATOM 496 C TYR A 63 -0.969 3.381 3.043 1.00 6.72 C +ATOM 497 CB TYR A 63 -2.461 3.332 5.050 1.00 6.72 C +ATOM 498 O TYR A 63 0.099 2.774 3.157 1.00 6.72 O +ATOM 499 CG TYR A 63 -3.732 2.841 5.700 1.00 6.72 C +ATOM 500 CD1 TYR A 63 -3.747 1.663 6.442 1.00 6.72 C +ATOM 501 CD2 TYR A 63 -4.920 3.553 5.571 1.00 6.72 C +ATOM 502 CE1 TYR A 63 -4.917 1.205 7.041 1.00 6.72 C +ATOM 503 CE2 TYR A 63 -6.095 3.105 6.166 1.00 6.72 C +ATOM 504 OH TYR A 63 -7.244 1.484 7.488 1.00 6.72 O +ATOM 505 CZ TYR A 63 -6.083 1.932 6.898 1.00 6.72 C +ATOM 506 N VAL A 64 -1.142 4.342 2.173 1.00 4.66 N +ATOM 507 CA VAL A 64 -0.000 5.090 1.658 1.00 4.66 C +ATOM 508 C VAL A 64 -0.129 6.561 2.046 1.00 4.66 C +ATOM 509 CB VAL A 64 0.125 4.951 0.125 1.00 4.66 C +ATOM 510 O VAL A 64 -1.219 7.133 1.982 1.00 4.66 O +ATOM 511 CG1 VAL A 64 -1.005 5.701 -0.579 1.00 4.66 C +ATOM 512 CG2 VAL A 64 1.485 5.462 -0.348 1.00 4.66 C +ATOM 513 N LYS A 65 0.916 7.003 2.673 1.00 6.72 N +ATOM 514 CA LYS A 65 0.982 8.432 2.966 1.00 6.72 C +ATOM 515 C LYS A 65 1.692 9.190 1.848 1.00 6.72 C +ATOM 516 CB LYS A 65 1.693 8.674 4.298 1.00 6.72 C +ATOM 517 O LYS A 65 2.804 8.830 1.455 1.00 6.72 O +ATOM 518 CG LYS A 65 1.604 10.110 4.795 1.00 6.72 C +ATOM 519 CD LYS A 65 2.207 10.258 6.186 1.00 6.72 C +ATOM 520 CE LYS A 65 2.153 11.701 6.669 1.00 6.72 C +ATOM 521 NZ LYS A 65 2.726 11.848 8.040 1.00 6.72 N +ATOM 522 N VAL A 66 1.057 10.179 1.205 1.00 6.72 N +ATOM 523 CA VAL A 66 1.588 11.120 0.224 1.00 6.72 C +ATOM 524 C VAL A 66 1.485 12.544 0.766 1.00 6.72 C +ATOM 525 CB VAL A 66 0.847 11.009 -1.127 1.00 6.72 C +ATOM 526 O VAL A 66 0.389 13.105 0.851 1.00 6.72 O +ATOM 527 CG1 VAL A 66 1.477 11.935 -2.166 1.00 6.72 C +ATOM 528 CG2 VAL A 66 0.854 9.564 -1.622 1.00 6.72 C +ATOM 529 N GLY A 67 2.645 13.103 1.210 1.00 6.72 N +ATOM 530 CA GLY A 67 2.556 14.375 1.909 1.00 6.72 C +ATOM 531 C GLY A 67 1.847 14.273 3.247 1.00 6.72 C +ATOM 532 O GLY A 67 2.248 13.488 4.109 1.00 6.72 O +ATOM 533 N SER A 68 0.772 15.228 3.461 1.00 6.72 N +ATOM 534 CA SER A 68 -0.022 15.225 4.685 1.00 6.72 C +ATOM 535 C SER A 68 -1.250 14.332 4.545 1.00 6.72 C +ATOM 536 CB SER A 68 -0.453 16.647 5.048 1.00 6.72 C +ATOM 537 O SER A 68 -2.061 14.234 5.469 1.00 6.72 O +ATOM 538 OG SER A 68 -1.210 17.226 3.999 1.00 6.72 O +ATOM 539 N ASP A 69 -1.295 13.620 3.451 1.00 6.72 N +ATOM 540 CA ASP A 69 -2.507 12.844 3.203 1.00 6.72 C +ATOM 541 C ASP A 69 -2.237 11.347 3.332 1.00 6.72 C +ATOM 542 CB ASP A 69 -3.071 13.160 1.816 1.00 6.72 C +ATOM 543 O ASP A 69 -1.146 10.877 3.002 1.00 6.72 O +ATOM 544 CG ASP A 69 -3.522 14.603 1.673 1.00 6.72 C +ATOM 545 OD1 ASP A 69 -3.312 15.204 0.598 1.00 6.72 O +ATOM 546 OD2 ASP A 69 -4.090 15.144 2.646 1.00 6.72 O +ATOM 547 N LEU A 70 -3.211 10.550 3.934 1.00 4.66 N +ATOM 548 CA LEU A 70 -3.196 9.096 4.057 1.00 4.66 C +ATOM 549 C LEU A 70 -4.202 8.459 3.105 1.00 4.66 C +ATOM 550 CB LEU A 70 -3.502 8.677 5.498 1.00 4.66 C +ATOM 551 O LEU A 70 -5.357 8.886 3.039 1.00 4.66 O +ATOM 552 CG LEU A 70 -3.258 7.207 5.842 1.00 4.66 C +ATOM 553 CD1 LEU A 70 -1.767 6.890 5.788 1.00 4.66 C +ATOM 554 CD2 LEU A 70 -3.830 6.877 7.216 1.00 4.66 C +ATOM 555 N TYR A 71 -3.655 7.568 2.260 1.00 4.66 N +ATOM 556 CA TYR A 71 -4.497 6.862 1.300 1.00 4.66 C +ATOM 557 C TYR A 71 -4.630 5.390 1.671 1.00 4.66 C +ATOM 558 CB TYR A 71 -3.926 6.994 -0.115 1.00 4.66 C +ATOM 559 O TYR A 71 -3.674 4.774 2.148 1.00 4.66 O +ATOM 560 CG TYR A 71 -3.900 8.412 -0.629 1.00 4.66 C +ATOM 561 CD1 TYR A 71 -2.852 9.272 -0.307 1.00 4.66 C +ATOM 562 CD2 TYR A 71 -4.923 8.897 -1.437 1.00 4.66 C +ATOM 563 CE1 TYR A 71 -2.824 10.581 -0.777 1.00 4.66 C +ATOM 564 CE2 TYR A 71 -4.906 10.204 -1.913 1.00 4.66 C +ATOM 565 OH TYR A 71 -3.832 12.332 -2.046 1.00 4.66 O +ATOM 566 CZ TYR A 71 -3.854 11.037 -1.578 1.00 4.66 C +ATOM 567 N ARG A 72 -5.791 4.900 1.584 1.00 4.66 N +ATOM 568 CA ARG A 72 -6.044 3.465 1.655 1.00 4.66 C +ATOM 569 C ARG A 72 -5.981 2.829 0.270 1.00 4.66 C +ATOM 570 CB ARG A 72 -7.406 3.190 2.296 1.00 4.66 C +ATOM 571 O ARG A 72 -6.604 3.321 -0.674 1.00 4.66 O +ATOM 572 CG ARG A 72 -7.679 1.717 2.555 1.00 4.66 C +ATOM 573 CD ARG A 72 -9.040 1.500 3.201 1.00 4.66 C +ATOM 574 NE ARG A 72 -9.274 0.091 3.505 1.00 4.66 N +ATOM 575 NH1 ARG A 72 -11.472 0.383 4.153 1.00 4.66 N +ATOM 576 NH2 ARG A 72 -10.528 -1.705 4.194 1.00 4.66 N +ATOM 577 CZ ARG A 72 -10.424 -0.407 3.950 1.00 4.66 C +ATOM 578 N LEU A 73 -5.092 1.875 0.180 1.00 4.66 N +ATOM 579 CA LEU A 73 -4.937 1.157 -1.080 1.00 4.66 C +ATOM 580 C LEU A 73 -5.727 -0.147 -1.064 1.00 4.66 C +ATOM 581 CB LEU A 73 -3.458 0.868 -1.354 1.00 4.66 C +ATOM 582 O LEU A 73 -5.700 -0.882 -0.074 1.00 4.66 O +ATOM 583 CG LEU A 73 -2.548 2.087 -1.518 1.00 4.66 C +ATOM 584 CD1 LEU A 73 -1.084 1.663 -1.481 1.00 4.66 C +ATOM 585 CD2 LEU A 73 -2.866 2.820 -2.817 1.00 4.66 C +ATOM 586 N LYS A 74 -6.458 -0.297 -2.040 1.00 4.66 N +ATOM 587 CA LYS A 74 -7.147 -1.567 -2.251 1.00 4.66 C +ATOM 588 C LYS A 74 -6.751 -2.192 -3.586 1.00 4.66 C +ATOM 589 CB LYS A 74 -8.662 -1.371 -2.193 1.00 4.66 C +ATOM 590 O LYS A 74 -6.697 -1.504 -4.608 1.00 4.66 O +ATOM 591 CG LYS A 74 -9.189 -1.022 -0.809 1.00 4.66 C +ATOM 592 CD LYS A 74 -10.710 -0.932 -0.796 1.00 4.66 C +ATOM 593 CE LYS A 74 -11.234 -0.515 0.572 1.00 4.66 C +ATOM 594 NZ LYS A 74 -12.725 -0.424 0.589 1.00 4.66 N +ATOM 595 N ALA A 75 -6.218 -3.399 -3.444 1.00 4.66 N +ATOM 596 CA ALA A 75 -5.851 -4.111 -4.666 1.00 4.66 C +ATOM 597 C ALA A 75 -6.823 -5.253 -4.948 1.00 4.66 C +ATOM 598 CB ALA A 75 -4.424 -4.644 -4.562 1.00 4.66 C +ATOM 599 O ALA A 75 -7.332 -5.887 -4.021 1.00 4.66 O +ATOM 600 N TYR A 76 -7.207 -5.295 -6.175 1.00 6.72 N +ATOM 601 CA TYR A 76 -8.028 -6.438 -6.558 1.00 6.72 C +ATOM 602 C TYR A 76 -7.576 -7.011 -7.896 1.00 6.72 C +ATOM 603 CB TYR A 76 -9.505 -6.039 -6.633 1.00 6.72 C +ATOM 604 O TYR A 76 -6.891 -6.335 -8.668 1.00 6.72 O +ATOM 605 CG TYR A 76 -9.757 -4.799 -7.457 1.00 6.72 C +ATOM 606 CD1 TYR A 76 -10.045 -4.889 -8.817 1.00 6.72 C +ATOM 607 CD2 TYR A 76 -9.707 -3.536 -6.878 1.00 6.72 C +ATOM 608 CE1 TYR A 76 -10.276 -3.750 -9.580 1.00 6.72 C +ATOM 609 CE2 TYR A 76 -9.937 -2.389 -7.631 1.00 6.72 C +ATOM 610 OH TYR A 76 -10.448 -1.375 -9.730 1.00 6.72 O +ATOM 611 CZ TYR A 76 -10.220 -2.506 -8.979 1.00 6.72 C +ATOM 612 N ARG A 77 -7.735 -8.365 -8.035 1.00 6.72 N +ATOM 613 CA ARG A 77 -7.400 -9.083 -9.261 1.00 6.72 C +ATOM 614 C ARG A 77 -8.658 -9.466 -10.033 1.00 6.72 C +ATOM 615 CB ARG A 77 -6.578 -10.335 -8.944 1.00 6.72 C +ATOM 616 O ARG A 77 -9.624 -9.964 -9.449 1.00 6.72 O +ATOM 617 CG ARG A 77 -6.025 -11.036 -10.174 1.00 6.72 C +ATOM 618 CD ARG A 77 -5.161 -12.233 -9.800 1.00 6.72 C +ATOM 619 NE ARG A 77 -4.366 -12.698 -10.933 1.00 6.72 N +ATOM 620 NH1 ARG A 77 -3.944 -14.788 -10.043 1.00 6.72 N +ATOM 621 NH2 ARG A 77 -3.103 -14.221 -12.098 1.00 6.72 N +ATOM 622 CZ ARG A 77 -3.806 -13.901 -11.022 1.00 6.72 C +ATOM 623 N GLU A 78 -8.703 -8.968 -11.357 1.00 6.72 N +ATOM 624 CA GLU A 78 -9.710 -9.433 -12.306 1.00 6.72 C +ATOM 625 C GLU A 78 -9.072 -10.231 -13.440 1.00 6.72 C +ATOM 626 CB GLU A 78 -10.500 -8.252 -12.875 1.00 6.72 C +ATOM 627 O GLU A 78 -7.847 -10.344 -13.513 1.00 6.72 O +ATOM 628 CG GLU A 78 -11.352 -7.528 -11.842 1.00 6.72 C +ATOM 629 CD GLU A 78 -12.234 -6.446 -12.444 1.00 6.72 C +ATOM 630 OE1 GLU A 78 -12.957 -5.760 -11.686 1.00 6.72 O +ATOM 631 OE2 GLU A 78 -12.203 -6.283 -13.684 1.00 6.72 O +ATOM 632 N LYS A 79 -9.991 -10.926 -14.239 1.00 6.72 N +ATOM 633 CA LYS A 79 -9.539 -11.713 -15.383 1.00 6.72 C +ATOM 634 C LYS A 79 -8.611 -10.898 -16.279 1.00 6.72 C +ATOM 635 CB LYS A 79 -10.735 -12.221 -16.191 1.00 6.72 C +ATOM 636 O LYS A 79 -7.610 -11.415 -16.778 1.00 6.72 O +ATOM 637 CG LYS A 79 -10.419 -13.415 -17.079 1.00 6.72 C +ATOM 638 CD LYS A 79 -11.665 -13.928 -17.790 1.00 6.72 C +ATOM 639 CE LYS A 79 -11.329 -15.033 -18.782 1.00 6.72 C +ATOM 640 NZ LYS A 79 -12.556 -15.601 -19.415 1.00 6.72 N +ATOM 641 N SER A 80 -8.775 -9.596 -16.232 1.00 6.72 N +ATOM 642 CA SER A 80 -8.111 -8.740 -17.209 1.00 6.72 C +ATOM 643 C SER A 80 -6.887 -8.057 -16.606 1.00 6.72 C +ATOM 644 CB SER A 80 -9.080 -7.685 -17.745 1.00 6.72 C +ATOM 645 O SER A 80 -6.072 -7.482 -17.329 1.00 6.72 O +ATOM 646 OG SER A 80 -9.634 -6.926 -16.684 1.00 6.72 O +ATOM 647 N GLY A 81 -6.705 -8.234 -15.324 1.00 6.72 N +ATOM 648 CA GLY A 81 -5.576 -7.527 -14.740 1.00 6.72 C +ATOM 649 C GLY A 81 -5.757 -7.232 -13.263 1.00 6.72 C +ATOM 650 O GLY A 81 -6.659 -7.775 -12.622 1.00 6.72 O +ATOM 651 N VAL A 82 -4.698 -6.651 -12.655 1.00 6.72 N +ATOM 652 CA VAL A 82 -4.661 -6.238 -11.256 1.00 6.72 C +ATOM 653 C VAL A 82 -4.972 -4.747 -11.149 1.00 6.72 C +ATOM 654 CB VAL A 82 -3.292 -6.545 -10.609 1.00 6.72 C +ATOM 655 O VAL A 82 -4.465 -3.943 -11.935 1.00 6.72 O +ATOM 656 CG1 VAL A 82 -3.263 -6.076 -9.156 1.00 6.72 C +ATOM 657 CG2 VAL A 82 -2.983 -8.039 -10.698 1.00 6.72 C +ATOM 658 N TYR A 83 -5.928 -4.428 -10.292 1.00 6.72 N +ATOM 659 CA TYR A 83 -6.336 -3.045 -10.073 1.00 6.72 C +ATOM 660 C TYR A 83 -5.965 -2.583 -8.668 1.00 6.72 C +ATOM 661 CB TYR A 83 -7.843 -2.888 -10.293 1.00 6.72 C +ATOM 662 O TYR A 83 -5.976 -3.376 -7.724 1.00 6.72 O +ATOM 663 CG TYR A 83 -8.298 -3.276 -11.679 1.00 6.72 C +ATOM 664 CD1 TYR A 83 -8.526 -4.610 -12.011 1.00 6.72 C +ATOM 665 CD2 TYR A 83 -8.499 -2.311 -12.660 1.00 6.72 C +ATOM 666 CE1 TYR A 83 -8.942 -4.973 -13.287 1.00 6.72 C +ATOM 667 CE2 TYR A 83 -8.916 -2.662 -13.940 1.00 6.72 C +ATOM 668 OH TYR A 83 -9.548 -4.347 -15.509 1.00 6.72 O +ATOM 669 CZ TYR A 83 -9.135 -3.993 -14.243 1.00 6.72 C +ATOM 670 N VAL A 84 -5.503 -1.346 -8.569 1.00 4.66 N +ATOM 671 CA VAL A 84 -5.269 -0.727 -7.268 1.00 4.66 C +ATOM 672 C VAL A 84 -6.170 0.496 -7.109 1.00 4.66 C +ATOM 673 CB VAL A 84 -3.788 -0.325 -7.089 1.00 4.66 C +ATOM 674 O VAL A 84 -6.240 1.343 -8.002 1.00 4.66 O +ATOM 675 CG1 VAL A 84 -3.573 0.352 -5.737 1.00 4.66 C +ATOM 676 CG2 VAL A 84 -2.884 -1.549 -7.227 1.00 4.66 C +ATOM 677 N ARG A 85 -6.913 0.488 -6.095 1.00 6.72 N +ATOM 678 CA ARG A 85 -7.754 1.633 -5.763 1.00 6.72 C +ATOM 679 C ARG A 85 -7.206 2.383 -4.553 1.00 6.72 C +ATOM 680 CB ARG A 85 -9.192 1.183 -5.492 1.00 6.72 C +ATOM 681 O ARG A 85 -6.730 1.766 -3.597 1.00 6.72 O +ATOM 682 CG ARG A 85 -10.184 2.329 -5.379 1.00 6.72 C +ATOM 683 CD ARG A 85 -11.596 1.828 -5.108 1.00 6.72 C +ATOM 684 NE ARG A 85 -12.400 1.796 -6.326 1.00 6.72 N +ATOM 685 NH1 ARG A 85 -14.250 0.839 -5.327 1.00 6.72 N +ATOM 686 NH2 ARG A 85 -14.283 1.347 -7.562 1.00 6.72 N +ATOM 687 CZ ARG A 85 -13.643 1.327 -6.402 1.00 6.72 C +ATOM 688 N THR A 86 -7.071 3.732 -4.691 1.00 6.72 N +ATOM 689 CA THR A 86 -6.621 4.528 -3.555 1.00 6.72 C +ATOM 690 C THR A 86 -7.733 5.453 -3.068 1.00 6.72 C +ATOM 691 CB THR A 86 -5.376 5.361 -3.914 1.00 6.72 C +ATOM 692 O THR A 86 -8.527 5.952 -3.868 1.00 6.72 O +ATOM 693 CG2 THR A 86 -4.246 4.471 -4.420 1.00 6.72 C +ATOM 694 OG1 THR A 86 -5.719 6.306 -4.935 1.00 6.72 O +ATOM 695 N ASN A 87 -7.936 5.475 -1.707 1.00 6.72 N +ATOM 696 CA ASN A 87 -8.831 6.444 -1.084 1.00 6.72 C +ATOM 697 C ASN A 87 -8.087 7.347 -0.105 1.00 6.72 C +ATOM 698 CB ASN A 87 -9.985 5.730 -0.376 1.00 6.72 C +ATOM 699 O ASN A 87 -7.297 6.868 0.711 1.00 6.72 O +ATOM 700 CG ASN A 87 -10.918 5.027 -1.342 1.00 6.72 C +ATOM 701 ND2 ASN A 87 -11.709 4.093 -0.828 1.00 6.72 N +ATOM 702 OD1 ASN A 87 -10.927 5.321 -2.540 1.00 6.72 O +ATOM 703 N LYS A 88 -8.092 8.633 -0.265 1.00 6.72 N +ATOM 704 CA LYS A 88 -7.558 9.565 0.724 1.00 6.72 C +ATOM 705 C LYS A 88 -8.305 9.448 2.049 1.00 6.72 C +ATOM 706 CB LYS A 88 -7.634 11.001 0.204 1.00 6.72 C +ATOM 707 O LYS A 88 -9.536 9.505 2.081 1.00 6.72 O +ATOM 708 CG LYS A 88 -6.902 12.014 1.072 1.00 6.72 C +ATOM 709 CD LYS A 88 -6.972 13.415 0.478 1.00 6.72 C +ATOM 710 CE LYS A 88 -6.293 14.439 1.377 1.00 6.72 C +ATOM 711 NZ LYS A 88 -6.372 15.816 0.806 1.00 6.72 N +ATOM 712 N LEU A 89 -7.493 9.040 3.089 1.00 6.72 N +ATOM 713 CA LEU A 89 -8.056 8.925 4.430 1.00 6.72 C +ATOM 714 C LEU A 89 -8.211 10.298 5.074 1.00 6.72 C +ATOM 715 CB LEU A 89 -7.174 8.033 5.307 1.00 6.72 C +ATOM 716 O LEU A 89 -7.367 11.177 4.884 1.00 6.72 O +ATOM 717 CG LEU A 89 -7.197 6.537 4.993 1.00 6.72 C +ATOM 718 CD1 LEU A 89 -6.028 5.834 5.676 1.00 6.72 C +ATOM 719 CD2 LEU A 89 -8.523 5.920 5.422 1.00 6.72 C +ATOM 720 N GLY A 90 -9.340 10.708 5.578 1.00 6.72 N +ATOM 721 CA GLY A 90 -9.715 11.894 6.333 1.00 6.72 C +ATOM 722 C GLY A 90 -10.588 12.851 5.544 1.00 6.72 C +ATOM 723 O GLY A 90 -11.001 13.892 6.061 1.00 6.72 O +ATOM 724 N PHE A 91 -10.821 12.471 4.312 1.00 8.64 N +ATOM 725 CA PHE A 91 -11.769 13.293 3.569 1.00 8.64 C +ATOM 726 C PHE A 91 -12.999 12.482 3.179 1.00 8.64 C +ATOM 727 CB PHE A 91 -11.109 13.881 2.318 1.00 8.64 C +ATOM 728 O PHE A 91 -12.889 11.479 2.471 1.00 8.64 O +ATOM 729 CG PHE A 91 -10.275 15.103 2.589 1.00 8.64 C +ATOM 730 CD1 PHE A 91 -8.918 14.989 2.865 1.00 8.64 C +ATOM 731 CD2 PHE A 91 -10.848 16.368 2.568 1.00 8.64 C +ATOM 732 CE1 PHE A 91 -8.143 16.119 3.117 1.00 8.64 C +ATOM 733 CE2 PHE A 91 -10.081 17.502 2.818 1.00 8.64 C +ATOM 734 CZ PHE A 91 -8.729 17.376 3.093 1.00 8.64 C +ATOM 735 N GLU A 92 -13.879 12.165 4.125 1.00 8.64 N +ATOM 736 CA GLU A 92 -15.112 11.423 3.881 1.00 8.64 C +ATOM 737 C GLU A 92 -16.103 12.251 3.067 1.00 8.64 C +ATOM 738 CB GLU A 92 -15.750 10.990 5.203 1.00 8.64 C +ATOM 739 O GLU A 92 -16.591 13.281 3.535 1.00 8.64 O +ATOM 740 CG GLU A 92 -15.244 9.651 5.721 1.00 8.64 C +ATOM 741 CD GLU A 92 -15.990 9.164 6.954 1.00 8.64 C +ATOM 742 OE1 GLU A 92 -15.708 8.041 7.429 1.00 8.64 O +ATOM 743 OE2 GLU A 92 -16.864 9.911 7.447 1.00 8.64 O +ATOM 744 N ASP A 93 -15.801 12.461 1.827 1.00 8.64 N +ATOM 745 CA ASP A 93 -17.029 12.844 1.137 1.00 8.64 C +ATOM 746 C ASP A 93 -17.790 11.614 0.648 1.00 8.64 C +ATOM 747 CB ASP A 93 -16.717 13.772 -0.039 1.00 8.64 C +ATOM 748 O ASP A 93 -17.320 10.899 -0.240 1.00 8.64 O +ATOM 749 CG ASP A 93 -17.958 14.419 -0.628 1.00 8.64 C +ATOM 750 OD1 ASP A 93 -17.828 15.359 -1.442 1.00 8.64 O +ATOM 751 OD2 ASP A 93 -19.076 13.986 -0.274 1.00 8.64 O +ATOM 752 N PRO A 94 -18.711 11.191 1.508 1.00 8.64 N +ATOM 753 CA PRO A 94 -19.501 10.003 1.175 1.00 8.64 C +ATOM 754 C PRO A 94 -20.029 10.028 -0.257 1.00 8.64 C +ATOM 755 CB PRO A 94 -20.652 10.050 2.183 1.00 8.64 C +ATOM 756 O PRO A 94 -20.234 8.972 -0.862 1.00 8.64 O +ATOM 757 CG PRO A 94 -20.438 11.316 2.948 1.00 8.64 C +ATOM 758 CD PRO A 94 -19.181 11.969 2.449 1.00 8.64 C +ATOM 759 N LYS A 95 -19.825 11.145 -1.002 1.00 8.64 N +ATOM 760 CA LYS A 95 -20.410 11.170 -2.340 1.00 8.64 C +ATOM 761 C LYS A 95 -19.342 11.416 -3.402 1.00 8.64 C +ATOM 762 CB LYS A 95 -21.496 12.243 -2.431 1.00 8.64 C +ATOM 763 O LYS A 95 -19.636 11.407 -4.599 1.00 8.64 O +ATOM 764 CG LYS A 95 -22.740 11.936 -1.610 1.00 8.64 C +ATOM 765 CD LYS A 95 -23.832 12.972 -1.841 1.00 8.64 C +ATOM 766 CE LYS A 95 -25.054 12.701 -0.973 1.00 8.64 C +ATOM 767 NZ LYS A 95 -26.134 13.705 -1.208 1.00 8.64 N +ATOM 768 N SER A 96 -18.077 11.513 -2.983 1.00 8.64 N +ATOM 769 CA SER A 96 -17.157 11.939 -4.032 1.00 8.64 C +ATOM 770 C SER A 96 -16.418 10.749 -4.635 1.00 8.64 C +ATOM 771 CB SER A 96 -16.149 12.950 -3.483 1.00 8.64 C +ATOM 772 O SER A 96 -15.813 9.955 -3.912 1.00 8.64 O +ATOM 773 OG SER A 96 -14.940 12.907 -4.222 1.00 8.64 O +ATOM 774 N PHE A 97 -16.938 10.059 -5.545 1.00 8.64 N +ATOM 775 CA PHE A 97 -16.265 9.188 -6.501 1.00 8.64 C +ATOM 776 C PHE A 97 -14.975 9.827 -7.000 1.00 8.64 C +ATOM 777 CB PHE A 97 -17.186 8.871 -7.683 1.00 8.64 C +ATOM 778 O PHE A 97 -14.111 9.144 -7.554 1.00 8.64 O +ATOM 779 CG PHE A 97 -18.358 7.998 -7.322 1.00 8.64 C +ATOM 780 CD1 PHE A 97 -19.593 8.558 -7.018 1.00 8.64 C +ATOM 781 CD2 PHE A 97 -18.224 6.616 -7.288 1.00 8.64 C +ATOM 782 CE1 PHE A 97 -20.679 7.752 -6.684 1.00 8.64 C +ATOM 783 CE2 PHE A 97 -19.305 5.804 -6.955 1.00 8.64 C +ATOM 784 CZ PHE A 97 -20.531 6.375 -6.652 1.00 8.64 C +ATOM 785 N LEU A 98 -14.602 11.045 -6.442 1.00 8.64 N +ATOM 786 CA LEU A 98 -13.538 11.768 -7.129 1.00 8.64 C +ATOM 787 C LEU A 98 -12.193 11.530 -6.451 1.00 8.64 C +ATOM 788 CB LEU A 98 -13.845 13.267 -7.166 1.00 8.64 C +ATOM 789 O LEU A 98 -11.141 11.781 -7.043 1.00 8.64 O +ATOM 790 CG LEU A 98 -14.980 13.704 -8.094 1.00 8.64 C +ATOM 791 CD1 LEU A 98 -15.347 15.161 -7.833 1.00 8.64 C +ATOM 792 CD2 LEU A 98 -14.586 13.500 -9.553 1.00 8.64 C +ATOM 793 N SER A 99 -12.192 10.556 -5.446 1.00 8.64 N +ATOM 794 CA SER A 99 -10.815 10.410 -4.984 1.00 8.64 C +ATOM 795 C SER A 99 -10.321 8.979 -5.164 1.00 8.64 C +ATOM 796 CB SER A 99 -10.696 10.819 -3.515 1.00 8.64 C +ATOM 797 O SER A 99 -9.273 8.607 -4.630 1.00 8.64 O +ATOM 798 OG SER A 99 -11.600 10.080 -2.712 1.00 8.64 O +ATOM 799 N ILE A 100 -11.121 8.337 -6.116 1.00 6.72 N +ATOM 800 CA ILE A 100 -10.638 6.974 -6.304 1.00 6.72 C +ATOM 801 C ILE A 100 -9.891 6.870 -7.632 1.00 6.72 C +ATOM 802 CB ILE A 100 -11.796 5.953 -6.259 1.00 6.72 C +ATOM 803 O ILE A 100 -10.389 7.318 -8.668 1.00 6.72 O +ATOM 804 CG1 ILE A 100 -12.507 6.010 -4.902 1.00 6.72 C +ATOM 805 CG2 ILE A 100 -11.282 4.539 -6.549 1.00 6.72 C +ATOM 806 CD1 ILE A 100 -13.793 5.197 -4.841 1.00 6.72 C +ATOM 807 N LYS A 101 -8.620 6.701 -7.581 1.00 6.72 N +ATOM 808 CA LYS A 101 -7.845 6.403 -8.782 1.00 6.72 C +ATOM 809 C LYS A 101 -7.608 4.902 -8.924 1.00 6.72 C +ATOM 810 CB LYS A 101 -6.507 7.144 -8.756 1.00 6.72 C +ATOM 811 O LYS A 101 -7.289 4.223 -7.946 1.00 6.72 O +ATOM 812 CG LYS A 101 -6.629 8.647 -8.958 1.00 6.72 C +ATOM 813 CD LYS A 101 -5.263 9.304 -9.110 1.00 6.72 C +ATOM 814 CE LYS A 101 -5.380 10.815 -9.257 1.00 6.72 C +ATOM 815 NZ LYS A 101 -4.046 11.459 -9.443 1.00 6.72 N +ATOM 816 N GLU A 102 -8.161 4.357 -9.913 1.00 8.64 N +ATOM 817 CA GLU A 102 -7.946 2.952 -10.245 1.00 8.64 C +ATOM 818 C GLU A 102 -6.847 2.794 -11.292 1.00 8.64 C +ATOM 819 CB GLU A 102 -9.244 2.312 -10.744 1.00 8.64 C +ATOM 820 O GLU A 102 -6.808 3.537 -12.275 1.00 8.64 O +ATOM 821 CG GLU A 102 -9.192 0.793 -10.818 1.00 8.64 C +ATOM 822 CD GLU A 102 -10.515 0.167 -11.229 1.00 8.64 C +ATOM 823 OE1 GLU A 102 -10.588 -0.435 -12.325 1.00 8.64 O +ATOM 824 OE2 GLU A 102 -11.488 0.280 -10.449 1.00 8.64 O +ATOM 825 N TYR A 103 -5.920 1.999 -10.999 1.00 6.72 N +ATOM 826 CA TYR A 103 -4.857 1.671 -11.943 1.00 6.72 C +ATOM 827 C TYR A 103 -5.001 0.241 -12.451 1.00 6.72 C +ATOM 828 CB TYR A 103 -3.483 1.857 -11.292 1.00 6.72 C +ATOM 829 O TYR A 103 -5.256 -0.679 -11.670 1.00 6.72 O +ATOM 830 CG TYR A 103 -3.244 3.253 -10.767 1.00 6.72 C +ATOM 831 CD1 TYR A 103 -3.589 3.595 -9.462 1.00 6.72 C +ATOM 832 CD2 TYR A 103 -2.676 4.231 -11.576 1.00 6.72 C +ATOM 833 CE1 TYR A 103 -3.372 4.880 -8.975 1.00 6.72 C +ATOM 834 CE2 TYR A 103 -2.455 5.519 -11.100 1.00 6.72 C +ATOM 835 OH TYR A 103 -2.589 7.107 -9.323 1.00 6.72 O +ATOM 836 CZ TYR A 103 -2.805 5.833 -9.800 1.00 6.72 C +ATOM 837 N LYS A 104 -5.083 -0.004 -13.802 1.00 8.64 N +ATOM 838 CA LYS A 104 -5.140 -1.339 -14.393 1.00 8.64 C +ATOM 839 C LYS A 104 -3.759 -1.796 -14.852 1.00 8.64 C +ATOM 840 CB LYS A 104 -6.119 -1.364 -15.568 1.00 8.64 C +ATOM 841 O LYS A 104 -3.042 -1.048 -15.520 1.00 8.64 O +ATOM 842 CG LYS A 104 -6.341 -2.749 -16.158 1.00 8.64 C +ATOM 843 CD LYS A 104 -7.313 -2.708 -17.331 1.00 8.64 C +ATOM 844 CE LYS A 104 -7.429 -4.065 -18.010 1.00 8.64 C +ATOM 845 NZ LYS A 104 -8.354 -4.022 -19.181 1.00 8.64 N +ATOM 846 N PHE A 105 -3.346 -2.868 -14.276 1.00 8.64 N +ATOM 847 CA PHE A 105 -2.144 -3.522 -14.782 1.00 8.64 C +ATOM 848 C PHE A 105 -2.504 -4.749 -15.611 1.00 8.64 C +ATOM 849 CB PHE A 105 -1.221 -3.921 -13.626 1.00 8.64 C +ATOM 850 O PHE A 105 -3.367 -5.537 -15.220 1.00 8.64 O +ATOM 851 CG PHE A 105 -0.739 -2.756 -12.804 1.00 8.64 C +ATOM 852 CD1 PHE A 105 -1.429 -2.357 -11.666 1.00 8.64 C +ATOM 853 CD2 PHE A 105 0.405 -2.059 -13.171 1.00 8.64 C +ATOM 854 CE1 PHE A 105 -0.985 -1.279 -10.904 1.00 8.64 C +ATOM 855 CE2 PHE A 105 0.855 -0.981 -12.414 1.00 8.64 C +ATOM 856 CZ PHE A 105 0.158 -0.592 -11.282 1.00 8.64 C +ATOM 857 N GLY A 106 -2.172 -4.885 -16.945 1.00 8.64 N +ATOM 858 CA GLY A 106 -2.470 -5.978 -17.858 1.00 8.64 C +ATOM 859 C GLY A 106 -1.496 -7.136 -17.740 1.00 8.64 C +ATOM 860 O GLY A 106 -0.364 -6.957 -17.287 1.00 8.64 O +ATOM 861 N THR A 107 -1.964 -8.404 -17.592 1.00 8.64 N +ATOM 862 CA THR A 107 -1.518 -9.786 -17.454 1.00 8.64 C +ATOM 863 C THR A 107 -0.972 -10.313 -18.777 1.00 8.64 C +ATOM 864 CB THR A 107 -2.662 -10.696 -16.969 1.00 8.64 C +ATOM 865 O THR A 107 -0.155 -11.237 -18.794 1.00 8.64 O +ATOM 866 CG2 THR A 107 -2.988 -10.435 -15.502 1.00 8.64 C +ATOM 867 OG1 THR A 107 -3.831 -10.446 -17.758 1.00 8.64 O +ATOM 868 N ARG A 108 -0.421 -9.500 -19.707 1.00 8.64 N +ATOM 869 CA ARG A 108 0.415 -10.048 -20.770 1.00 8.64 C +ATOM 870 C ARG A 108 0.370 -9.165 -22.012 1.00 8.64 C +ATOM 871 CB ARG A 108 -0.025 -11.471 -21.121 1.00 8.64 C +ATOM 872 O ARG A 108 1.162 -9.347 -22.939 1.00 8.64 O +ATOM 873 CG ARG A 108 0.888 -12.553 -20.567 1.00 8.64 C +ATOM 874 CD ARG A 108 0.437 -13.943 -20.992 1.00 8.64 C +ATOM 875 NE ARG A 108 1.440 -14.956 -20.674 1.00 8.64 N +ATOM 876 NH1 ARG A 108 0.214 -16.728 -21.506 1.00 8.64 N +ATOM 877 NH2 ARG A 108 2.286 -17.089 -20.593 1.00 8.64 N +ATOM 878 CZ ARG A 108 1.311 -16.255 -20.925 1.00 8.64 C +ATOM 879 N THR A 109 0.007 -7.906 -21.921 1.00 8.64 N +ATOM 880 CA THR A 109 0.199 -7.193 -23.179 1.00 8.64 C +ATOM 881 C THR A 109 0.557 -5.731 -22.923 1.00 8.64 C +ATOM 882 CB THR A 109 -1.060 -7.269 -24.063 1.00 8.64 C +ATOM 883 O THR A 109 -0.113 -5.050 -22.143 1.00 8.64 O +ATOM 884 CG2 THR A 109 -1.194 -8.643 -24.711 1.00 8.64 C +ATOM 885 OG1 THR A 109 -2.218 -7.018 -23.257 1.00 8.64 O +ATOM 886 N GLY A 110 1.725 -5.448 -22.409 1.00 8.64 N +ATOM 887 CA GLY A 110 2.620 -4.305 -22.494 1.00 8.64 C +ATOM 888 C GLY A 110 1.933 -3.044 -22.984 1.00 8.64 C +ATOM 889 O GLY A 110 1.499 -2.976 -24.136 1.00 8.64 O +ATOM 890 N GLY A 111 0.749 -2.551 -22.421 1.00 8.64 N +ATOM 891 CA GLY A 111 0.179 -1.258 -22.766 1.00 8.64 C +ATOM 892 C GLY A 111 1.093 -0.094 -22.431 1.00 8.64 C +ATOM 893 O GLY A 111 1.993 -0.225 -21.598 1.00 8.64 O +ATOM 894 N ASN A 112 1.646 0.666 -23.583 1.00 8.64 N +ATOM 895 CA ASN A 112 2.351 1.904 -23.896 1.00 8.64 C +ATOM 896 C ASN A 112 2.500 2.792 -22.664 1.00 8.64 C +ATOM 897 CB ASN A 112 1.633 2.664 -25.014 1.00 8.64 C +ATOM 898 O ASN A 112 1.528 3.028 -21.943 1.00 8.64 O +ATOM 899 CG ASN A 112 1.795 2.002 -26.368 1.00 8.64 C +ATOM 900 ND2 ASN A 112 0.868 2.277 -27.278 1.00 8.64 N +ATOM 901 OD1 ASN A 112 2.746 1.248 -26.594 1.00 8.64 O +ATOM 902 N PHE A 113 3.510 2.618 -21.947 1.00 8.64 N +ATOM 903 CA PHE A 113 4.082 3.644 -21.083 1.00 8.64 C +ATOM 904 C PHE A 113 4.194 4.972 -21.821 1.00 8.64 C +ATOM 905 CB PHE A 113 5.459 3.211 -20.570 1.00 8.64 C +ATOM 906 O PHE A 113 4.651 5.016 -22.966 1.00 8.64 O +ATOM 907 CG PHE A 113 5.526 3.047 -19.075 1.00 8.64 C +ATOM 908 CD1 PHE A 113 5.224 1.827 -18.482 1.00 8.64 C +ATOM 909 CD2 PHE A 113 5.890 4.113 -18.264 1.00 8.64 C +ATOM 910 CE1 PHE A 113 5.285 1.672 -17.099 1.00 8.64 C +ATOM 911 CE2 PHE A 113 5.953 3.966 -16.881 1.00 8.64 C +ATOM 912 CZ PHE A 113 5.649 2.745 -16.300 1.00 8.64 C +ATOM 913 N THR A 114 3.305 5.791 -21.704 1.00 8.64 N +ATOM 914 CA THR A 114 3.524 7.113 -22.280 1.00 8.64 C +ATOM 915 C THR A 114 4.409 7.959 -21.369 1.00 8.64 C +ATOM 916 CB THR A 114 2.190 7.843 -22.526 1.00 8.64 C +ATOM 917 O THR A 114 4.850 9.044 -21.756 1.00 8.64 O +ATOM 918 CG2 THR A 114 1.348 7.113 -23.568 1.00 8.64 C +ATOM 919 OG1 THR A 114 1.456 7.913 -21.298 1.00 8.64 O +ATOM 920 N GLY A 115 5.268 7.248 -20.677 1.00 8.64 N +ATOM 921 CA GLY A 115 6.263 8.086 -20.027 1.00 8.64 C +ATOM 922 C GLY A 115 7.507 7.322 -19.614 1.00 8.64 C +ATOM 923 O GLY A 115 7.525 6.090 -19.647 1.00 8.64 O +ATOM 924 N GLU A 116 8.641 7.657 -20.084 1.00 8.64 N +ATOM 925 CA GLU A 116 9.970 7.216 -19.672 1.00 8.64 C +ATOM 926 C GLU A 116 10.120 7.260 -18.154 1.00 8.64 C +ATOM 927 CB GLU A 116 11.051 8.077 -20.332 1.00 8.64 C +ATOM 928 O GLU A 116 9.646 8.194 -17.505 1.00 8.64 O +ATOM 929 CG GLU A 116 11.400 7.645 -21.749 1.00 8.64 C +ATOM 930 CD GLU A 116 12.569 8.417 -22.341 1.00 8.64 C +ATOM 931 OE1 GLU A 116 12.995 8.099 -23.474 1.00 8.64 O +ATOM 932 OE2 GLU A 116 13.062 9.347 -21.665 1.00 8.64 O +ATOM 933 N LEU A 117 10.088 5.989 -17.564 1.00 8.64 N +ATOM 934 CA LEU A 117 10.578 5.973 -16.190 1.00 8.64 C +ATOM 935 C LEU A 117 12.036 6.415 -16.127 1.00 8.64 C +ATOM 936 CB LEU A 117 10.430 4.575 -15.584 1.00 8.64 C +ATOM 937 O LEU A 117 12.809 6.155 -17.053 1.00 8.64 O +ATOM 938 CG LEU A 117 9.001 4.097 -15.323 1.00 8.64 C +ATOM 939 CD1 LEU A 117 8.989 2.601 -15.025 1.00 8.64 C +ATOM 940 CD2 LEU A 117 8.376 4.881 -14.175 1.00 8.64 C +ATOM 941 N THR A 118 12.196 7.278 -15.327 1.00 8.64 N +ATOM 942 CA THR A 118 13.590 7.626 -15.076 1.00 8.64 C +ATOM 943 C THR A 118 14.353 6.432 -14.511 1.00 8.64 C +ATOM 944 CB THR A 118 13.702 8.816 -14.105 1.00 8.64 C +ATOM 945 O THR A 118 13.747 5.457 -14.061 1.00 8.64 O +ATOM 946 CG2 THR A 118 12.896 10.011 -14.604 1.00 8.64 C +ATOM 947 OG1 THR A 118 13.207 8.424 -12.818 1.00 8.64 O +ATOM 948 N LYS A 119 15.698 6.199 -14.938 1.00 8.64 N +ATOM 949 CA LYS A 119 16.574 5.167 -14.391 1.00 8.64 C +ATOM 950 C LYS A 119 16.371 5.015 -12.886 1.00 8.64 C +ATOM 951 CB LYS A 119 18.038 5.489 -14.693 1.00 8.64 C +ATOM 952 O LYS A 119 16.303 3.897 -12.373 1.00 8.64 O +ATOM 953 CG LYS A 119 18.973 4.296 -14.566 1.00 8.64 C +ATOM 954 CD LYS A 119 20.389 4.646 -15.006 1.00 8.64 C +ATOM 955 CE LYS A 119 21.344 3.477 -14.803 1.00 8.64 C +ATOM 956 NZ LYS A 119 22.724 3.802 -15.272 1.00 8.64 N +ATOM 957 N GLN A 120 16.211 6.129 -12.176 1.00 8.64 N +ATOM 958 CA GLN A 120 16.025 6.126 -10.729 1.00 8.64 C +ATOM 959 C GLN A 120 14.683 5.507 -10.349 1.00 8.64 C +ATOM 960 CB GLN A 120 16.124 7.547 -10.171 1.00 8.64 C +ATOM 961 O GLN A 120 14.600 4.729 -9.396 1.00 8.64 O +ATOM 962 CG GLN A 120 17.540 7.960 -9.792 1.00 8.64 C +ATOM 963 CD GLN A 120 17.891 9.357 -10.270 1.00 8.64 C +ATOM 964 NE2 GLN A 120 19.145 9.751 -10.077 1.00 8.64 N +ATOM 965 OE1 GLN A 120 17.043 10.074 -10.809 1.00 8.64 O +ATOM 966 N GLU A 121 13.628 5.733 -11.076 1.00 8.64 N +ATOM 967 CA GLU A 121 12.298 5.200 -10.795 1.00 8.64 C +ATOM 968 C GLU A 121 12.253 3.689 -11.006 1.00 8.64 C +ATOM 969 CB GLU A 121 11.248 5.885 -11.674 1.00 8.64 C +ATOM 970 O GLU A 121 11.648 2.965 -10.213 1.00 8.64 O +ATOM 971 CG GLU A 121 10.953 7.323 -11.272 1.00 8.64 C +ATOM 972 CD GLU A 121 10.094 8.064 -12.284 1.00 8.64 C +ATOM 973 OE1 GLU A 121 9.364 9.002 -11.889 1.00 8.64 O +ATOM 974 OE2 GLU A 121 10.149 7.704 -13.481 1.00 8.64 O +ATOM 975 N LEU A 122 12.979 3.340 -12.063 1.00 8.64 N +ATOM 976 CA LEU A 122 13.046 1.913 -12.359 1.00 8.64 C +ATOM 977 C LEU A 122 13.813 1.168 -11.272 1.00 8.64 C +ATOM 978 CB LEU A 122 13.709 1.678 -13.719 1.00 8.64 C +ATOM 979 O LEU A 122 13.397 0.090 -10.840 1.00 8.64 O +ATOM 980 CG LEU A 122 12.936 0.805 -14.709 1.00 8.64 C +ATOM 981 CD1 LEU A 122 12.751 1.540 -16.032 1.00 8.64 C +ATOM 982 CD2 LEU A 122 13.653 -0.523 -14.925 1.00 8.64 C +ATOM 983 N VAL A 123 14.840 1.780 -10.710 1.00 8.64 N +ATOM 984 CA VAL A 123 15.653 1.191 -9.651 1.00 8.64 C +ATOM 985 C VAL A 123 14.832 1.085 -8.368 1.00 8.64 C +ATOM 986 CB VAL A 123 16.936 2.013 -9.397 1.00 8.64 C +ATOM 987 O VAL A 123 14.826 0.040 -7.712 1.00 8.64 O +ATOM 988 CG1 VAL A 123 17.646 1.529 -8.134 1.00 8.64 C +ATOM 989 CG2 VAL A 123 17.870 1.931 -10.603 1.00 8.64 C +ATOM 990 N TYR A 124 14.059 2.039 -8.098 1.00 8.64 N +ATOM 991 CA TYR A 124 13.254 2.069 -6.881 1.00 8.64 C +ATOM 992 C TYR A 124 12.121 1.051 -6.952 1.00 8.64 C +ATOM 993 CB TYR A 124 12.683 3.471 -6.649 1.00 8.64 C +ATOM 994 O TYR A 124 11.855 0.342 -5.979 1.00 8.64 O +ATOM 995 CG TYR A 124 13.673 4.438 -6.047 1.00 8.64 C +ATOM 996 CD1 TYR A 124 13.975 5.640 -6.682 1.00 8.64 C +ATOM 997 CD2 TYR A 124 14.309 4.151 -4.844 1.00 8.64 C +ATOM 998 CE1 TYR A 124 14.889 6.534 -6.133 1.00 8.64 C +ATOM 999 CE2 TYR A 124 15.225 5.037 -4.286 1.00 8.64 C +ATOM 1000 OH TYR A 124 16.413 7.105 -4.387 1.00 8.64 O +ATOM 1001 CZ TYR A 124 15.507 6.224 -4.936 1.00 8.64 C +ATOM 1002 N THR A 125 11.428 1.001 -8.096 1.00 6.72 N +ATOM 1003 CA THR A 125 10.313 0.078 -8.276 1.00 6.72 C +ATOM 1004 C THR A 125 10.789 -1.369 -8.188 1.00 6.72 C +ATOM 1005 CB THR A 125 9.609 0.308 -9.626 1.00 6.72 C +ATOM 1006 O THR A 125 10.169 -2.192 -7.510 1.00 6.72 O +ATOM 1007 CG2 THR A 125 8.382 -0.585 -9.767 1.00 6.72 C +ATOM 1008 OG1 THR A 125 9.202 1.679 -9.718 1.00 6.72 O +ATOM 1009 N ASN A 126 11.985 -1.576 -8.827 1.00 8.64 N +ATOM 1010 CA ASN A 126 12.563 -2.916 -8.803 1.00 8.64 C +ATOM 1011 C ASN A 126 13.002 -3.311 -7.396 1.00 8.64 C +ATOM 1012 CB ASN A 126 13.742 -3.009 -9.773 1.00 8.64 C +ATOM 1013 O ASN A 126 12.771 -4.442 -6.965 1.00 8.64 O +ATOM 1014 CG ASN A 126 13.310 -3.334 -11.189 1.00 8.64 C +ATOM 1015 ND2 ASN A 126 14.170 -3.035 -12.156 1.00 8.64 N +ATOM 1016 OD1 ASN A 126 12.211 -3.848 -11.413 1.00 8.64 O +ATOM 1017 N GLN A 127 13.590 -2.342 -6.627 1.00 8.64 N +ATOM 1018 CA GLN A 127 14.004 -2.576 -5.247 1.00 8.64 C +ATOM 1019 C GLN A 127 12.798 -2.827 -4.346 1.00 8.64 C +ATOM 1020 CB GLN A 127 14.814 -1.390 -4.721 1.00 8.64 C +ATOM 1021 O GLN A 127 12.824 -3.725 -3.501 1.00 8.64 O +ATOM 1022 CG GLN A 127 16.303 -1.478 -5.029 1.00 8.64 C +ATOM 1023 CD GLN A 127 17.083 -0.291 -4.496 1.00 8.64 C +ATOM 1024 NE2 GLN A 127 18.405 -0.421 -4.454 1.00 8.64 N +ATOM 1025 OE1 GLN A 127 16.503 0.734 -4.125 1.00 8.64 O +ATOM 1026 N TRP A 128 11.824 -2.167 -4.535 1.00 6.72 N +ATOM 1027 CA TRP A 128 10.602 -2.286 -3.746 1.00 6.72 C +ATOM 1028 C TRP A 128 9.926 -3.632 -3.989 1.00 6.72 C +ATOM 1029 CB TRP A 128 9.634 -1.147 -4.077 1.00 6.72 C +ATOM 1030 O TRP A 128 9.562 -4.331 -3.040 1.00 6.72 O +ATOM 1031 CG TRP A 128 8.375 -1.162 -3.264 1.00 6.72 C +ATOM 1032 CD1 TRP A 128 8.207 -0.675 -1.997 1.00 6.72 C +ATOM 1033 CD2 TRP A 128 7.108 -1.696 -3.661 1.00 6.72 C +ATOM 1034 CE2 TRP A 128 6.216 -1.497 -2.584 1.00 6.72 C +ATOM 1035 CE3 TRP A 128 6.641 -2.322 -4.824 1.00 6.72 C +ATOM 1036 NE1 TRP A 128 6.910 -0.874 -1.583 1.00 6.72 N +ATOM 1037 CH2 TRP A 128 4.449 -2.515 -3.786 1.00 6.72 C +ATOM 1038 CZ2 TRP A 128 4.880 -1.904 -2.637 1.00 6.72 C +ATOM 1039 CZ3 TRP A 128 5.311 -2.726 -4.874 1.00 6.72 C +ATOM 1040 N VAL A 129 9.837 -4.041 -5.286 1.00 6.72 N +ATOM 1041 CA VAL A 129 9.170 -5.280 -5.670 1.00 6.72 C +ATOM 1042 C VAL A 129 9.963 -6.477 -5.149 1.00 6.72 C +ATOM 1043 CB VAL A 129 8.999 -5.381 -7.203 1.00 6.72 C +ATOM 1044 O VAL A 129 9.389 -7.411 -4.585 1.00 6.72 O +ATOM 1045 CG1 VAL A 129 8.505 -6.771 -7.600 1.00 6.72 C +ATOM 1046 CG2 VAL A 129 8.036 -4.306 -7.703 1.00 6.72 C +ATOM 1047 N ASN A 130 11.351 -6.333 -5.277 1.00 8.64 N +ATOM 1048 CA ASN A 130 12.247 -7.407 -4.861 1.00 8.64 C +ATOM 1049 C ASN A 130 12.259 -7.571 -3.344 1.00 8.64 C +ATOM 1050 CB ASN A 130 13.664 -7.155 -5.379 1.00 8.64 C +ATOM 1051 O ASN A 130 12.263 -8.695 -2.837 1.00 8.64 O +ATOM 1052 CG ASN A 130 13.854 -7.617 -6.810 1.00 8.64 C +ATOM 1053 ND2 ASN A 130 14.863 -7.073 -7.481 1.00 8.64 N +ATOM 1054 OD1 ASN A 130 13.100 -8.457 -7.309 1.00 8.64 O +ATOM 1055 N GLU A 131 12.069 -6.443 -2.521 1.00 8.64 N +ATOM 1056 CA GLU A 131 12.094 -6.449 -1.061 1.00 8.64 C +ATOM 1057 C GLU A 131 10.759 -6.913 -0.488 1.00 8.64 C +ATOM 1058 CB GLU A 131 12.442 -5.058 -0.524 1.00 8.64 C +ATOM 1059 O GLU A 131 10.721 -7.591 0.541 1.00 8.64 O +ATOM 1060 CG GLU A 131 13.913 -4.694 -0.665 1.00 8.64 C +ATOM 1061 CD GLU A 131 14.234 -3.292 -0.171 1.00 8.64 C +ATOM 1062 OE1 GLU A 131 15.414 -2.879 -0.244 1.00 8.64 O +ATOM 1063 OE2 GLU A 131 13.299 -2.603 0.293 1.00 8.64 O +ATOM 1064 N ASN A 132 9.736 -6.720 -1.184 1.00 8.64 N +ATOM 1065 CA ASN A 132 8.429 -6.916 -0.566 1.00 8.64 C +ATOM 1066 C ASN A 132 7.786 -8.224 -1.016 1.00 8.64 C +ATOM 1067 CB ASN A 132 7.506 -5.736 -0.876 1.00 8.64 C +ATOM 1068 O ASN A 132 7.067 -8.865 -0.247 1.00 8.64 O +ATOM 1069 CG ASN A 132 7.833 -4.505 -0.054 1.00 8.64 C +ATOM 1070 ND2 ASN A 132 8.463 -3.521 -0.684 1.00 8.64 N +ATOM 1071 OD1 ASN A 132 7.524 -4.440 1.139 1.00 8.64 O +ATOM 1072 N ILE A 133 8.282 -8.675 -2.231 1.00 8.64 N +ATOM 1073 CA ILE A 133 7.755 -9.943 -2.723 1.00 8.64 C +ATOM 1074 C ILE A 133 8.504 -11.102 -2.068 1.00 8.64 C +ATOM 1075 CB ILE A 133 7.858 -10.039 -4.261 1.00 8.64 C +ATOM 1076 O ILE A 133 7.902 -12.121 -1.721 1.00 8.64 O +ATOM 1077 CG1 ILE A 133 6.915 -9.029 -4.924 1.00 8.64 C +ATOM 1078 CG2 ILE A 133 7.555 -11.464 -4.735 1.00 8.64 C +ATOM 1079 CD1 ILE A 133 7.015 -8.993 -6.443 1.00 8.64 C +ATOM 1080 N THR A 134 9.730 -10.791 -1.686 1.00 8.64 N +ATOM 1081 CA THR A 134 10.543 -11.821 -1.050 1.00 8.64 C +ATOM 1082 C THR A 134 10.104 -12.041 0.394 1.00 8.64 C +ATOM 1083 CB THR A 134 12.038 -11.453 -1.085 1.00 8.64 C +ATOM 1084 O THR A 134 10.048 -13.179 0.865 1.00 8.64 O +ATOM 1085 CG2 THR A 134 12.910 -12.668 -0.785 1.00 8.64 C +ATOM 1086 OG1 THR A 134 12.370 -10.951 -2.386 1.00 8.64 O +ATOM 1087 N LEU A 135 9.481 -11.013 1.084 1.00 8.64 N +ATOM 1088 CA LEU A 135 9.061 -11.103 2.479 1.00 8.64 C +ATOM 1089 C LEU A 135 7.653 -11.678 2.586 1.00 8.64 C +ATOM 1090 CB LEU A 135 9.114 -9.726 3.145 1.00 8.64 C +ATOM 1091 O LEU A 135 7.369 -12.474 3.484 1.00 8.64 O +ATOM 1092 CG LEU A 135 10.480 -9.278 3.668 1.00 8.64 C +ATOM 1093 CD1 LEU A 135 10.532 -7.758 3.780 1.00 8.64 C +ATOM 1094 CD2 LEU A 135 10.777 -9.929 5.014 1.00 8.64 C +ATOM 1095 N ALA A 136 6.896 -11.485 1.503 1.00 8.64 N +ATOM 1096 CA ALA A 136 5.482 -11.826 1.637 1.00 8.64 C +ATOM 1097 C ALA A 136 5.208 -13.240 1.133 1.00 8.64 C +ATOM 1098 CB ALA A 136 4.618 -10.818 0.882 1.00 8.64 C +ATOM 1099 O ALA A 136 4.289 -13.909 1.611 1.00 8.64 O +ATOM 1100 N ASN A 137 6.194 -13.758 0.415 1.00 8.64 N +ATOM 1101 CA ASN A 137 6.057 -15.090 -0.164 1.00 8.64 C +ATOM 1102 C ASN A 137 6.849 -16.128 0.626 1.00 8.64 C +ATOM 1103 CB ASN A 137 6.499 -15.087 -1.629 1.00 8.64 C +ATOM 1104 O ASN A 137 8.055 -15.975 0.826 1.00 8.64 O +ATOM 1105 CG ASN A 137 5.464 -14.473 -2.550 1.00 8.64 C +ATOM 1106 ND2 ASN A 137 5.908 -13.993 -3.705 1.00 8.64 N +ATOM 1107 OD1 ASN A 137 4.274 -14.431 -2.226 1.00 8.64 O +ATOM 1108 N GLY A 138 6.587 -16.377 1.995 1.00 8.64 N +ATOM 1109 CA GLY A 138 6.876 -17.550 2.803 1.00 8.64 C +ATOM 1110 C GLY A 138 7.966 -18.427 2.215 1.00 8.64 C +ATOM 1111 O GLY A 138 8.031 -19.623 2.504 1.00 8.64 O +ATOM 1112 N TYR A 139 9.137 -17.824 1.543 1.00 8.64 N +ATOM 1113 CA TYR A 139 10.214 -18.693 1.080 1.00 8.64 C +ATOM 1114 C TYR A 139 11.083 -19.153 2.245 1.00 8.64 C +ATOM 1115 CB TYR A 139 11.076 -17.973 0.039 1.00 8.64 C +ATOM 1116 O TYR A 139 11.385 -18.370 3.149 1.00 8.64 O +ATOM 1117 CG TYR A 139 10.546 -18.087 -1.370 1.00 8.64 C +ATOM 1118 CD1 TYR A 139 9.749 -17.085 -1.919 1.00 8.64 C +ATOM 1119 CD2 TYR A 139 10.841 -19.197 -2.155 1.00 8.64 C +ATOM 1120 CE1 TYR A 139 9.257 -17.187 -3.216 1.00 8.64 C +ATOM 1121 CE2 TYR A 139 10.355 -19.309 -3.454 1.00 8.64 C +ATOM 1122 OH TYR A 139 9.082 -18.406 -5.260 1.00 8.64 O +ATOM 1123 CZ TYR A 139 9.566 -18.300 -3.975 1.00 8.64 C +ATOM 1124 N ILE A 140 10.744 -20.317 2.913 1.00 8.64 N +ATOM 1125 CA ILE A 140 11.618 -21.208 3.668 1.00 8.64 C +ATOM 1126 C ILE A 140 13.062 -21.031 3.204 1.00 8.64 C +ATOM 1127 CB ILE A 140 11.185 -22.684 3.518 1.00 8.64 C +ATOM 1128 O ILE A 140 13.364 -21.194 2.020 1.00 8.64 O +ATOM 1129 CG1 ILE A 140 9.748 -22.872 4.019 1.00 8.64 C +ATOM 1130 CG2 ILE A 140 12.150 -23.609 4.265 1.00 8.64 C +ATOM 1131 CD1 ILE A 140 9.252 -24.310 3.951 1.00 8.64 C +ATOM 1132 N SER A 141 13.713 -20.010 3.556 1.00 8.64 N +ATOM 1133 CA SER A 141 15.171 -20.025 3.497 1.00 8.64 C +ATOM 1134 C SER A 141 15.734 -21.319 4.073 1.00 8.64 C +ATOM 1135 CB SER A 141 15.750 -18.827 4.252 1.00 8.64 C +ATOM 1136 O SER A 141 15.479 -21.652 5.233 1.00 8.64 O +ATOM 1137 OG SER A 141 17.145 -18.982 4.447 1.00 8.64 O +ATOM 1138 N ALA A 142 15.693 -22.473 3.364 1.00 8.64 N +ATOM 1139 CA ALA A 142 16.460 -23.706 3.208 1.00 8.64 C +ATOM 1140 C ALA A 142 17.958 -23.439 3.331 1.00 8.64 C +ATOM 1141 CB ALA A 142 16.148 -24.360 1.864 1.00 8.64 C +ATOM 1142 O ALA A 142 18.474 -22.483 2.749 1.00 8.64 O +ATOM 1143 N ASP A 143 18.576 -22.902 4.585 1.00 8.64 N +ATOM 1144 CA ASP A 143 19.977 -23.243 4.809 1.00 8.64 C +ATOM 1145 C ASP A 143 20.646 -22.233 5.738 1.00 8.64 C +ATOM 1146 CB ASP A 143 20.732 -23.315 3.480 1.00 8.64 C +ATOM 1147 O ASP A 143 20.988 -21.126 5.317 1.00 8.64 O +ATOM 1148 CG ASP A 143 21.865 -24.326 3.495 1.00 8.64 C +ATOM 1149 OD1 ASP A 143 22.444 -24.609 2.424 1.00 8.64 O +ATOM 1150 OD2 ASP A 143 22.180 -24.846 4.587 1.00 8.64 O +ATOM 1151 N SER A 144 20.228 -21.957 7.002 1.00 8.64 N +ATOM 1152 CA SER A 144 21.341 -21.510 7.832 1.00 8.64 C +ATOM 1153 C SER A 144 21.253 -22.095 9.238 1.00 8.64 C +ATOM 1154 CB SER A 144 21.373 -19.983 7.908 1.00 8.64 C +ATOM 1155 O SER A 144 21.817 -21.541 10.183 1.00 8.64 O +ATOM 1156 OG SER A 144 20.155 -19.479 8.427 1.00 8.64 O +ATOM 1157 N ARG A 145 20.767 -23.335 9.468 1.00 8.64 N +ATOM 1158 CA ARG A 145 20.907 -23.823 10.836 1.00 8.64 C +ATOM 1159 C ARG A 145 22.363 -24.145 11.156 1.00 8.64 C +ATOM 1160 CB ARG A 145 20.036 -25.062 11.058 1.00 8.64 C +ATOM 1161 O ARG A 145 23.035 -24.835 10.387 1.00 8.64 O +ATOM 1162 CG ARG A 145 18.542 -24.781 11.007 1.00 8.64 C +ATOM 1163 CD ARG A 145 17.724 -26.058 11.140 1.00 8.64 C +ATOM 1164 NE ARG A 145 17.859 -26.910 9.963 1.00 8.64 N +ATOM 1165 NH1 ARG A 145 16.657 -28.674 10.846 1.00 8.64 N +ATOM 1166 NH2 ARG A 145 17.532 -28.821 8.732 1.00 8.64 N +ATOM 1167 CZ ARG A 145 17.349 -28.133 9.850 1.00 8.64 C +ATOM 1168 N THR A 146 23.240 -23.194 11.377 1.00 8.64 N +ATOM 1169 CA THR A 146 24.353 -23.445 12.287 1.00 8.64 C +ATOM 1170 C THR A 146 23.848 -23.974 13.626 1.00 8.64 C +ATOM 1171 CB THR A 146 25.186 -22.170 12.516 1.00 8.64 C +ATOM 1172 O THR A 146 22.915 -23.417 14.208 1.00 8.64 O +ATOM 1173 CG2 THR A 146 26.113 -21.899 11.336 1.00 8.64 C +ATOM 1174 OG1 THR A 146 24.303 -21.054 12.683 1.00 8.64 O +ATOM 1175 N VAL A 147 23.601 -25.297 13.669 1.00 8.64 N +ATOM 1176 CA VAL A 147 23.604 -26.015 14.940 1.00 8.64 C +ATOM 1177 C VAL A 147 25.042 -26.295 15.372 1.00 8.64 C +ATOM 1178 CB VAL A 147 22.809 -27.337 14.846 1.00 8.64 C +ATOM 1179 O VAL A 147 25.856 -26.768 14.575 1.00 8.64 O +ATOM 1180 CG1 VAL A 147 22.708 -28.004 16.217 1.00 8.64 C +ATOM 1181 CG2 VAL A 147 21.418 -27.082 14.269 1.00 8.64 C +ATOM 1182 N ASP A 148 25.801 -25.404 15.970 1.00 8.64 N +ATOM 1183 CA ASP A 148 26.582 -25.450 17.202 1.00 8.64 C +ATOM 1184 C ASP A 148 27.024 -24.051 17.625 1.00 8.64 C +ATOM 1185 CB ASP A 148 27.802 -26.358 17.031 1.00 8.64 C +ATOM 1186 O ASP A 148 27.467 -23.256 16.793 1.00 8.64 O +ATOM 1187 CG ASP A 148 27.486 -27.826 17.259 1.00 8.64 C +ATOM 1188 OD1 ASP A 148 28.258 -28.694 16.799 1.00 8.64 O +ATOM 1189 OD2 ASP A 148 26.454 -28.116 17.901 1.00 8.64 O +TER 1190 ASP A 148 +ENDMDL +END diff --git a/alphafold/relax/utils.py b/alphafold/relax/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..0207df5ba24d4876208a26ee06b7e0c65b509ee8 --- /dev/null +++ b/alphafold/relax/utils.py @@ -0,0 +1,69 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Utils for minimization.""" +import io +from alphafold.common import residue_constants +from Bio import PDB +import numpy as np + + +def overwrite_b_factors(pdb_str: str, bfactors: np.ndarray) -> str: + """Overwrites the B-factors in pdb_str with contents of bfactors array. + + Args: + pdb_str: An input PDB string. + bfactors: A numpy array with shape [1, n_residues, 37]. We assume that the + B-factors are per residue; i.e. that the nonzero entries are identical in + [0, i, :]. + + Returns: + A new PDB string with the B-factors replaced. + """ + if bfactors.shape[-1] != residue_constants.atom_type_num: + raise ValueError( + f'Invalid final dimension size for bfactors: {bfactors.shape[-1]}.') + + parser = PDB.PDBParser(QUIET=True) + handle = io.StringIO(pdb_str) + structure = parser.get_structure('', handle) + + curr_resid = ('', '', '') + idx = -1 + for atom in structure.get_atoms(): + atom_resid = atom.parent.get_id() + if atom_resid != curr_resid: + idx += 1 + if idx >= bfactors.shape[0]: + raise ValueError('Index into bfactors exceeds number of residues. ' + 'B-factors shape: {shape}, idx: {idx}.') + curr_resid = atom_resid + atom.bfactor = bfactors[idx, residue_constants.atom_order['CA']] + + new_pdb = io.StringIO() + pdb_io = PDB.PDBIO() + pdb_io.set_structure(structure) + pdb_io.save(new_pdb) + return new_pdb.getvalue() + + +def assert_equal_nonterminal_atom_types( + atom_mask: np.ndarray, ref_atom_mask: np.ndarray): + """Checks that pre- and post-minimized proteins have same atom set.""" + # Ignore any terminal OXT atoms which may have been added by minimization. + oxt = residue_constants.atom_order['OXT'] + no_oxt_mask = np.ones(shape=atom_mask.shape, dtype=bool) + no_oxt_mask[..., oxt] = False + np.testing.assert_almost_equal(ref_atom_mask[no_oxt_mask], + atom_mask[no_oxt_mask]) diff --git a/alphafold/relax/utils_test.py b/alphafold/relax/utils_test.py new file mode 100644 index 0000000000000000000000000000000000000000..190cb3109aa92972594e55e3f80a33f902199ac4 --- /dev/null +++ b/alphafold/relax/utils_test.py @@ -0,0 +1,55 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for utils.""" + +import os + +from absl.testing import absltest +from alphafold.common import protein +from alphafold.relax import utils +import numpy as np +# Internal import (7716). + + +class UtilsTest(absltest.TestCase): + + def test_overwrite_b_factors(self): + testdir = os.path.join( + absltest.get_default_test_srcdir(), + 'alphafold/relax/testdata/' + 'multiple_disulfides_target.pdb') + with open(testdir) as f: + test_pdb = f.read() + n_residues = 191 + bfactors = np.stack([np.arange(0, n_residues)] * 37, axis=-1) + + output_pdb = utils.overwrite_b_factors(test_pdb, bfactors) + + # Check that the atom lines are unchanged apart from the B-factors. + atom_lines_original = [l for l in test_pdb.split('\n') if l[:4] == ('ATOM')] + atom_lines_new = [l for l in output_pdb.split('\n') if l[:4] == ('ATOM')] + for line_original, line_new in zip(atom_lines_original, atom_lines_new): + self.assertEqual(line_original[:60].strip(), line_new[:60].strip()) + self.assertEqual(line_original[66:].strip(), line_new[66:].strip()) + + # Check B-factors are correctly set for all atoms present. + as_protein = protein.from_pdb_string(output_pdb) + np.testing.assert_almost_equal( + np.where(as_protein.atom_mask > 0, as_protein.b_factors, 0), + np.where(as_protein.atom_mask > 0, bfactors, 0)) + + +if __name__ == '__main__': + absltest.main() diff --git a/alphafold/version.py b/alphafold/version.py new file mode 100644 index 0000000000000000000000000000000000000000..a42052b3266ce692de15a2b562579cc2c4c077f0 --- /dev/null +++ b/alphafold/version.py @@ -0,0 +1,17 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Single source of truth for the AlphaFold version.""" + +__version__ = '2.3.2' diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..ad666e645aa3bec58c14fa0b69c3b26d0fa99d75 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,90 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +ARG CUDA=12.2.2 +FROM nvidia/cuda:${CUDA}-cudnn8-runtime-ubuntu20.04 +# FROM directive resets ARGS, so we specify again (the value is retained if +# previously set). +ARG CUDA + +# Use bash to support string substitution. +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +RUN apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \ + build-essential \ + cmake \ + cuda-command-line-tools-$(cut -f1,2 -d- <<< ${CUDA//./-}) \ + git \ + hmmer \ + kalign \ + tzdata \ + wget \ + && rm -rf /var/lib/apt/lists/* \ + && apt-get autoremove -y \ + && apt-get clean + +# Compile HHsuite from source. +RUN git clone --branch v3.3.0 https://github.com/soedinglab/hh-suite.git /tmp/hh-suite \ + && mkdir /tmp/hh-suite/build \ + && pushd /tmp/hh-suite/build \ + && cmake -DCMAKE_INSTALL_PREFIX=/opt/hhsuite .. \ + && make -j 4 && make install \ + && ln -s /opt/hhsuite/bin/* /usr/bin \ + && popd \ + && rm -rf /tmp/hh-suite + +# Install Miniconda package manager. +RUN wget -q -P /tmp \ + https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \ + && bash /tmp/Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda \ + && rm /tmp/Miniconda3-latest-Linux-x86_64.sh + +# Install conda packages. +ENV PATH="/opt/conda/bin:$PATH" +ENV LD_LIBRARY_PATH="/opt/conda/lib:$LD_LIBRARY_PATH" +RUN conda install -qy conda==24.1.2 pip python=3.11 \ + && conda install -y -c nvidia cuda=${CUDA_VERSION} \ + && conda install -y -c conda-forge openmm=8.0.0 pdbfixer \ + && conda clean --all --force-pkgs-dirs --yes + +COPY . /app/alphafold +RUN wget -q -P /app/alphafold/alphafold/common/ \ + https://git.scicore.unibas.ch/schwede/openstructure/-/raw/7102c63615b64735c4941278d92b554ec94415f8/modules/mol/alg/src/stereo_chemical_props.txt + +# Install pip packages. +RUN pip3 install --upgrade pip --no-cache-dir \ + && pip3 install -r /app/alphafold/requirements.txt --no-cache-dir \ + && pip3 install --upgrade --no-cache-dir \ + jax==0.4.26 \ + jaxlib==0.4.26+cuda12.cudnn89 \ + -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html + +# Add SETUID bit to the ldconfig binary so that non-root users can run it. +RUN chmod u+s /sbin/ldconfig.real + +# Currently needed to avoid undefined_symbol error. +RUN ln -sf /usr/lib/x86_64-linux-gnu/libffi.so.7 /opt/conda/lib/libffi.so.7 + +# We need to run `ldconfig` first to ensure GPUs are visible, due to some quirk +# with Debian. See https://github.com/NVIDIA/nvidia-docker/issues/1399 for +# details. +# ENTRYPOINT does not support easily running multiple commands, so instead we +# write a shell script to wrap them up. +WORKDIR /app/alphafold +RUN echo $'#!/bin/bash\n\ +ldconfig\n\ +python /app/alphafold/run_alphafold.py "$@"' > /app/run_alphafold.sh \ + && chmod +x /app/run_alphafold.sh +ENTRYPOINT ["/app/run_alphafold.sh"] diff --git a/docker/requirements.txt b/docker/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..2956cb2f4c9c40c58d284f2ea301e6a230ef3657 --- /dev/null +++ b/docker/requirements.txt @@ -0,0 +1,3 @@ +# Dependencies necessary to execute run_docker.py +absl-py==1.0.0 +docker==5.0.0 diff --git a/docker/run_docker.py b/docker/run_docker.py new file mode 100644 index 0000000000000000000000000000000000000000..155d8fe2cd124497d6028d2288a02a8ae68b23fa --- /dev/null +++ b/docker/run_docker.py @@ -0,0 +1,267 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Docker launch script for Alphafold docker image.""" + +import os +import pathlib +import signal +from typing import Tuple + +from absl import app +from absl import flags +from absl import logging +import docker +from docker import types + + +flags.DEFINE_bool( + 'use_gpu', True, 'Enable NVIDIA runtime to run with GPUs.') +flags.DEFINE_enum('models_to_relax', 'best', ['best', 'all', 'none'], + 'The models to run the final relaxation step on. ' + 'If `all`, all models are relaxed, which may be time ' + 'consuming. If `best`, only the most confident model is ' + 'relaxed. If `none`, relaxation is not run. Turning off ' + 'relaxation might result in predictions with ' + 'distracting stereochemical violations but might help ' + 'in case you are having issues with the relaxation ' + 'stage.') +flags.DEFINE_bool( + 'enable_gpu_relax', True, 'Run relax on GPU if GPU is enabled.') +flags.DEFINE_string( + 'gpu_devices', 'all', + 'Comma separated list of devices to pass to NVIDIA_VISIBLE_DEVICES.') +flags.DEFINE_list( + 'fasta_paths', None, 'Paths to FASTA files, each containing a prediction ' + 'target that will be folded one after another. If a FASTA file contains ' + 'multiple sequences, then it will be folded as a multimer. Paths should be ' + 'separated by commas. All FASTA paths must have a unique basename as the ' + 'basename is used to name the output directories for each prediction.') +flags.DEFINE_string( + 'output_dir', '/tmp/alphafold', + 'Path to a directory that will store the results.') +flags.DEFINE_string( + 'data_dir', None, + 'Path to directory with supporting data: AlphaFold parameters and genetic ' + 'and template databases. Set to the target of download_all_databases.sh.') +flags.DEFINE_string( + 'docker_image_name', 'alphafold', 'Name of the AlphaFold Docker image.') +flags.DEFINE_string( + 'max_template_date', None, + 'Maximum template release date to consider (ISO-8601 format: YYYY-MM-DD). ' + 'Important if folding historical test sets.') +flags.DEFINE_enum( + 'db_preset', 'full_dbs', ['full_dbs', 'reduced_dbs'], + 'Choose preset MSA database configuration - smaller genetic database ' + 'config (reduced_dbs) or full genetic database config (full_dbs)') +flags.DEFINE_enum( + 'model_preset', 'monomer', + ['monomer', 'monomer_casp14', 'monomer_ptm', 'multimer'], + 'Choose preset model configuration - the monomer model, the monomer model ' + 'with extra ensembling, monomer model with pTM head, or multimer model') +flags.DEFINE_integer('num_multimer_predictions_per_model', 5, 'How many ' + 'predictions (each with a different random seed) will be ' + 'generated per model. E.g. if this is 2 and there are 5 ' + 'models then there will be 10 predictions per input. ' + 'Note: this FLAG only applies if model_preset=multimer') +flags.DEFINE_boolean( + 'benchmark', False, + 'Run multiple JAX model evaluations to obtain a timing that excludes the ' + 'compilation time, which should be more indicative of the time required ' + 'for inferencing many proteins.') +flags.DEFINE_boolean( + 'use_precomputed_msas', False, + 'Whether to read MSAs that have been written to disk instead of running ' + 'the MSA tools. The MSA files are looked up in the output directory, so it ' + 'must stay the same between multiple runs that are to reuse the MSAs. ' + 'WARNING: This will not check if the sequence, database or configuration ' + 'have changed.') +flags.DEFINE_string( + 'docker_user', f'{os.geteuid()}:{os.getegid()}', + 'UID:GID with which to run the Docker container. The output directories ' + 'will be owned by this user:group. By default, this is the current user. ' + 'Valid options are: uid or uid:gid, non-numeric values are not recognised ' + 'by Docker unless that user has been created within the container.') + +FLAGS = flags.FLAGS + +_ROOT_MOUNT_DIRECTORY = '/mnt/' + + +def _create_mount(mount_name: str, path: str) -> Tuple[types.Mount, str]: + """Create a mount point for each file and directory used by the model.""" + path = pathlib.Path(path).absolute() + target_path = pathlib.Path(_ROOT_MOUNT_DIRECTORY, mount_name) + + if path.is_dir(): + source_path = path + mounted_path = target_path + else: + source_path = path.parent + mounted_path = pathlib.Path(target_path, path.name) + if not source_path.exists(): + raise ValueError(f'Failed to find source directory "{source_path}" to ' + 'mount in Docker container.') + logging.info('Mounting %s -> %s', source_path, target_path) + mount = types.Mount(target=str(target_path), source=str(source_path), + type='bind', read_only=True) + return mount, str(mounted_path) + + +def main(argv): + if len(argv) > 1: + raise app.UsageError('Too many command-line arguments.') + + # You can individually override the following paths if you have placed the + # data in locations other than the FLAGS.data_dir. + + # Path to the Uniref90 database for use by JackHMMER. + uniref90_database_path = os.path.join( + FLAGS.data_dir, 'uniref90', 'uniref90.fasta') + + # Path to the Uniprot database for use by JackHMMER. + uniprot_database_path = os.path.join( + FLAGS.data_dir, 'uniprot', 'uniprot.fasta') + + # Path to the MGnify database for use by JackHMMER. + mgnify_database_path = os.path.join( + FLAGS.data_dir, 'mgnify', 'mgy_clusters_2022_05.fa') + + # Path to the BFD database for use by HHblits. + bfd_database_path = os.path.join( + FLAGS.data_dir, 'bfd', + 'bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt') + + # Path to the Small BFD database for use by JackHMMER. + small_bfd_database_path = os.path.join( + FLAGS.data_dir, 'small_bfd', 'bfd-first_non_consensus_sequences.fasta') + + # Path to the Uniref30 database for use by HHblits. + uniref30_database_path = os.path.join( + FLAGS.data_dir, 'uniref30', 'UniRef30_2021_03') + + # Path to the PDB70 database for use by HHsearch. + pdb70_database_path = os.path.join(FLAGS.data_dir, 'pdb70', 'pdb70') + + # Path to the PDB seqres database for use by hmmsearch. + pdb_seqres_database_path = os.path.join( + FLAGS.data_dir, 'pdb_seqres', 'pdb_seqres.txt') + + # Path to a directory with template mmCIF structures, each named <pdb_id>.cif. + template_mmcif_dir = os.path.join(FLAGS.data_dir, 'pdb_mmcif', 'mmcif_files') + + # Path to a file mapping obsolete PDB IDs to their replacements. + obsolete_pdbs_path = os.path.join(FLAGS.data_dir, 'pdb_mmcif', 'obsolete.dat') + + alphafold_path = pathlib.Path(__file__).parent.parent + data_dir_path = pathlib.Path(FLAGS.data_dir) + if alphafold_path == data_dir_path or alphafold_path in data_dir_path.parents: + raise app.UsageError( + f'The download directory {FLAGS.data_dir} should not be a subdirectory ' + f'in the AlphaFold repository directory. If it is, the Docker build is ' + f'slow since the large databases are copied during the image creation.') + + mounts = [] + command_args = [] + + # Mount each fasta path as a unique target directory. + target_fasta_paths = [] + for i, fasta_path in enumerate(FLAGS.fasta_paths): + mount, target_path = _create_mount(f'fasta_path_{i}', fasta_path) + mounts.append(mount) + target_fasta_paths.append(target_path) + command_args.append(f'--fasta_paths={",".join(target_fasta_paths)}') + + database_paths = [ + ('uniref90_database_path', uniref90_database_path), + ('mgnify_database_path', mgnify_database_path), + ('data_dir', FLAGS.data_dir), + ('template_mmcif_dir', template_mmcif_dir), + ('obsolete_pdbs_path', obsolete_pdbs_path), + ] + + if FLAGS.model_preset == 'multimer': + database_paths.append(('uniprot_database_path', uniprot_database_path)) + database_paths.append(('pdb_seqres_database_path', + pdb_seqres_database_path)) + else: + database_paths.append(('pdb70_database_path', pdb70_database_path)) + + if FLAGS.db_preset == 'reduced_dbs': + database_paths.append(('small_bfd_database_path', small_bfd_database_path)) + else: + database_paths.extend([ + ('uniref30_database_path', uniref30_database_path), + ('bfd_database_path', bfd_database_path), + ]) + for name, path in database_paths: + if path: + mount, target_path = _create_mount(name, path) + mounts.append(mount) + command_args.append(f'--{name}={target_path}') + + output_target_path = os.path.join(_ROOT_MOUNT_DIRECTORY, 'output') + mounts.append(types.Mount(output_target_path, FLAGS.output_dir, type='bind')) + + use_gpu_relax = FLAGS.enable_gpu_relax and FLAGS.use_gpu + + command_args.extend([ + f'--output_dir={output_target_path}', + f'--max_template_date={FLAGS.max_template_date}', + f'--db_preset={FLAGS.db_preset}', + f'--model_preset={FLAGS.model_preset}', + f'--benchmark={FLAGS.benchmark}', + f'--use_precomputed_msas={FLAGS.use_precomputed_msas}', + f'--num_multimer_predictions_per_model={FLAGS.num_multimer_predictions_per_model}', + f'--models_to_relax={FLAGS.models_to_relax}', + f'--use_gpu_relax={use_gpu_relax}', + '--logtostderr', + ]) + + client = docker.from_env() + device_requests = [ + docker.types.DeviceRequest(driver='nvidia', capabilities=[['gpu']]) + ] if FLAGS.use_gpu else None + + container = client.containers.run( + image=FLAGS.docker_image_name, + command=command_args, + device_requests=device_requests, + remove=True, + detach=True, + mounts=mounts, + user=FLAGS.docker_user, + environment={ + 'NVIDIA_VISIBLE_DEVICES': FLAGS.gpu_devices, + # The following flags allow us to make predictions on proteins that + # would typically be too long to fit into GPU memory. + 'TF_FORCE_UNIFIED_MEMORY': '1', + 'XLA_PYTHON_CLIENT_MEM_FRACTION': '4.0', + }) + + # Add signal handler to ensure CTRL+C also stops the running container. + signal.signal(signal.SIGINT, + lambda unused_sig, unused_frame: container.kill()) + + for line in container.logs(stream=True): + logging.info(line.strip().decode('utf-8')) + + +if __name__ == '__main__': + flags.mark_flags_as_required([ + 'data_dir', + 'fasta_paths', + 'max_template_date', + ]) + app.run(main) diff --git a/docs/casp15_predictions.zip b/docs/casp15_predictions.zip new file mode 100644 index 0000000000000000000000000000000000000000..9bbb5ac4fb19b740d3f2d4b85bde35c5aa405194 Binary files /dev/null and b/docs/casp15_predictions.zip differ diff --git a/docs/technical_note_v2.3.0.md b/docs/technical_note_v2.3.0.md new file mode 100644 index 0000000000000000000000000000000000000000..aa96838d99a5c321f08a0fc089ec7b14aca3196f --- /dev/null +++ b/docs/technical_note_v2.3.0.md @@ -0,0 +1,58 @@ +# AlphaFold v2.3.0 + +This technical note describes updates in the code and model weights that were +made to produce AlphaFold v2.3.0 including updated training data. + +We have fine-tuned new AlphaFold-Multimer weights using identical model +architecture but a new training cutoff of 2021-09-30. Previously released +versions of AlphaFold and AlphaFold-Multimer were trained using PDB structures +with a release date before 2018-04-30, a cutoff date chosen to coincide with the +start of the 2018 CASP13 assessment. The new training cutoff represents ~30% +more data to train AlphaFold and more importantly includes much more data on +large protein complexes. The new training cutoff includes 4× the number of +electron microscopy structures and in aggregate twice the number of large +structures (more than 2,000 residues)[^1]. Due to the significant increase in +the number of large structures, we are also able to increase the size of +training crops (subsets of the structure used to train AlphaFold) from 384 to +640 residues. These new AlphaFold-Multimer models are expected to be +substantially more accurate on large protein complexes even though we use the +same model architecture and training methodology as our previously released +AlphaFold-Multimer paper. + +These models were initially developed in response to a request from the CASP +organizers to better understand baselines for the progress of structure +prediction in CASP15, and because of the significant increase in accuracy for +large targets, we are making them available as the default multimer models. +Since they were developed as baselines, we have emphasized minimal changes to +our previous AlphaFold-Multimer system while accommodating larger complexes. +In particular, we increase the number of chains used at training time from 8 to +20 and increase the maximum number of MSA sequences from 1,152 to 2,048 for 3 of +the 5 AlphaFold-Multimer models. + +For the CASP15 baseline, we also used somewhat more expensive inference settings +that have been found externally to improve AlphaFold accuracy. We increase the +number of seeds per model to 20[^2] and increase the maximum number of +recyclings to 20 with early stopping[^3]. Increasing the number of seeds to 20 +is recommended for very large or difficult targets but is not the default due to +increased computational time. + +Overall, we expect these new models to be the preferred models whenever the +stoichiometry of the complex is known, including known monomeric structures. In +cases where the stoichiometry is unknown, such as in genome-scale prediction, it +is likely that single chain AlphaFold will be more accurate on average unless +the chain has several thousand residues. + +The predicted structures used for the CASP15 baselines are available +[here](https://github.com/deepmind/alphafold/blob/main/docs/casp15_predictions.zip). + + +[^1]: wwPDB Consortium. "Protein Data Bank: the single global archive for 3D + macromolecular structure data." Nucleic Acids Res. 47, D520–D528 (2018). + +[^2]: Johansson-Ã…khe, Isak, and Björn Wallner. "Improving peptide-protein + docking with AlphaFold-Multimer using forced sampling." Frontiers in + bioinformatics 2 (2022): 959160-959160. + +[^3]: Gao, Mu, et al. "AF2Complex predicts direct physical interactions in + multimeric proteins with deep learning." Nature communications 13.1 (2022): + 1-13. diff --git a/imgs/casp14_predictions.gif b/imgs/casp14_predictions.gif new file mode 100644 index 0000000000000000000000000000000000000000..0d9ce2c8a4066e686b6ab8cc726df2f60200b847 Binary files /dev/null and b/imgs/casp14_predictions.gif differ diff --git a/imgs/header.jpg b/imgs/header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4000a16955bcc6d961be8c476531ab4714b5361 Binary files /dev/null and b/imgs/header.jpg differ diff --git a/notebooks/AlphaFold.ipynb b/notebooks/AlphaFold.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..353cf482076ae449664a53f9ea1bd7553aeb6b11 --- /dev/null +++ b/notebooks/AlphaFold.ipynb @@ -0,0 +1,918 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "pc5-mbsX9PZC" + }, + "source": [ + "# AlphaFold Colab\n", + "\n", + "This Colab notebook allows you to easily predict the structure of a protein using a slightly simplified version of [AlphaFold v2.3.2](https://doi.org/10.1038/s41586-021-03819-2). \n", + "\n", + "**Differences to AlphaFold v2.3.2**\n", + "\n", + "In comparison to AlphaFold v2.3.2, this Colab notebook uses **no templates (homologous structures)** and a selected portion of the [BFD database](https://bfd.mmseqs.com/). We have validated these changes on several thousand recent PDB structures. While accuracy will be near-identical to the full AlphaFold system on many targets, a small fraction have a large drop in accuracy due to the smaller MSA and lack of templates. For best reliability, we recommend instead using the [full open source AlphaFold](https://github.com/deepmind/alphafold/), or the [AlphaFold Protein Structure Database](https://alphafold.ebi.ac.uk/).\n", + "\n", + "**This Colab has a small drop in average accuracy for multimers compared to local AlphaFold installation, for full multimer accuracy it is highly recommended to run [AlphaFold locally](https://github.com/deepmind/alphafold#running-alphafold).** Moreover, the AlphaFold-Multimer requires searching for MSA for every unique sequence in the complex, hence it is substantially slower. If your notebook times-out due to slow multimer MSA search, we recommend either using Colab Pro or running AlphaFold locally.\n", + "\n", + "Please note that this Colab notebook is provided for theoretical modelling only and caution should be exercised in its use. \n", + "\n", + "The **PAE file format** has been updated to match AFDB. Please see the [AFDB FAQ](https://alphafold.ebi.ac.uk/faq/#faq-7) for a description of the new format.\n", + "\n", + "**Citing this work**\n", + "\n", + "Any publication that discloses findings arising from using this notebook should [cite](https://github.com/deepmind/alphafold/#citing-this-work) the [AlphaFold paper](https://doi.org/10.1038/s41586-021-03819-2).\n", + "\n", + "**Licenses**\n", + "\n", + "This Colab uses the [AlphaFold model parameters](https://github.com/deepmind/alphafold/#model-parameters-license) which are subject to the Creative Commons Attribution 4.0 International ([CC BY 4.0](https://creativecommons.org/licenses/by/4.0/legalcode)) license. The Colab itself is provided under the [Apache 2.0 license](https://www.apache.org/licenses/LICENSE-2.0). See the full license statement below.\n", + "\n", + "**More information**\n", + "\n", + "You can find more information about how AlphaFold works in the following papers:\n", + "\n", + "* [AlphaFold methods paper](https://www.nature.com/articles/s41586-021-03819-2)\n", + "* [AlphaFold predictions of the human proteome paper](https://www.nature.com/articles/s41586-021-03828-1)\n", + "* [AlphaFold-Multimer paper](https://www.biorxiv.org/content/10.1101/2021.10.04.463034v1)\n", + "\n", + "FAQ on how to interpret AlphaFold predictions are [here](https://alphafold.ebi.ac.uk/faq).\n", + "\n", + "If you have any questions not covered in the FAQ, please contact the AlphaFold team at alphafold@deepmind.com.\n", + "\n", + "**Get in touch**\n", + "\n", + "We would love to hear your feedback and understand how AlphaFold has been useful in your research. Share your stories with us at alphafold@deepmind.com.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "uC1dKAwk2eyl" + }, + "source": [ + "## Setup\n", + "\n", + "Start by running the 2 cells below to set up AlphaFold and all required software." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "woIxeCPygt7K" + }, + "outputs": [], + "source": [ + "# Set environment variables before running any other code.\n", + "import os\n", + "os.environ['TF_FORCE_UNIFIED_MEMORY'] = '1'\n", + "os.environ['XLA_PYTHON_CLIENT_MEM_FRACTION'] = '4.0'\n", + "\n", + "#@title 1. Install third-party software\n", + "\n", + "#@markdown Please execute this cell by pressing the _Play_ button\n", + "#@markdown on the left to download and import third-party software\n", + "#@markdown in this Colab notebook. (See the [acknowledgements](https://github.com/deepmind/alphafold/#acknowledgements) in our readme.)\n", + "\n", + "#@markdown **Note**: This installs the software on the Colab\n", + "#@markdown notebook in the cloud and not on your computer.\n", + "\n", + "from IPython.utils import io\n", + "import os\n", + "import subprocess\n", + "import tqdm.notebook\n", + "\n", + "TQDM_BAR_FORMAT = '{l_bar}{bar}| {n_fmt}/{total_fmt} [elapsed: {elapsed} remaining: {remaining}]'\n", + "\n", + "try:\n", + " with tqdm.notebook.tqdm(total=100, bar_format=TQDM_BAR_FORMAT) as pbar:\n", + " with io.capture_output() as captured:\n", + " # Uninstall default Colab version of TF.\n", + " %shell pip uninstall -y tensorflow keras\n", + "\n", + " %shell sudo apt install --quiet --yes hmmer\n", + " pbar.update(6)\n", + "\n", + " # Install py3dmol.\n", + " %shell pip install py3dmol\n", + " pbar.update(2)\n", + "\n", + " # Install OpenMM and pdbfixer.\n", + " %shell rm -rf /opt/conda\n", + " %shell wget -q -P /tmp \\\n", + " https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \\\n", + " \u0026\u0026 bash /tmp/Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda \\\n", + " \u0026\u0026 rm /tmp/Miniconda3-latest-Linux-x86_64.sh\n", + " pbar.update(9)\n", + "\n", + " PATH=%env PATH\n", + " %env PATH=/opt/conda/bin:{PATH}\n", + " %shell conda install -qy conda==24.1.2 \\\n", + " \u0026\u0026 conda install -qy -c conda-forge \\\n", + " python=3.10 \\\n", + " openmm=8.0.0 \\\n", + " pdbfixer\n", + " pbar.update(80)\n", + "\n", + " # Create a ramdisk to store a database chunk to make Jackhmmer run fast.\n", + " %shell sudo mkdir -m 777 --parents /tmp/ramdisk\n", + " %shell sudo mount -t tmpfs -o size=9G ramdisk /tmp/ramdisk\n", + " pbar.update(2)\n", + "\n", + " %shell wget -q -P /content \\\n", + " https://git.scicore.unibas.ch/schwede/openstructure/-/raw/7102c63615b64735c4941278d92b554ec94415f8/modules/mol/alg/src/stereo_chemical_props.txt\n", + " pbar.update(1)\n", + "except subprocess.CalledProcessError:\n", + " print(captured)\n", + " raise\n", + "\n", + "executed_cells = set([1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "VzJ5iMjTtoZw" + }, + "outputs": [], + "source": [ + "#@title 2. Download AlphaFold\n", + "\n", + "#@markdown Please execute this cell by pressing the *Play* button on\n", + "#@markdown the left.\n", + "\n", + "GIT_REPO = 'https://github.com/deepmind/alphafold'\n", + "SOURCE_URL = 'https://storage.googleapis.com/alphafold/alphafold_params_colab_2022-12-06.tar'\n", + "PARAMS_DIR = './alphafold/data/params'\n", + "PARAMS_PATH = os.path.join(PARAMS_DIR, os.path.basename(SOURCE_URL))\n", + "\n", + "try:\n", + " with tqdm.notebook.tqdm(total=100, bar_format=TQDM_BAR_FORMAT) as pbar:\n", + " with io.capture_output() as captured:\n", + " %shell rm -rf alphafold\n", + " %shell git clone --branch main {GIT_REPO} alphafold\n", + " pbar.update(8)\n", + " # Install the required versions of all dependencies.\n", + " %shell pip3 install -r ./alphafold/requirements.txt\n", + " # Run setup.py to install only AlphaFold.\n", + " %shell pip3 install --no-dependencies ./alphafold\n", + " %shell pip3 install pyopenssl==22.0.0\n", + " pbar.update(10)\n", + "\n", + " # Make sure stereo_chemical_props.txt is in all locations where it could be searched for.\n", + " %shell mkdir -p /content/alphafold/alphafold/common\n", + " %shell cp -f /content/stereo_chemical_props.txt /content/alphafold/alphafold/common\n", + " %shell mkdir -p /opt/conda/lib/python3.10/site-packages/alphafold/common/\n", + " %shell cp -f /content/stereo_chemical_props.txt /opt/conda/lib/python3.10/site-packages/alphafold/common/\n", + "\n", + " # Load parameters\n", + " %shell mkdir --parents \"{PARAMS_DIR}\"\n", + " %shell wget -O \"{PARAMS_PATH}\" \"{SOURCE_URL}\"\n", + " pbar.update(27)\n", + "\n", + " %shell tar --extract --verbose --file=\"{PARAMS_PATH}\" \\\n", + " --directory=\"{PARAMS_DIR}\" --preserve-permissions\n", + " %shell rm \"{PARAMS_PATH}\"\n", + " pbar.update(55)\n", + "except subprocess.CalledProcessError:\n", + " print(captured)\n", + " raise\n", + "\n", + "import jax\n", + "if jax.local_devices()[0].platform == 'tpu':\n", + " raise RuntimeError('Colab TPU runtime not supported. Change it to GPU via Runtime -\u003e Change Runtime Type -\u003e Hardware accelerator -\u003e GPU.')\n", + "elif jax.local_devices()[0].platform == 'cpu':\n", + " raise RuntimeError('Colab CPU runtime not supported. Change it to GPU via Runtime -\u003e Change Runtime Type -\u003e Hardware accelerator -\u003e GPU.')\n", + "else:\n", + " print(f'Running with {jax.local_devices()[0].device_kind} GPU')\n", + "\n", + "# Make sure everything we need is on the path.\n", + "import sys\n", + "sys.path.append('/opt/conda/lib/python3.10/site-packages')\n", + "sys.path.append('/content/alphafold')\n", + "\n", + "executed_cells.add(2)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "W4JpOs6oA-QS" + }, + "source": [ + "## Making a prediction\n", + "\n", + "Please paste the sequence of your protein in the text box below, then run the remaining cells via _Runtime_ \u003e _Run after_. You can also run the cells individually by pressing the _Play_ button on the left.\n", + "\n", + "Note that the search against databases and the actual prediction can take some time, from minutes to hours, depending on the length of the protein and what type of GPU you are allocated by Colab (see FAQ below)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "rowN0bVYLe9n" + }, + "outputs": [], + "source": [ + "#@title 3. Enter the amino acid sequence(s) to fold ⬇ï¸\n", + "#@markdown Enter the amino acid sequence(s) to fold:\n", + "#@markdown * If you enter only a single sequence, the monomer model will be \n", + "#@markdown used (unless you override this below).\n", + "#@markdown * If you enter multiple sequences, the multimer model will be used.\n", + "\n", + "from alphafold.notebooks import notebook_utils\n", + "# Track cell execution to ensure correct order.\n", + "notebook_utils.check_cell_execution_order(executed_cells, 3)\n", + "\n", + "import enum\n", + "\n", + "@enum.unique\n", + "class ModelType(enum.Enum):\n", + " MONOMER = 0\n", + " MULTIMER = 1\n", + "\n", + "sequence_1 = 'MAAHKGAEHHHKAAEHHEQAAKHHHAAAEHHEKGEHEQAAHHADTAYAHHKHAEEHAAQAAKHDAEHHAPKPH' #@param {type:\"string\"}\n", + "sequence_2 = '' #@param {type:\"string\"}\n", + "sequence_3 = '' #@param {type:\"string\"}\n", + "sequence_4 = '' #@param {type:\"string\"}\n", + "sequence_5 = '' #@param {type:\"string\"}\n", + "sequence_6 = '' #@param {type:\"string\"}\n", + "sequence_7 = '' #@param {type:\"string\"}\n", + "sequence_8 = '' #@param {type:\"string\"}\n", + "sequence_9 = '' #@param {type:\"string\"}\n", + "sequence_10 = '' #@param {type:\"string\"}\n", + "sequence_11 = '' #@param {type:\"string\"}\n", + "sequence_12 = '' #@param {type:\"string\"}\n", + "sequence_13 = '' #@param {type:\"string\"}\n", + "sequence_14 = '' #@param {type:\"string\"}\n", + "sequence_15 = '' #@param {type:\"string\"}\n", + "sequence_16 = '' #@param {type:\"string\"}\n", + "sequence_17 = '' #@param {type:\"string\"}\n", + "sequence_18 = '' #@param {type:\"string\"}\n", + "sequence_19 = '' #@param {type:\"string\"}\n", + "sequence_20 = '' #@param {type:\"string\"}\n", + "\n", + "input_sequences = (\n", + " sequence_1, sequence_2, sequence_3, sequence_4, sequence_5, \n", + " sequence_6, sequence_7, sequence_8, sequence_9, sequence_10,\n", + " sequence_11, sequence_12, sequence_13, sequence_14, sequence_15, \n", + " sequence_16, sequence_17, sequence_18, sequence_19, sequence_20)\n", + "\n", + "MIN_PER_SEQUENCE_LENGTH = 16\n", + "MAX_PER_SEQUENCE_LENGTH = 4000\n", + "MAX_MONOMER_MODEL_LENGTH = 2500\n", + "MAX_LENGTH = 4000\n", + "MAX_VALIDATED_LENGTH = 3000\n", + "\n", + "#@markdown Select this checkbox to run the multimer model for a single sequence.\n", + "#@markdown For proteins that are monomeric in their native form, or for very \n", + "#@markdown large single chains you may get better accuracy and memory efficiency\n", + "#@markdown by using the multimer model.\n", + "#@markdown \n", + "#@markdown \n", + "#@markdown Due to improved memory efficiency the multimer model has a maximum\n", + "#@markdown limit of 4000 residues, while the monomer model has a limit of 2500\n", + "#@markdown residues.\n", + "\n", + "use_multimer_model_for_monomers = False #@param {type:\"boolean\"}\n", + "\n", + "# Validate the input sequences.\n", + "sequences = notebook_utils.clean_and_validate_input_sequences(\n", + " input_sequences=input_sequences,\n", + " min_sequence_length=MIN_PER_SEQUENCE_LENGTH,\n", + " max_sequence_length=MAX_PER_SEQUENCE_LENGTH)\n", + "\n", + "if len(sequences) == 1:\n", + " if use_multimer_model_for_monomers:\n", + " print('Using the multimer model for single-chain, as requested.')\n", + " model_type_to_use = ModelType.MULTIMER\n", + " else:\n", + " print('Using the single-chain model.')\n", + " model_type_to_use = ModelType.MONOMER\n", + "else:\n", + " print(f'Using the multimer model with {len(sequences)} sequences.')\n", + " model_type_to_use = ModelType.MULTIMER\n", + "\n", + "# Check whether total length exceeds limit.\n", + "total_sequence_length = sum([len(seq) for seq in sequences])\n", + "if total_sequence_length \u003e MAX_LENGTH:\n", + " raise ValueError('The total sequence length is too long: '\n", + " f'{total_sequence_length}, while the maximum is '\n", + " f'{MAX_LENGTH}.')\n", + "\n", + "# Check whether we exceed the monomer limit.\n", + "if model_type_to_use == ModelType.MONOMER:\n", + " if len(sequences[0]) \u003e MAX_MONOMER_MODEL_LENGTH:\n", + " raise ValueError(\n", + " f'Input sequence is too long: {len(sequences[0])} amino acids, while '\n", + " f'the maximum for the monomer model is {MAX_MONOMER_MODEL_LENGTH}. You may '\n", + " 'be able to run this sequence with the multimer model by selecting the '\n", + " 'use_multimer_model_for_monomers checkbox above.')\n", + " \n", + "if total_sequence_length \u003e MAX_VALIDATED_LENGTH:\n", + " print('WARNING: The accuracy of the system has not been fully validated '\n", + " 'above 3000 residues, and you may experience long running times or '\n", + " f'run out of memory. Total sequence length is {total_sequence_length} '\n", + " 'residues.')\n", + "\n", + "executed_cells.add(3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "2tTeTTsLKPjB" + }, + "outputs": [], + "source": [ + "#@title 4. Search against genetic databases\n", + "\n", + "#@markdown Once this cell has been executed, you will see\n", + "#@markdown statistics about the multiple sequence alignment\n", + "#@markdown (MSA) that will be used by AlphaFold. In particular,\n", + "#@markdown you’ll see how well each residue is covered by similar\n", + "#@markdown sequences in the MSA.\n", + "\n", + "# Track cell execution to ensure correct order\n", + "notebook_utils.check_cell_execution_order(executed_cells, 4)\n", + "\n", + "# --- Python imports ---\n", + "import collections\n", + "import copy\n", + "from concurrent import futures\n", + "import json\n", + "import random\n", + "import shutil\n", + "\n", + "from urllib import request\n", + "from google.colab import files\n", + "from matplotlib import gridspec\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import py3Dmol\n", + "\n", + "from alphafold.model import model\n", + "from alphafold.model import config\n", + "from alphafold.model import data\n", + "\n", + "from alphafold.data import feature_processing\n", + "from alphafold.data import msa_pairing\n", + "from alphafold.data import pipeline\n", + "from alphafold.data import pipeline_multimer\n", + "from alphafold.data.tools import jackhmmer\n", + "\n", + "from alphafold.common import confidence\n", + "from alphafold.common import protein\n", + "\n", + "from alphafold.relax import relax\n", + "from alphafold.relax import utils\n", + "\n", + "from IPython import display\n", + "from ipywidgets import GridspecLayout\n", + "from ipywidgets import Output\n", + "\n", + "# Color bands for visualizing plddt\n", + "PLDDT_BANDS = [(0, 50, '#FF7D45'),\n", + " (50, 70, '#FFDB13'),\n", + " (70, 90, '#65CBF3'),\n", + " (90, 100, '#0053D6')]\n", + "\n", + "# --- Find the closest source ---\n", + "test_url_pattern = 'https://storage.googleapis.com/alphafold-colab{:s}/latest/uniref90_2022_01.fasta.1'\n", + "ex = futures.ThreadPoolExecutor(3)\n", + "def fetch(source):\n", + " request.urlretrieve(test_url_pattern.format(source))\n", + " return source\n", + "fs = [ex.submit(fetch, source) for source in ['', '-europe', '-asia']]\n", + "source = None\n", + "for f in futures.as_completed(fs):\n", + " source = f.result()\n", + " ex.shutdown()\n", + " break\n", + "\n", + "JACKHMMER_BINARY_PATH = '/usr/bin/jackhmmer'\n", + "DB_ROOT_PATH = f'https://storage.googleapis.com/alphafold-colab{source}/latest/'\n", + "# The z_value is the number of sequences in a database.\n", + "MSA_DATABASES = [\n", + " {'db_name': 'uniref90',\n", + " 'db_path': f'{DB_ROOT_PATH}uniref90_2022_01.fasta',\n", + " 'num_streamed_chunks': 62,\n", + " 'z_value': 144_113_457},\n", + " {'db_name': 'smallbfd',\n", + " 'db_path': f'{DB_ROOT_PATH}bfd-first_non_consensus_sequences.fasta',\n", + " 'num_streamed_chunks': 17,\n", + " 'z_value': 65_984_053},\n", + " {'db_name': 'mgnify',\n", + " 'db_path': f'{DB_ROOT_PATH}mgy_clusters_2022_05.fasta',\n", + " 'num_streamed_chunks': 120,\n", + " 'z_value': 623_796_864},\n", + "]\n", + "\n", + "# Search UniProt and construct the all_seq features only for heteromers, not homomers.\n", + "if model_type_to_use == ModelType.MULTIMER and len(set(sequences)) \u003e 1:\n", + " MSA_DATABASES.extend([\n", + " # Swiss-Prot and TrEMBL are concatenated together as UniProt.\n", + " {'db_name': 'uniprot',\n", + " 'db_path': f'{DB_ROOT_PATH}uniprot_2021_04.fasta',\n", + " 'num_streamed_chunks': 101,\n", + " 'z_value': 225_013_025 + 565_928},\n", + " ])\n", + "\n", + "TOTAL_JACKHMMER_CHUNKS = sum([cfg['num_streamed_chunks'] for cfg in MSA_DATABASES])\n", + "\n", + "MAX_HITS = {\n", + " 'uniref90': 10_000,\n", + " 'smallbfd': 5_000,\n", + " 'mgnify': 501,\n", + " 'uniprot': 50_000,\n", + "}\n", + "\n", + "\n", + "def get_msa(sequences):\n", + " \"\"\"Searches for MSA for given sequences using chunked Jackhmmer search.\n", + " \n", + " Args:\n", + " sequences: A list of sequences to search against all databases.\n", + "\n", + " Returns:\n", + " A dictionary mapping unique sequences to dicionaries mapping each database\n", + " to a list of results, one for each chunk of the database.\n", + " \"\"\"\n", + " sequence_to_fasta_path = {}\n", + " # Deduplicate to not do redundant work for multiple copies of the same chain in homomers.\n", + " for sequence_index, sequence in enumerate(sorted(set(sequences)), 1):\n", + " fasta_path = f'target_{sequence_index:02d}.fasta'\n", + " with open(fasta_path, 'wt') as f:\n", + " f.write(f'\u003equery\\n{sequence}')\n", + " sequence_to_fasta_path[sequence] = fasta_path\n", + "\n", + " # Run the search against chunks of genetic databases (since the genetic\n", + " # databases don't fit in Colab disk).\n", + " raw_msa_results = {sequence: {} for sequence in sequence_to_fasta_path.keys()}\n", + " print('\\nGetting MSA for all sequences')\n", + " with tqdm.notebook.tqdm(total=TOTAL_JACKHMMER_CHUNKS, bar_format=TQDM_BAR_FORMAT) as pbar:\n", + " def jackhmmer_chunk_callback(i):\n", + " pbar.update(n=1)\n", + "\n", + " for db_config in MSA_DATABASES:\n", + " db_name = db_config['db_name']\n", + " pbar.set_description(f'Searching {db_name}')\n", + " jackhmmer_runner = jackhmmer.Jackhmmer(\n", + " binary_path=JACKHMMER_BINARY_PATH,\n", + " database_path=db_config['db_path'],\n", + " get_tblout=True,\n", + " num_streamed_chunks=db_config['num_streamed_chunks'],\n", + " streaming_callback=jackhmmer_chunk_callback,\n", + " z_value=db_config['z_value'])\n", + " # Query all unique sequences against each chunk of the database to prevent\n", + " # redunantly fetching each chunk for each unique sequence.\n", + " results = jackhmmer_runner.query_multiple(list(sequence_to_fasta_path.values()))\n", + " for sequence, result_for_sequence in zip(sequence_to_fasta_path.keys(), results):\n", + " raw_msa_results[sequence][db_name] = result_for_sequence\n", + "\n", + " return raw_msa_results\n", + "\n", + "\n", + "features_for_chain = {}\n", + "raw_msa_results_for_sequence = get_msa(sequences)\n", + "for sequence_index, sequence in enumerate(sequences, start=1):\n", + " raw_msa_results = copy.deepcopy(raw_msa_results_for_sequence[sequence])\n", + "\n", + " # Extract the MSAs from the Stockholm files.\n", + " # NB: deduplication happens later in pipeline.make_msa_features.\n", + " single_chain_msas = []\n", + " uniprot_msa = None\n", + " for db_name, db_results in raw_msa_results.items():\n", + " merged_msa = notebook_utils.merge_chunked_msa(\n", + " results=db_results, max_hits=MAX_HITS.get(db_name))\n", + " if merged_msa.sequences and db_name != 'uniprot':\n", + " single_chain_msas.append(merged_msa)\n", + " msa_size = len(set(merged_msa.sequences))\n", + " print(f'{msa_size} unique sequences found in {db_name} for sequence {sequence_index}')\n", + " elif merged_msa.sequences and db_name == 'uniprot':\n", + " uniprot_msa = merged_msa\n", + "\n", + " notebook_utils.show_msa_info(single_chain_msas=single_chain_msas, sequence_index=sequence_index)\n", + "\n", + " # Turn the raw data into model features.\n", + " feature_dict = {}\n", + " feature_dict.update(pipeline.make_sequence_features(\n", + " sequence=sequence, description='query', num_res=len(sequence)))\n", + " feature_dict.update(pipeline.make_msa_features(msas=single_chain_msas))\n", + " # We don't use templates in AlphaFold Colab notebook, add only empty placeholder features.\n", + " feature_dict.update(notebook_utils.empty_placeholder_template_features(\n", + " num_templates=0, num_res=len(sequence)))\n", + "\n", + " # Construct the all_seq features only for heteromers, not homomers.\n", + " if model_type_to_use == ModelType.MULTIMER and len(set(sequences)) \u003e 1:\n", + " valid_feats = msa_pairing.MSA_FEATURES + (\n", + " 'msa_species_identifiers',\n", + " )\n", + " all_seq_features = {\n", + " f'{k}_all_seq': v for k, v in pipeline.make_msa_features([uniprot_msa]).items()\n", + " if k in valid_feats}\n", + " feature_dict.update(all_seq_features)\n", + "\n", + " features_for_chain[protein.PDB_CHAIN_IDS[sequence_index - 1]] = feature_dict\n", + "\n", + "\n", + "# Do further feature post-processing depending on the model type.\n", + "if model_type_to_use == ModelType.MONOMER:\n", + " np_example = features_for_chain[protein.PDB_CHAIN_IDS[0]]\n", + "\n", + "elif model_type_to_use == ModelType.MULTIMER:\n", + " all_chain_features = {}\n", + " for chain_id, chain_features in features_for_chain.items():\n", + " all_chain_features[chain_id] = pipeline_multimer.convert_monomer_features(\n", + " chain_features, chain_id)\n", + "\n", + " all_chain_features = pipeline_multimer.add_assembly_features(all_chain_features)\n", + "\n", + " np_example = feature_processing.pair_and_merge(\n", + " all_chain_features=all_chain_features)\n", + "\n", + " # Pad MSA to avoid zero-sized extra_msa.\n", + " np_example = pipeline_multimer.pad_msa(np_example, min_num_seq=512)\n", + "\n", + "executed_cells.add(4)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "cellView": "form", + "id": "XUo6foMQxwS2" + }, + "outputs": [], + "source": [ + "#@title 5. Run AlphaFold and download prediction\n", + "\n", + "#@markdown Once this cell has been executed, a zip-archive with\n", + "#@markdown the obtained prediction will be automatically downloaded\n", + "#@markdown to your computer.\n", + "\n", + "#@markdown In case you are having issues with the relaxation stage, you can disable it below.\n", + "#@markdown Warning: This means that the prediction might have distracting\n", + "#@markdown small stereochemical violations.\n", + "\n", + "run_relax = True #@param {type:\"boolean\"}\n", + "\n", + "#@markdown Relaxation is faster with a GPU, but we have found it to be less stable.\n", + "#@markdown You may wish to enable GPU for higher performance, but if it doesn't\n", + "#@markdown converge we suggested reverting to using without GPU.\n", + "\n", + "relax_use_gpu = False #@param {type:\"boolean\"}\n", + "\n", + "\n", + "#@markdown The multimer model will continue recycling until the predictions stop\n", + "#@markdown changing, up to the limit set here. For higher accuracy, at the \n", + "#@markdown potential cost of longer inference times, set this to 20.\n", + "\n", + "multimer_model_max_num_recycles = 3 #@param {type:\"integer\"}\n", + "\n", + "# Track cell execution to ensure correct order\n", + "notebook_utils.check_cell_execution_order(executed_cells, 5)\n", + "\n", + "# --- Run the model ---\n", + "if model_type_to_use == ModelType.MONOMER:\n", + " model_names = config.MODEL_PRESETS['monomer'] + ('model_2_ptm',)\n", + "elif model_type_to_use == ModelType.MULTIMER:\n", + " model_names = config.MODEL_PRESETS['multimer']\n", + "\n", + "output_dir = 'prediction'\n", + "os.makedirs(output_dir, exist_ok=True)\n", + "\n", + "plddts = {}\n", + "ranking_confidences = {}\n", + "pae_outputs = {}\n", + "unrelaxed_proteins = {}\n", + "\n", + "with tqdm.notebook.tqdm(total=len(model_names) + 1, bar_format=TQDM_BAR_FORMAT) as pbar:\n", + " for model_name in model_names:\n", + " pbar.set_description(f'Running {model_name}')\n", + "\n", + " cfg = config.model_config(model_name)\n", + "\n", + " if model_type_to_use == ModelType.MONOMER:\n", + " cfg.data.eval.num_ensemble = 1\n", + " elif model_type_to_use == ModelType.MULTIMER:\n", + " cfg.model.num_ensemble_eval = 1\n", + "\n", + " if model_type_to_use == ModelType.MULTIMER:\n", + " cfg.model.num_recycle = multimer_model_max_num_recycles\n", + " cfg.model.recycle_early_stop_tolerance = 0.5\n", + "\n", + " params = data.get_model_haiku_params(model_name, './alphafold/data')\n", + " model_runner = model.RunModel(cfg, params)\n", + " processed_feature_dict = model_runner.process_features(np_example, random_seed=0)\n", + " prediction = model_runner.predict(processed_feature_dict, random_seed=random.randrange(sys.maxsize))\n", + "\n", + " mean_plddt = prediction['plddt'].mean()\n", + "\n", + " if model_type_to_use == ModelType.MONOMER:\n", + " if 'predicted_aligned_error' in prediction:\n", + " pae_outputs[model_name] = (prediction['predicted_aligned_error'],\n", + " prediction['max_predicted_aligned_error'])\n", + " else:\n", + " # Monomer models are sorted by mean pLDDT. Do not put monomer pTM models here as they\n", + " # should never get selected.\n", + " ranking_confidences[model_name] = prediction['ranking_confidence']\n", + " plddts[model_name] = prediction['plddt']\n", + " elif model_type_to_use == ModelType.MULTIMER:\n", + " # Multimer models are sorted by pTM+ipTM.\n", + " ranking_confidences[model_name] = prediction['ranking_confidence']\n", + " plddts[model_name] = prediction['plddt']\n", + " pae_outputs[model_name] = (prediction['predicted_aligned_error'],\n", + " prediction['max_predicted_aligned_error'])\n", + "\n", + " # Set the b-factors to the per-residue plddt.\n", + " final_atom_mask = prediction['structure_module']['final_atom_mask']\n", + " b_factors = prediction['plddt'][:, None] * final_atom_mask\n", + " unrelaxed_protein = protein.from_prediction(\n", + " processed_feature_dict,\n", + " prediction,\n", + " b_factors=b_factors,\n", + " remove_leading_feature_dimension=(\n", + " model_type_to_use == ModelType.MONOMER))\n", + " unrelaxed_proteins[model_name] = unrelaxed_protein\n", + "\n", + " # Delete unused outputs to save memory.\n", + " del model_runner\n", + " del params\n", + " del prediction\n", + " pbar.update(n=1)\n", + "\n", + " # --- AMBER relax the best model ---\n", + "\n", + " # Find the best model according to the mean pLDDT.\n", + " best_model_name = max(ranking_confidences.keys(), key=lambda x: ranking_confidences[x])\n", + "\n", + " if run_relax:\n", + " pbar.set_description(f'AMBER relaxation')\n", + " amber_relaxer = relax.AmberRelaxation(\n", + " max_iterations=0,\n", + " tolerance=2.39,\n", + " stiffness=10.0,\n", + " exclude_residues=[],\n", + " max_outer_iterations=3,\n", + " use_gpu=relax_use_gpu)\n", + " relaxed_pdb, _, _ = amber_relaxer.process(prot=unrelaxed_proteins[best_model_name])\n", + " else:\n", + " print('Warning: Running without the relaxation stage.')\n", + " relaxed_pdb = protein.to_pdb(unrelaxed_proteins[best_model_name])\n", + " pbar.update(n=1) # Finished AMBER relax.\n", + "\n", + "# Construct multiclass b-factors to indicate confidence bands\n", + "# 0=very low, 1=low, 2=confident, 3=very high\n", + "banded_b_factors = []\n", + "for plddt in plddts[best_model_name]:\n", + " for idx, (min_val, max_val, _) in enumerate(PLDDT_BANDS):\n", + " if plddt \u003e= min_val and plddt \u003c= max_val:\n", + " banded_b_factors.append(idx)\n", + " break\n", + "banded_b_factors = np.array(banded_b_factors)[:, None] * final_atom_mask\n", + "to_visualize_pdb = utils.overwrite_b_factors(relaxed_pdb, banded_b_factors)\n", + "\n", + "\n", + "# Write out the prediction\n", + "pred_output_path = os.path.join(output_dir, 'selected_prediction.pdb')\n", + "with open(pred_output_path, 'w') as f:\n", + " f.write(relaxed_pdb)\n", + "\n", + "\n", + "# --- Visualise the prediction \u0026 confidence ---\n", + "show_sidechains = True\n", + "def plot_plddt_legend():\n", + " \"\"\"Plots the legend for pLDDT.\"\"\"\n", + " thresh = ['Very low (pLDDT \u003c 50)',\n", + " 'Low (70 \u003e pLDDT \u003e 50)',\n", + " 'Confident (90 \u003e pLDDT \u003e 70)',\n", + " 'Very high (pLDDT \u003e 90)']\n", + "\n", + " colors = [x[2] for x in PLDDT_BANDS]\n", + "\n", + " plt.figure(figsize=(2, 2))\n", + " for c in colors:\n", + " plt.bar(0, 0, color=c)\n", + " plt.legend(thresh, frameon=False, loc='center', fontsize=20)\n", + " plt.xticks([])\n", + " plt.yticks([])\n", + " ax = plt.gca()\n", + " ax.spines['right'].set_visible(False)\n", + " ax.spines['top'].set_visible(False)\n", + " ax.spines['left'].set_visible(False)\n", + " ax.spines['bottom'].set_visible(False)\n", + " plt.title('Model Confidence', fontsize=20, pad=20)\n", + " return plt\n", + "\n", + "# Show the structure coloured by chain if the multimer model has been used.\n", + "if model_type_to_use == ModelType.MULTIMER:\n", + " multichain_view = py3Dmol.view(width=800, height=600)\n", + " multichain_view.addModelsAsFrames(to_visualize_pdb)\n", + " multichain_style = {'cartoon': {'colorscheme': 'chain'}}\n", + " multichain_view.setStyle({'model': -1}, multichain_style)\n", + " multichain_view.zoomTo()\n", + " multichain_view.show()\n", + "\n", + "# Color the structure by per-residue pLDDT\n", + "color_map = {i: bands[2] for i, bands in enumerate(PLDDT_BANDS)}\n", + "view = py3Dmol.view(width=800, height=600)\n", + "view.addModelsAsFrames(to_visualize_pdb)\n", + "style = {'cartoon': {'colorscheme': {'prop': 'b', 'map': color_map}}}\n", + "if show_sidechains:\n", + " style['stick'] = {}\n", + "view.setStyle({'model': -1}, style)\n", + "view.zoomTo()\n", + "\n", + "grid = GridspecLayout(1, 2)\n", + "out = Output()\n", + "with out:\n", + " view.show()\n", + "grid[0, 0] = out\n", + "\n", + "out = Output()\n", + "with out:\n", + " plot_plddt_legend().show()\n", + "grid[0, 1] = out\n", + "\n", + "display.display(grid)\n", + "\n", + "# Display pLDDT and predicted aligned error (if output by the model).\n", + "if pae_outputs:\n", + " num_plots = 2\n", + "else:\n", + " num_plots = 1\n", + "\n", + "plt.figure(figsize=[8 * num_plots, 6])\n", + "plt.subplot(1, num_plots, 1)\n", + "plt.plot(plddts[best_model_name])\n", + "plt.title('Predicted LDDT')\n", + "plt.xlabel('Residue')\n", + "plt.ylabel('pLDDT')\n", + "\n", + "if num_plots == 2:\n", + " plt.subplot(1, 2, 2)\n", + " pae, max_pae = list(pae_outputs.values())[0]\n", + " plt.imshow(pae, vmin=0., vmax=max_pae, cmap='Greens_r')\n", + " plt.colorbar(fraction=0.046, pad=0.04)\n", + "\n", + " # Display lines at chain boundaries.\n", + " best_unrelaxed_prot = unrelaxed_proteins[best_model_name]\n", + " total_num_res = best_unrelaxed_prot.residue_index.shape[-1]\n", + " chain_ids = best_unrelaxed_prot.chain_index\n", + " for chain_boundary in np.nonzero(chain_ids[:-1] - chain_ids[1:]):\n", + " if chain_boundary.size:\n", + " plt.plot([0, total_num_res], [chain_boundary, chain_boundary], color='red')\n", + " plt.plot([chain_boundary, chain_boundary], [0, total_num_res], color='red')\n", + "\n", + " plt.title('Predicted Aligned Error')\n", + " plt.xlabel('Scored residue')\n", + " plt.ylabel('Aligned residue')\n", + "\n", + "# Save the predicted aligned error (if it exists).\n", + "pae_output_path = os.path.join(output_dir, 'predicted_aligned_error.json')\n", + "if pae_outputs:\n", + " # Save predicted aligned error in the same format as the AF EMBL DB.\n", + " pae_data = confidence.pae_json(pae=pae, max_pae=max_pae.item())\n", + " with open(pae_output_path, 'w') as f:\n", + " f.write(pae_data)\n", + "\n", + "# --- Download the predictions ---\n", + "shutil.make_archive(base_name='prediction', format='zip', root_dir=output_dir)\n", + "files.download(f'{output_dir}.zip')\n", + "\n", + "executed_cells.add(5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lUQAn5LYC5n4" + }, + "source": [ + "### Interpreting the prediction\n", + "\n", + "In general predicted LDDT (pLDDT) is best used for intra-domain confidence, whereas Predicted Aligned Error (PAE) is best used for determining between domain or between chain confidence.\n", + "\n", + "Please see the [AlphaFold methods paper](https://www.nature.com/articles/s41586-021-03819-2), the [AlphaFold predictions of the human proteome paper](https://www.nature.com/articles/s41586-021-03828-1), and the [AlphaFold-Multimer paper](https://www.biorxiv.org/content/10.1101/2021.10.04.463034v1) as well as [our FAQ](https://alphafold.ebi.ac.uk/faq) on how to interpret AlphaFold predictions." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jeb2z8DIA4om" + }, + "source": [ + "## FAQ \u0026 Troubleshooting\n", + "\n", + "\n", + "* How do I get a predicted protein structure for my protein?\n", + " * Click on the _Connect_ button on the top right to get started.\n", + " * Paste the amino acid sequence of your protein (without any headers) into the “Enter the amino acid sequence to foldâ€.\n", + " * Run all cells in the Colab, either by running them individually (with the play button on the left side) or via _Runtime_ \u003e _Run all._ Make sure you run all 5 cells in order.\n", + " * The predicted protein structure will be downloaded once all cells have been executed. Note: This can take minutes to hours - see below.\n", + "* How long will this take?\n", + " * Downloading the AlphaFold source code can take up to a few minutes.\n", + " * Downloading and installing the third-party software can take up to a few minutes.\n", + " * The search against genetic databases can take minutes to hours.\n", + " * Running AlphaFold and generating the prediction can take minutes to hours, depending on the length of your protein and on which GPU-type Colab has assigned you.\n", + "* My Colab no longer seems to be doing anything, what should I do?\n", + " * Some steps may take minutes to hours to complete.\n", + " * If nothing happens or if you receive an error message, try restarting your Colab runtime via _Runtime_ \u003e _Restart runtime_.\n", + " * If this doesn’t help, try resetting your Colab runtime via _Runtime_ \u003e _Factory reset runtime_.\n", + "* How does this compare to the open-source version of AlphaFold?\n", + " * This Colab version of AlphaFold searches a selected portion of the BFD dataset and currently doesn’t use templates, so its accuracy is reduced in comparison to the full version of AlphaFold that is described in the [AlphaFold paper](https://doi.org/10.1038/s41586-021-03819-2) and [Github repo](https://github.com/deepmind/alphafold/) (the full version is available via the inference script).\n", + "* What is a Colab?\n", + " * See the [Colab FAQ](https://research.google.com/colaboratory/faq.html).\n", + "* I received a warning “Notebook requires high RAMâ€, what do I do?\n", + " * The resources allocated to your Colab vary. See the [Colab FAQ](https://research.google.com/colaboratory/faq.html) for more details.\n", + " * You can execute the Colab nonetheless.\n", + "* I received an error “Colab CPU runtime not supported†or “No GPU/TPU foundâ€, what do I do?\n", + " * Colab CPU runtime is not supported. Try changing your runtime via _Runtime_ \u003e _Change runtime type_ \u003e _Hardware accelerator_ \u003e _GPU_.\n", + " * The type of GPU allocated to your Colab varies. See the [Colab FAQ](https://research.google.com/colaboratory/faq.html) for more details.\n", + " * If you receive “Cannot connect to GPU backendâ€, you can try again later to see if Colab allocates you a GPU.\n", + " * [Colab Pro](https://colab.research.google.com/signup) offers priority access to GPUs.\n", + "* I received an error “ModuleNotFoundError: No module named ...â€, even though I ran the cell that imports it, what do I do?\n", + " * Colab notebooks on the free tier time out after a certain amount of time. See the [Colab FAQ](https://research.google.com/colaboratory/faq.html#idle-timeouts). Try rerunning the whole notebook from the beginning.\n", + "* Does this tool install anything on my computer?\n", + " * No, everything happens in the cloud on Google Colab.\n", + " * At the end of the Colab execution a zip-archive with the obtained prediction will be automatically downloaded to your computer.\n", + "* How should I share feedback and bug reports?\n", + " * Please share any feedback and bug reports as an [issue](https://github.com/deepmind/alphafold/issues) on Github.\n", + "\n", + "\n", + "## Related work\n", + "\n", + "Take a look at these Colab notebooks provided by the community (please note that these notebooks may vary from our validated AlphaFold system and we cannot guarantee their accuracy):\n", + "\n", + "* The [ColabFold AlphaFold2 notebook](https://colab.research.google.com/github/sokrypton/ColabFold/blob/main/AlphaFold2.ipynb) by Sergey Ovchinnikov, Milot Mirdita and Martin Steinegger, which uses an API hosted at the Södinglab based on the MMseqs2 server ([Mirdita et al. 2019, Bioinformatics](https://academic.oup.com/bioinformatics/article/35/16/2856/5280135)) for the multiple sequence alignment creation.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YfPhvYgKC81B" + }, + "source": [ + "# License and Disclaimer\n", + "\n", + "This is not an officially-supported Google product.\n", + "\n", + "This Colab notebook and other information provided is for theoretical modelling only, caution should be exercised in its use. It is provided ‘as-is’ without any warranty of any kind, whether expressed or implied. Information is not intended to be a substitute for professional medical advice, diagnosis, or treatment, and does not constitute medical or other professional advice.\n", + "\n", + "Copyright 2021 DeepMind Technologies Limited.\n", + "\n", + "\n", + "## AlphaFold Code License\n", + "\n", + "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 https://www.apache.org/licenses/LICENSE-2.0.\n", + "\n", + "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.\n", + "\n", + "## Model Parameters License\n", + "\n", + "The AlphaFold parameters are made available under the terms of the Creative Commons Attribution 4.0 International (CC BY 4.0) license. You can find details at: https://creativecommons.org/licenses/by/4.0/legalcode\n", + "\n", + "\n", + "## Third-party software\n", + "\n", + "Use of the third-party software, libraries or code referred to in the [Acknowledgements section](https://github.com/deepmind/alphafold/#acknowledgements) in the AlphaFold README may be governed by separate terms and conditions or license provisions. Your use of the third-party software, libraries or code is subject to any such terms and you should check that you can comply with any applicable restrictions or terms and conditions before use.\n", + "\n", + "\n", + "## Mirrored Databases\n", + "\n", + "The following databases have been mirrored by DeepMind, and are available with reference to the following:\n", + "* UniProt: v2021\\_04 (unmodified), by The UniProt Consortium, available under a [Creative Commons Attribution-NoDerivatives 4.0 International License](http://creativecommons.org/licenses/by-nd/4.0/).\n", + "* UniRef90: v2022\\_01 (unmodified), by The UniProt Consortium, available under a [Creative Commons Attribution-NoDerivatives 4.0 International License](http://creativecommons.org/licenses/by-nd/4.0/).\n", + "* MGnify: v2022\\_05 (unmodified), by Mitchell AL et al., available free of all copyright restrictions and made fully and freely available for both non-commercial and commercial use under [CC0 1.0 Universal (CC0 1.0) Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/).\n", + "* BFD: (modified), by Steinegger M. and Söding J., modified by DeepMind, available under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by/4.0/). See the Methods section of the [AlphaFold proteome paper](https://www.nature.com/articles/s41586-021-03828-1) for details." + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "name": "AlphaFold.ipynb", + "private_outputs": true, + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..08e470e0df5b65fc6b658b5f79bdc4800884e97f --- /dev/null +++ b/requirements.txt @@ -0,0 +1,13 @@ +absl-py==1.0.0 +biopython==1.79 +chex==0.1.86 +dm-haiku==0.0.12 +dm-tree==0.1.8 +docker==5.0.0 +immutabledict==2.0.0 +jax==0.4.26 +ml-collections==0.1.0 +numpy==1.24.3 +pandas==2.0.3 +scipy==1.11.1 +tensorflow-cpu==2.16.1 diff --git a/run_alphafold.py b/run_alphafold.py new file mode 100644 index 0000000000000000000000000000000000000000..86a629d9e11374bea48b62589600decd8d512eb5 --- /dev/null +++ b/run_alphafold.py @@ -0,0 +1,570 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Full AlphaFold protein structure prediction script.""" +import enum +import json +import os +import pathlib +import pickle +import random +import shutil +import sys +import time +from typing import Any, Dict, Union + +from absl import app +from absl import flags +from absl import logging +from alphafold.common import confidence +from alphafold.common import protein +from alphafold.common import residue_constants +from alphafold.data import pipeline +from alphafold.data import pipeline_multimer +from alphafold.data import templates +from alphafold.data.tools import hhsearch +from alphafold.data.tools import hmmsearch +from alphafold.model import config +from alphafold.model import data +from alphafold.model import model +from alphafold.relax import relax +import jax.numpy as jnp +import numpy as np + +# Internal import (7716). + +logging.set_verbosity(logging.INFO) + + +@enum.unique +class ModelsToRelax(enum.Enum): + ALL = 0 + BEST = 1 + NONE = 2 + +flags.DEFINE_list( + 'fasta_paths', None, 'Paths to FASTA files, each containing a prediction ' + 'target that will be folded one after another. If a FASTA file contains ' + 'multiple sequences, then it will be folded as a multimer. Paths should be ' + 'separated by commas. All FASTA paths must have a unique basename as the ' + 'basename is used to name the output directories for each prediction.') + +flags.DEFINE_string('data_dir', None, 'Path to directory of supporting data.') +flags.DEFINE_string('output_dir', None, 'Path to a directory that will ' + 'store the results.') +flags.DEFINE_string('jackhmmer_binary_path', shutil.which('jackhmmer'), + 'Path to the JackHMMER executable.') +flags.DEFINE_string('hhblits_binary_path', shutil.which('hhblits'), + 'Path to the HHblits executable.') +flags.DEFINE_string('hhsearch_binary_path', shutil.which('hhsearch'), + 'Path to the HHsearch executable.') +flags.DEFINE_string('hmmsearch_binary_path', shutil.which('hmmsearch'), + 'Path to the hmmsearch executable.') +flags.DEFINE_string('hmmbuild_binary_path', shutil.which('hmmbuild'), + 'Path to the hmmbuild executable.') +flags.DEFINE_string('kalign_binary_path', shutil.which('kalign'), + 'Path to the Kalign executable.') +flags.DEFINE_string('uniref90_database_path', None, 'Path to the Uniref90 ' + 'database for use by JackHMMER.') +flags.DEFINE_string('mgnify_database_path', None, 'Path to the MGnify ' + 'database for use by JackHMMER.') +flags.DEFINE_string('bfd_database_path', None, 'Path to the BFD ' + 'database for use by HHblits.') +flags.DEFINE_string('small_bfd_database_path', None, 'Path to the small ' + 'version of BFD used with the "reduced_dbs" preset.') +flags.DEFINE_string('uniref30_database_path', None, 'Path to the UniRef30 ' + 'database for use by HHblits.') +flags.DEFINE_string('uniprot_database_path', None, 'Path to the Uniprot ' + 'database for use by JackHMMer.') +flags.DEFINE_string('pdb70_database_path', None, 'Path to the PDB70 ' + 'database for use by HHsearch.') +flags.DEFINE_string('pdb_seqres_database_path', None, 'Path to the PDB ' + 'seqres database for use by hmmsearch.') +flags.DEFINE_string('template_mmcif_dir', None, 'Path to a directory with ' + 'template mmCIF structures, each named <pdb_id>.cif') +flags.DEFINE_string('max_template_date', None, 'Maximum template release date ' + 'to consider. Important if folding historical test sets.') +flags.DEFINE_string('obsolete_pdbs_path', None, 'Path to file containing a ' + 'mapping from obsolete PDB IDs to the PDB IDs of their ' + 'replacements.') +flags.DEFINE_enum('db_preset', 'full_dbs', + ['full_dbs', 'reduced_dbs'], + 'Choose preset MSA database configuration - ' + 'smaller genetic database config (reduced_dbs) or ' + 'full genetic database config (full_dbs)') +flags.DEFINE_enum('model_preset', 'monomer', + ['monomer', 'monomer_casp14', 'monomer_ptm', 'multimer'], + 'Choose preset model configuration - the monomer model, ' + 'the monomer model with extra ensembling, monomer model with ' + 'pTM head, or multimer model') +flags.DEFINE_boolean('benchmark', False, 'Run multiple JAX model evaluations ' + 'to obtain a timing that excludes the compilation time, ' + 'which should be more indicative of the time required for ' + 'inferencing many proteins.') +flags.DEFINE_integer('random_seed', None, 'The random seed for the data ' + 'pipeline. By default, this is randomly generated. Note ' + 'that even if this is set, Alphafold may still not be ' + 'deterministic, because processes like GPU inference are ' + 'nondeterministic.') +flags.DEFINE_integer('num_multimer_predictions_per_model', 5, 'How many ' + 'predictions (each with a different random seed) will be ' + 'generated per model. E.g. if this is 2 and there are 5 ' + 'models then there will be 10 predictions per input. ' + 'Note: this FLAG only applies if model_preset=multimer') +flags.DEFINE_boolean('use_precomputed_msas', False, 'Whether to read MSAs that ' + 'have been written to disk instead of running the MSA ' + 'tools. The MSA files are looked up in the output ' + 'directory, so it must stay the same between multiple ' + 'runs that are to reuse the MSAs. WARNING: This will not ' + 'check if the sequence, database or configuration have ' + 'changed.') +flags.DEFINE_enum_class('models_to_relax', ModelsToRelax.BEST, ModelsToRelax, + 'The models to run the final relaxation step on. ' + 'If `all`, all models are relaxed, which may be time ' + 'consuming. If `best`, only the most confident model ' + 'is relaxed. If `none`, relaxation is not run. Turning ' + 'off relaxation might result in predictions with ' + 'distracting stereochemical violations but might help ' + 'in case you are having issues with the relaxation ' + 'stage.') +flags.DEFINE_boolean('use_gpu_relax', None, 'Whether to relax on GPU. ' + 'Relax on GPU can be much faster than CPU, so it is ' + 'recommended to enable if possible. GPUs must be available' + ' if this setting is enabled.') + +FLAGS = flags.FLAGS + +MAX_TEMPLATE_HITS = 20 +RELAX_MAX_ITERATIONS = 0 +RELAX_ENERGY_TOLERANCE = 2.39 +RELAX_STIFFNESS = 10.0 +RELAX_EXCLUDE_RESIDUES = [] +RELAX_MAX_OUTER_ITERATIONS = 3 + + +def _check_flag(flag_name: str, + other_flag_name: str, + should_be_set: bool): + if should_be_set != bool(FLAGS[flag_name].value): + verb = 'be' if should_be_set else 'not be' + raise ValueError(f'{flag_name} must {verb} set when running with ' + f'"--{other_flag_name}={FLAGS[other_flag_name].value}".') + + +def _jnp_to_np(output: Dict[str, Any]) -> Dict[str, Any]: + """Recursively changes jax arrays to numpy arrays.""" + for k, v in output.items(): + if isinstance(v, dict): + output[k] = _jnp_to_np(v) + elif isinstance(v, jnp.ndarray): + output[k] = np.array(v) + return output + + +def _save_confidence_json_file( + plddt: np.ndarray, output_dir: str, model_name: str +) -> None: + confidence_json = confidence.confidence_json(plddt) + + # Save the confidence json. + confidence_json_output_path = os.path.join( + output_dir, f'confidence_{model_name}.json' + ) + with open(confidence_json_output_path, 'w') as f: + f.write(confidence_json) + + +def _save_mmcif_file( + prot: protein.Protein, + output_dir: str, + model_name: str, + file_id: str, + model_type: str, +) -> None: + """Crate mmCIF string and save to a file. + + Args: + prot: Protein object. + output_dir: Directory to which files are saved. + model_name: Name of a model. + file_id: The file ID (usually the PDB ID) to be used in the mmCIF. + model_type: Monomer or multimer. + """ + + mmcif_string = protein.to_mmcif(prot, file_id, model_type) + + # Save the MMCIF. + mmcif_output_path = os.path.join(output_dir, f'{model_name}.cif') + with open(mmcif_output_path, 'w') as f: + f.write(mmcif_string) + + +def _save_pae_json_file( + pae: np.ndarray, max_pae: float, output_dir: str, model_name: str +) -> None: + """Check prediction result for PAE data and save to a JSON file if present. + + Args: + pae: The n_res x n_res PAE array. + max_pae: The maximum possible PAE value. + output_dir: Directory to which files are saved. + model_name: Name of a model. + """ + pae_json = confidence.pae_json(pae, max_pae) + + # Save the PAE json. + pae_json_output_path = os.path.join(output_dir, f'pae_{model_name}.json') + with open(pae_json_output_path, 'w') as f: + f.write(pae_json) + + +def predict_structure( + fasta_path: str, + fasta_name: str, + output_dir_base: str, + data_pipeline: Union[pipeline.DataPipeline, pipeline_multimer.DataPipeline], + model_runners: Dict[str, model.RunModel], + amber_relaxer: relax.AmberRelaxation, + benchmark: bool, + random_seed: int, + models_to_relax: ModelsToRelax, + model_type: str, +): + """Predicts structure using AlphaFold for the given sequence.""" + logging.info('Predicting %s', fasta_name) + timings = {} + output_dir = os.path.join(output_dir_base, fasta_name) + if not os.path.exists(output_dir): + os.makedirs(output_dir) + msa_output_dir = os.path.join(output_dir, 'msas') + if not os.path.exists(msa_output_dir): + os.makedirs(msa_output_dir) + + # Get features. + t_0 = time.time() + feature_dict = data_pipeline.process( + input_fasta_path=fasta_path, + msa_output_dir=msa_output_dir) + timings['features'] = time.time() - t_0 + + # Write out features as a pickled dictionary. + features_output_path = os.path.join(output_dir, 'features.pkl') + with open(features_output_path, 'wb') as f: + pickle.dump(feature_dict, f, protocol=4) + + unrelaxed_pdbs = {} + unrelaxed_proteins = {} + relaxed_pdbs = {} + relax_metrics = {} + ranking_confidences = {} + + # Run the models. + num_models = len(model_runners) + for model_index, (model_name, model_runner) in enumerate( + model_runners.items()): + logging.info('Running model %s on %s', model_name, fasta_name) + t_0 = time.time() + model_random_seed = model_index + random_seed * num_models + processed_feature_dict = model_runner.process_features( + feature_dict, random_seed=model_random_seed) + timings[f'process_features_{model_name}'] = time.time() - t_0 + + t_0 = time.time() + prediction_result = model_runner.predict(processed_feature_dict, + random_seed=model_random_seed) + t_diff = time.time() - t_0 + timings[f'predict_and_compile_{model_name}'] = t_diff + logging.info( + 'Total JAX model %s on %s predict time (includes compilation time, see --benchmark): %.1fs', + model_name, fasta_name, t_diff) + + if benchmark: + t_0 = time.time() + model_runner.predict(processed_feature_dict, + random_seed=model_random_seed) + t_diff = time.time() - t_0 + timings[f'predict_benchmark_{model_name}'] = t_diff + logging.info( + 'Total JAX model %s on %s predict time (excludes compilation time): %.1fs', + model_name, fasta_name, t_diff) + + plddt = prediction_result['plddt'] + _save_confidence_json_file(plddt, output_dir, model_name) + ranking_confidences[model_name] = prediction_result['ranking_confidence'] + + if ( + 'predicted_aligned_error' in prediction_result + and 'max_predicted_aligned_error' in prediction_result + ): + pae = prediction_result['predicted_aligned_error'] + max_pae = prediction_result['max_predicted_aligned_error'] + _save_pae_json_file(pae, float(max_pae), output_dir, model_name) + + # Remove jax dependency from results. + np_prediction_result = _jnp_to_np(dict(prediction_result)) + + # Save the model outputs. + result_output_path = os.path.join(output_dir, f'result_{model_name}.pkl') + with open(result_output_path, 'wb') as f: + pickle.dump(np_prediction_result, f, protocol=4) + + # Add the predicted LDDT in the b-factor column. + # Note that higher predicted LDDT value means higher model confidence. + plddt_b_factors = np.repeat( + plddt[:, None], residue_constants.atom_type_num, axis=-1) + unrelaxed_protein = protein.from_prediction( + features=processed_feature_dict, + result=prediction_result, + b_factors=plddt_b_factors, + remove_leading_feature_dimension=not model_runner.multimer_mode) + + unrelaxed_proteins[model_name] = unrelaxed_protein + unrelaxed_pdbs[model_name] = protein.to_pdb(unrelaxed_protein) + unrelaxed_pdb_path = os.path.join(output_dir, f'unrelaxed_{model_name}.pdb') + with open(unrelaxed_pdb_path, 'w') as f: + f.write(unrelaxed_pdbs[model_name]) + + _save_mmcif_file( + prot=unrelaxed_protein, + output_dir=output_dir, + model_name=f'unrelaxed_{model_name}', + file_id=str(model_index), + model_type=model_type, + ) + + # Rank by model confidence. + ranked_order = [ + model_name for model_name, confidence in + sorted(ranking_confidences.items(), key=lambda x: x[1], reverse=True)] + + # Relax predictions. + if models_to_relax == ModelsToRelax.BEST: + to_relax = [ranked_order[0]] + elif models_to_relax == ModelsToRelax.ALL: + to_relax = ranked_order + elif models_to_relax == ModelsToRelax.NONE: + to_relax = [] + + for model_name in to_relax: + t_0 = time.time() + relaxed_pdb_str, _, violations = amber_relaxer.process( + prot=unrelaxed_proteins[model_name]) + relax_metrics[model_name] = { + 'remaining_violations': violations, + 'remaining_violations_count': sum(violations) + } + timings[f'relax_{model_name}'] = time.time() - t_0 + + relaxed_pdbs[model_name] = relaxed_pdb_str + + # Save the relaxed PDB. + relaxed_output_path = os.path.join( + output_dir, f'relaxed_{model_name}.pdb') + with open(relaxed_output_path, 'w') as f: + f.write(relaxed_pdb_str) + + relaxed_protein = protein.from_pdb_string(relaxed_pdb_str) + _save_mmcif_file( + prot=relaxed_protein, + output_dir=output_dir, + model_name=f'relaxed_{model_name}', + file_id='0', + model_type=model_type, + ) + + # Write out relaxed PDBs in rank order. + for idx, model_name in enumerate(ranked_order): + ranked_output_path = os.path.join(output_dir, f'ranked_{idx}.pdb') + with open(ranked_output_path, 'w') as f: + if model_name in relaxed_pdbs: + f.write(relaxed_pdbs[model_name]) + else: + f.write(unrelaxed_pdbs[model_name]) + + if model_name in relaxed_pdbs: + protein_instance = protein.from_pdb_string(relaxed_pdbs[model_name]) + else: + protein_instance = protein.from_pdb_string(unrelaxed_pdbs[model_name]) + + _save_mmcif_file( + prot=protein_instance, + output_dir=output_dir, + model_name=f'ranked_{idx}', + file_id=str(idx), + model_type=model_type, + ) + + ranking_output_path = os.path.join(output_dir, 'ranking_debug.json') + with open(ranking_output_path, 'w') as f: + label = 'iptm+ptm' if 'iptm' in prediction_result else 'plddts' + f.write(json.dumps( + {label: ranking_confidences, 'order': ranked_order}, indent=4)) + + logging.info('Final timings for %s: %s', fasta_name, timings) + + timings_output_path = os.path.join(output_dir, 'timings.json') + with open(timings_output_path, 'w') as f: + f.write(json.dumps(timings, indent=4)) + if models_to_relax != ModelsToRelax.NONE: + relax_metrics_path = os.path.join(output_dir, 'relax_metrics.json') + with open(relax_metrics_path, 'w') as f: + f.write(json.dumps(relax_metrics, indent=4)) + + +def main(argv): + if len(argv) > 1: + raise app.UsageError('Too many command-line arguments.') + + for tool_name in ( + 'jackhmmer', 'hhblits', 'hhsearch', 'hmmsearch', 'hmmbuild', 'kalign'): + if not FLAGS[f'{tool_name}_binary_path'].value: + raise ValueError(f'Could not find path to the "{tool_name}" binary. Make ' + 'sure it is installed on your system.') + + use_small_bfd = FLAGS.db_preset == 'reduced_dbs' + _check_flag('small_bfd_database_path', 'db_preset', + should_be_set=use_small_bfd) + _check_flag('bfd_database_path', 'db_preset', + should_be_set=not use_small_bfd) + _check_flag('uniref30_database_path', 'db_preset', + should_be_set=not use_small_bfd) + + run_multimer_system = 'multimer' in FLAGS.model_preset + model_type = 'Multimer' if run_multimer_system else 'Monomer' + _check_flag('pdb70_database_path', 'model_preset', + should_be_set=not run_multimer_system) + _check_flag('pdb_seqres_database_path', 'model_preset', + should_be_set=run_multimer_system) + _check_flag('uniprot_database_path', 'model_preset', + should_be_set=run_multimer_system) + + if FLAGS.model_preset == 'monomer_casp14': + num_ensemble = 8 + else: + num_ensemble = 1 + + # Check for duplicate FASTA file names. + fasta_names = [pathlib.Path(p).stem for p in FLAGS.fasta_paths] + if len(fasta_names) != len(set(fasta_names)): + raise ValueError('All FASTA paths must have a unique basename.') + + if run_multimer_system: + template_searcher = hmmsearch.Hmmsearch( + binary_path=FLAGS.hmmsearch_binary_path, + hmmbuild_binary_path=FLAGS.hmmbuild_binary_path, + database_path=FLAGS.pdb_seqres_database_path) + template_featurizer = templates.HmmsearchHitFeaturizer( + mmcif_dir=FLAGS.template_mmcif_dir, + max_template_date=FLAGS.max_template_date, + max_hits=MAX_TEMPLATE_HITS, + kalign_binary_path=FLAGS.kalign_binary_path, + release_dates_path=None, + obsolete_pdbs_path=FLAGS.obsolete_pdbs_path) + else: + template_searcher = hhsearch.HHSearch( + binary_path=FLAGS.hhsearch_binary_path, + databases=[FLAGS.pdb70_database_path]) + template_featurizer = templates.HhsearchHitFeaturizer( + mmcif_dir=FLAGS.template_mmcif_dir, + max_template_date=FLAGS.max_template_date, + max_hits=MAX_TEMPLATE_HITS, + kalign_binary_path=FLAGS.kalign_binary_path, + release_dates_path=None, + obsolete_pdbs_path=FLAGS.obsolete_pdbs_path) + + monomer_data_pipeline = pipeline.DataPipeline( + jackhmmer_binary_path=FLAGS.jackhmmer_binary_path, + hhblits_binary_path=FLAGS.hhblits_binary_path, + uniref90_database_path=FLAGS.uniref90_database_path, + mgnify_database_path=FLAGS.mgnify_database_path, + bfd_database_path=FLAGS.bfd_database_path, + uniref30_database_path=FLAGS.uniref30_database_path, + small_bfd_database_path=FLAGS.small_bfd_database_path, + template_searcher=template_searcher, + template_featurizer=template_featurizer, + use_small_bfd=use_small_bfd, + use_precomputed_msas=FLAGS.use_precomputed_msas) + + if run_multimer_system: + num_predictions_per_model = FLAGS.num_multimer_predictions_per_model + data_pipeline = pipeline_multimer.DataPipeline( + monomer_data_pipeline=monomer_data_pipeline, + jackhmmer_binary_path=FLAGS.jackhmmer_binary_path, + uniprot_database_path=FLAGS.uniprot_database_path, + use_precomputed_msas=FLAGS.use_precomputed_msas) + else: + num_predictions_per_model = 1 + data_pipeline = monomer_data_pipeline + + model_runners = {} + model_names = config.MODEL_PRESETS[FLAGS.model_preset] + for model_name in model_names: + model_config = config.model_config(model_name) + if run_multimer_system: + model_config.model.num_ensemble_eval = num_ensemble + else: + model_config.data.eval.num_ensemble = num_ensemble + model_params = data.get_model_haiku_params( + model_name=model_name, data_dir=FLAGS.data_dir) + model_runner = model.RunModel(model_config, model_params) + for i in range(num_predictions_per_model): + model_runners[f'{model_name}_pred_{i}'] = model_runner + + logging.info('Have %d models: %s', len(model_runners), + list(model_runners.keys())) + + amber_relaxer = relax.AmberRelaxation( + max_iterations=RELAX_MAX_ITERATIONS, + tolerance=RELAX_ENERGY_TOLERANCE, + stiffness=RELAX_STIFFNESS, + exclude_residues=RELAX_EXCLUDE_RESIDUES, + max_outer_iterations=RELAX_MAX_OUTER_ITERATIONS, + use_gpu=FLAGS.use_gpu_relax) + + random_seed = FLAGS.random_seed + if random_seed is None: + random_seed = random.randrange(sys.maxsize // len(model_runners)) + logging.info('Using random seed %d for the data pipeline', random_seed) + + # Predict structure for each of the sequences. + for i, fasta_path in enumerate(FLAGS.fasta_paths): + fasta_name = fasta_names[i] + predict_structure( + fasta_path=fasta_path, + fasta_name=fasta_name, + output_dir_base=FLAGS.output_dir, + data_pipeline=data_pipeline, + model_runners=model_runners, + amber_relaxer=amber_relaxer, + benchmark=FLAGS.benchmark, + random_seed=random_seed, + models_to_relax=FLAGS.models_to_relax, + model_type=model_type, + ) + + +if __name__ == '__main__': + flags.mark_flags_as_required([ + 'fasta_paths', + 'output_dir', + 'data_dir', + 'uniref90_database_path', + 'mgnify_database_path', + 'template_mmcif_dir', + 'max_template_date', + 'obsolete_pdbs_path', + 'use_gpu_relax', + ]) + + app.run(main) diff --git a/run_alphafold_test.py b/run_alphafold_test.py new file mode 100644 index 0000000000000000000000000000000000000000..f9da3a007fccae5a50c9c5a9274434b93b23aea6 --- /dev/null +++ b/run_alphafold_test.py @@ -0,0 +1,132 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. + +"""Tests for run_alphafold.""" + +import json +import os + +from absl.testing import absltest +from absl.testing import parameterized +import run_alphafold +import mock +import numpy as np +# Internal import (7716). + +TEST_DATA_DIR = 'alphafold/common/testdata/' + + +class RunAlphafoldTest(parameterized.TestCase): + + @parameterized.named_parameters( + ('relax', run_alphafold.ModelsToRelax.ALL), + ('no_relax', run_alphafold.ModelsToRelax.NONE), + ) + def test_end_to_end(self, models_to_relax): + + data_pipeline_mock = mock.Mock() + model_runner_mock = mock.Mock() + amber_relaxer_mock = mock.Mock() + + data_pipeline_mock.process.return_value = {} + model_runner_mock.process_features.return_value = { + 'aatype': np.zeros((12, 10), dtype=np.int32), + 'residue_index': np.tile(np.arange(10, dtype=np.int32)[None], (12, 1)), + } + model_runner_mock.predict.return_value = { + 'structure_module': { + 'final_atom_positions': np.zeros((10, 37, 3)), + 'final_atom_mask': np.ones((10, 37)), + }, + 'predicted_lddt': { + 'logits': np.ones((10, 50)), + }, + 'plddt': np.ones(10) * 42, + 'ranking_confidence': 90, + 'ptm': np.array(0.), + 'aligned_confidence_probs': np.zeros((10, 10, 50)), + 'predicted_aligned_error': np.zeros((10, 10)), + 'max_predicted_aligned_error': np.array(0.), + } + model_runner_mock.multimer_mode = False + + with open( + os.path.join( + absltest.get_default_test_srcdir(), TEST_DATA_DIR, 'glucagon.pdb' + ) + ) as f: + pdb_string = f.read() + amber_relaxer_mock.process.return_value = ( + pdb_string, + None, + [1.0, 0.0, 0.0], + ) + + out_dir = self.create_tempdir().full_path + fasta_path = os.path.join(out_dir, 'target.fasta') + with open(fasta_path, 'wt') as f: + f.write('>A\nAAAAAAAAAAAAA') + fasta_name = 'test' + + run_alphafold.predict_structure( + fasta_path=fasta_path, + fasta_name=fasta_name, + output_dir_base=out_dir, + data_pipeline=data_pipeline_mock, + model_runners={'model1': model_runner_mock}, + amber_relaxer=amber_relaxer_mock, + benchmark=False, + random_seed=0, + models_to_relax=models_to_relax, + model_type='Monomer', + ) + + base_output_files = os.listdir(out_dir) + self.assertIn('target.fasta', base_output_files) + self.assertIn('test', base_output_files) + + target_output_files = os.listdir(os.path.join(out_dir, 'test')) + expected_files = [ + 'confidence_model1.json', + 'features.pkl', + 'msas', + 'pae_model1.json', + 'ranked_0.cif', + 'ranked_0.pdb', + 'ranking_debug.json', + 'result_model1.pkl', + 'timings.json', + 'unrelaxed_model1.cif', + 'unrelaxed_model1.pdb', + ] + if models_to_relax == run_alphafold.ModelsToRelax.ALL: + expected_files.extend( + ['relaxed_model1.cif', 'relaxed_model1.pdb', 'relax_metrics.json'] + ) + with open(os.path.join(out_dir, 'test', 'relax_metrics.json')) as f: + relax_metrics = json.loads(f.read()) + self.assertDictEqual({'model1': {'remaining_violations': [1.0, 0.0, 0.0], + 'remaining_violations_count': 1.0}}, + relax_metrics) + self.assertCountEqual(expected_files, target_output_files) + + # Check that pLDDT is set in the B-factor column. + with open(os.path.join(out_dir, 'test', 'unrelaxed_model1.pdb')) as f: + for line in f: + if line.startswith('ATOM'): + self.assertEqual(line[61:66], '42.00') + + +if __name__ == '__main__': + absltest.main() diff --git a/scripts/download_all_data.sh b/scripts/download_all_data.sh new file mode 100755 index 0000000000000000000000000000000000000000..8eef1caeca00396784bb44a1a7733c63e70f1b8b --- /dev/null +++ b/scripts/download_all_data.sh @@ -0,0 +1,74 @@ +#!/bin/bash +# +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +# +# Downloads and unzips all required data for AlphaFold. +# +# Usage: bash download_all_data.sh /path/to/download/directory +set -e + +if [[ $# -eq 0 ]]; then + echo "Error: download directory must be provided as an input argument." + exit 1 +fi + +if ! command -v aria2c &> /dev/null ; then + echo "Error: aria2c could not be found. Please install aria2c (sudo apt install aria2)." + exit 1 +fi + +DOWNLOAD_DIR="$1" +DOWNLOAD_MODE="${2:-full_dbs}" # Default mode to full_dbs. +if [[ "${DOWNLOAD_MODE}" != full_dbs && "${DOWNLOAD_MODE}" != reduced_dbs ]] +then + echo "DOWNLOAD_MODE ${DOWNLOAD_MODE} not recognized." + exit 1 +fi + +SCRIPT_DIR="$(dirname "$(realpath "$0")")" + +echo "Downloading AlphaFold parameters..." +bash "${SCRIPT_DIR}/download_alphafold_params.sh" "${DOWNLOAD_DIR}" + +if [[ "${DOWNLOAD_MODE}" = reduced_dbs ]] ; then + echo "Downloading Small BFD..." + bash "${SCRIPT_DIR}/download_small_bfd.sh" "${DOWNLOAD_DIR}" +else + echo "Downloading BFD..." + bash "${SCRIPT_DIR}/download_bfd.sh" "${DOWNLOAD_DIR}" +fi + +echo "Downloading MGnify..." +bash "${SCRIPT_DIR}/download_mgnify.sh" "${DOWNLOAD_DIR}" + +echo "Downloading PDB70..." +bash "${SCRIPT_DIR}/download_pdb70.sh" "${DOWNLOAD_DIR}" + +echo "Downloading PDB mmCIF files..." +bash "${SCRIPT_DIR}/download_pdb_mmcif.sh" "${DOWNLOAD_DIR}" + +echo "Downloading Uniref30..." +bash "${SCRIPT_DIR}/download_uniref30.sh" "${DOWNLOAD_DIR}" + +echo "Downloading Uniref90..." +bash "${SCRIPT_DIR}/download_uniref90.sh" "${DOWNLOAD_DIR}" + +echo "Downloading UniProt..." +bash "${SCRIPT_DIR}/download_uniprot.sh" "${DOWNLOAD_DIR}" + +echo "Downloading PDB SeqRes..." +bash "${SCRIPT_DIR}/download_pdb_seqres.sh" "${DOWNLOAD_DIR}" + +echo "All data downloaded." diff --git a/scripts/download_alphafold_params.sh b/scripts/download_alphafold_params.sh new file mode 100755 index 0000000000000000000000000000000000000000..ff96ff4f6eed3a6fbe84419d2015f16dcec1e1d4 --- /dev/null +++ b/scripts/download_alphafold_params.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +# +# Downloads and unzips the AlphaFold parameters. +# +# Usage: bash download_alphafold_params.sh /path/to/download/directory +set -e + +if [[ $# -eq 0 ]]; then + echo "Error: download directory must be provided as an input argument." + exit 1 +fi + +if ! command -v aria2c &> /dev/null ; then + echo "Error: aria2c could not be found. Please install aria2c (sudo apt install aria2)." + exit 1 +fi + +DOWNLOAD_DIR="$1" +ROOT_DIR="${DOWNLOAD_DIR}/params" +SOURCE_URL="https://storage.googleapis.com/alphafold/alphafold_params_2022-12-06.tar" +BASENAME=$(basename "${SOURCE_URL}") + +mkdir --parents "${ROOT_DIR}" +aria2c "${SOURCE_URL}" --dir="${ROOT_DIR}" +tar --extract --verbose --file="${ROOT_DIR}/${BASENAME}" \ + --directory="${ROOT_DIR}" --preserve-permissions +rm "${ROOT_DIR}/${BASENAME}" diff --git a/scripts/download_bfd.sh b/scripts/download_bfd.sh new file mode 100755 index 0000000000000000000000000000000000000000..5d3f26860f2bbb03cc1d09a32223f67483dddaed --- /dev/null +++ b/scripts/download_bfd.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +# +# Downloads and unzips the BFD database for AlphaFold. +# +# Usage: bash download_bfd.sh /path/to/download/directory +set -e + +if [[ $# -eq 0 ]]; then + echo "Error: download directory must be provided as an input argument." + exit 1 +fi + +if ! command -v aria2c &> /dev/null ; then + echo "Error: aria2c could not be found. Please install aria2c (sudo apt install aria2)." + exit 1 +fi + +DOWNLOAD_DIR="$1" +ROOT_DIR="${DOWNLOAD_DIR}/bfd" +# Mirror of: +# https://bfd.mmseqs.com/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt.tar.gz. +SOURCE_URL="https://storage.googleapis.com/alphafold-databases/casp14_versions/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt.tar.gz" +BASENAME=$(basename "${SOURCE_URL}") + +mkdir --parents "${ROOT_DIR}" +aria2c "${SOURCE_URL}" --dir="${ROOT_DIR}" +tar --extract --verbose --file="${ROOT_DIR}/${BASENAME}" \ + --directory="${ROOT_DIR}" +rm "${ROOT_DIR}/${BASENAME}" diff --git a/scripts/download_mgnify.sh b/scripts/download_mgnify.sh new file mode 100755 index 0000000000000000000000000000000000000000..63835d1d51dece9d5a7f22ce861ad550dda99fb5 --- /dev/null +++ b/scripts/download_mgnify.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +# +# Downloads and unzips the MGnify database for AlphaFold. +# +# Usage: bash download_mgnify.sh /path/to/download/directory +set -e + +if [[ $# -eq 0 ]]; then + echo "Error: download directory must be provided as an input argument." + exit 1 +fi + +if ! command -v aria2c &> /dev/null ; then + echo "Error: aria2c could not be found. Please install aria2c (sudo apt install aria2)." + exit 1 +fi + +DOWNLOAD_DIR="$1" +ROOT_DIR="${DOWNLOAD_DIR}/mgnify" +# Mirror of: +# https://ftp.ebi.ac.uk/pub/databases/metagenomics/peptide_database/2022_05/mgy_clusters.fa.gz +SOURCE_URL="https://storage.googleapis.com/alphafold-databases/v2.3/mgy_clusters_2022_05.fa.gz" +BASENAME=$(basename "${SOURCE_URL}") + +mkdir --parents "${ROOT_DIR}" +aria2c "${SOURCE_URL}" --dir="${ROOT_DIR}" +pushd "${ROOT_DIR}" +gunzip "${ROOT_DIR}/${BASENAME}" +popd diff --git a/scripts/download_pdb70.sh b/scripts/download_pdb70.sh new file mode 100755 index 0000000000000000000000000000000000000000..087b17ed3cd35f5c3bf0f1b0d75fca87f91cefff --- /dev/null +++ b/scripts/download_pdb70.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +# +# Downloads and unzips the PDB70 database for AlphaFold. +# +# Usage: bash download_pdb70.sh /path/to/download/directory +set -e + +if [[ $# -eq 0 ]]; then + echo "Error: download directory must be provided as an input argument." + exit 1 +fi + +if ! command -v aria2c &> /dev/null ; then + echo "Error: aria2c could not be found. Please install aria2c (sudo apt install aria2)." + exit 1 +fi + +DOWNLOAD_DIR="$1" +ROOT_DIR="${DOWNLOAD_DIR}/pdb70" +SOURCE_URL="http://wwwuser.gwdg.de/~compbiol/data/hhsuite/databases/hhsuite_dbs/old-releases/pdb70_from_mmcif_200401.tar.gz" +BASENAME=$(basename "${SOURCE_URL}") + +mkdir --parents "${ROOT_DIR}" +aria2c "${SOURCE_URL}" --dir="${ROOT_DIR}" +tar --extract --verbose --file="${ROOT_DIR}/${BASENAME}" \ + --directory="${ROOT_DIR}" +rm "${ROOT_DIR}/${BASENAME}" diff --git a/scripts/download_pdb_mmcif.sh b/scripts/download_pdb_mmcif.sh new file mode 100755 index 0000000000000000000000000000000000000000..ab0c57f61c4ef593f228e6f5a139d35176913c08 --- /dev/null +++ b/scripts/download_pdb_mmcif.sh @@ -0,0 +1,65 @@ +#!/bin/bash +# +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +# +# Downloads, unzips and flattens the PDB database for AlphaFold. +# +# Usage: bash download_pdb_mmcif.sh /path/to/download/directory +set -e + +if [[ $# -eq 0 ]]; then + echo "Error: download directory must be provided as an input argument." + exit 1 +fi + +if ! command -v aria2c &> /dev/null ; then + echo "Error: aria2c could not be found. Please install aria2c (sudo apt install aria2)." + exit 1 +fi + +if ! command -v rsync &> /dev/null ; then + echo "Error: rsync could not be found. Please install rsync." + exit 1 +fi + +DOWNLOAD_DIR="$1" +ROOT_DIR="${DOWNLOAD_DIR}/pdb_mmcif" +RAW_DIR="${ROOT_DIR}/raw" +MMCIF_DIR="${ROOT_DIR}/mmcif_files" + +echo "Running rsync to fetch all mmCIF files (note that the rsync progress estimate might be inaccurate)..." +echo "If the download speed is too slow, try changing the mirror to:" +echo " * rsync.ebi.ac.uk::pub/databases/pdb/data/structures/divided/mmCIF/ (Europe)" +echo " * ftp.pdbj.org::ftp_data/structures/divided/mmCIF/ (Asia)" +echo "or see https://www.wwpdb.org/ftp/pdb-ftp-sites for more download options." +mkdir --parents "${RAW_DIR}" +rsync --recursive --links --perms --times --compress --info=progress2 --delete --port=33444 \ + rsync.rcsb.org::ftp_data/structures/divided/mmCIF/ \ + "${RAW_DIR}" + +echo "Unzipping all mmCIF files..." +find "${RAW_DIR}/" -type f -iname "*.gz" -exec gunzip {} + + +echo "Flattening all mmCIF files..." +mkdir --parents "${MMCIF_DIR}" +find "${RAW_DIR}" -type d -empty -delete # Delete empty directories. +for subdir in "${RAW_DIR}"/*; do + mv "${subdir}/"*.cif "${MMCIF_DIR}" +done + +# Delete empty download directory structure. +find "${RAW_DIR}" -type d -empty -delete + +aria2c "https://files.wwpdb.org/pub/pdb/data/status/obsolete.dat" --dir="${ROOT_DIR}" diff --git a/scripts/download_pdb_seqres.sh b/scripts/download_pdb_seqres.sh new file mode 100755 index 0000000000000000000000000000000000000000..bef1a9ce9036fbc863439e6051795ddfa5eb3ce6 --- /dev/null +++ b/scripts/download_pdb_seqres.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +# +# Downloads and unzips the PDB SeqRes database for AlphaFold. +# +# Usage: bash download_pdb_seqres.sh /path/to/download/directory +set -e + +if [[ $# -eq 0 ]]; then + echo "Error: download directory must be provided as an input argument." + exit 1 +fi + +if ! command -v aria2c &> /dev/null ; then + echo "Error: aria2c could not be found. Please install aria2c (sudo apt install aria2)." + exit 1 +fi + +DOWNLOAD_DIR="$1" +ROOT_DIR="${DOWNLOAD_DIR}/pdb_seqres" +SOURCE_URL="https://files.wwpdb.org/pub/pdb/derived_data/pdb_seqres.txt" +BASENAME=$(basename "${SOURCE_URL}") + +mkdir --parents "${ROOT_DIR}" +aria2c "${SOURCE_URL}" --dir="${ROOT_DIR}" + +# Keep only protein sequences. +grep --after-context=1 --no-group-separator '>.* mol:protein' "${ROOT_DIR}/pdb_seqres.txt" > "${ROOT_DIR}/pdb_seqres_filtered.txt" +mv "${ROOT_DIR}/pdb_seqres_filtered.txt" "${ROOT_DIR}/pdb_seqres.txt" diff --git a/scripts/download_small_bfd.sh b/scripts/download_small_bfd.sh new file mode 100755 index 0000000000000000000000000000000000000000..0b775fa4ee008f3b3bd279f651ff6bb7b6040419 --- /dev/null +++ b/scripts/download_small_bfd.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +# +# Downloads and unzips the Small BFD database for AlphaFold. +# +# Usage: bash download_small_bfd.sh /path/to/download/directory +set -e + +if [[ $# -eq 0 ]]; then + echo "Error: download directory must be provided as an input argument." + exit 1 +fi + +if ! command -v aria2c &> /dev/null ; then + echo "Error: aria2c could not be found. Please install aria2c (sudo apt install aria2)." + exit 1 +fi + +DOWNLOAD_DIR="$1" +ROOT_DIR="${DOWNLOAD_DIR}/small_bfd" +SOURCE_URL="https://storage.googleapis.com/alphafold-databases/reduced_dbs/bfd-first_non_consensus_sequences.fasta.gz" +BASENAME=$(basename "${SOURCE_URL}") + +mkdir --parents "${ROOT_DIR}" +aria2c "${SOURCE_URL}" --dir="${ROOT_DIR}" +pushd "${ROOT_DIR}" +gunzip "${ROOT_DIR}/${BASENAME}" +popd diff --git a/scripts/download_uniprot.sh b/scripts/download_uniprot.sh new file mode 100755 index 0000000000000000000000000000000000000000..21250cea744cd3c151bf24aad2e7e872759e597e --- /dev/null +++ b/scripts/download_uniprot.sh @@ -0,0 +1,55 @@ +#!/bin/bash +# +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +# +# Downloads, unzips and merges the SwissProt and TrEMBL databases for +# AlphaFold-Multimer. +# +# Usage: bash download_uniprot.sh /path/to/download/directory +set -e + +if [[ $# -eq 0 ]]; then + echo "Error: download directory must be provided as an input argument." + exit 1 +fi + +if ! command -v aria2c &> /dev/null ; then + echo "Error: aria2c could not be found. Please install aria2c (sudo apt install aria2)." + exit 1 +fi + +DOWNLOAD_DIR="$1" +ROOT_DIR="${DOWNLOAD_DIR}/uniprot" + +TREMBL_SOURCE_URL="https://ftp.ebi.ac.uk/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_trembl.fasta.gz" +TREMBL_BASENAME=$(basename "${TREMBL_SOURCE_URL}") +TREMBL_UNZIPPED_BASENAME="${TREMBL_BASENAME%.gz}" + +SPROT_SOURCE_URL="https://ftp.ebi.ac.uk/pub/databases/uniprot/current_release/knowledgebase/complete/uniprot_sprot.fasta.gz" +SPROT_BASENAME=$(basename "${SPROT_SOURCE_URL}") +SPROT_UNZIPPED_BASENAME="${SPROT_BASENAME%.gz}" + +mkdir --parents "${ROOT_DIR}" +aria2c "${TREMBL_SOURCE_URL}" --dir="${ROOT_DIR}" +aria2c "${SPROT_SOURCE_URL}" --dir="${ROOT_DIR}" +pushd "${ROOT_DIR}" +gunzip "${ROOT_DIR}/${TREMBL_BASENAME}" +gunzip "${ROOT_DIR}/${SPROT_BASENAME}" + +# Concatenate TrEMBL and SwissProt, rename to uniprot and clean up. +cat "${ROOT_DIR}/${SPROT_UNZIPPED_BASENAME}" >> "${ROOT_DIR}/${TREMBL_UNZIPPED_BASENAME}" +mv "${ROOT_DIR}/${TREMBL_UNZIPPED_BASENAME}" "${ROOT_DIR}/uniprot.fasta" +rm "${ROOT_DIR}/${SPROT_UNZIPPED_BASENAME}" +popd diff --git a/scripts/download_uniref30.sh b/scripts/download_uniref30.sh new file mode 100755 index 0000000000000000000000000000000000000000..f0abb5372801e76f674209d59d3f229485d14565 --- /dev/null +++ b/scripts/download_uniref30.sh @@ -0,0 +1,43 @@ +#!/bin/bash +# +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +# +# Downloads and unzips the Uniclust30 database for AlphaFold. +# +# Usage: bash download_uniclust30.sh /path/to/download/directory +set -e + +if [[ $# -eq 0 ]]; then + echo "Error: download directory must be provided as an input argument." + exit 1 +fi + +if ! command -v aria2c &> /dev/null ; then + echo "Error: aria2c could not be found. Please install aria2c (sudo apt install aria2)." + exit 1 +fi + +DOWNLOAD_DIR="$1" +ROOT_DIR="${DOWNLOAD_DIR}/uniref30" +# Mirror of: +# https://wwwuser.gwdg.de/~compbiol/uniclust/2021_03/UniRef30_2021_03.tar.gz +SOURCE_URL="https://storage.googleapis.com/alphafold-databases/v2.3/UniRef30_2021_03.tar.gz" +BASENAME=$(basename "${SOURCE_URL}") + +mkdir --parents "${ROOT_DIR}" +aria2c "${SOURCE_URL}" --dir="${ROOT_DIR}" +tar --extract --verbose --file="${ROOT_DIR}/${BASENAME}" \ + --directory="${ROOT_DIR}" +rm "${ROOT_DIR}/${BASENAME}" diff --git a/scripts/download_uniref90.sh b/scripts/download_uniref90.sh new file mode 100755 index 0000000000000000000000000000000000000000..7a8b286f05a1d84c15c4f665871a6ea143444679 --- /dev/null +++ b/scripts/download_uniref90.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +# +# Downloads and unzips the UniRef90 database for AlphaFold. +# +# Usage: bash download_uniref90.sh /path/to/download/directory +set -e + +if [[ $# -eq 0 ]]; then + echo "Error: download directory must be provided as an input argument." + exit 1 +fi + +if ! command -v aria2c &> /dev/null ; then + echo "Error: aria2c could not be found. Please install aria2c (sudo apt install aria2)." + exit 1 +fi + +DOWNLOAD_DIR="$1" +ROOT_DIR="${DOWNLOAD_DIR}/uniref90" +SOURCE_URL="https://ftp.ebi.ac.uk/pub/databases/uniprot/uniref/uniref90/uniref90.fasta.gz" +BASENAME=$(basename "${SOURCE_URL}") + +mkdir --parents "${ROOT_DIR}" +aria2c "${SOURCE_URL}" --dir="${ROOT_DIR}" +pushd "${ROOT_DIR}" +gunzip "${ROOT_DIR}/${BASENAME}" +popd diff --git a/server/README.md b/server/README.md new file mode 100644 index 0000000000000000000000000000000000000000..99b2fd8511d553697baf5e6b8d78d09ef0381587 --- /dev/null +++ b/server/README.md @@ -0,0 +1,286 @@ +# JSON file format for AlphaFold Server jobs + +You can +[download an example JSON file here](https://github.com/google-deepmind/alphafold/blob/main/server/example.json); +here we describe the contents of this example JSON file. + +This JSON file consists of a list of dictionaries (even in the case of a single +dictionary, a single-element list must be used), with each dictionary containing +a job description. Therefore, you can specify multiple jobs in one JSON file. + +Each job description contains a job name, a list of PRNG seeds (which can be an +empty list for automated random seed assignment), and a list of entities +(molecules) to be modeled. + +AlphaFold Server JSON files are especially useful for automation of repetitive +modeling jobs (e.g. to screen interactions of one protein with a small number of +others). The easiest way to construct an initial JSON file is to run a modeling +job via AlphaFold Server GUI and use it as a template. AlphaFold Server will +produce a zip file containing modeling results. Inside the zip file you will +find a JSON file named `<job_name>_job_request.json` containing the job inputs. +These files offer a convenient starting point for generating new jobs as they +are easily editable in standard text editors or in programming environments like +Google Colab notebooks. + +Note that comments are not allowed in JSON files. + +## Job name, seeds and sequences + +* `name` is a string with the job name. This is how the job will appear as in + the job history table. +* `modelSeeds` is a list of strings of uint32 seed values (e.g. + `["1593933729", "4273"]`). Seeds are used to run the modeling. We recommend + providing an empty list, in which case a single random seed will be used. + This is the recommended option. +* `sequences` is a list of dictionaries that carry descriptions of the + entities (molecules) for modeling. + +```json +{ + "name": "Test Fold Job Number One", + "modelSeeds": [], + "sequences": [...] +} +``` + +## Entity types + +Valid entity types mirror those available in the AlphaFold Server web interface: + +* `proteinChain` – used for proteins +* `dnaSequence` – used for DNA (single strand) +* `rnaSequence` – used for RNA (single strand) +* `ligand` – used for allowed ligands +* `ion` – used for allowed ions + +### Protein chains + +`sequence` is a string containing protein sequence; the same limitations as in +the UI are in place, e.g. only letters corresponding to amino acids are allowed, +as defined by IUPAC. Only 20 standard amino acid type are supported. + +`count` is the number of copies of this protein chain (integer). + +`glycans` is an optional list of dictionaries that carries descriptions of the +protein glycosylation. + +* `residues` is a string defining glycan. Please refer to the + [FAQ](https://alphafoldserver.com/faq) for the format description and + allowed glycans. +* `position` is a position of the amino acid to which the glycan is attached + (integer, 1-based indexing). + +`modifications` is an optional list of dictionaries that carries descriptions of +the post-translational modifications. + +* `ptmType` is a string containing the + [CCD code](https://www.wwpdb.org/data/ccd) of the modification; the same + codes are allowed as in the UI. +* `position` is a position of the modified amino acid (integer). +* Allowed modifications: `CCD_SEP`, `CCD_TPO`, `CCD_PTR`, `CCD_NEP`, + `CCD_HIP`, `CCD_ALY`, `CCD_MLY`, `CCD_M3L`, `CCD_MLZ`, `CCD_2MR`, `CCD_AGM`, + `CCD_MCS`, `CCD_HYP`, `CCD_HY3`, `CCD_LYZ`, `CCD_AHB`, `CCD_P1L`, `CCD_SNN`, + `CCD_SNC`, `CCD_TRF`, `CCD_KCR`, `CCD_CIR`, `CCD_YHA` + +```json +{ + "proteinChain": { + "sequence": "PREACHINGS", + + "glycans": [ + { + "residues": "NAG(NAG)(BMA)", + "position": 8 + }, + { + "residues": "BMA", + "position": 10 + } + ], + + "modifications": [ + { + "ptmType": "CCD_HY3", + "ptmPosition": 1 + }, + { + "ptmType": "CCD_P1L", + "ptmPosition": 5 + } + ], + + "count": 1 + } +}, +{ + "proteinChain": { + "sequence": "REACHER", + "count": 1 + } +} +``` + +### DNA chains + +Please note that the `dnaSequence` type refers to single stranded DNA. If you +wish to model double stranded DNA, please add a second `"dnaSequence`", carrying +the sequence of the reverse complement strand. + +`sequence` is a string containing a DNA sequence; the same limitations as in the +UI are in place, i.e. only letters A, T, G, C are allowed. + +`count` is a number of copies of this DNA chain (integer). + +`modifications` is an optional list of dictionaries that carries descriptions of +the DNA chemical modifications. + +* `modificationType` is a string containing + [CCD code](https://www.wwpdb.org/data/ccd) of modification; the same codes + are allowed as in the UI. +* `basePosition` is a position of the modified nucleotide (integer). +* Allowed modifications: `CCD_5CM`, `CCD_C34`, `CCD_5HC`, `CCD_6OG`, + `CCD_6MA`, `CCD_1CC`, `CCD_8OG`, `CCD_5FC`, `CCD_3DR` + +```json +{ + "dnaSequence": { + "sequence": "GATTACA", + + "modifications": [ + { + "modificationType": "CCD_6OG", + "basePosition": 1 + }, + { + "modificationType": "CCD_6MA", + "basePosition": 2 + } + ], + + "count": 1 + } +}, +{ + "dnaSequence": { + "sequence": "TGTAATC", + "count": 1 + } +} +``` + +### RNA chains + +`sequence` is a string containing RNA sequence (single strand); the same +limitations as in the UI are in place, e.g. only letters A, U, G, C are allowed. + +`count` is a number of copies of this RNA chain (integer). + +`modifications` is an optional list of dictionaries that carries descriptions of +the RNA chemical modifications. + +* `modificationType` is a string containing + [CCD code](https://www.wwpdb.org/data/ccd) of modification; the same codes + are allowed as in the UI. +* `basePosition` is a position of the modified nucleotide (integer). +* Allowed modifications: `CCD_PSU`, `CCD_5MC`, `CCD_OMC`, `CCD_4OC`, + `CCD_5MU`, `CCD_OMU`, `CCD_UR3`, `CCD_A2M`, `CCD_MA6`, `CCD_6MZ`, `CCD_2MG`, + `CCD_OMG`, `CCD_7MG`, `CCD_RSQ` + +```json +{ + "rnaSequence": { + "sequence": "GUAC", + + "modifications": [ + { + "modificationType": "CCD_2MG", + "basePosition": 1 + }, + { + "modificationType": "CCD_5MC", + "basePosition": 4 + } + ], + + "count": 1 + } +} +``` + +### Ligands + +`ligand` is a string containing the [CCD code](https://www.wwpdb.org/data/ccd) +of the ligand; the same codes are allowed as in the UI. + +`count` is the number of copies of this ligand (integer). + +Allowed ligands: `CCD_ADP`, `CCD_ATP`, `CCD_AMP`, `CCD_GTP`, `CCD_GDP`, +`CCD_FAD`, `CCD_NAD`, `CCD_NAP`, `CCD_NDP`, `CCD_HEM`, `CCD_HEC`, `CCD_PLM`, +`CCD_OLA`, `CCD_MYR`, `CCD_CIT`, `CCD_CLA`, `CCD_CHL`, `CCD_BCL`, `CCD_BCB` + +```json +{ + "ligand": { + "ligand": "CCD_ATP", + "count": 1 + } +}, +{ + "ligand": { + "ligand": "CCD_HEM", + "count": 2 + } +} +``` + +### Ions + +`ion` is a string containing [CCD code](https://www.wwpdb.org/data/ccd) of the +ion; the same codes are allowed as in the UI. The ion charge is implicitly +specified by the CCD code. + +`count` is a number of copies of this ion (integer). + +Allowed ions: `MG`, `ZN`, `CL`, `CA`, `NA`, `MN`, `K`, `FE`, `CU`, `CO` + +```json +{ + "ion": { + "ion": "MG", + "count": 2 + } +}, +{ + "ion": { + "ion": "NA", + "count": 3 + } +} +``` + +# Additional modeling jobs + +You may specify multiple jobs in one JSON file. This is an example of a simple +job request for one protein chain and two copies of the palindromic DNA +sequence: + +```json +{ + "name": "Test Fold Job Number Two", + "modelSeeds": [], + "sequences": [ + { + "proteinChain": { + "sequence": "TEACHINGS", + "count": 1 + } + }, + { + "dnaSequence": { + "sequence": "TAGCTA", + "count": 2 + } + } + ] +} +``` diff --git a/server/example.json b/server/example.json new file mode 100644 index 0000000000000000000000000000000000000000..e0c9cedfb26d8e6e441212133dc78c9b49b2b812 --- /dev/null +++ b/server/example.json @@ -0,0 +1,120 @@ +[ + { + "name": "Test Fold Job Number One", + "modelSeeds": [], + "sequences": [ + { + "proteinChain": { + "sequence": "PREACHINGS", + "glycans": [ + { + "residues": "NAG(NAG)(BMA)", + "position": 8 + }, + { + "residues": "BMA", + "position": 10 + } + ], + "modifications": [ + { + "ptmType": "CCD_HY3", + "ptmPosition": 1 + }, + { + "ptmType": "CCD_P1L", + "ptmPosition": 5 + } + ], + "count": 1 + } + }, + { + "proteinChain": { + "sequence": "REACHER", + "count": 1 + } + }, + { + "dnaSequence": { + "sequence": "GATTACA", + "modifications": [ + { + "modificationType": "CCD_6OG", + "basePosition": 1 + }, + { + "modificationType": "CCD_6MA", + "basePosition": 2 + } + ], + "count": 1 + } + }, + { + "dnaSequence": { + "sequence": "TGTAATC", + "count": 1 + } + }, + { + "rnaSequence": { + "sequence": "GUAC", + "modifications": [ + { + "modificationType": "CCD_2MG", + "basePosition": 1 + }, + { + "modificationType": "CCD_5MC", + "basePosition": 4 + } + ], + "count": 1 + } + }, + { + "ligand": { + "ligand": "CCD_ATP", + "count": 1 + } + }, + { + "ligand": { + "ligand": "CCD_HEM", + "count": 2 + } + }, + { + "ion": { + "ion": "MG", + "count": 2 + } + }, + { + "ion": { + "ion": "NA", + "count": 3 + } + } + ] + }, + { + "name": "Test Fold Job Number Two", + "modelSeeds": [], + "sequences": [ + { + "proteinChain": { + "sequence": "TEACHINGS", + "count": 1 + } + }, + { + "dnaSequence": { + "sequence": "TAGGACA", + "count": 1 + } + } + ] + } +] diff --git a/setup.py b/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..2252af6cd9fe6bb1f15d318c4280e55169f4eda4 --- /dev/null +++ b/setup.py @@ -0,0 +1,64 @@ +# Copyright 2021 DeepMind Technologies Limited +# +# 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. +"""Install script for setuptools.""" + +from alphafold import version +from setuptools import find_packages +from setuptools import setup + +setup( + name='alphafold', + version=version.__version__, + description=( + 'An implementation of the inference pipeline of AlphaFold v2.0. This is' + ' a completely new model that was entered as AlphaFold2 in CASP14 and' + ' published in Nature.' + ), + author='DeepMind', + author_email='alphafold@deepmind.com', + license='Apache License, Version 2.0', + url='https://github.com/deepmind/alphafold', + packages=find_packages(), + install_requires=[ + 'absl-py', + 'biopython', + 'chex', + 'dm-haiku', + 'dm-tree', + 'docker', + 'immutabledict', + 'jax', + 'ml-collections', + 'numpy', + 'pandas', + 'scipy', + 'tensorflow-cpu', + ], + tests_require=[ + 'matplotlib', # For notebook_utils_test. + 'mock', + ], + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'Intended Audience :: Science/Research', + 'License :: OSI Approved :: Apache Software License', + 'Operating System :: POSIX :: Linux', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', + 'Topic :: Scientific/Engineering :: Artificial Intelligence', + ], +)