1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 package ffx.crystal;
39
40
41
42
43
44
45
46 public enum LaueSystem {
47
48
49
50 L111,
51
52
53
54 L112,
55
56
57
58 L121,
59
60
61
62 L211,
63
64
65
66 L21U,
67
68
69
70 L21V,
71
72
73
74 L21W,
75
76
77
78 L21X,
79
80
81
82 L21Y,
83
84
85
86 L21Z,
87
88
89
90 L222,
91
92
93
94 L22U,
95
96
97
98 L22V,
99
100
101
102 L22W,
103
104
105
106 L114,
107
108
109
110 L141,
111
112
113
114 L411,
115
116
117
118 L224,
119
120
121
122 L242,
123
124
125
126 L422,
127
128
129
130 L113,
131
132
133
134 L131,
135
136
137
138 L311,
139
140
141
142 L11T,
143
144
145
146 L1T1,
147
148
149
150 LT11,
151
152
153
154 L31A,
155
156
157
158 L31B,
159
160
161
162 L31C,
163
164
165
166 L31D,
167
168
169
170 L223,
171
172
173
174 L232,
175
176
177
178 L322,
179
180
181
182 L32A,
183
184
185
186 L32B,
187
188
189
190 L32C,
191
192
193
194 L32D,
195
196
197
198 L32U,
199
200
201
202 L32V,
203
204
205
206 L32W,
207
208
209
210 L32X,
211
212
213
214 L32Y,
215
216
217
218 L32Z,
219
220
221
222 LM3B,
223
224
225
226 LM3M;
227
228
229
230
231
232
233
234
235
236 public boolean checkRestrictions(int h, int k, int l) {
237 switch (this) {
238 case L111 -> {
239 return (l > 0 || (l == 0 && (h > 0 || (h == 0 && k >= 0))));
240 }
241 case L112 -> {
242 return (l >= 0 && (h > 0 || (h == 0 && k >= 0)));
243 }
244 case L121 -> {
245 return (k >= 0 && (l > 0 || (l == 0 && h >= 0)));
246 }
247 case L211 -> {
248 return (h >= 0 && (k > 0 || (k == 0 && l >= 0)));
249 }
250 case L21U -> {
251 return (h + k >= 0 && (l > 0 || (l == 0 && h - k >= 0)));
252 }
253 case L21V -> {
254 return (l + h >= 0 && (k > 0 || (k == 0 && l - h >= 0)));
255 }
256 case L21W -> {
257 return (k + l >= 0 && (h > 0 || (h == 0 && k - l >= 0)));
258 }
259 case L21X -> {
260 return (h - k >= 0 && (l > 0 || (l == 0 && h + k >= 0)));
261 }
262 case L21Y -> {
263 return (l - h >= 0 && (k > 0 || (k == 0 && l + h >= 0)));
264 }
265 case L21Z -> {
266 return (k - l >= 0 && (h > 0 || (h == 0 && k + l >= 0)));
267 }
268 case L222 -> {
269 return (h >= 0 && k >= 0 && l >= 0);
270 }
271 case L22U -> {
272 return (h <= k && h >= -k && l >= 0);
273 }
274 case L22V -> {
275 return (l <= h && l >= -h && k >= 0);
276 }
277 case L22W -> {
278 return (k <= l && k >= -l && h >= 0);
279 }
280 case L114 -> {
281 return (l >= 0 && ((h >= 0 && k > 0) || (h == 0 && k == 0)));
282 }
283 case L141 -> {
284 return (k >= 0 && ((l >= 0 && h > 0) || (l == 0 && h == 0)));
285 }
286 case L411 -> {
287 return (h >= 0 && ((k >= 0 && l > 0) || (k == 0 && l == 0)));
288 }
289 case L224 -> {
290 return (h >= k && k >= 0 && l >= 0);
291 }
292 case L242 -> {
293 return (l >= h && h >= 0 && k >= 0);
294 }
295 case L422 -> {
296 return (k >= l && l >= 0 && h >= 0);
297 }
298 case L113 -> {
299 return (h >= 0 && k > 0) || (h == 0 && k == 0 && l >= 0);
300 }
301 case L131 -> {
302 return (l >= 0 && h > 0) || (l == 0 && h == 0 && k >= 0);
303 }
304 case L311 -> {
305 return (k >= 0 && l > 0) || (k == 0 && l == 0 && h >= 0);
306 }
307 case L11T -> {
308 return (h <= 0 && k > 0) || (h == 0 && k == 0 && l >= 0);
309 }
310 case L1T1 -> {
311 return (l <= 0 && h > 0) || (l == 0 && h == 0 && k >= 0);
312 }
313 case LT11 -> {
314 return (k <= 0 && l > 0) || (k == 0 && l == 0 && h >= 0);
315 }
316 case L31A -> {
317 return (k - l >= 0 && l - h > 0) || (h == l && k == l && h + k + l >= 0);
318 }
319 case L31B -> {
320 return (k - l >= 0 && l + h > 0) || (-h == l && k == l && -h + k + l >= 0);
321 }
322 case L31C -> {
323 return (-k - l >= 0 && l - h > 0) || (h == l && -k == l && h - k + l >= 0);
324 }
325 case L31D -> {
326 return (k + l >= 0 && -l - h > 0) || (h == -l && k == -l && h + k - l >= 0);
327 }
328 case L223 -> {
329 return (h >= k && k >= 0 && (k > 0 || l >= 0));
330 }
331 case L232 -> {
332 return (l >= h && h >= 0 && (h > 0 || k >= 0));
333 }
334 case L322 -> {
335 return (k >= l && l >= 0 && (l > 0 || h >= 0));
336 }
337 case L32A -> {
338 return (h >= k && k + l >= h + h && (k + l > h + h || h + k + l >= 0));
339 }
340 case L32B -> {
341 return (-h >= k && k + l >= -h - h && (k + l > -h - h || -h + k + l >= 0));
342 }
343 case L32C -> {
344 return (h >= -k && -k + l >= h + h && (-k + l > h + h || h - k + l >= 0));
345 }
346 case L32D -> {
347 return (h >= k && k - l >= h + h && (k - l > h + h || h + k - l >= 0));
348 }
349 case L32U -> {
350 return (h >= k && k >= 0 && (h > k || l >= 0));
351 }
352 case L32V -> {
353 return (k >= l && l >= 0 && (k > l || h >= 0));
354 }
355 case L32W -> {
356 return (l >= h && h >= 0 && (l > h || k >= 0));
357 }
358 case L32X -> {
359 return (-h >= k && k >= 0 && (-h > k || l >= 0));
360 }
361 case L32Y -> {
362 return (-k >= l && l >= 0 && (-k > l || h >= 0));
363 }
364 case L32Z -> {
365 return (-l >= h && h >= 0 && (-l > h || k >= 0));
366 }
367 case LM3B -> {
368 return (h >= 0 && ((l >= h && k > h) || (l == h && k == h)));
369 }
370 case LM3M -> {
371 return (k >= l && l >= h && h >= 0);
372 }
373 default -> {
374 return false;
375 }
376 }
377 }
378 }