conformation
Class Dssp

java.lang.Object
  extended byconformation.Dssp

public class Dssp
extends java.lang.Object

DSSP: Determine Secondary Structure of Proteins.

See: W. Kabsch and C. Sander, Biopolymers, 22, pp. 2577-2637 (1983).

The basic concept is as follows: From the abstract:
Cooperative seccondary structure is recognized as repeats of the elementary hydrogen-bonding patterns "turn" and "bridge". Repeating turns are "helices", repeating bridges are "ladders", connected ladders are "sheets".

One residue may be of more more than different secondary-structure elements. In order to avoid duplicates in the output, (ad hoc) priority rules are applied. Additionally, each secondary structure element has a one-character label.

From the article:

Structural overlaps are eliminated [...] by giving priority to H, B, E, G, I, T, S in this order, i.e., when several symbols coincide, the first one in this list is written.
So a bridge (B) is given priority over a ladder (E), which is clearly nonsense, since each ladder is made up of bridges. In the present program, the priorities of B and E are therefore inverted (see table below).

The following secondary structure elements are recognized (sorted by priority used in this program):

Element Name Element Description DSSP code Priority (paper) Priority (here)
α-helix a.k.a. 4-helix H 0 0
Extended Ladder β-ladder of length > 1 ("extended"), both parallel and antiparallel. E 2 1
Bridge β-ladder of length 1, both parallel and antiparallel. B 1 2
3,10-helix a.k.a. 3-helix G 3 3
π-helix a.k.a. 5-helix I 4 4
Turns Non-helix turns or pieces of 3,10- or π-helix with less than minimal length. T 5 5
Bend A "bent" piece of backbone (see below). S 6 6
unstructured An "unstructured" piece of backbone (see below). 7 7

In short, the priority rules are as follows:

α-helix/4-helix > β-sheet/bridge > 3,10-helix/3-helix > π-helix/5-helix > H-bonded turn > bend

Author:
Vincent Kraeutler, Mika Kastenholz, Ulf Boerjesson

Field Summary
protected static int acceptor
           
static int alphaHelixT
          secondary structure codes substructure types (beta, helix, bend) must be contiguous and sorted by their respective priorities (see priority table).
static int antiBetaBridgeT
           
static int antiBetaSheetT
           
(package private)  Particles atoms
           
(package private)  int[][] bbAN
          the backbone atom numbers
static int bendT
           
protected static int C
          backbone atom indices
protected static int CA
           
protected static int donor
          hydrogen bond indices
static double energyCutoff
          kabsch & sander hydrogen bond energy parameters
static double f
          kabsch & sander hydrogen bond energy parameters
protected static int H
           
(package private)  int[] Helix
           
protected static int N
           
protected static int O
           
static int parallelBetaBridgeT
           
static int parallelBetaSheetT
           
static int piHelixT
           
static double q1
          kabsch & sander hydrogen bond energy parameters
static double q1q2f
           
static double q2
          kabsch & sander hydrogen bond energy parameters
static int threeTenHelixT
           
(package private)  int[] Turn
           
static int turnT
           
static int unstructeredT
           
 
Constructor Summary
Dssp(Particles atoms)
           
 
Method Summary
static int[] assignUniqueSecondaryStructure(int[] helix4Res, int[] betaRes, int[] helix3Res, int[] helix5Res, int[] turnRes, int[] bendRes)
          every residue may have just one secondary structure type.
(package private) static void fill(int[] stuff, int start, int end, int value)
          fill a part of vector stuff with value.
static int[][] findBackBoneAtoms(Particles atoms)
          Find indices of the protein backbone atoms.
static int[] findBends(double[][] cAlphaPos)
          Check if a residue is part of a bend.
static int[][] findBridges(boolean[][] hbondMatrix)
           find bridges in the hydrogen bonding pattern.
static boolean[][] findHbonds(int[][] bbaNum, double[][][] bbaPos, int[] rnum, int numRes)
          Rather than directly inspecting structural characteristics, the dssp algorithm looks at the "energy" of a hydrogen bond to determine if it's there.
