Source code for playnano.processing.core

"""Core functions for loading and processing AFMImageStacks."""

from pathlib import Path
from typing import Dict, List, Tuple

from playnano.afm_stack import AFMImageStack
from playnano.errors import LoadError
from playnano.processing.pipeline import ProcessingPipeline


[docs] def process_stack( input_path: Path, channel: str, steps: List[Tuple[str, Dict]], ) -> AFMImageStack: """ Load an AFMImageStack from a file, apply a list of processing steps, and return it. Parameters ---------- input_path : Path Path to the AFM stack file. channel : str Channel to load (e.g., 'h', 'z', etc.). steps : list of tuple List of processing steps in the form (step_name, kwargs). Special step_name values: - "clear" : clears the current mask - "mask" : applies a mask function with kwargs - otherwise : treated as a filter name with kwargs Returns ------- AFMImageStack The processed AFMImageStack. Raises ------ LoadError If the AFM stack cannot be loaded from `input_path`. """ try: stack = AFMImageStack.load_data(input_path, channel=channel) except Exception as e: raise LoadError(f"Failed to load {input_path}") from e pipeline = ProcessingPipeline(stack) for name, kwargs in steps: if name == "clear": pipeline.clear_mask() elif name == "mask": pipeline.add_mask(name, **kwargs) elif name: pipeline.add_filter(name, **kwargs) pipeline.run() return stack