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)
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
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 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)
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]))
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)
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)
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)
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()
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)