From 52a59696cf9a1964812b6a29d127fb7fed37991f Mon Sep 17 00:00:00 2001 From: Alexander Rose <alex.rose@rcsb.org> Date: Tue, 4 Jun 2019 12:55:58 -0700 Subject: [PATCH] fixed and updated rcsb assembly symmetry prop --- .vscode/settings.json | 3 +- README.md | 5 ++- package.json | 4 +- src/mol-model-props/rcsb/assembly-symmetry.ts | 4 +- .../rcsb/graphql/symmetry.gql.ts | 42 ++++++++++--------- src/mol-model-props/rcsb/graphql/types.ts | 8 +++- .../rcsb/themes/assembly-symmetry-cluster.ts | 17 +++++--- 7 files changed, 49 insertions(+), 34 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 8776880ee..9f20238be 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,7 @@ "files.associations": { "*.glsl.ts": "glsl", "*.frag.ts": "glsl", - "*.vert.ts": "glsl" + "*.vert.ts": "glsl", + "*.gql.ts": "graphql" }, } \ No newline at end of file diff --git a/README.md b/README.md index e81cadce5..dc5685f7f 100644 --- a/README.md +++ b/README.md @@ -120,12 +120,13 @@ If node complains about a missine acorn peer dependency, run the following comma ### Editor -To get syntax highlighting for the shader files add the following to Visual Code's settings files +To get syntax highlighting for shader and graphql files add the following to Visual Code's settings files and make sure relevant extanesions are installed in the editor. "files.associations": { "*.glsl.ts": "glsl", "*.frag.ts": "glsl", - "*.vert.ts": "glsl" + "*.vert.ts": "glsl", + "*.gql.ts": "graphql" }, ## Contributing diff --git a/package.json b/package.json index 7f8548805..17263a4da 100644 --- a/package.json +++ b/package.json @@ -13,11 +13,11 @@ "scripts": { "lint": "tslint src/**/*.ts", "test": "npm run lint && jest", - "build": "cpx \"src/**/*.{scss,woff,woff2,ttf,otf,eot,svg,html,gql}\" lib/ && tsc", + "build": "cpx \"src/**/*.{scss,woff,woff2,ttf,otf,eot,svg,html}\" lib/ && tsc", "postinstall": "npm run build", "watch": "concurrently --kill-others \"npm:watch-ts\" \"npm:watch-extra\" \"npm:watch-webpack\"", "watch-ts": "tsc -watch", - "watch-extra": "cpx \"src/**/*.{scss,woff,woff2,ttf,otf,eot,svg,html,gql}\" lib/ --watch", + "watch-extra": "cpx \"src/**/*.{scss,woff,woff2,ttf,otf,eot,svg,html}\" lib/ --watch", "build-webpack": "webpack --mode production", "watch-webpack": "webpack -w --mode development --display minimal", "model-server": "node lib/servers/model/server.js", diff --git a/src/mol-model-props/rcsb/assembly-symmetry.ts b/src/mol-model-props/rcsb/assembly-symmetry.ts index 2507935c5..150a93ef4 100644 --- a/src/mol-model-props/rcsb/assembly-symmetry.ts +++ b/src/mol-model-props/rcsb/assembly-symmetry.ts @@ -273,9 +273,9 @@ export namespace AssemblySymmetry { console.error(e) return false; } - if (!result || !result.assemblies) return false; + if (!result || !result.entry || !result.entry.assemblies) return false; - db = createDatabaseFromJson(result.assemblies as ReadonlyArray<AssemblySymmetryGraphQL.Assemblies>) + db = createDatabaseFromJson(result.entry.assemblies as ReadonlyArray<AssemblySymmetryGraphQL.Assemblies>) } model.customProperties.add(Descriptor); diff --git a/src/mol-model-props/rcsb/graphql/symmetry.gql.ts b/src/mol-model-props/rcsb/graphql/symmetry.gql.ts index 87aec81b1..91395a77b 100644 --- a/src/mol-model-props/rcsb/graphql/symmetry.gql.ts +++ b/src/mol-model-props/rcsb/graphql/symmetry.gql.ts @@ -1,26 +1,28 @@ export default `query AssemblySymmetry($pdbId: String!) { - assemblies(pdbId: $pdbId) { - pdbx_struct_assembly { - id - } - rcsb_struct_symmetry { - clusters { - avg_rmsd - members { - asym_id - pdbx_struct_oper_list_ids - } + entry(pdbId: $pdbId) { + assemblies { + pdbx_struct_assembly { + id } - kind - oligomeric_state - rotation_axes { - start - end - order + rcsb_struct_symmetry { + clusters { + avg_rmsd + members { + asym_id + pdbx_struct_oper_list_ids + } + } + kind + oligomeric_state + rotation_axes { + start + end + order + } + stoichiometry + symbol + type } - stoichiometry - symbol - type } } }` \ No newline at end of file diff --git a/src/mol-model-props/rcsb/graphql/types.ts b/src/mol-model-props/rcsb/graphql/types.ts index fc3e89fbf..44ffbca48 100644 --- a/src/mol-model-props/rcsb/graphql/types.ts +++ b/src/mol-model-props/rcsb/graphql/types.ts @@ -1,4 +1,4 @@ -// Generated in 2019-03-01T14:48:33-08:00 +// Generated in 2019-06-04T12:44:49-07:00 export type Maybe<T> = T | null; /** Built-in scalar representing an instant in time */ @@ -19,6 +19,12 @@ export namespace AssemblySymmetry { export type Query = { __typename?: "Query"; + entry: Maybe<Entry>; + }; + + export type Entry = { + __typename?: "CoreEntry"; + assemblies: Maybe<(Maybe<Assemblies>)[]>; }; diff --git a/src/mol-model-props/rcsb/themes/assembly-symmetry-cluster.ts b/src/mol-model-props/rcsb/themes/assembly-symmetry-cluster.ts index 8af6802ea..86866a062 100644 --- a/src/mol-model-props/rcsb/themes/assembly-symmetry-cluster.ts +++ b/src/mol-model-props/rcsb/themes/assembly-symmetry-cluster.ts @@ -1,5 +1,5 @@ /** - * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ @@ -9,11 +9,13 @@ import { ColorTheme, LocationColor } from '../../../mol-theme/color'; import { ParamDefinition as PD } from '../../../mol-util/param-definition' import { Table } from '../../../mol-data/db'; import { AssemblySymmetry } from '../assembly-symmetry'; -import { ColorScale, Color } from '../../../mol-util/color'; +import { Color } from '../../../mol-util/color'; import { Unit, StructureElement, StructureProperties } from '../../../mol-model/structure'; import { Location } from '../../../mol-model/location'; -import { ColorListName, ColorListOptions } from '../../../mol-util/color/scale'; +import { ScaleLegend } from '../../../mol-util/color/scale'; import { getSymmetrySelectParam } from '../util'; +import { getPalette, getPaletteParams } from '../../../mol-theme/color/util'; +import { TableLegend } from '../../../mol-util/color/tables'; const DefaultColor = Color(0xCCCCCC) @@ -32,7 +34,7 @@ function clusterMemberKey(assemblyId: string, asymId: string, operList: string[] } export const AssemblySymmetryClusterColorThemeParams = { - list: PD.Select<ColorListName>('Viridis', ColorListOptions), + ...getPaletteParams({ scaleList: 'RedYellowBlue' }), symmetryId: getSymmetrySelectParam(), } export type AssemblySymmetryClusterColorThemeParams = typeof AssemblySymmetryClusterColorThemeParams @@ -44,6 +46,7 @@ export function getAssemblySymmetryClusterColorThemeParams(ctx: ThemeDataContext export function AssemblySymmetryClusterColorTheme(ctx: ThemeDataContext, props: PD.Values<AssemblySymmetryClusterColorThemeParams>): ColorTheme<AssemblySymmetryClusterColorThemeParams> { let color: LocationColor = () => DefaultColor + let legend: ScaleLegend | TableLegend | undefined const { symmetryId } = props @@ -68,7 +71,8 @@ export function AssemblySymmetryClusterColorTheme(ctx: ThemeDataContext, props: } } - const scale = ColorScale.create({ listOrName: props.list, domain: [ 0, clusters._rowCount - 1 ] }) + const palette = getPalette(clusters._rowCount, props) + legend = palette.legend color = (location: Location): Color => { if (StructureElement.isLocation(location)) { @@ -76,7 +80,7 @@ export function AssemblySymmetryClusterColorTheme(ctx: ThemeDataContext, props: if (assembly && assembly.id === symmetry.assembly_id) { const asymId = getAsymId(location.unit)(location) const cluster = clusterByMember.get(clusterMemberKey(assembly.id, asymId, assembly.operList)) - return cluster !== undefined ? scale.color(cluster) : DefaultColor + return cluster !== undefined ? palette.color(cluster) : DefaultColor } } return DefaultColor @@ -91,6 +95,7 @@ export function AssemblySymmetryClusterColorTheme(ctx: ThemeDataContext, props: color, props, description: 'Assigns chain colors according to assembly symmetry cluster membership.', + legend } } -- GitLab