have swissmx.py running with some commented modules in ESC network

git dt 98297263 swissmx.py
 git dt 7445a5aa CustomROI.py app_config.py app_utils.py epics_widgets/MotorTweak.py epics_widgets/SmaractMotorTweak.py
This commit is contained in:
2022-07-15 09:41:21 +02:00
parent 7445a5aae6
commit db7e5e537f
6 changed files with 124 additions and 105 deletions

View File

@@ -4,7 +4,7 @@ from PyQt5 import QtGui, QtCore
from PyQt5.QtGui import QColor, QTransform
from PyQt5.QtWidgets import QMenu, QAction, QSpinBox, QMenu
from GenericDialog import GenericDialog
#from GenericDialog import GenericDialog #ZAC: orig. code
from pyqtgraph import ROI, Point, RectROI, mkPen
from pyqtgraph import functions as fn

View File

@@ -151,3 +151,7 @@ https://pyepics.github.io/pyepics/arrays.html
EPICS_CA_ADDR_LIST='129.129.244.255 sf-saresc-cagw.psi.ch:5062 sf-saresc-cagw.psi.ch:5066'
cd /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/oldRepos/app/src
python swissmx.py
caput SAR-EXPMX:MOT_FX.RBV -2.700
caput SAR-EXPMX:MOT_FY.RBV -7.450
caput SAR-EXPMX:MOT_CZ.RBV 1.509

View File

