This commit is contained in:
2022-09-06 15:10:57 +02:00
parent cbae02c597
commit 8d8ab1a5fd
3 changed files with 84 additions and 31 deletions

View File

@@ -108,6 +108,7 @@ ts.log('Import part 5/8:')
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
np.set_printoptions(suppress=True,linewidth=196)
import pyqtgraph as pg
import pyqtgraph.exporters
# use antialias for draw lines, interpret image data as row-major instead of col-major
@@ -378,6 +379,7 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
def init_graphics(self):
app = QApplication.instance()
cfg = app._cfg
geo = app._geometry
self.glw = pg.GraphicsLayoutWidget()
self.microscope_page.setLayout(QVBoxLayout())
self.microscope_page.layout().addWidget(self.glw)
@@ -431,15 +433,31 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
#grid.setTransform(tr) # assign transform
vb.addItem(grid)
#--- fixed group ---
# uses pix2pos transformation with a fixed fx,fy value =(0,0)
# contains beam marker
self._goFixGrp=grp=pg.ItemGroup()
geo.interp_zoom(1)
pix2pos=geo._pix2pos
A=np.asarray(pix2pos.I)
tr=grp.transform()
p1=np.hstack((opt_ctr,1)) #position of optical center on image item
p2=np.matmul(trf, p1) #position of optical center on viewbox
tr.setMatrix(A[0,0], A[0,1], 0,
A[1,0], A[1,1], 0,
p2[0], p2[1], 1) # translate dx,dy
grp.setTransform(tr)
self.vb.addItem(grp)
#--- beam marker ---
bm_sz=np.array((50, 40)) # it is immidiatly repositioned in cb_zoom_changed
self._goBeamMarker=obj=UsrGO.Marker(-opt_ctr-bm_sz/2,bm_sz,mode=0)
obj._size_eu=cfg.value(AppCfg.GEO_BEAM_SZ)
obj._pos_eu=cfg.value(AppCfg.GEO_BEAM_POS)
size_eu=cfg.value(AppCfg.GEO_BEAM_SZ)
pos_eu=cfg.value(AppCfg.GEO_BEAM_POS)
pos_eu*=0
self._goBeamMarker=obj=UsrGO.Marker(pos_eu-size_eu/2,size_eu,mode=0)
obj.sigRegionChangeFinished.connect(self.cb_marker_moved)
#bm.setTransform(tr) # assign transform
vb.addItem(obj)
grp.addItem(obj)
#--- testing scan grid ---
#self.track_objects() # first call is needed to initialize the structure self._goTracked
@@ -802,15 +820,28 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
except AttributeError as e:
_log.warning(e)
else:
grp=self._goFixGrp
opt_ctr=geo._opt_ctr
bm=self._goBeamMarker
bm_sz=np.abs(geo.pos2pix(bm._size_eu))
bm_pos=-opt_ctr-geo.pos2pix(bm._pos_eu)-bm_sz/2
bm.blockSignals(True) # avoid to call cb_marker_moved
bm.setPos(bm_pos,finish=False)
bm.setSize(bm_sz)
bm.blockSignals(False)
_log.debug(f"zoom->{value} beam marker pos:{bm_pos} sz:{bm_sz})")
A=np.asarray(geo._pix2pos.I)
#trf=cfg.value(AppCfg.GEO_CAM_TRF)
tr=self._goImgGrp.transform()
trf=np.array( ((tr.m11(),tr.m21(),tr.m31()),(tr.m12(),tr.m22(),tr.m32()),(tr.m13(),tr.m23(),tr.m33())) )
tr=grp.transform()
p1=np.hstack((opt_ctr, 1)) # position of optical center on image item
p2=np.matmul(trf, p1) # position of optical center on viewbox
tr.setMatrix(A[0, 0], A[0, 1], 0,
A[1, 0], A[1, 1], 0,
p2[0], p2[1], 1) # translate dx,dy
grp.setTransform(tr)
#bm=self._goBeamMarker
#bm_sz=np.abs(geo.pos2pix(bm._size_eu))
#bm_pos=-opt_ctr-geo.pos2pix(bm._pos_eu)-bm_sz/2
#bm.blockSignals(True) # avoid to call cb_marker_moved
#bm.setPos(bm_pos,finish=False)
#bm.setSize(bm_sz)
#bm.blockSignals(False)
#_log.debug(f"zoom->{value} beam marker pos:{bm_pos} sz:{bm_sz})")
self.track_objects()
def cb_move_backlight_safe(self, pos):
@@ -982,10 +1013,12 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
task = self.active_task()
z = app._zoom.get_val()
#bm=self._goBeamMarker
bm=self._goBeamMarker
#pos=event.scenePos()
pImg=pg.Point(self._goImg.mapFromScene(pos))
pTrk=pg.Point(self._goTracked.mapFromScene(pos))
pFix=pg.Point(self._goFixGrp.mapFromScene(pos))
pFix-=bm.pos()+bm.size()/2
fx=self.tweakers["fast_x"].get_val()
fy=self.tweakers["fast_y"].get_val()
pRel=pTrk-(fx,fy)
@@ -1000,7 +1033,7 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
s=\
f'img pix ({pImg[0]:0.1f} {pImg[1]:0.1f})px \u23A2 ' \
f'stage ({pTrk[0]:0.4f} {pTrk[1]:>0.4f} {cz:>0.4f})mm \u23A2 ' \
f'dist to beam ({pRel[0]:>0.4f} {pRel[1]:>0.4f})mm '
f'dist to beam ({pFix[0]:>0.4f} {pFix[1]:>0.4f})mm '
#f'dist to beam ({pRel[0]:>0.6g} {pRel[1]:>0.6g}mm) '
#_log.debug(s)
@@ -1079,19 +1112,20 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
_log.debug(f'move to position :scene pos {pos}')
geo=app._geometry
bm=self._goBeamMarker
pImg=pg.Point(self._goImg.mapFromScene(pos))
pTrk=pg.Point(self._goTracked.mapFromScene(pos))
fx=self.tweakers["fast_x"].get_val()
fy=self.tweakers["fast_y"].get_val()
pRel=pTrk-(fx, fy)
_log.debug(f'dist to beam ({pTrk[0]:>0.6g} {pTrk[1]:>0.6g}mm)')
pFix=pg.Point(self._goFixGrp.mapFromScene(pos))
pFix-=bm.pos()+bm.size()/2
_log.debug(f'dist to beam ({pFix[0]:>0.6g} {pFix[1]:>0.6g}mm)')
fx_motor=self.tweakers["fast_x"]
fy_motor=self.tweakers["fast_y"]
#fx_motor.move_rel(pRel[0])
#fy_motor.move_rel(pRel[1])
fx_motor.move_abs(pTrk[0])
fy_motor.move_abs(pTrk[1])
fx_motor.move_rel(pFix[0])
fy_motor.move_rel(pFix[1])
#fx_motor.move_abs(fx_motor.get_val()+pFix[0])
#fy_motor.move_abs(fy_motor.get_val()+pFix[1])
try:
pln=geo._fitPlane
except AttributeError: pass
@@ -1283,8 +1317,8 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
tr=grp.transform()
#UsrGO.obj_info(tr)
bm=self._goBeamMarker
bm_pos=bm._pos_eu
bm_sz=bm._size_eu
bm_pos=bm.pos()
bm_sz=bm.size()
pos=(-fx,-fy)-bm_pos
#fx_px,fy_px=geo.pos2pix((fx,fy)-bm_pos)-opt_ctr
@@ -1878,8 +1912,8 @@ class WndSwissMx(QMainWindow, Ui_MainWindow):
#cb.addItems(["Fiducial", "FixTarget(12.5x12.5)", "FixTarget(23.0x23.0)", "FixTarget(<param>)", "Grid(<param>)"])
bm_pos_eu=self._goBeamMarker._pos_eu
bm_size_eu=self._goBeamMarker._size_eu
#bm_pos_eu=self._goBeamMarker._pos_eu
#bm_size_eu=self._goBeamMarker._size_eu
if idx==0:
#go=UsrGO.Fiducial(bm_pos+bm_sz/2-(20, 20), (40, 40),(fx,fy,bz))