Переглянути джерело

added code generated mmcif schema based on popular fields

Alexander Rose 7 роки тому
батько
коміт
c36c3f0d13

+ 163 - 0
data/mmcif-popular-field-names.csv

@@ -0,0 +1,163 @@
+entity.id
+entity.type
+entity.src_method
+entity.pdbx_description
+entity.formula_weight
+entity.pdbx_number_of_molecules
+entity.details
+entity.pdbx_mutation
+entity.pdbx_fragment
+entity.pdbx_ec
+
+exptl.entry_id
+exptl.method
+
+cell.entry_id
+cell.length_a
+cell.length_b
+cell.length_c
+cell.angle_alpha
+cell.angle_beta
+cell.angle_gamma
+cell.Z_PDB
+cell.pdbx_unique_axis
+
+symmetry.entry_id
+symmetry.space_group_name_H-M
+symmetry.pdbx_full_space_group_name_H
+symmetry.cell_setting
+symmetry.Int_Tables_number
+symmetry.space_group_name_Hall
+
+struct_conf.conf_type_id
+struct_conf.id
+struct_conf.pdbx_PDB_helix_id
+struct_conf.beg_label_comp_id
+struct_conf.beg_label_asym_id
+struct_conf.beg_label_seq_id
+struct_conf.pdbx_beg_PDB_ins_code
+struct_conf.end_label_comp_id
+struct_conf.end_label_asym_id
+struct_conf.end_label_seq_id
+struct_conf.pdbx_end_PDB_ins_code
+struct_conf.beg_auth_comp_id
+struct_conf.beg_auth_asym_id
+struct_conf.beg_auth_seq_id
+struct_conf.end_auth_comp_id
+struct_conf.end_auth_asym_id
+struct_conf.end_auth_seq_id
+struct_conf.pdbx_PDB_helix_class
+struct_conf.details
+struct_conf.pdbx_PDB_helix_length
+
+struct_sheet_range.sheet_id
+struct_sheet_range.id
+struct_sheet_range.beg_label_comp_id
+struct_sheet_range.beg_label_asym_id
+struct_sheet_range.beg_label_seq_id
+struct_sheet_range.pdbx_beg_PDB_ins_code
+struct_sheet_range.end_label_comp_id
+struct_sheet_range.end_label_asym_id
+struct_sheet_range.end_label_seq_id
+struct_sheet_range.pdbx_end_PDB_ins_code
+struct_sheet_range.beg_auth_comp_id
+struct_sheet_range.beg_auth_asym_id
+struct_sheet_range.beg_auth_seq_id
+struct_sheet_range.end_auth_comp_id
+struct_sheet_range.end_auth_asym_id
+struct_sheet_range.end_auth_seq_id
+
+struct_conn.id
+struct_conn.conn_type_id
+struct_conn.pdbx_PDB_id
+struct_conn.ptnr1_label_asym_id
+struct_conn.ptnr1_label_comp_id
+struct_conn.ptnr1_label_seq_id
+struct_conn.ptnr1_label_atom_id
+struct_conn.pdbx_ptnr1_label_alt_id
+struct_conn.pdbx_ptnr1_PDB_ins_code
+struct_conn.pdbx_ptnr1_standard_comp_id
+struct_conn.ptnr1_symmetry
+struct_conn.ptnr2_label_asym_id
+struct_conn.ptnr2_label_seq_id
+struct_conn.ptnr2_label_atom_id
+struct_conn.pdbx_ptnr2_label_alt_id
+struct_conn.pdbx_ptnr2_PDB_ins_code
+struct_conn.ptnr1_auth_asym_id
+struct_conn.ptnr1_auth_comp_id
+struct_conn.ptnr1_auth_seq_id
+struct_conn.ptnr2_auth_asym_id
+struct_conn.ptnr2_auth_comp_id
+struct_conn.ptnr2_auth_seq_id
+struct_conn.ptnr2_symmetry
+struct_conn.pdbx_ptnr3_label_atom_id
+struct_conn.pdbx_ptnr3_label_seq_id
+struct_conn.pdbx_ptnr3_label_comp_id
+struct_conn.pdbx_ptnr3_label_asym_id
+struct_conn.pdbx_ptnr3_label_alt_id
+struct_conn.pdbx_ptnr3_PDB_ins_code
+struct_conn.details
+struct_conn.pdbx_dist_value
+struct_conn.pdbx_value_order
+
+struct_conn_type.id
+struct_conn_type.criteria
+struct_conn_type.reference
+
+chem_comp_bond.comp_id
+chem_comp_bond.pdbx_stereo_config
+chem_comp_bond.pdbx_ordinal
+chem_comp_bond.pdbx_aromatic_flag
+chem_comp_bond.atom_id_1
+chem_comp_bond.atom_id_2
+chem_comp_bond.value_order
+
+pdbx_struct_assembly.id
+pdbx_struct_assembly.details
+pdbx_struct_assembly.method_details
+pdbx_struct_assembly.oligomeric_details
+pdbx_struct_assembly.oligomeric_count
+
+pdbx_struct_assembly_gen.assembly_id
+pdbx_struct_assembly_gen.oper_expression
+pdbx_struct_assembly_gen.asym_id_list
+
+pdbx_struct_oper_list.id
+pdbx_struct_oper_list.type
+pdbx_struct_oper_list.name
+pdbx_struct_oper_list.symmetry_operation
+pdbx_struct_oper_list.matrix
+pdbx_struct_oper_list.vector
+
+pdbx_struct_mod_residue.id
+pdbx_struct_mod_residue.label_asym_id
+pdbx_struct_mod_residue.label_seq_id
+pdbx_struct_mod_residue.label_comp_id
+pdbx_struct_mod_residue.auth_asym_id
+pdbx_struct_mod_residue.auth_seq_id
+pdbx_struct_mod_residue.auth_comp_id
+pdbx_struct_mod_residue.PDB_ins_code
+pdbx_struct_mod_residue.parent_comp_id
+pdbx_struct_mod_residue.details
+
+atom_site.group_PDB
+atom_site.id
+atom_site.type_symbol
+atom_site.label_atom_id
+atom_site.label_alt_id
+atom_site.label_comp_id
+atom_site.label_asym_id
+atom_site.label_entity_id
+atom_site.label_seq_id
+atom_site.pdbx_PDB_ins_code
+atom_site.pdbx_formal_charge
+atom_site.Cartn_x
+atom_site.Cartn_y
+atom_site.Cartn_z
+atom_site.occupancy
+atom_site.B_iso_or_equiv
+atom_site.auth_atom_id
+atom_site.auth_comp_id
+atom_site.auth_asym_id
+atom_site.auth_seq_id
+atom_site.pdbx_PDB_model_num

