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 { ...@@ -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 type Schema<T = any> = Schema.Str | Schema.Int | Schema.Float | Schema.Coordinate | Schema.Aliased<T> | Schema.Tensor
export namespace Schema { export namespace Schema {
// T also serves as a default value for undefined columns
type Base<T extends string> = { valueType: T } type Base<T extends string> = { valueType: T }
export type Str = { '@type': 'str', T: string } & Base<'str'> export type Str = { '@type': 'str', T: string } & Base<'str'>
export type Int = { '@type': 'int', T: number } & Base<'int'> export type Int = { '@type': 'int', T: number } & Base<'int'>
...@@ -39,11 +41,17 @@ namespace Column { ...@@ -39,11 +41,17 @@ namespace Column {
export const coord: Coordinate = { '@type': 'coord', T: 0, valueType: 'float' }; export const coord: Coordinate = { '@type': 'coord', T: 0, valueType: 'float' };
export const float: Float = { '@type': 'float', 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 Str(defaultValue = ''): Str { return { '@type': 'str', T: defaultValue, valueType: 'str' } };
export function vector(dim: number): Tensor { return tensor(Tensors.Vector(dim)); } export function Int(defaultValue = 0): Int { return { '@type': 'int', T: defaultValue, valueType: 'int' } };
export function matrix(rows: number, cols: number): Tensor { return tensor(Tensors.ColumnMajorMatrix(rows, cols)); } 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 aliased<T>(t: Str | Int): Aliased<T> { return t as any as Aliased<T>; } 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> { export interface ToArrayParams<T> {
......
...@@ -20,7 +20,7 @@ type EntityType = 'polymer' | 'non-polymer' | 'water' | 'macrolide' ...@@ -20,7 +20,7 @@ type EntityType = 'polymer' | 'non-polymer' | 'water' | 'macrolide'
const entity = { const entity = {
id: str, id: str,
type: Schema.aliased<EntityType>(str), type: Schema.Aliased<EntityType>(str),
src_method: str, src_method: str,
pdbx_description: str, pdbx_description: str,
formula_weight: float, formula_weight: float,
...@@ -119,7 +119,7 @@ type BondValueOrder = ...@@ -119,7 +119,7 @@ type BondValueOrder =
const struct_conn = { const struct_conn = {
id: str, id: str,
conn_type_id: Schema.aliased<StructConnTypeId>(str), conn_type_id: Schema.Aliased<StructConnTypeId>(str),
pdbx_PDB_id: str, pdbx_PDB_id: str,
ptnr1_label_asym_id: str, ptnr1_label_asym_id: str,
ptnr1_label_comp_id: str, ptnr1_label_comp_id: str,
...@@ -150,11 +150,11 @@ const struct_conn = { ...@@ -150,11 +150,11 @@ const struct_conn = {
pdbx_ptnr3_PDB_ins_code: str, pdbx_ptnr3_PDB_ins_code: str,
details: str, details: str,
pdbx_dist_value: float, pdbx_dist_value: float,
pdbx_value_order: Schema.aliased<BondValueOrder>(str) pdbx_value_order: Schema.Aliased<BondValueOrder>(str)
} }
const struct_conn_type = { const struct_conn_type = {
id: Schema.aliased<StructConnTypeId>(str), id: Schema.Aliased<StructConnTypeId>(str),
criteria: str, criteria: str,
reference: str reference: str
} }
...@@ -163,10 +163,10 @@ const chem_comp_bond = { ...@@ -163,10 +163,10 @@ const chem_comp_bond = {
comp_id: str, comp_id: str,
pdbx_stereo_config: str, pdbx_stereo_config: str,
pdbx_ordinal: int, 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_1: str,
atom_id_2: str, atom_id_2: str,
value_order: Schema.aliased<BondValueOrder>(str) value_order: Schema.Aliased<BondValueOrder>(str)
} }
const pdbx_struct_assembly = { const pdbx_struct_assembly = {
...@@ -188,8 +188,8 @@ const pdbx_struct_oper_list = { ...@@ -188,8 +188,8 @@ const pdbx_struct_oper_list = {
type: str, type: str,
name: str, name: str,
symmetry_operation: str, symmetry_operation: str,
matrix: Schema.matrix(3, 3), matrix: Schema.Matrix(3, 3),
vector: Schema.vector(3) vector: Schema.Vector(3)
} }
const pdbx_struct_mod_residue = { const pdbx_struct_mod_residue = {
......
...@@ -48,7 +48,7 @@ function createHierarchyData({ data }: mmCIF_Format, bounds: Interval, offsets: ...@@ -48,7 +48,7 @@ function createHierarchyData({ data }: mmCIF_Format, bounds: Interval, offsets:
const { atom_site } = data; const { atom_site } = data;
const start = Interval.start(bounds), end = Interval.end(bounds); const start = Interval.start(bounds), end = Interval.end(bounds);
const atoms = Table.ofColumns(Hierarchy.AtomsSchema, { 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), label_atom_id: Column.window(atom_site.label_atom_id, start, end),
auth_atom_id: Column.window(atom_site.auth_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), 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' ...@@ -10,7 +10,7 @@ import { mmCIF_Schema as mmCIF } from 'mol-io/reader/cif/schema/mmcif'
import { ElementSymbol} from '../types' import { ElementSymbol} from '../types'
export const AtomsSchema = { 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, label_atom_id: mmCIF.atom_site.label_atom_id,
auth_atom_id: mmCIF.atom_site.auth_atom_id, auth_atom_id: mmCIF.atom_site.auth_atom_id,
label_alt_id: mmCIF.atom_site.label_alt_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.
Please register or to comment