From 70f35bcb0ae2029373a1d6b59d42c2b2569c1abb Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Mon, 16 Sep 2024 19:26:26 +0300 Subject: [PATCH 01/19] update vignettes --- DESCRIPTION | 12 ++++++++---- vignettes/pseudobulk_transcriptomics.Rmd | 2 +- .../single_cell_bioconductor_transcriptomics.Rmd | 5 +++-- vignettes/single_cell_seurat_transcriptomics.Rmd | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index c102a6d..c52b4eb 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: tidyomicsWorkshop Title: Tidy genomic and transcriptomic analyses -Version: 0.16.3 +Version: 0.17.0 Authors@R: c( person(given = "Stefano", @@ -14,14 +14,13 @@ Authors@R: email = "michaelisaiahlove@gmail.com", comment = c(ORCID = "0000-0001-8401-0545")) ) -Description: Workflow for BioC conference showing tidy genomic - and transcriptomic analyses. +Description: Workshop material for tidyomics, including transcriptomics and genomics. License: MIT + file LICENSE Encoding: UTF-8 LazyData: true LazyDataCompression: xz Roxygen: list(markdown = TRUE) -RoxygenNote: 7.2.3 +RoxygenNote: 7.3.2 Depends: Biobase, R (>= 4.2.0) @@ -32,6 +31,8 @@ Imports: tidySingleCellExperiment, tidygate, tidyseurat, + SpatialExperiment, + tidySpatialExperiment, stats, utils, tibble, @@ -60,6 +61,9 @@ Suggests: knitr, rmarkdown, pkgdown +Remotes: + satijalab/seurat-wrappers, + william-hutchison/tidySpatialExperiment@ECCB2024 Biarch: true URL: https://tidy-biology.github.io/TidyGenomicsTranscriptomicsWorkshop BugReports: https://github.com/tidy-biology/TidyGenomicsTranscriptomicsWorkshop/issues/new/choose diff --git a/vignettes/pseudobulk_transcriptomics.Rmd b/vignettes/pseudobulk_transcriptomics.Rmd index 3495039..59187d5 100644 --- a/vignettes/pseudobulk_transcriptomics.Rmd +++ b/vignettes/pseudobulk_transcriptomics.Rmd @@ -2,7 +2,7 @@ title: "Tidy Transcriptomics for pseudobulk Sequencing Analyses" author: - Maria Doyle, Peter MacCallum Cancer Centre^[] - - Stefano Mangiola, Walter and Eliza Hall Institute^[] + - Stefano Mangiola, South Australian immunoGENomics Cancer Institute^[], Walter and Eliza Hall Institute^[] output: rmarkdown::html_vignette bibliography: "`r file.path(system.file(package='tidyomicsWorkshop', 'vignettes'), 'tidytranscriptomics.bib')`" vignette: > diff --git a/vignettes/single_cell_bioconductor_transcriptomics.Rmd b/vignettes/single_cell_bioconductor_transcriptomics.Rmd index 25b30ed..a720880 100644 --- a/vignettes/single_cell_bioconductor_transcriptomics.Rmd +++ b/vignettes/single_cell_bioconductor_transcriptomics.Rmd @@ -2,7 +2,7 @@ title: "Tidy Transcriptomics for Single-cell RNA Sequencing Analyses with Bioconductor" author: - Maria Doyle, Peter MacCallum Cancer Centre^[] - - Stefano Mangiola, Walter and Eliza Hall Institute^[] + - Stefano Mangiola, South Australian immunoGENomics Cancer Institute^[], Walter and Eliza Hall Institute^[] output: rmarkdown::html_vignette bibliography: "`r file.path(system.file(package='tidyomicsWorkshop', 'vignettes'), 'tidytranscriptomics.bib')`" vignette: > @@ -17,7 +17,8 @@ knitr::opts_chunk$set(echo = TRUE) ## Instructors -*Dr. Stefano Mangiola* is currently a Postdoctoral researcher in the laboratory of Prof. Tony Papenfuss at the Walter and Eliza Hall Institute in Melbourne, Australia. His background spans from biotechnology to bioinformatics and biostatistics. His research focuses on prostate and breast tumour microenvironment, the development of statistical models for the analysis of RNA sequencing data, and data analysis and visualisation interfaces. +*Dr. Stefano Mangiola* is currently (2024) a group leader in Computational Cancer Immunology at SAiGENCI +(Adelaide) with co-appointment at WEHI Melbourne, Australia. His background spans from biotechnology to bioinformatics and biostatistics. His research focuses on prostate and breast tumour microenvironment, the development of statistical models for the analysis of RNA sequencing data, and data analysis and visualisation interfaces. ## Workshop goals and objectives diff --git a/vignettes/single_cell_seurat_transcriptomics.Rmd b/vignettes/single_cell_seurat_transcriptomics.Rmd index 989ed7e..b3331f5 100644 --- a/vignettes/single_cell_seurat_transcriptomics.Rmd +++ b/vignettes/single_cell_seurat_transcriptomics.Rmd @@ -2,7 +2,7 @@ title: "Tidy Transcriptomics for Single-cell RNA Sequencing Analyses with Seurat" author: - Maria Doyle, Peter MacCallum Cancer Centre^[] - - Stefano Mangiola, Walter and Eliza Hall Institute^[] + - Stefano Mangiola, South Australian immunoGENomics Cancer Institute^[], Walter and Eliza Hall Institute^[] output: rmarkdown::html_vignette bibliography: "`r file.path(system.file(package='tidyomicsWorkshop', 'vignettes'), 'tidytranscriptomics.bib')`" vignette: > From e8e848d16ea7a18e5e923b87809af33fd4f01238 Mon Sep 17 00:00:00 2001 From: Stefano Mangiola Date: Mon, 16 Sep 2024 23:30:52 +0300 Subject: [PATCH 02/19] add vignettes --- .gitignore | 1 + DESCRIPTION | 4 +- data/gate_sce_obj.rda | Bin 352 -> 376 bytes data/gate_seurat_obj.rda | Bin 348 -> 380 bytes data/pbmc_h3k4me3_hg38.rda | Bin 0 -> 268608 bytes data/tidygate_env_gates.rda | Bin 0 -> 456 bytes inst/images/tidySPE_gate.png | Bin 0 -> 918506 bytes inst/images/tidyomics.png | Bin 0 -> 765304 bytes man/gate_seurat_obj.Rd | 16 + man/seurat_obj.Rd | 16 + man/seurat_obj_UMAP3.Rd | 16 + vignettes/pseudobulk_transcriptomics.Rmd | 4 +- ...ngle_cell_bioconductor_transcriptomics.Rmd | 13 +- .../single_cell_seurat_transcriptomics.Rmd | 6 +- vignettes/solutions_transcriptomics.Rmd | 4 +- .../spatial_bioconductor_transcriptomics.Rmd | 687 ++++++++++++++++++ vignettes/supplementary_transcriptomics.Rmd | 29 +- 17 files changed, 771 insertions(+), 25 deletions(-) create mode 100644 data/pbmc_h3k4me3_hg38.rda create mode 100644 data/tidygate_env_gates.rda create mode 100644 inst/images/tidySPE_gate.png create mode 100755 inst/images/tidyomics.png create mode 100644 man/gate_seurat_obj.Rd create mode 100644 man/seurat_obj.Rd create mode 100644 man/seurat_obj_UMAP3.Rd create mode 100644 vignettes/spatial_bioconductor_transcriptomics.Rmd diff --git a/.gitignore b/.gitignore index 1b6032d..938c38c 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ TidyGenomicsTranscriptomicsWorkshop_bioc2023.Rproj .DS_Store /doc/ /Meta/ +tidyomicsWorkshop.Rproj diff --git a/DESCRIPTION b/DESCRIPTION index c52b4eb..5b3a831 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -33,6 +33,7 @@ Imports: tidyseurat, SpatialExperiment, tidySpatialExperiment, + plyranges, stats, utils, tibble, @@ -63,7 +64,8 @@ Suggests: pkgdown Remotes: satijalab/seurat-wrappers, - william-hutchison/tidySpatialExperiment@ECCB2024 + william-hutchison/tidySpatialExperiment@ECCB2024, + stemangiola/tidygate@ECCB2024 Biarch: true URL: https://tidy-biology.github.io/TidyGenomicsTranscriptomicsWorkshop BugReports: https://github.com/tidy-biology/TidyGenomicsTranscriptomicsWorkshop/issues/new/choose diff --git a/data/gate_sce_obj.rda b/data/gate_sce_obj.rda index 9686766f0be3375cc9617351e7d1eb04b7aa7727..5b7520f2f28dbf06467c976ceefb10a999c1b6e1 100755 GIT binary patch delta 360 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