|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||
java.lang.Objectconformation.Dssp
See: W. Kabsch and C. Sander, Biopolymers, 22, pp. 2577-2637 (1983).
The basic concept is as follows: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:
| 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 |
Particles atoms
public static final double q1
public static final double q2
public static final double f
public static final double energyCutoff
public static final double q1q2f
protected static final int C
protected static final int CA
protected static final int H
protected static final int N
protected static final int O
protected static final int donor
protected static final int acceptor
public static final int alphaHelixT
public static final int parallelBetaBridgeT
public static final int antiBetaBridgeT
public static final int parallelBetaSheetT
public static final int antiBetaSheetT
public static final int threeTenHelixT
public static final int piHelixT
public static final int turnT
public static final int bendT
public static final int unstructeredT
int[][] bbAN
int[] Turn
int[] Helix
| Constructor Detail |
public Dssp(Particles atoms)
| Method Detail |
public static int[] kabschSander(int[][] backboneAtomNumbers,
double[][][] backbonePositions,
int[] residueNumbers,
int numRes)
backboneAtomNumbers - the matrix of atom numbers of the C, CA, H, N, O atomsbackbonePositions - the corresponding positionsresidueNumbers - the residue number of each atom (in the system, this is a bit confusing)
public int[] kabschSander()
Dssp#kabschSander(int[][], double[][][], int[])public static int[][] findBackBoneAtoms(Particles 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.
atoms - a particles instance
public static double[][][] getBackboneCoords(double[][] pos,
int[][] bban)
pos - the positions of all atomsbban - the backbone atom numbers. bban[C] contains the indices of all C-atoms, etc.
public static double hbEnergy(int ar,
int dr,
double[][][] bbap)
ar - the acceptor residue numberdr - the donor residue numberbbap - the backbone atom positions
Dssp#calcHbonds(int[][], double[][][], int[])
static void fill(int[] stuff,
int start,
int end,
int value)
stuff - start - end - value -
public static boolean[][] findHbonds(int[][] bbaNum,
double[][][] bbaPos,
int[] rnum,
int numRes)
bbaNum - the backbone atom numbersbbaPos - the backbone atom positionsrnum - the residue numbers
hbEnergy(int, int, double[][][])
public static int[] findTurns(boolean[][] hbondMatrix,
int offset)
public static int[][] findBridges(boolean[][] hbondMatrix)
parallel and anti-parallel bridges are assumed to be mutually exclusive, so we can do this in one go.
hbondMatrix -
public static int[] findHelices(int[] turns,
int offset,
int helixType)
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:
turns - the turns
public static int[] findLaddersAndSheets(int[][] betaBridges)
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.
betaBridges -
public static int[] findBends(double[][] cAlphaPos)
A bend is defined by the angle enclosed by three Cα-atoms:
γ(i) = γ(Cα(i - 2), Cα(i), Cα(i + 2))
cAlphaPos - the positions of the Cα-atoms
public static int[] assignUniqueSecondaryStructure(int[] helix4Res,
int[] betaRes,
int[] helix3Res,
int[] helix5Res,
int[] turnRes,
int[] bendRes)
This is enforced by first assigning each residue with the corresponding highest-priority secondary structure type, and then "scrubbing" the resulting assignment, i.e.
helix4Res - betaRes - helix3Res - helix5Res - turnRes - bendRes -
|
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||||