protein_core/data/connect/
protein.rs

1use crate::structure::AtomName;
2
3/// Connectivity within a Ala residue.
4/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
5pub const ALA_CONNECT_NORMAL: [(AtomName, AtomName, u8); 9] = [
6    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
7    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
8    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
9    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
10    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
11    (AtomName(*b"1HB "), AtomName(*b"CB  "), 1),
12    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
13    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
14    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
15];
16
17/// Connectivity within a Cym residue.
18/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
19pub const CYM_CONNECT_NORMAL: [(AtomName, AtomName, u8); 9] = [
20    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
21    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
22    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
23    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
24    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
25    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
26    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
27    (AtomName(*b"SG  "), AtomName(*b"CB  "), 1),
28    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
29];
30
31/// Connectivity within a Cys residue.
32/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
33pub const CYS_CONNECT_NORMAL: [(AtomName, AtomName, u8); 10] = [
34    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
35    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
36    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
37    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
38    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
39    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
40    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
41    (AtomName(*b"SG  "), AtomName(*b"CB  "), 1),
42    (AtomName(*b"HG  "), AtomName(*b"SG  "), 1),
43    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
44];
45
46/// Connectivity within a Cyx residue.
47/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
48pub const CYX_CONNECT_NORMAL: [(AtomName, AtomName, u8); 9] = [
49    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
50    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
51    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
52    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
53    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
54    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
55    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
56    (AtomName(*b"SG  "), AtomName(*b"CB  "), 1),
57    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
58];
59
60/// Connectivity within a Asp residue.
61/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
62pub const ASP_CONNECT_NORMAL: [(AtomName, AtomName, u8); 11] = [
63    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
64    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
65    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
66    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
67    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
68    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
69    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
70    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
71    (AtomName(*b"OD1 "), AtomName(*b"CG  "), 2),
72    (AtomName(*b"OD2 "), AtomName(*b"CG  "), 1),
73    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
74];
75
76/// Connectivity within a Ash residue.
77/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
78pub const ASH_CONNECT_NORMAL: [(AtomName, AtomName, u8); 12] = [
79    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
80    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
81    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
82    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
83    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
84    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
85    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
86    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
87    (AtomName(*b"OD1 "), AtomName(*b"CG  "), 2),
88    (AtomName(*b"OD2 "), AtomName(*b"CG  "), 1),
89    (AtomName(*b"OD2 "), AtomName(*b"HD2 "), 1),
90    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
91];
92
93/// Connectivity within a Glu residue.
94/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
95pub const GLU_CONNECT_NORMAL: [(AtomName, AtomName, u8); 14] = [
96    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
97    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
98    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
99    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
100    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
101    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
102    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
103    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
104    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
105    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
106    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
107    (AtomName(*b"OE1 "), AtomName(*b"CD  "), 2),
108    (AtomName(*b"OE2 "), AtomName(*b"CD  "), 1),
109    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
110];
111
112/// Connectivity within a Glp residue.
113/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
114pub const GLP_CONNECT_NORMAL: [(AtomName, AtomName, u8); 15] = [
115    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
116    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
117    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
118    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
119    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
120    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
121    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
122    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
123    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
124    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
125    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
126    (AtomName(*b"OE1 "), AtomName(*b"CD  "), 2),
127    (AtomName(*b"OE2 "), AtomName(*b"CD  "), 1),
128    (AtomName(*b"OE2 "), AtomName(*b"HE2 "), 1),
129    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
130];
131
132/// Connectivity within a Phe residue.
133/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
134pub const PHE_CONNECT_NORMAL: [(AtomName, AtomName, u8); 20] = [
135    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
136    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
137    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
138    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
139    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
140    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
141    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
142    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
143    (AtomName(*b"CD1 "), AtomName(*b"CG  "), 2),
144    (AtomName(*b"1HD "), AtomName(*b"CD1 "), 1),
145    (AtomName(*b"CE1 "), AtomName(*b"CD1 "), 1),
146    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
147    (AtomName(*b"CZ  "), AtomName(*b"CE1 "), 2),
148    (AtomName(*b"HZ  "), AtomName(*b"CZ  "), 1),
149    (AtomName(*b"CE2 "), AtomName(*b"CZ  "), 1),
150    (AtomName(*b"2HE "), AtomName(*b"CE2 "), 1),
151    (AtomName(*b"CD2 "), AtomName(*b"CE2 "), 2),
152    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
153    (AtomName(*b"CD2 "), AtomName(*b"CG  "), 1),
154    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
155];
156
157/// Connectivity within a Gly residue.
158/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
159pub const GLY_CONNECT_NORMAL: [(AtomName, AtomName, u8); 6] = [
160    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
161    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
162    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
163    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
164    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
165    (AtomName(*b"CA  "), AtomName(*b"3HA "), 1),
166];
167
168/// Connectivity within a Hip residue.
169/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
170pub const HIP_CONNECT_NORMAL: [(AtomName, AtomName, u8); 18] = [
171    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
172    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
173    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
174    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
175    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
176    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
177    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
178    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
179    (AtomName(*b"ND1 "), AtomName(*b"CG  "), 1),
180    (AtomName(*b"1HD "), AtomName(*b"ND1 "), 1),
181    (AtomName(*b"CE1 "), AtomName(*b"ND1 "), 2),
182    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
183    (AtomName(*b"NE2 "), AtomName(*b"CE1 "), 1),
184    (AtomName(*b"2HE "), AtomName(*b"NE2 "), 1),
185    (AtomName(*b"CD2 "), AtomName(*b"NE2 "), 1),
186    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
187    (AtomName(*b"CG  "), AtomName(*b"CD2 "), 2),
188    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
189];
190
191/// Connectivity within a Hie residue.
192/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
193pub const HIE_CONNECT_NORMAL: [(AtomName, AtomName, u8); 17] = [
194    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
195    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
196    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
197    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
198    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
199    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
200    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
201    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
202    (AtomName(*b"ND1 "), AtomName(*b"CG  "), 1),
203    (AtomName(*b"CE1 "), AtomName(*b"ND1 "), 2),
204    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
205    (AtomName(*b"NE2 "), AtomName(*b"CE1 "), 1),
206    (AtomName(*b"2HE "), AtomName(*b"NE2 "), 1),
207    (AtomName(*b"CD2 "), AtomName(*b"NE2 "), 1),
208    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
209    (AtomName(*b"CG  "), AtomName(*b"CD2 "), 2),
210    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
211];
212
213/// Connectivity within a Hid residue.
214/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
215pub const HID_CONNECT_NORMAL: [(AtomName, AtomName, u8); 17] = [
216    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
217    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
218    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
219    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
220    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
221    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
222    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
223    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
224    (AtomName(*b"ND1 "), AtomName(*b"CG  "), 1),
225    (AtomName(*b"1HD "), AtomName(*b"ND1 "), 1),
226    (AtomName(*b"CE1 "), AtomName(*b"ND1 "), 1),
227    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
228    (AtomName(*b"NE2 "), AtomName(*b"CE1 "), 2),
229    (AtomName(*b"CD2 "), AtomName(*b"NE2 "), 1),
230    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
231    (AtomName(*b"CG  "), AtomName(*b"CD2 "), 2),
232    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
233];
234
235/// Connectivity within a Ile residue.
236/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
237pub const ILE_CONNECT_NORMAL: [(AtomName, AtomName, u8); 18] = [
238    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
239    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
240    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
241    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
242    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
243    (AtomName(*b"HB  "), AtomName(*b"CB  "), 1),
244    (AtomName(*b"CG2 "), AtomName(*b"CB  "), 1),
245    (AtomName(*b"1HG2"), AtomName(*b"CG2 "), 1),
246    (AtomName(*b"2HG2"), AtomName(*b"CG2 "), 1),
247    (AtomName(*b"3HG2"), AtomName(*b"CG2 "), 1),
248    (AtomName(*b"CG1 "), AtomName(*b"CB  "), 1),
249    (AtomName(*b"2HG1"), AtomName(*b"CG1 "), 1),
250    (AtomName(*b"3HG1"), AtomName(*b"CG1 "), 1),
251    (AtomName(*b"CD1 "), AtomName(*b"CG1 "), 1),
252    (AtomName(*b"1HD1"), AtomName(*b"CD1 "), 1),
253    (AtomName(*b"2HD1"), AtomName(*b"CD1 "), 1),
254    (AtomName(*b"3HD1"), AtomName(*b"CD1 "), 1),
255    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
256];
257
258/// Connectivity within a Lys residue.
259/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
260pub const LYS_CONNECT_NORMAL: [(AtomName, AtomName, u8); 21] = [
261    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
262    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
263    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
264    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
265    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
266    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
267    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
268    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
269    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
270    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
271    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
272    (AtomName(*b"2HD "), AtomName(*b"CD  "), 1),
273    (AtomName(*b"3HD "), AtomName(*b"CD  "), 1),
274    (AtomName(*b"CE  "), AtomName(*b"CD  "), 1),
275    (AtomName(*b"2HE "), AtomName(*b"CE  "), 1),
276    (AtomName(*b"3HE "), AtomName(*b"CE  "), 1),
277    (AtomName(*b"NZ  "), AtomName(*b"CE  "), 1),
278    (AtomName(*b"1HZ "), AtomName(*b"NZ  "), 1),
279    (AtomName(*b"2HZ "), AtomName(*b"NZ  "), 1),
280    (AtomName(*b"3HZ "), AtomName(*b"NZ  "), 1),
281    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
282];
283
284/// Connectivity within a Leu residue.
285/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
286pub const LEU_CONNECT_NORMAL: [(AtomName, AtomName, u8); 18] = [
287    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
288    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
289    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
290    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
291    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
292    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
293    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
294    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
295    (AtomName(*b"HG  "), AtomName(*b"CG  "), 1),
296    (AtomName(*b"CD1 "), AtomName(*b"CG  "), 1),
297    (AtomName(*b"1HD1"), AtomName(*b"CD1 "), 1),
298    (AtomName(*b"2HD1"), AtomName(*b"CD1 "), 1),
299    (AtomName(*b"3HD1"), AtomName(*b"CD1 "), 1),
300    (AtomName(*b"CD2 "), AtomName(*b"CG  "), 1),
301    (AtomName(*b"1HD2"), AtomName(*b"CD2 "), 1),
302    (AtomName(*b"2HD2"), AtomName(*b"CD2 "), 1),
303    (AtomName(*b"3HD2"), AtomName(*b"CD2 "), 1),
304    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
305];
306
307/// Connectivity within a Met residue.
308/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
309pub const MET_CONNECT_NORMAL: [(AtomName, AtomName, u8); 16] = [
310    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
311    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
312    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
313    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
314    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
315    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
316    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
317    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
318    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
319    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
320    (AtomName(*b"SD  "), AtomName(*b"CG  "), 1),
321    (AtomName(*b"CE  "), AtomName(*b"SD  "), 1),
322    (AtomName(*b"1HE "), AtomName(*b"CE  "), 1),
323    (AtomName(*b"2HE "), AtomName(*b"CE  "), 1),
324    (AtomName(*b"3HE "), AtomName(*b"CE  "), 1),
325    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
326];
327
328/// Connectivity within a Asn residue.
329/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
330pub const ASN_CONNECT_NORMAL: [(AtomName, AtomName, u8); 13] = [
331    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
332    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
333    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
334    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
335    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
336    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
337    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
338    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
339    (AtomName(*b"OD1 "), AtomName(*b"CG  "), 2),
340    (AtomName(*b"ND2 "), AtomName(*b"CG  "), 1),
341    (AtomName(*b"1HD2"), AtomName(*b"ND2 "), 1),
342    (AtomName(*b"2HD2"), AtomName(*b"ND2 "), 1),
343    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
344];
345
346/// Connectivity within a Pro residue.
347/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
348pub const PRO_CONNECT_NORMAL: [(AtomName, AtomName, u8); 14] = [
349    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
350    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
351    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
352    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
353    (AtomName(*b"3HD "), AtomName(*b"CD  "), 1),
354    (AtomName(*b"2HD "), AtomName(*b"CD  "), 1),
355    (AtomName(*b"CG  "), AtomName(*b"CD  "), 1),
356    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
357    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
358    (AtomName(*b"CB  "), AtomName(*b"CG  "), 1),
359    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
360    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
361    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
362    (AtomName(*b"N   "), AtomName(*b"CD  "), 1),
363];
364
365/// Connectivity within a Gln residue.
366/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
367pub const GLN_CONNECT_NORMAL: [(AtomName, AtomName, u8); 16] = [
368    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
369    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
370    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
371    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
372    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
373    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
374    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
375    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
376    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
377    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
378    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
379    (AtomName(*b"OE1 "), AtomName(*b"CD  "), 2),
380    (AtomName(*b"NE2 "), AtomName(*b"CD  "), 1),
381    (AtomName(*b"1HE2"), AtomName(*b"NE2 "), 1),
382    (AtomName(*b"2HE2"), AtomName(*b"NE2 "), 1),
383    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
384];
385
386/// Connectivity within a Arg residue.
387/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
388pub const ARG_CONNECT_NORMAL: [(AtomName, AtomName, u8); 23] = [
389    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
390    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
391    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
392    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
393    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
394    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
395    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
396    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
397    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
398    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
399    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
400    (AtomName(*b"2HD "), AtomName(*b"CD  "), 1),
401    (AtomName(*b"3HD "), AtomName(*b"CD  "), 1),
402    (AtomName(*b"NE  "), AtomName(*b"CD  "), 1),
403    (AtomName(*b"HE  "), AtomName(*b"NE  "), 1),
404    (AtomName(*b"CZ  "), AtomName(*b"NE  "), 1),
405    (AtomName(*b"NH1 "), AtomName(*b"CZ  "), 2),
406    (AtomName(*b"1HH1"), AtomName(*b"NH1 "), 1),
407    (AtomName(*b"2HH1"), AtomName(*b"NH1 "), 1),
408    (AtomName(*b"NH2 "), AtomName(*b"CZ  "), 1),
409    (AtomName(*b"1HH2"), AtomName(*b"NH2 "), 1),
410    (AtomName(*b"2HH2"), AtomName(*b"NH2 "), 1),
411    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
412];
413
414/// Connectivity within a Ser residue.
415/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
416pub const SER_CONNECT_NORMAL: [(AtomName, AtomName, u8); 10] = [
417    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
418    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
419    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
420    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
421    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
422    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
423    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
424    (AtomName(*b"OG  "), AtomName(*b"CB  "), 1),
425    (AtomName(*b"HG  "), AtomName(*b"OG  "), 1),
426    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
427];
428
429/// Connectivity within a Thr residue.
430/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
431pub const THR_CONNECT_NORMAL: [(AtomName, AtomName, u8); 13] = [
432    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
433    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
434    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
435    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
436    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
437    (AtomName(*b"HB  "), AtomName(*b"CB  "), 1),
438    (AtomName(*b"CG2 "), AtomName(*b"CB  "), 1),
439    (AtomName(*b"1HG2"), AtomName(*b"CG2 "), 1),
440    (AtomName(*b"2HG2"), AtomName(*b"CG2 "), 1),
441    (AtomName(*b"3HG2"), AtomName(*b"CG2 "), 1),
442    (AtomName(*b"OG1 "), AtomName(*b"CB  "), 1),
443    (AtomName(*b"1HG "), AtomName(*b"OG1 "), 1),
444    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
445];
446
447/// Connectivity within a Val residue.
448/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
449pub const VAL_CONNECT_NORMAL: [(AtomName, AtomName, u8); 15] = [
450    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
451    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
452    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
453    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
454    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
455    (AtomName(*b"HB  "), AtomName(*b"CB  "), 1),
456    (AtomName(*b"CG1 "), AtomName(*b"CB  "), 1),
457    (AtomName(*b"1HG1"), AtomName(*b"CG1 "), 1),
458    (AtomName(*b"2HG1"), AtomName(*b"CG1 "), 1),
459    (AtomName(*b"3HG1"), AtomName(*b"CG1 "), 1),
460    (AtomName(*b"CG2 "), AtomName(*b"CB  "), 1),
461    (AtomName(*b"1HG2"), AtomName(*b"CG2 "), 1),
462    (AtomName(*b"2HG2"), AtomName(*b"CG2 "), 1),
463    (AtomName(*b"3HG2"), AtomName(*b"CG2 "), 1),
464    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
465];
466
467/// Connectivity within a Trp residue.
468/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
469pub const TRP_CONNECT_NORMAL: [(AtomName, AtomName, u8); 25] = [
470    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
471    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
472    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
473    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
474    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
475    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
476    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
477    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
478    (AtomName(*b"CD1 "), AtomName(*b"CG  "), 2),
479    (AtomName(*b"1HD "), AtomName(*b"CD1 "), 1),
480    (AtomName(*b"NE1 "), AtomName(*b"CD1 "), 1),
481    (AtomName(*b"1HE "), AtomName(*b"NE1 "), 1),
482    (AtomName(*b"CE2 "), AtomName(*b"NE1 "), 1),
483    (AtomName(*b"CZ2 "), AtomName(*b"CE2 "), 1),
484    (AtomName(*b"2HZ "), AtomName(*b"CZ2 "), 1),
485    (AtomName(*b"CH2 "), AtomName(*b"CZ2 "), 2),
486    (AtomName(*b"2HH "), AtomName(*b"CH2 "), 1),
487    (AtomName(*b"CZ3 "), AtomName(*b"CH2 "), 1),
488    (AtomName(*b"3HZ "), AtomName(*b"CZ3 "), 1),
489    (AtomName(*b"CE3 "), AtomName(*b"CZ3 "), 2),
490    (AtomName(*b"3HE "), AtomName(*b"CE3 "), 1),
491    (AtomName(*b"CD2 "), AtomName(*b"CE3 "), 1),
492    (AtomName(*b"CG  "), AtomName(*b"CD2 "), 1),
493    (AtomName(*b"CE2 "), AtomName(*b"CD2 "), 2),
494    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
495];
496
497/// Connectivity within a Tyr residue.
498/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
499pub const TYR_CONNECT_NORMAL: [(AtomName, AtomName, u8); 21] = [
500    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
501    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
502    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
503    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
504    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
505    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
506    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
507    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
508    (AtomName(*b"CD1 "), AtomName(*b"CG  "), 2),
509    (AtomName(*b"1HD "), AtomName(*b"CD1 "), 1),
510    (AtomName(*b"CE1 "), AtomName(*b"CD1 "), 1),
511    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
512    (AtomName(*b"CZ  "), AtomName(*b"CE1 "), 2),
513    (AtomName(*b"OH  "), AtomName(*b"CZ  "), 1),
514    (AtomName(*b"HH  "), AtomName(*b"OH  "), 1),
515    (AtomName(*b"CE2 "), AtomName(*b"CZ  "), 1),
516    (AtomName(*b"2HE "), AtomName(*b"CE2 "), 1),
517    (AtomName(*b"CD2 "), AtomName(*b"CE2 "), 2),
518    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
519    (AtomName(*b"CD2 "), AtomName(*b"CG  "), 1),
520    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
521];
522
523/// Connectivity within a Nme residue.
524/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
525pub const NME_CONNECT_NORMAL: [(AtomName, AtomName, u8); 5] = [
526    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
527    (AtomName(*b"N   "), AtomName(*b"CH3 "), 1),
528    (AtomName(*b"CH3 "), AtomName(*b"1HH3"), 1),
529    (AtomName(*b"CH3 "), AtomName(*b"2HH3"), 1),
530    (AtomName(*b"CH3 "), AtomName(*b"3HH3"), 1),
531];
532
533/// Connectivity within a Ace residue.
534/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
535pub const ACE_CONNECT_NORMAL: [(AtomName, AtomName, u8); 5] = [
536    (AtomName(*b"CH3 "), AtomName(*b"1HH3"), 1),
537    (AtomName(*b"CH3 "), AtomName(*b"2HH3"), 1),
538    (AtomName(*b"CH3 "), AtomName(*b"3HH3"), 1),
539    (AtomName(*b"CH3 "), AtomName(*b"C   "), 1),
540    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
541];
542
543/// Connectivity within a Ala residue.
544/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
545pub const ALA_CONNECT_NTERM: [(AtomName, AtomName, u8); 11] = [
546    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
547    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
548    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
549    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
550    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
551    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
552    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
553    (AtomName(*b"1HB "), AtomName(*b"CB  "), 1),
554    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
555    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
556    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
557];
558
559/// Connectivity within a Cys residue.
560/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
561pub const CYS_CONNECT_NTERM: [(AtomName, AtomName, u8); 12] = [
562    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
563    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
564    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
565    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
566    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
567    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
568    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
569    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
570    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
571    (AtomName(*b"SG  "), AtomName(*b"CB  "), 1),
572    (AtomName(*b"HG  "), AtomName(*b"SG  "), 1),
573    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
574];
575
576/// Connectivity within a Cyx residue.
577/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
578pub const CYX_CONNECT_NTERM: [(AtomName, AtomName, u8); 11] = [
579    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
580    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
581    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
582    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
583    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
584    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
585    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
586    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
587    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
588    (AtomName(*b"SG  "), AtomName(*b"CB  "), 1),
589    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
590];
591
592/// Connectivity within a Asp residue.
593/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
594pub const ASP_CONNECT_NTERM: [(AtomName, AtomName, u8); 13] = [
595    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
596    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
597    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
598    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
599    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
600    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
601    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
602    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
603    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
604    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
605    (AtomName(*b"OD1 "), AtomName(*b"CG  "), 2),
606    (AtomName(*b"OD2 "), AtomName(*b"CG  "), 1),
607    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
608];
609
610/// Connectivity within a Ash residue.
611/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
612pub const ASH_CONNECT_NTERM: [(AtomName, AtomName, u8); 14] = [
613    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
614    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
615    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
616    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
617    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
618    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
619    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
620    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
621    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
622    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
623    (AtomName(*b"OD1 "), AtomName(*b"CG  "), 2),
624    (AtomName(*b"OD2 "), AtomName(*b"CG  "), 1),
625    (AtomName(*b"OD2 "), AtomName(*b"HD2 "), 1),
626    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
627];
628
629/// Connectivity within a Glu residue.
630/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
631pub const GLU_CONNECT_NTERM: [(AtomName, AtomName, u8); 16] = [
632    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
633    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
634    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
635    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
636    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
637    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
638    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
639    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
640    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
641    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
642    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
643    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
644    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
645    (AtomName(*b"OE1 "), AtomName(*b"CD  "), 2),
646    (AtomName(*b"OE2 "), AtomName(*b"CD  "), 1),
647    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
648];
649
650/// Connectivity within a Glp residue.
651/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
652pub const GLP_CONNECT_NTERM: [(AtomName, AtomName, u8); 17] = [
653    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
654    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
655    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
656    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
657    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
658    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
659    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
660    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
661    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
662    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
663    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
664    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
665    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
666    (AtomName(*b"OE1 "), AtomName(*b"CD  "), 2),
667    (AtomName(*b"OE2 "), AtomName(*b"CD  "), 1),
668    (AtomName(*b"OE2 "), AtomName(*b"HE2 "), 1),
669    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
670];
671
672/// Connectivity within a Phe residue.
673/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
674pub const PHE_CONNECT_NTERM: [(AtomName, AtomName, u8); 22] = [
675    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
676    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
677    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
678    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
679    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
680    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
681    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
682    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
683    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
684    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
685    (AtomName(*b"CD1 "), AtomName(*b"CG  "), 2),
686    (AtomName(*b"1HD "), AtomName(*b"CD1 "), 1),
687    (AtomName(*b"CE1 "), AtomName(*b"CD1 "), 1),
688    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
689    (AtomName(*b"CZ  "), AtomName(*b"CE1 "), 2),
690    (AtomName(*b"HZ  "), AtomName(*b"CZ  "), 1),
691    (AtomName(*b"CE2 "), AtomName(*b"CZ  "), 1),
692    (AtomName(*b"2HE "), AtomName(*b"CE2 "), 1),
693    (AtomName(*b"CD2 "), AtomName(*b"CE2 "), 2),
694    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
695    (AtomName(*b"CD2 "), AtomName(*b"CG  "), 1),
696    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
697];
698
699/// Connectivity within a Gly residue.
700/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
701pub const GLY_CONNECT_NTERM: [(AtomName, AtomName, u8); 8] = [
702    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
703    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
704    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
705    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
706    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
707    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
708    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
709    (AtomName(*b"CA  "), AtomName(*b"3HA "), 1),
710];
711
712/// Connectivity within a Hip residue.
713/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
714pub const HIP_CONNECT_NTERM: [(AtomName, AtomName, u8); 20] = [
715    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
716    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
717    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
718    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
719    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
720    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
721    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
722    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
723    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
724    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
725    (AtomName(*b"ND1 "), AtomName(*b"CG  "), 1),
726    (AtomName(*b"1HD "), AtomName(*b"ND1 "), 1),
727    (AtomName(*b"CE1 "), AtomName(*b"ND1 "), 2),
728    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
729    (AtomName(*b"NE2 "), AtomName(*b"CE1 "), 1),
730    (AtomName(*b"2HE "), AtomName(*b"NE2 "), 1),
731    (AtomName(*b"CD2 "), AtomName(*b"NE2 "), 1),
732    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
733    (AtomName(*b"CG  "), AtomName(*b"CD2 "), 2),
734    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
735];
736
737/// Connectivity within a Hie residue.
738/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
739pub const HIE_CONNECT_NTERM: [(AtomName, AtomName, u8); 19] = [
740    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
741    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
742    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
743    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
744    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
745    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
746    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
747    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
748    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
749    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
750    (AtomName(*b"ND1 "), AtomName(*b"CG  "), 1),
751    (AtomName(*b"CE1 "), AtomName(*b"ND1 "), 2),
752    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
753    (AtomName(*b"NE2 "), AtomName(*b"CE1 "), 1),
754    (AtomName(*b"2HE "), AtomName(*b"NE2 "), 1),
755    (AtomName(*b"CD2 "), AtomName(*b"NE2 "), 1),
756    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
757    (AtomName(*b"CG  "), AtomName(*b"CD2 "), 2),
758    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
759];
760
761/// Connectivity within a Hid residue.
762/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
763pub const HID_CONNECT_NTERM: [(AtomName, AtomName, u8); 19] = [
764    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
765    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
766    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
767    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
768    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
769    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
770    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
771    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
772    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
773    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
774    (AtomName(*b"ND1 "), AtomName(*b"CG  "), 1),
775    (AtomName(*b"1HD "), AtomName(*b"ND1 "), 1),
776    (AtomName(*b"CE1 "), AtomName(*b"ND1 "), 1),
777    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
778    (AtomName(*b"NE2 "), AtomName(*b"CE1 "), 2),
779    (AtomName(*b"CD2 "), AtomName(*b"NE2 "), 1),
780    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
781    (AtomName(*b"CG  "), AtomName(*b"CD2 "), 2),
782    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
783];
784
785/// Connectivity within a Ile residue.
786/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
787pub const ILE_CONNECT_NTERM: [(AtomName, AtomName, u8); 20] = [
788    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
789    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
790    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
791    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
792    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
793    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
794    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
795    (AtomName(*b"HB  "), AtomName(*b"CB  "), 1),
796    (AtomName(*b"CG2 "), AtomName(*b"CB  "), 1),
797    (AtomName(*b"1HG2"), AtomName(*b"CG2 "), 1),
798    (AtomName(*b"2HG2"), AtomName(*b"CG2 "), 1),
799    (AtomName(*b"3HG2"), AtomName(*b"CG2 "), 1),
800    (AtomName(*b"CG1 "), AtomName(*b"CB  "), 1),
801    (AtomName(*b"2HG1"), AtomName(*b"CG1 "), 1),
802    (AtomName(*b"3HG1"), AtomName(*b"CG1 "), 1),
803    (AtomName(*b"CD1 "), AtomName(*b"CG1 "), 1),
804    (AtomName(*b"1HD1"), AtomName(*b"CD1 "), 1),
805    (AtomName(*b"2HD1"), AtomName(*b"CD1 "), 1),
806    (AtomName(*b"3HD1"), AtomName(*b"CD1 "), 1),
807    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
808];
809
810/// Connectivity within a Lys residue.
811/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
812pub const LYS_CONNECT_NTERM: [(AtomName, AtomName, u8); 23] = [
813    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
814    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
815    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
816    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
817    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
818    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
819    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
820    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
821    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
822    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
823    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
824    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
825    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
826    (AtomName(*b"2HD "), AtomName(*b"CD  "), 1),
827    (AtomName(*b"3HD "), AtomName(*b"CD  "), 1),
828    (AtomName(*b"CE  "), AtomName(*b"CD  "), 1),
829    (AtomName(*b"2HE "), AtomName(*b"CE  "), 1),
830    (AtomName(*b"3HE "), AtomName(*b"CE  "), 1),
831    (AtomName(*b"NZ  "), AtomName(*b"CE  "), 1),
832    (AtomName(*b"1HZ "), AtomName(*b"NZ  "), 1),
833    (AtomName(*b"2HZ "), AtomName(*b"NZ  "), 1),
834    (AtomName(*b"3HZ "), AtomName(*b"NZ  "), 1),
835    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
836];
837
838/// Connectivity within a Leu residue.
839/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
840pub const LEU_CONNECT_NTERM: [(AtomName, AtomName, u8); 20] = [
841    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
842    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
843    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
844    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
845    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
846    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
847    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
848    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
849    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
850    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
851    (AtomName(*b"HG  "), AtomName(*b"CG  "), 1),
852    (AtomName(*b"CD1 "), AtomName(*b"CG  "), 1),
853    (AtomName(*b"1HD1"), AtomName(*b"CD1 "), 1),
854    (AtomName(*b"2HD1"), AtomName(*b"CD1 "), 1),
855    (AtomName(*b"3HD1"), AtomName(*b"CD1 "), 1),
856    (AtomName(*b"CD2 "), AtomName(*b"CG  "), 1),
857    (AtomName(*b"1HD2"), AtomName(*b"CD2 "), 1),
858    (AtomName(*b"2HD2"), AtomName(*b"CD2 "), 1),
859    (AtomName(*b"3HD2"), AtomName(*b"CD2 "), 1),
860    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
861];
862
863/// Connectivity within a Met residue.
864/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
865pub const MET_CONNECT_NTERM: [(AtomName, AtomName, u8); 18] = [
866    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
867    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
868    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
869    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
870    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
871    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
872    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
873    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
874    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
875    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
876    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
877    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
878    (AtomName(*b"SD  "), AtomName(*b"CG  "), 1),
879    (AtomName(*b"CE  "), AtomName(*b"SD  "), 1),
880    (AtomName(*b"1HE "), AtomName(*b"CE  "), 1),
881    (AtomName(*b"2HE "), AtomName(*b"CE  "), 1),
882    (AtomName(*b"3HE "), AtomName(*b"CE  "), 1),
883    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
884];
885
886/// Connectivity within a Asn residue.
887/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
888pub const ASN_CONNECT_NTERM: [(AtomName, AtomName, u8); 15] = [
889    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
890    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
891    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
892    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
893    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
894    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
895    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
896    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
897    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
898    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
899    (AtomName(*b"OD1 "), AtomName(*b"CG  "), 2),
900    (AtomName(*b"ND2 "), AtomName(*b"CG  "), 1),
901    (AtomName(*b"1HD2"), AtomName(*b"ND2 "), 1),
902    (AtomName(*b"2HD2"), AtomName(*b"ND2 "), 1),
903    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
904];
905
906/// Connectivity within a Pro residue.
907/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
908pub const PRO_CONNECT_NTERM: [(AtomName, AtomName, u8); 16] = [
909    (AtomName(*b"N   "), AtomName(*b"2H  "), 1),
910    (AtomName(*b"N   "), AtomName(*b"3H  "), 1),
911    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
912    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
913    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
914    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
915    (AtomName(*b"3HD "), AtomName(*b"CD  "), 1),
916    (AtomName(*b"2HD "), AtomName(*b"CD  "), 1),
917    (AtomName(*b"CG  "), AtomName(*b"CD  "), 1),
918    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
919    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
920    (AtomName(*b"CB  "), AtomName(*b"CG  "), 1),
921    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
922    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
923    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
924    (AtomName(*b"N   "), AtomName(*b"CD  "), 1),
925];
926
927/// Connectivity within a Gln residue.
928/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
929pub const GLN_CONNECT_NTERM: [(AtomName, AtomName, u8); 18] = [
930    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
931    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
932    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
933    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
934    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
935    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
936    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
937    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
938    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
939    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
940    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
941    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
942    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
943    (AtomName(*b"OE1 "), AtomName(*b"CD  "), 2),
944    (AtomName(*b"NE2 "), AtomName(*b"CD  "), 1),
945    (AtomName(*b"1HE2"), AtomName(*b"NE2 "), 1),
946    (AtomName(*b"2HE2"), AtomName(*b"NE2 "), 1),
947    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
948];
949
950/// Connectivity within a Arg residue.
951/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
952pub const ARG_CONNECT_NTERM: [(AtomName, AtomName, u8); 25] = [
953    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
954    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
955    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
956    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
957    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
958    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
959    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
960    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
961    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
962    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
963    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
964    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
965    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
966    (AtomName(*b"2HD "), AtomName(*b"CD  "), 1),
967    (AtomName(*b"3HD "), AtomName(*b"CD  "), 1),
968    (AtomName(*b"NE  "), AtomName(*b"CD  "), 1),
969    (AtomName(*b"HE  "), AtomName(*b"NE  "), 1),
970    (AtomName(*b"CZ  "), AtomName(*b"NE  "), 1),
971    (AtomName(*b"NH1 "), AtomName(*b"CZ  "), 2),
972    (AtomName(*b"1HH1"), AtomName(*b"NH1 "), 1),
973    (AtomName(*b"2HH1"), AtomName(*b"NH1 "), 1),
974    (AtomName(*b"NH2 "), AtomName(*b"CZ  "), 1),
975    (AtomName(*b"1HH2"), AtomName(*b"NH2 "), 1),
976    (AtomName(*b"2HH2"), AtomName(*b"NH2 "), 1),
977    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
978];
979
980/// Connectivity within a Ser residue.
981/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
982pub const SER_CONNECT_NTERM: [(AtomName, AtomName, u8); 12] = [
983    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
984    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
985    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
986    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
987    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
988    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
989    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
990    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
991    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
992    (AtomName(*b"OG  "), AtomName(*b"CB  "), 1),
993    (AtomName(*b"HG  "), AtomName(*b"OG  "), 1),
994    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
995];
996
997/// Connectivity within a Thr residue.
998/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
999pub const THR_CONNECT_NTERM: [(AtomName, AtomName, u8); 15] = [
1000    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
1001    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
1002    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
1003    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1004    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1005    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1006    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1007    (AtomName(*b"HB  "), AtomName(*b"CB  "), 1),
1008    (AtomName(*b"CG2 "), AtomName(*b"CB  "), 1),
1009    (AtomName(*b"1HG2"), AtomName(*b"CG2 "), 1),
1010    (AtomName(*b"2HG2"), AtomName(*b"CG2 "), 1),
1011    (AtomName(*b"3HG2"), AtomName(*b"CG2 "), 1),
1012    (AtomName(*b"OG1 "), AtomName(*b"CB  "), 1),
1013    (AtomName(*b"1HG "), AtomName(*b"OG1 "), 1),
1014    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1015];
1016
1017/// Connectivity within a Val residue.
1018/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1019pub const VAL_CONNECT_NTERM: [(AtomName, AtomName, u8); 17] = [
1020    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
1021    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
1022    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
1023    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1024    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1025    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1026    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1027    (AtomName(*b"HB  "), AtomName(*b"CB  "), 1),
1028    (AtomName(*b"CG1 "), AtomName(*b"CB  "), 1),
1029    (AtomName(*b"1HG1"), AtomName(*b"CG1 "), 1),
1030    (AtomName(*b"2HG1"), AtomName(*b"CG1 "), 1),
1031    (AtomName(*b"3HG1"), AtomName(*b"CG1 "), 1),
1032    (AtomName(*b"CG2 "), AtomName(*b"CB  "), 1),
1033    (AtomName(*b"1HG2"), AtomName(*b"CG2 "), 1),
1034    (AtomName(*b"2HG2"), AtomName(*b"CG2 "), 1),
1035    (AtomName(*b"3HG2"), AtomName(*b"CG2 "), 1),
1036    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1037];
1038
1039/// Connectivity within a Trp residue.
1040/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1041pub const TRP_CONNECT_NTERM: [(AtomName, AtomName, u8); 27] = [
1042    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
1043    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
1044    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
1045    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1046    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1047    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1048    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1049    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1050    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1051    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1052    (AtomName(*b"CD1 "), AtomName(*b"CG  "), 2),
1053    (AtomName(*b"1HD "), AtomName(*b"CD1 "), 1),
1054    (AtomName(*b"NE1 "), AtomName(*b"CD1 "), 1),
1055    (AtomName(*b"1HE "), AtomName(*b"NE1 "), 1),
1056    (AtomName(*b"CE2 "), AtomName(*b"NE1 "), 1),
1057    (AtomName(*b"CZ2 "), AtomName(*b"CE2 "), 1),
1058    (AtomName(*b"2HZ "), AtomName(*b"CZ2 "), 1),
1059    (AtomName(*b"CH2 "), AtomName(*b"CZ2 "), 2),
1060    (AtomName(*b"2HH "), AtomName(*b"CH2 "), 1),
1061    (AtomName(*b"CZ3 "), AtomName(*b"CH2 "), 1),
1062    (AtomName(*b"3HZ "), AtomName(*b"CZ3 "), 1),
1063    (AtomName(*b"CE3 "), AtomName(*b"CZ3 "), 2),
1064    (AtomName(*b"3HE "), AtomName(*b"CE3 "), 1),
1065    (AtomName(*b"CD2 "), AtomName(*b"CE3 "), 1),
1066    (AtomName(*b"CG  "), AtomName(*b"CD2 "), 1),
1067    (AtomName(*b"CE2 "), AtomName(*b"CD2 "), 2),
1068    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1069];
1070
1071/// Connectivity within a Tyr residue.
1072/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1073pub const TYR_CONNECT_NTERM: [(AtomName, AtomName, u8); 23] = [
1074    (AtomName(*b"N   "), AtomName(*b"1HT "), 1),
1075    (AtomName(*b"N   "), AtomName(*b"2HT "), 1),
1076    (AtomName(*b"N   "), AtomName(*b"3HT "), 1),
1077    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1078    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1079    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1080    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1081    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1082    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1083    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1084    (AtomName(*b"CD1 "), AtomName(*b"CG  "), 2),
1085    (AtomName(*b"1HD "), AtomName(*b"CD1 "), 1),
1086    (AtomName(*b"CE1 "), AtomName(*b"CD1 "), 1),
1087    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
1088    (AtomName(*b"CZ  "), AtomName(*b"CE1 "), 2),
1089    (AtomName(*b"OH  "), AtomName(*b"CZ  "), 1),
1090    (AtomName(*b"HH  "), AtomName(*b"OH  "), 1),
1091    (AtomName(*b"CE2 "), AtomName(*b"CZ  "), 1),
1092    (AtomName(*b"2HE "), AtomName(*b"CE2 "), 1),
1093    (AtomName(*b"CD2 "), AtomName(*b"CE2 "), 2),
1094    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
1095    (AtomName(*b"CD2 "), AtomName(*b"CG  "), 1),
1096    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1097];
1098
1099/// Connectivity within a Ala residue.
1100/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1101pub const ALA_CONNECT_CTERM: [(AtomName, AtomName, u8); 10] = [
1102    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1103    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1104    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1105    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1106    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1107    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1108    (AtomName(*b"1HB "), AtomName(*b"CB  "), 1),
1109    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1110    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1111    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1112];
1113
1114/// Connectivity within a Cys residue.
1115/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1116pub const CYS_CONNECT_CTERM: [(AtomName, AtomName, u8); 11] = [
1117    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1118    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1119    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1120    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1121    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1122    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1123    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1124    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1125    (AtomName(*b"SG  "), AtomName(*b"CB  "), 1),
1126    (AtomName(*b"HG  "), AtomName(*b"SG  "), 1),
1127    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1128];
1129
1130/// Connectivity within a Cyx residue.
1131/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1132pub const CYX_CONNECT_CTERM: [(AtomName, AtomName, u8); 10] = [
1133    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1134    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1135    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1136    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1137    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1138    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1139    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1140    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1141    (AtomName(*b"SG  "), AtomName(*b"CB  "), 1),
1142    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1143];
1144
1145/// Connectivity within a Asp residue.
1146/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1147pub const ASP_CONNECT_CTERM: [(AtomName, AtomName, u8); 12] = [
1148    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1149    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1150    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1151    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1152    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1153    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1154    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1155    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1156    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1157    (AtomName(*b"OD1 "), AtomName(*b"CG  "), 2),
1158    (AtomName(*b"OD2 "), AtomName(*b"CG  "), 1),
1159    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1160];
1161
1162/// Connectivity within a Ash residue.
1163/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1164pub const ASH_CONNECT_CTERM: [(AtomName, AtomName, u8); 13] = [
1165    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1166    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1167    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1168    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1169    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1170    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1171    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1172    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1173    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1174    (AtomName(*b"OD1 "), AtomName(*b"CG  "), 2),
1175    (AtomName(*b"OD2 "), AtomName(*b"CG  "), 1),
1176    (AtomName(*b"OD2 "), AtomName(*b"HD2 "), 1),
1177    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1178];
1179
1180/// Connectivity within a Glu residue.
1181/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1182pub const GLU_CONNECT_CTERM: [(AtomName, AtomName, u8); 15] = [
1183    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1184    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1185    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1186    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1187    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1188    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1189    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1190    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1191    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1192    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
1193    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
1194    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
1195    (AtomName(*b"OE1 "), AtomName(*b"CD  "), 2),
1196    (AtomName(*b"OE2 "), AtomName(*b"CD  "), 1),
1197    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1198];
1199
1200/// Connectivity within a Glp residue.
1201/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1202pub const GLP_CONNECT_CTERM: [(AtomName, AtomName, u8); 16] = [
1203    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1204    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1205    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1206    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1207    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1208    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1209    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1210    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1211    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1212    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
1213    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
1214    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
1215    (AtomName(*b"OE1 "), AtomName(*b"CD  "), 2),
1216    (AtomName(*b"OE2 "), AtomName(*b"CD  "), 1),
1217    (AtomName(*b"OE2 "), AtomName(*b"HE2 "), 1),
1218    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1219];
1220
1221/// Connectivity within a Phe residue.
1222/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1223pub const PHE_CONNECT_CTERM: [(AtomName, AtomName, u8); 21] = [
1224    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1225    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1226    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1227    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1228    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1229    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1230    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1231    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1232    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1233    (AtomName(*b"CD1 "), AtomName(*b"CG  "), 2),
1234    (AtomName(*b"1HD "), AtomName(*b"CD1 "), 1),
1235    (AtomName(*b"CE1 "), AtomName(*b"CD1 "), 1),
1236    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
1237    (AtomName(*b"CZ  "), AtomName(*b"CE1 "), 2),
1238    (AtomName(*b"HZ  "), AtomName(*b"CZ  "), 1),
1239    (AtomName(*b"CE2 "), AtomName(*b"CZ  "), 1),
1240    (AtomName(*b"2HE "), AtomName(*b"CE2 "), 1),
1241    (AtomName(*b"CD2 "), AtomName(*b"CE2 "), 2),
1242    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
1243    (AtomName(*b"CD2 "), AtomName(*b"CG  "), 1),
1244    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1245];
1246
1247/// Connectivity within a Gly residue.
1248/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1249pub const GLY_CONNECT_CTERM: [(AtomName, AtomName, u8); 7] = [
1250    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1251    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1252    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1253    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1254    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1255    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1256    (AtomName(*b"CA  "), AtomName(*b"3HA "), 1),
1257];
1258
1259/// Connectivity within a Hip residue.
1260/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1261pub const HIP_CONNECT_CTERM: [(AtomName, AtomName, u8); 19] = [
1262    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1263    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1264    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1265    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1266    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1267    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1268    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1269    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1270    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1271    (AtomName(*b"ND1 "), AtomName(*b"CG  "), 1),
1272    (AtomName(*b"1HD "), AtomName(*b"ND1 "), 1),
1273    (AtomName(*b"CE1 "), AtomName(*b"ND1 "), 2),
1274    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
1275    (AtomName(*b"NE2 "), AtomName(*b"CE1 "), 1),
1276    (AtomName(*b"2HE "), AtomName(*b"NE2 "), 1),
1277    (AtomName(*b"CD2 "), AtomName(*b"NE2 "), 1),
1278    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
1279    (AtomName(*b"CG  "), AtomName(*b"CD2 "), 2),
1280    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1281];
1282
1283/// Connectivity within a Hie residue.
1284/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1285pub const HIE_CONNECT_CTERM: [(AtomName, AtomName, u8); 18] = [
1286    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1287    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1288    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1289    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1290    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1291    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1292    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1293    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1294    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1295    (AtomName(*b"ND1 "), AtomName(*b"CG  "), 1),
1296    (AtomName(*b"CE1 "), AtomName(*b"ND1 "), 2),
1297    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
1298    (AtomName(*b"NE2 "), AtomName(*b"CE1 "), 1),
1299    (AtomName(*b"2HE "), AtomName(*b"NE2 "), 1),
1300    (AtomName(*b"CD2 "), AtomName(*b"NE2 "), 1),
1301    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
1302    (AtomName(*b"CG  "), AtomName(*b"CD2 "), 2),
1303    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1304];
1305
1306/// Connectivity within a Hid residue.
1307/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1308pub const HID_CONNECT_CTERM: [(AtomName, AtomName, u8); 18] = [
1309    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1310    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1311    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1312    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1313    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1314    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1315    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1316    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1317    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1318    (AtomName(*b"ND1 "), AtomName(*b"CG  "), 1),
1319    (AtomName(*b"1HD "), AtomName(*b"ND1 "), 1),
1320    (AtomName(*b"CE1 "), AtomName(*b"ND1 "), 1),
1321    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
1322    (AtomName(*b"NE2 "), AtomName(*b"CE1 "), 2),
1323    (AtomName(*b"CD2 "), AtomName(*b"NE2 "), 1),
1324    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
1325    (AtomName(*b"CG  "), AtomName(*b"CD2 "), 2),
1326    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1327];
1328
1329/// Connectivity within a Ile residue.
1330/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1331pub const ILE_CONNECT_CTERM: [(AtomName, AtomName, u8); 19] = [
1332    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1333    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1334    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1335    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1336    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1337    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1338    (AtomName(*b"HB  "), AtomName(*b"CB  "), 1),
1339    (AtomName(*b"CG2 "), AtomName(*b"CB  "), 1),
1340    (AtomName(*b"1HG2"), AtomName(*b"CG2 "), 1),
1341    (AtomName(*b"2HG2"), AtomName(*b"CG2 "), 1),
1342    (AtomName(*b"3HG2"), AtomName(*b"CG2 "), 1),
1343    (AtomName(*b"CG1 "), AtomName(*b"CB  "), 1),
1344    (AtomName(*b"2HG1"), AtomName(*b"CG1 "), 1),
1345    (AtomName(*b"3HG1"), AtomName(*b"CG1 "), 1),
1346    (AtomName(*b"CD1 "), AtomName(*b"CG1 "), 1),
1347    (AtomName(*b"1HD1"), AtomName(*b"CD1 "), 1),
1348    (AtomName(*b"2HD1"), AtomName(*b"CD1 "), 1),
1349    (AtomName(*b"3HD1"), AtomName(*b"CD1 "), 1),
1350    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1351];
1352
1353/// Connectivity within a Lys residue.
1354/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1355pub const LYS_CONNECT_CTERM: [(AtomName, AtomName, u8); 22] = [
1356    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1357    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1358    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1359    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1360    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1361    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1362    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1363    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1364    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1365    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
1366    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
1367    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
1368    (AtomName(*b"2HD "), AtomName(*b"CD  "), 1),
1369    (AtomName(*b"3HD "), AtomName(*b"CD  "), 1),
1370    (AtomName(*b"CE  "), AtomName(*b"CD  "), 1),
1371    (AtomName(*b"2HE "), AtomName(*b"CE  "), 1),
1372    (AtomName(*b"3HE "), AtomName(*b"CE  "), 1),
1373    (AtomName(*b"NZ  "), AtomName(*b"CE  "), 1),
1374    (AtomName(*b"1HZ "), AtomName(*b"NZ  "), 1),
1375    (AtomName(*b"2HZ "), AtomName(*b"NZ  "), 1),
1376    (AtomName(*b"3HZ "), AtomName(*b"NZ  "), 1),
1377    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1378];
1379
1380/// Connectivity within a Leu residue.
1381/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1382pub const LEU_CONNECT_CTERM: [(AtomName, AtomName, u8); 19] = [
1383    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1384    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1385    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1386    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1387    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1388    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1389    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1390    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1391    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1392    (AtomName(*b"HG  "), AtomName(*b"CG  "), 1),
1393    (AtomName(*b"CD1 "), AtomName(*b"CG  "), 1),
1394    (AtomName(*b"1HD1"), AtomName(*b"CD1 "), 1),
1395    (AtomName(*b"2HD1"), AtomName(*b"CD1 "), 1),
1396    (AtomName(*b"3HD1"), AtomName(*b"CD1 "), 1),
1397    (AtomName(*b"CD2 "), AtomName(*b"CG  "), 1),
1398    (AtomName(*b"1HD2"), AtomName(*b"CD2 "), 1),
1399    (AtomName(*b"2HD2"), AtomName(*b"CD2 "), 1),
1400    (AtomName(*b"3HD2"), AtomName(*b"CD2 "), 1),
1401    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1402];
1403
1404/// Connectivity within a Met residue.
1405/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1406pub const MET_CONNECT_CTERM: [(AtomName, AtomName, u8); 17] = [
1407    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1408    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1409    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1410    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1411    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1412    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1413    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1414    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1415    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1416    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
1417    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
1418    (AtomName(*b"SD  "), AtomName(*b"CG  "), 1),
1419    (AtomName(*b"CE  "), AtomName(*b"SD  "), 1),
1420    (AtomName(*b"1HE "), AtomName(*b"CE  "), 1),
1421    (AtomName(*b"2HE "), AtomName(*b"CE  "), 1),
1422    (AtomName(*b"3HE "), AtomName(*b"CE  "), 1),
1423    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1424];
1425
1426/// Connectivity within a Asn residue.
1427/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1428pub const ASN_CONNECT_CTERM: [(AtomName, AtomName, u8); 14] = [
1429    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1430    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1431    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1432    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1433    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1434    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1435    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1436    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1437    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1438    (AtomName(*b"OD1 "), AtomName(*b"CG  "), 2),
1439    (AtomName(*b"ND2 "), AtomName(*b"CG  "), 1),
1440    (AtomName(*b"1HD2"), AtomName(*b"ND2 "), 1),
1441    (AtomName(*b"2HD2"), AtomName(*b"ND2 "), 1),
1442    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1443];
1444
1445/// Connectivity within a Pro residue.
1446/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1447pub const PRO_CONNECT_CTERM: [(AtomName, AtomName, u8); 15] = [
1448    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1449    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1450    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1451    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1452    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1453    (AtomName(*b"3HD "), AtomName(*b"CD  "), 1),
1454    (AtomName(*b"2HD "), AtomName(*b"CD  "), 1),
1455    (AtomName(*b"CG  "), AtomName(*b"CD  "), 1),
1456    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
1457    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
1458    (AtomName(*b"CB  "), AtomName(*b"CG  "), 1),
1459    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1460    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1461    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1462    (AtomName(*b"N   "), AtomName(*b"CD  "), 1),
1463];
1464
1465/// Connectivity within a Gln residue.
1466/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1467pub const GLN_CONNECT_CTERM: [(AtomName, AtomName, u8); 17] = [
1468    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1469    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1470    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1471    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1472    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1473    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1474    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1475    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1476    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1477    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
1478    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
1479    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
1480    (AtomName(*b"OE1 "), AtomName(*b"CD  "), 2),
1481    (AtomName(*b"NE2 "), AtomName(*b"CD  "), 1),
1482    (AtomName(*b"1HE2"), AtomName(*b"NE2 "), 1),
1483    (AtomName(*b"2HE2"), AtomName(*b"NE2 "), 1),
1484    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1485];
1486
1487/// Connectivity within a Arg residue.
1488/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1489pub const ARG_CONNECT_CTERM: [(AtomName, AtomName, u8); 24] = [
1490    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1491    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1492    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1493    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1494    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1495    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1496    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1497    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1498    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1499    (AtomName(*b"2HG "), AtomName(*b"CG  "), 1),
1500    (AtomName(*b"3HG "), AtomName(*b"CG  "), 1),
1501    (AtomName(*b"CD  "), AtomName(*b"CG  "), 1),
1502    (AtomName(*b"2HD "), AtomName(*b"CD  "), 1),
1503    (AtomName(*b"3HD "), AtomName(*b"CD  "), 1),
1504    (AtomName(*b"NE  "), AtomName(*b"CD  "), 1),
1505    (AtomName(*b"HE  "), AtomName(*b"NE  "), 1),
1506    (AtomName(*b"CZ  "), AtomName(*b"NE  "), 1),
1507    (AtomName(*b"NH1 "), AtomName(*b"CZ  "), 2),
1508    (AtomName(*b"1HH1"), AtomName(*b"NH1 "), 1),
1509    (AtomName(*b"2HH1"), AtomName(*b"NH1 "), 1),
1510    (AtomName(*b"NH2 "), AtomName(*b"CZ  "), 1),
1511    (AtomName(*b"1HH2"), AtomName(*b"NH2 "), 1),
1512    (AtomName(*b"2HH2"), AtomName(*b"NH2 "), 1),
1513    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1514];
1515
1516/// Connectivity within a Ser residue.
1517/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1518pub const SER_CONNECT_CTERM: [(AtomName, AtomName, u8); 11] = [
1519    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1520    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1521    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1522    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1523    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1524    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1525    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1526    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1527    (AtomName(*b"OG  "), AtomName(*b"CB  "), 1),
1528    (AtomName(*b"HG  "), AtomName(*b"OG  "), 1),
1529    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1530];
1531
1532/// Connectivity within a Thr residue.
1533/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1534pub const THR_CONNECT_CTERM: [(AtomName, AtomName, u8); 14] = [
1535    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1536    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1537    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1538    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1539    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1540    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1541    (AtomName(*b"HB  "), AtomName(*b"CB  "), 1),
1542    (AtomName(*b"CG2 "), AtomName(*b"CB  "), 1),
1543    (AtomName(*b"1HG2"), AtomName(*b"CG2 "), 1),
1544    (AtomName(*b"2HG2"), AtomName(*b"CG2 "), 1),
1545    (AtomName(*b"3HG2"), AtomName(*b"CG2 "), 1),
1546    (AtomName(*b"OG1 "), AtomName(*b"CB  "), 1),
1547    (AtomName(*b"1HG "), AtomName(*b"OG1 "), 1),
1548    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1549];
1550
1551/// Connectivity within a Val residue.
1552/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1553pub const VAL_CONNECT_CTERM: [(AtomName, AtomName, u8); 16] = [
1554    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1555    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1556    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1557    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1558    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1559    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1560    (AtomName(*b"HB  "), AtomName(*b"CB  "), 1),
1561    (AtomName(*b"CG1 "), AtomName(*b"CB  "), 1),
1562    (AtomName(*b"1HG1"), AtomName(*b"CG1 "), 1),
1563    (AtomName(*b"2HG1"), AtomName(*b"CG1 "), 1),
1564    (AtomName(*b"3HG1"), AtomName(*b"CG1 "), 1),
1565    (AtomName(*b"CG2 "), AtomName(*b"CB  "), 1),
1566    (AtomName(*b"1HG2"), AtomName(*b"CG2 "), 1),
1567    (AtomName(*b"2HG2"), AtomName(*b"CG2 "), 1),
1568    (AtomName(*b"3HG2"), AtomName(*b"CG2 "), 1),
1569    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1570];
1571
1572/// Connectivity within a Trp residue.
1573/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1574pub const TRP_CONNECT_CTERM: [(AtomName, AtomName, u8); 26] = [
1575    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1576    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1577    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1578    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1579    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1580    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1581    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1582    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1583    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1584    (AtomName(*b"CD1 "), AtomName(*b"CG  "), 2),
1585    (AtomName(*b"1HD "), AtomName(*b"CD1 "), 1),
1586    (AtomName(*b"NE1 "), AtomName(*b"CD1 "), 1),
1587    (AtomName(*b"1HE "), AtomName(*b"NE1 "), 1),
1588    (AtomName(*b"CE2 "), AtomName(*b"NE1 "), 1),
1589    (AtomName(*b"CZ2 "), AtomName(*b"CE2 "), 1),
1590    (AtomName(*b"2HZ "), AtomName(*b"CZ2 "), 1),
1591    (AtomName(*b"CH2 "), AtomName(*b"CZ2 "), 2),
1592    (AtomName(*b"2HH "), AtomName(*b"CH2 "), 1),
1593    (AtomName(*b"CZ3 "), AtomName(*b"CH2 "), 1),
1594    (AtomName(*b"3HZ "), AtomName(*b"CZ3 "), 1),
1595    (AtomName(*b"CE3 "), AtomName(*b"CZ3 "), 2),
1596    (AtomName(*b"3HE "), AtomName(*b"CE3 "), 1),
1597    (AtomName(*b"CD2 "), AtomName(*b"CE3 "), 1),
1598    (AtomName(*b"CG  "), AtomName(*b"CD2 "), 1),
1599    (AtomName(*b"CE2 "), AtomName(*b"CD2 "), 2),
1600    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1601];
1602
1603/// Connectivity within a Tyr residue.
1604/// Each tuple represents `(AtomNameX, AtomNameY, BondOrder)`.
1605pub const TYR_CONNECT_CTERM: [(AtomName, AtomName, u8); 22] = [
1606    (AtomName(*b"N   "), AtomName(*b"H   "), 1),
1607    (AtomName(*b"N   "), AtomName(*b"CA  "), 1),
1608    (AtomName(*b"CA  "), AtomName(*b"HA  "), 1),
1609    (AtomName(*b"CA  "), AtomName(*b"C   "), 1),
1610    (AtomName(*b"C   "), AtomName(*b"O   "), 2),
1611    (AtomName(*b"C   "), AtomName(*b"OXT "), 1),
1612    (AtomName(*b"2HB "), AtomName(*b"CB  "), 1),
1613    (AtomName(*b"3HB "), AtomName(*b"CB  "), 1),
1614    (AtomName(*b"CG  "), AtomName(*b"CB  "), 1),
1615    (AtomName(*b"CD1 "), AtomName(*b"CG  "), 2),
1616    (AtomName(*b"1HD "), AtomName(*b"CD1 "), 1),
1617    (AtomName(*b"CE1 "), AtomName(*b"CD1 "), 1),
1618    (AtomName(*b"1HE "), AtomName(*b"CE1 "), 1),
1619    (AtomName(*b"CZ  "), AtomName(*b"CE1 "), 2),
1620    (AtomName(*b"OH  "), AtomName(*b"CZ  "), 1),
1621    (AtomName(*b"HH  "), AtomName(*b"OH  "), 1),
1622    (AtomName(*b"CE2 "), AtomName(*b"CZ  "), 1),
1623    (AtomName(*b"2HE "), AtomName(*b"CE2 "), 1),
1624    (AtomName(*b"CD2 "), AtomName(*b"CE2 "), 2),
1625    (AtomName(*b"2HD "), AtomName(*b"CD2 "), 1),
1626    (AtomName(*b"CD2 "), AtomName(*b"CG  "), 1),
1627    (AtomName(*b"CA  "), AtomName(*b"CB  "), 1),
1628];