cif-encoder.ts 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /**
  2. * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author David Sehnal <david.sehnal@gmail.com>
  5. */
  6. import { CifWriter } from '../mol-io/writer/cif';
  7. import * as fs from 'fs';
  8. const category1fields: CifWriter.Field[] = [
  9. CifWriter.Field.str('f1', i => 'v' + i),
  10. CifWriter.Field.int('f2', i => i * i),
  11. CifWriter.Field.float('f3', i => Math.random()),
  12. ];
  13. const category2fields: CifWriter.Field[] = [
  14. CifWriter.Field.str('e1', i => 'v\n' + i),
  15. CifWriter.Field.int('e2', i => i * i),
  16. CifWriter.Field.float('e3', i => Math.random()),
  17. ];
  18. function getCat(name: string): CifWriter.Category {
  19. return {
  20. name,
  21. instance(ctx: { fields: CifWriter.Field[], rowCount: number }) {
  22. return { fields: ctx.fields, source: [{ rowCount: ctx.rowCount }] };
  23. }
  24. };
  25. }
  26. function testText() {
  27. const enc = CifWriter.createEncoder();
  28. const filter: CifWriter.Category.Filter = {
  29. includeCategory(cat) { return true; },
  30. includeField(cat, field) { return !(cat === 'cat2' && field === 'e2'); }
  31. };
  32. enc.startDataBlock('test');
  33. enc.setFilter(filter);
  34. enc.writeCategory(getCat('cat1'), [{ rowCount: 5, fields: category1fields }]);
  35. enc.writeCategory(getCat('cat2'), [{ rowCount: 1, fields: category2fields }]);
  36. console.log(enc.getData());
  37. }
  38. testText();
  39. function testBinary() {
  40. const enc = CifWriter.createEncoder({ binary: true });
  41. const filter: CifWriter.Category.Filter = {
  42. includeCategory(cat) { return true; },
  43. includeField(cat, field) { return !(cat === 'cat2' && field === 'e2'); }
  44. };
  45. enc.startDataBlock('test');
  46. enc.setFilter(filter);
  47. enc.writeCategory(getCat('cat1'), [{ rowCount: 5, fields: category1fields }]);
  48. enc.writeCategory(getCat('cat2'), [{ rowCount: 1, fields: category2fields }]);
  49. enc.encode();
  50. const data = enc.getData() as Uint8Array;
  51. fs.writeFileSync('e:/test/mol-star/test.bcif', Buffer.from(data));
  52. console.log('written binary');
  53. }
  54. testBinary();