This commit is contained in:
2018-12-03 16:33:38 +01:00
parent 1c77690711
commit 69b31e4474
2 changed files with 71 additions and 5 deletions

View File

@@ -36,6 +36,7 @@ class MPLCanvasImg(FigureCanvas):
self.SetStatusCB=SetStatusCB
fig = mpl.figure.Figure()
ax = fig.add_axes([0.075,0.075,0.85,0.85])
ax.invert_xaxis();ax.invert_yaxis()
FigureCanvas.__init__(self,parent, -1, fig)
self.mpl_connect('motion_notify_event', self.OnMotion)
self.mpl_connect('button_press_event', self.OnBtnPress)

View File

@@ -106,11 +106,12 @@ class ShapePath(MotionBase):
self.plot_points(pts)
plt.show()
def gen_rand_points(self,n=107,scale=1000):
def gen_rand_points(self,n=107,scale=1000,ofs=(0,0)):
'generate random distributed points'
np.random.seed(0)
#data=np.random.randint(0,1000,(30,2))
pts=np.random.rand(n,2)*scale
pts+=ofs
self.points=pts
def gen_grid_points(self,w=10,h=10,pitch=100,rnd=.2,ofs=(0,0)):
@@ -123,6 +124,50 @@ class ShapePath(MotionBase):
pts+=ofs
self.points=pts
def gen_closed_shifted(self,pitch=100,shift=5,mult=3):
'from the given points, close the path, and runs 9 times with small pitch'
pts=self.points
pts = np.vstack((pts, pts[-1]+(0,-50)))#add a new point outside of the grid
mn=pts.min(0)
mx=pts.max(0)
d=pts[0,:]-pts[-1,:]
l=np.sum(d)
bk=[]
if abs(d[1])>pitch: #make a vertical back move
s=np.sign(d[1])
n=np.ceil(np.abs(d[1])/pitch)
p=np.ndarray((n,2))
p[:,0]=pts[-1, 0]
p[:,1]=pts[-1, 1]+np.arange(1,n+1)*s*pitch
pts=np.vstack((pts,p))
if abs(d[0])>pitch: #make a horizonlat back move
s=np.sign(d[0])
n=np.ceil(np.abs(d[0])/pitch)
p=np.ndarray((n,2))
p[:,0]=pts[-1, 0]+np.arange(1,n+1)*s*pitch
p[:,1]=pts[-1, 1]
pts[-1, :]
pts=np.vstack((pts,p))
stack=[]
for y in np.arange(mult)*shift:
for x in np.arange(mult)*shift:
stack.append(pts+(x,y))
pts=np.vstack(stack)
#xx,yy=np.meshgrid(range(w), range(h))
#pts=np.array([xx.reshape(-1),yy.reshape(-1)],dtype=np.float).transpose()*pitch
#if xy:
#else:
# smlpitch
#pts+=ofs
self.points=pts
def opt_pts(self,fn):
'''
trial to optimize path by mofing trajectory, uload real path and move the points
@@ -378,6 +423,7 @@ class ShapePath(MotionBase):
def plot_points(self,pts):
fig=plt.figure()
ax = fig.add_subplot(1,1,1)
ax.invert_xaxis();ax.invert_yaxis()
#hl=ax[0].plot(x, y, color=col)
hl=ax.plot(pts[:,0],pts[:,1],'r.')
hl=ax.plot(pts[:,0],pts[:,1],'y--')
@@ -400,6 +446,7 @@ class ShapePath(MotionBase):
if mode&1:
fig=plt.figure('trajectory')
ax = fig.add_subplot(1,1,1)
ax.invert_xaxis();ax.invert_yaxis()
#hl=ax[0].plot(x, y, color=col)
hl=ax.plot(pts[:,0],pts[:,1],'r.')
hl=ax.plot(pts[:,0],pts[:,1],'y--')
@@ -606,6 +653,9 @@ if __name__=='__main__':
#sp.plot_gather()
#return
fn='/tmp/shapepath'
fn='/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/record/grid_delay_0002'
# /home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/record/chip000_sortedXXXX_9x9'
#fn='/sf/bernina/data/p17592/res/20181203/imprints/chip000_preloc_min10um_sortedX_refs_goaround/chip000_sortedY_9x9.npz'
#fn='PBMotionAnalyzer/records/rand50um_25Hz'
#sp.setup_coord_trf()
@@ -621,6 +671,17 @@ if __name__=='__main__':
#sp.points = np.array([[100,523],[635,632],[756,213]])
#sp.points = np.array([[0, 0],[100, 0],[200, 0],[300, 0],[400, 0],[400, 100],[300, 100],[200, 100],[100, 100],[0, 100],[10, 200],[100, 200],[200, 200],[300, 200],[400, 200],[410, 300],[300, 300],[200, 300],[100, 300],[0, 300],[0, 400],[100, 400],[200, 400],[300, 400],[400, 400]])
#sp.gen_rand_points(n=107, scale=1000);sp.sort_points(xy=xy)
#sp.gen_rand_points(n=107, scale=1000);sp.sort_points(xy=xy)
#fh=np.load('/sf/bernina/data/p17592/res/20181203/imprints/chip000_preloc_min10um_sortedX_refs_goaround/chip000_preloc_min10um_sortedX_refs_goaround_0529.npz')
#sp.points=fh['pts']
sp.gen_grid_points(w=6,h=6,pitch=100,rnd=0,ofs=(0,0));sp.sort_points(False);
sp.gen_closed_shifted()
sp.points=sp.points-+sp.points[0,:]+(-967,1446)
#1412.33 -2862.37
#1446.62 -967.7128125
#sp.plot_points(sp.points);plt.show()
#sp.gen_grid_points(w=100,h=100,pitch=10,rnd=.2)
#sp.gen_swissfel_points(width=1000,ofs=(-500,0));sp.sort_points(xy=xy)
#sp.gen_grid_points(w=10,h=10,pitch=50,rnd=.2)
@@ -634,7 +695,7 @@ if __name__=='__main__':
#sp.setup_sync(mode=1) #sync with timing system (PROG)
sp.setup_sync(mode=2) #sync with timing system and PLC to sync speed (PROG)
sp.setup_coord_trf() # reset to shape path system
sp.setup_motion(fnPrg=fn + '.prg', mode=1, pt2pt_time=40)
#sp.gen_grid_points(w=2,h=2,pitch=50,rnd=.2);sp.sort_points(xy);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=10,acq_per=1)
#sp.gen_swissmx_points(width=1000,ofs=(-500,0));sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40,acq_per=1)
@@ -648,9 +709,13 @@ if __name__=='__main__':
#sp.gen_rand_points(n=400, scale=1000);sp.sort_points(xy);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=10)
#sp.gen_swissmx_points(width=500,flipx=True,flipy=True,ofs=(-380,3980));sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40,acq_per=1)
#sp.gen_swissmx_points(width=2000,flipx=True,flipy=True,ofs=(1014,-281));sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40,acq_per=1)
#sp.gen_grid_points(w=20,h=20,pitch=20,rnd=0,ofs=(-464,1754));sp.sort_points(True);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40)
sp.gen_grid_points(w=20,h=20,pitch=20,rnd=0,ofs=(-160,3700));sp.sort_points(False);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40)
#sp.gen_grid_points(w=20,h=20,pitch=20,rnd=0,ofs=(-160,3700));sp.sort_points(False);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40)
#sp.gen_grid_points(w=5,h=5,pitch=100,rnd=0,ofs=(-1590,-1070));sp.sort_points(False);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40)
#sp.gen_grid_points(w=5,h=5,pitch=100,rnd=0,ofs=(-1580,-1070));sp.sort_points(False);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40)
#sp.gen_grid_points(w=5,h=5,pitch=100,rnd=0,ofs=(-1580,-1060));sp.sort_points(False);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40)
#sp.gen_grid_points(w=5,h=5,pitch=100,rnd=0,ofs=(-1590,-1060));sp.sort_points(False);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40)
#>>>setup gather and sync<<<
#sp.setup_gather()
@@ -662,7 +727,7 @@ if __name__=='__main__':
#>>>run gather and plot trajectory<<<
#return
sp.run()
trigger(0.5)
#trigger(0.5)
sp.gather_upload(fnRec=fn+'.npz')
sp.plot_gather(mode=11)