diff --git a/mcc-flow/merge_records.py b/mcc-flow/merge_records.py index ce09ebfbda6125d2588c2746cf0fcc1faca3ae6a..a3183efd933cfbc207d75e292a699ebc4fee830b 100644 --- a/mcc-flow/merge_records.py +++ b/mcc-flow/merge_records.py @@ -5,6 +5,39 @@ from struct import unpack import numpy as np +def _read_block_data(file, shape, format_, format_size): + sh = np.prod(shape) + data = unpack(format_ * sh, file.read(format_size * sh)) + data = np.array(data) + data = data.reshape(shape) + return data + + +class FlowPacket: + + def __init__(self, date_, flow, hr, spo2, vbat_eeg, vbat_arm, + eeg, eeg_giro, eeg_acc, + emg, emg_giro, emg_acc, + sound, gsr): + self.date = date_ + self.flow = flow + self.hr = hr + self.spo2 = spo2 + self.vbat_eeg = vbat_eeg + self.vbat_arm = vbat_arm + self.eeg = eeg + self.eeg_giro = eeg_giro + self.eeg_acc = eeg_acc + self.emg = emg + self.emg_giro = emg_giro + self.emg_acc = emg_acc + self.sound = sound + self.gsr = gsr + + def __add__(self, other): + pass + + def process_packet(file): # header date_, time_, flow, hr, spo2, vbat_eeg, vbat_arm = unpack('>II10sBHHH', file.read(25)) @@ -16,11 +49,23 @@ def process_packet(file): print(date_, flow, hr, spo2, vbat_eeg, vbat_arm) # eeg - eeg = unpack('i' * 4 * 250, file.read(4 * 4 * 250)) - eeg = np.array(eeg) - eeg = eeg.reshape((250, 4)).T - print(eeg, eeg.shape) - eeg_giro = unpack('h' * 3 * 50, file.read(2 * 3 * 50)) + eeg = _read_block_data(file, (250, 4), 'i', 4).T + eeg_giro = _read_block_data(file, (50, 3), 'h', 2).T + eeg_acc = _read_block_data(file, (50, 3), 'h', 2).T + print(eeg.shape, eeg_giro.shape, eeg_acc.shape) + + # emg + emg = _read_block_data(file, (250, 6), 'i', 4).T + emg_giro = _read_block_data(file, (50, 3), 'h', 2).T + emg_acc = _read_block_data(file, (50, 3), 'h', 2).T + print(emg.shape, emg_giro.shape, emg_acc.shape) + + # extra + sound = _read_block_data(file, (6000, 1), 'h', 2).T + gsr = _read_block_data(file, (10, 1), 'h', 2).T + print(sound.shape, gsr.shape) + + return date_, flow, hr, spo2, vbat_eeg, vbat_arm, eeg, eeg_giro, eeg_acc, emg, emg_giro def read_dat_file(file):