[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