Exemplo n.º 1
0
def export_json():
    """
    Reads all csv files and writes json file with all object attributes

    """
    allcsvfiles = glob('test_data/*.csv')

    for i, csvfile in enumerate(allcsvfiles):
        if csvfile != 'test_data/test_data30.csv':
            obj = EcgData(filename=csvfile, data=collect_data(csvfile))
            filename = os.path.splitext(csvfile)[0]
            jsonfile = filename + '.json'
            print(jsonfile)
            data = {
                'mean_hr_bpm': [obj.mean_hr_bpm],
                'voltage_extremes':
                [obj.voltage_extremes[0], obj.voltage_extremes[1]],
                'duration': [obj.duration],
                'number of beats in the recording': [obj.num_beats],
                'times that beats occurred': [obj.beats.tolist()],
            }
            print(data)

            with open(jsonfile, 'w') as fp:
                json.dump(data, fp)
    pass
Exemplo n.º 2
0
def test_beats():
    logger.debug('Begin testing get_beat_times')
    test_file_numbers = [1, 3, 21, 31]
    filename_array = [None] * len(test_file_numbers)
    object_list = [None] * len(test_file_numbers)
    figures = [None] * len(test_file_numbers)
    for i, num in enumerate(test_file_numbers):
        filename_array[i] = 'test_data/test_data{}.csv'.format(num)
        object_list[i] = EcgData(filename=filename_array[i], data=collect_data(filename_array[i]))
        (beat_times, output_beat_times, peaks_index, new_peaks_index) = object_list[i].get_beat_times()
        logger.debug('Test the first 10 beat times for file {0}, expected output: {1}, test output: {2}'.
                     format(num, output_beat_times[:10], beat_times[:10]))
        assert beat_times[:10] == pytest.approx(output_beat_times[:10], abs=0.3)

        # figures[i] = plt.figure(i)
        # plt.plot(obj.data[:, 0], obj.data[:, 1])
        # plt.scatter(output_beat_times[:10], obj.data[:, 1][new_peaks_index[:10]], color='red')
        # plt.scatter(beat_times[:10], obj.data[:, 1][peaks_index[:10]], color='blue')
        # plt.title('file{0}, avg error = {1}'.format(test_file_numbers[i] +
        # 1, np.average(output_beat_times[:10] - beat_times[:10])))
        #
        # figures[i].show()
        # figures[i].savefig('plots/BeatTime{}.png'.format(test_file_numbers[i] + 1))

        logger.debug('Complete testing duration')
Exemplo n.º 3
0
def test_num_beats():
    logger.debug('Begin testing number of beats')
    output_beats = [34, 34, 35, 44, 19, 34, 19]
    test_file_numbers = [1, 3, 5, 10, 16, 28, 32]
    filename_array = [None] * len(test_file_numbers)
    for i, num in enumerate(test_file_numbers):
        filename_array[i] = 'test_data/test_data{}.csv'.format(num)

    object_list = [EcgData(filename=x, data=collect_data(x)) for x in filename_array]
    print(object_list)
    for i, obj in enumerate(object_list):
        (samples, acorr_peaks_index, peaks_index, num_beats) = obj.autocorrelate()
        logger.debug('Number-of-beats test for file {0}, expected output: {1} +/- 5, test output: {2}'.
                     format(i + 1, output_beats[i], num_beats))
        assert num_beats == pytest.approx(output_beats[i], abs=3.)
    logger.debug('Complete testing number-of-beats calculations')
Exemplo n.º 4
0
def test_voltage_extremes():
    logger.debug('Begin testing voltage extremes')
    output_extremes = [(-0.68, 1.05), (-0.735, 0.955), (-1.155, 1.72),
                       (-1.58, 1.555), (-0.33077, 0.7), (-1.4525, 1.58)]
    test_file_numbers = [1, 3, 5, 10, 15, 25]
    filename_array = [None] * len(test_file_numbers)
    for i, num in enumerate(test_file_numbers):
        filename_array[i] = 'test_data/test_data{}.csv'.format(num)
    print(filename_array)
    object_list = [EcgData(filename=x, data=collect_data(x)) for x in filename_array]
    for i, obj in enumerate(object_list):
        logger.debug('Duration test for file {0}, expected output: {1} +/- .1, test output: {2}'.
                     format(i + 1, output_extremes[i], obj.voltage_extremes))
        assert obj.voltage_extremes == pytest.approx(output_extremes[i], rel=.05)
    print('Complete testing duration')
    logger.debug('Complete testing voltage extremes')
Exemplo n.º 5
0
def test_duration():
    logger.debug('Begin testing duration')
    output_duration = [27.775, 13.887, 39.996, 27.775, 13.887]
    test_file_numbers = [1, 13, 24, 28, 31]
    filename_array = [None] * len(test_file_numbers)

    for i, num in enumerate(test_file_numbers):
        filename_array[i] = 'test_data/test_data{}.csv'.format(num)
    object_list = [EcgData(filename=x, data=collect_data(x)) for x in filename_array]
    for i, obj in enumerate(object_list):
        (data, duration) = obj.set_duration('seconds')
        logger.debug('Duration test for file {0}, expected output: {1} +/- .1, test output: {2}'.
                     format(i + 1, output_duration[i], duration))
        assert duration == pytest.approx(output_duration[i], rel=.01)
    print('Complete testing duration')
    logger.debug('Complete testing duration')
Exemplo n.º 6
0
def test_calc_hr():
    logger.debug('Begin testing heart rate calculations')
    output_beats = [34, 35, 38, 32, 19, 75, 34, 19]
    test_file_numbers = [1, 5, 6, 11, 18, 23, 28, 31]
    filename_array = [None] * len(test_file_numbers)
    for i, num in enumerate(test_file_numbers):
        filename_array[i] = 'test_data/test_data{}.csv'.format(num)

    object_list = [EcgData(filename=x, data=collect_data(x)) for x in filename_array]
    max_time_array = [x.max_time for x in object_list]
    output_hr = np.multiply(np.divide(output_beats, max_time_array), 60)
    output_hr = [float(i) for i in output_hr.tolist()]
    exception_files = [7, 12, 13, 15, 24, 29]
    for i, obj in enumerate(object_list):
        logger.debug('Heart rate test for file {0}, expected output: {1} +/- 5, test output: {2}'.
                     format(i + 1, int(output_hr[i]), int(obj.mean_hr_bpm)))
        if not (i == n for n in exception_files):
            assert obj.mean_hr_bpm == pytest.approx(output_hr[i], abs=5.)
    logger.debug('Complete testing heart rate calculations')