From c91b826f245e1126bbd612918a9852311f76a1bc Mon Sep 17 00:00:00 2001 From: David Sehnal <david.sehnal@gmail.com> Date: Thu, 11 Oct 2018 15:06:10 +0200 Subject: [PATCH] added pdbx_nonpoly_scheme category to mmCIF schema and export --- data/mmcif-field-names.csv | 11 +++++++++++ src/mol-io/reader/cif/schema/mmcif.ts | 12 ++++++++++++ .../structure/export/categories/misc.ts | 10 ++++++++++ .../structure/export/categories/utils.ts | 17 +++++++++++++++++ src/mol-model/structure/export/mmcif.ts | 18 +++--------------- 5 files changed, 53 insertions(+), 15 deletions(-) diff --git a/data/mmcif-field-names.csv b/data/mmcif-field-names.csv index 45602d31e..fba153c63 100644 --- a/data/mmcif-field-names.csv +++ b/data/mmcif-field-names.csv @@ -123,6 +123,17 @@ pdbx_entity_descriptor.type pdbx_entity_descriptor.program pdbx_entity_descriptor.program_version +pdbx_nonpoly_scheme.asym_id +pdbx_nonpoly_scheme.entity_id +pdbx_nonpoly_scheme.mon_id +pdbx_nonpoly_scheme.ndb_seq_num +pdbx_nonpoly_scheme.pdb_seq_num +pdbx_nonpoly_scheme.auth_seq_num +pdbx_nonpoly_scheme.pdb_mon_id +pdbx_nonpoly_scheme.auth_mon_id +pdbx_nonpoly_scheme.pdb_strand_id +pdbx_nonpoly_scheme.pdb_ins_code + entry.id exptl.entry_id diff --git a/src/mol-io/reader/cif/schema/mmcif.ts b/src/mol-io/reader/cif/schema/mmcif.ts index b0799e894..d2565a478 100644 --- a/src/mol-io/reader/cif/schema/mmcif.ts +++ b/src/mol-io/reader/cif/schema/mmcif.ts @@ -1950,6 +1950,18 @@ export const mmCIF_Schema = { */ ordinal: int, }, + pdbx_nonpoly_scheme: { + asym_id: str, + entity_id: str, + mon_id: str, + ndb_seq_num: int, + pdb_seq_num: int, + auth_seq_num: int, + pdb_mon_id: str, + auth_mon_id: str, + pdb_strand_id: str, + pdb_ins_code: str + }, /** * Data items in the IHM_STARTING_MODEL_DETAILS category records the * details about structural models used as starting inputs in diff --git a/src/mol-model/structure/export/categories/misc.ts b/src/mol-model/structure/export/categories/misc.ts index 39d3d40f2..bd4772a45 100644 --- a/src/mol-model/structure/export/categories/misc.ts +++ b/src/mol-model/structure/export/categories/misc.ts @@ -32,4 +32,14 @@ export const _pdbx_chem_comp_identifier: CifCategory<CifExportContext> = { const indices = Column.indicesOf(comp_id, id => names.has(id)); return CifCategory.ofTable(pdbx_chem_comp_identifier, indices); } +} + +export const _pdbx_nonpoly_scheme: CifCategory<CifExportContext> = { + name: 'pdbx_nonpoly_scheme', + instance({ firstModel, structures, cache }) { + const pdbx_nonpoly_scheme = getModelMmCifCategory(firstModel, 'pdbx_nonpoly_scheme'); + if (!pdbx_nonpoly_scheme) return CifCategory.Empty; + // TODO: filter? + return CifCategory.ofTable(pdbx_nonpoly_scheme); + } } \ No newline at end of file diff --git a/src/mol-model/structure/export/categories/utils.ts b/src/mol-model/structure/export/categories/utils.ts index be0276c94..d33f72fac 100644 --- a/src/mol-model/structure/export/categories/utils.ts +++ b/src/mol-model/structure/export/categories/utils.ts @@ -11,6 +11,8 @@ import { Structure } from '../../structure'; import { EntityIndex } from '../../model/indexing'; import { UniqueArray } from 'mol-data/generic'; import { sortArray } from 'mol-data/util'; +import { CifWriter } from 'mol-io/writer/cif'; +import { CifExportContext } from '../mmcif'; export function getModelMmCifCategory<K extends keyof mmCIF_Schema>(model: Model, name: K): mmCIF_Database[K] | undefined { if (model.sourceData.kind !== 'mmCIF') return; @@ -39,4 +41,19 @@ export function getUniqueEntityIndicesFromStructures(structures: Structure[]): R } sortArray(ret.array); return ret.array; +} + +export function copy_mmCif_category(name: keyof mmCIF_Schema, condition?: (model: Model) => boolean): CifWriter.Category<CifExportContext> { + return { + name, + instance({ structures }) { + const model = structures[0].model; + if (model.sourceData.kind !== 'mmCIF') return CifWriter.Category.Empty; + if (condition && !condition(model)) return CifWriter.Category.Empty; + + const table = model.sourceData.data[name]; + if (!table || !table._rowCount) return CifWriter.Category.Empty; + return CifWriter.Category.ofTable(table); + } + }; } \ No newline at end of file diff --git a/src/mol-model/structure/export/mmcif.ts b/src/mol-model/structure/export/mmcif.ts index 40dd6985c..5ed7dd4a4 100644 --- a/src/mol-model/structure/export/mmcif.ts +++ b/src/mol-model/structure/export/mmcif.ts @@ -12,9 +12,9 @@ import { _atom_site } from './categories/atom_site'; import CifCategory = CifWriter.Category import { _struct_conf, _struct_sheet_range } from './categories/secondary-structure'; import { _pdbx_struct_mod_residue } from './categories/modified-residues'; -import { _chem_comp, _pdbx_chem_comp_identifier } from './categories/misc'; +import { _chem_comp, _pdbx_chem_comp_identifier, _pdbx_nonpoly_scheme } from './categories/misc'; import { Model } from '../model'; -import { getUniqueEntityIndicesFromStructures } from './categories/utils'; +import { getUniqueEntityIndicesFromStructures, copy_mmCif_category } from './categories/utils'; import { _struct_asym, _entity_poly, _entity_poly_seq } from './categories/sequence'; import { ModelPropertyDescriptor } from '../model/properties/custom'; @@ -35,19 +35,6 @@ export namespace CifExportContext { } } -function copy_mmCif_category(name: keyof mmCIF_Schema): CifCategory<CifExportContext> { - return { - name, - instance({ structures }) { - const model = structures[0].model; - if (model.sourceData.kind !== 'mmCIF') return CifCategory.Empty; - const table = model.sourceData.data[name]; - if (!table || !table._rowCount) return CifCategory.Empty; - return CifCategory.ofTable(table); - } - }; -} - const _entity: CifCategory<CifExportContext> = { name: 'entity', instance({ structures }) { @@ -91,6 +78,7 @@ const Categories = [ _pdbx_chem_comp_identifier, copy_mmCif_category('atom_sites'), + _pdbx_nonpoly_scheme, _pdbx_struct_mod_residue, // Atoms -- GitLab