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