# How can I programmatically add Hydrogen to a PDB structure using BioPython?

I need to programmatically add Hydrogen atoms to a PDB file (say, 16PK.pdb) using BioPython.

What algorithm should I use for this?

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 —HIE vs. HID— and protonation states of catalytic residues (CYZ vs. CYS etc).

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:

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 (H, not 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.