Ejemplo n.º 1
0
def test_auto_trigger_selection_text(caplog):
    """Test auto_trigger_selection."""
    test_time = np.array([0, 1, 2, 3, 4])
    test_trigger = np.array([0, 1, 2, 3, 4])
    test_half = np.array([0, 1, 2])
    test_twice = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    test_timeseries = [
        test_time, test_trigger, test_half, test_twice, test_twice, test_twice
    ]
    test_freq = [1, 1, 0.5, 2, 2, 2]
    test_chn_name = ['time', 'trigger', 'half', 'CO2', 'CO 2', 'strigose']
    test_units = ['s', 'V', 'V', 'V', 'V', 'V']

    # test when trigger is not the name of the channel
    test_chtrig = 2
    phys_in = po.BlueprintInput(test_timeseries, test_freq, test_chn_name,
                                test_units, test_chtrig)
    assert 'Trigger channel name is not' in caplog.text

    # test when trigger is 0 and that the trigger channel is recognized by name:
    test_chtrig = 0
    phys_in = po.BlueprintInput(test_timeseries, test_freq, test_chn_name,
                                test_units, test_chtrig)
    assert phys_in.trigger_idx == 1
    # test when no trigger is found
    test_chn_name = ['time', 'trigger', 'TRIGGER', 'CO2', 'CO 2', 'strigose']
    with raises(Exception) as errorinfo:
        phys_in = po.BlueprintInput(test_timeseries, test_freq, test_chn_name,
                                    test_units, test_chtrig)
        assert 'More than one possible trigger channel' in str(errorinfo.value)
Ejemplo n.º 2
0
def test_BlueprintInput():
    test_time = np.array([0, 1, 1, 2, 3, 5, 8, 13])
    test_trigger = np.array([0, 1, 0, 0, 0, 0, 0, 0])
    test_chocolate = np.array([1, 0, 0, 1, 0, 0, 1, 0])
    test_timeseries = [test_time, test_trigger, test_chocolate]
    test_freq = [42.0, 3.14, 20.0]
    test_chn_name = ['time', 'trigger', 'chocolate']
    test_units = ['s', 's', 'sweetness']
    num_channnels = len(test_timeseries)

    blueprint_in = po.BlueprintInput(test_timeseries, test_freq, test_chn_name,
                                     test_units)

    # Tests rename_channels
    new_names = ['trigger', 'time', 'lindt']
    blueprint_in.rename_channels(new_names.copy())
    assert blueprint_in.ch_name == ['time', 'trigger', 'lindt']

    # Tests return_index
    test_index = blueprint_in.return_index(1)
    assert (test_index[0] == test_trigger).all()
    assert test_index[1] == len(test_timeseries)
    assert test_index[2] == test_freq[1]
    assert test_index[3] == test_chn_name[1]
    assert test_index[4] == test_units[1]

    # Tests delete_at_index
    blueprint_in.delete_at_index(2)
    assert blueprint_in.ch_amount == num_channnels - 1

    # Tests check_trigger_amount
    blueprint_in.check_trigger_amount(thr=0.9, num_timepoints_expected=1)
    assert blueprint_in.num_timepoints_found == 1
Ejemplo n.º 3
0
def test_auto_trigger_selection_time():
    """Test auto_trigger_selection in time domain."""
    # Simulate 10 s of a trigger, O2 and ECG
    T = 10
    nSamp = 100
    fs = nSamp / T
    test_time = np.linspace(0, T, nSamp)
    test_freq = [fs, fs, fs, fs]

    # O2 as a sinusoidal of 0.5 Hz
    test_O2 = np.sin(2 * np.pi * 0.5 * test_time)
    # ECG as a sinusoidal with 1.5 Hz
    test_ecg = np.sin(2 * np.pi * 1.5 * test_time)
    # Trigger as a binary signal
    test_trigger = np.zeros(nSamp)
    test_trigger[1:nSamp:4] = 1

    test_timeseries = [test_time, test_O2, test_ecg, test_trigger]
    test_chn_name = ['time', 'O2', 'ecg', 'tiger']
    test_units = ['s', 'V', 'V', 'V']

    # test when chtrig is 0 and the trigger is not recognized by text matching:
    test_chtrig = 0
    phys_in = po.BlueprintInput(test_timeseries, test_freq, test_chn_name,
                                test_units, test_chtrig)
    assert phys_in.trigger_idx == 3
