Object Initiation & Transformation

These functions generate the spata-object you will work with throughot this and other platforms.

Object Initiation & Updating

The initiation-functions create a spata-object from scratch.

initiateSpataObject_10X()

Initiate a spata2 object from 10X Visium

initiateSpataObject_CountMtr()

Initiate a spata2 object from a raw count matrix

initiateSpataObject_Empty()

Initiate an empty spata2 object

initiateSpataObject_Examples()

Initiate a spata2 object from example data sets

initiateSpataObject_ExprMtr()

Initiate spata object from scaled expression matrix

updateSpataObject()

Update spata-object from SPATA to SPATA2

Transformation

The transform-functions ensure compatibility between different platforms.

asGiotto()

Transform spata2 object to Giotto

asHistologyImage()

Convert to class HistologyImage

asHistologyImaging()

Convert to class HistologyImaging

asSeurat()

Transform SPATA2 to Seurat

asSingleCellExperiment()

Transform to SingleCellExperiment

asSPATA2()

Transform to spata2 object object

asSpatialTrajectory()

Transform to SpatialTrajectory

asSummarizedExperiment()

Transform to SummarizedExperiment

asVisiumV1()

Transform HistologyImage to VisiumV1

Object Loading and Saving

Some handy functions that make saving and loading corresponding objects more convenient.

loadImage() loadImageDefault() loadImageHighres() loadImageLowres()

Load known images

loadSpataObject()

Load corresponding objects

saveGeneSetDf()

Save a gene set data.frame

saveCorrespondingCDS() saveCorrespondingSeuratObject() saveSpataObject()

Save corresponding objects

Object Subsetting

Create spata-objects from data subsets for more in depth analysis.

subsetByBarcodes()

Subsetting by barcodes

subsetByGenes()

Subset by genes

cropSpataObject()

Subset by x- and y-range

Object Manipulation

Add Content

The add-functions let you add content to the spata-object savely.

addAutoencoderSetUp()

Add the set up of a neural network

addExpressionMatrix()

Add an expression matrix

addFeatures()

Add a new feature

addGeneFeatures()

Add new gene features

addGeneMetaData()

Add gene meta data to the object

addGeneSet() addGeneSetsInteractive()

Add a new gene set

addImageDir()

Add individual image directories

addImageAnnotation() createImageAnnotations()

Add image annotations

addSpatialTrajectory() createSpatialTrajectories()

Add spatial trajectories

Create Content Interactively

createHistologyImaging()

Create object of class HistologyImaging

addImageAnnotation() createImageAnnotations()

Add image annotations

createSpatialSegmentation()

Interactive sample segmentation

addSpatialTrajectory() createSpatialTrajectories()

Add spatial trajectories

Discard Content

The discard-functions let you delete unwanted information savely.

discardExpressionMatrix()

Discard an expression matrix

discardFeatures()

Discard features

discardGeneFeatures()

Discard gene features

discardGenes()

Discard genes

discardGeneSets()

Discard gene sets

discardImageAnnotations()

Discard image annotations

Rename Content

The rename-functions let you adjust the name of certain content with which you refer to it via arguments

renameFeatures()

Rename features

renameGroups() renameSegments()

Rename cluster/group names

renameImgAnn()

Rename image annotation ID

Set Content

The set-functions let you set the content of specific slots.

setActiveMatrix() setActiveExpressionMatrix()

Denote the default expression matrix

setAutoencoderAssessment()

Set results of autoencoder assessment

setBarcodes()

Set barcodes

setCCD()

Set center to center distance

setCnvResults()

Set cnv-results

setCoordsDf()

Set the coordinates

setCountMatrix() setDenoisedMatrix() setNormalizedMatrix() setScaledMatrix()

Set data matrices

setDefault()

Set object specific default

getDefaultGrouping() setDefaultGrouping()

Default grouping

setDefaultInstructions() setDirectoryInstructions()

Set default instructions

getDefaultTrajectory() getDefaultTrajectoryId() setDefaultTrajectory() setDefaultTrajectoryId()

Obtain dimensional reduction data

setFeatureDf()

Set feature data.frame

setGeneSetDf()

Set the gene-set data.frame

setImageAnnotation() setImageAnnotations()

Set image annotations

setImageDirDefault() setImageDirHighres() setImageDirLowres()

