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