Esempio n. 1
0
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)
Esempio n. 2
0
        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]
Esempio n. 3
0
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})