Beispiel #1
0
    def initTrialSecs(self):
        secsSizer = wx.BoxSizer(orient=wx.HORIZONTAL)

        trialSecsControlBox = widgets.ControlBox(self,
                                                 label='Trial Secs',
                                                 orient=wx.VERTICAL)

        self.trialSecsFloatSpin = agwfs.FloatSpin(self,
                                                  min_val=0.25,
                                                  max_val=50.0,
                                                  increment=1 / 4.0,
                                                  value=self.pg.trialSecs)
        self.trialSecsFloatSpin.SetFormat("%f")
        self.trialSecsFloatSpin.SetDigits(3)
        self.Bind(agwfs.EVT_FLOATSPIN, self.setTrialSecs,
                  self.trialSecsFloatSpin)
        self.offlineControls += [self.trialSecsFloatSpin]
        trialSecsControlBox.Add(self.trialSecsFloatSpin,
                                proportion=1,
                                flag=wx.ALL | wx.EXPAND,
                                border=10)
        secsSizer.Add(trialSecsControlBox,
                      proportion=1,
                      flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                      border=10)

        itiSecsControlBox = widgets.ControlBox(self,
                                               label='Inter-Trial Secs',
                                               orient=wx.VERTICAL)
        self.itiFloatSpin = agwfs.FloatSpin(self,
                                            min_val=0.25,
                                            max_val=10.0,
                                            increment=1 / 4.0,
                                            value=self.pg.iti)
        self.itiFloatSpin.SetFormat("%f")
        self.itiFloatSpin.SetDigits(3)
        self.Bind(agwfs.EVT_FLOATSPIN, self.setITI, self.itiFloatSpin)
        self.offlineControls += [self.itiFloatSpin]
        itiSecsControlBox.Add(self.itiFloatSpin,
                              proportion=1,
                              flag=wx.ALL | wx.EXPAND,
                              border=10)
        secsSizer.Add(itiSecsControlBox,
                      proportion=1,
                      flag=wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                      border=10)

        self.sizer.Add(secsSizer, proportion=0, flag=wx.EXPAND)
Beispiel #2
0
    def initTiming(self):
        timingSizer = wx.BoxSizer(orient=wx.HORIZONTAL)

        widthControlBox = widgets.ControlBox(self,
                                             label='Train Width',
                                             orient=wx.VERTICAL)
        self.widthFloatSpin = agwfs.FloatSpin(self,
                                              min_val=0.5,
                                              max_val=60.0,
                                              increment=0.25,
                                              value=self.pg.width)
        self.widthFloatSpin.SetFormat('%f')
        self.widthFloatSpin.SetDigits(3)
        self.Bind(agwfs.EVT_FLOATSPIN, self.setWidth, self.widthFloatSpin)
        self.offlineControls += [self.widthFloatSpin]
        widthControlBox.Add(self.widthFloatSpin,
                            proportion=1,
                            flag=wx.ALL | wx.EXPAND,
                            border=10)
        timingSizer.Add(widthControlBox,
                        proportion=1,
                        flag=wx.ALL | wx.EXPAND,
                        border=10)

        retrainDelayControlBox = widgets.ControlBox(self,
                                                    label='Retrain Delay',
                                                    orient=wx.VERTICAL)
        self.retrainDelayFloatSpin = agwfs.FloatSpin(
            self,
            min_val=2.0,
            max_val=60.0,
            increment=0.25,
            value=self.pg.retrainDelay)
        self.retrainDelayFloatSpin.SetFormat('%f')
        self.retrainDelayFloatSpin.SetDigits(4)
        self.Bind(agwfs.EVT_FLOATSPIN, self.setRetrainDelay,
                  self.retrainDelayFloatSpin)
        self.offlineControls += [self.retrainDelayFloatSpin]
        retrainDelayControlBox.Add(self.retrainDelayFloatSpin,
                                   proportion=1,
                                   flag=wx.ALL | wx.EXPAND,
                                   border=10)
        timingSizer.Add(retrainDelayControlBox,
                        proportion=1,
                        flag=wx.BOTTOM | wx.RIGHT | wx.TOP | wx.EXPAND,
                        border=10)

        self.sizer.Add(timingSizer, proportion=0, flag=wx.EXPAND)
Beispiel #3
0
    def initSigControls(self):
        """Initialize signal controls.
        """
        sigSizer = wx.BoxSizer(orient=wx.VERTICAL)

        scaleControlBox = widgets.ControlBox(self,
                                             label='Noise',
                                             orient=wx.VERTICAL)

        self.scaleText = wx.StaticText(self,
                                       label='%4.1f' % self.src.scale.value)
        scaleTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        scaleTextSizer.Add(self.scaleText, proportion=1, flag=wx.EXPAND)
        self.scaleSlider = wx.Slider(self,
                                     style=wx.SL_VERTICAL,
                                     value=self.src.scale.value * 10.0,
                                     minValue=1,
                                     maxValue=100)
        self.Bind(wx.EVT_SLIDER, self.setScale, self.scaleSlider)

        scaleControlBox.Add(scaleTextSizer,
                            proportion=0,
                            flag=wx.ALL | wx.EXPAND,
                            border=10)
        scaleControlBox.Add(self.scaleSlider,
                            proportion=1,
                            flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                            border=10)

        sigSizer.Add(scaleControlBox,
                     proportion=1,
                     flag=wx.ALL | wx.EXPAND,
                     border=10)

        self.sizer.Add(sigSizer, proportion=1, flag=wx.EXPAND)
Beispiel #4
0
    def initOptions(self):
        optionsSizer = wx.BoxSizer(wx.HORIZONTAL)

        # sizes should only be odd, easiest way is to implement this as slider with odd values XXX - idfah

        sizeControlBox = widgets.ControlBox(self,
                                            label='Size',
                                            orient=wx.HORIZONTAL)
        self.sizeSpinCtrl = wx.SpinCtrl(self,
                                        value=str(self.flt.size),
                                        min=3,
                                        max=100)
        self.Bind(wx.EVT_SPINCTRL, self.setSize, self.sizeSpinCtrl)
        sizeControlBox.Add(self.sizeSpinCtrl,
                           proportion=1,
                           flag=wx.ALL,
                           border=8)
        optionsSizer.Add(sizeControlBox,
                         proportion=0,
                         flag=wx.TOP | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
                         border=8)

        # need to add slider for noise parameter XXX - idfah

        self.sizer.Add(optionsSizer, proportion=0)  #, flag=wx.EXPAND)
Beispiel #5
0
    def initControls(self):
        # slider for controlling the length of the spans in Welch's method
        # since sliders are int, we use divide by 4 to get float value
        spanControlBox = widgets.ControlBox(self,
                                            label='Span',
                                            orient=wx.HORIZONTAL)
        self.spanText = wx.StaticText(self,
                                      label='%4.2f(s)' %
                                      self.pg.welchConfig.span)
        spanTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        spanTextSizer.Add(self.spanText,
                          proportion=1,
                          flag=wx.LEFT | wx.RIGHT | wx.EXPAND,
                          border=8)
        self.spanSlider = wx.Slider(self,
                                    style=wx.SL_HORIZONTAL,
                                    value=int(self.pg.welchConfig.span * 4),
                                    minValue=1,
                                    maxValue=12)
        spanControlBox.Add(spanTextSizer, proportion=0, flag=wx.TOP, border=10)
        spanControlBox.Add(self.spanSlider,
                           proportion=1,
                           flag=wx.ALL | wx.EXPAND,
                           border=10)
        self.Bind(wx.EVT_SLIDER, self.setSpan, self.spanSlider)

        self.sizer.Add(spanControlBox,
                       proportion=0,
                       flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                       border=10)
Beispiel #6
0
    def initFileControls(self):
        fileSizer = wx.BoxSizer(orient=wx.VERTICAL)

        fileControlBox = widgets.ControlBox(self,
                                            label='Data File',
                                            orient=wx.VERTICAL)

        self.fileTextCtrl = wx.TextCtrl(self,
                                        value=str('SAMPLE DATA'),
                                        style=wx.TE_READONLY)

        self.fileBrowseButton = wx.Button(self, label='Browse')

        fileControlBox.Add(self.fileTextCtrl,
                           proportion=1,
                           flag=wx.ALL | wx.EXPAND,
                           border=10)
        fileControlBox.Add(self.fileBrowseButton,
                           proportion=1,
                           flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                           border=10)

        fileSizer.Add(fileControlBox,
                      proportion=1,
                      flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                      border=10)

        self.sizer.Add(fileSizer, proportion=1, flag=wx.EXPAND)
