Skip to content

Instantly share code, notes, and snippets.

@Yoshanuikabundi
Last active September 27, 2022 10:19
Show Gist options
  • Save Yoshanuikabundi/66007cb9966b1455a259baaf7cd7e7c3 to your computer and use it in GitHub Desktop.
Save Yoshanuikabundi/66007cb9966b1455a259baaf7cd7e7c3 to your computer and use it in GitHub Desktop.
ptm_notebook
# Local conda environment
env
# Python and Jupyter stuff
__pycache__
.ipynb_checkpoints
# Notebook outputs
openff-2.0.0_ff14sb_fluorescein-5-maleimide.offxml
labeled.pdb
trajectory.dcd

Biopolymers with NCAAs in the OpenFF Toolkit

Binder

This notebook demonstrates loading and parametrizing biopolymers with the OpenFF Toolkit, including a preview of support for a non-canonical amino acid. We'll introduce the Toolkit's new biopolymer support, and then demonstrate a way to apply a post-translational modification. We'll look at optimizing charge generation by transferring charges generated from a simpler molecule to our new peptide, and then simulate it in OpenMM!

This notebook uses an experimental combination of force fields, and NCAA/PTM support is preliminary. Be careful using this code in production, and consider waiting for the Rosemary force field and dedicated API points for new amino acid residues.

Installation

This notebook is distributed with a Conda environment file. To install the dependencies to a temporary environment and run Jupyter from within this environment:

conda env create --prefix ./env --file environment.yml
conda run --prefix ./env --no-capture-output jupyter notebook ncaa_parametrization.ipynb

If environment.yml fails to solve, or the notebook doesn't run, the exact environment used to develop the notebook can be found in environment-solved.yml, though this may not work on all systems (especially those that do not use Linux).

The environment includes OpenEye for faster charge generation, but the notebook runs fine without it if you don't have access to a license.

Further reading

For more information, check out our docs at https://docs.openforcefield.org or contact support@openforcefield.org.

