UNPKG

molstar

Version:

A comprehensive macromolecular library.

114 lines 5.02 kB
"use strict"; /** * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.OperatorHklColorThemeProvider = exports.OperatorHklColorTheme = exports.getOperatorHklColorThemeParams = exports.OperatorHklColorThemeParams = void 0; var tslib_1 = require("tslib"); var color_1 = require("../../mol-util/color"); var structure_1 = require("../../mol-model/structure"); var param_definition_1 = require("../../mol-util/param-definition"); var palette_1 = require("../../mol-util/color/palette"); var number_1 = require("../../mol-util/number"); var lists_1 = require("../../mol-util/color/lists"); var DefaultList = 'dark-2'; var DefaultColor = (0, color_1.Color)(0xCCCCCC); var Description = "Assigns a color based on the operator HKL value of a transformed chain."; exports.OperatorHklColorThemeParams = (0, tslib_1.__assign)({}, (0, palette_1.getPaletteParams)({ type: 'colors', colorList: DefaultList })); function getOperatorHklColorThemeParams(ctx) { var params = param_definition_1.ParamDefinition.clone(exports.OperatorHklColorThemeParams); if (ctx.structure) { if (getOperatorHklSerialMap(ctx.structure.root).map.size > lists_1.ColorLists[DefaultList].list.length) { params.palette.defaultValue.name = 'colors'; params.palette.defaultValue.params = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, params.palette.defaultValue.params), { list: { kind: 'interpolate', colors: (0, lists_1.getColorListFromName)(DefaultList).list } }); } } return params; } exports.getOperatorHklColorThemeParams = getOperatorHklColorThemeParams; var hklOffset = 10000; function hklKey(hkl) { return hkl.map(function (v) { return ("" + (v + hklOffset)).padStart(5, '0'); }).join(''); } function hklKeySplit(key) { var len = (0, number_1.integerDigitCount)(hklOffset, 0); var h = parseInt(key.substr(0, len)); var k = parseInt(key.substr(len, len)); var l = parseInt(key.substr(len + len, len)); return [h - hklOffset, k - hklOffset, l - hklOffset]; } function formatHkl(hkl) { return hkl.map(function (v) { return v + 5; }).join(''); } function getOperatorHklSerialMap(structure) { var map = new Map(); var set = new Set(); for (var i = 0, il = structure.units.length; i < il; ++i) { var k = hklKey(structure.units[i].conformation.operator.hkl); set.add(k); } var arr = Array.from(set.values()).sort(); arr.forEach(function (k) { return map.set(k, map.size); }); var min = hklKeySplit(arr[0]); var max = hklKeySplit(arr[arr.length - 1]); return { min: min, max: max, map: map }; } function OperatorHklColorTheme(ctx, props) { var color; var legend; if (ctx.structure) { var _a = getOperatorHklSerialMap(ctx.structure.root), min = _a.min, max = _a.max, map_1 = _a.map; var labelTable_1 = []; map_1.forEach(function (v, k) { var i = v % map_1.size; var label = formatHkl(hklKeySplit(k)); if (labelTable_1[i] === undefined) labelTable_1[i] = label; else labelTable_1[i] += ", " + label; }); var labelOptions = { minLabel: formatHkl(min), maxLabel: formatHkl(max), valueLabel: function (i) { return labelTable_1[i]; } }; var palette_2 = (0, palette_1.getPalette)(map_1.size, props, labelOptions); legend = palette_2.legend; color = function (location) { var serial = undefined; if (structure_1.StructureElement.Location.is(location)) { var k = hklKey(location.unit.conformation.operator.hkl); serial = map_1.get(k); } else if (structure_1.Bond.isLocation(location)) { var k = hklKey(location.aUnit.conformation.operator.hkl); serial = map_1.get(k); } return serial === undefined ? DefaultColor : palette_2.color(serial); }; } else { color = function () { return DefaultColor; }; } return { factory: OperatorHklColorTheme, granularity: 'instance', color: color, props: props, description: Description, legend: legend }; } exports.OperatorHklColorTheme = OperatorHklColorTheme; exports.OperatorHklColorThemeProvider = { name: 'operator-hkl', label: 'Operator HKL', category: "Symmetry" /* Symmetry */, factory: OperatorHklColorTheme, getParams: getOperatorHklColorThemeParams, defaultValues: param_definition_1.ParamDefinition.getDefaultValues(exports.OperatorHklColorThemeParams), isApplicable: function (ctx) { return !!ctx.structure; } }; //# sourceMappingURL=operator-hkl.js.map