+ 195 - 234
src/mol-io/reader/cif/schema/mmcif.ts

@@ -1,7 +1,9 @@
 /**
- * Copyright (c) 2017 mol* contributors, licensed under MIT, See LICENSE file for more info.
+ * Copyright (c) 2017-2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
  *
- * @author David Sehnal <david.sehnal@gmail.com>
+ * Code-generated 'mmCIF' schema file
+ *
+ * @author mol-star package (src/apps/schema-generator/generate)
  */
 
 import { Database, Column } from 'mol-data/db'
@@ -11,241 +13,200 @@ import Schema = Column.Schema
 const str = Schema.str;
 const int = Schema.int;
 const float = Schema.float;
+const coord = Schema.coord;
 
-const entry = {
-    id: str
-}
-
-type EntityType = 'polymer' | 'non-polymer' | 'water' | 'macrolide'
-
-const entity = {
-    id: str,
-    type: Schema.Aliased<EntityType>(str),
-    src_method: str,
-    pdbx_description: str,
-    formula_weight: float,
-    pdbx_number_of_molecules: int,
-    details: str,
-    pdbx_mutation: str,
-    pdbx_fragment: str,
-    pdbx_ec: str
-}
-
-const exptl = {
-    entry_id: str,
-    method: str
-}
-
-const cell = {
-    entry_id: str,
-    length_a: float,
-    length_b: float,
-    length_c: float,
-    angle_alpha: float,
-    angle_beta: float,
-    angle_gamma: float,
-    Z_PDB: int,
-    pdbx_unique_axis: str
-}
-
-const symmetry = {
-    entry_id: str,
-    'space_group_name_H-M': str,
-    'pdbx_full_space_group_name_H': str,
-    cell_setting: str,
-    Int_Tables_number: int,
-    space_group_name_Hall: str
-}
-
-const struct_conf = {
-    conf_type_id: str,
-    id: str,
-    pdbx_PDB_helix_id: int,
-    beg_label_comp_id: str,
-    beg_label_asym_id: str,
-    beg_label_seq_id: int,
-    pdbx_beg_PDB_ins_code: str,
-    end_label_comp_id: str,
-    end_label_asym_id: str,
-    end_label_seq_id: int,
-    pdbx_end_PDB_ins_code: str,
-    beg_auth_comp_id: str,
-    beg_auth_asym_id: str,
-    beg_auth_seq_id: int,
-    end_auth_comp_id: str,
-    end_auth_asym_id: str,
-    end_auth_seq_id: int,
-    pdbx_PDB_helix_class: int,
-    details: str,
-    pdbx_PDB_helix_length: int
-}
-
-const struct_sheet_range = {
-    sheet_id: str,
-    id: int,
-    beg_label_comp_id: str,
-    beg_label_asym_id: str,
-    beg_label_seq_id: int,
-    pdbx_beg_PDB_ins_code: str,
-    end_label_comp_id: str,
-    end_label_asym_id: str,
-    end_label_seq_id: int,
-    pdbx_end_PDB_ins_code: str,
-    beg_auth_comp_id: str,
-    beg_auth_asym_id: str,
-    beg_auth_seq_id: int,
-    end_auth_comp_id: str,
-    end_auth_asym_id: str,
-    end_auth_seq_id: int
-}
-
-type StructConnTypeId =
-    | 'covale'
-    | 'covale_base'
-    | 'covale_phosphate'
-    | 'covale_sugar'
-    | 'disulf'
-    | 'hydrog'
-    | 'metalc'
-    | 'mismat'
-    | 'modres'
-    | 'saltbr'
-
-type BondValueOrder =
-    | 'SING'
-    | 'DOUB'
-    | 'TRIP'
-    | 'QUAD'
-
-const struct_conn = {
-    id: str,
-    conn_type_id: Schema.Aliased<StructConnTypeId>(str),
-    pdbx_PDB_id: str,
-    ptnr1_label_asym_id: str,
-    ptnr1_label_comp_id: str,
-    ptnr1_label_seq_id: int,
-    ptnr1_label_atom_id: str,
-    pdbx_ptnr1_label_alt_id: str,
-    pdbx_ptnr1_PDB_ins_code: str,
-    pdbx_ptnr1_standard_comp_id: str,
-    ptnr1_symmetry: str,
-    ptnr2_label_asym_id: str,
-    ptnr2_label_comp_id: str,
-    ptnr2_label_seq_id: int,
-    ptnr2_label_atom_id: str,
-    pdbx_ptnr2_label_alt_id: str,
-    pdbx_ptnr2_PDB_ins_code: str,
-    ptnr1_auth_asym_id: str,
-    ptnr1_auth_comp_id: str,
-    ptnr1_auth_seq_id: int,
-    ptnr2_auth_asym_id: str,
-    ptnr2_auth_comp_id: str,
-    ptnr2_auth_seq_id: int,
-    ptnr2_symmetry: str,
-    pdbx_ptnr3_label_atom_id: str,
-    pdbx_ptnr3_label_seq_id: int,
-    pdbx_ptnr3_label_comp_id: str,
-    pdbx_ptnr3_label_asym_id: str,
-    pdbx_ptnr3_label_alt_id: str,
-    pdbx_ptnr3_PDB_ins_code: str,
-    details: str,
-    pdbx_dist_value: float,
-    pdbx_value_order: Schema.Aliased<BondValueOrder>(str)
-}
-
-const struct_conn_type = {
-    id: Schema.Aliased<StructConnTypeId>(str),
-    criteria: str,
-    reference: str
-}
-
-const chem_comp_bond = {
-    comp_id: str,
-    pdbx_stereo_config: str,
-    pdbx_ordinal: int,
-    pdbx_aromatic_flag: Schema.Aliased<'Y' | 'N'>(str),
-    atom_id_1: str,
-    atom_id_2: str,
-    value_order: Schema.Aliased<BondValueOrder>(str)
-}
-
-const pdbx_struct_assembly = {
-    id: str,
-    details: str,
-    method_details: str,
-    oligomeric_details: str,
-    oligomeric_count: int
-}
-
-const pdbx_struct_assembly_gen = {
-    assembly_id: str,
-    oper_expression: str,
-    asym_id_list: str
-}
-
-const pdbx_struct_oper_list = {
-    id: str,
-    type: str,
-    name: str,
-    symmetry_operation: str,
-    matrix: Schema.Matrix(3, 3),
-    vector: Schema.Vector(3)
-}
-
-const pdbx_struct_mod_residue = {
-    id: int,
-    label_asym_id: str,
-    label_seq_id: int,
-    label_comp_id: str,
-    auth_asym_id: str,
-    auth_seq_id: int,
-    auth_comp_id: str,
-    PDB_ins_code: str,
-    parent_comp_id: str,
-    details: str
-}
-
-const atom_site = {
-    group_PDB: str,
-    id: int,
-    type_symbol: str,
-    label_atom_id: str,
-    label_alt_id: str,
-    label_comp_id: str,
-    label_asym_id: str,
-    label_entity_id: str,
-    label_seq_id: int,
-    pdbx_PDB_ins_code: str,
-    pdbx_formal_charge: str,
-    Cartn_x: Schema.coord,
-    Cartn_y: Schema.coord,
-    Cartn_z: Schema.coord,
-    occupancy: float,
-    B_iso_or_equiv: float,
-    auth_atom_id: str,
-    auth_comp_id: str,
-    auth_asym_id: str,
-    auth_seq_id: int,
-    pdbx_PDB_model_num: int
-}
+const Aliased = Schema.Aliased;
+const Matrix = Schema.Matrix;
+const Vector = Schema.Vector;
 
 export const mmCIF_Schema = {
-    entry,
-    entity,
-    exptl,
-    cell,
-    symmetry,
-    struct_conf,
-    struct_sheet_range,
-    struct_conn,
-    struct_conn_type,
-    chem_comp_bond,
-    pdbx_struct_assembly,
-    pdbx_struct_assembly_gen,
-    pdbx_struct_oper_list,
-    pdbx_struct_mod_residue,
-    atom_site
-};
+    atom_site: {
+        auth_asym_id: str,
+        auth_atom_id: str,
+        auth_comp_id: str,
+        // auth_seq_id: str,
+        auth_seq_id: int,
+        B_iso_or_equiv: float,
+        Cartn_x: coord,
+        Cartn_y: coord,
+        Cartn_z: coord,
+        group_PDB: str,
+        // id: str,
+        id: int,
+        label_alt_id: str,
+        label_asym_id: str,
+        label_atom_id: str,
+        label_comp_id: str,
+        label_entity_id: str,
+        label_seq_id: int,
+        occupancy: float,
+        type_symbol: str,
+        pdbx_PDB_ins_code: str,
+        pdbx_PDB_model_num: int,
+        pdbx_formal_charge: int,
+    },
+    cell: {
+        angle_alpha: float,
+        angle_beta: float,
+        angle_gamma: float,
+        entry_id: str,
+        length_a: float,
+        length_b: float,
+        length_c: float,
+        Z_PDB: int,
+        pdbx_unique_axis: str,
+    },
+    chem_comp_bond: {
+        atom_id_1: str,
+        atom_id_2: str,
+        comp_id: str,
+        value_order: Aliased<'sing' | 'doub' | 'trip' | 'quad' | 'arom' | 'poly' | 'delo' | 'pi'>(str),
+        pdbx_ordinal: int,
+        pdbx_stereo_config: Aliased<'E' | 'Z' | 'N'>(str),
+        pdbx_aromatic_flag: Aliased<'Y' | 'N'>(str),
+    },
+    entity: {
+        details: str,
+        formula_weight: float,
+        id: str,
+        src_method: Aliased<'nat' | 'man' | 'syn'>(str),
+        type: Aliased<'polymer' | 'non-polymer' | 'macrolide' | 'water'>(str),
+        pdbx_description: str,
+        pdbx_number_of_molecules: float,
+        pdbx_mutation: str,
+        pdbx_fragment: str,
+        pdbx_ec: str,
+    },
+    exptl: {
+        entry_id: str,
+        method: str,
+    },
+    struct_conf: {
+        beg_label_asym_id: str,
+        beg_label_comp_id: str,
+        beg_label_seq_id: int,
+        beg_auth_asym_id: str,
+        beg_auth_comp_id: str,
+        // beg_auth_seq_id: str,
+        beg_auth_seq_id: int,
+        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),
+        details: str,
+        end_label_asym_id: str,
+        end_label_comp_id: str,
+        end_label_seq_id: int,
+        end_auth_asym_id: str,
+        end_auth_comp_id: str,
+        // end_auth_seq_id: str,
+        end_auth_seq_id: int,
+        id: str,
+        pdbx_beg_PDB_ins_code: str,
+        pdbx_end_PDB_ins_code: str,
+        pdbx_PDB_helix_class: str,
+        pdbx_PDB_helix_length: int,
+        pdbx_PDB_helix_id: str,
+    },
+    struct_conn: {
+        conn_type_id: Aliased<'covale' | 'disulf' | 'hydrog' | 'metalc' | 'mismat' | 'saltbr' | 'modres' | 'covale_base' | 'covale_sugar' | 'covale_phosphate'>(str),
+        details: str,
+        id: str,
+        ptnr1_label_asym_id: str,
+        ptnr1_label_atom_id: str,
+        ptnr1_label_comp_id: str,
+        ptnr1_label_seq_id: int,
+        ptnr1_auth_asym_id: str,
+        ptnr1_auth_comp_id: str,
+        // ptnr1_auth_seq_id: str,
+        ptnr1_auth_seq_id: int,
+        ptnr1_symmetry: str,
+        ptnr2_label_asym_id: str,
+        ptnr2_label_atom_id: str,
+        ptnr2_label_seq_id: int,
+        ptnr2_auth_asym_id: str,
+        ptnr2_auth_comp_id: str,
+        // ptnr2_auth_seq_id: str,
+        ptnr2_auth_seq_id: int,
+        ptnr2_symmetry: str,
+        pdbx_ptnr1_PDB_ins_code: str,
+        pdbx_ptnr1_label_alt_id: str,
+        pdbx_ptnr1_standard_comp_id: str,
+        pdbx_ptnr2_PDB_ins_code: str,
+        pdbx_ptnr2_label_alt_id: str,
+        pdbx_ptnr3_PDB_ins_code: str,
+        pdbx_ptnr3_label_alt_id: str,
+        pdbx_ptnr3_label_asym_id: str,
+        pdbx_ptnr3_label_atom_id: str,
+        pdbx_ptnr3_label_comp_id: str,
+        pdbx_ptnr3_label_seq_id: int,
+        pdbx_PDB_id: str,
+        pdbx_dist_value: float,
+        pdbx_value_order: Aliased<'sing' | 'doub' | 'trip' | 'quad'>(str),
+    },
+    struct_conn_type: {
+        criteria: str,
+        id: Aliased<'covale' | 'disulf' | 'hydrog' | 'metalc' | 'mismat' | 'saltbr' | 'modres' | 'covale_base' | 'covale_sugar' | 'covale_phosphate'>(str),
+        reference: str,
+    },
+    struct_sheet_range: {
+        beg_label_asym_id: str,
+        beg_label_comp_id: str,
+        beg_label_seq_id: int,
+        end_label_asym_id: str,
+        end_label_comp_id: str,
+        end_label_seq_id: int,
+        beg_auth_asym_id: str,
+        beg_auth_comp_id: str,
+        // beg_auth_seq_id: str,
+        beg_auth_seq_id: int,
+        end_auth_asym_id: str,
+        end_auth_comp_id: str,
+        // end_auth_seq_id: str,
+        end_auth_seq_id: int,
+        id: str,
+        sheet_id: str,
+        pdbx_beg_PDB_ins_code: str,
+        pdbx_end_PDB_ins_code: str,
+    },
+    symmetry: {
+        entry_id: str,
+        cell_setting: Aliased<'triclinic' | 'monoclinic' | 'orthorhombic' | 'tetragonal' | 'rhombohedral' | 'trigonal' | 'hexagonal' | 'cubic'>(str),
+        Int_Tables_number: int,
+        space_group_name_Hall: str,
+        'space_group_name_H-M': str,
+    },
+    pdbx_struct_assembly: {
+        method_details: str,
+        oligomeric_details: str,
+        oligomeric_count: int,
+        details: str,
+        id: str,
+    },
+    pdbx_struct_mod_residue: {
+        id: int,
+        auth_asym_id: str,
+        auth_comp_id: str,
+        // auth_seq_id: str,
+        auth_seq_id: int,
+        PDB_ins_code: str,
+        label_asym_id: str,
+        label_comp_id: str,
+        label_seq_id: int,
+        parent_comp_id: str,
+        details: str,
+    },
+    pdbx_struct_oper_list: {
+        id: str,
+        type: str,
+        name: str,
+        symmetry_operation: str,
+        matrix: Matrix(3, 3),
+        vector: Vector(3),
+    },
+    pdbx_struct_assembly_gen: {
+        asym_id_list: str,
+        assembly_id: str,
+        oper_expression: str,
+    },
+}
 
 export type mmCIF_Schema = typeof mmCIF_Schema;
 export interface mmCIF_Database extends Database<mmCIF_Schema> { }

+ 1 - 1
src/mol-model/structure/export/mmcif.ts

@@ -111,7 +111,7 @@ const atom_site: Encoder.CategoryDefinition<Atom.Location> = {
         float('Cartn_y', P.atom.y),
         float('Cartn_z', P.atom.z),
         float('occupancy', P.atom.occupancy),
-        str('pdbx_formal_charge', P.atom.pdbx_formal_charge),
+        int('pdbx_formal_charge', P.atom.pdbx_formal_charge),
 
         str('auth_atom_id', P.atom.auth_atom_id),
         str('auth_comp_id', P.residue.auth_comp_id),