Beispiel #7
0
    def initGain(self):
        gainSizer = wx.BoxSizer(orient=wx.VERTICAL)

        gainControlBox = widgets.ControlBox(self,
                                            label='Gain',
                                            orient=wx.HORIZONTAL)
        self.gainText = wx.StaticText(self, label='%0.2f' % self.pg.gain)
        gainTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        gainTextSizer.Add(self.gainText, proportion=1, flag=wx.EXPAND)
        self.gainSlider = wx.Slider(self,
                                    style=wx.SL_HORIZONTAL,
                                    value=int(self.pg.gain * 100.0),
                                    minValue=1,
                                    maxValue=100)
        self.Bind(wx.EVT_SLIDER, self.setGain, self.gainSlider)
        gainControlBox.Add(gainTextSizer,
                           proportion=0,
                           flag=wx.ALL | wx.EXPAND,
                           border=10)
        gainControlBox.Add(self.gainSlider,
                           proportion=1,
                           flag=wx.ALL | wx.EXPAND,
                           border=10)
        gainSizer.Add(gainControlBox,
                      flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                      border=10)

        self.sizer.Add(gainSizer, proportion=0, flag=wx.EXPAND)
Beispiel #8
0
    def initMediaPath(self):
        mediaPathControlBox = widgets.ControlBox(self,
                                                 label='Media Path',
                                                 orient=wx.HORIZONTAL)

        self.mediaPathTextCtrl = wx.TextCtrl(parent=self,
                                             style=wx.TE_PROCESS_ENTER)
        self.mediaPathTextCtrl.SetValue(self.pg.defaultMusicDir)
        mediaPathControlBox.Add(self.mediaPathTextCtrl,
                                proportion=1,
                                flag=wx.ALL | wx.EXPAND,
                                border=10)
        self.Bind(wx.EVT_TEXT_ENTER, self.setMediaPath, self.mediaPathTextCtrl)
        self.offlineControls += [self.mediaPathTextCtrl]

        self.mediaBrowseButton = wx.Button(self, label='Browse')
        mediaPathControlBox.Add(self.mediaBrowseButton,
                                proportion=0,
                                flag=wx.TOP | wx.RIGHT | wx.BOTTOM,
                                border=10)
        self.Bind(wx.EVT_BUTTON, self.mediaBrowse, self.mediaBrowseButton)
        self.offlineControls += [self.mediaBrowseButton]

        self.sizer.Add(mediaPathControlBox,
                       proportion=0,
                       flag=wx.ALL | wx.EXPAND,
                       border=10)
Beispiel #9
0
    def initIntervals(self):
        intervalSizer = wx.BoxSizer(orient=wx.HORIZONTAL)

        siControlBox = widgets.ControlBox(self,
                                          label='Stim Secs',
                                          orient=wx.VERTICAL)

        self.siFloatSpin = agwfs.FloatSpin(self,
                                           min_val=0.025,
                                           max_val=0.5,
                                           increment=1 / 40.0,
                                           value=self.pg.si)
        self.siFloatSpin.SetFormat("%f")
        self.siFloatSpin.SetDigits(3)
        self.Bind(agwfs.EVT_FLOATSPIN, self.setSI, self.siFloatSpin)
        self.offlineControls += [self.siFloatSpin]
        siControlBox.Add(self.siFloatSpin,
                         proportion=1,
                         flag=wx.ALL | wx.EXPAND,
                         border=10)
        intervalSizer.Add(siControlBox,
                          proportion=1,
                          flag=wx.RIGHT | wx.BOTTOM | wx.LEFT | wx.EXPAND,
                          border=10)

        isiControlBox = widgets.ControlBox(self,
                                           label='Inter-Stim Secs',
                                           orient=wx.VERTICAL)
        self.isiFloatSpin = agwfs.FloatSpin(self,
                                            min_val=0.05,
                                            max_val=1.0,
                                            increment=1 / 20.0,
                                            value=self.pg.isi)
        self.isiFloatSpin.SetFormat("%f")
        self.isiFloatSpin.SetDigits(3)
        self.Bind(agwfs.EVT_FLOATSPIN, self.setISI, self.isiFloatSpin)
        self.offlineControls += [self.isiFloatSpin]
        isiControlBox.Add(self.isiFloatSpin,
                          proportion=1,
                          flag=wx.ALL | wx.EXPAND,
                          border=10)
        intervalSizer.Add(isiControlBox,
                          proportion=1,
                          flag=wx.RIGHT | wx.BOTTOM | wx.EXPAND,
                          border=10)

        self.sizer.Add(intervalSizer, proportion=0, flag=wx.EXPAND)
Beispiel #10
0
    def initLattice(self):
        latticeSizer = wx.BoxSizer(orient=wx.HORIZONTAL)

        latticeSizeXControlBox = widgets.ControlBox(self,
                                                    label='Lattice Size X',
                                                    orient=wx.VERTICAL)
        self.latticeSizeXSpinCtrl = wx.SpinCtrl(
            self,  #style=wx.SP_WRAP,
            value=str(self.pg.latticeSize[0]),
            min=1,
            max=512)
        self.Bind(wx.EVT_SPINCTRL, self.setLatticeSizeX,
                  self.latticeSizeXSpinCtrl)
        self.offlineControls += [self.latticeSizeXSpinCtrl]
        latticeSizeXControlBox.Add(self.latticeSizeXSpinCtrl,
                                   proportion=1,
                                   flag=wx.ALL | wx.EXPAND,
                                   border=10)
        latticeSizer.Add(latticeSizeXControlBox,
                         proportion=1,
                         flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                         border=10)

        latticeSizeYControlBox = widgets.ControlBox(self,
                                                    label='Lattice Size Y',
                                                    orient=wx.VERTICAL)
        self.latticeSizeYSpinCtrl = wx.SpinCtrl(
            self,  #style=wx.SP_WRAP,
            value=str(self.pg.latticeSize[0]),
            min=1,
            max=512)
        self.Bind(wx.EVT_SPINCTRL, self.setLatticeSizeY,
                  self.latticeSizeYSpinCtrl)
        self.offlineControls += [self.latticeSizeYSpinCtrl]
        latticeSizeYControlBox.Add(self.latticeSizeYSpinCtrl,
                                   proportion=1,
                                   flag=wx.ALL | wx.EXPAND,
                                   border=10)
        latticeSizer.Add(latticeSizeYControlBox,
                         proportion=1,
                         flag=wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                         border=10)

        self.sizer.Add(latticeSizer, proportion=0, flag=wx.EXPAND)
Beispiel #11
0
    def initNTrial(self):
        trialSizer = wx.BoxSizer(orient=wx.HORIZONTAL)

        trainTrialControlBox = widgets.ControlBox(self,
                                                  label='Train Trials',
                                                  orient=wx.VERTICAL)
        self.trainTrialSpinCtrl = wx.SpinCtrl(
            self,  #style=wx.SP_WRAP,
            value=str(self.pg.nTrainTrial),
            min=2,
            max=100)
        self.Bind(wx.EVT_SPINCTRL, self.setNTrainTrial,
                  self.trainTrialSpinCtrl)
        self.offlineControls += [self.trainTrialSpinCtrl]
        trainTrialControlBox.Add(self.trainTrialSpinCtrl,
                                 proportion=1,
                                 flag=wx.ALL | wx.EXPAND,
                                 border=10)
        trialSizer.Add(trainTrialControlBox,
                       proportion=1,
                       flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                       border=10)

        testTrialControlBox = widgets.ControlBox(self,
                                                 label='Test Trials',
                                                 orient=wx.VERTICAL)
        self.testTrialSpinCtrl = wx.SpinCtrl(
            self,  #style=wx.SP_WRAP,
            value=str(self.pg.nTestTrial),
            min=1,
            max=100)
        self.Bind(wx.EVT_SPINCTRL, self.setNTestTrial, self.testTrialSpinCtrl)
        self.offlineControls += [self.testTrialSpinCtrl]
        testTrialControlBox.Add(self.testTrialSpinCtrl,
                                proportion=1,
                                flag=wx.ALL | wx.EXPAND,
                                border=10)
        trialSizer.Add(testTrialControlBox,
                       proportion=1,
                       flag=wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                       border=10)

        self.sizer.Add(trialSizer, proportion=0, flag=wx.EXPAND)
