Skip to content
Snippets Groups Projects
Commit 8e31f702 authored by Sebastian Bittrich's avatar Sebastian Bittrich
Browse files

fixes to DSSP impl, detection of bends and sheets

parent 2325ac9a
No related branches found
No related tags found
No related merge requests found
......@@ -414,6 +414,7 @@ namespace Vec3 {
}
const angleTempA = zero(), angleTempB = zero();
/** Computes the angle between 2 vectors, reports in rad. */
export function angle(a: Vec3, b: Vec3) {
copy(angleTempA, a);
copy(angleTempB, b);
......
import { Vec3 } from '../3d'
describe('vec3', () => {
const vec1 = [ 1, 2, 3 ] as Vec3;
const vec2 = [ 2, 3, 1 ] as Vec3;
const orthVec1 = [ 0, 1, 0 ] as Vec3;
const orthVec2 = [ 1, 0, 0 ] as Vec3;
it('angle calculation', () => {
expect(Vec3.angle(vec1, vec1) * 360 / (2 * Math.PI)).toBe(0.0);
expect(Vec3.angle(orthVec1, orthVec2) * 360 / (2 * Math.PI)).toBe(90.0);
expect(Vec3.angle(vec1, vec2)).toBeCloseTo(0.666946);
});
})
\ No newline at end of file
......@@ -20,7 +20,8 @@ namespace SecondaryStructure {
export type Element = None | Helix | Sheet
export interface None {
kind: 'none'
kind: 'none',
flags?: SecondaryStructureType // TODO should this level of detail be added to non-defined secondary structure elements?
}
export interface Helix {
......
compares Mol* port of DSSP (with default parameters) to the BioJava implementation
### pdb:1pga ###
# turns #
Mol*: ----------------------TTTTTTTTTTTTTTTT--------TTTT------
53 turns, 18 openings
DSSP: ----------------------TTTTTTTTTTTTTTTT--------TTTT------
53 turns, 18 openings
# bends #
Mol*: ---------SS---------SSSSSSSSSSSSSSSSSS--------SSS-------
23 bends
DSSP: ---------SS---------SSSSSSSSSSSSSSSSSS--------SSS-------
23 bends
# helices #
Mol*: ----------------------HHHHHHHHHHHHHHTT--------TTTT------
44 helix elements - 0 3-10, 44 alpha, 0 pi
DSSP: ----------------------HHHHHHHHHHHHHHTT--------TTTT------
44 helix elements - 0 3-10, 44 alpha, 0 pi
# all #
Mol*: -EEEEEEE-SS-EEEEEEE-SSHHHHHHHHHHHHHHTT---EEEEETTTTEEEEE-
DSSP: -EEEEEEE-SS-EEEEEEE-SSHHHHHHHHHHHHHHTT---EEEEETTTTEEEEE-
### pdb:1bta ###
# turns #
Mol*: ------TTT---TTTTTTTTTTTTT--TT----TTTTTTTTTTT-----------TTTTTTTTT--TTTTTTTTTTTTTTT--------
127 turns, 44 openings
DSSP: ------TTT---TTTTTTTTTTTTT--TT----TTTTTTTTTTT-----------TTTTTTTTT--TTTTTTTTTTTTTTT--------
127 turns, 44 openings
# bends #
Mol*: ------SSS--SSSSSSSSSSSSS---SS---SSSSSSSSSSSSS-SS------SSSSSSSSSSSSSSSSSSSSSSSSSSS--------
60 bends
DSSP: ------SSS--SSSSSSSSSSSSS---SS---SSSSSSSSSSSSS-SS------SSSSSSSSSSSSSSSSSSSSSSSSSSS--------
60 bends
# helices #
Mol*: ------TTT---HHHHHHHHHHHHT--TT----HHHHHHHHTTT-----------TTHHHHTTT--HHHHHHHHHHHHHTT--------
100 helix elements - 0 3-10, 100 alpha, 0 pi
DSSP: ------TTT---HHHHHHHHHHHHT--TT----HHHHHHHHTTT-----------TTHHHHTTT--HHHHHHHHHHHHHTT--------
100 helix elements - 0 3-10, 100 alpha, 0 pi
# all #
Mol*: -EEEEETTT--SHHHHHHHHHHHHT--TT---SHHHHHHHHTTTS-SSEEEEEESTTHHHHTTTSSHHHHHHHHHHHHHTT--EEEEE-
DSSP: -EEEEETTT--SHHHHHHHHHHHHT--TT---SHHHHHHHHTTTS-SSEEEEEESTTHHHHTTTSSHHHHHHHHHHHHHTT--EEEEE-
### pdb:1acj ###
# turns #
Mol*: -------TT----------TT----------------TTTTT----------------------------TTTT-TTTTTT----------------------------------TTT------TTT-TTTTTTTTT-----------TTTT---TT-------TTTTTTTTTTTTTTTTTTTTT--TT-------TTTTTTTTTTTT-TTTTTT----------TT-TT----TTTTTTTTTTTTTTTT-----TTTTTTTTTT--TTTTTTTTTTT-----------------------TTTTTTTT----------------TTTTTTT-TT--TT------TTTTTTTTTTTTTT--TTTTTTTTTTT--TTTTT-TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT-------------TT----TTT---TTTTTTTTTTTTT-TTT---TTTTTTTTTTTTTTTTTTTT--------------------------------TTTTTTTTTTTTTTTTTTT-
614 turns, 223 openings
DSSP: -------TT----------TT----------------TTTTT------------------------------TT-TTTTTT----------------------------------TTT------TTT-TTTTTTTTT-----------TTTT---TT-------TTTTTTTTTTTTTTTTTTTTT--TT-------TTTTTTTTTTTT-TTTTTT----------TT-TT----TTTTTTTTTTTTTTTT-----TTTTTTTTTT--TTTTTTTTTTT-----------------------TTTTTTTT----------------TTTTTTT-TT--TT------TTTTTTTTTTT-TT--TTTTTTTTTTT--TTTTT-TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT-------------TT----TTT---TTTTTTTTTTTTT-TTT---TTTTTTTTTTTTTTTTTTTT--------------------------------TTTTTTTTTTTTTTTTTTT-
606 turns, 220 openings
# bends #
Mol*: --S----SS----------SSS----------S----SS-SSS--------SS-----S-----------SSSS-SSSSSSS--S---S----------SS--SS---------SSSS---S-SSSS--SSSSSSS-----------SSSS----SS-SSS-S-SSSSSSSSSSSSSSSSSSSSS--SSS------SSSSSSSSSSSS-SSSSSS-S----SS--SSSSSS---SSSSSSSSSSSSSSS----S-SSSSSSSSSSS-SSSSSSSSSS--SS--SS--S------SSSSSS-SSSSSSS--S--S-------S--SSSSSSSSSSS--SSS-----SSSSSSSSSSS-SS--SSSSSSSSSSS--SSSSS-SSSSSSSSSSSSSSSSS----SSSSSSSSSSSS-----------SS--S-SSS-S-SS-SSSSSS--SS-SSS---SSSSSSSSSSSSSSSSSSSSSSSS---------SSS------SSSS----SSSS-S----SSSSSSSSSS--
305 bends
DSSP: --S----SS----------SSS----------S----SS-SSS--------SS-----S-----------SSSS-SSSSSSS--S---S----------SS--SS---------SSSS---S-SSSS--SSSSSSS-----------SSSS----SS-SSS-S-SSSSSSSSSSSSSSSSSSSSS--SSS------SSSSSSSSSSSS-SSSSSS-S----SS--SSSSSS---SSSSSSSSSSSSSSS----S-SSSSSSSSSSS-SSSSSSSSSS--SS--SS--S------SSSSSS-SSSSSSS--S--S-------S--SSSSSSSSSSS--SSS-----SSSSSSSSSSS-SS--SSSSSSSSSSS--SSSSS-SSSSSSSSSSSSSSSSS----SSSSSSSSSSSS-----------SS--S-SSS-S-SS-SSSSSS--SS-SSS---SSSSSSSSSSSSSSSSSSSSSSSS---------SSS------SSSS----SSSS-S----SSSSSSSSSS--
305 bends
# helices #
Mol*: -------TT----------TT----------------GGGTT----------------------------TTTT-HHHHTT----------------------------------TTT------GGG-THHHHHHHT-----------HHHH---TT-------HHHHHHHHHHHHHHHHGGGGT--TT-------THHHHHHHHHHH-HHHHTT----------TT-TT----HHHHHHHHHHHHHHTT-----HHHHHHHHHH--HHHHHHHHGGG-----------------------HHHHHHHT----------------HHHHHHH-TT--TT------HHHHHHHHHHHTTT--HHHHHHHHHHH--GGGTT-HHHHHHHHHHHHHHHHTHHHHHHHHHHHHTT-------------TT----GGG---TTTTHHHHTTGGG-GGG---HHHHHHHHHHHHHHHHHHHT--------------------------------TTHHHHHHHHTHHHHHHHH-
523 helix elements - 27 3-10, 496 alpha, 0 pi
DSSP: -------TT----------TT----------------GGGTT------------------------------TT-HHHHTT----------------------------------TTT------GGG-THHHHHHHT-----------HHHH---TT-------HHHHHHHHHHHHHHHHGGGGT--TT-------THHHHHHHHHHH-HHHHTT----------TT-TT----HHHHHHHHHHHHHHTT-----HHHHHHHHHH--HHHHHHHHGGG-----------------------HHHHHHHT----------------HHHHHHH-TT--TT------HHHHHHHHHHH-TT--HHHHHHHHHHH--GGGTT-HHHHHHHHHHHHHHHHTHHHHHHHHHHHHTT-------------TT----GGG---TTTTHHHHTTGGG-GGG---HHHHHHHHHHHHHHHHHHHT--------------------------------TTHHHHHHHHTHHHHHHHH-
523 helix elements - 27 3-10, 496 alpha, 0 pi
# all #
Mol*: --SEEEETTEEEE-EEEEETTEEEEEEEEEE-EE---GGGTTS--EE----SSEEE--S---B-------TTTT-HHHHTTS--S-B-S---EEEEEE-SS--SSEEEEEEE--STTT---S-SGGG-THHHHHHHT-EEEE-----SHHHH---TT-SSS-S-HHHHHHHHHHHHHHHHGGGGTEEEEEEEEEEETHHHHHHHHHHH-HHHHTT-SEEEEES--TTSTTSEEEHHHHHHHHHHHHHHTT---S-HHHHHHHHHHS-HHHHHHHHGGG-SS--SS--S--EEE-SSSSSS-HHHHHHHT-S--S-EEEEEESB-SHHHHHHHSTT--TTS-----HHHHHHHHHHHTTT--HHHHHHHHHHH--GGGTT-HHHHHHHHHHHHHHHHTHHHHHHHHHHHHTTSS-EEEEEE----TT--S-GGG-SBTTTTHHHHTTGGG-GGG---HHHHHHHHHHHHHHHHHHHTSSSS---------SSS-EEEEESSSS--EEESTTHHHHHHHHTHHHHHHHH-
DSSP: --SEEEETTEEEE-EEEEETTEEEEEEEEEE-EE---GGGTTS--EE----SSEEE--S---B-------SSTT-HHHHTTS--S-B-S---EEEEEE-SS--SSEEEEEEE--STTT---S-SGGG-THHHHHHHT-EEEE-----SHHHH---TT-SSS-S-HHHHHHHHHHHHHHHHGGGGTEEEEEEEEEEETHHHHHHHHHHH-HHHHTT-SEEEEES--TTSTTS-EEHHHHHHHHHHHHHHTT---S-HHHHHHHHHHS-HHHHHHHHGGG-SS--SS--S---EE-SSSSSS-HHHHHHHT-S--S-EEEEEESB-SHHHHHHHSTT--TTS-----HHHHHHHHHHH-TT--HHHHHHHHHHH--GGGTT-HHHHHHHHHHHHHHHHTHHHHHHHHHHHHTTSS-EEEEEE----TT--S-GGG-SBTTTTHHHHTTGGG-GGG---HHHHHHHHHHHHHHHHHHHTSSSS---------SSS-EEEEESSSS--EEESTTHHHHHHHHTHHHHHHHH-
TODO fix mismatches e.g. here
\ No newline at end of file
......@@ -275,41 +275,42 @@ export namespace SecondaryStructureType {
DoubleHelix = 0x1,
Helix = 0x2,
Beta = 0x4,
Turn = 0x8,
Bend = 0x8,
Turn = 0x10,
// category variant
LeftHanded = 0x10, // helix
RightHanded = 0x20,
LeftHanded = 0x20, // helix
RightHanded = 0x40,
ClassicTurn = 0x40, // turn
InverseTurn = 0x80,
ClassicTurn = 0x80, // turn
InverseTurn = 0x100,
// sub-category
HelixOther = 0x100, // protein
Helix27 = 0x200,
Helix3Ten = 0x400,
HelixAlpha = 0x800,
HelixGamma = 0x1000,
HelixOmega = 0x2000,
HelixPi = 0x4000,
HelixPolyproline = 0x8000,
DoubleHelixOther = 0x10000, // nucleic
DoubleHelixZ = 0x20000,
DoubleHelixA = 0x40000,
DoubleHelixB = 0x80000,
BetaOther = 0x100000, // protein
BetaStrand = 0x200000, // single strand
BetaSheet = 0x400000, // multiple hydrogen bonded strands
BetaBarell = 0x800000, // closed series of sheets
TurnOther = 0x1000000, // protein
Turn1 = 0x2000000,
Turn2 = 0x4000000,
Turn3 = 0x8000000,
NA = 0x10000000, // not applicable/available
HelixOther = 0x200, // protein
Helix27 = 0x400,
Helix3Ten = 0x800,
HelixAlpha = 0x1000,
HelixGamma = 0x2000,
HelixOmega = 0x4000,
HelixPi = 0x8000,
HelixPolyproline = 0x10000,
DoubleHelixOther = 0x20000, // nucleic
DoubleHelixZ = 0x40000,
DoubleHelixA = 0x80000,
DoubleHelixB = 0x100000,
BetaOther = 0x200000, // protein
BetaStrand = 0x400000, // single strand
BetaSheet = 0x800000, // multiple hydrogen bonded strands
BetaBarell = 0x1000000, // closed series of sheets
TurnOther = 0x2000000, // protein
Turn1 = 0x4000000,
Turn2 = 0x8000000,
Turn3 = 0x10000000,
NA = 0x20000000, // not applicable/available
}
export const SecondaryStructureMmcif: { [value: string]: number } = {
......@@ -386,7 +387,7 @@ export namespace SecondaryStructureType {
G: Flag.Helix | Flag.Helix3Ten, // 3-helix (310 helix)
I: Flag.Helix | Flag.HelixPi, // 5 helix (pi-helix)
T: Flag.Turn, // hydrogen bonded turn
S: Flag.Turn, // bend
S: Flag.Bend, // bend
}
}
......
......@@ -22,6 +22,8 @@ const SecondaryStructureColors = ColorMap({
'betaTurn': 0x6080FF,
'betaStrand': 0xFFC800,
'coil': 0xFFFFFF,
'bend': 0x66D8C9 /* biting original color used 0x00FF00 */,
'turn': 0x00B266,
'dna': 0xAE00FE,
'rna': 0xFD0162,
......@@ -53,8 +55,10 @@ export function secondaryStructureColor(unit: Unit, element: ElementIndex): Colo
return SecondaryStructureColors.alphaHelix
} else if (SecondaryStructureType.is(secStrucType, SecondaryStructureType.Flag.Beta)) {
return SecondaryStructureColors.betaStrand
} else if (SecondaryStructureType.is(secStrucType, SecondaryStructureType.Flag.Bend)) {
return SecondaryStructureColors.bend
} else if (SecondaryStructureType.is(secStrucType, SecondaryStructureType.Flag.Turn)) {
return SecondaryStructureColors.coil
return SecondaryStructureColors.turn
} else {
const moleculeType = getElementMoleculeType(unit, element)
if (moleculeType === MoleculeType.DNA) {
......
......@@ -65,9 +65,10 @@ async function init() {
const cif = await downloadFromPdb('3j3q')
const models = await getModels(cif)
console.time('computeModelDSSP')
const secondaryStructure = computeModelDSSP(models[0].atomicHierarchy, models[0].atomicConformation)
console.timeEnd('computeModelDSSP')
;(models[0].properties as any).secondaryStructure = secondaryStructure
const secondaryStructure = computeModelDSSP(models[0].atomicHierarchy,
models[0].atomicConformation)
console.timeEnd('computeModelDSSP');
(models[0].properties as any).secondaryStructure = secondaryStructure
const structure = await getStructure(models[0])
const cartoonRepr = getCartoonRepr()
......@@ -76,7 +77,7 @@ async function init() {
size: reprCtx.sizeThemeRegistry.create('uniform', { structure })
})
await cartoonRepr.createOrUpdate({ ...CartoonRepresentationProvider.defaultValues, quality: 'auto' }, structure).run()
canvas3d.add(cartoonRepr)
canvas3d.resetCamera()
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment