SFELPHOTON-1752: add diode. Other work still ongoing. So this is a beta version

This commit is contained in:
2025-08-12 14:49:10 +02:00
parent a81d19ec2a
commit 0136dfa466

View File

@@ -44,7 +44,7 @@ from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QSlider
QCheckBox, QHBoxLayout, QVBoxLayout, QGroupBox, QGridLayout, QComboBox
from PyQt5.QtGui import QPainter, QColor, QPen, QBrush, QPolygon, QPolygonF, QTransform, QPainterPath, \
QPixmap, QMouseEvent, QImage
from PyQt5.QtCore import QPoint, QPointF, Qt,pyqtSignal
from PyQt5.QtCore import QPoint, QPointF, Qt,pyqtSignal,QObject
#import PyQt5.QtGui as QtGui
#import PyQt5.QtCore as QtCore
@@ -315,12 +315,12 @@ class ARESdevice():
#qp.drawRect(-10, -10+rArm, 20, 20)
#--- pixmaps ---
pm=pic['bl'] #bellow
pm=pic['bl'] # bellow
w,h=pm.width(),pm.height()
qp.setTransform(tfArm);qp.translate(0, -rArm);qp.scale(.64,.64)
qp.drawPixmap(QPointF(-w/2,-h),pm)
pm=pic['mi'] #foccussing mirror
pm=pic['mi'] # foccussing mirror
w,h=pm.width(),pm.height()
qp.setTransform(tf2Th);qp.translate(-39.6,-273.6);qp.scale(.64,.64)
qp.drawPixmap(QPointF(-w/2,-h/2),pm)
@@ -330,26 +330,31 @@ class ARESdevice():
qp.setTransform(tf2Th);qp.rotate(54);qp.translate(0,-240);qp.scale(.64,.64)
qp.drawPixmap(QPointF(-w/2,-h/2),pm)
pm=pic['df'] #diffrantometer
pm=pic['df'] # diffrantometer
w,h=pm.width(),pm.height()
qp.setTransform(tfTrg);qp.translate(22, 17);qp.scale(.64,.64)
qp.drawPixmap(QPointF(-w/2,-h/2),pm)
pm=pic['jf'] #jungfrau detector
pm=pic['jf'] # jungfrau detector
w,h=pm.width(),pm.height()
qp.setTransform(tfJFr);qp.translate(-25, -225);qp.scale(.64,.64)
qp.drawPixmap(QPointF(-w/2,-h/2),pm)
pm=pic['lm'] #laser mirror
pm=pic['lm'] # laser mirror
w,h=pm.width(),pm.height()
qp.setTransform(tfDet);qp.rotate(181-7);qp.translate(13, -193);qp.scale(.64,.64)
qp.drawPixmap(QPointF(-w/2,-h/2),pm)
pm=pic['di'] #diode
pm=pic['di'] # diode det1
w,h=pm.width(),pm.height()
qp.setTransform(tfDet);qp.rotate(165.4);qp.translate(-0, -205);qp.scale(.64,.64)
qp.drawPixmap(QPointF(-w/2,-h/2),pm)
pm=pic['di'] # diode det2
w,h=pm.width(),pm.height()
qp.setTransform(tfDet);qp.rotate(-96);qp.translate(-0, -205);qp.scale(.64,.64)
qp.drawPixmap(QPointF(-w/2,-h/2),pm)
#--- RIXS-arm devices ---
qp.setTransform(tfArm)
qp.setPen(QPen(Qt.red, tickW, Qt.SolidLine))
@@ -394,7 +399,9 @@ class ARESdevice():
qp.setPen(penBk)
qp.setBrush(QColor(0,0,255,192))
qp.setTransform(tfDet);qp.rotate(165.4);qp.translate(-diW/2,-rDet)
qp.drawRect(0, 0, diW, diH) # diode1
qp.drawRect(0, 0, diW, diH) # diode det1
qp.setTransform(tfDet);qp.rotate(-96);qp.translate(-diW/2,-rDet)
qp.drawRect(0, 0, diW, diH) # diode det2
qp.setTransform(tfDet);qp.rotate(181);qp.translate(0,-rDet+miW/2);qp.rotate(-45)
qp.drawRect(-int(miW/2), 0, miW, miH) # mirror1
@@ -441,7 +448,7 @@ class ARESdevice():
qp.setPen(penBl)
qp.setTransform(QTransform())
for r,a,tf in ((rArm,aArm,tfArm),(r2Th,a2Th,tf2Th),(rDet,aDet,tfDet),(rJFr,aJFr,tfJFr),(rTrg/2,aTrg,tfTrg),):
p=QPoint(*tf.map(0, -r+40))
p=QPoint(*tf.map(0, int(-r+40)))
txt=f'{a:.5g}°'
txr=qp.boundingRect(p.x(), p.y(), 0, 0, Qt.AlignLeft, txt)
txr.moveTop(int(txr.y()-txr.height()/2))
@@ -468,11 +475,16 @@ class WndVisualize(QWidget):
'SATES30-MCS001:MOT_6.RBV' :'txPar',
'SATES30-ACSFM:MOT_TZ.RBV' :'tzFM',
}
#updSignal=pyqtSignal(str, float, str)
def __init__(self):
super().__init__()
self.initUI()
self.connectEPICS()
# self.update() must be called in main thread. Else gui may block after some time
# PV monitoring is done in a separate thread. Therefore functions as:
# OnConnectionChange, OnValueChange MUST NOT call update, but use this Signal helper class.
#self.updSignal.connect(lambda key,value,col: self.vis_update(key,value,col))
def initUI(self):
self.setGeometry(560, 100, 1300, 800)
@@ -597,6 +609,7 @@ class WndVisualize(QWidget):
except KeyError as e:
_log.warning(f"can't handle PV: {pvname}:{value}")
return
#self._updSignal.emit() # self.update() would block after some time
self.vis_update(key,value,'008000')
def vis_update(self,key,value,col='000000'):