static int[] findHelices(int[] turns, int offset, int helixType)
           Turns may be parts of helices.
static int[] findLaddersAndSheets(int[][] betaBridges)
           Find β-ladders and -sheets.
static int[] findTurns(boolean[][] hbondMatrix, int offset)
          find turns in the hydrogen bonding pattern.
static double[][][] getBackboneCoords(double[][] pos, int[][] bban)
          get the coords of the backbone atoms.
static double hbEnergy(int ar, int dr, double[][][] bbap)
          The Kabsch-Sander "energy" of a hydrogen bond.
 int[] kabschSander()
          kabschSander, the non-static version
static int[] kabschSander(int[][] backboneAtomNumbers, double[][][] backbonePositions, int[] residueNumbers, int numRes)
          this is the main dssp routine.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

atoms

Particles atoms

q1

public static final double q1
kabsch & sander hydrogen bond energy parameters

See Also:
Constant Field Values

q2

public static final double q2
kabsch & sander hydrogen bond energy parameters

See Also:
Constant Field Values

f

public static final double f
kabsch & sander hydrogen bond energy parameters

See Also:
Constant Field Values

energyCutoff

public static final double energyCutoff
kabsch & sander hydrogen bond energy parameters

See Also:
Constant Field Values

q1q2f

public static final double q1q2f
See Also:
Constant Field Values

C

protected static final int C
backbone atom indices

See Also:
Constant Field Values

CA

protected static final int CA
See Also:
Constant Field Values

H

protected static final int H
See Also:
Constant Field Values

N

protected static final int N
See Also:
Constant Field Values

O

protected static final int O
See Also:
Constant Field Values

donor

protected static final int donor
hydrogen bond indices

See Also:
Constant Field Values

acceptor

protected static final int acceptor
See Also:
Constant Field Values

alphaHelixT

public static final int alphaHelixT
secondary structure codes substructure types (beta, helix, bend) must be contiguous and sorted by their respective priorities (see priority table).

See Also:
Constant Field Values

parallelBetaBridgeT

public static final int parallelBetaBridgeT
See Also:
Constant Field Values

antiBetaBridgeT

public static final int antiBetaBridgeT
See Also:
Constant Field Values

parallelBetaSheetT

public static final int parallelBetaSheetT
See Also:
Constant Field Values

antiBetaSheetT

public static final int antiBetaSheetT
See Also:
Constant Field Values

threeTenHelixT

public static final int threeTenHelixT
See Also:
Constant Field Values

piHelixT

public static final int piHelixT
See Also:
Constant Field Values

turnT

public static final int turnT
See Also:
Constant Field Values

bendT

public static final int bendT
See Also:
Constant Field Values

unstructeredT

public static final int unstructeredT
See Also:
Constant Field Values

bbAN

int[][] bbAN
the backbone atom numbers


Turn

int[] Turn

Helix

int[] Helix
Constructor Detail

Dssp

public Dssp(Particles atoms)
Method Detail

kabschSander

public static int[] kabschSander(int[][] backboneAtomNumbers,
                                 double[][][] backbonePositions,
                                 int[] residueNumbers,
                                 int numRes)
this is the main dssp routine.

Parameters:
backboneAtomNumbers - the matrix of atom numbers of the C, CA, H, N, O atoms
backbonePositions - the corresponding positions
residueNumbers - the residue number of each atom (in the system, this is a bit confusing)
Returns:
the secondary structure of each residue

kabschSander

public int[] kabschSander()
kabschSander, the non-static version

Returns:
the secondary structure of each residue
See Also:
Dssp#kabschSander(int[][], double[][][], int[])

findBackBoneAtoms

public static int[][] findBackBoneAtoms(Particles atoms)

Find indices of the protein backbone atoms.

Backbone atoms are defined as having atom names ∈ {C, CA, N, O, H}. Only one atom type per residue is allowed. There are, however, amino acids where one of the atoms may be missing (i.e. proline does not have an "H"). In this case, a -1 is inserted for the atom number.

