biotite.structure.base_stacking

biotite.structure.base_stacking(atom_array, min_atoms_per_base=3)[source]

Find pi-stacking interactions between aromatic rings in nucleic acids.

The presence of base stacking is assumed if the following criteria are met 1:

  1. Distance between aromatic ring centers <=4.5 Å

  2. Angle between the ring normal vectors <=23°

  3. Angle between normalized distance vector between two ring centers and both bases’ normal vectors <=40°

Parameters
atom_arrayAtomArray

The AtomArray to find stacked bases in.

min_atoms_per_baseinteger, optional (default: 3)

The number of atoms a nucleotides’ base must have to be considered a candidate for a stacking interaction.

Returns
stacked_basesndarray, dtype=int, shape=(n,2)

Each row is equivalent to one pair of stacked bases and contains the indices to the first atom for each one of both paired residues.

Notes

Please note that ring normal vectors are assumed to be equal to the base normal vectors.

References

1

H. A. Gabb, S. R. Sanghani, C. H. Robert, C. Prévost, “Finding and visualizing nucleic acid base stacking,” Journal of Molecular Graphics, vol. 14, pp. 6–11, February 1996. doi: 10.1016/0263-7855(95)00086-0

Examples

Compute the stacking interactions for a DNA-double-helix (PDB ID 1BNA):

>>> from os.path import join
>>> dna_helix = load_structure(
...     join(path_to_structures, "base_pairs", "1bna.pdb")
... )
>>> stacking_interactions = base_stacking(dna_helix)
>>> print(dna_helix[stacking_interactions].res_id)
[[ 1  2]
 [ 2  3]
 [ 3  4]
 [ 4  5]
 [ 5  6]
 [ 6  7]
 [ 7  8]
 [ 8  9]
 [ 9 10]
 [11 12]
 [14 15]
 [15 16]
 [16 17]
 [17 18]
 [18 19]
 [19 20]
 [20 21]
 [21 22]
 [22 23]
 [23 24]]