update gui and triggering

This commit is contained in:
2018-11-21 10:57:43 +01:00
parent 554fd8e1ca
commit 2e534f306e
2 changed files with 132 additions and 68 deletions

View File

@@ -71,44 +71,8 @@ class AboutFrame(wx.Frame):
print(k,'=',v)
class MAMainFrame(wx.Frame):
def OpenFile(self,fn_npz):
doc=self.doc
try:
doc.fh=fh=np.load(fn_npz)
except IOError as e:
sys.stderr.write('Unable to open File: '+fn_npz+'\n')
else:
pass
s='content of numpy file: '+fn_npz+'\n'
for k,v in fh.iteritems():
s+=' '+k+': '+str(v.dtype)+' '+str(v.shape)+'\n'
self.wxTxt.SetLabel(s)
lenRec=fh['rec'].shape[0]
lenPts=fh['pts'].shape[0]
self.wxTimeCtrl.slider.SetRange(0,lenRec-1)
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.wxTimeCtrl.slider.SetPageSize(100)
#self.wxTree.ShowHirarchy(self.fid)
def CloseFile(self):
#http://docs.wxwidgets.org/2.8/wx_windowdeletionoverview.html#windowdeletionoverview
#print 'CloseFile'
try:
self.fh.close()
del self.fh
except AttributeError as e:
pass
def __init__(self, parent, title,doc):
wx.Frame.__init__(self, parent, title=title, size=wx.Size(650, 200),style = wx.DEFAULT_FRAME_STYLE | wx.STAY_ON_TOP)
wx.Frame.__init__(self, parent, title=title, size=wx.Size(650, 230),style = wx.DEFAULT_FRAME_STYLE | wx.STAY_ON_TOP)
self.doc=doc;doc.view.append(self)
imgDir=ut.Path.GetImage()
icon = wx.Icon(os.path.join(imgDir,'PBMA.ico'), wx.BITMAP_TYPE_ICO)
@@ -130,9 +94,12 @@ class MAMainFrame(wx.Frame):
wxTimeCtrl=ut.SliderGroup(self, label='DataPoint', range=(0, 1000))
wxTimeCtrl.SetCallback(MAMainFrame.OnSetTime, wxTimeCtrl)
sizer.Add(wxTimeCtrl.sizer, 0, wx.EXPAND | wx.ALIGN_CENTER | wx.ALL, border=5) #wxSplt.SplitVertically(wxTree, wxTxt)
wxPosCtrl=ut.SliderGroup(self, label='Position', range=(0, 1000))
wxPosCtrl.SetCallback(MAMainFrame.OnSetPosition, wxPosCtrl)
wxPosCtrl=ut.SliderGroup(self, label='IdxInPos', range=(0, 1000))
wxPosCtrl.SetCallback(MAMainFrame.OnSetIdxInPos, wxPosCtrl)
sizer.Add(wxPosCtrl.sizer, 0, wx.EXPAND | wx.ALIGN_CENTER | wx.ALL, border=5) #wxSplt.SplitVertically(wxTree, wxTxt)
wxTrigCtrl=ut.SliderGroup(self, label='IdxTrigger', range=(0, 1000))
wxTrigCtrl.SetCallback(MAMainFrame.OnSetIdxTrigger, wxTrigCtrl)
sizer.Add(wxTrigCtrl.sizer, 0, wx.EXPAND | wx.ALIGN_CENTER | wx.ALL, border=5) #wxSplt.SplitVertically(wxTree, wxTxt)
#wxSplt.SetMinimumPaneSize(320)
#wxLstCtrl=HdfAttrListCtrl(wxSplt)
#wxSplt.SplitVertically(wxTree, wxLstCtrl)
@@ -140,7 +107,8 @@ class MAMainFrame(wx.Frame):
self.Centre()
self.wxTimeCtrl=wxTimeCtrl
self.xPosCtrl=wxPosCtrl
self.wxPosCtrl=wxPosCtrl
self.wxTrigCtrl=wxTrigCtrl
self.wxTxt=wxTxt
#self.wxTree=wxTree
#self.display=wxTxt
@@ -148,6 +116,63 @@ class MAMainFrame(wx.Frame):
def __del__(self):
self.CloseFile()
def OpenFile(self,fn_npz):
doc=self.doc
try:
doc.fh=fh=np.load(fn_npz)
except IOError as e:
sys.stderr.write('Unable to open File: '+fn_npz+'\n')
else:
pass
s='content of numpy file: '+fn_npz+'\n'
for k,v in fh.iteritems():
s+=' '+k+': '+str(v.dtype)+' '+str(v.shape)+'\n'
self.wxTxt.SetLabel(s)
rec=fh['rec']
pts=fh['pts']
lenRec=rec.shape[0]
lenPts=pts.shape[0]
#idxTrigger=np.hstack(([0],rec[:,4]))
#doc.idxTrigger=idxTrigger=np.where(np.diff(idxTrigger)==1)[0]
idxTrigger=rec[:,4]
doc.idxTrigger=idxTrigger=np.where(np.diff(idxTrigger)==1)[0]+1
idxInPos=[] #first point at idx 0
try:# find approximate distance of 2 points
rng =idxTrigger[2]-idxTrigger[1]
except IndexError:
rng = int(lenRec / lenPts)
idx=rng/2
for i in range(lenPts):
l=rec[idx:idx+rng,(3,2)]-pts[i,:]
l2=l[:,0]**2+l[:,1]**2
ofs=l2.argmin()
print(l2[ofs])
idx+=ofs
idxInPos.append(idx)
idx+=rng/2
doc.idxInPos=idxInPos=np.array(idxInPos)
#jitter=idxInPos-idxTrigger[:idxInPos.shape[0]]
self.wxTimeCtrl.slider.SetRange(0,lenRec-1)
ts=fh['meta'].item()['timebase']
page=idxInPos[1]-idxInPos[0]
self.wxTimeCtrl.slider.SetPageSize(page)
self.wxPosCtrl.slider.SetRange(0,lenPts-1)
self.wxTrigCtrl.slider.SetRange(0,idxTrigger.shape[0]-1)
def CloseFile(self):
#http://docs.wxwidgets.org/2.8/wx_windowdeletionoverview.html#windowdeletionoverview
#print 'CloseFile'
try:
self.fh.close()
del self.fh
except AttributeError as e:
pass
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:
@@ -264,36 +289,39 @@ rec
@staticmethod
def OnSetTime(usrData, value, msg):
'called when the time slider has been changed'
print('OnSetTime', usrData, value, msg)
#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)
# imgFrm=usrData.slider.Parent
# imgFrm.img.set_array(imgFrm.data[usrData.value,...])
# data=imgFrm.data
# sl=ut.GetSlice(imgFrm.idxXY,data.shape,imgFrm.wxAxCtrlLst)
# try:
# tomoNorm=imgFrm.tomoNorm
# except AttributeError:
# imgFrm.canvas.img.set_array(data[sl])
# else:
# data=data[sl]*tomoNorm
# imgFrm.canvas.img.set_array(data)
# if imgFrm.mnItemShowMoment.IsChecked():
# imgFrm.PlotMoments()
# imgFrm.canvas.draw()
pass
@staticmethod
def OnSetPosition(usrData, value, msg):
'called when the time slider has been changed'
print('OnSetPosition', usrData, value, msg)
def OnSetIdxInPos(usrData, value, msg):
'called when the idxInPos slider has been changed'
#print('OnSetPosIdx', usrData, value, msg)
view = usrData.slider.Parent
doc = view.doc
doc.Update(view, 1, value)
value=doc.idxInPos[value]
view.wxTimeCtrl.SetValue(value)
idx=np.argmin(abs(doc.idxTrigger-value))
view.wxTrigCtrl.SetValue(idx)
doc.Update(view, 0, value)
@staticmethod
def OnSetIdxTrigger(usrData, value, 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)
if __name__ == '__main__':
def GetArgs():