From 63c2e136831d5b0c05d128748b4cb80f23b5f933 Mon Sep 17 00:00:00 2001 From: Thierry Zamofing Date: Tue, 1 Oct 2024 14:36:27 +0200 Subject: [PATCH] SFELPHOTON-1356: wip --- ARESvis/ARESvis.py | 87 ++++++++++++++++++++++++++-------------------- Makefile | 2 +- 2 files changed, 51 insertions(+), 38 deletions(-) diff --git a/ARESvis/ARESvis.py b/ARESvis/ARESvis.py index 85d6634..ce9585e 100755 --- a/ARESvis/ARESvis.py +++ b/ARESvis/ARESvis.py @@ -22,7 +22,8 @@ SATES30-ARES:MOT_JFRY.RBV # jungfrau detector angle: SATES30-ARES:MOT_2TRY.RBV # 2thetha angle: foc.mirror Diode2 Diode3 SATES30-ARES:MOT_DRY.RBV # detector angle: Diode1 Mirror SATES30-ARES:MOT_SRY.RBV # sample rotation - +SATES30-MCS001:MOT_6 # Parabola TX +SATES30-ACSFM:MOT_TZ # Foc. Mirror TZ bitmask for simulation: 0x01: EPICS motors @@ -117,7 +118,10 @@ class ARESdevice(): 'aJFr':140, # angle detector 'a2Th':116, # angle 2thetha 'aDet':100, # angle detector - 'aTrg':10, # angle target + 'aTrg':10, # angle target + 'txPar':0, # parabola translation x + 'tyPar':50.8,# parabola translation y + 'tzFM':10, # focussing mirror translation z 'sclTrf':(2**(6/2), 2**(-2/2)), # scaling transfformation [angle, distance] } @@ -192,6 +196,11 @@ class ARESdevice(): aJFr=p['aJFr'] aDet=p['aDet'] aTrg=p['aTrg'] + + txPar=-p['txPar'] #opposite direction + tyPar=p['tyPar'] + tzFM =p['tzFM'] + sclTrf=p['sclTrf'] #x=p.get('x',0) #y=p.get('y',0) @@ -338,9 +347,9 @@ class ARESdevice(): qp.setBrush(QColor(0,255,0,192)) #mirror:310x30mm, 10-40mm dist, 40mm outside 2th - qp.translate(20,-r2Th-40);qp.rotate(2) + qp.translate(20,-r2Th-40);qp.rotate(2);qp.translate(0,tzFM) qp.drawRect(0, 0, 30, 310) # foc. mirror 1 - qp.setTransform(tf2Th);qp.translate(-20,-r2Th-40);qp.rotate(-2) + qp.setTransform(tf2Th);qp.translate(-20,-r2Th-40);qp.rotate(-2);qp.translate(0,tzFM) qp.drawRect(-30, 0, 30, 310) # foc. mirror 2 qp.setTransform(tf2Th);qp.rotate(54);qp.translate(-diW/2,-r2Th); @@ -364,7 +373,7 @@ class ARESdevice(): qp.drawLine(0,-rDet,0,-rDet+tickL) #tick qp.setPen(penBk) qp.setBrush(QColor(0,0,255,192)) - qp.setTransform(tfDet);qp.rotate(165.4);qp.translate(-diW/2,-rDet); + qp.setTransform(tfDet);qp.rotate(165.4);qp.translate(-diW/2,-rDet) qp.drawRect(0, 0, diW, diH) # diode1 qp.setTransform(tfDet);qp.rotate(181);qp.translate(0,-rDet+miW/2);qp.rotate(-45) qp.drawRect(-int(miW/2), 0, miW, miH) # mirror1 @@ -378,29 +387,29 @@ class ARESdevice(): qp.setBrush(QColor(0,255,255,192)) qp.drawRect(int(-(tgW/2)), -tgH, tgW, tgH) # target mount sample - # --- fixed objects --- - #parabola mirror + # --- parabola mirror --- qp.setTransform(tf0) qp.setPen(penBk) qp.setBrush(QColor(192,192,0,192)) - a,b=50.8,12 + #x,x0,y,y0=3*50.8,3*12,3*50.8,3*12 + x,x0,y,y0=50.8,12,50.8,4 + qp.translate(txPar-x/2, tyPar) path=QPainterPath() - path.moveTo(-b-a/2,a) - path.lineTo(-b-a/2,2*a) - path.lineTo( a/2,2*a) - path.lineTo( a/2,2*a) - path.cubicTo(a/2-20,2*a, -a/2,a+20, -a/2,a) - path.lineTo(-b-a/2,a) + path.moveTo(0,0) + path.cubicTo(0,y/2,x/2,y,x,y) + path.lineTo(x,y+y0) + path.lineTo(-x0,y+y0) + path.lineTo(-x0,0) + path.lineTo(0,0) qp.drawPath(path) - #qp.drawPolygon(QPolygonF([QPointF(-b-a/2,a), - # QPointF(-b-a/2,2*a), - # QPointF( a/2,2*a), - # QPointF( -a/2,a),])) + qp.drawLine(x/2,y+y0,x/2,0) + + # --- parabola beam path --- qp.setPen(penBl) - qp.drawLine(0 ,0 ,int(a/2) ,int(2*a)) - qp.drawLine(int(rArm),int(2*a),int(a/2) ,int(2*a)) - qp.drawLine(0 ,0 ,int(-a/2),int(a )) - qp.drawLine(int(rArm),int(a) ,int(-a/2),int(a )) + qp.drawLine(0,0,int(x/2),int(-tyPar)) + qp.drawLine(0,0,int(rArm+x/2-txPar),0) + qp.drawLine(x,y,int(x/2),int(-tyPar)) + qp.drawLine(x,y,int(rArm+x/2-txPar),y) class WndVisualize(QWidget): @@ -409,7 +418,9 @@ class WndVisualize(QWidget): 'SATES30-ARES:MOT_2TRY.RBV':'a2Th', 'SATES30-ARES:MOT_JFRY.RBV':'aJFr', 'SATES30-ARES:MOT_DRY.RBV' :'aDet', - 'SATES30-ARES:MOT_SRY.RBV' :'aTrg' + 'SATES30-ARES:MOT_SRY.RBV' :'aTrg', + 'SATES30-MCS001:MOT_6.RBV' :'txPar', + 'SATES30-ACSFM:MOT_TZ.RBV' :'tzFM', } def __init__(self): @@ -428,12 +439,15 @@ class WndVisualize(QWidget): lg=QGridLayout(w) pDev=dev._paint for key, rng, tk in ( - ('aArm',(0,360,), 30), # angle ARES sliding seal - ('a2Th',(0,360,), 30), # angle 2thetha - ('aJFr' ,(0,360,), 30), # angle Jungfrau - ('aDet',(0,360,), 30), # angle detector - ('aTrg',(0,360,), 30), # angle target - ('sclA', ( -8, 8), 1), + ('aArm' ,( 0,360,), 30), # angle ARES sliding seal + ('a2Th' ,( 0,360,), 30), # angle 2thetha + ('aJFr' ,( 0,360,), 30), # angle Jungfrau + ('aDet' ,( 0,360,), 30), # angle detector + ('aTrg' ,( 0,360,), 30), # angle target + ('txPar',(-50, 50,), 10), # parabola translation x + ('tzFM' ,(-50, 50,), 10), # focussing mirror translation z + + ('sclA', (-8, 8), 1), ('sclD', (-8, 8), 1), #('x', (-100, 100), 10), #('y', (-100, 100), 10), @@ -616,14 +630,13 @@ class WndVisualize(QWidget): return wGrp=self._wdGrpDraw #if wGrp.underMouse(): #draging sliders? - #if wGrp.geometry().contains(mousePos): - # self.liveView() - # self._mouseDrag={'obj':wGrp, 'start':mousePos} - # return - dev=app._dev - if dev.containsPoint(mousePos): - self._devSel=dev - self._mouseDrag={'obj':dev,'start':(mousePos,dev._paint['ofs'])} + if wGrp.geometry().contains(mousePos): + self._mouseDrag={'obj':wGrp, 'start':mousePos} + else: + dev=app._dev + if dev.containsPoint(mousePos): + self._devSel=dev + self._mouseDrag={'obj':dev,'start':(mousePos,dev._paint['ofs'])} try: _log.info(f'{self._mouseDrag}') except AttributeError: diff --git a/Makefile b/Makefile index 176cc0a..792eca0 100644 --- a/Makefile +++ b/Makefile @@ -18,7 +18,7 @@ install: @echo "- /EsfRixsApps/.git/\n- /EsfRixsApps/scratch/\n- /**/__pycache__/\n- /**.ipynb*" >/tmp/rsync.filt @cat /tmp/rsync.filt rsync -vai --filter='. /tmp/rsync.filt' $(SRC) $(REMOTE):$(APP) - -ssh $(REMOTE) 'for A in ARESvis RIXSconfig spectrumProc; do $(APP)/EsfRixsApps/AppTemplate.py -b /sf/furka -a $$A -p EsfRixsApps ;done' + -ssh $(REMOTE) 'for A in ARESvis ESF_RIXS spectrumProc; do $(APP)/EsfRixsApps/AppTemplate.py -b /sf/furka -a $$A -p EsfRixsApps ;done' # -ssh $(REMOTE) 'for A in ARESvis RIXSconfig spectrumProc; do ln -sF $(APP)/EsfRixsApps/$$A/$$A.py $(BIN)/$$A;done'