46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
from pathlib import Path
|
|
import pyrosetta
|
|
from multiprocessing import Pool
|
|
from shutil import copyfile
|
|
import logging
|
|
|
|
# fix = ['6bga', '5ksb', '4z7v', '4p2o', '4ozi', '3qiu', '2ypl', '1zgl', '7z50', '6u3n']
|
|
fix = ['1zgl']
|
|
|
|
def fix_optimize(file: Path, out_file: Path):
|
|
# 设置日志
|
|
log_file = out_file.with_suffix('.log')
|
|
logger = logging.getLogger(log_file.name)
|
|
logger.setLevel(logging.INFO)
|
|
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
|
|
file_handler = logging.FileHandler(log_file)
|
|
file_handler.setFormatter(formatter)
|
|
logger.addHandler(file_handler)
|
|
|
|
logger.info(f'Processing {file.name}')
|
|
|
|
pyrosetta.init()
|
|
pose = pyrosetta.pose_from_pdb(file.as_posix())
|
|
scorefxn = pyrosetta.create_score_function('ref2015')
|
|
relax = pyrosetta.rosetta.protocols.relax.FastRelax(scorefxn)
|
|
relax.apply(pose)
|
|
pose.dump_pdb(out_file.as_posix())
|
|
|
|
logger.info(f'Finished processing {file.name}')
|
|
|
|
if __name__ == '__main__':
|
|
dir1 = Path('../pdb_test8')
|
|
dir2 = Path('../pdb_test7')
|
|
dirs = [dir1, dir2]
|
|
files = []
|
|
for dir in dirs:
|
|
files.extend(list(dir.rglob('*.modellerfix.pdb')))
|
|
for file in files:
|
|
if file.name.split('.')[0] in fix:
|
|
print(file)
|
|
target = Path('/mnt/mydrive/analysis_pdb-dev/manualfix') / file.name
|
|
copyfile(file.as_posix(), target.as_posix())
|
|
pyrosetta_fix = list(Path('/mnt/mydrive/analysis_pdb-dev/manualfix').rglob('*.modellerfix.pdb'))
|
|
with Pool(16) as p:
|
|
p.starmap(fix_optimize, [(file, file.with_stem(file.stem + '.fastrelax')) for file in pyrosetta_fix])
|
|
print('fastrelax done') |