diff --git a/EStiMo_GUI_0123.py b/EStiMo_GUI.py similarity index 99% rename from EStiMo_GUI_0123.py rename to EStiMo_GUI.py index 6118651..90fe5bd 100644 --- a/EStiMo_GUI_0123.py +++ b/EStiMo_GUI.py @@ -5,8 +5,8 @@ Created on Tue Nov 23 11:11:41 2021 @author: adamr """ -import NeurOne -import RDA +from connection import NeurOne, RDA +# import RDA import time import matplotlib @@ -21,16 +21,16 @@ import matplotlib.cm as cm import PyQt5.uic as uic import pandas as pd import json -#import scipy.stats as st +import scipy.stats as st import csv import datetime import ctypes import scipy import pywt -import queue +# import queue from cycler import cycler -from matplotlib.backend_bases import MouseButton +# from matplotlib.backend_bases import MouseButton from PyQt5.QtCore import QTimer, Qt from PyQt5.QtGui import QImage, QPixmap, QIcon, QFont from PyQt5.QtWidgets import (QMainWindow, QFileDialog, QMessageBox, QCheckBox, QLineEdit, QWidget, QPushButton, @@ -46,9 +46,9 @@ if sys.platform=='darwin': #from multiprocessing import Queue as QueueOld #Queue doesn't work on MacOS else: from multiprocessing import Process, Queue, Value -from Waiting import Waiting_window -from FirstWindow import First_window -from Functions import (apply_montage, eye_reg, most_frequent, connect_sig, set_to_gray, update_stem, +from utils.Waiting import Waiting_window +from utils.FirstWindow import First_window +from utils.Functions import (apply_montage, eye_reg, most_frequent, connect_sig, set_to_gray, update_stem, adjust_hist, min_zero, pentropy, entropy, check_integrity, doubleMADsfromMedian) if sys.platform=='darwin': @@ -215,7 +215,7 @@ def acquire_data(q, size, run, speed, downsample, sleep_time, ip = '192.168.200. run: Value class from multiprocessing library. That value can be changed in main process downsample: boolean value. Says if data will be downsampled to 1000 Hz sleep_time: int, set how often function should refresh. Usually it takes a bit more that that""" - # offline = 'offline' + offline = 'offline' #import NeurOne_v3 if offline=="offline": NO = NeurOneOffline() @@ -385,7 +385,7 @@ class AppForm(QMainWindow): #montage matrix is a matrix that is multiplied with the signal #identity matrix multiply all channels by 1, so we have the same signal as an output - settings_file = pd.read_csv('TMS_protocol.txt',sep=':', header=None) #read file with settings + settings_file = pd.read_csv('settings/TMS_protocol.txt',sep=':', header=None) #read file with settings print(restarted) #open the file to save values during the experiment self.log_file = open('logs//TMS_log_'+str(f"{datetime.datetime.now():%Y-%m-%d-%H-%M}"+restarted+'.csv'), 'w') @@ -396,7 +396,7 @@ class AppForm(QMainWindow): self.size_of_up = 2*self.Fs #5000 how much data we get from NeurOne function #file with settings and assigning variables to them - settings_file = pd.read_csv('TMS_protocol.txt',sep=':', header=None) + # settings_file = pd.read_csv('settings/TMS_protocol.txt',sep=':', header=None) #params can be set in GUI, so then no need for using ones from the file if passed_params is not None: @@ -470,7 +470,7 @@ class AppForm(QMainWindow): print(self.included_ch) # self.montage_matrix = np.identity(self.num_of_ch) if self.montage_file_path in [None, '']: - self.montage_file_path = 'montage_18ch.csv' + self.montage_file_path = 'settings/montage_18ch.csv' self.montage_matrix = np.array(pd.read_csv(self.montage_file_path, header=None)) @@ -743,7 +743,7 @@ class AppForm(QMainWindow): self.timer.setInterval(int(self.speed_general*1.03)) times = time.time() - # self.offline='offline' #remove this! + self.offline='offline' #remove this! if self.offline=="offline": incl = [0,2,6,7,8,10,13,16,18,22,25,28,31,34,41,43,-3,-2,-1] # For offline only loaded_temp = self.q.get()[incl]/10 # Load data @@ -1359,7 +1359,7 @@ class Ui(QMainWindow): def __init__(self, main_file): self.main_file = main_file super(Ui, self).__init__() - uic.loadUi('soft2.ui', self) + uic.loadUi('settings/soft2.ui', self) self.show() self.load_button = self.findChild(QPushButton, 'pushButton') self.load_button.clicked.connect(self.get_file) diff --git a/Electrode_selection.txt b/Electrode_selection.txt deleted file mode 100644 index d23e13c..0000000 --- a/Electrode_selection.txt +++ /dev/null @@ -1,2 +0,0 @@ -full_cap_file_path: /home/adamr/Documents/PYTHON/TMS TV/EStiMo/easycap-M10_63_NO.txt -cap_file_path: /home/adamr/Documents/PYTHON/TMS TV/EStiMo/easycap-M10_16_NO.txt diff --git a/NeurOne.py b/connection/NeurOne.py similarity index 100% rename from NeurOne.py rename to connection/NeurOne.py diff --git a/RDA.py b/connection/RDA.py similarity index 100% rename from RDA.py rename to connection/RDA.py diff --git a/connection/__init__.py b/connection/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/connection/__pycache__/NeurOne.cpython-38.pyc b/connection/__pycache__/NeurOne.cpython-38.pyc new file mode 100644 index 0000000..ae586c6 Binary files /dev/null and b/connection/__pycache__/NeurOne.cpython-38.pyc differ diff --git a/connection/__pycache__/RDA.cpython-38.pyc b/connection/__pycache__/RDA.cpython-38.pyc new file mode 100644 index 0000000..1d7c382 Binary files /dev/null and b/connection/__pycache__/RDA.cpython-38.pyc differ diff --git a/connection/__pycache__/__init__.cpython-38.pyc b/connection/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..494ef4b Binary files /dev/null and b/connection/__pycache__/__init__.cpython-38.pyc differ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..badee00 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,12 @@ +matplotlib==3.6.2 +mne==1.3.1 +numpy==1.23.5 +scipy==1.7.3 +pandas==2.0.0 +json==2.0.9 +csv +datetime +ctypes==1.1.0 +pywt==1.4.1 +cycler==0.10.0 +PyQt5 diff --git a/settings/Electrode_selection.txt b/settings/Electrode_selection.txt new file mode 100644 index 0000000..2fe9b3b --- /dev/null +++ b/settings/Electrode_selection.txt @@ -0,0 +1,2 @@ +full_cap_file_path: /home/adamr/Documents/PYTHON/TMS TV/EStiMo/settings/easycap-M10_63_NO.txt +cap_file_path: /home/adamr/Documents/PYTHON/TMS TV/EStiMo/settings/easycap-M10_16_NO.txt diff --git a/TMS_protocol.txt b/settings/TMS_protocol.txt similarity index 100% rename from TMS_protocol.txt rename to settings/TMS_protocol.txt diff --git a/easycap-M10_16_NO.txt b/settings/easycap-M10_16_NO.txt similarity index 100% rename from easycap-M10_16_NO.txt rename to settings/easycap-M10_16_NO.txt diff --git a/easycap-M10_63_NO.txt b/settings/easycap-M10_63_NO.txt similarity index 100% rename from easycap-M10_63_NO.txt rename to settings/easycap-M10_63_NO.txt diff --git a/montage_18ch.csv b/settings/montage_18ch.csv similarity index 100% rename from montage_18ch.csv rename to settings/montage_18ch.csv diff --git a/soft2.ui b/settings/soft2.ui similarity index 100% rename from soft2.ui rename to settings/soft2.ui diff --git a/FirstWindow.py b/utils/FirstWindow.py similarity index 97% rename from FirstWindow.py rename to utils/FirstWindow.py index 58c5ebe..75c124c 100644 --- a/FirstWindow.py +++ b/utils/FirstWindow.py @@ -6,6 +6,7 @@ Created on Mon Jan 24 11:26:23 2022 """ import mne import os, sys, traceback, time + from PyQt5.QtWidgets import (QMainWindow, QFileDialog, QMessageBox, QCheckBox, QLineEdit, QWidget, QPushButton, QLabel, QHBoxLayout, QGridLayout, QAction, QApplication, QDialog, QDialogButtonBox, QVBoxLayout, QFrame, QTabWidget, QComboBox, QScrollArea, QFormLayout) @@ -21,14 +22,13 @@ if sys.platform=='darwin': #from multiprocessing import Queue as StupidNotWorkingQueue else: from multiprocessing import Process, Queue, Value -import NeurOne -import RDA -import ctypes +from connection import NeurOne, RDA import pandas as pd from mne.channels.layout import _find_topomap_coords as get_pos import json import numpy as np +import ctypes if sys.platform=='darwin': from multiprocessing.queues import Queue as QueueOld @@ -225,15 +225,15 @@ class First_window(QMainWindow): self.setWindowTitle('EStiMo Configuration') try: - cap_loc_file = pd.read_csv('Electrode_selection.txt', sep=':', header=None) + cap_loc_file = pd.read_csv('settings/Electrode_selection.txt', sep=':', header=None) self.cap_file_path = cap_loc_file[cap_loc_file[0]=='cap_file_path'].values[0][1].strip() self.full_cap_file_path = cap_loc_file[cap_loc_file[0]=='full_cap_file_path'].values[0][1].strip() #'easycap-M10_63_NO.txt' except: print("CAP FILE EXCEPTION") - self.cap_file_path = 'easycap-M10_16_NO.txt' - self.full_cap_file_path = 'easycap-M10_63_NO.txt' + self.cap_file_path = 'settings/easycap-M10_16_NO.txt' + self.full_cap_file_path = 'settings/easycap-M10_63_NO.txt' - self.conf_path = 'TMS_protocol.txt' + self.conf_path = 'settings/TMS_protocol.txt' montage = mne.channels.read_custom_montage(self.cap_file_path) montage_file = pd.read_csv(self.cap_file_path, sep='\t') diff --git a/Functions.py b/utils/Functions.py similarity index 100% rename from Functions.py rename to utils/Functions.py diff --git a/Waiting.py b/utils/Waiting.py similarity index 100% rename from Waiting.py rename to utils/Waiting.py diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000..4b60ec9 --- /dev/null +++ b/utils/__init__.py @@ -0,0 +1,3 @@ +import sys, os +# sys.path.append("..") +sys.path.append(os.path.dirname(os.path.abspath(__file__))) diff --git a/utils/__pycache__/FirstWindow.cpython-38.pyc b/utils/__pycache__/FirstWindow.cpython-38.pyc new file mode 100644 index 0000000..c2318e4 Binary files /dev/null and b/utils/__pycache__/FirstWindow.cpython-38.pyc differ diff --git a/utils/__pycache__/Functions.cpython-38.pyc b/utils/__pycache__/Functions.cpython-38.pyc new file mode 100644 index 0000000..d63512c Binary files /dev/null and b/utils/__pycache__/Functions.cpython-38.pyc differ diff --git a/utils/__pycache__/Waiting.cpython-38.pyc b/utils/__pycache__/Waiting.cpython-38.pyc new file mode 100644 index 0000000..8014d83 Binary files /dev/null and b/utils/__pycache__/Waiting.cpython-38.pyc differ diff --git a/utils/__pycache__/__init__.cpython-38.pyc b/utils/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000..3873aa1 Binary files /dev/null and b/utils/__pycache__/__init__.cpython-38.pyc differ diff --git a/features.py b/utils/features.py similarity index 100% rename from features.py rename to utils/features.py