bentopy 0.2.0a10__cp313-cp313-manylinux_2_34_x86_64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. bentopy-0.2.0a10.data/scripts/bentopy-init +0 -0
  2. bentopy-0.2.0a10.data/scripts/bentopy-pack +0 -0
  3. bentopy-0.2.0a10.data/scripts/bentopy-render +0 -0
  4. bentopy-0.2.0a10.data/scripts/bentopy-solvate +0 -0
  5. bentopy-0.2.0a10.dist-info/METADATA +358 -0
  6. bentopy-0.2.0a10.dist-info/RECORD +58 -0
  7. bentopy-0.2.0a10.dist-info/WHEEL +5 -0
  8. bentopy-0.2.0a10.dist-info/entry_points.txt +4 -0
  9. bentopy-0.2.0a10.dist-info/licenses/LICENSE.txt +13 -0
  10. bentopy-0.2.0a10.dist-info/top_level.txt +8 -0
  11. check/check.py +128 -0
  12. core/config/bent/lexer.rs +338 -0
  13. core/config/bent/parser.rs +1180 -0
  14. core/config/bent/writer.rs +205 -0
  15. core/config/bent.rs +149 -0
  16. core/config/compartment_combinations.rs +300 -0
  17. core/config/legacy.rs +768 -0
  18. core/config.rs +362 -0
  19. core/mod.rs +4 -0
  20. core/placement.rs +100 -0
  21. core/utilities.rs +1 -0
  22. core/version.rs +32 -0
  23. init/example.bent +74 -0
  24. init/main.rs +235 -0
  25. mask/config.py +153 -0
  26. mask/mask.py +308 -0
  27. mask/utilities.py +38 -0
  28. merge/merge.py +175 -0
  29. pack/args.rs +77 -0
  30. pack/main.rs +121 -0
  31. pack/mask.rs +940 -0
  32. pack/session.rs +176 -0
  33. pack/state/combinations.rs +31 -0
  34. pack/state/compartment.rs +44 -0
  35. pack/state/mask.rs +196 -0
  36. pack/state/pack.rs +187 -0
  37. pack/state/segment.rs +72 -0
  38. pack/state/space.rs +98 -0
  39. pack/state.rs +440 -0
  40. pack/structure.rs +185 -0
  41. pack/voxelize.rs +85 -0
  42. render/args.rs +109 -0
  43. render/limits.rs +73 -0
  44. render/main.rs +12 -0
  45. render/render.rs +393 -0
  46. render/structure.rs +264 -0
  47. solvate/args.rs +324 -0
  48. solvate/convert.rs +25 -0
  49. solvate/cookies.rs +185 -0
  50. solvate/main.rs +177 -0
  51. solvate/placement.rs +380 -0
  52. solvate/solvate.rs +244 -0
  53. solvate/structure.rs +160 -0
  54. solvate/substitute.rs +113 -0
  55. solvate/water/martini.rs +409 -0
  56. solvate/water/models.rs +150 -0
  57. solvate/water/tip3p.rs +658 -0
  58. solvate/water.rs +115 -0
