-
David Sehnal authoredDavid Sehnal authored
table.ts 2.28 KiB
/**
* Copyright (c) 2018 Mol* contributors, licensed under MIT, See LICENSE file for more info.
*
* @author David Sehnal <david.sehnal@gmail.com>
*/
import { MolScriptSymbolTable as MolScript } from '../../language/symbol-table';
import { DefaultQueryRuntimeTable, QuerySymbolRuntime } from './compiler';
import C = QuerySymbolRuntime.Const
import D = QuerySymbolRuntime.Dynamic
import { Queries, StructureProperties } from 'mol-model/structure';
import { ElementSymbol } from 'mol-model/structure/model/types';
const symbols = [
C(MolScript.core.math.add, (ctx, xs) => {
let ret = 0;
if (typeof xs.length === 'number') {
for (let i = 0, _i = xs.length; i < _i; i++) ret += xs[i](ctx);
} else {
for (const k of Object.keys(xs)) ret += xs[k](ctx);
}
return ret;
}),
// ============= RELATIONAL ================
C(MolScript.core.rel.eq, (ctx, v) => v[0](ctx) === v[1](ctx)),
C(MolScript.core.rel.neq, (ctx, v) => v[0](ctx) !== v[1](ctx)),
C(MolScript.core.rel.lt, (ctx, v) => v[0](ctx) < v[1](ctx)),
C(MolScript.core.rel.lte, (ctx, v) => v[0](ctx) <= v[1](ctx)),
C(MolScript.core.rel.gr, (ctx, v) => v[0](ctx) > v[1](ctx)),
C(MolScript.core.rel.gre, (ctx, v) => v[0](ctx) >= v[1](ctx)),
C(MolScript.core.rel.inRange, (ctx, v) => {
const x = v[0](ctx);
return x >= v[1](ctx) && x <= v[2](ctx);
}),
// ============= TYPES ================
C(MolScript.structureQuery.type.elementSymbol, (ctx, v) => ElementSymbol(v[0](ctx))),
// ============= GENERATORS ================
D(MolScript.structureQuery.generator.atomGroups, (ctx, xs) => Queries.generators.atoms({
entityTest: xs['entity-test'],
chainTest: xs['chain-test'],
residueTest: xs['residue-test'],
atomTest: xs['atom-test'],
groupBy: xs['group-by']
})(ctx)),
// ============= ATOM PROPERTIES ================
D(MolScript.structureQuery.atomProperty.macromolecular.label_comp_id, (ctx, _) => StructureProperties.residue.label_comp_id(ctx.element)),
D(MolScript.structureQuery.atomProperty.core.elementSymbol, (ctx, _) => StructureProperties.atom.type_symbol(ctx.element))
];
(function () {
for (const s of symbols) {
DefaultQueryRuntimeTable.addSymbol(s);
}
})();