Skip to content
Snippets Groups Projects
Commit c91b826f authored by David Sehnal's avatar David Sehnal
Browse files

added pdbx_nonpoly_scheme category to mmCIF schema and export

parent 07ee6646
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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
......
......@@ -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
......@@ -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
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment