Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 21 additions & 18 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 Down Expand Up @@ -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 [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.
[**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 [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.
[**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
4 changes: 4 additions & 0 deletions _quarto.yml
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,10 @@ website:
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"
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.
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
```
76 changes: 76 additions & 0 deletions course/06_Visualizing/homeworks/biancakbeck/homeworkWEEK6.qmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
Problem 1
In this session, we created beeswarm-style boxplot to display our T-cell frequencies on the y-axis, and timepoint on the x-axis. Using the concepts covered this week, swap out “timepoint” for the “Condition” variable. Adjust other layer arguments accordingly until you can return a similar plot at the end of the class. Finally, figure out how to switch around the order the Condition values are displayed on the x-axis.

```{r}
library(dplyr)
library(ggplot2)
library(ggbeeswarm)

StorageLocation <- file.path("course", "06_Visualizing", "data")

TheCSV <- list.files(StorageLocation, pattern=".csv", full.names=TRUE)
Data <- read.csv(TheCSV, check.names=FALSE)

head(Data, 3)
shape_sex <- c("Female" = 22, "Male" = 21)
fill_sex <- c("Female" = "white", "Male" = "black")
Data <- Data |>
mutate(TcellProportion=Tcells_count/CD45_count) |>
mutate(TcellFrequency=TcellProportion *100) |>
mutate(TcellFrequency=round(TcellFrequency, 1))

Data$timepoint <- factor(Data$timepoint)

ggplot(Data) + aes(x=Condition, y=TcellFrequency) +
geom_boxplot() + geom_beeswarm(size=2.5, cex=2.5, aes(shape=infant_sex, fill=infant_sex)) +
scale_shape_manual(values=shape_sex) + scale_fill_manual(values=fill_sex) +
theme(
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.text.x = element_text(angle=45, hjust=1, size = 12),
axis.text.y = element_text(size=12))

```


Problem 2
Circle back to the CytoML-ggcyto flowplot, and modify it until happy with the visual appearance. You may use any resource on the internet to assist, but you must document your steps so that we can also repeat them.

```{r}
ggplot(Data) + aes(x=Condition, y=TcellFrequency) +
geom_boxplot() + geom_beeswarm(size=2.5, cex=2.5, aes(shape=infant_sex, fill=infant_sex)) +
scale_shape_manual(values=shape_sex) + scale_fill_manual(values=fill_sex) +
theme(
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
axis.text.x = element_text(angle=45, hjust=1, size = 12),
axis.text.y = element_text(size=12)) +theme_classic()
#I just made the background white adding theme_classic(), I tryed to make each bar a different colour but I could not, I just know how to change the dot colors.


```



Problem 3
In Mismatched Assumptions, we saw two examples of a histogram/density overlay showing the distribution of a variable on the x-axis. Similar to what we did during class to show values according to a different data column, try to modify the plot to show data on the basis of group (whether condition, ptype, infant_sex, etc.) similar to what you can see here


```{r}
ggplot(Data) + aes(x=TcellFrequency) + geom_histogram()

#condition
ggplot(Data) + aes(x = TcellFrequency, fill = Condition ) + geom_histogram(alpha = 0.5, position = "identity", bins = 30 )

#ptype
ggplot(Data) + aes(x = TcellFrequency, fill = ptype ) + geom_histogram(alpha = 0.5, position = "identity", bins = 30 )+ facet_wrap(~ infant_sex)

#infant_sex
ggplot(Data) + aes(x = TcellFrequency, fill = infant_sex ) + geom_histogram(alpha = 0.5, position = "identity", bins = 30 )

#ptype and sex
ggplot(Data) + aes(x = TcellFrequency, fill = ptype ) + geom_histogram(alpha = 0.5, position = "identity", bins = 30 )+ facet_wrap(~ infant_sex)

#condition and sex
ggplot(Data) + aes(x = TcellFrequency, fill = Condition ) + geom_histogram(alpha = 0.5, position = "identity", bins = 30 )+facet_wrap(~ infant_sex)
```
Loading