rustms/chemistry/
element.rs

1use std::collections::HashMap;
2
3/// Atomic Weights
4///
5/// # Arguments
6///
7/// None
8///
9/// # Returns
10///
11/// * `HashMap<&'static str, f64>` - a map of atomic symbols to their monoisotopic weights
12///
13/// # Example
14///
15/// ```
16/// use rustms::chemistry::element::atomic_weights_mono_isotopic;
17///
18/// let atomic_weights = atomic_weights_mono_isotopic();
19/// assert_eq!(atomic_weights.get("H"), Some(&1.00782503223));
20/// ```
21pub fn atomic_weights_mono_isotopic() -> HashMap<&'static str, f64> {
22    let mut map = HashMap::new();
23    map.insert("H", 1.00782503223);
24    map.insert("He", 4.00260325415);
25    map.insert("Li", 7.0160034366);
26    map.insert("Be", 9.012183065);
27    map.insert("B", 11.00930536);
28    map.insert("C", 12.0000000);
29    map.insert("N", 14.00307400443);
30    map.insert("O", 15.99491461957);
31    map.insert("F", 18.99840316273);
32    map.insert("Ne", 19.9924401762);
33    map.insert("Na", 22.9897692820);
34    map.insert("Mg", 23.985041697);
35    map.insert("Al", 26.98153853);
36    map.insert("Si", 27.97692653465);
37    map.insert("P", 30.97376199842);
38    map.insert("S", 31.9720711744);
39    map.insert("Cl", 34.968852682);
40    map.insert("Ar", 39.9623831237);
41    map.insert("K", 38.963706679);
42    map.insert("Ca", 39.96259098);
43    map.insert("Sc", 44.95590828);
44    map.insert("Ti", 47.9479463);
45    map.insert("V", 50.9439595);
46    map.insert("Cr", 51.9405075);
47    map.insert("Mn", 54.9380455);
48    map.insert("Fe", 55.9349375);
49    map.insert("Co", 58.9331955);
50    map.insert("Ni", 57.9353429);
51    map.insert("Cu", 62.9295975);
52    map.insert("Zn", 63.9291422);
53    map.insert("Ga", 68.9255735);
54    map.insert("Ge", 73.9211778);
55    map.insert("As", 74.9215965);
56    map.insert("Se", 79.9165218);
57    map.insert("Br", 78.9183376);
58    map.insert("Kr", 83.911507);
59    map.insert("Rb", 84.9117893);
60    map.insert("Sr", 87.9056125);
61    map.insert("Y", 88.905842);
62    map.insert("Zr", 89.9046977);
63    map.insert("Nb", 92.906373);
64    map.insert("Mo", 97.905404);
65    map.insert("Tc", 98.0);
66    map.insert("Ru", 101.904349);
67    map.insert("Rh", 102.905504);
68    map.insert("Pd", 105.903485);
69    map.insert("Ag", 106.905093);
70    map.insert("Cd", 113.903358);
71    map.insert("In", 114.903878);
72    map.insert("Sn", 119.902199);
73    map.insert("Sb", 120.903818);
74    map.insert("Te", 129.906224);
75    map.insert("I", 126.904473);
76    map.insert("Xe", 131.904155);
77    map.insert("Cs", 132.905447);
78    map.insert("Ba", 137.905247);
79    map.insert("La", 138.906355);
80    map.insert("Ce", 139.905442);
81    map.insert("Pr", 140.907662);
82    map.insert("Nd", 141.907732);
83    map.insert("Pm", 145.0);
84    map.insert("Sm", 151.919728);
85    map.insert("Eu", 152.921225);
86    map.insert("Gd", 157.924103);
87    map.insert("Tb", 158.925346);
88    map.insert("Dy", 163.929171);
89    map.insert("Ho", 164.930319);
90    map.insert("Er", 165.930290);
91    map.insert("Tm", 168.934211);
92    map.insert("Yb", 173.938859);
93    map.insert("Lu", 174.940770);
94    map.insert("Hf", 179.946550);
95    map.insert("Ta", 180.947992);
96    map.insert("W", 183.950932);
97    map.insert("Re", 186.955744);
98    map.insert("Os", 191.961467);
99    map.insert("Ir", 192.962917);
100    map.insert("Pt", 194.964766);
101    map.insert("Au", 196.966543);
102    map.insert("Hg", 201.970617);
103    map.insert("Tl", 204.974427);
104    map.insert("Pb", 207.976627);
105    map.insert("Bi", 208.980384);
106    map.insert("Po", 209.0);
107    map.insert("At", 210.0);
108    map.insert("Rn", 222.0);
109    map.insert("Fr", 223.0);
110    map.insert("Ra", 226.0);
111    map.insert("Ac", 227.0);
112    map.insert("Th", 232.038054);
113    map.insert("Pa", 231.035882);
114    map.insert("U", 238.050786);
115    map.insert("Np", 237.0);
116    map.insert("Pu", 244.0);
117    map.insert("Am", 243.0);
118    map.insert("Cm", 247.0);
119    map.insert("Bk", 247.0);
120    map.insert("Cf", 251.0);
121    map.insert("Es", 252.0);
122    map.insert("Fm", 257.0);
123    map.insert("Md", 258.0);
124    map.insert("No", 259.0);
125    map.insert("Lr", 262.0);
126    map.insert("Rf", 267.0);
127    map.insert("Db", 270.0);
128    map.insert("Sg", 271.0);
129    map.insert("Bh", 270.0);
130    map.insert("Hs", 277.0);
131    map.insert("Mt", 276.0);
132    map.insert("Ds", 281.0);
133    map.insert("Rg", 280.0);
134    map.insert("Cn", 285.0);
135    map.insert("Nh", 284.0);
136    map.insert("Fl", 289.0);
137    map.insert("Mc", 288.0);
138    map.insert("Lv", 293.0);
139    map.insert("Ts", 294.0);
140    map.insert("Og", 294.0);
141
142    map
143}
144
145/// Isotopic Weights
146///
147/// # Arguments
148///
149/// None
150///
151/// # Returns
152///
153/// * `HashMap<&'static str, Vec<f64>>` - a map of atomic symbols to their isotopic weights
154///
155/// # Example
156///
157/// ```
158/// use rustms::chemistry::element::atoms_isotopic_weights;
159///
160/// let isotopic_weights = atoms_isotopic_weights();
161/// assert_eq!(isotopic_weights.get("H"), Some(&vec![1.00782503223, 2.01410177812]));
162/// ```
163pub fn atoms_isotopic_weights() -> HashMap<&'static str, Vec<f64>> {
164    let mut map = HashMap::new();
165    map.insert("H", vec![1.00782503223, 2.01410177812]);
166    map.insert("He", vec![4.00260325415]);
167    map.insert("Li", vec![7.0160034366]);
168    map.insert("Be", vec![9.012183065]);
169    map.insert("B", vec![11.00930536]);
170    map.insert("C", vec![12.0000000, 13.00335483507]);
171    map.insert("N", vec![14.00307400443, 15.00010889888]);
172    map.insert("O", vec![15.99491461957, 16.99913175650, 17.99915961286]);
173    map.insert("F", vec![18.99840316273]);
174    map.insert("Ne", vec![19.9924401762]);
175    map.insert("Na", vec![22.9897692820]);
176    map.insert("Mg", vec![23.985041697]);
177    map.insert("Al", vec![26.98153853]);
178    map.insert("Si", vec![27.97692653465]);
179    map.insert("P", vec![30.97376199842]);
180    map.insert("S", vec![31.9720711744, 32.9714589098, 33.967867004]);
181    map.insert("Cl", vec![34.968852682, 36.965902602]);
182    map.insert("Ar", vec![39.9623831237, 35.967545105]);
183    map.insert("K", vec![38.963706679, 39.963998166, 40.961825257]);
184    map.insert("Ca", vec![39.96259098, 41.95861783, 42.95876644, 43.95548156, 45.95369276]);
185    map.insert("Sc", vec![44.95590828]);
186    map.insert("Ti", vec![47.9479463, 45.95262772, 46.95175879, 47.94794198, 49.9447912]);
187    map.insert("V", vec![50.9439595]);
188    map.insert("Cr", vec![51.9405075, 49.94604183, 50.9439637, 51.94050623, 53.93887916]);
189    map.insert("Mn", vec![54.9380455]);
190    map.insert("Fe", vec![55.9349375, 53.93960899, 54.93804514, 55.93493739, 56.93539400, 57.93327443]);
191    map.insert("Co", vec![58.9331955]);
192    map.insert("Ni", vec![57.9353429, 58.9343467, 59.93078588, 60.93105557, 61.92834537, 63.92796682]);
193    map.insert("Cu", vec![62.9295975, 61.92834537, 63.92914201]);
194    map.insert("Zn", vec![63.9291422, 65.92603381, 66.92712775, 67.92484455, 69.9253192]);
195    map.insert("Ga", vec![68.9255735]);
196    map.insert("Ge", vec![73.9211778, 71.922075826, 72.923458956, 73.921177761, 75.921402726]);
197    map.insert("As", vec![74.9215965]);
198    map.insert("Se", vec![79.9165218, 73.9224764, 75.9192136, 76.9199140, 77.9173095, 79.9165218, 81.9166995]);
199
200    map
201}
202
203/// Isotopic Abundance
204///
205/// # Arguments
206///
207/// None
208///
209/// # Returns
210///
211/// * `HashMap<&'static str, Vec<f64>>` - a map of atomic symbols to their isotopic abundances
212///
213/// # Example
214///
215/// ```
216/// use rustms::chemistry::element::isotopic_abundance;
217///
218/// let isotopic_abundance = isotopic_abundance();
219/// assert_eq!(isotopic_abundance.get("H"), Some(&vec![0.999885, 0.000115]));
220/// ```
221pub fn isotopic_abundance() -> HashMap<&'static str, Vec<f64>> {
222
223    let mut map = HashMap::new();
224
225    map.insert("H", vec![0.999885, 0.000115]);
226    map.insert("He", vec![0.99999866, 0.00000134]);
227    map.insert("Li", vec![0.0759, 0.9241]);
228    map.insert("Be", vec![1.0]);
229    map.insert("B", vec![0.199, 0.801]);
230    map.insert("C", vec![0.9893, 0.0107]);
231    map.insert("N", vec![0.99632, 0.00368]);
232    map.insert("O", vec![0.99757, 0.00038, 0.00205]);
233    map.insert("F", vec![1.0]);
234    map.insert("Ne", vec![0.9048, 0.0027, 0.0925]);
235    map.insert("Na", vec![0.5429, 0.4571]);
236    map.insert("Mg", vec![0.7899, 0.1000, 0.1101]);
237    map.insert("Al", vec![1.0]);
238    map.insert("Si", vec![0.9223, 0.0467, 0.0310]);
239    map.insert("P", vec![1.0]);
240    map.insert("S", vec![0.9493, 0.0076, 0.0429]);
241    map.insert("Cl", vec![0.7578, 0.2422]);
242    map.insert("Ar", vec![0.003365, 0.000632, 0.996003]);
243    map.insert("K", vec![0.932581, 0.000117, 0.067302]);
244    map.insert("Ca", vec![0.96941, 0.00647, 0.00135, 0.02086, 0.00187]);
245    map.insert("Sc", vec![1.0]);
246    map.insert("Ti", vec![0.0825, 0.0744, 0.7372, 0.0541, 0.0518]);
247    map.insert("V", vec![0.9975, 0.0025]);
248    map.insert("Cr", vec![0.04345, 0.83789, 0.09501, 0.02365, 0.0001]);
249    map.insert("Mn", vec![1.0]);
250    map.insert("Fe", vec![0.05845, 0.91754, 0.02119, 0.00282, 0.0002]);
251    map.insert("Co", vec![1.0]);
252    map.insert("Ni", vec![0.680769, 0.262231, 0.011399, 0.036345, 0.009256, 0.0011]);
253    map.insert("Cu", vec![0.6915, 0.3085]);
254    map.insert("Zn", vec![0.4917, 0.2773, 0.0404, 0.1845, 0.0061]);
255    map.insert("Ga", vec![0.60108, 0.39892]);
256    map.insert("Ge", vec![0.2052, 0.2745, 0.0775, 0.3652, 0.0775]);
257    map.insert("As", vec![1.0]);
258    map.insert("Se", vec![0.0089, 0.0937, 0.0763, 0.2377, 0.4961, 0.0873]);
259
260    map
261}