diff --git a/main.py b/main.py index 871c028..ef7ab89 100644 --- a/main.py +++ b/main.py @@ -23,8 +23,10 @@ from datetime import datetime from multiprocessing import Process, current_process, freeze_support, Manager # External library imports +import mne import psutil import requests +from mne.preprocessing.nirs import source_detector_distances from PySide6.QtWidgets import ( QApplication, QWidget, QMessageBox, QVBoxLayout, QHBoxLayout, QTextEdit, QScrollArea, QComboBox, QGridLayout, QPushButton, QMainWindow, QFileDialog, QLabel, QLineEdit, QFrame, QSizePolicy, QGroupBox @@ -1172,7 +1174,7 @@ class MainApplication(QMainWindow): Full Path: {file_path} """ - if "Error" in snirf_info: + if snirf_info is None: info += f"\nSNIRF Metadata could not be loaded: {snirf_info['Error']}" else: info += "\nSNIRF Metadata:\n" @@ -1544,38 +1546,45 @@ class MainApplication(QMainWindow): return (normalize(v1) > normalize(v2)) - (normalize(v1) < normalize(v2)) def get_snirf_metadata_mne(self, file_name): - import mne - from mne.preprocessing.nirs import source_detector_distances - raw = mne.io.read_raw_snirf(file_name, preload=True) + try: + import h5py + print("h5py version:", h5py.__version__) + except Exception as e: + print("Failed to import h5py:", e) + + try: + raw = mne.io.read_raw_snirf(file_name, preload=True) - snirf_info = {} + snirf_info = {} - # Measurement date - snirf_info['Measurement Date'] = str(raw.info.get('meas_date')) + # Measurement date + snirf_info['Measurement Date'] = str(raw.info.get('meas_date')) - # Source-detector distances - distances = source_detector_distances(raw.info) - distance_info = [] - for ch_name, dist in zip(raw.info['ch_names'], distances): - distance_info.append(f"{ch_name}: {dist:.4f} m") - snirf_info['Source-Detector Distances'] = distance_info - - # Digitization points / optode positions - dig = raw.info.get('dig', None) - if dig is not None: - dig_info = [] - for point in dig: - kind = point['kind'] - ident = point['ident'] - coord = point['r'] - dig_info.append(f"Kind: {kind}, ID: {ident}, Coord: {coord}") - snirf_info['Digitization Points'] = dig_info - else: - snirf_info['Digitization Points'] = "Not found" - - return snirf_info + # Source-detector distances + distances = source_detector_distances(raw.info) + distance_info = [] + for ch_name, dist in zip(raw.info['ch_names'], distances): + distance_info.append(f"{ch_name}: {dist:.4f} m") + snirf_info['Source-Detector Distances'] = distance_info + # Digitization points / optode positions + dig = raw.info.get('dig', None) + if dig is not None: + dig_info = [] + for point in dig: + kind = point['kind'] + ident = point['ident'] + coord = point['r'] + dig_info.append(f"Kind: {kind}, ID: {ident}, Coord: {coord}") + snirf_info['Digitization Points'] = dig_info + else: + snirf_info['Digitization Points'] = "Not found" + + return snirf_info + except: + return None + def closeEvent(self, event): # Gracefully shut down multiprocessing children