UNPKG

molstar

Version:

A comprehensive macromolecular library.

167 lines (166 loc) 6.3 kB
"use strict"; /** * Copyright (c) 2018-2025 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> * @author Lukáš Polák <admin@lukaspolak.cz> */ Object.defineProperty(exports, "__esModule", { value: true }); exports.ResidueChargeColorThemeProvider = exports.ResidueChargeColorThemeParams = exports.ChargedResidueColors = void 0; exports.getResidueChargeColorThemeParams = getResidueChargeColorThemeParams; exports.residueChargeColor = residueChargeColor; exports.ResidueChargeColorTheme = ResidueChargeColorTheme; const color_1 = require("../../mol-util/color/index.js"); const structure_1 = require("../../mol-model/structure.js"); const param_definition_1 = require("../../mol-util/param-definition.js"); const legend_1 = require("../../mol-util/legend.js"); const color_2 = require("../../mol-util/color/color.js"); const params_1 = require("../../mol-util/color/params.js"); const categories_1 = require("./categories.js"); // Colors for charged residues (by-name) exports.ChargedResidueColors = (0, color_1.ColorMap)({ // standard amino acids (charged) 'ARG': 0x0000FF, 'ASP': 0xFF0000, 'GLU': 0xFF0000, 'HIS': 0x33C3F9, 'LYS': 0x0000FF, // standard amino acids (uncharged) 'ALA': 0xFFFFFF, 'ASN': 0xFFFFFF, 'CYS': 0xFFFFFF, 'GLN': 0xFFFFFF, 'GLY': 0xFFFFFF, 'ILE': 0xFFFFFF, 'LEU': 0xFFFFFF, 'MET': 0xFFFFFF, 'PHE': 0xFFFFFF, 'PRO': 0xFFFFFF, 'SER': 0xFFFFFF, 'THR': 0xFFFFFF, 'TRP': 0xFFFFFF, 'TYR': 0xFFFFFF, 'VAL': 0xFFFFFF, // common from CCD 'MSE': 0xFFFFFF, 'SEP': 0xFFFFFF, 'TPO': 0xFFFFFF, 'PTR': 0xFFFFFF, 'PCA': 0xFFFFFF, 'HYP': 0xFFFFFF, // charmm ff 'HSD': 0xFFFFFF, 'HSE': 0xFFFFFF, 'HSP': 0x0000FF, 'LSN': 0xFFFFFF, 'ASPP': 0xFFFFFF, 'GLUP': 0xFFFFFF, // amber ff 'HID': 0xFFFFFF, 'HIE': 0xFFFFFF, 'HIP': 0x0000FF, 'LYN': 0xFFFFFF, 'ASH': 0xFFFFFF, 'GLH': 0xFFFFFF, // rna bases 'A': 0xFFFFFF, 'G': 0xFFFFFF, 'I': 0xFFFFFF, 'C': 0xFFFFFF, 'T': 0xFFFFFF, 'U': 0xFFFFFF, // dna bases 'DA': 0xFFFFFF, 'DG': 0xFFFFFF, 'DI': 0xFFFFFF, 'DC': 0xFFFFFF, 'DT': 0xFFFFFF, 'DU': 0xFFFFFF, // peptide bases 'APN': 0xFFFFFF, 'GPN': 0xFFFFFF, 'CPN': 0xFFFFFF, 'TPN': 0xFFFFFF, }); const DefaultResidueChargeColor = (0, color_1.Color)(0xFF00FF); const Description = 'Assigns a color to every residue based on its charge state.'; exports.ResidueChargeColorThemeParams = { method: param_definition_1.ParamDefinition.MappedStatic('by-name', { 'by-name': param_definition_1.ParamDefinition.Group({ saturation: param_definition_1.ParamDefinition.Numeric(0, { min: -6, max: 6, step: 0.1 }), lightness: param_definition_1.ParamDefinition.Numeric(0, { min: -6, max: 6, step: 0.1 }), colors: param_definition_1.ParamDefinition.MappedStatic('default', { 'default': param_definition_1.ParamDefinition.EmptyGroup(), 'custom': param_definition_1.ParamDefinition.Group((0, params_1.getColorMapParams)(exports.ChargedResidueColors)), }) }, { isFlat: true }) }) }; function getResidueChargeColorThemeParams(ctx) { return param_definition_1.ParamDefinition.clone(exports.ResidueChargeColorThemeParams); } function getAtomicCompId(unit, element) { return unit.model.atomicHierarchy.atoms.label_comp_id.value(element); } function getCoarseCompId(unit, element) { const seqIdBegin = unit.coarseElements.seq_id_begin.value(element); const seqIdEnd = unit.coarseElements.seq_id_end.value(element); if (seqIdBegin === seqIdEnd) { const entityKey = unit.coarseElements.entityKey[element]; const seq = unit.model.sequence.byEntityKey[entityKey].sequence; return seq.compId.value(seqIdBegin - 1); // 1-indexed } } function residueChargeColor(colorMap, residueName) { const c = colorMap[residueName]; return c === undefined ? DefaultResidueChargeColor : c; } function ResidueChargeColorTheme(ctx, props) { const { saturation, lightness, colors } = props.method.params; const colorMap = (0, color_2.getAdjustedColorMap)(props.method.params.colors.name === 'default' ? exports.ChargedResidueColors : colors.params, saturation, lightness); function color(location) { if (structure_1.StructureElement.Location.is(location)) { if (structure_1.Unit.isAtomic(location.unit)) { const compId = getAtomicCompId(location.unit, location.element); return residueChargeColor(colorMap, compId); } else { const compId = getCoarseCompId(location.unit, location.element); if (compId) return residueChargeColor(colorMap, compId); } } else if (structure_1.Bond.isLocation(location)) { if (structure_1.Unit.isAtomic(location.aUnit)) { const compId = getAtomicCompId(location.aUnit, location.aUnit.elements[location.aIndex]); return residueChargeColor(colorMap, compId); } else { const compId = getCoarseCompId(location.aUnit, location.aUnit.elements[location.aIndex]); if (compId) return residueChargeColor(colorMap, compId); } } return DefaultResidueChargeColor; } return { factory: ResidueChargeColorTheme, granularity: 'group', preferSmoothing: true, color, props, description: Description, legend: (0, legend_1.TableLegend)(Object.keys(colorMap).map(name => { return [name, colorMap[name]]; }).concat([['Unknown', DefaultResidueChargeColor]])) }; } exports.ResidueChargeColorThemeProvider = { name: 'residue-charge', label: 'Residue Charge', category: categories_1.ColorThemeCategory.Residue, factory: ResidueChargeColorTheme, getParams: getResidueChargeColorThemeParams, defaultValues: param_definition_1.ParamDefinition.getDefaultValues(exports.ResidueChargeColorThemeParams), isApplicable: (ctx) => !!ctx.structure };