Exemplo n.º 1
0
    def acceptBatch(self):
        tfr_name = self.ui.lineEditTFRName.text()

        try:
            validate_name(tfr_name)
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        minfreq = self.ui.doubleSpinBoxMinFreq.value()
        maxfreq = self.ui.doubleSpinBoxMaxFreq.value()
        decim = self.ui.spinBoxDecim.value()
        interval = self.ui.doubleSpinBoxFreqInterval.value()
        freqs = np.arange(minfreq, maxfreq, interval)

        subtract_evoked = self.ui.checkBoxSubtractEvoked.isChecked()

        if self.ui.radioButtonFixed.isChecked():
            n_cycles = self.ui.doubleSpinBoxNcycles.value()
        elif self.ui.radioButtonAdapted.isChecked():
            n_cycles = freqs / self.ui.doubleSpinBoxCycleFactor.value()

        params = {}
        params['freqs'] = freqs
        params['decim'] = decim
        params['subtract_evoked'] = subtract_evoked
        params['n_cycles'] = n_cycles
        params['name'] = tfr_name
        params['conditions'] = self.epoch_names

        experiment = self.experiment

        selected_subject_names = self.batching_widget.selected_subjects
        for name, subject in self.experiment.subjects.items():
            if name in selected_subject_names:
                try:
                    self.handler(subject, params)
                    subject.release_memory()
                except Exception as exc:
                    self.batching_widget.failed_subjects.append(
                        (subject, str(exc)))
                    logging.getLogger('ui_logger').exception('')

        self.batching_widget.cleanup()

        try:
            experiment.save_experiment_settings()
        except Exception as exc:
            exc_messagebox(self.parent, exc)

        self.parent.initialize_ui()

        self.close()
Exemplo n.º 2
0
    def acceptBatch(self):
        """
        """

        tfr_name = self.ui.lineEditTFRName.text()

        try:
            validate_name(tfr_name)
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        minfreq = self.ui.doubleSpinBoxMinFreq.value()
        maxfreq = self.ui.doubleSpinBoxMaxFreq.value()
        decim = self.ui.spinBoxDecim.value()
        interval = self.ui.doubleSpinBoxFreqInterval.value()
        freqs = np.arange(minfreq, maxfreq, interval)

        subtract_evoked = self.ui.checkBoxSubtractEvoked.isChecked()

        if self.ui.radioButtonFixed.isChecked():
            n_cycles = self.ui.doubleSpinBoxNcycles.value()
        elif self.ui.radioButtonAdapted.isChecked():
            n_cycles = freqs / self.ui.doubleSpinBoxCycleFactor.value()

        experiment = self.experiment

        selected_subject_names = self.batching_widget.selected_subjects
        for name, subject in self.experiment.subjects.items():
            if name in selected_subject_names:
                try:
                    create_tfr(subject, tfr_name,
                               self.epoch_names, freqs=freqs,
                               decim=decim, n_cycles=n_cycles,
                               subtract_evoked=subtract_evoked,
                               do_meanwhile=self.parent.update_ui)
                    subject.release_memory()
                except Exception as exc:
                    self.batching_widget.failed_subjects.append(
                        (subject, str(exc)))
                    logging.getLogger('ui_logger').exception(str(exc))

        self.batching_widget.cleanup()
        experiment.save_experiment_settings()
        self.parent.initialize_ui()

        logging.getLogger('ui_logger').info('Finished')

        self.close()
Exemplo n.º 3
0
    def acceptBatch(self):

        experiment = self.experiment

        try:
            evoked_name = validate_name(self.ui.lineEditName.text())
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        selected_subject_names = self.batching_widget.selected_subjects

        params = {'name': evoked_name}

        for name, subject in self.experiment.subjects.items():
            if name in selected_subject_names:
                try:
                    self.handler(subject, params)
                    subject.release_memory()
                except Exception as exc:
                    self.batching_widget.failed_subjects.append(
                        (subject, str(exc)))
                    logging.getLogger('ui_logger').exception('')

        self.batching_widget.cleanup()

        try:
            self.experiment.save_experiment_settings()
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        self.parent.initialize_ui()
        self.close()
