moyo 0.10.0

Library for Crystal Symmetry in Rust
Documentation
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
use super::layer_hall_symbol_database::LayerHallNumber;

/// Wyckoff position for a layer-group setting.
///
/// Mirrors [`super::WyckoffPosition`] but keyed by [`LayerHallNumber`]
/// (1-116) instead of the bulk Hall number, and only the representative
/// coordinate (`coord1`) is stored. The coordinate parser
/// [`super::WyckoffPositionSpace`] consumes `coordinates` directly; the
/// caller (`assign_layer_wyckoff_position`) recovers the orbit by an integer
/// offset search, so the secondary coordinates are not needed.
#[derive(Debug, Clone)]
pub struct LayerWyckoffPosition {
    pub hall_number: LayerHallNumber,
    /// Multiplicity in the conventional layer cell.
    pub multiplicity: usize,
    /// Wyckoff letter.
    pub letter: char,
    pub site_symmetry: &'static str,
    pub coordinates: &'static str,
}

impl LayerWyckoffPosition {
    const fn new(
        hall_number: LayerHallNumber,
        multiplicity: usize,
        letter: char,
        site_symmetry: &'static str,
        coordinates: &'static str,
    ) -> Self {
        Self {
            hall_number,
            multiplicity,
            letter,
            site_symmetry,
            coordinates,
        }
    }
}

/// Iterate Wyckoff positions of a given multiplicity for a layer Hall number.
pub fn iter_layer_wyckoff_positions(
    hall_number: LayerHallNumber,
    multiplicity: usize,
) -> impl Iterator<Item = &'static LayerWyckoffPosition> {
    LAYER_WYCKOFF_DATABASE
        .iter()
        .filter(move |wp| wp.hall_number == hall_number && wp.multiplicity == multiplicity)
}

