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