import { RangedSummarizedExperiment } from "bioconductor";
import { H5Group, H5DataSet } from "./h5.js";
import { readObject, readObjectFile, saveObject } from "./general.js";
import { readSummarizedExperiment, saveSummarizedExperiment } from "./SummarizedExperiment.js";
/**
* A ranged summarized experiment.
* @external RangedSummarizedExperiment
* @see {@link https://ltla.github.io/bioconductor.js/RangedSummarizedExperiment.html}
*/
/**
* @param {string} path - Path to the takane-formatted object directory containing the {@link external:RangedSummarizedExperiment RangedSummarizedExperiment}.
* @param {object} metadata - Takane object metadata, typically generated by calling {@linkcode readObjectFile} on `path`.
* @param {object} globals - Object containing `fs`, an object satisfying the {@link GlobalFsInterface}; and `h5`, an object satisfying the {@link GlobalH5Interface}.
* @param {object} [options={}] - Further options, see also {@link readSummarizedExperiment}.
*
* @return {external:RangedSummarizedExperiment} The ranged summarized experiment object.
* @async
*/
export async function readRangedSummarizedExperiment(path, metadata, globals, options = {}) {
let se = await readSummarizedExperiment(path, metadata, globals, options);
let rse = new RangedSummarizedExperiment(
se.assays(),
null,
{
assayOrder: se.assayNames(),
rowData: se.rowData(),
columnData: se.columnData(),
rowNames: se.rowNames(),
columnNames: se.columnNames(),
metadata: se.metadata(),
}
);
return rse;
}
/**
* @param {external:RangedSummarizedExperiment} x - The ranged summarized experiment.
* @param {string} path - Path to the directory in which to save `x`.
* @param {object} globals - Object containing `fs`, an object satisfying the {@link GlobalFsInterface}; and `h5`, an object satisfying the {@link GlobalH5Interface}.
* @param {object} [options={}] - Further options, see also {@linkcode saveSummarizedExperiment}.
*
* @return `x` is stored at `path`.
* @async
*/
export async function saveRangedSummarizedExperiment(x, path, globals, options = {}) {
await saveSummarizedExperiment(x, path, globals, options);
const existing = await readObjectFile(path, globals);
existing.type = "ranged_summarized_experiment";
existing.ranged_summarized_experiment = { "version": "1.0" };
await globals.fs.write(path + "/OBJECT", JSON.stringify(existing));
}