Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
eb6f5c1
Week 08 - All the Ways to Gate! Go Go Go!
DavidRach Apr 7, 2026
38d4d04
Initial slides
DavidRach Apr 7, 2026
0fa224e
Slides for Week 08
DavidRach Apr 7, 2026
bf8b118
Schedule link and GStoWSP documentation start
DavidRach Apr 8, 2026
b03a833
GatingSet to FlowJo .wsp documentation for CytoML.
DavidRach Apr 8, 2026
c0ca5c1
Embedded video for Week 07 and Week 08
DavidRach Apr 9, 2026
9d1cea1
Updated GStoWSP webpage
DavidRach Apr 9, 2026
b1ed92c
Weekly recall
DavidRach Apr 9, 2026
260f302
Announcements and Homeworks Tabs
DavidRach Apr 12, 2026
a25c034
It's Raining Functions!
DavidRach Apr 14, 2026
84bc833
Initial slide version for Week 09
DavidRach Apr 15, 2026
f6169dd
Updated website and slides, Week 09
DavidRach Apr 15, 2026
bec1952
Sync Pull Copy Commit Walkthrough Video Link, and Week 09 livestream …
DavidRach Apr 15, 2026
e277891
Small slide deck updates for Week 09 (for images off margin)
DavidRach Apr 15, 2026
da6b542
Downsampling - Week 10. Slides and Concatenate inbound
DavidRach Apr 29, 2026
081d146
Downsampling Slides
DavidRach Apr 29, 2026
4b9fadb
Concatenate bug fix (SFC_GatingSet -> gs) and initial recording embed
DavidRach Apr 29, 2026
ecb08ee
Additional Resources and Take Home problems for Week 10
DavidRach Apr 30, 2026
e15b0f8
Updated recording embed for Week 10
DavidRach Apr 30, 2026
2f5f464
Week 11 - Data for Stats
DavidRach May 5, 2026
ee23250
Week 11 slides
DavidRach May 6, 2026
e370d44
Initial embedded recording for Week 11
DavidRach May 6, 2026
34ad0c1
Updated embedded video, you can actually hear the audio this time :D
DavidRach May 7, 2026
e428231
Embedded 03
DavidRach May 7, 2026
6edde42
homework1
biancakbeck May 11, 2026
956e99c
Merge branch 'UMGCCCFCSR:main' into main
biancakbeck May 11, 2026
a83d846
homework week2
biancakbeck May 11, 2026
2029d24
Merge branch 'main' of https://github.com/biancakbeck/CytometryInR2
biancakbeck May 11, 2026
1a8850a
.
biancakbeck May 14, 2026
ce3ee23
homework week9
biancakbeck May 20, 2026
c2e7716
deleting .vscode
biancakbeck May 21, 2026
efc89f9
deleting .vscode
biancakbeck May 21, 2026
c36f151
Community Package Walkthrough for TRU-OLS
DavidRach May 23, 2026
9a0bd94
Windows Julia install screenshots
DavidRach May 23, 2026
d9a8bfd
TRU-OLS Walkthrough complete
DavidRach May 23, 2026
0111f1f
Community package walkthrough for AutoSpectral
DavidRach May 24, 2026
0a4c529
Merge branch 'UMGCCCFCSR:main' into main
biancakbeck May 25, 2026
8ee3359
Homework folders week 10 and 11 (thanks Lynn!), plus extended version…
DavidRach Jun 1, 2026
bbb0c47
Merge branch 'UMGCCCFCSR:main' into main
biancakbeck Jun 2, 2026
f7c52f3
Merge branch 'main' of https://github.com/biancakbeck/CytometryInR2
biancakbeck Jun 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
43 changes: 43 additions & 0 deletions Announcements.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
---
title: "Announcements"
format: html
toc: TRUE
toc-location: right
sidebar: false
---

![](/images/WebsiteBanner.png)

For previous course announcements emails, see the links below.

