diff --git a/src/mol-plugin/behavior/dynamic/volume-streaming/behavior.ts b/src/mol-plugin/behavior/dynamic/volume-streaming/behavior.ts new file mode 100644 index 0000000000000000000000000000000000000000..621f33fd33ed7c7ada1162639b97c232a1536427 --- /dev/null +++ b/src/mol-plugin/behavior/dynamic/volume-streaming/behavior.ts @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. + * + * @author David Sehnal <david.sehnal@gmail.com> + */ + +import { PluginBehavior } from 'mol-plugin/behavior'; +import { PluginStateObject } from 'mol-plugin/state/objects'; + +export class VolumeStreaming extends PluginStateObject.CreateBehavior<VolumeStreaming.Behavior>({ name: 'Volume Streaming' }) { } + +export namespace VolumeStreaming { + + export interface BehaviorParams { + + } + + export class Behavior implements PluginBehavior<{}> { + register(ref: string): void { + throw new Error('Method not implemented.'); + } + + unregister(): void { + throw new Error('Method not implemented.'); + } + } +} \ No newline at end of file diff --git a/src/mol-plugin/behavior/dynamic/volume-streaming/model.ts b/src/mol-plugin/behavior/dynamic/volume-streaming/model.ts new file mode 100644 index 0000000000000000000000000000000000000000..c0a6a5f57b748d0cf9b9c258d3ee45b8b78cf217 --- /dev/null +++ b/src/mol-plugin/behavior/dynamic/volume-streaming/model.ts @@ -0,0 +1,87 @@ +/** + * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. + * + * @author David Sehnal <david.sehnal@gmail.com> + */ + +import { PluginStateObject } from '../../../state/objects'; + +export class VolumeServerInfo extends PluginStateObject.Create<VolumeServerInfo.Data>({ name: 'Volume Streaming', typeClass: 'Object' }) { } + +export namespace VolumeServerInfo { + export interface Data { + serverUrl: string, + kind: 'x-ray' | 'em', + // for em, the EMDB access code, for x-ray, the PDB id + dataId: string, + header: VolumeServerHeader + } +} + +export interface VolumeServerHeader { + /** Format version number */ + formatVersion: string, + + /** Axis order from the slowest to fastest moving, same as in CCP4 */ + axisOrder: number[], + + /** Origin in fractional coordinates, in axisOrder */ + origin: number[], + + /** Dimensions in fractional coordinates, in axisOrder */ + dimensions: number[], + + spacegroup: VolumeServerHeader.Spacegroup, + channels: string[], + + /** Determines the data type of the values */ + valueType: VolumeServerHeader.ValueType, + + /** The value are stored in blockSize^3 cubes */ + blockSize: number, + sampling: VolumeServerHeader.Sampling[], + + /** Precision data the server can show. */ + availablePrecisions: VolumeServerHeader.DetailLevel[], + + isAvailable: boolean +} + +export namespace VolumeServerHeader { + export type ValueType = 'float32' | 'int8' + + export namespace ValueType { + export const Float32: ValueType = 'float32'; + export const Int8: ValueType = 'int8'; + } + + export type ValueArray = Float32Array | Int8Array + + export type DetailLevel = { precision: number, maxVoxels: number } + + export interface Spacegroup { + number: number, + size: number[], + angles: number[], + /** Determine if the data should be treated as periodic or not. (e.g. X-ray = periodic, EM = not periodic) */ + isPeriodic: boolean, + } + + export interface ValuesInfo { + mean: number, + sigma: number, + min: number, + max: number + } + + export interface Sampling { + byteOffset: number, + + /** How many values along each axis were collapsed into 1 */ + rate: number, + valuesInfo: ValuesInfo[], + + /** Number of samples along each axis, in axisOrder */ + sampleCount: number[] + } +} \ No newline at end of file diff --git a/src/mol-plugin/behavior/dynamic/volume-streaming/transformers.ts b/src/mol-plugin/behavior/dynamic/volume-streaming/transformers.ts new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391