Пример #1
0
    def on_pick(ax, info_idx, names_idx):
        """ When a subplot representing a specific channel is clicked on the 
        main topography plot, show a new figure containing FOOOF fit plot
        for every condition """

        fig = ax.figure
        fig.delaxes(ax)

        for idx, (report_key, report) in enumerate(reports.items()):
            report_ax = fig.add_subplot(1, len(reports), idx + 1)
            fooof = report.get_fooof(names_idx)

            # Use plot function from fooof
            fooof.plot(
                ax=report_ax,
                plot_peaks='dot',
                add_legend=False,
            )
            # Add information about the fit to the axis title
            text = ("Condition: " + str(report_key) + "\n" + "R squred: " +
                    format_float(fooof.r_squared_) + "\n" + "Peaks: \n")
            for peak_params in fooof.peak_params_:
                text = text + '{0} ({1}, {2})\n'.format(
                    *format_floats(peak_params))

            report_ax.set_title(text)

        fig.tight_layout()
Пример #2
0
    def run(self):
        try:
            selected_name = self.data['outputs']['spectrum'][0]

            spectrum = self.experiment.active_subject.spectrum[selected_name]
            params = spectrum.params

            message = ""

            message += "Name: " + spectrum.name + "\n\n"

            if 'fmin' in params and 'fmax' in params:
                message += 'Frequencies: {0}Hz - {1}Hz\n'.format(
                    format_float(params['fmin']), format_float(params['fmax']))

            if 'nfft' in params:
                message += 'Window length (samples): {0}\n'.format(
                    params['nfft'])

            if 'overlap' in params:
                message += 'Overlap (samples): {0}\n'.format(params['overlap'])

            if 'intervals' in params:
                message += '\nIntervals: \n'
                for key, ivals in params['intervals'].items():
                    message += 'Condition ' + str(key) + ': '
                    message += ', '.join([
                        '({0}s - {1}s)'.format(format_float(ival[0]),
                                               format_float(ival[1]))
                        for ival in ivals
                    ])
                    message += '\n'

            if 'groups' in params:
                for key, names in params['groups'].items():
                    message += '\nGroup ' + str(key) + ': \n'
                    for name in names:
                        message += name + '\n'

        except Exception as exc:
            message = ""

        return message
Пример #3
0
def tfr_info(experiment, data, window):
    """ Fills info element
    """
    try:
        selected_name = data['outputs']['tfr'][0]

        tfr = experiment.active_subject.tfr[selected_name]
        params = tfr.params

        message = ""
        if 'decim' in params:
            message += 'Decimated by factor: {0}\n'.format(params['decim'])
        if 'evoked_subtracted' in params:
            message += 'Evoked subtracted: {0}\n'.format(
                params['evoked_subtracted'])
        if 'conditions' in params:
            message += 'Conditions: ' + ', '.join(params['conditions']) + '\n'
        if 'n_cycles' in params:
            message += 'Cycles: ' + ', '.join(format_floats(
                params['n_cycles'])) + '\n'

        if hasattr(tfr, 'times'):
            message += 'Times: {0}s - {1}s\n'.format(
                format_float(tfr.times[0]), format_float(tfr.times[-1]))

        if hasattr(tfr, 'freqs'):
            message += 'Freqs: {0} - {1}\n'.format(format_float(tfr.freqs[0]),
                                                   format_float(tfr.freqs[-1]))

        if 'groups' in params:
            for key, names in params['groups'].items():
                message += '\nGroup ' + str(key) + ': \n'
                for name in names:
                    message += name + '\n'

    except Exception as exc:
        message = ""

    return message
Пример #4
0
    def run(self):

        try:
            selected_name = self.data['outputs']['epochs'][0]

            epochs = self.experiment.active_subject.epochs[selected_name]
            params = epochs.params

            message = ""

            message += "Name: {0}\n\n".format(epochs.name)

            message += "Count: {0}\n".format(epochs.count)

            message += 'Baseline: {0}s - {1}s\n'.format(
                format_float(params['bstart']), format_float(params['bend']))
            message += 'Times: {0}s - {1}s\n'.format(
                format_float(params['tmin']), format_float(params['tmax']))

            message += '\nReject params: \n'
            if 'grad' in params:
                message += 'Gradiometers: {}\n'.format(
                    params.get('reject').get('grad'))
            if 'mag' in params:
                message += 'Magnetometers: {}\n'.format(
                    params.get('reject').get('mag'))
            if 'eeg' in params:
                message += 'EEG: {}\n'.format(params.get('reject').get('eeg'))

            if 'events' in params:
                message += '\nCreated from events: \n'
                for event in params.get('events'):
                    message += 'ID: {0}, mask: {1}\n'.format(
                        event['event_id'], event['mask'])

        except Exception as exc:
            message = ""

        return message
Пример #5
0
def save_all_channels(experiment, selected_name):
    """ Saves peak params and aperiodic params to a csv file for every 
    subject and channel and condition """
    row_descs = []
    csv_data = []

    column_names = ['CF', 'Amp', 'BW', 
                    'Aperiodic offset', 'Aperiodic exponent']

    for subject in experiment.subjects.values():
        fooof_item = subject.fooof_report.get(selected_name)
        if not fooof_item:
            continue
        for key, report in fooof_item.content.items():
            for ch_idx, ch_name in enumerate(fooof_item.params['ch_names']):
                ch_report = report.get_fooof(ch_idx)
                for peak in ch_report.peak_params_:
                    csv_data.append([format_float(peak[0]),
                                     format_float(peak[1]),
                                     format_float(peak[2]), 
                                     '', ''])
                    row_descs.append((subject.name, key, ch_name))
                aparams = ch_report.aperiodic_params_
                csv_data.append(['', '', '',
                                 format_float(aparams[0]),
                                 format_float(aparams[1])])

                row_descs.append((subject.name, key, ch_name))

    # Save the resulting csv into a output folder 'meggie way'
    folder = create_timestamped_folder(experiment)
    fname = selected_name + '_all_subject_all_channels_fooof.csv'
    path = os.path.join(folder, fname)

    save_csv(path, csv_data, column_names, row_descs)
    logging.getLogger('ui_logger').info('Saved the csv file to ' + path)