This commit is contained in:
2018-11-30 15:14:06 +01:00
parent 38a8c8484b
commit 1c77690711
3 changed files with 138 additions and 81 deletions

View File

@@ -26,6 +26,13 @@ verbose bits:
4 list program
#4 upload progress
#8 plot gather path
modes:
0: test scratch mode
1: test find rotation center
2: test param calculation and display the gui
3: load recorded data, check param calculation not changed display in the gui
4: load recorded data, display in the interactive_anim gui (default)
'''
#motors CX CZ RY FY
@@ -770,10 +777,11 @@ class HelicalScan(MotionBase):
// 4 5 3 1
&1
a
#1->0
#2->0
#3->0
#4->0
#5->0
#3->0
#1->0
#4->I
#5->I
@@ -791,7 +799,7 @@ Motor[5].MaxSpeed=8
subsParam=dict(map(lambda k, i, v: (k + '_' + str(i), v), s * sh[0], c, pbParam.reshape(-1)))
subsParam['d2r']=d2r/1000.
subsParam['r2d']=1000./d2r
subsParam['cmt']='//'#''
subsParam['cmt']='//'#'//'#''
subs={'qCX':'L4', 'qCZ':'L5', 'qW':'L3', 'qFY':'L1',
@@ -1104,18 +1112,91 @@ close
if __name__=='__main__':
def run_test(args):
test=args.test
mode=args.mode
#args.host=None
if args.host is None:
if args.host is None or mode in(3,4):
comm=gather=None
else:
comm = PPComm(host=args.host)
gather = Gather(comm)
gpascii = comm.gpascii
hs=HelicalScan(comm, gather, args.verbose)
if mode==0:
# gpasci: #1,4,5p // y,-x ,-z
# 0deg 256.7 -762.5 -396.4
# 120deg 258.5 731.7 -1896.9
# ...
# &1p
# cpx X0 Z0 B0 Y258
# cpx X0 Z0 B120000 Y258
if test==1:
hs.calcParam(x=((-1154.4, 216.3, -250.7), (-1330.2, 340.9, -230.4)),
y=(1405.7, 1019.2),
z=((-1309.6, -1010.9, -2410.3), (-1219.4, -918.8, -2510.4)))
### use simulation motors ###
# os.chdir(os.path.join(os.path.dirname(__file__),'../cfg'))
# 'sim_8_motors.cfg'
# ['$$$***','!common()','!SAR-EXPMX1()','#1..7j/','enable plc 1','Motor[1].MaxSpeed=25','Motor[2].MaxSpeed=25'])
# raw_input('press return when homed')
### hs.calcParam(<data from Zac>) ###
# fh=open("/sf/bernina/config/swissmx/exchange/helical.cmd")
# fh=open("/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/helical.cmd")
#fh = open("/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/lyso001_0063_helical_debug.cmd")
fh = open("/sf/bernina/data/p17592/res/20181130/helicaltest/lyso005/lyso005_0072_helical_debug.cmd")
# find /sf/bernina/data/p17592/res/ -name '*.cmd'
s = fh.read();
s = s.replace('calcParam', 'hs.calcParam')
eval(s)
# &1p
# cpx X0 Z0 B0 Y258
# cpx X0 Z0 B120000 Y258
hs.setup_coord_trf()
hs.setup_sync(mode=0) # None: no sync at all mode=1: sync on timing UserFlag
hs.setup_gather()
# hs.gen_prog(mode=-1)
# hs.gen_prog(mode=0,cntHor=1,cntVert=3,wRng=(120000,120000))
# hs.gen_prog(mode=0,cntHor=1)
# hs.gen_prog(mode=0)
# hs.gen_prog(mode=0,cntHor=1,cntVert=5,wRng=(120000,120000))
# hs.gen_prog(mode=1,cntHor=1,cntVert=5,wRng=(120000,120000),pt2pt_time=100)
# hs.gen_prog(mode=1,cntHor=1,cntVert=5,wRng=(120000,120000),pt2pt_time=100,smt=0)
# hs.gen_prog(mode=1,cntHor=1,cntVert=5,wRng=(0,360000))
# hs.gen_prog(mode=1,cntHor=1,cntVert=5,hRng=(-.3,.3),wRng=(0,360000),smt=1)
# hs.gen_prog(mode=1,cntHor=7,cntVert=2,hRng=(-3,3),wRng=(120000,120000),smt=0)
# hs.gen_prog(mode=1,cntHor=3,cntVert=6,hRng=(-5,5),wRng=(00,120000),smt=0,pt2pt_time=10)
# hs.gen_prog(mode=0,cntHor=3,cntVert=10,hRng=(-5,5),wRng=(0,120000))
# hs.gen_prog(mode=0,cntHor=3,cntVert=25,hRng=(-5,5),wRng=(0,120000))
# hs.gen_prog(mode=1,cntHor=3,cntVert=25,hRng=(-5,5),wRng=(0,120000),smt=0,pt2pt_time=300)
#hs.setup_motion(mode=1, cntHor=5, cntVert=15, hRng=(-150, 150), wRng=(0, 120000), smt=0, pt2pt_time=200)
hs.setup_motion(mode=1, cntHor=10, cntVert=20, hRng=(-300, 300), wRng=(0, 100000), smt=0, pt2pt_time=40)
# hs.gen_prog(mode=1,cntHor=5,cntVert=25,hRng=(-100,100),wRng=(0,120000),smt=0,pt2pt_time=40)
# hs.gen_prog(mode=1,cntHor=3,cntVert=20,hRng=(-5,5),wRng=(0,1200),smt=0,pt2pt_time=200)
# hs.gen_prog(mode=1, cntHor=2, cntVert=2, wRng=(0, 360000), smt=0)
# hs.gen_prog(mode=1)
# hs.gen_prog(mode=1,pt2pt_time=100,cnt=1,cntVert=35,cntHor=7,hRng=(-.3,.3),wRng=(0,360000*3),yRng=(6.2,2.3))
# hs.gen_prog(mode=1,pt2pt_time=100,cnt=1,cntVert=10,cntHor=3,hRng=(-30,30),wRng=(0,36000),yRng=(-50,-100))
# hs.gen_prog(mode=1,cntHor=7,cntVert=2,hRng=(-100,50),wRng=(000,10000),smt=0)
hs.run()
print('wait until gather finished:')
fn = '/tmp/helicalscan'
hs.gather_upload(fn + '.npz')
hs.load_rec(fn + '.npz')
hsg = HelicalScanGui(hs)
hsg.show_pos()
hsg.show_vel()
hsg.interactive_anim()
if mode==1:
### test find rotation center ###
HelicalScanTests.test_find_rot_ctr(n=32. ,per=1.,bias=2.31,ampl=4.12,phi=0*d2r)
HelicalScanTests.test_find_rot_ctr(n=32. ,per=1.,bias=2.31,ampl=4.12,phi=30.*d2r)
@@ -1123,14 +1204,17 @@ if __name__=='__main__':
HelicalScanTests.test_find_rot_ctr(n=5. ,per=1.,bias=7.25,ampl=6.51,phi=-124.6*d2r)
return
elif test==2:
elif mode==2:
### test param calculation and display the gui###
HelicalScanTests.calcParamSim(hs)
hs.setup_motion(mode=1,cntHor=5,cntVert=15,hRng=(-50,50),wRng=(0,120000),smt=0,pt2pt_time=200)
hs.setup_coord_trf()
hs.setup_sync(mode=0) # None: no sync at all mode=1: sync on timing UserFlag
hs.setup_gather()
# setup_sync(self, crdId=1, prgId=2, plcId=2, mode=0, **kwargs):
# sp.setup_sync() #no sync at all
# sp.setup_sync(mode=1) #sync with timing system (PROG)
hs.setup_sync(mode=2) # sync with timing system and PLC to sync speed (PROG)
hs.setup_coord_trf()
hs.setup_motion(mode=1,cntHor=5,cntVert=15,hRng=(-50,50),wRng=(0,120000),smt=0,pt2pt_time=200)
hs.run()
print('wait until gather finished:')
fn = '/tmp/helicalscan'
@@ -1143,12 +1227,13 @@ if __name__=='__main__':
hsg=HelicalScanGui(hs);hsg.interactive_anim(manip=manip)
return
elif test==3:
### load recorded data, check param calculation not changed and display in the gui###
fn='/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/helicalscan'
hs.load_rec(fn+'.npz')
elif mode==3:
### load recorded data, #check param calculation not changed display in the gui###
fn=args.other[0]
hs.load_rec(fn)
paramRec=hs.param
fh=open("/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/helical.cmd")
#fh=open("/home/zamofing_t/Documents/prj/SwissFEL/epics_ioc_modules/ESB_MX/python/helical.cmd")
fh = open(fn[-4]+'_helical_debug.cmd')
s=fh.read();s=s.replace('calcParam','hs.calcParam')
eval(s)
assert (abs(paramRec-hs.param).max()<1E-10)
@@ -1158,68 +1243,14 @@ if __name__=='__main__':
hsg=HelicalScanGui(hs);hsg.interactive_cx_cz_w_fy(manip=manip)
hsg=HelicalScanGui(hs);hsg.interactive_dx_dz_w_y(manip=manip)
return
#gpasci: #1,4,5p // y,-x ,-z
# 0deg 256.7 -762.5 -396.4
#120deg 258.5 731.7 -1896.9
#...
#&1p
#cpx X0 Z0 B0 Y258
#cpx X0 Z0 B120000 Y258
hs.calcParam(x = ((-1154.4, 216.3, -250.7), ( -1330.2, 340.9, -230.4)),
y = (1405.7,1019.2),
z = ((-1309.6, -1010.9, -2410.3),( -1219.4, -918.8, -2510.4)))
### use simulation motors ###
#os.chdir(os.path.join(os.path.dirname(__file__),'../cfg'))
#'sim_8_motors.cfg'
#['$$$***','!common()','!SAR-EXPMX1()','#1..7j/','enable plc 1','Motor[1].MaxSpeed=25','Motor[2].MaxSpeed=25'])
# raw_input('press return when homed')
### hs.calcParam(<data from Zac>) ###
fh=open("/sf/bernina/config/swissmx/exchange/helical.cmd")
#fh=open("/sf/bernina/config/swissmx/exchange/helical_neg.cmd")
s=fh.read();s=s.replace('calcParam','hs.calcParam')
eval(s)
hs.setup_coord_trf()
hs.setup_sync(mode=0) # None: no sync at all mode=1: sync on timing UserFlag
hs.setup_gather()
#hs.gen_prog(mode=-1)
#hs.gen_prog(mode=0,cntHor=1,cntVert=3,wRng=(120000,120000))
#hs.gen_prog(mode=0,cntHor=1)
#hs.gen_prog(mode=0)
#hs.gen_prog(mode=0,cntHor=1,cntVert=5,wRng=(120000,120000))
#hs.gen_prog(mode=1,cntHor=1,cntVert=5,wRng=(120000,120000),pt2pt_time=100)
#hs.gen_prog(mode=1,cntHor=1,cntVert=5,wRng=(120000,120000),pt2pt_time=100,smt=0)
#hs.gen_prog(mode=1,cntHor=1,cntVert=5,wRng=(0,360000))
#hs.gen_prog(mode=1,cntHor=1,cntVert=5,hRng=(-.3,.3),wRng=(0,360000),smt=1)
#hs.gen_prog(mode=1,cntHor=7,cntVert=2,hRng=(-3,3),wRng=(120000,120000),smt=0)
#hs.gen_prog(mode=1,cntHor=3,cntVert=6,hRng=(-5,5),wRng=(00,120000),smt=0,pt2pt_time=10)
#hs.gen_prog(mode=0,cntHor=3,cntVert=10,hRng=(-5,5),wRng=(0,120000))
#hs.gen_prog(mode=0,cntHor=3,cntVert=25,hRng=(-5,5),wRng=(0,120000))
#hs.gen_prog(mode=1,cntHor=3,cntVert=25,hRng=(-5,5),wRng=(0,120000),smt=0,pt2pt_time=300)
hs.setup_motion(mode=1,cntHor=5,cntVert=15,hRng=(-150,150),wRng=(0,120000),smt=0,pt2pt_time=200)
#hs.gen_prog(mode=1,cntHor=5,cntVert=25,hRng=(-100,100),wRng=(0,120000),smt=0,pt2pt_time=40)
#hs.gen_prog(mode=1,cntHor=3,cntVert=20,hRng=(-5,5),wRng=(0,1200),smt=0,pt2pt_time=200)
#hs.gen_prog(mode=1, cntHor=2, cntVert=2, wRng=(0, 360000), smt=0)
#hs.gen_prog(mode=1)
#hs.gen_prog(mode=1,pt2pt_time=100,cnt=1,cntVert=35,cntHor=7,hRng=(-.3,.3),wRng=(0,360000*3),yRng=(6.2,2.3))
#hs.gen_prog(mode=1,pt2pt_time=100,cnt=1,cntVert=10,cntHor=3,hRng=(-30,30),wRng=(0,36000),yRng=(-50,-100))
#hs.gen_prog(mode=1,cntHor=7,cntVert=2,hRng=(-100,50),wRng=(000,10000),smt=0)
hs.run()
print('wait until gather finished:')
fn='/tmp/helicalscan'
hs.gather_upload(fn+'.npz')
hs.load_rec(fn+'.npz')
hsg=HelicalScanGui(hs)
hsg.show_pos()
hsg.show_vel()
hsg.interactive_anim()
elif mode==4:
### load recorded data, display in the interactive_anim gui###
fn=args.other[0]
hs.load_rec(fn)
hsg = HelicalScanGui(hs)
hsg.show_pos()
hsg.interactive_anim(manip=False)
return
from optparse import OptionParser, IndentedHelpFormatter
@@ -1239,8 +1270,8 @@ if __name__=='__main__':
'main command line interpreter function'
#usage: gpasciiCommunicator.py --host=PPMACZT84 myPowerBRICK.cfg
(h, t)=os.path.split(sys.argv[0]);cmd='\n '+(t if len(h)>3 else sys.argv[0])+' '
exampleCmd=('-n',
'-v15'
exampleCmd=('-m0',
'/sf/bernina/data/p17592/res/20181130/helicaltest/lyso001/lyso001_0062.npz '
)
epilog=__doc__+'''
Examples:'''+''.join(map(lambda s:cmd+s, exampleCmd))+'\n '
@@ -1250,7 +1281,7 @@ Examples:'''+''.join(map(lambda s:cmd+s, exampleCmd))+'\n '
parser.add_option('-v', '--verbose', type="int", dest='verbose', help='verbosity bits (see below)', default=255)
parser.add_option('--host', help='hostname', default='SAR-CPPM-EXPMX1')
parser.add_option('-t','--test', type="int", default=None)
parser.add_option('-m','--mode', type="int", default=4)
(args, other)=parser.parse_args()
args.other=other

View File

@@ -632,8 +632,8 @@ if __name__=='__main__':
#setup_sync(self, crdId=1, prgId=2, plcId=2, mode=0, **kwargs):
#sp.setup_sync() #no sync at all
#sp.setup_sync(mode=1) #sync with timing system (PROG)
sp.setup_coord_trf() # reset to shape path system
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.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)