cellspecR 1.1.0
Functions released in 1.0.0 are no longer marked experimental; like the package, they are stable. The NumPy readers and writers added in this version are experimental.
The MCQuant, segmantR and inForm readers derive image and sample identifiers of an RDS table from its file name, as for delimited files; before, they came from a temporary copy and differed between reads.
Standardize the named v5 package logo across README, documentation pages and available application headers, with matching light and dark artwork.
cs_read_npy()andcs_read_npz()read NumPy array files and archives in base R (booleans, integers, floats, complex, fixed-width strings; C or Fortran order);cs_write_npy()andcs_write_npz()write them without an external zip program.Signal policies can declare separate preferred and fallback finite domains, including negative finite measurements. Existing minimum-domain defaults and five-column policies remain unchanged. Extended seven-column policies preserve both domains through JSON and CSV.
Signal-policy I/O preserves structured error classes when parser diagnostics or paths contain literal braces.
Canonical TSV decimal conversion now preserves double precision on platforms where extended precision equals double precision, including macOS ARM. The 17-digit file format and exact-value round-trip contract are unchanged.
Header-only TSV exports now write a complete gzip stream, including empty cell and adjacency tables. Their declared column types survive read-back.
QuPath readers recognize compartment-first cell area and nuclear morphology with explicit units. Whole-cell area is kept separately from nuclear area; shape dictionaries retain the original headers and dimensional units.
The segmantR reader converts one-based pixel-index centroid means to the image’s pixel-edge coordinate frame and converts pixel area to square micrometres. Unrecognised centroid conventions are rejected. Crop, pyramid and anisotropic transforms must be handled explicitly before image integration. Raw shape measurements retain their pixel or radian units.
cs_formats()reports segmantR 0.2.0, the version the segmantR reader was tested with, instead of the non-existent segmantR 0.5.cs_write(overwrite = TRUE)now replaces only an empty directory or earliercs_write()output: a directory whosecellspec.jsoncarries the cellspec format marker and which holds no files other than thosecs_write()creates. Any other directory is left untouched and an error names the unexpected entries.Tiled QuPath done markers with
header_sha256now verify header lines longer than 1,024 bytes instead of reporting a missing header, and check the decompressed header line of gzip-compressed (.gz) tiles instead of their compressed bytes.cs_app()now appliesmax_upload_mbas the Shiny upload limit while the application runs and restores the previous limit when it stops; uploads were previously capped at the 5 MB Shiny default.The default
plot()overview leaves out the area panel when the cells table has noareacolumn and the marker panel when there are no intensity features, instead of failing.cs_as_anndata()now defaults topolicy = NULLand derives the policy the same way ascs_as_spe().otherfeatures whose source names clean to the same identifier are numbered withmake.unique(sep = "_")instead of aborting the read. This covers unmapped numeric columns kept bykeep_other = TRUEand measurements mapped withkind = "other", also withkeep_other = FALSE. Suffixes already in use are skipped: columns “a b”, “a_b” and “a_b_1” becomeother:a_b,other:a_b_2andother:a_b_1.summary()and its print method handle valid objects without images.cs_read_cellspec()checks the row counts declared incellspec.jsonbefore reading and reports a missing or malformedn_rowsas acellspec_error_format.cs_write()no longer advances the session random number generator when it names its staging and backup directories.Gzip-compressed tables and canonical
tsv.gzfiles are decompressed in R on every platform instead of through an externalgzipprogram. The result is checked against the gzip trailer (CRC-32 and length), so a truncated or corrupt file raises acellspec_error_formatinstead of loading only part of its rows. A file whose tail was zero-filled back to its original size counts as truncated. BGZF files (bgzip) are checked block by block, may hold nothing but BGZF blocks and must end with the BGZF end-of-file block; other files made of several gzip members, which cannot be checked completely, are read with acellspec_warning_integritywarning.cellspecR now requires data.table 1.17.0 or later. Earlier versions write
fwrite(compress = "gzip")output as several gzip members, whichcs_read_cellspec()cannot fully check, so it would warn on thetsv.gzfiles written bycs_write().
cellspecR 1.0.0
First public release, on GitHub.
Specification
- Added the cellspec 1.0 table contract, JSON Schema and vocabulary tables for segmented cells from multiplexed tissue images.
Readers
- Added readers for QuPath, tiled QuPath, MCQuant, segmantR, inForm and mapped generic CSV/TSV tables, with format detection and provenance records.
Validation
- Added structural and semantic validation, actionable reports, feature support summaries and deterministic synthetic examples.
Canonical format
- Added Parquet storage with an exact text fallback, JSON sidecars, SHA-256 manifests, completion markers and atomic staging.
Signals
- Added explicit signal policies, marker maps and selected signal matrices with JSON and CSV persistence.