Beispiel #12
0
    def initOptions(self):
        STransConfigPanel.initOptions(self)

        optionsSizer = wx.BoxSizer(wx.HORIZONTAL)

        kurtosisControlBox = widgets.ControlBox(self,
                                                label='Kurtosis',
                                                orient=wx.VERTICAL)
        self.kurtosisComboBox = wx.ComboBox(self,
                                            choices=('Adapt', 'Sub', 'Super'),
                                            value=self.flt.kurtosis,
                                            style=wx.CB_DROPDOWN)
        self.Bind(wx.EVT_COMBOBOX, self.setKurtosis, self.kurtosisComboBox)
        kurtosisControlBox.Add(self.kurtosisComboBox,
                               proportion=1,
                               flag=wx.ALL,
                               border=8)
        optionsSizer.Add(kurtosisControlBox,
                         proportion=1,
                         flag=wx.LEFT | wx.RIGHT,
                         border=8)

        maxIterControlBox = widgets.ControlBox(self,
                                               label='Max Iter.',
                                               orient=wx.HORIZONTAL)
        self.maxIterSpinCtrl = wx.SpinCtrl(self,
                                           value=str(self.flt.maxIter),
                                           min=50,
                                           max=3500)
        self.Bind(wx.EVT_SPINCTRL, self.setMaxIter, self.maxIterSpinCtrl)
        maxIterControlBox.Add(self.maxIterSpinCtrl,
                              proportion=1,
                              flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
                              border=8)
        optionsSizer.Add(maxIterControlBox,
                         proportion=0,
                         flag=wx.RIGHT | wx.EXPAND,
                         border=8)

        #lrControlBox = widgets.ControlBox(self, label='Learning Rate.', orient=wx.HORIZONTAL)

        self.sizer.Add(optionsSizer, proportion=0)
Beispiel #13
0
    def initChannelConfig(self):
        """Initialize the channel configuration area.
        """
        # controlbox to surround the area
        chanControlBox = widgets.ControlBox(self.scrolledPanel,
                                            label='Channels',
                                            orient=wx.HORIZONTAL)

        # only supports two columns, this could probably be done better XXX - idfah
        ## # left column
        ## leftChanSizer = wx.BoxSizer(orient=wx.VERTICAL)

        ## # create text controls
        ## self.chanTextCtrls = []
        ## for c in range(16):
        ##     curChanTextCtrl = wx.TextCtrl(self.scrolledPanel)
        ##     self.chanTextCtrls.append(curChanTextCtrl)
        ##     leftChanSizer.Add(curChanTextCtrl, proportion=0,
        ##         flag=wx.RIGHT | wx.TOP | wx.LEFT, border=10)

        ## # add to sizer
        ## chanControlBox.Add(leftChanSizer)

        ## # right column
        ## rightChanSizer = wx.BoxSizer(orient=wx.VERTICAL)

        ## # create text controls
        ## for c in range(16):
        ##     curChanTextCtrl = wx.TextCtrl(self.scrolledPanel)
        ##     self.chanTextCtrls.append(curChanTextCtrl)
        ##     rightChanSizer.Add(curChanTextCtrl, proportion=0,
        ##         flag=wx.RIGHT | wx.TOP | wx.LEFT, border=10)

        ## # add to sizer
        ## chanControlBox.Add(rightChanSizer)

        self.chanSizer = wx.GridSizer(40, 2, 10, 10)
        #self.chanSizer = wx.BoxSizer(orient=wx.VERTICAL)

        self.chanTextCtrls = [
            wx.TextCtrl(self.scrolledPanel) for i in range(40 * 2)
        ]
        self.chanSizer.AddMany(self.chanTextCtrls)
        #for ctc in self.chanTextCtrls:
        #    self.chanSizer.Add(ctc, proportion=0, flag=wx.TOP | wx.LEFT | wx.RIGHT, border=2)

        chanControlBox.Add(self.chanSizer, flag=wx.ALL, border=10)

        # sizer for channel configuration area
        self.chanSizer = wx.BoxSizer(orient=wx.VERTICAL)
        self.chanSizer.Add(chanControlBox,
                           proportion=1,
                           flag=wx.TOP | wx.BOTTOM,
                           border=10)
Beispiel #14
0
    def initClassifierKind(self):
        classifierControlBox = widgets.ControlBox(self, label='Classifier', orient=wx.VERTICAL)
        self.classifierKindComboBox = wx.ComboBox(self, value=self.pg.classifierKind,
                style=wx.CB_READONLY, choices=self.pg.classifierChoices)
        self.Bind(wx.EVT_COMBOBOX, self.setClassifier, self.classifierKindComboBox)
        self.offlineControls += [self.classifierKindComboBox]
        classifierControlBox.Add(self.classifierKindComboBox, proportion=0,
                flag=wx.ALL | wx.EXPAND, border=10)

        self.sizer.Add(classifierControlBox, proportion=0,
                flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND, border=10)
Beispiel #15
0
    def initResponse(self):
        self.freqResponseFig = plt.Figure()
        self.freqResponseCanvas = FigureCanvas(parent=self,
                id=wx.ID_ANY, figure=self.freqResponseFig)
        self.freqResponseAx = self.freqResponseFig.add_subplot(1,1,1)
        #self.freqResponseFig.tight_layout()

        self.phaseResponseFig = plt.Figure()
        self.phaseResponseCanvas = FigureCanvas(parent=self,
                id=wx.ID_ANY, figure=self.phaseResponseFig)
        self.phaseResponseAx = self.phaseResponseFig.add_subplot(1,1,1)
        #self.freqResponseFig.tight_layout()

        responseSizer = wx.BoxSizer(wx.VERTICAL)

        freqResponseControlBox = widgets.ControlBox(self,
                label='Frequency Response', orient=wx.VERTICAL)
        freqResponseControlBox.Add(self.freqResponseCanvas, proportion=1,
                flag=wx.ALL | wx.EXPAND, border=8)
        responseSizer.Add(freqResponseControlBox, proportion=1,
                flag=wx.TOP | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=10)

        phaseResponseControlBox = widgets.ControlBox(self,
                label='Phase Response', orient=wx.VERTICAL)
        phaseResponseControlBox.Add(self.phaseResponseCanvas, proportion=1,
                flag=wx.ALL | wx.EXPAND, border=8)
        responseSizer.Add(phaseResponseControlBox, proportion=1,
                flag=wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=10)

        self.bottomSizer.Add(responseSizer, proportion=1, flag=wx.EXPAND)

        self.freqResponseCanvas.SetMinSize((0,0))
        self.phaseResponseCanvas.SetMinSize((0,0))

        # could we prevent resize when panel is not visible? XXX - idfah
        self.freqResponseLastSize = (0,0)
        self.freqResponseCanvas.Bind(wx.EVT_SIZE, self.freqResponseResize)
        self.phaseResponseLastSize = (0,0)
        self.phaseResponseCanvas.Bind(wx.EVT_SIZE, self.phaseResponseResize)

        self.updateResponse()
Beispiel #16
0
    def initOptions(self):
        optionsSizer = wx.BoxSizer(wx.HORIZONTAL)

        kernTypeControlBox = widgets.ControlBox(self,
                                                label='Kernel Type',
                                                orient=wx.HORIZONTAL)
        self.kernTypeComboBox = wx.ComboBox(self,
                                            choices=list(
                                                self.flt.kernMap.keys()),
                                            value=self.flt.kernType,
                                            style=wx.CB_DROPDOWN)
        self.Bind(wx.EVT_COMBOBOX, self.setKernType, self.kernTypeComboBox)
        kernTypeControlBox.Add(self.kernTypeComboBox,
                               proportion=1,
                               flag=wx.ALL,
                               border=8)
        optionsSizer.Add(kernTypeControlBox,
                         proportion=1,
                         flag=wx.ALL | wx.ALIGN_CENTER,
                         border=8)

        widthControlBox = widgets.ControlBox(self,
                                             label='Width',
                                             orient=wx.HORIZONTAL)
        self.widthSpinCtrl = wx.SpinCtrl(self,
                                         value=str(self.flt.width),
                                         min=2,
                                         max=100)
        self.Bind(wx.EVT_SPINCTRL, self.setWidth, self.widthSpinCtrl)
        widthControlBox.Add(self.widthSpinCtrl,
                            proportion=1,
                            flag=wx.ALL,
                            border=8)
        optionsSizer.Add(widthControlBox,
                         proportion=0,
                         flag=wx.TOP | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
                         border=8)

        self.sizer.Add(optionsSizer, proportion=0)  #, flag=wx.EXPAND)
