update gui and triggering: speed sync works!
This commit is contained in:
@@ -91,12 +91,12 @@ class MPLCanvasErr(FigureCanvas):
|
||||
|
||||
def OnBtnPress(self, event):
|
||||
"""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
|
||||
|
||||
def OnBtnRelease(self, event):
|
||||
"""on release we reset the press data"""
|
||||
print(dir(event.guiEvent))
|
||||
#print(dir(event.guiEvent))
|
||||
#self.OnMouse(event)
|
||||
return
|
||||
|
||||
|
||||
@@ -100,12 +100,12 @@ class MPLCanvasVelo(FigureCanvas):
|
||||
|
||||
def OnBtnPress(self, event):
|
||||
"""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
|
||||
|
||||
def OnBtnRelease(self, event):
|
||||
"""on release we reset the press data"""
|
||||
print(dir(event.guiEvent))
|
||||
#print(dir(event.guiEvent))
|
||||
#self.OnMouse(event)
|
||||
return
|
||||
|
||||
|
||||
@@ -46,34 +46,20 @@ class MPLCanvasImg(FigureCanvas):
|
||||
self.fig=fig
|
||||
self.ax=ax
|
||||
|
||||
def InitChild(self,pts,rec):
|
||||
def InitChild(self,doc):
|
||||
|
||||
fig=self.fig
|
||||
ax=self.ax
|
||||
pts=doc.fh['pts']
|
||||
rec=doc.fh['rec']
|
||||
idxTrigger=doc.idxTrigger
|
||||
|
||||
#res=rot.ActPos,x.ActPos,y.ActPos,rot.DesPos,x.DesPos,y.DesPos
|
||||
#idx 0 1 2 3 4 5
|
||||
#idx=np.ndarray(shape=len(pts),dtype=np.int32)
|
||||
#for i in range(len(pts)):
|
||||
# l=rec[:,(3,2)]-pts[i,:]
|
||||
# l2=l[:,0]**2+l[:,1]**2
|
||||
# idx[i]=np.argmin(l2)
|
||||
|
||||
idx=[]
|
||||
for i in range(len(pts)):
|
||||
l=rec[:,(3,2)]-pts[i,:]
|
||||
l2=l[:,0]**2+l[:,1]**2
|
||||
idx.extend(np.where(l2<1)[0].tolist())
|
||||
#print idx
|
||||
recPts=rec[idx,:]
|
||||
#f2 = plt.figure()
|
||||
#a2 = f2.add_axes([0.075,0.075,0.85,0.85])
|
||||
#a2.plot(rec[:,1],'r-',label='ptsDot') #,picker=5 default value
|
||||
#a2.plot(rec[:,0],'g-',label='ptsDot') #,picker=5 default value
|
||||
#a2.plot(rec[:,3],'r--',label='ptsDot') #,picker=5 default value
|
||||
#a2.plot(rec[:,2],'g--',label='ptsDot') #,picker=5 default value
|
||||
#plt.show()
|
||||
|
||||
# idx=[]
|
||||
# for i in range(len(pts)):
|
||||
# l=rec[:,(3,2)]-pts[i,:]
|
||||
# l2=l[:,0]**2+l[:,1]**2
|
||||
# idx.extend(np.where(l2<1)[0].tolist())
|
||||
# recPts=rec[idx,:]
|
||||
|
||||
hl=[]
|
||||
hl+=ax.plot(pts[:,0],pts[:,1],'r.',label='ptsDot') #,picker=5 default value
|
||||
@@ -86,7 +72,13 @@ class MPLCanvasImg(FigureCanvas):
|
||||
|
||||
hl+=ax.plot(rec[:, 3], rec[:, 2], 'b-',label='recDesPos')
|
||||
hl+=ax.plot(rec[:,1],rec[:,0],'g-',label='recActPos')
|
||||
hl+=ax.plot(recPts[:,1],recPts[:,0],'g.',label='recDot')
|
||||
#hl+=ax.plot(recPts[:,1],recPts[:,0],'g.',label='recDot')
|
||||
hl+=ax.plot(rec[-1:,1],rec[-1:,0],'r.--',label='recNxt')
|
||||
#hh=ax.plot(rec[idxTrigger,1],rec[idxTrigger,0],'rx',label='trig')
|
||||
#hh[0].get_markeredgewidth();hh[0].get_markersize()
|
||||
hl+=ax.plot(rec[idxTrigger,1],rec[idxTrigger,0],'rx',label='trig',markeredgewidth=1.,markersize=6.)
|
||||
|
||||
#hl+=ax.plot(recPts[:,1],recPts[:,0],'g.',label='recDot')
|
||||
ax.xaxis.set_label_text('x-pos um')
|
||||
ax.yaxis.set_label_text('y-pos um')
|
||||
ax.axis('equal')
|
||||
@@ -149,7 +141,7 @@ class MPLCanvasImg(FigureCanvas):
|
||||
|
||||
def OnBtnPress(self, event):
|
||||
"""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
|
||||
if event.inaxes == self.colBar.ax:
|
||||
#if event.guiEvent.LeftDClick()==True:
|
||||
@@ -247,7 +239,7 @@ class MAxyPlotFrame(wx.Frame):
|
||||
#wxAxCtrl.SetCallback(MAxyPlotFrame.OnSetView,wxAxCtrl)
|
||||
#sizer.Add(wxAxCtrl.sizer, 0, wx.EXPAND | wx.ALIGN_CENTER | wx.ALL, border=5)
|
||||
|
||||
canvas.InitChild(doc.fh['pts'],doc.fh['rec'])
|
||||
canvas.InitChild(doc)
|
||||
|
||||
#self.Fit()
|
||||
self.Centre()
|
||||
@@ -295,6 +287,7 @@ class MAxyPlotFrame(wx.Frame):
|
||||
hl=canvas.hl
|
||||
hl[2].set_data(rec[:idx+1, 3], rec[:idx+1, 2])
|
||||
hl[3].set_data(rec[:idx+1, 1], rec[:idx+1, 0])
|
||||
hl[4].set_data(rec[idx:idx+10, 1], rec[idx:idx+10, 0])
|
||||
#ax.draw_artist(hl[2])
|
||||
x=ax.get_xlim();x=(x[1]-x[0])/2;
|
||||
y=ax.get_ylim();y=(y[1]-y[0])/2;
|
||||
|
||||
@@ -148,21 +148,22 @@ class MAMainFrame(wx.Frame):
|
||||
l=rec[idx:idx+rng,(3,2)]-pts[i,:]
|
||||
l2=l[:,0]**2+l[:,1]**2
|
||||
ofs=l2.argmin()
|
||||
print(l2[ofs])
|
||||
#print(l2[ofs])
|
||||
idx+=ofs
|
||||
idxInPos.append(idx)
|
||||
idx+=rng/2
|
||||
|
||||
doc.idxInPos=idxInPos=np.array(idxInPos)
|
||||
#jitter=idxInPos-idxTrigger[:idxInPos.shape[0]]
|
||||
|
||||
self.SetStatusText('scaling of DesTimeBase: %f'%(float(idxInPos[-1])/idxTrigger[idxInPos.shape[0]-1]))
|
||||
#self.PlotJitter()
|
||||
|
||||
self.wxTimeCtrl.slider.SetRange(0,lenRec-1)
|
||||
|
||||
ts=fh['meta'].item()['timebase']
|
||||
page=idxInPos[1]-idxInPos[0]
|
||||
self.wxTimeCtrl.slider.SetPageSize(page)
|
||||
|
||||
self.wxTimeCtrl.slider.SetPageSize(idxInPos[1]-idxInPos[0])
|
||||
self.wxPosCtrl.slider.SetRange(0,lenPts-1)
|
||||
self.wxPosCtrl.slider.SetPageSize(10)
|
||||
self.wxTrigCtrl.slider.SetRange(0,idxTrigger.shape[0]-1)
|
||||
self.wxTrigCtrl.slider.SetPageSize(10)
|
||||
|
||||
def CloseFile(self):
|
||||
#http://docs.wxwidgets.org/2.8/wx_windowdeletionoverview.html#windowdeletionoverview
|
||||
@@ -173,6 +174,26 @@ class MAMainFrame(wx.Frame):
|
||||
except AttributeError as e:
|
||||
pass
|
||||
|
||||
def PlotJitter(self):
|
||||
doc=self.doc
|
||||
fh=doc.fh
|
||||
idxInPos=doc.idxInPos
|
||||
idxTrigger=doc.idxTrigger
|
||||
#display the jitter of inPos->trigger
|
||||
ts=fh['meta'].item()['timebase']
|
||||
jitter=idxTrigger[:idxInPos.shape[0]]-idxInPos
|
||||
import matplotlib.pyplot as plt # used for the colormaps
|
||||
plt.figure('jitter inPos -> trigger: scaling of DesTimeBase: %f'%(float(idxInPos[-1])/idxTrigger[idxInPos.shape[0]-1]))
|
||||
plt.plot(jitter*ts)
|
||||
plt.ylabel('jitter in ms')
|
||||
plt.ylabel('point idx')
|
||||
plt.show()
|
||||
|
||||
def DispJitter(self,idxInPos,idxTrigger):
|
||||
doc=self.doc
|
||||
ts=doc.fh['meta'].item()['timebase']
|
||||
self.SetStatusText("Jitter: %.2gms scaling: %.6g"%((idxTrigger-idxInPos)*ts,float(idxInPos)/idxTrigger))
|
||||
|
||||
def OnOpen(self, event):
|
||||
dlg = wx.FileDialog(self, "Choose a file", os.getcwd(), '','numpy files (*.npz;*.npy)|*.npz;*.npy|all (*.*)|*.*', wx.OPEN|wx.FD_CHANGE_DIR)
|
||||
if dlg.ShowModal() == wx.ID_OK:
|
||||
@@ -287,40 +308,43 @@ rec
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def OnSetTime(usrData, value, msg):
|
||||
def OnSetTime(usrData, idxRec, msg):
|
||||
'called when the time slider has been changed'
|
||||
#print('OnSetTime', usrData, value, msg)
|
||||
view=usrData.slider.Parent
|
||||
doc=view.doc
|
||||
idx=np.argmin(abs(doc.idxInPos-value))
|
||||
view.wxPosCtrl.SetValue(idx)
|
||||
idx=np.argmin(abs(doc.idxTrigger-value))
|
||||
view.wxTrigCtrl.SetValue(idx)
|
||||
doc.Update(view,0,value)
|
||||
idxInPos=np.argmin(abs(doc.idxInPos-idxRec))
|
||||
view.wxPosCtrl.SetValue(idxInPos)
|
||||
idxTrigger=np.argmin(abs(doc.idxTrigger-idxRec))
|
||||
view.wxTrigCtrl.SetValue(idxTrigger)
|
||||
view.DispJitter(doc.idxInPos[idxInPos],doc.idxTrigger[idxTrigger])
|
||||
doc.Update(view,0,idxRec)
|
||||
|
||||
@staticmethod
|
||||
def OnSetIdxInPos(usrData, value, msg):
|
||||
def OnSetIdxInPos(usrData, idxInPos, msg):
|
||||
'called when the idxInPos slider has been changed'
|
||||
#print('OnSetPosIdx', usrData, value, msg)
|
||||
view = usrData.slider.Parent
|
||||
doc = view.doc
|
||||
value=doc.idxInPos[value]
|
||||
view.wxTimeCtrl.SetValue(value)
|
||||
idx=np.argmin(abs(doc.idxTrigger-value))
|
||||
view.wxTrigCtrl.SetValue(idx)
|
||||
doc.Update(view, 0, value)
|
||||
idxRec=doc.idxInPos[idxInPos]
|
||||
view.wxTimeCtrl.SetValue(idxRec)
|
||||
idxTrigger=np.argmin(abs(doc.idxTrigger-idxRec))
|
||||
view.wxTrigCtrl.SetValue(idxTrigger)
|
||||
view.DispJitter(doc.idxInPos[idxInPos],doc.idxTrigger[idxTrigger])
|
||||
doc.Update(view, 0, idxRec)
|
||||
|
||||
@staticmethod
|
||||
def OnSetIdxTrigger(usrData, value, msg):
|
||||
def OnSetIdxTrigger(usrData, idxTrigger, msg):
|
||||
'called when the idxTrigger slider has been changed'
|
||||
#print('OnSetIdxTrigger', usrData, value, msg)
|
||||
view = usrData.slider.Parent
|
||||
doc = view.doc
|
||||
value=doc.idxTrigger[value]
|
||||
view.wxTimeCtrl.SetValue(value)
|
||||
idx=np.argmin(abs(doc.idxInPos-value))
|
||||
view.wxPosCtrl.SetValue(idx)
|
||||
doc.Update(view, 0, value)
|
||||
idxRec=doc.idxTrigger[idxTrigger]
|
||||
view.wxTimeCtrl.SetValue(idxRec)
|
||||
idxInPos=np.argmin(abs(doc.idxInPos-idxRec))
|
||||
view.wxPosCtrl.SetValue(idxInPos)
|
||||
view.DispJitter(doc.idxInPos[idxInPos],doc.idxTrigger[idxTrigger])
|
||||
doc.Update(view, 0, idxRec)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
Reference in New Issue
Block a user