Source code for hbat.ccd.generate_ccd_constants

#!/usr/bin/env python3
"""
Main script for generating CCD bond constants.

This script is designed to be used by the Makefile and provides a simple
interface for generating residue bond constants from CCD BinaryCIF files.

Can be run as:
1. python -m hbat.ccd.generate_ccd_constants (recommended)
2. python hbat/ccd/generate_ccd_constants.py (with path handling)
"""

import os
import sys

# Handle both direct execution and module execution
try:
    # Try relative imports first (when run as module)
    from ..constants.pdb_constants import RESIDUES
    from .ccd_analyzer import CCDDataManager
    from .constants_generator import CCDConstantsGenerator
except ImportError:
    # Fall back to absolute imports (when run as script)
    project_root = os.path.dirname(
        os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    )
    sys.path.insert(0, project_root)

    from hbat.ccd.ccd_analyzer import CCDDataManager
    from hbat.ccd.constants_generator import CCDConstantsGenerator
    from hbat.constants.pdb_constants import RESIDUES


[docs] def main(): """ Main function for generating CCD bond constants. This function: 1. Initializes the CCD data manager 2. Downloads CCD files if needed 3. Generates bond constants for all standard residues 4. Provides a comprehensive analysis report """ print("=== CCD Bond Constants Generator ===") print("Initializing CCD data manager...") # Initialize HBAT environment and CCD data manager try: from hbat.core.app_config import initialize_hbat_environment initialize_hbat_environment(verbose=True) ccd_manager = CCDDataManager() # Uses ~/.hbat/ccd-data by default except ImportError: # Fall back to local directory if app_config not available ccd_manager = CCDDataManager(ccd_folder="ccd-data") # Ensure files are available (download if needed) if not ccd_manager.ensure_files_exist(): print("Error: Failed to ensure CCD files are available") return 1 # Initialize constants generator generator = CCDConstantsGenerator(ccd_manager) # Generate analysis report print("\nGenerating analysis report...") report = generator.generate_analysis_report(RESIDUES) generator.print_analysis_report(report) # Generate constants file print("\n=== Generating Bond Constants ===") success = generator.write_residue_bonds_constants(RESIDUES) if success: print("\n✅ Bond constants generated successfully!") print("📁 Output: hbat/constants/residue_bonds.py") print( f"📊 Processed {report['found_residues']} residues with {report['total_bonds']:,} bonds" ) return 0 else: print("\n❌ Failed to generate bond constants") return 1
if __name__ == "__main__": sys.exit(main())