Beispiel #17
0
    def initTriggerControls(self):
        """Initialize trigger controls.
        """
        triggerSizer = wx.BoxSizer(orient=wx.VERTICAL)

        triggerControlBox = widgets.ControlBox(self,
                                               label='Manual Trigger',
                                               orient=wx.VERTICAL)

        self.trigger0Button = wx.Button(self, label='Class 0')
        self.Bind(wx.EVT_BUTTON, self.trigger0, self.trigger0Button)
        triggerControlBox.Add(self.trigger0Button,
                              proportion=1,
                              flag=wx.ALL | wx.EXPAND,
                              border=10)

        self.trigger1Button = wx.Button(self, label='Class 1')
        self.Bind(wx.EVT_BUTTON, self.trigger1, self.trigger1Button)
        triggerControlBox.Add(self.trigger1Button,
                              proportion=1,
                              flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                              border=10)

        self.trigger2Button = wx.Button(self, label='Class 2')
        self.Bind(wx.EVT_BUTTON, self.trigger2, self.trigger2Button)
        triggerControlBox.Add(self.trigger2Button,
                              proportion=1,
                              flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                              border=10)

        self.trigger3Button = wx.Button(self, label='Class 3')
        self.Bind(wx.EVT_BUTTON, self.trigger3, self.trigger3Button)
        triggerControlBox.Add(self.trigger3Button,
                              proportion=1,
                              flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                              border=10)

        self.trigger4Button = wx.Button(self, label='Class 4')
        self.Bind(wx.EVT_BUTTON, self.trigger4, self.trigger4Button)
        triggerControlBox.Add(self.trigger4Button,
                              proportion=1,
                              flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                              border=10)

        triggerSizer.Add(triggerControlBox,
                         proportion=0,
                         flag=wx.ALL | wx.EXPAND,
                         border=10)

        self.sizer.Add(triggerSizer)
Beispiel #18
0
    def initMethod(self):
        methodControlBox = widgets.ControlBox(self,
                                              label='Method',
                                              orient=wx.VERTICAL)
        self.methodComboBox = wx.ComboBox(
            self,
            value=self.pg.method,
            style=wx.CB_READONLY,
            choices=('Welch Power', 'Autoregressive', 'Time Embedded Net',
                     'Convolutional Net'))
        self.Bind(wx.EVT_COMBOBOX, self.setMethod, self.methodComboBox)
        self.offlineControls += [self.methodComboBox]
        methodControlBox.Add(self.methodComboBox,
                             proportion=0,
                             flag=wx.ALL | wx.EXPAND,
                             border=10)

        self.sizer.Add(methodControlBox,
                       proportion=0,
                       flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                       border=10)

        self.methodConfigSizer = wx.BoxSizer(orient=wx.VERTICAL)

        self.welchPanel = WelchConfigPanel(self, pg=self.pg, cp=self)
        self.methodConfigSizer.Add(self.welchPanel,
                                   proportion=1,
                                   flag=wx.EXPAND)

        self.autoregPanel = AutoregConfigPanel(self, pg=self.pg, cp=self)
        self.methodConfigSizer.Add(self.autoregPanel,
                                   proportion=1,
                                   flag=wx.EXPAND)

        self.tdeNetPanel = ConvNetConfigPanel(self, pg=self.pg, cp=self)
        self.methodConfigSizer.Add(self.tdeNetPanel,
                                   proportion=1,
                                   flag=wx.EXPAND)

        self.convNetPanel = ConvNetConfigPanel(self, pg=self.pg, cp=self)
        self.methodConfigSizer.Add(self.convNetPanel,
                                   proportion=1,
                                   flag=wx.EXPAND)

        self.sizer.Add(self.methodConfigSizer, proportion=1, flag=wx.EXPAND)

        self.methodConfig = self.welchPanel
Beispiel #19
0
    def initDeviceControls(self):
        deviceControlBox = widgets.ControlBox(self,
                                              label='Device Path',
                                              orient=wx.HORIZONTAL)

        self.deviceTextCtrl = wx.TextCtrl(self, value=self.src.getDeviceName())
        self.Bind(wx.EVT_TEXT, self.setDeviceName, self.deviceTextCtrl)

        deviceControlBox.Add(self.deviceTextCtrl,
                             proportion=1,
                             flag=wx.ALL | wx.EXPAND,
                             border=10)

        self.sizer.Add(deviceControlBox,
                       proportion=0,
                       flag=wx.ALL | wx.EXPAND,
                       border=10)
Beispiel #20
0
    def initPollSizeSelector(self):
        pollSizeControlBox = widgets.ControlBox(self,
                                                label='Poll Size',
                                                orient=wx.HORIZONTAL)
        self.pollSizeSpinCtrl = wx.SpinCtrl(self,
                                            style=wx.SP_WRAP,
                                            value=str(self.src.pollSize),
                                            min=1,
                                            max=32)
        pollSizeControlBox.Add(self.pollSizeSpinCtrl,
                               flag=wx.ALL | wx.EXPAND,
                               border=10)
        self.Bind(wx.EVT_SPINCTRL, self.setPollSize, self.pollSizeSpinCtrl)

        self.sizer.Add(pollSizeControlBox,
                       proportion=0,
                       flag=wx.ALL,
                       border=10)
Beispiel #21
0
    def initChoices(self):
        choiceControlBox = widgets.ControlBox(self,
                                              label='Choices',
                                              orient=wx.VERTICAL)

        self.choiceTextCtrl = wx.TextCtrl(parent=self,
                                          value=', '.join(self.pg.choices),
                                          style=wx.TE_PROCESS_ENTER)
        choiceControlBox.Add(self.choiceTextCtrl,
                             proportion=1,
                             flag=wx.ALL | wx.EXPAND,
                             border=10)
        self.choiceTextCtrl.Bind(wx.EVT_KILL_FOCUS, self.setChoices,
                                 self.choiceTextCtrl)
        self.offlineControls += [self.choiceTextCtrl]

        self.sizer.Add(choiceControlBox,
                       proportion=0,
                       flag=wx.ALL | wx.EXPAND,
                       border=10)
Beispiel #22
0
    def initChoices(self):
        choiceControlBox = widgets.ControlBox(self,
                                              label='Choices',
                                              orient=wx.VERTICAL)

        choiceGridSizer = wx.GridSizer(1, 2, 10, 10)

        self.leftChoiceTextCtrl = wx.TextCtrl(parent=self,
                                              value=self.pg.choices[0],
                                              style=wx.TE_PROCESS_ENTER)
        self.Bind(wx.EVT_TEXT_ENTER, self.setChoices, self.leftChoiceTextCtrl)
        self.leftChoiceTextCtrl.Bind(wx.EVT_KILL_FOCUS, self.setChoices,
                                     self.leftChoiceTextCtrl)
        self.offlineControls += [self.leftChoiceTextCtrl]
        choiceGridSizer.Add(self.leftChoiceTextCtrl,
                            proportion=0,
                            flag=wx.ALL | wx.EXPAND,
                            border=10)

        self.rightChoiceTextCtrl = wx.TextCtrl(parent=self,
                                               value=self.pg.choices[1],
                                               style=wx.TE_PROCESS_ENTER)
        self.Bind(wx.EVT_TEXT_ENTER, self.setChoices, self.rightChoiceTextCtrl)
        self.rightChoiceTextCtrl.Bind(wx.EVT_KILL_FOCUS, self.setChoices,
                                      self.rightChoiceTextCtrl)
        self.offlineControls += [self.rightChoiceTextCtrl]
        choiceGridSizer.Add(self.rightChoiceTextCtrl,
                            proportion=0,
                            flag=wx.ALL | wx.EXPAND,
                            border=10)

        choiceControlBox.Add(choiceGridSizer,
                             proportion=1,
                             flag=wx.ALL | wx.EXPAND,
                             border=0)

        self.sizer.Add(choiceControlBox,
                       proportion=0,
                       flag=wx.ALL | wx.EXPAND,
                       border=10)
Beispiel #23
0
    def initRateControls(self):
        """Initialize the sample rate and poll size controls.
        """
        rateSizer = wx.BoxSizer(orient=wx.VERTICAL)

        pollSizeControlBox = widgets.ControlBox(self,
                                                label='Poll Size',
                                                orient=wx.HORIZONTAL)
        self.pollSizeSpinCtrl = wx.SpinCtrl(self,
                                            style=wx.SP_WRAP,
                                            value=str(self.src.pollSize),
                                            min=1,
                                            max=32)
        pollSizeControlBox.Add(self.pollSizeSpinCtrl,
                               flag=wx.ALL | wx.EXPAND,
                               border=10)
        self.Bind(wx.EVT_SPINCTRL, self.setPollSize, self.pollSizeSpinCtrl)

        rateSizer.Add(pollSizeControlBox,
                      proportion=0,
                      flag=wx.BOTTOM | wx.RIGHT | wx.TOP,
                      border=10)

        self.sizer.Add(rateSizer)
