-
Notifications
You must be signed in to change notification settings - Fork 3
Packing results schema
Megan Riel-Mehan edited this page Aug 10, 2021
·
4 revisions
Current schema (derived from looking at results file in this repo):
type Position = number[];
type Rotation = number[][] | number[];
interface RecipeInfo {
setupfile: string;
paths: string[][];
version: string;
name: string;
}
interface Ingredient {
name: string;
source?: {
pdb: string;
transform: {
center: boolean;
translate?: number[];
rotate?: number[];
};
};
}
interface PointIngredient extends Ingredient {
results: (Position | Rotation)[];
encapsulatingRadius?: number;
compNum?: number; // compartment id
}
interface CurveIngredient extends Ingredient {
nbCurve: number;
positions: number[][];
radii: number[][];
curve0: number[][];
curve1: number[][];
curve2: number[][];
}
// can be version 0.0
export interface PackingResultCytoplasme {
recipe: RecipeInfo;
cytoplasme: {
ingredients: {
[key: string]: PointIngredient | CurveIngredient;
};
};
}
// can be version 1.0
export interface PackingResultCompartments {
recipe: RecipeInfo;
compartments: {
[key: string]: {
surface?: {
ingredients: {
[key: string]: CurveIngredient | PointIngredient;
};
};
interior?: {
ingredients: {
[key: string]: CurveIngredient | PointIngredient;
};
};
};
};
}Proposed changed schema, version 2.0:
type Position = number[];
type Rotation = number[][] | number[];
interface RecipeInfo {
setupfile: string;
paths: string[][];
version: string;
name: string;
}
interface Ingredient {
name: string;
version: number; // NEW
source?: {
mesh?: string; // NEW url to mesh file
sphereTree: string; // NEW url to sphere tree file
pdb: string;
transform: {
center: boolean;
translate?: number[];
rotate?: number[];
};
};
}
interface PointIngredient extends Ingredient {
results: {
position: number[];
rotation: number[]
}[]; // CHANGE array of objects instead of array of arrays (just for clarity)
encapsulatingRadius?: number;
// compNum?: number; REMOVE
}
interface CurveIngredient extends Ingredient {
// nbCurve: number; REMOVE
positions: number[][];
radii: number[][];
curves: number[][][]; // NEW: Curves length is the number of curves, and each item is the array of control points
// curve0: number[][];
// curve1: number[][];
// curve2: number[][];
}
interface Compartment {
name: string; // NEW: name of the compartment, instead of using the object key
interior?: (CurveIngredient | PointIngredient)[]; // CHANGE: array of ingredients instead of nested objects
surface?: (CurveIngredient | PointIngredient)[];
}
export interface PackingResult {
version: number; // NEW: create a schema version so if it changes we can keep track of it
recipe: RecipeInfo;
compartments: Compartment[]; // CHANGE: list of compartments instead of key: value objects
}
// OR
interface Compartment {
name: string; // NEW: name of the compartment, instead of using the object key
interior?: boolean; // NEW: whether a compartment has ingredients on the interior
surface?: boolean; // NEW: whether a compartment has ingredients on the surface
}
interface Ingredient {
name: string;
version: number; // NEW
position: "interior" | "surface" // NEW: where in the compartment this ingredient is
compartment: string; // NEW: name of the compartment
source?: {
mesh?: string; // NEW url to mesh file
sphereTree: string; // NEW url to sphere tree file
pdb: string;
transform: {
center: boolean;
translate?: number[];
rotate?: number[];
};
};
}
export interface PackingResult {
version: number; // NEW: create a schema version so if it changes we can keep track of it
recipe: RecipeInfo;
compartments: Compartment[]; // CHANGE: list of compartments instead of key: value objects, no nested ingredients
ingredients: Ingredient[]; // CHANGE: flat list of every packed ingredient, with each ingredient having a "position" and "compartment" attribute
}