@@ -24,11 +24,10 @@ Best regards
Helge
"""
import enum
import logging
_log = logging.getLogger(__name__)
import epics
import enum, epics, time
import numpy as np
@@ -226,6 +225,10 @@ class epics_cam(object):
self._sim['imgIdx']=0
_log.info('dome')
def set_transformations(self,*args):
_log.error('OLD FUNCTION NOT IMPLEMENTED {}'.format(args))
if __name__ == "__main__":
import time, os, PIL.Image, platform, subprocess
import argparse
@@ -259,6 +262,7 @@ if __name__ == "__main__":
if not args.ui:
cam = epics_cam(prefix=args.prefix)
#cam._transformation=np.array(((-1,0),(0,1)),dtype=np.uint8) #ZAC: orig. code
if args.prefix is None:
cam.sim_gen(mode=args.sim)

View File

@@ -8,7 +8,7 @@ from PyQt5.uic import loadUiType
from epics import PV
from epics.ca import pend_event
from app_utils import assert_tweaker_positions
#from app_utils import assert_tweaker_positions #ZAC: orig. code
Ui_MotorTweak, QWidget = loadUiType('epics_widgets/MotorTweak.ui')
logger = logging.getLogger(__name__)

View File

@@ -8,12 +8,15 @@
'''
coordinate systems, optical center, xray axis, pixel sizes etc.
'''
import logging
import numpy as np
_log = logging.getLogger(__name__)
class geometry:
def __init__(self):
pass
def find_optical_center(p):
def find_optical_center(self,p):
# p is an array of
# at zoom out: (p1x,p1y),(p2x,p2y),(p3x,p3y),...
# at zoom in : (p1x,p1y),(p2x,p2y),(p3x,p3y),...
@@ -24,7 +27,7 @@ class geometry:
# this coordinate represents also the origin of other coordinates
pass
def zoom2pixsz(zoom):
def zoom2pixsz(self,zoom):
# this returns the pixel size at a given zoom level
# the returned value is a 2x2 matrix:
# [pxx pxy]
@@ -34,7 +37,7 @@ class geometry:
# [pyx pyy]*[ny] results in a vector in meter of a vector [nx,ny] pixels in x and y direction
pass
def set_zoom2pixsz(meas):
def set_zoom2pixsz(self,meas):
#calculates _lut_z2p out of measurements
# the _lut_z2p is dictionaty a lookuptable
# zoom {1,200,400,600,800,1000}
@@ -44,23 +47,23 @@ class geometry:
'zoom': np.array((1,200,400,600,800,1000),dtype=np.float32),
'pixsz': np.array(
#((pxx,pxy),(pyx,pyy)), # zoom n
(( 1,0),(0, 1)), # zoom 1
((( 1,0),(0, 1)), # zoom 1
(( 2,0),(0, 2)), # zoom 200
(( 4,0),(0, 4)), # zoom 400
(( 6,0),(0, 6)), # zoom 600
(( 8,0),(0, 8)), # zoom 800
((10,0),(0,10)), # zoom 1000
((10,0),(0,10))), # zoom 1000
dtype=np.float32)}
n=len(meas)
zoom =np.ndarray(shape=n,dtype=np.float32)
pixsz=np.ndarray(shape=(n,2,2),dtype=np.float32)
n=len(meas)
zoom =np.ndarray(shape=n,dtype=np.float32)
pixsz=np.ndarray(shape=(n,2,2),dtype=np.float32)
for i,(k,v) in enumerate(meas):
pass
self._lut_z2p={ 'zoom': zoom, 'pixsz': pixsz}
for i,(k,v) in enumerate(meas):
pass
self._lut_z2p={ 'zoom': zoom, 'pixsz': pixsz}
def autofocus():
def autofocus(self):
# cam camera object
# mot motor object
# rng region (min max relative to current position) to seek
@@ -69,17 +72,17 @@ class geometry:
# mode mode to calculate sharpness (sum/max-min/hist? of edge detection in roi)
pass
def pix2pos(p,zoom=None):
def pix2pos(self,p,zoom=None):
# returns the position m(x,y) in meter relative to the optical center at a given zoom level of the pixel p(x,y)
# if zoom=None, the last zoom value is used
pass
def pos2pix(p,zoom=None):
def pos2pix(self,p,zoom=None):
# returns the pixel p(x,y) of the position m(x,y) in meter relative to the optical center at a given zoom level
# if zoom=None, the last zoom value is used
pass
def optctr2xray():
def optctr2xray(self):
# returns the vector m(x,y) of the optical center to the xray
pass

180
swissmx.py Normal file → Executable file
View File

@@ -1,4 +1,5 @@
#!/usr/bin/env python3
import time, os
import json
import random
import re
@@ -8,20 +9,20 @@ import threading
from epics.ca import pend_event
from matplotlib import pyplot
import Wigis
#import Wigis #ZAC: orig. code
import app_utils
import jungfrau_widget
import bernina_pulse_picker
#import jungfrau_widget #ZAC: orig. code
#import bernina_pulse_picker #ZAC: orig. code
import qutilities
import storage
#import storage #ZAC: orig. code
from app_config import settings, appsconf, option, toggle_option, simulated
# publisher = pubber.Publisher()
from zmq_escape import zescape
#from zmq_escape import zescape #ZAC: orig. code
from helicalscan import HelicalScanGui
#from helicalscan import HelicalScanGui #ZAC: orig. code
SKIP_ESCAPE_TRANSITIONS_IF_SAFE = "escape/skip_transitions_if_safe"
@@ -52,33 +53,32 @@ logging.getLogger("PyQt5.uic").setLevel(logging.CRITICAL)
logging.getLogger("requests").setLevel(logging.CRITICAL)
logging.getLogger("urllib3").setLevel(logging.CRITICAL)
logging.getLogger("paramiko").setLevel(logging.CRITICAL)
FORMAT = "%(asctime)-15s - %(levelname)s - %(name)s - %(message)s"
logging.basicConfig(format=FORMAT, level=logging.DEBUG)
logging.basicConfig(level=logging.DEBUG, format='%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s ')
logger = logging.getLogger("swissmx")
import PrelocatedCoordinatesModel
from EmblModule import EmblWidget
from HelicalTable import HelicalTableWidget
from Wigis import Spinner, Checkbox
#import PrelocatedCoordinatesModel #ZAC: orig. code
#from EmblModule import EmblWidget #ZAC: orig. code
#from HelicalTable import HelicalTableWidget #ZAC: orig. code
#from Wigis import Spinner, Checkbox #ZAC: orig. code
import camera
import epics
import numpy as np
from exceptions import *
#from exceptions import * #ZAC: orig. code
import qoptic
#import qoptic #ZAC: orig. code
from backlight import Backlight
backlight = Backlight()
import mx_swissfel
#import mx_swissfel #ZAC: orig. code
swissfel = mx_swissfel.SwissFELMachine()
#swissfel = mx_swissfel.SwissFELMachine() #ZAC: orig. code
import qtawesome
from bernina_pulse_picker import pulsePicker
#from bernina_pulse_picker import pulsePicker #ZAC: orig. code
from PyQt5 import QtCore, QtGui
from PyQt5.QtCore import Qt, pyqtSlot, QSize, QRegExp, pyqtSignal, QObject, QThread
@@ -109,12 +109,14 @@ from PyQt5.QtWidgets import (
)
from PyQt5.uic import loadUiType
from CustomROI import BeamMark, Grid, CrystalCircle
from GenericDialog import GenericDialog
from dialogs.PreferencesDialog import PreferencesDialog
from epics_widgets import zoom
from CustomROI import BeamMark
#from CustomROI import BeamMark, Grid, CrystalCircle #ZAC: orig. code
#from GenericDialog import GenericDialog #ZAC: orig. code
#from dialogs.PreferencesDialog import PreferencesDialog #ZAC: orig. code
#from epics_widgets import zoom #ZAC: orig. code
from epics_widgets.MotorTweak import MotorTweak
from epics_widgets.SmaractMotorTweak import SmaractMotorTweak
import zoom
_URL = "http://PC12288:8080"
@@ -122,31 +124,31 @@ _URL = "http://PC12288:8080"
# tell = TellClient.TellClient(_URL)
import eventer
#import eventer #ZAC: orig. code
from detector_control import jungfrau_detector
#from detector_control import jungfrau_detector #ZAC: orig. code
from findxtal import findObj
#from findxtal import findObj #ZAC: orig. code
import pyqtgraph as pg
import pyqtgraph.exporters
if simulated:
logger.warning("simulation mode enabled")
qoptic_zoom = qoptic.FeturaClientBogus()
else:
qoptic_zoom = qoptic.FeturaClient()
#if simulated: #ZAC: orig. code #ZAC: orig. code
# logger.warning("simulation mode enabled")
# qoptic_zoom = qoptic.FeturaClientBogus()
#else:
# qoptic_zoom = qoptic.FeturaClient()
pg.setConfigOption("antialias", True)
# from epics_widgets import MotorTweak
#from epics_widgets import MotorTweak
Ui_MainWindow, QMainWindow = loadUiType("swissmx.ui")
user = getpass.getuser()
home = os.path.expanduser("~")
just_quit = user in ["e10003", "gac-esbmx"]
#user = getpass.getuser() #ZAC: orig. code
#home = os.path.expanduser("~")
#just_quit = user in ["e10003", "gac-esbmx"]
folders = storage.Folders()
#folders = storage.Folders() #ZAC: orig. code
TASK_JUNGFRAU_SETTINGS = "jungfrau_settings"
TASK_SETUP_PPM_CALIBRATION = "ppm_calibration"
@@ -163,9 +165,9 @@ TASK_HELICAL = "helical"
TASK_EMBL = "embl"
from deltatau import DeltaTau, shapepath, helical, DebugPlot
#from deltatau import DeltaTau, shapepath, helical, DebugPlot #ZAC: orig. code
delta_tau = DeltaTau()
#delta_tau = DeltaTau() #ZAC: orig. code
BROKER_SERVER = "127.0.0.1"
@@ -176,9 +178,14 @@ BROKER_PORT = 61613
logger.info(
f"connecting to microscope to camera server: {appsconf['microscope']['sample_camera']['pv_prefix']} "
)
sample_camera = camera.camera_server(
basename=appsconf["microscope"]["sample_camera"]["pv_prefix"]
)
#sample_camera = camera.camera_server( #ZAC: orig. code
# basename=appsconf["microscope"]["sample_camera"]["pv_prefix"]
#)
#sample_camera = camera.epics_cam(appsconf["microscope"]["sample_camera"]["pv_prefix"])
sample_camera = camera.epics_cam(None)
sample_camera.sim_gen(mode=0)
sample_camera.run()
# sample_camera.set_transformations([camera.Transforms.FLIP_LR, camera.Transforms.ROTATE_270])
@@ -337,7 +344,7 @@ class Main(QMainWindow, Ui_MainWindow):
self._fel_status = QLabel(None)
self._fel_status.setAccessibleName("fel_status_statusbar")
self.statusbar.addPermanentWidget(self._fel_status)
swissfel.statusStringUpdated.connect(self._fel_status.setText)
#swissfel.statusStringUpdated.connect(self._fel_status.setText) #ZAC: orig. code
self._status_task = QLabel(None)
self._status_task.setAccessibleName("status_task_label")
self.statusbar.addPermanentWidget(self._status_task)
@@ -357,19 +364,19 @@ class Main(QMainWindow, Ui_MainWindow):
self.prepare_microscope_page()
self.prepare_embl_gui()
self.prepare_left_tabs()
self.update_beam_marker(qoptic_zoom.get_position())
#self.update_beam_marker(qoptic_zoom.get_position()) #ZAC: orig. code
self._centerpiece_stack.setCurrentIndex(0)
self._centerpiece_stack.currentChanged.connect(self.center_piece_update)
self.init_validators()
self.init_settings_tracker()
self.wire_storage()
self.create_helical_widgets()
#self.create_helical_widgets() #ZAC: orig. code
self.center_piece_update(0) # start camera updater
curzoom = qoptic_zoom.get_position(cached=False)
logger.debug(f"starting app with zoom at {curzoom}")
self.zoom_changed_cb(curzoom)
#curzoom = qoptic_zoom.get_position(cached=False) #ZAC: orig. code
#logger.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()
@@ -428,10 +435,10 @@ class Main(QMainWindow, Ui_MainWindow):
sample_camera.pause()
def updateImage(self, pause=False):
if not sample_camera.is_paused():
img = sample_camera.get_image()
if img is not None:
self.img.setImage(img)
#if not sample_camera.is_paused(): #ZAC: orig. code
img = sample_camera.get_image()
if img is not None:
self.img.setImage(img)
def init_settings_tracker(self):
logger.info("configuring widget persistence")
@@ -472,7 +479,7 @@ class Main(QMainWindow, Ui_MainWindow):
k, func_get()
)
)
self.storage_cascade_prefix(None)
#self.storage_cascade_prefix(None) #ZAC: orig. code
def init_validators(self):
identifier_regex = QRegExp("[a-z-A-Z_0-9%]+")
@@ -578,7 +585,7 @@ class Main(QMainWindow, Ui_MainWindow):
self.timer.timeout.connect(self.check_zescape)
self.timer.start(20)
else:
zescape.stop_listening()
#zescape.stop_listening() #ZAC: orig. code
logger.warning("re-starting timer on camera update")
try:
self.timer.stop()
@@ -716,8 +723,8 @@ class Main(QMainWindow, Ui_MainWindow):
block.setAccessibleName(TASK_JUNGFRAU_SETTINGS)
block.setContentsMargins(0, 0, 0, 0)
block.setLayout(QVBoxLayout())
self.jungfrau = jungfrau_widget.JungfrauWidget()
block.layout().addWidget(self.jungfrau)
#self.jungfrau = jungfrau_widget.JungfrauWidget() #ZAC: orig. code
#block.layout().addWidget(self.jungfrau) #ZAC: orig. code
block.layout().addStretch()
tbox.addItem(block, "Jungfrau Parameters")
@@ -743,9 +750,9 @@ class Main(QMainWindow, Ui_MainWindow):
self._button_shutter = but
grp.layout().addWidget(but, 0, 0, 1, 2)
self._pv_shutter.add_callback(self.update_shutter_label)
else:
self._picker = bernina_pulse_picker.PickerWidget()
grp.layout().addWidget(self._picker, 0, 0, 1, 2)
#else: #ZAC: orig. code
# self._picker = bernina_pulse_picker.PickerWidget()
# grp.layout().addWidget(self._picker, 0, 0, 1, 2)
but = QPushButton("clear beam markers")
but.clicked.connect(self.remove_beam_markers)
grp.layout().addWidget(but, 1, 1)
@@ -796,38 +803,38 @@ class Main(QMainWindow, Ui_MainWindow):
but.clicked.connect(lambda bogus: self.modify_camera_transform("undo_last"))
grp.layout().addWidget(but, 0, 1)
but = QPushButton("Turn 90 CCW")
but.clicked.connect(
lambda bogus, n=camera.Transforms.ROTATE_90: self.modify_camera_transform(n)
)
#but.clicked.connect(
# lambda bogus, n=camera.Transforms.ROTATE_90: self.modify_camera_transform(n)
#) #ZAC: orig. code
grp.layout().addWidget(but, 1, 0)
but = QPushButton("Turn 90 CW")
but.clicked.connect(
lambda bogus, n=camera.Transforms.ROTATE_270: self.modify_camera_transform(
n
)
)
#but.clicked.connect(
# lambda bogus, n=camera.Transforms.ROTATE_270: self.modify_camera_transform(
# n
# )
#) #ZAC: orig. code
grp.layout().addWidget(but)
but = QPushButton("Turn 180 CCW")
but.clicked.connect(
lambda bogus, n=camera.Transforms.ROTATE_180: self.modify_camera_transform(
n
)
)
#but.clicked.connect(
# lambda bogus, n=camera.Transforms.ROTATE_180: self.modify_camera_transform(
# n
# )
#) #ZAC: orig. code
grp.layout().addWidget(but)
but = QPushButton("Transpose")
but.clicked.connect(
lambda bogus, n=camera.Transforms.TRANSPOSE: self.modify_camera_transform(n)
)
#but.clicked.connect(
# lambda bogus, n=camera.Transforms.TRANSPOSE: self.modify_camera_transform(n)
#) #ZAC: orig. code
grp.layout().addWidget(but)
but = QPushButton("Flip L/R")
but.clicked.connect(
lambda bogus, n=camera.Transforms.FLIP_LR: self.modify_camera_transform(n)
)
#but.clicked.connect(
# lambda bogus, n=camera.Transforms.FLIP_LR: self.modify_camera_transform(n)
#) #ZAC: orig. code
grp.layout().addWidget(but)
but = QPushButton("Flip U/D")
but.clicked.connect(
lambda bogus, n=camera.Transforms.FLIP_UD: self.modify_camera_transform(n)
)
#but.clicked.connect(
# lambda bogus, n=camera.Transforms.FLIP_UD: self.modify_camera_transform(n)
#) #ZAC: orig. code
grp.layout().addWidget(but)
row = grp.layout().rowCount()
self._label_transforms = QLabel()
@@ -885,7 +892,7 @@ class Main(QMainWindow, Ui_MainWindow):
exp_tab.layout().addStretch()
# DAQ Methods Tabs
self.build_daq_methods_prelocated_tab()
#self.build_daq_methods_prelocated_tab() #ZAC: orig. code
self.build_daq_methods_grid_tab()
self.build_sample_selection_tab()
@@ -931,14 +938,14 @@ class Main(QMainWindow, Ui_MainWindow):
sample_camera.set_transformations([])
elif t == "undo_last":
sample_camera._transformations.pop()
elif type(t) ==type(camera.Transforms):
sample_camera.append_transform(t)
#elif type(t) ==type(camera.Transforms): #ZAC: orig. code
# sample_camera.append_transform(t)
try:
label = ", ".join([t.name for t in sample_camera._transformations])
except:
label = ""
self._label_transforms.setText(label)
settings.setValue(CAMERA_TRANSFORMATIONS, sample_camera._transformations)
#settings.setValue(CAMERA_TRANSFORMATIONS, sample_camera._transformations) #ZAC: orig. code
def roi_add_line(self):
roi = pg.LineSegmentROI(
@@ -978,9 +985,9 @@ class Main(QMainWindow, Ui_MainWindow):
self._tab_daq_method_embl.setLayout(QVBoxLayout())
layout = self._tab_daq_method_embl.layout()
motors = self.get_gonio_motors()
self._embl_module = EmblWidget(self)
self._embl_module.configure(motors, sample_camera, qoptic_zoom)
layout.addWidget(self._embl_module)
#self._embl_module = EmblWidget(self) #ZAC: orig. code
#self._embl_module.configure(motors, sample_camera, qoptic_zoom)
#layout.addWidget(self._embl_module)
def prepare_microscope_page(self):
layout = self.microscope_page.layout()
@@ -3639,10 +3646,11 @@ def main():
main = Main()
main.show()
splash.finish(main)
main.update_user_and_storage()
#main.update_user_and_storage() #ZAC: orig. code
sys.exit(app.exec_())
if __name__ == "__main__":
app = None
os.environ['EPICS_CA_ADDR_LIST'] ='129.129.244.255 sf-saresc-cagw.psi.ch:5062 sf-saresc-cagw.psi.ch:5066'
main()