SingleR annotation
library(SingleR)
## Loading required package: SummarizedExperiment
## Loading required package: MatrixGenerics
## Loading required package: matrixStats
##
## Attaching package: 'MatrixGenerics'
## The following objects are masked from 'package:matrixStats':
##
## colAlls, colAnyNAs, colAnys, colAvgsPerRowSet, colCollapse,
## colCounts, colCummaxs, colCummins, colCumprods, colCumsums,
## colDiffs, colIQRDiffs, colIQRs, colLogSumExps, colMadDiffs,
## colMads, colMaxs, colMeans2, colMedians, colMins, colOrderStats,
## colProds, colQuantiles, colRanges, colRanks, colSdDiffs, colSds,
## colSums2, colTabulates, colVarDiffs, colVars, colWeightedMads,
## colWeightedMeans, colWeightedMedians, colWeightedSds,
## colWeightedVars, rowAlls, rowAnyNAs, rowAnys, rowAvgsPerColSet,
## rowCollapse, rowCounts, rowCummaxs, rowCummins, rowCumprods,
## rowCumsums, rowDiffs, rowIQRDiffs, rowIQRs, rowLogSumExps,
## rowMadDiffs, rowMads, rowMaxs, rowMeans2, rowMedians, rowMins,
## rowOrderStats, rowProds, rowQuantiles, rowRanges, rowRanks,
## rowSdDiffs, rowSds, rowSums2, rowTabulates, rowVarDiffs, rowVars,
## rowWeightedMads, rowWeightedMeans, rowWeightedMedians,
## rowWeightedSds, rowWeightedVars
## Loading required package: GenomicRanges
## Loading required package: stats4
## Loading required package: BiocGenerics
## Loading required package: parallel
##
## Attaching package: 'BiocGenerics'
## The following objects are masked from 'package:parallel':
##
## clusterApply, clusterApplyLB, clusterCall, clusterEvalQ,
## clusterExport, clusterMap, parApply, parCapply, parLapply,
## parLapplyLB, parRapply, parSapply, parSapplyLB
## The following objects are masked from 'package:stats':
##
## IQR, mad, sd, var, xtabs
## The following objects are masked from 'package:base':
##
## anyDuplicated, append, as.data.frame, basename, cbind, colnames,
## dirname, do.call, duplicated, eval, evalq, Filter, Find, get, grep,
## grepl, intersect, is.unsorted, lapply, Map, mapply, match, mget,
## order, paste, pmax, pmax.int, pmin, pmin.int, Position, rank,
## rbind, Reduce, rownames, sapply, setdiff, sort, table, tapply,
## union, unique, unsplit, which.max, which.min
## Loading required package: S4Vectors
##
## Attaching package: 'S4Vectors'
## The following object is masked from 'package:base':
##
## expand.grid
## Loading required package: IRanges
## Loading required package: GenomeInfoDb
## Loading required package: Biobase
## Welcome to Bioconductor
##
## Vignettes contain introductory material; view with
## 'browseVignettes()'. To cite Bioconductor, see
## 'citation("Biobase")', and for packages 'citation("pkgname")'.
##
## Attaching package: 'Biobase'
## The following object is masked from 'package:MatrixGenerics':
##
## rowMedians
## The following objects are masked from 'package:matrixStats':
##
## anyMissing, rowMedians
library(Seurat)
## Attaching SeuratObject
##
## Attaching package: 'Seurat'
## The following object is masked from 'package:SummarizedExperiment':
##
## Assays
library(celldex)
##
## Attaching package: 'celldex'
## The following objects are masked from 'package:SingleR':
##
## BlueprintEncodeData, DatabaseImmuneCellExpressionData,
## HumanPrimaryCellAtlasData, ImmGenData, MonacoImmuneData,
## MouseRNAseqData, NovershternHematopoieticData
library(SingleCellExperiment)
library(devtools)
## Loading required package: usethis
pbmc <- readRDS("/mnt/nectar_volume/home/eraz0001/KELLY 2020/E11.5/Final_15_clusters.RDS")
mimd.sc <- SingleR::MouseRNAseqData()
## Warning: 'SingleR::MouseRNAseqData' is deprecated.
## Use 'celldex::MouseRNAseqData' instead.
## See help("Deprecated")
## snapshotDate(): 2020-10-27
## see ?celldex and browseVignettes('celldex') for documentation
## loading from cache
## see ?celldex and browseVignettes('celldex') for documentation
## loading from cache
mimd.sc
## class: SummarizedExperiment
## dim: 21214 358
## metadata(0):
## assays(1): logcounts
## rownames(21214): Xkr4 Rp1 ... LOC100039574 LOC100039753
## rowData names(0):
## colnames(358): ERR525589Aligned ERR525592Aligned ... SRR1044043Aligned
## SRR1044044Aligned
## colData names(3): label.main label.fine label.ont
sce <- as.SingleCellExperiment(pbmc)
sce
## class: SingleCellExperiment
## dim: 16968 2333
## metadata(0):
## assays(3): counts logcounts scaledata
## rownames(16968): Rp1 Sox17 ... mt-Cytb Cd99
## rowData names(0):
## colnames(2333): AAACCTGAGACGCACA-1 AAACCTGCACAGACAG-1 ...
## TTTGTCATCTAGAGTC-1 TTTGTCATCTTTAGGG-1
## colData names(19): orig.ident nCount_RNA ... RNA_snn_res.2 ident
## reducedDimNames(2): PCA UMAP
## altExpNames(0):
main.group <- SingleR(test = sce,ref = mimd.sc, labels = mimd.sc$label.main)
fine.group <- SingleR(test = sce, ref = mimd.sc,labels = mimd.sc$label.fine)
table(main.group$pruned.labels)
##
## B cells Cardiomyocytes Endothelial cells Epithelial cells
## 2 1 318 1
## Erythrocytes Fibroblasts Hepatocytes Macrophages
## 8 1930 27 3
## Monocytes Neurons NK cells T cells
## 18 3 1 7
table(fine.group$pruned.labels)
##
## aNSCs B cells Cardiomyocytes
## 11 3 1
## Endothelial cells Erythrocytes Fibroblasts
## 319 3 23
## Fibroblasts senescent Granulocytes Hepatocytes
## 594 1 2
## Macrophages Monocytes NK cells
## 2 19 2
## NPCs OPCs T cells
## 1332 8 5
plotScoreHeatmap(main.group, max.labels = 8, clusters = pbmc$seurat_clusters, order.by = "clusters", show_colnames = F)

