Ejemplo n.º 1
0
def test_getitem_epochsTFR():
    """Test GetEpochsMixin in the context of EpochsTFR."""
    from pandas import DataFrame
    # Setup for reading the raw data and select a few trials
    raw = read_raw_fif(raw_fname)
    events = read_events(event_fname)
    n_events = 10

    # create fake metadata
    rng = np.random.RandomState(42)
    rt = rng.uniform(size=(n_events,))
    trialtypes = np.array(['face', 'place'])
    trial = trialtypes[(rng.uniform(size=(n_events,)) > .5).astype(int)]
    meta = DataFrame(dict(RT=rt, Trial=trial))
    event_id = dict(a=1, b=2, c=3, d=4)
    epochs = Epochs(raw, events[:n_events], event_id=event_id, metadata=meta,
                    decim=1)

    freqs = np.arange(12., 17., 2.)  # define frequencies of interest
    n_cycles = freqs / 2.  # 0.5 second time windows for all frequencies

    # Choose time x (full) bandwidth product
    time_bandwidth = 4.0  # With 0.5 s time windows, this gives 8 Hz smoothing
    power = tfr_multitaper(epochs, freqs=freqs, n_cycles=n_cycles,
                           use_fft=True, time_bandwidth=time_bandwidth,
                           return_itc=False, average=False, n_jobs=1)

    # Check that power and epochs metadata is the same
    assert_metadata_equal(epochs.metadata, power.metadata)
    assert_metadata_equal(epochs[::2].metadata, power[::2].metadata)
    assert_metadata_equal(epochs['RT < .5'].metadata,
                          power['RT < .5'].metadata)

    # Check that get power is functioning
    assert_array_equal(power[3:6].data, power.data[3:6])
    assert_array_equal(power[3:6].events, power.events[3:6])

    indx_check = (power.metadata['Trial'] == 'face').nonzero()
    assert_array_equal(power['Trial == "face"'].events,
                       power.events[indx_check])
    assert_array_equal(power['Trial == "face"'].data,
                       power.data[indx_check])

    # Check that the wrong Key generates a Key Error for Metadata search
    with pytest.raises(KeyError):
        power['Trialz == "place"']

    # Test length function
    assert len(power) == n_events
    assert len(power[3:6]) == 3

    # Test iteration function
    for ind, power_ep in enumerate(power):
        assert_array_equal(power_ep, power.data[ind])
        if ind == 5:
            break

    # Test that current state is maintained
    assert_array_equal(power.next(), power.data[ind + 1])
Ejemplo n.º 2
0
def test_getitem_epochsTFR():
    """Test GetEpochsMixin in the context of EpochsTFR."""
    from pandas import DataFrame
    # Setup for reading the raw data and select a few trials
    raw = read_raw_fif(raw_fname)
    events = read_events(event_fname)
    n_events = 10

    # create fake metadata
    rng = np.random.RandomState(42)
    rt = rng.uniform(size=(n_events, ))
    trialtypes = np.array(['face', 'place'])
    trial = trialtypes[(rng.uniform(size=(n_events, )) > .5).astype(int)]
    meta = DataFrame(dict(RT=rt, Trial=trial))
    event_id = dict(a=1, b=2, c=3, d=4)
    epochs = Epochs(raw,
                    events[:n_events],
                    event_id=event_id,
                    metadata=meta,
                    decim=1)

    freqs = np.arange(12., 17., 2.)  # define frequencies of interest
    n_cycles = freqs / 2.  # 0.5 second time windows for all frequencies

    # Choose time x (full) bandwidth product
    time_bandwidth = 4.0  # With 0.5 s time windows, this gives 8 Hz smoothing
    kwargs = dict(freqs=freqs,
                  n_cycles=n_cycles,
                  use_fft=True,
                  time_bandwidth=time_bandwidth,
                  return_itc=False,
                  average=False,
                  n_jobs=1)
    power = tfr_multitaper(epochs, **kwargs)

    # Check decim affects sfreq
    power_decim = tfr_multitaper(epochs, decim=2, **kwargs)
    assert power.info['sfreq'] / 2. == power_decim.info['sfreq']

    # Check that power and epochs metadata is the same
    assert_metadata_equal(epochs.metadata, power.metadata)
    assert_metadata_equal(epochs[::2].metadata, power[::2].metadata)
    assert_metadata_equal(epochs['RT < .5'].metadata,
                          power['RT < .5'].metadata)

    # Check that get power is functioning
    assert_array_equal(power[3:6].data, power.data[3:6])
    assert_array_equal(power[3:6].events, power.events[3:6])

    indx_check = (power.metadata['Trial'] == 'face')
    try:
        indx_check = indx_check.to_numpy()
    except Exception:
        pass  # older Pandas
    indx_check = indx_check.nonzero()
    assert_array_equal(power['Trial == "face"'].events,
                       power.events[indx_check])
    assert_array_equal(power['Trial == "face"'].data, power.data[indx_check])

    # Check that the wrong Key generates a Key Error for Metadata search
    with pytest.raises(KeyError):
        power['Trialz == "place"']

    # Test length function
    assert len(power) == n_events
    assert len(power[3:6]) == 3

    # Test iteration function
    for ind, power_ep in enumerate(power):
        assert_array_equal(power_ep, power.data[ind])
        if ind == 5:
            break

    # Test that current state is maintained
    assert_array_equal(power.next(), power.data[ind + 1])
