Suppose I have a protein PDB file, and I want to know which atoms have bonds between them. How can this be done?

Sometimes people suggest using the CONECT field for that purpose. However, some PDB files do not have this field.

Example: 4OSK.pdb (Crystal structure of TAL effector reveals the recognition between asparagine and guanine)

NOTE: I need bond information so that I can use this information to compute ForceFields along with MD simulation.

  • $\begingroup$ bioinformatics.stackexchange.com/questions/21614/… $\endgroup$
    – user366312
    Sep 29, 2023 at 15:24
  • 2
    $\begingroup$ +1, but we only allow 1 question/post. Also, can you provide a sample from one of your actual PDB files? Generally when you are given XYZ coordinates of a molecule (e.g. a protein), we determine which atoms have bonds between them just by the distances between the atoms (perhaps depending also on the elements). $\endgroup$ Sep 29, 2023 at 16:27
  • 1
    $\begingroup$ If you pretend to use only the info from the PDB (without using any other tool) you can look at the end of the file for the CONECT section. $\endgroup$
    – Camps
    Sep 29, 2023 at 18:19
  • $\begingroup$ @NikeDattani, I am looking for a general solution, a solution that can be applied to any PDB file. $\endgroup$
    – user366312
    Sep 29, 2023 at 19:35
  • 1
    $\begingroup$ @user366312 Your question would be better received and more likely to get an answer if you show a sample of one of your PDB files. $\endgroup$ Sep 29, 2023 at 19:43

1 Answer 1


I got a clue from the comments of Anon.

enter image description here

A bond is present when the distance between two atoms is lower than the sum of the Van der Waals radii of the two atoms.

Van der Waals radii are typically looked up from a preexisting table, not calculated. We can find such tables in chemical reference books or online.

For instance, here is a link that supplies the following Van der Waals radii table:

enter image description here

Please note that

MD simulation software like Amber, NAMD, GROMACS, etc. use parameter-topology files to supply such information.

These files are the results of long-term experimentation and testing for decades.

Therefore, it is not a good idea for the new/learner/beginner/hobby MD simulation software developers to try to compute bond information themselves.

  • 2
    $\begingroup$ Determining whether two atoms are bonded isn't really challenging, although there are corner cases in PDB files (e.g., partial occupancy and atoms with alternate locations). The challenging part is figuring out bond orders just from the connectivity. But +1 in using RDKit or Open Babel. :-) $\endgroup$ Oct 1, 2023 at 15:49
  • $\begingroup$ The edit on the MD software has nothing to do with the question posted. One thing is to know the connectivity. A completely different problem is to describe the PES of a molecule with a set of selected internal coordinates, with associated functions and parameters. I think you are a bit confused on what you want to know, so if you clarify your point we can probably help you. $\endgroup$
    – Anon
    Oct 2, 2023 at 21:37
  • $\begingroup$ @Anon, When I first wrote the question, my intension was to compute energy on the basis of bond information obtained from a PDB file so that I can perform MD simulation of proteins using an MD simulation software that I wrote in C++. $\endgroup$
    – user366312
    Oct 2, 2023 at 22:37
  • $\begingroup$ @Anon, When I was not finding a proper answer in MatterModeling.SE, I talked to a professor. He told me about parameter and topology files. he also told me that this is impossible to compute bond information from PDB file alone. $\endgroup$
    – user366312
    Oct 2, 2023 at 22:39
  • $\begingroup$ @Anon, What I understand now is that, your comment might have some degree of truth in it; but, trying to compute bond information from PDB file is not a practical idea. Besides, I found RDkit and OpenBabel too complex to get used to in a short time. $\endgroup$
    – user366312
    Oct 2, 2023 at 22:40

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .