Source code for osl_ephys.tests.test_batch_preproc
"""Tests for running batch preprocessing - doesn't check that it runs properly,
just that it runs...."""
import unittest
import tempfile
import os
import mne
import numpy as np
[docs]class TestPreprocessingChain(unittest.TestCase):
@classmethod
[docs] def setUpClass(cls):
from ..utils import simulate_raw_from_template
cls.flat_channels = [10]
cls.bad_channels = [5, 200]
cls.bad_segments = [(600, 750)]
cls.raw = simulate_raw_from_template(5000,
flat_channels=cls.flat_channels,
bad_channels=cls.bad_channels,
bad_segments=cls.bad_segments)
cls.fpath = tempfile.NamedTemporaryFile().name + 'raw.fif'
cls.raw.save(cls.fpath)
@classmethod
[docs] def tearDownClass(cls):
os.remove(cls.fpath)
[docs] def test_simple_chain(self):
from ..preprocessing import run_proc_chain
cfg = """
meta:
event_codes:
preproc:
- filter: {l_freq: 1, h_freq: 30}
- notch_filter: {freqs: 50}
- bad_channels: {picks: 'grad'}
- bad_segments: {segment_len: 800, picks: 'grad'}
"""
dataset = run_proc_chain(cfg, self.fpath)
# Just testing that things run not that the outputs are sensible...
assert(isinstance(dataset["raw"], mne.io.fiff.raw.Raw))
[docs]class TestVersions(unittest.TestCase):
[docs] def test_simple_chain(self):
from ..preprocessing import load_config, check_config_versions
cfg = """
meta:
event_codes:
version_assert:
version_warn:
preproc:
- filter: {l_freq: 1, h_freq: 30}
- notch_filter: {freqs: 50}
- bad_channels: {picks: 'grad'}
- bad_segments: {segment_len: 800, picks: 'grad'}
"""
config = load_config(cfg)
config['meta']['version_assert'] = ['numpy>1.0', 'scipy>1.0']
config['meta']['version_warn'] = ['mne>1.0']
check_config_versions(config)
[docs]class TestPreprocessingBatch(unittest.TestCase):
@classmethod
[docs] def setUpClass(cls):
from ..utils import simulate_raw_from_template
cls.infiles = []
# First file normal
cls.raw = simulate_raw_from_template(5000)
cls.fpath = tempfile.NamedTemporaryFile().name + 'raw.fif'
cls.raw.save(cls.fpath)
cls.infiles.append(cls.fpath)
# Second file doesn't exist
cls.fpath = tempfile.NamedTemporaryFile().name + 'raw.fif'
cls.infiles.append(cls.fpath)
# Third file normal
cls.raw = simulate_raw_from_template(5000)
cls.fpath = tempfile.NamedTemporaryFile().name + 'raw.fif'
cls.raw.save(cls.fpath)
cls.infiles.append(cls.fpath)
@classmethod
[docs] def tearDownClass(cls):
for fpath in cls.infiles:
if os.path.exists(fpath):
os.remove(fpath)
[docs] def test_simple_batch(self):
from ..preprocessing import run_proc_batch
cfg = """
meta:
event_codes:
preproc:
- bad_channels: {picks: 'grad'}
- bad_segments: {segment_len: 800, picks: 'grad'}
"""
# Normal run
td = tempfile.TemporaryDirectory()
goods = run_proc_batch(cfg, self.infiles, outdir=td.name)
assert(np.all(goods == np.array([1, 0, 1])))
[docs] def test_dask_batch(self):
from ..preprocessing import run_proc_batch
from dask.distributed import Client
cfg = """
meta:
event_codes:
preproc:
- bad_channels: {picks: 'grad'}
- bad_segments: {segment_len: 800, picks: 'grad'}
"""
client = Client(n_workers=2, threads_per_worker=1)
td = tempfile.TemporaryDirectory()
goods = run_proc_batch(cfg, self.infiles,
outdir=td.name,
dask_client=True)
assert(np.all(goods == np.array([1, 0, 1])))
client.shutdown()