Ejemplo n.º 3
0
def test_io():
    """Test TFR IO capacities."""
    from pandas import DataFrame
    tempdir = _TempDir()
    fname = op.join(tempdir, 'test-tfr.h5')
    data = np.zeros((3, 2, 3))
    times = np.array([.1, .2, .3])
    freqs = np.array([.10, .20])

    info = mne.create_info(['MEG 001', 'MEG 002', 'MEG 003'], 1000.,
                           ['mag', 'mag', 'mag'])
    info['meas_date'] = datetime.datetime(year=2020,
                                          month=2,
                                          day=5,
                                          tzinfo=datetime.timezone.utc)
    info._check_consistency()
    tfr = AverageTFR(info,
                     data=data,
                     times=times,
                     freqs=freqs,
                     nave=20,
                     comment='test',
                     method='crazy-tfr')
    tfr.save(fname)
    tfr2 = read_tfrs(fname, condition='test')
    assert isinstance(tfr2.info, Info)
    assert isinstance(tfr2.info['dev_head_t'], Transform)

    assert_array_equal(tfr.data, tfr2.data)
    assert_array_equal(tfr.times, tfr2.times)
    assert_array_equal(tfr.freqs, tfr2.freqs)
    assert_equal(tfr.comment, tfr2.comment)
    assert_equal(tfr.nave, tfr2.nave)

    pytest.raises(IOError, tfr.save, fname)

    tfr.comment = None
    # test old meas_date
    info['meas_date'] = (1, 2)
    tfr.save(fname, overwrite=True)
    assert_equal(read_tfrs(fname, condition=0).comment, tfr.comment)
    tfr.comment = 'test-A'
    tfr2.comment = 'test-B'

    fname = op.join(tempdir, 'test2-tfr.h5')
    write_tfrs(fname, [tfr, tfr2])
    tfr3 = read_tfrs(fname, condition='test-A')
    assert_equal(tfr.comment, tfr3.comment)

    assert (isinstance(tfr.info, mne.Info))

    tfrs = read_tfrs(fname, condition=None)
    assert_equal(len(tfrs), 2)
    tfr4 = tfrs[1]
    assert_equal(tfr2.comment, tfr4.comment)

    pytest.raises(ValueError, read_tfrs, fname, condition='nonono')
    # Test save of EpochsTFR.
    n_events = 5
    data = np.zeros((n_events, 3, 2, 3))

    # create fake metadata
    rng = np.random.RandomState(42)
    rt = np.round(rng.uniform(size=(n_events, )), 3)
    trialtypes = np.array(['face', 'place'])
    trial = trialtypes[(rng.uniform(size=(n_events, )) > .5).astype(int)]
    meta = DataFrame(dict(RT=rt, Trial=trial))
    # fake events and event_id
    events = np.zeros([n_events, 3])
    events[:, 0] = np.arange(n_events)
    events[:, 2] = np.ones(n_events)
    event_id = {'a/b': 1}

    tfr = EpochsTFR(info,
                    data=data,
                    times=times,
                    freqs=freqs,
                    comment='test',
                    method='crazy-tfr',
                    events=events,
                    event_id=event_id,
                    metadata=meta)
    tfr.save(fname, True)
    read_tfr = read_tfrs(fname)[0]
    assert_array_equal(tfr.data, read_tfr.data)
    assert_metadata_equal(tfr.metadata, read_tfr.metadata)
    assert_array_equal(tfr.events, read_tfr.events)
    assert tfr.event_id == read_tfr.event_id
