UNPKG

molstar

Version:

A comprehensive macromolecular library.

63 lines 3.02 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.compileResidueListSelection = void 0; var builder_1 = require("../language/builder"); var base_1 = require("../runtime/query/base"); function entriesToQuery(xs, kind) { var _a; var groups = []; var asym_id_key = kind === 'auth' ? 'auth_asym_id' : 'label_asym_id'; var seq_id_key = kind === 'auth' ? 'auth_seq_id' : 'label_seq_id'; for (var _i = 0, xs_1 = xs; _i < xs_1.length; _i++) { var x = xs_1[_i]; if (x.kind === 'range') { groups.push(builder_1.MolScriptBuilder.struct.generator.atomGroups({ 'chain-test': builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.ammp(asym_id_key), x.asym_id]), 'residue-test': builder_1.MolScriptBuilder.core.rel.inRange([builder_1.MolScriptBuilder.ammp(seq_id_key), x.seq_id_beg, x.seq_id_end]) })); } else { var ins_code = ((_a = x.ins_code) !== null && _a !== void 0 ? _a : '').trim(); groups.push(builder_1.MolScriptBuilder.struct.generator.atomGroups({ 'chain-test': builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.ammp(asym_id_key), x.asym_id]), 'residue-test': builder_1.MolScriptBuilder.core.logic.and([ builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.ammp(seq_id_key), x.seq_id]), builder_1.MolScriptBuilder.core.rel.eq([builder_1.MolScriptBuilder.ammp('pdbx_PDB_ins_code'), ins_code]) ]) })); } } var query = builder_1.MolScriptBuilder.struct.combinator.merge(groups); return base_1.compile(query); } function parseRange(c, s, e) { if (!c || s.length === 0 || Number.isNaN(+s[0])) return; if (Number.isNaN(e)) { return { kind: 'single', asym_id: c, seq_id: +s[0], ins_code: s[1] }; } return { kind: 'range', asym_id: c, seq_id_beg: +s[0], seq_id_end: e }; } function parseInsCode(e) { if (!e) return []; return e.split(':'); } function parseResidueListSelection(input) { return input.split(',') // A 1-3, B 3 => [A 1-3, B 3] .map(function (e) { return e.trim().split(/\s+|[-]/g).filter(function (e) { return !!e; }); }) // [A 1-3, B 3] => [[A, 1, 3], [B, 3]] .map(function (e) { return parseRange(e[0], parseInsCode(e[1]), +e[2]); }) .filter(function (e) { return !!e; }); } // parses a list of residue ranges, e.g. A 10-100, B 30, C 12:i function compileResidueListSelection(input, idType) { var entries = parseResidueListSelection(input); return entriesToQuery(entries, idType); } exports.compileResidueListSelection = compileResidueListSelection; //# sourceMappingURL=residue-list.js.map