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

ability to specify default value in column schema

parent d8437a78
No related branches found
No related tags found
No related merge requests found
......@@ -25,6 +25,8 @@ namespace Column {
export type Schema<T = any> = Schema.Str | Schema.Int | Schema.Float | Schema.Coordinate | Schema.Aliased<T> | Schema.Tensor
export namespace Schema {
// T also serves as a default value for undefined columns
type Base<T extends string> = { valueType: T }
export type Str = { '@type': 'str', T: string } & Base<'str'>
export type Int = { '@type': 'int', T: number } & Base<'int'>
......@@ -39,11 +41,17 @@ namespace Column {
export const coord: Coordinate = { '@type': 'coord', T: 0, valueType: 'float' };
export const float: Float = { '@type': 'float', T: 0, valueType: 'float' };
export function tensor(space: Tensors.Space): Tensor { return { '@type': 'tensor', T: space.create(), space, valueType: 'tensor' }; }
export function vector(dim: number): Tensor { return tensor(Tensors.Vector(dim)); }
export function matrix(rows: number, cols: number): Tensor { return tensor(Tensors.ColumnMajorMatrix(rows, cols)); }
export function aliased<T>(t: Str | Int): Aliased<T> { return t as any as Aliased<T>; }
export function Str(defaultValue = ''): Str { return { '@type': 'str', T: defaultValue, valueType: 'str' } };
export function Int(defaultValue = 0): Int { return { '@type': 'int', T: defaultValue, valueType: 'int' } };
export function Float(defaultValue = 0): Float { return { '@type': 'float', T: defaultValue, valueType: 'float' } };
export function Tensor(space: Tensors.Space): Tensor { return { '@type': 'tensor', T: space.create(), space, valueType: 'tensor' }; }
export function Vector(dim: number): Tensor { return Tensor(Tensors.Vector(dim)); }
export function Matrix(rows: number, cols: number): Tensor { return Tensor(Tensors.ColumnMajorMatrix(rows, cols)); }
export function Aliased<T>(t: Str | Int, defaultValue?: T): Aliased<T> {
if (typeof defaultValue !== 'undefined') return { ...t, T: defaultValue } as any as Aliased<T>;
return t as any as Aliased<T>;
}
}
export interface ToArrayParams<T> {
......
......@@ -20,7 +20,7 @@ type EntityType = 'polymer' | 'non-polymer' | 'water' | 'macrolide'
const entity = {
id: str,
type: Schema.aliased<EntityType>(str),
type: Schema.Aliased<EntityType>(str),
src_method: str,
pdbx_description: str,
formula_weight: float,
......@@ -119,7 +119,7 @@ type BondValueOrder =
const struct_conn = {
id: str,
conn_type_id: Schema.aliased<StructConnTypeId>(str),
conn_type_id: Schema.Aliased<StructConnTypeId>(str),
pdbx_PDB_id: str,
ptnr1_label_asym_id: str,
ptnr1_label_comp_id: str,
......@@ -150,11 +150,11 @@ const struct_conn = {
pdbx_ptnr3_PDB_ins_code: str,
details: str,
pdbx_dist_value: float,
pdbx_value_order: Schema.aliased<BondValueOrder>(str)
pdbx_value_order: Schema.Aliased<BondValueOrder>(str)
}
const struct_conn_type = {
id: Schema.aliased<StructConnTypeId>(str),
id: Schema.Aliased<StructConnTypeId>(str),
criteria: str,
reference: str
}
......@@ -163,10 +163,10 @@ const chem_comp_bond = {
comp_id: str,
pdbx_stereo_config: str,
pdbx_ordinal: int,
pdbx_aromatic_flag: Schema.aliased<'Y' | 'N'>(str),
pdbx_aromatic_flag: Schema.Aliased<'Y' | 'N'>(str),
atom_id_1: str,
atom_id_2: str,
value_order: Schema.aliased<BondValueOrder>(str)
value_order: Schema.Aliased<BondValueOrder>(str)
}
const pdbx_struct_assembly = {
......@@ -188,8 +188,8 @@ const pdbx_struct_oper_list = {
type: str,
name: str,
symmetry_operation: str,
matrix: Schema.matrix(3, 3),
vector: Schema.vector(3)
matrix: Schema.Matrix(3, 3),
vector: Schema.Vector(3)
}
const pdbx_struct_mod_residue = {
......
......@@ -48,7 +48,7 @@ function createHierarchyData({ data }: mmCIF_Format, bounds: Interval, offsets:
const { atom_site } = data;
const start = Interval.start(bounds), end = Interval.end(bounds);
const atoms = Table.ofColumns(Hierarchy.AtomsSchema, {
type_symbol: Column.ofArray({ array: Column.mapToArray(Column.window(atom_site.type_symbol, start, end), ElementSymbol), schema: Column.Schema.aliased<ElementSymbol>(Column.Schema.str) }),
type_symbol: Column.ofArray({ array: Column.mapToArray(Column.window(atom_site.type_symbol, start, end), ElementSymbol), schema: Column.Schema.Aliased<ElementSymbol>(Column.Schema.str) }),
label_atom_id: Column.window(atom_site.label_atom_id, start, end),
auth_atom_id: Column.window(atom_site.auth_atom_id, start, end),
label_alt_id: Column.window(atom_site.label_alt_id, start, end),
......
......@@ -10,7 +10,7 @@ import { mmCIF_Schema as mmCIF } from 'mol-io/reader/cif/schema/mmcif'
import { ElementSymbol} from '../types'
export const AtomsSchema = {
type_symbol: Column.Schema.aliased<ElementSymbol>(mmCIF.atom_site.type_symbol),
type_symbol: Column.Schema.Aliased<ElementSymbol>(mmCIF.atom_site.type_symbol),
label_atom_id: mmCIF.atom_site.label_atom_id,
auth_atom_id: mmCIF.atom_site.auth_atom_id,
label_alt_id: mmCIF.atom_site.label_alt_id,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment