- Added H-optimus-0 model for H&E patches embeddings @stergioc (#208)
- Can provide
qv_thresholdargument to the Xenium reader to filter low quality transcripts @callum-jpg (#210)
- Storing patches embeddings as an
AnnDataobject instead of images (#212) (see updated tuto)
- Right sorting scales for WSI reader with openslide backend @stergioc (#209)
- When a polygon cannot be simplified (for the Xenium Explorer), convert it to a circle (#206)
sopa explorer write: use correct default argument fortable_keyin the CLI (#211)- Fix Baysor usage on Windows (#185)
- Fix tight patches returning a different number of patches (#214)
- Safer check dataframe series is of integer dtype (#179)
- Ensure
feature_keyis converted correctly to a string (#185) - Fixed the WSI readers @stergioc (#192)
- Fixed
points_keyusage insopa.aggregate(#194)
- Aggregation and segmentation now exclude non-interesting gene names (e.g., "blank", "unassigned", ...) (#144)
- Can filter low-quality transcript for transcript-based segmentation (#79)
- Possibility to choose the table name for the report (#183)
- Possibility to choose the table name for
sopa.io.explorer.write(#183) - Can set all
spatialdata_io.xeniumarguments insopa.io.xenium - CLI for stardist @jeffquinn-msk (#189)
- Baysor logs if running on one patch, and return the right error code in CLI @jeffquinn-msk (#199)
- Baysor parallelization per patch @Marius1311 (#203)
sopa.io.write_reportis copying the adata to avoid modifying it (#196)
This version introduces many new API features but also some breaking changes; check our migration guide to smoothly update your code base.
- Full Visium HD support (including, notably, bins aggregation)
- Dask parallelization backend for faster segmentation (useful for API users). This can be done via
sopa.settings.parallelization_backend = 'dask'. More details in the FAQ. - Support for one-line segmentation, e.g.
sopa.segmentation.cellpose(sdata, ...)orsopa.segmentation.baysor(sdata, ...). This will implicitly use the selected parallelization backend. - Spatial elements keys are saved in
sdata.attrsso that Sopa knows automatically which element should be used in which function. It is still possible to preciseimage_key/points_key/shapes_keyif needed. More details in the FAQ. - Allows changing the auto-save settings (i.e. decide if spatial elements are saved on-disk automatically or not). This can be done via
sopa.settings.auto_save_on_disk = False. - Can recover a failed/stopped segmentation when using the API (and also
forcea segmentation, for Baysor) - Better cache handling (invisible to API users)
- New tissue segmentation for non-H&E data (
sopa.segmentation.tissue) - Full support for
baysor>=0.7.0 - Added
Stardistsegmentation (mainly used for H&E data) - Added support for Python 3.12
- The
sopa.io.uniformdataset is now deprecated (usesopa.io.toy_datasetinstead) - API: The image patches are now called
sdata["image_patches"]instead ofsdata["sopa_patches"]
- Drop support for Python 3.9
- API:
sopa.segmentation.Patches2Dis deprecated. Instead, use the functionssopa.make_image_patchesorsopa.make_transcript_patches - API: Use
sopa.overlay_segmentationinstead ofsopa.segmentation.overlay_segmentation - API: The
Aggregatorclass has been replaced by a simple function wrapper:sopa.aggregate - API: The annotations methods are moved to the utils. For instance, use
sopa.utils.higher_z_scoreinstead ofsopa.annotation.higher_z_score - CLI:
sopa readhas been renamedsopa convertto avoid confusion. - CLI: during segmentation, use
--cache-dir-nameinstead of--patch-dir - Drop support for Python 3.9
- Snakemake path issue on Windows (#64)
- Issues related to incompatible versions of Baysor
- Support
baysor>=0.7.0(#125, @lguerard).- NB: For Snakemake, please remove the
new_component_*arguments from the Baysor config.
- NB: For Snakemake, please remove the
- Use
DataTreefromxarray- use new spatialdata version (#159)
- Accept
objectdtype for channel names (#114)
- Update MACSima reader to read the channel names of the latest file format
- Fixed Baysor issue on MERSCOPE data with the Vizgen prior
- Fix patch-maker issue due to new API temporary implementation
- Fixed aggregation issue when gene names are
NaNorNone(#101) - Fix Xenium reader for old Xenium data format (#105)
- Support multipolygons in ROI rasterization
- Added bins aggregation
- Added Visium HD reader (tutorial coming soon)
- Import submodules in init (segmentation, io, utils)
- API simplification in progress (new API + tutorial coming soon)
- Convert intensities values in integer for the
ome_tifandaicsimageioreaders - Fix cellpose
pretrained_modelweights unused (@pakiessling, #90) - Prevent spillover during image preprocessing before segmentation (@pakiessling, #90)
- Blur and CLAHE can be disabled by setting the parameter to 0 (@pakiessling, #90)
- Added an optional parameter clahe_kernel_size for skimage.exposure.equalize_adapthist (@pakiessling, #90)
- Check that the image has an integer dtype before segmentation (better error log #92)
- Support Xenium multimodal segmentation as a prior for Baysor (#80)
- For snakemake, you can set a
BAYSOR_EXECUTABLE_PATHenvironment variable to indicate the path of the Baysor executable - Added ComSeg segmentation by @tdefa (#76)
- Fix Xenium reader issue for recent machine versions (#80)
- Fix type issue (
DataTreeandDataArray) related tospatialdata>=0.2.0(#85) - Fix
sjoinissue related togeopandas>=1.0.0
- Fully depends on
spatialdata-iofor the MERSCOPE and the Xenium reader - Use
DataArrayandDataTreetyping instead of (Multiscale)SpatialImage (as inspatialdata>=0.2.0)
First post-publication release
- Using
rioxarrayas a default backend for MERSCOPE data if installed - Lower RAM usage for channels aggregation
- Transcript-segmentation API more general (not Baysor-specific)
- Encoding issue while writing the report (#64)
- Renamed
embed_wsi_patchestoinfer_wsi_patches infer_wsi_patchesnow accepts also callables- Improves tile gathering speed and decreases overall computation of tile-wise inference
- Xenium reader now adds channel names, and support more recent versions (#68)
- Renamed
sopa.embeddingintosopa.patches, and moved internal files - Don't recompute
to_multiscaleif the right scales are already used for Xenium Explorer image writing
- New tutorial on Xenium Explorer interoperability
- Fix polygon selection when no channel is provided
- Fix CosMX reader for proteins
- Fix FOV column issue for CosMX data (#65)
- Check the columns of CosMX data to see if the correct export module was used
- Ensure categorical variables are used for patches clustering
- Can overlay a custom segmentation (merge boundaries)
- Xenium Explorer selection(s) can be added as shapes in a SpatialData object
- Optionnal OpenSlide backend for WSI data
- New
sopa.io.aicsimageioreader for special formats (#58)
- Rename
Aggregator.update_tabletoAggregator.compute_table
- CosMX reader with image stitching (experimental)
- Default
min_transcriptsset in snakemake configs - Minimum number of transcripts per patch set to 4000 (#41)
- Config files refactoring (configs added or renamed)
- Readers refactoring
- Section with error during report are not displayed (instead of throwing an error)
- Support multiple tables
- Spatial elements not saved when data is not backed
Hotfix: resolve issues related to spatialdata>=1.0.0
- Improvements in the CLI and API tutorials
- Sequential segmentation now requires
patchifyto be run independently - Dependency
spatialdata>=0.1.1
- Kwargs can be provided to Cellpose model init
set_transformationissue for image alignment- Import issue #37 #39
- Spatial join between shapes (
from sdata.spatial import sjoin) - H&E tutorial (basic usage)
- New backend for the MERSCOPE reader (requires
rioxarray, currently experimental, should use less RAM)
- Using
MultiscaleSpatialImageby default for multiplex imaging technologies
- Issue in report creation when channel names are integers
- Faster image writing for the Xenium Explorer (about x5 speedup)
- Cellpose default model set to
"cyto3"(new cellpose version) - Cell GeoDataFrame index consistent with
obs_names
- Support for python 3.9 to 3.11 (we still recommend
python==3.10) - Support WSI analysis: reader, tissue segmentation, patch embedding (tutorials coming soon)
- Supporting multiple region-of-interest queries
- Can load a custom cellpose model using the
pretrained_model/model_typeargument
- Missing transcript count in cells due to concurrent writing processes (#20)
- Explorer images should have a higher contrast (not clipping values anymore)
pixelsizeargument has been renamed topixel_size(the snakemake pipeline is only deprecating it for now)
- The
phenocyclerreader can now also read.tiffiles (not just.qptiff) - Added missing legend in the HTML report under the "Channels" section (#15)
- The cell area is also stored in the table (in
.obs["area"])
- The
uniformtoy dataset now has two coordinate systems (better test case) - Faster table conversion to the Xenium Explorer
- Tight patching more stable with epsilon constant
- When geometries are
GeometryCollection, convert them back to Polygons (#11) - Give
min_areaparameter to the right Baysor function in snakemake
- API tutorial
sopa.spatialtutorial- Docstrings for the snakemake pipeline utils
- Show right micron scale in the Xenium Explorer
sopa.statsis now calledsopa.spatial
- Tutorial on CLI usage
- Tutorial on image alignment with the Xenium Explorer
- Multi-step segmentation (#8)
- Tutorial for multi-step segmentation and custom segmentation
- Improved installation guide
- CLI issue (missing file) when used without Snakemake
- Use
.parquetinstead of.zarr.zipformat to store intermediate boundary polygons
- First official release
- Preprint at https://www.biorxiv.org/content/10.1101/2023.12.22.571863v1