Ejemplo n.º 4
0
def test_BlueprintInput_slice():
    """Test BlueprintInput_slice.__getitem__ ."""
    test_time = np.array([0, 1, 2, 3, 4])
    test_trigger = np.array([0, 1, 2, 3, 4])
    test_half = np.array([0, 1, 2])
    test_twice = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    test_timeseries = [test_time, test_trigger, test_half, test_twice]
    test_freq = [1, 1, 0.5, 2]
    test_chn_name = ['time', 'trigger', 'half', 'twice']
    test_units = ['s', 'V', 'V', 'V']
    test_chtrig = 1

    phys_in = po.BlueprintInput(test_timeseries, test_freq, test_chn_name,
                                test_units, test_chtrig)

    phys_dict = {'timeseries': test_timeseries,
                 'freq': test_freq,
                 'ch_name': ['time', 'trigger', 'half', 'twice'],
                 'units': ['s', 'V', 'V', 'V'],
                 'trigger_idx': 1,
                 'num_timepoints_found': None,
                 'thr': None,
                 'time_offset': 0}

    # Test all-comprehensive slice
    assert phys_in[0:len(test_trigger)] == phys_dict

    # Test instantaneous slice first and last
    phys_dict['timeseries'] = [np.array([test_time[0]]),
                               np.array([test_trigger[0]]),
                               np.array([test_half[0]]),
                               np.array([test_twice[0]])]
    assert phys_in[0] == phys_dict

    phys_dict['timeseries'] = [np.array([test_time[-1]]),
                               np.array([test_trigger[-1]]),
                               np.array([test_half[-1]]),
                               np.array([test_twice[-2]])]
    assert phys_in[-1] == phys_dict

    # Test slice in the middle
    phys_dict['timeseries'] = [np.array(test_time[2:4]),
                               np.array(test_trigger[2:4]),
                               np.array(test_half[1:2]),
                               np.array(test_twice[4:8])]
    assert phys_in[2:4] == phys_dict

    # Test slice in the middle with steps
    phys_dict['timeseries'] = [np.array(test_time[1:4:2]),
                               np.array(test_trigger[1:4:2]),
                               np.array(test_half[0:2:1]),
                               np.array(test_twice[4:8:4])]
    assert phys_in[1:4:2] == phys_dict
Ejemplo n.º 5
0
def test_are_equal():
    """Test are_equal ."""
    test_string = 'So Long, and Thanks for All the Fish'
    test_time = np.array([0, 1, 1, 2, 3, 5, 8, 13])
    test_trigger = np.array([0, 1, 0, 0, 0, 0, 0, 0])

    class C(object):
        c = 'c'

    c1 = C()
    c1.ts = [test_time, test_trigger]

    c2 = C()
    c2.ts = [test_time]

    test_half = np.array([0, 1, 2])
    test_twice = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
    test_timeseries = [test_time, test_trigger, test_half, test_twice]
    test_freq = [1, 1, 0.5, 2]
    test_chn_name = ['time', 'trigger', 'half', 'twice']
    test_units = ['s', 'V', 'V', 'V']
    test_chtrig = 1

    phys_in = po.BlueprintInput(test_timeseries, test_freq, test_chn_name,
                                test_units, test_chtrig)
    phys_out = po.BlueprintInput([test_trigger, test_half, test_twice],
                                 test_freq, test_chn_name,
                                 test_units, test_chtrig)

    assert po.are_equal(test_string, test_string)
    assert po.are_equal(c1, c1)
    assert po.are_equal(phys_in, phys_in)
    assert po.are_equal(c1, c1.__dict__)
    assert po.are_equal(c1.__dict__, c1)
    assert not po.are_equal(c1, c2)
    assert not po.are_equal(c1, phys_in)
    assert not po.are_equal(phys_out, phys_in)
    assert not po.are_equal(phys_in, c2)
    assert not po.are_equal(c1, c2.__dict__)
    assert not po.are_equal(test_string, c1)
