示例#1
0
    def test_blocksize_auto(self):
        """ test that the blocksize parameter works as intended"""
        file = '{}.edf'.format(self.tmp_testfile)
        siglen = 256 * 155
        signals = np.random.rand(10, siglen)
        sheads = highlevel.make_signal_headers([str(x) for x in range(10)],
                                               sample_rate=256,
                                               physical_max=1,
                                               physical_min=-1)

        valid_block_sizes = [-1, 1, 5, 31]
        for block_size in valid_block_sizes:
            highlevel.write_edf(file, signals, sheads, block_size=block_size)
            signals2, _, _ = highlevel.read_edf(file)
            np.testing.assert_allclose(signals, signals2, atol=0.01)

        with self.assertRaises(AssertionError):
            highlevel.write_edf(file, signals, sheads, block_size=61)

        with self.assertRaises(AssertionError):
            highlevel.write_edf(file, signals, sheads, block_size=-2)

        # now test non-divisor block_size
        siglen = signals.shape[-1]
        highlevel.write_edf(file, signals, sheads, block_size=60)
        signals2, _, _ = highlevel.read_edf(file)
        self.assertEqual(signals2.shape, (10, 256 * 60 * 3))
        np.testing.assert_allclose(signals2[:, :siglen], signals, atol=0.01)
        np.testing.assert_allclose(signals2[:, siglen:],
                                   np.zeros([10, 25 * 256]),
                                   atol=0.0001)
示例#2
0
    def test_anonymize(self):

        header = highlevel.make_header(technician='tech',
                                       recording_additional='radd',
                                       patientname='name',
                                       patient_additional='padd',
                                       patientcode='42',
                                       equipment='eeg',
                                       admincode='420',
                                       gender='Male',
                                       birthdate='05.09.1980')
        annotations = [[0.01, -1, 'begin'], [0.5, -1, 'middle'],
                       [10, -1, 'end']]
        header['annotations'] = annotations
        signal_headers = highlevel.make_signal_headers(
            ['ch' + str(i) for i in range(3)])
        signals = np.random.rand(3, 256 * 300) * 200  #5 minutes of eeg
        highlevel.write_edf(self.personalized, signals, signal_headers, header)

        highlevel.anonymize_edf(self.personalized,
                                new_file=self.anonymized,
                                to_remove=[
                                    'patientname', 'birthdate', 'admincode',
                                    'patientcode', 'technician'
                                ],
                                new_values=['x', '', 'xx', 'xxx', 'xxxx'],
                                verify=True,
                                verbose=True)
        new_header = highlevel.read_edf_header(self.anonymized)
        self.assertEqual(new_header['birthdate'], '')
        self.assertEqual(new_header['patientname'], 'x')
        self.assertEqual(new_header['admincode'], 'xx')
        self.assertEqual(new_header['patientcode'], 'xxx')
        self.assertEqual(new_header['technician'], 'xxxx')

        highlevel.anonymize_edf(self.personalized,
                                to_remove=[
                                    'patientname', 'birthdate', 'admincode',
                                    'patientcode', 'technician'
                                ],
                                new_values=['x', '', 'xx', 'xxx', 'xxxx'],
                                verify=True)
        new_header = highlevel.read_edf_header(self.personalized[:-4] +
                                               '_anonymized.edf')
        self.assertEqual(new_header['birthdate'], '')
        self.assertEqual(new_header['patientname'], 'x')
        self.assertEqual(new_header['admincode'], 'xx')
        self.assertEqual(new_header['patientcode'], 'xxx')
        self.assertEqual(new_header['technician'], 'xxxx')

        with self.assertRaises(AssertionError):
            highlevel.anonymize_edf(self.personalized,
                                    new_file=self.anonymized,
                                    to_remove=[
                                        'patientname', 'birthdate',
                                        'admincode', 'patientcode',
                                        'technician'
                                    ],
                                    new_values=['x', '', 'xx', 'xxx'],
                                    verify=True)
