molstar
Version:
A comprehensive macromolecular library.
62 lines • 2.69 kB
JavaScript
/**
* 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