Alexander Rose пре 5 година
родитељ
комит
01ef92a795

+ 21 - 12
src/mol-model-props/rcsb/assembly-symmetry.ts

@@ -12,21 +12,11 @@ import { CustomPropertyDescriptor, Structure } from '../../mol-model/structure';
 import { Database as _Database } from '../../mol-data/db'
 import { GraphQLClient } from '../../mol-util/graphql-client';
 import { CustomStructureProperty, CustomPropertyContext } from '../common/custom-property-registry';
-import { Loci, isDataLoci, DataLoci, createDataLoci } from '../../mol-model/loci';
 import { NonNullableArray } from '../../mol-util/type-helpers';
-import { OrderedSet } from '../../mol-data/int';
 
 export namespace AssemblySymmetry {
     export const DefaultServerUrl = 'http://data-staging.rcsb.org/graphql'
 
-    const AxesLociTag = 'rcsb_assembly_symmetry_axes'
-    export function createAxesLoci(assemblySymmetry: AssemblySymmetryValue, indices: OrderedSet): DataLoci<AssemblySymmetryValue> {
-        return createDataLoci(assemblySymmetry, AxesLociTag, indices)
-    }
-    export function isAxesLoci(x?: Loci): x is DataLoci<AssemblySymmetryValue> {
-        return isDataLoci(x) && x.tag === AxesLociTag
-    }
-
     export function isApplicable(structure?: Structure): boolean {
         return (
             !!structure &&
@@ -37,7 +27,7 @@ export namespace AssemblySymmetry {
         )
     }
 
-    export async function compute(ctx: CustomPropertyContext, structure: Structure, props: AssemblySymmetryProps): Promise<AssemblySymmetryValue> {
+    export async function fetch(ctx: CustomPropertyContext, structure: Structure, props: AssemblySymmetryProps): Promise<AssemblySymmetryValue> {
         const client = new GraphQLClient(props.serverUrl, ctx.fetch)
         const variables: AssemblySymmetryQueryVariables = {
             assembly_id: structure.units[0].conformation.operator.assembly.id,
@@ -52,6 +42,25 @@ export namespace AssemblySymmetry {
     }
 }
 
+export function getSymmetrySelectParam(structure?: Structure) {
+    const param = PD.Select<number>(0, [[0, 'No Symmetries']])
+    if (structure) {
+        const assemblySymmetry = AssemblySymmetryProvider.getValue(structure).value
+        if (assemblySymmetry) {
+            const options: [number, string][] = []
+            for (let i = 0, il = assemblySymmetry.length; i < il; ++i) {
+                const { symbol, kind } = assemblySymmetry[i]
+                options.push([ i, `${i + 1}: ${symbol} ${kind}` ])
+            }
+            if (options.length) {
+                param.options = options
+                param.defaultValue = options[0][0]
+            }
+        }
+    }
+    return param
+}
+
 export const AssemblySymmetryParams = {
     serverUrl: PD.Text(AssemblySymmetry.DefaultServerUrl, { description: 'GraphQL endpoint URL' })
 }
@@ -73,6 +82,6 @@ export const AssemblySymmetryProvider: CustomStructureProperty.Provider<Assembly
     isApplicable: (data: Structure) => AssemblySymmetry.isApplicable(data),
     obtain: async (ctx: CustomPropertyContext, data: Structure, props: Partial<AssemblySymmetryProps>) => {
         const p = { ...PD.getDefaultValues(AssemblySymmetryParams), ...props }
-        return await AssemblySymmetry.compute(ctx, data, p)
+        return await AssemblySymmetry.fetch(ctx, data, p)
     }
 })

+ 1 - 2
src/mol-model-props/rcsb/representations/assembly-symmetry-axes.ts

@@ -6,13 +6,12 @@
 
 import { ParamDefinition as PD } from '../../../mol-util/param-definition';
 import { Structure } from '../../../mol-model/structure';
-import { AssemblySymmetryProvider, AssemblySymmetryValue } from '../assembly-symmetry';
+import { AssemblySymmetryProvider, AssemblySymmetryValue, getSymmetrySelectParam } from '../assembly-symmetry';
 import { MeshBuilder } from '../../../mol-geo/geometry/mesh/mesh-builder';
 import { Vec3 } from '../../../mol-math/linear-algebra';
 import { addSphere } from '../../../mol-geo/geometry/mesh/builder/sphere';
 import { addCylinder } from '../../../mol-geo/geometry/mesh/builder/cylinder';
 import { Mesh } from '../../../mol-geo/geometry/mesh/mesh';
-import { getSymmetrySelectParam } from '../util';
 import { RuntimeContext } from '../../../mol-task';
 import { Shape } from '../../../mol-model/shape';
 import { ColorNames } from '../../../mol-util/color/names';

+ 1 - 2
src/mol-model-props/rcsb/themes/assembly-symmetry-cluster.ts

@@ -7,12 +7,11 @@
 import { ThemeDataContext } from '../../../mol-theme/theme';
 import { ColorTheme, LocationColor } from '../../../mol-theme/color';
 import { ParamDefinition as PD } from '../../../mol-util/param-definition'
-import { AssemblySymmetryProvider, AssemblySymmetry } from '../assembly-symmetry';
+import { AssemblySymmetryProvider, AssemblySymmetry, getSymmetrySelectParam } from '../assembly-symmetry';
 import { Color } from '../../../mol-util/color';
 import { Unit, StructureElement, StructureProperties } from '../../../mol-model/structure';
 import { Location } from '../../../mol-model/location';
 import { ScaleLegend, TableLegend } from '../../../mol-util/legend';
-import { getSymmetrySelectParam } from '../util';
 import { getPalette, getPaletteParams } from '../../../mol-util/color/palette';
 import { CustomPropertyContext } from '../../common/custom-property-registry';
 

+ 0 - 28
src/mol-model-props/rcsb/util.ts

@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2018-2020 mol* contributors, licensed under MIT, See LICENSE file for more info.
- *
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- */
-
-import { Structure } from '../../mol-model/structure';
-import { ParamDefinition as PD } from '../../mol-util/param-definition'
-import {  AssemblySymmetryProvider } from './assembly-symmetry';
-
-export function getSymmetrySelectParam(structure?: Structure) {
-    const param = PD.Select<number>(0, [[0, 'No Symmetries']])
-    if (structure) {
-        const assemblySymmetry = AssemblySymmetryProvider.getValue(structure).value
-        if (assemblySymmetry) {
-            const options: [number, string][] = []
-            for (let i = 0, il = assemblySymmetry.length; i < il; ++i) {
-                const { symbol, kind } = assemblySymmetry[i]
-                options.push([ i, `${i + 1}: ${symbol} ${kind}` ])
-            }
-            if (options.length) {
-                param.options = options
-                param.defaultValue = options[0][0]
-            }
-        }
-    }
-    return param
-}

+ 1 - 21
src/mol-plugin/behavior/dynamic/custom-props/rcsb/assembly-symmetry.ts

@@ -5,17 +5,14 @@
  */
 
 import { ParamDefinition as PD } from '../../../../../mol-util/param-definition'
-import { AssemblySymmetryProvider, AssemblySymmetry } from '../../../../../mol-model-props/rcsb/assembly-symmetry';
+import { AssemblySymmetryProvider, AssemblySymmetry, getSymmetrySelectParam } from '../../../../../mol-model-props/rcsb/assembly-symmetry';
 import { PluginBehavior } from '../../../behavior';
-import { OrderedSet } from '../../../../../mol-data/int';
-import { Loci } from '../../../../../mol-model/loci';
 import { getAssemblySymmetryAxesRepresentation, AssemblySymmetryAxesParams } from '../../../../../mol-model-props/rcsb/representations/assembly-symmetry-axes';
 import { AssemblySymmetryClusterColorThemeProvider } from '../../../../../mol-model-props/rcsb/themes/assembly-symmetry-cluster';
 import { PluginStateTransform, PluginStateObject } from '../../../../state/objects';
 import { Task } from '../../../../../mol-task';
 import { PluginSpec } from '../../../../spec';
 import { PluginContext } from '../../../../context';
-import { getSymmetrySelectParam } from '../../../../../mol-model-props/rcsb/util';
 import { StateTransformer } from '../../../../../mol-state';
 
 export const RCSBAssemblySymmetry = PluginBehavior.create<{ autoAttach: boolean }>({
@@ -25,25 +22,10 @@ export const RCSBAssemblySymmetry = PluginBehavior.create<{ autoAttach: boolean
     ctor: class extends PluginBehavior.Handler<{ autoAttach: boolean }> {
         private provider = AssemblySymmetryProvider
 
-        private label = (loci: Loci): string | undefined => {
-            if (AssemblySymmetry.isAxesLoci(loci)) {
-                const labels: string[] = []
-                OrderedSet.forEach(loci.indices, v => {
-                    const { kind, type } = loci.data[v]
-                    if (type && kind) {
-                        labels.push(`Axis of type ${type} for ${kind} symmetry`)
-                    }
-                })
-                return labels.length ? labels.join(', ') : undefined
-            }
-            return undefined
-        }
-
         register(): void {
             this.ctx.state.dataState.actions.add(PluginSpec.Action(AssemblySymmetryAxes3D).action)
             this.ctx.customStructureProperties.register(this.provider, this.params.autoAttach);
             this.ctx.structureRepresentation.themeCtx.colorThemeRegistry.add('rcsb-assembly-symmetry-cluster', AssemblySymmetryClusterColorThemeProvider)
-            this.ctx.lociLabels.addProvider(this.label);
         }
 
         update(p: { autoAttach: boolean }) {
@@ -57,7 +39,6 @@ export const RCSBAssemblySymmetry = PluginBehavior.create<{ autoAttach: boolean
             // TODO remove `AssemblySymmetryAxes3D` from `this.ctx.state.dataState.actions`
             this.ctx.customStructureProperties.unregister(this.provider.descriptor.name);
             this.ctx.structureRepresentation.themeCtx.colorThemeRegistry.remove('rcsb-assembly-symmetry-cluster')
-            this.ctx.lociLabels.removeProvider(this.label);
         }
     },
     params: () => ({
@@ -73,7 +54,6 @@ const AssemblySymmetryAxes3D = PluginStateTransform.BuiltIn({
     from: PluginStateObject.Molecule.Structure,
     to: PluginStateObject.Shape.Representation3D,
     params: (a, ctx: PluginContext) => {
-        console.log(a?.data, getSymmetrySelectParam(a?.data))
         return {
             ...AssemblySymmetryAxesParams,
             symmetryIndex: getSymmetrySelectParam(a?.data),