UNPKG

molstar

Version:

A comprehensive macromolecular library.

119 lines 5.83 kB
"use strict"; /** * Copyright (c) 2021 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author David Sehnal <david.sehnal@gmail.com> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.BestDatabaseSequenceMappingColorThemeProvider = exports.BestDatabaseSequenceMappingColorTheme = exports.getBestDatabaseSequenceMappingColorThemeParams = exports.BestDatabaseSequenceMappingColorThemeParams = void 0; var tslib_1 = require("tslib"); var structure_1 = require("../../../mol-model/structure"); var color_1 = require("../../../mol-util/color"); var palette_1 = require("../../../mol-util/color/palette"); var param_definition_1 = require("../../../mol-util/param-definition"); var best_database_mapping_1 = require("../best-database-mapping"); var DefaultColor = (0, color_1.Color)(0xFAFAFA); var Description = 'Assigns a color based on best dababase sequence mapping.'; // same colors for same accessions var globalAccessionMap = new Map(); exports.BestDatabaseSequenceMappingColorThemeParams = (0, tslib_1.__assign)({}, (0, palette_1.getPaletteParams)({ type: 'colors', colorList: 'set-1' })); function getBestDatabaseSequenceMappingColorThemeParams(ctx) { return exports.BestDatabaseSequenceMappingColorThemeParams; // TODO return copy } exports.getBestDatabaseSequenceMappingColorThemeParams = getBestDatabaseSequenceMappingColorThemeParams; function BestDatabaseSequenceMappingColorTheme(ctx, props) { var color; if (ctx.structure) { for (var _i = 0, _a = ctx.structure.models; _i < _a.length; _i++) { var m = _a[_i]; var mapping = best_database_mapping_1.BestDatabaseSequenceMapping.Provider.get(m).value; if (!mapping) continue; for (var _b = 0, _c = mapping.accession; _b < _c.length; _b++) { var acc = _c[_b]; if (!acc || globalAccessionMap.has(acc)) continue; globalAccessionMap.set(acc, globalAccessionMap.size); } } var l_1 = structure_1.StructureElement.Location.create(ctx.structure); var palette_2 = (0, palette_1.getPalette)(globalAccessionMap.size + 1, props, { valueLabel: function (i) { return "" + i; } }); var colorMap_1 = new Map(); var getColor_1 = function (location) { var key = best_database_mapping_1.BestDatabaseSequenceMapping.getKey(location); if (!key) return DefaultColor; if (colorMap_1.has(key)) return colorMap_1.get(key); var color = palette_2.color(globalAccessionMap.get(key)); colorMap_1.set(key, color); return color; }; color = function (location) { if (structure_1.StructureElement.Location.is(location) && structure_1.Unit.isAtomic(location.unit)) { return getColor_1(location); } else if (structure_1.Bond.isLocation(location)) { l_1.unit = location.aUnit; l_1.element = location.aUnit.elements[location.aIndex]; return getColor_1(l_1); } return DefaultColor; }; } else { color = function () { return DefaultColor; }; } return { factory: BestDatabaseSequenceMappingColorTheme, granularity: 'group', preferSmoothing: true, color: color, props: props, description: Description, }; } exports.BestDatabaseSequenceMappingColorTheme = BestDatabaseSequenceMappingColorTheme; exports.BestDatabaseSequenceMappingColorThemeProvider = { name: 'best-sequence-database-mapping', label: 'Best Database Sequence Mapping', category: "Residue Property" /* Residue */, factory: BestDatabaseSequenceMappingColorTheme, getParams: getBestDatabaseSequenceMappingColorThemeParams, defaultValues: param_definition_1.ParamDefinition.getDefaultValues(exports.BestDatabaseSequenceMappingColorThemeParams), isApplicable: function (ctx) { var _a; return !!((_a = ctx.structure) === null || _a === void 0 ? void 0 : _a.models.some(function (m) { return best_database_mapping_1.BestDatabaseSequenceMapping.Provider.isApplicable(m); })); }, ensureCustomProperties: { attach: function (ctx, data) { return (0, tslib_1.__awaiter)(void 0, void 0, void 0, function () { var _i, _a, m; return (0, tslib_1.__generator)(this, function (_b) { switch (_b.label) { case 0: if (!data.structure) return [2 /*return*/]; _i = 0, _a = data.structure.models; _b.label = 1; case 1: if (!(_i < _a.length)) return [3 /*break*/, 4]; m = _a[_i]; return [4 /*yield*/, best_database_mapping_1.BestDatabaseSequenceMapping.Provider.attach(ctx, m, void 0, true)]; case 2: _b.sent(); _b.label = 3; case 3: _i++; return [3 /*break*/, 1]; case 4: return [2 /*return*/]; } }); }); }, detach: function (data) { if (!data.structure) return; for (var _i = 0, _a = data.structure.models; _i < _a.length; _i++) { var m = _a[_i]; best_database_mapping_1.BestDatabaseSequenceMapping.Provider.ref(m, false); } } } }; //# sourceMappingURL=best-database-mapping.js.map