1use std::fmt;
15use crate::random::Random;
16use crate::stats::Stats;
17use crate::stats::Builder;
18use serde::{Deserialize, Serialize};
19#[cfg(feature = "fltkform")]
20use fltk::{prelude::*, *};
21#[cfg(feature = "fltkform")]
22use fltk_form_derive::*;
23#[cfg(feature = "fltkform")]
24use fltk_form::FltkForm;
25#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
26#[cfg_attr(feature = "fltkform", derive(FltkForm))]
27pub enum Polarity {
31 Polar,
33 Ionic,
35 None,
37}
38impl Default for Polarity {
39 fn default() -> Self {
40 Self::None
41 }
42}
43#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
44#[cfg_attr(feature = "fltkform", derive(FltkForm))]
45pub enum Bonds {
49 Covalent,
50 Ionic,
51 Metallic,
52 CoordinateCovalent,
53 None,
54}
55impl Default for Bonds {
56 fn default() -> Self {
57 Self::None
58 }
59}
60pub struct Molecule {
65
66}
67
68#[derive(Debug, Clone, Default, PartialEq, Eq, Deserialize, Serialize)]
69#[cfg_attr(feature = "fltkform", derive(FltkForm))]
70pub struct Compound {
75 pub atoms:Vec<Periodic>,
77}
78
79#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
80#[cfg_attr(feature = "fltkform", derive(FltkForm))]
81pub enum Periodic {
85 Actinium,
87 Aluminum,
89 Americium,
91 Antimony,
93 Argon,
95 Arsenic,
97 Astatine,
99 Barium,
101 Berkelium,
103 Beryllium,
105 Bismuth,
107 Bohrium,
109 Boron,
111 Bromine,
113 Cadmium,
115 Calcium,
117 Californium,
119 Carbon,
121 Cerium,
123 Cesium,
125 Chlorine,
127 Chromium,
129 Cobalt,
131 Copernicium,
133 Copper,
135 Curium,
137 Darmstadtium,
139 Dubnium,
141 Dysprosium,
143 Einsteinium,
145 Erbium,
147 Europium,
149 Fermium,
151 Flerovium,
153 Fluorine,
155 Francium,
157 Gadolinium,
159 Gallium,
161 Germanium,
163 Gold,
165 Hafnium,
167 Hassium,
169 Helium,
171 Holmium,
173 Hydrogen,
175 Indium,
177 Iodine,
179 Iridium,
181 Iron,
183 Krypton,
185 Lanthanum,
187 Lawrencium,
189 Lead,
191 Lithium,
193 Livermorium,
195 Lutetium,
197 Magnesium,
199 Moscovium,
201 Manganese,
203 Meitnerium,
205 Mendelevium,
207 Mercury,
209 Molybdenum,
211 Neilsborium,
213 Neodymium,
215 Neon,
217 Neptunium,
219 Nihonium,
221 Nickel,
223 Niobium,
225 Nitrogen,
227 Nobelium,
229 Oganesson,
231 Osmium,
233 Oxygen,
235 Palladium,
237 Phosphorus,
239 Platinum,
241 Plutonium,
243 Polonium,
245 Praseodymium,
247 Potassium,
249 Promethium,
251 Protactinium,
253 Radium,
255 Radon,
257 Rhenium,
259 Rhodium,
261 Roentgenium,
263 Rubidium,
265 Ruthenium,
267 Rutherfordium,
269 Samarium,
271 Scandium,
273 Seaborgium,
275 Selenium,
277 Silicon,
279 Silver,
281 Sodium,
283 Strontium,
285 Sulfur,
287 Tantalum,
289 Technetium,
291 Tellurium,
293 Tennessine,
295 Terbium,
297 Thallium,
299 Thorium,
301 Thulium,
303 Tin,
305 Titanium,
307 Tungsten,
309 Uranium,
311 Vanadium,
313 Xenon,
315 Ytterbium,
317 Yttrium,
319 Zinc,
321 Zirconium,
323 None,
325}
326impl Periodic {
327 pub fn periodics() -> Vec<Periodic> {
329 vec![
330 Periodic::Actinium,
331 Periodic::Aluminum,
332 Periodic::Americium,
333 Periodic::Antimony,
334 Periodic::Argon,
335 Periodic::Arsenic,
336 Periodic::Astatine,
337 Periodic::Barium,
338 Periodic::Berkelium,
339 Periodic::Beryllium,
340 Periodic::Bismuth,
341 Periodic::Bohrium,
342 Periodic::Boron,
343 Periodic::Bromine,
344 Periodic::Cadmium,
345 Periodic::Calcium,
346 Periodic::Californium,
347 Periodic::Carbon,
348 Periodic::Cerium,
349 Periodic::Cesium,
350 Periodic::Chlorine,
351 Periodic::Chromium,
352 Periodic::Cobalt,
353 Periodic::Copernicium,
354 Periodic::Copper,
355 Periodic::Curium,
356 Periodic::Darmstadtium,
357 Periodic::Dubnium,
358 Periodic::Dysprosium,
359 Periodic::Einsteinium,
360 Periodic::Erbium,
361 Periodic::Europium,
362 Periodic::Fermium,
363 Periodic::Flerovium,
364 Periodic::Fluorine,
365 Periodic::Francium,
366 Periodic::Gadolinium,
367 Periodic::Gallium,
368 Periodic::Germanium,
369 Periodic::Gold,
370 Periodic::Hafnium,
371 Periodic::Hassium,
372 Periodic::Helium,
373 Periodic::Holmium,
374 Periodic::Hydrogen,
375 Periodic::Indium,
376 Periodic::Iodine,
377 Periodic::Iridium,
378 Periodic::Iron,
379 Periodic::Krypton,
380 Periodic::Lanthanum,
381 Periodic::Lawrencium,
382 Periodic::Lead,
383 Periodic::Lithium,
384 Periodic::Livermorium,
385 Periodic::Lutetium,
386 Periodic::Magnesium,
387 Periodic::Moscovium,
388 Periodic::Manganese,
389 Periodic::Meitnerium,
390 Periodic::Mendelevium,
391 Periodic::Mercury,
392 Periodic::Molybdenum,
393 Periodic::Neilsborium,
394 Periodic::Neodymium,
395 Periodic::Neon,
396 Periodic::Neptunium,
397 Periodic::Nihonium,
398 Periodic::Nickel,
399 Periodic::Niobium,
400 Periodic::Nitrogen,
401 Periodic::Nobelium,
402 Periodic::Oganesson,
403 Periodic::Osmium,
404 Periodic::Oxygen,
405 Periodic::Palladium,
406 Periodic::Phosphorus,
407 Periodic::Platinum,
408 Periodic::Plutonium,
409 Periodic::Polonium,
410 Periodic::Praseodymium,
411 Periodic::Potassium,
412 Periodic::Promethium,
413 Periodic::Protactinium,
414 Periodic::Radium,
415 Periodic::Radon,
416 Periodic::Rhenium,
417 Periodic::Rhodium,
418 Periodic::Roentgenium,
419 Periodic::Rubidium,
420 Periodic::Ruthenium,
421 Periodic::Rutherfordium,
422 Periodic::Samarium,
423 Periodic::Scandium,
424 Periodic::Seaborgium,
425 Periodic::Selenium,
426 Periodic::Silicon,
427 Periodic::Silver,
428 Periodic::Sodium,
429 Periodic::Strontium,
430 Periodic::Sulfur,
431 Periodic::Tantalum,
432 Periodic::Technetium,
433 Periodic::Tellurium,
434 Periodic::Tennessine,
435 Periodic::Terbium,
436 Periodic::Thallium,
437 Periodic::Thorium,
438 Periodic::Thulium,
439 Periodic::Tin,
440 Periodic::Titanium,
441 Periodic::Tungsten,
442 Periodic::Uranium,
443 Periodic::Vanadium,
444 Periodic::Xenon,
445 Periodic::Ytterbium,
446 Periodic::Yttrium,
447 Periodic::Zinc,
448 Periodic::Zirconium,
449 ]
450 }
451 pub fn get_atomic_number(periodic:Periodic) -> f64 {
453 periodic.atomic_number()
454 }
455 pub fn atomic_number(&self) -> f64 {
457 match *self {
458 Periodic::Actinium => 89.0,
459 Periodic::Aluminum => 13.0,
460 Periodic::Americium => 95.0,
461 Periodic::Antimony => 51.0,
462 Periodic::Argon => 18.0,
463 Periodic::Arsenic => 33.0,
464 Periodic::Astatine => 85.0,
465 Periodic::Barium => 56.0,
466 Periodic::Berkelium => 97.0,
467 Periodic::Beryllium => 4.0,
468 Periodic::Bismuth => 83.0,
469 Periodic::Bohrium => 107.0,
470 Periodic::Boron => 5.0,
471 Periodic::Bromine => 35.0,
472 Periodic::Cadmium => 48.0,
473 Periodic::Calcium => 20.0,
474 Periodic::Californium => 98.0,
475 Periodic::Carbon => 6.0,
476 Periodic::Cerium => 58.0,
477 Periodic::Cesium => 55.0,
478 Periodic::Chlorine => 17.0,
479 Periodic::Chromium => 24.0,
480 Periodic::Cobalt => 27.0,
481 Periodic::Copernicium => 112.0,
482 Periodic::Copper => 29.0,
483 Periodic::Curium => 96.0,
484 Periodic::Darmstadtium => 110.0,
485 Periodic::Dubnium => 105.0,
486 Periodic::Dysprosium => 66.0,
487 Periodic::Einsteinium => 99.0,
488 Periodic::Erbium => 68.0,
489 Periodic::Europium => 63.0,
490 Periodic::Fermium => 100.0,
491 Periodic::Flerovium => 114.0,
492 Periodic::Fluorine => 9.0,
493 Periodic::Francium => 87.0,
494 Periodic::Gadolinium => 64.0,
495 Periodic::Gallium => 31.0,
496 Periodic::Germanium => 32.0,
497 Periodic::Gold => 79.0,
498 Periodic::Hafnium => 72.0,
499 Periodic::Hassium => 108.0,
500 Periodic::Helium => 2.0,
501 Periodic::Holmium => 67.0,
502 Periodic::Hydrogen => 1.0,
503 Periodic::Indium => 49.0,
504 Periodic::Iodine => 53.0,
505 Periodic::Iridium => 77.0,
506 Periodic::Iron => 26.0,
507 Periodic::Krypton => 36.0,
508 Periodic::Lanthanum => 57.0,
509 Periodic::Lawrencium => 103.0,
510 Periodic::Lead => 82.0,
511 Periodic::Lithium => 3.0,
512 Periodic::Livermorium => 116.0,
513 Periodic::Lutetium => 71.0,
514 Periodic::Magnesium => 12.0,
515 Periodic::Moscovium => 115.0,
516 Periodic::Manganese => 25.0,
517 Periodic::Meitnerium => 109.0,
518 Periodic::Mendelevium => 101.0,
519 Periodic::Mercury => 80.0,
520 Periodic::Molybdenum => 42.0,
521 Periodic::Neilsborium => 107.0,
522 Periodic::Neodymium => 60.0,
523 Periodic::Neon => 10.0,
524 Periodic::Neptunium => 93.0,
525 Periodic::Nihonium => 113.0,
526 Periodic::Nickel => 28.0,
527 Periodic::Niobium => 41.0,
528 Periodic::Nitrogen => 7.0,
529 Periodic::Nobelium => 102.0,
530 Periodic::Oganesson => 118.0,
531 Periodic::Osmium => 76.0,
532 Periodic::Oxygen => 8.0,
533 Periodic::Palladium => 46.0,
534 Periodic::Phosphorus => 15.0,
535 Periodic::Platinum => 78.0,
536 Periodic::Plutonium => 94.0,
537 Periodic::Polonium => 84.0,
538 Periodic::Praseodymium => 59.0,
539 Periodic::Potassium => 19.0,
540 Periodic::Promethium => 61.0,
541 Periodic::Protactinium => 91.0,
542 Periodic::Radium => 88.0,
543 Periodic::Radon => 86.0,
544 Periodic::Rhenium => 75.0,
545 Periodic::Rhodium => 45.0,
546 Periodic::Roentgenium => 111.0,
547 Periodic::Rubidium => 37.0,
548 Periodic::Ruthenium => 44.0,
549 Periodic::Rutherfordium => 104.0,
550 Periodic::Samarium => 62.0,
551 Periodic::Scandium => 21.0,
552 Periodic::Seaborgium => 106.0,
553 Periodic::Selenium => 34.0,
554 Periodic::Silicon => 14.0,
555 Periodic::Silver => 47.0,
556 Periodic::Sodium => 11.0,
557 Periodic::Strontium => 38.0,
558 Periodic::Sulfur => 16.0,
559 Periodic::Tantalum => 73.0,
560 Periodic::Technetium => 43.0,
561 Periodic::Tellurium => 52.0,
562 Periodic::Tennessine => 117.0,
563 Periodic::Terbium => 65.0,
564 Periodic::Thallium => 81.0,
565 Periodic::Thorium => 90.0,
566 Periodic::Thulium => 69.0,
567 Periodic::Tin => 50.0,
568 Periodic::Titanium => 22.0,
569 Periodic::Tungsten => 74.0,
570 Periodic::Uranium => 92.0,
571 Periodic::Vanadium => 23.0,
572 Periodic::Xenon => 54.0,
573 Periodic::Ytterbium => 70.0,
574 Periodic::Yttrium => 39.0,
575 Periodic::Zinc => 30.0,
576 Periodic::Zirconium => 40.0,
577 _=> 0.0,
578 }
579 }
580 pub fn abreviation(&self) -> &str {
581 match *self {
582 Periodic::Actinium => "Ac",
583 Periodic::Aluminum => "Al",
584 Periodic::Americium => "Am",
585 Periodic::Antimony => "Sb",
586 Periodic::Argon => "Ar",
587 Periodic::Arsenic => "As",
588 Periodic::Astatine => "At",
589 Periodic::Barium => "Ba",
590 Periodic::Berkelium => "Bk",
591 Periodic::Beryllium => "Be",
592 Periodic::Bismuth => "Bi",
593 Periodic::Bohrium => "Bh",
594 Periodic::Boron => "B",
595 Periodic::Bromine => "Br",
596 Periodic::Cadmium => "Cd",
597 Periodic::Calcium => "Ca",
598 Periodic::Californium => "Cf",
599 Periodic::Carbon => "C",
600 Periodic::Cerium => "Ce",
601 Periodic::Cesium => "Cs",
602 Periodic::Chlorine => "Cl",
603 Periodic::Chromium => "Cr",
604 Periodic::Cobalt => "Co",
605 Periodic::Copernicium => "Cn",
606 Periodic::Copper => "Cu",
607 Periodic::Curium => "Cm",
608 Periodic::Darmstadtium => "Ds",
609 Periodic::Dubnium => "Db",
610 Periodic::Dysprosium => "Dy",
611 Periodic::Einsteinium => "Es",
612 Periodic::Erbium => "Er",
613 Periodic::Europium => "Eu",
614 Periodic::Fermium => "Fm",
615 Periodic::Flerovium => "Fl",
616 Periodic::Fluorine => "F",
617 Periodic::Francium => "Fr",
618 Periodic::Gadolinium => "Gd",
619 Periodic::Gallium => "Ga",
620 Periodic::Germanium => "Ge",
621 Periodic::Gold => "Au",
622 Periodic::Hafnium => "Hf",
623 Periodic::Hassium => "Hs",
624 Periodic::Helium => "He",
625 Periodic::Holmium => "Ho",
626 Periodic::Hydrogen => "H",
627 Periodic::Indium => "In",
628 Periodic::Iodine => "I",
629 Periodic::Iridium => "Ir",
630 Periodic::Iron => "Fe",
631 Periodic::Krypton => "Kr",
632 Periodic::Lanthanum => "La",
633 Periodic::Lawrencium => "Lr",
634 Periodic::Lead => "Pb",
635 Periodic::Lithium => "Li",
636 Periodic::Livermorium => "Lv",
637 Periodic::Lutetium => "Lu",
638 Periodic::Magnesium => "Mg",
639 Periodic::Moscovium => "Mc",
640 Periodic::Manganese => "Mn",
641 Periodic::Meitnerium => "Mt",
642 Periodic::Mendelevium => "Md",
643 Periodic::Mercury => "Hg",
644 Periodic::Molybdenum => "Mo",
645 Periodic::Neilsborium => "Ns",
646 Periodic::Neodymium => "Nd",
647 Periodic::Neon => "Ne",
648 Periodic::Neptunium => "Np",
649 Periodic::Nihonium => "Nh",
650 Periodic::Nickel => "Ni",
651 Periodic::Niobium => "Nb",
652 Periodic::Nitrogen => "N",
653 Periodic::Nobelium => "No",
654 Periodic::Oganesson => "Og",
655 Periodic::Osmium => "Os",
656 Periodic::Oxygen => "O",
657 Periodic::Palladium => "Pd",
658 Periodic::Phosphorus => "P",
659 Periodic::Platinum => "Pt",
660 Periodic::Plutonium => "Pu",
661 Periodic::Polonium => "Po",
662 Periodic::Praseodymium => "Pr",
663 Periodic::Potassium => "K",
664 Periodic::Promethium => "Pm",
665 Periodic::Protactinium => "Pa",
666 Periodic::Radium => "Ra",
667 Periodic::Radon => "Rn",
668 Periodic::Rhenium => "Re",
669 Periodic::Rhodium => "Rh",
670 Periodic::Roentgenium => "Rg",
671 Periodic::Rubidium => "Rb",
672 Periodic::Ruthenium => "Ru",
673 Periodic::Rutherfordium => "Rf",
674 Periodic::Samarium => "Sm",
675 Periodic::Scandium => "Sc",
676 Periodic::Seaborgium => "Sg",
677 Periodic::Selenium => "Se",
678 Periodic::Silicon => "Si",
679 Periodic::Silver => "Ag",
680 Periodic::Sodium => "Na",
681 Periodic::Strontium => "Sr",
682 Periodic::Sulfur => "S",
683 Periodic::Tantalum => "Ta",
684 Periodic::Technetium => "Tc",
685 Periodic::Tellurium => "Te",
686 Periodic::Tennessine => "Ts",
687 Periodic::Terbium => "Tb",
688 Periodic::Thallium => "Tl",
689 Periodic::Thorium => "Th",
690 Periodic::Thulium => "Tm",
691 Periodic::Tin => "Sn",
692 Periodic::Titanium => "Ti",
693 Periodic::Tungsten => "W",
694 Periodic::Uranium => "U",
695 Periodic::Vanadium => "V",
696 Periodic::Xenon => "Xe",
697 Periodic::Ytterbium => "Yb",
698 Periodic::Yttrium => "Y",
699 Periodic::Zinc => "Zn",
700 Periodic::Zirconium => "Zr",
701 _=> "",
702 }
703 }
704}
705impl Default for Periodic {
706 fn default() -> Self {
707 Self::None
708 }
709}
710impl fmt::Display for Periodic {
711 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
712 let v:String;
713 match *self {
714 Periodic::Actinium => v = String::from("Actinium"),
715 Periodic::Aluminum => v = String::from("Aluminum"),
716 Periodic::Americium => v = String::from("Americium"),
717 Periodic::Antimony => v = String::from("Antimony"),
718 Periodic::Argon => v = String::from("Argon"),
719 Periodic::Arsenic => v = String::from("Arsenic"),
720 Periodic::Astatine => v = String::from("Astatine"),
721 Periodic::Barium => v = String::from("Barium"),
722 Periodic::Berkelium => v = String::from("Berkelium"),
723 Periodic::Beryllium => v = String::from("Beryllium"),
724 Periodic::Bismuth => v = String::from("Bismuth"),
725 Periodic::Bohrium => v = String::from("Bohrium"),
726 Periodic::Boron => v = String::from("Boron"),
727 Periodic::Bromine => v = String::from("Bromine"),
728 Periodic::Cadmium => v = String::from("Cadmium"),
729 Periodic::Calcium => v = String::from("Calcium"),
730 Periodic::Californium => v = String::from("Californium"),
731 Periodic::Carbon => v = String::from("Carbon"),
732 Periodic::Cerium => v = String::from("Cerium"),
733 Periodic::Cesium => v = String::from("Cesium"),
734 Periodic::Chlorine => v = String::from("Chlorine"),
735 Periodic::Chromium => v = String::from("Chromium"),
736 Periodic::Cobalt => v = String::from("Cobalt"),
737 Periodic::Copernicium => v = String::from("Copernicium"),
738 Periodic::Copper => v = String::from("Copper"),
739 Periodic::Curium => v = String::from("Curium"),
740 Periodic::Darmstadtium => v = String::from("Darmstadtium"),
741 Periodic::Dubnium => v = String::from("Dubnium"),
742 Periodic::Dysprosium => v = String::from("Dysprosium"),
743 Periodic::Einsteinium => v = String::from("Einsteinium"),
744 Periodic::Erbium => v = String::from("Erbium"),
745 Periodic::Europium => v = String::from("Europium"),
746 Periodic::Fermium => v = String::from("Fermium"),
747 Periodic::Flerovium => v = String::from("Flerovium"),
748 Periodic::Fluorine => v = String::from("Fluorine"),
749 Periodic::Francium => v = String::from("Francium"),
750 Periodic::Gadolinium => v = String::from("Gadolinium"),
751 Periodic::Gallium => v = String::from("Gallium"),
752 Periodic::Germanium => v = String::from("Germanium"),
753 Periodic::Gold => v = String::from("Gold"),
754 Periodic::Hafnium => v = String::from("Hafnium"),
755 Periodic::Hassium => v = String::from("Hassium"),
756 Periodic::Helium => v = String::from("Helium"),
757 Periodic::Holmium => v = String::from("Holmium"),
758 Periodic::Hydrogen => v = String::from("Hydrogen"),
759 Periodic::Indium => v = String::from("Indium"),
760 Periodic::Iodine => v = String::from("Iodine"),
761 Periodic::Iridium => v = String::from("Iridium"),
762 Periodic::Iron => v = String::from("Iron"),
763 Periodic::Krypton => v = String::from("Krypton"),
764 Periodic::Lanthanum => v = String::from("Lanthanum"),
765 Periodic::Lawrencium => v = String::from("Lawrencium"),
766 Periodic::Lead => v = String::from("Lead"),
767 Periodic::Lithium => v = String::from("Lithium"),
768 Periodic::Livermorium => v = String::from("Livermorium"),
769 Periodic::Lutetium => v = String::from("Lutetium"),
770 Periodic::Magnesium => v = String::from("Magnesium"),
771 Periodic::Moscovium => v = String::from("Moscovium"),
772 Periodic::Manganese => v = String::from("Manganese"),
773 Periodic::Meitnerium => v = String::from("Meitnerium"),
774 Periodic::Mendelevium => v = String::from("Mendelevium"),
775 Periodic::Mercury => v = String::from("Mercury"),
776 Periodic::Molybdenum => v = String::from("Molybdenum"),
777 Periodic::Neilsborium => v = String::from("Neilsborium"),
778 Periodic::Neodymium => v = String::from("Neodymium"),
779 Periodic::Neon => v = String::from("Neon"),
780 Periodic::Neptunium => v = String::from("Neptunium"),
781 Periodic::Nihonium => v = String::from("Nihonium"),
782 Periodic::Nickel => v = String::from("Nickel"),
783 Periodic::Niobium => v = String::from("Niobium"),
784 Periodic::Nitrogen => v = String::from("Nitrogen"),
785 Periodic::Nobelium => v = String::from("Nobelium"),
786 Periodic::Oganesson => v = String::from("Oganesson"),
787 Periodic::Osmium => v = String::from("Osmium"),
788 Periodic::Oxygen => v = String::from("Oxygen"),
789 Periodic::Palladium => v = String::from("Palladium"),
790 Periodic::Phosphorus => v = String::from("Phosphorus"),
791 Periodic::Platinum => v = String::from("Platinum"),
792 Periodic::Plutonium => v = String::from("Plutonium"),
793 Periodic::Polonium => v = String::from("Polonium"),
794 Periodic::Praseodymium => v = String::from("Praseodymium"),
795 Periodic::Potassium => v = String::from("Potassium"),
796 Periodic::Promethium => v = String::from("Promethium"),
797 Periodic::Protactinium => v = String::from("Protactinium"),
798 Periodic::Radium => v = String::from("Radium"),
799 Periodic::Radon => v = String::from("Radon"),
800 Periodic::Rhenium => v = String::from("Rhenium"),
801 Periodic::Rhodium => v = String::from("Rhodium"),
802 Periodic::Roentgenium => v = String::from("Roentgenium"),
803 Periodic::Rubidium => v = String::from("Rubidium"),
804 Periodic::Ruthenium => v = String::from("Ruthenium"),
805 Periodic::Rutherfordium => v = String::from("Rutherfordium"),
806 Periodic::Samarium => v = String::from("Samarium"),
807 Periodic::Scandium => v = String::from("Scandium"),
808 Periodic::Seaborgium => v = String::from("Seaborgium"),
809 Periodic::Selenium => v = String::from("Selenium"),
810 Periodic::Silicon => v = String::from("Silicon"),
811 Periodic::Silver => v = String::from("Silver"),
812 Periodic::Sodium => v = String::from("Sodium"),
813 Periodic::Strontium => v = String::from("Strontium"),
814 Periodic::Sulfur => v = String::from("Sulfur"),
815 Periodic::Tantalum => v = String::from("Tantalum"),
816 Periodic::Technetium => v = String::from("Technetium"),
817 Periodic::Tellurium => v = String::from("Tellurium"),
818 Periodic::Tennessine => v = String::from("Tennessine"),
819 Periodic::Terbium => v = String::from("Terbium"),
820 Periodic::Thallium => v = String::from("Thallium"),
821 Periodic::Thorium => v = String::from("Thorium"),
822 Periodic::Thulium => v = String::from("Thulium"),
823 Periodic::Tin => v = String::from("Tin"),
824 Periodic::Titanium => v = String::from("Titanium"),
825 Periodic::Tungsten => v = String::from("Tungsten"),
826 Periodic::Uranium => v = String::from("Uranium"),
827 Periodic::Vanadium => v = String::from("Vanadium"),
828 Periodic::Xenon => v = String::from("Xenon"),
829 Periodic::Ytterbium => v = String::from("Ytterbium"),
830 Periodic::Yttrium => v = String::from("Yttrium"),
831 Periodic::Zinc => v = String::from("Zinc"),
832 Periodic::Zirconium => v = String::from("Zirconium"),
833 _=> v = String::from("None"),
834 }
835 write!(f, "{}", v.as_str())
836 }
837}
838impl Random for Periodic {
839 type Type = Periodic;
840 fn random_type(&self) -> Self::Type {
841 let max = 119;
842 let val = self.random_rate(max);
843 match val {
844 0 => Periodic::Actinium,
845 1 => Periodic::Aluminum,
846 2 => Periodic::Americium,
847 3 => Periodic::Antimony,
848 4 => Periodic::Argon,
849 5 => Periodic::Arsenic,
850 6 => Periodic::Astatine,
851 7 => Periodic::Barium,
852 8 => Periodic::Berkelium,
853 9 => Periodic::Beryllium,
854 10 => Periodic::Bismuth,
855 11 => Periodic::Bohrium,
856 12 => Periodic::Boron,
857 13 => Periodic::Bromine,
858 14 => Periodic::Cadmium,
859 15 => Periodic::Calcium,
860 16 => Periodic::Californium,
861 17 => Periodic::Carbon,
862 18 => Periodic::Cerium,
863 19 => Periodic::Cesium,
864 20 => Periodic::Chlorine,
865 21 => Periodic::Chromium,
866 22 => Periodic::Cobalt,
867 23 => Periodic::Copernicium,
868 24 => Periodic::Copper,
869 25 => Periodic::Curium,
870 26 => Periodic::Darmstadtium,
871 27 => Periodic::Dubnium,
872 28 => Periodic::Dysprosium,
873 29 => Periodic::Einsteinium,
874 30 => Periodic::Erbium,
875 31 => Periodic::Europium,
876 32 => Periodic::Fermium,
877 33 => Periodic::Flerovium,
878 34 => Periodic::Fluorine,
879 35 => Periodic::Francium,
880 36 => Periodic::Gadolinium,
881 37 => Periodic::Gallium,
882 38 => Periodic::Germanium,
883 39 => Periodic::Gold,
884 40 => Periodic::Hafnium,
885 41 => Periodic::Hassium,
886 42 => Periodic::Helium,
887 43 => Periodic::Holmium,
888 44 => Periodic::Hydrogen,
889 45 => Periodic::Indium,
890 46 => Periodic::Iodine,
891 47 => Periodic::Iridium,
892 48 => Periodic::Iron,
893 49 => Periodic::Krypton,
894 50 => Periodic::Lanthanum,
895 51 => Periodic::Lawrencium,
896 52 => Periodic::Lead,
897 53 => Periodic::Lithium,
898 54 => Periodic::Livermorium,
899 55 => Periodic::Lutetium,
900 56 => Periodic::Magnesium,
901 57 => Periodic::Moscovium,
902 58 => Periodic::Manganese,
903 59 => Periodic::Meitnerium,
904 60 => Periodic::Mendelevium,
905 61 => Periodic::Mercury,
906 62 => Periodic::Molybdenum,
907 63 => Periodic::Neilsborium,
908 64 => Periodic::Neodymium,
909 65 => Periodic::Neon,
910 66 => Periodic::Neptunium,
911 67 => Periodic::Nihonium,
912 68 => Periodic::Nickel,
913 69 => Periodic::Niobium,
914 70 => Periodic::Nitrogen,
915 71 => Periodic::Nobelium,
916 72 => Periodic::Oganesson,
917 73 => Periodic::Osmium,
918 74 => Periodic::Oxygen,
919 75 => Periodic::Palladium,
920 76 => Periodic::Phosphorus,
921 77 => Periodic::Platinum,
922 78 => Periodic::Plutonium,
923 79 => Periodic::Polonium,
924 80 => Periodic::Praseodymium,
925 81 => Periodic::Potassium,
926 82 => Periodic::Promethium,
927 83 => Periodic::Protactinium,
928 84 => Periodic::Radium,
929 85 => Periodic::Radon,
930 86 => Periodic::Rhenium,
931 87 => Periodic::Rhodium,
932 88 => Periodic::Roentgenium,
933 89 => Periodic::Rubidium,
934 90 => Periodic::Ruthenium,
935 91 => Periodic::Rutherfordium,
936 92 => Periodic::Samarium,
937 93 => Periodic::Scandium,
938 94 => Periodic::Seaborgium,
939 95 => Periodic::Selenium,
940 96 => Periodic::Silicon,
941 97 => Periodic::Silver,
942 98 => Periodic::Sodium,
943 99 => Periodic::Strontium,
944 100 => Periodic::Sulfur,
945 101 => Periodic::Tantalum,
946 102 => Periodic::Technetium,
947 103 => Periodic::Tellurium,
948 104 => Periodic::Tennessine,
949 105 => Periodic::Terbium,
950 106 => Periodic::Thallium,
951 107 => Periodic::Thorium,
952 108 => Periodic::Thulium,
953 109 => Periodic::Tin,
954 110 => Periodic::Titanium,
955 111 => Periodic::Tungsten,
956 112 => Periodic::Uranium,
957 113 => Periodic::Vanadium,
958 114 => Periodic::Xenon,
959 115 => Periodic::Ytterbium,
960 116 => Periodic::Yttrium,
961 117 => Periodic::Zinc,
962 118 => Periodic::Zirconium,
963 _=> Periodic::None,
964 }
965 }
966
967}
968#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Deserialize, Serialize)]
969#[cfg_attr(feature = "fltkform", derive(FltkForm))]
970pub struct PeriodicTable {
986 pub actinium:u32,
988 pub aluminum:u32,
990 pub americium:u32,
992 pub antimony:u32,
994 pub argon:u32,
996 pub arsenic:u32,
998 pub astatine:u32,
1000 pub barium:u32,
1002 pub berkelium:u32,
1004 pub beryllium:u32,
1006 pub bismuth:u32,
1008 pub bohrium:u32,
1010 pub boron:u32,
1012 pub bromine:u32,
1014 pub cadmium:u32,
1016 pub calcium:u32,
1018 pub californium:u32,
1020 pub carbon:u32,
1022 pub cerium:u32,
1024 pub cesium:u32,
1026 pub chlorine:u32,
1028 pub chromium:u32,
1030 pub cobalt:u32,
1032 pub copernicium:u32,
1034 pub copper:u32,
1036 pub curium:u32,
1038 pub darmstadtium:u32,
1040 pub dubnium:u32,
1042 pub dysprosium:u32,
1044 pub einsteinium:u32,
1046 pub erbium:u32,
1048 pub europium:u32,
1050 pub fermium:u32,
1052 pub flerovium:u32,
1054 pub fluorine:u32,
1056 pub francium:u32,
1058 pub gadolinium:u32,
1060 pub gallium:u32,
1062 pub germanium:u32,
1064 pub gold:u32,
1066 pub hafnium:u32,
1068 pub hassium:u32,
1070 pub helium:u32,
1072 pub holmium:u32,
1074 pub hydrogen:u32,
1076 pub indium:u32,
1078 pub iodine:u32,
1080 pub iridium:u32,
1082 pub iron:u32,
1084 pub krypton:u32,
1086 pub lanthanum:u32,
1088 pub lawrencium:u32,
1090 pub lead:u32,
1092 pub lithium:u32,
1094 pub livermorium:u32,
1096 pub lutetium:u32,
1098 pub magnesium:u32,
1100 pub moscovium:u32,
1102 pub manganese:u32,
1104 pub meitnerium:u32,
1106 pub mendelevium:u32,
1108 pub mercury:u32,
1110 pub molybdenum:u32,
1112 pub neilsborium:u32,
1114 pub neodymium:u32,
1116 pub neon:u32,
1118 pub neptunium:u32,
1120 pub nihonium:u32,
1122 pub nickel:u32,
1124 pub niobium:u32,
1126 pub nitrogen:u32,
1128 pub nobelium:u32,
1130 pub oganesson:u32,
1132 pub osmium:u32,
1134 pub oxygen:u32,
1136 pub palladium:u32,
1138 pub phosphorus:u32,
1140 pub platinum:u32,
1142 pub plutonium:u32,
1144 pub polonium:u32,
1146 pub praseodymium:u32,
1148 pub potassium:u32,
1150 pub promethium:u32,
1152 pub protactinium:u32,
1154 pub radium:u32,
1156 pub radon:u32,
1158 pub rhenium:u32,
1160 pub rhodium:u32,
1162 pub roentgenium:u32,
1164 pub rubidium:u32,
1166 pub ruthenium:u32,
1168 pub rutherfordium:u32,
1170 pub samarium:u32,
1172 pub scandium:u32,
1174 pub seaborgium:u32,
1176 pub selenium:u32,
1178 pub silicon:u32,
1180 pub silver:u32,
1182 pub sodium:u32,
1184 pub strontium:u32,
1186 pub sulfur:u32,
1188 pub tantalum:u32,
1190 pub technetium:u32,
1192 pub tellurium:u32,
1194 pub tennessine:u32,
1196 pub terbium:u32,
1198 pub thallium:u32,
1200 pub thorium:u32,
1202 pub thulium:u32,
1204 pub tin:u32,
1206 pub titanium:u32,
1208 pub tungsten:u32,
1210 pub uranium:u32,
1212 pub vanadium:u32,
1214 pub xenon:u32,
1216 pub ytterbium:u32,
1218 pub yttrium:u32,
1220 pub zinc:u32,
1222 pub zirconium:u32,
1224}
1225impl PeriodicTable {
1226 pub fn new() -> Self {
1227 PeriodicTable {
1228 actinium:0,
1229 aluminum:0,
1230 americium:0,
1231 antimony:0,
1232 argon:0,
1233 arsenic:0,
1234 astatine:0,
1235 barium:0,
1236 berkelium:0,
1237 beryllium:0,
1238 bismuth:0,
1239 bohrium:0,
1240 boron:0,
1241 bromine:0,
1242 cadmium:0,
1243 calcium:0,
1244 californium:0,
1245 carbon:0,
1246 cerium:0,
1247 cesium:0,
1248 chlorine:0,
1249 chromium:0,
1250 cobalt:0,
1251 copernicium:0,
1252 copper:0,
1253 curium:0,
1254 darmstadtium:0,
1255 dubnium:0,
1256 dysprosium:0,
1257 einsteinium:0,
1258 erbium:0,
1259 europium:0,
1260 fermium:0,
1261 flerovium:0,
1262 fluorine:0,
1263 francium:0,
1264 gadolinium:0,
1265 gallium:0,
1266 germanium:0,
1267 gold:0,
1268 hafnium:0,
1269 hassium:0,
1270 helium:0,
1271 holmium:0,
1272 hydrogen:0,
1273 indium:0,
1274 iodine:0,
1275 iridium:0,
1276 iron:0,
1277 krypton:0,
1278 lanthanum:0,
1279 lawrencium:0,
1280 lead:0,
1281 lithium:0,
1282 livermorium:0,
1283 lutetium:0,
1284 magnesium:0,
1285 moscovium:0,
1286 manganese:0,
1287 meitnerium:0,
1288 mendelevium:0,
1289 mercury:0,
1290 molybdenum:0,
1291 neilsborium:0,
1292 neodymium:0,
1293 neon:0,
1294 neptunium:0,
1295 nihonium:0,
1296 nickel:0,
1297 niobium:0,
1298 nitrogen:0,
1299 nobelium:0,
1300 oganesson:0,
1301 osmium:0,
1302 oxygen:0,
1303 palladium:0,
1304 phosphorus:0,
1305 platinum:0,
1306 plutonium:0,
1307 polonium:0,
1308 praseodymium:0,
1309 potassium:0,
1310 promethium:0,
1311 protactinium:0,
1312 radium:0,
1313 radon:0,
1314 rhenium:0,
1315 rhodium:0,
1316 roentgenium:0,
1317 rubidium:0,
1318 ruthenium:0,
1319 rutherfordium:0,
1320 samarium:0,
1321 scandium:0,
1322 seaborgium:0,
1323 selenium:0,
1324 silicon:0,
1325 silver:0,
1326 sodium:0,
1327 strontium:0,
1328 sulfur:0,
1329 tantalum:0,
1330 technetium:0,
1331 tellurium:0,
1332 tennessine:0,
1333 terbium:0,
1334 thallium:0,
1335 thorium:0,
1336 thulium:0,
1337 tin:0,
1338 titanium:0,
1339 tungsten:0,
1340 uranium:0,
1341 vanadium:0,
1342 xenon:0,
1343 ytterbium:0,
1344 yttrium:0,
1345 zinc:0,
1346 zirconium:0,
1347 }
1348 }
1349}