advisor-scattering 0.5.2__py3-none-any.whl → 0.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.
- advisor/controllers/app_controller.py +2 -1
- advisor/domain/__init__.py +4 -0
- advisor/domain/core/lab.py +9 -2
- advisor/domain/core/lattice.py +2 -5
- advisor/domain/core/sample.py +9 -2
- advisor/domain/orientation.py +219 -0
- advisor/domain/orientation_calculator.py +174 -0
- advisor/features/__init__.py +7 -4
- advisor/features/scattering_geometry/domain/brillouin_calculator.py +133 -63
- advisor/features/scattering_geometry/domain/core.py +187 -134
- advisor/features/scattering_geometry/ui/components/hk_angles_components.py +175 -79
- advisor/features/scattering_geometry/ui/components/hkl_scan_components.py +42 -17
- advisor/features/scattering_geometry/ui/components/hkl_to_angles_components.py +175 -79
- advisor/features/scattering_geometry/ui/scattering_geometry_tab.py +57 -48
- advisor/ui/dialogs/__init__.py +7 -0
- advisor/ui/dialogs/diffraction_test_dialog.py +264 -0
- advisor/ui/init_window.py +33 -0
- {advisor_scattering-0.5.2.dist-info → advisor_scattering-0.9.1.dist-info}/METADATA +4 -12
- {advisor_scattering-0.5.2.dist-info → advisor_scattering-0.9.1.dist-info}/RECORD +22 -18
- {advisor_scattering-0.5.2.dist-info → advisor_scattering-0.9.1.dist-info}/WHEEL +1 -1
- {advisor_scattering-0.5.2.dist-info → advisor_scattering-0.9.1.dist-info}/entry_points.txt +0 -0
- {advisor_scattering-0.5.2.dist-info → advisor_scattering-0.9.1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""Dialog for importing orientation from diffraction test data."""
|
|
4
|
+
|
|
5
|
+
from PyQt5.QtCore import Qt
|
|
6
|
+
from PyQt5.QtWidgets import (QDialog, QDoubleSpinBox, QFormLayout, QGroupBox,
|
|
7
|
+
QHBoxLayout, QHeaderView, QLabel, QMessageBox,
|
|
8
|
+
QPushButton, QTableWidget, QTableWidgetItem,
|
|
9
|
+
QVBoxLayout)
|
|
10
|
+
|
|
11
|
+
from advisor.domain.orientation import fit_orientation_from_diffraction_tests
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class DiffractionTestDialog(QDialog):
|
|
15
|
+
"""Dialog for entering diffraction test data and calculating orientation.
|
|
16
|
+
|
|
17
|
+
This dialog allows users to input multiple diffraction tests (H, K, L, energy,
|
|
18
|
+
tth, theta, phi, chi) and calculates the optimal Euler angles (roll, pitch, yaw)
|
|
19
|
+
that best fit the data.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
def __init__(self, lattice_params: dict, parent=None):
|
|
23
|
+
"""Initialize the dialog.
|
|
24
|
+
|
|
25
|
+
Args:
|
|
26
|
+
lattice_params: Dictionary containing lattice parameters (a, b, c, alpha, beta, gamma)
|
|
27
|
+
parent: Parent widget
|
|
28
|
+
"""
|
|
29
|
+
super().__init__(parent)
|
|
30
|
+
self.lattice_params = lattice_params
|
|
31
|
+
self.result = None # Will store (roll, pitch, yaw) on success
|
|
32
|
+
|
|
33
|
+
self.setWindowTitle("Import Orientation from Diffraction Tests")
|
|
34
|
+
self.setMinimumWidth(800)
|
|
35
|
+
self.setMinimumHeight(550)
|
|
36
|
+
|
|
37
|
+
self._init_ui()
|
|
38
|
+
|
|
39
|
+
def _init_ui(self):
|
|
40
|
+
"""Initialize the UI components."""
|
|
41
|
+
layout = QVBoxLayout(self)
|
|
42
|
+
|
|
43
|
+
# Instructions label
|
|
44
|
+
instructions = QLabel(
|
|
45
|
+
"Enter diffraction test data below. Each row represents a measurement "
|
|
46
|
+
"with known HKL indices and measured angles. At least one test is required."
|
|
47
|
+
)
|
|
48
|
+
instructions.setWordWrap(True)
|
|
49
|
+
layout.addWidget(instructions)
|
|
50
|
+
|
|
51
|
+
# Table for diffraction tests
|
|
52
|
+
self.table = QTableWidget()
|
|
53
|
+
self.table.setColumnCount(8)
|
|
54
|
+
self.table.setHorizontalHeaderLabels(
|
|
55
|
+
["H", "K", "L", "Energy (eV)", "tth (°)", "θ (°)", "φ (°)", "χ (°)"]
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
# Set column resize mode
|
|
59
|
+
header = self.table.horizontalHeader()
|
|
60
|
+
for i in range(8):
|
|
61
|
+
header.setSectionResizeMode(i, QHeaderView.Stretch)
|
|
62
|
+
|
|
63
|
+
# Add initial empty rows
|
|
64
|
+
self._add_row()
|
|
65
|
+
self._add_row()
|
|
66
|
+
|
|
67
|
+
layout.addWidget(self.table)
|
|
68
|
+
|
|
69
|
+
# Row management buttons
|
|
70
|
+
row_buttons_layout = QHBoxLayout()
|
|
71
|
+
|
|
72
|
+
add_row_btn = QPushButton("Add Row")
|
|
73
|
+
add_row_btn.clicked.connect(self._add_row)
|
|
74
|
+
row_buttons_layout.addWidget(add_row_btn)
|
|
75
|
+
|
|
76
|
+
remove_row_btn = QPushButton("Remove Selected Row")
|
|
77
|
+
remove_row_btn.clicked.connect(self._remove_selected_row)
|
|
78
|
+
row_buttons_layout.addWidget(remove_row_btn)
|
|
79
|
+
|
|
80
|
+
row_buttons_layout.addStretch()
|
|
81
|
+
layout.addLayout(row_buttons_layout)
|
|
82
|
+
|
|
83
|
+
# Results display area
|
|
84
|
+
self.results_group = QGroupBox("Calculated Orientation")
|
|
85
|
+
results_layout = QFormLayout(self.results_group)
|
|
86
|
+
|
|
87
|
+
self.roll_result = QDoubleSpinBox()
|
|
88
|
+
self.roll_result.setRange(-180, 180)
|
|
89
|
+
self.roll_result.setDecimals(4)
|
|
90
|
+
self.roll_result.setReadOnly(True)
|
|
91
|
+
self.roll_result.setSuffix(" °")
|
|
92
|
+
results_layout.addRow("Roll:", self.roll_result)
|
|
93
|
+
|
|
94
|
+
self.pitch_result = QDoubleSpinBox()
|
|
95
|
+
self.pitch_result.setRange(-180, 180)
|
|
96
|
+
self.pitch_result.setDecimals(4)
|
|
97
|
+
self.pitch_result.setReadOnly(True)
|
|
98
|
+
self.pitch_result.setSuffix(" °")
|
|
99
|
+
results_layout.addRow("Pitch:", self.pitch_result)
|
|
100
|
+
|
|
101
|
+
self.yaw_result = QDoubleSpinBox()
|
|
102
|
+
self.yaw_result.setRange(-180, 180)
|
|
103
|
+
self.yaw_result.setDecimals(4)
|
|
104
|
+
self.yaw_result.setReadOnly(True)
|
|
105
|
+
self.yaw_result.setSuffix(" °")
|
|
106
|
+
results_layout.addRow("Yaw:", self.yaw_result)
|
|
107
|
+
|
|
108
|
+
self.error_label = QLabel("Residual Error: --")
|
|
109
|
+
results_layout.addRow(self.error_label)
|
|
110
|
+
|
|
111
|
+
self.results_group.setVisible(False)
|
|
112
|
+
layout.addWidget(self.results_group)
|
|
113
|
+
|
|
114
|
+
# Action buttons
|
|
115
|
+
button_layout = QHBoxLayout()
|
|
116
|
+
|
|
117
|
+
self.calculate_btn = QPushButton("Calculate Orientation")
|
|
118
|
+
self.calculate_btn.clicked.connect(self._calculate_orientation)
|
|
119
|
+
button_layout.addWidget(self.calculate_btn)
|
|
120
|
+
|
|
121
|
+
self.apply_btn = QPushButton("Apply and Close")
|
|
122
|
+
self.apply_btn.clicked.connect(self._apply_and_close)
|
|
123
|
+
self.apply_btn.setEnabled(False)
|
|
124
|
+
button_layout.addWidget(self.apply_btn)
|
|
125
|
+
|
|
126
|
+
cancel_btn = QPushButton("Cancel")
|
|
127
|
+
cancel_btn.clicked.connect(self.reject)
|
|
128
|
+
button_layout.addWidget(cancel_btn)
|
|
129
|
+
|
|
130
|
+
layout.addLayout(button_layout)
|
|
131
|
+
|
|
132
|
+
def _add_row(self):
|
|
133
|
+
"""Add a new empty row to the table."""
|
|
134
|
+
row = self.table.rowCount()
|
|
135
|
+
self.table.insertRow(row)
|
|
136
|
+
|
|
137
|
+
# Set default values (H, K, L, energy, tth, theta, phi, chi)
|
|
138
|
+
defaults = [0.0, 0.0, 0.0, 2200.0, 90.0, 45.0, 0.0, 0.0]
|
|
139
|
+
for col, default in enumerate(defaults):
|
|
140
|
+
item = QTableWidgetItem(str(default))
|
|
141
|
+
item.setTextAlignment(Qt.AlignCenter)
|
|
142
|
+
self.table.setItem(row, col, item)
|
|
143
|
+
|
|
144
|
+
def _remove_selected_row(self):
|
|
145
|
+
"""Remove the currently selected row."""
|
|
146
|
+
current_row = self.table.currentRow()
|
|
147
|
+
if current_row >= 0:
|
|
148
|
+
self.table.removeRow(current_row)
|
|
149
|
+
elif self.table.rowCount() > 0:
|
|
150
|
+
# If no row selected, remove the last row
|
|
151
|
+
self.table.removeRow(self.table.rowCount() - 1)
|
|
152
|
+
|
|
153
|
+
def _get_diffraction_tests(self) -> list:
|
|
154
|
+
"""Extract diffraction test data from the table.
|
|
155
|
+
|
|
156
|
+
Returns:
|
|
157
|
+
List of dictionaries containing test data, or None if validation fails.
|
|
158
|
+
"""
|
|
159
|
+
tests = []
|
|
160
|
+
for row in range(self.table.rowCount()):
|
|
161
|
+
try:
|
|
162
|
+
test = {
|
|
163
|
+
"H": float(self.table.item(row, 0).text()),
|
|
164
|
+
"K": float(self.table.item(row, 1).text()),
|
|
165
|
+
"L": float(self.table.item(row, 2).text()),
|
|
166
|
+
"energy": float(self.table.item(row, 3).text()),
|
|
167
|
+
"tth": float(self.table.item(row, 4).text()),
|
|
168
|
+
"theta": float(self.table.item(row, 5).text()),
|
|
169
|
+
"phi": float(self.table.item(row, 6).text()),
|
|
170
|
+
"chi": float(self.table.item(row, 7).text()),
|
|
171
|
+
}
|
|
172
|
+
tests.append(test)
|
|
173
|
+
except (ValueError, AttributeError) as e:
|
|
174
|
+
QMessageBox.warning(
|
|
175
|
+
self,
|
|
176
|
+
"Invalid Input",
|
|
177
|
+
f"Row {row + 1} contains invalid data. Please enter numeric values.\n\nError: {e}",
|
|
178
|
+
)
|
|
179
|
+
return None
|
|
180
|
+
|
|
181
|
+
if not tests:
|
|
182
|
+
QMessageBox.warning(
|
|
183
|
+
self,
|
|
184
|
+
"No Data",
|
|
185
|
+
"Please enter at least one diffraction test.",
|
|
186
|
+
)
|
|
187
|
+
return None
|
|
188
|
+
|
|
189
|
+
return tests
|
|
190
|
+
|
|
191
|
+
def _calculate_orientation(self):
|
|
192
|
+
"""Calculate the optimal orientation from the entered data."""
|
|
193
|
+
tests = self._get_diffraction_tests()
|
|
194
|
+
if tests is None:
|
|
195
|
+
return
|
|
196
|
+
|
|
197
|
+
# Run the fitting algorithm
|
|
198
|
+
result = fit_orientation_from_diffraction_tests(
|
|
199
|
+
self.lattice_params, tests
|
|
200
|
+
)
|
|
201
|
+
|
|
202
|
+
if not result["success"]:
|
|
203
|
+
QMessageBox.warning(
|
|
204
|
+
self,
|
|
205
|
+
"Calculation Failed",
|
|
206
|
+
f"Failed to calculate orientation:\n\n{result.get('message', 'Unknown error')}",
|
|
207
|
+
)
|
|
208
|
+
return
|
|
209
|
+
|
|
210
|
+
# Display results (overwrites any previous results)
|
|
211
|
+
self.roll_result.setValue(result["roll"])
|
|
212
|
+
self.pitch_result.setValue(result["pitch"])
|
|
213
|
+
self.yaw_result.setValue(result["yaw"])
|
|
214
|
+
self.error_label.setText(f"Residual Error: {result['residual_error']:.6f}")
|
|
215
|
+
|
|
216
|
+
# Update group title to indicate results are current
|
|
217
|
+
self.results_group.setTitle("Calculated Orientation (Updated)")
|
|
218
|
+
self.results_group.setVisible(True)
|
|
219
|
+
self.apply_btn.setEnabled(True)
|
|
220
|
+
|
|
221
|
+
# Store result for later retrieval
|
|
222
|
+
self.result = {
|
|
223
|
+
"roll": result["roll"],
|
|
224
|
+
"pitch": result["pitch"],
|
|
225
|
+
"yaw": result["yaw"],
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
# Show detailed errors if available
|
|
229
|
+
if result.get("individual_errors"):
|
|
230
|
+
error_text = "Individual test errors:\n"
|
|
231
|
+
for i, err in enumerate(result["individual_errors"]):
|
|
232
|
+
error_text += (
|
|
233
|
+
f" Test {i+1}: ΔH={err['H_error']:.4f}, "
|
|
234
|
+
f"ΔK={err['K_error']:.4f}, ΔL={err['L_error']:.4f}\n"
|
|
235
|
+
)
|
|
236
|
+
QMessageBox.information(
|
|
237
|
+
self,
|
|
238
|
+
"Calculation Complete",
|
|
239
|
+
f"Orientation calculated successfully!\n\n"
|
|
240
|
+
f"Roll: {result['roll']:.4f}°\n"
|
|
241
|
+
f"Pitch: {result['pitch']:.4f}°\n"
|
|
242
|
+
f"Yaw: {result['yaw']:.4f}°\n\n"
|
|
243
|
+
f"Residual Error: {result['residual_error']:.6f}\n\n"
|
|
244
|
+
f"{error_text}",
|
|
245
|
+
)
|
|
246
|
+
|
|
247
|
+
def _apply_and_close(self):
|
|
248
|
+
"""Apply the calculated orientation and close the dialog."""
|
|
249
|
+
if self.result is not None:
|
|
250
|
+
self.accept()
|
|
251
|
+
else:
|
|
252
|
+
QMessageBox.warning(
|
|
253
|
+
self,
|
|
254
|
+
"No Result",
|
|
255
|
+
"Please calculate the orientation first.",
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
def get_result(self) -> dict:
|
|
259
|
+
"""Get the calculated orientation.
|
|
260
|
+
|
|
261
|
+
Returns:
|
|
262
|
+
Dictionary with roll, pitch, yaw values, or None if not calculated.
|
|
263
|
+
"""
|
|
264
|
+
return self.result
|
advisor/ui/init_window.py
CHANGED
|
@@ -19,6 +19,7 @@ from PyQt5.QtGui import QDragEnterEvent, QDropEvent
|
|
|
19
19
|
from advisor.domain import UnitConverter
|
|
20
20
|
from advisor.ui.utils import readcif
|
|
21
21
|
from advisor.ui.visualizers import CoordinateVisualizer, UnitcellVisualizer
|
|
22
|
+
from advisor.ui.dialogs import DiffractionTestDialog
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
class DragDropLineEdit(QLineEdit):
|
|
@@ -219,6 +220,14 @@ class InitWindow(QWidget):
|
|
|
219
220
|
self.yaw_input.valueChanged.connect(self.update_visualization)
|
|
220
221
|
euler_layout.addRow("Yaw:", self.yaw_input)
|
|
221
222
|
|
|
223
|
+
# Add "Import from Diffraction Test" button
|
|
224
|
+
self.import_orientation_btn = QPushButton("Import from Diffraction Test")
|
|
225
|
+
self.import_orientation_btn.setToolTip(
|
|
226
|
+
"Calculate Euler angles from known diffraction measurements"
|
|
227
|
+
)
|
|
228
|
+
self.import_orientation_btn.clicked.connect(self.open_diffraction_test_dialog)
|
|
229
|
+
euler_layout.addRow(self.import_orientation_btn)
|
|
230
|
+
|
|
222
231
|
# Add euler group to main layout at (0,2)
|
|
223
232
|
layout.addWidget(euler_group, 0, 2)
|
|
224
233
|
|
|
@@ -283,6 +292,30 @@ class InitWindow(QWidget):
|
|
|
283
292
|
self.file_path_input.setText(file_path)
|
|
284
293
|
# on_cif_file_changed will be triggered by textChanged
|
|
285
294
|
|
|
295
|
+
@pyqtSlot()
|
|
296
|
+
def open_diffraction_test_dialog(self):
|
|
297
|
+
"""Open the diffraction test dialog to import orientation from measurements."""
|
|
298
|
+
# Gather current lattice parameters
|
|
299
|
+
lattice_params = {
|
|
300
|
+
"a": self.a_input.value(),
|
|
301
|
+
"b": self.b_input.value(),
|
|
302
|
+
"c": self.c_input.value(),
|
|
303
|
+
"alpha": self.alpha_input.value(),
|
|
304
|
+
"beta": self.beta_input.value(),
|
|
305
|
+
"gamma": self.gamma_input.value(),
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
# Open the dialog
|
|
309
|
+
dialog = DiffractionTestDialog(lattice_params, self)
|
|
310
|
+
if dialog.exec_() == DiffractionTestDialog.Accepted:
|
|
311
|
+
result = dialog.get_result()
|
|
312
|
+
if result is not None:
|
|
313
|
+
# Apply the calculated Euler angles
|
|
314
|
+
self.roll_input.setValue(result["roll"])
|
|
315
|
+
self.pitch_input.setValue(result["pitch"])
|
|
316
|
+
self.yaw_input.setValue(result["yaw"])
|
|
317
|
+
# update_visualization will be triggered by valueChanged signals
|
|
318
|
+
|
|
286
319
|
def set_lattice_inputs_enabled(self, enabled: bool):
|
|
287
320
|
"""Enable/disable lattice parameter inputs (a,b,c,alpha,beta,gamma)."""
|
|
288
321
|
self.a_input.setEnabled(enabled)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: advisor-scattering
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.1
|
|
4
4
|
Summary: Advisor-Scattering: Advanced Visual X-ray Scattering Toolkit for Reciprocal-space visualization and calculation
|
|
5
5
|
Author: Xunyang Hong
|
|
6
6
|
License: MIT
|
|
@@ -42,25 +42,17 @@ or use the link below to view the demo video.
|
|
|
42
42
|
## Install
|
|
43
43
|
- Python 3.8+ with PyQt5, numpy, scipy, matplotlib, Dans_Diffraction (see `requirements.txt`).
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
It is recommened to install from PyPI:
|
|
46
46
|
```bash
|
|
47
47
|
pip install advisor-scattering
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
-
From source:
|
|
51
|
-
```bash
|
|
52
|
-
python -m venv .venv
|
|
53
|
-
source .venv/bin/activate # .venv\Scripts\activate on Windows
|
|
54
|
-
pip install -r requirements.txt
|
|
55
|
-
pip install .
|
|
56
|
-
```
|
|
57
|
-
|
|
58
50
|
## Run
|
|
59
51
|
```bash
|
|
60
|
-
advisor-scattering
|
|
61
|
-
# or
|
|
62
52
|
advisor
|
|
63
53
|
# or
|
|
54
|
+
advisor-scattering
|
|
55
|
+
# or
|
|
64
56
|
python -m advisor
|
|
65
57
|
```
|
|
66
58
|
|
|
@@ -2,28 +2,30 @@ advisor/__init__.py,sha256=9gmF8qfMHMVLbmvWW_20KkHU5zOCwUmmFHtju21klPQ,103
|
|
|
2
2
|
advisor/__main__.py,sha256=FueZKRQwCGBKNtk4W_Z9yYpsI0YB5WiVREWyZXmSl8A,124
|
|
3
3
|
advisor/app.py,sha256=52DxOOlZV_NHUzsnuYCCo_cI48D2THKE1m0-1ZVoNvE,1165
|
|
4
4
|
advisor/controllers/__init__.py,sha256=DEzJDUTJcRrbe7ZYnYsQQ3NvnyayNwTafcQmY7aRtrw,198
|
|
5
|
-
advisor/controllers/app_controller.py,sha256=
|
|
5
|
+
advisor/controllers/app_controller.py,sha256=CGqlhez9467JMZZeMbnbF-HwqwCayoYIfajy4vRBZtE,2433
|
|
6
6
|
advisor/controllers/feature_controller.py,sha256=6_XOck8ipQxbef24y16tCE08q7OUT0gs285d5tF5XRs,642
|
|
7
|
-
advisor/domain/__init__.py,sha256=
|
|
7
|
+
advisor/domain/__init__.py,sha256=SuMfLp1CJFqrpBE6UeyVe9BWdjbBlcwuHRTBN-UsOzg,733
|
|
8
8
|
advisor/domain/geometry.py,sha256=E8YmecQpBh7PQeJIamOlPo2aBgJSbhyBlrYS02uxFMg,6856
|
|
9
|
+
advisor/domain/orientation.py,sha256=PDPxosByY_Yo7FePUAZLsrN1OcH4_kUiF8TwC5jFGL8,7649
|
|
10
|
+
advisor/domain/orientation_calculator.py,sha256=5AKd5OqsQWTKgB3kv83aM7eLq9TEAlPXJ-C79X65dV8,5872
|
|
9
11
|
advisor/domain/unit_converter.py,sha256=D20FvdV7_ilAX7KDPxQ1GDCA6IxdjjcQ2QBiahb3lLI,2085
|
|
10
12
|
advisor/domain/core/__init__.py,sha256=UPDQYo7-5f9Ghx3p6qlwljTLhHsxlGmEl_MvdaHM2Jg,173
|
|
11
|
-
advisor/domain/core/lab.py,sha256=
|
|
12
|
-
advisor/domain/core/lattice.py,sha256=
|
|
13
|
-
advisor/domain/core/sample.py,sha256=
|
|
14
|
-
advisor/features/__init__.py,sha256=
|
|
13
|
+
advisor/domain/core/lab.py,sha256=_IbRVbPvffkM73f41uJ3R43ZeZ6LOxNOrywWz_DDT_8,5129
|
|
14
|
+
advisor/domain/core/lattice.py,sha256=339_veWj1KFTAwuH37-vx5a9wjUfQzJI6MoSxMm8tX8,2757
|
|
15
|
+
advisor/domain/core/sample.py,sha256=zz0qMlpeGHEXmmkoY1GtOBI5-uK4hhOVeLjuje6-Osc,4278
|
|
16
|
+
advisor/features/__init__.py,sha256=Arhqas6uY2uJp58ttNEVap9gRYE0uOVw1dA6gtB9544,330
|
|
15
17
|
advisor/features/scattering_geometry/controllers/__init__.py,sha256=2V9KZMlxjHpsBIdkphveylQgL9z6BV09DaufqQcLX_Y,169
|
|
16
18
|
advisor/features/scattering_geometry/controllers/scattering_geometry_controller.py,sha256=QGcm5_y8EPNYUF_FM9xViVzPJs6qh1dB_OA3fjoKAEg,1076
|
|
17
19
|
advisor/features/scattering_geometry/domain/__init__.py,sha256=BsK0j9-RJiK0-g0qB3DH8qoSqlEZNAPBQb7eXYrg0oU,142
|
|
18
|
-
advisor/features/scattering_geometry/domain/brillouin_calculator.py,sha256=
|
|
19
|
-
advisor/features/scattering_geometry/domain/core.py,sha256=
|
|
20
|
+
advisor/features/scattering_geometry/domain/brillouin_calculator.py,sha256=pMpjq5HbutFzWubo-x7goOY2N_7OjqALYZN8zGQkfsQ,16044
|
|
21
|
+
advisor/features/scattering_geometry/domain/core.py,sha256=2JdHNjdl_GnyhOr0iGRMgTK1JlYFg6WA0uWe0mYUgyY,20149
|
|
20
22
|
advisor/features/scattering_geometry/ui/__init__.py,sha256=9Lm-sc1Q3KeQ-0kKJneD10MWuqyDgh29QDAVdHghh1Q,154
|
|
21
|
-
advisor/features/scattering_geometry/ui/scattering_geometry_tab.py,sha256=
|
|
23
|
+
advisor/features/scattering_geometry/ui/scattering_geometry_tab.py,sha256=GHczdi74GxCxo3svF7oBdXrbTilLZ4ODkTuatJrfTkE,29448
|
|
22
24
|
advisor/features/scattering_geometry/ui/components/__init__.py,sha256=OsX27CeUv5gznYXmkZWqeXwcskf4DmxOH6xJ0-cUwDg,358
|
|
23
25
|
advisor/features/scattering_geometry/ui/components/angles_to_hkl_components.py,sha256=l6kPM7b95nvNsp1Eg0kmWIfFPTtmuGQyDol_mnx7lOs,4889
|
|
24
|
-
advisor/features/scattering_geometry/ui/components/hk_angles_components.py,sha256=
|
|
25
|
-
advisor/features/scattering_geometry/ui/components/hkl_scan_components.py,sha256=
|
|
26
|
-
advisor/features/scattering_geometry/ui/components/hkl_to_angles_components.py,sha256=
|
|
26
|
+
advisor/features/scattering_geometry/ui/components/hk_angles_components.py,sha256=ZkzRASVeII5dF5_WfwmVBrRwYWTCDNvE05VNa6idxGo,20538
|
|
27
|
+
advisor/features/scattering_geometry/ui/components/hkl_scan_components.py,sha256=JLzbkK1zM8CZm2WZvDyRg-Twwmt46KNKGr1DG7MPfXs,20522
|
|
28
|
+
advisor/features/scattering_geometry/ui/components/hkl_to_angles_components.py,sha256=0J-CXiBCTOoLjFK5-PgY0PjZSG1aU7sYrE-MilJSAEA,15834
|
|
27
29
|
advisor/features/structure_factor/controllers/__init__.py,sha256=aGyA8cXJ64HfULWo6_6D4azt4Hs8qJ6wH_OW6BClv9Y,158
|
|
28
30
|
advisor/features/structure_factor/controllers/structure_factor_controller.py,sha256=4PBHg8lPXcQA7Tpocu3A3GzGQP2IZP8CNPH6PILHyWw,975
|
|
29
31
|
advisor/features/structure_factor/domain/__init__.py,sha256=lNxY4RcTYCSboXpAWJfib29WqYg6o4jesbNk-Z279rU,159
|
|
@@ -49,10 +51,12 @@ advisor/resources/icons/sf_calculator.jpg,sha256=W7e89x2K6np5l200hklRfdh0pkA3SGz
|
|
|
49
51
|
advisor/resources/icons/sf_calculator.png,sha256=ArnSfIQo8Gc8uWQhpG7DTCBNFcuVGXDIiQ7Yb-x9D_M,44466
|
|
50
52
|
advisor/resources/qss/styles.qss,sha256=R29qftSIvN0AI1UVsLSsHcUImIYGnbbuF_1LvViF3mg,8070
|
|
51
53
|
advisor/ui/__init__.py,sha256=isDNFKHsZq1s8Och-5tHcFC5FAJA653x4r5DYGsVowU,202
|
|
52
|
-
advisor/ui/init_window.py,sha256=
|
|
54
|
+
advisor/ui/init_window.py,sha256=dQTTLNNiBVyDtSKqFOPicg3Su75ikfCKBB8Avy6_6_4,23751
|
|
53
55
|
advisor/ui/main_window.py,sha256=I5vCpPPQCwaSag538YPQC_bgarVJGQ1ryuxjWxuMP-0,6170
|
|
54
56
|
advisor/ui/tab_interface.py,sha256=8okMV0NurIyEGxRf-YXHrjftzWyMzXcea3cdt3i1FtE,1180
|
|
55
57
|
advisor/ui/tips.py,sha256=5iP28xJvKBkdgvo3eDD2kzV52FEeT_Sd8ivtWlhi0Xs,742
|
|
58
|
+
advisor/ui/dialogs/__init__.py,sha256=yFeoZOe0euOXeie-fqwJquZ9Vhl8mtszIWg1aunawXI,197
|
|
59
|
+
advisor/ui/dialogs/diffraction_test_dialog.py,sha256=33MZCYlSn0ZhSp-Q5Cj1n0xbgbtSJugCD-KaiZCmxcY,9608
|
|
56
60
|
advisor/ui/utils/__init__.py,sha256=U_IwI_KEtmKLMKw6e2ko7GkUa50-PvkeMFS_6QfHoyg,84
|
|
57
61
|
advisor/ui/utils/readcif.py,sha256=tRuz1WSBr8XWkgf6VUOlS5aTf2LYDi8CY4peJ1_0bjI,4554
|
|
58
62
|
advisor/ui/visualizers/HKLScan2DVisualizer.py,sha256=Q8_MWKiyzrFk4-3S50Ro7_4I_ERbSagG52686lPSuFo,8706
|
|
@@ -62,8 +66,8 @@ advisor/ui/visualizers/scattering_visualizer.py,sha256=iyjTgy1WbqI7G0BpiJ59CKFCI
|
|
|
62
66
|
advisor/ui/visualizers/structure_factor_visualizer.py,sha256=Rt9ui7Qv4vvDCWiuIngoYzHJlFVef8M_h3BBRcmuFTc,15866
|
|
63
67
|
advisor/ui/visualizers/structure_factor_visualizer_2d.py,sha256=xA1hrp7pKIfgD1G_Pt-uemHggmKf-7QC94dS-GasZI4,8119
|
|
64
68
|
advisor/ui/visualizers/unitcell_visualizer.py,sha256=gwpMkU1YIu-8zkKVu5bHpyu_iLbzYEYTbVArchNMLOI,21384
|
|
65
|
-
advisor_scattering-0.
|
|
66
|
-
advisor_scattering-0.
|
|
67
|
-
advisor_scattering-0.
|
|
68
|
-
advisor_scattering-0.
|
|
69
|
-
advisor_scattering-0.
|
|
69
|
+
advisor_scattering-0.9.1.dist-info/METADATA,sha256=rg86280T-GTYofxoa9BMwSJcNEcP_Rmf8JoHECbDP60,4658
|
|
70
|
+
advisor_scattering-0.9.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
71
|
+
advisor_scattering-0.9.1.dist-info/entry_points.txt,sha256=b__0W6TTAPUTc0UIUyHdxvxtsVz025Y-QNrMKzt8b9o,83
|
|
72
|
+
advisor_scattering-0.9.1.dist-info/top_level.txt,sha256=4YoJT7oclQ2yU-4KY0AB36cfAZG9yAI1tJNHrxEioMA,8
|
|
73
|
+
advisor_scattering-0.9.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|