# element.h

Go to the documentation of this file.

    00001 // -*- C++ -*-
    00002
    00003 /*
    00004  * Gnome Chemistry Utils
    00005  * element.h
    00006  *
    00007  * Copyright (C) 2002-2008 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
    00040 #define GCU_ERROR (1 << (sizeof(int) - 1))
    00041
    00047 namespace gcu
    00048 {
    00049
    00050 class EltTable;
    00051
    00058 class Element
    00059 {
    00060 friend class EltTable;
    00061 private:
    00068         Element (int Z, const char* Symbol);
    00069         virtual ~Element ();
    00070
    00071 public:
    00076         static const gchar* Symbol (gint Z);
    00084         static bool BestSide (gint Z);
    00089         static gint Z (const gchar* symbol);
    00094         static Element* GetElement (gint Z);
    00099         static Element* GetElement (const gchar* symbol);
    00116         static bool GetRadius (GcuAtomicRadius* radius);
    00132         static bool GetElectronegativity (GcuElectronegativity* en);
    00140         static unsigned GetMaxBonds (gint Z);
    00144         static void LoadRadii ();
    00148         static void LoadElectronicProps ();
    00152         static void LoadIsotopes ();
    00156         static void LoadBODR ();
    00160         static void LoadAllData ();
    00161
    00165         int GetZ () {return m_Z;}
    00169         const char* GetSymbol () {return m_Symbol;}
    00174         char GetDefaultValence () {return m_DefaultValence;}
    00180         unsigned GetMaxBonds () {return m_MaxBonds;}
    00186         bool GetBestSide () {return m_BestSide;}
    00191         double* GetDefaultColor () {return m_DefaultColor;}
    00195         const char* GetName () {return name.c_str();}
    00200         const GcuAtomicRadius** GetRadii ();
    00205         const GcuElectronegativity** GetElectronegativities ();
    00209         unsigned GetValenceElectrons () {return m_nve;}
    00214         unsigned GetTotalValenceElectrons () {return m_tve;}
    00219         unsigned GetMaxValenceElectrons () {return m_maxve;}
    00223         DimensionalValue const *GetWeight ();
    00230         IsotopicPattern *GetIsotopicPattern (unsigned natoms);
    00236         std::string const& GetElectronicConfiguration () {return ElecConfig;}
    00240         std::map<std::string, std::string> const& GetNames () {return names;}
    00246         GcuDimensionalValue const *GetIonizationEnergy (unsigned rank = 1);
    00253         GcuDimensionalValue const *GetElectronAffinity (unsigned rank = 1);
    00260         Value const *GetProperty (char const *property_name);
    00267         std::string &GetStringProperty (char const *property_name);
    00274         int GetIntegerProperty (char const *property_name);
    00275
    00279         bool IsMetallic ();
    00280
    00281 private:
    00282         unsigned char m_Z, m_nve, m_tve, m_maxve;
    00283         char m_Symbol[4];
    00284         DimensionalValue const *m_AtomicWeight;
    00285         char m_DefaultValence;
    00286         unsigned char m_MaxBonds;
    00287         bool m_BestSide, m_Metallic, m_MetallicCached;
    00288         double m_DefaultColor[3];
    00289         std::string name;
    00290         std::vector<GcuAtomicRadius*> m_radii;
    00291         std::vector<GcuElectronegativity*> m_en;
    00292         std::vector<Isotope*> m_isotopes;
    00293         std::vector<IsotopicPattern*> m_patterns;
    00294         std::vector<GcuDimensionalValue> m_ei;
    00295         std::vector<GcuDimensionalValue> m_ae;
    00296         std::map<std::string, std::string> names;
    00297         std::map<std::string, Value*> props;
    00298         std::map<std::string, std::string> sprops;
    00299         std::map<std::string, int> iprops;
    00300         std::string ElecConfig;
    00301 };
    00302
    00303 } // namespace gcu
    00304
    00305 #endif // GCU_ELEMENT_H