Beispiel #1
0
def test_lgnonoffcell():
    ffm = movie.FullFieldFlashMovie(range(120), range(240), 0.3, 0.7)
    mv = ffm.full(t_max=2.0)

    temporal_filter = TemporalFilterCosineBump(weights=[3.441, -2.115],
                                               kpeaks=[8.269, 19.991],
                                               delays=[0.0, 0.0])

    spatial_filter_on = GaussianSpatialFilter(sigma=(1.85, 1.85),
                                              origin=(0.0, 0.0),
                                              translate=(120.0, 60.0))
    on_linear_filter = SpatioTemporalFilter(spatial_filter_on,
                                            temporal_filter,
                                            amplitude=20)

    spatial_filter_off = GaussianSpatialFilter(sigma=(3.85, 3.85),
                                               origin=(0.0, 0.0),
                                               translate=(120.0, 60.0))
    off_linear_filter = SpatioTemporalFilter(spatial_filter_off,
                                             temporal_filter,
                                             amplitude=-20)

    cell = LGNOnOffCell(on_linear_filter, off_linear_filter)
    lgn = LGNModel([cell])
    results = lgn.evaluate(mv, downsample=10)
    assert (len(results) == 1)

    times = np.array(results[0][0], dtype=np.float64)
    rates = np.array(results[0][1], dtype=np.float64)

    assert (np.allclose(times, [0.0, 0.41666, 0.83333, 1.250, 1.6666],
                        atol=1.0e-4))
    assert (np.allclose(rates, [0.0, 3.7286, 0.0, 0.0, 0.0], atol=1.0e-3))
Beispiel #2
0
def test_offunit():
    ffm = movie.FullFieldFlashMovie(range(120), range(240), 0.3, 0.7)
    mv = ffm.full(t_max=2.0)

    spatial_filter = GaussianSpatialFilter(translate=(120.0, 60.0),
                                           sigma=(0.615, 0.615),
                                           origin=(0.0, 0.0))
    temporal_filter = TemporalFilterCosineBump(weights=[3.441, -2.115],
                                               kpeaks=[8.269, 19.991],
                                               delays=[0.0, 0.0])
    linear_filter = SpatioTemporalFilter(spatial_filter,
                                         temporal_filter,
                                         amplitude=-1.0)
    transfer_function = ScalarTransferFunction('Heaviside(s+1.05)*(s+1.05)')

    cell = OffUnit(linear_filter, transfer_function)
    lgn = LGNModel([cell])
    results = lgn.evaluate(mv, downsample=10)
    assert (len(results) == 1)

    times = np.array(results[0][0], dtype=np.float64)
    rates = np.array(results[0][1], dtype=np.float64)

    assert (np.allclose(times, [0.0, 0.41666, 0.83333, 1.250, 1.6666],
                        atol=1.0e-4))
    assert (np.allclose(rates, [1.05, 1.2364, 1.05, 1.05, 1.05], atol=1.0e-3))
Beispiel #3
0
def test_offunit(cell_type, expected_val):
    gm = movie.GratingMovie(row_size=120, col_size=240, frame_rate=24.0)
    mv = gm.create_movie(t_max=1.0)

    cell = default_cell_loader(MockNode(), ('lgnmodel', cell_type), dynamics_params)
    assert(isinstance(cell, OffUnit))

    lgn = LGNModel([cell])
    results = lgn.evaluate(mv, downsample=5)  # Does the filtering + non-linearity on movie object m
    times = np.array(results[0][0], dtype=np.float64)
    rates = np.array(results[0][1], dtype=np.float64)

    assert(np.allclose(times, [0.0, 0.2083, 0.4167, 0.6250, 0.8333], atol=1.0e-3))
    assert(np.allclose(rates, expected_val, atol=1.0e-3))
Beispiel #4
0
def test_twosubfieldlinearcell():
    ffm = movie.FullFieldFlashMovie(range(120), range(240), 0.3, 0.7)
    mv = ffm.full(t_max=2.0)

    spatial_filter = GaussianSpatialFilter(translate=(120.0, 60.0),
                                           sigma=(0.615, 0.615),
                                           origin=(0.0, 0.0))

    son_tfiler = TemporalFilterCosineBump(
        [2.696143077048376, -1.8923936798453962],
        [37.993506826528716, 71.40822128514205], [42.0, 71.90456690180808])
    soff_tfilter = TemporalFilterCosineBump(
        [3.7309552296292257, -1.4209858354384888],
        [21.556972532016253, 51.56392683711558], [61.0, 74.85742945288372])

    linear_filter_son = SpatioTemporalFilter(spatial_filter,
                                             son_tfiler,
                                             amplitude=1.0)
    linear_filter_soff = SpatioTemporalFilter(spatial_filter,
                                              soff_tfilter,
                                              amplitude=-1.51426850536)

    two_sub_transfer_fn = MultiTransferFunction(
        (symbolic_x, symbolic_y),
        'Heaviside(x+2.0)*(x+2.0)+Heaviside(y+2.0)*(y+2.0)')

    cell = TwoSubfieldLinearCell(
        linear_filter_soff,
        linear_filter_son,
        subfield_separation=6.64946870229,
        onoff_axis_angle=249.09534316916634,
        dominant_subfield_location=(23.194207541958235, 49.44758663758982),
        transfer_function=two_sub_transfer_fn)

    lgn = LGNModel([cell])
    results = lgn.evaluate(mv, downsample=10)
    assert (len(results) == 1)

    times = np.array(results[0][0], dtype=np.float64)
    rates = np.array(results[0][1], dtype=np.float64)

    assert (np.allclose(times, [0.0, 0.41666, 0.83333, 1.250, 1.6666],
                        atol=1.0e-4))
    assert (np.allclose(rates, [4.0, 3.26931, 3.885, 4.0, 4.0], atol=1.0e-3))