Changeset 174 for trunk/synapse


Ignore:
Timestamp:
09/01/10 14:24:40 (11 years ago)
Author:
sc
Message:

synapse/Puzzlebox/Synapse/Interface_Design.py:

  • tabCharts added

synapse/Puzzlebox/Synapse/Interface_Plot.py:

  • class chartEEGMatplotlibCanvas added
  • rawEEG wave graph labels fixed

synapse/Puzzlebox/Synapse/Interface.py:

  • tabCharts added for graphing eSense and EEG Power bands

synapse/Puzzlebox/Synapse/Configuration.py:

  • INTERFACE_CHART_STYLES values added
Location:
trunk/synapse
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/synapse/Puzzlebox/Synapse/Configuration.py

    r163 r174  
    2626                CONFIGURATION_FILE_PATH = \ 
    2727                        os.path.join('/etc/puzzlebox_synapse', CONFIGURATION_FILE_PATH) 
     28 
     29INTERFACE_CHART_STYLES = { \ 
     30        'attention': 'r-', \ 
     31        'meditation': 'b-', \ 
     32        'delta': 'g-', \ 
     33        'theta': 'y-', \ 
     34        'lowAlpha': 'c-', \ 
     35        'highAlpha': 'b-', \ 
     36        'lowBeta': 'r-', \ 
     37        'highBeta': 'm-', \ 
     38        'lowGamma': 'k-', \ 
     39        'highGamma': 'k-', \ 
     40} 
     41 
     42#The following color abbreviations are supported: 
     43#character      color 
     44#‘b’        blue 
     45#‘g’        green 
     46#‘r’        red 
     47#‘c’        cyan 
     48#‘m’        magenta 
     49#‘y’        yellow 
     50#‘k’        black 
     51#‘w’        white 
     52 
     53#The following format string characters are accepted to control the line style or marker: 
     54#character      description 
     55#'-'    solid line style 
     56#'--'   dashed line style 
     57#'-.'   dash-dot line style 
     58#':'    dotted line style 
     59#'.'    point marker 
     60#','    pixel marker 
     61#'o'    circle marker 
     62#'v'    triangle_down marker 
     63#'^'    triangle_up marker 
     64#'<'    triangle_left marker 
     65#'>'    triangle_right marker 
     66#'1'    tri_down marker 
     67#'2'    tri_up marker 
     68#'3'    tri_left marker 
     69#'4'    tri_right marker 
     70#'s'    square marker 
     71#'p'    pentagon marker 
     72#'*'    star marker 
     73#'h'    hexagon1 marker 
     74#'H'    hexagon2 marker 
     75#'+'    plus marker 
     76#'x'    x marker 
     77#'D'    diamond marker 
     78#'d'    thin_diamond marker 
     79#'|'    vline marker 
     80#'_'    hline marker 
    2881 
    2982 
  • trunk/synapse/Puzzlebox/Synapse/Interface.py

    r173 r174  
    2424 
    2525try: 
    26         from Interface_Plot import rawEEGMatplotlibCanvas 
     26        from Interface_Plot import * 
    2727        MATPLOTLIB_AVAILABLE = True 
    2828except: 
     
    166166                 
    167167                if MATPLOTLIB_AVAILABLE: 
    168                         self.matplot = rawEEGMatplotlibCanvas(self.tabEEGSignals, \ 
    169                                                               width=8, \ 
    170                                                               height=4, \ 
    171                                                               dpi=100, \ 
    172                                                               title='Raw EEG Waves') 
     168                        self.rawEEGMatplot = rawEEGMatplotlibCanvas( \ 
     169                                                self.tabEEGSignals, \ 
     170                                                width=8, \ 
     171                                                height=4, \ 
     172                                                dpi=100, \ 
     173                                                title='Raw EEG Waves') 
     174                        self.chartEEGMatplot = chartEEGMatplotlibCanvas( \ 
     175                                                self.tabCharts, \ 
     176                                                width=8, \ 
     177                                                height=4, \ 
     178                                                dpi=100, \ 
     179                                                title='EEG Chart') 
    173180                 
    174181                else: 
    175182                        self.tabWidget.removeTab(self.tabWidget.indexOf(self.tabEEGSignals)) 
     183                        self.tabWidget.removeTab(self.tabWidget.indexOf(self.tabCharts)) 
    176184         
    177185         
     
    376384                if ('rawEeg' in packet.keys()): 
    377385                        value = packet['rawEeg'] 
    378                         if MATPLOTLIB_AVAILABLE: 
    379                                 self.matplot.update_figure(value) 
     386                        if MATPLOTLIB_AVAILABLE and \ 
     387                                (self.tabWidget.currentIndex() == \ 
     388                                        self.tabWidget.indexOf(self.tabEEGSignals)): 
     389                                self.rawEEGMatplot.update_figure(value) 
    380390                 
    381391                 
     
    399409                                self.progressBarMeditation.setValue(value) 
    400410                                self.textEditDebugConsole.append("eSense meditation: %i" % value) 
     411                         
     412                         
     413                        if MATPLOTLIB_AVAILABLE: 
     414                                self.chartEEGMatplot.update_values('eSense', packet['eSense']) 
     415                                if (self.tabWidget.currentIndex() == \ 
     416                                    self.tabWidget.indexOf(self.tabCharts)): 
     417                                        self.chartEEGMatplot.update_figure('eSense', packet['eSense']) 
    401418                 
    402419                 
     
    460477                                self.progressBarEEGMidGamma.setValue(value) 
    461478                                self.textEditDebugConsole.append("highGamma: %i" % value) 
     479                         
     480                         
     481                        if MATPLOTLIB_AVAILABLE: 
     482                                self.chartEEGMatplot.update_values('eegPower', packet['eegPower']) 
     483                                if (self.tabWidget.currentIndex() == \ 
     484                                    self.tabWidget.indexOf(self.tabCharts)): 
     485                                        self.chartEEGMatplot.update_figure('eegPower', packet['eegPower']) 
    462486         
    463487         
  • trunk/synapse/Puzzlebox/Synapse/Interface_Design.py

    r167 r174  
    33# Form implementation generated from reading ui file 'interface/puzzlebox_synapse_interface_design.ui' 
    44# 
    5 # Created: Wed Aug 25 03:41:40 2010 
     5# Created: Wed Sep  1 02:00:44 2010 
    66#      by: PyQt4 UI code generator 4.7.3 
    77# 
     
    229229                self.tabEEGSignals.setObjectName("tabEEGSignals") 
    230230                self.tabWidget.addTab(self.tabEEGSignals, "") 
     231                self.tabCharts = QtGui.QWidget() 
     232                self.tabCharts.setObjectName("tabCharts") 
     233                self.tabWidget.addTab(self.tabCharts, "") 
    231234                self.tabDebugConsole = QtGui.QWidget() 
    232235                self.tabDebugConsole.setObjectName("tabDebugConsole") 
     
    370373                self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabThinkGearConnectServer), QtGui.QApplication.translate("Form", "ThinkGear Connect Server", None, QtGui.QApplication.UnicodeUTF8)) 
    371374                self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabEEGSignals), QtGui.QApplication.translate("Form", "EEG Waves", None, QtGui.QApplication.UnicodeUTF8)) 
     375                self.tabWidget.setTabText(self.tabWidget.indexOf(self.tabCharts), QtGui.QApplication.translate("Form", "Charts", None, QtGui.QApplication.UnicodeUTF8)) 
    372376                self.textEditDebugConsole.setHtml(QtGui.QApplication.translate("Form", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" 
    373377"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" 
  • trunk/synapse/Puzzlebox/Synapse/Interface_Plot.py

    r173 r174  
    2525        print "Using PySide module" 
    2626 
     27import Configuration as configuration 
     28 
    2729### GLOBALS ### 
    2830 
     
    9294                self.axes_top.text(self.update_top_frequency + 24, \ 
    9395                                   0, \ 
    94                                    '%i Hz' % self.update_top_frequency, \ 
     96                                   '1.0 seconds', \ 
    9597                                   rotation='vertical', \ 
    9698                                   verticalalignment='center') 
     
    98100                self.axes_bottom.text(self.update_bottom_frequency + 12, \ 
    99101                                   0, \ 
    100                                    '%i Hz' % self.update_bottom_frequency, \ 
     102                                   '0.5 seconds', \ 
    101103                                   rotation='vertical', \ 
    102104                                   verticalalignment='center') 
     
    126128                        self.axes_top.text(self.update_top_frequency + 24, \ 
    127129                                           0, \ 
    128                                            '%i Hz' % self.update_top_frequency, \ 
     130                                           '1.0 seconds', \ 
    129131                                           rotation='vertical', \ 
    130132                                           verticalalignment='center') 
     
    148150                        self.axes_bottom.text(self.update_bottom_frequency + 12, \ 
    149151                                           0, \ 
    150                                            '%i Hz' % self.update_bottom_frequency, \ 
     152                                           '0.5 seconds', \ 
    151153                                           rotation='vertical', \ 
    152154                                           verticalalignment='center') 
     
    156158                        self.values_bottom = [] 
    157159 
     160 
     161##################################################################### 
     162##################################################################### 
     163 
     164class chartEEGMatplotlibCanvas(matplotlibCanvas): 
     165         
     166        def __init__(self,  *args, **kwargs): 
     167                 
     168                matplotlibCanvas.__init__(self, *args, **kwargs) 
     169                 
     170                self.DEBUG=DEBUG 
     171                 
     172                self.update_top_frequency = 1 
     173                self.update_bottom_frequency = 1 
     174                 
     175                #self.axis_eeg_ybound = 65535 
     176                 
     177                self.graph_length = 30 
     178                 
     179                self.values_eeg_bands = {} 
     180                 
     181                for key in configuration.THINKGEAR_EEG_POWER_BAND_ORDER: 
     182                        self.values_eeg_bands[key] = [] 
     183                        for x in range(self.graph_length): 
     184                                self.values_eeg_bands[key].append(0) 
     185                 
     186                self.values_esense = {'attention': [], \ 
     187                                      'meditation': []} 
     188                for key in self.values_esense.keys(): 
     189                        for x in range(self.graph_length): 
     190                                self.values_esense[key].append(0) 
     191                 
     192                #self.axes_top.set_xbound(0, self.update_top_frequency) 
     193                self.axes_top.set_xbound(0, self.graph_length) 
     194                #self.axes_top.set_ybound(0, self.axis_eeg_ybound) 
     195                 
     196                #self.axes_bottom.set_xbound(0, self.update_bottom_frequency) 
     197                self.axes_bottom.set_xbound(0, self.graph_length) 
     198                self.axes_bottom.set_ybound(0, 100) 
     199                 
     200                self.axes_top.grid(True) 
     201                self.axes_bottom.grid(True) 
     202                 
     203                self.axes_top.text(self.graph_length + 24, \ 
     204                                   0, \ 
     205                                   'EEG Brain Signals', \ 
     206                                   rotation='vertical', \ 
     207                                   verticalalignment='center') 
     208                 
     209                self.axes_bottom.text(self.graph_length + 12, \ 
     210                                   0, \ 
     211                                   'eSense Values', \ 
     212                                   rotation='vertical', \ 
     213                                   verticalalignment='center') 
     214                 
     215                self.axes_top.set_autoscale_on(False) 
     216                self.axes_bottom.set_autoscale_on(False) 
     217         
     218         
     219        ################################################################## 
     220         
     221        def update_values(self, index, values): 
     222                 
     223                if (index == 'eegPower'): 
     224                         
     225                        #for key in values.keys(): 
     226                                #if values[key] > self.axis_eeg_ybound: 
     227                                        #self.axis_eeg_ybound = values[key] 
     228                                        #self.axes_top.set_ybound(0, self.axis_eeg_ybound) 
     229                         
     230                        for key in values.keys(): 
     231                                self.values_eeg_bands[key].append(values[key]) 
     232                                self.values_eeg_bands[key] = \ 
     233                                        self.values_eeg_bands[key][1:]           
     234                 
     235                 
     236                elif (index == 'eSense'): 
     237                         
     238                        for key in values.keys(): 
     239                                 
     240                                self.values_esense[key].append(values[key]) 
     241                                self.values_esense[key] = \ 
     242                                        self.values_esense[key][1:] 
     243         
     244         
     245        ################################################################## 
     246         
     247        def update_figure(self, index, values): 
     248                 
     249                if (index == 'eegPower'): 
     250                         
     251                        #for key in values.keys(): 
     252                                #if values[key] > self.axis_eeg_ybound: 
     253                                        #self.axis_eeg_ybound = values[key] 
     254                                        #self.axes_top.set_ybound(0, self.axis_eeg_ybound) 
     255                                 
     256                        #for key in values.keys(): 
     257                                 
     258                                #self.values_eeg_bands[key].append(values[key]) 
     259                                #self.values_eeg_bands[key] = \ 
     260                                        #self.values_eeg_bands[key][1:] 
     261                                 
     262                                #self.axes_top.plot(range(self.graph_length), \ 
     263                                                                        #self.values_eeg_bands[key], \ 
     264                                                                        #configuration.INTERFACE_CHART_STYLES[key], \ 
     265                                                                        #scalex=False, \ 
     266                                                                        #scaley=True) 
     267                         
     268                        self.axes_top.plot(range(self.graph_length), \ 
     269                                           #self.values_eeg_bands['delta'], \ 
     270                                           #configuration.INTERFACE_CHART_STYLES['delta'], \ 
     271                                           #self.values_eeg_bands['theta'], \ 
     272                                           #configuration.INTERFACE_CHART_STYLES['theta'], \ 
     273                                           self.values_eeg_bands['lowAlpha'], \ 
     274                                           configuration.INTERFACE_CHART_STYLES['lowAlpha'], \ 
     275                                           self.values_eeg_bands['highAlpha'], \ 
     276                                           configuration.INTERFACE_CHART_STYLES['highAlpha'], \ 
     277                                           self.values_eeg_bands['lowBeta'], \ 
     278                                           configuration.INTERFACE_CHART_STYLES['lowBeta'], \ 
     279                                           self.values_eeg_bands['highBeta'], \ 
     280                                           configuration.INTERFACE_CHART_STYLES['highBeta'], \ 
     281                                           #self.values_eeg_bands['lowGamma'], \ 
     282                                           #configuration.INTERFACE_CHART_STYLES['lowGamma'], \ 
     283                                           #self.values_eeg_bands['highGamma'], \ 
     284                                           #configuration.INTERFACE_CHART_STYLES['highGamma'], \ 
     285                                           scalex=False, \ 
     286                                           scaley=True) 
     287                         
     288                        self.axes_top.grid(True) 
     289                         
     290                        self.axes_top.text(self.graph_length + 24, \ 
     291                                           0, \ 
     292                                           'EEG Brain Signals', \ 
     293                                           rotation='vertical', \ 
     294                                           verticalalignment='center') 
     295                         
     296                        self.draw() 
     297                 
     298                 
     299                elif (index == 'eSense'): 
     300                         
     301                        #for key in values.keys(): 
     302                                 
     303                                #self.values_esense[key].append(values[key]) 
     304                                #self.values_esense[key] = \ 
     305                                        #self.values_esense[key][1:] 
     306                                 
     307                                #self.axes_bottom.plot(range(self.graph_length), \ 
     308                                                                        #self.values_esense[key], \ 
     309                                                                        #configuration.INTERFACE_CHART_STYLES[key], \ 
     310                                                                        #scalex=False, \ 
     311                                                                        #scaley=False) 
     312                                 
     313                        self.axes_bottom.plot(range(self.graph_length), \ 
     314                                              self.values_esense['attention'], \ 
     315                                              configuration.INTERFACE_CHART_STYLES['attention'], \ 
     316                                              self.values_esense['meditation'], \ 
     317                                              configuration.INTERFACE_CHART_STYLES['meditation'], \ 
     318                                              scalex=False, \ 
     319                                              scaley=False) 
     320                         
     321                         
     322                        self.axes_bottom.grid(True) 
     323                         
     324                        self.axes_bottom.text(self.graph_length + 12, \ 
     325                                              0, \ 
     326                                              'eSense Values', \ 
     327                                              rotation='vertical', \ 
     328                                              verticalalignment='center') 
     329                         
     330                        self.draw() 
     331 
  • trunk/synapse/interface/puzzlebox_synapse_interface_design.ui

    r167 r174  
    847847    </attribute> 
    848848   </widget> 
     849   <widget class="QWidget" name="tabCharts"> 
     850    <attribute name="title"> 
     851     <string>Charts</string> 
     852    </attribute> 
     853   </widget> 
    849854   <widget class="QWidget" name="tabDebugConsole"> 
    850855    <attribute name="title"> 
Note: See TracChangeset for help on using the changeset viewer.