def test_fg_fit_par(): """Test FOOOFGroup fit, running in parallel.""" n_spectra = 2 xs, ys = gen_group_power_spectra(n_spectra, *default_group_params()) tfg = FOOOFGroup() tfg.fit(xs, ys, n_jobs=2) out = tfg.get_results() assert out assert len(out) == n_spectra assert isinstance(out[0], FOOOFResult) assert np.all(out[1].background_params)
else: freqs = np.squeeze(dat['fxx']) aper = np.empty([2, dat['pxx'].shape[1], dat['pxx'].shape[2]]) g = np.zeros([dat['pxx'].shape[1], 75, dat['pxx'].shape[2]]) for iseg in range(0, dat['pxx'].shape[2]): print('%d / %d' % (iseg, dat['pxx'].shape[2])) fm = FOOOFGroup(peak_width_limits=[1, 8], min_peak_height=0.05, max_n_peaks=6) fm._maxfev = 30000 freq_range = [3, 40] fm.fit(freqs, np.transpose(dat['pxx'][:, :, iseg]), freq_range) tmp = fm.get_results() for isens in range(0, dat['pxx'].shape[1]): aper[:, isens, iseg] = tmp[isens].aperiodic_params F = fm.freqs for isens in range(0, dat['pxx'].shape[1]): for i in range(0, len(tmp[isens].gaussian_params)): c = tmp[isens].gaussian_params[i][0] w = tmp[isens].gaussian_params[i][2] a = tmp[isens].gaussian_params[i][1] g[isens, :, iseg] = g[isens, :, iseg] + a * np.exp( (-(F - c)**2) / (2 * pow(w, 2))) b = tmp[isens].aperiodic_params[0] e = tmp[isens].aperiodic_params[1]
v = 2 all_subj = [ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34 ] for isubj in all_subj: for iblock in range(1, 3): try: fm = FOOOFGroup() fm.load( '/home/tpfeffer/pp/proc/src/pp_hh_fooof_result_lo_s%d_b%d_v%d.json' % (isubj, iblock, v)) res_lo = fm.get_results() fm.load( '/home/tpfeffer/pp/proc/src/pp_hh_fooof_result_me_s%d_b%d_v%d.json' % (isubj, iblock, v)) res_me = fm.get_results() fm.load( '/home/tpfeffer/pp/proc/src/pp_hh_fooof_result_hi_s%d_b%d_v%d.json' % (isubj, iblock, v)) res_hi = fm.get_results() except: print('Could not find data...') continue # Frequencies: 0 - 40 Hz in steps of 0.25 Hz F = fm.freqs # g_lo will contain the complete PS fit, i.e., aperiodic + periodic components
average='mean', nperseg=200, nfft=400, return_onesided=True) theta_params_clean = np.zeros(shape=[64, len(eps), 3]) - 1 for elec_n in np.arange(n_elec): if np.logical_not(elec_n % 10): print('\telec : %s' % eps.info['ch_names'][elec_n]) fg = FOOOFGroup(verbose=False, max_n_peaks=4, peak_width_limits=[.5, 2]) fg.fit(freqs_welch, amp_welch[:, elec_n, :], [2, 20], n_jobs=-1) theta_params =\ np.array([fg_res_n.peak_params[(fg_res_n.peak_params[:,0]>3.9)\ & (fg_res_n.peak_params[:,0]<8)] for fg_res_n in fg.get_results()]) for trial_n in np.arange(len(theta_params)): if len(theta_params[trial_n]) == 1: theta_params_clean[ elec_n, trial_n, :] = theta_params[trial_n].squeeze() elif len(theta_params[trial_n]) > 1: max_amp_ind = np.argmax(theta_params[trial_n][:, 1]).squeeze() theta_params_clean[elec_n, trial_n, :] = theta_params[trial_n][ max_amp_ind, :].squeeze() np.savez(obs_eegpath +\ 'obs_%i_fooof_params_theta.npz' % obs_i, {'theta_params_clean':theta_params_clean, 'instr_type':eps.metadata['instr_type'].values, 'respcorrect':eps.metadata['respcorrect'].values, 'resptime':eps.metadata['resptime'].values})