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()
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
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
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
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)