first simulated datapoint collection... but something wrong in coord trf

This commit is contained in:
2022-08-30 18:08:53 +02:00
parent 7deda365c1
commit e651fddd56
3 changed files with 129 additions and 33 deletions

View File

@@ -1255,20 +1255,38 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
fy=fast_y.get_val()
opt_ctr=geo._opt_ctr
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
# part 0: po=position sz=size dt=delta
# part 0: po=position dt=delta
# part 1: px=pixel eu=engineering units (e.g. mm)
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_eu=geo.pix2pos(dt_px)+(fx,fy)
for i in range(points.shape[0]):
points[i,:]=dt_eu+geo.pix2pos(points[i,:])#*tr
po_eu=geo.pix2pos(dt_px)+(fx,fy) # position of the 0/0 poit of the ROI in engineering units
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:
self.re_connect_collect_button(
@@ -1734,6 +1752,56 @@ class SwissMxWnd(QMainWindow, Ui_MainWindow):
if n>=3:
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 ****************