Beispiel #24
0
    def initControls(self):
        orderControlBox = widgets.ControlBox(self,
                                             label='Model Order',
                                             orient=wx.HORIZONTAL)
        self.orderText = wx.StaticText(self,
                                       label='%3d' %
                                       self.pg.autoregConfig.order)
        orderTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        orderTextSizer.Add(self.orderText,
                           proportion=1,
                           flag=wx.LEFT | wx.RIGHT | wx.EXPAND,
                           border=8)
        self.orderSlider = wx.Slider(self,
                                     style=wx.SL_HORIZONTAL,
                                     value=self.pg.autoregConfig.order,
                                     minValue=1,
                                     maxValue=100)
        orderControlBox.Add(orderTextSizer,
                            proportion=0,
                            flag=wx.TOP,
                            border=10)
        orderControlBox.Add(self.orderSlider,
                            proportion=1,
                            flag=wx.ALL | wx.EXPAND,
                            border=10)
        self.Bind(wx.EVT_SLIDER, self.setOrder, self.orderSlider)

        self.sizer.Add(orderControlBox,
                       proportion=0,
                       flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                       border=10)

        nFreqControlBox = widgets.ControlBox(self,
                                             label='Num Freqs',
                                             orient=wx.HORIZONTAL)
        self.nFreqText = wx.StaticText(self,
                                       label='%3d' %
                                       self.pg.autoregConfig.nFreq)
        nFreqTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        nFreqTextSizer.Add(self.nFreqText,
                           proportion=1,
                           flag=wx.LEFT | wx.RIGHT | wx.EXPAND,
                           border=8)
        self.nFreqSlider = wx.Slider(self,
                                     style=wx.SL_HORIZONTAL,
                                     value=self.pg.autoregConfig.nFreq / 5,
                                     minValue=1,
                                     maxValue=100)
        nFreqControlBox.Add(nFreqTextSizer,
                            proportion=0,
                            flag=wx.TOP,
                            border=10)
        nFreqControlBox.Add(self.nFreqSlider,
                            proportion=1,
                            flag=wx.ALL | wx.EXPAND,
                            border=10)
        self.Bind(wx.EVT_SLIDER, self.setNFreq, self.nFreqSlider)

        self.sizer.Add(nFreqControlBox,
                       proportion=0,
                       flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                       border=10)
Beispiel #25
0
    def initControls(self):
        # combobox for selecting filtered or non-filtered signal
        self.filterControlBox = widgets.ControlBox(self,
                                                   label='Signal',
                                                   orient=wx.VERTICAL)
        self.filterComboBox = wx.ComboBox(self,
                                          choices=('Raw', 'Filtered'),
                                          value='Filtered',
                                          style=wx.CB_READONLY)
        self.filterControlBox.Add(self.filterComboBox,
                                  proportion=0,
                                  flag=wx.ALL | wx.EXPAND,
                                  border=10)
        self.Bind(wx.EVT_COMBOBOX, self.setFilter, self.filterComboBox)

        # slider for controlling width of window
        # since sliders are int, we use divide by 4 to get float value
        self.widthControlBox = widgets.ControlBox(self,
                                                  label='Width',
                                                  orient=wx.HORIZONTAL)
        self.widthText = wx.StaticText(self, label='%5.2f(s)' % self.pg.width)
        widthTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        widthTextSizer.Add(self.widthText, proportion=1, flag=wx.EXPAND)
        self.widthSlider = wx.Slider(self,
                                     style=wx.SL_HORIZONTAL,
                                     value=int(self.pg.width * 4.0),
                                     minValue=12,
                                     maxValue=120)
        self.widthControlBox.Add(widthTextSizer,
                                 proportion=0,
                                 flag=wx.ALL | wx.EXPAND,
                                 border=10)
        self.widthControlBox.Add(self.widthSlider,
                                 proportion=1,
                                 flag=wx.ALL | wx.EXPAND,
                                 border=10)
        self.Bind(wx.EVT_SLIDER, self.setWidth, self.widthSlider)

        # radio buttons for selection decimation factor
        self.decimateControlBox = widgets.ControlBox(self,
                                                     label='Decimation',
                                                     orient=wx.HORIZONTAL)

        # list of buttons, first button determines group
        rbtns = [wx.RadioButton(self, label='None', style=wx.RB_GROUP)] + \
                [wx.RadioButton(self, label=l) for l in ('1/2', '1/4', '1/8')]
        rbtns[0].SetValue(True)  # select first button to start

        # bind callbacks to each radio button with appropriate factors
        for rbtn, factor in zip(rbtns, (1, 2, 4, 8)):
            # Uses lexical scoping to save ratio for each button.
            def setDecimationWrapper(event, factor=factor):
                self.setDecimation(factor=factor)

            self.Bind(wx.EVT_RADIOBUTTON, setDecimationWrapper, rbtn)

        for rbtn in rbtns[:-1]:
            self.decimateControlBox.Add(rbtn,
                                        proportion=0,
                                        flag=wx.TOP | wx.LEFT | wx.BOTTOM,
                                        border=10)
        self.decimateControlBox.Add(rbtns[-1],
                                    proportion=0,
                                    flag=wx.ALL,
                                    border=10)

        # radio buttons for selecting plot quality
        self.qualityControlBox = widgets.ControlBox(self,
                                                    label='Plot Quality',
                                                    orient=wx.HORIZONTAL)

        # low quality radio button
        # first button determines group using wx.RB_GROUP
        lowQualityRbtn = wx.RadioButton(self, label='Low', style=wx.RB_GROUP)
        self.Bind(wx.EVT_RADIOBUTTON, self.setLowQuality, lowQualityRbtn)
        self.qualityControlBox.Add(lowQualityRbtn,
                                   proportion=0,
                                   flag=wx.ALL,
                                   border=10)

        # medium quality radio button
        mediumQualityRbtn = wx.RadioButton(self, label='Medium')
        mediumQualityRbtn.SetValue(True)
        self.Bind(wx.EVT_RADIOBUTTON, self.setMediumQuality, mediumQualityRbtn)
        self.qualityControlBox.Add(mediumQualityRbtn,
                                   proportion=0,
                                   flag=wx.ALL,
                                   border=10)

        # high quality radio button
        highQualityRbtn = wx.RadioButton(self, label='High')
        self.Bind(wx.EVT_RADIOBUTTON, self.setHighQuality, highQualityRbtn)
        self.qualityControlBox.Add(highQualityRbtn,
                                   proportion=0,
                                   flag=wx.ALL,
                                   border=10)

        # slider for selecting delay between consecutive refreshes of the plot
        self.refreshControlBox = widgets.ControlBox(self,
                                                    label='Refresh',
                                                    orient=wx.HORIZONTAL)
        self.refreshText = wx.StaticText(self,
                                         label='%4d(ms)' %
                                         int(self.pg.getRefreshDelay()),
                                         style=wx.ALIGN_CENTER)
        refreshTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        refreshTextSizer.Add(self.refreshText,
                             proportion=1,
                             flag=wx.LEFT | wx.RIGHT | wx.EXPAND,
                             border=8)
        self.refreshSlider = wx.Slider(self,
                                       style=wx.SL_HORIZONTAL,
                                       value=int(self.pg.getRefreshDelay() /
                                                 10),
                                       minValue=1,
                                       maxValue=200)
        self.refreshControlBox.Add(refreshTextSizer,
                                   proportion=0,
                                   flag=wx.TOP,
                                   border=10)
        self.refreshControlBox.Add(self.refreshSlider,
                                   proportion=1,
                                   flag=wx.ALL | wx.EXPAND,
                                   border=10)
        self.Bind(wx.EVT_SLIDER, self.setRefresh, self.refreshSlider)

        # combobox for selecting PSD estimation method
        self.methodControlBox = widgets.ControlBox(self,
                                                   label='Method',
                                                   orient=wx.VERTICAL)
        self.methodComboBox = wx.ComboBox(self,
                                          choices=('FFT+Welch', 'AR Model'),
                                          value='FFT+Welch',
                                          style=wx.CB_READONLY)
        self.methodControlBox.Add(self.methodComboBox,
                                  proportion=0,
                                  flag=wx.ALL | wx.EXPAND,
                                  border=10)
        self.Bind(wx.EVT_COMBOBOX, self.setMethod, self.methodComboBox)

        self.methodConfigSizer = wx.BoxSizer(orient=wx.VERTICAL)

        self.welchPanel = WelchConfigPanel(self, pg=self.pg)
        self.methodConfigSizer.Add(self.welchPanel,
                                   proportion=1,
                                   flag=wx.EXPAND)

        self.autoregPanel = AutoregConfigPanel(self, pg=self.pg)
        self.methodConfigSizer.Add(self.autoregPanel,
                                   proportion=1,
                                   flag=wx.EXPAND)

        self.methodConfigPanel = self.welchPanel
