higlass
Version:
HiGlass Hi-C / genomic / large data viewer
158 lines (157 loc) • 6.65 kB
TypeScript
/**
* @typedef SelectedRowsOptions
* @property {Array<number | Array<number>>} selectedRows - Row indices, for ordering and filtering rows. Used by the HorizontalMultivecTrack.
* @property {'mean' | 'sum' | 'variance' | 'deviation'} selectedRowsAggregationMode - The aggregation function to use ("mean", "sum", etc).
* @property {boolean} selectedRowsAggregationWithRelativeHeight - Whether the height of row groups should be relative to the size of the group.
* @property {'client' | 'server'} selectedRowsAggregationMethod - Where will the aggregation be performed? Possible values: "client", "server".
*/
/**
* This function takes in tile data and other rendering parameters,
* and generates an array of pixel data that can be passed to a canvas
* (and subsequently passed to a PIXI sprite).
*
* @param {number} size - `data` parameter length. Often set to a tile's `tile.tileData.dense.length` value.
* @param {Array<number> | Float32Array} data - The tile data array.
* @param {'log' | 'linear'} valueScaleType 'log' or 'linear'.
* @param {[number, number]} valueScaleDomain
* @param {number} pseudocount - The pseudocount is generally the minimum non-zero value and is
* used so that our log scaling doesn't lead to NaN values.
* @param {ReadonlyArray<readonly [r: number, g: number, b: number, a: number]>} colorScale
* @param {boolean} ignoreUpperRight
* @param {boolean} ignoreLowerLeft
* @param {readonly [numRows: number, numCols: number] | null} shape - Array `[numRows, numCols]`, used when iterating over a subset of rows,
* when one needs to know the width of each column.
* @param {[r: number, g: number, b: number, a: number] | null} zeroValueColor - The color to use for rendering zero data values, [r, g, b, a].
* @param {Partial<SelectedRowsOptions> | null} selectedRowsOptions - Rendering options when using a `selectRows` track option.
*
* @returns {Uint8ClampedArray} A flattened array of pixel values.
*/
export function workerSetPix(size: number, data: Array<number> | Float32Array, valueScaleType: "log" | "linear", valueScaleDomain: [number, number], pseudocount: number, colorScale: ReadonlyArray<readonly [r: number, g: number, b: number, a: number]>, ignoreUpperRight?: boolean, ignoreLowerLeft?: boolean, shape?: readonly [numRows: number, numCols: number] | null, zeroValueColor?: [r: number, g: number, b: number, a: number] | null, selectedRowsOptions?: Partial<SelectedRowsOptions> | null): Uint8ClampedArray;
/**
* @typedef TileData<Server>
* @property {string} server
* @property {string} tileId
* @property {number} zoomLevel
* @property {[number] | [number, number]} tilePos
* @property {string} tilesetUid
*/
/**
* @typedef DenseTileData
* @property {string} server
* @property {string} tileId
* @property {number} zoomLevel
* @property {[number] | [number, number]} tilePos
* @property {string} tilesetUid
* @property {Float32Array} dense
* @property {string} dtype
* @property {DenseDataExtrema1D | DenseDataExtrema2D} denseDataExtrema
* @property {number} minNonZero
* @property {number} maxNonZero
*/
/**
* @template T
* @typedef {Omit<T, keyof DenseTileData> & (TileData | DenseTileData)} CompletedTileData
*/
/**
* @typedef TileResponse
* @property {string} [dense] - a base64 encoded string
* @property {string} [tilePositionId] - The position of the tile
*/
/**
* Convert a response from the tile server to data that can be used by higlass.
*
* WARNING: Mutates the data object.
*
* @template {TileResponse} T
* @param {Record<string, T>} inputData
* @param {string} server
* @param {ReadonlyArray<string>} theseTileIds
*
* @returns {Record<string, CompletedTileData<T>>}
*
* Trevor: This function is littered with ts-expect-error comments because
* the type of mutation happening to the input object is very tricky to type.
* The type signature of the function tries to adequately describe the mutation,
* to outside users.
*/
export function tileResponseToData<T extends TileResponse>(inputData: Record<string, T>, server: string, theseTileIds: ReadonlyArray<string>): Record<string, CompletedTileData<T>>;
/**
* Fetch tiles from the server.
*
* @template {TileResponse} T
*
* @param {Object} request
* @param {string} request.server
* @param {ReadonlyArray<string>} request.tileIds
* @param {ReadonlyArray<{ tilesetUid: string, tileIds: Array<string>, options?: Record<string, unknown> }>} request.body
* @param {Object} options
* @param {string | null} [options.authHeader]
* @param {import("pub-sub-es").PubSub} [options.pubSub]
* @param {string} options.sessionId
*/
export function workerFetchTiles<T extends TileResponse>(request: {
server: string;
tileIds: ReadonlyArray<string>;
body: ReadonlyArray<{
tilesetUid: string;
tileIds: Array<string>;
options?: Record<string, unknown>;
}>;
}, options: {
authHeader?: string | null | undefined;
pubSub?: import("pub-sub-es").PubSub | undefined;
sessionId: string;
}): Promise<void | Record<string, CompletedTileData<TileResponse>>>;
export type SelectedRowsOptions = {
/**
* - Row indices, for ordering and filtering rows. Used by the HorizontalMultivecTrack.
*/
selectedRows: Array<number | Array<number>>;
/**
* - The aggregation function to use ("mean", "sum", etc).
*/
selectedRowsAggregationMode: "mean" | "sum" | "variance" | "deviation";
/**
* - Whether the height of row groups should be relative to the size of the group.
*/
selectedRowsAggregationWithRelativeHeight: boolean;
/**
* - Where will the aggregation be performed? Possible values: "client", "server".
*/
selectedRowsAggregationMethod: "client" | "server";
};
/**
* <Server>
*/
export type TileData = {
server: string;
tileId: string;
zoomLevel: number;
tilePos: [number] | [number, number];
tilesetUid: string;
};
export type DenseTileData = {
server: string;
tileId: string;
zoomLevel: number;
tilePos: [number] | [number, number];
tilesetUid: string;
dense: Float32Array;
dtype: string;
denseDataExtrema: DenseDataExtrema1D | DenseDataExtrema2D;
minNonZero: number;
maxNonZero: number;
};
export type CompletedTileData<T> = Omit<T, keyof DenseTileData> & (TileData | DenseTileData);
export type TileResponse = {
/**
* - a base64 encoded string
*/
dense?: string | undefined;
/**
* - The position of the tile
*/
tilePositionId?: string | undefined;
};
import DenseDataExtrema1D from '../utils/DenseDataExtrema1D';
import DenseDataExtrema2D from '../utils/DenseDataExtrema2D';