From 696b188b91359593065978af007548dbc4cd0e6c Mon Sep 17 00:00:00 2001 From: Sebastian Bittrich <bittrich@hs-mittweida.de> Date: Fri, 22 Mar 2019 13:26:49 -0700 Subject: [PATCH] wrong assignment of values resolved --- .../unit/accessible-surface-area/compute.ts | 13 ++++++------ .../color/accessible-surface-area.ts | 2 +- src/tests/browser/render-structure.ts | 20 ++++++++++++++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/mol-model/structure/structure/unit/accessible-surface-area/compute.ts b/src/mol-model/structure/structure/unit/accessible-surface-area/compute.ts index 198f0af73..4fa2225a7 100644 --- a/src/mol-model/structure/structure/unit/accessible-surface-area/compute.ts +++ b/src/mol-model/structure/structure/unit/accessible-surface-area/compute.ts @@ -46,8 +46,7 @@ function normalizeAccessibleSurfaceArea(ctx: AccessibleSurfaceAreaContext) { function computePerResidue(ctx: AccessibleSurfaceAreaContext) { const { atomRadius, accessibleSurfaceArea, maxLookupRadius, spherePoints, cons } = ctx; const { probeSize } = ctx.params; - const { elements: atoms } = ctx.unit; - const { residueAtomSegments } = ctx.unit.model.atomicHierarchy; + const { elements: atoms, residueIndex } = ctx.unit; const { x, y, z } = ctx.unit.model.atomicConformation; const atomCount = ctx.unit.elements.length; const { lookup3d } = ctx.unit; @@ -57,6 +56,7 @@ function computePerResidue(ctx: AccessibleSurfaceAreaContext) { const a2Pos = Vec3.zero(); for (let _aI = 0; _aI < atomCount; ++_aI) { + // map the atom index of this unit to the actual 'global' atom index const aI = atoms[_aI]; const radii1 = atomRadius[aI]; if (radii1 === missingAccessibleSurfaceAreaValue) continue; @@ -104,7 +104,7 @@ function computePerResidue(ctx: AccessibleSurfaceAreaContext) { } const value = cons * accessiblePointCount * r * r; - accessibleSurfaceArea[residueAtomSegments.index[aI]] += value; + accessibleSurfaceArea[residueIndex[aI]] += value; } } @@ -136,11 +136,11 @@ function assignRadiusForHeavyAtoms(ctx: AccessibleSurfaceAreaContext) { const element = type_symbol.value(aI); const resn = label_comp_id.value(raI)!; - ctx.atomRadius[ctx.atomRadius.length] = determineRadius(atomId, element, resn); + ctx.atomRadius[aI] = determineRadius(atomId, element, resn); // while having atom->parent mapping at hand, initialize residue-level of information - ctx.accessibleSurfaceArea[ctx.accessibleSurfaceArea.length] = 0.0; - ctx.relativeAccessibleSurfaceArea[ctx.relativeAccessibleSurfaceArea.length] = 0.0; + ctx.accessibleSurfaceArea[raI] = 0.0; + ctx.relativeAccessibleSurfaceArea[raI] = 0.0; } } @@ -202,6 +202,7 @@ function initialize(unit: Unit.Atomic, params: AccessibleSurfaceAreaComputationP } function computeAccessibleSurfaceArea(unit: Unit.Atomic, params?: Partial<AccessibleSurfaceAreaComputationParameters>): AccessibleSurfaceArea { + console.log(`computing accessible surface area for unit #${ unit.id + 1 }`); return _computeAccessibleSurfaceArea(unit, { numberOfSpherePoints: (params && params.numberOfSpherePoints) || 960, probeSize: (params && params.probeSize) || 1.4 diff --git a/src/mol-theme/color/accessible-surface-area.ts b/src/mol-theme/color/accessible-surface-area.ts index 2dfd70eb7..3593c7b76 100644 --- a/src/mol-theme/color/accessible-surface-area.ts +++ b/src/mol-theme/color/accessible-surface-area.ts @@ -13,7 +13,7 @@ import { ColorListOptions, ColorListName, ColorScale } from 'mol-util/color/scal import { StructureElement, Unit } from 'mol-model/structure'; import { missingAccessibleSurfaceAreaValue } from 'mol-model/structure/structure/unit/accessible-surface-area/compute'; -const DefaultColor = Color(0xCCCCCC) +const DefaultColor = Color(0xFFFFFF) const Description = 'Assigns a color based on the relative accessible surface area of a residue.' export const AccessibleSurfaceAreaColorThemeParams = { diff --git a/src/tests/browser/render-structure.ts b/src/tests/browser/render-structure.ts index 3f14cfcd8..c2b761936 100644 --- a/src/tests/browser/render-structure.ts +++ b/src/tests/browser/render-structure.ts @@ -61,12 +61,9 @@ function getCartoonRepr() { } async function init() { - const cif = await downloadFromPdb('1acj') + const cif = await downloadFromPdb('1brr') const models = await getModels(cif) - // console.time('computeModelASA') - // const asa = computeModelASA(models[0].atomicHierarchy, models[0].atomicConformation) - // console.timeEnd('computeModelASA'); - // (models[0].properties as any).asa = asa + const structure = await getStructure(models[0]) const cartoonRepr = getCartoonRepr() @@ -76,6 +73,19 @@ async function init() { }) await cartoonRepr.createOrUpdate({ ...CartoonRepresentationProvider.defaultValues, quality: 'auto' }, structure).run() + // console.time('computeModelDSSP') + // 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() + + // cartoonRepr.setTheme({ + // color: reprCtx.colorThemeRegistry.create('secondary-structure', { structure }), + // size: reprCtx.sizeThemeRegistry.create('uniform', { structure }) + // }) + // await cartoonRepr.createOrUpdate({ ...CartoonRepresentationProvider.defaultValues, quality: 'auto' }, structure).run() + canvas3d.add(cartoonRepr) canvas3d.resetCamera() } -- GitLab