Beispiel #26
0
    def initSigControls(self):
        """Initialize signal controls.
        """
        sigSizer = wx.BoxSizer(orient=wx.VERTICAL)

        scaleControlBox = widgets.ControlBox(self,
                                             label='Noise Scale',
                                             orient=wx.HORIZONTAL)

        self.scaleText = wx.StaticText(self,
                                       label='%4.1f' % self.src.scale.value)
        scaleTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        scaleTextSizer.Add(self.scaleText, proportion=1, flag=wx.EXPAND)
        self.scaleSlider = wx.Slider(self,
                                     style=wx.SL_HORIZONTAL,
                                     value=self.src.scale.value * 10.0,
                                     minValue=1,
                                     maxValue=300)
        self.Bind(wx.EVT_SLIDER, self.setScale, self.scaleSlider)

        scaleControlBox.Add(scaleTextSizer,
                            proportion=0,
                            flag=wx.ALL,
                            border=10)
        scaleControlBox.Add(self.scaleSlider,
                            proportion=1,
                            flag=wx.ALL | wx.EXPAND,
                            border=10)

        sigSizer.Add(scaleControlBox,
                     proportion=0,
                     flag=wx.ALL | wx.EXPAND,
                     border=10)

        erpSpeedControlBox = widgets.ControlBox(self,
                                                label='ERP Speed',
                                                orient=wx.HORIZONTAL)

        self.erpSpeedText = wx.StaticText(self,
                                          label='%4.1f' %
                                          self.src.erpSpeed.value)
        erpSpeedTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        erpSpeedTextSizer.Add(self.erpSpeedText, proportion=1, flag=wx.EXPAND)
        self.erpSpeedSlider = wx.Slider(self,
                                        style=wx.SL_HORIZONTAL,
                                        value=self.src.erpSpeed.value * 10.0,
                                        minValue=1,
                                        maxValue=300)
        self.Bind(wx.EVT_SLIDER, self.setERPSpeed, self.erpSpeedSlider)

        erpSpeedControlBox.Add(erpSpeedTextSizer,
                               proportion=0,
                               flag=wx.ALL,
                               border=10)
        erpSpeedControlBox.Add(self.erpSpeedSlider,
                               proportion=1,
                               flag=wx.ALL | wx.EXPAND,
                               border=10)

        sigSizer.Add(erpSpeedControlBox,
                     proportion=0,
                     flag=wx.EXPAND | wx.LEFT | wx.BOTTOM | wx.RIGHT,
                     border=10)

        triggerControlBox = widgets.ControlBox(self,
                                               label='Trigger',
                                               orient=wx.HORIZONTAL)

        self.triggerValueTextCtrl = wx.TextCtrl(
            self,
            value=str(self.src.trigger.value))  #, style=wx.TE_PROCESS_ENTER)
        self.Bind(wx.EVT_TEXT, self.setTrigger, self.triggerValueTextCtrl)

        self.triggerButton = wx.Button(self, label='Manual')
        self.Bind(wx.EVT_BUTTON, self.manualTrigger, self.triggerButton)

        triggerControlBox.Add(self.triggerValueTextCtrl,
                              proportion=1,
                              flag=wx.ALL | wx.EXPAND,
                              border=10)
        triggerControlBox.Add(self.triggerButton,
                              proportion=1,
                              flag=wx.TOP | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
                              border=10)

        sigSizer.Add(triggerControlBox,
                     proportion=0,
                     flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                     border=10)

        self.sizer.Add(sigSizer)
Beispiel #27
0
    def initBottombar(self):
        """Initialize controls at bottom of panel.
        """
        # sizer for bottom of configPanel
        self.bottombar = wx.BoxSizer(orient=wx.HORIZONTAL)

        # slider for controlling width of trace
        # since sliders are int, we use divide by 4 to get float value
        widthControlBox = widgets.ControlBox(self,
                                             label='Width',
                                             orient=wx.VERTICAL)
        self.widthText = wx.StaticText(self, label='%6.2f(s)' % self.pg.width)
        widthTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        widthTextSizer.Add(self.widthText,
                           proportion=0,
                           flag=wx.ALIGN_CENTER_HORIZONTAL)
        self.widthSlider = wx.Slider(self,
                                     style=wx.SL_VERTICAL,
                                     value=int(self.pg.width * 4.0),
                                     minValue=1,
                                     maxValue=240)
        widthControlBox.Add(widthTextSizer,
                            proportion=0,
                            flag=wx.TOP | wx.BOTTOM | wx.EXPAND,
                            border=8)
        widthControlBox.Add(self.widthSlider,
                            proportion=1,
                            flag=wx.LEFT | wx.RIGHT | wx.EXPAND,
                            border=25)
        self.Bind(wx.EVT_SLIDER, self.setWidth, self.widthSlider)

        # add widthControlBox to bottombar sizer
        self.bottombar.Add(widthControlBox,
                           proportion=1,
                           flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                           border=10)

        # slider for controlling scale of trace
        # since sliders are int, we use divide by 4 to get float value
        # zero results in automagic scaling
        scaleControlBox = widgets.ControlBox(self,
                                             label='Scale',
                                             orient=wx.VERTICAL)
        self.scaleText = wx.StaticText(self, label='auto       ')
        scaleTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        scaleTextSizer.Add(self.scaleText,
                           proportion=0,
                           flag=wx.ALIGN_CENTER_HORIZONTAL)
        self.scaleSlider = wx.Slider(self,
                                     style=wx.SL_VERTICAL,
                                     value=self.pg.scale,
                                     minValue=0,
                                     maxValue=5000)
        scaleControlBox.Add(scaleTextSizer,
                            proportion=0,
                            flag=wx.TOP | wx.BOTTOM | wx.EXPAND,
                            border=8)
        scaleControlBox.Add(self.scaleSlider,
                            proportion=1,
                            flag=wx.LEFT | wx.RIGHT | wx.EXPAND,
                            border=25)
        self.Bind(wx.EVT_SLIDER, self.setScale, self.scaleSlider)

        # add scaleControlBox to bottombar sizer
        self.bottombar.Add(scaleControlBox,
                           proportion=1,
                           flag=wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                           border=10)

        # slider for selecting delay between consecutive refreshes of the trace
        refreshControlBox = widgets.ControlBox(self,
                                               label='Refresh',
                                               orient=wx.VERTICAL)
        self.refreshText = wx.StaticText(self,
                                         label='%3d(ms)' %
                                         int(self.pg.getRefreshDelay()))
        refreshTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        refreshTextSizer.Add(self.refreshText,
                             proportion=0,
                             flag=wx.ALIGN_CENTER_HORIZONTAL)
        self.refreshSlider = wx.Slider(self,
                                       style=wx.SL_VERTICAL,
                                       value=int(self.pg.getRefreshDelay() /
                                                 10),
                                       minValue=1,
                                       maxValue=200)
        refreshControlBox.Add(refreshTextSizer,
                              proportion=0,
                              flag=wx.TOP | wx.BOTTOM | wx.EXPAND,
                              border=8)
        refreshControlBox.Add(self.refreshSlider,
                              proportion=1,
                              flag=wx.LEFT | wx.RIGHT | wx.EXPAND,
                              border=25)
        self.Bind(wx.EVT_SLIDER, self.setRefresh, self.refreshSlider)

        # add refreshControlBox to bottombar sizer
        self.bottombar.Add(refreshControlBox,
                           proportion=1,
                           flag=wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                           border=10)

        # make sure sliders don't collapse vertically all the way when undocked
        minX, minY = self.bottombar.GetMinSize()
        minY *= 3
        self.bottombar.SetMinSize((minX, minY))

        self.sizer.Add(self.bottombar, proportion=1, flag=wx.EXPAND)
