Skip to contents
Srivastava Lab

Creating a Matisse object

Start here. This function combines your Seurat object with splicing data into a single Matisse object (and computes PSI) in one call. Pass junction_counts for short-read (junction) mode, or transcript_counts for long-read (transcript) mode, plus splice events via events (data.frame or path to a SUPPA2 .ioe file).

Short-read input (STARsolo)

Helpers for the short-read (junction) workflow. ReadSTARsoloSJ loads a STARsolo SJ matrix and relabels its junctions into the chr-start-end-strand IDs Matisse expects. BuildJunctionEvents turns SUPPA2 .ioe events into a junction-ID event table whose features match those junctions: a deterministic coordinate adapter, not a heuristic event caller.

ReadSTARsoloSJ()
Read a STARsolo splice-junction (SJ) matrix
BuildJunctionEvents()
Build a junction-ID event table from SUPPA2 events

Long-read input (transcript counts)

Helper for the long-read (transcript) workflow. ReadTranscriptMatrix loads a 10x-style MatrixMarket triplet from a long-read / isoform quantifier (Bagpiper, FLAMES, LIQA), auto-detects orientation, and returns a transcripts × cells matrix with optional version-suffix stripping so the IDs match a SUPPA2 .ioe event annotation.

ReadTranscriptMatrix()
Read a long-read transcript count matrix

Retrieve or update your data

Matisse-specific accessors. For raw count and annotation matrices, use the native Seurat API on the embedded Seurat object: e.g. SeuratObject::GetAssayData(GetSeurat(obj)[[“isoform”]], “counts”) for junction or transcript counts, or GetSeurat(obj)[[“psi”]][[]] for the per-event annotation table.

GetSeurat()
Get the embedded Seurat object
GetPSI()
Get the PSI matrix
SetPSI()
Set the PSI matrix
MatisseMeta() `MatisseMeta<-`()
Get or set cell-level metadata

Normalisation

SCTransform applies variance stabilisation and scales for sequencing depth – in transcript mode it targets the isoform assay automatically; in junction mode it targets the gene-expression assay. For log-normalisation alternatives (NormalizeData, ScaleData, FindVariableFeatures) use Seurat’s functions on the embedded Seurat object via the </code>operator(<code>obj</code> operator (<code>objNormalizeData(…)) or GetSeurat(obj).

SCTransform(<MatisseObject>)
SCTransform normalisation for MatisseObjects

Dimensionality reduction

Reduce the high-dimensional feature space to a compact representation before clustering and visualisation. RunPCA is the standard route after SCTransform.

RunPCA(<MatisseObject>)
Run PCA on a MatisseObject
RunUMAP(<MatisseObject>)
Run UMAP on a MatisseObject

Clustering and differential expression

Group cells by transcriptional state and identify marker genes. All functions operate on the embedded Seurat object and return the updated MatisseObject, except FindMarkers, which returns a data frame.

FindNeighbors(<MatisseObject>)
Compute a shared nearest-neighbour graph for a MatisseObject
FindClusters(<MatisseObject>)
Cluster cells in a MatisseObject
FindMarkers(<MatisseObject>)
Find differentially expressed markers for a MatisseObject

Metadata and assay selection

Add or update per-cell metadata columns. New columns are accessible immediately via MatisseMeta() and the $ operator. DefaultAssay picks which assay (“RNA”, “isoform”, “psi”, …) Seurat operations target by default.

AddMetaData(<MatisseObject>)
Add metadata columns to a MatisseObject
DefaultAssay(<MatisseObject>) `DefaultAssay<-`(<MatisseObject>)
Get or set the default assay of a MatisseObject

Signac methods

Signac methods forwarded to the embedded Seurat object: RunTFIDF, FindTopFeatures and RunSVD (latent semantic indexing).

RunTFIDF(<MatisseObject>)
Run TF-IDF normalisation for a MatisseObject
FindTopFeatures(<MatisseObject>)
Find highly variable ATAC-seq features for a MatisseObject
RunSVD(<MatisseObject>)
Run SVD (LSI) for a MatisseObject

Calculate splicing ratios (PSI)

Compute PSI (Percent Spliced In) – the fraction of transcripts in each cell that include a given exon. Values range from 0 (exon always skipped) to 1 (exon always included). CreateMatisseObject() calls CalculatePSI() automatically; you only call it directly to recompute with different parameters (e.g. min_coverage) or after constructing with defer_psi = TRUE.

CalculatePSI()
Calculate PSI matrix from junction or transcript counts
SummarizePSI()
Summarize PSI distribution across cells for each event

Quality control and filtering

Identify and remove cells or splicing events that don’t have enough data for reliable analysis. QC columns written automatically: nCount_isoform and nFeature_isoform at construction; nPercent_isoform after CalculatePSI().

FilterCells()
Filter cells by QC thresholds
FilterEvents()
Filter splice events by coverage or variance

Visualisation

Plot splicing patterns across your cells. Overlay any feature (PSI values, junction counts, or gene expression) on a UMAP, compare splicing between cell types, or inspect junction usage for a gene of interest. Pass the feature name via the feature argument.

PlotUMAP()
UMAP plot – by group (DimPlot-style) or by feature (FeaturePlot-style)
PlotViolin()
Violin plot of feature values split by cell group
PlotHeatmap()
Heatmap of PSI values (events x cells, DoHeatmap-style)
PlotSashimi()
Sashimi-style coverage plot for a splice event

Utilities

Helper functions for combining datasets.

MergeMatisse()
Merge two MatisseObjects by cells