Ejemplo n.º 6
0
def test_BlueprintInput():
    test_time = np.array([0, 1, 1, 2, 3, 5, 8, 13])
    test_trigger = np.array([0, 1, 0, 0, 0, 0, 0, 0])
    test_chocolate = np.array([1, 0, 0, 1, 0, 0, 1, 0])
    test_timeseries = [test_time, test_trigger, test_chocolate]
    test_freq = [42.0, 3.14, 20.0]
    test_chn_name = ['time', 'trigger', 'chocolate']
    test_units = ['s', 's', 'sweetness']
    test_chtrig = 1
    num_channnels = len(test_timeseries)

    blueprint_in = po.BlueprintInput(test_timeseries, test_freq, test_chn_name,
                                     test_units, test_chtrig)

    # Tests rename_channels
    new_names = ['trigger', 'time', 'lindt']
    blueprint_in.rename_channels(new_names)
    assert blueprint_in.ch_name == ['time', 'trigger', 'lindt']

    # Tests return_index
    test_index = blueprint_in.return_index(1)
    assert test_index[0] is not test_trigger
    assert (test_index[0] == test_trigger).all()
    assert test_index[1] == len(test_timeseries)
    assert test_index[2] == test_freq[1]
    assert test_index[3] == test_chn_name[1]
    assert test_index[4] == test_units[1]

    # Tests delete_at_index
    blueprint_in.delete_at_index(2)
    assert blueprint_in.ch_amount == num_channnels - 1

    # Tests check_trigger_amount
    blueprint_in.check_trigger_amount(thr=0.9, num_timepoints_expected=1)
    assert blueprint_in.num_timepoints_found == 1
    assert blueprint_in.time_offset == 1
    test_offset_time = test_time - 1
    assert np.array_equal(blueprint_in.timeseries[0], test_offset_time)

    # Tests delete_at_index with trigger channel
    blueprint_in.delete_at_index(test_chtrig)
    assert blueprint_in.ch_amount == num_channnels - 2
    assert blueprint_in.trigger_idx == 0

    # Test __eq__
    assert blueprint_in == blueprint_in

    with raises(IndexError) as errorinfo:
        blueprint_in.__getitem__(1000)
    assert 'out of bounds' in str(errorinfo.value)
Ejemplo n.º 7
0
def test_BlueprintOutput():
    test_time = np.array([0, 1, 1, 2, 3, 5, 8, 13])
    test_trigger = np.array([0, 1, 0, 0, 0, 0, 0, 0])
    test_chocolate = np.array([1, 0, 0, 1, 0, 0, 1, 0])
    test_timeseries = [test_time, test_trigger, test_chocolate]
    test_freq = [42.0, 3.14, 20.0]
    test_chn_name = ['trigger', 'time', 'chocolate']
    test_units = ['s', 's', 'sweetness']
    test_chtrig = 1
    num_channnels = len(test_timeseries)

    blueprint_in = po.BlueprintInput(test_timeseries, test_freq, test_chn_name,
                                     test_units, test_chtrig)

    # Tests init_from_blueprint
    blueprint_out = po.BlueprintOutput.init_from_blueprint(blueprint_in)
    start_time = blueprint_out.start_time
    assert (blueprint_out.timeseries == np.asarray(test_timeseries).T).all()
    assert blueprint_out.freq == test_freq[0]
    assert blueprint_out.ch_name == test_chn_name
    assert blueprint_out.units == test_units
    assert blueprint_out.start_time == 0

    # Tests return_index
    test_timeseries = np.array([[0, 1, 1, 2, 3, 5, 8, 13],
                                [0, 1, 0, 0, 0, 0, 0, 0],
                                [1, 0, 0, 1, 0, 0, 1, 0]]).T
    test_freq = 42.0
    test_chn_name = ['trigger', 'time', 'chocolate']
    test_units = ['s', 's', 'sweetness']
    num_channnels = test_timeseries.shape[1]
    blueprint_out = po.BlueprintOutput(test_timeseries, test_freq, test_chn_name, test_units,
                                       start_time)
    test_index = blueprint_out.return_index(1)
    assert (test_index[0] == test_trigger).all()
    assert test_index[1] == test_timeseries.shape[1]
    assert test_index[3] == test_chn_name[1]
    assert test_index[4] == test_units[1]

    # Tests delete_at_index
    blueprint_out.delete_at_index(1)
    assert len(blueprint_out.ch_name) == num_channnels - 1
    assert len(blueprint_out.units) == num_channnels - 1
    assert blueprint_out.timeseries.shape[1] == num_channnels - 1
    assert blueprint_out.ch_amount == num_channnels - 1

    # Test __eq__
    assert blueprint_out == blueprint_out
Ejemplo n.º 8
0
def test_cta_time_interp():
    """Test BlueprintInput.check_trigger_amount with time resampling."""
    test_time = np.array([0, 7])
    test_trigger = np.array([0, 1, 0, 0, 0, 0, 0, 0])
    test_timeseries = [test_time, test_trigger]
    test_freq = [42.0, 3.14]
    test_chn_name = ['time', 'trigger']
    test_units = ['s', 's']
    test_chtrig = 1

    blueprint_in = po.BlueprintInput(test_timeseries, test_freq, test_chn_name,
                                     test_units, test_chtrig)
    # Test check_trigger_amount with time resampling
    blueprint_in.check_trigger_amount(thr=0.9, num_timepoints_expected=1)
    assert blueprint_in.num_timepoints_found == 1
    assert blueprint_in.time_offset == 1
    test_offset_time = test_time - 1
    assert np.array_equal(blueprint_in.timeseries[0], test_offset_time)