ATOM 1 C ACE 0 11.164 2.358 -4.917 1.00 0.00 C
ATOM 2 O ACE 0 10.758 3.301 -5.609 1.00 0.00 O
ATOM 3 CH3 ACE 0 10.454 1.022 -4.926 1.00 0.00 C
ATOM 4 1HH3 ACE 0 10.454 0.609 -5.924 1.00 0.00 H
ATOM 5 2HH3 ACE 0 10.955 0.332 -4.262 1.00 0.00 H
ATOM 6 3HH3 ACE 0 9.433 1.144 -4.597 1.00 0.00 H
ATOM 7 N ALA 1 12.208 2.518 -4.176 1.00 0.00 N
ATOM 8 CA ALA 1 12.884 3.812 -4.176 1.00 0.00 C
ATOM 9 C ALA 1 14.384 3.638 -4.176 1.00 0.00 C
ATOM 10 O ALA 1 15.118 4.272 -4.943 1.00 0.00 O
ATOM 11 CB ALA 1 12.376 4.604 -2.959 1.00 0.00 C
ATOM 12 H ALA 1 12.553 1.759 -3.605 1.00 0.00 H
ATOM 13 HA ALA 1 12.616 4.351 -5.104 1.00 0.00 H
ATOM 14 1HB ALA 1 11.280 4.754 -2.995 1.00 0.00 H
ATOM 15 2HB ALA 1 12.600 4.090 -2.004 1.00 0.00 H
ATOM 16 3HB ALA 1 12.832 5.609 -2.902 1.00 0.00 H
ATOM 17 N ALA 2 14.916 2.801 -3.351 1.00 0.00 N
ATOM 18 CA ALA 2 16.367 2.633 -3.351 1.00 0.00 C
ATOM 19 C ALA 2 16.864 2.232 -4.719 1.00 0.00 C
ATOM 20 O ALA 2 17.836 2.781 -5.251 1.00 0.00 O
ATOM 21 CB ALA 2 16.717 1.603 -2.264 1.00 0.00 C
ATOM 22 H ALA 2 14.339 2.271 -2.714 1.00 0.00 H
ATOM 23 HA ALA 2 16.835 3.604 -3.103 1.00 0.00 H
ATOM 24 1HB ALA 2 16.378 1.931 -1.263 1.00 0.00 H
ATOM 25 2HB ALA 2 16.249 0.618 -2.456 1.00 0.00 H
ATOM 26 3HB ALA 2 17.807 1.436 -2.191 1.00 0.00 H
ATOM 27 N ALA 3 16.256 1.287 -5.353 1.00 0.00 N
ATOM 28 CA ALA 3 16.737 0.900 -6.676 1.00 0.00 C
ATOM 29 C ALA 3 16.748 2.082 -7.615 1.00 0.00 C
ATOM 30 O ALA 3 17.721 2.341 -8.333 1.00 0.00 O
ATOM 31 CB ALA 3 15.848 -0.251 -7.177 1.00 0.00 C
ATOM 32 H ALA 3 15.460 0.823 -4.940 1.00 0.00 H
ATOM 33 HA ALA 3 17.781 0.545 -6.583 1.00 0.00 H
ATOM 34 1HB ALA 3 15.881 -1.123 -6.496 1.00 0.00 H
ATOM 35 2HB ALA 3 14.785 0.050 -7.263 1.00 0.00 H
ATOM 36 3HB ALA 3 16.164 -0.613 -8.172 1.00 0.00 H
ATOM 37 N ALA 4 15.710 2.846 -7.670 1.00 0.00 N
ATOM 38 CA ALA 4 15.721 3.990 -8.577 1.00 0.00 C
ATOM 39 C ALA 4 16.887 4.903 -8.283 1.00 0.00 C
ATOM 40 O ALA 4 17.622 5.338 -9.177 1.00 0.00 O
ATOM 41 CB ALA 4 14.362 4.699 -8.451 1.00 0.00 C
ATOM 42 H ALA 4 14.903 2.656 -7.094 1.00 0.00 H
ATOM 43 HA ALA 4 15.847 3.619 -9.612 1.00 0.00 H
ATOM 44 1HB ALA 4 13.522 4.026 -8.706 1.00 0.00 H
ATOM 45 2HB ALA 4 14.178 5.068 -7.423 1.00 0.00 H
ATOM 46 3HB ALA 4 14.287 5.570 -9.126 1.00 0.00 H
ATOM 47 N ALA 5 17.124 5.239 -7.060 1.00 0.00 N
ATOM 48 CA ALA 5 18.252 6.122 -6.775 1.00 0.00 C
ATOM 49 C ALA 5 19.542 5.535 -7.297 1.00 0.00 C
ATOM 50 O ALA 5 20.350 6.206 -7.950 1.00 0.00 O
ATOM 51 CB ALA 5 18.280 6.368 -5.257 1.00 0.00 C
ATOM 52 H ALA 5 16.539 4.897 -6.311 1.00 0.00 H
ATOM 53 HA ALA 5 18.091 7.081 -7.301 1.00 0.00 H
ATOM 54 1HB ALA 5 17.341 6.832 -4.899 1.00 0.00 H
ATOM 55 2HB ALA 5 18.414 5.429 -4.685 1.00 0.00 H
ATOM 56 3HB ALA 5 19.101 7.047 -4.965 1.00 0.00 H
ATOM 57 N DYE 6 19.809 4.297 -7.054 1.00 0.00 N
ATOM 58 CA DYE 6 21.056 3.729 -7.558 1.00 0.00 C
ATOM 59 C DYE 6 21.153 3.882 -9.057 1.00 0.00 C
ATOM 60 O DYE 6 22.180 4.302 -9.610 1.00 0.00 O
ATOM 61 H DYE 6 19.165 3.728 -6.523 1.00 0.00 H
ATOM 62 HA DYE 6 21.898 4.293 -7.115 1.00 0.00 H
ATOM 63 CB DYE 6 21.199 2.226 -7.282 1.00 0.00 C
ATOM 64 SG DYE 6 20.024 1.187 -8.189 1.00 0.00 S
ATOM 65 HB2 DYE 6 22.207 1.916 -7.555 1.00 0.00 H
ATOM 66 HB3 DYE 6 21.075 2.053 -6.212 1.00 0.00 H
ATOM 67 C1x DYE 6 20.255 -0.476 -7.442 1.00 0.00 C
ATOM 68 N1x DYE 6 20.611 -2.171 -9.125 1.00 0.00 N
ATOM 69 O1x DYE 6 18.388 -2.794 -9.340 1.00 0.00 O
ATOM 70 C2x DYE 6 18.957 -1.266 -7.606 1.00 0.00 C
ATOM 71 O2x DYE 6 19.668 -3.170 -14.407 1.00 0.00 O
ATOM 72 C3x DYE 6 19.270 -2.141 -8.804 1.00 0.00 C
ATOM 73 O3x DYE 6 21.689 -4.228 -14.700 1.00 0.00 O
ATOM 74 C4x DYE 6 21.192 -2.792 -10.247 1.00 0.00 C
ATOM 75 O4x DYE 6 27.659 -2.088 -15.385 1.00 0.00 O
ATOM 76 C5x DYE 6 22.477 -3.373 -10.169 1.00 0.00 C
ATOM 77 O5x DYE 6 25.335 -5.998 -14.038 1.00 0.00 O
ATOM 78 C6x DYE 6 23.068 -3.979 -11.285 1.00 0.00 C
ATOM 79 O6x DYE 6 23.250 -10.203 -13.231 1.00 0.00 O
ATOM 80 C7x DYE 6 22.367 -3.982 -12.493 1.00 0.00 C
ATOM 81 O7x DYE 6 22.446 -1.079 -8.206 1.00 0.00 O
ATOM 82 C8x DYE 6 21.126 -3.414 -12.600 1.00 0.00 C
ATOM 83 C9x DYE 6 20.519 -2.828 -11.487 1.00 0.00 C
ATOM 84 C10x DYE 6 20.736 -3.584 -13.979 1.00 0.00 C
ATOM 85 C11x DYE 6 22.785 -4.563 -13.818 1.00 0.00 C
ATOM 86 C12x DYE 6 24.076 -3.914 -14.268 1.00 0.00 C
ATOM 87 C13x DYE 6 24.106 -2.547 -14.600 1.00 0.00 C
ATOM 88 C14x DYE 6 25.305 -1.932 -14.974 1.00 0.00 C
ATOM 89 C15x DYE 6 26.481 -2.675 -15.026 1.00 0.00 C
ATOM 90 C16x DYE 6 26.454 -4.029 -14.707 1.00 0.00 C
ATOM 91 C17x DYE 6 25.266 -4.661 -14.331 1.00 0.00 C
ATOM 92 C18x DYE 6 24.173 -6.684 -13.787 1.00 0.00 C
ATOM 93 C19x DYE 6 24.277 -8.069 -13.630 1.00 0.00 C
ATOM 94 C20x DYE 6 23.150 -8.850 -13.378 1.00 0.00 C
ATOM 95 C21x DYE 6 21.905 -8.241 -13.275 1.00 0.00 C
ATOM 96 C22x DYE 6 21.783 -6.858 -13.425 1.00 0.00 C
ATOM 97 C23x DYE 6 22.916 -6.065 -13.684 1.00 0.00 C
ATOM 98 C24x DYE 6 21.242 -1.287 -8.274 1.00 0.00 C
ATOM 99 H1x DYE 6 20.568 -0.408 -6.396 1.00 0.00 H
ATOM 100 H2x DYE 6 18.753 -1.889 -6.730 1.00 0.00 H
ATOM 101 H3x DYE 6 18.094 -0.621 -7.798 1.00 0.00 H
ATOM 102 H4x DYE 6 23.025 -3.360 -9.232 1.00 0.00 H
ATOM 103 H5x DYE 6 24.053 -4.432 -11.220 1.00 0.00 H
ATOM 104 H6x DYE 6 19.531 -2.392 -11.606 1.00 0.00 H
ATOM 105 H7x DYE 6 23.196 -1.956 -14.559 1.00 0.00 H
ATOM 106 H8x DYE 6 25.308 -0.876 -15.221 1.00 0.00 H
ATOM 107 H9x DYE 6 27.513 -1.146 -15.577 1.00 0.00 H
ATOM 108 H10x DYE 6 27.375 -4.601 -14.756 1.00 0.00 H
ATOM 109 H11x DYE 6 25.257 -8.527 -13.714 1.00 0.00 H
ATOM 110 H12x DYE 6 24.169 -10.491 -13.360 1.00 0.00 H
ATOM 111 H13x DYE 6 21.029 -8.851 -13.079 1.00 0.00 H
ATOM 112 H14x DYE 6 20.801 -6.404 -13.339 1.00 0.00 H
ATOM 113 N ALA 7 20.137 3.566 -9.785 1.00 0.00 N
ATOM 114 CA ALA 7 20.231 3.714 -11.235 1.00 0.00 C
ATOM 115 C ALA 7 20.579 5.134 -11.611 1.00 0.00 C
ATOM 116 O ALA 7 21.463 5.396 -12.436 1.00 0.00 O
ATOM 117 CB ALA 7 18.896 3.247 -11.840 1.00 0.00 C
ATOM 118 H ALA 7 19.288 3.221 -9.359 1.00 0.00 H
ATOM 119 HA ALA 7 21.048 3.066 -11.604 1.00 0.00 H
ATOM 120 1HB ALA 7 18.675 2.193 -11.584 1.00 0.00 H
ATOM 121 2HB ALA 7 18.041 3.852 -11.479 1.00 0.00 H
ATOM 122 3HB ALA 7 18.898 3.312 -12.943 1.00 0.00 H
ATOM 123 N ALA 8 19.935 6.104 -11.056 1.00 0.00 N
ATOM 124 CA ALA 8 20.272 7.477 -11.420 1.00 0.00 C
ATOM 125 C ALA 8 21.734 7.759 -11.170 1.00 0.00 C
ATOM 126 O ALA 8 22.447 8.321 -12.010 1.00 0.00 O
ATOM 127 CB ALA 8 19.341 8.411 -10.629 1.00 0.00 C
ATOM 128 H ALA 8 19.209 5.916 -10.379 1.00 0.00 H
ATOM 129 HA ALA 8 20.092 7.609 -12.504 1.00 0.00 H
ATOM 130 1HB ALA 8 18.275 8.215 -10.853 1.00 0.00 H
ATOM 131 2HB ALA 8 19.466 8.297 -9.535 1.00 0.00 H
ATOM 132 3HB ALA 8 19.524 9.474 -10.868 1.00 0.00 H
ATOM 133 N ALA 9 22.256 7.403 -10.045 1.00 0.00 N
ATOM 134 CA ALA 9 23.669 7.676 -9.803 1.00 0.00 C
ATOM 135 C ALA 9 24.531 7.048 -10.872 1.00 0.00 C
ATOM 136 O ALA 9 25.439 7.673 -11.434 1.00 0.00 O
ATOM 137 CB ALA 9 24.008 7.169 -8.391 1.00 0.00 C
ATOM 138 H ALA 9 21.695 6.943 -9.343 1.00 0.00 H
ATOM 139 HA ALA 9 23.832 8.769 -9.851 1.00 0.00 H
ATOM 140 1HB ALA 9 23.392 7.668 -7.618 1.00 0.00 H
ATOM 141 2HB ALA 9 23.837 6.080 -8.287 1.00 0.00 H
ATOM 142 3HB ALA 9 25.064 7.359 -8.127 1.00 0.00 H
ATOM 143 N ALA 10 24.315 5.822 -11.210 1.00 0.00 N
ATOM 144 CA ALA 10 25.148 5.215 -12.243 1.00 0.00 C
ATOM 145 C ALA 10 25.084 6.010 -13.525 1.00 0.00 C
ATOM 146 O ALA 10 26.102 6.316 -14.159 1.00 0.00 O
ATOM 147 CB ALA 10 24.684 3.759 -12.421 1.00 0.00 C
ATOM 148 H ALA 10 23.580 5.290 -10.766 1.00 0.00 H
ATOM 149 HA ALA 10 26.200 5.227 -11.901 1.00 0.00 H
ATOM 150 1HB ALA 10 24.773 3.181 -11.481 1.00 0.00 H
ATOM 151 2HB ALA 10 23.626 3.695 -12.740 1.00 0.00 H
ATOM 152 3HB ALA 10 25.285 3.225 -13.180 1.00 0.00 H
ATOM 153 N ALA 11 23.933 6.383 -13.973 1.00 0.00 N
ATOM 154 CA ALA 11 23.872 7.152 -15.212 1.00 0.00 C
ATOM 155 C ALA 11 24.699 8.411 -15.108 1.00 0.00 C
ATOM 156 O ALA 11 24.656 9.144 -14.113 1.00 0.00 O
ATOM 157 CB ALA 11 22.390 7.435 -15.513 1.00 0.00 C
ATOM 158 H ALA 11 23.088 6.146 -13.474 1.00 0.00 H
ATOM 159 HA ALA 11 24.303 6.542 -16.028 1.00 0.00 H
ATOM 160 1HB ALA 11 21.808 6.500 -15.623 1.00 0.00 H
ATOM 161 2HB ALA 11 21.907 8.024 -14.709 1.00 0.00 H
ATOM 162 3HB ALA 11 22.262 8.001 -16.453 1.00 0.00 H
ATOM 163 N NME 12 25.474 8.733 -16.088 1.00 0.00 N
ATOM 164 CH3 NME 12 26.279 9.939 -16.012 1.00 0.00 C
ATOM 165 H NME 12 25.521 8.145 -16.909 1.00 0.00 H
ATOM 166 1HH3 NME 12 25.688 10.796 -16.297 1.00 0.00 H
ATOM 167 2HH3 NME 12 26.637 10.081 -15.002 1.00 0.00 H
ATOM 168 3HH3 NME 12 27.126 9.861 -16.677 1.00 0.00 H
CONECT 1 2 3 7
CONECT 2 1
CONECT 3 1 4 5 6
CONECT 4 3
CONECT 5 3
CONECT 6 3
CONECT 7 1 8 12
CONECT 8 7 9 11 13
CONECT 9 8 10 17
CONECT 10 9
CONECT 11 8 14 15 16
CONECT 12 7
CONECT 13 8
CONECT 14 11
CONECT 15 11
CONECT 16 11
CONECT 17 9 18 22
CONECT 18 17 19 21 23
CONECT 19 18 20 27
CONECT 20 19
CONECT 21 18 24 25 26
CONECT 22 17
CONECT 23 18
CONECT 24 21
CONECT 25 21
CONECT 26 21
CONECT 27 19 28 32
CONECT 28 27 29 31 33
CONECT 29 28 30 37
CONECT 30 29
CONECT 31 28 34 35 36
CONECT 32 27
CONECT 33 28
CONECT 34 31
CONECT 35 31
CONECT 36 31
CONECT 37 29 38 42
CONECT 38 37 39 41 43
CONECT 39 38 40 47
CONECT 40 39
CONECT 41 38 44 45 46
CONECT 42 37
CONECT 43 38
CONECT 44 41
CONECT 45 41
CONECT 46 41
CONECT 47 39 48 52
CONECT 48 47 49 51 53
CONECT 49 48 50 57
CONECT 50 49
CONECT 51 48 54 55 56
CONECT 52 47
CONECT 53 48
CONECT 54 51
CONECT 55 51
CONECT 56 51
CONECT 57 49 58 61
CONECT 58 57 59 62 63
CONECT 59 58 60 113
CONECT 60 59
CONECT 61 57
CONECT 62 58
CONECT 63 58 64 65 66
CONECT 64 63 67
CONECT 65 63
CONECT 66 63
CONECT 67 64 70 98 99
CONECT 68 72 74 98
CONECT 69 72
CONECT 70 67 72 100 101
CONECT 71 84
CONECT 72 68 69 70
CONECT 73 84 85
CONECT 74 68 76 83
CONECT 75 89 107
CONECT 76 74 78 102
CONECT 77 91 92
CONECT 78 76 80 103
CONECT 79 94 110
CONECT 80 78 82 85
CONECT 81 98
CONECT 82 80 83 84
CONECT 83 74 82 104
CONECT 84 71 73 82
CONECT 85 73 80 86 97
CONECT 86 85 87 91
CONECT 87 86 88 105
CONECT 88 87 89 106
CONECT 89 75 88 90
CONECT 90 89 91 108
CONECT 91 77 86 90
CONECT 92 77 93 97
CONECT 93 92 94 109
CONECT 94 79 93 95
CONECT 95 94 96 111
CONECT 96 95 97 112
CONECT 97 85 92 96
CONECT 98 67 68 81
CONECT 99 67
CONECT 100 70
CONECT 101 70
CONECT 102 76
CONECT 103 78
CONECT 104 83
CONECT 105 87
CONECT 106 88
CONECT 107 75
CONECT 108 90
CONECT 109 93
CONECT 110 79
CONECT 111 95
CONECT 112 96
CONECT 113 59 114 118
CONECT 114 113 115 117 119
CONECT 115 114 116 123
CONECT 116 115
CONECT 117 114 120 121 122
CONECT 118 113
CONECT 119 114
CONECT 120 117
CONECT 121 117
CONECT 122 117
CONECT 123 115 124 128
CONECT 124 123 125 127 129
CONECT 125 124 126 133
CONECT 126 125
CONECT 127 124 130 131 132
CONECT 128 123
CONECT 129 124
CONECT 130 127
CONECT 131 127
CONECT 132 127
CONECT 133 125 134 138
CONECT 134 133 135 137 139
CONECT 135 134 136 143
CONECT 136 135
CONECT 137 134 140 141 142
CONECT 138 133
CONECT 139 134
CONECT 140 137
CONECT 141 137
CONECT 142 137
CONECT 143 135 144 148
CONECT 144 143 145 147 149
CONECT 145 144 146 153
CONECT 146 145
CONECT 147 144 150 151 152
CONECT 148 143
CONECT 149 144
CONECT 150 147
CONECT 151 147
CONECT 152 147
CONECT 153 145 154 158
CONECT 154 153 155 157 159
CONECT 155 154 156 163
CONECT 156 155
CONECT 157 154 160 161 162
CONECT 158 153
CONECT 159 154
CONECT 160 157
CONECT 161 157
CONECT 162 157
CONECT 163 155 164 165
CONECT 164 163 166 167 168
CONECT 165 163
CONECT 166 164
CONECT 167 164
CONECT 168 164
END
ATOM 1 C ACE 0 11.164 2.358 -4.917 1.00 0.00 C
ATOM 2 O ACE 0 10.758 3.301 -5.609 1.00 0.00 O
ATOM 3 CH3 ACE 0 10.454 1.022 -4.926 1.00 0.00 C
ATOM 4 1HH3 ACE 0 10.454 0.609 -5.924 1.00 0.00 H
ATOM 5 2HH3 ACE 0 10.955 0.332 -4.262 1.00 0.00 H
ATOM 6 3HH3 ACE 0 9.433 1.144 -4.597 1.00 0.00 H
ATOM 7 N ALA 1 12.208 2.518 -4.176 1.00 0.00 N
ATOM 8 CA ALA 1 12.884 3.812 -4.176 1.00 0.00 C
ATOM 9 C ALA 1 14.384 3.638 -4.176 1.00 0.00 C
ATOM 10 O ALA 1 15.118 4.272 -4.943 1.00 0.00 O
ATOM 11 CB ALA 1 12.376 4.604 -2.959 1.00 0.00 C
ATOM 12 H ALA 1 12.553 1.759 -3.605 1.00 0.00 H
ATOM 13 HA ALA 1 12.616 4.351 -5.104 1.00 0.00 H
ATOM 14 1HB ALA 1 11.280 4.754 -2.995 1.00 0.00 H
ATOM 15 2HB ALA 1 12.600 4.090 -2.004 1.00 0.00 H
ATOM 16 3HB ALA 1 12.832 5.609 -2.902 1.00 0.00 H
ATOM 17 N ALA 2 14.916 2.801 -3.351 1.00 0.00 N
ATOM 18 CA ALA 2 16.367 2.633 -3.351 1.00 0.00 C
ATOM 19 C ALA 2 16.864 2.232 -4.719 1.00 0.00 C
ATOM 20 O ALA 2 17.836 2.781 -5.251 1.00 0.00 O
ATOM 21 CB ALA 2 16.717 1.603 -2.264 1.00 0.00 C
ATOM 22 H ALA 2 14.339 2.271 -2.714 1.00 0.00 H
ATOM 23 HA ALA 2 16.835 3.604 -3.103 1.00 0.00 H
ATOM 24 1HB ALA 2 16.378 1.931 -1.263 1.00 0.00 H
ATOM 25 2HB ALA 2 16.249 0.618 -2.456 1.00 0.00 H
ATOM 26 3HB ALA 2 17.807 1.436 -2.191 1.00 0.00 H
ATOM 27 N ALA 3 16.256 1.287 -5.353 1.00 0.00 N
ATOM 28 CA ALA 3 16.737 0.900 -6.676 1.00 0.00 C
ATOM 29 C ALA 3 16.748 2.082 -7.615 1.00 0.00 C
ATOM 30 O ALA 3 17.721 2.341 -8.333 1.00 0.00 O
ATOM 31 CB ALA 3 15.848 -0.251 -7.177 1.00 0.00 C
ATOM 32 H ALA 3 15.460 0.823 -4.940 1.00 0.00 H
ATOM 33 HA ALA 3 17.781 0.545 -6.583 1.00 0.00 H
ATOM 34 1HB ALA 3 15.881 -1.123 -6.496 1.00 0.00 H
ATOM 35 2HB ALA 3 14.785 0.050 -7.263 1.00 0.00 H
ATOM 36 3HB ALA 3 16.164 -0.613 -8.172 1.00 0.00 H
ATOM 37 N ALA 4 15.710 2.846 -7.670 1.00 0.00 N
ATOM 38 CA ALA 4 15.721 3.990 -8.577 1.00 0.00 C
ATOM 39 C ALA 4 16.887 4.903 -8.283 1.00 0.00 C
ATOM 40 O ALA 4 17.622 5.338 -9.177 1.00 0.00 O
ATOM 41 CB ALA 4 14.362 4.699 -8.451 1.00 0.00 C
ATOM 42 H ALA 4 14.903 2.656 -7.094 1.00 0.00 H
ATOM 43 HA ALA 4 15.847 3.619 -9.612 1.00 0.00 H
ATOM 44 1HB ALA 4 13.522 4.026 -8.706 1.00 0.00 H
ATOM 45 2HB ALA 4 14.178 5.068 -7.423 1.00 0.00 H
ATOM 46 3HB ALA 4 14.287 5.570 -9.126 1.00 0.00 H
ATOM 47 N ALA 5 17.124 5.239 -7.060 1.00 0.00 N
ATOM 48 CA ALA 5 18.252 6.122 -6.775 1.00 0.00 C
ATOM 49 C ALA 5 19.542 5.535 -7.297 1.00 0.00 C
ATOM 50 O ALA 5 20.350 6.206 -7.950 1.00 0.00 O
ATOM 51 CB ALA 5 18.280 6.368 -5.257 1.00 0.00 C
ATOM 52 H ALA 5 16.539 4.897 -6.311 1.00 0.00 H
ATOM 53 HA ALA 5 18.091 7.081 -7.301 1.00 0.00 H
ATOM 54 1HB ALA 5 17.341 6.832 -4.899 1.00 0.00 H
ATOM 55 2HB ALA 5 18.414 5.429 -4.685 1.00 0.00 H
ATOM 56 3HB ALA 5 19.101 7.047 -4.965 1.00 0.00 H
ATOM 57 N CYS 6 19.809 4.297 -7.054 1.00 0.00 N
ATOM 58 CA CYS 6 21.056 3.729 -7.558 1.00 0.00 C
ATOM 59 C CYS 6 21.153 3.882 -9.057 1.00 0.00 C
ATOM 60 O CYS 6 22.180 4.302 -9.610 1.00 0.00 O
ATOM 61 CB CYS 6 21.141 2.257 -7.109 1.00 0.00 C
ATOM 62 SG CYS 6 22.744 1.547 -7.546 1.00 0.00 S
ATOM 63 H CYS 6 19.165 3.728 -6.523 1.00 0.00 H
ATOM 64 HA CYS 6 21.898 4.293 -7.115 1.00 0.00 H
ATOM 65 2HB CYS 6 20.333 1.647 -7.563 1.00 0.00 H
ATOM 66 3HB CYS 6 21.016 2.165 -6.016 1.00 0.00 H
ATOM 67 HG CYS 6 22.319 0.810 -8.569 1.00 0.00 H
ATOM 68 N ALA 7 20.137 3.566 -9.785 1.00 0.00 N
ATOM 69 CA ALA 7 20.231 3.714 -11.235 1.00 0.00 C
ATOM 70 C ALA 7 20.579 5.134 -11.611 1.00 0.00 C
ATOM 71 O ALA 7 21.463 5.396 -12.436 1.00 0.00 O
ATOM 72 CB ALA 7 18.896 3.247 -11.840 1.00 0.00 C
ATOM 73 H ALA 7 19.288 3.221 -9.359 1.00 0.00 H
ATOM 74 HA ALA 7 21.048 3.066 -11.604 1.00 0.00 H
ATOM 75 1HB ALA 7 18.675 2.193 -11.584 1.00 0.00 H
ATOM 76 2HB ALA 7 18.041 3.852 -11.479 1.00 0.00 H
ATOM 77 3HB ALA 7 18.898 3.312 -12.943 1.00 0.00 H
ATOM 78 N ALA 8 19.935 6.104 -11.056 1.00 0.00 N
ATOM 79 CA ALA 8 20.272 7.477 -11.420 1.00 0.00 C
ATOM 80 C ALA 8 21.734 7.759 -11.170 1.00 0.00 C
ATOM 81 O ALA 8 22.447 8.321 -12.010 1.00 0.00 O
ATOM 82 CB ALA 8 19.341 8.411 -10.629 1.00 0.00 C
ATOM 83 H ALA 8 19.209 5.916 -10.379 1.00 0.00 H
ATOM 84 HA ALA 8 20.092 7.609 -12.504 1.00 0.00 H
ATOM 85 1HB ALA 8 18.275 8.215 -10.853 1.00 0.00 H
ATOM 86 2HB ALA 8 19.466 8.297 -9.535 1.00 0.00 H
ATOM 87 3HB ALA 8 19.524 9.474 -10.868 1.00 0.00 H
ATOM 88 N ALA 9 22.256 7.403 -10.045 1.00 0.00 N
ATOM 89 CA ALA 9 23.669 7.676 -9.803 1.00 0.00 C
ATOM 90 C ALA 9 24.531 7.048 -10.872 1.00 0.00 C
ATOM 91 O ALA 9 25.439 7.673 -11.434 1.00 0.00 O
ATOM 92 CB ALA 9 24.008 7.169 -8.391 1.00 0.00 C
ATOM 93 H ALA 9 21.695 6.943 -9.343 1.00 0.00 H
ATOM 94 HA ALA 9 23.832 8.769 -9.851 1.00 0.00 H
ATOM 95 1HB ALA 9 23.392 7.668 -7.618 1.00 0.00 H
ATOM 96 2HB ALA 9 23.837 6.080 -8.287 1.00 0.00 H
ATOM 97 3HB ALA 9 25.064 7.359 -8.127 1.00 0.00 H
ATOM 98 N ALA 10 24.315 5.822 -11.210 1.00 0.00 N
ATOM 99 CA ALA 10 25.148 5.215 -12.243 1.00 0.00 C
ATOM 100 C ALA 10 25.084 6.010 -13.525 1.00 0.00 C
ATOM 101 O ALA 10 26.102 6.316 -14.159 1.00 0.00 O
ATOM 102 CB ALA 10 24.684 3.759 -12.421 1.00 0.00 C
ATOM 103 H ALA 10 23.580 5.290 -10.766 1.00 0.00 H
ATOM 104 HA ALA 10 26.200 5.227 -11.901 1.00 0.00 H
ATOM 105 1HB ALA 10 24.773 3.181 -11.481 1.00 0.00 H
ATOM 106 2HB ALA 10 23.626 3.695 -12.740 1.00 0.00 H
ATOM 107 3HB ALA 10 25.285 3.225 -13.180 1.00 0.00 H
ATOM 108 N ALA 11 23.933 6.383 -13.973 1.00 0.00 N
ATOM 109 CA ALA 11 23.872 7.152 -15.212 1.00 0.00 C
ATOM 110 C ALA 11 24.699 8.411 -15.108 1.00 0.00 C
ATOM 111 O ALA 11 24.656 9.144 -14.113 1.00 0.00 O
ATOM 112 CB ALA 11 22.390 7.435 -15.513 1.00 0.00 C
ATOM 113 H ALA 11 23.088 6.146 -13.474 1.00 0.00 H
ATOM 114 HA ALA 11 24.303 6.542 -16.028 1.00 0.00 H
ATOM 115 1HB ALA 11 21.808 6.500 -15.623 1.00 0.00 H
ATOM 116 2HB ALA 11 21.907 8.024 -14.709 1.00 0.00 H
ATOM 117 3HB ALA 11 22.262 8.001 -16.453 1.00 0.00 H
ATOM 118 N NME 12 25.474 8.733 -16.088 1.00 0.00 N
ATOM 119 CH3 NME 12 26.279 9.939 -16.012 1.00 0.00 C
ATOM 120 H NME 12 25.521 8.145 -16.909 1.00 0.00 H
ATOM 121 1HH3 NME 12 25.688 10.796 -16.297 1.00 0.00 H
ATOM 122 2HH3 NME 12 26.637 10.081 -15.002 1.00 0.00 H
ATOM 123 3HH3 NME 12 27.126 9.861 -16.677 1.00 0.00 H
TER
END
channels:
- openeye
- conda-forge
dependencies:
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=2_gnu
- alsa-lib=1.2.7.2=h166bdaf_0
- ambertools=22.0=py310h3aec49d_3
- anyio=3.6.1=pyhd8ed1ab_1
- argon2-cffi=21.3.0=pyhd8ed1ab_0
- arpack=3.7.0=hdefa2d7_2
- asttokens=2.0.8=pyhd8ed1ab_0
- astunparse=1.6.3=pyhd8ed1ab_0
- attr=2.5.1=h166bdaf_1
- attrs=22.1.0=pyh71513ae_1
- babel=2.10.3=pyhd8ed1ab_0
- backcall=0.2.0=pyh9f0ad1d_0
- backports=1.0=py_2
- backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
- beautifulsoup4=4.11.1=pyha770c72_0
- bleach=5.0.1=pyhd8ed1ab_0
- blosc=1.21.1=h83bc5f7_3
- boost=1.74.0=py310h7c3ba0c_5
- boost-cpp=1.74.0=h75c5d50_8
- brotli=1.0.9=h166bdaf_7
- brotli-bin=1.0.9=h166bdaf_7
- bzip2=1.0.8=h7f98852_4
- c-ares=1.18.1=h7f98852_0
- ca-certificates=2022.9.24=ha878542_0
- cached-property=1.5.2=hd8ed1ab_1
- cached_property=1.5.2=pyha770c72_1
- cachetools=5.2.0=pyhd8ed1ab_0
- cairo=1.16.0=ha61ee94_1014
- certifi=2022.9.24=pyhd8ed1ab_0
- charset-normalizer=2.1.1=pyhd8ed1ab_0
- chemper=1.0.1=pyhd8ed1ab_0
- colorama=0.4.5=pyhd8ed1ab_0
- cudatoolkit=11.7.0=hd8887f6_10
- curl=7.83.1=h7bff187_0
- cycler=0.11.0=pyhd8ed1ab_0
- dbus=1.13.6=h5008d03_3
- decorator=5.1.1=pyhd8ed1ab_0
- defusedxml=0.7.1=pyhd8ed1ab_0
- entrypoints=0.4=pyhd8ed1ab_0
- executing=1.1.0=pyhd8ed1ab_0
- expat=2.4.9=h27087fc_0
- fftw=3.3.10=nompi_hf0379b8_105
- flit-core=3.7.1=pyhd8ed1ab_0
- font-ttf-dejavu-sans-mono=2.37=hab24e00_0
- font-ttf-inconsolata=3.000=h77eed37_0
- font-ttf-source-code-pro=2.038=h77eed37_0
- font-ttf-ubuntu=0.83=hab24e00_0
- fontconfig=2.14.0=hc2a2eb6_1
- fonts-conda-ecosystem=1=0
- fonts-conda-forge=1=0
- freetype=2.12.1=hca18f0e_0
- gettext=0.19.8.1=h27087fc_1009
- glib=2.74.0=h6239696_0
- glib-tools=2.74.0=h6239696_0
- gst-plugins-base=1.20.3=h57caac4_2
- gstreamer=1.20.3=hd4edc92_2
- hdf4=4.2.15=h9772cbc_4
- hdf5=1.12.2=nompi_h2386368_100
- icu=70.1=h27087fc_0
- idna=3.4=pyhd8ed1ab_0
- importlib_resources=5.9.0=pyhd8ed1ab_0
- iniconfig=1.1.1=pyh9f0ad1d_0
- ipykernel=6.16.0=pyh210e3f2_0
- ipython=8.5.0=pyh41d4057_1
- ipython_genutils=0.2.0=py_1
- ipywidgets=7.7.2=pyhd8ed1ab_0
- jack=1.9.18=h8c3723f_1003
- jedi=0.18.1=pyhd8ed1ab_2
- jinja2=3.1.2=pyhd8ed1ab_1
- jpeg=9e=h166bdaf_2
- json5=0.9.5=pyh9f0ad1d_0
- jsonschema=4.16.0=pyhd8ed1ab_0
- jupyter_client=7.3.5=pyhd8ed1ab_0
- jupyter_console=6.4.4=pyhd8ed1ab_0
- jupyter_core=4.11.1=py310hff52083_0
- jupyter_server=1.18.1=pyhd8ed1ab_0
- jupyterlab=3.4.7=pyhd8ed1ab_0
- jupyterlab_pygments=0.2.2=pyhd8ed1ab_0
- jupyterlab_server=2.15.2=pyhd8ed1ab_0
- jupyterlab_widgets=1.1.1=pyhd8ed1ab_0
- keyutils=1.6.1=h166bdaf_0
- krb5=1.19.3=h3790be6_0
- lcms2=2.12=hddcbb42_0
- ld_impl_linux-64=2.36.1=hea4e1c9_2
- lerc=4.0.0=h27087fc_0
- libarchive=3.5.2=hb890918_3
- libblas=3.9.0=16_linux64_openblas
- libbrotlicommon=1.0.9=h166bdaf_7
- libbrotlidec=1.0.9=h166bdaf_7
- libbrotlienc=1.0.9=h166bdaf_7
- libcap=2.65=ha37c62d_0
- libcblas=3.9.0=16_linux64_openblas
- libclang=14.0.6=default_h2e3cab8_0
- libclang13=14.0.6=default_h3a83d3e_0
- libcups=2.3.3=h3e49a29_2
- libcurl=7.83.1=h7bff187_0
- libdb=6.2.32=h9c3ff4c_0
- libdeflate=1.14=h166bdaf_0
- libedit=3.1.20191231=he28a2e2_2
- libev=4.33=h516909a_1
- libevent=2.1.10=h9b69904_4
- libffi=3.4.2=h7f98852_5
- libflac=1.3.4=h27087fc_0
- libgcc-ng=12.1.0=h8d9b700_16
- libgfortran-ng=12.1.0=h69a702a_16
- libgfortran5=12.1.0=hdcd56e2_16
- libglib=2.74.0=h7a41b64_0
- libgomp=12.1.0=h8d9b700_16
- libiconv=1.17=h166bdaf_0
- liblapack=3.9.0=16_linux64_openblas
- libllvm14=14.0.6=he0ac6c6_0
- libmamba=0.25.0=hd8a31e3_2
- libnetcdf=4.8.1=nompi_h21705cb_104
- libnghttp2=1.47.0=hdcd2b5c_1
- libnsl=2.0.0=h7f98852_0
- libogg=1.3.4=h7f98852_1
- libopenblas=0.3.21=pthreads_h78a6416_3
- libopus=1.3.1=h7f98852_1
- libpng=1.6.38=h753d276_0
- libpq=14.5=hd77ab85_0
- libsndfile=1.0.31=h9c3ff4c_1
- libsodium=1.0.18=h36c2ea0_1
- libsolv=0.7.22=h6239696_0
- libsqlite=3.39.3=h753d276_0
- libssh2=1.10.0=haa6b8db_3
- libstdcxx-ng=12.1.0=ha89aaad_16
- libtiff=4.4.0=h55922b4_4
- libtool=2.4.6=h9c3ff4c_1008
- libudev1=249=h166bdaf_4
- libuuid=2.32.1=h7f98852_1000
- libvorbis=1.3.7=h9c3ff4c_0
- libwebp-base=1.2.4=h166bdaf_0
- libxcb=1.13=h7f98852_1004
- libxkbcommon=1.0.3=he3ba5ed_0
- libxml2=2.10.2=h4c7fe37_1
- libxslt=1.1.35=h8affb1d_0
- libzip=1.9.2=hc869a4a_1
- libzlib=1.2.12=h166bdaf_3
- lz4-c=1.9.3=h9c3ff4c_1
- lzo=2.10=h516909a_1000
- matplotlib-base=3.6.0=py310h8d5ebf3_0
- matplotlib-inline=0.1.6=pyhd8ed1ab_0
- mistune=2.0.4=pyhd8ed1ab_0
- munkres=1.1.4=pyh9f0ad1d_0
- mysql-common=8.0.30=haf5c9bc_1
- mysql-libs=8.0.30=h28c427c_1
- nbclassic=0.4.3=pyhd8ed1ab_0
- nbclient=0.6.8=pyhd8ed1ab_0
- nbconvert=7.0.0=pyhd8ed1ab_0
- nbconvert-core=7.0.0=pyhd8ed1ab_0
- nbconvert-pandoc=7.0.0=pyhd8ed1ab_0
- nbformat=5.6.1=pyhd8ed1ab_0
- ncurses=6.3=h27087fc_1
- nest-asyncio=1.5.5=pyhd8ed1ab_0
- netcdf-fortran=4.6.0=nompi_hc402ea5_100
- networkx=2.8.6=pyhd8ed1ab_0
- nglview=3.0.3=pyh8a188c0_0
- nomkl=1.0=h5ca1d4c_0
- notebook=6.4.12=pyha770c72_0
- notebook-shim=0.1.0=pyhd8ed1ab_0
- nspr=4.32=h9c3ff4c_1
- nss=3.78=h2350873_0
- ocl-icd=2.3.1=h7f98852_0
- ocl-icd-system=1.0.0=1
- openeye-toolkits=2022.1.1=py310_0
- openff-amber-ff-ports=0.0.3=pyh6c4a22f_0
- openff-forcefields=2.0.0=pyh6c4a22f_0
- openff-interchange=0.2.1=pyhd8ed1ab_0
- openff-interchange-base=0.2.1=pyhd8ed1ab_0
- openff-toolkit=0.11.1=pyhd8ed1ab_0
- openff-toolkit-base=0.11.1=pyhd8ed1ab_0
- openff-units=0.1.8=pyh1a96a4e_0
- openff-utilities=0.1.6=pyh1a96a4e_0
- openjpeg=2.5.0=h7d73246_1
- openssl=1.1.1q=h166bdaf_0
- packaging=21.3=pyhd8ed1ab_0
- packmol=20.010=h86c2bf4_0
- pandoc=2.19.2=ha770c72_0
- pandocfilters=1.5.0=pyhd8ed1ab_0
- panedr=0.5.2=py_0
- parso=0.8.3=pyhd8ed1ab_0
- pbr=5.10.0=pyhd8ed1ab_0
- pcre2=10.37=hc3806b6_1
- pdbfixer=1.8.1=pyh6c4a22f_0
- perl=5.32.1=2_h7f98852_perl5
- pexpect=4.8.0=pyh9f0ad1d_2
- pickleshare=0.7.5=py_1003
- pint=0.19.2=pyhd8ed1ab_0
- pip=22.2.2=pyhd8ed1ab_0
- pixman=0.40.0=h36c2ea0_0
- pkgutil-resolve-name=1.3.10=pyhd8ed1ab_0
- ply=3.11=py_1
- portaudio=19.6.0=h8e90077_6
- prometheus_client=0.14.1=pyhd8ed1ab_0
- prompt-toolkit=3.0.31=pyha770c72_0
- prompt_toolkit=3.0.31=hd8ed1ab_0
- pthread-stubs=0.4=h36c2ea0_1001
- ptyprocess=0.7.0=pyhd3deb0d_0
- pulseaudio=14.0=h0868958_9
- pure_eval=0.2.2=pyhd8ed1ab_0
- py=1.11.0=pyh6c4a22f_0
- pybind11-abi=4=hd8ed1ab_3
- pycparser=2.21=pyhd8ed1ab_0
- pygments=2.13.0=pyhd8ed1ab_0
- pyopenssl=22.0.0=pyhd8ed1ab_1
- pyparsing=3.0.9=pyhd8ed1ab_0
- pyqt=5.15.7=py310h29803b5_0
- pysocks=1.7.1=pyha2e5f31_6
- pytables=3.7.0=py310hb60b9b2_2
- python=3.10.6=h582c2e5_0_cpython
- python-constraint=1.4.0=py_0
- python-dateutil=2.8.2=pyhd8ed1ab_0
- python-fastjsonschema=2.16.2=pyhd8ed1ab_0
- python_abi=3.10=2_cp310
- pytz=2022.2.1=pyhd8ed1ab_0
- qt-main=5.15.6=hc525480_0
- qtconsole=5.3.2=pyhd8ed1ab_0
- qtconsole-base=5.3.2=pyha770c72_0
- qtpy=2.2.0=pyhd8ed1ab_0
- rdkit=2022.03.5=py310h1c297d8_0
- readline=8.1.2=h0f457ee_0
- reproc=14.2.3=h7f98852_0
- reproc-cpp=14.2.3=h9c3ff4c_0
- requests=2.28.1=pyhd8ed1ab_1
- ruamel_yaml=0.15.80=py310h5764c6d_1007
- send2trash=1.8.0=pyhd8ed1ab_0
- setuptools=65.4.0=pyhd8ed1ab_0
- six=1.16.0=pyh6c4a22f_0
- smirnoff99frosst=1.1.0=pyh44b312d_0
- snappy=1.1.9=hbd366e4_1
- sniffio=1.3.0=pyhd8ed1ab_0
- soupsieve=2.3.2.post1=pyhd8ed1ab_0
- sqlite=3.39.3=h4ff8645_0
- stack_data=0.5.1=pyhd8ed1ab_0
- tinycss2=1.1.1=pyhd8ed1ab_0
- tk=8.6.12=h27826a3_0
- toml=0.10.2=pyhd8ed1ab_0
- tomli=2.0.1=pyhd8ed1ab_0
- toolz=0.12.0=pyhd8ed1ab_0
- tqdm=4.64.1=pyhd8ed1ab_0
- traitlets=5.4.0=pyhd8ed1ab_0
- typing-extensions=4.3.0=hd8ed1ab_0
- typing_extensions=4.3.0=pyha770c72_0
- tzdata=2022d=h191b570_0
- urllib3=1.26.11=pyhd8ed1ab_0
- wcwidth=0.2.5=pyh9f0ad1d_2
- webencodings=0.5.1=py_1
- websocket-client=1.4.1=pyhd8ed1ab_0
- wheel=0.37.1=pyhd8ed1ab_0
- widgetsnbextension=3.6.1=pyha770c72_0
- xcb-util=0.4.0=h166bdaf_0
- xcb-util-image=0.4.0=h166bdaf_0
- xcb-util-keysyms=0.4.0=h166bdaf_0
- xcb-util-renderutil=0.3.9=h166bdaf_0
- xcb-util-wm=0.4.1=h166bdaf_0
- xmltodict=0.13.0=pyhd8ed1ab_0
- xorg-kbproto=1.0.7=h7f98852_1002
- xorg-libice=1.0.10=h7f98852_0
- xorg-libsm=1.2.3=hd9c2040_1000
- xorg-libx11=1.7.2=h7f98852_0
- xorg-libxau=1.0.9=h7f98852_0
- xorg-libxdmcp=1.1.3=h7f98852_0
- xorg-libxext=1.3.4=h7f98852_1
- xorg-libxrender=0.9.10=h7f98852_1003
- xorg-libxt=1.2.1=h7f98852_2
- xorg-renderproto=0.11.1=h7f98852_1002
- xorg-xextproto=7.3.0=h7f98852_1002
- xorg-xproto=7.0.31=h7f98852_1007
- xz=5.2.6=h166bdaf_0
- yaml=0.2.5=h7f98852_2
- yaml-cpp=0.7.0=h27087fc_1
- zeromq=4.3.4=h9c3ff4c_1
- zipp=3.8.1=pyhd8ed1ab_0
- zlib=1.2.12=h166bdaf_3
- zstd=1.5.2=h6239696_4
- pip:
- amberlite==22.0
- amberutils==21.0
- argon2-cffi-bindings==21.2.0
- brotlipy==0.7.0
- cffi==1.15.1
- conda==4.14.0
- conda-package-handling==1.9.0
- contourpy==1.0.5
- cryptography==37.0.4
- cython==0.29.32
- debugpy==1.6.3
- fonttools==4.37.3
- greenlet==1.1.3
- importlib-metadata==4.11.4
- jupyter==1.0.0
- jupyter-core==4.11.1
- kiwisolver==1.4.4
- libmambapy==0.25.0
- lxml==4.9.1
- mamba==0.25.0
- markupsafe==2.1.1
- matplotlib==3.6.0
- mdtraj==1.9.7
- mmpbsa-py==16.0
- numexpr==2.8.3
- numpy==1.23.3
- openeye-toolkits-python3-linux-x64==2022.1.1
- openmm==7.7.0
- packmol-memgen==1.2.3rc0
- pandas==1.5.0
- parmed==3.4.3
- pdb4amber==22.0
- pillow==9.2.0
- pluggy==1.0.0
- psutil==5.9.2
- pycairo==1.21.0
- pycosat==0.6.3
- pydantic==1.10.2
- pymsmt==22.0
- pyqt5==5.15.7
- pyqt5-sip==12.11.0
- pyrsistent==0.18.1
- pytest==7.1.3
- pytraj==2.0.6
- pyzmq==24.0.1
- reportlab==3.5.68
- ruamel-yaml-conda==0.15.80
- sander==22.0
- scipy==1.9.1
- sip==6.6.2
- sqlalchemy==1.4.41
- tables==3.7.0
- terminado==0.15.0
- tornado==6.2
- unicodedata2==14.0.0
channels:
- openeye
- conda-forge
dependencies:
# Runtime
- python >= 3.8
- jupyter
- jupyterlab
- nomkl
# Package management
- conda
- mamba
- pip
# OpenFF Stack
- openff-toolkit >= 0.11.1
- openff-interchange >= 0.2
- openff-forcefields
- openff-amber-ff-ports
- openff-units
# Cheminformatics toolkits
- openeye-toolkits
- rdkit
- ambertools
# MD engines
- openmm >= 7.6
# Utilities
- mdtraj
- chemper
- numpy
- scipy
- nglview
- ipywidgets < 8
- pdbfixer
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
from typing import Literal, Tuple, Union, Iterable, Dict, Optional, List
import uuid
from io import StringIO
from IPython.display import SVG
from openff.toolkit.topology import FrozenMolecule
from rdkit import Chem
from rdkit.Chem import Draw
from rdkit.Chem.rdDepictor import Compute2DCoords
import numpy as np
import nglview
from nglview.base_adaptor import Structure, Trajectory
from pdbfixer import PDBFixer
from openff.units import Quantity, unit
from openff.units.openmm import from_openmm
from openff.toolkit import Molecule, ForceField, Topology
from openff.toolkit.typing.engines.smirnoff.parameters import BondType, ParameterType
from openff.toolkit.utils.exceptions import ParameterLookupError
AMBER_COLOR = np.array([255, 192, 0]) / 255
SAGE_COLOR = np.array([141, 208, 169]) / 255
NEW_PARAM_COLOR = np.array([191, 192, 238]) / 255
WHITE = np.array([255, 255, 255]) / 255
DEFAULT_WIDTH = 980
DEFAULT_HEIGHT = 400
Color = Iterable[float]
BondIndices = Tuple[int, int]
MOLECULE_DEFAULT_REPS = [
dict(type="licorice", params=dict(radius=0.25, multipleBond=True))
]
def in_ff(handler: str, param: ParameterType, ff: ForceField) -> bool:
"""
True if param is in ff[handler], false if not
"""
smirks = param.smirks
try:
ff_param = ff[handler][smirks]
except ParameterLookupError:
return False
return ff_param.__dict__ == param.__dict__
def bond_in_ff(bond: BondType, ff: ForceField) -> bool:
return in_ff("Bonds", bond, ff)
def blend_colors(a: Color, b: Color, t: float = 0.5, w: float = 0.0) -> Color:
"""
Blend two colors with white.
By default, produces a color with an even mix of ``a`` and ``b`` and no
white.
Parameters
==========
a
The first color.
b
The second color.
t
The proportion of ``a`` in the final mix.
w
The proportion of white in the final mix.
"""
a = np.asarray(a)
b = np.asarray(b)
return np.sqrt(w * WHITE**2 + t * a**2 + (1 - t - w) * b**2)
def draw_molecule(
molecule: Union[Molecule, Chem.Mol],
image_width: int = DEFAULT_WIDTH,
image_height: int = DEFAULT_HEIGHT,
highlight_atoms: Optional[Union[List[int], Dict[int, Color]]] = None,
highlight_bonds: Optional[
Union[List[BondIndices], Dict[BondIndices, Color]]
] = None,
atom_notes: Optional[Dict[int, str]] = None,
bond_notes: Optional[Dict[BondIndices, str]] = None,
explicit_hydrogens: Optional[bool] = None,
color_by_element: Optional[bool] = None,
) -> SVG:
"""Draw a molecule
Parameters
==========
molecule
The molecule to draw.
image_width
The width of the resulting image in pixels.
image_height
The height of the resulting image in pixels.
highlight_atoms
A list of atom indices to highlight, or a map from indices to colors.
Colors should be given as triplets of floats between 0.0 and 1.0.
highlight_atoms
A list of pairs of atom indices indicating bonds to highlight, or a map
from index pairs to colors. Colors should be given as triplets of floats
between 0.0 and 1.0.
atom_notes
A map from atom indices to a string that should be printed near the
atom.
bond_notes
A map from atom index pairs to a string that should be printed near the
bond.
explicit_hydrogens
If ``False``, allow uncharged monovalent hydrogens to be hidden. If
``True``, make all hydrogens explicit. If ``None``
color_by_element
If True, color heteroatoms according to their element; if False, the
image will be black and white. By default, uses black and white when
highlight_atoms or highlight_bonds is provided, and color otherwise.
Raises
======
KeyError
When an atom or bond in highlight_atoms or highlight_bonds is missing
from the image, including when it is present in the molecule but hidden.
"""
if isinstance(molecule, FrozenMolecule):
rdmol = molecule.to_rdkit()
else:
rdmol = molecule
if color_by_element is None:
color_by_element = highlight_atoms is None and highlight_bonds is None
if explicit_hydrogens is None:
idx_map = {i: i for i in range(rdmol.GetNumAtoms())}
elif explicit_hydrogens:
idx_map = {i: i for i in range(rdmol.GetNumAtoms())}
rdmol = Chem.AddHs(rdmol, explicitOnly=True)
else:
idx_map = {
old: new
for new, old in enumerate(
a.GetIdx()
for a in rdmol.GetAtoms()
if a.GetAtomicNum() != 1 and a.GetMass() != 1
)
}
rdmol = Chem.RemoveHs(rdmol, updateExplicitCount=True)
if highlight_atoms is None:
highlight_atoms = []
highlight_atom_colors = None
elif isinstance(highlight_atoms, dict):
highlight_atom_colors = {
idx_map[i]: tuple(c) for i, c in highlight_atoms.items() if i in idx_map
}
highlight_atoms = list(highlight_atoms.keys())
else:
highlight_atoms = [idx_map[i] for i in highlight_atoms if i in idx_map]
highlight_atom_colors = None
if highlight_bonds is None:
highlight_bonds = []
highlight_bond_colors = None
elif isinstance(highlight_bonds, dict):
highlight_bond_colors = {
rdmol.GetBondBetweenAtoms(idx_map[i_a], idx_map[i_b]).GetIdx(): tuple(v)
for (i_a, i_b), v in highlight_bonds.items()
if i_a in idx_map and i_b in idx_map
}
highlight_bonds = list(highlight_bond_colors.keys())
else:
highlight_bonds = [
rdmol.GetBondBetweenAtoms(idx_map[i_a], idx_map[i_b])
for i_a, i_b in highlight_bonds
if i_a in idx_map and i_b in idx_map
]
highlight_bond_colors = None
if bond_notes is not None:
for (i_a, i_b), note in bond_notes.items():
if i_a not in idx_map or i_b not in idx_map:
continue
rdbond = rdmol.GetBondBetweenAtoms(idx_map[i_a], idx_map[i_b])
rdbond.SetProp("bondNote", note)
if atom_notes is not None:
for i, note in atom_notes.items():
if i not in idx_map:
continue
rdatom = rdmol.GetAtomWithIdx(idx_map[i])
rdatom.SetProp("atomNote", note)
Compute2DCoords(rdmol)
drawer = Draw.MolDraw2DSVG(image_width, image_height)
draw_options = drawer.drawOptions()
if not color_by_element:
draw_options.useBWAtomPalette()
drawer.DrawMolecule(
rdmol,
highlightAtoms=highlight_atoms,
highlightAtomColors=highlight_atom_colors,
highlightBonds=highlight_bonds,
highlightBondColors=highlight_bond_colors,
)
drawer.FinishDrawing()
svg_contents = drawer.GetDrawingText()
return SVG(svg_contents)
def depict_charges(
offmol: Molecule,
force_field: ForceField,
image_width: int = DEFAULT_WIDTH,
image_height: int = DEFAULT_HEIGHT,
) -> SVG:
"""
Draw the library charges next to each atom
"""
labels = force_field.label_molecules(offmol.to_topology())
atom_notes = {}
for indices, charge_type in labels[0]["LibraryCharges"].items():
for charge_idx, atom_idx in enumerate(indices, start=1):
charge = getattr(charge_type, f"charge{charge_idx}")
atom_notes[atom_idx] = f"{charge.m:.1}"
return draw_molecule(
offmol,
atom_notes=atom_notes,
image_height=image_height,
image_width=image_width,
)
def depict_charge_source(
offmol: Molecule,
force_field: ForceField,
image_width: int = DEFAULT_WIDTH,
image_height: int = DEFAULT_HEIGHT,
) -> SVG:
"""
Color each atom according to where it gets its charges from
"""
labels = force_field.label_molecules(offmol.to_topology())
highlight_atom_colors = {}
for indices, charge_type in labels[0]["LibraryCharges"].items():
# We don't assign IDs, but ff14sb does:
if isinstance(charge_type.id, str):
this_color = tuple(AMBER_COLOR)
elif charge_type.id is None:
this_color = tuple(NEW_PARAM_COLOR)
else:
continue
for i in indices:
highlight_atom_colors[i] = this_color
return draw_molecule(
offmol,
highlight_atoms=highlight_atom_colors,
image_height=image_height,
image_width=image_width,
)
def depict_bonds_source(
offmol: Molecule,
force_field: ForceField,
image_width: int = DEFAULT_WIDTH,
image_height: int = DEFAULT_HEIGHT,
show_smirks: bool = False,
) -> SVG:
"""
Color each bond according to where it gets its torsions from
"""
labels = force_field.label_molecules(offmol.to_topology())
sage = ForceField("openff-2.0.0.offxml")
ff14sb = ForceField("ff14sb_off_impropers_0.0.3.offxml")
highlight_bond_colors = {}
bond_notes = {}
for indices, bond_type in labels[0]["Bonds"].items():
if bond_in_ff(bond_type, ff14sb):
highlight_bond_colors[indices] = tuple(AMBER_COLOR)
elif bond_in_ff(bond_type, sage):
highlight_bond_colors[indices] = tuple(SAGE_COLOR)
if show_smirks:
bond_notes[indices] = bond_type.smirks
return draw_molecule(
offmol,
highlight_bonds=highlight_bond_colors,
bond_notes=bond_notes,
image_height=image_height,
image_width=image_width,
)
def depict_torsions_source(
offmol: Molecule,
force_field: ForceField,
image_width: int = DEFAULT_WIDTH,
image_height: int = DEFAULT_HEIGHT,
show_smirks: bool = False,
) -> SVG:
"""
Color each torsion according to where it gets its torsions from
"""
labels = force_field.label_molecules(offmol.to_topology())
sage = ForceField("openff-2.0.0.offxml")
ff14sb = ForceField("ff14sb_off_impropers_0.0.3.offxml")
torsions_per_ff = {}
bond_notes: Dict[Tuple[int, int], str] = {}
for indices, torsion_type in labels[0]["ProperTorsions"].items():
if in_ff("ProperTorsions", torsion_type, ff14sb):
this_color = np.asarray([1, 0])
elif in_ff("ProperTorsions", torsion_type, sage):
this_color = np.asarray([0, 1])
else:
this_color = np.asarray([0, 0])
bond_index = tuple(sorted(indices[1:3]))
color = torsions_per_ff.setdefault(bond_index, np.zeros(2))
color += this_color
if show_smirks:
bond_notes[bond_index] = torsion_type.smirks
total_available_torsions = np.max([v[0] + v[1] for v in torsions_per_ff.values()])
highlight_torsion_colors = {
k: tuple(
blend_colors(
AMBER_COLOR,
SAGE_COLOR,
t=v[0] / total_available_torsions,
w=1 - (v[0] + v[1]) / total_available_torsions,
)
)
for k, v in torsions_per_ff.items()
}
return draw_molecule(
offmol,
image_width=image_width,
image_height=image_height,
highlight_bonds=highlight_torsion_colors,
bond_notes=bond_notes,
explicit_hydrogens=False,
)
class OpenFFMoleculeTrajectory(Structure, Trajectory):
"""OpenFF Molecule adaptor.
Example
-------
>>> import nglview as nv
>>> import mdtraj as md
>>> mol = Molecule.from_polymer_pdb(pdb_filename)
>>> t = OpenFFMoleculeTrajectory(mol)
>>> w = nv.NGLWidget(t)
>>> w
"""
def __init__(self, molecule: Molecule, ext: str = "MOL2"):
if not molecule.conformers:
raise ValueError(
"Cannot visualize a molecule without conformers with NGLView"
)
self.molecule = molecule
self.ext = ext.lower()
self.params = {}
self.id = str(uuid.uuid4())
def get_coordinates(self, index: int):
return self.molecule.conformers[index].m_as(unit.angstrom)
@property
def n_frames(self):
return len(self.molecule.conformers)
def get_structure_string(self):
with StringIO() as f:
self.molecule.to_file(f, file_format=self.ext)
sdf_str = f.getvalue()
return sdf_str
class OpenFFTopologyStructure(Structure):
"""OpenFF Molecule adaptor.
Example
-------
>>> import nglview as nv
>>> import mdtraj as md
>>> mol = Molecule.from_polymer_pdb(pdb_filename)
>>> t = OpenFFMoleculeTrajectory(mol)
>>> w = nv.NGLWidget(t)
>>> w
"""
def __init__(
self,
topology: Topology,
ext: str,
):
self.topology = topology
self.ext = ext.lower()
self.params = {}
self.id = str(uuid.uuid4())
def get_structure_string(self):
with StringIO() as f:
self.topology.to_file(f, file_format=self.ext)
sdf_str = f.getvalue()
return sdf_str
def visualize(obj: Union[Molecule, Topology], ext=None, representations=None):
"""Visualize a topology or molecule with nglview"""
if isinstance(obj, Molecule):
if representations is None:
representations = MOLECULE_DEFAULT_REPS
if ext is None:
ext = "MOL2"
return nglview.NGLWidget(
OpenFFMoleculeTrajectory(obj, ext=ext), representations=representations
)
elif isinstance(obj, Topology):
if ext is None:
ext = "PDB"
return nglview.NGLWidget(
OpenFFTopologyStructure(obj, ext=ext), representations=representations
)
else:
if ext is not None:
raise ValueError(
"ext parameter only supported for topologies and molecules"
)
return nglview.NGLWidget(structure=obj, representations=representations)
def solvate(
topology: Topology,
positive_ion: Literal["Cs+", "K+", "Li+", "Na+", "Rb+"] = "Na+",
negative_ion: Literal["Cl-", "Br-", "F-", "I-"] = "Cl-",
ionic_strength: Quantity = 0.0 * unit.molar,
):
"""
Solvate a topology with box vectors in water.
Parameters
==========
topology
The topology to solvate. A copy of the topology is returned; it is not
mutated. The topology must have box vectors.
positive_ion
The type of positive ion to add.
negative_ion
The type of negative ion to add.
ionic_strength : OpenFF ``Quantity`` with dimensions of concentration
The total concentration of ions (both positive and negative) to add.
This does not include ions that are added to neutralize the system.
Raises
======
ValueError
If the given topology has no box vectors
"""
if topology.box_vectors is None:
raise ValueError("Topology has no box vectors")
with StringIO() as f:
topology.to_file(f)
f.seek(0)
fixer = PDBFixer(pdbfile=f)
fixer.addSolvent(
boxVectors=topology.box_vectors.to_openmm(),
positiveIon=positive_ion,
negativeIon=negative_ion,
ionicStrength=ionic_strength.to_openmm(),
)
solvated_topology = Topology.from_openmm(
fixer.topology,
unique_molecules={
*topology.molecules,
Molecule.from_smiles("O"),
Molecule.from_smiles(f"[{positive_ion}]"),
Molecule.from_smiles(f"[{negative_ion}]"),
},
)
solvated_topology.set_positions(from_openmm(fixer.positions))
return solvated_topology
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment