Skip to content
Snippets Groups Projects
Commit 4e70c822 authored by David Sehnal's avatar David Sehnal
Browse files

Merge branch 'master' of https://github.com/molstar/molstar-proto into plugin

parents e13df4dc 702fc483
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);
......@@ -433,6 +434,28 @@ namespace Vec3 {
}
}
const tmp_dh_ab = Vec3.zero();
const tmp_dh_cb = Vec3.zero();
const tmp_dh_bc = Vec3.zero();
const tmp_dh_dc = Vec3.zero();
const tmp_dh_abc = Vec3.zero();
const tmp_dh_bcd = Vec3.zero();
const tmp_dh_cross = Vec3.zero();
/** Computes the dihedral angles of 4 related atoms. phi: C, N+1, CA+1, C+1 - psi: N, CA, C, N+1 - omega: CA, C, N+1, CA+1 */
export function dihedralAngle(a: Vec3, b: Vec3, c: Vec3, d: Vec3) {
Vec3.sub(tmp_dh_ab, a, b);
Vec3.sub(tmp_dh_cb, c, b);
Vec3.sub(tmp_dh_bc, b, c);
Vec3.sub(tmp_dh_dc, d, c);
Vec3.cross(tmp_dh_abc, tmp_dh_ab, tmp_dh_cb);
Vec3.cross(tmp_dh_bcd, tmp_dh_bc, tmp_dh_dc);
const angle = Vec3.angle(tmp_dh_abc, tmp_dh_bcd) * 360.0 / (2 * Math.PI);
Vec3.cross(tmp_dh_cross, tmp_dh_abc, tmp_dh_bcd);
return Vec3.dot(tmp_dh_cb, tmp_dh_cross) > 0 ? angle : -angle;
}
/**
* Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)
*/
......
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
......@@ -17,12 +17,17 @@ interface SecondaryStructure {
}
namespace SecondaryStructure {
export type Element = None | Helix | Sheet
export type Element = None | Turn | Helix | Sheet
export interface None {
kind: 'none'
}
export interface Turn {
kind: 'turn',
flags: SecondaryStructureType
}
export interface Helix {
kind: 'helix',
flags: SecondaryStructureType,
......
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
TODO move to spec.ts once tests are running
\ 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) {
......
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