Ejemplo n.º 4
0
def test_io():
    """Test TFR IO capacities."""
    from pandas import DataFrame
    tempdir = _TempDir()
    fname = op.join(tempdir, 'test-tfr.h5')
    data = np.zeros((3, 2, 3))
    times = np.array([.1, .2, .3])
    freqs = np.array([.10, .20])

    info = mne.create_info(['MEG 001', 'MEG 002', 'MEG 003'], 1000.,
                           ['mag', 'mag', 'mag'])
    tfr = AverageTFR(info, data=data, times=times, freqs=freqs,
                     nave=20, comment='test', method='crazy-tfr')
    tfr.save(fname)
    tfr2 = read_tfrs(fname, condition='test')

    assert_array_equal(tfr.data, tfr2.data)
    assert_array_equal(tfr.times, tfr2.times)
    assert_array_equal(tfr.freqs, tfr2.freqs)
    assert_equal(tfr.comment, tfr2.comment)
    assert_equal(tfr.nave, tfr2.nave)

    pytest.raises(IOError, tfr.save, fname)

    tfr.comment = None
    tfr.save(fname, overwrite=True)
    assert_equal(read_tfrs(fname, condition=0).comment, tfr.comment)
    tfr.comment = 'test-A'
    tfr2.comment = 'test-B'

    fname = op.join(tempdir, 'test2-tfr.h5')
    write_tfrs(fname, [tfr, tfr2])
    tfr3 = read_tfrs(fname, condition='test-A')
    assert_equal(tfr.comment, tfr3.comment)

    assert (isinstance(tfr.info, mne.Info))

    tfrs = read_tfrs(fname, condition=None)
    assert_equal(len(tfrs), 2)
    tfr4 = tfrs[1]
    assert_equal(tfr2.comment, tfr4.comment)

    pytest.raises(ValueError, read_tfrs, fname, condition='nonono')
    # Test save of EpochsTFR.
    n_events = 5
    data = np.zeros((n_events, 3, 2, 3))

    # create fake metadata
    rng = np.random.RandomState(42)
    rt = np.round(rng.uniform(size=(n_events,)), 3)
    trialtypes = np.array(['face', 'place'])
    trial = trialtypes[(rng.uniform(size=(n_events,)) > .5).astype(int)]
    meta = DataFrame(dict(RT=rt, Trial=trial))
    # fake events and event_id
    events = np.zeros([n_events, 3])
    events[:, 0] = np.arange(n_events)
    events[:, 2] = np.ones(n_events)
    event_id = dict(a=1)

    tfr = EpochsTFR(info, data=data, times=times, freqs=freqs,
                    comment='test', method='crazy-tfr', events=events,
                    event_id=event_id, metadata=meta)
    tfr.save(fname, True)
    read_tfr = read_tfrs(fname)[0]
    assert_array_equal(tfr.data, read_tfr.data)
    assert_metadata_equal(tfr.metadata, read_tfr.metadata)
    assert_array_equal(tfr.events, read_tfr.events)
    assert_equal(tfr.event_id, read_tfr.event_id)