-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmeasure_line_gratings.py
107 lines (81 loc) · 4.19 KB
/
measure_line_gratings.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
100
101
102
103
104
105
106
107
from PySide2 import QtCore, QtGui, QtWidgets
import widgets
import numpy as np
import lmi_pattern
class MeasureLineGratingsDialog(QtWidgets.QDialog):
def __init__(self, sim_system, params, parent=None):
super().__init__(parent)
self.setWindowFlags(QtCore.Qt.Window |
QtCore.Qt.WindowMaximizeButtonHint |
QtCore.Qt.WindowCloseButtonHint)
self.setWindowTitle('Measure Line Gratings')
layout = QtWidgets.QVBoxLayout()
self.image_widget = widgets.ImageView()
layout.addWidget(self.image_widget)
form_layout = QtWidgets.QFormLayout()
self.grating_dot_distance_1_txt = QtWidgets.QLineEdit(str(params['grating_dot_distances'][0]))
self.grating_dot_distance_1_txt.returnPressed.connect(self.take_image)
form_layout.addRow("Grating dot distance 1 [deg]", self.grating_dot_distance_1_txt)
self.grating_dot_distance_2_txt = QtWidgets.QLineEdit(str(params['grating_dot_distances'][1]))
self.grating_dot_distance_2_txt.returnPressed.connect(self.take_image)
form_layout.addRow("Grating dot distance 2 [deg]", self.grating_dot_distance_2_txt)
self.grating_dot_distance_3_txt = QtWidgets.QLineEdit(str(params['grating_dot_distances'][2]))
self.grating_dot_distance_3_txt.returnPressed.connect(self.take_image)
form_layout.addRow("Grating dot distance 3 [deg]", self.grating_dot_distance_3_txt)
self.grating_dot_distance_txts = [
self.grating_dot_distance_1_txt,
self.grating_dot_distance_2_txt,
self.grating_dot_distance_3_txt
]
layout.addLayout(form_layout)
hlayout = QtWidgets.QHBoxLayout()
do_nothing_button = QtWidgets.QPushButton('---')
hlayout.addWidget(do_nothing_button)
ok_button = QtWidgets.QPushButton('OK')
ok_button.pressed.connect(self.accept)
hlayout.addWidget(ok_button)
cancel_button = QtWidgets.QPushButton('Cancel')
cancel_button.pressed.connect(self.reject)
hlayout.addWidget(cancel_button)
layout.addLayout(hlayout)
self.setLayout(layout)
self.global_params = params
self.sim_system = sim_system
self.take_image()
def get_params(self):
return {
"grating_dot_distances": [float(txt.text()) for txt in self.grating_dot_distance_txts],
}
def grating_pattern(self):
params = self.get_params()
grating_dot_distances = params['grating_dot_distances']
orientation_deg = self.global_params['orientation_deg']
distance_between_gratings = self.global_params["distance_between_gratings"]
grating_nr = 1
if grating_nr == 2:
pattern_deg = lmi_pattern.line_lmi_pattern_two_grating(2, 1, [x * 2 for x in grating_dot_distances], distance_between_gratings, orientation_deg=orientation_deg)
elif grating_nr == 3:
pattern_deg = lmi_pattern.line_lmi_pattern_deg(2, 1, [x * 2 for x in grating_dot_distances], distance_between_gratings, orientation_rad=np.deg2rad(orientation_deg))
elif grating_nr == 1:
pattern_deg = lmi_pattern.line_lmi_pattern_one_grating(2, 1, [x * 2 for x in grating_dot_distances], orientation_deg=orientation_deg)
pattern_deg = np.reshape(pattern_deg, (1, -1, 2)) # All steps in single frame
return pattern_deg
def take_image(self):
pattern_deg = self.grating_pattern()
pattern_deg = np.repeat(pattern_deg, 30, axis=1)
frames = self.sim_system.project_patterns_and_take_images(pattern_deg, 10000, delay_sec = 0.0)
self.adj_frame = frames[0]
self.update_view()
def update_view(self):
themax = np.max(self.adj_frame[10:-10, 10:-10])
adj_clip = (np.clip(self.adj_frame / themax * 255, 0, 255)).astype(np.uint8)
self.frame_u8 = adj_clip
self.image_widget.set_numpy_array(self.frame_u8)
@staticmethod
def run_dialog(sim_system, params, parent=None):
dialog = MeasureLineGratingsDialog(sim_system, params, parent)
result = dialog.exec_()
if result > 0:
return dialog.get_params()
else:
return None