|
2 | 2 |
|
3 | 3 | import numpy as np |
4 | 4 |
|
5 | | -from fooof import FOOOFGroup |
| 5 | +from fooof import FOOOF, FOOOFGroup |
6 | 6 | from fooof.synth.gen import gen_freqs |
7 | 7 | from fooof.utils import compare_info |
8 | 8 |
|
9 | 9 | ################################################################################################### |
10 | 10 | ################################################################################################### |
11 | 11 |
|
| 12 | +def average_fg(fg, bands, avg='mean'): |
| 13 | + """Average across a FOOOFGroup object.""" |
| 14 | + |
| 15 | + if avg == 'mean': |
| 16 | + avg_func = np.nanmean |
| 17 | + elif avg == 'median': |
| 18 | + avg_func = np.nanmedian |
| 19 | + |
| 20 | + ap_params = avg_func(fg.get_all_data('aperiodic_params'), 0) |
| 21 | + |
| 22 | + peak_params, gaussian_params = np.empty([0, 3]), np.empty([0, 3]) |
| 23 | + |
| 24 | + for label, band in bands: |
| 25 | + |
| 26 | + peak_params = np.vstack([peak_params, |
| 27 | + avg_func(get_band_peak_group(fg.get_all_data('peak_params'), band, len(fg)), 0)]) |
| 28 | + |
| 29 | + gaussian_params = np.vstack([gaussian_params, |
| 30 | + avg_func(get_band_peak_group(fg.get_all_data('gaussian_params'), band, len(fg)), 0)]) |
| 31 | + |
| 32 | + r2 = avg_func(fg.get_all_data('r_squared')) |
| 33 | + error = avg_func(fg.get_all_data('error')) |
| 34 | + |
| 35 | + results = FOOOFResults(ap_params, peak_params, r2, error, gaussian_params) |
| 36 | + |
| 37 | + # Create the new FOOOF object, with settings, data info & results |
| 38 | + fm = FOOOF() |
| 39 | + fm.add_settings(fg.get_settings()) |
| 40 | + fm.add_data_info(fg.get_data_info()) |
| 41 | + fm.add_results(results) |
| 42 | + |
| 43 | + return fm |
| 44 | + |
| 45 | + |
12 | 46 | def combine_fooofs(fooofs): |
13 | 47 | """Combine a group of FOOOF and/or FOOOFGroup objects into a single FOOOFGroup object. |
14 | 48 |
|
|
0 commit comments