Source code for packing_defect.run_radius

"""CLI entrypoint for radius-based GRO filtering and defect sizing.

This utility filters GRO frames by a protein-distance cutoff, optionally
renumbers atoms, and measures defect cluster sizes per leaflet.
"""

import argparse
import MDAnalysis as mda

from packing_defect.core.analyzers.radius import RadiusDefectAnalyzer
from packing_defect.run_utils import run_analysis


[docs] def build_radius_analyzer( input_dir: str, output_dir: str, lipids: list[str], start: int, end: int, protein_count: int, cutoff: float, no_cutoff: bool, ): """Construct a RadiusDefectAnalyzer for filtered GRO inputs. Parameters ---------- input_dir : str Directory containing per-lipid subfolders with ``*_frame_N.gro``. output_dir : str Directory to write corrected/renumbered outputs and plots. lipids : list[str] Lipid residue-name prefixes for subfolders. start, end : int Inclusive range of frame indices to process. protein_count : int Number of protein atoms at the top of each GRO file. cutoff : float Distance cutoff (in same units as GRO) to exclude near-protein atoms. no_cutoff : bool If True, skip the protein-distance filtering step. Returns ------- RadiusDefectAnalyzer Configured analyzer instance ready to ``run()``. """ # Dummy universe to satisfy BaseDefectAnalyzer interface u = mda.Universe() # creates empty placeholder return RadiusDefectAnalyzer( universe=u, base_directory=input_dir, output_dir=output_dir, lipid_types=lipids, frame_start=start, frame_end=end, protein_atom_count=protein_count, apply_protein_cutoff=not no_cutoff, cutoff_distance=cutoff, )
if __name__ == "__main__": parser = argparse.ArgumentParser(description="Run radius defect analysis") parser.add_argument("--input", required=True) parser.add_argument("--output", required=True) parser.add_argument("--lipids", nargs="+", required=True) parser.add_argument("--start", type=int, required=True) parser.add_argument("--end", type=int, required=True) parser.add_argument("--protein-count", type=int, required=True) parser.add_argument("--cutoff", type=float, default=1.5) parser.add_argument("--no-cutoff", action="store_true") args = parser.parse_args() analyzer = build_radius_analyzer( args.input, args.output, args.lipids, args.start, args.end, args.protein_count, args.cutoff, args.no_cutoff, ) run_analysis(analyzer)