00001 // -*- C++ -*- 00002 00003 /* 00004 * Gnome Chemistry Utils 00005 * element.h 00006 * 00007 * Copyright (C) 2002-2006 00008 * 00009 * Developed by Jean Bréfort <jean.brefort@normalesup.org> 00010 * 00011 * This program is free software; you can redistribute it and/or 00012 * modify it under the terms of the GNU General Public License as 00013 * published by the Free Software Foundation; either version 2 of the 00014 * License, or (at your option) any later version. 00015 * 00016 * This program is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU General Public License 00022 * along with this program; if not, write to the Free Software 00023 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 00024 * USA 00025 */ 00026 00027 #ifndef GCU_ELEMENT_H 00028 #define GCU_ELEMENT_H 00029 00030 #include <glib.h> 00031 #include <map> 00032 #include <string> 00033 #include <vector> 00034 #include "chemistry.h" 00035 #include "isotope.h" 00036 00037 using namespace std; 00038 00042 namespace gcu 00043 { 00044 00045 class EltTable; 00046 00053 class Element 00054 { 00055 friend class EltTable; 00056 private: 00063 Element (int Z, const char* Symbol); 00064 virtual ~Element (); 00065 00066 public: 00071 static const gchar* Symbol (gint Z); 00079 static bool BestSide (gint Z); 00084 static gint Z (const gchar* symbol); 00089 static Element* GetElement (gint Z); 00094 static Element* GetElement (const gchar* symbol); 00101 double GetWeight (int Z, int &prec); 00118 static bool GetRadius (GcuAtomicRadius* radius); 00134 static bool GetElectronegativity (GcuElectronegativity* en); 00142 static unsigned GetMaxBonds (gint Z); 00146 static void LoadRadii (); 00150 static void LoadElectronicProps (); 00154 static void LoadIsotopes (); 00158 static void LoadAllData (); 00159 00163 int GetZ () {return m_Z;} 00167 const char* GetSymbol () {return m_Symbol;} 00172 char GetDefaultValence () {return m_DefaultValence;} 00178 unsigned GetMaxBonds () {return m_MaxBonds;} 00184 bool GetBestSide () {return m_BestSide;} 00189 double* GetDefaultColor () {return m_DefaultColor;} 00193 const char* GetName () {return name.c_str();} 00198 const GcuAtomicRadius** GetRadii (); 00203 const GcuElectronegativity** GetElectronegativities (); 00207 unsigned GetValenceElectrons () {return m_nve;} 00212 unsigned GetTotalValenceElectrons () {return m_tve;} 00217 unsigned GetMaxValenceElectrons () {return m_maxve;} 00223 double GetWeight (int& prec) {prec = m_WeightPrec; return m_Weight;} 00230 IsotopicPattern *GetIsotopicPattern (unsigned natoms); 00236 string const& GetElectronicConfiguration () {return ElecConfig;} 00240 map<string, string> const& GetNames () {return names;} 00246 GcuDimensionalValue const *GetIonizationEnergy (unsigned rank = 1); 00253 GcuDimensionalValue const *GetElectronAffinity (unsigned rank = 1); 00254 00255 private: 00256 unsigned char m_Z, m_nve, m_tve, m_maxve; 00257 char m_Symbol[4]; 00258 double m_Weight; 00259 int m_WeightPrec; 00260 char m_DefaultValence; 00261 unsigned char m_MaxBonds; 00262 bool m_BestSide; 00263 double m_DefaultColor[3]; 00264 string name; 00265 vector<GcuAtomicRadius*> m_radii; 00266 vector<GcuElectronegativity*> m_en; 00267 vector<Isotope*> m_isotopes; 00268 vector<IsotopicPattern*> m_patterns; 00269 vector<GcuDimensionalValue> m_ei; 00270 vector<GcuDimensionalValue> m_ae; 00271 map<string, string> names; 00272 string ElecConfig; 00273 }; 00274 00275 } // namespace gcu 00276 00277 #endif // GCU_ELEMENT_H