Exemplo n.º 4
0
    def accept(self, *args, **kwargs):
        try:
            spectrum_name = validate_name(self.ui.lineEditName.text())
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        intervals = self.intervals
        if not intervals:
            return

        fmin = self.ui.spinBoxFmin.value()
        fmax = self.ui.spinBoxFmax.value()

        subject = self.experiment.active_subject

        params = dict()
        params['fmin'] = fmin
        params['fmax'] = fmax
        params['nfft'] = self.ui.spinBoxNfft.value()
        params['overlap'] = self.ui.spinBoxOverlap.value()
        params['intervals'] = intervals
        params['name'] = spectrum_name

        try:
            self.handler(subject, params)
            self.experiment.save_experiment_settings()
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        self.parent.initialize_ui()
        self.close()
    def accept(self):
        """ Start item creation for current subject
        """
        subject = self.experiment.active_subject
        selected_spectrum = self.selected_spectrum

        params = {}
        try:
            params['name'] = validate_name(self.ui.lineEditName.text())
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        params['peak_width_low'] = self.ui.doubleSpinBoxPeakWidthLow.value()
        params['peak_width_high'] = self.ui.doubleSpinBoxPeakWidthHigh.value()
        params['peak_threshold'] = self.ui.doubleSpinBoxPeakThreshold.value()
        params['max_n_peaks'] = self.ui.spinBoxMaxNPeaks.value()
        params['aperiodic_mode'] = self.ui.comboBoxAperiodicMode.currentText()
        params['minfreq'] = self.ui.doubleSpinBoxFreqMin.value()
        params['maxfreq'] = self.ui.doubleSpinBoxFreqMax.value()

        try:
            self.handler(subject, params)
            self.experiment.save_experiment_settings()
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        # Update experiment file and the window
        self.parent.initialize_ui()

        self.close()
    def _collect_parameter_values(self):
        tmin = float(self.ui.doubleSpinBoxTmin.value())
        tmax = float(self.ui.doubleSpinBoxTmax.value())
        bstart = float(self.ui.doubleSpinBoxBaselineStart.value())
        bend = float(self.ui.doubleSpinBoxBaselineEnd.value())
        delay = float(self.ui.doubleSpinBoxDelay.value())

        mag = self.ui.checkBoxMag.isChecked()
        grad = self.ui.checkBoxGrad.isChecked()
        eeg = self.ui.checkBoxEeg.isChecked()

        collection_name = validate_name(
            str(self.ui.lineEditCollectionName.text()))

        reject = dict()
        if mag:
            reject['mag'] = self.ui.doubleSpinBoxMagReject.value()
        if grad:
            reject['grad'] = self.ui.doubleSpinBoxGradReject.value()
        if eeg:
            reject['eeg'] = self.ui.doubleSpinBoxEEGReject.value()

        params = {'mag': mag, 'grad': grad, 'eeg': eeg,
                  'reject': reject,
                  'tmin': tmin, 'tmax': tmax,
                  'bstart': bstart, 'bend': bend,
                  'delay': delay,
                  'collection_name': collection_name,
                  'events': self.events}
        return params
Exemplo n.º 7
0
    def accept(self):
        """
        """

        tfr_name = self.ui.lineEditTFRName.text()

        try:
            validate_name(tfr_name)
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        minfreq = self.ui.doubleSpinBoxMinFreq.value()
        maxfreq = self.ui.doubleSpinBoxMaxFreq.value()
        decim = self.ui.spinBoxDecim.value()
        interval = self.ui.doubleSpinBoxFreqInterval.value()
        freqs = np.arange(minfreq, maxfreq, interval)

        subtract_evoked = self.ui.checkBoxSubtractEvoked.isChecked()

        if self.ui.radioButtonFixed.isChecked():
            n_cycles = self.ui.doubleSpinBoxNcycles.value()
        elif self.ui.radioButtonAdapted.isChecked():
            n_cycles = freqs / self.ui.doubleSpinBoxCycleFactor.value()

        experiment = self.experiment
        subject = experiment.active_subject

        try:
            create_tfr(subject, tfr_name, self.epoch_names,
                       freqs=freqs, decim=decim, n_cycles=n_cycles,
                       subtract_evoked=subtract_evoked,
                       do_meanwhile=self.parent.update_ui)

        except Exception as exc:
            exc_messagebox(self.parent, exc)
            return

        experiment.save_experiment_settings()
        self.parent.initialize_ui()

        logging.getLogger('ui_logger').info('Finished.')

        self.close()
