Skip to content

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
}

Clone this wiki locally