Set image directories

setImageObject()

Set image object

setImageOrigin()

Set image origin

setInitiationInfo()

Set initiation information

setPcaDf() setTsneDf() setUmapDf()

Set dimensional reductions data.frames

setPixelScaleFactor()

Set pixel scale factor

setSpataDir()

Set SPATA2 directory

setSpatialMethod()

Set the SpatialMethod object

setSpatialMethodInfo()

Set information of SpatialMethod object

setSpatialMethodSlot()

Set slot content of SpatialMethod object

setTrajectory() setTrajectories()

Set trajectories

Availability Checks

containsCNV() containsHistologyImage()

Check availability of miscellaneous content

containsHistologyImaging() containsImageObject()

Check availability of HistologyImaging object

containsImage()

Check availability of an image

containsPixelScaleFactor()

Check availability of pixel scale factor

Built-in Data

clustering

A list of data.frames that contain clustering variables for specific SPATA2 objects - available via the SPATAData package. Names of the list slots correspond to the sample names in variable sample of SPATAData::source_df. Names of the cluster variables in the data.frames corresponds to the algorithm used.

cnv_ref

A list of reference data for copy number variation analysis (CNV)

cnv_regions_df

A data.frame necessary for cnv-analysis. Contains information about start and end points of chromosomes.

dea

A nested list. First layer is named by the sample name. Second layer is named by the grouping variable. Third layer is named by the method. Contains data.frames of differential gene expression analysis results from the function Seurat::FindAllMarkers(). Set with setDeaResultsDf().

gene_pos_df

A data.frame necessary for cnv-analysis. Contains information about the gene positions on chromosomes. Contains the following variables:

gsdf

The default collection of frequently used gene-sets

image_annotations

A list of lists of image annotations for specific SPATA2 objects - available via the SPATAData package. Names of the list slots correspond to the sample names in variable sample of SPATAData::source_df.

sc_deconvolution

List of data.frames of single cell deconvolution. Names of the list correspond to the sample name. Obtain data.frame using sc_deconvolution[[*<sample.name>*]]

scale_factors

List of scale factors for Visium input.

spatial_segmentations

A list of lists of spatial segmentations for specific SPATA2 objects - available via the SPATAData package. Names of the list slots correspond to the sample names in variable sample of SPATAData::source_df. Every sample specific slot is a data.frame with two variables: barcodes and the spatial segmentation variable (usually named histolgoy).

spatial_trajectories

A list of lists of spatial spatial_trajectories for specific SPATA2 objects - available via the SPATAData package. Names of the list slots correspond to the sample names in variable sample of SPATAData::source_df.

summarize_formulas

List of summarizing formulas

visium_coords

A data.frame that contains all barcode spots of the Visium method including their spatial positioning. Variable names: barcodes, col, row, imagecol, imagerow, xlr, ylr, xhr, yhr. lr = low resolution, hr = high resolution

Counting

nBarcodes()

Number of barcodes

nCounts()

Number of counts

nGenes()

Number of genes

nImageAnnotations()

Number of image annotations

nSpatialTrajectories() nTrajectories()

Number of spatial trajectories

Download

downloadPubExample()

Download data from the publication

downloadSpataObject() downloadSpataObjects()

Download spata2 objects

downloadRawData()

Download raw Visium output

Extract Data

getAutoencoderAssessment()

Obtain information about the optimal neural network set up

getAutoencoderSetUp()

Obtain information on neural network

Copy Number Variations

getChrRegionsDf()

Obtain chromosome information

getCnvFeatureNames()

Obtain features names under which cnv-analysis results are stored.

getCnvGenesDf()

Obtain CNV results by gene

getCnvResults()

Obtain copy-number-variations results

Data matrices

getActiveMatrixName() getActiveExpressionMatrixName()

Obtain name of currently active data matrix

getExpressionMatrixNames()

Obtain names of stored expression matrices

getCountMatrix() getExpressionMatrix() getMatrix() getMatrices()

Obtain count and expression matrix

Dimensional Reduction and Spatial Coordinates

getBarcodesInPolygon() getBarcodesInPolygonList()

Obtain barcodes in polygon

getBarcodeSpotDistance()

Obtain barcode spot distances

getBarcodeSpotDistances()

Obtain distances between barcodes

getCoordsCenter()

Obtain coordinate center

