1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: atommap.cc
4 // Copyright (C) 2009 Toru Shiozaki
5 //
6 // Author: Toru Shiozaki <shiozaki@northwestern.edu>
7 // Maintainer: Shiozaki group
8 //
9 // This file is part of the BAGEL package.
10 //
11 // This program is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // This program 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 General Public License for more details.
20 //
21 // You should have received a copy of the GNU General Public License
22 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
23 //
24 
25 
26 #include <src/util/atommap.h>
27 #include <src/util/constants.h>
28 #include <sstream>
29 #include <stdexcept>
30 
31 using namespace std;
32 using namespace bagel;
33 
AtomMap()34 AtomMap::AtomMap () {
35   atommap.emplace("q", 0);
36   atommap.emplace("h", 1);
37   atommap.emplace("he", 2);
38   atommap.emplace("li", 3);
39   atommap.emplace("be", 4);
40   atommap.emplace("b", 5);
41   atommap.emplace("c", 6);
42   atommap.emplace("n", 7);
43   atommap.emplace("o", 8);
44   atommap.emplace("f", 9);
45   atommap.emplace("ne", 10);
46   atommap.emplace("na", 11);
47   atommap.emplace("mg", 12);
48   atommap.emplace("al", 13);
49   atommap.emplace("si", 14);
50   atommap.emplace("p", 15);
51   atommap.emplace("s", 16);
52   atommap.emplace("cl", 17);
53   atommap.emplace("ar", 18);
54   atommap.emplace("k", 19);
55   atommap.emplace("ca", 20);
56   atommap.emplace("sc", 21);
57   atommap.emplace("ti", 22);
58   atommap.emplace("v", 23);
59   atommap.emplace("cr", 24);
60   atommap.emplace("mn", 25);
61   atommap.emplace("fe", 26);
62   atommap.emplace("co", 27);
63   atommap.emplace("ni", 28);
64   atommap.emplace("cu", 29);
65   atommap.emplace("zn", 30);
66   atommap.emplace("ga", 31);
67   atommap.emplace("ge", 32);
68   atommap.emplace("as", 33);
69   atommap.emplace("se", 34);
70   atommap.emplace("br", 35);
71   atommap.emplace("kr", 36);
72   atommap.emplace("rb", 37);
73   atommap.emplace("sr", 38);
74   atommap.emplace("y", 39);
75   atommap.emplace("zr", 40);
76   atommap.emplace("nb", 41);
77   atommap.emplace("mo", 42);
78   atommap.emplace("tc", 43);
79   atommap.emplace("ru", 44);
80   atommap.emplace("rh", 45);
81   atommap.emplace("pd", 46);
82   atommap.emplace("ag", 47);
83   atommap.emplace("cd", 48);
84   atommap.emplace("in", 49);
85   atommap.emplace("sn", 50);
86   atommap.emplace("sb", 51);
87   atommap.emplace("te", 52);
88   atommap.emplace("i", 53);
89   atommap.emplace("xe", 54);
90   atommap.emplace("cs", 55);
91   atommap.emplace("ba", 56);
92   atommap.emplace("la", 57);
93   atommap.emplace("ce", 58);
94   atommap.emplace("pr", 59);
95   atommap.emplace("nd", 60);
96   atommap.emplace("pm", 61);
97   atommap.emplace("sm", 62);
98   atommap.emplace("eu", 63);
99   atommap.emplace("gd", 64);
100   atommap.emplace("tb", 65);
101   atommap.emplace("dy", 66);
102   atommap.emplace("ho", 67);
103   atommap.emplace("er", 68);
104   atommap.emplace("tm", 69);
105   atommap.emplace("yb", 70);
106   atommap.emplace("lu", 71);
107   atommap.emplace("hf", 72);
108   atommap.emplace("ta", 73);
109   atommap.emplace("w", 74);
110   atommap.emplace("re", 75);
111   atommap.emplace("os", 76);
112   atommap.emplace("ir", 77);
113   atommap.emplace("pt", 78);
114   atommap.emplace("au", 79);
115   atommap.emplace("hg", 80);
116   atommap.emplace("tl", 81);
117   atommap.emplace("pb", 82);
118   atommap.emplace("bi", 83);
119   atommap.emplace("po", 84);
120   atommap.emplace("at", 85);
121   atommap.emplace("rn", 86);
122   atommap.emplace("fr", 87);
123   atommap.emplace("ra", 88);
124   atommap.emplace("ac", 89);
125   atommap.emplace("th", 90);
126   atommap.emplace("pa", 91);
127   atommap.emplace("u", 92);
128   atommap.emplace("np", 93);
129   atommap.emplace("pu", 94);
130   atommap.emplace("am", 95);
131   atommap.emplace("cm", 96);
132   atommap.emplace("bk", 97);
133   atommap.emplace("cf", 98);
134   atommap.emplace("es", 99);
135   atommap.emplace("fm", 100);
136   atommap.emplace("md", 101);
137   atommap.emplace("no", 102);
138   atommap.emplace("lr", 103);
139   atommap.emplace("rf", 104);
140   atommap.emplace("db", 105);
141   atommap.emplace("sg", 106);
142   atommap.emplace("bh", 107);
143   atommap.emplace("hs", 108);
144   atommap.emplace("mt", 109);
145   atommap.emplace("ds", 110);
146   atommap.emplace("rg", 111);
147   atommap.emplace("cn", 112);
148   atommap.emplace("uut", 113);
149   atommap.emplace("fl", 114);
150   atommap.emplace("uup", 115);
151   atommap.emplace("lv", 116);
152   atommap.emplace("uus", 117);
153   atommap.emplace("uuo", 118);
154 
155   cov_radii.emplace("h",  0.31);
156   cov_radii.emplace("he", 0.28);
157   cov_radii.emplace("li", 1.28);
158   cov_radii.emplace("be", 0.96);
159   cov_radii.emplace("b",  0.84);
160   cov_radii.emplace("c",  0.76);
161   cov_radii.emplace("n",  0.71);
162   cov_radii.emplace("o",  0.66);
163   cov_radii.emplace("f",  0.57);
164   cov_radii.emplace("ne", 0.58);
165   cov_radii.emplace("na", 1.66);
166   cov_radii.emplace("mg", 1.41);
167   cov_radii.emplace("al", 1.21);
168   cov_radii.emplace("si", 1.11);
169   cov_radii.emplace("p",  1.07);
170   cov_radii.emplace("s",  1.05);
171   cov_radii.emplace("cl", 1.02);
172   cov_radii.emplace("ar", 1.06);
173   cov_radii.emplace("k",  2.03);
174   cov_radii.emplace("ca", 1.76);
175   cov_radii.emplace("sc", 1.70);
176   cov_radii.emplace("ti", 1.60);
177   cov_radii.emplace("v",  1.53);
178   cov_radii.emplace("cr", 1.39);
179   cov_radii.emplace("mn", 1.39);
180   cov_radii.emplace("fe", 1.32);
181   cov_radii.emplace("co", 1.26);
182   cov_radii.emplace("ni", 1.24);
183   cov_radii.emplace("cu", 1.32);
184   cov_radii.emplace("zn", 1.22);
185   cov_radii.emplace("ga", 1.22);
186   cov_radii.emplace("ge", 1.20);
187   cov_radii.emplace("as", 1.19);
188   cov_radii.emplace("se", 1.20);
189   cov_radii.emplace("br", 1.20);
190   cov_radii.emplace("kr", 1.16);
191   cov_radii.emplace("rb", 2.20);
192   cov_radii.emplace("sr", 1.95);
193   cov_radii.emplace("y",  1.90);
194   cov_radii.emplace("zr", 1.75);
195   cov_radii.emplace("nb", 1.64);
196   cov_radii.emplace("mo", 1.54);
197   cov_radii.emplace("tc", 1.47);
198   cov_radii.emplace("ru", 1.46);
199   cov_radii.emplace("rh", 1.42);
200   cov_radii.emplace("pd", 1.39);
201   cov_radii.emplace("ag", 1.45);
202   cov_radii.emplace("cd", 1.44);
203   cov_radii.emplace("in", 1.42);
204   cov_radii.emplace("sn", 1.39);
205   cov_radii.emplace("sb", 1.39);
206   cov_radii.emplace("te", 1.38);
207   cov_radii.emplace("i",  1.39);
208   cov_radii.emplace("xe", 1.40);
209   cov_radii.emplace("cs", 2.44);
210   cov_radii.emplace("ba", 2.15);
211   cov_radii.emplace("la", 2.07);
212   cov_radii.emplace("ce", 2.04);
213   cov_radii.emplace("pr", 2.03);
214   cov_radii.emplace("nd", 2.01);
215   cov_radii.emplace("pm", 1.99);
216   cov_radii.emplace("sm", 1.98);
217   cov_radii.emplace("eu", 1.98);
218   cov_radii.emplace("gd", 1.96);
219   cov_radii.emplace("tb", 1.94);
220   cov_radii.emplace("dy", 1.92);
221   cov_radii.emplace("ho", 1.92);
222   cov_radii.emplace("er", 1.89);
223   cov_radii.emplace("tm", 1.90);
224   cov_radii.emplace("yb", 1.87);
225   cov_radii.emplace("lu", 1.87);
226   cov_radii.emplace("hf", 1.75);
227   cov_radii.emplace("ta", 1.70);
228   cov_radii.emplace("w",  1.62);
229   cov_radii.emplace("re", 1.51);
230   cov_radii.emplace("os", 1.44);
231   cov_radii.emplace("ir", 1.41);
232   cov_radii.emplace("pt", 1.36);
233   cov_radii.emplace("au", 1.36);
234   cov_radii.emplace("hg", 1.32);
235   cov_radii.emplace("tl", 1.45);
236   cov_radii.emplace("pb", 1.46);
237   cov_radii.emplace("bi", 1.48);
238   cov_radii.emplace("po", 1.40);
239   cov_radii.emplace("at", 1.50);
240   cov_radii.emplace("rn", 1.50);
241   cov_radii.emplace("fr", 2.60);
242   cov_radii.emplace("ra", 2.21);
243   cov_radii.emplace("ac", 2.15);
244   cov_radii.emplace("th", 2.06);
245   cov_radii.emplace("pa", 2.00);
246   cov_radii.emplace("u",  1.96);
247   cov_radii.emplace("np", 1.90);
248   cov_radii.emplace("pu", 1.87);
249   cov_radii.emplace("am", 1.80);
250   cov_radii.emplace("cm", 1.69);
251 
252   // atom sizes (Bragg-Slater radii)
253   bsradii.emplace("h", 0.25);
254   bsradii.emplace("he", 0.25);
255   bsradii.emplace("li", 1.45);
256   bsradii.emplace("be", 1.05);
257   bsradii.emplace("b", 0.85);
258   bsradii.emplace("c", 0.7);
259   bsradii.emplace("n", 0.65);
260   bsradii.emplace("o", 0.6);
261   bsradii.emplace("f", 0.5);
262   bsradii.emplace("ne", 0.45);
263   bsradii.emplace("na", 1.8);
264   bsradii.emplace("mg", 1.5);
265   bsradii.emplace("al", 1.25);
266   bsradii.emplace("si", 1.1);
267   bsradii.emplace("p", 1.0);
268   bsradii.emplace("s", 1.0);
269   bsradii.emplace("cl", 1.0);
270   bsradii.emplace("ar", 1.0);
271   bsradii.emplace("k", 2.2);
272   bsradii.emplace("ca", 1.8);
273   bsradii.emplace("sc", 1.6);
274   bsradii.emplace("ti", 1.4);
275   bsradii.emplace("v", 1.35);
276   bsradii.emplace("cr", 1.4);
277   bsradii.emplace("mn", 1.4);
278   bsradii.emplace("fe", 1.4);
279   bsradii.emplace("co", 1.35);
280   bsradii.emplace("ni", 1.35);
281   bsradii.emplace("cu", 1.35);
282   bsradii.emplace("zn", 1.35);
283   bsradii.emplace("ga", 1.3);
284   bsradii.emplace("ge", 1.25);
285   bsradii.emplace("as", 1.15);
286   bsradii.emplace("se", 1.15);
287   bsradii.emplace("br", 1.15);
288   bsradii.emplace("kr", 1.15);
289   bsradii.emplace("rb", 2.35);
290   bsradii.emplace("sr", 2.0);
291   bsradii.emplace("y", 1.8);
292   bsradii.emplace("zr", 1.55);
293   bsradii.emplace("nb", 1.45);
294   bsradii.emplace("mo", 1.45);
295   bsradii.emplace("tc", 1.35);
296   bsradii.emplace("ru", 1.3);
297   bsradii.emplace("rh", 1.35);
298   bsradii.emplace("pd", 1.4);
299   bsradii.emplace("ag", 1.6);
300   bsradii.emplace("cd", 1.55);
301   bsradii.emplace("in", 1.55);
302   bsradii.emplace("sn", 1.45);
303   bsradii.emplace("sb", 1.45);
304   bsradii.emplace("te", 1.4);
305   bsradii.emplace("i", 1.4);
306   bsradii.emplace("xe", 1.4);
307   bsradii.emplace("cs", 2.6);
308   bsradii.emplace("ba", 2.15);
309   bsradii.emplace("la", 1.95);
310   bsradii.emplace("ce", 1.85);
311   bsradii.emplace("pr", 1.85);
312   bsradii.emplace("nd", 1.85);
313   bsradii.emplace("pm", 1.85);
314   bsradii.emplace("sm", 1.85);
315   bsradii.emplace("eu", 1.85);
316   bsradii.emplace("gd", 1.8);
317   bsradii.emplace("tb", 1.75);
318   bsradii.emplace("dy", 1.75);
319   bsradii.emplace("ho", 1.75);
320   bsradii.emplace("er", 1.75);
321   bsradii.emplace("tm", 1.75);
322   bsradii.emplace("yb", 1.75);
323   bsradii.emplace("lu", 1.75);
324   bsradii.emplace("hf", 1.55);
325   bsradii.emplace("ta", 1.45);
326   bsradii.emplace("w", 1.35);
327   bsradii.emplace("re", 1.35);
328   bsradii.emplace("os", 1.3);
329   bsradii.emplace("ir", 1.35);
330   bsradii.emplace("pt", 1.35);
331   bsradii.emplace("au", 1.35);
332   bsradii.emplace("hg", 1.5);
333   bsradii.emplace("tl", 1.9);
334   bsradii.emplace("pb", 1.8);
335   bsradii.emplace("bi", 1.6);
336   bsradii.emplace("po", 1.9);
337   bsradii.emplace("at", 1.9);
338   bsradii.emplace("rn", 1.9);
339   bsradii.emplace("fr", 2.85);
340   bsradii.emplace("ra", 2.15);
341   bsradii.emplace("ac", 1.95);
342   bsradii.emplace("th", 1.8);
343   bsradii.emplace("pa", 1.8);
344   bsradii.emplace("u", 1.75);
345   bsradii.emplace("np", 1.75);
346   bsradii.emplace("pu", 1.75);
347   bsradii.emplace("am", 1.75);
348   bsradii.emplace("cm", 1.75);
349   bsradii.emplace("bk", 1.75);
350   bsradii.emplace("cf", 1.75);
351   bsradii.emplace("es", 1.75);
352   bsradii.emplace("fm", 1.75);
353   bsradii.emplace("md", 1.75);
354   bsradii.emplace("no", 1.75);
355   bsradii.emplace("lr", 1.75);
356 #if 0
357   bsradii.emplace("rf", 104);
358   bsradii.emplace("db", 105);
359   bsradii.emplace("sg", 106);
360   bsradii.emplace("bh", 107);
361   bsradii.emplace("hs", 108);
362   bsradii.emplace("mt", 109);
363   bsradii.emplace("ds", 110);
364   bsradii.emplace("rg", 111);
365   bsradii.emplace("cn", 112);
366   bsradii.emplace("uut", 113);
367   bsradii.emplace("fl", 114);
368   bsradii.emplace("uup", 115);
369   bsradii.emplace("lv", 116);
370   bsradii.emplace("uus", 117);
371   bsradii.emplace("uuo", 118);
372 #endif
373 
374   // finite nuclear exponents, from L. Visscher and K. G. Dyall, At. Data Nucl. Data Tables 67, 207 (1997)
375   nuclear_exponents.emplace("q",  0.0000000000E+00);
376   nuclear_exponents.emplace("h",  2.1248239171E+09);
377   nuclear_exponents.emplace("he", 1.1671538870E+09);
378   nuclear_exponents.emplace("li", 8.9266848806E+08);
379   nuclear_exponents.emplace("be", 7.8788802914E+08);
380   nuclear_exponents.emplace("b",  7.1178709563E+08);
381   nuclear_exponents.emplace("c",  6.8077502929E+08);
382   nuclear_exponents.emplace("n",  6.2865615725E+08);
383   nuclear_exponents.emplace("o",  5.8631436655E+08);
384   nuclear_exponents.emplace("f",  5.3546911034E+08);
385   nuclear_exponents.emplace("ne", 5.2105715255E+08);
386   nuclear_exponents.emplace("na", 4.8349721509E+08);
387   nuclear_exponents.emplace("mg", 4.7254270882E+08);
388   nuclear_exponents.emplace("al", 4.4335984491E+08);
389   nuclear_exponents.emplace("si", 4.3467748823E+08);
390   nuclear_exponents.emplace("p",  4.1117553148E+08);
391   nuclear_exponents.emplace("s",  4.0407992047E+08);
392   nuclear_exponents.emplace("cl", 3.8463852873E+08);
393   nuclear_exponents.emplace("ar", 3.5722217300E+08);
394   nuclear_exponents.emplace("k",  3.6228128110E+08);
395   nuclear_exponents.emplace("ca", 3.5722217300E+08);
396   nuclear_exponents.emplace("sc", 3.3451324570E+08);
397   nuclear_exponents.emplace("ti", 3.2263108827E+08);
398   nuclear_exponents.emplace("v",  3.1181925878E+08);
399   nuclear_exponents.emplace("cr", 3.0842641793E+08);
400   nuclear_exponents.emplace("mn", 2.9881373610E+08);
401   nuclear_exponents.emplace("fe", 2.9578406371E+08);
402   nuclear_exponents.emplace("co", 2.8716667270E+08);
403   nuclear_exponents.emplace("ni", 2.8996391416E+08);
404   nuclear_exponents.emplace("cu", 2.7665979354E+08);
405   nuclear_exponents.emplace("zn", 2.7419021043E+08);
406   nuclear_exponents.emplace("ga", 2.6267002737E+08);
407   nuclear_exponents.emplace("ge", 2.5235613399E+08);
408   nuclear_exponents.emplace("as", 2.5042024280E+08);
409   nuclear_exponents.emplace("se", 2.4130163719E+08);
410   nuclear_exponents.emplace("br", 2.4305454351E+08);
411   nuclear_exponents.emplace("kr", 2.3461213272E+08);
412   nuclear_exponents.emplace("rb", 2.3301551109E+08);
413   nuclear_exponents.emplace("sr", 2.2839354730E+08);
414   nuclear_exponents.emplace("y",  2.2690621893E+08);
415   nuclear_exponents.emplace("zr", 2.2544431039E+08);
416   nuclear_exponents.emplace("nb", 2.2120420724E+08);
417   nuclear_exponents.emplace("mo", 2.1458511597E+08);
418   nuclear_exponents.emplace("tc", 2.1458511597E+08);
419   nuclear_exponents.emplace("ru", 2.0965270287E+08);
420   nuclear_exponents.emplace("rh", 2.0846586999E+08);
421   nuclear_exponents.emplace("pd", 2.0500935221E+08);
422   nuclear_exponents.emplace("ag", 2.0389047621E+08);
423   nuclear_exponents.emplace("cd", 1.9648639618E+08);
424   nuclear_exponents.emplace("in", 1.9548577691E+08);
425   nuclear_exponents.emplace("sn", 1.9067718154E+08);
426   nuclear_exponents.emplace("sb", 1.8975246242E+08);
427   nuclear_exponents.emplace("te", 1.8193056289E+08);
428   nuclear_exponents.emplace("i",  1.8444240538E+08);
429   nuclear_exponents.emplace("xe", 1.8030529331E+08);
430   nuclear_exponents.emplace("cs", 1.7950688281E+08);
431   nuclear_exponents.emplace("ba", 1.7565009043E+08);
432   nuclear_exponents.emplace("la", 1.7490463170E+08);
433   nuclear_exponents.emplace("ce", 1.7416744147E+08);
434   nuclear_exponents.emplace("pr", 1.7343837120E+08);
435   nuclear_exponents.emplace("nd", 1.7129844956E+08);
436   nuclear_exponents.emplace("pm", 1.7060044589E+08);
437   nuclear_exponents.emplace("sm", 1.6591550422E+08);
438   nuclear_exponents.emplace("eu", 1.6527352089E+08);
439   nuclear_exponents.emplace("gd", 1.6215880671E+08);
440   nuclear_exponents.emplace("tb", 1.6155419421E+08);
441   nuclear_exponents.emplace("dy", 1.5977529080E+08);
442   nuclear_exponents.emplace("ho", 1.5977529080E+08);
443   nuclear_exponents.emplace("er", 1.5636673634E+08);
444   nuclear_exponents.emplace("tm", 1.5581702004E+08);
445   nuclear_exponents.emplace("yb", 1.5314257850E+08);
446   nuclear_exponents.emplace("lu", 1.5262201512E+08);
447   nuclear_exponents.emplace("hf", 1.5008710340E+08);
448   nuclear_exponents.emplace("ta", 1.4959325643E+08);
449   nuclear_exponents.emplace("w",  1.4813689532E+08);
450   nuclear_exponents.emplace("re", 1.4671710337E+08);
451   nuclear_exponents.emplace("os", 1.4442808782E+08);
452   nuclear_exponents.emplace("ir", 1.4398142103E+08);
453   nuclear_exponents.emplace("pt", 1.4309883584E+08);
454   nuclear_exponents.emplace("au", 1.4223027307E+08);
455   nuclear_exponents.emplace("hg", 1.4011788914E+08);
456   nuclear_exponents.emplace("tl", 1.3888925203E+08);
457   nuclear_exponents.emplace("pb", 1.3768840081E+08);
458   nuclear_exponents.emplace("bi", 1.3729411599E+08);
459   nuclear_exponents.emplace("po", 1.3729411599E+08);
460   nuclear_exponents.emplace("at", 1.3690277000E+08);
461   nuclear_exponents.emplace("rn", 1.3242350205E+08);
462   nuclear_exponents.emplace("fr", 1.3206733609E+08);
463   nuclear_exponents.emplace("ra", 1.3101367628E+08);
464   nuclear_exponents.emplace("ac", 1.3066730974E+08);
465   nuclear_exponents.emplace("th", 1.2897067480E+08);
466   nuclear_exponents.emplace("pa", 1.2930539512E+08);
467   nuclear_exponents.emplace("u",  1.2700881714E+08);
468   nuclear_exponents.emplace("np", 1.2733038109E+08);
469   nuclear_exponents.emplace("pu", 1.2512299012E+08);
470   nuclear_exponents.emplace("am", 1.2543221826E+08);
471   nuclear_exponents.emplace("cm", 1.2420711085E+08);
472   nuclear_exponents.emplace("bk", 1.2420711085E+08);
473   nuclear_exponents.emplace("cf", 1.2301273547E+08);
474   nuclear_exponents.emplace("es", 1.2271879740E+08);
475   nuclear_exponents.emplace("fm", 1.2127611477E+08);
476   nuclear_exponents.emplace("md", 1.2099285491E+08);
477   nuclear_exponents.emplace("no", 1.2071131346E+08);
478   nuclear_exponents.emplace("lr", 1.1987683191E+08);
479   nuclear_exponents.emplace("db", 1.2015331850E+08);
480   nuclear_exponents.emplace("jl", 1.1987683191E+08);
481   nuclear_exponents.emplace("rf", 1.1960199758E+08);
482   nuclear_exponents.emplace("bh", 1.1987683191E+08);
483   nuclear_exponents.emplace("hn", 1.1905722195E+08);
484   nuclear_exponents.emplace("mt", 1.1878724932E+08);
485 
486   //Atomic masses taken from CRC Handbook of Chemistry and Physics
487   //average isotope mass
488   averaged_masses.emplace("q", 0.0);
489   averaged_masses.emplace("h", 1.00794);
490   averaged_masses.emplace("he", 4.00260);
491   averaged_masses.emplace("li", 6.941);
492   averaged_masses.emplace("be", 9.01218);
493   averaged_masses.emplace("b", 10.81);
494   averaged_masses.emplace("c", 12.011);
495   averaged_masses.emplace("n", 14.0067);
496   averaged_masses.emplace("o", 15.9994);
497   averaged_masses.emplace("f", 18.998403);
498   averaged_masses.emplace("ne", 20.179);
499   averaged_masses.emplace("na", 22.989877);
500   averaged_masses.emplace("mg", 24.305);
501   averaged_masses.emplace("al", 26.98154);
502   averaged_masses.emplace("si", 28.0955);
503   averaged_masses.emplace("p", 30.97376);
504   averaged_masses.emplace("s", 32.06);
505   averaged_masses.emplace("cl", 35.453);
506   averaged_masses.emplace("ar", 39.948);
507   averaged_masses.emplace("k", 39.0983);
508   averaged_masses.emplace("ca", 40.08);
509   averaged_masses.emplace("sc", 44.9559);
510   averaged_masses.emplace("ti", 47.88);
511   averaged_masses.emplace("v", 50.9415);
512   averaged_masses.emplace("cr", 51.996);
513   averaged_masses.emplace("mn", 54.9380);
514   averaged_masses.emplace("fe", 55.847);
515   averaged_masses.emplace("co", 58.9332);
516   averaged_masses.emplace("ni", 58.69);
517   averaged_masses.emplace("cu", 63.546);
518   averaged_masses.emplace("zn", 65.39);
519   averaged_masses.emplace("ga", 69.72);
520   averaged_masses.emplace("ge", 72.59);
521   averaged_masses.emplace("as", 74.9216);
522   averaged_masses.emplace("se", 78.96);
523   averaged_masses.emplace("br", 79.904);
524   averaged_masses.emplace("kr", 83.80);
525   averaged_masses.emplace("rb", 85.4678);
526   averaged_masses.emplace("sr", 87.62);
527   averaged_masses.emplace("y", 88.9059);
528   averaged_masses.emplace("zr", 91.22);
529   averaged_masses.emplace("nb", 92.9064);
530   averaged_masses.emplace("mo", 95.94);
531   averaged_masses.emplace("tc", 98.0);
532   averaged_masses.emplace("ru", 101.07);
533   averaged_masses.emplace("rh", 102.9055);
534   averaged_masses.emplace("pd", 106.42);
535   averaged_masses.emplace("ag", 107.8682);
536   averaged_masses.emplace("cd", 112.41);
537   averaged_masses.emplace("in", 114.82);
538   averaged_masses.emplace("sn", 118.69);
539   averaged_masses.emplace("sb", 121.75);
540   averaged_masses.emplace("te", 127.60);
541   averaged_masses.emplace("i", 126.9054);
542   averaged_masses.emplace("xe", 131.29);
543   averaged_masses.emplace("cs", 132.9054);
544   averaged_masses.emplace("ba", 137.33);
545   averaged_masses.emplace("la", 138.9055);
546   averaged_masses.emplace("ce", 140.12);
547   averaged_masses.emplace("pr", 140.9077);
548   averaged_masses.emplace("nd", 144.24);
549   averaged_masses.emplace("pm", 145.0);
550   averaged_masses.emplace("sm", 150.36);
551   averaged_masses.emplace("eu", 151.96);
552   averaged_masses.emplace("gd", 157.25);
553   averaged_masses.emplace("tb", 158.9254);
554   averaged_masses.emplace("dy", 162.5);
555   averaged_masses.emplace("ho", 164.9304);
556   averaged_masses.emplace("er", 167.26);
557   averaged_masses.emplace("tm", 168.9342);
558   averaged_masses.emplace("yb", 173.04);
559   averaged_masses.emplace("lu", 174.976);
560   averaged_masses.emplace("hf", 178.49);
561   averaged_masses.emplace("ta", 180.9479);
562   averaged_masses.emplace("w", 183.85);
563   averaged_masses.emplace("re", 186.207);
564   averaged_masses.emplace("os", 190.2);
565   averaged_masses.emplace("ir", 192.22);
566   averaged_masses.emplace("pt", 195.08);
567   averaged_masses.emplace("au", 196.9665);
568   averaged_masses.emplace("hg", 200.59);
569   averaged_masses.emplace("tl", 204.383);
570   averaged_masses.emplace("pb", 207.2);
571   averaged_masses.emplace("bi", 208.9804);
572   averaged_masses.emplace("po", 208.9825);
573   averaged_masses.emplace("at", 210.9875);
574   averaged_masses.emplace("rn", 222.0175);
575   averaged_masses.emplace("fr", 223.0198);
576   averaged_masses.emplace("ra", 226.0254);
577   averaged_masses.emplace("ac", 227.0278);
578   averaged_masses.emplace("th", 232.0381);
579   averaged_masses.emplace("pa", 231.0359);
580   averaged_masses.emplace("u", 238.0289);
581   averaged_masses.emplace("np", 237.0482);
582   averaged_masses.emplace("pu", 244.0);
583   averaged_masses.emplace("am", 243.0);
584   averaged_masses.emplace("cm", 247.0);
585 
586   angmap.emplace("s", 0);
587   angmap.emplace("p", 1);
588   angmap.emplace("d", 2);
589   angmap.emplace("f", 3);
590   angmap.emplace("g", 4);
591   angmap.emplace("h", 5);
592   angmap.emplace("i", 6);
593   angmap.emplace("j", 7);
594 // Since they are not implemented yet
595 //angmap.emplace("k", 8);
596 //angmap.emplace("l", 9);
597 
598   nclosed.emplace("h",  make_tuple(0,0,0,0));
599   nclosed.emplace("he", make_tuple(2,0,0,0));
600   nclosed.emplace("li", make_tuple(2,0,0,0));
601   nclosed.emplace("be", make_tuple(4,0,0,0));
602   nclosed.emplace("b",  make_tuple(4,0,0,0));
603   nclosed.emplace("c",  make_tuple(4,0,0,0));
604   nclosed.emplace("n",  make_tuple(4,0,0,0));
605   nclosed.emplace("o",  make_tuple(4,0,0,0));
606   nclosed.emplace("f",  make_tuple(4,0,0,0));
607   nclosed.emplace("ne", make_tuple(4,6,0,0));
608   nclosed.emplace("na", make_tuple(4,6,0,0));
609   nclosed.emplace("mg", make_tuple(6,6,0,0));
610   nclosed.emplace("al", make_tuple(6,6,0,0));
611   nclosed.emplace("si", make_tuple(6,6,0,0));
612   nclosed.emplace("p",  make_tuple(6,6,0,0));
613   nclosed.emplace("s",  make_tuple(6,6,0,0));
614   nclosed.emplace("cl", make_tuple(6,6,0,0));
615   nclosed.emplace("ar", make_tuple(6,12,0,0));
616   nclosed.emplace("k",  make_tuple(6,12,0,0));
617   nclosed.emplace("ca", make_tuple(8,12,0,0));
618   nclosed.emplace("sc", make_tuple(8,12,0,0));
619   nclosed.emplace("ti", make_tuple(8,12,0,0));
620   nclosed.emplace("v",  make_tuple(8,12,0,0));
621   nclosed.emplace("cr", make_tuple(8,12,0,0));
622   nclosed.emplace("mn", make_tuple(8,12,0,0));
623   nclosed.emplace("fe", make_tuple(8,12,0,0));
624   nclosed.emplace("co", make_tuple(8,12,0,0));
625   nclosed.emplace("ni", make_tuple(8,12,0,0));
626   nclosed.emplace("cu", make_tuple(8,12,0,0));
627   nclosed.emplace("zn", make_tuple(8,12,10,0));
628   nclosed.emplace("ga", make_tuple(8,12,10,0));
629   nclosed.emplace("ge", make_tuple(8,12,10,0));
630   nclosed.emplace("as", make_tuple(8,12,10,0));
631   nclosed.emplace("se", make_tuple(8,12,10,0));
632   nclosed.emplace("br", make_tuple(8,12,10,0));
633   nclosed.emplace("kr", make_tuple(8,18,10,0));
634   nclosed.emplace("rb", make_tuple(8,18,10,0));
635   nclosed.emplace("sr", make_tuple(10,18,10,0));
636   nclosed.emplace("y",  make_tuple(10,18,10,0));
637   nclosed.emplace("zr", make_tuple(10,18,10,0));
638   nclosed.emplace("nb", make_tuple(10,18,10,0));
639   nclosed.emplace("mo", make_tuple(10,18,10,0));
640   nclosed.emplace("tc", make_tuple(10,18,10,0));
641   nclosed.emplace("ru", make_tuple(10,18,10,0));
642   nclosed.emplace("rh", make_tuple(10,18,10,0));
643   nclosed.emplace("pd", make_tuple(10,18,10,0));
644   nclosed.emplace("ag", make_tuple(10,18,10,0));
645   nclosed.emplace("cd", make_tuple(10,18,20,0));
646   nclosed.emplace("in", make_tuple(10,18,20,0));
647   nclosed.emplace("sn", make_tuple(10,18,20,0));
648   nclosed.emplace("sb", make_tuple(10,18,20,0));
649   nclosed.emplace("te", make_tuple(10,18,20,0));
650   nclosed.emplace("i",  make_tuple(10,18,20,0));
651   nclosed.emplace("xe", make_tuple(10,24,20,0));
652   nclosed.emplace("cs", make_tuple(10,24,20,0));
653   nclosed.emplace("ba", make_tuple(12,24,20,0));
654   nclosed.emplace("la", make_tuple(12,24,20,0));
655   nclosed.emplace("ce", make_tuple(12,24,20,0));
656   nclosed.emplace("pr", make_tuple(12,24,20,0));
657   nclosed.emplace("nd", make_tuple(12,24,20,0));
658   nclosed.emplace("pm", make_tuple(12,24,20,0));
659   nclosed.emplace("sm", make_tuple(12,24,20,0));
660   nclosed.emplace("eu", make_tuple(12,24,20,0));
661   nclosed.emplace("gd", make_tuple(12,24,20,0));
662   nclosed.emplace("tb", make_tuple(12,24,20,0));
663   nclosed.emplace("dy", make_tuple(12,24,20,0));
664   nclosed.emplace("ho", make_tuple(12,24,20,0));
665   nclosed.emplace("er", make_tuple(12,24,20,0));
666   nclosed.emplace("tm", make_tuple(12,24,20,0));
667   nclosed.emplace("yb", make_tuple(12,24,20,14));
668   nclosed.emplace("lu", make_tuple(12,24,20,14));
669   nclosed.emplace("hf", make_tuple(12,24,20,14));
670   nclosed.emplace("ta", make_tuple(12,24,20,14));
671   nclosed.emplace("w",  make_tuple(12,24,20,14));
672   nclosed.emplace("re", make_tuple(12,24,20,14));
673   nclosed.emplace("os", make_tuple(12,24,20,14));
674   nclosed.emplace("ir", make_tuple(12,24,20,14));
675   nclosed.emplace("pt", make_tuple(10,24,20,14));
676   nclosed.emplace("au", make_tuple(10,24,30,14));
677   nclosed.emplace("hg", make_tuple(12,24,30,14));
678   nclosed.emplace("tl", make_tuple(12,24,30,14));
679   nclosed.emplace("pb", make_tuple(12,24,30,14));
680   nclosed.emplace("bi", make_tuple(12,24,30,14));
681   nclosed.emplace("po", make_tuple(12,24,30,14));
682   nclosed.emplace("at", make_tuple(12,24,30,14));
683   nclosed.emplace("rn", make_tuple(12,30,30,14));
684   nclosed.emplace("fr", make_tuple(12,30,30,14));
685   nclosed.emplace("ra", make_tuple(14,30,30,14));
686   nclosed.emplace("ac", make_tuple(14,30,30,14));
687   nclosed.emplace("th", make_tuple(14,30,30,14));
688   nclosed.emplace("pa", make_tuple(14,30,30,14));
689   nclosed.emplace("u",  make_tuple(14,30,30,14));
690   nclosed.emplace("np", make_tuple(14,30,30,14));
691   nclosed.emplace("pu", make_tuple(14,30,30,14));
692   nclosed.emplace("am", make_tuple(14,30,30,14));
693   nclosed.emplace("cm", make_tuple(14,30,30,14));
694   nclosed.emplace("bk", make_tuple(14,30,30,14));
695   nclosed.emplace("cf", make_tuple(14,30,30,14));
696   nclosed.emplace("es", make_tuple(14,30,30,14));
697   nclosed.emplace("fm", make_tuple(14,30,30,14));
698   nclosed.emplace("md", make_tuple(14,30,30,14));
699   nclosed.emplace("no", make_tuple(14,30,30,14));
700   nclosed.emplace("lr", make_tuple(14,30,30,28));
701   nclosed.emplace("rf", make_tuple(14,30,30,28));
702   nclosed.emplace("db", make_tuple(14,30,30,28));
703   nclosed.emplace("sg", make_tuple(14,30,30,28));
704   nclosed.emplace("bh", make_tuple(14,30,30,28));
705   nclosed.emplace("hs", make_tuple(14,30,30,28));
706   nclosed.emplace("mt", make_tuple(14,30,30,28));
707   nclosed.emplace("ds", make_tuple(14,30,30,28));
708   nclosed.emplace("rg", make_tuple(14,30,30,28));
709   nclosed.emplace("cn", make_tuple(14,30,40,28));
710   nclosed.emplace("uut", make_tuple(14,30,40,28));
711   nclosed.emplace("fl",  make_tuple(14,30,40,28));
712   nclosed.emplace("uup", make_tuple(14,30,40,28));
713   nclosed.emplace("lv",  make_tuple(14,30,40,28));
714   nclosed.emplace("uus", make_tuple(14,30,40,28));
715   nclosed.emplace("uuo", make_tuple(14,36,40,28));
716 
717   nopen.emplace("h",  make_tuple(1,0,0,0));
718   nopen.emplace("he", make_tuple(0,0,0,0));
719   nopen.emplace("li", make_tuple(1,0,0,0));
720   nopen.emplace("be", make_tuple(0,0,0,0));
721   nopen.emplace("b",  make_tuple(0,1,0,0));
722   nopen.emplace("c",  make_tuple(0,2,0,0));
723   nopen.emplace("n",  make_tuple(0,3,0,0));
724   nopen.emplace("o",  make_tuple(0,4,0,0));
725   nopen.emplace("f",  make_tuple(0,5,0,0));
726   nopen.emplace("ne", make_tuple(0,0,0,0));
727   nopen.emplace("na", make_tuple(1,0,0,0));
728   nopen.emplace("mg", make_tuple(0,0,0,0));
729   nopen.emplace("al", make_tuple(0,1,0,0));
730   nopen.emplace("si", make_tuple(0,2,0,0));
731   nopen.emplace("p",  make_tuple(0,3,0,0));
732   nopen.emplace("s",  make_tuple(0,4,0,0));
733   nopen.emplace("cl", make_tuple(0,5,0,0));
734   nopen.emplace("ar", make_tuple(0,0,0,0));
735   nopen.emplace("k",  make_tuple(1,0,0,0));
736   nopen.emplace("ca", make_tuple(0,0,0,0));
737   nopen.emplace("sc", make_tuple(0,0,1,0));
738   nopen.emplace("ti", make_tuple(0,0,2,0));
739   nopen.emplace("v",  make_tuple(0,0,3,0));
740   nopen.emplace("cr", make_tuple(0,0,4,0));
741   nopen.emplace("mn", make_tuple(0,0,5,0));
742   nopen.emplace("fe", make_tuple(0,0,6,0));
743   nopen.emplace("co", make_tuple(0,0,7,0));
744   nopen.emplace("ni", make_tuple(0,0,8,0));
745   nopen.emplace("cu", make_tuple(0,0,9,0));
746   nopen.emplace("zn", make_tuple(0,0,0,0));
747   nopen.emplace("ga", make_tuple(0,1,0,0));
748   nopen.emplace("ge", make_tuple(0,2,0,0));
749   nopen.emplace("as", make_tuple(0,3,0,0));
750   nopen.emplace("se", make_tuple(0,4,0,0));
751   nopen.emplace("br", make_tuple(0,5,0,0));
752   nopen.emplace("kr", make_tuple(0,0,0,0));
753   nopen.emplace("rb", make_tuple(1,0,0,0));
754   nopen.emplace("sr", make_tuple(0,0,0,0));
755   nopen.emplace("y",  make_tuple(0,0,1,0));
756   nopen.emplace("zr", make_tuple(0,0,2,0));
757   nopen.emplace("nb", make_tuple(0,0,3,0));
758   nopen.emplace("mo", make_tuple(0,0,4,0));
759   nopen.emplace("tc", make_tuple(0,0,5,0));
760   nopen.emplace("ru", make_tuple(0,0,6,0));
761   nopen.emplace("rh", make_tuple(0,0,7,0));
762   nopen.emplace("pd", make_tuple(0,0,8,0));
763   nopen.emplace("ag", make_tuple(0,0,9,0));
764   nopen.emplace("cd", make_tuple(0,0,0,0));
765   nopen.emplace("in", make_tuple(0,1,0,0));
766   nopen.emplace("sn", make_tuple(0,2,0,0));
767   nopen.emplace("sb", make_tuple(0,3,0,0));
768   nopen.emplace("te", make_tuple(0,4,0,0));
769   nopen.emplace("i",  make_tuple(0,5,0,0));
770   nopen.emplace("xe", make_tuple(0,0,0,0));
771   nopen.emplace("cs", make_tuple(1,0,0,0));
772   nopen.emplace("ba", make_tuple(0,0,0,0));
773   nopen.emplace("la", make_tuple(0,0,1,0));
774   nopen.emplace("ce", make_tuple(0,0,1,1));
775   nopen.emplace("pr", make_tuple(0,0,0,3));
776   nopen.emplace("nd", make_tuple(0,0,0,4));
777   nopen.emplace("pm", make_tuple(0,0,0,5));
778   nopen.emplace("sm", make_tuple(0,0,0,6));
779   nopen.emplace("eu", make_tuple(0,0,0,7));
780   nopen.emplace("gd", make_tuple(0,0,1,7));
781   nopen.emplace("tb", make_tuple(0,0,0,9));
782   nopen.emplace("dy", make_tuple(0,0,0,10));
783   nopen.emplace("ho", make_tuple(0,0,0,11));
784   nopen.emplace("er", make_tuple(0,0,0,12));
785   nopen.emplace("tm", make_tuple(0,0,0,13));
786   nopen.emplace("yb", make_tuple(0,0,0,0));
787   nopen.emplace("lu", make_tuple(0,0,1,0));
788   nopen.emplace("hf", make_tuple(0,0,2,0));
789   nopen.emplace("ta", make_tuple(0,0,3,0));
790   nopen.emplace("w",  make_tuple(0,0,4,0));
791   nopen.emplace("re", make_tuple(0,0,5,0));
792   nopen.emplace("os", make_tuple(0,0,6,0));
793   nopen.emplace("ir", make_tuple(0,0,7,0));
794   nopen.emplace("pt", make_tuple(1,0,9,0));
795   nopen.emplace("au", make_tuple(1,0,0,0));
796   nopen.emplace("hg", make_tuple(0,0,0,0));
797   nopen.emplace("tl", make_tuple(0,1,0,0));
798   nopen.emplace("pb", make_tuple(0,2,0,0));
799   nopen.emplace("bi", make_tuple(0,3,0,0));
800   nopen.emplace("po", make_tuple(0,4,0,0));
801   nopen.emplace("at", make_tuple(0,5,0,0));
802   nopen.emplace("rn", make_tuple(0,0,0,0));
803   nopen.emplace("fr", make_tuple(1,0,0,0));
804   nopen.emplace("ra", make_tuple(0,0,0,0));
805   nopen.emplace("ac", make_tuple(0,0,1,0));
806   nopen.emplace("th", make_tuple(0,0,2,0));
807   nopen.emplace("pa", make_tuple(0,0,1,2));
808   nopen.emplace("u",  make_tuple(0,0,1,3));
809   nopen.emplace("np", make_tuple(0,0,1,4));
810   nopen.emplace("pu", make_tuple(0,0,0,6));
811   nopen.emplace("am", make_tuple(0,0,0,7));
812   nopen.emplace("cm", make_tuple(0,0,1,7));
813   nopen.emplace("bk", make_tuple(0,0,0,9));
814   nopen.emplace("cf", make_tuple(0,0,0,10));
815   nopen.emplace("es", make_tuple(0,0,0,11));
816   nopen.emplace("fm", make_tuple(0,0,0,12));
817   nopen.emplace("md", make_tuple(0,0,0,13));
818   nopen.emplace("no", make_tuple(0,0,0,0));
819   nopen.emplace("lr", make_tuple(0,1,0,0));
820   nopen.emplace("rf", make_tuple(0,0,2,0));
821   nopen.emplace("db", make_tuple(0,0,3,0));
822   nopen.emplace("sg", make_tuple(0,0,4,0));
823   nopen.emplace("bh", make_tuple(0,0,5,0));
824   nopen.emplace("hs", make_tuple(0,0,6,0));
825   nopen.emplace("mt", make_tuple(0,0,7,0));
826   nopen.emplace("ds", make_tuple(0,0,8,0));
827   nopen.emplace("rg", make_tuple(0,0,9,0));
828   nopen.emplace("cn", make_tuple(0,0,0,0));
829   nopen.emplace("uut", make_tuple(0,1,0,0));
830   nopen.emplace("fl",  make_tuple(0,2,0,0));
831   nopen.emplace("uup", make_tuple(0,3,0,0));
832   nopen.emplace("lv",  make_tuple(0,4,0,0));
833   nopen.emplace("uus", make_tuple(0,5,0,0));
834   nopen.emplace("uuo", make_tuple(0,0,0,0));
835 
836   // P in the hyperfine coupling formula, copied from Takeshi's ORZ package
837   // which in turn originates from Orca's output according to Takeshi
838   // P = g_e * g_N * beta_e * beta_N :
839   //   g_e = 2.000... (g factor of free electron)
840   //   g_N = g factor of nucleus
841   //   beta_e = electron magneton = alpha(fine structure constant) / 2.0
842   //   beta_N = nuclear magneton
843   hfccp.emplace("h",   533.5514);
844   hfccp.emplace("he",    0.0000);
845   hfccp.emplace("li",  207.3726);
846   hfccp.emplace("be",    0.0000);
847   hfccp.emplace("b",   171.2143);
848   hfccp.emplace("c",   134.1900);
849   hfccp.emplace("n",    38.5677);
850   hfccp.emplace("o",   -72.3588);
851   hfccp.emplace("f",   502.2244);
852   hfccp.emplace("ne",    0.0000);
853   hfccp.emplace("na",  141.2175);
854   hfccp.emplace("mg",    0.0000);
855   hfccp.emplace("al",  139.1361);
856   hfccp.emplace("si",    0.0000);
857   hfccp.emplace("p",   216.1834);
858   hfccp.emplace("s",     0.0000);
859   hfccp.emplace("cl",    0.0000);
860   hfccp.emplace("ar",    0.0000);
861   hfccp.emplace("k",    24.9301);
862   hfccp.emplace("ca",    0.0000);
863   hfccp.emplace("sc",    0.0000);
864   hfccp.emplace("ti",  -30.1264);
865   hfccp.emplace("v",   140.2594);
866   hfccp.emplace("cr",  -30.0605);
867   hfccp.emplace("mn",  132.0006);
868   hfccp.emplace("fe",    0.0000);
869   hfccp.emplace("co",    0.0000);
870   hfccp.emplace("ni",    0.0000);
871   hfccp.emplace("cu",  141.7533);
872   hfccp.emplace("zn",   33.4622);
873   hfccp.emplace("ga",    0.0000);
874   hfccp.emplace("ge",    0.0000);
875   hfccp.emplace("as",    0.0000);
876   hfccp.emplace("se",    0.0000);
877   hfccp.emplace("br",    0.0000);
878   hfccp.emplace("kr",    0.0000);
879 //hfccp.emplace("rb",    0.0000);
880 //hfccp.emplace("sr",    0.0000);
881 //hfccp.emplace("y",     0.0000);
882 //hfccp.emplace("zr",    0.0000);
883 //hfccp.emplace("nb",    0.0000);
884 //hfccp.emplace("mo",    0.0000);
885 //hfccp.emplace("tc",    0.0000);
886 //hfccp.emplace("ru",    0.0000);
887   hfccp.emplace("rh",   -16.8881);
888   hfccp.emplace("pd",   -24.4534);
889   hfccp.emplace("ag",   -21.7071);
890   hfccp.emplace("cd",  -113.7112);
891 //hfccp.emplace("in",    0.0000);
892 //hfccp.emplace("sn",    0.0000);
893 //hfccp.emplace("sb",    0.0000);
894 //hfccp.emplace("te",    0.0000);
895 //hfccp.emplace("i",     0.0000);
896 //hfccp.emplace("xe",    0.0000);
897 //hfccp.emplace("cs",    0.0000);
898 //hfccp.emplace("ba",    0.0000);
899 //hfccp.emplace("la",    0.0000);
900 //hfccp.emplace("ce",    0.0000);
901 //hfccp.emplace("pr",    0.0000);
902 //hfccp.emplace("nd",    0.0000);
903 //hfccp.emplace("pm",    0.0000);
904 //hfccp.emplace("sm",    0.0000);
905 //hfccp.emplace("eu",    0.0000);
906 //hfccp.emplace("gd",    0.0000);
907 //hfccp.emplace("tb",    0.0000);
908 //hfccp.emplace("dy",    0.0000);
909 //hfccp.emplace("ho",    0.0000);
910 //hfccp.emplace("er",    0.0000);
911 //hfccp.emplace("tm",    0.0000);
912 //hfccp.emplace("yb",    0.0000);
913 //hfccp.emplace("lu",    0.0000);
914 //hfccp.emplace("hf",    0.0000);
915 //hfccp.emplace("ta",    0.0000);
916 //hfccp.emplace("w",     0.0000);
917 //hfccp.emplace("re",    0.0000);
918 //hfccp.emplace("os",    0.0000);
919 //hfccp.emplace("ir",    0.0000);
920 //hfccp.emplace("pt",    0.0000);
921   hfccp.emplace("au",    9.3580);
922 //hfccp.emplace("hg",    0.0000);
923 //hfccp.emplace("tl",    0.0000);
924 //hfccp.emplace("pb",    0.0000);
925 //hfccp.emplace("bi",    0.0000);
926 //hfccp.emplace("po",    0.0000);
927 //hfccp.emplace("at",    0.0000);
928 //hfccp.emplace("rn",    0.0000);
929 //hfccp.emplace("fr",    0.0000);
930 //hfccp.emplace("ra",    0.0000);
931 //hfccp.emplace("ac",    0.0000);
932 //hfccp.emplace("th",    0.0000);
933 //hfccp.emplace("pa",    0.0000);
934 //hfccp.emplace("u",     0.0000);
935 //hfccp.emplace("np",    0.0000);
936 //hfccp.emplace("pu",    0.0000);
937 //hfccp.emplace("am",    0.0000);
938 //hfccp.emplace("cm",    0.0000);
939 //hfccp.emplace("bk",    0.0000);
940 //hfccp.emplace("cf",    0.0000);
941 //hfccp.emplace("es",    0.0000);
942 //hfccp.emplace("fm",    0.0000);
943 //hfccp.emplace("md",    0.0000);
944 //hfccp.emplace("no",    0.0000);
945 //hfccp.emplace("lr",    0.0000);
946 //hfccp.emplace("rf",    0.0000);
947 
948 }
949 
angular_number(const string input) const950 int AtomMap::angular_number(const string input) const {
951   auto miter = angmap.find(input);
952   stringstream ss; ss << "Unknown angular number in a basis set file. Requested: " << input << endl;
953   if (miter == angmap.end()) throw runtime_error(ss.str());
954 #ifndef COMPILE_J_ORB
955   if (input == "j")
956     throw runtime_error("j-orbitals requested in a basis set file.  BAGEL must be compiled with the -DCOMPILE_J_ORB flag to use this.");
957 #endif
958   return miter->second;
959 }
960 
961 
radius(const string input) const962 double AtomMap::radius(const string input) const {
963   auto miter = bsradii.find(input);
964   if (miter == bsradii.end()) throw runtime_error("Unknown atom (Bragg-Slater radii).");
965   return miter->second/au2angstrom__;
966 }
967 
968 
cov_radius(const string input) const969 double AtomMap::cov_radius(const string input) const {
970   auto miter = cov_radii.find(input);
971   if (miter == cov_radii.end()) throw runtime_error("Unknown atom (Covalent radii).");
972   return miter->second/au2angstrom__;
973 }
974 
975 
nuclear_exponent(const string input) const976 double AtomMap::nuclear_exponent(const string input) const {
977   auto miter = nuclear_exponents.find(input);
978   if (miter == nuclear_exponents.end()) throw runtime_error("Unknown atom (Finite nucleus exponent).");
979   return miter->second;
980 }
981 
averaged_mass(const string input) const982 double AtomMap::averaged_mass(const string input) const {
983   auto miter = averaged_masses.find(input);
984   if (miter == averaged_masses.end()) throw runtime_error("Unknown atom (Averaged atomic mass).");
985   return miter->second;
986 }
987 
num_closed(const string input) const988 tuple<int,int,int,int> AtomMap::num_closed(const string input) const {
989   auto miter = nclosed.find(input);
990   if (miter == nclosed.end()) throw runtime_error("Unknown atom (#closed shell).");
991   return miter->second;
992 }
993 
994 
num_open(const string input) const995 tuple<int,int,int,int> AtomMap::num_open(const string input) const {
996   auto miter = nopen.find(input);
997   if (miter == nopen.end()) throw runtime_error("Unknown atom (#open shell).");
998   return miter->second;
999 }
1000 
1001 
hfcc_exists(const string input) const1002 bool AtomMap::hfcc_exists(const string input) const {
1003   return hfccp.find(input) != hfccp.end();
1004 }
1005 
1006 
hfcc_pfac(const string input) const1007 double AtomMap::hfcc_pfac(const string input) const {
1008   auto miter = hfccp.find(input);
1009   if (miter == hfccp.end()) throw runtime_error("Unknown atom (HPCC P factor).");
1010   return miter->second;
1011 }
1012 
1013 
atom_number(const string input) const1014 int AtomMap::atom_number(const string input) const {
1015   auto miter = atommap.find(input);
1016   stringstream ss; ss << "Unknown Atom number in a basis set file. Requested: " << input << endl;
1017   if (miter == atommap.end()) throw runtime_error(ss.str());
1018   return miter->second;
1019 }
1020 
angular_string(const int input)1021 const string AtomMap::angular_string(const int input) {
1022   for(auto& m : angmap) {
1023     if(m.second == input) { return m.first; }
1024   }
1025   return "X";
1026 }
1027