diff --git a/.vscode/settings.json b/.vscode/settings.json index 8776880ee1105ce76e6750d0b4cc9f752793fdcb..9f20238be3337de52d4b5264853a36f5bdf719b8 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 e81cadce51b1a9bffeb9d6f081ef9e8a3e4a7a3a..dc5685f7f18ba5c595c39429dce4a5c45748698a 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 7f854880567cdd56bb14b73c7122f08028d5718c..17263a4dab0f6a9f75d5df89b2af74a1daa29a66 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 2507935c5e2a74591763c35989502c6429a82627..150a93ef4766560f6e76e3e3a2c875766e57c7a5 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 87aec81b1deb5af462a61f845a57b474342a50f8..91395a77be0e771b4f1bddfbee1e9353aeba71e4 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 fc3e89fbf2463ac3c5746528728fa3b67614c76a..44ffbca486dcd735737284ec903a969e3200d504 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 8af6802eaed6cdc3f75c4cb52d81b8a8361ab594..86866a062b619a89a0938acbd447904a71d34240 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 } }