- January 21, 2026 [Cytometry in R - Start Date, Livestream Times, Pre-Course Materials](https://github.com/UMGCCCFCSR/CytometryInR/discussions/7)

- February 01, 2026 [Cytometry In R - Week #1 - Installing R packages](https://github.com/UMGCCCFCSR/CytometryInR/discussions/11)

- February 09, 2026 [Cytometry in R - Week # 2 - File Paths](https://github.com/UMGCCCFCSR/CytometryInR/discussions/41)

- February 16, 2026 [Cytometry in R - Week #03 - Inside an FCS File](https://github.com/UMGCCCFCSR/CytometryInR/discussions/65)

- February 22, 2026 [Cytometry in R - Week #4 - Introduction to Tidyverse](https://github.com/UMGCCCFCSR/CytometryInR/discussions/85)

- March 01, 2026 [Cytometry in R - Week #5 - Gating Sets](https://github.com/UMGCCCFCSR/CytometryInR/discussions/103)

- March 10, 2026 [No Class This Week](https://github.com/UMGCCCFCSR/CytometryInR/discussions/128)

- March 17, 2026 [Cytometry in R - Week # 6 - Visualizing with ggplot2](https://github.com/UMGCCCFCSR/CytometryInR/discussions/132)

- March 24, 2026 [Cytometry in R - Week # 07 - Applying Transformations](https://github.com/UMGCCCFCSR/CytometryInR/discussions/145)

- March 30, 2026 [Cytometry in R - Course Feedback Survey #1](https://github.com/UMGCCCFCSR/CytometryInR/discussions/151)

- April 07, 2026 [Cytometry in R - Week # 08 - Manual and Automated Gating](https://github.com/UMGCCCFCSR/CytometryInR/discussions/159)

- April 12, 2026 [Cytometry in R - Week # 09 - It's Raining Functions!](https://github.com/UMGCCCFCSR/CytometryInR/discussions/162)

- April 21, 2026 [No Class This Week](https://github.com/UMGCCCFCSR/CytometryInR/discussions/174)

- April 28, 2026 [Cytometry in R - Week # 10 - Downsampling and Concatenation](https://github.com/UMGCCCFCSR/CytometryInR/discussions/179)

- May 05, 2026 [Cytometry in R - Week # 11 - Data for Statistics](https://github.com/UMGCCCFCSR/CytometryInR/discussions/186)

![](images/YouTubeHex.png)
314 changes: 314 additions & 0 deletions Homeworks.qmd

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Cytometry in R is a free virtual mini-course being organized by the [Flow Cytome

We are excited that so many individuals worldwide have chosen to take part, and we look forward to helping you get started on your own learning journeys.

![](/images/WorldwideSignups.png){width=100%}
![](/images/WorldwideSignups.png){width="100%"}

Click here to go to our [Course Website](https://umgcccfcsr.github.io/CytometryInR)

Expand Down
43 changes: 23 additions & 20 deletions Schedule.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ Course materials can be found [here](/course/00_GitHub/index.qmd) or via the Cou

### Conference Break 1

No class week of March 30, 2026. If you are attending the [ABRF conference](https://web.cvent.com/event/6aeb3907-0f0b-418d-a0d5-91f4de72c144/summary?RefId=ABRF%202026%20Annual%20Meeting%20Home%20Page), track me down at the [Complex Data Analysis in Flow Cytometry: Navigating the Landscape](https://web.cvent.com/event/6aeb3907-0f0b-418d-a0d5-91f4de72c144/websitePage:89d4bbd7-0f7c-4235-a335-97866af9506b) talk on Monday, March 30th at 4:30 PM.
No class week of March 30, 2026. If you are attending the [ABRF conference](https://web.cvent.com/event/6aeb3907-0f0b-418d-a0d5-91f4de72c144/summary?RefId=ABRF%202026%20Annual%20Meeting%20Home%20Page), track me down at the [Complex Data Analysis in Flow Cytometry: Navigating the Landscape](https://youtu.be/l9LQZ52gv3k?t=3678) talk on Monday, March 30th at 4:30 PM.

<br>
<br>
Expand All @@ -106,7 +106,7 @@ No class week of March 30, 2026. If you are attending the [ABRF conference](http

![](images/openCyto.png){width=75%}

[**Week 8: April 6, 2026**]{.underline} Within this session, we explore various ways to implement gating for flow cytometry files in R. We will explore manual approaches utilizing [flowGate](https://www.bioconductor.org/packages/release/bioc/html/flowGate.html), as well as automated options with [openCyto](https://www.bioconductor.org/packages/release/bioc/vignettes/openCyto/inst/doc/HowToAutoGating.html) and it's gating templates. We additionally will explore how to provide gate constraints and various ways to visually screen and evaluate the outcomes within the context of our own projects.
[**Week 8: April 6, 2026**]{.underline} Within this [eight](/course/08_WaysToGate/index.qmd) session, we explore various ways to implement gating for flow cytometry files in R. We will explore manual approaches utilizing [flowGate](https://www.bioconductor.org/packages/release/bioc/html/flowGate.html), as well as automated options with [openCyto](https://www.bioconductor.org/packages/release/bioc/vignettes/openCyto/inst/doc/HowToAutoGating.html) and it's gating templates. We additionally will explore how to provide gate constraints and various ways to visually screen and evaluate the outcomes within the context of our own projects.

<br>
<br>
Expand All @@ -117,7 +117,7 @@ No class week of March 30, 2026. If you are attending the [ABRF conference](http

![](https://images2.minutemediacdn.com/image/upload/c_fill,w_720,ar_16:9,f_auto,q_auto,g_auto/shape/cover/sport/raining-monkeys-e3fa8001e4eb47433b1cc58e2017d2b8.png){width=75%}

[**Week 9: April 13, 2026**]{.underline} In the course of this ninth session, we tackle one of the harder but most useful concepts to learn for a beginner, namely [functions](https://r4ds.had.co.nz/functions.html). We explore what they are, how their individual arguments work, how they differ from for-loops, and how to create our own to do useful work, reduce the number times code gets copied and pasted. Additionally, some functional programming best practices will be introduced, as well as provide introduction to how to use the walk and map functions from the [purrr](https://purrr.tidyverse.org/) package.
[**Week 9: April 13, 2026**]{.underline} In the course of this [ninth](/course/09_Functions/index.qmd) session, we tackle one of the harder but most useful concepts to learn for a beginner, namely [functions](https://r4ds.had.co.nz/functions.html). We explore what they are, how their individual arguments work, how they differ from for-loops, and how to create our own to do useful work, reduce the number times code gets copied and pasted. Additionally, some functional programming best practices will be introduced, as well as provide introduction to how to use the walk and map functions from the [purrr](https://purrr.tidyverse.org/) package.

<br>
<br>
Expand All @@ -126,20 +126,29 @@ No class week of March 30, 2026. If you are attending the [ABRF conference](http

![](https://www.ibm.com/content/dam/connectedassets-adobe-cms/worldwide-content/creative-assets/s-migr/ul/g/7d/10/downsampling-near-miss-v3.png){width=50%}

[**Week 10: April 20, 2026**]{.underline} Within this session, we will expand on our growing understanding of GatingSets, functions and fcs file internals to write a script to downsample your fcs files to a desired number (or percentage) of cells for a given cell population. We will additionally learn how to concatenate these downsampled files together, and save them to a new .fcs file in ways that the metadata can be read by commercial software without the scaling being widely thrown off.
[**Week 10: April 27, 2026**]{.underline} Within this [tenth](/course/10_Downsampling/index.qmd) session, we will expand on our growing understanding of GatingSets, functions and fcs file internals to write a function to downsample your fcs files to a desired number (or percentage) of cells for a given cell population. We will additionally learn how to concatenate these downsampled files together, and save them to a new .fcs file in ways that the metadata can be read by commercial software without the scaling being widely thrown off.

<br>
<br>

### Retrieving data for Statistics
### Retrieving Data for Statistics

![](images/TidyData.png){width=33%}

[**Week 11: April 27, 2026**]{.underline} Leveraging the increased familiarity working with the various packages this far in the course, in this session we will retrieve summary statistics for the gates within our GatingSet, and programmatically derrive out tidy data.frames for use in statistical analyses typically used by many Immunologist. In the process, we add a couple additional plot types to our ggplot2 arsenal to hold in reserve should Prism prices go up again.
[**Week 11: May 04, 2026**]{.underline} Leveraging the increased familiarity working with the various packages this far in the course, in this [eleventh](/course/11_DataForStats/index.qmd) session we will retrieve summary statistics for the gates within our GatingSet, and programmatically derrive out tidy data.frames for use in statistical analyses typically used by many Immunologist. In the process, we add a couple additional plot types to our ggplot2 arsenal to hold in reserve should Prism prices go up again.

<br>
<br>

### Conference Break 2

If you are attending the [Cyto conference](https://www.cytoconference.org/?gad_source=1&gad_campaignid=20633392465&gbraid=0AAAAADoJzsvHaLZAq9tqn_aTAQGEzIk_V&gclid=CjwKCAiA-sXMBhAOEiwAGGw6LJFFV69xaAU3s7bElL86RdnRNFwAYqOQO78MrIYQuG1qvRU6HTN3ZRoCGmAQAvD_BwE), track me down at my talks ([Open-Source automation](https://davidrach.github.io/abstracts.html#cyto-2026---flow-awarenesss) on June 7, 10:30-11:30AM at Grand Ballroom;
and [Semi-supervised pipeline](https://davidrach.github.io/abstracts.html#cyto-2026---alpha-beta) on June 9, 10:30-11:45AM atRoom 2DEF) or poster (grab some Cytometry in R course hex stickers!)

<br>
<br>


### Spectral Signatures

![](images/Signatures.png){width=75%}
Expand Down Expand Up @@ -185,13 +194,6 @@ No class week of March 30, 2026. If you are attending the [ABRF conference](http
<br>
<br>

### Conference Break 2

No class week of June 8, 2026. If you are attending the [Cyto conference](https://www.cytoconference.org/?gad_source=1&gad_campaignid=20633392465&gbraid=0AAAAADoJzsvHaLZAq9tqn_aTAQGEzIk_V&gclid=CjwKCAiA-sXMBhAOEiwAGGw6LJFFV69xaAU3s7bElL86RdnRNFwAYqOQO78MrIYQuG1qvRU6HTN3ZRoCGmAQAvD_BwE), track me down at my talks ([Open-Source automation](https://davidrach.github.io/abstracts.html#cyto-2026---flow-awarenesss) on June 7, 10:30-11:30AM at Grand Ballroom;
and [Semi-supervised pipeline](https://davidrach.github.io/abstracts.html#cyto-2026---alpha-beta) on June 9, 10:30-11:45AM atRoom 2DEF) or poster (grab some Cytometry in R course hex stickers!)

<br>
<br>

### Normalization: Batch Effect or Real Biology

Expand Down Expand Up @@ -220,6 +222,14 @@ and [Semi-supervised pipeline](https://davidrach.github.io/abstracts.html#cyto-2
<br>
<br>

### Conference Break 3

No class week of August 10, 2026. If you are attending the [BioC conference](https://bioc2026.bioconductor.org/), track me down at my [short talk](https://bioc2026.bioconductor.org/schedule/) on Monday, August 10th from 11:00-12:15pm.

<br>
<br>


### The Art of GitHub Diving

![](https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTE3IHi5Y2itTmH60RF81y5b8JnSeeJvTTATA&s){width=100%}
Expand Down Expand Up @@ -265,13 +275,6 @@ and [Semi-supervised pipeline](https://davidrach.github.io/abstracts.html#cyto-2
<br>
<br>

### Conference Break 3

No class week of August 10, 2026. If you are attending the [BioC conference](https://bioc2026.bioconductor.org/), track me down at my talk/poster.

<br>
<br>

### Reproducibility and Replicability

![](https://media.springernature.com/lw1200/springer-static/image/art%3A10.1038%2F533452a/MediaObjects/41586_2016_BF533452a_Fige_HTML.jpg){width=50%}
Expand Down
34 changes: 32 additions & 2 deletions _quarto.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,23 @@ project:
- Schedule.qmd
- ExistingResources.qmd
- PackageWalkthroughs.qmd
- Homeworks.qmd
- Announcements.qmd
- course/index.qmd
- course/TakeAwayGallery.qmd
- 00_*
- 01_*
- 02_*
- 03_*
- 04_*
- 05_*
- 06_*
- 07_*
- 07_*
- 08_*
- 09_*
- 10_*
- 11_*
- course/community/**/*.qmd
website:
google-analytics: "G-LZ35J3XE4D"
announcement:
Expand All @@ -35,11 +43,15 @@ website:
href: Schedule.qmd
- text: "Course"
href: course/index.qmd
- text: "Announcements"
href: Announcements.qmd
right:
- text: Existing Resources
href: ExistingResources.qmd
- text: Discussions
href: https://github.com/UMGCCCFCSR/CytometryInR/discussions
- text: Homeworks
href: Homeworks.qmd
- icon: youtube
href: https://www.youtube.com/@CytometryInR
aria-label: YouTube
Expand Down Expand Up @@ -82,12 +94,30 @@ website:
href: course/06_Visualizing/index.qmd
- text: "07 - Applying Transformations"
href: course/07_Transformations/index.qmd
- text: "08 - Ways to Gate"
href: course/08_WaysToGate/index.qmd
- text: "09 - It's Raining Functions!"
href: course/09_Functions/index.qmd
- section: "Cytometry Core"
href: Schedule.qmd
contents:
- text: "10 - Downsampling and Concatenation"
href: course/10_Downsampling/index.qmd
- text: "11 - Data for Statistics"
href: course/11_DataForStats/index.qmd
- section: "Beyond the Sandbox"
href: Schedule.qmd
- section: "The World is your Oyster"
href: Schedule.qmd
- section: "Bonus Content"
contents:
- text: "Concatenate - Extended Cut"
href: course/10_Downsampling/concatenate.qmd
- section: "Community"
contents:
- text: "AutoSpectral"
href: course/community/AutoSpectral/index.qmd
- text: "TRU-OLS"
href: course/community/TRU-OLS/index.qmd
page-footer:
left: Made with [Quarto](https://quarto.org/)
right: |
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
Problem 1
We installed PeacoQC during this session, but we didn’t have time to explore what functions are present within the package. Using what you have learned about accessing documentation, figure out and list what functions it contains
```{r}
library(PeacoQC)
?PeacoQC
```

Problem 2
Take a closer look at the list of Bioconductor cytometry packages. Report back on how many there are currently in Bioconductor, the author/maintainer with the most contributed cytometry R packages, and a couple packages that you would be interested in exploring more in-depth later in the course.

```{r}
#I saved a screenshot in the folder showing how many cytometry related packages I found.

#One of the most active contributors appears to be the RGLab developer group, which maintains several core cytometry packages such as flowCore, flowWorkspace, openCyto, CytoML, and ggcyto. I would be interested in exploring further CytoML for FlowJo integration

```

Problem 3
There is another way to install R packages, using the newer pak package. Positron uses this when installing suggested dependencies.

After learning more about it via the documentation and it’s pkgdown website, I would like you to attempt to install the following three R packages using this newer method: “broom”, “cytoMEM”, “DillonHammill/CytoExploreR”.

Take screenshots, and in a new quarto markdown document, describe how the installation process differed from what you saw for install.packages(), install() and install_github().


```{r}
install.packages("pak")
library(remote)
library(pak)

pak::pkg_install("broom")
pak::pkg_install("cytoMEM")
pak::pkg_install("DillonHammill/CytoExploreR")

#I actually didn´t find it so different, to me, it looks like it took more time to install but it also showed how was going the installation step by step

#I could not install CytoExploreR by pak but it was possible with the install_github

remotes::install_github("DillonHammill/CytoExploreR")

```
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions course/01_InstallingRPackages/index.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ Before getting started, please make sure you have completed the creating a [GitH

:::{.callout-important}
Please make sure to [sync](/course/00_Homeworks/index.qmd#sync-your-fork) your forked version of the CytometryInR repository, and [pull](/course/00_Git/index.qmd#pull) any changes to your local computer's CytometryInR project folder so that you have the most recent version of the code and data available.

For YouTube walkthrough of this process, click [here](https://www.youtube.com/live/Zfctacqpe90?si=a7Ad61kj6_UDNkGw&t=32)
:::

<br>
Expand Down
1 change: 1 addition & 0 deletions course/01_InstallingRPackages/slides.qmd
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ Before getting started, please make sure you have completed the creating a [GitH

Please make sure to [sync](/course/00_Homeworks/index.qmd#sync-your-fork) your forked version of the CytometryInR repository, and [pull](/course/00_Git/index.qmd#pull) any changes to your local computer's CytometryInR project folder so that you have the most recent version of the code and data available.

For YouTube walkthrough of this process, click [here](https://www.youtube.com/live/Zfctacqpe90?si=a7Ad61kj6_UDNkGw&t=32)
:::
:::

Expand Down
70 changes: 70 additions & 0 deletions course/02_FilePaths/homeworks/biancakbeck/homeworkWEEK2.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
Problem 1
Plug in an external hard-drive or USB into your computer. Manually, create a folder within called “TargetFolder”. Try to programmatically specify the file path to identify the folders and files present on your external drive. Then, try to copy your .fcs files from their current folder on your desktop to the TargetFolder on your drive using R. Remember, just copy, no deletion, you need to walk before you can run :D

```{r}
getwd()
FolderLocation <- "D:/TargetFolder"
FolderLocation
list.files(FolderLocation)
files_fcs <- list.files("D:/TargetFolder", pattern=".fcs", full.names=TRUE,recursive=FALSE)
files_fcs

Desktop <- "c:/Users/biihb/desktop"
list.files(Desktop)
file.copy(from=files_fcs , to=Desktop)

```

Problem 2
In this session, we used list.files() with the “full.names argument” set to TRUE, as well as the basename() function to identify specific files. But what if you wanted a particular directory. Run list.files() with “full.names argument” and “recursive” argument set to TRUE, and then search online to find an R function that would retrieve the “” individual directory folders.

```{r}
all_items <- list.files(
path = "D:/TargetFolder",
full.names = TRUE,
recursive = TRUE
)

all_items

list.dirs()
all_dirs <- list.dirs(
path = "D:/TargetFolder",
full.names = TRUE,
recursive = TRUE
)

all_dirs
#After using list.files() with full.names = TRUE and recursive = TRUE, I searched for a function that specifically retrieves directories instead of files. I found that the list.dirs() function in base R can be used to return only folder paths. This function supports recursive searching and full path retrieval similarly to list.files()
```

Problem 3
R packages often come with internal datasets, that are typically used for use in the help documentation examples. These can be accessed through the use of the system.file() function. See an example below.

system.file("extdata", package = "FlowSOM")

Using what we have learned about file.path navigation, search your way down the file.directory of the FlowSOM and flowWorkspace packages, and identify any .fcs files that are present for use in the documentation.

```{r}
library(flowWorkspace)
library(FlowSOM)
system.file("extdata", package = "FlowSOM")
FlowSOM_path <- system.file("extdata", package = "FlowSOM")

FlowSOM_path
list.files(
FlowSOM_path,
pattern = "\\.fcs$",
full.names = TRUE,
recursive = TRUE
)
#I found 1 archive : [1] "C:/Users/biihb/AppData/Local/R/win-library/4.5/FlowSOM/extdata/68983.fcs"

system.file("extdata", package = "flowWorkspace")
flowWorkspace_path <- system.file("extdata", package = "flowWorkspace")
flowWorkspace_path

list.files(flowWorkspace_path, pattern = ".fcs", full.names = TRUE, recursive = TRUE)

#I did not find any
```
Loading