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

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]]