mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-04 21:54:27 +08:00
http://sourceforge.net/tracker/index.php?func=detail&aid=1942657&group_id=160139&atid=814650 This was handled by adding error/consistency checking to Atom.calcExplicitValence() This includes another pretty big scale modification: the allowed valence list for atoms (in atomic_data.cpp) can now contain a -1 at the end. If this is the case, the atom will tolerate valences above the ones listed. This is done to allow "flexible" atoms (i.e. transition metals and the like) to accept arbitrary coordination numbers without generating errors.
164 lines
6.9 KiB
C++
Executable File
164 lines
6.9 KiB
C++
Executable File
//
|
|
// Copyright (C) 2001-2006 Greg Landrum and Rational Discovery LLC
|
|
//
|
|
// @@ All Rights Reserved @@
|
|
//
|
|
|
|
// Automatically generated from elements.txt
|
|
#include "atomic_data.h"
|
|
#include <boost/tokenizer.hpp>
|
|
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
|
|
|
|
namespace RDKit {
|
|
|
|
const std::string periodicTableAtomData =
|
|
"0 * 0.000 0.000 0.000 0.000 0 1 2 3 4 5 6 -1 \n \
|
|
1 H 0.230 0.330 1.200 1.008 1 1 \n \
|
|
2 He 0.930 0.700 1.400 4.003 2 0 \n \
|
|
3 Li 0.680 1.230 1.820 6.941 1 1 \n \
|
|
4 Be 0.350 0.900 1.700 9.012 2 2 \n \
|
|
5 B 0.830, 0.820 2.080 10.812 3 3 \n \
|
|
6 C 0.680 0.770 1.950 12.011 4 4 \n \
|
|
7 N 0.680 0.700 1.850 14.007 5 3 \n \
|
|
8 O 0.680 0.660 1.700 15.999 6 2 \n \
|
|
9 F 0.640 0.611 1.730 18.998 7 1 \n \
|
|
10 Ne 1.120 0.700 1.540 20.180 8 0 \n"
|
|
"11 Na 0.970 1.540 2.270 22.990 1 1 \n \
|
|
12 Mg 1.100 1.360 1.730 24.305 2 2 \n \
|
|
13 Al 1.350 1.180 2.050 26.982 3 6 \n \
|
|
14 Si 1.200 0.937 2.100 28.086 4 4 6 \n \
|
|
15 P 0.750 0.890 2.080 30.974 5 3 5 \n \
|
|
16 S 1.020 1.040 2.000 32.067 6 2 4 6 \n \
|
|
17 Cl 0.990 0.997 1.970 35.453 7 1 \n \
|
|
18 Ar 1.570 1.740 1.880 39.948 8 0 \n \
|
|
19 K 1.330 2.030 2.750 39.098 1 1 \n \
|
|
20 Ca 0.990 1.740 1.973 40.078 2 2 \n"
|
|
"21 Sc 1.440 1.440 1.700 44.956 3 6 -1 \n \
|
|
22 Ti 1.470 1.320 1.700 47.867 4 6 -1 \n \
|
|
23 V 1.330 1.220 1.700 50.942 5 6 -1 \n \
|
|
24 Cr 1.350 1.180 1.700 51.996 6 6 -1 \n \
|
|
25 Mn 1.350 1.170 1.700 54.938 7 8 -1 \n \
|
|
26 Fe 1.340 1.170 1.700 55.845 8 6 -1 \n \
|
|
27 Co 1.330 1.160 1.700 58.933 9 6 -1 \n \
|
|
28 Ni 1.500 1.150 1.630 58.693 10 6 -1 \n \
|
|
29 Cu 1.520 1.170 1.400 63.546 11 6 -1 \n"
|
|
"30 Zn 1.450 1.250 1.390 65.390 2 6 -1 \n \
|
|
31 Ga 1.220 1.260 1.870 69.723 3 3 \n \
|
|
32 Ge 1.170 1.188 1.700 72.610 4 4 \n \
|
|
33 As 1.210 1.200 1.850 74.922 5 3 5 \n \
|
|
34 Se 1.220 1.170 1.900 78.960 6 2 4 6 \n \
|
|
35 Br 1.210 1.167 2.100 79.904 7 1 \n \
|
|
36 Kr 1.910 1.910 2.020 83.800 8 0 \n \
|
|
37 Rb 1.470 2.160 1.700 85.468 1 1 \n \
|
|
38 Sr 1.120 1.910 1.700 87.620 2 2 \n \
|
|
39 Y 1.780 1.620 1.700 88.906 3 6 -1 \n"
|
|
"40 Zr 1.560 1.450 1.700 91.224 4 6 -1 \n \
|
|
41 Nb 1.480 1.340 1.700 92.906 5 6 -1 \n \
|
|
42 Mo 1.470 1.300 1.700 95.940 6 6 -1 \n \
|
|
43 Tc 1.350 1.270 1.700 98.000 7 6 -1 \n \
|
|
44 Ru 1.400 1.250 1.700 101.070 8 6 -1 \n \
|
|
45 Rh 1.450 1.250 1.700 102.906 9 6 -1 \n \
|
|
46 Pd 1.500 1.280 1.630 106.420 10 6 -1 \n \
|
|
47 Ag 1.590 1.340 1.720 107.868 11 6 -1 \n \
|
|
48 Cd 1.690 1.480 1.580 112.412 2 6 -1 \n \
|
|
49 In 1.630 1.440 1.930 114.818 3 3 \n"
|
|
"50 Sn 1.460 1.385 2.170 118.711 4 4 \n \
|
|
51 Sb 1.460 1.400 2.200 121.760 5 3 5 \n \
|
|
52 Te 1.470 1.378 2.060 127.600 6 2 \n \
|
|
53 I 1.400 1.387 2.150 126.904 7 1 2 5 \n \
|
|
54 Xe 1.980 1.980 2.160 131.290 8 0 \n \
|
|
55 Cs 1.670 2.350 1.700 132.905 1 1 \n \
|
|
56 Ba 1.340 1.980 1.700 137.328 2 2 \n \
|
|
57 La 1.870 1.690 1.700 138.906 3 12 -1 \n \
|
|
58 Ce 1.830 1.830 1.700 140.116 4 6 -1 \n \
|
|
59 Pr 1.820 1.820 1.700 140.908 3 6 -1 \n"
|
|
"60 Nd 1.810 1.810 1.700 144.240 4 6 -1 \n \
|
|
61 Pm 1.800 1.800 1.700 145.000 5 6 -1 \n \
|
|
62 Sm 1.800 1.800 1.700 150.360 6 6 -1 \n \
|
|
63 Eu 1.990 1.990 1.700 151.964 7 6 -1 \n \
|
|
64 Gd 1.790 1.790 1.700 157.250 8 6 -1 \n \
|
|
65 Tb 1.760 1.760 1.700 158.925 9 6 -1 \n \
|
|
66 Dy 1.750 1.750 1.700 162.500 10 6 -1 \n \
|
|
67 Ho 1.740 1.740 1.700 164.930 11 6 -1 \n \
|
|
68 Er 1.730 1.730 1.700 167.260 12 6 -1 \n \
|
|
69 Tm 1.720 1.720 1.700 168.934 13 6 -1 \n"
|
|
"70 Yb 1.940 1.940 1.700 173.040 14 6 -1 \n \
|
|
71 Lu 1.720 1.720 1.700 174.967 15 6 -1 \n \
|
|
72 Hf 1.570 1.440 1.700 178.490 4 6 -1 \n \
|
|
73 Ta 1.430 1.340 1.700 180.948 5 6 -1 \n \
|
|
74 W 1.370 1.300 1.700 183.840 6 6 -1 \n \
|
|
75 Re 1.350 1.280 1.700 186.207 7 6 -1 \n \
|
|
76 Os 1.370 1.260 1.700 190.230 8 6 -1 \n \
|
|
77 Ir 1.320 1.270 1.700 192.217 9 6 -1 \n \
|
|
78 Pt 1.500 1.300 1.720 195.078 10 6 -1 \n \
|
|
79 Au 1.500 1.340 1.660 196.967 11 6 -1 \n"
|
|
"80 Hg 1.700 1.490 1.550 200.590 2 6 -1 \n \
|
|
81 Tl 1.550 1.480 1.960 204.383 3 3 \n \
|
|
82 Pb 1.540 1.480 2.020 207.200 4 4 \n \
|
|
83 Bi 1.540 1.450 1.700 208.980 5 3 \n \
|
|
84 Po 1.680 1.460 1.700 209.000 6 2 \n \
|
|
85 At 1.700 1.450 1.700 210.000 7 1 \n \
|
|
86 Rn 2.400 2.400 1.700 222.000 8 0 \n \
|
|
87 Fr 2.000 2.000 1.700 223.000 1 1 \n \
|
|
88 Ra 1.900 1.900 1.700 226.000 2 2 \n \
|
|
89 Ac 1.880 1.880 1.700 227.000 3 6 -1 \n"
|
|
"90 Th 1.790 1.790 1.700 232.038 4 6 -1 \n \
|
|
91 Pa 1.610 1.610 1.700 231.036 3 6 -1 \n \
|
|
92 U 1.580 1.580 1.860 238.029 4 6 -1 \n \
|
|
93 Np 1.550 1.550 1.700 237.000 5 6 -1 \n \
|
|
94 Pu 1.530 1.530 1.700 244.000 6 6 -1 \n \
|
|
95 Am 1.510 1.070 1.700 243.000 7 6 -1 \n \
|
|
96 Cm 1.500 0.000 1.700 247.000 8 6 -1 \n \
|
|
97 Bk 1.500 0.000 1.700 247.000 9 6 -1 \n \
|
|
98 Cf 1.500 0.000 1.700 251.000 10 6 -1 \n \
|
|
99 Es 1.500 0.000 1.700 252.000 11 6 -1 \n \
|
|
100 Fm 1.500 0.000 1.700 257.000 12 6 -1 \n \
|
|
101 Md 1.500 0.000 1.700 258.000 13 6 -1 \n \
|
|
102 No 1.500 0.000 1.700 259.000 14 6 -1 \n \
|
|
103 Lr 1.500 0.000 1.700 262.000 15 6 -1 \n \
|
|
104 Rf 1.500 0.000 1.700 261.000 4 6 -1 \n \
|
|
"
|
|
;
|
|
atomicData::atomicData(const std::string &dataLine) {
|
|
boost::char_separator<char> spaceSep(" \t");
|
|
tokenizer tokens(dataLine,spaceSep);
|
|
tokenizer::iterator token=tokens.begin();
|
|
|
|
// atomic number first
|
|
anum = atoi(token->c_str());
|
|
++token;
|
|
|
|
// element symbol
|
|
symb = *token;
|
|
++token;
|
|
|
|
// covalent radius
|
|
rCov = atof(token->c_str());
|
|
++token;
|
|
|
|
// rB0
|
|
rB0 = atof(token->c_str());
|
|
++token;
|
|
|
|
// Van derWaal radius
|
|
rVdw = atof(token->c_str());
|
|
++token;
|
|
|
|
// atomic mass
|
|
mass = atof(token->c_str());
|
|
++token;
|
|
|
|
// number of outshell electrons
|
|
nVal = atoi(token->c_str());
|
|
++token;
|
|
|
|
// now the valences
|
|
valence.clear();
|
|
while (token != tokens.end()) {
|
|
valence.push_back(atoi(token->c_str()));
|
|
++token;
|
|
}
|
|
}
|
|
}
|
|
|