Parameters:
atoms - a particles instance
Returns:
the backbone atom numbers. return[C] contains the atom number of the C-atoms etc.

getBackboneCoords

public static double[][][] getBackboneCoords(double[][] pos,
                                             int[][] bban)

get the coords of the backbone atoms.

Parameters:
pos - the positions of all atoms
bban - the backbone atom numbers. bban[C] contains the indices of all C-atoms, etc.
Returns:
the positions of the backbone atoms. return[C] contains the positions of all C-atoms etc.

hbEnergy

public static double hbEnergy(int ar,
                              int dr,
                              double[][][] bbap)

The Kabsch-Sander "energy" of a hydrogen bond.

Parameters:
ar - the acceptor residue number
dr - the donor residue number
bbap - the backbone atom positions
Returns:
the energy
See Also:
Dssp#calcHbonds(int[][], double[][][], int[])

fill

static void fill(int[] stuff,
                 int start,
                 int end,
                 int value)
fill a part of vector stuff with value.

Parameters:
stuff -
start -
end -
value -

findHbonds

public static boolean[][] findHbonds(int[][] bbaNum,
                                     double[][][] bbaPos,
                                     int[] rnum,
                                     int numRes)
Rather than directly inspecting structural characteristics, the dssp algorithm looks at the "energy" of a hydrogen bond to determine if it's there.

Parameters:
bbaNum - the backbone atom numbers
bbaPos - the backbone atom positions
rnum - the residue numbers
Returns:
a list of [donors, acceptors]
See Also:
hbEnergy(int, int, double[][][])

findTurns

public static int[] findTurns(boolean[][] hbondMatrix,
                              int offset)
find turns in the hydrogen bonding pattern. turns are directed, i.e. they can only go from i to i+n, not from i to i-n, i and n positive.


findBridges

public static int[][] findBridges(boolean[][] hbondMatrix)

find bridges in the hydrogen bonding pattern.

parallel and anti-parallel bridges are assumed to be mutually exclusive, so we can do this in one go.

Parameters:
hbondMatrix -
Returns:
the bridging matrix

findHelices

public static int[] findHelices(int[] turns,
                                int offset,
                                int helixType)

Turns may be parts of helices.

From the paper:

A minimal [n]-helix is defined by two consecutive n-turns. For example, a 4-helix, of minimal length 4 from residues i to i+3, requires 4-turns at residues i-1 and i.

[...]

Note that nothing is required about the H-bond state of residues i+1 and i+2.

A helix consisting of n-turns is called a n-helix, with the following identifications:

Notes:

Parameters:
turns - the turns
Returns:
the helices

findLaddersAndSheets

public static int[] findLaddersAndSheets(int[][] betaBridges)

Find β-ladders and -sheets.

We do not differentiate between ladders (linked bridges) and sheets (linked ladders). So whenever we encounter β-bridges of the same type (parallel or antiparallel), this is identified as a ladder/sheet of that type.

Again, it is assumed that parallel and antiparallel β-bridges are mutually exclusive, so the order of assignment should not matter.

Parameters:
betaBridges -
Returns:

findBends

public static int[] findBends(double[][] cAlphaPos)

Check if a residue is part of a bend.

A bend is defined by the angle enclosed by three Cα-atoms:

γ(i) = γ(Cα(i - 2), Cα(i), Cα(i + 2))

Parameters:
cAlphaPos - the positions of the Cα-atoms
Returns:
the element of the returned array is unstructuredT if it's not in a bend, otherwise bendT

assignUniqueSecondaryStructure

public static int[] assignUniqueSecondaryStructure(int[] helix4Res,
                                                   int[] betaRes,
                                                   int[] helix3Res,
                                                   int[] helix5Res,
                                                   int[] turnRes,
                                                   int[] bendRes)

every residue may have just one secondary structure type.

This is enforced by first assigning each residue with the corresponding highest-priority secondary structure type, and then "scrubbing" the resulting assignment, i.e.

Parameters:
helix4Res -
betaRes -
helix3Res -
helix5Res -
turnRes -
bendRes -
Returns:
an array containing the secondary structure code of each residue