UNPKG

molstar

Version:

A comprehensive macromolecular library.

62 lines 2.69 kB
/** * Copyright (c) 2020 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ import { __spreadArray } from "tslib"; import { Mat4, Tensor, Vec3 } from '../../mol-math/linear-algebra'; import { Box3D } from '../../mol-math/geometry'; import { arrayMin, arrayMax, arrayRms, arrayMean } from '../../mol-util/array'; // eslint-disable-next-line export function CubeGridFormat(grid) { return { name: 'custom grid', kind: 'cube-grid', data: grid }; } export function isCubeGridData(f) { return f.kind === 'cube-grid'; } export function initCubeGrid(params) { var geometry = params.basis.atoms.map(function (a) { return a.center; }); var spacing = params.gridSpacing, expand = params.boxExpand; var count = geometry.length; var box = Box3D.expand(Box3D(), Box3D.fromVec3Array(Box3D(), geometry), Vec3.create(expand, expand, expand)); var size = Box3D.size(Vec3(), box); var spacingThresholds = typeof spacing === 'number' ? [[0, spacing]] : __spreadArray([], spacing, true); spacingThresholds.sort(function (a, b) { return b[0] - a[0]; }); var s = 0.4; for (var i = 0; i <= spacingThresholds.length; i++) { s = spacingThresholds[i][1]; if (spacingThresholds[i][0] <= count) break; } var dimensions = Vec3.ceil(Vec3(), Vec3.scale(Vec3(), size, 1 / s)); return { params: params, box: box, dimensions: dimensions, size: size, npoints: dimensions[0] * dimensions[1] * dimensions[2], delta: Vec3.div(Vec3(), size, Vec3.subScalar(Vec3(), dimensions, 1)), }; } var BohrToAngstromFactor = 0.529177210859; export function createGrid(gridInfo, values, axisOrder) { var boxSize = Box3D.size(Vec3(), gridInfo.box); var boxOrigin = Vec3.clone(gridInfo.box.min); Vec3.scale(boxSize, boxSize, BohrToAngstromFactor); Vec3.scale(boxOrigin, boxOrigin, BohrToAngstromFactor); var scale = Mat4.fromScaling(Mat4(), Vec3.div(Vec3(), boxSize, Vec3.sub(Vec3(), gridInfo.dimensions, Vec3.create(1, 1, 1)))); var translate = Mat4.fromTranslation(Mat4(), boxOrigin); var matrix = Mat4.mul(Mat4(), translate, scale); var grid = { transform: { kind: 'matrix', matrix: matrix }, cells: Tensor.create(Tensor.Space(gridInfo.dimensions, axisOrder, Float32Array), values), stats: { min: arrayMin(values), max: arrayMax(values), mean: arrayMean(values), sigma: arrayRms(values), }, }; return grid; } //# sourceMappingURL=data-model.js.map