From 1aa995dfffd39610c8423395a6ae45fa3812655a Mon Sep 17 00:00:00 2001 From: David Sehnal <david.sehnal@gmail.com> Date: Tue, 31 Oct 2017 10:18:31 +0100 Subject: [PATCH] column map --- src/mol-base/collections/_spec/table.spec.ts | 4 ++++ src/mol-base/collections/column.ts | 10 ++++++++++ src/mol-data/model/properties/macromolecule-tree.ts | 5 +---- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/mol-base/collections/_spec/table.spec.ts b/src/mol-base/collections/_spec/table.spec.ts index dd5243a81..537579793 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 2137da5cf..941e25afc 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 73728868e..f96f45163 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> { } -- GitLab