ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/utils/ElementsTable.hpp
Revision: 3319
Committed: Wed Jan 23 03:45:33 2008 UTC (16 years, 5 months ago) by gezelter
File size: 6832 byte(s)
Log Message:
Removed older version of openbabel from our code.  We now have a
configure check to see if openbabel is installed and then we link to
the stuff we need.  Conversion to OOPSE's md format is handled by only
one application (atom2md), so most of the work went on there.
ElementsTable still needs some work to function in parallel.

File Contents

# User Rev Content
1 gezelter 3319 /**********************************************************************
2    
3     This basic Periodic Table class was originally taken from the data.h
4     file in OpenBabel. The code has been modified to match the OOPSE coding style.
5    
6     We have retained the OpenBabel copyright and GPL license on this class:
7    
8     Copyright (C) 1998-2001 by OpenEye Scientific Software, Inc.
9     Some portions Copyright (C) 2001-2005 by Geoffrey R. Hutchison
10    
11     This file is part of the Open Babel project.
12     For more information, see <http://openbabel.sourceforge.net/>
13    
14     This program is free software; you can redistribute it and/or modify
15     it under the terms of the GNU General Public License as published by
16     the Free Software Foundation version 2 of the License.
17    
18     This program is distributed in the hope that it will be useful,
19     but WITHOUT ANY WARRANTY; without even the implied warranty of
20     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21     GNU General Public License for more details.
22     ***********************************************************************/
23    
24     /**
25     * @file ElementsTable.hpp
26     * @author gezelter
27     * @date 12/21/2007
28     * @time 11:30am
29     * @version 1.0
30     */
31    
32     #ifndef UTILS_ELEMENTSTABLE_HPP
33     #define UTILS_ELEMENTSTABLE_HPP
34    
35     #include "config.h"
36     #include <vector>
37     #include "primitives/Element.hpp"
38    
39     namespace oopse {
40    
41     /**
42     * @class ElementsTable.hpp "util/ElementsTable.hpp"
43     * @brief Periodic Table of the Elements
44     * Using element data is a place holder when we lack information about
45     * a specific atom type. In particular, the Langevin algorithms must
46     * assume specific atomic radii to predict drag and random forces on those
47     * atoms. For force fields which do not specify Lennard-Jones radii,
48     * the element's van der Waals radius is used instead.
49     * The ElementsTable class (etab) is declared as external in
50     * ElementsTable.cpp. Source files that include the header file
51     * ElementsTable.hpp automatically have an extern definition to etab.
52     * The following code sample demonstrates the use of the ElementsTable class:
53     * @code
54     * cout << "The symbol for element 6 is " << etab.GetSymbol(6) << endl;
55     * cout << "The atomic number for Sulfur is " << etab.GetAtomicNum(16) << endl;
56     * cout << "The van der Waal radius for Nitrogen is " << etab.GetVdwRad(7);
57     * @endcode
58     * Stored information in the OBElementTable includes elemental:
59     * - symbols
60     * - covalent radii
61     * - van der Waal radii
62     * - expected maximum bonding valence
63     * - molar mass (by IUPAC recommended atomic masses)
64     * - electronegativity
65     * - ionization potential
66     * - electron affinity
67     * - RGB colors for visualization programs
68     * - names (by IUPAC recommendation)
69     */
70     class ElementsTable {
71     public:
72     /** Constructor */
73     ElementsTable();
74     /** Destructor */
75     ~ElementsTable();
76    
77     /**
78     * Read in the data file.
79     */
80     void Init();
81     /**
82     * Set the directory before calling Init()
83     */
84     void SetReadDirectory(char *dir) { dir_ = dir; }
85     /**
86     * Set the environment variable to use before calling Init()
87     */
88     void SetEnvironmentVariable(char *var) { envvar_ = var; }
89     /**
90     * Specified by particular table classes (parses an individual data line)
91     * @param line the data line to parse
92     */
93     void ParseLine(const char *line);
94     /**
95     * @return the number of elements in the periodic table
96     */
97     unsigned int GetNumberOfElements();
98     unsigned int GetSize() { return GetNumberOfElements(); }
99     /**
100     * @return the atomic number matching the element symbol passed
101     * or 0 if not defined. For 'D' or 'T' hydrogen isotopes, will return
102     * a value in the second argument
103     * @param str the element symbol
104     * @param iso the isotope index for Deuterium or Tritium
105     */
106     int GetAtomicNum(const char *str);
107     int GetAtomicNum(const char *str, int &iso);
108     /**
109     * @return the element symbol matching the atomic number passed
110     * @param atomicnum the atomic number of the element
111     */
112     char *GetSymbol(int atomicnum);
113     /**
114     * @return the van der Waals radius for this atomic number
115     * @param atomicnum the atomic number of the element
116     */
117     RealType GetVdwRad(int atomicnum);
118     /**
119     * @return the covalent radius for this atomic number
120     * @param atomicnum the atomic number of the element
121     */
122     RealType GetCovalentRad(int atomicnum);
123     /**
124     * @return the average atomic mass for this element.
125     * @param atomicnum the atomic number of the element
126     */
127     RealType GetMass(int atomicnum);
128     /**
129     * @return a "corrected" bonding radius based on the hybridization.
130     * Scales the covalent radius by 0.95 for sp2 and 0.90 for sp hybrids
131     * @param atomicnum the atomic number of the element
132     * @param hyb the hybridization of the element
133     */
134     RealType CorrectedBondRad(int atomicnum, int hyb = 3);
135     /**
136     * @return a "corrected" vdW radius based on the hybridization.
137     * Scales the van der Waals radius by 0.95 for sp2 and 0.90 for sp hybrids
138     * @param atomicnum the atomic number of the element
139     * @param hyb the hybridization of the element
140     */
141     RealType CorrectedVdwRad(int atomicnum, int hyb = 3);
142     /**
143     * @return the maximum expected number of bonds to this element
144     * @param atomicnum the atomic number of the element
145     */
146     int GetMaxBonds(int atomicnum);
147     /**
148     * @return the Pauling electronegativity for this element
149     * @param atomicnum the atomic number of the element
150     */
151     RealType GetElectroNeg(int atomicnum);
152     /**
153     * @return the ionization potential (in eV) for this element
154     * @param atomicnum the atomic number of the element
155     */
156     RealType GetIonization(int atomicnum);
157     /**
158     * @return the electron affinity (in eV) for this element
159     * @param atomicnum the atomic number of the element
160     */
161     RealType GetElectronAffinity(int atomicnum);
162     /**
163     * @return a vector with red, green, blue color values for this element
164     * @param atomicnum the atomic number of the element
165     */
166     std::vector<RealType> GetRGB(int atomicnum);
167    
168     /**
169     * @return the name of this element
170     * @param atomicnum the atomic number of the element
171     */
172     std::string GetName(int atomicnum);
173    
174     protected:
175     bool init_; //!< whether the data been read already
176     std::string filename_; //!< file to search for
177     std::string dir_; //!< data directory for file if _envvar fails
178     std::string subdir_; //!< subdirectory (if using environment variable)
179     std::string envvar_; //!< environment variable to check first
180     std::vector<Element*> elements_;
181     const char *dataptr_; //!< default data table if file is unreadable
182    
183     };
184    
185     extern ElementsTable etab;
186     }
187    
188     #endif