plotScoreHeatmap(fine.group, max.labels = 8, clusters = pbmc$seurat_clusters, order.by = "clusters", show_colnames = F)

mimd.sc@assays@data@listData[["logcounts"]][1:30]
## [1] 4.377727 3.336021 3.940646 9.042406 8.661706 8.974992 4.189599
## [8] 7.768620 3.336021 3.336021 9.225259 3.336021 3.336021 10.498472
## [15] 3.336021 5.291547 9.940517 8.128016 3.763161 3.940646 8.451546
## [22] 4.668700 5.499514 4.668700 5.043116 3.336021 3.336021 7.837134
## [29] 6.603874 8.665132
pred.comb <- combineCommonResults(list("broad" = main.group, "Fine" = fine.group))
## Warning in combineCommonResults(list(broad = main.group, Fine = fine.group)):
## common genes are not identical
plotScoreHeatmap(pred.comb, max.labels = 8, clusters = pbmc$seurat_clusters, order.by = "clusters", show_colnames = F)

pbmc$predicted_ID <- pred.comb$pruned.labels
table(pbmc$predicted_ID, pbmc$seurat_clusters)
##
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13
## aNSCs 1 3 0 3 0 0 0 0 0 1 1 0 0 1
## B cells 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## Cardiomyocytes 0 0 0 0 1 0 0 0 0 0 0 0 0 0
## Endothelial cells 0 1 0 0 0 0 172 0 145 0 0 0 0 1
## Erythrocytes 0 0 0 0 0 0 1 0 0 0 0 0 0 0
## Fibroblasts 0 3 1 0 6 7 0 0 0 2 14 5 0 1
## Fibroblasts senescent 19 44 40 20 121 75 0 15 0 30 59 54 67 29
## Granulocytes 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## Hepatocytes 0 0 0 0 0 0 0 0 0 0 0 0 0 2
## Macrophages 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## Monocytes 0 0 1 0 0 0 0 0 0 0 0 0 0 0
## NK cells 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## NPCs 222 146 152 166 57 92 1 133 0 100 59 59 47 64
## OPCs 1 2 0 1 0 3 0 0 0 0 0 0 0 1
## T cells 0 0 0 0 0 0 0 0 0 0 0 0 0 0
##
## 14 15
## aNSCs 1 0
## B cells 0 3
## Cardiomyocytes 0 0
## Endothelial cells 0 0
## Erythrocytes 0 2
## Fibroblasts 0 0
## Fibroblasts senescent 10 0
## Granulocytes 0 1
## Hepatocytes 0 0
## Macrophages 0 3
## Monocytes 0 18
## NK cells 0 2
## NPCs 29 0
## OPCs 0 0
## T cells 0 5
pbmc@meta.data$main.group <- main.group$pruned.labels
pbmc@meta.data$fine.group <- fine.group$pruned.labels
pbmc <- SetIdent(pbmc, value = "fine.group")
a <- DimPlot(pbmc, label = T , repel = T,pt.size = 2, label.size = 4)
a
## Warning: ggrepel: 7 unlabeled data points (too many overlaps). Consider
## increasing max.overlaps

