towards document type

This commit is contained in:
2022-08-26 19:10:23 +02:00
parent 8fbd1c56af
commit b52fa6d9bd
3 changed files with 151 additions and 42 deletions

View File

@@ -182,9 +182,15 @@ class WndFixTarget(QWidget):
bl.addWidget(param, 1, 1,1,1) bl.addWidget(param, 1, 1,1,1)
self._btnAdd=btnAdd = QPushButton("add obj") self._btnAdd=btnAdd = QPushButton("add obj")
btnAdd.clicked.connect(self.add_obj) #btnAdd.clicked.connect(lambda x: _log.warning("TODO: IMPLEMENT") )
bl.addWidget(btnAdd, 1, 2,1,1) bl.addWidget(btnAdd, 1, 2,1,1)
self._btnDelAll=btnDelAll = QPushButton("del all")
#btnDelAll.clicked.connect(lambda x: _log.warning("TODO: IMPLEMENT") )
bl.addWidget(btnDelAll, 2, 2,1,1)
# but = QPushButton("Dump to console") # but = QPushButton("Dump to console")
# but.clicked.connect(self.dump_data) # but.clicked.connect(self.dump_data)
@@ -275,6 +281,15 @@ class WndFixTarget(QWidget):
print(data) print(data)
self._data=data self._data=data
self._tree.setData(data) self._tree.setData(data)
try:
wnd=app._mainWnd
except AttributeError:
_log.info('_mainWnd not handeled')
pass
else:
for go in data:
wnd.vb.addItem(go)
wnd._goTracked['objLst']=self._data
return return
@@ -358,9 +373,6 @@ class WndFixTarget(QWidget):
json.dump(self._data, f,cls=MyJsonEncoder) json.dump(self._data, f,cls=MyJsonEncoder)
print(self._data) print(self._data)
def add_obj(self):
_log.warning("TODO: IMPLEMENT")
def delete_selected(self): def delete_selected(self):
row = self._current_row row = self._current_row
try: try:

View File