getCoordsRange()

Obtain coordinate range

getDimRedDf() getPcaDf() getPcaMtr() getTsneDf() getUmapDf()

Obtain dim red data.frame

getTissueOutlineDf()

Obtain outline barcode spots

Features & Grouping

getFeatureNames()

Obtain feature names

getCnvFeatureNames()

Obtain features names under which cnv-analysis results are stored.

getFeatureDf()

Obtain feature data

getFeatureValues()

Obtain unique categorical feature values

getFeatureVariables()

Obtain a feature variable

getGroupingOptions()

Obtain variable names that group the barcode spots

getGroupNames()

Obtain group names a grouping variable contains

Differential Expression Analysis

getDeaLfcName()

Obtain LFC name

getDeaOverview()

Obtain info on de-analysis storage

getDeaGenes() getDeaResultsDf()

Obtain de-analysis results

Gene Set Enrichment Analysis

getGseaDf()

Obtain enrichment data.frame

getGseaResults()

Obtain enrichment results

getSignatureEnrichment()

Obtain signature enrichment

Genes & Gene-sets

getGeneCounts()

Obtain total number of gene counts

getGeneFeatureNames()

Obtain feature names of the gene meta data

getGeneMetaData() getGeneMetaDf()

Obtain gene meta data

getGenePosDf()

Obtain gene information

getGenes() getGenesInteractive()

Obtain gene names

getGeneSetDf() getGeneSetList()

Obtain gene set data.frame

getGeneSetOverview()

Overview about the current gene sets

getGeneSets() getGeneSetsInteractive()

Obtain gene set names

Gradient Screening

getResultsDf()

Obtain results stored in data.frames

getResultsVec()

Obtain screening results stored in vectors

Image

getIasDf() getImageAnnotationScreeningDf()

Obtain image annotation screening data.frame

getImage()

Obtain histology image

getImageAnnotation()

Obtain object of class ImageAnnotation

getImageAnnotations()

Obtain list of ImageAnnotation-objects

getImageCenter()

Obtain image center

getImageDf()

Obtain melted image

getImageDims() getImageRange()

Obtain image dimensions/ranges

getImageDir() getImageDirDefault() getImageDirectories() getImageDirHighres() getImageDirLowres()

Obtain image directories

getImageInfo()

Obatain image information

getImageObject()

Obtain object of class HistologyImage

getImageOrigin()

Obtain image origin

getImageRaster() getImageRasterInfo()

Obtain image raster-(information)

getImageSectionsByBarcode()

Obtain image sections by barcode spot

getPixelDf()

Obtain pixel data.frame

getPixelScaleFactor()

Obtain scale factor for pixel to Euol conversion

Image Annotations

getIasDf() getImageAnnotationScreeningDf()

Obtain image annotation screening data.frame

getImageAnnotation()

Obtain object of class ImageAnnotation

getImageAnnotations()

Obtain list of ImageAnnotation-objects

getImgAnnArea()

Obtain area of image annotation

getImgAnnBarcodes()

Obtain barcodes by image annotation tag

getImgAnnCenterBcsp()

Obtain center barcode-spot

getImgAnnRange()

Obtain image annotations range

getImgAnnSf()

Obtain simple feature

getImgAnnSummaryDf()

Obtain image annotation summary

getImgAnnTags()

Obtain image annotations tags

Miscellaneous

getBarcodes()

Obtain specific barcodes

getCnvResults()

Obtain copy-number-variations results

getDefault() getDefaultInstructions() getDirectoryInstructions()

Obtain default argument inputs

getInitiationInfo() getInitiationInput()

Obtain information about object initiation

getSampleAreaSize()

Obtain sample area size

getSampleNames() getSampleName()

Obtain name of SPATA2 object

getSpataDf()

Obtain a spata-data.frame

getSpataDir()

Obtain SPATA2 object directory

getVariableNames()

Obtain variable names

Spatial Measures

getCCD()

Obtain center to center distance

getSampleAreaSize()

Obtain sample area size

getSpatialMethod()

Obtain spatial method

Spatial Trajectories

getProjectionDf()

Obtain trajectory projection

getSpatialTrajectory() getSpatialTrajectories()

Obtain objects of class SpatialTrajectory.

getSpatialTrajectoryIds()

Obtain spatial trajectory IDs

