I need to programmatically add Hydrogen atoms to a PDB file (say, 16PK.pdb) using BioPython.
What algorithm should I use for this?
Bioinformatics Stack Exchange is a question and answer site for researchers, developers, students, teachers, and end users interested in bioinformatics. It only takes a minute to sign up.Sign up to join this community
Not actually and answer as you cannot do it with
biopython.PDB. But there are may other tools.
Several are online, for example: https://zhanggroup.org/HAAD/ by the folk who wrote I-Tasser.
Nearly every MD pipeline has their own protonation algorithm. The only hydrogens that are an issue are histidine protonation —
HID— and protonation states of catalytic residues (
The PyMOL python module is really good and can do a lot. Only issue is that the easiest way to install is via conda.
conda install -c conda-forge -c schrodinger pymol-bundle
with which one can:
import pymol2 pymol2.PyMOL() as pymol: pymol.cmd.load('👾👾👾.pdb', 'myprotein') # file # pymol.cmd.fetch('👾👾👾👾', 'myprotein') # PDB code pymol.cmd.h_add() pymol.cmd.save('👻👻👻.pdb')
One can find neighbours to a given atom too (see this Q&A), select by secondary structure, define secondary structure (
pymol.cmd.dss()) etc. A caveat is that, bar for some commands like
pymol.cmd.get_model(selection).atom, one does not interact directly with the atoms and everything is done via selections.
However, as this Q follows on from this unanswerable one and in turn from several others about SS. I am guessing it is to determine the hydrogen bond distances between different sheets. These have a backbone amide nitrogen (name
N) donating a hydrogen (
HA etc.) to an accepting backbone amide oxygen of another sheet (
O). Unless you want an exact distance, you could simply use the distance between these heavy atoms, which would be slightly larger than the
H-N bond plus the
H•O hydrogen bond and the oxygen may not be coplanar with the planar amide.