Source code for molecular_simulations.build
from pathlib import Path
from typing import Union
from .build_amber import ExplicitSolvent, ImplicitSolvent
from .build_interface import InterfaceBuilder
try:
from .build_ligand import LigandBuilder, PLINDERBuilder, ComplexBuilder
except ImportError: # no rdkit in environment
pass
PathLike = Union[Path, str]
[docs]
def convert_cif_with_biopython(cif: PathLike) -> PathLike:
"""
Helper function to convert a cif file to a pdb file using biopython.
"""
from Bio.PDB import MMCIFParser, PDBIO
if not isinstance(cif, Path):
cif = Path(cif)
pdb = cif.with_suffix('.pdb')
parser = MMCIFParser()
structure = parser.get_structure('protein', str(cif))
io = PDBIO()
io.set_structure(structure)
io.save(str(pdb))
return pdb
[docs]
def convert_cif_with_gemmi(cif: PathLike) -> PathLike:
import gemmi
structure = gemmi.read_structure(str(cif))
structure.write(str(cif.with_suffix('.pdb')))
[docs]
def add_chains(pdb: PathLike,
first_res: int=1,
last_res: int=-1) -> PathLike:
"""
Helper function to add chain IDs to a model.
"""
import MDAnalysis as mda
u = mda.Universe(pdb)
u.add_TopologyAttr('chainID')
if last_res == -1:
last_res = u.residues.n_residues
chain_A = u.select_atoms(f'resid {first_res} to {last_res}')
chain_A.atoms.chainIDs = 'A'
if last_res != -1:
final_res = u.residues.n_residues
chain_B = u.select_atoms(f'resid {last_res} to {final_res}')
chain_B.atoms.chainIDs = 'B'
output_path = Path(pdb).parent / (Path(pdb).stem + '_withchains.pdb')
with mda.Writer(output_path) as W:
W.write(u.atoms)