00001 // -*- C++ -*- 00002 00003 /* 00004 * Gnome Chemistry Utils 00005 * element.h 00006 * 00007 * Copyright (C) 2002-2006 Jean Bréfort <jean.brefort@normalesup.org> 00008 * 00009 * This program is free software; you can redistribute it and/or 00010 * modify it under the terms of the GNU General Public License as 00011 * published by the Free Software Foundation; either version 2 of the 00012 * License, or (at your option) any later version. 00013 * 00014 * This program is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 * GNU General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU General Public License 00020 * along with this program; if not, write to the Free Software 00021 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 00022 * USA 00023 */ 00024 00025 #ifndef GCU_ELEMENT_H 00026 #define GCU_ELEMENT_H 00027 00028 #include <glib.h> 00029 #include <map> 00030 #include <string> 00031 #include <vector> 00032 #include "chemistry.h" 00033 #include "isotope.h" 00034 #include "value.h" 00035 00036 using namespace std; 00037 00041 namespace gcu 00042 { 00043 00044 class EltTable; 00045 00052 class Element 00053 { 00054 friend class EltTable; 00055 private: 00062 Element (int Z, const char* Symbol); 00063 virtual ~Element (); 00064 00065 public: 00070 static const gchar* Symbol (gint Z); 00078 static bool BestSide (gint Z); 00083 static gint Z (const gchar* symbol); 00088 static Element* GetElement (gint Z); 00093 static Element* GetElement (const gchar* symbol); 00100 double GetWeight (int Z, int &prec); 00117 static bool GetRadius (GcuAtomicRadius* radius); 00133 static bool GetElectronegativity (GcuElectronegativity* en); 00141 static unsigned GetMaxBonds (gint Z); 00145 static void LoadRadii (); 00149 static void LoadElectronicProps (); 00153 static void LoadIsotopes (); 00154 #ifdef WITH_BODR 00155 00158 static void LoadBODR (); 00159 #endif 00160 00163 static void LoadAllData (); 00164 00168 int GetZ () {return m_Z;} 00172 const char* GetSymbol () {return m_Symbol;} 00177 char GetDefaultValence () {return m_DefaultValence;} 00183 unsigned GetMaxBonds () {return m_MaxBonds;} 00189 bool GetBestSide () {return m_BestSide;} 00194 double* GetDefaultColor () {return m_DefaultColor;} 00198 const char* GetName () {return name.c_str();} 00203 const GcuAtomicRadius** GetRadii (); 00208 const GcuElectronegativity** GetElectronegativities (); 00212 unsigned GetValenceElectrons () {return m_nve;} 00217 unsigned GetTotalValenceElectrons () {return m_tve;} 00222 unsigned GetMaxValenceElectrons () {return m_maxve;} 00228 double GetWeight (int& prec) {prec = m_WeightPrec; return m_Weight;} 00235 IsotopicPattern *GetIsotopicPattern (unsigned natoms); 00241 string const& GetElectronicConfiguration () {return ElecConfig;} 00245 map<string, string> const& GetNames () {return names;} 00251 GcuDimensionalValue const *GetIonizationEnergy (unsigned rank = 1); 00258 GcuDimensionalValue const *GetElectronAffinity (unsigned rank = 1); 00265 Value *const GetProperty (char const *property_name) {return props[property_name];} 00266 00267 private: 00268 unsigned char m_Z, m_nve, m_tve, m_maxve; 00269 char m_Symbol[4]; 00270 double m_Weight; 00271 int m_WeightPrec; 00272 char m_DefaultValence; 00273 unsigned char m_MaxBonds; 00274 bool m_BestSide; 00275 double m_DefaultColor[3]; 00276 string name; 00277 vector<GcuAtomicRadius*> m_radii; 00278 vector<GcuElectronegativity*> m_en; 00279 vector<Isotope*> m_isotopes; 00280 vector<IsotopicPattern*> m_patterns; 00281 vector<GcuDimensionalValue> m_ei; 00282 vector<GcuDimensionalValue> m_ae; 00283 map<string, string> names; 00284 map<string, Value*> props; 00285 string ElecConfig; 00286 }; 00287 00288 } // namespace gcu 00289 00290 #endif // GCU_ELEMENT_H