Switch to unified view

a b/tests/testthat/test-ondisk.R
1
# packages 
2
skip_if_not_installed("rhdf5")
3
skip_if_not_installed("pizzarr")
4
skip_if_not_installed("HDF5Array")
5
skip_if_not_installed("HDF5DataFrame")
6
skip_if_not_installed("ZarrArray")
7
skip_if_not_installed("ZarrDataFrame")
8
skip_if_not_installed("ImageArray")
9
skip_if_not_installed("BPCells")
10
11
# create dir
12
dir.create(td <- tempfile())
13
output_zarr <- paste0(td, "/xenium_data_zarr_test")
14
output_h5ad <- paste0(td, "/xenium_data_h5_test")
15
output_h5ad_2 <- paste0(td, "/xenium_data_h5_test")
16
output_h5ad_merged <- paste0(td, "/xenium_data_merged_h5_test")
17
18
test_that("save and load on disk", {
19
  
20
  # get data
21
  data("xenium_data")
22
  
23
  # HDF5
24
  xenium_data2 <- saveVoltRon(xenium_data, 
25
                              output = output_h5ad, 
26
                              format = "HDF5VoltRon", 
27
                              replace = TRUE, 
28
                              verbose = FALSE)
29
  xenium_data2 <- loadVoltRon(dir = output_h5ad)
30
31
  # TODO: output zarr problem with path
32
  # zarr
33
  xenium_data2 <- saveVoltRon(xenium_data,
34
                              output = output_zarr,
35
                              format = "ZarrVoltRon",
36
                              replace = TRUE,
37
                              verbose = FALSE)
38
  xenium_data2 <- loadVoltRon(dir = output_zarr)
39
40
  # remove files
41
  unlink(output_h5ad, recursive = TRUE)
42
  unlink(output_zarr, recursive = TRUE)
43
44
  expect_equal(1,1L)
45
})
46
47
test_that("double write and merging", {
48
  
49
  # get data
50
  data("visium_data")
51
  data("xenium_data")
52
  
53
  # TODO: output zarr problem with path
54
  # write merged data
55
  xenium_data2 <- xenium_data
56
  xenium_data2$Sample <- "XeniumR2"
57
  xenium_data2 <- merge(xenium_data, xenium_data2, verbose = FALSE)
58
  xenium_data3 <- saveVoltRon(xenium_data2,
59
                              output = output_zarr,
60
                              format = "ZarrVoltRon",
61
                              replace = TRUE,
62
                              verbose = FALSE)
63
  
64
  # merged ondisk data
65
  xenium_data_disk <- saveVoltRon(xenium_data, 
66
                              output = output_h5ad, 
67
                              format = "HDF5VoltRon", 
68
                              replace = TRUE, 
69
                              verbose = FALSE)
70
  xenium_data2 <- xenium_data 
71
  xenium_data2$Sample <- "XeniumR2"
72
  xenium_data2_disk <- saveVoltRon(xenium_data2, 
73
                                   output = output_h5ad_2, 
74
                                   format = "HDF5VoltRon", 
75
                                   replace = TRUE, 
76
                                   verbose = FALSE)
77
  xenium_data_merged <- merge(xenium_data_disk, xenium_data2_disk, verbose = FALSE)
78
  xenium_data_merged_disk <- saveVoltRon(xenium_data_merged, 
79
                                         output = output_h5ad_merged, 
80
                                         format = "HDF5VoltRon", 
81
                                         replace = TRUE, 
82
                                         verbose = FALSE)
83
  
84
  # remove files
85
  unlink(output_h5ad, recursive = TRUE)
86
  unlink(output_h5ad_2, recursive = TRUE)
87
  unlink(output_h5ad_merged, recursive = TRUE)
88
  unlink(output_zarr, recursive = TRUE)
89
  
90
  expect_equal(1,1L)
91
})
92
93
test_that("subsetting", {
94
  
95
  # get data
96
  data("xenium_data")
97
  
98
  # HDF5
99
  xenium_data2 <- saveVoltRon(xenium_data, 
100
                              output = output_h5ad, 
101
                              format = "HDF5VoltRon", 
102
                              replace = TRUE, 
103
                              verbose = FALSE)
104
105
  # by spatialpoints
106
  spatpoints <- vrSpatialPoints(xenium_data2)[1:30]
107
  xenium_data2_subset <- subset(xenium_data2, spatialpoints = spatpoints)
108
  expect_equal(vrSpatialPoints(xenium_data2_subset), spatpoints)
109
  
110
  # visualize
111
  vrSpatialPlot(xenium_data2_subset)
112
  vrSpatialFeaturePlot(xenium_data2_subset, features = "KRT15")
113
  
114
  # by image
115
  xenium_data2_subset <- subset(xenium_data2, image = "290x202+98+17")
116
  expect_equal(length(vrSpatialPoints(xenium_data2_subset)), 392)
117
  expect_equal(is(vrImages(xenium_data2_subset)), "magick-image")
118
  expect_equal(is(vrImages(xenium_data2_subset, as.raster = TRUE)), "Image_Array")
119
  
120
  # visualize
121
  vrSpatialPlot(xenium_data2_subset)
122
  vrSpatialFeaturePlot(xenium_data2_subset, features = "KRT15")
123
  
124
  # remove files
125
  unlink(output_h5ad, recursive = TRUE)
126
  
127
  expect_equal(1,1L)
128
})
129
130
test_that("metadata", {
131
  
132
  # get data
133
  data("xenium_data")
134
  
135
  # HDF5
136
  xenium_data2 <- saveVoltRon(xenium_data, 
137
                              output = output_h5ad, 
138
                              format = "HDF5VoltRon", 
139
                              replace = TRUE,
140
                              verbose = FALSE)
141
  
142
  # add column to metadata
143
  xenium_data2$new_column <- vrSpatialPoints(xenium_data2)
144
  
145
  # save updated metadata
146
  xenium_data2 <- saveVoltRon(xenium_data2, verbose = FALSE)
147
  meta.data <- Metadata(xenium_data2)
148
  expect_true(is(meta.data@listData[["new_column"]], "HDF5ColumnVector"))
149
  
150
  # load after update
151
  xenium_data2 <- loadVoltRon(output_h5ad)
152
  meta.data <- Metadata(xenium_data2)
153
  expect_true(is(meta.data@listData[["new_column"]], "HDF5ColumnVector"))
154
  
155
  # remove files
156
  unlink(output_h5ad, recursive = TRUE)
157
  
158
  expect_equal(1,1L)
159
})
160
161
162
test_that("embeddings", {
163
  
164
  # get data
165
  data("xenium_data")
166
  
167
  # HDF5
168
  xenium_data2 <- saveVoltRon(xenium_data, 
169
                              output = output_h5ad, 
170
                              format = "HDF5VoltRon", 
171
                              replace = TRUE, 
172
                              verbose = FALSE)
173
  xenium_data2 <- getPCA(xenium_data2, features = vrFeatures(xenium_data2), type = "pca_key")
174
  
175
  # check embeddings
176
  emb <- vrEmbeddings(xenium_data2, type = "pca_key")
177
  expect_true(all(dim(emb) > 1))
178
  expect_true(all(vrEmbeddingNames(xenium_data2) == c("pca", "umap", "pca_key")))
179
  
180
  # remove files
181
  unlink(output_h5ad, recursive = TRUE)
182
  
183
  expect_equal(1,1L)
184
})
185
186
test_that("visualization", {
187
  
188
  # get data
189
  data("visium_data")
190
  
191
  # HDF5
192
  visium_data2 <- saveVoltRon(visium_data, 
193
                              output = output_h5ad, 
194
                              format = "HDF5VoltRon", 
195
                              replace = TRUE, 
196
                              verbose = FALSE)
197
198
  # check spatial plots
199
  vrSpatialPlot(visium_data2, group.by = "Sample")
200
  vrSpatialFeaturePlot(visium_data2, features = "Count")
201
  
202
  # check multilayer spatial plots
203
  data("merged_object")
204
  merged_object2 <- saveVoltRon(merged_object, 
205
                                output = output_h5ad, 
206
                                format = "HDF5VoltRon", 
207
                                replace = TRUE, 
208
                                verbose = FALSE)
209
  vrSpatialPlot(merged_object2, plot.segments = FALSE, n.tile = 100) |>
210
    addSpatialLayer(merged_object2, assay = "Assay3", group.by = "Sample", alpha = 0.4, colors = list(Block = "blue"))
211
  vrSpatialPlot(merged_object2, plot.segments = TRUE, n.tile = 100) |>
212
    addSpatialLayer(merged_object2, assay = "Assay3", group.by = "Sample", alpha = 0.4, colors = list(Block = "blue"))
213
  vrSpatialPlot(merged_object2, assay = "Assay2", group.by = "gene", alpha = 1, colors = list(KRT15 = "blue", KRT14 = "green"), n.tile = 100) |>
214
    addSpatialLayer(merged_object2, assay = "Assay3", group.by = "Sample", alpha = 0.4, colors = list(Block = "blue"))
215
  
216
  # remove files
217
  unlink(output_h5ad, recursive = TRUE)
218
  
219
  expect_equal(1,1L)
220
})
221
222
test_that("neighbors", {
223
  
224
  # get data
225
  data("xenium_data")
226
  
227
  # HDF5
228
  xenium_data2 <- saveVoltRon(xenium_data, 
229
                              output = output_h5ad, 
230
                              format = "HDF5VoltRon", 
231
                              replace = TRUE, 
232
                              verbose = FALSE)
233
  
234
  # spatial neighbors, delaunay
235
  xenium_data2 <- getSpatialNeighbors(xenium_data2, method = "delaunay")
236
  graphs <- vrGraph(xenium_data2, graph.type = "delaunay")
237
  expect_true(inherits(graphs,"igraph"))
238
  expect_true(length(igraph::E(graphs)) > 0)
239
  
240
  # profile neighbors, kNN
241
  xenium_data2 <- getProfileNeighbors(xenium_data2, method = "kNN", k = 10, data.type = "pca")
242
  graphs <- vrGraph(xenium_data2, graph.type = "kNN")
243
  expect_true(inherits(graphs,"igraph"))
244
  expect_true(length(igraph::E(graphs)) > 0)
245
  xenium_data2 <- getClusters(xenium_data2, graph = "kNN", label = "cluster_knn")
246
  expect_true(is.numeric(unique(xenium_data2$cluster_knn)))
247
  
248
  # update metadata
249
  xenium_data2 <- saveVoltRon(xenium_data2, verbose = FALSE)
250
  meta.data <- Metadata(xenium_data2)
251
  expect_true(is(meta.data@listData[["cluster_knn"]], "HDF5ColumnVector"))
252
  
253
  # load after update
254
  xenium_data2 <- loadVoltRon(output_h5ad)
255
  meta.data <- Metadata(xenium_data2)
256
  expect_true(is(meta.data@listData[["cluster_knn"]], "HDF5ColumnVector"))
257
  
258
  # remove files
259
  unlink(output_h5ad, recursive = TRUE)
260
  
261
  expect_equal(1,1L)
262
})