getTrajectoryDf()

Obtain a trajectory data.frame

getTrajectoryIds()

Obtain trajectory ids

getTrajectoryLength()

Obtain length of trajectory

getTrajectorySegmentDf()

Obtain trjectory course

Grouping

mergeGroups()

Lump groups together

renameGroups() renameSegments()

Rename cluster/group names

relevelGroups()

Relevel groups of grouping variable

bin_by_angle()

Bin barcode-spots by angle

bin_by_expansion()

Bin barcode-spots by area extension

countImageAnnotationTags()

Count image annotation tags

imageAnnotationToSegmentation()

Convert image annotation to segmentation

mapImageAnnotationTags()

Image annotation and barcode intersection

relateToImageAnnotation()

Relate observations to an image annotation

Image handling and Image-Coordinate Alignment

alignImageAnnotation() alignSpatialTrajectory()

Align image annotation

exchangeImage()

Exchange image

flipAll() flipCoordinates() flipCoordsDf() flipImage() flipImageAnnotations() flipSpatialTrajectories()

Mirror invert image and coordinates

resetImageJustification()

Reset image justification

rotateAll() rotateImage() rotateCoordinates() rotateCoordsDf() rotateImageAnnotations() rotateSpatialTrajectories()

Rotate image and coordinates

scaleAll() scaleImage() scaleCoordinates() scaleCoordsDf() scaleImageAnnotations() scaleSpatialTrajectories()

Scale image and coordinates

Information & Summaries

Some handy functions that quickly give you an overwiew about the spata-object’s content and the progress you have made.

printAutoencoderSummary()

Print autoencoder summary

printDeaOverview()

Print overview of all conducted de-analysis

printDefaultInstructions()

Print current default settings

printGeneSetOverview()

Print overview about the current gene sets

Join Information

These functions access the information of interest, perform additional customized computations and join it as additional variables to already existing data.frames in a tidy-data fashion.

joinWith() joinWithFeatures() joinWithGenes() joinWithGeneSets() joinWithVariables()

Join barcodes with additional variables

joinWithPca() joinWithTsne() joinWithUmap()

Join barcodes with additional variables

Miscellaneous Algorithms

Computationally heavy calculations

These functions perform calculations that might take some time. The results are stored inside the spata-object and can be obtained via get-functions.

computeCnvByChrArm()

Compute CNV by chromosome arm

computeGeneMetaData() computeGeneMetaData2()

Compute gene summary statistics

assessAutoencoderOptions() runAutoencoderAssessment()

Assessment of Neural Network Set Up

runAutoencoderDenoising()

Denoise expression matrix

runBayesSpaceClustering()

Clustering with BayesSpace

runCnvAnalysis()

Identify large-scale chromosomal copy number variations

runDEA() runDeAnalysis()

Find differently expressed genes

runGSEA()

Compute gene set enrichment

runPca() runPca2()

Run Principal Component Analysis

runSeuratClustering()

Clustering with Seurat

getSparkxGeneDf() getSparkxGenes() getSparkxResults() runSparkx()

Identify genes of interest with SPARKX

runTsne() runTsne2()

Run t-Stochastic Neighbour Embedding

runUmap() runUmap2()

Run UMAP-Analysis

findMonocleClusters()

Cluster sample via monocle3

findNearestNeighbourClusters()

Cluster sample via nearest neighbour analysis

findSeuratClusters()

Cluster sample via Seurat

Process & Examine

filterDeaDf()

Postprocess de-analysis results

examineClusterResults()

Examine clustering results

Miscellaneous Functions

add_outline_variable()

Add outline variable

add_dbscan_variable() add_tissue_section_variable()

Add tissue section variable

all_bcsp_distances()

Obtain a all barcode-spots distances

arrange_as_polygon()

Arrange observations as polygon

barcodesToImageAnnotation()

Create image annotations from a list of barcodes

buffer_area()

Buffer area

create_model_df()

Create model data.frame

currentSpata2Version()

The current version of SPATA2

deprecatedInfo()

Information about deprecated aspects

mergeTissueSections()

Merge tissue sections

identifyTissueOutline()

Identify tissue outline

identifyTissueSections()

Identify tissue sections

include_tissue_outline()

Include spatial extent of tissue sections in analysis

intersect_polygons()

Test polygon intersection

