-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmake_helix.py
64 lines (45 loc) · 1.95 KB
/
make_helix.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env python
# coding: utf-8
##AUTHOR: Thomas Sisk (thomas.r.sisk.gr@dartmouth.edu)
import mdtraj as md
from PeptideBuilder import Geometry
import PeptideBuilder
import Bio.PDB
import argparse
def get_sequence(pdb_file):
pdb = md.load(pdb_file)
return "".join([residue.code for residue in pdb.topology.residues])
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description=("Make a PDB where all residues are in a helical conformation"
"from the input PDB"))
parser.add_argument("--pdb", required=True, type=str,
help=("Reference PDB (Protein that will be transformed"
"into a perfect Helix)"))
parser.add_argument("--phi", type=float, default = -60,
help="Phi angle (deg) to use for every residue")
parser.add_argument("--psi", type=float, default = -40,
help="Psi angle (deg) to use for every residue")
parser.add_argument("--out_pdb", required=False, type=str,
default=None, help="File name to give output (helix) PDB file")
args = parser.parse_args()
structure = None
for i in iter(get_sequence(args.pdb)):
residue = Geometry.geometry(i)
residue.phi = args.phi
residue.psi_im1 = args.psi
if structure is None:
structure=PeptideBuilder.initialize_res(residue)
else:
PeptideBuilder.add_residue(structure, residue)
out_structure = Bio.PDB.PDBIO()
out_structure.set_structure(structure)
#check output file naming
if args.out_pdb is None:
file_name = f"{args.pdb[:-4]}_helix.pdb"
else:
if args.out_pdb[-4:]!=".pdb":
file_name = f"{args.out_pdb}.pdb"
else:
file_name = args.out_pdb
out_structure.save(file_name)