"tests/nn/git@developer.sourcefind.cn:OpenDAS/fairscale.git" did not exist on "79365ee6c4ae92352db79104d785b99b22d8f568"
Unverified Commit 656aa037 authored by akkamesh's avatar akkamesh Committed by GitHub
Browse files

CUDA port for AEV computation (#516)



* cuda port for aev computation

* benchmark, setup and import

* fix bug

* fix flake8 and jit

* fix collections.abc for python>3.7

* setup gitingore

* format code with formatter

* ignore more

* Use torch API to set streams

* Use pytorch's caching allocator

* empty line

* fix

* cuaev correntness testr, instruction of install on readme

* readme

* fix readme

* fix readme

* fix readme

* fix readme

* add usage in readme

* fix readme

* add test in readme

* fix readme

* -std=c++14

* bug fix - add async data copy

* bug fix - add missing stream sync

* code refactor and cosmetic changes

* aev benchmark for big protein

* remove mdtraj

* remove print

* move pdb to dataset folder

* cosmetic changes

* Move torchani/extensions -> torchani/cuaev

* clang-format -i

* cleanup

* return aev from cuComputeAEV

* Update aev.py

* Update aev.py

* fix flake8

* fix LGTM unused local variable

* clang-format

* fix

* save

* install change
Co-authored-by: default avatarrichard <yueyericardo@gmail.com>
Co-authored-by: default avatarXiang Gao <qasdfgtyuiop@gmail.com>
parent 57dd26bf
...@@ -5,7 +5,9 @@ a.out ...@@ -5,7 +5,9 @@ a.out
/test.py /test.py
/.vscode /.vscode
/build* /build*
/.eggs .eggs
*.egg-info
*.ninja
/torchani.egg-info /torchani.egg-info
/*.h5 /*.h5
/*.hdf5 /*.hdf5
...@@ -19,6 +21,9 @@ benchmark_xyz ...@@ -19,6 +21,9 @@ benchmark_xyz
/*.ipt /*.ipt
/*.params /*.params
/*.dat /*.dat
*.o
*.so
*.ninja_log
/tmp /tmp
*_cache *_cache
datacache datacache
......
...@@ -61,6 +61,7 @@ To run the tests and examples, you must manually download a data package ...@@ -61,6 +61,7 @@ To run the tests and examples, you must manually download a data package
./download.sh ./download.sh
``` ```
(Optional) To install AEV CUDA Extension (speedup for AEV computation), please follow the instruction at [torchani/cuaev](https://github.com/aiqm/torchani/tree/master/torchani/cuaev).
# Citation # Citation
......
ATOM 1 N MET 1 -10.603 53.989 38.777 1.00 0.00 N
ATOM 2 H1 MET 1 -9.601 54.066 38.681 1.00 0.00 H
ATOM 3 H2 MET 1 -10.837 53.027 38.976 1.00 0.00 H
ATOM 4 H3 MET 1 -10.928 54.724 39.388 1.00 0.00 H
ATOM 5 CA MET 1 -11.207 54.272 37.477 1.00 0.00 C
ATOM 6 HA MET 1 -11.788 53.415 37.136 1.00 0.00 H
ATOM 7 CB MET 1 -12.140 55.480 37.597 1.00 0.00 C
ATOM 8 HB2 MET 1 -11.537 56.320 37.941 1.00 0.00 H
ATOM 9 HB3 MET 1 -12.523 55.693 36.599 1.00 0.00 H
ATOM 10 CG MET 1 -13.304 55.268 38.551 1.00 0.00 C
ATOM 11 HG2 MET 1 -12.904 54.914 39.501 1.00 0.00 H
ATOM 12 HG3 MET 1 -13.799 56.228 38.701 1.00 0.00 H
ATOM 13 SD MET 1 -14.504 54.072 37.931 1.00 0.00 S
ATOM 14 CE MET 1 -13.975 52.580 38.762 1.00 0.00 C
ATOM 15 HE1 MET 1 -14.028 52.726 39.841 1.00 0.00 H
ATOM 16 HE2 MET 1 -14.625 51.754 38.475 1.00 0.00 H
ATOM 17 HE3 MET 1 -12.948 52.349 38.477 1.00 0.00 H
ATOM 18 C MET 1 -10.218 54.512 36.339 1.00 0.00 C
ATOM 19 O MET 1 -10.628 54.832 35.226 1.00 0.00 O
ATOM 20 N GLU 2 -8.923 54.356 36.600 1.00 0.00 N
ATOM 21 H GLU 2 -8.597 54.111 37.524 1.00 0.00 H
ATOM 22 CA GLU 2 -7.930 54.580 35.553 1.00 0.00 C
ATOM 23 HA GLU 2 -8.021 55.597 35.172 1.00 0.00 H
ATOM 24 CB GLU 2 -6.514 54.387 36.099 1.00 0.00 C
ATOM 25 HB2 GLU 2 -5.820 54.724 35.329 1.00 0.00 H
ATOM 26 HB3 GLU 2 -6.416 55.023 36.979 1.00 0.00 H
ATOM 27 CG GLU 2 -6.195 52.955 36.473 1.00 0.00 C
ATOM 28 HG2 GLU 2 -7.018 52.557 37.067 1.00 0.00 H
ATOM 29 HG3 GLU 2 -6.115 52.394 35.542 1.00 0.00 H
ATOM 30 CD GLU 2 -4.903 52.826 37.252 1.00 0.00 C
ATOM 31 OE1 GLU 2 -4.491 53.801 37.931 1.00 0.00 O
ATOM 32 OE2 GLU 2 -4.309 51.729 37.198 1.00 0.00 O
ATOM 33 C GLU 2 -8.163 53.634 34.378 1.00 0.00 C
ATOM 34 O GLU 2 -8.600 52.499 34.555 1.00 0.00 O
ATOM 35 N GLU 3 -7.868 54.118 33.177 1.00 0.00 N
ATOM 36 H GLU 3 -7.521 55.062 33.088 1.00 0.00 H
ATOM 37 CA GLU 3 -8.047 53.330 31.962 1.00 0.00 C
ATOM 38 HA GLU 3 -8.255 52.286 32.196 1.00 0.00 H
ATOM 39 CB GLU 3 -9.216 53.891 31.140 1.00 0.00 C
ATOM 40 HB2 GLU 3 -10.135 53.826 31.723 1.00 0.00 H
ATOM 41 HB3 GLU 3 -9.018 54.933 30.890 1.00 0.00 H
ATOM 42 CG GLU 3 -9.368 53.089 29.869 1.00 0.00 C
ATOM 43 HG2 GLU 3 -8.450 53.154 29.286 1.00 0.00 H
ATOM 44 HG3 GLU 3 -9.567 52.047 30.119 1.00 0.00 H
ATOM 45 CD GLU 3 -10.531 53.647 29.052 1.00 0.00 C
ATOM 46 OE1 GLU 3 -10.266 54.555 28.219 1.00 0.00 O
ATOM 47 OE2 GLU 3 -11.673 53.160 29.268 1.00 0.00 O
ATOM 48 C GLU 3 -6.767 53.372 31.139 1.00 0.00 C
ATOM 49 O GLU 3 -6.349 54.436 30.676 1.00 0.00 O
ATOM 50 N VAL 4 -6.124 52.222 30.976 1.00 0.00 N
ATOM 51 H VAL 4 -6.462 51.363 31.387 1.00 0.00 H
ATOM 52 CA VAL 4 -4.910 52.174 30.182 1.00 0.00 C
ATOM 53 HA VAL 4 -4.790 53.082 29.591 1.00 0.00 H
ATOM 54 CB VAL 4 -3.637 51.974 31.048 1.00 0.00 C
ATOM 55 HB VAL 4 -2.759 52.014 30.404 1.00 0.00 H
ATOM 56 CG1 VAL 4 -3.539 53.062 32.105 1.00 0.00 C
ATOM 57 HG11 VAL 4 -4.417 53.023 32.750 1.00 0.00 H
ATOM 58 HG12 VAL 4 -2.641 52.908 32.704 1.00 0.00 H
ATOM 59 HG13 VAL 4 -3.489 54.037 31.620 1.00 0.00 H
ATOM 60 CG2 VAL 4 -3.646 50.601 31.680 1.00 0.00 C
ATOM 61 HG21 VAL 4 -3.669 49.841 30.899 1.00 0.00 H
ATOM 62 HG22 VAL 4 -2.748 50.473 32.285 1.00 0.00 H
ATOM 63 HG23 VAL 4 -4.527 50.497 32.313 1.00 0.00 H
ATOM 64 C VAL 4 -4.994 51.011 29.215 1.00 0.00 C
ATOM 65 O VAL 4 -5.908 50.185 29.289 1.00 0.00 O
ATOM 66 N THR 5 -4.038 50.960 28.302 1.00 0.00 N
ATOM 67 H THR 5 -3.329 51.678 28.271 1.00 0.00 H
ATOM 68 CA THR 5 -3.962 49.875 27.340 1.00 0.00 C
ATOM 69 HA THR 5 -4.751 49.156 27.561 1.00 0.00 H
ATOM 70 CB THR 5 -4.139 50.371 25.889 1.00 0.00 C
ATOM 71 HB THR 5 -3.384 51.128 25.675 1.00 0.00 H
ATOM 72 CG2 THR 5 -3.984 49.208 24.913 1.00 0.00 C
ATOM 73 HG21 THR 5 -4.739 48.451 25.126 1.00 0.00 H
ATOM 74 HG22 THR 5 -4.111 49.570 23.893 1.00 0.00 H
ATOM 75 HG23 THR 5 -2.991 48.771 25.022 1.00 0.00 H
ATOM 76 OG1 THR 5 -5.446 50.936 25.730 1.00 0.00 O
ATOM 77 HG1 THR 5 -5.554 51.244 24.827 1.00 0.00 H
ATOM 78 C THR 5 -2.583 49.240 27.461 1.00 0.00 C
ATOM 79 O THR 5 -1.569 49.934 27.409 1.00 0.00 O
ATOM 80 N ILE 6 -2.551 47.928 27.657 1.00 0.00 N
ATOM 81 H ILE 6 -3.411 47.403 27.724 1.00 0.00 H
ATOM 82 CA ILE 6 -1.289 47.201 27.737 1.00 0.00 C
ATOM 83 HA ILE 6 -0.458 47.895 27.861 1.00 0.00 H
ATOM 84 CB ILE 6 -1.285 46.179 28.898 1.00 0.00 C
ATOM 85 HB ILE 6 -2.133 45.503 28.787 1.00 0.00 H
ATOM 86 CG2 ILE 6 0.015 45.373 28.875 1.00 0.00 C
ATOM 87 HG21 ILE 6 0.864 46.048 28.987 1.00 0.00 H
ATOM 88 HG22 ILE 6 0.012 44.655 29.695 1.00 0.00 H
ATOM 89 HG23 ILE 6 0.097 44.841 27.927 1.00 0.00 H
ATOM 90 CG1 ILE 6 -1.464 46.904 30.240 1.00 0.00 C
ATOM 91 HG12 ILE 6 -2.413 47.437 30.191 1.00 0.00 H
ATOM 92 HG13 ILE 6 -1.519 46.137 31.013 1.00 0.00 H
ATOM 93 CD1 ILE 6 -0.353 47.880 30.575 1.00 0.00 C
ATOM 94 HD11 ILE 6 -0.298 48.648 29.803 1.00 0.00 H
ATOM 95 HD12 ILE 6 -0.558 48.348 31.538 1.00 0.00 H
ATOM 96 HD13 ILE 6 0.597 47.347 30.625 1.00 0.00 H
ATOM 97 C ILE 6 -1.177 46.445 26.414 1.00 0.00 C
ATOM 98 O ILE 6 -2.097 45.724 26.034 1.00 0.00 O
ATOM 99 N LYS 7 -0.065 46.622 25.708 1.00 0.00 N
ATOM 100 H LYS 7 0.674 47.220 26.049 1.00 0.00 H
ATOM 101 CA LYS 7 0.129 45.940 24.430 1.00 0.00 C
ATOM 102 HA LYS 7 -0.836 45.609 24.046 1.00 0.00 H
ATOM 103 CB LYS 7 0.775 46.868 23.397 1.00 0.00 C
ATOM 104 HB2 LYS 7 1.777 47.089 23.765 1.00 0.00 H
ATOM 105 HB3 LYS 7 0.846 46.297 22.471 1.00 0.00 H
ATOM 106 CG LYS 7 0.036 48.165 23.135 1.00 0.00 C
ATOM 107 HG2 LYS 7 -0.509 48.081 22.195 1.00 0.00 H
ATOM 108 HG3 LYS 7 -0.668 48.345 23.948 1.00 0.00 H
ATOM 109 CD LYS 7 1.024 49.331 23.049 1.00 0.00 C
ATOM 110 HD2 LYS 7 1.629 49.222 22.149 1.00 0.00 H
ATOM 111 HD3 LYS 7 0.469 50.268 23.002 1.00 0.00 H
ATOM 112 CE LYS 7 1.940 49.340 24.284 1.00 0.00 C
ATOM 113 HE2 LYS 7 1.293 49.126 25.135 1.00 0.00 H
ATOM 114 HE3 LYS 7 2.637 48.514 24.142 1.00 0.00 H
ATOM 115 NZ LYS 7 2.700 50.590 24.542 1.00 0.00 N
ATOM 116 HZ1 LYS 7 2.054 51.355 24.674 1.00 0.00 H
ATOM 117 HZ2 LYS 7 3.262 50.477 25.373 1.00 0.00 H
ATOM 118 HZ3 LYS 7 3.300 50.788 23.754 1.00 0.00 H
ATOM 119 C LYS 7 1.051 44.754 24.626 1.00 0.00 C
ATOM 120 O LYS 7 2.167 44.915 25.115 1.00 0.00 O
ATOM 121 N ALA 8 0.586 43.568 24.244 1.00 0.00 N
ATOM 122 H ALA 8 -0.351 43.482 23.876 1.00 0.00 H
ATOM 123 CA ALA 8 1.401 42.362 24.351 1.00 0.00 C
ATOM 124 HA ALA 8 2.295 42.537 24.950 1.00 0.00 H
ATOM 125 CB ALA 8 0.605 41.237 24.986 1.00 0.00 C
ATOM 126 HB1 ALA 8 -0.289 41.044 24.393 1.00 0.00 H
ATOM 127 HB2 ALA 8 1.217 40.336 25.025 1.00 0.00 H
ATOM 128 HB3 ALA 8 0.315 41.522 25.997 1.00 0.00 H
ATOM 129 C ALA 8 1.851 41.947 22.952 1.00 0.00 C
ATOM 130 O ALA 8 1.023 41.575 22.117 1.00 0.00 O
ATOM 131 N ASN 9 3.154 42.030 22.699 1.00 0.00 N
ATOM 132 H ASN 9 3.788 42.360 23.413 1.00 0.00 H
ATOM 133 CA ASN 9 3.711 41.632 21.409 1.00 0.00 C
ATOM 134 HA ASN 9 2.937 41.692 20.644 1.00 0.00 H
ATOM 135 CB ASN 9 4.866 42.544 21.007 1.00 0.00 C
ATOM 136 HB2 ASN 9 5.597 42.549 21.815 1.00 0.00 H
ATOM 137 HB3 ASN 9 5.330 42.157 20.100 1.00 0.00 H
ATOM 138 CG ASN 9 4.420 43.961 20.753 1.00 0.00 C
ATOM 139 OD1 ASN 9 3.386 44.189 20.126 1.00 0.00 O
ATOM 140 ND2 ASN 9 5.202 44.927 21.228 1.00 0.00 N
ATOM 141 HD21 ASN 9 4.948 45.894 21.085 1.00 0.00 H
ATOM 142 HD22 ASN 9 6.046 44.689 21.729 1.00 0.00 H
ATOM 143 C ASN 9 4.225 40.214 21.582 1.00 0.00 C
ATOM 144 O ASN 9 5.205 39.981 22.291 1.00 0.00 O
ATOM 145 N LEU 10 3.559 39.269 20.933 1.00 0.00 N
ATOM 146 H LEU 10 2.754 39.507 20.371 1.00 0.00 H
ATOM 147 CA LEU 10 3.933 37.867 21.044 1.00 0.00 C
ATOM 148 HA LEU 10 4.535 37.710 21.939 1.00 0.00 H
ATOM 149 CB LEU 10 2.672 36.996 21.142 1.00 0.00 C
ATOM 150 HB2 LEU 10 2.291 36.957 20.121 1.00 0.00 H
ATOM 151 HB3 LEU 10 3.013 36.004 21.440 1.00 0.00 H
ATOM 152 CG LEU 10 1.555 37.458 22.087 1.00 0.00 C
ATOM 153 HG LEU 10 1.116 38.380 21.706 1.00 0.00 H
ATOM 154 CD1 LEU 10 0.480 36.383 22.174 1.00 0.00 C
ATOM 155 HD11 LEU 10 0.918 35.461 22.556 1.00 0.00 H
ATOM 156 HD12 LEU 10 -0.312 36.714 22.846 1.00 0.00 H
ATOM 157 HD13 LEU 10 0.064 36.204 21.183 1.00 0.00 H
ATOM 158 CD2 LEU 10 2.127 37.737 23.465 1.00 0.00 C
ATOM 159 HD21 LEU 10 2.883 38.519 23.394 1.00 0.00 H
ATOM 160 HD22 LEU 10 1.329 38.065 24.131 1.00 0.00 H
ATOM 161 HD23 LEU 10 2.580 36.829 23.862 1.00 0.00 H
ATOM 162 C LEU 10 4.784 37.372 19.881 1.00 0.00 C
ATOM 163 O LEU 10 4.539 37.723 18.718 1.00 0.00 O
ATOM 164 N ILE 11 5.795 36.573 20.210 1.00 0.00 N
ATOM 165 H ILE 11 5.963 36.357 21.182 1.00 0.00 H
ATOM 166 CA ILE 11 6.657 35.960 19.207 1.00 0.00 C
ATOM 167 HA ILE 11 6.234 36.178 18.226 1.00 0.00 H
ATOM 168 CB ILE 11 8.110 36.477 19.267 1.00 0.00 C
ATOM 169 HB ILE 11 8.503 36.342 20.275 1.00 0.00 H
ATOM 170 CG2 ILE 11 8.970 35.692 18.275 1.00 0.00 C
ATOM 171 HG21 ILE 11 8.577 35.827 17.267 1.00 0.00 H
ATOM 172 HG22 ILE 11 9.997 36.056 18.316 1.00 0.00 H
ATOM 173 HG23 ILE 11 8.950 34.633 18.534 1.00 0.00 H
ATOM 174 CG1 ILE 11 8.163 37.964 18.908 1.00 0.00 C
ATOM 175 HG12 ILE 11 7.764 38.071 17.899 1.00 0.00 H
ATOM 176 HG13 ILE 11 7.519 38.493 19.611 1.00 0.00 H
ATOM 177 CD1 ILE 11 9.564 38.551 18.964 1.00 0.00 C
ATOM 178 HD11 ILE 11 10.208 38.023 18.261 1.00 0.00 H
ATOM 179 HD12 ILE 11 9.527 39.607 18.698 1.00 0.00 H
ATOM 180 HD13 ILE 11 9.963 38.445 19.973 1.00 0.00 H
ATOM 181 C ILE 11 6.666 34.470 19.525 1.00 0.00 C
ATOM 182 O ILE 11 6.968 34.071 20.659 1.00 0.00 O
ATOM 183 N PHE 12 6.331 33.645 18.536 1.00 0.00 N
ATOM 184 H PHE 12 6.031 34.006 17.641 1.00 0.00 H
ATOM 185 CA PHE 12 6.291 32.206 18.748 1.00 0.00 C
ATOM 186 HA PHE 12 6.235 31.979 19.813 1.00 0.00 H
ATOM 187 CB PHE 12 5.053 31.633 18.061 1.00 0.00 C
ATOM 188 HB2 PHE 12 5.021 31.831 16.990 1.00 0.00 H
ATOM 189 HB3 PHE 12 5.055 30.556 18.231 1.00 0.00 H
ATOM 190 CG PHE 12 3.761 32.158 18.635 1.00 0.00 C
ATOM 191 CD1 PHE 12 3.248 31.636 19.820 1.00 0.00 C
ATOM 192 HD1 PHE 12 3.759 30.797 20.293 1.00 0.00 H
ATOM 193 CE1 PHE 12 2.095 32.172 20.403 1.00 0.00 C
ATOM 194 HE1 PHE 12 1.705 31.753 21.331 1.00 0.00 H
ATOM 195 CZ PHE 12 1.445 33.243 19.795 1.00 0.00 C
ATOM 196 HZ PHE 12 0.547 33.669 20.243 1.00 0.00 H
ATOM 197 CE2 PHE 12 1.949 33.771 18.605 1.00 0.00 C
ATOM 198 HE2 PHE 12 1.445 34.608 18.122 1.00 0.00 H
ATOM 199 CD2 PHE 12 3.100 33.226 18.033 1.00 0.00 C
ATOM 200 HD2 PHE 12 3.493 33.636 17.103 1.00 0.00 H
ATOM 201 C PHE 12 7.570 31.518 18.279 1.00 0.00 C
ATOM 202 O PHE 12 8.404 32.130 17.620 1.00 0.00 O
ATOM 203 N ALA 13 7.716 30.243 18.627 1.00 0.00 N
ATOM 204 H ALA 13 7.018 29.801 19.208 1.00 0.00 H
ATOM 205 CA ALA 13 8.914 29.481 18.283 1.00 0.00 C
ATOM 206 HA ALA 13 9.729 29.967 18.819 1.00 0.00 H
ATOM 207 CB ALA 13 8.781 28.050 18.792 1.00 0.00 C
ATOM 208 HB1 ALA 13 7.975 27.547 18.258 1.00 0.00 H
ATOM 209 HB2 ALA 13 9.716 27.516 18.624 1.00 0.00 H
ATOM 210 HB3 ALA 13 8.557 28.063 19.859 1.00 0.00 H
ATOM 211 C ALA 13 9.276 29.479 16.799 1.00 0.00 C
ATOM 212 O ALA 13 10.462 29.489 16.453 1.00 0.00 O
ATOM 213 N ASN 14 8.276 29.466 15.918 1.00 0.00 N
ATOM 214 H ASN 14 7.313 29.379 16.211 1.00 0.00 H
ATOM 215 CA ASN 14 8.567 29.459 14.488 1.00 0.00 C
ATOM 216 HA ASN 14 9.540 28.999 14.317 1.00 0.00 H
ATOM 217 CB ASN 14 7.502 28.662 13.710 1.00 0.00 C
ATOM 218 HB2 ASN 14 7.842 28.554 12.680 1.00 0.00 H
ATOM 219 HB3 ASN 14 7.406 27.677 14.166 1.00 0.00 H
ATOM 220 CG ASN 14 6.134 29.330 13.703 1.00 0.00 C
ATOM 221 OD1 ASN 14 5.208 28.854 13.037 1.00 0.00 O
ATOM 222 ND2 ASN 14 5.999 30.425 14.431 1.00 0.00 N
ATOM 223 HD21 ASN 14 5.110 30.903 14.458 1.00 0.00 H
ATOM 224 HD22 ASN 14 6.786 30.778 14.957 1.00 0.00 H
ATOM 225 C ASN 14 8.731 30.853 13.893 1.00 0.00 C
ATOM 226 O ASN 14 8.824 31.008 12.679 1.00 0.00 O
ATOM 227 N GLY 15 8.780 31.865 14.754 1.00 0.00 N
ATOM 228 H GLY 15 8.701 31.713 15.749 1.00 0.00 H
ATOM 229 CA GLY 15 8.949 33.224 14.278 1.00 0.00 C
ATOM 230 HA2 GLY 15 9.515 33.763 15.038 1.00 0.00 H
ATOM 231 HA3 GLY 15 9.533 33.173 13.359 1.00 0.00 H
ATOM 232 C GLY 15 7.657 33.971 14.001 1.00 0.00 C
ATOM 233 O GLY 15 7.689 35.185 13.755 1.00 0.00 O
ATOM 234 N SER 16 6.524 33.270 14.028 1.00 0.00 N
ATOM 235 H SER 16 6.526 32.270 14.172 1.00 0.00 H
ATOM 236 CA SER 16 5.247 33.931 13.782 1.00 0.00 C
ATOM 237 HA SER 16 5.313 34.510 12.861 1.00 0.00 H
ATOM 238 CB SER 16 4.106 32.917 13.642 1.00 0.00 C
ATOM 239 HB2 SER 16 3.184 33.476 13.481 1.00 0.00 H
ATOM 240 HB3 SER 16 4.315 32.303 12.766 1.00 0.00 H
ATOM 241 OG SER 16 3.960 32.085 14.778 1.00 0.00 O
ATOM 242 HG SER 16 3.234 31.473 14.635 1.00 0.00 H
ATOM 243 C SER 16 4.979 34.910 14.919 1.00 0.00 C
ATOM 244 O SER 16 5.568 34.804 16.002 1.00 0.00 O
ATOM 245 N THR 17 4.085 35.859 14.672 1.00 0.00 N
ATOM 246 H THR 17 3.547 35.843 13.818 1.00 0.00 H
ATOM 247 CA THR 17 3.806 36.907 15.644 1.00 0.00 C
ATOM 248 HA THR 17 4.116 36.578 16.636 1.00 0.00 H
ATOM 249 CB THR 17 4.593 38.178 15.280 1.00 0.00 C
ATOM 250 HB THR 17 4.396 38.937 16.037 1.00 0.00 H
ATOM 251 CG2 THR 17 6.097 37.902 15.214 1.00 0.00 C
ATOM 252 HG21 THR 17 6.295 37.144 14.457 1.00 0.00 H
ATOM 253 HG22 THR 17 6.624 38.820 14.955 1.00 0.00 H
ATOM 254 HG23 THR 17 6.444 37.546 16.184 1.00 0.00 H
ATOM 255 OG1 THR 17 4.157 38.634 13.987 1.00 0.00 O
ATOM 256 HG1 THR 17 4.641 39.428 13.748 1.00 0.00 H
ATOM 257 C THR 17 2.348 37.350 15.672 1.00 0.00 C
ATOM 258 O THR 17 1.554 36.996 14.804 1.00 0.00 O
ATOM 259 N GLN 18 2.028 38.143 16.690 1.00 0.00 N
ATOM 260 H GLN 18 2.726 38.308 17.401 1.00 0.00 H
ATOM 261 CA GLN 18 0.721 38.775 16.844 1.00 0.00 C
ATOM 262 HA GLN 18 0.490 39.320 15.929 1.00 0.00 H
ATOM 263 CB GLN 18 -0.407 37.768 17.113 1.00 0.00 C
ATOM 264 HB2 GLN 18 -1.343 38.313 16.988 1.00 0.00 H
ATOM 265 HB3 GLN 18 -0.327 37.002 16.342 1.00 0.00 H
ATOM 266 CG GLN 18 -0.383 37.110 18.486 1.00 0.00 C
ATOM 267 HG2 GLN 18 0.497 36.471 18.559 1.00 0.00 H
ATOM 268 HG3 GLN 18 -0.331 37.887 19.249 1.00 0.00 H
ATOM 269 CD GLN 18 -1.617 36.265 18.738 1.00 0.00 C
ATOM 270 OE1 GLN 18 -2.391 36.537 19.655 1.00 0.00 O
ATOM 271 NE2 GLN 18 -1.809 35.233 17.922 1.00 0.00 N
ATOM 272 HE21 GLN 18 -2.616 34.638 18.046 1.00 0.00 H
ATOM 273 HE22 GLN 18 -1.147 35.049 17.182 1.00 0.00 H
ATOM 274 C GLN 18 0.820 39.742 18.009 1.00 0.00 C
ATOM 275 O GLN 18 1.721 39.632 18.846 1.00 0.00 O
ATOM 276 N THR 19 -0.081 40.712 18.035 1.00 0.00 N
ATOM 277 H THR 19 -0.762 40.793 17.293 1.00 0.00 H
ATOM 278 CA THR 19 -0.130 41.674 19.122 1.00 0.00 C
ATOM 279 HA THR 19 0.603 41.386 19.875 1.00 0.00 H
ATOM 280 CB THR 19 0.194 43.120 18.638 1.00 0.00 C
ATOM 281 HB THR 19 -0.445 43.363 17.789 1.00 0.00 H
ATOM 282 CG2 THR 19 -0.050 44.121 19.761 1.00 0.00 C
ATOM 283 HG21 THR 19 0.589 43.879 20.610 1.00 0.00 H
ATOM 284 HG22 THR 19 0.180 45.126 19.409 1.00 0.00 H
ATOM 285 HG23 THR 19 -1.095 44.075 20.069 1.00 0.00 H
ATOM 286 OG1 THR 19 1.571 43.205 18.245 1.00 0.00 O
ATOM 287 HG1 THR 19 1.765 44.097 17.948 1.00 0.00 H
ATOM 288 C THR 19 -1.557 41.623 19.663 1.00 0.00 C
ATOM 289 O THR 19 -2.515 41.517 18.893 1.00 0.00 O
ATOM 290 N ALA 20 -1.696 41.661 20.985 1.00 0.00 N
ATOM 291 H ALA 20 -0.880 41.701 21.579 1.00 0.00 H
ATOM 292 CA ALA 20 -3.010 41.649 21.615 1.00 0.00 C
ATOM 293 HA ALA 20 -3.828 41.801 20.911 1.00 0.00 H
ATOM 294 CB ALA 20 -3.239 40.327 22.354 1.00 0.00 C
ATOM 295 HB1 ALA 20 -2.432 40.165 23.069 1.00 0.00 H
ATOM 296 HB2 ALA 20 -4.191 40.366 22.884 1.00 0.00 H
ATOM 297 HB3 ALA 20 -3.257 39.507 21.636 1.00 0.00 H
ATOM 298 C ALA 20 -3.029 42.815 22.596 1.00 0.00 C
ATOM 299 O ALA 20 -2.020 43.090 23.246 1.00 0.00 O
ATOM 300 N GLU 21 -4.163 43.504 22.695 1.00 0.00 N
ATOM 301 H GLU 21 -4.961 43.262 22.125 1.00 0.00 H
ATOM 302 CA GLU 21 -4.282 44.639 23.607 1.00 0.00 C
ATOM 303 HA GLU 21 -3.310 44.856 24.049 1.00 0.00 H
ATOM 304 CB GLU 21 -4.771 45.884 22.869 1.00 0.00 C
ATOM 305 HB2 GLU 21 -5.779 45.667 22.515 1.00 0.00 H
ATOM 306 HB3 GLU 21 -4.809 46.691 23.600 1.00 0.00 H
ATOM 307 CG GLU 21 -3.909 46.301 21.706 1.00 0.00 C
ATOM 308 HG2 GLU 21 -2.863 46.215 22.001 1.00 0.00 H
ATOM 309 HG3 GLU 21 -4.108 45.626 20.874 1.00 0.00 H
ATOM 310 CD GLU 21 -4.197 47.723 21.281 1.00 0.00 C
ATOM 311 OE1 GLU 21 -5.387 48.093 21.215 1.00 0.00 O
ATOM 312 OE2 GLU 21 -3.232 48.468 21.017 1.00 0.00 O
ATOM 313 C GLU 21 -5.246 44.337 24.741 1.00 0.00 C
ATOM 314 O GLU 21 -6.267 43.685 24.545 1.00 0.00 O
ATOM 315 N PHE 22 -4.919 44.841 25.924 1.00 0.00 N
ATOM 316 H PHE 22 -4.058 45.360 26.022 1.00 0.00 H
ATOM 317 CA PHE 22 -5.736 44.634 27.106 1.00 0.00 C
ATOM 318 HA PHE 22 -6.691 44.180 26.842 1.00 0.00 H
ATOM 319 CB PHE 22 -4.993 43.693 28.046 1.00 0.00 C
ATOM 320 HB2 PHE 22 -4.048 44.074 28.434 1.00 0.00 H
ATOM 321 HB3 PHE 22 -5.673 43.497 28.875 1.00 0.00 H
ATOM 322 CG PHE 22 -4.693 42.365 27.413 1.00 0.00 C
ATOM 323 CD1 PHE 22 -5.641 41.345 27.437 1.00 0.00 C
ATOM 324 HD1 PHE 22 -6.561 41.488 28.004 1.00 0.00 H
ATOM 325 CE1 PHE 22 -5.426 40.154 26.749 1.00 0.00 C
ATOM 326 HE1 PHE 22 -6.175 39.362 26.775 1.00 0.00 H
ATOM 327 CZ PHE 22 -4.247 39.976 26.025 1.00 0.00 C
ATOM 328 HZ PHE 22 -4.076 39.047 25.481 1.00 0.00 H
ATOM 329 CE2 PHE 22 -3.292 40.981 25.998 1.00 0.00 C
ATOM 330 HE2 PHE 22 -2.368 40.844 25.437 1.00 0.00 H
ATOM 331 CD2 PHE 22 -3.517 42.174 26.694 1.00 0.00 C
ATOM 332 HD2 PHE 22 -2.767 42.965 26.676 1.00 0.00 H
ATOM 333 C PHE 22 -6.011 45.985 27.741 1.00 0.00 C
ATOM 334 O PHE 22 -5.105 46.802 27.897 1.00 0.00 O
ATOM 335 N LYS 23 -7.270 46.219 28.090 1.00 0.00 N
ATOM 336 H LYS 23 -7.981 45.522 27.924 1.00 0.00 H
ATOM 337 CA LYS 23 -7.675 47.496 28.661 1.00 0.00 C
ATOM 338 HA LYS 23 -6.807 48.138 28.809 1.00 0.00 H
ATOM 339 CB LYS 23 -8.643 48.195 27.701 1.00 0.00 C
ATOM 340 HB2 LYS 23 -9.488 47.527 27.536 1.00 0.00 H
ATOM 341 HB3 LYS 23 -8.991 49.107 28.186 1.00 0.00 H
ATOM 342 CG LYS 23 -8.004 48.543 26.364 1.00 0.00 C
ATOM 343 HG2 LYS 23 -7.169 49.218 26.552 1.00 0.00 H
ATOM 344 HG3 LYS 23 -7.632 47.622 25.915 1.00 0.00 H
ATOM 345 CD LYS 23 -8.989 49.208 25.414 1.00 0.00 C
ATOM 346 HD2 LYS 23 -9.746 48.479 25.124 1.00 0.00 H
ATOM 347 HD3 LYS 23 -9.467 50.042 25.928 1.00 0.00 H
ATOM 348 CE LYS 23 -8.275 49.721 24.170 1.00 0.00 C
ATOM 349 HE2 LYS 23 -9.017 50.169 23.509 1.00 0.00 H
ATOM 350 HE3 LYS 23 -7.557 50.481 24.477 1.00 0.00 H
ATOM 351 NZ LYS 23 -7.563 48.627 23.448 1.00 0.00 N
ATOM 352 HZ1 LYS 23 -8.229 47.923 23.163 1.00 0.00 H
ATOM 353 HZ2 LYS 23 -7.104 49.005 22.632 1.00 0.00 H
ATOM 354 HZ3 LYS 23 -6.875 48.212 24.060 1.00 0.00 H
ATOM 355 C LYS 23 -8.317 47.374 30.033 1.00 0.00 C
ATOM 356 O LYS 23 -9.027 46.410 30.316 1.00 0.00 O
ATOM 357 N GLY 24 -8.061 48.373 30.872 1.00 0.00 N
ATOM 358 H GLY 24 -7.477 49.142 30.576 1.00 0.00 H
ATOM 359 CA GLY 24 -8.601 48.398 32.221 1.00 0.00 C
ATOM 360 HA2 GLY 24 -9.561 48.914 32.247 1.00 0.00 H
ATOM 361 HA3 GLY 24 -8.722 47.387 32.611 1.00 0.00 H
ATOM 362 C GLY 24 -7.612 49.149 33.093 1.00 0.00 C
ATOM 363 O GLY 24 -6.870 49.991 32.588 1.00 0.00 O
ATOM 364 N THR 25 -7.588 48.872 34.393 1.00 0.00 N
ATOM 365 H THR 25 -8.200 48.191 34.820 1.00 0.00 H
ATOM 366 CA THR 25 -6.616 49.553 35.238 1.00 0.00 C
ATOM 367 HA THR 25 -6.689 50.629 35.079 1.00 0.00 H
ATOM 368 CB THR 25 -6.827 49.260 36.744 1.00 0.00 C
ATOM 369 HB THR 25 -6.085 49.812 37.321 1.00 0.00 H
ATOM 370 CG2 THR 25 -8.224 49.685 37.175 1.00 0.00 C
ATOM 371 HG21 THR 25 -8.966 49.133 36.598 1.00 0.00 H
ATOM 372 HG22 THR 25 -8.358 49.473 38.236 1.00 0.00 H
ATOM 373 HG23 THR 25 -8.349 50.754 37.000 1.00 0.00 H
ATOM 374 OG1 THR 25 -6.653 47.856 36.995 1.00 0.00 O
ATOM 375 HG1 THR 25 -6.785 47.679 37.929 1.00 0.00 H
ATOM 376 C THR 25 -5.264 48.997 34.808 1.00 0.00 C
ATOM 377 O THR 25 -5.196 47.965 34.135 1.00 0.00 O
ATOM 378 N PHE 26 -4.187 49.673 35.175 1.00 0.00 N
ATOM 379 H PHE 26 -4.243 50.536 35.697 1.00 0.00 H
ATOM 380 CA PHE 26 -2.872 49.182 34.792 1.00 0.00 C
ATOM 381 HA PHE 26 -2.791 49.146 33.706 1.00 0.00 H
ATOM 382 CB PHE 26 -1.784 50.107 35.332 1.00 0.00 C
ATOM 383 HB2 PHE 26 -1.937 51.104 34.918 1.00 0.00 H
ATOM 384 HB3 PHE 26 -1.801 50.160 36.421 1.00 0.00 H
ATOM 385 CG PHE 26 -0.403 49.691 34.946 1.00 0.00 C
ATOM 386 CD1 PHE 26 0.154 50.131 33.755 1.00 0.00 C
ATOM 387 HD1 PHE 26 -0.419 50.809 33.123 1.00 0.00 H
ATOM 388 CE1 PHE 26 1.420 49.721 33.364 1.00 0.00 C
ATOM 389 HE1 PHE 26 1.843 50.076 32.424 1.00 0.00 H
ATOM 390 CZ PHE 26 2.148 48.858 34.170 1.00 0.00 C
ATOM 391 HZ PHE 26 3.143 48.532 33.865 1.00 0.00 H
ATOM 392 CE2 PHE 26 1.606 48.408 35.370 1.00 0.00 C
ATOM 393 HE2 PHE 26 2.173 47.733 36.010 1.00 0.00 H
ATOM 394 CD2 PHE 26 0.331 48.825 35.752 1.00 0.00 C
ATOM 395 HD2 PHE 26 -0.100 48.473 36.689 1.00 0.00 H
ATOM 396 C PHE 26 -2.658 47.769 35.325 1.00 0.00 C
ATOM 397 O PHE 26 -2.170 46.887 34.616 1.00 0.00 O
ATOM 398 N GLU 27 -3.042 47.563 36.578 1.00 0.00 N
ATOM 399 H GLU 27 -3.414 48.331 37.118 1.00 0.00 H
ATOM 400 CA GLU 27 -2.877 46.273 37.234 1.00 0.00 C
ATOM 401 HA GLU 27 -1.848 45.927 37.135 1.00 0.00 H
ATOM 402 CB GLU 27 -3.205 46.412 38.723 1.00 0.00 C
ATOM 403 HB2 GLU 27 -4.209 46.829 38.798 1.00 0.00 H
ATOM 404 HB3 GLU 27 -3.195 45.411 39.154 1.00 0.00 H
ATOM 405 CG GLU 27 -2.224 47.305 39.486 1.00 0.00 C
ATOM 406 HG2 GLU 27 -2.337 47.087 40.548 1.00 0.00 H
ATOM 407 HG3 GLU 27 -1.220 47.027 39.164 1.00 0.00 H
ATOM 408 CD GLU 27 -2.440 48.797 39.248 1.00 0.00 C
ATOM 409 OE1 GLU 27 -3.446 49.172 38.616 1.00 0.00 O
ATOM 410 OE2 GLU 27 -1.596 49.589 39.705 1.00 0.00 O
ATOM 411 C GLU 27 -3.712 45.150 36.626 1.00 0.00 C
ATOM 412 O GLU 27 -3.213 44.045 36.400 1.00 0.00 O
ATOM 413 N LYS 28 -4.982 45.431 36.365 1.00 0.00 N
ATOM 414 H LYS 28 -5.368 46.334 36.599 1.00 0.00 H
ATOM 415 CA LYS 28 -5.871 44.426 35.801 1.00 0.00 C
ATOM 416 HA LYS 28 -5.761 43.484 36.338 1.00 0.00 H
ATOM 417 CB LYS 28 -7.323 44.891 35.922 1.00 0.00 C
ATOM 418 HB2 LYS 28 -7.504 45.073 36.981 1.00 0.00 H
ATOM 419 HB3 LYS 28 -7.395 45.831 35.375 1.00 0.00 H
ATOM 420 CG LYS 28 -8.368 43.909 35.388 1.00 0.00 C
ATOM 421 HG2 LYS 28 -9.347 44.370 35.517 1.00 0.00 H
ATOM 422 HG3 LYS 28 -8.171 43.766 34.325 1.00 0.00 H
ATOM 423 CD LYS 28 -8.345 42.549 36.100 1.00 0.00 C
ATOM 424 HD2 LYS 28 -8.007 42.709 37.124 1.00 0.00 H
ATOM 425 HD3 LYS 28 -9.362 42.156 36.111 1.00 0.00 H
ATOM 426 CE LYS 28 -7.419 41.548 35.409 1.00 0.00 C
ATOM 427 HE2 LYS 28 -7.702 41.504 34.357 1.00 0.00 H
ATOM 428 HE3 LYS 28 -6.399 41.923 35.495 1.00 0.00 H
ATOM 429 NZ LYS 28 -7.498 40.184 36.002 1.00 0.00 N
ATOM 430 HZ1 LYS 28 -8.443 39.836 35.922 1.00 0.00 H
ATOM 431 HZ2 LYS 28 -6.869 39.566 35.510 1.00 0.00 H
ATOM 432 HZ3 LYS 28 -7.236 40.225 36.977 1.00 0.00 H
ATOM 433 C LYS 28 -5.529 44.111 34.345 1.00 0.00 C
ATOM 434 O LYS 28 -5.548 42.949 33.946 1.00 0.00 O
ATOM 435 N ALA 29 -5.207 45.131 33.555 1.00 0.00 N
ATOM 436 H ALA 29 -5.216 46.080 33.902 1.00 0.00 H
ATOM 437 CA ALA 29 -4.856 44.908 32.148 1.00 0.00 C
ATOM 438 HA ALA 29 -5.641 44.353 31.634 1.00 0.00 H
ATOM 439 CB ALA 29 -4.655 46.244 31.433 1.00 0.00 C
ATOM 440 HB1 ALA 29 -3.866 46.808 31.930 1.00 0.00 H
ATOM 441 HB2 ALA 29 -4.373 46.063 30.396 1.00 0.00 H
ATOM 442 HB3 ALA 29 -5.583 46.815 31.462 1.00 0.00 H
ATOM 443 C ALA 29 -3.579 44.073 32.075 1.00 0.00 C
ATOM 444 O ALA 29 -3.447 43.180 31.238 1.00 0.00 O
ATOM 445 N THR 30 -2.632 44.374 32.957 1.00 0.00 N
ATOM 446 H THR 30 -2.754 45.147 33.595 1.00 0.00 H
ATOM 447 CA THR 30 -1.383 43.633 33.003 1.00 0.00 C
ATOM 448 HA THR 30 -0.901 43.657 32.026 1.00 0.00 H
ATOM 449 CB THR 30 -0.419 44.247 34.045 1.00 0.00 C
ATOM 450 HB THR 30 -0.952 44.367 34.988 1.00 0.00 H
ATOM 451 CG2 THR 30 0.800 43.346 34.259 1.00 0.00 C
ATOM 452 HG21 THR 30 1.334 43.226 33.316 1.00 0.00 H
ATOM 453 HG22 THR 30 1.463 43.800 34.996 1.00 0.00 H
ATOM 454 HG23 THR 30 0.473 42.370 34.617 1.00 0.00 H
ATOM 455 OG1 THR 30 0.018 45.532 33.575 1.00 0.00 O
ATOM 456 HG1 THR 30 0.617 45.920 34.216 1.00 0.00 H
ATOM 457 C THR 30 -1.684 42.168 33.343 1.00 0.00 C
ATOM 458 O THR 30 -1.164 41.261 32.697 1.00 0.00 O
ATOM 459 N SER 31 -2.529 41.936 34.341 1.00 0.00 N
ATOM 460 H SER 31 -2.923 42.697 34.876 1.00 0.00 H
ATOM 461 CA SER 31 -2.881 40.567 34.719 1.00 0.00 C
ATOM 462 HA SER 31 -1.979 40.015 34.982 1.00 0.00 H
ATOM 463 CB SER 31 -3.824 40.564 35.923 1.00 0.00 C
ATOM 464 HB2 SER 31 -4.652 41.246 35.731 1.00 0.00 H
ATOM 465 HB3 SER 31 -4.211 39.556 36.073 1.00 0.00 H
ATOM 466 OG SER 31 -3.130 40.980 37.085 1.00 0.00 O
ATOM 467 HG SER 31 -3.730 40.975 37.835 1.00 0.00 H
ATOM 468 C SER 31 -3.540 39.818 33.562 1.00 0.00 C
ATOM 469 O SER 31 -3.231 38.647 33.325 1.00 0.00 O
ATOM 470 N GLU 32 -4.448 40.491 32.856 1.00 0.00 N
ATOM 471 H GLU 32 -4.691 41.437 33.113 1.00 0.00 H
ATOM 472 CA GLU 32 -5.140 39.881 31.718 1.00 0.00 C
ATOM 473 HA GLU 32 -5.636 38.965 32.039 1.00 0.00 H
ATOM 474 CB GLU 32 -6.195 40.836 31.148 1.00 0.00 C
ATOM 475 HB2 GLU 32 -5.728 41.818 31.076 1.00 0.00 H
ATOM 476 HB3 GLU 32 -6.441 40.477 30.149 1.00 0.00 H
ATOM 477 CG GLU 32 -7.466 40.939 31.976 1.00 0.00 C
ATOM 478 HG2 GLU 32 -7.909 39.945 32.035 1.00 0.00 H
ATOM 479 HG3 GLU 32 -7.188 41.272 32.976 1.00 0.00 H
ATOM 480 CD GLU 32 -8.476 41.909 31.381 1.00 0.00 C
ATOM 481 OE1 GLU 32 -8.222 42.451 30.281 1.00 0.00 O
ATOM 482 OE2 GLU 32 -9.527 42.128 32.019 1.00 0.00 O
ATOM 483 C GLU 32 -4.164 39.501 30.605 1.00 0.00 C
ATOM 484 O GLU 32 -4.345 38.481 29.937 1.00 0.00 O
ATOM 485 N ALA 33 -3.140 40.327 30.397 1.00 0.00 N
ATOM 486 H ALA 33 -3.043 41.172 30.942 1.00 0.00 H
ATOM 487 CA ALA 33 -2.148 40.056 29.355 1.00 0.00 C
ATOM 488 HA ALA 33 -2.635 39.921 28.389 1.00 0.00 H
ATOM 489 CB ALA 33 -1.170 41.217 29.249 1.00 0.00 C
ATOM 490 HB1 ALA 33 -0.668 41.359 30.206 1.00 0.00 H
ATOM 491 HB2 ALA 33 -0.429 41.000 28.480 1.00 0.00 H
ATOM 492 HB3 ALA 33 -1.711 42.126 28.985 1.00 0.00 H
ATOM 493 C ALA 33 -1.402 38.763 29.677 1.00 0.00 C
ATOM 494 O ALA 33 -1.245 37.890 28.820 1.00 0.00 O
ATOM 495 N TYR 34 -0.941 38.641 30.916 1.00 0.00 N
ATOM 496 H TYR 34 -1.040 39.390 31.586 1.00 0.00 H
ATOM 497 CA TYR 34 -0.232 37.435 31.327 1.00 0.00 C
ATOM 498 HA TYR 34 0.578 37.219 30.630 1.00 0.00 H
ATOM 499 CB TYR 34 0.364 37.636 32.722 1.00 0.00 C
ATOM 500 HB2 TYR 34 -0.426 38.056 33.345 1.00 0.00 H
ATOM 501 HB3 TYR 34 0.665 36.668 33.122 1.00 0.00 H
ATOM 502 CG TYR 34 1.553 38.571 32.718 1.00 0.00 C
ATOM 503 CD1 TYR 34 2.623 38.361 31.845 1.00 0.00 C
ATOM 504 HD1 TYR 34 2.575 37.526 31.146 1.00 0.00 H
ATOM 505 CE1 TYR 34 3.740 39.197 31.857 1.00 0.00 C
ATOM 506 HE1 TYR 34 4.565 39.030 31.165 1.00 0.00 H
ATOM 507 CZ TYR 34 3.787 40.257 32.748 1.00 0.00 C
ATOM 508 OH TYR 34 4.893 41.070 32.775 1.00 0.00 O
ATOM 509 HH TYR 34 5.564 40.812 32.139 1.00 0.00 H
ATOM 510 CE2 TYR 34 2.737 40.491 33.620 1.00 0.00 C
ATOM 511 HE2 TYR 34 2.776 41.328 34.317 1.00 0.00 H
ATOM 512 CD2 TYR 34 1.625 39.648 33.603 1.00 0.00 C
ATOM 513 HD2 TYR 34 0.796 39.826 34.288 1.00 0.00 H
ATOM 514 C TYR 34 -1.179 36.234 31.309 1.00 0.00 C
ATOM 515 O TYR 34 -0.766 35.117 31.001 1.00 0.00 O
ATOM 516 N ALA 35 -2.453 36.459 31.629 1.00 0.00 N
ATOM 517 H ALA 35 -2.772 37.375 31.910 1.00 0.00 H
ATOM 518 CA ALA 35 -3.423 35.363 31.608 1.00 0.00 C
ATOM 519 HA ALA 35 -3.085 34.534 32.230 1.00 0.00 H
ATOM 520 CB ALA 35 -4.782 35.837 32.122 1.00 0.00 C
ATOM 521 HB1 ALA 35 -5.138 36.661 31.503 1.00 0.00 H
ATOM 522 HB2 ALA 35 -5.495 35.014 32.076 1.00 0.00 H
ATOM 523 HB3 ALA 35 -4.683 36.175 33.154 1.00 0.00 H
ATOM 524 C ALA 35 -3.552 34.840 30.176 1.00 0.00 C
ATOM 525 O ALA 35 -3.657 33.631 29.954 1.00 0.00 O
ATOM 526 N TYR 36 -3.536 35.749 29.204 1.00 0.00 N
ATOM 527 H TYR 36 -3.484 36.737 29.409 1.00 0.00 H
ATOM 528 CA TYR 36 -3.635 35.336 27.806 1.00 0.00 C
ATOM 529 HA TYR 36 -4.514 34.705 27.673 1.00 0.00 H
ATOM 530 CB TYR 36 -3.762 36.557 26.879 1.00 0.00 C
ATOM 531 HB2 TYR 36 -4.651 37.111 27.182 1.00 0.00 H
ATOM 532 HB3 TYR 36 -2.876 37.165 27.061 1.00 0.00 H
ATOM 533 CG TYR 36 -3.853 36.223 25.390 1.00 0.00 C
ATOM 534 CD1 TYR 36 -4.777 35.289 24.914 1.00 0.00 C
ATOM 535 HD1 TYR 36 -5.427 34.783 25.627 1.00 0.00 H
ATOM 536 CE1 TYR 36 -4.877 34.998 23.543 1.00 0.00 C
ATOM 537 HE1 TYR 36 -5.596 34.258 23.192 1.00 0.00 H
ATOM 538 CZ TYR 36 -4.049 35.646 22.636 1.00 0.00 C
ATOM 539 OH TYR 36 -4.158 35.371 21.287 1.00 0.00 O
ATOM 540 HH TYR 36 -4.835 34.720 21.090 1.00 0.00 H
ATOM 541 CE2 TYR 36 -3.120 36.579 23.085 1.00 0.00 C
ATOM 542 HE2 TYR 36 -2.466 37.090 22.379 1.00 0.00 H
ATOM 543 CD2 TYR 36 -3.028 36.861 24.461 1.00 0.00 C
ATOM 544 HD2 TYR 36 -2.302 37.590 24.821 1.00 0.00 H
ATOM 545 C TYR 36 -2.396 34.516 27.449 1.00 0.00 C
ATOM 546 O TYR 36 -2.510 33.460 26.826 1.00 0.00 O
ATOM 547 N ALA 37 -1.212 34.984 27.848 1.00 0.00 N
ATOM 548 H ALA 37 -1.125 35.867 28.330 1.00 0.00 H
ATOM 549 CA ALA 37 0.008 34.235 27.548 1.00 0.00 C
ATOM 550 HA ALA 37 0.127 34.137 26.469 1.00 0.00 H
ATOM 551 CB ALA 37 1.242 34.958 28.115 1.00 0.00 C
ATOM 552 HB1 ALA 37 1.142 35.056 29.196 1.00 0.00 H
ATOM 553 HB2 ALA 37 2.139 34.383 27.884 1.00 0.00 H
ATOM 554 HB3 ALA 37 1.321 35.949 27.667 1.00 0.00 H
ATOM 555 C ALA 37 -0.096 32.819 28.129 1.00 0.00 C
ATOM 556 O ALA 37 0.273 31.844 27.470 1.00 0.00 O
ATOM 557 N ASP 38 -0.617 32.700 29.350 1.00 0.00 N
ATOM 558 H ASP 38 -0.884 33.514 29.885 1.00 0.00 H
ATOM 559 CA ASP 38 -0.764 31.382 29.971 1.00 0.00 C
ATOM 560 HA ASP 38 0.204 30.881 29.988 1.00 0.00 H
ATOM 561 CB ASP 38 -1.284 31.495 31.414 1.00 0.00 C
ATOM 562 HB2 ASP 38 -2.039 32.281 31.416 1.00 0.00 H
ATOM 563 HB3 ASP 38 -1.746 30.547 31.691 1.00 0.00 H
ATOM 564 CG ASP 38 -0.187 31.841 32.421 1.00 0.00 C
ATOM 565 OD1 ASP 38 1.011 31.600 32.144 1.00 0.00 O
ATOM 566 OD2 ASP 38 -0.535 32.340 33.509 1.00 0.00 O
ATOM 567 C ASP 38 -1.704 30.471 29.167 1.00 0.00 C
ATOM 568 O ASP 38 -1.462 29.263 29.074 1.00 0.00 O
ATOM 569 N THR 39 -2.767 31.028 28.585 1.00 0.00 N
ATOM 570 H THR 39 -2.968 32.013 28.678 1.00 0.00 H
ATOM 571 CA THR 39 -3.695 30.198 27.806 1.00 0.00 C
ATOM 572 HA THR 39 -3.995 29.330 28.392 1.00 0.00 H
ATOM 573 CB THR 39 -4.979 30.965 27.358 1.00 0.00 C
ATOM 574 HB THR 39 -5.676 30.255 26.912 1.00 0.00 H
ATOM 575 CG2 THR 39 -5.640 31.646 28.543 1.00 0.00 C
ATOM 576 HG21 THR 39 -4.944 32.356 28.989 1.00 0.00 H
ATOM 577 HG22 THR 39 -6.533 32.174 28.208 1.00 0.00 H
ATOM 578 HG23 THR 39 -5.919 30.897 29.284 1.00 0.00 H
ATOM 579 OG1 THR 39 -4.645 31.937 26.359 1.00 0.00 O
ATOM 580 HG1 THR 39 -5.439 32.404 26.089 1.00 0.00 H
ATOM 581 C THR 39 -3.024 29.655 26.553 1.00 0.00 C
ATOM 582 O THR 39 -3.434 28.627 26.014 1.00 0.00 O
ATOM 583 N LEU 40 -1.982 30.338 26.093 1.00 0.00 N
ATOM 584 H LEU 40 -1.681 31.187 26.550 1.00 0.00 H
ATOM 585 CA LEU 40 -1.275 29.913 24.888 1.00 0.00 C
ATOM 586 HA LEU 40 -1.954 29.374 24.227 1.00 0.00 H
ATOM 587 CB LEU 40 -0.731 31.138 24.140 1.00 0.00 C
ATOM 588 HB2 LEU 40 -0.050 31.617 24.843 1.00 0.00 H
ATOM 589 HB3 LEU 40 -0.168 30.772 23.281 1.00 0.00 H
ATOM 590 CG LEU 40 -1.773 32.152 23.671 1.00 0.00 C
ATOM 591 HG LEU 40 -2.344 32.502 24.531 1.00 0.00 H
ATOM 592 CD1 LEU 40 -1.086 33.341 22.997 1.00 0.00 C
ATOM 593 HD11 LEU 40 -0.516 32.992 22.136 1.00 0.00 H
ATOM 594 HD12 LEU 40 -1.839 34.057 22.667 1.00 0.00 H
ATOM 595 HD13 LEU 40 -0.413 33.823 23.707 1.00 0.00 H
ATOM 596 CD2 LEU 40 -2.729 31.462 22.707 1.00 0.00 C
ATOM 597 HD21 LEU 40 -3.222 30.633 23.215 1.00 0.00 H
ATOM 598 HD22 LEU 40 -3.478 32.176 22.365 1.00 0.00 H
ATOM 599 HD23 LEU 40 -2.171 31.083 21.851 1.00 0.00 H
ATOM 600 C LEU 40 -0.119 28.948 25.148 1.00 0.00 C
ATOM 601 O LEU 40 0.452 28.403 24.204 1.00 0.00 O
ATOM 602 N LYS 41 0.222 28.722 26.415 1.00 0.00 N
ATOM 603 H LYS 41 -0.233 29.219 27.167 1.00 0.00 H
ATOM 604 CA LYS 41 1.348 27.849 26.743 1.00 0.00 C
ATOM 605 HA LYS 41 2.233 28.146 26.181 1.00 0.00 H
ATOM 606 CB LYS 41 1.662 27.958 28.253 1.00 0.00 C
ATOM 607 HB2 LYS 41 1.645 29.019 28.501 1.00 0.00 H
ATOM 608 HB3 LYS 41 0.854 27.449 28.779 1.00 0.00 H
ATOM 609 CG LYS 41 3.015 27.352 28.681 1.00 0.00 C
ATOM 610 HG2 LYS 41 2.883 26.271 28.717 1.00 0.00 H
ATOM 611 HG3 LYS 41 3.737 27.603 27.904 1.00 0.00 H
ATOM 612 CD LYS 41 3.540 27.859 30.063 1.00 0.00 C
ATOM 613 HD2 LYS 41 2.706 27.825 30.764 1.00 0.00 H
ATOM 614 HD3 LYS 41 4.319 27.171 30.392 1.00 0.00 H
ATOM 615 CE LYS 41 4.111 29.296 30.010 1.00 0.00 C
ATOM 616 HE2 LYS 41 4.339 29.469 28.958 1.00 0.00 H
ATOM 617 HE3 LYS 41 3.284 29.938 30.312 1.00 0.00 H
ATOM 618 NZ LYS 41 5.343 29.619 30.858 1.00 0.00 N
ATOM 619 HZ1 LYS 41 6.110 29.025 30.578 1.00 0.00 H
ATOM 620 HZ2 LYS 41 5.600 30.586 30.723 1.00 0.00 H
ATOM 621 HZ3 LYS 41 5.132 29.459 31.833 1.00 0.00 H
ATOM 622 C LYS 41 1.173 26.381 26.316 1.00 0.00 C
ATOM 623 O LYS 41 2.119 25.751 25.846 1.00 0.00 O
ATOM 624 N LYS 42 -0.033 25.840 26.450 1.00 0.00 N
ATOM 625 H LYS 42 -0.794 26.369 26.851 1.00 0.00 H
ATOM 626 CA LYS 42 -0.277 24.446 26.081 1.00 0.00 C
ATOM 627 HA LYS 42 0.298 23.781 26.725 1.00 0.00 H
ATOM 628 CB LYS 42 -1.764 24.119 26.244 1.00 0.00 C
ATOM 629 HB2 LYS 42 -1.994 24.234 27.303 1.00 0.00 H
ATOM 630 HB3 LYS 42 -2.313 24.866 25.670 1.00 0.00 H
ATOM 631 CG LYS 42 -2.174 22.720 25.782 1.00 0.00 C
ATOM 632 HG2 LYS 42 -3.260 22.649 25.840 1.00 0.00 H
ATOM 633 HG3 LYS 42 -1.857 22.599 24.746 1.00 0.00 H
ATOM 634 CD LYS 42 -1.550 21.629 26.632 1.00 0.00 C
ATOM 635 HD2 LYS 42 -0.466 21.706 26.552 1.00 0.00 H
ATOM 636 HD3 LYS 42 -1.849 21.784 27.669 1.00 0.00 H
ATOM 637 CE LYS 42 -1.998 20.238 26.175 1.00 0.00 C
ATOM 638 HE2 LYS 42 -1.671 20.105 25.144 1.00 0.00 H
ATOM 639 HE3 LYS 42 -1.503 19.504 26.810 1.00 0.00 H
ATOM 640 NZ LYS 42 -3.478 20.049 26.256 1.00 0.00 N
ATOM 641 HZ1 LYS 42 -3.937 20.729 25.667 1.00 0.00 H
ATOM 642 HZ2 LYS 42 -3.716 19.118 25.944 1.00 0.00 H
ATOM 643 HZ3 LYS 42 -3.781 20.172 27.212 1.00 0.00 H
ATOM 644 C LYS 42 0.174 24.127 24.653 1.00 0.00 C
ATOM 645 O LYS 42 0.864 23.131 24.413 1.00 0.00 O
ATOM 646 N ASP 43 -0.196 24.980 23.706 1.00 0.00 N
ATOM 647 H ASP 43 -0.772 25.778 23.933 1.00 0.00 H
ATOM 648 CA ASP 43 0.165 24.762 22.311 1.00 0.00 C
ATOM 649 HA ASP 43 0.295 23.696 22.123 1.00 0.00 H
ATOM 650 CB ASP 43 -0.936 25.290 21.391 1.00 0.00 C
ATOM 651 HB2 ASP 43 -1.150 26.317 21.688 1.00 0.00 H
ATOM 652 HB3 ASP 43 -0.566 25.279 20.366 1.00 0.00 H
ATOM 653 CG ASP 43 -2.191 24.473 21.478 1.00 0.00 C
ATOM 654 OD1 ASP 43 -2.056 23.255 21.698 1.00 0.00 O
ATOM 655 OD2 ASP 43 -3.294 25.032 21.319 1.00 0.00 O
ATOM 656 C ASP 43 1.476 25.377 21.856 1.00 0.00 C
ATOM 657 O ASP 43 2.070 24.919 20.880 1.00 0.00 O
ATOM 658 N ASN 44 1.937 26.400 22.565 1.00 0.00 N
ATOM 659 H ASN 44 1.427 26.752 23.363 1.00 0.00 H
ATOM 660 CA ASN 44 3.137 27.112 22.143 1.00 0.00 C
ATOM 661 HA ASN 44 3.527 26.700 21.212 1.00 0.00 H
ATOM 662 CB ASN 44 2.766 28.578 21.911 1.00 0.00 C
ATOM 663 HB2 ASN 44 2.447 29.024 22.853 1.00 0.00 H
ATOM 664 HB3 ASN 44 3.648 29.101 21.543 1.00 0.00 H
ATOM 665 CG ASN 44 1.646 28.737 20.893 1.00 0.00 C
ATOM 666 OD1 ASN 44 1.869 28.614 19.689 1.00 0.00 O
ATOM 667 ND2 ASN 44 0.434 28.998 21.376 1.00 0.00 N
ATOM 668 HD21 ASN 44 -0.345 29.113 20.743 1.00 0.00 H
ATOM 669 HD22 ASN 44 0.298 29.080 22.373 1.00 0.00 H
ATOM 670 C ASN 44 4.372 27.041 23.032 1.00 0.00 C
ATOM 671 O ASN 44 5.414 27.591 22.674 1.00 0.00 O
ATOM 672 N GLY 45 4.264 26.377 24.177 1.00 0.00 N
ATOM 673 H GLY 45 3.398 25.940 24.459 1.00 0.00 H
ATOM 674 CA GLY 45 5.415 26.266 25.063 1.00 0.00 C
ATOM 675 HA2 GLY 45 5.361 25.298 25.561 1.00 0.00 H
ATOM 676 HA3 GLY 45 6.315 26.308 24.449 1.00 0.00 H
ATOM 677 C GLY 45 5.483 27.361 26.115 1.00 0.00 C
ATOM 678 O GLY 45 4.675 28.290 26.118 1.00 0.00 O
ATOM 679 N GLU 46 6.457 27.258 27.013 1.00 0.00 N
ATOM 680 H GLU 46 7.097 26.477 26.987 1.00 0.00 H
ATOM 681 CA GLU 46 6.612 28.244 28.078 1.00 0.00 C
ATOM 682 HA GLU 46 5.676 28.352 28.627 1.00 0.00 H
ATOM 683 CB GLU 46 7.696 27.796 29.048 1.00 0.00 C
ATOM 684 HB2 GLU 46 7.809 28.577 29.800 1.00 0.00 H
ATOM 685 HB3 GLU 46 7.352 26.879 29.527 1.00 0.00 H
ATOM 686 CG GLU 46 9.021 27.546 28.382 1.00 0.00 C
ATOM 687 HG2 GLU 46 8.881 26.782 27.618 1.00 0.00 H
ATOM 688 HG3 GLU 46 9.348 28.473 27.912 1.00 0.00 H
ATOM 689 CD GLU 46 10.067 27.086 29.367 1.00 0.00 C
ATOM 690 OE1 GLU 46 9.776 27.117 30.578 1.00 0.00 O
ATOM 691 OE2 GLU 46 11.169 26.698 28.925 1.00 0.00 O
ATOM 692 C GLU 46 6.966 29.608 27.515 1.00 0.00 C
ATOM 693 O GLU 46 7.553 29.714 26.433 1.00 0.00 O
ATOM 694 N TRP 47 6.614 30.658 28.248 1.00 0.00 N
ATOM 695 H TRP 47 6.066 30.561 29.091 1.00 0.00 H
ATOM 696 CA TRP 47 6.910 31.995 27.770 1.00 0.00 C
ATOM 697 HA TRP 47 7.445 31.933 26.822 1.00 0.00 H
ATOM 698 CB TRP 47 5.614 32.807 27.553 1.00 0.00 C
ATOM 699 HB2 TRP 47 5.905 33.819 27.273 1.00 0.00 H
ATOM 700 HB3 TRP 47 5.025 32.364 26.750 1.00 0.00 H
ATOM 701 CG TRP 47 4.695 32.936 28.741 1.00 0.00 C
ATOM 702 CD1 TRP 47 3.612 32.150 29.038 1.00 0.00 C
ATOM 703 HD1 TRP 47 3.400 31.326 28.356 1.00 0.00 H
ATOM 704 NE1 TRP 47 3.002 32.597 30.188 1.00 0.00 N
ATOM 705 HE1 TRP 47 2.185 32.188 30.618 1.00 0.00 H
ATOM 706 CE2 TRP 47 3.686 33.687 30.657 1.00 0.00 C
ATOM 707 CZ2 TRP 47 3.453 34.481 31.787 1.00 0.00 C
ATOM 708 HZ2 TRP 47 2.607 34.236 32.429 1.00 0.00 H
ATOM 709 CH2 TRP 47 4.313 35.526 32.016 1.00 0.00 C
ATOM 710 HH2 TRP 47 4.161 36.166 32.885 1.00 0.00 H
ATOM 711 CZ3 TRP 47 5.393 35.794 31.151 1.00 0.00 C
ATOM 712 HZ3 TRP 47 6.073 36.625 31.342 1.00 0.00 H
ATOM 713 CE3 TRP 47 5.624 35.005 30.026 1.00 0.00 C
ATOM 714 HE3 TRP 47 6.467 35.256 29.382 1.00 0.00 H
ATOM 715 CD2 TRP 47 4.761 33.929 29.770 1.00 0.00 C
ATOM 716 C TRP 47 7.882 32.778 28.642 1.00 0.00 C
ATOM 717 O TRP 47 8.071 32.485 29.834 1.00 0.00 O
ATOM 718 N THR 48 8.497 33.772 28.010 1.00 0.00 N
ATOM 719 H THR 48 8.233 33.950 27.052 1.00 0.00 H
ATOM 720 CA THR 48 9.474 34.652 28.631 1.00 0.00 C
ATOM 721 HA THR 48 9.548 34.457 29.701 1.00 0.00 H
ATOM 722 CB THR 48 10.857 34.438 27.996 1.00 0.00 C
ATOM 723 HB THR 48 10.791 34.654 26.930 1.00 0.00 H
ATOM 724 CG2 THR 48 11.893 35.350 28.634 1.00 0.00 C
ATOM 725 HG21 THR 48 11.960 35.135 29.700 1.00 0.00 H
ATOM 726 HG22 THR 48 12.864 35.180 28.168 1.00 0.00 H
ATOM 727 HG23 THR 48 11.599 36.390 28.492 1.00 0.00 H
ATOM 728 OG1 THR 48 11.246 33.069 28.165 1.00 0.00 O
ATOM 729 HG1 THR 48 12.110 32.931 27.770 1.00 0.00 H
ATOM 730 C THR 48 9.021 36.070 28.320 1.00 0.00 C
ATOM 731 O THR 48 8.567 36.343 27.210 1.00 0.00 O
ATOM 732 N VAL 49 9.126 36.975 29.284 1.00 0.00 N
ATOM 733 H VAL 49 9.456 36.746 30.211 1.00 0.00 H
ATOM 734 CA VAL 49 8.714 38.345 29.018 1.00 0.00 C
ATOM 735 HA VAL 49 8.449 38.457 27.967 1.00 0.00 H
ATOM 736 CB VAL 49 7.488 38.768 29.890 1.00 0.00 C
ATOM 737 HB VAL 49 6.651 38.107 29.666 1.00 0.00 H
ATOM 738 CG1 VAL 49 7.825 38.676 31.379 1.00 0.00 C
ATOM 739 HG11 VAL 49 8.662 39.337 31.604 1.00 0.00 H
ATOM 740 HG12 VAL 49 6.958 38.975 31.968 1.00 0.00 H
ATOM 741 HG13 VAL 49 8.096 37.650 31.628 1.00 0.00 H
ATOM 742 CG2 VAL 49 7.071 40.203 29.547 1.00 0.00 C
ATOM 743 HG21 VAL 49 6.798 40.261 28.493 1.00 0.00 H
ATOM 744 HG22 VAL 49 6.216 40.490 30.159 1.00 0.00 H
ATOM 745 HG23 VAL 49 7.902 40.880 29.744 1.00 0.00 H
ATOM 746 C VAL 49 9.827 39.347 29.261 1.00 0.00 C
ATOM 747 O VAL 49 10.680 39.152 30.130 1.00 0.00 O
ATOM 748 N ASP 50 9.821 40.400 28.451 1.00 0.00 N
ATOM 749 H ASP 50 9.122 40.444 27.723 1.00 0.00 H
ATOM 750 CA ASP 50 10.748 41.511 28.584 1.00 0.00 C
ATOM 751 HA ASP 50 11.333 41.385 29.495 1.00 0.00 H
ATOM 752 CB ASP 50 11.706 41.587 27.394 1.00 0.00 C
ATOM 753 HB2 ASP 50 11.124 41.505 26.476 1.00 0.00 H
ATOM 754 HB3 ASP 50 12.200 42.558 27.425 1.00 0.00 H
ATOM 755 CG ASP 50 12.745 40.494 27.430 1.00 0.00 C
ATOM 756 OD1 ASP 50 13.535 40.463 28.398 1.00 0.00 O
ATOM 757 OD2 ASP 50 12.767 39.665 26.500 1.00 0.00 O
ATOM 758 C ASP 50 9.787 42.688 28.594 1.00 0.00 C
ATOM 759 O ASP 50 9.022 42.879 27.646 1.00 0.00 O
ATOM 760 N VAL 51 9.794 43.450 29.682 1.00 0.00 N
ATOM 761 H VAL 51 10.407 43.234 30.456 1.00 0.00 H
ATOM 762 CA VAL 51 8.887 44.582 29.814 1.00 0.00 C
ATOM 763 HA VAL 51 7.949 44.397 29.290 1.00 0.00 H
ATOM 764 CB VAL 51 8.575 44.850 31.306 1.00 0.00 C
ATOM 765 HB VAL 51 9.497 45.129 31.816 1.00 0.00 H
ATOM 766 CG1 VAL 51 7.558 45.974 31.447 1.00 0.00 C
ATOM 767 HG11 VAL 51 6.635 45.696 30.938 1.00 0.00 H
ATOM 768 HG12 VAL 51 7.352 46.148 32.503 1.00 0.00 H
ATOM 769 HG13 VAL 51 7.958 46.885 31.001 1.00 0.00 H
ATOM 770 CG2 VAL 51 8.038 43.568 31.951 1.00 0.00 C
ATOM 771 HG21 VAL 51 8.786 42.780 31.872 1.00 0.00 H
ATOM 772 HG22 VAL 51 7.817 43.754 33.002 1.00 0.00 H
ATOM 773 HG23 VAL 51 7.128 43.257 31.439 1.00 0.00 H
ATOM 774 C VAL 51 9.480 45.824 29.168 1.00 0.00 C
ATOM 775 O VAL 51 10.677 46.089 29.293 1.00 0.00 O
ATOM 776 N ALA 52 8.645 46.586 28.471 1.00 0.00 N
ATOM 777 H ALA 52 7.674 46.331 28.360 1.00 0.00 H
ATOM 778 CA ALA 52 9.122 47.785 27.805 1.00 0.00 C
ATOM 779 HA ALA 52 10.049 48.105 28.281 1.00 0.00 H
ATOM 780 CB ALA 52 9.409 47.477 26.332 1.00 0.00 C
ATOM 781 HB1 ALA 52 8.488 47.164 25.840 1.00 0.00 H
ATOM 782 HB2 ALA 52 9.797 48.370 25.842 1.00 0.00 H
ATOM 783 HB3 ALA 52 10.146 46.677 26.265 1.00 0.00 H
ATOM 784 C ALA 52 8.131 48.932 27.907 1.00 0.00 C
ATOM 785 O ALA 52 7.033 48.778 28.444 1.00 0.00 O
ATOM 786 N ASP 53 8.535 50.091 27.396 1.00 0.00 N
ATOM 787 H ASP 53 9.476 50.194 27.043 1.00 0.00 H
ATOM 788 CA ASP 53 7.669 51.255 27.395 1.00 0.00 C
ATOM 789 HA ASP 53 8.231 52.154 27.144 1.00 0.00 H
ATOM 790 CB ASP 53 6.582 51.051 26.345 1.00 0.00 C
ATOM 791 HB2 ASP 53 6.050 50.131 26.585 1.00 0.00 H
ATOM 792 HB3 ASP 53 5.892 51.893 26.395 1.00 0.00 H
ATOM 793 CG ASP 53 7.154 50.952 24.950 1.00 0.00 C
ATOM 794 OD1 ASP 53 8.173 51.630 24.693 1.00 0.00 O
ATOM 795 OD2 ASP 53 6.599 50.213 24.108 1.00 0.00 O
ATOM 796 C ASP 53 7.052 51.545 28.756 1.00 0.00 C
ATOM 797 O ASP 53 5.839 51.732 28.881 1.00 0.00 O
ATOM 798 N LYS 54 7.904 51.574 29.773 1.00 0.00 N
ATOM 799 H LYS 54 8.868 51.319 29.614 1.00 0.00 H
ATOM 800 CA LYS 54 7.487 51.877 31.132 1.00 0.00 C
ATOM 801 HA LYS 54 8.316 51.725 31.824 1.00 0.00 H
ATOM 802 CB LYS 54 7.038 53.346 31.219 1.00 0.00 C
ATOM 803 HB2 LYS 54 6.180 53.461 30.556 1.00 0.00 H
ATOM 804 HB3 LYS 54 6.729 53.529 32.248 1.00 0.00 H
ATOM 805 CG LYS 54 8.124 54.351 30.827 1.00 0.00 C
ATOM 806 HG2 LYS 54 7.748 55.357 31.014 1.00 0.00 H
ATOM 807 HG3 LYS 54 9.002 54.171 31.447 1.00 0.00 H
ATOM 808 CD LYS 54 8.504 54.215 29.355 1.00 0.00 C
ATOM 809 HD2 LYS 54 8.379 53.170 29.072 1.00 0.00 H
ATOM 810 HD3 LYS 54 7.819 54.832 28.774 1.00 0.00 H
ATOM 811 CE LYS 54 9.936 54.648 29.077 1.00 0.00 C
ATOM 812 HE2 LYS 54 9.982 55.737 29.107 1.00 0.00 H
ATOM 813 HE3 LYS 54 10.581 54.236 29.853 1.00 0.00 H
ATOM 814 NZ LYS 54 10.398 54.167 27.738 1.00 0.00 N
ATOM 815 HZ1 LYS 54 9.801 54.549 27.019 1.00 0.00 H
ATOM 816 HZ2 LYS 54 11.349 54.469 27.582 1.00 0.00 H
ATOM 817 HZ3 LYS 54 10.356 53.158 27.710 1.00 0.00 H
ATOM 818 C LYS 54 6.393 50.961 31.663 1.00 0.00 C
ATOM 819 O LYS 54 5.632 51.346 32.552 1.00 0.00 O
ATOM 820 N GLY 55 6.318 49.748 31.119 1.00 0.00 N
ATOM 821 H GLY 55 6.949 49.466 30.382 1.00 0.00 H
ATOM 822 CA GLY 55 5.322 48.796 31.574 1.00 0.00 C
ATOM 823 HA2 GLY 55 5.820 47.829 31.647 1.00 0.00 H
ATOM 824 HA3 GLY 55 5.008 49.118 32.567 1.00 0.00 H
ATOM 825 C GLY 55 4.095 48.654 30.690 1.00 0.00 C
ATOM 826 O GLY 55 3.279 47.752 30.903 1.00 0.00 O
ATOM 827 N TYR 56 3.958 49.523 29.692 1.00 0.00 N
ATOM 828 H TYR 56 4.613 50.281 29.566 1.00 0.00 H
ATOM 829 CA TYR 56 2.796 49.459 28.810 1.00 0.00 C
ATOM 830 HA TYR 56 1.929 49.087 29.357 1.00 0.00 H
ATOM 831 CB TYR 56 2.475 50.856 28.276 1.00 0.00 C
ATOM 832 HB2 TYR 56 3.348 51.317 27.813 1.00 0.00 H
ATOM 833 HB3 TYR 56 1.703 50.703 27.522 1.00 0.00 H
ATOM 834 CG TYR 56 1.945 51.761 29.362 1.00 0.00 C
ATOM 835 CD1 TYR 56 0.590 51.770 29.691 1.00 0.00 C
ATOM 836 HD1 TYR 56 -0.099 51.161 29.105 1.00 0.00 H
ATOM 837 CE1 TYR 56 0.112 52.540 30.749 1.00 0.00 C
ATOM 838 HE1 TYR 56 -0.951 52.553 30.988 1.00 0.00 H
ATOM 839 CZ TYR 56 0.998 53.309 31.489 1.00 0.00 C
ATOM 840 OH TYR 56 0.540 54.054 32.553 1.00 0.00 O
ATOM 841 HH TYR 56 -0.406 53.967 32.692 1.00 0.00 H
ATOM 842 CE2 TYR 56 2.346 53.318 31.176 1.00 0.00 C
ATOM 843 HE2 TYR 56 3.041 53.924 31.757 1.00 0.00 H
ATOM 844 CD2 TYR 56 2.812 52.550 30.117 1.00 0.00 C
ATOM 845 HD2 TYR 56 3.872 52.557 29.864 1.00 0.00 H
ATOM 846 C TYR 56 2.941 48.472 27.657 1.00 0.00 C
ATOM 847 O TYR 56 1.981 48.213 26.936 1.00 0.00 O
ATOM 848 N THR 57 4.139 47.925 27.484 1.00 0.00 N
ATOM 849 H THR 57 4.907 48.183 28.088 1.00 0.00 H
ATOM 850 CA THR 57 4.389 46.958 26.423 1.00 0.00 C
ATOM 851 HA THR 57 3.447 46.679 25.950 1.00 0.00 H
ATOM 852 CB THR 57 5.327 47.546 25.345 1.00 0.00 C
ATOM 853 HB THR 57 6.225 47.925 25.832 1.00 0.00 H
ATOM 854 CG2 THR 57 5.717 46.479 24.312 1.00 0.00 C
ATOM 855 HG21 THR 57 4.819 46.100 23.824 1.00 0.00 H
ATOM 856 HG22 THR 57 6.377 46.920 23.565 1.00 0.00 H
ATOM 857 HG23 THR 57 6.232 45.659 24.813 1.00 0.00 H
ATOM 858 OG1 THR 57 4.657 48.621 24.678 1.00 0.00 O
ATOM 859 HG1 THR 57 5.235 48.991 24.007 1.00 0.00 H
ATOM 860 C THR 57 5.029 45.710 27.023 1.00 0.00 C
ATOM 861 O THR 57 5.996 45.801 27.783 1.00 0.00 O
ATOM 862 N LEU 58 4.466 44.551 26.701 1.00 0.00 N
ATOM 863 H LEU 58 3.647 44.525 26.110 1.00 0.00 H
ATOM 864 CA LEU 58 5.005 43.291 27.188 1.00 0.00 C
ATOM 865 HA LEU 58 5.851 43.480 27.849 1.00 0.00 H
ATOM 866 CB LEU 58 3.934 42.522 27.970 1.00 0.00 C
ATOM 867 HB2 LEU 58 3.156 42.300 27.240 1.00 0.00 H
ATOM 868 HB3 LEU 58 4.390 41.592 28.308 1.00 0.00 H
ATOM 869 CG LEU 58 3.315 43.254 29.171 1.00 0.00 C
ATOM 870 HG LEU 58 2.831 44.169 28.830 1.00 0.00 H
ATOM 871 CD1 LEU 58 2.286 42.355 29.836 1.00 0.00 C
ATOM 872 HD11 LEU 58 2.769 41.440 30.178 1.00 0.00 H
ATOM 873 HD12 LEU 58 1.846 42.873 30.688 1.00 0.00 H
ATOM 874 HD13 LEU 58 1.503 42.106 29.120 1.00 0.00 H
ATOM 875 CD2 LEU 58 4.398 43.642 30.172 1.00 0.00 C
ATOM 876 HD21 LEU 58 5.121 44.300 29.689 1.00 0.00 H
ATOM 877 HD22 LEU 58 3.944 44.160 31.017 1.00 0.00 H
ATOM 878 HD23 LEU 58 4.905 42.744 30.526 1.00 0.00 H
ATOM 879 C LEU 58 5.451 42.485 25.974 1.00 0.00 C
ATOM 880 O LEU 58 4.625 42.066 25.163 1.00 0.00 O
ATOM 881 N ASN 59 6.759 42.293 25.827 1.00 0.00 N
ATOM 882 H ASN 59 7.423 42.705 26.467 1.00 0.00 H
ATOM 883 CA ASN 59 7.272 41.519 24.703 1.00 0.00 C
ATOM 884 HA ASN 59 6.553 41.525 23.884 1.00 0.00 H
ATOM 885 CB ASN 59 8.580 42.131 24.208 1.00 0.00 C
ATOM 886 HB2 ASN 59 9.268 42.265 25.043 1.00 0.00 H
ATOM 887 HB3 ASN 59 9.024 41.455 23.477 1.00 0.00 H
ATOM 888 CG ASN 59 8.352 43.475 23.548 1.00 0.00 C
ATOM 889 OD1 ASN 59 7.467 43.604 22.701 1.00 0.00 O
ATOM 890 ND2 ASN 59 9.127 44.483 23.938 1.00 0.00 N
ATOM 891 HD21 ASN 59 9.009 45.396 23.524 1.00 0.00 H
ATOM 892 HD22 ASN 59 9.830 44.330 24.647 1.00 0.00 H
ATOM 893 C ASN 59 7.450 40.091 25.193 1.00 0.00 C
ATOM 894 O ASN 59 8.379 39.786 25.942 1.00 0.00 O
ATOM 895 N ILE 60 6.529 39.227 24.777 1.00 0.00 N
ATOM 896 H ILE 60 5.788 39.547 24.170 1.00 0.00 H
ATOM 897 CA ILE 60 6.512 37.838 25.214 1.00 0.00 C
ATOM 898 HA ILE 60 7.251 37.646 25.991 1.00 0.00 H
ATOM 899 CB ILE 60 5.101 37.490 25.747 1.00 0.00 C
ATOM 900 HB ILE 60 4.376 37.624 24.944 1.00 0.00 H
ATOM 901 CG2 ILE 60 5.054 36.042 26.239 1.00 0.00 C
ATOM 902 HG21 ILE 60 5.778 35.907 27.042 1.00 0.00 H
ATOM 903 HG22 ILE 60 4.054 35.816 26.610 1.00 0.00 H
ATOM 904 HG23 ILE 60 5.296 35.370 25.416 1.00 0.00 H
ATOM 905 CG1 ILE 60 4.732 38.476 26.865 1.00 0.00 C
ATOM 906 HG12 ILE 60 5.473 38.351 27.655 1.00 0.00 H
ATOM 907 HG13 ILE 60 4.816 39.478 26.444 1.00 0.00 H
ATOM 908 CD1 ILE 60 3.345 38.286 27.440 1.00 0.00 C
ATOM 909 HD11 ILE 60 3.260 37.284 27.862 1.00 0.00 H
ATOM 910 HD12 ILE 60 3.171 39.025 28.222 1.00 0.00 H
ATOM 911 HD13 ILE 60 2.604 38.412 26.651 1.00 0.00 H
ATOM 912 C ILE 60 6.908 36.846 24.127 1.00 0.00 C
ATOM 913 O ILE 60 6.374 36.871 23.019 1.00 0.00 O
ATOM 914 N LYS 61 7.848 35.966 24.453 1.00 0.00 N
ATOM 915 H LYS 61 8.284 35.993 25.363 1.00 0.00 H
ATOM 916 CA LYS 61 8.305 34.966 23.497 1.00 0.00 C
ATOM 917 HA LYS 61 7.771 35.083 22.554 1.00 0.00 H
ATOM 918 CB LYS 61 9.808 35.131 23.234 1.00 0.00 C
ATOM 919 HB2 LYS 61 9.947 36.079 22.715 1.00 0.00 H
ATOM 920 HB3 LYS 61 10.307 35.171 24.202 1.00 0.00 H
ATOM 921 CG LYS 61 10.405 34.008 22.404 1.00 0.00 C
ATOM 922 HG2 LYS 61 10.970 33.358 23.072 1.00 0.00 H
ATOM 923 HG3 LYS 61 9.585 33.445 21.958 1.00 0.00 H
ATOM 924 CD LYS 61 11.322 34.526 21.304 1.00 0.00 C
ATOM 925 HD2 LYS 61 11.663 33.673 20.717 1.00 0.00 H
ATOM 926 HD3 LYS 61 10.744 35.196 20.668 1.00 0.00 H
ATOM 927 CE LYS 61 12.523 35.269 21.861 1.00 0.00 C
ATOM 928 HE2 LYS 61 12.175 36.168 22.371 1.00 0.00 H
ATOM 929 HE3 LYS 61 13.037 34.623 22.573 1.00 0.00 H
ATOM 930 NZ LYS 61 13.465 35.651 20.766 1.00 0.00 N
ATOM 931 HZ1 LYS 61 12.989 36.250 20.106 1.00 0.00 H
ATOM 932 HZ2 LYS 61 14.255 36.143 21.158 1.00 0.00 H
ATOM 933 HZ3 LYS 61 13.787 34.819 20.294 1.00 0.00 H
ATOM 934 C LYS 61 8.014 33.558 24.019 1.00 0.00 C
ATOM 935 O LYS 61 8.223 33.266 25.198 1.00 0.00 O
ATOM 936 N PHE 62 7.517 32.700 23.134 1.00 0.00 N
ATOM 937 H PHE 62 7.336 33.015 22.192 1.00 0.00 H
ATOM 938 CA PHE 62 7.187 31.319 23.478 1.00 0.00 C
ATOM 939 HA PHE 62 7.131 31.204 24.560 1.00 0.00 H
ATOM 940 CB PHE 62 5.831 30.947 22.876 1.00 0.00 C
ATOM 941 HB2 PHE 62 5.838 31.199 21.816 1.00 0.00 H
ATOM 942 HB3 PHE 62 5.611 29.886 22.995 1.00 0.00 H
ATOM 943 CG PHE 62 4.679 31.697 23.490 1.00 0.00 C
ATOM 944 CD1 PHE 62 4.348 32.972 23.042 1.00 0.00 C
ATOM 945 HD1 PHE 62 4.912 33.408 22.217 1.00 0.00 H
ATOM 946 CE1 PHE 62 3.311 33.690 23.633 1.00 0.00 C
ATOM 947 HE1 PHE 62 3.065 34.688 23.272 1.00 0.00 H
ATOM 948 CZ PHE 62 2.590 33.134 24.683 1.00 0.00 C
ATOM 949 HZ PHE 62 1.777 33.693 25.147 1.00 0.00 H
ATOM 950 CE2 PHE 62 2.908 31.860 25.142 1.00 0.00 C
ATOM 951 HE2 PHE 62 2.348 31.417 25.966 1.00 0.00 H
ATOM 952 CD2 PHE 62 3.952 31.146 24.542 1.00 0.00 C
ATOM 953 HD2 PHE 62 4.204 30.147 24.898 1.00 0.00 H
ATOM 954 C PHE 62 8.284 30.405 22.953 1.00 0.00 C
ATOM 955 O PHE 62 8.718 30.535 21.810 1.00 0.00 O
ATOM 956 N ALA 63 8.710 29.469 23.795 1.00 0.00 N
ATOM 957 H ALA 63 8.309 29.427 24.721 1.00 0.00 H
ATOM 958 CA ALA 63 9.804 28.558 23.472 1.00 0.00 C
ATOM 959 HA ALA 63 10.543 29.178 22.965 1.00 0.00 H
ATOM 960 CB ALA 63 10.416 28.031 24.769 1.00 0.00 C
ATOM 961 HB1 ALA 63 9.691 27.400 25.284 1.00 0.00 H
ATOM 962 HB2 ALA 63 11.307 27.446 24.540 1.00 0.00 H
ATOM 963 HB3 ALA 63 10.687 28.870 25.410 1.00 0.00 H
ATOM 964 C ALA 63 9.471 27.390 22.560 1.00 0.00 C
ATOM 965 O ALA 63 10.372 26.794 21.962 1.00 0.00 O
ATOM 966 N GLY 64 8.188 27.060 22.467 1.00 0.00 N
ATOM 967 H GLY 64 7.481 27.579 22.968 1.00 0.00 H
ATOM 968 CA GLY 64 7.767 25.945 21.643 1.00 0.00 C
ATOM 969 HA2 GLY 64 6.729 26.088 21.342 1.00 0.00 H
ATOM 970 HA3 GLY 64 8.399 25.895 20.756 1.00 0.00 H
ATOM 971 C GLY 64 7.884 24.638 22.407 1.00 0.00 C
ATOM 972 O GLY 64 7.615 23.577 21.808 1.00 0.00 O
ATOM 973 OXT GLY 64 8.246 24.668 23.602 1.00 0.00 O
TER 974 GLY 64
END
This source diff could not be displayed because it is too large. You can view the blob instead.
ATOM 1 N GLY A 41 -3.459 13.998 -0.979 1.00 0.00 N
ATOM 2 CA GLY A 41 -2.157 13.968 -0.291 1.00 0.00 C
ATOM 3 C GLY A 41 -2.259 13.095 0.944 1.00 0.00 C
ATOM 4 O GLY A 41 -2.192 13.587 2.068 1.00 0.00 O
ATOM 5 H1 GLY A 41 -3.373 14.477 -1.863 1.00 0.00 H
ATOM 6 H2 GLY A 41 -4.136 14.469 -0.394 1.00 0.00 H
ATOM 7 H3 GLY A 41 -3.765 13.049 -1.139 1.00 0.00 H
ATOM 8 HA2 GLY A 41 -1.402 13.552 -0.958 1.00 0.00 H
ATOM 9 HA3 GLY A 41 -1.873 14.981 -0.003 1.00 0.00 H
ATOM 10 N GLU A 42 -2.470 11.799 0.719 1.00 0.00 N
ATOM 11 CA GLU A 42 -2.813 10.817 1.749 1.00 0.00 C
ATOM 12 C GLU A 42 -2.404 9.392 1.328 1.00 0.00 C
ATOM 13 O GLU A 42 -1.866 9.184 0.236 1.00 0.00 O
ATOM 14 CB GLU A 42 -4.318 10.954 2.061 1.00 0.00 C
ATOM 15 CG GLU A 42 -5.262 10.659 0.879 1.00 0.00 C
ATOM 16 CD GLU A 42 -5.618 9.175 0.790 1.00 0.00 C
ATOM 17 OE1 GLU A 42 -6.447 8.739 1.615 1.00 0.00 O
ATOM 18 OE2 GLU A 42 -5.047 8.495 -0.089 1.00 0.00 O
ATOM 19 H GLU A 42 -2.409 11.463 -0.239 1.00 0.00 H
ATOM 20 HA GLU A 42 -2.262 11.066 2.659 1.00 0.00 H
ATOM 21 HB2 GLU A 42 -4.578 10.313 2.904 1.00 0.00 H
ATOM 22 HB3 GLU A 42 -4.503 11.978 2.385 1.00 0.00 H
ATOM 23 HG2 GLU A 42 -6.184 11.224 1.023 1.00 0.00 H
ATOM 24 HG3 GLU A 42 -4.819 10.996 -0.060 1.00 0.00 H
ATOM 25 N TRP A 43 -2.657 8.398 2.191 1.00 0.00 N
ATOM 26 CA TRP A 43 -2.275 7.004 1.948 1.00 0.00 C
ATOM 27 C TRP A 43 -3.489 6.084 1.865 1.00 0.00 C
ATOM 28 O TRP A 43 -4.412 6.185 2.666 1.00 0.00 O
ATOM 29 CB TRP A 43 -1.323 6.495 3.031 1.00 0.00 C
ATOM 30 CG TRP A 43 0.042 7.102 3.067 1.00 0.00 C
ATOM 31 CD1 TRP A 43 0.432 8.122 3.861 1.00 0.00 C
ATOM 32 CD2 TRP A 43 1.238 6.654 2.364 1.00 0.00 C
ATOM 33 NE1 TRP A 43 1.798 8.303 3.733 1.00 0.00 N
ATOM 34 CE2 TRP A 43 2.349 7.409 2.839 1.00 0.00 C
ATOM 35 CE3 TRP A 43 1.502 5.637 1.421 1.00 0.00 C
ATOM 36 CZ2 TRP A 43 3.660 7.172 2.396 1.00 0.00 C
ATOM 37 CZ3 TRP A 43 2.814 5.378 0.974 1.00 0.00 C
ATOM 38 CH2 TRP A 43 3.891 6.151 1.454 1.00 0.00 C
ATOM 39 H TRP A 43 -3.217 8.583 3.012 1.00 0.00 H
ATOM 40 HA TRP A 43 -1.748 6.939 0.998 1.00 0.00 H
ATOM 41 HB2 TRP A 43 -1.795 6.603 4.009 1.00 0.00 H
ATOM 42 HB3 TRP A 43 -1.178 5.428 2.867 1.00 0.00 H
ATOM 43 HD1 TRP A 43 -0.223 8.666 4.529 1.00 0.00 H
ATOM 44 HE1 TRP A 43 2.323 8.968 4.282 1.00 0.00 H
ATOM 45 HE3 TRP A 43 0.673 5.046 1.079 1.00 0.00 H
ATOM 46 HZ2 TRP A 43 4.475 7.775 2.764 1.00 0.00 H
ATOM 47 HZ3 TRP A 43 3.000 4.574 0.275 1.00 0.00 H
ATOM 48 HH2 TRP A 43 4.896 5.957 1.105 1.00 0.00 H
ATOM 49 N THR A 44 -3.442 5.171 0.891 1.00 0.00 N
ATOM 50 CA THR A 44 -4.479 4.180 0.575 1.00 0.00 C
ATOM 51 C THR A 44 -3.843 2.803 0.351 1.00 0.00 C
ATOM 52 O THR A 44 -2.703 2.678 -0.119 1.00 0.00 O
ATOM 53 CB THR A 44 -5.299 4.669 -0.626 1.00 0.00 C
ATOM 54 OG1 THR A 44 -5.999 5.835 -0.261 1.00 0.00 O
ATOM 55 CG2 THR A 44 -6.378 3.680 -1.060 1.00 0.00 C
ATOM 56 H THR A 44 -2.615 5.169 0.295 1.00 0.00 H
ATOM 57 HA THR A 44 -5.178 4.078 1.409 1.00 0.00 H
ATOM 58 HB THR A 44 -4.637 4.888 -1.464 1.00 0.00 H
ATOM 59 HG1 THR A 44 -5.381 6.571 -0.187 1.00 0.00 H
ATOM 60 HG21 THR A 44 -6.895 3.283 -0.186 1.00 0.00 H
ATOM 61 HG22 THR A 44 -7.107 4.197 -1.689 1.00 0.00 H
ATOM 62 HG23 THR A 44 -5.932 2.870 -1.633 1.00 0.00 H
ATOM 63 N TRP A 45 -4.533 1.768 0.833 1.00 0.00 N
ATOM 64 CA TRP A 45 -4.072 0.390 0.838 1.00 0.00 C
ATOM 65 C TRP A 45 -4.342 -0.326 -0.480 1.00 0.00 C
ATOM 66 O TRP A 45 -5.435 -0.224 -1.032 1.00 0.00 O
ATOM 67 CB TRP A 45 -4.788 -0.340 1.978 1.00 0.00 C
ATOM 68 CG TRP A 45 -4.488 -1.796 2.065 1.00 0.00 C
ATOM 69 CD1 TRP A 45 -5.294 -2.812 1.683 1.00 0.00 C
ATOM 70 CD2 TRP A 45 -3.272 -2.403 2.560 1.00 0.00 C
ATOM 71 NE1 TRP A 45 -4.668 -4.016 1.955 1.00 0.00 N
ATOM 72 CE2 TRP A 45 -3.425 -3.818 2.524 1.00 0.00 C
ATOM 73 CE3 TRP A 45 -2.066 -1.877 3.057 1.00 0.00 C
ATOM 74 CZ2 TRP A 45 -2.425 -4.683 2.991 1.00 0.00 C
ATOM 75 CZ3 TRP A 45 -1.042 -2.735 3.478 1.00 0.00 C
ATOM 76 CH2 TRP A 45 -1.225 -4.130 3.467 1.00 0.00 C
ATOM 77 H TRP A 45 -5.445 1.939 1.230 1.00 0.00 H
ATOM 78 HA TRP A 45 -2.995 0.383 0.984 1.00 0.00 H
ATOM 79 HB2 TRP A 45 -4.507 0.124 2.924 1.00 0.00 H
ATOM 80 HB3 TRP A 45 -5.863 -0.224 1.865 1.00 0.00 H
ATOM 81 HD1 TRP A 45 -6.273 -2.686 1.236 1.00 0.00 H
ATOM 82 HE1 TRP A 45 -5.085 -4.917 1.768 1.00 0.00 H
ATOM 83 HE3 TRP A 45 -1.932 -0.803 3.113 1.00 0.00 H
ATOM 84 HZ2 TRP A 45 -2.562 -5.753 2.948 1.00 0.00 H
ATOM 85 HZ3 TRP A 45 -0.128 -2.290 3.836 1.00 0.00 H
ATOM 86 HH2 TRP A 45 -0.435 -4.774 3.819 1.00 0.00 H
ATOM 87 N ASP A 46 -3.361 -1.112 -0.932 1.00 0.00 N
ATOM 88 CA ASP A 46 -3.380 -1.718 -2.256 1.00 0.00 C
ATOM 89 C ASP A 46 -3.056 -3.218 -2.194 1.00 0.00 C
ATOM 90 O ASP A 46 -1.903 -3.638 -2.287 1.00 0.00 O
ATOM 91 CB ASP A 46 -2.447 -0.886 -3.144 1.00 0.00 C
ATOM 92 CG ASP A 46 -2.439 -1.351 -4.597 1.00 0.00 C
ATOM 93 OD1 ASP A 46 -3.330 -0.897 -5.347 1.00 0.00 O
ATOM 94 OD2 ASP A 46 -1.542 -2.153 -4.935 1.00 0.00 O
ATOM 95 H ASP A 46 -2.486 -1.175 -0.414 1.00 0.00 H
ATOM 96 HA ASP A 46 -4.382 -1.630 -2.679 1.00 0.00 H
ATOM 97 HB2 ASP A 46 -2.795 0.147 -3.114 1.00 0.00 H
ATOM 98 HB3 ASP A 46 -1.438 -0.900 -2.733 1.00 0.00 H
ATOM 99 N ASP A 47 -4.105 -4.040 -2.056 1.00 0.00 N
ATOM 100 CA ASP A 47 -4.049 -5.507 -1.996 1.00 0.00 C
ATOM 101 C ASP A 47 -3.319 -6.156 -3.182 1.00 0.00 C
ATOM 102 O ASP A 47 -2.689 -7.197 -3.007 1.00 0.00 O
ATOM 103 CB ASP A 47 -5.479 -6.057 -1.911 1.00 0.00 C
ATOM 104 CG ASP A 47 -5.490 -7.579 -1.747 1.00 0.00 C
ATOM 105 OD1 ASP A 47 -5.162 -8.036 -0.630 1.00 0.00 O
ATOM 106 OD2 ASP A 47 -5.812 -8.258 -2.747 1.00 0.00 O
ATOM 107 H ASP A 47 -5.011 -3.609 -1.935 1.00 0.00 H
ATOM 108 HA ASP A 47 -3.517 -5.795 -1.087 1.00 0.00 H
ATOM 109 HB2 ASP A 47 -5.991 -5.607 -1.058 1.00 0.00 H
ATOM 110 HB3 ASP A 47 -6.021 -5.784 -2.819 1.00 0.00 H
ATOM 111 N ALA A 48 -3.342 -5.526 -4.363 1.00 0.00 N
ATOM 112 CA ALA A 48 -2.533 -5.934 -5.515 1.00 0.00 C
ATOM 113 C ALA A 48 -1.014 -5.916 -5.243 1.00 0.00 C
ATOM 114 O ALA A 48 -0.247 -6.444 -6.044 1.00 0.00 O
ATOM 115 CB ALA A 48 -2.876 -5.037 -6.711 1.00 0.00 C
ATOM 116 H ALA A 48 -3.899 -4.687 -4.435 1.00 0.00 H
ATOM 117 HA ALA A 48 -2.801 -6.960 -5.765 1.00 0.00 H
ATOM 118 HB1 ALA A 48 -2.392 -5.432 -7.605 1.00 0.00 H
ATOM 119 HB2 ALA A 48 -3.953 -5.009 -6.876 1.00 0.00 H
ATOM 120 HB3 ALA A 48 -2.510 -4.024 -6.536 1.00 0.00 H
ATOM 121 N THR A 49 -0.580 -5.298 -4.134 1.00 0.00 N
ATOM 122 CA THR A 49 0.801 -5.325 -3.618 1.00 0.00 C
ATOM 123 C THR A 49 0.933 -5.671 -2.131 1.00 0.00 C
ATOM 124 O THR A 49 2.033 -6.014 -1.704 1.00 0.00 O
ATOM 125 CB THR A 49 1.504 -3.983 -3.857 1.00 0.00 C
ATOM 126 OG1 THR A 49 0.776 -2.919 -3.281 1.00 0.00 O
ATOM 127 CG2 THR A 49 1.750 -3.712 -5.339 1.00 0.00 C
ATOM 128 H THR A 49 -1.292 -4.822 -3.591 1.00 0.00 H
ATOM 129 HA THR A 49 1.368 -6.096 -4.146 1.00 0.00 H
ATOM 130 HB THR A 49 2.480 -4.025 -3.378 1.00 0.00 H
ATOM 131 HG1 THR A 49 -0.153 -2.989 -3.536 1.00 0.00 H
ATOM 132 HG21 THR A 49 2.296 -4.551 -5.768 1.00 0.00 H
ATOM 133 HG22 THR A 49 0.808 -3.584 -5.871 1.00 0.00 H
ATOM 134 HG23 THR A 49 2.352 -2.809 -5.442 1.00 0.00 H
ATOM 135 N LYS A 50 -0.151 -5.608 -1.342 1.00 0.00 N
ATOM 136 CA LYS A 50 -0.168 -5.775 0.123 1.00 0.00 C
ATOM 137 C LYS A 50 0.701 -4.745 0.851 1.00 0.00 C
ATOM 138 O LYS A 50 1.329 -5.029 1.871 1.00 0.00 O
ATOM 139 CB LYS A 50 0.144 -7.223 0.539 1.00 0.00 C
ATOM 140 CG LYS A 50 -0.837 -8.217 -0.090 1.00 0.00 C
ATOM 141 CD LYS A 50 -0.641 -9.601 0.527 1.00 0.00 C
ATOM 142 CE LYS A 50 -1.607 -10.588 -0.122 1.00 0.00 C
ATOM 143 NZ LYS A 50 -1.679 -11.839 0.650 1.00 0.00 N
ATOM 144 H LYS A 50 -0.986 -5.224 -1.771 1.00 0.00 H
ATOM 145 HA LYS A 50 -1.183 -5.569 0.462 1.00 0.00 H
ATOM 146 HB2 LYS A 50 1.166 -7.484 0.260 1.00 0.00 H
ATOM 147 HB3 LYS A 50 0.061 -7.300 1.624 1.00 0.00 H
ATOM 148 HG2 LYS A 50 -1.857 -7.881 0.101 1.00 0.00 H
ATOM 149 HG3 LYS A 50 -0.669 -8.268 -1.168 1.00 0.00 H
ATOM 150 HD2 LYS A 50 0.385 -9.938 0.371 1.00 0.00 H
ATOM 151 HD3 LYS A 50 -0.843 -9.546 1.598 1.00 0.00 H
ATOM 152 HE2 LYS A 50 -2.602 -10.142 -0.163 1.00 0.00 H
ATOM 153 HE3 LYS A 50 -1.271 -10.802 -1.137 1.00 0.00 H
ATOM 154 HZ1 LYS A 50 -2.301 -12.485 0.188 1.00 0.00 H
ATOM 155 HZ2 LYS A 50 -0.757 -12.246 0.719 1.00 0.00 H
ATOM 156 HZ3 LYS A 50 -2.026 -11.636 1.577 1.00 0.00 H
ATOM 157 N THR A 51 0.663 -3.504 0.370 1.00 0.00 N
ATOM 158 CA THR A 51 1.336 -2.379 1.003 1.00 0.00 C
ATOM 159 C THR A 51 0.482 -1.115 0.856 1.00 0.00 C
ATOM 160 O THR A 51 -0.662 -1.149 0.377 1.00 0.00 O
ATOM 161 CB THR A 51 2.787 -2.254 0.498 1.00 0.00 C
ATOM 162 OG1 THR A 51 3.482 -1.269 1.235 1.00 0.00 O
ATOM 163 CG2 THR A 51 2.904 -1.970 -0.997 1.00 0.00 C
ATOM 164 H THR A 51 0.093 -3.315 -0.448 1.00 0.00 H
ATOM 165 HA THR A 51 1.433 -2.612 2.061 1.00 0.00 H
ATOM 166 HB THR A 51 3.290 -3.201 0.695 1.00 0.00 H
ATOM 167 HG1 THR A 51 4.414 -1.503 1.223 1.00 0.00 H
ATOM 168 HG21 THR A 51 2.728 -2.904 -1.527 1.00 0.00 H
ATOM 169 HG22 THR A 51 2.169 -1.231 -1.317 1.00 0.00 H
ATOM 170 HG23 THR A 51 3.904 -1.619 -1.243 1.00 0.00 H
ATOM 171 N TRP A 52 1.033 0.017 1.284 1.00 0.00 N
ATOM 172 CA TRP A 52 0.400 1.312 1.147 1.00 0.00 C
ATOM 173 C TRP A 52 0.904 2.032 -0.096 1.00 0.00 C
ATOM 174 O TRP A 52 2.047 1.886 -0.523 1.00 0.00 O
ATOM 175 CB TRP A 52 0.652 2.149 2.407 1.00 0.00 C
ATOM 176 CG TRP A 52 -0.105 1.659 3.598 1.00 0.00 C
ATOM 177 CD1 TRP A 52 0.374 0.891 4.603 1.00 0.00 C
ATOM 178 CD2 TRP A 52 -1.490 1.953 3.941 1.00 0.00 C
ATOM 179 NE1 TRP A 52 -0.647 0.627 5.502 1.00 0.00 N
ATOM 180 CE2 TRP A 52 -1.826 1.245 5.132 1.00 0.00 C
ATOM 181 CE3 TRP A 52 -2.479 2.783 3.380 1.00 0.00 C
ATOM 182 CZ2 TRP A 52 -3.117 1.288 5.680 1.00 0.00 C
ATOM 183 CZ3 TRP A 52 -3.754 2.895 3.964 1.00 0.00 C
ATOM 184 CH2 TRP A 52 -4.084 2.127 5.092 1.00 0.00 C
ATOM 185 H TRP A 52 2.014 -0.043 1.543 1.00 0.00 H
ATOM 186 HA TRP A 52 -0.672 1.164 1.026 1.00 0.00 H
ATOM 187 HB2 TRP A 52 1.720 2.212 2.638 1.00 0.00 H
ATOM 188 HB3 TRP A 52 0.313 3.165 2.217 1.00 0.00 H
ATOM 189 HD1 TRP A 52 1.393 0.526 4.665 1.00 0.00 H
ATOM 190 HE1 TRP A 52 -0.525 0.085 6.345 1.00 0.00 H
ATOM 191 HE3 TRP A 52 -2.224 3.361 2.507 1.00 0.00 H
ATOM 192 HZ2 TRP A 52 -3.362 0.690 6.546 1.00 0.00 H
ATOM 193 HZ3 TRP A 52 -4.481 3.582 3.551 1.00 0.00 H
ATOM 194 HH2 TRP A 52 -5.075 2.202 5.518 1.00 0.00 H
ATOM 195 N THR A 53 0.024 2.877 -0.624 1.00 0.00 N
ATOM 196 CA THR A 53 0.230 3.682 -1.817 1.00 0.00 C
ATOM 197 C THR A 53 -0.162 5.116 -1.518 1.00 0.00 C
ATOM 198 O THR A 53 -1.155 5.391 -0.835 1.00 0.00 O
ATOM 199 CB THR A 53 -0.556 3.147 -3.019 1.00 0.00 C
ATOM 200 OG1 THR A 53 -1.915 2.891 -2.723 1.00 0.00 O
ATOM 201 CG2 THR A 53 0.094 1.883 -3.583 1.00 0.00 C
ATOM 202 H THR A 53 -0.895 2.950 -0.198 1.00 0.00 H
ATOM 203 HA THR A 53 1.289 3.672 -2.072 1.00 0.00 H
ATOM 204 HB THR A 53 -0.524 3.908 -3.798 1.00 0.00 H
ATOM 205 HG1 THR A 53 -2.027 2.688 -1.778 1.00 0.00 H
ATOM 206 HG21 THR A 53 0.121 1.098 -2.828 1.00 0.00 H
ATOM 207 HG22 THR A 53 -0.475 1.537 -4.446 1.00 0.00 H
ATOM 208 HG23 THR A 53 1.112 2.107 -3.900 1.00 0.00 H
ATOM 209 N TRP A 54 0.699 6.025 -1.963 1.00 0.00 N
ATOM 210 CA TRP A 54 0.500 7.447 -1.826 1.00 0.00 C
ATOM 211 C TRP A 54 -0.387 7.968 -2.953 1.00 0.00 C
ATOM 212 O TRP A 54 -0.117 7.745 -4.132 1.00 0.00 O
ATOM 213 CB TRP A 54 1.868 8.133 -1.800 1.00 0.00 C
ATOM 214 CG TRP A 54 1.795 9.620 -1.788 1.00 0.00 C
ATOM 215 CD1 TRP A 54 2.062 10.460 -2.812 1.00 0.00 C
ATOM 216 CD2 TRP A 54 1.425 10.453 -0.664 1.00 0.00 C
ATOM 217 NE1 TRP A 54 1.853 11.763 -2.393 1.00 0.00 N
ATOM 218 CE2 TRP A 54 1.487 11.816 -1.060 1.00 0.00 C
ATOM 219 CE3 TRP A 54 1.066 10.168 0.663 1.00 0.00 C
ATOM 220 CZ2 TRP A 54 1.221 12.857 -0.158 1.00 0.00 C
ATOM 221 CZ3 TRP A 54 0.840 11.197 1.590 1.00 0.00 C
ATOM 222 CH2 TRP A 54 0.924 12.539 1.182 1.00 0.00 C
ATOM 223 H TRP A 54 1.501 5.725 -2.494 1.00 0.00 H
ATOM 224 HA TRP A 54 -0.031 7.630 -0.892 1.00 0.00 H
ATOM 225 HB2 TRP A 54 2.386 7.817 -0.893 1.00 0.00 H
ATOM 226 HB3 TRP A 54 2.470 7.817 -2.648 1.00 0.00 H
ATOM 227 HD1 TRP A 54 2.387 10.148 -3.798 1.00 0.00 H
ATOM 228 HE1 TRP A 54 1.996 12.565 -2.989 1.00 0.00 H
ATOM 229 HE3 TRP A 54 0.970 9.135 0.953 1.00 0.00 H
ATOM 230 HZ2 TRP A 54 1.269 13.887 -0.478 1.00 0.00 H
ATOM 231 HZ3 TRP A 54 0.600 10.945 2.612 1.00 0.00 H
ATOM 232 HH2 TRP A 54 0.743 13.323 1.904 1.00 0.00 H
ATOM 233 N THR A 55 -1.437 8.688 -2.565 1.00 0.00 N
ATOM 234 CA THR A 55 -2.363 9.375 -3.457 1.00 0.00 C
ATOM 235 C THR A 55 -1.997 10.850 -3.400 1.00 0.00 C
ATOM 236 O THR A 55 -2.276 11.523 -2.404 1.00 0.00 O
ATOM 237 CB THR A 55 -3.804 9.130 -2.995 1.00 0.00 C
ATOM 238 OG1 THR A 55 -4.094 7.755 -3.113 1.00 0.00 O
ATOM 239 CG2 THR A 55 -4.878 9.897 -3.768 1.00 0.00 C
ATOM 240 H THR A 55 -1.532 8.889 -1.568 1.00 0.00 H
ATOM 241 HA THR A 55 -2.256 9.010 -4.481 1.00 0.00 H
ATOM 242 HB THR A 55 -3.867 9.418 -1.951 1.00 0.00 H
ATOM 243 HG1 THR A 55 -3.461 7.276 -2.574 1.00 0.00 H
ATOM 244 HG21 THR A 55 -4.891 9.590 -4.814 1.00 0.00 H
ATOM 245 HG22 THR A 55 -5.848 9.681 -3.320 1.00 0.00 H
ATOM 246 HG23 THR A 55 -4.700 10.970 -3.703 1.00 0.00 H
ATOM 247 N GLU A 56 -1.306 11.332 -4.435 1.00 0.00 N
ATOM 248 CA GLU A 56 -0.977 12.749 -4.549 1.00 0.00 C
ATOM 249 C GLU A 56 -2.223 13.604 -4.851 1.00 0.00 C
ATOM 250 O GLU A 56 -3.264 13.114 -5.279 1.00 0.00 O
ATOM 251 CB GLU A 56 0.157 12.958 -5.566 1.00 0.00 C
ATOM 252 CG GLU A 56 -0.193 12.603 -7.019 1.00 0.00 C
ATOM 253 CD GLU A 56 1.024 12.800 -7.922 1.00 0.00 C
ATOM 254 OE1 GLU A 56 1.230 13.954 -8.360 1.00 0.00 O
ATOM 255 OE2 GLU A 56 1.741 11.799 -8.145 1.00 0.00 O
ATOM 256 H GLU A 56 -1.099 10.722 -5.214 1.00 0.00 H
ATOM 257 HA GLU A 56 -0.600 13.072 -3.579 1.00 0.00 H
ATOM 258 HB2 GLU A 56 0.469 14.002 -5.528 1.00 0.00 H
ATOM 259 HB3 GLU A 56 1.011 12.351 -5.259 1.00 0.00 H
ATOM 260 HG2 GLU A 56 -0.517 11.563 -7.078 1.00 0.00 H
ATOM 261 HG3 GLU A 56 -1.006 13.242 -7.367 1.00 0.00 H
HETATM 262 N NH2 A 57 -2.135 14.910 -4.631 1.00 0.00 N
HETATM 263 HN1 NH2 A 57 -1.284 15.328 -4.292 1.00 0.00 H
HETATM 264 HN2 NH2 A 57 -2.961 15.457 -4.808 1.00 0.00 H
...@@ -59,7 +59,7 @@ def cuda_extension(): ...@@ -59,7 +59,7 @@ def cuda_extension():
return CUDAExtension( return CUDAExtension(
name='torchani.cuaev', name='torchani.cuaev',
pkg='torchani.cuaev', pkg='torchani.cuaev',
sources=glob.glob('torchani/cuaev/*'), sources=glob.glob('torchani/cuaev/*.cu'),
include_dirs=maybe_download_cub(), include_dirs=maybe_download_cub(),
extra_compile_args={'cxx': ['-std=c++14'], 'nvcc': nvcc_args}) extra_compile_args={'cxx': ['-std=c++14'], 'nvcc': nvcc_args})
......
import os
import torch
import torchani import torchani
import unittest import unittest
import torch import pickle
import os
from torchani.testing import TestCase, make_tensor from torchani.testing import TestCase, make_tensor
path = os.path.dirname(os.path.realpath(__file__))
skipIfNoGPU = unittest.skipIf(not torch.cuda.is_available(), skipIfNoGPU = unittest.skipIf(not torch.cuda.is_available(),
'There is no device to run this test') 'There is no device to run this test')
skipIfNoCUAEV = unittest.skipIf(not torchani.aev.has_cuaev, "only valid when cuaev is installed")
@unittest.skipIf(not torchani.aev.has_cuaev, "only valid when cuaev is installed") @skipIfNoCUAEV
class TestCUAEVNoGPU(TestCase): class TestCUAEVNoGPU(TestCase):
def testSimple(self): def testSimple(self):
...@@ -29,11 +34,65 @@ class TestCUAEVNoGPU(TestCase): ...@@ -29,11 +34,65 @@ class TestCUAEVNoGPU(TestCase):
self.assertIn("cuaev::cuComputeAEV", str(s.graph_for((species, coordinates)))) self.assertIn("cuaev::cuComputeAEV", str(s.graph_for((species, coordinates))))
@unittest.skipIf(not torchani.aev.has_cuaev, "only valid when cuaev is installed")
@skipIfNoGPU @skipIfNoGPU
@skipIfNoCUAEV
class TestCUAEV(TestCase): class TestCUAEV(TestCase):
def testHello(self):
pass def setUp(self):
self.tolerance = 5e-5
self.device = 'cuda'
Rcr = 5.2000e+00
Rca = 3.5000e+00
EtaR = torch.tensor([1.6000000e+01], device=self.device)
ShfR = torch.tensor([9.0000000e-01, 1.1687500e+00, 1.4375000e+00, 1.7062500e+00, 1.9750000e+00, 2.2437500e+00, 2.5125000e+00, 2.7812500e+00, 3.0500000e+00, 3.3187500e+00, 3.5875000e+00, 3.8562500e+00, 4.1250000e+00, 4.3937500e+00, 4.6625000e+00, 4.9312500e+00], device=self.device)
Zeta = torch.tensor([3.2000000e+01], device=self.device)
ShfZ = torch.tensor([1.9634954e-01, 5.8904862e-01, 9.8174770e-01, 1.3744468e+00, 1.7671459e+00, 2.1598449e+00, 2.5525440e+00, 2.9452431e+00], device=self.device)
EtaA = torch.tensor([8.0000000e+00], device=self.device)
ShfA = torch.tensor([9.0000000e-01, 1.5500000e+00, 2.2000000e+00, 2.8500000e+00], device=self.device)
num_species = 4
self.aev_computer = torchani.AEVComputer(Rcr, Rca, EtaR, ShfR, EtaA, Zeta, ShfA, ShfZ, num_species)
self.cuaev_computer = torchani.AEVComputer(Rcr, Rca, EtaR, ShfR, EtaA, Zeta, ShfA, ShfZ, num_species, use_cuda_extension=True)
def testSimple(self):
coordinates = torch.tensor([
[[0.03192167, 0.00638559, 0.01301679],
[-0.83140486, 0.39370209, -0.26395324],
[-0.66518241, -0.84461308, 0.20759389],
[0.45554739, 0.54289633, 0.81170881],
[0.66091919, -0.16799635, -0.91037834]],
[[-4.1862600, 0.0575700, -0.0381200],
[-3.1689400, 0.0523700, 0.0200000],
[-4.4978600, 0.8211300, 0.5604100],
[-4.4978700, -0.8000100, 0.4155600],
[0.00000000, -0.00000000, -0.00000000]]
], requires_grad=True, device=self.device)
species = torch.tensor([[1, 0, 0, 0, 0], [2, 0, 0, 0, -1]], device=self.device)
_, aev = self.aev_computer((species, coordinates))
_, cu_aev = self.cuaev_computer((species, coordinates))
self.assertEqual(cu_aev, aev)
def testTripeptideMD(self):
for i in range(100):
datafile = os.path.join(path, 'test_data/tripeptide-md/{}.dat'.format(i))
with open(datafile, 'rb') as f:
coordinates, species, _, _, _, _, _, _ = pickle.load(f)
coordinates = torch.from_numpy(coordinates).float().unsqueeze(0).to(self.device)
species = torch.from_numpy(species).unsqueeze(0).to(self.device)
_, aev = self.aev_computer((species, coordinates))
_, cu_aev = self.cuaev_computer((species, coordinates))
self.assertEqual(cu_aev, aev)
def testNIST(self):
datafile = os.path.join(path, 'test_data/NIST/all')
with open(datafile, 'rb') as f:
data = pickle.load(f)
for coordinates, species, _, _, _, _ in data:
coordinates = torch.from_numpy(coordinates).to(torch.float).to(self.device)
species = torch.from_numpy(species).to(self.device)
_, aev = self.aev_computer((species, coordinates))
_, cu_aev = self.cuaev_computer((species, coordinates))
self.assertEqual(cu_aev, aev)
if __name__ == '__main__': if __name__ == '__main__':
......
import time
import torch
import torchani
import pynvml
import gc
import os
from ase.io import read
import argparse
def checkgpu(device=None):
i = device if device else torch.cuda.current_device()
real_i = int(os.environ['CUDA_VISIBLE_DEVICES'][0]) if 'CUDA_VISIBLE_DEVICES' in os.environ else i
pynvml.nvmlInit()
h = pynvml.nvmlDeviceGetHandleByIndex(real_i)
info = pynvml.nvmlDeviceGetMemoryInfo(h)
name = pynvml.nvmlDeviceGetName(h)
print(' GPU Memory Used (nvidia-smi): {:7.1f}MB / {:.1f}MB ({})'.format(info.used / 1024 / 1024, info.total / 1024 / 1024, name.decode()))
def alert(text):
print('\033[91m{}\33[0m'.format(text)) # red
def info(text):
print('\033[32m{}\33[0m'.format(text)) # green
def benchmark(speciesPositions, aev_comp, N, check_gpu_mem):
torch.cuda.empty_cache()
gc.collect()
torch.cuda.synchronize()
start = time.time()
for i in range(N):
aev = aev_comp(speciesPositions).aevs
if i == 2 and check_gpu_mem:
checkgpu()
torch.cuda.synchronize()
delta = time.time() - start
print(f' Duration: {delta:.2f} s')
print(f' Speed: {delta/N*1000:.2f} ms/it')
return aev, delta
def check_speedup_error(aev, aev_ref, speed, speed_ref):
speedUP = speed_ref / speed
if speedUP > 1:
info(f' Speed up: {speedUP:.2f} X\n')
else:
alert(f' Speed up (slower): {speedUP:.2f} X\n')
aev_error = torch.max(torch.abs(aev - aev_ref))
assert aev_error < 0.02, f' Error: {aev_error:.1e}\n'
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-c', '--check_gpu_mem',
dest='check_gpu_mem',
action='store_const',
const=1)
parser.set_defaults(check_gpu_mem=0)
parser = parser.parse_args()
path = os.path.dirname(os.path.realpath(__file__))
check_gpu_mem = parser.check_gpu_mem
device = torch.device('cuda')
files = ['small.pdb', '1hz5.pdb', '6W8H.pdb']
for file in files:
datafile = os.path.join(path, f'../dataset/pdb/{file}')
mol = read(datafile)
species = torch.tensor([mol.get_atomic_numbers()], device=device)
positions = torch.tensor([mol.get_positions()], dtype=torch.float32, requires_grad=False, device=device)
print(f'File: {file}, Molecule size: {species.shape[-1]}\n')
nnp = torchani.models.ANI2x(periodic_table_index=True, model_index=None).to(device)
speciesPositions = nnp.species_converter((species, positions))
aev_computer = nnp.aev_computer
N = 500
print('Original TorchANI:')
aev_ref, delta_ref = benchmark(speciesPositions, aev_computer, N, check_gpu_mem)
print()
print('CUaev:')
nnp.aev_computer.use_cuda_extension = True
cuaev_computer = nnp.aev_computer
aev, delta = benchmark(speciesPositions, cuaev_computer, N, check_gpu_mem)
check_speedup_error(aev, aev_ref, delta, delta_ref)
print('-' * 70 + '\n')
import torch
import torchani
import time
import timeit
import argparse
import pkbar
import gc
import pynvml
import os
from torchani.units import hartree2kcalmol
def build_network():
H_network = torch.nn.Sequential(
torch.nn.Linear(384, 160),
torch.nn.CELU(0.1),
torch.nn.Linear(160, 128),
torch.nn.CELU(0.1),
torch.nn.Linear(128, 96),
torch.nn.CELU(0.1),
torch.nn.Linear(96, 1)
)
C_network = torch.nn.Sequential(
torch.nn.Linear(384, 144),
torch.nn.CELU(0.1),
torch.nn.Linear(144, 112),
torch.nn.CELU(0.1),
torch.nn.Linear(112, 96),
torch.nn.CELU(0.1),
torch.nn.Linear(96, 1)
)
N_network = torch.nn.Sequential(
torch.nn.Linear(384, 128),
torch.nn.CELU(0.1),
torch.nn.Linear(128, 112),
torch.nn.CELU(0.1),
torch.nn.Linear(112, 96),
torch.nn.CELU(0.1),
torch.nn.Linear(96, 1)
)
O_network = torch.nn.Sequential(
torch.nn.Linear(384, 128),
torch.nn.CELU(0.1),
torch.nn.Linear(128, 112),
torch.nn.CELU(0.1),
torch.nn.Linear(112, 96),
torch.nn.CELU(0.1),
torch.nn.Linear(96, 1)
)
return [H_network, C_network, N_network, O_network]
def checkgpu(device=None):
i = device if device else torch.cuda.current_device()
t = torch.cuda.get_device_properties(i).total_memory
c = torch.cuda.memory_reserved(i)
name = torch.cuda.get_device_properties(i).name
print(' GPU Memory Cached (pytorch) : {:7.1f}MB / {:.1f}MB ({})'.format(c / 1024 / 1024, t / 1024 / 1024, name))
real_i = int(os.environ['CUDA_VISIBLE_DEVICES'][0]) if 'CUDA_VISIBLE_DEVICES' in os.environ else i
pynvml.nvmlInit()
h = pynvml.nvmlDeviceGetHandleByIndex(real_i)
info = pynvml.nvmlDeviceGetMemoryInfo(h)
name = pynvml.nvmlDeviceGetName(h)
print(' GPU Memory Used (nvidia-smi): {:7.1f}MB / {:.1f}MB ({})'.format(info.used / 1024 / 1024, info.total / 1024 / 1024, name.decode()))
def alert(text):
print('\033[91m{}\33[0m'.format(text)) # red
def sync_cuda(sync):
if sync:
torch.cuda.synchronize()
def benchmark(parser, dataset, use_cuda_extension, force_training=False):
synchronize = True if parser.synchronize else False
timers = {}
def time_func(key, func):
timers[key] = 0
def wrapper(*args, **kwargs):
start = timeit.default_timer()
ret = func(*args, **kwargs)
if synchronize:
torch.cuda.synchronize()
end = timeit.default_timer()
timers[key] += end - start
return ret
return wrapper
Rcr = 5.2000e+00
Rca = 3.5000e+00
EtaR = torch.tensor([1.6000000e+01], device=parser.device)
ShfR = torch.tensor([9.0000000e-01, 1.1687500e+00, 1.4375000e+00, 1.7062500e+00, 1.9750000e+00, 2.2437500e+00, 2.5125000e+00, 2.7812500e+00, 3.0500000e+00, 3.3187500e+00, 3.5875000e+00, 3.8562500e+00, 4.1250000e+00, 4.3937500e+00, 4.6625000e+00, 4.9312500e+00], device=parser.device)
Zeta = torch.tensor([3.2000000e+01], device=parser.device)
ShfZ = torch.tensor([1.9634954e-01, 5.8904862e-01, 9.8174770e-01, 1.3744468e+00, 1.7671459e+00, 2.1598449e+00, 2.5525440e+00, 2.9452431e+00], device=parser.device)
EtaA = torch.tensor([8.0000000e+00], device=parser.device)
ShfA = torch.tensor([9.0000000e-01, 1.5500000e+00, 2.2000000e+00, 2.8500000e+00], device=parser.device)
num_species = 4
aev_computer = torchani.AEVComputer(Rcr, Rca, EtaR, ShfR, EtaA, Zeta, ShfA, ShfZ, num_species, use_cuda_extension)
nn = torchani.ANIModel(build_network())
model = torch.nn.Sequential(aev_computer, nn).to(parser.device)
optimizer = torch.optim.Adam(model.parameters(), lr=0.000001)
mse = torch.nn.MSELoss(reduction='none')
# enable timers
torchani.aev.cutoff_cosine = time_func('torchani.aev.cutoff_cosine', torchani.aev.cutoff_cosine)
torchani.aev.radial_terms = time_func('torchani.aev.radial_terms', torchani.aev.radial_terms)
torchani.aev.angular_terms = time_func('torchani.aev.angular_terms', torchani.aev.angular_terms)
torchani.aev.compute_shifts = time_func('torchani.aev.compute_shifts', torchani.aev.compute_shifts)
torchani.aev.neighbor_pairs = time_func('torchani.aev.neighbor_pairs', torchani.aev.neighbor_pairs)
torchani.aev.neighbor_pairs_nopbc = time_func('torchani.aev.neighbor_pairs_nopbc', torchani.aev.neighbor_pairs_nopbc)
torchani.aev.triu_index = time_func('torchani.aev.triu_index', torchani.aev.triu_index)
torchani.aev.cumsum_from_zero = time_func('torchani.aev.cumsum_from_zero', torchani.aev.cumsum_from_zero)
torchani.aev.triple_by_molecule = time_func('torchani.aev.triple_by_molecule', torchani.aev.triple_by_molecule)
torchani.aev.compute_aev = time_func('torchani.aev.compute_aev', torchani.aev.compute_aev)
model[0].forward = time_func('total', model[0].forward)
model[1].forward = time_func('forward', model[1].forward)
optimizer.step = time_func('optimizer.step', optimizer.step)
print('=> start training')
start = time.time()
loss_time = 0
for epoch in range(0, parser.num_epochs):
print('Epoch: %d/%d' % (epoch + 1, parser.num_epochs))
progbar = pkbar.Kbar(target=len(dataset) - 1, width=8)
for i, properties in enumerate(dataset):
species = properties['species'].to(parser.device)
coordinates = properties['coordinates'].to(parser.device).float().requires_grad_(force_training)
true_energies = properties['energies'].to(parser.device).float()
num_atoms = (species >= 0).sum(dim=1, dtype=true_energies.dtype)
_, predicted_energies = model((species, coordinates))
# TODO add sync after aev is done
sync_cuda(synchronize)
energy_loss = (mse(predicted_energies, true_energies) / num_atoms.sqrt()).mean()
if force_training:
force_coefficient = 0.1
true_forces = properties['forces'].to(parser.device).float()
try:
forces = -torch.autograd.grad(predicted_energies.sum(), coordinates, create_graph=True, retain_graph=True)[0]
except Exception as e:
alert('Error: {}'.format(e))
return
force_loss = (mse(true_forces, forces).sum(dim=(1, 2)) / num_atoms).mean()
loss = energy_loss + force_coefficient * force_loss
else:
loss = energy_loss
rmse = hartree2kcalmol((mse(predicted_energies, true_energies)).mean()).detach().cpu().numpy()
sync_cuda(synchronize)
loss_start = time.time()
loss.backward()
sync_cuda(synchronize)
loss_stop = time.time()
loss_time += loss_stop - loss_start
optimizer.step()
sync_cuda(synchronize)
progbar.update(i, values=[("rmse", rmse)])
checkgpu()
sync_cuda(synchronize)
stop = time.time()
print('=> More detail about benchmark PER EPOCH')
for k in timers:
if k.startswith('torchani.'):
print(' {} - {:.1f}s'.format(k, timers[k] / parser.num_epochs))
total_time = (stop - start) / parser.num_epochs
loss_time = loss_time / parser.num_epochs
opti_time = timers['optimizer.step'] / parser.num_epochs
forward_time = timers['forward'] / parser.num_epochs
aev_time = timers['total'] / parser.num_epochs
print('Total AEV - {:.1f}s'.format(aev_time))
print('Forward - {:.1f}s'.format(forward_time))
print('Backward - {:.1f}s'.format(loss_time))
print('Optimizer - {:.1f}s'.format(opti_time))
print('Others - {:.1f}s'.format(total_time - loss_time - aev_time - forward_time - opti_time))
print('Epoch time - {:.1f}s'.format(total_time))
if __name__ == "__main__":
# parse command line arguments
parser = argparse.ArgumentParser()
parser.add_argument('dataset_path',
help='Path of the dataset, can a hdf5 file \
or a directory containing hdf5 files')
parser.add_argument('-d', '--device',
help='Device of modules and tensors',
default=('cuda' if torch.cuda.is_available() else 'cpu'))
parser.add_argument('-b', '--batch_size',
help='Number of conformations of each batch',
default=2560, type=int)
parser.add_argument('-y', '--synchronize',
action='store_true',
help='whether to insert torch.cuda.synchronize() at the end of each function')
parser.add_argument('-n', '--num_epochs',
help='epochs',
default=1, type=int)
parser = parser.parse_args()
print('=> loading dataset...')
shifter = torchani.EnergyShifter(None)
# parser.batch_size = 1280
dataset = torchani.data.load(parser.dataset_path, additional_properties=('forces',)).subtract_self_energies(shifter).species_to_indices()
print('=> Caching shuffled dataset...')
dataset_shuffled = list(dataset.shuffle().collate(parser.batch_size))
print('=> Caching non-shuffled dataset...')
dataset = list(dataset.collate(parser.batch_size))
print("=> CUDA info:")
devices = torch.cuda.device_count()
print('Total devices: {}'.format(devices))
for i in range(devices):
d = 'cuda:{}'.format(i)
print('{}: {}'.format(i, torch.cuda.get_device_name(d)))
print(' {}'.format(torch.cuda.get_device_properties(i)))
checkgpu(i)
print("\n\n=> Test 1/8: Shuffled Dataset, USE cuda extension, Energy training")
torch.cuda.empty_cache()
gc.collect()
benchmark(parser, dataset_shuffled, use_cuda_extension=True, force_training=False)
print("\n\n=> Test 2/8: Shuffled Dataset, NO cuda extension, Energy training")
torch.cuda.empty_cache()
gc.collect()
benchmark(parser, dataset_shuffled, use_cuda_extension=False, force_training=False)
print("\n\n=> Test 3/8: Non-Shuffled Dataset, USE cuda extension, Energy training")
torch.cuda.empty_cache()
gc.collect()
benchmark(parser, dataset, use_cuda_extension=True, force_training=False)
print("\n\n=> Test 4/8: Non-Shuffled Dataset, NO cuda extension, Energy training")
torch.cuda.empty_cache()
gc.collect()
benchmark(parser, dataset, use_cuda_extension=False, force_training=False)
print("\n\n=> Test 5/8: Shuffled Dataset, USE cuda extension, Force and Energy training")
torch.cuda.empty_cache()
gc.collect()
benchmark(parser, dataset_shuffled, use_cuda_extension=True, force_training=True)
print("\n\n=> Test 6/8: Shuffled Dataset, NO cuda extension, Force and Energy training")
torch.cuda.empty_cache()
gc.collect()
benchmark(parser, dataset_shuffled, use_cuda_extension=False, force_training=True)
print("\n\n=> Test 7/8: Non-Shuffled Dataset, USE cuda extension, Force and Energy training")
torch.cuda.empty_cache()
gc.collect()
benchmark(parser, dataset, use_cuda_extension=True, force_training=True)
print("\n\n=> Test 8/8: Non-Shuffled Dataset, NO cuda extension, Force and Energy training")
torch.cuda.empty_cache()
gc.collect()
benchmark(parser, dataset, use_cuda_extension=False, force_training=True)
...@@ -359,6 +359,7 @@ class AEVComputer(torch.nn.Module): ...@@ -359,6 +359,7 @@ class AEVComputer(torch.nn.Module):
ShfZ (:class:`torch.Tensor`): The 1D tensor of :math:`\theta_s` in ShfZ (:class:`torch.Tensor`): The 1D tensor of :math:`\theta_s` in
equation (4) in the `ANI paper`_. equation (4) in the `ANI paper`_.
num_species (int): Number of supported atom types. num_species (int): Number of supported atom types.
use_cuda_extension (bool): Whether to use cuda extension for faster calculation (needs cuaev installed).
.. _ANI paper: .. _ANI paper:
http://pubs.rsc.org/en/Content/ArticleLanding/2017/SC/C6SC05720A#!divAbstract http://pubs.rsc.org/en/Content/ArticleLanding/2017/SC/C6SC05720A#!divAbstract
......
# CUAEV
CUDA Extension for AEV calculation.
Performance improvement is expected to be ~3X for AEV computation and ~1.5X for overall training workflow.
## Install
In most cases, if `gcc` and `cuda` environment are well configured, runing the following command at `torchani` directory will install torchani and cuaev together.
```bash
git clone git@github.com:aiqm/torchani.git
cd torchani
# install by
python setup.py install --cuaev
# or for development
pip install -e . --global-option="--cuaev"
```
Notes for install on Hipergator
```bash
srun -p gpu --gpus=geforce:1 --time=01:00:00 --mem=10gb --pty -u bash -i # compile may fail because of low on memery (when memery is less than 5gb)
conda install pytorch torchvision cudatoolkit=10.0 -c pytorch # make sure it's cudatoolkit=10.0
module load cuda/10.0.130
module load gcc/7.3.0
python setup.py install --cuaev
```
## Usage
Pass `use_cuda_extension=True` when construct aev_computer, for example:
```python
cuaev_computer = torchani.AEVComputer(Rcr, Rca, EtaR, ShfR, EtaA, Zeta, ShfA, ShfZ, num_species, use_cuda_extension=True)
```
## Limitations
Current implementation of CUAEV does not support pbc and force calculation.
## Benchmark
Benchmark of [torchani/tools/training-aev-benchmark.py](https://github.com/aiqm/torchani/tree/master/torchani/tools/training-aev-benchmark.py) on RTX 2080 Ti:
| ANI-1x | Without Shuffle | Shuffle |
|:-----------------------:|:-----------------------:|:-----------------------:|
| Time per Epoch / Memory | AEV / Total / GPU Mem | AEV / Total/ GPU Mem |
| aev cuda extension | 7.7s / 26.3s / 2289 MB | 8.5s / 27.6s / 2425 MB |
| aev python code | 21.1s / 40.0s / 7361 MB | 28.7s / 47.8s / 3475 MB |
| improvements | 2.74 / 1.52 / 3.22 | 3.38 / 1.73 / 1.43 |
## Test
```bash
cd torchani
python tools/training-aev-benchmark.py download/dataset/ani-1x/sample.h5 -y
python tests/test_cuaev.py
```
#include <torch/extension.h> #include <cub/cub.cuh>
#include <thrust/equal.h>
#include <ATen/Context.h> #include <torch/extension.h>
#include <c10/cuda/CUDACachingAllocator.h>
#include <ATen/Context.h>
__global__ void run() { printf("Hello World"); } #include <THC/THC.h>
#include <THC/THCThrustAllocator.cuh>
template <typename ScalarRealT = float> #include <c10/cuda/CUDACachingAllocator.h>
torch::Tensor cuComputeAEV(torch::Tensor coordinates_t, torch::Tensor species_t,
double Rcr_, double Rca_, torch::Tensor EtaR_t, #define PI 3.141592653589793
torch::Tensor ShfR_t, torch::Tensor EtaA_t,
torch::Tensor Zeta_t, torch::Tensor ShfA_t, template <typename DataT, typename IndexT = int> struct AEVScalarParams {
torch::Tensor ShfZ_t, int64_t num_species_) { DataT Rcr;
ScalarRealT Rcr = Rcr_; DataT Rca;
ScalarRealT Rca = Rca_;
int num_species = num_species_; IndexT radial_sublength;
if (species_t.numel() == 0) { IndexT radial_length;
return coordinates_t; IndexT angular_sublength;
} IndexT angular_length;
IndexT num_species;
cudaStream_t stream = at::cuda::getCurrentCUDAStream(); };
run<<<1, 1, 0, stream>>>();
return coordinates_t; #define MAX_NSPECIES 10
} __constant__ int csubaev_offsets[MAX_NSPECIES * MAX_NSPECIES];
TORCH_LIBRARY(cuaev, m) { m.def("cuComputeAEV", &cuComputeAEV<float>); } template <typename DataT> struct PairDist {
DataT Rij;
PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {} int midx;
short i;
short j;
};
// used to group Rijs by atom id
template <typename DataT>
__host__ __device__ bool operator==(const PairDist<DataT> &lhs,
const PairDist<DataT> &rhs) {
return lhs.midx == rhs.midx && lhs.i == rhs.i;
}
/// Alignment of memory. Must be a power of two
/// \tparam boundary Boundary to align to (NOTE: must be power of 2)
/// \param value Input value that is to be aligned
/// \return Value aligned to boundary
template <int32_t boundary>
__host__ __device__ __forceinline__ int align(const int &value) {
static_assert((boundary & (boundary - 1)) == 0,
"Boundary for align must be power of 2");
return (value + boundary) & ~(boundary - 1);
}
template <typename SpeciesT, typename DataT, typename IndexT = int>
__global__ void pairwiseDistance(
torch::PackedTensorAccessor32<SpeciesT, 2, torch::RestrictPtrTraits>
species_t,
torch::PackedTensorAccessor32<DataT, 3, torch::RestrictPtrTraits> pos_t,
PairDist<DataT> *d_Rij, IndexT max_natoms_per_mol) {
extern __shared__ DataT spos[];
DataT *sx = &spos[0];
DataT *sy = &spos[max_natoms_per_mol];
DataT *sz = &spos[2 * max_natoms_per_mol];
int mol_idx = blockIdx.x;
int tidx = threadIdx.y * blockDim.x + threadIdx.x;
for (int i = tidx; i < max_natoms_per_mol; i += blockDim.x * blockDim.y) {
sx[i] = pos_t[mol_idx][i][0];
sy[i] = pos_t[mol_idx][i][1];
sz[i] = pos_t[mol_idx][i][2];
}
__syncthreads();
int natom_pairs = max_natoms_per_mol * max_natoms_per_mol;
for (int i = threadIdx.y; i < max_natoms_per_mol; i += blockDim.y) {
SpeciesT type_i = species_t[mol_idx][i];
DataT xi = sx[i];
DataT yi = sy[i];
DataT zi = sz[i];
for (int j = threadIdx.x; j < max_natoms_per_mol; j += blockDim.x) {
SpeciesT type_j = species_t[mol_idx][j];
const DataT xj = sx[j];
const DataT yj = sy[j];
const DataT zj = sz[j];
const DataT delx = xj - xi;
const DataT dely = yj - yi;
const DataT delz = zj - zi;
const DataT Rsq = delx * delx + dely * dely + delz * delz;
if (type_i != -1 && type_j != -1 && i != j) {
DataT Rij = sqrt(Rsq);
PairDist<DataT> d;
d.Rij = Rij;
d.midx = mol_idx;
d.i = i;
d.j = j;
d_Rij[mol_idx * natom_pairs + i * max_natoms_per_mol + j] = d;
}
}
}
}
template <typename SpeciesT, typename DataT, typename IndexT = int,
int TILEX = 8, int TILEY = 4>
__global__ void cuAngularAEVs(
torch::PackedTensorAccessor32<SpeciesT, 2, torch::RestrictPtrTraits>
species_t,
torch::PackedTensorAccessor32<DataT, 3, torch::RestrictPtrTraits> pos_t,
torch::PackedTensorAccessor32<DataT, 1, torch::RestrictPtrTraits> ShfA_t,
torch::PackedTensorAccessor32<DataT, 1, torch::RestrictPtrTraits> ShfZ_t,
torch::PackedTensorAccessor32<DataT, 1, torch::RestrictPtrTraits> EtaA_t,
torch::PackedTensorAccessor32<DataT, 1, torch::RestrictPtrTraits> Zeta_t,
torch::PackedTensorAccessor32<DataT, 3, torch::RestrictPtrTraits> aev_t,
PairDist<DataT> *d_Rij, PairDist<DataT> *d_centralAtom,
int *d_nPairsPerCenterAtom, int *d_centerAtomStartIdx,
AEVScalarParams<DataT, IndexT> aev_params, int maxnbrs_per_atom_aligned,
int angular_length_aligned, int ncentral_atoms) {
extern __shared__ DataT smem[];
int threads_per_catom = TILEX * TILEY;
int gIdx = blockIdx.x * blockDim.x + threadIdx.x;
int cIdx = gIdx / threads_per_catom; // central atom id
if (cIdx >= ncentral_atoms)
return;
int groupIdx = threadIdx.x / threads_per_catom;
int laneIdx = threadIdx.x % threads_per_catom;
int ncatom_per_tpb = blockDim.x / threads_per_catom;
DataT *saev = &smem[groupIdx * angular_length_aligned];
int offset = ncatom_per_tpb * angular_length_aligned;
DataT *sdx = &smem[offset + groupIdx * maxnbrs_per_atom_aligned];
offset += ncatom_per_tpb * maxnbrs_per_atom_aligned;
DataT *sdy = &smem[offset + groupIdx * maxnbrs_per_atom_aligned];
offset += ncatom_per_tpb * maxnbrs_per_atom_aligned;
DataT *sdz = &smem[offset + groupIdx * maxnbrs_per_atom_aligned];
offset += ncatom_per_tpb * maxnbrs_per_atom_aligned;
DataT *sdist = &smem[offset + groupIdx * maxnbrs_per_atom_aligned];
offset += ncatom_per_tpb * maxnbrs_per_atom_aligned;
DataT *sfc = &smem[offset + groupIdx * maxnbrs_per_atom_aligned];
offset += ncatom_per_tpb * maxnbrs_per_atom_aligned;
int *stype = (int *)&smem[offset + groupIdx * maxnbrs_per_atom_aligned];
DataT EtaA = EtaA_t[0];
DataT Zeta = Zeta_t[0];
IndexT nShfA = ShfA_t.size(0);
IndexT nShfZ = ShfZ_t.size(0);
DataT Rca = aev_params.Rca;
IndexT num_species = aev_params.num_species;
PairDist<DataT> d = d_centralAtom[cIdx];
int start_idx = d_centerAtomStartIdx[cIdx];
int jnum = d_nPairsPerCenterAtom[cIdx];
// center atom
int i = d.i;
int mol_idx = d.midx;
for (int iaev = laneIdx; iaev < aev_params.angular_length;
iaev += threads_per_catom) {
saev[iaev] = 0;
}
DataT xi = pos_t[mol_idx][i][0];
DataT yi = pos_t[mol_idx][i][1];
DataT zi = pos_t[mol_idx][i][2];
for (int jj = laneIdx; jj < jnum; jj += threads_per_catom) {
PairDist<DataT> dij = d_Rij[start_idx + jj];
int j = dij.j;
DataT Rij = dij.Rij;
SpeciesT type_j = species_t[mol_idx][j];
sdx[jj] = pos_t[mol_idx][j][0] - xi;
sdy[jj] = pos_t[mol_idx][j][1] - yi;
sdz[jj] = pos_t[mol_idx][j][2] - zi;
stype[jj] = type_j;
sdist[jj] = Rij;
DataT fc_ij = 0.5 * cos(PI * Rij / Rca) + 0.5;
sfc[jj] = fc_ij;
}
short2 tile = make_short2(laneIdx % TILEX, laneIdx / TILEX);
for (int jj = 0; jj < jnum; jj++) {
const DataT Rij = sdist[jj];
SpeciesT type_j = stype[jj];
DataT fc_ij = sfc[jj];
for (int kk_start = jj + 1; kk_start < jnum;
kk_start += threads_per_catom) {
int kk = kk_start + laneIdx;
DataT theta = 0;
if (kk < jnum) {
const DataT Rik = sdist[kk];
theta = acos(
0.95 * (sdx[jj] * sdx[kk] + sdy[jj] * sdy[kk] + sdz[jj] * sdz[kk]) /
(Rij * Rik));
}
for (int srcLane = 0; kk_start + srcLane < min(32, jnum); ++srcLane) {
int kk = kk_start + srcLane;
DataT theta_ijk = __shfl_sync(0xFFFFFFFF, theta, srcLane);
const DataT Rik = sdist[kk];
SpeciesT type_k = stype[kk];
DataT fc_ik = sfc[kk];
DataT Rijk = (Rij + Rik) / 2;
DataT fc_ijk = fc_ij * fc_ik;
IndexT subaev_offset = csubaev_offsets[type_j * num_species + type_k];
IndexT aev_offset = aev_params.radial_length + subaev_offset;
for (int itheta = tile.x; itheta < nShfZ; itheta += TILEX) {
DataT ShfZ = ShfZ_t[itheta];
DataT factor1 = pow((1 + cos(theta_ijk - ShfZ)) / 2, Zeta);
for (int ishfr = tile.y; ishfr < nShfA; ishfr += TILEY) {
DataT ShfA = ShfA_t[ishfr];
DataT factor2 = exp(-EtaA * (Rijk - ShfA) * (Rijk - ShfA));
DataT res = 2 * factor1 * factor2 * fc_ijk;
saev[subaev_offset + ishfr * nShfZ + itheta] += res;
}
}
}
}
}
for (int iaev = laneIdx; iaev < aev_params.angular_length;
iaev += threads_per_catom) {
aev_t[mol_idx][i][aev_params.radial_length + iaev] = saev[iaev];
}
}
template <typename SpeciesT, typename DataT, int THREADS_PER_RIJ>
__global__ void cuRadialAEVs(
torch::PackedTensorAccessor32<SpeciesT, 2, torch::RestrictPtrTraits>
species_t,
torch::PackedTensorAccessor32<DataT, 1, torch::RestrictPtrTraits> ShfR_t,
torch::PackedTensorAccessor32<DataT, 1, torch::RestrictPtrTraits> EtaR_t,
torch::PackedTensorAccessor32<DataT, 3, torch::RestrictPtrTraits> aev_t,
PairDist<DataT> *d_Rij, AEVScalarParams<DataT, int> aev_params,
int nRadialRij) {
int gidx = blockIdx.x * blockDim.x + threadIdx.x;
int idx = gidx / THREADS_PER_RIJ;
int nShfR = ShfR_t.size(0);
DataT EtaR = EtaR_t[0];
if (idx >= nRadialRij)
return;
int laneIdx = threadIdx.x % THREADS_PER_RIJ;
PairDist<DataT> d = d_Rij[idx];
DataT Rij = d.Rij;
int mol_idx = d.midx;
int i = d.i;
int j = d.j;
SpeciesT type_i = species_t[mol_idx][i];
SpeciesT type_j = species_t[mol_idx][j];
DataT fc = 0.5 * cos(PI * Rij / aev_params.Rcr) + 0.5;
for (int ishfr = laneIdx; ishfr < nShfR; ishfr += THREADS_PER_RIJ) {
DataT ShfR = ShfR_t[ishfr];
DataT GmR = 0.25 * exp(-EtaR * (Rij - ShfR) * (Rij - ShfR)) * fc;
atomicAdd(&aev_t[mol_idx][i][type_j * aev_params.radial_sublength + ishfr],
GmR);
}
}
template <typename DataT>
void cubScan(const DataT *d_in, DataT *d_out, int num_items,
cudaStream_t stream) {
auto &allocator = *c10::cuda::CUDACachingAllocator::get();
// Determine temporary device storage requirements
void *d_temp_storage = NULL;
size_t temp_storage_bytes = 0;
cub::DeviceScan::ExclusiveSum(d_temp_storage, temp_storage_bytes, d_in, d_out,
num_items, stream);
// Allocate temporary storage
auto buffer_tmp = allocator.allocate(temp_storage_bytes);
d_temp_storage = buffer_tmp.get();
// Run exclusive prefix sum
cub::DeviceScan::ExclusiveSum(d_temp_storage, temp_storage_bytes, d_in, d_out,
num_items, stream);
}
template <typename DataT, typename IndexT>
int cubEncode(const DataT *d_in, DataT *d_unique_out, IndexT *d_counts_out,
int num_items, int *d_num_runs_out, cudaStream_t stream) {
auto &allocator = *c10::cuda::CUDACachingAllocator::get();
// Determine temporary device storage requirements
void *d_temp_storage = NULL;
size_t temp_storage_bytes = 0;
cub::DeviceRunLengthEncode::Encode(d_temp_storage, temp_storage_bytes, d_in,
d_unique_out, d_counts_out, d_num_runs_out,
num_items, stream);
// Allocate temporary storage
auto buffer_tmp = allocator.allocate(temp_storage_bytes);
d_temp_storage = buffer_tmp.get();
// Run encoding
cub::DeviceRunLengthEncode::Encode(d_temp_storage, temp_storage_bytes, d_in,
d_unique_out, d_counts_out, d_num_runs_out,
num_items, stream);
int num_selected = 0;
cudaMemcpyAsync(&num_selected, d_num_runs_out, sizeof(int), cudaMemcpyDefault,
stream);
cudaStreamSynchronize(stream);
return num_selected;
}
template <typename DataT, typename LambdaOpT>
int cubDeviceSelect(const DataT *d_in, DataT *d_out, int num_items,
int *d_num_selected_out, LambdaOpT select_op,
cudaStream_t stream) {
auto &allocator = *c10::cuda::CUDACachingAllocator::get();
// Determine temporary device storage requirements
void *d_temp_storage = NULL;
size_t temp_storage_bytes = 0;
cub::DeviceSelect::If(d_temp_storage, temp_storage_bytes, d_in, d_out,
d_num_selected_out, num_items, select_op);
// Allocate temporary storage
auto buffer_tmp = allocator.allocate(temp_storage_bytes);
d_temp_storage = buffer_tmp.get();
// Run selection
cub::DeviceSelect::If(d_temp_storage, temp_storage_bytes, d_in, d_out,
d_num_selected_out, num_items, select_op, stream);
int num_selected = 0;
cudaMemcpyAsync(&num_selected, d_num_selected_out, sizeof(int),
cudaMemcpyDefault, stream);
cudaStreamSynchronize(stream);
return num_selected;
}
template <typename DataT>
DataT cubMax(const DataT *d_in, int num_items, DataT *d_out,
cudaStream_t stream) {
auto &allocator = *c10::cuda::CUDACachingAllocator::get();
// Determine temporary device storage requirements
void *d_temp_storage = NULL;
size_t temp_storage_bytes = 0;
cub::DeviceReduce::Max(d_temp_storage, temp_storage_bytes, d_in, d_out,
num_items, stream);
// Allocate temporary storage
auto buffer_tmp = allocator.allocate(temp_storage_bytes);
d_temp_storage = buffer_tmp.get();
// Run min-reduction
cub::DeviceReduce::Max(d_temp_storage, temp_storage_bytes, d_in, d_out,
num_items, stream);
int maxVal = 0;
cudaMemcpyAsync(&maxVal, d_out, sizeof(DataT), cudaMemcpyDefault, stream);
cudaStreamSynchronize(stream);
return maxVal;
}
void initConsts(AEVScalarParams<float> &aev_params, cudaStream_t stream) {
int num_species = aev_params.num_species;
assert(num_species <= MAX_NSPECIES);
// precompute the aev offsets and load to constand memory
int *subaev_offsets = new int[num_species * num_species];
for (int t = 0; t < num_species; ++t) {
int offset = 0;
for (int s = 0; s < num_species; s++) {
if (t < num_species - s) {
subaev_offsets[s * num_species + s + t] =
aev_params.angular_sublength * (offset + t);
subaev_offsets[(s + t) * num_species + s] =
aev_params.angular_sublength * (offset + t);
}
offset += num_species - s;
}
}
cudaMemcpyToSymbolAsync(csubaev_offsets, subaev_offsets,
sizeof(int) * num_species * num_species, 0,
cudaMemcpyDefault, stream);
delete[] subaev_offsets;
}
// NOTE: assumes size of EtaA_t = Zeta_t = EtaR_t = 1
template <typename ScalarRealT = float>
torch::Tensor cuComputeAEV(torch::Tensor coordinates_t, torch::Tensor species_t,
double Rcr_, double Rca_, torch::Tensor EtaR_t,
torch::Tensor ShfR_t, torch::Tensor EtaA_t,
torch::Tensor Zeta_t, torch::Tensor ShfA_t,
torch::Tensor ShfZ_t, int64_t num_species_) {
TORCH_CHECK((species_t.dtype() == torch::kInt32) &&
(coordinates_t.dtype() == torch::kFloat32),
"Unsupported input type");
TORCH_CHECK(EtaR_t.size(0) == 1 || EtaA_t.size(0) == 1 || Zeta_t.size(0) == 1,
"cuda extension is currently not supported for the specified "
"configuration");
ScalarRealT Rcr = Rcr_;
ScalarRealT Rca = Rca_;
int num_species = num_species_;
const int n_molecules = species_t.size(0);
const int max_natoms_per_mol = species_t.size(1);
AEVScalarParams<float> aev_params;
aev_params.Rca = Rca;
aev_params.Rcr = Rcr;
aev_params.num_species = num_species;
aev_params.radial_sublength = EtaR_t.size(0) * ShfR_t.size(0);
aev_params.radial_length = aev_params.radial_sublength * num_species;
aev_params.angular_sublength =
EtaA_t.size(0) * Zeta_t.size(0) * ShfA_t.size(0) * ShfZ_t.size(0);
aev_params.angular_length =
aev_params.angular_sublength * (num_species * (num_species + 1) / 2);
int aev_length = aev_params.radial_length + aev_params.angular_length;
auto aev_t = torch::zeros({n_molecules, max_natoms_per_mol, aev_length},
coordinates_t.options());
if (species_t.numel() == 0) {
return aev_t;
}
cudaStream_t stream = at::cuda::getCurrentCUDAStream();
auto thrust_allocator =
THCThrustAllocator(at::globalContext().lazyInitCUDA());
auto policy = thrust::cuda::par(thrust_allocator).on(stream);
auto &allocator = *c10::cuda::CUDACachingAllocator::get();
// precompute the aev offsets and load to constand memory
initConsts(aev_params, stream);
// buffer to store all the pairwise distance (Rij)
auto total_natom_pairs =
n_molecules * max_natoms_per_mol * max_natoms_per_mol;
auto buffer_Rij =
allocator.allocate(sizeof(PairDist<float>) * total_natom_pairs);
PairDist<float> *d_Rij = (PairDist<float> *)buffer_Rij.get();
// init all Rij to inf
PairDist<float> init;
init.Rij = std::numeric_limits<float>::infinity();
thrust::fill(policy, d_Rij, d_Rij + total_natom_pairs, init);
// buffer to store all the pairwise distance that is needed for Radial AEV
// computation
auto buffer_radialRij =
allocator.allocate(sizeof(PairDist<float>) * total_natom_pairs);
PairDist<float> *d_radialRij = (PairDist<float> *)buffer_radialRij.get();
auto buffer_count = allocator.allocate(sizeof(int));
int *d_count_out = (int *)buffer_count.get();
const int block_size = 64;
dim3 block(8, 8, 1);
// Compute pairwise distance (Rij) for all atom pairs in a molecule
pairwiseDistance<<<n_molecules, block, sizeof(float) * max_natoms_per_mol * 3,
stream>>>(
species_t.packed_accessor32<int, 2, torch::RestrictPtrTraits>(),
coordinates_t.packed_accessor32<float, 3, torch::RestrictPtrTraits>(),
d_Rij, max_natoms_per_mol);
// Extract Rijs that is needed for RadialAEV comptuation i.e. all the Rij <=
// Rcr
int nRadialRij = cubDeviceSelect(
d_Rij, d_radialRij, total_natom_pairs, d_count_out,
[=] __device__(const PairDist<float> d) { return d.Rij <= Rcr; }, stream);
int nblocks = (nRadialRij * 8 + block_size - 1) / block_size;
cuRadialAEVs<int, float, 8><<<nblocks, block_size, 0, stream>>>(
species_t.packed_accessor32<int, 2, torch::RestrictPtrTraits>(),
ShfR_t.packed_accessor32<float, 1, torch::RestrictPtrTraits>(),
EtaR_t.packed_accessor32<float, 1, torch::RestrictPtrTraits>(),
aev_t.packed_accessor32<float, 3, torch::RestrictPtrTraits>(),
d_radialRij, aev_params, nRadialRij);
// reuse buffer allocated for all Rij
// d_angularRij will store all the Rij required in Angular AEV computation
PairDist<float> *d_angularRij = d_Rij;
// Extract Rijs that is needed for AngularAEV comptuation i.e. all the Rij
// <= Rca
int nAngularRij = cubDeviceSelect(
d_radialRij, d_angularRij, nRadialRij, d_count_out,
[=] __device__(const PairDist<float> d) { return d.Rij <= Rca; }, stream);
auto buffer_centralAtom =
allocator.allocate(sizeof(PairDist<float>) * nAngularRij);
PairDist<float> *d_centralAtom = (PairDist<float> *)buffer_centralAtom.get();
auto buffer_numPairsPerCenterAtom =
allocator.allocate(sizeof(int) * nAngularRij);
int *d_numPairsPerCenterAtom = (int *)buffer_numPairsPerCenterAtom.get();
// group by center atom
int ncenter_atoms =
cubEncode(d_angularRij, d_centralAtom, d_numPairsPerCenterAtom,
nAngularRij, d_count_out, stream);
auto buffer_centerAtomStartIdx =
allocator.allocate(sizeof(int) * ncenter_atoms);
int *d_centerAtomStartIdx = (int *)buffer_centerAtomStartIdx.get();
cubScan(d_numPairsPerCenterAtom, d_centerAtomStartIdx, ncenter_atoms, stream);
{
const int nthreads_per_catom = 32;
const int nblocks_angAEV =
(ncenter_atoms * nthreads_per_catom + block_size - 1) / block_size;
auto smem_size = [&aev_params](int max_nbrs, int ncatom_per_tpb) {
int sm_aev = sizeof(float) * align<4>(aev_params.angular_length);
int sxyz = sizeof(float) * max_nbrs * 3;
int sRij = sizeof(float) * max_nbrs;
int sfc = sizeof(float) * max_nbrs;
int sj = sizeof(int) * max_nbrs;
return (sm_aev + sxyz + sRij + sfc + sj) * ncatom_per_tpb;
};
int maxNbrsPerCenterAtom =
cubMax(d_numPairsPerCenterAtom, ncenter_atoms, d_count_out, stream);
int maxnbrs_per_atom_aligned = align<4>(maxNbrsPerCenterAtom);
cuAngularAEVs<<<nblocks_angAEV, block_size,
smem_size(maxnbrs_per_atom_aligned,
block_size / nthreads_per_catom),
stream>>>(
species_t.packed_accessor32<int, 2, torch::RestrictPtrTraits>(),
coordinates_t.packed_accessor32<float, 3, torch::RestrictPtrTraits>(),
ShfA_t.packed_accessor32<float, 1, torch::RestrictPtrTraits>(),
ShfZ_t.packed_accessor32<float, 1, torch::RestrictPtrTraits>(),
EtaA_t.packed_accessor32<float, 1, torch::RestrictPtrTraits>(),
Zeta_t.packed_accessor32<float, 1, torch::RestrictPtrTraits>(),
aev_t.packed_accessor32<float, 3, torch::RestrictPtrTraits>(),
d_angularRij, d_centralAtom, d_numPairsPerCenterAtom,
d_centerAtomStartIdx, aev_params, maxnbrs_per_atom_aligned,
align<4>(aev_params.angular_length), ncenter_atoms);
}
return aev_t;
}
TORCH_LIBRARY(cuaev, m) { m.def("cuComputeAEV", &cuComputeAEV<float>); }
PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment