index-pair.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. * Copyright (c) 2019-2020 Mol* contributors, licensed under MIT, See LICENSE file for more info.
  3. *
  4. * @author Alexander Rose <alexander.rose@weirdbyte.de>
  5. */
  6. import { CustomPropertyDescriptor } from '../../../../mol-model/structure';
  7. import { IntAdjacencyGraph } from '../../../../mol-math/graph';
  8. import { Column } from '../../../../mol-data/db';
  9. import { FormatPropertyProvider } from '../../common/property';
  10. export type IndexPairBonds = IntAdjacencyGraph<number, { readonly order: ArrayLike<number> }>
  11. function getGraph(indexA: ArrayLike<number>, indexB: ArrayLike<number>, _order: ArrayLike<number>, count: number): IndexPairBonds {
  12. const builder = new IntAdjacencyGraph.EdgeBuilder(count, indexA, indexB);
  13. const order = new Int8Array(builder.slotCount);
  14. for (let i = 0, _i = builder.edgeCount; i < _i; i++) {
  15. builder.addNextEdge();
  16. builder.assignProperty(order, _order[i]);
  17. }
  18. return builder.createGraph({ order });
  19. }
  20. export namespace IndexPairBonds {
  21. export const Descriptor: CustomPropertyDescriptor = {
  22. name: 'index_pair_bonds',
  23. }
  24. export const Provider = FormatPropertyProvider.create<IndexPairBonds>(Descriptor)
  25. export type Data = {
  26. pairs: {
  27. indexA: Column<number>,
  28. indexB: Column<number>
  29. order: Column<number>
  30. },
  31. count: number
  32. }
  33. export function fromData(data: Data) {
  34. const { pairs, count } = data
  35. const indexA = pairs.indexA.toArray()
  36. const indexB = pairs.indexB.toArray()
  37. const order = pairs.order.toArray()
  38. return getGraph(indexA, indexB, order, count);
  39. }
  40. }