pyTEMlib 0.2025.4.1__py3-none-any.whl → 0.2025.9.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyTEMlib might be problematic. Click here for more details.

Files changed (94) hide show
  1. build/lib/pyTEMlib/__init__.py +33 -0
  2. build/lib/pyTEMlib/animation.py +640 -0
  3. build/lib/pyTEMlib/atom_tools.py +238 -0
  4. build/lib/pyTEMlib/config_dir.py +31 -0
  5. build/lib/pyTEMlib/crystal_tools.py +1219 -0
  6. build/lib/pyTEMlib/diffraction_plot.py +756 -0
  7. build/lib/pyTEMlib/dynamic_scattering.py +293 -0
  8. build/lib/pyTEMlib/eds_tools.py +826 -0
  9. build/lib/pyTEMlib/eds_xsections.py +432 -0
  10. build/lib/pyTEMlib/eels_tools/__init__.py +44 -0
  11. build/lib/pyTEMlib/eels_tools/core_loss_tools.py +751 -0
  12. build/lib/pyTEMlib/eels_tools/eels_database.py +134 -0
  13. build/lib/pyTEMlib/eels_tools/low_loss_tools.py +655 -0
  14. build/lib/pyTEMlib/eels_tools/peak_fit_tools.py +175 -0
  15. build/lib/pyTEMlib/eels_tools/zero_loss_tools.py +264 -0
  16. build/lib/pyTEMlib/file_reader.py +274 -0
  17. build/lib/pyTEMlib/file_tools.py +811 -0
  18. build/lib/pyTEMlib/get_bote_salvat.py +69 -0
  19. build/lib/pyTEMlib/graph_tools.py +1153 -0
  20. build/lib/pyTEMlib/graph_viz.py +599 -0
  21. build/lib/pyTEMlib/image/__init__.py +37 -0
  22. build/lib/pyTEMlib/image/image_atoms.py +270 -0
  23. build/lib/pyTEMlib/image/image_clean.py +197 -0
  24. build/lib/pyTEMlib/image/image_distortion.py +299 -0
  25. build/lib/pyTEMlib/image/image_fft.py +277 -0
  26. build/lib/pyTEMlib/image/image_graph.py +926 -0
  27. build/lib/pyTEMlib/image/image_registration.py +316 -0
  28. build/lib/pyTEMlib/image/image_utilities.py +309 -0
  29. build/lib/pyTEMlib/image/image_window.py +421 -0
  30. build/lib/pyTEMlib/image_tools.py +699 -0
  31. build/lib/pyTEMlib/interactive_image.py +1 -0
  32. build/lib/pyTEMlib/kinematic_scattering.py +1196 -0
  33. build/lib/pyTEMlib/microscope.py +61 -0
  34. build/lib/pyTEMlib/probe_tools.py +906 -0
  35. build/lib/pyTEMlib/sidpy_tools.py +153 -0
  36. build/lib/pyTEMlib/simulation_tools.py +104 -0
  37. build/lib/pyTEMlib/test.py +437 -0
  38. build/lib/pyTEMlib/utilities.py +314 -0
  39. build/lib/pyTEMlib/version.py +5 -0
  40. build/lib/pyTEMlib/xrpa_x_sections.py +20976 -0
  41. pyTEMlib/__init__.py +25 -3
  42. pyTEMlib/animation.py +31 -22
  43. pyTEMlib/atom_tools.py +29 -34
  44. pyTEMlib/config_dir.py +2 -28
  45. pyTEMlib/crystal_tools.py +129 -165
  46. pyTEMlib/eds_tools.py +559 -342
  47. pyTEMlib/eds_xsections.py +432 -0
  48. pyTEMlib/eels_tools/__init__.py +44 -0
  49. pyTEMlib/eels_tools/core_loss_tools.py +751 -0
  50. pyTEMlib/eels_tools/eels_database.py +134 -0
  51. pyTEMlib/eels_tools/low_loss_tools.py +655 -0
  52. pyTEMlib/eels_tools/peak_fit_tools.py +175 -0
  53. pyTEMlib/eels_tools/zero_loss_tools.py +264 -0
  54. pyTEMlib/file_reader.py +274 -0
  55. pyTEMlib/file_tools.py +260 -1130
  56. pyTEMlib/get_bote_salvat.py +69 -0
  57. pyTEMlib/graph_tools.py +101 -174
  58. pyTEMlib/graph_viz.py +150 -0
  59. pyTEMlib/image/__init__.py +37 -0
  60. pyTEMlib/image/image_atoms.py +270 -0
  61. pyTEMlib/image/image_clean.py +197 -0
  62. pyTEMlib/image/image_distortion.py +299 -0
  63. pyTEMlib/image/image_fft.py +277 -0
  64. pyTEMlib/image/image_graph.py +926 -0
  65. pyTEMlib/image/image_registration.py +316 -0
  66. pyTEMlib/image/image_utilities.py +309 -0
  67. pyTEMlib/image/image_window.py +421 -0
  68. pyTEMlib/image_tools.py +154 -915
  69. pyTEMlib/kinematic_scattering.py +1 -1
  70. pyTEMlib/probe_tools.py +1 -1
  71. pyTEMlib/test.py +437 -0
  72. pyTEMlib/utilities.py +314 -0
  73. pyTEMlib/version.py +2 -3
  74. pyTEMlib/xrpa_x_sections.py +14 -10
  75. {pytemlib-0.2025.4.1.dist-info → pytemlib-0.2025.9.1.dist-info}/METADATA +13 -16
  76. pytemlib-0.2025.9.1.dist-info/RECORD +86 -0
  77. {pytemlib-0.2025.4.1.dist-info → pytemlib-0.2025.9.1.dist-info}/WHEEL +1 -1
  78. pytemlib-0.2025.9.1.dist-info/top_level.txt +6 -0
  79. pyTEMlib/core_loss_widget.py +0 -721
  80. pyTEMlib/eels_dialog.py +0 -754
  81. pyTEMlib/eels_dialog_utilities.py +0 -1199
  82. pyTEMlib/eels_tools.py +0 -2359
  83. pyTEMlib/file_tools_qt.py +0 -193
  84. pyTEMlib/image_dialog.py +0 -158
  85. pyTEMlib/image_dlg.py +0 -146
  86. pyTEMlib/info_widget.py +0 -1086
  87. pyTEMlib/info_widget3.py +0 -1120
  88. pyTEMlib/low_loss_widget.py +0 -479
  89. pyTEMlib/peak_dialog.py +0 -1129
  90. pyTEMlib/peak_dlg.py +0 -286
  91. pytemlib-0.2025.4.1.dist-info/RECORD +0 -38
  92. pytemlib-0.2025.4.1.dist-info/top_level.txt +0 -1
  93. {pytemlib-0.2025.4.1.dist-info → pytemlib-0.2025.9.1.dist-info}/entry_points.txt +0 -0
  94. {pytemlib-0.2025.4.1.dist-info → pytemlib-0.2025.9.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1219 @@
1
+ """
2
+ crystal_tools
3
+
4
+ part of pyTEMlib
5
+
6
+ Author: Gerd Duscher
7
+
8
+ Provides convenient functions to make most regular crystal structures
9
+
10
+ Contains also a dictionary of crystal structures and atomic form factors
11
+
12
+ Units:
13
+ everything is in SI units, except length is given in nm.
14
+ angles are assumed to be in degree but will be internally converted to rad
15
+
16
+ Usage:
17
+ See the notebooks for examples of these routines
18
+
19
+ """
20
+ import typing
21
+ import itertools
22
+
23
+ import numpy as np
24
+ import ase
25
+ import ase.spacegroup
26
+ import ase.build
27
+ import ase.lattice
28
+ import ase.lattice.compounds
29
+ import ase.neighborlist
30
+ import ase.data.colors
31
+
32
+ import scipy
33
+ import scipy.sparse
34
+
35
+ import spglib
36
+
37
+ import matplotlib.pylab as plt # basic plotting
38
+
39
+
40
+ def get_dictionary(atoms: ase.Atoms) -> dict[str, typing.Any]:
41
+ """
42
+ structure dictionary from ase.Atoms object
43
+ """
44
+ tags = {'unit_cell': atoms.cell.array,
45
+ 'elements': atoms.get_chemical_formula(),
46
+ 'base': atoms.get_scaled_positions(),
47
+ 'metadata': atoms.info}
48
+
49
+ return tags
50
+
51
+
52
+ def atoms_from_dictionary(tags: dict[str, typing.Any]) -> ase.Atoms:
53
+ """
54
+ Create an ase.Atoms object from a structure dictionary
55
+ """
56
+ atoms = ase.Atoms(cell=tags['unit_cell'],
57
+ symbols=tags['elements'],
58
+ scaled_positions=tags['base'])
59
+ if 'metadata' in tags:
60
+ atoms.info = tags['metadata']
61
+ return atoms
62
+
63
+
64
+ def get_symmetry(atoms: ase.Atoms, verbose: bool = True):
65
+ """
66
+ Symmetry analysis with spglib
67
+
68
+ spglib must be installed
69
+
70
+ Parameters
71
+ ----------
72
+ atoms: ase.Atoms object
73
+ crystal structure
74
+ verbose: bool
75
+
76
+ Returns
77
+ -------
78
+ bool
79
+ """
80
+ if verbose:
81
+ print('#####################')
82
+ print('# Symmetry Analysis #')
83
+ print('#####################')
84
+
85
+ base = atoms.get_scaled_positions()
86
+ for i, atom in enumerate(atoms):
87
+ if verbose:
88
+ print(f'{i + 1}: {atom.number} = {atom.symbol} : [{base[i][0]:.2f}, {base[i][1]:.2f}, {base[i][2]:.2f}]')
89
+
90
+ lattice = (atoms.cell, atoms.get_scaled_positions(), atoms.numbers)
91
+ spgroup = spglib.get_spacegroup(lattice, symprec=1e-2)
92
+ sym = spglib.get_symmetry(lattice)
93
+
94
+ if verbose:
95
+ print(f" Spacegroup is {spgroup}.")
96
+ print(f" Crystal has {sym['rotations'].shape[0]} symmetry operation")
97
+
98
+ p_lattice, p_positions, p_numbers = spglib.find_primitive(lattice, symprec=1e-5)
99
+ print("\n########################\n #Basis vectors of primitive Cell:")
100
+ for i in range(3):
101
+ print(f'[{p_lattice[i][0]:.4f}, {p_lattice[i][1]:.4f}, {p_lattice[i][2]:.4f}]')
102
+
103
+ print(f'There {len(p_positions)} atoms and {p_numbers} species in primitive unit cell:')
104
+ return True
105
+
106
+
107
+ def set_bond_radii(atoms: ase.Atoms):
108
+ """
109
+ Set bond radii for atoms in the structure from electronFF database
110
+ at the end of this
111
+ """
112
+ bond_radii = np.ones(len(atoms))
113
+ for i in range(len(atoms)):
114
+ bond_radii[i] = electronFF[atoms.symbols[i]]['bond_length'][1]
115
+ atoms.info['bond_radii'] = bond_radii
116
+
117
+
118
+ def get_projection(crystal: ase.Atoms, layers: int = 1) -> ase.Atoms:
119
+ """
120
+ Get the projection of a crystal structure onto a specific plane.
121
+ zone axis must be specified in the crystal.info['experimental'] dictionary.
122
+ """
123
+ if 'experimental' not in crystal.info:
124
+ raise ValueError("Zone axis must be specified in the crystal.info['experimental'] dictionary.")
125
+ if 'zone_axis' not in crystal.info['experimental']:
126
+ raise ValueError("Zone axis must be specified in the crystal.info['experimental'] dictionary.")
127
+ zone_axis = crystal.info['experimental']['zone_axis']
128
+ angle = crystal.info['experimental']['angle']
129
+ if 'layers' in crystal.info['structure']:
130
+ layers = crystal.info['structure']['layers']
131
+ projected_crystal = ase.build.surface(crystal, zone_axis, vacuum=.0, layers=layers)
132
+
133
+ scaled = projected_crystal.get_scaled_positions()
134
+ projected_crystal.positions[scaled[:,0]>0.95, 0] = 0
135
+ projected_crystal.positions[scaled[:,1]>0.95, 1] = 0
136
+ # do not change this because we did not add a vacuum
137
+ # projected_crystal.positions[scaled[:,2]>0.95, 2] = 0
138
+
139
+ projected_crystal.positions[scaled[:,0]<0.05, 0] = 0
140
+ projected_crystal.positions[scaled[:,1]<0.05, 1] = 0
141
+ projected_crystal.positions[scaled[:,2]<0.05, 2] = 0
142
+
143
+ element_tree = scipy.spatial.KDTree(projected_crystal.positions[:, 0:2])
144
+ done = []
145
+ projected = []
146
+ for atom in projected_crystal:
147
+ if atom.index not in done:
148
+ near = element_tree.query_ball_point(atom.position[:2], 0.05)
149
+ projected.append(near)
150
+ done.extend(near)
151
+ atomic_numbers = []
152
+ for pro in projected:
153
+ atomic_numbers.append(projected_crystal.get_atomic_numbers()[pro].sum())
154
+
155
+ projected_crystal.rotate(np.degrees(angle) % 360, 'z', rotate_cell=True)
156
+ near_base = np.array([projected_crystal.cell[0, :2], -projected_crystal.cell[0, :2],
157
+ projected_crystal.cell[1, :2], -projected_crystal.cell[1, :2],
158
+ projected_crystal.cell[0, :2] + projected_crystal.cell[1, :2],
159
+ -(projected_crystal.cell[0, :2] + projected_crystal.cell[1, :2])])
160
+ lines = np.array([[[0, near_base[0, 0]], [0, near_base[0, 1]]],
161
+ [[0, near_base[2, 0]], [0, near_base[2, 1]]],
162
+ [[near_base[0, 0], near_base[4, 0]], [near_base[0, 1],
163
+ near_base[4, 1]]],
164
+ [[near_base[2, 0], near_base[4, 0]], [near_base[2, 1],
165
+ near_base[4, 1]]]])
166
+ projected_atoms = []
167
+ for index in projected:
168
+ projected_atoms.append(index[0])
169
+
170
+ projected_crystal.info['projection'] = {'indices': projected,
171
+ 'projected': projected_atoms,
172
+ 'projected_Z': atomic_numbers,
173
+ 'angle': np.degrees(angle)+180 % 360,
174
+ 'near_base': near_base,
175
+ 'lines': lines}
176
+ return projected_crystal
177
+
178
+
179
+ def plot_super_cell(super_cell, shift_x=0.):
180
+ """ make a super_cell to plot with extra atoms at periodic boundaries"""
181
+
182
+ if not isinstance(super_cell, ase.Atoms):
183
+ raise TypeError('Need an ase Atoms object')
184
+
185
+ super_cell2plot = super_cell * (2, 2, 2)
186
+ super_cell2plot.positions[:, 0] = super_cell2plot.positions[:, 0] - super_cell2plot.cell[0, 0] * shift_x
187
+
188
+ del super_cell2plot[super_cell2plot.positions[:, 2] > super_cell.cell[2, 2] + 0.1]
189
+ del super_cell2plot[super_cell2plot.positions[:, 1] > super_cell.cell[1, 1] + 0.1]
190
+ del super_cell2plot[super_cell2plot.positions[:, 0] > super_cell.cell[0, 0] + 0.1]
191
+ del super_cell2plot[super_cell2plot.positions[:, 0] < -0.1]
192
+ super_cell2plot.cell = super_cell.cell * (1, 1, 1)
193
+
194
+ return super_cell2plot
195
+
196
+
197
+ def ball_and_stick(atoms: ase.Atoms, extend: int = 1) -> ase.Atoms:
198
+ """Calculates the data to plot a ball and stick model
199
+
200
+ Parameters
201
+ ----------
202
+ atoms: ase.Atoms object
203
+ object containing the structural information like 'cell', and 'symbols' .
204
+
205
+ extend: integer or list f 3 integers
206
+ The *extend* argument scales the effective cell in which atoms
207
+ will be included. It must either be a list of three integers or a single
208
+ integer scaling all 3 directions. By setting this value to one,
209
+ all corner and edge atoms will be included in the returned cell.
210
+ This will of cause make the returned cell non-repeatable, but this is
211
+ very useful for visualisation.
212
+
213
+ Returns
214
+ -------
215
+ super_cell: ase.Atoms object
216
+ structure with additional information in info dictionary
217
+ """
218
+ if not isinstance(atoms, ase.Atoms):
219
+ raise TypeError('Need an ase Atoms object')
220
+
221
+ super_cell = plot_super_cell(atoms*extend)
222
+ cell = super_cell.cell.array
223
+ # Corners and Outline of unit cell
224
+ h = (0, 1)
225
+ corner_vectors = np.dot(np.array(list(itertools.product(h, h, h))), cell)
226
+ corner_matrix = scipy.sparse.dok_matrix((8, 8), dtype=bool)
227
+ trace = [[0, 1], [1, 3], [2, 3], [0, 2], [0, 4], [4, 5],
228
+ [5, 7], [6, 7], [4, 6], [1, 5], [2, 6], [3, 7]]
229
+ for s, e in trace:
230
+ corner_matrix[s, e] = True
231
+
232
+ # List of bond lengths taken from electronFF database below
233
+ bond_lengths = []
234
+ for atom in super_cell:
235
+ bond_lengths.append(electronFF[atom.symbol]['bond_length'][1])
236
+
237
+ super_cell.set_cell(cell*2, scale_atoms=False) # otherwise, corner atoms have distance 0
238
+ neighbor_list = ase.neighborlist.NeighborList(bond_lengths, self_interaction=False,
239
+ bothways=False)
240
+ neighbor_list.update(super_cell)
241
+ bond_matrix = neighbor_list.get_connectivity_matrix()
242
+
243
+ bond_matrix = np.triu(bond_matrix.toarray())
244
+ bond_matrix = scipy.sparse.dok_array(bond_matrix)
245
+ if super_cell.info is None:
246
+ super_cell.info = {}
247
+ super_cell.info['plot_cell'] = {'bond_matrix': bond_matrix,
248
+ 'corner_vectors': corner_vectors,
249
+ 'bond_length': bond_lengths,
250
+ 'corner_matrix': corner_matrix}
251
+ super_cell.set_cell(cell/2, scale_atoms=False)
252
+ return super_cell
253
+
254
+
255
+ def plot_unit_cell(atoms, extend=1, ax=None):
256
+ """
257
+ Simple plot of unit cell
258
+ """
259
+
260
+ super_cell = ball_and_stick(atoms, extend=extend)
261
+
262
+ corners = super_cell.info['plot_cell']['corner_vectors']
263
+ positions = super_cell.positions - super_cell.cell.lengths()/2
264
+
265
+ if ax is None:
266
+ fig = plt.figure()
267
+ ax = fig.add_subplot(111, projection='3d')
268
+ # draw unit_cell
269
+
270
+ for line in super_cell.info['plot_cell']['corner_matrix'].keys():
271
+ ax.plot3D(corners[line, 0], corners[line, 1], corners[line, 2], color="blue")
272
+
273
+ # draw bonds
274
+ for bond in super_cell.info['plot_cell']['bond_matrix'].keys():
275
+ ax.plot3D(positions[bond, 0], positions[bond, 1], positions[bond, 2],
276
+ color="black", linewidth=4)
277
+ # , tube_radius=0.02)
278
+
279
+ # draw atoms
280
+ ax.scatter(super_cell.positions[:, 0], super_cell.positions[:, 1],
281
+ super_cell.positions[:, 2],
282
+ color=tuple(jmol_colors[super_cell.get_atomic_numbers()]), alpha=1.0, s=50)
283
+ maximum_position = super_cell.positions.max()*1.05
284
+ ax.set_proj_type('ortho')
285
+
286
+ ax.set_zlim(-maximum_position/2, maximum_position/2)
287
+ ax.set_ylim(-maximum_position/2, maximum_position/2)
288
+ ax.set_xlim(-maximum_position/2, maximum_position/2)
289
+
290
+ if 'name' in super_cell.info:
291
+ ax.set_title(super_cell.info['name'])
292
+
293
+ ax.set_xlabel('x [Å]')
294
+ ax.set_ylabel('y [Å]')
295
+ ax.set_zlabel('z [Å]')
296
+ return ax.get_figure()
297
+
298
+
299
+ # Jmol colors. See: http://jmol.sourceforge.net/jscolors/#color_U
300
+ jmol_colors = ase.data.colors.jmol_colors
301
+
302
+
303
+ def structure_by_name(crystal_name: str) -> ase.Atoms | None:
304
+ """
305
+ Provides crystal structure in ase.Atoms format.
306
+ Additional information is stored in the info attribute as a dictionary
307
+
308
+ Parameter
309
+ ---------
310
+ crystal_name: str
311
+ Please note that the chemical expressions are not case-sensitive.
312
+
313
+ Returns
314
+ -------
315
+ atoms: ase.Atoms
316
+ structure
317
+
318
+ Example
319
+ -------
320
+ >> # for a list of pre-defined crystal structures
321
+ >> import pyTEMlib.crystal_tools
322
+ >> print(pyTEMlib.crystal_tools.crystal_data_base.keys())
323
+ >>
324
+ >> atoms = pyTEMlib.crystal_tools.structure_by_name('Silicon')
325
+ >> print(atoms)
326
+ >> print(atoms.info)
327
+
328
+ """
329
+
330
+ # Check whether name is in the crystal_data_base
331
+ if crystal_name.lower() in cdb:
332
+ tags = cdb[crystal_name.lower()].copy()
333
+ else:
334
+ print(f'Crystal name {crystal_name.lower()} not defined')
335
+ return
336
+
337
+ if 'symmetry' in tags:
338
+ if tags['symmetry'].lower() == 'fcc':
339
+ atoms = ase.build.bulk(tags['elements'], 'fcc', a=tags['a'], cubic=True)
340
+
341
+ elif tags['symmetry'].lower() == 'bcc':
342
+ atoms = ase.build.bulk(tags['elements'], 'bcc', a=tags['a'], cubic=True)
343
+
344
+ elif tags['symmetry'].lower() == 'diamond':
345
+ atoms = ase.lattice.cubic.Diamond(tags['elements'], latticeconstant=tags['a'])
346
+
347
+ elif 'rocksalt' in tags['symmetry']: # B1
348
+ atoms = ase.lattice.compounds.Rocksalt(tags['elements'], latticeconstant=tags['a'])
349
+
350
+ elif 'zincblende' in tags['symmetry']:
351
+ atoms = ase.lattice.compounds.B3(tags['elements'], latticeconstant=tags['a'])
352
+
353
+ elif 'B2' in tags['symmetry']:
354
+ atoms = ase.lattice.compounds.B2(tags['elements'], latticeconstant=tags['a'])
355
+
356
+ elif 'graphite' in tags['symmetry']:
357
+ base = [(0, 0, 0), (0, 0, 1/2), (2/3, 1/3, 0), (1/3, 2/3, 1/2)]
358
+ structure_matrix = np.array([[tags['a'], 0., 0.],
359
+ [np.cos(np.pi/3*2)*tags['a'],
360
+ np.sin(np.pi/3*2)*tags['a'], 0.],
361
+ [0., 0., tags['c']]])
362
+
363
+ atoms = ase.Atoms(tags['elements'], cell=structure_matrix, scaled_positions=base)
364
+
365
+ elif 'perovskite' in tags['symmetry']:
366
+ atom_positions = [(0.0, 0.0, 0.0), (0.5, 0.5, 0.5), (0.5, 0.5, 0.0)]
367
+ atoms = ase.spacegroup.crystal(tags['elements'], atom_positions, spacegroup=221,
368
+ cellpar=tags['a'])
369
+
370
+ elif 'wurzite' in tags['symmetry']:
371
+ atom_positions = [(1/3, 2/3, 0.0), (1/3, 2/3, tags['u'])]
372
+ atoms = ase.spacegroup.crystal(tags['elements'], atom_positions, spacegroup=186,
373
+ cellpar=[tags['a'], tags['a'], tags['c'], 90, 90, 120])
374
+
375
+ elif 'rutile' in tags['symmetry']:
376
+ atoms = ase.spacegroup.crystal(tags['elements'], basis=[(0, 0, 0), (0.3, 0.3, 0.0)],
377
+ spacegroup=136, cellpar=[tags['a'], tags['a'],
378
+ tags['c'], 90, 90, 90])
379
+ elif 'dichalcogenide' in tags['symmetry']:
380
+ u = tags['u']
381
+ base = [(1 / 3., 2 / 3., 1 / 4.), (2 / 3., 1 / 3., 3 / 4.),
382
+ (2 / 3., 1 / 3., 1 / 4. + u), (2 / 3., 1 / 3., 1 / 4. - u),
383
+ (1 / 3., 2 / 3., 3 / 4. + u), (1 / 3., 2 / 3., 3 / 4. - u)]
384
+ atoms = ase.spacegroup.crystal(tags['elements'][0] * 2 + tags['elements'][1] * 4,
385
+ base, spacegroup=194,
386
+ cellpar=[tags['a'], tags['a'], tags['c'], 90, 90, 120])
387
+
388
+ elif tags['symmetry'].lower() in ['primitive', 'hexagonal']:
389
+ atoms = ase.Atoms(tags['elements'], cell=tags['unit_cell'],
390
+ scaled_positions=tags['base'])
391
+
392
+ else:
393
+ raise ValueError("Symmetry of structure is wrong")
394
+
395
+ atoms.info = {'structure': {'reference': tags['reference'],
396
+ 'link': tags['link']},
397
+ 'title': tags['crystal_name']}
398
+ if 'layers' in tags:
399
+ atoms.info['structure']['layers'] = tags['layers']
400
+ return atoms
401
+
402
+
403
+ # crystal data base cbd
404
+ cdb = {'aluminum': {'crystal_name': 'aluminum',
405
+ 'symmetry': 'FCC',
406
+ 'elements': 'Al',
407
+ 'a': 4.05, # Angstrom
408
+ 'reference': 'W. Witt, Z. Naturforsch. A, 1967, 22A, 92',
409
+ 'link': 'http://doi.org/10.1515/zna-1967-0115'}}
410
+ cdb['al'] = cdb['aluminium'] = cdb['aluminum']
411
+
412
+ cdb['theta_prime'] = {'crystal_name': 'theta_prime',
413
+ 'symmetry':'primitive',
414
+ 'elements':'Al4Cu2',
415
+ 'base': [(0.5,0.25,0.0), (0.0,0.25,0.5),
416
+ (0.,0.75,0.5), (0.5,0.75,0.0),
417
+ (0,0,0), (0.5,0.5,0.5)],
418
+ 'unit_cell': [[4.05, 0, 0], [0, 4.05 * 10/7, 0], [0, 0, 4.05]],
419
+ 'layers': 2,
420
+ 'reference': '',
421
+ 'link': ''}
422
+
423
+ cdb['gold'] = {'crystal_name': 'gold',
424
+ 'symmetry': 'FCC',
425
+ 'elements': 'Au',
426
+ 'a': 4.0782, # Angstrom
427
+ 'reference': '',
428
+ 'link': ''}
429
+ cdb['au'] = cdb['gold']
430
+
431
+ cdb['silver'] = {'crystal_name': 'silver',
432
+ 'symmetry': 'FCC',
433
+ 'elements': 'Ag',
434
+ 'a': 4.0853, # Angstrom
435
+ 'reference': '', 'link': ''}
436
+ cdb['ag'] = cdb['silver']
437
+
438
+ cdb['copper'] = {'crystal_name': 'copper',
439
+ 'symmetry': 'FCC',
440
+ 'elements': 'Cu',
441
+ 'a': 4.0853, # Angstrom
442
+ 'reference': '', 'link': ''}
443
+ cdb['cu'] = cdb['copper']
444
+
445
+ cdb['diamond'] = {'crystal_name': 'diamond',
446
+ 'symmetry': 'diamond',
447
+ 'elements': 'C',
448
+ 'a': 3.5668, # Angstrom
449
+ 'reference': '', 'link': ''}
450
+
451
+ cdb['germanium'] = {'crystal_name': 'germanium',
452
+ 'symmetry': 'diamond',
453
+ 'elements': 'Ge',
454
+ 'a': 5.66806348, # Angstrom for 300K
455
+ 'reference': 'H. P. Singh, Acta Crystallogr., 1968, 24A, 469',
456
+ 'link': 'https://doi.org/10.1107/S056773946800094X'}
457
+ cdb['ge'] = cdb['germanium']
458
+
459
+ cdb['silicon'] = {'crystal_name': 'silicon',
460
+ 'symmetry': 'diamond',
461
+ 'elements': 'Si',
462
+ 'a': 5.430880, # Angstrom for 300K
463
+ 'reference': 'C. R. Hubbard, et al., J. Appl. Crystallogr., 1975, 8, 45',
464
+ 'link': 'https://doi.org/10.1107/S0021889875009508'}
465
+ cdb['si'] = cdb['silicon']
466
+
467
+ cdb['gaas'] = {'crystal_name': 'GaAs',
468
+ 'symmetry': 'zincblende(B3)',
469
+ 'elements': ['Ga', 'As'],
470
+ 'a': 5.65325, # Angstrom for 300K
471
+ 'reference': 'J.F.C. Baker, et al., Solid-State Electronics, 19, '
472
+ '1976, 331-334,',
473
+ 'link': 'https://doi.org/10.1016/0038-1101(76)90031-9'}
474
+
475
+ cdb['fcc fe'] = {'crystal_name': 'FCC Fe',
476
+ 'symmetry': 'FCC',
477
+ 'elements': 'Fe',
478
+ 'a': 3.3571, # Angstrom
479
+ 'reference': 'R. Kohlhaas, et al., Z. Angew. Phys., 1967, 23, 245',
480
+ 'link': ''}
481
+
482
+ cdb['iron'] = {'crystal_name': 'BCC Fe',
483
+ 'symmetry': 'BCC',
484
+ 'elements': 'Fe',
485
+ 'a': 2.866, # Angstrom
486
+ 'reference': 'Z. S. Basinski, W. Hume-Rothery and A. L. Sutton'+
487
+ 'Proceedings of the Royal Society of '+
488
+ 'London. Series A, Mathematical and Physical Sciences'+
489
+ 'Vol. 229, No. 1179 (May 24, 1955), pp. 459-467',
490
+ 'link': 'http://www.jstor.org/stable/99693'}
491
+ cdb['bcc fe'] = cdb['alpha iron'] = cdb['iron']
492
+
493
+ cdb['srtio3'] = {'crystal_name': 'SrTiO3',
494
+ 'symmetry': 'perovskite',
495
+ 'elements': ['Sr', 'Ti', 'O'],
496
+ 'a': 3.905268, # Angstrom
497
+ 'reference': 'M. Schmidbauer, et al., Acta Cryst. (2012). B68, 8-14',
498
+ 'link': 'http://doi.org/10.1107/S0108768111046738'}
499
+ cdb['strontium titanate'] = cdb['srtio3']
500
+
501
+ cdb['graphite'] = {'crystal_name': 'graphite',
502
+ 'symmetry': 'graphite hexagonal',
503
+ 'elements': 'C4',
504
+ 'a': 2.46772414,
505
+ 'c': 6.711,
506
+ 'reference': 'P. Trucano and R. Chen, Nature, 1975, 258, 136',
507
+ 'link': 'https://doi.org/10.1038/258136a0'}
508
+
509
+ cdb['cscl'] = {'crystal_name': 'CsCl',
510
+ 'symmetry': 'CsCl (B2)',
511
+ 'a': 4.209, # Angstrom
512
+ 'elements': ['Cs', 'Cl'],
513
+ 'reference': '', 'link': ''}
514
+ cdb['cesium chlorid'] = cdb['cscl']
515
+
516
+ cdb['mgo'] = {'crystal_name': 'MgO',
517
+ 'symmetry': 'rocksalt (B1)',
518
+ 'elements': ['Mg', 'O'],
519
+ 'a': 4.256483, # Angstrom
520
+ 'reference': '', 'link': ''}
521
+
522
+ cdb['titanium nitride'] = {'crystal_name': 'TiN',
523
+ 'symmetry': 'rocksalt (B1)',
524
+ 'elements': ['Ti', 'N'],
525
+ 'a': 4.25353445, # Angstrom
526
+ 'reference': '', 'link': '',
527
+ 'space_group': 225,
528
+ 'symmetry_name': 'Fm-3m'}
529
+
530
+ cdb['zno wurzite'] = {'crystal_name': 'ZnO Wurzite',
531
+ 'symmetry': 'wurzite',
532
+ 'elements': ['Zn', 'O'],
533
+ 'a': 3.278, # Angstrom
534
+ 'c': 5.292, # Angstrom
535
+ 'u': 0.382,
536
+ 'reference': '', 'link': ''}
537
+ cdb['zno'] = cdb['wzno'] = cdb['zno wurzite']
538
+
539
+ cdb['gan'] = {'crystal_name': 'GaN Wurzite',
540
+ 'symmetry': 'wurzite',
541
+ 'elements': ['Ga', 'N'],
542
+ 'a': 3.186, # Angstrom
543
+ 'c': 5.186, # Angstrom
544
+ 'u': 0.376393,
545
+ 'reference': '', 'link': ''}
546
+ cdb['gan wurzite'] = cdb['wgan'] = cdb['gallium nitride'] = cdb['gan']
547
+
548
+
549
+ cdb['tio2'] = {'crystal_name': 'TiO2 rutile',
550
+ 'symmetry': 'rutile',
551
+ 'elements': ['Ti', 'O'],
552
+ 'a': 4.6, # Angstrom
553
+ 'c': 2.95, # Angstrom
554
+ 'reference': '', 'link': ''}
555
+
556
+ cdb['mos2'] = {'crystal_name': 'MoS2',
557
+ 'symmetry': 'dichalcogenide',
558
+ 'elements': ['Mo', 'S'],
559
+ 'a': 3.19031573, # Angstrom
560
+ 'c': 14.87900430, # Angstrom
561
+ 'u': 0.105174,
562
+ 'reference': '', 'link': ''}
563
+
564
+ cdb['ws2'] = {'crystal_name': 'WS2',
565
+ 'symmetry': 'dichalcogenide',
566
+ 'elements': ['W', 'S'],
567
+ 'a': 3.19073051, # Angstrom
568
+ 'c': 14.20240204, # Angstrom
569
+ 'u': 0.110759,
570
+ 'reference': '', 'link': ''}
571
+
572
+ cdb['wse2'] = {'crystal_name': 'WSe2',
573
+ 'symmetry': 'dichalcogenide',
574
+ 'elements': ['W', 'Se'],
575
+ 'a': 3.32706918, # Angstrom
576
+ 'c': 15.06895072, # Angstrom
577
+ 'u': 0.111569,
578
+ 'reference': '', 'link': ''}
579
+
580
+ cdb['mose2'] = {'crystal_name': 'MoSe2',
581
+ 'symmetry': 'dichalcogenide',
582
+ 'elements': ['Mo', 'Se'],
583
+ 'a': 3.32694913, # Angstrom
584
+ 'c': 15.45142322, # Angstrom
585
+ 'u': 0.108249,
586
+ 'reference': '', 'link': ''}
587
+
588
+ base_l = [(2./3., 1./3., .5), (1./3., 2./3., 0.), (2./3., 1./3., 0.), (1./3., 2./3., .5)]
589
+ cdb['zno hexagonal'] = {'crystal_name': 'ZnO hexagonal',
590
+ 'symmetry': 'hexagonal',
591
+ 'a': 0.3336, # nm
592
+ 'c': 0.4754, # not np.sqrt(8/3)*1
593
+ 'elements': ['Zn', 'Zn', 'O', 'O'],
594
+ 'unit_cell': [[0.3336, 0., 0.],
595
+ [np.cos(120/180 * np.pi) * 0.3336, np.sin(120/180 * np.pi) * 0.3336, 0.],
596
+ [0., 0., 0.4754]],
597
+ 'base': np.array(base_l),
598
+ 'reference': '', 'link': ''}
599
+
600
+ cdb['pdse2'] = {'crystal_name': 'PdSe2',
601
+ 'symmetry': 'primitive',
602
+ 'unit_cell': (np.identity(3) * (.579441832, 0.594542204, 0.858506072)),
603
+ 'elements': ['Pd'] * 4 + ['Se'] * 8,
604
+ 'base': np.array([[.5, .0, .0], [.0, 0.5, 0.0],
605
+ [.5, 0.5, 0.5], [.0, 0.5, 0.5],
606
+ [0.611300, 0.119356, 0.585891],
607
+ [0.111300, 0.380644, 0.414109],
608
+ [0.388700, 0.619356, 0.914109],
609
+ [0.888700, 0.880644, 0.085891],
610
+ [0.111300, 0.119356, 0.914109],
611
+ [0.611300, 0.380644, 0.085891],
612
+ [0.888700, 0.619356, 0.585891],
613
+ [0.388700, 0.880644, 0.414109]]),
614
+ 'reference': '', 'link': ''}
615
+
616
+ crystal_data_base = cdb
617
+
618
+ # From Appendix C of Kirkland, "Advanced Computing in Electron Microscopy", 2nd ed.
619
+ electronFF = {
620
+ # form factor coefficients
621
+ # Z= 6, chisq= 0.143335
622
+ # a1 b1 a2 b2
623
+ # a3 b3 c1 d1
624
+ # c2 d2 c3 d3
625
+
626
+ # name of the file: feKirkland.txt
627
+ # converted with program sortFF.py
628
+ # form factor parametrized in 1/Angstrom
629
+ # bond_length as a list of atom Sizes, bond radii, angle radii, H-bond radii
630
+
631
+ 'H': {'Z': 1, 'chisq': 0.170190,
632
+ 'bond_length': [0.98, 0.78, 1.20, 0],
633
+ 'fa': [4.20298324e-003, 6.27762505e-002, 3.00907347e-002],
634
+ 'fb': [2.25350888e-001, 2.25366950e-001, 2.25331756e-001],
635
+ 'fc': [6.77756695e-002, 3.56609237e-003, 2.76135815e-002],
636
+ 'fd': [4.38854001e+000, 4.03884823e-001, 1.44490166e+000]},
637
+ 'He': {'Z': 2, 'chisq': 0.396634,
638
+ 'bond_length': [1.45, 1.25, 1.40, 0],
639
+ 'fa': [1.87543704e-005, 4.10595800e-004, 1.96300059e-001],
640
+ 'fb': [2.12427997e-001, 3.32212279e-001, 5.17325152e-001],
641
+ 'fc': [8.36015738e-003, 2.95102022e-002, 4.65928982e-007],
642
+ 'fd': [3.66668239e-001, 1.37171827e+000, 3.75768025e+004]},
643
+ 'Li': {'Z': 3, 'chisq': 0.286232,
644
+ 'bond_length': [1.76, 1.56, 1.82, 0],
645
+ 'fa': [7.45843816e-002, 7.15382250e-002, 1.45315229e-001],
646
+ 'fb': [8.81151424e-001, 4.59142904e-002, 8.81301714e-001],
647
+ 'fc': [1.12125769e+000, 2.51736525e-003, 3.58434971e-001],
648
+ 'fd': [1.88483665e+001, 1.59189995e-001, 6.12371000e+000]},
649
+ 'Be': {'Z': 4, 'chisq': 0.195442,
650
+ 'bond_length': [1.33, 1.13, 1.70, 0],
651
+ 'fa': [6.11642897e-002, 1.25755034e-001, 2.00831548e-001],
652
+ 'fb': [9.90182132e-002, 9.90272412e-002, 1.87392509e+000],
653
+ 'fc': [7.87242876e-001, 1.58847850e-003, 2.73962031e-001],
654
+ 'fd': [9.32794929e+000, 8.91900236e-002, 3.20687658e+000]},
655
+ 'B': {'Z': 5, 'chisq': 0.146989,
656
+ 'bond_length': [1.18, 0.98, 2.08, 0],
657
+ 'fa': [1.25716066e-001, 1.73314452e-001, 1.84774811e-001],
658
+ 'fb': [1.48258830e-001, 1.48257216e-001, 3.34227311e+000],
659
+ 'fc': [1.95250221e-001, 5.29642075e-001, 1.08230500e-003],
660
+ 'fd': [1.97339463e+000, 5.70035553e+000, 5.64857237e-002]},
661
+ 'C': {'Z': 6, 'chisq': 0.102440,
662
+ 'bond_length': [1.12, 0.92, 1.95, 0],
663
+ 'fa': [2.12080767e-001, 1.99811865e-001, 1.68254385e-001],
664
+ 'fb': [2.08605417e-001, 2.08610186e-001, 5.57870773e+000],
665
+ 'fc': [1.42048360e-001, 3.63830672e-001, 8.35012044e-004],
666
+ 'fd': [1.33311887e+000, 3.80800263e+000, 4.03982620e-002]},
667
+ 'N': {'Z': 7, 'chisq': 0.060249,
668
+ 'bond_length': [1.08, 0.88, 1.85, 1.30],
669
+ 'fa': [5.33015554e-001, 5.29008883e-002, 9.24159648e-002],
670
+ 'fb': [2.90952515e-001, 1.03547896e+001, 1.03540028e+001],
671
+ 'fc': [2.61799101e-001, 8.80262108e-004, 1.10166555e-001],
672
+ 'fd': [2.76252723e+000, 3.47681236e-002, 9.93421736e-001]},
673
+ 'O': {'Z': 8, 'chisq': 0.039944,
674
+ 'bond_length': [1.09, 0.89, 1.70, 1.40],
675
+ 'fa': [3.39969204e-001, 3.07570172e-001, 1.30369072e-001],
676
+ 'fb': [3.81570280e-001, 3.81571436e-001, 1.91919745e+001],
677
+ 'fc': [8.83326058e-002, 1.96586700e-001, 9.96220028e-004],
678
+ 'fd': [7.60635525e-001, 2.07401094e+000, 3.03266869e-002]},
679
+ 'F': {'Z': 9, 'chisq': 0.027866,
680
+ 'bond_length': [1.30, 1.10, 1.73, 0],
681
+ 'fa': [2.30560593e-001, 5.26889648e-001, 1.24346755e-001],
682
+ 'fb': [4.80754213e-001, 4.80763895e-001, 3.95306720e+001],
683
+ 'fc': [1.24616894e-003, 7.20452555e-002, 1.53075777e-001],
684
+ 'fd': [2.62181803e-002, 5.92495593e-001, 1.59127671e+000]},
685
+ 'Ne': {'Z': 10, 'chisq': 0.021836,
686
+ 'bond_length': [1.50, 1.30, 1.54, 0],
687
+ 'fa': [4.08371771e-001, 4.54418858e-001, 1.44564923e-001],
688
+ 'fb': [5.88228627e-001, 5.88288655e-001, 1.21246013e+002],
689
+ 'fc': [5.91531395e-002, 1.24003718e-001, 1.64986037e-003],
690
+ 'fd': [4.63963540e-001, 1.23413025e+000, 2.05869217e-002]},
691
+ 'Na': {'Z': 11, 'chisq': 0.064136,
692
+ 'bond_length': [2.10, 1.91, 2.27, 0],
693
+ 'fa': [1.36471662e-001, 7.70677865e-001, 1.56862014e-001],
694
+ 'fb': [4.99965301e-002, 8.81899664e-001, 1.61768579e+001],
695
+ 'fc': [9.96821513e-001, 3.80304670e-002, 1.27685089e-001],
696
+ 'fd': [2.00132610e+001, 2.60516254e-001, 6.99559329e-001]},
697
+ 'Mg': {'Z': 12, 'chisq': 0.051303,
698
+ 'bond_length': [1.80, 1.60, 1.73, 0],
699
+ 'fa': [3.04384121e-001, 7.56270563e-001, 1.01164809e-001],
700
+ 'fb': [8.42014377e-002, 1.64065598e+000, 2.97142975e+001],
701
+ 'fc': [3.45203403e-002, 9.71751327e-001, 1.20593012e-001],
702
+ 'fd': [2.16596094e-001, 1.21236852e+001, 5.60865838e-001]},
703
+ 'Al': {'Z': 13, 'chisq': 0.049529,
704
+ 'bond_length': [1.60, 1.43, 2.05, 0],
705
+ 'fa': [7.77419424e-001, 5.78312036e-002, 4.26386499e-001],
706
+ 'fb': [2.71058227e+000, 7.17532098e+001, 9.13331555e-002],
707
+ 'fc': [1.13407220e-001, 7.90114035e-001, 3.23293496e-002],
708
+ 'fd': [4.48867451e-001, 8.66366718e+000, 1.78503463e-001]},
709
+ 'Si': {'Z': 14, 'chisq': 0.071667,
710
+ 'bond_length': [1.52, 1.32, 2.10, 0],
711
+ 'fa': [1.06543892e+000, 1.20143691e-001, 1.80915263e-001],
712
+ 'fb': [1.04118455e+000, 6.87113368e+001, 8.87533926e-002],
713
+ 'fc': [1.12065620e+000, 3.05452816e-002, 1.59963502e+000],
714
+ 'fd': [3.70062619e+000, 2.14097897e-001, 9.99096638e+000]},
715
+ 'P': {'Z': 15, 'chisq': 0.047673,
716
+ 'bond_length': [1.48, 1.28, 2.08, 0],
717
+ 'fa': [1.05284447e+000, 2.99440284e-001, 1.17460748e-001],
718
+ 'fb': [1.31962590e+000, 1.28460520e-001, 1.02190163e+002],
719
+ 'fc': [9.60643452e-001, 2.63555748e-002, 1.38059330e+000],
720
+ 'fd': [2.87477555e+000, 1.82076844e-001, 7.49165526e+000]},
721
+ 'S': {'Z': 16, 'chisq': 0.033482,
722
+ 'bond_length': [1.47, 1.27, 2.00, 0],
723
+ 'fa': [1.01646916e+000, 4.41766748e-001, 1.21503863e-001],
724
+ 'fb': [1.69181965e+000, 1.74180288e-001, 1.67011091e+002],
725
+ 'fc': [8.27966670e-001, 2.33022533e-002, 1.18302846e+000],
726
+ 'fd': [2.30342810e+000, 1.56954150e-001, 5.85782891e+000]},
727
+ 'Cl': {'Z': 17, 'chisq': 0.206186,
728
+ 'bond_length': [1.70, 1.50, 1.97, 0],
729
+ 'fa': [9.44221116e-001, 4.37322049e-001, 2.54547926e-001],
730
+ 'fb': [2.40052374e-001, 9.30510439e+000, 9.30486346e+000],
731
+ 'fc': [5.47763323e-002, 8.00087488e-001, 1.07488641e-002],
732
+ 'fd': [1.68655688e-001, 2.97849774e+000, 6.84240646e-002]},
733
+ 'Ar': {'Z': 18, 'chisq': 0.263904,
734
+ 'bond_length': [2.00, 1.80, 1.88, 0],
735
+ 'fa': [1.06983288e+000, 4.24631786e-001, 2.43897949e-001],
736
+ 'fb': [2.87791022e-001, 1.24156957e+001, 1.24158868e+001],
737
+ 'fc': [4.79446296e-002, 7.64958952e-001, 8.23128431e-003],
738
+ 'fd': [1.36979796e-001, 2.43940729e+000, 5.27258749e-002]},
739
+ 'K': {'Z': 19, 'chisq': 0.161900,
740
+ 'bond_length': [2.58, 2.38, 2.75, 0],
741
+ 'fa': [6.92717865e-001, 9.65161085e-001, 1.48466588e-001],
742
+ 'fb': [7.10849990e+000, 3.57532901e-001, 3.93763275e-002],
743
+ 'fc': [2.64645027e-002, 1.80883768e+000, 5.43900018e-001],
744
+ 'fd': [1.03591321e-001, 3.22845199e+001, 1.67791374e+000]},
745
+ 'Ca': {'Z': 20, 'chisq': 0.085209,
746
+ 'bond_length': [2.17, 1.97, 1.97, 0],
747
+ 'fa': [3.66902871e-001, 8.66378999e-001, 6.67203300e-001],
748
+ 'fb': [6.14274129e-002, 5.70881727e-001, 7.82965639e+000],
749
+ 'fc': [4.87743636e-001, 1.82406314e+000, 2.20248453e-002],
750
+ 'fd': [1.32531318e+000, 2.10056032e+001, 9.11853450e-002]},
751
+ 'Sc': {'Z': 21, 'chisq': 0.052352,
752
+ 'bond_length': [1.84, 1.64, 1.70, 0],
753
+ 'fa': [3.78871777e-001, 9.00022505e-001, 7.15288914e-001],
754
+ 'fb': [6.98910162e-002, 5.21061541e-001, 7.87707920e+000],
755
+ 'fc': [1.88640973e-002, 4.07945949e-001, 1.61786540e+000],
756
+ 'fd': [8.17512708e-002, 1.11141388e+000, 1.80840759e+001]},
757
+ 'Ti': {'Z': 22, 'chisq': 0.035298,
758
+ 'bond_length': [1.66, 1.46, 1.70, 0],
759
+ 'fa': [3.62383267e-001, 9.84232966e-001, 7.41715642e-001],
760
+ 'fb': [7.54707114e-002, 4.97757309e-001, 8.17659391e+000],
761
+ 'fc': [3.62555269e-001, 1.49159390e+000, 1.61659509e-002],
762
+ 'fd': [9.55524906e-001, 1.62221677e+001, 7.33140839e-002]},
763
+ 'V': {'Z': 23, 'chisq': 0.030745,
764
+ 'bond_length': [1.55, 1.35, 1.70, 0],
765
+ 'fa': [3.52961378e-001, 7.46791014e-001, 1.08364068e+000],
766
+ 'fb': [8.19204103e-002, 8.81189511e+000, 5.10646075e-001],
767
+ 'fc': [1.39013610e+000, 3.31273356e-001, 1.40422612e-002],
768
+ 'fd': [1.48901841e+001, 8.38543079e-001, 6.57432678e-002]},
769
+ 'Cr': {'Z': 24, 'chisq': 0.015287,
770
+ 'bond_length': [1.56, 1.36, 1.70, 0],
771
+ 'fa': [1.34348379e+000, 5.07040328e-001, 4.26358955e-001],
772
+ 'fb': [1.25814353e+000, 1.15042811e+001, 8.53660389e-002],
773
+ 'fc': [1.17241826e-002, 5.11966516e-001, 3.38285828e-001],
774
+ 'fd': [6.00177061e-002, 1.53772451e+000, 6.62418319e-001]},
775
+ 'Mn': {'Z': 25, 'chisq': 0.031274,
776
+ 'bond_length': [1.54, 1.30, 1.70, 0],
777
+ 'fa': [3.26697613e-001, 7.17297000e-001, 1.33212464e+000],
778
+ 'fb': [8.88813083e-002, 1.11300198e+001, 5.82141104e-001],
779
+ 'fc': [2.80801702e-001, 1.15499241e+000, 1.11984488e-002],
780
+ 'fd': [6.71583145e-001, 1.26825395e+001, 5.32334467e-002]},
781
+ 'Fe': {'Z': 26, 'chisq': 0.031315,
782
+ 'bond_length': [1.47, 1.27, 1.70, 0],
783
+ 'fa': [3.13454847e-001, 6.89290016e-001, 1.47141531e+000],
784
+ 'fb': [8.99325756e-002, 1.30366038e+001, 6.33345291e-001],
785
+ 'fc': [1.03298688e+000, 2.58280285e-001, 1.03460690e-002],
786
+ 'fd': [1.16783425e+001, 6.09116446e-001, 4.81610627e-002]},
787
+ 'Co': {'Z': 27, 'chisq': 0.031643,
788
+ 'bond_length': [1.45, 1.25, 1.70, 0],
789
+ 'fa': [3.15878278e-001, 1.60139005e+000, 6.56394338e-001],
790
+ 'fb': [9.46683246e-002, 6.99436449e-001, 1.56954403e+001],
791
+ 'fc': [9.36746624e-001, 9.77562646e-003, 2.38378578e-001],
792
+ 'fd': [1.09392410e+001, 4.37446816e-002, 5.56286483e-001]},
793
+ 'Ni': {'Z': 28, 'chisq': 0.032245,
794
+ 'bond_length': [1.45, 1.25, 1.63, 0],
795
+ 'fa': [1.72254630e+000, 3.29543044e-001, 6.23007200e-001],
796
+ 'fb': [7.76606908e-001, 1.02262360e-001, 1.94156207e+001],
797
+ 'fc': [9.43496513e-003, 8.54063515e-001, 2.21073515e-001],
798
+ 'fd': [3.98684596e-002, 1.04078166e+001, 5.10869330e-001]},
799
+ 'Cu': {'Z': 29, 'chisq': 0.010467,
800
+ 'bond_length': [1.48, 1.28, 1.40, 0],
801
+ 'fa': [3.58774531e-001, 1.76181348e+000, 6.36905053e-001],
802
+ 'fb': [1.06153463e-001, 1.01640995e+000, 1.53659093e+001],
803
+ 'fc': [7.44930667e-003, 1.89002347e-001, 2.29619589e-001],
804
+ 'fd': [3.85345989e-002, 3.98427790e-001, 9.01419843e-001]},
805
+ 'Zn': {'Z': 30, 'chisq': 0.026698,
806
+ 'bond_length': [1.59, 1.39, 1.39, 0],
807
+ 'fa': [5.70893973e-001, 1.98908856e+000, 3.06060585e-001],
808
+ 'fb': [1.26534614e-001, 2.17781965e+000, 3.78619003e+001],
809
+ 'fc': [2.35600223e-001, 3.97061102e-001, 6.85657228e-003],
810
+ 'fd': [3.67019041e-001, 8.66419596e-001, 3.35778823e-002]},
811
+ 'Ga': {'Z': 31, 'chisq': 0.008110,
812
+ 'bond_length': [1.61, 1.41, 1.87, 0],
813
+ 'fa': [6.25528464e-001, 2.05302901e+000, 2.89608120e-001],
814
+ 'fb': [1.10005650e-001, 2.41095786e+000, 4.78685736e+001],
815
+ 'fc': [2.07910594e-001, 3.45079617e-001, 6.55634298e-003],
816
+ 'fd': [3.27807224e-001, 7.43139061e-001, 3.09411369e-002]},
817
+ 'Ge': {'Z': 32, 'chisq': 0.032198,
818
+ 'bond_length': [1.57, 1.37, 1.70, 0],
819
+ 'fa': [5.90952690e-001, 5.39980660e-001, 2.00626188e+000],
820
+ 'fb': [1.18375976e-001, 7.18937433e+001, 1.39304889e+000],
821
+ 'fc': [7.49705041e-001, 1.83581347e-001, 9.52190743e-003],
822
+ 'fd': [6.89943350e+000, 3.64667232e-001, 2.69888650e-002]},
823
+ 'As': {'Z': 33, 'chisq': 0.034014,
824
+ 'bond_length': [1.59, 1.39, 1.85, 0],
825
+ 'fa': [7.77875218e-001, 5.93848150e-001, 1.95918751e+000],
826
+ 'fb': [1.50733157e-001, 1.42882209e+002, 1.74750339e+000],
827
+ 'fc': [1.79880226e-001, 8.63267222e-001, 9.59053427e-003],
828
+ 'fd': [3.31800852e-001, 5.85490274e+000, 2.33777569e-002]},
829
+ 'Se': {'Z': 34, 'chisq': 0.035703,
830
+ 'bond_length': [1.60, 1.40, 1.90, 0],
831
+ 'fa': [9.58390681e-001, 6.03851342e-001, 1.90828931e+000],
832
+ 'fb': [1.83775557e-001, 1.96819224e+002, 2.15082053e+000],
833
+ 'fc': [1.73885956e-001, 9.35265145e-001, 8.62254658e-003],
834
+ 'fd': [3.00006024e-001, 4.92471215e+000, 2.12308108e-002]},
835
+ 'Br': {'Z': 35, 'chisq': 0.039250,
836
+ 'bond_length': [1.80, 1.60, 2.10, 0],
837
+ 'fa': [1.14136170e+000, 5.18118737e-001, 1.85731975e+000],
838
+ 'fb': [2.18708710e-001, 1.93916682e+002, 2.65755396e+000],
839
+ 'fc': [1.68217399e-001, 9.75705606e-001, 7.24187871e-003],
840
+ 'fd': [2.71719918e-001, 4.19482500e+000, 1.99325718e-002]},
841
+ 'Kr': {'Z': 36, 'chisq': 0.045421,
842
+ 'bond_length': [2.10, 1.90, 2.02, 0],
843
+ 'fa': [3.24386970e-001, 1.31732163e+000, 1.79912614e+000],
844
+ 'fb': [6.31317973e+001, 2.54706036e-001, 3.23668394e+000],
845
+ 'fc': [4.29961425e-003, 1.00429433e+000, 1.62188197e-001],
846
+ 'fd': [1.98965610e-002, 3.61094513e+000, 2.45583672e-001]},
847
+ 'Rb': {'Z': 37, 'chisq': 0.130044,
848
+ 'bond_length': [2.75, 2.55, 1.70, 0],
849
+ 'fa': [2.90445351e-001, 2.44201329e+000, 7.69435449e-001],
850
+ 'fb': [3.68420227e-002, 1.16013332e+000, 1.69591472e+001],
851
+ 'fc': [1.58687000e+000, 2.81617593e-003, 1.28663830e-001],
852
+ 'fd': [2.53082574e+000, 1.88577417e-002, 2.10753969e-001]},
853
+ 'Sr': {'Z': 38, 'chisq': 0.188055,
854
+ 'bond_length': [2.35, 2.15, 1.70, 0],
855
+ 'fa': [1.37373086e-002, 1.97548672e+000, 1.59261029e+000],
856
+ 'fb': [1.87469061e-002, 6.36079230e+000, 2.21992482e-001],
857
+ 'fc': [1.73263882e-001, 4.66280378e+000, 1.61265063e-003],
858
+ 'fd': [2.01624958e-001, 2.53027803e+001, 1.53610568e-002]},
859
+ 'Y': {'Z': 39, 'chisq': 0.174927,
860
+ 'bond_length': [2.00, 1.80, 1.70, 0],
861
+ 'fa': [6.75302747e-001, 4.70286720e-001, 2.63497677e+000],
862
+ 'fb': [6.54331847e-002, 1.06108709e+002, 2.06643540e+000],
863
+ 'fc': [1.09621746e-001, 9.60348773e-001, 5.28921555e-003],
864
+ 'fd': [1.93131925e-001, 1.63310938e+000, 1.66083821e-002]},
865
+ 'Zr': {'Z': 40, 'chisq': 0.072078,
866
+ 'bond_length': [1.80, 1.60, 1.70, 0],
867
+ 'fa': [2.64365505e+000, 5.54225147e-001, 7.61376625e-001],
868
+ 'fb': [2.20202699e+000, 1.78260107e+002, 7.67218745e-002],
869
+ 'fc': [6.02946891e-003, 9.91630530e-002, 9.56782020e-001],
870
+ 'fd': [1.55143296e-002, 1.76175995e-001, 1.54330682e+000]},
871
+ 'Nb': {'Z': 41, 'chisq': 0.011800,
872
+ 'bond_length': [1.67, 1.47, 1.70, 0],
873
+ 'fa': [6.59532875e-001, 1.84545854e+000, 1.25584405e+000],
874
+ 'fb': [8.66145490e-002, 5.94774398e+000, 6.40851475e-001],
875
+ 'fc': [1.22253422e-001, 7.06638328e-001, 2.62381591e-003],
876
+ 'fd': [1.66646050e-001, 1.62853268e+000, 8.26257859e-003]},
877
+ 'Mo': {'Z': 42, 'chisq': 0.008976,
878
+ 'bond_length': [1.60, 1.40, 1.70, 0],
879
+ 'fa': [6.10160120e-001, 1.26544000e+000, 1.97428762e+000],
880
+ 'fb': [9.11628054e-002, 5.06776025e-001, 5.89590381e+000],
881
+ 'fc': [6.48028962e-001, 2.60380817e-003, 1.13887493e-001],
882
+ 'fd': [1.46634108e+000, 7.84336311e-003, 1.55114340e-001]},
883
+ 'Tc': {'Z': 43, 'chisq': 0.023771,
884
+ 'bond_length': [1.56, 1.36, 1.70, 0],
885
+ 'fa': [8.55189183e-001, 1.66219641e+000, 1.45575475e+000],
886
+ 'fb': [1.02962151e-001, 7.64907000e+000, 1.01639987e+000],
887
+ 'fc': [1.05445664e-001, 7.71657112e-001, 2.20992635e-003],
888
+ 'fd': [1.42303338e-001, 1.34659349e+000, 7.90358976e-003]},
889
+ 'Ru': {'Z': 44, 'chisq': 0.010613,
890
+ 'bond_length': [1.54, 1.34, 1.70, 0],
891
+ 'fa': [4.70847093e-001, 1.58180781e+000, 2.02419818e+000],
892
+ 'fb': [9.33029874e-002, 4.52831347e-001, 7.11489023e+000],
893
+ 'fc': [1.97036257e-003, 6.26912639e-001, 1.02641320e-001],
894
+ 'fd': [7.56181595e-003, 1.25399858e+000, 1.33786087e-001]},
895
+ 'Rh': {'Z': 45, 'chisq': 0.012895,
896
+ 'bond_length': [1.54, 1.34, 1.70, 0],
897
+ 'fa': [4.20051553e-001, 1.76266507e+000, 2.02735641e+000],
898
+ 'fb': [9.38882628e-002, 4.64441687e-001, 8.19346046e+000],
899
+ 'fc': [1.45487176e-003, 6.22809600e-001, 9.91529915e-002],
900
+ 'fd': [7.82704517e-003, 1.17194153e+000, 1.24532839e-001]},
901
+ 'Pd': {'Z': 46, 'chisq': 0.009172,
902
+ 'bond_length': [1.58, 1.38, 1.63, 0],
903
+ 'fa': [2.10475155e+000, 2.03884487e+000, 1.82067264e-001],
904
+ 'fb': [8.68606470e+000, 3.78924449e-001, 1.42921634e-001],
905
+ 'fc': [9.52040948e-002, 5.91445248e-001, 1.13328676e-003],
906
+ 'fd': [1.17125900e-001, 1.07843808e+000, 7.80252092e-003]},
907
+ 'Ag': {'Z': 47, 'chisq': 0.006648,
908
+ 'bond_length': [1.64, 1.44, 1.72, 0],
909
+ 'fa': [2.07981390e+000, 4.43170726e-001, 1.96515215e+000],
910
+ 'fb': [9.92540297e+000, 1.04920104e-001, 6.40103839e-001],
911
+ 'fc': [5.96130591e-001, 4.78016333e-001, 9.46458470e-002],
912
+ 'fd': [8.89594790e-001, 1.98509407e+000, 1.12744464e-001]},
913
+ 'Cd': {'Z': 48, 'chisq': 0.005588,
914
+ 'bond_length': [1.77, 1.57, 1.58, 0],
915
+ 'fa': [1.63657549e+000, 2.17927989e+000, 7.71300690e-001],
916
+ 'fb': [1.24540381e+001, 1.45134660e+000, 1.26695757e-001],
917
+ 'fc': [6.64193880e-001, 7.64563285e-001, 8.61126689e-002],
918
+ 'fd': [7.77659202e-001, 1.66075210e+000, 1.05728357e-001]},
919
+ 'In': {'Z': 49, 'chisq': 0.002569,
920
+ 'bond_length': [1.86, 1.66, 1.93, 0],
921
+ 'fa': [2.24820632e+000, 1.64706864e+000, 7.88679265e-001],
922
+ 'fb': [1.51913507e+000, 1.30113424e+001, 1.06128184e-001],
923
+ 'fc': [8.12579069e-002, 6.68280346e-001, 6.38467475e-001],
924
+ 'fd': [9.94045620e-002, 1.49742063e+000, 7.18422635e-001]},
925
+ 'Sn': {'Z': 50, 'chisq': 0.005051,
926
+ 'bond_length': [1.82, 1.62, 2.17, 0],
927
+ 'fa': [2.16644620e+000, 6.88691021e-001, 1.92431751e+000],
928
+ 'fb': [1.13174909e+001, 1.10131285e-001, 6.74464853e-001],
929
+ 'fc': [5.65359888e-001, 9.18683861e-001, 7.80542213e-002],
930
+ 'fd': [7.33564610e-001, 1.02310312e+001, 9.31104308e-002]},
931
+ 'Sb': {'Z': 51, 'chisq': 0.004383,
932
+ 'bond_length': [1.79, 1.59, 2.20, 0],
933
+ 'fa': [1.73662114e+000, 9.99871380e-001, 2.13972409e+000],
934
+ 'fb': [8.84334719e-001, 1.38462121e-001, 1.19666432e+001],
935
+ 'fc': [5.60566526e-001, 9.93772747e-001, 7.37374982e-002],
936
+ 'fd': [6.72672880e-001, 8.72330411e+000, 8.78577715e-002]},
937
+ 'Te': {'Z': 52, 'chisq': 0.004105,
938
+ 'bond_length': [1.80, 1.60, 2.06, 0],
939
+ 'fa': [2.09383882e+000, 1.56940519e+000, 1.30941993e+000],
940
+ 'fb': [1.26856869e+001, 1.21236537e+000, 1.66633292e-001],
941
+ 'fc': [6.98067804e-002, 1.04969537e+000, 5.55594354e-001],
942
+ 'fd': [8.30817576e-002, 7.43147857e+000, 6.17487676e-001]},
943
+ 'I': {'Z': 53, 'chisq': 0.004068,
944
+ 'bond_length': [1.90, 1.70, 2.15, 0],
945
+ 'fa': [1.60186925e+000, 1.98510264e+000, 1.48226200e+000],
946
+ 'fb': [1.95031538e-001, 1.36976183e+001, 1.80304795e+000],
947
+ 'fc': [5.53807199e-001, 1.11728722e+000, 6.60720847e-002],
948
+ 'fd': [5.67912340e-001, 6.40879878e+000, 7.86615429e-002]},
949
+ 'Xe': {'Z': 54, 'chisq': 0.004381,
950
+ 'bond_length': [2.30, 2.10, 2.16, 0],
951
+ 'fa': [1.60015487e+000, 1.71644581e+000, 1.84968351e+000],
952
+ 'fb': [2.92913354e+000, 1.55882990e+001, 2.22525983e-001],
953
+ 'fc': [6.23813648e-002, 1.21387555e+000, 5.54051946e-001],
954
+ 'fd': [7.45581223e-002, 5.56013271e+000, 5.21994521e-001]},
955
+ 'Cs': {'Z': 55, 'chisq': 0.042676,
956
+ 'bond_length': [2.93, 2.73, 1.70, 0],
957
+ 'fa': [2.95236854e+000, 4.28105721e-001, 1.89599233e+000],
958
+ 'fb': [6.01461952e+000, 4.64151246e+001, 1.80109756e-001],
959
+ 'fc': [5.48012938e-002, 4.70838600e+000, 5.90356719e-001],
960
+ 'fd': [7.12799633e-002, 4.56702799e+001, 4.70236310e-001]},
961
+ 'Ba': {'Z': 56, 'chisq': 0.043267,
962
+ 'bond_length': [2.44, 2.24, 1.70, 0],
963
+ 'fa': [3.19434243e+000, 1.98289586e+000, 1.55121052e-001],
964
+ 'fb': [9.27352241e+000, 2.28741632e-001, 3.82000231e-002],
965
+ 'fc': [6.73222354e-002, 4.48474211e+000, 5.42674414e-001],
966
+ 'fd': [7.30961745e-002, 2.95703565e+001, 4.08647015e-001]},
967
+ 'La': {'Z': 57, 'chisq': 0.033249,
968
+ 'bond_length': [2.08, 1.88, 1.70, 0],
969
+ 'fa': [2.05036425e+000, 1.42114311e-001, 3.23538151e+000],
970
+ 'fb': [2.20348417e-001, 3.96438056e-002, 9.56979169e+000],
971
+ 'fc': [6.34683429e-002, 3.97960586e+000, 5.20116711e-001],
972
+ 'fd': [6.92443091e-002, 2.53178406e+001, 3.83614098e-001]},
973
+ 'Ce': {'Z': 58, 'chisq': 0.029355,
974
+ 'bond_length': [2.02, 1.82, 1.70, 0],
975
+ 'fa': [3.22990759e+000, 1.57618307e-001, 2.13477838e+000],
976
+ 'fb': [9.94660135e+000, 4.15378676e-002, 2.40480572e-001],
977
+ 'fc': [5.01907609e-001, 3.80889010e+000, 5.96625028e-002],
978
+ 'fd': [3.66252019e-001, 2.43275968e+001, 6.59653503e-002]},
979
+ 'Pr': {'Z': 59, 'chisq': 0.029725,
980
+ 'bond_length': [2.03, 1.83, 1.70, 0],
981
+ 'fa': [1.58189324e-001, 3.18141995e+000, 2.27622140e+000],
982
+ 'fb': [3.91309056e-002, 1.04139545e+001, 2.81671757e-001],
983
+ 'fc': [3.97705472e+000, 5.58448277e-002, 4.85207954e-001],
984
+ 'fd': [2.61872978e+001, 6.30921695e-002, 3.54234369e-001]},
985
+ 'Nd': {'Z': 60, 'chisq': 0.027597,
986
+ 'bond_length': [2.02, 1.82, 1.70, 0],
987
+ 'fa': [1.81379417e-001, 3.17616396e+000, 2.35221519e+000],
988
+ 'fb': [4.37324793e-002, 1.07842572e+001, 3.05571833e-001],
989
+ 'fc': [3.83125763e+000, 5.25889976e-002, 4.70090742e-001],
990
+ 'fd': [2.54745408e+001, 6.02676073e-002, 3.39017003e-001]},
991
+ 'Pm': {'Z': 61, 'chisq': 0.025208,
992
+ 'bond_length': [2.01, 1.81, 1.70, 0],
993
+ 'fa': [1.92986811e-001, 2.43756023e+000, 3.17248504e+000],
994
+ 'fb': [4.37785970e-002, 3.29336996e-001, 1.11259996e+001],
995
+ 'fc': [3.58105414e+000, 4.56529394e-001, 4.94812177e-002],
996
+ 'fd': [2.46709586e+001, 3.24990282e-001, 5.76553100e-002]},
997
+ 'Sm': {'Z': 62, 'chisq': 0.023540,
998
+ 'bond_length': [2.00, 1.80, 1.70, 0],
999
+ 'fa': [2.12002595e-001, 3.16891754e+000, 2.51503494e+000],
1000
+ 'fb': [4.57703608e-002, 1.14536599e+001, 3.55561054e-001],
1001
+ 'fc': [4.44080845e-001, 3.36742101e+000, 4.65652543e-002],
1002
+ 'fd': [3.11953363e-001, 2.40291435e+001, 5.52266819e-002]},
1003
+ 'Eu': {'Z': 63, 'chisq': 0.022204,
1004
+ 'bond_length': [2.24, 2.04, 1.70, 0],
1005
+ 'fa': [2.59355002e+000, 3.16557522e+000, 2.29402652e-001],
1006
+ 'fb': [3.82452612e-001, 1.17675155e+001, 4.76642249e-002],
1007
+ 'fc': [4.32257780e-001, 3.17261920e+000, 4.37958317e-002],
1008
+ 'fd': [2.99719833e-001, 2.34462738e+001, 5.29440680e-002]},
1009
+ 'Gd': {'Z': 64, 'chisq': 0.017492,
1010
+ 'bond_length': [2.00, 1.80, 1.70, 0],
1011
+ 'fa': [3.19144939e+000, 2.55766431e+000, 3.32681934e-001],
1012
+ 'fb': [1.20224655e+001, 4.08338876e-001, 5.85819814e-002],
1013
+ 'fc': [4.14243130e-002, 2.61036728e+000, 4.20526863e-001],
1014
+ 'fd': [5.06771477e-002, 1.99344244e+001, 2.85686240e-001]},
1015
+ 'Tb': {'Z': 65, 'chisq': 0.020036,
1016
+ 'bond_length': [1.98, 1.78, 1.70, 0],
1017
+ 'fa': [2.59407462e-001, 3.16177855e+000, 2.75095751e+000],
1018
+ 'fb': [5.04689354e-002, 1.23140183e+001, 4.38337626e-001],
1019
+ 'fc': [2.79247686e+000, 3.85931001e-002, 4.10881708e-001],
1020
+ 'fd': [2.23797309e+001, 4.87920992e-002, 2.77622892e-001]},
1021
+ 'Dy': {'Z': 66, 'chisq': 0.019351,
1022
+ 'bond_length': [1.97, 1.77, 1.70, 0],
1023
+ 'fa': [3.16055396e+000, 2.82751709e+000, 2.75140255e-001],
1024
+ 'fb': [1.25470414e+001, 4.67899094e-001, 5.23226982e-002],
1025
+ 'fc': [4.00967160e-001, 2.63110834e+000, 3.61333817e-002],
1026
+ 'fd': [2.67614884e-001, 2.19498166e+001, 4.68871497e-002]},
1027
+ 'Ho': {'Z': 67, 'chisq': 0.018720,
1028
+ 'bond_length': [1.98, 1.78, 1.70, 0],
1029
+ 'fa': [2.88642467e-001, 2.90567296e+000, 3.15960159e+000],
1030
+ 'fb': [5.40507687e-002, 4.97581077e-001, 1.27599505e+001],
1031
+ 'fc': [3.91280259e-001, 2.48596038e+000, 3.37664478e-002],
1032
+ 'fd': [2.58151831e-001, 2.15400972e+001, 4.50664323e-002]},
1033
+ 'Er': {'Z': 68, 'chisq': 0.018677,
1034
+ 'bond_length': [1.96, 1.76, 1.70, 0],
1035
+ 'fa': [3.15573213e+000, 3.11519560e-001, 2.97722406e+000],
1036
+ 'fb': [1.29729009e+001, 5.81399387e-002, 5.31213394e-001],
1037
+ 'fc': [3.81563854e-001, 2.40247532e+000, 3.15224214e-002],
1038
+ 'fd': [2.49195776e-001, 2.13627616e+001, 4.33253257e-002]},
1039
+ 'Tm': {'Z': 69, 'chisq': 0.018176,
1040
+ 'bond_length': [1.95, 1.75, 1.70, 0],
1041
+ 'fa': [3.15591970e+000, 3.22544710e-001, 3.05569053e+000],
1042
+ 'fb': [1.31232407e+001, 5.97223323e-002, 5.61876773e-001],
1043
+ 'fc': [2.92845100e-002, 3.72487205e-001, 2.27833695e+000],
1044
+ 'fd': [4.16534255e-002, 2.40821967e-001, 2.10034185e+001]},
1045
+ 'Yb': {'Z': 70, 'chisq': 0.018460,
1046
+ 'bond_length': [2.10, 1.90, 1.70, 0],
1047
+ 'fa': [3.10794704e+000, 3.14091221e+000, 3.75660454e-001],
1048
+ 'fb': [6.06347847e-001, 1.33705269e+001, 7.29814740e-002],
1049
+ 'fc': [3.61901097e-001, 2.45409082e+000, 2.72383990e-002],
1050
+ 'fd': [2.32652051e-001, 2.12695209e+001, 3.99969597e-002]},
1051
+ 'Lu': {'Z': 71, 'chisq': 0.015021,
1052
+ 'bond_length': [1.93, 1.73, 1.70, 0],
1053
+ 'fa': [3.11446863e+000, 5.39634353e-001, 3.06460915e+000],
1054
+ 'fb': [1.38968881e+001, 8.91708508e-002, 6.79919563e-001],
1055
+ 'fc': [2.58563745e-002, 2.13983556e+000, 3.47788231e-001],
1056
+ 'fd': [3.82808522e-002, 1.80078788e+001, 2.22706591e-001]},
1057
+ 'Hf': {'Z': 72, 'chisq': 0.012070,
1058
+ 'bond_length': [1.78, 1.58, 1.70, 0],
1059
+ 'fa': [3.01166899e+000, 3.16284788e+000, 6.33421771e-001],
1060
+ 'fb': [7.10401889e-001, 1.38262192e+001, 9.48486572e-002],
1061
+ 'fc': [3.41417198e-001, 1.53566013e+000, 2.40723773e-002],
1062
+ 'fd': [2.14129678e-001, 1.55298698e+001, 3.67833690e-002]},
1063
+ 'Ta': {'Z': 73, 'chisq': 0.010775,
1064
+ 'bond_length': [1.67, 1.47, 1.70, 0],
1065
+ 'fa': [3.20236821e+000, 8.30098413e-001, 2.86552297e+000],
1066
+ 'fb': [1.38446369e+001, 1.18381581e-001, 7.66369118e-001],
1067
+ 'fc': [2.24813887e-002, 1.40165263e+000, 3.33740596e-001],
1068
+ 'fd': [3.52934622e-002, 1.46148877e+001, 2.05704486e-001]},
1069
+ 'W': {'Z': 74, 'chisq': 0.009479,
1070
+ 'bond_length': [1.61, 1.41, 1.70, 0],
1071
+ 'fa': [9.24906855e-001, 2.75554557e+000, 3.30440060e+000],
1072
+ 'fb': [1.28663377e-001, 7.65826479e-001, 1.34471170e+001],
1073
+ 'fc': [3.29973862e-001, 1.09916444e+000, 2.06498883e-002],
1074
+ 'fd': [1.98218895e-001, 1.35087534e+001, 3.38918459e-002]},
1075
+ 'Re': {'Z': 75, 'chisq': 0.004620,
1076
+ 'bond_length': [1.58, 1.38, 1.70, 0],
1077
+ 'fa': [1.96952105e+000, 1.21726619e+000, 4.10391685e+000],
1078
+ 'fb': [4.98830620e+001, 1.33243809e-001, 1.84396916e+000],
1079
+ 'fc': [2.90791978e-002, 2.30696669e-001, 6.08840299e-001],
1080
+ 'fd': [2.84192813e-002, 1.90968784e-001, 1.37090356e+000]},
1081
+ 'Os': {'Z': 76, 'chisq': 0.003085,
1082
+ 'bond_length': [1.55, 1.35, 1.70, 0],
1083
+ 'fa': [2.06385867e+000, 1.29603406e+000, 3.96920673e+000],
1084
+ 'fb': [4.05671697e+001, 1.46559047e-001, 1.82561596e+000],
1085
+ 'fc': [2.69835487e-002, 2.31083999e-001, 6.30466774e-001],
1086
+ 'fd': [2.84172045e-002, 1.79765184e-001, 1.38911543e+000]},
1087
+ 'Ir': {'Z': 77, 'chisq': 0.003924,
1088
+ 'bond_length': [1.56, 1.36, 1.70, 0],
1089
+ 'fa': [2.21522726e+000, 1.37573155e+000, 3.78244405e+000],
1090
+ 'fb': [3.24464090e+001, 1.60920048e-001, 1.78756553e+000],
1091
+ 'fc': [2.44643240e-002, 2.36932016e-001, 6.48471412e-001],
1092
+ 'fd': [2.82909938e-002, 1.70692368e-001, 1.37928390e+000]},
1093
+ 'Pt': {'Z': 78, 'chisq': 0.003817,
1094
+ 'bond_length': [1.59, 1.39, 1.72, 0],
1095
+ 'fa': [9.84697940e-001, 2.73987079e+000, 3.61696715e+000],
1096
+ 'fb': [1.60910839e-001, 7.18971667e-001, 1.29281016e+001],
1097
+ 'fc': [3.02885602e-001, 2.78370726e-001, 1.52124129e-002],
1098
+ 'fd': [1.70134854e-001, 1.49862703e+000, 2.83510822e-002]},
1099
+ 'Au': {'Z': 79, 'chisq': 0.003143,
1100
+ 'bond_length': [1.64, 1.44, 1.66, 0],
1101
+ 'fa': [9.61263398e-001, 3.69581030e+000, 2.77567491e+000],
1102
+ 'fb': [1.70932277e-001, 1.29335319e+001, 6.89997070e-001],
1103
+ 'fc': [2.95414176e-001, 3.11475743e-001, 1.43237267e-002],
1104
+ 'fd': [1.63525510e-001, 1.39200901e+000, 2.71265337e-002]},
1105
+ 'Hg': {'Z': 80, 'chisq': 0.002717,
1106
+ 'bond_length': [1.77, 1.57, 1.55, 0],
1107
+ 'fa': [1.29200491e+000, 2.75161478e+000, 3.49387949e+000],
1108
+ 'fb': [1.83432865e-001, 9.42368371e-001, 1.46235654e+001],
1109
+ 'fc': [2.77304636e-001, 4.30232810e-001, 1.48294351e-002],
1110
+ 'fd': [1.55110144e-001, 1.28871670e+000, 2.61903834e-002]},
1111
+ 'Tl': {'Z': 81, 'chisq': 0.003492,
1112
+ 'bond_length': [1.92, 1.72, 1.96, 0],
1113
+ 'fa': [3.75964730e+000, 3.21195904e+000, 6.47767825e-001],
1114
+ 'fb': [1.35041513e+001, 6.66330993e-001, 9.22518234e-002],
1115
+ 'fc': [2.76123274e-001, 3.18838810e-001, 1.31668419e-002],
1116
+ 'fd': [1.50312897e-001, 1.12565588e+000, 2.48879842e-002]},
1117
+ 'Pb': {'Z': 82, 'chisq': 0.001158,
1118
+ 'bond_length': [1.95, 1.75, 2.02, 0],
1119
+ 'fa': [1.00795975e+000, 3.09796153e+000, 3.61296864e+000],
1120
+ 'fb': [1.17268427e-001, 8.80453235e-001, 1.47325812e+001],
1121
+ 'fc': [2.62401476e-001, 4.05621995e-001, 1.31812509e-002],
1122
+ 'fd': [1.43491014e-001, 1.04103506e+000, 2.39575415e-002]},
1123
+ 'Bi': {'Z': 83, 'chisq': 0.026436,
1124
+ 'bond_length': [1.90, 1.70, 1.70, 0],
1125
+ 'fa': [1.59826875e+000, 4.38233925e+000, 2.06074719e+000],
1126
+ 'fb': [1.56897471e-001, 2.47094692e+000, 5.72438972e+001],
1127
+ 'fc': [1.94426023e-001, 8.22704978e-001, 2.33226953e-002],
1128
+ 'fd': [1.32979109e-001, 9.56532528e-001, 2.23038435e-002]},
1129
+ 'Po': {'Z': 84, 'chisq': 0.008962,
1130
+ 'bond_length': [1.96, 1.76, 1.70, 0],
1131
+ 'fa': [1.71463223e+000, 2.14115960e+000, 4.37512413e+000],
1132
+ 'fb': [9.79262841e+001, 2.10193717e-001, 3.66948812e+000],
1133
+ 'fc': [2.16216680e-002, 1.97843837e-001, 6.52047920e-001],
1134
+ 'fd': [1.98456144e-002, 1.33758807e-001, 7.80432104e-001]},
1135
+ 'At': {'Z': 85, 'chisq': 0.033776,
1136
+ 'bond_length': [2.00, 1.80, 1.70, 0],
1137
+ 'fa': [1.48047794e+000, 2.09174630e+000, 4.75246033e+000],
1138
+ 'fb': [1.25943919e+002, 1.83803008e-001, 4.19890596e+000],
1139
+ 'fc': [1.85643958e-002, 2.05859375e-001, 7.13540948e-001],
1140
+ 'fd': [1.81383503e-002, 1.33035404e-001, 7.03031938e-001]},
1141
+ 'Rn': {'Z': 86, 'chisq': 0.050132,
1142
+ 'bond_length': [2.40, 2.20, 1.70, 0],
1143
+ 'fa': [6.30022295e-001, 3.80962881e+000, 3.89756067e+000],
1144
+ 'fb': [1.40909762e-001, 3.08515540e+001, 6.51559763e-001],
1145
+ 'fc': [2.40755100e-001, 2.62868577e+000, 3.14285931e-002],
1146
+ 'fd': [1.08899672e-001, 6.42383261e+000, 2.42346699e-002]},
1147
+ 'Fr': {'Z': 87, 'chisq': 0.056720,
1148
+ 'bond_length': [3.00, 2.80, 1.70, 0],
1149
+ 'fa': [5.23288135e+000, 2.48604205e+000, 3.23431354e-001],
1150
+ 'fb': [8.60599536e+000, 3.04543982e-001, 3.87759096e-002],
1151
+ 'fc': [2.55403596e-001, 5.53607228e-001, 5.75278889e-003],
1152
+ 'fd': [1.28717724e-001, 5.36977452e-001, 1.29417790e-002]},
1153
+ 'Ra': {'Z': 88, 'chisq': 0.081498,
1154
+ 'bond_length': [2.46, 2.26, 1.70, 0],
1155
+ 'fa': [1.44192685e+000, 3.55291725e+000, 3.91259586e+000],
1156
+ 'fb': [1.18740873e-001, 1.01739750e+000, 6.31814783e+001],
1157
+ 'fc': [2.16173519e-001, 3.94191605e+000, 4.60422605e-002],
1158
+ 'fd': [9.55806441e-002, 3.50602732e+001, 2.20850385e-002]},
1159
+ 'Ac': {'Z': 89, 'chisq': 0.077643,
1160
+ 'bond_length': [2.09, 1.88, 1.70, 0],
1161
+ 'fa': [1.45864127e+000, 4.18945405e+000, 3.65866182e+000],
1162
+ 'fb': [1.07760494e-001, 8.89090649e+001, 1.05088931e+000],
1163
+ 'fc': [2.08479229e-001, 3.16528117e+000, 5.23892556e-002],
1164
+ 'fd': [9.09335557e-002, 3.13297788e+001, 2.08807697e-002]},
1165
+ 'Th': {'Z': 90, 'chisq': 0.048096,
1166
+ 'bond_length': [2.00, 1.80, 1.70, 0],
1167
+ 'fa': [1.19014064e+000, 2.55380607e+000, 4.68110181e+000],
1168
+ 'fb': [7.73468729e-002, 6.59693681e-001, 1.28013896e+001],
1169
+ 'fc': [2.26121303e-001, 3.58250545e-001, 7.82263950e-003],
1170
+ 'fd': [1.08632194e-001, 4.56765664e-001, 1.62623474e-002]},
1171
+ 'Pa': {'Z': 91, 'chisq': 0.070186,
1172
+ 'bond_length': [1.83, 1.63, 1.70, 0],
1173
+ 'fa': [4.68537504e+000, 2.98413708e+000, 8.91988061e-001],
1174
+ 'fb': [1.44503632e+001, 5.56438592e-001, 6.69512914e-002],
1175
+ 'fc': [2.24825384e-001, 3.04444846e-001, 9.48162708e-003],
1176
+ 'fd': [1.03235396e-001, 4.27255647e-001, 1.77730611e-002]},
1177
+ 'U': {'Z': 92, 'chisq': 0.072478,
1178
+ 'bond_length': [1.76, 1.56, 1.86, 0],
1179
+ 'fa': [4.63343606e+000, 3.18157056e+000, 8.76455075e-001],
1180
+ 'fb': [1.63377267e+001, 5.69517868e-001, 6.88860012e-002],
1181
+ 'fc': [2.21685477e-001, 2.72917100e-001, 1.11737298e-002],
1182
+ 'fd': [9.84254550e-002, 4.09470917e-001, 1.86215410e-002]},
1183
+ 'Np': {'Z': 93, 'chisq': 0.074792,
1184
+ 'bond_length': [1.80, 1.60, 1.70, 0],
1185
+ 'fa': [4.56773888e+000, 3.40325179e+000, 8.61841923e-001],
1186
+ 'fb': [1.90992795e+001, 5.90099634e-001, 7.03204851e-002],
1187
+ 'fc': [2.19728870e-001, 2.38176903e-001, 1.38306499e-002],
1188
+ 'fd': [9.36334280e-002, 3.93554882e-001, 1.94437286e-002]},
1189
+ 'Pu': {'Z': 94, 'chisq': 0.071877,
1190
+ 'bond_length': [1.84, 1.64, 1.70, 0],
1191
+ 'fa': [5.45671123e+000, 1.11687906e-001, 3.30260343e+000],
1192
+ 'fb': [1.01892720e+001, 3.98131313e-002, 3.14622212e-001],
1193
+ 'fc': [1.84568319e-001, 4.93644263e-001, 3.57484743e+000],
1194
+ 'fd': [1.04220860e-001, 4.63080540e-001, 2.19369542e+001]},
1195
+ 'Am': {'Z': 95, 'chisq': 0.062156,
1196
+ 'bond_length': [2.01, 1.81, 1.70, 0],
1197
+ 'fa': [5.38321999e+000, 1.23343236e-001, 3.46469090e+000],
1198
+ 'fb': [1.07289857e+001, 4.15137806e-002, 3.39326208e-001],
1199
+ 'fc': [1.75437132e-001, 3.39800073e+000, 4.69459519e-001],
1200
+ 'fd': [9.98932346e-002, 2.11601535e+001, 4.51996970e-001]},
1201
+ 'Cm': {'Z': 96, 'chisq': 0.050111,
1202
+ 'bond_length': [2.20, 2.00, 1.70, 0],
1203
+ 'fa': [5.38402377e+000, 3.49861264e+000, 1.88039547e-001],
1204
+ 'fb': [1.11211419e+001, 3.56750210e-001, 5.39853583e-002],
1205
+ 'fc': [1.69143137e-001, 3.19595016e+000, 4.64393059e-001],
1206
+ 'fd': [9.60082633e-002, 1.80694389e+001, 4.36318197e-001]},
1207
+ 'Bk': {'Z': 97, 'chisq': 0.044081,
1208
+ 'bond_length': [2.20, 2.00, 1.70, 0],
1209
+ 'fa': [3.66090688e+000, 2.03054678e-001, 5.30697515e+000],
1210
+ 'fb': [3.84420906e-001, 5.48547131e-002, 1.17150262e+001],
1211
+ 'fc': [1.60934046e-001, 3.04808401e+000, 4.43610295e-001],
1212
+ 'fd': [9.21020329e-002, 1.73525367e+001, 4.27132359e-001]},
1213
+ 'Cf': {'Z': 98, 'chisq': 0.041053,
1214
+ 'bond_length': [2.20, 2.00, 1.70, 0],
1215
+ 'fa': [3.94150390e+000, 5.16915345e+000, 1.61941074e-001],
1216
+ 'fb': [4.18246722e-001, 1.25201788e+001, 4.81540117e-002],
1217
+ 'fc': [4.15299561e-001, 2.91761325e+000, 1.51474927e-001],
1218
+ 'fd': [4.24913856e-001, 1.90899693e+001, 8.81568925e-002]}
1219
+ }