From 358053327649047096637cdc07d1c7cf08f9e1d6 Mon Sep 17 00:00:00 2001 From: David Sehnal <david.sehnal@gmail.com> Date: Fri, 11 May 2018 10:19:28 +0200 Subject: [PATCH] Wrap Model.create in Task --- src/apps/render-test/state.ts | 3 +- src/apps/render-test/utils/index.ts | 4 +- src/apps/structure-info/model.ts | 3 +- .../structure/model/formats/mmcif.ts | 41 ++++++++++--------- .../structure/structure/structure.ts | 7 +--- src/perf-tests/lookup3d.ts | 2 +- src/perf-tests/structure.ts | 2 +- 7 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/apps/render-test/state.ts b/src/apps/render-test/state.ts index c0e92f901..58f3404e7 100644 --- a/src/apps/render-test/state.ts +++ b/src/apps/render-test/state.ts @@ -178,7 +178,8 @@ export default class State { if (this.spacefillRepr) this.viewer.remove(this.spacefillRepr) if (this.pdbId.length !== 4) return this.loading.next(true) - this.setModel((await getModelFromPdbId(this.pdbId))[0]) + const models = await getModelFromPdbId(this.pdbId); + this.setModel(models[0]) } setVolume(volume: Volume) { diff --git a/src/apps/render-test/utils/index.ts b/src/apps/render-test/utils/index.ts index 54486ffb3..b5eb271c7 100644 --- a/src/apps/render-test/utils/index.ts +++ b/src/apps/render-test/utils/index.ts @@ -29,7 +29,7 @@ export async function parseCif(data: string|Uint8Array) { export async function getModelFromPdbId(pdbid: string) { const cif = await downloadCif(`https://files.rcsb.org/download/${pdbid}.cif`, false) - return Model.create({ kind: 'mmCIF', data: CIF.schema.mmCIF(cif.blocks[0]) }) + return Run(Model.create({ kind: 'mmCIF', data: CIF.schema.mmCIF(cif.blocks[0]) })) } const readFileAsText = (file: File) => { @@ -46,7 +46,7 @@ const readFileAsText = (file: File) => { export async function getModelFromFile(file: File) { const cif = await parseCif(await readFileAsText(file)) - return Model.create({ kind: 'mmCIF', data: CIF.schema.mmCIF(cif.blocks[0]) }) + return Run(Model.create({ kind: 'mmCIF', data: CIF.schema.mmCIF(cif.blocks[0]) })) } export type Volume = { source: DensityServer_Data_Database, volume: VolumeData } diff --git a/src/apps/structure-info/model.ts b/src/apps/structure-info/model.ts index 15ee55fd8..3f7957df8 100644 --- a/src/apps/structure-info/model.ts +++ b/src/apps/structure-info/model.ts @@ -16,6 +16,7 @@ import { OrderedSet } from 'mol-data/int'; import { Table } from 'mol-data/db'; import { mmCIF_Database } from 'mol-io/reader/cif/schema/mmcif'; import { openCif, downloadCif } from './helpers'; +import { Run } from 'mol-task'; async function downloadFromPdb(pdb: string) { @@ -117,7 +118,7 @@ export function printIHMModels(model: Model) { } async function run(mmcif: mmCIF_Database) { - const models = Model.create({ kind: 'mmCIF', data: mmcif }); + const models = await Run(Model.create({ kind: 'mmCIF', data: mmcif })); const structure = Structure.ofModel(models[0]); printSequence(models[0]); printIHMModels(models[0]); diff --git a/src/mol-model/structure/model/formats/mmcif.ts b/src/mol-model/structure/model/formats/mmcif.ts index 3f68d5444..d2a2338f3 100644 --- a/src/mol-model/structure/model/formats/mmcif.ts +++ b/src/mol-model/structure/model/formats/mmcif.ts @@ -21,6 +21,7 @@ import { getIHMCoarse } from './mmcif/ihm'; import { getSequence } from './mmcif/sequence'; import mmCIF_Format = Format.mmCIF +import { Task } from 'mol-task'; function findModelBounds({ data }: mmCIF_Format, startIndex: number) { const num = data.atom_site.pdbx_PDB_model_num; @@ -154,25 +155,27 @@ function createModel(format: mmCIF_Format, bounds: Interval, previous?: Model): }; } -function buildModels(format: mmCIF_Format): ReadonlyArray<Model> { - const atomCount = format.data.atom_site._rowCount; - const isIHM = format.data.ihm_model_list._rowCount > 0; - - if (atomCount === 0) { - return isIHM - ? [createModel(format, Interval.Empty, void 0)] - : []; - } - - const models: Model[] = []; - let modelStart = 0; - while (modelStart < atomCount) { - const bounds = findModelBounds(format, modelStart); - const model = createModel(format, bounds, models.length > 0 ? models[models.length - 1] : void 0); - models.push(model); - modelStart = Interval.end(bounds); - } - return models; +function buildModels(format: mmCIF_Format): Task<ReadonlyArray<Model>> { + return Task.create('Create mmCIF Model', async ctx => { + const atomCount = format.data.atom_site._rowCount; + const isIHM = format.data.ihm_model_list._rowCount > 0; + + if (atomCount === 0) { + return isIHM + ? [createModel(format, Interval.Empty, void 0)] + : []; + } + + const models: Model[] = []; + let modelStart = 0; + while (modelStart < atomCount) { + const bounds = findModelBounds(format, modelStart); + const model = createModel(format, bounds, models.length > 0 ? models[models.length - 1] : void 0); + models.push(model); + modelStart = Interval.end(bounds); + } + return models; + }); } export default buildModels; \ No newline at end of file diff --git a/src/mol-model/structure/structure/structure.ts b/src/mol-model/structure/structure/structure.ts index efe4e8bde..93d7d4b14 100644 --- a/src/mol-model/structure/structure/structure.ts +++ b/src/mol-model/structure/structure/structure.ts @@ -7,7 +7,7 @@ import { IntMap, SortedArray, Iterator } from 'mol-data/int' import { UniqueArray } from 'mol-data/generic' import { SymmetryOperator } from 'mol-math/geometry/symmetry-operator' -import { Model, Format } from '../model' +import { Model } from '../model' import { sortArray, sort, arraySwap, hash1 } from 'mol-data/util'; import Element from './element' import Unit from './unit' @@ -85,11 +85,6 @@ namespace Structure { export function create(units: ReadonlyArray<Unit>): Structure { return new Structure(units); } - export function ofData(format: Format) { - const models = Model.create(format); - return models.map(ofModel); - } - export function ofModel(model: Model): Structure { const chains = model.atomicHierarchy.chainSegments; const builder = new StructureBuilder(); diff --git a/src/perf-tests/lookup3d.ts b/src/perf-tests/lookup3d.ts index 3875a8c13..1245d80d4 100644 --- a/src/perf-tests/lookup3d.ts +++ b/src/perf-tests/lookup3d.ts @@ -34,7 +34,7 @@ export async function readCIF(path: string) { const data = parsed.result.blocks[0]; const mmcif = CIF.schema.mmCIF(data); - const models = Model.create({ kind: 'mmCIF', data: mmcif }); + const models = await Run(Model.create({ kind: 'mmCIF', data: mmcif })); const structures = models.map(Structure.ofModel); return { mmcif, models, structures }; diff --git a/src/perf-tests/structure.ts b/src/perf-tests/structure.ts index 92831adec..e859ff78e 100644 --- a/src/perf-tests/structure.ts +++ b/src/perf-tests/structure.ts @@ -74,7 +74,7 @@ export async function readCIF(path: string) { console.timeEnd('schema') console.time('buildModels') - const models = Model.create({ kind: 'mmCIF', data: mmcif }); + const models = await Run(Model.create({ kind: 'mmCIF', data: mmcif })); console.timeEnd('buildModels') const structures = models.map(Structure.ofModel); -- GitLab