From f91ce6ad93e4c98bbd315fd71d6714dfb3d177dd Mon Sep 17 00:00:00 2001 From: Thierry Zamofing Date: Thu, 7 Dec 2017 10:05:09 +0100 Subject: [PATCH] first step in heliscan transformation --- python/helicalscan.py | 545 +++++++++++++++++++----------------------- 1 file changed, 243 insertions(+), 302 deletions(-) diff --git a/python/helicalscan.py b/python/helicalscan.py index 40813f7..6c855b5 100755 --- a/python/helicalscan.py +++ b/python/helicalscan.py @@ -89,11 +89,247 @@ class HelicalScan: if not dryrun: eval('self.' + cmd) + + @staticmethod + def test_find_rot_ctr(n=3.,per=1.,bias=4.1,ampl=2.4,phi=37): + # find the rotation center, amplitude out of n (niminum 3) measurements + # n number of equidistant measurements + # per number of periods (full rotation of all measurements nut be a interger value for precise measurements) + # phi phase + # bias bias value + # ampl amplitude + + t = np.arange(n) + w=2*np.pi*per/n*t + y=ampl*np.cos(w+phi*d2r)+bias + plt.figure(1) + plt.subplot(311) + plt.plot(t,y,'b.-') + + plt.subplot(312) + f = np.fft.fft(y) + plt.step(t, f.real,'b.-', t, f.imag,'r.-', where='mid') + + (bias,ampl,phase)=HelicalScan.meas_rot_ctr(y, per) + print('bias: '+str(bias)) + print('amplitude: '+str(ampl)) + print('phase: '+str(phase*360./2/np.pi)) + + plt.subplot(313) + t2 = np.linspace(0,2*np.pi,64) + y2=ampl*np.cos(t2+phase)+bias + plt.plot(t2,y2,'g-') + plt.stem(w,y,'b-') + + + plt.show() + pass + + + def test_coord_trf(self): + self.calcParam() + param = self.param + y, w, dx, dz = (4.3, .1, 0.2, 0.3) + print 'input : fy:%.3g dx:%.3g dz:%.3g w:%.3g' % (y, dx, dz, w / d2r) + (fy, w, cx, cz) = self.inv_transform(y, w, dx, dz) + print 'inv_trf: fy:%.3g cx:%.3g cz:%.3g w:%.3g' % (fy, cx, cz, w / d2r) + (y, w, dx, dz) = self.fwd_transform(fy, w, cx, cz) + print 'fwd_trf: fy:%.3g dx:%.3g dz:%.3g w:%.3g' % (y, dx, dz, w / d2r) + + # plt.ion() + # fig = plt.figure() + + # a=anim.FuncAnimation(fig,self.my_anim_func3,100,fargs=(horig,pt),interval=20,blit=False) + # plt.show() + + # def my_anim_func3(self,idx): + # self.hCrist,pt=self.pltCrist(cx=0,ty=0,cz=0,w=10*idx*d2r,h=self.hCrist) + + + def interactive_fy_cx_cz_w(self): + fig = plt.figure() + self.manip=False#True#False + self.ax=ax=plt3d.Axes3D(fig,[0.02, 0.15, 0.96, 0.83]) + ax.set_xlabel('Z');ax.set_ylabel('X');ax.set_zlabel('Y') + ax.view_init(elev=14., azim=10) + self.calcParam() + param=self.param + # param[i]=(z_i, y_i, x_i, r_i,phi_i) + ctr=param[:,0:3].mean(0)[::-1] + self.axSetCenter(ctr,10) + + axFy = plt.axes([0.1, 0.01, 0.8, 0.02]) + axCx = plt.axes([0.1, 0.04, 0.8, 0.02]) + axCz = plt.axes([0.1, 0.07, 0.8, 0.02]) + axW = plt.axes([0.1, 0.10, 0.8, 0.02]) + if self.manip: + lz=ax.get_xlim() + lx=ax.get_ylim() + ly=ax.get_zlim() + else: + lx = ly=lz=[-5,5] + self.sldFy = sFy = Slider(axFy, 'fy', ly[0], ly[1], valinit=(ly[0]+ly[1])/2.) + self.sldCx = sCx = Slider(axCx, 'cx', lx[0], lx[1], valinit=(lx[0]+lx[1])/2.) + self.sldCz = sCz = Slider(axCz, 'cz', lz[0], lz[1], valinit=(lz[0]+lz[1])/2.) + self.sldW =sW = Slider(axW, 'ang', -180., 180.0, valinit=0) + sFy.on_changed(self.update_fy_cx_cz_w) + sCx.on_changed(self.update_fy_cx_cz_w) + sCz.on_changed(self.update_fy_cx_cz_w) + sW.on_changed(self.update_fy_cx_cz_w) + + hCrist,pt=self.pltCrist() + + self.hCrist=hCrist;self.fig=fig + # param[i]=(z_i, y_i, x_i, r_i,phi_i) + p=np.ndarray((param.shape[0], 3)) + for i in range(2): + (z_i, y_i, x_i, r_i, phi_i)=param[i] + p[i,0]=x_i+r_i*np.sin(phi_i) # x= x_i+r_i*cos(phi_i+w)+cx + p[i,1]=y_i # y= y_i + p[i,2] =z_i+r_i*np.cos(phi_i) # z= z_i+r_i*sin(phi_i*w) + print p + ofs=(p[1]+p[0])/2. # = center of the cristal + + m=Trf.trans(*ofs); self.hOrig=self.pltOrig(m) + plt.show() + + def update_fy_cx_cz_w(self,val): + fy = self.sldFy.val + cx = self.sldCx.val + cz = self.sldCz.val + w = self.sldW.val + if self.manip: + param = self.param + # param[i]=(z_i, y_i, x_i, r_i,phi_i) + p = np.ndarray((param.shape[0], 3)) + for i in range(2): + (z_i, y_i, x_i, r_i, phi_i) = param[i] + p[i, 0] = x_i + r_i * np.cos(phi_i) # x= x_i+r_i*cos(phi_i+w)+cx + p[i, 1] = y_i # y= y_i + p[i, 2] = z_i + r_i * np.sin(phi_i) # z= z_i+r_i*sin(phi_i*w) + print p + ofs = (p[1] + p[0]) / 2. # = center of the cristal + + m = Trf.trans(cx,fy,cz) + m= m.dot(Trf.rotY(w*d2r)) + self.hOrig = self.pltOrig(m,self.hOrig) + else: + self.hCrist,pt=self.pltCrist(fy,cx,cz,w*d2r,self.hCrist) + #l.set_ydata(amp * np.sin(2 * np.pi * freq * t)) + self.fig.canvas.draw_idle() + + def interactive_y_dx_dz_w(self): + fig = plt.figure() + self.ax=ax=plt3d.Axes3D(fig,[0.02, 0.15, 0.96, 0.83]) + ax.set_xlabel('Z');ax.set_ylabel('X');ax.set_zlabel('Y') + ax.view_init(elev=14., azim=10) + self.calcParam() + param=self.param + + # param[i]=(z_i, y_i, x_i, r_i,phi_i) + ctr=(0,0,0) + self.axSetCenter(ctr,10) + + axY = plt.axes([0.1, 0.01, 0.8, 0.02]) + axDx = plt.axes([0.1, 0.04, 0.8, 0.02]) + axDz = plt.axes([0.1, 0.07, 0.8, 0.02]) + axW = plt.axes([0.1, 0.10, 0.8, 0.02]) + + lx=[-1,1];ly=[0,1];lz=[-1,1] + ly = param[:,1] + self.sldY = sY = Slider(axY, 'y', ly[0], ly[1], valinit=(ly[0]+ly[1])/2.) + self.sldDx = sDx = Slider(axDx, 'dx', lx[0], lx[1], valinit=(lx[0]+lx[1])/2.) + self.sldDz = sDz = Slider(axDz, 'dz', lz[0], lz[1], valinit=(lz[0]+lz[1])/2.) + self.sldW =sW = Slider(axW, 'ang', -180., 180.0, valinit=0) + sY.on_changed(self.update_y_dx_dz_w) + sDx.on_changed(self.update_y_dx_dz_w) + sDz.on_changed(self.update_y_dx_dz_w) + sW.on_changed(self.update_y_dx_dz_w) + + + # param[i]=(z_i, y_i, x_i, r_i,phi_i) + p=np.ndarray((param.shape[0], 3)) + for i in range(2): + (z_i, y_i, x_i, r_i, phi_i)=param[i] + p[i,0]=x_i+r_i*np.sin(phi_i) # x= x_i+r_i*cos(phi_i+w)+cx + p[i,1]=y_i # y= y_i + p[i,2]=z_i+r_i*np.cos(phi_i) # z= z_i+r_i*sin(phi_i*w) + ofs=(p[1]+p[0])/2. # = center of the cristal + print 'p, ofs',p,ofs + + m=Trf.trans(0,0,0); self.hOrig=self.pltOrig(m) + hCrist,pt=self.pltCrist(cx=-ofs[0],fy=-ofs[1],cz=-ofs[2]) + + self.hCrist=hCrist;self.fig=fig + plt.show() + + def update_y_dx_dz_w(self,val): + y = self.sldY.val + dx = self.sldDx.val + dz = self.sldDz.val + w = self.sldW.val + w=w*d2r + (fy, w, cx, cz)=self.inv_transform(y,w,dx,dz) + + self.hCrist,pt=self.pltCrist(-fy,-cx,-cz,w,self.hCrist) + self.fig.canvas.draw_idle() + + def fwd_transform(self,fy,w,cx,cz): + #cx,cy: coarse stage + #input: fy,w,cx,cz + #output: y,w,dx,dz + # param[i]=(z_i, y_i, x_i, r_i,phi_i) + + param=self.param + p=np.ndarray((param.shape[0], 3)) + for i in range(2): + (z_i, y_i, x_i, r_i, phi_i)=param[i] + p[i,0]=x_i+r_i*np.sin(phi_i+w) # x= x_i+r_i*cos(phi_i+w)+cx + p[i,1]=y_i # y= y_i + p[i,2]=z_i+r_i*np.cos(phi_i+w) # z= z_i+r_i*sin(phi_i*w) + v=p[1]-p[0] + #for y = 0..1: + #v=v*y + #for y = y_0..y_1: + y_0=param[0,1];y_1=param[1,1];v=v*(fy-y_0)/(y_1-y_0) + + v=v+p[0] + dx=cx-v[0] + dz=cz-v[2] + y=v[1] + res=(y,w,dx,dz) + return res + + def inv_transform(self,y,w,dx=0,dz=0): + #input: y,w,dx,dz + #output: y,w,cx,cz + #dx,dy: deviation from cristal center line + param=self.param + p=np.ndarray((param.shape[0], 3)) + for i in range(2): + (z_i, y_i, x_i, r_i, phi_i)=param[i] + p[i,0]=x_i+r_i*np.sin(phi_i+w) # x= x_i+r_i*cos(phi_i+w)+cx + p[i,1]=y_i # y= y_i + p[i,2]=z_i+r_i*np.cos(phi_i+w) # z= z_i+r_i*sin(phi_i*w) + v=p[1]-p[0] + #for y = 0..1: + #v=v*y + #for y = y_0..y_1: + y_0=param[0,1];y_1=param[1,1];v=v*(y-y_0)/(y_1-y_0) + + v=v+p[0] + cx=dx+v[0] + cz=dz+v[2] + fy=v[1] + res=(fy,w,cx,cz) + return res + + def calcParam(self): n = 3.; per = 1.; w = 2 * np.pi * per / n * np.arange(n) - p = ((2.3, .71, 4.12, 10.6 * d2r), (6.2, .45, 3.2, 45.28 * d2r)) # (y, bias, ampl, phi) + p = ((2.3, .71, 4.12, 10.6 * d2r),(6.2, .45, 3.2, 45.28 * d2r)) # (y, bias, ampl, phi) self.param = param = np.ndarray((len(p), 5)) z = 14.5 # fix z position for i in range(2): @@ -178,271 +414,6 @@ class HelicalScan: #h+=(hs,hp[0]) return (h,pt) - - def interactive_fy_cx_cz_w(self): - fig = plt.figure() - self.manip=False#True#False - self.ax=ax=plt3d.Axes3D(fig,[0.02, 0.15, 0.96, 0.83]) - ax.set_xlabel('Z');ax.set_ylabel('X');ax.set_zlabel('Y') - ax.view_init(elev=14., azim=10) - self.calcParam() - param=self.param - # param[i]=(z_i, y_i, x_i, r_i,phi_i) - ctr=param[:,0:3].mean(0)[::-1] - self.axSetCenter(ctr,10) - - axFy = plt.axes([0.1, 0.01, 0.8, 0.02]) - axCx = plt.axes([0.1, 0.04, 0.8, 0.02]) - axCz = plt.axes([0.1, 0.07, 0.8, 0.02]) - axW = plt.axes([0.1, 0.10, 0.8, 0.02]) - if self.manip: - lz=ax.get_xlim() - lx=ax.get_ylim() - ly=ax.get_zlim() - else: - lx = ly=lz=[-5,5] - self.sldFy = sFy = Slider(axFy, 'fy', ly[0], ly[1], valinit=(ly[0]+ly[1])/2.) - self.sldCx = sCx = Slider(axCx, 'cx', lx[0], lx[1], valinit=(lx[0]+lx[1])/2.) - self.sldCz = sCz = Slider(axCz, 'cz', lz[0], lz[1], valinit=(lz[0]+lz[1])/2.) - self.sldW =sW = Slider(axW, 'ang', -180., 180.0, valinit=0) - sFy.on_changed(self.update_fy_cx_cz_w) - sCx.on_changed(self.update_fy_cx_cz_w) - sCz.on_changed(self.update_fy_cx_cz_w) - sW.on_changed(self.update_fy_cx_cz_w) - - hCrist,pt=self.pltCrist() - - self.hCrist=hCrist;self.fig=fig - # param[i]=(z_i, y_i, x_i, r_i,phi_i) - p=np.ndarray((param.shape[0], 3)) - for i in range(2): - (z_i, y_i, x_i, r_i, phi_i)=param[i] - p[i,0]=x_i+r_i*np.cos(phi_i) # x= x_i+r_i*cos(phi_i+w)+cx - p[i,1]=y_i # y= y_i - p[i,2] =z_i+r_i*np.sin(phi_i) # z= z_i+r_i*sin(phi_i*w) - print p - ofs=(p[1]+p[0])/2. # = center of the cristal - - m=Trf.trans(*ofs); self.hOrig=self.pltOrig(m) - - - - plt.show() - - def update_fy_cx_cz_w(self,val): - fy = self.sldFy.val - cx = self.sldCx.val - cz = self.sldCz.val - w = self.sldW.val - if self.manip: - param = self.param - # param[i]=(z_i, y_i, x_i, r_i,phi_i) - p = np.ndarray((param.shape[0], 3)) - for i in range(2): - (z_i, y_i, x_i, r_i, phi_i) = param[i] - p[i, 0] = x_i + r_i * np.cos(phi_i) # x= x_i+r_i*cos(phi_i+w)+cx - p[i, 1] = y_i # y= y_i - p[i, 2] = z_i + r_i * np.sin(phi_i) # z= z_i+r_i*sin(phi_i*w) - print p - ofs = (p[1] + p[0]) / 2. # = center of the cristal - - m = Trf.trans(cx,fy,cz) - m= m.dot(Trf.rotY(w*d2r)) - self.hOrig = self.pltOrig(m,self.hOrig) - else: - self.hCrist,pt=self.pltCrist(fy,cx,cz,w*d2r,self.hCrist) - #l.set_ydata(amp * np.sin(2 * np.pi * freq * t)) - self.fig.canvas.draw_idle() - - def interactive_y_dx_dz_w(self): - fig = plt.figure() - self.manip=False#True#False - self.ax=ax=plt3d.Axes3D(fig,[0.02, 0.15, 0.96, 0.83]) - ax.set_xlabel('Z');ax.set_ylabel('X');ax.set_zlabel('Y') - ax.view_init(elev=14., azim=10) - self.calcParam() - param=self.param - # param[i]=(z_i, y_i, x_i, r_i,phi_i) - ctr=param[:,0:3].mean(0)[::-1] - self.axSetCenter(ctr,10) - - axFy = plt.axes([0.1, 0.01, 0.8, 0.02]) - axCx = plt.axes([0.1, 0.04, 0.8, 0.02]) - axCz = plt.axes([0.1, 0.07, 0.8, 0.02]) - axW = plt.axes([0.1, 0.10, 0.8, 0.02]) - if self.manip: - lz=ax.get_xlim() - lx=ax.get_ylim() - ly=ax.get_zlim() - else: - lx=[-1,1];ly=[0,1];lz=[-1,1] - self.sldFy = sFy = Slider(axFy, 'y', ly[0], ly[1], valinit=(ly[0]+ly[1])/2.) - self.sldCx = sCx = Slider(axCx, 'dx', lx[0], lx[1], valinit=(lx[0]+lx[1])/2.) - self.sldCz = sCz = Slider(axCz, 'dz', lz[0], lz[1], valinit=(lz[0]+lz[1])/2.) - self.sldW =sW = Slider(axW, 'ang', -180., 180.0, valinit=0) - sFy.on_changed(self.update_y_dx_dz_w) - sCx.on_changed(self.update_y_dx_dz_w) - sCz.on_changed(self.update_y_dx_dz_w) - sW.on_changed(self.update_y_dx_dz_w) - - hCrist,pt=self.pltCrist() - - self.hCrist=hCrist;self.fig=fig - # param[i]=(z_i, y_i, x_i, r_i,phi_i) - p=np.ndarray((param.shape[0], 3)) - for i in range(2): - (z_i, y_i, x_i, r_i, phi_i)=param[i] - p[i,0]=x_i+r_i*np.cos(phi_i) # x= x_i+r_i*cos(phi_i+w)+cx - p[i,1]=y_i # y= y_i - p[i,2] =z_i+r_i*np.sin(phi_i) # z= z_i+r_i*sin(phi_i*w) - print p - ofs=(p[1]+p[0])/2. # = center of the cristal - - m=Trf.trans(*ofs); self.hOrig=self.pltOrig(m) - - - - plt.show() - - def update_y_dx_dz_w(self,val): - fy = self.sldFy.val - cx = self.sldCx.val - cz = self.sldCz.val - w = self.sldW.val - if self.manip: - param = self.param - # param[i]=(z_i, y_i, x_i, r_i,phi_i) - p = np.ndarray((param.shape[0], 3)) - for i in range(2): - (z_i, y_i, x_i, r_i, phi_i) = param[i] - p[i, 0] = x_i + r_i * np.cos(phi_i) # x= x_i+r_i*cos(phi_i+w)+cx - p[i, 1] = y_i # y= y_i - p[i, 2] = z_i + r_i * np.sin(phi_i) # z= z_i+r_i*sin(phi_i*w) - print p - ofs = (p[1] + p[0]) / 2. # = center of the cristal - - m = Trf.trans(cx,fy,cz) - m= m.dot(Trf.rotY(w*d2r)) - self.hOrig = self.pltOrig(m,self.hOrig) - else: - self.hCrist,pt=self.pltCrist(fy,cx,cz,w*d2r,self.hCrist) - #l.set_ydata(amp * np.sin(2 * np.pi * freq * t)) - self.fig.canvas.draw_idle() - - - def test_coord_trf(self): - plt.ion() - fig = plt.figure() - #self.ax=ax=fig.add_subplot(1,1,1,projection='3d') - self.ax=ax=plt3d.Axes3D(fig,[0.02, 0.02, 0.96, 0.96]) - #fig.Axes3DSubplot() - ax.set_xlabel('Z');ax.set_ylabel('X');ax.set_zlabel('Y') - ax.view_init(elev=14., azim=10) - self.axSetCenter((0,5,15),10) - self.calcParam() - param=self.param - - hCrist,pt=self.pltCrist() - z = 14.5 # fix z position - #self.hCrist=hCrist - #a=anim.FuncAnimation(fig,self.my_anim_func3,100,fargs=(),interval=20,blit=False) - #plt.show() - - #plt.show() - #m=np.identity(4); horig=extAx.pltOrig(m) - m=Trf.trans(0,0,z); self.hOrig=self.pltOrig(m) - - #self.fwd_transform(y ,w ,cx ,cz) - # y_0 ,0deg ,x_0 ,z_0) - m=self.fwd_transform(param[0][1],0,pt[2,0],pt[2,2]) - m=self.fwd_transform(param[0][1],20*d2r,pt[2,0],pt[2,2]) - #m=self.fwd_transform(param[0][1],0,pt[2][0],pt[2][2]) - pass - #m=self.fwd_transform(param[0][1],20*d2r,pt[2][0],pt[2][2]) - #self.pltOrig(m) - - #a=anim.FuncAnimation(fig,self.my_anim_func3,100,fargs=(horig,pt),interval=20,blit=False) - #plt.show() - # y_0 ,120deg ,x_0 ,z_0) - self.fwd_transform(param[0][1],2*np.pi/3.,param[0][2],param[0][0]) - #self.fwd_transform(param[1][1],0.,param[1][2],param[1][3]) - - def my_anim_func3(self,idx): - self.hCrist,pt=self.pltCrist(cx=0,ty=0,cz=0,w=10*idx*d2r,h=self.hCrist) - - def my_anim_func2(self,idx, horig,pt): - #print('my_anim_func2%d'%idx) - pIdx, aIdx= divmod(idx, 25) - a = aIdx/25. * 2. * np.pi - #print(aIdx,a) - m = Trf.trans(*pt[pIdx]) - m = m=m.dot(Trf.rotY(a)) - self.pltOrig(m, horig) - - def my_anim_func(self,idx, horig): - print('my_anim_func%d'%idx) - a = idx * .01 * 2 * np.pi - m = Trf.rotY(a) - self.pltOrig(m, horig) - - def fwd_transform(self,y,w,cx,cz): - #cx,cy: coarse stage - #input: y,w,cx,cz - #output: y,w,dx,dz - # param[i]=(z_i, y_i, x_i, r_i,phi_i) - - param=self.param - p=np.ndarray((param.shape[0], 3)) - for i in range(2): - (z_i, y_i, x_i, r_i, phi_i)=param[i] - p[i,0]=x_i+r_i*np.cos(phi_i+w) # x= x_i+r_i*cos(phi_i+w)+cx - p[i,1]=y_i # y= y_i - p[i,2] =z_i+r_i*np.sin(phi_i+w) # z= z_i+r_i*sin(phi_i*w) - print p - v=p[1]-p[0] - v=v/np.sqrt(v.dot(v)) # v/|v| - y_0=param[0][1] - y_1=param[1][1] - v=v*(y-y_0)/(y_1-y_0) # v(y)=v*(v-y_0)/(y_1-y_0) - v=p[0]+v - dx=cx-v[0] - dz=cz-v[2] - res=(y,w,dx,dz) - print res - - m=Trf.trans(cx,y,cz) - m=m.dot(Trf.rotY(w)) - self.pltOrig(m,self.hOrig) - self.axSetCenter(m[0:3,3],10) - return res - - def inv_transform(self,y,w,dx=0,dz=0): - #input: y,w,dx,dz - #output: y,w,cx,cz - #dx,dy: deviation from cristal center line - param=self.param - p=np.ndarray((param.shape[0], 3)) - for i in range(2): - (z_i, y_i, x_i, r_i, phi_i)=param[i] - p[i,0]=x_i+r_i*np.cos(phi_i+w) # x= x_i+r_i*cos(phi_i+w)+cx - p[i,1]=y_i # y= y_i - p[i,2] =z_i+r_i*np.sin(phi_i+w) # z= z_i+r_i*sin(phi_i*w) - print p - v=p[1]-p[0] - v=v/np.sqrt(v.dot(v)) # v/|v| - y_0=param[0][1] - y_1=param[1][1] - v=v*(y-y_0)/(y_1-y_0) # v(y)=v*(v-y_0)/(y_1-y_0) - v=p[0]+v - dx=cx-v[0] - dz=cz-v[2] - res=(y,w,dx,dz) - print res - - - pass - - @staticmethod def meas_rot_ctr(y,per=1): # find the amplitude bias and phase of an equidistant sampled sinus @@ -456,40 +427,6 @@ class HelicalScan: ampl=np.absolute(f[idx])*2/n return (bias,ampl,phase) - @staticmethod - def test_find_rot_ctr(n=3.,per=1.,bias=4.1,ampl=2.4,phi=37): - # find the rotation center, amplitude out of n (niminum 3) measurements - # n number of equidistant measurements - # per number of periods (full rotation of all measurements nut be a interger value for precise measurements) - # phi phase - # bias bias value - # ampl amplitude - - t = np.arange(n) - w=2*np.pi*per/n*t - y=ampl*np.cos(w+phi*d2r)+bias - plt.figure(1) - plt.subplot(311) - plt.plot(t,y,'b.-') - - plt.subplot(312) - f = np.fft.fft(y) - plt.step(t, f.real,'b.-', t, f.imag,'r.-', where='mid') - - (bias,ampl,phase)=HelicalScan.meas_rot_ctr(y, per) - print('bias: '+str(bias)) - print('amplitude: '+str(ampl)) - print('phase: '+str(phase*360./2/np.pi)) - - plt.subplot(313) - t2 = np.linspace(0,2*np.pi,64) - y2=ampl*np.cos(t2+phase)+bias - plt.plot(t2,y2,'g-') - plt.stem(w,y,'b-') - - - plt.show() - pass def axSetCenter(self,v,l): ax=self.ax @@ -542,10 +479,14 @@ Examples:'''+''.join(map(lambda s:cmd+s, exampleCmd))+'\n ' hs=HelicalScan(args) #hs.sequencer() + hs.test_find_rot_ctr() + hs.test_find_rot_ctr(n=5. ,per=1.,bias=2.31,ampl=4.12,phi=24.6) + hs.test_coord_trf() hs.interactive_fy_cx_cz_w() hs.interactive_y_dx_dz_w() - #hs.test_coord_trf() -#------------------ Main Code ---------------------------------- + + + #------------------ Main Code ---------------------------------- #ssh_test() ret=parse_args() exit(ret)