MPQC  2.3.1
atominfo.h
1 //
2 // atominfo.h
3 //
4 // Copyright (C) 1996 Limit Point Systems, Inc.
5 //
6 // Author: Curtis Janssen <cljanss@limitpt.com>
7 // Maintainer: LPS
8 //
9 // This file is part of the SC Toolkit.
10 //
11 // The SC Toolkit is free software; you can redistribute it and/or modify
12 // it under the terms of the GNU Library General Public License as published by
13 // the Free Software Foundation; either version 2, or (at your option)
14 // any later version.
15 //
16 // The SC Toolkit is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU Library General Public License for more details.
20 //
21 // You should have received a copy of the GNU Library General Public License
22 // along with the SC Toolkit; see the file COPYING.LIB. If not, write to
23 // the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
24 //
25 // The U.S. Government is granted a limited license as per AL 91-7.
26 //
27 
28 #ifndef _chemistry_molecule_atominfo_h
29 #define _chemistry_molecule_atominfo_h
30 
31 #include <string>
32 #include <map>
33 #include <vector>
34 
35 #include <util/class/class.h>
36 #include <util/keyval/keyval.h>
37 
38 namespace sc {
39 
40 class Units;
41 
45 class AtomInfo: public SavableState {
46  private:
47  enum { Nelement = 118, DefaultZ = 0 };
48 
49  struct atom
50  {
51  int Z;
52  char *name;
53  char *symbol;
54  };
55 
56  static struct atom elements_[Nelement];
57 
58  std::map<std::string,int> name_to_Z_;
59  std::map<std::string,int> symbol_to_Z_;
60  std::map<int,std::string> Z_to_names_;
61  std::map<int,std::string> Z_to_symbols_;
62  std::map<int,double> Z_to_mass_;
63  std::map<int,double> Z_to_atomic_radius_;
64  std::map<int,double> Z_to_vdw_radius_;
65  std::map<int,double> Z_to_bragg_radius_;
66  std::map<int,double> Z_to_maxprob_radius_;
67  std::map<int,std::vector<double> > Z_to_rgb_;
68  std::map<int,double> Z_to_ip_;
69  double atomic_radius_scale_;
70  double vdw_radius_scale_;
71  double bragg_radius_scale_;
72  double maxprob_radius_scale_;
73 
74  char *overridden_values_;
75 
76  void load_library_values();
77  void override_library_values(const Ref<KeyVal> &keyval);
78  void load_values(const Ref<KeyVal>& keyval, int override);
79  void load_values(std::map<int,double>&,
80  double *scale, const char *keyword,
81  const Ref<KeyVal> &keyval, int override,
82  const Ref<Units> &);
83  void load_values(std::map<int,std::vector<double> >&,
84  const char *keyword,
85  const Ref<KeyVal> &keyval, int override);
86  void add_overridden_value(const char *assignment);
87  void initialize_names();
88  double lookup_value(const std::map<int,double>& values, int Z) const;
89  double lookup_array_value(const std::map<int,std::vector<double> >& values,
90  int Z, int i) const;
91  public:
92  AtomInfo();
93 
174  AtomInfo(StateIn&);
175  ~AtomInfo();
177 
179  double vdw_radius(int Z) const;
180  double bragg_radius(int Z) const;
181  double atomic_radius(int Z) const;
182  double maxprob_radius(int Z) const;
183 
185  double ip(int Z) const;
186 
188  double vdw_radius_scale() const { return vdw_radius_scale_; }
190  double bragg_radius_scale() const { return bragg_radius_scale_; }
192  double atomic_radius_scale() const { return atomic_radius_scale_; }
194  double maxprob_radius_scale() const { return maxprob_radius_scale_; }
195 
198  double rgb(int Z, int color) const;
199  double red(int Z) const;
200  double green(int Z) const;
201  double blue(int Z) const;
202 
204  double mass(int Z) const;
205 
207  std::string name(int Z);
209  std::string symbol(int Z);
210 
212  int string_to_Z(const std::string &, int allow_exceptions = 1);
213 };
214 
215 }
216 
217 #endif
218 
219 // Local Variables:
220 // mode: c++
221 // c-file-style: "CLJ"
222 // End:
The AtomInfo class provides information about atoms.
Definition: atominfo.h:45
int string_to_Z(const std::string &, int allow_exceptions=1)
This converts a name or symbol to the atomic number.
double vdw_radius(int Z) const
These return various measures of the atom's radius.
void save_data_state(StateOut &s)
Save the base classes (with save_data_state) and the members in the same order that the StateIn CTOR ...
double atomic_radius_scale() const
Return the scale factor for the atomic radii.
Definition: atominfo.h:192
double mass(int Z) const
This returns the mass of the most abundant isotope.
double ip(int Z) const
Returns the atomization potential for atomic number Z.
double rgb(int Z, int color) const
These return information about the color of the atom for visualization programs.
double vdw_radius_scale() const
Return the scale factor for the VdW radii.
Definition: atominfo.h:188
std::string name(int Z)
This returns the full name of the element.
std::string symbol(int Z)
This returns the symbol for the element.
double bragg_radius_scale() const
Return the scale factor for the Bragg radii.
Definition: atominfo.h:190
AtomInfo(const Ref< KeyVal > &)
The AtomInfo KeyVal constructor is used to generate a AtomInfo object from the input.
double maxprob_radius_scale() const
Return the scale factor for the maximum probability radii.
Definition: atominfo.h:194
A template class that maintains references counts.
Definition: ref.h:332
Base class for objects that can save/restore state.
Definition: state.h:46
Restores objects that derive from SavableState.
Definition: statein.h:70
Serializes objects that derive from SavableState.
Definition: stateout.h:61

Generated at Thu Jul 21 2022 00:00:00 for MPQC 2.3.1 using the documentation package Doxygen 1.9.1.