1 /*
2  * Copyright (C) 2006-2012  Egon Willighagen <egonw@users.sf.net>
3  *                    2014  Mark B Vine (orcid:0000-0002-7794-0426)
4  *
5  * Contact: cdk-devel@lists.sourceforge.net
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public License
9  * as published by the Free Software Foundation; either version 2.1
10  * of the License, or (at your option) any later version.
11  * All we ask is that proper credit is given for our work, which includes
12  * - but is not limited to - adding the above copyright notice to the beginning
13  * of your source code files, and to any copyright notice that you may distribute
14  * with programs based on this work.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24  */
25 package org.openscience.cdk.config;
26 
27 import org.openscience.cdk.interfaces.IAtom;
28 import org.openscience.cdk.interfaces.IElement;
29 
30 import java.util.HashMap;
31 import java.util.Locale;
32 import java.util.Map;
33 
34 /**
35  * Enumeration of chemical elements. Data is taken from the Blue Obelisk Data
36  * Repository, version 3. This enumeration is auto-generated with utilities
37  * found in the 'cdk-build-utils' project.
38  *
39  * @author egonw
40  * @author john may
41  * @cdk.module core
42  * @cdk.githash
43  */
44 public enum Elements {
45     Unknown(0, "", 0, 0, null, 0.00, null),
46     Hydrogen(1, "H", 1, 1, 0.37, 1.20, 2.20),
47     Helium(2, "He", 1, 18, 0.32, 1.40, null),
48     Lithium(3, "Li", 2, 1, 1.34, 2.20, 0.98),
49     Beryllium(4, "Be", 2, 2, 0.90, 1.90, 1.57),
50     Boron(5, "B", 2, 13, 0.82, 1.80, 2.04),
51     Carbon(6, "C", 2, 14, 0.77, 1.70, 2.55),
52     Nitrogen(7, "N", 2, 15, 0.75, 1.60, 3.04),
53     Oxygen(8, "O", 2, 16, 0.73, 1.55, 3.44),
54     Fluorine(9, "F", 2, 17, 0.71, 1.50, 3.98),
55     Neon(10, "Ne", 2, 18, 0.69, 1.54, null),
56     Sodium(11, "Na", 3, 1, 1.54, 2.40, 0.93),
57     Magnesium(12, "Mg", 3, 2, 1.30, 2.20, 1.31),
58     Aluminium(13, "Al", 3, 13, 1.18, 2.10, 1.61),
59     Silicon(14, "Si", 3, 14, 1.11, 2.10, 1.90),
60     Phosphorus(15, "P", 3, 15, 1.06, 1.95, 2.19),
61     Sulfur(16, "S", 3, 16, 1.02, 1.80, 2.58),
62     Chlorine(17, "Cl", 3, 17, 0.99, 1.80, 3.16),
63     Argon(18, "Ar", 3, 18, 0.97, 1.88, null),
64     Potassium(19, "K", 4, 1, 1.96, 2.80, 0.82),
65     Calcium(20, "Ca", 4, 2, 1.74, 2.40, 1.00),
66     Scandium(21, "Sc", 4, 3, 1.44, 2.30, 1.36),
67     Titanium(22, "Ti", 4, 4, 1.36, 2.15, 1.54),
68     Vanadium(23, "V", 4, 5, 1.25, 2.05, 1.63),
69     Chromium(24, "Cr", 4, 6, 1.27, 2.05, 1.66),
70     Manganese(25, "Mn", 4, 7, 1.39, 2.05, 1.55),
71     Iron(26, "Fe", 4, 8, 1.25, 2.05, 1.83),
72     Cobalt(27, "Co", 4, 9, 1.26, null, 1.88),
73     Nickel(28, "Ni", 4, 10, 1.21, null, 1.91),
74     Copper(29, "Cu", 4, 11, 1.38, null, 1.90),
75     Zinc(30, "Zn", 4, 12, 1.31, 2.10, 1.65),
76     Gallium(31, "Ga", 4, 13, 1.26, 2.10, 1.81),
77     Germanium(32, "Ge", 4, 14, 1.22, 2.10, 2.01),
78     Arsenic(33, "As", 4, 15, 1.19, 2.05, 2.18),
79     Selenium(34, "Se", 4, 16, 1.16, 1.90, 2.55),
80     Bromine(35, "Br", 4, 17, 1.14, 1.90, 2.96),
81     Krypton(36, "Kr", 4, 18, 1.10, 2.02, 3.00),
82     Rubidium(37, "Rb", 5, 1, 2.11, 2.90, 0.82),
83     Strontium(38, "Sr", 5, 2, 1.92, 2.55, 0.95),
84     Yttrium(39, "Y", 5, 3, 1.62, 2.40, 1.22),
85     Zirconium(40, "Zr", 5, 4, 1.48, 2.30, 1.33),
86     Niobium(41, "Nb", 5, 5, 1.37, 2.15, 1.60),
87     Molybdenum(42, "Mo", 5, 6, 1.45, 2.10, 2.16),
88     Technetium(43, "Tc", 5, 7, 1.56, 2.05, 1.90),
89     Ruthenium(44, "Ru", 5, 8, 1.26, 2.05, 2.20),
90     Rhodium(45, "Rh", 5, 9, 1.35, null, 2.28),
91     Palladium(46, "Pd", 5, 10, 1.31, 2.05, 2.20),
92     Silver(47, "Ag", 5, 11, 1.53, 2.10, 1.93),
93     Cadmium(48, "Cd", 5, 12, 1.48, 2.20, 1.69),
94     Indium(49, "In", 5, 13, 1.44, 2.20, 1.78),
95     Tin(50, "Sn", 5, 14, 1.41, 2.25, 1.96),
96     Antimony(51, "Sb", 5, 15, 1.38, 2.20, 2.05),
97     Tellurium(52, "Te", 5, 16, 1.35, 2.10, 2.10),
98     Iodine(53, "I", 5, 17, 1.33, 2.10, 2.66),
99     Xenon(54, "Xe", 5, 18, 1.30, 2.16, 2.60),
100     Caesium(55, "Cs", 6, 1, 2.25, 3.00, 0.79),
101     Barium(56, "Ba", 6, 2, 1.98, 2.70, 0.89),
102     Lanthanum(57, "La", 6, 3, 1.69, 2.50, 1.10),
103     Cerium(58, "Ce", 6, 0, null, 2.48, 1.12),
104     Praseodymium(59, "Pr", 6, 0, null, 2.47, 1.13),
105     Neodymium(60, "Nd", 6, 0, null, 2.45, 1.14),
106     Promethium(61, "Pm", 6, 0, null, 2.43, null),
107     Samarium(62, "Sm", 6, 0, null, 2.42, 1.17),
108     Europium(63, "Eu", 6, 0, 2.40, 2.40, null),
109     Gadolinium(64, "Gd", 6, 0, null, 2.38, 1.20),
110     Terbium(65, "Tb", 6, 0, null, 2.37, null),
111     Dysprosium(66, "Dy", 6, 0, null, 2.35, 1.22),
112     Holmium(67, "Ho", 6, 0, null, 2.33, 1.23),
113     Erbium(68, "Er", 6, 0, null, 2.32, 1.24),
114     Thulium(69, "Tm", 6, 0, null, 2.30, 1.25),
115     Ytterbium(70, "Yb", 6, 0, null, 2.28, null),
116     Lutetium(71, "Lu", 6, 0, 1.60, 2.27, 1.27),
117     Hafnium(72, "Hf", 6, 4, 1.50, 2.25, 1.30),
118     Tantalum(73, "Ta", 6, 5, 1.38, 2.20, 1.50),
119     Tungsten(74, "W", 6, 6, 1.46, 2.10, 2.36),
120     Rhenium(75, "Re", 6, 7, 1.59, 2.05, 1.90),
121     Osmium(76, "Os", 6, 8, 1.28, null, 2.20),
122     Iridium(77, "Ir", 6, 9, 1.37, null, 2.20),
123     Platinum(78, "Pt", 6, 10, 1.28, 2.05, 2.28),
124     Gold(79, "Au", 6, 11, 1.44, 2.10, 2.54),
125     Mercury(80, "Hg", 6, 12, 1.49, 2.05, 2.00),
126     Thallium(81, "Tl", 6, 13, 1.48, 2.20, 1.62),
127     Lead(82, "Pb", 6, 14, 1.47, 2.30, 2.33),
128     Bismuth(83, "Bi", 6, 15, 1.46, 2.30, 2.02),
129     Polonium(84, "Po", 6, 16, 1.46, null, 2.00),
130     Astatine(85, "At", 6, 17, null, null, 2.20),
131     Radon(86, "Rn", 6, 18, 1.45, null, null),
132     Francium(87, "Fr", 7, 1, null, null, 0.70),
133     Radium(88, "Ra", 7, 2, null, null, 0.90),
134     Actinium(89, "Ac", 7, 3, null, null, 1.10),
135     Thorium(90, "Th", 7, 0, null, 2.40, 1.30),
136     Protactinium(91, "Pa", 7, 0, null, null, 1.50),
137     Uranium(92, "U", 7, 0, null, 2.30, 1.38),
138     Neptunium(93, "Np", 7, 0, null, null, 1.36),
139     Plutonium(94, "Pu", 7, 0, null, null, 1.28),
140     Americium(95, "Am", 7, 0, null, null, 1.30),
141     Curium(96, "Cm", 7, 0, null, null, 1.30),
142     Berkelium(97, "Bk", 7, 0, null, null, 1.30),
143     Californium(98, "Cf", 7, 0, null, null, 1.30),
144     Einsteinium(99, "Es", 7, 0, null, null, 1.30),
145     Fermium(100, "Fm", 7, 0, null, null, 1.30),
146     Mendelevium(101, "Md", 7, 0, null, null, 1.30),
147     Nobelium(102, "No", 7, 0, null, null, 1.30),
148     Lawrencium(103, "Lr", 7, 0, null, null, null),
149     Rutherfordium(104, "Rf", 7, 4, null, null, null),
150     Dubnium(105, "Db", 7, 5, null, null, null),
151     Seaborgium(106, "Sg", 7, 6, null, null, null),
152     Bohrium(107, "Bh", 7, 7, null, null, null),
153     Hassium(108, "Hs", 7, 8, null, null, null),
154     Meitnerium(109, "Mt", 7, 9, null, null, null),
155     Darmstadtium(110, "Ds", 7, 10, null, null, null),
156     Roentgenium(111, "Rg", 7, 11, null, null, null),
157     Copernicium(112, "Cn", 7, 12, null, null, null),
158     @Deprecated
159     Ununtrium(113, "Uut", 7, 13, null, null, null),
160     Nihonium(113, "Nh", 7, 13, null, null, null),
161     Flerovium(114, "Fl", 7, 14, null, null, null),
162     @Deprecated
163     Ununpentium(115, "Uup", 7, 15, null, null, null),
164     Moscovium(115, "Mc", 7, 15, null, null, null),
165     Livermorium(116, "Lv", 7, 16, null, null, null),
166     @Deprecated
167     Ununseptium(117, "Uus", 7, 17, null, null, null),
168     Tennessine(117, "Ts", 7, 17, null, null, null),
169     @Deprecated
170     Ununoctium(118, "Uuo", 7, 18, null, null, null),
171     Oganesson(118, "Og", 7, 18, null, null, null);
172 
173     /**
174      * Atomic number, periodic table period and group.
175      */
176     private final int number, period, group;
177 
178     /**
179      * The symbol of the element.
180      */
181     private final String symbol;
182 
183     /**
184      * Covalent radius (<i>r<sub>cov</sub></i>), van der Waals radius
185      * (<i>r<sub>w</sub></i>) and Pauling electronegativity.
186      */
187     private final Double rCov, rW, electronegativity;
188 
189     /**
190      * An {@link IElement} instance of this element.
191      */
192     private final IElement instance;
193 
194     /**
195      * Lookup elements by atomic number.
196      */
197     static final Elements[] NUMER_MAP = new Elements[119];
198 
199     /**
200      * Lookup elements by symbol / name.
201      */
202     static final Map<String, Elements> SYMBOL_MAP = new HashMap<String, Elements>(400);
203 
204     static {
205         // index elements
206         for (final Elements e : values()) {
207             NUMER_MAP[e.number] = e;
e.symbol.toLowerCase(Locale.ENGLISH)208             SYMBOL_MAP.put(e.symbol.toLowerCase(Locale.ENGLISH), e);
209             SYMBOL_MAP.put(e.name().toLowerCase(Locale.ENGLISH), e);
210         }
211 
212         // recently named elements
213         SYMBOL_MAP.put("uub", Copernicium); // 2009
214         SYMBOL_MAP.put("ununbium", Copernicium);
215 
216         SYMBOL_MAP.put("uuq", Flerovium); // 2012
217         SYMBOL_MAP.put("ununquadium", Flerovium);
218 
219         SYMBOL_MAP.put("uuh", Livermorium); // 2012
220         SYMBOL_MAP.put("ununhexium", Livermorium);
221 
222         // 2016
223         SYMBOL_MAP.put("uut", Nihonium);
224         SYMBOL_MAP.put("uup", Moscovium);
225         SYMBOL_MAP.put("uus", Tennessine);
226         SYMBOL_MAP.put("uuo", Oganesson);
227 
228         // alternative spellings
229         SYMBOL_MAP.put("sulphur", Sulfur);
230         SYMBOL_MAP.put("cesium", Caesium);
231         SYMBOL_MAP.put("aluminum", Aluminium);
232 
233     }
234 
235     /**
236      * Internal constructor.
237      *
238      * @param number            atomic number
239      * @param symbol            symbol
240      * @param period            periodic table period
241      * @param group             periodic table group
242      * @param rCov              covalent radius
243      * @param rW                van der Waals radius
244      * @param electronegativity pauling electronegativity
245      */
Elements(int number, String symbol, int period, int group, Double rCov, Double rW, Double electronegativity)246     private Elements(int number, String symbol, int period, int group, Double rCov, Double rW, Double electronegativity) {
247         this.number = number;
248         this.period = period;
249         this.group = group;
250         this.symbol = symbol;
251         this.rCov = rCov;
252         this.rW = rW;
253         this.electronegativity = electronegativity;
254         this.instance = new NaturalElement(symbol, number);
255     }
256 
257     /**
258      * The atomic number of the element. An {@link #Unknown} element
259      * has an atomic number of '0'.
260      *
261      * @return 0 - 116
262      */
number()263     public int number() {
264         return number;
265     }
266 
267     /**
268      * The element symbol, C for carbon, N for nitrogen, Na for sodium, etc. An
269      * {@link #Unknown} element has no symbol.
270      *
271      * @return the symbol
272      */
symbol()273     public String symbol() {
274         return symbol;
275     }
276 
277     /**
278      * Return the period in the periodic table this element belongs to. If
279      * the element is {@link #Unknown} it's period is 0.
280      *
281      * @return a period in the periodic table
282      */
period()283     public int period() {
284         return period;
285     }
286 
287     /**
288      * Return the group in the periodic table this element belongs to. If
289      * the element does not belong to a group then it's group is '0'.
290      *
291      * @return a group in the periodic table
292      */
group()293     public int group() {
294         return group;
295     }
296 
297     /**
298      * The covalent radius, <i>r<sub>cov</sub></i>, is a measure of the
299      * size of an atom that forms part of one covalent bond.
300      *
301      * @return covalent radius - null if not available
302      * @see <a href="http://en.wikipedia.org/wiki/Covalent_radius">Covalent radius</a>
303      */
covalentRadius()304     public Double covalentRadius() {
305         return rCov;
306     }
307 
308     /**
309      * The van der Waals radius, <i>r<sub>w</sub></i>, of an atom is the
310      * radius of an imaginary hard sphere which can be used to model the
311      * atom.
312      *
313      * @return van der Waals radius - null if not available
314      * @see <a href="http://en.wikipedia.org/wiki/Van_der_Waals_radius">Van de Waals radius</a>
315      */
vdwRadius()316     public Double vdwRadius() {
317         return rW;
318     }
319 
320     /**
321      * Electronegativity, symbol χ, is a chemical property that describes
322      * the tendency of an atom or a functional group to attract electrons
323      * (or electron density) towards itself. This method provides access to the
324      * Pauling electronegativity value for a chemical element. If no value is
325      * available 'null' is returned.
326      *
327      * @return Pauling electronegativity - null if not available
328      * @see <a href="http://en.wikipedia.org/wiki/Electronegativity#Pauling_electronegativity">Pauling Electronegativity</a>
329      */
electronegativity()330     public Double electronegativity() {
331         return electronegativity;
332     }
333 
334     /**
335      * Access an {@link IElement} instance of the chemical element.
336      *
337      * @return an instance
338      */
toIElement()339     public IElement toIElement() {
340         return instance;
341     }
342 
343     /**
344      * Obtain the element with the specified atomic number. If no element had
345      * the specified atomic number then {@link #Unknown} is returned.
346      *
347      * <blockquote><pre>
348      *     // carbon
349      *     Elements e = Elements.ofNumber(6);
350      *
351      *     // oxygen
352      *     Elements e = Elements.ofNumber(8);
353      * </pre></blockquote>
354      *
355      * @param number atomic number
356      * @return an element, or {@link #Unknown}
357      */
ofNumber(final int number)358     public static Elements ofNumber(final int number) {
359         if (number < 0 || number > 118) return Unknown;
360         return NUMER_MAP[number];
361     }
362 
363     /**
364      * Obtain the element with the specified symbol or name. If no element had
365      * the specified symbol or name then {@link #Unknown} is returned. The
366      * input is case-insensitive.
367      *
368      * <blockquote><pre>
369      *     // carbon
370      *     Elements e = Elements.ofString("c");
371      *     Elements e = Elements.ofString("C");
372      *     Elements e = Elements.ofString("Carbon");
373      *     Elements e = Elements.ofString("carbon");
374      * </pre></blockquote>
375      *
376      * @param str input string
377      * @return an element, or {@link #Unknown}
378      */
ofString(final String str)379     public static Elements ofString(final String str) {
380         if (str == null) return Unknown;
381         Elements e = SYMBOL_MAP.get(str.toLowerCase(Locale.ENGLISH));
382         if (e == null) return Unknown;
383         return e;
384     }
385 
386     /** These instances are for backards compatability. */
387     public final static IElement DUMMY         = Unknown.toIElement();
388     public final static IElement HYDROGEN      = Hydrogen.toIElement();
389     public final static IElement HELIUM        = Helium.toIElement();
390     public final static IElement LITHIUM       = Lithium.toIElement();
391     public final static IElement BERYLLIUM     = Beryllium.toIElement();
392     public final static IElement BORON         = Boron.toIElement();
393     public final static IElement CARBON        = Carbon.toIElement();
394     public final static IElement NITROGEN      = Nitrogen.toIElement();
395     public final static IElement OXYGEN        = Oxygen.toIElement();
396     public final static IElement FLUORINE      = Fluorine.toIElement();
397     public final static IElement NEON          = Neon.toIElement();
398     public final static IElement SODIUM        = Sodium.toIElement();
399     public final static IElement MAGNESIUM     = Magnesium.toIElement();
400     public final static IElement ALUMINIUM     = Aluminium.toIElement();
401     public final static IElement SILICON       = Silicon.toIElement();
402     public final static IElement PHOSPHORUS    = Phosphorus.toIElement();
403     public final static IElement SULFUR        = Sulfur.toIElement();
404     public final static IElement CHLORINE      = Chlorine.toIElement();
405     public final static IElement ARGON         = Argon.toIElement();
406     public final static IElement POTASSIUM     = Potassium.toIElement();
407     public final static IElement CALCIUM       = Calcium.toIElement();
408     public final static IElement SCANDIUM      = Scandium.toIElement();
409     public final static IElement TITANIUM      = Titanium.toIElement();
410     public final static IElement VANADIUM      = Vanadium.toIElement();
411     public final static IElement CHROMIUM      = Chromium.toIElement();
412     public final static IElement MANGANESE     = Manganese.toIElement();
413     public final static IElement IRON          = Iron.toIElement();
414     public final static IElement COBALT        = Cobalt.toIElement();
415     public final static IElement NICKEL        = Nickel.toIElement();
416     public final static IElement COPPER        = Copper.toIElement();
417     public final static IElement ZINC          = Zinc.toIElement();
418     public final static IElement GALLIUM       = Gallium.toIElement();
419     public final static IElement GERMANIUM     = Germanium.toIElement();
420     public final static IElement ARSENIC       = Arsenic.toIElement();
421     public final static IElement SELENIUM      = Selenium.toIElement();
422     public final static IElement BROMINE       = Bromine.toIElement();
423     public final static IElement KRYPTON       = Krypton.toIElement();
424     public final static IElement RUBIDIUM      = Rubidium.toIElement();
425     public final static IElement STRONTIUM     = Strontium.toIElement();
426     public final static IElement YTTRIUM       = Yttrium.toIElement();
427     public final static IElement ZIRCONIUM     = Zirconium.toIElement();
428     public final static IElement NIOBIUM       = Niobium.toIElement();
429     public final static IElement MOLYBDENUM    = Molybdenum.toIElement();
430     public final static IElement TECHNETIUM    = Technetium.toIElement();
431     public final static IElement RUTHENIUM     = Ruthenium.toIElement();
432     public final static IElement RHODIUM       = Rhodium.toIElement();
433     public final static IElement PALLADIUM     = Palladium.toIElement();
434     public final static IElement SILVER        = Silver.toIElement();
435     public final static IElement CADMIUM       = Cadmium.toIElement();
436     public final static IElement INDIUM        = Indium.toIElement();
437     public final static IElement TIN           = Tin.toIElement();
438     public final static IElement ANTIMONY      = Antimony.toIElement();
439     public final static IElement TELLURIUM     = Tellurium.toIElement();
440     public final static IElement IODINE        = Iodine.toIElement();
441     public final static IElement XENON         = Xenon.toIElement();
442     public final static IElement CAESIUM       = Caesium.toIElement();
443     public final static IElement BARIUM        = Barium.toIElement();
444     public final static IElement LANTHANUM     = Lanthanum.toIElement();
445     public final static IElement CERIUM        = Cerium.toIElement();
446     public final static IElement PRASEODYMIUM  = Praseodymium.toIElement();
447     public final static IElement NEODYMIUM     = Neodymium.toIElement();
448     public final static IElement PROMETHIUM    = Promethium.toIElement();
449     public final static IElement SAMARIUM      = Samarium.toIElement();
450     public final static IElement EUROPIUM      = Europium.toIElement();
451     public final static IElement GADOLINIUM    = Gadolinium.toIElement();
452     public final static IElement TERBIUM       = Terbium.toIElement();
453     public final static IElement DYSPROSIUM    = Dysprosium.toIElement();
454     public final static IElement HOLMIUM       = Holmium.toIElement();
455     public final static IElement ERBIUM        = Erbium.toIElement();
456     public final static IElement THULIUM       = Thulium.toIElement();
457     public final static IElement YTTERBIUM     = Ytterbium.toIElement();
458     public final static IElement LUTETIUM      = Lutetium.toIElement();
459     public final static IElement HAFNIUM       = Hafnium.toIElement();
460     public final static IElement TANTALUM      = Tantalum.toIElement();
461     public final static IElement TUNGSTEN      = Tungsten.toIElement();
462     public final static IElement RHENIUM       = Rhenium.toIElement();
463     public final static IElement OSMIUM        = Osmium.toIElement();
464     public final static IElement IRIDIUM       = Iridium.toIElement();
465     public final static IElement PLATINUM      = Platinum.toIElement();
466     public final static IElement GOLD          = Gold.toIElement();
467     public final static IElement MERCURY       = Mercury.toIElement();
468     public final static IElement THALLIUM      = Thallium.toIElement();
469     public final static IElement LEAD          = Lead.toIElement();
470     public final static IElement BISMUTH       = Bismuth.toIElement();
471     public final static IElement POLONIUM      = Polonium.toIElement();
472     public final static IElement ASTATINE      = Astatine.toIElement();
473     public final static IElement RADON         = Radon.toIElement();
474     public final static IElement FRANCIUM      = Francium.toIElement();
475     public final static IElement RADIUM        = Radium.toIElement();
476     public final static IElement ACTINIUM      = Actinium.toIElement();
477     public final static IElement THORIUM       = Thorium.toIElement();
478     public final static IElement PROTACTINIUM  = Protactinium.toIElement();
479     public final static IElement URANIUM       = Uranium.toIElement();
480     public final static IElement NEPTUNIUM     = Neptunium.toIElement();
481     public final static IElement PLUTONIUM     = Plutonium.toIElement();
482     public final static IElement AMERICIUM     = Americium.toIElement();
483     public final static IElement CURIUM        = Curium.toIElement();
484     public final static IElement BERKELIUM     = Berkelium.toIElement();
485     public final static IElement CALIFORNIUM   = Californium.toIElement();
486     public final static IElement EINSTEINIUM   = Einsteinium.toIElement();
487     public final static IElement FERMIUM       = Fermium.toIElement();
488     public final static IElement MENDELEVIUM   = Mendelevium.toIElement();
489     public final static IElement NOBELIUM      = Nobelium.toIElement();
490     public final static IElement LAWRENCIUM    = Lawrencium.toIElement();
491     public final static IElement RUTHERFORDIUM = Rutherfordium.toIElement();
492     public final static IElement DUBNIUM       = Dubnium.toIElement();
493     public final static IElement SEABORGIUM    = Seaborgium.toIElement();
494     public final static IElement BOHRIUM       = Bohrium.toIElement();
495     public final static IElement HASSIUM       = Hassium.toIElement();
496     public final static IElement MEITNERIUM    = Meitnerium.toIElement();
497     public final static IElement DARMSTADTIUM  = Darmstadtium.toIElement();
498     public final static IElement ROENTGENIUM   = Roentgenium.toIElement();
499     public final static IElement UNUNBIUM      = Copernicium.toIElement();
500     public final static IElement UNUNTRIUM     = Ununtrium.toIElement();
501     public final static IElement UNUNQUADIUM   = Flerovium.toIElement();
502     public final static IElement FLEROVIUM     = Flerovium.toIElement();
503     public final static IElement UNUNPENTIUM   = Ununpentium.toIElement();
504     public final static IElement UNUNHEXIUM    = Livermorium.toIElement();
505     public final static IElement LIVERMORIUM   = Livermorium.toIElement();
506 
507     // Incorrect spelling
508     @Deprecated
509     public final static IElement PLUTOMNIUM    = PLUTONIUM;
510 
511     /**
512      * Utility method to determine if an atomic number is a metal.
513      * @param atno atomic number
514      * @return the atomic number is a metal (or not)
515      */
isMetal(int atno)516     public static boolean isMetal(int atno) {
517         switch (atno) {
518             case 0:  // *
519             case 1:  // H
520             case 2:  // He
521             case 6:  // C
522             case 7:  // N
523             case 8:  // O
524             case 9:  // F
525             case 10: // Ne
526             case 15: // P
527             case 16: // S
528             case 17: // Cl
529             case 18: // Ar
530             case 34: // Se
531             case 35: // Br
532             case 36: // Kr
533             case 53: // I
534             case 54: // Xe
535             case 86: // Rn
536                 return false;
537             case 5:   // B
538             case 14:  // Si
539             case 32:  // Ge
540             case 33:  // As
541             case 51:  // Sb
542             case 52:  // Te
543             case 85:  // At
544                 return false;
545         }
546         return true;
547     }
548 
549     /**
550      * Utility method to determine if an atom is a metal.
551      *
552      * @param atom atom
553      * @return the atom is a metal (or not)
554      */
isMetal(IAtom atom)555     public static boolean isMetal(IAtom atom) {
556         return atom.getAtomicNumber() != null &&
557                isMetal(atom.getAtomicNumber());
558     }
559 }
560