| import argparse |
| import os |
| import pandas as pd |
| from tqdm import tqdm |
| from utils import load_coords |
|
|
|
|
| if __name__ == "__main__": |
| parser = argparse.ArgumentParser(description='make single mutant csv') |
| parser.add_argument("--fasta_dir", type=str, default=None, required=True) |
| parser.add_argument("--output_dir", type=str, default=None) |
| parser.add_argument("--pdb_file", type=str, default=None) |
| parser.add_argument("--out_file", type=str, default=None) |
| parser.add_argument("--start", type=int, default=-1) |
| parser.add_argument("--end", type=int, default=int(1e6)) |
| args = parser.parse_args() |
|
|
| one_letter = { |
| 'VAL':'V', 'ILE':'I', 'LEU':'L', 'GLU':'E', 'GLN':'Q', |
| 'ASP':'D', 'ASN':'N', 'HIS':'H', 'TRP':'W', 'PHE':'F', 'TYR':'Y', |
| 'ARG':'R', 'LYS':'K', 'SER':'S', 'THR':'T', 'MET':'M', 'ALA':'A', |
| 'GLY':'G', 'PRO':'P', 'CYS':'C' |
| } |
| AA = list(one_letter.values()) |
|
|
| if args.fasta_dir is not None: |
| proteins = os.listdir(args.fasta_dir) |
| for p in tqdm(proteins): |
| protein_name = p.split(".")[0] |
| seq = open(f"{args.fasta_dir}/{p}").readlines()[1].strip() |
| data = {"mutant":[], "DMS_score":[]} |
| for idx, s in tqdm(enumerate(seq)): |
| if idx + 1 < args.start or idx + 1 > args.end: |
| continue |
| for a in AA: |
| if a == s: |
| continue |
| data["mutant"].append(f"{s}{idx+1}{a}") |
| data["DMS_score"].append(0) |
| pd.DataFrame(data).to_csv(f"{args.output_dir}/{protein_name}.csv", index=False) |
| |
| if args.pdb_file is not None: |
| output_dir = os.path.dirname(args.out_file) |
| os.makedirs(output_dir, exist_ok=True) |
| _, seq = load_coords(args.pdb_file, "A") |
| data = {"mutant":[], "DMS_score":[]} |
| for idx, s in tqdm(enumerate(seq)): |
| if idx + 1 < args.start or idx + 1 > args.end: |
| continue |
| for a in AA: |
| if a == s: |
| continue |
| data["mutant"].append(f"{s}{idx+1}{a}") |
| data["DMS_score"].append(0) |
| pd.DataFrame(data).to_csv(args.out_file, index=False) |