示例#3
0
    def test_drop_channel(self):
        signal_headers = highlevel.make_signal_headers(
            ['ch' + str(i) for i in range(5)])
        signals = np.random.rand(5, 256 * 300) * 200  #5 minutes of eeg
        highlevel.write_edf(self.drop_from, signals, signal_headers)

        dropped = highlevel.drop_channels(self.drop_from,
                                          to_keep=['ch1', 'ch2'],
                                          verbose=True)

        signals2, signal_headers, header = highlevel.read_edf(dropped)

        np.testing.assert_allclose(signals[1:3, :], signals2, atol=0.01)

        highlevel.drop_channels(self.drop_from,
                                self.drop_from[:-4] + '2.edf',
                                to_drop=['ch0', 'ch1', 'ch2'])
        signals2, signal_headers, header = highlevel.read_edf(
            self.drop_from[:-4] + '2.edf')

        np.testing.assert_allclose(signals[3:, :], signals2, atol=0.01)

        with self.assertRaises(AssertionError):
            highlevel.drop_channels(self.drop_from,
                                    to_keep=['ch1'],
                                    to_drop=['ch3'])
示例#4
0
    def test_read_write_edf(self):
        startdate = datetime.now()
        t = startdate
        startdate = datetime(t.year, t.month, t.day, t.hour, t.minute,
                             t.second)

        header = highlevel.make_header(technician='tech',
                                       recording_additional='radd',
                                       patientname='name',
                                       patient_additional='padd',
                                       patientcode='42',
                                       equipment='eeg',
                                       admincode='420',
                                       gender='Male',
                                       startdate=startdate,
                                       birthdate='05.09.1980')
        annotations = [[0.01, -1, 'begin'], [0.5, -1, 'middle'],
                       [10, -1, 'end']]
        header['annotations'] = annotations
        signal_headers1 = highlevel.make_signal_headers(
            ['ch' + str(i) for i in range(5)])
        signals = np.random.rand(5, 256 * 300) * 200  #5 minutes of eeg

        success = highlevel.write_edf(self.edfplus_data_file, signals,
                                      signal_headers1, header)
        self.assertTrue(os.path.isfile(self.edfplus_data_file))
        self.assertGreater(os.path.getsize(self.edfplus_data_file), 0)
        self.assertTrue(success)

        signals2, signal_headers2, header2 = highlevel.read_edf(
            self.edfplus_data_file)

        self.assertEqual(len(signals2), 5)
        self.assertEqual(len(signals2), len(signal_headers2))
        for shead1, shead2 in zip(signal_headers1, signal_headers2):
            self.assertDictEqual(shead1, shead2)

        self.assertDictEqual(header, header2)
        np.testing.assert_allclose(signals, signals2, atol=0.01)

        signals = (signals * 100).astype(np.int8)
        success = highlevel.write_edf(self.edfplus_data_file,
                                      signals,
                                      signal_headers1,
                                      header,
                                      digital=True)
        self.assertTrue(os.path.isfile(self.edfplus_data_file))
        self.assertGreater(os.path.getsize(self.edfplus_data_file), 0)
        self.assertTrue(success)

        signals2, signal_headers2, header2 = highlevel.read_edf(
            self.edfplus_data_file, digital=True)

        self.assertEqual(len(signals2), 5)
        self.assertEqual(len(signals2), len(signal_headers2))
        for shead1, shead2 in zip(signal_headers1, signal_headers2):
            self.assertDictEqual(shead1, shead2)

        self.assertDictEqual(header, header2)
        np.testing.assert_array_equal(signals, signals2)
def write_data_edf(raw, dst_file, uid, task):
    sfreq = 250
    data = raw.get_data() * 1e6

    # Create writer
    writer = pyedflib.EdfWriter(str(dst_file), len(EEG_channels), file_type=1)

    # Create header
    writer.setPatientName(uid)

    # assert task == 'pegNormal' or 'pegInversion'
    # if task == 'pegNormal' or 'Low':
    #     label = 'low workload'
    # elif task == 'pegInversion' or 'High':
    #     label = 'high workload'
    # writer.setPatientAdditional(label)

    # Signals
    signal_headers = highlevel.make_signal_headers(EEG_channels,
                                                   sample_rate=sfreq)
    writer.setSignalHeaders(signal_headers)
    writer.writeSamples(data)

    # close
    writer.close()