@@ -0,0 +1,409 @@
1
+ /// From the standard Martini water box.
2
+ #[allow(clippy::approx_constant)]
3
+ pub const MARTINI: WaterBox<400, 1> = WaterBox::new(
4
+ "W",
5
+ ["W"],
6
+ Vec3::new(3.64428, 3.64428, 3.64428),
7
+ [
8
+ Vec3::new(0.084, 3.595, 3.359),
9
+ Vec3::new(0.460, 2.488, 2.882),
10
+ Vec3::new(3.165, 2.218, 0.652),
11
+ Vec3::new(3.295, 3.303, 2.679),
12
+ Vec3::new(1.213, 3.294, 0.205),
13
+ Vec3::new(1.296, 1.446, 1.188),
14
+ Vec3::new(0.811, 1.294, 1.352),
15
+ Vec3::new(1.802, 2.109, 0.786),
16
+ Vec3::new(1.477, 3.201, 3.141),
17
+ Vec3::new(0.126, 0.762, 3.104),
18
+ Vec3::new(0.888, 0.042, 2.906),
19
+ Vec3::new(2.582, 0.430, 1.793),
20
+ Vec3::new(2.231, 1.301, 0.363),
21
+ Vec3::new(2.801, 0.735, 3.454),
22
+ Vec3::new(0.167, 0.527, 2.579),
23
+ Vec3::new(0.266, 3.146, 3.600),
24
+ Vec3::new(1.788, 2.536, 0.332),
25
+ Vec3::new(0.220, 1.319, 2.025),
26
+ Vec3::new(1.113, 1.210, 3.262),
27
+ Vec3::new(3.572, 1.069, 1.761),
28
+ Vec3::new(3.336, 2.112, 2.620),
29
+ Vec3::new(1.644, 1.445, 1.647),
30
+ Vec3::new(2.190, 2.784, 2.016),
31
+ Vec3::new(0.690, 2.218, 2.248),
32
+ Vec3::new(0.049, 1.746, 1.819),
33
+ Vec3::new(1.085, 1.718, 3.011),
34
+ Vec3::new(3.356, 1.501, 3.265),
35
+ Vec3::new(0.972, 2.945, 1.710),
36
+ Vec3::new(2.093, 2.634, 2.844),
37
+ Vec3::new(1.313, 1.274, 2.069),
38
+ Vec3::new(1.605, 2.058, 1.712),
39
+ Vec3::new(2.602, 2.831, 3.560),
40
+ Vec3::new(1.681, 2.151, 3.570),
41
+ Vec3::new(1.662, 1.867, 3.048),
42
+ Vec3::new(0.071, 1.258, 3.570),
43
+ Vec3::new(2.903, 2.793, 3.169),
44
+ Vec3::new(0.484, 0.375, 1.167),
45
+ Vec3::new(1.011, 2.633, 2.166),
46
+ Vec3::new(3.474, 2.416, 1.456),
47
+ Vec3::new(2.887, 0.816, 2.023),
48
+ Vec3::new(3.172, 0.769, 0.118),
49
+ Vec3::new(3.637, 1.570, 2.424),
50
+ Vec3::new(1.604, 3.277, 2.177),
51
+ Vec3::new(3.378, 2.743, 0.615),
52
+ Vec3::new(0.507, 3.529, 0.369),
53
+ Vec3::new(0.900, 3.575, 1.045),
54
+ Vec3::new(0.697, 0.329, 2.471),
55
+ Vec3::new(3.320, 1.347, 2.746),
56
+ Vec3::new(2.725, 1.769, 1.205),
57
+ Vec3::new(2.691, 1.457, 0.232),
58
+ Vec3::new(1.899, 2.601, 2.372),
59
+ Vec3::new(1.705, 0.931, 1.571),
60
+ Vec3::new(2.305, 3.018, 2.565),
61
+ Vec3::new(3.176, 1.809, 0.987),
62
+ Vec3::new(2.078, 0.467, 1.003),
63
+ Vec3::new(0.735, 3.161, 0.686),
64
+ Vec3::new(0.106, 0.660, 1.285),
65
+ Vec3::new(2.892, 1.267, 1.759),
66
+ Vec3::new(0.350, 2.884, 1.674),
67
+ Vec3::new(1.691, 3.234, 0.544),
68
+ Vec3::new(3.083, 1.260, 0.008),
69
+ Vec3::new(0.106, 3.018, 2.172),
70
+ Vec3::new(0.897, 2.590, 2.652),
71
+ Vec3::new(1.270, 1.950, 1.271),
72
+ Vec3::new(1.292, 0.355, 2.364),
73
+ Vec3::new(3.521, 0.117, 1.661),
74
+ Vec3::new(0.740, 1.989, 0.129),
75
+ Vec3::new(0.395, 1.022, 0.308),
76
+ Vec3::new(0.457, 2.978, 1.102),
77
+ Vec3::new(1.588, 2.461, 1.350),
78
+ Vec3::new(2.920, 3.320, 3.064),
79
+ Vec3::new(1.846, 0.962, 0.748),
80
+ Vec3::new(3.229, 3.360, 1.520),
81
+ Vec3::new(2.906, 1.213, 3.118),
82
+ Vec3::new(3.619, 2.869, 1.252),
83
+ Vec3::new(2.246, 2.161, 2.736),
84
+ Vec3::new(0.012, 1.712, 0.942),
85
+ Vec3::new(1.123, 2.127, 2.515),
86
+ Vec3::new(2.327, 1.391, 0.893),
87
+ Vec3::new(2.204, 1.881, 0.997),
88
+ Vec3::new(0.547, 1.301, 2.471),
89
+ Vec3::new(0.532, 1.177, 3.393),
90
+ Vec3::new(0.422, 0.094, 1.552),
91
+ Vec3::new(2.190, 0.441, 2.113),
92
+ Vec3::new(1.838, 0.626, 3.276),
93
+ Vec3::new(2.193, 0.775, 0.454),
94
+ Vec3::new(3.376, 3.168, 3.208),
95
+ Vec3::new(2.343, 0.249, 3.247),
96
+ Vec3::new(3.362, 2.550, 3.369),
97
+ Vec3::new(2.792, 0.717, 2.965),
98
+ Vec3::new(2.592, 0.655, 1.235),
99
+ Vec3::new(2.985, 1.789, 3.639),
100
+ Vec3::new(0.725, 3.365, 1.625),
101
+ Vec3::new(1.383, 1.082, 0.611),
102
+ Vec3::new(0.952, 0.366, 3.275),
103
+ Vec3::new(3.004, 0.850, 0.956),
104
+ Vec3::new(3.371, 1.332, 0.901),
105
+ Vec3::new(1.114, 3.549, 3.372),
106
+ Vec3::new(1.040, 0.085, 0.607),
107
+ Vec3::new(3.361, 0.619, 1.642),
108
+ Vec3::new(3.511, 2.868, 0.087),
109
+ Vec3::new(0.418, 2.071, 1.789),
110
+ Vec3::new(2.335, 0.658, 0.019),
111
+ Vec3::new(3.469, 2.990, 1.739),
112
+ Vec3::new(3.508, 0.184, 2.489),
113
+ Vec3::new(1.953, 1.396, 3.043),
114
+ Vec3::new(2.046, 2.735, 0.746),
115
+ Vec3::new(2.446, 2.029, 3.486),
116
+ Vec3::new(2.120, 0.006, 1.795),
117
+ Vec3::new(0.732, 0.909, 1.858),
118
+ Vec3::new(0.286, 2.109, 2.632),
119
+ Vec3::new(2.145, 3.302, 1.338),
120
+ Vec3::new(3.339, 0.899, 2.210),
121
+ Vec3::new(1.976, 3.246, 2.977),
122
+ Vec3::new(3.319, 2.305, 0.182),
123
+ Vec3::new(1.754, 1.788, 1.243),
124
+ Vec3::new(3.606, 0.299, 2.984),
125
+ Vec3::new(1.755, 2.134, 2.578),
126
+ Vec3::new(1.972, 1.020, 2.023),
127
+ Vec3::new(2.824, 1.318, 0.861),
128
+ Vec3::new(3.111, 1.051, 0.503),
129
+ Vec3::new(2.920, 3.091, 0.892),
130
+ Vec3::new(2.754, 2.694, 1.688),
131
+ Vec3::new(2.650, 1.773, 0.666),
132
+ Vec3::new(2.083, 1.983, 1.652),
133
+ Vec3::new(2.964, 1.771, 1.719),
134
+ Vec3::new(0.339, 0.786, 2.143),
135
+ Vec3::new(3.117, 1.838, 2.970),
136
+ Vec3::new(3.468, 3.456, 2.116),
137
+ Vec3::new(1.398, 2.900, 1.518),
138
+ Vec3::new(2.405, 3.433, 2.842),
139
+ Vec3::new(2.399, 0.763, 2.606),
140
+ Vec3::new(1.606, 3.471, 2.667),
141
+ Vec3::new(3.303, 0.425, 1.133),
142
+ Vec3::new(3.094, 1.744, 2.434),
143
+ Vec3::new(0.077, 1.065, 2.472),
144
+ Vec3::new(2.937, 0.860, 1.490),
145
+ Vec3::new(3.348, 1.011, 3.267),
146
+ Vec3::new(2.233, 2.710, 1.485),
147
+ Vec3::new(1.489, 3.301, 1.098),
148
+ Vec3::new(0.604, 0.481, 0.356),
149
+ Vec3::new(1.708, 0.135, 2.166),
150
+ Vec3::new(0.736, 3.255, 0.014),
151
+ Vec3::new(1.110, 1.721, 0.765),
152
+ Vec3::new(1.764, 2.350, 3.078),
153
+ Vec3::new(1.594, 0.708, 1.068),
154
+ Vec3::new(2.950, 0.305, 1.496),
155
+ Vec3::new(2.670, 3.587, 1.824),
156
+ Vec3::new(2.082, 3.235, 2.164),
157
+ Vec3::new(1.478, 2.272, 2.125),
158
+ Vec3::new(3.248, 2.995, 2.251),
159
+ Vec3::new(0.942, 0.498, 1.020),
160
+ Vec3::new(1.464, 2.795, 1.980),
161
+ Vec3::new(0.947, 0.726, 0.045),
162
+ Vec3::new(1.748, 1.335, 2.439),
163
+ Vec3::new(2.596, 0.201, 2.309),
164
+ Vec3::new(0.016, 2.044, 2.194),
165
+ Vec3::new(1.720, 1.862, 0.352),
166
+ Vec3::new(0.988, 0.177, 0.122),
167
+ Vec3::new(1.726, 1.258, 1.173),
168
+ Vec3::new(2.696, 0.234, 2.872),
169
+ Vec3::new(1.284, 2.246, 2.981),
170
+ Vec3::new(2.088, 2.028, 3.198),
171
+ Vec3::new(2.705, 2.058, 3.091),
172
+ Vec3::new(1.989, 0.198, 3.596),
173
+ Vec3::new(1.211, 0.814, 1.989),
174
+ Vec3::new(0.637, 0.770, 1.387),
175
+ Vec3::new(0.423, 3.482, 1.063),
176
+ Vec3::new(1.755, 2.812, 3.188),
177
+ Vec3::new(0.790, 2.297, 0.547),
178
+ Vec3::new(2.470, 1.682, 1.768),
179
+ Vec3::new(2.750, 1.481, 2.167),
180
+ Vec3::new(1.955, 2.155, 2.101),
181
+ Vec3::new(2.425, 2.529, 0.233),
182
+ Vec3::new(2.097, 0.550, 1.561),
183
+ Vec3::new(3.576, 0.828, 0.829),
184
+ Vec3::new(0.070, 3.417, 2.860),
185
+ Vec3::new(0.487, 2.643, 2.392),
186
+ Vec3::new(0.054, 3.489, 0.624),
187
+ Vec3::new(1.953, 0.759, 2.430),
188
+ Vec3::new(1.316, 2.782, 0.279),
189
+ Vec3::new(3.221, 3.164, 0.465),
190
+ Vec3::new(2.196, 1.817, 0.479),
191
+ Vec3::new(1.039, 1.008, 0.996),
192
+ Vec3::new(1.871, 0.918, 0.048),
193
+ Vec3::new(2.455, 2.483, 3.226),
194
+ Vec3::new(2.808, 0.389, 0.843),
195
+ Vec3::new(0.138, 0.237, 0.291),
196
+ Vec3::new(1.424, 2.556, 2.581),
197
+ Vec3::new(1.223, 2.472, 1.673),
198
+ Vec3::new(0.965, 2.424, 0.071),
199
+ Vec3::new(0.206, 2.665, 0.839),
200
+ Vec3::new(0.710, 1.735, 3.281),
201
+ Vec3::new(1.414, 0.295, 3.467),
202
+ Vec3::new(2.123, 0.437, 2.823),
203
+ Vec3::new(1.318, 0.205, 1.104),
204
+ Vec3::new(2.377, 0.282, 0.609),
205
+ Vec3::new(0.322, 0.214, 2.186),
206
+ Vec3::new(0.370, 1.177, 1.556),
207
+ Vec3::new(3.059, 0.285, 1.962),
208
+ Vec3::new(0.481, 0.783, 0.776),
209
+ Vec3::new(3.052, 0.471, 2.392),
210
+ Vec3::new(3.448, 1.674, 0.077),
211
+ Vec3::new(0.740, 0.432, 1.896),
212
+ Vec3::new(1.854, 1.004, 2.836),
213
+ Vec3::new(0.002, 0.694, 0.314),
214
+ Vec3::new(0.788, 2.083, 2.875),
215
+ Vec3::new(2.146, 1.481, 2.054),
216
+ Vec3::new(2.013, 3.560, 0.350),
217
+ Vec3::new(0.159, 2.067, 0.047),
218
+ Vec3::new(0.894, 2.478, 3.173),
219
+ Vec3::new(0.415, 1.645, 2.804),
220
+ Vec3::new(1.406, 1.750, 2.598),
221
+ Vec3::new(3.174, 0.109, 2.860),
222
+ Vec3::new(3.572, 1.719, 2.851),
223
+ Vec3::new(3.560, 1.919, 0.537),
224
+ Vec3::new(2.423, 2.251, 0.636),
225
+ Vec3::new(2.897, 3.551, 0.331),
226
+ Vec3::new(2.074, 1.541, 3.473),
227
+ Vec3::new(0.404, 2.508, 3.513),
228
+ Vec3::new(3.610, 0.430, 3.465),
229
+ Vec3::new(3.328, 1.358, 2.086),
230
+ Vec3::new(1.636, 3.488, 3.563),
231
+ Vec3::new(1.491, 0.117, 0.290),
232
+ Vec3::new(3.030, 2.716, 0.233),
233
+ Vec3::new(0.799, 0.809, 3.119),
234
+ Vec3::new(1.233, 2.803, 2.981),
235
+ Vec3::new(3.359, 0.794, 2.779),
236
+ Vec3::new(2.570, 3.453, 0.747),
237
+ Vec3::new(2.809, 2.072, 2.114),
238
+ Vec3::new(1.059, 0.488, 2.781),
239
+ Vec3::new(1.528, 1.557, 3.538),
240
+ Vec3::new(1.031, 2.736, 0.732),
241
+ Vec3::new(2.786, 2.234, 0.996),
242
+ Vec3::new(0.554, 0.860, 2.720),
243
+ Vec3::new(1.883, 2.922, 1.184),
244
+ Vec3::new(3.633, 1.482, 1.365),
245
+ Vec3::new(1.855, 0.115, 3.084),
246
+ Vec3::new(2.635, 2.820, 2.163),
247
+ Vec3::new(2.938, 3.164, 1.871),
248
+ Vec3::new(2.157, 2.966, 0.299),
249
+ Vec3::new(0.167, 2.858, 3.141),
250
+ Vec3::new(0.910, 0.850, 2.379),
251
+ Vec3::new(0.880, 0.198, 1.489),
252
+ Vec3::new(2.501, 1.040, 2.181),
253
+ Vec3::new(1.299, 2.211, 0.381),
254
+ Vec3::new(3.297, 2.153, 1.880),
255
+ Vec3::new(0.624, 2.911, 3.303),
256
+ Vec3::new(3.011, 3.593, 1.100),
257
+ Vec3::new(1.110, 0.613, 1.545),
258
+ Vec3::new(0.879, 2.106, 1.635),
259
+ Vec3::new(1.192, 3.517, 2.385),
260
+ Vec3::new(3.259, 3.613, 3.417),
261
+ Vec3::new(2.418, 1.801, 2.350),
262
+ Vec3::new(0.267, 1.599, 0.265),
263
+ Vec3::new(3.401, 3.257, 0.962),
264
+ Vec3::new(3.238, 0.581, 0.581),
265
+ Vec3::new(1.377, 0.100, 2.984),
266
+ Vec3::new(3.083, 2.902, 1.442),
267
+ Vec3::new(3.112, 1.458, 1.347),
268
+ Vec3::new(1.229, 1.131, 1.563),
269
+ Vec3::new(1.474, 1.393, 2.887),
270
+ Vec3::new(2.585, 2.546, 2.750),
271
+ Vec3::new(1.235, 1.000, 2.862),
272
+ Vec3::new(1.214, 3.466, 1.478),
273
+ Vec3::new(0.531, 3.425, 3.112),
274
+ Vec3::new(0.643, 2.786, 0.242),
275
+ Vec3::new(3.160, 2.544, 1.052),
276
+ Vec3::new(0.764, 1.336, 2.938),
277
+ Vec3::new(3.537, 1.266, 0.419),
278
+ Vec3::new(1.282, 2.323, 0.890),
279
+ Vec3::new(2.381, 1.705, 2.971),
280
+ Vec3::new(2.272, 1.333, 2.515),
281
+ Vec3::new(0.832, 1.705, 2.544),
282
+ Vec3::new(3.042, 3.593, 2.373),
283
+ Vec3::new(2.833, 0.227, 3.367),
284
+ Vec3::new(0.497, 0.377, 2.954),
285
+ Vec3::new(0.836, 1.400, 2.007),
286
+ Vec3::new(1.205, 1.214, 0.129),
287
+ Vec3::new(0.008, 2.973, 2.674),
288
+ Vec3::new(1.593, 1.682, 2.117),
289
+ Vec3::new(1.416, 0.707, 0.222),
290
+ Vec3::new(0.551, 1.523, 1.003),
291
+ Vec3::new(0.322, 3.375, 2.440),
292
+ Vec3::new(3.117, 1.601, 0.548),
293
+ Vec3::new(3.212, 0.517, 3.234),
294
+ Vec3::new(2.648, 2.726, 1.197),
295
+ Vec3::new(0.246, 1.650, 3.374),
296
+ Vec3::new(3.212, 0.114, 0.670),
297
+ Vec3::new(2.732, 2.589, 0.681),
298
+ Vec3::new(1.634, 1.647, 0.766),
299
+ Vec3::new(2.821, 0.451, 0.289),
300
+ Vec3::new(2.886, 1.058, 2.475),
301
+ Vec3::new(0.595, 1.651, 1.682),
302
+ Vec3::new(0.889, 2.590, 1.331),
303
+ Vec3::new(2.652, 1.210, 1.296),
304
+ Vec3::new(1.675, 0.589, 1.992),
305
+ Vec3::new(3.637, 2.500, 2.503),
306
+ Vec3::new(3.555, 0.487, 2.064),
307
+ Vec3::new(0.094, 3.317, 1.440),
308
+ Vec3::new(0.603, 2.504, 0.976),
309
+ Vec3::new(0.518, 0.121, 3.529),
310
+ Vec3::new(1.637, 2.974, 3.631),
311
+ Vec3::new(3.392, 1.942, 1.421),
312
+ Vec3::new(2.746, 2.119, 0.301),
313
+ Vec3::new(2.041, 3.640, 2.513),
314
+ Vec3::new(2.898, 2.362, 3.550),
315
+ Vec3::new(1.713, 0.072, 0.830),
316
+ Vec3::new(2.426, 0.941, 1.689),
317
+ Vec3::new(0.112, 2.528, 2.021),
318
+ Vec3::new(1.365, 0.490, 0.662),
319
+ Vec3::new(1.169, 1.974, 3.511),
320
+ Vec3::new(2.163, 0.955, 1.225),
321
+ Vec3::new(2.368, 2.365, 2.347),
322
+ Vec3::new(0.522, 2.970, 2.782),
323
+ Vec3::new(1.113, 2.953, 3.505),
324
+ Vec3::new(0.964, 0.750, 0.519),
325
+ Vec3::new(2.481, 0.892, 0.844),
326
+ Vec3::new(2.439, 3.000, 3.081),
327
+ Vec3::new(1.124, 1.592, 1.680),
328
+ Vec3::new(0.779, 3.290, 2.545),
329
+ Vec3::new(3.524, 3.407, 0.146),
330
+ Vec3::new(0.387, 2.079, 3.142),
331
+ Vec3::new(2.382, 2.341, 1.830),
332
+ Vec3::new(0.818, 1.990, 1.072),
333
+ Vec3::new(1.189, 2.997, 2.467),
334
+ Vec3::new(1.567, 0.416, 1.508),
335
+ Vec3::new(0.178, 2.400, 0.438),
336
+ Vec3::new(1.697, 1.351, 0.308),
337
+ Vec3::new(0.343, 1.900, 1.327),
338
+ Vec3::new(1.633, 0.542, 2.791),
339
+ Vec3::new(3.305, 0.251, 0.218),
340
+ Vec3::new(3.398, 1.997, 3.317),
341
+ Vec3::new(2.052, 3.254, 3.469),
342
+ Vec3::new(3.610, 2.348, 2.991),
343
+ Vec3::new(3.018, 3.146, 3.602),
344
+ Vec3::new(0.757, 3.602, 2.080),
345
+ Vec3::new(3.616, 2.224, 0.954),
346
+ Vec3::new(2.146, 1.491, 1.467),
347
+ Vec3::new(1.913, 0.103, 1.357),
348
+ Vec3::new(0.972, 3.087, 1.194),
349
+ Vec3::new(1.471, 0.828, 2.419),
350
+ Vec3::new(1.171, 0.197, 1.888),
351
+ Vec3::new(0.234, 3.019, 0.436),
352
+ Vec3::new(2.050, 2.383, 1.154),
353
+ Vec3::new(0.925, 3.178, 3.033),
354
+ Vec3::new(0.402, 2.001, 0.729),
355
+ Vec3::new(0.287, 0.544, 1.728),
356
+ Vec3::new(1.835, 2.509, 1.785),
357
+ Vec3::new(0.087, 0.363, 0.805),
358
+ Vec3::new(2.751, 1.569, 2.732),
359
+ Vec3::new(2.628, 0.955, 0.304),
360
+ Vec3::new(3.145, 2.627, 1.952),
361
+ Vec3::new(1.806, 3.111, 1.783),
362
+ Vec3::new(1.218, 3.215, 0.694),
363
+ Vec3::new(2.500, 0.118, 0.124),
364
+ Vec3::new(0.300, 3.378, 1.865),
365
+ Vec3::new(2.497, 1.136, 3.500),
366
+ Vec3::new(0.480, 0.666, 3.499),
367
+ Vec3::new(0.211, 1.266, 0.832),
368
+ Vec3::new(0.902, 1.255, 0.557),
369
+ Vec3::new(2.665, 1.582, 3.374),
370
+ Vec3::new(1.008, 1.863, 2.083),
371
+ Vec3::new(2.482, 0.149, 1.203),
372
+ Vec3::new(1.613, 3.580, 1.706),
373
+ Vec3::new(2.827, 3.042, 2.643),
374
+ Vec3::new(2.411, 3.191, 1.754),
375
+ Vec3::new(2.430, 2.171, 1.348),
376
+ Vec3::new(1.892, 0.396, 0.419),
377
+ Vec3::new(3.573, 0.024, 1.141),
378
+ Vec3::new(1.261, 1.659, 0.304),
379
+ Vec3::new(3.427, 0.996, 1.294),
380
+ Vec3::new(2.119, 2.166, 0.171),
381
+ Vec3::new(3.055, 2.366, 2.919),
382
+ Vec3::new(2.709, 3.067, 0.386),
383
+ Vec3::new(1.324, 0.742, 3.292),
384
+ Vec3::new(1.144, 1.326, 2.533),
385
+ Vec3::new(3.236, 2.821, 2.810),
386
+ Vec3::new(2.336, 0.771, 3.187),
387
+ Vec3::new(0.180, 1.242, 2.964),
388
+ Vec3::new(1.940, 1.719, 2.690),
389
+ Vec3::new(0.297, 2.477, 1.347),
390
+ Vec3::new(0.444, 1.774, 2.237),
391
+ Vec3::new(2.761, 2.060, 2.587),
392
+ Vec3::new(2.533, 3.440, 3.398),
393
+ Vec3::new(2.429, 1.179, 2.951),
394
+ Vec3::new(2.706, 3.233, 1.356),
395
+ Vec3::new(1.708, 2.953, 2.679),
396
+ Vec3::new(1.193, 3.308, 1.948),
397
+ Vec3::new(2.998, 2.479, 2.367),
398
+ Vec3::new(2.048, 2.551, 3.504),
399
+ Vec3::new(0.653, 2.504, 1.843),
400
+ Vec3::new(2.999, 2.263, 1.488),
401
+ Vec3::new(2.640, 3.329, 2.239),
402
+ Vec3::new(0.618, 3.058, 2.109),
403
+ Vec3::new(1.639, 1.110, 3.319),
404
+ Vec3::new(2.090, 3.276, 0.830),
405
+ Vec3::new(1.398, 2.531, 3.468),
406
+ Vec3::new(1.524, 2.769, 0.845),
407
+ Vec3::new(0.745, 1.509, 0.104),
408
+ ],
409
+ );
@@ -0,0 +1,150 @@
1
+ use eightyseven::structure::Atom;
2
+ use glam::Vec3;
3
+
4
+ use crate::convert::Convert;
5
+
6
+ /// A cuboid water box.
7
+ pub struct WaterBox<const NATOMS: usize, const NATOMS_PER_RES: usize> {
8
+ // TODO: Make this ResName and AtomName.
9
+ resname: &'static str,
10
+ names: [&'static str; NATOMS_PER_RES],
11
+ /// Box dimensions.
12
+ dimensions: Vec3,
13
+ /// A list of the positions.
14
+ ///
15
+ /// For atomistic ordering, the canonical water ordering is oxygen first, followed by
16
+ /// hydrogens. That is, the first atom in the residue is the atom that is taken as the position
17
+ /// for the solvent-structure collision checks.
18
+ positions: [Vec3; NATOMS],
19
+ }
20
+
21
+ impl<const NATOMS: usize, const NATOMS_PER_RES: usize> WaterBox<NATOMS, NATOMS_PER_RES> {
22
+ /// Creates a new [`WaterBox`].
23
+ pub const fn new(
24
+ resname: &'static str,
25
+ names: [&'static str; NATOMS_PER_RES],
26
+ dimensions: Vec3,
27
+ positions: [Vec3; NATOMS],
28
+ ) -> Self {
29
+ // The number of atoms must be a multiple of the number of atoms per residue.
30
+ const { assert!(NATOMS.is_multiple_of(NATOMS_PER_RES)) }
31
+
32
+ Self {
33
+ resname,
34
+ names,
35
+ dimensions,
36
+ positions,
37
+ }
38
+ }
39
+
40
+ /// Returns solvent residue name for this [`WaterBox`].
41
+ pub const fn resname(&self) -> &'static str {
42
+ self.resname
43
+ }
44
+
45
+ /// Returns the number of points per residue for this [`WaterBox`].
46
+ pub const fn residue_points(&self) -> usize {
47
+ NATOMS_PER_RES
48
+ }
49
+
50
+ /// Returns the dimensions of this [`WaterBox`].
51
+ pub const fn dimensions(&self) -> Vec3 {
52
+ self.dimensions
53
+ }
54
+
55
+ /// Return an iterator over the positions must be considered for solvent-structure collisions.
56
+ pub fn positions(&'_ self) -> PositionsIterator<'_> {
57
+ PositionsIterator {
58
+ step: NATOMS_PER_RES,
59
+ idx: 0,
60
+ positions: &self.positions,
61
+ }
62
+ }
63
+
64
+ pub fn residues(&'_ self) -> ResiduesIterator<'_> {
65
+ ResiduesIterator {
66
+ step: NATOMS_PER_RES,
67
+ idx: 0,
68
+ resname: self.resname,
69
+ names: &self.names,
70
+ positions: &self.positions,
71
+ }
72
+ }
73
+ }
74
+
75
+ pub struct PositionsIterator<'wb> {
76
+ step: usize,
77
+ idx: usize,
78
+ positions: &'wb [Vec3],
79
+ }
80
+
81
+ impl<'wb> Iterator for PositionsIterator<'wb> {
82
+ type Item = Vec3;
83
+
84
+ fn next(&mut self) -> Option<Self::Item> {
85
+ let idx = self.idx;
86
+ self.idx += self.step;
87
+ self.positions.get(idx).copied()
88
+ }
89
+ }
90
+
91
+ pub struct ResiduesIterator<'wb> {
92
+ step: usize,
93
+ idx: usize,
94
+ resname: &'static str,
95
+ names: &'wb [&'static str],
96
+ positions: &'wb [Vec3],
97
+ }
98
+
99
+ pub struct Residue<'wb> {
100
+ resname: &'static str,
101
+ names: &'wb [&'static str],
102
+ positions: &'wb [Vec3],
103
+ }
104
+
105
+ impl<'wb> Residue<'wb> {
106
+ // TODO: Maybe this better fits where it is used. Here we start to introduce implementation
107
+ // details that are more local at the call site.
108
+ pub fn atoms<'a: 'wb>(
109
+ &'wb self,
110
+ resnum: &'a mut u32,
111
+ atomnum: &'a mut u32,
112
+ translation: Vec3,
113
+ ) -> impl Iterator<Item = Atom> + use<'wb> {
114
+ let rn = *resnum;
115
+ *resnum += 1;
116
+
117
+ Iterator::zip(self.positions.iter(), self.names).map(move |(&pos, &name)| {
118
+ let an = *atomnum;
119
+ *atomnum += 1;
120
+
121
+ Atom {
122
+ resnum: rn,
123
+ resname: self.resname.into(),
124
+ atomname: name.into(),
125
+ atomnum: an,
126
+ position: (pos + translation).convert(),
127
+ velocity: Default::default(),
128
+ }
129
+ })
130
+ }
131
+ }
132
+
133
+ impl<'wb> Iterator for ResiduesIterator<'wb> {
134
+ type Item = Residue<'wb>;
135
+
136
+ fn next(&mut self) -> Option<Self::Item> {
137
+ let idx = self.idx;
138
+ self.idx += self.step;
139
+ let positions = self.positions.get(idx..self.idx)?;
140
+ Some(Self::Item {
141
+ resname: self.resname,
142
+ names: self.names,
143
+ positions,
144
+ })
145
+ }
146
+ }
147
+
148
+ // Include the actual water coordinates.
149
+ include!("martini.rs");
150
+ include!("tip3p.rs");