mol-script.ts 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { MolScriptBuilder } from 'mol-script/language/builder';
  2. import { compile, QuerySymbolRuntime, DefaultQueryRuntimeTable } from 'mol-script/runtime/query/compiler';
  3. import { QueryContext, Structure, StructureQuery, ModelPropertyDescriptor } from 'mol-model/structure';
  4. import { readCifFile, getModelsAndStructure } from '../apps/structure-info/model';
  5. import { CustomPropSymbol } from 'mol-script/language/symbol';
  6. import Type from 'mol-script/language/type';
  7. import { parseMolScript } from 'mol-script/language/parser';
  8. import * as util from 'util'
  9. import { transpileMolScript } from 'mol-script/script/mol-script/symbols';
  10. import { formatMolScript } from 'mol-script/language/expression-formatter';
  11. // import Examples from 'mol-script/script/mol-script/examples'
  12. // import { parseMolScript } from 'mol-script/script/mol-script/parser'
  13. // //import { compileAST } from 'mol-script/script/mol-script/compile';
  14. // for (const e of Examples) {
  15. // const expr = parseMolScript(e.value)[0];
  16. // console.log(e.name, util.inspect(expr, true, 10, true));
  17. // }
  18. // const exprs = parseMolScript(`(sel.atom.atom-groups
  19. // :residue-test (= atom.auth_comp_id ALA)
  20. // ;; ho ho ho
  21. // :atom-test (set.has { _C _N } atom.el)) ; comm
  22. // ;; this is a comment
  23. // ((hi) (ho))`);
  24. const exprs = parseMolScript(`(sel.atom.atom-groups
  25. :residue-test (= atom.label_comp_id REA)
  26. :atom-test (= atom.el _C))`);
  27. const tsp = transpileMolScript(exprs[0]);
  28. //console.log(util.inspect(exprs, true, 10, true));
  29. console.log(util.inspect(tsp, true, 10, true));
  30. console.log(formatMolScript);
  31. console.log(formatMolScript(tsp));
  32. // //console.log(expr);
  33. const expr = MolScriptBuilder.core.math.add([1, 2, 3]);
  34. const compiled = compile<number>(expr);
  35. const result = compiled(new QueryContext(Structure.Empty));
  36. console.log(result);
  37. const CustomProp = ModelPropertyDescriptor({
  38. name: 'test_prop',
  39. isStatic: true,
  40. cifExport: { prefix: '', categories: [ ]},
  41. symbols: {
  42. residueIndex: QuerySymbolRuntime.Dynamic(CustomPropSymbol('custom.test-prop', 'residue-index', Type.Num), ctx => {
  43. const e = ctx.element;
  44. //console.log(e.element, e.unit.model.atomicHierarchy.residueAtomSegments.index[e.element])
  45. return e.unit.model.atomicHierarchy.residueAtomSegments.index[e.element];
  46. })
  47. }
  48. });
  49. DefaultQueryRuntimeTable.addCustomProp(CustomProp);
  50. export async function testQ() {
  51. const frame = await readCifFile('e:/test/quick/1cbs_updated.cif');
  52. const { structure } = await getModelsAndStructure(frame);
  53. let expr = MolScriptBuilder.struct.generator.atomGroups({
  54. 'atom-test': MolScriptBuilder.core.rel.eq([
  55. MolScriptBuilder.struct.atomProperty.core.elementSymbol(),
  56. MolScriptBuilder.es('C')
  57. ]),
  58. // 'residue-test': MolScriptBuilder.core.rel.eq([
  59. // MolScriptBuilder.struct.atomProperty.macromolecular.label_comp_id(),
  60. // 'REA'
  61. // ])
  62. 'residue-test': MolScriptBuilder.core.rel.inRange([CustomProp.symbols.residueIndex.symbol(), 1, 5])
  63. });
  64. expr = tsp;
  65. const compiled = compile<StructureQuery>(expr);
  66. const result = compiled(new QueryContext(structure));
  67. console.log(result);
  68. }
  69. testQ();