UNPKG

scran.js

Version:

Single cell RNA-seq analysis in Javascript

116 lines (104 loc) 4.05 kB
import * as gc from "./gc.js"; import * as utils from "./utils.js"; /** * Wrapper for the CRISPR-based metrics allocated on the Wasm heap, produced by {@linkcode perCellCrisprQcMetrics}. * @hideconstructor */ export class PerCellCrisprQcMetricsResults { #id; #results; constructor(id, raw, filled = true) { this.#id = id; this.#results = raw; return; } // Internal use only, not documented. get results() { return this.#results; } /** * @param {object} [options={}] - Optional parameters. * @param {boolean} [options.copy=true] - Whether to copy the results from the Wasm heap, see {@linkcode possibleCopy}. * @return {Float64Array|Float64WasmArray} Array containing the total count across guides for each cell. */ sum(options = {}) { const { copy = true, ...others } = options; utils.checkOtherOptions(others); return utils.possibleCopy(this.#results.sum(), copy); } /** * @param {object} [options={}] - Optional parameters. * @param {boolean} [options.copy=true] - Whether to copy the results from the Wasm heap, see {@linkcode possibleCopy}. * @return {Int32Array|Int32WasmArray} Array containing the total number of detected guides for each cell. */ detected(options = {}) { const { copy = true, ...others } = options; utils.checkOtherOptions(others); return utils.possibleCopy(this.#results.detected(), copy); } /** * @param {object} [options={}] - Optional parameters. * @param {boolean} [options.copy=true] - Whether to copy the results from the Wasm heap, see {@linkcode possibleCopy}. * @return {Float64Array|Float64WasmArray} Array containing the count of the most abundant guide for each cell. */ maxValue(options = {}) { const { copy = true, ...others } = options; utils.checkOtherOptions(others); return utils.possibleCopy(this.#results.max_value(), copy); } /** * @return {Float64Array} Array containing the proportion of counts in the most abundant guide for each cell. */ maxProportion() { let out = this.maxValue(); let denom = this.sum({ copy: false }); out.forEach((x, i) => { out[i] /= denom[i] }); return out; } /** * @param {object} [options={}] - Optional parameters. * @param {boolean} [options.copy=true] - Whether to copy the results from the Wasm heap, see {@linkcode possibleCopy}. * @return {Int32Array|Int32WasmArray} Array containing the index of the most abundant guide for each cell. */ maxIndex(options = {}) { const { copy = true, ...others } = options; utils.checkOtherOptions(others); return utils.possibleCopy(this.#results.max_index(), copy); } /** * @return {number} Number of cells in this object. */ numberOfCells() { return this.#results.num_cells(); } /** * @return Frees the memory allocated on the Wasm heap for this object. * This invalidates this object and all references to it. */ free() { if (this.#results !== null) { gc.release(this.#id); this.#results = null; } return; } } /** * Compute per-cell QC metrics from the CRISPR guide count matrix. * * @param {ScranMatrix} x - The count matrix for CRISPR guides. * @param {object} [options={}] - Optional parameters. * @param {?number} [options.numberOfThreads=null] - Number of threads to use. * If `null`, defaults to {@linkcode maximumThreads}. * * @return {PerCellCrisprQcMetricsResults} Object containing the QC metrics. */ export function perCellCrisprQcMetrics(x, options = {}) { const { numberOfThreads = null, ...others } = options; utils.checkOtherOptions(others); let nthreads = utils.chooseNumberOfThreads(numberOfThreads); return gc.call( module => module.per_cell_crispr_qc_metrics(x.matrix, nthreads), PerCellCrisprQcMetricsResults ); }