Source code for ionerdss.api

"""
ionerdss.api - Simplified Public API

Provides convenience wrappers for common workflows.
"""

from typing import Optional, Dict, Any
from pathlib import Path

from ionerdss.model.pdb.main import PDBModelBuilder
from ionerdss.model.pdb.hyperparameters import PDBModelHyperparameters
from ionerdss.model.components.system import System


[docs] def build_system_from_pdb( source: str, workspace_path: Optional[str] = None, fetch_format: Optional[str] = None, molecule_counts: Optional[Dict[str, int]] = None, **hyperparams_kwargs ) -> System: """Build ionerdss System from PDB structure (simplified API). This is a convenience function that combines PDBModelBuilder initialization and system building into a single call. All hyperparameter options can be passed as keyword arguments. Args: source: PDB ID (e.g., "4v6x") or path to PDB/mmCIF file. workspace_path: Workspace directory path. Defaults to "{source}_dir". fetch_format: Format for downloading structures ('pdb' or 'mmcif'). If None, uses hyperparameter default (usually 'bioassembly1'). molecule_counts: Molecule counts for NERDSS export. Default 10 per type. **hyperparams_kwargs: Any PDBModelHyperparameters field as keyword arguments. Common options: - interface_detect_distance_cutoff: float (default 0.6) - generate_nerdss_files: bool (default True) - nerdss_water_box: list[float] (default [100, 100, 100]) - ode_enabled: bool (default False) - ode_time_span: tuple[float, float] - ode_solver_method: str - ode_plot: bool - ode_save_csv: bool Returns: Complete System object ready for simulation. Examples: >>> # Simple usage with PDB ID >>> from ionerdss import build_system_from_pdb >>> system = build_system_from_pdb("4v6x") >>> # With custom parameters >>> system = build_system_from_pdb( ... source="4v6x", ... workspace_path="my_workspace", ... interface_detect_distance_cutoff=1.0, ... nerdss_water_box=[500, 500, 500], ... ode_enabled=True, ... ode_time_span=(0.0, 10.0) ... ) >>> # From local file >>> system = build_system_from_pdb( ... source="/path/to/structure.cif", ... ode_enabled=True ... ) """ # Default workspace path if workspace_path is None: source_name = Path(source).stem if '/' in str(source) or '\\' in str(source) else source workspace_path = f"{source_name}_dir" # Create hyperparameters from kwargs hyperparams = PDBModelHyperparameters(**hyperparams_kwargs) if hyperparams_kwargs else None # Create builder builder = PDBModelBuilder(source=source, fetch_format=fetch_format, hyperparams=hyperparams) # Build system system = builder.build_system( workspace_path=workspace_path, hyperparams=hyperparams, molecule_counts=molecule_counts ) return system