Shape2Force / utils /paths.py
kaveh's picture
optimised
478c826
"""Path resolution utilities for S2F App."""
import os
def get_ckp_base(root):
"""Resolve checkpoint base directory (S2FApp/ckp or project/ckp)."""
ckp_base = os.path.join(root, "ckp")
if not os.path.isdir(ckp_base):
project_root = os.path.dirname(root)
if os.path.isdir(os.path.join(project_root, "ckp")):
ckp_base = os.path.join(project_root, "ckp")
return ckp_base
def model_subfolder(model_type):
"""Return subfolder name for model type: 'single_cell' or 'spheroid'."""
return "single_cell" if model_type == "single_cell" else "spheroid"
def get_ckp_folder(ckp_base, model_type):
"""Return checkpoint folder path for model type."""
return os.path.join(ckp_base, model_subfolder(model_type))
def get_sample_folder(root, model_type):
"""Return sample folder path for model type (samples/<subfolder>)."""
return os.path.join(root, "samples", model_subfolder(model_type))
def list_files_in_folder(folder, extensions):
"""
List files in folder matching extensions. Returns sorted list.
extensions: str or tuple of suffixes, e.g. '.pth' or ('.tif', '.png'). Matching is case-insensitive.
"""
if not os.path.isdir(folder):
return []
ext_tuple = (extensions,) if isinstance(extensions, str) else extensions
def matches(fname):
fname_lower = fname.lower()
return any(fname_lower.endswith(e.lower()) for e in ext_tuple)
return sorted(f for f in os.listdir(folder) if matches(f))