---
title: "Interactive"
output: 
  html_document:
    toc: true
    toc_float:
      collapsed: false
      smooth_scroll: false
---

<style>
.title{
  display: none;
}
body {
  text-align: justify
}
.center {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
</style>

```{css, echo=FALSE}
.watch-out {
  color: black;
}
```

```{r setup, include=FALSE}
# use rmarkdown::render_site(envir = knitr::knit_global())
knitr::opts_chunk$set(highlight = TRUE, echo = TRUE)
```

<br>

# Interactive Annotation

**VoltRon** includes interactive applications to select and manually label spatial points by drawing polygons and circles. As an example, we will use a Spot-based spatial transcriptomic assay, specifically the **Mouse Brain Serial Section 1/2** datasets, analyzed in the [Niche Clustering](nicheclustering.html) tutorial. You can find the already analyzed data stored as a VoltRon object [here](https://bimsbstatic.mdc-berlin.de/landthaler/VoltRon/NicheClustering/Visium&Visium_data_decon_analyzed.rds)

```{r class.source="watch-out", eval = FALSE}
MBrain_Sec <- readRDS("Visium&Visium_data_decon_analyzed.rds")
```

We can start annotating the spatial assay. By passing arguments used by the **vrSpatialPlot** function to visualize labels (e.g. clusters), we can better select regions within tissue sections for annotation. 

```{r class.source="watch-out", eval = FALSE}
MBrain_Sec <- annotateSpatialData(MBrain_Sec, assay = "Assay1", 
                                  group.by = "clusters", label = "annotation")
```

<img width="100%" height="100%" src="https://bimsbstatic.mdc-berlin.de/landthaler/VoltRon/Package/images/interactive_annotation.png" class="center">

<br>

Here, **annotateSpatialData** function not only labels spots with within regions of interests (ROIs) selected by the user, but also records these regions in ROI assays within the same layer of the annotated Visium assay. The new assay type will be given the name **ROIAnnotations** if otherwise not specified using the **annotation_assay** arguement in the function.

```{r class.source="watch-out", eval = FALSE}
MBrain_Sec 
```

```
VoltRon Object 
Anterior: 
  Layers: Section1 Section2 
Posterior: 
  Layers: Section1 Section2 
Assays: Visium_decon(Main) Visium ROIAnnotation 
```

```{r class.source="watch-out", eval = FALSE}
MBrain_Sec@sample.metadata 
```

```
> MBrain_Sec@sample.metadata
               Assay    Layer    Sample
Assay1        Visium Section1  Anterior
Assay2        Visium Section2  Anterior
Assay3        Visium Section1 Posterior
Assay4        Visium Section2 Posterior
Assay5 ROIAnnotation Section1  Anterior
```

The new annotations are available in the metadata of the spot assay (default assay in this object) and can be visualized if wanted.

```{r class.source="watch-out", eval = FALSE}
head(Metadata(MBrain_Sec))
```

```
                          Count        Assay    Layer   Sample clusters annotation
AAACAAGTATCTCCCA-1_Assay1     1 Visium_decon Section1 Anterior        1   Region 3
AAACACCAATAACTGC-1_Assay1     1 Visium_decon Section1 Anterior        3  undefined
AAACAGAGCGACTCCT-1_Assay1     1 Visium_decon Section1 Anterior        4  undefined
AAACAGCTTTCAGAAG-1_Assay1     1 Visium_decon Section1 Anterior        5   Region 1
AAACAGGGTCTATATT-1_Assay1     1 Visium_decon Section1 Anterior        5   Region 1
AAACATGGTGAGAGGA-1_Assay1     1 Visium_decon Section1 Anterior        3  undefined
```

```{r class.source="watch-out", eval = FALSE}
vrSpatialPlot(MBrain_Sec, assay = "Assay1", group.by = "annotation")
```

<img width="80%" height="80%" src="https://bimsbstatic.mdc-berlin.de/landthaler/VoltRon/Package/images/interactive_annotation_plot.png" class="center">

<br>

You can also overlay the ROI annotations with the clustered spots to visualize multiple assays in the same time.

```{r class.source="watch-out", eval = FALSE}
library(ggnewscale)
vrSpatialPlot(MBrain_Sec, assay = "Assay1", group.by = "clusters") |> 
  addSpatialLayer(MBrain_Sec, assay = "Assay5", group.by = "annotation", alpha = 0.7)
```

<img width="80%" height="80%" src="https://bimsbstatic.mdc-berlin.de/landthaler/VoltRon/Package/images/interactive_annotation_example_overlay_plot.png" class="center">

<br>

# Interactive Visualization

VoltRon incorporates utilities 

* **(i)** to convert VoltRon objects into other spatial data objects and files that could be used platforms, and 
* **(ii)** to incorporate wrapper functions to call methods from package that achieves interactive visualization

<br>

## Vitessce 

We will transform VoltRon objects of Xenium data into zarr arrays, and use them for interactive visualization in [Vitessce](http://vitessce.io/). We should first download the vitessceR package which incorporates wrapper function to visualize zarr arrays interactively in R.

```{r class.source="watch-out", eval = FALSE}
if (!require("devtools", quietly = TRUE))
    install.packages("devtools")
if (!require("vitessceR", quietly = TRUE))
    devtools::install_github("Artur-man/vitessceR")
```

We can convert the VoltRon object into an anndata object and save it as a a zarr array using the **as.AnnData** function which will create the array in the specified location. We use the **flip_coordinates=TRUE** argument to flip the coordinates of cells vertically, hence match it with the top to bottom system of the background DAPI image. Also, we can save an OMETIFF file of the DAPI image using **create.ometiff** arguement to be used by vitessceR later.

```{r class.source="watch-out", eval = FALSE}
xenium_data <- as.AnnData(xenium_data, file = "xenium_data.zarr", assay = "Xenium", 
                          flip_coordinates = TRUE, create.ometiff = TRUE)
```

<br>

We can use the zarr file directly in the **vrSpatialPlot** function to visualize the zarr array interactively in Rstudio viewer. The **reduction** arguement allows the umap of the Xenium data to be visualized alongside with the spatial coordinates of the Xenium cells (thus associated cell segmentations).

```{r class.source="watch-out", eval = FALSE}
vrSpatialPlot("xenium_data.zarr", group.by = "clusters", reduction = "umap")
```

<img width="90%" height="90%" src="https://bimsbstatic.mdc-berlin.de/landthaler/VoltRon/Package/images/interactive_vitessce.png" class="center">

<br>

The vitessce application in the viewer pane allows visualizing background DAPI image and segmentations simultaneously while allowing users to zoom in and control the pane for advanced visualization. 

<img width="90%" height="90%" src="https://bimsbstatic.mdc-berlin.de/landthaler/VoltRon/Package/images/interactive_vitessce_zoom.png" class="center">

<br>

## TissUUmaps

To use **TissUUmaps** for interactive investigation of your spatial omic data, we first need to convert the VoltRon object into an anndata object. However, this time we save the anndata object as an h5ad array using again the **as.AnnData** function which will create the array in the specified location. We use the **flip_coordinates=TRUE** argument to flip the coordinates of cells vertically, hence match it with the top to bottom system of the background DAPI image. 

```{r class.source="watch-out", eval = FALSE}
as.AnnData(xenium_data, file = "xenium_data.h5ad", assay = "Xenium", flip_coordinates = TRUE)
```

To use **TissUUmaps**, you can follow the instructions [here](https://tissuumaps.github.io/installation/). Once installed and executed, simply drag and drop the h5ad file to the main panel of the application

<img width="100%" height="100%" src="https://bimsbstatic.mdc-berlin.de/landthaler/VoltRon/Package/images/interactive_tissuumaps.png" class="center">

<br>

## VoltRon

You can also use the built-in Shiny-based interactive visualizers of the VoltRon package by calling **interactive=TRUE**. You can zoom in by drawing a box on the plot and double-clicking in the selected area. 

```{r class.source="watch-out", eval = FALSE}
vrSpatialPlot(xenium_data, group.by = "clusters", plot.segments = TRUE, interactive = TRUE)
```

<img width="85%" height="85%" src="https://bimsbstatic.mdc-berlin.de/landthaler/VoltRon/Package/images/interactive_voltron.png" class="center">

<br>

