UNPKG

molstar

Version:

A comprehensive macromolecular library.

73 lines 2.74 kB
"use strict"; /** * Copyright (c) 2018 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.intersect = exports.merge = void 0; var selection_1 = require("../selection"); var generators_1 = require("./generators"); var generic_1 = require("../../../../mol-data/generic"); var structure_1 = require("../../structure"); function merge(queries) { if (queries.length === 0) { return generators_1.none; } else if (queries.length === 1) { return queries[0]; } return function (ctx) { var ret = selection_1.StructureSelection.UniqueBuilder(ctx.inputStructure); var _loop_1 = function (i) { selection_1.StructureSelection.forEach(queries[i](ctx), function (s, j) { ret.add(s); if (i % 100) ctx.throwIfTimedOut(); }); }; for (var i = 0; i < queries.length; i++) { _loop_1(i); } return ret.getSelection(); }; } exports.merge = merge; function intersect(queries) { if (queries.length === 0) { return generators_1.none; } else if (queries.length === 1) { return queries[0]; } return function (ctx) { var selections = []; for (var i = 0; i < queries.length; i++) selections.push(queries[i](ctx)); var pivotIndex = 0, pivotLength = selection_1.StructureSelection.structureCount(selections[0]); for (var i = 1; i < selections.length; i++) { var len = selection_1.StructureSelection.structureCount(selections[i]); if (len < pivotLength) { pivotIndex = i; pivotLength = len; } } ctx.throwIfTimedOut(); var pivotSet = (0, generic_1.HashSet)(function (s) { return s.hashCode; }, structure_1.Structure.areUnitIdsAndIndicesEqual); selection_1.StructureSelection.forEach(selections[pivotIndex], function (s) { return pivotSet.add(s); }); var ret = selection_1.StructureSelection.UniqueBuilder(ctx.inputStructure); for (var pI = 0; pI < selections.length; pI++) { if (pI === pivotIndex) continue; selection_1.StructureSelection.forEach(selections[pI], function (s) { if (pivotSet.has(s)) ret.add(s); }); ctx.throwIfTimedOut(); } return ret.getSelection(); }; } exports.intersect = intersect; // TODO: distanceCluster //# sourceMappingURL=combinators.js.map