wip
This commit is contained in:
85
swissmx.py
85
swissmx.py
@@ -77,7 +77,7 @@ TASK_HELICAL = "helical"
|
||||
TASK_EMBL = "embl"
|
||||
|
||||
|
||||
#import PrelocatedCoordinatesModel #ZAC: orig. code
|
||||
import PrelocatedCoordinatesModel
|
||||
#from EmblModule import EmblWidget #ZAC: orig. code
|
||||
#from HelicalTable import HelicalTableWidget #ZAC: orig. code
|
||||
#from Wigis import Spinner, Checkbox #ZAC: orig. code
|
||||
@@ -105,12 +105,15 @@ from CustomROI import BeamMark
|
||||
#from epics_widgets import zoom #ZAC: orig. code
|
||||
from epics_widgets.MotorTweak import MotorTweak
|
||||
from epics_widgets.SmaractMotorTweak import SmaractMotorTweak
|
||||
from epics_widgets.SimMotorTweak import SimMotorTweak
|
||||
|
||||
|
||||
from matplotlib import pyplot
|
||||
import numpy as np
|
||||
import pyqtgraph as pg
|
||||
import pyqtgraph.exporters
|
||||
pg.setConfigOption("antialias", True)
|
||||
# use antialias for draw lines, interpret image data as row-major instead of col-major
|
||||
pg.setConfigOptions(antialias=True,imageAxisOrder='row-major')
|
||||
|
||||
import app_utils
|
||||
from app_config import settings, appsconf, option, toggle_option, simulated
|
||||
@@ -222,6 +225,8 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
super(Main, self).__init__()
|
||||
self.setupUi(self)
|
||||
|
||||
app=QApplication.instance()
|
||||
|
||||
if os.getenv("DEVELOPMENT_VERSION"):
|
||||
title = "[DEVELOPMENT] SwissMX - Solid support scanning for FEL sources"
|
||||
else:
|
||||
@@ -251,13 +256,13 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
self.microscope_page.layout().addWidget(self.glw)
|
||||
self.glw.show()
|
||||
|
||||
self.vb = self.glw.addViewBox(enableMenu=False)
|
||||
self.vb = self.glw.addViewBox(invertY=True)#,enableMenu=False)
|
||||
self.img = pg.ImageItem()
|
||||
self.img._swissmx_name = "microscope_image_item"
|
||||
# self.graphicsView.setCentralItem(self.vb)
|
||||
self.glw.scene().sigMouseMoved.connect(self.mouse_move_event)
|
||||
self.glw.scene().sigMouseClicked.connect(self.mouse_click_event)
|
||||
self.vb.setAspectLocked()
|
||||
self.vb.setAspectLocked(True)
|
||||
self.vb.setBackgroundColor((120, 90, 90))
|
||||
self.vb.addItem(self.img)
|
||||
|
||||
@@ -330,9 +335,9 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
#self.create_helical_widgets() #ZAC: orig. code
|
||||
|
||||
self.center_piece_update(0) # start camera updater
|
||||
#curzoom = qoptic_zoom.get_position(cached=False) #ZAC: orig. code
|
||||
#_log.debug(f"starting app with zoom at {curzoom}")
|
||||
#self.zoom_changed_cb(curzoom)
|
||||
curzoom = app._zoom.get()
|
||||
_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()
|
||||
|
||||
@@ -806,7 +811,7 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
exp_tab.layout().addStretch()
|
||||
|
||||
# DAQ Methods Tabs
|
||||
#self.build_daq_methods_prelocated_tab() #ZAC: orig. code
|
||||
self.build_daq_methods_prelocated_tab() #ZAC: orig. code
|
||||
self.build_daq_methods_grid_tab()
|
||||
self.build_sample_selection_tab()
|
||||
|
||||
@@ -1037,17 +1042,20 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
self._lb_coords.setText("")
|
||||
|
||||
def mouse_move_event(self, pos):
|
||||
app = QApplication.instance()
|
||||
self._mouse_pos = pos
|
||||
task = self.active_task()
|
||||
xy = self.img.mapFromScene(pos)
|
||||
z = qoptic_zoom.get_position()
|
||||
z = app._zoom.get()
|
||||
_log.debug('mouse_pos:{} scene_pos:{} zoom:{}'.format(pos,xy,z))
|
||||
#TODO: implement mouse handling
|
||||
# if self._ppm_toolbox._force_ppm > 0:
|
||||
# ppm = self._ppm_toolbox._force_ppm
|
||||
# else:
|
||||
try:
|
||||
ppm = self.ppm_fitter(z)
|
||||
except:
|
||||
ppm = 0 # do not move if we don't know ppm
|
||||
ppm = 1
|
||||
x, y = xy.x(), xy.y()
|
||||
try:
|
||||
bx, by = self.get_beam_mark_on_camera_xy()
|
||||
@@ -1055,12 +1063,13 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
bx, by = 500, 500
|
||||
dx = (x - bx) / ppm
|
||||
dy = -(y - by) / ppm
|
||||
|
||||
fx = self.tweakers["fast_x"].motor.get_position()
|
||||
fy = self.tweakers["fast_y"].motor.get_position()
|
||||
|
||||
fx += dx
|
||||
fy += dy
|
||||
try:
|
||||
fx = self.tweakers["fast_x"].motor.get_position()
|
||||
fy = self.tweakers["fast_y"].motor.get_position()
|
||||
fx += dx
|
||||
fy += dy
|
||||
except:
|
||||
fx=fy=0
|
||||
|
||||
self._lb_coords.setText(
|
||||
"\u23FA{:>}:{:>6.0f} {:<.0f}"
|
||||
@@ -1073,10 +1082,11 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
"PPM", ppm,
|
||||
"Distance to beam", 1000 * dx, 1000 * dy,
|
||||
"Stage", fx, fy,
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
def mouse_click_event(self, event):
|
||||
app=QApplication.instance()
|
||||
fx_motor, fy_motor, bx_motor, bz_motor, omega_motor = self.get_gonio_tweakers()
|
||||
_log.debug("{}".format(event))
|
||||
_log.debug(" pos {}".format(event.pos()))
|
||||
@@ -1090,13 +1100,13 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
event.ignore()
|
||||
return
|
||||
pos = event.scenePos()
|
||||
zoom_level = qoptic_zoom.get_position()
|
||||
zoom_level = app._zoom.get()
|
||||
_log.debug(" zoom {}".format(zoom_level))
|
||||
|
||||
try:
|
||||
ppm = self.ppm_fitter(zoom_level)
|
||||
except:
|
||||
ppm = 0 # do not move if we don't know ppm
|
||||
ppm = 1 # 0: do not move if we don't know ppm
|
||||
dblclick = event.double()
|
||||
shft = Qt.ShiftModifier & event.modifiers()
|
||||
ctrl = Qt.ControlModifier & event.modifiers()
|
||||
@@ -1110,11 +1120,11 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
pixel_dist = np.linalg.norm(a - b)
|
||||
_log.debug("distance to beam: {:.1f} pixels".format(pixel_dist))
|
||||
|
||||
omega = omega_motor.motor.get_position()
|
||||
omega = omega_motor.get_position()
|
||||
_log.debug("omega at {:.03f} degrees".format(omega))
|
||||
|
||||
fx = fx_motor.motor.get_position()
|
||||
fy = fy_motor.motor.get_position()
|
||||
fx = fx_motor.get_position()
|
||||
fy = fy_motor.get_position()
|
||||
dx = (x - bx) / ppm
|
||||
dy = -(y - by) / ppm
|
||||
fx += dx
|
||||
@@ -1210,7 +1220,8 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
pass
|
||||
|
||||
def get_beam_mark_on_camera_xy(self):
|
||||
z = qoptic_zoom.get_position()
|
||||
app=QApplication.instance()
|
||||
z = app._zoom.get()
|
||||
try:
|
||||
bx = self.beamx_fitter(z)
|
||||
by = self.beamy_fitter(z)
|
||||
@@ -1250,6 +1261,7 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
self._escape_current_state = "ManualSampleExchange"
|
||||
|
||||
def escape_goToSampleAlignment(self):
|
||||
app=QApplication.instance()
|
||||
self._escape_current_state = "busy"
|
||||
|
||||
steps = [
|
||||
@@ -1258,7 +1270,7 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
]
|
||||
if option(CRYOJET_MOTION_ENABLED):
|
||||
steps.extend([lambda: self.move_cryojet_nozzle("in")])
|
||||
steps.extend([lambda: self.move_post_tube("out"), lambda: backlight.move("in")])
|
||||
steps.extend([lambda: self.move_post_tube("out"), lambda: app._backlight.move("in")])
|
||||
self.escape_run_steps(steps, "Transitioning to Sample Alignment")
|
||||
self._escape_current_state = "SampleAlignment"
|
||||
|
||||
@@ -1435,6 +1447,9 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
dx = settings.value("collimator/dx", 1e10, type=float)
|
||||
dy = settings.value("collimator/dy", 1e10, type=float)
|
||||
|
||||
_log.info('Skip Zac''s orig. code')
|
||||
return
|
||||
# ZAC: orig. code
|
||||
if 1e9 < x_pos + y_pos + dx + dy:
|
||||
raise IncompleteConfiguration("COLLIMATOR configuration is incomplete!")
|
||||
|
||||
@@ -1704,6 +1719,9 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
)
|
||||
|
||||
def move_post_tube(self, dir):
|
||||
_log.info('Skip Zac''s orig. code')
|
||||
return
|
||||
# ZAC: orig. code
|
||||
try:
|
||||
tandem_twv = float(self._post_tandem_tweak_val.text())
|
||||
except:
|
||||
@@ -1809,11 +1827,19 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
dsy.move_relative(-tandem_twv)
|
||||
|
||||
def get_tweaker(self, pv, alias=None, label=None, mtype="epics_motor", layout=None, **kwargs):
|
||||
app = QApplication.instance()
|
||||
sim=app._args.sim
|
||||
if mtype == "epics_motor":
|
||||
m = MotorTweak()
|
||||
if sim&0x10:
|
||||
m=SimMotorTweak()
|
||||
else:
|
||||
m = MotorTweak()
|
||||
else:
|
||||
m = SmaractMotorTweak()
|
||||
#m.connect_motor(pv, label, **kwargs) #ZAC: orig. code
|
||||
if sim&0x20:
|
||||
m=SimMotorTweak()
|
||||
else:
|
||||
m = SmaractMotorTweak()
|
||||
m.connect_motor(pv, label, **kwargs)
|
||||
self.tweakers[alias] = m
|
||||
return m
|
||||
|
||||
@@ -1825,7 +1851,7 @@ class Main(QMainWindow, Ui_MainWindow):
|
||||
else:
|
||||
m = SmaractMotorTweak()
|
||||
layout.addWidget(m)
|
||||
#m.connect_motor(pv, label)#ZAC: orig. code
|
||||
m.connect_motor(pv, label)
|
||||
self.tweakers[alias] = m
|
||||
|
||||
def done_sliding(self):
|
||||
@@ -3217,6 +3243,7 @@ def main():
|
||||
# set app icon
|
||||
|
||||
app = QApplication(sys.argv)
|
||||
app._args=args
|
||||
|
||||
if args.sim&0x01:
|
||||
app._backlight = backlight.Backlight(None)
|
||||
@@ -3232,7 +3259,7 @@ def main():
|
||||
app._zoom = zoom.QopticZoom()
|
||||
if args.sim&0x08:
|
||||
app._camera = camera.epics_cam(None)
|
||||
app._camera.sim_gen(mode=0)
|
||||
app._camera.sim_gen(mode=1)
|
||||
app._camera.run()
|
||||
else:
|
||||
app._camera = camera.epics_cam()
|
||||
|
||||
Reference in New Issue
Block a user