Preparation: Protonate Structure

Briefs

This science API, named enzy_htp.preparation.protonate_stru, solves the protein protonation problem that add missing H atoms to the supplied enzy_htp.structure.Structure class instance (hereafter referred to as Structure instance). Protonation states are determined for residues with multiple ones.

Input/Output

input: A Structure instance (no matter it’s a protein, polypeptite, or ligand).

How to obtain

A Structure instance can be obtained by these APIs.

Note: Structure(s) with missing loops are not acceptable.

output: A Structure instance of protonated structure (in-place modification, not as return value).

Arguments

stru

The input Structure instance (no matter it’s a protein, polypeptite, or ligand).

(See Input/Output section)

ph

The pH value for determining the protonation state. (Float, optional, default 7.0)

protonate_ligand

If also protonate ligand, i.e., add hydrogen atoms to ligand compounds.

Set this parameter to False if you only want to add hydrogen atoms to the polypeptide and not to the ligand (small molecules).

(Boolean, optional, default True)

engine

Engine for determining the pKa and adding hydrogens to the protein peptide part.

(String, optional, default pdb2pqr)

ligand_engine

Engine for adding hydrogens to ligands (current available values: pybel)

(String, optional, default pybel)

int_pdb_path (Works when engine="pdb2pqr".)

Path for intermediate pdb file.

(String, optional, default None)

int_pqr_path (Works when engine="pdb2pqr".)

Path for intermediate pqr file (not this will be changed to pdb extension)

(String, optional, default None)

metal_fix_method (Works when engine="pdb2pqr".)

Method for determining the protonation state of donor residues

(String, optional, default deprotonate_all)

Current available keywords:

  • deprotonate_all: Deprotonate all donor residues of the metal center on the donor atom

Examples

Prepare the Input: Load Structure

In order to make use of the API, we should have structure loaded.

import enzy_htp.structure as struct

sp = struct.PDBParser()

pdb_filepath = "/path/to/your/structure.pdb"
stru = sp.get_structure(pdb_filepath)

Execute API

Use preparation.protonate_stru to protonate (i.e. add hydrogen atoms to) your structure.

The simpliest use of protonate_stru is as follows.

Where the ph is set to 7.0, and protonate_ligand is set to True by default.

from enzy_htp.preparation import protonate_stru

protonate_stru(stru=stru)
We can also customize the arguments passed to this function.

How much is your pH value? Customize ph.

Do you want to protonate your ligands? Customize protonate_ligand.

protonate.protonate_stru(stru=stru, ph=6.5, protonate_ligand=False)

Note

This API modifies the Structure instance (what we passed as argument stru) itself and does not return any value, i.e. return None.

Thus, if you write stru = protonate.protonate_stru(stru=stru), your stru will very unfortunately be assigned the value None, so Please Don’t Do This!

Check the Output

Let’s try executing the API here and check if there’s any changes taking place.

We choose the structure of a complex containing SARS-Cov-2 Main Protease and Nirmatrelvir for example, whose solvent has been removed manually.

Set ph=7.4 (which is the pH value of human blood) and protonate_ligand=True (to protonate Nirmatrelvir).

Now, we can go through the procedure.

import enzy_htp.structure as struct
from enzy_htp.preparation import protonate

sp = struct.PDBParser()

pdb_filepath = "7si9_rm_water.pdb"  # The structure of a complex containing SARS-Cov-2 Main Protease and Nirmatrelvir.
stru = sp.get_structure(pdb_filepath)

print(stru.num_atoms)   # 2402.
protonate.protonate_stru(stru=stru, ph=7.4, protonate_ligand=True)
print(stru.num_atoms)   # 4751.

We may notice that, after executing the API, the number of atoms (num_atoms) in the structure increased, representing that the hydrogen atoms have been added to the structure.

Author: Zhong, Yinjie <yinjie.zhong@vanderbilt.edu>