first simulated datapoint collection... but something wrong in coord trf
This commit is contained in:
@@ -36,8 +36,10 @@ class Deltatau:
|
|||||||
try:
|
try:
|
||||||
self._comm=comm=PPComm(**param)
|
self._comm=comm=PPComm(**param)
|
||||||
self._gather=gather=Gather(comm)
|
self._gather=gather=Gather(comm)
|
||||||
except AttributeError as e:
|
except BaseException as e:
|
||||||
_log.critical('can not connect to deltatau')
|
_log.critical(f'can not connect to deltatau:{e}')
|
||||||
return
|
self._comm=comm=None
|
||||||
|
self._gather=gather=None
|
||||||
|
#return
|
||||||
verbose=0x00
|
verbose=0x00
|
||||||
self._shapepath=sp=shapepath.ShapePath(comm, gather, verbose, sync_mode=1, sync_flag=3)
|
self._shapepath=sp=shapepath.ShapePath(comm, gather, verbose, sync_mode=1, sync_flag=3)
|
||||||
@@ -190,26 +190,6 @@ class Grid(pg.ROI):
|
|||||||
self.addScaleHandle([0, 0], [1, 1])
|
self.addScaleHandle([0, 0], [1, 1])
|
||||||
self.addScaleRotateHandle([1, 0], [0, 0])
|
self.addScaleRotateHandle([1, 0], [0, 0])
|
||||||
|
|
||||||
def get_points(self,mode=0x2):
|
|
||||||
'generates points of the roi for scanning with deltatau'
|
|
||||||
#pos=np.array(self.pos())
|
|
||||||
cnt=np.array(self._cnt,np.int32)
|
|
||||||
sz=np.array(self.size())
|
|
||||||
pitch=sz/cnt
|
|
||||||
xx, yy=np.meshgrid(range(cnt[0]), range(cnt[1]))
|
|
||||||
if mode&0x01: #modify x scaning forward backward each line
|
|
||||||
for i in range(1,cnt[1],2):
|
|
||||||
xx[i]=xx[i][::-1]
|
|
||||||
if mode&0x02: # modify y scaning forward backward each line
|
|
||||||
xx=xx.T
|
|
||||||
yy=yy.T
|
|
||||||
for i in range(1, cnt[0], 2):
|
|
||||||
yy[i]=yy[i][::-1]
|
|
||||||
|
|
||||||
pts=np.array([xx.reshape(-1), yy.reshape(-1)], dtype=np.float).transpose()*pitch
|
|
||||||
#pts+=pos
|
|
||||||
return pts
|
|
||||||
|
|
||||||
def paint(self, p, *args):
|
def paint(self, p, *args):
|
||||||
#pg.ROI.paint(self, p, *args)
|
#pg.ROI.paint(self, p, *args)
|
||||||
sz=self.state['size']
|
sz=self.state['size']
|
||||||
@@ -255,6 +235,26 @@ class Grid(pg.ROI):
|
|||||||
}
|
}
|
||||||
return jsn
|
return jsn
|
||||||
|
|
||||||
|
def get_scan_param(self,mode=0x2):
|
||||||
|
'returns scan parameters for scanning with deltatau. the format is as used for shapepath'
|
||||||
|
#pos=np.array(self.pos())
|
||||||
|
cnt=np.array(self._cnt,np.int32)
|
||||||
|
sz=np.array(self.size())
|
||||||
|
pitch=sz/cnt
|
||||||
|
xx, yy=np.meshgrid(range(cnt[0]), range(cnt[1]))
|
||||||
|
if mode&0x01: #modify x scaning forward backward each line
|
||||||
|
for i in range(1,cnt[1],2):
|
||||||
|
xx[i]=xx[i][::-1]
|
||||||
|
if mode&0x02: # modify y scaning forward backward each line
|
||||||
|
xx=xx.T
|
||||||
|
yy=yy.T
|
||||||
|
for i in range(1, cnt[0], 2):
|
||||||
|
yy[i]=yy[i][::-1]
|
||||||
|
|
||||||
|
pts=np.array([xx.reshape(-1), yy.reshape(-1)], dtype=np.float).transpose()*pitch
|
||||||
|
#pts+=pos
|
||||||
|
return pts
|
||||||
|
|
||||||
|
|
||||||
class Path(pg.ROI):
|
class Path(pg.ROI):
|
||||||
'''
|
'''
|
||||||
@@ -461,11 +461,37 @@ class FixTargetFrame(pg.ROI):
|
|||||||
}
|
}
|
||||||
trf=self.transform()
|
trf=self.transform()
|
||||||
if not trf.isIdentity():
|
if not trf.isIdentity():
|
||||||
obj_info(trf)
|
#obj_info(trf)
|
||||||
trf=((trf.m11(),trf.m12()),(trf.m21(),trf.m22()))
|
trf=((trf.m11(),trf.m12()),(trf.m21(),trf.m22()))
|
||||||
jsn['trf']=trf
|
jsn['trf']=trf
|
||||||
return jsn
|
return jsn
|
||||||
|
|
||||||
|
def get_scan_param(self,mode=0x2):
|
||||||
|
'returns scan parameters for scanning with deltatau. the format is as used for shapepath'
|
||||||
|
grid=self._dscr['grid']
|
||||||
|
#pos=np.array(self.pos())
|
||||||
|
cnt =np.array(grid['count'],np.int32)
|
||||||
|
#pos =np.array(grid['pos'],np.float)
|
||||||
|
#pitch=np.array(grid['pitch'],np.float)
|
||||||
|
xx, yy=np.meshgrid(range(cnt[0]), range(cnt[1]))
|
||||||
|
if mode&0x01: #modify x scaning forward backward each line
|
||||||
|
for i in range(1,cnt[1],2):
|
||||||
|
xx[i]=xx[i][::-1]
|
||||||
|
if mode&0x02: # modify y scaning forward backward each line
|
||||||
|
xx=xx.T
|
||||||
|
yy=yy.T
|
||||||
|
for i in range(1, cnt[0], 2):
|
||||||
|
yy[i]=yy[i][::-1]
|
||||||
|
|
||||||
|
pts=np.array([xx.reshape(-1), yy.reshape(-1)], dtype=np.float).transpose() #*pitch
|
||||||
|
|
||||||
|
param={'grid':grid, 'points':pts}
|
||||||
|
trf=self.transform()
|
||||||
|
if not trf.isIdentity():
|
||||||
|
#obj_info(trf)
|
||||||
|
trf=np.array(((trf.m11(),trf.m12()),(trf.m21(),trf.m22())))
|
||||||
|
param['trf']=trf
|
||||||
|
return param
|
||||||
|
|
||||||
class TxtROI(pg.ROI):
|
class TxtROI(pg.ROI):
|
||||||
def __init__(self, pos, size, **kargs):
|
def __init__(self, pos, size, **kargs):
|
||||||
|
|||||||
86
swissmx.py
86
swissmx.py
@@ -1255,20 +1255,38 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
fy=fast_y.get_val()
|
fy=fast_y.get_val()
|
||||||
opt_ctr=geo._opt_ctr
|
opt_ctr=geo._opt_ctr
|
||||||
for go in self._goTracked['objLst']:
|
for go in self._goTracked['objLst']:
|
||||||
points=go.get_points() #points in coordinate system of ROI
|
if type(go)!=UsrGO.FixTargetFrame:
|
||||||
|
_log.warning(f'for now: ONLY FixTargetFrame are supported ->skipped:{go}')
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
param=go.get_scan_param() #points in coordinate system of ROI
|
||||||
|
except AttributeError as e:
|
||||||
|
_log.warning(f'no scan parameters for object->skipped:{go}')
|
||||||
|
continue
|
||||||
# names consists of abrevations
|
# names consists of abrevations
|
||||||
# part 0: po=position sz=size dt=delta
|
# part 0: po=position dt=delta
|
||||||
# part 1: px=pixel eu=engineering units (e.g. mm)
|
# part 1: px=pixel eu=engineering units (e.g. mm)
|
||||||
po_px=go.pos()
|
po_px=go.pos()
|
||||||
sz_px=go.size()
|
|
||||||
tr=go.transform() # TODO: this is not yet used
|
|
||||||
UsrGO.obj_info(tr)
|
|
||||||
dt_px=-opt_ctr-po_px
|
dt_px=-opt_ctr-po_px
|
||||||
dt_eu=geo.pix2pos(dt_px)+(fx,fy)
|
po_eu=geo.pix2pos(dt_px)+(fx,fy) # position of the 0/0 poit of the ROI in engineering units
|
||||||
for i in range(points.shape[0]):
|
|
||||||
points[i,:]=dt_eu+geo.pix2pos(points[i,:])#*tr
|
|
||||||
|
|
||||||
self.daq_collect_points(points, visualizer_method="grid", visualizer_params=None)
|
p=param['points']
|
||||||
|
pos=np.array(param['grid']['pos']) #in um
|
||||||
|
pitch=np.array(param['grid']['pitch']) #in um
|
||||||
|
trf=param['trf'] #fix shear/rotation um->um
|
||||||
|
trf=np.asmatrix(np.diag(pitch))*np.asmatrix(trf)*geo._pix2pos
|
||||||
|
po_eu*=1000 #mm to um
|
||||||
|
trf*=1000 #mm to um
|
||||||
|
#pix2pos: return np.asarray(self._pix2pos*np.mat(p).T).ravel()
|
||||||
|
|
||||||
|
for i in range(p.shape[0]):
|
||||||
|
p[i,:]=po_eu+(trf*np.asmatrix(p[i,:]).T).A.ravel()
|
||||||
|
|
||||||
|
print('DEBUG: first point:')
|
||||||
|
print(p[0,:])
|
||||||
|
print('DEBUG: difference from point to point:')
|
||||||
|
print(np.diff(p, axis=0))
|
||||||
|
self.daq_collect(**param)
|
||||||
|
|
||||||
elif task == TASK_GRID:
|
elif task == TASK_GRID:
|
||||||
self.re_connect_collect_button(
|
self.re_connect_collect_button(
|
||||||
@@ -1734,6 +1752,56 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
|
|||||||
if n>=3:
|
if n>=3:
|
||||||
geo.least_square_plane(ptFitPlane)
|
geo.least_square_plane(ptFitPlane)
|
||||||
|
|
||||||
|
|
||||||
|
def daq_collect(self, **kwargs):# points, visualizer_method, visualizer_params):
|
||||||
|
#def _OLD_daq_collect_points(self, points, visualizer_method, visualizer_params):
|
||||||
|
app = QApplication.instance()
|
||||||
|
cfg = app._cfg
|
||||||
|
geo = app._geometry
|
||||||
|
verbose=0xff
|
||||||
|
fn='/tmp/shapepath'
|
||||||
|
try:
|
||||||
|
dt=app._deltatau
|
||||||
|
except AttributeError:
|
||||||
|
app._deltatau=dt=deltatau.Deltatau()
|
||||||
|
try:
|
||||||
|
jf=app._jungfrau
|
||||||
|
except AttributeError:
|
||||||
|
app._jungfrau=jf=detector.Jungfrau()
|
||||||
|
|
||||||
|
sp=dt._shapepath
|
||||||
|
sp.points=kwargs['points']
|
||||||
|
#sp.gen_grid_points(w=15, h=15, pitch=3, rnd=0, ofs=(0, +2000))
|
||||||
|
#sp.gen_grid_points(w=5, h=10, pitch=1, rnd=0, ofs=(0, 0));sp.sort_points(False, 10);sp.points
|
||||||
|
#sp.sort_points(False, 15);
|
||||||
|
sp.meta['pt2pt_time']=10
|
||||||
|
sp.setup_gather()
|
||||||
|
sp.setup_sync(verbose=verbose&32, timeOfs=0.05)
|
||||||
|
try:
|
||||||
|
p=geo._fitPlane
|
||||||
|
sp.setup_coord_trf(cz=f'{p[0]}X+{p[1]}Y+{p[2]}') # reset to shape path system
|
||||||
|
except AttributeError:
|
||||||
|
_log.warning('no plane fitting done. z does not move')
|
||||||
|
sp.setup_coord_trf() # reset to shape path system
|
||||||
|
# sp.meta['pt2pt_time']=10 #put between setup_sync and setup_motion to have more motion points than FEL syncs
|
||||||
|
sp.setup_motion(fnPrg=fn+'.prg', mode=3, scale=1., dwell=10)
|
||||||
|
sp.homing() # homing if needed
|
||||||
|
sp.run() # start motion program
|
||||||
|
sp.wait_armed() # wait until motors are at first position
|
||||||
|
sp.trigger(0.5) # send a start trigger (if needed) ater given time
|
||||||
|
if not dt._comm is None:
|
||||||
|
while True:
|
||||||
|
p=sp.progress()
|
||||||
|
if p<0: break
|
||||||
|
_log.info(f'progress {p}/{sp.points.shape[0]}')
|
||||||
|
time.sleep(.1)
|
||||||
|
sp.gather_upload(fnRec=fn+'.npz')
|
||||||
|
#dp=deltatau.shapepath.DebugPlot(sp)
|
||||||
|
#dp.plot_gather(mode=11)
|
||||||
|
#plt.show(block=False)
|
||||||
|
#plt.show(block=True)
|
||||||
|
return
|
||||||
|
|
||||||
# **************** OBSOLETE AND/OR OLD STUFF ****************
|
# **************** OBSOLETE AND/OR OLD STUFF ****************
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user