From 01a69004f45cf7fc2007bf6c941fa49e62846306 Mon Sep 17 00:00:00 2001 From: Alexander Rose <alex.rose@rcsb.org> Date: Thu, 16 Aug 2018 14:35:27 -0700 Subject: [PATCH] added description from dictionary to mmcif schema --- .../schema-generator/generate-typescript.ts | 39 - .../schema-generator/schema-from-mmcif-dic.ts | 2 +- src/apps/schema-generator/util/cif-dic.ts | 77 +- src/apps/schema-generator/util/generate.ts | 69 +- src/apps/schema-generator/util/json-schema.ts | 74 - src/apps/schema-generator/util/schema.ts | 70 + src/apps/schema-generator/util/validate.ts | 95 - src/apps/schema-generator/validate-schema.ts | 29 - src/mol-io/reader/cif/schema/mmcif.ts | 2594 ++++++++++++++++- .../structure/model/formats/mmcif/atomic.ts | 2 +- src/mol-util/index.ts | 5 + 11 files changed, 2744 insertions(+), 312 deletions(-) delete mode 100644 src/apps/schema-generator/generate-typescript.ts delete mode 100644 src/apps/schema-generator/util/json-schema.ts create mode 100644 src/apps/schema-generator/util/schema.ts delete mode 100644 src/apps/schema-generator/util/validate.ts delete mode 100644 src/apps/schema-generator/validate-schema.ts diff --git a/src/apps/schema-generator/generate-typescript.ts b/src/apps/schema-generator/generate-typescript.ts deleted file mode 100644 index fc0a4bd97..000000000 --- a/src/apps/schema-generator/generate-typescript.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info. - * - * @author Alexander Rose <alexander.rose@weirdbyte.de> - */ - -import * as argparse from 'argparse' -import * as fs from 'fs' - -import { generate } from './util/generate' - -function generateSchema (name: string, path: string) { - const str = fs.readFileSync(path, 'utf8') - return generate(name, '', JSON.parse(str)) -} - -const parser = new argparse.ArgumentParser({ - addHelp: true, - description: 'Argparse example' -}); -parser.addArgument([ 'name' ], { - help: 'schema name' -}); -parser.addArgument([ 'path' ], { - help: 'json schema file path' -}); -parser.addArgument([ '--out', '-o' ], { - help: 'generated typescript output path' -}); -const args = parser.parseArgs(); - -if (args.name && args.path) { - const schema = generateSchema(args.name, args.path) - if (args.out) { - fs.writeFileSync(args.out, schema) - } else { - console.log(schema) - } -} diff --git a/src/apps/schema-generator/schema-from-mmcif-dic.ts b/src/apps/schema-generator/schema-from-mmcif-dic.ts index 3d6fc0e4b..72dd804af 100644 --- a/src/apps/schema-generator/schema-from-mmcif-dic.ts +++ b/src/apps/schema-generator/schema-from-mmcif-dic.ts @@ -13,7 +13,7 @@ import Csv from 'mol-io/reader/csv/parser' import CIF, { CifFrame } from 'mol-io/reader/cif' import { generateSchema } from './util/cif-dic' import { generate } from './util/generate' -import { Filter } from './util/json-schema' +import { Filter } from './util/schema' async function runGenerateSchema(name: string, fieldNamesPath?: string, typescript = false, out?: string) { await ensureMmcifDicAvailable() diff --git a/src/apps/schema-generator/util/cif-dic.ts b/src/apps/schema-generator/util/cif-dic.ts index bd48670c4..6036c7c82 100644 --- a/src/apps/schema-generator/util/cif-dic.ts +++ b/src/apps/schema-generator/util/cif-dic.ts @@ -4,11 +4,11 @@ * @author Alexander Rose <alexander.rose@weirdbyte.de> */ -import { Database, ValueColumn, ListColumn } from './json-schema' +import { Database, Column, EnumCol, StrCol, IntCol, ListCol, FloatCol, CoordCol, MatrixCol, VectorCol } from './schema' import * as Data from 'mol-io/reader/cif/data-model' import { CifFrame } from 'mol-io/reader/cif/data-model'; -export function getFieldType (type: string, values?: string[]): ValueColumn|ListColumn { +export function getFieldType (type: string, description: string, values?: string[]): Column { switch (type) { case 'code': case 'ucode': @@ -19,11 +19,7 @@ export function getFieldType (type: string, values?: string[]): ValueColumn|List case 'uchar3': case 'uchar1': case 'boolean': - if (values && values.length) { - return { enum: [ 'str', values ] } - } else { - return 'str' - } + return values && values.length ? EnumCol(values, 'str', description) : StrCol(description) case 'aliasname': case 'name': case 'idname': @@ -56,24 +52,20 @@ export function getFieldType (type: string, values?: string[]): ValueColumn|List case 'date_dep': case 'url': case 'symop': - return 'str' + return StrCol(description) case 'int': case 'non_negative_int': case 'positive_int': - if (values && values.length) { - return { enum: [ 'int', values ] } - } else { - return 'int' - } + return values && values.length ? EnumCol(values, 'int', description) : IntCol(description) case 'float': - return 'float' + return FloatCol(description) case 'ec-type': case 'ucode-alphanum-csv': case 'id_list': - return { list: [ 'str', ',' ] } + return ListCol('str', ',', description) } console.log(`unknown type '${type}'`) - return 'str' + return StrCol(description) } type FrameCategories = { [category: string]: Data.CifFrame } @@ -135,6 +127,19 @@ function getSubCategory (d: Data.CifFrame, ctx: FrameData): string|undefined { } } +function getDescription (d: Data.CifFrame, ctx: FrameData): string|undefined { + const value = getField('item_description', 'description', d, ctx) + if (value) { + return value.str(0).trim() + .replace(/(\r\n|\r|\n)([ \t]+)/g, '\n') + .replace(/(\[[1-3]\])+ element/, 'elements') + .replace(/(\[[1-3]\])+/, '') + } +} + +const reMatrixField = /\[[1-3]\]\[[1-3]\]/ +const reVectorField = /\[[1-3]\]/ + const FORCE_INT_FIELDS = [ '_atom_site.id', '_atom_site.auth_seq_id', @@ -190,6 +195,7 @@ export function generateSchema (frames: CifFrame[]) { const links: FrameLinks = {} const ctx = { categories, links } + // build list of links between categories frames.forEach(d => { if (d.header[0] !== '_') return categories[d.header] = d @@ -213,12 +219,12 @@ export function generateSchema (frames: CifFrame[]) { Object.keys(categories).forEach(fullName => { const d = categories[fullName] if (!d) { - console.log('foo', fullName) + console.log(`${fullName} not found, moving on`) return } const categoryName = d.header.substring(1, d.header.indexOf('.')) const itemName = d.header.substring(d.header.indexOf('.') + 1) - let fields + let fields: { [k: string]: Column } if (categoryName in schema) { fields = schema[categoryName] } else { @@ -226,38 +232,41 @@ export function generateSchema (frames: CifFrame[]) { schema[categoryName] = fields } + const description = getDescription(d, ctx) || '' + // need to use regex to check for matrix or vector items // as sub_category assignment is missing for some entries const subCategory = getSubCategory(d, ctx) if (subCategory === 'cartesian_coordinate' || subCategory === 'fractional_coordinate') { - fields[itemName] = 'coord' + fields[itemName] = CoordCol(description) } else if (FORCE_INT_FIELDS.includes(d.header)) { - fields[itemName] = 'int' + fields[itemName] = IntCol(description) + console.log(`forcing int: ${d.header}`) } else if (subCategory === 'matrix') { - fields[itemName.replace(/\[[1-3]\]\[[1-3]\]/, '')] = { 'matrix': [ 3, 3 ] } + fields[itemName.replace(reMatrixField, '')] = MatrixCol(3, 3, description) } else if (subCategory === 'vector') { - fields[itemName.replace(/\[[1-3]\]/, '')] = { 'vector': [ 3 ] } + fields[itemName.replace(reVectorField, '')] = VectorCol(3, description) } else { - if (itemName.match(/\[[1-3]\]\[[1-3]\]/)) { - fields[itemName.replace(/\[[1-3]\]\[[1-3]\]/, '')] = { 'matrix': [ 3, 3 ] } + if (itemName.match(reMatrixField)) { + fields[itemName.replace(reMatrixField, '')] = MatrixCol(3, 3, description) console.log(`${d.header} should have 'matrix' _item_sub_category.id`) - } else if (itemName.match(/\[[1-3]\]/)) { - fields[itemName.replace(/\[[1-3]\]/, '')] = { 'vector': [ 3 ] } + } else if (itemName.match(reVectorField)) { + fields[itemName.replace(reVectorField, '')] = VectorCol(3, description) console.log(`${d.header} should have 'vector' _item_sub_category.id`) } else { const code = getCode(d, ctx) if (code) { - let fieldType = getFieldType(code[0], code[1]); - if (typeof fieldType === 'string') { + let fieldType = getFieldType(code[0], description, code[1]); + if (fieldType.type === 'str') { if (COMMA_SEPARATED_LIST_FIELDS.includes(d.header)) { - fieldType = { 'list': [ 'str', ',' ] }; - console.log(`comma separated: ${d.header}`) + fieldType = ListCol('str', ',', description) + console.log(`forcing comma separated: ${d.header}`) } else if (SPACE_SEPARATED_LIST_FIELDS.includes(d.header)) { - fieldType = { 'list': [ 'str', ' ' ] }; - console.log(`space separated: ${d.header}`) + fieldType = ListCol('str', ' ', description) + console.log(`forcing space separated: ${d.header}`) } else if (SEMICOLON_SEPARATED_LIST_FIELDS.includes(d.header)) { - fieldType = { 'list': [ 'str', ';' ] }; - console.log(`space separated: ${d.header}`) + fieldType = ListCol('str', ';', description) + console.log(`forcing space separated: ${d.header}`) } } fields[itemName] = fieldType diff --git a/src/apps/schema-generator/util/generate.ts b/src/apps/schema-generator/util/generate.ts index 0f1c5d160..8b57095a8 100644 --- a/src/apps/schema-generator/util/generate.ts +++ b/src/apps/schema-generator/util/generate.ts @@ -4,8 +4,8 @@ * @author Alexander Rose <alexander.rose@weirdbyte.de> */ -import { validate } from './validate' -import { Database, getTypeAndArgs, Filter } from './json-schema' +import { Database, Filter, Column } from './schema' +import { indentString } from 'mol-util'; function header (name: string, info: string, importDatabasePath = 'mol-data/db') { return `/** @@ -37,54 +37,47 @@ export type ${name}_Schema = typeof ${name}_Schema; export interface ${name}_Database extends Database<${name}_Schema> {}` } -const value: { [k: string]: (...args: any[]) => string } = { - enum: function (type: string, values: string[]) { - return `Aliased<'${values.map(v => v.replace(/'/g, '\\\'')).join(`' | '`)}'>(${type})` - }, - matrix: function (rows: number, cols: number) { - return `Matrix(${rows}, ${cols})` - }, - vector: function (dim: number) { - return `Vector(${dim})` - }, - list: function (type: 'str'|'int'|'float', separator: string) { - if (type === 'int') { - return `List('${separator}', x => parseInt(x, 10))` - } else if (type === 'float') { - return `List('${separator}', x => parseFloat(x))` - } else { - return `List('${separator}', x => x)` - } +function getTypeDef(c: Column): string { + switch (c.type) { + case 'str': return 'str' + case 'int': return 'int' + case 'float': return 'float' + case 'coord': return 'coord' + case 'enum': + return `Aliased<'${c.values.map(v => v.replace(/'/g, '\\\'')).join(`' | '`)}'>(${c.subType})` + case 'matrix': + return `Matrix(${c.rows}, ${c.columns})` + case 'vector': + return `Vector(${c.length})` + case 'list': + if (c.subType === 'int') { + return `List('${c.separator}', x => parseInt(x, 10))` + } else if (c.subType === 'float' || c.subType === 'coord') { + return `List('${c.separator}', x => parseFloat(x))` + } else { + return `List('${c.separator}', x => x)` + } } } const reSafePropertyName = /^[a-zA-Z_$][0-9a-zA-Z_$]*$/ -function safePropertyString(name: string) { - return name.match(reSafePropertyName) ? name : `'${name}'` -} +function safePropertyString(name: string) { return name.match(reSafePropertyName) ? name : `'${name}'` } export function generate (name: string, info: string, schema: Database, fields?: Filter, importDatabasePath?: string) { - const validationResult = validate(schema) - if (validationResult !== true) { - throw validationResult - } - const codeLines: string[] = [] codeLines.push(`export const ${name}_Schema = {`) Object.keys(schema).forEach(table => { - if (fields && !fields[ table ]) return + if (fields && !fields[table]) return codeLines.push(` ${safePropertyString(table)}: {`) - const columns = schema[ table ] + const columns = schema[table] Object.keys(columns).forEach(columnName => { - if (fields && !fields[ table ][ columnName ]) return - let typeDef - const fieldType = columns[ columnName ] - if (typeof fieldType === 'object') { - const { type, args } = getTypeAndArgs(fieldType) - typeDef = value[ type ](...args) - } else { - typeDef = fieldType + if (fields && !fields[table][columnName]) return + const typeDef = getTypeDef(columns[columnName]) + if (columns[columnName].description) { + codeLines.push(` /**`) + codeLines.push(`${indentString(columns[columnName].description, 1, ' * ')}`) + codeLines.push(` */`) } codeLines.push(` ${safePropertyString(columnName)}: ${typeDef},`) }) diff --git a/src/apps/schema-generator/util/json-schema.ts b/src/apps/schema-generator/util/json-schema.ts deleted file mode 100644 index ed2e3139e..000000000 --- a/src/apps/schema-generator/util/json-schema.ts +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info. - * - * @author Alexander Rose <alexander.rose@weirdbyte.de> - */ - -export interface Database { - [ tableName: string ]: Table -} - -export interface Table { - [ columnName: string ]: Column -} - -export type ValueColumn = IntCol | StrCol | FloatCol | CoordCol | EnumCol -export type Column = ValueColumn | VectorCol | MatrixCol | ListColumn - -type IntCol = 'int' -type StrCol = 'str' -type FloatCol = 'float' -type CoordCol = 'coord' - -interface ComplexColumn { - [ fieldType: string ]: any[] -} - -interface EnumCol extends ComplexColumn { - enum: [ IntCol | StrCol, string[] ] -} - -interface VectorCol extends ComplexColumn { - vector: [ number ] -} - -interface MatrixCol extends ComplexColumn { - matrix: [ number, number ] -} - -export interface ListColumn extends ComplexColumn { - list: [ ValueColumn, string ] -} - -export function getTypeAndArgs (column: ComplexColumn) { - const type = Object.keys(column)[0] as string - const args = column[ type ] - return { type, args } -} - -export type Filter = { [ table: string ]: { [ column: string ]: true } } - -export function mergeFilters (...filters: Filter[]) { - const n = filters.length - const mergedFilter: Filter = {} - const fields: Map<string, number> = new Map() - filters.forEach(filter => { - Object.keys(filter).forEach(category => { - Object.keys(filter[ category ]).forEach(field => { - const key = `${category}.${field}` - const value = fields.get(key) || 0 - fields.set(key, value + 1) - }) - }) - }) - fields.forEach((v, k) => { - if (v !== n) return - const [categoryName, fieldName] = k.split('.') - if (categoryName in mergedFilter) { - mergedFilter[categoryName][fieldName] = true - } else { - mergedFilter[categoryName] = { fieldName: true } - } - }) - return mergedFilter -} diff --git a/src/apps/schema-generator/util/schema.ts b/src/apps/schema-generator/util/schema.ts new file mode 100644 index 000000000..3cc2026e7 --- /dev/null +++ b/src/apps/schema-generator/util/schema.ts @@ -0,0 +1,70 @@ +/** + * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info. + * + * @author Alexander Rose <alexander.rose@weirdbyte.de> + */ + +export interface Database { [ tableName: string ]: Table } +export interface Table { [ columnName: string ]: Column } +export type Column = IntCol | StrCol | FloatCol | CoordCol | EnumCol | VectorCol | MatrixCol | ListCol + +type BaseCol = { description: string } + +export type IntCol = { type: 'int' } & BaseCol +export function IntCol(description: string): IntCol { return { type: 'int', description } } + +export type StrCol = { type: 'str' } & BaseCol +export function StrCol(description: string): StrCol { return { type: 'str', description } } + +export type FloatCol = { type: 'float' } & BaseCol +export function FloatCol(description: string): FloatCol { return { type: 'float', description } } + +export type CoordCol = { type: 'coord' } & BaseCol +export function CoordCol(description: string): CoordCol { return { type: 'coord', description } } + +export type EnumCol = { type: 'enum', subType: 'int' | 'str', values: string[] } & BaseCol +export function EnumCol(values: string[], subType: 'int' | 'str', description: string): EnumCol { + return { type: 'enum', description, values, subType } +} + +export type VectorCol = { type: 'vector', length: number } & BaseCol +export function VectorCol(length: number, description: string): VectorCol { + return { type: 'vector', description, length } +} + +export type MatrixCol = { type: 'matrix', rows: number, columns: number } & BaseCol +export function MatrixCol(columns: number, rows: number, description: string): MatrixCol { + return { type: 'matrix', description, columns, rows } +} + +export type ListCol = { type: 'list', subType: 'int' | 'str' | 'float' | 'coord', separator: string } & BaseCol +export function ListCol(subType: 'int' | 'str' | 'float' | 'coord', separator: string, description: string): ListCol { + return { type: 'list', description, separator, subType } +} + +export type Filter = { [ table: string ]: { [ column: string ]: true } } + +export function mergeFilters (...filters: Filter[]) { + const n = filters.length + const mergedFilter: Filter = {} + const fields: Map<string, number> = new Map() + filters.forEach(filter => { + Object.keys(filter).forEach(category => { + Object.keys(filter[ category ]).forEach(field => { + const key = `${category}.${field}` + const value = fields.get(key) || 0 + fields.set(key, value + 1) + }) + }) + }) + fields.forEach((v, k) => { + if (v !== n) return + const [categoryName, fieldName] = k.split('.') + if (categoryName in mergedFilter) { + mergedFilter[categoryName][fieldName] = true + } else { + mergedFilter[categoryName] = { fieldName: true } + } + }) + return mergedFilter +} diff --git a/src/apps/schema-generator/util/validate.ts b/src/apps/schema-generator/util/validate.ts deleted file mode 100644 index cda7677ed..000000000 --- a/src/apps/schema-generator/util/validate.ts +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info. - * - * @author Alexander Rose <alexander.rose@weirdbyte.de> - */ - -import { Database, Table, Column } from './json-schema' - -const SimpleColumnTypes = [ 'str', 'int', 'float', 'coord' ] -const ComplexColumnTypes = [ 'enum', 'vector', 'matrix', 'list' ] - -function allTrue<T> (list: T[], fn: (e: T) => boolean) { - return list.reduce((a, v) => a && fn(v), true) -} - -function allString (list: string[]) { - return list.reduce((a, v) => a && typeof v === 'string', true) -} - -function validateColumn (column: Column): true|Error { - if (typeof column === 'string') { - if (!SimpleColumnTypes.includes(column)) { - return new Error(`simple column types must be one of '${SimpleColumnTypes.join(', ')}' not '${column}'`) - } - return true - } else if (typeof column === 'object') { - const keys = Object.keys(column) - if (keys.length !== 1) { - return new Error(`complex column object must have a single key`) - } - const type = keys[0] - const args = column[ type ] - if (!Array.isArray(args)) { - return new Error(`complex column args must be an array`) - } - switch (type) { - case 'enum': - if (args.length !== 2 && (!allString(args[1]) && !allTrue(args[1], Number.isInteger))) { - return new Error(`enum column must have all string or all integer args ${args}`) - } - break; - case 'vector': - if (args.length !== 1 || !allTrue(args, Number.isInteger)) { - return new Error(`vector column must have one integer arg`) - } - break; - case 'matrix': - if (args.length !== 2 || !allTrue(args, Number.isInteger)) { - return new Error(`matrix column must have two integer args`) - } - break; - case 'list': - if (args.length !== 2 || !allString(args)) { - return new Error(`list column must have two string args`) - } - break; - default: - return new Error(`complex column types must be one of '${ComplexColumnTypes.join(', ')}' not '${type}'`) - } - return true - } - return new Error(`columns must be of type 'object' or 'string' not '${typeof column}'`) -} - -function validateTable (table: Table): true|Error { - if (typeof table !== 'object') { - return new Error(`table must be of type 'object' not '${typeof table}'`) - } - for (const columnName in table) { - // could check columnName with regex - const r = validateColumn(table[columnName]) - if (r !== true) { - return new Error(`[${columnName}] ${r.message}`) - } - } - return true -} - -function validateDatabase (database: Database): true|Error { - if (typeof database !== 'object') { - return new Error(`database must be of type 'object' not '${typeof database}'`) - } - for (const tableName in database) { - // could check tableName with regex - const r = validateTable(database[tableName]) - if (r !== true) { - return new Error(`[${tableName}] ${r.message}`) - } - } - return true -} - -export function validate (schema: any): true|Error { - return validateDatabase(schema) -} diff --git a/src/apps/schema-generator/validate-schema.ts b/src/apps/schema-generator/validate-schema.ts deleted file mode 100644 index 698090c99..000000000 --- a/src/apps/schema-generator/validate-schema.ts +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info. - * - * @author Alexander Rose <alexander.rose@weirdbyte.de> - */ - -import * as argparse from 'argparse' -import * as fs from 'fs' - -import { validate } from './util/validate' - -function runValidateSchema (path: string) { - const str = fs.readFileSync(path, 'utf8') - const result = validate(JSON.parse(str)) - console.log(result === true ? 'valid json schema' : `invalid json schema: "${result}"`) -} - -const parser = new argparse.ArgumentParser({ - addHelp: true, - description: 'Validate json schema' -}); -parser.addArgument([ 'path' ], { - help: 'path to json schema' -}); -const args = parser.parseArgs(); - -if (args.path) { - runValidateSchema(args.path) -} diff --git a/src/mol-io/reader/cif/schema/mmcif.ts b/src/mol-io/reader/cif/schema/mmcif.ts index 4e664e087..f395639e8 100644 --- a/src/mol-io/reader/cif/schema/mmcif.ts +++ b/src/mol-io/reader/cif/schema/mmcif.ts @@ -1,7 +1,7 @@ /** * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * - * Code-generated 'mmCIF' schema file. Dictionary versions: mmCIF 5.296, IHM 0.132. + * Code-generated 'mmCIF' schema file. Dictionary versions: mmCIF 5.298, IHM 0.134. * * @author mol-star package (src/apps/schema-generator/generate) */ @@ -22,686 +22,3278 @@ const List = Schema.List; export const mmCIF_Schema = { atom_site: { + /** + * An alternative identifier for _atom_site.label_asym_id that + * may be provided by an author in order to match the identification + * used in the publication that describes the structure. + */ auth_asym_id: str, + /** + * An alternative identifier for _atom_site.label_atom_id that + * may be provided by an author in order to match the identification + * used in the publication that describes the structure. + */ auth_atom_id: str, + /** + * An alternative identifier for _atom_site.label_comp_id that + * may be provided by an author in order to match the identification + * used in the publication that describes the structure. + */ auth_comp_id: str, + /** + * An alternative identifier for _atom_site.label_seq_id that + * may be provided by an author in order to match the identification + * used in the publication that describes the structure. + * + * Note that this is not necessarily a number, that the values do + * not have to be positive, and that the value does not have to + * correspond to the value of _atom_site.label_seq_id. The value + * of _atom_site.label_seq_id is required to be a sequential list + * of positive integers. + * + * The author may assign values to _atom_site.auth_seq_id in any + * desired way. For instance, the values may be used to relate + * this structure to a numbering scheme in a homologous structure, + * including sequence gaps or insertion codes. Alternatively, a + * scheme may be used for a truncated polymer that maintains the + * numbering scheme of the full length polymer. In all cases, the + * scheme used here must match the scheme used in the publication + * that describes the structure. + */ auth_seq_id: int, + /** + * Isotropic atomic displacement parameter, or equivalent isotropic + * atomic displacement parameter, B~eq~, calculated from the + * anisotropic displacement parameters. + * + * B~eq~ = (1/3) sum~i~[sum~j~(B^ij^ A~i~ A~j~ a*~i~ a*~j~)] + * + * A = the real space cell lengths + * a* = the reciprocal space cell lengths + * B^ij^ = 8 pi^2^ U^ij^ + * + * Ref: Fischer, R. X. & Tillmanns, E. (1988). Acta Cryst. C44, + * 775-776. + * + * The IUCr Commission on Nomenclature recommends against the use + * of B for reporting atomic displacement parameters. U, being + * directly proportional to B, is preferred. + * + * Note - + * + * The particular type of ADP stored in this item is qualified + * by item _refine.pdbx_adp_type. + */ B_iso_or_equiv: float, + /** + * The x atom-site coordinate in angstroms specified according to + * a set of orthogonal Cartesian axes related to the cell axes as + * specified by the description given in + * _atom_sites.Cartn_transform_axes. + */ Cartn_x: coord, + /** + * The y atom-site coordinate in angstroms specified according to + * a set of orthogonal Cartesian axes related to the cell axes as + * specified by the description given in + * _atom_sites.Cartn_transform_axes. + */ Cartn_y: coord, + /** + * The z atom-site coordinate in angstroms specified according to + * a set of orthogonal Cartesian axes related to the cell axes as + * specified by the description given in + * _atom_sites.Cartn_transform_axes. + */ Cartn_z: coord, + /** + * The group of atoms to which the atom site belongs. This data + * item is provided for compatibility with the original Protein + * Data Bank format, and only for that purpose. + */ group_PDB: Aliased<'ATOM' | 'HETATM'>(str), + /** + * The value of _atom_site.id must uniquely identify a record in the + * ATOM_SITE list. + * + * Note that this item need not be a number; it can be any unique + * identifier. + * + * This data item was introduced to provide compatibility between + * small-molecule and macromolecular CIFs. In a small-molecule + * CIF, _atom_site_label is the identifier for the atom. In a + * macromolecular CIF, the atom identifier is the aggregate of + * _atom_site.label_alt_id, _atom_site.label_asym_id, + * _atom_site.label_atom_id, _atom_site.label_comp_id and + * _atom_site.label_seq_id. For the two types of files to be + * compatible, a formal identifier for the category had to be + * introduced that was independent of the different modes of + * identifying the atoms. For compatibility with older CIFs, + * _atom_site_label is aliased to _atom_site.id. + */ id: int, + /** + * A component of the identifier for this atom site. + * For further details, see the definition of the ATOM_SITE_ALT + * category. + * + * This data item is a pointer to _atom_sites_alt.id in the + * ATOM_SITES_ALT category. + */ label_alt_id: str, + /** + * A component of the identifier for this atom site. + * For further details, see the definition of the STRUCT_ASYM + * category. + * + * This data item is a pointer to _struct_asym.id in the + * STRUCT_ASYM category. + */ label_asym_id: str, + /** + * A component of the identifier for this atom site. + * + * This data item is a pointer to _chem_comp_atom.atom_id in the + * CHEM_COMP_ATOM category. + */ label_atom_id: str, + /** + * A component of the identifier for this atom site. + * + * This data item is a pointer to _chem_comp.id in the CHEM_COMP + * category. + */ label_comp_id: str, + /** + * This data item is a pointer to _entity.id in the ENTITY category. + */ label_entity_id: str, + /** + * This data item is a pointer to _entity_poly_seq.num in the + * ENTITY_POLY_SEQ category. + */ label_seq_id: int, + /** + * The fraction of the atom type present at this site. + * The sum of the occupancies of all the atom types at this site + * may not significantly exceed 1.0 unless it is a dummy site. + */ occupancy: float, + /** + * This data item is a pointer to _atom_type.symbol in the + * ATOM_TYPE category. + */ type_symbol: str, + /** + * PDB insertion code. + */ pdbx_PDB_ins_code: str, + /** + * PDB model number. + */ pdbx_PDB_model_num: int, + /** + * The net integer charge assigned to this atom. This is the + * formal charge assignment normally found in chemical diagrams. + */ pdbx_formal_charge: int, + /** + * The model id corresponding to the atom site. + * This data item is a pointer to _ihm_model_list.model_id + * in the IHM_MODEL_LIST category. + */ ihm_model_id: int, }, atom_sites: { + /** + * This data item is a pointer to _entry.id in the ENTRY category. + */ entry_id: str, + /** + * The elements of the 3x3 matrix used to transform Cartesian + * coordinates in the ATOM_SITE category to fractional coordinates + * in the same category. The axial alignments of this + * transformation are described in _atom_sites.Cartn_transform_axes. + * The 3x1 translation is defined in + * _atom_sites.fract_transf_vector[]. + * + * |x'| |11 12 13| |x| |1| + * |y'|~fractional~ = |21 22 23| |y|~Cartesian~ + |2| + * |z'| |31 32 33| |z| |3| + */ fract_transf_matrix: Matrix(3, 3), + /** + * The elements of the three-element vector used to transform + * Cartesian coordinates in the ATOM_SITE category to fractional + * coordinates in the same category. The axial alignments of this + * transformation are described in _atom_sites.Cartn_transform_axes. + * The 3x3 rotation is defined in + * _atom_sites.fract_transf_matrix[][]. + * + * |x'| |11 12 13| |x| |1| + * |y'|~fractional~ = |21 22 23| |y|~Cartesian~ + |2| + * |z'| |31 32 33| |z| |3| + */ fract_transf_vector: Vector(3), }, cell: { + /** + * Unit-cell angle alpha of the reported structure in degrees. + */ angle_alpha: float, + /** + * Unit-cell angle beta of the reported structure in degrees. + */ angle_beta: float, + /** + * Unit-cell angle gamma of the reported structure in degrees. + */ angle_gamma: float, + /** + * This data item is a pointer to _entry.id in the ENTRY category. + */ entry_id: str, + /** + * Unit-cell length a corresponding to the structure reported in + * angstroms. + */ length_a: float, + /** + * Unit-cell length b corresponding to the structure reported in + * angstroms. + */ length_b: float, + /** + * Unit-cell length c corresponding to the structure reported in + * angstroms. + */ length_c: float, + /** + * The number of the polymeric chains in a unit cell. In the case + * of heteropolymers, Z is the number of occurrences of the most + * populous chain. + * + * This data item is provided for compatibility with the original + * Protein Data Bank format, and only for that purpose. + */ Z_PDB: int, + /** + * To further identify unique axis if necessary. E.g., P 21 with + * an unique C axis will have 'C' in this field. + */ pdbx_unique_axis: str, }, chem_comp: { + /** + * The formula for the chemical component. Formulae are written + * according to the following rules: + * + * (1) Only recognized element symbols may be used. + * + * (2) Each element symbol is followed by a 'count' number. A count + * of '1' may be omitted. + * + * (3) A space or parenthesis must separate each cluster of + * (element symbol + count), but in general parentheses are + * not used. + * + * (4) The order of elements depends on whether carbon is + * present or not. If carbon is present, the order should be: + * C, then H, then the other elements in alphabetical order + * of their symbol. If carbon is not present, the elements + * are listed purely in alphabetic order of their symbol. This + * is the 'Hill' system used by Chemical Abstracts. + */ formula: str, + /** + * Formula mass in daltons of the chemical component. + */ formula_weight: float, + /** + * The value of _chem_comp.id must uniquely identify each item in + * the CHEM_COMP list. + * + * For protein polymer entities, this is the three-letter code for + * the amino acid. + * + * For nucleic acid polymer entities, this is the one-letter code + * for the base. + */ id: str, + /** + * 'yes' indicates that this is a 'standard' monomer, 'no' + * indicates that it is 'nonstandard'. Nonstandard monomers + * should be described in more detail using the + * _chem_comp.mon_nstd_parent, _chem_comp.mon_nstd_class and + * _chem_comp.mon_nstd_details data items. + */ mon_nstd_flag: Aliased<'no' | 'n' | 'yes' | 'y'>(str), + /** + * The full name of the component. + */ name: str, + /** + * For standard polymer components, the type of the monomer. + * Note that monomers that will form polymers are of three types: + * linking monomers, monomers with some type of N-terminal (or 5') + * cap and monomers with some type of C-terminal (or 3') cap. + */ type: Aliased<'D-peptide linking' | 'L-peptide linking' | 'D-peptide NH3 amino terminus' | 'L-peptide NH3 amino terminus' | 'D-peptide COOH carboxy terminus' | 'L-peptide COOH carboxy terminus' | 'DNA linking' | 'RNA linking' | 'L-RNA linking' | 'L-DNA linking' | 'DNA OH 5 prime terminus' | 'RNA OH 5 prime terminus' | 'DNA OH 3 prime terminus' | 'RNA OH 3 prime terminus' | 'D-saccharide 1,4 and 1,4 linking' | 'L-saccharide 1,4 and 1,4 linking' | 'D-saccharide 1,4 and 1,6 linking' | 'L-saccharide 1,4 and 1,6 linking' | 'L-saccharide' | 'D-saccharide' | 'saccharide' | 'non-polymer' | 'peptide linking' | 'peptide-like' | 'L-gamma-peptide, C-delta linking' | 'D-gamma-peptide, C-delta linking' | 'L-beta-peptide, C-gamma linking' | 'D-beta-peptide, C-gamma linking' | 'other'>(str), + /** + * Synonym list for the component. + */ pdbx_synonyms: List(';', x => x), }, chem_comp_bond: { + /** + * The ID of the first of the two atoms that define the bond. + * + * This data item is a pointer to _chem_comp_atom.atom_id in the + * CHEM_COMP_ATOM category. + */ atom_id_1: str, + /** + * The ID of the second of the two atoms that define the bond. + * + * This data item is a pointer to _chem_comp_atom.atom_id in the + * CHEM_COMP_ATOM category. + */ atom_id_2: str, + /** + * This data item is a pointer to _chem_comp.id in the CHEM_COMP + * category. + */ comp_id: str, + /** + * The value that should be taken as the target for the chemical + * bond associated with the specified atoms, expressed as a bond + * order. + */ value_order: Aliased<'sing' | 'doub' | 'trip' | 'quad' | 'arom' | 'poly' | 'delo' | 'pi'>(str), + /** + * Ordinal index for the component bond list. + */ pdbx_ordinal: int, + /** + * Stereochemical configuration across a double bond. + */ pdbx_stereo_config: Aliased<'E' | 'Z' | 'N'>(str), + /** + * A flag indicating an aromatic bond. + */ pdbx_aromatic_flag: Aliased<'Y' | 'N'>(str), }, entity: { + /** + * A description of special aspects of the entity. + */ details: str, + /** + * Formula mass in daltons of the entity. + */ formula_weight: float, + /** + * The value of _entity.id must uniquely identify a record in the + * ENTITY list. + * + * Note that this item need not be a number; it can be any unique + * identifier. + */ id: str, + /** + * The method by which the sample for the entity was produced. + * Entities isolated directly from natural sources (tissues, soil + * samples etc.) are expected to have further information in the + * ENTITY_SRC_NAT category. Entities isolated from genetically + * manipulated sources are expected to have further information in + * the ENTITY_SRC_GEN category. + */ src_method: Aliased<'nat' | 'man' | 'syn'>(str), + /** + * Defines the type of the entity. + * + * Polymer entities are expected to have corresponding + * ENTITY_POLY and associated entries. + * + * Non-polymer entities are expected to have corresponding + * CHEM_COMP and associated entries. + * + * Water entities are not expected to have corresponding + * entries in the ENTITY category. + */ type: Aliased<'polymer' | 'non-polymer' | 'macrolide' | 'water'>(str), + /** + * A description of the entity. + * + * Corresponds to the compound name in the PDB format. + */ pdbx_description: str, + /** + * A place holder for the number of molecules of the entity in + * the entry. + */ pdbx_number_of_molecules: float, + /** + * Details about any entity mutation(s). + */ pdbx_mutation: str, + /** + * Entity fragment description(s). + */ pdbx_fragment: str, + /** + * Enzyme Commission (EC) number(s) + */ pdbx_ec: List(',', x => x), }, entity_poly: { + /** + * This data item is a pointer to _entity.id in the ENTITY category. + */ entity_id: str, + /** + * A flag to indicate whether the polymer contains at least + * one monomer-to-monomer link different from that implied by + * _entity_poly.type. + */ nstd_linkage: Aliased<'no' | 'n' | 'yes' | 'y'>(str), + /** + * A flag to indicate whether the polymer contains at least + * one monomer that is not considered standard. + */ nstd_monomer: Aliased<'no' | 'n' | 'yes' | 'y'>(str), + /** + * The type of the polymer. + */ type: Aliased<'polypeptide(D)' | 'polypeptide(L)' | 'polydeoxyribonucleotide' | 'polyribonucleotide' | 'polysaccharide(D)' | 'polysaccharide(L)' | 'polydeoxyribonucleotide/polyribonucleotide hybrid' | 'cyclic-pseudo-peptide' | 'peptide nucleic acid' | 'other'>(str), + /** + * The PDB strand/chain id(s) corresponding to this polymer entity. + */ pdbx_strand_id: List(',', x => x), + /** + * Chemical sequence expressed as string of one-letter + * amino acid codes. Modifications and non-standard + * amino acids are coded as X. + */ pdbx_seq_one_letter_code: str, + /** + * Cannonical chemical sequence expressed as string of + * one-letter amino acid codes. Modifications are coded + * as the parent amino acid where possible. + * + * A for alanine or adenine + * B for ambiguous asparagine/aspartic-acid + * R for arginine + * N for asparagine + * D for aspartic-acid + * C for cysteine or cystine or cytosine + * Q for glutamine + * E for glutamic-acid + * Z for ambiguous glutamine/glutamic acid + * G for glycine or guanine + * H for histidine + * I for isoleucine + * L for leucine + * K for lysine + * M for methionine + * F for phenylalanine + * P for proline + * S for serine + * T for threonine or thymine + * W for tryptophan + * Y for tyrosine + * V for valine + * U for uracil + */ pdbx_seq_one_letter_code_can: str, + /** + * For Structural Genomics entries, the sequence's target identifier registered at the TargetTrack database. + */ pdbx_target_identifier: str, }, entity_poly_seq: { + /** + * This data item is a pointer to _entity.id in the ENTITY category. + */ entity_id: str, + /** + * A flag to indicate whether this monomer in the polymer is + * heterogeneous in sequence. + */ hetero: Aliased<'no' | 'n' | 'yes' | 'y'>(str), + /** + * This data item is a pointer to _chem_comp.id in the CHEM_COMP + * category. + */ mon_id: str, + /** + * The value of _entity_poly_seq.num must uniquely and sequentially + * identify a record in the ENTITY_POLY_SEQ list. + * + * Note that this item must be a number and that the sequence + * numbers must progress in increasing numerical order. + */ num: int, }, entry: { + /** + * The value of _entry.id identifies the data block. + * + * Note that this item need not be a number; it can be any unique + * identifier. + */ id: str, }, exptl: { + /** + * This data item is a pointer to _entry.id in the ENTRY category. + */ entry_id: str, + /** + * The method used in the experiment. + */ method: Aliased<'X-RAY DIFFRACTION' | 'NEUTRON DIFFRACTION' | 'FIBER DIFFRACTION' | 'ELECTRON CRYSTALLOGRAPHY' | 'ELECTRON MICROSCOPY' | 'SOLUTION NMR' | 'SOLID-STATE NMR' | 'SOLUTION SCATTERING' | 'POWDER DIFFRACTION' | 'INFRARED SPECTROSCOPY' | 'EPR' | 'FLUORESCENCE TRANSFER' | 'THEORETICAL MODEL'>(str), }, struct: { + /** + * This data item is a pointer to _entry.id in the ENTRY category. + */ entry_id: str, + /** + * A title for the data block. The author should attempt to convey + * the essence of the structure archived in the CIF in the title, + * and to distinguish this structural result from others. + */ title: str, }, struct_asym: { + /** + * A description of special aspects of this portion of the contents + * of the asymmetric unit. + */ details: str, + /** + * This data item is a pointer to _entity.id in the ENTITY category. + */ entity_id: str, + /** + * The value of _struct_asym.id must uniquely identify a record in + * the STRUCT_ASYM list. + * + * Note that this item need not be a number; it can be any unique + * identifier. + */ id: str, + /** + * This data item indicates whether the structural elements are modified. + */ pdbx_modified: str, + /** + * A flag indicating that this entity was originally labeled + * with a blank PDB chain id. + */ pdbx_blank_PDB_chainid_flag: Aliased<'Y' | 'N'>(str), }, struct_conf: { + /** + * A component of the identifier for the residue at which the + * conformation segment begins. + * + * This data item is a pointer to _atom_site.label_asym_id in the + * ATOM_SITE category. + */ beg_label_asym_id: str, + /** + * A component of the identifier for the residue at which the + * conformation segment begins. + * + * This data item is a pointer to _atom_site.label_comp_id in + * the ATOM_SITE category. + */ beg_label_comp_id: str, + /** + * A component of the identifier for the residue at which the + * conformation segment begins. + * + * This data item is a pointer to _atom_site.label_seq_id in the + * ATOM_SITE category. + */ beg_label_seq_id: int, + /** + * A component of the identifier for the residue at which the + * conformation segment begins. + * + * This data item is a pointer to _atom_site.auth_asym_id in the + * ATOM_SITE category. + */ beg_auth_asym_id: str, + /** + * A component of the identifier for the residue at which the + * conformation segment begins. + * + * This data item is a pointer to _atom_site.auth_comp_id in + * the ATOM_SITE category. + */ beg_auth_comp_id: str, + /** + * A component of the identifier for the residue at which the + * conformation segment begins. + * + * This data item is a pointer to _atom_site.auth_seq_id in the + * ATOM_SITE category. + */ beg_auth_seq_id: int, + /** + * This data item is a pointer to _struct_conf_type.id in the + * STRUCT_CONF_TYPE category. + */ conf_type_id: Aliased<'HELX_P' | 'HELX_OT_P' | 'HELX_RH_P' | 'HELX_RH_OT_P' | 'HELX_RH_AL_P' | 'HELX_RH_GA_P' | 'HELX_RH_OM_P' | 'HELX_RH_PI_P' | 'HELX_RH_27_P' | 'HELX_RH_3T_P' | 'HELX_RH_PP_P' | 'HELX_LH_P' | 'HELX_LH_OT_P' | 'HELX_LH_AL_P' | 'HELX_LH_GA_P' | 'HELX_LH_OM_P' | 'HELX_LH_PI_P' | 'HELX_LH_27_P' | 'HELX_LH_3T_P' | 'HELX_LH_PP_P' | 'HELX_N' | 'HELX_OT_N' | 'HELX_RH_N' | 'HELX_RH_OT_N' | 'HELX_RH_A_N' | 'HELX_RH_B_N' | 'HELX_RH_Z_N' | 'HELX_LH_N' | 'HELX_LH_OT_N' | 'HELX_LH_A_N' | 'HELX_LH_B_N' | 'HELX_LH_Z_N' | 'TURN_P' | 'TURN_OT_P' | 'TURN_TY1_P' | 'TURN_TY1P_P' | 'TURN_TY2_P' | 'TURN_TY2P_P' | 'TURN_TY3_P' | 'TURN_TY3P_P' | 'STRN'>(str), + /** + * A description of special aspects of the conformation assignment. + */ details: str, + /** + * A component of the identifier for the residue at which the + * conformation segment ends. + * + * This data item is a pointer to _atom_site.label_asym_id in the + * ATOM_SITE category. + */ end_label_asym_id: str, + /** + * A component of the identifier for the residue at which the + * conformation segment ends. + * + * This data item is a pointer to _atom_site.label_comp_id in the + * ATOM_SITE category. + */ end_label_comp_id: str, + /** + * A component of the identifier for the residue at which the + * conformation segment ends. + * + * This data item is a pointer to _atom_site.label_seq_id in the + * ATOM_SITE category. + */ end_label_seq_id: int, + /** + * A component of the identifier for the residue at which the + * conformation segment ends. + * + * This data item is a pointer to _atom_site.auth_asym_id in the + * ATOM_SITE category. + */ end_auth_asym_id: str, + /** + * A component of the identifier for the residue at which the + * conformation segment ends. + * + * This data item is a pointer to _atom_site.auth_comp_id in the + * ATOM_SITE category. + */ end_auth_comp_id: str, + /** + * A component of the identifier for the residue at which the + * conformation segment ends. + * + * This data item is a pointer to _atom_site.auth_seq_id in the + * ATOM_SITE category. + */ end_auth_seq_id: int, + /** + * The value of _struct_conf.id must uniquely identify a record in + * the STRUCT_CONF list. + * + * Note that this item need not be a number; it can be any unique + * identifier. + */ id: str, + /** + * A component of the identifier for the residue at which the + * conformation segment starts. + */ pdbx_beg_PDB_ins_code: str, + /** + * A component of the identifier for the residue at which the + * conformation segment ends. + */ pdbx_end_PDB_ins_code: str, + /** + * This item is a place holder for the helix class used in the PDB + * HELIX record. + */ pdbx_PDB_helix_class: str, + /** + * A placeholder for the lengths of the helix of the PDB + * HELIX record. + */ pdbx_PDB_helix_length: int, + /** + * A placeholder for the helix identifier of the PDB + * HELIX record. + */ pdbx_PDB_helix_id: str, }, struct_conn: { + /** + * This data item is a pointer to _struct_conn_type.id in the + * STRUCT_CONN_TYPE category. + */ conn_type_id: Aliased<'covale' | 'disulf' | 'hydrog' | 'metalc' | 'mismat' | 'saltbr' | 'modres' | 'covale_base' | 'covale_sugar' | 'covale_phosphate'>(str), + /** + * A description of special aspects of the connection. + */ details: str, + /** + * The value of _struct_conn.id must uniquely identify a record in + * the STRUCT_CONN list. + * + * Note that this item need not be a number; it can be any unique + * identifier. + */ id: str, + /** + * A component of the identifier for partner 1 of the structure + * connection. + * + * This data item is a pointer to _atom_site.label_asym_id in the + * ATOM_SITE category. + */ ptnr1_label_asym_id: str, + /** + * A component of the identifier for partner 1 of the structure + * connection. + * + * This data item is a pointer to _chem_comp_atom.atom_id in the + * CHEM_COMP_ATOM category. + */ ptnr1_label_atom_id: str, + /** + * A component of the identifier for partner 1 of the structure + * connection. + * + * This data item is a pointer to _atom_site.label_comp_id in the + * ATOM_SITE category. + */ ptnr1_label_comp_id: str, + /** + * A component of the identifier for partner 1 of the structure + * connection. + * + * This data item is a pointer to _atom_site.label_seq_id in the + * ATOM_SITE category. + */ ptnr1_label_seq_id: int, + /** + * A component of the identifier for partner 1 of the structure + * connection. + * + * This data item is a pointer to _atom_site.auth_asym_id in the + * ATOM_SITE category. + */ ptnr1_auth_asym_id: str, + /** + * A component of the identifier for partner 1 of the structure + * connection. + * + * This data item is a pointer to _atom_site.auth_comp_id in the + * ATOM_SITE category. + */ ptnr1_auth_comp_id: str, + /** + * A component of the identifier for partner 1 of the structure + * connection. + * + * This data item is a pointer to _atom_site.auth_seq_id in the + * ATOM_SITE category. + */ ptnr1_auth_seq_id: int, + /** + * Describes the symmetry operation that should be applied to the + * atom set specified by _struct_conn.ptnr1_label* to generate the + * first partner in the structure connection. + */ ptnr1_symmetry: str, + /** + * A component of the identifier for partner 2 of the structure + * connection. + * + * This data item is a pointer to _atom_site.label_asym_id in the + * ATOM_SITE category. + */ ptnr2_label_asym_id: str, + /** + * A component of the identifier for partner 2 of the structure + * connection. + * + * This data item is a pointer to _chem_comp_atom.atom_id in the + * CHEM_COMP_ATOM category. + */ ptnr2_label_atom_id: str, + /** + * A component of the identifier for partner 2 of the structure + * connection. + * + * This data item is a pointer to _atom_site.label_comp_id in the + * ATOM_SITE category. + */ ptnr2_label_comp_id: str, + /** + * A component of the identifier for partner 2 of the structure + * connection. + * + * This data item is a pointer to _atom_site.label_seq_id in the + * ATOM_SITE category. + */ ptnr2_label_seq_id: int, + /** + * A component of the identifier for partner 2 of the structure + * connection. + * + * This data item is a pointer to _atom_site.auth_asym_id in the + * ATOM_SITE category. + */ ptnr2_auth_asym_id: str, + /** + * A component of the identifier for partner 2 of the structure + * connection. + * + * This data item is a pointer to _atom_site.auth_comp_id in the + * ATOM_SITE category. + */ ptnr2_auth_comp_id: str, + /** + * A component of the identifier for partner 2 of the structure + * connection. + * + * This data item is a pointer to _atom_site.auth_seq_id in the + * ATOM_SITE category. + */ ptnr2_auth_seq_id: int, + /** + * Describes the symmetry operation that should be applied to the + * atom set specified by _struct_conn.ptnr2_label* to generate the + * second partner in the structure connection. + */ ptnr2_symmetry: str, + /** + * A component of the identifier for partner 1 of the structure + * connection. + * + * This data item is a pointer to _atom_site.pdbx_PDB_ins_code in the + * ATOM_SITE category. + */ pdbx_ptnr1_PDB_ins_code: str, + /** + * A component of the identifier for partner 1 of the + * structure connection. This data item is a pointer to + * _atom_site.label_alt_id in the ATOM_SITE category. + */ pdbx_ptnr1_label_alt_id: str, + /** + * A placeholder for the standard residue name found in + * the MODRES record of a PDB file. + */ pdbx_ptnr1_standard_comp_id: str, + /** + * A component of the identifier for partner 1 of the structure + * connection. + * + * This data item is a pointer to _atom_site.pdbx_PDB_ins_code in the + * ATOM_SITE category. + */ pdbx_ptnr2_PDB_ins_code: str, + /** + * A component of the identifier for partner 2 of the + * structure connection. This data item is a pointer to + * _atom_site.label_alt_id in the ATOM_SITE category. + */ pdbx_ptnr2_label_alt_id: str, + /** + * A component of the identifier for partner 3 of the + * structure connection. This data item is a pointer to + * _atom_site.pdbx_PDB_ins_code in the ATOM_SITE category. + */ pdbx_ptnr3_PDB_ins_code: str, + /** + * A component of the identifier for partner 3 of the + * structure connection. This data item is a pointer to + * _atom_site.label_alt_id in the ATOM_SITE category. + */ pdbx_ptnr3_label_alt_id: str, + /** + * A component of the identifier for partner 3 of the + * structure connection. This data item is a pointer to + * _atom_site.label_asym_id in the ATOM_SITE category. + */ pdbx_ptnr3_label_asym_id: str, + /** + * A component of the identifier for partner 3 of the + * structure connection. This data item is a pointer to + * _atom_site.label_atom_id in the ATOM_SITE category. + */ pdbx_ptnr3_label_atom_id: str, + /** + * A component of the identifier for partner 3 of the + * structure connection. This data item is a pointer to + * _atom_site.label_comp_id in the ATOM_SITE category. + */ pdbx_ptnr3_label_comp_id: str, + /** + * A component of the identifier for partner 1 of the + * structure connection. This data item is a pointer to + * _atom_site.label_seq_id in the ATOM_SITE category. + */ pdbx_ptnr3_label_seq_id: int, + /** + * A placeholder for the PDB id in the case the category + * is used to hold the information of the MODRES record of + * a PDB file. + */ pdbx_PDB_id: str, + /** + * Distance value for this contact. + */ pdbx_dist_value: float, + /** + * The chemical bond order associated with the specified atoms in + * this contact. + */ pdbx_value_order: Aliased<'sing' | 'doub' | 'trip' | 'quad'>(str), }, struct_conn_type: { + /** + * The criteria used to define the interaction. + */ criteria: str, + /** + * The chemical or structural type of the interaction. + */ id: Aliased<'covale' | 'disulf' | 'hydrog' | 'metalc' | 'mismat' | 'saltbr' | 'modres' | 'covale_base' | 'covale_sugar' | 'covale_phosphate'>(str), + /** + * A reference that specifies the criteria used to define the + * interaction. + */ reference: str, }, struct_keywords: { + /** + * This data item is a pointer to _entry.id in the ENTRY category. + */ entry_id: str, + /** + * Keywords describing this structure. + */ text: List(',', x => x), + /** + * Terms characterizing the macromolecular structure. + */ pdbx_keywords: str, }, struct_ncs_oper: { + /** + * A code to indicate whether this operator describes a + * relationship between coordinates all of which are given in the + * data block (in which case the value of code is 'given'), or + * whether the operator is used to generate new coordinates from + * those that are given in the data block (in which case the value + * of code is 'generate'). + */ code: Aliased<'given' | 'generate'>(str), + /** + * A description of special aspects of the noncrystallographic + * symmetry operator. + */ details: str, + /** + * The value of _struct_ncs_oper.id must uniquely identify a + * record in the STRUCT_NCS_OPER list. + * + * Note that this item need not be a number; it can be any unique + * identifier. + */ id: str, + /** + * The elements of the 3x3 matrix component of a + * noncrystallographic symmetry operation. + */ matrix: Matrix(3, 3), + /** + * The elements of the three-element vector component of a + * noncrystallographic symmetry operation. + */ vector: Vector(3), }, struct_sheet_range: { + /** + * A component of the identifier for the residue at which the + * beta-sheet range begins. + * + * This data item is a pointer to _struct_asym.id in the + * STRUCT_ASYM category. + */ beg_label_asym_id: str, + /** + * A component of the identifier for the residue at which the + * beta-sheet range begins. + * + * This data item is a pointer to _chem_comp.id in the CHEM_COMP + * category. + */ beg_label_comp_id: str, + /** + * A component of the identifier for the residue at which the + * beta-sheet range begins. + * + * This data item is a pointer to _atom_site.label_seq_id in the + * ATOM_SITE category. + */ beg_label_seq_id: int, + /** + * A component of the identifier for the residue at which the + * beta-sheet range ends. + * + * This data item is a pointer to _struct_asym.id in the + * STRUCT_ASYM category. + */ end_label_asym_id: str, + /** + * A component of the identifier for the residue at which the + * beta-sheet range ends. + * + * This data item is a pointer to _chem_comp.id in the CHEM_COMP + * category. + */ end_label_comp_id: str, + /** + * A component of the identifier for the residue at which the + * beta-sheet range ends. + * + * This data item is a pointer to _atom_site.label_seq_id in the + * ATOM_SITE category. + */ end_label_seq_id: int, + /** + * A component of the identifier for the residue at which the + * beta-sheet range begins. + * + * This data item is a pointer to _atom_site.auth_asym_id in the + * ATOM_SITE category. + */ beg_auth_asym_id: str, + /** + * A component of the identifier for the residue at which the + * beta-sheet range begins. + * + * This data item is a pointer to _atom_site.auth_comp_id in + * the ATOM_SITE category. + */ beg_auth_comp_id: str, + /** + * A component of the identifier for the residue at which the + * beta-sheet range begins. + * + * This data item is a pointer to _atom_site.auth_seq_id in the + * ATOM_SITE category. + */ beg_auth_seq_id: int, + /** + * A component of the identifier for the residue at which the + * beta-sheet range ends. + * + * This data item is a pointer to _atom_site.auth_asym_id in the + * ATOM_SITE category. + */ end_auth_asym_id: str, + /** + * A component of the identifier for the residue at which the + * beta-sheet range ends. + * + * This data item is a pointer to _atom_site.auth_comp_id in the + * ATOM_SITE category. + */ end_auth_comp_id: str, + /** + * A component of the identifier for the residue at which the + * beta-sheet range ends. + * + * This data item is a pointer to _atom_site.auth_seq_id in the + * ATOM_SITE category. + */ end_auth_seq_id: int, + /** + * The value of _struct_sheet_range.id must uniquely identify a + * range in a given sheet in the STRUCT_SHEET_RANGE list. + * + * Note that this item need not be a number; it can be any unique + * identifier. + */ id: str, + /** + * This data item is a pointer to _struct_sheet.id in the + * STRUCT_SHEET category. + */ sheet_id: str, + /** + * A component of the identifier for the residue at which the + * beta sheet range begins. Insertion code. + */ pdbx_beg_PDB_ins_code: str, + /** + * A component of the identifier for the residue at which the + * beta sheet range ends. Insertion code. + */ pdbx_end_PDB_ins_code: str, }, struct_site: { + /** + * A description of special aspects of the site. + */ details: str, + /** + * The value of _struct_site.id must uniquely identify a record in + * the STRUCT_SITE list. + * + * Note that this item need not be a number; it can be any unique + * identifier. + */ id: str, + /** + * Number of residues in the site. + */ pdbx_num_residues: int, + /** + * Source of evidence supporting the assignment of this site. + */ pdbx_evidence_code: str, + /** + * A component of the identifier for the ligand in the site. + * + * This data item is a pointer to _atom_site.auth_asym_id in the + * ATOM_SITE category. + */ pdbx_auth_asym_id: str, + /** + * A component of the identifier for the ligand in the site. + * + * This data item is a pointer to _atom_site.auth_comp_id in the + * ATOM_SITE category. + */ pdbx_auth_comp_id: str, + /** + * A component of the identifier for the ligand in the site. + * + * This data item is a pointer to _atom_site.auth_seq_id in the + * ATOM_SITE category. + */ pdbx_auth_seq_id: str, + /** + * PDB insertion code for the ligand in the site. + */ pdbx_auth_ins_code: str, }, struct_site_gen: { + /** + * A description of special aspects of the symmetry generation of + * this portion of the structural site. + */ details: str, + /** + * The value of _struct_site_gen.id must uniquely identify a record + * in the STRUCT_SITE_GEN list. + * + * Note that this item need not be a number; it can be any unique + * identifier. + */ id: str, + /** + * A component of the identifier for participants in the site. + * + * This data item is a pointer to _atom_sites_alt.id in the + * ATOM_SITES_ALT category. + */ label_alt_id: str, + /** + * A component of the identifier for participants in the site. + * + * This data item is a pointer to _atom_site.label_asym_id in the + * ATOM_SITE category. + */ label_asym_id: str, + /** + * A component of the identifier for participants in the site. + * + * This data item is a pointer to _chem_comp_atom.atom_id in the + * CHEM_COMP_ATOM category. + */ label_atom_id: str, + /** + * A component of the identifier for participants in the site. + * + * This data item is a pointer to _atom_site.label_comp_id in the + * ATOM_SITE category. + */ label_comp_id: str, + /** + * A component of the identifier for participants in the site. + * + * This data item is a pointer to _atom_site.label_seq_id in the + * ATOM_SITE category. + */ label_seq_id: int, + /** + * A component of the identifier for participants in the site. + * + * This data item is a pointer to _atom_site.auth_asym_id in the + * ATOM_SITE category. + */ auth_asym_id: str, + /** + * A component of the identifier for participants in the site. + * + * This data item is a pointer to _atom_site.auth_comp_id in the + * ATOM_SITE category. + */ auth_comp_id: str, + /** + * A component of the identifier for participants in the site. + * + * This data item is a pointer to _atom_site.auth_seq_id in the + * ATOM_SITE category. + */ auth_seq_id: str, + /** + * This data item is a pointer to _struct_site.id in the STRUCT_SITE + * category. + */ site_id: str, + /** + * Describes the symmetry operation that should be applied to the + * atom set specified by _struct_site_gen.label* to generate a + * portion of the site. + */ symmetry: str, + /** + * PDB insertion code. + */ pdbx_auth_ins_code: str, + /** + * Number of residues in the site. + */ pdbx_num_res: int, }, symmetry: { + /** + * This data item is a pointer to _entry.id in the ENTRY category. + */ entry_id: str, + /** + * The cell settings for this space-group symmetry. + */ cell_setting: Aliased<'triclinic' | 'monoclinic' | 'orthorhombic' | 'tetragonal' | 'rhombohedral' | 'trigonal' | 'hexagonal' | 'cubic'>(str), + /** + * Space-group number from International Tables for Crystallography + * Vol. A (2002). + */ Int_Tables_number: int, + /** + * Space-group symbol as described by Hall (1981). This symbol + * gives the space-group setting explicitly. Leave spaces between + * the separate components of the symbol. + * + * Ref: Hall, S. R. (1981). Acta Cryst. A37, 517-525; erratum + * (1981) A37, 921. + */ space_group_name_Hall: str, + /** + * Hermann-Mauguin space-group symbol. Note that the + * Hermann-Mauguin symbol does not necessarily contain complete + * information about the symmetry and the space-group origin. If + * used, always supply the FULL symbol from International Tables + * for Crystallography Vol. A (2002) and indicate the origin and + * the setting if it is not implicit. If there is any doubt that + * the equivalent positions can be uniquely deduced from this + * symbol, specify the _symmetry_equiv.pos_as_xyz or + * _symmetry.space_group_name_Hall data items as well. Leave + * spaces between symbols referring to + * different axes. + */ 'space_group_name_H-M': str, }, pdbx_struct_assembly: { + /** + * Provides details of the method used to determine or + * compute the assembly. + */ method_details: str, + /** + * Provides the details of the oligomeric state of the assembly. + */ oligomeric_details: str, + /** + * The number of polymer molecules in the assembly. + */ oligomeric_count: int, + /** + * A description of special aspects of the macromolecular assembly. + */ details: str, + /** + * The value of _pdbx_struct_assembly.id must uniquely identify a record in + * the PDBX_STRUCT_ASSEMBLY list. + */ id: str, }, pdbx_struct_mod_residue: { + /** + * The value of _pdbx_struct_mod_residue.id must uniquely identify + * each item in the PDBX_STRUCT_MOD_RESIDUE list. + * + * This is an integer serial number. + */ id: int, + /** + * Part of the identifier for the modified polymer component. + * + * This data item is a pointer to _atom_site.auth_asym_id in the + * ATOM_SITE category. + */ auth_asym_id: str, + /** + * Part of the identifier for the modified polymer component. + * + * This data item is a pointer to _atom_site.auth_comp_id in the + * ATOM_SITE category. + */ auth_comp_id: str, + /** + * Part of the identifier for the modified polymer component. + * + * This data item is a pointer to _atom_site.auth_seq_id in the + * ATOM_SITE category. + */ auth_seq_id: int, + /** + * Part of the identifier for the modified polymer component. + * + * This data item is a pointer to _atom_site.pdbx_PDB_ins_code in the + * ATOM_SITE category. + */ PDB_ins_code: str, + /** + * Part of the identifier for the modified polymer component. + * + * This data item is a pointer to _atom_site.label_asym_id in the + * ATOM_SITE category. + */ label_asym_id: str, + /** + * Part of the identifier for the modified polymer component. + * + * This data item is a pointer to _atom_site.label_comp_id in the + * ATOM_SITE category. + */ label_comp_id: str, + /** + * Part of the identifier for the unobserved or zero occupancy residue. + * + * This data item is a pointer to _atom_site.label_seq_id in the + * ATOM_SITE category. + */ label_seq_id: int, + /** + * The parent component identifier for this modified polymer component. + */ parent_comp_id: str, + /** + * Details of the modification for this polymer component. + */ details: str, }, pdbx_struct_oper_list: { + /** + * This identifier code must uniquely identify a + * record in the PDBX_STRUCT_OPER_LIST list. + */ id: str, + /** + * A code to indicate the type of operator. + */ type: Aliased<'identity operation' | 'point symmetry operation' | 'helical symmetry operation' | 'crystal symmetry operation' | '3D crystal symmetry operation' | '2D crystal symmetry operation' | 'transform to point frame' | 'transform to helical frame' | 'transform to crystal frame' | 'transform to 2D crystal frame' | 'transform to 3D crystal frame' | 'build point asymmetric unit' | 'build helical asymmetric unit' | 'build 2D crystal asymmetric unit' | 'build 3D crystal asymmetric unit'>(str), + /** + * A descriptive name for the transformation operation. + */ name: str, + /** + * The symmetry operation corresponding to the transformation operation. + */ symmetry_operation: str, + /** + * The elements of the 3x3 matrix component of the + * transformation operation. + */ matrix: Matrix(3, 3), + /** + * The elements of the three-element vector component of the + * transformation operation. + */ vector: Vector(3), }, pdbx_struct_assembly_gen: { + /** + * This data item is a pointer to _struct_asym.id in + * the STRUCT_ASYM category. + * + * This item may be expressed as a comma separated list of identifiers. + */ asym_id_list: List(',', x => x), + /** + * This data item is a pointer to _pdbx_struct_assembly.id in the + * PDBX_STRUCT_ASSEMBLY category. + */ assembly_id: str, + /** + * Identifies the operation of collection of operations + * from category PDBX_STRUCT_OPER_LIST. + * + * Operation expressions may have the forms: + * + * (1) the single operation 1 + * (1,2,5) the operations 1, 2, 5 + * (1-4) the operations 1,2,3 and 4 + * (1,2)(3,4) the combinations of operations + * 3 and 4 followed by 1 and 2 (i.e. + * the cartesian product of parenthetical + * groups applied from right to left) + */ oper_expression: str, }, pdbx_reference_entity_list: { + /** + * The value of _pdbx_reference_entity_list.prd_id is a reference + * _pdbx_reference_molecule.prd_id in the PDBX_REFERENCE_MOLECULE category. + */ prd_id: str, + /** + * The value of _pdbx_reference_entity_list.ref_entity_id is a unique identifier + * the a constituent entity within this reference molecule. + */ ref_entity_id: str, + /** + * Defines the polymer characteristic of the entity. + */ type: str, + /** + * Additional details about this entity. + */ details: str, + /** + * The component number of this entity within the molecule. + */ component_id: int, }, pdbx_reference_entity_link: { + /** + * The value of _pdbx_reference_entity_link.link_id uniquely identifies + * linkages between entities with a molecule. + */ link_id: int, + /** + * The value of _pdbx_reference_entity_link.prd_id is a reference + * _pdbx_reference_entity_list.prd_id in the PDBX_REFERENCE_ENTITY_LIST category. + */ prd_id: str, + /** + * A description of special aspects of a linkage between + * chemical components in the structure. + */ details: str, + /** + * The reference entity id of the first of the two entities joined by the + * linkage. + * + * This data item is a pointer to _pdbx_reference_entity_list.ref_entity_id + * in the PDBX_REFERENCE_ENTITY_LIST category. + */ ref_entity_id_1: str, + /** + * The reference entity id of the second of the two entities joined by the + * linkage. + * + * This data item is a pointer to _pdbx_reference_entity_list.ref_entity_id + * in the PDBX_REFERENCE_ENTITY_LIST category. + */ ref_entity_id_2: str, + /** + * For a polymer entity, the sequence number in the first of + * the two entities containing the linkage. + * + * This data item is a pointer to _pdbx_reference_entity_poly_seq.num + * in the PDBX_REFERENCE_ENTITY_POLY_SEQ category. + */ entity_seq_num_1: int, + /** + * For a polymer entity, the sequence number in the second of + * the two entities containing the linkage. + * + * This data item is a pointer to _pdbx_reference_entity_poly_seq.num + * in the PDBX_REFERENCE_ENTITY_POLY_SEQ category. + */ entity_seq_num_2: int, + /** + * The component identifier in the first of the two entities containing the linkage. + * + * For polymer entities, this data item is a pointer to _pdbx_reference_entity_poly_seq.mon_id + * in the PDBX_REFERENCE_ENTITY_POLY_SEQ category. + * + * For non-polymer entities, this data item is a pointer to + * _pdbx_reference_entity_nonpoly.chem_comp_id in the + * PDBX_REFERENCE_ENTITY_NONPOLY category. + */ comp_id_1: str, + /** + * The component identifier in the second of the two entities containing the linkage. + * + * For polymer entities, this data item is a pointer to _pdbx_reference_entity_poly_seq.mon_id + * in the PDBX_REFERENCE_ENTITY_POLY_SEQ category. + * + * For non-polymer entities, this data item is a pointer to + * _pdbx_reference_entity_nonpoly.chem_comp_id in the + * PDBX_REFERENCE_ENTITY_NONPOLY category. + */ comp_id_2: str, + /** + * The atom identifier/name in the first of the two entities containing the linkage. + */ atom_id_1: str, + /** + * The atom identifier/name in the second of the two entities containing the linkage. + */ atom_id_2: str, + /** + * The bond order target for the chemical linkage. + */ value_order: Aliased<'sing' | 'doub' | 'trip' | 'quad' | 'arom' | 'poly' | 'delo' | 'pi'>(str), + /** + * The entity component identifier for the first of two entities containing the linkage. + */ component_1: int, + /** + * The entity component identifier for the second of two entities containing the linkage. + */ component_2: int, + /** + * A code indicating the entity types involved in the linkage. + */ link_class: Aliased<'PP' | 'PN' | 'NP' | 'NN'>(str), }, pdbx_reference_entity_poly_link: { + /** + * The value of _pdbx_reference_entity_poly_link.link_id uniquely identifies + * a linkage within a polymer entity. + */ link_id: int, + /** + * The value of _pdbx_reference_entity_poly_link.prd_id is a reference + * _pdbx_reference_entity_list.prd_id in the PDBX_REFERENCE_ENTITY_POLY category. + */ prd_id: str, + /** + * The reference entity id of the polymer entity containing the linkage. + * + * This data item is a pointer to _pdbx_reference_entity_poly.ref_entity_id + * in the PDBX_REFERENCE_ENTITY_POLY category. + */ ref_entity_id: str, + /** + * The entity component identifier entity containing the linkage. + */ component_id: int, + /** + * For a polymer entity, the sequence number in the first of + * the two components making the linkage. + * + * This data item is a pointer to _pdbx_reference_entity_poly_seq.num + * in the PDBX_REFERENCE_ENTITY_POLY_SEQ category. + */ entity_seq_num_1: int, + /** + * For a polymer entity, the sequence number in the second of + * the two components making the linkage. + * + * This data item is a pointer to _pdbx_reference_entity_poly_seq.num + * in the PDBX_REFERENCE_ENTITY_POLY_SEQ category. + */ entity_seq_num_2: int, + /** + * The component identifier in the first of the two components making the + * linkage. + * + * This data item is a pointer to _pdbx_reference_entity_poly_seq.mon_id + * in the PDBX_REFERENCE_ENTITY_POLY_SEQ category. + */ comp_id_1: str, + /** + * The component identifier in the second of the two components making the + * linkage. + * + * This data item is a pointer to _pdbx_reference_entity_poly_seq.mon_id + * in the PDBX_REFERENCE_ENTITY_POLY_SEQ category. + */ comp_id_2: str, + /** + * The atom identifier/name in the first of the two components making + * the linkage. + */ atom_id_1: str, + /** + * The atom identifier/name in the second of the two components making + * the linkage. + */ atom_id_2: str, + /** + * The bond order target for the non-standard linkage. + */ value_order: Aliased<'sing' | 'doub' | 'trip' | 'quad' | 'arom' | 'poly' | 'delo' | 'pi'>(str), }, pdbx_molecule: { + /** + * The value of _pdbx_molecule.prd_id is the PDB accession code for this + * reference molecule. + */ prd_id: str, + /** + * The value of _pdbx_molecule.instance_id is identifies a particular molecule + * in the molecule list. + */ instance_id: int, + /** + * A reference to _struct_asym.id in the STRUCT_ASYM category. + */ asym_id: str, }, pdbx_molecule_features: { + /** + * The value of _pdbx_molecule_features.prd_id is the PDB accession code for this + * reference molecule. + */ prd_id: str, + /** + * Broadly defines the function of the molecule. + */ class: Aliased<'Antagonist' | 'Antibiotic' | 'Anticancer' | 'Anticoagulant' | 'Antifungal' | 'Antiinflammatory' | 'Antimicrobial' | 'Antineoplastic' | 'Antiparasitic' | 'Antiretroviral' | 'Anthelmintic' | 'Antithrombotic' | 'Antitumor' | 'Antiviral' | 'CASPASE inhibitor' | 'Chaperone binding' | 'Enzyme inhibitor' | 'Growth factor' | 'Immunosuppressant' | 'Inhibitor' | 'Lantibiotic' | 'Metabolism' | 'Metal transport' | 'Oxidation-reduction' | 'Receptor' | 'Thrombin inhibitor' | 'Trypsin inhibitor' | 'Toxin' | 'Transport activator' | 'Unknown' | 'Anticoagulant, Antithrombotic' | 'Antibiotic, Antimicrobial' | 'Antibiotic, Anthelmintic' | 'Antibiotic, Antineoplastic' | 'Antimicrobial, Antiretroviral' | 'Antimicrobial, Antitumor' | 'Antimicrobial, Antiparasitic, Antibiotic' | 'Thrombin inhibitor, Trypsin inhibitor'>(str), + /** + * Defines the structural classification of the molecule. + */ type: Aliased<'Amino acid' | 'Aminoglycoside' | 'Anthracycline' | 'Anthraquinone' | 'Ansamycin' | 'Chalkophore' | 'Chromophore' | 'Glycopeptide' | 'Cyclic depsipeptide' | 'Cyclic lipopeptide' | 'Cyclic peptide' | 'Heterocyclic' | 'Imino sugar' | 'Keto acid' | 'Lipoglycopeptide' | 'Lipopeptide' | 'Macrolide' | 'Non-polymer' | 'Nucleoside' | 'Oligopeptide' | 'Oligosaccharide' | 'Peptaibol' | 'Peptide-like' | 'Polycyclic' | 'Polypeptide' | 'Polysaccharide' | 'Quinolone' | 'Thiolactone' | 'Thiopeptide' | 'Siderophore' | 'Unknown' | 'Chalkophore, Polypeptide'>(str), + /** + * A name of the molecule. + */ name: str, + /** + * Additional details describing the molecule. + */ details: str, }, ihm_starting_model_details: { + /** + * A unique identifier for the starting structural model. + */ starting_model_id: str, + /** + * A unique identifier for the distinct molecular entities. + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY category. + */ entity_id: str, + /** + * A text description of the molecular entity + */ entity_description: str, + /** + * An asym/strand identifier for the entity molecule. + * This data item is a pointer to _struct_asym.id in the + * STRUCT_ASYM category. + */ asym_id: str, + /** + * The leading residue index for the sequence segment modeled using this starting model. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category. + */ seq_id_begin: int, + /** + * The trailing residue index for the sequence segment modeled using this starting model. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category. + */ seq_id_end: int, + /** + * The source of the starting model. + */ starting_model_source: Aliased<'comparative model' | 'experimental model' | 'integrative model' | 'ab initio model' | 'other'>(str), + /** + * The author assigned chainId/auth_asym_id corresponding to this starting model. + * This corresponds to the chainId/auth_asym_id of the experimental models in the + * PDB or comparative models in the Model Archive or the starting models referenced + * via a DOI. If starting models are included in IHM_STARTING_MODEL_COORD, then + * this will be the same as _ihm_starting_model_details.asym_id. + */ starting_model_auth_asym_id: str, + /** + * The offset in residue numbering between the starting model and the deposited I/H model, if applicable. + * I/H model residue number = Starting model residue number + offset + */ starting_model_sequence_offset: int, + /** + * Identifier to the starting model (comparative, experimental or integrative) + * used as input in the integrative modeling. + * This data item is a pointer to the _ihm_dataset_list.id in the + * IHM_DATASET_LIST category. + */ dataset_list_id: int, }, ihm_starting_comparative_models: { + /** + * A unique identifier for the starting comparative model. + */ ordinal_id: int, + /** + * The identifier for the starting structural model. + * This data item is a pointer to _ihm_starting_model_details.starting_model_id + * in the IHM_STARTING_MODEL_DETAILS category. + */ starting_model_id: str, + /** + * The chainId/auth_asym_id corresponding to the starting model. + */ starting_model_auth_asym_id: str, + /** + * The starting residue index of the starting model. + */ starting_model_seq_id_begin: int, + /** + * The ending residue index of the starting model. + */ starting_model_seq_id_end: int, + /** + * The chainId/auth_asym_id corresponding to the template. + */ template_auth_asym_id: str, + /** + * The starting residue index of the template. + */ template_seq_id_begin: int, + /** + * The ending residue index of the template. + */ template_seq_id_end: int, + /** + * The percentage sequence identity between the template sequence and the comparative model sequence. + */ template_sequence_identity: float, + /** + * The denominator used while calculating the sequence identity provided in + * _ihm_starting_comparative_models.template_sequence_identity. + */ template_sequence_identity_denominator: Aliased<'1' | '2' | '3' | '4' | '5'>(int), + /** + * The dataset list id corresponding to the template used to obtain the comparative model. + * This data item is a pointer to _ihm_dataset_list.id in the IHM_DATASET_LIST category. + */ template_dataset_list_id: int, + /** + * The file id corresponding to the sequence alignment of the template sequence and the comparative model sequence. + * This data item is a pointer to _ihm_external_files.id in the IHM_EXTERNAL_FILES category. + */ alignment_file_id: int, }, ihm_starting_model_seq_dif: { + /** + * A unique identifier for the entry. + */ ordinal_id: int, + /** + * A unique identifier for the distinct molecular entities. + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY category. + */ entity_id: str, + /** + * An asym/strand identifier for the entity molecule. + * This data item is a pointer to _struct_asym.id in the + * STRUCT_ASYM category. + */ asym_id: str, + /** + * The residue index. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category. + */ seq_id: int, + /** + * The component identifier for the residue. + * This data item is a pointer to _entity_poly_seq.mon_id in the ENTITY_POLY_SEQ category. + */ comp_id: str, + /** + * Unique identifier for the starting model record. + * This data item is a pointer to _ihm_starting_model_details.starting_model_id in the + * IHM_STARTING_MODEL_DETAILS category. + */ starting_model_id: str, + /** + * The asym/strand identifier for the entity molecule of the database starting model. + */ db_asym_id: str, + /** + * The corresponding residue index of the database starting model. + */ db_seq_id: int, + /** + * The correspinding component identifier for the residue in the database starting model. + */ db_comp_id: str, + /** + * A description of special aspects of the point differences + * between the sequence of the entity or biological unit described + * in the data block and that in the starting model referenced + * from a database. + */ details: str, }, ihm_model_representation: { + /** + * A unique identifier for the model details record. + */ ordinal_id: int, + /** + * An identifier that collects or groups together a set of representations. + * This data item may be used to identify a complete model representation. + */ representation_id: int, + /** + * An identifier for the residue range segment within the structural model. + */ segment_id: int, + /** + * A unique identifier distinct molecular entities. + * This data item is a pointer to _entity_poly_seq.entity_id in the + * ENTITY_POLY_SEQ category. + */ entity_id: str, + /** + * A text description of the molecular entity + */ entity_description: str, + /** + * An asym/strand identifier for the entity molecule. + * This data item is a pointer to _struct_asym.id in the + * STRUCT_ASYM category. + */ entity_asym_id: str, + /** + * The leading residue index for the sequence segment modeled using this starting model. + */ seq_id_begin: int, + /** + * The trailing residue index for the sequence segment modeled using this starting model. + */ seq_id_end: int, + /** + * The primitive object used to model this segment. + */ model_object_primitive: Aliased<'atomistic' | 'sphere' | 'gaussian' | 'other'>(str), + /** + * The identifier for the starting structural model. + * This data item is a pointer to _ihm_starting_model_details.starting_model_id + * in the IHM_STARTING_MODEL_DETAILS category. + */ starting_model_id: str, + /** + * The manner in which the segment is modeled. + */ model_mode: Aliased<'rigid' | 'flexible'>(str), + /** + * The level of detail at which model primitive objects are applied to the structure. + */ model_granularity: Aliased<'by-atom' | 'by-residue' | 'multi-residue' | 'by-feature'>(str), + /** + * The number of primitive objects used to model a feature in the case of 'by-feature' granularity. + */ model_object_count: int, }, ihm_struct_assembly: { + /** + * A unique identifier for the structural assembly description. + */ ordinal_id: int, + /** + * An identifier for the structural assembly. + * This data item will remain the same for all components + * of an assembly. + */ assembly_id: int, + /** + * The parent of this assembly in a hierarchy. + * This data item is an internal category pointer to + * _ihm_struct_assembly.assembly_id + * This data item should point to the assembly id of the immediate + * parent in a hierarchy. + * By convention, the full assembly (top of hierarchy) is assigned parent id 0 (zero). + * In case of assemblies that do not conform to a hierarchy, + * _ihm_struct_assembly.parent_assembly_id is the same as + * _ihm_struct_assembly.assembly_id indicating a self-parent. + */ parent_assembly_id: int, + /** + * A text description of the molecular entity + */ entity_description: str, + /** + * A unique identifier for distinct molecular entities. + * This data item is a pointer to _entity_poly_seq.entity_id in the + * ENTITY_POLY_SEQ category. + */ entity_id: str, + /** + * An asym/strand identifier for the component in the assembly. + * This data item is a pointer to _struct_asym.id in the + * STRUCT_ASYM category. + */ asym_id: str, + /** + * The starting residue index for the sequence segment of the entity instance + * that is part of the assembly. + */ seq_id_begin: int, + /** + * The ending residue index for the sequence segment of the entity instance + * that is part of the assembly. + */ seq_id_end: int, }, ihm_struct_assembly_details: { + /** + * A unique identifier for the structural assembly. + */ assembly_id: int, + /** + * A name for the structural assembly. + */ assembly_name: str, + /** + * Description of the structural assembly. + */ assembly_description: str, }, ihm_modeling_protocol: { + /** + * A unique identifier for the modeling protocol/step combination. + */ ordinal_id: int, + /** + * An index for the modeling protocol carried out. + */ protocol_id: int, + /** + * An index for a particular step within the modeling protocol. + */ step_id: int, + /** + * An index for the structural assembly being modeled. + * This is an indicator to whether the whole assembly is modeled + * or if only a subset of the structural assembly is modeled. + * This data item is a pointer to _ihm_struct_assembly.assembly_id in the + * IHM_STRUCT_ASSEMBLY category. The IHM_STRUCT_ASSEMBLY category provides the + * details regarding the different structural assemblies used in the modeling. + * The default value for this data item is "1", indicating that the entire + * assembly is being modeled. + */ struct_assembly_id: int, + /** + * An index for the dataset group being used in the modeling protocol. + * This data item is a pointer to the _ihm_dataset_group.group_id in the + * IHM_DATASET_GROUP category. + */ dataset_group_id: int, + /** + * A textual description of the structural assembly being modeled. + */ struct_assembly_description: str, + /** + * The name for the modeling protocol. + */ protocol_name: str, + /** + * The name or type of the modeling step. + */ step_name: str, + /** + * Description of the method involved in the modeling step. + */ step_method: str, + /** + * The number of models in the beginning of the step. + */ num_models_begin: int, + /** + * The number of models at the end of the step. + */ num_models_end: int, + /** + * A flag to indicate if the modeling is multi scale. + */ multi_scale_flag: Aliased<'YES' | 'NO'>(str), + /** + * A flag to indicate if the modeling is multi state. + */ multi_state_flag: Aliased<'YES' | 'NO'>(str), + /** + * A flag to indicate if the modeling involves an ensemble ordered by time or other order. + */ ordered_flag: Aliased<'YES' | 'NO'>(str), }, ihm_multi_state_modeling: { + /** + * A unique identifier for the multiple states being described. + */ ordinal_id: int, + /** + * An identifier for the particular state in the multi-state modeling. + */ state_id: int, + /** + * An identifier for a collections of states in the multi-state modeling. + * If the states do not need to be grouped into collections, then + * _ihm_multi_state_modeling.state_group_id is the same as + * _ihm_multi_state_modeling.state_id. + */ state_group_id: int, + /** + * A fraction representing the population of the particular state. + */ population_fraction: float, + /** + * The type that the multiple states being modeled belong to. + */ state_type: str, + /** + * A descriptive name for the state. + */ state_name: str, + /** + * The model group id corresponding to the particular state in the multi-state model. + * This data item is a pointer to _ihm_model_list.model_group_id in the + * IHM_MODEL_LIST category. + * If there is only a single model corresponding to a particular state, then the + * _ihm_model_list.model_group_id is the same as the _ihm_model_list.model_id. + */ model_group_id: int, + /** + * The type of multi-state modeling experiment carried out. + */ experiment_type: Aliased<'Fraction of bulk' | 'Single molecule'>(str), + /** + * Additional textual details of the multi-state modeling, if required. + */ details: str, }, ihm_modeling_post_process: { + /** + * A unique identifier for the post modeling analysis/step combination. + */ id: int, + /** + * An identifier for the modeling protocol, whose post modeling analysis + * is being carried out. + * This data item is a pointer to the _ihm_modeling_protocol.protocol_id + * in the IHM_MODELING_PROTOCOL category. + */ protocol_id: int, + /** + * An identifier for the post modeling analysis. This data item accounts for + * multiple post-modeling analyses that can be carried out. + */ analysis_id: int, + /** + * In a multi-step process, this identifier denotes the particular + * step in the post modeling analysis. + */ step_id: int, + /** + * The type of post modeling analysis being carried out. + */ type: Aliased<'filter' | 'cluster' | 'rescore' | 'validation' | 'other' | 'none'>(str), + /** + * The parameter/feature used in the post modeling analysis. + */ feature: Aliased<'energy/score' | 'RMSD' | 'dRMSD' | 'other' | 'none'>(str), + /** + * The number of models at the beginning of the post processing step. + */ num_models_begin: int, + /** + * The number of models the the end of the post processing step. + */ num_models_end: int, }, ihm_ensemble_info: { + /** + * A unique id for the ensemble. + */ ensemble_id: int, + /** + * An optional name for the cluster or ensemble for better description. + */ ensemble_name: str, + /** + * An identifier for the post modeling analyses carried out. + * This data item is a pointer to _ihm_modeling_post_process.id in + * the IHM_MODELING_POST_PROCESS category. + */ post_process_id: int, + /** + * An identifier for the cluster or group of models being deposited. + * This data item is a pointer to the _ihm_model_list.model_group_id + * in the IHM_MODEL_LIST category. + */ model_group_id: int, + /** + * The clustering method used to obtain the ensemble, if applicable. + */ ensemble_clustering_method: Aliased<'Hierarchical' | 'Partitioning (k-means)' | 'Other'>(str), + /** + * The parameter/feature used for clustering the models, if applicable. + */ ensemble_clustering_feature: Aliased<'RMSD' | 'dRMSD' | 'other'>(str), + /** + * The number of models in the current ensemble being described. + */ num_ensemble_models: int, + /** + * The number of models from the current ensemble that is deposited. + */ num_ensemble_models_deposited: int, + /** + * The precision of each cluster or ensemble is calculated as dRMSD, which + * is the average C-alpha distance root mean square deviation (dRMSD) + * between the individual models in the cluster and the cluster centroid. + * The cluster centroid is defined as the model with the minimal sum of + * dRMSDs to the other models in the cluster or ensemble. + */ ensemble_precision_value: float, + /** + * A reference to the external file containing the structural models + * in the ensemble. The number of models in the external file should + * correspond to the number of models in the ensemble. This data item + * is a pointer to _ihm_external_files.id in the IHM_EXTERNAL_FILES + * category. + * It is recommended that the large ensemble files be stored as separate + * zip files within the same DOI. It is also recommended that large sphere + * model ensembles be in binary format, which facilitates faster access. + * Currently, a binary dump of co-ordinates in dcd format is suggested. + * The topology can be inferred from the IHM_SPHERE_OBJ_SITE and the + * ATOM_SITE categories in the corresponding mmCIF file. + */ ensemble_file_id: int, }, ihm_model_list: { + /** + * A unique identifier for the model / model group combination. + */ ordinal_id: int, + /** + * A unique identifier for the structural model being deposited. + */ model_id: int, + /** + * An identifier to group structural models into collections or sets. + * This data item can be used to group models into structural clusters + * or using other criteria based on experimental data or other + * relationships such as those belonging to the same state or time stamp. + * An ensemble of models and its representative can either be grouped together + * or can be separate groups in the ihm_model_list table. The choice between + * the two options should be decided based on how the modeling was carried out + * and how the representative was chosen. If the representative is a member of + * the ensemble (i.e., best scoring model), then it is recommended that the + * representative and the ensemble belong to the same model group. If the + * representative is calculated from the ensemble (i.e., centroid), then it is + * recommended that the representative be separated into a different group. + * If the models do not need to be grouped into collections, then the + * _ihm_model_list.model_group_id is the same as _ihm_model_list.model_id. + */ model_group_id: int, + /** + * A decsriptive name for the model. + */ model_name: str, + /** + * A decsriptive name for the model group. + */ model_group_name: str, + /** + * An identifier to the structure assembly corresponding to the model. + * This data item is a pointer to the _ihm_struct_assembly.assembly_id + * in the IHM_STRUCT_ASSEMBLY category. + */ assembly_id: int, + /** + * An identifier to the modeling protocol that produced the model. + * This data item is a pointer to the _ihm_modeling_protocol.protocol_id + * in the IHM_MODELING_PROTOCOL category. + */ protocol_id: int, + /** + * An identifier to the multi-scale model representation id of the model. + * This data item is a pointer to the _ihm_model_representation.representation_id + * in the IHM_MODEL_REPRESENTATION category. + */ representation_id: int, }, ihm_model_representative: { + /** + * A unique identifier for the representative of the model group. + */ id: int, + /** + * The model group identifier corresponding to the representative model. + * This data item is a pointer to _ihm_model_list.model_group_id in the + * IHM_MODEL_LIST category. + */ model_group_id: int, + /** + * The model identifier corresponding to the representative model. + * This data item is a pointer to _ihm_model_list.model_id in the + * IHM_MODEL_LIST category. + */ model_id: int, + /** + * The selection criteria based on which the representative is chosen. + */ selection_criteria: Aliased<'medoid' | 'closest to the average' | 'lowest energy' | 'target function' | 'fewest violations' | 'minimized average structure' | 'best scoring model' | 'centroid' | 'other selction criteria'>(str), }, ihm_dataset_list: { + /** + * A unique identifier for the dataset. + */ id: int, + /** + * The type of data held in the dataset. + */ data_type: Aliased<'NMR data' | '3DEM volume' | '2DEM class average' | 'EM raw micrographs' | 'SAS data' | 'CX-MS data' | 'Mass Spectrometry data' | 'EPR data' | 'H/D exchange data' | 'Single molecule FRET data' | 'Experimental model' | 'Comparative model' | 'Integrative model' | 'De Novo model' | 'Predicted contacts' | 'Mutagenesis data' | 'DNA footprinting data' | 'Yeast two-hybrid screening data' | 'Other'>(str), + /** + * A flag that indicates whether the dataset is archived in + * an IHM related database or elsewhere. + */ database_hosted: Aliased<'YES' | 'NO'>(str), }, ihm_dataset_group: { + /** + * A unique identifier for the entry. + */ ordinal_id: int, + /** + * An identifier for the dataset group. + */ group_id: int, + /** + * An identifier to the dataset. This data item is a pointer to + * _ihm_dataset_list.id in the IHM_DATASET_LIST category. + */ dataset_list_id: int, }, ihm_related_datasets: { + /** + * A unique identifier for the entry. + */ ordinal_id: int, + /** + * The dataset list id corresponding to the derived dataset. + * This data item is a pointer to _ihm_dataset_list.id in the + * IHM_DATASET_LIST category. + */ dataset_list_id_derived: int, + /** + * The primary dataset list id from which the corresponding derived dataset is obtained. + * This data item is a pointer to _ihm_dataset_list.id in the + * IHM_DATASET_LIST category. + */ dataset_list_id_primary: int, }, ihm_dataset_related_db_reference: { + /** + * A unique identifier for the related database entry. + */ id: int, + /** + * Identifier to the dataset list used in the IHM modeling. + * This data item is a pointer to the _ihm_dataset_list.id in the + * IHM_DATASET_LIST category. + */ dataset_list_id: int, + /** + * The name of the database containing the dataset entry. + */ db_name: Aliased<'PDB' | 'BMRB' | 'EMDB' | 'EMPIAR' | 'SASBDB' | 'PRIDE' | 'MODEL ARCHIVE' | 'MASSIVE' | 'BioGRID' | 'Other'>(str), + /** + * The accession code for the database entry. + */ accession_code: str, + /** + * Version of the database entry, if the database allows versioning. + */ version: str, + /** + * Details regarding the dataset entry. + */ details: str, }, ihm_external_reference_info: { + /** + * A unique identifier for the external reference. + */ reference_id: int, + /** + * The name of the reference provider. + */ reference_provider: str, + /** + * The type of external reference. + * Currently, only Digital Object Identifiers (DOIs) and supplementary files + * stored locally are supported. + */ reference_type: Aliased<'DOI' | 'Supplementary Files'>(str), + /** + * The external reference or the Digital Object Identifier (DOI). + * This field is not relevant for local files. + */ reference: str, + /** + * The type of object that the external reference points to, usually + * a single file or an archive. + */ refers_to: Aliased<'File' | 'Archive' | 'Publication' | 'Other'>(str), + /** + * The Uniform Resource Locator (URL) corresponding to the external reference (DOI). + * This URL should link to the corresponding downloadable file or archive and is provided + * to enable automated software to download the referenced file or archive. + */ associated_url: str, }, ihm_external_files: { + /** + * A unique identifier for each external file. + */ id: int, + /** + * A pointer to the source of the external file - either DOI or locally stored. + * This data item is a pointer to _ihm_external_reference_info.reference_id in the + * IHM_EXTERNAL_REFERENCE_INFO category. + */ reference_id: int, + /** + * The relative path (including filename) for each external file. + * Absolute paths (starting with "/") are not permitted. + * This is required for identifying individual files from within + * a tar-zipped archive file or for identifying supplementary local + * files organized within a directory structure. + * This data item assumes a POSIX-like directory structure or file path. + */ file_path: str, + /** + * The type of content in the file. + */ content_type: Aliased<'Input data or restraints' | 'Modeling or post-processing output' | 'Modeling workflow or script' | 'Visualization script' | 'Other'>(str), + /** + * Storage size of the external file in bytes. + */ file_size_bytes: float, + /** + * Textual description of what the external file is. + */ details: str, }, ihm_dataset_external_reference: { + /** + * A unique identifier for the external data. + */ id: int, + /** + * Identifier to the dataset list used in the I/H modeling. + * This data item is a pointer to the _ihm_dataset_list.id in the + * IHM_DATASET_LIST category. + */ dataset_list_id: int, + /** + * The file id corresponding to this external data file. + * This data item is a pointer to _ihm_external_files.id + * in the IHM_EXTERNAL_FILES category. + */ file_id: int, }, ihm_localization_density_files: { + /** + * A unique identifier. + */ id: int, + /** + * The file id for the externally stored localization density file. + * This data item is a pointer to _ihm_external_files.id + * in the IHM_EXTERNAL_FILES category. + */ file_id: int, + /** + * The ensemble identifier for the ensemble, for which the localization density is provided. + * This data item is a pointer to _ihm_ensemble_info.ensemble_id in the IHM_ENSEMBLE_INFO category. + */ ensemble_id: int, + /** + * The entity identifier corresponding to this localization density. + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY category. + */ entity_id: str, + /** + * The leading sequence index corresponding to this localization density. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY category. + */ seq_id_begin: int, + /** + * The trailing sequence index corresponding to this localization density. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY category. + */ seq_id_end: int, + /** + * An asym/strand identifier corresponding to this localization density. + * This data item is a pointer to _struct_asym.id in the STRUCT_ASYM category. + */ asym_id: str, }, ihm_predicted_contact_restraint: { + /** + * A unique identifier for the predicted contact restraint. + */ id: int, + /** + * An identifier to group the predicted contacts. + */ group_id: int, + /** + * The entity identifier for the first monomer partner in the predicted contact. + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY_SEQ category. + */ entity_id_1: str, + /** + * The entity identifier for the second monomer partner in the predicted contact. + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY_SEQ category. + */ entity_id_2: str, + /** + * An asym/strand identifier for the first monomer partner in the predicted contact. + * This data item is a pointer to _struct_asym.id in the + * STRUCT_ASYM category. + */ asym_id_1: str, + /** + * An asym/strand identifier for the second monomer partner in the predicted contact. + * This data item is a pointer to _struct_asym.id in the + * STRUCT_ASYM category. + */ asym_id_2: str, + /** + * The component identifier for the first monomer partner in the predicted contact. + * This data item is a pointer to _entity_poly_seq.mon_id in the ENTITY_POLY_SEQ category. + */ comp_id_1: str, + /** + * The component identifier for the second monomer partner in the predicted contact. + * This data item is a pointer to _entity_poly_seq.mon_id in the ENTITY_POLY_SEQ category. + */ comp_id_2: str, + /** + * The sequence index for the first monomer partner in the predicted contact. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category. + */ seq_id_1: int, + /** + * The sequence index for the second monomer partner in the predicted contact. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category. + */ seq_id_2: int, + /** + * The atom id of the first partner in the predicted contact. + * This data item is a pointer to _chem_comp_atom.atom_id in the + * CHEM_COMP_ATOM category. + */ atom_id_1: str, + /** + * The atom id of the second partner in the predicted contact. + * This data item is a pointer to _chem_comp_atom.atom_id in the + * CHEM_COMP_ATOM category. + */ atom_id_2: str, + /** + * The lower limit to the distance threshold applied to this predicted contact restraint + * in the integrative modeling task. + */ distance_lower_limit: float, + /** + * The upper limit to the distance threshold applied to this predicted contact restraint + * in the integrative modeling task. + */ distance_upper_limit: float, + /** + * The real number that indicates the probability that the predicted distance restraint + * is correct. This number should fall between 0.0 and 1.0. + */ probability: float, + /** + * The type of distance restraint applied. + */ restraint_type: Aliased<'lower bound' | 'upper bound' | 'lower and upper bound'>(str), + /** + * The granularity of the predicted contact as applied to the multi-scale model. + */ model_granularity: Aliased<'by-residue' | 'by-feature' | 'by-atom'>(str), + /** + * Identifier to the predicted contacts dataset. + * This data item is a pointer to the _ihm_dataset_list.id in the + * IHM_DATASET_LIST category. + */ dataset_list_id: int, + /** + * Identifier to the software used to obtain the predicted contacts dataset. + * This data item is a pointer to the _software.pdbx_ordinal in the + * SOFTWARE category. + */ software_id: int, }, ihm_cross_link_list: { + /** + * A unique identifier for the cross link restraint. + */ id: int, + /** + * An identifier for a set of ambiguous crosslink restraints. + * Handles experimental uncertainties in the identities of + * crosslinked residues. + */ group_id: int, + /** + * A text description of molecular entity 1. + */ entity_description_1: str, + /** + * A text description of molecular entity 2. + */ entity_description_2: str, + /** + * The entity identifier for the first monomer partner in the cross link + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY_SEQ category. + */ entity_id_1: str, + /** + * The entity identifier for the second monomer partner in the cross link + * + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY_SEQ category. + */ entity_id_2: str, + /** + * The component identifier for the first monomer partner in the cross link. + * + * This data item is a pointer to _entity_poly_seq.mon_id in the ENTITY_POLY_SEQ category. + */ comp_id_1: str, + /** + * The component identifier for the second monomer partner in the cross link. + * + * This data item is a pointer to _entity_poly_seq.mon_id in the ENTITY_POLY_SEQ category. + */ comp_id_2: str, + /** + * The sequence index for the first monomer partner in the cross link. + * + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category. + */ seq_id_1: int, + /** + * The sequence index for the second monomer partner in the cross link. + * + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category. + */ seq_id_2: int, + /** + * The type of crosslinker used. + */ linker_type: Aliased<'EDC' | 'DSS' | 'EGS' | 'BS3' | 'BS2G' | 'DST' | 'sulfo-SDA' | 'sulfo-SMCC' | 'Other'>(str), + /** + * Identifier to the crosslinking dataset. + * This data item is a pointer to the _ihm_dataset_list.id in the + * IHM_DATASET_LIST category. + */ dataset_list_id: int, }, ihm_cross_link_restraint: { + /** + * A unique identifier for the cross link record. + */ id: int, + /** + * An identifier for a set of ambiguous cross-links. + * Handles implementation uncertainties related to multiple copies of subunit. + * This data item is a pointer to _ihm_cross_link_list.id in the + * IHM_CROSS_LINK_LIST category. + */ group_id: int, + /** + * The entity identifier for the first monomer partner in the cross link + * + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY_SEQ category + * and the _ihm_cross_link_restraint.entity_id_1 in the IHM_CROSS_LINK_RESTRAINT category. + */ entity_id_1: str, + /** + * The entity identifier for the second monomer partner in the cross link + * + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY_SEQ category + * and the _ihm_cross_link_restraint.entity_id_2 in the IHM_CROSS_LINK_RESTRAINT category. + */ entity_id_2: str, + /** + * An asym/strand identifier for the first monomer partner in the cross-link. + * + * This data item is a pointer to _struct_asym.id in the + * STRUCT_ASYM category. + */ asym_id_1: str, + /** + * An asym/strand identifier for the second monomer partner in the cross-link. + * + * This data item is a pointer to _struct_asym.id in the + * STRUCT_ASYM category. + */ asym_id_2: str, + /** + * The component identifier for the first monomer partner in the cross link. + * + * This data item is a pointer to _entity_poly_seq.mon_id in the ENTITY_POLY_SEQ category + * and the _ihm_cross_link_restraint.comp_id_1 in the IHM_CROSS_LINK_RESTRAINT category. + */ comp_id_1: str, + /** + * The component identifier for the second monomer partner in the cross link. + * + * This data item is a pointer to _entity_poly_seq.mon_id in the ENTITY_POLY_SEQ category + * and the _ihm_cross_link_restraint.comp_id_2 in the IHM_CROSS_LINK_RESTRAINT category. + */ comp_id_2: str, + /** + * The sequence index for the first monomer partner in the cross link. + * + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category + * and the _ihm_cross_link_restraint.seq_id_1 in the IHM_CROSS_LINK_RESTRAINT category. + */ seq_id_1: int, + /** + * The sequence index for the second monomer partner in the cross link. + * + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category + * and the _ihm_cross_link_restraint.seq_id_2 in the IHM_CROSS_LINK_RESTRAINT category. + */ seq_id_2: int, + /** + * The atom identifier for the first monomer partner in the cross link. + * This data item is a pointer to _chem_comp_atom.atom_id in the + * CHEM_COMP_ATOM category. + */ atom_id_1: str, + /** + * The atom identifier for the second monomer partner in the cross link. + * This data item is a pointer to _chem_comp_atom.atom_id in the + * CHEM_COMP_ATOM category. + */ atom_id_2: str, + /** + * The type of the cross link restraint applied. + */ restraint_type: Aliased<'harmonic' | 'upper bound' | 'lower bound'>(str), + /** + * The cross link conditionality. + */ conditional_crosslink_flag: Aliased<'ALL' | 'ANY'>(str), + /** + * The coarse-graining information for the crosslink implementation. + */ model_granularity: Aliased<'by-residue' | 'by-feature' | 'by-atom'>(str), + /** + * The distance threshold applied to this crosslink in the integrative modeling task. + */ distance_threshold: float, + /** + * The uncertainty in the crosslinking experimental data; + * may be approximated to the false positive rate. + */ psi: float, + /** + * The uncertainty in the position of residue 1 in the crosslink + * arising due to the multi-scale nature of the model represention. + */ sigma_1: float, + /** + * The uncertainty in the position of residue 2 in the crosslink + * arising due to the multi-scale nature of the model represention. + */ sigma_2: float, }, ihm_cross_link_result_parameters: { + /** + * A unique identifier for the restraint/model combination. + */ ordinal_id: int, + /** + * An identifier for the crosslink restraint between a pair of residues. + * This data item is a pointer to _ihm_cross_link_restraint.id in the + * IHM_CROSS_LINK_RESTRAINT category. + */ restraint_id: int, + /** + * The model number corresponding to the cross link result presented. + * This data item is a pointer to _ihm_model_list.model_id in the + * IHM_MODEL_LIST category. + */ model_id: int, + /** + * The uncertainty in the crosslinking experimental data; + * May be approximated to the false positive rate. + */ psi: float, + /** + * The uncertainty in the position of residue 1 in the crosslink + * arising due to the multi-scale nature of the model represention. + */ sigma_1: float, + /** + * The uncertainty in the position of residue 2 in the crosslink + * arising due to the multi-scale nature of the model represention. + */ sigma_2: float, }, ihm_2dem_class_average_restraint: { + /** + * A unique identifier for the 2dem class average. + */ id: int, + /** + * Identifier to the 2dem class average dataset. + * This data item is a pointer to the _ihm_dataset_list.id in the + * IHM_DATASET_LIST category. + */ dataset_list_id: int, + /** + * The number of raw micrographs used to obtain the class average. + */ number_raw_micrographs: int, + /** + * Pixel size width of the 2dem class average image. + * While fitting the model to the image, _ihm_2dem_class_average_restraint.pixel_size_width + * is used along with _ihm_2dem_class_average_restraint.pixel_size_height to scale the image. + */ pixel_size_width: float, + /** + * Pixel size height of the 2dem class average image. + * While fitting the model to the image, _ihm_2dem_class_average_restraint.pixel_size_height + * is used along with _ihm_2dem_class_average_restraint.pixel_size_width to scale the image. + */ pixel_size_height: float, + /** + * Resolution of the 2dem class average. + */ image_resolution: float, + /** + * A flag that indicates whether or not the 2DEM class average image is segmented i.e., + * whether the whole image is used or only a portion of it is used (by masking + * or by other means) as restraint in the modeling. + */ image_segment_flag: Aliased<'YES' | 'NO'>(str), + /** + * Number of 2D projections of the model used in the fitting. + */ number_of_projections: int, + /** + * An indicator to whether the whole assembly that is modeled is fit into the image + * or if only a subset of the structural assembly is fit into the image. + * This data item is a pointer to _ihm_struct_assembly.assembly_id in the + * IHM_STRUCT_ASSEMBLY category. The IHM_STRUCT_ASSEMBLY category provides the + * details regarding the different structural assemblies used in the modeling. + * The default value for this data item is "1" indicating that the entire assembly + * being modeled is fit into the EM data. + */ struct_assembly_id: int, + /** + * Details of how the 2DEM restraint is applied in the modeling algorithm. + */ details: str, }, ihm_2dem_class_average_fitting: { + /** + * A unique identifier for the 2dem class average fitting data. + */ ordinal_id: int, + /** + * Identifier to the 2dem class average restraint. + * This data item is a pointer to the _ihm_2dem_class_average_restraint.id in the + * IHM_2DEM_CLASS_AVERAGE_RESTRAINT category. + */ restraint_id: int, + /** + * The model number corresponding to the 2DEM fitting result presented. + * This data item is a pointer to _ihm_model_list.model_id in the + * IHM_MODEL_LIST category. + */ model_id: int, + /** + * The cross correlation coefficient corresponding to the model to image fitting. + */ cross_correlation_coefficient: float, + /** + * Data item of the rotation matrix used in the fitting of the model to the image. + */ rot_matrix: Matrix(3, 3), + /** + * Data item of the tranlation vector used in the fitting of the model to the image. + */ tr_vector: Vector(3), }, ihm_3dem_restraint: { + /** + * A unique identifier for the 3DEM restraint description. + */ ordinal_id: int, + /** + * Identifier to the 3DEM map used. + * This data item is a pointer to the _ihm_dataset_list.id in the + * IHM_DATASET_LIST category. + */ dataset_list_id: int, + /** + * The model number corresponding to the 3DEM fitting result presented. + * This data item is a pointer to _ihm_model_list.model_id in the + * IHM_MODEL_LIST category. + */ model_id: int, + /** + * An indicator to whether the whole assembly that is modeled is fit into the 3DEM map + * or if only a subset of the structural assembly is fit into the map. + * This data item is a pointer to _ihm_struct_assembly.assembly_id in the + * IHM_STRUCT_ASSEMBLY category. The IHM_STRUCT_ASSEMBLY category provides the + * details regarding the different structural assemblies used in the modeling. + * The default value for this data item is "1" indicating that the entire assembly + * being modeled is fit into the EM map. + */ struct_assembly_id: int, + /** + * Method used to fit the model to the 3DEM map. + */ fitting_method: str, + /** + * In case of Gaussian mixture models, the number of gaussians + * is a parameter used to covert the 3DEM maps and models into + * GMMs. This captures the level of granularity used in + * representing the maps and/or models as 3D Gaussians. + */ number_of_gaussians: int, + /** + * The cross correlation coefficient corresponding to the model to map fitting. + */ cross_correlation_coefficient: float, }, ihm_sas_restraint: { + /** + * A unique identifier for the SAS restraint description. + */ ordinal_id: int, + /** + * Identifier to the SAS data used. + * This data item is a pointer to the _ihm_dataset_list.id in the + * IHM_DATASET_LIST category. + */ dataset_list_id: int, + /** + * The model number corresponding to the SAS fitting result presented. + * This data item is a pointer to _ihm_model_list.model_id in the + * IHM_MODEL_LIST category. + */ model_id: int, + /** + * An indicator to whether the whole assembly that is modeled is fit into the SAS data + * or if only a subset of the structural assembly is fit into the data. + * This data item is a pointer to _ihm_struct_assembly.assembly_id in the + * IHM_STRUCT_ASSEMBLY category. The IHM_STRUCT_ASSEMBLY category provides the + * details regarding the different structural assemblies used in the modeling. + * The default value for this data item is "1" indicating that the entire assembly + * being modeled is fit into the SAS data. + */ struct_assembly_id: int, + /** + * A flag that indicates whether or not the SAS profile is segmented i.e., + * whether the whole SAS profile is used or only a portion of it is used + * (by masking or by other means) as restraint in the modeling. + */ profile_segment_flag: Aliased<'YES' | 'NO'>(str), + /** + * The type of atoms in the model fit to the SAS data. + */ fitting_atom_type: str, + /** + * The method used for fitting the model to the SAS data. + */ fitting_method: str, + /** + * An indicator to single or multiple state fitting. + */ fitting_state: Aliased<'Single' | 'Multiple'>(str), + /** + * Radius of gyration obtained from the SAS profile, if used as input restraint. + */ radius_of_gyration: float, + /** + * The chi value resulting from fitting the model to the SAS data. + */ chi_value: float, + /** + * Additional details regarding the SAS restraint used. + */ details: str, }, ihm_starting_model_coord: { + /** + * A unique identifier for this coordinate position. + */ ordinal_id: int, + /** + * The identifier for the starting structural model. + * This data item is a pointer to _ihm_starting_model_details.starting_model_id + * in the IHM_STARTING_MODEL_DETAILS category. + */ starting_model_id: str, + /** + * The group of atoms to which the atom site in the starting model belongs. This data + * item is provided for compatibility with the original Protein Data Bank format, + * and only for that purpose. + */ group_PDB: Aliased<'ATOM' | 'HETATM'>(str), + /** + * The serial number for this coordinate position. + */ id: int, + /** + * The atom type symbol(element symbol) corresponding to this coordinate position. + */ type_symbol: str, + /** + * The entity identifier corresponding to this coordinate position. + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY category. + */ entity_id: str, + /** + * The atom identifier/name corresponding to this coordinate position. + * This data item is a pointer to _chem_comp_atom.atom_id in the + * CHEM_COMP_ATOM category. + */ atom_id: str, + /** + * The component identifier corresponding to this coordinate position. + * This data item is a pointer to _entity_poly_seq.mon_id in the ENTITY_POLY category. + */ comp_id: str, + /** + * The sequence index corresponding this to coordinate position. + * + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY category. + */ seq_id: int, + /** + * The asym/strand id corresponding to this coordinate position. + * + * This data item is a pointer to _struct_asym.id in the STRUCT_ASYM category. + */ asym_id: str, + /** + * The Cartesian X component corresponding to this coordinate position. + */ Cartn_x: float, + /** + * The Cartesian Y component corresponding to this coordinate position. + */ Cartn_y: float, + /** + * The Cartesian Z component corresponding to this coordinate position. + */ Cartn_z: float, + /** + * The isotropic temperature factor corresponding to this coordinate position. + */ B_iso_or_equiv: float, }, ihm_sphere_obj_site: { + /** + * A unique identifier for this pseudo atom / sphere object. + */ ordinal_id: int, + /** + * The entity identifier corresponding to this sphere object. + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY category. + */ entity_id: str, + /** + * The leading sequence index corresponding to this sphere object. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY category. + */ seq_id_begin: int, + /** + * The trailing sequence index corresponding to this sphere object. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY category. + */ seq_id_end: int, + /** + * An asym/strand identifier corresponding to this sphere object. + * This data item is a pointer to _struct_asym.id in the STRUCT_ASYM category. + */ asym_id: str, + /** + * The Cartesian X component corresponding to this sphere object. + */ Cartn_x: float, + /** + * The Cartesian Y component corresponding to this sphere object. + */ Cartn_y: float, + /** + * The Cartesian Z component corresponding to this sphere object. + */ Cartn_z: float, + /** + * The radius associated with the primitive sphere object at this position. + */ object_radius: float, + /** + * The Root Mean Square Fluctuation (RMSF) observed in the primitive + * sphere object at this position. + */ rmsf: float, + /** + * The model id corresponding to the sphere object. + * This data item is a pointer to _ihm_model_list.model_id + * in the IHM_MODEL_LIST category. + */ model_id: int, }, ihm_gaussian_obj_site: { + /** + * A unique identifier for this gaussian object in the model. + */ ordinal_id: int, + /** + * The entity identifier corresponding to this gaussian object. + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY category. + */ entity_id: str, + /** + * The leading sequence index corresponding to this gaussian object. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY category. + */ seq_id_begin: int, + /** + * The trailing sequence index corresponding to this gaussian object. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY category. + */ seq_id_end: int, + /** + * An asym/strand identifier corresponding to this gaussian object. + * This data item is a pointer to _struct_asym.id in the STRUCT_ASYM category. + */ asym_id: str, + /** + * The mean Cartesian X component corresponding to this gaussian object. + */ mean_Cartn_x: float, + /** + * The mean Cartesian Y component corresponding to this gaussian object. + */ mean_Cartn_y: float, + /** + * The mean Cartesian Z component corresponding to this gaussian object. + */ mean_Cartn_z: float, + /** + * The weight of the gaussian object. + */ weight: float, + /** + * Data item of the covariance matrix representing the Gaussian object. + */ covariance_matrix: Matrix(3, 3), + /** + * The model id corresponding to the gaussian object. + * This data item is a pointer to _ihm_model_list.model_id + * in the IHM_MODEL_LIST category. + */ model_id: int, }, ihm_gaussian_obj_ensemble: { + /** + * A unique identifier for this gaussian object. + */ ordinal_id: int, + /** + * The entity identifier corresponding to this gaussian object. + * This data item is a pointer to _entity_poly_seq.entity_id in the ENTITY_POLY category. + */ entity_id: str, + /** + * The leading sequence index corresponding to this gaussian object. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY category. + */ seq_id_begin: int, + /** + * The trailing sequence index corresponding to this gaussian object. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY category. + */ seq_id_end: int, + /** + * An asym/strand identifier corresponding to this gaussian object. + * This data item is a pointer to _struct_asym.id in the STRUCT_ASYM category. + */ asym_id: str, + /** + * The mean Cartesian X component corresponding to this gaussian object. + */ mean_Cartn_x: float, + /** + * The mean Cartesian Y component corresponding to this gaussian object. + */ mean_Cartn_y: float, + /** + * The mean Cartesian Z component corresponding to this gaussian object. + */ mean_Cartn_z: float, + /** + * The weight of the gaussian object. + */ weight: float, + /** + * Data item of the covariance matrix representing the Gaussian object. + */ covariance_matrix: Matrix(3, 3), + /** + * The ensemble id corresponding to the gaussian object. + * This data item is a pointer to _ihm_ensemble_info.ensemble_id + * in the IHM_ENSEMBLE_INFO category. + */ ensemble_id: int, }, ihm_feature_list: { + /** + * A unique identifier for the feature. + */ feature_id: int, + /** + * The type of feature. + */ feature_type: Aliased<'atom' | 'residue' | 'residue range'>(str), + /** + * The type of entity. + * This data item is a pointer to _entity.type in the ENTITY category. + */ entity_type: Aliased<'polymer' | 'non-polymer' | 'macrolide' | 'water'>(str), }, ihm_poly_residue_feature: { + /** + * A unique identifier for the category. + */ ordinal_id: int, + /** + * An identifier for the selected residue / residue range feature. + * This data item is a pointer to _ihm_feature_list.feature_id in the + * IHM_FEATURE_LIST category. + */ feature_id: int, + /** + * The entity identifier for residue / residue range. + * This data item is a pointer to _entity_poly_seq.entity_id in the + * ENTITY_POLY_SEQ category. + */ entity_id: str, + /** + * An asym/strand identifier for the residue / residue range. + * This data item is a pointer to _struct_asym.id in the + * STRUCT_ASYM category. + */ asym_id: str, + /** + * The component identifier of the beginning residue / residue range. + * This data item is a pointer to _entity_poly_seq.mon_id in the ENTITY_POLY_SEQ category. + */ comp_id_begin: str, + /** + * The component identifier of the ending residue / residue range. + * This data item is a pointer to _entity_poly_seq.mon_id in the ENTITY_POLY_SEQ category. + */ comp_id_end: str, + /** + * The sequence index of the beginning residue / residue range. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category. + */ seq_id_begin: int, + /** + * The sequence index of the ending residue / residue range. + * This data item is a pointer to _entity_poly_seq.num in the ENTITY_POLY_SEQ category. + */ seq_id_end: int, }, ihm_derived_distance_restraint: { + /** + * A unique identifier for the derived distance restraint. + */ id: int, + /** + * An identifier to group the distance restraints. + * This can be the same as the _ihm_derived_distance_restraint.id in case + * the some of the restraints are not grouped. + */ group_id: int, + /** + * The feature identifier for the first partner in the distance restraint. + * This data item is a pointer to _ihm_feature_list.feature_id in the + * IHM_FEATURE_LIST category. + */ feature_id_1: int, + /** + * The feature identifier for the second partner in the distance restraint. + * This data item is a pointer to _ihm_feature_list.feature_id in the + * IHM_FEATURE_LIST category. + */ feature_id_2: int, + /** + * If a group of atoms or residues are restrained, this data item defines + * the conditionality based on which the restraint is applied in the modeling. + */ group_conditionality: Aliased<'ALL' | 'ANY'>(str), + /** + * The fraction of randomly excluded distance restraints during modeling. + * In HADDOCK, this is used along with ambiguous interface restraints (AIRs) + * to account for uncertainties in AIRs. + */ random_exclusion_fraction: float, + /** + * The upper limit to the distance threshold applied to this distance restraint + * in the integrative modeling task. + */ distance_upper_limit: float, + /** + * The type of distance restraint applied. + */ restraint_type: Aliased<'lower bound' | 'upper bound' | 'lower and upper bound'>(str), + /** + * Identifier to the input data from which the distance restraint is derived. + * This data item is a pointer to the _ihm_dataset_list.id in the + * IHM_DATASET_LIST category. + */ dataset_list_id: int, }, } diff --git a/src/mol-model/structure/model/formats/mmcif/atomic.ts b/src/mol-model/structure/model/formats/mmcif/atomic.ts index 005dfc7ff..69327f011 100644 --- a/src/mol-model/structure/model/formats/mmcif/atomic.ts +++ b/src/mol-model/structure/model/formats/mmcif/atomic.ts @@ -73,7 +73,7 @@ function getConformation(atom_site: AtomSite): AtomicConformation { } function isHierarchyDataEqual(a: AtomicData, b: AtomicData) { - // need to cast because of how TS handles type resolution for interfaces https://github.com/Microsoft/TypeScript/issues/15300 + // TODO need to cast because of how TS handles type resolution for interfaces https://github.com/Microsoft/TypeScript/issues/15300 return Table.areEqual(a.chains as Table<ChainsSchema>, b.chains as Table<ChainsSchema>) && Table.areEqual(a.residues as Table<ResiduesSchema>, b.residues as Table<ResiduesSchema>) && Table.areEqual(a.atoms as Table<AtomsSchema>, b.atoms as Table<AtomsSchema>) diff --git a/src/mol-util/index.ts b/src/mol-util/index.ts index 9c1aa24bf..b7c5b083f 100644 --- a/src/mol-util/index.ts +++ b/src/mol-util/index.ts @@ -183,4 +183,9 @@ export function formatProgress(p: Progress) { if (tp.isIndeterminate) return tp.message; const x = (100 * tp.current / tp.max).toFixed(2); return `${tp.message} ${x}%`; +} + +const reLine = /^/mg +export function indentString(str: string, count: number, indent: string) { + return count === 0 ? str : str.replace(reLine, indent.repeat(count)) } \ No newline at end of file -- GitLab