1 /**********************************************************************
2 Copyright (C) 2017 Noel M. O'Boyle
3 
4 This file is part of the Open Babel project.
5 For more information, see <http://openbabel.org/>
6 
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation version 2 of the License.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15 ***********************************************************************/
16 #ifndef OB_ELEMENTS_H
17 #define OB_ELEMENTS_H
18 
19 #include <openbabel/babelconfig.h>
20 
21 namespace OpenBabel
22 {
23   /** \brief Functions and constants for handling the elements of the periodic table and associated data
24 
25   Translating element data is a common task given that many file
26   formats give either element symbol or atomic number information, but
27   not both. The OBElements namespace contains functions to handle this conversion,
28   as well as providing information associated with particular elements.
29   The following code sample demonstrates the use of members of this namespace:
30   \code
31   cout << "The symbol for element 6 is " << OBElements::GetSymbol(6) << endl;
32   cout << "The atomic number for Sulfur is " << OBElements::GetAtomicNum(16) << endl;
33   cout << "The van der Waal radius for Nitrogen is " << OBElements::GetVdwRad(7);
34   if (atom->GetAtomicNum() == OBElements::Carbon) {
35     // then do something
36   }
37   \endcode
38 
39   Stored information in the OBElementTable includes elemental:
40   - symbols
41   - covalent radii
42   - van der Waal radii
43   - expected maximum bonding valence
44   - molar mass (by IUPAC recommended atomic masses)
45   - isotopic mass
46   - electronegativity (Pauling and Allred-Rochow)
47   - ionization potential
48   - electron affinity
49   - RGB colors for visualization programs
50   - names (by IUPAC recommendation)
51   **/
52   namespace OBElements {
53 
54     //! \return the element symbol matching the atomic number passed
55     OBAPI const char* GetSymbol(unsigned int atomic_number);
56     //! \return the name of this element
57     OBAPI const char* GetName(unsigned int atomic_number);
58     //! \return the average atomic mass for this element.
59     //! For exact isotope masses, use GetExactMass()
60     OBAPI double GetMass(unsigned int atomic_number);
61     //! \return the exact mass of the specified isotope
62     //!         or by default (i.e. "isotope 0") the mass of the most abundant isotope
63     OBAPI double GetExactMass(unsigned int atomic_number, unsigned int isotope=0);
64     //  //! \return the atomic number matching the element symbol
65     OBAPI unsigned int GetAtomicNum(const char* ptr);
66     //! \return the Allred-Rochow electronegativity for this element
67     OBAPI double GetAllredRochowElectroNeg(unsigned int atomic_number);
68     //! \return the covalent radius (in Angstrom) for this atomic number
69     OBAPI double GetCovalentRad(unsigned int atomic_number);
70     //! \return the van der Waals radius (in Angstrom) for this atomic number
71     OBAPI double GetVdwRad(unsigned int atomic_number);
72     //! \return the electron affinity (in eV) for this element
73     OBAPI double GetElectronAffinity(unsigned int atomic_number);
74     //! \return the ionization potential (in eV) for this element
75     OBAPI double GetIonization(unsigned int atomic_number);
76     //! \return the maximum expected number of bonds to this element
77     OBAPI unsigned int GetMaxBonds(unsigned int atomic_number);
78     //! \return the Pauling electronegativity for this element
79     OBAPI double GetElectroNeg(unsigned int atomic_number);
80     //! Sets the red, green, and blue color values for this element
81     OBAPI void GetRGB(unsigned int atomic_number, double *r, double *g, double *b);
82     //! The atomic numbers of the elements
83     const unsigned int Dummy = 0;
84     const unsigned int Hydrogen = 1;
85     const unsigned int H = 1;
86     const unsigned int Helium = 2;
87     const unsigned int He = 2;
88     const unsigned int Lithium = 3;
89     const unsigned int Li = 3;
90     const unsigned int Beryllium = 4;
91     const unsigned int Be = 4;
92     const unsigned int Boron = 5;
93     const unsigned int B = 5;
94     const unsigned int Carbon = 6;
95     const unsigned int C = 6;
96     const unsigned int Nitrogen = 7;
97     const unsigned int N = 7;
98     const unsigned int Oxygen = 8;
99     const unsigned int O = 8;
100     const unsigned int Fluorine = 9;
101     const unsigned int F = 9;
102     const unsigned int Neon = 10;
103     const unsigned int Ne = 10;
104     const unsigned int Sodium = 11;
105     const unsigned int Na = 11;
106     const unsigned int Magnesium = 12;
107     const unsigned int Mg = 12;
108     const unsigned int Aluminium = 13;
109     const unsigned int Al = 13;
110     const unsigned int Silicon = 14;
111     const unsigned int Si = 14;
112     const unsigned int Phosphorus = 15;
113     const unsigned int P = 15;
114     const unsigned int Sulfur = 16;
115     const unsigned int S = 16;
116     const unsigned int Chlorine = 17;
117     const unsigned int Cl = 17;
118     const unsigned int Argon = 18;
119     const unsigned int Ar = 18;
120     const unsigned int Potassium = 19;
121     const unsigned int K = 19;
122     const unsigned int Calcium = 20;
123     const unsigned int Ca = 20;
124     const unsigned int Scandium = 21;
125     const unsigned int Sc = 21;
126     const unsigned int Titanium = 22;
127     const unsigned int Ti = 22;
128     const unsigned int Vanadium = 23;
129     const unsigned int V = 23;
130     const unsigned int Chromium = 24;
131     const unsigned int Cr = 24;
132     const unsigned int Manganese = 25;
133     const unsigned int Mn = 25;
134     const unsigned int Iron = 26;
135     const unsigned int Fe = 26;
136     const unsigned int Cobalt = 27;
137     const unsigned int Co = 27;
138     const unsigned int Nickel = 28;
139     const unsigned int Ni = 28;
140     const unsigned int Copper = 29;
141     const unsigned int Cu = 29;
142     const unsigned int Zinc = 30;
143     const unsigned int Zn = 30;
144     const unsigned int Gallium = 31;
145     const unsigned int Ga = 31;
146     const unsigned int Germanium = 32;
147     const unsigned int Ge = 32;
148     const unsigned int Arsenic = 33;
149     const unsigned int As = 33;
150     const unsigned int Selenium = 34;
151     const unsigned int Se = 34;
152     const unsigned int Bromine = 35;
153     const unsigned int Br = 35;
154     const unsigned int Krypton = 36;
155     const unsigned int Kr = 36;
156     const unsigned int Rubidium = 37;
157     const unsigned int Rb = 37;
158     const unsigned int Strontium = 38;
159     const unsigned int Sr = 38;
160     const unsigned int Yttrium = 39;
161     const unsigned int Y = 39;
162     const unsigned int Zirconium = 40;
163     const unsigned int Zr = 40;
164     const unsigned int Niobium = 41;
165     const unsigned int Nb = 41;
166     const unsigned int Molybdenum = 42;
167     const unsigned int Mo = 42;
168     const unsigned int Technetium = 43;
169     const unsigned int Tc = 43;
170     const unsigned int Ruthenium = 44;
171     const unsigned int Ru = 44;
172     const unsigned int Rhodium = 45;
173     const unsigned int Rh = 45;
174     const unsigned int Palladium = 46;
175     const unsigned int Pd = 46;
176     const unsigned int Silver = 47;
177     const unsigned int Ag = 47;
178     const unsigned int Cadmium = 48;
179     const unsigned int Cd = 48;
180     const unsigned int Indium = 49;
181     const unsigned int In = 49;
182     const unsigned int Tin = 50;
183     const unsigned int Sn = 50;
184     const unsigned int Antimony = 51;
185     const unsigned int Sb = 51;
186     const unsigned int Tellurium = 52;
187     const unsigned int Te = 52;
188     const unsigned int Iodine = 53;
189     const unsigned int I = 53;
190     const unsigned int Xenon = 54;
191     const unsigned int Xe = 54;
192     const unsigned int Caesium = 55;
193     const unsigned int Cs = 55;
194     const unsigned int Barium = 56;
195     const unsigned int Ba = 56;
196     const unsigned int Lanthanum = 57;
197     const unsigned int La = 57;
198     const unsigned int Cerium = 58;
199     const unsigned int Ce = 58;
200     const unsigned int Praseodymium = 59;
201     const unsigned int Pr = 59;
202     const unsigned int Neodymium = 60;
203     const unsigned int Nd = 60;
204     const unsigned int Promethium = 61;
205     const unsigned int Pm = 61;
206     const unsigned int Samarium = 62;
207     const unsigned int Sm = 62;
208     const unsigned int Europium = 63;
209     const unsigned int Eu = 63;
210     const unsigned int Gadolinium = 64;
211     const unsigned int Gd = 64;
212     const unsigned int Terbium = 65;
213     const unsigned int Tb = 65;
214     const unsigned int Dysprosium = 66;
215     const unsigned int Dy = 66;
216     const unsigned int Holmium = 67;
217     const unsigned int Ho = 67;
218     const unsigned int Erbium = 68;
219     const unsigned int Er = 68;
220     const unsigned int Thulium = 69;
221     const unsigned int Tm = 69;
222     const unsigned int Ytterbium = 70;
223     const unsigned int Yb = 70;
224     const unsigned int Lutetium = 71;
225     const unsigned int Lu = 71;
226     const unsigned int Hafnium = 72;
227     const unsigned int Hf = 72;
228     const unsigned int Tantalum = 73;
229     const unsigned int Ta = 73;
230     const unsigned int Tungsten = 74;
231     const unsigned int W = 74;
232     const unsigned int Rhenium = 75;
233     const unsigned int Re = 75;
234     const unsigned int Osmium = 76;
235     const unsigned int Os = 76;
236     const unsigned int Iridium = 77;
237     const unsigned int Ir = 77;
238     const unsigned int Platinum = 78;
239     const unsigned int Pt = 78;
240     const unsigned int Gold = 79;
241     const unsigned int Au = 79;
242     const unsigned int Mercury = 80;
243     const unsigned int Hg = 80;
244     const unsigned int Thallium = 81;
245     const unsigned int Tl = 81;
246     const unsigned int Lead = 82;
247     const unsigned int Pb = 82;
248     const unsigned int Bismuth = 83;
249     const unsigned int Bi = 83;
250     const unsigned int Polonium = 84;
251     const unsigned int Po = 84;
252     const unsigned int Astatine = 85;
253     const unsigned int At = 85;
254     const unsigned int Radon = 86;
255     const unsigned int Rn = 86;
256     const unsigned int Francium = 87;
257     const unsigned int Fr = 87;
258     const unsigned int Radium = 88;
259     const unsigned int Ra = 88;
260     const unsigned int Actinium = 89;
261     const unsigned int Ac = 89;
262     const unsigned int Thorium = 90;
263     const unsigned int Th = 90;
264     const unsigned int Protactinium = 91;
265     const unsigned int Pa = 91;
266     const unsigned int Uranium = 92;
267     const unsigned int U = 92;
268     const unsigned int Neptunium = 93;
269     const unsigned int Np = 93;
270     const unsigned int Plutonium = 94;
271     const unsigned int Pu = 94;
272     const unsigned int Americium = 95;
273     const unsigned int Am = 95;
274     const unsigned int Curium = 96;
275     const unsigned int Cm = 96;
276     const unsigned int Berkelium = 97;
277     const unsigned int Bk = 97;
278     const unsigned int Californium = 98;
279     const unsigned int Cf = 98;
280     const unsigned int Einsteinium = 99;
281     const unsigned int Es = 99;
282     const unsigned int Fermium = 100;
283     const unsigned int Fm = 100;
284     const unsigned int Mendelevium = 101;
285     const unsigned int Md = 101;
286     const unsigned int Nobelium = 102;
287     const unsigned int No = 102;
288     const unsigned int Lawrencium = 103;
289     const unsigned int Lr = 103;
290     const unsigned int Rutherfordium = 104;
291     const unsigned int Rf = 104;
292     const unsigned int Dubnium = 105;
293     const unsigned int Db = 105;
294     const unsigned int Seaborgium = 106;
295     const unsigned int Sg = 106;
296     const unsigned int Bohrium = 107;
297     const unsigned int Bh = 107;
298     const unsigned int Hassium = 108;
299     const unsigned int Hs = 108;
300     const unsigned int Meitnerium = 109;
301     const unsigned int Mt = 109;
302     const unsigned int Darmstadtium = 110;
303     const unsigned int Ds = 110;
304     const unsigned int Roentgenium = 111;
305     const unsigned int Rg = 111;
306     const unsigned int Copernicium = 112;
307     const unsigned int Cn = 112;
308     const unsigned int Nihonium = 113;
309     const unsigned int Nh = 113;
310     const unsigned int Flerovium = 114;
311     const unsigned int Fl = 114;
312     const unsigned int Moscovium = 115;
313     const unsigned int Mc = 115;
314     const unsigned int Livermorium = 116;
315     const unsigned int Lv = 116;
316     const unsigned int Tennessine = 117;
317     const unsigned int Ts = 117;
318     const unsigned int Oganesson = 118;
319     const unsigned int Og = 118;
320   }
321 }
322 
323 #endif //OB_ELEMENTS_H
324 
325 //! \file elements.h
326 //! \brief Functions relating to elements
327