示例#6
0
    def test_read_write_edf(self):
        startdate = datetime.now()
        t = startdate
        startdate = datetime(t.year,t.month,t.day,t.hour, t.minute,t.second)
        
        header = highlevel.make_header(technician='tech', recording_additional='r_add',
                                                patientname='name', patient_additional='p_add',
                                                patientcode='42', equipment='eeg', admincode='120',
                                                gender='Male', startdate=startdate,birthdate='05.09.1980')
        annotations = [[0.01, -1, 'begin'],[0.5, -1, 'middle'],[10, -1, 'end']]

        signal_headers1 = highlevel.make_signal_headers(['ch'+str(i) for i in range(5)])

        for file_type in [-1,0,1,2,3]:
            if file_type in [0, 2]:
                header['annotations'] = []
            else:
                header['annotations'] = annotations

            file = '{}_{}_phys.edf'.format(self.tmp_testfile, file_type)
            signals = np.random.rand(5, 256*300)*200 #5 minutes of eeg
            success = highlevel.write_edf(file, signals, signal_headers1, header, file_type=file_type)
            self.assertTrue(os.path.isfile(file))
            self.assertGreater(os.path.getsize(file), 0)
            self.assertTrue(success)
            
            signals2, signal_headers2, header2 = highlevel.read_edf(file)
    
            self.assertEqual(len(signals2), 5)
            self.assertEqual(len(signals2), len(signal_headers2))
            for shead1, shead2 in zip(signal_headers1, signal_headers2):
                self.assertDictEqual(shead1, shead2)
            np.testing.assert_allclose(signals, signals2, atol=0.01)
            if file_type in [-1, 1, 3]:
                self.assertDictEqual(header, header2)

            file = '{}_{}_dig.edf'.format(self.tmp_testfile, file_type)
            signals = (signals*100).astype(np.int8)
            success = highlevel.write_edf(file, signals,  signal_headers1, header, digital=True)
            self.assertTrue(os.path.isfile(file))
            self.assertGreater(os.path.getsize(file), 0)
            self.assertTrue(success)
            
            signals2, signal_headers2, header2 = highlevel.read_edf(file, digital=True)
    
            self.assertEqual(len(signals2), 5)
            self.assertEqual(len(signals2), len(signal_headers2))
            np.testing.assert_array_equal(signals, signals2)
            for shead1, shead2 in zip(signal_headers1, signal_headers2):
                self.assertDictEqual(shead1, shead2)
            # EDF/BDF header writing does not correctly work yet
            if file_type in [-1, 1, 3]:
                self.assertDictEqual(header, header2)
示例#7
0
 def test_annotation_bytestring(self):
     header = highlevel.make_header(technician='tech',
                                    recording_additional='radd',
                                    patientname='name',
                                    patient_additional='padd',
                                    patientcode='42',
                                    equipment='eeg',
                                    admincode='420',
                                    gender='Male',
                                    birthdate='05.09.1980')
     annotations = [[0.01, b'-1', 'begin'], [0.5, b'-1', 'middle'],
                    [10, -1, 'end']]
     header['annotations'] = annotations
     signal_headers = highlevel.make_signal_headers(
         ['ch' + str(i) for i in range(3)])
     signals = np.random.rand(3, 256 * 300) * 200  #5 minutes of eeg
     highlevel.write_edf(self.edfplus_data_file, signals, signal_headers,
                         header)
     _, _, header2 = highlevel.read_edf(self.edfplus_data_file)
     highlevel.write_edf(self.edfplus_data_file, signals, signal_headers,
                         header)
     _, _, header3 = highlevel.read_edf(self.edfplus_data_file)
     self.assertEqual(header2['annotations'], header3['annotations'])
        destinationFile = dst / file.with_suffix(".edf").name

        # if not p2.exists():
        #     p2.mkdir(parents=True)

        sfreq = 250
        df = pd.read_csv(file)
        data = df[EEG_channels].values.transpose()

        # Create writer
        writer = pyedflib.EdfWriter(str(destinationFile),
                                    len(EEG_channels),
                                    file_type=1)

        # Create header
        writer.setPatientName(user)

        #Set label
        # label = df['label'].values.mean()
        # label = "low workload" if label < 7.5 else "high workload"
        # writer.setPatientAdditional(label)

        # Signals
        signal_headers = highlevel.make_signal_headers(EEG_channels,
                                                       sample_rate=250)
        writer.setSignalHeaders(signal_headers)
        writer.writeSamples(data)

        #close
        writer.close()