Creation chemical bond

Hello

I need a help. I import file .xyz with position atoms and i have a question at what distance the program creates a bond between atoms?

One approach is check the distance between two atoms; and to add a bond if this is equal to (or, within some tolerance, less than to) the sum of the corresponding van der Waals radii (which are tabulated, example Wikipedia), or what is typically reported by X-ray/neutron diffraction experiments on crystals (volume C of the International Tables lists them per type of hybridization/bond order, number of records, arithmetical mean and standard deviation about metals/alloys, inorganic compounds, and organic compounds).

In path /avogadro/core/elementdata.h there are for example the blocks double element_VDW[] (starts line 83), or double element_covalent[] (starts line 226) with distances tabulated. Equally consult /avogadro/core/molecule.h where e.g., lines 517 to 525 read

  /**
   * Perceives bonds in the molecule based on the 3D coordinates of the atoms.
   *  atoms are considered bonded if within the sum of radii
   *  plus a small @p tolerance.
   * @param tolerance The calculation tolerance.
   * @param minDistance = atoms closer than the square of this are ignored
   */
  void perceiveBondsSimple(const double tolerance = 0.45,
                           const double minDistance = 0.32);
1 Like

In addition to @Thomas detailed answer, in Avogadro 1.9x you can also select some atoms and manually create bonds.

Build → Bond → Bond Atoms

You can also see in the screenshot that you can configure the bonding tolerances.

1 Like