Working with Modified AA
Note
Deal with PDB2PQR
Obtain the protonated pdb file of the modified AA (add H manually or obtain from PDB). If you need to use force field like ff19SB_modAA, make the atom names align with the force field.
Align the structure with the standard backbone in PDB2PQR. (make sure the Psi Phi angles are also rotated so that all the backbone atoms align with the template and the all the H is in the right place if carry by the rotation of the backbone) Here is a reference PDB file of the backbone
HETATM 1 N PSD P 1 1.201 0.847 0.000 0.00 0.00 N HETATM 2 CA PSD P 1 0.000 0.000 0.000 0.00 0.00 C HETATM 3 C PSD P 1 -1.250 0.881 0.000 0.00 0.00 C HETATM 4 O PSD P 1 -2.185 0.660 -0.784 0.00 0.00 O HETATM 5 C-1 PSD P 1 2.339 0.216 0.000 0.00 0.00 C HETATM 6 N+1 PSD P 1 -1.252 1.877 1.023 0.00 0.00 N HETATM 7 H PSD P 1 1.201 1.847 0.000 0.00 0.00 H
Save the pdb file with the CONNECT record.
Use this script to generate XML and DAT file. Paste the connectivity table to cnt_table.
from enzy_htp import PDBParser, Residue from enzy_htp.core.file_system import write_lines def init_cnt_from_cnt_table(res: Residue, cnt_table: str): cnt_list = cnt_table.strip().splitlines() for idx, atom in enumerate(res.atoms): cnt_atom_idx = cnt_list[idx].strip().split()[1:] atom._connect = [res.atoms[int(i)-1] for i in cnt_atom_idx] sp = PDBParser() mse = sp.get_structure("mse.pdb").residues[0] cnt_table = { "MSE" : """ 1 2 17 2 1 3 5 9 3 2 4 4 3 5 2 6 10 11 6 5 8 12 13 7 8 14 15 16 8 6 7 9 2 10 5 11 5 12 6 13 6 14 7 15 7 16 7 17 1""", } for res in [mse,]: res: Residue init_cnt_from_cnt_table(res, cnt_table[res.name]) lines = [] lines.extend( [ # f"<?xml version='1.0'?>", # f"<aminoacids>", f" <residue>", f" <name>{res.name}</name>", ]) for atom in res.atoms: lines.extend( [ f" <atom>", f" <name>{atom.name}</name>", f" <x>{atom.coord[0]}</x>", f" <y>{atom.coord[1]}</y>", f" <z>{atom.coord[2]}</z>", ]) for cnt_atom in atom.connect: lines.extend([ f" <bond>{cnt_atom.name}</bond>",]) lines.extend([ f" </atom>",]) lines.extend([ f" </residue>", # f"</aminoacids>", ]) write_lines(f"{res.name}.xml", lines)
NOTE: leave all charge and radii as 0.0 in the .DAT file. See the referenced issue below for details.
Merge the XML and DAT files to pdb2pqr/dat/AA.xml and pdb2pqr/dat/PARSE.DAT
Add a new class of the modified AA by copy others and change the name in pdb2pqr/aa.py
find related issue here
Deal with Amber
Prepare parameter files for modified amino acid following this tutorial ↓
In
PDB2FF, add an argument calledmaa_parm_file_path, it requires a list of prepin and frcmod files for you modified AA. Here is an example:pdb_obj.PDB2FF(local_lig=0, ifsavepdb=1, maa_parm_file_path=[ [ "maa.prepin", ["maa.frcmod1", "maa.frcmod2"] ], ])
Now the workflow is ready to go!