knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
library(astRal) library(cocoframer) library(purrr) library(viridisLite) # optional - nice color palettes library(dplyr) library(reshape2) library(Seurat) library(rgl) library(nat) #library(sf) #library(NNLM)
#Sagittal Energy Matrix ccf_v3_coords_file<-system.file("extdata","p56coord_dev_v3_left.RData",package="astRal") struct_file<-system.file("extdata","p56_dev_structureID_left.RData",package="astRal") group_file<-system.file("extdata","group.RData",package="astRal") energy_file<-system.file("extdata","energy_dev_v3_sagittal.RData",package="astRal") load(ccf_v3_coords_file) load(struct_file) load(group_file) load(energy_file)
# Get structure ontology annotations #ga <- get_ccf_grid_annotation() ontology <- get_mba_ontology() ontology_df <- flatten_mba_ontology(ontology) full_ccf_annot<-ccf_annotation(age="Adult", make_array=FALSE, array_spacing=200, coco_reflect=TRUE) #energy_mat_dims<-aba_array_dims(resolution=200) # Add column names to energy matrix colnames(energy.mat)<-rownames(full_ccf_annot) # Reduce full annotation to only that subset with signal in Allen in situ database energy.annot<-energy.mat[,coordID_annotation_dev_v3_left] reduced.annot<-full_ccf_annot[coordID_annotation_dev_v3_left,] # build a 3d array of ontology structure acronyms - easier to deal with than IDs #oa <- array(ontology_df$acronym[match(ga, ontology_df$id)], dim = dim(ga))
Create SpatialExperiment object from Allen in situ dataset
se <- NewSpatialExperiment(expression_data=energy.annot, spatial_coords=reduced.annot, barcode_metadata = NULL, gene_metadata = NULL)
spatial_plot_3d(se,color_by="Satb2")
## NNMF100 #energy.lognorm<-LogNormalize(exprs(se))%>%as.matrix() # Import existing NNMF120 patterns #patterns_file <- system.file("extdata","NNMF120.1.RData",package="astRal") load("inst/extdata/NNMF120.1.RData") pWeights<-NNMF120.1$H colnames(pWeights)<-rownames(pData(se)) rownames(pWeights)<-paste("pattern",c(1:120),sep="_") patterns.se<-NewSpatialExperiment(expression_data=pWeights, spatial_coords=reduced.annot, barcode_metadata = NULL, gene_metadata = NULL)
open3d() par3d(windowRect = c(20, 30, 1200, 1200)) n<-20 start<-81 mat <- matrix(1:n,nrow=4) layout3d(mat, sharedMouse = TRUE) xlim<-c(1,max(sf::st_bbox(patterns.se@spatialMap))) ylim<-xlim zlim<-ylim for (i in c(start:(start+n))) { next3d() plot3d(sf::st_coordinates(patterns.se@spatialMap),col=myColorRamp(palette=inferno(100),NNMF120.1$H[i,]),size=3,box=F,axes=F,xlab="",ylab="",zlab="",xlim=xlim,ylim=ylim,zlim=zlim, main=i, alpha=(NNMF120.1$H[i,]-min(NNMF120.1$H[i,]))/(max(NNMF120.1$H[i,])-min(NNMF120.1$H[i,]))) }
i<-88 #67,70,77,101,88,105,106 open3d() par3d(windowRect = c(20, 30, 1200, 1200)) plot3d(sf::st_coordinates(patterns.se@spatialMap),col=myColorRamp(palette=inferno(100),NNMF120.1$H[i,]),size=10,box=T,axes=T,xlab="",ylab="",zlab="",xlim=xlim,ylim=ylim,zlim=zlim, alpha=(NNMF120.1$H[i,]-min(NNMF120.1$H[i,]))/(max(NNMF120.1$H[i,])-min(NNMF120.1$H[i,]))) movie3d(spin3d(axis = c(1, 1, 1), rpm = 6),duration = 10,movie = paste0("NNMF120",".1","Pattern_", as.character(i)),dir = "/Users/loyalgoff/Downloads/", convert= NULL) while (rgl.cur() > 0) { rgl.close() }
open3d() i<-65 # Look at 69 next and then 75, then 95+CTX structures <- c("root","RSP") mesh_list <- map(structures, ccf_2017_mesh) names(mesh_list) <- structures xlim<-c(1,max(sf::st_bbox(patterns.se@spatialMap))) ylim<-xlim zlim<-ylim plot_ccf_meshes(mesh_list, fg_structure = c("RSP"), fg_alpha = 0.2, bg_structure = "root", style="matte" ) par3d(windowRect = c(20, 30, 800, 800)) points3d(sf::st_coordinates(patterns.se@spatialMap),col=myColorRamp(palette=inferno(100),NNMF120.1$H[i,]),size=10,box=T,axes=T,xlab="",ylab="",zlab="", alpha=(NNMF120.1$H[i,]-min(NNMF120.1$H[i,]))/(max(NNMF120.1$H[i,])-min(NNMF120.1$H[i,]))) movie3d(spin3d(axis = c(1, 1, 1), rpm = 12),fps=20, duration = 5,movie = paste0("NNMF120",".1","Pattern_", as.character(i)),dir = "/Users/loyalgoff/Downloads/", convert= NULL)
#Projection visualization
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.