From 64505edffd3725158ce2977f6d0d7a1e16d4025a Mon Sep 17 00:00:00 2001 From: lommytea Date: Thu, 12 Sep 2024 11:28:33 -0400 Subject: [PATCH 01/26] Adding MotorImagery Demo script that incorporates Wearable Sensing Script as well as updadting Wearable Sensing script to have proper timestamps. Updated DSI24.json so it doesn't have unused comma at the end. --- physiolabxr/_presets/LSLPresets/DSI24.json | 2 +- .../MotorImageryDemo.py | 244 ++++++++++++++++++ .../WearableSensingScript.py | 119 +++++++++ 3 files changed, 364 insertions(+), 1 deletion(-) create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/MotorImageryDemo.py create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py diff --git a/physiolabxr/_presets/LSLPresets/DSI24.json b/physiolabxr/_presets/LSLPresets/DSI24.json index f5da2190..4c0e860c 100644 --- a/physiolabxr/_presets/LSLPresets/DSI24.json +++ b/physiolabxr/_presets/LSLPresets/DSI24.json @@ -24,5 +24,5 @@ "Trigger", "X1", "X2", - "X3",], + "X3"], "DataType": "float32"} \ No newline at end of file diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/MotorImageryDemo.py b/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/MotorImageryDemo.py new file mode 100644 index 00000000..fc4d249b --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/MotorImageryDemo.py @@ -0,0 +1,244 @@ +import os +from enum import Enum + +import mne +import numpy as np +from mne import create_info +from mne.decoding import CSP +from sklearn.discriminant_analysis import LinearDiscriminantAnalysis +from sklearn.pipeline import Pipeline + +from physiolabxr.scripting.RenaScript import RenaScript +from physiolabxr.scripting.physio.epochs import get_event_locked_data +from physiolabxr.utils.buffers import flatten + +event_marker_stream_name = 'EventMarker_BallGame' + + +class GameStates(Enum): + idle = 'idle' + train = 'train' + fit = 'fit' + eval = 'eval' + + +class Events(Enum): + train_start = 1 + left_trial = 2 + right_trial = 3 + eval_start = 6 + + +class CSPDecoder: + + def __init__(self, n_components=4): + self.n_components = n_components + self.csp = CSP(n_components=n_components, reg=None, log=True, norm_trace=False) + self.lda = LinearDiscriminantAnalysis() + self.clf = Pipeline([('CSP', self.csp), ('LDA', self.lda)]) + + def fit(self, X, y): + X = self.csp.fit_transform(X, y) + # fit classifier + self.lda.fit(X, y) + + def csp_transfomr(self, X): + return self.csp.transform(X) + + def transform(self, X): + X = self.csp.transform(X) + return self.lda.transform(X) + + +def sigmoid(z): + return 1 / (1 + np.exp(-z)) + + +class MovingAverage: + def __init__(self, window_size=10): + self.window_size = window_size + self.buffer = [] + + def update(self, value): + self.buffer.append(value) + if len(self.buffer) > self.window_size: + self.buffer.pop(0) + + def get(self): + return np.mean(self.buffer) + + +class MotorImageryBalanceBall(RenaScript): + def __init__(self, *args, **kwargs): + """ + Please do not edit this function + """ + super().__init__(*args, **kwargs) + self.cur_state = 'idle' + + # Start will be called once when the run button is hit. + def init(self): + """ + + Note on script params: + + """ + # self.train_data_buffer = DataBuffer() + # self.eval_data_buffer = DataBuffer() + self.cur_state = 'idle' + self.transition_markers = [Events.train_start.value, -Events.train_start.value, Events.eval_start.value, + -Events.eval_start.value] + self.eeg_channels = ["F3", "Fz", "F4", "C3", "Cz", "C4", "P3", "P4", ] + self.decoder_tmin = 2. + self.decoder_tmax = 5. + self.srate = 300 + self.decode_t_len = int((self.decoder_tmax - self.decoder_tmin) * self.srate) + self.label_mapping = {2: 0, 3: 1} + self.decoder = None + self.moving_average = MovingAverage(window_size=3) + + self.use_aggregated_data = False + if "participant_name" in self.params and type(self.params["participant_name"]) is str and self.params[ + "participant_name"] != "" and \ + "participants_data_dir" in self.params and type( + self.params["participants_data_dir"]) is str and os.path.exists(self.params["participants_data_dir"]): + self.use_aggregated_data = True + print( + "Will use aggregated data. To not use aggregated data, remove participant_name or participant_data_dir from the parameters tab. Or" + "set participant_name to empty string or participant_data_dir to a non-existing directory.") + else: + self.use_aggregated_data = False + print( + "Will not use aggregated data. To use aggregated data, please set participant_name and participant_data_dir in the parameters tab." + "and participant_name is not empty string and participant_data_dir exists.") + + # loop is called times per second + + def loop(self): + + if event_marker_stream_name not in self.inputs.keys(): # or #EVENT_MARKER_CHANNEL_NAME not in self.inputs.keys(): + # print('Event marker stream not found') + return + + self.process_event_markers() + if self.cur_state == GameStates.train: + pass + # keep collecting data + # print("In training") + elif self.cur_state == GameStates.eval: + self.decode() + # print("In evaluation") + + # cleanup is called when the stop button is hit + def cleanup(self): + print('Cleanup function is called') + + def process_event_markers(self): + if event_marker_stream_name in self.inputs.keys() and len( + np.intersect1d(self.inputs[event_marker_stream_name][0], self.transition_markers)) > 0: + last_processed_marker_index = None + for i, event_marker in enumerate(self.inputs[event_marker_stream_name][0].T): + game_event_marker = event_marker[0] + print(f'Event marker is {event_marker} at index {i}') + + # state transition logic + if game_event_marker == Events.train_start.value: + self.cur_state = GameStates.train + print('Entering training block') + last_processed_marker_index = i + + elif game_event_marker == -Events.train_start.value: # exiting train state + # collect the trials and train the decoding model + self.collect_trials_and_train() + self.cur_state = GameStates.idle + print('Exiting training block') + last_processed_marker_index = i + + elif event_marker == Events.eval_start.value: + self.cur_state = GameStates.eval + print('Entering evaluation block') + last_processed_marker_index = i + + elif event_marker == -Events.eval_start.value: + self.cur_state = GameStates.idle + print('Exiting evaluation block') + last_processed_marker_index = i + + # # collect event marker data + # if self.cur_state == GameStates.train: + # event_type = game_state_event_marker + # timestamp = self.inputs[event_marker_stream_name][1][i] + # + # # self.train_data_buffer. + # pass + # + # elif self.cur_state == GameStates.eval: + # pass + + # self.inputs.clear_stream_buffer_data(event_marker_stream_name) + if last_processed_marker_index is not None: + self.inputs.clear_stream_up_to_index(event_marker_stream_name, last_processed_marker_index + 1) + + def collect_trials_and_train(self): + event_locked_data, last_event_time = get_event_locked_data(event_marker=self.inputs[event_marker_stream_name], + data=self.inputs["DSI-24"], + events_of_interest=[Events.left_trial.value, + Events.right_trial.value], + tmin=self.decoder_tmin, tmax=self.decoder_tmax, + srate=self.srate, return_last_event_time=True, + verbose=1) + # TODO check the shape of the event locked data, how long is it. does it equal decode_t_len + + train_end_index = np.argwhere(self.inputs[event_marker_stream_name][0][0] == - Events.train_start.value).item() + train_end_time = self.inputs[event_marker_stream_name][1][train_end_index] + self.inputs.clear_up_to( + train_end_time) # Clear the input buffer up to the last event time to avoid processing duplicate data + + # build the classifier, ref https://mne.tools/dev/auto_examples/decoding/decoding_csp_eeg.html + labels = flatten([[events] * len(data) for events, data in event_locked_data.items()]) + labels = np.array([self.label_mapping[label] for label in labels]) + epochs_data = np.concatenate(list(event_locked_data.values()[[3,2,5,8,7,9,15,16],:]), axis=0) + info = create_info(ch_names=self.eeg_channels, sfreq=self.srate, ch_types='eeg') + montage = mne.channels.make_standard_montage("biosemi64") + info.set_montage(montage) + + if self.use_aggregated_data: + participant_dir = os.path.join(self.params["participants_data_dir"], self.params["participant_name"]) + if os.path.exists(participant_dir): # use aggregated data + loaded_epochs = np.load(os.path.join(participant_dir, "epochs_data.npy")) + epochs_data = np.concatenate((epochs_data, loaded_epochs)) + labels = np.concatenate((labels, np.load(os.path.join(participant_dir, "labels.npy")))) + print( + f"Post-train: Loaded {len(loaded_epochs)} for participant {self.params['participant_name']}. Concatenated with current data. Total data size: {epochs_data.shape}") + else: # if this is a new participant, create the directory + os.makedirs(participant_dir) + print( + f"Post-train: New participant: {self.params['participant_name']} Created directory {os.path.join(self.params['participants_data_dir'], self.params['participant_name'])}") + # save the data + np.save( + os.path.join(self.params["participants_data_dir"], self.params["participant_name"], "epochs_data.npy"), + epochs_data) + np.save(os.path.join(self.params["participants_data_dir"], self.params["participant_name"], "labels.npy"), + labels) + print(f"Post-train: Saved {len(epochs_data)} for participant {self.params['participant_name']}") + + self.decoder = CSPDecoder(n_components=4) + self.decoder.fit(epochs_data, labels) + # get the classification score + y_pred = self.decoder.transform(epochs_data) + score = self.decoder.lda.score(self.decoder.csp_transfomr(epochs_data), labels) + print(f"Fitting completed. Classification score: {score}. Plotting CSP...") + self.decoder.csp.plot_patterns(info, ch_type="eeg", units="Patterns (AU)", size=1.5) + + def decode(self): + if "ma_window" in self.params and self.moving_average.window_size != self.params["ma_window"]: + self.moving_average = MovingAverage(window_size=self.params["ma_window"]) + data = self.inputs["DSI-24"][0][None, [3,2,5,8,7,9,15,16], -self.decode_t_len:] + y_pred = self.decoder.transform(data)[0] # only one sample in batch + # normalize y_pred from -10 to 10 to 0 to 1 + y_pred = sigmoid(y_pred) + # apply moving average + self.moving_average.update(y_pred[0]) + self.outputs["MotorImageryInference"] = [self.moving_average.get()] + + diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py b/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py new file mode 100644 index 00000000..e4586b19 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py @@ -0,0 +1,119 @@ +from pylsl import local_clock + +from physiolabxr.scripting.RenaScript import RenaScript +from physiolabxr.thirdparty.WearableSensing.DSI_py3 import * +import numpy as np +import sys +from physiolabxr.utils.buffers import DataBuffer + +#Creating a data buffer with the DataBuffer class +data_buffer = DataBuffer() + +@MessageCallback +def ExampleMessageCallback(msg, lvl=0): + if lvl <= 3: # ignore messages at debugging levels higher than 3 + print("DSI Message (level %d): %s" % (lvl, IfStringThenNormalString(msg))) + return 1 + + +is_first_time = True +time_offset = 0 # time offset for the first packet to the local_clock() +@SampleCallback +def ExampleSampleCallback_Signals(headsetPtr, packetTime, userData): + #This is the function that will be called every time a new packet is received + global data_buffer + global is_first_time + global time_offset + + #Grab the headset by using a pointer + h = Headset(headsetPtr) + #Get the signal from each channel and format it so that it can be created into an array + new_data = np.array(['%+08.2f' % (ch.GetSignal()) for ch in h.Channels()]) + #Reshapes the array into a 24x1 array so that it can be inputted into the data_buffer + new_data = new_data.reshape(24,1) + #Rearrange new_data to fit with desired output format + new_data = new_data[[9, 10, 3, 2, 4, 17, 18, 7, 1, 5, 11, 22, 12, 21, 8, 0, 6, 13, 14, 20, 23, 19, 15, 16], :] + #Get the time of the packet as a temporary solution to timestamps + if is_first_time: + time_offset = local_clock() - float(packetTime) + is_first_time = False + + t = [float(packetTime) + time_offset] + if new_data.shape[1] != len(t): + print('Data and timestamp mismatch') + print(new_data.shape) + print(len(t)) + + #Create a dictionary with the stream name, data, and timestamps + new_data_dict = { + 'stream_name': 'DSI-24', + 'frames': new_data, + 'timestamps': t + } + #Update the data buffer with the new data + data_buffer.update_buffer(new_data_dict) + + +@SampleCallback +def ExampleSampleCallback_Impedances(headsetPtr, packetTime, userData): + #Not yet used + h = Headset(headsetPtr) + fmt = '%s = %5.3f' + strings = [fmt % (IfStringThenNormalString(src.GetName()), src.GetImpedanceEEG()) for src in h.Sources() if + src.IsReferentialEEG() and not src.IsFactoryReference()] + strings.append(fmt % ('CMF @ ' + h.GetFactoryReferenceString(), h.GetImpedanceCMF())) + print(('%8.3f: ' % packetTime) + ', '.join(strings)) + sys.stdout.flush() + +class DSI24(RenaScript): + def __init__(self, *args, **kwargs): + """ + Please do not edit this function + """ + super().__init__(*args, **kwargs) + + def init(self, arg = ''): + #Create a headset object + self.headset = Headset() + #Set the message callback to ExampleMessageCallback + self.headset.SetMessageCallback(ExampleMessageCallback) + #Retrieves the command line arguments + args = getattr(sys, 'argv', ['']) + #Set the default port to the first command line argument based on the parameter provided by user + default_port = self.params['COM Port'] + #Connect the headset + self.headset.Connect(default_port) + #Start the data acquisition based on the parameter provided by user + if arg.lower().startswith('imp'): + #Currently not used + self.headset.SetSampleCallback(ExampleSampleCallback_Impedances, 0) + self.headset.StartImpedanceDriver() + else: + #Set the sample callback to ExampleSampleCallback_Signals + self.headset.SetSampleCallback(ExampleSampleCallback_Signals, 0) + if len(arg.strip()): self.headset.SetDefaultReference(arg, True) + #Start the data acquisition + self.headset.StartBackgroundAcquisition() + + + def loop(self): + #Called every loop based on the user's chosen frequency + global data_buffer + #If the data buffer has data, then set the output to the data buffer + if len(data_buffer.keys()) > 0: + self.set_output(stream_name = 'DSI-24', data = data_buffer.get_data('DSI-24'), timestamp = data_buffer.get_timestamps('DSI-24')) + #Clear the data buffer + data_buffer.clear_stream_buffer_data('DSI-24') + + def cleanup(self): + #Called when the script is stopped + global data_buffer + global is_first_time + global time_offset + #Stop the data acquisition + self.headset.StopBackgroundAcquisition() + #Disconnect the headset + time_offset = 0 + is_first_time = True + self.headset.Disconnect() + data_buffer.clear_buffer() From d6f1fdc534719fa3136a438d6f8d9078937aee62 Mon Sep 17 00:00:00 2001 From: lommytea Date: Fri, 13 Sep 2024 10:03:54 -0400 Subject: [PATCH 02/26] Adding test files for NeuroCooked --- .../CVEP-noTraining.py | 112 +++++++++ .../WearableSensingNeuralCooked/CVEP_TEST2.py | 159 +++++++++++++ .../WearableSensingNeuralCooked/CVEP_TEST3.py | 212 ++++++++++++++++++ 3 files changed, 483 insertions(+) create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP-noTraining.py create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST2.py create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP-noTraining.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP-noTraining.py new file mode 100644 index 00000000..bd3cfb43 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP-noTraining.py @@ -0,0 +1,112 @@ +from scipy.signal import butter, filtfilt +from sklearn.cross_decomposition import CCA +import numpy as np +from physiolabxr.scripting.RenaScript import RenaScript +from physiolabxr.utils.buffers import DataBuffer +from physiolabxr.rpc.decorator import rpc, async_rpc + +class NeuralCooked(RenaScript): + def __init__(self, *args, **kwargs): + """ + Please do not edit this function + """ + super().__init__(*args, **kwargs) + + def init(self): + self.freq_bands = [(8, 60), (12, 60), (30, 60)] #defining frequency bands for filter bank + self.mSequence = [ #creating a list of m_sequences + [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0], #mSequence1 + [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1], #mSequence2 + [0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1] #mSequence3 + ] + self.frequency = 300 #default frequency of DSI-24 + self.data = DataBuffer() #generating a data buffer for EEG data + self.cca_models = [] #creating a list to store all of the CCA models + self.decoded_choices = [] #creating a list to store all of the decoded choices + + def loop(self): + EEG_Data = { #creating a dictionary for EEG data + 'stream_name': 'EEG Data', #defining the stream name + 'frames': self.inputs['DSI-24'][0][14:18, :], #choosing the correct channels + 'timestamps': self.inputs['DSI-24'][1] #defining the timestamps + } + self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data + if self.data.get_data('EEG Data').shape[1] > 60000: #if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds + self.data.clear_stream_up_to_index(self, stream_name='EEG Data', cut_to_index=len(self.data.get_data('EEG Data').shape[1])-60000) + + band_data = self.apply_filter_banks(self.data.get_data('EEG Data')) #applying filter banks to EEG data + self.correlation_coefficients = self.apply_shifting_window_cca(band_data) #getting the correlation coefficients by applying shifting window CCA + highest_correlation, detected_choice = self.evaluate_correlation_coefficients( #evaluating the correlation coefficients to get the highest correlation and the detected choice + self.correlation_coefficients) + self.decoded_choices.append(detected_choice) #adding the detected choice to the list of detected choices + + def cleanup(self): + self.freq_bands = [(8, 60), (12, 60), (30, 60)] + self.mSequence = [] + self.frequency = 300 + self.data = DataBuffer() + self.cca_models = [] + self.decoded_choices = [] + + ## Basic Tools + def apply_filter_banks(self, data): + band_data = {} + for band in self.freq_bands: + band_key = f'band_{band[0]}_{band[1]}' + band_data[band_key] = self.bandpass_filter(data, band[0], band[1], self.frequency) + return band_data + + def bandpass_filter(self, data, lowcut, highcut, fs, order=8): + nyquist = 0.5 * fs + low = lowcut / nyquist + high = highcut / nyquist + b, a = butter(order, [low, high], btype='band') + filtered_data = filtfilt(b, a, data) + return filtered_data + + ## Signal Generation and CCA + def generate_reference_signal(self, m_sequence, length): + # Repeat the m-sequence to match the length of the EEG data + repetitions = length // len(m_sequence) + 1 + reference_signal = np.tile(m_sequence, repetitions)[:length] + return reference_signal + + def apply_shifting_window_cca(self, band_data): + correlation_coefficients = {1: [], 2: [], 3: []} + for band in self.freq_bands: + band_key = f'band_{band[0]}_{band[1]}' + for seq_index in range(3): + reference_signal = self.generate_reference_signal(self.mSequence[seq_index], band_data[band_key].shape[1]) + cca = CCA(n_components=1) + cca.fit(band_data[band_key].T, reference_signal) + transformed_data = cca.transform(band_data[band_key].T) + corr = np.corrcoef(transformed_data[:, 0], reference_signal)[0, 1] + correlation_coefficients[seq_index + 1].append(corr) + return correlation_coefficients + + def evaluate_correlation_coefficients(self, correlation_coefficients): + avg_correlations = { + 'mSequence1': np.mean(correlation_coefficients[1]), + 'mSequence2': np.mean(correlation_coefficients[2]), + 'mSequence3': np.mean(correlation_coefficients[3]) + } + + # Sort the sequences by their average correlation in descending order + sorted_correlations = sorted(avg_correlations.items(), key=lambda item: item[1], reverse=True) + + # Get the highest and second-highest correlations + highest_sequence, highest_corr = sorted_correlations[0] + second_highest_sequence, second_highest_corr = sorted_correlations[1] + + # Check if the highest correlation is at least 0.15 higher than the second highest + if highest_corr >= second_highest_corr + 0.15: + return highest_corr, highest_sequence + else: + return highest_corr, -1 + + @rpc + def decode(self) -> int: + choices = self.decoded_choices + user_choice = max(set(choices), key=choices.count) + self.decoded_choices = [] + return user_choice diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST2.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST2.py new file mode 100644 index 00000000..b6684724 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST2.py @@ -0,0 +1,159 @@ +#Using 2 RPCs (train, decode) that gets called +import numpy as np +from scipy.signal import butter, filtfilt +from sklearn.cross_decomposition import CCA +from collections import deque +from enum import Enum +import numpy as np +from physiolabxr.scripting.RenaScript import RenaScript +from physiolabxr.utils.buffers import DataBuffer +from imblearn.over_sampling import SMOTE +from sklearn.linear_model import LogisticRegression +from sklearn.model_selection import train_test_split +from sklearn.metrics import f1_score +from sklearn import metrics +from physiolabxr.rpc.decorator import rpc, async_rpc + + +#This is a test file to test out different approaches to the game +#We will be using a database to store data for training +class NeuralCooked(RenaScript): + def __init__(self, *args, **kwargs): + """ + Please do not edit this function + """ + super().__init__(*args, **kwargs) + + def init(self): + self.mSequence = [] + self.frequency = 300 + self.freq_bands = [(8, 60), (12, 60), (30, 60)] + self.data = DataBuffer() + self.training_EEG_label = np.array([]) + self.cca_models = None + self.decoded_choices = [] + + def loop(self): + #Grabbing p3, p4, o1 and o1 data and putting it into another data buffer + EEG_Data = { + 'stream_name': 'EEG Data', + 'frames': self.inputs['DSI-24'][0][14:18, :], + 'timestamps': self.inputs['DSI-24'][1] + } + self.data.update_buffer(EEG_Data) + #Removes the data if its longer than 20 seconds + if self.data.get_data('EEG Data').shape[1] > 60000: + self.data.clear_stream_up_to_index(self, stream_name= 'EEG Data', cut_to_index= len(self.data.get_data('EEG Data').shape[1])) + #if training is done(can be seen if cca_models is not none) then we can start playing + if self.cca_models != None: + # Get the EEG Data and split it into band channels + band_data = self.apply_filter_banks(self.data.get_data('EEG Data')) + # Apply shifting window CCA to each band channel + self.correlation_coefficients = self.apply_shifting_window_cca(band_data) + # Look at correlation coefficient averages for each band channel + # Look at who has the highest coefficient average + highest_correlation, detected_choice = self.evaluate_correlation_coefficients(self.correlation_coefficients) + self.decoded_choices.append[detected_choice] + + #Training + def train_cca(self, m_sequences): + self.mSequence = m_sequences + # Split the data via band channels using filter banks + band_data = self.apply_filter_banks(self.data.get_data('EEG Data')) + # Train a shifting CCA for each band channel + EEG_split =[] + #Need to split the training data into 3 different sequences + #Training has to be around 200s or 3 minutes and 20 seconds can be increased if needed + EEG_split[0] = f'0:20000' + EEG_split[1] = f'20000:40000' + EEG_split[2] = f'40000:60000' + cca_model = {} + for seq in range(3): + for band in self.freq_bands: + band_key = f'band_{band[0]}_{band[1]}' + cca_model[band_key] = self.shifting_cca(band_data[band_key][EEG_split[seq]],m_sequences[seq]) + self.cca_models[seq] = cca_model + + def apply_filter_banks(self, data): + band_data = {} + for band in self.freq_bands: + band_key = f'band_{band[0]}_{band[1]}' + band_data[band_key] = self.bandpass_filter(data, band[0], band[1]) + return band_data + + def bandpass_filter(data, lowcut, highcut, fs, order=8): + nyquist = 0.5 * fs + low = lowcut / nyquist + high = highcut / nyquist + b, a = butter(order, [low, high], btype='band') + filtered_data= filtfilt(b, a, data) + return filtered_data + + def shifting_cca(self, band_data, m_sequence_number): + # Implement CCA training for shifting window + window_size = 300 # Define window size (e.g., 1 second for a 300 Hz signal) + step_size = 150 # Define step size (e.g., 0.5 seconds for a 300 Hz signal) + num_windows = (band_data.shape[1] - window_size) // step_size + 1 + cca_model = [] + for i in range(num_windows): + start = i * step_size + end = start + window_size + window_data = band_data[:, start:end] + cca = CCA(n_components=1) + cca.fit(window_data.T, self.mSequence[m_sequence_number]) + cca_model.append(cca) + return cca_model + + #Playing + def apply_shifting_window_cca(self, band_data): + correlation_coefficients = {1: [], 2: [], 3: []} + for band in self.freq_bands: + band_key = f'band_{band[0]}_{band[1]}' + for seq in correlation_coefficients.keys(): + if self.cca_models[seq] and band_key in self.cca_models[seq]: + correlation_coefficients[seq].append( + self.calculate_correlations(band_data[band_key], self.cca_models[seq][band_key])) + return correlation_coefficients + + def evaluate_correlation_coefficients(self, correlation_coefficients): + avg_correlations = { + 'mSequence1': np.mean(correlation_coefficients[0]), + 'mSequence2': np.mean(correlation_coefficients[1]), + 'mSequence3': np.mean(correlation_coefficients[2]) + } + + # Sort the sequences by their average correlation in descending order + sorted_correlations = sorted(avg_correlations.items(), key=lambda item: item[1], reverse=True) + + # Get the highest and second-highest correlations + highest_sequence, highest_corr = sorted_correlations[0] + second_highest_sequence, second_highest_corr = sorted_correlations[1] + + # Check if the highest correlation is at least 0.15 higher than the second highest + if highest_corr >= second_highest_corr + 0.15: + return highest_corr, highest_sequence + else: + return None, None + def cleanup(self): + return + + @rpc + def decode(self) -> int: + choices = self.decoded_choices + user_choice = max(set(choices), key=choices.count) + return user_choice + + + @async_rpc + def training(self, input0: int, input1: int): + """ + Args: + input0: int - 1 for choice 1, 2 for choice 2, 3 for choice 3 + Returns: Generates correlation coefficients for EEG data x m-sequence + """ + self.mSequence = input1 + # Train the CCA + self.train_cca(input0) + + return + diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py new file mode 100644 index 00000000..80e2deb0 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py @@ -0,0 +1,212 @@ +from scipy.signal import butter, filtfilt +from sklearn.cross_decomposition import CCA +import numpy as np +from physiolabxr.scripting.RenaScript import RenaScript +from physiolabxr.utils.buffers import DataBuffer +from physiolabxr.rpc.decorator import rpc, async_rpc + +class NeuralCooked(RenaScript): + def __init__(self, *args, **kwargs): + """ + Please do not edit this function + """ + super().__init__(*args, **kwargs) + + def init(self): + self.freq_bands = [(8, 60), (12, 60), (30, 60)] #defining frequency bands for filter bank + self.mSequence = [] #creating a list of m_sequences + self.frequency = 300 #default frequency of DSI-24 + self.data = DataBuffer() #generating a data buffer for EEG data + self.cca_models = [] #creating a list to store all of the CCA models + self.decoded_choices = [] #creating a list to store all of the decoded choices + self.mSequence = [ + [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0], #mSequence1 + [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1], #mSequence2 + [0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1] #mSequence3 + ] + self.seq1_data = np.array([]) + self.seq2_data = np.array([]) + self.seq3_data = np.array([]) + def loop(self): + EEG_Data = { #creating a dictionary for EEG data + 'stream_name': 'EEG Data', #defining the stream name + 'frames': self.inputs['DSI-24'][0][14:18, :], #choosing the correct channels + 'timestamps': self.inputs['DSI-24'][1] #defining the timestamps + } + Sequence_Data = {} #creating a dictionary for sequence data + self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data + if self.data.get_data('EEG Data').shape[1] > 60000: #if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds + self.data.clear_stream_up_to_index(self, stream_name= 'EEG Data', cut_to_index= len(self.data.get_data('EEG Data').shape[1])-60000) + if len(self.cca_models) == 3: #if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously + self.decode_choice() #adding the detected choice to the list of detected choices + def cleanup(self): + self.freq_bands = [(8, 60), (12, 60), (30, 60)] + self.mSequence = [] + self.frequency = 300 + self.data = DataBuffer() + self.cca_models = [] + self.decoded_choices = [] + self.mSequence = [] + return + + + ##Basic Tools +#=================================================================================================== + def apply_filter_banks(self, data): + band_data = {} + for band in self.freq_bands: + band_key = f'band_{band[0]}_{band[1]}' + band_data[band_key] = self.bandpass_filter(data, band[0], band[1], self.frequency) + return band_data + + def bandpass_filter(self, data, lowcut, highcut,fs, order=8): + nyquist = 0.5 * fs + low = lowcut / nyquist + high = highcut / nyquist + b, a = butter(order, [low, high], btype='band') + filtered_data= filtfilt(b, a, data) + return filtered_data + + + + ##Begin Training +#=================================================================================================== + #Need to add an RPC function that adds to training dataset + @async_rpc + def training(self) -> int: + """ + Args: + input0: int - 1 for choice 1, 2 for choice 2, 3 for choice 3 + Returns: Generates correlation coefficients for EEG data x m-sequence + """ + # Train the CCA + self.train_cca() #start training the CCA + return 1 + + + @rpc + def seq_data(self, sequence_num: int): #Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat + if sequence_num == 0: + self.seq1_data = np.append(self.seq1_data, self.data.get_data('EEG Data')[:,-1500:]) #Every 5 seconds + elif sequence_num == 1: + self.seq2_data = np.append(self.seq2_data, self.data.get_data('EEG Data')[:,-1500:]) + elif sequence_num == 2: + self.seq3_data = np.append(self.seq3_data, self.data.get_data('EEG Data')[:,-1500:]) + + def train_cca(self): + """ + Trains the CCA model. + This method generates spatial filters and templates for each target m-sequence. + """ + + segment_Length = 1500 + # Split data into segments for each m-sequence + seq1_segments = np.array_split(self.seq1_data, self.seq1_data.shape[1] // segment_Length, axis=1) + seq2_segments = np.array_split(self.seq2_data, self.seq2_data.shape[1] // segment_Length, axis=1) + seq3_segments = np.array_split(self.seq3_data, self.seq3_data.shape[1] // segment_Length, axis=1) + + # Generate templates by averaging segments for each m-sequence + templates = { + 1: np.mean(seq1_segments, axis=0), + 2: np.mean(seq2_segments, axis=0), + 3: np.mean(seq3_segments, axis=0) + } + + # Filter the data using predefined frequency bands + band_data = self.apply_filter_banks(self.data.get_data('EEG Data')) + + # Generate CCA-based spatial filters and templates for each band and each m-sequence + cca_model = {} + for band in self.freq_bands: + band_key = f'band_{band[0]}_{band[1]}' + cca_model[band_key] = {} + + for i in range(1, 4): # Assuming there are 3 m-sequences + cca = CCA(n_components=1) + filtered_template = self.bandpass_filter(templates[i], band[0], band[1], self.frequency) + cca.fit(filtered_template.T, self.mSequence[i - 1]) + cca_model[band_key][i] = cca + + # Store the CCA models + self.cca_models = cca_model + self.templates = templates # Store templates for future use + + + ##Begin Playing +#=================================================================================================== + @rpc + def decode(self) -> int: + # Get the choices decoded so far + choices = self.decoded_choices + + # Determine the most common choice + user_choice = max(set(choices), key=choices.count) + + # Clear the decoded choices list for the next round + self.decoded_choices = [] + + # Return the most common detected choice + return user_choice + def decode_choice(self): + band_data = self.apply_filter_banks(self.data.get_data('EEG Data')[:, -1500]) # applying filter banks to EEG data + self.correlation_coefficients = self.apply_shifting_window_cca(band_data) # getting the correlation coefficients by applying shifting window CCA + highest_correlation, detected_choice = self.evaluate_correlation_coefficients(self.correlation_coefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice + self.decoded_choices.append[detected_choice] +def apply_shifting_window_cca(self, band_data): + """ + Applies shifting window CCA to the filtered band data. + """ + correlation_coefficients = {1: [], 2: [], 3: []} + window_size = 300 # For example, 1 second window for 300 Hz sampling rate + step_size = 150 # For example, 0.5 second step size for 300 Hz sampling rate + + for seq in correlation_coefficients.keys(): + for band_idx, band in enumerate(self.freq_bands): + band_key = f'band_{band[0]}_{band[1]}' + if seq in self.cca_models and band_key in self.cca_models[seq]: + cca_model = self.cca_models[seq][band_key] + num_windows = (band_data[band_key].shape[1] - window_size) // step_size + 1 + + for i in range(num_windows): + start = i * step_size + end = start + window_size + window_data = band_data[band_key][:, start:end] + + # Apply the CCA model to the windowed data + filtered_data = cca_model.transform(window_data.T) + + # Calculate the correlation with the corresponding frequency band template + correlation = self.calculate_correlations(filtered_data, seq, band_key) + + correlation_coefficients[seq].append(correlation) + + return correlation_coefficients + + def calculate_correlations(self, filtered_data, seq, band_key): + # Get the corresponding template for the sequence and frequency band + template = self.templates[seq][band_key] + + # Calculate the correlation between the filtered data and the corresponding filtered template + corr = np.corrcoef(filtered_data[:, 0], template[:, 0])[0, 1] + + return corr + + def evaluate_correlation_coefficients(self, correlation_coefficients): + avg_correlations = { + 1: np.mean(correlation_coefficients[1]), + 2: np.mean(correlation_coefficients[2]), + 3: np.mean(correlation_coefficients[3]) + } + + # Sort the sequences by their average correlation in descending order + sorted_correlations = sorted(avg_correlations.items(), key=lambda item: item[1], reverse=True) + + # Get the highest and second-highest correlations + highest_sequence, highest_corr = sorted_correlations[0] + second_highest_sequence, second_highest_corr = sorted_correlations[1] + + # Check if the highest correlation is at least 0.15 higher than the second highest + if highest_corr >= second_highest_corr + 0.15: + return highest_corr, highest_sequence + else: + return highest_corr, -1 From 65f412f6060c98ca5f681c48946e6d6dfd951243 Mon Sep 17 00:00:00 2001 From: Tommy Lu Date: Thu, 19 Sep 2024 18:34:13 -0400 Subject: [PATCH 03/26] 9/19 update --- .../WearableSensingScript.py | 24 +- .../CVEP-dummyScript.py | 23 ++ .../WearableSensingNeuralCooked/CVEP_TEST3.py | 8 +- .../WearableSensing/WearableSensingScript.py | 97 -------- .../WearableSensing_MI_BalanceBall.py | 223 ++++++++++++++++++ 5 files changed, 254 insertions(+), 121 deletions(-) create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP-dummyScript.py delete mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingScript.py create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensing_MI_BalanceBall.py diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py b/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py index e4586b19..573633f5 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py @@ -1,5 +1,4 @@ from pylsl import local_clock - from physiolabxr.scripting.RenaScript import RenaScript from physiolabxr.thirdparty.WearableSensing.DSI_py3 import * import numpy as np @@ -9,15 +8,13 @@ #Creating a data buffer with the DataBuffer class data_buffer = DataBuffer() +is_first_time = True +time_offset = 0 # time offset for the first packet to the local_clock() @MessageCallback -def ExampleMessageCallback(msg, lvl=0): +def ExampleMessageCallback( msg, lvl=0 ): if lvl <= 3: # ignore messages at debugging levels higher than 3 - print("DSI Message (level %d): %s" % (lvl, IfStringThenNormalString(msg))) + print( "DSI Message (level %d): %s" % ( lvl, IfStringThenNormalString( msg ) ) ) return 1 - - -is_first_time = True -time_offset = 0 # time offset for the first packet to the local_clock() @SampleCallback def ExampleSampleCallback_Signals(headsetPtr, packetTime, userData): #This is the function that will be called every time a new packet is received @@ -52,19 +49,6 @@ def ExampleSampleCallback_Signals(headsetPtr, packetTime, userData): } #Update the data buffer with the new data data_buffer.update_buffer(new_data_dict) - - -@SampleCallback -def ExampleSampleCallback_Impedances(headsetPtr, packetTime, userData): - #Not yet used - h = Headset(headsetPtr) - fmt = '%s = %5.3f' - strings = [fmt % (IfStringThenNormalString(src.GetName()), src.GetImpedanceEEG()) for src in h.Sources() if - src.IsReferentialEEG() and not src.IsFactoryReference()] - strings.append(fmt % ('CMF @ ' + h.GetFactoryReferenceString(), h.GetImpedanceCMF())) - print(('%8.3f: ' % packetTime) + ', '.join(strings)) - sys.stdout.flush() - class DSI24(RenaScript): def __init__(self, *args, **kwargs): """ diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP-dummyScript.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP-dummyScript.py new file mode 100644 index 00000000..d710d15d --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP-dummyScript.py @@ -0,0 +1,23 @@ +#Using 2 RPCs (train, decode) that gets called +import numpy as np +from scipy.signal import butter, filtfilt +from sklearn.cross_decomposition import CCA +from collections import deque +from enum import Enum +import numpy as np +from physiolabxr.scripting.RenaScript import RenaScript +from physiolabxr.utils.buffers import DataBuffer +from imblearn.over_sampling import SMOTE +from sklearn.linear_model import LogisticRegression +from sklearn.model_selection import train_test_split +from sklearn.metrics import f1_score +from sklearn import metrics +from physiolabxr.rpc.decorator import rpc, async_rpc + +class NeuroCooked(RenaScript): + def __init__(self, *args, **kwargs): + """ + Please do not edi this function + """ + super().__init__(*args, **kwargs) + def init(self): \ No newline at end of file diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py index 80e2deb0..9c213d38 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py @@ -84,8 +84,8 @@ def training(self) -> int: return 1 - @rpc - def seq_data(self, sequence_num: int): #Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat + @async_rpc + def add_seq_data(self, sequence_num: int): #Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat if sequence_num == 0: self.seq1_data = np.append(self.seq1_data, self.data.get_data('EEG Data')[:,-1500:]) #Every 5 seconds elif sequence_num == 1: @@ -134,7 +134,7 @@ def train_cca(self): ##Begin Playing #=================================================================================================== - @rpc + @async_rpc def decode(self) -> int: # Get the choices decoded so far choices = self.decoded_choices @@ -152,7 +152,7 @@ def decode_choice(self): self.correlation_coefficients = self.apply_shifting_window_cca(band_data) # getting the correlation coefficients by applying shifting window CCA highest_correlation, detected_choice = self.evaluate_correlation_coefficients(self.correlation_coefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice self.decoded_choices.append[detected_choice] -def apply_shifting_window_cca(self, band_data): + def apply_shifting_window_cca(self, band_data): """ Applies shifting window CCA to the filtered band data. """ diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingScript.py b/physiolabxr/scripting/WearableSensing/WearableSensingScript.py deleted file mode 100644 index aad6d05c..00000000 --- a/physiolabxr/scripting/WearableSensing/WearableSensingScript.py +++ /dev/null @@ -1,97 +0,0 @@ -from physiolabxr.scripting.RenaScript import RenaScript -from physiolabxr.thirdparty.WearableSensing.DSI_py3 import * -import numpy as np -import sys -from physiolabxr.utils.buffers import DataBuffer - -#Creating a data buffer with the DataBuffer class -data_buffer = DataBuffer() - -@MessageCallback -def ExampleMessageCallback(msg, lvl=0): - if lvl <= 3: # ignore messages at debugging levels higher than 3 - print("DSI Message (level %d): %s" % (lvl, IfStringThenNormalString(msg))) - return 1 - - -@SampleCallback -def ExampleSampleCallback_Signals(headsetPtr, packetTime, userData): - #This is the function that will be called every time a new packet is received - global data_buffer - #Grab the headset by using a pointer - h = Headset(headsetPtr) - #Get the signal from each channel and format it so that it can be created into an array - new_data = np.array(['%+08.2f' % (ch.GetSignal()) for ch in h.Channels()]) - #Reshapes the array into a 24x1 array so that it can be inputted into the data_buffer - new_data = new_data.reshape(24,1) - #Rearrange new_data to fit with desired output format - new_data = new_data[[9, 10, 3, 2, 4, 17, 18, 7, 1, 5, 11, 22, 12, 21, 8, 0, 6, 13, 14, 20, 23, 19, 15, 16], :] - #Get the time of the packet as a temporary solution to timestamps - t = [packetTime] - #Create a dictionary with the stream name, data, and timestamps - new_data_dict = { - 'stream_name': 'DSI-24', - 'frames': new_data, - 'timestamps': t - } - #Update the data buffer with the new data - data_buffer.update_buffer(new_data_dict) - - -@SampleCallback -def ExampleSampleCallback_Impedances(headsetPtr, packetTime, userData): - #Not yet used - h = Headset(headsetPtr) - fmt = '%s = %5.3f' - strings = [fmt % (IfStringThenNormalString(src.GetName()), src.GetImpedanceEEG()) for src in h.Sources() if - src.IsReferentialEEG() and not src.IsFactoryReference()] - strings.append(fmt % ('CMF @ ' + h.GetFactoryReferenceString(), h.GetImpedanceCMF())) - print(('%8.3f: ' % packetTime) + ', '.join(strings)) - sys.stdout.flush() - -class DSI24(RenaScript): - def __init__(self, *args, **kwargs): - """ - Please do not edit this function - """ - super().__init__(*args, **kwargs) - - def init(self, arg = ''): - #Create a headset object - self.headset = Headset() - #Set the message callback to ExampleMessageCallback - self.headset.SetMessageCallback(ExampleMessageCallback) - #Retrieves the command line arguments - args = getattr(sys, 'argv', ['']) - #Set the default port to the first command line argument based on the parameter provided by user - default_port = self.params['COM Port'] - #Connect the headset - self.headset.Connect(default_port) - #Start the data acquisition based on the parameter provided by user - if arg.lower().startswith('imp'): - #Currently not used - self.headset.SetSampleCallback(ExampleSampleCallback_Impedances, 0) - self.headset.StartImpedanceDriver() - else: - #Set the sample callback to ExampleSampleCallback_Signals - self.headset.SetSampleCallback(ExampleSampleCallback_Signals, 0) - if len(arg.strip()): self.headset.SetDefaultReference(arg, True) - #Start the data acquisition - self.headset.StartBackgroundAcquisition() - - def loop(self): - #Called every loop based on the user's chosen frequency - global data_buffer - #If the data buffer has data, then set the output to the data buffer - if len(data_buffer.keys()) > 0: - self.set_output(stream_name = 'DSI-24', data = data_buffer.get_data('DSI-24'), timestamp = data_buffer.get_timestamps('DSI-24')) - #Clear the data buffer - data_buffer.clear_stream_buffer_data('DSI-24') - - def cleanup(self): - #Called when the script is stopped - global data_buffer - #Stop the data acquisition - self.headset.StopDataAcquisition() - #Disconnect the headset - data_buffer.clear_buffer() diff --git a/physiolabxr/scripting/WearableSensing/WearableSensing_MI_BalanceBall.py b/physiolabxr/scripting/WearableSensing/WearableSensing_MI_BalanceBall.py new file mode 100644 index 00000000..222f1301 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensing_MI_BalanceBall.py @@ -0,0 +1,223 @@ +import os +from enum import Enum + +import mne +import numpy as np +from mne import create_info +from mne.decoding import CSP +from sklearn.discriminant_analysis import LinearDiscriminantAnalysis +from sklearn.pipeline import Pipeline + +from physiolabxr.scripting.RenaScript import RenaScript +from physiolabxr.scripting.physio.epochs import get_event_locked_data +from physiolabxr.utils.buffers import flatten + +event_marker_stream_name = 'EventMarker_BallGame' +class GameStates(Enum): + idle = 'idle' + train = 'train' + fit = 'fit' + eval = 'eval' + +class Events(Enum): + train_start = 1 + left_trial = 2 + right_trial = 3 + eval_start = 6 + +class CSPDecoder: + + def __init__(self, n_components=4): + self.n_components = n_components + self.csp = CSP(n_components=n_components, reg=None, log=True, norm_trace=False) + self.lda = LinearDiscriminantAnalysis() + self.clf = Pipeline([('CSP', self.csp), ('LDA', self.lda)]) + + def fit(self, X, y): + X = self.csp.fit_transform(X, y) + # fit classifier + self.lda.fit(X, y) + + def csp_transfomr(self, X): + return self.csp.transform(X) + + def transform(self, X): + X = self.csp.transform(X) + return self.lda.transform(X) + +def sigmoid(z): + return 1/(1 + np.exp(-z)) + +class MovingAverage: + def __init__(self, window_size=10): + self.window_size = window_size + self.buffer = [] + + def update(self, value): + self.buffer.append(value) + if len(self.buffer) > self.window_size: + self.buffer.pop(0) + + def get(self): + return np.mean(self.buffer) + +class MotorImageryBalanceBall(RenaScript): + def __init__(self, *args, **kwargs): + """ + Please do not edit this function + """ + super().__init__(*args, **kwargs) + self.cur_state = 'idle' + + + # Start will be called once when the run button is hit. + def init(self): + """ + + Note on script params: + + """ + # self.train_data_buffer = DataBuffer() + # self.eval_data_buffer = DataBuffer() + self.cur_state = 'idle' + self.transition_markers = [Events.train_start.value, -Events.train_start.value, Events.eval_start.value, -Events.eval_start.value] + self.eeg_channels = ["F3", "Fz", "F4", "C3", "Cz", "C4", "P3", "P4", ] + self.decoder_tmin = 2. + self.decoder_tmax = 5. + self.srate = 128 + self.decode_t_len = int((self.decoder_tmax - self.decoder_tmin) * self.srate) + self.label_mapping = {2: 0, 3: 1} + self.decoder = None + self.moving_average = MovingAverage(window_size=3) + + self.use_aggregated_data = False + if "participant_name" in self.params and type(self.params["participant_name"]) is str and self.params["participant_name"] != "" and \ + "participants_data_dir" in self.params and type(self.params["participants_data_dir"]) is str and os.path.exists(self.params["participants_data_dir"]): + self.use_aggregated_data = True + print("Will use aggregated data. To not use aggregated data, remove participant_name or participant_data_dir from the parameters tab. Or" + "set participant_name to empty string or participant_data_dir to a non-existing directory.") + else: + self.use_aggregated_data = False + print("Will not use aggregated data. To use aggregated data, please set participant_name and participant_data_dir in the parameters tab." + "and participant_name is not empty string and participant_data_dir exists.") + + + # loop is called times per second + def loop(self): + + if event_marker_stream_name not in self.inputs.keys(): # or #EVENT_MARKER_CHANNEL_NAME not in self.inputs.keys(): + # print('Event marker stream not found') + return + + self.process_event_markers() + if self.cur_state == GameStates.train: + pass + # keep collecting data + # print("In training") + elif self.cur_state == GameStates.eval: + self.decode() + # print("In evaluation") + + # cleanup is called when the stop button is hit + def cleanup(self): + print('Cleanup function is called') + + def process_event_markers(self): + if event_marker_stream_name in self.inputs.keys() and len(np.intersect1d(self.inputs[event_marker_stream_name][0], self.transition_markers)) > 0: + last_processed_marker_index = None + for i, event_marker in enumerate(self.inputs[event_marker_stream_name][0].T): + game_event_marker = event_marker[0] + print(f'Event marker is {event_marker} at index {i}') + + # state transition logic + if game_event_marker == Events.train_start.value: + self.cur_state = GameStates.train + print('Entering training block') + last_processed_marker_index = i + + elif game_event_marker == -Events.train_start.value: # exiting train state + # collect the trials and train the decoding model + self.collect_trials_and_train() + self.cur_state = GameStates.idle + print('Exiting training block') + last_processed_marker_index = i + + elif event_marker == Events.eval_start.value: + self.cur_state = GameStates.eval + print('Entering evaluation block') + last_processed_marker_index = i + + elif event_marker == -Events.eval_start.value: + self.cur_state = GameStates.idle + print('Exiting evaluation block') + last_processed_marker_index = i + + # # collect event marker data + # if self.cur_state == GameStates.train: + # event_type = game_state_event_marker + # timestamp = self.inputs[event_marker_stream_name][1][i] + # + # # self.train_data_buffer. + # pass + # + # elif self.cur_state == GameStates.eval: + # pass + + # self.inputs.clear_stream_buffer_data(event_marker_stream_name) + if last_processed_marker_index is not None: + self.inputs.clear_stream_up_to_index(event_marker_stream_name, last_processed_marker_index+1) + + def collect_trials_and_train(self): + event_locked_data, last_event_time = get_event_locked_data(event_marker=self.inputs[event_marker_stream_name], + data=self.inputs["DSI-24"][3,2,4,8,7,9,15,16], + events_of_interest=[Events.left_trial.value, Events.right_trial.value], + tmin=self.decoder_tmin, tmax=self.decoder_tmax, srate=self.srate, return_last_event_time=True, verbose=1) + # TODO check the shape of the event locked data, how long is it. does it equal decode_t_len + + train_end_index = np.argwhere(self.inputs[event_marker_stream_name][0][0] == - Events.train_start.value).item() + train_end_time = self.inputs[event_marker_stream_name][1][train_end_index] + self.inputs.clear_up_to(train_end_time) # Clear the input buffer up to the last event time to avoid processing duplicate data + + # build the classifier, ref https://mne.tools/dev/auto_examples/decoding/decoding_csp_eeg.html + labels = flatten([[events] * len(data) for events, data in event_locked_data.items()]) + labels = np.array([self.label_mapping[label] for label in labels]) + epochs_data = np.concatenate(list(event_locked_data.values()), axis=0) + info = create_info(ch_names=self.eeg_channels, sfreq=self.srate, ch_types='eeg') + montage = mne.channels.make_standard_montage("biosemi64") + info.set_montage(montage) + + if self.use_aggregated_data: + participant_dir = os.path.join(self.params["participants_data_dir"], self.params["participant_name"]) + if os.path.exists(participant_dir): # use aggregated data + loaded_epochs = np.load(os.path.join(participant_dir, "epochs_data.npy")) + epochs_data = np.concatenate((epochs_data, loaded_epochs)) + labels = np.concatenate((labels, np.load(os.path.join(participant_dir, "labels.npy")))) + print(f"Post-train: Loaded {len(loaded_epochs)} for participant {self.params['participant_name']}. Concatenated with current data. Total data size: {epochs_data.shape}") + else: # if this is a new participant, create the directory + os.makedirs(participant_dir) + print(f"Post-train: New participant: {self.params['participant_name']} Created directory {os.path.join(self.params['participants_data_dir'], self.params['participant_name'])}") + # save the data + np.save(os.path.join(self.params["participants_data_dir"], self.params["participant_name"], "epochs_data.npy"), epochs_data) + np.save(os.path.join(self.params["participants_data_dir"], self.params["participant_name"], "labels.npy"), labels) + print(f"Post-train: Saved {len(epochs_data)} for participant {self.params['participant_name']}") + + self.decoder = CSPDecoder(n_components=4) + self.decoder.fit(epochs_data, labels) + # get the classification score + y_pred = self.decoder.transform(epochs_data) + score = self.decoder.lda.score(self.decoder.csp_transfomr(epochs_data), labels) + print(f"Fitting completed. Classification score: {score}. Plotting CSP...") + self.decoder.csp.plot_patterns(info, ch_type="eeg", units="Patterns (AU)", size=1.5) + + def decode(self): + if "ma_window" in self.params and self.moving_average.window_size != self.params["ma_window"]: + self.moving_average = MovingAverage(window_size=self.params["ma_window"]) + data = self.inputs["DSI-24"][0][None, :, -self.decode_t_len:] + y_pred = self.decoder.transform(data)[0] # only one sample in batch + # normalize y_pred from -10 to 10 to 0 to 1 + y_pred = sigmoid(y_pred) + # apply moving average + self.moving_average.update(y_pred[0]) + self.outputs["MotorImageryInference"] = [self.moving_average.get()] + + From 379e79e738ce7f20a672104ecf3bccc30e6bcd72 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Mon, 30 Sep 2024 22:27:28 -0400 Subject: [PATCH 04/26] Made changes to Dummy script --- .../CVEPdummyScript.proto | 17 ++ ...CVEP-dummyScript.py => CVEPdummyScript.py} | 30 ++- .../CVEPdummyScriptServer.py | 17 ++ .../CVEPdummyScript_pb2.py | 43 ++++ .../CVEPdummyScript_pb2_grpc.py | 184 ++++++++++++++++++ tmpGrpcTools/Program.cs | 2 + tmpGrpcTools/obj/project.assets.json | 139 +++++++++++++ tmpGrpcTools/obj/project.nuget.cache | 10 + .../obj/tmpGrpcTools.csproj.nuget.dgspec.json | 72 +++++++ .../obj/tmpGrpcTools.csproj.nuget.g.props | 21 ++ .../obj/tmpGrpcTools.csproj.nuget.g.targets | 6 + tmpGrpcTools/tmpGrpcTools.csproj | 17 ++ 12 files changed, 555 insertions(+), 3 deletions(-) create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript.proto rename physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/{CVEP-dummyScript.py => CVEPdummyScript.py} (51%) create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScriptServer.py create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript_pb2.py create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript_pb2_grpc.py create mode 100644 tmpGrpcTools/Program.cs create mode 100644 tmpGrpcTools/obj/project.assets.json create mode 100644 tmpGrpcTools/obj/project.nuget.cache create mode 100644 tmpGrpcTools/obj/tmpGrpcTools.csproj.nuget.dgspec.json create mode 100644 tmpGrpcTools/obj/tmpGrpcTools.csproj.nuget.g.props create mode 100644 tmpGrpcTools/obj/tmpGrpcTools.csproj.nuget.g.targets create mode 100644 tmpGrpcTools/tmpGrpcTools.csproj diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript.proto b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript.proto new file mode 100644 index 00000000..d0780907 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +import "google/protobuf/empty.proto"; +service CVEPdummyScript { + rpc addSeqData(addSeqDataRequest) returns (google.protobuf.Empty); + rpc decodeChoice(google.protobuf.Empty) returns (decodeChoiceResponse); + rpc trainingModel(google.protobuf.Empty) returns (trainingModelResponse); +} +message addSeqDataRequest { + int32 sequenceNum = 1; + float Duration = 2; +} +message decodeChoiceResponse { + int32 message = 1; +} +message trainingModelResponse { + int32 message = 1; +} \ No newline at end of file diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP-dummyScript.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript.py similarity index 51% rename from physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP-dummyScript.py rename to physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript.py index d710d15d..f3c4a990 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP-dummyScript.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript.py @@ -13,11 +13,35 @@ from sklearn.metrics import f1_score from sklearn import metrics from physiolabxr.rpc.decorator import rpc, async_rpc +import time +import random -class NeuroCooked(RenaScript): +class CVEPdummyScript(RenaScript): def __init__(self, *args, **kwargs): """ - Please do not edi this function + Please do not edit this function """ super().__init__(*args, **kwargs) - def init(self): \ No newline at end of file + + def init(self): + return + def loop(self): + return #adding the detected choice to the list of detected choices + def cleanup(self): + return + + @async_rpc + def trainingModel(self) -> int: + time.sleep(1) + return 1 + + @async_rpc + def addSeqData(self, sequenceNum: int, Duration: float): # Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat + time.sleep(Duration) + print(sequenceNum) + + @async_rpc + def decodeChoice(self) -> int: + return random.randint(1,3) + + diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScriptServer.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScriptServer.py new file mode 100644 index 00000000..e9eed68e --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScriptServer.py @@ -0,0 +1,17 @@ +from google.protobuf import empty_pb2 +from google.protobuf.json_format import MessageToDict +import CVEPdummyScript_pb2_grpc, CVEPdummyScript_pb2 + +class CVEPdummyScriptServer(CVEPdummyScript_pb2_grpc.CVEPdummyScriptServicer): + script_instance = None + async def addSeqData(self, request, context): + result = self.script_instance.addSeqData(**MessageToDict(request)) + return empty_pb2.Empty() + + async def decodeChoice(self, request, context): + result = self.script_instance.decodeChoice() + return CVEPdummyScript_pb2.decodeChoiceResponse(message=result) + + async def trainingModel(self, request, context): + result = self.script_instance.trainingModel() + return CVEPdummyScript_pb2.trainingModelResponse(message=result) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript_pb2.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript_pb2.py new file mode 100644 index 00000000..071e78d2 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript_pb2.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: CVEPdummyScript.proto +# Protobuf Python Version: 5.27.2 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 27, + 2, + '', + 'CVEPdummyScript.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x43VEPdummyScript.proto\x1a\x1bgoogle/protobuf/empty.proto\":\n\x11\x61\x64\x64SeqDataRequest\x12\x13\n\x0bsequenceNum\x18\x01 \x01(\x05\x12\x10\n\x08\x44uration\x18\x02 \x01(\x02\"\'\n\x14\x64\x65\x63odeChoiceResponse\x12\x0f\n\x07message\x18\x01 \x01(\x05\"(\n\x15trainingModelResponse\x12\x0f\n\x07message\x18\x01 \x01(\x05\x32\xcb\x01\n\x0f\x43VEPdummyScript\x12\x38\n\naddSeqData\x12\x12.addSeqDataRequest\x1a\x16.google.protobuf.Empty\x12=\n\x0c\x64\x65\x63odeChoice\x12\x16.google.protobuf.Empty\x1a\x15.decodeChoiceResponse\x12?\n\rtrainingModel\x12\x16.google.protobuf.Empty\x1a\x16.trainingModelResponseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'CVEPdummyScript_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_ADDSEQDATAREQUEST']._serialized_start=54 + _globals['_ADDSEQDATAREQUEST']._serialized_end=112 + _globals['_DECODECHOICERESPONSE']._serialized_start=114 + _globals['_DECODECHOICERESPONSE']._serialized_end=153 + _globals['_TRAININGMODELRESPONSE']._serialized_start=155 + _globals['_TRAININGMODELRESPONSE']._serialized_end=195 + _globals['_CVEPDUMMYSCRIPT']._serialized_start=198 + _globals['_CVEPDUMMYSCRIPT']._serialized_end=401 +# @@protoc_insertion_point(module_scope) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript_pb2_grpc.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript_pb2_grpc.py new file mode 100644 index 00000000..a4adad52 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript_pb2_grpc.py @@ -0,0 +1,184 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +import CVEPdummyScript_pb2 as CVEPdummyScript__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + +GRPC_GENERATED_VERSION = '1.66.1' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in CVEPdummyScript_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class CVEPdummyScriptStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.addSeqData = channel.unary_unary( + '/CVEPdummyScript/addSeqData', + request_serializer=CVEPdummyScript__pb2.addSeqDataRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + _registered_method=True) + self.decodeChoice = channel.unary_unary( + '/CVEPdummyScript/decodeChoice', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=CVEPdummyScript__pb2.decodeChoiceResponse.FromString, + _registered_method=True) + self.trainingModel = channel.unary_unary( + '/CVEPdummyScript/trainingModel', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=CVEPdummyScript__pb2.trainingModelResponse.FromString, + _registered_method=True) + + +class CVEPdummyScriptServicer(object): + """Missing associated documentation comment in .proto file.""" + + def addSeqData(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def decodeChoice(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def trainingModel(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_CVEPdummyScriptServicer_to_server(servicer, server): + rpc_method_handlers = { + 'addSeqData': grpc.unary_unary_rpc_method_handler( + servicer.addSeqData, + request_deserializer=CVEPdummyScript__pb2.addSeqDataRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'decodeChoice': grpc.unary_unary_rpc_method_handler( + servicer.decodeChoice, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=CVEPdummyScript__pb2.decodeChoiceResponse.SerializeToString, + ), + 'trainingModel': grpc.unary_unary_rpc_method_handler( + servicer.trainingModel, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=CVEPdummyScript__pb2.trainingModelResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'CVEPdummyScript', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('CVEPdummyScript', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class CVEPdummyScript(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def addSeqData(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/CVEPdummyScript/addSeqData', + CVEPdummyScript__pb2.addSeqDataRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def decodeChoice(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/CVEPdummyScript/decodeChoice', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + CVEPdummyScript__pb2.decodeChoiceResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def trainingModel(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/CVEPdummyScript/trainingModel', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + CVEPdummyScript__pb2.trainingModelResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/tmpGrpcTools/Program.cs b/tmpGrpcTools/Program.cs new file mode 100644 index 00000000..3751555c --- /dev/null +++ b/tmpGrpcTools/Program.cs @@ -0,0 +1,2 @@ +// See https://aka.ms/new-console-template for more information +Console.WriteLine("Hello, World!"); diff --git a/tmpGrpcTools/obj/project.assets.json b/tmpGrpcTools/obj/project.assets.json new file mode 100644 index 00000000..4b2b1c8a --- /dev/null +++ b/tmpGrpcTools/obj/project.assets.json @@ -0,0 +1,139 @@ +{ + "version": 3, + "targets": { + "net8.0": { + "Grpc.Tools/2.66.0": { + "type": "package", + "build": { + "build/Grpc.Tools.props": {}, + "build/Grpc.Tools.targets": {} + } + } + } + }, + "libraries": { + "Grpc.Tools/2.66.0": { + "sha512": "URTltx2E0aTGQqVW+H09AZiGR/qyQ3naHPymSG1/Ytgm8bPdjSltnsIFanbxb7rXxdYwGzLFGy82R82M1UktXg==", + "type": "package", + "path": "grpc.tools/2.66.0", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "build/Grpc.Tools.props", + "build/Grpc.Tools.targets", + "build/_grpc/Grpc.CSharp.xml", + "build/_grpc/_Grpc.Tools.props", + "build/_grpc/_Grpc.Tools.targets", + "build/_protobuf/Google.Protobuf.Tools.props", + "build/_protobuf/Google.Protobuf.Tools.targets", + "build/_protobuf/Protobuf.CSharp.xml", + "build/_protobuf/net45/Protobuf.MSBuild.dll", + "build/_protobuf/net45/Protobuf.MSBuild.pdb", + "build/_protobuf/netstandard1.3/Protobuf.MSBuild.dll", + "build/_protobuf/netstandard1.3/Protobuf.MSBuild.pdb", + "build/native/include/google/protobuf/any.proto", + "build/native/include/google/protobuf/api.proto", + "build/native/include/google/protobuf/descriptor.proto", + "build/native/include/google/protobuf/duration.proto", + "build/native/include/google/protobuf/empty.proto", + "build/native/include/google/protobuf/field_mask.proto", + "build/native/include/google/protobuf/source_context.proto", + "build/native/include/google/protobuf/struct.proto", + "build/native/include/google/protobuf/timestamp.proto", + "build/native/include/google/protobuf/type.proto", + "build/native/include/google/protobuf/wrappers.proto", + "grpc.tools.2.66.0.nupkg.sha512", + "grpc.tools.nuspec", + "packageIcon.png", + "tools/linux_arm64/grpc_csharp_plugin", + "tools/linux_arm64/protoc", + "tools/linux_x64/grpc_csharp_plugin", + "tools/linux_x64/protoc", + "tools/linux_x86/grpc_csharp_plugin", + "tools/linux_x86/protoc", + "tools/macosx_x64/grpc_csharp_plugin", + "tools/macosx_x64/protoc", + "tools/windows_x64/grpc_csharp_plugin.exe", + "tools/windows_x64/protoc.exe", + "tools/windows_x86/grpc_csharp_plugin.exe", + "tools/windows_x86/protoc.exe" + ] + } + }, + "projectFileDependencyGroups": { + "net8.0": [ + "Grpc.Tools >= 2.66.0" + ] + }, + "packageFolders": { + "C:\\Users\\tlupe\\.nuget\\packages\\": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "D:\\School Stuff\\PhysioLabXR\\PhysioLabXR-Community\\tmpGrpcTools\\tmpGrpcTools.csproj", + "projectName": "tmpGrpcTools", + "projectPath": "D:\\School Stuff\\PhysioLabXR\\PhysioLabXR-Community\\tmpGrpcTools\\tmpGrpcTools.csproj", + "packagesPath": "C:\\Users\\tlupe\\.nuget\\packages\\", + "outputPath": "D:\\School Stuff\\PhysioLabXR\\PhysioLabXR-Community\\tmpGrpcTools\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\tlupe\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "Grpc.Tools": { + "include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive", + "suppressParent": "All", + "target": "Package", + "version": "[2.66.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.402/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/tmpGrpcTools/obj/project.nuget.cache b/tmpGrpcTools/obj/project.nuget.cache new file mode 100644 index 00000000..0851cd28 --- /dev/null +++ b/tmpGrpcTools/obj/project.nuget.cache @@ -0,0 +1,10 @@ +{ + "version": 2, + "dgSpecHash": "r5py4xa+ux0=", + "success": true, + "projectFilePath": "D:\\School Stuff\\PhysioLabXR\\PhysioLabXR-Community\\tmpGrpcTools\\tmpGrpcTools.csproj", + "expectedPackageFiles": [ + "C:\\Users\\tlupe\\.nuget\\packages\\grpc.tools\\2.66.0\\grpc.tools.2.66.0.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/tmpGrpcTools/obj/tmpGrpcTools.csproj.nuget.dgspec.json b/tmpGrpcTools/obj/tmpGrpcTools.csproj.nuget.dgspec.json new file mode 100644 index 00000000..a7f6f4c6 --- /dev/null +++ b/tmpGrpcTools/obj/tmpGrpcTools.csproj.nuget.dgspec.json @@ -0,0 +1,72 @@ +{ + "format": 1, + "restore": { + "D:\\School Stuff\\PhysioLabXR\\PhysioLabXR-Community\\tmpGrpcTools\\tmpGrpcTools.csproj": {} + }, + "projects": { + "D:\\School Stuff\\PhysioLabXR\\PhysioLabXR-Community\\tmpGrpcTools\\tmpGrpcTools.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "D:\\School Stuff\\PhysioLabXR\\PhysioLabXR-Community\\tmpGrpcTools\\tmpGrpcTools.csproj", + "projectName": "tmpGrpcTools", + "projectPath": "D:\\School Stuff\\PhysioLabXR\\PhysioLabXR-Community\\tmpGrpcTools\\tmpGrpcTools.csproj", + "packagesPath": "C:\\Users\\tlupe\\.nuget\\packages\\", + "outputPath": "D:\\School Stuff\\PhysioLabXR\\PhysioLabXR-Community\\tmpGrpcTools\\obj\\", + "projectStyle": "PackageReference", + "configFilePaths": [ + "C:\\Users\\tlupe\\AppData\\Roaming\\NuGet\\NuGet.Config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "Grpc.Tools": { + "target": "Package", + "version": "[2.66.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.402/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/tmpGrpcTools/obj/tmpGrpcTools.csproj.nuget.g.props b/tmpGrpcTools/obj/tmpGrpcTools.csproj.nuget.g.props new file mode 100644 index 00000000..faaba399 --- /dev/null +++ b/tmpGrpcTools/obj/tmpGrpcTools.csproj.nuget.g.props @@ -0,0 +1,21 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\tlupe\.nuget\packages\ + PackageReference + 6.11.1 + + + + + + + + + C:\Users\tlupe\.nuget\packages\grpc.tools\2.66.0 + + \ No newline at end of file diff --git a/tmpGrpcTools/obj/tmpGrpcTools.csproj.nuget.g.targets b/tmpGrpcTools/obj/tmpGrpcTools.csproj.nuget.g.targets new file mode 100644 index 00000000..98e3b758 --- /dev/null +++ b/tmpGrpcTools/obj/tmpGrpcTools.csproj.nuget.g.targets @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/tmpGrpcTools/tmpGrpcTools.csproj b/tmpGrpcTools/tmpGrpcTools.csproj new file mode 100644 index 00000000..038d3747 --- /dev/null +++ b/tmpGrpcTools/tmpGrpcTools.csproj @@ -0,0 +1,17 @@ + + + + Exe + net8.0 + enable + enable + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + From 79b5959529e0a581c7b1af160d3a8d3c30c12265 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Thu, 3 Oct 2024 11:01:33 -0400 Subject: [PATCH 05/26] Adding impedance check --- physiolabxr/_ui/DSI24_Options.ui | 2 +- .../DeviceInterface/DSI24/DSI24_Options.py | 12 +++-- .../DeviceInterface/DSI24/DSI24_Process.py | 45 ++++++++++++++++++- 3 files changed, 54 insertions(+), 5 deletions(-) diff --git a/physiolabxr/_ui/DSI24_Options.ui b/physiolabxr/_ui/DSI24_Options.ui index 5483e121..60aa0315 100644 --- a/physiolabxr/_ui/DSI24_Options.ui +++ b/physiolabxr/_ui/DSI24_Options.ui @@ -39,7 +39,7 @@ - + Check Impedance diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py index a83d561d..bae7a7a5 100644 --- a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py +++ b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py @@ -5,10 +5,16 @@ class DSI24_Options(BaseDeviceOptions): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.check_impedance_btn.clicked.connect(self.check_impedance_btn_clicked) + self.check_impedance_chkbx.clicked.connect(self.check_impedance_chkbx_clicked) - def check_impedance_btn_clicked(self): - raise NotImplementedError + def check_impedance_chkbx_clicked(self): + # This method will be called when the checkbox is clicked + if self.check_impedance_chkbx.isChecked(): + print("Check Impedance is checked.") + # Add logic to handle the case when the checkbox is checked + else: + print("Check Impedance is unchecked.") + # Add logic to handle the case when the checkbox is unchecked def start_stream_args(self): return {'bluetooth_port': self.device_port_lineedit.text()} diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py index 30b5b7c9..099eb87d 100644 --- a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py +++ b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py @@ -68,7 +68,50 @@ def example_sample_callback_signals(headsetPtr, packetTime, userData): @SampleCallback def example_sample_callback_impedances(headsetPtr, packetTime, userData): - raise NotImplementedError + global is_first_time + global time_offset + global dsi24_data_socket + + # Create the headset object + h = Headset(headsetPtr) + + # Collect impedance values from all referential EEG channels (excluding factory reference) + impedance_data = np.array( + ['%+08.2f' % (src.GetImpedanceEEG() for src in h.Sources() if src.IsReferentialEEG() and not src.IsFactoryReference())]) + impedance_data = impedance_data.reshape(len(impedance_data), 1) + impedance_data = impedance_data[[9, 10, 3, 2, 4, 17, 18, 7, 1, 5, 11, 22, 12, 21, 8, 0, 6, 13, 14, 20, 23, 19, 15, 16], :] + + # Add the common-mode function (CMF) impedance value at the end + cmf_impedance = np.array([h.GetImpedanceCMF()]) + impedance_data = np.vstack([impedance_data, cmf_impedance]) + + # Calculate the time offset on the first packet + if is_first_time: + time_offset = local_clock() - float(packetTime) + is_first_time = False + + # Create timestamp + t = [float(packetTime) + time_offset] + + # Ensure that data and timestamps are aligned + if impedance_data.shape[1] != len(t): + print('Data and timestamp mismatch') + print(impedance_data.shape) + print(len(t)) + + # Convert impedance data to a dictionary for streaming + impedance_data_dict = { + 't': 'd', # 'd' for data, 'i' for info, 'e' for error + 'impedance_frame': impedance_data.tolist(), # Convert impedance data to a list for JSON serialization + 'timestamp': t + } + + # Send the impedance data via ZMQ socket to the main process + try: + dsi24_data_socket.send_json(impedance_data_dict) + except zmq.error.ZMQError: + print("Socket already closed.") + def DSI24_process(terminate_event, network_port, com_port, args=''): """Process to connect to the DSI-24 device and send data to the main process From b78094933b40ef0fd0658bc35f85d3e90f80b191 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Thu, 3 Oct 2024 14:28:13 -0400 Subject: [PATCH 06/26] Updating things, Idk what has changed --- physiolabxr/_media/icons/device_options.svg | 5 + physiolabxr/_media/icons/terminal.svg | 12 ++ .../_presets/LSLPresets/LSL_DSI24.json | 0 physiolabxr/_ui/DSI24_Options.ui | 63 ++++++++ .../DeviceInterface/DSI24/DSI24_Interface.py | 0 .../DeviceInterface/DSI24/DSI24_Options.py | 0 .../DeviceInterface/DSI24/DSI24_Process.py | 0 .../DeviceInterface/DSI24/__init__.py | 0 ...y => UnicornHybridBlackDeviceInterface.py} | 37 ++--- .../interfaces/DeviceInterface/utils.py | 0 physiolabxr/threadings/DeviceWorker.py | 0 physiolabxr/ui/BaseDeviceOptions.py | 70 +++++++++ physiolabxr/ui/CustomDeviceWidget.py | 59 -------- physiolabxr/ui/DeviceMessageConsole.py | 29 ++++ physiolabxr/ui/DeviceWidget.py | 137 ++++++++++++++++++ 15 files changed, 327 insertions(+), 85 deletions(-) create mode 100644 physiolabxr/_media/icons/device_options.svg create mode 100644 physiolabxr/_media/icons/terminal.svg create mode 100644 physiolabxr/_presets/LSLPresets/LSL_DSI24.json create mode 100644 physiolabxr/_ui/DSI24_Options.ui create mode 100644 physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Interface.py create mode 100644 physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py create mode 100644 physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py create mode 100644 physiolabxr/interfaces/DeviceInterface/DSI24/__init__.py rename physiolabxr/interfaces/DeviceInterface/{CustomDeviceInterface.py => UnicornHybridBlackDeviceInterface.py} (87%) create mode 100644 physiolabxr/interfaces/DeviceInterface/utils.py create mode 100644 physiolabxr/threadings/DeviceWorker.py create mode 100644 physiolabxr/ui/BaseDeviceOptions.py delete mode 100644 physiolabxr/ui/CustomDeviceWidget.py create mode 100644 physiolabxr/ui/DeviceMessageConsole.py create mode 100644 physiolabxr/ui/DeviceWidget.py diff --git a/physiolabxr/_media/icons/device_options.svg b/physiolabxr/_media/icons/device_options.svg new file mode 100644 index 00000000..cdeab925 --- /dev/null +++ b/physiolabxr/_media/icons/device_options.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/physiolabxr/_media/icons/terminal.svg b/physiolabxr/_media/icons/terminal.svg new file mode 100644 index 00000000..e551a4bf --- /dev/null +++ b/physiolabxr/_media/icons/terminal.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/physiolabxr/_presets/LSLPresets/LSL_DSI24.json b/physiolabxr/_presets/LSLPresets/LSL_DSI24.json new file mode 100644 index 00000000..e69de29b diff --git a/physiolabxr/_ui/DSI24_Options.ui b/physiolabxr/_ui/DSI24_Options.ui new file mode 100644 index 00000000..5483e121 --- /dev/null +++ b/physiolabxr/_ui/DSI24_Options.ui @@ -0,0 +1,63 @@ + + + form + + + + 0 + 0 + 932 + 713 + + + + + 0 + 0 + + + + Form + + + + + + + + Device port + + + + + + + COM7 + + + + + + + + + Check Impedance + + + + + + + + + Battery Level + + + + + + + + + + diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Interface.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Interface.py new file mode 100644 index 00000000..e69de29b diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py new file mode 100644 index 00000000..e69de29b diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py new file mode 100644 index 00000000..e69de29b diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/__init__.py b/physiolabxr/interfaces/DeviceInterface/DSI24/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/physiolabxr/interfaces/DeviceInterface/CustomDeviceInterface.py b/physiolabxr/interfaces/DeviceInterface/UnicornHybridBlackDeviceInterface.py similarity index 87% rename from physiolabxr/interfaces/DeviceInterface/CustomDeviceInterface.py rename to physiolabxr/interfaces/DeviceInterface/UnicornHybridBlackDeviceInterface.py index 39277bce..c5341bcc 100644 --- a/physiolabxr/interfaces/DeviceInterface/CustomDeviceInterface.py +++ b/physiolabxr/interfaces/DeviceInterface/UnicornHybridBlackDeviceInterface.py @@ -1,24 +1,22 @@ +from physiolabxr.exceptions.exceptions import FailToSetupDevice + try: import bluetooth except ImportError: - print('Bluetooth module is not available') - print('Please install the bluetooth module by running "pip install pybluez"') + raise FailToSetupDevice('Bluetooth module is not available.' + 'Please install the bluetooth module by running "pip install pybluez"') -import brainflow -from brainflow.board_shim import BoardShim, BrainFlowInputParams import re import time -import warnings -from physiolabxr.configs.GlobalSignals import GlobalSignals -from physiolabxr.exceptions.exceptions import CustomDeviceNotFoundError, CustomDeviceStartStreamError, \ - CustomDeviceStreamInterruptedError -from physiolabxr.interfaces.DeviceInterface.DeviceInterface import DeviceInterface +import bluetooth +import brainflow +from brainflow import BoardShim, BrainFlowInputParams -try: - from pylsl import StreamInfo, StreamOutlet -except: - warnings.warn("UnicornHybridBlackDeviceInterface: pylsl is not installed, LSL interface will not work.") + +from physiolabxr.configs.GlobalSignals import GlobalSignals +from physiolabxr.exceptions.exceptions import CustomDeviceStartStreamError +from physiolabxr.interfaces.DeviceInterface.DeviceInterface import DeviceInterface class UnicornHybridBlackDeviceInterface(DeviceInterface): @@ -151,16 +149,3 @@ def info_print(self): def get_sampling_rate(self): return self._board.get_sampling_rate(self.board_id) - - -def create_custom_device_interface(stream_name): - if stream_name == 'UnicornHybridBlackBluetooth': - interface = UnicornHybridBlackDeviceInterface() - return interface - - # interface = UnicornHybridBlackDeviceInterface() - # return interface - -# def create_unicorn_hybrid_black_interface(): -# interface = UnicornHybridBlackDeviceInterface() -# return interface diff --git a/physiolabxr/interfaces/DeviceInterface/utils.py b/physiolabxr/interfaces/DeviceInterface/utils.py new file mode 100644 index 00000000..e69de29b diff --git a/physiolabxr/threadings/DeviceWorker.py b/physiolabxr/threadings/DeviceWorker.py new file mode 100644 index 00000000..e69de29b diff --git a/physiolabxr/ui/BaseDeviceOptions.py b/physiolabxr/ui/BaseDeviceOptions.py new file mode 100644 index 00000000..c5f342b0 --- /dev/null +++ b/physiolabxr/ui/BaseDeviceOptions.py @@ -0,0 +1,70 @@ +from PyQt6 import uic +from PyQt6.QtGui import QIcon +from PyQt6.QtWidgets import QWidget + +from physiolabxr.configs.configs import AppConfigs +from physiolabxr.presets.PresetEnums import VideoDeviceChannelOrder +from physiolabxr.presets.presets_utils import set_video_scale, set_video_channel_order +from physiolabxr.ui.ScriptConsoleLog import ScriptConsoleLog +from physiolabxr.ui.SliderWithValueLabel import SliderWithValueLabel + + +class BaseDeviceOptions(QWidget): + """ Base class for device options UI. This class is inherited by the custom device options UI classes. + + This class has handles for + * the device interface you defined for your device + + """ + def __init__(self, stream_name, device_interface): + super().__init__() + self.stream_name = stream_name + self.device_interface = device_interface # this is not used in this class + window_icon = QIcon(AppConfigs()._app_logo) + self.setWindowIcon(window_icon) + + try: + ui_file = AppConfigs().__getattribute__(f'_ui_{stream_name}_Options') + except AttributeError: + raise AttributeError(f'No UI file is defined for {stream_name} at physiolabxr/_ui/{stream_name}_Options.ui') + self.ui = uic.loadUi(ui_file, self) + + self.setWindowTitle(f'Options for {stream_name}') + + def start_stream_args(self): + """ Get the arguments to start the stream. + + This method is called when the user clicks the Start Stream button. You can override this function + in your device options UI class to return the arguments to start the stream. + + the arguments here will be passed to the start_stream method of the device interface that you defined + + Returns: + dict: The arguments to start the stream. + + Example: + + if you define a custom device interface like this: + + class MyAwesomeDevice(DeviceInterface): + ... + def start_stream(self, com_port, baud_rate): + pass + + then you can define the start_stream_args method in your custom device options UI class like this: + + class MyAwesomeDeviceOptions(BaseDeviceOptions): + ... + def start_stream_args(self): + return { + 'com_port': self.com_port_line_edit.value(), + 'baud_rate': self.baud_rate_line_edit.value() + } + + , given that you have com_port_line_edit and baud_rate_line_edit in your UI file. User can + enter the values in the UI and when they click the Start Stream button, the values will be passed + to the start_stream method of the device interface. + """ + return {} + + diff --git a/physiolabxr/ui/CustomDeviceWidget.py b/physiolabxr/ui/CustomDeviceWidget.py deleted file mode 100644 index ec9e3841..00000000 --- a/physiolabxr/ui/CustomDeviceWidget.py +++ /dev/null @@ -1,59 +0,0 @@ -# This Python file uses the following encoding: utf-8 -import physiolabxr.threadings.AudioWorkers -from physiolabxr.exceptions.exceptions import ChannelMismatchError, CustomDeviceStartStreamError, CustomDeviceStreamInterruptedError, UnsupportedErrorTypeError, LSLStreamNotFoundError -from physiolabxr.configs.configs import AppConfigs -from physiolabxr.presets.PresetEnums import PresetType -from physiolabxr.presets.presets_utils import get_stream_preset_info -from physiolabxr.threadings import workers -from physiolabxr.ui.BaseStreamWidget import BaseStreamWidget -from physiolabxr.ui.dialogs import dialog_popup - - -class CustomDeviceWidget(BaseStreamWidget): - - def __init__(self, parent_widget, parent_layout, stream_name, insert_position=None): - """ - BaseStreamWidget is the main interface with plots and a single stream of data. - @param parent_widget: the MainWindow class - @param parent_layout: the layout of the parent widget, that is the layout of MainWindow's stream tab - @param stream_name: the name of the stream - """ - - # GUI elements - super().__init__(parent_widget, parent_layout, PresetType.CUSTOM, stream_name, - data_timer_interval=AppConfigs().pull_data_interval, use_viz_buffer=True, - insert_position=insert_position) - - custom_device_worker = workers.CustomDeviceWorker(self.stream_name) - custom_device_worker.device_widget = self - self.connect_worker(custom_device_worker, False) - # self.connect_start_stop_btn(self.start_stop_stream_btn_clicked) - self.start_timers() - - def start_stop_stream_btn_clicked(self): - try: - super().start_stop_stream_btn_clicked() - except CustomDeviceStartStreamError as e: - self.main_parent.current_dialog = dialog_popup(msg=str(e), title='ERROR') - return - except CustomDeviceStreamInterruptedError as e: - self.main_parent.current_dialog = dialog_popup(msg=str(e), title='ERROR') - return - except ChannelMismatchError as e: # only LSL's channel mismatch can be checked at this time, zmq's channel mismatch can only be checked when receiving data - preset_chan_num = get_stream_preset_info(self.stream_name, 'num_channels') - message = f'The stream with name {self.stream_name} found on the network has {e.message}.\n The preset has {preset_chan_num} channels. \n Do you want to reset your preset to a default and start stream.\n You can edit your stream channels in Options if you choose Cancel' - reply = dialog_popup(msg=message, title='Channel Mismatch', mode='modal', main_parent=self.main_parent, - buttons=self.channel_mismatch_buttons) - if reply.result(): - self.reset_preset_by_num_channels(e.message, get_stream_preset_info(self.stream_name, 'data_type')) - try: - self.data_worker.start_stream() # start the stream again with updated preset - self.set_button_icons() - self.main_parent.update_active_streams() - except LSLStreamNotFoundError as e: - self.main_parent.current_dialog = dialog_popup(msg=str(e), title='ERROR') - return - else: - return - except Exception as e: - raise UnsupportedErrorTypeError(str(e)) diff --git a/physiolabxr/ui/DeviceMessageConsole.py b/physiolabxr/ui/DeviceMessageConsole.py new file mode 100644 index 00000000..1f1ddcd1 --- /dev/null +++ b/physiolabxr/ui/DeviceMessageConsole.py @@ -0,0 +1,29 @@ +from PyQt6 import uic +from PyQt6.QtGui import QIcon +from PyQt6.QtWidgets import QWidget + +from physiolabxr.configs.configs import AppConfigs +from physiolabxr.presets.PresetEnums import VideoDeviceChannelOrder +from physiolabxr.presets.presets_utils import set_video_scale, set_video_channel_order +from physiolabxr.ui.ScriptConsoleLog import ScriptConsoleLog + + +class DeviceMessageConsole(ScriptConsoleLog): + def __init__(self, parent_device_widget, device_worker): + super().__init__(parent_device_widget) + window_icon = QIcon(AppConfigs()._app_logo) + self.setWindowIcon(window_icon) + self.setWindowTitle(f'Device Message Console: {parent_device_widget.stream_name}') + + self.parent_device_widget = parent_device_widget # this is not used in this class + self.device_worker = device_worker + self.device_worker.signal_data.connect(self.process_message) + + # the signal_data may be emitted console log, as defined in DSI24Interface + + def process_message(self, data): + """ + The message is defined in DSI24_process.py + """ + if 'i' in data: + self.print_msg('info', data['i']) \ No newline at end of file diff --git a/physiolabxr/ui/DeviceWidget.py b/physiolabxr/ui/DeviceWidget.py new file mode 100644 index 00000000..ac4445a6 --- /dev/null +++ b/physiolabxr/ui/DeviceWidget.py @@ -0,0 +1,137 @@ +# This Python file uses the following encoding: utf-8 +import traceback + +from PyQt6.QtWidgets import QDialogButtonBox, QWidget + +import physiolabxr.threadings.AudioWorkers +import physiolabxr.threadings.DeviceWorker +from physiolabxr.exceptions.exceptions import ChannelMismatchError, CustomDeviceStartStreamError, CustomDeviceStreamInterruptedError, UnsupportedErrorTypeError, LSLStreamNotFoundError +from physiolabxr.configs.configs import AppConfigs +from physiolabxr.presets.PresetEnums import PresetType +from physiolabxr.presets.presets_utils import get_stream_preset_info +from physiolabxr.threadings import workers +from physiolabxr.ui.BaseStreamWidget import BaseStreamWidget +from physiolabxr.ui.DeviceMessageConsole import DeviceMessageConsole +from physiolabxr.ui.dialogs import dialog_popup +from physiolabxr.utils.ui_utils import show_label_movie + + +class DeviceWidget(BaseStreamWidget): + + def __init__(self, parent_widget, parent_layout, stream_name, insert_position=None): + """ + BaseStreamWidget is the main interface with plots and a single stream of data. + Args: + parent_widget: the MainWindow class + parent_layout: the layout of the parent widget, that is the layout of MainWindow's stream tab + stream_name: the name of the stream + + How to add a custom device options UI to a custom device: + """ + + # GUI elements + super().__init__(parent_widget, parent_layout, PresetType.CUSTOM, stream_name, + data_timer_interval=AppConfigs().pull_data_interval, use_viz_buffer=True, + insert_position=insert_position) + + self.device_msg_console_btn.setIcon(AppConfigs()._icon_terminal) + self.device_options_btn.setIcon(AppConfigs()._icon_device_options) + + device_worker = physiolabxr.threadings.DeviceWorker.DeviceWorker(self.stream_name) + self.connect_worker(device_worker, False) # this will register device worker as self.data_worker + if device_worker.device_options_widget_class is not None: + self.register_device_options_widgets(device_worker.device_options_widget_class) + else: + self.device_options_widget = None + + self.device_msg_console = DeviceMessageConsole(self, self.data_worker) + self.device_msg_console_btn.clicked.connect(self.show_focus_device_msg_console_widget) + self.device_msg_console_btn.show() + self.show_focus_device_msg_console_widget() + + self.start_timers() + self.first_frame_received = False + + def start_stop_stream_btn_clicked(self): + if not self.is_streaming(): + self.first_frame_received = False + show_label_movie(self.waiting_label, True) + try: + # this segment is the same as in the BaseStreamWidget, except the start_stream include the start_stream_arguments + # from the device options widget + if self.data_worker.is_streaming: + self.data_worker.stop_stream() + if not self.data_worker.is_streaming and self.add_stream_availability: + self.update_stream_availability(self.data_worker.is_stream_available()) + else: + try: + start_stream_args = self.device_options_widget.start_stream_args() if self.device_options_widget is not None else {} + except Exception as e: + traceback.print_exc() + raise Exception(f"Error in getting start stream arguments from device options widget: {e}") + self.data_worker.start_stream(**start_stream_args) + self.set_button_icons() + self.main_parent.update_active_streams() + except CustomDeviceStartStreamError as e: + self.main_parent.current_dialog = dialog_popup(msg=str(e), title='ERROR') + return + except CustomDeviceStreamInterruptedError as e: + self.main_parent.current_dialog = dialog_popup(msg=str(e), title='ERROR') + return + except ChannelMismatchError as e: # only LSL's channel mismatch can be checked at this time, zmq's channel mismatch can only be checked when receiving data + preset_chan_num = get_stream_preset_info(self.stream_name, 'num_channels') + message = f'The stream with name {self.stream_name} found on the network has {e.message}.\n The preset has {preset_chan_num} channels. \n Do you want to reset your preset to a default and start stream.\n You can edit your stream channels in Options if you choose Cancel' + reply = dialog_popup(msg=message, title='Channel Mismatch', mode='modal', main_parent=self.main_parent, + buttons=self.channel_mismatch_buttons) + if reply.result(): + self.reset_preset_by_num_channels(e.message, get_stream_preset_info(self.stream_name, 'data_type')) + try: + self.data_worker.start_stream() # start the stream again with updated preset + self.set_button_icons() + self.main_parent.update_active_streams() + except LSLStreamNotFoundError as e: + self.main_parent.current_dialog = dialog_popup(msg=str(e), title='ERROR') + return + else: + return + except Exception as e: + raise UnsupportedErrorTypeError(str(e)) + + def process_stream_data(self, data_dict): + """ + + If the data_dict contains an error message, a dialog popup will be shown and the stream will be stopped. + """ + # check if there is an error decoding the zmq message + if 'e' in data_dict: + dialog_popup(msg=f"{self.stream_name} streaming interrupted \n {data_dict['e']}", title='Error', mode='modal', main_parent=self.main_parent, buttons=QDialogButtonBox.StandardButton.Ok) + show_label_movie(self.waiting_label, False) + self.start_stop_stream_btn_clicked() # stop streaming + return + if not self.first_frame_received and 'frames' in data_dict and len(data_dict['frames']) > 0: + self.first_frame_received = True + show_label_movie(self.waiting_label, False) + super().process_stream_data(data_dict) + + def show_focus_device_msg_console_widget(self): + self.device_msg_console.show() + self.device_msg_console.activateWindow() + + def register_device_options_widgets(self, device_options_widget_class): + """Register the device options widget to the device widget + + This function is called in the device worker if the function create_custom_device_classes returns a device_options_widget. + """ + self.device_options_widget: QWidget = device_options_widget_class(self.stream_name, self.data_worker.device_interface) + def show_focus_device_options_widget(): + self.device_options_widget.show() + self.device_options_widget.activateWindow() + self.device_options_btn.clicked.connect(show_focus_device_options_widget) + self.device_options_btn.show() + show_focus_device_options_widget() + + def remove_stream(self): + super().remove_stream() + if self.device_options_widget is not None: + self.device_options_widget.close() + self.device_msg_console.close() \ No newline at end of file From b9c16776b56d9de25ee71404c40fecd8638b2e45 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Thu, 3 Oct 2024 20:50:48 -0400 Subject: [PATCH 07/26] Adding impedance --- .../VariousArgsAndReturnsRPCExample.proto | 29 ++ .../VariousArgsAndReturnsRPCExampleServer.py | 25 ++ .../VariousArgsAndReturnsRPCExample_pb2.py | 39 +++ ...ariousArgsAndReturnsRPCExample_pb2_grpc.py | 275 +++++++++++++++ .../DeviceInterface/DSI24/DSI24_Interface.py | 9 +- .../DeviceInterface/DSI24/DSI24_Options.py | 10 +- .../DeviceInterface/DSI24/DSI24_Process.py | 17 +- .../WearableSensingBasicScript/__init__.py | 0 physiolabxr/thirdparty/WearableSensing/DSI.h | 276 +++++++++++++++ physiolabxr/thirdparty/WearableSensing/DSI.py | 329 ++++++++++++++++++ .../WearableSensing/DSI_API_Loader.c | 49 +++ .../thirdparty/WearableSensing/DSI_py3.py | 316 +++++++++++++++++ .../thirdparty/WearableSensing/__init__.py | 0 .../WearableSensing/libDSI-Darwin-arm64.dylib | Bin 0 -> 318488 bytes .../libDSI-Darwin-x86_64.dylib | Bin 0 -> 397044 bytes .../WearableSensing/libDSI-Windows-i386.dll | Bin 0 -> 601600 bytes .../WearableSensing/libDSI-Windows-x86_64.dll | Bin 0 -> 699904 bytes 17 files changed, 1362 insertions(+), 12 deletions(-) create mode 100644 physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExample.proto create mode 100644 physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExampleServer.py create mode 100644 physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExample_pb2.py create mode 100644 physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExample_pb2_grpc.py create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/__init__.py create mode 100644 physiolabxr/thirdparty/WearableSensing/DSI.h create mode 100644 physiolabxr/thirdparty/WearableSensing/DSI.py create mode 100644 physiolabxr/thirdparty/WearableSensing/DSI_API_Loader.c create mode 100644 physiolabxr/thirdparty/WearableSensing/DSI_py3.py create mode 100644 physiolabxr/thirdparty/WearableSensing/__init__.py create mode 100644 physiolabxr/thirdparty/WearableSensing/libDSI-Darwin-arm64.dylib create mode 100644 physiolabxr/thirdparty/WearableSensing/libDSI-Darwin-x86_64.dylib create mode 100644 physiolabxr/thirdparty/WearableSensing/libDSI-Windows-i386.dll create mode 100644 physiolabxr/thirdparty/WearableSensing/libDSI-Windows-x86_64.dll diff --git a/physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExample.proto b/physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExample.proto new file mode 100644 index 00000000..14e9dfd6 --- /dev/null +++ b/physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExample.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; +import "google/protobuf/empty.proto"; +service RPCExample { + rpc ExampleOneArgOneReturn(ExampleOneArgOneReturnRequest) returns (ExampleOneArgOneReturnResponse); + rpc TestRPCNoArgs(google.protobuf.Empty) returns (TestRPCNoArgsResponse); + rpc TestRPCNoInputNoReturn(google.protobuf.Empty) returns (google.protobuf.Empty); + rpc TestRPCNoReturn(TestRPCNoReturnRequest) returns (google.protobuf.Empty); + rpc TestRPCTwoArgTwoReturn(TestRPCTwoArgTwoReturnRequest) returns (TestRPCTwoArgTwoReturnResponse); +} +message ExampleOneArgOneReturnRequest { + string input0 = 1; +} +message ExampleOneArgOneReturnResponse { + string message = 1; +} +message TestRPCNoArgsResponse { + string message = 1; +} +message TestRPCNoReturnRequest { + float input0 = 1; +} +message TestRPCTwoArgTwoReturnRequest { + string input0 = 1; + int32 input1 = 2; +} +message TestRPCTwoArgTwoReturnResponse { + string message0 = 1; + int32 message1 = 2; +} \ No newline at end of file diff --git a/physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExampleServer.py b/physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExampleServer.py new file mode 100644 index 00000000..fd54ff03 --- /dev/null +++ b/physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExampleServer.py @@ -0,0 +1,25 @@ +from google.protobuf import empty_pb2 +from google.protobuf.json_format import MessageToDict +import VariousArgsAndReturnsRPCExample_pb2_grpc, VariousArgsAndReturnsRPCExample_pb2 + +class RPCExampleServer(VariousArgsAndReturnsRPCExample_pb2_grpc.RPCExampleServicer): + script_instance = None + def ExampleOneArgOneReturn(self, request, context): + result = self.script_instance.ExampleOneArgOneReturn(**MessageToDict(request)) + return VariousArgsAndReturnsRPCExample_pb2.ExampleOneArgOneReturnResponse(message=result) + + def TestRPCNoArgs(self, request, context): + result = self.script_instance.TestRPCNoArgs() + return VariousArgsAndReturnsRPCExample_pb2.TestRPCNoArgsResponse(message=result) + + def TestRPCNoInputNoReturn(self, request, context): + result = self.script_instance.TestRPCNoInputNoReturn() + return empty_pb2.Empty() + + def TestRPCNoReturn(self, request, context): + result = self.script_instance.TestRPCNoReturn(**MessageToDict(request)) + return empty_pb2.Empty() + + def TestRPCTwoArgTwoReturn(self, request, context): + result = self.script_instance.TestRPCTwoArgTwoReturn(**MessageToDict(request)) + return VariousArgsAndReturnsRPCExample_pb2.TestRPCTwoArgTwoReturnResponse(message0=result[0], message1=result[1]) diff --git a/physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExample_pb2.py b/physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExample_pb2.py new file mode 100644 index 00000000..8df60c1d --- /dev/null +++ b/physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExample_pb2.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: VariousArgsAndReturnsRPCExample.proto +# Protobuf Python Version: 5.26.1 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%VariousArgsAndReturnsRPCExample.proto\x1a\x1bgoogle/protobuf/empty.proto\"/\n\x1d\x45xampleOneArgOneReturnRequest\x12\x0e\n\x06input0\x18\x01 \x01(\t\"1\n\x1e\x45xampleOneArgOneReturnResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\"(\n\x15TestRPCNoArgsResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\"(\n\x16TestRPCNoReturnRequest\x12\x0e\n\x06input0\x18\x01 \x01(\x02\"?\n\x1dTestRPCTwoArgTwoReturnRequest\x12\x0e\n\x06input0\x18\x01 \x01(\t\x12\x0e\n\x06input1\x18\x02 \x01(\x05\"D\n\x1eTestRPCTwoArgTwoReturnResponse\x12\x10\n\x08message0\x18\x01 \x01(\t\x12\x10\n\x08message1\x18\x02 \x01(\x05\x32\x91\x03\n\nRPCExample\x12Y\n\x16\x45xampleOneArgOneReturn\x12\x1e.ExampleOneArgOneReturnRequest\x1a\x1f.ExampleOneArgOneReturnResponse\x12?\n\rTestRPCNoArgs\x12\x16.google.protobuf.Empty\x1a\x16.TestRPCNoArgsResponse\x12H\n\x16TestRPCNoInputNoReturn\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\x12\x42\n\x0fTestRPCNoReturn\x12\x17.TestRPCNoReturnRequest\x1a\x16.google.protobuf.Empty\x12Y\n\x16TestRPCTwoArgTwoReturn\x12\x1e.TestRPCTwoArgTwoReturnRequest\x1a\x1f.TestRPCTwoArgTwoReturnResponseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'VariousArgsAndReturnsRPCExample_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_EXAMPLEONEARGONERETURNREQUEST']._serialized_start=70 + _globals['_EXAMPLEONEARGONERETURNREQUEST']._serialized_end=117 + _globals['_EXAMPLEONEARGONERETURNRESPONSE']._serialized_start=119 + _globals['_EXAMPLEONEARGONERETURNRESPONSE']._serialized_end=168 + _globals['_TESTRPCNOARGSRESPONSE']._serialized_start=170 + _globals['_TESTRPCNOARGSRESPONSE']._serialized_end=210 + _globals['_TESTRPCNORETURNREQUEST']._serialized_start=212 + _globals['_TESTRPCNORETURNREQUEST']._serialized_end=252 + _globals['_TESTRPCTWOARGTWORETURNREQUEST']._serialized_start=254 + _globals['_TESTRPCTWOARGTWORETURNREQUEST']._serialized_end=317 + _globals['_TESTRPCTWOARGTWORETURNRESPONSE']._serialized_start=319 + _globals['_TESTRPCTWOARGTWORETURNRESPONSE']._serialized_end=387 + _globals['_RPCEXAMPLE']._serialized_start=390 + _globals['_RPCEXAMPLE']._serialized_end=791 +# @@protoc_insertion_point(module_scope) diff --git a/physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExample_pb2_grpc.py b/physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExample_pb2_grpc.py new file mode 100644 index 00000000..ffd40507 --- /dev/null +++ b/physiolabxr/examples/rpc/VariousArgsAndReturns/VariousArgsAndReturnsRPCExample_pb2_grpc.py @@ -0,0 +1,275 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +import VariousArgsAndReturnsRPCExample_pb2 as VariousArgsAndReturnsRPCExample__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + +GRPC_GENERATED_VERSION = '1.65.1' +GRPC_VERSION = grpc.__version__ +EXPECTED_ERROR_RELEASE = '1.66.0' +SCHEDULED_RELEASE_DATE = 'August 6, 2024' +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + warnings.warn( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in VariousArgsAndReturnsRPCExample_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + + f' This warning will become an error in {EXPECTED_ERROR_RELEASE},' + + f' scheduled for release on {SCHEDULED_RELEASE_DATE}.', + RuntimeWarning + ) + + +class RPCExampleStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.ExampleOneArgOneReturn = channel.unary_unary( + '/RPCExample/ExampleOneArgOneReturn', + request_serializer=VariousArgsAndReturnsRPCExample__pb2.ExampleOneArgOneReturnRequest.SerializeToString, + response_deserializer=VariousArgsAndReturnsRPCExample__pb2.ExampleOneArgOneReturnResponse.FromString, + _registered_method=True) + self.TestRPCNoArgs = channel.unary_unary( + '/RPCExample/TestRPCNoArgs', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=VariousArgsAndReturnsRPCExample__pb2.TestRPCNoArgsResponse.FromString, + _registered_method=True) + self.TestRPCNoInputNoReturn = channel.unary_unary( + '/RPCExample/TestRPCNoInputNoReturn', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + _registered_method=True) + self.TestRPCNoReturn = channel.unary_unary( + '/RPCExample/TestRPCNoReturn', + request_serializer=VariousArgsAndReturnsRPCExample__pb2.TestRPCNoReturnRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + _registered_method=True) + self.TestRPCTwoArgTwoReturn = channel.unary_unary( + '/RPCExample/TestRPCTwoArgTwoReturn', + request_serializer=VariousArgsAndReturnsRPCExample__pb2.TestRPCTwoArgTwoReturnRequest.SerializeToString, + response_deserializer=VariousArgsAndReturnsRPCExample__pb2.TestRPCTwoArgTwoReturnResponse.FromString, + _registered_method=True) + + +class RPCExampleServicer(object): + """Missing associated documentation comment in .proto file.""" + + def ExampleOneArgOneReturn(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def TestRPCNoArgs(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def TestRPCNoInputNoReturn(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def TestRPCNoReturn(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def TestRPCTwoArgTwoReturn(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_RPCExampleServicer_to_server(servicer, server): + rpc_method_handlers = { + 'ExampleOneArgOneReturn': grpc.unary_unary_rpc_method_handler( + servicer.ExampleOneArgOneReturn, + request_deserializer=VariousArgsAndReturnsRPCExample__pb2.ExampleOneArgOneReturnRequest.FromString, + response_serializer=VariousArgsAndReturnsRPCExample__pb2.ExampleOneArgOneReturnResponse.SerializeToString, + ), + 'TestRPCNoArgs': grpc.unary_unary_rpc_method_handler( + servicer.TestRPCNoArgs, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=VariousArgsAndReturnsRPCExample__pb2.TestRPCNoArgsResponse.SerializeToString, + ), + 'TestRPCNoInputNoReturn': grpc.unary_unary_rpc_method_handler( + servicer.TestRPCNoInputNoReturn, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'TestRPCNoReturn': grpc.unary_unary_rpc_method_handler( + servicer.TestRPCNoReturn, + request_deserializer=VariousArgsAndReturnsRPCExample__pb2.TestRPCNoReturnRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'TestRPCTwoArgTwoReturn': grpc.unary_unary_rpc_method_handler( + servicer.TestRPCTwoArgTwoReturn, + request_deserializer=VariousArgsAndReturnsRPCExample__pb2.TestRPCTwoArgTwoReturnRequest.FromString, + response_serializer=VariousArgsAndReturnsRPCExample__pb2.TestRPCTwoArgTwoReturnResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'RPCExample', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('RPCExample', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class RPCExample(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def ExampleOneArgOneReturn(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/RPCExample/ExampleOneArgOneReturn', + VariousArgsAndReturnsRPCExample__pb2.ExampleOneArgOneReturnRequest.SerializeToString, + VariousArgsAndReturnsRPCExample__pb2.ExampleOneArgOneReturnResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def TestRPCNoArgs(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/RPCExample/TestRPCNoArgs', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + VariousArgsAndReturnsRPCExample__pb2.TestRPCNoArgsResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def TestRPCNoInputNoReturn(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/RPCExample/TestRPCNoInputNoReturn', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def TestRPCNoReturn(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/RPCExample/TestRPCNoReturn', + VariousArgsAndReturnsRPCExample__pb2.TestRPCNoReturnRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def TestRPCTwoArgTwoReturn(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/RPCExample/TestRPCTwoArgTwoReturn', + VariousArgsAndReturnsRPCExample__pb2.TestRPCTwoArgTwoReturnRequest.SerializeToString, + VariousArgsAndReturnsRPCExample__pb2.TestRPCTwoArgTwoReturnResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Interface.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Interface.py index c765681f..1cd642d5 100644 --- a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Interface.py +++ b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Interface.py @@ -7,9 +7,10 @@ from physiolabxr.third_party.WearableSensing.DSI_py3 import * from physiolabxr.interfaces.DeviceInterface.DeviceInterface import DeviceInterface -def run_dsi24_headset_process(port, com_port): + +def run_dsi24_headset_process(port, com_port, impedance): terminate_event = Event() - headset_process = Process(target=DSI24_process, args=(terminate_event, port, com_port)) + headset_process = Process(target=DSI24_process, args=(terminate_event, port, com_port, impedance)) headset_process.start() return headset_process, terminate_event @@ -29,8 +30,8 @@ def __init__(self, self.data_process = None self.terminate_event = None - def start_stream(self, bluetooth_port): - self.data_process, self.terminate_event = run_dsi24_headset_process(self.port, bluetooth_port) + def start_stream(self, bluetooth_port, impedance): + self.data_process, self.terminate_event = run_dsi24_headset_process(self.port, bluetooth_port, impedance) def process_frames(self): frames, timestamps, messages = [], [], [] diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py index bae7a7a5..0921aeb0 100644 --- a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py +++ b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py @@ -4,17 +4,23 @@ class DSI24_Options(BaseDeviceOptions): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - + self.Impedance = 0 self.check_impedance_chkbx.clicked.connect(self.check_impedance_chkbx_clicked) def check_impedance_chkbx_clicked(self): # This method will be called when the checkbox is clicked if self.check_impedance_chkbx.isChecked(): print("Check Impedance is checked.") + self.Impedance = 1 # Add logic to handle the case when the checkbox is checked else: print("Check Impedance is unchecked.") + self.Impedance = 0 + # Add logic to handle the case when the checkbox is unchecked def start_stream_args(self): - return {'bluetooth_port': self.device_port_lineedit.text()} + return { + 'bluetooth_port': self.device_port_lineedit.text(), + 'impedance': self.Impedance + } diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py index 099eb87d..6b8952c9 100644 --- a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py +++ b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py @@ -77,9 +77,12 @@ def example_sample_callback_impedances(headsetPtr, packetTime, userData): # Collect impedance values from all referential EEG channels (excluding factory reference) impedance_data = np.array( - ['%+08.2f' % (src.GetImpedanceEEG() for src in h.Sources() if src.IsReferentialEEG() and not src.IsFactoryReference())]) + ['%+08.2f' % (src.GetImpedanceEEG()) for src in h.Sources() if src.IsReferentialEEG() and not src.IsFactoryReference()]) impedance_data = impedance_data.reshape(len(impedance_data), 1) - impedance_data = impedance_data[[9, 10, 3, 2, 4, 17, 18, 7, 1, 5, 11, 22, 12, 21, 8, 0, 6, 13, 14, 20, 23, 19, 15, 16], :] + impedance_data = impedance_data[[10,11,5,4,6,16,17,9,3,7,12,19,13,18,0,8,14,15,1,2], :] + empty_rows = np.empty((3,impedance_data.shape[1]), dtype=object) + impedance_data = np.concatenate((impedance_data, empty_rows)) + print(impedance_data) # Add the common-mode function (CMF) impedance value at the end cmf_impedance = np.array([h.GetImpedanceCMF()]) @@ -102,7 +105,7 @@ def example_sample_callback_impedances(headsetPtr, packetTime, userData): # Convert impedance data to a dictionary for streaming impedance_data_dict = { 't': 'd', # 'd' for data, 'i' for info, 'e' for error - 'impedance_frame': impedance_data.tolist(), # Convert impedance data to a list for JSON serialization + 'frame': impedance_data.tolist(), # Convert impedance data to a list for JSON serialization 'timestamp': t } @@ -113,13 +116,13 @@ def example_sample_callback_impedances(headsetPtr, packetTime, userData): print("Socket already closed.") -def DSI24_process(terminate_event, network_port, com_port, args=''): +def DSI24_process(terminate_event, network_port, com_port, impedance, args=''): """Process to connect to the DSI-24 device and send data to the main process Args: network_port (int): The port number to send data to the main process com_port (str): The COM port to connect to the DSI-24 device - mode (str): The mode of the headset (default: None), NOT IMPLEMENTED + impedance (str): The mode of the headset (default: None), NOT IMPLEMENTED """ global dsi24_data_socket global is_first_time @@ -140,14 +143,16 @@ def DSI24_process(terminate_event, network_port, com_port, args=''): headset.Disconnect() return - if args.lower().startswith('imp'): + if impedance == 1: # Currently not used + print("Impedance mode") headset.SetSampleCallback(example_sample_callback_impedances, 0) headset.StartImpedanceDriver() else: # Set the sample callback to ExampleSampleCallback_Signals headset.SetSampleCallback(example_sample_callback_signals, 0) if len(args.strip()): headset.SetDefaultReference(args, True) + print("EEG mode") # Start the data acquisition print("starting background acquisition") headset.StartBackgroundAcquisition() diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/__init__.py b/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/physiolabxr/thirdparty/WearableSensing/DSI.h b/physiolabxr/thirdparty/WearableSensing/DSI.h new file mode 100644 index 00000000..245930b7 --- /dev/null +++ b/physiolabxr/thirdparty/WearableSensing/DSI.h @@ -0,0 +1,276 @@ +/* + +# This file is part of the Application Programmer's Interface (API) for Dry Sensor Interface +# (DSI) EEG systems by Wearable Sensing. The API consists of code, headers, dynamic libraries +# and documentation. The API allows software developers to interface directly with DSI +# systems to control and to acquire data from them. +# +# The API is not certified to any specific standard. It is not intended for clinical use. +# The API, and software that makes use of it, should not be used for diagnostic or other +# clinical purposes. The API is intended for research use and is provided on an "AS IS" +# basis. WEARABLE SENSING, INCLUDING ITS SUBSIDIARIES, DISCLAIMS ANY AND ALL WARRANTIES +# EXPRESSED, STATUTORY OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT OR THIRD PARTY RIGHTS. +# +# (c) @YEARS@ Wearable Sensing LLC + +Include this file as a header for your C or C++ code. See README.txt for more details. + +*/ + + +#undef EXTERNC +#if defined __cplusplus && !defined SUPPRESS_EXTERNC +extern "C" { +#define EXTERNC +#endif /* #ifdef __cplusplus */ + + +#define DSI_API_MAJOR_VERSION 1 /* NB: Use DSI_GetAPIVersion(), rather than these */ +#define DSI_API_MINOR_VERSION 18 /* values, to find out the version of the API that */ +#define DSI_API_BUILD 2 /* was used to compile your dynamic library. */ + /* Verify that the result matches the values here. */ + +#define DSI_API_VERSION STRINGIFY_VERSION( DSI_API_MAJOR_VERSION, DSI_API_MINOR_VERSION, DSI_API_BUILD ) +#define STRINGIFY_VERSION( major, minor, build ) _STRINGIFY( major ) "." STRINGIFY( minor ) "." STRINGIFY( build ) +#define STRINGIFY( s ) _STRINGIFY( s ) +#define _STRINGIFY( s ) #s + + +/* ************************************************************************************ */ +#ifndef INCLUDED_DSI_H +#define INCLUDED_DSI_H + +#include /* for size_t */ +typedef int bool_t; + +typedef char * DSI_Headset; +typedef short * DSI_Channel; +typedef long * DSI_Source; +typedef double * DSI_ProcessingStage; + +typedef void ( *DSI_SampleCallback )( DSI_Headset h, double packetTime, void * userData ); +typedef int ( *DSI_MessageCallback )( const char * msg, int debugLevel ); + +typedef enum { + ActiveSensors = 1, + IgnoredSensors = 2, + UnconnectedSensors = 4, + Reference = 8, + Triggers = 16, + Clocks = 32, + CommonModeSignal = 64, + NullSignal = 128, + TriggerBits = 256, + ConnectedSensors = ( ActiveSensors + IgnoredSensors ), + AllSensors = ( ConnectedSensors + UnconnectedSensors ), + Default = ( AllSensors + Triggers ), + Everything = 0xffff +} DSI_SourceSelection; + +extern int Load_DSI_API( const char * dllname ); + +#if defined _WIN32 +# define DYLIB_PREFIX "lib" +# define DYLIB_EXTENSION ".dll" +#elif defined __APPLE__ +# define DYLIB_PREFIX "lib" +# define DYLIB_EXTENSION ".dylib" +#else +# define DYLIB_PREFIX "lib" +# define DYLIB_EXTENSION ".so" +#endif /* #if defined _WIN32 */ +#ifndef DSI_PLATFORM /* Define the DSI_PLATFORM macro when compiling your app to make it easier */ +# define DSI_PLATFORM /* for the app to find the correct build of the dynamic library by default */ +# define DSI_DYLIB_NAME( name ) ( ( name ) ? ( name ) : ( DYLIB_PREFIX "DSI" DYLIB_EXTENSION ) ) +#else /* Example: if you used the -DDSI_PLATFORM=-Darwin-x86_64 compiler flag then DSI_DYLIB_NAME( NULL ) would expand to "libDSI-Darwin-x86_64.dylib" */ +# define DSI_DYLIB_NAME( name ) ( ( name ) ? ( name ) : ( DYLIB_PREFIX "DSI" STRINGIFY( DSI_PLATFORM ) DYLIB_EXTENSION ) ) +#endif /* #ifndef DSI_PLATFORM */ +#ifndef DSI_API_FUNC +# ifdef DSI_STATIC +# define DSI_API_FUNC( type, name, args, implementation ) type name args; /* required if linking statically against DSI_C_Interface.cpp */ +# else +# define DSI_API_FUNC( type, name, args, implementation ) extern type ( *name ) args; /* required if linking dynamically (default, normal use-case) */ +# endif /* #ifdef DSI_STATIC */ +#endif /* #ifndef DSI_API_FUNC */ + +#endif /* #ifndef INCLUDED_DSI_H */ +/* ************************************************************************************ */ + + +/* **************************************************** */ +/* General-purpose functions */ +/* **************************************************** */ + +DSI_API_FUNC( const char * , DSI_Error , ( void ) , { return gDSIErrorString; } ) +DSI_API_FUNC( const char * , DSI_ClearError , ( void ) , { const char * p = gDSIErrorString; gDSIErrorString = NULL; return p; } ) +DSI_API_FUNC( void , DSI_SetErrorCallback , ( DSI_MessageCallback func ) , { gDSIErrorHandler = func; } ) + +DSI_API_FUNC( void , DSI_SanityCheck , ( void ) , DO( DSI::SanityCheck() ) ) +DSI_API_FUNC( int , DSI_Console , ( const char * msg, int debugLevel ) , RETURN( 0, DSI::Console( INPUTSTRING( msg ), debugLevel ) ) ) +DSI_API_FUNC( void , DSI_Sleep , ( double seconds ) , DO( DSI::Sleep( seconds ) ) ) +DSI_API_FUNC( const char * , DSI_PythonString , ( const void * raw, size_t nBytes, bool_t allhex ) , RETURNSTRING( DSI::PythonString( raw, nBytes, allhex ) ) ) + +DSI_API_FUNC( const char * , DSI_GetAPIVersion , ( void ) , RETURNSTRING( DSI_API_VERSION ) ) + +DSI_API_FUNC( const char * , DSI_GetDefaultPort , ( void ) , RETURNSTRING( DSI::DefaultPort() ) ) + + +/* **************************************************** */ +/* DSI_Headset methods */ +/* **************************************************** */ + +DSI_API_FUNC( DSI_Headset , DSI_Headset_New , ( const char * port ) , RETURN( NULL, ( DSI_Headset )( ( port && *port ) ? new DSI::Headset( port ) : new DSI::Headset() ) ) ) +DSI_API_FUNC( void , DSI_Headset_Delete , ( DSI_Headset h ) , DO( delete HEADSET ) ) + +DSI_API_FUNC( void , DSI_Headset_SetVerbosity , ( DSI_Headset h, int level ) , DO( HEADSET->SetVerbosity( level ) ) ) +DSI_API_FUNC( void , DSI_Headset_SetMessageCallback , ( DSI_Headset h, DSI_MessageCallback func ) , DO( HEADSET->SetMessageCallback( func ) ) ) +DSI_API_FUNC( void , DSI_Headset_SetSampleCallback , ( DSI_Headset h, DSI_SampleCallback func, void * userData ) , DO( HEADSET->SetSampleCallback( ( DSI::SampleCallback )func, userData ) ) ) + +DSI_API_FUNC( void , DSI_Headset_Connect , ( DSI_Headset h, const char * port ) , DO( HEADSET->Connect( INPUTSTRING( port ) ) ) ) +DSI_API_FUNC( bool_t , DSI_Headset_IsConnected , ( DSI_Headset h ) , RETURN( 0, HEADSET->Connected() ) ) +DSI_API_FUNC( double , DSI_Headset_SecondsSinceConnection , ( DSI_Headset h ) , RETURN( -1.0, HEADSET->Elapsed() ) ) +DSI_API_FUNC( const char * , DSI_Headset_GetPort , ( DSI_Headset h ) , RETURNSTRING( HEADSET->Port() ) ) +DSI_API_FUNC( void , DSI_Headset_Disconnect , ( DSI_Headset h ) , DO( HEADSET->Disconnect() ) ) +DSI_API_FUNC( void , DSI_Headset_QueryUnlockedFeatures , ( DSI_Headset h ) , DO( HEADSET->QueryUnlockedFeatures() ) ) +DSI_API_FUNC( int , DSI_Headset_GetFeatureAvailability , ( DSI_Headset h, const char * featureName ) , RETURN( 0, HEADSET->FeatureAvailability( INPUTSTRING( featureName ) ) ) ) +DSI_API_FUNC( void , DSI_Headset_ConfigureADC , ( DSI_Headset h, unsigned int samplesPerSecond, unsigned int filterMode ) , DO( HEADSET->ConfigureAcquisitionSettings( samplesPerSecond, filterMode ) ) ) +DSI_API_FUNC( void , DSI_Headset_SetAccelerometerRate , ( DSI_Headset h, unsigned int rate ) , DO( HEADSET->SetAccelerometerRate( rate ) ) ) + + +DSI_API_FUNC( void , DSI_Headset_ChooseChannels , ( DSI_Headset h, const char * spec, const char * ref, bool_t autoswap ) , DO( HEADSET->ChooseChannels( INPUTSTRING( spec ), INPUTSTRING( ref ), autoswap ) ) ) +DSI_API_FUNC( void , DSI_Headset_AddChannelToMontage_FromSource , ( DSI_Headset h, DSI_Source s ) , DO( HEADSET->AddChannelToMontage( SOURCE ) ) ) +DSI_API_FUNC( void , DSI_Headset_AddChannelToMontage_FromString , ( DSI_Headset h, const char * spec, bool_t autoswap ) , DO( HEADSET->AddChannelToMontage( INPUTSTRING( spec ), autoswap ) ) ) +DSI_API_FUNC( const char * , DSI_Headset_SetTraditionalReference , ( DSI_Headset h, bool_t autoswap ) , RETURNSTRING( HEADSET->SetTraditionalReference( autoswap ) ) ) +DSI_API_FUNC( void , DSI_Headset_SetDefaultReference , ( DSI_Headset h, const char * spec, bool_t autoswap ) , DO( HEADSET->SetDefaultReference( INPUTSTRING( spec ), autoswap ) ) ) +DSI_API_FUNC( const char * , DSI_Headset_GetFactoryReferenceString , ( DSI_Headset h ) , RETURNSTRING( HEADSET->FactoryReferenceString() ) ) +DSI_API_FUNC( const char * , DSI_Headset_GetReferenceString , ( DSI_Headset h ) , RETURNSTRING( HEADSET->ReferenceString() ) ) +DSI_API_FUNC( void , DSI_Headset_ForgetMontage , ( DSI_Headset h ) , DO( HEADSET->ForgetMontage() ) ) +DSI_API_FUNC( void , DSI_Headset_UseNamingScheme , ( DSI_Headset h, const char * scheme ) , DO( HEADSET->UseNamingScheme( INPUTSTRING( scheme ) ) ) ) +DSI_API_FUNC( bool_t , DSI_Headset_RenameSource , ( DSI_Headset h, const char * from, const char * to ) , RETURN( 0, HEADSET->RenameSource( INPUTSTRING( from ), INPUTSTRING( to ) ) ) ) +DSI_API_FUNC( bool_t , DSI_Headset_AddSourceAliases , ( DSI_Headset h, const char * aliases ) , RETURN( 0, HEADSET->AddSourceAliases( INPUTSTRING( aliases ) ) ) ) + +DSI_API_FUNC( const char * , DSI_Headset_GetHardwareModel , ( DSI_Headset h ) , RETURNSTRING( HEADSET->HardwareModel() ) ) +DSI_API_FUNC( const char * , DSI_Headset_GetHardwareRevision , ( DSI_Headset h ) , RETURNSTRING( HEADSET->HardwareRevision() ) ) +DSI_API_FUNC( int , DSI_Headset_GetNumberOfChannels , ( DSI_Headset h ) , RETURN( 0, ( int )HEADSET->Montage()->size() ) ) +DSI_API_FUNC( int , DSI_Headset_GetNumberOfSources , ( DSI_Headset h ) , RETURN( 0, ( int )HEADSET->Sources( false )->size() ) ) +DSI_API_FUNC( DSI_Channel , DSI_Headset_GetChannelByIndex , ( DSI_Headset h, unsigned int index ) , RETURN( ( DSI_Channel )NULL, ( DSI_Channel )HEADSET->GetChannelByIndex( index ) ) ) +DSI_API_FUNC( DSI_Channel , DSI_Headset_GetChannelByName , ( DSI_Headset h, const char * name ) , RETURN( ( DSI_Channel )NULL, ( DSI_Channel )HEADSET->GetChannelByName( INPUTSTRING( name ), true ) ) ) +DSI_API_FUNC( DSI_Source , DSI_Headset_GetSourceByIndex , ( DSI_Headset h, unsigned int index ) , RETURN( ( DSI_Source )NULL, ( DSI_Source )HEADSET->GetSourceByIndex( index, false ) ) ) +DSI_API_FUNC( DSI_Source , DSI_Headset_GetSourceByName , ( DSI_Headset h, const char * name ) , RETURN( ( DSI_Source )NULL, ( DSI_Source )HEADSET->MatchSource( INPUTSTRING( name ), true ) ) ) /* string should contain either a channel name or a 1-based index */ + +DSI_API_FUNC( bool_t , DSI_Headset_IsBlueToothInitialized , ( DSI_Headset h ) , RETURN( 0, HEADSET->BlueToothInitialized() ) ) +DSI_API_FUNC( void , DSI_Headset_ReallocateBuffers , ( DSI_Headset h, double secondsForSignal, double secondsForImpedance ) , DO( HEADSET->ReallocateBuffers( secondsForSignal, secondsForImpedance ) ) ) +DSI_API_FUNC( void , DSI_Headset_FlushBuffers , ( DSI_Headset h ) , DO( HEADSET->FlushBuffers() ) ) +DSI_API_FUNC( size_t , DSI_Headset_GetNumberOfBufferedSamples , ( DSI_Headset h ) , RETURN( 0, HEADSET->Buffered() ) ) +DSI_API_FUNC( size_t , DSI_Headset_GetNumberOfOverflowedSamples , ( DSI_Headset h ) , RETURN( 0, HEADSET->BufferOverflow() ) ) +DSI_API_FUNC( void , DSI_Headset_ConfigureBufferingController , ( DSI_Headset h, double secondsBetweenUpdates, double smoothing, double P, double I, double D ) , DO( HEADSET->ConfigureBufferingController( secondsBetweenUpdates, smoothing, P, I, D ) ) ) +DSI_API_FUNC( void , DSI_Headset_ConfigureBatch , ( DSI_Headset h, unsigned int nSamples, double targetDelaySeconds ) , DO( HEADSET->ConfigureBatch( nSamples, targetDelaySeconds ) ) ) +DSI_API_FUNC( int , DSI_Headset_StartBackgroundAcquisition , ( DSI_Headset h ) , RETURN( false, HEADSET->StartBackgroundAcquisition() ) ) +DSI_API_FUNC( void , DSI_Headset_StopBackgroundAcquisition , ( DSI_Headset h ) , DO( HEADSET->StopBackgroundAcquisition() ) ) +DSI_API_FUNC( double , DSI_Headset_WaitForBatch , ( DSI_Headset h ) , RETURN( 0, HEADSET->WaitForBatch() ) ) +DSI_API_FUNC( size_t , DSI_Headset_WaitForSamples , ( DSI_Headset h, size_t target ) , RETURN( 0, HEADSET->WaitForSamples( target ) ) ) +DSI_API_FUNC( void , DSI_Headset_Idle , ( DSI_Headset h, double seconds ) , DO( HEADSET->Idle( seconds ) ) ) +DSI_API_FUNC( void , DSI_Headset_Receive , ( DSI_Headset h, double seconds, double idleAfter ) , DO( HEADSET->Receive( seconds, idleAfter ) ) ) +DSI_API_FUNC( void , DSI_Headset_KillDataStream , ( DSI_Headset h, bool_t expectReply ) , DO( HEADSET->KillDataStream( expectReply ) ) ) +DSI_API_FUNC( int , DSI_Headset_GetAlarm , ( DSI_Headset h, bool_t remove ) , RETURN( 0, HEADSET->GetAlarm( remove ) ) ) +DSI_API_FUNC( size_t , DSI_Headset_GetNumberOfAlarms , ( DSI_Headset h ) , RETURN( 0, HEADSET->GetNumberOfAlarms() ) ) +DSI_API_FUNC( void , DSI_Headset_ClearAlarms , ( DSI_Headset h ) , DO( HEADSET->ClearAlarms() ) ) + +/* DSI_Headset getters */ +DSI_API_FUNC( void , DSI_Headset_SendBatteryQuery , ( DSI_Headset h ) , DO( HEADSET->StartBatteryMonitor() ) ) +DSI_API_FUNC( double , DSI_Headset_GetBatteryLevel , ( DSI_Headset h, int whichBattery ) , RETURN( -1.0, HEADSET->BatteryLevel( whichBattery ) ) ) +DSI_API_FUNC( const char * , DSI_Headset_GetBatteryLevelString , ( DSI_Headset h ) , RETURNSTRING( HEADSET->BatteryLevel() ) ) +DSI_API_FUNC( const char * , DSI_Headset_GetFirmwareRevision , ( DSI_Headset h ) , RETURNSTRING( HEADSET->FirmwareRevision() ) ) +DSI_API_FUNC( const char * , DSI_Headset_GetMontageString , ( DSI_Headset h ) , RETURNSTRING( HEADSET->MontageString( true ) ) ) +DSI_API_FUNC( const char * , DSI_Headset_GetSourceNames , ( DSI_Headset h, DSI_SourceSelection selection ) , RETURNSTRING( HEADSET->SourceNames( selection ) ) ) +DSI_API_FUNC( const char * , DSI_Headset_GetInfoString , ( DSI_Headset h ) , RETURNSTRING( HEADSET->InfoString() ) ) +DSI_API_FUNC( unsigned int , DSI_Headset_GetSensorCount , ( DSI_Headset h ) , RETURN( 0, HEADSET->SensorCount() ) ) +DSI_API_FUNC( unsigned int , DSI_Headset_GetSerialNumber , ( DSI_Headset h ) , RETURN( 0, HEADSET->SerialNumber() ) ) +DSI_API_FUNC( double , DSI_Headset_GetSamplingRate , ( DSI_Headset h ) , RETURN( -1.0, HEADSET->SamplingRate() ) ) +DSI_API_FUNC( double , DSI_Headset_GetAccelerometerRate , ( DSI_Headset h ) , RETURN( -1.0, HEADSET->AccelerometerRate() ) ) +DSI_API_FUNC( int , DSI_Headset_GetFilterMode , ( DSI_Headset h ) , RETURN( -1, HEADSET->FilterMode() ) ) +DSI_API_FUNC( int , DSI_Headset_GetDataAcquisitionMode , ( DSI_Headset h ) , RETURN( -1, HEADSET->DataAcquisitionMode() ) ) +DSI_API_FUNC( int , DSI_Headset_GetImpedanceDriverMode , ( DSI_Headset h ) , RETURN( -1, HEADSET->ImpedanceDriverMode() ) ) +DSI_API_FUNC( int , DSI_Headset_GetAnalogResetMode , ( DSI_Headset h ) , RETURN( -1, HEADSET->AnalogResetMode() ) ) +DSI_API_FUNC( double , DSI_Headset_GetImpedanceCMF , ( DSI_Headset h ) , RETURN( 0.0, HEADSET->ImpedanceCMF() ) ) + +/* DSI_Headset low-level commands: */ +DSI_API_FUNC( void , DSI_Headset_StartDataAcquisition , ( DSI_Headset h ) , DO( HEADSET->StartDataAcquisition() ) ) +DSI_API_FUNC( void , DSI_Headset_StopDataAcquisition , ( DSI_Headset h ) , DO( HEADSET->StopDataAcquisition() ) ) +DSI_API_FUNC( void , DSI_Headset_StartImpedanceDriver , ( DSI_Headset h ) , DO( HEADSET->StartImpedanceDriver() ) ) +DSI_API_FUNC( void , DSI_Headset_StopImpedanceDriver , ( DSI_Headset h ) , DO( HEADSET->StopImpedanceDriver() ) ) +DSI_API_FUNC( void , DSI_Headset_StartAnalogReset , ( DSI_Headset h ) , DO( HEADSET->StartAnalogReset( false ) ) ) +DSI_API_FUNC( void , DSI_Headset_LockAnalogReset , ( DSI_Headset h ) /* NB: invalidates signal data */ , DO( HEADSET->LockAnalogReset() ) ) +DSI_API_FUNC( void , DSI_Headset_ReleaseAnalogReset , ( DSI_Headset h ) , DO( HEADSET->ReleaseAnalogReset() ) ) +DSI_API_FUNC( void , DSI_Headset_Shutdown , ( DSI_Headset h ) , DO( HEADSET->Shutdown() ) ) +DSI_API_FUNC( void , DSI_Headset_UseOptionalCommandPrefix , ( DSI_Headset h, bool_t yesOrNo ) , DO( HEADSET->SetCommandPrefix( yesOrNo ? "\x7E" : "" ) ) ) +DSI_API_FUNC( void , DSI_Headset_ChangeLEDs , ( DSI_Headset h, int setAndSelect ) , DO( HEADSET->ChangeLEDs( ( uint16_t ) setAndSelect ) ) ) +/* NB: DSI_Headset_ChangeLEDs is only available on certain firmware versions; conventions for the setAndSelect argument are supplied separately */ + +/* **************************************************** */ +/* DSI_Headset methods supporting plug-in processing */ +/* stages, and DSI_ProcessingStage methods */ +/* **************************************************** */ + +DSI_API_FUNC( DSI_ProcessingStage , DSI_Headset_AddProcessingStage , ( DSI_Headset h, const char * name, DSI_SampleCallback func, void * paramData, DSI_ProcessingStage input ) , RETURN( ( DSI_ProcessingStage )NULL, ( DSI_ProcessingStage )HEADSET->AddProcessingStage( INPUTSTRING( name ), ( DSI::SampleCallback )func, paramData, ( DSI::ProcessingStage * )input ) ) ) +DSI_API_FUNC( void , DSI_Headset_ReallocateStageBuffers , ( DSI_Headset h, DSI_ProcessingStage stage, double seconds ) , DO( HEADSET->ReallocateStageBuffers( ( DSI::ProcessingStage * )stage, seconds ) ) ) +DSI_API_FUNC( unsigned int , DSI_Headset_GetNumberOfProcessingStages , ( DSI_Headset h ) , RETURN( 0, HEADSET->NumberOfProcessingStages() ) ) +DSI_API_FUNC( DSI_ProcessingStage , DSI_Headset_GetProcessingStageByIndex , ( DSI_Headset h, unsigned int index ) , RETURN( ( DSI_ProcessingStage )NULL, ( DSI_ProcessingStage )HEADSET->GetProcessingStageByIndex( index ) ) ) +DSI_API_FUNC( DSI_ProcessingStage , DSI_Headset_GetProcessingStageByName , ( DSI_Headset h, const char * name ) , RETURN( ( DSI_ProcessingStage )NULL, ( DSI_ProcessingStage )HEADSET->MatchProcessingStage( INPUTSTRING( name ), true ) ) ) + +DSI_API_FUNC( DSI_Channel , DSI_ProcessingStage_GetChannelByIndex , ( DSI_ProcessingStage p, unsigned int index ) , RETURN( ( DSI_Channel )NULL, ( DSI_Channel )STAGE->GetChannelByIndex( index ) ) ) +DSI_API_FUNC( DSI_Channel , DSI_ProcessingStage_GetChannelByName , ( DSI_ProcessingStage p, const char * name ) , RETURN( ( DSI_Channel )NULL, ( DSI_Channel )STAGE->GetChannelByName( INPUTSTRING( name ), true ) ) ) +DSI_API_FUNC( void , DSI_ProcessingStage_ClearChannels , ( DSI_ProcessingStage p ) , DO( STAGE->ClearChannels() ) ) +DSI_API_FUNC( DSI_Channel , DSI_ProcessingStage_AddChannel , ( DSI_ProcessingStage p, const char * name, size_t bufferSamples ) , RETURN( ( DSI_Channel )NULL, ( DSI_Channel )STAGE->AddChannel( INPUTSTRING( name ), bufferSamples ) ) ) +DSI_API_FUNC( DSI_ProcessingStage , DSI_ProcessingStage_GetInput , ( DSI_ProcessingStage p ) , RETURN( ( DSI_ProcessingStage )NULL, ( DSI_ProcessingStage )STAGE->Input() ) ) +DSI_API_FUNC( const char * , DSI_ProcessingStage_GetName , ( DSI_ProcessingStage p ) , RETURNSTRING( STAGE->Name() ) ) +DSI_API_FUNC( void * , DSI_ProcessingStage_ParamData , ( DSI_ProcessingStage p ) , RETURN( NULL, STAGE->ParamData() ) ) +DSI_API_FUNC( unsigned int , DSI_ProcessingStage_GetNumberOfChannels , ( DSI_ProcessingStage p ) , RETURN( 0, STAGE->NumberOfChannels() ) ) +DSI_API_FUNC( double , DSI_ProcessingStage_Read , ( DSI_ProcessingStage p, unsigned int channel, size_t lookbackSteps ) , RETURN( 0.0, STAGE->Read( channel, lookbackSteps ) ) ) +DSI_API_FUNC( void , DSI_ProcessingStage_Write , ( DSI_ProcessingStage p, unsigned int channel, double value ) , DO( STAGE->Write( channel, value ) ) ) + + +/* **************************************************** */ +/* DSI_Channel methods */ +/* **************************************************** */ + +DSI_API_FUNC( double , DSI_Channel_LookBack , ( DSI_Channel c, size_t nSteps ) , RETURN( 0.0, CHANNEL->LookBack( nSteps, false ) ) ) +DSI_API_FUNC( double , DSI_Channel_ReadBuffered , ( DSI_Channel c ) , RETURN( 0.0, CHANNEL->ReadBuffered() ) ) +DSI_API_FUNC( size_t , DSI_Channel_GetNumberOfBufferedSamples , ( DSI_Channel c ) , RETURN( 0, CHANNEL->Buffered() ) ) +DSI_API_FUNC( size_t , DSI_Channel_GetNumberOfOverflowedSamples , ( DSI_Channel c ) , RETURN( 0, CHANNEL->BufferOverflow() ) ) +DSI_API_FUNC( size_t , DSI_Channel_GetBufferCapacity , ( DSI_Channel c ) , RETURN( 0, CHANNEL->BufferSize() ) ) +DSI_API_FUNC( void , DSI_Channel_FlushOutputBuffer , ( DSI_Channel c ) , DO( CHANNEL->FlushOutputBuffer() ) ) +DSI_API_FUNC( void , DSI_Channel_SetName , ( DSI_Channel c, const char * name ) , DO( CHANNEL->SetName( INPUTSTRING( name ) ) ) ) +DSI_API_FUNC( const char * , DSI_Channel_GetName , ( DSI_Channel c ) , RETURNSTRING( CHANNEL->Name() ) ) +DSI_API_FUNC( const char * , DSI_Channel_GetString , ( DSI_Channel c ) , RETURNSTRING( CHANNEL->String( true ) ) ) +DSI_API_FUNC( double , DSI_Channel_GetSignal , ( DSI_Channel c ) , RETURN( 0.0, CHANNEL->Signal() ) ) +DSI_API_FUNC( double , DSI_Channel_CalculateRawSignal , ( DSI_Channel c ) , RETURN( 0.0, CHANNEL->CalculateRawSignal() ) ) +DSI_API_FUNC( bool_t , DSI_Channel_IsReferentialEEG , ( DSI_Channel c ) , RETURN( 0, CHANNEL->IsReferentialEEG() ) ) +DSI_API_FUNC( bool_t , DSI_Channel_IsTrigger , ( DSI_Channel c ) , RETURN( 0, CHANNEL->IsTrigger() ) ) + + +/* **************************************************** */ +/* DSI_Source methods */ +/* **************************************************** */ + +DSI_API_FUNC( bool_t , DSI_Source_IsTrigger , ( DSI_Source s ) , RETURN( 0, SOURCE->IsTrigger() ) ) +DSI_API_FUNC( bool_t , DSI_Source_IsSensor , ( DSI_Source s ) , RETURN( 0, SOURCE->IsSensor() ) ) +DSI_API_FUNC( bool_t , DSI_Source_IsReferentialEEG , ( DSI_Source s ) , RETURN( 0, SOURCE->IsReferentialEEG() ) ) +DSI_API_FUNC( bool_t , DSI_Source_IsFactoryReference , ( DSI_Source s ) , RETURN( 0, SOURCE->IsFactoryReference() ) ) +DSI_API_FUNC( bool_t , DSI_Source_IsCommonModeSignal , ( DSI_Source s ) , RETURN( 0, SOURCE->IsCommonModeSignal() ) ) +DSI_API_FUNC( void , DSI_Source_SetName , ( DSI_Source s, const char * name ) , DO( SOURCE->SetName( INPUTSTRING( name ) ) ) ) +DSI_API_FUNC( const char * , DSI_Source_GetName , ( DSI_Source s ) , RETURNSTRING( SOURCE->Name() ) ) +DSI_API_FUNC( double , DSI_Source_GetSignal , ( DSI_Source s ) , RETURN( 0.0, SOURCE->Signal() ) ) +DSI_API_FUNC( double , DSI_Source_GetGain , ( DSI_Source s ) , RETURN( 0.0, SOURCE->Gain() ) ) +DSI_API_FUNC( double , DSI_Source_GetImpedanceEEG , ( DSI_Source s ) , RETURN( 0.0, SOURCE->ImpedanceEEG() ) ) +DSI_API_FUNC( double , DSI_Source_GetImpedanceCMF , ( DSI_Source s ) /* deprecated: use DSI_Headset_GetImpedanceCMF */ , RETURN( 0.0, SOURCE->ImpedanceCMF() ) ) +DSI_API_FUNC( double , DSI_Source_GetDCOffset , ( DSI_Source s ) , RETURN( 0.0, SOURCE->DCOffset() ) ) + + + + +#ifdef EXTERNC +} /* ends extern "C" block */ +#endif /* #ifdef EXTERNC */ +#undef DSI_API_FUNC diff --git a/physiolabxr/thirdparty/WearableSensing/DSI.py b/physiolabxr/thirdparty/WearableSensing/DSI.py new file mode 100644 index 00000000..59c34bc7 --- /dev/null +++ b/physiolabxr/thirdparty/WearableSensing/DSI.py @@ -0,0 +1,329 @@ +#!/usr/bin/env python +""" +This is a Python interface to the Dry Sensor Interface (DSI) headset by Wearable Sensing +LLC. It uses the DSI API, loaded from the libDSI dynamic library via ctypes. The dynamic +library must be in the same directory as this Python file. Function prototypes are parsed +automatically at import time from DSI.h, so DSI.h must also be in the same directory. + +Most of the C functions are reinterpreted as object methods: this module defines +classes Headset, Source and Channel to wrap them, and adds two helper methods: +Headset.Sources() and Headset.Channels(). It also defines various global functions, +and the decorators SampleCallback and MessageCallback. Examples of how to use the +decorators, and a minimal Test() function, are provided at the bottom of this file. + +Normal usage would be to import this file and use the classes and functions the module +provides. As a quick test, the Test() function can be run by executing this file directly, +with the serial port address as the first command-line argument, and (optionally) the +reference Source name or the word 'impedances' as the second. + +The Python source file also contains copyright and disclaimer information. +""" + +# This file is part of the Application Programmer's Interface (API) for Dry Sensor Interface +# (DSI) EEG systems by Wearable Sensing. The API consists of code, headers, dynamic libraries +# and documentation. The API allows software developers to interface directly with DSI +# systems to control and to acquire data from them. +# +# The API is not certified to any specific standard. It is not intended for clinical use. +# The API, and software that makes use of it, should not be used for diagnostic or other +# clinical purposes. The API is intended for research use and is provided on an "AS IS" +# basis. WEARABLE SENSING, INCLUDING ITS SUBSIDIARIES, DISCLAIMS ANY AND ALL WARRANTIES +# EXPRESSED, STATUTORY OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT OR THIRD PARTY RIGHTS. +# +# (c) @YEARS@ Wearable Sensing LLC + + +# TODO: enum + +__all__ = [ + 'Headset', 'Source', 'Channel', + 'SampleCallback', 'MessageCallback', + 'DSIException', + 'IfStringThenRawString', 'IfStringThenNormalString', +] +# global DSI_* functions from the dylib will be appended to this + +import os, sys, ctypes +import numpy as np + +from pylsl import StreamInfo, StreamOutlet + +if sys.version >= '3': unicode = str; basestring = ( bytes, unicode ) # bytes is already defined, unicode is not +else: bytes = str # unicode is already defined, bytes is not + +# LSL globals +info = StreamInfo('DSI24-LSL', 'EEG', 24, 250, 'float32', 'uniqueid12345') +outlet = StreamOutlet(info) + +def IfStringThenRawString( x ): + """ + A string is likely to be either raw bytes already, or utf-8-encoded unicode. A simple + quoted string literal may or may not be raw bytes, depending on Python version. This + is a problem. + + If x is a string then, regardless of Python version and starting format, return the + "raw bytes" version of it so that we can send it over a serial port, pass it via + ctypes to a C function, etc. + + If x is not a string, return it unchanged (so you can use this function to filter a + whole list of arguments agnostically). + + See also IfStringThenNormalString() + """ + if isinstance( x, unicode ): x = x.encode( 'utf-8' ) + return x +def IfStringThenNormalString( x ): + """ + A string is likely to be either raw bytes or utf-8-encoded unicode. Depending on + Python version, either the raw bytes or the unicode might be treated as a "normal" + string (i.e. the type you get from an ordinary quoted string literal, and the type + can be print()ed without adornment). This is a problem. + + If x is a string then, regardless of Python version and starting format, return the + "normal string" version of it so that we can print it, use it for formatting, make an + Exception out of it, get on with our lives, etc. + + If x is not a string, return it unchanged (so you can feel free to use this function + to filter a whole list of arguments agnostically). + + See also IfStringThenRawString() + """ + if str is not bytes and isinstance( x, bytes ): x = x.decode( 'utf-8' ) + return x + + +class Headset: + def __init__( self, arg=None ): + self.ptr = arg + self.__needs_cleanup = False + if arg is None or isinstance( arg, basestring ): # treat arg as port specifier string rather than a pointer + self.ptr = dll.DSI_Headset_New( IfStringThenRawString( arg ) ) + self.__needs_cleanup = True + def __del__( self ): + if self.__needs_cleanup: + try: dll.DSI_Headset_Delete( self.ptr ) + except: pass + else: self.__needs_cleanup = False + def Sources( self ): return [ self.GetSourceByIndex( i ) for i in range( self.GetNumberOfSources() ) ] + def Channels( self ): return [ self.GetChannelByIndex( i ) for i in range( self.GetNumberOfChannels() ) ] + +class Source: + def __init__( self, ptr ): self.ptr = ptr + +class Channel: + def __init__( self, ptr ): self.ptr = ptr + +class ProcessingStage: + def __init__( self, ptr ): self.ptr = ptr + +class DSIException( Exception ): pass + + +SampleCallback = ctypes.CFUNCTYPE( None, ctypes.c_void_p, ctypes.c_double, ctypes.c_void_p ) +MessageCallback = ctypes.CFUNCTYPE( ctypes.c_int, ctypes.c_char_p, ctypes.c_int ) + +@MessageCallback +def NullMessageCallback( msg, lvl=0 ): return 1 + +@SampleCallback +def NullSampleCallback( headsetPtr, packetTime, userData ): pass + +__allprototypes__ = [] +def LoadAPI( dllname = None ): + import platform, re, inspect, ctypes.util + + if dllname == None: + uname = platform.system() + machine = platform.machine().lower() + if machine.startswith( 'armv' ): machine = machine.rstrip( 'l' ) + try: maxsize = sys.maxsize # not available in Python 2.5 + except: maxsize = sys.maxint # not available in Python 3 + executable_architecture= '64bit' if maxsize > 2 ** 32 else '32bit' + # we must catch the case of 32-bit Python running on 64-bit machine, so we're interested + # in this more than the underlying platform.machine(). And for some reason the official + # python.org docs recommend using sys.maxsize in this way rather than using + # platform.architecture()[0] + + if not machine or machine in [ 'i386', 'x86_64', 'amd64' ]: + #arch = executable_architecture + arch = 'i386' if executable_architecture.startswith( '32' ) else 'x86_64' + else: + arch = machine + + if uname.lower().startswith( 'win' ): dllxtn = '.dll' + elif uname.lower().startswith( 'darwin' ): dllxtn = '.dylib' + else: dllxtn = '.so' + dllname = 'libDSI-' + uname + '-' + arch + dllxtn + + headername = 'DSI.h' + + global dllpath, headerpath + whereami = os.path.dirname( os.path.abspath( inspect.getfile( inspect.currentframe() ) ) ) + dllpath = ctypes.util.find_library( dllname ) # try the usual places first: current working dir, then $DYLD_LIBRARY_PATH and friends (posix) or %PATH% (Windows) + if dllpath == None: dllpath = os.path.join( whereami, dllname ) # if failed, try right next to this .py file + if not os.path.isfile( dllpath ): dllpath = None + if dllpath == None: raise OSError( "failed to find dynamic library " + dllname ) + dllpath = os.path.abspath( dllpath ) + whereisdll = os.path.dirname( dllpath ) + dll = ctypes.CDLL( dllpath ) + headerpath = os.path.join( whereisdll, headername ) # expect to find header next to dynamic library, wherever it was + if not os.path.isfile( headerpath ): raise OSError( "failed to find header %s in directory %s" % ( headername, whereisdll ) ) + + prototypes = [ line.split( ' , ' ) for line in open( headerpath ).readlines() if line.strip().startswith( 'DSI_API_FUNC\x28' ) ] + + ctypetypes = { + 'DSI_Headset' : ctypes.c_void_p, + 'DSI_Source' : ctypes.c_void_p, + 'DSI_Channel' : ctypes.c_void_p, + 'DSI_ProcessingStage' : ctypes.c_void_p, + 'void *' : ctypes.c_void_p, + 'const void *' : ctypes.c_void_p, + 'const char *' : ctypes.c_char_p, + 'size_t' : ctypes.c_size_t, + 'bool_t' : getattr( ctypes, 'c_bool', ctypes.c_int ), + 'int' : ctypes.c_int, + 'unsigned int' : ctypes.c_uint, + 'double' : ctypes.c_double, + 'void' : None, + 'DSI_MessageCallback' : MessageCallback, + 'DSI_SampleCallback' : SampleCallback, + 'DSI_SourceSelection' : ctypes.c_int, + } + + classes = { 'DSI_Headset' : Headset, 'DSI_Source': Source, 'DSI_Channel': Channel, 'DSI_ProcessingStage': ProcessingStage } + + def wrapfunction( funcptr, outputClass, doc ): + def function( *args ): + args = [ IfStringThenRawString( arg ) for arg in args ] + output = funcptr( *args ) + err = dll.DSI_ClearError() + if err: raise( DSIException( IfStringThenNormalString( err ) ) ) + if outputClass: output = outputClass( output ) + return IfStringThenNormalString( output ) + function.__doc__ = doc + return function + + def wrapmethod( funcptr, outputClass, doc ): + def method( self, *args ): + args = [ IfStringThenRawString( arg ) for arg in args ] + output = funcptr( self.ptr, *args ) + err = dll.DSI_ClearError() + if err: raise( DSIException( IfStringThenNormalString( err ) ) ) + if outputClass: output = outputClass( output ) + return IfStringThenNormalString( output ) + method.__doc__ = doc + return method + + globalFuncs = {} + + def clean( s ): return re.sub( r'\/\*.*\*\/', '', s ).strip() + + for prototype in prototypes: + + restype = clean( prototype[ 0 ].split( ' ', 1 )[ 1 ] ) + funcname = clean( prototype[ 1 ] ) + args = clean( prototype[ 2 ] ) + doc = restype + ' ' + funcname + args + ';' + __allprototypes__.append( doc ) + args = args.strip( '()' ).split( ',' ) + funcptr = getattr( dll, funcname ) + funcptr.restype = ctypetypes[ restype ] + outputClass = classes.get( restype, None ) + for prefix, cls in classes.items(): + if funcname.startswith( prefix + '_' ): + methodname = funcname[ len( prefix ) + 1 : ] + setattr( cls, methodname, wrapmethod( funcptr, outputClass, doc ) ) + break + else: + if funcname.startswith( 'DSI_' ): funcname = funcname[ 4 : ] + globalFuncs[ funcname ] = wrapfunction( funcptr, outputClass, doc ) + args = [ arg.strip().rsplit( ' ', 1 ) for arg in args ] + if args != [ [ 'void' ] ]: funcptr.argtypes = tuple( [ ctypetypes[ arg[ 0 ].strip() ] for arg in args ] ) + return dll, globalFuncs + +dll, globalFuncs = LoadAPI() +locals().update( globalFuncs ) +__all__ += globalFuncs.keys() +del globalFuncs +del LoadAPI +del Headset.New # only Headset.__init__() should be calling DSI_Headset_New() +del Headset.Delete # only Headset.__del__() should be calling DSI_Headset_Delete() +del os, sys, ctypes + + +######################################################################################### +##### Example code ###################################################################### +######################################################################################### + +# import sys +# +# array = np.array([,]) +# t = [] +# +# @MessageCallback +# def ExampleMessageCallback( msg, lvl=0 ): +# if lvl <= 3: # ignore messages at debugging levels higher than 3 +# print( "DSI Message (level %d): %s" % ( lvl, IfStringThenNormalString( msg ) ) ) +# return 1 +# +# @SampleCallback +# def ExampleSampleCallback_Signals( headsetPtr, packetTime, userData ): +# global array, t +# h = Headset( headsetPtr ) +# string = np.array([ '%+08.2f' % ( ch.GetSignal() ) for ch in h.Channels() ]) +# strings = string.reshape(1,24) +# #values = [ch.ReadBuffered() for ch in h.Channels() ] +# array = np.concatenate([array, strings],axis=0) +# t = t + [('%8.3f' % packetTime)] +# +# print(array.shape) +# print(len(t)) +# +# +# sys.stdout.flush() +# +# @SampleCallback +# def ExampleSampleCallback_Impedances( headsetPtr, packetTime, userData ): +# h = Headset( headsetPtr ) +# fmt = '%s = %5.3f' +# strings = [ fmt % ( IfStringThenNormalString( src.GetName() ), src.GetImpedanceEEG() ) for src in h.Sources() if src.IsReferentialEEG() and not src.IsFactoryReference() ] +# strings.append( fmt % ( 'CMF @ ' + h.GetFactoryReferenceString(), h.GetImpedanceCMF() ) ) +# print( ( '%8.3f: ' % packetTime ) + ', '.join( strings ) ) +# sys.stdout.flush() +# +# def Test( port, arg='' ): +# """ +# `arg` is either a specification of the desired reference, or the +# string "impedances" +# """ +# +# h = Headset() # if we did not want to change the callbacks first, we could simply say h = Headset( port ) +# h.SetMessageCallback( ExampleMessageCallback ) # could set this to NullMessageCallback instead if we wanted to shut it up +# h.Connect( port ) +# if arg.lower().startswith( 'imp' ): +# h.SetSampleCallback( ExampleSampleCallback_Impedances, 0 ) +# h.StartImpedanceDriver() +# else: +# h.SetSampleCallback( ExampleSampleCallback_Signals, 0 ) +# if len( arg.strip() ): h.SetDefaultReference( arg, True ) +# #h.Receive( 2.0, 2.0 ) +# h.StartDataAcquisition() +# h.StopDataAcquisition() +# # calls StartDataAcquisition(), then Idle() for 2 seconds, then StopDataAcquisition(), then Idle() for 2 seconds +# # NB: your application will probably want to use Idle( seconds ) in its main loop instead of Receive() +# +# if __name__ == '__main__': +# args = getattr( sys, 'argv', [ '' ] ) +# if sys.platform.lower().startswith( 'win' ): default_port = 'COM3' +# else: default_port = '/dev/cu.DSI7-0009.BluetoothSeri' +# +# # first command-line argument: serial port address +# if len( args ) > 1: port = args[ 1 ] +# else: port = default_port +# +# # second command-line argument: name of the Source to be used as reference, or the word 'impedances' +# if len( args ) > 2: ref = args[ 2 ] +# else: ref = '' +# +# Test( port, ref ) diff --git a/physiolabxr/thirdparty/WearableSensing/DSI_API_Loader.c b/physiolabxr/thirdparty/WearableSensing/DSI_API_Loader.c new file mode 100644 index 00000000..76f52492 --- /dev/null +++ b/physiolabxr/thirdparty/WearableSensing/DSI_API_Loader.c @@ -0,0 +1,49 @@ +/* + +# This file is part of the Application Programmer's Interface (API) for Dry Sensor Interface +# (DSI) EEG systems by Wearable Sensing. The API consists of code, headers, dynamic libraries +# and documentation. The API allows software developers to interface directly with DSI +# systems to control and to acquire data from them. +# +# The API is not certified to any specific standard. It is not intended for clinical use. +# The API, and software that makes use of it, should not be used for diagnostic or other +# clinical purposes. The API is intended for research use and is provided on an "AS IS" +# basis. WEARABLE SENSING, INCLUDING ITS SUBSIDIARIES, DISCLAIMS ANY AND ALL WARRANTIES +# EXPRESSED, STATUTORY OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT OR THIRD PARTY RIGHTS. +# +# (c) @YEARS@ Wearable Sensing LLC + +Add this file to your C or C++ project. Call Load_DSI_API() and check that its return +value is 0 before proceeding to call any DSI_... functions. See README.txt for more details. + +*/ + +#include "DSI.h" + +const char * DSI_Stub( void ) { static char msg[] = "DSI API is not loaded"; return msg; } +#define DSI_API_FUNC( type, name, args, implementation ) type ( *name ) args = ( type ( * ) args )DSI_Stub; +#include "DSI.h" + +#ifdef _WIN32 +#include +#else +#include +#define HINSTANCE void * +#define LoadLibrary( a ) dlopen( a, RTLD_NOW | RTLD_GLOBAL ) +#define GetProcAddress( a, b ) dlsym( ( a ), ( b ) ) +#endif /* _WIN32 */ + + +int Load_DSI_API( const char *dllname ) +{ + int failures = 0; + HINSTANCE dll = LoadLibrary( DSI_DYLIB_NAME( dllname ) ); + if( !dll ) return -1; + +#define SUPPRESS_EXTERNC +#define DSI_API_FUNC( type, name, args, implementation ) \ + if ( ( name = ( type ( * ) args )GetProcAddress( dll , #name ) ) == 0 ) failures++; +#include "DSI.h" + return failures; +} diff --git a/physiolabxr/thirdparty/WearableSensing/DSI_py3.py b/physiolabxr/thirdparty/WearableSensing/DSI_py3.py new file mode 100644 index 00000000..07e1a1be --- /dev/null +++ b/physiolabxr/thirdparty/WearableSensing/DSI_py3.py @@ -0,0 +1,316 @@ +#!/usr/bin/env python +""" +This is a Python interface to the Dry Sensor Interface (DSI) headset by Wearable Sensing +LLC. It uses the DSI API, loaded from the libDSI dynamic library via ctypes. The dynamic +library must be in the same directory as this Python file. Function prototypes are parsed +automatically at import time from DSI.h, so DSI.h must also be in the same directory. + +Most of the C functions are reinterpreted as object methods: this module defines +classes Headset, Source and Channel to wrap them, and adds two helper methods: +Headset.Sources() and Headset.Channels(). It also defines various global functions, +and the decorators SampleCallback and MessageCallback. Examples of how to use the +decorators, and a minimal Test() function, are provided at the bottom of this file. + +Normal usage would be to import this file and use the classes and functions the module +provides. As a quick test, the Test() function can be run by executing this file directly, +with the serial port address as the first command-line argument, and (optionally) the +reference Source name or the word 'impedances' as the second. + +The Python source file also contains copyright and disclaimer information. +""" + +# This file is part of the Application Programmer's Interface (API) for Dry Sensor Interface +# (DSI) EEG systems by Wearable Sensing. The API consists of code, headers, dynamic libraries +# and documentation. The API allows software developers to interface directly with DSI +# systems to control and to acquire data from them. +# +# The API is not certified to any specific standard. It is not intended for clinical use. +# The API, and software that makes use of it, should not be used for diagnostic or other +# clinical purposes. The API is intended for research use and is provided on an "AS IS" +# basis. WEARABLE SENSING, INCLUDING ITS SUBSIDIARIES, DISCLAIMS ANY AND ALL WARRANTIES +# EXPRESSED, STATUTORY OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT OR THIRD PARTY RIGHTS. +# +# (c) @YEARS@ Wearable Sensing LLC + + +# TODO: enum + +__all__ = [ + 'Headset', 'Source', 'Channel', + 'SampleCallback', 'MessageCallback', + 'DSIException', + 'IfStringThenRawString', 'IfStringThenNormalString', +] +# global DSI_* functions from the dylib will be appended to this +import numpy as np +import os, sys, ctypes +if sys.version >= '3': unicode = str; basestring = ( bytes, str ) # bytes is already defined, unicode is not +else: bytes = str # unicode is already defined, bytes is not +def IfStringThenRawString( x ): + """ + A string is likely to be either raw bytes already, or utf-8-encoded unicode. A simple + quoted string literal may or may not be raw bytes, depending on Python version. This + is a problem. + + If x is a string then, regardless of Python version and starting format, return the + "raw bytes" version of it so that we can send it over a serial port, pass it via + ctypes to a C function, etc. + + If x is not a string, return it unchanged (so you can use this function to filter a + whole list of arguments agnostically). + + See also IfStringThenNormalString() + """ + if isinstance( x, str ): x = x.encode( 'utf-8' ) + return x +def IfStringThenNormalString( x ): + """ + A string is likely to be either raw bytes or utf-8-encoded unicode. Depending on + Python version, either the raw bytes or the unicode might be treated as a "normal" + string (i.e. the type you get from an ordinary quoted string literal, and the type + can be print()ed without adornment). This is a problem. + + If x is a string then, regardless of Python version and starting format, return the + "normal string" version of it so that we can print it, use it for formatting, make an + Exception out of it, get on with our lives, etc. + + If x is not a string, return it unchanged (so you can feel free to use this function + to filter a whole list of arguments agnostically). + + See also IfStringThenRawString() + """ + if str is not bytes and isinstance( x, bytes ): x = x.decode( 'utf-8' ) + return x + + +class Headset: + def __init__( self, arg=None ): + self.ptr = arg + self.__needs_cleanup = False + if arg is None or isinstance( arg, basestring ): # treat arg as port specifier string rather than a pointer + self.ptr = dll.DSI_Headset_New(IfStringThenRawString( arg )) + self.__needs_cleanup = True + def __del__( self ): + if self.__needs_cleanup: + try: dll.DSI_Headset_Delete( self.ptr ) + except: pass + else: + self.__needs_cleanup = False + def Sources( self ): return [ self.GetSourceByIndex( i ) for i in range( self.GetNumberOfSources() ) ] + def Channels( self ): return [ self.GetChannelByIndex( i ) for i in range( self.GetNumberOfChannels() ) ] +class Source: + def __init__( self, ptr ): self.ptr = ptr + +class Channel: + def __init__( self, ptr ): self.ptr = ptr + +class ProcessingStage: + def __init__( self, ptr ): self.ptr = ptr + +class DSIException( Exception ): pass + + +SampleCallback = ctypes.CFUNCTYPE( None, ctypes.c_void_p, ctypes.c_double, ctypes.c_void_p ) +MessageCallback = ctypes.CFUNCTYPE( ctypes.c_int, ctypes.c_char_p, ctypes.c_int ) + +@MessageCallback +def NullMessageCallback( msg, lvl=0 ): return 1 + +@SampleCallback +def NullSampleCallback( headsetPtr, packetTime, userData ): pass + +__allprototypes__ = [] +def LoadAPI( dllname = None ): + import platform, re, inspect, ctypes.util + + if dllname is None: + uname = platform.system() + machine = platform.machine().lower() + if machine.startswith( 'armv' ): machine = machine.rstrip( 'l' ) + try: maxsize = sys.maxsize # not available in Python 2.5 + except: maxsize = sys.maxint # not available in Python 3 + executable_architecture= '64bit' if maxsize > 2 ** 32 else '32bit' + # we must catch the case of 32-bit Python running on 64-bit machine, so we're interested + # in this more than the underlying platform.machine(). And for some reason the official + # python.org docs recommend using sys.maxsize in this way rather than using + # platform.architecture()[0] + + if not machine or machine in [ 'i386', 'x86_64', 'amd64' ]: + #arch = executable_architecture + arch = 'i386' if executable_architecture.startswith( '32' ) else 'x86_64' + else: + arch = machine + + if uname.lower().startswith( 'win' ): dllxtn = '.dll' + elif uname.lower().startswith( 'darwin' ): dllxtn = '.dylib' + else: dllxtn = '.so' + dllname = 'libDSI-' + uname + '-' + arch + dllxtn + + headername = 'DSI.h' + + global dllpath, headerpath + whereami = os.path.dirname( os.path.abspath( inspect.getfile( inspect.currentframe() ) ) ) + dllpath = ctypes.util.find_library( dllname ) # try the usual places first: current working dir, then $DYLD_LIBRARY_PATH and friends (posix) or %PATH% (Windows) + if dllpath is None: dllpath = os.path.join( whereami, dllname ) # if failed, try right next to this .py file + if not os.path.isfile( dllpath ): dllpath = None + if dllpath is None: raise OSError( "failed to find dynamic library " + dllname ) + dllpath = os.path.abspath( dllpath ) + whereisdll = os.path.dirname( dllpath ) + dll = ctypes.CDLL( dllpath ) + headerpath = os.path.join( whereisdll, headername ) # expect to find header next to dynamic library, wherever it was + if not os.path.isfile( headerpath ): raise OSError( "failed to find header %s in directory %s" % ( headername, whereisdll ) ) + + prototypes = [ line.split( ' , ' ) for line in open( headerpath ).readlines() if line.strip().startswith( 'DSI_API_FUNC\x28' ) ] + + ctypetypes = { + 'DSI_Headset' : ctypes.c_void_p, + 'DSI_Source' : ctypes.c_void_p, + 'DSI_Channel' : ctypes.c_void_p, + 'DSI_ProcessingStage' : ctypes.c_void_p, + 'void *' : ctypes.c_void_p, + 'const void *' : ctypes.c_void_p, + 'const char *' : ctypes.c_char_p, + 'size_t' : ctypes.c_size_t, + 'bool_t' : getattr( ctypes, 'c_bool', ctypes.c_int ), + 'int' : ctypes.c_int, + 'unsigned int' : ctypes.c_uint, + 'double' : ctypes.c_double, + 'void' : None, + 'DSI_MessageCallback' : MessageCallback, + 'DSI_SampleCallback' : SampleCallback, + 'DSI_SourceSelection' : ctypes.c_int, + } + + classes = { 'DSI_Headset' : Headset, 'DSI_Source': Source, 'DSI_Channel': Channel, 'DSI_ProcessingStage': ProcessingStage } + + def wrapfunction( funcptr, outputClass, doc ): + def function( *args ): + args = [ IfStringThenRawString( arg ) for arg in args ] + output = funcptr( *args ) + err = dll.DSI_ClearError() + if err: raise( DSIException( IfStringThenNormalString( err ) ) ) + if outputClass: output = outputClass( output ) + return IfStringThenNormalString( output ) + function.__doc__ = doc + return function + + def wrapmethod( funcptr, outputClass, doc ): + def method( self, *args ): + args = [ IfStringThenRawString( arg ) for arg in args ] + output = funcptr( self.ptr, *args ) + err = dll.DSI_ClearError() + if err: raise( DSIException( IfStringThenNormalString( err ) ) ) + if outputClass: output = outputClass( output ) + return IfStringThenNormalString( output ) + method.__doc__ = doc + return method + + globalFuncs = {} + + def clean( s ): return re.sub( r'\/\*.*\*\/', '', s ).strip() + + for prototype in prototypes: + + restype = clean( prototype[ 0 ].split( ' ', 1 )[ 1 ] ) + funcname = clean( prototype[ 1 ] ) + args = clean( prototype[ 2 ] ) + doc = restype + ' ' + funcname + args + ';' + __allprototypes__.append( doc ) + args = args.strip( '()' ).split( ',' ) + funcptr = getattr( dll, funcname ) + funcptr.restype = ctypetypes[ restype ] + outputClass = classes.get( restype, None ) + for prefix, cls in classes.items(): + if funcname.startswith( prefix + '_' ): + methodname = funcname[ len( prefix ) + 1 : ] + setattr( cls, methodname, wrapmethod( funcptr, outputClass, doc ) ) + break + else: + if funcname.startswith( 'DSI_' ): funcname = funcname[ 4 : ] + globalFuncs[ funcname ] = wrapfunction( funcptr, outputClass, doc ) + args = [ arg.strip().rsplit( ' ', 1 ) for arg in args ] + if args != [ [ 'void' ] ]: funcptr.argtypes = tuple( [ ctypetypes[ arg[ 0 ].strip() ] for arg in args ] ) + return dll, globalFuncs + +dll, globalFuncs = LoadAPI() +locals().update( globalFuncs ) +__all__ += globalFuncs.keys() +del globalFuncs +del LoadAPI +del Headset.New # only Headset.__init__() should be calling DSI_Headset_New() +del Headset.Delete # only Headset.__del__() should be calling DSI_Headset_Delete() +del os, sys, ctypes + + +######################################################################################### +##### Example code ###################################################################### +######################################################################################### + +import sys + +@MessageCallback +def ExampleMessageCallback( msg, lvl=0 ): + if lvl <= 3: # ignore messages at debugging levels higher than 3 + print( "DSI Message (level %d): %s" % ( lvl, IfStringThenNormalString( msg ) ) ) + return 1 + +@SampleCallback +def ExampleSampleCallback_Signals( headsetPtr, packetTime, userData ): + h = Headset( headsetPtr ) + strings = [ '%s=%+08.2f' % ( IfStringThenNormalString( ch.GetName() ), ch.ReadBuffered() ) for ch in h.Channels() ] + print( ( '%8.3f: ' % packetTime ) + ', '.join( strings ) ) + sys.stdout.flush() + +@SampleCallback +def ExampleSampleCallback_Impedances( headsetPtr, packetTime, userData ): + h = Headset( headsetPtr ) + #fmt = '%s = %5.3f' + fmt = '%s' + #strings = [ fmt % ( IfStringThenNormalString( src.GetName() ), src.GetImpedanceEEG() ) for src in h.Sources() if src.IsReferentialEEG() and not src.IsFactoryReference() ] + strings = np.array([ fmt % (IfStringThenNormalString( src.GetName())) for src in h.Sources() if src.IsReferentialEEG() and not src.IsFactoryReference() ]) + strings = strings.reshape(20,1) + new_strings = strings[[10, 11, 5, 4, 6, 16, 17, 9, 3, 8, 12, 19, 13, 18, 14, 0, 9, 15, 16, 1],:] + #strings.append( fmt % ( 'CMF @ ' + h.GetFactoryReferenceString(), h.GetImpedanceCMF() ) ) + #print( ( '%8.3f: ' % packetTime ) + ', '.join( strings ) ) + allstrings = np.append(strings, np.array(range(len(strings))).reshape(len(strings),1), axis=1) + print(allstrings) + sys.stdout.flush() + +def Test( port, arg='' ): + """ + `arg` is either a specification of the desired reference, or the + string "impedances" + """ + h = Headset() # if we did not want to change the callbacks first, we could simply say h = Headset( port ) + h.SetMessageCallback( ExampleMessageCallback ) # could set this to NullMessageCallback instead if we wanted to shut it up + h.Connect( port ) + if arg.lower().startswith( 'imp' ): + print('impedance mode') + h.SetSampleCallback( ExampleSampleCallback_Impedances, 0 ) + h.StartImpedanceDriver() + else: + print('normal mode') + h.SetSampleCallback( ExampleSampleCallback_Signals, 0 ) + if len( arg.strip() ): h.SetDefaultReference( arg, True ) + + h.StartDataAcquisition() # calls StartDataAcquisition(), then Idle() for 2 seconds, then StopDataAcquisition(), then Idle() for 2 seconds + # NB: your application will probably want to use Idle( seconds ) in its main loop instead of Receive() + h.GetInfoString() + h.Idle(1) + h.StopDataAcquisition() + +if __name__ == '__main__': + args = getattr( sys, 'argv', [ '' ] ) + if sys.platform.lower().startswith( 'win' ): default_port = 'COM4' + else: default_port = '/dev/cu.DSI7-0009.BluetoothSeri' + + # first command-line argument: serial port address + if len( args ) > 1: port = args[ 1 ] + else: port = default_port + + # second command-line argument: name of the Source to be used as reference, or the word 'impedances' + if len( args ) > 2: ref = args[ 2 ] + else: ref = '' + + Test( port, 'imp' ) diff --git a/physiolabxr/thirdparty/WearableSensing/__init__.py b/physiolabxr/thirdparty/WearableSensing/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/physiolabxr/thirdparty/WearableSensing/libDSI-Darwin-arm64.dylib b/physiolabxr/thirdparty/WearableSensing/libDSI-Darwin-arm64.dylib new file mode 100644 index 0000000000000000000000000000000000000000..09ce3058be0182fe4e49027890884d18a3523bf4 GIT binary patch literal 318488 zcmeFadwi7Dwg3OjOn{ki5y*{;CIPG_q29S&XB-Z0eI+L`eiap$luRk9 zD82HVlPzg+nXi`~*=^abwk;RW_^{7hS2igU|0I zf$z)cs;HPTKQ$Wul|H{s&o2f#2rYV?n5h7q2w(B-w%g|1?j&_?@5?(ZYSd@WKR11y z@riE|^@@rsCVX?!rI$>wq=OV^6gefV_@KX9Se5GJD5WpI5WhkE-07itcU0XOKI_)% z8JA3+aK*;HTP2PG&`5@68Cw$C*8lGqK6D~+Gj8ij_WRG#yg8B2r z4gF@09C_wBHWLJ2%&!C9IQ?JXC)dos^QPO*9Pj4aX_OJ){&ZoQ@h}w?+Hvto|4y;v zZ*EUB%F@lG?*F&%n*-e(=;lB-2f8`X&4F$XbaSAa1Kk|x=0G&%n*-e(=;lB- z2f8`X&4F$XbaSAa1Kk|x=0GMK`yz%hr7Uwu|Ga$PJ4Q`qe6z3O-Ns!xW?bR$?wmW6*R(6=Y<=^tGWO+r z>Q^bR#m=kVZRh!oeFfwJdzA^BmV)({8Qb&PJ^SiC#+0ayD{xDeSFZfSMb@U?p_8U>&C3*WxQw5joG`hoMpwA&r)GzDM#X$qe3 z*$(fFPg7<6Y5whbuUm3beS_8Z&T`fGNeYkO7_>d_eq*0M6S=w}%f#6k-tY}Fd2IGm zTdLmtwiKR9SGch)MbBnedbBOo7UPptINuen{3KPDa7Pw?+r!h>w|ckt(*Kz@*= z4*Zoam_}DR;SN0R@Mf2My2FM`o{{Yo%`Ta*bcJhO@Qo)9ci?G!FNKq_c8AkO#$ZQy z^FLGVV*K{+fN_Nz_oZN>uJrun8ITmO3`0= zCumA3vp%S`^Q8~m`lIj!@X-l_OgyIkIGUoxXixE=));h$)1QrB zq|z$~rqZL?DLk7;q;yjLX{m7N^g$-=s*8T>2-hBTg^#4d#?cfHqU|o)j1(Tjo2obJ zONB#eu6ld8;CrRQAy;^_Kh>7TzNv6!zZ87_fK)g-(1kxU6^>@5$~NY>;0LABYfnzm znV;{18J2=EPECa?PfNi!o|b|)PEWxY1*vepD_mKaO5a?RqO)>jDjXe|!nyg3RC?o? zsj{_arP7UaQt*xErqV;BQt+WMsr1GTsXomgn<`uD3g-t?@X=tZy`c+I>G>C>${H8D z(nG0m)DSt{IEmI@maQ#3>;xx(K}g=?=&g`-!cXvi;5r8iDa z)w_9WDt(K`SReBl%{&KI-ZV0+zs6Vk$%7{M&I%RxxzIm(xu^HUk=M+=C&YIcHtMis za*D={;PpLv%PURs3QyDFY2K!TSNfXT7p66}`#cQ?z=%v{vEG>c}@@PUFyAO{^02W@_1A$!(-H!XGM$^wH{;iyFHDD zBR!4nJH1(Lm1)M5*S(vA1>k%Ai{w~;Z~t=tMWKy`XW+oiUnEBfCf{dFX`xJ>C#!9< z*O(H7)2akrlYs~E>iLnBlGaI-;nNshu)_4IwQqH=oen2dUSE5r!nA=&tIgv!=Cuqz$wPS z7&te11GC4|R-^h*@tf3DO}^5rzetWrr);=qC?S3n(%!H)ln~r&F1W(>M1QBa8;|Yq;6|+DASle3blF(#6wu!m&l0gJs8(W1_u6 ziR)?4P8a>3kniR-^fyRmMX$<*jksCvn`Yl+G{0!VZ)&=RcqzYs*Isx3^RDJ7^*^t| znQg208SATQo8J>y?%B7q*x^GXb%+nO^p)9%_SoQQIkTLPvEZ~@d{di$Lm8*dn+c2d z0=vz5(D{L@%|AEWkdm(xwRwQu<{IFWKJWH}SN25idNs9g^)wu$Pg~*90mg51tI@Cu znCMLPMP~C#!jW~*NO~)2FC~*JqdqI|Ve%Tuqilm@;7;;l6_%Vv4t!7?k!);2F7?gZ z5-jk>$F?uL92vW;2^!44iTXl`y{bd-$ZliZx8olXSGh3p=t-f3WXUYA_|Q<|1LB?W zn0-v$1=J;6W}V=OP^ZdL+O2VAhk-dRv+W25AE&?&-*dfeT;RB=j+#bwm0&-2spo~xBNws z1Ai%QG3CSx2}5zq4&a|@ndvC6GG zlqb6PAvcYsp6zSEHHP(HYB-{>d=ujKMFX`atoslvSBM#4S1>gU<7c!{|5% zpF^i3Z%3Z7>8vn<2Yt|&VFY6%JPl?(a`z4BiyZiNF?tbY{O$NS+CTpJ`c-=tl>|qT zws&MGvD$0Qo$&n9RTV~{Z8392I_XVy*E5Y7bDL>v{`1RL?LFOsYXf)5^UGI7yv1YJ zGG7%LpJa zn)-0zH<77tps%lJLdMMTbRPBHDH)|bnc}zbD~`8djZyy|@4uCvs^r?xWw-ccO9;2*OWxi{-4UO@aKJ8trr zw)LZL%zWC4-Wc;?M?SoE!3$sPXwvMP0<+E6$6rxBDyMYOXY*zQ=_YUJ`*&UV!oZ0~ zIpj+ZAD-5OK0IC*AF_2ZKA5JwfRTvSN#ABQkD`nPFj0275@;%my@ z$THI%KDGj*_J`?H@$66ZqciUuo_1-+9OmMa2{(pz$bRE(TazF5yg#NAI?f_b_SQ;p zcV%yAE|x47U`J!GjP+sn%2ueOt%vDntN$}he#ln%rD$9f3QGU&?Hx)u`fu3{q2L74 zmQzk?v(RxBMtYma)_;fSn+nn!fBE>TWzZ#<66TEpU-8&i(~R|n=)G~C(X*?7mrmP5 z-HzUCf#;p|T_yUCcXKmio?^4#4?&mK3|-k{OVF1W!-vDPQ}VhO*fAdS$>J{I1*5*G zr!U15ug#Msw9Vm%&#>&p+ktazr@4eB<1xzQpMVz0=o`SDDBsiz;GkZ!U7LW__&uF( zvQ*=@C*v18YN4NXkk_=O{$>1bwdCv)%9wNRCL`!)&W)6;nHL+%oHpMu=Uivbd!jwL zat-s0+8v^d^i&INkp3~pa^99;J>yhkS$cXEFv>H>GCK5e#eu=*F?FHrZ^@_|k2#is zX<q;A!c-7HHV9hpy`*QMCW&>@=qKt6bIM#iM zZSc_+*3k=lG_{v{8V=h!AhR*lwA$-$Yt-7vTuWv*zd+gg8Aby(Q=)z0rIfpb@}=Mz z55AJ7V{=}MXw4Hl;Q3|Q)Yko4lPqOjTG(Ft=w8xhO?_+PsXoze+Y$cAE!X5&(hYQYw#j$i_J;2n&5OL*ZTavfqZ8lX zRsHaNfnDz1!%1W?n{{~C{CZ;@b0YYDcfYaXziKSKB;SGb)1B~Ha-#6($i$ra*+{Cjxd61i={KOn)9J4R%h7{YX1brU_JB?81*TRR8&}x8~y_zSlAbk4$5(^%-*) zFb8X%O{agyutu5od@bvY?B#hS#`ELpEA@5WHS9ZMx7>Au5scF(FB;OHgIJ&EH19%= z#Lv9hV~W*J!s%hoR^RPHFRg<<_k8R4nxqf>B}T*GPw#sq>Kojg363~CE%256@~*W; zQ>E8P96pxZAUj#OKD|%#VgB3VyU7RUKJme@`4Fa_(p1oYKHY**HaTF(mJvQ;yi zmjYwXb;w=ET-Teq?mXtYbt*_2d64 z=xL0S|FC-dpy_)lS4MmizNeqEE}G5!Gm^dX+4u;tTfQ~1htbeGIc=<;u`>eM(c1ox z)MMh;T0!%_;>eddzaS5kr+rrrT(WDvqI+M7{KTdi1%gexT`g;w0qx4x)dBHEd5Fh(i`G&3W zwTiO4=sU?_{%;3Omyd1;<5gqNPkBFfhhg}a$3_?pkAh!t!?q5ZE}j37>J!WV@EB|#Vw2Vhrm$2qZ`BYVIw+%Cs?{i0!E04`N-lv@` z4QxNKJFOwgPxH%sYy!zWzp+cy{5vSZuw|4kW#`SdN})p$^O zY>pUwC?;*qe_MMi;-U8icu4w3q)Ru-_ESGAZ3k(7J8sH}jekAqvXM+Ua8HJ2XI*Hf z(cW*8Ci*jg{WknN(flI%M91J?4VqrO&f0Ier=LH5KK(JoZzQrRv7N|&@1;T0W2cog zL60d5fp9?_|8v5TjcjB?_K5oVUh3R=neu7}wmf2NRJ->Sjc*F{^~4L2qx9;+_#Vd4 zQs#%fLqZ9qEt^#sFPv#KDD8>yMq-Eu{{*WCG6FvEyHEc1@yI0WuK@fH7=h*KJ!{L08jOuj{EhE~9xdu?bmSKW zLK`OqY6njA^iH4XIpy4#^jNu4sEj^+CVGyCR!+(@ow@r|r|= z!PW3$Dm=M56Gtn(Qs)4uCy->+s_?L(F`-EDlDIvu(y zKTl3+f!4gy#@y%^$tih-#$1CnQQp^#x!QZP$_+Mo^DyQ1+v}26Y)bKKIccAgmN(Zk zw^8Mm8gnc4U2M!9!B>8zJ+spdyhcf#`|{sYP0Z&w>D`bqYfH;5Y9+rjP3f6m;eF&f6kF!cty=6v-zGPoAl zgIE3+vd*4vspf3=n!xgp%mud5FgEm}9flD~+}5eS4Q72M$jz(fyw|y|JiD&%0hg>( zdsBV`@uk2Y3i=y70}Aoq6=MJH8R07|NF&@Q6x=hyTUgMaaHhhZLbZ1`_$q0??98y& z2&&D_IvMczi|(EY}rs=nhlT6V++#P)kUw>)hO zs>-dz-g5LNxJ;aW=!xkhnSZaV9vHeXq8<34i-O#u{zcTl?J@9)%V|@=}l-lZtPLEAz06O>j{F79N|Cwcf z(cXWgE;BAV{m^NM#$lDYZLGUJ(C9C$%4IFmpfu4a*v8%7?MLXt-SpY6NtPaHe8IbY zai7}qTzIOm`Z_OUJU^q4F-7xW-u1@58MOPwQs4Fs^D~RH@N4ayHM)2;Yy4%bLoPz5 z7O`$bmV+gPBk0o{bIq62ypp=4b7S6;Uv5};UQ?qlBff?@WD98R_&4$$T(fEWq21_Z zet*Rm*{J#F^wj*L`DJ2F4)aT{Ik!0T${t^45pznyD5=c75Pb3>n0j%9(eUBZjEy>Q z@@rL`pLDzYwjROmw0+oTjX%z2Yox88Qr5H+wH}o1&sVf1#1yuZ3CW1`tdfO(Xbu5rPBl-J(650TyEM=qm0`0 z1KQNt&N*n$pJx4ewdJdi`Sv}2cKxbsWd23;R^|EfHTz6oK^QzOL+}+YGZHP?#(?l} zBe>u+BY5Yz$jG_g8fQ%EyoYJa9H+aWDZjS7A~S8@6!5PQ?%_tmF7#YEc<%&f{Sae& zm~r2}Fr}|Nqgd~w*8=pdKft*M_?>>X(J;xMX`VIu`YD4Ze}jF}!i)Tq3q5@&R$o(n z&r(ldBICn6Yvj*28UmR{jn-qLDe03vF_5`4gE=&lxikyin2nCbrr6rUwB8kXbvad4ZJ&d{2h)1zCis6CQVU{hO)4UNpYtFRllw5DH@z$P;K0cUS zc?8&zoyzK^H>d{O}^k#Y@w>t zExN^D!PHoFci2I(A4!IdhHUzyec?3v>}vXMDt$PGzMPC5ge{3Zs6IY!UZ+feGLrv4 zf@2Wl!+$ou98cP}^3E~l?m2z+kfJXZmzRAF$@T=&Ro={BkUKE%oV2-7c;Tc4+I`;| zhh3Cb7`iuYaQVGe=wt0knfVU9Jx7Rd%JZKS+US%U54>RW)-WHDS2(O?RT2HN?2g9$ z>BXD(7kbi{o%&?xXe)M?zY{*$`N!t;r>z5MbJzC1v!;Ks&bz&l->+#eYq9bpoUMq= zf6v_Wk-rO`TW3IkG0%Y1T^-N!P^-{^2c}Jeoev~&D!N1oCTj8YGl6x*!<@o zUDfQfV15c-ofQeE6^|X>Gj&#E4LT2fw!NA$Q)HhLIgDIJy4W|(#~#RG9>}I2{)E4K z7~w|nKSMiA{vN_dc_scU@f|+L4(hDMwD^w{7rzy!&z~f|mN{w{`!ydE))^Dk`Lg_L ztIcx_?5ojV@~y&C+s{_s;zicH#+ZkwSNjVu<405d4}wGGOrO=rP-3y-Dlb1|<+7nl@?gs-H3C9{7-`<6If|Ur}EWmjA(^jO6{WWP`bs zIn(s-?sU!)0cXlaj`}~_k`3lsqxx|1qpF`Wdx%@I@g(v-rnm)pckp${#%}5Z*M~pE zf6rRrh~tMAEy^2VG+gi{a&e(87pq-zG3*3#A()cqpITM#EgtJ-&02&Fsq;gQOcWvy zds%xy^FH;D&JImtKKyzYXNM#c$FL)`uf7(zxwP5o*Zb73*cqlza-7}2@I(E37yYUI zSM}#HyFUkrUxHWvVbk@+U?^JU2v0%uH^ooxy zBhR#Rh!+rNFUpKd|H!_QoW3vkP2hC=-h{)dk1_K$c^WeX@X8!3oE_rtAX_+ri*cUV z%-6mhW2!~)jHxjD2&^IOy52L-VSUXh2M^8mz{6jw?s2L8urlmY{@!t>(#-b2*B1ms zzi7O%;Irx`9)l+JtJA)SXl5Mg?5<@GzE`YzG`2McOgQ1O?ad#7SNgaIU*lAx-TOf4 zZCXPae%4Y2M!V*%wvoTSjdk8_?lo~ZRGB-0UlG6F{Djxo>}jYhVvXgWoqL19dhk`R z9iNqZtr_>(@#@^G&3Kv}59gMf@g8QJzFZN072g}OTKQk0c8_PKwf-Apw1-*yY-T?7 z(-!=KXI0v1i!~>+Mk*se${Hp-p7Bk-hhIH5XVt}_b}x8_4VsZV%wLrop21pEw&)F3 zxUYFuMfMjA+_^uz|6^+nO1a82jrIcSC_y)?K0o1B>aILj zYg5a=y=O$pZEYieYpw&rOFGf^{NjK1`wzJ2I6-~# zU3Bg%zn?moSJX!VY-*iRDJ1Tv-zs+*!ODw`jk7)q1=CqaCw)dDiC+8A$C?W`?IU^l zvA){zJ!B*d9DExUzBsfo4?DINn?-Y4I6ah@)i0Eo#J+xh_3UE>)gzBhV69pdXjwJk z8UIt&_;EeO@R#-Vci~r6&ro|l@yeb?yAcet7OynZD@ivB!e;ucY|WMawi)oc3|!%C zBT0DWiF%#MFQnOxtu z4|8nI>|^<~r!RAIK0My*>)m{aIaU6E+i3f+Yi7mQuuq!zZ6k>O4w`l(d$}WNtLmbj z9a{IycGabQz(wp6s;)jYv*Hg?S0CzHTr=yqy7u_ekE_eLraCVC^yLnH<*WF|1(~;f zdR`VXn$5V*x$W4TLD-jru`h>UTMxy?KACmVDfpgxnP*7kGr+Dj&kyd!KNjJffY!kI zR~l3HG9OOC7oJ^Ya5lAe#{uTRyIxwkf>_7a}|Lni(m5=xLdHCkszQ4FRx8IvL z=N7kQo9nle{&{om#@}1vK>u5Ebxz`k*ki(7=<#n`ebUml;a6~P^uYaZH6vGL)z!x| z)}qMUkm~CA1KUFP;{TfB_$9S=n6&^q0GPkq>1%##t+$jnQ+Xv-xl!nA^$lr0unK+Z zoOkQk-+6SE_IHGH8t|IuOg)K?p8OR0u|Ik-P?_uLKO@%@sLJ&ghI4%n&&c%!X6B~# z=NGs!x5vXXb9)4C%I(?z#@wEPn{#_zbz^R?z%9A`AHFfSf8dVX0dL-zJ0LJOcVPdU zat8+HFemqX+L#-t&aLpx%uRnM`JHXvTb>RL zo1OarKA(wir{X^*p6-hOmUxjX{vq*Mu6SBsW6CmD{8Zx2uJ|Ry-*ClmB)-=be}H)U zyRQ0)7rElUB|gy=|B(1BS3C{7Z<#B8D)DAl{1W1CxZ*bw-|LD$Ks^0DSN+6`T=Cx$ zpXiEzNPLzno^}%TyW*!3Z+68mA-uC!L#f2WrhLmzyUtE)<($_QcG^Na zt%S78?X;)tv^AXbV%=-vd&N%kkS5=v>V4l%tKw`@v7Pq0owfzPq3kP@KCew5X=mDL z7uacwIqM?(%H*G&)`~rSs-3pbPAee|d)I_}%1+an-XV6{D|VWPv@ARAeLJlReJlG) zb$o88Z9%_i4l?OuKT`aQcIcu(rXS<-JLUHn(marUpZ4co?DJ2yvvj6(*hF-g6TgIbx+{Jv z@gi3|jrc5ATsm}_D=r<|?27-G_#3YH1H|{b;x`gcM~8LPPrS$#Kb81IS3HgQELZ$P z#{4o@{I|rLUGX0if5R1jfcRcl{6^yG=(LXdi5I!zrxKs&il-5u<%)lZE?MS^|CV^O zEB<5R(wP(Cw{+$M#C6ti=gr6K%!`mS*#pkFaLe+#SaQlWj6vN~8O`rf!i=Hvsr;mO z6kfn@oE?6QFlU3!^bLfAcK98_W9;xD!qPh`n}seq+YXN=e1;vKO1Q`lFCcun9e#|k z^p47IAUwNP~t)2^0~Z#FSUK)x3Lqi$6mY+yYX7=$7@)#PiOyQ8g}K?*q2jp`^N=SZqpu# z?9P7B)q|hfAl<3;soG$!N3pYF_C7~~I%HeRKj5+RRp;Z>sdeggarp7%Czf5m>%G-O3g1~eWcReyL$*)-!H^2W znAKbk2BNwHw@q_Ic1+Ak+=e^O zFus@r=hhA^JBl4LrSqN*>jTzP$Dc`Yc$^Q9`+!$G7Joy22%q}u zGmN=c4EygP4{=uHfhR-ve&Xv}^c?NX_grzb1)JTWJz3g=Gid{noeb6(oLlkrXb5~= z{!>re1ndZZvHWlz^E@Q=C-6J3Pd^)fM&I=16Z?9$O&n%y*P3uGyeVX@Ig!0x#kbO? zkSD|%d7N59qdqPH`h-?!u-M_glc9{7L#&*aK<{0?g4 z8~Aawmsig>z!(bjWj~(2ETk{Bj#OVxq%YYAS+2PHGM~PbtRH_4LVGKrM2PkJCu$$( z!YbD;xv+AH@m!_1_9FNGp~fUW4EAV^?an!hc%}!?@2tpqk7h_ z_cz`7*8Zh~KHML;f5KBm?Uz3~p?w1P^NmFM{k7!>9Q+Xt)M=e} zK-RVA=$3W)Vp{O$if7_Um~a7ODf|(8srX^SyF&P4@xySoggdGmwZE;g>Gs2Xjd}zZ zw*4>>-Y*E_D~W)s8ehyT{H*!-1>}F3gL4NI^O8mJx=VuUK^I%Gryti7i^fS`4kqy=5 z;Ckbi(VXFYwD$((c;e4Br8NnCP02Aq=X&B*m;&p z&F#qzdXqvrxwD+ce4e5}!T2Wh>$beU%i4A^M)PaJ@vh{iwU@C`d~?p=RngD2(yJF* zdh%8Dr;mPa?G@ViNBCZKq1FG=pY3;8^zz=pHV^ZQ`o(i$wz+Ta?Saiie#buBna(*} z%TMzed94@NxELdQiA(4014n0Fe6{MmBPCC-UTw)!8oY4JlgfHsI_)0XBAs>->EHW@ z&LyAtzE#o}*nXIE72?Gp_Ca4RSu;<2pVKK@4}FpOImIvgvR~d*nqBPdi)#P$XW-R- zfq$5_2U^B=eW{PT^S@+fKe_sS!{)Ue;_=k7XsFtLKP z&v*A|2qTMm+!e|nq;+-ejs(6`KQw8N=Md}Q;0WC{3nh*+9>)3nZAOkUWi;o#MkD{S z@#Xuh#6R#=eV_k{{C=75voHRF9DJXvdvmviaICHe{@twRVbHS)o9N)89>Mq|5BErV z1Y^)2CBJnplLhq%S- zr;guCB+ubBzJnd2EyTIY)%Xu&W8LR7Mz7?KS>rnT9X`MD7`m0P&WYfIFK@>N))|w? zfgQzu_IMlXz7;=%I$!KF2;l4otP*KbRVqZEL=NuqhNA!@lKS_VRYR-an|a_br?1rr7Tvc&+yjIA1Kd zwwXqQ_O$)n1732X{mb4apY|QWJ}%>KOjrAtS}(}Yau<78+V^VoT^0W)v}UInW4Rxh zqy0>cP1&}>1Ke2k0sCO=YyQsMAB*k$ow=WRx7QeZJ!QtKf3<%Jt$zcT39mT)_GiT@ z7gqcy-2YcxjKl)Q=qB&rwpPZ&0s2RMfB1kk*S8L^ZA6;B@rTJDHo(%mOVHsD5s&3vYTX?_YqANyXKNb$Z^1txc)tZNS*#^4 zJ^elCGxaodI5zVqD}XIc>FFhfmY!Y(tn@Tv)7%?5Oqo%Ata+jc`P4p61v2ZW&U)s^ zDD~^y$fw|o(C)w~od2-*d-jm;*Ep|$6ek9>dSJ)gc`zUT7? z=1%STEEZkR{Wf)Kou1spUCNn85dC5C?&l>Y?@BmxW9~!HhRwk0PPVxZfxMmrA2wh| zNSA6aee=HLls)i1wmOvP%!k;K+Zh%G_I6x-uKp?F}R12uk*wv zJaleEHbm#^pIT=NV|l*|`t{zzQ|N6Mj8f%EwqwMIjG zJ7cTPi|v$#|D)^sxH|JIx@FVpuB35N-GxS-@m${gw0rWlvj11-3FhtQSLzMcmw#dI zjrpe;i898C{{`Kp8PsfifBA))YxC|l5=Pxa7v{ZhY%~J3{rza8q zBCl!D7a2|LdC#f(Zu)ao-|fw>55K8VGzkzgN>67TrMnTEbU* z5_iq$-LU1m#&cV+JHx~KG#H0{a|}=IMfa{frJ-cqk_$_|XFONptG#H^FFlE>oN)ti*qx7+mrZ?kUie*KV$ptIqU!MCi>mhX`)u(=;lrd2OapewMO9vYUo5_8;j8%# zi*nNvi-x2n7G|d-wq5kFE0eAnbF}ch>+f|0%%NxeoQq}~!_hgyte~l@7UG_*C zHtw&$SBuSW&Z*@6g?KCDNI0eUMuXQqmM^yDseR$U-eEpA=MvVD);;FS1UJ)YGRxXy z^(@jfCX{}%{SAM>d6$0iF)ums;is8*xtanw(+k<7t)`8I&=EL;9ry7!bJoQemC3p` zeA&&MbumUKhZ>247qI5s`mbxwdg@ad)|#VZ+*v5=6Caz8{Z`w@*dW=?r*HC+>wNmA z5q%p%*ZC-O_uAZsd)DSP)U3^KxO4dM2EjJcuZ^s28tKnmU5Tn6zDekko%M&e%5 zOujI0{hE5j3&Rsi+)284(IR@z4JGbS9G=uGep)DTD{+T6Wuz&rayOGMKK=0#`<%Vn zpz#CGD$Kl$=7FEsbDPcg7_#8hd$kP{uwgWgdlK%-XD|hywDK2Z8!HyALeD;u)?j?p z>ny`#v||qrTyUmmccIfI zW5baz>Gr$O?Ul&mUFdJg;mM@mh5nWvH}!duu~D*m7y4ZCnyGyBxpaG_w|9f|`>@DB zbAIt+v)xDADqq!E2;L)5ox`njwm%^p{kYehO77Y$nCRJP945S^_CoBgN5X4$cjtIt zNOEgW?jh#jZyki6YcTmkxX0g<^YqsJJag{zmuxh6*YWT=>`i=WCEx!+`C=n7?=olz z$xa{1x$Fg}42+GW4e2Et1+&J4`Nh181Vf)B?YuKYH!w4n>5g-4`Q5}9rF%9;Y<=DA z($@vNu`%1u4qE7i_k#;6xZ=zKD7)M0<$P8#jB&P^ZqYsWe}>8!JXGuPR^ z>sd?N=cc(EqI1(8=!j6JNq0reb#|w7)8sj8zbJfI1FmxF+mj6OCMoNyq1KvF=Y_|e zV(eSPJhOF^B_o1&=9v$nFQ0N+@95lTjPfl;@fg`@T5E?1M>*%JeiS{}E@NLbjM1{c z8li0s>F;tEDZ+deOB%sgQF(>zv`(uKIzs-3IOTH1g))V!@uEuYAvR-B%wrAOq>fsJqts z8lt6=*{o(Ccv=Zd2fvrY_+M?^iwob5f0cEX&KXFj-UOV|3VQKo=q}EzaTjA7YxX0w zN$q+OAK;6$Bf?MT`80;h(vS`OSCRSG*=wMCkF(3KV$Nx8wrqeI@catmi#J%buZ6E= z#5>y9;j?K$thDZTdUE7|5=$Jc?) zckL;tY=?i1@{Q0jg1+iYx?{)7Z!Eo`^}gh~CwV>iDNSvU$@c+Ylz);9tNt$_U45>- zMhDj6^KR%9pB|t-tpivXTlb}`F@n8+UHmVCfq&!q{_9;u>)w3Xrfk!`#P&)Q&>#M< z8$o|QW6-gsxc_6?Qs}UQC)g(#OozlEAicLuxaX?C;qFf z+9$Z5nsAxT8GPSArge!2z1-ECP(Icp*1b!e>+|2rz5%|Mh{lE|WA>4kRu372t)Xyl zd{WUzEP2qrmgb6j@V63{?K_gN`<%xz;_|Ji&#uPDB)?5$UP+?qu9AfIY71Ly-r|ns z_D_6ES2ca7B+(A|4ZZy`Xj!m-N``H>@=@cmuTePU$mfkv?;1xr=gw z+XIZ|$9(FoqI@m-%w0YKoZ7L9cJL-x`6BPIpm1dep?{G@&tUj+6q?>2R$KnVQ+Uhj z;Wu}@_qEvm$2`WHgLXYoUO-;#eNUp`q}uY9;YRS!UL$dIrZ@5V{9ZN34)hBq9}U#B ziaz!x)i?5CmG`yk)jWHO`t1FZcJ3hG(E3X0Z-)Ii|D<7rcX7r~=f`zMe2q8MUcesX zO_Ez|B~OSx;@o`I63#F44RD58?GQfkqlB48PDZt+xp{#i2Z>le^U)nTpPcprs zVBbkE$M7%2dY^c;E6QHil};6X*4)iO)|DCMWl*X=OaQVP6yME9m%APvY-X6hZMh|35dkrbPuLyP|urC;i#0v&EJ;CH#UT|{1%?0;7a8c^{oyGv)#eDr& zg>(=9TY->y4}U=Kf|A0%XNL+8(*8Z4_Y3Y#_6x>*Ck5MjofQ0p{`&N!laLSi0dK-~ zpZU4-c_RL-pw4UPj|BLREb3J=gtF#Xp>H%^%5sh`>mD-?QdZ@XuXHVk3!&e^E1bvR z=`nClA9~_GxWmRNTAVRE){jkofyC?p`SfRH7CNYPKw=KwrAyy$NR%a)6DnJ^3NXl!^$N~Out=7;qNZFXwfeGf!qNJ4?o@X70LJL z=+T#;t1CU~NB_5=|GnsnFVoLqFF4W7m7k@xFUswaSd`rZyP#6WXc*jmS(d(&>y-Zt{1fJ$nPcoVoy`~Ks7KP6qvrg;TEiaH z8kTw@?c>JKw}}MlQ~ca7!iMns?KK$8-Kt?@#>RdVk`TP~us;&U(E&jor1D_@C*MxA^Lescg+G z`>Qsz$Tvp0C&~OyQ)tS~t;7ohhW&bTDP4pK*e~u07wucv!FFEmR zt%jV)pJL*W{!#ttpL>8|ePyM)aL==GXMkJ!_D|n8Rt*1`_jde>WKO* zKgu)0o`3E7ZLcO_f8)9Ac8sW%Dsj2OsT z=J>bAEIxDY1G~5f`==U9I#1?-S7mBXFPrBXU(R#v+h2G%|L54(@}WBR^V<^m9HIZi?ERXbPoEPS;OXohZ-pJZBqMS3x);Un;d{Ph}Zmo0$d!EkQXPw`o zanfgjpLfs9H}Lf4+3Umuec6Y@7JUr)tDONJWbtCcYU{1wK2iN1Tc!m!131a>>6DxM zkz`mr&A9FGv`p57yydo#w@IK|epE+(r3+e0>~&$?$#K2y9>c$v#oqU(8OB_l(K^Jr z!9&QJ_IZa*2{nk=z9f(5iMcDWHW z?fl8?PnUXY#Oto+dE<(3ZasGIYOgWZ`}~R_mR}&FIT-*i?`@0T2^XexS1a_jFT9%e zO=ayng}#}LOj&*NGib5ieEZk8-XupEjk%_+d=+r@OD-|*ph{M+#oxZ!FvckS6k*mk zqejsN`It0MiN}{w#**vQJ8H+~OyzvA=Hnw~{8m@IM|>*{tRn zsu#VkwRgSkN7ULoT4yvo)5e+`zM8x>eTbROV|lmj#P3L2^T);PGp+Hb=A-k8M-E(X z`5b?~(41?UpussuaW478vMl(u@cm5UZrxf0jgM*WfhMiJ_0GR&T1guOw}*M!T6?E_ ziSF`4#3#zWLVLt7AN&;WZ9lTk`NzL1=We>zj3ujUQ;e-xH)PG9MA zecg2>#aHTTq%Jr91nGT6hxEJ6`y2R1{;qe~dNM{b86%zF?y>gR&GAu?8Xskn<&!Kw zUF=Gu#;;{ zeS@0T5rO0U6yFmpA~}Bm1Rv;0fPZ%eVW@ea2q4p5!R(cleVVmt8dnSbazGJ&|AK zkI33*(7We4Be=JMb<|8F*mjE%{A9Kf{B#cUqI3vtF?}nv$6Sm5oBkI+B#%63)*+8e zeW^A&@~C?&&YhLL%ex*MEuK`HO#KF}=A3<&t>2){)Njyc`fgnOmfa~ja$IywNM?1c zEgU+mw?(aS(Q*Ph>f5s{|8!k${DgEMM;fnX_;}*K=H7}ijU*@<) zzd7UP$I#}CFKm#Sh^uVpG4^C9*p@GW{ejtL%Z4lbEY;@LFR|e+QrpcrI)isI|MiW% zj`p`X?H?MSqP8Q$N#r++v2_SO9HxJ;U22Zt*X8Xk(+2HQf4TTD1A2wW84D&J;c&^n zTQ6O0!ylyHe+N6sh7Ch&>?^>Jv*GK%BK&zaeB>*_pKimqd`0-7HhkC!fTq}v6ir>(Jzr(6ksif&o8r%#Urx(a zCM`bxo{S$qQh;??I_tCEtUvp3H`Dt2l3D}keY0nma@L$ZipKn__&$++NdkXLL!K|QO>a6Zg@(quYva2pBiI(5<)_{c z6sJtR;`p8ZLfl=plD9k-@aEj%I_`>6ukJd=x!)zcwY=ToAzgNTrSRC{H(D*8aR24F zx9GU@V&2seoXHdOExN(3x9AeZ{}dj4W2v|3bcQHcT);g72j6i#0apoS!d<;Xc;LF? zpx&GFT^AqcOT9xl%)Yl#tut`uJ}mDL!W+SqJipR>Z|+sz7wr1IIsMHlW8YDHwk`O9 zySlI8hezE1DNnGMpmP|!-L(E4Xw-Qnl?$q$Xd}M9j(6vda&}@kuzJHLXuhF#ZTxPV z7cun>e!}^Rvxeo&g!%5=9OA#i|LkW?8`1eu-8W*NqlGj4Pp~f4x#>XPl6Vnm6}$%- z;?21L;TZili1c*M1?q2ARpA@qEhSu)wFBidFfIt;Ke~c3Fp04+kufm=-)b3lne}%u zHHS&=T4Kmd9nbMgQt$R&bly4LHx=eY1GPTn%dbE4uY3<&$9_>DVkM^`aJ=*i4X$gNC zzP^0dK9J8^qmMS*_tpHj_!1xXoWPfOqJ5yQ-U~Ys?YbxF|7%*p_-ERe((M2LfabQ5 zFPrc79h>7thJDC#8Zv$S-w93n25djbJI}he==@FYIDa?ATt7YS$VpB-TGzYbG~~&& zAr|!xwy^gUX74Gs&AYLly{9tvp8PNLVy~%pP_V5ddN;g{F4TL)u|?a=cMD@Xw*@2Y zGaccbxtDIrJX>|hx2C_j5CC`Ot35eml+)akaQL*T_`j@owypH6=95V8>1Ds^mXgFA z(IR}>Z<=3{m`(idcFt4TesdR!Ml~On|FFw!i&mXeHw;++v3OX!FvJYKU!Ln7^60-e*N8C&g+~@ z-29u}BTEuIYRLPR;F3NZ%Q-3H@6rAi&MVd96ZYd1t~ZPg1>kDoOl%8x@S?l@ChhB~ zqm{691p9I2t0wU-GyU{Azsmox?jdJ_kM-i5O3u$$a(=#&^YgJ>dykkq#OjM^KkE#8 zl>5lN6=zPt|GGZPedJz>)0aK?#>TyF?=6=kJjB&r@$f0=h>j3VSW_j86})w)tM%L+ZOz?@H4<-H%UcvbF zE@-ckM62R1*edSARUvoLnY|ircW9{Sm7-y*O~Z0u&7s}cKKumR>g&}o5ISBQ&bhed zmp4VB@75c!kH(pQCvttPRCY~P+ZNVKl5x@VWq;%G73$WU5T*Q~QX}z_=&bmCuwb-g zkaP8X)n9+^cRc-#nfUxg6F(pO2rp`1!_~fgY?uIk%^>|eggt=I`I~GoLZ@qhvu~y_u@#n4t|G59w-$la~VD7a4F7&;W(fj!9 zRX3S`FIw~Hd7S?jJ@Q?%4;*C;@-=jT31g>)NXvK9z#Hoc&%j&2yR1$*PbvM-JCwLj zbcv1;o`(J3gU!9rVn{Iy!A0Z=5tOkw$0o--?!Mea@8*02-kV#P!;v@cg6K~ z^xmIeV*2^_K#$|+FE;b-v37bWF$((1`04(J`sZxXtM(<5V_qh$GwsdP&-*d6)_e{6 zzXE;XQ>7=+gLxkQZZqGRMvdAM-HL1@*Eb^PrVb|UXYeexn!e+Fr};O)`BtyJnzIjq zwqcCBZy-YzzQJv^S=@_W$GD=utKh{q%IxvIx@T%^J!+4wk*={tnby*t4HvMsaF4CW zW?EzG&?&~hjIEe!Y}KCpuYW)FLufX~)^f(b=+A?<`a66U^3^0W9S3U2;2HC!`5$^&8xi`ZBcYyX4Ub3!?w=p1Ii!B;oL6q1I(!= zF6Pz$4X!&JT$Ddh;Yr*|Ji;AQ*%Pl%PuZcZ1GM)&0N?TD*z=cR`&^0*bP2XlDQ6|d zUi~cOWJ4YUD^S)<*0Lfv(r1ZUZdt| z&0kAyfJex>&d4tKCjNW=o@%&gD(`3bx9M%OalE0ij(ruKYl$67T6Yo9XUh-qMkKsN z@o}c54{K}gT-x^#PKz_ok!O^k(^p?%=?i4I?LVBeyVkjuuUFDBXu<6P#@Z)zpHWGb?@xKr{5&+@C!MsL z^FO3%o{GJ}xcUd@e~3@vUb-`%`INu!iL;&bBP6g=(!7I@8e zL)(E7%(?t-7QA>PUUbr(CA_7t`_lO9(W@!F`4MGwU*S`}=6Xuy!KwZFa?)C_w9YY$ zZ{x>gabJOb3+T+}zCt?RD0gm`X-?$p#``8^Kjc?O-jWZJD@|Ji7<2yQtMf9}{S(fE zf%C7xo-bGjm#Z&+L!Nkf18rXDqo3XEU0WbS$%LCS33X?t; zZzGfuZ)1JH0dIdy{6=uhaPZ3>ma?CTo@gMA$qKJ4obJX)`a zX4V-~1;aX{OnBy(Bs%DF>BlR8Q6GNFJgGIj->yq%tko{A# zPCdFNa^U3Ru?62PA6xe9yqD^RzPxGc&|=+f)4JlFi><$jqy7CBZ1rsB4YSPrp~Wxx zhVTv!f1j^T{yghFrMJF;9_M~fL9TVb=QDVrdpQT8=jtz#8_LZ31{c?JRy|TT=$=jM z1{JT_ZIxGj8$0Uzb8(FN1V2W1Tjme4%J_2b*)$@jculFdqs|x2I(esHi0Ygc-)`19 zJ^mhbn&qiCav;07fHp?zvZynwc+EPiyz2ZRb#iWNy-C~rtm1+);Cz|XlUcmR=QHaO z+#|r@1KW2P8!$5eonk+>b>zUi#btaS=Wb*HdmoVl8O3Fs)sFZw?kQMi+2rzRMd}8| z*UYqV>Do;#j79Q04I-L$mJw37^)(@-H^}ro^A64NCLtJ&?Mo@wLR?J(e6@ z4{U6wFZfd7cgtUz@a()JyZQSjkNP+x%KbX}LiFBj^D?$`t2Gwp^Y?!#|04c8v-~1o z@W?jGokzJ5Ryol&1KMJXwg&zEHGcT}9?&A*#PWQ>`lhAWmY$mAHgB+XtGA=BNlsmP zc3s!;_rGoat3Lf*8MEwpl$}l4nO0fVcbV$rZ!pwL*IgM(R8e27g1D{iVMnq5jg}mvHx2jK2+|{)%y?KX#ur z|Ej;Z$C|Lt_FHm&ifCMozLO3a8A|BAWA&HtIsK)-*>FB>R+{=N%KCAP-CtqBa*n$` zeOY-yFYGt&=v(Kvt-kvFBF?_@PNLPX>`@D@=d<(J-V8N)1Z`!UUzJSD*SQaP zlU~{Hd7;Fo#P2$q9KFc?dvzzmWzPT5*rIt08YhF#OxuZ1+4iIU1ze)jOsC#(09fiM zbJFNT?%|t#Sn8xD;hoCUe{ZnrX;wsUJR#v3V7#^I@Unsh)JY0?4osfkazMf8~C-$jq~fPB=_1M)Si?#TQ< z6_+Uuy{EHUX4-*27f0|lH`Yy$JN{_tWPB~aUEA?DMBHb#9-~oHvGrzpUdlB-POf~W9ZwwD@ZtKmw2mF1@u^p2=nv!EV z7o;}z1CzhTqVZmNB6O@4T#EU1~f({&Hi=>I!4uTIN^Y)@(Rd;R#;P z-EjHY>q}FA+Ymq33bRl6+lI&1r8PxISoWL##_2BK$<5D_zj=wLVbQD$i(^}5gLxYI zMVZfM5+?pJ?T_W5BjlH=u=k`kK_l^#83S?PL}P@yS5SBKf>7cja0<3Xe!LO<{XfMi zQ%^j8;L;|+7Ys1gx9H3v_x-l@$B#i>_4pIj7Id7wUdV19!drEs%e0XzZ2!VpmVd#q zk%xVo_w|04(Xm!Ig?Pz(R$TY|1``(#4z9ya<`;$c=g1!Cp1I|(IR5V{s^9xiCYH3v ze-7i{Zc|v}f;OcQe@p8g(Wdo=P4`^!i?;6p##wL3S8JY$C*3J8xl)@Sqs=D&xEEmZ z;}q_w@Mf&?F6n|F@ACKZ{vAL5c0G3hex2gSpNS9qpN#%_tO<6(k9UY4&yPXKo$b{*-T4`-SFv9>H!&iu zaOCO6l%w?DP|E(9cUZ)W0P82e)DF=P$(*#)Wk@e_`sJ_>!-1_i~H-?j`G^Pw0QO zNq8gw58!QC#ojgdFmFPSFh_6rCT)xauuo36cs22`{@#Q1)sW^*>6X5dyw(ob@8pGEycIlZ5H1q zcH-OLc%$s!@$JLw;LDFve2Ws_vfhfX#ozf?<-@lh)27xJQha-tbT{Arflu<^@$GfW zh;OnJ#e;gjZoZBB3VdtXZOsKQ0y`9beZUtV^G5#u;v|iqM~LTqlpHfnV-|h;pEk}G z`O(p(5#qb$mm%*NJFj5BmA8iY56IITW9p%^LWv)eCY$I!zWMZ@&c%0i2gH59=m7nx zKK*E?^^QczPb@in6@J#k1MTBo1->=5yediUSK|G15R%M%$_seMbh zcU^4LJouCBI7HT-#{joD7_N3sJ^kf6B^#<-DOWSape~l1c5SAQSn( z%ifdyqrCq1S8IfG$eU-!7rW9&l3rlP-DA5i>5>ESX#x3;4XgKNI_i}zOTAuTPbd9r zcAkSz^=6QFv7J8CDT^%?kqv>Jbbz*Z*yfC@vfh?$@hRyV2dYbSJOmy3yAWsDY3Dk) zWS`h{L@A@XPqXtnY;2d#dJh=ky9a#ZY&iM!RFC4a>E)+VT=MdNhp1ogj$fLV{Z-ipvNHZV+$@ zGLC~fIx~(#0^`_$869Lxqu9Uixm7p!rqc;L&wSqJ{i8p(Pp#*isycP*RMn|8{oe`` zesdSlr29R}O4jj0>z{!|2Nzygc;7%hqSq(sFei`KYFs9hX0Vk9Iq+M;<1H9mFCkuh zs90xB1pi#ZdJrZyNwF7F^nDEmG8W|j~8l$(c4l6zDAs%5`f`OlDbJLg!Itz)lJ-t?HC#QQ_+ zZ&*G~taqf<+qbRnn8_FkJlRi|=Y{P}n=(<(SH4DHY>l)+&ey~q~hgrAkxts9w2zQ}xO1Q`rA74`zQkJq= zGydUs)=J0tFW2Lrv@+(e=WF&S_?*dqYrL?Isr&$3L|0!z8GrgScWH9O=XdLS7r}=t zzP58tbC}{?pzrbVZl1|IegERu4&I?Zi63$2IrB5Xw<-A@-k7xeQaC53<*tKwv4z`- z&8D4$c5dVh>8=r+FBh8yZJUyKZ2Th6Pv?W9X`kXgLwE*v-J~q;HJE4Ux!aH;`=RaJ zZMcBE#d24D*SJveKe@NQ2mg`We-M3B+Oc7U)?-Ixb$G|LxP$wS?VVAw`sDZuo3C~7 z6`nD7D<5r5$y?36tuJZwXzg7*-{NVKq z%W&L1weqsBHPZ4OkjNgZyoDW=zqhyLZwmFu8FI6qi9FI{>Uen^_)+AM8dD`@9rO6= zcG^8Kqb*+l4NeOkIBmPRW1L2|gOj)P7&!UV*goDf;x{;ON-gdfr=IQLRD9zxaI)IY zagPMupyPXU$YMD=IogTew2txn_TF~JZ&6$Pired74jd!zQaI0a_Hy7=azn>>)wP3H z;JUVWiL8$7^Yt<(ABSAoi@$!W&u_cBW1OA@r=MoL&0fEYx!KJ*c2CXGtwv>dVGQRS z?R%pBD=i#{G@J5&74yl%TK;nn&b*Vb&^^a5XJO;;>+?*fHh1VuzU}U0w&xakXX&Ex z8U7e!6#m$bR`8~r!CSZG_^l{r-JEOr>|)Pf?hVVCa=HKd=-(pm4#(A|;G=G{oa35r z+1#vmFVwx^v#vsiIK^Jio(5cfnp(H+V!ld|cys_ZUzR1FuEG~EuO$&KxP42w(_TLW zo|)$Xz{j-DB~v%QMLJy*dZ1;WOQe69_PP1Cz5fLA3oUD)#k%Xc=wiE_IB$i|3YnMG z`^bl`%wq0;FCaec_mfZZ=95=+rJ_@8Iu2c_==cykL?`-@uc;G}-qMK*39G)s)`{Hd zN+;?8PNEYH;A`nbM@TDnE_6>*4;GzR;w(G2;BgOlcy+jwN1u^b;%_Hj^r#HrgY5i%iZ3m3zqr*ARi*3%Dv)Ml~eRNd!pd99Y@yRyOSTIr65Wau+ ze6oQvtt;I9mrQr}pHR@*S2q5&#|H@>DV>eA1>$ptv!U`f+j;M=8Wh7hx)Q?WjpMt! za<-{6c5cr6#U361S>DIZ0bR$i!TGs`@!r-U-v)Yzwk3FzW;S8`2DzF^eOaNs||$jPX5b!^@9IF+3mHh zvs|&sz64L-+7})b=4^!*pXR~A_&b3f?sc^CjW>n57oxAp-lEuQkIv1de_ljCy^#KT z0sVFyvMGnNVcECf`@-~@8umVCHR$;^;Rzbz4*8+*8V6< zv_Hxm*0;s@p_De?d=L4wPs(C^QWldp2A`CYR?3q%nQq75e&PBYIg_&XHPXvD)N+Ua zbMd8Kc;Ptnymd{~_~gpM8^@XXtE0xBR9X0d%Kv!O_>(IOpI7-Sqr^MkT07Q#*OVca z92(Lrdw<2;FA^WlzV61z1IRpNdW%o!I_ffgLU+?Xq48TIX(f&26MBQB!7fBwn{feP zr%&h~fW;^DMB2mjxr6WE;-ScypTZ-}xt?*>o;*GtJzUyebh!69pC{$Yx#Wrv_GxI5 zHOg<9^O5T6i?k7p*zHsk=P~G;+?iJzp*s zPa6MY^CY*O`lHEn3lEXy79LI-|EK)89~mnAD0cAUq;~K*9)7gY$9q2(e|xo4-v1?i zXF2Hm*WBoR@P9<#E}OnTw^QE#C4J4}_e=NZwe8^ZKcep|o4%@c%KN{d@3}9*gZ{bM zLEk;?;B!3mT}$3byR7KBd2V(0rfy>&bC2YuyYW4qG?}ye{q|-te_D1U%l_K(t|4z! z$h(FHbJ$w$_$=d0me_KWI4>^W6R59*aw6XxbWx_vWzpV19EOaMykZNUB>8K7A-Vfu z>FS5UO?Xnkx4EG0dae##>@a6W7Vx!f&HYRtQT=K^B+sMlPjkLxZLo{6gMG8w`sdYq z!Kr__%k)9L2Orei&d9DQG2f4k(dXFv*WSa~?T=2$uBqqF)Oh03w0`GBze`2Go9^~y z#FnI{*Yn;c^L%AJZ$3(0k1|hV%dV9AR-mJao!q(JX)bs#@a)}2-^eg?4Mf{W`X@Eb zNqnREA2-mI4Ro^uBU;ay2S{(unY=A#zN5g~eTC?U&N*|hq>(vO$9)AXX{JI4bJoO@ zX#?!=+Yw|?6}+DLT1;;-Xc?C@T23v@R|$r@YQ?Ig;VH$(iK&*5#Y zrHc$>-Q~b!ZZ%jH@Vn`kJ1 zqYw3b(um>hCDH%of9LYCn><5i3m;ZfhVWsx)YF%@TZDg;TJw1&amE1lb>rc4=Y(^D z@oo8BDftI;&S9F;1r`IdcdvATM_^olxeNe@0!CIo6pr=hwy&an{nnI?#ZNmoi;y{ zui$Ipa)rjFC`Xl_M7jGXwU5ich->_#l4(h_A?s-qm+z@J5|@0!68~u9vS7W!#SIR> z1s7@ez7hDGuJNhMRQbfl@<|8y)Du_qdmEqkG(Ov-;ByvX)!S`++`m)!{GITdH9r60 zzmq>P8lQ^uRX#cU@nQ$~JWE{Thc-S{8lM-U;Bx|Di67edELfxPd6V#5jnD5R@cHIT z)pxQoRNvVGe;(`rpK{`gw%YjIqw!f71)tz-__M{v$6cfFd6cxWUn=bth`^^#6^T;u_zz@wrOlQxFB8_rNFdT^pYT&nkRol2+_Z*8C-T`-7haUmF2m839j< zfG>-HCpclo)~C=Yd&p+_z<&Vl<$yl|w(MInzCQrA>{S|L@@L>~?JhJX+(GPgv$$a;ib%*E&pR)!Q*_bc-oSDV8(n(p*=Sl@x1q58@7q$^&}T9$XK?nt`o*g6z%UbWJp&`q50K5w8r zS>s2(`yAl>P^G-4(8z950ZZiZAaR2 z=H?YrkJO7UBYK&#FSdTmynwmbdpiD5)37=B_OFa%pPzGJX(egC<9;_<*8if@e~v9x z=AXK`eQuLEVm0>aJGqD0$XzYnPKyMVOL@hf@7o@0&=@*e^}86R(vzcb?_8b7?x zUR@*aoHU^Kg4+^rML{#?TI7swE1s+-epowiX~!8|+N6JmJw`cKVDV~^=2dl(;?)*- zHC*%R5cm}p*}OVAf>-;9uPal$5*x;enpY=9;ngBZ`>4&Uq3ti^bys@x|G{13n3vk#HTJ%Ab&a%@*qh~^G4_@G7;KXN?LFgefAodquCee{ z?16H&B+{3$wNCS%l(jKoo~w*Am-+r%eIeFN%BL>p+n31R*fgb+e)1>w#ym297{A)D zZc&ro8!OOzV`sMB8!KT=>bg{oi>dUHUja8>qsD{u_afkmQ?fRu(l>(zdJoIv3tbCr z`p%_pkrk{R&3fzaROy;XqxQfaHQ%kNGS9f$`6rNH=GA|Jv!C)=8}>H&d;;eoPjPLG z0giQbqF)+idF%Xx@~$7yC)E`@VG(h~qYeC{VB?Q5UfYap@PhaBbBxNpy?XW%S$M*U z114S4&zJ5U>z(9vbe&X+3jlWfs56btu$n6pEqH2^eGGU}qcKR42KOvp7aOWEN^={vsl5r1A z#IHhWXEnT>XO+tu9!SztJ&uSuj&a#eo0!^#^UcToKwP^VfbDtEo7gmgfY!IytO5}d>b=m zOf$}#lkp47@2{WZ6Nqtwj|n}d<7#gX(jRgN+hpx`Tkl}6Fz zG4b324L1W=SJthQSyP`8H5+<^x32@B;4uW;5y>(5;+8ZGWMG_e%tO) z>6$ouug3mk=GZsSw{Oy8pSX+3FSPv|+Wg>AoaWltgv}|1G4CB~^bxpt&n5DXPw$dl zmt-(*ui%W?#-_o9|MQZJlJ73b2*v})0sjDe2)HM3H`hifcNygu-rKE4_AH85yEEiG zLA`aJV4zV}>frB!DE#ev4E_!gKAmLqcL1=Qdk>sr^mfrNxOZjBLfJ2q@jH;Q5NsoV zA2ZuZ?hbf`zsT151Z*Yn$vdoh%$*MYTJ2xfhQBLTioIvE$W{k`50FmyupHX%Jkq^# zU7B&lCi?$w<}SHw()`4VPp^u5<%d5n{@{nJg5Um7cx%o(yzOwWi?Fj>{_{s|CF+8pL`ZVc;ubI%YiT8fG#j3L^UhbO}Gj`>^*^Asa zvuNJ?SzDUt9fRik1^3=I%@rn%{c6WkcU^`G&qi0Dt7*KL@Wu=^U%R3G4l{jx?O4LA zt@Q9}2H_&t@x75|=?GT;EQ6l5{nLK4rI5VNIqy2kcJ{ZcfX(wT@J8f;*rh~Xy?=Y8 zJXmJRgF^c2DEiD~?)OTcVIRN6zsHNB&*(n$1pKqgvii*F@NYA7S6kVqe0z)%zI3(u zcQ$a{*@{0?;oIrJ@L?pi082f;Agn0WuE!m#>e)j03P(Nv`Bb$}b>BW`2|in>XQ{5|ac4c8kqFOnv=6Y< za}sG1PqFLS(nZx1AY6O`SnczLRZkyH5A8o&*E8Q)&u&-cH_m#1rJh*QG$z^gEbyp$ z9wOYlN22?|+q#~tUW%S<=($1H^DAdP3tg4lo%H}qJ^vxBI>D|d+fen~PTuhjdRFUt z5_>3mcF_;U>3SwO>q*9cjGA7&icZk=z_&DA z&)Lp;w(|amvmRin=WW6g2io;)38{K~5xC>CFFk$xphJ-YVT+fgiB)@1*{Lgpa@`M)>i>h}CtaYYO7{`)-B$igd{V>{j?bR=2;Ueb|GSc(blj~p)4d6NtCfG%mJDxy!YBAb zYYATyCI8EkpL7B7eL=cf;Hg&rF!kdfq~S{Z{}5gsCI8cspL8j5mx^>Nfu~sc3-I9) zNBA`MdkJ42CI3T`pL7B7lR&z~zB<+xRft`i7Is6_gT21o0@IL zJas*3q|IjQxVic(`KA0!2Q1|~;Tt31sS)rE5%4t;@RSI6Vg!7t19r~EXAv%Q@eb^e za@Xw&jU$GwzN7X34E+^7Cs+6btx4n)8Dia0%hhSl&|fL@ZOY_)o7q+ZZvgf=;I+Ww z+eyZ(#J>t``L_`GCE$^c_yF)(4)|H%(;RRWaEb$d5?J*M}NEQUDo>CQOdzL8FhMj zgNr+gVr5T$BHF5u zaxM64%91<44cq~?!sNZI=7P5GWm$H%QJs8@4daT0enwf4wNg=%?`_^OzPE|>(s&=I>EN#O~5B8K7~vl@qfquD`(xs@402eyA6L54Wjezv}|~mPl-p(HRNpk$uz#w z`!>-#rlM=!4xIH>@5=>V%{+G-u=ox+oJ<+~11tsF74I!+`O_Q$oim2%KnR* z%d$y-y)H}Ell9m^0z-X|G<8yQ*eGoDa%a+_cX^!l#iseurJuUbI{EWn=G-WFyhl6j zlCeQu;ur7&%CFdA*OvwCJXbFL%IV8H19+LN>2@nS5u%|0`FpS!B4PQn<0)3LbMCm)hGj!j5GvZ~9NQ{F^l4XV&$!-FLnbzq5Z+a1wo|5m@F- za}CX$`89YyA~;Z=xz^M5Dj9cm1`0iJa$Y&u>CuK2RIIX;tE|Gok& zV<6C_JR{*mV_$&1mDGKG%zl_ozm+z9Y?IY52h6n4AI zs$~yiCFLQ1V@8SJ-?&orh5VRd>}#Iwp0f(yCn?ldKhSR5(t)h$DMQM69$WB1jf2&; z>9no6rf<`>$_C*RTKzWf&j+r)SMkqH+oo$?7~tyKrqi)rIfrm3FU}x-go76cG#*d1 z;e~Cdc$9t->~mtDgbGiY3wzJ;&>qAd(l* zpWkWI9s-trPzMcJTU5Gi?D_i%7a4URO8~t8cb> z7?61Az772AHtKnkF}B(a?_WDzg`2WM`rDI)JNwmR?eL>>2mEm6_mfV>Mk=%+^RW|M zfSqU@cA^~Sg>2>rx&QTnspm{dW-nu@yX;@=8wB&vRo*emip!Pk+;*1Qi!k+(ImNRr zeWc)2qil1EE59JwC~F+%$~VX7PhrJh=8#f+DqDT@-9NM)pO+t_k6tBwDz*8W4_xu8 zmc5L_%O!qAFH;tajq+j@f1BthBAat19{%^z{IdF4b~}81Wk#gzvgevwIeT%Vr|e(! znee0TGNXj=@7!fscNzIRyBPa|Kd@ge^67ws{sT7s_eP<=*D>fHAox$S>F+D_1#J3z z0avf=rRatJ6I6T){a(or{eRSSS@gTxp?^jP^iLQ1r+doEi-m4aS;Y+Kjy3jeg&#t< z-!ZO+6K2i1KIlHI<)I~)Kjl19^f_1Qhkxabh{Wq`y1x*3wW3?>IG+N$9#(WOKzIBD za9x#3FYW#ju+Y6Ug6{W#$2jD)HD{gOhHl6Hl4H(VOF9`(lc8x{l2KWGrK(f(O{q5x zz7}$aPWFfV?!*k?OW-C~%XpY@ldFX}4;$YNVp&~I5& z|59*lD~l~%A-=YPyiQp>FM?NdfJZraW$8`-yft!+*l*bW&5O@@WP&eF$%LYAN+zWI z%^nlmIqPr9gpKeZa?YLr4?3E+CV_X>1e*t!0XIHukBJGuMfdjVWvy8*Qt>TgB1d5Q zMz;uh#{x&2durRzYs-Y^u%qwnVeBiuRgHn*=Qf>7KDX(dABE1|$Dnf{c)G^fboK+T z_SwwNup%WRGi>x#I^v5=x6F#=- zydVmlU*adMqxRg%djxgo+jM>fTvTDx`6aOHHr<}A8$MI zbD_|Q97AXG)o!{ecs-y9F_#*mcf=%as;G$pJbbb$0DB6 z)A=p-(8zgo&N1k$5ITC>bj|~=o@~=O2RQM9UcF3PAG-D(D!zrzGGL)IBZAJ-cIf=` z&F#yh&whf=3!$?@_urK^ofB5tbgqd)XXY{Jya+t&Vr)8dfQv4*>C6=PT-BaQwC8y$ zzJ<;)z(QwO<8O`Av)iHb=?>_8T&Wb{3=VQ>>9Xu=CHk~oR zi5J;)b{4wMR`O^U^2nv)Tj)G`p`!Es2s#e~M;oWV?10V!q4N}DU;Q#YK7Vb~xqXRE zXGRn{x8onJBYE^0cxL^m<`1z+e$2A}dkt6q5!OPo9{LdathJQ2#=9E&d^yqV z!)gsu1b(i6+w@%zT$H2ebJIVs*7zraZ)0}v%S8??!2UFeaIs?^iDG{`k^a3(JT>0kw14*w`0^$7b;OsSFQ6^X?cK{m&o+L?7khQCd}$Lu-)QUC(QVq&K1Y69XQS`VKE}Sy?btLdTVXeF zv)02_e}78elZk38RQm|efp5j1?Dne`c(CGy*fgF3u6C<=NXGNyz=?xY`zFEr<-jtY zuh;ln^U%Y!vdu3m*_ZpW?(5=LYmIH2-n^}??3)O$ zI+F3%2<^YOc{N3N6Q_73=d30Im*ej-9^74hm2Al7ZtcZ{JMEvj#7FA`>)P<<(Uo%6 zu8KXSbEOYp*E&`oSPWf}ePGBj`oKxxSMfNd1;n~_cGT*~1Y$s{@WUZq7JPp1r1dHqpVedU&?&1l1o~@vI1*O@n7&DV`01 zXZ{NpOx(o#>=W3-+&Spj{q4K@w*9UA7`*cf?XTIqyHDW5S_eetlmk~c_B3?{S&QET zTyaRH7nw6#(!)Dn1n*|H!@Hd&$0u{9YTkL^T_D!C(ccAGGsri`pXb`RPsZQqWAmdn z3O~+220z9@Pf?A{51+u_+x$2mxbDwA&ob9M(4P+M`p)LZNMPZ|Pnu3^{7IjQ)|Z|* zPJRs4{MZCdfi$0aKcNO$EcX+dlH*eY$m5zbe7w)mKQ(X;|3}OJeyK8MXOOr2=a?Fi z%a3OB-qM9S|1TW*v&oaE^IyvUiFW=1$$zi6=FwfQjHSmp|4oR(`>((1cpQI|L*IJJ z=6$2UyKUZo4ea_zjboYr{sNr1%jW%`fQ9!@MezO;;Ap%*|2TQSiFCrpLg9TEUxxUQ zszaZD1DU z_kY;eyq@>Uc6K_xx#aMNZO8VaWAL+5`1Od*&)*3A7n`4pgnu8ZxnwnS=Ka9cU)ubv z02Y3ZkKpIrcK8`AKEAPCs`+^W{9MmmvYffZpnfx)`9sFmuo>N-tly<{9b;kn`G)ul zG4RW`4>|cCqdDO^-nF7lM7P|LsAT0%WMwdZ)gZ57Y?QN-!6!LO$63kCsP7-b=e%Rf zjHjaT`OIVRc?^82d(h_d2!TJg`FtjD(FWCTljyg@1=hNY$k0=Ph0ot>{#i03u^m1? zbew$dt@->rXbL>!OHW8N_Ia*Wx|nyFt&6?*h`q;seH8k?|7*wN_HZ`z&bR5`58U{1 zFLSN1g*Q#V2M)M>8JtzgXk<+$>wrCkIrXrALQ^z7Y*HIqZ9Qx}??@kyPLUFYrZwCUXuZTb>$G+8vT4V}^TuqR0; zvS_TdDPzZfim~zZZnODtkHG6~KFkKLenII6(zkC1u2^UD z;WkMRAJQZEFuffEWsY?6MJX3L7e-S!$? z_N}co-qI-iJn0zxJPm#n-DvYOMc|igex4-!ds6XJ=D1=NEtHq9^2v}v9kh30R0gQ6q-{QE4%hThMSHT_3ZoIM$KP@3$Sdi;uzcrO=)@$?j(l z3H-R-&lUq0RVeu-{pzt|5AY~ZTj;BzDv>XhW-nI>-2dMnUk}D zh5pzG`p*ZBc0Q!04gJy2hn%MA{}`Iyz(&@hPja4F&Pl5C%kkU|?_c}HQ1tGku9c$a zyd~wM)0q7Yon{c_n0YxbUOl;O-VY`30+shA^1jVJk?=S--yYY_GdKlNc)SnaRUPpd zA-l}wvw3__;0J6T?*mSprEL|A`+oyh-)Hx+CSc+5Ynpe~SlSI7jmMYkboN+^&g0KW zCw=U8XcC$O7uz&XxY#~-loW;Lwa1|OZE!A1w`txWuwTIAS+j9+!Z1$fcelNYX`w2J4p5;45 z?4O*cx6U|~gHPn%Pak-^IXl|ki0Utc;8Eg9Hjn!YJVWs~8$Tv}fSqmM1KOkYow;pz zXY1F_{6CXU#?&fs?ax@2JNL`+d)@3d&MDWvuYVwo=v!6jTUF>=Rp?ufz3T}X`{#YO zkGS&no=|Y+iIZH+t;yhX=uBf|n7izU9#}Pqd}qp9?k(&+Ul3M-uavu(A9It9-UE8y zv$TPCU3XK4j4iJx>vxBeyVW$XR+Mw=a(6@IWh!Ncr;ko=SjZc%;QA}l2f#Bp-<9D# zsbXRvt9oW|g0az$T`Twm?@Hw$ZzXNAt1`BZvB~{HQwDJlaSM6nzMu(nukc-gPaQ8l zqqd7rqdogwzneaJ`46e{VxP#2;fy2lJC^aEk{J7htH{_1;^RfqRmZA!8$o!A;F|!xtcSVBKF2)YztyO01lNCqWBC^TBUi>q z+3aQ1bMMH!f62SGay~ql_iE*yh}>nYlr#yvzZT|RH+M6C103xPc`9{U=jZoxhhh>w z;RJ7a=e~}9F6Xl4ZcRsT-QP*s=3DpV-w$mwrEZz8p8DBbgWoFffpEO&*Is-&eT47T zg3iX-o8epD(ZbIbgLnNo^OlM)j@WYU)6kFh^55smT;p>sc&U`NYc+i$!PS3n12|## z>YXqT)%eKhIhO4IJI{mdW!rQ)m82j23RJB23qHbz#l zwmL}sX4Y1lSX;Hn*V-t3AaGoLpx<5tzp`!nKtHn&l+boZkQdm2`W{9u$URfBxpm@u zCw!JM){p-Na^Mf(DR*-Q{^UtbxW}j&6!%uqu&qm0F9^odB%;n|S z`VJsp{avz5zry}5u22BG;FsvKa(_?!+T=w7K3W?pR!jvO@Yh8@5 z$6}Nm^564w%RQdNdw$M$$|2s0jc#$V5*8ekf*lB#N|7Yv4Gx=KoN9wS1_*(zR=&(_It^eohuynrG z|FJskJiae#+F#aR*&pYY!u(#SD4~pMpcv_5aHGt@2~k< z|0{La!+fp(_+K~iS<2V?ze0yC=WG36sly)QYyE#phdsg9`d_8Pp5|-)e@2H@^R@mz zufv|@d#V0^h5lZ~*ZQBY!zS{Tb`jpat-sQq0r6|VIJ=kj{~h74>NxQQEoser+TW?M zd5827@}vNdw&JB9q4&txyoGqtA$x2Iuh^;Ub?TVE((zr0|1wJa^*a7%^q^0Ok8B^Q z+kb|_cOq%aNHas1Gn4OY8mF}uZbDx_mHtA~*AgDkaWYPt_ysjAWfy;|WX^e{HSzv2 zJmzo6ZIcfUI!9-e{c|4o$mI32&1 z`1_;8chm7N5kD_Vyhq1BOT0BMocR4XRkh=j#NQGn|9&06jQC$giQlW^e@*=LQQ~*& z`1^>T93}oM9e)q;mqdyGOvm3&`~}3{MH@2j_r1evOGjJP>$D}LwdAFf*3CM;hhljS~M`9e+0Q zZY!R?Y^@vo$o>N|Z=w^3ZwVRe3&~@x8$@R^X<{8wk8GE9#9ZPf594TEqK+5%b9uvo zb%WTj5?p=vRx{_Tbwj_}P42#?-Y#pQ7}i3(EkD}8wpvVC*1F*U>xN$fi!Nc-=~$25 zAULre3y3UXJ$4PS=p<&kFk@5vzhD>3CtTJmZx^XMs7_vAB5}x{?>6H@&C2WO3m544 ze-bZqSY%s{)$xBP{*@^4qjdZi#J>IKO;)~K^^}n@i#?@|F@2Ri1>mi z@!#n92Z+BiO8nP4{$AoQBfh^*Gf;oy`JSZzpQ^tix4oT|jQ^PYClWqb#|`B>O#e^T zU#mYm`^_d@Zz1)bO}bQ__B6hy=>HNXdb;q;@^NC}=Pc_bUDhR(CG|)0_*or)0rAoD zKdIx#65qqh4~^!yVC*gN$_L_a4DHmRe9|&)vu_Fy%DXs z*U!Tz#69u8rSm-lXUh5`wezBtsq=R%N$44O)sGuxU*JuJ~4;!N7iW60oevM27Z!LwIS_awt>#W0142eQO7krtY80 ze!7~yig;irf8yHVPk9IYapw0(UxCJFp>GFsMhb5{@8PY!RLzf|km@Gq1sOvGvZg`SB0nq6WQZz#6pySk~w8BW?S7Y|;Fm(!vk%+Y(>< zC26w$Zu8?aU?)AFK)31BRQH#|8pre7@WZj^?&xouNGJR#H0kS`CjMg9(>8L(d<3{8 z_>9-w*nI^z&ZX=-#G7@infpT1x>g?E)HUNuY+K#we?i8;pnr=kb5QN8lo=v@F1F0W z$wO-zz872OKE2r^?6u>GsiZ?<1@S@WrNr~wskRjAHrtVwCTf)RObHF6OBGQ-7%%R zdK&pn;G0^qK0S>v)~usrDWhq>FO-RGtqFTe)A#tS(ecZK6I*FXYV%vvDSVPW;k?q44bJ`FywcPS!oTsQ#T#VrcYJBe z2B|+5yjtq-WY;fqiN$ltlgC~%e#2u^v3FZ}r$d94_gasgSLQHmBiKgOS7f`uefidO ziCL1^+czhKJyiJmO@YnR-++H){MU~7`=iAF$q_$K=-1;yWcFReHP8>F4WH(}j3Ylb zW|4#S=zB6RHy~e+5NFNGyQ= zg$nSuoapke43Ng%*}w8*DeplQpH0{{U>UOwyy?1joyabuHj{C;OTyr@*!nh0otLSy zr9Zz7?A(Xl04}C%5!#rGWG_kRK3RAd#wQUvshW!%vW0MSE+Z~LI^o%Pc;@foy&_?o zQ5IkvjURY|d48&me=qhb8fl+1$S3<2GMCGlirvf$-*M;Ixrb3nn)&#|xrR1d)n$M= ze$4$2@(-2#%x#AO$bwMWS zMaC3ocgtwlt?=w5`S@?uGws6iiSJ21bQZt(x1;U?|pY;EV}8RM#|KoVyl!ee0bzb8cE-f z<2Gsk>;`DyzeU6Dtn!JE2n`PXYBY4p9P#Blgdy=dPU(qG(T| z@1x^e){>4fw_VaP=58jP^eHJv@G1s&wq2c>F0M9}?=0r~u&2w8rsO#E<-W9IKiacD zdU8B()^|4j3z|Ce*Nk80CsS`c*`YU{gpNFo@x!kZ^`O_GBh%-!e0&riS4u~={Onn8 zWhfo_>2&1KNLx0p1g?8r$-vdf#z%pjezKPe&f+VL`jn2W>I+}5(lvQ3xn%3e&io66 zcJd~J>mhg~I-tB4n9yjHm23KP+0V9Qzqy}Hddc(qw?!{*P2UaBr}W}T`jlRLqtJJ{ zP2W`DqDK_G3%&S;2>Px8zdIcCA-hd}e%OXS$5{w$-R8K2_B>7BUT`frBWt6dd1V{( zoV<(B$UHWkvOi+J%ZK*jGt?Ua5*EvRH=X&efPJ19+2=W=X?{2g&56gLITe~*r`R-~ z3|#kX1usCaPXzXIe$6_AR)U<1>28E7!1W){*|coDs!8Z8N;4eR^ia!Yu;Hra<#+bTchx}nsVfBl(P@*Bc1ezrSL}hD||NJ zo#>|Cok;Db-<@C$xgDNcygWY&FaLmls*d{47h~u@gKb`Z3S6|n=H(xN+v8;=cve){ zyxgkOT0HyT@N$lnIbW|y=)W%uKG1(B;fdXCeIh`(lV{HoAFW^aCS20l?1(-$f_+kH4u;29cbO?RU7m7TW#(1Flo%6RHCWxTHM0cewSw*OIE#+&jC zyo>RXXvyww;vbV>X+QeRsiuxdRZ=Yble>{MH4{~K`bsj99;r}Q{0fwR7g zDYt<35nVr*v6hNFOyd6z(z=rEydMKQ{iJTwd@|)7I_CSp(fD~z6n++gd!fiXM|-Rz zo$zo9G|i$9%AA=nr-S*Dw36P4!gKM>)e+BELQCQSo9B-LXBDWvvKqU|QlZs>+e6@H z$`z@Pb&BQZ_s44^`-)?}bmYHR)0P0Pyv;bzc(zwh*va5iu@@WM3TylKGGfT!ttzLGl5XkAB3dFMowH#(xcbK92pp(!V?MlM{1e7F)h zIR!a6`4;4cDJNsKtP%T;$O_r-h$bgZdF0?{n&#(rY_LPfW7%@WhAm}CdXcY@`G)9x z?~u>R6U_&3AJRG7zlYBE3i+fxZl~SfU5otN>fUkaN-y-qAopUi`MQ;_>`vHCDqLm$ zK1ROC!ST;`GspMh2!GSEwhqoWGE%xcFfnlQ^D~3pI5W?f4-PiwG$zx(nQyK*hw~oT zs8|P^dqP(Dw7%HRxT|Hs1;EVF8@>IQv*ZrfeBLGM&RT=@c`3Y*x&r%8OgHPg;Q5(> zg+n$-U4gAbW>@bvc1T^LscSiPZE~x+tngf2mj#cr>XP}9x&r&ZR_F5;Ue~-8-k5Z) za@llE(saEDT{*Iz#STkdRy|hO85T`CO1x=n&4mXJYCmZ>e{X9`sdjZZKcDT@uzLJ zm4*)hn{B1}7tGXWB@=w1S@5rTrpxqY?#B*VvZh-vk<%moQoKR>-qE>v^tbVhr(E8^ zcAMkK?B|pbbb~KtIQxFCgh4}3YdpZifJ^bv8h_G$oMRbXMf=IQO0zurk15;fKbL}& z)V=;1*5g~d;){JS^$!7$6Y2Lu>GxeLy(dk^9_8ITjJI(Q;@{o!&7S#_r>qD%Hgz%1 zF2rVl&4~8LE<$-b;g|gXH+qY*QyY~R5w^aQF?zw&*vjQk$7VdTGB!i{OC$Yv{a
Zw7(9xzcg%B1&?Nf<=G!}z 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 U3_UZ&|bnje)iB_4TEweZU3rNCCY@?`Gu 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

!j{p-12 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%0Dm0_qb|}9kVF05}(oY(HwpL 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

X{Yf!N=Lh^yvB)NF~CIm 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ðA`CV`b$jD=bS)E9+QUS!!8XS;5IuR904I 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

Fp zilT09I`|{L%f5`hOC#vhCY|qC`fN$k^A?^{#aM@>oh>yKN*QC=SvX9k(%lx@N$e({ zJTuwgOqpz-h)k+!ta~C7DRFKRW#1%2c1?1}xJ`xhRcp8ROgiyZ2P9ke%FM|i8P6wW zs*+8Tc9|=Umd1~t6H3DZwEuUv02}Ux&v;04cRUf%%(j<) zDQ5v+Cqa6czhFwSY=D%@^rca@K7@N2&07*B7k22a<;aw!TqZ1yaG5^YP)h_^ob72! zE<1^qB2HxwnRQRz*Mq%=f%AB8jwRU-UKq;9I&DWSFwi%LjvfK zLw->M_vqo>j%W#Z=Q*-hREbyK2hT{7ouO=*NVLOEhj76Y={98H_=#Dsk!fHjb3Qz# z>=VX%KG{rph3FQx`Q&%a#^LDxYXbFqNyd&{$QIdC5&aaA1x3-aLgo^!GMVV(tZz#a z`YcDbgX$$}^uTK4xS5s(CRCw)Jf!~On-j~)jt9f3xOfe`zY%8IV3wPiVLoSV z;hW_+ZoNu8IA4Qn9LIAnMnm`Ty-XRjP8#5Zv7mDy46u##D2?f9 zPZ=4{kZ#bh>M>%;Q;T5jU0`7fOskIegi5Yi!-@5=2lMeMI^o#qbP+1}jGegc88D!3 y{KOm-RFMVvNGWw4rN{0M&BmQJgMWI9ofeUfyp>nW*-{}9#|NIAOP@Eb7 literal 0 HcmV?d00001 diff --git a/physiolabxr/thirdparty/WearableSensing/libDSI-Windows-x86_64.dll b/physiolabxr/thirdparty/WearableSensing/libDSI-Windows-x86_64.dll new file mode 100644 index 0000000000000000000000000000000000000000..c9eb2b34807c29026dc6e4ab467523efb0143cf8 GIT binary patch literal 699904 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ÊIZuoY#Ey3(J*_U(2^$~h^ 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 i+2e*KAG?-GmZ{i{g7m`Tj! Date: Wed, 23 Oct 2024 17:27:18 -0400 Subject: [PATCH 08/26] Updating code for game --- .../CVEP_TEST3.proto | 17 ++ .../WearableSensingNeuralCooked/CVEP_TEST3.py | 31 +-- .../CVEP_TEST3Server.py | 17 ++ .../CVEP_TEST3_pb2.py | 43 ++++ .../CVEP_TEST3_pb2_grpc.py | 184 ++++++++++++++++++ 5 files changed, 277 insertions(+), 15 deletions(-) create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.proto create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3Server.py create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2.py create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2_grpc.py diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.proto b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.proto new file mode 100644 index 00000000..1bbc74d8 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +import "google/protobuf/empty.proto"; +service NeuralCooked { + rpc add_seq_data(add_seq_dataRequest) returns (google.protobuf.Empty); + rpc decode(google.protobuf.Empty) returns (decodeResponse); + rpc training(google.protobuf.Empty) returns (trainingResponse); +} +message add_seq_dataRequest { + int32 sequence_num = 1; + float duration = 2; +} +message decodeResponse { + int32 message = 1; +} +message trainingResponse { + int32 message = 1; +} \ No newline at end of file diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py index 9c213d38..d09d2220 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py @@ -28,17 +28,18 @@ def init(self): self.seq2_data = np.array([]) self.seq3_data = np.array([]) def loop(self): - EEG_Data = { #creating a dictionary for EEG data - 'stream_name': 'EEG Data', #defining the stream name - 'frames': self.inputs['DSI-24'][0][14:18, :], #choosing the correct channels - 'timestamps': self.inputs['DSI-24'][1] #defining the timestamps - } - Sequence_Data = {} #creating a dictionary for sequence data - self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data - if self.data.get_data('EEG Data').shape[1] > 60000: #if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds - self.data.clear_stream_up_to_index(self, stream_name= 'EEG Data', cut_to_index= len(self.data.get_data('EEG Data').shape[1])-60000) - if len(self.cca_models) == 3: #if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously - self.decode_choice() #adding the detected choice to the list of detected choices + if self.inputs: + EEG_Data = { #creating a dictionary for EEG data + 'stream_name': 'EEG Data', #defining the stream name + 'frames': self.inputs['DSI24'][0][14:18, :], #choosing the correct channels + 'timestamps': self.inputs['DSI24'][1] #defining the timestamps + } + Sequence_Data = {} #creating a dictionary for sequence data + self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data + if self.data.get_data('EEG Data').shape[1] > 60000: #if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds + self.data.clear_stream_up_to_index(stream_name= 'EEG Data', cut_to_index= self.data.get_data('EEG Data').shape[1]-60000) + if len(self.cca_models) == 3: #if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously + self.decode_choice() #adding the detected choice to the list of detected choices def cleanup(self): self.freq_bands = [(8, 60), (12, 60), (30, 60)] self.mSequence = [] @@ -85,13 +86,13 @@ def training(self) -> int: @async_rpc - def add_seq_data(self, sequence_num: int): #Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat + def add_seq_data(self, sequence_num: int, duration: float): #Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat if sequence_num == 0: - self.seq1_data = np.append(self.seq1_data, self.data.get_data('EEG Data')[:,-1500:]) #Every 5 seconds + self.seq1_data = np.append(self.seq1_data, self.data.get_data('EEG Data')[:,-(duration * 300):]) #Every 5 seconds elif sequence_num == 1: - self.seq2_data = np.append(self.seq2_data, self.data.get_data('EEG Data')[:,-1500:]) + self.seq2_data = np.append(self.seq2_data, self.data.get_data('EEG Data')[:,-(duration * 300):]) elif sequence_num == 2: - self.seq3_data = np.append(self.seq3_data, self.data.get_data('EEG Data')[:,-1500:]) + self.seq3_data = np.append(self.seq3_data, self.data.get_data('EEG Data')[:,-(duration * 300):]) def train_cca(self): """ diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3Server.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3Server.py new file mode 100644 index 00000000..fad58dcc --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3Server.py @@ -0,0 +1,17 @@ +from google.protobuf import empty_pb2 +from google.protobuf.json_format import MessageToDict +import CVEP_TEST3_pb2_grpc, CVEP_TEST3_pb2 + +class NeuralCookedServer(CVEP_TEST3_pb2_grpc.NeuralCookedServicer): + script_instance = None + async def add_seq_data(self, request, context): + result = self.script_instance.add_seq_data(**MessageToDict(request)) + return empty_pb2.Empty() + + async def decode(self, request, context): + result = self.script_instance.decode() + return CVEP_TEST3_pb2.decodeResponse(message=result) + + async def training(self, request, context): + result = self.script_instance.training() + return CVEP_TEST3_pb2.trainingResponse(message=result) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2.py new file mode 100644 index 00000000..37e7d324 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: CVEP_TEST3.proto +# Protobuf Python Version: 5.27.2 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 27, + 2, + '', + 'CVEP_TEST3.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x43VEP_TEST3.proto\x1a\x1bgoogle/protobuf/empty.proto\"=\n\x13\x61\x64\x64_seq_dataRequest\x12\x14\n\x0csequence_num\x18\x01 \x01(\x05\x12\x10\n\x08\x64uration\x18\x02 \x01(\x02\"!\n\x0e\x64\x65\x63odeResponse\x12\x0f\n\x07message\x18\x01 \x01(\x05\"#\n\x10trainingResponse\x12\x0f\n\x07message\x18\x01 \x01(\x05\x32\xb6\x01\n\x0cNeuralCooked\x12<\n\x0c\x61\x64\x64_seq_data\x12\x14.add_seq_dataRequest\x1a\x16.google.protobuf.Empty\x12\x31\n\x06\x64\x65\x63ode\x12\x16.google.protobuf.Empty\x1a\x0f.decodeResponse\x12\x35\n\x08training\x12\x16.google.protobuf.Empty\x1a\x11.trainingResponseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'CVEP_TEST3_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_ADD_SEQ_DATAREQUEST']._serialized_start=49 + _globals['_ADD_SEQ_DATAREQUEST']._serialized_end=110 + _globals['_DECODERESPONSE']._serialized_start=112 + _globals['_DECODERESPONSE']._serialized_end=145 + _globals['_TRAININGRESPONSE']._serialized_start=147 + _globals['_TRAININGRESPONSE']._serialized_end=182 + _globals['_NEURALCOOKED']._serialized_start=185 + _globals['_NEURALCOOKED']._serialized_end=367 +# @@protoc_insertion_point(module_scope) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2_grpc.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2_grpc.py new file mode 100644 index 00000000..1d45739a --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2_grpc.py @@ -0,0 +1,184 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +import CVEP_TEST3_pb2 as CVEP__TEST3__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + +GRPC_GENERATED_VERSION = '1.66.2' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in CVEP_TEST3_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class NeuralCookedStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.add_seq_data = channel.unary_unary( + '/NeuralCooked/add_seq_data', + request_serializer=CVEP__TEST3__pb2.add_seq_dataRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + _registered_method=True) + self.decode = channel.unary_unary( + '/NeuralCooked/decode', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=CVEP__TEST3__pb2.decodeResponse.FromString, + _registered_method=True) + self.training = channel.unary_unary( + '/NeuralCooked/training', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=CVEP__TEST3__pb2.trainingResponse.FromString, + _registered_method=True) + + +class NeuralCookedServicer(object): + """Missing associated documentation comment in .proto file.""" + + def add_seq_data(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def decode(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def training(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_NeuralCookedServicer_to_server(servicer, server): + rpc_method_handlers = { + 'add_seq_data': grpc.unary_unary_rpc_method_handler( + servicer.add_seq_data, + request_deserializer=CVEP__TEST3__pb2.add_seq_dataRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'decode': grpc.unary_unary_rpc_method_handler( + servicer.decode, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=CVEP__TEST3__pb2.decodeResponse.SerializeToString, + ), + 'training': grpc.unary_unary_rpc_method_handler( + servicer.training, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=CVEP__TEST3__pb2.trainingResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'NeuralCooked', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('NeuralCooked', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class NeuralCooked(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def add_seq_data(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/NeuralCooked/add_seq_data', + CVEP__TEST3__pb2.add_seq_dataRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def decode(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/NeuralCooked/decode', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + CVEP__TEST3__pb2.decodeResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def training(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/NeuralCooked/training', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + CVEP__TEST3__pb2.trainingResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) From 13c5e54c548c79040ab514375cd56949aa0afc02 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Thu, 24 Oct 2024 17:54:01 -0400 Subject: [PATCH 09/26] debugging --- .../CVEP_TEST3.proto | 2 +- .../WearableSensingNeuralCooked/CVEP_TEST3.py | 33 ++++++++++++------- .../CVEP_TEST3_pb2.py | 16 ++++----- .../CVEP_TEST3_pb2_grpc.py | 2 +- 4 files changed, 32 insertions(+), 21 deletions(-) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.proto b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.proto index 1bbc74d8..456122e2 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.proto +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.proto @@ -6,7 +6,7 @@ service NeuralCooked { rpc training(google.protobuf.Empty) returns (trainingResponse); } message add_seq_dataRequest { - int32 sequence_num = 1; + int32 sequenceNum = 1; float duration = 2; } message decodeResponse { diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py index d09d2220..62bf9545 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py @@ -24,9 +24,9 @@ def init(self): [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1], #mSequence2 [0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1] #mSequence3 ] - self.seq1_data = np.array([]) - self.seq2_data = np.array([]) - self.seq3_data = np.array([]) + self.seq1_data = np.array([[]]) + self.seq2_data = np.array([[]]) + self.seq3_data = np.array([[]]) def loop(self): if self.inputs: EEG_Data = { #creating a dictionary for EEG data @@ -86,13 +86,24 @@ def training(self) -> int: @async_rpc - def add_seq_data(self, sequence_num: int, duration: float): #Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat - if sequence_num == 0: - self.seq1_data = np.append(self.seq1_data, self.data.get_data('EEG Data')[:,-(duration * 300):]) #Every 5 seconds - elif sequence_num == 1: - self.seq2_data = np.append(self.seq2_data, self.data.get_data('EEG Data')[:,-(duration * 300):]) - elif sequence_num == 2: - self.seq3_data = np.append(self.seq3_data, self.data.get_data('EEG Data')[:,-(duration * 300):]) + def add_seq_data(self, sequenceNum: int, duration: float): #Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat + eegData = self.data.get_data('EEG Data')[:, int(-duration *300) :] + + if sequenceNum == 1: + if self.seq1_data.size == 0: + self.seq1_data = eegData + else: + self.seq1_data = np.concatenate((self.seq1_data, eegData),axis =1) + elif sequenceNum == 2: + if self.seq2_data.size == 0: + self.seq2_data = eegData + else: + self.seq2_data = np.concatenate((self.seq2_data, eegData), axis=1) + elif sequenceNum == 3: + if self.seq3_data.size == 0: + self.seq3_data = eegData + else: + self.seq3_data = np.concatenate((self.seq3_data, eegData), axis=1) def train_cca(self): """ @@ -100,7 +111,7 @@ def train_cca(self): This method generates spatial filters and templates for each target m-sequence. """ - segment_Length = 1500 + segment_Length = 30#1500 # Split data into segments for each m-sequence seq1_segments = np.array_split(self.seq1_data, self.seq1_data.shape[1] // segment_Length, axis=1) seq2_segments = np.array_split(self.seq2_data, self.seq2_data.shape[1] // segment_Length, axis=1) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2.py index 37e7d324..632fe1db 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2.py @@ -25,7 +25,7 @@ from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x43VEP_TEST3.proto\x1a\x1bgoogle/protobuf/empty.proto\"=\n\x13\x61\x64\x64_seq_dataRequest\x12\x14\n\x0csequence_num\x18\x01 \x01(\x05\x12\x10\n\x08\x64uration\x18\x02 \x01(\x02\"!\n\x0e\x64\x65\x63odeResponse\x12\x0f\n\x07message\x18\x01 \x01(\x05\"#\n\x10trainingResponse\x12\x0f\n\x07message\x18\x01 \x01(\x05\x32\xb6\x01\n\x0cNeuralCooked\x12<\n\x0c\x61\x64\x64_seq_data\x12\x14.add_seq_dataRequest\x1a\x16.google.protobuf.Empty\x12\x31\n\x06\x64\x65\x63ode\x12\x16.google.protobuf.Empty\x1a\x0f.decodeResponse\x12\x35\n\x08training\x12\x16.google.protobuf.Empty\x1a\x11.trainingResponseb\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x43VEP_TEST3.proto\x1a\x1bgoogle/protobuf/empty.proto\"<\n\x13\x61\x64\x64_seq_dataRequest\x12\x13\n\x0bsequenceNum\x18\x01 \x01(\x05\x12\x10\n\x08\x64uration\x18\x02 \x01(\x02\"!\n\x0e\x64\x65\x63odeResponse\x12\x0f\n\x07message\x18\x01 \x01(\x05\"#\n\x10trainingResponse\x12\x0f\n\x07message\x18\x01 \x01(\x05\x32\xb6\x01\n\x0cNeuralCooked\x12<\n\x0c\x61\x64\x64_seq_data\x12\x14.add_seq_dataRequest\x1a\x16.google.protobuf.Empty\x12\x31\n\x06\x64\x65\x63ode\x12\x16.google.protobuf.Empty\x1a\x0f.decodeResponse\x12\x35\n\x08training\x12\x16.google.protobuf.Empty\x1a\x11.trainingResponseb\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -33,11 +33,11 @@ if not _descriptor._USE_C_DESCRIPTORS: DESCRIPTOR._loaded_options = None _globals['_ADD_SEQ_DATAREQUEST']._serialized_start=49 - _globals['_ADD_SEQ_DATAREQUEST']._serialized_end=110 - _globals['_DECODERESPONSE']._serialized_start=112 - _globals['_DECODERESPONSE']._serialized_end=145 - _globals['_TRAININGRESPONSE']._serialized_start=147 - _globals['_TRAININGRESPONSE']._serialized_end=182 - _globals['_NEURALCOOKED']._serialized_start=185 - _globals['_NEURALCOOKED']._serialized_end=367 + _globals['_ADD_SEQ_DATAREQUEST']._serialized_end=109 + _globals['_DECODERESPONSE']._serialized_start=111 + _globals['_DECODERESPONSE']._serialized_end=144 + _globals['_TRAININGRESPONSE']._serialized_start=146 + _globals['_TRAININGRESPONSE']._serialized_end=181 + _globals['_NEURALCOOKED']._serialized_start=184 + _globals['_NEURALCOOKED']._serialized_end=366 # @@protoc_insertion_point(module_scope) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2_grpc.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2_grpc.py index 1d45739a..8f3522a9 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2_grpc.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3_pb2_grpc.py @@ -6,7 +6,7 @@ import CVEP_TEST3_pb2 as CVEP__TEST3__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 -GRPC_GENERATED_VERSION = '1.66.2' +GRPC_GENERATED_VERSION = '1.67.0' GRPC_VERSION = grpc.__version__ _version_not_supported = False From 79541a2494260bda9215ce8eee5127675907f17b Mon Sep 17 00:00:00 2001 From: LommyTea Date: Fri, 25 Oct 2024 18:32:23 -0400 Subject: [PATCH 10/26] debugging code --- .../WearableSensingNeuralCooked/CVEP_TEST3.py | 71 +++++++++++++++---- .../CVEPdummyScript_pb2_grpc.py | 2 +- 2 files changed, 57 insertions(+), 16 deletions(-) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py index 62bf9545..fc46b52a 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py @@ -24,6 +24,8 @@ def init(self): [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1], #mSequence2 [0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1] #mSequence3 ] + self.sequence_length = len(self.mSequence[0]) + self.mSequenceSignal = [] self.seq1_data = np.array([[]]) self.seq2_data = np.array([[]]) self.seq3_data = np.array([[]]) @@ -31,8 +33,8 @@ def loop(self): if self.inputs: EEG_Data = { #creating a dictionary for EEG data 'stream_name': 'EEG Data', #defining the stream name - 'frames': self.inputs['DSI24'][0][14:18, :], #choosing the correct channels - 'timestamps': self.inputs['DSI24'][1] #defining the timestamps + 'frames': self.inputs['DSI24'][0][14:18, :].astype(float), #choosing the correct channels + 'timestamps': self.inputs['DSI24'][1].astype(float) #defining the timestamps } Sequence_Data = {} #creating a dictionary for sequence data self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data @@ -53,6 +55,37 @@ def cleanup(self): ##Basic Tools #=================================================================================================== + def adjust_segments(self, segments, segment_length): + adjusted_segments = [] + for segment in segments: + # If the segment is shorter than the desired length, pad it with zeros + if segment.shape[1] < segment_length: + padding = np.zeros((segment.shape[0], segment_length - segment.shape[1])) + adjusted_segment = np.hstack((segment, padding)) # Pad with zeros + else: + # If the segment is longer, trim it to the desired length + adjusted_segment = segment[:, :segment_length] + + adjusted_segments.append(adjusted_segment) + + return adjusted_segments + + def generate_m_signal(self, seqNum): + + # Step 1: Calculate the total number of samples needed + total_samples = self.sequence_length + + # Step 2: Calculate the number of samples per m-sequence element + samples_per_bit = total_samples // len(self.mSequence[seqNum]) + + # Step 3: Create the binary signal by repeating each bit + signal = np.repeat(self.mSequence[seqNum], samples_per_bit) + + # Step 4: If the signal is longer than required, truncate it + if len(signal) > total_samples: + signal = signal[:total_samples] + return signal + def apply_filter_banks(self, data): band_data = {} for band in self.freq_bands: @@ -60,12 +93,15 @@ def apply_filter_banks(self, data): band_data[band_key] = self.bandpass_filter(data, band[0], band[1], self.frequency) return band_data + def bandpass_filter(self, data, lowcut, highcut,fs, order=8): + filtered_data = [] nyquist = 0.5 * fs low = lowcut / nyquist high = highcut / nyquist b, a = butter(order, [low, high], btype='band') - filtered_data= filtfilt(b, a, data) + for i in range(4): + filtered_data[i]= filtfilt(b, a, data[i]) return filtered_data @@ -110,12 +146,17 @@ def train_cca(self): Trains the CCA model. This method generates spatial filters and templates for each target m-sequence. """ - - segment_Length = 30#1500 + #ensure seq segments are the same + # Split data into segments for each m-sequence - seq1_segments = np.array_split(self.seq1_data, self.seq1_data.shape[1] // segment_Length, axis=1) - seq2_segments = np.array_split(self.seq2_data, self.seq2_data.shape[1] // segment_Length, axis=1) - seq3_segments = np.array_split(self.seq3_data, self.seq3_data.shape[1] // segment_Length, axis=1) + seq1_segments = np.array_split(self.seq1_data, self.seq1_data.shape[1] // self.sequence_length, axis=1) + seq2_segments = np.array_split(self.seq2_data, self.seq2_data.shape[1] // self.sequence_length, axis=1) + seq3_segments = np.array_split(self.seq3_data, self.seq3_data.shape[1] // self.sequence_length, axis=1) + + seq1_segments = self.adjust_segments(seq1_segments, self.sequence_length) + seq2_segments = self.adjust_segments(seq2_segments, self.sequence_length) + seq3_segments = self.adjust_segments(seq3_segments, self.sequence_length) + # Generate templates by averaging segments for each m-sequence templates = { @@ -124,19 +165,19 @@ def train_cca(self): 3: np.mean(seq3_segments, axis=0) } - # Filter the data using predefined frequency bands - band_data = self.apply_filter_banks(self.data.get_data('EEG Data')) - # Generate CCA-based spatial filters and templates for each band and each m-sequence cca_model = {} for band in self.freq_bands: band_key = f'band_{band[0]}_{band[1]}' cca_model[band_key] = {} - + band_data = [[]] for i in range(1, 4): # Assuming there are 3 m-sequences - cca = CCA(n_components=1) - filtered_template = self.bandpass_filter(templates[i], band[0], band[1], self.frequency) - cca.fit(filtered_template.T, self.mSequence[i - 1]) + band_data[i] = self.apply_filter_banks(templates[i]) #generates band data + cca = CCA(n_components=1) #initalizes cca model + filtered_template = self.bandpass_filter(band_data[i], band[0], band[1], self.frequency) #applies filter to band data + + + cca.fit(filtered_template.T, self.mSequenceSignal[i - 1]) cca_model[band_key][i] = cca # Store the CCA models diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript_pb2_grpc.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript_pb2_grpc.py index a4adad52..95a45cef 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript_pb2_grpc.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEPdummyScript_pb2_grpc.py @@ -6,7 +6,7 @@ import CVEPdummyScript_pb2 as CVEPdummyScript__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 -GRPC_GENERATED_VERSION = '1.66.1' +GRPC_GENERATED_VERSION = '1.67.0' GRPC_VERSION = grpc.__version__ _version_not_supported = False From 9beb02f2b44e3052f8967575f4bf9852b91ccd5d Mon Sep 17 00:00:00 2001 From: LommyTea Date: Sat, 26 Oct 2024 01:22:15 -0400 Subject: [PATCH 11/26] ignore --- RandFile.py | 35 +++++++++++++++++++ .../WearableSensingScript.py | 1 + .../WearableSensingNeuralCooked/CVEP_TEST3.py | 4 +-- 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 RandFile.py diff --git a/RandFile.py b/RandFile.py new file mode 100644 index 00000000..7589b602 --- /dev/null +++ b/RandFile.py @@ -0,0 +1,35 @@ +from pylsl import local_clock +from physiolabxr.scripting.RenaScript import RenaScript +from physiolabxr.third_party.WearableSensing.DSI_py3 import * +import numpy as np +import sys +from physiolabxr.utils.buffers import DataBuffer +import sounddevice as sd +import time + +class dummyscript(RenaScript): + def __init__(self, *args, **kwargs): + """ + Please do not edit this function + """ + super().__init__(*args, **kwargs) + def init(self, arg = ''): + self.frequency = 40 + self.duration = 10 * 60 + self.fs = 44100 + self.time = np.linspace(0, self.duration, int(self.fs*self.duration), endpoint = False) + self.sinewave = 0.5 * np.sin(2 * np.pi * self.frequency * self.time) + self.sound = 0 + time.sleep(15) + self.sound = 1 + sd.play(self.sinewave, self.fs) + + def loop(self): + self.set_output(stream_name='sound', data=[1], timestamp=local_clock()) + # if self.starttime == None: + # self.starttime = local_clock() + # self.set_output(stream_name = 'sound', data = [0], timestamp = local_clock()) + # if (local_clock() - self.starttime )> 1: + # self.set_output(stream_name='sound', data=[1], timestamp=local_clock()) + def cleanup(self): + pass \ No newline at end of file diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py b/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py index 04a6a0df..da4596f0 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py @@ -39,6 +39,7 @@ def ExampleSampleCallback_Signals(headsetPtr, packetTime, userData): if new_data.shape[1] != len(t): print('Data and timestamp mismatch') print(new_data.shape) + print(new_data.shape) print(len(t)) #Create a dictionary with the stream name, data, and timestamps diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py index 62bf9545..34dba1f8 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py @@ -87,7 +87,7 @@ def training(self) -> int: @async_rpc def add_seq_data(self, sequenceNum: int, duration: float): #Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat - eegData = self.data.get_data('EEG Data')[:, int(-duration *300) :] + eegData = self.data.get_data('EEG Data')[:, int(-duration *300) :] # 4 by (samples) if sequenceNum == 1: if self.seq1_data.size == 0: @@ -110,7 +110,7 @@ def train_cca(self): Trains the CCA model. This method generates spatial filters and templates for each target m-sequence. """ - + #self.seqX_data.shape = [4,num_samples] segment_Length = 30#1500 # Split data into segments for each m-sequence seq1_segments = np.array_split(self.seq1_data, self.seq1_data.shape[1] // segment_Length, axis=1) From 7c37650450e0d71461a1016ea3daa391443335a0 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Sat, 26 Oct 2024 11:37:12 -0400 Subject: [PATCH 12/26] ignore --- RandFile.py | 35 ------------------- .../WearableSensingNeuralCooked/CVEP_TEST3.py | 8 +---- 2 files changed, 1 insertion(+), 42 deletions(-) delete mode 100644 RandFile.py diff --git a/RandFile.py b/RandFile.py deleted file mode 100644 index 7589b602..00000000 --- a/RandFile.py +++ /dev/null @@ -1,35 +0,0 @@ -from pylsl import local_clock -from physiolabxr.scripting.RenaScript import RenaScript -from physiolabxr.third_party.WearableSensing.DSI_py3 import * -import numpy as np -import sys -from physiolabxr.utils.buffers import DataBuffer -import sounddevice as sd -import time - -class dummyscript(RenaScript): - def __init__(self, *args, **kwargs): - """ - Please do not edit this function - """ - super().__init__(*args, **kwargs) - def init(self, arg = ''): - self.frequency = 40 - self.duration = 10 * 60 - self.fs = 44100 - self.time = np.linspace(0, self.duration, int(self.fs*self.duration), endpoint = False) - self.sinewave = 0.5 * np.sin(2 * np.pi * self.frequency * self.time) - self.sound = 0 - time.sleep(15) - self.sound = 1 - sd.play(self.sinewave, self.fs) - - def loop(self): - self.set_output(stream_name='sound', data=[1], timestamp=local_clock()) - # if self.starttime == None: - # self.starttime = local_clock() - # self.set_output(stream_name = 'sound', data = [0], timestamp = local_clock()) - # if (local_clock() - self.starttime )> 1: - # self.set_output(stream_name='sound', data=[1], timestamp=local_clock()) - def cleanup(self): - pass \ No newline at end of file diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py index 19607c22..1e718b36 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py @@ -146,13 +146,7 @@ def train_cca(self): Trains the CCA model. This method generates spatial filters and templates for each target m-sequence. """ -<<<<<<< HEAD - #ensure seq segments are the same - -======= - #self.seqX_data.shape = [4,num_samples] - segment_Length = 30#1500 ->>>>>>> 9beb02f2b44e3052f8967575f4bf9852b91ccd5d + # Split data into segments for each m-sequence seq1_segments = np.array_split(self.seq1_data, self.seq1_data.shape[1] // self.sequence_length, axis=1) seq2_segments = np.array_split(self.seq2_data, self.seq2_data.shape[1] // self.sequence_length, axis=1) From e53a88f07bdbbef8bfa9b43a84b93032b3f1dffe Mon Sep 17 00:00:00 2001 From: LommyTea Date: Mon, 28 Oct 2024 17:33:12 -0400 Subject: [PATCH 13/26] New code for NeuroCooked Untested --- .../WearableSensingNeuralCooked/CVEP_TEST3.py | 48 ++-- .../NeuroCooked.py | 253 ++++++++++++++++++ 2 files changed, 278 insertions(+), 23 deletions(-) create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.py diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py index 1e718b36..006d1ddc 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/CVEP_TEST3.py @@ -13,35 +13,38 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def init(self): - self.freq_bands = [(8, 60), (12, 60), (30, 60)] #defining frequency bands for filter bank - self.mSequence = [] #creating a list of m_sequences - self.frequency = 300 #default frequency of DSI-24 - self.data = DataBuffer() #generating a data buffer for EEG data - self.cca_models = [] #creating a list to store all of the CCA models - self.decoded_choices = [] #creating a list to store all of the decoded choices + self.freq_bands = [(8, 60), (12, 60), (30, 60)] # defining frequency bands for filter bank + self.mSequence = [] # creating a list of m_sequences + self.frequency = 300 # default frequency of DSI-24 + self.data = DataBuffer() # generating a data buffer for EEG data + self.cca_models = [] # creating a list to store all of the CCA models + self.decoded_choices = [] # creating a list to store all of the decoded choices self.mSequence = [ - [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0], #mSequence1 - [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1], #mSequence2 - [0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1] #mSequence3 + [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0], # mSequence1 + [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1], # mSequence2 + [0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1] # mSequence3 ] self.sequence_length = len(self.mSequence[0]) - self.mSequenceSignal = [] + self.mSequenceSignal = [] self.seq1_data = np.array([[]]) self.seq2_data = np.array([[]]) self.seq3_data = np.array([[]]) + def loop(self): if self.inputs: - EEG_Data = { #creating a dictionary for EEG data - 'stream_name': 'EEG Data', #defining the stream name - 'frames': self.inputs['DSI24'][0][14:18, :].astype(float), #choosing the correct channels - 'timestamps': self.inputs['DSI24'][1].astype(float) #defining the timestamps + EEG_Data = { # creating a dictionary for EEG data + 'stream_name': 'EEG Data', # defining the stream name + 'frames': self.inputs['DSI24'][0][14:18, :].astype(float), # choosing the correct channels + 'timestamps': self.inputs['DSI24'][1].astype(float) # defining the timestamps } - Sequence_Data = {} #creating a dictionary for sequence data - self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data - if self.data.get_data('EEG Data').shape[1] > 60000: #if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds - self.data.clear_stream_up_to_index(stream_name= 'EEG Data', cut_to_index= self.data.get_data('EEG Data').shape[1]-60000) - if len(self.cca_models) == 3: #if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously - self.decode_choice() #adding the detected choice to the list of detected choices + Sequence_Data = {} # creating a dictionary for sequence data + self.data.update_buffer(EEG_Data) # updating the data buffer with EEG data + if self.data.get_data('EEG Data').shape[ + 1] > 60000: # if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds + self.data.clear_stream_up_to_index(stream_name='EEG Data', + cut_to_index=self.data.get_data('EEG Data').shape[1] - 60000) + if len(self.cca_models) == 3: # if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously + self.decode_choice() #adding the detected choice to the list of detected choices def cleanup(self): self.freq_bands = [(8, 60), (12, 60), (30, 60)] self.mSequence = [] @@ -170,13 +173,12 @@ def train_cca(self): band_key = f'band_{band[0]}_{band[1]}' cca_model[band_key] = {} band_data = [[]] - for i in range(1, 4): # Assuming there are 3 m-sequences + for i in range(0, 3): # Assuming there are 3 m-sequences band_data[i] = self.apply_filter_banks(templates[i]) #generates band data cca = CCA(n_components=1) #initalizes cca model - filtered_template = self.bandpass_filter(band_data[i], band[0], band[1], self.frequency) #applies filter to band data - cca.fit(filtered_template.T, self.mSequenceSignal[i - 1]) + cca.fit(band_data[i].T, self.mSequenceSignal[i].T) cca_model[band_key][i] = cca # Store the CCA models diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.py new file mode 100644 index 00000000..0578e880 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.py @@ -0,0 +1,253 @@ +from scipy.signal import butter, filtfilt +from sklearn.cross_decomposition import CCA +import numpy as np +from physiolabxr.scripting.RenaScript import RenaScript +from physiolabxr.utils.buffers import DataBuffer +from physiolabxr.rpc.decorator import rpc, async_rpc + +class NeuroCooked(RenaScript): + def __init__(self, *args, **kwargs): + """ + Please do not edit this function + """ + super().__init__(*args, **kwargs) + + def init(self): + self.freq_bands = [(8, 60), (12, 60), (30, 60)] #defining frequency bands for filter bank + self.frequency = 300 #default frequency of DSI-24 + self.data = DataBuffer() #generating a data buffer for EEG data + self.templates = {} + self.ccaModel = {} #creating a list to store all of the CCA models + self.ccaResults= {} + self.decoded_choices = [] #creating a list to store all of the decoded choices + self.mSequence = [ + [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0], #mSequence1 + [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1], #mSequence2 + [0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1] #mSequence3 + ] + self.sequence_length = len(self.mSequence[0]) + self.mSequenceSignal = { + 'segment1': self.generateMSignal(self.mSequence[0]), + 'segment2': self.generateMSignal(self.mSequence[1]), + 'segment3': self.generateMSignal(self.mSequence[2]) + } + self.seq1_data = np.array([[]]) + self.seq2_data = np.array([[]]) + self.seq3_data = np.array([[]]) + + + def loop(self): + if self.inputs: + EEG_Data = { #creating a dictionary for EEG data + 'stream_name': 'EEG Data', #defining the stream name + 'frames': self.inputs['DSI24'][0][14:18, :].astype(float), #choosing the correct channels + 'timestamps': self.inputs['DSI24'][1].astype(float) #defining the timestamps + } + Sequence_Data = {} #creating a dictionary for sequence data + self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data + if self.data.get_data('EEG Data').shape[1] > 60000: #if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds + self.data.clear_stream_up_to_index(stream_name= 'EEG Data', cut_to_index= self.data.get_data('EEG Data').shape[1]-60000) + if len(self.cca_models) == 3: #if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously + self.decode_choice() #adding + + def cleanup(self): + self.freq_bands = [(8, 60), (12, 60), (30, 60)] + self.mSequence = [] + self.frequency = 300 + self.data = DataBuffer() + self.cca_models = [] + self.decoded_choices = [] + self.mSequence = [] + return + + #Data Manipulation + def bandpassFilter(self, data, low, high, order = 9): + """ + Takes in data and applies a bandpass filter to it + :param data: EEG data to be bandpassed + :param low: Low pass + :param high: High pass + :param fs: sampling frequency + :param order: Default is 8 + :return: A bandpassed version of the data + """ + nq = 0.5 * self.frequency + lowpass = low / nq + highpass = high / nq + b, a = butter(order, [ lowpass, highpass], bype = 'band') + BPdata = filtfilt(b,a,data) + return BPdata + + def appplyFilterBank(self, data): + """ + Returns data in 3 different arrays of different frequncy ranges + :param data: list of data to be filtered after data has been segmented + :return: a dictionary that contains 3 arrays for each frequency band where the keys are the found in self.freq_bands + """ + band = {} #Dictionary created to fill in + for i in range(3): + filtered_segments = [] # List to hold filtered segments for the current frequency band + for segment in data: + # Apply bandpass filter to each segment and append the result to the list + filtered_segment = self.bandpassFilter(segment, self.freq_bands[i][0], self.freq_bands[i][1], + self.frequency) + filtered_segments.append(filtered_segment) + + # Average the filtered segments across the first axis + band[self.freq_bands[i]] = np.mean(filtered_segments, axis=0) + return band + def adjust_segments(self, segments, segment_length): + adjusted_segments = [] + for segment in segments: + # If the segment is shorter than the desired length, pad it with zeros + if segment.shape[1] < segment_length: + padding = np.zeros((segment.shape[0], segment_length - segment.shape[1])) + adjusted_segment = np.hstack((segment, padding)) # Pad with zeros + else: + # If the segment is longer, trim it to the desired length + adjusted_segment = segment[:, :segment_length] + + adjusted_segments.append(adjusted_segment) + + return adjusted_segments + def createTemplates(self): + """ + Creates templates that are EEG arrays that are filtered + :param data: EEG data for segmenting into templates + :return: dictionary of dictionary of filtered EEG arrays Keys: segment number -> keys frequency band + """ + seq1_segments = np.array_split(self.seq1_data, self.seq1_data.shape[1] // self.sequence_length, axis=1) + seq2_segments = np.array_split(self.seq2_data, self.seq2_data.shape[1] // self.sequence_length, axis=1) + seq3_segments = np.array_split(self.seq3_data, self.seq3_data.shape[1] // self.sequence_length, axis=1) + + seq1_segments = self.adjust_segments(seq1_segments, self.sequence_length) + seq2_segments = self.adjust_segments(seq2_segments, self.sequence_length) + seq3_segments = self.adjust_segments(seq3_segments, self.sequence_length) + + + self.templates['segment1'] = self.applyFilterBank(seq1_segments) + self.templates['segment3'] = self.applyFilterBank(seq2_segments) + self.templates['segment3'] = self.applyFilterBank(seq3_segments) + + + def generateMSignal(self, seqNum): + + # Step 1: Calculate the total number of samples needed + total_samples = self.sequence_length * 0.033 * 300 + + # Step 2: Calculate the number of samples per m-sequence element + samples_per_bit = total_samples // len(self.mSequence[seqNum]) + + # Step 3: Create the binary signal by repeating each bit + signal = np.repeat(self.mSequence[seqNum], samples_per_bit) + + # Step 4: If the signal is longer than required, truncate it + if len(signal) > total_samples: + signal = signal[:total_samples] + return signal + def train_cca(self): + """ + Training the CCA model + By generated spatial filters and templates for each target m-sequence + """ + self.createTemplates() + + for segment in self.templates.keys(): + for freqBand in self.templates[segment].keys(): + cca = CCA(n_components = 1) + cca.fit(self.templates[segment][freqBand].T,self.mSequenceSignal[segment]) + self.ccaModel[segment][freqBand] = cca + + @async_rpc + def add_seq_data(self, sequenceNum: int, + duration: float): # Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat + eegData = self.data.get_data('EEG Data')[:, int(-duration * 300):] # 4 by (samples) + + if sequenceNum == 1: + if self.seq1_data.size == 0: + self.seq1_data = eegData + else: + self.seq1_data = np.concatenate((self.seq1_data, eegData), axis=1) + elif sequenceNum == 2: + if self.seq2_data.size == 0: + self.seq2_data = eegData + else: + self.seq2_data = np.concatenate((self.seq2_data, eegData), axis=1) + elif sequenceNum == 3: + if self.seq3_data.size == 0: + self.seq3_data = eegData + else: + self.seq3_data = np.concatenate((self.seq3_data, eegData), axis=1) + + @async_rpc + def training(self) -> int: + """ + Args: + input0: int - 1 for choice 1, 2 for choice 2, 3 for choice 3 + Returns: Generates correlation coefficients for EEG data x m-sequence + """ + # Train the CCA + self.train_cca() # start training the CCA + return 1 + @async_rpc + def decode(self) -> int: + # Get the choices decoded so far + choices = self.decoded_choices + + # Determine the most common choice + user_choice = max(set(choices), key=choices.count) + + # Clear the decoded choices list for the next round + self.decoded_choices = [] + self.data.clear_buffer_data('EEG Data') + + # Return the most common detected choice + return user_choice + def decode_choice(self): + self.correlation_coefficients = self.apply_shifting_window_cca( + self.data.get_data('EEG Data')) # getting the correlation coefficients by applying shifting window CCA + highest_correlation, detected_choice = self.evaluate_correlation_coefficients( + self.correlation_coefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice + self.decoded_choices.append[detected_choice] + + def apply_shifting_window_cca(self, data): + """ + Applies shifting window CCA to the filtered band data. + """ + window_size = self.sequence_length * 0.033 * 300 # For example, 1 second window for 300 Hz sampling rate + step_size = window_size/2 # For example, 0.5 second step size for 300 Hz sampling rate + + segments = [] + for start in range(0, len(data) - window_size + 1, step_size): + segment = data[start:start+window_size] + segments.append(segment) + + #Filter the data + filtered_data = {} + for band in self.freq_bands: + filtered_data[band] = self.appplyFilterBank(segments) + correlation = {} + avg_correlation = {} + #Transform the data with CCA + for segment in self.templates.keys(): + for freqBand in self.templates[segment].keys(): + cca = self.ccaModel[segment][freqBand] + self.ccaResults[segment][freqBand] = cca.transform(filtered_data[freqBand]) + + correlation[segment][freqBand] = np.corrcoef(self.ccaResults[segment][freqBand], self.templates[segment][freqBand]) + avg_correlation[segment] = np.mean(correlation[segment].values()) + return avg_correlation + + def evaluate_correlation_coefficients(self, correlation_coefficients): + # Sort the sequences by their average correlation in descending order + sorted_correlations = sorted(correlation_coefficients.items(), key=lambda item: item[1], reverse=True) + + # Get the highest and second-highest correlations + highest_sequence, highest_corr = sorted_correlations[0] + second_highest_sequence, second_highest_corr = sorted_correlations[1] + + # Check if the highest correlation is at least 0.15 higher than the second highest + if highest_corr >= second_highest_corr + 0.15: + return highest_corr, highest_sequence + else: + return highest_corr, -1 \ No newline at end of file From c9aa7ddafa70ea95f69e6e348fa7fcb915044b84 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Mon, 28 Oct 2024 18:11:44 -0400 Subject: [PATCH 14/26] Adding new files --- .../NeuroCooked.proto | 13 ++ .../NeuroCooked.py | 10 +- .../NeuroCookedServer.py | 13 ++ .../NeuroCooked_pb2.py | 41 +++++ .../NeuroCooked_pb2_grpc.py | 141 ++++++++++++++++++ 5 files changed, 213 insertions(+), 5 deletions(-) create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.proto create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCookedServer.py create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2.py create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2_grpc.py diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.proto b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.proto new file mode 100644 index 00000000..6d2f78eb --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; +import "google/protobuf/empty.proto"; +service NeuroCooked { + rpc add_seq_data(add_seq_dataRequest) returns (google.protobuf.Empty); + rpc decode(google.protobuf.Empty) returns (decodeResponse); +} +message add_seq_dataRequest { + int32 sequenceNum = 1; + float duration = 2; +} +message decodeResponse { + int32 message = 1; +} \ No newline at end of file diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.py index 0578e880..c8266c44 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.py @@ -27,9 +27,9 @@ def init(self): ] self.sequence_length = len(self.mSequence[0]) self.mSequenceSignal = { - 'segment1': self.generateMSignal(self.mSequence[0]), - 'segment2': self.generateMSignal(self.mSequence[1]), - 'segment3': self.generateMSignal(self.mSequence[2]) + 'segment1': self.generateMSignal(0), + 'segment2': self.generateMSignal(1), + 'segment3': self.generateMSignal(2) } self.seq1_data = np.array([[]]) self.seq2_data = np.array([[]]) @@ -47,7 +47,7 @@ def loop(self): self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data if self.data.get_data('EEG Data').shape[1] > 60000: #if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds self.data.clear_stream_up_to_index(stream_name= 'EEG Data', cut_to_index= self.data.get_data('EEG Data').shape[1]-60000) - if len(self.cca_models) == 3: #if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously + if len(self.ccaModel) == 3: #if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously self.decode_choice() #adding def cleanup(self): @@ -57,7 +57,7 @@ def cleanup(self): self.data = DataBuffer() self.cca_models = [] self.decoded_choices = [] - self.mSequence = [] + return #Data Manipulation diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCookedServer.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCookedServer.py new file mode 100644 index 00000000..50ea8cc0 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCookedServer.py @@ -0,0 +1,13 @@ +from google.protobuf import empty_pb2 +from google.protobuf.json_format import MessageToDict +import NeuroCooked_pb2_grpc, NeuroCooked_pb2 + +class NeuroCookedServer(NeuroCooked_pb2_grpc.NeuroCookedServicer): + script_instance = None + async def add_seq_data(self, request, context): + result = self.script_instance.add_seq_data(**MessageToDict(request)) + return empty_pb2.Empty() + + async def decode(self, request, context): + result = self.script_instance.decode() + return NeuroCooked_pb2.decodeResponse(message=result) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2.py new file mode 100644 index 00000000..6d3be5fe --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: NeuroCooked.proto +# Protobuf Python Version: 5.27.2 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 27, + 2, + '', + 'NeuroCooked.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11NeuroCooked.proto\x1a\x1bgoogle/protobuf/empty.proto\"<\n\x13\x61\x64\x64_seq_dataRequest\x12\x13\n\x0bsequenceNum\x18\x01 \x01(\x05\x12\x10\n\x08\x64uration\x18\x02 \x01(\x02\"!\n\x0e\x64\x65\x63odeResponse\x12\x0f\n\x07message\x18\x01 \x01(\x05\x32~\n\x0bNeuroCooked\x12<\n\x0c\x61\x64\x64_seq_data\x12\x14.add_seq_dataRequest\x1a\x16.google.protobuf.Empty\x12\x31\n\x06\x64\x65\x63ode\x12\x16.google.protobuf.Empty\x1a\x0f.decodeResponseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'NeuroCooked_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_ADD_SEQ_DATAREQUEST']._serialized_start=50 + _globals['_ADD_SEQ_DATAREQUEST']._serialized_end=110 + _globals['_DECODERESPONSE']._serialized_start=112 + _globals['_DECODERESPONSE']._serialized_end=145 + _globals['_NEUROCOOKED']._serialized_start=147 + _globals['_NEUROCOOKED']._serialized_end=273 +# @@protoc_insertion_point(module_scope) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2_grpc.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2_grpc.py new file mode 100644 index 00000000..dddf6430 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2_grpc.py @@ -0,0 +1,141 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +"""Client and server classes corresponding to protobuf-defined services.""" +import grpc +import warnings + +import NeuroCooked_pb2 as NeuroCooked__pb2 +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + +GRPC_GENERATED_VERSION = '1.67.0' +GRPC_VERSION = grpc.__version__ +_version_not_supported = False + +try: + from grpc._utilities import first_version_is_lower + _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION) +except ImportError: + _version_not_supported = True + +if _version_not_supported: + raise RuntimeError( + f'The grpc package installed is at version {GRPC_VERSION},' + + f' but the generated code in NeuroCooked_pb2_grpc.py depends on' + + f' grpcio>={GRPC_GENERATED_VERSION}.' + + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' + ) + + +class NeuroCookedStub(object): + """Missing associated documentation comment in .proto file.""" + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.add_seq_data = channel.unary_unary( + '/NeuroCooked/add_seq_data', + request_serializer=NeuroCooked__pb2.add_seq_dataRequest.SerializeToString, + response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + _registered_method=True) + self.decode = channel.unary_unary( + '/NeuroCooked/decode', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=NeuroCooked__pb2.decodeResponse.FromString, + _registered_method=True) + + +class NeuroCookedServicer(object): + """Missing associated documentation comment in .proto file.""" + + def add_seq_data(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def decode(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_NeuroCookedServicer_to_server(servicer, server): + rpc_method_handlers = { + 'add_seq_data': grpc.unary_unary_rpc_method_handler( + servicer.add_seq_data, + request_deserializer=NeuroCooked__pb2.add_seq_dataRequest.FromString, + response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + ), + 'decode': grpc.unary_unary_rpc_method_handler( + servicer.decode, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=NeuroCooked__pb2.decodeResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'NeuroCooked', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) + server.add_registered_method_handlers('NeuroCooked', rpc_method_handlers) + + + # This class is part of an EXPERIMENTAL API. +class NeuroCooked(object): + """Missing associated documentation comment in .proto file.""" + + @staticmethod + def add_seq_data(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/NeuroCooked/add_seq_data', + NeuroCooked__pb2.add_seq_dataRequest.SerializeToString, + google_dot_protobuf_dot_empty__pb2.Empty.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def decode(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/NeuroCooked/decode', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + NeuroCooked__pb2.decodeResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) From b69b891b7c323fc2cf26ef35d919c799b896afd3 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Tue, 29 Oct 2024 18:03:25 -0400 Subject: [PATCH 15/26] Updating code --- .../{NeuroCooked.proto => NeuralCooked.proto} | 6 +- .../{NeuroCooked.py => NeuralCooked.py} | 72 ++++++++--------- ...oCookedServer.py => NeuralCookedServer.py} | 10 ++- .../NeuralCooked_pb2.py | 43 ++++++++++ ...d_pb2_grpc.py => NeuralCooked_pb2_grpc.py} | 79 ++++++++++++++----- .../NeuroCooked_pb2.py | 41 ---------- 6 files changed, 150 insertions(+), 101 deletions(-) rename physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/{NeuroCooked.proto => NeuralCooked.proto} (69%) rename physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/{NeuroCooked.py => NeuralCooked.py} (85%) rename physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/{NeuroCookedServer.py => NeuralCookedServer.py} (52%) create mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked_pb2.py rename physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/{NeuroCooked_pb2_grpc.py => NeuralCooked_pb2_grpc.py} (60%) delete mode 100644 physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2.py diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.proto b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.proto similarity index 69% rename from physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.proto rename to physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.proto index 6d2f78eb..456122e2 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.proto +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.proto @@ -1,8 +1,9 @@ syntax = "proto3"; import "google/protobuf/empty.proto"; -service NeuroCooked { +service NeuralCooked { rpc add_seq_data(add_seq_dataRequest) returns (google.protobuf.Empty); rpc decode(google.protobuf.Empty) returns (decodeResponse); + rpc training(google.protobuf.Empty) returns (trainingResponse); } message add_seq_dataRequest { int32 sequenceNum = 1; @@ -10,4 +11,7 @@ message add_seq_dataRequest { } message decodeResponse { int32 message = 1; +} +message trainingResponse { + int32 message = 1; } \ No newline at end of file diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py similarity index 85% rename from physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.py rename to physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py index c8266c44..c4127f65 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py @@ -5,7 +5,7 @@ from physiolabxr.utils.buffers import DataBuffer from physiolabxr.rpc.decorator import rpc, async_rpc -class NeuroCooked(RenaScript): +class NeuralCooked(RenaScript): def __init__(self, *args, **kwargs): """ Please do not edit this function @@ -26,6 +26,7 @@ def init(self): [0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1] #mSequence3 ] self.sequence_length = len(self.mSequence[0]) + self.segment_length = np.floor(self.sequence_length*300 * 0.033) self.mSequenceSignal = { 'segment1': self.generateMSignal(0), 'segment2': self.generateMSignal(1), @@ -61,7 +62,7 @@ def cleanup(self): return #Data Manipulation - def bandpassFilter(self, data, low, high, order = 9): + def bandpassFilter(self, data, lowcutoff, highcutoff): """ Takes in data and applies a bandpass filter to it :param data: EEG data to be bandpassed @@ -72,13 +73,14 @@ def bandpassFilter(self, data, low, high, order = 9): :return: A bandpassed version of the data """ nq = 0.5 * self.frequency - lowpass = low / nq - highpass = high / nq - b, a = butter(order, [ lowpass, highpass], bype = 'band') + order = 1 + lowcutoffnorm = lowcutoff / nq + highcutoffnorm = highcutoff / nq + b, a = butter(order, [ lowcutoffnorm, highcutoffnorm], btype = 'band') BPdata = filtfilt(b,a,data) return BPdata - def appplyFilterBank(self, data): + def applyFilterBank(self, data): """ Returns data in 3 different arrays of different frequncy ranges :param data: list of data to be filtered after data has been segmented @@ -89,15 +91,15 @@ def appplyFilterBank(self, data): filtered_segments = [] # List to hold filtered segments for the current frequency band for segment in data: # Apply bandpass filter to each segment and append the result to the list - filtered_segment = self.bandpassFilter(segment, self.freq_bands[i][0], self.freq_bands[i][1], - self.frequency) + filtered_segment = self.bandpassFilter(segment, self.freq_bands[i][0], self.freq_bands[i][1]) filtered_segments.append(filtered_segment) # Average the filtered segments across the first axis band[self.freq_bands[i]] = np.mean(filtered_segments, axis=0) return band - def adjust_segments(self, segments, segment_length): + def adjust_segments(self, segments, sequence_length): adjusted_segments = [] + segment_length = int(sequence_length * 0.033*300) for segment in segments: # If the segment is shorter than the desired length, pad it with zeros if segment.shape[1] < segment_length: @@ -116,34 +118,28 @@ def createTemplates(self): :param data: EEG data for segmenting into templates :return: dictionary of dictionary of filtered EEG arrays Keys: segment number -> keys frequency band """ - seq1_segments = np.array_split(self.seq1_data, self.seq1_data.shape[1] // self.sequence_length, axis=1) - seq2_segments = np.array_split(self.seq2_data, self.seq2_data.shape[1] // self.sequence_length, axis=1) - seq3_segments = np.array_split(self.seq3_data, self.seq3_data.shape[1] // self.sequence_length, axis=1) + seq1_segments = np.array_split(self.seq1_data, self.seq1_data.shape[1] // self.segment_length, axis=1) + seq2_segments = np.array_split(self.seq2_data, self.seq2_data.shape[1] // self.segment_length, axis=1) + seq3_segments = np.array_split(self.seq3_data, self.seq3_data.shape[1] // self.segment_length, axis=1) - seq1_segments = self.adjust_segments(seq1_segments, self.sequence_length) - seq2_segments = self.adjust_segments(seq2_segments, self.sequence_length) - seq3_segments = self.adjust_segments(seq3_segments, self.sequence_length) + seq1_segments = self.adjust_segments(seq1_segments, self.segment_length) + seq2_segments = self.adjust_segments(seq2_segments, self.segment_length) + seq3_segments = self.adjust_segments(seq3_segments, self.segment_length) self.templates['segment1'] = self.applyFilterBank(seq1_segments) - self.templates['segment3'] = self.applyFilterBank(seq2_segments) + self.templates['segment2'] = self.applyFilterBank(seq2_segments) self.templates['segment3'] = self.applyFilterBank(seq3_segments) def generateMSignal(self, seqNum): - # Step 1: Calculate the total number of samples needed - total_samples = self.sequence_length * 0.033 * 300 - - # Step 2: Calculate the number of samples per m-sequence element - samples_per_bit = total_samples // len(self.mSequence[seqNum]) - - # Step 3: Create the binary signal by repeating each bit + samples_per_bit = self.segment_length // len(self.mSequence[seqNum]) signal = np.repeat(self.mSequence[seqNum], samples_per_bit) # Step 4: If the signal is longer than required, truncate it - if len(signal) > total_samples: - signal = signal[:total_samples] + if len(signal) > self.segment_length: + signal = signal[:self.segment_length] return signal def train_cca(self): """ @@ -179,16 +175,16 @@ def add_seq_data(self, sequenceNum: int, else: self.seq3_data = np.concatenate((self.seq3_data, eegData), axis=1) - @async_rpc - def training(self) -> int: - """ - Args: - input0: int - 1 for choice 1, 2 for choice 2, 3 for choice 3 - Returns: Generates correlation coefficients for EEG data x m-sequence - """ - # Train the CCA - self.train_cca() # start training the CCA - return 1 + @async_rpc + def training(self) -> int: + """ + Args: + input0: int - 1 for choice 1, 2 for choice 2, 3 for choice 3 + Returns: Generates correlation coefficients for EEG data x m-sequence + """ + # Train the CCA + self.train_cca() # start training the CCA + return 1 @async_rpc def decode(self) -> int: # Get the choices decoded so far @@ -218,14 +214,14 @@ def apply_shifting_window_cca(self, data): step_size = window_size/2 # For example, 0.5 second step size for 300 Hz sampling rate segments = [] - for start in range(0, len(data) - window_size + 1, step_size): + for start in range(0, (len(data) - window_size + 1), step_size): segment = data[start:start+window_size] segments.append(segment) #Filter the data filtered_data = {} for band in self.freq_bands: - filtered_data[band] = self.appplyFilterBank(segments) + filtered_data[band] = self.applyFilterBank(segments) correlation = {} avg_correlation = {} #Transform the data with CCA @@ -250,4 +246,4 @@ def evaluate_correlation_coefficients(self, correlation_coefficients): if highest_corr >= second_highest_corr + 0.15: return highest_corr, highest_sequence else: - return highest_corr, -1 \ No newline at end of file + return highest_corr, -1 diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCookedServer.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCookedServer.py similarity index 52% rename from physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCookedServer.py rename to physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCookedServer.py index 50ea8cc0..f7d2a28d 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCookedServer.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCookedServer.py @@ -1,8 +1,8 @@ from google.protobuf import empty_pb2 from google.protobuf.json_format import MessageToDict -import NeuroCooked_pb2_grpc, NeuroCooked_pb2 +import NeuralCooked_pb2_grpc, NeuralCooked_pb2 -class NeuroCookedServer(NeuroCooked_pb2_grpc.NeuroCookedServicer): +class NeuralCookedServer(NeuralCooked_pb2_grpc.NeuralCookedServicer): script_instance = None async def add_seq_data(self, request, context): result = self.script_instance.add_seq_data(**MessageToDict(request)) @@ -10,4 +10,8 @@ async def add_seq_data(self, request, context): async def decode(self, request, context): result = self.script_instance.decode() - return NeuroCooked_pb2.decodeResponse(message=result) + return NeuralCooked_pb2.decodeResponse(message=result) + + async def training(self, request, context): + result = self.script_instance.training() + return NeuralCooked_pb2.trainingResponse(message=result) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked_pb2.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked_pb2.py new file mode 100644 index 00000000..14390554 --- /dev/null +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked_pb2.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# NO CHECKED-IN PROTOBUF GENCODE +# source: NeuralCooked.proto +# Protobuf Python Version: 5.27.2 +"""Generated protocol buffer code.""" +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import runtime_version as _runtime_version +from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import builder as _builder +_runtime_version.ValidateProtobufRuntimeVersion( + _runtime_version.Domain.PUBLIC, + 5, + 27, + 2, + '', + 'NeuralCooked.proto' +) +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12NeuralCooked.proto\x1a\x1bgoogle/protobuf/empty.proto\"<\n\x13\x61\x64\x64_seq_dataRequest\x12\x13\n\x0bsequenceNum\x18\x01 \x01(\x05\x12\x10\n\x08\x64uration\x18\x02 \x01(\x02\"!\n\x0e\x64\x65\x63odeResponse\x12\x0f\n\x07message\x18\x01 \x01(\x05\"#\n\x10trainingResponse\x12\x0f\n\x07message\x18\x01 \x01(\x05\x32\xb6\x01\n\x0cNeuralCooked\x12<\n\x0c\x61\x64\x64_seq_data\x12\x14.add_seq_dataRequest\x1a\x16.google.protobuf.Empty\x12\x31\n\x06\x64\x65\x63ode\x12\x16.google.protobuf.Empty\x1a\x0f.decodeResponse\x12\x35\n\x08training\x12\x16.google.protobuf.Empty\x1a\x11.trainingResponseb\x06proto3') + +_globals = globals() +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'NeuralCooked_pb2', _globals) +if not _descriptor._USE_C_DESCRIPTORS: + DESCRIPTOR._loaded_options = None + _globals['_ADD_SEQ_DATAREQUEST']._serialized_start=51 + _globals['_ADD_SEQ_DATAREQUEST']._serialized_end=111 + _globals['_DECODERESPONSE']._serialized_start=113 + _globals['_DECODERESPONSE']._serialized_end=146 + _globals['_TRAININGRESPONSE']._serialized_start=148 + _globals['_TRAININGRESPONSE']._serialized_end=183 + _globals['_NEURALCOOKED']._serialized_start=186 + _globals['_NEURALCOOKED']._serialized_end=368 +# @@protoc_insertion_point(module_scope) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2_grpc.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked_pb2_grpc.py similarity index 60% rename from physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2_grpc.py rename to physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked_pb2_grpc.py index dddf6430..129b6743 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2_grpc.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked_pb2_grpc.py @@ -3,7 +3,7 @@ import grpc import warnings -import NeuroCooked_pb2 as NeuroCooked__pb2 +import NeuralCooked_pb2 as NeuralCooked__pb2 from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 GRPC_GENERATED_VERSION = '1.67.0' @@ -19,14 +19,14 @@ if _version_not_supported: raise RuntimeError( f'The grpc package installed is at version {GRPC_VERSION},' - + f' but the generated code in NeuroCooked_pb2_grpc.py depends on' + + f' but the generated code in NeuralCooked_pb2_grpc.py depends on' + f' grpcio>={GRPC_GENERATED_VERSION}.' + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}' + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.' ) -class NeuroCookedStub(object): +class NeuralCookedStub(object): """Missing associated documentation comment in .proto file.""" def __init__(self, channel): @@ -36,18 +36,23 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.add_seq_data = channel.unary_unary( - '/NeuroCooked/add_seq_data', - request_serializer=NeuroCooked__pb2.add_seq_dataRequest.SerializeToString, + '/NeuralCooked/add_seq_data', + request_serializer=NeuralCooked__pb2.add_seq_dataRequest.SerializeToString, response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, _registered_method=True) self.decode = channel.unary_unary( - '/NeuroCooked/decode', + '/NeuralCooked/decode', request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - response_deserializer=NeuroCooked__pb2.decodeResponse.FromString, + response_deserializer=NeuralCooked__pb2.decodeResponse.FromString, + _registered_method=True) + self.training = channel.unary_unary( + '/NeuralCooked/training', + request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + response_deserializer=NeuralCooked__pb2.trainingResponse.FromString, _registered_method=True) -class NeuroCookedServicer(object): +class NeuralCookedServicer(object): """Missing associated documentation comment in .proto file.""" def add_seq_data(self, request, context): @@ -62,28 +67,39 @@ def decode(self, request, context): context.set_details('Method not implemented!') raise NotImplementedError('Method not implemented!') + def training(self, request, context): + """Missing associated documentation comment in .proto file.""" + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + -def add_NeuroCookedServicer_to_server(servicer, server): +def add_NeuralCookedServicer_to_server(servicer, server): rpc_method_handlers = { 'add_seq_data': grpc.unary_unary_rpc_method_handler( servicer.add_seq_data, - request_deserializer=NeuroCooked__pb2.add_seq_dataRequest.FromString, + request_deserializer=NeuralCooked__pb2.add_seq_dataRequest.FromString, response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, ), 'decode': grpc.unary_unary_rpc_method_handler( servicer.decode, request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, - response_serializer=NeuroCooked__pb2.decodeResponse.SerializeToString, + response_serializer=NeuralCooked__pb2.decodeResponse.SerializeToString, + ), + 'training': grpc.unary_unary_rpc_method_handler( + servicer.training, + request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, + response_serializer=NeuralCooked__pb2.trainingResponse.SerializeToString, ), } generic_handler = grpc.method_handlers_generic_handler( - 'NeuroCooked', rpc_method_handlers) + 'NeuralCooked', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - server.add_registered_method_handlers('NeuroCooked', rpc_method_handlers) + server.add_registered_method_handlers('NeuralCooked', rpc_method_handlers) # This class is part of an EXPERIMENTAL API. -class NeuroCooked(object): +class NeuralCooked(object): """Missing associated documentation comment in .proto file.""" @staticmethod @@ -100,8 +116,8 @@ def add_seq_data(request, return grpc.experimental.unary_unary( request, target, - '/NeuroCooked/add_seq_data', - NeuroCooked__pb2.add_seq_dataRequest.SerializeToString, + '/NeuralCooked/add_seq_data', + NeuralCooked__pb2.add_seq_dataRequest.SerializeToString, google_dot_protobuf_dot_empty__pb2.Empty.FromString, options, channel_credentials, @@ -127,9 +143,36 @@ def decode(request, return grpc.experimental.unary_unary( request, target, - '/NeuroCooked/decode', + '/NeuralCooked/decode', + google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, + NeuralCooked__pb2.decodeResponse.FromString, + options, + channel_credentials, + insecure, + call_credentials, + compression, + wait_for_ready, + timeout, + metadata, + _registered_method=True) + + @staticmethod + def training(request, + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): + return grpc.experimental.unary_unary( + request, + target, + '/NeuralCooked/training', google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, - NeuroCooked__pb2.decodeResponse.FromString, + NeuralCooked__pb2.trainingResponse.FromString, options, channel_credentials, insecure, diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2.py deleted file mode 100644 index 6d3be5fe..00000000 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuroCooked_pb2.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by the protocol buffer compiler. DO NOT EDIT! -# NO CHECKED-IN PROTOBUF GENCODE -# source: NeuroCooked.proto -# Protobuf Python Version: 5.27.2 -"""Generated protocol buffer code.""" -from google.protobuf import descriptor as _descriptor -from google.protobuf import descriptor_pool as _descriptor_pool -from google.protobuf import runtime_version as _runtime_version -from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import builder as _builder -_runtime_version.ValidateProtobufRuntimeVersion( - _runtime_version.Domain.PUBLIC, - 5, - 27, - 2, - '', - 'NeuroCooked.proto' -) -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 - - -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11NeuroCooked.proto\x1a\x1bgoogle/protobuf/empty.proto\"<\n\x13\x61\x64\x64_seq_dataRequest\x12\x13\n\x0bsequenceNum\x18\x01 \x01(\x05\x12\x10\n\x08\x64uration\x18\x02 \x01(\x02\"!\n\x0e\x64\x65\x63odeResponse\x12\x0f\n\x07message\x18\x01 \x01(\x05\x32~\n\x0bNeuroCooked\x12<\n\x0c\x61\x64\x64_seq_data\x12\x14.add_seq_dataRequest\x1a\x16.google.protobuf.Empty\x12\x31\n\x06\x64\x65\x63ode\x12\x16.google.protobuf.Empty\x1a\x0f.decodeResponseb\x06proto3') - -_globals = globals() -_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) -_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'NeuroCooked_pb2', _globals) -if not _descriptor._USE_C_DESCRIPTORS: - DESCRIPTOR._loaded_options = None - _globals['_ADD_SEQ_DATAREQUEST']._serialized_start=50 - _globals['_ADD_SEQ_DATAREQUEST']._serialized_end=110 - _globals['_DECODERESPONSE']._serialized_start=112 - _globals['_DECODERESPONSE']._serialized_end=145 - _globals['_NEUROCOOKED']._serialized_start=147 - _globals['_NEUROCOOKED']._serialized_end=273 -# @@protoc_insertion_point(module_scope) From bc33e061cd897748be3e25b246380c882a654637 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Tue, 29 Oct 2024 18:37:18 -0400 Subject: [PATCH 16/26] Miniscule update --- .../NeuralCooked.py | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py index c4127f65..9c5eea23 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py @@ -97,17 +97,16 @@ def applyFilterBank(self, data): # Average the filtered segments across the first axis band[self.freq_bands[i]] = np.mean(filtered_segments, axis=0) return band - def adjust_segments(self, segments, sequence_length): + def adjust_segments(self, segments): adjusted_segments = [] - segment_length = int(sequence_length * 0.033*300) for segment in segments: # If the segment is shorter than the desired length, pad it with zeros - if segment.shape[1] < segment_length: - padding = np.zeros((segment.shape[0], segment_length - segment.shape[1])) + if segment.shape[1] < self.segment_length: + padding = np.zeros((segment.shape[0], self.segment_length - segment.shape[1])) adjusted_segment = np.hstack((segment, padding)) # Pad with zeros else: # If the segment is longer, trim it to the desired length - adjusted_segment = segment[:, :segment_length] + adjusted_segment = segment[:, :self.segment_length] adjusted_segments.append(adjusted_segment) @@ -118,16 +117,16 @@ def createTemplates(self): :param data: EEG data for segmenting into templates :return: dictionary of dictionary of filtered EEG arrays Keys: segment number -> keys frequency band """ - seq1_segments = np.array_split(self.seq1_data, self.seq1_data.shape[1] // self.segment_length, axis=1) + seq1_segments = np.array_split(self.seq1_data, self.seq1_data.shape[1] // self.segment_length, axis=1) #size segment_length seq2_segments = np.array_split(self.seq2_data, self.seq2_data.shape[1] // self.segment_length, axis=1) seq3_segments = np.array_split(self.seq3_data, self.seq3_data.shape[1] // self.segment_length, axis=1) - seq1_segments = self.adjust_segments(seq1_segments, self.segment_length) - seq2_segments = self.adjust_segments(seq2_segments, self.segment_length) - seq3_segments = self.adjust_segments(seq3_segments, self.segment_length) + seq1_segments = self.adjust_segments(seq1_segments) #size segment_length + seq2_segments = self.adjust_segments(seq2_segments) + seq3_segments = self.adjust_segments(seq3_segments) - self.templates['segment1'] = self.applyFilterBank(seq1_segments) + self.templates['segment1'] = self.applyFilterBank(seq1_segments) #size_segment_length self.templates['segment2'] = self.applyFilterBank(seq2_segments) self.templates['segment3'] = self.applyFilterBank(seq3_segments) From adf470c30c216c5277a8ebdd7f1c111c854ff336 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Wed, 30 Oct 2024 17:16:11 -0400 Subject: [PATCH 17/26] finished training part of the code --- .../NeuralCooked.py | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py index 9c5eea23..91cfbb59 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py @@ -26,7 +26,7 @@ def init(self): [0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1] #mSequence3 ] self.sequence_length = len(self.mSequence[0]) - self.segment_length = np.floor(self.sequence_length*300 * 0.033) + self.segment_length = int(np.floor(self.sequence_length*300 * 0.033)) self.mSequenceSignal = { 'segment1': self.generateMSignal(0), 'segment2': self.generateMSignal(1), @@ -49,7 +49,8 @@ def loop(self): if self.data.get_data('EEG Data').shape[1] > 60000: #if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds self.data.clear_stream_up_to_index(stream_name= 'EEG Data', cut_to_index= self.data.get_data('EEG Data').shape[1]-60000) if len(self.ccaModel) == 3: #if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously - self.decode_choice() #adding + if self.data.get_data('EEG Data').shape[1] < self.segment_length: + self.decode_choice() #adding def cleanup(self): self.freq_bands = [(8, 60), (12, 60), (30, 60)] @@ -134,10 +135,14 @@ def createTemplates(self): def generateMSignal(self, seqNum): samples_per_bit = self.segment_length // len(self.mSequence[seqNum]) - signal = np.repeat(self.mSequence[seqNum], samples_per_bit) + signal = np.repeat(self.mSequence[seqNum], samples_per_bit ) # Step 4: If the signal is longer than required, truncate it if len(signal) > self.segment_length: + signal = signal[:, :self.segment_length] + elif len(signal) < self.segment_length: + padding= int(np.ceil((self.segment_length - len(signal))/2)+1) + signal = np.pad(signal, pad_width=padding, mode = 'constant', constant_values= 0) signal = signal[:self.segment_length] return signal def train_cca(self): @@ -146,7 +151,7 @@ def train_cca(self): By generated spatial filters and templates for each target m-sequence """ self.createTemplates() - + self.ccaModel = self.templates for segment in self.templates.keys(): for freqBand in self.templates[segment].keys(): cca = CCA(n_components = 1) @@ -199,10 +204,8 @@ def decode(self) -> int: # Return the most common detected choice return user_choice def decode_choice(self): - self.correlation_coefficients = self.apply_shifting_window_cca( - self.data.get_data('EEG Data')) # getting the correlation coefficients by applying shifting window CCA - highest_correlation, detected_choice = self.evaluate_correlation_coefficients( - self.correlation_coefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice + self.correlation_coefficients = self.apply_shifting_window_cca(self.data.get_data('EEG Data')) # getting the correlation coefficients by applying shifting window CCA + highest_correlation, detected_choice = self.evaluate_correlation_coefficients(self.correlation_coefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice self.decoded_choices.append[detected_choice] def apply_shifting_window_cca(self, data): @@ -213,7 +216,7 @@ def apply_shifting_window_cca(self, data): step_size = window_size/2 # For example, 0.5 second step size for 300 Hz sampling rate segments = [] - for start in range(0, (len(data) - window_size + 1), step_size): + for start in range(0, (len(data)), step_size): segment = data[start:start+window_size] segments.append(segment) From f39861f53f6520df48d04c1457ae822c5ac4cbcf Mon Sep 17 00:00:00 2001 From: LommyTea Date: Wed, 30 Oct 2024 18:47:22 -0400 Subject: [PATCH 18/26] There is an issue with the applyFilterBank function where the filtered segments are not arrays --- .../NeuralCooked.py | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py index 91cfbb59..8c245701 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py @@ -44,12 +44,11 @@ def loop(self): 'frames': self.inputs['DSI24'][0][14:18, :].astype(float), #choosing the correct channels 'timestamps': self.inputs['DSI24'][1].astype(float) #defining the timestamps } - Sequence_Data = {} #creating a dictionary for sequence data self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data if self.data.get_data('EEG Data').shape[1] > 60000: #if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds self.data.clear_stream_up_to_index(stream_name= 'EEG Data', cut_to_index= self.data.get_data('EEG Data').shape[1]-60000) if len(self.ccaModel) == 3: #if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously - if self.data.get_data('EEG Data').shape[1] < self.segment_length: + if self.data.get_data('EEG Data').shape[1] > self.segment_length: self.decode_choice() #adding def cleanup(self): @@ -193,14 +192,14 @@ def training(self) -> int: def decode(self) -> int: # Get the choices decoded so far choices = self.decoded_choices - - # Determine the most common choice - user_choice = max(set(choices), key=choices.count) - - # Clear the decoded choices list for the next round - self.decoded_choices = [] - self.data.clear_buffer_data('EEG Data') - + if choices != []: + # Determine the most common choice + user_choice = max(set(choices), key=choices.count) + self.decoded_choices = [] + self.data.clear_buffer_data('EEG Data') + else: + print('not enough time has passed') + user_choice = 0 # Return the most common detected choice return user_choice def decode_choice(self): @@ -212,11 +211,11 @@ def apply_shifting_window_cca(self, data): """ Applies shifting window CCA to the filtered band data. """ - window_size = self.sequence_length * 0.033 * 300 # For example, 1 second window for 300 Hz sampling rate - step_size = window_size/2 # For example, 0.5 second step size for 300 Hz sampling rate + window_size = int(self.sequence_length * 0.033 * 300) # For example, 1 second window for 300 Hz sampling rate + step_size = int(window_size/2) # For example, 0.5 second step size for 300 Hz sampling rate segments = [] - for start in range(0, (len(data)), step_size): + for start in range(0, data.shape[1], step_size): segment = data[start:start+window_size] segments.append(segment) From 6ab3a64b4a39e8c3efd04600e463d630861e5e7f Mon Sep 17 00:00:00 2001 From: LommyTea Date: Thu, 31 Oct 2024 17:29:32 -0400 Subject: [PATCH 19/26] Updating NeuralCooked --- .../NeuralCooked.py | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py index 8c245701..cf03c081 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py @@ -27,7 +27,7 @@ def init(self): ] self.sequence_length = len(self.mSequence[0]) self.segment_length = int(np.floor(self.sequence_length*300 * 0.033)) - self.mSequenceSignal = { + self.mSequenceSignal = { 'segment1': self.generateMSignal(0), 'segment2': self.generateMSignal(1), 'segment3': self.generateMSignal(2) @@ -150,9 +150,10 @@ def train_cca(self): By generated spatial filters and templates for each target m-sequence """ self.createTemplates() - self.ccaModel = self.templates + self.ccaModel = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} for segment in self.templates.keys(): for freqBand in self.templates[segment].keys(): + cca = None cca = CCA(n_components = 1) cca.fit(self.templates[segment][freqBand].T,self.mSequenceSignal[segment]) self.ccaModel[segment][freqBand] = cca @@ -187,6 +188,7 @@ def training(self) -> int: """ # Train the CCA self.train_cca() # start training the CCA + self.data.clear_buffer_data() #Clear the buffer after training return 1 @async_rpc def decode(self) -> int: @@ -196,7 +198,7 @@ def decode(self) -> int: # Determine the most common choice user_choice = max(set(choices), key=choices.count) self.decoded_choices = [] - self.data.clear_buffer_data('EEG Data') + self.data.clear_buffer_data() else: print('not enough time has passed') user_choice = 0 @@ -216,22 +218,23 @@ def apply_shifting_window_cca(self, data): segments = [] for start in range(0, data.shape[1], step_size): - segment = data[start:start+window_size] - segments.append(segment) + if start+window_size < data.shape[1]: + segment = data[:, start:start+window_size] + segments.append(segment) #For some reason the segments created are not of the shape #Filter the data filtered_data = {} - for band in self.freq_bands: - filtered_data[band] = self.applyFilterBank(segments) + filtered_data = self.applyFilterBank(segments) + self.ccaResults = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} #temporarily assigns the dictionary so that we can use the keys + correlation = {} avg_correlation = {} #Transform the data with CCA for segment in self.templates.keys(): for freqBand in self.templates[segment].keys(): cca = self.ccaModel[segment][freqBand] - self.ccaResults[segment][freqBand] = cca.transform(filtered_data[freqBand]) - - correlation[segment][freqBand] = np.corrcoef(self.ccaResults[segment][freqBand], self.templates[segment][freqBand]) + self.ccaResults[segment][freqBand] = cca.transform(filtered_data[freqBand].T).flatten() + correlation[segment][freqBand] = np.corrcoef(self.ccaResults[segment][freqBand], self.mSequenceSignal[segment]) avg_correlation[segment] = np.mean(correlation[segment].values()) return avg_correlation From 997217da3a4127e971a658a168eb78c264fed1c7 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Mon, 4 Nov 2024 19:28:47 -0500 Subject: [PATCH 20/26] all data works now but CCA model does not have good correlation values --- .../NeuralCooked.py | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py index cf03c081..30536c21 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py @@ -21,9 +21,9 @@ def init(self): self.ccaResults= {} self.decoded_choices = [] #creating a list to store all of the decoded choices self.mSequence = [ - [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0], #mSequence1 - [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1], #mSequence2 - [0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1] #mSequence3 + [0,0,0,1,1,1,1,0,1,0,1,1,0,0,1], #mSequence1 + [1,0,1,1,0,0,1,0,0,0,1,1,1,1,0], #mSequence2 + [0,1,1,1,1,0,1,0,1,1,0,0,1,0,0] #mSequence3 ] self.sequence_length = len(self.mSequence[0]) self.segment_length = int(np.floor(self.sequence_length*300 * 0.033)) @@ -130,7 +130,6 @@ def createTemplates(self): self.templates['segment2'] = self.applyFilterBank(seq2_segments) self.templates['segment3'] = self.applyFilterBank(seq3_segments) - def generateMSignal(self, seqNum): samples_per_bit = self.segment_length // len(self.mSequence[seqNum]) @@ -144,6 +143,7 @@ def generateMSignal(self, seqNum): signal = np.pad(signal, pad_width=padding, mode = 'constant', constant_values= 0) signal = signal[:self.segment_length] return signal + def train_cca(self): """ Training the CCA model @@ -153,9 +153,8 @@ def train_cca(self): self.ccaModel = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} for segment in self.templates.keys(): for freqBand in self.templates[segment].keys(): - cca = None cca = CCA(n_components = 1) - cca.fit(self.templates[segment][freqBand].T,self.mSequenceSignal[segment]) + cca.fit(self.templates[segment][freqBand].T,self.mSequenceSignal[segment].T) self.ccaModel[segment][freqBand] = cca @async_rpc @@ -194,7 +193,7 @@ def training(self) -> int: def decode(self) -> int: # Get the choices decoded so far choices = self.decoded_choices - if choices != []: + if len(choices) > 2: # Determine the most common choice user_choice = max(set(choices), key=choices.count) self.decoded_choices = [] @@ -207,7 +206,7 @@ def decode(self) -> int: def decode_choice(self): self.correlation_coefficients = self.apply_shifting_window_cca(self.data.get_data('EEG Data')) # getting the correlation coefficients by applying shifting window CCA highest_correlation, detected_choice = self.evaluate_correlation_coefficients(self.correlation_coefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice - self.decoded_choices.append[detected_choice] + self.decoded_choices.append(detected_choice) def apply_shifting_window_cca(self, data): """ @@ -227,27 +226,28 @@ def apply_shifting_window_cca(self, data): filtered_data = self.applyFilterBank(segments) self.ccaResults = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} #temporarily assigns the dictionary so that we can use the keys - correlation = {} + correlation = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} avg_correlation = {} #Transform the data with CCA for segment in self.templates.keys(): for freqBand in self.templates[segment].keys(): cca = self.ccaModel[segment][freqBand] - self.ccaResults[segment][freqBand] = cca.transform(filtered_data[freqBand].T).flatten() - correlation[segment][freqBand] = np.corrcoef(self.ccaResults[segment][freqBand], self.mSequenceSignal[segment]) - avg_correlation[segment] = np.mean(correlation[segment].values()) + self.ccaResults[segment][freqBand] = cca.transform(filtered_data[freqBand].T) + correlation[segment][freqBand] = np.corrcoef(self.ccaResults[segment][freqBand].flatten(), self.mSequenceSignal[segment])[0,1] + print(segment, freqBand, correlation[segment][freqBand]) + avg_correlation[segment] = np.mean(list(correlation[segment].values())) + print(avg_correlation) return avg_correlation def evaluate_correlation_coefficients(self, correlation_coefficients): # Sort the sequences by their average correlation in descending order sorted_correlations = sorted(correlation_coefficients.items(), key=lambda item: item[1], reverse=True) - # Get the highest and second-highest correlations highest_sequence, highest_corr = sorted_correlations[0] second_highest_sequence, second_highest_corr = sorted_correlations[1] # Check if the highest correlation is at least 0.15 higher than the second highest - if highest_corr >= second_highest_corr + 0.15: - return highest_corr, highest_sequence + if highest_corr >= second_highest_corr + 0.01: + return highest_corr, int(highest_sequence[-1]) else: - return highest_corr, -1 + return highest_corr, 0 From addeac84cf5a3c41140cf8cd0562861642ca975a Mon Sep 17 00:00:00 2001 From: LommyTea Date: Wed, 6 Nov 2024 15:08:52 -0500 Subject: [PATCH 21/26] troubleshooting correlation errors --- .../DeviceInterface/DSI24/DSI24_Process.py | 1 - .../NeuralCooked.py | 23 +++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py index 6b8952c9..cc7fd211 100644 --- a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py +++ b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py @@ -82,7 +82,6 @@ def example_sample_callback_impedances(headsetPtr, packetTime, userData): impedance_data = impedance_data[[10,11,5,4,6,16,17,9,3,7,12,19,13,18,0,8,14,15,1,2], :] empty_rows = np.empty((3,impedance_data.shape[1]), dtype=object) impedance_data = np.concatenate((impedance_data, empty_rows)) - print(impedance_data) # Add the common-mode function (CMF) impedance value at the end cmf_impedance = np.array([h.GetImpedanceCMF()]) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py index 30536c21..7b86cf15 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py @@ -51,6 +51,7 @@ def loop(self): if self.data.get_data('EEG Data').shape[1] > self.segment_length: self.decode_choice() #adding + def cleanup(self): self.freq_bands = [(8, 60), (12, 60), (30, 60)] self.mSequence = [] @@ -73,7 +74,7 @@ def bandpassFilter(self, data, lowcutoff, highcutoff): :return: A bandpassed version of the data """ nq = 0.5 * self.frequency - order = 1 + order = 8 lowcutoffnorm = lowcutoff / nq highcutoffnorm = highcutoff / nq b, a = butter(order, [ lowcutoffnorm, highcutoffnorm], btype = 'band') @@ -135,14 +136,17 @@ def generateMSignal(self, seqNum): samples_per_bit = self.segment_length // len(self.mSequence[seqNum]) signal = np.repeat(self.mSequence[seqNum], samples_per_bit ) + ##Change signal to be another dictionary holding freq bands and the respective + # Step 4: If the signal is longer than required, truncate it if len(signal) > self.segment_length: signal = signal[:, :self.segment_length] elif len(signal) < self.segment_length: - padding= int(np.ceil((self.segment_length - len(signal))/2)+1) + padding = int(np.ceil((self.segment_length - len(signal))/2)+1) signal = np.pad(signal, pad_width=padding, mode = 'constant', constant_values= 0) signal = signal[:self.segment_length] - return signal + filteredSignal = self.applyFilterBank([signal]) + return filteredSignal def train_cca(self): """ @@ -154,7 +158,7 @@ def train_cca(self): for segment in self.templates.keys(): for freqBand in self.templates[segment].keys(): cca = CCA(n_components = 1) - cca.fit(self.templates[segment][freqBand].T,self.mSequenceSignal[segment].T) + cca.fit(self.templates[segment][freqBand].T,self.mSequenceSignal[segment][freqBand].T) self.ccaModel[segment][freqBand] = cca @async_rpc @@ -193,11 +197,13 @@ def training(self) -> int: def decode(self) -> int: # Get the choices decoded so far choices = self.decoded_choices - if len(choices) > 2: + print(choices) + if len([x for x in choices if x != 0]) > 5: # Determine the most common choice user_choice = max(set(choices), key=choices.count) self.decoded_choices = [] self.data.clear_buffer_data() + else: print('not enough time has passed') user_choice = 0 @@ -213,7 +219,7 @@ def apply_shifting_window_cca(self, data): Applies shifting window CCA to the filtered band data. """ window_size = int(self.sequence_length * 0.033 * 300) # For example, 1 second window for 300 Hz sampling rate - step_size = int(window_size/2) # For example, 0.5 second step size for 300 Hz sampling rate + step_size = int(window_size/8) # For example, 0.5 second step size for 300 Hz sampling rate segments = [] for start in range(0, data.shape[1], step_size): @@ -233,8 +239,7 @@ def apply_shifting_window_cca(self, data): for freqBand in self.templates[segment].keys(): cca = self.ccaModel[segment][freqBand] self.ccaResults[segment][freqBand] = cca.transform(filtered_data[freqBand].T) - correlation[segment][freqBand] = np.corrcoef(self.ccaResults[segment][freqBand].flatten(), self.mSequenceSignal[segment])[0,1] - print(segment, freqBand, correlation[segment][freqBand]) + correlation[segment][freqBand] = np.corrcoef(self.ccaResults[segment][freqBand].flatten(), self.mSequenceSignal[segment][freqBand])[0,1] avg_correlation[segment] = np.mean(list(correlation[segment].values())) print(avg_correlation) return avg_correlation @@ -247,7 +252,7 @@ def evaluate_correlation_coefficients(self, correlation_coefficients): second_highest_sequence, second_highest_corr = sorted_correlations[1] # Check if the highest correlation is at least 0.15 higher than the second highest - if highest_corr >= second_highest_corr + 0.01: + if highest_corr >= second_highest_corr + 0.1: return highest_corr, int(highest_sequence[-1]) else: return highest_corr, 0 From 8bade7b596d8edb725146e7c1d8c613e8d4ca09c Mon Sep 17 00:00:00 2001 From: LommyTea Date: Thu, 14 Nov 2024 17:25:21 -0500 Subject: [PATCH 22/26] Still troubleshooting accuracy rates --- .../NeuralCooked.py | 115 +++++++++++------- 1 file changed, 70 insertions(+), 45 deletions(-) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py index 7b86cf15..91433071 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py @@ -1,10 +1,10 @@ -from scipy.signal import butter, filtfilt +from scipy.signal import butter, filtfilt, iirnotch from sklearn.cross_decomposition import CCA import numpy as np from physiolabxr.scripting.RenaScript import RenaScript from physiolabxr.utils.buffers import DataBuffer from physiolabxr.rpc.decorator import rpc, async_rpc - +import time class NeuralCooked(RenaScript): def __init__(self, *args, **kwargs): """ @@ -21,35 +21,44 @@ def init(self): self.ccaResults= {} self.decoded_choices = [] #creating a list to store all of the decoded choices self.mSequence = [ - [0,0,0,1,1,1,1,0,1,0,1,1,0,0,1], #mSequence1 - [1,0,1,1,0,0,1,0,0,0,1,1,1,1,0], #mSequence2 - [0,1,1,1,1,0,1,0,1,1,0,0,1,0,0] #mSequence3 + [0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0], #mSequence1 + [0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0], #mSequence2 + [1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0] #mSequence3 ] self.sequence_length = len(self.mSequence[0]) self.segment_length = int(np.floor(self.sequence_length*300 * 0.033)) self.mSequenceSignal = { - 'segment1': self.generateMSignal(0), - 'segment2': self.generateMSignal(1), - 'segment3': self.generateMSignal(2) + 'sequence1': self.generateMSignal(0), + 'sequence2': self.generateMSignal(1), + 'sequence3': self.generateMSignal(2) } self.seq1_data = np.array([[]]) self.seq2_data = np.array([[]]) self.seq3_data = np.array([[]]) + self.game_start = 0 def loop(self): if self.inputs: + unfilteredData = self.inputs['DSI24'][0][14:18, :].astype(float) + filteredData1 = self.bandpassFilter(unfilteredData, 2,120) + filteredData2 = self.notchFilter(filteredData1,60) + + EEG_Data = { #creating a dictionary for EEG data 'stream_name': 'EEG Data', #defining the stream name - 'frames': self.inputs['DSI24'][0][14:18, :].astype(float), #choosing the correct channels + 'frames': filteredData2, #choosing the correct channels 'timestamps': self.inputs['DSI24'][1].astype(float) #defining the timestamps } self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data - if self.data.get_data('EEG Data').shape[1] > 60000: #if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds - self.data.clear_stream_up_to_index(stream_name= 'EEG Data', cut_to_index= self.data.get_data('EEG Data').shape[1]-60000) - if len(self.ccaModel) == 3: #if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously - if self.data.get_data('EEG Data').shape[1] > self.segment_length: - self.decode_choice() #adding + Data = self.data.get_data('EEG Data') + if Data.shape[1] > 3600: #if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds + self.data.clear_stream_up_to_index(stream_name= 'EEG Data', cut_to_index= self.data.get_data('EEG Data').shape[1]-1800) + if self.game_start == 1: #if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously + if Data.shape[1] > self.segment_length: + self.decode_choice() + if len(self.decoded_choices)> 7: + self.decoded_choices = self.decoded_choices[len(self.decoded_choices)-5:] def cleanup(self): @@ -80,7 +89,19 @@ def bandpassFilter(self, data, lowcutoff, highcutoff): b, a = butter(order, [ lowcutoffnorm, highcutoffnorm], btype = 'band') BPdata = filtfilt(b,a,data) return BPdata + def notchFilter(self, data, notchfreq, qualityFactor = 30): + """ + :param data: signal to be filtered + :param notchfreq: frequency to notch + :param qualityFactor: quality factor of the notch filter that determines the width of the notch + :return: filtered array + """ + # Design the notch filter + b, a = iirnotch(notchfreq, qualityFactor, self.frequency) + # Apply the filter to the data + filtered_data = filtfilt(b, a, data) + return filtered_data def applyFilterBank(self, data): """ Returns data in 3 different arrays of different frequncy ranges @@ -89,14 +110,14 @@ def applyFilterBank(self, data): """ band = {} #Dictionary created to fill in for i in range(3): - filtered_segments = [] # List to hold filtered segments for the current frequency band + filtered_segments = np.empty((4,data[0].shape[1],0)) # List to hold filtered segments for the current frequency band for segment in data: # Apply bandpass filter to each segment and append the result to the list filtered_segment = self.bandpassFilter(segment, self.freq_bands[i][0], self.freq_bands[i][1]) - filtered_segments.append(filtered_segment) + filtered_segments = np.concatenate((filtered_segments, filtered_segment[:,:,np.newaxis]),axis =2) # Average the filtered segments across the first axis - band[self.freq_bands[i]] = np.mean(filtered_segments, axis=0) + band[self.freq_bands[i]] = np.mean(filtered_segments, axis=2) return band def adjust_segments(self, segments): adjusted_segments = [] @@ -127,9 +148,9 @@ def createTemplates(self): seq3_segments = self.adjust_segments(seq3_segments) - self.templates['segment1'] = self.applyFilterBank(seq1_segments) #size_segment_length - self.templates['segment2'] = self.applyFilterBank(seq2_segments) - self.templates['segment3'] = self.applyFilterBank(seq3_segments) + self.templates['sequence1'] = self.applyFilterBank(seq1_segments) #size_segment_length + self.templates['sequence2'] = self.applyFilterBank(seq2_segments) + self.templates['sequence3'] = self.applyFilterBank(seq3_segments) def generateMSignal(self, seqNum): @@ -141,12 +162,15 @@ def generateMSignal(self, seqNum): # Step 4: If the signal is longer than required, truncate it if len(signal) > self.segment_length: signal = signal[:, :self.segment_length] + + elif len(signal) < self.segment_length: padding = int(np.ceil((self.segment_length - len(signal))/2)+1) signal = np.pad(signal, pad_width=padding, mode = 'constant', constant_values= 0) signal = signal[:self.segment_length] - filteredSignal = self.applyFilterBank([signal]) - return filteredSignal + Msignal = [np.tile(signal, (4, 1))] + FilteredMsignal = self.applyFilterBank(Msignal) + return FilteredMsignal def train_cca(self): """ @@ -155,15 +179,15 @@ def train_cca(self): """ self.createTemplates() self.ccaModel = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} - for segment in self.templates.keys(): - for freqBand in self.templates[segment].keys(): + for sequence in self.templates.keys(): + for freqBand in self.templates[sequence].keys(): cca = CCA(n_components = 1) - cca.fit(self.templates[segment][freqBand].T,self.mSequenceSignal[segment][freqBand].T) - self.ccaModel[segment][freqBand] = cca + cca.fit(self.templates[sequence][freqBand].T, self.mSequenceSignal[sequence][freqBand].T) + self.ccaModel[sequence][freqBand] = cca + print('training done') @async_rpc - def add_seq_data(self, sequenceNum: int, - duration: float): # Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat + def add_seq_data(self, sequenceNum: int, duration: float): # Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat eegData = self.data.get_data('EEG Data')[:, int(-duration * 300):] # 4 by (samples) if sequenceNum == 1: @@ -195,31 +219,34 @@ def training(self) -> int: return 1 @async_rpc def decode(self) -> int: + self.game_start = 1 # Get the choices decoded so far choices = self.decoded_choices - print(choices) - if len([x for x in choices if x != 0]) > 5: + if len([x for x in choices if x != None]) > 2: # Determine the most common choice - user_choice = max(set(choices), key=choices.count) + user_choice = max(set([x for x in choices if x != None]), key=choices.count) + print(choices, user_choice) self.decoded_choices = [] self.data.clear_buffer_data() + else: - print('not enough time has passed') user_choice = 0 # Return the most common detected choice return user_choice def decode_choice(self): + self.correlation_coefficients = self.apply_shifting_window_cca(self.data.get_data('EEG Data')) # getting the correlation coefficients by applying shifting window CCA highest_correlation, detected_choice = self.evaluate_correlation_coefficients(self.correlation_coefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice - self.decoded_choices.append(detected_choice) + if detected_choice != None: + self.decoded_choices.append(detected_choice) def apply_shifting_window_cca(self, data): """ Applies shifting window CCA to the filtered band data. """ window_size = int(self.sequence_length * 0.033 * 300) # For example, 1 second window for 300 Hz sampling rate - step_size = int(window_size/8) # For example, 0.5 second step size for 300 Hz sampling rate + step_size = int(window_size/4) # For example, 0.5 second step size for 300 Hz sampling rate segments = [] for start in range(0, data.shape[1], step_size): @@ -228,20 +255,19 @@ def apply_shifting_window_cca(self, data): segments.append(segment) #For some reason the segments created are not of the shape #Filter the data - filtered_data = {} filtered_data = self.applyFilterBank(segments) self.ccaResults = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} #temporarily assigns the dictionary so that we can use the keys correlation = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} avg_correlation = {} #Transform the data with CCA - for segment in self.templates.keys(): - for freqBand in self.templates[segment].keys(): - cca = self.ccaModel[segment][freqBand] - self.ccaResults[segment][freqBand] = cca.transform(filtered_data[freqBand].T) - correlation[segment][freqBand] = np.corrcoef(self.ccaResults[segment][freqBand].flatten(), self.mSequenceSignal[segment][freqBand])[0,1] - avg_correlation[segment] = np.mean(list(correlation[segment].values())) - print(avg_correlation) + for sequence in self.templates.keys(): + for freqBand in self.templates[sequence].keys(): + cca = self.ccaModel[sequence][freqBand] + self.ccaResults[sequence][freqBand], refMSeq = cca.transform(filtered_data[freqBand].T, self.mSequenceSignal[sequence][freqBand].T) + correlation[sequence][freqBand] = np.abs(np.corrcoef(self.ccaResults[sequence][freqBand].flatten(), refMSeq.T)[0, 1]) + print(correlation[sequence][freqBand], freqBand, sequence) + avg_correlation[sequence] = np.mean(list(correlation[sequence].values())) return avg_correlation def evaluate_correlation_coefficients(self, correlation_coefficients): @@ -250,9 +276,8 @@ def evaluate_correlation_coefficients(self, correlation_coefficients): # Get the highest and second-highest correlations highest_sequence, highest_corr = sorted_correlations[0] second_highest_sequence, second_highest_corr = sorted_correlations[1] - # Check if the highest correlation is at least 0.15 higher than the second highest - if highest_corr >= second_highest_corr + 0.1: + if highest_corr >= second_highest_corr + 0.05: return highest_corr, int(highest_sequence[-1]) else: - return highest_corr, 0 + return highest_corr, None From 5cd7c425b972a6abf19488d365012bd0a30d5041 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Thu, 21 Nov 2024 20:08:24 -0500 Subject: [PATCH 23/26] Debbugging code, trying to improve correlation coefficients --- .../DeviceInterface/DSI24/DSI24_Process.py | 2 +- .../WearableSensingScript.py | 2 +- .../NeuralCooked.py | 360 +++++++++++------- .../thirdparty/WearableSensing/DSI_py3.py | 10 +- 4 files changed, 222 insertions(+), 152 deletions(-) diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py index cc7fd211..52eeba26 100644 --- a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py +++ b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py @@ -39,7 +39,7 @@ def example_sample_callback_signals(headsetPtr, packetTime, userData): h = Headset(headsetPtr) new_data = np.array(['%+08.2f' % (ch.GetSignal()) for ch in h.Channels()]) new_data = new_data.reshape(24, 1) - new_data = new_data[[9, 10, 3, 2, 4, 17, 18, 7, 1, 5, 11, 22, 12, 21, 8, 0, 6, 13, 14, 20, 23, 19, 15, 16], :] + new_data = new_data[[9, 10, 3, 2, 4, 17, 18, 7, 1, 5, 11, 22, 12, 21, 8, 0, 6, 13, 14, 20, 23, 19, 16, 15], :] # Calculate the time offset on the first packet if is_first_time: diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py b/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py index da4596f0..d3ed80ac 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingBasicScript/WearableSensingScript.py @@ -29,7 +29,7 @@ def ExampleSampleCallback_Signals(headsetPtr, packetTime, userData): #Reshapes the array into a 24x1 array so that it can be inputted into the data_buffer new_data = new_data.reshape(24,1) #Rearrange new_data to fit with desired output format - new_data = new_data[[9, 10, 3, 2, 4, 17, 18, 7, 1, 5, 11, 22, 12, 21, 8, 0, 6, 13, 14, 20, 23, 19, 15, 16], :] + new_data = new_data[[9, 10, 3, 2, 4, 17, 18, 7, 1, 5, 11, 22, 12, 21, 8, 0, 6, 13, 14, 20, 23, 19, 16, 15], :] #Get the time of the packet as a temporary solution to timestamps if is_first_time: time_offset = local_clock() - float(packetTime) diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py index 91433071..0bf72b17 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py @@ -3,9 +3,10 @@ import numpy as np from physiolabxr.scripting.RenaScript import RenaScript from physiolabxr.utils.buffers import DataBuffer -from physiolabxr.rpc.decorator import rpc, async_rpc +from physiolabxr.rpc.decorator import async_rpc import time class NeuralCooked(RenaScript): + def __init__(self, *args, **kwargs): """ Please do not edit this function @@ -13,166 +14,181 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def init(self): - self.freq_bands = [(8, 60), (12, 60), (30, 60)] #defining frequency bands for filter bank + self.freqBands = [(8, 60), (12, 60), (30, 60)] #defining frequency bands for filter bank self.frequency = 300 #default frequency of DSI-24 + self.refreshRate = 0.033 #Duration of flicker self.data = DataBuffer() #generating a data buffer for EEG data self.templates = {} - self.ccaModel = {} #creating a list to store all of the CCA models + self.ccaModel = {} #creating a list to store all of the CCA models self.ccaResults= {} - self.decoded_choices = [] #creating a list to store all of the decoded choices + self.decodedChoices = [] #creating a list to store all of the decoded choices self.mSequence = [ - [0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0], #mSequence1 - [0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0], #mSequence2 - [1,1,1,0,1,0,0,1,1,1,0,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,1,0,1,0,0] #mSequence3 + [1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0], #mSequence1 + [1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0], #mSequence2 + [1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0] #mSequence3 ] - self.sequence_length = len(self.mSequence[0]) - self.segment_length = int(np.floor(self.sequence_length*300 * 0.033)) + self.sequenceLength = len(self.mSequence[0]) + self.segmentLength = int(np.floor(self.sequenceLength*self.frequency * self.refreshRate)) self.mSequenceSignal = { 'sequence1': self.generateMSignal(0), 'sequence2': self.generateMSignal(1), 'sequence3': self.generateMSignal(2) } - self.seq1_data = np.array([[]]) - self.seq2_data = np.array([[]]) - self.seq3_data = np.array([[]]) - self.game_start = 0 + self.seq1Data = np.array([[]]) + self.seq2Data = np.array([[]]) + self.seq3Data = np.array([[]]) + self.gameState = 0 def loop(self): if self.inputs: unfilteredData = self.inputs['DSI24'][0][14:18, :].astype(float) - filteredData1 = self.bandpassFilter(unfilteredData, 2,120) - filteredData2 = self.notchFilter(filteredData1,60) + filteredData1 = self.bandpassFilter(unfilteredData, 2, 120) + filteredData2 = self.notchFilter(filteredData1, 60) - EEG_Data = { #creating a dictionary for EEG data - 'stream_name': 'EEG Data', #defining the stream name - 'frames': filteredData2, #choosing the correct channels - 'timestamps': self.inputs['DSI24'][1].astype(float) #defining the timestamps + EEG_Data = { #creating a dictionary for EEG data + 'stream_name': 'EEG Data', #defining the stream name + 'frames': filteredData2, #choosing the correct channels + 'timestamps': self.inputs['DSI24'][1].astype(float) #defining the timestamps } - self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data + self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data Data = self.data.get_data('EEG Data') - if Data.shape[1] > 3600: #if the data is longer than 200 seconds then cut off beginning of data so that it is to 200 seconds - self.data.clear_stream_up_to_index(stream_name= 'EEG Data', cut_to_index= self.data.get_data('EEG Data').shape[1]-1800) - if self.game_start == 1: #if training is complete (i.e there are 3 CCA models) then we can start decoding everything asyncronously - if Data.shape[1] > self.segment_length: - self.decode_choice() - if len(self.decoded_choices)> 7: - self.decoded_choices = self.decoded_choices[len(self.decoded_choices)-5:] + if Data.shape[1] > 3600: #if the data is longer than 12 seconds then cut off beginning of data so that it is to 200 seconds + self.data.clear_stream_up_to_index(stream_name= 'EEG Data', cut_to_index= self.data.get_data('EEG Data').shape[1]-300) + if self.data.get_data('EEG Data').shape[1] > self.segmentLength: + if self.gameState == 1: + self.decodeChoice() + def cleanup(self): - self.freq_bands = [(8, 60), (12, 60), (30, 60)] + self.freqBands = [(8, 60), (12, 60), (30, 60)] self.mSequence = [] self.frequency = 300 self.data = DataBuffer() - self.cca_models = [] - self.decoded_choices = [] + self.ccaModels = [] + self.decodedChoices = [] + self.gameState = 0 return #Data Manipulation def bandpassFilter(self, data, lowcutoff, highcutoff): """ - Takes in data and applies a bandpass filter to it - :param data: EEG data to be bandpassed - :param low: Low pass - :param high: High pass - :param fs: sampling frequency - :param order: Default is 8 - :return: A bandpassed version of the data + Function that takes in data and applies a bandpass filter to it + :param data: EEG data to be band passed + :param lowcutoff: Low pass + :param highcutoff: High pass + :return: A band passed version of the data """ nq = 0.5 * self.frequency order = 8 - lowcutoffnorm = lowcutoff / nq - highcutoffnorm = highcutoff / nq - b, a = butter(order, [ lowcutoffnorm, highcutoffnorm], btype = 'band') + lowcutOffNorm = lowcutoff / nq + highcutOffNorm = highcutoff / nq + b, a = butter(order, [ lowcutOffNorm, highcutOffNorm], btype = 'band') BPdata = filtfilt(b,a,data) return BPdata def notchFilter(self, data, notchfreq, qualityFactor = 30): """ - + Function that takes in data and applies a notch filter to it :param data: signal to be filtered :param notchfreq: frequency to notch :param qualityFactor: quality factor of the notch filter that determines the width of the notch :return: filtered array """ - # Design the notch filter + # Design the notch filter b, a = iirnotch(notchfreq, qualityFactor, self.frequency) # Apply the filter to the data - filtered_data = filtfilt(b, a, data) - return filtered_data + filteredData = filtfilt(b, a, data) + return filteredData def applyFilterBank(self, data): """ - Returns data in 3 different arrays of different frequncy ranges + Function that takes segmented data filters it with a bandpass filter, and averages the signal out over all the + segments to return a dictionary that contains 3 arrays for each frequency band :param data: list of data to be filtered after data has been segmented - :return: a dictionary that contains 3 arrays for each frequency band where the keys are the found in self.freq_bands + :return: a dictionary that contains 3 arrays for each frequency band where the keys are the found in self.freqBands """ band = {} #Dictionary created to fill in for i in range(3): - filtered_segments = np.empty((4,data[0].shape[1],0)) # List to hold filtered segments for the current frequency band + filteredSegments = np.empty((4,data[0].shape[1],0)) # List to hold filtered segments for the current frequency band for segment in data: # Apply bandpass filter to each segment and append the result to the list - filtered_segment = self.bandpassFilter(segment, self.freq_bands[i][0], self.freq_bands[i][1]) - filtered_segments = np.concatenate((filtered_segments, filtered_segment[:,:,np.newaxis]),axis =2) + filteredSegment = self.bandpassFilter(segment, self.freqBands[i][0], self.freqBands[i][1]) + filteredSegments = np.concatenate((filteredSegments, filteredSegment[:, :, np.newaxis]), axis =2) # Average the filtered segments across the first axis - band[self.freq_bands[i]] = np.mean(filtered_segments, axis=2) + band[self.freqBands[i]] = np.mean(filteredSegments, axis=2) return band - def adjust_segments(self, segments): - adjusted_segments = [] + def adjustSegments(self, segments): + """ + Function that ensures that all segments created by the splitting of data to be the same shape as the + expected segment length + :param segments: EEG data that has been segmented + :return: Returns the segments but truncated to be the same size as self.segmentLength + """ + adjustedSegments = [] for segment in segments: # If the segment is shorter than the desired length, pad it with zeros - if segment.shape[1] < self.segment_length: - padding = np.zeros((segment.shape[0], self.segment_length - segment.shape[1])) - adjusted_segment = np.hstack((segment, padding)) # Pad with zeros + if segment.shape[1] < self.segmentLength: + padding = np.ones((segment.shape[0], self.segmentLength - segment.shape[1])) + adjustedSegment = np.hstack((segment, padding)) # Pad with zeros else: # If the segment is longer, trim it to the desired length - adjusted_segment = segment[:, :self.segment_length] + adjustedSegment = segment[:, :self.segmentLength] - adjusted_segments.append(adjusted_segment) + adjustedSegments.append(adjustedSegment) - return adjusted_segments + return adjustedSegments def createTemplates(self): """ - Creates templates that are EEG arrays that are filtered - :param data: EEG data for segmenting into templates - :return: dictionary of dictionary of filtered EEG arrays Keys: segment number -> keys frequency band + Function that generates templates of the training EEG data by segmenting the data based on expected length of + samples within one iteration of the m-sequence playing in Unity and averaging the data out. + :param: EEG data for segmenting into templates + :return: dictionary of segment numbers that contain a dictionary of frequency banded EEG data that has been + averaged out for each segment: segment number -> keys frequency band """ - seq1_segments = np.array_split(self.seq1_data, self.seq1_data.shape[1] // self.segment_length, axis=1) #size segment_length - seq2_segments = np.array_split(self.seq2_data, self.seq2_data.shape[1] // self.segment_length, axis=1) - seq3_segments = np.array_split(self.seq3_data, self.seq3_data.shape[1] // self.segment_length, axis=1) - - seq1_segments = self.adjust_segments(seq1_segments) #size segment_length - seq2_segments = self.adjust_segments(seq2_segments) - seq3_segments = self.adjust_segments(seq3_segments) + self.seq1Data = self.bandpassFilter(self.notchFilter(self.seq1Data, 60), 2, 120) + self.seq2Data = self.bandpassFilter(self.notchFilter(self.seq2Data, 60), 2, 120) + self.seq3Data = self.bandpassFilter(self.notchFilter(self.seq3Data, 60), 2, 120) + seq1Segments = np.array_split(self.seq1Data, self.seq1Data.shape[1] // self.segmentLength, axis=1) #size segment_length + seq2Segments = np.array_split(self.seq2Data, self.seq2Data.shape[1] // self.segmentLength, axis=1) + seq3Segments = np.array_split(self.seq3Data, self.seq3Data.shape[1] // self.segmentLength, axis=1) - self.templates['sequence1'] = self.applyFilterBank(seq1_segments) #size_segment_length - self.templates['sequence2'] = self.applyFilterBank(seq2_segments) - self.templates['sequence3'] = self.applyFilterBank(seq3_segments) + seq1Segments = self.adjustSegments(seq1Segments) + seq2Segments = self.adjustSegments(seq2Segments) + seq3Segments = self.adjustSegments(seq3Segments) - def generateMSignal(self, seqNum): - samples_per_bit = self.segment_length // len(self.mSequence[seqNum]) - signal = np.repeat(self.mSequence[seqNum], samples_per_bit ) + self.templates['sequence1'] = self.applyFilterBank(seq1Segments) #size_segment_length + self.templates['sequence2'] = self.applyFilterBank(seq2Segments) + self.templates['sequence3'] = self.applyFilterBank(seq3Segments) - ##Change signal to be another dictionary holding freq bands and the respective + def generateMSignal(self, seqNum): + """ + Function to generate a signal template for the m-sequence for CCA.fit. It functions by repeating the sequence + element by a certain number of times based on the sampling rate of the EEG and the refresh rate of the monitor. + :param seqNum: The number associated with which m-sequence the function will generate a signal for + :return: Returns an 8 x segmentLength array where each row is the m-sequence stretched to fit the required + segment length necessary for analysis via CCA + """ + samplesPerBit = self.segmentLength // len(self.mSequence[seqNum]) + signal = np.repeat(self.mSequence[seqNum], samplesPerBit ) - # Step 4: If the signal is longer than required, truncate it - if len(signal) > self.segment_length: - signal = signal[:, :self.segment_length] + if len(signal) > self.segmentLength: + signal = signal[:, :self.segmentLength] - elif len(signal) < self.segment_length: - padding = int(np.ceil((self.segment_length - len(signal))/2)+1) - signal = np.pad(signal, pad_width=padding, mode = 'constant', constant_values= 0) - signal = signal[:self.segment_length] - Msignal = [np.tile(signal, (4, 1))] - FilteredMsignal = self.applyFilterBank(Msignal) - return FilteredMsignal + elif len(signal) < self.segmentLength: + padding = int(np.ceil((self.segmentLength - len(signal))/2)+1) + signal = np.pad(signal, pad_width=padding, mode='constant', constant_values=0) + signal = signal[:self.segmentLength] + mSignal = [np.tile(signal, (4, 1))] + filteredMsignal = self.applyFilterBank(mSignal) + return filteredMsignal - def train_cca(self): + def trainCCA(self): """ Training the CCA model By generated spatial filters and templates for each target m-sequence @@ -181,103 +197,157 @@ def train_cca(self): self.ccaModel = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} for sequence in self.templates.keys(): for freqBand in self.templates[sequence].keys(): - cca = CCA(n_components = 1) + cca = CCA(n_components=1) cca.fit(self.templates[sequence][freqBand].T, self.mSequenceSignal[sequence][freqBand].T) self.ccaModel[sequence][freqBand] = cca + test1,test2 = cca.transform(self.templates[sequence][freqBand].T, self.mSequenceSignal[sequence][freqBand].T) + print(np.abs(np.corrcoef(test1.T,test2.T)[0, 1])) + print('training done') + self.gameState = 1 @async_rpc - def add_seq_data(self, sequenceNum: int, duration: float): # Data is going to come in sequencially seq1 -> seq2 -> seq3 repeat - eegData = self.data.get_data('EEG Data')[:, int(-duration * 300):] # 4 by (samples) + def add_seq_data(self, sequenceNum: int, duration: float): + """ + RPC function that gets called by Unity to grab the EEG data from *duration* samples ago and adds it to the + respective m-sequence data storage + :param sequenceNum: The number that represents the m-sequence that was played for *duration* time + :param duration: How long the respective m-sequence was played for + :return: Does not return anything to Unity it is an asynchronous process + """ + eegData = self.data.get_data('EEG Data')[:, int(-duration * self.frequency):] # 4 by (samples) if sequenceNum == 1: - if self.seq1_data.size == 0: - self.seq1_data = eegData + if self.seq1Data.size == 0: + self.seq1Data = eegData else: - self.seq1_data = np.concatenate((self.seq1_data, eegData), axis=1) + self.seq1Data = np.concatenate((self.seq1Data, eegData), axis=1) elif sequenceNum == 2: - if self.seq2_data.size == 0: - self.seq2_data = eegData + if self.seq2Data.size == 0: + self.seq2Data = eegData else: - self.seq2_data = np.concatenate((self.seq2_data, eegData), axis=1) + self.seq2Data = np.concatenate((self.seq2Data, eegData), axis=1) elif sequenceNum == 3: - if self.seq3_data.size == 0: - self.seq3_data = eegData + if self.seq3Data.size == 0: + self.seq3Data = eegData else: - self.seq3_data = np.concatenate((self.seq3_data, eegData), axis=1) - + self.seq3Data = np.concatenate((self.seq3Data, eegData), axis=1) @async_rpc def training(self) -> int: """ - Args: - input0: int - 1 for choice 1, 2 for choice 2, 3 for choice 3 - Returns: Generates correlation coefficients for EEG data x m-sequence + RPC function that gets called by Unity to begin training off of the saved data from function: add_seq_data + :return: Returns 1 to Unity once it is done training """ # Train the CCA - self.train_cca() # start training the CCA + self.trainCCA() # start training the CCA self.data.clear_buffer_data() #Clear the buffer after training return 1 @async_rpc def decode(self) -> int: - self.game_start = 1 - # Get the choices decoded so far - choices = self.decoded_choices - if len([x for x in choices if x != None]) > 2: - # Determine the most common choice - user_choice = max(set([x for x in choices if x != None]), key=choices.count) - print(choices, user_choice) - self.decoded_choices = [] + """ + RPC function that gets called by Unity to receive what the player is looking at by sending Unity the most + frequently occurring m-sequence using the mode of the decoded choices + :return: Sends Unity the most common choice to Unity, sends 0 if there is no common choice + """ + if len(self.decodedChoices) > 5: + choices = [x for x in self.decodedChoices if x is not None] + + if choices: + counts = {choice: choices.count(choice) for choice in set(choices)} + max_count = max(counts.values()) + modes = [choice for choice, count in counts.items() if count == max_count] + userChoice = modes[0] if len(modes) == 1 else 0 + else: + userChoice = 0 + print(choices, userChoice) + self.decodedChoices = [] self.data.clear_buffer_data() - - + return userChoice else: - user_choice = 0 - # Return the most common detected choice - return user_choice - def decode_choice(self): + return 0 - self.correlation_coefficients = self.apply_shifting_window_cca(self.data.get_data('EEG Data')) # getting the correlation coefficients by applying shifting window CCA - highest_correlation, detected_choice = self.evaluate_correlation_coefficients(self.correlation_coefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice - if detected_choice != None: - self.decoded_choices.append(detected_choice) - - def apply_shifting_window_cca(self, data): + def decodeChoice(self): """ - Applies shifting window CCA to the filtered band data. + A looping function that decodes the correlation coefficients of the data and adds the highest correlation + m-sequence (what m-sequence the user is likely looking at) to a list called decodedChoices + :return: Updates decodedChoice with what has been decoded """ - window_size = int(self.sequence_length * 0.033 * 300) # For example, 1 second window for 300 Hz sampling rate - step_size = int(window_size/4) # For example, 0.5 second step size for 300 Hz sampling rate - + data = self.data.get_data('EEG Data') + self.correlationCoefficients = self.applyCCA(data, 0) # getting the correlation coefficients by applying CCA + highestCorrelation, detectedChoice = self.evaluateCorrelationCoefficients(self.correlationCoefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice + if detectedChoice != None: + self.decodedChoices.append(detectedChoice) + self.correlationCoefficients = self.applyCCA(data, int(np.floor(data.shape[1]/8))) # getting the correlation coefficients by applying CCA + highestCorrelation, detectedChoice = self.evaluateCorrelationCoefficients( + self.correlationCoefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice + if detectedChoice != None: + self.decodedChoices.append(detectedChoice) + self.correlationCoefficients = self.applyCCA(data, int(np.floor(data.shape[1]/7))) # getting the correlation coefficients by applying CCA + highestCorrelation, detectedChoice = self.evaluateCorrelationCoefficients( + self.correlationCoefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice + if detectedChoice != None: + self.decodedChoices.append(detectedChoice) + self.correlationCoefficients = self.applyCCA(data, int(np.floor(data.shape[1]/6))) # getting the correlation coefficients by applying CCA + highestCorrelation, detectedChoice = self.evaluateCorrelationCoefficients( + self.correlationCoefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice + if detectedChoice != None: + self.decodedChoices.append(detectedChoice) + self.correlationCoefficients = self.applyCCA(data, int(np.floor(data.shape[1]/5))) # getting the correlation coefficients by applying CCA + highestCorrelation, detectedChoice = self.evaluateCorrelationCoefficients( + self.correlationCoefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice + if detectedChoice != None: + self.decodedChoices.append(detectedChoice) + self.correlationCoefficients = self.applyCCA(data, int(np.floor(data.shape[1]/4))) # getting the correlation coefficients by applying CCA + highestCorrelation, detectedChoice = self.evaluateCorrelationCoefficients( + self.correlationCoefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice + if detectedChoice != None: + self.decodedChoices.append(detectedChoice) + + def applyCCA(self, data,step): + """ + Function for applying CCA + :param data: Data that needs to be classified + :return: A dictionary that contains the correlation of the EEG data with the templates + """ + windowSize = self.segmentLength segments = [] - for start in range(0, data.shape[1], step_size): - if start+window_size < data.shape[1]: - segment = data[:, start:start+window_size] - segments.append(segment) #For some reason the segments created are not of the shape + #This is generating the segments for one window of data + for start in range(step, data.shape[1], windowSize): + if start+windowSize < data.shape[1]: + segment = data[:, start:start+windowSize] + segments.append(segment) #Filter the data - filtered_data = self.applyFilterBank(segments) + filteredData = self.applyFilterBank(segments) self.ccaResults = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} #temporarily assigns the dictionary so that we can use the keys correlation = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} - avg_correlation = {} + avgCorrelation = {} #Transform the data with CCA for sequence in self.templates.keys(): for freqBand in self.templates[sequence].keys(): cca = self.ccaModel[sequence][freqBand] - self.ccaResults[sequence][freqBand], refMSeq = cca.transform(filtered_data[freqBand].T, self.mSequenceSignal[sequence][freqBand].T) - correlation[sequence][freqBand] = np.abs(np.corrcoef(self.ccaResults[sequence][freqBand].flatten(), refMSeq.T)[0, 1]) - print(correlation[sequence][freqBand], freqBand, sequence) - avg_correlation[sequence] = np.mean(list(correlation[sequence].values())) - return avg_correlation + self.ccaResults[sequence][freqBand], refMSeq = cca.transform(filteredData[freqBand].T, self.mSequenceSignal[sequence][freqBand].T) + correlation[sequence][freqBand] = np.abs(np.corrcoef(self.ccaResults[sequence][freqBand].T, refMSeq.T)[0, 1]) + avgCorrelation[sequence] = np.mean(list(correlation[sequence].values())) + return avgCorrelation - def evaluate_correlation_coefficients(self, correlation_coefficients): + def evaluateCorrelationCoefficients(self, correlationCoefficients): + """ + Function for determining the highest correlation coefficient and whether the coefficient is greater than the + second-highest correlation by a certain threshold. + :param correlationCoefficients: Correlation coefficients between the EEG data and the templates + :return: The highest correlation as well as the corresponding m-sequence number if the correlation surpasses the + threshold + """ # Sort the sequences by their average correlation in descending order - sorted_correlations = sorted(correlation_coefficients.items(), key=lambda item: item[1], reverse=True) + sortedCorrelations = sorted(correlationCoefficients.items(), key=lambda item: item[1], reverse=True) # Get the highest and second-highest correlations - highest_sequence, highest_corr = sorted_correlations[0] - second_highest_sequence, second_highest_corr = sorted_correlations[1] + highestSequence, highestCorr = sortedCorrelations[0] + secondHighestSequence, secondHighestCorr = sortedCorrelations[1] # Check if the highest correlation is at least 0.15 higher than the second highest - if highest_corr >= second_highest_corr + 0.05: - return highest_corr, int(highest_sequence[-1]) + print(highestSequence,highestCorr, highestCorr - secondHighestCorr) + if highestCorr >= secondHighestCorr + 0.15: + return highestCorr, int(highestSequence[-1]) else: - return highest_corr, None + return highestCorr, None diff --git a/physiolabxr/thirdparty/WearableSensing/DSI_py3.py b/physiolabxr/thirdparty/WearableSensing/DSI_py3.py index 07e1a1be..511e6fc7 100644 --- a/physiolabxr/thirdparty/WearableSensing/DSI_py3.py +++ b/physiolabxr/thirdparty/WearableSensing/DSI_py3.py @@ -258,8 +258,8 @@ def ExampleMessageCallback( msg, lvl=0 ): @SampleCallback def ExampleSampleCallback_Signals( headsetPtr, packetTime, userData ): h = Headset( headsetPtr ) - strings = [ '%s=%+08.2f' % ( IfStringThenNormalString( ch.GetName() ), ch.ReadBuffered() ) for ch in h.Channels() ] - print( ( '%8.3f: ' % packetTime ) + ', '.join( strings ) ) + strings = [ '%s=%+08.2f \n' % ( IfStringThenNormalString( ch.GetName() ), ch.ReadBuffered() ) for ch in h.Channels() ] + print( ( '%8.3f: \n' % packetTime ) + ', '.join( strings ) ) sys.stdout.flush() @SampleCallback @@ -302,8 +302,8 @@ def Test( port, arg='' ): if __name__ == '__main__': args = getattr( sys, 'argv', [ '' ] ) - if sys.platform.lower().startswith( 'win' ): default_port = 'COM4' - else: default_port = '/dev/cu.DSI7-0009.BluetoothSeri' + if sys.platform.lower().startswith( 'win' ): default_port = 'COM5' + else: default_port = '/dev/cu.DSI7-0009.BluetoothSeries' # first command-line argument: serial port address if len( args ) > 1: port = args[ 1 ] @@ -313,4 +313,4 @@ def Test( port, arg='' ): if len( args ) > 2: ref = args[ 2 ] else: ref = '' - Test( port, 'imp' ) + Test( port, '' ) From f6c058f6d57564649604576a21d13138695e7ec6 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Mon, 9 Dec 2024 16:32:17 -0500 Subject: [PATCH 24/26] Adding Battery and Impedance Check for the DSI-24. --- physiolabxr/_ui/DSI24_Options.ui | 425 +++++++++++++++++- .../DeviceInterface/DSI24/DSI24_Interface.py | 14 +- .../DeviceInterface/DSI24/DSI24_Options.py | 58 ++- .../DeviceInterface/DSI24/DSI24_Process.py | 19 +- 4 files changed, 499 insertions(+), 17 deletions(-) diff --git a/physiolabxr/_ui/DSI24_Options.ui b/physiolabxr/_ui/DSI24_Options.ui index 60aa0315..b73a8d49 100644 --- a/physiolabxr/_ui/DSI24_Options.ui +++ b/physiolabxr/_ui/DSI24_Options.ui @@ -46,14 +46,435 @@ - + + + + + 330 + 0 + 49 + 16 + + + + + 100 + 100 + + + + background-color: gray; + color: black; + + + + FP1 + + + + + + 450 + 0 + 49 + 16 + + + + background-color: gray; + color: black; + + + FP2 + + + + + + 230 + 20 + 49 + 16 + + + + background-color: gray; + color: black; + + + F7 + + + + + + 300 + 50 + 49 + 16 + + + + background-color: gray; + color: black; + + + F3 + + + + + + 380 + 70 + 49 + 16 + + + + background-color: gray; + color: black; + + + FZ + + + + + + 540 + 20 + 49 + 16 + + + + background-color: gray; + color: black; + + + F8 + + + + + + 460 + 50 + 49 + 16 + + + + background-color: gray; + color: black; + + + F4 + + + + + + 320 + 100 + 49 + 16 + + + + background-color: gray; + color: black; + + + C3 + + + + + + 380 + 100 + 49 + 16 + + + + background-color: gray; + color: black; + + + CZ + + + + + + 440 + 100 + 49 + 16 + + + + background-color: gray; + color: black; + + + C4 + + + + + + 510 + 100 + 49 + 16 + + + + background-color: gray; + color: black; + + + T4 + + + + + + 250 + 100 + 49 + 16 + + + + background-color: gray; + color: black; + + + T3 + + + + + + 240 + 180 + 49 + 16 + + + + background-color: gray; + color: black; + + + T5 + + + + + + 310 + 160 + 49 + 16 + + + + background-color: gray; + color: black; + + + P3 + + + + + + 380 + 140 + 49 + 16 + + + + background-color: gray; + color: black; + + + Pz CMF + + + + + + 470 + 160 + 49 + 16 + + + + background-color: gray; + color: black; + + + P4 + + + + + + 540 + 180 + 49 + 16 + + + + background-color: gray; + color: black; + + + T6 + + + + + + 330 + 200 + 49 + 16 + + + + background-color: gray; + color: black; + + + O1 + + + + + + 450 + 200 + 49 + 16 + + + + background-color: gray; + color: black; + + + O2 + + + + + + 190 + 100 + 49 + 16 + + + + background-color: gray; + color: black; + + + A1 + + + + + + 600 + 100 + 49 + 16 + + + + background-color: gray; + color: black; + + + A2 + + + + + + 20 + 10 + 111 + 16 + + + + Green: Good + + + + + + 20 + 30 + 91 + 16 + + + + Yellow: Ok + + + + + + 20 + 50 + 101 + 16 + + + + Red: Bad + + + + + + - + Battery Level + + + + 24 + + + + + + + 24 + + + diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Interface.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Interface.py index 1cd642d5..515ec539 100644 --- a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Interface.py +++ b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Interface.py @@ -29,6 +29,8 @@ def __init__(self, self.port = self.socket.getsockopt(zmq.LAST_ENDPOINT).decode("utf-8").split(":")[-1] self.data_process = None self.terminate_event = None + self.battery_level = None + self.impedanceValues = [] def start_stream(self, bluetooth_port, impedance): self.data_process, self.terminate_event = run_dsi24_headset_process(self.port, bluetooth_port, impedance) @@ -43,8 +45,16 @@ def process_frames(self): elif data['t'] == 'e': raise DSIException(data['message']) # this will cause stop_stream to be called elif data['t'] == 'd': - frames.append(data['frame']) - timestamps.append(data['timestamp']) + self.battery_level = data['battery'] + if data['impedance'] == 0: + frames.append(data['frame']) + timestamps.append(data['timestamp']) + else: + self.impedanceValues = data['frame'] + frames.append(data['frame']) + timestamps.append(data['timestamp']) + + except zmq.error.Again: break diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py index 0921aeb0..90185329 100644 --- a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py +++ b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py @@ -1,24 +1,72 @@ from physiolabxr.ui.BaseDeviceOptions import BaseDeviceOptions - - +from PyQt6.QtCore import QTimer +from PyQt6.QtWidgets import QProgressBar +from physiolabxr.configs.configs import AppConfigs class DSI24_Options(BaseDeviceOptions): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.Impedance = 0 self.check_impedance_chkbx.clicked.connect(self.check_impedance_chkbx_clicked) - + self.device_interface.battery_level + self.batteryBar1.setValue(0) # Set the value of the first progress bar + self.batteryBar2.setValue(0) + self.timer = QTimer(self) + self.timer.timeout.connect(self.batteryUpdate) + self.timer.start(5000) + self.timer2 = QTimer(self) + self.timer2.timeout.connect(self.updateImpedance) + self.timer2.start(1000) + self.impedanceDictionary = { + 0: self.FP1, + 1: self.FP2, + 2: self.Fz, + 3: self.F3, + 4: self.F4, + 5: self.F7, + 6: self.F8, + 7: self.Cz, + 8: self.C3, + 9: self.C4, + 10: self.T3, + 11: self.T4, + 12: self.T5, + 13: self.T6, + 14: self.P3, + 15: self.P4, + 16: self.O1, + 17: self.O2, + 18: self.A1, + 19: self.A2, + } def check_impedance_chkbx_clicked(self): # This method will be called when the checkbox is clicked if self.check_impedance_chkbx.isChecked(): print("Check Impedance is checked.") self.Impedance = 1 + # Add logic to handle the case when the checkbox is checked else: print("Check Impedance is unchecked.") self.Impedance = 0 + + def updateImpedance(self): + if self.device_interface.impedanceValues: + impedanceValues = self.device_interface.impedanceValues + for i in range(21): + print(float(impedanceValues[i][0])) + if float(impedanceValues[i][0]) < 1: + color = 'green' + elif float(impedanceValues[i][0]) < 10 and float(impedanceValues[i][0]) > 1: + color = 'yellow' + else: + color = 'red' + self.impedanceDictionary[i].setStyleSheet(f"""background-color: {color}; color: black""") - # Add logic to handle the case when the checkbox is unchecked - + + def batteryUpdate(self): + if self.device_interface.battery_level != None: + self.batteryBar1.setValue(self.device_interface.battery_level[0]) + self.batteryBar2.setValue(self.device_interface.battery_level[1]) def start_stream_args(self): return { 'bluetooth_port': self.device_port_lineedit.text(), diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py index 52eeba26..ec452600 100644 --- a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py +++ b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Process.py @@ -6,7 +6,6 @@ from physiolabxr.third_party.WearableSensing.DSI_py3 import * import numpy as np from pylsl import local_clock - is_first_time = True time_offset = 0 dsi24_data_socket = None @@ -51,13 +50,15 @@ def example_sample_callback_signals(headsetPtr, packetTime, userData): print('Data and timestamp mismatch') print(new_data.shape) print(len(t)) - + batteryLevel = list(map(int, IfStringThenNormalString(h.GetBatteryLevelString()).strip("[]").split(","))) # Create a dictionary with the stream name, data, and timestamps # need to convert the new_data to list to make it json serializable new_data_dict = { 't': 'd', # 'd' for data, 'i' for info, 'e' for error 'frame': new_data.tolist(), - 'timestamp': t + 'timestamp': t, + 'battery': batteryLevel, + 'impedance': 0 } # Send data via ZMQ socket to the main process @@ -100,12 +101,14 @@ def example_sample_callback_impedances(headsetPtr, packetTime, userData): print('Data and timestamp mismatch') print(impedance_data.shape) print(len(t)) - + batteryLevel = list(map(int, IfStringThenNormalString(h.GetBatteryLevelString()).strip("[]").split(","))) # Convert impedance data to a dictionary for streaming impedance_data_dict = { 't': 'd', # 'd' for data, 'i' for info, 'e' for error 'frame': impedance_data.tolist(), # Convert impedance data to a list for JSON serialization - 'timestamp': t + 'timestamp': t, + 'battery': batteryLevel, + 'impedance': 1 } # Send the impedance data via ZMQ socket to the main process @@ -115,7 +118,7 @@ def example_sample_callback_impedances(headsetPtr, packetTime, userData): print("Socket already closed.") -def DSI24_process(terminate_event, network_port, com_port, impedance, args=''): +def DSI24_process(terminate_event, network_port, com_port, impedance,args=''): """Process to connect to the DSI-24 device and send data to the main process Args: @@ -126,6 +129,7 @@ def DSI24_process(terminate_event, network_port, com_port, impedance, args=''): global dsi24_data_socket global is_first_time global time_offset + global batteryLevel context = zmq.Context() dsi24_data_socket = context.socket(zmq.PUSH) @@ -143,8 +147,7 @@ def DSI24_process(terminate_event, network_port, com_port, impedance, args=''): return if impedance == 1: - # Currently not used - print("Impedance mode") + headset.SetSampleCallback(example_sample_callback_impedances, 0) headset.StartImpedanceDriver() else: From ebd1d5682eb15dba0fab2dd77f538766c4e0bc70 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Wed, 11 Dec 2024 19:05:18 -0500 Subject: [PATCH 25/26] Updating NeuroCooked, CVEP still doesn't work. --- .../DeviceInterface/DSI24/DSI24_Options.py | 1 - .../NeuralCooked.py | 138 +++++++----------- 2 files changed, 52 insertions(+), 87 deletions(-) diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py index 90185329..6af34f57 100644 --- a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py +++ b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py @@ -53,7 +53,6 @@ def updateImpedance(self): if self.device_interface.impedanceValues: impedanceValues = self.device_interface.impedanceValues for i in range(21): - print(float(impedanceValues[i][0])) if float(impedanceValues[i][0]) < 1: color = 'green' elif float(impedanceValues[i][0]) < 10 and float(impedanceValues[i][0]) > 1: diff --git a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py index 0bf72b17..2a15f61e 100644 --- a/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py +++ b/physiolabxr/scripting/WearableSensing/WearableSensingNeuralCooked/NeuralCooked.py @@ -14,9 +14,9 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def init(self): - self.freqBands = [(8, 60), (12, 60), (30, 60)] #defining frequency bands for filter bank + self.freqBands = [(8, 60), (13, 60), (30, 60)] #defining frequency bands for filter bank self.frequency = 300 #default frequency of DSI-24 - self.refreshRate = 0.033 #Duration of flicker + self.refreshRate = 0.0166 #Duration of flicker self.data = DataBuffer() #generating a data buffer for EEG data self.templates = {} self.ccaModel = {} #creating a list to store all of the CCA models @@ -28,15 +28,15 @@ def init(self): [1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0] #mSequence3 ] self.sequenceLength = len(self.mSequence[0]) - self.segmentLength = int(np.floor(self.sequenceLength*self.frequency * self.refreshRate)) + self.segmentLength = int(np.ceil(self.sequenceLength*self.frequency * self.refreshRate)) self.mSequenceSignal = { 'sequence1': self.generateMSignal(0), 'sequence2': self.generateMSignal(1), 'sequence3': self.generateMSignal(2) } - self.seq1Data = np.array([[]]) - self.seq2Data = np.array([[]]) - self.seq3Data = np.array([[]]) + self.seq1Data = np.array([[[ ]]]) + self.seq2Data = np.array([[[ ]]]) + self.seq3Data = np.array([[[ ]]]) self.gameState = 0 @@ -54,8 +54,8 @@ def loop(self): } self.data.update_buffer(EEG_Data) #updating the data buffer with EEG data Data = self.data.get_data('EEG Data') - if Data.shape[1] > 3600: #if the data is longer than 12 seconds then cut off beginning of data so that it is to 200 seconds - self.data.clear_stream_up_to_index(stream_name= 'EEG Data', cut_to_index= self.data.get_data('EEG Data').shape[1]-300) + if Data.shape[1] > 400: #if the data is longer than 12 seconds then cut off beginning of data so that it is to 200 seconds + self.data.clear_stream_up_to_index(stream_name='EEG Data', cut_to_index=self.data.get_data('EEG Data').shape[1]-400) if self.data.get_data('EEG Data').shape[1] > self.segmentLength: if self.gameState == 1: self.decodeChoice() @@ -83,7 +83,7 @@ def bandpassFilter(self, data, lowcutoff, highcutoff): :return: A band passed version of the data """ nq = 0.5 * self.frequency - order = 8 + order = 3 lowcutOffNorm = lowcutoff / nq highcutOffNorm = highcutoff / nq b, a = butter(order, [ lowcutOffNorm, highcutOffNorm], btype = 'band') @@ -111,14 +111,21 @@ def applyFilterBank(self, data): """ band = {} #Dictionary created to fill in for i in range(3): - filteredSegments = np.empty((4,data[0].shape[1],0)) # List to hold filtered segments for the current frequency band - for segment in data: + filteredSegments = np.empty((4,self.segmentLength,0)) # List to hold filtered segments for the current frequency band + # for segment in data: + # # Apply bandpass filter to each segment and append the result to the list + # filteredSegment = self.bandpassFilter(segment, self.freqBands[i][0], self.freqBands[i][1]) + # filteredSegments = np.concatenate((filteredSegments, filteredSegment[:, :, np.newaxis]), axis =2) + for segmentNum in range(data.shape[2]): # Apply bandpass filter to each segment and append the result to the list - filteredSegment = self.bandpassFilter(segment, self.freqBands[i][0], self.freqBands[i][1]) + filteredSegment = self.bandpassFilter(data[:, :, segmentNum], self.freqBands[i][0], self.freqBands[i][1]) filteredSegments = np.concatenate((filteredSegments, filteredSegment[:, :, np.newaxis]), axis =2) + band[self.freqBands[i]]= np.mean(filteredSegments, axis=2) # Average the filtered segments across the first axis - band[self.freqBands[i]] = np.mean(filteredSegments, axis=2) + # averageSegments = np.mean(filteredSegments, axis=2) + # Downsampling + # band[self.freqBands[i]] = np.mean(averageSegments.reshape(-1, 5), axis=1) return band def adjustSegments(self, segments): """ @@ -148,23 +155,17 @@ def createTemplates(self): :return: dictionary of segment numbers that contain a dictionary of frequency banded EEG data that has been averaged out for each segment: segment number -> keys frequency band """ - self.seq1Data = self.bandpassFilter(self.notchFilter(self.seq1Data, 60), 2, 120) - self.seq2Data = self.bandpassFilter(self.notchFilter(self.seq2Data, 60), 2, 120) - self.seq3Data = self.bandpassFilter(self.notchFilter(self.seq3Data, 60), 2, 120) - - seq1Segments = np.array_split(self.seq1Data, self.seq1Data.shape[1] // self.segmentLength, axis=1) #size segment_length - seq2Segments = np.array_split(self.seq2Data, self.seq2Data.shape[1] // self.segmentLength, axis=1) - seq3Segments = np.array_split(self.seq3Data, self.seq3Data.shape[1] // self.segmentLength, axis=1) - - seq1Segments = self.adjustSegments(seq1Segments) - seq2Segments = self.adjustSegments(seq2Segments) - seq3Segments = self.adjustSegments(seq3Segments) - - - self.templates['sequence1'] = self.applyFilterBank(seq1Segments) #size_segment_length - self.templates['sequence2'] = self.applyFilterBank(seq2Segments) - self.templates['sequence3'] = self.applyFilterBank(seq3Segments) - + filteredData1= np.zeros(self.seq1Data.shape) + filteredData2= np.zeros(self.seq2Data.shape) + filteredData3= np.zeros(self.seq3Data.shape) + for segment in range(self.seq1Data.shape[2]): + filteredData1[:,:,segment] = self.bandpassFilter(self.notchFilter(self.seq1Data[:, :, segment], 60), 2, 120) + filteredData2[:,:,segment] = self.bandpassFilter(self.notchFilter(self.seq2Data[:, :, segment], 60), 2, 120) + filteredData3[:,:,segment] = self.bandpassFilter(self.notchFilter(self.seq3Data[:, :, segment], 60), 2, 120) + + self.templates['sequence1'] = self.applyFilterBank(filteredData1) #size_segment_length + self.templates['sequence2'] = self.applyFilterBank(filteredData2) + self.templates['sequence3'] = self.applyFilterBank(filteredData3) def generateMSignal(self, seqNum): """ Function to generate a signal template for the m-sequence for CCA.fit. It functions by repeating the sequence @@ -184,7 +185,7 @@ def generateMSignal(self, seqNum): padding = int(np.ceil((self.segmentLength - len(signal))/2)+1) signal = np.pad(signal, pad_width=padding, mode='constant', constant_values=0) signal = signal[:self.segmentLength] - mSignal = [np.tile(signal, (4, 1))] + mSignal = np.expand_dims(np.tile(signal, (4, 1)),axis=2) filteredMsignal = self.applyFilterBank(mSignal) return filteredMsignal @@ -215,23 +216,25 @@ def add_seq_data(self, sequenceNum: int, duration: float): :param duration: How long the respective m-sequence was played for :return: Does not return anything to Unity it is an asynchronous process """ - eegData = self.data.get_data('EEG Data')[:, int(-duration * self.frequency):] # 4 by (samples) + eegData = np.expand_dims(self.data.get_data('EEG Data')[:, -self.segmentLength:], axis=2) # 4 by (samples) + print(self.segmentLength,duration*300) if sequenceNum == 1: if self.seq1Data.size == 0: self.seq1Data = eegData else: - self.seq1Data = np.concatenate((self.seq1Data, eegData), axis=1) + self.seq1Data = np.concatenate((self.seq1Data, eegData), axis=2) elif sequenceNum == 2: if self.seq2Data.size == 0: self.seq2Data = eegData else: - self.seq2Data = np.concatenate((self.seq2Data, eegData), axis=1) + self.seq2Data = np.concatenate((self.seq2Data, eegData), axis=2) elif sequenceNum == 3: if self.seq3Data.size == 0: self.seq3Data = eegData else: - self.seq3Data = np.concatenate((self.seq3Data, eegData), axis=1) + self.seq3Data = np.concatenate((self.seq3Data, eegData), axis=2) + @async_rpc def training(self) -> int: """ @@ -249,22 +252,17 @@ def decode(self) -> int: frequently occurring m-sequence using the mode of the decoded choices :return: Sends Unity the most common choice to Unity, sends 0 if there is no common choice """ + + userChoice = 0 if len(self.decodedChoices) > 5: choices = [x for x in self.decodedChoices if x is not None] - - if choices: - counts = {choice: choices.count(choice) for choice in set(choices)} - max_count = max(counts.values()) - modes = [choice for choice, count in counts.items() if count == max_count] - userChoice = modes[0] if len(modes) == 1 else 0 - else: - userChoice = 0 - print(choices, userChoice) + counts = {choice: choices.count(choice) for choice in set(choices)} + max_count = max(counts.values()) + modes = [choice for choice, count in counts.items() if count == max_count] + userChoice = modes[0] if len(modes) == 1 else 0 self.decodedChoices = [] self.data.clear_buffer_data() - return userChoice - else: - return 0 + return userChoice def decodeChoice(self): """ @@ -272,54 +270,22 @@ def decodeChoice(self): m-sequence (what m-sequence the user is likely looking at) to a list called decodedChoices :return: Updates decodedChoice with what has been decoded """ - data = self.data.get_data('EEG Data') - self.correlationCoefficients = self.applyCCA(data, 0) # getting the correlation coefficients by applying CCA + data = np.expand_dims(self.data.get_data('EEG Data')[:, -self.segmentLength:],axis=2) + self.correlationCoefficients = self.applyCCA(data) # getting the correlation coefficients by applying CCA highestCorrelation, detectedChoice = self.evaluateCorrelationCoefficients(self.correlationCoefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice if detectedChoice != None: self.decodedChoices.append(detectedChoice) - self.correlationCoefficients = self.applyCCA(data, int(np.floor(data.shape[1]/8))) # getting the correlation coefficients by applying CCA - highestCorrelation, detectedChoice = self.evaluateCorrelationCoefficients( - self.correlationCoefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice - if detectedChoice != None: - self.decodedChoices.append(detectedChoice) - self.correlationCoefficients = self.applyCCA(data, int(np.floor(data.shape[1]/7))) # getting the correlation coefficients by applying CCA - highestCorrelation, detectedChoice = self.evaluateCorrelationCoefficients( - self.correlationCoefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice - if detectedChoice != None: - self.decodedChoices.append(detectedChoice) - self.correlationCoefficients = self.applyCCA(data, int(np.floor(data.shape[1]/6))) # getting the correlation coefficients by applying CCA - highestCorrelation, detectedChoice = self.evaluateCorrelationCoefficients( - self.correlationCoefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice - if detectedChoice != None: - self.decodedChoices.append(detectedChoice) - self.correlationCoefficients = self.applyCCA(data, int(np.floor(data.shape[1]/5))) # getting the correlation coefficients by applying CCA - highestCorrelation, detectedChoice = self.evaluateCorrelationCoefficients( - self.correlationCoefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice - if detectedChoice != None: - self.decodedChoices.append(detectedChoice) - self.correlationCoefficients = self.applyCCA(data, int(np.floor(data.shape[1]/4))) # getting the correlation coefficients by applying CCA - highestCorrelation, detectedChoice = self.evaluateCorrelationCoefficients( - self.correlationCoefficients) # evaluating the correlation coefficients to get the highest correlation and the detected choice - if detectedChoice != None: - self.decodedChoices.append(detectedChoice) - def applyCCA(self, data,step): + def applyCCA(self, data): """ Function for applying CCA :param data: Data that needs to be classified :return: A dictionary that contains the correlation of the EEG data with the templates """ - windowSize = self.segmentLength - segments = [] - #This is generating the segments for one window of data - for start in range(step, data.shape[1], windowSize): - if start+windowSize < data.shape[1]: - segment = data[:, start:start+windowSize] - segments.append(segment) #Filter the data - filteredData = self.applyFilterBank(segments) - self.ccaResults = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} #temporarily assigns the dictionary so that we can use the keys + filteredData = self.applyFilterBank(data) + self.ccaResults = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} #temporarily assigns the dictionary so that we can use the keys correlation = {k: {sub_k: None for sub_k in v.keys()} for k, v in self.templates.items() if isinstance(v, dict)} avgCorrelation = {} @@ -329,6 +295,7 @@ def applyCCA(self, data,step): cca = self.ccaModel[sequence][freqBand] self.ccaResults[sequence][freqBand], refMSeq = cca.transform(filteredData[freqBand].T, self.mSequenceSignal[sequence][freqBand].T) correlation[sequence][freqBand] = np.abs(np.corrcoef(self.ccaResults[sequence][freqBand].T, refMSeq.T)[0, 1]) + print(sequence, freqBand, correlation[sequence][freqBand]) avgCorrelation[sequence] = np.mean(list(correlation[sequence].values())) return avgCorrelation @@ -346,8 +313,7 @@ def evaluateCorrelationCoefficients(self, correlationCoefficients): highestSequence, highestCorr = sortedCorrelations[0] secondHighestSequence, secondHighestCorr = sortedCorrelations[1] # Check if the highest correlation is at least 0.15 higher than the second highest - print(highestSequence,highestCorr, highestCorr - secondHighestCorr) - if highestCorr >= secondHighestCorr + 0.15: + if highestCorr >= secondHighestCorr + 0.01: return highestCorr, int(highestSequence[-1]) else: return highestCorr, None From e3057f43e2c2fa5c1be4557dc94458b9f6a32b81 Mon Sep 17 00:00:00 2001 From: LommyTea Date: Fri, 13 Dec 2024 23:09:42 -0500 Subject: [PATCH 26/26] Updating Options for Impedance check. --- .../DeviceInterface/DSI24/DSI24_Options.py | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py index 6af34f57..018b0847 100644 --- a/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py +++ b/physiolabxr/interfaces/DeviceInterface/DSI24/DSI24_Options.py @@ -50,16 +50,17 @@ def check_impedance_chkbx_clicked(self): self.Impedance = 0 def updateImpedance(self): - if self.device_interface.impedanceValues: - impedanceValues = self.device_interface.impedanceValues - for i in range(21): - if float(impedanceValues[i][0]) < 1: - color = 'green' - elif float(impedanceValues[i][0]) < 10 and float(impedanceValues[i][0]) > 1: - color = 'yellow' - else: - color = 'red' - self.impedanceDictionary[i].setStyleSheet(f"""background-color: {color}; color: black""") + if self.Impedance == 1: + if self.device_interface.impedanceValues: + impedanceValues = self.device_interface.impedanceValues + for i in range(20): + if float(impedanceValues[i][0]) < 1: + color = 'green' + elif float(impedanceValues[i][0]) < 10 and float(impedanceValues[i][0]) > 1: + color = 'yellow' + else: + color = 'red' + self.impedanceDictionary[i].setStyleSheet(f"""background-color: {color}; color: black""") def batteryUpdate(self):

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%0D8bJ%LV++(!HE7uRsX1N)!SMVqB z;C%j+r%%QYerFW$7yt0d88QEP0-*c z$Zj#5pmv~8{4^f)sNjQCaGr7zkMbEK!=D`b3l)Mh93JBv43NLS732g3`33h%Ug|~PAq#RUd9JYi_;r?A=Q3`!$0{%5Eb~)LUNB;#_H)GMLF>fkk|VZrY<#2o z!#u_hkJlL28m}>~IU4@pIac$`0M7}UXE)iujN*4*BtOQp_%WV&Ed34F^Xb4apvn-43ZPmY?64fba0NG(CN$ldCYnsa=CelqCMCIr*`^k+PR<|(sVt2 zEbFReBB8h!aN~Sn&D{)3mpa+(!IzwDPQ{0PvRV1_WHbHEtH8^`d(>zQeR#s#d=^wR zg6uLvebIeb>Xm?2n$3K?{*BSUyAhD|E&8`o|CZ?ABK$%vlMtN$bZ46#_zTK~rguJ2 z!Q>0QE*mIxw_WkWzKGERatRd%nq_z_sY`GS!FQUs9s}`lDHy#95W@&80bi1Y;g3W9 z5Sy(d?HZG1V6h~Ct~!f)=*7(ueQ3Ktw`f-i4V` zXcW3I(u|ZR$xxjb7w@m*?bB5IOgAEja6Cu!bf}j|uC3}X$tZoAsP(A|_k+vTpBpH; zk&+SS%h8>Azwm`0j{vTK!;2B3UCG`4?WhhR?7B!&yRh6UsZb~P_JzM5G~-pr4kE!I=%Owqe3>Un5E(+l zuohAW05L4SCh&0P2mNYHXs9jTd_?AZ2L4(MI(a3AV(Y2CJ0B-K$Y>=-<{_-dG$2cc z`^Z_k4gPwbYG*0Q&Qcn)d8q_+)}hZd_a z(6!A++d3?|c070~ok!Ie2uDcFStIp@{Uvp0uEv8+i2NnJcpIApVso}gCCeM`{0Ec} zl`N(ER0J^6U5eX(4;j5_F`94J?gFaEPi>gJ`J8&W^ZO}A1!UC2im=;`5W|$;kO*l| zOGFs1A`F5nlx0Pz6lnZ&&>Dpv#2+PpWQ7?AF6N{7Q#Db%C)kPPQmSl8q^nAVBQ9Xv zi-~Mk{G8dNmGRIf_^d4pYt@Of3j2>zM z^3f-87K&@vB&k-0@y%rvg%9_AlQS5ssSsdI-Bhee0P9%%DAq1|!GZwKgVU2MLmN=# zswFNoXfOsPC|t4#W#SuL6YveLNsKB2lh6#4l2h=Tm09LLjXq#Vx{`PM6Ix!9l)Q{? zy2A2a1I}rnf%72zD9$91b2@&>xgUMBxb&mACyBUpLEIPE5g20ADYOvZU^)^$U^;u^|SK{`fxR_Mtmm`8IrCfM|%Y23vE+ml44E(Z?^5_FDq$@6a zA6Hx!pqxm>Hef!YR*OV%a1sROyoX3zMG&a!q5RSpc-sJ8*&Pwmm9V3rt z;D=OS#7_?k2}UClZFjQZ=mHXpRo6gXp$G7t{EbdH$EZ315HTmFza?9jktzmv`QR~u z9^>GlWb0&2I6+7dbM=S1@ znr;CNtasx_u_ghmf54Aoy_H_N-08{Op7twqOBZtc8tN5fCyNknj}T0bHNllbPsNo4 zmRKx)v$D(lG>k}jNmufwS@M#k^fip*^iZco1%&lf}K8-$FT>4Sm zoE;RGE{Kb@SBgsx(!qgg8ot4F5PlR>638?izu8dJe)NI3q$_bB#5_{e^jXAEYC000 z;4*<>@vlr4TF3>1w^|kwhU~(H0Tq{lnhVvG)L7q5*zA#y38DfyQ{3G$bFn%@g^el8 z%!Ni~QzNsfk(o2FiyN?X(U;4-&aOgUGjowqni}*NQ|E_T;)5zEjB{S7I*yu#M9d~F zsDg?-A4CFR{@PrtpD&-Pho%jgVo#wmMM86^9)7MKga<95bNE!*newOx#Y9*EC9?ps z7b)2b;>t6hxq47?Qd#B_#Pb!XNCR{vV31jWs>vA{_A$T|4jw*WCFLzf#jvC-v!nx< zR+6b_C1d~^R}TUhrRACHlasplD9ijvD*z9wY&Y-zg^1YO>TQreZff*G#Y~@*FTdFF zZy_5}Rj`PYpO^+O>^EXZiDm3{XZ+5CwM|^?b9Q64$ex6=MY*6uWRgrS)2Ht>r@Z2n^Y1_Q#6v44TY?);Ui3@bw~@q^TY zSiT^H6f(mpVDL3h`&*(+mxz+2Jme&CsTE@s$N8ZlRt!|0_&rcUlRQeA|KLA#wfpCbfYh$pWK?29#l0TpDRCUK-O6CN|fIU z<;SKg^t|O)p!}Xtens@-h)UASrJp>qG#_7PXUWY-5;2w@CqcxOGm;qwUD=J3{x3FX zAc%uVlqW)@yN%5`AH*aQyQ&08TbC>tK|Mun;cK~`ZIqiyKpYEAz@}u6| zT$wXS$H*)~eJf#DT&Uaa&O3>=x$^#O@6O8s+rZ|SlG&Mf63zEIIu%?A0xcB8ADs3X z>*VJvf;?0)j}c@}kmt>0>dxd*P%&)ND@*&b5M z5>tzKUbt^DW!z~#zYa2BnH>S=WEOGPOSR;_5|44s%FwZZHY<2vyf<(AZVrLHkVX~- zeI?$!PjFOjDsUbS!+rZah7T(6wYi-kg1(XIWz9||vdo<)cukS{A57Wdju-bblFjZh zto{6q_4TjLEQIojg)1&NB`qk zrh7uszWEL`wy>Nd%mNLw9}gZyz`h>qhnX>gP%pw75Dlmn0_Fm3K=moa<>9ChSeTO(bUg$rV-Yb6_fH!``_r(tO6@N!g;3aU73~UF0x21( z0J>zP%-yV<=+tn zUkYcou}l|y1Fzm>}3r%M(5W_(G(ugAw~G}kEjFRTD8cm^F1KR;e%xMiTG9vPF=@8(5Y^g$jIWKKvI<0vpod;M_}+)l1>DD$56Jb^2+r zI}r}1GwGaeo1jXQw*vUOK3_^r|9~ZN>QvU zjJ8wMcP+0}DOOn4738^Cp>^nuVg6U%|-c~!Y-An_ItiVsuR_Y-9rL$C~+^~}uZ#{N`$@DAK+SdRax9TeE4DkxsT@cdx`V`yGgT1fr>jTqN*PNj8*5F7eHP7F&+4Z_6 z_BI)g1;lLv`*x(A&cbECo3i^$&|*MK58jQ-1?6TFuw4aa+J6K6w+xY{!sF)Be<6^lF^z;8|qbXpD=o*9XP=O5~8< zsAi|+LGz^UxjTpSY+mFrUyYf7bn70ls55KQ5-A(*MG|X?Bm+s8|ACl>E05`@UQwE& z^8aq!F2fU)ZYGpm%(I(k4z_HwuSQB?+w7mA=&|YX&L2qEIBpz%xS~*rFd>vOfRBfq zYW|o&1sf}J;$}vB1~K0pKswmr=Z6%Ci)kq(|8IR{1oV95!}F47BroZQdmKgp}2tN zM5b#T_rYETO?QL|rCC1;D4rlWA`2o7Q?mQ=2E}*?cPISBL)-yqxOAP z34po~ps`n?LEiTtt$<^ZlG3D|_zG)MlWPR7syzbNllWnMjzRvaTB5BkG9TWJ;i>g( za3$h~Isry36#?XL8B1;7v!yamg17y0@E|y{jGHS%+;4p&$q_2}&LP4&M;_;A^M>!lK2;M@JT6MJIgWf@;{vK;5A()h7 zrkMFEM!rf3_vh}&9Hu%MkGB|aMa#$Px~!|@&|*9jj3wds#h-?zB*F0(eQ6|puti@0 zdMKbg_4LY}e?N1prdU-ukWT(c=Qzw`U@Bj;OLdOEtEz^=oBgEEQ*}8*UaB&4Zd7K* zA%-9g!HQUZi$MsrlXS~*7g93g=x?8dx0Q#NF4lPqp}h%xi$6@$+A;rI$y$OwH?%{Q zQYfT;DX}~MBMAVhJz8qFzXT+!NSUbH|0*eOFeJ?Xy`+9o*#FuUStd(%MrGp*5JK4^ zQn`7G&W7rk-2O`_uh){7<)Ic?Wo2g-VhV7_gxcyLlqA0y9b6!Ji~%fG`%n==HL5l^ zVDcf11yf#M4bvJGEc6NEysG2qo!2W-tg_hJ8!@XgsxBs!0@G;>$ih7ZK2#+I4A-ke zCn_dkD(8NoW?^b*zYST>osp1D{8h2TWF9&XzK~Zm;0bu>Ati|=t8YpuH%zIT1R+qa^L~vK@}nJx5waQ{ z)c$fa0}|>SI11o*_*(_g(AB0IHzuyz_#dUDxawJB7<|roRs*$vqdTK^sf9aNHcpa*FSLl=TJ|3E# z3>am>66dMJ1!v9Eg9Bn2D?Ly?Kh37Y08$f=acLZeMip>kI99?RtdVy>NNo76 zgtI;F&(q{MZ9`N*I5qg?NBAoK77F62&|z#d56vo25WUn=Z^U z&iSN@?G_i?*aL5SFd>^Frd$V885qE{;t$8E z2!m%K17&o0;i&3KhYqLuV5z~6f-R39;W4FJ^Fun?GwBmg<$73|RnM#NfFt|5#ir`r z%gqDWcedBNqU=A2C=kQ8M+NnzdeEK@A&a#CpzSRzIpkvQ@y}cO^6pmAm#rb@kq1~K zF6KTCsUz=~tNW@mc3|?s;#;cY+4f_&HjNHEW=vq&YJ83fEMV7zvSb0_uCC}ZC@rbW z_=Rkdww|cYla^TGb)tCcn1asfcUDffu=o&rGYGUCMDtTLm}WvSWq!&sc|w+nU}=8x zvlus$8^U51%45g{TU@*41!4T~$}mc%61;Ft_$QQ!tj*EQl|ih{F*)88{@}UrP2uu` zyuju()xAt8|L~@;h;qnfVZ$}Zv$TGfg3)Xe~S8h8-o?9B?{ z%q@g>93;>--`kAELRN%f*=s=vo0&W09yW~(9Obx-%{@oxK(%Dd^OCJJ0VTnKP{g_ zw80QfiSyU@BF^b`i}UqQM=rmeKh>$p3DT747N29G7SJV*g(9D@U`v0YEzOqi_zL8D z+`hUHjDAaZPs>P*&v38!6Xvzg{6rdD?Ei4?;J6uU!s)mf`xTt%5V%T-&H3kly+6gCNx+fLgX>`sV8(I&QnGK1>jvZNSTqEuj?IfyY0S0|>^2r59f zTm^ks7nZs1VvH$P{KjJV>N{&VoXte-;qWL-*fGq#^m`(9+@ClA!4dEc2xAY2FNCA& z0yP|#aB4WrY?-sc)*cQQ!x7?XbtV|s-Wm~0z^`zQji<@WtnwYH%dhH65Y?Y-mBuy- z;YcIVN<&v!^BNM)W+KlXFNqwYUsoUmLQBdwAZ3ol+hP@kD{bZG?TEz=`7rJIt4v=e zd6s=xX|dFJ{IKJL;)oX1?pcz*7L6RLc}6v!Zpe9veamx?ls?;nI_Coq)}8+AUrG93 zf2;BomHs?p(mAUA&fC$8L%a%aV50|i&SZW)Eg{Btls9i$5>8>EeE_&qi!jW4l=0Q( zdM3^$ojH6ZhIyU*kI67^GaK$1SWVKS=!&~rV|=$3yj{0}3g2sB_WayWafYmfd-f@S z8T;Ow`A)(JJi#zzIJUvt4lm41#xVUePjGmVH9p3b;sTiZ$_n<0%Lx4F31nAx+c4u` zEY3*29fLpatPL;|k|ew0ccQ8Hf99Th9h>~T$z37;W%$e*{X=>&ev$hOco?2I+>cK1 z1aN8l7ql#`KRvw`XF}Y|o5l8hsQmw z)PuJ}6YzFu2fiJ;2`14fZ(hGRydByvA!avD^`>r}+LkhTYu^_sd=GeQKf-!VNfyj% zF>Bt@?|Wm*vs1Ub^F|5|@tFi?jeF*FNU7c^?DikwY}q&}BJ%DtGl{vY?V|9|x($}2 z2&{TasTS)#_P83*_V1AC|J9xE2U}pw7a!VY7NRh8dj6-;sJiE{QwTjP0Ht9o_t%`! zjv!Mc$lVN*iy-qelYgyBaMY)CV_Je|GzzxH{6wKaODxD~IG6XIh(0ppLlHpI%tH69 zTk#3iE&@NibFmV0o`@G4gNlzsh<#{(+;jHeFBBwld`n{hA(L(hplJVvT{ipZk5sDOE;ao#`# z-`KCMs5pA_iZ}SwSnMNujn({7wuLr+iIMsLVp|AIXG173<&R=Iy%CsJD5m^TOwVit zrg2zSfu#IVOgDY;zh>W9?IF_{W&BZ0bICNlynipy%ljvxhVr+o{!P%o90Ze&)?a>+ zQU2l-m>T)X34DxtsCYfWk%OF=O=wPW<~prTd%=a+Z&#xL6AxObgF*Q-z|MFl4r=bN zb>~mTQ50Bm;1cKRTXUMF;f1XSz}sIkIWcz$sRvY8E6nXV&2kZDtc1Czm9<7@u{7Jj zL&q>4=1FYyuh@g+wo6hG7eE};FhCkSLo7;UQS z>jyDrvulXUwDP)SemJksVDTm* zuk%5uE3dN=DJrk_dN4uvJZ|Op5=s5A`R$@om;9b)r>^sRj7q)U{9Yha1*>2yKR;rA zm(2_3_jN4BMC7*sgu3#(2$7DI-yx4#`Mpw7KWu(4P^n9P&$Cn4`8`#oUT=N}phpOo z@0QPwnBVv3hVxsBHJFI}7J*P#ehU%lNckPR$ja}HlKNruJ3yr_`R!+?uJhYNrCx7- zuf;{*aDI1xdc^#03WoFhDVA#@@>>EzUHM&!NKyHv8qavt%I1BN=wY)tQY9+c9A+n~ zvpG;DdW39-d^a0m^CxRE66*kPj>Iq6L=qAr1HDf1GfT@=z&klz4`Y8@D?xK@$Ld2f5|;9$}@il7BTQO z9|wt{jH|k$gS!%O%ljqJQ$>S9|{;VttdCa)FZ?IQ?U5pir5fH$4FhlV89a0}Y-e zi-X8>n&R5j`GHcJuv#w`n&%>bH*b1UOwKu6DI3tiI==4q-vuxCoZIm?#1R0{7rV`$ zhK8y*U1M@uf?YBu2~|ny45(AHkOc}Jd?#q9RE&hCU`Sz=)d(J=11n}54mW#WD7?MMyERwTANdx018^d$>QPK{Q=nMMMF{| z77ZDahH0x!{|C@%EE*!uK$q*r_~Jj0I{C*e;h@4;oXTg4*lL$#0{hI97}Ic>Oh+#o zGHm$TH$FK`B3pcxgg?2&t`ggfFTHL|wwTSWc}Fkdn)A+rX3TMWgOg$d8!CT+H8!t1 zb5gu}`DggO7Ka(i&2b2VI8QJRp7wxpl$%39Q~T{ZHn6%{`|UC3Qrwi#2BLf1!8AP$sIV2uS$!McC~+OWQOHpNYOXuZJNk3WF*1%wGbhZ1EqGK=9l6yg;KTPMWl zlS%y$e^7yx|0{?`F{a@W6r2Ia2;-9)v+>{T?1mdauffoOOFrn`-f)$AO z!F4Fadl0rxh$oOq{Sdn-$A1O!6Yo=I*I1_0co1(}4!Go4yZelKA>MI1L8 zaWBR+TrQ^5co4s|%!2rp#CjnPAP69S?|BErKF}1zEh(T4aVKiLklWoFC@Vg*@J}dGw6p zG11B61@hp4n>_X&wDa;4=`(B|yVpeKFpM(((LJA4835nv$VEXzH;MGyGJyhzzxttC;1bAGeVB6Yq+_ukL zRKl?iCI9_EO~m`fI9-bMbu4QyVv!mP3-D9#`uRM}zqpKfJJQv04!3^Z5qZ$_PqMZW z;`({?{IfH-QA?}dqp*jYfBrY}e!o}ATMQWLk#`)kq}KbR<;Bdl2w6at%y|Oy^#>rP z*O)n0a16 zYxe2Y8HsohpcQ$hnO}-vQ(z*zSAmJuqY0hRSW~mu^2!XV*rT3gTcf;9yfv>YBS@t)?0FIoC0&V^)N^gj*FjMREGb_jrn8 zTw)rgDqJYVjEJ)gG~?f`M$J~;1;e6658ox`?1a;yyCE)i|G1ce-M>l%vrTO6s9vhJNjZeywT)IZXe_#8M8r z%q_-eFy$lcY_H-mZ`S59^fvB_^PF`a?FW-|y9!oJ7PK)>+QkT_dX3NNYxf%46Bs?E z65HvR7|q}h%55vc*e5Sa;Hc`Q+Gz==+Ik{l9!)glZi2}?#Kcbg&EGIf+Cdeu%V%+Uy@6z1RbwH0Q$=v&Ium~}&82Jr_9^A^I`3NsH5OJO9OLt(yM z6{RpoGq5Pku-_sS<{Z4##g6Oyw=IR~jR21QeL4SV%u<>$&(e%zJjN7i2JA{N|7>{Z zQQUd<%qXXVh=1r~ib*P%i5sJNjt?aQ^ z<_ya=V3+OA1aIn{u*WWID9I(t9y{)GOc?12OgOwf_DYFqc)NPK?eUZzXj;3*lUh1y zoyU-5tDca>;CvKN9rn2>m%52$%uR$N@4yXie+fR`9*N-Iyw#f-&7J=|Na=a2x4;1d zR#JapRtfzQI?&FTWLxcFfpkTS3;AQX7O$||L)nmZcA)ba1Pje6E6`MwXD(to<(UOw zX?LIuqB~GYDzH@8qwT0%&IU>GSM8ysi1(<%UFCknCR6mKyThNR{w(+N;*RP-r3+~M&tv7TY`*(X@$fiZ~{Xh+2$TR^jFmk^cOJ>0sJu2 zKsqfltu(t50lb0*Db4enb2=>LS6iAMkdI(`Z0Y{arDlg~p_q4rTNQr3>YDout#rTd!4TOKvV+f?`0d+YAy!|_#$qIIv3W$=sI;I2~6sa6ymPa~J|37AhD{DQH4 zWv|C3msB-NUSAZOK6`Egc+-j_e(Yg3hP7!F!RU0yTU;Iy;}n%h1LukLcy}ibMjd(h z0yFnGI}K2xMlc?=_Rmq9Ui)WSxL+p;V9wW>ad5twDKy>y=0=>LSk)6anhzgq4L!Or zB|Y@0F?*x>K`|1Uu5sL^H}HdEO+^?EJ;X|VJ2*IBrrmi7=NNk2_y!dSejHUiN{0+P zw*JCl2aVS=$L8`T%qwhKyl!dBIs~xK=g>a0p1-W*hE>2ehDeREj2&KrwkSKeOf)9A zcr0o>%lN19$RUSl5P+@2QJYxYFq;Wd-u^c3xf^kMJ#YWfFeZgi?iEchI;{tO{k^fB zndx3pd@J~PXVk`G8_S({GY%PHTV@etMpfI(YozX(^I+=`Mi%eZ2~I?UNDBw?vjPXr zCpV&H36y1~*0>*7g3+LR-glTCct@9|yH{j1s}a3)`&%A|&VPMIpc*OqbHFICtVUIV z^uV6u^5g|V-4UtFBp2;73 zf^E8jIRf9A{OOqV)C#x%aY&nP1X(AM3qRBGuZOBm1}yH`H2;}e>dvQkHfjcN4%?n; zj^YcOaomp}ICQxZYLGx}H!eEvbzaE0Aq^lGu_^?Yt>lm4dZfs%SqvI6lVnF@b}y1T zRfy!!3l<>^dO_^&1;lQPeuYY+TC9u7+AM!f>Xqhvz zn%rxJ^05ahq0T*e8&zPZSv!%LlKe3@sxyRDP@n1yaih*plmew1r$B|=>8~`=%$2f_ ztZ_rQV9GWFIt-Mdd*$XYiuMA|049VFe4uQECB9?E?8^Va{s-^cV5X&0smWI z1)cOy2BEe>T}7t*9=HSkSG4ba;^J6_epAFHyJB!n6&JMyxe}#`VsXfBHg`Yp^C4N$|Kz}oa+|JI(-w0@8aytPHeWsC4_-cnnG zdr2f?EEW$VJ@Z*2#)8@S(f5*g>4(Ou(9`_cni|K@>JkwHo8w-I(AD8^DqZaWUt;Q~ zGK-~9rKep%7d<@zA2%gb^qzZ4|#Tewk z?6jp<&D;-08)lYyXnMKUA2hft0t@A#KEm$(=zkQ7GQybua)Jqe1LgBbJ@RpJw-t9d3y zY_u{8-e{k?Qf!~4!DW_-5UQowi1mM&<7eWvn7L=6q?HC_@OX@E*BCE1M|FtJuw8v5 z4VZ$xRz2dZyI*WiAsVg$7}Ksq9ylmlQb^of6PZ$DDS_`Mr3ByJCXF$*8ogt7;BVS8 zJ_qPn%}uBq9PU6T)G-Cvu~H+&5Hub-b-@)mg801fFir85@Hi4uY&L#*;h%z~1`%wE zXEKiAx{B-@3!cHF6+EkNWy?6610)R*@wvi@Pc|Ik0mDZvAWSf2S)QY+yiFRbMYZ|v z^WwdHHoQ;N)#7n_M^uYK73yV%!hl!mR*uDFn>k5&FQzvwK(HoV18 zDyK${DL8cH#y%-)xt`ag`-S`~jj%-5obhQBN^mLVJVGbY( zpdcqOj^Vn9Dg5uXLbM-xeN#Tr?F@9ypPO0J)yYUn?S*v3(Hu^%XHyyLz7T@0Q-#`R zj(wIAru2Ib5*o+tc$PJ8pE(lTLUBi-Rk7ilfe>}V7sIG(cdO2}S7w1V<^m?vK=_hH zI9Cm%YDD-l*(_j)9b+zOYQdL^l=N1ThR+MFJv@AA5^A5>?cV}lGfHS2xAfl%zEi+0 zv>rEj!th-}Wb4wtQpEWO@C{}{4TNv+GZfDC9#d#M?K_(-0uMc!W13j-9YjhBz9AaE zR<0w#r$X&Be<=|7-iM(Kz&9R0)V?3VEi?z?nJ|1!iELf)-Os4?YhQap(Lng#6yaRC zOri1MJ7EUkOC)?1>bC~eGfo04_|pz zsD0+Rrv$zMFs%XY+x?V+?V&Tuqt*}KV@#-l@TG`wt|m;O@!;Ez zshqMT_96@ms!i65kdlJ0K*N^}%{)AOD%3vnoW%lP9B>1CuP;{coeplHk2r$2yN>=u zwl3{^A94Nxd_$Q~1L3QFlES&xGKI#2@BOKO?^IUaTmQD;t3gT%zLgrjqhpQ)p9;0l z-1&sSxBf|iZz6tJdAEUEXfDU|Hhe9JY+dlpWYqe#?<7LeK=@XOaISo&(0K5@I0f)^ zCwyo9Wx@9zQd00$YWO~ZW*%PqRH%LCYmWKENmAz8wcG_;Qhwg3r|O&4*?l9zGRnpE=<%fp6gB z0^jdAenI%gf}32s3Bwmah&thmW7PWLTg-$S2w$oQ=W5Or8V|nhSTkLfN$p#Dz=AKG zDcQR`*FY;V814%+(4y^HgdeQEU4=0AF3-7eg!Z~H50{Oe-VCZXdN>O(?^)#7=y?^6 z&`%i0aBg^@QuccI2pY>EHs|=Nv%%xd*!1e=u|Bt^`a0x)GA3W}HvVuXl;tt2fGyHUh5Y!R=F5^?@Q2a4~*5juz= z14WDvi^!hxP!WY1A>y-$UoEc<#pY1NB8oT{#0U}Jw34($oC$kop*$q3P<(A+B#OT- zaEN#+MZ8vvc>BjTinHq!QK%6j#)yb2G(}uQ5v!0wgoyFcBL0L&F+*GI>e4zmtb zPKP7(7Qzz64IkMePN-8vp+<-}9Pz9DDl|pRrHGzr5pTDWv`|c=h!@!+-U6#7PF;NA z5eJI@fg{vbi`XSB;*dH;6l#Qss}R51uR>GAu@rF$h!H4mu#&VyT>LXcU>#gv}YQ^3-I4)rJ)xDu@uKNWI<4D2qKN&mHc`|(w)Ca<#j$gJQLixxaao24{B(= z4l0y4Nm-#Nq1V(e1Z)u{U}m&{cY_dm8R4lPrRx<4;loZocw1$W_XElzSFzUH6Yl(* z7*%aigsxJ4As+GuUV697oxcU+0EFp^JcK^MH?jOs{o46ls=`P~lso*B9R7Xj-` zUV(ckE1i9|kyR>uwy`f5@w z!*>HFfM5;>s5o&kS)aHl&&-Q(~aOTm}C{8 zjFHWAK6Nt^wzB6O_CO_HqWkz)N#b&{V^mhJRiJ@gdhTB>CbjjtSL30mHeTa} z*2%2HdG8QNoDmqx^J(vF!8e|m%Z9@n_!g7Y7}NzEMf@2%+6OF z^^%~@>XploJfc=(?neeNNuABK@Ps&Pm`5E&WFWn_Lk8H}kpxh+9$_5AHHs;yswHXG zc}f_y3~i`Y%d84l?%xlhu3B<-_@@3;!YVdE>-n;!I+!ck?#|~h!rl-b2nWvg+}#|1 z219=Zr!ZW%L%kGSIA%Q(4%nD14EUbIvDj=jaI)Km7cGm@1DlYFWX(ufJcql+VhC8l zxJ1L)5gtc|5$_)c4#Ci?OaK!@Z30*dA+T6sxZNDYII#ap_Kk&MLME6Qz9Ms07VJ(2 zYG6RH&n*#e@N?%0$o{l_NBp8F)g~_Toxh zcBMMC*?~ZQy0A~Z4myRA#um6j@8LU~<{66r(atoFQM4GQi47!ayJ}3fUFB%C`r};n z{uYzkpz#WEam46|#tR1@V=jdQ6)^{RqS=T3u<wu*6actNt%pL97&phpQ`hK;it&MYPP66Hl(w+jEe_4d(YvU*;{rCV(61g z=}L$-w?GK1F+N9S$e8+^x%X9RdZZNrmSN#rs(3C653`E`#2?!!JofN+n)_#R4nSGe z(Itv%UO!6>Mzip`3fy`qlnJUj7iB_zNJphMZ{cJ2ep1w?^L~8ErgMmyWb4dKia++? zi(~_yVa#fz3@oVBX0tDAU`g^9fR~nAlk4{Pkt&*(#2=h^I-%E~HokUa%5&vhcPxze z(}(}mDGooD7wlR(S=Ji93taQAu8?TgT4NtQqFr06E2M!_Ku4~SJI&K5XoDKHUFLg! zsgMtlePdO~dFgD_s?B|#=oW1UV74k_$b=)XJ8^%XEqFw!VK`od?!(402@bS$sQKQ& z_Yr8W_8$h#i{Mconw#<)j^>?=W4QW~ePf}So<=ll%olmPETVtNcA|+fS`2h@xBLDh zVHta>ir7#*y{r^ci8pUeBvy=r$blEY#(;?pYq(RbgGu z`A*m4DX=^kS%+_#ewaFJPOHBT=S~AG4eX*jGLGR2k$q#;;T@@}4qu%fU5CpOsRioL zduRTiKpg*SwKow-)SO9&{ zO96CVS~Nf&CqNkrAeVdAP#d5EtWMhiJq$-QKwThcod7+L?eh8n>dVYFP=mg{PXKy> z>>CT9mo88M9dmIsKpW6l+Zt2`hti;tHbB#{Kwtwj5sqkpnnTb!0rF!*ygq z=o$FCqNzrP*eA;F*ZOWUcyIq5!Jw6AjSEr#duf0~|_&#@PT}gf`s#BQ)~CE{IfPA!wZdy^vEsKo>K!4eZ^%xk~^l zB>Tn!=;iJTpkptH2550-2SAU(p&IYYZGdurcK~!39MJ%^fS`2(H1n?d0XmtPZ6H9a zCJI2a$iA@vnscrKXm3h1K%JccodidEU?VVU;=cbH84K`+_8ZIjec@pH#pU~q zz|D^3!f#;*BLXQ|>O{LS3?4^rma5I)?`$Yi`^@=_W4MNsePbat@*FVZ`h9uNXs8}N z*`Z4h!=c)x5$9U%($`p+QPu9uy$-GF1V^-1y?$pDR@TyL5~b3wJae zpni;FxZ=sau>d;uECtYgJ)!~n1Iu*wv}BL0+5L@CcN`2}D1gje4uHOaBU*#*!2WVX zZL>6JCw7bL18C;>h68je;~1`8WZzf-?d_%j8k!sp&?F~7cfkR>hTK(Q(}QL8?7&|N zr%mTrZ4*{GE8xI_G1i>)mg1!lHaj>z4UyHBqO~)-9y?qbq!J8BJ%OO?4LUby=Yu}R zJzcK7bIJS4+YiA^?=V&f2MOrdXtdJAX6^QI*jq9#dJBod2u3`PVaP_x|Fl`V0_VfH zQ`N`K;5PeW09lyMB#O=RC#DE;dURTV!uCmN(a zPLO)R0fd^n^UDE+(xqZ2LPZ)O>S1_$AG);q)+m&$;lV}lI5JAr=B8U3iqbywPR7Ch z7uh!!O6jMA8Fi`f>}Z%)p6S#jIFusA+A!@)aVXL+aD=OzbqWG7J&LXBh$?5nbUZxj zgXz_=4TtGc#xY#&$-c2*Ix$hhG~=vjn0h*4N>VU2bLS@m52a0AoG_huIG84kJq%2{ z{#8Frv;Ng^m`-CH!?m028w;l2PSr3CJu@1nBIhLd6;6WnxIEu$E7Zl#de_5I?=k~h z!>v<)NL;5vy^p=D`V?yTn1&;D;ATOpjO-f=sr9F5q>{QtBh}4`)ah`b-nDY)m)HvR zN1CJFy%?cTj;^jV#EpQ-8c#iiJ+vdkw9`DFS#IDw@3Wf(rl-liv0(alf`+Lj3@=A^ zb%oBQg6H6{ySl-4SC@q^dr)vO9EWsu2e3O)PP4$&0M^=`MWPAdP{;YQ`gKUFGN~psZ&6a(EmWsA_Zj zjSU5ApP9!vhHDVnHx^J=oeXB|?N-6od89fm>Eh_^o`FO4b~9|4COKic)d5q)py0(D z4+B$Ic+>||$*6|IG>mZ!S2wb6ESS#jq+xnEF&d^sCrk-&*vQaMhB1VE~zE)Y)pl=8mWj%xd$D5&sxWH8IE4u{Fa5%z0$rSYSSMf(G+I0#D=q9odF$ z!xo-B`}@(}&wIa@1E_A;Yq08L1U|clM=6_y&vvp6-?<{krLU6f4%HCD?^un?3dj`=i!Y9-4@Z)F)vJUXvX7;me?1xQ*_bKRJ3PK0u8Dq>M&8! zPG-24nl^$or9q>HL=@)+IMso~3LM+uakago1a#qQz={@>v3N6Fp*Qdy7V#*R%x^s% zBJP8UGl)IoB8P}SDcU%Sc)Awn6Ggj^;Vco~Ax(+6`q~H)yVxQoL18H3l6eb>h!Vw$3*p;xu7?VYV?n;Fg$u>)yJ#FHXL%!gBE*@MiS$PoM zg)QPXMSFQ6!9%Z%XOkyplDf65g#B;i8$}-2o(3jsYG0f zlWIgUK}4hrD1OpRP^^F}v;p5?6jN0)r#MACUC~}kb)eW*(e|Lvvm2ei-;(UT$Z!^l zA<~qHJFbcl@fusi`5MKkP^fA@T@djqC1L?lyevY*g({h8IP74fc)y~xc8WM&(MBGR zaBXx!4^_10P7(W)rbP5ciueYc3dOOyx_k|#K3y=;CBnm(TDWM)5b?DMyX| z2FDF-5x-ZoTY7- z0mbW;h#rbKI6}lhDw$qR5&J0GUXDe&YjL_N+5;33#ULWKQ?wF>vqX#`O^MhvQp9m^ zDiq^I7pu)jpgh%nx?(eMWXNg;x~#m^H|WVcgM;V?JkD1z7OCEL&Rf{|6q z_PGl7Hgw14rdzsV6--*XS5&YEo!oS5vrq*qAUD4Xc8fC$V^tRJP{AfM3nNspRA(?< z>pUu$hrupT!P-(bR6x0|Cz@}MfT{B4fXg|iS0mtSo`#_Uj1;j)9EVoqMH~(g&A=^S z^J1t29zbbPmPd0)uzJsPH{W%$#>v>*{uB;tA{u$_=H|-}Gt2th1x{doPexEEY9Q|g8f zTZbi#ttSj)b_P33PtI9fQ;W9KV^}vi-Tt4uU@2$QM}kbOQ_po1_A0$_cZhnvSOt60 zSqF79GD`)MX5?;sha2M)mI|1$-5g-L6m1^I3|3>j=M@Q;= zwR9g2i~uer%K~mTGR`5)a2RK)_S1!yZjkEP7Qq!77}2xct&$mma}RcT->7IiIA*X! zyiCzn9PJ2qp`vYLI7`GcNK+zqixlx8I91uEX%Sb6M$iQjH>xge5JmhXqD%W6W@AvZ z-@$$jAI6Cd=RH-11O?Z(7(SV*(+c;3&ky@DG`72Mu?aN z5iy77p&gIW0m@wvn)w71N+?h-zWtgOJTo= zP|!^;3OvO)B47(!s%Voagaz$VMLX{((5%vbOwlr(!um;5_swT}BB0#^rxJFglzz2& z0))j(MU}pxXDTfHnfwkG2OzH9{^+W9&w6Pzq^gbOcd$6!8BDADl`5F1d%6nd1!tR^ zR=KlOFj2V^Rj_Bs4G>A^DCKQ8dMs=6Ok~4q^m^e$R7PO$k=C-+YB#n8+TYbKBVfjq z%$6fpST33Y9joe|p0_S8ea6qbp+PjIvUvcwqc2eQ9=v%U#=?9C@6BU5Xf~BH@V)9D zelc%{AeWRiJB!j3@-SC$83URt`om6;URX~9q0G;}t+2j62*1c!Ou0WDUkNSSv>H?H z&&221;4!rX3>2RQj9|VzhbD@CgJCncl*IrtFuOs-YCl6N;!1p(?I^dAS;DvaJl)pF z3&3x`{F3_Talf{~lXsxW#1v1kwbv8Oser+Q`#ff6NXo4MBeTL29AZ|dnX*(jdB6ES ze6TQEf%L2585Rvx5q8tfip+545+Dt7m4qMW3V9)=NkWjkI?Ve17LLzQIvt8>n0ZnIK%=bRFi<|v_$thm zB4sYpLnG-gLzWEn_~6s<2<4CvEWXaEwo>_RwPme0?;?9Wrkk-qjp;H12eSj))v(Q< zU=7=FTzWDb9JawA0GG!jwh&&)j2gIErxVYD$B~!EYs|G7kfK3b2(VJeIEL$NvTv+` zTlW|}a9h|y(3=l%<#gR)2X0HBlXh}Jf}@>$Owk_XU=BMjZ1+q*X{f+lTvZlCscBd> zBBDQ<&o6Aqn64L?9WthSv0p^9`Z%2GdhZ03GtYdk!Hc0V>IheOOqUCnjOp&ghuyqM z80v{T|CQsUJ7c)e6Z{Sqk79#qwS>}2+bT5yUSdMw7G{={lHAi*itksz6`R4~zZDx@LYX*Rut)lHN>{E)}1 zAd;a0W-66FE?*}2VtXEzjTCEIClbEDnL`v$+=mAE)#hvIb?_Vtp0G#aHD+lOBv|TS zTU!e=ByN8Pe1rlK3*k%tEqV|<*`WsyD%yh_hgyB(RMPB0{VEJ+lsPUMjrsJUhA6># zihBmRAEmXdvv7yeyJdpinaCJg$a5G3Gci%bzn&2R)V!^DHwM{S39DhAMq-`#2*sce zY}fGmd<@C~p8G-3&uQ(!r#4FS3i$<7K68#_7pXL$1aXL(jHmo;=EYEmIewBg^A3u6 zJbpCumiW}nF9)M)2_5UZv|40}^$oU~<{KTmJujzG-DS6DGlWA+&Qr};*PNF?WJb+VLS*fX&3Ot$Y2~v>#NLwcp{mD_t*^kwt^&f{t^!QK z?1bP}6*voxNVqRBvT+Dta|sm514a4-AEDk@2nvr9hZP8(866#paia8#VQlpn9pQ5)xc{D76CZyE`a*TD3JtoDyL$X0^>x0 zu$#*Sogy|Z-h5gFec~jCpie8>HBLbdMQcYvPuEH~NzqPo3ObrJHJlyOH$u=);MDU2 zfJ;I5iC%c%f|NUuRfsqQuF!UThp~)T$?QMTA>v<8iP&$P2AYMXsc0rze|ukLqoU<9 zoP}ixX=)I=_M!+8&$dM@5-h9Dt3^b*AmX{LM8p!J*bU!d5pP$?T;mk+Iz@9kMa)#R zV=1DwDwnKi-=69au@h-Z#Dqu@18^!76SRo0Lp3mTQ6g#-lPF>&iW?Ry#7;mmZ1%z4 zT&`&2n6!oBzZEUDwnogyBqXgq9bi&*=lWaU+gXzi<1DcYk9XBG69q$v@7fqKnn$ zZBR07{U}|$7%g#TUJw@fS`Z&$R_oKjw=Xs0`Y%v7{J9A{Wk zCX+@ftIeK~QZ9y50a=NTn>FTr=!H~m5~z_PD694scJ19F1l|0Ez*N%SA?P|qyO#o3 zC0?Xx^J@U7)doGOXdb7avq@7`+qf_S&fnowf))y#JI#&|6w?R==atwKfru-KWj4OU zSf;3CIypr=MbW=3byqSgKd5v>iD1CLAgmN1-!IY=#z!(EHHW{{U$1A;A`+ZVw4|!)3MtUu#IvVYW3Y=0po-C;P|Acr0&!ocsP$ zF)CGaua?MxI$DB<3ID?J9L~LP;De(y%#S0^o}PoPxQOF|*7WNYY%A3_{mK9Y4V`{% zIUjKh*HW@?tm#+LULI(H{i}nVk2~)+oeNMfcajHVLubN)qox9$CSabY`U9)p2@;X(N z0uwrV%DM3YY0CK*LJh$S6D=gJQHZ!6qooIrV?%0jdW{wy;~h%o36z-wxmc;v@YI%g z0?yRj{y#90zysZZ?{T%wOuLD4>OX$TzV zQw~nAfD<>W@DTdlaV*&26J1d_s=#J2U_cI-;!Kt+em7Tw{vc}WBiq)a&Gnn zJZ{h1>7(!T-E!A0IdH{!-X1(^;w__Y90$L+vb6T7U^2<1>CJJgp`7j&A18k{<3LZ; zS@$Dr0`Ypr>drqO4G`L4t}B@P&tsEqO)oQy+uwEj&xC*I?YAV8uM;k7o?S#Z?G~j3 zE^{T~TP;dip4FoKl5X^m3-oIS8Tz*lo>~GIX=$=FrWIaj-qw!B$oTupZ#{AB2w37;j5d<7shO z#>+9N8`=I}bNYD#Uu6ZKr4zL&Gj%HKaYlCV<~Xl09QF8{oHQ6SCViR-3L5eqAo{8T z*T7sa*R6I`ouR)qo9w_=G^JI?GH$b?*s6Q9w>R+ddtD)hIid$uWNk*^zK-Sn5c(di5$(8q~D&$MX(UE)d zo#wsW0ZW4xQg@lhGmhcGzC*Sr9dE&B7_TI>@yzcGqf6bHb=yL8NS%c846z%`0 z`||jxilyxY2t>9MP#}m(kf5NV1dI|z%}9bXnrKuIR8$l}yy_Ko22eqRnUM_RXjD{O z(70W>u5ke)3Wmi@+yidl2Dsokjtim&Tp-``RQEY^W)hUwmp{HYKbT&sx~jUmyL#{Q zFAn+kWwS#UbexLwGtORFJs5E)_Gy_!IQCFhi~LL72pu&7y4#q!uR^%cjbPoZDBv3j zG4s#CLSZ}+aGF=xHUPmJ!C2u`GZxIMLhKMi5cI~1va)Fn7>M|@GAlMMs(2?e44*gR zGiR4%W~LRQDMzMtCGp!q+|`9PA*cqLCh88SY5U#EzLTNE8tpcOr2n+waq6DnICYOW z=3^qdI-jvdV5c_&6k{7RVl)*&dHa9e!vzMWCAKa5G<>v?OMS9oLX8VC=sZeCGR z@Y9v};=nct)&K&K*q@7{sAWLOb}fkfZ)IECQnn#(+18>X_)FO`(a$@wF`#5yfAIfa zwro&K(c3(bb@Yb1{MWL1-Lf&DWE;5~WEBBp@ZCF%y^JM~zfx!{_wMVY_OFkVd z>Mjh2u-Dcs3qZ{cY97kK9^nv9BuIRxa0rV<;_Vy`VJ<7)E@3rC)nsoYi*Ut!wvkvx zH5~rcSFow2lVG!v;*G-V_97I+-f?>bdsO#?s` zPjB}~N0u6$K@-;*%`07O%QahjB4Hnw!8jhrW%#?dYi{AKopj~pmrcSn0&|EP0rb{- zCQh7mDPmihRNM>%)B|-E=Y*%x1HJfWYik6FUG25~IXb-2*?xZL5nHG8;d8R>iwO!# z!MYv*sCv131}>|XPM*1HXVGz&g$hQ>_U?6 zH_ycGR!Q`#LR@R(Y6wmMaKje!kUy|j^mo&o+cEgt#c7VBj!#(~#x#+PKS_RfO>>$* zBTZb}#s$8K`1mE1%FM`-5hGX&1z{4T7AEy z`?#NDpXjfZ(_~KTx68_L?kjgkn$qyE(9fsju)FlL{!{7))4)+*B`c@(Y2bv}G7a=@ z$Lc*Q43rWxOH|xL?J*y_K*tS7oNF5O4AvF&-v4G)Z_cAWtl&I~A+-jX1`8u|sGrz0 zP!zHTDR7pb5yYw;Bwb28>nZpX8zgU*i%`#Va~v4CVV3GI=9pUcN#Qt%%_B%>SJEM9IBR? z*%aBn-{GlvC*2obg-H-2)L?!Z68tYGL0^}K7x6KmA#@=zP_2c_>^2DC$LxeR6 zlYYuP?+kuK5t8WC2y<}t+Pp?8+LVkZIl zXk9dSr4+UeNWwnD}VA72m!F?2r-Kf>chLs}(-Sk&54n?f)HcV#xM(`j7 z_X4UI**{Iz=wcAVS)EcVYQteLB zZiRO5*X~Q&eP6pjYIm}xXV-)KbXeClYmE+nuiZ?YuD^DV)$W{X4f7|%x)3%WO>F!R(TIcF2LK*QcjhD{=DwuaRt!+eBI(y)2Su)&1+G;BsP ztQ%p2HEg_s=|gu$@E5LetAlsem++$kTN{*XpX?i?&){LEj`bmZy3Ytb04(;GM(8p4 ztS9gTLUM3#DK-}DgM05h_et&ks`Znl!v|}3 zly=Y8?o8#PjC$d?kGqV<^n|+Z$B;mo#ceoe;|3o=@VyRrT?)7t!JIU!)Jsyp+j;n+Z^!B6z~#)Z_!|FTujEb!=^Axci72EjrJ|VOm=2~^-6}-5cZaa{ZX2f zZXRJZ8n!+eHiNKv8n!YSHlDB<8upli>755$(ZzNyY8rPHtUmBVK~}bMRf}wcfYn|@ zc3`tosc<@WP22^rXs?tuvE0|oiO;`1=DO9WY z^;WP3^2@Yg`pR#Pf=%U6#js&BRQ?WBuuA5yrwz+gvK*>l*_35p8#Z6T@)c|$VYxPJ zh>~-Jf)$dVZa+<-29<84f~{q`p(>pf!Rb?$=6|%iT)UrYcdK^0D}7jlwd>XHMD1Ru z-Mh8>f_C54ZhuYZSnZyvUB7m3(eC5gHMQGTr{7Pz1=@X7!%KAdBIUv+w8cercb)Te zM-`jyboyU)PX_N#u-^f{mI7`|@D&dDKPlj^x&i!e2RtVQ{2IZRIN&KM;QtUj#R2ou%vGVC$JR%+N5ZxYQ2 zVUKCphsm(Z35#ghl4RKFgk7#-_b0=SBz)jIg0Pr|HJu=N*VlQB;2gfA5LsGIlQa!}Hu0;JYmcXbqZN+a zXP60M%90l$*79mp86OR0%n>TaI#ju6XZIS(6>44A6x-gB0v@0R9AgW(S=p%r@I4y{ zn1V*Xqb8z_BOl*10>Ht+$l{aG}(?Q0j@IZHda)RUm1bfhP6d zml2%K1rSWIX)PziPc=gBq;f zDY`iS7b#KE#b6|HmCSw!+J$$>IUtaw2jozfzI^gW=LE_gMEM?D>RN9aWvvTk(|Dlp z07Ej$A{WX^qCD0D*Tqs8prB4f#_AZpY zh_X#rjf7sl?3B>UPiF(=gBB=tE|hnO!uQUS^|HW)@&r+CX@PQ$3#F1Mm$pC|>q41C z6dzD5bQEb8GLmL>z)v#Y0j?Con4(t;qHSC#Sw#6o)mm5eS>G|CgYVA*%IX#pVoid&!zaiJVbl>Ie|`lxK;25}ya(eScw z;56%9Obl!ruz3%f!yFn1|7Y>e)Tj=<3zQ+Wm~R8cPTa$ubm#~pc!LmA*N2brCf}I8 z9VxLI>|7tlF~|nnhx;$DQK%SHihaWV=lP1bwqij1XGUkKv4AyJyNQL#-W`&AuCeV? zdag=DSdYLevB!JwSUp6_RSLHp0M}!J2<2h^hX4DPpbV z8dZ9H9MMm+o>4It4)l@;y4D%kq;hwyi*dv!scZcP5ms9*;80t@G$r8mpabSv6i`nw z?74(B(c!UI3XjuLc~p=G?xcwl-Z@4oAyKc8;Eb1O=WZ3tN> zD7F^QW$DIigbqc(8mePLjVjd_%Ajpvs?}=M!+J-%JVk}n7WdecqE5lSm|IcNc2HDb z1sj$EyTXC#iN!;R5Lztd??*@m`RvqO#{Y+MApQdt?=m-GfbERmHF`&L{5qW@-Rv%Q z!KV{`ZZh2Gf{!KqSi<#(!+Y7ara!RAG|(yDJvsdzuJpZ-o@Vj&HZ+TrcL3zA>Np$P zyQB60^CGRs?+pL{m-xKO-6Qv@x9%P~yIU_aZ)8ExM_>`KxFGw_#qw|Jd!# z%|C{ko3EOy;V5u^H7{m?vTXqgl#ot+YNL6$57;pG%&sfhHo-v-$r+a6AS1YD@ zyRo<{o@VJ_%sH5iw_@p9v@0C(c!u{9Dwb|Q0MEERh)_v%(FT}HZ)D%c)18CsQxQ`V z6+4O}1%m+4hZY3Y{b8~R#0>Lo29x(AaJ*&;&i0X6EHo89{(03KZbbD~tek>Ja7YFZ z;0POhl58|nMl$-5k2<f!g&kvbcUd|)N_-0W;0GR{7;muc)+~=xPv!{abq~+CGy#g zdVXn%(sRERt?2m|s0MFPxb^%!qQYbD+hTMpttts$R&CsP8!N3-NrMP!{o&D?X$U3h zuMNac(%(~Bf3tCq`LFf&gV`He_$T`N(R^k*QbsanlF4pV-prRkFA}IWzeKghK`zvj zL`B7wAJ$c#T~5(q1W`QWvM3J~7_V)ZU!5bzT;5veI_A=-;?{hPIBZ`^$NCE5nxqw| zXP#Iv=3wN_7g<0f0sd*Ir)JUyAd~%#69iC-qEOH1(;70H>rp4$7AnPso zlY~1#338ZQxM3=;gu>bPL;4~P_n3;%wf=G-kHO%@to7!9AsuWC4rzJAE6hK}OGbw> z9qgB6>Knwh$kez$-I>aUV9eA^EU`9)7*d%U2%luCH#|z>GA4D|7Mj?Q6km9C8G>>Oqw zu0;-~{lO|(Tk3*a*kBsrbS{F8Y9 z1SPO^8y4Hlrh{adrVmsW*WmD89dZPrzcD*Pc$QSfADfMe^SJI*@kcKhw+1AaMK22h+y&NAtGdSP~iMk-IVuTsOrrQZY^cs3V(OTGO;V-I!MgRc;Vs3rslvuDIh{ zi|faMJ*{Wa1{*D7@#_d0!G{sT+0S>vrB9Yb1JCBY?s*kP0*4mAD$e_Uve7rl0z-*y zS(qMZhX>v2yvDM29dQYIKw$5puvNY>J<#2=DBao{bS58a<9nK3OZOi&V(j&2j>s{B zHJ~tJfDz=xV#E+5)I%&&XsVP-A#PV?@YAJ3fMvZ0kkL1-Qf$o8PsCM#zhscXNFZEuc_$hNlzNl&Pd{kj?Yc^ zO!UQIvJYaQp$22IKRwgxDItfHmM;ektYL1D*Nn{TB3!;$RPjb;SOvV1LUXoa zm{!O;6^bc0jgy&jpE$vEE<)ku<;&kK|1Hy)^Cn>xbvQ*DRci8?-f*x>C9-5a16aK% zXh3Tk%EDX@WoK0aO);O<-_3Z2*I^nTRTTa*z9)YM@aIT@yy*AvxE%SKtDDl(;)k?| zUc%@eEutSrG+2AWpH7xPr#=*ge=`=3scBlls)^U`B4cVj%`tDm8^)XmQ9a{1Dfo@w z8jIK17}v8Ns{tBn0rhQuhg#r`qRs1C@x`w&h3F4UB4R*V*t{Dcn6F})jAyqPS!1e< z;22i?ie($1C5#tNKnRAS235=(S)f}EdpR6Y_DW<(S%wf%_$d$DAh1?ygRlisz#t5V zyr7D)EH`NRhkB`v0kIKcn?ySocHsrW2Zxn!VETwWcm<%ajmaycqz1zCkyv}H5?-Fo zU~DY35I#McodK>K&7O|d&c_vAu9Z<1In50bh`|xw;^MQ!l_-sJ{R-FBfN)&!))?wH z|Ap1Aj;U6~4f-5$I1eLT=p&4ic5_90PG}#(zzym4CJxp^1*aT1d9Rnxy05)4Z@D+x zqaA?2X-mf_+M@6Vy}{&T6pIf(L~;~}B=;arZW^jSrF)Lk!^eJQ{|7xv58qp*UHdN5 zqLE7448-A;9%M@GKvbGnLqK2Te%bB&wLrUu9N>D!|upjHWIkSH7bvF<{hLs zdllz&XM4tb&heb{vqdKkFV~cS}gCYP1;~OV? zjeoBQy*?w;JMncCZ9H@9I{F4RXfj)jag7v0h)p&Q?Xl#kHfdK5Mn%b}g%56*h2oBD z#Je9rSbf#c4!))V9hKQS`UY>qqP8&X*3qTaR5)XyqpyjKXMfRs3N@Soe?_%)}1^Ij%%D zq<$K~ihE*rEW$4!~}iGX{Aly&gn~tuxdyPIc;b2 z5JP}(crre+bRl#4G!ZXVg!P2W2o6*TS%tK@D+rS0ro@Y z_dkHq6U2I0VL|-|r$}}&a2)mD&jdG;0wl8zXkD_qfMiSdC>Gn}7quq;6)vpniRBS2 zcUN(;LXlc9o+!FLN}f+bgv;da4_r=5e!$*>TG~Ak;!Uo)6U+MV|AYUNaeC{Yq}v^7 zdO=?If70v?c`!tC#&fCbhx4Vn{Ok+wnA>*5k;a_9tZI6^WdtwGbcR}3KRg2=EECqD ziegUoukSf0lS@x!h`|_)4HUB?3#LWS$pqECu2o3PF#c^auY<-hH1eWfK*hiys0=>- z>GeaR>h(jC!QCohgT}lUQ${j2l8>5w3Fla-26&_evI`U5>V$W`_QpcB@Tn2ktU3<2 zzIsdzw@PpU8~I7|3^#%kXm%VmorX|iL|TLp7rSafMe#ME2>&dF1t%r zFa1ZUs^8P8s(PBbw^j8x0*Px`ho1yNqWSy8FvvsKB!(bI#VvUcaX5}Hah(z8+6AhB z{E1QDIMfbSoyST!I%G%<`M3rxL%uWNSqAmXN|l0h$Va$2oT`XQe`bz43WjeE26hPn zZ$D84ytdvY;Poo*FbddL3wR0QTmpV!VE`KWj~O9+~ZV3wYp!e|%QnqPmN)EY;FfzujiRkA5w zi@Q!u#g(cZ&X2eAMrVbWq2)^>WIS8od~zqFPu?{y5{ zEOrP9y_`Kt@-%XVOD`v=xL%ym+IktrxSi-_0CEA{{_>7XFKuo7f25bUzY>bIq-d|U zKU<82)yQHt2@b<*6w3LSWI5CBn}OmoZW)j(q0VZm^AImFs+BrxM4bJ%mJsKXwbCwwD?P;30=w-^^<(#wH}YtoAqW|A|4pHf_qwB8Z9S6Xi> zR~t|xc&|bzx1t(hu67?%F2<&}U};@XQrK0RZ-2?LDHpL-4{h#1gvEQtRE%#QG>h;` z>v$*qDJkirsp*$7{dGG19x6R6oe?~Sk*HvLT)xs$>PO~yQ>rJR*4~Pb)m^!ecm0>i z^6s0;?_~1pD)=$;?mi-~qWB1EwzZJ$1qxJMBpxuA_9NY(6;m*4m3C!Z4^2e!FHYh5 z*cVz$93Ov*fOVgwiJ1o`I0nv$pCe_3GZY8Mhib1rqwyLNLB*o;_l9C1er_`SQ5XDq z!jDachg|U63EwXnKFI~Y3UKZo4cKT8!uZ@pjjs@-$yto6}vPo~8C zZ{)MPdW22)sUG3vM^bwPc9c%1Iu(ILuX!}AXkyemn9F4LfcKbENZ0C^zy5hq49>U;3^xs?odLC)P<8XF&oFUNCKY%zaaMK9f!3FMy2dMA-_vm1O+Z!GI zdN<-tS82z;>PkBiajp*UbZ`s>WBL7c1a_PHfkYR{Z5qY(eonbQvR!6-{H24YnTx0z(Q~@ zW9%n3ffp5lo(TfkE&>lK0(++r*vCa+8VIyL=26o^Be+skhH`6>Xm6$UoOU^_MlXo| z`X#K`x<@rzKTa9d4EzLrw#0?}@d;b`~cD4Bc2MVm$6j@c{8XStm%4*1k@WS7r~32d_!-Bo@Q@*L@srx^0Yhii6$z2p7F>kMBz1J%`*wy#U% zq!UtdoUwGRJKBiy!j&c&z|rOPjpms#kL8?oYP@?u&2Zkv$Lm!T4W3= zZmchE?1*y~8;~e1R=hfI$l$!mvEmPg03UA>f#azd@Oh&rWqJ!50^RM%Cno}%NgT9$ z5L1zs(Nx@s;pbausnGHU8QcmZS!S!3U$6^Jz$ye&$3myV2c|>u0k$#llJBB2c*y$0 zE?6bS^XnxA+X6jY@rSy&JIK8e*^EZa#A@N0Ow3v;j9HZ`UN67QaJgd7#SxX~Pyk+G zPoqHgW655#w&R|^Ad&G!cI5qtBx{C|d!A@U?#rz@c$AuJ>Wgd0l`&BBvs%rIM9nyf zvfli*bF!Kxve?BfATh%fD{kKX3q0!L=P3qN^~F_WP^}o;s#IEhhcKujgK!E1iTvvP zM0Nravj#E9OL3KIPu1ph?8u-ZJyNkPV|rKbd{m?BVQC`mX2;tWg*VfjfaTe0&rqr} zQl1Ras^fTv8|?~`9w(9>&Y;qfe=zkE-(O5C@X2O5<|7K9w6aU>f47=m$C)|z4xZUxebV=tVxc^uG+q!!WmaVn_M&H6T+uqpc zfw?V;Zw+|x4d3t|-blqb8i1oK*b5lJC@P3&HXl$;3+&}7-_h(Z^hV{&y~`LE@2EpX zSYsX5iA`RBwDm7wO~ey^jo!OE;H*gSdn0%{X-98IB}^--eEu(Hu+A>@tle+S> zxuaP=e_$51Ma=9~6wfuw$7$q36cTn5_W6MGsfk#me6$hS1?RP#0Yx(IeV=18IVCHo z?%f2Me01nsml*OsYG#MN-zO(@+Trz-)jWcH z^H*b8*&FF`10A%hO~A1(f=ZEht&|RsOiwbEQWj~Y+{iS4sTAb1$?QY6yQY+H z5mY^WV8k3M>E3$*>Gsp<-bb9$^%PRox^6OO<|7ozpR`7F-IEUJT>~7s-^Rcg1gr|s z!PEk%7Z6A7Xv>hIdNqetfU)j>z`$e*+P|Y5ktBh=K!E2QnL0Nm^#zI4Tg|%|7|7IL z@1aubVawuv7>*dEpd%hdLg$@;}=0&EHI_ z?Pg@$7u{>UV1=_vBeT+c1s?^T!-0vcU~U$Kg73_t+)RwNGxDP9c*Xf}u~dT*`1sXZ zyv89bye}b3{44k7EoTgmT`cz+Be9xOywDR1=5n>U9}qmovS2O^k|$i0JFsF~o0;8k zR5F-Lsy5(K;^K*kzl%BcsatA?Z+-X>end%?u#$C%j;m)}`R+Rsq zZrr#UrEf_nyD9_j!b+{2ux6x<;W zz`@OPqEc{&IsgZEm=l$Pd$nM>qfn_ZTNC1(&OjDdl#Y9d%`URc3ij=)m}340e(m;f!dWb%=X^Kll3hKJGB9 zeLL15Z}^=N%`-QQ=x)qg>4}t}Rs7awW_Jcxc#cvn1CY%3mf*dkwBRR!wpcguRE)^& z5dNq(7g0vhHW(SB`1gw6d-3~J!Im8fF~HQKKW!Jc=E8+ z6X7-_hnAg{@fiGA9t+h1>D3yT9rGDXP>RA&U5e&|u9{EZ;JY0>E&sw+G5)$S7FVH# zRznK0-j#2&k9ZAV)_xJe)0dvLX$;Xdx;TU41&Pcl9!E#Oh0P90l&2=ioI0%n!|W2hs+oVDmJi2iBZs z(Y&B(dvj^@h1?tjV72+}D$g6}G^HF4gly<`ZQIAk8tX&+ZI3Y!A8VxUVvw1svj$qS}%q^p%TQ z8yTajuT(;Qj~>)DlGt&cRbqo|998_Ji-Vk!L7Di9|tH z+yFt_Bnx^cPA1}MioX+-BvJ$&zdyAq01;FU=`Ej(5fwHAqdom_)9^{;3`2q z@SQxSLLq+XzR=%LvH391i5os}H?KkjP6A6au@%6^5-IY2vk&DJfXGWx%z=))2PMl}4k+ZUf}`YR1mv9! z2l5_S9|{p9@)AUO7tDmbSTS_lvn#M)u?w99Nu3Jt;|~ zD5-lN7ODV5NfgCA{Z+dXj)Bi5ZylhJw-Jt#ml2S6IULA44o06Kk(VIK+i(r!g?w&# z?}PliATLRz$a}%wlve;EFGVpQUS`YtD10t?HvkHGH^Wi#G6M2$gadicgwZERa3CigFDCzT-0X-|LqoQsjM(v$v1{L|%$w{=C$d_gDB_@}{BwK;A4?FZ^K`2p{B4 zhXZ-fg3%{P&SuG;@=L_Gb5D`a2{@Ek398klM5x*Ug%^`3JMJEB@=wUgdv1>R0-Xqzz zh{d)w;V?cA&X8(ZOl3a%N}?GTA_BuZ{E}!HTt(Ca-{`}IDBd${9!{dfBGFDllp$?< z;WNj(h)zI6z1-a<(WwY2qUXamIzOijl1_qGBqc71EXxj@<|~Q ztwKlR)m{(FG)yW4&Klb^5Tmwl5av4Aktfl9!}!GBTv$JhznLsOICA*6+?;@X_=qAl#sp* z5o&{-oznz_6ss{MB{^pmpLPl;%gxGK%wTfxzXTE7e6J6kOI)xb1+wZZtQb*XRqRZiE9HApenQD zi`-)^3Ki^Z1uG+ri+Q4#90lVV z6LdX=mM4@*z@k%dJwcfR9ML9oy=r&_UO`4&t$RQ z$?AedPDy}|*VTWwy?Jhwk?PGDe>Xfg!n@w;p_tpD)5JqDJWB^deFebi&iO*j_lf-A z+xB=LrUR0f1Ae@*Y{Ve*n&&z4C3QT{^ON5JR<;}D34dlRb~Em)88@#iDX^wL8}E~1 z-$e`sguRv~0kcio<_FKBOrndb;HRe7BG@FePHYD31+{7sj1YG$upCEujL;zx$YDUL z(-4vx52bqMw#yB#X#5tB!(e+0PYSHTmX{pkt=Q2vFdWCFmd|U$59P*IpdvMUYC%Yf zxEVVjp*kbTW4E5Ud*w>oojIlu$&lmeOvcE>%5?x)k-|FiTXF6;*FgRMZt>aISju4#Aj0uVghG&`iNHPKYyo5}#~ec+Vi8pL z$sU>&w0t(0Ge|oY$^mQCP2Vx0#I!w_`U*^5l|oiX*c+oHUQR}0+rHl!h0T(8CgD~ z2)md0-5$j0kSOp`y|Q3fy=)zSfQTCQW5ZP%n=k6mO%E?`v=*lOjADN-vb`Ff(fEM7 zYUt*12Fz=8@G@-sVkj;d=c6qH5zW?$)B0U}5uEzKqf~AEUE+C-CSO=YAaDTMNcUS? zZLVccspeV=in~Civ8q)n9W|9J6I6PMEZBx+trwAcS=T{ok;)YvxD>+8YMt!!Pg1zR ziFu#E;7a6VR_Z zkte8bV0#;nNQsP=ST*HFKnRRzDya(_>O#(F%!;M z{nWHTb{q4JKX^AMyr%ZTh5}U^Gm=G9UlK*r?29Dk?O1s7%Fm# zr9eZvhnP+`X>%Onlr8)2aoRE%J;`hut8ygYdYo0S$31WWFn0h)&fc-otV19^L&j|i zPt{^J8S_BG?1OjX5s=s8XgnYLVmrT%L2C1fbdn;lkc?c-VAFqH1p1J`XjC2&n5+n( zjR>bBf8X9L7bQqX+phkM%hmV?ATiVJr`?{~?W*1O+T8(;pb_6&31p-Qln1cgE+g<; z*ys|vA7WXP^xuKY^waQTaoh%1kBI_@*!Dg&8mXM|&;$wOpg1u&nu36JIf?3iVkEfe zbpE%jK7a_tsYLg`Y;{x-ROIQKm@0q#f0K21-NJ;(YvH%Lkvc@}uSB)w2+lwyw%&ut z@ea&E=QufOtNE8U?BlP6@t0VlbQfNRi}876Jf9U?9S41EgB%Wu@6B)|e_=|}Hy%sK zj7|or)|-Awg8Hl73*jbIVFaH<)3E!{u1MqLiwzWjGHA^F6@;;%DazxNX9y!VAd=(P zC;!8GZO;!*FO&1v8HZCg8M}2Vi9TOV<;l3MLcF+AVSfCT%0G@PO8z129zt@fw_;VM zI?r#NgBUcdcu)Kw$BSLapMo!&(ovGA*~}F=SVZOPRjrx<*FL{#%V(b#UyG5ZFZ`j8 z=f#)u!)~xK3rStgUGRt=PdLK>RwJ)~{fWg0ZRZF;X0rK`Rvlm1tOAO>DUlLZMHjb;%nK6kTlnNhI#B26NR`IY&I=~Z%RUsddL@6$qil7m!q!L}- zQp@4!Aad8qj8GNu@rnYnG8I!yh*5()=(FZ&h=CF3SKW}g!xEVjRCne!LpPGSCUe!J z%v@+25}{7Qh|`Ej7FFJesz;>Q${ilBp+qOg)_#Unij~8OL)r?Ua$6I z#0sA_;v@@W+zXwxI$Zq@w&*=`4Lugc*pv!{@t)2hDcrFfl9~&Fg=Afs%pQ-wBIHaD6HLGAZXA1y;brnEBTmbXu#8u|)|#8}_RYQGABd1BW#UrS!nj=oTdA1f8?M>7KdmF`_=t7a4_>);j-$ zyiejYVWe0|%%dTjPU?RRkrd24Kq7^V|0P6LGqRgRin9DqA(EOh|AYuaKJcI#qhpL) zjZyHI*rs-7)Wvyq6u0I<8K2KvY3rf}WTA^XI8s8+DgXh}hj-_RQ~xp0Mh>_k>x7t# zKxl51F{)y4?IEZx$wmhf4{zdx?gB{*2WOOc{?3y7R;Lqh23@k+vwy5lD{+Iku+HKb z?h@c|5r8pDfbfFx@MEo13{bStmLVNs>w5eoD(Gy8g$mjaD0T(K6aeGtMEx8Bn5v&0 zrGS}Hr+y01shqMrtYyLhZN={bUChSH3h+%baps4Z81^9DquTWhbn-T@;6_IrZ#oOp zo|;}@|Ki|RfuZuAFkm*vGh7^T{BbFjYI+a}Z2PlQs*`Rz!{kA7eB1B-gw2|YzE~d0 z)^3@03$;5$yBz-zFH5^=aM8ZY;Xq5QVvKnSUyVfv@XgQON1>`J#F%Zs3>vo==}t~v zqr=Cry6lUCagIevw9>N|s7e1?5cSOM>5H74xsw$-68RLTzgi*EQxh>;C*rKp9gdei zK;@p+sWjdvqJ+8v%bCYI3ca6{?QyFX)`twtd=|i2XeUs zLtWQ$2O5rUPDb!4u(962k2wQrp?^J6yb&Z?9VupzwwmtmWTXf|o6LJ45t_z77%2{6 z%1Flcdzr<$Ea+f&j1-6C*xnKh+tSQO{=hZOa`;#t&)&nHA^%E3572QHK!6P?gHlol zlvvx80VP~Dpd1TaHF%7JQeyDfyj{x4yoUwR<8C;#Iop9_U5&y>=y^Y6vsFDWVA8+W z^H65sAL+T_Zqf4{ht^CTzcLJ;|e{O6WUMf`FSAhs-EWnSJme}5Idpg!=z2*XXC~*>htS&DLoGc zj)i3tThHA8DNG`==ajh3%BmN zI)@WCn(txaQ*?3UB2KBe7Lq1Z{1&P>O#32CA)(^Qa9EY!0FE_E>2wR@)XQ5OuVOz* zEMp|&3a0tHI=snjPtE*Kbo!LA!3xiPcZg0eCZFA>(`&AVTKF2GnbpL>O;?T-^$Z?U zcG*pWE4xYN_rHoN`_Dics6(vxI>aeeUIqaZTS>E}#^?X*4pC(vIP5#G2adD+dKLl} zr!!azgVrx1s#-whK-zqCo@)X1V+5>UG|vHVJ1ej~Nuv?*ibnqw8t1!d+({ZWn#RVr z92#pFA9rZ1$L^?Gj(rm}el$-b?wgv%f&`758K3Rs<=zw;>uz`Dr7Lj@IdDPmcc!9& zQL1G6AT0aacd;d+HzM?;!0L=N$S3RMex&h=BlE#2{4RF$yB`6ok;5VIv)+_^+x(V% z>5zw^b`6F~B8xcu;d9D1&&NshJf-L*I6~uA(ze@N85~T8=V^vBk{SBI&>E?T+CtWoua$zMHeP3BP`5sc~#Q1)$N-K*e?*kz3ILgYp^@*w-c0m#o z`if`qXMg;#8hwICYS8pP#b&2F<6mIak{Q2{6#J3|^7ahgAC+g+t=WpQ9>D6dXjSL_ zDP}KMWMOAYuLrq4c;t&_6zwIcP1pM)C9f5C`*e zerP9{nV_ou4xXY6f z6%9#y1T$08-k{UALt5?+j285mS)$z{xGmpTsrWA27jE)}w|k?r8uQk0GkX{amCtHS z^LO<$wNDQmIN1|J2N^%q7r{AIoR;uKXJ+8pRewef4@%quZ1s(S$f&G(REOB8OcVsp zWZT&O3d8s4eEnfUpjH zdy}d^F>_S?c5c~Yz0Te*vG;Sv-%QQ(EDrZ`uu+5>Sy$){SBN)yZI;;)eG`hP6A{^$ zf^d&0S-bahqKHAc+50)4V>{JGHX#Kw@h?e)uVp$?)!>Q-&A>vq_WGJFpS_{! z+>RMLL)c~f8gmMK;ReJJ_=yvY$YoU}M_)GI2ySO69H=bL!*_~)fE}p;mis*dy@j$a zg1U>&(iF3!QqCUIi=)n9y zjXrSZ)HnIsoCe;GbVhKg7O=G7S0lI#0iSxgd;?fu@W>OPT8<(JrPNf$Y$wictJB<> z>WwtDe9tG+pd>kTgHuXS71Nl5Q8X=HK3fL5xQ+)nmOCc>S2CDI>_-8Bq8DPxjH_qn zN_4PuOBbruW`8H#V6NeTzRvN0z1Hf#L>dpSDLeZeTwiSm)LJgC=9x>$tazcUtg7hB zc6pxg=f+}(Fkbj7tzldJX?k6JZ#l5%=ua3a*dxeZHpIk*=!ND$h=!LEDoI-2_p3F( zK~!nv^6b*1FVE46G=hWJM@MJX(KP-NW_Ida*=bPOndW5Y(nNNGtcgflx?E?dQDx{m zu;E*Lg!q}G#^aqF*|d8jx&|{nC_a(N#+yGN``DP9w=#a(^XWJv09NV#abBFRHM;=R zB%k0-_n+d8$WvVAHtf5~n}{QU(`Z@RNg}Wm+dXf@FG0;2=syi6!EOL6=D;jgoRE`^Pj-qtr-D0`U|u7{*h${fv=#)s(4$mh?mVb=L5ov60=v)hP%2bkhEobGX5Ebgme$Z-@}NC zXMeEFuzn7w#8(xTg!P%TN4boP<(6{+&{JYTb#G`>m*^aM#Pa7GVTWR&N>F1HP#2t# zaWs8-LXD_;Lz`r5HkcBJnKF`b2KlHdv2bqn{1G^803mXKcdhnfCJrBaf3z@`C{_xJ zF4ogqb32L-YO0)z`y|utS#gW?$B&2=%|GkkNLETp=pe&$qAGAzO-y-?LNkdJSsUdS($Tb6d z0s*;Dz%)%uC5`Sur2~+P^$3uhiiPDmh$Iz@jSDhkY9+PS2xTH{?Po_yTMZ1b+ti_K zQ$}bFa_%Jf2m$MR>Vge=gz#xV*`@o}fX7<+%mW#Tl>RrYyMRb`480=nu1W|WBMwyq zWIdwcx)IH?c*0!dW5$8S?Rl$0TU0K3iH6S&^+T3^BEfv>?Cj{^nfn>#Al_kCl&aRVy}s!QCI zysP2L-jJt``uvD!IydvM2?-5L7U zOouxf&n~nj1YM1gjNT#m7#+Wa4G~>E6GO9(P-~O$QWcr}&0is(EmsbRf!h$$6uB5d zZvEhn9$p{nPYC5Iga?>x6bh3O#N^Gw(Rf~ABq5MXNaB(Qf*iH?6S){tB9MT2B}Bly z+=(QA^Bk946A%GzQ{gCXj3Br3;g&&P6A6J_#pM|Cu-&HB7ncK}c=qW0`r---A~d37 z$|=RYU7?-gay96yGPjhIKM|BrVsv&>x&;2hIIfnDo`Ck z%SRtkU%V0wd6opAC@*d4|YEOcgnVksg;^6A%GzQ{gCXj3Br3;iB|I6A7VQ#G_O;8p`iabpCzJqQ<- zB=j&Ll&cONU^X%=axsFK%i*G?g;o**xrAi&4#9_9A9SKz3@N!tz&t?YBBqKYf3q7R zy|Y)A$>Q*OZsHy{i!rNcsa>NojJ^t4S0ekKk8M-?l~xQtF~naB2cx15I31-&UxMl$ zebo_DjlKe;9}8i@N%Eu~X+X1rUeyD(q^8bruJ*tZ-3w1JoB3YVX$YoL{ zyHS#DaI(Ld*}p<3J4TYp_kBttbA~{Lr8xAsKi<16>{75f(A!g4#myj3Wo2)wHzp{w z8Rx8YuMecIpQ(ZOTfXoIzA%;mf2?Cq>2zGaia+t>WU<(WKn+5@t{Pet-jG&T37qIT z%dz+xC_cWvU4Omq;XhqoZG&LbunNLZX=D7Oh-W!0yU57u2g4C$+Q2NUN& zT}gOS0~CrSl#=ilW(hLvA{lrp+~AzSd>mgy!m`K`)}Lv6xalkhIoUKm~Yl=Yic z&d-2;hW8r15xi(xbhLcGhWVOXT#n@!esCSD<6|oIcV%YdeN^*YC<@kZ6z-KcFIbgLQB%=b^Iu|N>9Rc+J6Lmz=WFr{LB3j(zZ>K+-l;YJz)Y^Gc)l7D zEi|v3&MzGO;%bu<5W`|CiPV4##F1}$a9UsfF+05}P^+X~Is-oW5aq@2=nqkTXd|%I z5y8wNJ@w@tbH5l2tMaoZ<>5;0I$wCRnKO+zv+7XfQl9%DjB3U=MVkXO5sZa-3d1ge zF12XZ0!K|$uSTpjiy)9NZ$biVr6>y4SxI}n76wZ&;g#|uDmW7wS!iA^gv!$cW%04J z=op*^isN`iV`cmVwxme@1JhU~ddSoRK_^J*cqBKl#rqSxlIP#*xX*vR34u+-OjV9r zm*%lbLV3GFZZ@!wuM)YrKNX5DKmk|gaU$}Fxk4>-WZz|0V<95xu@DK^3@|xwhOpr97C9(uAUs_! z)x>1=LbQ~aCBjBzf{<{M$Nsb7#So4*1TFh%OgF^3a{fQ{edIL~9SDV&;&vsRl7ioi zAlF^I(S7Ft)faxpSMUy=<~-P*?`wQ$76AWVHZ71I1AKE|kX!;Q3w`tXVY3Uup1CLI z;0#DV*BOu@>iWhR16dV$%SzH906N`C=L5ufBGXW!G4rD(!s?oJXz5^35n)SQ^snsI=+HI-3P@N-}!($(p7X#k)WlTinF zv9iuyw+l6AE=B~lJwHLKo4tyHx)g;fw;8HL&)WS;_N?a?V*k5bD&e9^I+2W9uW%X< zQImSrsZ5J1I*4-N*1BD#i_77&dsQOoUR4O#43?6CxooO5pa{9B1|)p3XbULY2k3I$ zP=~D_Uj|oFw&&+%vr` zFZ4N(MHdPtYJM;QK63#gF&4mvGjr^_Q=F6~Vp;(=b!>dZ7fm>fj z8^UuY?)RtEdnVi_tmgJ%f%y~};t_VfWTK)g+ZA}Qk-XU9!Tr$r+&%p5FZM%!o6h~v zAt+i%S!HHJO4JmFc}%Adf>_;0NM);#RiK`cuJ_+1iIB)!^OCZwKa_?|bIqm5u_T6l zF>vaAIJw}f6?hXN-+mLJP2eCboIU`Pti^C$a3C#nIH+(T_&EgfKGDJ$LA3{fS8O=2n`WDS&iSv=8oX zD*V(ylwVPJ(oGo~w)Z;&3KDoq?GTkW^{TpwwaH4liW+_wy{m+bklp6m2ie>$zCq?_u?Y+<451 z(U{gD4*JKpGg33q=pEGHUB0cYr#a@u=x)xLY#g9y7txL9(A>augz(Lc=JHuLVdnom ze5k`*Ws(+QzCR$b>^>C)TK#^XK0(Cu5%$^PS0<}7y6C5Ubz^jFkF*Vj<5?HzriZrJ~2;0&H zd*ZBtm5albu&8x}p6P~OO=uOM3FWiD2u{&_A3^(T ztzAke4qJI6&q{Z4@UzkhEZ>0zhL|};r5H8}DPWvL&qpDJ((^ljsxdY-@C80w3O&Dx ztzhVRCLE5hHvq@Fo$Z6?7J>+27Z&v!i%IKIsZrZEv$kJCM#;t^_#WVi`cAs78jBOj zP+b#YD~ApfFIZ6Px*DvXxRV0ihXg z^}QY_D7hX?^QbO|=MbmLVH5;R)c3R4HX`{WCrUZ|f@MqA_i@0nIziP*bpNgB{-+Fd zSy@=-XE9FZ>{-y>lA}4uK#ycTgoZX(c3d&4%|hRoBc*yrHk^3pM$;Qz)D2#)b7H!& zm!f=PF(|WNCFL~4H3ez&Bt^EClATJm)_Q(z{Dah>#zvd~a&-hgPQ1>Dt^x>YUUVghg&(+JH$ ztd&m?7eg7tJLOh?6@zYAa&h{zm}wfSpd{jWMDR!;${33uM(`-&t0u(*GRKreXSh$s z{5F9L8{0|?cJO43bnRH3Posi92S_pg6OEqFJ+TVKH;B%0Y69T+404X-XPlp`r;&u& zdwMevu%1V17XHflq9+#G3q(3e5m+@LnLwKafvx6|BygoBaDyV?kNT$eMwYs z9OI7H_@^m+oI+OSW*!Sncdmb)$5LP#Xtxpo`A`)k(vgAb`luHoKnCMDELE#sdwC*h z;8eNu;!0MiUx0Gx9A-Vw_G1_1lL%O6NleUq5R?*WvAE87J)b(8T%_!=vy)~WC`oi} zz`!8Q>fw$V!_XWq+E0^rL2MuR}mG19z~8ZoVHqv?HJbLXAt1GyrG;j4APVhm;j%78R_UngySIV z1j;%Nk+dYa=h(|7dPsdCFlG?r2w{)Y#pB|8XcY(WZ25Zgr}0jbaw)w$B&lMOwsw*M z@el1Jd&l1tue0FtIXF`J{^!wY)tc`jNUHY=Rhb^_Z2i3AyK!=#Q3_$KH0 zdAY3a`1oBTLRm$*S^TyFKf7t%cp}A=4|q<=6oE?{0cbF8$OB+905|1M1;B^z+?5l- zV{{AVdf@}C+fBJ;gyCD96X;gFl3N28^8JEeezBkuL1w(hEWl%J%xnXr8xU4P<^(t}SP+3Q{^kt5k3XgCZowrPv(W_#!u{FQXPL z5BM#<62mw4DG#=Wl}A1R#+dnbOtq-}0#pF4_D~qM1H5|7?1eH-(d3-P0Jg%<2-24M zqVsa6;DgHE@R)|YPhRC7c}et`&9K&>*CiM9^47>3)^cCP6A27S-%+u{Fy{1U;)#d9 zSdzY@c@yThwZ+EbX&vO7j)8Wbx*yt6>ofSNW*@#0NEV`RBgkuOUR<3B9gqB5JV^>p z#f=s_W-4fm7oTNaVLi)YHU=(lT7kxTKLYUyD%i$9*1FjNw)6X}awnAOKia}_yH1$p zA8cVHr$agZzSbE|sLFQ|Xa^0GV}-+!-B=-4jp+{5ZjN?2XJdSpc0q<={>s-gs6jAEdzAol?U@{u z1XYPCBpgYomzr`=T?qz8?9u)odv5|BWs&XwCqN)7Oa~Q=3L3|#iMS*xP9iReB=9zL zBO{_XiZY9ijx!D;-NJ}qFp1E#EsV>RS=5Zn$ShuQ6vPb^KoW7(fE$Vn=qPX7j>cue zD*1oDRc|i|i;jBl-2d<1JWu+qx8AB#r%s(ZRdwprss8LM>Uja4**@_d)oMR46>+N_ ze$TJ2;P>3>G7~epD{la1F-+Kh{J1Uv*7ig&`j^6qdX|44I@{CL1fwUQB;V-X{pjZ% zb&a8;2#Yxy_z5D7^2W~RXMCgk*-~zs>;fmkCTBcQyjcn;X;YdeKM1cAwS4@80sl8@g7Mh^iX2+>LEi2T|y>7X%?Tkt_$FKvD#(-6x zFeUQM{5gHkAN^h7JTO(8H1Om?1d6I|4V`HEpA$V^cQF?@(NP@Xds-JIZ!q6G5VIsp zWvgA5OV;r7iYOBtR7QBieW@EdUd4YM|7RmIZsK_-{|oqE z!vEj+e~o{a|91X0eLsNzV*bnc-|;--j1Sb#bo=q#vfOtpm!0+vHgdetAA7=+ztywc zOF8F4ge0%3(CCh{5fZ$LXmN+z2+3WHD5_iC6BSYW#2U4TuTJ(dm9qkR-vPGo(}>&Ki`%-;#2u_SltCul2F0!VJ#I!uXIZtkEsDg`JUESfBrz!dl$N$C#RJI3=TI z4G*a*mW3Uj5t?CFRGvw6xh8!cJpaL!t-qzcLm%9WP|; z7}Xo3?M~rMcd;JYVcR%45xvHM3GtfHj|va}AaSYQf5Z#8E zUND~F{BzVUPX*u*-BoX4^-l~;29stkFt)AUTV!TMWuX4!PGx_~z2m!fM&0agovj`F zFR&kBzg+es_mm)D5ehzV_0BUjs^7-$YvDnEz2VH1P%ud|g~9@*vs5l42&T-hWIqBmgm>j^U17@v?%}6-q&%fRyoNXHEB)41f^I%*A9~%d zkB2vzvzad5gE)Wmj!k?I#vaZh8cPFT-Jkdzh#kFuxok~dXS^?6?Js}bcgs=)j}yxo z!(GVijJJ6RxJw>D@3MOcJZd2ETnI^`ffkLE;&AFV#20&gL=0 z9M&FY&K>lw-PqaOdxn_T*uAMYxbKci_3;hv0idm3jFxsLsvvV@UZTOXwK-m}>ACL) zlRdYRWX8U>@|?=EljqCx!POY8X?sZfC+NZ_P^>>Tz5uee9H}{Qnh%ghT2qRnZS=Al{bHRUCr$^{es)HD$of~Q8{Dkhn5ow{&X$)p`?KyP$=1(L1%Lz2*+yV~=Wnf8@E-(n_d zq8#%08cO!$v5~T|dlrji(VXppR0Er&new=SB&L$@xi?WNZ9HG?(OkU%pwQc#ZBQa_ zh9&@L6ioqGG99Zt_?uP@nwi(rp-YgE2+_5d5g>I9lx&EGoa^F6}*x+X~*Il;~m(i%-vW5L!_$0Y5L=uVrYGbE(IduZa z)0vZ!GcDl1W#&3HnF~AIX1C1dx+yc)0GsQf%v`yOOZTK-eqm2~#lQID>BQB#( zC)u)pqH>bF)1Yid)=g1M$=a`Uwfj9L0=w@Qm)PQFmuB$JS)Ge}W|$$+0hz^>CW~7* zSE46fqI>%nmDv6VQ^EYq65l2+qk`w!5}QSXWCfp8HdSz8W9JgD{K69JY>9s;$*AMR z&LwWBHgycC#3Y*pNrG@<2fx`p!+yV8AdZZJylBJioGe24v=$rnodKZh!uZgnGaN zx&PRVN|zCr(Ng!@vRA7yZNJ^%_ER<)pT!nxn0KEtEcS$^2kx(LHnZNv%!@QT$(R>e zS8IKUjOXe{TUzn$G<6&=lGa&a{3C_l*U!89S*ITnh*^aqdejKnJm%oMCf^w6EqL}d2-jyxpd-(FiRbJBY4--F62FE3Slne$F z=O%-vCq^ZM-$@Kj29HXVC4+|~j!p*q%XOSBVz0!0UND56EEeWxB{648XsR;)CaY-n zp~{!patI`A?gy;HAw#4yFmHy?7| zXG7JS^qZuabHXg8YpS*dsAMxZ~QLaiEnS};j6pVhU=d8&0E^u zR8i@>nMbbg=BCOaGj*7lh^E?2d-G^KrMuwV(wN(NGNrQTm{nE4&o~~Fm53(U zv4zD%%FO!11_*6Z+udL#b}vL@-nkvgA(p@s)Lixhnz6@>&Dv&amFufLi2!Fd1Cdu9 zyA^>Qr1m0SGFQDOO;VHl34v%~b0s>D5}Aye<_--o?H@kOwsZKD_&g|*Om8Cd!bR~~ z6KR>DAe^5;)=T+edfkp5q1kRyO#7~~)VhC$5s{!SRg|4lK-;r}uZ^gO`uK;!|+nw)!4NhdwW_p^4;l8YH5k2{(I6F)@yvM?`Ea;tVRP%fuJ$%VPZmwSgIswI8@ z5w-(}<>Bz&i9-_yB?d@{dtA+J*H0L(jwnw~auILf&W%}NemYyBR+!%oIHTa&g?_d6 zgEA-bDJKl^GpP=n_BSafm69p7HB`(gubsssymuhd#;#LYMnx;1;6qmF(^bAjTX0@C z--({U4(5ic$QJh(f5vjT_H$g44L$%J9R2-8HluBS*BbC`_dX%I$SeZcybIgabAKV6 z!q@BJ;U+Bv{*3XMMpEx^`gLT_P@_-gwJH)%;vBt6I6K8lou)0=Ha~^sxo_rp8Z~~R zX;~E4jLH3tD*Q;}oAXrZw{j>0;%T%zJPCh&${r;2GG7+Ez4@Xnp=Zq(6I{yi$vpQH zvJ1?TlLY2sqaSmkb2NxJ(OWf$IK?Z&JxUwLFB4u*8tOHs>+3{&G?h;*3H6C=k~#L$ z$sa1|_+?3XkkrTMbZEX4z2g!91fow)3d=dBHW|Bd$738+Pj$T61xy7+#tvHSgwYGV;E}02^89 z8#inM8>f95+o`jcWeyPg%miY%+teNyjx~lF!YzWwlJbx7?C`T=IH1pD5jZ@n6Nx*khn`}=4zM&sKIg42L z=QM*cDV??$BQ_(vIaK!Ml56>>+1pt2{lamN4;QE3G|cFY$fp>W-zE{OUCKXaQ7KWR*_XKQkHEbx&+!uT`5mJ<5f> z+NHR@6&OrDWV)*4TmVHVmkXeHSg(RF=@Yp%k~3fl2#2SX%-wJWVkmjIXrsHNjDC=` zKKq0fF7Am*#!O+mc~Mq79_A|d8KB{>ZO-?{*ja|oSQE>tNv}pn!0~!sY2%y?p9$e& zb0cYKBk5-GArP51Pv*u1?e#bZ#$VY(16++NA`+QsUwsp?X4$V{zpjzDN5$>laTjWq zZ|M@`!1zbs(Oo?EDW)pow&D`+Dg5{?EaIKh>>A{K)wdMz=EUmvS2kbOI)7}yzPKu! zUK)t3OO2OHj#d#!(qd|YxCSg#&`kJ*k0i~@IJ+)sEX$}@|(3uH4 z(*f`%a}Xp~okctEU67WeV`LSq+UAy9tQD2Q8u?toJ2KV7x=a~j^`$%j-WH4%_7~Q} zP@y&;PmOp^_x~k>Jp3=EXb=BEpd41${~Rpv4$FhJoTw1Lf(1ImlLJVESiNfA}(cRZYHaFsOJ3sbcqu%Z;Z) zKEI~VZ}6EWkkaN&f*yZc*LWH;BPWtQcAGp`BX8L?Z*=b_U9x|*!JhOljf)VJ{-p@| z*T+0;|N18(O8AIrCjCmE-8ny3zq0ztOVfq=>e-D21Epa!yKRD+GIrk-9=`ge=9AE{ zU2Gg7_X9E~vHDg9R&#*>Rt+keKl~CYrrWVA>TgsOePW!Egu+N)+&=h1@GkiD)z_G! zR61SzdR~|goAlfntZc<>tIZ=i{w&fg>A%i10R5h+&dzF3cdGK@++0*W-Xt@%@zu+{ zUR>^eGsa^Q3VU}?lhEQ)7qSp0s_Gw~K-G7^tL`LF(jg<~kw5>*{yDz;85}ls_thT6 zH_hJvetf$97ElP3Y7|-cgHnp=cI1lszbXn!O{7q>t9gsQxbI9Br4-B#AK7j$2Ev=} zeRIJH&vw=o4NIgcLbZ5Pcv$?8l&bl^JsxusXm`#PTFJLrs?tHGN~XXx1U&lerb+<; z_e6aoFsMo^53eeU={9IZ{Zd6C$o1}C!CcM5GnsQ8@#Jh%GD`%-bUS)Q{o9Hnr{3K% zlXIa6!tI2rVO?XG{n;WTxbe1~(SFHTipZ&9`HFb2Zh)G35Y8$7*s0xI5+2566%Ex^ zcg%4~HlFK#ibD>W+A5*t^a7E+8*Qc&mFJrZ7gaZ4PNg-bpmyZ~TDyeHvE`eY)^5iP zRNYUfW>f*EEBy8X&PB{S9lyrrf52XW)NonH?Gcbs7jUn~9B6+1G&{dCZG&cr}f~ z1x-m53{_ZADnl(r8gb4H72=t=y_QjNRZMT*s!?f+P2Ik$tYgof2PLzO5$xl<=$uafabfyqzEMo?K zguBigQ6ZmRU~VM6XFl}>S@x+lfml|e+02_s_RyLc_9#fnI7Q?(*X!7Xm2v&_35jLq z5IRpNN7PE?-u)A;6(s!JYk-=xQ?KyO9RwrW!h!aB70)<~v>#VFyIP9;AEie0`fNt? z#P^N(�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