wip
This commit is contained in:
31
Readme.md
31
Readme.md
@@ -1137,9 +1137,36 @@ source /opt/gfa/python
|
|||||||
source activate /sf/bernina/config/swissmx/conda/envs/b440_clone
|
source activate /sf/bernina/config/swissmx/conda/envs/b440_clone
|
||||||
zamofing_t@ganymede:~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python$
|
zamofing_t@ganymede:~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python$
|
||||||
|
|
||||||
cp -rL ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/*.py ~/Documents/prj/SwissFEL/PBTools/pbtools/ /sf/bernina/config/swissmx/zamofing_t/
|
|
||||||
|
|
||||||
scp -r ganymede:~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/*.py ganymede:~/Documents/prj/SwissFEL/PBTools/pbtools/ /sf/bernina/config/swissmx/zamofing_t/
|
cp -arL ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/*.py \
|
||||||
|
~/Documents/prj/SwissFEL/PBTools/pbtools/
|
||||||
|
/sf/bernina/config/swissmx/zamofing_t/
|
||||||
|
cp -arL ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/PBMotionAnalyzer/*.py \
|
||||||
|
/sf/bernina/config/swissmx/zamofing_t/PBMotionAnalyzer/
|
||||||
|
|
||||||
|
|
||||||
|
>alternatives but not recommanded
|
||||||
|
#scp -r ganymede:~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/*.py ganymede:~/Documents/prj/SwissFEL/PBTools/pbtools/ /sf/bernina/config/swissmx/zamofing_t/
|
||||||
|
#rsync -abuv --exclude 'records/' ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/*.py ~/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/PBMotionAnalyzer/ ~/Documents/prj/SwissFEL/PBTools/pbtools/ /sf/bernina/config/swissmx/zamofing_t/
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Sync Start
|
||||||
|
----------
|
||||||
|
```
|
||||||
|
caput SAR-CVME-TIFALL5-EVG0:SoftEvt-EvtCode-SP 254
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
TODO
|
||||||
|
----
|
||||||
|
```
|
||||||
|
adapt speed
|
||||||
|
- change pvt value (simple but fix)
|
||||||
|
|
||||||
|
make longer acquisition time by enhancing the gather server
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -80,11 +80,11 @@ open subprog SP_LockBrk
|
|||||||
}
|
}
|
||||||
//send 1"done\n"
|
//send 1"done\n"
|
||||||
|
|
||||||
Motor[1].IdCmd=0;Motor[1].InPosBand=10
|
Motor[1].IdCmd=0;Motor[1].InPosBand=50
|
||||||
Motor[2].IdCmd=0;Motor[2].InPosBand=10
|
Motor[2].IdCmd=0;Motor[2].InPosBand=50
|
||||||
Motor[3].IdCmd=0;Motor[3].InPosBand=10
|
Motor[3].IdCmd=0;Motor[3].InPosBand=50
|
||||||
Motor[4].IdCmd=0;Motor[4].InPosBand=10
|
Motor[4].IdCmd=0;Motor[4].InPosBand=50
|
||||||
Motor[5].IdCmd=0;Motor[5].InPosBand=10
|
Motor[5].IdCmd=0;Motor[5].InPosBand=50
|
||||||
PowerBrick[0].GpioData[0].16.5=$0
|
PowerBrick[0].GpioData[0].16.5=$0
|
||||||
close
|
close
|
||||||
|
|
||||||
|
|||||||
@@ -103,15 +103,9 @@ close
|
|||||||
while({flag0}){{}}
|
while({flag0}){{}}
|
||||||
//send 1"sync1 %d:%d\\n",Sys.PhaseCount,Sys.PhaseCount-L0
|
//send 1"sync1 %d:%d\\n",Sys.PhaseCount,Sys.PhaseCount-L0
|
||||||
//L1=Sys.PhaseCount
|
//L1=Sys.PhaseCount
|
||||||
while(1)
|
while({flag1}){{}}
|
||||||
{{
|
|
||||||
if({flag1})
|
|
||||||
{{
|
|
||||||
//PowerBrick[0].GpioData[0].16.8=255
|
//PowerBrick[0].GpioData[0].16.8=255
|
||||||
//send 1"sync2 %d:%d\\n",Sys.PhaseCount,Sys.PhaseCount-L1
|
//send 1"sync2 %d:%d\\n",Sys.PhaseCount,Sys.PhaseCount-L1
|
||||||
break
|
|
||||||
}}
|
|
||||||
}}
|
|
||||||
'''.format(plcId=plcId, crdId=crdId, flag0=flag0, flag1=flag1)
|
'''.format(plcId=plcId, crdId=crdId, flag0=flag0, flag1=flag1)
|
||||||
self.sync_prg = prg
|
self.sync_prg = prg
|
||||||
self.sync_run = '&{crdId}b{prgId}r'''.format(prgId=prgId, plcId=plcId, crdId=crdId)
|
self.sync_run = '&{crdId}b{prgId}r'''.format(prgId=prgId, plcId=plcId, crdId=crdId)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
'''
|
'''
|
||||||
implements an image view to show a colored image of a hdf5 dataset.
|
implements an image view to show a colored image of a hdf5 dataset.
|
||||||
'''
|
'''
|
||||||
|
from __future__ import print_function
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
#Used to guarantee to use at least Wx2.8
|
#Used to guarantee to use at least Wx2.8
|
||||||
import wxversion
|
import wxversion
|
||||||
@@ -45,15 +45,17 @@ class MPLCanvasErr(FigureCanvas):
|
|||||||
self.fig=fig
|
self.fig=fig
|
||||||
self.ax=ax
|
self.ax=ax
|
||||||
|
|
||||||
def InitChild(self,meta,err):
|
def InitChild(self,meta,err,trig):
|
||||||
|
|
||||||
fig=self.fig
|
fig=self.fig
|
||||||
ax=self.ax
|
ax=self.ax
|
||||||
errx,erry,err=err
|
errx,erry,err=err
|
||||||
hl = []
|
hl = []
|
||||||
|
hl += ax.plot(trig, 'k-',label='trigger')
|
||||||
hl += ax.plot(errx, 'b-',label='x-error')
|
hl += ax.plot(errx, 'b-',label='x-error')
|
||||||
hl += ax.plot(erry, 'g-',label='y-error')
|
hl += ax.plot(erry, 'g-',label='y-error')
|
||||||
hl += ax.plot(err, 'r-',label='error')
|
hl += ax.plot(err, 'r-',label='error')
|
||||||
|
|
||||||
ax.xaxis.set_label_text('datapoint (timebase: %g ms per data point)'%meta['timebase'])
|
ax.xaxis.set_label_text('datapoint (timebase: %g ms per data point)'%meta['timebase'])
|
||||||
ax.yaxis.set_label_text('pos-error um')
|
ax.yaxis.set_label_text('pos-error um')
|
||||||
legend = ax.legend(loc='upper right', shadow=True)
|
legend = ax.legend(loc='upper right', shadow=True)
|
||||||
@@ -89,12 +91,12 @@ class MPLCanvasErr(FigureCanvas):
|
|||||||
|
|
||||||
def OnBtnPress(self, event):
|
def OnBtnPress(self, event):
|
||||||
"""on button press we will see if the mouse is over us and store some data"""
|
"""on button press we will see if the mouse is over us and store some data"""
|
||||||
print dir(event.guiEvent)
|
print(dir(event.guiEvent))
|
||||||
return
|
return
|
||||||
|
|
||||||
def OnBtnRelease(self, event):
|
def OnBtnRelease(self, event):
|
||||||
"""on release we reset the press data"""
|
"""on release we reset the press data"""
|
||||||
print dir(event.guiEvent)
|
print(dir(event.guiEvent))
|
||||||
#self.OnMouse(event)
|
#self.OnMouse(event)
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -129,15 +131,15 @@ class MAErrorFrame(wx.Frame):
|
|||||||
toolbar=ut.AddToolbar(canvas,sizer)
|
toolbar=ut.AddToolbar(canvas,sizer)
|
||||||
|
|
||||||
meta = doc.fh['meta'].item()
|
meta = doc.fh['meta'].item()
|
||||||
|
rec = doc.fh['rec']
|
||||||
try:
|
try:
|
||||||
err=doc.err
|
err=doc.err
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
rec=doc.fh['rec']
|
|
||||||
errx = (rec[:, 1] - rec[:, 3])
|
errx = (rec[:, 1] - rec[:, 3])
|
||||||
erry = (rec[:, 0] - rec[:, 2])
|
erry = (rec[:, 0] - rec[:, 2])
|
||||||
errxy = np.sqrt(errx ** 2 + erry ** 2)
|
errxy = np.sqrt(errx ** 2 + erry ** 2)
|
||||||
doc.err = err = (errx, erry, errxy)
|
doc.err = err = (errx, erry, errxy)
|
||||||
canvas.InitChild(meta,err)
|
canvas.InitChild(meta,err,rec[:,4])
|
||||||
|
|
||||||
self.Centre()
|
self.Centre()
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
'''
|
'''
|
||||||
implements an image view to show a colored image of a hdf5 dataset.
|
implements an image view to show a colored image of a hdf5 dataset.
|
||||||
'''
|
'''
|
||||||
|
from __future__ import print_function
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
#Used to guarantee to use at least Wx2.8
|
#Used to guarantee to use at least Wx2.8
|
||||||
import wxversion
|
import wxversion
|
||||||
@@ -100,12 +100,12 @@ class MPLCanvasVelo(FigureCanvas):
|
|||||||
|
|
||||||
def OnBtnPress(self, event):
|
def OnBtnPress(self, event):
|
||||||
"""on button press we will see if the mouse is over us and store some data"""
|
"""on button press we will see if the mouse is over us and store some data"""
|
||||||
print dir(event.guiEvent)
|
print(dir(event.guiEvent))
|
||||||
return
|
return
|
||||||
|
|
||||||
def OnBtnRelease(self, event):
|
def OnBtnRelease(self, event):
|
||||||
"""on release we reset the press data"""
|
"""on release we reset the press data"""
|
||||||
print dir(event.guiEvent)
|
print(dir(event.guiEvent))
|
||||||
#self.OnMouse(event)
|
#self.OnMouse(event)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
'''
|
'''
|
||||||
implements an image view to show a colored image of a hdf5 dataset.
|
implements an image view to show a colored image of a hdf5 dataset.
|
||||||
'''
|
'''
|
||||||
|
from __future__ import print_function
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
#Used to guarantee to use at least Wx2.8
|
#Used to guarantee to use at least Wx2.8
|
||||||
import wxversion
|
import wxversion
|
||||||
@@ -149,7 +149,7 @@ class MPLCanvasImg(FigureCanvas):
|
|||||||
|
|
||||||
def OnBtnPress(self, event):
|
def OnBtnPress(self, event):
|
||||||
"""on button press we will see if the mouse is over us and store some data"""
|
"""on button press we will see if the mouse is over us and store some data"""
|
||||||
print dir(event.guiEvent)
|
print(dir(event.guiEvent))
|
||||||
return
|
return
|
||||||
if event.inaxes == self.colBar.ax:
|
if event.inaxes == self.colBar.ax:
|
||||||
#if event.guiEvent.LeftDClick()==True:
|
#if event.guiEvent.LeftDClick()==True:
|
||||||
@@ -209,7 +209,7 @@ class MPLCanvasImg(FigureCanvas):
|
|||||||
return
|
return
|
||||||
for k in dir(event):
|
for k in dir(event):
|
||||||
if k[0]!='_':
|
if k[0]!='_':
|
||||||
print k,getattr(event,k)
|
print(k,getattr(event,k))
|
||||||
|
|
||||||
class MAxyPlotFrame(wx.Frame):
|
class MAxyPlotFrame(wx.Frame):
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
# | |
|
# | |
|
||||||
# | Author Thierry Zamofing (thierry.zamofing@psi.ch) |
|
# | Author Thierry Zamofing (thierry.zamofing@psi.ch) |
|
||||||
# *-----------------------------------------------------------------------*
|
# *-----------------------------------------------------------------------*
|
||||||
|
from __future__ import print_function
|
||||||
import os,sys
|
import os,sys
|
||||||
import wx
|
import wx
|
||||||
import wx.py
|
import wx.py
|
||||||
@@ -68,7 +68,7 @@ class AboutFrame(wx.Frame):
|
|||||||
st0=wx.StaticText(panel,-1,s,(30,10))
|
st0=wx.StaticText(panel,-1,s,(30,10))
|
||||||
bmp = wx.StaticBitmap(panel,-1,wx.Bitmap(os.path.join(imgDir,'PBMA.png'), wx.BITMAP_TYPE_ANY ), (30,st0.Position[1]+st0.Size[1]+10))
|
bmp = wx.StaticBitmap(panel,-1,wx.Bitmap(os.path.join(imgDir,'PBMA.png'), wx.BITMAP_TYPE_ANY ), (30,st0.Position[1]+st0.Size[1]+10))
|
||||||
for k,v in os.environ.iteritems():
|
for k,v in os.environ.iteritems():
|
||||||
print k,'=',v
|
print(k,'=',v)
|
||||||
|
|
||||||
class MAMainFrame(wx.Frame):
|
class MAMainFrame(wx.Frame):
|
||||||
|
|
||||||
@@ -88,7 +88,10 @@ class MAMainFrame(wx.Frame):
|
|||||||
lenRec=fh['rec'].shape[0]
|
lenRec=fh['rec'].shape[0]
|
||||||
lenPts=fh['pts'].shape[0]
|
lenPts=fh['pts'].shape[0]
|
||||||
self.wxTimeCtrl.slider.SetRange(0,lenRec-1)
|
self.wxTimeCtrl.slider.SetRange(0,lenRec-1)
|
||||||
self.wxTimeCtrl.slider.SetPageSize(lenRec/lenPts)
|
|
||||||
|
ts=fh['meta'].item()['timebase']
|
||||||
|
page=int((lenRec-1000/ts)/(lenPts+2))
|
||||||
|
self.wxTimeCtrl.slider.SetPageSize(page)
|
||||||
|
|
||||||
self.xPosCtrl.slider.SetRange(0,lenPts-1)
|
self.xPosCtrl.slider.SetRange(0,lenPts-1)
|
||||||
|
|
||||||
@@ -105,7 +108,7 @@ class MAMainFrame(wx.Frame):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def __init__(self, parent, title,doc):
|
def __init__(self, parent, title,doc):
|
||||||
wx.Frame.__init__(self, parent, title=title, size=wx.Size(650, 350))
|
wx.Frame.__init__(self, parent, title=title, size=wx.Size(650, 200),style = wx.DEFAULT_FRAME_STYLE | wx.STAY_ON_TOP)
|
||||||
self.doc=doc;doc.view.append(self)
|
self.doc=doc;doc.view.append(self)
|
||||||
imgDir=ut.Path.GetImage()
|
imgDir=ut.Path.GetImage()
|
||||||
icon = wx.Icon(os.path.join(imgDir,'PBMA.ico'), wx.BITMAP_TYPE_ICO)
|
icon = wx.Icon(os.path.join(imgDir,'PBMA.ico'), wx.BITMAP_TYPE_ICO)
|
||||||
@@ -261,7 +264,7 @@ rec
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def OnSetTime(usrData, value, msg):
|
def OnSetTime(usrData, value, msg):
|
||||||
'called when the time slider has been changed'
|
'called when the time slider has been changed'
|
||||||
print 'OnSetTime', usrData, value, msg
|
print('OnSetTime', usrData, value, msg)
|
||||||
view=usrData.slider.Parent
|
view=usrData.slider.Parent
|
||||||
doc=view.doc
|
doc=view.doc
|
||||||
doc.Update(view,0,value)
|
doc.Update(view,0,value)
|
||||||
@@ -287,7 +290,7 @@ rec
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def OnSetPosition(usrData, value, msg):
|
def OnSetPosition(usrData, value, msg):
|
||||||
'called when the time slider has been changed'
|
'called when the time slider has been changed'
|
||||||
print 'OnSetPosition', usrData, value, msg
|
print('OnSetPosition', usrData, value, msg)
|
||||||
view = usrData.slider.Parent
|
view = usrData.slider.Parent
|
||||||
doc = view.doc
|
doc = view.doc
|
||||||
doc.Update(view, 1, value)
|
doc.Update(view, 1, value)
|
||||||
|
|||||||
Binary file not shown.
@@ -1,3 +1,4 @@
|
|||||||
|
from __future__ import print_function
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
#Used to guarantee to use at least Wx2.8
|
#Used to guarantee to use at least Wx2.8
|
||||||
import wxversion
|
import wxversion
|
||||||
@@ -29,7 +30,7 @@ class StopWatch():
|
|||||||
@classmethod
|
@classmethod
|
||||||
def Log(cls,str=None,restart=True):
|
def Log(cls,str=None,restart=True):
|
||||||
ts=time.time()
|
ts=time.time()
|
||||||
print '%.6f'%(ts-cls.ts),str
|
print('%.6f'%(ts-cls.ts),str)
|
||||||
if restart:
|
if restart:
|
||||||
cls.ts=ts
|
cls.ts=ts
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -224,6 +224,7 @@ class ShapePath(MotionBase):
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
print('missing pt2pt_time, use default=100ms')
|
print('missing pt2pt_time, use default=100ms')
|
||||||
pt2pt_time=100.
|
pt2pt_time=100.
|
||||||
|
self.meta['pt2pt_time']=pt2pt_time
|
||||||
try:
|
try:
|
||||||
cnt=kwargs['cnt'] #move path multiple times
|
cnt=kwargs['cnt'] #move path multiple times
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@@ -523,6 +524,13 @@ if __name__=='__main__':
|
|||||||
# '%(levelname)-8s %(message)s'),
|
# '%(levelname)-8s %(message)s'),
|
||||||
# datefmt='%m-%d %H:%M',
|
# datefmt='%m-%d %H:%M',
|
||||||
# )
|
# )
|
||||||
|
def trigger(wait=.5):
|
||||||
|
import CaChannel
|
||||||
|
time.sleep(wait)
|
||||||
|
pvTrigger = CaChannel.CaChannel('SAR-CVME-TIFALL5-EVG0:SoftEvt-EvtCode-SP.VAL')
|
||||||
|
pvTrigger.searchw()
|
||||||
|
pvTrigger.putw(254)
|
||||||
|
|
||||||
|
|
||||||
def run_test(args):
|
def run_test(args):
|
||||||
#args.host=None
|
#args.host=None
|
||||||
@@ -532,6 +540,19 @@ if __name__=='__main__':
|
|||||||
comm = PPComm(host=args.host)
|
comm = PPComm(host=args.host)
|
||||||
gather = Gather(comm)
|
gather = Gather(comm)
|
||||||
sp = ShapePath(comm, gather, args.verbose)
|
sp = ShapePath(comm, gather, args.verbose)
|
||||||
|
# Gather.MaxLines=116508
|
||||||
|
# ts=0.2ms
|
||||||
|
# max_num_points=(MaxLines*ts-1000ms)/(+acq_per*pt2pt_time*ts)
|
||||||
|
# pt2pt_time acq_per maxpts
|
||||||
|
# 40ms 1 555
|
||||||
|
# 40ms 2 1135
|
||||||
|
# 40ms 3 1715
|
||||||
|
# 40ms 4 2295
|
||||||
|
# 10ms 1 2220
|
||||||
|
# 10ms 2 4540
|
||||||
|
# 10ms 3 6860
|
||||||
|
# 10ms 4 9180
|
||||||
|
|
||||||
#sp.gen_swissmx_points(width=1000,ofs=(-500,0))
|
#sp.gen_swissmx_points(width=1000,ofs=(-500,0))
|
||||||
#sp.gen_swissfel_points(width=1000,ofs=(-500,0))
|
#sp.gen_swissfel_points(width=1000,ofs=(-500,0))
|
||||||
#fn='/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/PBMotionAnalyzer/records/mode1'
|
#fn='/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/PBMotionAnalyzer/records/mode1'
|
||||||
@@ -563,15 +584,17 @@ if __name__=='__main__':
|
|||||||
#sp.gen_grid_points(w=100,h=100,pitch=50,rnd=.2)
|
#sp.gen_grid_points(w=100,h=100,pitch=50,rnd=.2)
|
||||||
|
|
||||||
|
|
||||||
#setup_gather(self, acq_per=1)
|
#setup_gather(self, acq_per=1) #Gather.MaxLines=116508 580pts
|
||||||
sp.setup_gather(acq_per=2)
|
sp.setup_gather(acq_per=2)
|
||||||
#setup_sync(self, crdId=1, prgId=2, plcId=2, mode=0, **kwargs):
|
#setup_sync(self, crdId=1, prgId=2, plcId=2, mode=0, **kwargs):
|
||||||
sp.setup_sync() #no sync at all
|
#sp.setup_sync() #no sync at all
|
||||||
#sp.setup_sync(mode=1) #sync with timing system (PLC)
|
#sp.setup_sync(mode=1) #sync with timing system (PLC)
|
||||||
#sp.setup_sync(mode=2) #sync with timing system (PROG)
|
sp.setup_sync(mode=2) #sync with timing system (PROG)
|
||||||
|
|
||||||
#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_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)
|
#sp.gen_swissmx_points(width=1000,ofs=(-500,0));sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40,acq_per=1)
|
||||||
|
sp.gen_grid_points(w=30,h=30,pitch=50,rnd=.2);sp.sort_points(xy);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40)
|
||||||
|
#sp.gen_grid_points(w=200,h=200,pitch=50,rnd=.2);sp.sort_points(xy);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=40)
|
||||||
|
|
||||||
#sp.gen_grid_points(w=2,h=20,pitch=50,rnd=0);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=10,acq_per=1)
|
#sp.gen_grid_points(w=2,h=20,pitch=50,rnd=0);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=10,acq_per=1)
|
||||||
#sp.gen_rand_points(n=500, scale=1000);sp.sort_points(xy);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=10,acq_per=1)
|
#sp.gen_rand_points(n=500, scale=1000);sp.sort_points(xy);sp.setup_motion(fnPrg=fn+'.prg',mode=1,pt2pt_time=10,acq_per=1)
|
||||||
@@ -586,6 +609,7 @@ if __name__=='__main__':
|
|||||||
|
|
||||||
#>>>run gather and plot trajectory<<<
|
#>>>run gather and plot trajectory<<<
|
||||||
sp.run()
|
sp.run()
|
||||||
|
trigger(0.5)
|
||||||
sp.gather_upload(fnRec=fn+'.npz')
|
sp.gather_upload(fnRec=fn+'.npz')
|
||||||
sp.plot_gather()
|
sp.plot_gather()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user