Advertisement
Guest User

feldmaus

a guest
Jun 19th, 2009
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 9.20 KB | None | 0 0
  1. class HistoFrame(wx.Frame):
  2.     def __init__(self,starttime,endtime,timescale,zeitspanne,peaks_found, times_peaks_appeared, *args, **kwargs):
  3.         wx.Frame.__init__(self, *args, **kwargs)
  4.         # maximum samples to show in our analysis at once
  5.         self.maxitems = 1000
  6.         # the last sample we can watch in the analysis
  7.         self.peaks_found = peaks_found
  8.         self.times_peaks_appeared = times_peaks_appeared
  9.         # which sample should be shown first ?
  10.         self.min = min = 0
  11.         self.timescale = timescale
  12.         # Which is the current analysis ?
  13.         self.currentanalysis =  None
  14.         # 5% Divergence from 20ms of a raster but as count. 19.5ms to 20.5ms= 1ms/3e-6 --> 330
  15.         self.maxrasterdiv = int(200)
  16.         self.rastertime = 0.020
  17.         self.zeitspanne = zeitspanne
  18.         """We need to define self.plots2 and self.plots which will contain or graphical
  19.        Elements and their xdata,ydata properties. That is needed for changing the Slider
  20.        or Text input Element will result in a new Graph."""
  21.         self.plots = []
  22.         self.plots2 = []
  23.         self.plots3 = []
  24.         self.Bind(wx.EVT_MENU, self.onQuit, id=105)
  25.         # Menu
  26.         self.fileMenu = wx.Menu()
  27.         self.analMenu = wx.Menu()
  28.        
  29.         quit = wx.MenuItem(self.fileMenu, 105, '&Quit\tCtrl+Q', 'Quit the Application')
  30.         saveall = wx.MenuItem(self.fileMenu,106, '&SaveAllto --> ../../../peakgnuplot.dat\tCtrl+S',
  31.                                        'Save all peaks and there values to an ascii file in'
  32.                                        ' Gnuplot format.')
  33.         self.Bind(wx.EVT_MENU, self.savetoGnuplot, id=106)
  34.         self.transient = wx.MenuItem(self.analMenu,201,'&Transient Analyse',
  35.                                         'Show the peak appearance depending on the time.',
  36.                                         kind=wx.ITEM_RADIO)
  37.         self.Bind(wx.EVT_MENU, self.changeAnalysis, self.transient)
  38.         self.histogram = wx.MenuItem(self.analMenu,202,'& Histogram Analyse',
  39.                                          'Show the amplitude appearance of the peaks depending on time in a 1/50Hz raster.',
  40.                                          kind=wx.ITEM_RADIO)
  41.         self.Bind(wx.EVT_MENU, self.changeAnalysis, self.histogram)
  42.  
  43.         self.fileMenu.AppendItem(quit)
  44.         self.fileMenu.AppendItem(saveall)
  45.         self.transmenuid = self.analMenu.AppendItem(self.transient)
  46.         self.histmenuid = self.analMenu.AppendItem(self.histogram)
  47.        
  48.         menubar = wx.MenuBar()
  49.         menubar.Append(self.fileMenu, '&File')
  50.         menubar.Append(self.analMenu, '&Analysis')
  51.         self.SetMenuBar(menubar)
  52.  
  53.         self.figure = Figure()
  54.         self.canvas = FigureCanvasWxAgg(self, -1, self.figure)
  55.         self.canvas.mpl_connect('motion_notify_event', self.UpdateStatusBar)
  56.         self.canvas.Bind(wx.EVT_ENTER_WINDOW, self.ChangeCursor)      
  57.         """Load the needed Data """
  58.         f_dat = open('../../../peakswerteundzeit.dat','rb')
  59.         self.daten = cPickle.load(f_dat)
  60.         # Only the peaks should be computed to the max and min value
  61.         criterium = np.asarray(self.daten[1]==np.int_(1),dtype=bool)
  62.         self.peakvaluemax = np.amax(np.asarray(self.daten[3])[criterium])*1.01
  63.         self.peakvaluemin = np.amin(np.asarray(self.daten[3])[criterium])*0.99
  64.         #Set default Analysis
  65.         self.histmenuid.Check(True)
  66.         #Make some Slider
  67.         self.slider_param_trans = Param(0, minimum=0, maximum=len(self.daten[0]))
  68.         self.slider_param_histo = Param(int(self.maxrasterdiv/2), minimum=0, maximum=int(self.maxrasterdiv))
  69.         self.sliderlabeltrans = 'Lfd. Nr. des linken Wertes:'
  70.         self.sliderlabelhisto= 'Zeitraster(20ms default):'
  71.         if self.transmenuid.IsChecked():
  72.             self.frequencySliderGroup = SliderGroup(self, label=self.sliderlabeltrans,
  73.                                                     param=slider_param_trans)
  74.             self.slider_param_trans.attach(self)
  75.         elif self.histmenuid.IsChecked():
  76.             self.frequencySliderGroup = SliderGroup(self, label=self.sliderlabelhisto,
  77.                                                     param=self.slider_param_histo)  
  78.             self.slider_param_histo.attach(self)
  79.         self.statusBar = wx.StatusBar(self, -1)
  80.         self.statusBar.SetFieldsCount(1)
  81.         self.SetStatusBar(self.statusBar)
  82.         self.toolbar = NavigationToolbar2Wx(self.canvas)
  83.         sizer = wx.BoxSizer(wx.VERTICAL)
  84.         sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
  85.         sizer.Add(self.frequencySliderGroup.sizer, 0,
  86.                   wx.EXPAND | wx.ALIGN_CENTER | wx.ALL, border=5)
  87.         sizer.Add(self.toolbar, 0, wx.LEFT | wx.EXPAND)
  88.         self.SetSizer(sizer)
  89.         self.Fit()
  90.         self.toolbar.Show()
  91.  
  92.         if self.transmenuid.IsChecked():
  93.             self.currentanalysis = self.transient.GetId()
  94.             self.drawtransient(min,self.maxitems)
  95.         elif self.histmenuid.IsChecked():
  96.             self.currentanalysis = self.histogram.GetId()
  97.             self.drawhistogram(min,self.maxitems)
  98.  
  99.     def changeAnalysis(self,event):
  100.         id = event.GetId()
  101.         if self.currentanalysis != id:
  102.             self.figure.clear()
  103.             if (id == self.transient.GetId()):
  104.                 self.currentanalysis = self.transient.GetId()
  105.                 self.drawtransient(self.min,self.maxitems)
  106.                 self.slider_param_trans.attach(self)
  107.             elif (id==self.histogram.GetId()):
  108.                 self.currentanalysis = self.histogram.GetId()
  109.                 self.drawhistogram(self.min,self.maxitems)
  110.                 self.slider_param_histo.attach(self)
  111.             self.changeSliderGroup(id)
  112.         self.canvas.draw()
  113.        
  114.     def changeSliderGroup(self,id):
  115.         if (id == self.transient.GetId()):
  116.             self.frequencySliderGroup.setsetting(self.slider_param_trans,self.sliderlabeltrans)
  117.         elif (id==self.histogram.GetId()):
  118.             self.frequencySliderGroup.setsetting(self.slider_param_histo,self.sliderlabelhisto)
  119.  
  120. class Knob:
  121.     """
  122.    Knob - simple class with a "setKnob" method.
  123.    A Knob instance is attached to a Param instance, e.g. param.attach(knob)
  124.    Base class is for documentation purposes.
  125.    """
  126.     def setKnob(self, value):
  127.         pass
  128.  
  129.  
  130. class Param:
  131.     """
  132.    The idea of the "Param" class is that some parameter in the GUI may have
  133.    several knobs that both control it and reflect the parameter's state, e.g.
  134.    a slider, text, and dragging can all change the value of the frequency in
  135.    the waveform of this example.
  136.    The class allows a cleaner way to update/"feedback" to the other knobs when
  137.    one is being changed.  Also, this class handles min/max constraints for all
  138.    the knobs.
  139.    Idea - knob list - in "set" method, knob object is passed as well
  140.      - the other knobs in the knob list have a "set" method which gets
  141.        called for the others.
  142.    """
  143.     def __init__(self, initialValue=None, minimum=0., maximum=1.):
  144.         self.minimum = minimum
  145.         self.maximum = maximum
  146.         if initialValue != self.constrain(initialValue):
  147.             raise ValueError('illegal initial value')
  148.         self.value = initialValue
  149.         self.knobs = []
  150.  
  151.     def attach(self, knob):
  152.         self.knobs += [knob]
  153.  
  154.     def set(self, value, knob=None):
  155.         self.value = value
  156.         self.value = self.constrain(value)
  157.         for feedbackKnob in self.knobs:
  158.             if feedbackKnob != knob:
  159.                 feedbackKnob.setKnob(self.value)
  160.  
  161.         return self.value
  162.  
  163.     def constrain(self, value):
  164.         if value <= self.minimum:
  165.             value = self.minimum
  166.         if value >= self.maximum:
  167.             value = self.maximum
  168.         return value
  169.  
  170.  
  171. class SliderGroup(Knob):
  172.     def __init__(self, parent, label, param):
  173.         self.sliderLabel = wx.StaticText(parent, label=label)
  174.         self.sliderText = wx.TextCtrl(parent, -1, style=wx.TE_PROCESS_ENTER)
  175.         self.slider = wx.Slider(parent, -1)
  176.         self.slider.SetMax(param.maximum*1000)
  177.         self.setKnob(param.value)
  178.  
  179.         sizer = wx.BoxSizer(wx.HORIZONTAL)
  180.         sizer.Add(self.sliderLabel, 0, wx.EXPAND | wx.ALIGN_CENTER | wx.ALL, border=2)
  181.         sizer.Add(self.sliderText, 0, wx.EXPAND | wx.ALIGN_CENTER | wx.ALL, border=2)
  182.         sizer.Add(self.slider, 1, wx.EXPAND)
  183.         self.sizer = sizer
  184.  
  185.         self.slider.Bind(wx.EVT_SLIDER, self.sliderHandler)
  186.         self.sliderText.Bind(wx.EVT_TEXT_ENTER, self.sliderTextHandler)
  187.  
  188.         self.param = param
  189.         self.param.attach(self)
  190.  
  191.     def sliderHandler(self, evt):
  192.         value = evt.GetInt() / 1000.
  193.         self.param.set(int(value))
  194.  
  195.     def sliderTextHandler(self, evt):
  196.         value = int(self.sliderText.GetValue())
  197.         self.param.set(int(value))
  198.  
  199.     def setKnob(self, value):
  200.         value = int(value)
  201.         self.sliderText.SetValue('%g'%value)
  202.         self.slider.SetValue(value*1000)
  203.  
  204.     def setsetting(self,param,label):
  205.         self.sliderLabel.SetLabel(label)
  206.         self.slider.SetMax(param.maximum*1000)
  207.         self.setKnob(param.value)
  208.         self.param = param
  209.         self.param.attach(self)
  210.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement