diff --git a/src/mol-base/collections/_spec/table.spec.ts b/src/mol-base/collections/_spec/table.spec.ts index dd5243a817380e8b95e398ea63c15ea9708164b8..537579793d9bcc799abc9443d854ed28f3f7e3aa 100644 --- a/src/mol-base/collections/_spec/table.spec.ts +++ b/src/mol-base/collections/_spec/table.spec.ts @@ -43,6 +43,10 @@ describe('column', () => { it('permutation', () => { expect(Column.permutation(arr, [1, 0, 3, 2]).toArray()).toEqual([2, 1, 4, 3]); }); + + it('map to array', () => { + expect(Column.mapToArray(arrWindow, x => x + 1)).toEqual([3, 4]); + }); }) describe('table', () => { diff --git a/src/mol-base/collections/column.ts b/src/mol-base/collections/column.ts index 2137da5cf9c22d23e71f09209430e7c191c05058..941e25afcc9a390b861d31bdc5744b45817d58c5 100644 --- a/src/mol-base/collections/column.ts +++ b/src/mol-base/collections/column.ts @@ -94,6 +94,10 @@ namespace Column { return createFirstIndexMapOfColumn(column); } + export function mapToArray<T, S>(column: Column<T>, f: (v: T) => S, ctor?: { new(size: number): ArrayLike<number> }): ArrayLike<S> { + return mapToArrayImpl(column, f, ctor || Array); + } + /** Makes the column backned by an array. Useful for columns that accessed often. */ export function asArrayColumn<T>(c: Column<T>, array?: ToArrayParams['array']): Column<T> { if (c['@array']) return c; @@ -257,6 +261,12 @@ function permutationFull<T>(c: Column<T>, map: ArrayLike<number>): Column<T> { }; } +function mapToArrayImpl<T, S>(c: Column<T>, f: (v: T) => S, ctor: { new(size: number): ArrayLike<number> }): ArrayLike<S> { + const ret = new ctor(c.rowCount) as any; + for (let i = 0, _i = c.rowCount; i < _i; i++) ret[i] = f(c.value(i)); + return ret; +} + export namespace ColumnHelpers { export function getArrayBounds(rowCount: number, params?: Column.ToArrayParams) { const start = params && typeof params.start !== 'undefined' ? Math.max(Math.min(params.start, rowCount - 1), 0) : 0; diff --git a/src/mol-data/model/properties/macromolecule-tree.ts b/src/mol-data/model/properties/macromolecule-tree.ts index 73728868eb0acb092fe9c4dc3abb40d6347292d4..f96f45163c77ab93b42d49eb6a03b9c9fa3780ad 100644 --- a/src/mol-data/model/properties/macromolecule-tree.ts +++ b/src/mol-data/model/properties/macromolecule-tree.ts @@ -21,10 +21,7 @@ export const AtomsSchema = { label_alt_id: mmCIF.atom_site.label_alt_id, pdbx_formal_charge: mmCIF.atom_site.pdbx_formal_charge, occupancy: mmCIF.atom_site.occupancy, - B_iso_or_equiv: mmCIF.atom_site.B_iso_or_equiv, - - key: Column.Type.int, - source_row: Column.Type.int, + B_iso_or_equiv: mmCIF.atom_site.B_iso_or_equiv }; export interface Atoms extends Table<typeof AtomsSchema> { }