123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808 |
- """
- Tests of neo.io.exampleio
- """
- import warnings
- import unittest
- import quantities as pq
- import numpy as np
- from neo.io.nestio import ColumnIO
- from neo.io.nestio import NestIO
- from neo.test.iotest.common_io_test import BaseTestIO
- from neo.test.iotest.tools import get_test_file_full_path
- class TestNestIO_Analogsignals(BaseTestIO, unittest.TestCase):
- ioclass = NestIO
- files_to_test = []
- files_to_download = ['0gid-1time-2gex-3Vm-1261-0.dat',
- '0gid-1time-2gex-1262-0.dat',
- '0gid-1time-2Vm-3gex-4gin-1260-0.dat',
- '0gid-1time-2Vm-3Iex-4Iin-1264-0.dat',
- '0gid-1time-2Vm-1259-0.dat',
- '0gid-1time-1256-0.gdf',
- '0gid-1time_in_steps-2Vm-1263-0.dat',
- '0gid-1time_in_steps-1258-0.gdf',
- '0time-1255-0.gdf',
- '0time_in_steps-1257-0.gdf',
- 'brunel-delta-nest_mod.py',
- 'N1-0gid-1time-2Vm-1265-0.dat',
- 'N1-0time-1Vm-1266-0.dat',
- 'N1-0Vm-1267-0.dat']
- def test_read_analogsignal(self):
- """
- Tests reading files in the 2 different formats:
- - with GIDs, with times as floats
- - with GIDs, with time as integer
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-2gex-3Vm-1261-0.dat',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- r.read_analogsignal(gid=1, t_stop=1000. * pq.ms,
- sampling_period=pq.ms, lazy=False,
- id_column=0, time_column=1,
- value_column=2, value_type='V_m')
- r.read_segment(gid_list=[1], t_stop=1000. * pq.ms,
- sampling_period=pq.ms, lazy=False, id_column_dat=0,
- time_column_dat=1, value_columns_dat=2,
- value_types='V_m')
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time_in_steps-2Vm-1263-0.dat',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- r.read_analogsignal(gid=1, t_stop=1000. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'),
- sampling_period=pq.ms, lazy=False,
- id_column=0, time_column=1,
- value_column=2, value_type='V_m')
- r.read_segment(gid_list=[1], t_stop=1000. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'),
- sampling_period=pq.ms, lazy=False, id_column_dat=0,
- time_column_dat=1, value_columns_dat=2,
- value_types='V_m')
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-2Vm-1259-0.dat',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- r.read_analogsignal(gid=1, t_stop=1000. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'),
- sampling_period=pq.ms, lazy=False,
- id_column=0, time_column=1,
- value_column=2, value_type='V_m')
- r.read_segment(gid_list=[1], t_stop=1000. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'),
- sampling_period=pq.ms, lazy=False, id_column_dat=0,
- time_column_dat=1, value_columns_dat=2,
- value_types='V_m')
- def test_id_column_none_multiple_neurons(self):
- """
- Tests if function correctly raises an error if the user tries to read
- from a file which does not contain unit IDs, but data for multiple
- units.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0time-1255-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- with self.assertRaises(ValueError):
- r.read_analogsignal(t_stop=1000. * pq.ms, lazy=False,
- sampling_period=pq.ms,
- id_column=None, time_column=0,
- value_column=1)
- r.read_segment(t_stop=1000. * pq.ms, lazy=False,
- sampling_period=pq.ms, id_column_gdf=None,
- time_column_gdf=0)
- def test_values(self):
- """
- Tests if the function returns the correct values.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-2gex-3Vm-1261-0.dat',
- directory=self.local_test_dir, clean=False)
- id_to_test = 1
- r = NestIO(filenames=filename)
- seg = r.read_segment(gid_list=[id_to_test],
- t_stop=1000. * pq.ms,
- sampling_period=pq.ms, lazy=False,
- id_column_dat=0, time_column_dat=1,
- value_columns_dat=2, value_types='V_m')
- dat = np.loadtxt(filename)
- target_data = dat[:, 2][np.where(dat[:, 0] == id_to_test)]
- target_data = target_data[:, None]
- st = seg.analogsignals[0]
- np.testing.assert_array_equal(st.magnitude, target_data)
- def test_read_segment(self):
- """
- Tests if signals are correctly stored in a segment.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-2gex-1262-0.dat',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- id_list_to_test = range(1, 10)
- seg = r.read_segment(gid_list=id_list_to_test,
- t_stop=1000. * pq.ms,
- sampling_period=pq.ms, lazy=False,
- id_column_dat=0, time_column_dat=1,
- value_columns_dat=2, value_types='V_m')
- self.assertTrue(len(seg.analogsignals) == len(id_list_to_test))
- id_list_to_test = []
- seg = r.read_segment(gid_list=id_list_to_test,
- t_stop=1000. * pq.ms,
- sampling_period=pq.ms, lazy=False,
- id_column_dat=0, time_column_dat=1,
- value_columns_dat=2, value_types='V_m')
- self.assertEqual(len(seg.analogsignals), 50)
- def test_read_block(self):
- """
- Tests if signals are correctly stored in a block.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-2gex-1262-0.dat',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- id_list_to_test = range(1, 10)
- blk = r.read_block(gid_list=id_list_to_test,
- t_stop=1000. * pq.ms,
- sampling_period=pq.ms, lazy=False,
- id_column_dat=0, time_column_dat=1,
- value_columns_dat=2, value_types='V_m')
- self.assertTrue(len(blk.segments[0].analogsignals) == len(id_list_to_test))
- def test_wrong_input(self):
- """
- Tests two cases of wrong user input, namely
- - User does not specify a value column
- - User does not make any specifications
- - User does not define sampling_period as a unit
- - User specifies a non-default value type without
- specifying a value_unit
- - User specifies t_start < 1.*sampling_period
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-2gex-1262-0.dat',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- with self.assertRaises(ValueError):
- r.read_segment(t_stop=1000. * pq.ms, lazy=False,
- id_column_dat=0, time_column_dat=1)
- with self.assertRaises(ValueError):
- r.read_segment()
- with self.assertRaises(ValueError):
- r.read_segment(gid_list=[1], t_stop=1000. * pq.ms,
- sampling_period=1. * pq.ms, lazy=False,
- id_column_dat=0, time_column_dat=1,
- value_columns_dat=2, value_types='V_m')
- with self.assertRaises(ValueError):
- r.read_segment(gid_list=[1], t_stop=1000. * pq.ms,
- sampling_period=pq.ms, lazy=False,
- id_column_dat=0, time_column_dat=1,
- value_columns_dat=2, value_types='U_mem')
- def test_t_start_t_stop(self):
- """
- Test for correct t_start and t_stop values of AnalogSignalArrays.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-2gex-1262-0.dat',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- t_start_targ = 450. * pq.ms
- t_stop_targ = 480. * pq.ms
- seg = r.read_segment(gid_list=[], t_start=t_start_targ,
- t_stop=t_stop_targ, lazy=False,
- id_column_dat=0, time_column_dat=1,
- value_columns_dat=2, value_types='V_m')
- anasigs = seg.analogsignals
- for anasig in anasigs:
- self.assertTrue(anasig.t_start == t_start_targ)
- self.assertTrue(anasig.t_stop == t_stop_targ)
- def test_notimeid(self):
- """
- Test for warning, when no time column id was provided.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-2gex-1262-0.dat',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- t_start_targ = 450. * pq.ms
- t_stop_targ = 460. * pq.ms
- sampling_period = pq.CompoundUnit('5*ms')
- with warnings.catch_warnings(record=True) as w:
- # Cause all warnings to always be triggered.
- warnings.simplefilter("always")
- seg = r.read_segment(gid_list=[], t_start=t_start_targ,
- sampling_period=sampling_period,
- t_stop=t_stop_targ, lazy=False,
- id_column_dat=0, time_column_dat=None,
- value_columns_dat=2, value_types='V_m')
- # Verify number and content of warning
- self.assertEqual(len(w), 1)
- self.assertIn("no time column id", str(w[0].message))
- sts = seg.analogsignals
- for st in sts:
- self.assertTrue(st.t_start == 1 * 5 * pq.ms)
- self.assertTrue(
- st.t_stop == len(st) * sampling_period + 1 * 5 * pq.ms)
- def test_multiple_value_columns(self):
- """
- Test for simultaneous loading of multiple columns from dat file.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-2Vm-3Iex-4Iin-1264-0.dat',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- sampling_period = pq.CompoundUnit('5*ms')
- seg = r.read_segment(gid_list=[1001],
- value_columns_dat=[2, 3],
- sampling_period=sampling_period)
- anasigs = seg.analogsignals
- self.assertEqual(len(anasigs), 2)
- def test_single_gid(self):
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='N1-0gid-1time-2Vm-1265-0.dat',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- anasig = r.read_analogsignal(gid=1, t_stop=1000. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'),
- sampling_period=pq.ms, lazy=False,
- id_column=0, time_column=1,
- value_column=2, value_type='V_m')
- assert anasig.annotations['id'] == 1
- def test_no_gid(self):
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='N1-0time-1Vm-1266-0.dat',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- anasig = r.read_analogsignal(gid=None, t_stop=1000. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'),
- sampling_period=pq.ms, lazy=False,
- id_column=None, time_column=0,
- value_column=1, value_type='V_m')
- self.assertEqual(anasig.annotations['id'], None)
- self.assertEqual(len(anasig), 19)
- def test_no_gid_no_time(self):
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='N1-0Vm-1267-0.dat',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- anasig = r.read_analogsignal(gid=None,
- sampling_period=pq.ms, lazy=False,
- id_column=None, time_column=None,
- value_column=0, value_type='V_m')
- self.assertEqual(anasig.annotations['id'], None)
- self.assertEqual(len(anasig), 19)
- class TestNestIO_Spiketrains(BaseTestIO, unittest.TestCase):
- ioclass = NestIO
- files_to_test = []
- files_to_download = []
- def test_read_spiketrain(self):
- """
- Tests reading files in the 4 different formats:
- - without GIDs, with times as floats
- - without GIDs, with times as integers in time steps
- - with GIDs, with times as floats
- - with GIDs, with times as integers in time steps
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0time-1255-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- r.read_spiketrain(t_start=400. * pq.ms, t_stop=500. * pq.ms, lazy=False,
- id_column=None, time_column=0)
- r.read_segment(t_start=400. * pq.ms, t_stop=500. * pq.ms, lazy=False,
- id_column_gdf=None, time_column_gdf=0)
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0time_in_steps-1257-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- r.read_spiketrain(t_start=400. * pq.ms, t_stop=500. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'), lazy=False,
- id_column=None, time_column=0)
- r.read_segment(t_start=400. * pq.ms, t_stop=500. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'), lazy=False,
- id_column_gdf=None, time_column_gdf=0)
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- r.read_spiketrain(gdf_id=1, t_start=400. * pq.ms, t_stop=500. * pq.ms,
- lazy=False, id_column_gdf=0, time_column_gdf=1)
- r.read_segment(gid_list=[1], t_start=400. * pq.ms, t_stop=500. * pq.ms,
- lazy=False, id_column_gdf=0, time_column_gdf=1)
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time_in_steps-1258-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- r.read_spiketrain(gdf_id=1, t_start=400. * pq.ms, t_stop=500. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'), lazy=False,
- id_column=0, time_column=1)
- r.read_segment(gid_list=[1], t_start=400. * pq.ms, t_stop=500. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'), lazy=False,
- id_column_gdf=0, time_column_gdf=1)
- def test_read_integer(self):
- """
- Tests if spike times are actually stored as integers if they are stored
- in time steps in the file.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0time_in_steps-1257-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- st = r.read_spiketrain(gdf_id=None, t_start=400. * pq.ms,
- t_stop=500. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'),
- lazy=False, id_column=None, time_column=0)
- self.assertTrue(st.magnitude.dtype == np.int32)
- seg = r.read_segment(gid_list=[None], t_start=400. * pq.ms,
- t_stop=500. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'),
- lazy=False, id_column_gdf=None, time_column_gdf=0)
- sts = seg.spiketrains
- self.assertTrue(all([st.magnitude.dtype == np.int32 for st in sts]))
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time_in_steps-1258-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(
- filenames=filename)
- st = r.read_spiketrain(gdf_id=1, t_start=400. * pq.ms,
- t_stop=500. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'),
- lazy=False, id_column=0, time_column=1)
- self.assertTrue(st.magnitude.dtype == np.int32)
- seg = r.read_segment(gid_list=[1], t_start=400. * pq.ms,
- t_stop=500. * pq.ms,
- time_unit=pq.CompoundUnit('0.1*ms'),
- lazy=False, id_column_gdf=0, time_column_gdf=1)
- sts = seg.spiketrains
- self.assertTrue(all([st.magnitude.dtype == np.int32 for st in sts]))
- def test_read_float(self):
- """
- Tests if spike times are stored as floats if they
- are stored as floats in the file.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- st = r.read_spiketrain(gdf_id=1, t_start=400. * pq.ms,
- t_stop=500. * pq.ms,
- lazy=False, id_column=0, time_column=1)
- self.assertTrue(st.magnitude.dtype == np.float)
- seg = r.read_segment(gid_list=[1], t_start=400. * pq.ms,
- t_stop=500. * pq.ms,
- lazy=False, id_column_gdf=0, time_column_gdf=1)
- sts = seg.spiketrains
- self.assertTrue(all([s.magnitude.dtype == np.float for s in sts]))
- def test_values(self):
- """
- Tests if the routine loads the correct numbers from the file.
- """
- id_to_test = 1
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- seg = r.read_segment(gid_list=[id_to_test],
- t_start=400. * pq.ms,
- t_stop=500. * pq.ms, lazy=False,
- id_column_gdf=0, time_column_gdf=1)
- dat = np.loadtxt(filename)
- target_data = dat[:, 1][np.where(dat[:, 0] == id_to_test)]
- st = seg.spiketrains[0]
- np.testing.assert_array_equal(st.magnitude, target_data)
- def test_read_segment(self):
- """
- Tests if spiketrains are correctly stored in a segment.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- id_list_to_test = range(1, 10)
- seg = r.read_segment(gid_list=id_list_to_test, t_start=400. * pq.ms,
- t_stop=500. * pq.ms, lazy=False,
- id_column_gdf=0, time_column_gdf=1)
- self.assertTrue(len(seg.spiketrains) == len(id_list_to_test))
- id_list_to_test = []
- seg = r.read_segment(gid_list=id_list_to_test, t_start=400. * pq.ms,
- t_stop=500. * pq.ms, lazy=False,
- id_column_gdf=0, time_column_gdf=1)
- self.assertTrue(len(seg.spiketrains) == 50)
- def test_read_segment_accepts_range(self):
- """
- Tests if spiketrains can be retrieved by specifying a range of GDF IDs.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- seg = r.read_segment(gid_list=(10, 39), t_start=400. * pq.ms,
- t_stop=500. * pq.ms, lazy=False,
- id_column_gdf=0, time_column_gdf=1)
- self.assertEqual(len(seg.spiketrains), 30)
- def test_read_segment_range_is_reasonable(self):
- """
- Tests if error is thrown correctly, when second entry is smaller than
- the first one of the range.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- seg = r.read_segment(gid_list=(10, 10), t_start=400. * pq.ms,
- t_stop=500. * pq.ms, lazy=False,
- id_column_gdf=0, time_column_gdf=1)
- self.assertEqual(len(seg.spiketrains), 1)
- with self.assertRaises(ValueError):
- r.read_segment(gid_list=(10, 9), t_start=400. * pq.ms,
- t_stop=500. * pq.ms, lazy=False,
- id_column_gdf=0, time_column_gdf=1)
- def test_read_spiketrain_annotates(self):
- """
- Tests if correct annotation is added when reading a spike train.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- ID = 7
- st = r.read_spiketrain(gdf_id=ID, t_start=400. * pq.ms,
- t_stop=500. * pq.ms)
- self.assertEqual(ID, st.annotations['id'])
- def test_read_segment_annotates(self):
- """
- Tests if correct annotation is added when reading a segment.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- IDs = (5, 11)
- sts = r.read_segment(gid_list=(5, 11), t_start=400. * pq.ms,
- t_stop=500. * pq.ms)
- for ID in np.arange(5, 12):
- self.assertEqual(ID, sts.spiketrains[ID - 5].annotations['id'])
- def test_adding_custom_annotation(self):
- """
- Tests if custom annotation is correctly added.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- st = r.read_spiketrain(gdf_id=0, t_start=400. * pq.ms,
- t_stop=500. * pq.ms,
- layer='L23', population='I')
- self.assertEqual(0, st.annotations.pop('id'))
- self.assertEqual('L23', st.annotations.pop('layer'))
- self.assertEqual('I', st.annotations.pop('population'))
- self.assertEqual({}, st.annotations)
- def test_wrong_input(self):
- """
- Tests two cases of wrong user input, namely
- - User does not specify neuron IDs although the file contains IDs.
- - User does not make any specifications.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- with self.assertRaises(ValueError):
- r.read_segment(t_start=400. * pq.ms, t_stop=500. * pq.ms,
- lazy=False,
- id_column_gdf=0, time_column_gdf=1)
- with self.assertRaises(ValueError):
- r.read_segment()
- def test_t_start_t_stop(self):
- """
- Tests if the t_start and t_stop arguments are correctly processed.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- t_stop_targ = 490. * pq.ms
- t_start_targ = 410. * pq.ms
- seg = r.read_segment(gid_list=[], t_start=t_start_targ,
- t_stop=t_stop_targ, lazy=False,
- id_column_gdf=0, time_column_gdf=1)
- sts = seg.spiketrains
- self.assertTrue(np.max([np.max(st.magnitude) for st in sts
- if len(st) > 0])
- < t_stop_targ.rescale(sts[0].times.units).magnitude)
- self.assertTrue(np.min([np.min(st.magnitude) for st in sts
- if len(st) > 0])
- >= t_start_targ.rescale(sts[0].times.units).magnitude)
- def test_t_start_undefined_raises_error(self):
- """
- Tests if undefined t_start, i.e., t_start=None raises error.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- with self.assertRaises(ValueError):
- r.read_spiketrain(gdf_id=1, t_stop=500. * pq.ms, lazy=False,
- id_column=0, time_column=1)
- with self.assertRaises(ValueError):
- r.read_segment(gid_list=[1, 2, 3], t_stop=500. * pq.ms, lazy=False,
- id_column_gdf=0, time_column_gdf=1)
- def test_t_stop_undefined_raises_error(self):
- """
- Tests if undefined t_stop, i.e., t_stop=None raises error.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- with self.assertRaises(ValueError):
- r.read_spiketrain(gdf_id=1, t_start=400. * pq.ms, lazy=False,
- id_column=0, time_column=1)
- with self.assertRaises(ValueError):
- r.read_segment(gid_list=[1, 2, 3], t_start=400. * pq.ms, lazy=False,
- id_column_gdf=0, time_column_gdf=1)
- def test_gdf_id_illdefined_raises_error(self):
- """
- Tests if ill-defined gdf_id in read_spiketrain (i.e., None, list, or
- empty list) raises error.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- with self.assertRaises(ValueError):
- r.read_spiketrain(gdf_id=[], t_start=400. * pq.ms,
- t_stop=500. * pq.ms)
- with self.assertRaises(ValueError):
- r.read_spiketrain(gdf_id=[1], t_start=400. * pq.ms,
- t_stop=500. * pq.ms)
- with self.assertRaises(ValueError):
- r.read_spiketrain(t_start=400. * pq.ms, t_stop=500. * pq.ms)
- def test_read_segment_can_return_empty_spiketrains(self):
- """
- Tests if read_segment makes sure that only non-zero spike trains are
- returned.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- seg = r.read_segment(gid_list=[], t_start=400.4 * pq.ms,
- t_stop=400.5 * pq.ms)
- for st in seg.spiketrains:
- self.assertEqual(st.size, 0)
- def test_read_spiketrain_can_return_empty_spiketrain(self):
- """
- Tests if read_spiketrain returns an empty SpikeTrain if no spikes are in
- time range.
- """
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-1256-0.gdf',
- directory=self.local_test_dir, clean=False)
- r = NestIO(filenames=filename)
- st = r.read_spiketrain(gdf_id=0, t_start=400. * pq.ms,
- t_stop=410. * pq.ms)
- self.assertEqual(st.size, 0)
- class TestNestIO_multiple_signal_types(BaseTestIO, unittest.TestCase):
- ioclass = NestIO
- files_to_test = []
- files_to_download = ['0gid-1time-2gex-3Vm-1261-0.dat',
- '0gid-1time_in_steps-1258-0.gdf']
- def test_read_analogsignal_and_spiketrain(self):
- """
- Test if spiketrains and analogsignals can be read simultaneously
- using read_segment
- """
- files = ['0gid-1time-2gex-3Vm-1261-0.dat',
- '0gid-1time_in_steps-1258-0.gdf']
- filenames = [get_test_file_full_path(ioclass=NestIO, filename=file,
- directory=self.local_test_dir,
- clean=False)
- for file in files]
- r = NestIO(filenames=filenames)
- seg = r.read_segment(gid_list=[], t_start=400 * pq.ms,
- t_stop=600 * pq.ms,
- id_column_gdf=0, time_column_gdf=1,
- id_column_dat=0, time_column_dat=1,
- value_columns_dat=2)
- self.assertEqual(len(seg.spiketrains), 50)
- self.assertEqual(len(seg.analogsignals), 50)
- class TestColumnIO(BaseTestIO, unittest.TestCase):
- ioclass = NestIO
- files_to_download = ['0gid-1time-2Vm-3gex-4gin-1260-0.dat']
- def setUp(self):
- BaseTestIO.setUp(self)
- filename = get_test_file_full_path(
- ioclass=NestIO,
- filename='0gid-1time-2Vm-3gex-4gin-1260-0.dat',
- directory=self.local_test_dir, clean=False)
- self.testIO = ColumnIO(filename=filename)
- def test_no_arguments(self):
- """
- Test if data can be read using the default keyword arguments.
- """
- columns = self.testIO.get_columns()
- expected = self.testIO.data
- np.testing.assert_array_equal(columns, expected)
- def test_single_column_id(self):
- """
- Test if the column_ids keywords works properly.
- """
- column = self.testIO.get_columns(column_ids=1)
- expected = self.testIO.data[:, [1]]
- np.testing.assert_array_equal(column, expected)
- def test_multiple_column_ids(self):
- """
- Test if multiple columns can be read at the same time.
- """
- columns = self.testIO.get_columns(column_ids=range(2))
- expected = self.testIO.data[:, [0, 1]]
- np.testing.assert_array_equal(columns, expected)
- def test_no_condition(self):
- """
- Test if a missing condition function leads to a warning
- """
- with warnings.catch_warnings(record=True) as w:
- # Cause all warnings to always be triggered.
- warnings.simplefilter("always")
- self.testIO.get_columns(condition_column=0)
- # Verify number and content of warning
- assert len(w) == 1
- assert "no condition" in str(w[-1].message)
- def test_no_condition_column(self):
- """
- Test if a missing condition column leads to an error
- """
- with self.assertRaises(ValueError) as context:
- self.testIO.get_columns(condition=lambda x: True)
- self.assertTrue('no condition_column ID provided' in
- str(context.exception))
- def test_correct_condition_selection(self):
- """
- Test if combination of condition function and condition_column works
- properly.
- """
- condition_column = 0
- def condition_function(x): return x > 10
- result = self.testIO.get_columns(condition=condition_function,
- condition_column=0)
- selected_ids = np.where(condition_function(self.testIO.data[:,
- condition_column]))[0]
- expected = self.testIO.data[selected_ids, :]
- np.testing.assert_array_equal(result, expected)
- assert all(condition_function(result[:, condition_column]))
- def test_sorting(self):
- """
- Test if presorting of columns work properly.
- """
- result = self.testIO.get_columns(sorting_columns=0)
- assert len(result) > 0
- assert all(np.diff(result[:, 0]) >= 0)
- if __name__ == "__main__":
- unittest.main()
|