tissueOutlineIdentified() tissueSectionsIdentfied()

Check availability of tissue information

validActivationFunctions() validAgglomerationMethods() validAlluvialTypes() validColorPalettes() validColorSpectra() validDeAnalysisMethods() validDefaultInstructionSlots() validDimRedMethods() validDirectoryInstructionSlots() validDistanceMethods() validHierarchicalClusterMethods() validImageClasses() validModelNames() validPatternRecognitionMethods() validPadjMethods() validPlotTypes() validPubExamples() validSpatialMethods() validTrajectoryTrends() validUnits() validUnitsOfArea() validUnitsOfAreaSI() validUnitsOfLength() validUnitsOfLengthSI() validEuropeanUnitsOfLength()

Obtain valid argument inputs

Spatial Gradient Screening

Functions around Spatial Trajectory Screening and Image Annotation Screening.

gradientToModelIAS() gradientToModelSTS()

Create input for model_add

imageAnnotationScreening()

Implementation of the IAS-algorithm

inferSingleCellGradient()

Count cells depending on distance to image annotation

spatialTrajectoryScreening()

The Spatial Trajectory Screening algorithm

getStsDf()

Obtain spatial trajectory screening data.frame

getIasBinAreas()

Calculate IAS bin area

getIasDf() getImageAnnotationScreeningDf()

Obtain image annotation screening data.frame

getIasExpansion()

Obtain expanded Image Annotation polygons

summarizeIAS()

Summarize IAS-results

Spatial Measures

are_all_area_or_dist()

Test area or distance input

as_meter() as_meter2() as_micrometer() as_micrometer2() as_millimeter() as_millimeter2() as_nanometer() as_nanometer2() as_pixel() as_unit() as_centimeter() as_centimeter2() as_decimeter() as_decimeter2()

Transform distance and area values

as_SPATA2_dist()

Distance transformation

extract_unit()

Extract distance units

extract_value()

Extract distance value

is_area() is_area_pixel() is_area_si()

Test area input

is_dist() is_dist_si() is_dist_pixel()

Test distance input

is_unit_area()

Test unit of area input

is_unit_dist()

Test unit of length input

transform_area_si_to_pixel() transform_area_si_to_pixels()

Convert area in SI units to pixel

transform_dist_si_to_pixel() transform_dist_si_to_pixels()

Convert from European Units of Length to pixels

transform_pixel_to_area_si()

Converts from pixel to area in SI units

transform_pixel_to_dist_si() transform_pixels_to_dist_si()

Convert from pixels to European units of length

S4 Classes

HistologyImaging-class HistologyImaging

The HistologyImaging - Class

ImageAnnotation-class ImageAnnotation

The ImageAnnotation - Class

ImageAnnotationScreening-class ImageAnnotationScreening

The ImageAnnotationScreening - Class

spata2-class spata2

The spata2- Class

SpatialMethod-class SpatialMethod

The SpatialMethod - Class

SpatialTrajectory-class SpatialTrajectory

The SpatialTrajectory - Class

SpatialTrajectoryScreening-class SpatialTrajectoryScreening

The SpatialTrajectoryScreening - class

Trajectory-class Trajectory

The Trajectory - Class

Visium-class Visium

The Visium - Class

Visualization

plotAutoencoderAssessment()

Plot total variance of different neural networks

plotAutoencoderResults()

Plot scaled vs. denoised expression

Copy Number Variation

plotCnvHeatmap()

Plot CNV Heatmap

plotCnvLineplot()

Plot CNV Lineplot

Differential Expression Analysis & GSEA

Visualize the results of differential expression nalysis

plotDeaDotPlot()

Plot differentially expressed genes

plotDeaGeneCount()

Plot the number of differently expressed genes of certain groups

plotDeaHeatmap()

Plot differentially expressed genes

plotDeaLogFC() plotDeaPvalues()

Plot the p-value and log fold change distribution of de-analysis results

plotDeaSummary()

Plot a summary of differential expression analysis results

plotDeaVolcano() plotDeaVolcano1v1()

Plot gene expression testing results

plotGseaDotPlot()

Plot gene set enrichment

Dimensional Reduction

Visualize the barcode spots in a reduced dimension fashion.

plotPca() plotTsne() plotTsneComparison() plotUmap() plotUmapComparison()

Plot dimensional reduction

