UNPKG

molstar

Version:

A comprehensive macromolecular library.

52 lines (51 loc) 2.65 kB
/** * Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Sebastian Bittrich <sebastian.bittrich@rcsb.org> * @author Alexander Rose <alexander.rose@weirdbyte.de> */ import { ParamDefinition as PD } from '../../mol-util/param-definition'; import { ShrakeRupleyComputationParams, AccessibleSurfaceArea } from './accessible-surface-area/shrake-rupley'; import { Unit } from '../../mol-model/structure'; import { CustomStructureProperty } from '../common/custom-structure-property'; import { QuerySymbolRuntime } from '../../mol-script/runtime/query/compiler'; import { CustomPropSymbol } from '../../mol-script/language/symbol'; import { Type } from '../../mol-script/language/type'; import { CustomPropertyDescriptor } from '../../mol-model/custom-property'; export const AccessibleSurfaceAreaParams = { ...ShrakeRupleyComputationParams }; export const AccessibleSurfaceAreaSymbols = { isBuried: QuerySymbolRuntime.Dynamic(CustomPropSymbol('computed', 'accessible-surface-area.is-buried', Type.Bool), ctx => { if (!Unit.isAtomic(ctx.element.unit)) return false; const accessibleSurfaceArea = AccessibleSurfaceAreaProvider.get(ctx.element.structure).value; if (!accessibleSurfaceArea) return false; return AccessibleSurfaceArea.getFlag(ctx.element, accessibleSurfaceArea) === 1 /* AccessibleSurfaceArea.Flags.Buried */; }), isAccessible: QuerySymbolRuntime.Dynamic(CustomPropSymbol('computed', 'accessible-surface-area.is-accessible', Type.Bool), ctx => { if (!Unit.isAtomic(ctx.element.unit)) return false; const accessibleSurfaceArea = AccessibleSurfaceAreaProvider.get(ctx.element.structure).value; if (!accessibleSurfaceArea) return false; return AccessibleSurfaceArea.getFlag(ctx.element, accessibleSurfaceArea) === 2 /* AccessibleSurfaceArea.Flags.Accessible */; }), }; export const AccessibleSurfaceAreaProvider = CustomStructureProperty.createProvider({ label: 'Accessible Surface Area', descriptor: CustomPropertyDescriptor({ name: 'molstar_accessible_surface_area', symbols: AccessibleSurfaceAreaSymbols, // TODO `cifExport` }), type: 'root', defaultParams: AccessibleSurfaceAreaParams, getParams: (data) => AccessibleSurfaceAreaParams, isApplicable: (data) => true, obtain: async (ctx, data, props) => { const p = { ...PD.getDefaultValues(AccessibleSurfaceAreaParams), ...props }; return { value: await AccessibleSurfaceArea.compute(data, p).runInContext(ctx.runtime) }; } });