model.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /**
  2. * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  6. */
  7. import { PluginStateObject } from '../../../../mol-plugin-state/objects';
  8. import { VolumeIsoValue } from '../../../../mol-model/volume';
  9. import { Structure } from '../../../../mol-model/structure';
  10. export class VolumeServerInfo extends PluginStateObject.Create<VolumeServerInfo.Data>({ name: 'Volume Streaming', typeClass: 'Object' }) { }
  11. export namespace VolumeServerInfo {
  12. export type Kind = 'x-ray' | 'em'
  13. export interface EntryData {
  14. kind: Kind,
  15. // for em, the EMDB access code, for x-ray, the PDB id
  16. dataId: string,
  17. header: VolumeServerHeader,
  18. emDefaultContourLevel?: VolumeIsoValue,
  19. }
  20. export interface Data {
  21. serverUrl: string,
  22. entries: EntryData[],
  23. structure: Structure
  24. }
  25. }
  26. export interface VolumeServerHeader {
  27. /** Format version number */
  28. formatVersion: string,
  29. /** Axis order from the slowest to fastest moving, same as in CCP4 */
  30. axisOrder: number[],
  31. /** Origin in fractional coordinates, in axisOrder */
  32. origin: number[],
  33. /** Dimensions in fractional coordinates, in axisOrder */
  34. dimensions: number[],
  35. spacegroup: VolumeServerHeader.Spacegroup,
  36. channels: string[],
  37. /** Determines the data type of the values */
  38. valueType: VolumeServerHeader.ValueType,
  39. /** The value are stored in blockSize^3 cubes */
  40. blockSize: number,
  41. sampling: VolumeServerHeader.Sampling[],
  42. /** Precision data the server can show. */
  43. availablePrecisions: VolumeServerHeader.DetailLevel[],
  44. isAvailable: boolean
  45. }
  46. export namespace VolumeServerHeader {
  47. export type ValueType = 'float32' | 'int8'
  48. export namespace ValueType {
  49. export const Float32: ValueType = 'float32';
  50. export const Int8: ValueType = 'int8';
  51. }
  52. export type ValueArray = Float32Array | Int8Array
  53. export type DetailLevel = { precision: number, maxVoxels: number }
  54. export interface Spacegroup {
  55. number: number,
  56. size: number[],
  57. angles: number[],
  58. /** Determine if the data should be treated as periodic or not. (e.g. X-ray = periodic, EM = not periodic) */
  59. isPeriodic: boolean,
  60. }
  61. export interface ValuesInfo {
  62. mean: number,
  63. sigma: number,
  64. min: number,
  65. max: number
  66. }
  67. export interface Sampling {
  68. byteOffset: number,
  69. /** How many values along each axis were collapsed into 1 */
  70. rate: number,
  71. valuesInfo: ValuesInfo[],
  72. /** Number of samples along each axis, in axisOrder */
  73. sampleCount: number[]
  74. }
  75. }