Beispiel #28
0
    def initTopbar(self):
        """Initialize controls at top of panel.
        """
        # sizer for top of config panel
        self.topbar = wx.BoxSizer(orient=wx.VERTICAL)

        # combobox for selecting filtered or non-filtered signal
        filterControlBox = widgets.ControlBox(self,
                                              label='Signal',
                                              orient=wx.VERTICAL)
        self.filterComboBox = wx.ComboBox(self,
                                          choices=('Raw', 'Filtered'),
                                          value='FIltered',
                                          style=wx.CB_READONLY)
        self.Bind(wx.EVT_COMBOBOX, self.setFilter, self.filterComboBox)
        filterControlBox.Add(self.filterComboBox,
                             proportion=0,
                             flag=wx.ALL | wx.EXPAND,
                             border=10)

        # add filterControlBox to topbar sizer
        self.topbar.Add(filterControlBox,
                        proportion=0,
                        flag=wx.ALL | wx.EXPAND,
                        border=10)

        # radio buttons for turning marker channel on and off
        markerControlBox = widgets.ControlBox(self,
                                              label='Marker Channel',
                                              orient=wx.HORIZONTAL)

        markerOnRbtn = wx.RadioButton(self, label='On', style=wx.RB_GROUP)
        self.Bind(wx.EVT_RADIOBUTTON, self.setMarkerOn, markerOnRbtn)
        markerControlBox.Add(markerOnRbtn,
                             proportion=0,
                             flag=wx.ALL,
                             border=10)

        markerOffRbtn = wx.RadioButton(self, label='Off')
        markerOffRbtn.SetValue(True)
        self.Bind(wx.EVT_RADIOBUTTON, self.setMarkerOff, markerOffRbtn)
        markerControlBox.Add(markerOffRbtn,
                             proportion=0,
                             flag=wx.ALL,
                             border=10)

        # add markerControlBox to topbar sizer
        self.topbar.Add(markerControlBox,
                        proportion=0,
                        flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                        border=10)

        # radio buttons for selecting plot quality
        qualityControlBox = widgets.ControlBox(self,
                                               label='Plot Quality',
                                               orient=wx.HORIZONTAL)

        # low quality radio button
        # first button determines group using wx.RB_GROUP
        lowQualityRbtn = wx.RadioButton(self, label='Low', style=wx.RB_GROUP)
        self.Bind(wx.EVT_RADIOBUTTON, self.setLowQuality, lowQualityRbtn)
        qualityControlBox.Add(lowQualityRbtn,
                              proportion=0,
                              flag=wx.ALL,
                              border=10)

        # medium quality radio button
        mediumQualityRbtn = wx.RadioButton(self, label='Medium')
        mediumQualityRbtn.SetValue(True)
        self.Bind(wx.EVT_RADIOBUTTON, self.setMediumQuality, mediumQualityRbtn)
        qualityControlBox.Add(mediumQualityRbtn,
                              proportion=0,
                              flag=wx.ALL,
                              border=10)

        # high quality radio button
        highQualityRbtn = wx.RadioButton(self, label='High')
        self.Bind(wx.EVT_RADIOBUTTON, self.setHighQuality, highQualityRbtn)
        qualityControlBox.Add(highQualityRbtn,
                              proportion=0,
                              flag=wx.ALL,
                              border=10)

        # add qualityControlBox to topbar sizer
        self.topbar.Add(qualityControlBox,
                        proportion=0,
                        flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                        border=10)

        # radio buttons for selection decimation factor
        decimateControlBox = widgets.ControlBox(self,
                                                label='Decimation',
                                                orient=wx.HORIZONTAL)

        # list of buttons, first button determines group
        rbtns = [wx.RadioButton(self, label='None', style=wx.RB_GROUP)] + \
                [wx.RadioButton(self, label=l) for l in ('1/2', '1/4', '1/8')]
        rbtns[0].SetValue(True)  # select first button to start

        # bind callbacks to each radio button with appropriate factors
        for rbtn, factor in zip(rbtns, (1, 2, 4, 8)):
            # Uses lexical scoping to save ratio for each button.
            def setDecimationWrapper(event, factor=factor):
                self.setDecimation(factor=factor)

            self.Bind(wx.EVT_RADIOBUTTON, setDecimationWrapper, rbtn)
            #decimateControlBox.Add(rbtn, proportion=0, flag=wx.ALL, border=10)

        for rbtn in rbtns[:-1]:
            decimateControlBox.Add(rbtn,
                                   proportion=0,
                                   flag=wx.TOP | wx.LEFT | wx.BOTTOM,
                                   border=10)
        decimateControlBox.Add(rbtns[-1], proportion=0, flag=wx.ALL, border=10)

        # add decimateControlBox to topbar sizer
        self.topbar.Add(decimateControlBox,
                        proportion=0,
                        flag=wx.LEFT | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
                        border=10)

        self.sizer.Add(self.topbar, proportion=0, flag=wx.EXPAND)
