HelixFold3でテンプレートのフィルタをする
2024/9/12
inference.pyのtemplates.HmmsearchHitFeaturizerでrelease_dates_path=Noneとなっているが、ここにテンプレートのrelease情報を与えないとすべてのテンプレートが無視されるっぽいフィルタリングされないだけで無視されるわけではなかった。。
WARNING Template structure not in release dates dictとかでてしまう。release dates dict
そこで以下のようなスクリプトでテンプレートのrelease_datesの情報をまとめたファイルを生成し、これを指定することでテンプレート情報を活用できるようになる。
code:generate_release_dates.py
import os
import gzip
from pathlib import Path
from tqdm import tqdm
from multiprocessing import Pool
def extract_date(file_path):
with open(file_path, "r") as f:
lines = f.readlines()
pdb_id = file_path.stem.lower()
release_date = None
for line in lines:
if line.startswith("_pdbx_database_status.recvd_initial_deposition_date"):
release_date = line.strip().split()-1 break
if release_date:
return f"{pdb_id}: {release_date}\n"
else:
print("No release date found for", pdb_id)
return None
def extract_release_dates(mmcif_dir, output_file):
cif_files = list(Path(mmcif_dir).rglob("*.cif"))
with Pool() as pool:
results = list(tqdm(pool.imap(extract_date, cif_files), total=len(cif_files)))
with open(output_file, "w") as out:
out.writelines(filter(None, results))
if __name__ == "__main__":
mmcif_dir = "data/pdb_mmcif/mmcif_files"
output_file = "template_release_dates.txt"
extract_release_dates(mmcif_dir, output_file)