Ejemplo n.º 1
0
    def setUp(self):
        folder = os.path.dirname(os.path.realpath(__file__))

        time = np.load(os.path.join(folder, "data/t_test.npy"))
        V = np.load(os.path.join(folder, "data/U_test.npy"))

        self.implemented_features = [
            "nr_spikes", "time_before_first_spike", "spike_rate",
            "average_AP_overshoot", "average_AHP_depth", "average_AP_width",
            "accommodation_index"
        ]

        self.implemented_labels = {
            "nr_spikes": ["Number of spikes"],
            "spike_rate": ["Spike rate (Hz)"],
            "time_before_first_spike": ["Time (ms)"],
            "accommodation_index": ["Accommodation index"],
            "average_AP_overshoot": ["Voltage (mV)"],
            "average_AHP_depth": ["Voltage (mV)"],
            "average_AP_width": ["Time (ms)"]
        }

        self.features = SpikingFeatures(verbose_level="error")

        self.info = {"stimulus_start": time[0], "stimulus_end": time[-1]}

        self.time, self.spikes, info = self.features.preprocess(
            time, V, self.info)
Ejemplo n.º 2
0
    def test_calculate_all_features_normalize(self):
        self.features = SpikingFeatures(logger_level="error", threshold=0.4, end_threshold=-0.1)

        self.info = {"stimulus_start": self.t[0], "stimulus_end": self.t[-1]}

        self.time, self.spikes, info = self.features.preprocess(self.t, self.V, self.info)

        result = self.features.calculate_all_features(self.t, self.V, self.info)
        self.assertEqual(set(result.keys()),
                         set(self.implemented_features))
Ejemplo n.º 3
0
    def test_feature_functions_base(self):
        def feature_function(time, values):
            return "time", "values"

        def feature_function2(time, values):
            return "time2", "values2"

        implemented_features = [
            "nr_spikes", "time_before_first_spike", "spike_rate",
            "average_AP_overshoot", "average_AHP_depth", "average_AP_width",
            "accommodation_index"
        ]

        self.runmodel.features = SpikingFeatures(
            [feature_function, feature_function2])
        self.assertIsInstance(self.runmodel.features, SpikingFeatures)

        time, values = self.runmodel.features.feature_function(None, None)
        self.assertEqual(time, "time")
        self.assertEqual(values, "values")

        time, values = self.runmodel.features.feature_function2(None, None)
        self.assertEqual(time, "time2")
        self.assertEqual(values, "values2")

        self.assertEqual(
            set(self.runmodel.features.features_to_run),
            set(["feature_function", "feature_function2"] +
                implemented_features))
Ejemplo n.º 4
0
    def test_initLabels(self):
        features = SpikingFeatures(labels={"nr_spikes": ["changed"],
                                           "new": ["new"]},
                                   logger_level="error")

        labels = {"nr_spikes": ["changed"],
                  "new": ["new"],
                  "spike_rate": ["Spike rate (1/ms)"],
                  "time_before_first_spike": ["Time (ms)"],
                  "accommodation_index": ["Accommodation index"],
                  "average_AP_overshoot": ["Voltage (mV)"],
                  "average_AHP_depth": ["Voltage (mV)"],
                  "average_AP_width": ["Time (ms)"],
                  "average_duration": ["Time (ms)"]
                  }

        self.assertEqual(features.labels, labels)
Ejemplo n.º 5
0
 def test_adaptive_all(self):
     features = SpikingFeatures(adaptive="all")
     self.assertEqual(set(features.adaptive),
                      set(self.implemented_features))
Ejemplo n.º 6
0
 def test_features_to_run_all(self):
     features = SpikingFeatures(features_to_run="all")
     self.assertEqual(set(features.features_to_run),
                      set(self.implemented_features))
Ejemplo n.º 7
0
    def test_initNone(self):
        self.features = SpikingFeatures()

        self.assertIsInstance(self.features, SpikingFeatures)
        self.assertIsNone(self.features.spikes)