Exemplo n.º 8
0
    def accept(self):
        tfr_name = self.ui.lineEditTFRName.text()

        try:
            validate_name(tfr_name)
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        minfreq = self.ui.doubleSpinBoxMinFreq.value()
        maxfreq = self.ui.doubleSpinBoxMaxFreq.value()
        interval = self.ui.doubleSpinBoxFreqInterval.value()
        freqs = np.arange(minfreq, maxfreq, interval)

        decim = self.ui.spinBoxDecim.value()

        subtract_evoked = self.ui.checkBoxSubtractEvoked.isChecked()

        if self.ui.radioButtonFixed.isChecked():
            n_cycles = self.ui.doubleSpinBoxNcycles.value()
        elif self.ui.radioButtonAdapted.isChecked():
            n_cycles = freqs / self.ui.doubleSpinBoxCycleFactor.value()

        params = {}
        params['freqs'] = freqs
        params['decim'] = decim
        params['subtract_evoked'] = subtract_evoked
        params['n_cycles'] = n_cycles
        params['name'] = tfr_name
        params['conditions'] = self.epoch_names

        experiment = self.experiment
        subject = experiment.active_subject

        try:
            self.handler(subject, params)
            experiment.save_experiment_settings()
        except Exception as exc:
            exc_messagebox(self.parent, exc)
            return

        self.parent.initialize_ui()

        self.close()
Exemplo n.º 9
0
    def acceptBatch(self, *args):

        try:
            spectrum_name = validate_name(self.ui.lineEditName.text())
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        intervals = self.intervals
        if not intervals:
            return

        fmin = self.ui.spinBoxFmin.value()
        fmax = self.ui.spinBoxFmax.value()

        subject = self.experiment.active_subject

        params = dict()
        params['fmin'] = fmin
        params['fmax'] = fmax
        params['nfft'] = self.ui.spinBoxNfft.value()
        params['overlap'] = self.ui.spinBoxOverlap.value()

        update_ui = self.parent.update_ui

        selected_subject_names = self.batching_widget.selected_subjects
        for name, subject in self.experiment.subjects.items():
            if name in selected_subject_names:
                try:
                    create_power_spectrum(subject,
                                          spectrum_name,
                                          params,
                                          intervals,
                                          do_meanwhile=update_ui)
                    subject.release_memory()
                except Exception as exc:
                    self.batching_widget.failed_subjects.append(
                        (subject, str(exc)))
                    logging.getLogger('ui_logger').exception(str(exc))

        self.batching_widget.cleanup()
        self.experiment.save_experiment_settings()
        self.parent.initialize_ui()

        logging.getLogger('ui_logger').info('Finished.')

        self.close()
    def acceptBatch(self):
        """ Start item creation of all subjects selected in the batching widget
        """
        selected_spectrum = self.selected_spectrum
        experiment = self.experiment

        params = {}
        try:
            params['name'] = validate_name(self.ui.lineEditName.text())
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        params['peak_width_low'] = self.ui.doubleSpinBoxPeakWidthLow.value()
        params['peak_width_high'] = self.ui.doubleSpinBoxPeakWidthHigh.value()
        params['peak_threshold'] = self.ui.doubleSpinBoxPeakThreshold.value()
        params['max_n_peaks'] = self.ui.spinBoxMaxNPeaks.value()
        params['aperiodic_mode'] = self.ui.comboBoxAperiodicMode.currentText()
        params['minfreq'] = self.ui.doubleSpinBoxFreqMin.value()
        params['maxfreq'] = self.ui.doubleSpinBoxFreqMax.value()

        selected_subject_names = self.batching_widget.selected_subjects

        # Loop through every subject creating items and collecting info from
        # failed cases
        for name, subject in self.experiment.subjects.items():
            if name in selected_subject_names:
                try:
                    self.handler(subject, params)
                    subject.release_memory()
                except Exception as exc:
                    self.batching_widget.failed_subjects.append(
                        (subject, str(exc)))
                    logging.getLogger('ui_logger').exception(str(exc))

        # if any fails, tell user about them
        self.batching_widget.cleanup()

        # and update experiment file and the UI
        try:
            self.experiment.save_experiment_settings()
        except Exception as exc:
            exc_messagebox(self.parent, exc)

        self.parent.initialize_ui()

        self.close()
