UNPKG

higlass

Version:

HiGlass Hi-C / genomic / large data viewer

158 lines (157 loc) 6.65 kB
/** * @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';