table in queue modified

This commit is contained in:
x12sa
2026-07-07 10:41:40 +02:00
committed by holler
co-authored by holler
parent 175fcb1838
commit 7cc0352226
@@ -758,11 +758,14 @@ class TomoParamsWidget(BECWidget, QWidget):
job.get("label", f"job_{row}"),
status,
str(params.get("tomo_type", "?")),
f"{params.get('fovx', '?')} × {params.get('fovy', '?')}",
_format_projections(params),
_fmt_num(params.get("tomo_countingtime")),
_fmt_num(params.get("tomo_shellstep")),
job.get("added_at", ""),
]
for col, text in enumerate(cells):
item = QTableWidgetItem(text)
item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
item.setForeground(table.palette().text() if col != 2 else _color_from_hex(color))
table.setItem(row, col, item)
@@ -976,9 +979,18 @@ class TomoQueueDialog(QDialog):
vbox = QVBoxLayout(self)
vbox.setSpacing(6)
self._table = QTableWidget(0, 6)
self._table = QTableWidget(0, 8)
self._table.setHorizontalHeaderLabels(
["#", "Label", "Status", "Type", "FOV x×y (µm)", "Added at"]
[
"#",
"Label",
"Status",
"Type",
"Projections",
"Exp (s)",
"Step (µm)",
"Added at",
]
)
self._table.horizontalHeader().setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
self._table.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows)
@@ -1015,11 +1027,14 @@ class TomoQueueDialog(QDialog):
job.get("label", f"job_{row}"),
status,
str(params.get("tomo_type", "?")),
f"{params.get('fovx', '?')} × {params.get('fovy', '?')}",
_format_projections(params),
_fmt_num(params.get("tomo_countingtime")),
_fmt_num(params.get("tomo_shellstep")),
job.get("added_at", ""),
]
for col, text in enumerate(cells):
item = QTableWidgetItem(text)
item.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
if col == 2:
item.setForeground(_color_from_hex(color))
self._table.setItem(row, col, item)
@@ -1126,6 +1141,53 @@ def _compute_type1(angle_range: int, stepsize: float) -> tuple[int, float, float
return actual_total, achievable_step, stepsize
def _format_projections(params: dict) -> str:
"""
Human-readable projection count for a queued job, mirroring the CLI's
per-type logic:
- type 1: int(angle_range / stepsize) * 8 (8 equally spaced sub-tomos)
- type 3: int(180 / stepsize) * 8 (equally spaced, golden start)
- type 2: golden ratio has no fixed count -> configured max, or ∞ if unset
"""
try:
tomo_type = int(params.get("tomo_type", 1))
stepsize = float(params.get("tomo_angle_stepsize", 0) or 0)
if tomo_type == 1:
angle_range = int(params.get("tomo_angle_range", 180))
actual_total, _, _ = _compute_type1(angle_range, stepsize)
return str(actual_total)
if tomo_type == 3:
if stepsize <= 0:
return "?"
return str(int(180.0 / stepsize) * 8)
if tomo_type == 2:
max_prj = params.get("golden_max_number_of_projections", 0) or 0
try:
max_prj = int(float(max_prj))
except (TypeError, ValueError):
return ""
return str(max_prj) if max_prj > 0 else ""
return "?"
except Exception:
return "?"
def _fmt_num(val) -> str:
"""Compact numeric formatting for table cells; blank for None."""
if val is None:
return ""
try:
f = float(val)
except (TypeError, ValueError):
return str(val)
# trim trailing zeros: 0.100 -> 0.1, 1.0 -> 1
return f"{f:g}"
def _color_from_hex(hex_color: str):
from qtpy.QtGui import QColor