Source code for xnatctl.models.scan

"""Scan model for XNAT scans."""

from __future__ import annotations

from pydantic import Field

from .base import XNATResource


[docs] class Scan(XNATResource): """XNAT scan resource.""" type: str | None = Field(None, description="Scan type") series_description: str | None = Field( None, alias="series_description", description="DICOM series description" ) quality: str | None = Field(None, description="Quality assessment") condition: str | None = Field(None, description="Condition") note: str | None = Field(None, description="Scan notes") frames: int | None = Field(None, description="Number of frames") start_time: str | None = Field(None, alias="startTime", description="Acquisition start time") scanner: str | None = Field(None, description="Scanner") modality: str | None = Field(None, description="Modality") file_count: int | None = Field(None, alias="file_count", description="Number of files") file_size: int | None = Field(None, alias="file_size", description="Total file size in bytes") # Parent references session_id: str | None = Field(None, description="Parent session ID") project: str | None = Field(None, description="Parent project ID")
[docs] @classmethod def table_columns(cls) -> list[str]: """Return columns for table output.""" return ["id", "type", "series_description", "quality", "frames", "file_count"]
[docs] def to_row(self, columns: list[str] | None = None) -> dict[str, str]: """Convert to row for table output.""" cols = columns or self.table_columns() data = self.to_dict() return {col: str(data.get(col, "")) for col in cols}
@property def file_size_mb(self) -> float: """Return file size in megabytes.""" if self.file_size: return self.file_size / (1024 * 1024) return 0.0