Allow ions instead of atoms in CIF files
Is your feature request related to a problem? Please describe.
In some CIF files, atoms are given by their ionic names (e.g. Fe2+ instead of Fe). This is (sometimes) the case for generated files from The Materials Project. This actually results in failure of get_element_id_from_string().
Describe the solution you'd like A simple regexp to automatically trim the atom names.
Describe alternatives you've considered The user can edit the CIF file to remove the exponents.
@DorianDepriester I think ions result in slightly different atomic scattering factors.
I got fairly far on adding them but just never did. If this is something you are interested in I can prioritize this!
From my point of view, it would indeed be an interesting feature 😉
From my point of view, it would indeed be an interesting feature 😉
I'll see if I can make the PR later this week and we can think about making a new release!
@hakonanes @viljarjf
Any idea if there is anything to this other than adding to ionic scattering cross sections?
I think this is a pretty full list
import numpy as np
IONS = [
"h1-",
"li1+",
"be2+",
"o1-",
"o2-",
"f1-",
"na1+",
"mg2+",
"al3+",
"si4+",
"cl1-",
"k1+",
"ca2+",
"sc3+",
"ti2+",
"ti3+",
"t14+",
"v2+",
"v3+",
"v5+",
"cr2+",
"cr3+",
"cr4+",
"mn2+",
"mn3+",
"mn4+",
"fe2+",
"fe3+",
"co2+",
"co3+",
"ni2+",
"ni3+",
"cu1+",
"cu2+",
"zn2+",
"ga3+",
"ge4+",
"br1-",
"br1+",
"sr2+",
"y3+",
"zr4+",
"nb3+",
"nb5+",
"mo3+",
"mo5+",
"mo6+",
"ru3+",
"ru4+",
"rh3+",
"rh4+",
"pd2+",
"pd4+",
"ag1+",
"ag2+",
"cd2+",
"in3+",
"sn2+",
"sn4+",
"sb3+",
"sb5+",
"i1-",
"cs1+",
"ba2+",
"la3+",
"ce3+",
"ce4+",
"pr3+",
"pr4+",
"nd3+",
"pm3+",
"sm3+",
"eu2+",
"eu3+",
"gd3+",
"tb3+",
"dy3+",
"ho3+",
"er3+",
"tm3+",
"yb2+",
"yb3+",
"lu3+",
"hf4+",
"ta5+",
"w6+",
"os4+",
"ir3+",
"ir4+",
"pt2+",
"pt4+",
"au1+",
"au3+",
"hg1+",
"hg2+",
"tl1+",
"tl3+",
"pb2+",
"pb4+",
"bi3+",
"bi5+",
"ra2+",
"ac3+",
"u3+",
"u4+",
"u6+",
]
ATOMIC_SCATTERING_PARAMETERS_PENG_IONS = np.array(
[
[
1,
0.140e0,
0.649e0,
0.137e1,
0.337e0,
0.787e0,
0.984e0,
0.867e1,
0.389e2,
0.111e3,
0.166e3,
0.046,
],
[
3,
0.460e-2,
0.165e-1,
0.435e-1,
0.649e-1,
0.270e-1,
0.358e-1,
0.239e0,
0.879e0,
0.264e1,
0.709e1,
0.031,
],
[
4,
0.340e-2,
0.103e-1,
0.233e-1,
0.325e-1,
0.120e-1,
0.267e-1,
0.162e0,
0.531e0,
0.148e1,
0.388e1,
0.022,
],
[
8,
0.205e0,
0.628e0,
0.117e1,
0.103e1,
0.290e0,
0.397e0,
0.264e1,
0.880e1,
0.271e2,
0.918e2,
0.012,
],
[
8,
0.421e-1,
0.210e0,
0.852e0,
0.182e1,
0.117e1,
0.609e-1,
0.559e0,
0.296e1,
0.115e2,
0.377e2,
0.037,
],
[
9,
0.134e0,
0.391e0,
0.814e0,
0.928e0,
0.347e0,
0.228e0,
0.147e1,
0.468e1,
0.132e2,
0.360e2,
0.013,
],
[
11,
0.256e-1,
0.919e-1,
0.297e0,
0.514e0,
0.199e0,
0.397e-1,
0.287e0,
0.118e1,
0.375e1,
0.108e2,
0.018,
],
[
12,
0.210e-1,
0.672e-1,
0.198e0,
0.368e0,
0.174e0,
0.331e-1,
0.222e0,
0.838e0,
0.248e1,
0.675e1,
0.019,
],
[
13,
0.192e-1,
0.579e-1,
0.163e0,
0.284e0,
0.114e0,
0.306e-1,
0.198e0,
0.713e0,
0.204e1,
0.525e1,
0.029,
],
[
14,
0.192e0,
0.289e0,
0.100e0,
-0.728e-1,
0.120e-2,
0.359e0,
0.196e1,
0.934e1,
0.111e2,
0.134e2,
0.055,
],
[
17,
0.265e0,
0.596e0,
0.160e1,
0.269e1,
0.123e1,
0.252e0,
0.156e1,
0.621e1,
0.178e2,
0.478e2,
0.010,
],
[
19,
0.199e0,
0.396e0,
0.928e0,
0.145e1,
0.450e0,
0.192e0,
0.110e1,
0.391e1,
0.975e1,
0.234e2,
0.013,
],
[
20,
0.164e0,
0.327e0,
0.743e0,
0.116e1,
0.307e0,
0.157e0,
0.894e0,
0.315e1,
0.767e1,
0.177e2,
0.013,
],
[
21,
0.163e0,
0.307e0,
0.716e0,
0.880e0,
0.139e0,
0.157e0,
0.899e0,
0.306e1,
0.705e1,
0.161e2,
0.013,
],
[
22,
0.399e0,
0.104e1,
0.121e1,
-0.797e-1,
0.352e0,
0.376e0,
0.274e1,
0.810e1,
0.142e2,
0.232e2,
0.009,
],
[
22,
0.364e0,
0.919e0,
0.135e1,
-0.933e0,
0.589e0,
0.364e0,
0.267e1,
0.818e1,
0.118e2,
0.149e2,
0.013,
],
[
22,
0.116e0,
0.256e0,
0.565e0,
0.772e0,
0.132e0,
0.108e0,
0.655e0,
0.238e1,
0.551e1,
0.123e2,
0.015,
],
[
23,
0.317e0,
0.939e0,
0.149e1,
-0.131e1,
0.147e1,
0.269e0,
0.209e1,
0.722e1,
0.152e2,
0.176e2,
0.009,
],
[
23,
0.341e0,
0.805e0,
0.942e0,
0.783e-1,
0.156e0,
0.321e0,
0.223e1,
0.599e1,
0.134e2,
0.169e2,
0.020,
],
[
23,
0.367e-1,
0.124e0,
0.244e0,
0.723e0,
0.435e0,
0.330e-1,
0.222e0,
0.824e0,
0.280e1,
0.670e1,
0.017,
],
[
24,
0.237e0,
0.634e0,
0.123e1,
0.713e0,
0.859e-1,
0.177e0,
0.135e1,
0.430e1,
0.122e2,
0.390e2,
0.011,
],
[
24,
0.393e0,
0.105e1,
0.162e1,
-0.115e1,
0.407e0,
0.359e0,
0.257e1,
0.868e1,
0.110e2,
0.158e2,
0.011,
],
[
24,
0.132e0,
0.292e0,
0.703e0,
0.692e0,
0.959e-1,
0.109e0,
0.695e0,
0.239e1,
0.565e1,
0.147e2,
0.013,
],
[
25,
0.576e-1,
0.210e0,
0.604e0,
0.132e1,
0.659e0,
0.398e-1,
0.284e0,
0.129e1,
0.423e1,
0.145e2,
0.034,
],
[
25,
0.116e0,
0.523e0,
0.881e0,
0.589e0,
0.214e0,
0.117e-1,
0.876e0,
0.306e1,
0.644e1,
0.143e2,
0.009,
],
[
25,
0.381e0,
0.183e1,
-0.133e1,
0.995e0,
0.618e-1,
0.354e0,
0.272e1,
0.347e1,
0.547e1,
0.161e2,
0.017,
],
[
26,
0.307e0,
0.838e0,
0.111e1,
0.280e0,
0.277e0,
0.230e0,
0.162e1,
0.487e1,
0.107e2,
0.192e2,
0.016,
],
[
26,
0.198e0,
0.387e0,
0.889e0,
0.709e0,
0.117e0,
0.154e0,
0.893e0,
0.262e1,
0.665e1,
0.180e2,
0.012,
],
[
27,
0.213e0,
0.488e0,
0.998e0,
0.828e0,
0.230e0,
0.148e0,
0.939e0,
0.278e1,
0.731e1,
0.207e2,
0.016,
],
[
27,
0.331e0,
0.487e0,
0.729e0,
0.608e0,
0.131e0,
0.267e0,
0.141e1,
0.289e1,
0.645e1,
0.158e2,
0.010,
],
[
28,
0.338e0,
0.982e0,
0.132 + 1,
-0.356e1,
0.362e1,
0.237e0,
0.167e1,
0.573e1,
0.114e2,
0.121e2,
0.018,
],
[
28,
0.347e0,
0.877e0,
0.790e0,
0.538e-1,
0.192e0,
0.260e0,
0.171e1,
0.475e1,
0.751e1,
0.130e2,
0.011,
],
[
29,
0.312e0,
0.812e0,
0.111e1,
0.794e0,
0.257e0,
0.201e0,
0.131e1,
0.380e1,
0.105e2,
0.282e2,
0.003,
],
[
29,
0.224e0,
0.544e0,
0.970e0,
0.727e0,
0.182e0,
0.145e0,
0.933e0,
0.269e1,
0.711e1,
0.194e2,
0.013,
],
[
30,
0.252e0,
0.600e0,
0.917e0,
0.663e0,
0.161e0,
0.161e0,
0.101e1,
0.276e1,
0.708e1,
0.190e2,
0.013,
],
[
31,
0.391e0,
0.947e0,
0.690e0,
0.709e-1,
0.653e-1,
0.264e0,
0.165e1,
0.482e1,
0.107e2,
0.152e2,
0.014,
],
[
32,
0.346e0,
0.830e0,
0.599e0,
0.949e-1,
-0.217e-1,
0.232e0,
0.145e1,
0.408e1,
0.132e2,
0.295e2,
0.016,
],
[
35,
0.125e0,
0.563e0,
0.143e1,
0.352e1,
0.322e1,
0.530e-1,
0.469e0,
0.215e1,
0.111e2,
0.389e2,
0.057,
],
[
37,
0.368e0,
0.884e0,
0.114e1,
0.226e1,
0.881e0,
0.187e0,
0.112e1,
0.398e1,
0.109e2,
0.266e2,
0.012,
],
[
38,
0.346e0,
0.804e0,
0.988e0,
0.189e1,
0.609e0,
0.176e0,
0.104e1,
0.359e1,
0.932e1,
0.214e2,
0.012,
],
[
39,
0.465e0,
0.923e0,
0.241e1,
-0.231e1,
0.248e1,
0.240e0,
0.143e1,
0.645e1,
0.997e1,
0.122e2,
0.018,
],
[
40,
0.234e0,
0.642e0,
0.747e0,
0.147e1,
0.377e0,
0.113e0,
0.736e0,
0.254e1,
0.672e1,
0.147e2,
0.014,
],
[
41,
0.377e0,
0.749e0,
0.129e1,
0.161e1,
0.481e0,
0.184e0,
0.102e1,
0.380e1,
0.944e1,
0.257e2,
0.008,
],
[
41,
0.828e-1,
0.271e0,
0.654e0,
0.124e1,
0.829e0,
0.369e-1,
0.261e0,
0.957e0,
0.394e1,
0.944e1,
0.017,
],
[
42,
0.401e0,
0.756e0,
0.138e1,
0.158e1,
0.497e0,
0.191e0,
0.106e1,
0.384e1,
0.938e1,
0.246e2,
0.007,
],
[
42,
0.479e0,
0.846e0,
0.156e2,
-0.152e2,
0.160e1,
0.241e0,
0.146e1,
0.679e1,
0.713e1,
0.104e2,
0.011,
],
[
42,
0.203e0,
0.567e0,
0.646e0,
0.116e1,
0.171e0,
0.971e-1,
0.647e0,
0.228e1,
0.561e1,
0.124e2,
0.013,
],
[
44,
0.428e0,
0.773e0,
0.155e1,
0.146e1,
0.486e0,
0.191e0,
0.109e1,
0.382e1,
0.908e1,
0.217e2,
0.006,
],
[
44,
0.282e0,
0.653e0,
0.114e1,
0.153e1,
0.418e0,
0.125e0,
0.753e0,
0.285e1,
0.701e1,
0.175e2,
0.006,
],
[
45,
0.352e0,
0.723e0,
0.150e1,
0.163e1,
0.499e0,
0.151e0,
0.878e0,
0.328e1,
0.816e1,
0.207e2,
0.006,
],
[
45,
0.397e0,
0.725e0,
0.151e1,
0.119e1,
0.251e0,
0.177e0,
0.101e1,
0.362e1,
0.856e1,
0.189e2,
0.008,
],
[
46,
0.935e0,
0.311e1,
0.246e2,
-0.436e2,
0.211e2,
0.393e0,
0.406e1,
0.431e2,
0.540e2,
0.698e2,
0.263,
],
[
46,
0.348e0,
0.640e0,
0.122e1,
0.145e1,
0.427e0,
0.151e0,
0.832e0,
0.285e1,
0.659e1,
0.156e2,
0.012,
],
[
47,
0.503e0,
0.940e0,
0.217e1,
0.199e1,
0.726e0,
0.199e0,
0.119e1,
0.405e1,
0.113e2,
0.324e2,
0.007,
],
[
47,
0.431e0,
0.756e0,
0.172e1,
0.178e1,
0.526e0,
0.175e0,
0.979e0,
0.330e1,
0.824e1,
0.214e2,
0.014,
],
[
48,
0.425e0,
0.745e0,
0.173e1,
0.174e1,
0.487e0,
0.168e0,
0.944e0,
0.314e1,
0.784e1,
0.204e2,
0.014,
],
[
49,
0.417e0,
0.755e0,
0.159e1,
0.136e1,
0.451e0,
0.164e0,
0.960e0,
0.308e1,
0.703e1,
0.161e2,
0.007,
],
[
50,
0.797e0,
0.213e1,
0.215e1,
-0.164e1,
0.272e1,
0.317e0,
0.251e1,
0.904e1,
0.242e2,
0.264e2,
0.006,
],
[
50,
0.261e0,
0.642e0,
0.153e1,
0.136e1,
0.177e0,
0.957e-1,
0.625e0,
0.251e1,
0.631e1,
0.159e2,
0.009,
],
[
51,
0.552e0,
0.114e1,
0.187e1,
0.136e1,
0.414e0,
0.212e4,
0.142e1,
0.421e1,
0.125e2,
0.290e2,
0.009,
],
[
51,
0.377e0,
0.588e0,
0.122e1,
0.118e1,
0.244e0,
0.151e0,
0.812e0,
0.240e1,
0.527e1,
0.119e2,
0.009,
],
[
53,
0.901e0,
0.280e1,
0.561e1,
-0.869e1,
0.126e2,
0.312e0,
0.259e1,
0.141e2,
0.344e2,
0.395e2,
0.060,
],
[
55,
0.587e0,
0.140e1,
0.187e1,
0.348e1,
0.167e1,
0.200e0,
0.138e1,
0.412e1,
0.130e2,
0.318e2,
0.011,
],
[
56,
0.733e0,
0.205e1,
0.230e2,
-0.152e3,
0.134e3,
0.258e0,
0.196e1,
0.118e2,
0.144e2,
0.149e2,
0.025,
],
[
57,
0.493e0,
0.110e1,
0.150e1,
0.270e1,
0.108e1,
0.167e0,
0.111e1,
0.311e1,
0.961e1,
0.212e2,
0.012,
],
[
58,
0.560e0,
0.135e1,
0.159e1,
0.263e1,
0.706e0,
0.190e0,
0.130e1,
0.393e1,
0.107e2,
0.238e2,
0.00,
],
[
58,
0.483e0,
0.109e1,
0.134e1,
0.245e1,
0.797e0,
0.165e0,
0.110e1,
0.302e1,
0.885e1,
0.188e2,
0.013,
],
[
59,
0.663e0,
0.173e1,
0.235e1,
0.351e0,
0.159e1,
0.226e0,
0.161e1,
0.633e1,
0.110e2,
0.169e2,
0.017,
],
[
59,
0.521e0,
0.119e1,
0.133e1,
0.236e1,
0.690e0,
0.177e0,
0.117e1,
0.328e1,
0.894e1,
0.193e2,
0.008,
],
[
60,
0.501e0,
0.118e1,
0.145e1,
0.253e1,
0.920e0,
0.162e0,
0.108e1,
0.306e1,
0.880e1,
0.196e2,
0.012,
],
[
61,
0.496e0,
0.120e1,
0.147e1,
0.243e1,
0.943e0,
0.156e0,
0.105e1,
0.307e1,
0.856e1,
0.192e2,
0.004,
],
[
62,
0.518e0,
0.124e1,
0.143e1,
0.240e1,
0.781e0,
0.163e0,
0.108e1,
0.311e1,
0.852e1,
0.191e2,
0.012,
],
[
63,
0.613e0,
0.153e1,
0.184e1,
0.246e1,
0.714e0,
0.190e0,
0.127e1,
0.418e1,
0.107e2,
0.262e2,
0.005,
],
[
63,
0.496e0,
0.121e1,
0.145e1,
0.236e1,
0.774e0,
0.152e0,
0.101e1,
0.295e1,
0.818e1,
0.185e2,
0.013,
],
[
64,
0.490e0,
0.119e1,
0.142e1,
0.230e1,
0.795e0,
0.148e0,
0.974e0,
0.281e1,
0.778e1,
0.177e2,
0.013,
],
[
65,
0.503e0,
0.122e1,
0.142e1,
0.224e1,
0.710e0,
0.150e0,
0.982e0,
0.286e1,
0.777e1,
0.177e2,
0.013,
],
[
66,
0.503e0,
0.124e1,
0.144e1,
0.217e1,
0.643e0,
0.148e0,
0.970e0,
0.288e1,
0.773e1,
0.176e2,
0.013,
],
[
67,
0.456e0,
0.117e1,
0.143e1,
0.215e1,
0.692e0,
0.129e0,
0.869e0,
0.261e1,
0.724e1,
0.167e2,
0.013,
],
[
68,
0.522e0,
0.128e1,
0.146e1,
0.205e1,
0.508e0,
0.150e0,
0.964e0,
0.293e1,
0.772e1,
0.178e2,
0.013,
],
[
69,
0.475e0,
0.120e1,
0.142e1,
0.205e1,
0.584e0,
0.132e0,
0.864e0,
0.260e1,
0.709e1,
0.166e2,
0.014,
],
[
70,
0.508e0,
0.137e1,
0.176e1,
0.223e1,
0.584e0,
0.136e0,
0.922e0,
0.312e1,
0.872e1,
0.237e2,
0.006,
],
[
70,
0.498e0,
0.122e1,
0.139e1,
0.197e1,
0.559e0,
0.138e0,
0.881e0,
0.263e1,
0.699e1,
0.163e2,
0.012,
],
[
71,
0.483e0,
0.121e1,
0.141e1,
0.194e1,
0.522e0,
0.131e0,
0.845e0,
0.257e1,
0.688e1,
0.162e2,
0.013,
],
[
72,
0.522e0,
0.122e1,
0.137e1,
0.168e1,
0.312e0,
0.145e0,
0.896e0,
0.274e1,
0.691e1,
0.161e2,
0.006,
],
[
73,
0.569e0,
0.126e1,
0.979e0,
0.129e1,
0.551e0,
0.161e0,
0.972e0,
0.276e1,
0.540e1,
0.109e2,
0.008,
],
[
74,
0.181e0,
0.873e0,
0.118e1,
0.148e1,
0.562e0,
0.118e-1,
0.442e0,
0.152e1,
0.435e1,
0.942e1,
0.005,
],
[
76,
0.586e0,
0.131e1,
0.163e1,
0.171e1,
0.540e0,
0.155e0,
0.938e0,
0.319e1,
0.784e1,
0.193e2,
0.005,
],
[
77,
0.692e0,
0.137e1,
0.180e1,
0.197e1,
0.804e0,
0.182e0,
0.104e1,
0.347e1,
0.851e1,
0.212e2,
0.004,
],
[
77,
0.653e0,
0.129e1,
0.150e1,
0.174e1,
0.683e0,
0.174e0,
0.992e0,
0.314e1,
0.722e1,
0.172e2,
0.006,
],
[
78,
0.872e0,
0.168e1,
0.263e1,
0.193e1,
0.475e0,
0.223e0,
0.135e1,
0.499e1,
0.136e2,
0.330e2,
0.005,
],
[
78,
0.550e0,
0.121e1,
0.162e1,
0.195e1,
0.610e0,
0.142e0,
0.833e0,
0.281e1,
0.721e1,
0.177e2,
0.005,
],
[
79,
0.811e0,
0.157e1,
0.263e1,
0.268e1,
0.998e0,
0.201e0,
0.118e1,
0.425e1,
0.121e2,
0.344e2,
0.006,
],
[
79,
0.722e0,
0.139e1,
0.194e1,
0.194e1,
0.699e0,
0.184e0,
0.106e1,
0.358e1,
0.856e1,
0.204e2,
0.007,
],
[
80,
0.796e0,
0.156e1,
0.272e1,
0.276e1,
0.118e1,
0.194e0,
0.114e1,
0.421e1,
0.124e2,
0.362e2,
0.005,
],
[
80,
0.773e4,
-0.149e1,
0.245e1,
0.223e1,
0.570e0,
0.191e0,
0.112e1,
0.400e1,
0.108e2,
0.276e2,
0.005,
],
[
81,
0.820e0,
0.157e1,
0.278e1,
0.282e1,
0.131e1,
0.197e0,
0.116e1,
0.423e1,
0.127e2,
0.357e2,
0.004,
],
[
81,
0.836e0,
0.143e1,
0.394e0,
0.251e1,
0.150e1,
0.208e0,
0.120e1,
0.257e1,
0.486e1,
0.135e2,
0.015,
],
[
82,
0.755e0,
0.144e1,
0.248e1,
0.245e1,
0.103e1,
0.181e0,
0.105e1,
0.375e1,
0.106e2,
0.279e2,
0.004,
],
[
82,
0.583e0,
0.114e1,
0.160e1,
0.206e1,
0.662e0,
0.144e0,
0.796e0,
0.258e1,
0.622e1,
0.148e2,
0.004,
],
[
83,
0.708e0,
0.135e1,
0.228e1,
0.218e1,
0.797e0,
0.170e0,
0.981e0,
0.344e1,
0.941e1,
0.237e2,
0.007,
],
[
83,
0.654e0,
0.118e1,
0.125e1,
0.166e1,
0.778e0,
0.162e0,
0.905e0,
0.268e1,
0.514e1,
0.112e2,
0.007,
],
[
88,
0.911e0,
0.165e1,
0.253e1,
0.362e1,
0.158e1,
0.204e0,
0.126e1,
0.403e1,
0.126e2,
0.300e2,
0.005,
],
[
89,
0.915e0,
0.164e1,
0.226e1,
0.318e1,
0.125e1,
0.205e0,
0.128e1,
0.392e1,
0.113e2,
0.251e2,
0.005,
],
[
92,
0.114e1,
0.248e1,
0.361e1,
0.113e1,
0.900e0,
0.250e0,
0.184e1,
0.739e1,
0.180e2,
0.227e2,
0.007,
],
[
92,
0.109e1,
0.232e1,
0.120e2,
-0.911e1,
0.215e1,
0.243e0,
0.175e1,
0.779e1,
0.831e1,
0.165e2,
0.005,
],
[
92,
0.687e0,
0.114e1,
0.183e1,
0.253e1,
0.957e0,
0.154e0,
0.861e0,
0.258e1,
0.770e1,
0.159e2,
0.003,
],
]
)
IONS_DICT = dict()
for ion, row in zip(IONS, ATOMIC_SCATTERING_PARAMETERS_PENG_IONS):
c = -1 if ion[-1] == "-" else 1
charge = int(ion[-2]) * c
IONS_DICT[ion] = dict(z=row[0], a=list(row[1:6]), b=list(row[6:11]), charge=charge)
@CSSFrancis, I think this should be good. Can you give a complete reference to the values?
@hakonanes I'll try to make a PR with a reference later this week!