[med-svn] [python-mne] 194/353: ENH : new Raw.filter method to simply filtering
Yaroslav Halchenko
debian at onerussian.com
Fri Nov 27 17:24:56 UTC 2015
This is an automated email from the git hooks/post-receive script.
yoh pushed a commit to tag 0.4
in repository python-mne.
commit fd939de85cc4da3a7c0dfb94cd1eedef0b5b18d6
Author: Alexandre Gramfort <alexandre.gramfort at inria.fr>
Date: Sun Jun 17 16:53:56 2012 +0300
ENH : new Raw.filter method to simply filtering
---
doc/source/whats_new.rst | 6 ++--
mne/fiff/raw.py | 76 +++++++++++++++++++++++++++++++++++++++-------
mne/fiff/tests/test_raw.py | 6 ++--
mne/preprocessing/ssp.py | 8 ++---
4 files changed, 74 insertions(+), 22 deletions(-)
diff --git a/doc/source/whats_new.rst b/doc/source/whats_new.rst
index 4372f4b..b1c37bb 100644
--- a/doc/source/whats_new.rst
+++ b/doc/source/whats_new.rst
@@ -1,14 +1,14 @@
What's new
==========
-.. _changes_0_3:
-
Current
-----------
Changelog
~~~~~~~~~
+ - Add Raw.filter method to more easily band pass data by `Alex Gramfort`_.
+
- Add method to regularize a noise covariance by `Alex Gramfort`_.
- Read and write measurement info in forward and inverse operators for interactive visualization in mne_analyze by `Alex Gramfort`_.
@@ -17,6 +17,8 @@ Changelog
- Wrapper function and script (mne_maxfilter.py) for Elekta Neuromag MaxFilter(TM) by `Martin Luessi`_
+.. _changes_0_3:
+
Version 0.3
-----------
diff --git a/mne/fiff/raw.py b/mne/fiff/raw.py
index e63db41..e0f4e9a 100644
--- a/mne/fiff/raw.py
+++ b/mne/fiff/raw.py
@@ -16,9 +16,11 @@ from .open import fiff_open
from .meas_info import read_meas_info, write_meas_info
from .tree import dir_tree_find
from .tag import read_tag
+from .pick import pick_types
from ..filter import low_pass_filter, high_pass_filter, band_pass_filter
from ..parallel import parallel_func
+from ..utils import deprecated
class Raw(object):
@@ -360,6 +362,61 @@ class Raw(object):
else:
self.apply_function(hilbert, picks, np.complex64, n_jobs, verbose)
+ def filter(self, l_freq, h_freq, picks=None, filter_length=None,
+ n_jobs=1, verbose=5):
+ """Filter a subset of channels.
+
+ Applies a zero-phase band-pass filter to the channels selected by
+ "picks". The data of the Raw object is modified inplace.
+
+ The Raw object has to be constructed using preload=True (or string).
+
+ Note: If n_jobs > 1, more memory is required as "len(picks) * n_times"
+ addtional time points need to be temporaily stored in memory.
+
+ Parameters
+ ----------
+ l_freq : float | None
+ Low cut-off frequency in Hz. If None the data are only low-passed.
+
+ h_freq : float
+ High cut-off frequency in Hz. If None the data are only high-passed.
+
+ picks : list of int | None
+ Indices of channels to filter. If None only the data (MEG/EEG)
+ channels will be filtered.
+
+ filter_length : int (default: None)
+ Length of the filter to use (e.g. 4096).
+ If None or "n_times < filter_length",
+ (n_times: number of timepoints in Raw object) the filter length
+ used is n_times. Otherwise, overlap-add filtering with a
+ filter of the specified length is used (faster for long signals).
+
+ n_jobs: int (default: 1)
+ Number of jobs to run in parallel.
+
+ verbose: int (default: 5)
+ Verbosity level.
+ """
+ fs = float(self.info['sfreq'])
+ if l_freq == 0:
+ l_freq = None
+ if h_freq > (fs / 2.):
+ h_freq = None
+ if picks is None:
+ picks = pick_types(self.info, meg=True, eeg=True)
+ if l_freq is None and h_freq is not None:
+ self.apply_function(low_pass_filter, picks, None, n_jobs, verbose, fs,
+ h_freq, filter_length=filter_length)
+ if l_freq is not None and h_freq is None:
+ self.apply_function(high_pass_filter, picks, None, n_jobs, verbose, fs,
+ l_freq, filter_length=filter_length)
+ if l_freq is not None and h_freq is not None:
+ self.apply_function(band_pass_filter, picks, None, n_jobs, verbose, fs,
+ l_freq, h_freq, filter_length=filter_length)
+
+ @deprecated('band_pass_filter is deprecated please use raw.filter instead')
def band_pass_filter(self, picks, l_freq, h_freq, filter_length=None,
n_jobs=1, verbose=5):
"""Band-pass filter a subset of channels.
@@ -372,7 +429,6 @@ class Raw(object):
Note: If n_jobs > 1, more memory is required as "len(picks) * n_times"
addtional time points need to be temporaily stored in memory.
-
Parameters
----------
picks : list of int
@@ -396,10 +452,10 @@ class Raw(object):
verbose: int (default: 5)
Verbosity level.
"""
- fs = float(self.info['sfreq'])
- self.apply_function(band_pass_filter, picks, None, n_jobs, verbose, fs,
- l_freq, h_freq, filter_length=filter_length)
+ self.filter(l_freq, h_freq, picks, n_jobs=n_jobs, verbose=verbose,
+ filter_length=filter_length)
+ @deprecated('high_pass_filter is deprecated please use raw.filter instead')
def high_pass_filter(self, picks, freq, filter_length=None, n_jobs=1,
verbose=5):
"""High-pass filter a subset of channels.
@@ -432,11 +488,10 @@ class Raw(object):
verbose: int (default: 5)
Verbosity level.
"""
+ self.filter(freq, None, picks, n_jobs=n_jobs, verbose=verbose,
+ filter_length=filter_length)
- fs = float(self.info['sfreq'])
- self.apply_function(high_pass_filter, picks, None, n_jobs, verbose,
- fs, freq, filter_length=filter_length)
-
+ @deprecated('low_pass_filter is deprecated please use raw.filter instead')
def low_pass_filter(self, picks, freq, filter_length=None, n_jobs=1,
verbose=5):
"""Low-pass filter a subset of channels.
@@ -469,9 +524,8 @@ class Raw(object):
verbose: int (default: 5)
Verbosity level.
"""
- fs = float(self.info['sfreq'])
- self.apply_function(low_pass_filter, picks, None, n_jobs, verbose,
- fs, freq, filter_length=filter_length)
+ self.filter(None, freq, picks, n_jobs=n_jobs, verbose=verbose,
+ filter_length=filter_length)
def save(self, fname, picks=None, tmin=0, tmax=None, buffer_size_sec=10,
drop_small_buffer=False):
diff --git a/mne/fiff/tests/test_raw.py b/mne/fiff/tests/test_raw.py
index 2321956..43e7908 100644
--- a/mne/fiff/tests/test_raw.py
+++ b/mne/fiff/tests/test_raw.py
@@ -148,13 +148,13 @@ def test_filter():
picks = picks_meg[:4]
raw_lp = deepcopy(raw)
- raw_lp.low_pass_filter(picks, 4.0, verbose=0, n_jobs=2)
+ raw_lp.filter(0., 4.0, picks=picks, verbose=0, n_jobs=2)
raw_hp = deepcopy(raw)
- raw_hp.high_pass_filter(picks, 8.0, verbose=0)
+ raw_lp.filter(8.0, None, picks=picks, verbose=0, n_jobs=2)
raw_bp = deepcopy(raw)
- raw_bp.band_pass_filter(picks, 4.0, 8.0, verbose=0)
+ raw_bp.filter(4.0, 8.0, picks=picks, verbose=0)
data, _ = raw[picks, :]
diff --git a/mne/preprocessing/ssp.py b/mne/preprocessing/ssp.py
index 60713af..48b5b8c 100644
--- a/mne/preprocessing/ssp.py
+++ b/mne/preprocessing/ssp.py
@@ -141,12 +141,8 @@ def _compute_exg_proj(mode, raw, raw_event, tmin, tmax,
picks = pick_types(raw.info, meg=True, eeg=True, eog=True,
exclude=raw.info['bads'] + bads)
- if l_freq is None and h_freq is not None:
- raw.high_pass_filter(picks, h_freq, filter_length, n_jobs)
- if l_freq is not None and h_freq is None:
- raw.low_pass_filter(picks, h_freq, filter_length, n_jobs)
- if l_freq is not None and h_freq is not None:
- raw.band_pass_filter(picks, l_freq, h_freq, filter_length, n_jobs)
+ raw.filter(l_freq, h_freq, picks=picks, filter_length=filter_length,
+ n_jobs=n_jobs)
epochs = Epochs(raw, events, None, tmin, tmax, baseline=None,
picks=picks, reject=reject, proj=True)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/python-mne.git
More information about the debian-med-commit
mailing list