/
vector_library.py
99 lines (81 loc) · 2.97 KB
/
vector_library.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# -*- coding: utf-8 -*-
# Copyright 2017-2024 The diffsims developers
#
# This file is part of diffsims.
#
# diffsims is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# diffsims is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with diffsims. If not, see <http://www.gnu.org/licenses/>.
import pickle
__all__ = [
"DiffractionVectorLibrary",
"load_VectorLibrary",
]
def load_VectorLibrary(filename, safety=False):
"""Loads a previously saved vectorlibrary.
Parameters
----------
filename : str
The location of the file to be loaded
safety : bool (defaults to False)
Unpickling is risky, this variable requires you to acknowledge this.
Returns
-------
VectorLibrary
Previously saved Library
See Also
--------
VectorLibrary.pickle_library
"""
if safety:
with open(filename, "rb") as handle:
return pickle.load(handle)
else:
raise RuntimeError(
"Unpickling is risky, turn safety to True if \
trust the author of this content"
)
class DiffractionVectorLibrary(dict):
"""Maps crystal structure (phase) to diffraction vectors.
The library is a dictionary mapping from a phase name to phase information.
The phase information is stored as a dictionary with the following entries:
'indices' : np.array
List of peak indices [hkl1, hkl2] as a 2D array.
'measurements' : np.array
List of vector measurements [len1, len2, angle] in the same order as
the indices. Lengths in reciprocal Angstrom and angles in radians.
Attributes
----------
identifiers : list of strings/ints
A list of phase identifiers referring to different atomic structures.
structures : list of diffpy.structure.Structure objects.
A list of diffpy.structure.Structure objects describing the atomic
structure associated with each phase in the library.
reciprocal_radius : float
Maximum reciprocal radius used when generating the library.
"""
def __init__(self, *args, **kwargs):
self.identifiers = None
self.structures = None
self.reciprocal_radius = None
def pickle_library(self, filename):
"""Saves a vector library in the pickle format.
Parameters
----------
filename : str
The location in which to save the file
See Also
--------
load_VectorLibrary
"""
with open(filename, "wb") as handle:
pickle.dump(self, handle, protocol=pickle.HIGHEST_PROTOCOL)