@@ -18,6 +18,7 @@ from pyqtgraph.Qt import QtCore, QtGui
import numpy as np import numpy as np
from PyQt5.QtGui import QPolygon,QPolygonF from PyQt5.QtGui import QPolygon,QPolygonF
from PyQt5.QtCore import Qt,QPointF,QLineF from PyQt5.QtCore import Qt,QPointF,QLineF
import yaml
def obj_tree(obj,p=''): def obj_tree(obj,p=''):
obj_info(obj,p) obj_info(obj,p)
@@ -159,6 +160,24 @@ class Fiducial(pg.ROI):
p.setTransform(tr) p.setTransform(tr)
def __repr__(self):
s=f'{self.__class__.__name__}:(pos:{tuple(self.pos())}, size:{tuple(self.size())}, xyz:{self._xyz}}}'
return s
@staticmethod
def yaml_repr(dumper, data):
m={'pos':(data.pos()),'size':(data.size()),'xyz':(map(float,data._xyz))}
return dumper.represent_mapping(u'!Fiducial', m)
@staticmethod
def yaml_cnstr(loader, node):
m=loader.construct_mapping(node)
return Fiducial(**m)
yaml.add_representer(Fiducial, Fiducial.yaml_repr)
yaml.add_constructor(u'!Fiducial', Fiducial.yaml_cnstr)
class Grid(pg.ROI): class Grid(pg.ROI):
'''a grid''' '''a grid'''
@@ -224,21 +243,24 @@ class Grid(pg.ROI):
def __repr__(self): def __repr__(self):
s=f'{self.__class__.__name__}:(pos:{tuple(self.pos())}, size:{tuple(self.size())}, cnt:{self._cnt}, ficucialScale:{self._fidScl}}}' s=f'{self.__class__.__name__}:(pos:{tuple(self.pos())}, size:{tuple(self.size())}, cnt:{self._cnt}, ficucialScale:{self._fidScl}}}'
return s return s
import yaml
def yaml_repr_Grid(dumper, data): @staticmethod
def yaml_repr(dumper, data):
#s=f'{{"pos":{tuple(data.pos())}, "size":{tuple(data.size())}, "cnt":{data._cnt}, "ficucialScale":{data._fidScl}}}' #s=f'{{"pos":{tuple(data.pos())}, "size":{tuple(data.size())}, "cnt":{data._cnt}, "ficucialScale":{data._fidScl}}}'
#return dumper.represent_scalar(u'!Grid', s) #return dumper.represent_scalar(u'!Grid', s)
m={'pos':tuple(data.pos()),'size':tuple(data.size()),'cnt':data._cnt, 'ficucialScale':data._fidScl} m={'pos':list(data.pos()),'size':list(data.size()),'cnt':list(data._cnt), 'ficucialScale':data._fidScl}
return dumper.represent_mapping(u'!Grid', m) return dumper.represent_mapping(u'!Grid', m)
yaml.add_representer(Grid, yaml_repr_Grid)
def yaml_cnstr_Grid(loader, node): @staticmethod
def yaml_cnstr(loader, node):
# value = loader.construct_scalar(node) # value = loader.construct_scalar(node)
# kwargs=eval(value) # kwargs=eval(value)
# return Grid(**kwargs) # return Grid(**kwargs)
m=loader.construct_mapping(node) m=loader.construct_mapping(node)
return Grid(**m) return Grid(**m)
yaml.add_constructor(u'!Grid', yaml_cnstr_Grid)
yaml.add_representer(Grid, Grid.yaml_repr)
yaml.add_constructor(u'!Grid', Grid.yaml_cnstr)
class Path(pg.ROI): class Path(pg.ROI):
@@ -302,6 +324,24 @@ class Path(pg.ROI):
lv=QLineF(x, y-5*ry, x, y+5*ry) lv=QLineF(x, y-5*ry, x, y+5*ry)
p.drawLines(lh,lv) p.drawLines(lh,lv)
def __repr__(self):
s=f'{self.__class__.__name__}:(pos:{tuple(self.pos())}, size:{tuple(self.size())}, cnt:{self._cnt}, ficucialScale:{self._fidScl}}}'
return s
@staticmethod
def yaml_repr(dumper, data):
m={'pos':list(data.pos()),'size':list(data.size()),'cnt':data._cnt, 'ficucialScale':data._fidScl}
return dumper.represent_mapping(u'!Path', m)
@staticmethod
def yaml_cnstr(loader, node):
m=loader.construct_mapping(node)
return Path(**m)
yaml.add_representer(Path, Path.yaml_repr)
yaml.add_constructor(u'!Path', Path.yaml_cnstr)
class FixTargetFrame(pg.ROI): class FixTargetFrame(pg.ROI):
'''fixed target frame''' '''fixed target frame'''
tpl={ tpl={
@@ -345,9 +385,12 @@ class FixTargetFrame(pg.ROI):
} }
} }
def __init__( self, pos=(0,0), size=(100,100), tpl='test', **kargs): def __init__( self, pos=(0,0), size=(100,100), tpl='test', dscr=None, **kwargs):
pg.ROI.__init__(self, pos, size, **kargs) pg.ROI.__init__(self, pos, size, **kwargs)
#fiducial type 0: 5 squares with pitch 120 um #fiducial type 0: 5 squares with pitch 120 um
if dscr is not None:
self._dscr=dscr
else:
self._dscr=FixTargetFrame.tpl[tpl] self._dscr=FixTargetFrame.tpl[tpl]
self.addScaleHandle([1, 1], [0, 0]) self.addScaleHandle([1, 1], [0, 0])
@@ -404,6 +447,25 @@ class FixTargetFrame(pg.ROI):
else: else:
assert('unknown feducial type') assert('unknown feducial type')
def __repr__(self):
s=f'{self.__class__.__name__}:(pos:{tuple(self.pos())}, size:{tuple(self.size())}, dscr:{self._dscr}}}'
return s
@staticmethod
def yaml_repr(dumper, data):
#m={'pos':list(data.pos()),'size':list(data.size()),'dscr':repr(data._dscr)}
m={'pos':list(data.pos()),'size':list(data.size())}
return dumper.represent_mapping(u'!FixTargetFrame', m)
@staticmethod
def yaml_cnstr(loader, node):
m=loader.construct_mapping(node)
#m['dscr']=eval(m['dscr'])
return FixTargetFrame(**m)
yaml.add_representer(FixTargetFrame, FixTargetFrame.yaml_repr)
yaml.add_constructor(u'!FixTargetFrame', FixTargetFrame.yaml_cnstr)
class TxtROI(pg.ROI): class TxtROI(pg.ROI):
@@ -539,12 +601,22 @@ if __name__=='__main__':
# Custom ROI for selecting an image region # Custom ROI for selecting an image region
#viRoi=pg.ROI([20, -50], [60, 40]) #viRoi=pg.ROI([20, -50], [60, 40])
viRoi=TxtROI([20, -50], [60, 40]) viRoi=TxtROI([20, -50], [60, 40])
#viRoi.addScaleHandle([1, 1], [0, 0])
#viRoi.addScaleHandle([.7, .5], [0, 0])
vb.addItem(viRoi) vb.addItem(viRoi)
viUsrRoi=Marker([50, 120], [30, 20],mode=0) viUsrRoi=Marker([50, 120], [30, 20],mode=0)
vb.addItem(viUsrRoi) vb.addItem(viUsrRoi)
obj=Marker([250, 220], [30, 20],mode=1) obj=Marker([250, 220], [30, 20],mode=1)
vb.addItem(obj) vb.addItem(obj)
vi=Grid( (120,-100), (200,150), (30,20),2) vi=Grid( (120,-100), (200,150), (30,20),2)
tr=QtGui.QTransform() # prepare ImageItem transformation:
tr.setMatrix(1, -.1, 0,
.2, 1, 0,
10, 10, 1)
vi.setTransform(tr) # assign transform
#vi=Grid( (50,10), (200,150), (6,4)) #vi=Grid( (50,10), (200,150), (6,4))
vb.addItem(vi) #vi= visual item vb.addItem(vi) #vi= visual item
@@ -567,6 +639,16 @@ if __name__=='__main__':
vi=Fiducial((0,200),(40,40),(1,2,3)) vi=Fiducial((0,200),(40,40),(1,2,3))
vb.addItem(vi) vb.addItem(vi)
viRoi=pg.ROI([-200, -200], [100, 80],movable=True, rotatable=True, resizable=True)
viRoi.addFreeHandle(pos=[.7, .5], axes=None, item=None, name=None, index=None) # rechteck , frei beweglich ??? verschwinden anch bewegung
#viRoi.addRotateFreeHandle([.7, .5], [0, 0], axes=None, item=None, name=None, index=None) # kreis ??? verschwinden anch erstem gebrauch
#viRoi.addRotateHandle([.7, .5], [0, 0], item=None, name=None, index=None) # kreis, nur rot
#viRoi.addScaleHandle([.7, .5], [0, 0], axes=None, item=None, name=None, lockAspect=False, index=None) # raute scale x,y
#viRoi.addScaleRotateHandle([0, .5], [1, .5], item=None, name=None, index=None) # kreis
#viRoi.addTranslateHandle([.7, .5], axes=None, item=None, name=None, index=None) #quadrat
vb.addItem(viRoi)
childTree(vb) childTree(vb)