Beispiel #29
0
    def initControls(self):
        # combobox for selecting filtered or non-filtered signal
        self.filterControlBox = widgets.ControlBox(self,
                                                   label='Signal',
                                                   orient=wx.VERTICAL)
        self.filterComboBox = wx.ComboBox(self,
                                          choices=('Raw', 'Filtered'),
                                          value='Filtered',
                                          style=wx.CB_READONLY)
        self.filterControlBox.Add(self.filterComboBox,
                                  proportion=0,
                                  flag=wx.ALL | wx.EXPAND,
                                  border=10)
        self.Bind(wx.EVT_COMBOBOX, self.setFilter, self.filterComboBox)

        # combobox for selecting the displayed channel
        self.chanControlBox = widgets.ControlBox(self,
                                                 label='Channel',
                                                 orient=wx.VERTICAL)
        self.chanComboBox = wx.ComboBox(self,
                                        choices=[''],
                                        value='',
                                        style=wx.CB_READONLY)
        self.updateChannels()
        self.chanControlBox.Add(self.chanComboBox,
                                proportion=0,
                                flag=wx.ALL | wx.EXPAND,
                                border=10)
        self.Bind(wx.EVT_COMBOBOX, self.setChannel, self.chanComboBox)

        # slider for controlling width of window
        # since sliders are int, we use divide by 4 to get float value
        self.widthControlBox = widgets.ControlBox(self,
                                                  label='Width',
                                                  orient=wx.HORIZONTAL)
        self.widthText = wx.StaticText(self, label='%5.2f(s)' % self.pg.width)
        widthTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        widthTextSizer.Add(self.widthText, proportion=1, flag=wx.EXPAND)
        self.widthSlider = wx.Slider(self,
                                     style=wx.SL_HORIZONTAL,
                                     value=int(self.pg.width * 4.0),
                                     minValue=12,
                                     maxValue=120)
        self.widthControlBox.Add(widthTextSizer,
                                 proportion=0,
                                 flag=wx.ALL | wx.EXPAND,
                                 border=10)
        self.widthControlBox.Add(self.widthSlider,
                                 proportion=1,
                                 flag=wx.ALL | wx.EXPAND,
                                 border=10)
        self.Bind(wx.EVT_SLIDER, self.setWidth, self.widthSlider)

        # scaleControlBox contains slider and radio buttons
        self.scaleControlBox = widgets.ControlBox(self,
                                                  label='Scale',
                                                  orient=wx.VERTICAL)

        # slider for adjusting the scale of power density in the plot
        scaleSliderSizer = wx.BoxSizer(orient=wx.HORIZONTAL)
        self.scaleText = wx.StaticText(self,
                                       label='10^%4.2f' % int(self.pg.scale),
                                       style=wx.ALIGN_CENTER)
        scaleTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        scaleTextSizer.Add(self.scaleText,
                           proportion=1,
                           flag=wx.LEFT | wx.RIGHT | wx.EXPAND,
                           border=8)
        self.scaleSlider = wx.Slider(self,
                                     style=wx.SL_HORIZONTAL,
                                     value=int(self.pg.scale * 4),
                                     minValue=-16,
                                     maxValue=40)
        scaleSliderSizer.Add(scaleTextSizer,
                             proportion=0,
                             flag=wx.TOP,
                             border=8)
        scaleSliderSizer.Add(self.scaleSlider,
                             proportion=1,
                             flag=wx.ALL | wx.EXPAND,
                             border=8)
        self.Bind(wx.EVT_SLIDER, self.setScale, self.scaleSlider)
        self.scaleControlBox.Add(scaleSliderSizer,
                                 proportion=1,
                                 flag=wx.ALL | wx.EXPAND)

        # radio buttons for selecting log or linear scale
        scaleRBtnSizer = wx.BoxSizer(orient=wx.HORIZONTAL)
        linScaleRbtn = wx.RadioButton(self, label='Linear', style=wx.RB_GROUP)
        self.Bind(wx.EVT_RADIOBUTTON, self.setLinScale, linScaleRbtn)
        scaleRBtnSizer.Add(linScaleRbtn,
                           proportion=0,
                           flag=wx.LEFT | wx.BOTTOM | wx.RIGHT,
                           border=8)

        logScaleRbtn = wx.RadioButton(self, label='Log10')
        logScaleRbtn.SetValue(True)
        self.Bind(wx.EVT_RADIOBUTTON, self.setLogScale, logScaleRbtn)
        scaleRBtnSizer.Add(logScaleRbtn,
                           proportion=0,
                           flag=wx.LEFT | wx.BOTTOM | wx.RIGHT,
                           border=8)

        self.scaleControlBox.Add(scaleRBtnSizer,
                                 proportion=0,
                                 flag=wx.ALL | wx.ALIGN_CENTER_HORIZONTAL)

        # radio buttons for selection decimation factor
        self.decimateControlBox = widgets.ControlBox(self,
                                                     label='Decimation',
                                                     orient=wx.HORIZONTAL)

        # list of buttons, first button determines group
        rbtns = [wx.RadioButton(self, label='None', style=wx.RB_GROUP)] + \
                [wx.RadioButton(self, label=l) for l in ('1/2', '1/4', '1/8')]
        rbtns[0].SetValue(True)  # select first button to start

        # bind callbacks to each radio button with appropriate factors
        for rbtn, factor in zip(rbtns, (1, 2, 4, 8)):
            # Uses lexical scoping to save ratio for each button.
            def setDecimationWrapper(event, factor=factor):
                self.setDecimation(factor=factor)

            self.Bind(wx.EVT_RADIOBUTTON, setDecimationWrapper, rbtn)

        for rbtn in rbtns[:-1]:
            self.decimateControlBox.Add(rbtn,
                                        proportion=0,
                                        flag=wx.TOP | wx.LEFT | wx.BOTTOM,
                                        border=10)
        self.decimateControlBox.Add(rbtns[-1],
                                    proportion=0,
                                    flag=wx.ALL,
                                    border=10)

        # radio buttons for selecting plot interpolation
        self.interpControlBox = widgets.ControlBox(self,
                                                   label='Interpolation',
                                                   orient=wx.HORIZONTAL)

        # no interpolation radio button
        # first button determines group using wx.RB_GROUP
        noInterpRbtn = wx.RadioButton(self, label='None', style=wx.RB_GROUP)
        noInterpRbtn.SetValue(True)
        self.Bind(wx.EVT_RADIOBUTTON, self.setNoInterp, noInterpRbtn)
        self.interpControlBox.Add(noInterpRbtn,
                                  proportion=0,
                                  flag=wx.TOP | wx.LEFT | wx.BOTTOM,
                                  border=10)

        # bicubic interpolation radio button
        nearInterpRbtn = wx.RadioButton(self, label='Bicubic')
        self.Bind(wx.EVT_RADIOBUTTON, self.setBicubicInterp, nearInterpRbtn)
        self.interpControlBox.Add(nearInterpRbtn,
                                  proportion=0,
                                  flag=wx.TOP | wx.LEFT | wx.BOTTOM,
                                  border=10)

        # lanczos interpolation radio button
        lanczosInterpRbtn = wx.RadioButton(self, label='Lanczos')
        self.Bind(wx.EVT_RADIOBUTTON, self.setLanczosInterp, lanczosInterpRbtn)
        self.interpControlBox.Add(lanczosInterpRbtn,
                                  proportion=0,
                                  flag=wx.ALL,
                                  border=10)

        # slider for selecting delay between consecutive refreshes of the plot
        self.refreshControlBox = widgets.ControlBox(self,
                                                    label='Refresh',
                                                    orient=wx.HORIZONTAL)
        self.refreshText = wx.StaticText(self,
                                         label='%4d(ms)' %
                                         int(self.pg.getRefreshDelay()),
                                         style=wx.ALIGN_CENTER)
        refreshTextSizer = wx.BoxSizer(orient=wx.VERTICAL)
        refreshTextSizer.Add(self.refreshText,
                             proportion=1,
                             flag=wx.LEFT | wx.RIGHT | wx.EXPAND,
                             border=8)
        self.refreshSlider = wx.Slider(self,
                                       style=wx.SL_HORIZONTAL,
                                       value=int(self.pg.getRefreshDelay() /
                                                 10),
                                       minValue=1,
                                       maxValue=200)
        self.refreshControlBox.Add(refreshTextSizer,
                                   proportion=0,
                                   flag=wx.TOP,
                                   border=10)
        self.refreshControlBox.Add(self.refreshSlider,
                                   proportion=1,
                                   flag=wx.ALL | wx.EXPAND,
                                   border=10)
        self.Bind(wx.EVT_SLIDER, self.setRefresh, self.refreshSlider)

        # combobox for selecting PSD estimation method
        self.methodControlBox = widgets.ControlBox(self,
                                                   label='Method',
                                                   orient=wx.VERTICAL)
        self.methodComboBox = wx.ComboBox(self,
                                          choices=('Wavelet', 'Fourier'),
                                          value='Wavelet',
                                          style=wx.CB_READONLY)
        self.methodControlBox.Add(self.methodComboBox,
                                  proportion=0,
                                  flag=wx.ALL | wx.EXPAND,
                                  border=10)
        self.Bind(wx.EVT_COMBOBOX, self.setMethod, self.methodComboBox)

        self.methodConfigSizer = wx.BoxSizer(orient=wx.VERTICAL)

        self.waveletPanel = WaveletConfigPanel(self, pg=self.pg)
        self.methodConfigSizer.Add(self.waveletPanel,
                                   proportion=1,
                                   flag=wx.EXPAND)

        self.fourierPanel = FourierConfigPanel(self, pg=self.pg)
        self.methodConfigSizer.Add(self.fourierPanel,
                                   proportion=1,
                                   flag=wx.EXPAND)

        self.methodConfigPanel = self.waveletPanel
Beispiel #30
0
    def initRateControls(self):
        # sample rate config
        rateSizer = wx.BoxSizer(orient=wx.HORIZONTAL)

        sampRates = np.array((64, 128, 256, 512, 1024))

        self.sampRateRadios = [wx.RadioButton(self, label=str(sampRates[0])+'Hz', style=wx.RB_GROUP)] +\
                              [wx.RadioButton(self, label=str(sr)+'Hz') for sr in sampRates[1:]]

        self.sampRateRadios[2].SetValue(True)

        sampRateControlBox = widgets.ControlBox(self,
                                                label='Sample Rate',
                                                orient=wx.VERTICAL)

        for sr, rbtn in zip(sampRates, self.sampRateRadios):

            def sampRadioWrapper(event, sr=sr):
                try:
                    self.src.setSampRate(sr)
                except Exception as e:
                    wx.LogError('Failed to set sample rate: ' + str(e.message))

            self.Bind(wx.EVT_RADIOBUTTON, sampRadioWrapper, id=rbtn.GetId())

        for rbtn in self.sampRateRadios[:-1]:
            sampRateControlBox.Add(rbtn,
                                   proportion=0,
                                   flag=wx.TOP | wx.LEFT | wx.RIGHT,
                                   border=10)
        sampRateControlBox.Add(self.sampRateRadios[-1],
                               proportion=0,
                               flag=wx.ALL,
                               border=10)

        rateSizer.Add(sampRateControlBox,
                      proportion=0,
                      flag=wx.LEFT | wx.BOTTOM | wx.RIGHT,
                      border=10)

        # block size config
        blockSizes = np.array((96, 192, 384, 768))

        self.blockSizeRadios = [wx.RadioButton(self, label=str(blockSizes[0])+'KB', style=wx.RB_GROUP)] +\
                               [wx.RadioButton(self, label=str(bs)+'KB') for bs in blockSizes[1:]]

        self.blockSizeRadios[3].SetValue(True)

        blockSizeControlBox = widgets.ControlBox(self,
                                                 label='Block Size',
                                                 orient=wx.VERTICAL)

        for bs, rbtn in zip(blockSizes, self.blockSizeRadios):

            def sampRadioWrapper(event, bs=bs):
                try:
                    self.src.setBlockSize(bs)
                except Exception as e:
                    wx.LogError('Failed to set block size: ' + str(e.message))

            self.Bind(wx.EVT_RADIOBUTTON, sampRadioWrapper, id=rbtn.GetId())

        for rbtn in self.blockSizeRadios[:-1]:
            blockSizeControlBox.Add(rbtn,
                                    proportion=0,
                                    flag=wx.TOP | wx.LEFT | wx.RIGHT,
                                    border=10)
        blockSizeControlBox.Add(self.blockSizeRadios[-1],
                                proportion=0,
                                flag=wx.ALL,
                                border=10)

        rateSizer.Add(blockSizeControlBox,
                      proportion=0,
                      flag=wx.BOTTOM | wx.RIGHT,
                      border=10)

        self.sizer.Add(rateSizer)