Browse Source

wip volume streaming

David Sehnal 6 years ago
parent
commit
d733ec7abb

+ 27 - 0
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.');
+        }
+    }
+}

+ 87 - 0
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[]
+    }
+}

+ 0 - 0
src/mol-plugin/behavior/dynamic/volume-streaming/transformers.ts