예제 #1
0
 def test_append_signal_too_little_data(self):
     apnea_predictor = ApneaDetector()
     apnea_predictor.append_signal(self.abdo_signal[0:700])
     predictions = apnea_predictor.predictions.get_predictions_as_np_array()
     np.testing.assert_almost_equal(self.abdo_signal[0:700],
                                    apnea_predictor.signal,
                                    decimal=5)
예제 #2
0
class CLI:
    def __init__(self, signal_file=None, signal_type="ABDO_RES"):
        signal_file = os.getcwd() + os.sep + signal_file
        self.edf_signal = self.readEdfFile(signal_file)
        self.signal = self.edf_signal[signal_type].to_numpy()

        self.apnea_detector = ApneaDetector()
        self.apnea_detector.append_signal(self.signal)
        predictions = self.apnea_detector.predictions
        xml = predictions.get_xml()

    def readEdfFile(self, file):
        """Reads EDF file from SHHS dataset. Will need adjustments to work for other signals
        Arguments:
            file {str} -- Path to edf file

        Returns:
            DataFrame -- Dataframe of thorax and abdominal signals, with index in deciseconds since start of recording
        """
        try:
            edf = pyedflib.EdfReader(file)
            cols = edf.getSignalLabels()

            signal = pd.DataFrame([])
            signal['THOR_RES'] = edf.readSignal(cols.index("THOR RES"))
            signal['ABDO_RES'] = edf.readSignal(cols.index("ABDO RES"))
            signal['SUM'] = signal['ABDO_RES'] + signal['THOR_RES']

        finally:
            edf._close()
            del edf

        return signal
예제 #3
0
    def __init__(self, signal_file=None, signal_type="ABDO_RES"):
        signal_file = os.getcwd() + os.sep + signal_file
        self.edf_signal = self.readEdfFile(signal_file)
        self.signal = self.edf_signal[signal_type].to_numpy()

        self.apnea_detector = ApneaDetector()
        self.apnea_detector.append_signal(self.signal)
        predictions = self.apnea_detector.predictions
        xml = predictions.get_xml()
예제 #4
0
 def test_append_signal_analyze_whole_recording(self):
     apnea_predictor = ApneaDetector()
     apnea_predictor.append_signal(self.abdo_signal)
     true_signal = self.abdo_signal
     appended_signal = apnea_predictor.signal
     np.testing.assert_almost_equal(true_signal, appended_signal, decimal=5)
     self.assertEqual(len(true_signal), apnea_predictor.signal_length)
     df = apnea_predictor.predictions.get_predictions_as_df(
         apnea_predictor.predictions.predictions)
     print(df)
예제 #5
0
    def test__get_next_unchecked_signal_not_enough_remaining_data_in_signal(
            self):
        apnea_predictor = ApneaDetector()
        data_index = 1200
        start_index = 1100

        prediction, new_index, signal_start_index = apnea_predictor._get_next_unchecked_signal(
            self.abdo_signal[:data_index], start_index)
        self.assertEqual(new_index, data_index)
        self.assertEqual(len(prediction), self.sliding_window_duration)
        self.assertListEqual(
            list(prediction),
            list(self.abdo_signal[data_index -
                                  self.sliding_window_duration:data_index]))
예제 #6
0
    def test__get_next_unchecked_signal_long_insert(self):
        apnea_predictor = ApneaDetector()
        large_index = 5000
        start_index = 0

        prediction, new_index, signal_start_index = apnea_predictor._get_next_unchecked_signal(
            self.abdo_signal[:large_index], start_index)
        self.assertEqual(new_index, self.sliding_window_overlap)
        self.assertEqual(len(prediction), self.sliding_window_duration)

        start_index = 400
        prediction, new_index, signal_start_index = apnea_predictor._get_next_unchecked_signal(
            self.abdo_signal[:large_index], start_index)
        self.assertEqual(new_index, self.sliding_window_overlap + start_index)
        self.assertEqual(len(prediction), self.sliding_window_duration)
예제 #7
0
 def test_append_signal_long(self):
     apnea_predictor = ApneaDetector()
     apnea_predictor.append_signal(self.abdo_signal[0:900])
     apnea_predictor.append_signal(self.abdo_signal[900:1500])
     apnea_predictor.append_signal(self.abdo_signal[1500:10000])
     true_signal = self.abdo_signal[0:10000]
     appended_signal = apnea_predictor.signal
     np.testing.assert_almost_equal(true_signal, appended_signal, decimal=5)
     self.assertEqual(10000, apnea_predictor.signal_length)
예제 #8
0
    def test__get_next_unchecked_signal_little_data(self):
        apnea_predictor = ApneaDetector()
        small_index = 30
        medium_index = 50
        start_index = 0

        prediction, new_index, signal_start_index = apnea_predictor._get_next_unchecked_signal(
            self.abdo_signal[:small_index], start_index)
        self.assertEqual(new_index, small_index)
        self.assertEqual(len(prediction), self.sliding_window_duration)

        prediction, new_index, signal_start_index = apnea_predictor._get_next_unchecked_signal(
            self.abdo_signal[:small_index + small_index],
            start_index + small_index)
        self.assertEqual(new_index, small_index + small_index)
        self.assertEqual(len(prediction), self.sliding_window_duration)

        prediction, new_index, signal_start_index = apnea_predictor._get_next_unchecked_signal(
            self.abdo_signal[:small_index + small_index + medium_index],
            start_index + small_index + medium_index)
        self.assertEqual(new_index, small_index + small_index + medium_index)
        self.assertEqual(len(prediction), self.sliding_window_duration)
예제 #9
0
    def test_append_signal_many_small_appends(self):
        apnea_predictor = ApneaDetector()

        i = 0
        while i < 100:
            duration = random.randrange(10, 100)
            signal = self.abdo_signal[i:i + duration]
            apnea_predictor.append_signal(signal)
            i += duration

        apnea_predictor.append_signal(self.abdo_signal[0:700])
        predictions = apnea_predictor.predictions.get_predictions_as_np_array()
예제 #10
0
    def test_append_signal_multiple_detectors(self):
        apnea_predictor_1 = ApneaDetector()
        apnea_predictor_2 = ApneaDetector()
        apnea_predictor_1.append_signal(self.abdo_signal[0:900])
        apnea_predictor_1.append_signal(self.abdo_signal[900:1500])

        apnea_predictor_2.append_signal(self.abdo_signal[0:900])
        apnea_predictor_2.append_signal(self.abdo_signal[900:1500])
        apnea_predictor_2.append_signal(self.abdo_signal[1500:10000])

        self.assertEqual(apnea_predictor_1.signal_length, 1500)
        self.assertEqual(apnea_predictor_2.signal_length, 10000)
        self.assertNotEqual(apnea_predictor_1.signal_length,
                            apnea_predictor_2.signal_length)