View File

@@ -407,8 +407,8 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
self._goGrid=grid=pg.GridItem() # green grid and labels self._goGrid=grid=pg.GridItem() # green grid and labels
grid.opts['pen']=QPen(QColor(0, 255, 0)) grid.opts['pen']=QPen(QColor(0, 255, 0))
grid.opts['textPen']=QPen(QColor(0, 255, 0)) grid.opts['textPen']=QPen(QColor(0, 255, 0))
tr.reset() #tr.reset()
grid.setTransform(tr) # assign transform #grid.setTransform(tr) # assign transform
vb.addItem(grid) vb.addItem(grid)
#--- beam marker --- #--- beam marker ---
@@ -424,13 +424,13 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
#--- testing scan grid --- #--- testing scan grid ---
self.track_objects() # first call is needed to initialize the structure self._goTracked self.track_objects() # first call is needed to initialize the structure self._goTracked
#go=UsrGO.Grid((120, -100), (200, 150), (30, 22), 2) # #go=UsrGO.Grid((120, -100), (200, 150), (30, 22), 2)
go=UsrGO.Grid((120, -100), (1000, 500), (10, 5), 2) # go=UsrGO.Grid((120, -100), (1000, 500), (10, 5), 2)
go.setTransform(tr) # assign transform # go.setTransform(tr) # assign transform
vb.addItem(go) # vb.addItem(go)
self._goTracked['objLst'].append(go) # self._goTracked['objLst'].append(go)
self.track_objects() #tracking now the objects # self.track_objects() #tracking now the objects
#UsrGO.obj_tree(vb) # #UsrGO.obj_tree(vb)
def init_actions(self): def init_actions(self):
app = QApplication.instance() app = QApplication.instance()
@@ -964,7 +964,11 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
px=p2+p1 px=p2+p1
mm=geo.pix2pos(px) mm=geo.pix2pos(px)
_log.debug(f'{px} -> {mm}') _log.debug(f'{px} -> {mm}')
fx_motor, fy_motor, bx_motor, bz_motor, omega_motor=self.get_gonio_tweakers()
fx_motor=self.tweakers["fast_x"]
fy_motor=self.tweakers["fast_y"]
#bz=self.tweakers["base_z"].get_rbv()
#fx_motor, fy_motor, bx_motor, bz_motor, omega_motor=self.get_gonio_tweakers()
#fx=fx_motor.get_position() #fx=fx_motor.get_position()
#fy=fy_motor.get_position() #fy=fy_motor.get_position()
#dx=(x-bx)/ppm #dx=(x-bx)/ppm
@@ -1538,7 +1542,7 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
self._moduleFixTarget =mft = ModuleFixTarget.WndFixTarget(self,data) self._moduleFixTarget =mft = ModuleFixTarget.WndFixTarget(self,data)
tab = self._tabs_daq_methods.insertTab(0,mft,'Fix Target') tab = self._tabs_daq_methods.insertTab(0,mft,'Fix Target')
mft._btnAdd.clicked.connect(self.module_fix_target_add_obj) mft._btnAdd.clicked.connect(self.module_fix_target_add_obj)
mft._btnDelAll.clicked.connect(self.module_fix_target_del_all_obj)
#tab.layout().addWidget(mft) #tab.layout().addWidget(mft)
mft.prefixSelected.connect(lambda prefix: self._le_prefix.setText(prefix)) mft.prefixSelected.connect(lambda prefix: self._le_prefix.setText(prefix))
@@ -1613,37 +1617,48 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
mft=self._moduleFixTarget mft=self._moduleFixTarget
fx=self.tweakers["fast_x"].get_rbv() fx=self.tweakers["fast_x"].get_rbv()
fy=self.tweakers["fast_y"].get_rbv() fy=self.tweakers["fast_y"].get_rbv()
#cz=self.tweakers["fast_y"].get_rbv() bz=self.tweakers["base_z"].get_rbv()
app=QApplication.instance() app=QApplication.instance()
geo=app._geometry geo=app._geometry
oc=geo._opt_ctr oc=geo._opt_ctr
bm_pos=self._goBeamMarker.pos()
bm_sz=self._goBeamMarker.size()
idx=mft._cbType.currentIndex() idx=mft._cbType.currentIndex()
param=mft._txtParam.text() param=mft._txtParam.text()
#cb.addItems(["Fiducial", "FixTarget(12.5x12.5)", "FixTarget(23.0x23.0)", "FixTarget(<param>)", "Grid(<param>)"]) #cb.addItems(["Fiducial", "FixTarget(12.5x12.5)", "FixTarget(23.0x23.0)", "FixTarget(<param>)", "Grid(<param>)"])
if idx==0: if idx==0:
go=UsrGO.Fiducial((120, -100), (200, 150),(1,2,3)) go=UsrGO.Fiducial(bm_pos+bm_sz/2-(20, 20), (40, 40),(fx,fy,bz))
elif idx==1: elif idx==1:
v=geo.pos2pix((12.5, 0)) v=geo.pos2pix((12.5, 0))
l=np.linalg.norm(v) l=np.linalg.norm(v)
go=UsrGO.FixTargetFrame(-oc, (l, l), tpl='12.5x12.5') go=UsrGO.FixTargetFrame(bm_pos+bm_sz/2-(l/2,l/2), (l, l), tpl='12.5x12.5')
elif idx==2: elif idx==2:
v=geo.pos2pix((23, 0)) v=geo.pos2pix((23, 0))
l=np.linalg.norm(v) l=np.linalg.norm(v)
go=UsrGO.FixTargetFrame(-oc, (l, l), tpl='23.0x23.0') go=UsrGO.FixTargetFrame(bm_pos+bm_sz/2-(l/2,l/2), (l, l), tpl='23.0x23.0')
elif idx==3: elif idx==3:
go=UsrGO.FixTargetFrame((120, -100), (200, 150), tpl='test') go=UsrGO.FixTargetFrame(bm_pos+bm_sz/2-(200/2,150/2), (200, 150), tpl='test')
elif idx==4: elif idx==4:
go=UsrGO.Grid((120, -100), (200, 150), (30, 22), 2) go=UsrGO.Grid(bm_pos+bm_sz/2-(200/2,150/2), (200, 150), (30, 22), 2)
else: else:
_log.error('index not handeled')
_log.error('set xstep 0..2 for tests')
self.vb.addItem(go) self.vb.addItem(go)
obj=self._goTracked['objLst'] obj=self._goTracked['objLst']
obj.append(go) obj.append(go)
mft._tree.setData(obj) mft._tree.setData(obj)
def module_fix_target_del_all_obj(self):
mft=self._moduleFixTarget
vb=self.vb
objLst=self._goTracked['objLst']
for go in objLst:
vb.removeItem(go)
objLst.clear()
mft._tree.setData(objLst)
# **************** OBSOLETE AND/OR OLD STUFF **************** # **************** OBSOLETE AND/OR OLD STUFF ****************
@@ -3407,9 +3422,9 @@ if __name__=="__main__":
startupWin.set(60, f'start main window') startupWin.set(60, f'start main window')
main = SwissMxWnd() app._mainWnd=wnd=SwissMxWnd()
main.show() wnd.show()
startupWin._wnd.finish(main) startupWin._wnd.finish(wnd)
# needed so pycharm can restart application # needed so pycharm can restart application
signal.signal(signal.SIGINT, sigint_handler) signal.signal(signal.SIGINT, sigint_handler)