plotPcaVariation()

Plot Pca Variation

ggpLayer and other gg objects

Add ggroto objects to ggplot2 plots.

ggpInit()

Initiate ggplot2 layering

ggpLayerAxesClean()

Display clean axes

ggpLayerAxesSI()

Display axes with SI units of length

ggpLayerColorGroupScale()

Add group specific color spectrum

ggpLayerEncirclingIAS()

Add IAS area expansion

ggpLayerFrame() ggpLayerFixFrame()

Fix ggplot frame

ggpLayerFrameByCoords() ggpLayerFrameByImage()

Set plot limits

ggpLayerGroupOutline()

Add group outline

ggpLayerHorizonIAS()

Add IAS area horizon

ggpLayerImage()

Add histology image

ggpLayerImgAnnPointer()

Add pointer towards image annotations

ggpLayerImgAnnRect()

Add a rectangular around an image annotation

ggpLayerLineplotAid()

Add horizontal and vertical lines

ggpLayerRect()

Add a rectangular to the plot

ggpLayerScaleBarSI()

Add a scale bar in SI units

ggpLayerThemeCoords()

Add coordinates theme

ggpLayerTissueOutline()

Add a hull that outlines the tissue

ggpLayerTrajectories()

Add trajectory layer

ggpLayerZoom()

Set plot limits manually

theme_lineplot_gradient() theme_ridgeplot_gradient() theme_trajectory_fit()

ggplot2 themes

legendBottom() legendColor() legendLeft() legendNone() legendRight() legendTop()

ggplot2 legend manipulation

geoms

geom_point_fixed()

Points (fixed size ~ window ratio)

geom_segment_fixed()

Segments (fixed size ~ window ratio)

geom_text_fixed()

Text (fixed size ~ window ratio)

Image & Image Annotations

addPointsBase()

Add points to base surface plot

plotImage()

Plot histology image

plotImageGgplot()

Plot histology image (ggplot2)

plotImagesGgplot()

Plot histology images (ggplot2)

plotImageAnnotations()

Plot image annotations

Miscellaneous

Visualize a variety of aspects.

plotFourStates() plotFourStates2()

Plot state plot

plotScatterplot()

Plot numeric variables as a scatterplot

showColors() showColorPalettes() showColorSpectra()

Show color palettes and spectra

showModels()

Show spatial gradient screening models

Spatial Gradient

plotClockplot()

Plota clockplot

plotIasBarplot() plotIasBarplotSC()

Plot IAS barplot

plotIasEvaluation()

Plot IAS evaluation per variable-model pair

plotIasHeatmap()

Plot IAS heatmap

plotIasLineplot() plotIasLineplotSC()

Plot IAS lineplot

plotIasLineplotFitted()

Plot IAS model fitting

plotIasRidgeplot() plotIasRidgeplotSC()

Plot IAS rideplot

plotOverview()

Plot overview of S4 objects

plotVolcano()

Compare evaluation of spatially opposing fits

plotTrajectoryBarplot()

Plot categorical trajectory dynamics

plotTrajectoryEvaluation()

Plot STS evaluation per variable-model pair

plotTrajectoryHeatmap()

Plot trajectory expression dynamic in heatmap

plotTrajectoryLineplot() plotTrajectoryRidgeplot()

Plot continuous trajectory dynamics

plotTrajectoryLineplotFitted()

Plot trajectory model fitting

Statistics

plotBarchart()

Plot distribution of discrete variables

plotBoxplot() plotDensityplot() plotHistogram() plotRidgeplot() plotVioBoxplot() plotViolinplot()

Plot numeric distribution and statistical tests

plotMosaicplot()

Plot mosaic plot

plotRiverplot()

Plot riverplots

plotStatisticsInteractive()

Plot distribution of variables interactively

Surface Plots

plotSurface() plotSurfaceInteractive()

Plot the surface of the sample

plotSurfaceAverage()

Plot several surface plots colored by gene averages

plotSurfaceBase()

Plot surface with R base plotting

plotSurfaceComparison() plotSurfaceComparison2()

Plot several surface plots colored by numeric variables

plotSurfaceIAS()

Plot screening area of IAS-algorithm

plotSurfaceQuantiles()

Plot a surface plot colored by binned numeric variables

plotSurfaceSC()

Plot single cells on surface