molstar
Version:
A comprehensive macromolecular library.
73 lines • 2.74 kB
JavaScript
/**
* 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
;