Status | ||||
---|---|---|---|---|
|
Status | ||||
---|---|---|---|---|
|
This App aims at apply to MEG signals temporal filtering (lowpass, highpass, or bandpass) , and optionally a notch filter and a resamplingon epoched or continuous data. To do so, the MNE Python functions raw.filter, raw and Epoch.notch_filter, and raw.resample are used.
This App is supposed to be applied on MEG signals preprocessed beforehand with MaxFilter
GitHub repository
...
Info |
---|
The filter function is the same for epoched and raw data but the value of the pad parameter is not the same if the data is continuous or epoched. |
GitHub repository
https://github.com/AuroreBussalb/app-temporal-filtering
Brainlife datatype used:
For input: neuro/meg/fif
For outputs: neuro/meg/fif and report/html
...
Inputs of the App
Files | Format | Datatype | Description | Optional |
---|---|---|---|---|
MEG signals | .fifData to process. MaxFilter was applied beforehand on this data | meg/fif | The data can be continuous or epoched. Notch filtering and resampling can have been applied beforehand. | No |
Outputs of the App:
Files | Format | Datatype | Description |
---|---|---|---|
MEG signals | .fif | meg/fif | Data after filtering |
Report | .html | html | Visualization in time and frequency domains |
Steps
The python file temporal_filtering.py
is composed of several functions:
Function
temporal_filtering()
Apply a lowpass, highpass, or bandpass filter
Optionally apply a notch filter
Optionally resample the data
Save file
Function
_compute_snr()
Computes a SNR before and after MaxFilter. The steps of that function are described here.
Function
_generate_report()
Plot data in time domain
Plot data in frequency domain
Create info about raw data
Display SNR values
Save report
View file | ||
---|---|---|
|
Function
main()
Parse the
config.json
Raise an exception if both
l_freq
andh_freq
areNone
Apply
temporal_filtering()
Display info message about the filtering applied
Apply
_compute_snr()
Apply
_generate_report()
Besides, in the output directory, there are the optional files that can be used in a next App (see How to run Apps one after another).
Parameters of the App
The parameters of the App correspond to the parameters passed to the Python functions used in the App. They are listed in the Their default values proposed in Brainlife or in config.json.example
when you test your App locally, then when you register you App on Brainlife, you enter them and a config.json
is created by Brainlife.
For app-temporal-filtering
, the user will be able to choose the following parameters (a default parameter will be proposed). Three different MNE Python functions are used in this App:
Function
raw.filter()
l_freq
NUMBER
default: None
h_freq
NUMBER
default: None
Some parameters are in the “Advanced” section because it’s best to keep their default values:
picks
ENUM
either meg, eeg, [“meg”, “eeg”], mag, grad, or
None
(i.e. all channels except for the bad ones)default:
None
filter_length
STRING
default: auto
l_trans_bandwidth
NUMBER
default: auto
h_trans_bandwidth
NUMBER
default: auto
n_jobs
NUMBER
default: 1
method
STRING
either fir or iir
default: fir
iir_params
to be determined
phase
ENUM
either zero or zero-double
default: zero
fir_window
ENUM
either hamming, hann, or blackman
default: hamming
fir_design
ENUM
either firwin or firwin2
default: firwin
skip_by_annotation
ENUM
either ["edge", "bad_acq_skip"], ["edge"], ["bad_acq_skip"], or []
pad
ENUM
either reflect_limited or any value of
numpy.pad()
default: reflect_limited
2. Function raw.filter_notch()
param_notch_freqs_start
NUMBER
default: 50 (in Europe power line artifact is at 50Hz, in the US it’s at 60Hz)
param_notch_freqs_stop
NUMBER
default: 251 (in Europe, if MEG signals were recorded in the US, change it to 241)
param_notch_freqs_step
NUMBER
default: 50 (in Europe, if MEG signals were recorded in the US, change it to 60)
Some parameters are in the “Advanced” section because it’s best to keep their default values:
picks
ENUM
either meg, eeg, [“meg”, “eeg”], mag, grad, or
None
(i.e. all channels except for the bad ones)default:
None
filter_length
STRING
default: auto
notch_widths
NUMBER
default:
None
trans_bandwidth
NUMBER
default: 1
n_jobs
NUMBER
default: 1
method
STRING
either fir or iir
default: fir
iir_params
to be determined
mt_bandwidth
NUMBER
default:
None
p_value
NUMBER
default: 0.05
phase
ENUM
either zero or zero-double
default: zero
fir_window
ENUM
either hamming, hann, or blackman
default: hamming
fir_design
ENUM
either firwin or firwin2
default: firwin
pad
ENUM
either reflect_limited or any value of
numpy.pad()
default: reflect_limited
3. Function raw.resample()
sfreq
NUMBER
Some parameters are in the “Advanced” section because it’s best to keep their default values:
npad
NUMBER
default: auto
window
ENUM
see choices in
scipy.signal.get_window
default: boxcar
stim_picks
STRING
default:
None
n_jobs
NUMBER
default: 1
events
NUMBER
default:
None
pad
ENUM
either reflect_limited or any value of
numpy.pad()
default: reflect_limited
See if it’s possible in BL to put a default
STRING
value in aNUMBER
parameteriir_params must be a dictionary, to see how to write it for BL
see how to write an array of floats in BL
the list of parameters will be updated when the App will be registered on BL
The parameters' list along with their default values correspond to the Note 0.22.0
version of MNE. correspond to the default values of MNE Python 0.23.
Note |
---|
The parameter |
Next improvements
Be able to use the
iir_params
: register this parameter as aSTRING
in BL and convert it into a Python dict intemporal_filtering.py
Allow user to change the plot parameters for the plots in the HTML report?