Ejemplo n.º 8
0
class TestSpikingFeatures(unittest.TestCase):
    def setUp(self):
        folder = os.path.dirname(os.path.realpath(__file__))

        time = np.load(os.path.join(folder, "data/t_test.npy"))
        V = np.load(os.path.join(folder, "data/U_test.npy"))

        self.implemented_features = [
            "nr_spikes", "time_before_first_spike", "spike_rate",
            "average_AP_overshoot", "average_AHP_depth", "average_AP_width",
            "accommodation_index"
        ]

        self.implemented_labels = {
            "nr_spikes": ["Number of spikes"],
            "spike_rate": ["Spike rate (Hz)"],
            "time_before_first_spike": ["Time (ms)"],
            "accommodation_index": ["Accommodation index"],
            "average_AP_overshoot": ["Voltage (mV)"],
            "average_AHP_depth": ["Voltage (mV)"],
            "average_AP_width": ["Time (ms)"]
        }

        self.features = SpikingFeatures(verbose_level="error")

        self.info = {"stimulus_start": time[0], "stimulus_end": time[-1]}

        self.time, self.spikes, info = self.features.preprocess(
            time, V, self.info)

    def test_initNone(self):
        self.features = SpikingFeatures()

        self.assertIsInstance(self.features, SpikingFeatures)
        self.assertIsNone(self.features.spikes)

    def test_init(self):
        self.assertIsInstance(self.features, SpikingFeatures)
        self.assertIsNotNone(self.features.spikes)
        self.assertEqual(self.features.spikes.nr_spikes, 12)
        self.assertEqual(self.features.labels, self.implemented_labels)

    def test_initLabels(self):
        features = SpikingFeatures(labels={
            "nr_spikes": ["changed"],
            "new": ["new"]
        })

        labels = {
            "nr_spikes": ["changed"],
            "new": ["new"],
            "spike_rate": ["Spike rate (Hz)"],
            "time_before_first_spike": ["Time (ms)"],
            "accommodation_index": ["Accommodation index"],
            "average_AP_overshoot": ["Voltage (mV)"],
            "average_AHP_depth": ["Voltage (mV)"],
            "average_AP_width": ["Time (ms)"]
        }

        self.assertEqual(features.labels, labels)

    def test_features_to_run_all(self):
        features = SpikingFeatures(features_to_run="all")
        self.assertEqual(set(features.features_to_run),
                         set(self.implemented_features))

    def test_adaptive_all(self):
        features = SpikingFeatures(adaptive="all")
        self.assertEqual(set(features.adaptive),
                         set(self.implemented_features))

    def test_implemented_features(self):
        self.assertEqual(set(self.features.implemented_features()),
                         set(self.implemented_features))

    def test_nr_spikes(self):
        self.assertEqual(
            self.features.nr_spikes(self.time, self.spikes, self.info),
            (None, 12))

    def test_nr_spikes_no_stimulus(self):
        info = {"stimulus_start": -2, "stimulus_end": -1}
        self.assertEqual(self.features.nr_spikes(self.time, self.spikes, info),
                         (None, 0))

    def test_nr_spikes_error(self):
        self.features.strict = True
        with self.assertRaises(ValueError):
            self.features.nr_spikes(self.time, self.spikes, {})
            self.features.nr_spikes(self.time, self.spikes,
                                    {"stimulus_start": 1})
            self.features.nr_spikes(self.time, self.spikes,
                                    {"stimulus_end": 1})
            self.features.nr_spikes(self.time, self.spikes, {
                "stimulus_end": 1,
                "stimulus_start": -1
            })

    def test_time_before_first_spike(self):
        self.assertGreater(
            self.features.time_before_first_spike(self.time, self.spikes,
                                                  self.info)[1], 10)

    def test_time_before_first_spikeNone(self):
        self.features.spikes.nr_spikes = 0
        self.assertEqual(
            self.features.time_before_first_spike(self.time, self.spikes,
                                                  self.info), (None, None))

    def test_time_before_first_spike_no_strict(self):
        self.features.strict = False
        self.features.spikes.nr_spikes = 0
        self.assertEqual(
            self.features.time_before_first_spike(self.time, self.spikes, {}),
            (None, None))

    def test_time_before_first_spike_error(self):
        with self.assertRaises(ValueError):
            self.features.time_before_first_spike(self.time, self.spikes, {})
            self.features.time_before_first_spike(self.time, self.spikes,
                                                  {"stimulus_end": 1})

    def test_spike_rate(self):
        self.assertEqual(
            self.features.spike_rate(self.time, self.spikes, self.info),
            (None, 0.12))

    def test_spike_rate_no_strict(self):
        self.features.strict = False
        self.assertEqual(self.features.spike_rate(self.time, self.spikes, {}),
                         (None, 0.12))

    def test_spike_rateNone(self):
        self.features.spikes.nr_spikes = -1
        self.assertEqual(
            self.features.spike_rate(self.time, self.spikes, self.info),
            (None, None))

    def test_spike_rate_error(self):
        with self.assertRaises(ValueError):
            self.features.spike_rate(self.time, self.spikes, {})
            self.features.spike_rate(self.time, self.spikes,
                                     {"stimulus_start": 1})
            self.features.spike_rate(self.time, self.spikes,
                                     {"stimulus_end": 1})
            self.features.spike_rate(self.time, self.spikes, {
                "stimulus_end": 1,
                "stimulus_start": -1
            })

    def test_average_AP_overshoot(self):
        self.assertEqual(
            self.features.average_AP_overshoot(self.time, self.spikes,
                                               self.info), (None, 30))

    def test_average_AP_overshootNone(self):
        self.features.spikes.nr_spikes = 0
        self.assertEqual(
            self.features.average_AP_overshoot(self.time, self.spikes,
                                               self.info), (None, None))

    # TODO Find correct testime, this is a rough bound only
    def test_average_AHP_depth(self):
        self.features.average_AHP_depth(self.time, self.spikes, self.info)
        self.assertLess(
            self.features.average_AHP_depth(self.time, self.spikes,
                                            self.info)[1], 0)

    def test_average_AHP_depthNone(self):
        self.features.spikes.nr_spikes = 0
        self.assertEqual(
            self.features.average_AHP_depth(self.time, self.spikes, self.info),
            (None, None))

    # TODO Find correct testime, this is a rough bound only
    def test_average_AP_width(self):
        self.assertLess(
            self.features.average_AP_width(self.time, self.spikes,
                                           self.info)[1], 5)

    def test_average_AP_widthNone(self):
        self.features.spikes.nr_spikes = 0
        self.assertEqual(
            self.features.average_AP_width(self.time, self.spikes, self.info),
            (None, None))

    # TODO Find correct testime, this is a rough bound only
    def test_accommodation_index(self):
        self.assertIsNotNone(
            self.features.accommodation_index(self.time, self.spikes,
                                              self.info)[1])

    def test_accommodation_indexNone(self):
        self.features.spikes.nr_spikes = 0
        self.assertEqual(
            self.features.accommodation_index(self.time, self.spikes,
                                              self.info), (None, None))

    def test_calculate_all_features(self):
        result = self.features.calculate_all_features(self.time, self.spikes,
                                                      self.info)
        self.assertEqual(set(result.keys()), set(self.implemented_features))

    def test_reference_feature(self):
        time, values = self.features.reference_feature(1, 1, 1)

        self.assertIsNone(time)
        self.assertIsNone(values)
Ejemplo n.º 9
0
 def test_interpolate_all(self):
     features = SpikingFeatures(interpolate="all", logger_level="error")
     self.assertEqual(set(features.interpolate),
                      set(self.implemented_features))
Ejemplo n.º 10
0
    def test_initNone(self):
        self.features = SpikingFeatures(logger_level="error")

        self.assertIsInstance(self.features, SpikingFeatures)
        self.assertIsNone(self.features.spikes)