Spaces:
Sleeping
Sleeping
| """ | |
| Statistical analysis tools for morphology and spatial metrics. | |
| """ | |
| from typing import Optional | |
| from google.adk.tools.tool_context import ToolContext | |
| from ..services import analysis | |
| def compute_comprehensive_stats( | |
| cell_file: Optional[str] = None, | |
| nuc_file: Optional[str] = None, | |
| tool_context: ToolContext = None | |
| ) -> dict: | |
| """ | |
| Calculate morphology, spatial, and relational statistics in a single pass. | |
| Args: | |
| cell_file: Path to the .npz mask file for Cells (optional) | |
| nuc_file: Path to the .npz mask file for Nuclei (optional) | |
| tool_context: Automatically injected by ADK | |
| Returns: | |
| Nested dict containing 'cell_stats', 'nuc_stats', 'spatial_stats', | |
| and 'relational_stats' where applicable. | |
| """ | |
| pixel_scale = tool_context.state.get("app:pixel_size_microns") | |
| results = {} | |
| # 1. Analyze Cells (Morphology + Spatial) | |
| if cell_file: | |
| # Basic stats | |
| results["cell_stats"] = analysis.get_basic_stats( | |
| cell_file, pixel_scale=pixel_scale | |
| ) | |
| # Spatial stats (only relevant for cells usually, but can be adapted) | |
| results["spatial_stats"] = analysis.get_spatial_stats( | |
| cell_file, pixel_scale=pixel_scale | |
| ) | |
| # 2. Analyze Nuclei (Morphology only) | |
| if nuc_file: | |
| results["nuc_stats"] = analysis.get_basic_stats( | |
| nuc_file, pixel_scale=pixel_scale | |
| ) | |
| # 3. Analyze Relationships (Overlap) | |
| # Only possible if we have both files | |
| if cell_file and nuc_file: | |
| results["relational_stats"] = analysis.analyze_relationships( | |
| cell_file, nuc_file | |
| ) | |
| return results |