From d4edb2d13306b556db6a64a04233556250b24831 Mon Sep 17 00:00:00 2001 From: Thierry Zamofing Date: Tue, 16 Oct 2018 16:30:27 +0200 Subject: [PATCH] wip --- python/helicalscan.py | 89 ++++++++++++++++++++++++++----------------- 1 file changed, 55 insertions(+), 34 deletions(-) diff --git a/python/helicalscan.py b/python/helicalscan.py index eb7f2bd..d1f475f 100755 --- a/python/helicalscan.py +++ b/python/helicalscan.py @@ -397,13 +397,6 @@ class HelicalScan(MotionBase): #data=self.rec[int(idx*self.step),:] #self.hCrist,pt=self.pltCrist(*data,h=self.hCrist) - def save_rec(self,fn_npz='/tmp/helicalscan.npz'): - param= self.param - meta= self.meta - points = self.points # target points - rec = self.rec - np.savez_compressed(fn_npz, rec=rec, points=points, param=param, meta=meta) - def load_rec(self,fn_npz='/tmp/helicalscan.npz'): try: fh=np.load(fn_npz) @@ -660,6 +653,21 @@ class HelicalScan(MotionBase): ax.set_ylim(v[0]-l2, v[0]+l2); ax.set_zlim(v[1]-l2, v[1]+l2) + def setup_gather(self,acq_per=1): + ''' + setup the channels to gather + kwargs: + acq_per : acquire period: acquire data all acq_per servo loops (default=1) + ''' + comm=self.comm + gt=self.gather + gt.set_phasemode(False) + gt.set_address("Motor[4].ActPos","Motor[5].ActPos","Motor[3].ActPos","Motor[1].ActPos") + gt.set_property(MaxSamples=1000000, Period=acq_per) + ServoPeriod= .2 #0.2ms #Sys.ServoPeriod is dependent of !common() macro + #ServoPeriod=comm.gpascii.servo_period + self.meta = {'timebase': ServoPeriod*acq_per} + def setup_coord_trf(self,fnCrdTrf='/tmp/coordTrf.cfg'): comm = self.comm gpascii = comm.gpascii @@ -799,7 +807,7 @@ close time.sleep(.5) gpascii.send_block('#1..7j/') - def setup_motion(self,prgId=2,fnPrg=None,mode=0,**kwargs): + def setup_motion(self,prgId=2,fnPrg='/tmp/prg.cfg',mode=0,**kwargs): ''' kwargs: acq_per : acquire period: acquire data all acq_per servo loops (default=1) @@ -820,6 +828,9 @@ close wRng : starting and ending angle yRng : starting and ending height ''' + comm = self.comm + gpascii = comm.gpascii + param=self.param prg=[] acq_per=kwargs.get('acq_per',10) gather={"MaxSamples":1000000, "Period":acq_per} @@ -966,9 +977,29 @@ close prg.append(' P1000=1') prg.append('close') - prg.append('&1\nb%dr\n'%prgId) + #prg.append('&1\nb%dr\n'%prgId) - self.download(prg,mode=3,file='/tmp/prg.cfg') + prg='\n'.join(prg) + '\n' + gpascii.send_block(prg) + if self.verbose & 4: + print(prg) + if fnPrg is not None : + fh=open(fnPrg,'w') + fh.write(prg) + fh.close() + + def gather_upload(self,fnRec='/tmp/helicalscan.npz'): + gpascii=self.comm.gpascii + gt=self.gather + gt.wait_stopped(verbose=True) + self.rec=rec=gt.upload() + channels = ["Motor[4].HomePos", "Motor[5].HomePos", "Motor[3].HomePos", "Motor[1].HomePos"] + ofs = np.ndarray(len(channels)) + for i, v in enumerate(channels): + ofs[i] = gpascii.get_variable(v,float) + rec -= ofs + if fnRec: + np.savez_compressed(fnRec, rec=rec, points=self.points, param=self.param, meta=self.meta) def download(self,prg=None,mode=0,file='/tmp/helicalscan.cfg'): ''' @@ -1042,27 +1073,6 @@ close self.save_rec() -class GpasciiCommunicator(): - '''Communicates with the Delta Tau gpascii programm - ''' - gpascii_ack="\x06\r\n" - gpascii_inp='Input\r\n' - - def connect(self, host, username='root', password='deltatau',prompt='ppmac# ',verbose=0): - p=telnetlib.Telnet(host) - s=p.read_until('login: ') - if verbose: print(s) - p.write(username+'\n') - s =p.read_until('Password: ') - if verbose: print(s) - p.write(password+'\n') - s =p.read_until(prompt) # command prompt - if verbose: print(s) - p.write('gpascii -2\n') # execute gpascii command - s=p.read_until(self.gpascii_inp) - if verbose: print(s) - return p - if __name__=='__main__': def run_test(args): if args.host is None: @@ -1075,7 +1085,7 @@ if __name__=='__main__': hs.host=args.host # temporary #hs.test_find_rot_ctr() #hs.test_find_rot_ctr(n=5. ,per=1.,bias=2.31,ampl=4.12,phi=24.6) - + fn='/tmp/helicalscan' hs.calcParam() #hs.calcParamSim() #hs.param[0]=(15,2,0,3,0)#(z_i, y_i, x_i, r_i,phi_i) @@ -1101,6 +1111,9 @@ if __name__=='__main__': if mode&4: hs.setup_coord_trf() + hs.setup_sync() # no sync at all + 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) @@ -1123,8 +1136,16 @@ if __name__=='__main__': #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.load_rec() - hs.show_pos();hs.show_vel() + + + hs.run() + print('temporary wait that the program started') + time.sleep(5)#temporary wait that the program started + hs.gather_upload(fn+'.npz') + + hs.load_rec(fn+'.npz') + hs.show_pos() + hs.show_vel() hs.interactive_anim() #hs.show_vel(); plt.show() #hs.show_pos(); plt.show()