session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
## setting value
## version R version 4.0.2 (2020-06-22)
## os Ubuntu 20.04.4 LTS
## system x86_64, linux-gnu
## ui X11
## language (EN)
## collate en_AU.UTF-8
## ctype en_AU.UTF-8
## tz Australia/Melbourne
## date 2022-06-20
## pandoc 2.17.1.1 @ /usr/lib/rstudio-server/bin/quarto/bin/ (via rmarkdown)
##
## ─ Packages ───────────────────────────────────────────────────────────────────
## package * version date (UTC) lib source
## abind 1.4-5 2016-07-21 [1] CRAN (R 4.0.2)
## AnnotationDbi 1.52.0 2020-10-27 [1] Bioconductor
## AnnotationHub 2.22.1 2021-04-16 [1] Bioconductor
## assertthat 0.2.1 2019-03-21 [1] CRAN (R 4.0.2)
## beachmat 2.6.4 2020-12-20 [1] Bioconductor
## Biobase * 2.50.0 2020-10-27 [1] Bioconductor
## BiocFileCache 1.14.0 2020-10-27 [1] Bioconductor
## BiocGenerics * 0.36.1 2021-04-16 [1] Bioconductor
## BiocManager 1.30.16 2021-06-15 [1] CRAN (R 4.0.2)
## BiocNeighbors 1.8.2 2020-12-07 [1] Bioconductor
## BiocParallel 1.24.1 2020-11-06 [1] Bioconductor
## BiocSingular 1.6.0 2020-10-27 [1] Bioconductor
## BiocVersion 3.12.0 2020-04-27 [1] Bioconductor
## bit 4.0.4 2020-08-04 [1] CRAN (R 4.0.2)
## bit64 4.0.5 2020-08-30 [1] CRAN (R 4.0.2)
## bitops 1.0-7 2021-04-24 [1] CRAN (R 4.0.2)
## blob 1.2.2 2021-07-23 [1] CRAN (R 4.0.2)
## brio 1.1.3 2021-11-30 [1] CRAN (R 4.0.2)
## bslib 0.3.1 2021-10-06 [1] CRAN (R 4.0.2)
## cachem 1.0.6 2021-08-19 [1] CRAN (R 4.0.2)
## callr 3.7.0 2021-04-20 [1] CRAN (R 4.0.2)
## celldex * 1.0.0 2020-10-29 [1] Bioconductor
## cli 3.2.0 2022-02-14 [1] CRAN (R 4.0.2)
## cluster 2.1.3 2022-03-28 [1] CRAN (R 4.0.2)
## codetools 0.2-16 2018-12-24 [2] CRAN (R 4.0.2)
## colorspace 2.0-2 2021-06-24 [1] CRAN (R 4.0.2)
## cowplot 1.1.1 2020-12-30 [1] CRAN (R 4.0.2)
## crayon 1.4.2 2021-10-29 [1] CRAN (R 4.0.2)
## curl 4.3.2 2021-06-23 [1] CRAN (R 4.0.2)
## data.table 1.14.2 2021-09-27 [1] CRAN (R 4.0.2)
## DBI 1.1.2 2021-12-20 [1] CRAN (R 4.0.2)
## dbplyr 2.1.1 2021-04-06 [1] CRAN (R 4.0.2)
## DelayedArray 0.16.3 2021-03-24 [1] Bioconductor
## DelayedMatrixStats 1.12.3 2021-02-03 [1] Bioconductor
## deldir 1.0-6 2021-10-23 [1] CRAN (R 4.0.2)
## desc 1.4.0 2021-09-28 [1] CRAN (R 4.0.2)
## devtools * 2.4.3 2021-11-30 [1] CRAN (R 4.0.2)
## digest 0.6.29 2021-12-01 [1] CRAN (R 4.0.2)
## dplyr 1.0.8 2022-02-08 [1] CRAN (R 4.0.2)
## ellipsis 0.3.2 2021-04-29 [1] CRAN (R 4.0.2)
## evaluate 0.15 2022-02-18 [1] CRAN (R 4.0.2)
## ExperimentHub 1.16.1 2021-04-16 [1] Bioconductor
## fansi 1.0.2 2022-01-14 [1] CRAN (R 4.0.2)
## farver 2.1.0 2021-02-28 [1] CRAN (R 4.0.2)
## fastmap 1.1.0 2021-01-25 [1] CRAN (R 4.0.2)
## fitdistrplus 1.1-6 2021-09-28 [1] CRAN (R 4.0.2)
## fs 1.5.2 2021-12-08 [1] CRAN (R 4.0.2)
## future 1.23.0 2021-10-31 [1] CRAN (R 4.0.2)
## future.apply 1.8.1 2021-08-10 [1] CRAN (R 4.0.2)
## generics 0.1.2 2022-01-31 [1] CRAN (R 4.0.2)
## GenomeInfoDb * 1.26.7 2021-04-08 [1] Bioconductor
## GenomeInfoDbData 1.2.4 2022-02-02 [1] Bioconductor
## GenomicRanges * 1.42.0 2020-10-27 [1] Bioconductor
## ggplot2 3.3.6 2022-05-03 [1] CRAN (R 4.0.2)
## ggrepel 0.9.1 2021-01-15 [1] CRAN (R 4.0.2)
## ggridges 0.5.3 2021-01-08 [1] CRAN (R 4.0.2)
## globals 0.14.0 2020-11-22 [1] CRAN (R 4.0.2)
## glue 1.6.1 2022-01-22 [1] CRAN (R 4.0.2)
## goftest 1.2-3 2021-10-07 [1] CRAN (R 4.0.2)
## gridExtra 2.3 2017-09-09 [1] CRAN (R 4.0.2)
## gtable 0.3.0 2019-03-25 [1] CRAN (R 4.0.2)
## highr 0.9 2021-04-16 [1] CRAN (R 4.0.2)
## htmltools 0.5.2 2021-08-25 [1] CRAN (R 4.0.2)
## htmlwidgets 1.5.4 2021-09-08 [1] CRAN (R 4.0.2)
## httpuv 1.6.5 2022-01-05 [1] CRAN (R 4.0.2)
## httr 1.4.2 2020-07-20 [1] CRAN (R 4.0.2)
## ica 1.0-2 2018-05-24 [1] CRAN (R 4.0.2)
## igraph 1.2.11 2022-01-04 [1] CRAN (R 4.0.2)
## interactiveDisplayBase 1.28.0 2020-10-27 [1] Bioconductor
## IRanges * 2.24.1 2020-12-12 [1] Bioconductor
## irlba 2.3.5 2021-12-06 [1] CRAN (R 4.0.2)
## jquerylib 0.1.4 2021-04-26 [1] CRAN (R 4.0.2)
## jsonlite 1.7.3 2022-01-17 [1] CRAN (R 4.0.2)
## KernSmooth 2.23-17 2020-04-26 [2] CRAN (R 4.0.2)
## knitr 1.39 2022-04-26 [1] CRAN (R 4.0.2)
## labeling 0.4.2 2020-10-20 [1] CRAN (R 4.0.2)
## later 1.3.0 2021-08-18 [1] CRAN (R 4.0.2)
## lattice 0.20-41 2020-04-02 [2] CRAN (R 4.0.2)
## lazyeval 0.2.2 2019-03-15 [1] CRAN (R 4.0.2)
## leiden 0.3.9 2021-07-27 [1] CRAN (R 4.0.2)
## lifecycle 1.0.1 2021-09-24 [1] CRAN (R 4.0.2)
## listenv 0.8.0 2019-12-05 [1] CRAN (R 4.0.2)
## lmtest 0.9-39 2021-11-07 [1] CRAN (R 4.0.2)
## magrittr 2.0.2 2022-01-26 [1] CRAN (R 4.0.2)
## MASS 7.3-51.6 2020-04-26 [2] CRAN (R 4.0.2)
## Matrix 1.4-0 2021-12-08 [1] CRAN (R 4.0.2)
## MatrixGenerics * 1.2.1 2021-01-30 [1] Bioconductor
## matrixStats * 0.61.0 2021-09-17 [1] CRAN (R 4.0.2)
## memoise 2.0.1 2021-11-26 [1] CRAN (R 4.0.2)
## mgcv 1.8-31 2019-11-09 [2] CRAN (R 4.0.2)
## mime 0.12 2021-09-28 [1] CRAN (R 4.0.2)
## miniUI 0.1.1.1 2018-05-18 [1] CRAN (R 4.0.2)
## munsell 0.5.0 2018-06-12 [1] CRAN (R 4.0.2)
## nlme 3.1-148 2020-05-24 [2] CRAN (R 4.0.2)
## parallelly 1.30.0 2021-12-17 [1] CRAN (R 4.0.2)
## patchwork 1.1.1 2020-12-17 [1] CRAN (R 4.0.2)
## pbapply 1.5-0 2021-09-16 [1] CRAN (R 4.0.2)
## pheatmap 1.0.12 2019-01-04 [1] CRAN (R 4.0.2)
## pillar 1.7.0 2022-02-01 [1] CRAN (R 4.0.2)
## pkgbuild 1.3.1 2021-12-20 [1] CRAN (R 4.0.2)
## pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 4.0.2)
## pkgload 1.2.4 2021-11-30 [1] CRAN (R 4.0.2)
## plotly 4.10.0 2021-10-09 [1] CRAN (R 4.0.2)
## plyr 1.8.6 2020-03-03 [1] CRAN (R 4.0.2)
## png 0.1-7 2013-12-03 [1] CRAN (R 4.0.2)
## polyclip 1.10-0 2019-03-14 [1] CRAN (R 4.0.2)
## prettyunits 1.1.1 2020-01-24 [1] CRAN (R 4.0.2)
## processx 3.5.2 2021-04-30 [1] CRAN (R 4.0.2)
## promises 1.2.0.1 2021-02-11 [1] CRAN (R 4.0.2)
## ps 1.6.0 2021-02-28 [1] CRAN (R 4.0.2)
## purrr 0.3.4 2020-04-17 [1] CRAN (R 4.0.2)
## R6 2.5.1 2021-08-19 [1] CRAN (R 4.0.2)
## RANN 2.6.1 2019-01-08 [1] CRAN (R 4.0.2)
## rappdirs 0.3.3 2021-01-31 [1] CRAN (R 4.0.2)
## RColorBrewer 1.1-2 2014-12-07 [1] CRAN (R 4.0.2)
## Rcpp 1.0.8 2022-01-13 [1] CRAN (R 4.0.2)
## RcppAnnoy 0.0.19 2021-07-30 [1] CRAN (R 4.0.2)
## RCurl 1.98-1.5 2021-09-17 [1] CRAN (R 4.0.2)
## remotes 2.4.2 2021-11-30 [1] CRAN (R 4.0.2)
## reshape2 1.4.4 2020-04-09 [1] CRAN (R 4.0.2)
## reticulate 1.24 2022-01-26 [1] CRAN (R 4.0.2)
## rlang 1.0.2 2022-03-04 [1] CRAN (R 4.0.2)
## rmarkdown 2.14 2022-04-25 [1] CRAN (R 4.0.2)
## ROCR 1.0-11 2020-05-02 [1] CRAN (R 4.0.2)
## rpart 4.1-15 2019-04-12 [2] CRAN (R 4.0.2)
## rprojroot 2.0.2 2020-11-15 [1] CRAN (R 4.0.2)
## RSQLite 2.2.9 2021-12-06 [1] CRAN (R 4.0.2)
## rstudioapi 0.13 2020-11-12 [1] CRAN (R 4.0.2)
## rsvd 1.0.5 2021-04-16 [1] CRAN (R 4.0.2)
## Rtsne 0.15 2018-11-10 [1] CRAN (R 4.0.2)
## S4Vectors * 0.28.1 2020-12-09 [1] Bioconductor
## sass 0.4.0 2021-05-12 [1] CRAN (R 4.0.2)
## scales 1.1.1 2020-05-11 [1] CRAN (R 4.0.2)
## scattermore 0.7 2020-11-24 [1] CRAN (R 4.0.2)
## sctransform 0.3.3 2022-01-13 [1] CRAN (R 4.0.2)
## sessioninfo 1.2.2 2021-12-06 [1] CRAN (R 4.0.2)
## Seurat * 4.1.0 2022-01-14 [1] CRAN (R 4.0.2)
## SeuratObject * 4.0.4 2021-11-23 [1] CRAN (R 4.0.2)
## shiny 1.7.1 2021-10-02 [1] CRAN (R 4.0.2)
## SingleCellExperiment * 1.12.0 2020-10-27 [1] Bioconductor
## SingleR * 1.4.1 2021-02-02 [1] Bioconductor
## sparseMatrixStats 1.2.1 2021-02-02 [1] Bioconductor
## spatstat.core 2.3-2 2021-11-26 [1] CRAN (R 4.0.2)
## spatstat.data 2.1-2 2021-12-17 [1] CRAN (R 4.0.2)
## spatstat.geom 2.3-1 2021-12-10 [1] CRAN (R 4.0.2)
## spatstat.sparse 2.1-0 2021-12-17 [1] CRAN (R 4.0.2)
## spatstat.utils 2.3-0 2021-12-12 [1] CRAN (R 4.0.2)
## stringi 1.7.6 2021-11-29 [1] CRAN (R 4.0.2)
## stringr 1.4.0 2019-02-10 [1] CRAN (R 4.0.2)
## SummarizedExperiment * 1.20.0 2020-10-27 [1] Bioconductor
## survival 3.1-12 2020-04-10 [2] CRAN (R 4.0.2)
## tensor 1.5 2012-05-05 [1] CRAN (R 4.0.2)
## testthat 3.1.2 2022-01-20 [1] CRAN (R 4.0.2)
## tibble 3.1.6 2021-11-07 [1] CRAN (R 4.0.2)
## tidyr 1.2.0 2022-02-01 [1] CRAN (R 4.0.2)
## tidyselect 1.1.2 2022-02-21 [1] CRAN (R 4.0.2)
## usethis * 2.1.5 2021-12-09 [1] CRAN (R 4.0.2)
## utf8 1.2.2 2021-07-24 [1] CRAN (R 4.0.2)
## uwot 0.1.11 2021-12-02 [1] CRAN (R 4.0.2)
## vctrs 0.3.8 2021-04-29 [1] CRAN (R 4.0.2)
## viridis 0.6.2 2021-10-13 [1] CRAN (R 4.0.2)
## viridisLite 0.4.0 2021-04-13 [1] CRAN (R 4.0.2)
## withr 2.4.3 2021-11-30 [1] CRAN (R 4.0.2)
## xfun 0.30 2022-03-02 [1] CRAN (R 4.0.2)
## xtable 1.8-4 2019-04-21 [1] CRAN (R 4.0.2)
## XVector 0.30.0 2020-10-27 [1] Bioconductor
## yaml 2.2.2 2022-01-25 [1] CRAN (R 4.0.2)
## zlibbioc 1.36.0 2020-10-27 [1] Bioconductor
## zoo 1.8-9 2021-03-09 [1] CRAN (R 4.0.2)
##
## [1] /mnt/nectar_volume/home/eraz0001/R/x86_64-pc-linux-gnu-library/4.0
## [2] /mnt/nectar_volume/software/apps/R/4.0.2/lib/R/library
##
## ──────────────────────────────────────────────────────────────────────────────