Download usalign_runner.py from Xue-Jun/StructureBasedSimilarityNetwork: direct link, hf CLI and curl.
- Browser
- Download file 2.13 kB
-
https://huggingface.co/spaces/Xue-Jun/StructureBasedSimilarityNetwork/resolve/refs%2Fpr%2F1/usalign_runner.py
- Command line
-
hf download hf://spaces/Xue-Jun/StructureBasedSimilarityNetwork@refs/pr/1/usalign_runner.py
-
curl -L -o usalign_runner.py https://huggingface.co/spaces/Xue-Jun/StructureBasedSimilarityNetwork/resolve/refs%2Fpr%2F1/usalign_runner.py
2.13 kB
| import subprocess | |
| import os | |
| from typing import List, Optional | |
| from pathlib import Path | |
| import yaml | |
| class USalignRunner: | |
| def __init__(self, config_path: str = "config.yaml"): | |
| """ | |
| Initialize USalignRunner with parameters from config file. | |
| Args: | |
| config_path (str): Path to the configuration file | |
| """ | |
| with open(config_path, 'r',encoding="utf-8") as f: | |
| config = yaml.safe_load(f) | |
| self.usalign_path = Path(config['USalign']['path']) | |
| self.default_params = { | |
| 'tmscore': config['USalign']['tmscore'], | |
| 'outfmt': config['USalign']['outfmt'], | |
| 'mol': 'protein' # Default to protein alignment | |
| } | |
| if not self.usalign_path.exists(): | |
| raise FileNotFoundError(f"USalign executable not found at {self.usalign_path}") | |
| def run_alignment( | |
| self, | |
| target_dir: str, | |
| pdb_list_file: str, | |
| tmscore: Optional[float] = None, | |
| outfmt: Optional[int] = None, | |
| ) -> tuple[int, str, str]: | |
| tmscore = tmscore if tmscore is not None else self.default_params['tmscore'] | |
| outfmt = outfmt if outfmt is not None else self.default_params['outfmt'] | |
| # Create the command | |
| cmd = [ | |
| str(self.usalign_path), | |
| "-mol", self.default_params['mol'], | |
| "-dir", str(target_dir), | |
| pdb_list_file, | |
| "-TMscore", str(tmscore), | |
| "-outfmt", str(outfmt) | |
| ] | |
| print(cmd) | |
| # Convert command list to string | |
| cmd_str = " ".join(cmd) | |
| try: | |
| # Execute the command | |
| process = subprocess.Popen( | |
| cmd_str, | |
| stdout=subprocess.PIPE, | |
| stderr=subprocess.PIPE, | |
| shell=True, | |
| text=True | |
| ) | |
| # Get output | |
| stdout, stderr = process.communicate() | |
| return process.returncode, stdout, stderr | |
| except Exception as e: | |
| return -1, "", str(e) | |