Exemplo n.º 11
0
    def accept(self, *args, **kwargs):
        """ Starts the computation.
        """

        try:
            spectrum_name = validate_name(self.ui.lineEditName.text())
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        intervals = self.intervals
        if not intervals:
            return

        fmin = self.ui.spinBoxFmin.value()
        fmax = self.ui.spinBoxFmax.value()

        subject = self.experiment.active_subject

        update_ui = self.parent.update_ui

        params = dict()
        params['fmin'] = fmin
        params['fmax'] = fmax
        params['nfft'] = self.ui.spinBoxNfft.value()
        params['overlap'] = self.ui.spinBoxOverlap.value()

        try:
            create_power_spectrum(subject,
                                  spectrum_name,
                                  params,
                                  intervals,
                                  do_meanwhile=update_ui)
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        self.experiment.save_experiment_settings()
        self.parent.initialize_ui()

        logging.getLogger('ui_logger').info('Finished.')

        self.close()
Exemplo n.º 12
0
    def accept(self):
        subject = self.experiment.active_subject

        try:
            evoked_name = validate_name(self.ui.lineEditName.text())
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        try:
            params = {'name': evoked_name}
            self.handler(subject, params)
            self.experiment.save_experiment_settings()
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        self.parent.initialize_ui()
        self.close()
Exemplo n.º 13
0
    def accept(self):
        groups = {}
        for idx, subject in enumerate(self.subjects):
            selected = getattr(self.ui,
                               'checkBoxGroup_' + str(idx)).checkState()
            if selected != QtCore.Qt.Checked:
                continue
            group_id = getattr(self.ui, 'spinBoxGroup_' + str(idx)).value()
            if group_id in groups:
                groups[group_id].append(subject)
            else:
                groups[group_id] = [subject]

        try:
            name = validate_name(self.ui.lineEditName.text())
        except Exception as exc:
            exc_messagebox(self, exc)
            return

        self.handler(name, groups)

        self.close()
