diff --git a/src/mol-io/reader/3dg/parser.ts b/src/mol-io/reader/3dg/parser.ts deleted file mode 100644 index 1fc7b6a36b2aa1eb428a38015fcab3f48ad723ce..0000000000000000000000000000000000000000 --- a/src/mol-io/reader/3dg/parser.ts +++ /dev/null @@ -1,57 +0,0 @@ -/** - * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. - * - * @author Alexander Rose <alexander.rose@weirdbyte.de> - */ - -import { ReaderResult as Result } from '../result'; -import { Task } from '../../../mol-task'; -import { parseCsv } from '../csv/parser'; -import { Column, Table } from '../../../mol-data/db'; -import { toTable } from '../cif/schema'; - -import Schema = Column.Schema -import { CsvTable } from '../csv/data-model'; - - -export const Schema3DG = { - /** Chromosome name */ - chromosome: Schema.str, - /** Base position */ - position: Schema.int, - /** X coordinate */ - x: Schema.float, - /** Y coordinate */ - y: Schema.float, - /** Z coordinate */ - z: Schema.float, -}; -export type Schema3DG = typeof Schema3DG - -export interface File3DG { - table: Table<Schema3DG> -} - -const FieldNames = [ 'chromosome', 'position', 'x', 'y', 'z' ]; - -function categoryFromTable(name: string, table: CsvTable) { - return { - name, - rowCount: table.rowCount, - fieldNames: FieldNames, - getField: (name: string) => { - return table.getColumn(FieldNames.indexOf(name).toString()); - } - }; -} - -export function parse3DG(data: string) { - return Task.create<Result<File3DG>>('Parse 3DG', async ctx => { - const opts = { quote: '', comment: '#', delimiter: '\t', noColumnNames: true }; - const csvFile = await parseCsv(data, opts).runInContext(ctx); - if (csvFile.isError) return Result.error(csvFile.message, csvFile.line); - const category = categoryFromTable('3dg', csvFile.result.table); - const table = toTable(Schema3DG, category); - return Result.success({ table }); - }); -} \ No newline at end of file diff --git a/src/mol-io/reader/_spec/3dg.spec.ts b/src/mol-io/reader/_spec/3dg.spec.ts deleted file mode 100644 index 25f4dd4d6bd72261d34f018bdf53c8de8ff9773a..0000000000000000000000000000000000000000 --- a/src/mol-io/reader/_spec/3dg.spec.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) 2019 mol* contributors, licensed under MIT, See LICENSE file for more info. - * - * @author Alexander Rose <alexander.rose@weirdbyte.de> - */ - -import { parse3DG } from '../3dg/parser'; - -const basic3dgString = `1(mat) 1420000 0.791377837067 10.9947291355 -13.1882897693 -1(mat) 1440000 -0.268241283699 10.5200875887 -13.0896257278 -1(mat) 1460000 -1.3853075236 10.5513787498 -13.1440142173 -1(mat) 1480000 -1.55984101733 11.4340829129 -13.6026301209 -1(mat) 1500000 -0.770991778399 11.4758488546 -14.5881137222 -1(mat) 1520000 -0.0848245107875 12.2624690808 -14.354289628 -1(mat) 1540000 -0.458643807046 12.5985791771 -13.4701149287 -1(mat) 1560000 -0.810322906201 12.2461643989 -12.3172933413 -1(mat) 1580000 -2.08211172035 12.8886838656 -12.8742007778 -1(mat) 1600000 -3.52093948201 13.1850935438 -12.4118684428`; - -describe('3dg reader', () => { - it('basic', async () => { - const parsed = await parse3DG(basic3dgString).run(); - expect(parsed.isError).toBe(false); - - if (parsed.isError) return; - const { chromosome, position, x, y, z } = parsed.result.table; - expect(chromosome.value(0)).toBe('1(mat)'); - expect(position.value(1)).toBe(1440000); - expect(x.value(5)).toBe(-0.0848245107875); - expect(y.value(5)).toBe(12.2624690808); - expect(z.value(5)).toBe(-14.354289628); - }); -}); \ No newline at end of file diff --git a/src/mol-model-formats/structure/3dg.ts b/src/mol-model-formats/structure/3dg.ts deleted file mode 100644 index 18aeab4730f8c4897a90049795fc5136a81784f7..0000000000000000000000000000000000000000 --- a/src/mol-model-formats/structure/3dg.ts +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Copyright (c) 2019-2020 mol* contributors, licensed under MIT, See LICENSE file for more info. - * - * @author Alexander Rose <alexander.rose@weirdbyte.de> - */ - -import { Task } from '../../mol-task'; -import { ModelFormat } from '../format'; -import { Column, Table } from '../../mol-data/db'; -import { EntityBuilder } from './common/entity'; -import { File3DG } from '../../mol-io/reader/3dg/parser'; -import { fillSerial } from '../../mol-util/array'; -import { MoleculeType } from '../../mol-model/structure/model/types'; -import { BasicSchema, createBasic } from './basic/schema'; -import { createModels } from './basic/parser'; -import { Trajectory } from '../../mol-model/structure'; - -function getBasic(table: File3DG['table']) { - const entityIds = new Array<string>(table._rowCount); - const entityBuilder = new EntityBuilder(); - - const seqIdStarts = table.position.toArray({ array: Uint32Array }); - const seqIdEnds = new Uint32Array(table._rowCount); - const stride = seqIdStarts[1] - seqIdStarts[0]; - - const objectRadius = stride / 3500; - - for (let i = 0, il = table._rowCount; i < il; ++i) { - const chr = table.chromosome.value(i); - const entityId = entityBuilder.getEntityId(chr, MoleculeType.DNA, chr); - entityIds[i] = entityId; - seqIdEnds[i] = seqIdStarts[i] + stride - 1; - } - - const ihm_sphere_obj_site = Table.ofPartialColumns(BasicSchema.ihm_sphere_obj_site, { - id: Column.ofIntArray(fillSerial(new Uint32Array(table._rowCount))), - entity_id: Column.ofStringArray(entityIds), - seq_id_begin: Column.ofIntArray(seqIdStarts), - seq_id_end: Column.ofIntArray(seqIdEnds), - asym_id: table.chromosome, - - Cartn_x: Column.ofFloatArray(Column.mapToArray(table.x, x => x * 10, Float32Array)), - Cartn_y: Column.ofFloatArray(Column.mapToArray(table.y, y => y * 10, Float32Array)), - Cartn_z: Column.ofFloatArray(Column.mapToArray(table.z, z => z * 10, Float32Array)), - - object_radius: Column.ofConst(objectRadius, table._rowCount, Column.Schema.float), - rmsf: Column.ofConst(0, table._rowCount, Column.Schema.float), - model_id: Column.ofConst(1, table._rowCount, Column.Schema.int), - }, table._rowCount); - - return createBasic({ - entity: entityBuilder.getEntityTable(), - ihm_model_list: Table.ofPartialColumns(BasicSchema.ihm_model_list, { - model_id: Column.ofIntArray([1]), - model_name: Column.ofStringArray(['3DG Model']), - }, 1), - ihm_sphere_obj_site - }); -} - -// - -export { Format3dg }; - -type Format3dg = ModelFormat<File3DG> - -namespace Format3dg { - export function is(x: ModelFormat): x is Format3dg { - return x.kind === '3dg'; - } - - export function from3dg(file3dg: File3DG): Format3dg { - return { kind: '3dg', name: '3DG', data: file3dg }; - } -} - -export function trajectoryFrom3DG(file3dg: File3DG): Task<Trajectory> { - return Task.create('Parse 3DG', async ctx => { - const format = Format3dg.from3dg(file3dg); - const basic = getBasic(file3dg.table); - return createModels(basic, format, ctx); - }); -} diff --git a/src/mol-plugin-state/formats/trajectory.ts b/src/mol-plugin-state/formats/trajectory.ts index bfeddf182f650e060944be6eefb68a6c3e066716..b0494f01b5c7eeafd0c9c7620c4c58bbad4b332a 100644 --- a/src/mol-plugin-state/formats/trajectory.ts +++ b/src/mol-plugin-state/formats/trajectory.ts @@ -113,15 +113,6 @@ export const GroProvider: TrajectoryFormatProvider = { visuals: defaultVisuals }; -export const Provider3dg: TrajectoryFormatProvider = { - label: '3DG', - description: '3DG', - category: TrajectoryFormatCategory, - stringExtensions: ['3dg'], - parse: directTrajectory(StateTransforms.Model.TrajectoryFrom3DG), - visuals: defaultVisuals -}; - export const MolProvider: TrajectoryFormatProvider = { label: 'MOL/SDF', description: 'MOL/SDF', @@ -146,7 +137,6 @@ export const BuiltInTrajectoryFormats = [ ['pdb', PdbProvider] as const, ['pdbqt', PdbqtProvider] as const, ['gro', GroProvider] as const, - ['3dg', Provider3dg] as const, ['mol', MolProvider] as const, ['mol2', Mol2Provider] as const, ] as const; diff --git a/src/mol-plugin-state/objects.ts b/src/mol-plugin-state/objects.ts index 9c3fade63ea32e43f608e5554635389ba94f0f99..403fa9669755c33dd187aa44dc32de8f8f64e82d 100644 --- a/src/mol-plugin-state/objects.ts +++ b/src/mol-plugin-state/objects.ts @@ -5,7 +5,6 @@ * @author Alexander Rose <alexander.rose@weirdbyte.de> */ -import { File3DG } from '../mol-io/reader/3dg/parser'; import { Ccp4File } from '../mol-io/reader/ccp4/schema'; import { CifFile } from '../mol-io/reader/cif'; import { DcdFile } from '../mol-io/reader/dcd/parser'; @@ -83,7 +82,6 @@ export namespace PluginStateObject { { kind: 'cif', data: CifFile } | { kind: 'pdb', data: CifFile } | { kind: 'gro', data: CifFile } | - { kind: '3dg', data: File3DG } | { kind: 'dcd', data: DcdFile } | { kind: 'ccp4', data: Ccp4File } | { kind: 'dsn6', data: Dsn6File } | diff --git a/src/mol-plugin-state/transforms/model.ts b/src/mol-plugin-state/transforms/model.ts index 31bcef917f3a7fa3d432a131323e0411669d4085..a40cd78e5f676953cf9169d2cf2abecb213d153b 100644 --- a/src/mol-plugin-state/transforms/model.ts +++ b/src/mol-plugin-state/transforms/model.ts @@ -5,13 +5,11 @@ * @author Alexander Rose <alexander.rose@weirdbyte.de> */ -import { parse3DG } from '../../mol-io/reader/3dg/parser'; import { parseDcd } from '../../mol-io/reader/dcd/parser'; import { parseGRO } from '../../mol-io/reader/gro/parser'; import { parsePDB } from '../../mol-io/reader/pdb/parser'; import { Mat4, Vec3 } from '../../mol-math/linear-algebra'; import { shapeFromPly } from '../../mol-model-formats/shape/ply'; -import { trajectoryFrom3DG } from '../../mol-model-formats/structure/3dg'; import { coordinatesFromDcd } from '../../mol-model-formats/structure/dcd'; import { trajectoryFromGRO } from '../../mol-model-formats/structure/gro'; import { trajectoryFromMmCIF } from '../../mol-model-formats/structure/mmcif'; @@ -52,7 +50,6 @@ export { TrajectoryFromMOL }; export { TrajectoryFromMOL2 }; export { TrajectoryFromCube }; export { TrajectoryFromCifCore }; -export { TrajectoryFrom3DG }; export { ModelFromTrajectory }; export { StructureFromTrajectory }; export { StructureFromModel }; @@ -339,24 +336,6 @@ const TrajectoryFromCifCore = PluginStateTransform.BuiltIn({ } }); -type TrajectoryFrom3DG = typeof TrajectoryFrom3DG -const TrajectoryFrom3DG = PluginStateTransform.BuiltIn({ - name: 'trajectory-from-3dg', - display: { name: 'Parse 3DG', description: 'Parse 3DG string and create trajectory.' }, - from: [SO.Data.String], - to: SO.Molecule.Trajectory -})({ - apply({ a }) { - return Task.create('Parse 3DG', async ctx => { - const parsed = await parse3DG(a.data).runInContext(ctx); - if (parsed.isError) throw new Error(parsed.message); - const models = await trajectoryFrom3DG(parsed.result).runInContext(ctx); - const props = trajectoryProps(models); - return new SO.Molecule.Trajectory(models, props); - }); - } -}); - const plus1 = (v: number) => v + 1, minus1 = (v: number) => v - 1; type ModelFromTrajectory = typeof ModelFromTrajectory const ModelFromTrajectory = PluginStateTransform.BuiltIn({