Browse Source

wrong assignment of values resolved

Sebastian Bittrich 6 years ago
parent
commit
696b188b91

+ 7 - 6
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

+ 1 - 1
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 = {

+ 15 - 5
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()
 }