static LAYER_WYCKOFF_DATABASE: [LayerWyckoffPosition; 628] = [
    LayerWyckoffPosition::new(1, 1, 'a', "1", "x,y,z"),
    LayerWyckoffPosition::new(2, 2, 'e', "1", "x,y,z"),
    LayerWyckoffPosition::new(2, 1, 'd', "-1", "1/2,1/2,0"),
    LayerWyckoffPosition::new(2, 1, 'c', "-1", "1/2,0,0"),
    LayerWyckoffPosition::new(2, 1, 'b', "-1", "0,1/2,0"),
    LayerWyckoffPosition::new(2, 1, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(3, 2, 'e', "1", "x,y,z"),
    LayerWyckoffPosition::new(3, 1, 'd', "2", "1/2,1/2,z"),
    LayerWyckoffPosition::new(3, 1, 'c', "2", "1/2,0,z"),
    LayerWyckoffPosition::new(3, 1, 'b', "2", "0,1/2,z"),
    LayerWyckoffPosition::new(3, 1, 'a', "2", "0,0,z"),
    LayerWyckoffPosition::new(4, 2, 'b', "1", "x,y,z"),
    LayerWyckoffPosition::new(4, 1, 'a', "m", "x,y,0"),
    LayerWyckoffPosition::new(5, 2, 'a', "1", "x,y,z"),
    LayerWyckoffPosition::new(6, 2, 'a', "1", "x,y,z"),
    LayerWyckoffPosition::new(7, 2, 'a', "1", "x,y,z"),
    LayerWyckoffPosition::new(8, 4, 'j', "1", "x,y,z"),
    LayerWyckoffPosition::new(8, 2, 'i', "m", "x,y,0"),
    LayerWyckoffPosition::new(8, 2, 'h', "2", "1/2,1/2,z"),
    LayerWyckoffPosition::new(8, 2, 'g', "2", "1/2,0,z"),
    LayerWyckoffPosition::new(8, 2, 'f', "2", "0,1/2,z"),
    LayerWyckoffPosition::new(8, 2, 'e', "2", "0,0,z"),
    LayerWyckoffPosition::new(8, 1, 'd', "2/m", "1/2,1/2,0"),
    LayerWyckoffPosition::new(8, 1, 'c', "2/m", "0,1/2,0"),
    LayerWyckoffPosition::new(8, 1, 'b', "2/m", "1/2,0,0"),
    LayerWyckoffPosition::new(8, 1, 'a', "2/m", "0,0,0"),
    LayerWyckoffPosition::new(9, 4, 'e', "1", "x,y,z"),
    LayerWyckoffPosition::new(9, 2, 'd', "2", "1/4,1/2,z"),
    LayerWyckoffPosition::new(9, 2, 'c', "2", "1/4,0,z"),
    LayerWyckoffPosition::new(9, 2, 'b', "-1", "0,1/2,0"),
    LayerWyckoffPosition::new(9, 2, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(10, 4, 'e', "1", "x,y,z"),
    LayerWyckoffPosition::new(10, 2, 'd', "2", "1/4,3/4,z"),
    LayerWyckoffPosition::new(10, 2, 'c', "2", "3/4,3/4,z"),
    LayerWyckoffPosition::new(10, 2, 'b', "-1", "1/2,0,0"),
    LayerWyckoffPosition::new(10, 2, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(11, 4, 'e', "1", "x,y,z"),
    LayerWyckoffPosition::new(11, 2, 'd', "2", "1/2,3/4,z"),
    LayerWyckoffPosition::new(11, 2, 'c', "2", "0,1/4,z"),
    LayerWyckoffPosition::new(11, 2, 'b', "-1", "1/2,1/2,0"),
    LayerWyckoffPosition::new(11, 2, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(12, 2, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(12, 1, 'b', "2", "x,1/2,0"),
    LayerWyckoffPosition::new(12, 1, 'a', "2", "x,0,0"),
    LayerWyckoffPosition::new(13, 2, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(13, 1, 'b', "2", "1/2,y,0"),
    LayerWyckoffPosition::new(13, 1, 'a', "2", "0,y,0"),
    LayerWyckoffPosition::new(14, 2, 'a', "1", "x,y,z"),
    LayerWyckoffPosition::new(15, 2, 'a', "1", "x,y,z"),
    LayerWyckoffPosition::new(16, 4, 'b', "1", "x,y,z"),
    LayerWyckoffPosition::new(16, 2, 'a', "2", "x,0,0"),
    LayerWyckoffPosition::new(17, 4, 'b', "1", "x,y,z"),
    LayerWyckoffPosition::new(17, 2, 'a', "2", "0,y,0"),
    LayerWyckoffPosition::new(18, 2, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(18, 1, 'b', "m", "1/2,y,z"),
    LayerWyckoffPosition::new(18, 1, 'a', "m", "0,y,z"),
    LayerWyckoffPosition::new(19, 2, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(19, 1, 'b', "m", "x,1/2,z"),
    LayerWyckoffPosition::new(19, 1, 'a', "m", "x,0,z"),
    LayerWyckoffPosition::new(20, 2, 'a', "1", "x,y,z"),
    LayerWyckoffPosition::new(21, 2, 'a', "1", "x,y,z"),
    LayerWyckoffPosition::new(22, 4, 'b', "1", "x,y,z"),
    LayerWyckoffPosition::new(22, 2, 'a', "m", "0,y,z"),
    LayerWyckoffPosition::new(23, 4, 'b', "1", "x,y,z"),
    LayerWyckoffPosition::new(23, 2, 'a', "m", "x,0,z"),
    LayerWyckoffPosition::new(24, 4, 'i', "1", "x,y,z"),
    LayerWyckoffPosition::new(24, 2, 'h', "m", "1/2,y,z"),
    LayerWyckoffPosition::new(24, 2, 'g', "m", "0,y,z"),
    LayerWyckoffPosition::new(24, 2, 'f', "2", "x,1/2,0"),
    LayerWyckoffPosition::new(24, 2, 'e', "2", "x,0,0"),
    LayerWyckoffPosition::new(24, 1, 'd', "2/m", "1/2,1/2,0"),
    LayerWyckoffPosition::new(24, 1, 'c', "2/m", "0,1/2,0"),
    LayerWyckoffPosition::new(24, 1, 'b', "2/m", "1/2,0,0"),
    LayerWyckoffPosition::new(24, 1, 'a', "2/m", "0,0,0"),
    LayerWyckoffPosition::new(25, 4, 'i', "1", "x,y,z"),
    LayerWyckoffPosition::new(25, 2, 'h', "m", "x,1/2,z"),
    LayerWyckoffPosition::new(25, 2, 'g', "m", "x,0,z"),
    LayerWyckoffPosition::new(25, 2, 'f', "2", "1/2,y,0"),
    LayerWyckoffPosition::new(25, 2, 'e', "2", "0,y,0"),
    LayerWyckoffPosition::new(25, 1, 'd', "2/m", "1/2,1/2,0"),
    LayerWyckoffPosition::new(25, 1, 'c', "2/m", "1/2,0,0"),
    LayerWyckoffPosition::new(25, 1, 'b', "2/m", "0,1/2,0"),
    LayerWyckoffPosition::new(25, 1, 'a', "2/m", "0,0,0"),
    LayerWyckoffPosition::new(26, 4, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(26, 2, 'c', "m", "1/4,y,z"),
    LayerWyckoffPosition::new(26, 2, 'b', "-1", "0,1/2,0"),
    LayerWyckoffPosition::new(26, 2, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(27, 4, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(27, 2, 'c', "m", "x,3/4,z"),
    LayerWyckoffPosition::new(27, 2, 'b', "-1", "1/2,0,0"),
    LayerWyckoffPosition::new(27, 2, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(28, 4, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(28, 2, 'c', "2", "x,1/4,0"),
    LayerWyckoffPosition::new(28, 2, 'b', "-1", "1/2,0,0"),
    LayerWyckoffPosition::new(28, 2, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(29, 4, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(29, 2, 'c', "2", "1/4,y,0"),
    LayerWyckoffPosition::new(29, 2, 'b', "-1", "0,1/2,0"),
    LayerWyckoffPosition::new(29, 2, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(30, 4, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(30, 2, 'b', "-1", "0,1/2,0"),
    LayerWyckoffPosition::new(30, 2, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(31, 4, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(31, 2, 'b', "-1", "1/2,0,0"),
    LayerWyckoffPosition::new(31, 2, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(32, 8, 'f', "1", "x,y,z"),
    LayerWyckoffPosition::new(32, 4, 'e', "m", "0,y,z"),
    LayerWyckoffPosition::new(32, 4, 'd', "2", "x,0,0"),
    LayerWyckoffPosition::new(32, 4, 'c', "-1", "1/4,1/4,0"),
    LayerWyckoffPosition::new(32, 2, 'b', "2/m", "1/2,0,0"),
    LayerWyckoffPosition::new(32, 2, 'a', "2/m", "0,0,0"),
    LayerWyckoffPosition::new(33, 8, 'f', "1", "x,y,z"),
    LayerWyckoffPosition::new(33, 4, 'e', "m", "x,0,z"),
    LayerWyckoffPosition::new(33, 4, 'd', "2", "0,y,0"),
    LayerWyckoffPosition::new(33, 4, 'c', "-1", "1/4,3/4,0"),
    LayerWyckoffPosition::new(33, 2, 'b', "2/m", "0,1/2,0"),
    LayerWyckoffPosition::new(33, 2, 'a', "2/m", "0,0,0"),
    LayerWyckoffPosition::new(34, 4, 'm', "1", "x,y,z"),
    LayerWyckoffPosition::new(34, 2, 'l', "..2", "1/2,1/2,z"),
    LayerWyckoffPosition::new(34, 2, 'k', "..2", "0,1/2,z"),
    LayerWyckoffPosition::new(34, 2, 'j', "..2", "1/2,0,z"),
    LayerWyckoffPosition::new(34, 2, 'i', "..2", "0,0,z"),
    LayerWyckoffPosition::new(34, 2, 'h', ".2.", "1/2,y,0"),
    LayerWyckoffPosition::new(34, 2, 'g', ".2.", "0,y,0"),
    LayerWyckoffPosition::new(34, 2, 'f', "2..", "x,1/2,0"),
    LayerWyckoffPosition::new(34, 2, 'e', "2..", "x,0,0"),
    LayerWyckoffPosition::new(34, 1, 'd', "222", "1/2,1/2,0"),
    LayerWyckoffPosition::new(34, 1, 'c', "222", "0,1/2,0"),
    LayerWyckoffPosition::new(34, 1, 'b', "222", "1/2,0,0"),
    LayerWyckoffPosition::new(34, 1, 'a', "222", "0,0,0"),
    LayerWyckoffPosition::new(35, 4, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(35, 2, 'c', ".2.", "1/4,y,0"),
    LayerWyckoffPosition::new(35, 2, 'b', "..2", "0,1/2,z"),
    LayerWyckoffPosition::new(35, 2, 'a', "..2", "0,0,z"),
    LayerWyckoffPosition::new(36, 4, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(36, 2, 'c', ".2.", "x,3/4,0"),
    LayerWyckoffPosition::new(36, 2, 'b', "..2", "1/2,0,z"),
    LayerWyckoffPosition::new(36, 2, 'a', "..2", "0,0,z"),
    LayerWyckoffPosition::new(37, 4, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(37, 2, 'b', "..2", "0,1/2,z"),
    LayerWyckoffPosition::new(37, 2, 'a', "..2", "0,0,z"),
    LayerWyckoffPosition::new(38, 8, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(38, 4, 'g', "..2", "1/4,1/4,z"),
    LayerWyckoffPosition::new(38, 4, 'f', "..2", "0,1/2,z"),
    LayerWyckoffPosition::new(38, 4, 'e', "..2", "0,0,z"),
    LayerWyckoffPosition::new(38, 4, 'd', ".2.", "0,y,0"),
    LayerWyckoffPosition::new(38, 4, 'c', "2..", "x,0,0"),
    LayerWyckoffPosition::new(38, 2, 'b', "222", "0,1/2,0"),
    LayerWyckoffPosition::new(38, 2, 'a', "222", "0,0,0"),
    LayerWyckoffPosition::new(39, 4, 'i', "1", "x,y,z"),
    LayerWyckoffPosition::new(39, 2, 'h', "m..", "1/2,y,z"),
    LayerWyckoffPosition::new(39, 2, 'g', "m..", "0,y,z"),
    LayerWyckoffPosition::new(39, 2, 'f', ".m.", "x,1/2,z"),
    LayerWyckoffPosition::new(39, 2, 'e', ".m.", "x,0,z"),
    LayerWyckoffPosition::new(39, 1, 'd', "mm2", "1/2,1/2,z"),
    LayerWyckoffPosition::new(39, 1, 'c', "mm2", "1/2,0,z"),
    LayerWyckoffPosition::new(39, 1, 'b', "mm2", "0,1/2,z"),
    LayerWyckoffPosition::new(39, 1, 'a', "mm2", "0,0,z"),
    LayerWyckoffPosition::new(40, 4, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(40, 2, 'c', "m..", "1/4,y,z"),
    LayerWyckoffPosition::new(40, 2, 'b', "..2", "0,1/2,z"),
    LayerWyckoffPosition::new(40, 2, 'a', "..2", "0,0,z"),
    LayerWyckoffPosition::new(41, 4, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(41, 2, 'c', "m..", "x,3/4,z"),
    LayerWyckoffPosition::new(41, 2, 'b', "..2", "1/2,0,z"),
    LayerWyckoffPosition::new(41, 2, 'a', "..2", "0,0,z"),
    LayerWyckoffPosition::new(42, 4, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(42, 2, 'b', "..2", "0,1/2,z"),
    LayerWyckoffPosition::new(42, 2, 'a', "..2", "0,0,z"),
    LayerWyckoffPosition::new(43, 8, 'f', "1", "x,y,z"),
    LayerWyckoffPosition::new(43, 4, 'e', "m..", "0,y,z"),
    LayerWyckoffPosition::new(43, 4, 'd', ".m.", "x,0,z"),
    LayerWyckoffPosition::new(43, 4, 'c', "..2", "1/4,1/4,z"),
    LayerWyckoffPosition::new(43, 2, 'b', "mm2", "0,1/2,z"),
    LayerWyckoffPosition::new(43, 2, 'a', "mm2", "0,0,z"),
    LayerWyckoffPosition::new(44, 4, 'f', "1", "x,y,z"),
    LayerWyckoffPosition::new(44, 2, 'e', "..m", "x,y,0"),
    LayerWyckoffPosition::new(44, 2, 'd', "m..", "1/2,y,z"),
    LayerWyckoffPosition::new(44, 2, 'c', "m..", "0,y,z"),
    LayerWyckoffPosition::new(44, 1, 'b', "m2m", "1/2,y,0"),
    LayerWyckoffPosition::new(44, 1, 'a', "m2m", "0,y,0"),
    LayerWyckoffPosition::new(45, 4, 'f', "1", "x,y,z"),
    LayerWyckoffPosition::new(45, 2, 'e', "..m", "x,y,0"),
    LayerWyckoffPosition::new(45, 2, 'd', "m..", "x,1/2,z"),
    LayerWyckoffPosition::new(45, 2, 'c', "m..", "x,0,z"),
    LayerWyckoffPosition::new(45, 1, 'b', "m2m", "x,1/2,0"),
    LayerWyckoffPosition::new(45, 1, 'a', "m2m", "x,0,0"),
    LayerWyckoffPosition::new(46, 4, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(46, 2, 'b', "m..", "1/2,y,z"),
    LayerWyckoffPosition::new(46, 2, 'a', "m..", "0,y,z"),
    LayerWyckoffPosition::new(47, 4, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(47, 2, 'b', "m..", "x,1/2,z"),
    LayerWyckoffPosition::new(47, 2, 'a', "m..", "x,0,z"),
    LayerWyckoffPosition::new(48, 4, 'b', "1", "x,y,z"),
    LayerWyckoffPosition::new(48, 2, 'a', "..m", "x,y,0"),
    LayerWyckoffPosition::new(49, 4, 'b', "1", "x,y,z"),
    LayerWyckoffPosition::new(49, 2, 'a', "..m", "x,y,0"),
    LayerWyckoffPosition::new(50, 4, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(50, 2, 'b', ".2.", "1/2,y,0"),
    LayerWyckoffPosition::new(50, 2, 'a', ".2.", "0,y,0"),
    LayerWyckoffPosition::new(51, 4, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(51, 2, 'b', ".2.", "x,1/2,0"),
    LayerWyckoffPosition::new(51, 2, 'a', ".2.", "x,0,0"),
    LayerWyckoffPosition::new(52, 4, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(52, 2, 'b', "m..", "1/4,y,z"),
    LayerWyckoffPosition::new(52, 2, 'a', ".2.", "0,y,0"),
    LayerWyckoffPosition::new(53, 4, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(53, 2, 'b', "m..", "x,3/4,z"),
    LayerWyckoffPosition::new(53, 2, 'a', ".2.", "x,0,0"),
    LayerWyckoffPosition::new(54, 4, 'b', "1", "x,y,z"),
    LayerWyckoffPosition::new(54, 2, 'a', "m..", "0,y,z"),
    LayerWyckoffPosition::new(55, 4, 'b', "1", "x,y,z"),
    LayerWyckoffPosition::new(55, 2, 'a', "m..", "x,0,z"),
    LayerWyckoffPosition::new(56, 4, 'a', "1", "x,y,z"),
    LayerWyckoffPosition::new(57, 4, 'a', "1", "x,y,z"),
    LayerWyckoffPosition::new(58, 4, 'b', "1", "x,y,z"),
    LayerWyckoffPosition::new(58, 2, 'a', ".2.", "0,y,0"),
    LayerWyckoffPosition::new(59, 4, 'b', "1", "x,y,z"),
    LayerWyckoffPosition::new(59, 2, 'a', ".2.", "x,0,0"),
    LayerWyckoffPosition::new(60, 8, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(60, 4, 'c', "..m", "x,y,0"),
    LayerWyckoffPosition::new(60, 4, 'b', "m..", "0,y,z"),
    LayerWyckoffPosition::new(60, 2, 'a', "m2m", "0,y,0"),
    LayerWyckoffPosition::new(61, 8, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(61, 4, 'c', "..m", "x,y,0"),
    LayerWyckoffPosition::new(61, 4, 'b', "m..", "x,0,z"),
    LayerWyckoffPosition::new(61, 2, 'a', "m2m", "x,0,0"),
    LayerWyckoffPosition::new(62, 8, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(62, 4, 'b', "m..", "1/4,y,z"),
    LayerWyckoffPosition::new(62, 4, 'a', ".2.", "0,y,0"),
    LayerWyckoffPosition::new(63, 8, 'c', "1", "x,y,z"),
    LayerWyckoffPosition::new(63, 4, 'b', "m..", "x,3/4,z"),
    LayerWyckoffPosition::new(63, 4, 'a', ".2.", "x,0,0"),
    LayerWyckoffPosition::new(64, 8, 'r', "1", "x,y,z"),
    LayerWyckoffPosition::new(64, 4, 'q', "..m", "x,y,0"),
    LayerWyckoffPosition::new(64, 4, 'p', ".m.", "x,1/2,z"),
    LayerWyckoffPosition::new(64, 4, 'o', ".m.", "x,0,z"),
    LayerWyckoffPosition::new(64, 4, 'n', "m..", "1/2,y,z"),
    LayerWyckoffPosition::new(64, 4, 'm', "m..", "0,y,z"),
    LayerWyckoffPosition::new(64, 2, 'l', "mm2", "1/2,1/2,z"),
    LayerWyckoffPosition::new(64, 2, 'k', "mm2", "1/2,0,z"),
    LayerWyckoffPosition::new(64, 2, 'j', "mm2", "0,1/2,z"),
    LayerWyckoffPosition::new(64, 2, 'i', "mm2", "0,0,z"),
    LayerWyckoffPosition::new(64, 2, 'h', "m2m", "1/2,y,0"),
    LayerWyckoffPosition::new(64, 2, 'g', "m2m", "0,y,0"),
    LayerWyckoffPosition::new(64, 2, 'f', "2mm", "x,1/2,0"),
    LayerWyckoffPosition::new(64, 2, 'e', "2mm", "x,0,0"),
    LayerWyckoffPosition::new(64, 1, 'd', "mmm", "1/2,1/2,0"),
    LayerWyckoffPosition::new(64, 1, 'c', "mmm", "0,1/2,0"),
    LayerWyckoffPosition::new(64, 1, 'b', "mmm", "1/2,0,0"),
    LayerWyckoffPosition::new(64, 1, 'a', "mmm", "0,0,0"),
    LayerWyckoffPosition::new(65, 8, 'k', "1", "x,y,z"),
    LayerWyckoffPosition::new(65, 4, 'j', "m..", "0,y,z"),
    LayerWyckoffPosition::new(65, 4, 'i', "2..", "x,1/2,0"),
    LayerWyckoffPosition::new(65, 4, 'h', "2..", "x,0,0"),
    LayerWyckoffPosition::new(65, 4, 'g', "..2", "1/4,1/2,z"),
    LayerWyckoffPosition::new(65, 4, 'f', "..2", "1/4,0,z"),
    LayerWyckoffPosition::new(65, 4, 'e', ".2.", "1/4,y,0"),
    LayerWyckoffPosition::new(65, 2, 'd', "222", "1/4,1/2,0"),
    LayerWyckoffPosition::new(65, 2, 'c', "222", "1/4,0,0"),
    LayerWyckoffPosition::new(65, 2, 'b', "2/m..", "0,1/2,0"),
    LayerWyckoffPosition::new(65, 2, 'a', "2/m..", "0,0,0"),
    LayerWyckoffPosition::new(66, 8, 'k', "1", "x,y,z"),
    LayerWyckoffPosition::new(66, 4, 'j', "m..", "x,0,z"),
    LayerWyckoffPosition::new(66, 4, 'i', "2..", "1/2,y,0"),
    LayerWyckoffPosition::new(66, 4, 'h', "2..", "0,y,0"),
    LayerWyckoffPosition::new(66, 4, 'g', "..2", "1/2,3/4,z"),
    LayerWyckoffPosition::new(66, 4, 'f', "..2", "0,3/4,z"),
    LayerWyckoffPosition::new(66, 4, 'e', ".2.", "x,3/4,0"),
    LayerWyckoffPosition::new(66, 2, 'd', "222", "1/2,3/4,0"),
    LayerWyckoffPosition::new(66, 2, 'c', "222", "0,3/4,0"),
    LayerWyckoffPosition::new(66, 2, 'b', "2/m..", "1/2,0,0"),
    LayerWyckoffPosition::new(66, 2, 'a', "2/m..", "0,0,0"),
    LayerWyckoffPosition::new(67, 8, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(67, 4, 'g', "..2", "1/4,3/4,z"),
    LayerWyckoffPosition::new(67, 4, 'f', "..2", "1/4,1/4,z"),
    LayerWyckoffPosition::new(67, 4, 'e', ".2.", "1/4,y,0"),
    LayerWyckoffPosition::new(67, 4, 'd', "2..", "x,1/4,0"),
    LayerWyckoffPosition::new(67, 4, 'c', "-1", "0,0,0"),
    LayerWyckoffPosition::new(67, 2, 'b', "222", "3/4,1/4,0"),
    LayerWyckoffPosition::new(67, 2, 'a', "222", "1/4,1/4,0"),
    LayerWyckoffPosition::new(68, 8, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(68, 4, 'g', "m..", "1/4,y,z"),
    LayerWyckoffPosition::new(68, 4, 'f', "..m", "x,y,0"),
    LayerWyckoffPosition::new(68, 4, 'e', "..2", "0,1/2,z"),
    LayerWyckoffPosition::new(68, 4, 'd', "..2", "0,0,z"),
    LayerWyckoffPosition::new(68, 2, 'c', "m2m", "1/4,y,0"),
    LayerWyckoffPosition::new(68, 2, 'b', "..2/m", "0,1/2,0"),
    LayerWyckoffPosition::new(68, 2, 'a', "..2/m", "0,0,0"),
    LayerWyckoffPosition::new(69, 8, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(69, 4, 'g', "m..", "x,3/4,z"),
    LayerWyckoffPosition::new(69, 4, 'f', "..m", "x,y,0"),
    LayerWyckoffPosition::new(69, 4, 'e', "..2", "1/2,0,z"),
    LayerWyckoffPosition::new(69, 4, 'd', "..2", "0,0,z"),
    LayerWyckoffPosition::new(69, 2, 'c', "m2m", "x,3/4,0"),
    LayerWyckoffPosition::new(69, 2, 'b', "..2/m", "1/2,0,0"),
    LayerWyckoffPosition::new(69, 2, 'a', "..2/m", "0,0,0"),
    LayerWyckoffPosition::new(70, 8, 'i', "1", "x,y,z"),
    LayerWyckoffPosition::new(70, 4, 'h', "m..", "1/4,y,z"),
    LayerWyckoffPosition::new(70, 4, 'g', ".m.", "x,1/2,z"),
    LayerWyckoffPosition::new(70, 4, 'f', ".m.", "x,0,z"),
    LayerWyckoffPosition::new(70, 4, 'e', ".2.", "0,y,0"),
    LayerWyckoffPosition::new(70, 2, 'd', "mm2", "1/4,1/2,z"),
    LayerWyckoffPosition::new(70, 2, 'c', "mm2", "1/4,0,z"),
    LayerWyckoffPosition::new(70, 2, 'b', ".2/m.", "0,1/2,0"),
    LayerWyckoffPosition::new(70, 2, 'a', ".2/m.", "0,0,0"),
    LayerWyckoffPosition::new(71, 8, 'i', "1", "x,y,z"),
    LayerWyckoffPosition::new(71, 4, 'h', "m..", "x,3/4,z"),
    LayerWyckoffPosition::new(71, 4, 'g', ".m.", "1/2,y,z"),
    LayerWyckoffPosition::new(71, 4, 'f', ".m.", "0,y,z"),
    LayerWyckoffPosition::new(71, 4, 'e', ".2.", "x,0,0"),
    LayerWyckoffPosition::new(71, 2, 'd', "mm2", "1/2,3/4,z"),
    LayerWyckoffPosition::new(71, 2, 'c', "mm2", "0,3/4,z"),
    LayerWyckoffPosition::new(71, 2, 'b', ".2/m.", "1/2,0,0"),
    LayerWyckoffPosition::new(71, 2, 'a', ".2/m.", "0,0,0"),
    LayerWyckoffPosition::new(72, 8, 'f', "1", "x,y,z"),
    LayerWyckoffPosition::new(72, 4, 'e', "m..", "0,y,z"),
    LayerWyckoffPosition::new(72, 4, 'd', "..2", "1/4,1/4,z"),
    LayerWyckoffPosition::new(72, 4, 'c', "2..", "x,0,0"),
    LayerWyckoffPosition::new(72, 2, 'b', "2/m..", "1/2,0,0"),
    LayerWyckoffPosition::new(72, 2, 'a', "2/m..", "0,0,0"),
    LayerWyckoffPosition::new(73, 8, 'f', "1", "x,y,z"),
    LayerWyckoffPosition::new(73, 4, 'e', "m..", "x,0,z"),
    LayerWyckoffPosition::new(73, 4, 'd', "..2", "1/4,3/4,z"),
    LayerWyckoffPosition::new(73, 4, 'c', "2..", "0,y,0"),
    LayerWyckoffPosition::new(73, 2, 'b', "2/m..", "0,1/2,0"),
    LayerWyckoffPosition::new(73, 2, 'a', "2/m..", "0,0,0"),
    LayerWyckoffPosition::new(74, 8, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(74, 4, 'c', "2..", "x,1/4,0"),
    LayerWyckoffPosition::new(74, 4, 'b', "..2", "1/4,0,z"),
    LayerWyckoffPosition::new(74, 4, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(75, 8, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(75, 4, 'c', "2..", "1/4,y,0"),
    LayerWyckoffPosition::new(75, 4, 'b', "..2", "0,3/4,z"),
    LayerWyckoffPosition::new(75, 4, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(76, 8, 'f', "1", "x,y,z"),
    LayerWyckoffPosition::new(76, 4, 'e', "..m", "x,y,0"),
    LayerWyckoffPosition::new(76, 4, 'd', "..2", "0,1/2,z"),
    LayerWyckoffPosition::new(76, 4, 'c', "..2", "0,0,z"),
    LayerWyckoffPosition::new(76, 2, 'b', "..2/m", "0,1/2,0"),
    LayerWyckoffPosition::new(76, 2, 'a', "..2/m", "0,0,0"),
    LayerWyckoffPosition::new(77, 8, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(77, 4, 'c', ".m.", "x,1/4,z"),
    LayerWyckoffPosition::new(77, 4, 'b', "..2", "1/4,0,z"),
    LayerWyckoffPosition::new(77, 4, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(78, 8, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(78, 4, 'c', ".m.", "1/4,y,z"),
    LayerWyckoffPosition::new(78, 4, 'b', "..2", "0,3/4,z"),
    LayerWyckoffPosition::new(78, 4, 'a', "-1", "0,0,0"),
    LayerWyckoffPosition::new(79, 8, 'f', "1", "x,y,z"),
    LayerWyckoffPosition::new(79, 4, 'e', ".m.", "x,1/4,z"),
    LayerWyckoffPosition::new(79, 4, 'd', "m..", "1/4,y,z"),
    LayerWyckoffPosition::new(79, 4, 'c', "-1", "0,0,0"),
    LayerWyckoffPosition::new(79, 2, 'b', "mm2", "1/4,3/4,z"),
    LayerWyckoffPosition::new(79, 2, 'a', "mm2", "1/4,1/4,z"),
    LayerWyckoffPosition::new(80, 16, 'l', "1", "x,y,z"),
    LayerWyckoffPosition::new(80, 8, 'k', "..m", "x,y,0"),
    LayerWyckoffPosition::new(80, 8, 'j', ".m.", "x,0,z"),
    LayerWyckoffPosition::new(80, 8, 'i', "m..", "0,y,z"),
    LayerWyckoffPosition::new(80, 8, 'h', "..2", "1/4,1/4,z"),
    LayerWyckoffPosition::new(80, 4, 'g', "mm2", "0,1/2,z"),
    LayerWyckoffPosition::new(80, 4, 'f', "mm2", "0,0,z"),
    LayerWyckoffPosition::new(80, 4, 'e', "m2m", "0,y,0"),
    LayerWyckoffPosition::new(80, 4, 'd', "2mm", "x,0,0"),
    LayerWyckoffPosition::new(80, 4, 'c', "..2/m", "1/4,1/4,0"),
    LayerWyckoffPosition::new(80, 2, 'b', "mmm", "1/2,0,0"),
    LayerWyckoffPosition::new(80, 2, 'a', "mmm", "0,0,0"),
    LayerWyckoffPosition::new(81, 16, 'j', "1", "x,y,z"),
    LayerWyckoffPosition::new(81, 8, 'i', ".m.", "x,1/4,z"),
    LayerWyckoffPosition::new(81, 8, 'h', "m..", "0,y,z"),
    LayerWyckoffPosition::new(81, 8, 'g', "..2", "1/4,0,z"),
    LayerWyckoffPosition::new(81, 8, 'f', ".2.", "1/4,y,0"),
    LayerWyckoffPosition::new(81, 8, 'e', "2..", "x,0,0"),
    LayerWyckoffPosition::new(81, 4, 'd', "mm2", "0,1/4,z"),
    LayerWyckoffPosition::new(81, 4, 'c', ".2/m.", "1/4,1/4,0"),
    LayerWyckoffPosition::new(81, 4, 'b', "2/m..", "0,0,0"),
    LayerWyckoffPosition::new(81, 4, 'a', "222", "1/4,0,0"),
    LayerWyckoffPosition::new(82, 4, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(82, 2, 'c', "2..", "0,1/2,z"),
    LayerWyckoffPosition::new(82, 1, 'b', "4..", "1/2,1/2,z"),
    LayerWyckoffPosition::new(82, 1, 'a', "4..", "0,0,z"),
    LayerWyckoffPosition::new(83, 4, 'f', "1", "x,y,z"),
    LayerWyckoffPosition::new(83, 2, 'e', "2..", "0,1/2,z"),
    LayerWyckoffPosition::new(83, 2, 'd', "2..", "1/2,1/2,z"),
    LayerWyckoffPosition::new(83, 2, 'c', "2..", "0,0,z"),
    LayerWyckoffPosition::new(83, 1, 'b', "-4..", "1/2,1/2,0"),
    LayerWyckoffPosition::new(83, 1, 'a', "-4..", "0,0,0"),
    LayerWyckoffPosition::new(84, 8, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(84, 4, 'g', "m..", "x,y,0"),
    LayerWyckoffPosition::new(84, 4, 'f', "2..", "0,1/2,z"),
    LayerWyckoffPosition::new(84, 2, 'e', "4..", "1/2,1/2,z"),
    LayerWyckoffPosition::new(84, 2, 'd', "4..", "0,0,z"),
    LayerWyckoffPosition::new(84, 2, 'c', "2/m..", "0,1/2,0"),
    LayerWyckoffPosition::new(84, 1, 'b', "4/m..", "1/2,1/2,0"),
    LayerWyckoffPosition::new(84, 1, 'a', "4/m..", "0,0,0"),
    LayerWyckoffPosition::new(85, 8, 'e', "1", "x,y,z"),
    LayerWyckoffPosition::new(85, 4, 'd', "2..", "1/2,0,z"),
    LayerWyckoffPosition::new(85, 4, 'c', "-1", "1/4,1/4,0"),
    LayerWyckoffPosition::new(85, 2, 'b', "4..", "1/2,1/2,z"),
    LayerWyckoffPosition::new(85, 2, 'a', "-4..", "1/2,0,0"),
    LayerWyckoffPosition::new(86, 8, 'e', "1", "x,y,z"),
    LayerWyckoffPosition::new(86, 4, 'd', "2..", "1/4,3/4,z"),
    LayerWyckoffPosition::new(86, 4, 'c', "-1", "0,0,0"),
    LayerWyckoffPosition::new(86, 2, 'b', "4..", "1/4,1/4,z"),
    LayerWyckoffPosition::new(86, 2, 'a', "-4..", "1/4,3/4,0"),
    LayerWyckoffPosition::new(87, 8, 'j', "1", "x,y,z"),
    LayerWyckoffPosition::new(87, 4, 'i', ".2.", "x,1/2,0"),
    LayerWyckoffPosition::new(87, 4, 'h', ".2.", "x,0,0"),
    LayerWyckoffPosition::new(87, 4, 'g', "..2", "x,x,0"),
    LayerWyckoffPosition::new(87, 4, 'f', "2..", "0,1/2,z"),
    LayerWyckoffPosition::new(87, 2, 'e', "4..", "1/2,1/2,z"),
    LayerWyckoffPosition::new(87, 2, 'd', "4..", "0,0,z"),
    LayerWyckoffPosition::new(87, 2, 'c', "222", "1/2,0,0"),
    LayerWyckoffPosition::new(87, 1, 'b', "422", "1/2,1/2,0"),
    LayerWyckoffPosition::new(87, 1, 'a', "422", "0,0,0"),
    LayerWyckoffPosition::new(88, 8, 'e', "1", "x,y,z"),
    LayerWyckoffPosition::new(88, 4, 'd', "..2", "x,x+1/2,0"),
    LayerWyckoffPosition::new(88, 4, 'c', "2..", "0,1/2,z"),
    LayerWyckoffPosition::new(88, 2, 'b', "4..", "0,0,z"),
    LayerWyckoffPosition::new(88, 2, 'a', "2.22", "0,1/2,0"),
    LayerWyckoffPosition::new(89, 8, 'g', "1", "x,y,z"),
    LayerWyckoffPosition::new(89, 4, 'f', ".m.", "x,1/2,z"),
    LayerWyckoffPosition::new(89, 4, 'e', ".m.", "x,0,z"),
    LayerWyckoffPosition::new(89, 4, 'd', "..m", "x,x,z"),
    LayerWyckoffPosition::new(89, 2, 'c', "2mm.", "1/2,0,z"),
    LayerWyckoffPosition::new(89, 1, 'b', "4mm", "1/2,1/2,z"),
    LayerWyckoffPosition::new(89, 1, 'a', "4mm", "0,0,z"),
    LayerWyckoffPosition::new(90, 8, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(90, 4, 'c', "..m", "x,x+1/2,z"),
    LayerWyckoffPosition::new(90, 2, 'b', "2.mm", "1/2,0,z"),
    LayerWyckoffPosition::new(90, 2, 'a', "4..", "0,0,z"),
    LayerWyckoffPosition::new(91, 8, 'j', "1", "x,y,z"),
    LayerWyckoffPosition::new(91, 4, 'i', "..m", "x,x,z"),
    LayerWyckoffPosition::new(91, 4, 'h', "2..", "0,1/2,z"),
    LayerWyckoffPosition::new(91, 4, 'g', ".2.", "x,1/2,0"),
    LayerWyckoffPosition::new(91, 4, 'f', ".2.", "x,0,0"),
    LayerWyckoffPosition::new(91, 2, 'e', "2.mm", "1/2,1/2,z"),
    LayerWyckoffPosition::new(91, 2, 'd', "2.mm", "0,0,z"),
    LayerWyckoffPosition::new(91, 2, 'c', "222", "1/2,0,0"),
    LayerWyckoffPosition::new(91, 1, 'b', "-42m", "1/2,1/2,0"),
    LayerWyckoffPosition::new(91, 1, 'a', "-42m", "0,0,0"),
    LayerWyckoffPosition::new(92, 8, 'e', "1", "x,y,z"),
    LayerWyckoffPosition::new(92, 4, 'd', "..m", "x,x+1/2,z"),
    LayerWyckoffPosition::new(92, 4, 'c', "2..", "0,0,z"),
    LayerWyckoffPosition::new(92, 2, 'b', "2.mm", "0,1/2,z"),
    LayerWyckoffPosition::new(92, 2, 'a', "-4..", "0,0,0"),
    LayerWyckoffPosition::new(93, 8, 'i', "1", "x,y,z"),
    LayerWyckoffPosition::new(93, 4, 'h', ".m.", "x,1/2,z"),
    LayerWyckoffPosition::new(93, 4, 'g', ".m.", "x,0,z"),
    LayerWyckoffPosition::new(93, 4, 'f', "..2", "x,x,0"),
    LayerWyckoffPosition::new(93, 2, 'e', "2mm.", "0,1/2,z"),
    LayerWyckoffPosition::new(93, 2, 'd', "2mm.", "1/2,1/2,z"),
    LayerWyckoffPosition::new(93, 2, 'c', "2mm.", "0,0,z"),
    LayerWyckoffPosition::new(93, 1, 'b', "-4m2", "1/2,1/2,0"),
    LayerWyckoffPosition::new(93, 1, 'a', "-4m2", "0,0,0"),
    LayerWyckoffPosition::new(94, 8, 'f', "1", "x,y,z"),
    LayerWyckoffPosition::new(94, 4, 'e', "..2", "x,x+1/2,0"),
    LayerWyckoffPosition::new(94, 4, 'd', "2..", "0,1/2,z"),
    LayerWyckoffPosition::new(94, 4, 'c', "2..", "0,0,z"),
    LayerWyckoffPosition::new(94, 2, 'b', "2.22", "0,1/2,0"),
    LayerWyckoffPosition::new(94, 2, 'a', "-4..", "0,0,0"),
    LayerWyckoffPosition::new(95, 16, 'n', "1", "x,y,z"),
    LayerWyckoffPosition::new(95, 8, 'm', ".m.", "x,1/2,z"),
    LayerWyckoffPosition::new(95, 8, 'l', ".m.", "x,0,z"),
    LayerWyckoffPosition::new(95, 8, 'k', "..m", "x,x,z"),
    LayerWyckoffPosition::new(95, 8, 'j', "m..", "x,y,0"),
    LayerWyckoffPosition::new(95, 4, 'i', "m2m.", "x,1/2,0"),
    LayerWyckoffPosition::new(95, 4, 'h', "m2m.", "x,0,0"),
    LayerWyckoffPosition::new(95, 4, 'g', "m.2m", "x,x,0"),
    LayerWyckoffPosition::new(95, 4, 'f', "2mm.", "0,1/2,z"),
    LayerWyckoffPosition::new(95, 2, 'e', "4mm", "1/2,1/2,z"),
    LayerWyckoffPosition::new(95, 2, 'd', "4mm", "0,0,z"),
    LayerWyckoffPosition::new(95, 2, 'c', "mmm.", "0,1/2,0"),
    LayerWyckoffPosition::new(95, 1, 'b', "4/mmm", "1/2,1/2,0"),
    LayerWyckoffPosition::new(95, 1, 'a', "4/mmm", "0,0,0"),
    LayerWyckoffPosition::new(96, 16, 'i', "1", "x,y,z"),
    LayerWyckoffPosition::new(96, 8, 'h', "..m", "x,x+1/2,z"),
    LayerWyckoffPosition::new(96, 8, 'g', ".2.", "x,0,0"),
    LayerWyckoffPosition::new(96, 8, 'f', "..2", "x,x,0"),
    LayerWyckoffPosition::new(96, 4, 'e', "2.mm", "0,1/2,z"),
    LayerWyckoffPosition::new(96, 4, 'd', "4..", "0,0,z"),
    LayerWyckoffPosition::new(96, 4, 'c', "..2/m", "1/4,1/4,0"),
    LayerWyckoffPosition::new(96, 2, 'b', "-42m", "0,1/2,0"),
    LayerWyckoffPosition::new(96, 2, 'a', "422", "0,0,0"),
    LayerWyckoffPosition::new(97, 16, 'i', "1", "x,y,z"),
    LayerWyckoffPosition::new(97, 8, 'h', "..m", "x,-x,z"),
    LayerWyckoffPosition::new(97, 8, 'g', ".2.", "x,1/4,0"),
    LayerWyckoffPosition::new(97, 8, 'f', "..2", "x,x,0"),
    LayerWyckoffPosition::new(97, 4, 'e', "2.mm", "3/4,1/4,z"),
    LayerWyckoffPosition::new(97, 4, 'd', "4..", "1/4,1/4,z"),
    LayerWyckoffPosition::new(97, 4, 'c', "..2/m", "0,0,0"),
    LayerWyckoffPosition::new(97, 2, 'b', "-42m", "3/4,1/4,0"),
    LayerWyckoffPosition::new(97, 2, 'a', "422", "1/4,1/4,0"),
    LayerWyckoffPosition::new(98, 16, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(98, 8, 'g', "..m", "x,x+1/2,z"),
    LayerWyckoffPosition::new(98, 8, 'f', "m..", "x,y,0"),
    LayerWyckoffPosition::new(98, 4, 'e', "m.2m", "x,x+1/2,0"),
    LayerWyckoffPosition::new(98, 4, 'd', "2.mm", "0,1/2,z"),
    LayerWyckoffPosition::new(98, 4, 'c', "4..", "0,0,z"),
    LayerWyckoffPosition::new(98, 2, 'b', "m.mm", "0,1/2,0"),
    LayerWyckoffPosition::new(98, 2, 'a', "4/m..", "0,0,0"),
    LayerWyckoffPosition::new(99, 16, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(99, 8, 'g', "..m", "x,x,z"),
    LayerWyckoffPosition::new(99, 8, 'f', ".m.", "0,y,z"),
    LayerWyckoffPosition::new(99, 8, 'e', "..2", "x,x+1/2,0"),
    LayerWyckoffPosition::new(99, 4, 'd', "2mm.", "1/2,0,z"),
    LayerWyckoffPosition::new(99, 4, 'c', "..2/m", "1/4,1/4,0"),
    LayerWyckoffPosition::new(99, 2, 'b', "4mm", "0,0,z"),
    LayerWyckoffPosition::new(99, 2, 'a', "-4m2", "1/2,0,0"),
    LayerWyckoffPosition::new(100, 16, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(100, 8, 'g', "..m", "x,x,z"),
    LayerWyckoffPosition::new(100, 8, 'f', ".m.", "1/4,y,z"),
    LayerWyckoffPosition::new(100, 8, 'e', "..2", "x,-x,0"),
    LayerWyckoffPosition::new(100, 4, 'd', "2mm.", "3/4,1/4,z"),
    LayerWyckoffPosition::new(100, 4, 'c', "..2/m", "0,0,0"),
    LayerWyckoffPosition::new(100, 2, 'b', "4mm", "1/4,1/4,z"),
    LayerWyckoffPosition::new(100, 2, 'a', "-4m2", "3/4,1/4,0"),
    LayerWyckoffPosition::new(101, 3, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(101, 1, 'c', "3..", "2/3,1/3,z"),
    LayerWyckoffPosition::new(101, 1, 'b', "3..", "1/3,2/3,z"),
    LayerWyckoffPosition::new(101, 1, 'a', "3..", "0,0,z"),
    LayerWyckoffPosition::new(102, 6, 'e', "1", "x,y,z"),
    LayerWyckoffPosition::new(102, 3, 'd', "-1", "1/2,0,0"),
    LayerWyckoffPosition::new(102, 2, 'c', "3..", "1/3,2/3,z"),
    LayerWyckoffPosition::new(102, 2, 'b', "3..", "0,0,z"),
    LayerWyckoffPosition::new(102, 1, 'a', "-3..", "0,0,0"),
    LayerWyckoffPosition::new(103, 6, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(103, 3, 'g', "..2", "x,-x,0"),
    LayerWyckoffPosition::new(103, 2, 'f', "3..", "2/3,1/3,z"),
    LayerWyckoffPosition::new(103, 2, 'e', "3..", "1/3,2/3,z"),
    LayerWyckoffPosition::new(103, 2, 'd', "3..", "0,0,z"),
    LayerWyckoffPosition::new(103, 1, 'c', "3.2", "2/3,1/3,0"),
    LayerWyckoffPosition::new(103, 1, 'b', "3.2", "1/3,2/3,0"),
    LayerWyckoffPosition::new(103, 1, 'a', "3.2", "0,0,0"),
    LayerWyckoffPosition::new(104, 6, 'e', "1", "x,y,z"),
    LayerWyckoffPosition::new(104, 3, 'd', ".2.", "x,0,0"),
    LayerWyckoffPosition::new(104, 2, 'c', "3..", "1/3,2/3,z"),
    LayerWyckoffPosition::new(104, 2, 'b', "3..", "0,0,z"),
    LayerWyckoffPosition::new(104, 1, 'a', "32.", "0,0,0"),
    LayerWyckoffPosition::new(105, 6, 'e', "1", "x,y,z"),
    LayerWyckoffPosition::new(105, 3, 'd', ".m.", "x,-x,z"),
    LayerWyckoffPosition::new(105, 1, 'c', "3m.", "2/3,1/3,z"),
    LayerWyckoffPosition::new(105, 1, 'b', "3m.", "1/3,2/3,z"),
    LayerWyckoffPosition::new(105, 1, 'a', "3m.", "0,0,z"),
    LayerWyckoffPosition::new(106, 6, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(106, 3, 'c', "..m", "x,0,z"),
    LayerWyckoffPosition::new(106, 2, 'b', "3..", "1/3,2/3,z"),
    LayerWyckoffPosition::new(106, 1, 'a', "3.m", "0,0,z"),
    LayerWyckoffPosition::new(107, 12, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(107, 6, 'g', "..m", "x,0,z"),
    LayerWyckoffPosition::new(107, 6, 'f', "..2", "x,-x,0"),
    LayerWyckoffPosition::new(107, 4, 'e', "3..", "1/3,2/3,z"),
    LayerWyckoffPosition::new(107, 3, 'd', "..2/m", "1/2,0,0"),
    LayerWyckoffPosition::new(107, 2, 'c', "3.m", "0,0,z"),
    LayerWyckoffPosition::new(107, 2, 'b', "3.2", "1/3,2/3,0"),
    LayerWyckoffPosition::new(107, 1, 'a', "-3.m", "0,0,0"),
    LayerWyckoffPosition::new(108, 12, 'g', "1", "x,y,z"),
    LayerWyckoffPosition::new(108, 6, 'f', ".m.", "x,-x,z"),
    LayerWyckoffPosition::new(108, 6, 'e', ".2.", "x,0,0"),
    LayerWyckoffPosition::new(108, 3, 'd', ".2/m.", "1/2,0,0"),
    LayerWyckoffPosition::new(108, 2, 'c', "3m.", "1/3,2/3,z"),
    LayerWyckoffPosition::new(108, 2, 'b', "3m.", "0,0,z"),
    LayerWyckoffPosition::new(108, 1, 'a', "-3m.", "0,0,0"),
    LayerWyckoffPosition::new(109, 6, 'd', "1", "x,y,z"),
    LayerWyckoffPosition::new(109, 3, 'c', "2..", "1/2,0,z"),
    LayerWyckoffPosition::new(109, 2, 'b', "3..", "1/3,2/3,z"),
    LayerWyckoffPosition::new(109, 1, 'a', "6..", "0,0,z"),
    LayerWyckoffPosition::new(110, 6, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(110, 3, 'g', "m..", "x,y,0"),
    LayerWyckoffPosition::new(110, 2, 'f', "3..", "2/3,1/3,z"),
    LayerWyckoffPosition::new(110, 2, 'e', "3..", "1/3,2/3,z"),
    LayerWyckoffPosition::new(110, 2, 'd', "3..", "0,0,z"),
    LayerWyckoffPosition::new(110, 1, 'c', "-6..", "2/3,1/3,0"),
    LayerWyckoffPosition::new(110, 1, 'b', "-6..", "1/3,2/3,0"),
    LayerWyckoffPosition::new(110, 1, 'a', "-6..", "0,0,0"),
    LayerWyckoffPosition::new(111, 12, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(111, 6, 'g', "m..", "x,y,0"),
    LayerWyckoffPosition::new(111, 6, 'f', "2..", "1/2,0,z"),
    LayerWyckoffPosition::new(111, 4, 'e', "3..", "1/3,2/3,z"),
    LayerWyckoffPosition::new(111, 3, 'd', "2/m..", "1/2,0,0"),
    LayerWyckoffPosition::new(111, 2, 'c', "6..", "0,0,z"),
    LayerWyckoffPosition::new(111, 2, 'b', "-6..", "1/3,2/3,0"),
    LayerWyckoffPosition::new(111, 1, 'a', "6/m..", "0,0,0"),
    LayerWyckoffPosition::new(112, 12, 'i', "1", "x,y,z"),
    LayerWyckoffPosition::new(112, 6, 'h', "..2", "x,-x,0"),
    LayerWyckoffPosition::new(112, 6, 'g', ".2.", "x,0,0"),
    LayerWyckoffPosition::new(112, 6, 'f', "2..", "1/2,0,z"),
    LayerWyckoffPosition::new(112, 4, 'e', "3..", "1/3,2/3,z"),
    LayerWyckoffPosition::new(112, 3, 'd', "222", "1/2,0,0"),
    LayerWyckoffPosition::new(112, 2, 'c', "6..", "0,0,z"),
    LayerWyckoffPosition::new(112, 2, 'b', "3.2", "1/3,2/3,0"),
    LayerWyckoffPosition::new(112, 1, 'a', "622", "0,0,0"),
    LayerWyckoffPosition::new(113, 12, 'f', "1", "x,y,z"),
    LayerWyckoffPosition::new(113, 6, 'e', ".m.", "x,-x,z"),
    LayerWyckoffPosition::new(113, 6, 'd', "..m", "x,0,z"),
    LayerWyckoffPosition::new(113, 3, 'c', "2mm", "1/2,0,z"),
    LayerWyckoffPosition::new(113, 2, 'b', "3m.", "1/3,2/3,z"),
    LayerWyckoffPosition::new(113, 1, 'a', "6mm", "0,0,z"),
    LayerWyckoffPosition::new(114, 12, 'j', "1", "x,y,z"),
    LayerWyckoffPosition::new(114, 6, 'i', ".m.", "x,-x,z"),
    LayerWyckoffPosition::new(114, 6, 'h', "m..", "x,y,0"),
    LayerWyckoffPosition::new(114, 3, 'g', "mm2", "x,-x,0"),
    LayerWyckoffPosition::new(114, 2, 'f', "3m.", "2/3,1/3,z"),
    LayerWyckoffPosition::new(114, 2, 'e', "3m.", "1/3,2/3,z"),
    LayerWyckoffPosition::new(114, 2, 'd', "3m.", "0,0,z"),
    LayerWyckoffPosition::new(114, 1, 'c', "-6m2", "2/3,1/3,0"),
    LayerWyckoffPosition::new(114, 1, 'b', "-6m2", "1/3,2/3,0"),
    LayerWyckoffPosition::new(114, 1, 'a', "-6m2", "0,0,0"),
    LayerWyckoffPosition::new(115, 12, 'h', "1", "x,y,z"),
    LayerWyckoffPosition::new(115, 6, 'g', "m..", "x,y,0"),
    LayerWyckoffPosition::new(115, 6, 'f', "..m", "x,0,z"),
    LayerWyckoffPosition::new(115, 4, 'e', "3..", "1/3,2/3,z"),
    LayerWyckoffPosition::new(115, 3, 'd', "m2m", "x,0,0"),
    LayerWyckoffPosition::new(115, 2, 'c', "3.m", "0,0,z"),
    LayerWyckoffPosition::new(115, 2, 'b', "-6..", "1/3,2/3,0"),
    LayerWyckoffPosition::new(115, 1, 'a', "-62m", "0,0,0"),
    LayerWyckoffPosition::new(116, 24, 'l', "1", "x,y,z"),
    LayerWyckoffPosition::new(116, 12, 'k', "m..", "x,y,0"),
    LayerWyckoffPosition::new(116, 12, 'j', ".m.", "x,2x,z"),
    LayerWyckoffPosition::new(116, 12, 'i', "..m", "x,0,z"),
    LayerWyckoffPosition::new(116, 6, 'h', "mm2", "x,2x,0"),
    LayerWyckoffPosition::new(116, 6, 'g', "m2m", "x,0,0"),
    LayerWyckoffPosition::new(116, 6, 'f', "2mm", "1/2,0,z"),
    LayerWyckoffPosition::new(116, 4, 'e', "3m.", "1/3,2/3,z"),
    LayerWyckoffPosition::new(116, 3, 'd', "mmm", "1/2,0,0"),
    LayerWyckoffPosition::new(116, 2, 'c', "6mm", "0,0,z"),
    LayerWyckoffPosition::new(116, 2, 'b', "-6m2", "1/3,2/3,0"),
    LayerWyckoffPosition::new(116, 1, 'a', "6/mmm", "0,0,0"),
];

#[cfg(test)]
mod tests {
    use super::*;
    use crate::data::iter_layer_hall_symbol_entry;
    use std::collections::HashSet;

    /// Every Hall number in `LAYER_HALL_SYMBOL_DATABASE` (1-116) must have at
    /// least one Wyckoff position. The two databases are sourced from the same
    /// spglib commit, so a missing key here would mean the ingest is wrong.
    #[test]
    fn test_every_layer_hall_has_wyckoffs() {
        let with_wyckoff: HashSet<LayerHallNumber> = LAYER_WYCKOFF_DATABASE
            .iter()
            .map(|w| w.hall_number)
            .collect();
        for entry in iter_layer_hall_symbol_entry() {
            assert!(
                with_wyckoff.contains(&entry.hall_number),
                "no Wyckoff positions for layer Hall number {}",
                entry.hall_number
            );
        }
    }

    /// Wyckoff letters within a single Hall number are unique (each letter
    /// labels exactly one orbit).
    #[test]
    fn test_wyckoff_letters_unique_per_hall() {
        let mut by_hall: std::collections::HashMap<LayerHallNumber, Vec<char>> =
            std::collections::HashMap::new();
        for w in LAYER_WYCKOFF_DATABASE.iter() {
            by_hall.entry(w.hall_number).or_default().push(w.letter);
        }
        for (hall, letters) in by_hall.iter() {
            let unique: HashSet<&char> = letters.iter().collect();
            assert_eq!(
                unique.len(),
                letters.len(),
                "duplicate Wyckoff letter for layer Hall {}: {:?}",
                hall,
                letters
            );
        }
    }
}