Exemplo n.º 14
0
    def create_evoked(self, subject, selected_epochs):

        time_arrays = []
        for name in selected_epochs:
            epochs = subject.epochs.get(name)
            if epochs:
                time_arrays.append(epochs.content.times)

        assert_arrays_same(time_arrays)

        evokeds = {}
        for name in selected_epochs:
            try:
                epochs = subject.epochs[name]
            except KeyError:
                raise KeyError('No epoch collection called ' + str(name))

            mne_epochs = epochs.content

            @threaded
            def average():
                return mne_epochs.average()

            mne_evoked = average(do_meanwhile=self.parent.update_ui)

            mne_evoked.comment = name
            evokeds[name] = mne_evoked

        evoked_name = validate_name(self.ui.lineEditName.text())

        params = {'conditions': selected_epochs}

        evoked_directory = subject.evoked_directory
        evoked = Evoked(evoked_name, evoked_directory, params, content=evokeds)
        evoked.save_content()
        subject.add(evoked, 'evoked')
    def collect_parameter_values(self):
        """Collect the parameter values for epoch creation from the ui.
        """
        tmin = float(self.ui.doubleSpinBoxTmin.value())
        tmax = float(self.ui.doubleSpinBoxTmax.value())
        bstart = float(self.ui.doubleSpinBoxBaselineStart.value())
        bend = float(self.ui.doubleSpinBoxBaselineEnd.value())

        mag = self.ui.checkBoxMag.isChecked()
        grad = self.ui.checkBoxGrad.isChecked()
        eeg = self.ui.checkBoxEeg.isChecked()

        collection_name = validate_name(
            str(self.ui.lineEditCollectionName.text()))

        reject = dict()
        if mag:
            reject['mag'] = self.ui.doubleSpinBoxMagReject.value()
        if grad:
            reject['grad'] = self.ui.doubleSpinBoxGradReject.value()
        if eeg:
            reject['eeg'] = self.ui.doubleSpinBoxEEGReject.value()

        params = {
            'mag': mag,
            'grad': grad,
            'eeg': eeg,
            'reject': reject,
            'tmin': float(tmin),
            'tmax': float(tmax),
            'bstart': float(bstart),
            'bend': float(bend),
            'collection_name': collection_name,
            'events': self.events
        }
        return params
Exemplo n.º 16
0
 def author(self, author):
     """
     """
     self._author = validate_name(author, minlength=0, fieldname='author')
Exemplo n.º 17
0
 def name(self, name):
     """
     """
     self._name = validate_name(name, fieldname='name')
    def create_report(self, subject, selected_spectrum):
        """ Collect parameters from the dialog and creates an FOOOFReport item
        """

        report_name = validate_name(self.ui.lineEditName.text())

        spectrum = subject.spectrum.get(selected_spectrum)

        peak_width_low = self.ui.doubleSpinBoxPeakWidthLow.value()
        peak_width_high = self.ui.doubleSpinBoxPeakWidthHigh.value()
        peak_threshold = self.ui.doubleSpinBoxPeakThreshold.value()
        max_n_peaks = self.ui.spinBoxMaxNPeaks.value()
        aperiodic_mode = self.ui.comboBoxAperiodicMode.currentText()
        minfreq = self.ui.doubleSpinBoxFreqMin.value()
        maxfreq = self.ui.doubleSpinBoxFreqMax.value()

        peak_width_limits = [peak_width_low, peak_width_high]
        peak_threshold = peak_threshold
        max_n_peaks = max_n_peaks
        aperiodic_mode = aperiodic_mode
        freq_range = [minfreq, maxfreq]

        # As meggie spectrum items can contain data for multiple conditions,
        # reports are also created for all those conditions, and dict is used.
        report_content = {}

        for key, data in spectrum.content.items():

            fg = FOOOFGroup(peak_width_limits=peak_width_limits,
                            peak_threshold=peak_threshold,
                            max_n_peaks=max_n_peaks,
                            aperiodic_mode=aperiodic_mode,
                            verbose=False)

            @threaded
            def fit(**kwargs):
                """ Run fitting in a separate thread so that UI stays responsive
                """
                fg.fit(spectrum.freqs, data, freq_range)

            fit(do_meanwhile=self.parent.update_ui)

            logging.getLogger('ui_logger').info('FOOOF results for ' +
                                                subject.name + ', ' +
                                                'condition: ' + key)
            # Log the textual report
            logging.getLogger('ui_logger').info(
                gen_results_fg_str(fg, concise=True))

            report_content[key] = fg

        params = {
            'conditions': list(spectrum.content.keys()),
            'based_on': selected_spectrum,
            'ch_names': spectrum.ch_names,
        }

        fooof_directory = subject.fooof_report_directory

        # Create a container item that meggie understands,
        # and which holds the report data
        report = FOOOFReport(report_name, fooof_directory, params,
                             report_content)

        # save report data to fs
        report.save_content()

        # and add the report item to subject
        subject.add(report, 'fooof_report')