fix to stats when no json file is defined
This commit is contained in:
@@ -11,6 +11,8 @@ import json
|
||||
|
||||
from pathlib import Path
|
||||
from typing import Sequence, Any
|
||||
import pandas as pd
|
||||
from pandas import DataFrame
|
||||
from PySide6.QtWidgets import QApplication, QComboBox, QDialog, QGridLayout, QHBoxLayout, QLabel, QLineEdit, QListView, QMessageBox, QPushButton, QScrollArea, QVBoxLayout, QWidget, QFrame, QSpinBox
|
||||
from PySide6.QtGui import QStandardItemModel, QStandardItem, QPixmap, QIntValidator, QDoubleValidator
|
||||
from PySide6.QtCore import QEvent, QSize, Qt
|
||||
@@ -1380,7 +1382,7 @@ class CrossGroupUIMixin:
|
||||
def get_common_request_data(
|
||||
self,
|
||||
parameterized_indexes: dict[int, list[dict[str, Any]]],
|
||||
json_location: str | Path | None = None,
|
||||
df_ind_dict: dict[str, DataFrame] | None = None,
|
||||
contrast_dfs: dict[str, dict[str, Any]] | None = None,
|
||||
) -> tuple[str | None, list[str], list[str], list[str], list[int], dict[str, Any]] | None:
|
||||
|
||||
@@ -1423,19 +1425,15 @@ class CrossGroupUIMixin:
|
||||
|
||||
dynamic_rois = []
|
||||
|
||||
# 1. Check for the JSON file and parse ROI names
|
||||
if os.path.exists(json_location):
|
||||
try:
|
||||
with open(json_location, 'r', encoding='utf-8') as f:
|
||||
regions_data = json.load(f)
|
||||
|
||||
# Extract "name" from each region under "regions_of_interest"
|
||||
regions_list = regions_data.get("regions_of_interest", [])
|
||||
dynamic_rois = [region["name"] for region in regions_list if "name" in region]
|
||||
|
||||
except Exception as e:
|
||||
# Safe log if JSON is corrupted or unreadable
|
||||
print(f"Error reading ROI configurations from {json_location}: {e}")
|
||||
if df_ind_dict:
|
||||
roi_set = set()
|
||||
for fp in all_selected_paths:
|
||||
df_roi = df_ind_dict.get(fp)
|
||||
if isinstance(df_roi, pd.DataFrame) and "ROI" in df_roi.columns:
|
||||
roi_set.update(df_roi["ROI"].dropna().unique())
|
||||
|
||||
if roi_set:
|
||||
dynamic_rois = sorted(list(roi_set))
|
||||
|
||||
# Fallback to prevent UI crashes if JSON file doesn't exist or is empty
|
||||
if not dynamic_rois:
|
||||
@@ -1580,7 +1578,7 @@ class InterGroupUIMixin:
|
||||
self.layout.addLayout(self.top_bar)
|
||||
|
||||
self.group_to_paths = {}
|
||||
for file_path, group_name in self.group.items():
|
||||
for file_path, group_name in self.group_dict.items():
|
||||
self.group_to_paths.setdefault(group_name, []).append(file_path)
|
||||
|
||||
self.group_names = sorted(self.group_to_paths.keys())
|
||||
@@ -1632,7 +1630,7 @@ class InterGroupUIMixin:
|
||||
def get_common_request_data(
|
||||
self,
|
||||
parameterized_indexes: dict[int, list[dict[str, Any]]],
|
||||
json_location: str | Path | None = None,
|
||||
df_ind_dict: dict[str, DataFrame] | None = None,
|
||||
contrast_dfs: dict[str, dict[str, Any]] | None = None,
|
||||
) -> tuple[str | None, list[str], list[int], dict[str, Any]] | None:
|
||||
|
||||
@@ -1679,20 +1677,16 @@ class InterGroupUIMixin:
|
||||
|
||||
dynamic_rois = []
|
||||
|
||||
# 1. Check for the JSON file and parse ROI names
|
||||
if json_location is not None and os.path.exists(json_location):
|
||||
try:
|
||||
with open(json_location, 'r', encoding='utf-8') as f:
|
||||
regions_data = json.load(f)
|
||||
|
||||
# Extract "name" from each region under "regions_of_interest"
|
||||
regions_list = regions_data.get("regions_of_interest", [])
|
||||
dynamic_rois = [region["name"] for region in regions_list if "name" in region]
|
||||
|
||||
except Exception as e:
|
||||
# Safe log if JSON is corrupted or unreadable
|
||||
print(f"Error reading ROI configurations from {json_location}: {e}")
|
||||
|
||||
if df_ind_dict:
|
||||
roi_set = set()
|
||||
for fp in selected_file_paths:
|
||||
df_roi = df_ind_dict.get(fp)
|
||||
if isinstance(df_roi, pd.DataFrame) and "ROI" in df_roi.columns:
|
||||
roi_set.update(df_roi["ROI"].dropna().unique())
|
||||
|
||||
if roi_set:
|
||||
dynamic_rois = sorted(list(roi_set))
|
||||
|
||||
# Fallback to prevent UI crashes if JSON file doesn't exist or is empty
|
||||
if not dynamic_rois:
|
||||
dynamic_rois = ["Option 1", "Option 2"]
|
||||
|
||||
Reference in New Issue
Block a user