refactoring and other stuff
This commit is contained in:
245
swissmx.py
245
swissmx.py
@@ -88,7 +88,7 @@ from PyQt5 import QtCore, QtGui
|
||||
from PyQt5.QtCore import Qt, pyqtSlot, QSize, QRegExp, pyqtSignal, QObject, QThread
|
||||
from PyQt5.QtGui import QKeySequence, QPixmap, QRegExpValidator
|
||||
from PyQt5.QtWidgets import (
|
||||
QAction, QApplication, QDoubleSpinBox, QFormLayout, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit,
|
||||
QAction, QApplication, QDoubleSpinBox, QFileDialog, QFormLayout, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit,
|
||||
QMessageBox, QPlainTextEdit, QProgressBar, QProgressDialog, QPushButton, QShortcut, QSizePolicy, QSpinBox,
|
||||
QSplashScreen, QTextBrowser, QToolBox, QVBoxLayout, QWidget,)
|
||||
from PyQt5.uic import loadUiType
|
||||
@@ -216,7 +216,7 @@ class StartupSplash:
|
||||
|
||||
Ui_MainWindow, QMainWindow = loadUiType("swissmx.ui")
|
||||
|
||||
class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
class WndSwissMx(QMainWindow, Ui_MainWindow):
|
||||
#pixelsPerMillimeter = pyqtSignal(float)
|
||||
#beamCameraCoordinatesChanged = pyqtSignal(float, float)
|
||||
addGridRequest = pyqtSignal(float, float)
|
||||
@@ -237,7 +237,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
daqAborted = pyqtSignal()
|
||||
|
||||
def __init__(self,):
|
||||
super(SwissMxWnd, self).__init__()
|
||||
super(WndSwissMx, self).__init__()
|
||||
self.setupUi(self)
|
||||
|
||||
app=QApplication.instance()
|
||||
@@ -328,17 +328,17 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self.prepare_left_tabs()
|
||||
#self.update_beam_marker(qoptic_zoom.get_sp()) #ZAC: orig. code
|
||||
self._centerpiece_stack.setCurrentIndex(0)
|
||||
self._centerpiece_stack.currentChanged.connect(self.center_piece_update)
|
||||
self._centerpiece_stack.currentChanged.connect(self.cb_update_center_widget)
|
||||
self._OLD_init_validators()
|
||||
#self.init_settings_tracker() ? not needed, was for TELL ?
|
||||
self._OLD_wire_storage()
|
||||
|
||||
self.center_piece_update(0) # start camera updater
|
||||
self.cb_update_center_widget(0) # start camera updater
|
||||
curzoom = app._zoom.get_val()
|
||||
_log.debug(f"starting app with zoom at {curzoom}")
|
||||
self.zoom_changed_cb(curzoom)
|
||||
self._tabs_daq_methods.currentChanged.connect(self.switch_task)
|
||||
self.switch_task()
|
||||
self.cb_zoom_changed(curzoom)
|
||||
self._tabs_daq_methods.currentChanged.connect(self.cb_switch_task)
|
||||
self.cb_switch_task()
|
||||
|
||||
def init_settings(self):
|
||||
app = QApplication.instance()
|
||||
@@ -378,8 +378,8 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self.microscope_page.setLayout(QVBoxLayout())
|
||||
self.microscope_page.layout().addWidget(self.glw)
|
||||
self.glw.show()
|
||||
self.glw.scene().sigMouseMoved.connect(self.mouse_move_event)
|
||||
self.glw.scene().sigMouseClicked.connect(self.mouse_click_event)
|
||||
self.glw.scene().sigMouseMoved.connect(self.cb_mouse_move)
|
||||
self.glw.scene().sigMouseClicked.connect(self.cb_mouse_click)
|
||||
|
||||
#--- viewbox ---
|
||||
#self.vb=vb=self.glw.addViewBox(invertY=False,border='r',enableMenu=False)
|
||||
@@ -412,18 +412,22 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
#grid.setTransform(tr) # assign transform
|
||||
vb.addItem(grid)
|
||||
|
||||
#--- beam marker ---
|
||||
bm_sz=np.array((50, 40)) # it is immidiatly repositioned in zoom_changed_cb
|
||||
self._goBeamMarker=bm=UsrGO.Marker(-opt_ctr-bm_sz/2,bm_sz,mode=0)
|
||||
bm.setTransform(tr) # assign transform
|
||||
vb.addItem(bm)
|
||||
|
||||
#--- opctical center ----
|
||||
oc_sz=np.array((50,50))
|
||||
self._goOptCtr=obj=UsrGO.Marker(-opt_ctr-oc_sz/2, oc_sz,mode=1)
|
||||
bm.setTransform(tr) # assign transform
|
||||
obj.sigRegionChangeFinished.connect(self.cb_marker_moved)
|
||||
#obj.setTransform(tr) # assign transform
|
||||
vb.addItem(obj)
|
||||
|
||||
#--- beam marker ---
|
||||
bm_sz=np.array((50, 40)) # it is immidiatly repositioned in cb_zoom_changed
|
||||
self._goBeamMarker=bm=UsrGO.Marker(-opt_ctr-bm_sz/2,bm_sz,mode=0)
|
||||
bm._size_eu=cfg.value(AppCfg.GEO_BEAM_SZ)
|
||||
bm._pos_eu=cfg.value(AppCfg.GEO_BEAM_POS)
|
||||
bm.sigRegionChangeFinished.connect(self.cb_marker_moved)
|
||||
#bm.setTransform(tr) # assign transform
|
||||
vb.addItem(bm)
|
||||
|
||||
#--- testing scan grid ---
|
||||
self.track_objects() # first call is needed to initialize the structure self._goTracked
|
||||
# #go=UsrGO.Grid((120, -100), (200, 150), (30, 22), 2)
|
||||
@@ -440,13 +444,13 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self.toolBar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
|
||||
|
||||
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_S), self)
|
||||
self.shortcut.activated.connect(self.saveSampleCameraScreenshot)
|
||||
self.shortcut.activated.connect(self.cb_save_cam_image)
|
||||
|
||||
self.shortcut = QShortcut(QKeySequence(Qt.Key_F2), self)
|
||||
self.shortcut.activated.connect(self.saveSampleCameraScreenshot)
|
||||
self.shortcut.activated.connect(self.cb_save_cam_image)
|
||||
|
||||
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + Qt.Key_S), self)
|
||||
self.shortcut.activated.connect(self.saveSampleCameraScreenshotView)
|
||||
self.shortcut.activated.connect(self.cb_save_cam_image)
|
||||
|
||||
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_T), self)
|
||||
self.shortcut.activated.connect(lambda: qutilities.toggle_warn(SKIP_ESCAPE_TRANSITIONS_IF_SAFE))
|
||||
@@ -459,20 +463,20 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + qkey), self)
|
||||
self.shortcut.activated.connect(lambda key=k: self.gotoBookmark(key))
|
||||
|
||||
self._button_collect.clicked.connect(self.execute_collection)
|
||||
self._button_collect.clicked.connect(self.cb_execute_collection)
|
||||
|
||||
# Toolbar buttons
|
||||
icon_size = QSize(50, 50)
|
||||
|
||||
icon = qtawesome.icon("material.photo_camera")
|
||||
action = QAction(icon, "Save View", self)
|
||||
action.setToolTip("(Ctrl+S) Take a screenshot of the currently visible sample image, including markers. Saves in current folder.")
|
||||
action.triggered.connect(self.saveSampleCameraScreenshotView)
|
||||
self.toolBar.addAction(action)
|
||||
|
||||
action = QAction(icon, "Save Original", self)
|
||||
action.setToolTip("(Ctrl+Shift+S) Take a screenshot of the sample image, without markers. Saves in current folder.")
|
||||
action.triggered.connect(self.saveSampleCameraScreenshot)
|
||||
action.triggered.connect(self.cb_save_cam_image)
|
||||
self.toolBar.addAction(action)
|
||||
|
||||
action = QAction(icon, "Save View", self)
|
||||
action.setToolTip("(Ctrl+S) Take a screenshot of the currently visible sample image, including markers. Saves in current folder.")
|
||||
action.triggered.connect(lambda: self.cb_save_cam_image(True))
|
||||
self.toolBar.addAction(action)
|
||||
|
||||
if os.getenv("DEVELOPMENT_VERSION"):
|
||||
@@ -510,27 +514,27 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
action = QAction(icon, "Sample\nExchange", self)
|
||||
action.setToolTip("Move devices so a sample can be exchanged.")
|
||||
action.setObjectName("action_SampleExchange")
|
||||
action.triggered.connect(self.escape_goToSampleExchange)
|
||||
action.triggered.connect(self.cb_esc_sample_exchange)
|
||||
self.toolBar.addAction(action)
|
||||
self.toolBar.widgetForAction(action).setAccessibleName("action_SampleExchange")
|
||||
|
||||
icon = qtawesome.icon("material.my_location")
|
||||
action = QAction(icon, "Sample\nAlignment", self)
|
||||
action.setToolTip("Move devices so a sample can be aligned.")
|
||||
action.triggered.connect(self.escape_goToSampleAlignment)
|
||||
action.triggered.connect(self.cb_esc_sample_alignment)
|
||||
self.toolBar.addAction(action)
|
||||
self.toolBar.widgetForAction(action).setAccessibleName("action_SampleAlignment")
|
||||
|
||||
icon = qtawesome.icon("material.fingerprint")
|
||||
action = QAction(icon, "Data\nCollection", self)
|
||||
action.setToolTip("Move devices so a sample can be collected.")
|
||||
action.triggered.connect(self.escape_goToDataCollection)
|
||||
action.triggered.connect(self.cb_esc_data_collection)
|
||||
self.toolBar.addAction(action)
|
||||
self.toolBar.widgetForAction(action).setAccessibleName("action_DataCollection")
|
||||
|
||||
self.actionQuit.triggered.connect(self.really_quit)
|
||||
self.actionQuit.triggered.connect(self.cb_really_quit)
|
||||
self.actionPreferences.triggered.connect(self._OLD_openPreferencesDialog)
|
||||
self.actionHome_Fast_Stages.triggered.connect(self.home_deltatau_faststages)
|
||||
self.actionHome_Fast_Stages.triggered.connect(self.cb_deltatau_home_faststages)
|
||||
self.actionUser_Storage.triggered.connect(self._OLD_update_user_and_storage)
|
||||
|
||||
self.shortcut = QShortcut(QKeySequence(Qt.CTRL + Qt.SHIFT + Qt.Key_L), self)
|
||||
@@ -619,7 +623,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
else:
|
||||
event.ignore()
|
||||
|
||||
def center_piece_update(self, index):
|
||||
def cb_update_center_widget(self, index):
|
||||
if index > 0: # not showing camera image
|
||||
_log.warning("listening to zescape")
|
||||
self.timer.stop()
|
||||
@@ -630,11 +634,11 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
else:
|
||||
app=QApplication.instance()
|
||||
try:
|
||||
self.new_frame_sim_cb()
|
||||
self.cb_new_frame_sim()
|
||||
except AttributeError:
|
||||
app._camera.run(self.new_frame_pv_cb)
|
||||
app._camera.run(self.cb_new_frame_pv)
|
||||
|
||||
def new_frame_pv_cb(self, **kwargs):
|
||||
def cb_new_frame_pv(self, **kwargs):
|
||||
#_log.debug('new_frame_pv_cb count {}'.format(kwargs['count']))
|
||||
app=QApplication.instance()
|
||||
sz=app._camera._sz
|
||||
@@ -648,7 +652,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
camera.epics_cam.set_fiducial(pic, 255)
|
||||
self._goImg.setImage(pic)
|
||||
|
||||
def new_frame_sim_cb(self, **kwargs):
|
||||
def cb_new_frame_sim(self, **kwargs):
|
||||
app=QApplication.instance()
|
||||
sim=app._camera._sim
|
||||
imgSeq=sim['imgSeq']
|
||||
@@ -659,7 +663,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self._goImg.setImage(pic)
|
||||
|
||||
delay=500 # ms -> 2fps
|
||||
QtCore.QTimer.singleShot(delay, self.new_frame_sim_cb)
|
||||
QtCore.QTimer.singleShot(delay, self.cb_new_frame_sim)
|
||||
|
||||
def load_stylesheet(self):
|
||||
with open("swissmx.css", "r") as sheet:
|
||||
@@ -682,8 +686,8 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
|
||||
self.zoombox = zoom.Zoom()
|
||||
self.zoombox.init_settings()
|
||||
self.zoombox.zoomChanged.connect(self.zoom_changed_cb)
|
||||
self.zoombox.moveBacklight.connect(self.safe_backlight_move)
|
||||
self.zoombox.zoomChanged.connect(self.cb_zoom_changed)
|
||||
self.zoombox.moveBacklight.connect(self.cb_move_backlight_safe)
|
||||
|
||||
layout.addWidget(self.zoombox)
|
||||
|
||||
@@ -699,7 +703,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
|
||||
# monitor all axis for an axis fault
|
||||
for key, tweaker in self.tweakers.items():
|
||||
tweaker.event_axis_fault.connect(self.axis_fault)
|
||||
tweaker.event_axis_fault.connect(self.cb_axis_fault)
|
||||
|
||||
#self.tweakers["fast_x"].event_readback.connect(lambda alias, value, kw: self.fast_x_position.emit(value))
|
||||
#self.tweakers["fast_y"].event_readback.connect(lambda alias, value, kw: self.fast_y_position.emit(value))
|
||||
@@ -708,29 +712,47 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self.tweakers["fast_y"].event_val.connect(lambda rec_name, kw: self.track_objects())
|
||||
# layout.addStretch()
|
||||
|
||||
def zoom_changed_cb(self, value):
|
||||
#self.zoomChanged.emit(value)
|
||||
def cb_marker_moved(self,obj,*args,**kwargs):
|
||||
_log.debug(args)
|
||||
_log.debug(kwargs)
|
||||
app=QApplication.instance()
|
||||
cfg=app._cfg
|
||||
geo=app._geometry
|
||||
opt_ctr=geo._opt_ctr
|
||||
if obj==self._goOptCtr:
|
||||
oc_pos=obj.pos()
|
||||
oc_sz=obj.size()
|
||||
geo._opt_ctr=opt_ctr=np.array(-oc_pos-oc_sz/2)
|
||||
_log.debug(f'{obj}->{opt_ctr} !!! NOT SAVED IN CONFIG !!!')
|
||||
#cfg.setValue(AppCfg.GEO_OPT_CTR,bm_pos)
|
||||
elif obj==self._goBeamMarker:
|
||||
bm_pos=obj.pos()
|
||||
bm_sz=obj.size()
|
||||
obj._pos_eu=bm_pos=-geo.pix2pos(bm_pos+opt_ctr+bm_sz/2)
|
||||
_log.debug(f'{obj}->{bm_pos} !!! NOT SAVED IN CONFIG !!!')
|
||||
#cfg.setValue(AppCfg.GEO_BEAM_POS,bm_pos)
|
||||
|
||||
def cb_zoom_changed(self, value):
|
||||
#self.zoomChanged.emit(value)
|
||||
app=QApplication.instance()
|
||||
geo=app._geometry
|
||||
try:
|
||||
geo.interp_zoom(value)
|
||||
except AttributeError as e:
|
||||
_log.warning(e)
|
||||
else:
|
||||
opt_ctr=geo._opt_ctr
|
||||
bm_sz=cfg.value(AppCfg.GEO_BEAM_SZ)
|
||||
bm_pos=cfg.value(AppCfg.GEO_BEAM_POS)
|
||||
bm_sz=np.abs(geo.pos2pix(bm_sz))
|
||||
bm_pos=-opt_ctr-geo.pos2pix(bm_pos)-bm_sz/2
|
||||
bm=self._goBeamMarker
|
||||
bm_sz=np.abs(geo.pos2pix(bm._size_eu))
|
||||
bm_pos=-opt_ctr-geo.pos2pix(bm._pos_eu)-bm_sz/2
|
||||
bm.blockSignals(True) # avoid to call cb_marker_moved
|
||||
bm.setPos(bm_pos,finish=False)
|
||||
bm.setSize(bm_sz)
|
||||
bm.blockSignals(False)
|
||||
_log.debug(f"zoom->{value} beam marker pos:{bm_pos} sz:{bm_sz})")
|
||||
self.track_objects()
|
||||
#self.update_beam_marker(value)
|
||||
|
||||
def safe_backlight_move(self, pos):
|
||||
def cb_move_backlight_safe(self, pos):
|
||||
# any move of backlight requires post sample tube out
|
||||
try:
|
||||
self.assert_post_tube_position(pos="out")
|
||||
@@ -798,7 +820,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
block.layout().addWidget(c)
|
||||
return block
|
||||
|
||||
def axis_fault(self, pvname, kw):
|
||||
def cb_axis_fault(self, pvname, kw):
|
||||
"""
|
||||
swissmx - {'pvname': 'SAR-EXPMX:MOT_FY.STAT', 'value': 0, 'char_value': 'NO_ALARM', 'status': 0, 'ftype': 17, 'chid': 38980392,
|
||||
'host': 'SAR-CPPM-EXPMX1.psi.ch:5064', 'count': 1, 'access': 'read-only', 'write_access': False, 'read_access': True,
|
||||
@@ -885,7 +907,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
def active_task(self):
|
||||
return self._active_task
|
||||
|
||||
def mouse_move_event(self, pos):
|
||||
def cb_mouse_move(self, pos):
|
||||
app = QApplication.instance()
|
||||
self._mouse_pos = pos
|
||||
task = self.active_task()
|
||||
@@ -929,7 +951,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
)
|
||||
)
|
||||
|
||||
def mouse_click_event(self, event):
|
||||
def cb_mouse_click(self, event):
|
||||
#_log.debug("{}".format(event))
|
||||
#_log.debug("screen pos {}".format(event.screenPos())) #pixel position on the whole screen
|
||||
#_log.debug("scene pos {}".format(event.scenePos())) #pixel position on the scene (including black frame)
|
||||
@@ -1191,50 +1213,36 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
#x=imgPos.x();y=imgPos.y()
|
||||
|
||||
@pyqtSlot()
|
||||
def saveSampleCameraScreenshot(self):
|
||||
outf = self.get_screenshot_filename()
|
||||
_log.info("saving original clean screenshot: {}".format(outf))
|
||||
try:
|
||||
sample_camera.saveimage(outf)
|
||||
except Exception as e:
|
||||
_log.warning(e)
|
||||
QMessageBox.warning(self, "Screenshot: failed to save image", "Failed to save screenshot!")
|
||||
|
||||
@pyqtSlot()
|
||||
def saveSampleCameraScreenshotView(self):
|
||||
outf = self.get_screenshot_filename()
|
||||
_log.info("saving view screenshot: {}".format(outf))
|
||||
|
||||
exporter = pg.exporters.ImageExporter(self.vb)
|
||||
|
||||
# set export parameters if needed
|
||||
exporter.parameters()["width"] = 2000 # (note this also affects height parameter)
|
||||
|
||||
# save to file
|
||||
try:
|
||||
exporter.export(outf)
|
||||
except Exception as e:
|
||||
_log.warning(e)
|
||||
QMessageBox.warning(self, "Screenshot: failed to save viewer image", "Failed to save screenshot of viewer!",)
|
||||
|
||||
def get_screenshot_filename(self):
|
||||
global folders
|
||||
_log.info("taking screenhot")
|
||||
prefix = folders.prefix
|
||||
folder = folders.res_folder
|
||||
base = time.strftime("{}_%Y%m%d_%H%M%S.png".format(prefix))
|
||||
if not os._exists(folder):
|
||||
def cb_save_cam_image(self,overlays=False):
|
||||
app=QApplication.instance()
|
||||
cam=app._camera
|
||||
filename, _ = QFileDialog.getSaveFileName(self,"Save data file",'', 'PNG files (*.png);;all files (*)')
|
||||
if not filename:
|
||||
return
|
||||
_log.info(f"saving view screenshot: {filename}")
|
||||
#try:
|
||||
if not overlays:
|
||||
import PIL.Image
|
||||
#img=PIL.Image.fromarray(cam.pic.astype(np.uint8))
|
||||
try:
|
||||
os.makedirs(folder, 0o750, exist_ok=True)
|
||||
except:
|
||||
msg = "Failed to create folder: {}".format(folder)
|
||||
_log.warning(msg)
|
||||
QMessageBox.warning(self, "Screenshot: failed to create folder", "Failed to create output folder for screenshot!\n\n\tScreenshot not taken!",)
|
||||
raise
|
||||
outf = os.path.join(folder, base)
|
||||
return outf
|
||||
pic=cam.pic
|
||||
except AttributeError:
|
||||
sim=app._camera._sim
|
||||
pic=cam._sim['imgSeq'][sim['imgIdx']]
|
||||
img=PIL.Image.fromarray(pic)
|
||||
img.save(filename)
|
||||
else:
|
||||
exporter = pg.exporters.ImageExporter(self.vb)
|
||||
# set export parameters if needed
|
||||
#exporter.parameters()["width"] = 2000 # (note this also affects height parameter)
|
||||
# save to file
|
||||
exporter.export(filename)
|
||||
|
||||
def execute_collection(self):
|
||||
#except Exception as e:
|
||||
# _log.warning(e)
|
||||
# QMessageBox.warning(self, "Screenshot: failed to save image", "Failed to save screenshot!")
|
||||
|
||||
def cb_execute_collection(self):
|
||||
app=QApplication.instance()
|
||||
geo=app._geometry
|
||||
#zoom=app._zoom.get_val()
|
||||
@@ -1333,7 +1341,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
elif task == TASK_EMBL:
|
||||
self.daq_embl_collect_points()
|
||||
|
||||
def escape_goToSampleExchange(self):
|
||||
def cb_esc_sample_exchange(self):
|
||||
self._escape_current_state = "busy"
|
||||
steps = []
|
||||
if option(CRYOJET_MOTION_ENABLED):
|
||||
@@ -1348,7 +1356,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self.escape_run_steps(steps, "Transitioning to Sample Exchange")
|
||||
self._escape_current_state = "ManualSampleExchange"
|
||||
|
||||
def escape_goToSampleAlignment(self):
|
||||
def cb_esc_sample_alignment(self):
|
||||
app=QApplication.instance()
|
||||
self._escape_current_state = "busy"
|
||||
|
||||
@@ -1362,7 +1370,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self.escape_run_steps(steps, "Transitioning to Sample Alignment")
|
||||
self._escape_current_state = "SampleAlignment"
|
||||
|
||||
def escape_goToDataCollection(self):
|
||||
def cb_esc_data_collection(self):
|
||||
self._escape_current_state = "busy"
|
||||
steps = [
|
||||
# lambda: sample_selection.tell.set_current(30.0),
|
||||
@@ -1375,19 +1383,19 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self.escape_run_steps(steps, "Transitioning to Data Collection")
|
||||
self._escape_current_state = "DataCollection"
|
||||
|
||||
def really_quit(self):
|
||||
def cb_really_quit(self):
|
||||
"""called when user Ctrl-Q the app"""
|
||||
if QMessageBox.question(self, "", "Are you sure you want to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No,) == QMessageBox.Yes:
|
||||
self._do_quit = True
|
||||
self.close()
|
||||
|
||||
def home_deltatau_faststages(self):
|
||||
def cb_deltatau_home_faststages(self):
|
||||
_log.warning("homing fast stages")
|
||||
epics.PV("SAR-EXPMX1:ASYN.AOUT").put(b"enable plc 1")
|
||||
|
||||
def prepare_left_tabs(self):
|
||||
tabs = self._left_tabs
|
||||
tabs.currentChanged.connect(self.switch_task)
|
||||
tabs.currentChanged.connect(self.cb_switch_task)
|
||||
|
||||
setup_tab = self._tab_setup
|
||||
exp_tab = self._tab_experiment
|
||||
@@ -1532,11 +1540,11 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
#grp.layout().addWidget(self._ppm_feature_size_spinbox, 0, 1)
|
||||
self._btn_pix2pos = but = QPushButton("pix2pos")
|
||||
but.setCheckable(True)
|
||||
but.clicked.connect(self.update_pix2pos)
|
||||
but.clicked.connect(self.cb_update_pix2pos)
|
||||
grp.layout().addWidget(but, 0, 0)
|
||||
self._btn_opt_ctr = but = QPushButton("opt_ctr")
|
||||
but.setCheckable(True)
|
||||
but.clicked.connect(self.update_opt_ctr)
|
||||
but.clicked.connect(self.cb_update_opt_ctr)
|
||||
grp.layout().addWidget(but, 1, 0)
|
||||
|
||||
help = QTextBrowser()
|
||||
@@ -1570,7 +1578,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
# tbox.addItem(grp, "PPM ToolBox")
|
||||
# self._ppm_toolbox = grp
|
||||
|
||||
tbox.currentChanged.connect(self.switch_task)
|
||||
tbox.currentChanged.connect(self.cb_switch_task)
|
||||
|
||||
# final stretch
|
||||
# setup_tab.layout().addStretch()
|
||||
@@ -1610,7 +1618,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
#tab.layout().addWidget(self._preloc_inspect_area)
|
||||
|
||||
|
||||
def switch_task(self, index=0):
|
||||
def cb_switch_task(self, index=0):
|
||||
stack = self._centerpiece_stack
|
||||
task = self._left_tabs.currentWidget().accessibleName()
|
||||
setup_task = self._setup_toolbox.currentWidget().accessibleName()
|
||||
@@ -1633,7 +1641,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self.set_active_task(active_task)
|
||||
self._status_task.setText(active_task)
|
||||
|
||||
def update_pix2pos(self, calib):
|
||||
def cb_update_pix2pos(self, calib):
|
||||
app=QApplication.instance()
|
||||
if calib:
|
||||
_log.info("received new pix2pos calibration")
|
||||
@@ -1644,11 +1652,11 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
res=QMessageBox.question(self, "calibration", f"use calibration\n{s} ? ")
|
||||
if res==QMessageBox.Yes:
|
||||
geo=app._geometry
|
||||
geo.update_pix2pos(app._raw_pix2pos)
|
||||
geo.cb_update_pix2pos(app._raw_pix2pos)
|
||||
app._cfg.setValue(AppCfg.GEO_PIX2POS, geo._lut_pix2pos)
|
||||
del app._raw_pix2pos
|
||||
|
||||
def update_opt_ctr(self, calib):
|
||||
def cb_update_opt_ctr(self, calib):
|
||||
app=QApplication.instance()
|
||||
if calib:
|
||||
_log.info("received new pix2pos calibration")
|
||||
@@ -1732,6 +1740,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
sz=np.array(go._dscr['size'])
|
||||
fid=fid/sz
|
||||
trf=geometry.geometry.least_square_trf(ptFitTrf,fid)
|
||||
print(trf)
|
||||
tr=go.transform()
|
||||
tr.setMatrix(1, trf[1,0]/trf[0,0], 0,
|
||||
trf[0,1]/trf[1,1], 1, 0,
|
||||
@@ -2044,7 +2053,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
)
|
||||
self.move_gonio_to_mount_position(offset=self._pin_mounting_offset)
|
||||
elif "samplealignment" in state:
|
||||
self.escape_goToSampleAlignment()
|
||||
self.cb_esc_sample_alignment()
|
||||
except:
|
||||
zescape.reply("Maintenance")
|
||||
zescape.reply(self._escape_current_state)
|
||||
@@ -2238,12 +2247,12 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self.engage_mouse_tracking()
|
||||
|
||||
def _OLD_engage_mouse_tracking(self):
|
||||
self.glw.scene().sigMouseMoved.connect(self.mouse_move_event)
|
||||
self.glw.scene().sigMouseMoved.connect(self.cb_mouse_move)
|
||||
self.glw.scene().sigMouseMoved.emit()
|
||||
self._mouse_tracking = True
|
||||
|
||||
def _OLD_disengage_mouse_tracking(self):
|
||||
self.glw.scene().sigMouseMoved.disconnect(self.mouse_move_event)
|
||||
self.glw.scene().sigMouseMoved.disconnect(self.cb_mouse_move)
|
||||
self._mouse_tracking = False
|
||||
self._lb_coords.setText("")
|
||||
|
||||
@@ -2376,7 +2385,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
(omega, t_omega, 0.01),
|
||||
]
|
||||
)
|
||||
self.escape_goToSampleExchange()
|
||||
self.cb_esc_sample_exchange()
|
||||
|
||||
def _OLD_lock_goniometer(self):
|
||||
# tell.set_in_mount_position(True)
|
||||
@@ -3063,7 +3072,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self.daq_method_prelocated_update_markers()
|
||||
|
||||
if option(ACTIVATE_PULSE_PICKER) or not option(SKIP_ESCAPE_TRANSITIONS_IF_SAFE):
|
||||
self.escape_goToSampleAlignment()
|
||||
self.cb_esc_sample_alignment()
|
||||
|
||||
sequence = {"delta tau program": shapepath.prg, "points": shapepath.points.tolist(), "timestamp": tdstamp(),}
|
||||
|
||||
@@ -3111,7 +3120,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
return
|
||||
|
||||
if option(ACTIVATE_PULSE_PICKER) or not option(SKIP_ESCAPE_TRANSITIONS_IF_SAFE):
|
||||
self.escape_goToDataCollection()
|
||||
self.cb_esc_data_collection()
|
||||
|
||||
folders.make_if_needed()
|
||||
|
||||
@@ -3260,7 +3269,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
self.re_connect_collect_button()
|
||||
jungfrau_detector.abort()
|
||||
if option(ACTIVATE_PULSE_PICKER) or not option(SKIP_ESCAPE_TRANSITIONS_IF_SAFE):
|
||||
self.escape_goToSampleAlignment()
|
||||
self.cb_esc_sample_alignment()
|
||||
self.increaseRunNumberRequest.emit()
|
||||
|
||||
if option(DELTATAU_SHOW_PLOTS):
|
||||
@@ -3323,15 +3332,15 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
||||
but = QPushButton("Exchange\nSample")
|
||||
but.setAccessibleName("escape_button_se")
|
||||
but.setObjectName("action_SampleExchange")
|
||||
but.clicked.connect(self.escape_goToSampleExchange)
|
||||
but.clicked.connect(self.cb_esc_sample_exchange)
|
||||
layout.addWidget(but)
|
||||
but = QPushButton("Alignment")
|
||||
but.setAccessibleName("escape_button_sa")
|
||||
but.clicked.connect(self.escape_goToSampleAlignment)
|
||||
but.clicked.connect(self.cb_esc_sample_alignment)
|
||||
layout.addWidget(but)
|
||||
but = QPushButton("Collection")
|
||||
but.setAccessibleName("escape_button_dc")
|
||||
but.clicked.connect(self.escape_goToDataCollection)
|
||||
but.clicked.connect(self.cb_esc_data_collection)
|
||||
layout.addWidget(but)
|
||||
cont.layout().addWidget(w)
|
||||
|
||||
@@ -3565,7 +3574,7 @@ if __name__=="__main__":
|
||||
|
||||
startupWin.set(60, f'start main window')
|
||||
|
||||
app._mainWnd=wnd=SwissMxWnd()
|
||||
app._mainWnd=wnd=WndSwissMx()
|
||||
wnd.show()
|
||||
startupWin._wnd.finish(wnd)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user