diff --git a/.gitignore b/.gitignore index c18dd8d..471c493 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ __pycache__/ +PBSwissMX/ +PBTools/ +simCamImg/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4c6784e --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ +.PHONY: dbg uninstall init update +.DEFAULT_GOAL := update + +REMOTE=$(USER)@saresc-vcons-01 +APP=/sf/cristallina/applications +BIN=/sf/cristallina/bin +SRC=$(shell pwd) + + +dbg: + @echo REMOTE $(REMOTE) + @echo APP $(APP) + @echo BIN $(BIN) + @echo SRC $(SRC) + +uninstall: + ssh $(REMOTE) 'rm -rf $(APP)/SwissMX $(BIN)/swissmx' + +init: + -ssh $(REMOTE) 'git clone -o psigithub git@git.psi.ch:grp-sf_cristallina/SwissMX.git $(APP)/SwissMX' + -ssh $(REMOTE) 'git clone -o psigithub git@git.psi.ch:grp-sf_cristallina/PBSwissMX.git $(APP)/SwissMX/PBSwissMX' + -ssh $(REMOTE) 'git clone -o psigithub git@git.psi.ch:epics_support_apps/PBTools.git $(APP)/SwissMX/PBTools' + -ssh $(REMOTE) 'git clone -o psigithub git@git.psi.ch:epics_support_apps/ppmac.git $(APP)/SwissMX/PBTools/ppmac' + -rsync -vai simCamImg $(REMOTE):$(APP)/SwissMX/ +# -rsync -vai ../../PBTools $(REMOTE):$(APP)/SwissMX/ +# -ssh $(REMOTE) 'git clone -o psigithub git@git.psi.ch:epics_support_apps/PBTools.git $(APP)/PBTools' +# ssh $(REMOTE) 'pip3.6 install --user pandas zmq qtawesome' +# ssh $(REMOTE) '/opt/gfa/python-3.8/latest/bin/pip install --user pandas zmq qtawesome' +# ssh $(REMOTE) 'pip3.6 install --prefix /sf/cristallina/applications/SwissMX/module pandas zmq qtawesome' +# ssh $(REMOTE) '/opt/gfa/python-3.8/latest/bin/pip install --prefix /sf/cristallina/applications/SwissMX/module pandas zmq qtawesome' + +update: + ssh $(REMOTE) 'cd $(APP)/SwissMX && git fetch psigithub && git reset psigithub/master --hard' + ssh $(REMOTE) 'cd $(APP)/SwissMX/PBSwissMX && git fetch psigithub && git reset psigithub/master --hard' + ssh $(REMOTE) 'cp $(APP)/SwissMX/exec.sh $(BIN)/swissmx' diff --git a/PrelocatedCoordinatesModel.py b/PrelocatedCoordinatesModel.py index 2b5ea99..176767f 100644 --- a/PrelocatedCoordinatesModel.py +++ b/PrelocatedCoordinatesModel.py @@ -5,7 +5,10 @@ from os.path import join from typing import List import numpy as np -import pandas as pd +try: + import pandas as pd +except ImportError as e: + print (f'{e} import failed') #import transformations as tfs from PyQt5.QtCore import Qt, QFileInfo, pyqtSignal, pyqtSlot diff --git a/Readme.md b/Readme.md index 4571c41..7bf0c5d 100644 --- a/Readme.md +++ b/Readme.md @@ -1,9 +1,32 @@ +Repository structure and dependency (update:23.09.24) +----------------------------------------------------- +``` +https://jira.psi.ch/browse/SFELPHOTON-1337 + +psigithub git@git.psi.ch:grp-sf_cristallina/SwissMX.git --> ~/Documents/prj/SwissFEL/apps/SwissMX + Main python user interface fro SwissMX + +psigithub git@git.psi.ch:grp-sf_cristallina/PBSwissMX.git --> ~/Documents/prj/SwissFEL/apps/PBSwissMX + PowerBrick documents and tool to generate trajectories and motion programs for SwissMX + +psigithub git@git.psi.ch:epics_support_apps/PBTools.git --> ~/Documents/prj/SwissFEL/PBTools + packages needed by PBSwissMX for low level communication to PowerBrick + +psigithub git@git.psi.ch:epics_support_apps/ppmac.git --> ~/Documents/prj/SwissFEL/PBTools/ppmac + packages needed by PBTools for lowest level communication to PowerBrick + +additional module 'slic' is needed, which is provided by Sven and covers the JungFrau acquisition framefork +``` + deployment and tests (update: 18.01.24) --------------------------------------- +#initial full deployment: +git commit-amend && git push psigithub -f && make uninstall init update + + Document to start SwissMX in cristallina environment: https://docs.google.com/document/d/1yEmV_DbRBKQKVCoovjXriNgSjNEBaz50WA0l3yA5jtg/edit#heading=h.z9io692b8tow - ``` *************************** * push local stuff to git * @@ -22,13 +45,14 @@ git push psigithub ************************************* ssh zamofing_t@saresc-cons-03 -#PRELIMINARY: - #cd /sf/cristallina/applications/mx/zamofing_t/ESB_MX - #git remote add psigithub git@git.psi.ch:epics_ioc_modules/ESB_MX.git - #cd /sf/cristallina/applications/mx/zamofing_t/ESB_MX/python/SwissMX - #git remote add psigithub git@git.psi.ch:zamofing_t/SwissMX.git +#first time only: +cd /sf/cristallina/applications/ +git clone -o psigithub git@git.psi.ch:grp-sf_cristallina/SwissMX.git +git clone -o psigithub git@git.psi.ch:grp-sf_cristallina/SwissMX_PB.git +rsync -vain ~/Documents/prj/SwissFEL/apps/SwissMX/simCamImg saresc-cons-03:/sf/cristallina/applications/SwissMX/ +cd /sf/cristallina/applications/SwissMX -cd /sf/cristallina/applications/mx/zamofing_t/ESB_MX/python/SwissMX &&\ +cd /sf/cristallina/applications/SwissMX &&\ git checkout master &&\ git stash push &&\ git fetch psigithub master &&\ @@ -36,19 +60,28 @@ git reset psigithub/master --hard &&\ git stash pop #git pull psigithub --ff-only master -cd /sf/cristallina/applications/mx/zamofing_t/ESB_MX &&\ +cd /sf/cristallina/applications/SwissMX_PB &&\ git checkout master &&\ git stash push &&\ git fetch psigithub master &&\ git reset psigithub/master --hard &&\ -git stash pop && chmod -R g+w * +git stash pop #git pull psigithub --ff-only master ******************* * run application * ******************* +additionally needed packages on an RH8 system: +pip install --user pandas zmq qtawesome +mkdir -p /sf/cristallina/applications/python3.6-packages +pip3.6 install --prefix /sf/cristallina/applications/SwissMX pandas zmq qtawesome + +cd /sf/cristallina/applications/SwissMX +/opt/gfa/python-3.8/latest/bin/python swissmx.py + + ssh gac-cristall@saresc-cons-03 (pw:ValToira_2021) -cd /sf/cristallina/applications/mx/zamofing_t/ESB_MX/python/SwissMX/ +cd /sf/cristallina/applications/SwissMX/ # conda env list conda activate crmx38 python swissmx.py --sim 0xc0 @@ -383,9 +416,11 @@ MXMotion.py -> setup_sync() s.a. ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/Readme.md -> EVR ``` - - - +23.9.24 spitting/moving repositories +------------------------------------ +``` +https://jira.psi.ch/browse/SFELPHOTON-1337: SwissMX split/ cleanup/move repositories +``` ----------------------------------- SCRATCH ----------------------------------- diff --git a/exec.sh b/exec.sh new file mode 100755 index 0000000..a6660da --- /dev/null +++ b/exec.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# this file is copied by the Makefile to /sf/cristallina/bin/swissmx +# Check if Python version is less than 3.6 +if python -c 'import sys; exit(1) if sys.version_info[0] < 3 or sys.version_info[1] < 6 else exit(0)' +then + BIN=python +else + BIN=/opt/gfa/python-3.8/latest/bin/python +fi +APP=/sf/cristallina/applications/SwissMX/swissmx.py +cd ${APP%/*} +echo $BIN $APP $* +$BIN $APP $* diff --git a/illumination.py b/illumination.py index 17b2897..46983aa 100755 --- a/illumination.py +++ b/illumination.py @@ -45,7 +45,7 @@ all = 0xff class IlluminationControl(object): - def __init__(self,hostname: str="129.129.221.92",port: int=1003): + def __init__(self,hostname: str="129.129.221.71",port: int=1003): if hostname is None: #simulated mode self._sim={'stat':0} _log.info('simulated mode:{}'.format(self._sim)) @@ -59,7 +59,10 @@ class IlluminationControl(object): # connect to XT-PICO self._socket=s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(1) - s.connect((self._hostname, self._port)) + try: + s.connect((self._hostname, self._port)) + except socket.timeout as e: + _log.error(f"{e} can't connect to: {self._hostname}:{self._port}") def disconnect(self): try: diff --git a/psi_device.py b/psi_device.py index 2ed7492..665d481 100644 --- a/psi_device.py +++ b/psi_device.py @@ -1,20 +1,24 @@ -import logging +import logging,sys,os,socket + from math import ceil _log=logging.getLogger(__name__) + if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG,format='%(name)s:%(levelname)s:%(module)s:%(lineno)d:%(funcName)s:%(message)s ') logging.getLogger('matplotlib').setLevel(logging.INFO) -import sys,os,socket -sys.path.insert(0, os.path.expanduser('..')) -hostname=socket.gethostname() -if hostname=='ganymede': - sys.path.insert(0, os.path.expanduser('~/Documents/prj/SwissFEL/PBTools/')) -else: - sys.path.insert(0, os.path.expanduser('/sf/cristallina/applications/mx/zamofing_t/PBTools/')) + if socket.gethostname()=='ganymede': + sys.path.insert(0, os.path.expanduser('~/Documents/prj/SwissFEL/PBTools')) + else: + sys.path.insert(0, '/sf/cristallina/applications/SwissMX/PBTools') + sys.path.insert(0, '/sf/cristallina/applications/SwissMX/PBSwissMX/python') + #_log.info(sys.path) +elif socket.gethostname()!='ganymede': + #TODO: cleanup slic installation location sys.path.insert(0, os.path.expanduser('/sf/cristallina/applications/mx/slic')) - #("/photonics/home/gac-cristall/Documents/swissmx_cristallina/slic/")) - #from slic.core.acquisition import SFAcquisition + #sys.path.insert(0, os.path.expanduser('/sf/cristallina/applications/slic/slic-package')) + + from PyQt5.QtWidgets import (QApplication,) from app_config import AppCfg #settings, option, toggle_option diff --git a/swissmx.py b/swissmx.py index c76d535..1f2d32d 100755 --- a/swissmx.py +++ b/swissmx.py @@ -90,18 +90,14 @@ logging.basicConfig(level=logging.INFO, format='%(levelname)s:%(module)s:%(linen #logging.getLogger('pbtools.misc.pp_comm').setLevel(logging.INFO) _log = logging.getLogger("swissmx") -class col: - d = '\033[0m' #default - r = '\033[31m' #red - g = '\033[32m' #green - y = '\033[33m' #yellow - rr= '\033[91m' #red(bright) - gg= '\033[92m' #green(bright) - yy= '\033[93m' #yellow(bright) - b = '\033[1m' #bold - u = '\033[4m' #underline - - +if __name__=="__main__": + import sys,socket + if socket.gethostname()=='ganymede': + sys.path.insert(0, os.path.expanduser('~/Documents/prj/SwissFEL/PBTools')) + else: + sys.path.insert(0, '/sf/cristallina/applications/SwissMX/PBTools') + sys.path.insert(0, '/sf/cristallina/applications/SwissMX/PBSwissMX/python') + #_log.info(sys.path) import time class timestamp(): @@ -2670,8 +2666,6 @@ if __name__=="__main__": #use EPICS if connected to ESC network os.environ['EPICS_CA_ADDR_LIST'] ='129.129.244.255 sf-saresc-cagw.psi.ch:5062 sf-saresc-cagw.psi.ch:5066' - - #(h, t)=os.path.split(sys.argv[0]);cmd='\n '+(t if len(h)>20 else sys.argv[0])+' ' #exampleCmd=('', '-m0xf -v0') epilog=__doc__ #+'\nExamples:'+''.join(map(lambda s:cmd+s, exampleCmd))+'\n'